diff --git a/nix/config/release.nix b/nix/config/release.nix
index dd4f96343da7488c756ec3bd406797f9b4ac383e..bfdce8fdf6513c77d89984bbb2baa0165dcc1788 100644
--- a/nix/config/release.nix
+++ b/nix/config/release.nix
@@ -3,4 +3,4 @@
   commit = "343ca25417e56177443e310c8fecae16010c8ecf";
   name = "Monster";
   mnemonic = "monster";
-}
\ No newline at end of file
+}
diff --git a/source/components/datatable/filter.mjs b/source/components/datatable/filter.mjs
index 0cfc218a4081bdd70d177c13a218f80467a43fea..8cfea89d4680a01b7233af992ef4f03068dd8003 100644
--- a/source/components/datatable/filter.mjs
+++ b/source/components/datatable/filter.mjs
@@ -1032,12 +1032,9 @@ function collectSearchQueries() {
  * @return {null|Array|undefined|string}
  */
 function getControlValuesFromLabel(label) {
-
 	// finde das erste Kind-Element vom type input
 	// wenn es ein input-Element ist, dann @todo
 
-
-
 	const foundControl = label.firstElementChild;
 
 	if (foundControl) {
diff --git a/source/components/form/api-bar.mjs b/source/components/form/api-bar.mjs
index dd2e6b0f86a09f473ac604d00a2ac4bafe25ba6d..b37bd0cb12f9fa8a4da0cd1bef67428b940722ea 100644
--- a/source/components/form/api-bar.mjs
+++ b/source/components/form/api-bar.mjs
@@ -10,35 +10,41 @@
  * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
 
-import {instanceSymbol} from "../../constants.mjs";
-import {addAttributeToken} from "../../dom/attributes.mjs";
+import { instanceSymbol } from "../../constants.mjs";
+import { addAttributeToken } from "../../dom/attributes.mjs";
 import {
-    ATTRIBUTE_ERRORMESSAGE,
-    ATTRIBUTE_ROLE,
+	ATTRIBUTE_ERRORMESSAGE,
+	ATTRIBUTE_ROLE,
 } from "../../dom/constants.mjs";
 import {
-    assembleMethodSymbol,
-    registerCustomElement,
+	assembleMethodSymbol,
+	registerCustomElement,
 } from "../../dom/customelement.mjs";
 
-import {isArray, isFunction, isString, isIterable, isObject, isPrimitive} from "../../types/is.mjs";
-import {fireCustomEvent} from "../../dom/events.mjs";
-import {ButtonBar} from "./button-bar.mjs";
-import {validateString} from "../../types/validate.mjs";
-import {Pathfinder} from "../../data/pathfinder.mjs";
-import {buildMap} from "../../data/buildmap.mjs";
-import {ApiButtonStyleSheet} from "./stylesheet/api-button.mjs";
-import {Formatter} from "../../text/formatter.mjs";
-import {getGlobal} from "../../types/global.mjs";
+import {
+	isArray,
+	isFunction,
+	isString,
+	isIterable,
+	isObject,
+	isPrimitive,
+} from "../../types/is.mjs";
+import { fireCustomEvent } from "../../dom/events.mjs";
+import { ButtonBar } from "./button-bar.mjs";
+import { validateString } from "../../types/validate.mjs";
+import { Pathfinder } from "../../data/pathfinder.mjs";
+import { buildMap } from "../../data/buildmap.mjs";
+import { ApiButtonStyleSheet } from "./stylesheet/api-button.mjs";
+import { Formatter } from "../../text/formatter.mjs";
+import { getGlobal } from "../../types/global.mjs";
 
 import "./button.mjs";
 import "./message-state-button.mjs";
 import "./state-button.mjs";
-import {MessageStateButton} from "./message-state-button.mjs";
-import {StateButton} from "./state-button.mjs";
-
-export {ApiBar};
+import { MessageStateButton } from "./message-state-button.mjs";
+import { StateButton } from "./state-button.mjs";
 
+export { ApiBar };
 
 /**
  * A ApiBar
@@ -52,251 +58,251 @@ export {ApiBar};
  * @summary A beautiful ApiBar that can make your life easier and also looks good.
  */
 class ApiBar extends ButtonBar {
-    /**
-     * This method is called by the `instanceof` operator.
-     * @returns {symbol}
-     */
-    static get [instanceSymbol]() {
-        return Symbol.for("@schukai/monster/components/form/api-bar@@instance");
-    }
-
-    /**
-     * To set the options via the HTML tag, the attribute `data-monster-options` must be used.
-     * @see {@link https://monsterjs.org/en/doc/#configurate-a-monster-control}
-     *
-     * The individual configuration values can be found in the table.
-     *
-     * @property {object} mapping - The mapping object.
-     * @property {string} mapping.selector - The selector to find the buttons in the response.
-     * @property {string} mapping.labelSelector - The selector to find the label for the button.
-     * @property {string} mapping.labelTemplate - The template to create the label for the button.
-     * @property {string} mapping.apiTemplate - The key to find the api value in the response.
-     * @property {string} mapping.urlTemplate - The key to find the url value in the response, if empty the api value is used.
-     * @property {function} mapping.filter - The filter function to filter the buttons.
-     * @property {string} url - The url to fetch the data.
-     * @property {string} buttonTag - The tag name of the button
-     * @property {object} api - The api options.
-     * @property {object} api.fetch - The fetch options.
-     * @property {string} api.body - The body template.
-     * @property {object} callbacks - The callbacks object.
-     * @property {function} callbacks.beforeApiCall - The beforeApiCall callback called before the api request is made.
-     * @property {function} callbacks.failedApiCall - The failedApiCall callback called when the api request failed.
-     * @property {function} callbacks.successfulApiCall - The successfulApiCall callback called when the api request was successful.
-     * @property {object} fetch - The fetch options.
-     * @property {string} fetch.redirect - The redirect option.
-     * @property {string} fetch.method - The method option.
-     * @property {string} fetch.mode - The mode option.
-     * @property {string} fetch.credentials - The credentials option.
-     * @property {object} fetch.headers - The headers option.
-     * @property {string} fetch.headers.accept - The acceptance option.
-     * @property {object} actions - The actions object.
-     * @property {function} actions.execute - The execute action.
-     * @property {object} data - The data object, this can be used to store some data and send it with the request.
-     * @extends {ActionButton.defaults}
-     */
-    get defaults() {
-        const opts = Object.assign({}, super.defaults, {
-            mapping: {
-                selector: "*",
-                labelSelector: "",
-                labelTemplate: "",
-                apiTemplate: "",
-                urlTemplate: "",
-                filter: "",
-            },
-            api: {
-                fetch: {
-                    method: "POST",
-                    redirect: "error",
-                    mode: "same-origin",
-                    credentials: "same-origin",
-                    headers: {
-                        accept: "application/json",
-                    },
-                },
-                body: null,
-            },
-            url: "",
-            buttonTag: "monster-message-state-button",
-            callbacks: {
-                beforeApiCal: null,
-                failedApiCall: null,
-                successfulApiCall: null,
-            },
-            fetch: {
-                redirect: "error",
-                method: "GET",
-                mode: "same-origin",
-                credentials: "same-origin",
-                headers: {
-                    accept: "application/json",
-                },
-            },
-            actions: {
-                execute: executeAPIButton
-            },
-            data: null
-        });
-
-        return opts;
-    }
-
-    /**
-     *
-     * @return {Promise}
-     */
-    fetch(url) {
-        if (url instanceof URL) {
-            url = url.toString();
-        }
-
-        if (url !== undefined) {
-            url = validateString(url);
-        }
-
-        return fetchData.call(this, url).then((map) => {
-            if (
-                isObject(map) ||
-                isArray(map) | (map instanceof Set) ||
-                map instanceof Map
-            ) {
-                this.importButtons(map);
-            }
-        });
-    }
-
-    /**
-     * Import buttons from a map.
-     *
-     * @param {array|object|Map|Set} data
-     * @return {ApiButton}
-     * @throws {Error} map is not iterable
-     * @throws {Error} missing label configuration
-     */
-    importButtons(data) {
-
-        const self = this;
-
-        const currentButtons = self.querySelectorAll(`[${ATTRIBUTE_ROLE}="api-button"]`);
-        for (const btnElement of currentButtons) {
-            btnElement.remove();
-        }
-
-        const mappingOptions = this.getOption("mapping", {});
-        const selector = mappingOptions?.["selector"];
-        const labelSelector = mappingOptions?.["labelSelector"];
-        const labelTemplate = mappingOptions?.["labelTemplate"];
-        const apiTemplate = mappingOptions?.["apiTemplate"];
-        let urlTemplate = mappingOptions?.["urlTemplate"];
-
-        const filter = mappingOptions?.["filter"];
-
-        let flag = false;
-        let apiEqualUrl = false;
-        if (labelTemplate === "") {
-            addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, "empty label template");
-            flag = true;
-        }
-
-        if (apiTemplate === "") {
-            addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, "empty api template");
-            flag = true;
-        }
-
-        if (urlTemplate === "") {
-            urlTemplate = apiTemplate;
-            apiEqualUrl = true;
-        }
-
-        if (flag === true) {
-            throw new Error("missing label or api configuration, check the error attribute");
-        }
-
-        if (isPrimitive(labelSelector) && labelSelector !== "") {
-            const finder = new Pathfinder(data);
-            const label = finder.getVia(labelSelector);
-            this.setOption("labels.button", label);
-            this.value = label;
-        }
-
-        let labelMap;
-        const urlMap = buildMap(data, selector, urlTemplate, apiTemplate, filter);
-        if (apiEqualUrl === true) {
-            labelMap = urlMap;
-        } else {
-            labelMap = buildMap(data, selector, labelTemplate, apiTemplate, filter);
-        }
-
-        const buttons = [];
-        if (!isIterable(urlMap)) {
-            throw new Error("map is not iterable");
-        }
-
-        const buttonTag = this.getOption("buttonTag");
-        const executerCallback = this.getOption("actions.execute");
-
-        for (const [iterKey] of urlMap) {
-            const vmUrl = urlMap.get(iterKey);
-            const vmLabel = labelMap.get(iterKey);
-
-            const button = getGlobal().document.createElement(buttonTag);
-            button.setAttribute(ATTRIBUTE_ROLE, `api-button`);
-            button.setOption("labels.button", vmLabel);
-            button.setOption("actions.click", (event) => {
-
-                if (isFunction(executerCallback)) {
-
-                    executerCallback.call(this, event, {
-                        key: iterKey,
-                        url: vmUrl,
-                        label: vmLabel,
-                        button: button,
-                    })
-
-                }
-            });
-
-            this.appendChild(button);
-        }
-
-        try {
-            this.updateI18n();
-        } catch (e) {
-            addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, e.message);
-        }
-
-        this.setOption("buttons", buttons);
-
-        fireCustomEvent(this, "monster-button-set", {
-            buttons: buttons,
-        });
-
-        return this;
-    }
-
-    /**
-     *
-     * @return {void}
-     */
-    [assembleMethodSymbol]() {
-        super[assembleMethodSymbol]();
-    }
-
-    /**
-     * @return {string}
-     */
-    static getTag() {
-        return "monster-api-bar";
-    }
-
-    /**
-     * @return {Array<CSSStyleSheet>}
-     */
-    static getCSSStyleSheet() {
-        const styles = super.getCSSStyleSheet();
-        styles.push(ApiButtonStyleSheet);
-        return styles;
-    }
+	/**
+	 * This method is called by the `instanceof` operator.
+	 * @returns {symbol}
+	 */
+	static get [instanceSymbol]() {
+		return Symbol.for("@schukai/monster/components/form/api-bar@@instance");
+	}
+
+	/**
+	 * To set the options via the HTML tag, the attribute `data-monster-options` must be used.
+	 * @see {@link https://monsterjs.org/en/doc/#configurate-a-monster-control}
+	 *
+	 * The individual configuration values can be found in the table.
+	 *
+	 * @property {object} mapping - The mapping object.
+	 * @property {string} mapping.selector - The selector to find the buttons in the response.
+	 * @property {string} mapping.labelSelector - The selector to find the label for the button.
+	 * @property {string} mapping.labelTemplate - The template to create the label for the button.
+	 * @property {string} mapping.apiTemplate - The key to find the api value in the response.
+	 * @property {string} mapping.urlTemplate - The key to find the url value in the response, if empty the api value is used.
+	 * @property {function} mapping.filter - The filter function to filter the buttons.
+	 * @property {string} url - The url to fetch the data.
+	 * @property {string} buttonTag - The tag name of the button
+	 * @property {object} api - The api options.
+	 * @property {object} api.fetch - The fetch options.
+	 * @property {string} api.body - The body template.
+	 * @property {object} callbacks - The callbacks object.
+	 * @property {function} callbacks.beforeApiCall - The beforeApiCall callback called before the api request is made.
+	 * @property {function} callbacks.failedApiCall - The failedApiCall callback called when the api request failed.
+	 * @property {function} callbacks.successfulApiCall - The successfulApiCall callback called when the api request was successful.
+	 * @property {object} fetch - The fetch options.
+	 * @property {string} fetch.redirect - The redirect option.
+	 * @property {string} fetch.method - The method option.
+	 * @property {string} fetch.mode - The mode option.
+	 * @property {string} fetch.credentials - The credentials option.
+	 * @property {object} fetch.headers - The headers option.
+	 * @property {string} fetch.headers.accept - The acceptance option.
+	 * @property {object} actions - The actions object.
+	 * @property {function} actions.execute - The execute action.
+	 * @property {object} data - The data object, this can be used to store some data and send it with the request.
+	 * @extends {ActionButton.defaults}
+	 */
+	get defaults() {
+		const opts = Object.assign({}, super.defaults, {
+			mapping: {
+				selector: "*",
+				labelSelector: "",
+				labelTemplate: "",
+				apiTemplate: "",
+				urlTemplate: "",
+				filter: "",
+			},
+			api: {
+				fetch: {
+					method: "POST",
+					redirect: "error",
+					mode: "same-origin",
+					credentials: "same-origin",
+					headers: {
+						accept: "application/json",
+					},
+				},
+				body: null,
+			},
+			url: "",
+			buttonTag: "monster-message-state-button",
+			callbacks: {
+				beforeApiCal: null,
+				failedApiCall: null,
+				successfulApiCall: null,
+			},
+			fetch: {
+				redirect: "error",
+				method: "GET",
+				mode: "same-origin",
+				credentials: "same-origin",
+				headers: {
+					accept: "application/json",
+				},
+			},
+			actions: {
+				execute: executeAPIButton,
+			},
+			data: null,
+		});
+
+		return opts;
+	}
+
+	/**
+	 *
+	 * @return {Promise}
+	 */
+	fetch(url) {
+		if (url instanceof URL) {
+			url = url.toString();
+		}
+
+		if (url !== undefined) {
+			url = validateString(url);
+		}
+
+		return fetchData.call(this, url).then((map) => {
+			if (
+				isObject(map) ||
+				isArray(map) | (map instanceof Set) ||
+				map instanceof Map
+			) {
+				this.importButtons(map);
+			}
+		});
+	}
+
+	/**
+	 * Import buttons from a map.
+	 *
+	 * @param {array|object|Map|Set} data
+	 * @return {ApiButton}
+	 * @throws {Error} map is not iterable
+	 * @throws {Error} missing label configuration
+	 */
+	importButtons(data) {
+		const self = this;
+
+		const currentButtons = self.querySelectorAll(
+			`[${ATTRIBUTE_ROLE}="api-button"]`,
+		);
+		for (const btnElement of currentButtons) {
+			btnElement.remove();
+		}
+
+		const mappingOptions = this.getOption("mapping", {});
+		const selector = mappingOptions?.["selector"];
+		const labelSelector = mappingOptions?.["labelSelector"];
+		const labelTemplate = mappingOptions?.["labelTemplate"];
+		const apiTemplate = mappingOptions?.["apiTemplate"];
+		let urlTemplate = mappingOptions?.["urlTemplate"];
+
+		const filter = mappingOptions?.["filter"];
+
+		let flag = false;
+		let apiEqualUrl = false;
+		if (labelTemplate === "") {
+			addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, "empty label template");
+			flag = true;
+		}
+
+		if (apiTemplate === "") {
+			addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, "empty api template");
+			flag = true;
+		}
+
+		if (urlTemplate === "") {
+			urlTemplate = apiTemplate;
+			apiEqualUrl = true;
+		}
+
+		if (flag === true) {
+			throw new Error(
+				"missing label or api configuration, check the error attribute",
+			);
+		}
+
+		if (isPrimitive(labelSelector) && labelSelector !== "") {
+			const finder = new Pathfinder(data);
+			const label = finder.getVia(labelSelector);
+			this.setOption("labels.button", label);
+			this.value = label;
+		}
+
+		let labelMap;
+		const urlMap = buildMap(data, selector, urlTemplate, apiTemplate, filter);
+		if (apiEqualUrl === true) {
+			labelMap = urlMap;
+		} else {
+			labelMap = buildMap(data, selector, labelTemplate, apiTemplate, filter);
+		}
+
+		const buttons = [];
+		if (!isIterable(urlMap)) {
+			throw new Error("map is not iterable");
+		}
+
+		const buttonTag = this.getOption("buttonTag");
+		const executerCallback = this.getOption("actions.execute");
+
+		for (const [iterKey] of urlMap) {
+			const vmUrl = urlMap.get(iterKey);
+			const vmLabel = labelMap.get(iterKey);
+
+			const button = getGlobal().document.createElement(buttonTag);
+			button.setAttribute(ATTRIBUTE_ROLE, `api-button`);
+			button.setOption("labels.button", vmLabel);
+			button.setOption("actions.click", (event) => {
+				if (isFunction(executerCallback)) {
+					executerCallback.call(this, event, {
+						key: iterKey,
+						url: vmUrl,
+						label: vmLabel,
+						button: button,
+					});
+				}
+			});
+
+			this.appendChild(button);
+		}
+
+		try {
+			this.updateI18n();
+		} catch (e) {
+			addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, e.message);
+		}
+
+		this.setOption("buttons", buttons);
+
+		fireCustomEvent(this, "monster-button-set", {
+			buttons: buttons,
+		});
+
+		return this;
+	}
+
+	/**
+	 *
+	 * @return {void}
+	 */
+	[assembleMethodSymbol]() {
+		super[assembleMethodSymbol]();
+	}
+
+	/**
+	 * @return {string}
+	 */
+	static getTag() {
+		return "monster-api-bar";
+	}
+
+	/**
+	 * @return {Array<CSSStyleSheet>}
+	 */
+	static getCSSStyleSheet() {
+		const styles = super.getCSSStyleSheet();
+		styles.push(ApiButtonStyleSheet);
+		return styles;
+	}
 }
 
 /**
@@ -305,194 +311,208 @@ class ApiBar extends ButtonBar {
  * @param {object} opts
  */
 function executeAPIButton(event, opts) {
-    const self = this;
-
-    if (!isObject(opts)) {
-        opts = {};
-    }
-
-    const button = opts?.["button"];
-    const fetchOptions = self.getOption("api.fetch", {});
-
-    const callback = self.getOption("callbacks.beforeApiCall");
-    if (isFunction(callback)) {
-        callback.call(self, fetchOptions);
-    }
-
-    const successfulApiCall = self.getOption("callbacks.successfulApiCall");
-    const failedApiCall = self.getOption("callbacks.failedApiCall");
-
-    let url = opts?.["url"];
-    let label = opts?.["label"];
-    let key = opts?.["key"];
-
-    let body = self.getOption("api.body");
-
-    if (isString(body)) {
-        try {
-            body = JSON.parse(body);
-        } catch (e) {
-            body = {};
-        }
-    }
-
-    if (isObject(body)) {
-        const bodyString = JSON.stringify(body);
-
-        const obj = {
-            url: url,
-            label: label,
-            key: key,
-            data: self.getOption("data"),
-        };
-
-        fetchOptions.body = new Formatter(obj, {}).format(bodyString);
-    }
-
-    if (button instanceof HTMLElement) {
-        button?.setState("activity");
-    }
-
-    fireCustomEvent(self, "monster-api-bar-click", {
-        button,
-    });
-
-    const global = getGlobal();
-    global
-        .fetch(url, fetchOptions)
-        .then((response) => {
-
-            if (!response.ok) {
-                if (button instanceof MessageStateButton || button instanceof StateButton) {
-                    button.setState("failed", 4000);
-                }
-                return Promise.reject(response);
-            }
-
-            const contentType = response?.headers?.get("content-type");
-            if (contentType && contentType.indexOf("application/json") !== -1) {
-                return response
-                    .text()
-                    .then((text) => {
-                        try {
-
-                            const data = JSON.parse(text); // Try to parse the response as JSON
-
-                            if (button instanceof MessageStateButton || button instanceof StateButton) {
-                                button.setState("successful", 4000);
-                            }
-
-                            fireCustomEvent(self, "monster-api-bar-successful", {
-                                button,
-                                data,
-                                response,
-                                contentType: response.headers.get("Content-Type"),
-                            });
-
-                            if (isFunction(successfulApiCall)) {
-                                successfulApiCall.call(self, data, response);
-                            }
-
-                        } catch (error) {
-                            if (button instanceof HTMLElement) {
-                                button.setState("failed", 4000);
-                                button.setMessage(error.message).showMessage(2000);
-                            }
-
-                            fireCustomEvent(self, "monster-api-bar-failed", {
-                                button,
-                                error,
-                                response,
-                                contentType: response.headers.get("Content-Type"),
-                            });
-                        }
-                    })
-                    .catch((error) => {
-
-                        button.setState("failed", 4000);
-
-                        if (isFunction(failedApiCall)) {
-                            failedApiCall.call(self, error, response);
-                        } else if (button instanceof MessageStateButton || button instanceof StateButton) {
-                            button.setMessage("request failed").showMessage(2000);
-                        }
-
-                        fireCustomEvent(self, "monster-api-bar-failed", {
-                            button,
-                            error,
-                            response,
-                            contentType: response.headers.get("Content-Type"),
-                        });
-                    });
-            } else {
-                return response
-                    .blob()
-                    .then((data) => {
-
-                        if (button instanceof MessageStateButton || button instanceof StateButton) {
-                            button.setState("successful", 4000);
-                        }
-
-                        fireCustomEvent(self, "monster-api-bar-successful", {
-                            button,
-                            data,
-                            response,
-                            contentType: response.headers.get("Content-Type"),
-                        });
-
-                        if (isFunction(successfulApiCall)) {
-                            successfulApiCall.call(self, data, response);
-                        }
-
-                    })
-                    .catch((error) => {
-
-                        if (button instanceof MessageStateButton || button instanceof StateButton) {
-                            button.setState("failed", 4000);
-                        }
-
-                        if (isFunction(failedApiCall)) {
-                            failedApiCall.call(self, error, response);
-                        } else if (button instanceof MessageStateButton || button instanceof StateButton) {
-
-                            if (error instanceof Response) {
-                                error = new Error(error.statusText);
-                            }
-
-                            button.setMessage("request failed").showMessage(2000);
-                        }
-
-                        fireCustomEvent(self, "monster-api-bar-failed", {
-                            button,
-                            error,
-                            response,
-                            contentType: response.headers.get("Content-Type"),
-                        });
-                    });
-            }
-        })
-        .catch((error) => {
-
-            if (button instanceof MessageStateButton || button instanceof StateButton) {
-                button.setState("failed", 4000);
-            }
-
-            if (isFunction(failedApiCall)) {
-                failedApiCall.call(self, button, error, response);
-            } else if (button instanceof MessageStateButton || button instanceof StateButton) {
-
-                if (error instanceof Response) {
-                    error = new Error(error.statusText);
-                }
-
-                button?.setMessage(error.message).showMessage(3000);
-            }
-
-            fireCustomEvent(self, "monster-api-bar-failed", {
-                button,
-                error,
-            });
-        });
+	const self = this;
+
+	if (!isObject(opts)) {
+		opts = {};
+	}
+
+	const button = opts?.["button"];
+	const fetchOptions = self.getOption("api.fetch", {});
+
+	const callback = self.getOption("callbacks.beforeApiCall");
+	if (isFunction(callback)) {
+		callback.call(self, fetchOptions);
+	}
+
+	const successfulApiCall = self.getOption("callbacks.successfulApiCall");
+	const failedApiCall = self.getOption("callbacks.failedApiCall");
+
+	let url = opts?.["url"];
+	let label = opts?.["label"];
+	let key = opts?.["key"];
+
+	let body = self.getOption("api.body");
+
+	if (isString(body)) {
+		try {
+			body = JSON.parse(body);
+		} catch (e) {
+			body = {};
+		}
+	}
+
+	if (isObject(body)) {
+		const bodyString = JSON.stringify(body);
+
+		const obj = {
+			url: url,
+			label: label,
+			key: key,
+			data: self.getOption("data"),
+		};
+
+		fetchOptions.body = new Formatter(obj, {}).format(bodyString);
+	}
+
+	if (button instanceof HTMLElement) {
+		button?.setState("activity");
+	}
+
+	fireCustomEvent(self, "monster-api-bar-click", {
+		button,
+	});
+
+	const global = getGlobal();
+	global
+		.fetch(url, fetchOptions)
+		.then((response) => {
+			if (!response.ok) {
+				if (
+					button instanceof MessageStateButton ||
+					button instanceof StateButton
+				) {
+					button.setState("failed", 4000);
+				}
+				return Promise.reject(response);
+			}
+
+			const contentType = response?.headers?.get("content-type");
+			if (contentType && contentType.indexOf("application/json") !== -1) {
+				return response
+					.text()
+					.then((text) => {
+						try {
+							const data = JSON.parse(text); // Try to parse the response as JSON
+
+							if (
+								button instanceof MessageStateButton ||
+								button instanceof StateButton
+							) {
+								button.setState("successful", 4000);
+							}
+
+							fireCustomEvent(self, "monster-api-bar-successful", {
+								button,
+								data,
+								response,
+								contentType: response.headers.get("Content-Type"),
+							});
+
+							if (isFunction(successfulApiCall)) {
+								successfulApiCall.call(self, data, response);
+							}
+						} catch (error) {
+							if (button instanceof HTMLElement) {
+								button.setState("failed", 4000);
+								button.setMessage(error.message).showMessage(2000);
+							}
+
+							fireCustomEvent(self, "monster-api-bar-failed", {
+								button,
+								error,
+								response,
+								contentType: response.headers.get("Content-Type"),
+							});
+						}
+					})
+					.catch((error) => {
+						button.setState("failed", 4000);
+
+						if (isFunction(failedApiCall)) {
+							failedApiCall.call(self, error, response);
+						} else if (
+							button instanceof MessageStateButton ||
+							button instanceof StateButton
+						) {
+							button.setMessage("request failed").showMessage(2000);
+						}
+
+						fireCustomEvent(self, "monster-api-bar-failed", {
+							button,
+							error,
+							response,
+							contentType: response.headers.get("Content-Type"),
+						});
+					});
+			} else {
+				return response
+					.blob()
+					.then((data) => {
+						if (
+							button instanceof MessageStateButton ||
+							button instanceof StateButton
+						) {
+							button.setState("successful", 4000);
+						}
+
+						fireCustomEvent(self, "monster-api-bar-successful", {
+							button,
+							data,
+							response,
+							contentType: response.headers.get("Content-Type"),
+						});
+
+						if (isFunction(successfulApiCall)) {
+							successfulApiCall.call(self, data, response);
+						}
+					})
+					.catch((error) => {
+						if (
+							button instanceof MessageStateButton ||
+							button instanceof StateButton
+						) {
+							button.setState("failed", 4000);
+						}
+
+						if (isFunction(failedApiCall)) {
+							failedApiCall.call(self, error, response);
+						} else if (
+							button instanceof MessageStateButton ||
+							button instanceof StateButton
+						) {
+							if (error instanceof Response) {
+								error = new Error(error.statusText);
+							}
+
+							button.setMessage("request failed").showMessage(2000);
+						}
+
+						fireCustomEvent(self, "monster-api-bar-failed", {
+							button,
+							error,
+							response,
+							contentType: response.headers.get("Content-Type"),
+						});
+					});
+			}
+		})
+		.catch((error) => {
+			if (
+				button instanceof MessageStateButton ||
+				button instanceof StateButton
+			) {
+				button.setState("failed", 4000);
+			}
+
+			if (isFunction(failedApiCall)) {
+				failedApiCall.call(self, button, error, response);
+			} else if (
+				button instanceof MessageStateButton ||
+				button instanceof StateButton
+			) {
+				if (error instanceof Response) {
+					error = new Error(error.statusText);
+				}
+
+				button?.setMessage(error.message).showMessage(3000);
+			}
+
+			fireCustomEvent(self, "monster-api-bar-failed", {
+				button,
+				error,
+			});
+		});
 }
 
 /**
@@ -503,29 +523,29 @@ function executeAPIButton(event, opts) {
  * @throws {TypeError} unsupported response
  */
 function fetchData(url) {
-    if (!url) url = this.getOption("url");
-    if (!url) return Promise.resolve();
-
-    const fetchOptions = this.getOption("fetch", {});
-
-    const global = getGlobal();
-    return global
-        .fetch(url, fetchOptions)
-        .then((response) => {
-            const contentType = response.headers.get("content-type");
-            if (contentType && contentType.indexOf("application/json") !== -1) {
-                return response.text();
-            }
-
-            throw new TypeError(`unsupported response ${contentType}`);
-        })
-        .then((text) => {
-            try {
-                return Promise.resolve(JSON.parse(text));
-            } catch (e) {
-                throw new TypeError("the result cannot be parsed");
-            }
-        });
+	if (!url) url = this.getOption("url");
+	if (!url) return Promise.resolve();
+
+	const fetchOptions = this.getOption("fetch", {});
+
+	const global = getGlobal();
+	return global
+		.fetch(url, fetchOptions)
+		.then((response) => {
+			const contentType = response.headers.get("content-type");
+			if (contentType && contentType.indexOf("application/json") !== -1) {
+				return response.text();
+			}
+
+			throw new TypeError(`unsupported response ${contentType}`);
+		})
+		.then((text) => {
+			try {
+				return Promise.resolve(JSON.parse(text));
+			} catch (e) {
+				throw new TypeError("the result cannot be parsed");
+			}
+		});
 }
 
 registerCustomElement(ApiBar);
diff --git a/source/components/form/api-button.mjs b/source/components/form/api-button.mjs
index 5a4bea7ab396869fcc45cccc5e8dcd11be50f942..07a8a44c298c47c4bf6de4660716030c9204401c 100644
--- a/source/components/form/api-button.mjs
+++ b/source/components/form/api-button.mjs
@@ -12,31 +12,31 @@
  * SPDX-License-Identifier: AGPL-3.0
  */
 
-import {instanceSymbol} from "../../constants.mjs";
-import {buildMap} from "../../data/buildmap.mjs";
-import {Pathfinder} from "../../data/pathfinder.mjs";
-import {addAttributeToken} from "../../dom/attributes.mjs";
+import { instanceSymbol } from "../../constants.mjs";
+import { buildMap } from "../../data/buildmap.mjs";
+import { Pathfinder } from "../../data/pathfinder.mjs";
+import { addAttributeToken } from "../../dom/attributes.mjs";
 import {
-    ATTRIBUTE_ERRORMESSAGE,
-    ATTRIBUTE_ROLE,
+	ATTRIBUTE_ERRORMESSAGE,
+	ATTRIBUTE_ROLE,
 } from "../../dom/constants.mjs";
 import {
-    assembleMethodSymbol,
-    registerCustomElement,
+	assembleMethodSymbol,
+	registerCustomElement,
 } from "../../dom/customelement.mjs";
 import {
-    findTargetElementFromEvent,
-    fireCustomEvent,
+	findTargetElementFromEvent,
+	fireCustomEvent,
 } from "../../dom/events.mjs";
-import {isArray, isPrimitive, isIterable} from "../../types/is.mjs";
-import {validateString} from "../../types/validate.mjs";
-import {ActionButton} from "./action-button.mjs";
-import {ApiButtonStyleSheet} from "./stylesheet/api-button.mjs";
-import {isObject, isFunction} from "../../types/is.mjs";
-import {getGlobal} from "../../types/global.mjs";
-import {Formatter} from "../../text/formatter.mjs";
+import { isArray, isPrimitive, isIterable } from "../../types/is.mjs";
+import { validateString } from "../../types/validate.mjs";
+import { ActionButton } from "./action-button.mjs";
+import { ApiButtonStyleSheet } from "./stylesheet/api-button.mjs";
+import { isObject, isFunction } from "../../types/is.mjs";
+import { getGlobal } from "../../types/global.mjs";
+import { Formatter } from "../../text/formatter.mjs";
 
-export {ApiButton};
+export { ApiButton };
 
 /**
  * @private
@@ -67,220 +67,220 @@ const containerElementSymbol = Symbol("containerElement");
  * @fires monster-api-button-failed
  */
 class ApiButton extends ActionButton {
-    /**
-     * This method is called by the `instanceof` operator.
-     * @return {symbol}
-     */
-    static get [instanceSymbol]() {
-        return Symbol.for("@schukai/monster/components/form/api-button@@instance");
-    }
-
-    /**
-     * To set the options via the HTML tag, the attribute `data-monster-options` must be used.
-     * @see {@link https://monsterjs.org/en/doc/#configurate-a-monster-control}
-     *
-     * The individual configuration values can be found in the table.
-     *
-     * @property {object} mapping - The mapping object.
-     * @property {string} mapping.selector - The selector to find the buttons in the response.
-     * @property {string} mapping.labelSelector - The selector to find the label for the button.
-     * @property {string} mapping.labelTemplate - The template to create the label for the button.
-     * @property {string} mapping.apiTemplate - The template to create the api for the button.
-     * @property {string} mapping.urlTemplate - The template to create the url for the button.
-     * @property {function} mapping.filter - The filter function to filter the buttons.
-     * @property {string} url - The url to fetch the data.
-     * @property {object} api - The api options.
-     * @property {object} api.fetch - The fetch options.
-     * @property {string} api.body - The body template.
-     * @property {object} callbacks - The callbacks object.
-     * @property {function} callbacks.beforeApi - The beforeApi callback.
-     * @property {object} fetch - The fetch options.
-     * @property {string} fetch.redirect - The redirect option.
-     * @property {string} fetch.method - The method option.
-     * @property {string} fetch.mode - The mode option.
-     * @property {string} fetch.credentials - The credentials option.
-     * @property {object} fetch.headers - The headers option.
-     * @property {string} fetch.headers.accept - The acceptance option.
-     * @extends {ActionButton.defaults}
-     */
-    get defaults() {
-        const opts = Object.assign({}, super.defaults, {
-            mapping: {
-                selector: "*",
-                labelSelector: "",
-                labelTemplate: "",
-                apiTemplate: "",
-                urlTemplate: "",
-                filter: "",
-            },
-            api: {
-                fetch: {
-                    method: "POST",
-                    redirect: "error",
-                    mode: "same-origin",
-                    credentials: "same-origin",
-                    headers: {
-                        accept: "application/json",
-                    },
-                },
-                body: {},
-            },
-            url: "",
-            callbacks: {
-                beforeApi: null,
-            },
-            fetch: {
-                redirect: "error",
-                method: "GET",
-                mode: "same-origin",
-                credentials: "same-origin",
-                headers: {
-                    accept: "application/json",
-                },
-            },
-        });
-
-        opts["actions"]["execute"] = executeAPIButton.bind(self);
-
-        return opts;
-    }
-
-    /**
-     *
-     * @return {Promise}
-     */
-    fetch(url) {
-        if (url instanceof URL) {
-            url = url.toString();
-        }
-
-        if (url !== undefined) {
-            url = validateString(url);
-        }
-
-        return fetchData.call(this, url).then((map) => {
-            if (
-                isObject(map) ||
-                isArray(map) | (map instanceof Set) ||
-                map instanceof Map
-            ) {
-                this.importButtons(map);
-            }
-        });
-    }
-
-    /**
-     * Import buttons from a map.
-     *
-     * @param {array|object|Map|Set} data
-     * @return {ApiButton}
-     * @throws {Error} map is not iterable
-     * @throws {Error} missing label configuration
-     */
-    importButtons(data) {
-        const mappingOptions = this.getOption("mapping", {});
-        const selector = mappingOptions?.["selector"];
-        const labelSelector = mappingOptions?.["labelSelector"];
-        const labelTemplate = mappingOptions?.["labelTemplate"];
-        const apiTemplate = mappingOptions?.["apiTemplate"];
-        let urlTemplate = mappingOptions?.["urlTemplate"];
-        const filter = mappingOptions?.["filter"];
-
-        let flag = false;
-        let apiEqualUrl = false;
-        if (labelTemplate === "") {
-            addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, "empty label template");
-            flag = true;
-        }
-
-        if (apiTemplate === "") {
-            addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, "empty api template");
-            flag = true;
-        }
-
-        if (urlTemplate === "") {
-            urlTemplate = apiTemplate;
-            apiEqualUrl = true;
-        }
-
-        if (flag === true) {
-            throw new Error("missing label or api configuration");
-        }
-
-        if (isPrimitive(labelSelector) && labelSelector !== "") {
-            const finder = new Pathfinder(data);
-            const label = finder.getVia(labelSelector);
-            this.setOption("labels.button", label);
-            this.value = label;
-        }
-
-        let labelMap;
-        const urlMap = buildMap(data, selector, urlTemplate, apiTemplate, filter);
-        if (apiEqualUrl === true) {
-            labelMap = urlMap;
-        } else {
-            labelMap = buildMap(data, selector, labelTemplate, apiTemplate, filter);
-        }
-
-        const buttons = [];
-        if (!isIterable(urlMap)) {
-            throw new Error("map is not iterable");
-        }
-
-        for (const [iterKey] of urlMap) {
-            const vmUrl = urlMap.get(iterKey);
-            const vmLabel = labelMap.get(iterKey);
-            buttons.push({
-                label: vmLabel,
-                class: "monster-button-outline-primary monster-border-0",
-                action: this.getOption("actions.execute"),
-                url: vmUrl,
-                cmd: iterKey,
-            });
-        }
-
-        try {
-            this.updateI18n();
-        } catch (e) {
-            addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, e.message);
-        }
-
-        this.setOption("buttons", buttons);
-
-        fireCustomEvent(this, "monster-button-set", {
-            buttons: buttons,
-        });
-
-        return this;
-    }
-
-    /**
-     *
-     * @return {ApiButton}
-     */
-    [assembleMethodSymbol]() {
-        super[assembleMethodSymbol]();
-        initControlReferences.call(this);
-        initEventHandler.call(this);
-
-        return this;
-    }
-
-    /**
-     * @return {string}
-     */
-    static getTag() {
-        return "monster-api-button";
-    }
-
-    /**
-     * @return {Array<CSSStyleSheet>}
-     */
-    static getCSSStyleSheet() {
-        const styles = super.getCSSStyleSheet();
-        styles.push(ApiButtonStyleSheet);
-        return styles;
-    }
+	/**
+	 * This method is called by the `instanceof` operator.
+	 * @return {symbol}
+	 */
+	static get [instanceSymbol]() {
+		return Symbol.for("@schukai/monster/components/form/api-button@@instance");
+	}
+
+	/**
+	 * To set the options via the HTML tag, the attribute `data-monster-options` must be used.
+	 * @see {@link https://monsterjs.org/en/doc/#configurate-a-monster-control}
+	 *
+	 * The individual configuration values can be found in the table.
+	 *
+	 * @property {object} mapping - The mapping object.
+	 * @property {string} mapping.selector - The selector to find the buttons in the response.
+	 * @property {string} mapping.labelSelector - The selector to find the label for the button.
+	 * @property {string} mapping.labelTemplate - The template to create the label for the button.
+	 * @property {string} mapping.apiTemplate - The template to create the api for the button.
+	 * @property {string} mapping.urlTemplate - The template to create the url for the button.
+	 * @property {function} mapping.filter - The filter function to filter the buttons.
+	 * @property {string} url - The url to fetch the data.
+	 * @property {object} api - The api options.
+	 * @property {object} api.fetch - The fetch options.
+	 * @property {string} api.body - The body template.
+	 * @property {object} callbacks - The callbacks object.
+	 * @property {function} callbacks.beforeApi - The beforeApi callback.
+	 * @property {object} fetch - The fetch options.
+	 * @property {string} fetch.redirect - The redirect option.
+	 * @property {string} fetch.method - The method option.
+	 * @property {string} fetch.mode - The mode option.
+	 * @property {string} fetch.credentials - The credentials option.
+	 * @property {object} fetch.headers - The headers option.
+	 * @property {string} fetch.headers.accept - The acceptance option.
+	 * @extends {ActionButton.defaults}
+	 */
+	get defaults() {
+		const opts = Object.assign({}, super.defaults, {
+			mapping: {
+				selector: "*",
+				labelSelector: "",
+				labelTemplate: "",
+				apiTemplate: "",
+				urlTemplate: "",
+				filter: "",
+			},
+			api: {
+				fetch: {
+					method: "POST",
+					redirect: "error",
+					mode: "same-origin",
+					credentials: "same-origin",
+					headers: {
+						accept: "application/json",
+					},
+				},
+				body: {},
+			},
+			url: "",
+			callbacks: {
+				beforeApi: null,
+			},
+			fetch: {
+				redirect: "error",
+				method: "GET",
+				mode: "same-origin",
+				credentials: "same-origin",
+				headers: {
+					accept: "application/json",
+				},
+			},
+		});
+
+		opts["actions"]["execute"] = executeAPIButton.bind(self);
+
+		return opts;
+	}
+
+	/**
+	 *
+	 * @return {Promise}
+	 */
+	fetch(url) {
+		if (url instanceof URL) {
+			url = url.toString();
+		}
+
+		if (url !== undefined) {
+			url = validateString(url);
+		}
+
+		return fetchData.call(this, url).then((map) => {
+			if (
+				isObject(map) ||
+				isArray(map) | (map instanceof Set) ||
+				map instanceof Map
+			) {
+				this.importButtons(map);
+			}
+		});
+	}
+
+	/**
+	 * Import buttons from a map.
+	 *
+	 * @param {array|object|Map|Set} data
+	 * @return {ApiButton}
+	 * @throws {Error} map is not iterable
+	 * @throws {Error} missing label configuration
+	 */
+	importButtons(data) {
+		const mappingOptions = this.getOption("mapping", {});
+		const selector = mappingOptions?.["selector"];
+		const labelSelector = mappingOptions?.["labelSelector"];
+		const labelTemplate = mappingOptions?.["labelTemplate"];
+		const apiTemplate = mappingOptions?.["apiTemplate"];
+		let urlTemplate = mappingOptions?.["urlTemplate"];
+		const filter = mappingOptions?.["filter"];
+
+		let flag = false;
+		let apiEqualUrl = false;
+		if (labelTemplate === "") {
+			addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, "empty label template");
+			flag = true;
+		}
+
+		if (apiTemplate === "") {
+			addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, "empty api template");
+			flag = true;
+		}
+
+		if (urlTemplate === "") {
+			urlTemplate = apiTemplate;
+			apiEqualUrl = true;
+		}
+
+		if (flag === true) {
+			throw new Error("missing label or api configuration");
+		}
+
+		if (isPrimitive(labelSelector) && labelSelector !== "") {
+			const finder = new Pathfinder(data);
+			const label = finder.getVia(labelSelector);
+			this.setOption("labels.button", label);
+			this.value = label;
+		}
+
+		let labelMap;
+		const urlMap = buildMap(data, selector, urlTemplate, apiTemplate, filter);
+		if (apiEqualUrl === true) {
+			labelMap = urlMap;
+		} else {
+			labelMap = buildMap(data, selector, labelTemplate, apiTemplate, filter);
+		}
+
+		const buttons = [];
+		if (!isIterable(urlMap)) {
+			throw new Error("map is not iterable");
+		}
+
+		for (const [iterKey] of urlMap) {
+			const vmUrl = urlMap.get(iterKey);
+			const vmLabel = labelMap.get(iterKey);
+			buttons.push({
+				label: vmLabel,
+				class: "monster-button-outline-primary monster-border-0",
+				action: this.getOption("actions.execute"),
+				url: vmUrl,
+				cmd: iterKey,
+			});
+		}
+
+		try {
+			this.updateI18n();
+		} catch (e) {
+			addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, e.message);
+		}
+
+		this.setOption("buttons", buttons);
+
+		fireCustomEvent(this, "monster-button-set", {
+			buttons: buttons,
+		});
+
+		return this;
+	}
+
+	/**
+	 *
+	 * @return {ApiButton}
+	 */
+	[assembleMethodSymbol]() {
+		super[assembleMethodSymbol]();
+		initControlReferences.call(this);
+		initEventHandler.call(this);
+
+		return this;
+	}
+
+	/**
+	 * @return {string}
+	 */
+	static getTag() {
+		return "monster-api-button";
+	}
+
+	/**
+	 * @return {Array<CSSStyleSheet>}
+	 */
+	static getCSSStyleSheet() {
+		const styles = super.getCSSStyleSheet();
+		styles.push(ApiButtonStyleSheet);
+		return styles;
+	}
 }
 
 /**
@@ -290,145 +290,145 @@ class ApiButton extends ActionButton {
  * @param {Monster.Components.Form.ApiButton} element
  */
 function executeAPIButton(event, button, element) {
-    const self = element;
-
-    const fetchOptions = self.getOption("api.fetch", {});
-
-    const callback = self.getOption("callbacks.beforeApi");
-    if (isFunction(callback)) {
-        callback.call(self, fetchOptions);
-    }
-
-    let url = undefined;
-    let label = undefined;
-    let key = undefined;
-
-    const attr = button.getAttribute("data-monster-insert-reference");
-    if (attr) {
-        const index = attr.split("-")[1];
-        const b = self.getOption("buttons." + index);
-
-        url = b?.["url"];
-        label = b?.["label"];
-        key = b?.["cmd"];
-    }
-
-    const body = self.getOption("api.body");
-    if (isObject(body)) {
-        const bodyString = JSON.stringify(body);
-
-        const obj = {
-            url: url,
-            label: label,
-            value: self.getOption("value"),
-            key: key,
-            id: self.getOption("id"),
-        };
-
-        fetchOptions.body = new Formatter(obj, {}).format(bodyString);
-    }
-
-    if (button instanceof HTMLElement) {
-        button.setState("activity");
-    }
-
-    fireCustomEvent(self, "monster-api-button-click", {
-        button,
-    });
-
-    const global = getGlobal();
-    global
-        .fetch(url, fetchOptions)
-        .then((response) => {
-            if (!response.ok) {
-                if (button instanceof HTMLElement) {
-                    button.setState("successful", 4000);
-                }
-                return Promise.reject(response);
-            }
-
-            const contentType = response?.headers?.get("content-type");
-            if (contentType && contentType.indexOf("application/json") !== -1) {
-                return response
-                    .text()
-                    .then((text) => {
-                        try {
-                            const data = JSON.parse(text); // Try to parse the response as JSON
-
-                            if (button instanceof HTMLElement) {
-                                button.setState("successful", 4000);
-                            }
-
-                            fireCustomEvent(self, "monster-api-button-successful", {
-                                button,
-                                data,
-                                response,
-                                contentType: response.headers.get("Content-Type"),
-                            });
-                        } catch (error) {
-                            if (button instanceof HTMLElement) {
-                                button.setState("failed", 4000);
-                                button.setMessage(error.message).showMessage(2000);
-                            }
-
-                            fireCustomEvent(self, "monster-api-button-failed", {
-                                button,
-                                error,
-                                response,
-                                contentType: response.headers.get("Content-Type"),
-                            });
-                        }
-                    })
-                    .catch((error) => {
-                        if (button instanceof HTMLElement) {
-                            button.setState("failed", 4000);
-                            button.setMessage("request failed").showMessage(2000);
-                        }
-
-                        fireCustomEvent(self, "monster-api-button-failed", {
-                            button,
-                            error,
-                            response,
-                            contentType: response.headers.get("Content-Type"),
-                        });
-                    });
-            } else {
-                return response
-                    .blob()
-                    .then((data) => {
-                        fireCustomEvent(self, "monster-api-button-successful", {
-                            button,
-                            data,
-                            response,
-                            contentType: response.headers.get("Content-Type"),
-                        });
-                    })
-                    .catch((error) => {
-                        if (button instanceof HTMLElement) {
-                            button.setState("failed", 4000);
-                            button.setMessage("request failed").showMessage(2000);
-                        }
-
-                        fireCustomEvent(self, "monster-api-button-failed", {
-                            button,
-                            error,
-                            response,
-                            contentType: response.headers.get("Content-Type"),
-                        });
-                    });
-            }
-        })
-        .catch((error) => {
-            if (button instanceof HTMLElement) {
-                button.setState("failed", 4000);
-                button.setMessage(error.message).showMessage(2000);
-            }
-
-            fireCustomEvent(self, "monster-api-button-failed", {
-                button,
-                error,
-            });
-        });
+	const self = element;
+
+	const fetchOptions = self.getOption("api.fetch", {});
+
+	const callback = self.getOption("callbacks.beforeApi");
+	if (isFunction(callback)) {
+		callback.call(self, fetchOptions);
+	}
+
+	let url = undefined;
+	let label = undefined;
+	let key = undefined;
+
+	const attr = button.getAttribute("data-monster-insert-reference");
+	if (attr) {
+		const index = attr.split("-")[1];
+		const b = self.getOption("buttons." + index);
+
+		url = b?.["url"];
+		label = b?.["label"];
+		key = b?.["cmd"];
+	}
+
+	const body = self.getOption("api.body");
+	if (isObject(body)) {
+		const bodyString = JSON.stringify(body);
+
+		const obj = {
+			url: url,
+			label: label,
+			value: self.getOption("value"),
+			key: key,
+			id: self.getOption("id"),
+		};
+
+		fetchOptions.body = new Formatter(obj, {}).format(bodyString);
+	}
+
+	if (button instanceof HTMLElement) {
+		button.setState("activity");
+	}
+
+	fireCustomEvent(self, "monster-api-button-click", {
+		button,
+	});
+
+	const global = getGlobal();
+	global
+		.fetch(url, fetchOptions)
+		.then((response) => {
+			if (!response.ok) {
+				if (button instanceof HTMLElement) {
+					button.setState("successful", 4000);
+				}
+				return Promise.reject(response);
+			}
+
+			const contentType = response?.headers?.get("content-type");
+			if (contentType && contentType.indexOf("application/json") !== -1) {
+				return response
+					.text()
+					.then((text) => {
+						try {
+							const data = JSON.parse(text); // Try to parse the response as JSON
+
+							if (button instanceof HTMLElement) {
+								button.setState("successful", 4000);
+							}
+
+							fireCustomEvent(self, "monster-api-button-successful", {
+								button,
+								data,
+								response,
+								contentType: response.headers.get("Content-Type"),
+							});
+						} catch (error) {
+							if (button instanceof HTMLElement) {
+								button.setState("failed", 4000);
+								button.setMessage(error.message).showMessage(2000);
+							}
+
+							fireCustomEvent(self, "monster-api-button-failed", {
+								button,
+								error,
+								response,
+								contentType: response.headers.get("Content-Type"),
+							});
+						}
+					})
+					.catch((error) => {
+						if (button instanceof HTMLElement) {
+							button.setState("failed", 4000);
+							button.setMessage("request failed").showMessage(2000);
+						}
+
+						fireCustomEvent(self, "monster-api-button-failed", {
+							button,
+							error,
+							response,
+							contentType: response.headers.get("Content-Type"),
+						});
+					});
+			} else {
+				return response
+					.blob()
+					.then((data) => {
+						fireCustomEvent(self, "monster-api-button-successful", {
+							button,
+							data,
+							response,
+							contentType: response.headers.get("Content-Type"),
+						});
+					})
+					.catch((error) => {
+						if (button instanceof HTMLElement) {
+							button.setState("failed", 4000);
+							button.setMessage("request failed").showMessage(2000);
+						}
+
+						fireCustomEvent(self, "monster-api-button-failed", {
+							button,
+							error,
+							response,
+							contentType: response.headers.get("Content-Type"),
+						});
+					});
+			}
+		})
+		.catch((error) => {
+			if (button instanceof HTMLElement) {
+				button.setState("failed", 4000);
+				button.setMessage(error.message).showMessage(2000);
+			}
+
+			fireCustomEvent(self, "monster-api-button-failed", {
+				button,
+				error,
+			});
+		});
 }
 
 /**
@@ -439,29 +439,29 @@ function executeAPIButton(event, button, element) {
  * @throws {TypeError} unsupported response
  */
 function fetchData(url) {
-    if (!url) url = this.getOption("url");
-    if (!url) return Promise.resolve();
-
-    const fetchOptions = this.getOption("fetch", {});
-
-    const global = getGlobal();
-    return global
-        .fetch(url, fetchOptions)
-        .then((response) => {
-            const contentType = response.headers.get("content-type");
-            if (contentType && contentType.indexOf("application/json") !== -1) {
-                return response.text();
-            }
-
-            throw new TypeError(`unsupported response ${contentType}`);
-        })
-        .then((text) => {
-            try {
-                return Promise.resolve(JSON.parse(text));
-            } catch (e) {
-                throw new TypeError("the result cannot be parsed");
-            }
-        });
+	if (!url) url = this.getOption("url");
+	if (!url) return Promise.resolve();
+
+	const fetchOptions = this.getOption("fetch", {});
+
+	const global = getGlobal();
+	return global
+		.fetch(url, fetchOptions)
+		.then((response) => {
+			const contentType = response.headers.get("content-type");
+			if (contentType && contentType.indexOf("application/json") !== -1) {
+				return response.text();
+			}
+
+			throw new TypeError(`unsupported response ${contentType}`);
+		})
+		.then((text) => {
+			try {
+				return Promise.resolve(JSON.parse(text));
+			} catch (e) {
+				throw new TypeError("the result cannot be parsed");
+			}
+		});
 }
 
 /**
@@ -469,27 +469,27 @@ function fetchData(url) {
  * @return {ApiButton}
  */
 function initEventHandler() {
-    this[containerElementSymbol].addEventListener("click", (event) => {
-        const element = findTargetElementFromEvent(
-            event,
-            "data-monster-insert-reference",
-        );
-
-        if (!(element instanceof HTMLElement)) {
-            return;
-        }
-
-        const attr = element.getAttribute("data-monster-insert-reference");
-        if (attr) {
-            const index = attr.split("-")[1];
-            const b = this.getOption("buttons." + index);
-            if (isObject(b) && isFunction(b?.action)) {
-                b.action(event, element, this);
-            }
-        }
-    });
-
-    return this;
+	this[containerElementSymbol].addEventListener("click", (event) => {
+		const element = findTargetElementFromEvent(
+			event,
+			"data-monster-insert-reference",
+		);
+
+		if (!(element instanceof HTMLElement)) {
+			return;
+		}
+
+		const attr = element.getAttribute("data-monster-insert-reference");
+		if (attr) {
+			const index = attr.split("-")[1];
+			const b = this.getOption("buttons." + index);
+			if (isObject(b) && isFunction(b?.action)) {
+				b.action(event, element, this);
+			}
+		}
+	});
+
+	return this;
 }
 
 /**
@@ -497,10 +497,10 @@ function initEventHandler() {
  * @return {ApiButton}
  */
 function initControlReferences() {
-    this[containerElementSymbol] = this.shadowRoot.querySelector(
-        `[${ATTRIBUTE_ROLE}=container]`,
-    );
-    return this;
+	this[containerElementSymbol] = this.shadowRoot.querySelector(
+		`[${ATTRIBUTE_ROLE}=container]`,
+	);
+	return this;
 }
 
 registerCustomElement(ApiButton);
diff --git a/source/components/form/button.mjs b/source/components/form/button.mjs
index deaa33c097eb9e351e1308223d96d7704580d176..93621590cc1d56f06b85db357d897ecb1c5e6982 100644
--- a/source/components/form/button.mjs
+++ b/source/components/form/button.mjs
@@ -209,9 +209,7 @@ class Button extends CustomControl {
 			},
 			disabled: false,
 			actions: {
-				click: () => {
-
-				},
+				click: () => {},
 			},
 			effects: {
 				ripple: true,
diff --git a/source/components/form/field-set.mjs b/source/components/form/field-set.mjs
index 1c68318ebed9b7b5428e182e0b2d2ccc269af3d8..35d6b6c81996195399e0b3ff6ebd2da829a2b5ce 100644
--- a/source/components/form/field-set.mjs
+++ b/source/components/form/field-set.mjs
@@ -132,9 +132,7 @@ class FieldSet extends CustomControl {
 				multipleColumns: true,
 			},
 			actions: {
-				click: () => {
-
-				},
+				click: () => {},
 			},
 			value: null,
 		});
diff --git a/source/components/form/message-state-button.mjs b/source/components/form/message-state-button.mjs
index 1e0eb4389e56a7d060eb987c35472dab04f52174..66e14bde74bac6a7f8299136a8dbe1e066539537 100644
--- a/source/components/form/message-state-button.mjs
+++ b/source/components/form/message-state-button.mjs
@@ -117,9 +117,7 @@ class MessageStateButton extends Popper {
 				button: "monster-button-primary",
 			},
 			actions: {
-				click: (e) => {
-
-				},
+				click: (e) => {},
 			},
 			features: {
 				disableButton: false,
diff --git a/source/components/form/password.mjs b/source/components/form/password.mjs
index 48cff155b6d18fe271e15c9f53399346f4556f86..8415ffaded497c0ba44dd96c8e26ccd0d2ff64ed 100644
--- a/source/components/form/password.mjs
+++ b/source/components/form/password.mjs
@@ -10,18 +10,18 @@
  * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
 
-import {instanceSymbol} from "../../constants.mjs";
+import { instanceSymbol } from "../../constants.mjs";
 import { ATTRIBUTE_ROLE } from "../../dom/constants.mjs";
-import {CustomControl} from "../../dom/customcontrol.mjs";
+import { CustomControl } from "../../dom/customcontrol.mjs";
 import {
-    assembleMethodSymbol,
-    registerCustomElement,
+	assembleMethodSymbol,
+	registerCustomElement,
 } from "../../dom/customelement.mjs";
-import {PasswordStyleSheet} from "./stylesheet/password.mjs";
-import {fireCustomEvent} from "../../dom/events.mjs";
-import "./input-group.mjs"
+import { PasswordStyleSheet } from "./stylesheet/password.mjs";
+import { fireCustomEvent } from "../../dom/events.mjs";
+import "./input-group.mjs";
 
-export {Password};
+export { Password };
 
 /**
  * @private
@@ -59,102 +59,102 @@ export const inputElementSymbol = Symbol("inputIconElement");
  * @summary A beautiful Password field that can make your life easier and also looks good.
  */
 class Password extends CustomControl {
-    /**
-     * This method is called by the `instanceof` operator.
-     * @returns {symbol}
-     */
-    static get [instanceSymbol]() {
-        return Symbol.for("@schukai/monster/components/form/password@@instance");
-    }
+	/**
+	 * This method is called by the `instanceof` operator.
+	 * @returns {symbol}
+	 */
+	static get [instanceSymbol]() {
+		return Symbol.for("@schukai/monster/components/form/password@@instance");
+	}
 
-    /**
-     *
-     * @return {Components.Form.Password
-     */
-    [assembleMethodSymbol]() {
-        super[assembleMethodSymbol]();
-        initControlReferences.call(this);
-        initEventHandler.call(this);
-        initPasswordState.call(this);
-        return this;
-    }
+	/**
+	 *
+	 * @return {Components.Form.Password
+	 */
+	[assembleMethodSymbol]() {
+		super[assembleMethodSymbol]();
+		initControlReferences.call(this);
+		initEventHandler.call(this);
+		initPasswordState.call(this);
+		return this;
+	}
 
-    get value() {
-        return this[inputElementSymbol].value;
-    }
+	get value() {
+		return this[inputElementSymbol].value;
+	}
 
-    /**
-     * Must be overridden by a derived class and set the value of the control.
-     *
-     * This is a method of [internal API](https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals), which is a part of the web standard for custom elements.
-     *
-     * @param {*} value The value to set.
-     * @throws {Error} the value setter must be overwritten by the derived class
-     */
-    set value(value) {
-        this[inputElementSymbol].value = value;
-    }
+	/**
+	 * Must be overridden by a derived class and set the value of the control.
+	 *
+	 * This is a method of [internal API](https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals), which is a part of the web standard for custom elements.
+	 *
+	 * @param {*} value The value to set.
+	 * @throws {Error} the value setter must be overwritten by the derived class
+	 */
+	set value(value) {
+		this[inputElementSymbol].value = value;
+	}
 
-    /**
-     * To set the options via the HTML Tag, the attribute `data-monster-options` must be used.
-     * @see {@link https://monsterjs.org/en/doc/#configurate-a-monster-control}
-     *
-     * The individual configuration values can be found in the table.
-     *
-     * @property {Object} templates Template definitions
-     * @property {string} templates.main Main template
-     * @property {string} templateMapping.hidden-icon The hidden icon template (without svg tag)
-     * @property {string} templateMapping.visible-icon The visible icon template (without svg tag)
-     * @property {string} type="password" The type of the input field
-     * @property {string} placeholder="" The placeholder of the input field
-     * @property {boolean} required=false The required state of the input field
-     * @property {string} autocomplete="off" The autocomplete state of the input field
-     * @property {string} inputmode="text" The inputmode state of the input field
-     * @property {Object} aria Aria attributes
-     * @property {boolean} aria.required=false The required state of the input field
-     * @property {string} aria.placeholder="" The placeholder of the input field
-     * @property {boolean} disabled=false Disabled state
-     */
-    get defaults() {
-        return Object.assign({}, super.defaults, {
-            templates: {
-                main: getTemplate(),
-            },
-            templateMapping: {
-                "hidden-icon": `                    
+	/**
+	 * To set the options via the HTML Tag, the attribute `data-monster-options` must be used.
+	 * @see {@link https://monsterjs.org/en/doc/#configurate-a-monster-control}
+	 *
+	 * The individual configuration values can be found in the table.
+	 *
+	 * @property {Object} templates Template definitions
+	 * @property {string} templates.main Main template
+	 * @property {string} templateMapping.hidden-icon The hidden icon template (without svg tag)
+	 * @property {string} templateMapping.visible-icon The visible icon template (without svg tag)
+	 * @property {string} type="password" The type of the input field
+	 * @property {string} placeholder="" The placeholder of the input field
+	 * @property {boolean} required=false The required state of the input field
+	 * @property {string} autocomplete="off" The autocomplete state of the input field
+	 * @property {string} inputmode="text" The inputmode state of the input field
+	 * @property {Object} aria Aria attributes
+	 * @property {boolean} aria.required=false The required state of the input field
+	 * @property {string} aria.placeholder="" The placeholder of the input field
+	 * @property {boolean} disabled=false Disabled state
+	 */
+	get defaults() {
+		return Object.assign({}, super.defaults, {
+			templates: {
+				main: getTemplate(),
+			},
+			templateMapping: {
+				"hidden-icon": `                    
                     <path d="M13.359 11.238C15.06 9.72 16 8 16 8s-3-5.5-8-5.5a7 7 0 0 0-2.79.588l.77.771A6 6 0 0 1 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13 13 0 0 1 14.828 8q-.086.13-.195.288c-.335.48-.83 1.12-1.465 1.755q-.247.248-.517.486z"/>
                     <path d="M11.297 9.176a3.5 3.5 0 0 0-4.474-4.474l.823.823a2.5 2.5 0 0 1 2.829 2.829zm-2.943 1.299.822.822a3.5 3.5 0 0 1-4.474-4.474l.823.823a2.5 2.5 0 0 0 2.829 2.829"/>
                     <path d="M3.35 5.47q-.27.24-.518.487A13 13 0 0 0 1.172 8l.195.288c.335.48.83 1.12 1.465 1.755C4.121 11.332 5.881 12.5 8 12.5c.716 0 1.39-.133 2.02-.36l.77.772A7 7 0 0 1 8 13.5C3 13.5 0 8 0 8s.939-1.721 2.641-3.238l.708.709zm10.296 8.884-12-12 .708-.708 12 12z"/>`,
-                "visible-icon": `
+				"visible-icon": `
                     <path d="M16 8s-3-5.5-8-5.5S0 8 0 8s3 5.5 8 5.5S16 8 16 8M1.173 8a13 13 0 0 1 1.66-2.043C4.12 4.668 5.88 3.5 8 3.5s3.879 1.168 5.168 2.457A13 13 0 0 1 14.828 8q-.086.13-.195.288c-.335.48-.83 1.12-1.465 1.755C11.879 11.332 10.119 12.5 8 12.5s-3.879-1.168-5.168-2.457A13 13 0 0 1 1.172 8z"/>
                     <path d="M8 5.5a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5M4.5 8a3.5 3.5 0 1 1 7 0 3.5 3.5 0 0 1-7 0"/>`,
-            },
-            type: "password",
-            placeholder: "",
-            required: false,
-            autocomplete: "off",
-            inputmode: "text",
-            aria: {
-                required: false,
-                placeholder: "",
-            },
-            disabled: false,
-        });
-    }
+			},
+			type: "password",
+			placeholder: "",
+			required: false,
+			autocomplete: "off",
+			inputmode: "text",
+			aria: {
+				required: false,
+				placeholder: "",
+			},
+			disabled: false,
+		});
+	}
 
-    /**
-     * @return {string}
-     */
-    static getTag() {
-        return "monster-password";
-    }
+	/**
+	 * @return {string}
+	 */
+	static getTag() {
+		return "monster-password";
+	}
 
-    /**
-     * @return {CSSStyleSheet[]}
-     */
-    static getCSSStyleSheet() {
-        return [PasswordStyleSheet];
-    }
+	/**
+	 * @return {CSSStyleSheet[]}
+	 */
+	static getCSSStyleSheet() {
+		return [PasswordStyleSheet];
+	}
 }
 
 /**
@@ -164,49 +164,49 @@ class Password extends CustomControl {
  * @fires monster-password-show
  */
 function initEventHandler() {
-    const self = this;
-    const element = this[passwordElementSymbol];
+	const self = this;
+	const element = this[passwordElementSymbol];
 
-    const type = "click";
+	const type = "click";
 
-    this[hiddenIconElementSymbol].addEventListener(type, function (event) {
-        fireCustomEvent(self, "monster-password-show", {
-            element: self,
-        });
+	this[hiddenIconElementSymbol].addEventListener(type, function (event) {
+		fireCustomEvent(self, "monster-password-show", {
+			element: self,
+		});
 
-        requestAnimationFrame(() => {
-            self[visibleIconElementSymbol].classList.remove("hidden");
-            self[hiddenIconElementSymbol].classList.add("hidden");
-            self.setOption("type", "text");
-        });
-    });
+		requestAnimationFrame(() => {
+			self[visibleIconElementSymbol].classList.remove("hidden");
+			self[hiddenIconElementSymbol].classList.add("hidden");
+			self.setOption("type", "text");
+		});
+	});
 
-    this[visibleIconElementSymbol].addEventListener(type, function (event) {
-        fireCustomEvent(self, "monster-password-hide", {
-            element: self,
-        });
+	this[visibleIconElementSymbol].addEventListener(type, function (event) {
+		fireCustomEvent(self, "monster-password-hide", {
+			element: self,
+		});
 
-        requestAnimationFrame(() => {
-            self[visibleIconElementSymbol].classList.add("hidden");
-            self[hiddenIconElementSymbol].classList.remove("hidden");
-            self.setOption("type", "password");
-        });
-    });
+		requestAnimationFrame(() => {
+			self[visibleIconElementSymbol].classList.add("hidden");
+			self[hiddenIconElementSymbol].classList.remove("hidden");
+			self.setOption("type", "password");
+		});
+	});
 
-    return this;
+	return this;
 }
 
 /**
  * @private
  */
 function initPasswordState() {
-    if (this.getOption("type") === "password") {
-        this[visibleIconElementSymbol].classList.add("hidden");
-        this[hiddenIconElementSymbol].classList.remove("hidden");
-    } else {
-        this[visibleIconElementSymbol].classList.remove("hidden");
-        this[hiddenIconElementSymbol].classList.add("hidden");
-    }
+	if (this.getOption("type") === "password") {
+		this[visibleIconElementSymbol].classList.add("hidden");
+		this[hiddenIconElementSymbol].classList.remove("hidden");
+	} else {
+		this[visibleIconElementSymbol].classList.remove("hidden");
+		this[hiddenIconElementSymbol].classList.add("hidden");
+	}
 }
 
 /**
@@ -214,21 +214,21 @@ function initPasswordState() {
  * @return {void}
  */
 function initControlReferences() {
-    this[passwordElementSymbol] = this.shadowRoot.querySelector(
-        `[${ATTRIBUTE_ROLE}="control"]`,
-    );
+	this[passwordElementSymbol] = this.shadowRoot.querySelector(
+		`[${ATTRIBUTE_ROLE}="control"]`,
+	);
 
-    this[visibleIconElementSymbol] = this.shadowRoot.querySelector(
-        `[${ATTRIBUTE_ROLE}="visible-icon"]`,
-    );
+	this[visibleIconElementSymbol] = this.shadowRoot.querySelector(
+		`[${ATTRIBUTE_ROLE}="visible-icon"]`,
+	);
 
-    this[hiddenIconElementSymbol] = this.shadowRoot.querySelector(
-        `[${ATTRIBUTE_ROLE}="hidden-icon"]`,
-    );
+	this[hiddenIconElementSymbol] = this.shadowRoot.querySelector(
+		`[${ATTRIBUTE_ROLE}="hidden-icon"]`,
+	);
 
-    this[inputElementSymbol] = this.shadowRoot.querySelector(
-        `[${ATTRIBUTE_ROLE}="input"]`,
-    );
+	this[inputElementSymbol] = this.shadowRoot.querySelector(
+		`[${ATTRIBUTE_ROLE}="input"]`,
+	);
 }
 
 /**
@@ -236,8 +236,8 @@ function initControlReferences() {
  * @return {string}
  */
 function getTemplate() {
-    // language=HTML
-    return `
+	// language=HTML
+	return `
         <div data-monster-role="control" part="control">
             <monster-input-group>
                 <input data-monster-role="input"
diff --git a/source/components/form/stylesheet/action-button.mjs b/source/components/form/stylesheet/action-button.mjs
index 70e53888dde7ba469b87f4f5fada281fab7459d3..c753c7ca018807c01a0419659f865817a8f86f19 100644
--- a/source/components/form/stylesheet/action-button.mjs
+++ b/source/components/form/stylesheet/action-button.mjs
@@ -10,10 +10,10 @@
  * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
 
-import {addAttributeToken} from "../../../dom/attributes.mjs";
-import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
+import { addAttributeToken } from "../../../dom/attributes.mjs";
+import { ATTRIBUTE_ERRORMESSAGE } from "../../../dom/constants.mjs";
 
-export {ActionButtonStyleSheet}
+export { ActionButtonStyleSheet };
 
 /**
  * @private
@@ -22,10 +22,17 @@ export {ActionButtonStyleSheet}
 const ActionButtonStyleSheet = new CSSStyleSheet();
 
 try {
-  ActionButtonStyleSheet.insertRule(`
+	ActionButtonStyleSheet.insertRule(
+		`
 @layer actionbutton { 
 :after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,\"Quicksand\",\"Segoe UI\",\"Roboto\",\"Oxygen\",\"Ubuntu\",\"Cantarell\",\"Fira Sans\",\"Droid Sans\",\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";--monster-font-family-monospace:\"Consolas\",\"Courier New\",\"Roboto Mono\",\"Source Code Pro\",\"Fira Mono\",monospace;--monster-color-primary-1:var(--monster-color-gray-6);--monster-color-primary-2:var(--monster-color-gray-6);--monster-color-primary-3:var(--monster-color-cinnamon-1);--monster-color-primary-4:var(--monster-color-cinnamon-1);--monster-bg-color-primary-1:var(--monster-color-gray-1);--monster-bg-color-primary-2:var(--monster-color-gray-2);--monster-bg-color-primary-3:var(--monster-color-gray-6);--monster-bg-color-primary-4:var(--monster-color-gray-4)}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1)}}:after,:before,:root{--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6)}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1)}}:after,:before,:root{--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6)}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1)}}:after,:before,:root{--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5)}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4)}}:after,:before,:root{--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5)}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3)}}:after,:before,:root{--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5)}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3)}}:after,:before,:root{--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5)}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4)}}:after,:before,:root{--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6)}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6)}}:after,:before,:root{--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6)}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1)}}:after,:before,:root{--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-theme-control-bg-color:var(--monster-color-seashell-1);--monster-theme-control-color:var(--monster-color-seashell-6);--monster-theme-control-hover-color:var(--monster-color-seashell-6);--monster-theme-control-hover-bg-color:var(--monster-color-seashell-2);--monster-theme-control-border-width:2px;--monster-theme-control-border-style:solid;--monster-theme-control-border-radius:0;--monster-theme-control-border-color:var(--monster-color-primary-1)}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-theme-control-bg-color:var(--monster-color-gray-5);--monster-theme-control-color:var(--monster-color-gray-1);--monster-theme-control-border-color:var(--monster-color-gray-3);--monster-theme-control-hover-color:var(--monster-color-gray-1);--monster-theme-control-hover-bg-color:var(--monster-color-gray-6)}}:after,:before,:root{--monster-theme-on-color:var(--monster-color-green-1);--monster-theme-on-bg-color:var(--monster-color-green-5);--monster-theme-off-color:var(--monster-color-gray-1);--monster-theme-off-bg-color:var(--monster-color-gray-4)}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-theme-on-color:var(--monster-color-gray-6);--monster-theme-on-bg-color:var(--monster-color-gray-1);--monster-theme-off-color:var(--monster-color-gray-1);--monster-theme-off-bg-color:var(--monster-color-gray-5)}}:after,:before,:root{--monster-border-style:solid;--monster-border-width:3px;--monster-border-radius:0;--monster-outline-width:1px;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:2px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px;--monster-color-gray-1:#f6f6f6;--monster-color-gray-2:#e2e2e2;--monster-color-gray-3:#8b8b8b;--monster-color-gray-4:#6f6f6f;--monster-color-gray-5:#3e3e3e;--monster-color-gray-6:#222;--monster-color-rose-1:#fff7f9;--monster-color-rose-2:#ffdce5;--monster-color-rose-3:#ff3b8d;--monster-color-rose-4:#db0072;--monster-color-rose-5:#800040;--monster-color-rose-6:#4c0023;--monster-color-raspberry-1:#fff8f8;--monster-color-raspberry-2:#ffdddf;--monster-color-raspberry-3:#ff426c;--monster-color-raspberry-4:#de0051;--monster-color-raspberry-5:#82002c;--monster-color-raspberry-6:#510018;--monster-color-red-1:#fff8f6;--monster-color-red-2:#ffddd8;--monster-color-red-3:#ff4647;--monster-color-red-4:#e0002b;--monster-color-red-5:#830014;--monster-color-red-6:#530003;--monster-color-orange-1:#fff8f5;--monster-color-orange-2:#ffded1;--monster-color-orange-3:#fd4d00;--monster-color-orange-4:#cd3c00;--monster-color-orange-5:#752100;--monster-color-orange-6:#401600;--monster-color-cinnamon-1:#fff8f3;--monster-color-cinnamon-2:#ffdfc6;--monster-color-cinnamon-3:#d57300;--monster-color-cinnamon-4:#ac5c00;--monster-color-cinnamon-5:#633300;--monster-color-cinnamon-6:#371d00;--monster-color-amber-1:#fff8ef;--monster-color-amber-2:#ffe0b2;--monster-color-amber-3:#b98300;--monster-color-amber-4:#926700;--monster-color-amber-5:#523800;--monster-color-amber-6:#302100;--monster-color-yellow-1:#fff9e5;--monster-color-yellow-2:#ffe53e;--monster-color-yellow-3:#9c8b00;--monster-color-yellow-4:#7d6f00;--monster-color-yellow-5:#463d00;--monster-color-yellow-6:#292300;--monster-color-lime-1:#f7ffac;--monster-color-lime-2:#d5f200;--monster-color-lime-3:#819300;--monster-color-lime-4:#677600;--monster-color-lime-5:#394100;--monster-color-lime-6:#222600;--monster-color-chartreuse-1:#e5ffc3;--monster-color-chartreuse-2:#98fb00;--monster-color-chartreuse-3:#5c9b00;--monster-color-chartreuse-4:#497c00;--monster-color-chartreuse-5:#264500;--monster-color-chartreuse-6:#182600;--monster-color-green-1:#e0ffd9;--monster-color-green-2:#72ff6c;--monster-color-green-3:#00a21f;--monster-color-green-4:#008217;--monster-color-green-5:#004908;--monster-color-green-6:#062800;--monster-color-emerald-1:#dcffe6;--monster-color-emerald-2:#5dffa2;--monster-color-emerald-3:#00a05a;--monster-color-emerald-4:#008147;--monster-color-emerald-5:#004825;--monster-color-emerald-6:#002812;--monster-color-aquamarine-1:#daffef;--monster-color-aquamarine-2:#42ffc6;--monster-color-aquamarine-3:#009f78;--monster-color-aquamarine-4:#007f5f;--monster-color-aquamarine-5:#004734;--monster-color-aquamarine-6:#00281b;--monster-color-teal-1:#d7fff7;--monster-color-teal-2:#00ffe4;--monster-color-teal-3:#009e8c;--monster-color-teal-4:#007c6e;--monster-color-teal-5:#00443c;--monster-color-teal-6:#002722;--monster-color-cyan-1:#c4fffe;--monster-color-cyan-2:#00fafb;--monster-color-cyan-3:#00999a;--monster-color-cyan-4:#007a7b;--monster-color-cyan-5:#004344;--monster-color-cyan-6:#002525;--monster-color-powder-1:#dafaff;--monster-color-powder-2:#8df0ff;--monster-color-powder-3:#0098a9;--monster-color-powder-4:#007987;--monster-color-powder-5:#004048;--monster-color-powder-6:#002227;--monster-color-sky-1:#e3f7ff;--monster-color-sky-2:#aee9ff;--monster-color-sky-3:#0094b4;--monster-color-sky-4:#007590;--monster-color-sky-5:#00404f;--monster-color-sky-6:#001f28;--monster-color-cerulean-1:#e8f6ff;--monster-color-cerulean-2:#b9e3ff;--monster-color-cerulean-3:#0092c5;--monster-color-cerulean-4:#00749d;--monster-color-cerulean-5:#003c54;--monster-color-cerulean-6:#001d2a;--monster-color-azure-1:#e8f2ff;--monster-color-azure-2:#c6e0ff;--monster-color-azure-3:#008fdb;--monster-color-azure-4:#0071af;--monster-color-azure-5:#003b5e;--monster-color-azure-6:#001c30;--monster-color-blue-1:#f0f4ff;--monster-color-blue-2:#d4e0ff;--monster-color-blue-3:#0089fc;--monster-color-blue-4:#006dca;--monster-color-blue-5:#00386d;--monster-color-blue-6:#001a39;--monster-color-indigo-1:#f3f3ff;--monster-color-indigo-2:#deddff;--monster-color-indigo-3:#657eff;--monster-color-indigo-4:#0061fc;--monster-color-indigo-5:#00328a;--monster-color-indigo-6:#001649;--monster-color-violet-1:#f7f1ff;--monster-color-violet-2:#e8daff;--monster-color-violet-3:#9b70ff;--monster-color-violet-4:#794aff;--monster-color-violet-5:#2d0fbf;--monster-color-violet-6:#0b0074;--monster-color-purple-1:#fdf4ff;--monster-color-purple-2:#f7d9ff;--monster-color-purple-3:#d150ff;--monster-color-purple-4:#b01fe3;--monster-color-purple-5:#660087;--monster-color-purple-6:#3a004f;--monster-color-magenta-1:#fff3fc;--monster-color-magenta-2:#ffd7f6;--monster-color-magenta-3:#f911e0;--monster-color-magenta-4:#ca00b6;--monster-color-magenta-5:#740068;--monster-color-magenta-6:#44003c;--monster-color-pink-1:#fff7fb;--monster-color-pink-2:#ffdcec;--monster-color-pink-3:#ff2fb2;--monster-color-pink-4:#d2008f;--monster-color-pink-5:#790051;--monster-color-pink-6:#4b0030;--monster-gradient-tangerine-1:#e5b875;--monster-gradient-tangerine-2:#d9a362;--monster-gradient-tangerine-3:#c08a4e;--monster-gradient-tangerine-4:#a7713b;--monster-gradient-tangerine-5:#8f5a28;--monster-gradient-tangerine-6:#360505;--monster-color-seashell-1:#f7f5ef;--monster-color-seashell-2:#e5e2d9;--monster-color-seashell-3:#cbc6b3;--monster-color-seashell-4:#a19d8a;--monster-color-seashell-5:#7a7566;--monster-color-seashell-6:#514d3f}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-0{border-radius:0;border-style:none;border-width:0}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}[data-monster-role=control] div[data-monster-role=popper]{padding:2px}:is([data-monster-role=control] [data-monster-role=container]) [data-monster-role=buttons]{display:flex;flex-direction:column;width:100%}[data-monster-role=control] monster-message-state-button{border:0;width:auto}:is([data-monster-role=control] monster-message-state-button)::part(button-button){border:0;margin:2px} 
-}`, 0);
+}`,
+		0,
+	);
 } catch (e) {
-  addAttributeToken(document.getRootNode().querySelector('html'), ATTRIBUTE_ERRORMESSAGE, e + "");
+	addAttributeToken(
+		document.getRootNode().querySelector("html"),
+		ATTRIBUTE_ERRORMESSAGE,
+		e + "",
+	);
 }
diff --git a/source/components/form/stylesheet/api-bar.mjs b/source/components/form/stylesheet/api-bar.mjs
index c701e393066b9be92c835afe07658583f6b948b6..313353e40721680cb15b15a45f45558087d36036 100644
--- a/source/components/form/stylesheet/api-bar.mjs
+++ b/source/components/form/stylesheet/api-bar.mjs
@@ -10,10 +10,10 @@
  * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
 
-import {addAttributeToken} from "../../../dom/attributes.mjs";
-import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
+import { addAttributeToken } from "../../../dom/attributes.mjs";
+import { ATTRIBUTE_ERRORMESSAGE } from "../../../dom/constants.mjs";
 
-export {ApiBarStyleSheet}
+export { ApiBarStyleSheet };
 
 /**
  * @private
@@ -22,10 +22,17 @@ export {ApiBarStyleSheet}
 const ApiBarStyleSheet = new CSSStyleSheet();
 
 try {
-  ApiBarStyleSheet.insertRule(`
+	ApiBarStyleSheet.insertRule(
+		`
 @layer apibar { 
  
-}`, 0);
+}`,
+		0,
+	);
 } catch (e) {
-  addAttributeToken(document.getRootNode().querySelector('html'), ATTRIBUTE_ERRORMESSAGE, e + "");
+	addAttributeToken(
+		document.getRootNode().querySelector("html"),
+		ATTRIBUTE_ERRORMESSAGE,
+		e + "",
+	);
 }
diff --git a/source/components/form/stylesheet/button-bar.mjs b/source/components/form/stylesheet/button-bar.mjs
index c72209d79d45fc6f95d65b8e980ac7a6a2e7b8d9..9681f7bd7f9bc85e55e77aac969907225d86c8b3 100644
--- a/source/components/form/stylesheet/button-bar.mjs
+++ b/source/components/form/stylesheet/button-bar.mjs
@@ -10,10 +10,10 @@
  * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
 
-import {addAttributeToken} from "../../../dom/attributes.mjs";
-import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
+import { addAttributeToken } from "../../../dom/attributes.mjs";
+import { ATTRIBUTE_ERRORMESSAGE } from "../../../dom/constants.mjs";
 
-export {ButtonBarStyleSheet}
+export { ButtonBarStyleSheet };
 
 /**
  * @private
@@ -22,10 +22,17 @@ export {ButtonBarStyleSheet}
 const ButtonBarStyleSheet = new CSSStyleSheet();
 
 try {
-  ButtonBarStyleSheet.insertRule(`
+	ButtonBarStyleSheet.insertRule(
+		`
 @layer buttonbar { 
 .block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}[data-monster-role=control]{box-sizing:border-box;outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:host{box-sizing:border-box;display:block}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-0{border-radius:0;border-style:none;border-width:0}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}.monster-button-primary,button{align-items:center;background-color:var(--monster-bg-color-primary-1);background-position:50%;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-primary{background-color:var(--monster-bg-color-primary-4);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-button-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-secondary-4)}.monster-button-secondary,.monster-button-tertiary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-tertiary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-tertiary-4);border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-tertiary-4)}.monster-button-outline-primary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-primary-4);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-4)}.monster-button-outline-primary,.monster-button-outline-secondary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-outline-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-secondary-4)}.monster-button-outline-tertiary{align-items:center;background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-tertiary-4);background-position:50%;border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);color:var(--monster-bg-color-tertiary-4);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}button:active,button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}button:active{z-index:var(--monster-z-index-outline)}.monster-button-bar,.monster-button-group{align-content:center;align-items:stretch;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.monster-button-group{box-sizing:border-box;gap:0;margin:1rem 0}.monster-button-group>:not(:last-child){margin-right:calc(var(--monster-border-width)*-1)}.monster-button-group :hover{box-shadow:none}button:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px;z-index:var(--monster-z-index-outline)}@media (prefers-color-scheme:light){button:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px;z-index:var(--monster-z-index-outline)}}@font-face{font-display:swap;font-family:Raleway;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format(\"woff2\");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Quicksand;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAADI0ABAAAAAAdXAAADHTAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGlwbnFYchzAGYD9TVEFUHACFABEICoGqIIGGVguEKAABNgIkA4hMBCAFhUIHIAwHG2pgRQdi2DgAaPAZFkWwcQAFm+8TRdkmnUj2/ylBmzGhdehbZSF0R7uo7hkZCZGT6hnpobZTWxy6cODh0Eg/9o0FR+HA8s3J1b3tw59XozgcCNwjZmttwCVxX4hLopEkTaRXt0ZIY2It4jf92XsCvMRLUwj2Qo0IkhcxKkYq5iQtcfnimrpZ0jqHtGngJbl/tDqziiqdqwAzoQ0TLx86MzpX5tI5T/zv96975r4AoosRBDJfBbmkWgsItoqNbG2XJ9CkeobHbf3zBBmoGA1I5agxGO1GTaoNEFTM67Iuon9FXvzf+iuiwQEK/W/ahmibz+VdEbVVR4YN+Pd/jczCTO7LnwWgIqFl5QAl21YB2p5KJFlL6Jf7ZeBzfu4cFJ3q+AOC8QV66zobWwYhWwD/V5smvEXozEmETWvtKG2TPG3hWcpQm9nQOvR8JFIVgZBd2mbFc+I1fYXvwNQkZivqyP0e9386y1ba9d3zBqGLqwAX3XpzbTH6+tbXzGgkA2uJfQyelfWeJSvgC0JFUF1axNdTU2HTpSj7lJl/nemq7+9vSMk/6JadGssqrgGeetnaNVPL4z+d7qx/sgxnF2T5egHSUWyX7ADDVMKxoxz0BchuXxi2AsCatTPyvgOONTObrOSccGuCQlzhEbKB/vrtz1irH8hsZna79nInhy0yRELCJyLgWf86/3AgTDAAALpjNEg3JNNQZLhsZLoypFw1pk4dcthh5KijyAknEMIBQp+uJ/ilkhipuCPHeg+G9lpFoQ/a+xOKc6HFAxB2zrp3ozAXaiBuxVM8VmCkWmV7tt83Uql6i6xwyaswCpV9+czU5OfjrMrH/B1bdsSZK7mSW/a/tCmvKoJEihYjViKPPrymKVDkP/9rMMMscy2w0FLLrLPRDntdcx0zKzM/E6iApCj6L/k/aKA3A28OyVxaC4OlT5aduPMPWfZB0vBkRtncYAGdhSuWblo251rT9eCOCKLgfbYGkqBJ6VQya4KTGIHUg5fhqRSYEjMHRxIHI+lJ3FTztN0pWh7DDDFPptopuN44J/AIkg1SeOpci9hP0RTQEiWOwzxN00ZHU+UpS1GF8BYPED3ABLF1nqLFfAtSIds4tZQrEJCz9TKtZ2TMUVhaxHOLW3iYSt0poEcYgoSx47VDqcyhkgkFPYHdvMSx9V9+t76NLZqDB2m9YYhmtmv4z0l71aDX/hczOwQuxq6k1lUC7nmntG/P3SzzKGQ/fwRUD/cOMQiDIpTgjxvvb/PbwE9slA6ijLITxbkGlp2mXhfU1O5A/yHeabRWIzIdWjWZ2W098S3NJmxIUxD0JS2IQqh7/DLOVFUY9I/071dqJFy4gN9SNyPsAqklJGXPafeM+xbF5qIYc/IABxmlm4BcB+oPORz19CM2ouh2oGtENN2AJFrCVzO4NoD3exWSEKG4sjMDtOVJSgYLV3oSaLYee6OrE59JWtI7Xq6FMNB6pBaDzmSG7x9P/ncoAQC0YO65AV/8VqR5pC7O0KJRSTiXMHeajzvq8fD6TEatdSeEdCyJyOP7HS0HNscjn4EUH7IVv5B9NcHt6Q+Qxr5NgJlEYpBbl7iWFTg2SvstNLpk1wd0EOB/HKOP51oAkKHbk0cxgaUSmEdzvvREXfXnUEqxqGgdx/1pUBn6ySUbiL8bkIlCpOC2HF/Y0x5qpxTL6LmlUPbFOJMjYQDeYJIcYAhtKVqfrFKIngmjOI5ex+WbSUArCGNwhIDiaKPQV12ezadA04CHG85LYmh2giMEohguFCE7Wt2RnpZOP0LAmzjJNJMl1FqQ2wfbUBJb8+gdfiSGSW1gC1tZ0z7QVQddoTSysjSebzolfyohStggBeeLCHODfMyo2BOS8a12hidr3YUhRDVXTAIxE6xwms0DEg1MRFHAGtGZJLE6CtBZl5J2A7ulTP20MjQXu+FGcRhjCoVXtowZitheAigblnOZIRgDCgYKejjBQoQ6hRh2LIarGWB7z+YitKAuqEMAl9QDIgHc9RsYiUzANgMsZGLLoUaxakkVrfDozK210ZbK04Zpi6CEBVosMOAAUVgQiwV2HMjBDuKUgJOIgyXhEMnsUClSaaSxw6TriOmMRV24WSG/Ar1ob8LN9MFafbFoqNrccCNy4kijqIwBJlNwBC8mWVglG+tMZ+v55OMV4EiF2KCIbVSslFoZNpmFw82XWswoC56KD+qUroIzKmnu4GAZeJZ/EABM4QWQRpFqhoVYCQfPdpOhHGaWux4euFiHnu400po1N7CXVMnfKjR2YdFiscWqFquBdNvAa9dy8tETP+713LwcDPxvDd0aw+9neyfgd/Y38CEL5sJiWAnr+33/wZKcQnwKjrXiMABpDuCoaUikGIShCAEFyEEV5JelFcHBp9Lne/e/a7bMEw8KpP6ZZVmVR8S5obAmVZJWOM5y0j8BABQYQTUmQyaZGET1x9HDCUkMG2M2HEOhuX5HjTuBpSpAKwiXOmsqBqDAXzQUIwZ+fOBHvgZhYhPG3/jVyIvJODdBIC0jK5sKnN76qUxsI5RjtApivwcmeAQK9FYKGsEStCQQog76G4ZemqTJTARW1D8yBVIQBVMIhaZu/VH7hSOBRFKRmjQkSbkgQHoirYzhKFXX7LIJoLC5aani0xgWLgRgTglkrOa1WMJwnQ9XzlcfmADshQ4H9Eoeny5SorHrWg9ts0pI7v/3sEewAazruC+GCPCfxrkT9CYA9C9bA5BxSKK3dx0AYI/eyiqmtBuAo0tcNubr80wl4+m4MPj9mKaWP/FJ1tltPdUzO4G/hL9WjpTNslVuIyfI6XJXuVieEwqt4dbmfj8ACCJzSfdn4pMo43KskXWysQVpjD9Swm0F9APAvwOANx2uvcb2C9uAC9+EC894zzqfGaP7KObhrnM7z20BAYBEQH8ngN7K93Z1euVzNPqn7TPHIvMcddV1i62z3n9OmWWT+ZaaaYkLzjlvgWuIhiRQsGa0motgYGRiZhElWqw4dg5OiZIkS5Fmjf+t9QAHokJ6b/3gbjL11kdfObQ3gBh66mu9sv63TudToFCRYmVWuWe1S/ab67DjjjjhvpsRcUuNLS7b7HbUuOui3/0RDlfc0BAev6m11T/+9q+FBAxHhSdSCxAuRKgwkVrQ0Qsia82qpbZaOaONBC7xFKliTNNeBreO2umgk6566a6HnoYYYKBBPEabYKxxJhnvrIny5ciVp8RUpWwmR02EjTbYaZcdCA2/EABoDQBsP9ByQL8FMP8A8J8DNwcAADZ2FbyEhOMULCWqophIiFFGP6/JSbbnnJgUxV1DzLQAhCJIuEbBo3gyaSUJRSNdELHSHtIM3HHGsSNxfewEncfr6cCgMWl7jaaJ00exQtQR9iiG4CUw8gSiJnnwSb2rsAipRElnxCYMs6cSyI+e2Rx6Eqb+CrGEHmOoNAOFpJSyNlAThHTNPoB9HQOrx4j5XkzOg4QOCWmcPjRxTC3U8YPouUU7X7zMvrkiWo7dJsZnQQAE7nn1/t5fZ2REQmo0weiuvJkLlg+wROks5xS8M8WLlToExKRJuN5Zluc9VxmGp3XohSFZg602h0PpfQjgHHLdU9dYGZGUjF8xGPafpCiNBq9V6i06T04YYp4oK14oc3elrCiVEYDc/j/yQSnPOtaJnzHBaahcA0CfACq8S75ZtAk0pTnKNAuuMQWQbFivtnPUxnMLQOu2fEmNb1Zq55IMc5QZtmp8VylR+FBYoylXpX7VBDAmdmItHV2FRwxq3f4zJox4t3KZfpsjy8u/VWbUg7Z1R9MgpbjJ4tm4WADMQk45wDSkURgtyEmw2MKRTWDFZdN/FGaRfZHba7OLYO/uT4iHB4qMcqtH7KVv0bqwOZF/teY+DQ4oHUQYhQ4OVQobTWN1S7DB8PXc+zux6OQ3xO1FdmEqA/vyiK3tuaHSRaW40OY08ZVAPTWMXwK4ZEOxBhC8fTwasGhxKSt7yQlBoT50orx+kNqomG+qIM14TyXVhSID10uEI2CcuFOq54CcQvNzx/pcf8GodNY/S3xmaV+zJZsw79ile9F/U8rhPVC4mQlcMDrboDYS6CNb4AKwxp+REFVS1TI6UMZw4wYWQNPQW5tNTnFPdNgw0FM+dqgHg826J8siVi3unQ4Tlsi9gb7G45mWLnd/Dz+/Rna8RLEe59mqpr7ShoqtVwSIvfmGdV2v8ypqjU7v5j6nrP111pgsiLxNje1WHB8bMjpWJ81dtS2panwTgwnN233Wqw4bDJSZGlBJTSDlHeMYZXZtO9fulWM/e0DN3ZzNFbzf/ds2uXILKgxdkwN9WETZu7ls5rkwwRKwyVuV2FM2ealfGVah3LU0r51tWfM5WFHCJ/WMYYUjhWy+cEo8eyWBMXEzWCVLkybYjj1vrVJdnORXexsrgUDLqbah2oiD857ESGLavtkTLJRfmNWE8eaG290Wm5IsXi5Th7WwlO8c3LSn3eui7WR5H8xDY12LCbCyExV+6x4f3tQwUDGr3htlOfAG6318xkrzmsjbqwYtEVSW8vR9KLehZ7oJ3oka5jWLVn9pWqcrmD2VvGOaJ8en+KiOdUbkPXJQfW5xZb7W2ReDtOJTa0NbNzwtRJPAZ9RtqSax0qGlLk92gv1DX5OUQ++3Y6u0UK3PPyDRc8eIlmkScEZp0wS2w6wcK3+KqnJ34yeNabvF5/RyDR0j78Hw85HmzGVOS0WIg9JAelgO49wNktI7hA0W9kwJuj9CEl2GaBL5qkJXJmgssS6agNVv7ooGiAgxal+3qwTXfTilrCmlVlo8Y0LM2D/ANhfuiSJrNXVsBx0WtPbkVkvNaHlkwgA1cOQtIyyEUg0OHHlzd91QW3rl3W0/s3dwnfYK0gCOWzwPtICHVnNX7eBgRnRcGQSrjiuc1wnwqWUl16vRZ9VhXSeMIS0kfJC728kPk/r2DEdTPI90GKAJmtuRg0pjHaE5S/lmy7HQCY3gBqkbbkpDit7KMPp9LkQQSZ/P5IqDwRCePRz7d360OgaFTjseN5/DO8ma4lCxl51WcpO8TnyduFlmfhfzVmt6ech8Lem8n+gQKKKhgw2EX+p/Desi9GARVgK9kTlOLTkQIarXMbJZtaED06b5bdI4aJ+ETX+AiQ5JdtucQ1XaDzvDFq1sLaJc3txKQ3tQLeyUqyKWVQ3F/q0dFj8YD8k6yddVFa5+Vs+DSG6uC/nN9cenuENqljJ/4cot/n7f+piYeYUpo+FZOlFGxRvV1Wy4VEPGKLJpX7AB3uCtLF2bmWaIBiNF6hB923G/T2mudtIE1fz66TUw3AbrQralwEFhO3ZLLZJGzWzwzwLjDs+z8oZk84gOwoHUAHAgLw8Xh2aFMr66js5SoxktJYBeTrRjX5znBkdmI9M+/1hrcYjYtdZrgbrVTR6c06o3muaCkNZcjrfPsXlipajNLwaufL5EVSKEAHgzo7EMxYJW0/oiJxuNtko0WmU/O44NdUWzIusNkdZfjdfSVo2x8ODHH6LzTHuz2pwOT/OcBEjJ1RUjR8b875NIEBBum3Btt6zEodb1hMdoMhrGGqXU42B0m73kyLuRoa58RxnGiKxmIHwtgNSuvkAquvR0KNJwv34Ye4Y9+pvW35E0tsFF1guujTLU35fpU8DwlAfPnG7H03zW8X0dJnmvJzyY45x8lhD6g2JATER5mx/rEt3mNzq3OkaUwJvIfGu+fq5XfBOHjafvQD6Iowhhb9nQaxT6JDfSb8VkxrmVVnqu5rXI5Rq7RHyMJRiNJnOHt8kmvbggzYjgnTn4dyexcSzO3vQyDoJ9lWIjuIsRKR8fbAAXmzvslvMubbovTamc7K2bRUf2H0yRjLtJqeTuyAje8YQcJJA1dcdtzuVCe0/ErhYNIwu0YOzEteb+SlMKOUQsE9uuZuvuQXWbXpXlCbuvJARXPyAmzFGhI+uOGMBH7DPO0oDUw1M78AN3hJ6EB+qo0YRhI58bBXCIULImyghWVsaysISQB56hqB2HIpXzOzO9ElFsdxuBOX0iPhSxNP9eVhySSIp2EzXkabR7ffQxkeiTD4L0FYCGGiNzMDdIjXhhdzXPzeQ6sHUwDygdUswx+umKiq49o5Qry4EJPchvX32mJ1EZPvLrJ6pcaVumC3pQqXzj2evX4opU7vNu2a+OV+erxvIj2Ubl6A3nRskxkWw9fNAejVwMIE5RHESo5xr1xNKs7ccN8Nw31Mf/9tRAKNDLHD7cL65mmepaohknPeLYncb+ZGAVs3Qmes5yBGv4xbJR7RuWjKIWwQ6lfCtFtHAe0WCoo1DC+SB6JsdnpEmPgB2gSQ6JUi8VFoIBhV3khChf02Yxj9Jveg/TKqTwg3eHPO5sVkWDYvGCSaBuqI7naA9oNB872NgouIQbkErHb88J2dNjS6JpDrTfV7rh8Wrxkr8cB3Zh12KnMmKqHo1pOenhtF46azE9La87ucRv3JR2yyQ7mINlfdnGjnUJet/F1uje+qO6Sw6vYSp6DRsiGgJ5BcxXVo3R5LV+YV1uuzhviXD+ab1ZGNDx2Px4nramacbtqHKocyv30ezB28GrkjXe0+xAkBwaTMzLdYmFO9O/g2GIeHASVNrTz4UxrI8TxKjjVJqrt1XrdI7DM+3De+CQ1fW5/V3TXHdfxorEwMPTbxrsRaYpnlKHMxxZHs+JcfMb7XGpPBWmLfuCQ/fSzev2PRauCz6All/B4ECEvtFo9BrGEdZpnIOI+Lggn5BbqOwSbji/1hqBa34n9fJ9AD3U8ibuamGGd3W1LuRlNohznLkuiPeD1j3CDDp5TVNGA+FhdXoaYEyMT0qTx2Rnwps8ItB9fHJ3ya5FegClfP0rRll9d7CZ333j/hg3G2MtavM1fBUNBrN1TeFWF0oc7iwCoQvKmeSphBReHtyw0yiw90n6xpgCYykmoNKGhmh0IVZY8KBkO0W1pqYIi9MiTVG94J2jh+cvOS0RseQK5gUD8EAqP2Car9IjVhtV3swPVNzTB3vwYCkiWBU7r73N42BAn6N1G9fl9NX/D5A+J3k9R6NUW/NybqTrVszw5zfOD8No1otYvX2SgYNX10Dc5YoPuJLUj66dTtcOl/PEbYZPhri3+O+/E9+N9jbeaQrOQ5gJ17x0CJ2mDoYYoNBlTNWNHuzxa/DufjrwvrG0og+YYbFCb0TBD/3o7itzN7dzXGodz7fJ36xsDOkyOSA44N8rHPv/+TMaDFpJn434N85M/mcq+CKoighywdjklVzS98Hg6QGBGV+kSaa1K0lyR5TkDcDN/YJTpR/zfbzSkk5evF7RudFYKJqmIhEiREir07FEBNaz4EKz780BN3qK9rOb+4Yo18z758nckgS6O+PgLHZk+vXer7Ibu8Bqtrbs1f33mx52HeyZJx3oiG80XzdbA5S/+EJ7LxEfs2dPz4YgasehwRRaLKLTkYgQJXkPRbAh1jqXmSrdzvgmfE+2TZ/fm4jty+dj+/fG80iR26n/651j+bOdEeV3eZL74QUisIbRr3SJF5TonWxjfiIGed3xacuXYI/XC9XthYAYkDUY3t1EgTNORkgE8Q4UDSgUQcOHEAugPJ6F9vUZQJ4nLdQr/+9V+Gga4vsQxCDNX7595yNXpM/fWxAnp9w+C6jNIn25U5osqQGrGHXpBO4Njbcu6y5fcvJodrHwnpWaFXWDVGFqXf3ZWuNz7F9evtryjG5haToHP7XvxbWza2iFgNlXpuKcHyK6tHL5JkixS+1juunuwlqD37/W0F3QTcdILUW0GNg3Fc2kp6NKi5lATmemoAkIT5rZxXz3fdmp+QNmG6RFxx3G6yeXiopZkVzfldYrTfTZzxY9go2+gYXmYIhS3ckt6EEPezY23ZHhjG0wPuHt1zsz7YsdGePuZYleMMIsKa0mbTFrulMGy3smJeRCspf8PuzQ4HIRqdaIXLhE867YgYBdntXkc36bU/P4w/kpZT8U9F0M0B0hoFnoNa0ucWwxFi50s7T15wN0wqTZfB7rLV8ymhbqbcOF/jadavUfN2shZ0GQ1pb4N42kdGn0cVTD91/WMycn5eqIRT/1+dFkb0vT1gOJuVvrCIf22UuKpp936SFW0qlsqFumJPWOTCzwU74XsKA+WBxnqDNVkAfAqI3jWqshyn9HMa99SvZBmGw/KcB1ejQyoPFY5su/OEPD70TyWoQ/ifVR3l8qTSAuvTUX4F4SeY0aNFzQAiVQFg3ZD7G/30EKN/pcEsABSjBXY9di74rlXpJc4dV48jaIBrAy4wzLwIDVZu+3Wgfsu0NpOcYww3vXHZQcrRC3NtQsLPGmEMX1A8sH30YZugBYujxCLw7e+5NDTddQ8ebGB+Yg5aX0KpqwIupSLr3yD5JnFxTvfanp6OG0+1+dmF36IgGsw9BBcP53nfHP7Nn3QZXpsxM+KpxDNn1+AqWB4kdjbiaYvvPqP7WQ4K/DjDUZ713/DbF7BGKSKJ08X+L1TRRyx+VW72oOvA13AQurXu049t3N9FKYE4W3c6E96a01yYdvi77+DBRXw9mRC/7LPGJlkA+7R7221cGQfcWoy6UKcrfxAvAfByD6cNacteqHCae+pClmLGtGBgmCSP7jBHR1td0X94u361bD+Yl2gYs99tkoA1uc864PfBTicapqevhqXBfe2bPli+P1HjMZFau4BGuVMGl26IaKDlJ4z69XR9GxxXHs50WbLbi8A18RTeErh51WZZT1hTTFgpx8Wj7SPiqT6sk2OKH85r4C64UsDKzqnBGXfUUoaF896nUJnkSv+mHvRIiKMBhUQOnzzGvH0q9+asmY9apqZqwWc8aGDOMEMlgeQqBSh0UaQD22I7sefTarkFgLNnOpA0eH+qwd6g/odX+VyWw0B1a1m/yLPc5VQZ9z1ZJO8LXb4Yorbd1/WLme7UEB7Br12FcFg/ZVo26XIsA9JtiBKdazloxFP0QQwOJpQUoEjgw93VsQ3pt0rCKNoh6nJyXVGcOwwfMadcXQ+URvH/535+00eY4Eg5/ZL+wfUy1pGJUknZOjnbjEmHEYhuwY0p+xm4xZM1K02w1DWcc8bsinMtmiZWNyuCBZ/tnhHYjz/gZOqLusgwBzQVdtPFQXeYDvHlRxcwtsR2I1jR9SKidvOb2pk7D0/kiKuOXx3pmDw5FAHRbmXVlZ+alSxe+4HSudixfa/PJYY6Eemo0ktJr68h52YcGKvsH9D7x9FV7L9S7wdKwKBuXmBW7fbMtZ0BIRzFlPcb1mY8ntpsX2YgAus0cM0qxRLPWt11KxvfcjqrgC9arE3m8J7feJRcQVJAes84r6u/mgbUnqdz/g0C2uJoV7kk9/KWCVLowW5ORS7lvZ2j/6qCOkew+f52I2ryqjx4+q25//1yT9tDo/my+SlZlz9lr8OddjuCHGldrDBnEGEwnJXBXmdJ7Xq+JKtBPmPRepewmW94ROGVEY9K48+r8iEhAznTxgVGdE9OK0EXnSCFdxvF8a4KTC1Ny8Zq277BNLiFcCHMD5HehYtchD+hZ78FWBoBAN+khLymyyAIGWcla7LW81lgicCQdtdia8MPAHdkHyHqG3pIuhuevM/bixgPysZe4Rwr4s4LcvH3W5BE8gV/6w1+RwejMzCR+Jv8/G9EW8Qz+QweIxZKCjA+nX4c6tn9YafUNfl8U+c1WMdwvXA8da6Z3RRuDsXagAVvT0Zx9Q6pk/qsCKSAz81zXtftFfEDNTw/nMbh6QWRZTY4Kn5/OFXffSAj/76bBAdiYoRFp7c2MrwXBTZt5pD1sm2GIVcEfwtp20adf2iZUXI3wDWlCAVZI5VLf66mMwGYAxzCvliGo+7viL19Yj4IKz07ZosMPW/Pqf0/rIzp+mP/O7JxxH0LzTZ8zGtGsO3EIT5x6VTrXW+L9lge9UMLP5ZbfCvOYlGnOieBpEnRSBxN+/eBNf0jbtwEE6BaozVxV4qWOLQ7+6ikfdG+BKwuxCyI+r2b+g2NMtkX7R7cfVDKWi/gCEkD1c1Ky8sLXhvgeOPvh4qJZ6E8Gr7NTbEFPc2vDsW2W8mljtFp6cCZWosryRHK3Q9DvR88m29NkVnXuriQIOiSsaDp+v21M4flUcLzYevBAC9r+MVqNvoDRCgVFjcygNXK7CxYFjb/lo07VvZQtl0mzn/Otv+dJ11dtrwHk1UA6tdCwes3k0nU2LSxsx7NMSPZetsmaMukJHoPXdCR9H6ozoxGmr2WYyJZLOZFAdgw2k9BCz3X693OLyGTsy3q+eeJJse92yaIg671/f8egn4PAMxQK2Xw0LvfdJ9B7c+QdSTPSvlCrZ4Lh/2hqm7tbaXDbzAlhudSEo7AeuWmqpzy1XKV1y1VBrpKRLqVS5lZqeN9q9BsTmNUoQMWRNIIGGI0XkysEScgVZo7HhYrA0aAlSowo8FVfuy+XFmorhOEEon8u5xsF5YIw5cionoMIFh21XR0sHiuumDtJfw+nn5hSVFWL+V9RU3FYyIFJvSGw2pNUyigX8KucDmjaOO3Bvn06XsQhbfOaUdPbnuSDWmjIkk52TYV1aNI3hlkhWrKEZPiwDGryPcPb7/Ixlz7apHkTh/YWvfmssF6S4khbvD3qJkQUWXBXnfiCUUkiJjQJl8LXtE8qdI6jFbdF2J7mu27yXl43z97C9g1SN2WwEo+DDkObPelpEHXkd0m3DNIkujVNKNF9TIezf1qxppdCImhf8Nwnarv4P/VOMM/3wQcw64DIJu3BnjxDwIDUjN3naMmojezm6PDDcFx+Ol8O5Quw18GQm4C8a5h/RSz6PcFW6gBTF2TGVxVQqOnGZIaKGYyadOBUwWhwpFM4Y1MpYAgHXq/BteO+aKbcGIUWgMKKyNSR6Nh9uugYs7CCqHCz0wqgp3YfYbHnElEZhgWfJP543fd+OS41IMqszGjM6JGmUvvg9tHyEgvCIZTK3WEHARCLmcidiR8TB3iQBqz1BqRqWJ/DARE8S1J/U4IxL0EWBgb6I+QLx5xePxrdV5SfrZ+F2GEjsUZXVNHgaDMdNWksQNZ/HAKcNGmU0nvEEBI+zOmE1ixxXPm4m1bBJHT+kVHkwo8pXEAkasZwTWC2AFfRVYw0/UY4tLq1YqLSjZyuaR6j5wJb4Am+yT3GWVXuc3YgNU83gbblc8JKsfUjQ0L5j3pUFcXIGcoAV0C7w+b5qRiJWxBErkn8ZuXeyWAoWfemlAxdpvLdw/rhqXbvasEXY8sC1hfyKcpB8b7lbyP1XAe4WscLzxUNbd3X21NY3PEFzwXuLtt5Rf5iKPSWQIjsIvr/VrYbw/OC7CL8vM/BTHHZ55YaJMpDOt7RtatpZOdw2n15Dh+tLjS8AfuXjPRzeub9QBzVvdrYJhQEUH2mkv0y498BGwnfvijtoFbU3Sdq2X/d0S3tLyzSL91Nz82OgBPgsau+ygT+tOAg51HCfXdGfynGqERTva8A2qPL7Pa2N3Ls/nZdAK99y6Ck2565DLW3UxLJRY+2t9/xuvrPZ0tpSWb6t0rfV0rSP09HWuq61dby1TQuiErxMpJfcprdDFTUPVbNFNztYaj1l+dW8n5pbXuQ0q1uaD4MnoFCi390nuhjf9yDYvxyyI3SaF10Xx0rlJiw63a3kU6p1K2dwkvyxWxyr1c8TOkFOXWKKqj3bivIEX2HGbbpAYuXDjqpD1sE+n1ZtncRJrmmgcniVDOuwvPWSCuywnn9aY7Uv01DN6xDTt1qlQ9e7hUtbhMKWpcJEBSFb9eUYXAJH5nq0kvshDm1FrWW38o7B29Blz859WyPPA1+bjwap+Pxkhtd1IKIw9fzlyk7V2k5MnmuVXsmttUNzrH3xttYH6JqjOKK2Q+emv175PqQ38T+9m6S7yfU8q8D+BxhTReHCvjTnWkAM91JY2Qkb5AGPQqWJqA76nlw+w/e9OYBipi4d2ktIeOROv1BFcW+agChA3eslEXUGbcIGARTc4nhT11BZ66XXzTFLFNyZIT5MLW+ryBmodW2VrEXDRMZqRD/2qyML72XgQpGELfNoz70gvo7BkBzxWp6ehAVacnpetXkN6xJGdgiJyhpJh7aCMIgDMcpRT8qiaLvL7GaNU+Zn4uilrga3YoM+iKsHHqj9Gu4ngrpFHoWrvlFQPsPcpxljqOLsvdmmjbremsHra9+uSsGD+oVupbsOb7FxZYU6sqxRbdx0nWOxkkkius4vnw/K0WCJR5uI75XXT314Bs+9DTnBxbyRmNG5ww5BgWPUJhnZsl2WW3N5+3UrdiU0LiqxIC9fJhufNl+WTJqu0LcSkkxX4zFAe5RWRLVcPj5TM1NFRtP5bbfkc/YbNNUIiLnpTBLTsrspgCMZx2nFakMvJucoijwaUMaKeL7QQuej6KO23JFlQItUujYzO/SYuE07fbvIRNG8Mncpo5d3l5lK0jIjmdu49Y9bX6o26YlZc7PfHf90vMdmHlwZQTyHDNX1Gl5k1j7cP4/5MNEp40QJzTM3GLiv0JrfBR4uAff0qBBMW0KU4Vmq2OMqcLMdTDevaPiCmbY4wYyVL1gZNnVRsj4HLpaAueanq4LcCplXpRKikymU6Yac4eu+EIo+1/N5+s9Fwi90QP2NrgCKGpTDLDKWLaRW6kbPamN3EZmKRIQQydUebES0+XGqdqhbgMSm4uH9hb7wAaqOIV2C4KPUvmIEL1APfA34K5lmixV36G80KLsbUo1CnurCyBRF7kcFS+9EsYX/zQff8B/bfdPkyzspMI4qjpnsXrrAo7/1qdfnS0TM3AaS2UTvR8eLVuLejuwLlHdbwnUWXZFVmoxhnaLLjjCbNfiZ2QJJLgiK28qOukylyxZyeuJP3C/pIbQ6TF2uhXgacKZWFbvgz3Gvwh5gaGdtICHZdAPwPaCzIujae1fMdOF92d4QwWHvOX2LKDJlj2i6NjfohqsghFuuG9hKraXN0ohV0EOkGaLLLzOMvuhXE8vU5dbocsZoDMlMITNy+TWi0JKIL5DU+0/pd0f0Q4m6CXWp8MHQI+V9nhncwSDKMcoQ/chzV79bKc+/vvg5/SFwO7907PD5u/dUyvev9D2jX0ZZdAeSRi/vf6q83WOzJxiYWhjKH9p6DmKUdtw35f4SxqtbH7ojScWHFrnW+D7lYm1Nk+HmayrwdPRCvfYm8MsljxofEc2MuDX32w/MM+iluvzrDZwTceltup9uht0Gl48d+QnHW05UsjzXa/nn2bNs83T9EHZou8nt48sFOPs17893CbXb2sNLWTGNjpU4AMOTrLhWy45PXquVRqxOVQTWSGNWhyr8yB548oJWYAPZXcDhzcKO93+8B+O5R8xKqN5cmoykFCo1rhYFYK2ohGezRtQVjG6p8jnAOlUpj+PqbcS/nlICNWQ4C7BEcP1Ob9/Ync6ta4I3LnJIVkb7NmHdWKj2wr9ZzKTi75sXK1NDe5xdY4opz8rE/QenH/csWXYqFdmbcQjX2AfitpBEGpG7fPIuvfCrKxVav9YQYmWkjg43qALTfJdtzKoUxnxE/3fROm/RjKi7uzAnOaggSFnXnpbrIHC2LNeWovFl2pZqrgn/5KLksjEiIMNi/IhEo/RFZZg/axYDKS/YJUzrU7tgh9uDm7jtpCFIWb892x2I2yqyMSrebr9Iq2PWsJ2MXrwrNSIh3QA5A2/ZUIK01fbwvmYEF8qGqpBiLGXqXS8euwZiLI7V9qaPLhj20UJP92qVF6V4vUQdYs38l9BVgSncYOG7ZVktitrffvtB2b7QJ+KGmnNevJUjWevhiBCvUiGNPdyGeAXLt0J4fpCc2GkF99XTUkG4V/tqpKXH9empBxVnv2uDXXpfE8msmmNWlOMY2F+wyVDMGSdCYePmYm6TodOyCznT5nDINFHQIiX4YnU6oV3q9UgwncylOGaSZo+XSaQmVjuzBk3GaKQXRxZxug1Jvs/0w2D4f1vxyUQeGBZ5vTID+4dc8sd4T+3QvlfAXB+aI7+Uzc7zFA+LOZxf5KC8Qm1vf8xIAdBoUzl1NKP+RHdF4fip5lcamnY3d1S1v1b/tWPIYi8RhL2k5Q5naUGg8Toa12iTmFmbUA0UTWh0CTOmS+pigHclpDhx8GaovSWjLXQr0VIEoh/z1KUTtn3XeOg79DC+5CSU6RrdPemTX/1sidv6D5gVaVZsJTPnUzslV6vFUvXVEunVHIlEc7VXZpNLbbKvMbBsb6/ks3+LoeXTV9IQsgMN9l0b2gJZnPNpOM7uvZ4uWbYd59RTOTw3JGXpnvqqhbX+G0DKVCtgEl1ULRPf3ergkN9PF64EEHWZRt3E2621fPSHaj+xSL2HhlzwdT2zqvh/wZdsCEjNo4ouILd7Ice1bRHwfpVWBZhjfZiZTAtFNVMLg6gWMhhqmWhK0R3EpoKtxyuWzS1q5mrpOwq8eVy3C/FReRMIHKeZKEI+eYiuoml2CPoMFjX6q8Blv0cE3VuoQk8K5yeMpdNHIIks3xhLCSXlfE8qv3x+jw9QYphS4zLHNf3ztrEmMJ04G012UsPX5+tqukXbV2hKbUkRTI6c+DxDflMhxosCIc/zgJhHFUtdjylvWCkpuL42dWDfpOluaqlZ1hNBtNsLfBGRqUJmISv9Z4FEekvgjWtsbGr8Qe52I7i9JfgRXgOQvV7bJNat+OttY/QwykuNwH4jC1b5ZUvZp7+uq2Fkurs4mgOhdrW/d9jgTQ67pgKDr8hm/k7o9o7s506y2CeeY3PuO8FmnbzvbtYPLa3/W/rZFJZ7GgIM367XwPYjgMpr/EMg4XoDm5Gul1gHs7/CISab3zugk04MaA0IVEUvrm3upWDR8DcKhltQMFyNgiETI/gne62kTd6c2dbk5WHDrx7ZJIsqcKYvSuJRlIaioBtFwTsoCv6UogTAdcgJLcgJzyInPIKc8KGUoi90wfSaRuwAoo+oqbqR2ucRpg4/cj3BTJj9KeZx4GfjmmAX5TmWYClTMNymzwQlxWmDR9V+/iOcJPZfmB6Hl+AGjY0o4tRt1vcHu4bFan2yz+AbRjNb8o1STjdGGqNOxX4SITVpyCPXI8yhiT3BAiYe3zIV+Khk5iRCPmjT+3Slep+uBvng5DGLQfEXA8EA9nbrnXoAsXwxe7+uItAIfo368Ug3QmBq+wjobfQx+gR9ij5Dn6MvwJfgPekrUvwaqSK+Vd7D7+D3zA8e2vh2IzD9tenxVD6JC4512xt8lj5HfT9Pfxp+os4HtAVdwYzKnKq+Qszxexo3rGwLcrd2VdQQN1mXx1PcwC1u4sPbzBNELv2LaLDdUtP2obQxK8azHoO4W3iD3T49fWeU2efR3f7/yLFYZmDQXvc9K9lagUUAMeLefxasAjCHfVgAZB6IdYs50Xu13bqLF9b24I9ZD2sDbi14/z8gy1ixltjgvOUB5LoAgBXYzalJgsaMrR1tXYdRRlGH9RQdsE+6xmRg8yIeo8oxRuMQBSoPuMOMYMLds4xGCJ+H2SMi5abus/wCVY5tNA0Xm0y9xGM0JtAOq1pgK0BdKAf7DKGv0Mfoy9F/ZGlalNvlwnlCchgtRL9lW6Ar4KN+oSdgIxXpIJyF27gO2O/NAlh1VXeNOyPd9/3SIKA/VCk39Y4EPYiuHeMBHJpWkm3QeJELPEYL0W9ggZKa9zGHzv8bI7DHe/4Ybhfe2E9ioO9JM323bubsSkQviMw+n3QNJUe8tOtrzy5v2Ea67A2xVZTs4u8y1jjnu53NC3kEbiE/ZjsiulOj20Q68U6YEimtxkuuC3vL8YZLo2sFEadQxuvG9lE0et6+lk+7MQHoN0PYlsaXb+vaN3tr1y42dVmkfSbV5xi3BbV1u11M9wD0lOzLXnYCR90t4wt+riuoKA19yuwD2pLAJwQ7Z3y+cIni8kg618nUSAT2O6VK/3WBIa1hT2ew7EoFSraMIj+TWE0+94raHAJwET9+Z7plXEjq3xDH3QDg5IGO+5L8L2+J/+iwzxPMxgEiBgAI/iyZoHAmMP0/eE5k9y6iNe1k6w7Wz4ucrqTpxyZ3BeUJv2Ryp3XFTPYdyL7JIwR4RkjzN7azXi2CIME0pTXodZc7ISjd+rL4FHxGEy3ARHUAx1V/LZvijl8wWV2m1fSCf+swc0W06Oqa5m6SKzytRnhQVagM6MchRgkJMXYE8YhB9umKooTpGRqNkK4fx4OW+u+4CrcGYrgTZ5vmG9TUjtfniqYZUWT6Ug0eE3hkiUG5nBpgjF14DXbo+DQRbfpV13zMplIJCuc+VLJxGgazxFwWI3ZLnj65X500xB03oZ0ML4aSP6GvQXKbuPMrUqvmaQh3UGZrRUZNiYo9tXTRU7xGldSypY45bArLULMztAb65imdIOaRDYpIUF5BsIo7KQ6/UzSwtI2SedS1k7QoIXPSc0GTF4uzWhxLxvwNxF7h9r12LLYXId9FD5srO/S32bKeWzZPJqX/AM3Qh1pufSt76jiQvYEl1mM0eM7TMkwAA3t9SDm76ZaXKLZ565vpO0ixvfQyCI2j5BOhV/k2PiV3sRt4KqFl/mDuDnUz6m7Vv78RPb3I1jPMXVCqVYif+ETFHnW3rchMb51e1uuVpzL0lgGTIAUMaRUFcKADsIEE0QIZmKfyDUlFZYco2a6/43QDCaXskcMGOK2s5KFzqPyi7sjfJ9S8NVojj8oX1MjuyfEEQICPcWimAWgjLBwkJq0OJjidHZz2iY3OZzsEkdnrENlynSNYYl5yhDKXYg8j1bqTCAhsnC7y5KtQKJtXlmIyhUu8NLLBBZiyuQOUyDbJdEUmyDWZrL9CeaaZYhIH7US0uJXmebTIijZBcrF80286Jyev7Ey1xEQOqsmTw7nKtdAUZezyTeDlky3XBGUZ43LKph7QHK7xqeAQevtocWRlEtJlA01RZMpRKTVFXerpxVxFxb68nF7jsq7GbdU20BueIVJOwsfFq4TPBIUSOLi4JMrQVz99dZMhaPC4WTsYygEnZqs4mrwYKdxeuPlYKTLJqDS/V4o4hCo+DvNQb/QI+vHorefgMTPMm4Y5u075P6JIXhH/e1/ynwEA) format(\"woff2\");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}body,html{font-family:var(--monster-font-family);font-size:1rem;font-weight:400;line-height:1.4}html{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-paragraph,p{font-size:1rem;font-weight:400;line-height:1.6;text-align:justify}.monster-h1,h1{font-size:3rem;font-weight:400;line-height:1.15;margin:4rem 0 1.5rem}.monster-h2,h2{font-size:2.5rem;font-weight:400;line-height:1.2;margin:4rem 0 1.5rem}.monster-h3,h3{font-size:2rem;font-weight:400;line-height:1.25;margin:4rem 0 1.25rem}.monster-h4,h4{font-size:1.5rem;font-weight:400;line-height:1.3;margin:4rem 0 1.25rem}.monster-h5,h5{font-size:1.4rem;font-weight:bolder;line-height:1.3;margin:4rem 0 1.25rem}.monster-h6,h6{font-size:1.3rem;font-weight:700;line-height:1.3;margin:4rem 0 1.25rem}p+h1{margin-top:3.75rem}p+h2{margin-top:3rem}p+h3{margin-top:2.25rem}p+h4{margin-top:1.5rem}p+h5{margin-top:.75rem}div+h1,div+h2,div+h3,div+h4,div+h5,div+h6,p+h6{margin-top:0}.deco{background:linear-gradient(to right,var(--monster-color-gradient-1) 0,var(--monster-color-gradient-2) 50%,var(--monster-color-gradient-3) 100%);-webkit-background-clip:text;background-clip:text;background-size:cover;color:var(--monster-color-secondary-1);text-fill-color:transparent;-webkit-text-fill-color:transparent}::-moz-selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}::selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}kbd{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;border-radius:10rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;padding:.25em .6em;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}details{margin-bottom:1rem}summary{cursor:pointer;font-feature-settings:\"tnum\";font-weight:700;letter-spacing:.1em;padding:.6rem 1rem}details[open]{padding:.6rem 1rem .75rem}details[open] summary{margin-bottom:.5rem;padding:0}.monster-no-user-select{-webkit-user-select:none;-moz-user-select:none;user-select:none}@keyframes details-show{0%{opacity:0;transform:translateY(-.5em)}}details[open]>:not(summary){animation:details-show .15s ease-in-out}details[open]>:last-child{margin-bottom:0}.monospace{font-family:var(--monster-font-family-monospace)}div[data-monster-role=popper]{align-content:center;background:var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);box-sizing:border-box;color:var(--monster-color-primary-1);display:none;justify-content:space-between;left:0;padding:1.1em;position:absolute;top:0;width:-moz-max-content;width:max-content;z-index:var(--monster-z-index-modal)}div[data-monster-role=popper] div[data-monster-role=arrow]{background:var(--monster-bg-color-primary-1);height:calc(max(var(--monster-popper-witharrrow-distance), -1 * var(--monster-popper-witharrrow-distance))*2);pointer-events:none;position:absolute;width:calc(max(var(--monster-popper-witharrrow-distance), -1 * var(--monster-popper-witharrrow-distance))*2);z-index:-1}div[data-monster-role=control]{height:100%;position:relative}div[data-monster-role=control] [data-monster-role=button-bar]{display:flex;flex-direction:row}:is(div[data-monster-role=control] [data-monster-role=button-bar]) :not(slot[name=button]){display:flex}:is(div[data-monster-role=control] [data-monster-role=button-bar]) [data-monster-role=popper-nav]{align-items:stretch;display:flex}:is(div[data-monster-role=control] [data-monster-role=button-bar]) [data-monster-role=switch]{display:flex}.hidden:is(:is(div[data-monster-role=control] [data-monster-role=button-bar]) [data-monster-role=switch]){display:none}:is(div[data-monster-role=control] [data-monster-role=button-bar]) ::slotted(:not(:last-child)){margin-right:calc(var(--monster-border-width)*-1)}div[data-monster-role=control] slot[name=popper]{align-content:center;align-items:center;display:flex;flex-direction:column;flex-wrap:nowrap;gap:.4rem;justify-content:space-between}:is(div[data-monster-role=control] slot[name=popper])::slotted(*){width:-webkit-fill-available;width:-moz-available;width:fill-available} 
-}`, 0);
+}`,
+		0,
+	);
 } catch (e) {
-  addAttributeToken(document.getRootNode().querySelector('html'), ATTRIBUTE_ERRORMESSAGE, e + "");
+	addAttributeToken(
+		document.getRootNode().querySelector("html"),
+		ATTRIBUTE_ERRORMESSAGE,
+		e + "",
+	);
 }
diff --git a/source/components/form/stylesheet/button.mjs b/source/components/form/stylesheet/button.mjs
index e0ed71561a4b19425c34cca581b302c9d1d4f1ee..957b8441661af2e093ef59d7bebbb91086484ad2 100644
--- a/source/components/form/stylesheet/button.mjs
+++ b/source/components/form/stylesheet/button.mjs
@@ -10,10 +10,10 @@
  * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
 
-import {addAttributeToken} from "../../../dom/attributes.mjs";
-import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
+import { addAttributeToken } from "../../../dom/attributes.mjs";
+import { ATTRIBUTE_ERRORMESSAGE } from "../../../dom/constants.mjs";
 
-export {ButtonStyleSheet}
+export { ButtonStyleSheet };
 
 /**
  * @private
@@ -22,10 +22,17 @@ export {ButtonStyleSheet}
 const ButtonStyleSheet = new CSSStyleSheet();
 
 try {
-  ButtonStyleSheet.insertRule(`
+	ButtonStyleSheet.insertRule(
+		`
 @layer button { 
 [data-monster-role=control]{box-sizing:border-box;outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:host{box-sizing:border-box;display:block}.monster-button-primary,button{align-items:center;background-color:var(--monster-bg-color-primary-1);background-position:50%;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-primary{background-color:var(--monster-bg-color-primary-4);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-button-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-secondary-4)}.monster-button-secondary,.monster-button-tertiary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-tertiary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-tertiary-4);border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-tertiary-4)}.monster-button-outline-primary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-primary-4);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-4)}.monster-button-outline-primary,.monster-button-outline-secondary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-outline-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-secondary-4)}.monster-button-outline-tertiary{align-items:center;background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-tertiary-4);background-position:50%;border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);color:var(--monster-bg-color-tertiary-4);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}button:active,button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}button:active{z-index:var(--monster-z-index-outline)}.monster-button-bar,.monster-button-group{align-content:center;align-items:stretch;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.monster-button-group{box-sizing:border-box;gap:0;margin:1rem 0}.monster-button-group>:not(:last-child){margin-right:calc(var(--monster-border-width)*-1)}.monster-button-group :hover{box-shadow:none}button:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px;z-index:var(--monster-z-index-outline)}@media (prefers-color-scheme:light){button:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px;z-index:var(--monster-z-index-outline)}}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-0{border-radius:0;border-style:none;border-width:0}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}@font-face{font-display:swap;font-family:Raleway;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAFJ4ABIAAAAAt3AAAFIQAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGoE8G+46HIU8BmA/U1RBVEQAhQgIgQoJnxQRCAqBugyBmnALhCIAATYCJAOIQAQgBYUUByAMgxwbfaQXaJefmNz0Zol3v60cPeZMpG4HJSjk5qIINg6CGMglZf//n3F0jOGGDRA1rXeIncJIUkNHGn69qMRDU8Zajjs9UbsmtnqnE3v3vqiQmfRQpLkKW6QZwal6s5IUiJNUSUG/OwoDY6B675OjSjkDSSMu2pedpu9vJILUlJd707D+eLHpjYDI4e1uDnLjHHvxpDXGMyduLLn1qt0FCQOyFsJZE1+kJq3T+Ie7BJFINOANbi9vTUzhI7W4GmUL0lWjT/FQQi/m++xuPP02omRHe5pn4DgfNZfn+R9z979tmEeNaq1RxRqHTjTPNA2JFEgrHdo/nt/W/5zbgGCxia6EkViA2FhYGItRmE1ZvVUvqtStb7Mvrd3W7+t2+0XdoTnzzjYbp7mSHLACkhMWgCTL6s0Wv0AUohJfEqE3opPd58ikJnKlo+3uaeSHYJ6fcIcXjd+rKUEsaElTqlUlVRm/N+e/8iP0L5AKozNlJ3/9iBwshM6v5JIUJykgT3fdrOmq6Lcs+Z+q/XsAXFxEEiQIUaKosFn7ctT+7BBS5dqDolJXunbl7rttzD/v384LftJagFFALYPE5A7gnMrZBht4lXqsbZKmbdq0TtOmpmgNiugM2PYBc73Mrjq7GLsoXHcTpt9uPvFDz8eN3g+sxrPQAw6DTFNp/OZI9iinNitZhRmpQOCkdoBdANjVWlavMitwDNJX/pYIAkVwnOP/vW5xzoMw7SAFAKU+Zz/knP/Z9j+OdfrL8Ke2vdKbmphuxJSuL8EUAggHIiBHP+444EDzv1PTQ3YkOcOSlTHmj6Usdfo2L+/jpYe7IHWcQUgcgkpLFR1YTW8CGKQX9b8GFAAAH9to4RHQ6GLvFRri4DiwTzAADDMKDPr/fZ3V/qdgPmkGzKTEmWEXb7Q3ttgTYqo2nP6/+97Xf+F/9JHAVsIIcACBZwRykGT7gCR8VohJcUOOSDjiSbAphMozm2JRptBtUW69XbNFG3IVy2KLok48/Lfsm527IaqBLMuBbOFIweFUd01veL+Y8xWhtzcqTm2CITc5eLJwSI4fYlLYFIVHAs//T53N4/Yx1hKGU+HSqErdpPPns6fqqWJsNbZaClQtjlOLUMshcdoA5TQss4JLc90SxCOMMUK4KP9NshpzpX4vwxKChCASRERE/LKsWRlJwNKAcTnXAhEy3r1KHcZa/YdX58420/iaXmtGhoCAiIiAR23v/P9+KTACAN5hdkC3xUC4ELsggvkR2krEjYSEv0BKSmHChIvYOCAJkKQgyYMM2QoUMzCo16BJ85qAWCCdHek3AB0ODL1Lq0PgTe3hSw2fhi4XhPueuQWEH6xtIEQAbG2Nm5oV54QFP+yKgO2D4T5t/wz2XW92/rpqpLTSIP8qV9vLvOds0NLWyX51K6ofbvPZE1paf7w318C9Zthq7f32bfuL64VZHw514Ysm5lgfNbfG7W9lsUA4EGz723vxwGzp4fRR+mP8Ls5B7KB2eDJXc6xwlG6902ug7AzLA8NY21B2dB/P5qfOV8t1onyL5jZDDfQI5Rg8D98FvHsvclHuJsrdvsJrpc/Tr/gu/EfZJzXUzpWaDj7M7+UP8/8EkAAVaAS/CR+Xs/JN4YaIcO1xHZcUaMMbklrpKy7NfQJKQcURagoGmCW+HA6ENvbg33sl2pIYRmE9bIHb0mA6kk6lN5GdyMN5EbmQhxHKlwMgT58cgw7pdURz7nfMcQfcU3vIczVkdrhX8XHq4012tFOd7kT/a7p7m83WA71F7aO9M+djvdd6j7fxm+D1Pu3z3uirvmuyza53trv93lTb82RT2KaFVUKMNP36BvQMCo0GsEdkL8s+zLg1ExbM0NgCWAxgzf82DG1KXMfc4rjNcQfHKxSCuRuBI5AodDDDkGdV8CnVVEmEMain4Sa0AXTI0RBNpOYALVq1aV9vxJiUzHKWCis6mp0Bukx069Gr74snVNbsoCmkVMop5+pDGaWz2sLDr2iNt+oZO0b36YSIjWcxvnlN0x0VhlYoW4URjXXKyLG3Y3qoLdEazHAEEoVuMl3DDeERVpG/jeTER0CUZEU1motqFoiwJFKUaDFiacSlBJrEjSQKJ/CSFSmSKk161QlkdKeySXYzsdXKi6I9ikNJMtCUKlOuQqUq1VHT1zq6+lzfQNAIa5JpRovWaEP7ZxuNmTjMLBYuq3XUTgNdRDd6Uq9A33cbxAzxDDON0IxaNVaxd//s/ajxAE6JnPbFGZkuC3uaNU8EsDSLZVmxOj1Pd8HQxXSpedkXawbW6wZo8+6DriuQFFw5IpvnJh6/ZgFJK930aEM2XJ3yJB0DHophbqg0urkvMIgYltbGRPcdkd7Vj/NV4pbAba+/E4BjCg9p5Zeri/pdM0CG/7tXZNxVE+6bYavQn6umWwy3FXf6gg+XnAtHDgjkPNiUbqpowvDUvbRlcj5XZHYzV8Ji4Nl1vjsOhrMaxOHxeDwejz/VIHJXn6H0whg6qFOEUqQo0WLE0ohLCTKJ0yQ5LU9yRQpSpUlfZnASBkWplClXoVKV6qibTBtMmQKYYWHVUUftGIt62ldnMH3EpiU0qVQqHbCLxOU+E4/1XLfBEhzKhgUcgUShfxwmDz9G5ERAAHL7FHRKQyrnwuxQf5rhHBEBRIoSLUYszUbc4rtMdpl26Fgd55tgQG8x/fAZ2JzIvGbmlrcXAm3wXKa7ElfPcS2txfq+egfiHGoDMxyBRKHvy3SJ30Q6V8+6mdfZsaFV3eOUKsWMynkhyL1u4VI0L1SJLIxXyYzpLyNqiWz0XTpkaTyn1ZDti90mY02v0tUqtzSCl+qrK7rIuv1v9RD0sgxqGbJoGGfEklE1Yzr28O1l2KewX9N4ADaN1b7L0IaRTXOuy9yiu82pOwHQBC+pldCrOmK0Mg/r1vRYEm3DBEcgUegmUx03G4+witQgOfERECVZUY3m4tmEIvwUKUq0GLE04lICTuI0yTqtFclEClKlSa86WEZ3JJvsFWi7IxKJOBwOh8PhcETrRN3tDplMJpNhRIaiqAiGYRgmcbksy4Noz/rofQL7KcalND0FOW3RGZuOBR2xmVMxkUgkDl0X7uJiutS8bNGaE+v/ZQOwqe86GIIeEsCuovWYfCq2tvpMOBN7MzO68GWXLhtmgW2ffeHp1Mu7qwX5NDwTkpCScefBkxdvfinARIRIUaLFiKURlxIAiZE0rVq65IoUSZUmveqUMrps/z1ZWEZ5YBgGAAAAAACA0WZsd1Cp+Hw+n2/cOlk4rDpSl1K3Hr36jg1CTtwzOcNuCXYNgiDYhotH1ogOLRSux8nil4r2iYav0norzXvZ2nZjZLfaKD+VRgH/fgNmpkFbhgiGiUacGfXNmK49FPvY9tvbcTm75+3fdamW6YStwkdzaCHZcvq0CS4iU5ZmNxLXGBe/rQoHjMP1/QEGVMZFJgbDDJ/5T3eyBcvGPSqTimJcC+YQUjqGv2nC7q3nB0DOqv2G3VvlIhKIW8MRSBS6yZTiNGFX+RGCDHs8PYIdTjdAUAyvQkwSCpphNd20mpuMjQXKBQkWIjQpmJRUKYxKXcLDc6kIfHaTKaOMSc4MsVRYQ0ezU6FLpVuP3tLHuwprYfthiwiHFAWkSpmWRt+6nJ6U18CuyJ85j2x0b0d7N9pibq0lb4NnU+pO7tEULihdUO2hrptgYXCsxBFA3lQ2nmFc3FbRjGBgCd6BUH7qnXBbacjsK99RfIDMAFkBsoO+nZg8P0BBgMIAtQEan9WQEs9MAHNG8554wa+ArnqvTTjpGS7e/ilPmjARPmnsxWkdAARyOL9yAhymx7SGKlk7Gh48vDvNfdg+ITBZpD9gzgMIBwwBk5tmkEXIqqMMaETg/HUe26oLTTp4w4g9UkZ5bgbxEHtCyTLYPHmJUq3uJpqzvSNcumbBdXYQsku1C92N8jTvDFEU0rv817gmqsGjPfRuNjverTDmHCE4q+qbzOjuIIvRaDhzZ1/VJUphhiOQKHQwsZ5TjguAB8CuKr+YIMKewIoMO5xx9e4AEBTDSYpm2OTy8oIoyYoajejUQb8JwD/XB5iSswUighAsRGhS0CgzJzXMCTU1XEZHaTAXTCQSicXbY4VCoRgLExstldCtxZ1aUnlutGhtOQt18/RUdVpkDBvbS4nEoNFoNBqNFidXn0WJLJCrU8CUbqqMhZGpm+F8EbBIUaLFiKURlxKEEiVVLVNyRgpSpUmvugAZhAGlypSrUKlKtbpmA6wrQLcevfqaE7DTWs6YHm0E2dcliWWsWE3nmS7G5b6uGVnPnNuyyWbHwxDjpWk6M+j20eYMLQ/03VMmKm4ZnglJSMm48+DJize/KrdCkVMlKsyImmeZf0GQywJBEFxC/rggCIIgCIIz90bDEwMTj8fjAUAxdS6VsDcs1g8wfYCXrNd98SH8gajk5vuUPqg4XDP9Jm7oGWvGXxSdELLfrsESEsmWXTcM3cLtHFSGbSHBAjcCiUIXJqHnMlOLRBLasnUK2Sux1zqnMB/ZMGOx/zPu8ohDADAAOAACAAmAAkADYHglCkCuLVAiSIKFCP0khWNKPFUwbdyL+sDByegkaJ2WEMtWrE6/4vpW7G6e4mDw0BfxZhFt9GvfhPEAmyd4cMtUqsPl4ay7Guak5t0N52OOwJaBgSNHsk2Nh7qEWZYVq8e+ksxjj3EKSXg8LNilQqFQzE1fv5tvpQQFtFImyLtivTeWkQCk5ZRe2QiJ2ZrLYDV86MBYWX5xAPunk1yntZ2x6abNriXAshWrcfkU63y/j/m+gnzN8I3YtxzfCeOiAPi7Yh1wBBKFzs72WrlifWb3n+sOmkSizXHTXpmvAnOgea+7S8F1EHP8nU4InFY4Q5mWp3BALlesa7Bz4FuObE4EXRniyk8htCOik8vlcsWYIKr4/cHM3XXIccyODsBXH9R3NIBjUsd1fidj0iinH5riZfUODTiFQulzeax7+jHZVyxf38U3xLdr+U7u43H59KegK95Jvwvyqn3IgxLyUG2Y4QgkCv1BTD+IvCMPMg0lVYRBnSIQkaJEixFLIy4lCCT2hm0sEAgEJTDrqb4gJ2JYozSUKVehUpXqbNrZ+Zhejb+5rHrGzccLQhJSMu48ePLiza/KzQnMCEKwEKFJYYGyNyK1ltJU/J6WmFxUqLsInXSs34s4AJnTNP9JV81ZW08bwoxwjMoGg+1gPPxwAMeZkBEE+Vsupsxo9cWS5ivnaSUpFJQ1TEbteyKjMALlSQh6RK3gCCQK3eQU4jbEC7uq/AyCDHuCBQTscMbVuwMUBBTDQ9yQFM2wyRnyESxKsqJGU3RiEDPXL9DZ5F4IpAuSYCFCk8IGZVMFCdOkLuE1IKVFlGgxYmnENeNBCVSJknJEj+SMFEmVJr3qmDKIzGlkSbbd9HLk1fx+3e+VCpmKohglyUBVqky5CpWqVKcaUG3UlfpokMbaxNAsLVq1aU9GIlOfvJlMppjJZDJbRjtaNWk/rzWoMIIaNWesaut03yMO2PxII6MBE91qfoDyxCSwgCOQKHST6QVuDh5hFXlptrgMjyBKsqIaL17GcdkA58A8gCY/32PLbwknCQBANmtCw6NoBrVIqzbtOUsWU405lCwZ1tDx5p1o7TEdJBgSGL777BEjo94ao9ojtK9bv5/hAM8Ra46SjgmdeLzNDMhiUHnu7QmDDBZ+IUFiTcJoHclIkSpN+mZGcTcH5IcBpcqUR0WoVKU66qZ3usegF3mn+bFlriq9BmmnV7Pb7G0RtCasOwKQZEgh486DJy/e/J6Jrz2rvz118Pk8Pp/P5y/9NPJir9gJwylKrUy5CpWqVEfdVFNthrWgVZv2ZISYereBoJdHKeaeg0J7UBeqR8SO1an3pFAMKLwItVSJ++FmniHEsFEQW+pekoM5Hqf50lxBLLv9zCMAZTPQ17n9X5kHFX7c6Q2Jvb+KSIsSLUYsjbhmvJEEWxLHJDXMSK5IkVRp0quOIKOLzGlkSbbd9HLkyVegMBW5UKwkGWwpVaZchUpVqqOmj9p5qlNT3//1xsiARCKRSABABQDAgEAgEF4kcHPA4y/f2m7YGo5AotCVSSIaTeVGFAAlx1RIZRvGc5j0JIeocxzzpKtcaycxI1hSyV+61/GCwuzAMfQMw6LTKd8osFAcrNVDPIeFs6LHFxlNytieDjb8GOQQbhSItj02gIg8OVbUfgF/GtkaCsMMRyBR6D55mcPjLbYkI8J0wJwXf/M1no9djTVdWhpiD4MjkCj0GYY6kY1N5Q4EKgUhWIjQpNCjbKoSCNOiXoZbVF9/zsLdGYGgVbMzwJwz8+mqU2sjY1Brcjl3fG/sfz6q7og2Y34vfpdUhe/CZ2HH8yAA/xQ8D3myAIDNAVsCAJbZnxi2cH5s2cRJwVaOm2WWstPGZxYZA1KIR7mt3AzAmtkFUI5ilDcAm2QwojFXB6r3IsByVq5l+tNabctrF+QrAQ+lkiUWziHGKWc5u1FUdMKMhnxixnAU4lkaAno/nhuScEnHrQ6QEdoR2FIQ4GFnYHkfBgJTwNl42rQH7dV6IBKx4GDIPTSPAtYHcua/UzeP1epZJNatOASqFEQkYCWSjKomcvJ4Q/lYmR6bWiEWWVIFANaITOVw2ZVHzr5MzC/0i/D1kwEWVD/zT9b6DG632iK4UqC7TP2UNbnkEY864XYiKlW+BS3FUKxHDQYo+8B9yz1w4h07Ba4QkkzL0LGJGIrrZ+cNXuB3Pw6cedpAMU6GzRQqDW7ntB+cWisFyo3WCmQjL0MmXoBqNWRFIZI7gDXhtSct8LpBfkHsRQ6XpVfIRvZBU8p85F4hH8EKnxmEYmu+K6cYY3gQe1+/TzJAIRF1cKvNmn2Q0M8aOWsXjT9jvBCr521xqtWVI6apLpehKcxZuW9BWLJ3QGqf9JTiuvvU0wdghw/8IBRIX1VuNQysBqStVNPXZDtL+Nivcwi1PgD/5O0oym2J+78on0rxgA9OCla0gN0JEPHY/YP4nhIawbEJ2HlUnR9DbzfWMPAvxkrtA14x6jrAmYUcgRfRlZnnYxs2y+owLDwkS2Vk3dfjAAUVIJewD06tz+Auw6pIqxTl4dmjoGlYQXDMb31FJPs+67j9RNgsHYgwwOcYtufK6VhCLMuc4NFTbv9pEQjFNjNr0LWAJB3XGHm4x7nBRfXmHQhQ0bzqmOtVTnyeS6x1HbC/arj/Xe/7qMOl7M0eUnDPghyisF8qIoFbhfEgqyD4o3o2K5RLrMJYCaC5grHwupDNsVoXFI3+9WYPa1lwvOp91fvanGhomJip97upNHmOH+yb1+hLIpddr21RiA13Jib79k6pTB3dFAo714pQ1yRZbTXMydA7mQE9RFGhL/OxrHjdRno0Xdf9yEe0nXFfOerzY+DO3fiBWBFMAmqFbOegkAqXTVo5fS66yOIVlLCSdcp68ue4yJelhUPtU6Vm2jnNAPqwWaNnnv1w7JP6xQZawSIPlOFMEUGuzPCBb2dJUygY6Q9wr6JUjJr6NZcbEYwL/cxZfec82LOsMK49xX628P8Nq3TDEcIAPZwwhLw58hPKk5JSoDBJgiTLEStPA50m7SqYmNSx6FNv0iSjU04zmTbNYs4CqzfJflmC/YZJgNBwDAaBi8eBHT5HAk4IQkKuRER2ceHCjStXYhJeMN68Efz4wfjzJxEggJScnEygUAwlJXdh1JyEC+chggYpThxKvHh2EiRyliSJp2TpKDo6W2TIsFWmTF6y5EDy5EMKFPBWqBBfkRICBlVo1apRatSyU6fOVvXq+WjQwFeTJn6ateMwMfFn0cFep04BunTZols3pEcPvl69kD59+CZN2uaUU4ROO41r2jSuOfN2WrBA6E0yZMkM4bw5hwsWnC5acrhkxemyNZsrNtyu2vK4ZsdtzZ7HOswGEwuhkRiM7Tg4EC4enB1niJAQboudEBGRHVyIIRLecD58IX784Pz5QwIE2ElOTqQRXHAQ16U4hC7ggCEAg0YABwoKDruEl6+GqbFNPLWGAxDA2+2mUSNOiBg7t0SkS31oxeMkjrFn2IIjJzjMSUhOukkoEJSijyGgx2Ia/9Zc03b+n8+gqkgS28s756cjUp3zwTr+RPe6SerlUdT5aeuge/AHgBz9F4inwE8q+H4OvIW39FbeWry/BqMvv/KSupi9HkrVefG5Z4IavfjyWy+p4sVXyheVT5nxIq/zbvbjoqXX1Ze0hj0AYFMQZs2BkAgFIGFwxHYNB9Xdamwr3s7/CIfgYZifhT9ga10ywtzdZY/hcneTYa/kiz8KCBorhFZ4g1lXBGGWKA752ElId9aLK4SFNdV329bG7RIIKU4GEvhjr8LU1wjA23s9BmgbGjQ97oUKwqiOvyPZERICKIzA6WTpWQwV6oJle3VTlj5TyPKOjm4NbvOg/T9GVfxNA9hFhQDSw/fRjpCF2W8OA68iCyT+f2H/DG8C6e+m1x/II879NA35rwAA68QWAYglTTAsYACEqeN+6my3wYoA4F+jNoWcNS8OiajQQP7yMFawIjQRgSUMLI0Q7n1RAX6RF8YKIIJUoZ3ygC+Q2QosCktO5luMHGUaE3eLe8Vj0hqpWApIEalOapG6rdW+7qRAFcCeYikA4BPTsLh/wUWfObx9R6U8qfA4SKn5g7YCXASQCQBYN3kA//1N1f/k6S/0Y/1oBr74GXxx+2Nf0u+/7gvqC/Lzz0Ef9ORBqjn1PgLoZQ8b+1Z0c8gN/l/2DWfNmfKpX1037z2Lxn3ltBXTbE5Z8IPvfG/GJoSDy46AMxY2DgEhETEJGSUMToWgpkcxMDJ724R3/eH18SCCS4IkyXQyZMqSr0ChIsUMatSp16BJMyMTM4tOb/nNW37yvv/52Oc+8YXf/Tsu3LLMeT9bdXt2cNevXvLyaPjFDU+NgRcNuOB1r3nDLBIGRyNQGDxOyjmoVIOLh6+UGAwAkoP8wJOOhhbJBNUvhpUNLZqDU6J0KVKlybObXg6tEhVKlalS7luV2rVo1caqVgdvnaMQCcuWXHHV5ci4WUQmUmU0MMAmtgQsBSztF3RbBBewFIAw5l41ijcbBmQp6y3AENt82dAkwjxnz7P78VUUDB/VmuAd+x56cP++vXvGRkeGh1YsX7Z0yejI8OKbFy1cMDQ4MH/e3Dmz+/t6e7q7Ojva23KtLdlMOpVsbmrcgWA07PcefeThh7qddqvZuP+udG21lsTAP+fz6dr1mop+0LJ1TEggS6CuvC5oyAiub013YPMLbYzTbODATX5YEiYycpU5IVcPfJDlJ+oOudsvLOUyCHA0epShRd4duH4KgEpMEOWZGb5EFcMjVJkBUBUBRZkA2ZKNRsAN1+10xK8ti5Lvu9CQOcZwxobtVJYSNYSFI3/ezwiLJdQElVAVqbFfVj7GFYKUwiL2M9cSdgNm8LHcsAIlv3t+pTzikgjS8LhnpRA4yDpbO7BcekhLIRtyrso3hOFbiU29FgmKY5J82xRd8qylsFWkEH/ban8lnDv3Zy5e4DVGiZ3OQRDBD464XnWTmoFDR52uXJkzlfyCRN0jFULeqZVLNQEXmVElDotZNOfizQ4RLbi0K3VfQiuOKOESMFTv13Tvi6CVyU7WxMmKW3UbtDmnI17yX3HcnwjgofoU4maSUlLnIPod0w8yv66oWIMdSiGPUv2tgmA4Eda10FrntQm/elthfwuhAHWKs+Js/3zqtTxSfcZdWvMBkEko2OWd5h8Vxkl1wQ0tWqfXxjnbXTwDw5omWZ5qdvHIDbKYxyg970pJvzAz8n35OLRkfSbdDTpZgNM9lQJm2iU3/H0ngxvH29dAeY2QDQvxZ4zShpQbhAjBmwVbI7F7IvJ7kiN1FJGWNuAn0zMEyRl0h2N17JCKigCPKfy9nHNOtzwnIzwmguvZZ/TMBcQlHAfw5ExHDsXGuFuSeo3yCJnZRb3W7Uf3aNZ73EYK7kOSlVJswYYyJCtcGM1Grj98cnHhkFmu7PdOwn1WzR0hxTnRU8aBJmxqH9wQIIc/fUWBHj8qrISjbO2hPW7lRIaoDJpKp6WrVHb0ol5LnKLyFj2THgmy96ApZ6/lq1iNPY8vwDKz5gs+E/CZICPwcacqcnRir1RzPsnCgQVag5UMrKGJ6y4+yPYZI7yjKTJKSUN4oUT7GTdixO0DkfcTUdmkaBzqPbi5SiKfJaJDDKY1Zl12u1RAOkwSp7zHn6QkaipNLr6E0pHgmIQ0O3xBnWSyY20cuH2zWYxNQ3w2mFwP8xk5cKeDsdUakKlLHNJG8s5xzyhNttEBiRDNQscCl2v2ZAn1CitxMEjLMwG9p1dDtdqiwJTNCfLSqRS0AtVuqQPIsQCRZIm8x66INwpTCMJC2vYHrNMWMw5TxJ4Vi4HgRRokigFKPTpn45JYgxqh0boqguHP6IgkQTKVPp9BmCtySOJd6byE0lQ1dnktlciGUmpQO9tBn6ABRBvYbh/oXapnCC75GGIxl8W+ZZOjoHUhu7NC25UJoLdovC1VoAi2FAXp+M4N1DyAzUUjeSv5wG7Zbf9EcT6jMbsJ1BpY/Jtol7N0jpQhgLhcYfYeUZ2BXqGUH85Q8RRtz2fQdnznllB18dCDM3BM0RVmLXGPFVRjEdQhLP9DiJvpNzoUAveg9ZALfIjTVb4et5vPM9AUVC11JYBMyEpJoLawHVs3A0CND0cg2/xnXJN+IJW4AKf1GSUa3VBcuMrXlUYTugZoOzPfWKRuc8qYMmlOMKwl7x0kKtswlf2ZRsrj1hg2yzqBaPlAaMlkRC7zG4WaHc8ABrly0mDVgPhKg60KIGsln1FFQGoBHY1TGv9KgJp3Voo3OBIuA485orh0c0NG2LX6ySA9sGcBan2QhobgniJ6FetuKSHXLp5ecN1Fi1o3MgMmKdw0IrFhj81KiULDvRJDI5KSUlKAFIKxVzCugUxXpGgZfAgPEE90NezKzpxvHbPTVq2dOaq842EN9uyTzK2FYt+WdQZDe4UbeB18swvlQUCiFrbL+yC7WqlzZOUb2VpYQZu1mPUkT2Xy726Nj0gpUmoEWIer/FJkgkgbAAL4Dh/0lo5JDBMC7kg0DtzPogF0K7LWLXR06PEN0ooHH1lueJkQDPIWU6MZO6La2sgunF508C2lYGZPlcx2XJ1tuXFbre51CIUWShb4foj6LgGcmlg+UCiSixcH9rJ6TTJdAC24ApGbsa5ha/NIr+h9IeaXICiZu8C4JLzWT7gKYT7639+AAjLlppdXALbmt/zcdZ8nfI/swXNbZdw9mR1SO7IfgZKC/4MCwpCw5sD1j40wIubdtpBNcsVHmuUPvhaksxM9F8BLksQ36M/BOJAQt8TBBSUbSojwK32EYbeQrzuYGa9nWFhOKTlQBw9CFj9jTG4J3NgDveuAg1UOhb4KAp9pHgaMJKb0SloL7DodHsLjptXhkvOaaoe0CHjDU6tkKCB42gZJzRDcPo2xNeJrZDxcXeV3V28Jwk0HJhU08LtGDQMqKOP3TGoAI6YnbEkRwDRk3O4ki61InqT812xKbiioBMGE5DLpMKriOpovFLtbIe9xqMq/STYsy0ZQF5yaZavp/a+H7ubDnpSsiBwJFagBMi7wVWc7UHqlmw3fcLvvmnVRSFYRQEngxnHvux8Q1CV7AIAuAIDdAH1A+Lwg+gHgP4C9QLgBANaevOTwoqMHUoNgmVmEyDI7LrxLHDXXEk7ZAMI9zObGyCGDbk6G5UgnTpPc3+jZQMjYGUyuNXg+M/TibI2cBxgJwkb0bgi4fZf5ABCWT7BDSM8YeS/J8no4IsxQYk51wZKm44Cjw6pTfQjXjULv9ejPOVKJ3PhS2iIfulAK6sMLuzY5On/bHzhZDN2GaPh466ZLUUZEmWJ3XRG+8A+v5YOOlFIMRFB4+LjWyuSuSOep3qrPWrNBoRvGDWbgqcu9715kXz2BEMFUZXfhvL9UD/Oum64wz81IksSXvZuIOqcYRCpt+DUigsuE3Q7bvg8z9qEzf8mfeHFn55sJRUuLYxQ3fMHZuO7vhk8M091QxLBZ1Se2iQNV0djEuCFTbnyjeaqNWtDUObqJeJsBunIQ7PKWqvHPPFxEXTMKRjfADc+M9b75WitKeN2TTwPMb0PA9q2FUUGSaLhsljDAUAMMLdKYQHVjcwpgYKowaUQC16rrhxBDRU/aZgbEoUs+A10TxksnkSLjZayyRa+PhKKNjBT8LoSqrqBGiqGSRiF5TBC7h53CioeF4WFMV1zK5jDPobjHgP5a9sBDD1iO84WcL94Co5EdcIkHlNfJtfmmAEt+Ap1Jatw7v5LxbSU3meKCWs13codQUYlJVv+8tmurAGoE1npMhZexTLoPL0kg7Uey2MLEuvM0y45KlwGlWxAhnHfNjZaWNcM6rJbMimi0+szv9BBqOutfPVEjHjIbNd5paaNmbH3FLJvi1tlOxNsotdiOwT9nePO7+eSGFFTz0Tad9YdmA/pJ8qFa5gsfaoisw61Ant8Ovj+242WK3RVr+cyOCGTXTZ7Zq3yHJQLR+qfuSbgPl4UoUnnFMqluH9AP8RiO1kalsxeeHXnkuNIe9+606zih1s8OK86ekMr6qsBs8ruUq6xFH0gUfVsOYan3WStARf7F50v6wduKb0Yv2bsp2vCwSqFaMArrILvYV0qx/Ts6cD9/R0vmb7q+Uj4QJDHfLwqa1L2YSaKe6ocWXT6Eh+VwuaRyHspLtiUMefpJRUYIvdOp5YF+/MhgBB2pfwGjkKccf+wSI+BVzOXLGg1cxW4DVf9HOaaHiSs0/R3dfSi8hdFxYh7MwlF/jyhwDagF/Ce2z0hwwF4X5JbDsFJuAwM0NqtjsGMDCV6GK19hjUADbRN7yGdhOh8uwHL30Gzqylmcv7aIg7QolzPnLwrbjcNv36XKaFZz4i8PVHheQ3oQpaqLJDI3SDkEXLHMCJTZaPKyfQTUWr86qHcW6ZTe5oM7vatNDXkFlckUP6GSUQhVWitF2W719fPOZHe7g8Wr7Fm24y8hHkTmRgV7vjPRXPq4dD80a0aZg43fBV5tWvvI6ABYOgfGuti8i/kqxQuLEGoG1o5fTmm6nsWZrdluE2br0LgkdSh7F1MS5pD0DZDw8UitWKFmusx2H21xD/bm7xxs8OH1liYJSVw4YujwhxS30Bw25B7aCbGtgHZULIm6ueatxeyprVkq+lFnBmRVAd2oUT5CV6PLkXX4kaKbdgTmFhjeso/KjC8ImlgbLyrGK38S7Jjqt1E5aCMiXowa+UPgy3bJ56doHIgxPPgbwJrdWtlOGJ7MCN+05i6V7UmjijhSmI/eodXjI2WxQHjamfVOSPynWDt58boy8yvLN4q93JhpL5pWBnRG6laa1pEV5m/uIApRN7RXnTjIrmnA2sHkZpGcG6ys6ZeWXz6d8nTTftZhQObaBXmLVMVqZkgNDFgDi6XlTYm9cU2WYjpzSSFASBtqqsSoliUPKUfbAD1+pibWZ5yaYzi/fmWsHRXicj/9Np0ZzfiZtJ3111edgfAtX8W+mmv251dfEwFAtqG8tz2yDzLiDtvaberW+JqNbhCxtSgrM6q4slTJS41xaCpBGhppDrriQQWV7Ngdj4F6hSUjmoLSBstZTdvdfhAYnrBjUizm+gwVu8zqhsWb3x/F+5XEUDUTQXQCxwdHxy5vi6YHns28UiJh0n7xIWC35l2sGVQqSLHf1CN7gCQKkeGgR8aTWqW/Blf5KCAQgTmuLCxMzRjjLIsR4Qg3Vjo6+avXtmsCJoZMOkcbzF1KOHGD7ZGyklcWMxseiDsSmUwCSRbxM+OMVYgxKgwvR5ZNMCR41OQuHszuQ1+a7+uf3gMeP3GRGXHM0GOdbGhff7zIaREB+OxvTh098Bs3f/DAY3poDyrQUu6TEHyUh5dtcic+OChQFjeF+RDz4tvqdD9FtOCiA2kfIHvek2PLRftAO8dxYu4e0Liz7WByy+wDxX6ZGurZabruzGzWoO+mC+ZFknGsKTuLzNHCJC5H8gUzFs53WrBVMgK3IlOBFL/BEQWm9jTmcR8UEk0LJ/QEMDfgPHTZCqqWF/oKeev4UR4qGVUS5zxB0NfyrQdnT8wfdEaLtpcj3Jh4Fa/GT6Yc5ZuAi2Djuwc+Ib+nOI7w6MaqO+CvKa0jzaef4DqQoeUIAkdkm5u5nPO7ZmwTzAA5VUfxouS2GFAIMAhA1S+fYYVIpPcXiFLFCjmgeOEwAUdDIHw60PgpJND2OFRFbwIMEaxhpKWW72X7lmw8OYWOFw2dZsn2dNv8Jp+fFI4ZhmT9wZcZa9gSuABTru8hw5k0meCj7Sse9dKggJPRRgUseUVHak+xx8MQ1FGDhMqaulmnPLnAtDYACS9OW6Jexe1F+4w9vJkz5Ux+qgW85jkxwzw5wWAW5mHZyfzORbNMzCOc5jdVphZsUpse+pGgRpxmZ4+Z89i9pO3xxhg5Rh+/4bUCjEph60OP1/GWZrWori7aZWuQi+LZJwYp0bNMefZhwx499in6FJcAK4DmAGTIiFWJxDTzwlHfzfzavQYd4yYMyDSYPCLNmJCzuFFbpo5EuiiQZJmQlrIzkExBGmKp2LTjikiPsKfPvF2JdD4v1E/s2e26sxgCruCB6MyZLbsIP2Td9unM7rsstP2H6FBgUlOB60C/zY4q3Qy0prncAS7JZM812yYdJZL44gIDNu462YRaTzy5HKq7LjxjFOcbxaXZpB0rbZbUPTOb/7qxkfTPOgZ/dKKRgGz7bfIsoQ0Dxv3z983LN4YovoabmNZ2njOKHnZ9sRdTGjJqxIOYMidnJwRZDpkT22ppkdIUNXFSBhXKHGuBh+hl3+j5bSr2XMO7SB3VKaX2BjrOMm14q+RsOGBHswYFNr+kYLzqAM03njB99GjqjkaDxMfOaNrW6E9VMlBilTVxcWRiAJev/P+T4a4NbYqEskdsS4a4rVKLKQJNBJQFbSrfjtBmMoEUKSvjfAlAlYTjS0Rh1NHUtMWHW4Fn30YU0I4I9APU9rwtuN+benlSctiETRYm4g4j7t4AJJGoceokORgQM8z0fH9NLLaSQRE8WcC4FfkasCbZhX6k4sSbGXNNLdIvmQHOBGoGV4tgNK0s93xfAvri7emMAhaUgcGIyyffeXSpbHg9/d8m95u8/t+Tu7/t+7a4Tx/so/e5NPwzspvKRrNTj1zp/k/b/zX2oE///2SWe+NqvgmRdU0aKjwRIv16pE5FUenzb3o75AjgHEOkIF9+GXI9fENYKH9cRkPyqQ1GhPXS+LLGnmX2eG59k5TZuyrFXM9DmT7Kl4LmmRzYYLi5R2fDksKIbfC5rkxgADb6R2uTfeo1/JaJP4Z2tQbv75ibuG9vQa+oM+XauiKaHZs91rIyQW+rBmIogv4YEzh319fdt6egr865dWV564rJ+JSK+G7iU+Iebj/eLxfI9hFXOvExcVdNC95Sxx0p9I/aUz2aVYxXvaq5a9jim72mScbsAz2La0OObr0vCQ9YHdhApLlXa/WMuow+c/+qVv0DyqMpXLJmfELX8EaDbu1xv+EWtJBvooT0a+kW2Olm42Y3AkRmDQYX6PrjZWv92pJkUBNiX6go2dLhe8YjEQO1wyqcv/P2j2ui5H2PyytOd3JOAM7u1E22/FqnfURrdvb04i7oX4NDryfJLRouDI7amrvVq9w+7ap014jFFxqxN/eqV7r82amac7125UCwuUdX6+ilAilkvsWuGAhVqo2O+VOK+dWCfQcZ7SqC+Oq9/rrMPIMzuMSa7KG2FjNgiLck3/+o5VtDN1FxDjRpsixM3jZwywSkCsIrxBGlmexKOuyXSqwX1IwWjKnUaNSrxv7mzqNuTlUUVZq03cla+w/LdBO6W85sUbtIKIYVKL6H7HhWUrOr4CFqZPDxm+/Wh5RPHqX4LRNyIgjPF0eUlDITtHOeqrbun/VTifUKwWihmIpAo14N/p/gSqzg7luj0r7WKKN6OCPxl4XLB1BbwKEGvYwqyzUbO7nNqvrHm7tofqBM0dLndquvdELB8mB5n1zPWOja5JAqSEQrXdCH3PDewn2h+woJa/WSwsYhK9MjWsl067ot3AFDslXn87dShiRnvvma6BOv8nQOmHUQTRwvXW9/D6rQcS02Xj33DbI/vz+fXIbuSpVvVqvH1XfNvXuumhg3Vmy+rQhyjV9yXnRa2b2lLda/jH8bbaUt7N6a4PilTZc3mbljJboyzovcou8uz/uPINDz884ROj6wW210tyO0orFUoPXXNQbk9ZJXGVkroG6ZMy9XUPLa0z6rSgqlgXKlbVBbq40qcX93/t0PcZvskVJltM1OybhvKkytKOYM/uV0sVgTUeIBFWFg2uUO0DfzF9bWBXtjDjvSIHlV282knBlL/b/9Njq4wM+MBgtnEReD5lzWYDS2Gq0v/0Cbm6Ra13wH5A/rktyfLe3Y2s8q9rxb/KurGIjmHHpQ/sa9F+3G1jRlNmYoQw5X08X2fvrTPmKSZDxdjMvUpLJHpDkdBbcxwRT6BxGCBsQx1KrtSTmseACZBx2wkV3jfLTY0IJ6gki7KeQcXugL+ubQj5XPbtDozBmzoctRa+zN2kyQuwYbKX3ncoO0WlkQsI/OCXrcfb7PGHJfyf4TPv8OVi2tsJybYzcbMrgrBOXGJPu/OhmBEJUfjgniGC6J7wgCuGC8xyVRFNkUnd5AVqH3LHAy81wk0uRyJWGdb8j72IC0lc7Nb2sgfM26eUO2Yfbw+1mKSmX0JlPWZGw1UYb6DGkyZSlDesNt1bUXl0Z5o6Efe50AWmxsQd1BpMMYdA4v9PuDQwHXiH96Cb5sMefSBoMhZ8SaM/q/9C6bLC5NGY0pKghZO/32qT0VUAYqHWDGqVaJh8TVH97N0Rnikapdyl2nBJIZVBqjw1CrjgLa6WAzZnB3eYEhosrL5AYIZ2a2cxrnbL/WRiURfdi04Mxs26TsG1OlYv/PH4cAhTogJ+mauEIlie0IArJLJNDmbHMoE0qr/6iLnCSj14d8NH5qaVW9QRAtIou0y7NktuxEXOLUGc6k22D9/Tc2s/jfnRAhJIShjAu+6W214D1QMfEBe8ngI+QkecOmNH/7+SmdMPGdbiE0yatgv7NvGr8KBbCyIAl02locdEe62uvca7us2dcuyfK5yCL1svJed62zLrwS8nR7ndih2RWNBvhSt7opW4s3KGv9J4I4n8fSKCPuXqNAeaNRUCQvNmaVTBBuNxjhNncwixoMGdRzrm8zGuD2zSnzZ0YbujJWkylrM/TYd9YdEoymjN3Ybb3rVrbwXBzpoPWJvB3Uec8715+5sbXCKZNpkCK42Dfkc42Ewq7RRX6fPo25ouf5idGWet88p2tkWqKwhFgJWHMtRrM5Z5y1/67T3CRR61sxX4zUu6MpFDdnrIbuWgfVzanf2FtJKcsn/6rMrSnKaEza0+c+HCpm+rz/ecgTRN+//bVWYwp3haGc3m9dMjtQhxN+2CGIoSpJfHsQwgXjvaRlP3tHCAK0+dO82phQGjeYc9Z9uO4unaw0U+uwpNSOqLRNbdX0NDusmA8OVT0nkDV9JVAF4AFRnM8tNjThtSFZTm9A2l2BNKa35qn2EydIT2J0Lo77oTnQkzad/2sxEUSK/xpArbrulB1gJj35fVGW20MWaVY9WuRm3VIxrebf4tp+5ZKOx5shPVNnJIEuP8cW8YscSh3papJS9rR88PDOLLEGOjcXEb+5a/+lZsl/hG9OgvubvCd/cX2dThVKKA2V6gr5JxwI8ZxACFop9WuuavNt2lQzaaLqFGqvGhTSgkuR8ob+sBYOe/Vdou9FFM956rhQ8MOYeFNAGXiGfGZUObpMmOVLviT5/mM4CbfTrS48jti9f/nJCdcx6S2zNPnJ/LxHtNjrqatfKDKS5M1vZ1Cvff7652SIVp+eQboAvqAMGV6Pr534dPaNps9U3ic9TxKVtn+8SAMzHtlYvvzhry3vF75XYHnoq2XLHv7K/G7Be4U1g4f/WVW/RiHxC70/z6COfv7a5zrh/pz/JL1K8waraObt1lf65A9Cc1+ZI3+U7wGmVYTJoh6Skj1g15cc2S55d8/LwuLYPOAeEIAIBM4gL7oWq2L/yTcOrPLe5YLU8M7O7ts+fBsmVvJ9cNVUEXnq6CnSgDsrEPWRRsDZMJsn++aFW6KYhrGU52oS5Rga5vmVFQuVC8sheYVZFjAZ1Fvj9QnHH9LXeKy+9icTEyy6i5Wzehuh++q71xx7FlHtXMSEJ6ZhheSQ5D5z/UUVi5SLXIlduOy+xEfMC5D0sQzpriXU9Ran/TOJqkEtWHe2zKNyeiJ+5o7i0VVY26zpXwClxcfSZD9C751/pcyYMvC14zLJVexURh/X4nVqUpUIXLdrsAupVtVtfuwZr9gLMPIiRMsVjq9gaJzGrVJCScemwYjfPxABnlTqQFQdjI5HNoe1C5O01ZKigYWBLYBdLNYk/ZdexRoV4SB2fLw1c0XCIvmzq0qryFKBSjiTkfoYZvTo7wsrAMHZfzRA59YjBZW6P10+vspej+EeBZrZ8ued0856ysC5BDfw+1cuEoporaZUl9YVGnLsjRBZExPNJgKB1sZmHl6TaAzY8G1eGWFNG6KCc+P1Io0tq9LHKYXUfZw/f8WRNN73Bfh5kkgeqf8ZWS2Yvks3Ej7pfqi71m5oJMgGI6VN1OF6Mo2/r4lublATRt6pBkBN95ntXYzH2T/PzMV+Yei585xuTT1YS/82V7enNVZra3VS6OGBgC+ysIV+Y3eKXr3AE/AO0s75l9YY0pSLGqlUBkioDR/xVDqt57/A3ak+1TduLuG9aWfSAxqXb47RljWq8YCbDAm3YBAGO6+HOQp5mHMdpjEYu1N4D6NXBPgItolhA+omhcmnRdBRNwsgmuUmf+8yFI2IEHlYbG1ZMQzB0LDkNwHkE7TW4fzu3C0xhzV3b2l61ZAn6BmSKeFaKSMIGKlkeA9x64q9+XNdvn5omY2Wrwz19dcy/tmMfw603OKUrwj1zq5V93Ak86yZRqPFlrRYcqI5pPG8jz3TbDTVWC2tv+8qFqsII7GhZys++T1LXTP3y4/zyLcabT7N7dAE3dTtibjMozykVoKeAGY2xqG6s2KIe7RJag3kTOoMZcD8bnVEJqYF4VrHa6L7iTJpkbMXc0TqOGzKnVGaDU2I1oWpzUwf5ANVYM+gmyE07gRMMh0WIsZyUUmhhunXWZMm5f+/Hbvs08mDKrOrca5asG5iDj7aJbY40XnOsEZcUqwbDv/lfrDbUdWpyXqHatcxbXTTTgbeJ78eXF5n3zyLZPFvrODgnhOBp/vHTaWLWhH6Tdn83fR7stEy/X5v7srQK1XXvF2NaYPRNqRqDBi40f/n6xQl+L5Q7YZ+43pkEN9TzACYmoGucTxSiOctYoA3JhBZyKXVwjucvBo5GHRq1ciKOL/sugT4CGhm+gw7K8EKxzvSvP4xB9YJmWU7Jy8+IpU6DEA1/64RPc0INT63SyMZGwPv38ePs64C7FcLaxu0qc6q6t0Q6VECcELJcKVc2guCII2qlZ9+u/nZ1wclGCNokwDHxr4eRqSHvXzu1OyfpH//z79hBsyzT299bVU4dhl1iYcR5EmvBNNElNI1Aloq1zEUJlF6RNLN0wD88Lfv7p0+Cb4ObJeq2XNWw1u9oAoNIp/mJXwpK/zmh935PgQPZRaNRNJNPpUfvOfeONldhFAo2gqAW8VCQdlWF273DZD6aZNyVm6O7FlfDaryirvE8mfQ3y5LpHfRHAC4eJdE8uvMrTXaGqZDJOrU82saFwjEXfDpjzglU4g/dQM4J6a04jz/1ULcj+Tf/NFTiNWXyuv9HUAw3AveBSMH/CDuyzSHR9MLfQ+BW8sEQtE2EFgmFAqJpdXfh/Sy83WOeye5LFiHgKEpJ3hl/7WBb4F1rl5OWwXIPjKZBx1xoXC189wdvx/izuFdXjqCPI1PVF8COK96j4dMdjkBdKritSHU7ngJ3d/3f7z/J1k8EzT3zxSNBaph+b6y1TW0rFqMKodc+1S1FH0yLqDCAvDpvLg/bUEqtfFfp6pxptlL+KCDTsB11x2Jl4o4L1yvKcm9UuMVYMcv6ZQcku9WOuuOskurb+4cPpVPnt/14ZsbSCdOBeUY5gO3AUe60SLvw+BSsapayreEJ0psZf/3WhOfFHzo7oN+zzzv/3l8jMVprsy8wElWZSqO6IRMduXkT49IpWoKqC6+q0GvcQk1HsalkTwxdsN76vhHrIvAP2YRXZLiNL8rHsXfLJlS3MWwtzHcvDcg3+fmbm9T9v5bH39c3Dj+zLjl2fES16VuvLuooJDX08Pj9CzmcW/u5fB6u4tchxuxRvRzyxVt8bJoVbOumRUtYxrxxnDMw2EzvNx353TnyO96dD3sW/8l+5zWbJ3sKV382XLyyw3KW3Rf4PovPk23MqRcovtyvXyn5iNc+9Gni8DCyWsC9ikjHNTeSzMffFNf7cwcCvEefNZLe8glhmFG4Pib4jtNCREKubnzJV41ummD/8FMWz+FvtGBd3C0pvJd04czRTWa+5hxEZdA8xfFc5rjIuxdA+x4z7Lcy8/2CA6pDgGH8EPlnprDqsOzvIcb8UZFXq5mN1wd5SLjn4+bPxsvcaqINURRo/zW2Ta9pXjdv9f3FkuNWKzozwqgqrxSUXameQaXpSyMYWW6l7BYoZLFneH7r0whm6oCKm7MiGFGafH6f27sKWaXpeUl3Rj1AoWVNGOGFwxYd0lJQLIn/rqxtTOmSsJd3B51hBmzpRoP2VbIVhR9mrRLV9hX3NtoTTFjETWnB+nCk7lOU2vs9SLXZeIikTqfaJaevwJFxblDqvd3vr9DdW7/+6JFAPr/v07r2Q6jQfTQe6LzWPPBjg+ud/4QhHwdNvUfdKPstmxZtiqry7Kyga8YxysobV9Gqttj4CtgtbOGvivrqM7oM6yOslt5ZZh/ksqqhwfABrU9JEtr3KbFfRFP4c2Sm4P57fSuqWVR7N/XRS5ucGnprx5TvQCe/8UoReTqHMjLD8Yr/uaG5Hsnux6RAY92ebxPeL3TzRKJWe73Dvs9HY8CwO4Or3vY62mnpebpbs8dms8UsXEYnoCccgVEj8PQV5CrBKrULIIKlu46e2cByIOW6yZbCrZh/T91Q766QdTqcJWbOio6X0J+1F9d3IGoO3QkB1UhIrLNtJT1/df/6td9P/n906+XFckpBwPmOoTO6HU+XGcIjHwOyLRDHqWnEC0w+ufJ1JKggpEwcjURjuEafdb0yf9LIloUXMCDwL8VLnFYC8TU7qVV+irRry/xWS+NLd01RyBCUTGv92b5XV1JZP5/NTvgHUd1R7fD24WfDiCpM23m13NxJmKx9ukrrlhF7zC6Zrt8+1rfte24Ve4i9Ha0aNUJ+xXLB/WfZfErypctX7HiHz9l5NLmBJ7ATHE8fvIwdjvGd3+CYAjaTkkl3/z3wBVj8vMmzvDAVbasAgKG1OfAjImJ2WEPZsFM2IZb5LdsSL+7BMz5wrvN6RqxSFTD/+W7AiD/TvOIWJr9k8t55Xh+1aX2U6qnlxMzG2aQcLvzGXaft0oOcFWvEV2ZqQrBtDUO4DLKvD8fJiUvP+fthAfkigGQilNAjtBUYqX4/6eFks+uC0XHzqdKW07yNkJTznu2+/RG6DHgelabm3z9bUd5Xzq42tjZY9pSXxksd/7mlstmHvG+O6XUe2IBMzlSz8VxT8UFkh2eQyJ+3tf/G2JCleHsbzP90BbRnCau9Amuc6ZPGCRXpHPDlNc9SmYz1PKQn1yebh2hvMpQtfbIwrpqNLTG1Nll2hxvsG3qaV9Lbaw5+dbGavQpN1sHOyu2wJLf5VK+UOnpHT2ooxv4qModVWgJH7BNgZHeOvtfd/stKINrcnVSzNxCupPQkAP34ysTnQNmt7VbZa+3UNpYgj5ZHjBskKK0QQttzxdXXpx8dcODrtJvB3YtX39G6f1TZY/bVfZE/oiJ7sUDLlt9t/KZDc15r/dkeuMb4uCuV49ZEQykn2RYMtm9RQN/l3WGABXkFL6IoHf8n6dvAkhGLyh7begvhc4USCoIcPneqaeXXvggwAedwt2wI645DXnK121HhYByjVK06NK4/48aLvoXUy2t4Spe/kV2z/TYWqqj3bA2GjGs7Wjbo7HYOmrWoCUSPbN2uCVRsW+ESDXrRvx+ciSZGtX4fb5RKqUd9nntVBp+9Ix0YnEJbUUaKWVNHcXUK8y1nZR7io9DLPyfPSyXTCVx174nqll49okb3awILKhuPaLWPXXNuzu92uHEOaJ4+ej5va+NqF5DxmQ0KHtyxjnj06p5B9a94f3ap6o/MVUavf0zWPJA7hJ8KYec5eWTAvhM6kVJ8sUziIDMvKXUb5B+JJW5t9JRmfQoTh+tZn14oop1tLGteGZ7U9O0mc5lydWbAzYXbdx2p+pO/C8zSQVGjO/B3tlD7O883Fk2NqVWHpppWpnEk1n/mpZoV6aJdJHmO7O9QVJSv0hta7CU4Jtycbgt/mlDrf4UZ8EPgKUg/CcI/gGDJfWN7Eke+wSb9TuXN1km3CBeC7I5nt4CoDAlmi4Q1DN8QXdvAVg4207x9ffBIrio/rs/K1xaV6Rs9xs7XzkoSC3jQymBoAnc0fMGpBhhprPetvx9rrdXszme4QKgsJ8YPr0aabunqgAxMQTQDv+NPcwxj2OyM6du/3fnmj/Gv11kPQIBfNBcCwKTw3UgS5wFrAAdRxVwRgW8qQIuh1tHKlOkr9rYy18faowiW2sg67YGL1jJZMJUwocq4TuVyB2/7QKK7XQboPGwBqLWQD7WQL7XQH6zYQ0II37o6+2gaAH7123d37c/PDdcK0IAh/ubEXK3CWwHp2EyPOybH9rYmf0B2PshAPMsSHZmcev4Fsfuxf39xf2zV//7D4sXkbgZhtl8qwYOqIEH1GCf+8EfL9NqM5+GzVf2n2/+MEe0mUetZcBe/SHockYccJ74Brx6dRgAoD04B070qchozYLkWob65a5v8meWJmomAGpwmPIfQBgW5O8WajAHvo1dv/yi48b7bfwTPZ3sxAGv/aeoYQAgvl9KEwDs6R640fv1wbHxS9H+T989rSrNbq3nNL1fHlwA+ERDOIAfh1zkwRVHWguPTmEfWK//3XtN70cezqXbRH//s6D3b3+QszzslNJk77d9GxlsTCHpxzI8u+/T7784QtW8soH3Q+jJBHCR8kr4RyA+f6uDMz4McjYP97Shv9HCnp8Kf3iGUgvbg/dDuNDxSaIAKMT/21cZ8KD8DL3xuThFcW2i4p9V7hXLW0BVH1yHl4t7PL2/lQuouzhX74rwhv0akbKnp897PNO7FHzjoiuWlFNes+P/sBbP/2KnHdz8umvrPZSxFbLiwVxyDUoxpRk3l+/8zMePh5R1GAcA7srV+4/pAmJX25Vsi4gvAwqxWDTaEFJuyDQ2EcnWXqlKopKpuanRADTAhZO07XZbKjkblnWp7R3YaANTPb4pGTdzuUOqdY1Wie8mD3jocT06UywQAUlA20YBoKJlXRAJDMlNkMZ7ySotZEQjQI/EUclWldWOXVRmCleOgrYWVI1BL7mb+72e0dNrsL0C4dZs3oEKhaxuNsnBEbFxMkSER++ZjLZHYhJVV3mxoyVRaUT0qjovregcVdRsXjkmaFFtEeJljeQFVQpmU04QcbCHjAz1iUIawvlOXkO6LR6kXeomXMojZRNV3fqqx37Hh7fUegDVC1+ZqEwlq663zcy93q574+quAr0ttBUqf+JtjFipc0Ba+yl5a8cm7YzNrKNA+IQFO3pf1frVbe1DSphNWRtoHeJNhfsXReexqvsFqSfU756E1iyrsnBZWxpYaGYmIRKvWS7z7Og/7i4gdm4JDaRcmhjrK1M6N/RacmOJhGhl9Y04HKxkjZ/cGvKCnArtduwIdK1IRihWtsvob5HYWVahCL57iZZS9SUq+DTH891uAIjylVenNa1tSiGbHSn2zXlnp8uqd7nqmPmnCwXmx21X8uPHxzgfEItEy59tt9+uv7LXdlPoy5l671l4MAJ1o5WoKIF2F+6XZ1Tt62LN5guxWWWlEtMkxPfdvNxFrYgR121Rl2vasoD8eg63sF4tQ7lQeGxbPeLMCTiqr1wDL+vSJfV2+6MXfW9cEMPK0L/87kEi8Y2rb9VDt+P9GyLv5cBWJ1ou7cKdExWer8jP4wvDSs+z6BuPaGKOL/CmliSa4byiLug+mRBRRfBAN7GSZ02C4XH8epdWr/CB8gbUZUpeSs5xNQDIOYVA1EmIeiKXWKZRA1VGTCTxomOogOjQDcfX+z1rlOyhnUwtEPZiQDSlSQ0XHOV5si9e6Z3q69BntC2+6vPoPvC+4+0VbTt4/1/8wXIxG46mE4wn0Hi3/XAQpiLgAFZg0Lj5KH+1XBrHQnphTZ0v+3OjIp+6b0gs6uoSE7qVwju3teh9J9BOXc/CwDy//aUmFqlFLMmH5lU1R9hRUw4SaI30qFHWAnmmSlqo+atuG4XssS15zf1Ssyl5bZ3b4pFX87ayAcdmcZ+zoehzzoXEdaQSZkooLvmV4Lmzux6vEwW7RVCEtWt3dAUK3fFiZ1adi6VOQXch6mzGzz2hzjfMKQqTjij2u2apjiTPraRGJ77aNjTpcd6gPJBWAP9XtapcWP9x+jL8jdPPza/wqiNufDAw63bXKklrmsAe+QU8JfyfA2vqF+RP3Yn13ehh5+u5HrbMRIYw9PLtoX8wOYG1kXeC4ea9Z02M3aMaunz9cnyavXr7LEQPHq+qphiJHy0JgJgAyszomz3TllYBCdbIvROcUeLgNZLtLOpFprX04WKOgV5Aliw9ex2bM2wfnY+nNvMV/ivu/hOzxFHVblJDWaNJ6SRluVG9sVq0xrVEXTfUKBuMq6gPQXdUs1IyVtSwJWxvhd+inXQ9IC5KhxHLMt4fnJosutYMtqXALBvnQFQBmHOWdlVr+DTPxlIgd2GMq8lhP48RDXOuEQMZi89+YicSktgJILnmLh4Oh0O0eMqzdo9byofwmO37uhPrJIdcL72sE5x8zqioVYmkxVFFa5/blao3AKgh/kEOAmPux5bDNOQq1bIKwUmJhiYHC3CcmZLvkWFVkQ5ZejnE9cB/sCIi4lU0kY6etRUNaXuoQLytJ0Noy2oMCgrLiJCdQR3DBOf+yxUCjvLfQFbEea/Tl72SuNOuplT+nBtaWgrlyzNcROxsbX/TFdJy/2gxPa3oU2GpYbChL2v5H2ayINWNQL/zmKzYqUCsrV2asreXRL7/cl4aT67SMTAxEfJLwhOhNhXOJu/p0wN/vCVMqCzxOjfN5eLRLOCKIc+Mr1xe6fAwbFsW4L4c27m+atoAdATbpl/N3RJgbB0nfM26LfuKkPRsDSEA0VMTjdDXY7J4f78+YF/P4+shV+hclZTGfyPTm90uVKPRcBhutK5CKWYe9pga8cuCqRjhcMo5xNh4QcY6JR3ak5Y41m5SRB4WFFUtsiqAUjUSMBZ67PcMIdBMa2icFJ7U7j1Wsf1OayGcqzEzC3iAWUa5CjWac3iv07CSJRImGFPbid3Or5WCwLf2+4J2LsbU2UFhVSwTrFqDzIc4CmBNjJDWlVbTaDQa4mYkXpdskyJ3dTUeT1xGtlTIJuFMOGnhOlHKkhNEGhJz9Bl+jAlDMCoDQmqZzBWyUVSIPHVc62QDZg9PHNwFZTDEkIklmgQiYLBQkD4HY9VorKtaAoSLKAFpNcZUShmwIO2slRWTNjWmVlB8f4RRvuFexwoqQ1ZkBavjhuJi3godyfDJKwLzAFDvohaWhDRiJ92jTown936tuwTi3JlYlMtwOCyt15vF1aBlAmZA82otOdIGCx0WQJoOx6/3Y1nZoffnlDlo3b/H9r0SIDLmwYOuJc9daf2tWRKALa3DV9pBGLtmbva3pC4aJ60R6XqbGa7R+/eT/d5Qqn+o8odY9WC+puyV01hiCHwco24UpVF1HR0Smv14IcqUsNBjpYraXopBF5Jah6cqOk/JaFXmp8lk0JaMghCkFBvQDPzrFpQuAOIsaY2v92Ywp10gNFEpcrdh7taeMLRtTMkxGyUxSVVgFSmXZaNPsxsY+IZp8JGkxpObAF9Nd0aW0PPwnrr8HjCbBCt7pcrdNy+H28m6Q+pXj48+UMHKC2FNj2Q3ef+3aRqHuRD+mb/5Sefw94MaMLCfGVZZCSf6S4+Je/PhB+SmK1JfODU6E1ZUq5Mt6vWc9zaOU9Vlkgvq5IzheXqLhY3p9dMP75o//cXhLGefHezaK88zJV1f8/55i6r69eQfZXD31l74pObjerPZfRk3c4fx/LUxeYgtbM7uw/1qoe9zbYnp+TyMB7dW09/BdyzKbqteKHksGlyQUFbKxd7NNdxdEkZAABA8ilMPGzvRSgGBEDzYMXnnUFzRTHUSgNZ7VUT6keAe25pqf9QX1f84sWDiI9PHEbU4ZWtLYLPET6V0QNm9el9i0LQ9He94QvClunIEGiRcRmpPmZQpDQnmF6khAAPxvx9/33//98LH/1tSNKIfAMBa+w8Z5AF8PG/9s6In+e5sDgGgYAAAEMC/H8gjt6vr/0a9U77XX0BoKBVCeo7g3YSNt6vVQ6Wd4n/wleq9QlZNZm1Izy/2yucL/AoIRy4DpfuMQ32wJMrP6CLPUDfh6ueBllrhRfAb8IN5W5eSVcapO+raPi+xbzrfXazo7Od8/7LY1Q6g/56l0peZBAqo/r4t4F8y3+hiCGe4nkAj0+XWUgku/mycfV2vxE0ZDvq7T+aUthOUzVf9OJAVWAmAry5vwD4nzSOfeY2dpUtt2+aAfZ6qd0NlLsc4+4k4JWFvf9QTqvtGLeRjZhOC9xZ51cL3sID9Q5UjZdux2wWqkKptFGUILZlHLwrZIT7FUJcipBD8fKE9u+8/4i0X8tvbvOYE3BCPjbHlHjtmItkxvisi2oEufJy0IQYNzD26o8+K0bFsl4vY/uIJQHYoeN8+WQQ6dwJPS1iJwk+z2FS2pye6rc0tbT3B81Lfh2S7hhfUmrFyLq0EomiIb53+YKVe75LMdAwDkJsCc/0SCsTsxU+YWm/KeufK+WjcsF7ZZFzbhTEj3pn5yxUtD5VWDssueCtic/C2MdfI57zI9r2QHuNSfL28Jylz5dk7EnIRP0vtXwxvO2DrMvarxGJEq5XXLL+LF9RxwelIdhNx0bTHtJoRPRKUTinylZIE4E9XnaUTQDgoxB2MApAnSkNK5J7u4SvBtnO/sme/3t00AubJ/MHfR+k8ZEcFygMABNCQfrQ2FIwDtTsB+h8cg8MBCIzDoSYHAJbBtwbE3Xsc692/NODUrjYlGkg7F9JAkU7XIKBYW4MD3p7dz9HMMrsCArAr70I+foac3VeQ8LX5RIJ2Rj3MGtVrYCVG0tA6KNWwodreOpVa/njXU6yHWJxZuybJ6u6gU4d4w17azEJMoV8r4wD+ykrkoEZ91FZq5HLx9iXoAw8+HDAIM2pqWXDwzofXPNwbsg2fR+9k6yKFgLsHJkX8QpfmjVcdYmFSgNxer2OZYgoEDZKB9X1msmRKEnlrIDQNQPlAUDYulSfGWMcxeIefeqMI6vBC1axw495vIbfwBWHwxVUvUIyWjtTwW1Tg+cZTDb19jarp+fVVEgp5fX7s40K8Njnqrjn0tY21FdMb7YopiU1xVWKVPyaxyKck5lRNiG2EbRvgUikoTg91SXSgbBJcbS0wa6QBpiRqmU1IpaokKi5WMZGNirpGSuGURCZQpTWqhK+KeaqIqwo58QKaP5Xh0dFWkalxcFvY/PW3Qrr6w9dc13alJm27rivt2lwVhV5FIlpkpaoBEVZ5YVaxEFXaBNa/tpjfxdZezutw+Dc+IP/J/4yy4NzgrgbIwX0EGbVCZaWwlrSScj6O/E0+IBFh0d0i+45v37dmNZXK9TXwGv8MfPbetCx6XL+ApClDW/HjNiK+7vrq1Ss42128bbG/MviMc5Go5Jc3KmddZ28o7EU7VrCGBPZ4NtL89/tlXF0bIYmNIwBBAQ==) format(\"woff2\");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Quicksand;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format(\"woff2\");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}body,html{font-family:var(--monster-font-family);font-size:1rem;font-weight:400;line-height:1.4}html{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-paragraph,p{font-size:1rem;font-weight:400;line-height:1.6;text-align:justify}.monster-h1,h1{font-size:3rem;font-weight:400;line-height:1.15;margin:4rem 0 1.5rem}.monster-h2,h2{font-size:2.5rem;font-weight:400;line-height:1.2;margin:4rem 0 1.5rem}.monster-h3,h3{font-size:2rem;font-weight:400;line-height:1.25;margin:4rem 0 1.25rem}.monster-h4,h4{font-size:1.5rem;font-weight:400;line-height:1.3;margin:4rem 0 1.25rem}.monster-h5,h5{font-size:1.4rem;font-weight:bolder;line-height:1.3;margin:4rem 0 1.25rem}.monster-h6,h6{font-size:1.3rem;font-weight:700;line-height:1.3;margin:4rem 0 1.25rem}p+h1{margin-top:3.75rem}p+h2{margin-top:3rem}p+h3{margin-top:2.25rem}p+h4{margin-top:1.5rem}p+h5{margin-top:.75rem}div+h1,div+h2,div+h3,div+h4,div+h5,div+h6,p+h6{margin-top:0}.deco{background:linear-gradient(to right,var(--monster-color-gradient-1) 0,var(--monster-color-gradient-2) 50%,var(--monster-color-gradient-3) 100%);-webkit-background-clip:text;background-clip:text;background-size:cover;color:var(--monster-color-secondary-1);text-fill-color:transparent;-webkit-text-fill-color:transparent}::-moz-selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}::selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}kbd{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;border-radius:10rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;padding:.25em .6em;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}details{margin-bottom:1rem}summary{cursor:pointer;font-feature-settings:\"tnum\";font-weight:700;letter-spacing:.1em;padding:.6rem 1rem}details[open]{padding:.6rem 1rem .75rem}details[open] summary{margin-bottom:.5rem;padding:0}.monster-no-user-select{-webkit-user-select:none;-moz-user-select:none;user-select:none}@keyframes details-show{0%{opacity:0;transform:translateY(-.5em)}}details[open]>:not(summary){animation:details-show .15s ease-in-out}details[open]>:last-child{margin-bottom:0}.monospace{font-family:var(--monster-font-family-monospace)}:host(monster-button){display:flex}[data-monster-role=control]{align-items:stretch;display:flex}button{min-width:-moz-max-content;min-width:max-content;width:100%} 
-}`, 0);
+}`,
+		0,
+	);
 } catch (e) {
-  addAttributeToken(document.getRootNode().querySelector('html'), ATTRIBUTE_ERRORMESSAGE, e + "");
+	addAttributeToken(
+		document.getRootNode().querySelector("html"),
+		ATTRIBUTE_ERRORMESSAGE,
+		e + "",
+	);
 }
diff --git a/source/components/form/stylesheet/message-state-button.mjs b/source/components/form/stylesheet/message-state-button.mjs
index 69304446e6850872765c3c168ef1cc9c4e8a8d76..dbcad528781e806698f94a472f2e241608b6b646 100644
--- a/source/components/form/stylesheet/message-state-button.mjs
+++ b/source/components/form/stylesheet/message-state-button.mjs
@@ -10,10 +10,10 @@
  * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
 
-import {addAttributeToken} from "../../../dom/attributes.mjs";
-import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
+import { addAttributeToken } from "../../../dom/attributes.mjs";
+import { ATTRIBUTE_ERRORMESSAGE } from "../../../dom/constants.mjs";
 
-export {MessageStateButtonStyleSheet}
+export { MessageStateButtonStyleSheet };
 
 /**
  * @private
@@ -22,10 +22,17 @@ export {MessageStateButtonStyleSheet}
 const MessageStateButtonStyleSheet = new CSSStyleSheet();
 
 try {
-  MessageStateButtonStyleSheet.insertRule(`
+	MessageStateButtonStyleSheet.insertRule(
+		`
 @layer messagestatebutton { 
 @font-face{font-display:swap;font-family:Raleway;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format(\"woff2\");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Quicksand;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format(\"woff2\");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}body,html{font-family:var(--monster-font-family);font-size:1rem;font-weight:400;line-height:1.4}html{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-paragraph,p{font-size:1rem;font-weight:400;line-height:1.6;text-align:justify}.monster-h1,h1{font-size:3rem;font-weight:400;line-height:1.15;margin:4rem 0 1.5rem}.monster-h2,h2{font-size:2.5rem;font-weight:400;line-height:1.2;margin:4rem 0 1.5rem}.monster-h3,h3{font-size:2rem;font-weight:400;line-height:1.25;margin:4rem 0 1.25rem}.monster-h4,h4{font-size:1.5rem;font-weight:400;line-height:1.3;margin:4rem 0 1.25rem}.monster-h5,h5{font-size:1.4rem;font-weight:bolder;line-height:1.3;margin:4rem 0 1.25rem}.monster-h6,h6{font-size:1.3rem;font-weight:700;line-height:1.3;margin:4rem 0 1.25rem}p+h1{margin-top:3.75rem}p+h2{margin-top:3rem}p+h3{margin-top:2.25rem}p+h4{margin-top:1.5rem}p+h5{margin-top:.75rem}div+h1,div+h2,div+h3,div+h4,div+h5,div+h6,p+h6{margin-top:0}.deco{background:linear-gradient(to right,var(--monster-color-gradient-1) 0,var(--monster-color-gradient-2) 50%,var(--monster-color-gradient-3) 100%);-webkit-background-clip:text;background-clip:text;background-size:cover;color:var(--monster-color-secondary-1);text-fill-color:transparent;-webkit-text-fill-color:transparent}::-moz-selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}::selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}kbd{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;border-radius:10rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;padding:.25em .6em;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}details{margin-bottom:1rem}summary{cursor:pointer;font-feature-settings:\"tnum\";font-weight:700;letter-spacing:.1em;padding:.6rem 1rem}details[open]{padding:.6rem 1rem .75rem}details[open] summary{margin-bottom:.5rem;padding:0}.monster-no-user-select{-webkit-user-select:none;-moz-user-select:none;user-select:none}@keyframes details-show{0%{opacity:0;transform:translateY(-.5em)}}details[open]>:not(summary){animation:details-show .15s ease-in-out}details[open]>:last-child{margin-bottom:0}.monospace{font-family:var(--monster-font-family-monospace)}[data-monster-role=control] [data-monster-role=button]{min-width:-moz-max-content;min-width:max-content;width:100%}button{width:-moz-max-content;width:max-content} 
-}`, 0);
+}`,
+		0,
+	);
 } catch (e) {
-  addAttributeToken(document.getRootNode().querySelector('html'), ATTRIBUTE_ERRORMESSAGE, e + "");
+	addAttributeToken(
+		document.getRootNode().querySelector("html"),
+		ATTRIBUTE_ERRORMESSAGE,
+		e + "",
+	);
 }
diff --git a/source/components/form/stylesheet/state-button.mjs b/source/components/form/stylesheet/state-button.mjs
index 705bd8b5d5bfd9a6f456d9b2641fa2a827fcbc34..13c05aa000da4d98b844b6c3be67a435178942d0 100644
--- a/source/components/form/stylesheet/state-button.mjs
+++ b/source/components/form/stylesheet/state-button.mjs
@@ -10,10 +10,10 @@
  * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
 
-import {addAttributeToken} from "../../../dom/attributes.mjs";
-import {ATTRIBUTE_ERRORMESSAGE} from "../../../dom/constants.mjs";
+import { addAttributeToken } from "../../../dom/attributes.mjs";
+import { ATTRIBUTE_ERRORMESSAGE } from "../../../dom/constants.mjs";
 
-export {StateButtonStyleSheet}
+export { StateButtonStyleSheet };
 
 /**
  * @private
@@ -22,10 +22,17 @@ export {StateButtonStyleSheet}
 const StateButtonStyleSheet = new CSSStyleSheet();
 
 try {
-  StateButtonStyleSheet.insertRule(`
+	StateButtonStyleSheet.insertRule(
+		`
 @layer statebutton { 
 [data-monster-role=control]{box-sizing:border-box;outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:host{box-sizing:border-box;display:block}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-0{border-radius:0;border-style:none;border-width:0}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}:after,:before,:root{--monster-color-gray-1:#f6f6f6;--monster-color-gray-2:#e2e2e2;--monster-color-gray-3:#8b8b8b;--monster-color-gray-4:#6f6f6f;--monster-color-gray-5:#3e3e3e;--monster-color-gray-6:#222;--monster-color-rose-1:#fff7f9;--monster-color-rose-2:#ffdce5;--monster-color-rose-3:#ff3b8d;--monster-color-rose-4:#db0072;--monster-color-rose-5:#800040;--monster-color-rose-6:#4c0023;--monster-color-raspberry-1:#fff8f8;--monster-color-raspberry-2:#ffdddf;--monster-color-raspberry-3:#ff426c;--monster-color-raspberry-4:#de0051;--monster-color-raspberry-5:#82002c;--monster-color-raspberry-6:#510018;--monster-color-red-1:#fff8f6;--monster-color-red-2:#ffddd8;--monster-color-red-3:#ff4647;--monster-color-red-4:#e0002b;--monster-color-red-5:#830014;--monster-color-red-6:#530003;--monster-color-orange-1:#fff8f5;--monster-color-orange-2:#ffded1;--monster-color-orange-3:#fd4d00;--monster-color-orange-4:#cd3c00;--monster-color-orange-5:#752100;--monster-color-orange-6:#401600;--monster-color-cinnamon-1:#fff8f3;--monster-color-cinnamon-2:#ffdfc6;--monster-color-cinnamon-3:#d57300;--monster-color-cinnamon-4:#ac5c00;--monster-color-cinnamon-5:#633300;--monster-color-cinnamon-6:#371d00;--monster-color-amber-1:#fff8ef;--monster-color-amber-2:#ffe0b2;--monster-color-amber-3:#b98300;--monster-color-amber-4:#926700;--monster-color-amber-5:#523800;--monster-color-amber-6:#302100;--monster-color-yellow-1:#fff9e5;--monster-color-yellow-2:#ffe53e;--monster-color-yellow-3:#9c8b00;--monster-color-yellow-4:#7d6f00;--monster-color-yellow-5:#463d00;--monster-color-yellow-6:#292300;--monster-color-lime-1:#f7ffac;--monster-color-lime-2:#d5f200;--monster-color-lime-3:#819300;--monster-color-lime-4:#677600;--monster-color-lime-5:#394100;--monster-color-lime-6:#222600;--monster-color-chartreuse-1:#e5ffc3;--monster-color-chartreuse-2:#98fb00;--monster-color-chartreuse-3:#5c9b00;--monster-color-chartreuse-4:#497c00;--monster-color-chartreuse-5:#264500;--monster-color-chartreuse-6:#182600;--monster-color-green-1:#e0ffd9;--monster-color-green-2:#72ff6c;--monster-color-green-3:#00a21f;--monster-color-green-4:#008217;--monster-color-green-5:#004908;--monster-color-green-6:#062800;--monster-color-emerald-1:#dcffe6;--monster-color-emerald-2:#5dffa2;--monster-color-emerald-3:#00a05a;--monster-color-emerald-4:#008147;--monster-color-emerald-5:#004825;--monster-color-emerald-6:#002812;--monster-color-aquamarine-1:#daffef;--monster-color-aquamarine-2:#42ffc6;--monster-color-aquamarine-3:#009f78;--monster-color-aquamarine-4:#007f5f;--monster-color-aquamarine-5:#004734;--monster-color-aquamarine-6:#00281b;--monster-color-teal-1:#d7fff7;--monster-color-teal-2:#00ffe4;--monster-color-teal-3:#009e8c;--monster-color-teal-4:#007c6e;--monster-color-teal-5:#00443c;--monster-color-teal-6:#002722;--monster-color-cyan-1:#c4fffe;--monster-color-cyan-2:#00fafb;--monster-color-cyan-3:#00999a;--monster-color-cyan-4:#007a7b;--monster-color-cyan-5:#004344;--monster-color-cyan-6:#002525;--monster-color-powder-1:#dafaff;--monster-color-powder-2:#8df0ff;--monster-color-powder-3:#0098a9;--monster-color-powder-4:#007987;--monster-color-powder-5:#004048;--monster-color-powder-6:#002227;--monster-color-sky-1:#e3f7ff;--monster-color-sky-2:#aee9ff;--monster-color-sky-3:#0094b4;--monster-color-sky-4:#007590;--monster-color-sky-5:#00404f;--monster-color-sky-6:#001f28;--monster-color-cerulean-1:#e8f6ff;--monster-color-cerulean-2:#b9e3ff;--monster-color-cerulean-3:#0092c5;--monster-color-cerulean-4:#00749d;--monster-color-cerulean-5:#003c54;--monster-color-cerulean-6:#001d2a;--monster-color-azure-1:#e8f2ff;--monster-color-azure-2:#c6e0ff;--monster-color-azure-3:#008fdb;--monster-color-azure-4:#0071af;--monster-color-azure-5:#003b5e;--monster-color-azure-6:#001c30;--monster-color-blue-1:#f0f4ff;--monster-color-blue-2:#d4e0ff;--monster-color-blue-3:#0089fc;--monster-color-blue-4:#006dca;--monster-color-blue-5:#00386d;--monster-color-blue-6:#001a39;--monster-color-indigo-1:#f3f3ff;--monster-color-indigo-2:#deddff;--monster-color-indigo-3:#657eff;--monster-color-indigo-4:#0061fc;--monster-color-indigo-5:#00328a;--monster-color-indigo-6:#001649;--monster-color-violet-1:#f7f1ff;--monster-color-violet-2:#e8daff;--monster-color-violet-3:#9b70ff;--monster-color-violet-4:#794aff;--monster-color-violet-5:#2d0fbf;--monster-color-violet-6:#0b0074;--monster-color-purple-1:#fdf4ff;--monster-color-purple-2:#f7d9ff;--monster-color-purple-3:#d150ff;--monster-color-purple-4:#b01fe3;--monster-color-purple-5:#660087;--monster-color-purple-6:#3a004f;--monster-color-magenta-1:#fff3fc;--monster-color-magenta-2:#ffd7f6;--monster-color-magenta-3:#f911e0;--monster-color-magenta-4:#ca00b6;--monster-color-magenta-5:#740068;--monster-color-magenta-6:#44003c;--monster-color-pink-1:#fff7fb;--monster-color-pink-2:#ffdcec;--monster-color-pink-3:#ff2fb2;--monster-color-pink-4:#d2008f;--monster-color-pink-5:#790051;--monster-color-pink-6:#4b0030;--monster-gradient-tangerine-1:#e5b875;--monster-gradient-tangerine-2:#d9a362;--monster-gradient-tangerine-3:#c08a4e;--monster-gradient-tangerine-4:#a7713b;--monster-gradient-tangerine-5:#8f5a28;--monster-gradient-tangerine-6:#360505;--monster-color-seashell-1:#f7f5ef;--monster-color-seashell-2:#e5e2d9;--monster-color-seashell-3:#cbc6b3;--monster-color-seashell-4:#a19d8a;--monster-color-seashell-5:#7a7566;--monster-color-seashell-6:#514d3f}@font-face{font-display:swap;font-family:Raleway;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format(\"woff2\");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Quicksand;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format(\"woff2\");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}body,html{font-family:var(--monster-font-family);font-size:1rem;font-weight:400;line-height:1.4}html{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-paragraph,p{font-size:1rem;font-weight:400;line-height:1.6;text-align:justify}.monster-h1,h1{font-size:3rem;font-weight:400;line-height:1.15;margin:4rem 0 1.5rem}.monster-h2,h2{font-size:2.5rem;font-weight:400;line-height:1.2;margin:4rem 0 1.5rem}.monster-h3,h3{font-size:2rem;font-weight:400;line-height:1.25;margin:4rem 0 1.25rem}.monster-h4,h4{font-size:1.5rem;font-weight:400;line-height:1.3;margin:4rem 0 1.25rem}.monster-h5,h5{font-size:1.4rem;font-weight:bolder;line-height:1.3;margin:4rem 0 1.25rem}.monster-h6,h6{font-size:1.3rem;font-weight:700;line-height:1.3;margin:4rem 0 1.25rem}p+h1{margin-top:3.75rem}p+h2{margin-top:3rem}p+h3{margin-top:2.25rem}p+h4{margin-top:1.5rem}p+h5{margin-top:.75rem}div+h1,div+h2,div+h3,div+h4,div+h5,div+h6,p+h6{margin-top:0}.deco{background:linear-gradient(to right,var(--monster-color-gradient-1) 0,var(--monster-color-gradient-2) 50%,var(--monster-color-gradient-3) 100%);-webkit-background-clip:text;background-clip:text;background-size:cover;color:var(--monster-color-secondary-1);text-fill-color:transparent;-webkit-text-fill-color:transparent}::-moz-selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}::selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}kbd{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;border-radius:10rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;padding:.25em .6em;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}details{margin-bottom:1rem}summary{cursor:pointer;font-feature-settings:\"tnum\";font-weight:700;letter-spacing:.1em;padding:.6rem 1rem}details[open]{padding:.6rem 1rem .75rem}details[open] summary{margin-bottom:.5rem;padding:0}.monster-no-user-select{-webkit-user-select:none;-moz-user-select:none;user-select:none}@keyframes details-show{0%{opacity:0;transform:translateY(-.5em)}}details[open]>:not(summary){animation:details-show .15s ease-in-out}details[open]>:last-child{margin-bottom:0}.monospace{font-family:var(--monster-font-family-monospace)}div[data-monster-role=control]{height:100%}button{min-width:-moz-max-content;min-width:max-content;width:100%}[data-monster-role=button]{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between;transition:width 10s ease-in-out}div[data-monster-role=label]{align-items:center;display:flex;gap:.4rem;justify-content:center;width:100%}[data-monster-role=state]{align-content:center;align-items:center;align-self:stretch;display:flex;transition:width 12s ease-in-out}[data-monster-role=state]>img,[data-monster-role=state]>svg{margin-left:.3em}[data-monster-role=state]>svg.successful{animation:bouncy .5s linear forwards;color:var(--monster-color-successful)}[data-monster-role=state]>svg.activity{animation:bouncy .5s linear forwards;color:var(--monster-color-activity)}[data-monster-role=state]>svg.failed{animation:bouncy .5s linear forwards;color:var(--monster-color-failed)}[data-monster-role=state]>svg.activity{animation-duration:1s;animation-iteration-count:infinite;animation-name:activity;animation-timing-function:cubic-bezier(0,0,.2,1)}[data-monster-role=state].stateless{display:none}@keyframes activity{0%{transform:scale(1)}50%{transform:scale(.1)}to{transform:scale(1)}}@keyframes bouncy{0%{opacity:0;transform:scale(.1)}80%{opacity:1;transform:scale(1.15)}90%{transform:scale(.9)}to{transform:scale(1)}} 
-}`, 0);
+}`,
+		0,
+	);
 } catch (e) {
-  addAttributeToken(document.getRootNode().querySelector('html'), ATTRIBUTE_ERRORMESSAGE, e + "");
+	addAttributeToken(
+		document.getRootNode().querySelector("html"),
+		ATTRIBUTE_ERRORMESSAGE,
+		e + "",
+	);
 }
diff --git a/source/components/layout/iframe.mjs b/source/components/layout/iframe.mjs
index 086f4d303bd71ab9c462942622ccda4033cc5cf1..b783378d4699298fdf39867a13f0405ca7a709c3 100644
--- a/source/components/layout/iframe.mjs
+++ b/source/components/layout/iframe.mjs
@@ -156,9 +156,7 @@ class Iframe extends CustomElement {
 			loading: "eager",
 
 			actions: {
-				click: () => {
-
-				},
+				click: () => {},
 			},
 		});
 	}
diff --git a/source/components/style/badge.css b/source/components/style/badge.css
index ffc72ee08d78b75bbcb8dec1cb3c1ed21f6d5a86..29c388c80365d3f2110b68d1fd37c37cea26be79 100644
--- a/source/components/style/badge.css
+++ b/source/components/style/badge.css
@@ -1,2 +1,148 @@
 /** generated from badge.pcss **/
-.monster-badge-primary{padding:.25em .4em}.monster-badge-primary,.monster-badge-primary-pill{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-primary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-secondary{padding:.25em .4em}.monster-badge-secondary,.monster-badge-secondary-pill{background-color:var(--monster-bg-color-secondary-3);border-radius:.25rem;color:var(--monster-color-secondary-3);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-secondary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-tertiary{padding:.25em .4em}.monster-badge-tertiary,.monster-badge-tertiary-pill{background-color:var(--monster-bg-color-tertiary-3);border-radius:.25rem;color:var(--monster-color-tertiary-3);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-tertiary-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-destructive{padding:.25em .4em}.monster-badge-destructive,.monster-badge-destructive-pill{background-color:var(--monster-bg-color-destructive-1);border-radius:.25rem;color:var(--monster-color-destructive-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-destructive-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-success{padding:.25em .4em}.monster-badge-success,.monster-badge-success-pill{background-color:var(--monster-bg-color-success-1);border-radius:.25rem;color:var(--monster-color-success-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-success-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-warning{padding:.25em .4em}.monster-badge-warning,.monster-badge-warning-pill{background-color:var(--monster-bg-color-warning-1);border-radius:.25rem;color:var(--monster-color-warning-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-warning-pill{border-radius:10rem;padding:.25em .6em}.monster-badge-error{padding:.25em .4em}.monster-badge-error,.monster-badge-error-pill{background-color:var(--monster-bg-color-error-1);border-radius:.25rem;color:var(--monster-color-error-1);display:inline-block;font-size:75%;font-weight:700;line-height:1;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}.monster-badge-error-pill{border-radius:10rem;padding:.25em .6em}
\ No newline at end of file
+.monster-badge-primary {
+	padding: .25em .4em;
+}
+.monster-badge-primary,
+.monster-badge-primary-pill {
+	background-color: var(--monster-bg-color-primary-4);
+	border-radius: .25rem;
+	color: var(--monster-color-primary-4);
+	display: inline-block;
+	font-size: 75%;
+	font-weight: 700;
+	line-height: 1;
+	text-align: center;
+	text-decoration: none;
+	vertical-align: baseline;
+	white-space: nowrap;
+}
+.monster-badge-primary-pill {
+	border-radius: 10rem;
+	padding: .25em .6em;
+}
+.monster-badge-secondary {
+	padding: .25em .4em;
+}
+.monster-badge-secondary,
+.monster-badge-secondary-pill {
+	background-color: var(--monster-bg-color-secondary-3);
+	border-radius: .25rem;
+	color: var(--monster-color-secondary-3);
+	display: inline-block;
+	font-size: 75%;
+	font-weight: 700;
+	line-height: 1;
+	text-align: center;
+	text-decoration: none;
+	vertical-align: baseline;
+	white-space: nowrap;
+}
+.monster-badge-secondary-pill {
+	border-radius: 10rem;
+	padding: .25em .6em;
+}
+.monster-badge-tertiary {
+	padding: .25em .4em;
+}
+.monster-badge-tertiary,
+.monster-badge-tertiary-pill {
+	background-color: var(--monster-bg-color-tertiary-3);
+	border-radius: .25rem;
+	color: var(--monster-color-tertiary-3);
+	display: inline-block;
+	font-size: 75%;
+	font-weight: 700;
+	line-height: 1;
+	text-align: center;
+	text-decoration: none;
+	vertical-align: baseline;
+	white-space: nowrap;
+}
+.monster-badge-tertiary-pill {
+	border-radius: 10rem;
+	padding: .25em .6em;
+}
+.monster-badge-destructive {
+	padding: .25em .4em;
+}
+.monster-badge-destructive,
+.monster-badge-destructive-pill {
+	background-color: var(--monster-bg-color-destructive-1);
+	border-radius: .25rem;
+	color: var(--monster-color-destructive-1);
+	display: inline-block;
+	font-size: 75%;
+	font-weight: 700;
+	line-height: 1;
+	text-align: center;
+	text-decoration: none;
+	vertical-align: baseline;
+	white-space: nowrap;
+}
+.monster-badge-destructive-pill {
+	border-radius: 10rem;
+	padding: .25em .6em;
+}
+.monster-badge-success {
+	padding: .25em .4em;
+}
+.monster-badge-success,
+.monster-badge-success-pill {
+	background-color: var(--monster-bg-color-success-1);
+	border-radius: .25rem;
+	color: var(--monster-color-success-1);
+	display: inline-block;
+	font-size: 75%;
+	font-weight: 700;
+	line-height: 1;
+	text-align: center;
+	text-decoration: none;
+	vertical-align: baseline;
+	white-space: nowrap;
+}
+.monster-badge-success-pill {
+	border-radius: 10rem;
+	padding: .25em .6em;
+}
+.monster-badge-warning {
+	padding: .25em .4em;
+}
+.monster-badge-warning,
+.monster-badge-warning-pill {
+	background-color: var(--monster-bg-color-warning-1);
+	border-radius: .25rem;
+	color: var(--monster-color-warning-1);
+	display: inline-block;
+	font-size: 75%;
+	font-weight: 700;
+	line-height: 1;
+	text-align: center;
+	text-decoration: none;
+	vertical-align: baseline;
+	white-space: nowrap;
+}
+.monster-badge-warning-pill {
+	border-radius: 10rem;
+	padding: .25em .6em;
+}
+.monster-badge-error {
+	padding: .25em .4em;
+}
+.monster-badge-error,
+.monster-badge-error-pill {
+	background-color: var(--monster-bg-color-error-1);
+	border-radius: .25rem;
+	color: var(--monster-color-error-1);
+	display: inline-block;
+	font-size: 75%;
+	font-weight: 700;
+	line-height: 1;
+	text-align: center;
+	text-decoration: none;
+	vertical-align: baseline;
+	white-space: nowrap;
+}
+.monster-badge-error-pill {
+	border-radius: 10rem;
+	padding: .25em .6em;
+}
diff --git a/source/components/style/border.css b/source/components/style/border.css
index 365ff2552c7643c2e19a07d1ca5ff81dba207e8f..7123e37a243cb7907f42088d2ca2f73194fd1c7d 100644
--- a/source/components/style/border.css
+++ b/source/components/style/border.css
@@ -1,2 +1,66 @@
 /** generated from border.pcss **/
-.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-0{border-radius:0;border-style:none;border-width:0}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}
\ No newline at end of file
+.monster-border-primary-1,
+.monster-border-primary-2,
+.monster-border-primary-3,
+.monster-border-primary-4 {
+	border-radius: var(--monster-border-radius);
+	border-style: var(--monster-border-style);
+	border-width: var(--monster-border-width);
+}
+.monster-border-0 {
+	border-radius: 0;
+	border-style: none;
+	border-width: 0;
+}
+.monster-border-primary-1 {
+	border-color: var(--monster-bg-color-primary-1);
+}
+.monster-border-primary-2 {
+	border-color: var(--monster-bg-color-primary-2);
+}
+.monster-border-primary-3 {
+	border-color: var(--monster-bg-color-primary-3);
+}
+.monster-border-primary-4 {
+	border-color: var(--monster-bg-color-primary-4);
+}
+.monster-border-secondary-1,
+.monster-border-secondary-2,
+.monster-border-secondary-3,
+.monster-border-secondary-4 {
+	border-radius: var(--monster-border-radius);
+	border-style: var(--monster-border-style);
+	border-width: var(--monster-border-width);
+}
+.monster-border-secondary-1 {
+	border-color: var(--monster-bg-color-secondary-1);
+}
+.monster-border-secondary-2 {
+	border-color: var(--monster-bg-color-secondary-2);
+}
+.monster-border-secondary-3 {
+	border-color: var(--monster-bg-color-secondary-3);
+}
+.monster-border-secondary-4 {
+	border-color: var(--monster-bg-color-secondary-4);
+}
+.monster-border-tertiary-1,
+.monster-border-tertiary-2,
+.monster-border-tertiary-3,
+.monster-border-tertiary-4 {
+	border-radius: var(--monster-border-radius);
+	border-style: var(--monster-border-style);
+	border-width: var(--monster-border-width);
+}
+.monster-border-tertiary-1 {
+	border-color: var(--monster-bg-color-tertiary-1);
+}
+.monster-border-tertiary-2 {
+	border-color: var(--monster-bg-color-tertiary-2);
+}
+.monster-border-tertiary-3 {
+	border-color: var(--monster-bg-color-tertiary-3);
+}
+.monster-border-tertiary-4 {
+	border-color: var(--monster-bg-color-tertiary-4);
+}
diff --git a/source/components/style/button.css b/source/components/style/button.css
index db000808f249fc6d81485b8ccacb0c3969c56378..d466bd51763358b77ec591abdff03d09ad9472ef 100644
--- a/source/components/style/button.css
+++ b/source/components/style/button.css
@@ -1,2 +1,206 @@
 /** generated from button.pcss **/
-.monster-button-primary,button{align-items:center;background-color:var(--monster-bg-color-primary-1);background-position:50%;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-primary{background-color:var(--monster-bg-color-primary-4);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-button-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-secondary-4)}.monster-button-secondary,.monster-button-tertiary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-tertiary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-tertiary-4);border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-tertiary-4)}.monster-button-outline-primary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-primary-4);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-4)}.monster-button-outline-primary,.monster-button-outline-secondary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-outline-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-secondary-4)}.monster-button-outline-tertiary{align-items:center;background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-tertiary-4);background-position:50%;border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);color:var(--monster-bg-color-tertiary-4);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}button:active,button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}button:active{z-index:var(--monster-z-index-outline)}.monster-button-bar,.monster-button-group{align-content:center;align-items:stretch;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.monster-button-group{box-sizing:border-box;gap:0;margin:1rem 0}.monster-button-group>:not(:last-child){margin-right:calc(var(--monster-border-width)*-1)}.monster-button-group :hover{box-shadow:none}button:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px;z-index:var(--monster-z-index-outline)}@media (prefers-color-scheme:light){button:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px;z-index:var(--monster-z-index-outline)}}
\ No newline at end of file
+.monster-button-primary,
+button {
+	align-items: center;
+	background-color: var(--monster-bg-color-primary-1);
+	background-position: 50%;
+	border-radius: var(--monster-border-radius);
+	border-style: var(--monster-border-style);
+	border-width: var(--monster-border-width);
+	box-shadow: var(--monster-box-shadow-1);
+	color: var(--monster-color-primary-1);
+	cursor: pointer;
+	display: flex;
+	font-family: var(--monster-font-family);
+	font-size: 1rem;
+	font-weight: 400;
+	gap: .4rem;
+	justify-content: center;
+	line-height: 1.5;
+	outline: none;
+	overflow: hidden;
+	padding: .375rem .75rem;
+	position: relative;
+	text-align: center;
+	text-decoration: none;
+	-webkit-user-select: none;
+	-moz-user-select: none;
+	user-select: none;
+	vertical-align: middle;
+	width: -webkit-fill-available;
+	width: -moz-available;
+	width: stretch;
+}
+.monster-button-primary {
+	background-color: var(--monster-bg-color-primary-4);
+	border-color: var(--monster-bg-color-primary-4);
+	color: var(--monster-color-primary-4);
+}
+.monster-button-secondary {
+	background-color: var(--monster-bg-color-primary-1);
+	background-color: var(--monster-bg-color-secondary-4);
+	border-color: var(--monster-bg-color-secondary-4);
+	border-radius: var(--monster-border-radius);
+	border-style: var(--monster-border-style);
+	border-width: var(--monster-border-width);
+	color: var(--monster-color-primary-1);
+	color: var(--monster-color-secondary-4);
+}
+.monster-button-secondary,
+.monster-button-tertiary {
+	align-items: center;
+	background-position: 50%;
+	box-shadow: var(--monster-box-shadow-1);
+	cursor: pointer;
+	display: flex;
+	font-family: var(--monster-font-family);
+	font-size: 1rem;
+	font-weight: 400;
+	gap: .4rem;
+	justify-content: center;
+	line-height: 1.5;
+	outline: none;
+	overflow: hidden;
+	padding: .375rem .75rem;
+	position: relative;
+	text-align: center;
+	text-decoration: none;
+	-webkit-user-select: none;
+	-moz-user-select: none;
+	user-select: none;
+	vertical-align: middle;
+	width: -webkit-fill-available;
+	width: -moz-available;
+	width: stretch;
+}
+.monster-button-tertiary {
+	background-color: var(--monster-bg-color-primary-1);
+	background-color: var(--monster-bg-color-tertiary-4);
+	border-color: var(--monster-bg-color-tertiary-4);
+	border-radius: var(--monster-border-radius);
+	border-style: var(--monster-border-style);
+	border-width: var(--monster-border-width);
+	color: var(--monster-color-primary-1);
+	color: var(--monster-color-tertiary-4);
+}
+.monster-button-outline-primary {
+	background-color: var(--monster-bg-color-primary-1);
+	background-color: var(--monster-color-primary-4);
+	border-color: var(--monster-bg-color-primary-4);
+	border-radius: var(--monster-border-radius);
+	border-style: var(--monster-border-style);
+	border-width: var(--monster-border-width);
+	color: var(--monster-color-primary-1);
+	color: var(--monster-bg-color-primary-4);
+}
+.monster-button-outline-primary,
+.monster-button-outline-secondary {
+	align-items: center;
+	background-position: 50%;
+	box-shadow: var(--monster-box-shadow-1);
+	cursor: pointer;
+	display: flex;
+	font-family: var(--monster-font-family);
+	font-size: 1rem;
+	font-weight: 400;
+	gap: .4rem;
+	justify-content: center;
+	line-height: 1.5;
+	outline: none;
+	overflow: hidden;
+	padding: .375rem .75rem;
+	position: relative;
+	text-align: center;
+	text-decoration: none;
+	-webkit-user-select: none;
+	-moz-user-select: none;
+	user-select: none;
+	vertical-align: middle;
+	width: -webkit-fill-available;
+	width: -moz-available;
+	width: stretch;
+}
+.monster-button-outline-secondary {
+	background-color: var(--monster-bg-color-primary-1);
+	background-color: var(--monster-color-secondary-4);
+	border-color: var(--monster-bg-color-secondary-4);
+	border-radius: var(--monster-border-radius);
+	border-style: var(--monster-border-style);
+	border-width: var(--monster-border-width);
+	color: var(--monster-color-primary-1);
+	color: var(--monster-bg-color-secondary-4);
+}
+.monster-button-outline-tertiary {
+	align-items: center;
+	background-color: var(--monster-bg-color-primary-1);
+	background-color: var(--monster-color-tertiary-4);
+	background-position: 50%;
+	border-color: var(--monster-bg-color-tertiary-4);
+	border-radius: var(--monster-border-radius);
+	border-style: var(--monster-border-style);
+	border-width: var(--monster-border-width);
+	box-shadow: var(--monster-box-shadow-1);
+	color: var(--monster-color-primary-1);
+	color: var(--monster-bg-color-tertiary-4);
+	cursor: pointer;
+	display: flex;
+	font-family: var(--monster-font-family);
+	font-size: 1rem;
+	font-weight: 400;
+	gap: .4rem;
+	justify-content: center;
+	line-height: 1.5;
+	outline: none;
+	overflow: hidden;
+	padding: .375rem .75rem;
+	position: relative;
+	text-align: center;
+	text-decoration: none;
+	-webkit-user-select: none;
+	-moz-user-select: none;
+	user-select: none;
+	vertical-align: middle;
+	width: -webkit-fill-available;
+	width: -moz-available;
+	width: stretch;
+}
+button:active,
+button:hover {
+	box-shadow: var(--monster-box-shadow-2);
+	transition: background .8s, color .25s .0833333333s;
+}
+button:active {
+	z-index: var(--monster-z-index-outline);
+}
+.monster-button-bar,
+.monster-button-group {
+	align-content: center;
+	align-items: stretch;
+	display: flex;
+	flex-direction: row;
+	flex-wrap: nowrap;
+	justify-content: space-between;
+}
+.monster-button-group {
+	box-sizing: border-box;
+	gap: 0;
+	margin: 1rem 0;
+}
+.monster-button-group > :not(:last-child) {
+	margin-right: calc(var(--monster-border-width) * -1);
+}
+.monster-button-group :hover {
+	box-shadow: none;
+}
+button:focus {
+	outline: 1px dashed var(--monster-color-selection-4);
+	outline-offset: 2px;
+	z-index: var(--monster-z-index-outline);
+}
+@media (prefers-color-scheme: light) {
+	button:focus {
+		outline: 1px dashed var(--monster-color-selection-3);
+		outline-offset: 2px;
+		z-index: var(--monster-z-index-outline);
+	}
+}
diff --git a/source/components/style/card.css b/source/components/style/card.css
index a04ed62ee6f01ed8bdb3b76de3da145d0f0a6b21..ca4d2faec5e5d3bcfe037f0d6527c60b885b17af 100644
--- a/source/components/style/card.css
+++ b/source/components/style/card.css
@@ -1,2 +1,150 @@
 /** generated from card.pcss **/
-.cards{display:grid;grid-template-columns:repeat(4,1fr);grid-gap:22px}.cards .card{align-content:stretch;align-items:stretch;background-color:var(--monster-bg-color-primary-1);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-sizing:border-box;color:var(--monster-color-primary-1);display:flex;flex-direction:column;flex-wrap:nowrap;justify-content:space-between;border-shadow:var(--monster-box-shadow-1);overflow:hidden}:is(.cards .card) img{display:block;margin-left:0;-o-object-fit:scale-down;object-fit:scale-down;overflow:hidden;padding:0;width:101%}:is(:is(.cards .card) img):hover{box-shadow:var(--monster-box-shadow-2);transform:scale(1.05);transition:background .8s,color .25s .0833333333s}:is(.cards .card) h1,:is(.cards .card) h2,:is(.cards .card) h3,:is(.cards .card) h4,:is(.cards .card) h5,:is(.cards .card) h6,:is(.cards .card) p{margin:0;padding-left:1rem;padding-right:1rem}:is(.cards .card) h1:last-child,:is(.cards .card) h2:last-child,:is(.cards .card) h3:last-child,:is(.cards .card) h4:last-child,:is(.cards .card) h5:last-child,:is(.cards .card) h6:last-child,:is(.cards .card) p:last-child{padding-bottom:1rem}:is(.cards .card) h1:first-child,:is(.cards .card) h2:first-child,:is(.cards .card) h3:first-child,:is(.cards .card) h4:first-child,:is(.cards .card) h5:first-child,:is(.cards .card) h6:first-child,:is(.cards .card) p:first-child{padding-top:1rem}:is(.cards .card) img+h1,:is(.cards .card) img+h2,:is(.cards .card) img+h3,:is(.cards .card) img+h4,:is(.cards .card) img+h5,:is(.cards .card) img+h6,:is(.cards .card) img+p{padding-top:1rem}:is(.cards .card) h1+img,:is(.cards .card) h2+img,:is(.cards .card) h3+img,:is(.cards .card) h4+img,:is(.cards .card) h5+img,:is(.cards .card) h6+img,:is(.cards .card) p+img{padding-bottom:1rem}:is(.cards .card) h1+p,:is(.cards .card) h2+p,:is(.cards .card) h3+p,:is(.cards .card) h4+p,:is(.cards .card) h5+p,:is(.cards .card) h6+p,:is(.cards .card) p+p{padding-top:1rem}:is(.cards .card) .button+h1,:is(.cards .card) .button+h2,:is(.cards .card) .button+h3,:is(.cards .card) .button+h4,:is(.cards .card) .button+h5,:is(.cards .card) .button+h6,:is(.cards .card) .button+p,:is(.cards .card) button+h1,:is(.cards .card) button+h2,:is(.cards .card) button+h3,:is(.cards .card) button+h4,:is(.cards .card) button+h5,:is(.cards .card) button+h6,:is(.cards .card) button+p{padding-bottom:1rem}:is(.cards .card) h1+.button,:is(.cards .card) h1+button,:is(.cards .card) h2+.button,:is(.cards .card) h2+button,:is(.cards .card) h3+.button,:is(.cards .card) h3+button,:is(.cards .card) h4+.button,:is(.cards .card) h4+button,:is(.cards .card) h5+.button,:is(.cards .card) h5+button,:is(.cards .card) h6+.button,:is(.cards .card) h6+button,:is(.cards .card) p+.button,:is(.cards .card) p+button{margin-top:1rem}:is(.cards .card) .button,:is(.cards .card) button{border-left:none;border-right:none}:is(.cards .card) .button:first-child,:is(.cards .card) button:first-child{border-top:none}:is(.cards .card) .button:last-child,:is(.cards .card) button:last-child{border-bottom:none}:is(:is(.cards .card) button:last-child,:is(.cards .card) .button:last-child):hover{box-shadow:var(--monster-box-shadow-2);transform:scale(1.05);transition:background .8s,color .25s .0833333333s}.card:is(.cards .card):hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s;z-index:var(--monster-z-index-outline)}
\ No newline at end of file
+.cards {
+	display: grid;
+	grid-template-columns: repeat(4, 1fr);
+	grid-gap: 22px;
+}
+.cards .card {
+	align-content: stretch;
+	align-items: stretch;
+	background-color: var(--monster-bg-color-primary-1);
+	border-radius: var(--monster-border-radius);
+	border-style: var(--monster-border-style);
+	border-width: var(--monster-border-width);
+	box-sizing: border-box;
+	color: var(--monster-color-primary-1);
+	display: flex;
+	flex-direction: column;
+	flex-wrap: nowrap;
+	justify-content: space-between;
+	border-shadow: var(--monster-box-shadow-1);
+	overflow: hidden;
+}
+:is(.cards .card) img {
+	display: block;
+	margin-left: 0;
+	-o-object-fit: scale-down;
+	object-fit: scale-down;
+	overflow: hidden;
+	padding: 0;
+	width: 101%;
+}
+:is(:is(.cards .card) img):hover {
+	box-shadow: var(--monster-box-shadow-2);
+	transform: scale(1.05);
+	transition: background .8s, color .25s .0833333333s;
+}
+:is(.cards .card) h1,
+:is(.cards .card) h2,
+:is(.cards .card) h3,
+:is(.cards .card) h4,
+:is(.cards .card) h5,
+:is(.cards .card) h6,
+:is(.cards .card) p {
+	margin: 0;
+	padding-left: 1rem;
+	padding-right: 1rem;
+}
+:is(.cards .card) h1:last-child,
+:is(.cards .card) h2:last-child,
+:is(.cards .card) h3:last-child,
+:is(.cards .card) h4:last-child,
+:is(.cards .card) h5:last-child,
+:is(.cards .card) h6:last-child,
+:is(.cards .card) p:last-child {
+	padding-bottom: 1rem;
+}
+:is(.cards .card) h1:first-child,
+:is(.cards .card) h2:first-child,
+:is(.cards .card) h3:first-child,
+:is(.cards .card) h4:first-child,
+:is(.cards .card) h5:first-child,
+:is(.cards .card) h6:first-child,
+:is(.cards .card) p:first-child {
+	padding-top: 1rem;
+}
+:is(.cards .card) img + h1,
+:is(.cards .card) img + h2,
+:is(.cards .card) img + h3,
+:is(.cards .card) img + h4,
+:is(.cards .card) img + h5,
+:is(.cards .card) img + h6,
+:is(.cards .card) img + p {
+	padding-top: 1rem;
+}
+:is(.cards .card) h1 + img,
+:is(.cards .card) h2 + img,
+:is(.cards .card) h3 + img,
+:is(.cards .card) h4 + img,
+:is(.cards .card) h5 + img,
+:is(.cards .card) h6 + img,
+:is(.cards .card) p + img {
+	padding-bottom: 1rem;
+}
+:is(.cards .card) h1 + p,
+:is(.cards .card) h2 + p,
+:is(.cards .card) h3 + p,
+:is(.cards .card) h4 + p,
+:is(.cards .card) h5 + p,
+:is(.cards .card) h6 + p,
+:is(.cards .card) p + p {
+	padding-top: 1rem;
+}
+:is(.cards .card) .button + h1,
+:is(.cards .card) .button + h2,
+:is(.cards .card) .button + h3,
+:is(.cards .card) .button + h4,
+:is(.cards .card) .button + h5,
+:is(.cards .card) .button + h6,
+:is(.cards .card) .button + p,
+:is(.cards .card) button + h1,
+:is(.cards .card) button + h2,
+:is(.cards .card) button + h3,
+:is(.cards .card) button + h4,
+:is(.cards .card) button + h5,
+:is(.cards .card) button + h6,
+:is(.cards .card) button + p {
+	padding-bottom: 1rem;
+}
+:is(.cards .card) h1 + .button,
+:is(.cards .card) h1 + button,
+:is(.cards .card) h2 + .button,
+:is(.cards .card) h2 + button,
+:is(.cards .card) h3 + .button,
+:is(.cards .card) h3 + button,
+:is(.cards .card) h4 + .button,
+:is(.cards .card) h4 + button,
+:is(.cards .card) h5 + .button,
+:is(.cards .card) h5 + button,
+:is(.cards .card) h6 + .button,
+:is(.cards .card) h6 + button,
+:is(.cards .card) p + .button,
+:is(.cards .card) p + button {
+	margin-top: 1rem;
+}
+:is(.cards .card) .button,
+:is(.cards .card) button {
+	border-left: none;
+	border-right: none;
+}
+:is(.cards .card) .button:first-child,
+:is(.cards .card) button:first-child {
+	border-top: none;
+}
+:is(.cards .card) .button:last-child,
+:is(.cards .card) button:last-child {
+	border-bottom: none;
+}
+:is(
+		:is(.cards .card) button:last-child,
+		:is(.cards .card) .button:last-child
+	):hover {
+	box-shadow: var(--monster-box-shadow-2);
+	transform: scale(1.05);
+	transition: background .8s, color .25s .0833333333s;
+}
+.card:is(.cards .card):hover {
+	box-shadow: var(--monster-box-shadow-2);
+	transition: background .8s, color .25s .0833333333s;
+	z-index: var(--monster-z-index-outline);
+}
diff --git a/source/components/style/color.css b/source/components/style/color.css
index 618678c5f52f6cd5f09edfcca4cb7fb7745d295d..991f4d5b06009dcd4b8d3ff1421b07fe52ca07e5 100644
--- a/source/components/style/color.css
+++ b/source/components/style/color.css
@@ -1,2 +1,167 @@
 /** generated from color.pcss **/
-:after,:before,:root{--monster-color-gray-1:#f6f6f6;--monster-color-gray-2:#e2e2e2;--monster-color-gray-3:#8b8b8b;--monster-color-gray-4:#6f6f6f;--monster-color-gray-5:#3e3e3e;--monster-color-gray-6:#222;--monster-color-rose-1:#fff7f9;--monster-color-rose-2:#ffdce5;--monster-color-rose-3:#ff3b8d;--monster-color-rose-4:#db0072;--monster-color-rose-5:#800040;--monster-color-rose-6:#4c0023;--monster-color-raspberry-1:#fff8f8;--monster-color-raspberry-2:#ffdddf;--monster-color-raspberry-3:#ff426c;--monster-color-raspberry-4:#de0051;--monster-color-raspberry-5:#82002c;--monster-color-raspberry-6:#510018;--monster-color-red-1:#fff8f6;--monster-color-red-2:#ffddd8;--monster-color-red-3:#ff4647;--monster-color-red-4:#e0002b;--monster-color-red-5:#830014;--monster-color-red-6:#530003;--monster-color-orange-1:#fff8f5;--monster-color-orange-2:#ffded1;--monster-color-orange-3:#fd4d00;--monster-color-orange-4:#cd3c00;--monster-color-orange-5:#752100;--monster-color-orange-6:#401600;--monster-color-cinnamon-1:#fff8f3;--monster-color-cinnamon-2:#ffdfc6;--monster-color-cinnamon-3:#d57300;--monster-color-cinnamon-4:#ac5c00;--monster-color-cinnamon-5:#633300;--monster-color-cinnamon-6:#371d00;--monster-color-amber-1:#fff8ef;--monster-color-amber-2:#ffe0b2;--monster-color-amber-3:#b98300;--monster-color-amber-4:#926700;--monster-color-amber-5:#523800;--monster-color-amber-6:#302100;--monster-color-yellow-1:#fff9e5;--monster-color-yellow-2:#ffe53e;--monster-color-yellow-3:#9c8b00;--monster-color-yellow-4:#7d6f00;--monster-color-yellow-5:#463d00;--monster-color-yellow-6:#292300;--monster-color-lime-1:#f7ffac;--monster-color-lime-2:#d5f200;--monster-color-lime-3:#819300;--monster-color-lime-4:#677600;--monster-color-lime-5:#394100;--monster-color-lime-6:#222600;--monster-color-chartreuse-1:#e5ffc3;--monster-color-chartreuse-2:#98fb00;--monster-color-chartreuse-3:#5c9b00;--monster-color-chartreuse-4:#497c00;--monster-color-chartreuse-5:#264500;--monster-color-chartreuse-6:#182600;--monster-color-green-1:#e0ffd9;--monster-color-green-2:#72ff6c;--monster-color-green-3:#00a21f;--monster-color-green-4:#008217;--monster-color-green-5:#004908;--monster-color-green-6:#062800;--monster-color-emerald-1:#dcffe6;--monster-color-emerald-2:#5dffa2;--monster-color-emerald-3:#00a05a;--monster-color-emerald-4:#008147;--monster-color-emerald-5:#004825;--monster-color-emerald-6:#002812;--monster-color-aquamarine-1:#daffef;--monster-color-aquamarine-2:#42ffc6;--monster-color-aquamarine-3:#009f78;--monster-color-aquamarine-4:#007f5f;--monster-color-aquamarine-5:#004734;--monster-color-aquamarine-6:#00281b;--monster-color-teal-1:#d7fff7;--monster-color-teal-2:#00ffe4;--monster-color-teal-3:#009e8c;--monster-color-teal-4:#007c6e;--monster-color-teal-5:#00443c;--monster-color-teal-6:#002722;--monster-color-cyan-1:#c4fffe;--monster-color-cyan-2:#00fafb;--monster-color-cyan-3:#00999a;--monster-color-cyan-4:#007a7b;--monster-color-cyan-5:#004344;--monster-color-cyan-6:#002525;--monster-color-powder-1:#dafaff;--monster-color-powder-2:#8df0ff;--monster-color-powder-3:#0098a9;--monster-color-powder-4:#007987;--monster-color-powder-5:#004048;--monster-color-powder-6:#002227;--monster-color-sky-1:#e3f7ff;--monster-color-sky-2:#aee9ff;--monster-color-sky-3:#0094b4;--monster-color-sky-4:#007590;--monster-color-sky-5:#00404f;--monster-color-sky-6:#001f28;--monster-color-cerulean-1:#e8f6ff;--monster-color-cerulean-2:#b9e3ff;--monster-color-cerulean-3:#0092c5;--monster-color-cerulean-4:#00749d;--monster-color-cerulean-5:#003c54;--monster-color-cerulean-6:#001d2a;--monster-color-azure-1:#e8f2ff;--monster-color-azure-2:#c6e0ff;--monster-color-azure-3:#008fdb;--monster-color-azure-4:#0071af;--monster-color-azure-5:#003b5e;--monster-color-azure-6:#001c30;--monster-color-blue-1:#f0f4ff;--monster-color-blue-2:#d4e0ff;--monster-color-blue-3:#0089fc;--monster-color-blue-4:#006dca;--monster-color-blue-5:#00386d;--monster-color-blue-6:#001a39;--monster-color-indigo-1:#f3f3ff;--monster-color-indigo-2:#deddff;--monster-color-indigo-3:#657eff;--monster-color-indigo-4:#0061fc;--monster-color-indigo-5:#00328a;--monster-color-indigo-6:#001649;--monster-color-violet-1:#f7f1ff;--monster-color-violet-2:#e8daff;--monster-color-violet-3:#9b70ff;--monster-color-violet-4:#794aff;--monster-color-violet-5:#2d0fbf;--monster-color-violet-6:#0b0074;--monster-color-purple-1:#fdf4ff;--monster-color-purple-2:#f7d9ff;--monster-color-purple-3:#d150ff;--monster-color-purple-4:#b01fe3;--monster-color-purple-5:#660087;--monster-color-purple-6:#3a004f;--monster-color-magenta-1:#fff3fc;--monster-color-magenta-2:#ffd7f6;--monster-color-magenta-3:#f911e0;--monster-color-magenta-4:#ca00b6;--monster-color-magenta-5:#740068;--monster-color-magenta-6:#44003c;--monster-color-pink-1:#fff7fb;--monster-color-pink-2:#ffdcec;--monster-color-pink-3:#ff2fb2;--monster-color-pink-4:#d2008f;--monster-color-pink-5:#790051;--monster-color-pink-6:#4b0030;--monster-gradient-tangerine-1:#e5b875;--monster-gradient-tangerine-2:#d9a362;--monster-gradient-tangerine-3:#c08a4e;--monster-gradient-tangerine-4:#a7713b;--monster-gradient-tangerine-5:#8f5a28;--monster-gradient-tangerine-6:#360505;--monster-color-seashell-1:#f7f5ef;--monster-color-seashell-2:#e5e2d9;--monster-color-seashell-3:#cbc6b3;--monster-color-seashell-4:#a19d8a;--monster-color-seashell-5:#7a7566;--monster-color-seashell-6:#514d3f}
\ No newline at end of file
+:after,
+:before,
+:root {
+	--monster-color-gray-1: #f6f6f6;
+	--monster-color-gray-2: #e2e2e2;
+	--monster-color-gray-3: #8b8b8b;
+	--monster-color-gray-4: #6f6f6f;
+	--monster-color-gray-5: #3e3e3e;
+	--monster-color-gray-6: #222;
+	--monster-color-rose-1: #fff7f9;
+	--monster-color-rose-2: #ffdce5;
+	--monster-color-rose-3: #ff3b8d;
+	--monster-color-rose-4: #db0072;
+	--monster-color-rose-5: #800040;
+	--monster-color-rose-6: #4c0023;
+	--monster-color-raspberry-1: #fff8f8;
+	--monster-color-raspberry-2: #ffdddf;
+	--monster-color-raspberry-3: #ff426c;
+	--monster-color-raspberry-4: #de0051;
+	--monster-color-raspberry-5: #82002c;
+	--monster-color-raspberry-6: #510018;
+	--monster-color-red-1: #fff8f6;
+	--monster-color-red-2: #ffddd8;
+	--monster-color-red-3: #ff4647;
+	--monster-color-red-4: #e0002b;
+	--monster-color-red-5: #830014;
+	--monster-color-red-6: #530003;
+	--monster-color-orange-1: #fff8f5;
+	--monster-color-orange-2: #ffded1;
+	--monster-color-orange-3: #fd4d00;
+	--monster-color-orange-4: #cd3c00;
+	--monster-color-orange-5: #752100;
+	--monster-color-orange-6: #401600;
+	--monster-color-cinnamon-1: #fff8f3;
+	--monster-color-cinnamon-2: #ffdfc6;
+	--monster-color-cinnamon-3: #d57300;
+	--monster-color-cinnamon-4: #ac5c00;
+	--monster-color-cinnamon-5: #633300;
+	--monster-color-cinnamon-6: #371d00;
+	--monster-color-amber-1: #fff8ef;
+	--monster-color-amber-2: #ffe0b2;
+	--monster-color-amber-3: #b98300;
+	--monster-color-amber-4: #926700;
+	--monster-color-amber-5: #523800;
+	--monster-color-amber-6: #302100;
+	--monster-color-yellow-1: #fff9e5;
+	--monster-color-yellow-2: #ffe53e;
+	--monster-color-yellow-3: #9c8b00;
+	--monster-color-yellow-4: #7d6f00;
+	--monster-color-yellow-5: #463d00;
+	--monster-color-yellow-6: #292300;
+	--monster-color-lime-1: #f7ffac;
+	--monster-color-lime-2: #d5f200;
+	--monster-color-lime-3: #819300;
+	--monster-color-lime-4: #677600;
+	--monster-color-lime-5: #394100;
+	--monster-color-lime-6: #222600;
+	--monster-color-chartreuse-1: #e5ffc3;
+	--monster-color-chartreuse-2: #98fb00;
+	--monster-color-chartreuse-3: #5c9b00;
+	--monster-color-chartreuse-4: #497c00;
+	--monster-color-chartreuse-5: #264500;
+	--monster-color-chartreuse-6: #182600;
+	--monster-color-green-1: #e0ffd9;
+	--monster-color-green-2: #72ff6c;
+	--monster-color-green-3: #00a21f;
+	--monster-color-green-4: #008217;
+	--monster-color-green-5: #004908;
+	--monster-color-green-6: #062800;
+	--monster-color-emerald-1: #dcffe6;
+	--monster-color-emerald-2: #5dffa2;
+	--monster-color-emerald-3: #00a05a;
+	--monster-color-emerald-4: #008147;
+	--monster-color-emerald-5: #004825;
+	--monster-color-emerald-6: #002812;
+	--monster-color-aquamarine-1: #daffef;
+	--monster-color-aquamarine-2: #42ffc6;
+	--monster-color-aquamarine-3: #009f78;
+	--monster-color-aquamarine-4: #007f5f;
+	--monster-color-aquamarine-5: #004734;
+	--monster-color-aquamarine-6: #00281b;
+	--monster-color-teal-1: #d7fff7;
+	--monster-color-teal-2: #00ffe4;
+	--monster-color-teal-3: #009e8c;
+	--monster-color-teal-4: #007c6e;
+	--monster-color-teal-5: #00443c;
+	--monster-color-teal-6: #002722;
+	--monster-color-cyan-1: #c4fffe;
+	--monster-color-cyan-2: #00fafb;
+	--monster-color-cyan-3: #00999a;
+	--monster-color-cyan-4: #007a7b;
+	--monster-color-cyan-5: #004344;
+	--monster-color-cyan-6: #002525;
+	--monster-color-powder-1: #dafaff;
+	--monster-color-powder-2: #8df0ff;
+	--monster-color-powder-3: #0098a9;
+	--monster-color-powder-4: #007987;
+	--monster-color-powder-5: #004048;
+	--monster-color-powder-6: #002227;
+	--monster-color-sky-1: #e3f7ff;
+	--monster-color-sky-2: #aee9ff;
+	--monster-color-sky-3: #0094b4;
+	--monster-color-sky-4: #007590;
+	--monster-color-sky-5: #00404f;
+	--monster-color-sky-6: #001f28;
+	--monster-color-cerulean-1: #e8f6ff;
+	--monster-color-cerulean-2: #b9e3ff;
+	--monster-color-cerulean-3: #0092c5;
+	--monster-color-cerulean-4: #00749d;
+	--monster-color-cerulean-5: #003c54;
+	--monster-color-cerulean-6: #001d2a;
+	--monster-color-azure-1: #e8f2ff;
+	--monster-color-azure-2: #c6e0ff;
+	--monster-color-azure-3: #008fdb;
+	--monster-color-azure-4: #0071af;
+	--monster-color-azure-5: #003b5e;
+	--monster-color-azure-6: #001c30;
+	--monster-color-blue-1: #f0f4ff;
+	--monster-color-blue-2: #d4e0ff;
+	--monster-color-blue-3: #0089fc;
+	--monster-color-blue-4: #006dca;
+	--monster-color-blue-5: #00386d;
+	--monster-color-blue-6: #001a39;
+	--monster-color-indigo-1: #f3f3ff;
+	--monster-color-indigo-2: #deddff;
+	--monster-color-indigo-3: #657eff;
+	--monster-color-indigo-4: #0061fc;
+	--monster-color-indigo-5: #00328a;
+	--monster-color-indigo-6: #001649;
+	--monster-color-violet-1: #f7f1ff;
+	--monster-color-violet-2: #e8daff;
+	--monster-color-violet-3: #9b70ff;
+	--monster-color-violet-4: #794aff;
+	--monster-color-violet-5: #2d0fbf;
+	--monster-color-violet-6: #0b0074;
+	--monster-color-purple-1: #fdf4ff;
+	--monster-color-purple-2: #f7d9ff;
+	--monster-color-purple-3: #d150ff;
+	--monster-color-purple-4: #b01fe3;
+	--monster-color-purple-5: #660087;
+	--monster-color-purple-6: #3a004f;
+	--monster-color-magenta-1: #fff3fc;
+	--monster-color-magenta-2: #ffd7f6;
+	--monster-color-magenta-3: #f911e0;
+	--monster-color-magenta-4: #ca00b6;
+	--monster-color-magenta-5: #740068;
+	--monster-color-magenta-6: #44003c;
+	--monster-color-pink-1: #fff7fb;
+	--monster-color-pink-2: #ffdcec;
+	--monster-color-pink-3: #ff2fb2;
+	--monster-color-pink-4: #d2008f;
+	--monster-color-pink-5: #790051;
+	--monster-color-pink-6: #4b0030;
+	--monster-gradient-tangerine-1: #e5b875;
+	--monster-gradient-tangerine-2: #d9a362;
+	--monster-gradient-tangerine-3: #c08a4e;
+	--monster-gradient-tangerine-4: #a7713b;
+	--monster-gradient-tangerine-5: #8f5a28;
+	--monster-gradient-tangerine-6: #360505;
+	--monster-color-seashell-1: #f7f5ef;
+	--monster-color-seashell-2: #e5e2d9;
+	--monster-color-seashell-3: #cbc6b3;
+	--monster-color-seashell-4: #a19d8a;
+	--monster-color-seashell-5: #7a7566;
+	--monster-color-seashell-6: #514d3f;
+}
diff --git a/source/components/style/common.css b/source/components/style/common.css
index 24518f3c2cb12b8aeb7a34b1513e0c350601c01b..0309850d0d9f6efba2e4684064ce1a9de59b27e7 100644
--- a/source/components/style/common.css
+++ b/source/components/style/common.css
@@ -1,2 +1,160 @@
 /** generated from common.pcss **/
-a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{border:0;font-size:100%;font:inherit;margin:0;padding:0;vertical-align:baseline}*{box-sizing:border-box;font-family:var(--monster-font-family,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif)}.visible{tvisibility:visible!important}.invisible{visibility:hidden!important}.hidden{display:none!important}.inline{display:inline!important}.block{display:block!important}.flex{display:flex!important}[data-monster-role=control]{outline:none}div[data-monster-role=popper]{background-color:#fff;border:var(--monster-border-width,1px) solid var(--monster-color-primary-1);box-sizing:border-box;display:none;padding:0;z-index:10}:host([disabled]){background-color:var(--monster-bg-color-primary-disabled-1);border-color:var(--monster-color-primary-disabled-1,hsla(0,0%,46%,.3));color:var(--monster-color-primary-disabled-1)}:host([disabled]) *{background-color:var(--monster-bg-color-primary-disabled-1);border-color:var(--monster-color-primary-disabled-1,hsla(0,0%,46%,.3));color:var(--monster-color-primary-disabled-1)}:disabled{background-color:var(--monster-bg-color-primary-disabled-1);border-color:var(--monster-color-primary-disabled-1,hsla(0,0%,46%,.3));color:var(--monster-color-primary-disabled-1);cursor:not-allowed;opacity:.55;pointer-events:none}input:focus-visible{outline:none}body:focus-visible{outline:none}:focus-visible{outline:none}
\ No newline at end of file
+a,
+abbr,
+acronym,
+address,
+applet,
+article,
+aside,
+audio,
+b,
+big,
+blockquote,
+body,
+canvas,
+caption,
+center,
+cite,
+code,
+dd,
+del,
+details,
+dfn,
+div,
+dl,
+dt,
+em,
+embed,
+fieldset,
+figcaption,
+figure,
+footer,
+form,
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+header,
+hgroup,
+html,
+i,
+iframe,
+img,
+ins,
+kbd,
+label,
+legend,
+li,
+mark,
+menu,
+nav,
+object,
+ol,
+output,
+p,
+pre,
+q,
+ruby,
+s,
+samp,
+section,
+small,
+span,
+strike,
+strong,
+sub,
+summary,
+sup,
+table,
+tbody,
+td,
+tfoot,
+th,
+thead,
+time,
+tr,
+tt,
+u,
+ul,
+var,
+video {
+	border: 0;
+	font-size: 100%;
+	font: inherit;
+	margin: 0;
+	padding: 0;
+	vertical-align: baseline;
+}
+* {
+	box-sizing: border-box;
+	font-family: var(
+		--monster-font-family,
+		-apple-system,
+		BlinkMacSystemFont,
+		"Segoe UI",
+		Roboto,
+		Oxygen-Sans,
+		Ubuntu,
+		Cantarell,
+		"Helvetica Neue",
+		sans-serif
+	);
+}
+.visible {
+	tvisibility: visible !important;
+}
+.invisible {
+	visibility: hidden !important;
+}
+.hidden {
+	display: none !important;
+}
+.inline {
+	display: inline !important;
+}
+.block {
+	display: block !important;
+}
+.flex {
+	display: flex !important;
+}
+[data-monster-role="control"] {
+	outline: none;
+}
+div[data-monster-role="popper"] {
+	background-color: #fff;
+	border: var(--monster-border-width, 1px) solid var(--monster-color-primary-1);
+	box-sizing: border-box;
+	display: none;
+	padding: 0;
+	z-index: 10;
+}
+:host([disabled]) {
+	background-color: var(--monster-bg-color-primary-disabled-1);
+	border-color: var(--monster-color-primary-disabled-1, hsla(0, 0%, 46%, 0.3));
+	color: var(--monster-color-primary-disabled-1);
+}
+:host([disabled]) * {
+	background-color: var(--monster-bg-color-primary-disabled-1);
+	border-color: var(--monster-color-primary-disabled-1, hsla(0, 0%, 46%, 0.3));
+	color: var(--monster-color-primary-disabled-1);
+}
+:disabled {
+	background-color: var(--monster-bg-color-primary-disabled-1);
+	border-color: var(--monster-color-primary-disabled-1, hsla(0, 0%, 46%, 0.3));
+	color: var(--monster-color-primary-disabled-1);
+	cursor: not-allowed;
+	opacity: 0.55;
+	pointer-events: none;
+}
+input:focus-visible {
+	outline: none;
+}
+body:focus-visible {
+	outline: none;
+}
+:focus-visible {
+	outline: none;
+}
diff --git a/source/components/style/control.css b/source/components/style/control.css
index ead490e94162d63f1d40b3c265010ebb6ac969cb..db8f9c76fac8d3592b0427d2d50c8bd2b857bd23 100644
--- a/source/components/style/control.css
+++ b/source/components/style/control.css
@@ -1,2 +1,15 @@
 /** generated from control.pcss **/
-[data-monster-role=control]{box-sizing:border-box;outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:host{box-sizing:border-box;display:block}
\ No newline at end of file
+[data-monster-role="control"] {
+	box-sizing: border-box;
+	outline: none;
+	width: 100%;
+}
+[data-monster-role="control"].flex {
+	align-items: center;
+	display: flex;
+	flex-direction: row;
+}
+:host {
+	box-sizing: border-box;
+	display: block;
+}
diff --git a/source/components/style/data-grid.css b/source/components/style/data-grid.css
index ae4815d73d368e795340b31a170aef605b75e26c..7ec94ae3642d97e6e84c17fae495abbc82328893 100644
--- a/source/components/style/data-grid.css
+++ b/source/components/style/data-grid.css
@@ -1,2 +1,448 @@
 /** generated from data-grid.pcss **/
-.monster-data-grid-container{background-color:var(--monster-bg-color-primary-2);box-sizing:border-box;color:var(--monster-color-primary-2);display:block;overflow-x:auto;padding:20px;width:100%}.monster-data-grid-container>div{display:grid}.monster-data-grid-container .col-1{grid-column:1}.monster-data-grid-container .col-1,.monster-data-grid-container .col-2{background-color:var(--monster-bg-color-primary-1);border:none;color:var(--monster-color-primary-1);display:flex;font-size:1rem;font-weight:400;line-height:1.6;padding:.4rem}.monster-data-grid-container .col-2{grid-column:2}.monster-data-grid-container .col-3{grid-column:3}.monster-data-grid-container .col-3,.monster-data-grid-container .col-4{background-color:var(--monster-bg-color-primary-1);border:none;color:var(--monster-color-primary-1);display:flex;font-size:1rem;font-weight:400;line-height:1.6;padding:.4rem}.monster-data-grid-container .col-4{grid-column:4}.monster-data-grid-container .col-5{grid-column:5}.monster-data-grid-container .col-5,.monster-data-grid-container .col-6{background-color:var(--monster-bg-color-primary-1);border:none;color:var(--monster-color-primary-1);display:flex;font-size:1rem;font-weight:400;line-height:1.6;padding:.4rem}.monster-data-grid-container .col-6{grid-column:6}.monster-data-grid-container .col-7{grid-column:7}.monster-data-grid-container .col-7,.monster-data-grid-container .col-8{background-color:var(--monster-bg-color-primary-1);border:none;color:var(--monster-color-primary-1);display:flex;font-size:1rem;font-weight:400;line-height:1.6;padding:.4rem}.monster-data-grid-container .col-8{grid-column:8}.monster-data-grid-container .col-9{grid-column:9}.monster-data-grid-container .col-10,.monster-data-grid-container .col-9{background-color:var(--monster-bg-color-primary-1);border:none;color:var(--monster-color-primary-1);display:flex;font-size:1rem;font-weight:400;line-height:1.6;padding:.4rem}.monster-data-grid-container .col-10{grid-column:10}.monster-data-grid-container .col-11{grid-column:11}.monster-data-grid-container .col-11,.monster-data-grid-container .col-12{background-color:var(--monster-bg-color-primary-1);border:none;color:var(--monster-color-primary-1);display:flex;font-size:1rem;font-weight:400;line-height:1.6;padding:.4rem}.monster-data-grid-container .col-12{grid-column:12}.monster-data-grid-container .col-13{grid-column:13}.monster-data-grid-container .col-13,.monster-data-grid-container .col-14{background-color:var(--monster-bg-color-primary-1);border:none;color:var(--monster-color-primary-1);display:flex;font-size:1rem;font-weight:400;line-height:1.6;padding:.4rem}.monster-data-grid-container .col-14{grid-column:14}.monster-data-grid-container .col-15{grid-column:15}.monster-data-grid-container .col-15,.monster-data-grid-container .col-16{background-color:var(--monster-bg-color-primary-1);border:none;color:var(--monster-color-primary-1);display:flex;font-size:1rem;font-weight:400;line-height:1.6;padding:.4rem}.monster-data-grid-container .col-16{grid-column:16}.monster-data-grid-container .col-17{grid-column:17}.monster-data-grid-container .col-17,.monster-data-grid-container .col-18{background-color:var(--monster-bg-color-primary-1);border:none;color:var(--monster-color-primary-1);display:flex;font-size:1rem;font-weight:400;line-height:1.6;padding:.4rem}.monster-data-grid-container .col-18{grid-column:18}.monster-data-grid-container .col-19{grid-column:19}.monster-data-grid-container .col-19,.monster-data-grid-container .col-20{background-color:var(--monster-bg-color-primary-1);border:none;color:var(--monster-color-primary-1);display:flex;font-size:1rem;font-weight:400;line-height:1.6;padding:.4rem}.monster-data-grid-container .col-20{grid-column:20}.monster-data-grid-container .col-21{grid-column:21}.monster-data-grid-container .col-21,.monster-data-grid-container .col-22{background-color:var(--monster-bg-color-primary-1);border:none;color:var(--monster-color-primary-1);display:flex;font-size:1rem;font-weight:400;line-height:1.6;padding:.4rem}.monster-data-grid-container .col-22{grid-column:22}.monster-data-grid-container .col-23{grid-column:23}.monster-data-grid-container .col-23,.monster-data-grid-container .col-24{background-color:var(--monster-bg-color-primary-1);border:none;color:var(--monster-color-primary-1);display:flex;font-size:1rem;font-weight:400;line-height:1.6;padding:.4rem}.monster-data-grid-container .col-24{grid-column:24}.monster-data-grid-container .col-25{grid-column:25}.monster-data-grid-container .col-25,.monster-data-grid-container .col-26{background-color:var(--monster-bg-color-primary-1);border:none;color:var(--monster-color-primary-1);display:flex;font-size:1rem;font-weight:400;line-height:1.6;padding:.4rem}.monster-data-grid-container .col-26{grid-column:26}.monster-data-grid-container .col-27{grid-column:27}.monster-data-grid-container .col-27,.monster-data-grid-container .col-28{background-color:var(--monster-bg-color-primary-1);border:none;color:var(--monster-color-primary-1);display:flex;font-size:1rem;font-weight:400;line-height:1.6;padding:.4rem}.monster-data-grid-container .col-28{grid-column:28}.monster-data-grid-container .col-29{grid-column:29}.monster-data-grid-container .col-29,.monster-data-grid-container .col-30{background-color:var(--monster-bg-color-primary-1);border:none;color:var(--monster-color-primary-1);display:flex;font-size:1rem;font-weight:400;line-height:1.6;padding:.4rem}.monster-data-grid-container .col-30{grid-column:30}.monster-data-grid-container .col-31{grid-column:31}.monster-data-grid-container .col-31,.monster-data-grid-container .col-32{background-color:var(--monster-bg-color-primary-1);border:none;color:var(--monster-color-primary-1);display:flex;font-size:1rem;font-weight:400;line-height:1.6;padding:.4rem}.monster-data-grid-container .col-32{grid-column:32}.monster-data-grid-container .col-33{grid-column:33}.monster-data-grid-container .col-33,.monster-data-grid-container .col-34{background-color:var(--monster-bg-color-primary-1);border:none;color:var(--monster-color-primary-1);display:flex;font-size:1rem;font-weight:400;line-height:1.6;padding:.4rem}.monster-data-grid-container .col-34{grid-column:34}.monster-data-grid-container .col-35{grid-column:35}.monster-data-grid-container .col-35,.monster-data-grid-container .col-36{background-color:var(--monster-bg-color-primary-1);border:none;color:var(--monster-color-primary-1);display:flex;font-size:1rem;font-weight:400;line-height:1.6;padding:.4rem}.monster-data-grid-container .col-36{grid-column:36}.monster-data-grid-container .col-37{grid-column:37}.monster-data-grid-container .col-37,.monster-data-grid-container .col-38{background-color:var(--monster-bg-color-primary-1);border:none;color:var(--monster-color-primary-1);display:flex;font-size:1rem;font-weight:400;line-height:1.6;padding:.4rem}.monster-data-grid-container .col-38{grid-column:38}.monster-data-grid-container .col-39{grid-column:39}.monster-data-grid-container .col-39,.monster-data-grid-container .col-40{background-color:var(--monster-bg-color-primary-1);border:none;color:var(--monster-color-primary-1);display:flex;font-size:1rem;font-weight:400;line-height:1.6;padding:.4rem}.monster-data-grid-container .col-40{grid-column:40}.monster-data-grid-container .col-41{grid-column:41}.monster-data-grid-container .col-41,.monster-data-grid-container .col-42{background-color:var(--monster-bg-color-primary-1);border:none;color:var(--monster-color-primary-1);display:flex;font-size:1rem;font-weight:400;line-height:1.6;padding:.4rem}.monster-data-grid-container .col-42{grid-column:42}.monster-data-grid-container .col-43{grid-column:43}.monster-data-grid-container .col-43,.monster-data-grid-container .col-44{background-color:var(--monster-bg-color-primary-1);border:none;color:var(--monster-color-primary-1);display:flex;font-size:1rem;font-weight:400;line-height:1.6;padding:.4rem}.monster-data-grid-container .col-44{grid-column:44}.monster-data-grid-container .col-45{grid-column:45}.monster-data-grid-container .col-45,.monster-data-grid-container .col-46{background-color:var(--monster-bg-color-primary-1);border:none;color:var(--monster-color-primary-1);display:flex;font-size:1rem;font-weight:400;line-height:1.6;padding:.4rem}.monster-data-grid-container .col-46{grid-column:46}.monster-data-grid-container .col-47{grid-column:47}.monster-data-grid-container .col-47,.monster-data-grid-container .col-48{background-color:var(--monster-bg-color-primary-1);border:none;color:var(--monster-color-primary-1);display:flex;font-size:1rem;font-weight:400;line-height:1.6;padding:.4rem}.monster-data-grid-container .col-48{grid-column:48}.monster-data-grid-container .col-49{grid-column:49}.monster-data-grid-container .col-49,.monster-data-grid-container .col-50{background-color:var(--monster-bg-color-primary-1);border:none;color:var(--monster-color-primary-1);display:flex;font-size:1rem;font-weight:400;line-height:1.6;padding:.4rem}.monster-data-grid-container .col-50{grid-column:50}.monster-data-grid-container .col-start-end{grid-column:1/-1}.monster-data-grid-container .header{font-size:1rem;font-weight:600;font-weight:400;line-height:1.6;margin-bottom:.4rem}
\ No newline at end of file
+.monster-data-grid-container {
+	background-color: var(--monster-bg-color-primary-2);
+	box-sizing: border-box;
+	color: var(--monster-color-primary-2);
+	display: block;
+	overflow-x: auto;
+	padding: 20px;
+	width: 100%;
+}
+.monster-data-grid-container > div {
+	display: grid;
+}
+.monster-data-grid-container .col-1 {
+	grid-column: 1;
+}
+.monster-data-grid-container .col-1,
+.monster-data-grid-container .col-2 {
+	background-color: var(--monster-bg-color-primary-1);
+	border: none;
+	color: var(--monster-color-primary-1);
+	display: flex;
+	font-size: 1rem;
+	font-weight: 400;
+	line-height: 1.6;
+	padding: .4rem;
+}
+.monster-data-grid-container .col-2 {
+	grid-column: 2;
+}
+.monster-data-grid-container .col-3 {
+	grid-column: 3;
+}
+.monster-data-grid-container .col-3,
+.monster-data-grid-container .col-4 {
+	background-color: var(--monster-bg-color-primary-1);
+	border: none;
+	color: var(--monster-color-primary-1);
+	display: flex;
+	font-size: 1rem;
+	font-weight: 400;
+	line-height: 1.6;
+	padding: .4rem;
+}
+.monster-data-grid-container .col-4 {
+	grid-column: 4;
+}
+.monster-data-grid-container .col-5 {
+	grid-column: 5;
+}
+.monster-data-grid-container .col-5,
+.monster-data-grid-container .col-6 {
+	background-color: var(--monster-bg-color-primary-1);
+	border: none;
+	color: var(--monster-color-primary-1);
+	display: flex;
+	font-size: 1rem;
+	font-weight: 400;
+	line-height: 1.6;
+	padding: .4rem;
+}
+.monster-data-grid-container .col-6 {
+	grid-column: 6;
+}
+.monster-data-grid-container .col-7 {
+	grid-column: 7;
+}
+.monster-data-grid-container .col-7,
+.monster-data-grid-container .col-8 {
+	background-color: var(--monster-bg-color-primary-1);
+	border: none;
+	color: var(--monster-color-primary-1);
+	display: flex;
+	font-size: 1rem;
+	font-weight: 400;
+	line-height: 1.6;
+	padding: .4rem;
+}
+.monster-data-grid-container .col-8 {
+	grid-column: 8;
+}
+.monster-data-grid-container .col-9 {
+	grid-column: 9;
+}
+.monster-data-grid-container .col-10,
+.monster-data-grid-container .col-9 {
+	background-color: var(--monster-bg-color-primary-1);
+	border: none;
+	color: var(--monster-color-primary-1);
+	display: flex;
+	font-size: 1rem;
+	font-weight: 400;
+	line-height: 1.6;
+	padding: .4rem;
+}
+.monster-data-grid-container .col-10 {
+	grid-column: 10;
+}
+.monster-data-grid-container .col-11 {
+	grid-column: 11;
+}
+.monster-data-grid-container .col-11,
+.monster-data-grid-container .col-12 {
+	background-color: var(--monster-bg-color-primary-1);
+	border: none;
+	color: var(--monster-color-primary-1);
+	display: flex;
+	font-size: 1rem;
+	font-weight: 400;
+	line-height: 1.6;
+	padding: .4rem;
+}
+.monster-data-grid-container .col-12 {
+	grid-column: 12;
+}
+.monster-data-grid-container .col-13 {
+	grid-column: 13;
+}
+.monster-data-grid-container .col-13,
+.monster-data-grid-container .col-14 {
+	background-color: var(--monster-bg-color-primary-1);
+	border: none;
+	color: var(--monster-color-primary-1);
+	display: flex;
+	font-size: 1rem;
+	font-weight: 400;
+	line-height: 1.6;
+	padding: .4rem;
+}
+.monster-data-grid-container .col-14 {
+	grid-column: 14;
+}
+.monster-data-grid-container .col-15 {
+	grid-column: 15;
+}
+.monster-data-grid-container .col-15,
+.monster-data-grid-container .col-16 {
+	background-color: var(--monster-bg-color-primary-1);
+	border: none;
+	color: var(--monster-color-primary-1);
+	display: flex;
+	font-size: 1rem;
+	font-weight: 400;
+	line-height: 1.6;
+	padding: .4rem;
+}
+.monster-data-grid-container .col-16 {
+	grid-column: 16;
+}
+.monster-data-grid-container .col-17 {
+	grid-column: 17;
+}
+.monster-data-grid-container .col-17,
+.monster-data-grid-container .col-18 {
+	background-color: var(--monster-bg-color-primary-1);
+	border: none;
+	color: var(--monster-color-primary-1);
+	display: flex;
+	font-size: 1rem;
+	font-weight: 400;
+	line-height: 1.6;
+	padding: .4rem;
+}
+.monster-data-grid-container .col-18 {
+	grid-column: 18;
+}
+.monster-data-grid-container .col-19 {
+	grid-column: 19;
+}
+.monster-data-grid-container .col-19,
+.monster-data-grid-container .col-20 {
+	background-color: var(--monster-bg-color-primary-1);
+	border: none;
+	color: var(--monster-color-primary-1);
+	display: flex;
+	font-size: 1rem;
+	font-weight: 400;
+	line-height: 1.6;
+	padding: .4rem;
+}
+.monster-data-grid-container .col-20 {
+	grid-column: 20;
+}
+.monster-data-grid-container .col-21 {
+	grid-column: 21;
+}
+.monster-data-grid-container .col-21,
+.monster-data-grid-container .col-22 {
+	background-color: var(--monster-bg-color-primary-1);
+	border: none;
+	color: var(--monster-color-primary-1);
+	display: flex;
+	font-size: 1rem;
+	font-weight: 400;
+	line-height: 1.6;
+	padding: .4rem;
+}
+.monster-data-grid-container .col-22 {
+	grid-column: 22;
+}
+.monster-data-grid-container .col-23 {
+	grid-column: 23;
+}
+.monster-data-grid-container .col-23,
+.monster-data-grid-container .col-24 {
+	background-color: var(--monster-bg-color-primary-1);
+	border: none;
+	color: var(--monster-color-primary-1);
+	display: flex;
+	font-size: 1rem;
+	font-weight: 400;
+	line-height: 1.6;
+	padding: .4rem;
+}
+.monster-data-grid-container .col-24 {
+	grid-column: 24;
+}
+.monster-data-grid-container .col-25 {
+	grid-column: 25;
+}
+.monster-data-grid-container .col-25,
+.monster-data-grid-container .col-26 {
+	background-color: var(--monster-bg-color-primary-1);
+	border: none;
+	color: var(--monster-color-primary-1);
+	display: flex;
+	font-size: 1rem;
+	font-weight: 400;
+	line-height: 1.6;
+	padding: .4rem;
+}
+.monster-data-grid-container .col-26 {
+	grid-column: 26;
+}
+.monster-data-grid-container .col-27 {
+	grid-column: 27;
+}
+.monster-data-grid-container .col-27,
+.monster-data-grid-container .col-28 {
+	background-color: var(--monster-bg-color-primary-1);
+	border: none;
+	color: var(--monster-color-primary-1);
+	display: flex;
+	font-size: 1rem;
+	font-weight: 400;
+	line-height: 1.6;
+	padding: .4rem;
+}
+.monster-data-grid-container .col-28 {
+	grid-column: 28;
+}
+.monster-data-grid-container .col-29 {
+	grid-column: 29;
+}
+.monster-data-grid-container .col-29,
+.monster-data-grid-container .col-30 {
+	background-color: var(--monster-bg-color-primary-1);
+	border: none;
+	color: var(--monster-color-primary-1);
+	display: flex;
+	font-size: 1rem;
+	font-weight: 400;
+	line-height: 1.6;
+	padding: .4rem;
+}
+.monster-data-grid-container .col-30 {
+	grid-column: 30;
+}
+.monster-data-grid-container .col-31 {
+	grid-column: 31;
+}
+.monster-data-grid-container .col-31,
+.monster-data-grid-container .col-32 {
+	background-color: var(--monster-bg-color-primary-1);
+	border: none;
+	color: var(--monster-color-primary-1);
+	display: flex;
+	font-size: 1rem;
+	font-weight: 400;
+	line-height: 1.6;
+	padding: .4rem;
+}
+.monster-data-grid-container .col-32 {
+	grid-column: 32;
+}
+.monster-data-grid-container .col-33 {
+	grid-column: 33;
+}
+.monster-data-grid-container .col-33,
+.monster-data-grid-container .col-34 {
+	background-color: var(--monster-bg-color-primary-1);
+	border: none;
+	color: var(--monster-color-primary-1);
+	display: flex;
+	font-size: 1rem;
+	font-weight: 400;
+	line-height: 1.6;
+	padding: .4rem;
+}
+.monster-data-grid-container .col-34 {
+	grid-column: 34;
+}
+.monster-data-grid-container .col-35 {
+	grid-column: 35;
+}
+.monster-data-grid-container .col-35,
+.monster-data-grid-container .col-36 {
+	background-color: var(--monster-bg-color-primary-1);
+	border: none;
+	color: var(--monster-color-primary-1);
+	display: flex;
+	font-size: 1rem;
+	font-weight: 400;
+	line-height: 1.6;
+	padding: .4rem;
+}
+.monster-data-grid-container .col-36 {
+	grid-column: 36;
+}
+.monster-data-grid-container .col-37 {
+	grid-column: 37;
+}
+.monster-data-grid-container .col-37,
+.monster-data-grid-container .col-38 {
+	background-color: var(--monster-bg-color-primary-1);
+	border: none;
+	color: var(--monster-color-primary-1);
+	display: flex;
+	font-size: 1rem;
+	font-weight: 400;
+	line-height: 1.6;
+	padding: .4rem;
+}
+.monster-data-grid-container .col-38 {
+	grid-column: 38;
+}
+.monster-data-grid-container .col-39 {
+	grid-column: 39;
+}
+.monster-data-grid-container .col-39,
+.monster-data-grid-container .col-40 {
+	background-color: var(--monster-bg-color-primary-1);
+	border: none;
+	color: var(--monster-color-primary-1);
+	display: flex;
+	font-size: 1rem;
+	font-weight: 400;
+	line-height: 1.6;
+	padding: .4rem;
+}
+.monster-data-grid-container .col-40 {
+	grid-column: 40;
+}
+.monster-data-grid-container .col-41 {
+	grid-column: 41;
+}
+.monster-data-grid-container .col-41,
+.monster-data-grid-container .col-42 {
+	background-color: var(--monster-bg-color-primary-1);
+	border: none;
+	color: var(--monster-color-primary-1);
+	display: flex;
+	font-size: 1rem;
+	font-weight: 400;
+	line-height: 1.6;
+	padding: .4rem;
+}
+.monster-data-grid-container .col-42 {
+	grid-column: 42;
+}
+.monster-data-grid-container .col-43 {
+	grid-column: 43;
+}
+.monster-data-grid-container .col-43,
+.monster-data-grid-container .col-44 {
+	background-color: var(--monster-bg-color-primary-1);
+	border: none;
+	color: var(--monster-color-primary-1);
+	display: flex;
+	font-size: 1rem;
+	font-weight: 400;
+	line-height: 1.6;
+	padding: .4rem;
+}
+.monster-data-grid-container .col-44 {
+	grid-column: 44;
+}
+.monster-data-grid-container .col-45 {
+	grid-column: 45;
+}
+.monster-data-grid-container .col-45,
+.monster-data-grid-container .col-46 {
+	background-color: var(--monster-bg-color-primary-1);
+	border: none;
+	color: var(--monster-color-primary-1);
+	display: flex;
+	font-size: 1rem;
+	font-weight: 400;
+	line-height: 1.6;
+	padding: .4rem;
+}
+.monster-data-grid-container .col-46 {
+	grid-column: 46;
+}
+.monster-data-grid-container .col-47 {
+	grid-column: 47;
+}
+.monster-data-grid-container .col-47,
+.monster-data-grid-container .col-48 {
+	background-color: var(--monster-bg-color-primary-1);
+	border: none;
+	color: var(--monster-color-primary-1);
+	display: flex;
+	font-size: 1rem;
+	font-weight: 400;
+	line-height: 1.6;
+	padding: .4rem;
+}
+.monster-data-grid-container .col-48 {
+	grid-column: 48;
+}
+.monster-data-grid-container .col-49 {
+	grid-column: 49;
+}
+.monster-data-grid-container .col-49,
+.monster-data-grid-container .col-50 {
+	background-color: var(--monster-bg-color-primary-1);
+	border: none;
+	color: var(--monster-color-primary-1);
+	display: flex;
+	font-size: 1rem;
+	font-weight: 400;
+	line-height: 1.6;
+	padding: .4rem;
+}
+.monster-data-grid-container .col-50 {
+	grid-column: 50;
+}
+.monster-data-grid-container .col-start-end {
+	grid-column: 1 / -1;
+}
+.monster-data-grid-container .header {
+	font-size: 1rem;
+	font-weight: 600;
+	font-weight: 400;
+	line-height: 1.6;
+	margin-bottom: .4rem;
+}
diff --git a/source/components/style/display.css b/source/components/style/display.css
index 1f85a5fc6b45cb159cd43f7e54ffdf509131c76d..4e4636ebd7bd42cbf53a986d2777616d28001e97 100644
--- a/source/components/style/display.css
+++ b/source/components/style/display.css
@@ -1,2 +1,33 @@
 /** generated from display.pcss **/
-.block{display:block}.inline{display:inline}.inline-block{display:inline-block}.grid{display:grid}.inline-grid{display:inline-grid}.flex{display:flex}.inline-flex{display:inline-flex}.hidden,.hide,.none{display:none}.visible{visibility:visible}.invisible{visibility:hidden}
\ No newline at end of file
+.block {
+	display: block;
+}
+.inline {
+	display: inline;
+}
+.inline-block {
+	display: inline-block;
+}
+.grid {
+	display: grid;
+}
+.inline-grid {
+	display: inline-grid;
+}
+.flex {
+	display: flex;
+}
+.inline-flex {
+	display: inline-flex;
+}
+.hidden,
+.hide,
+.none {
+	display: none;
+}
+.visible {
+	visibility: visible;
+}
+.invisible {
+	visibility: hidden;
+}
diff --git a/source/components/style/floating-ui.css b/source/components/style/floating-ui.css
index 4f25210435f3c410c1633f92e9cc2ededc221c61..5713b043d0195f758afc602cd0cf56ae0f14c631 100644
--- a/source/components/style/floating-ui.css
+++ b/source/components/style/floating-ui.css
@@ -1,2 +1,43 @@
 /** generated from floating-ui.pcss **/
-div[data-monster-role=popper]{align-content:center;background:var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);box-sizing:border-box;color:var(--monster-color-primary-1);display:none;justify-content:space-between;left:0;padding:1.1em;position:absolute;top:0;width:-moz-max-content;width:max-content;z-index:var(--monster-z-index-modal)}div[data-monster-role=popper] div[data-monster-role=arrow]{background:var(--monster-bg-color-primary-1);height:calc(max(var(--monster-popper-witharrrow-distance), -1 * var(--monster-popper-witharrrow-distance))*2);pointer-events:none;position:absolute;width:calc(max(var(--monster-popper-witharrrow-distance), -1 * var(--monster-popper-witharrrow-distance))*2);z-index:-1}
\ No newline at end of file
+div[data-monster-role="popper"] {
+	align-content: center;
+	background: var(--monster-bg-color-primary-1);
+	border-color: var(--monster-bg-color-primary-4);
+	border-radius: var(--monster-border-radius);
+	border-style: var(--monster-border-style);
+	border-width: var(--monster-border-width);
+	box-shadow: var(--monster-box-shadow-1);
+	box-sizing: border-box;
+	color: var(--monster-color-primary-1);
+	display: none;
+	justify-content: space-between;
+	left: 0;
+	padding: 1.1em;
+	position: absolute;
+	top: 0;
+	width: -moz-max-content;
+	width: max-content;
+	z-index: var(--monster-z-index-modal);
+}
+div[data-monster-role="popper"] div[data-monster-role="arrow"] {
+	background: var(--monster-bg-color-primary-1);
+	height: calc(
+		max(
+			var(--monster-popper-witharrrow-distance),
+			-1 *
+			var(--monster-popper-witharrrow-distance)
+		) *
+		2
+	);
+	pointer-events: none;
+	position: absolute;
+	width: calc(
+		max(
+			var(--monster-popper-witharrrow-distance),
+			-1 *
+			var(--monster-popper-witharrrow-distance)
+		) *
+		2
+	);
+	z-index: -1;
+}
diff --git a/source/components/style/form.css b/source/components/style/form.css
index a10a2fffe9d455541eac73ea204142c950d7e601..b89f5e0914036248af8fd357902ccaf0311c6611 100644
--- a/source/components/style/form.css
+++ b/source/components/style/form.css
@@ -1,2 +1,48 @@
 /** generated from form.pcss **/
-input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-2);background-color:var(--monster-bg-color-primary-1);border-color:var(--monster-theme-control-border-color);border-radius:var(--monster-theme-control-border-radius);border-style:var(--monster-theme-control-border-style);border-width:var(--monster-theme-control-border-width);box-sizing:border-box;color:var(--monster-color-primary-1);font-family:inherit;font-size:100%;margin:0;outline:none}input,select,textarea{height:-moz-fit-content;height:fit-content;padding:.4rem .6rem}textarea{min-height:6rem;resize:vertical}input[type=color]{height:2rem;margin:0;padding:.1rem;width:2rem}input:hover:not([type=radio]):not([type=checkbox]):not([type=range]),select:hover,textarea:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}input:focus,select:focus,textarea:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:3px}
\ No newline at end of file
+input,
+meter,
+progress,
+select,
+textarea {
+	accent-color: var(--monster-color-secondary-2);
+	background-color: var(--monster-bg-color-primary-1);
+	border-color: var(--monster-theme-control-border-color);
+	border-radius: var(--monster-theme-control-border-radius);
+	border-style: var(--monster-theme-control-border-style);
+	border-width: var(--monster-theme-control-border-width);
+	box-sizing: border-box;
+	color: var(--monster-color-primary-1);
+	font-family: inherit;
+	font-size: 100%;
+	margin: 0;
+	outline: none;
+}
+input,
+select,
+textarea {
+	height: -moz-fit-content;
+	height: fit-content;
+	padding: .4rem .6rem;
+}
+textarea {
+	min-height: 6rem;
+	resize: vertical;
+}
+input[type="color"] {
+	height: 2rem;
+	margin: 0;
+	padding: .1rem;
+	width: 2rem;
+}
+input:hover:not([type="radio"]):not([type="checkbox"]):not([type="range"]),
+select:hover,
+textarea:hover {
+	box-shadow: var(--monster-box-shadow-2);
+	transition: background .8s, color .25s .0833333333s;
+}
+input:focus,
+select:focus,
+textarea:focus {
+	outline: 1px dashed var(--monster-color-selection-3);
+	outline-offset: 3px;
+}
diff --git a/source/components/style/host.css b/source/components/style/host.css
index bdef521cbfb3512b7f614b80996275c9f7e43d06..205242ceafaf77667942a48818574a4fdc9c95b3 100644
--- a/source/components/style/host.css
+++ b/source/components/style/host.css
@@ -1,2 +1,15 @@
 /** generated from host.pcss **/
-:host([disabled]),:host([disabled]) *{background-color:var(--monster-bg-color-primary-3,inherit);border-color:var(--monster-color-primary-3,inherit);color:var(--monster-color-primary-3,inherit)}:disabled{background-color:var(--monster-bg-color-primary-3,inherit);border-color:var(--monster-color-primary-3,inherit);color:var(--monster-color-primary-3,inherit);cursor:not-allowed;opacity:.55;pointer-events:none}
\ No newline at end of file
+:host([disabled]),
+:host([disabled]) * {
+	background-color: var(--monster-bg-color-primary-3, inherit);
+	border-color: var(--monster-color-primary-3, inherit);
+	color: var(--monster-color-primary-3, inherit);
+}
+:disabled {
+	background-color: var(--monster-bg-color-primary-3, inherit);
+	border-color: var(--monster-color-primary-3, inherit);
+	color: var(--monster-color-primary-3, inherit);
+	cursor: not-allowed;
+	opacity: 0.55;
+	pointer-events: none;
+}
diff --git a/source/components/style/icons.css b/source/components/style/icons.css
index c94b08d9dd8c4785ae3b9313a65ceacc99a72596..c9f23cf712d58e5cd0a114ef7f6ddf5ce19c57d7 100644
--- a/source/components/style/icons.css
+++ b/source/components/style/icons.css
@@ -1,2 +1,1585 @@
 /** generated from icons.pcss **/
-.monster-icon-primary-1-info:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-info:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-info:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-info:before,.monster-icon-secondary-1-info:before,.monster-icon-tertiary-1-info:before{content:"";display:inline-block;height:1em;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-info-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-info-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-info:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-info:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-info:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-info:before,.monster-icon-secondary-2-info:before,.monster-icon-tertiary-2-info:before{content:"";display:inline-block;height:1em;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-info-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-info-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-info:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-info:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-info:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-info:before,.monster-icon-secondary-3-info:before,.monster-icon-tertiary-3-info:before{content:"";display:inline-block;height:1em;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-info-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-info-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-info:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-info:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-info:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-info:before,.monster-icon-secondary-4-info:before,.monster-icon-tertiary-4-info:before{content:"";display:inline-block;height:1em;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-info-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-info-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-on:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-on:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-on:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-on:before,.monster-icon-secondary-1-on:before,.monster-icon-tertiary-1-on:before{content:"";display:inline-block;height:1em;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-toggle-on' viewBox='0 0 16 16'%3E%3Cpath d='M5 3a5 5 0 0 0 0 10h6a5 5 0 0 0 0-10zm6 9a4 4 0 1 1 0-8 4 4 0 0 1 0 8'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-toggle-on' viewBox='0 0 16 16'%3E%3Cpath d='M5 3a5 5 0 0 0 0 10h6a5 5 0 0 0 0-10zm6 9a4 4 0 1 1 0-8 4 4 0 0 1 0 8'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-on:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-on:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-on:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-on:before,.monster-icon-secondary-2-on:before,.monster-icon-tertiary-2-on:before{content:"";display:inline-block;height:1em;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-toggle-on' viewBox='0 0 16 16'%3E%3Cpath d='M5 3a5 5 0 0 0 0 10h6a5 5 0 0 0 0-10zm6 9a4 4 0 1 1 0-8 4 4 0 0 1 0 8'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-toggle-on' viewBox='0 0 16 16'%3E%3Cpath d='M5 3a5 5 0 0 0 0 10h6a5 5 0 0 0 0-10zm6 9a4 4 0 1 1 0-8 4 4 0 0 1 0 8'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-on:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-on:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-on:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-on:before,.monster-icon-secondary-3-on:before,.monster-icon-tertiary-3-on:before{content:"";display:inline-block;height:1em;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-toggle-on' viewBox='0 0 16 16'%3E%3Cpath d='M5 3a5 5 0 0 0 0 10h6a5 5 0 0 0 0-10zm6 9a4 4 0 1 1 0-8 4 4 0 0 1 0 8'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-toggle-on' viewBox='0 0 16 16'%3E%3Cpath d='M5 3a5 5 0 0 0 0 10h6a5 5 0 0 0 0-10zm6 9a4 4 0 1 1 0-8 4 4 0 0 1 0 8'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-on:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-on:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-on:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-on:before,.monster-icon-secondary-4-on:before,.monster-icon-tertiary-4-on:before{content:"";display:inline-block;height:1em;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-toggle-on' viewBox='0 0 16 16'%3E%3Cpath d='M5 3a5 5 0 0 0 0 10h6a5 5 0 0 0 0-10zm6 9a4 4 0 1 1 0-8 4 4 0 0 1 0 8'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-toggle-on' viewBox='0 0 16 16'%3E%3Cpath d='M5 3a5 5 0 0 0 0 10h6a5 5 0 0 0 0-10zm6 9a4 4 0 1 1 0-8 4 4 0 0 1 0 8'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-off:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-off:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-off:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-off:before,.monster-icon-secondary-1-off:before,.monster-icon-tertiary-1-off:before{content:"";display:inline-block;height:1em;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M11 4a4 4 0 0 1 0 8H8a5 5 0 0 0 2-4 5 5 0 0 0-2-4zm-6 8a4 4 0 1 1 0-8 4 4 0 0 1 0 8M0 8a5 5 0 0 0 5 5h6a5 5 0 0 0 0-10H5a5 5 0 0 0-5 5'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M11 4a4 4 0 0 1 0 8H8a5 5 0 0 0 2-4 5 5 0 0 0-2-4zm-6 8a4 4 0 1 1 0-8 4 4 0 0 1 0 8M0 8a5 5 0 0 0 5 5h6a5 5 0 0 0 0-10H5a5 5 0 0 0-5 5'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-off:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-off:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-off:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-off:before,.monster-icon-secondary-2-off:before,.monster-icon-tertiary-2-off:before{content:"";display:inline-block;height:1em;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M11 4a4 4 0 0 1 0 8H8a5 5 0 0 0 2-4 5 5 0 0 0-2-4zm-6 8a4 4 0 1 1 0-8 4 4 0 0 1 0 8M0 8a5 5 0 0 0 5 5h6a5 5 0 0 0 0-10H5a5 5 0 0 0-5 5'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M11 4a4 4 0 0 1 0 8H8a5 5 0 0 0 2-4 5 5 0 0 0-2-4zm-6 8a4 4 0 1 1 0-8 4 4 0 0 1 0 8M0 8a5 5 0 0 0 5 5h6a5 5 0 0 0 0-10H5a5 5 0 0 0-5 5'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-off:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-off:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-off:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-off:before,.monster-icon-secondary-3-off:before,.monster-icon-tertiary-3-off:before{content:"";display:inline-block;height:1em;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M11 4a4 4 0 0 1 0 8H8a5 5 0 0 0 2-4 5 5 0 0 0-2-4zm-6 8a4 4 0 1 1 0-8 4 4 0 0 1 0 8M0 8a5 5 0 0 0 5 5h6a5 5 0 0 0 0-10H5a5 5 0 0 0-5 5'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M11 4a4 4 0 0 1 0 8H8a5 5 0 0 0 2-4 5 5 0 0 0-2-4zm-6 8a4 4 0 1 1 0-8 4 4 0 0 1 0 8M0 8a5 5 0 0 0 5 5h6a5 5 0 0 0 0-10H5a5 5 0 0 0-5 5'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-off:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-off:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-off:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-off:before,.monster-icon-secondary-4-off:before,.monster-icon-tertiary-4-off:before{content:"";display:inline-block;height:1em;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M11 4a4 4 0 0 1 0 8H8a5 5 0 0 0 2-4 5 5 0 0 0-2-4zm-6 8a4 4 0 1 1 0-8 4 4 0 0 1 0 8M0 8a5 5 0 0 0 5 5h6a5 5 0 0 0 0-10H5a5 5 0 0 0-5 5'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M11 4a4 4 0 0 1 0 8H8a5 5 0 0 0 2-4 5 5 0 0 0-2-4zm-6 8a4 4 0 1 1 0-8 4 4 0 0 1 0 8M0 8a5 5 0 0 0 5 5h6a5 5 0 0 0 0-10H5a5 5 0 0 0-5 5'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-positiv:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-positiv:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-positiv:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-positiv:before,.monster-icon-secondary-1-positiv:before,.monster-icon-tertiary-1-positiv:before{content:"";display:inline-block;height:1em;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-positiv:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-positiv:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-positiv:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-positiv:before,.monster-icon-secondary-2-positiv:before,.monster-icon-tertiary-2-positiv:before{content:"";display:inline-block;height:1em;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-positiv:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-positiv:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-positiv:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-positiv:before,.monster-icon-secondary-3-positiv:before,.monster-icon-tertiary-3-positiv:before{content:"";display:inline-block;height:1em;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-positiv:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-positiv:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-positiv:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-positiv:before,.monster-icon-secondary-4-positiv:before,.monster-icon-tertiary-4-positiv:before{content:"";display:inline-block;height:1em;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-negativ:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-negativ:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-negativ:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-negativ:before,.monster-icon-secondary-1-negativ:before,.monster-icon-tertiary-1-negativ:before{content:"";display:inline-block;height:1em;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-negativ:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-negativ:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-negativ:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-negativ:before,.monster-icon-secondary-2-negativ:before,.monster-icon-tertiary-2-negativ:before{content:"";display:inline-block;height:1em;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-negativ:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-negativ:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-negativ:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-negativ:before,.monster-icon-secondary-3-negativ:before,.monster-icon-tertiary-3-negativ:before{content:"";display:inline-block;height:1em;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-negativ:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-negativ:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-negativ:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-negativ:before,.monster-icon-secondary-4-negativ:before,.monster-icon-tertiary-4-negativ:before{content:"";display:inline-block;height:1em;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-warning:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-warning:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-warning:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-warning:before,.monster-icon-secondary-1-warning:before,.monster-icon-tertiary-1-warning:before{content:"";display:inline-block;height:1em;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-warning:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-warning:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-warning:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-warning:before,.monster-icon-secondary-2-warning:before,.monster-icon-tertiary-2-warning:before{content:"";display:inline-block;height:1em;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-warning:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-warning:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-warning:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-warning:before,.monster-icon-secondary-3-warning:before,.monster-icon-tertiary-3-warning:before{content:"";display:inline-block;height:1em;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-warning:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-warning:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-warning:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-warning:before,.monster-icon-secondary-4-warning:before,.monster-icon-tertiary-4-warning:before{content:"";display:inline-block;height:1em;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-neutral:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-neutral:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-neutral:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-neutral:before,.monster-icon-secondary-1-neutral:before,.monster-icon-tertiary-1-neutral:before{content:"";display:inline-block;height:1em;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-neutral:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-neutral:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-neutral:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-neutral:before,.monster-icon-secondary-2-neutral:before,.monster-icon-tertiary-2-neutral:before{content:"";display:inline-block;height:1em;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-neutral:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-neutral:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-neutral:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-neutral:before,.monster-icon-secondary-3-neutral:before,.monster-icon-tertiary-3-neutral:before{content:"";display:inline-block;height:1em;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-neutral:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-neutral:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-neutral:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-neutral:before,.monster-icon-secondary-4-neutral:before,.monster-icon-tertiary-4-neutral:before{content:"";display:inline-block;height:1em;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-question:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-question:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-question:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-question:before,.monster-icon-secondary-1-question:before,.monster-icon-tertiary-1-question:before{content:"";display:inline-block;height:1em;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286m1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286m1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-question:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-question:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-question:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-question:before,.monster-icon-secondary-2-question:before,.monster-icon-tertiary-2-question:before{content:"";display:inline-block;height:1em;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286m1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286m1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-question:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-question:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-question:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-question:before,.monster-icon-secondary-3-question:before,.monster-icon-tertiary-3-question:before{content:"";display:inline-block;height:1em;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286m1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286m1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-question:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-question:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-question:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-question:before,.monster-icon-secondary-4-question:before,.monster-icon-tertiary-4-question:before{content:"";display:inline-block;height:1em;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286m1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286m1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-plus:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-plus:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-plus:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-plus:before,.monster-icon-secondary-1-plus:before,.monster-icon-tertiary-1-plus:before{content:"";display:inline-block;height:1em;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-plus:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-plus:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-plus:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-plus:before,.monster-icon-secondary-2-plus:before,.monster-icon-tertiary-2-plus:before{content:"";display:inline-block;height:1em;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-plus:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-plus:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-plus:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-plus:before,.monster-icon-secondary-3-plus:before,.monster-icon-tertiary-3-plus:before{content:"";display:inline-block;height:1em;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-plus:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-plus:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-plus:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-plus:before,.monster-icon-secondary-4-plus:before,.monster-icon-tertiary-4-plus:before{content:"";display:inline-block;height:1em;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-dash:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-dash:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-dash:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-dash:before,.monster-icon-secondary-1-dash:before,.monster-icon-tertiary-1-dash:before{content:"";display:inline-block;height:1em;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-dash:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-dash:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-dash:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-dash:before,.monster-icon-secondary-2-dash:before,.monster-icon-tertiary-2-dash:before{content:"";display:inline-block;height:1em;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-dash:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-dash:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-dash:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-dash:before,.monster-icon-secondary-3-dash:before,.monster-icon-tertiary-3-dash:before{content:"";display:inline-block;height:1em;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-dash:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-dash:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-dash:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-dash:before,.monster-icon-secondary-4-dash:before,.monster-icon-tertiary-4-dash:before{content:"";display:inline-block;height:1em;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-gear:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-gear:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-gear:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-gear:before,.monster-icon-secondary-1-gear:before,.monster-icon-tertiary-1-gear:before{content:"";display:inline-block;height:1em;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492M5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0'/%3E%3Cpath d='M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492M5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0'/%3E%3Cpath d='M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115z'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-gear:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-gear:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-gear:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-gear:before,.monster-icon-secondary-2-gear:before,.monster-icon-tertiary-2-gear:before{content:"";display:inline-block;height:1em;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492M5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0'/%3E%3Cpath d='M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492M5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0'/%3E%3Cpath d='M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115z'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-gear:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-gear:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-gear:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-gear:before,.monster-icon-secondary-3-gear:before,.monster-icon-tertiary-3-gear:before{content:"";display:inline-block;height:1em;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492M5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0'/%3E%3Cpath d='M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492M5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0'/%3E%3Cpath d='M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115z'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-gear:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-gear:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-gear:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-gear:before,.monster-icon-secondary-4-gear:before,.monster-icon-tertiary-4-gear:before{content:"";display:inline-block;height:1em;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492M5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0'/%3E%3Cpath d='M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492M5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0'/%3E%3Cpath d='M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115z'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-home:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-home:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-home:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-home:before,.monster-icon-secondary-1-home:before,.monster-icon-tertiary-1-home:before{content:"";display:inline-block;height:1em;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L2 8.207V13.5A1.5 1.5 0 0 0 3.5 15h9a1.5 1.5 0 0 0 1.5-1.5V8.207l.646.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293zM13 7.207V13.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V7.207l5-5z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L2 8.207V13.5A1.5 1.5 0 0 0 3.5 15h9a1.5 1.5 0 0 0 1.5-1.5V8.207l.646.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293zM13 7.207V13.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V7.207l5-5z'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-home:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-home:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-home:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-home:before,.monster-icon-secondary-2-home:before,.monster-icon-tertiary-2-home:before{content:"";display:inline-block;height:1em;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L2 8.207V13.5A1.5 1.5 0 0 0 3.5 15h9a1.5 1.5 0 0 0 1.5-1.5V8.207l.646.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293zM13 7.207V13.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V7.207l5-5z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L2 8.207V13.5A1.5 1.5 0 0 0 3.5 15h9a1.5 1.5 0 0 0 1.5-1.5V8.207l.646.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293zM13 7.207V13.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V7.207l5-5z'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-home:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-home:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-home:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-home:before,.monster-icon-secondary-3-home:before,.monster-icon-tertiary-3-home:before{content:"";display:inline-block;height:1em;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L2 8.207V13.5A1.5 1.5 0 0 0 3.5 15h9a1.5 1.5 0 0 0 1.5-1.5V8.207l.646.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293zM13 7.207V13.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V7.207l5-5z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L2 8.207V13.5A1.5 1.5 0 0 0 3.5 15h9a1.5 1.5 0 0 0 1.5-1.5V8.207l.646.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293zM13 7.207V13.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V7.207l5-5z'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-home:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-home:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-home:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-home:before,.monster-icon-secondary-4-home:before,.monster-icon-tertiary-4-home:before{content:"";display:inline-block;height:1em;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L2 8.207V13.5A1.5 1.5 0 0 0 3.5 15h9a1.5 1.5 0 0 0 1.5-1.5V8.207l.646.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293zM13 7.207V13.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V7.207l5-5z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L2 8.207V13.5A1.5 1.5 0 0 0 3.5 15h9a1.5 1.5 0 0 0 1.5-1.5V8.207l.646.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293zM13 7.207V13.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V7.207l5-5z'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-1-counterclockwise:before{background-color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-1)}.monster-icon-tertiary-1-counterclockwise:before{background-color:var(--monster-color-tertiary-1);color:var(--monster-bg-color-tertiary-1)}.monster-icon-secondary-1-counterclockwise:before{background-color:var(--monster-color-secondary-1);color:var(--monster-bg-color-secondary-1)}.monster-icon-primary-1-counterclockwise:before,.monster-icon-secondary-1-counterclockwise:before,.monster-icon-tertiary-1-counterclockwise:before{content:"";display:inline-block;height:1em;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2z'/%3E%3Cpath d='M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2z'/%3E%3Cpath d='M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-2-counterclockwise:before{background-color:var(--monster-color-primary-2);color:var(--monster-bg-color-primary-2)}.monster-icon-tertiary-2-counterclockwise:before{background-color:var(--monster-color-tertiary-2);color:var(--monster-bg-color-tertiary-2)}.monster-icon-secondary-2-counterclockwise:before{background-color:var(--monster-color-secondary-2);color:var(--monster-bg-color-secondary-2)}.monster-icon-primary-2-counterclockwise:before,.monster-icon-secondary-2-counterclockwise:before,.monster-icon-tertiary-2-counterclockwise:before{content:"";display:inline-block;height:1em;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2z'/%3E%3Cpath d='M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2z'/%3E%3Cpath d='M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-3-counterclockwise:before{background-color:var(--monster-color-primary-3);color:var(--monster-bg-color-primary-3)}.monster-icon-tertiary-3-counterclockwise:before{background-color:var(--monster-color-tertiary-3);color:var(--monster-bg-color-tertiary-3)}.monster-icon-secondary-3-counterclockwise:before{background-color:var(--monster-color-secondary-3);color:var(--monster-bg-color-secondary-3)}.monster-icon-primary-3-counterclockwise:before,.monster-icon-secondary-3-counterclockwise:before,.monster-icon-tertiary-3-counterclockwise:before{content:"";display:inline-block;height:1em;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2z'/%3E%3Cpath d='M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2z'/%3E%3Cpath d='M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-primary-4-counterclockwise:before{background-color:var(--monster-color-primary-4);color:var(--monster-bg-color-primary-4)}.monster-icon-tertiary-4-counterclockwise:before{background-color:var(--monster-color-tertiary-4);color:var(--monster-bg-color-tertiary-4)}.monster-icon-secondary-4-counterclockwise:before{background-color:var(--monster-color-secondary-4);color:var(--monster-bg-color-secondary-4)}.monster-icon-primary-4-counterclockwise:before,.monster-icon-secondary-4-counterclockwise:before,.monster-icon-tertiary-4-counterclockwise:before{content:"";display:inline-block;height:1em;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2z'/%3E%3Cpath d='M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2z'/%3E%3Cpath d='M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-success-2:before{background-color:var(--monster-color-success-2);color:var(--monster-bg-color-success-2);-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E")}.monster-icon-warning-2:before{background-color:var(--monster-color-warning-2);color:var(--monster-bg-color-warning-2);-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E")}.monster-icon-error-2:before{background-color:var(--monster-color-error-2);color:var(--monster-bg-color-error-2);-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E")}.monster-icon-error-2:before,.monster-icon-success-2:before,.monster-icon-warning-2:before{content:"";display:inline-block;height:1em;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-success-3:before{background-color:var(--monster-color-success-3);color:var(--monster-bg-color-success-3);-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E")}.monster-icon-warning-3:before{background-color:var(--monster-color-warning-3);color:var(--monster-bg-color-warning-3);-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E")}.monster-icon-error-3:before{background-color:var(--monster-color-error-3);color:var(--monster-bg-color-error-3);-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E")}.monster-icon-error-3:before,.monster-icon-success-3:before,.monster-icon-warning-3:before{content:"";display:inline-block;height:1em;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-success-1:before{background-color:var(--monster-bg-color-success-1);color:var(--monster-color-success-1);-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-check-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-check-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E")}.monster-icon-warning-1:before{background-color:var(--monster-bg-color-warning-1);color:var(--monster-color-warning-1);-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-exclamation-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-exclamation-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E")}.monster-icon-error-1:before{background-color:var(--monster-bg-color-error-1);color:var(--monster-color-error-1);-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-x-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-x-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E")}.monster-icon-error-1:before,.monster-icon-success-1:before,.monster-icon-warning-1:before{content:"";display:inline-block;height:1em;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}.monster-icon-success-4:before{background-color:var(--monster-bg-color-success-4);color:var(--monster-color-success-4);-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-check-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-check-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E")}.monster-icon-warning-4:before{background-color:var(--monster-bg-color-warning-4);color:var(--monster-color-warning-4);-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-exclamation-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-exclamation-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E")}.monster-icon-error-4:before{background-color:var(--monster-bg-color-error-4);color:var(--monster-color-error-4);-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-x-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-x-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E")}.monster-icon-error-4:before,.monster-icon-success-4:before,.monster-icon-warning-4:before{content:"";display:inline-block;height:1em;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1em}
\ No newline at end of file
+.monster-icon-primary-1-info:before {
+	background-color: var(--monster-color-primary-1);
+	color: var(--monster-bg-color-primary-1);
+}
+.monster-icon-tertiary-1-info:before {
+	background-color: var(--monster-color-tertiary-1);
+	color: var(--monster-bg-color-tertiary-1);
+}
+.monster-icon-secondary-1-info:before {
+	background-color: var(--monster-color-secondary-1);
+	color: var(--monster-bg-color-secondary-1);
+}
+.monster-icon-primary-1-info:before,
+.monster-icon-secondary-1-info:before,
+.monster-icon-tertiary-1-info:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-info-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-info-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0'/%3E%3C/svg%3E");
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-primary-2-info:before {
+	background-color: var(--monster-color-primary-2);
+	color: var(--monster-bg-color-primary-2);
+}
+.monster-icon-tertiary-2-info:before {
+	background-color: var(--monster-color-tertiary-2);
+	color: var(--monster-bg-color-tertiary-2);
+}
+.monster-icon-secondary-2-info:before {
+	background-color: var(--monster-color-secondary-2);
+	color: var(--monster-bg-color-secondary-2);
+}
+.monster-icon-primary-2-info:before,
+.monster-icon-secondary-2-info:before,
+.monster-icon-tertiary-2-info:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-info-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-info-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0'/%3E%3C/svg%3E");
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-primary-3-info:before {
+	background-color: var(--monster-color-primary-3);
+	color: var(--monster-bg-color-primary-3);
+}
+.monster-icon-tertiary-3-info:before {
+	background-color: var(--monster-color-tertiary-3);
+	color: var(--monster-bg-color-tertiary-3);
+}
+.monster-icon-secondary-3-info:before {
+	background-color: var(--monster-color-secondary-3);
+	color: var(--monster-bg-color-secondary-3);
+}
+.monster-icon-primary-3-info:before,
+.monster-icon-secondary-3-info:before,
+.monster-icon-tertiary-3-info:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-info-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-info-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0'/%3E%3C/svg%3E");
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-primary-4-info:before {
+	background-color: var(--monster-color-primary-4);
+	color: var(--monster-bg-color-primary-4);
+}
+.monster-icon-tertiary-4-info:before {
+	background-color: var(--monster-color-tertiary-4);
+	color: var(--monster-bg-color-tertiary-4);
+}
+.monster-icon-secondary-4-info:before {
+	background-color: var(--monster-color-secondary-4);
+	color: var(--monster-bg-color-secondary-4);
+}
+.monster-icon-primary-4-info:before,
+.monster-icon-secondary-4-info:before,
+.monster-icon-tertiary-4-info:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-info-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-info-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m8.93 6.588-2.29.287-.082.38.45.083c.294.07.352.176.288.469l-.738 3.468c-.194.897.105 1.319.808 1.319.545 0 1.178-.252 1.465-.598l.088-.416c-.2.176-.492.246-.686.246-.275 0-.375-.193-.304-.533zM9 4.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0'/%3E%3C/svg%3E");
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-primary-1-on:before {
+	background-color: var(--monster-color-primary-1);
+	color: var(--monster-bg-color-primary-1);
+}
+.monster-icon-tertiary-1-on:before {
+	background-color: var(--monster-color-tertiary-1);
+	color: var(--monster-bg-color-tertiary-1);
+}
+.monster-icon-secondary-1-on:before {
+	background-color: var(--monster-color-secondary-1);
+	color: var(--monster-bg-color-secondary-1);
+}
+.monster-icon-primary-1-on:before,
+.monster-icon-secondary-1-on:before,
+.monster-icon-tertiary-1-on:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-toggle-on' viewBox='0 0 16 16'%3E%3Cpath d='M5 3a5 5 0 0 0 0 10h6a5 5 0 0 0 0-10zm6 9a4 4 0 1 1 0-8 4 4 0 0 1 0 8'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-toggle-on' viewBox='0 0 16 16'%3E%3Cpath d='M5 3a5 5 0 0 0 0 10h6a5 5 0 0 0 0-10zm6 9a4 4 0 1 1 0-8 4 4 0 0 1 0 8'/%3E%3C/svg%3E");
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-primary-2-on:before {
+	background-color: var(--monster-color-primary-2);
+	color: var(--monster-bg-color-primary-2);
+}
+.monster-icon-tertiary-2-on:before {
+	background-color: var(--monster-color-tertiary-2);
+	color: var(--monster-bg-color-tertiary-2);
+}
+.monster-icon-secondary-2-on:before {
+	background-color: var(--monster-color-secondary-2);
+	color: var(--monster-bg-color-secondary-2);
+}
+.monster-icon-primary-2-on:before,
+.monster-icon-secondary-2-on:before,
+.monster-icon-tertiary-2-on:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-toggle-on' viewBox='0 0 16 16'%3E%3Cpath d='M5 3a5 5 0 0 0 0 10h6a5 5 0 0 0 0-10zm6 9a4 4 0 1 1 0-8 4 4 0 0 1 0 8'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-toggle-on' viewBox='0 0 16 16'%3E%3Cpath d='M5 3a5 5 0 0 0 0 10h6a5 5 0 0 0 0-10zm6 9a4 4 0 1 1 0-8 4 4 0 0 1 0 8'/%3E%3C/svg%3E");
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-primary-3-on:before {
+	background-color: var(--monster-color-primary-3);
+	color: var(--monster-bg-color-primary-3);
+}
+.monster-icon-tertiary-3-on:before {
+	background-color: var(--monster-color-tertiary-3);
+	color: var(--monster-bg-color-tertiary-3);
+}
+.monster-icon-secondary-3-on:before {
+	background-color: var(--monster-color-secondary-3);
+	color: var(--monster-bg-color-secondary-3);
+}
+.monster-icon-primary-3-on:before,
+.monster-icon-secondary-3-on:before,
+.monster-icon-tertiary-3-on:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-toggle-on' viewBox='0 0 16 16'%3E%3Cpath d='M5 3a5 5 0 0 0 0 10h6a5 5 0 0 0 0-10zm6 9a4 4 0 1 1 0-8 4 4 0 0 1 0 8'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-toggle-on' viewBox='0 0 16 16'%3E%3Cpath d='M5 3a5 5 0 0 0 0 10h6a5 5 0 0 0 0-10zm6 9a4 4 0 1 1 0-8 4 4 0 0 1 0 8'/%3E%3C/svg%3E");
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-primary-4-on:before {
+	background-color: var(--monster-color-primary-4);
+	color: var(--monster-bg-color-primary-4);
+}
+.monster-icon-tertiary-4-on:before {
+	background-color: var(--monster-color-tertiary-4);
+	color: var(--monster-bg-color-tertiary-4);
+}
+.monster-icon-secondary-4-on:before {
+	background-color: var(--monster-color-secondary-4);
+	color: var(--monster-bg-color-secondary-4);
+}
+.monster-icon-primary-4-on:before,
+.monster-icon-secondary-4-on:before,
+.monster-icon-tertiary-4-on:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-toggle-on' viewBox='0 0 16 16'%3E%3Cpath d='M5 3a5 5 0 0 0 0 10h6a5 5 0 0 0 0-10zm6 9a4 4 0 1 1 0-8 4 4 0 0 1 0 8'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-toggle-on' viewBox='0 0 16 16'%3E%3Cpath d='M5 3a5 5 0 0 0 0 10h6a5 5 0 0 0 0-10zm6 9a4 4 0 1 1 0-8 4 4 0 0 1 0 8'/%3E%3C/svg%3E");
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-primary-1-off:before {
+	background-color: var(--monster-color-primary-1);
+	color: var(--monster-bg-color-primary-1);
+}
+.monster-icon-tertiary-1-off:before {
+	background-color: var(--monster-color-tertiary-1);
+	color: var(--monster-bg-color-tertiary-1);
+}
+.monster-icon-secondary-1-off:before {
+	background-color: var(--monster-color-secondary-1);
+	color: var(--monster-bg-color-secondary-1);
+}
+.monster-icon-primary-1-off:before,
+.monster-icon-secondary-1-off:before,
+.monster-icon-tertiary-1-off:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M11 4a4 4 0 0 1 0 8H8a5 5 0 0 0 2-4 5 5 0 0 0-2-4zm-6 8a4 4 0 1 1 0-8 4 4 0 0 1 0 8M0 8a5 5 0 0 0 5 5h6a5 5 0 0 0 0-10H5a5 5 0 0 0-5 5'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M11 4a4 4 0 0 1 0 8H8a5 5 0 0 0 2-4 5 5 0 0 0-2-4zm-6 8a4 4 0 1 1 0-8 4 4 0 0 1 0 8M0 8a5 5 0 0 0 5 5h6a5 5 0 0 0 0-10H5a5 5 0 0 0-5 5'/%3E%3C/svg%3E");
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-primary-2-off:before {
+	background-color: var(--monster-color-primary-2);
+	color: var(--monster-bg-color-primary-2);
+}
+.monster-icon-tertiary-2-off:before {
+	background-color: var(--monster-color-tertiary-2);
+	color: var(--monster-bg-color-tertiary-2);
+}
+.monster-icon-secondary-2-off:before {
+	background-color: var(--monster-color-secondary-2);
+	color: var(--monster-bg-color-secondary-2);
+}
+.monster-icon-primary-2-off:before,
+.monster-icon-secondary-2-off:before,
+.monster-icon-tertiary-2-off:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M11 4a4 4 0 0 1 0 8H8a5 5 0 0 0 2-4 5 5 0 0 0-2-4zm-6 8a4 4 0 1 1 0-8 4 4 0 0 1 0 8M0 8a5 5 0 0 0 5 5h6a5 5 0 0 0 0-10H5a5 5 0 0 0-5 5'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M11 4a4 4 0 0 1 0 8H8a5 5 0 0 0 2-4 5 5 0 0 0-2-4zm-6 8a4 4 0 1 1 0-8 4 4 0 0 1 0 8M0 8a5 5 0 0 0 5 5h6a5 5 0 0 0 0-10H5a5 5 0 0 0-5 5'/%3E%3C/svg%3E");
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-primary-3-off:before {
+	background-color: var(--monster-color-primary-3);
+	color: var(--monster-bg-color-primary-3);
+}
+.monster-icon-tertiary-3-off:before {
+	background-color: var(--monster-color-tertiary-3);
+	color: var(--monster-bg-color-tertiary-3);
+}
+.monster-icon-secondary-3-off:before {
+	background-color: var(--monster-color-secondary-3);
+	color: var(--monster-bg-color-secondary-3);
+}
+.monster-icon-primary-3-off:before,
+.monster-icon-secondary-3-off:before,
+.monster-icon-tertiary-3-off:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M11 4a4 4 0 0 1 0 8H8a5 5 0 0 0 2-4 5 5 0 0 0-2-4zm-6 8a4 4 0 1 1 0-8 4 4 0 0 1 0 8M0 8a5 5 0 0 0 5 5h6a5 5 0 0 0 0-10H5a5 5 0 0 0-5 5'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M11 4a4 4 0 0 1 0 8H8a5 5 0 0 0 2-4 5 5 0 0 0-2-4zm-6 8a4 4 0 1 1 0-8 4 4 0 0 1 0 8M0 8a5 5 0 0 0 5 5h6a5 5 0 0 0 0-10H5a5 5 0 0 0-5 5'/%3E%3C/svg%3E");
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-primary-4-off:before {
+	background-color: var(--monster-color-primary-4);
+	color: var(--monster-bg-color-primary-4);
+}
+.monster-icon-tertiary-4-off:before {
+	background-color: var(--monster-color-tertiary-4);
+	color: var(--monster-bg-color-tertiary-4);
+}
+.monster-icon-secondary-4-off:before {
+	background-color: var(--monster-color-secondary-4);
+	color: var(--monster-bg-color-secondary-4);
+}
+.monster-icon-primary-4-off:before,
+.monster-icon-secondary-4-off:before,
+.monster-icon-tertiary-4-off:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M11 4a4 4 0 0 1 0 8H8a5 5 0 0 0 2-4 5 5 0 0 0-2-4zm-6 8a4 4 0 1 1 0-8 4 4 0 0 1 0 8M0 8a5 5 0 0 0 5 5h6a5 5 0 0 0 0-10H5a5 5 0 0 0-5 5'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M11 4a4 4 0 0 1 0 8H8a5 5 0 0 0 2-4 5 5 0 0 0-2-4zm-6 8a4 4 0 1 1 0-8 4 4 0 0 1 0 8M0 8a5 5 0 0 0 5 5h6a5 5 0 0 0 0-10H5a5 5 0 0 0-5 5'/%3E%3C/svg%3E");
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-primary-1-positiv:before {
+	background-color: var(--monster-color-primary-1);
+	color: var(--monster-bg-color-primary-1);
+}
+.monster-icon-tertiary-1-positiv:before {
+	background-color: var(--monster-color-tertiary-1);
+	color: var(--monster-bg-color-tertiary-1);
+}
+.monster-icon-secondary-1-positiv:before {
+	background-color: var(--monster-color-secondary-1);
+	color: var(--monster-bg-color-secondary-1);
+}
+.monster-icon-primary-1-positiv:before,
+.monster-icon-secondary-1-positiv:before,
+.monster-icon-tertiary-1-positiv:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E");
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-primary-2-positiv:before {
+	background-color: var(--monster-color-primary-2);
+	color: var(--monster-bg-color-primary-2);
+}
+.monster-icon-tertiary-2-positiv:before {
+	background-color: var(--monster-color-tertiary-2);
+	color: var(--monster-bg-color-tertiary-2);
+}
+.monster-icon-secondary-2-positiv:before {
+	background-color: var(--monster-color-secondary-2);
+	color: var(--monster-bg-color-secondary-2);
+}
+.monster-icon-primary-2-positiv:before,
+.monster-icon-secondary-2-positiv:before,
+.monster-icon-tertiary-2-positiv:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E");
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-primary-3-positiv:before {
+	background-color: var(--monster-color-primary-3);
+	color: var(--monster-bg-color-primary-3);
+}
+.monster-icon-tertiary-3-positiv:before {
+	background-color: var(--monster-color-tertiary-3);
+	color: var(--monster-bg-color-tertiary-3);
+}
+.monster-icon-secondary-3-positiv:before {
+	background-color: var(--monster-color-secondary-3);
+	color: var(--monster-bg-color-secondary-3);
+}
+.monster-icon-primary-3-positiv:before,
+.monster-icon-secondary-3-positiv:before,
+.monster-icon-tertiary-3-positiv:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E");
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-primary-4-positiv:before {
+	background-color: var(--monster-color-primary-4);
+	color: var(--monster-bg-color-primary-4);
+}
+.monster-icon-tertiary-4-positiv:before {
+	background-color: var(--monster-color-tertiary-4);
+	color: var(--monster-bg-color-tertiary-4);
+}
+.monster-icon-secondary-4-positiv:before {
+	background-color: var(--monster-color-secondary-4);
+	color: var(--monster-bg-color-secondary-4);
+}
+.monster-icon-primary-4-positiv:before,
+.monster-icon-secondary-4-positiv:before,
+.monster-icon-tertiary-4-positiv:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E");
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-primary-1-negativ:before {
+	background-color: var(--monster-color-primary-1);
+	color: var(--monster-bg-color-primary-1);
+}
+.monster-icon-tertiary-1-negativ:before {
+	background-color: var(--monster-color-tertiary-1);
+	color: var(--monster-bg-color-tertiary-1);
+}
+.monster-icon-secondary-1-negativ:before {
+	background-color: var(--monster-color-secondary-1);
+	color: var(--monster-bg-color-secondary-1);
+}
+.monster-icon-primary-1-negativ:before,
+.monster-icon-secondary-1-negativ:before,
+.monster-icon-tertiary-1-negativ:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-primary-2-negativ:before {
+	background-color: var(--monster-color-primary-2);
+	color: var(--monster-bg-color-primary-2);
+}
+.monster-icon-tertiary-2-negativ:before {
+	background-color: var(--monster-color-tertiary-2);
+	color: var(--monster-bg-color-tertiary-2);
+}
+.monster-icon-secondary-2-negativ:before {
+	background-color: var(--monster-color-secondary-2);
+	color: var(--monster-bg-color-secondary-2);
+}
+.monster-icon-primary-2-negativ:before,
+.monster-icon-secondary-2-negativ:before,
+.monster-icon-tertiary-2-negativ:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-primary-3-negativ:before {
+	background-color: var(--monster-color-primary-3);
+	color: var(--monster-bg-color-primary-3);
+}
+.monster-icon-tertiary-3-negativ:before {
+	background-color: var(--monster-color-tertiary-3);
+	color: var(--monster-bg-color-tertiary-3);
+}
+.monster-icon-secondary-3-negativ:before {
+	background-color: var(--monster-color-secondary-3);
+	color: var(--monster-bg-color-secondary-3);
+}
+.monster-icon-primary-3-negativ:before,
+.monster-icon-secondary-3-negativ:before,
+.monster-icon-tertiary-3-negativ:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-primary-4-negativ:before {
+	background-color: var(--monster-color-primary-4);
+	color: var(--monster-bg-color-primary-4);
+}
+.monster-icon-tertiary-4-negativ:before {
+	background-color: var(--monster-color-tertiary-4);
+	color: var(--monster-bg-color-tertiary-4);
+}
+.monster-icon-secondary-4-negativ:before {
+	background-color: var(--monster-color-secondary-4);
+	color: var(--monster-bg-color-secondary-4);
+}
+.monster-icon-primary-4-negativ:before,
+.monster-icon-secondary-4-negativ:before,
+.monster-icon-tertiary-4-negativ:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-primary-1-warning:before {
+	background-color: var(--monster-color-primary-1);
+	color: var(--monster-bg-color-primary-1);
+}
+.monster-icon-tertiary-1-warning:before {
+	background-color: var(--monster-color-tertiary-1);
+	color: var(--monster-bg-color-tertiary-1);
+}
+.monster-icon-secondary-1-warning:before {
+	background-color: var(--monster-color-secondary-1);
+	color: var(--monster-bg-color-secondary-1);
+}
+.monster-icon-primary-1-warning:before,
+.monster-icon-secondary-1-warning:before,
+.monster-icon-tertiary-1-warning:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E");
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-primary-2-warning:before {
+	background-color: var(--monster-color-primary-2);
+	color: var(--monster-bg-color-primary-2);
+}
+.monster-icon-tertiary-2-warning:before {
+	background-color: var(--monster-color-tertiary-2);
+	color: var(--monster-bg-color-tertiary-2);
+}
+.monster-icon-secondary-2-warning:before {
+	background-color: var(--monster-color-secondary-2);
+	color: var(--monster-bg-color-secondary-2);
+}
+.monster-icon-primary-2-warning:before,
+.monster-icon-secondary-2-warning:before,
+.monster-icon-tertiary-2-warning:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E");
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-primary-3-warning:before {
+	background-color: var(--monster-color-primary-3);
+	color: var(--monster-bg-color-primary-3);
+}
+.monster-icon-tertiary-3-warning:before {
+	background-color: var(--monster-color-tertiary-3);
+	color: var(--monster-bg-color-tertiary-3);
+}
+.monster-icon-secondary-3-warning:before {
+	background-color: var(--monster-color-secondary-3);
+	color: var(--monster-bg-color-secondary-3);
+}
+.monster-icon-primary-3-warning:before,
+.monster-icon-secondary-3-warning:before,
+.monster-icon-tertiary-3-warning:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E");
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-primary-4-warning:before {
+	background-color: var(--monster-color-primary-4);
+	color: var(--monster-bg-color-primary-4);
+}
+.monster-icon-tertiary-4-warning:before {
+	background-color: var(--monster-color-tertiary-4);
+	color: var(--monster-bg-color-tertiary-4);
+}
+.monster-icon-secondary-4-warning:before {
+	background-color: var(--monster-color-secondary-4);
+	color: var(--monster-bg-color-secondary-4);
+}
+.monster-icon-primary-4-warning:before,
+.monster-icon-secondary-4-warning:before,
+.monster-icon-tertiary-4-warning:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E");
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-primary-1-neutral:before {
+	background-color: var(--monster-color-primary-1);
+	color: var(--monster-bg-color-primary-1);
+}
+.monster-icon-tertiary-1-neutral:before {
+	background-color: var(--monster-color-tertiary-1);
+	color: var(--monster-bg-color-tertiary-1);
+}
+.monster-icon-secondary-1-neutral:before {
+	background-color: var(--monster-color-secondary-1);
+	color: var(--monster-bg-color-secondary-1);
+}
+.monster-icon-primary-1-neutral:before,
+.monster-icon-secondary-1-neutral:before,
+.monster-icon-tertiary-1-neutral:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E");
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-primary-2-neutral:before {
+	background-color: var(--monster-color-primary-2);
+	color: var(--monster-bg-color-primary-2);
+}
+.monster-icon-tertiary-2-neutral:before {
+	background-color: var(--monster-color-tertiary-2);
+	color: var(--monster-bg-color-tertiary-2);
+}
+.monster-icon-secondary-2-neutral:before {
+	background-color: var(--monster-color-secondary-2);
+	color: var(--monster-bg-color-secondary-2);
+}
+.monster-icon-primary-2-neutral:before,
+.monster-icon-secondary-2-neutral:before,
+.monster-icon-tertiary-2-neutral:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E");
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-primary-3-neutral:before {
+	background-color: var(--monster-color-primary-3);
+	color: var(--monster-bg-color-primary-3);
+}
+.monster-icon-tertiary-3-neutral:before {
+	background-color: var(--monster-color-tertiary-3);
+	color: var(--monster-bg-color-tertiary-3);
+}
+.monster-icon-secondary-3-neutral:before {
+	background-color: var(--monster-color-secondary-3);
+	color: var(--monster-bg-color-secondary-3);
+}
+.monster-icon-primary-3-neutral:before,
+.monster-icon-secondary-3-neutral:before,
+.monster-icon-tertiary-3-neutral:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E");
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-primary-4-neutral:before {
+	background-color: var(--monster-color-primary-4);
+	color: var(--monster-bg-color-primary-4);
+}
+.monster-icon-tertiary-4-neutral:before {
+	background-color: var(--monster-color-tertiary-4);
+	color: var(--monster-bg-color-tertiary-4);
+}
+.monster-icon-secondary-4-neutral:before {
+	background-color: var(--monster-color-secondary-4);
+	color: var(--monster-bg-color-secondary-4);
+}
+.monster-icon-primary-4-neutral:before,
+.monster-icon-secondary-4-neutral:before,
+.monster-icon-tertiary-4-neutral:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E");
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-primary-1-question:before {
+	background-color: var(--monster-color-primary-1);
+	color: var(--monster-bg-color-primary-1);
+}
+.monster-icon-tertiary-1-question:before {
+	background-color: var(--monster-color-tertiary-1);
+	color: var(--monster-bg-color-tertiary-1);
+}
+.monster-icon-secondary-1-question:before {
+	background-color: var(--monster-color-secondary-1);
+	color: var(--monster-bg-color-secondary-1);
+}
+.monster-icon-primary-1-question:before,
+.monster-icon-secondary-1-question:before,
+.monster-icon-tertiary-1-question:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286m1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286m1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94'/%3E%3C/svg%3E");
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-primary-2-question:before {
+	background-color: var(--monster-color-primary-2);
+	color: var(--monster-bg-color-primary-2);
+}
+.monster-icon-tertiary-2-question:before {
+	background-color: var(--monster-color-tertiary-2);
+	color: var(--monster-bg-color-tertiary-2);
+}
+.monster-icon-secondary-2-question:before {
+	background-color: var(--monster-color-secondary-2);
+	color: var(--monster-bg-color-secondary-2);
+}
+.monster-icon-primary-2-question:before,
+.monster-icon-secondary-2-question:before,
+.monster-icon-tertiary-2-question:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286m1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286m1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94'/%3E%3C/svg%3E");
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-primary-3-question:before {
+	background-color: var(--monster-color-primary-3);
+	color: var(--monster-bg-color-primary-3);
+}
+.monster-icon-tertiary-3-question:before {
+	background-color: var(--monster-color-tertiary-3);
+	color: var(--monster-bg-color-tertiary-3);
+}
+.monster-icon-secondary-3-question:before {
+	background-color: var(--monster-color-secondary-3);
+	color: var(--monster-bg-color-secondary-3);
+}
+.monster-icon-primary-3-question:before,
+.monster-icon-secondary-3-question:before,
+.monster-icon-tertiary-3-question:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286m1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286m1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94'/%3E%3C/svg%3E");
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-primary-4-question:before {
+	background-color: var(--monster-color-primary-4);
+	color: var(--monster-bg-color-primary-4);
+}
+.monster-icon-tertiary-4-question:before {
+	background-color: var(--monster-color-tertiary-4);
+	color: var(--monster-bg-color-tertiary-4);
+}
+.monster-icon-secondary-4-question:before {
+	background-color: var(--monster-color-secondary-4);
+	color: var(--monster-bg-color-secondary-4);
+}
+.monster-icon-primary-4-question:before,
+.monster-icon-secondary-4-question:before,
+.monster-icon-tertiary-4-question:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286m1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286m1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94'/%3E%3C/svg%3E");
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-primary-1-plus:before {
+	background-color: var(--monster-color-primary-1);
+	color: var(--monster-bg-color-primary-1);
+}
+.monster-icon-tertiary-1-plus:before {
+	background-color: var(--monster-color-tertiary-1);
+	color: var(--monster-bg-color-tertiary-1);
+}
+.monster-icon-secondary-1-plus:before {
+	background-color: var(--monster-color-secondary-1);
+	color: var(--monster-bg-color-secondary-1);
+}
+.monster-icon-primary-1-plus:before,
+.monster-icon-secondary-1-plus:before,
+.monster-icon-tertiary-1-plus:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4'/%3E%3C/svg%3E");
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-primary-2-plus:before {
+	background-color: var(--monster-color-primary-2);
+	color: var(--monster-bg-color-primary-2);
+}
+.monster-icon-tertiary-2-plus:before {
+	background-color: var(--monster-color-tertiary-2);
+	color: var(--monster-bg-color-tertiary-2);
+}
+.monster-icon-secondary-2-plus:before {
+	background-color: var(--monster-color-secondary-2);
+	color: var(--monster-bg-color-secondary-2);
+}
+.monster-icon-primary-2-plus:before,
+.monster-icon-secondary-2-plus:before,
+.monster-icon-tertiary-2-plus:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4'/%3E%3C/svg%3E");
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-primary-3-plus:before {
+	background-color: var(--monster-color-primary-3);
+	color: var(--monster-bg-color-primary-3);
+}
+.monster-icon-tertiary-3-plus:before {
+	background-color: var(--monster-color-tertiary-3);
+	color: var(--monster-bg-color-tertiary-3);
+}
+.monster-icon-secondary-3-plus:before {
+	background-color: var(--monster-color-secondary-3);
+	color: var(--monster-bg-color-secondary-3);
+}
+.monster-icon-primary-3-plus:before,
+.monster-icon-secondary-3-plus:before,
+.monster-icon-tertiary-3-plus:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4'/%3E%3C/svg%3E");
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-primary-4-plus:before {
+	background-color: var(--monster-color-primary-4);
+	color: var(--monster-bg-color-primary-4);
+}
+.monster-icon-tertiary-4-plus:before {
+	background-color: var(--monster-color-tertiary-4);
+	color: var(--monster-bg-color-tertiary-4);
+}
+.monster-icon-secondary-4-plus:before {
+	background-color: var(--monster-color-secondary-4);
+	color: var(--monster-bg-color-secondary-4);
+}
+.monster-icon-primary-4-plus:before,
+.monster-icon-secondary-4-plus:before,
+.monster-icon-tertiary-4-plus:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4'/%3E%3C/svg%3E");
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-primary-1-dash:before {
+	background-color: var(--monster-color-primary-1);
+	color: var(--monster-bg-color-primary-1);
+}
+.monster-icon-tertiary-1-dash:before {
+	background-color: var(--monster-color-tertiary-1);
+	color: var(--monster-bg-color-tertiary-1);
+}
+.monster-icon-secondary-1-dash:before {
+	background-color: var(--monster-color-secondary-1);
+	color: var(--monster-bg-color-secondary-1);
+}
+.monster-icon-primary-1-dash:before,
+.monster-icon-secondary-1-dash:before,
+.monster-icon-tertiary-1-dash:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E");
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-primary-2-dash:before {
+	background-color: var(--monster-color-primary-2);
+	color: var(--monster-bg-color-primary-2);
+}
+.monster-icon-tertiary-2-dash:before {
+	background-color: var(--monster-color-tertiary-2);
+	color: var(--monster-bg-color-tertiary-2);
+}
+.monster-icon-secondary-2-dash:before {
+	background-color: var(--monster-color-secondary-2);
+	color: var(--monster-bg-color-secondary-2);
+}
+.monster-icon-primary-2-dash:before,
+.monster-icon-secondary-2-dash:before,
+.monster-icon-tertiary-2-dash:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E");
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-primary-3-dash:before {
+	background-color: var(--monster-color-primary-3);
+	color: var(--monster-bg-color-primary-3);
+}
+.monster-icon-tertiary-3-dash:before {
+	background-color: var(--monster-color-tertiary-3);
+	color: var(--monster-bg-color-tertiary-3);
+}
+.monster-icon-secondary-3-dash:before {
+	background-color: var(--monster-color-secondary-3);
+	color: var(--monster-bg-color-secondary-3);
+}
+.monster-icon-primary-3-dash:before,
+.monster-icon-secondary-3-dash:before,
+.monster-icon-tertiary-3-dash:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E");
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-primary-4-dash:before {
+	background-color: var(--monster-color-primary-4);
+	color: var(--monster-bg-color-primary-4);
+}
+.monster-icon-tertiary-4-dash:before {
+	background-color: var(--monster-color-tertiary-4);
+	color: var(--monster-bg-color-tertiary-4);
+}
+.monster-icon-secondary-4-dash:before {
+	background-color: var(--monster-color-secondary-4);
+	color: var(--monster-bg-color-secondary-4);
+}
+.monster-icon-primary-4-dash:before,
+.monster-icon-secondary-4-dash:before,
+.monster-icon-tertiary-4-dash:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8'/%3E%3C/svg%3E");
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-primary-1-gear:before {
+	background-color: var(--monster-color-primary-1);
+	color: var(--monster-bg-color-primary-1);
+}
+.monster-icon-tertiary-1-gear:before {
+	background-color: var(--monster-color-tertiary-1);
+	color: var(--monster-bg-color-tertiary-1);
+}
+.monster-icon-secondary-1-gear:before {
+	background-color: var(--monster-color-secondary-1);
+	color: var(--monster-bg-color-secondary-1);
+}
+.monster-icon-primary-1-gear:before,
+.monster-icon-secondary-1-gear:before,
+.monster-icon-tertiary-1-gear:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492M5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0'/%3E%3Cpath d='M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115z'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492M5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0'/%3E%3Cpath d='M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115z'/%3E%3C/svg%3E");
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-primary-2-gear:before {
+	background-color: var(--monster-color-primary-2);
+	color: var(--monster-bg-color-primary-2);
+}
+.monster-icon-tertiary-2-gear:before {
+	background-color: var(--monster-color-tertiary-2);
+	color: var(--monster-bg-color-tertiary-2);
+}
+.monster-icon-secondary-2-gear:before {
+	background-color: var(--monster-color-secondary-2);
+	color: var(--monster-bg-color-secondary-2);
+}
+.monster-icon-primary-2-gear:before,
+.monster-icon-secondary-2-gear:before,
+.monster-icon-tertiary-2-gear:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492M5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0'/%3E%3Cpath d='M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115z'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492M5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0'/%3E%3Cpath d='M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115z'/%3E%3C/svg%3E");
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-primary-3-gear:before {
+	background-color: var(--monster-color-primary-3);
+	color: var(--monster-bg-color-primary-3);
+}
+.monster-icon-tertiary-3-gear:before {
+	background-color: var(--monster-color-tertiary-3);
+	color: var(--monster-bg-color-tertiary-3);
+}
+.monster-icon-secondary-3-gear:before {
+	background-color: var(--monster-color-secondary-3);
+	color: var(--monster-bg-color-secondary-3);
+}
+.monster-icon-primary-3-gear:before,
+.monster-icon-secondary-3-gear:before,
+.monster-icon-tertiary-3-gear:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492M5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0'/%3E%3Cpath d='M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115z'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492M5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0'/%3E%3Cpath d='M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115z'/%3E%3C/svg%3E");
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-primary-4-gear:before {
+	background-color: var(--monster-color-primary-4);
+	color: var(--monster-bg-color-primary-4);
+}
+.monster-icon-tertiary-4-gear:before {
+	background-color: var(--monster-color-tertiary-4);
+	color: var(--monster-bg-color-tertiary-4);
+}
+.monster-icon-secondary-4-gear:before {
+	background-color: var(--monster-color-secondary-4);
+	color: var(--monster-bg-color-secondary-4);
+}
+.monster-icon-primary-4-gear:before,
+.monster-icon-secondary-4-gear:before,
+.monster-icon-tertiary-4-gear:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492M5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0'/%3E%3Cpath d='M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115z'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492M5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0'/%3E%3Cpath d='M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115z'/%3E%3C/svg%3E");
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-primary-1-home:before {
+	background-color: var(--monster-color-primary-1);
+	color: var(--monster-bg-color-primary-1);
+}
+.monster-icon-tertiary-1-home:before {
+	background-color: var(--monster-color-tertiary-1);
+	color: var(--monster-bg-color-tertiary-1);
+}
+.monster-icon-secondary-1-home:before {
+	background-color: var(--monster-color-secondary-1);
+	color: var(--monster-bg-color-secondary-1);
+}
+.monster-icon-primary-1-home:before,
+.monster-icon-secondary-1-home:before,
+.monster-icon-tertiary-1-home:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L2 8.207V13.5A1.5 1.5 0 0 0 3.5 15h9a1.5 1.5 0 0 0 1.5-1.5V8.207l.646.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293zM13 7.207V13.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V7.207l5-5z'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L2 8.207V13.5A1.5 1.5 0 0 0 3.5 15h9a1.5 1.5 0 0 0 1.5-1.5V8.207l.646.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293zM13 7.207V13.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V7.207l5-5z'/%3E%3C/svg%3E");
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-primary-2-home:before {
+	background-color: var(--monster-color-primary-2);
+	color: var(--monster-bg-color-primary-2);
+}
+.monster-icon-tertiary-2-home:before {
+	background-color: var(--monster-color-tertiary-2);
+	color: var(--monster-bg-color-tertiary-2);
+}
+.monster-icon-secondary-2-home:before {
+	background-color: var(--monster-color-secondary-2);
+	color: var(--monster-bg-color-secondary-2);
+}
+.monster-icon-primary-2-home:before,
+.monster-icon-secondary-2-home:before,
+.monster-icon-tertiary-2-home:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L2 8.207V13.5A1.5 1.5 0 0 0 3.5 15h9a1.5 1.5 0 0 0 1.5-1.5V8.207l.646.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293zM13 7.207V13.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V7.207l5-5z'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L2 8.207V13.5A1.5 1.5 0 0 0 3.5 15h9a1.5 1.5 0 0 0 1.5-1.5V8.207l.646.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293zM13 7.207V13.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V7.207l5-5z'/%3E%3C/svg%3E");
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-primary-3-home:before {
+	background-color: var(--monster-color-primary-3);
+	color: var(--monster-bg-color-primary-3);
+}
+.monster-icon-tertiary-3-home:before {
+	background-color: var(--monster-color-tertiary-3);
+	color: var(--monster-bg-color-tertiary-3);
+}
+.monster-icon-secondary-3-home:before {
+	background-color: var(--monster-color-secondary-3);
+	color: var(--monster-bg-color-secondary-3);
+}
+.monster-icon-primary-3-home:before,
+.monster-icon-secondary-3-home:before,
+.monster-icon-tertiary-3-home:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L2 8.207V13.5A1.5 1.5 0 0 0 3.5 15h9a1.5 1.5 0 0 0 1.5-1.5V8.207l.646.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293zM13 7.207V13.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V7.207l5-5z'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L2 8.207V13.5A1.5 1.5 0 0 0 3.5 15h9a1.5 1.5 0 0 0 1.5-1.5V8.207l.646.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293zM13 7.207V13.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V7.207l5-5z'/%3E%3C/svg%3E");
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-primary-4-home:before {
+	background-color: var(--monster-color-primary-4);
+	color: var(--monster-bg-color-primary-4);
+}
+.monster-icon-tertiary-4-home:before {
+	background-color: var(--monster-color-tertiary-4);
+	color: var(--monster-bg-color-tertiary-4);
+}
+.monster-icon-secondary-4-home:before {
+	background-color: var(--monster-color-secondary-4);
+	color: var(--monster-bg-color-secondary-4);
+}
+.monster-icon-primary-4-home:before,
+.monster-icon-secondary-4-home:before,
+.monster-icon-tertiary-4-home:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L2 8.207V13.5A1.5 1.5 0 0 0 3.5 15h9a1.5 1.5 0 0 0 1.5-1.5V8.207l.646.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293zM13 7.207V13.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V7.207l5-5z'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L2 8.207V13.5A1.5 1.5 0 0 0 3.5 15h9a1.5 1.5 0 0 0 1.5-1.5V8.207l.646.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293zM13 7.207V13.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V7.207l5-5z'/%3E%3C/svg%3E");
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-primary-1-counterclockwise:before {
+	background-color: var(--monster-color-primary-1);
+	color: var(--monster-bg-color-primary-1);
+}
+.monster-icon-tertiary-1-counterclockwise:before {
+	background-color: var(--monster-color-tertiary-1);
+	color: var(--monster-bg-color-tertiary-1);
+}
+.monster-icon-secondary-1-counterclockwise:before {
+	background-color: var(--monster-color-secondary-1);
+	color: var(--monster-bg-color-secondary-1);
+}
+.monster-icon-primary-1-counterclockwise:before,
+.monster-icon-secondary-1-counterclockwise:before,
+.monster-icon-tertiary-1-counterclockwise:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2z'/%3E%3Cpath d='M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2z'/%3E%3Cpath d='M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466'/%3E%3C/svg%3E");
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-primary-2-counterclockwise:before {
+	background-color: var(--monster-color-primary-2);
+	color: var(--monster-bg-color-primary-2);
+}
+.monster-icon-tertiary-2-counterclockwise:before {
+	background-color: var(--monster-color-tertiary-2);
+	color: var(--monster-bg-color-tertiary-2);
+}
+.monster-icon-secondary-2-counterclockwise:before {
+	background-color: var(--monster-color-secondary-2);
+	color: var(--monster-bg-color-secondary-2);
+}
+.monster-icon-primary-2-counterclockwise:before,
+.monster-icon-secondary-2-counterclockwise:before,
+.monster-icon-tertiary-2-counterclockwise:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2z'/%3E%3Cpath d='M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2z'/%3E%3Cpath d='M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466'/%3E%3C/svg%3E");
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-primary-3-counterclockwise:before {
+	background-color: var(--monster-color-primary-3);
+	color: var(--monster-bg-color-primary-3);
+}
+.monster-icon-tertiary-3-counterclockwise:before {
+	background-color: var(--monster-color-tertiary-3);
+	color: var(--monster-bg-color-tertiary-3);
+}
+.monster-icon-secondary-3-counterclockwise:before {
+	background-color: var(--monster-color-secondary-3);
+	color: var(--monster-bg-color-secondary-3);
+}
+.monster-icon-primary-3-counterclockwise:before,
+.monster-icon-secondary-3-counterclockwise:before,
+.monster-icon-tertiary-3-counterclockwise:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2z'/%3E%3Cpath d='M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2z'/%3E%3Cpath d='M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466'/%3E%3C/svg%3E");
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-primary-4-counterclockwise:before {
+	background-color: var(--monster-color-primary-4);
+	color: var(--monster-bg-color-primary-4);
+}
+.monster-icon-tertiary-4-counterclockwise:before {
+	background-color: var(--monster-color-tertiary-4);
+	color: var(--monster-bg-color-tertiary-4);
+}
+.monster-icon-secondary-4-counterclockwise:before {
+	background-color: var(--monster-color-secondary-4);
+	color: var(--monster-bg-color-secondary-4);
+}
+.monster-icon-primary-4-counterclockwise:before,
+.monster-icon-secondary-4-counterclockwise:before,
+.monster-icon-tertiary-4-counterclockwise:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2z'/%3E%3Cpath d='M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2z'/%3E%3Cpath d='M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466'/%3E%3C/svg%3E");
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-success-2:before {
+	background-color: var(--monster-color-success-2);
+	color: var(--monster-bg-color-success-2);
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E");
+}
+.monster-icon-warning-2:before {
+	background-color: var(--monster-color-warning-2);
+	color: var(--monster-bg-color-warning-2);
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E");
+}
+.monster-icon-error-2:before {
+	background-color: var(--monster-color-error-2);
+	color: var(--monster-bg-color-error-2);
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");
+}
+.monster-icon-error-2:before,
+.monster-icon-success-2:before,
+.monster-icon-warning-2:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-success-3:before {
+	background-color: var(--monster-color-success-3);
+	color: var(--monster-bg-color-success-3);
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E");
+}
+.monster-icon-warning-3:before {
+	background-color: var(--monster-color-warning-3);
+	color: var(--monster-bg-color-warning-3);
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E");
+}
+.monster-icon-error-3:before {
+	background-color: var(--monster-color-error-3);
+	color: var(--monster-bg-color-error-3);
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");
+}
+.monster-icon-error-3:before,
+.monster-icon-success-3:before,
+.monster-icon-warning-3:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-success-1:before {
+	background-color: var(--monster-bg-color-success-1);
+	color: var(--monster-color-success-1);
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-check-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-check-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E");
+}
+.monster-icon-warning-1:before {
+	background-color: var(--monster-bg-color-warning-1);
+	color: var(--monster-color-warning-1);
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-exclamation-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-exclamation-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E");
+}
+.monster-icon-error-1:before {
+	background-color: var(--monster-bg-color-error-1);
+	color: var(--monster-color-error-1);
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-x-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-x-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");
+}
+.monster-icon-error-1:before,
+.monster-icon-success-1:before,
+.monster-icon-warning-1:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
+.monster-icon-success-4:before {
+	background-color: var(--monster-bg-color-success-4);
+	color: var(--monster-color-success-4);
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-check-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-check-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='m10.97 4.97-.02.022-3.473 4.425-2.093-2.094a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05'/%3E%3C/svg%3E");
+}
+.monster-icon-warning-4:before {
+	background-color: var(--monster-bg-color-warning-4);
+	color: var(--monster-color-warning-4);
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-exclamation-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-exclamation-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0M7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0z'/%3E%3C/svg%3E");
+}
+.monster-icon-error-4:before {
+	background-color: var(--monster-bg-color-error-4);
+	color: var(--monster-color-error-4);
+	-webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-x-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");
+	mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-x-circle' viewBox='0 0 16 16'%3E%3Cpath d='M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16'/%3E%3Cpath d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");
+}
+.monster-icon-error-4:before,
+.monster-icon-success-4:before,
+.monster-icon-warning-4:before {
+	content: "";
+	display: inline-block;
+	height: 1em;
+	-webkit-mask-position: center;
+	mask-position: center;
+	-webkit-mask-repeat: no-repeat;
+	mask-repeat: no-repeat;
+	-webkit-mask-size: contain;
+	mask-size: contain;
+	width: 1em;
+}
diff --git a/source/components/style/link.css b/source/components/style/link.css
index 8827fa609d71bbb5f3ebb21de07f10f82e2e414f..36929f1427042cc4e5997f222c778df2cecd48bb 100644
--- a/source/components/style/link.css
+++ b/source/components/style/link.css
@@ -1,2 +1,38 @@
 /** generated from link.pcss **/
-a,a:active,a:focus,a:hover,a:link,a:visited{color:var(--monster-color-secondary-1);outline:none;text-decoration:none;transition:color .3s ease-in-out,text-decoration-color .3s ease-in-out}a:active,a:focus,a:hover{color:var(--monster-color-primary-2);text-decoration:underline;text-decoration-color:var(--monster-color-secondary-1 );text-decoration-thickness:1px;text-underline-offset:2px}a:focus{outline:1px dashed var(--monster-color-selection-1);outline-offset:2px}@media (prefers-color-scheme:dark){a,a:active,a:focus,a:hover,a:link,a:visited{color:var(--monster-color-amber-2)}a:focus{outline:1px dashed var(--monster-color-selection-4)}}
\ No newline at end of file
+a,
+a:active,
+a:focus,
+a:hover,
+a:link,
+a:visited {
+	color: var(--monster-color-secondary-1);
+	outline: none;
+	text-decoration: none;
+	transition: color .3s ease-in-out, text-decoration-color .3s ease-in-out;
+}
+a:active,
+a:focus,
+a:hover {
+	color: var(--monster-color-primary-2);
+	text-decoration: underline;
+	text-decoration-color: var(--monster-color-secondary-1);
+	text-decoration-thickness: 1px;
+	text-underline-offset: 2px;
+}
+a:focus {
+	outline: 1px dashed var(--monster-color-selection-1);
+	outline-offset: 2px;
+}
+@media (prefers-color-scheme: dark) {
+	a,
+	a:active,
+	a:focus,
+	a:hover,
+	a:link,
+	a:visited {
+		color: var(--monster-color-amber-2);
+	}
+	a:focus {
+		outline: 1px dashed var(--monster-color-selection-4);
+	}
+}
diff --git a/source/components/style/normalize.css b/source/components/style/normalize.css
index 7920e29c889b92ac39c24dee1d47cd5c5ca42f51..3fc9ec33f965e005b0bb29b0123958dce32aa3b4 100644
--- a/source/components/style/normalize.css
+++ b/source/components/style/normalize.css
@@ -1,2 +1,145 @@
 /** generated from normalize.pcss **/
-:where(html){line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}:where(h1){font-size:2em;margin-block-end:.67em;margin-block-start:.67em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-end:0;margin-block-start:0}:where(hr){box-sizing:content-box;color:inherit;height:0}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,pre,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(summary){display:list-item}html{height:100%}body,html{min-height:calc(100vh - 40px)}body{box-sizing:border-box;margin:0;padding:0;word-break:break-word}body:focus-visible{outline:none}:focus-visible{outline:none}
\ No newline at end of file
+:where(html) {
+	line-height: 1.15;
+	-webkit-text-size-adjust: 100%;
+	-moz-text-size-adjust: 100%;
+	text-size-adjust: 100%;
+}
+:where(h1) {
+	font-size: 2em;
+	margin-block-end: .67em;
+	margin-block-start: .67em;
+}
+:where(dl, ol, ul) :where(dl, ol, ul) {
+	margin-block-end: 0;
+	margin-block-start: 0;
+}
+:where(hr) {
+	box-sizing: content-box;
+	color: inherit;
+	height: 0;
+}
+:where(abbr[title]) {
+	text-decoration: underline;
+	-webkit-text-decoration: underline dotted;
+	text-decoration: underline dotted;
+}
+:where(b, strong) {
+	font-weight: bolder;
+}
+:where(code, kbd, pre, samp) {
+	font-family: monospace, monospace;
+	font-size: 1em;
+}
+:where(small) {
+	font-size: 80%;
+}
+:where(table) {
+	border-color: currentColor;
+	text-indent: 0;
+}
+:where(button, input, select) {
+	margin: 0;
+}
+:where(button) {
+	text-transform: none;
+}
+:where(
+		button,
+		input:is([type="button" i], [type="reset" i], [type="submit" i])
+	) {
+	-webkit-appearance: button;
+}
+:where(progress) {
+	vertical-align: baseline;
+}
+:where(select) {
+	text-transform: none;
+}
+:where(textarea) {
+	margin: 0;
+}
+:where(input[type="search" i]) {
+	-webkit-appearance: textfield;
+	outline-offset: -2px;
+}
+::-webkit-inner-spin-button,
+::-webkit-outer-spin-button {
+	height: auto;
+}
+::-webkit-input-placeholder {
+	color: inherit;
+	opacity: 0.54;
+}
+::-webkit-search-decoration {
+	-webkit-appearance: none;
+}
+::-webkit-file-upload-button {
+	-webkit-appearance: button;
+	font: inherit;
+}
+:where(
+		button,
+		input:is(
+				[type="button" i],
+				[type="color" i],
+				[type="reset" i],
+				[type="submit" i]
+			)
+	)::-moz-focus-inner {
+	border-style: none;
+	padding: 0;
+}
+:where(
+		button,
+		input:is(
+				[type="button" i],
+				[type="color" i],
+				[type="reset" i],
+				[type="submit" i]
+			)
+	)::-moz-focusring {
+	outline: 1px dotted ButtonText;
+}
+:where(:-moz-ui-invalid) {
+	box-shadow: none;
+}
+:where(dialog) {
+	background-color: #fff;
+	border: solid;
+	color: #000;
+	height: -moz-fit-content;
+	height: fit-content;
+	left: 0;
+	margin: auto;
+	padding: 1em;
+	position: absolute;
+	right: 0;
+	width: -moz-fit-content;
+	width: fit-content;
+}
+:where(dialog:not([open])) {
+	display: none;
+}
+:where(summary) {
+	display: list-item;
+}
+html {
+	height: 100%;
+}
+body,
+html {
+	min-height: calc(100vh - 40px);
+}
+body {
+	box-sizing: border-box;
+	margin: 0;
+	padding: 0;
+	word-break: break-word;
+}
+body:focus-visible {
+	outline: none;
+}
+:focus-visible {
+	outline: none;
+}
diff --git a/source/components/style/popper.css b/source/components/style/popper.css
index 19caf7b1e86bb57a99512275f0d61e532a16da79..3f75939f26a396670de1828dafa7555d8e14399a 100644
--- a/source/components/style/popper.css
+++ b/source/components/style/popper.css
@@ -1,2 +1,102 @@
 /** generated from popper.pcss **/
-div[data-monster-role=popper]{background:var(--monster-bg-color-primary-1);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);box-sizing:border-box;color:var(--monster-color-primary-1);display:none;padding:1.1em;z-index:var(--monster-z-index-modal)}[data-popper-arrow],[data-popper-arrow]:before{background:inherit;height:calc(max(var(--monster-popper-witharrrow-distance), -1*var(--monster-popper-witharrrow-distance))*2);position:absolute;width:calc(max(var(--monster-popper-witharrrow-distance), -1*var(--monster-popper-witharrrow-distance))*2)}[data-popper-arrow]{visibility:hidden}[data-popper-arrow]:before{box-sizing:border-box;content:"";transform:rotate(45deg);visibility:visible}div[data-popper-placement^=top]>[data-popper-arrow]{bottom:calc(var(--monster-popper-witharrrow-distance) - var(--monster-border-width)/2)}div[data-popper-placement^=top]>[data-popper-arrow]:before{border-bottom:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-left:transparent;border-right:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-top:transparent}div[data-popper-placement^=bottom]>[data-popper-arrow]{top:calc(var(--monster-popper-witharrrow-distance) - var(--monster-border-width))}div[data-popper-placement^=bottom]>[data-popper-arrow]:before{border-bottom:transparent;border-left:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-right:transparent;border-top:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4)}div[data-popper-placement^=left]>[data-popper-arrow]{right:calc(var(--monster-popper-witharrrow-distance) - var(--monster-border-width))}div[data-popper-placement^=left]>[data-popper-arrow]:before{border-bottom:transparent;border-left:transparent;border-right:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-top:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4)}div[data-popper-placement^=right]>[data-popper-arrow]{left:calc(var(--monster-popper-witharrrow-distance) - var(--monster-border-width)/2)}div[data-popper-placement^=right]>[data-popper-arrow]:before{border-bottom:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-left:var(--monster-border-width) var(--monster-border-style) var(--monster-bg-color-primary-4);border-right:transparent;border-top:transparent}
\ No newline at end of file
+div[data-monster-role="popper"] {
+	background: var(--monster-bg-color-primary-1);
+	border-color: var(--monster-bg-color-primary-4);
+	border-radius: var(--monster-border-radius);
+	border-style: var(--monster-border-style);
+	border-width: var(--monster-border-width);
+	box-shadow: var(--monster-box-shadow-1);
+	box-sizing: border-box;
+	color: var(--monster-color-primary-1);
+	display: none;
+	padding: 1.1em;
+	z-index: var(--monster-z-index-modal);
+}
+[data-popper-arrow],
+[data-popper-arrow]:before {
+	background: inherit;
+	height: calc(
+		max(
+			var(--monster-popper-witharrrow-distance),
+			-1 *
+			var(--monster-popper-witharrrow-distance)
+		) *
+		2
+	);
+	position: absolute;
+	width: calc(
+		max(
+			var(--monster-popper-witharrrow-distance),
+			-1 *
+			var(--monster-popper-witharrrow-distance)
+		) *
+		2
+	);
+}
+[data-popper-arrow] {
+	visibility: hidden;
+}
+[data-popper-arrow]:before {
+	box-sizing: border-box;
+	content: "";
+	transform: rotate(45deg);
+	visibility: visible;
+}
+div[data-popper-placement^="top"] > [data-popper-arrow] {
+	bottom: calc(
+		var(--monster-popper-witharrrow-distance) -
+		var(--monster-border-width) /
+		2
+	);
+}
+div[data-popper-placement^="top"] > [data-popper-arrow]:before {
+	border-bottom: var(--monster-border-width) var(--monster-border-style)
+		var(--monster-bg-color-primary-4);
+	border-left: transparent;
+	border-right: var(--monster-border-width) var(--monster-border-style)
+		var(--monster-bg-color-primary-4);
+	border-top: transparent;
+}
+div[data-popper-placement^="bottom"] > [data-popper-arrow] {
+	top: calc(
+		var(--monster-popper-witharrrow-distance) -
+		var(--monster-border-width)
+	);
+}
+div[data-popper-placement^="bottom"] > [data-popper-arrow]:before {
+	border-bottom: transparent;
+	border-left: var(--monster-border-width) var(--monster-border-style)
+		var(--monster-bg-color-primary-4);
+	border-right: transparent;
+	border-top: var(--monster-border-width) var(--monster-border-style)
+		var(--monster-bg-color-primary-4);
+}
+div[data-popper-placement^="left"] > [data-popper-arrow] {
+	right: calc(
+		var(--monster-popper-witharrrow-distance) -
+		var(--monster-border-width)
+	);
+}
+div[data-popper-placement^="left"] > [data-popper-arrow]:before {
+	border-bottom: transparent;
+	border-left: transparent;
+	border-right: var(--monster-border-width) var(--monster-border-style)
+		var(--monster-bg-color-primary-4);
+	border-top: var(--monster-border-width) var(--monster-border-style)
+		var(--monster-bg-color-primary-4);
+}
+div[data-popper-placement^="right"] > [data-popper-arrow] {
+	left: calc(
+		var(--monster-popper-witharrrow-distance) -
+		var(--monster-border-width) /
+		2
+	);
+}
+div[data-popper-placement^="right"] > [data-popper-arrow]:before {
+	border-bottom: var(--monster-border-width) var(--monster-border-style)
+		var(--monster-bg-color-primary-4);
+	border-left: var(--monster-border-width) var(--monster-border-style)
+		var(--monster-bg-color-primary-4);
+	border-right: transparent;
+	border-top: transparent;
+}
diff --git a/source/components/style/property.css b/source/components/style/property.css
index b225fb72fd9ccea972a87132a22f6ec268028e50..2b298fe2378d5f8128555c62158b87d8636e04fc 100644
--- a/source/components/style/property.css
+++ b/source/components/style/property.css
@@ -1,2 +1,328 @@
 /** generated from property.pcss **/
-:after,:before,:root{--monster-font-family:-apple-system,BlinkMacSystemFont,"Quicksand","Segoe UI","Roboto","Oxygen","Ubuntu","Cantarell","Fira Sans","Droid Sans","Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--monster-font-family-monospace:"Consolas","Courier New","Roboto Mono","Source Code Pro","Fira Mono",monospace;--monster-color-primary-1:var(--monster-color-gray-6);--monster-color-primary-2:var(--monster-color-gray-6);--monster-color-primary-3:var(--monster-color-cinnamon-1);--monster-color-primary-4:var(--monster-color-cinnamon-1);--monster-bg-color-primary-1:var(--monster-color-gray-1);--monster-bg-color-primary-2:var(--monster-color-gray-2);--monster-bg-color-primary-3:var(--monster-color-gray-6);--monster-bg-color-primary-4:var(--monster-color-gray-4)}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-1:var(--monster-color-gray-1);--monster-color-primary-2:var(--monster-color-gray-1);--monster-color-primary-3:var(--monster-color-gray-6);--monster-color-primary-4:var(--monster-color-gray-6);--monster-bg-color-primary-1:var(--monster-color-gray-6);--monster-bg-color-primary-2:var(--monster-color-gray-3);--monster-bg-color-primary-3:var(--monster-color-gray-2);--monster-bg-color-primary-4:var(--monster-color-gray-1)}}:after,:before,:root{--monster-color-secondary-1:var(--monster-color-red-4);--monster-color-secondary-2:var(--monster-color-red-4);--monster-color-secondary-3:var(--monster-color-red-1);--monster-color-secondary-4:var(--monster-color-red-1);--monster-bg-color-secondary-1:var(--monster-color-gray-1);--monster-bg-color-secondary-2:var(--monster-color-red-2);--monster-bg-color-secondary-3:var(--monster-color-red-3);--monster-bg-color-secondary-4:var(--monster-color-red-6)}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-secondary-1:var(--monster-color-red-1);--monster-color-secondary-2:var(--monster-color-red-1);--monster-color-secondary-3:var(--monster-color-red-6);--monster-color-secondary-4:var(--monster-color-red-4);--monster-bg-color-secondary-1:var(--monster-color-gray-6);--monster-bg-color-secondary-2:var(--monster-color-red-3);--monster-bg-color-secondary-3:var(--monster-color-red-2);--monster-bg-color-secondary-4:var(--monster-color-red-1)}}:after,:before,:root{--monster-color-tertiary-1:var(--monster-color-magenta-4);--monster-color-tertiary-2:var(--monster-color-magenta-4);--monster-color-tertiary-3:var(--monster-color-magenta-6);--monster-color-tertiary-4:var(--monster-color-magenta-1);--monster-bg-color-tertiary-1:var(--monster-color-gray-1);--monster-bg-color-tertiary-2:var(--monster-color-magenta-1);--monster-bg-color-tertiary-3:var(--monster-color-magenta-2);--monster-bg-color-tertiary-4:var(--monster-color-magenta-6)}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-tertiary-1:var(--monster-color-magenta-1);--monster-color-tertiary-2:var(--monster-color-magenta-6);--monster-color-tertiary-3:var(--monster-color-magenta-4);--monster-color-tertiary-4:var(--monster-color-magenta-4);--monster-bg-color-tertiary-1:var(--monster-color-gray-6);--monster-bg-color-tertiary-2:var(--monster-color-magenta-2);--monster-bg-color-tertiary-3:var(--monster-color-magenta-1);--monster-bg-color-tertiary-4:var(--monster-color-magenta-1)}}:after,:before,:root{--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-4);--monster-color-destructive-3:var(--monster-color-red-6);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-4);--monster-bg-color-destructive-2:var(--monster-color-gray-1);--monster-bg-color-destructive-3:var(--monster-color-red-2);--monster-bg-color-destructive-4:var(--monster-color-red-5)}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-destructive-1:var(--monster-color-red-1);--monster-color-destructive-2:var(--monster-color-red-3);--monster-color-destructive-3:var(--monster-color-red-4);--monster-color-destructive-4:var(--monster-color-red-1);--monster-bg-color-destructive-1:var(--monster-color-red-5);--monster-bg-color-destructive-2:var(--monster-color-gray-6);--monster-bg-color-destructive-3:var(--monster-color-red-1);--monster-bg-color-destructive-4:var(--monster-color-red-4)}}:after,:before,:root{--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-4);--monster-color-success-3:var(--monster-color-green-6);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-3);--monster-bg-color-success-2:var(--monster-color-gray-1);--monster-bg-color-success-3:var(--monster-color-green-2);--monster-bg-color-success-4:var(--monster-color-green-5)}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-success-1:var(--monster-color-green-1);--monster-color-success-2:var(--monster-color-green-2);--monster-color-success-3:var(--monster-color-green-4);--monster-color-success-4:var(--monster-color-green-1);--monster-bg-color-success-1:var(--monster-color-green-5);--monster-bg-color-success-2:var(--monster-color-gray-6);--monster-bg-color-success-3:var(--monster-color-green-1);--monster-bg-color-success-4:var(--monster-color-green-3)}}:after,:before,:root{--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-4);--monster-color-warning-3:var(--monster-color-orange-6);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-3);--monster-bg-color-warning-2:var(--monster-color-gray-1);--monster-bg-color-warning-3:var(--monster-color-orange-2);--monster-bg-color-warning-4:var(--monster-color-orange-5)}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-warning-1:var(--monster-color-orange-1);--monster-color-warning-2:var(--monster-color-orange-3);--monster-color-warning-3:var(--monster-color-orange-4);--monster-color-warning-4:var(--monster-color-orange-1);--monster-bg-color-warning-1:var(--monster-color-orange-5);--monster-bg-color-warning-2:var(--monster-color-gray-6);--monster-bg-color-warning-3:var(--monster-color-orange-1);--monster-bg-color-warning-4:var(--monster-color-orange-3)}}:after,:before,:root{--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-4);--monster-color-error-3:var(--monster-color-red-6);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-4);--monster-bg-color-error-2:var(--monster-color-gray-1);--monster-bg-color-error-3:var(--monster-color-red-2);--monster-bg-color-error-4:var(--monster-color-red-5)}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-error-1:var(--monster-color-red-1);--monster-color-error-2:var(--monster-color-red-3);--monster-color-error-3:var(--monster-color-red-4);--monster-color-error-4:var(--monster-color-red-1);--monster-bg-color-error-1:var(--monster-color-red-5);--monster-bg-color-error-2:var(--monster-color-gray-6);--monster-bg-color-error-3:var(--monster-color-red-1);--monster-bg-color-error-4:var(--monster-color-red-4)}}:after,:before,:root{--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6)}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-selection-1:var(--monster-color-gray-6);--monster-color-selection-2:var(--monster-color-gray-6);--monster-color-selection-3:var(--monster-color-gray-6);--monster-color-selection-4:var(--monster-color-gray-1);--monster-bg-color-selection-1:var(--monster-color-yellow-2);--monster-bg-color-selection-2:var(--monster-color-yellow-1);--monster-bg-color-selection-3:var(--monster-color-yellow-2);--monster-bg-color-selection-4:var(--monster-color-yellow-6)}}:after,:before,:root{--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-4);--monster-color-primary-disabled-4:var(--monster-color-gray-4);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-1);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-6)}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-color-primary-disabled-1:var(--monster-color-gray-4);--monster-color-primary-disabled-2:var(--monster-color-gray-4);--monster-color-primary-disabled-3:var(--monster-color-gray-3);--monster-color-primary-disabled-4:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-1:var(--monster-color-gray-6);--monster-bg-color-primary-disabled-2:var(--monster-color-gray-3);--monster-bg-color-primary-disabled-3:var(--monster-color-gray-2);--monster-bg-color-primary-disabled-4:var(--monster-color-gray-1)}}:after,:before,:root{--monster-color-gradient-1:#833ab4;--monster-color-gradient-2:#fd1d1d;--monster-color-gradient-3:#fcb045;--monster-box-shadow-1:none;--monster-box-shadow-2:-1px 1px 10px 1px hsla(0,0%,76%,.61);--monster-text-shadow:none;--monster-theme-control-bg-color:var(--monster-color-seashell-1);--monster-theme-control-color:var(--monster-color-seashell-6);--monster-theme-control-hover-color:var(--monster-color-seashell-6);--monster-theme-control-hover-bg-color:var(--monster-color-seashell-2);--monster-theme-control-border-width:2px;--monster-theme-control-border-style:solid;--monster-theme-control-border-radius:0;--monster-theme-control-border-color:var(--monster-color-primary-1)}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-theme-control-bg-color:var(--monster-color-gray-5);--monster-theme-control-color:var(--monster-color-gray-1);--monster-theme-control-border-color:var(--monster-color-gray-3);--monster-theme-control-hover-color:var(--monster-color-gray-1);--monster-theme-control-hover-bg-color:var(--monster-color-gray-6)}}:after,:before,:root{--monster-theme-on-color:var(--monster-color-green-1);--monster-theme-on-bg-color:var(--monster-color-green-5);--monster-theme-off-color:var(--monster-color-gray-1);--monster-theme-off-bg-color:var(--monster-color-gray-4)}@media (prefers-color-scheme:dark){:after,:before,:root{--monster-theme-on-color:var(--monster-color-gray-6);--monster-theme-on-bg-color:var(--monster-color-gray-1);--monster-theme-off-color:var(--monster-color-gray-1);--monster-theme-off-bg-color:var(--monster-color-gray-5)}}:after,:before,:root{--monster-border-style:solid;--monster-border-width:3px;--monster-border-radius:0;--monster-popper-witharrrow-distance:-4px;--monster-z-index-default:0;--monster-z-index-outline:10;--monster-z-index-dropdown:200;--monster-z-index-dropdown-overlay:210;--monster-z-index-sticky:300;--monster-z-index-sticky-overlay:310;--monster-z-index-fixed:400;--monster-z-index-fixed-overlay:410;--monster-z-index-modal-backdrop:500;--monster-z-index-modal-backdrop-overlay:510;--monster-z-index-offcanvas:600;--monster-z-index-offcanvas-overlay:610;--monster-z-index-modal:700;--monster-z-index-modal-overlay:710;--monster-z-index-popover:800;--monster-z-index-popover-overlay:810;--monster-z-index-tooltip:800;--monster-z-index-tooltip-overlay:910;--monster-space-0:0;--monster-space-1:2px;--monster-space-2:4px;--monster-space-3:6px;--monster-space-4:10px;--monster-space-5:16px;--monster-space-6:26px;--monster-space-7:42px;--monster-breakpoint-0:480px;--monster-breakpoint-4:480px;--monster-breakpoint-7:768px;--monster-breakpoint-9:992px;--monster-breakpoint-12:1200px;--monster-dragger-width:2px;--monster-dragger-handle-width:4px;--monster-dragger-handle-height:50px}
\ No newline at end of file
+:after,
+:before,
+:root {
+	--monster-font-family:
+		-apple-system, BlinkMacSystemFont, "Quicksand", "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
+	--monster-font-family-monospace: "Consolas", "Courier New", "Roboto Mono",
+		"Source Code Pro", "Fira Mono", monospace;
+	--monster-color-primary-1: var(--monster-color-gray-6);
+	--monster-color-primary-2: var(--monster-color-gray-6);
+	--monster-color-primary-3: var(--monster-color-cinnamon-1);
+	--monster-color-primary-4: var(--monster-color-cinnamon-1);
+	--monster-bg-color-primary-1: var(--monster-color-gray-1);
+	--monster-bg-color-primary-2: var(--monster-color-gray-2);
+	--monster-bg-color-primary-3: var(--monster-color-gray-6);
+	--monster-bg-color-primary-4: var(--monster-color-gray-4);
+}
+@media (prefers-color-scheme: dark) {
+	:after,
+	:before,
+	:root {
+		--monster-color-primary-1: var(--monster-color-gray-1);
+		--monster-color-primary-2: var(--monster-color-gray-1);
+		--monster-color-primary-3: var(--monster-color-gray-6);
+		--monster-color-primary-4: var(--monster-color-gray-6);
+		--monster-bg-color-primary-1: var(--monster-color-gray-6);
+		--monster-bg-color-primary-2: var(--monster-color-gray-3);
+		--monster-bg-color-primary-3: var(--monster-color-gray-2);
+		--monster-bg-color-primary-4: var(--monster-color-gray-1);
+	}
+}
+:after,
+:before,
+:root {
+	--monster-color-secondary-1: var(--monster-color-red-4);
+	--monster-color-secondary-2: var(--monster-color-red-4);
+	--monster-color-secondary-3: var(--monster-color-red-1);
+	--monster-color-secondary-4: var(--monster-color-red-1);
+	--monster-bg-color-secondary-1: var(--monster-color-gray-1);
+	--monster-bg-color-secondary-2: var(--monster-color-red-2);
+	--monster-bg-color-secondary-3: var(--monster-color-red-3);
+	--monster-bg-color-secondary-4: var(--monster-color-red-6);
+}
+@media (prefers-color-scheme: dark) {
+	:after,
+	:before,
+	:root {
+		--monster-color-secondary-1: var(--monster-color-red-1);
+		--monster-color-secondary-2: var(--monster-color-red-1);
+		--monster-color-secondary-3: var(--monster-color-red-6);
+		--monster-color-secondary-4: var(--monster-color-red-4);
+		--monster-bg-color-secondary-1: var(--monster-color-gray-6);
+		--monster-bg-color-secondary-2: var(--monster-color-red-3);
+		--monster-bg-color-secondary-3: var(--monster-color-red-2);
+		--monster-bg-color-secondary-4: var(--monster-color-red-1);
+	}
+}
+:after,
+:before,
+:root {
+	--monster-color-tertiary-1: var(--monster-color-magenta-4);
+	--monster-color-tertiary-2: var(--monster-color-magenta-4);
+	--monster-color-tertiary-3: var(--monster-color-magenta-6);
+	--monster-color-tertiary-4: var(--monster-color-magenta-1);
+	--monster-bg-color-tertiary-1: var(--monster-color-gray-1);
+	--monster-bg-color-tertiary-2: var(--monster-color-magenta-1);
+	--monster-bg-color-tertiary-3: var(--monster-color-magenta-2);
+	--monster-bg-color-tertiary-4: var(--monster-color-magenta-6);
+}
+@media (prefers-color-scheme: dark) {
+	:after,
+	:before,
+	:root {
+		--monster-color-tertiary-1: var(--monster-color-magenta-1);
+		--monster-color-tertiary-2: var(--monster-color-magenta-6);
+		--monster-color-tertiary-3: var(--monster-color-magenta-4);
+		--monster-color-tertiary-4: var(--monster-color-magenta-4);
+		--monster-bg-color-tertiary-1: var(--monster-color-gray-6);
+		--monster-bg-color-tertiary-2: var(--monster-color-magenta-2);
+		--monster-bg-color-tertiary-3: var(--monster-color-magenta-1);
+		--monster-bg-color-tertiary-4: var(--monster-color-magenta-1);
+	}
+}
+:after,
+:before,
+:root {
+	--monster-color-destructive-1: var(--monster-color-red-1);
+	--monster-color-destructive-2: var(--monster-color-red-4);
+	--monster-color-destructive-3: var(--monster-color-red-6);
+	--monster-color-destructive-4: var(--monster-color-red-1);
+	--monster-bg-color-destructive-1: var(--monster-color-red-4);
+	--monster-bg-color-destructive-2: var(--monster-color-gray-1);
+	--monster-bg-color-destructive-3: var(--monster-color-red-2);
+	--monster-bg-color-destructive-4: var(--monster-color-red-5);
+}
+@media (prefers-color-scheme: dark) {
+	:after,
+	:before,
+	:root {
+		--monster-color-destructive-1: var(--monster-color-red-1);
+		--monster-color-destructive-2: var(--monster-color-red-3);
+		--monster-color-destructive-3: var(--monster-color-red-4);
+		--monster-color-destructive-4: var(--monster-color-red-1);
+		--monster-bg-color-destructive-1: var(--monster-color-red-5);
+		--monster-bg-color-destructive-2: var(--monster-color-gray-6);
+		--monster-bg-color-destructive-3: var(--monster-color-red-1);
+		--monster-bg-color-destructive-4: var(--monster-color-red-4);
+	}
+}
+:after,
+:before,
+:root {
+	--monster-color-success-1: var(--monster-color-green-1);
+	--monster-color-success-2: var(--monster-color-green-4);
+	--monster-color-success-3: var(--monster-color-green-6);
+	--monster-color-success-4: var(--monster-color-green-1);
+	--monster-bg-color-success-1: var(--monster-color-green-3);
+	--monster-bg-color-success-2: var(--monster-color-gray-1);
+	--monster-bg-color-success-3: var(--monster-color-green-2);
+	--monster-bg-color-success-4: var(--monster-color-green-5);
+}
+@media (prefers-color-scheme: dark) {
+	:after,
+	:before,
+	:root {
+		--monster-color-success-1: var(--monster-color-green-1);
+		--monster-color-success-2: var(--monster-color-green-2);
+		--monster-color-success-3: var(--monster-color-green-4);
+		--monster-color-success-4: var(--monster-color-green-1);
+		--monster-bg-color-success-1: var(--monster-color-green-5);
+		--monster-bg-color-success-2: var(--monster-color-gray-6);
+		--monster-bg-color-success-3: var(--monster-color-green-1);
+		--monster-bg-color-success-4: var(--monster-color-green-3);
+	}
+}
+:after,
+:before,
+:root {
+	--monster-color-warning-1: var(--monster-color-orange-1);
+	--monster-color-warning-2: var(--monster-color-orange-4);
+	--monster-color-warning-3: var(--monster-color-orange-6);
+	--monster-color-warning-4: var(--monster-color-orange-1);
+	--monster-bg-color-warning-1: var(--monster-color-orange-3);
+	--monster-bg-color-warning-2: var(--monster-color-gray-1);
+	--monster-bg-color-warning-3: var(--monster-color-orange-2);
+	--monster-bg-color-warning-4: var(--monster-color-orange-5);
+}
+@media (prefers-color-scheme: dark) {
+	:after,
+	:before,
+	:root {
+		--monster-color-warning-1: var(--monster-color-orange-1);
+		--monster-color-warning-2: var(--monster-color-orange-3);
+		--monster-color-warning-3: var(--monster-color-orange-4);
+		--monster-color-warning-4: var(--monster-color-orange-1);
+		--monster-bg-color-warning-1: var(--monster-color-orange-5);
+		--monster-bg-color-warning-2: var(--monster-color-gray-6);
+		--monster-bg-color-warning-3: var(--monster-color-orange-1);
+		--monster-bg-color-warning-4: var(--monster-color-orange-3);
+	}
+}
+:after,
+:before,
+:root {
+	--monster-color-error-1: var(--monster-color-red-1);
+	--monster-color-error-2: var(--monster-color-red-4);
+	--monster-color-error-3: var(--monster-color-red-6);
+	--monster-color-error-4: var(--monster-color-red-1);
+	--monster-bg-color-error-1: var(--monster-color-red-4);
+	--monster-bg-color-error-2: var(--monster-color-gray-1);
+	--monster-bg-color-error-3: var(--monster-color-red-2);
+	--monster-bg-color-error-4: var(--monster-color-red-5);
+}
+@media (prefers-color-scheme: dark) {
+	:after,
+	:before,
+	:root {
+		--monster-color-error-1: var(--monster-color-red-1);
+		--monster-color-error-2: var(--monster-color-red-3);
+		--monster-color-error-3: var(--monster-color-red-4);
+		--monster-color-error-4: var(--monster-color-red-1);
+		--monster-bg-color-error-1: var(--monster-color-red-5);
+		--monster-bg-color-error-2: var(--monster-color-gray-6);
+		--monster-bg-color-error-3: var(--monster-color-red-1);
+		--monster-bg-color-error-4: var(--monster-color-red-4);
+	}
+}
+:after,
+:before,
+:root {
+	--monster-color-selection-1: var(--monster-color-gray-6);
+	--monster-color-selection-2: var(--monster-color-gray-6);
+	--monster-color-selection-3: var(--monster-color-gray-6);
+	--monster-color-selection-4: var(--monster-color-gray-1);
+	--monster-bg-color-selection-1: var(--monster-color-yellow-2);
+	--monster-bg-color-selection-2: var(--monster-color-yellow-1);
+	--monster-bg-color-selection-3: var(--monster-color-yellow-2);
+	--monster-bg-color-selection-4: var(--monster-color-yellow-6);
+}
+@media (prefers-color-scheme: dark) {
+	:after,
+	:before,
+	:root {
+		--monster-color-selection-1: var(--monster-color-gray-6);
+		--monster-color-selection-2: var(--monster-color-gray-6);
+		--monster-color-selection-3: var(--monster-color-gray-6);
+		--monster-color-selection-4: var(--monster-color-gray-1);
+		--monster-bg-color-selection-1: var(--monster-color-yellow-2);
+		--monster-bg-color-selection-2: var(--monster-color-yellow-1);
+		--monster-bg-color-selection-3: var(--monster-color-yellow-2);
+		--monster-bg-color-selection-4: var(--monster-color-yellow-6);
+	}
+}
+:after,
+:before,
+:root {
+	--monster-color-primary-disabled-1: var(--monster-color-gray-4);
+	--monster-color-primary-disabled-2: var(--monster-color-gray-4);
+	--monster-color-primary-disabled-3: var(--monster-color-gray-4);
+	--monster-color-primary-disabled-4: var(--monster-color-gray-4);
+	--monster-bg-color-primary-disabled-1: var(--monster-color-gray-1);
+	--monster-bg-color-primary-disabled-2: var(--monster-color-gray-2);
+	--monster-bg-color-primary-disabled-3: var(--monster-color-gray-3);
+	--monster-bg-color-primary-disabled-4: var(--monster-color-gray-6);
+}
+@media (prefers-color-scheme: dark) {
+	:after,
+	:before,
+	:root {
+		--monster-color-primary-disabled-1: var(--monster-color-gray-4);
+		--monster-color-primary-disabled-2: var(--monster-color-gray-4);
+		--monster-color-primary-disabled-3: var(--monster-color-gray-3);
+		--monster-color-primary-disabled-4: var(--monster-color-gray-3);
+		--monster-bg-color-primary-disabled-1: var(--monster-color-gray-6);
+		--monster-bg-color-primary-disabled-2: var(--monster-color-gray-3);
+		--monster-bg-color-primary-disabled-3: var(--monster-color-gray-2);
+		--monster-bg-color-primary-disabled-4: var(--monster-color-gray-1);
+	}
+}
+:after,
+:before,
+:root {
+	--monster-color-gradient-1: #833ab4;
+	--monster-color-gradient-2: #fd1d1d;
+	--monster-color-gradient-3: #fcb045;
+	--monster-box-shadow-1: none;
+	--monster-box-shadow-2: -1px 1px 10px 1px hsla(0, 0%, 76%, 0.61);
+	--monster-text-shadow: none;
+	--monster-theme-control-bg-color: var(--monster-color-seashell-1);
+	--monster-theme-control-color: var(--monster-color-seashell-6);
+	--monster-theme-control-hover-color: var(--monster-color-seashell-6);
+	--monster-theme-control-hover-bg-color: var(--monster-color-seashell-2);
+	--monster-theme-control-border-width: 2px;
+	--monster-theme-control-border-style: solid;
+	--monster-theme-control-border-radius: 0;
+	--monster-theme-control-border-color: var(--monster-color-primary-1);
+}
+@media (prefers-color-scheme: dark) {
+	:after,
+	:before,
+	:root {
+		--monster-theme-control-bg-color: var(--monster-color-gray-5);
+		--monster-theme-control-color: var(--monster-color-gray-1);
+		--monster-theme-control-border-color: var(--monster-color-gray-3);
+		--monster-theme-control-hover-color: var(--monster-color-gray-1);
+		--monster-theme-control-hover-bg-color: var(--monster-color-gray-6);
+	}
+}
+:after,
+:before,
+:root {
+	--monster-theme-on-color: var(--monster-color-green-1);
+	--monster-theme-on-bg-color: var(--monster-color-green-5);
+	--monster-theme-off-color: var(--monster-color-gray-1);
+	--monster-theme-off-bg-color: var(--monster-color-gray-4);
+}
+@media (prefers-color-scheme: dark) {
+	:after,
+	:before,
+	:root {
+		--monster-theme-on-color: var(--monster-color-gray-6);
+		--monster-theme-on-bg-color: var(--monster-color-gray-1);
+		--monster-theme-off-color: var(--monster-color-gray-1);
+		--monster-theme-off-bg-color: var(--monster-color-gray-5);
+	}
+}
+:after,
+:before,
+:root {
+	--monster-border-style: solid;
+	--monster-border-width: 3px;
+	--monster-border-radius: 0;
+	--monster-popper-witharrrow-distance: -4px;
+	--monster-z-index-default: 0;
+	--monster-z-index-outline: 10;
+	--monster-z-index-dropdown: 200;
+	--monster-z-index-dropdown-overlay: 210;
+	--monster-z-index-sticky: 300;
+	--monster-z-index-sticky-overlay: 310;
+	--monster-z-index-fixed: 400;
+	--monster-z-index-fixed-overlay: 410;
+	--monster-z-index-modal-backdrop: 500;
+	--monster-z-index-modal-backdrop-overlay: 510;
+	--monster-z-index-offcanvas: 600;
+	--monster-z-index-offcanvas-overlay: 610;
+	--monster-z-index-modal: 700;
+	--monster-z-index-modal-overlay: 710;
+	--monster-z-index-popover: 800;
+	--monster-z-index-popover-overlay: 810;
+	--monster-z-index-tooltip: 800;
+	--monster-z-index-tooltip-overlay: 910;
+	--monster-space-0: 0;
+	--monster-space-1: 2px;
+	--monster-space-2: 4px;
+	--monster-space-3: 6px;
+	--monster-space-4: 10px;
+	--monster-space-5: 16px;
+	--monster-space-6: 26px;
+	--monster-space-7: 42px;
+	--monster-breakpoint-0: 480px;
+	--monster-breakpoint-4: 480px;
+	--monster-breakpoint-7: 768px;
+	--monster-breakpoint-9: 992px;
+	--monster-breakpoint-12: 1200px;
+	--monster-dragger-width: 2px;
+	--monster-dragger-handle-width: 4px;
+	--monster-dragger-handle-height: 50px;
+}
diff --git a/source/components/style/ripple.css b/source/components/style/ripple.css
index f784ad6d9c2a806d7e785c79966210519d000c53..c8e0688450740e65d4d27e5fa88506ea5e8658eb 100644
--- a/source/components/style/ripple.css
+++ b/source/components/style/ripple.css
@@ -1,2 +1,14 @@
 /** generated from ripple.pcss **/
-span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:hsla(0,0%,100%,.7);border-radius:50%;position:absolute;transform:scale(0)}@keyframes monster-fx-ripple{to{opacity:0;transform:scale(4)}}
\ No newline at end of file
+span.monster-fx-ripple {
+	animation: monster-fx-ripple .6s linear;
+	background-color: hsla(0, 0%, 100%, 0.7);
+	border-radius: 50%;
+	position: absolute;
+	transform: scale(0);
+}
+@keyframes monster-fx-ripple {
+	to {
+		opacity: 0;
+		transform: scale(4);
+	}
+}
diff --git a/source/components/style/skeleton.css b/source/components/style/skeleton.css
index 32838c3bd6415475beedfda19b82453b1e987a67..20b943372f308a4f43f3b58de9dccfcfebf79c7e 100644
--- a/source/components/style/skeleton.css
+++ b/source/components/style/skeleton.css
@@ -1,2 +1,165 @@
 /** generated from skeleton.pcss **/
-.monster-skeleton-col-10{--monster-skeleton-color:var(--monster-color-gray-3);--monster-skeleton-height:100%;--monster-skeleton-width:10%;--monster-skeleton:linear-gradient(90deg,var(--monster-skeleton-color) 0,transparent var(--monster-skeleton-width))}.monster-skeleton-col-10,.monster-skeleton-col-20{background-image:var(--monster-skeleton);background-position:0 0;background-repeat:no-repeat;background-size:var(--monster-skeleton-width) var(--monster-skeleton-height);color:var(--monster-skeleton-color);min-height:1px}.monster-skeleton-col-20{--monster-skeleton-color:var(--monster-color-gray-3);--monster-skeleton-height:100%;--monster-skeleton-width:20%;--monster-skeleton:linear-gradient(90deg,var(--monster-skeleton-color) 0,transparent var(--monster-skeleton-width))}.monster-skeleton-col-30{--monster-skeleton-color:var(--monster-color-gray-3);--monster-skeleton-height:100%;--monster-skeleton-width:30%;--monster-skeleton:linear-gradient(90deg,var(--monster-skeleton-color) 0,transparent var(--monster-skeleton-width))}.monster-skeleton-col-30,.monster-skeleton-col-40{background-image:var(--monster-skeleton);background-position:0 0;background-repeat:no-repeat;background-size:var(--monster-skeleton-width) var(--monster-skeleton-height);color:var(--monster-skeleton-color);min-height:1px}.monster-skeleton-col-40{--monster-skeleton-color:var(--monster-color-gray-3);--monster-skeleton-height:100%;--monster-skeleton-width:40%;--monster-skeleton:linear-gradient(90deg,var(--monster-skeleton-color) 0,transparent var(--monster-skeleton-width))}.monster-skeleton-col-50{--monster-skeleton-color:var(--monster-color-gray-3);--monster-skeleton-height:100%;--monster-skeleton-width:50%;--monster-skeleton:linear-gradient(90deg,var(--monster-skeleton-color) 0,transparent var(--monster-skeleton-width))}.monster-skeleton-col-50,.monster-skeleton-col-60{background-image:var(--monster-skeleton);background-position:0 0;background-repeat:no-repeat;background-size:var(--monster-skeleton-width) var(--monster-skeleton-height);color:var(--monster-skeleton-color);min-height:1px}.monster-skeleton-col-60{--monster-skeleton-color:var(--monster-color-gray-3);--monster-skeleton-height:100%;--monster-skeleton-width:60%;--monster-skeleton:linear-gradient(90deg,var(--monster-skeleton-color) 0,transparent var(--monster-skeleton-width))}.monster-skeleton-col-70{--monster-skeleton-color:var(--monster-color-gray-3);--monster-skeleton-height:100%;--monster-skeleton-width:70%;--monster-skeleton:linear-gradient(90deg,var(--monster-skeleton-color) 0,transparent var(--monster-skeleton-width))}.monster-skeleton-col-70,.monster-skeleton-col-80{background-image:var(--monster-skeleton);background-position:0 0;background-repeat:no-repeat;background-size:var(--monster-skeleton-width) var(--monster-skeleton-height);color:var(--monster-skeleton-color);min-height:1px}.monster-skeleton-col-80{--monster-skeleton-color:var(--monster-color-gray-3);--monster-skeleton-height:100%;--monster-skeleton-width:80%;--monster-skeleton:linear-gradient(90deg,var(--monster-skeleton-color) 0,transparent var(--monster-skeleton-width))}.monster-skeleton-col-90{--monster-skeleton-color:var(--monster-color-gray-3);--monster-skeleton-height:100%;--monster-skeleton-width:90%;--monster-skeleton:linear-gradient(90deg,var(--monster-skeleton-color) 0,transparent var(--monster-skeleton-width))}.monster-skeleton-col-100,.monster-skeleton-col-90{background-image:var(--monster-skeleton);background-position:0 0;background-repeat:no-repeat;background-size:var(--monster-skeleton-width) var(--monster-skeleton-height);color:var(--monster-skeleton-color);min-height:1px}.monster-skeleton-col-100{--monster-skeleton-color:var(--monster-color-gray-3);--monster-skeleton-height:100%;--monster-skeleton-width:100%;--monster-skeleton:linear-gradient(90deg,var(--monster-skeleton-color) 0,transparent var(--monster-skeleton-width))}.monster-skeleton-animated{animation-duration:2.25s;animation-fill-mode:forwards;animation-iteration-count:infinite;animation-name:shimmer;animation-timing-function:linear;border-radius:4px}@keyframes shimmer{0%{filter:brightness(1)}50%{filter:brightness(1.5)}to{filter:brightness(1)}}
\ No newline at end of file
+.monster-skeleton-col-10 {
+	--monster-skeleton-color: var(--monster-color-gray-3);
+	--monster-skeleton-height: 100%;
+	--monster-skeleton-width: 10%;
+	--monster-skeleton: linear-gradient(
+		90deg,
+		var(--monster-skeleton-color) 0,
+		transparent var(--monster-skeleton-width)
+	);
+}
+.monster-skeleton-col-10,
+.monster-skeleton-col-20 {
+	background-image: var(--monster-skeleton);
+	background-position: 0 0;
+	background-repeat: no-repeat;
+	background-size: var(--monster-skeleton-width) var(--monster-skeleton-height);
+	color: var(--monster-skeleton-color);
+	min-height: 1px;
+}
+.monster-skeleton-col-20 {
+	--monster-skeleton-color: var(--monster-color-gray-3);
+	--monster-skeleton-height: 100%;
+	--monster-skeleton-width: 20%;
+	--monster-skeleton: linear-gradient(
+		90deg,
+		var(--monster-skeleton-color) 0,
+		transparent var(--monster-skeleton-width)
+	);
+}
+.monster-skeleton-col-30 {
+	--monster-skeleton-color: var(--monster-color-gray-3);
+	--monster-skeleton-height: 100%;
+	--monster-skeleton-width: 30%;
+	--monster-skeleton: linear-gradient(
+		90deg,
+		var(--monster-skeleton-color) 0,
+		transparent var(--monster-skeleton-width)
+	);
+}
+.monster-skeleton-col-30,
+.monster-skeleton-col-40 {
+	background-image: var(--monster-skeleton);
+	background-position: 0 0;
+	background-repeat: no-repeat;
+	background-size: var(--monster-skeleton-width) var(--monster-skeleton-height);
+	color: var(--monster-skeleton-color);
+	min-height: 1px;
+}
+.monster-skeleton-col-40 {
+	--monster-skeleton-color: var(--monster-color-gray-3);
+	--monster-skeleton-height: 100%;
+	--monster-skeleton-width: 40%;
+	--monster-skeleton: linear-gradient(
+		90deg,
+		var(--monster-skeleton-color) 0,
+		transparent var(--monster-skeleton-width)
+	);
+}
+.monster-skeleton-col-50 {
+	--monster-skeleton-color: var(--monster-color-gray-3);
+	--monster-skeleton-height: 100%;
+	--monster-skeleton-width: 50%;
+	--monster-skeleton: linear-gradient(
+		90deg,
+		var(--monster-skeleton-color) 0,
+		transparent var(--monster-skeleton-width)
+	);
+}
+.monster-skeleton-col-50,
+.monster-skeleton-col-60 {
+	background-image: var(--monster-skeleton);
+	background-position: 0 0;
+	background-repeat: no-repeat;
+	background-size: var(--monster-skeleton-width) var(--monster-skeleton-height);
+	color: var(--monster-skeleton-color);
+	min-height: 1px;
+}
+.monster-skeleton-col-60 {
+	--monster-skeleton-color: var(--monster-color-gray-3);
+	--monster-skeleton-height: 100%;
+	--monster-skeleton-width: 60%;
+	--monster-skeleton: linear-gradient(
+		90deg,
+		var(--monster-skeleton-color) 0,
+		transparent var(--monster-skeleton-width)
+	);
+}
+.monster-skeleton-col-70 {
+	--monster-skeleton-color: var(--monster-color-gray-3);
+	--monster-skeleton-height: 100%;
+	--monster-skeleton-width: 70%;
+	--monster-skeleton: linear-gradient(
+		90deg,
+		var(--monster-skeleton-color) 0,
+		transparent var(--monster-skeleton-width)
+	);
+}
+.monster-skeleton-col-70,
+.monster-skeleton-col-80 {
+	background-image: var(--monster-skeleton);
+	background-position: 0 0;
+	background-repeat: no-repeat;
+	background-size: var(--monster-skeleton-width) var(--monster-skeleton-height);
+	color: var(--monster-skeleton-color);
+	min-height: 1px;
+}
+.monster-skeleton-col-80 {
+	--monster-skeleton-color: var(--monster-color-gray-3);
+	--monster-skeleton-height: 100%;
+	--monster-skeleton-width: 80%;
+	--monster-skeleton: linear-gradient(
+		90deg,
+		var(--monster-skeleton-color) 0,
+		transparent var(--monster-skeleton-width)
+	);
+}
+.monster-skeleton-col-90 {
+	--monster-skeleton-color: var(--monster-color-gray-3);
+	--monster-skeleton-height: 100%;
+	--monster-skeleton-width: 90%;
+	--monster-skeleton: linear-gradient(
+		90deg,
+		var(--monster-skeleton-color) 0,
+		transparent var(--monster-skeleton-width)
+	);
+}
+.monster-skeleton-col-100,
+.monster-skeleton-col-90 {
+	background-image: var(--monster-skeleton);
+	background-position: 0 0;
+	background-repeat: no-repeat;
+	background-size: var(--monster-skeleton-width) var(--monster-skeleton-height);
+	color: var(--monster-skeleton-color);
+	min-height: 1px;
+}
+.monster-skeleton-col-100 {
+	--monster-skeleton-color: var(--monster-color-gray-3);
+	--monster-skeleton-height: 100%;
+	--monster-skeleton-width: 100%;
+	--monster-skeleton: linear-gradient(
+		90deg,
+		var(--monster-skeleton-color) 0,
+		transparent var(--monster-skeleton-width)
+	);
+}
+.monster-skeleton-animated {
+	animation-duration: 2.25s;
+	animation-fill-mode: forwards;
+	animation-iteration-count: infinite;
+	animation-name: shimmer;
+	animation-timing-function: linear;
+	border-radius: 4px;
+}
+@keyframes shimmer {
+	0% {
+		filter: brightness(1);
+	}
+	50% {
+		filter: brightness(1.5);
+	}
+	to {
+		filter: brightness(1);
+	}
+}
diff --git a/source/components/style/space.css b/source/components/style/space.css
index 76acd766c99284bdc19d4fe48c71bc0fe59f4840..a47cc169c34fc2c16ae56549656e82d08797a8ca 100644
--- a/source/components/style/space.css
+++ b/source/components/style/space.css
@@ -1,2 +1,241 @@
 /** generated from space.pcss **/
-.monster-margin-0{margin:var(--monster-space-0)}.monster-margin-top-0{margin-top:var(--monster-space-0)}.monster-margin-end-0{margin-right:var(--monster-space-0)}.monster-margin-bottom-0{margin-bottom:var(--monster-space-0)}.monster-margin-start-0{margin-left:var(--monster-space-0)}.monster-padding-0{padding:var(--monster-space-0)}.monster-padding-top-0{padding-top:var(--monster-space-0)}.monster-padding-end-0{padding-right:var(--monster-space-0)}.monster-padding-bottom-0{padding-bottom:var(--monster-space-0)}.monster-padding-start-0{padding-left:var(--monster-space-0)}.monster-margin-1{margin:var(--monster-space-1)}.monster-margin-top-1{margin-top:var(--monster-space-1)}.monster-margin-end-1{margin-right:var(--monster-space-1)}.monster-margin-bottom-1{margin-bottom:var(--monster-space-1)}.monster-margin-start-1{margin-left:var(--monster-space-1)}.monster-padding-1{padding:var(--monster-space-1)}.monster-padding-top-1{padding-top:var(--monster-space-1)}.monster-padding-end-1{padding-right:var(--monster-space-1)}.monster-padding-bottom-1{padding-bottom:var(--monster-space-1)}.monster-padding-start-1{padding-left:var(--monster-space-1)}.monster-margin-2{margin:var(--monster-space-2)}.monster-margin-top-2{margin-top:var(--monster-space-2)}.monster-margin-end-2{margin-right:var(--monster-space-2)}.monster-margin-bottom-2{margin-bottom:var(--monster-space-2)}.monster-margin-start-2{margin-left:var(--monster-space-2)}.monster-padding-2{padding:var(--monster-space-2)}.monster-padding-top-2{padding-top:var(--monster-space-2)}.monster-padding-end-2{padding-right:var(--monster-space-2)}.monster-padding-bottom-2{padding-bottom:var(--monster-space-2)}.monster-padding-start-2{padding-left:var(--monster-space-2)}.monster-margin-3{margin:var(--monster-space-3)}.monster-margin-top-3{margin-top:var(--monster-space-3)}.monster-margin-end-3{margin-right:var(--monster-space-3)}.monster-margin-bottom-3{margin-bottom:var(--monster-space-3)}.monster-margin-start-3{margin-left:var(--monster-space-3)}.monster-padding-3{padding:var(--monster-space-3)}.monster-padding-top-3{padding-top:var(--monster-space-3)}.monster-padding-end-3{padding-right:var(--monster-space-3)}.monster-padding-bottom-3{padding-bottom:var(--monster-space-3)}.monster-padding-start-3{padding-left:var(--monster-space-3)}.monster-margin-4{margin:var(--monster-space-4)}.monster-margin-top-4{margin-top:var(--monster-space-4)}.monster-margin-end-4{margin-right:var(--monster-space-4)}.monster-margin-bottom-4{margin-bottom:var(--monster-space-4)}.monster-margin-start-4{margin-left:var(--monster-space-4)}.monster-padding-4{padding:var(--monster-space-4)}.monster-padding-top-4{padding-top:var(--monster-space-4)}.monster-padding-end-4{padding-right:var(--monster-space-4)}.monster-padding-bottom-4{padding-bottom:var(--monster-space-4)}.monster-padding-start-4{padding-left:var(--monster-space-4)}.monster-margin-5{margin:var(--monster-space-5)}.monster-margin-top-5{margin-top:var(--monster-space-5)}.monster-margin-end-5{margin-right:var(--monster-space-5)}.monster-margin-bottom-5{margin-bottom:var(--monster-space-5)}.monster-margin-start-5{margin-left:var(--monster-space-5)}.monster-padding-5{padding:var(--monster-space-5)}.monster-padding-top-5{padding-top:var(--monster-space-5)}.monster-padding-end-5{padding-right:var(--monster-space-5)}.monster-padding-bottom-5{padding-bottom:var(--monster-space-5)}.monster-padding-start-5{padding-left:var(--monster-space-5)}.monster-margin-6{margin:var(--monster-space-6)}.monster-margin-top-6{margin-top:var(--monster-space-6)}.monster-margin-end-6{margin-right:var(--monster-space-6)}.monster-margin-bottom-6{margin-bottom:var(--monster-space-6)}.monster-margin-start-6{margin-left:var(--monster-space-6)}.monster-padding-6{padding:var(--monster-space-6)}.monster-padding-top-6{padding-top:var(--monster-space-6)}.monster-padding-end-6{padding-right:var(--monster-space-6)}.monster-padding-bottom-6{padding-bottom:var(--monster-space-6)}.monster-padding-start-6{padding-left:var(--monster-space-6)}.monster-margin-7{margin:var(--monster-space-7)}.monster-margin-top-7{margin-top:var(--monster-space-7)}.monster-margin-end-7{margin-right:var(--monster-space-7)}.monster-margin-bottom-7{margin-bottom:var(--monster-space-7)}.monster-margin-start-7{margin-left:var(--monster-space-7)}.monster-padding-7{padding:var(--monster-space-7)}.monster-padding-top-7{padding-top:var(--monster-space-7)}.monster-padding-end-7{padding-right:var(--monster-space-7)}.monster-padding-bottom-7{padding-bottom:var(--monster-space-7)}.monster-padding-start-7{padding-left:var(--monster-space-7)}
\ No newline at end of file
+.monster-margin-0 {
+	margin: var(--monster-space-0);
+}
+.monster-margin-top-0 {
+	margin-top: var(--monster-space-0);
+}
+.monster-margin-end-0 {
+	margin-right: var(--monster-space-0);
+}
+.monster-margin-bottom-0 {
+	margin-bottom: var(--monster-space-0);
+}
+.monster-margin-start-0 {
+	margin-left: var(--monster-space-0);
+}
+.monster-padding-0 {
+	padding: var(--monster-space-0);
+}
+.monster-padding-top-0 {
+	padding-top: var(--monster-space-0);
+}
+.monster-padding-end-0 {
+	padding-right: var(--monster-space-0);
+}
+.monster-padding-bottom-0 {
+	padding-bottom: var(--monster-space-0);
+}
+.monster-padding-start-0 {
+	padding-left: var(--monster-space-0);
+}
+.monster-margin-1 {
+	margin: var(--monster-space-1);
+}
+.monster-margin-top-1 {
+	margin-top: var(--monster-space-1);
+}
+.monster-margin-end-1 {
+	margin-right: var(--monster-space-1);
+}
+.monster-margin-bottom-1 {
+	margin-bottom: var(--monster-space-1);
+}
+.monster-margin-start-1 {
+	margin-left: var(--monster-space-1);
+}
+.monster-padding-1 {
+	padding: var(--monster-space-1);
+}
+.monster-padding-top-1 {
+	padding-top: var(--monster-space-1);
+}
+.monster-padding-end-1 {
+	padding-right: var(--monster-space-1);
+}
+.monster-padding-bottom-1 {
+	padding-bottom: var(--monster-space-1);
+}
+.monster-padding-start-1 {
+	padding-left: var(--monster-space-1);
+}
+.monster-margin-2 {
+	margin: var(--monster-space-2);
+}
+.monster-margin-top-2 {
+	margin-top: var(--monster-space-2);
+}
+.monster-margin-end-2 {
+	margin-right: var(--monster-space-2);
+}
+.monster-margin-bottom-2 {
+	margin-bottom: var(--monster-space-2);
+}
+.monster-margin-start-2 {
+	margin-left: var(--monster-space-2);
+}
+.monster-padding-2 {
+	padding: var(--monster-space-2);
+}
+.monster-padding-top-2 {
+	padding-top: var(--monster-space-2);
+}
+.monster-padding-end-2 {
+	padding-right: var(--monster-space-2);
+}
+.monster-padding-bottom-2 {
+	padding-bottom: var(--monster-space-2);
+}
+.monster-padding-start-2 {
+	padding-left: var(--monster-space-2);
+}
+.monster-margin-3 {
+	margin: var(--monster-space-3);
+}
+.monster-margin-top-3 {
+	margin-top: var(--monster-space-3);
+}
+.monster-margin-end-3 {
+	margin-right: var(--monster-space-3);
+}
+.monster-margin-bottom-3 {
+	margin-bottom: var(--monster-space-3);
+}
+.monster-margin-start-3 {
+	margin-left: var(--monster-space-3);
+}
+.monster-padding-3 {
+	padding: var(--monster-space-3);
+}
+.monster-padding-top-3 {
+	padding-top: var(--monster-space-3);
+}
+.monster-padding-end-3 {
+	padding-right: var(--monster-space-3);
+}
+.monster-padding-bottom-3 {
+	padding-bottom: var(--monster-space-3);
+}
+.monster-padding-start-3 {
+	padding-left: var(--monster-space-3);
+}
+.monster-margin-4 {
+	margin: var(--monster-space-4);
+}
+.monster-margin-top-4 {
+	margin-top: var(--monster-space-4);
+}
+.monster-margin-end-4 {
+	margin-right: var(--monster-space-4);
+}
+.monster-margin-bottom-4 {
+	margin-bottom: var(--monster-space-4);
+}
+.monster-margin-start-4 {
+	margin-left: var(--monster-space-4);
+}
+.monster-padding-4 {
+	padding: var(--monster-space-4);
+}
+.monster-padding-top-4 {
+	padding-top: var(--monster-space-4);
+}
+.monster-padding-end-4 {
+	padding-right: var(--monster-space-4);
+}
+.monster-padding-bottom-4 {
+	padding-bottom: var(--monster-space-4);
+}
+.monster-padding-start-4 {
+	padding-left: var(--monster-space-4);
+}
+.monster-margin-5 {
+	margin: var(--monster-space-5);
+}
+.monster-margin-top-5 {
+	margin-top: var(--monster-space-5);
+}
+.monster-margin-end-5 {
+	margin-right: var(--monster-space-5);
+}
+.monster-margin-bottom-5 {
+	margin-bottom: var(--monster-space-5);
+}
+.monster-margin-start-5 {
+	margin-left: var(--monster-space-5);
+}
+.monster-padding-5 {
+	padding: var(--monster-space-5);
+}
+.monster-padding-top-5 {
+	padding-top: var(--monster-space-5);
+}
+.monster-padding-end-5 {
+	padding-right: var(--monster-space-5);
+}
+.monster-padding-bottom-5 {
+	padding-bottom: var(--monster-space-5);
+}
+.monster-padding-start-5 {
+	padding-left: var(--monster-space-5);
+}
+.monster-margin-6 {
+	margin: var(--monster-space-6);
+}
+.monster-margin-top-6 {
+	margin-top: var(--monster-space-6);
+}
+.monster-margin-end-6 {
+	margin-right: var(--monster-space-6);
+}
+.monster-margin-bottom-6 {
+	margin-bottom: var(--monster-space-6);
+}
+.monster-margin-start-6 {
+	margin-left: var(--monster-space-6);
+}
+.monster-padding-6 {
+	padding: var(--monster-space-6);
+}
+.monster-padding-top-6 {
+	padding-top: var(--monster-space-6);
+}
+.monster-padding-end-6 {
+	padding-right: var(--monster-space-6);
+}
+.monster-padding-bottom-6 {
+	padding-bottom: var(--monster-space-6);
+}
+.monster-padding-start-6 {
+	padding-left: var(--monster-space-6);
+}
+.monster-margin-7 {
+	margin: var(--monster-space-7);
+}
+.monster-margin-top-7 {
+	margin-top: var(--monster-space-7);
+}
+.monster-margin-end-7 {
+	margin-right: var(--monster-space-7);
+}
+.monster-margin-bottom-7 {
+	margin-bottom: var(--monster-space-7);
+}
+.monster-margin-start-7 {
+	margin-left: var(--monster-space-7);
+}
+.monster-padding-7 {
+	padding: var(--monster-space-7);
+}
+.monster-padding-top-7 {
+	padding-top: var(--monster-space-7);
+}
+.monster-padding-end-7 {
+	padding-right: var(--monster-space-7);
+}
+.monster-padding-bottom-7 {
+	padding-bottom: var(--monster-space-7);
+}
+.monster-padding-start-7 {
+	padding-left: var(--monster-space-7);
+}
diff --git a/source/components/style/spinner.css b/source/components/style/spinner.css
index f374618ddedece2afc30e293bddcb56602488e1f..0fb8eaa1df55bcb8fe9c6e08c85523644a57f7c6 100644
--- a/source/components/style/spinner.css
+++ b/source/components/style/spinner.css
@@ -1,2 +1,8 @@
 /** generated from spinner.pcss **/
-.monster-spinner{height:100%;-webkit-mask:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' stroke='red' viewBox='0 0 44 44'%3E%3Cg fill='none' fill-rule='evenodd' stroke-width='2'%3E%3Ccircle cx='22' cy='22' r='1'%3E%3Canimate attributeName='r' begin='0s' calcMode='spline' dur='1.8s' keySplines='0.165, 0.84, 0.44, 1' keyTimes='0; 1' repeatCount='indefinite' values='1; 20'/%3E%3Canimate attributeName='stroke-opacity' begin='0s' calcMode='spline' dur='1.8s' keySplines='0.3, 0.61, 0.355, 1' keyTimes='0; 1' repeatCount='indefinite' values='1; 0'/%3E%3C/circle%3E%3Ccircle cx='22' cy='22' r='1'%3E%3Canimate attributeName='r' begin='-0.9s' calcMode='spline' dur='1.8s' keySplines='0.165, 0.84, 0.44, 1' keyTimes='0; 1' repeatCount='indefinite' values='1; 20'/%3E%3Canimate attributeName='stroke-opacity' begin='-0.9s' calcMode='spline' dur='1.8s' keySplines='0.3, 0.61, 0.355, 1' keyTimes='0; 1' repeatCount='indefinite' values='1; 0'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E") no-repeat 50% 50%;mask:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' stroke='red' viewBox='0 0 44 44'%3E%3Cg fill='none' fill-rule='evenodd' stroke-width='2'%3E%3Ccircle cx='22' cy='22' r='1'%3E%3Canimate attributeName='r' begin='0s' calcMode='spline' dur='1.8s' keySplines='0.165, 0.84, 0.44, 1' keyTimes='0; 1' repeatCount='indefinite' values='1; 20'/%3E%3Canimate attributeName='stroke-opacity' begin='0s' calcMode='spline' dur='1.8s' keySplines='0.3, 0.61, 0.355, 1' keyTimes='0; 1' repeatCount='indefinite' values='1; 0'/%3E%3C/circle%3E%3Ccircle cx='22' cy='22' r='1'%3E%3Canimate attributeName='r' begin='-0.9s' calcMode='spline' dur='1.8s' keySplines='0.165, 0.84, 0.44, 1' keyTimes='0; 1' repeatCount='indefinite' values='1; 20'/%3E%3Canimate attributeName='stroke-opacity' begin='-0.9s' calcMode='spline' dur='1.8s' keySplines='0.3, 0.61, 0.355, 1' keyTimes='0; 1' repeatCount='indefinite' values='1; 0'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E") no-repeat 50% 50%}
\ No newline at end of file
+.monster-spinner {
+	height: 100%;
+	-webkit-mask: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' stroke='red' viewBox='0 0 44 44'%3E%3Cg fill='none' fill-rule='evenodd' stroke-width='2'%3E%3Ccircle cx='22' cy='22' r='1'%3E%3Canimate attributeName='r' begin='0s' calcMode='spline' dur='1.8s' keySplines='0.165, 0.84, 0.44, 1' keyTimes='0; 1' repeatCount='indefinite' values='1; 20'/%3E%3Canimate attributeName='stroke-opacity' begin='0s' calcMode='spline' dur='1.8s' keySplines='0.3, 0.61, 0.355, 1' keyTimes='0; 1' repeatCount='indefinite' values='1; 0'/%3E%3C/circle%3E%3Ccircle cx='22' cy='22' r='1'%3E%3Canimate attributeName='r' begin='-0.9s' calcMode='spline' dur='1.8s' keySplines='0.165, 0.84, 0.44, 1' keyTimes='0; 1' repeatCount='indefinite' values='1; 20'/%3E%3Canimate attributeName='stroke-opacity' begin='-0.9s' calcMode='spline' dur='1.8s' keySplines='0.3, 0.61, 0.355, 1' keyTimes='0; 1' repeatCount='indefinite' values='1; 0'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E")
+		no-repeat 50% 50%;
+	mask: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' stroke='red' viewBox='0 0 44 44'%3E%3Cg fill='none' fill-rule='evenodd' stroke-width='2'%3E%3Ccircle cx='22' cy='22' r='1'%3E%3Canimate attributeName='r' begin='0s' calcMode='spline' dur='1.8s' keySplines='0.165, 0.84, 0.44, 1' keyTimes='0; 1' repeatCount='indefinite' values='1; 20'/%3E%3Canimate attributeName='stroke-opacity' begin='0s' calcMode='spline' dur='1.8s' keySplines='0.3, 0.61, 0.355, 1' keyTimes='0; 1' repeatCount='indefinite' values='1; 0'/%3E%3C/circle%3E%3Ccircle cx='22' cy='22' r='1'%3E%3Canimate attributeName='r' begin='-0.9s' calcMode='spline' dur='1.8s' keySplines='0.165, 0.84, 0.44, 1' keyTimes='0; 1' repeatCount='indefinite' values='1; 20'/%3E%3Canimate attributeName='stroke-opacity' begin='-0.9s' calcMode='spline' dur='1.8s' keySplines='0.3, 0.61, 0.355, 1' keyTimes='0; 1' repeatCount='indefinite' values='1; 0'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E")
+		no-repeat 50% 50%;
+}
diff --git a/source/components/style/table.css b/source/components/style/table.css
index a612a2e016d499ce95afb4af0e0e77b1c0a81ae1..2cdd3bd368438d951e6f30182c3f2eb601084ab0 100644
--- a/source/components/style/table.css
+++ b/source/components/style/table.css
@@ -1,2 +1,40 @@
 /** generated from table.pcss **/
-th{text-align:inherit}.monster-table{border-collapse:collapse;box-sizing:border-box;color:#212529;margin-bottom:1rem;width:100%}.monster-table tr{margin:10px 0}.monster-table td,.monster-table th{padding:.75rem;vertical-align:top}.monster-table thead th{vertical-align:bottom}.monster-table-container{box-sizing:border-box;display:block;margin:0;overflow-x:auto;padding:8px;width:100%}.monster-table tbody tr td,.monster-table tbody tr th,.monster-table-container{background-color:var(--monster-theme-control-bg-color);color:var(--monster-theme-control-color)}.monster-table tbody tr td,.monster-table tbody tr th{border-bottom:1px solid var(--monster-theme-control-border-color)}
\ No newline at end of file
+th {
+	text-align: inherit;
+}
+.monster-table {
+	border-collapse: collapse;
+	box-sizing: border-box;
+	color: #212529;
+	margin-bottom: 1rem;
+	width: 100%;
+}
+.monster-table tr {
+	margin: 10px 0;
+}
+.monster-table td,
+.monster-table th {
+	padding: .75rem;
+	vertical-align: top;
+}
+.monster-table thead th {
+	vertical-align: bottom;
+}
+.monster-table-container {
+	box-sizing: border-box;
+	display: block;
+	margin: 0;
+	overflow-x: auto;
+	padding: 8px;
+	width: 100%;
+}
+.monster-table tbody tr td,
+.monster-table tbody tr th,
+.monster-table-container {
+	background-color: var(--monster-theme-control-bg-color);
+	color: var(--monster-theme-control-color);
+}
+.monster-table tbody tr td,
+.monster-table tbody tr th {
+	border-bottom: 1px solid var(--monster-theme-control-border-color);
+}
diff --git a/source/components/style/theme.css b/source/components/style/theme.css
index dbcc29cf93cfe1000a188dafead5af6b41ce0e31..3edf4815f1e324f8f7929d2e40bf43faf8134e6a 100644
--- a/source/components/style/theme.css
+++ b/source/components/style/theme.css
@@ -1,2 +1,357 @@
 /** generated from theme.pcss **/
-.monster-theme-primary-1{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-theme-primary-disabled-1{background-color:var(--monster-bg-color-primary-disabled-1);color:var(--monster-color-primary-disabled-1)}.monster-theme-secondary-1{background-color:var(--monster-bg-color-secondary-1);color:var(--monster-color-secondary-1)}.monster-theme-tertiary-1{background-color:var(--monster-bg-color-tertiary-1);color:var(--monster-color-tertiary-1)}.monster-theme-destructive-1{background-color:var(--monster-bg-color-destructive-1);color:var(--monster-color-destructive-1)}.monster-theme-success-1{background-color:var(--monster-bg-color-success-1);color:var(--monster-color-success-1)}.monster-theme-warning-1{background-color:var(--monster-bg-color-warning-1);color:var(--monster-color-warning-1)}.monster-theme-error-1{background-color:var(--monster-bg-color-error-1);color:var(--monster-color-error-1)}.monster-theme-selection-1{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}.monster-border-color-1{border-color:var(--monster-color-border-1)}.monster-color-neutral-1{color:var(--monster-color-primary-1)}.monster-bg-color-primary-1{background-color:var(--monster-bg-color-primary-1)}.monster-bg-color-secondary-1{background-color:var(--monster-bg-color-secondary-1)}.monster-bg-color-tertiary-1{background-color:var(--monster-bg-color-tertiary-1)}.monster-color-primary-1{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-color-secondary-1{background-color:var(--monster-bg-color-secondary-1);color:var(--monster-color-secondary-1)}.monster-color-tertiary-1{background-color:var(--monster-bg-color-tertiary-1);color:var(--monster-color-tertiary-1)}.monster-color-destructive-1{background-color:var(--monster-bg-color-destructive-1);color:var(--monster-color-destructive-1)}.monster-color-success-1{background-color:var(--monster-bg-color-success-1);color:var(--monster-color-success-1)}.monster-color-warning-1{background-color:var(--monster-bg-color-warning-1);color:var(--monster-color-warning-1)}.monster-color-error-1{background-color:var(--monster-bg-color-error-1);color:var(--monster-color-error-1)}.monster-color-selection-1{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}.monster-theme-primary-2{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}.monster-theme-primary-disabled-2{background-color:var(--monster-bg-color-primary-disabled-2);color:var(--monster-color-primary-disabled-2)}.monster-theme-secondary-2{background-color:var(--monster-bg-color-secondary-2);color:var(--monster-color-secondary-2)}.monster-theme-tertiary-2{background-color:var(--monster-bg-color-tertiary-2);color:var(--monster-color-tertiary-2)}.monster-theme-destructive-2{background-color:var(--monster-bg-color-destructive-2);color:var(--monster-color-destructive-2)}.monster-theme-success-2{background-color:var(--monster-bg-color-success-2);color:var(--monster-color-success-2)}.monster-theme-warning-2{background-color:var(--monster-bg-color-warning-2);color:var(--monster-color-warning-2)}.monster-theme-error-2{background-color:var(--monster-bg-color-error-2);color:var(--monster-color-error-2)}.monster-theme-selection-2{background-color:var(--monster-bg-color-selection-2);color:var(--monster-color-selection-2)}.monster-border-color-2{border-color:var(--monster-color-border-2)}.monster-color-neutral-2{color:var(--monster-color-primary-2)}.monster-bg-color-primary-2{background-color:var(--monster-bg-color-primary-2)}.monster-bg-color-secondary-2{background-color:var(--monster-bg-color-secondary-2)}.monster-bg-color-tertiary-2{background-color:var(--monster-bg-color-tertiary-2)}.monster-color-primary-2{background-color:var(--monster-bg-color-primary-2);color:var(--monster-color-primary-2)}.monster-color-secondary-2{background-color:var(--monster-bg-color-secondary-2);color:var(--monster-color-secondary-2)}.monster-color-tertiary-2{background-color:var(--monster-bg-color-tertiary-2);color:var(--monster-color-tertiary-2)}.monster-color-destructive-2{background-color:var(--monster-bg-color-destructive-2);color:var(--monster-color-destructive-2)}.monster-color-success-2{background-color:var(--monster-bg-color-success-2);color:var(--monster-color-success-2)}.monster-color-warning-2{background-color:var(--monster-bg-color-warning-2);color:var(--monster-color-warning-2)}.monster-color-error-2{background-color:var(--monster-bg-color-error-2);color:var(--monster-color-error-2)}.monster-color-selection-2{background-color:var(--monster-bg-color-selection-2);color:var(--monster-color-selection-2)}.monster-theme-primary-3{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-theme-primary-disabled-3{background-color:var(--monster-bg-color-primary-disabled-3);color:var(--monster-color-primary-disabled-3)}.monster-theme-secondary-3{background-color:var(--monster-bg-color-secondary-3);color:var(--monster-color-secondary-3)}.monster-theme-tertiary-3{background-color:var(--monster-bg-color-tertiary-3);color:var(--monster-color-tertiary-3)}.monster-theme-destructive-3{background-color:var(--monster-bg-color-destructive-3);color:var(--monster-color-destructive-3)}.monster-theme-success-3{background-color:var(--monster-bg-color-success-3);color:var(--monster-color-success-3)}.monster-theme-warning-3{background-color:var(--monster-bg-color-warning-3);color:var(--monster-color-warning-3)}.monster-theme-error-3{background-color:var(--monster-bg-color-error-3);color:var(--monster-color-error-3)}.monster-theme-selection-3{background-color:var(--monster-bg-color-selection-3);color:var(--monster-color-selection-3)}.monster-border-color-3{border-color:var(--monster-color-border-3)}.monster-color-neutral-3{color:var(--monster-color-primary-3)}.monster-bg-color-primary-3{background-color:var(--monster-bg-color-primary-3)}.monster-bg-color-secondary-3{background-color:var(--monster-bg-color-secondary-3)}.monster-bg-color-tertiary-3{background-color:var(--monster-bg-color-tertiary-3)}.monster-color-primary-3{background-color:var(--monster-bg-color-primary-3);color:var(--monster-color-primary-3)}.monster-color-secondary-3{background-color:var(--monster-bg-color-secondary-3);color:var(--monster-color-secondary-3)}.monster-color-tertiary-3{background-color:var(--monster-bg-color-tertiary-3);color:var(--monster-color-tertiary-3)}.monster-color-destructive-3{background-color:var(--monster-bg-color-destructive-3);color:var(--monster-color-destructive-3)}.monster-color-success-3{background-color:var(--monster-bg-color-success-3);color:var(--monster-color-success-3)}.monster-color-warning-3{background-color:var(--monster-bg-color-warning-3);color:var(--monster-color-warning-3)}.monster-color-error-3{background-color:var(--monster-bg-color-error-3);color:var(--monster-color-error-3)}.monster-color-selection-3{background-color:var(--monster-bg-color-selection-3);color:var(--monster-color-selection-3)}.monster-theme-primary-4{background-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-theme-primary-disabled-4{background-color:var(--monster-bg-color-primary-disabled-4);color:var(--monster-color-primary-disabled-4)}.monster-theme-secondary-4{background-color:var(--monster-bg-color-secondary-4);color:var(--monster-color-secondary-4)}.monster-theme-tertiary-4{background-color:var(--monster-bg-color-tertiary-4);color:var(--monster-color-tertiary-4)}.monster-theme-destructive-4{background-color:var(--monster-bg-color-destructive-4);color:var(--monster-color-destructive-4)}.monster-theme-success-4{background-color:var(--monster-bg-color-success-4);color:var(--monster-color-success-4)}.monster-theme-warning-4{background-color:var(--monster-bg-color-warning-4);color:var(--monster-color-warning-4)}.monster-theme-error-4{background-color:var(--monster-bg-color-error-4);color:var(--monster-color-error-4)}.monster-theme-selection-4{background-color:var(--monster-bg-color-selection-4);color:var(--monster-color-selection-4)}.monster-border-color-4{border-color:var(--monster-color-border-4)}.monster-color-neutral-4{color:var(--monster-color-primary-4)}.monster-bg-color-primary-4{background-color:var(--monster-bg-color-primary-4)}.monster-bg-color-secondary-4{background-color:var(--monster-bg-color-secondary-4)}.monster-bg-color-tertiary-4{background-color:var(--monster-bg-color-tertiary-4)}.monster-color-primary-4{background-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-color-secondary-4{background-color:var(--monster-bg-color-secondary-4);color:var(--monster-color-secondary-4)}.monster-color-tertiary-4{background-color:var(--monster-bg-color-tertiary-4);color:var(--monster-color-tertiary-4)}.monster-color-destructive-4{background-color:var(--monster-bg-color-destructive-4);color:var(--monster-color-destructive-4)}.monster-color-success-4{background-color:var(--monster-bg-color-success-4);color:var(--monster-color-success-4)}.monster-color-warning-4{background-color:var(--monster-bg-color-warning-4);color:var(--monster-color-warning-4)}.monster-color-error-4{background-color:var(--monster-bg-color-error-4);color:var(--monster-color-error-4)}.monster-color-selection-4{background-color:var(--monster-bg-color-selection-4);color:var(--monster-color-selection-4)}.monster-theme-control-container-1,.monster-theme-control-row-1{border:1px solid var(--monster-theme-control-border-color)}.monster-theme-control-container-1,.monster-theme-control-element,.monster-theme-control-row-1{background-color:var(--monster-theme-control-bg-color);color:var(--monster-theme-control-color)}.monster-theme-control-background{background-color:var(--monster-theme-control-bg-color)}.monster-theme-background-inherit{background-color:inherit!important}.monster-theme-on{background-color:var(--monster-theme-on-bg-color);color:var(--monster-theme-on-color)}.monster-theme-off{background-color:var(--monster-theme-off-bg-color);color:var(--monster-theme-off-color)}
\ No newline at end of file
+.monster-theme-primary-1 {
+	background-color: var(--monster-bg-color-primary-1);
+	color: var(--monster-color-primary-1);
+}
+.monster-theme-primary-disabled-1 {
+	background-color: var(--monster-bg-color-primary-disabled-1);
+	color: var(--monster-color-primary-disabled-1);
+}
+.monster-theme-secondary-1 {
+	background-color: var(--monster-bg-color-secondary-1);
+	color: var(--monster-color-secondary-1);
+}
+.monster-theme-tertiary-1 {
+	background-color: var(--monster-bg-color-tertiary-1);
+	color: var(--monster-color-tertiary-1);
+}
+.monster-theme-destructive-1 {
+	background-color: var(--monster-bg-color-destructive-1);
+	color: var(--monster-color-destructive-1);
+}
+.monster-theme-success-1 {
+	background-color: var(--monster-bg-color-success-1);
+	color: var(--monster-color-success-1);
+}
+.monster-theme-warning-1 {
+	background-color: var(--monster-bg-color-warning-1);
+	color: var(--monster-color-warning-1);
+}
+.monster-theme-error-1 {
+	background-color: var(--monster-bg-color-error-1);
+	color: var(--monster-color-error-1);
+}
+.monster-theme-selection-1 {
+	background-color: var(--monster-bg-color-selection-1);
+	color: var(--monster-color-selection-1);
+}
+.monster-border-color-1 {
+	border-color: var(--monster-color-border-1);
+}
+.monster-color-neutral-1 {
+	color: var(--monster-color-primary-1);
+}
+.monster-bg-color-primary-1 {
+	background-color: var(--monster-bg-color-primary-1);
+}
+.monster-bg-color-secondary-1 {
+	background-color: var(--monster-bg-color-secondary-1);
+}
+.monster-bg-color-tertiary-1 {
+	background-color: var(--monster-bg-color-tertiary-1);
+}
+.monster-color-primary-1 {
+	background-color: var(--monster-bg-color-primary-1);
+	color: var(--monster-color-primary-1);
+}
+.monster-color-secondary-1 {
+	background-color: var(--monster-bg-color-secondary-1);
+	color: var(--monster-color-secondary-1);
+}
+.monster-color-tertiary-1 {
+	background-color: var(--monster-bg-color-tertiary-1);
+	color: var(--monster-color-tertiary-1);
+}
+.monster-color-destructive-1 {
+	background-color: var(--monster-bg-color-destructive-1);
+	color: var(--monster-color-destructive-1);
+}
+.monster-color-success-1 {
+	background-color: var(--monster-bg-color-success-1);
+	color: var(--monster-color-success-1);
+}
+.monster-color-warning-1 {
+	background-color: var(--monster-bg-color-warning-1);
+	color: var(--monster-color-warning-1);
+}
+.monster-color-error-1 {
+	background-color: var(--monster-bg-color-error-1);
+	color: var(--monster-color-error-1);
+}
+.monster-color-selection-1 {
+	background-color: var(--monster-bg-color-selection-1);
+	color: var(--monster-color-selection-1);
+}
+.monster-theme-primary-2 {
+	background-color: var(--monster-bg-color-primary-2);
+	color: var(--monster-color-primary-2);
+}
+.monster-theme-primary-disabled-2 {
+	background-color: var(--monster-bg-color-primary-disabled-2);
+	color: var(--monster-color-primary-disabled-2);
+}
+.monster-theme-secondary-2 {
+	background-color: var(--monster-bg-color-secondary-2);
+	color: var(--monster-color-secondary-2);
+}
+.monster-theme-tertiary-2 {
+	background-color: var(--monster-bg-color-tertiary-2);
+	color: var(--monster-color-tertiary-2);
+}
+.monster-theme-destructive-2 {
+	background-color: var(--monster-bg-color-destructive-2);
+	color: var(--monster-color-destructive-2);
+}
+.monster-theme-success-2 {
+	background-color: var(--monster-bg-color-success-2);
+	color: var(--monster-color-success-2);
+}
+.monster-theme-warning-2 {
+	background-color: var(--monster-bg-color-warning-2);
+	color: var(--monster-color-warning-2);
+}
+.monster-theme-error-2 {
+	background-color: var(--monster-bg-color-error-2);
+	color: var(--monster-color-error-2);
+}
+.monster-theme-selection-2 {
+	background-color: var(--monster-bg-color-selection-2);
+	color: var(--monster-color-selection-2);
+}
+.monster-border-color-2 {
+	border-color: var(--monster-color-border-2);
+}
+.monster-color-neutral-2 {
+	color: var(--monster-color-primary-2);
+}
+.monster-bg-color-primary-2 {
+	background-color: var(--monster-bg-color-primary-2);
+}
+.monster-bg-color-secondary-2 {
+	background-color: var(--monster-bg-color-secondary-2);
+}
+.monster-bg-color-tertiary-2 {
+	background-color: var(--monster-bg-color-tertiary-2);
+}
+.monster-color-primary-2 {
+	background-color: var(--monster-bg-color-primary-2);
+	color: var(--monster-color-primary-2);
+}
+.monster-color-secondary-2 {
+	background-color: var(--monster-bg-color-secondary-2);
+	color: var(--monster-color-secondary-2);
+}
+.monster-color-tertiary-2 {
+	background-color: var(--monster-bg-color-tertiary-2);
+	color: var(--monster-color-tertiary-2);
+}
+.monster-color-destructive-2 {
+	background-color: var(--monster-bg-color-destructive-2);
+	color: var(--monster-color-destructive-2);
+}
+.monster-color-success-2 {
+	background-color: var(--monster-bg-color-success-2);
+	color: var(--monster-color-success-2);
+}
+.monster-color-warning-2 {
+	background-color: var(--monster-bg-color-warning-2);
+	color: var(--monster-color-warning-2);
+}
+.monster-color-error-2 {
+	background-color: var(--monster-bg-color-error-2);
+	color: var(--monster-color-error-2);
+}
+.monster-color-selection-2 {
+	background-color: var(--monster-bg-color-selection-2);
+	color: var(--monster-color-selection-2);
+}
+.monster-theme-primary-3 {
+	background-color: var(--monster-bg-color-primary-3);
+	color: var(--monster-color-primary-3);
+}
+.monster-theme-primary-disabled-3 {
+	background-color: var(--monster-bg-color-primary-disabled-3);
+	color: var(--monster-color-primary-disabled-3);
+}
+.monster-theme-secondary-3 {
+	background-color: var(--monster-bg-color-secondary-3);
+	color: var(--monster-color-secondary-3);
+}
+.monster-theme-tertiary-3 {
+	background-color: var(--monster-bg-color-tertiary-3);
+	color: var(--monster-color-tertiary-3);
+}
+.monster-theme-destructive-3 {
+	background-color: var(--monster-bg-color-destructive-3);
+	color: var(--monster-color-destructive-3);
+}
+.monster-theme-success-3 {
+	background-color: var(--monster-bg-color-success-3);
+	color: var(--monster-color-success-3);
+}
+.monster-theme-warning-3 {
+	background-color: var(--monster-bg-color-warning-3);
+	color: var(--monster-color-warning-3);
+}
+.monster-theme-error-3 {
+	background-color: var(--monster-bg-color-error-3);
+	color: var(--monster-color-error-3);
+}
+.monster-theme-selection-3 {
+	background-color: var(--monster-bg-color-selection-3);
+	color: var(--monster-color-selection-3);
+}
+.monster-border-color-3 {
+	border-color: var(--monster-color-border-3);
+}
+.monster-color-neutral-3 {
+	color: var(--monster-color-primary-3);
+}
+.monster-bg-color-primary-3 {
+	background-color: var(--monster-bg-color-primary-3);
+}
+.monster-bg-color-secondary-3 {
+	background-color: var(--monster-bg-color-secondary-3);
+}
+.monster-bg-color-tertiary-3 {
+	background-color: var(--monster-bg-color-tertiary-3);
+}
+.monster-color-primary-3 {
+	background-color: var(--monster-bg-color-primary-3);
+	color: var(--monster-color-primary-3);
+}
+.monster-color-secondary-3 {
+	background-color: var(--monster-bg-color-secondary-3);
+	color: var(--monster-color-secondary-3);
+}
+.monster-color-tertiary-3 {
+	background-color: var(--monster-bg-color-tertiary-3);
+	color: var(--monster-color-tertiary-3);
+}
+.monster-color-destructive-3 {
+	background-color: var(--monster-bg-color-destructive-3);
+	color: var(--monster-color-destructive-3);
+}
+.monster-color-success-3 {
+	background-color: var(--monster-bg-color-success-3);
+	color: var(--monster-color-success-3);
+}
+.monster-color-warning-3 {
+	background-color: var(--monster-bg-color-warning-3);
+	color: var(--monster-color-warning-3);
+}
+.monster-color-error-3 {
+	background-color: var(--monster-bg-color-error-3);
+	color: var(--monster-color-error-3);
+}
+.monster-color-selection-3 {
+	background-color: var(--monster-bg-color-selection-3);
+	color: var(--monster-color-selection-3);
+}
+.monster-theme-primary-4 {
+	background-color: var(--monster-bg-color-primary-4);
+	color: var(--monster-color-primary-4);
+}
+.monster-theme-primary-disabled-4 {
+	background-color: var(--monster-bg-color-primary-disabled-4);
+	color: var(--monster-color-primary-disabled-4);
+}
+.monster-theme-secondary-4 {
+	background-color: var(--monster-bg-color-secondary-4);
+	color: var(--monster-color-secondary-4);
+}
+.monster-theme-tertiary-4 {
+	background-color: var(--monster-bg-color-tertiary-4);
+	color: var(--monster-color-tertiary-4);
+}
+.monster-theme-destructive-4 {
+	background-color: var(--monster-bg-color-destructive-4);
+	color: var(--monster-color-destructive-4);
+}
+.monster-theme-success-4 {
+	background-color: var(--monster-bg-color-success-4);
+	color: var(--monster-color-success-4);
+}
+.monster-theme-warning-4 {
+	background-color: var(--monster-bg-color-warning-4);
+	color: var(--monster-color-warning-4);
+}
+.monster-theme-error-4 {
+	background-color: var(--monster-bg-color-error-4);
+	color: var(--monster-color-error-4);
+}
+.monster-theme-selection-4 {
+	background-color: var(--monster-bg-color-selection-4);
+	color: var(--monster-color-selection-4);
+}
+.monster-border-color-4 {
+	border-color: var(--monster-color-border-4);
+}
+.monster-color-neutral-4 {
+	color: var(--monster-color-primary-4);
+}
+.monster-bg-color-primary-4 {
+	background-color: var(--monster-bg-color-primary-4);
+}
+.monster-bg-color-secondary-4 {
+	background-color: var(--monster-bg-color-secondary-4);
+}
+.monster-bg-color-tertiary-4 {
+	background-color: var(--monster-bg-color-tertiary-4);
+}
+.monster-color-primary-4 {
+	background-color: var(--monster-bg-color-primary-4);
+	color: var(--monster-color-primary-4);
+}
+.monster-color-secondary-4 {
+	background-color: var(--monster-bg-color-secondary-4);
+	color: var(--monster-color-secondary-4);
+}
+.monster-color-tertiary-4 {
+	background-color: var(--monster-bg-color-tertiary-4);
+	color: var(--monster-color-tertiary-4);
+}
+.monster-color-destructive-4 {
+	background-color: var(--monster-bg-color-destructive-4);
+	color: var(--monster-color-destructive-4);
+}
+.monster-color-success-4 {
+	background-color: var(--monster-bg-color-success-4);
+	color: var(--monster-color-success-4);
+}
+.monster-color-warning-4 {
+	background-color: var(--monster-bg-color-warning-4);
+	color: var(--monster-color-warning-4);
+}
+.monster-color-error-4 {
+	background-color: var(--monster-bg-color-error-4);
+	color: var(--monster-color-error-4);
+}
+.monster-color-selection-4 {
+	background-color: var(--monster-bg-color-selection-4);
+	color: var(--monster-color-selection-4);
+}
+.monster-theme-control-container-1,
+.monster-theme-control-row-1 {
+	border: 1px solid var(--monster-theme-control-border-color);
+}
+.monster-theme-control-container-1,
+.monster-theme-control-element,
+.monster-theme-control-row-1 {
+	background-color: var(--monster-theme-control-bg-color);
+	color: var(--monster-theme-control-color);
+}
+.monster-theme-control-background {
+	background-color: var(--monster-theme-control-bg-color);
+}
+.monster-theme-background-inherit {
+	background-color: inherit !important;
+}
+.monster-theme-on {
+	background-color: var(--monster-theme-on-bg-color);
+	color: var(--monster-theme-on-color);
+}
+.monster-theme-off {
+	background-color: var(--monster-theme-off-bg-color);
+	color: var(--monster-theme-off-color);
+}
diff --git a/source/components/style/typography.css b/source/components/style/typography.css
index 8749e191f43b88516b618350cbc4b8d6a260772f..660c9d6cddfdea48a5469c1fad43657285e4ddca 100644
--- a/source/components/style/typography.css
+++ b/source/components/style/typography.css
@@ -1,2 +1,179 @@
 /** generated from typography.pcss **/
-@font-face{font-display:swap;font-family:Raleway;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Quicksand;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}body,html{font-family:var(--monster-font-family);font-size:1rem;font-weight:400;line-height:1.4}html{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-paragraph,p{font-size:1rem;font-weight:400;line-height:1.6;text-align:justify}.monster-h1,h1{font-size:3rem;font-weight:400;line-height:1.15;margin:4rem 0 1.5rem}.monster-h2,h2{font-size:2.5rem;font-weight:400;line-height:1.2;margin:4rem 0 1.5rem}.monster-h3,h3{font-size:2rem;font-weight:400;line-height:1.25;margin:4rem 0 1.25rem}.monster-h4,h4{font-size:1.5rem;font-weight:400;line-height:1.3;margin:4rem 0 1.25rem}.monster-h5,h5{font-size:1.4rem;font-weight:bolder;line-height:1.3;margin:4rem 0 1.25rem}.monster-h6,h6{font-size:1.3rem;font-weight:700;line-height:1.3;margin:4rem 0 1.25rem}p+h1{margin-top:3.75rem}p+h2{margin-top:3rem}p+h3{margin-top:2.25rem}p+h4{margin-top:1.5rem}p+h5{margin-top:.75rem}div+h1,div+h2,div+h3,div+h4,div+h5,div+h6,p+h6{margin-top:0}.deco{background:linear-gradient(to right,var(--monster-color-gradient-1) 0,var(--monster-color-gradient-2) 50%,var(--monster-color-gradient-3) 100%);-webkit-background-clip:text;background-clip:text;background-size:cover;color:var(--monster-color-secondary-1);text-fill-color:transparent;-webkit-text-fill-color:transparent}::-moz-selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}::selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}kbd{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;border-radius:10rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;padding:.25em .6em;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}details{margin-bottom:1rem}summary{cursor:pointer;font-feature-settings:"tnum";font-weight:700;letter-spacing:.1em;padding:.6rem 1rem}details[open]{padding:.6rem 1rem .75rem}details[open] summary{margin-bottom:.5rem;padding:0}.monster-no-user-select{-webkit-user-select:none;-moz-user-select:none;user-select:none}@keyframes details-show{0%{opacity:0;transform:translateY(-.5em)}}details[open]>:not(summary){animation:details-show .15s ease-in-out}details[open]>:last-child{margin-bottom:0}.monospace{font-family:var(--monster-font-family-monospace)}
\ No newline at end of file
+@font-face {
+	font-display: swap;
+	font-family: Raleway;
+	font-style: normal;
+	font-weight: 300;
+	src: url(data:application/x-font-woff2;charset=utf-8;base64,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)
+		format("woff2");
+	unicode-range:
+		u+00??, u+0131, u+0152-0153, u+02bb-02bc, u+02c6, u+02da, u+02dc, u+2000-206f, u+2074, u+20ac, u+2122, u+2191, u+2193, u+2212, u+2215, u+feff, u+fffd;
+}
+@font-face {
+	font-display: swap;
+	font-family: Quicksand;
+	font-style: normal;
+	font-weight: 300;
+	src: url(data:application/x-font-woff2;charset=utf-8;base64,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)
+		format("woff2");
+	unicode-range:
+		u+00??, u+0131, u+0152-0153, u+02bb-02bc, u+02c6, u+02da, u+02dc, u+2000-206f, u+2074, u+20ac, u+2122, u+2191, u+2193, u+2212, u+2215, u+feff, u+fffd;
+}
+body,
+html {
+	font-family: var(--monster-font-family);
+	font-size: 1rem;
+	font-weight: 400;
+	line-height: 1.4;
+}
+html {
+	background-color: var(--monster-bg-color-primary-1);
+	color: var(--monster-color-primary-1);
+}
+.monster-paragraph,
+p {
+	font-size: 1rem;
+	font-weight: 400;
+	line-height: 1.6;
+	text-align: justify;
+}
+.monster-h1,
+h1 {
+	font-size: 3rem;
+	font-weight: 400;
+	line-height: 1.15;
+	margin: 4rem 0 1.5rem;
+}
+.monster-h2,
+h2 {
+	font-size: 2.5rem;
+	font-weight: 400;
+	line-height: 1.2;
+	margin: 4rem 0 1.5rem;
+}
+.monster-h3,
+h3 {
+	font-size: 2rem;
+	font-weight: 400;
+	line-height: 1.25;
+	margin: 4rem 0 1.25rem;
+}
+.monster-h4,
+h4 {
+	font-size: 1.5rem;
+	font-weight: 400;
+	line-height: 1.3;
+	margin: 4rem 0 1.25rem;
+}
+.monster-h5,
+h5 {
+	font-size: 1.4rem;
+	font-weight: bolder;
+	line-height: 1.3;
+	margin: 4rem 0 1.25rem;
+}
+.monster-h6,
+h6 {
+	font-size: 1.3rem;
+	font-weight: 700;
+	line-height: 1.3;
+	margin: 4rem 0 1.25rem;
+}
+p + h1 {
+	margin-top: 3.75rem;
+}
+p + h2 {
+	margin-top: 3rem;
+}
+p + h3 {
+	margin-top: 2.25rem;
+}
+p + h4 {
+	margin-top: 1.5rem;
+}
+p + h5 {
+	margin-top: .75rem;
+}
+div + h1,
+div + h2,
+div + h3,
+div + h4,
+div + h5,
+div + h6,
+p + h6 {
+	margin-top: 0;
+}
+.deco {
+	background: linear-gradient(
+		to right,
+		var(--monster-color-gradient-1) 0,
+		var(--monster-color-gradient-2) 50%,
+		var(--monster-color-gradient-3) 100%
+	);
+	-webkit-background-clip: text;
+	background-clip: text;
+	background-size: cover;
+	color: var(--monster-color-secondary-1);
+	text-fill-color: transparent;
+	-webkit-text-fill-color: transparent;
+}
+::-moz-selection {
+	background-color: var(--monster-bg-color-selection-1);
+	color: var(--monster-color-selection-1);
+}
+::selection {
+	background-color: var(--monster-bg-color-selection-1);
+	color: var(--monster-color-selection-1);
+}
+kbd {
+	background-color: var(--monster-bg-color-primary-4);
+	border-radius: .25rem;
+	border-radius: 10rem;
+	color: var(--monster-color-primary-4);
+	display: inline-block;
+	font-size: 75%;
+	font-weight: 700;
+	line-height: 1;
+	padding: .25em .6em;
+	text-align: center;
+	text-decoration: none;
+	vertical-align: baseline;
+	white-space: nowrap;
+}
+details {
+	margin-bottom: 1rem;
+}
+summary {
+	cursor: pointer;
+	font-feature-settings: "tnum";
+	font-weight: 700;
+	letter-spacing: .1em;
+	padding: .6rem 1rem;
+}
+details[open] {
+	padding: .6rem 1rem .75rem;
+}
+details[open] summary {
+	margin-bottom: .5rem;
+	padding: 0;
+}
+.monster-no-user-select {
+	-webkit-user-select: none;
+	-moz-user-select: none;
+	user-select: none;
+}
+@keyframes details-show {
+	0% {
+		opacity: 0;
+		transform: translateY(-.5em);
+	}
+}
+details[open] > :not(summary) {
+	animation: details-show .15s ease-in-out;
+}
+details[open] > :last-child {
+	margin-bottom: 0;
+}
+.monospace {
+	font-family: var(--monster-font-family-monospace);
+}
diff --git a/source/monster.mjs b/source/monster.mjs
index 61a690b51e46d7b4739e8c883314f4e5dad66566..746b92bc2736835b227933d8ab7f4156d26d2b5d 100644
--- a/source/monster.mjs
+++ b/source/monster.mjs
@@ -36,6 +36,7 @@ export * from "./components/form/util/popper.mjs";
 export * from "./components/form/util/fetch.mjs";
 export * from "./components/form/util/floating-ui.mjs";
 export * from "./components/form/context-help.mjs";
+export * from "./components/form/api-bar.mjs";
 export * from "./components/form/tabs.mjs";
 export * from "./components/form/state-button.mjs";
 export * from "./components/form/popper.mjs";
diff --git a/source/types/version.mjs b/source/types/version.mjs
index afad898b0744e2b171250b986ee625d10aeb064e..401e1c8c364242f235fb95b299ab63882e4da48c 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.89.0");
+	monsterVersion = new Version("3.90.0");
 
 	return monsterVersion;
 }
diff --git a/test/cases/monster.mjs b/test/cases/monster.mjs
index 82754be8c345da2a40c15cf4b7fecb05d1eea3c0..c9adb6dca1f270299b5b6942b85fa3ab16e5feb1 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.89.0")
+        monsterVersion = new Version("3.90.0")
 
         let m = getMonsterVersion();
 
diff --git a/test/web/test.html b/test/web/test.html
index 2b663621058455a15799b7843edad816507fe6b6..587b21b78f6ad907c4d976af35796c35a650c454 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.89.0</h1>
-  <div id="lastupdate" style='font-size:0.7em'>last update Mi 11. Dez 10:04:44 CET 2024</div>
+  <h1 style='margin-bottom: 0.1em;'>Monster 3.90.0</h1>
+  <div id="lastupdate" style='font-size:0.7em'>last update Mo 16. Dez 00:30:57 CET 2024</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 9db4a99850dbee2bb0281088baad9a21acc0f812..c8da430f9a392df1353e9f55c72b2e2bcb8fc5e8 100644
--- a/test/web/tests.js
+++ b/test/web/tests.js
@@ -21232,19 +21232,12 @@ ${key.data.toString("base64")}
       init_constants2();
       ButtonStyleSheet = new CSSStyleSheet();
       try {
-        ButtonStyleSheet.insertRule(
-          `
+        ButtonStyleSheet.insertRule(`
 @layer button { 
-[data-monster-role=control]{box-sizing:border-box;outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:host{box-sizing:border-box;display:block}.monster-button-primary,button{align-items:center;background-color:var(--monster-bg-color-primary-1);background-position:50%;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-primary{background-color:var(--monster-bg-color-primary-4);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-button-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-secondary-4)}.monster-button-secondary,.monster-button-tertiary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-tertiary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-tertiary-4);border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-tertiary-4)}.monster-button-outline-primary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-primary-4);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-4)}.monster-button-outline-primary,.monster-button-outline-secondary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-outline-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-secondary-4)}.monster-button-outline-tertiary{align-items:center;background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-tertiary-4);background-position:50%;border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);color:var(--monster-bg-color-tertiary-4);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}button:active,button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}button:active{z-index:var(--monster-z-index-outline)}.monster-button-bar,.monster-button-group{align-content:center;align-items:stretch;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.monster-button-group{box-sizing:border-box;gap:0;margin:1rem 0}.monster-button-group>:not(:last-child){margin-right:calc(var(--monster-border-width)*-1)}.monster-button-group :hover{box-shadow:none}button:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px;z-index:var(--monster-z-index-outline)}@media (prefers-color-scheme:light){button:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px;z-index:var(--monster-z-index-outline)}}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-0{border-radius:0;border-style:none;border-width:0}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}@font-face{font-display:swap;font-family:Raleway;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Quicksand;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}body,html{font-family:var(--monster-font-family);font-size:1rem;font-weight:400;line-height:1.4}html{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-paragraph,p{font-size:1rem;font-weight:400;line-height:1.6;text-align:justify}.monster-h1,h1{font-size:3rem;font-weight:400;line-height:1.15;margin:4rem 0 1.5rem}.monster-h2,h2{font-size:2.5rem;font-weight:400;line-height:1.2;margin:4rem 0 1.5rem}.monster-h3,h3{font-size:2rem;font-weight:400;line-height:1.25;margin:4rem 0 1.25rem}.monster-h4,h4{font-size:1.5rem;font-weight:400;line-height:1.3;margin:4rem 0 1.25rem}.monster-h5,h5{font-size:1.4rem;font-weight:bolder;line-height:1.3;margin:4rem 0 1.25rem}.monster-h6,h6{font-size:1.3rem;font-weight:700;line-height:1.3;margin:4rem 0 1.25rem}p+h1{margin-top:3.75rem}p+h2{margin-top:3rem}p+h3{margin-top:2.25rem}p+h4{margin-top:1.5rem}p+h5{margin-top:.75rem}div+h1,div+h2,div+h3,div+h4,div+h5,div+h6,p+h6{margin-top:0}.deco{background:linear-gradient(to right,var(--monster-color-gradient-1) 0,var(--monster-color-gradient-2) 50%,var(--monster-color-gradient-3) 100%);-webkit-background-clip:text;background-clip:text;background-size:cover;color:var(--monster-color-secondary-1);text-fill-color:transparent;-webkit-text-fill-color:transparent}::-moz-selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}::selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}kbd{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;border-radius:10rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;padding:.25em .6em;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}details{margin-bottom:1rem}summary{cursor:pointer;font-feature-settings:"tnum";font-weight:700;letter-spacing:.1em;padding:.6rem 1rem}details[open]{padding:.6rem 1rem .75rem}details[open] summary{margin-bottom:.5rem;padding:0}.monster-no-user-select{-webkit-user-select:none;-moz-user-select:none;user-select:none}@keyframes details-show{0%{opacity:0;transform:translateY(-.5em)}}details[open]>:not(summary){animation:details-show .15s ease-in-out}details[open]>:last-child{margin-bottom:0}.monospace{font-family:var(--monster-font-family-monospace)}:host(monster-button){display:flex}[data-monster-role=control]{align-items:stretch;display:flex}button{width:100%} 
-}`,
-          0
-        );
+[data-monster-role=control]{box-sizing:border-box;outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:host{box-sizing:border-box;display:block}.monster-button-primary,button{align-items:center;background-color:var(--monster-bg-color-primary-1);background-position:50%;border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-primary{background-color:var(--monster-bg-color-primary-4);border-color:var(--monster-bg-color-primary-4);color:var(--monster-color-primary-4)}.monster-button-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-secondary-4)}.monster-button-secondary,.monster-button-tertiary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-tertiary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-bg-color-tertiary-4);border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-color-tertiary-4)}.monster-button-outline-primary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-primary-4);border-color:var(--monster-bg-color-primary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-primary-4)}.monster-button-outline-primary,.monster-button-outline-secondary{align-items:center;background-position:50%;box-shadow:var(--monster-box-shadow-1);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}.monster-button-outline-secondary{background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-secondary-4);border-color:var(--monster-bg-color-secondary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);color:var(--monster-color-primary-1);color:var(--monster-bg-color-secondary-4)}.monster-button-outline-tertiary{align-items:center;background-color:var(--monster-bg-color-primary-1);background-color:var(--monster-color-tertiary-4);background-position:50%;border-color:var(--monster-bg-color-tertiary-4);border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width);box-shadow:var(--monster-box-shadow-1);color:var(--monster-color-primary-1);color:var(--monster-bg-color-tertiary-4);cursor:pointer;display:flex;font-family:var(--monster-font-family);font-size:1rem;font-weight:400;gap:.4rem;justify-content:center;line-height:1.5;outline:none;overflow:hidden;padding:.375rem .75rem;position:relative;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:-webkit-fill-available;width:-moz-available;width:stretch}button:active,button:hover{box-shadow:var(--monster-box-shadow-2);transition:background .8s,color .25s .0833333333s}button:active{z-index:var(--monster-z-index-outline)}.monster-button-bar,.monster-button-group{align-content:center;align-items:stretch;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.monster-button-group{box-sizing:border-box;gap:0;margin:1rem 0}.monster-button-group>:not(:last-child){margin-right:calc(var(--monster-border-width)*-1)}.monster-button-group :hover{box-shadow:none}button:focus{outline:1px dashed var(--monster-color-selection-4);outline-offset:2px;z-index:var(--monster-z-index-outline)}@media (prefers-color-scheme:light){button:focus{outline:1px dashed var(--monster-color-selection-3);outline-offset:2px;z-index:var(--monster-z-index-outline)}}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-0{border-radius:0;border-style:none;border-width:0}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}@font-face{font-display:swap;font-family:Raleway;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Quicksand;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAADI0ABAAAAAAdXAAADHTAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGlwbnFYchzAGYD9TVEFUHACFABEICoGqIIGGVguEKAABNgIkA4hMBCAFhUIHIAwHG2pgRQdi2DgAaPAZFkWwcQAFm+8TRdkmnUj2/ylBmzGhdehbZSF0R7uo7hkZCZGT6hnpobZTWxy6cODh0Eg/9o0FR+HA8s3J1b3tw59XozgcCNwjZmttwCVxX4hLopEkTaRXt0ZIY2It4jf92XsCvMRLUwj2Qo0IkhcxKkYq5iQtcfnimrpZ0jqHtGngJbl/tDqziiqdqwAzoQ0TLx86MzpX5tI5T/zv96975r4AoosRBDJfBbmkWgsItoqNbG2XJ9CkeobHbf3zBBmoGA1I5agxGO1GTaoNEFTM67Iuon9FXvzf+iuiwQEK/W/ahmibz+VdEbVVR4YN+Pd/jczCTO7LnwWgIqFl5QAl21YB2p5KJFlL6Jf7ZeBzfu4cFJ3q+AOC8QV66zobWwYhWwD/V5smvEXozEmETWvtKG2TPG3hWcpQm9nQOvR8JFIVgZBd2mbFc+I1fYXvwNQkZivqyP0e9386y1ba9d3zBqGLqwAX3XpzbTH6+tbXzGgkA2uJfQyelfWeJSvgC0JFUF1axNdTU2HTpSj7lJl/nemq7+9vSMk/6JadGssqrgGeetnaNVPL4z+d7qx/sgxnF2T5egHSUWyX7ADDVMKxoxz0BchuXxi2AsCatTPyvgOONTObrOSccGuCQlzhEbKB/vrtz1irH8hsZna79nInhy0yRELCJyLgWf86/3AgTDAAALpjNEg3JNNQZLhsZLoypFw1pk4dcthh5KijyAknEMIBQp+uJ/ilkhipuCPHeg+G9lpFoQ/a+xOKc6HFAxB2zrp3ozAXaiBuxVM8VmCkWmV7tt83Uql6i6xwyaswCpV9+czU5OfjrMrH/B1bdsSZK7mSW/a/tCmvKoJEihYjViKPPrymKVDkP/9rMMMscy2w0FLLrLPRDntdcx0zKzM/E6iApCj6L/k/aKA3A28OyVxaC4OlT5aduPMPWfZB0vBkRtncYAGdhSuWblo251rT9eCOCKLgfbYGkqBJ6VQya4KTGIHUg5fhqRSYEjMHRxIHI+lJ3FTztN0pWh7DDDFPptopuN44J/AIkg1SeOpci9hP0RTQEiWOwzxN00ZHU+UpS1GF8BYPED3ABLF1nqLFfAtSIds4tZQrEJCz9TKtZ2TMUVhaxHOLW3iYSt0poEcYgoSx47VDqcyhkgkFPYHdvMSx9V9+t76NLZqDB2m9YYhmtmv4z0l71aDX/hczOwQuxq6k1lUC7nmntG/P3SzzKGQ/fwRUD/cOMQiDIpTgjxvvb/PbwE9slA6ijLITxbkGlp2mXhfU1O5A/yHeabRWIzIdWjWZ2W098S3NJmxIUxD0JS2IQqh7/DLOVFUY9I/071dqJFy4gN9SNyPsAqklJGXPafeM+xbF5qIYc/IABxmlm4BcB+oPORz19CM2ouh2oGtENN2AJFrCVzO4NoD3exWSEKG4sjMDtOVJSgYLV3oSaLYee6OrE59JWtI7Xq6FMNB6pBaDzmSG7x9P/ncoAQC0YO65AV/8VqR5pC7O0KJRSTiXMHeajzvq8fD6TEatdSeEdCyJyOP7HS0HNscjn4EUH7IVv5B9NcHt6Q+Qxr5NgJlEYpBbl7iWFTg2SvstNLpk1wd0EOB/HKOP51oAkKHbk0cxgaUSmEdzvvREXfXnUEqxqGgdx/1pUBn6ySUbiL8bkIlCpOC2HF/Y0x5qpxTL6LmlUPbFOJMjYQDeYJIcYAhtKVqfrFKIngmjOI5ex+WbSUArCGNwhIDiaKPQV12ezadA04CHG85LYmh2giMEohguFCE7Wt2RnpZOP0LAmzjJNJMl1FqQ2wfbUBJb8+gdfiSGSW1gC1tZ0z7QVQddoTSysjSebzolfyohStggBeeLCHODfMyo2BOS8a12hidr3YUhRDVXTAIxE6xwms0DEg1MRFHAGtGZJLE6CtBZl5J2A7ulTP20MjQXu+FGcRhjCoVXtowZitheAigblnOZIRgDCgYKejjBQoQ6hRh2LIarGWB7z+YitKAuqEMAl9QDIgHc9RsYiUzANgMsZGLLoUaxakkVrfDozK210ZbK04Zpi6CEBVosMOAAUVgQiwV2HMjBDuKUgJOIgyXhEMnsUClSaaSxw6TriOmMRV24WSG/Ar1ob8LN9MFafbFoqNrccCNy4kijqIwBJlNwBC8mWVglG+tMZ+v55OMV4EiF2KCIbVSslFoZNpmFw82XWswoC56KD+qUroIzKmnu4GAZeJZ/EABM4QWQRpFqhoVYCQfPdpOhHGaWux4euFiHnu400po1N7CXVMnfKjR2YdFiscWqFquBdNvAa9dy8tETP+713LwcDPxvDd0aw+9neyfgd/Y38CEL5sJiWAnr+33/wZKcQnwKjrXiMABpDuCoaUikGIShCAEFyEEV5JelFcHBp9Lne/e/a7bMEw8KpP6ZZVmVR8S5obAmVZJWOM5y0j8BABQYQTUmQyaZGET1x9HDCUkMG2M2HEOhuX5HjTuBpSpAKwiXOmsqBqDAXzQUIwZ+fOBHvgZhYhPG3/jVyIvJODdBIC0jK5sKnN76qUxsI5RjtApivwcmeAQK9FYKGsEStCQQog76G4ZemqTJTARW1D8yBVIQBVMIhaZu/VH7hSOBRFKRmjQkSbkgQHoirYzhKFXX7LIJoLC5aani0xgWLgRgTglkrOa1WMJwnQ9XzlcfmADshQ4H9Eoeny5SorHrWg9ts0pI7v/3sEewAazruC+GCPCfxrkT9CYA9C9bA5BxSKK3dx0AYI/eyiqmtBuAo0tcNubr80wl4+m4MPj9mKaWP/FJ1tltPdUzO4G/hL9WjpTNslVuIyfI6XJXuVieEwqt4dbmfj8ACCJzSfdn4pMo43KskXWysQVpjD9Swm0F9APAvwOANx2uvcb2C9uAC9+EC894zzqfGaP7KObhrnM7z20BAYBEQH8ngN7K93Z1euVzNPqn7TPHIvMcddV1i62z3n9OmWWT+ZaaaYkLzjlvgWuIhiRQsGa0motgYGRiZhElWqw4dg5OiZIkS5Fmjf+t9QAHokJ6b/3gbjL11kdfObQ3gBh66mu9sv63TudToFCRYmVWuWe1S/ab67DjjjjhvpsRcUuNLS7b7HbUuOui3/0RDlfc0BAev6m11T/+9q+FBAxHhSdSCxAuRKgwkVrQ0Qsia82qpbZaOaONBC7xFKliTNNeBreO2umgk6566a6HnoYYYKBBPEabYKxxJhnvrIny5ciVp8RUpWwmR02EjTbYaZcdCA2/EABoDQBsP9ByQL8FMP8A8J8DNwcAADZ2FbyEhOMULCWqophIiFFGP6/JSbbnnJgUxV1DzLQAhCJIuEbBo3gyaSUJRSNdELHSHtIM3HHGsSNxfewEncfr6cCgMWl7jaaJ00exQtQR9iiG4CUw8gSiJnnwSb2rsAipRElnxCYMs6cSyI+e2Rx6Eqb+CrGEHmOoNAOFpJSyNlAThHTNPoB9HQOrx4j5XkzOg4QOCWmcPjRxTC3U8YPouUU7X7zMvrkiWo7dJsZnQQAE7nn1/t5fZ2REQmo0weiuvJkLlg+wROks5xS8M8WLlToExKRJuN5Zluc9VxmGp3XohSFZg602h0PpfQjgHHLdU9dYGZGUjF8xGPafpCiNBq9V6i06T04YYp4oK14oc3elrCiVEYDc/j/yQSnPOtaJnzHBaahcA0CfACq8S75ZtAk0pTnKNAuuMQWQbFivtnPUxnMLQOu2fEmNb1Zq55IMc5QZtmp8VylR+FBYoylXpX7VBDAmdmItHV2FRwxq3f4zJox4t3KZfpsjy8u/VWbUg7Z1R9MgpbjJ4tm4WADMQk45wDSkURgtyEmw2MKRTWDFZdN/FGaRfZHba7OLYO/uT4iHB4qMcqtH7KVv0bqwOZF/teY+DQ4oHUQYhQ4OVQobTWN1S7DB8PXc+zux6OQ3xO1FdmEqA/vyiK3tuaHSRaW40OY08ZVAPTWMXwK4ZEOxBhC8fTwasGhxKSt7yQlBoT50orx+kNqomG+qIM14TyXVhSID10uEI2CcuFOq54CcQvNzx/pcf8GodNY/S3xmaV+zJZsw79ile9F/U8rhPVC4mQlcMDrboDYS6CNb4AKwxp+REFVS1TI6UMZw4wYWQNPQW5tNTnFPdNgw0FM+dqgHg826J8siVi3unQ4Tlsi9gb7G45mWLnd/Dz+/Rna8RLEe59mqpr7ShoqtVwSIvfmGdV2v8ypqjU7v5j6nrP111pgsiLxNje1WHB8bMjpWJ81dtS2panwTgwnN233Wqw4bDJSZGlBJTSDlHeMYZXZtO9fulWM/e0DN3ZzNFbzf/ds2uXILKgxdkwN9WETZu7ls5rkwwRKwyVuV2FM2ealfGVah3LU0r51tWfM5WFHCJ/WMYYUjhWy+cEo8eyWBMXEzWCVLkybYjj1vrVJdnORXexsrgUDLqbah2oiD857ESGLavtkTLJRfmNWE8eaG290Wm5IsXi5Th7WwlO8c3LSn3eui7WR5H8xDY12LCbCyExV+6x4f3tQwUDGr3htlOfAG6318xkrzmsjbqwYtEVSW8vR9KLehZ7oJ3oka5jWLVn9pWqcrmD2VvGOaJ8en+KiOdUbkPXJQfW5xZb7W2ReDtOJTa0NbNzwtRJPAZ9RtqSax0qGlLk92gv1DX5OUQ++3Y6u0UK3PPyDRc8eIlmkScEZp0wS2w6wcK3+KqnJ34yeNabvF5/RyDR0j78Hw85HmzGVOS0WIg9JAelgO49wNktI7hA0W9kwJuj9CEl2GaBL5qkJXJmgssS6agNVv7ooGiAgxal+3qwTXfTilrCmlVlo8Y0LM2D/ANhfuiSJrNXVsBx0WtPbkVkvNaHlkwgA1cOQtIyyEUg0OHHlzd91QW3rl3W0/s3dwnfYK0gCOWzwPtICHVnNX7eBgRnRcGQSrjiuc1wnwqWUl16vRZ9VhXSeMIS0kfJC728kPk/r2DEdTPI90GKAJmtuRg0pjHaE5S/lmy7HQCY3gBqkbbkpDit7KMPp9LkQQSZ/P5IqDwRCePRz7d360OgaFTjseN5/DO8ma4lCxl51WcpO8TnyduFlmfhfzVmt6ech8Lem8n+gQKKKhgw2EX+p/Desi9GARVgK9kTlOLTkQIarXMbJZtaED06b5bdI4aJ+ETX+AiQ5JdtucQ1XaDzvDFq1sLaJc3txKQ3tQLeyUqyKWVQ3F/q0dFj8YD8k6yddVFa5+Vs+DSG6uC/nN9cenuENqljJ/4cot/n7f+piYeYUpo+FZOlFGxRvV1Wy4VEPGKLJpX7AB3uCtLF2bmWaIBiNF6hB923G/T2mudtIE1fz66TUw3AbrQralwEFhO3ZLLZJGzWzwzwLjDs+z8oZk84gOwoHUAHAgLw8Xh2aFMr66js5SoxktJYBeTrRjX5znBkdmI9M+/1hrcYjYtdZrgbrVTR6c06o3muaCkNZcjrfPsXlipajNLwaufL5EVSKEAHgzo7EMxYJW0/oiJxuNtko0WmU/O44NdUWzIusNkdZfjdfSVo2x8ODHH6LzTHuz2pwOT/OcBEjJ1RUjR8b875NIEBBum3Btt6zEodb1hMdoMhrGGqXU42B0m73kyLuRoa58RxnGiKxmIHwtgNSuvkAquvR0KNJwv34Ye4Y9+pvW35E0tsFF1guujTLU35fpU8DwlAfPnG7H03zW8X0dJnmvJzyY45x8lhD6g2JATER5mx/rEt3mNzq3OkaUwJvIfGu+fq5XfBOHjafvQD6Iowhhb9nQaxT6JDfSb8VkxrmVVnqu5rXI5Rq7RHyMJRiNJnOHt8kmvbggzYjgnTn4dyexcSzO3vQyDoJ9lWIjuIsRKR8fbAAXmzvslvMubbovTamc7K2bRUf2H0yRjLtJqeTuyAje8YQcJJA1dcdtzuVCe0/ErhYNIwu0YOzEteb+SlMKOUQsE9uuZuvuQXWbXpXlCbuvJARXPyAmzFGhI+uOGMBH7DPO0oDUw1M78AN3hJ6EB+qo0YRhI58bBXCIULImyghWVsaysISQB56hqB2HIpXzOzO9ElFsdxuBOX0iPhSxNP9eVhySSIp2EzXkabR7ffQxkeiTD4L0FYCGGiNzMDdIjXhhdzXPzeQ6sHUwDygdUswx+umKiq49o5Qry4EJPchvX32mJ1EZPvLrJ6pcaVumC3pQqXzj2evX4opU7vNu2a+OV+erxvIj2Ubl6A3nRskxkWw9fNAejVwMIE5RHESo5xr1xNKs7ccN8Nw31Mf/9tRAKNDLHD7cL65mmepaohknPeLYncb+ZGAVs3Qmes5yBGv4xbJR7RuWjKIWwQ6lfCtFtHAe0WCoo1DC+SB6JsdnpEmPgB2gSQ6JUi8VFoIBhV3khChf02Yxj9Jveg/TKqTwg3eHPO5sVkWDYvGCSaBuqI7naA9oNB872NgouIQbkErHb88J2dNjS6JpDrTfV7rh8Wrxkr8cB3Zh12KnMmKqHo1pOenhtF46azE9La87ucRv3JR2yyQ7mINlfdnGjnUJet/F1uje+qO6Sw6vYSp6DRsiGgJ5BcxXVo3R5LV+YV1uuzhviXD+ab1ZGNDx2Px4nramacbtqHKocyv30ezB28GrkjXe0+xAkBwaTMzLdYmFO9O/g2GIeHASVNrTz4UxrI8TxKjjVJqrt1XrdI7DM+3De+CQ1fW5/V3TXHdfxorEwMPTbxrsRaYpnlKHMxxZHs+JcfMb7XGpPBWmLfuCQ/fSzev2PRauCz6All/B4ECEvtFo9BrGEdZpnIOI+Lggn5BbqOwSbji/1hqBa34n9fJ9AD3U8ibuamGGd3W1LuRlNohznLkuiPeD1j3CDDp5TVNGA+FhdXoaYEyMT0qTx2Rnwps8ItB9fHJ3ya5FegClfP0rRll9d7CZ333j/hg3G2MtavM1fBUNBrN1TeFWF0oc7iwCoQvKmeSphBReHtyw0yiw90n6xpgCYykmoNKGhmh0IVZY8KBkO0W1pqYIi9MiTVG94J2jh+cvOS0RseQK5gUD8EAqP2Car9IjVhtV3swPVNzTB3vwYCkiWBU7r73N42BAn6N1G9fl9NX/D5A+J3k9R6NUW/NybqTrVszw5zfOD8No1otYvX2SgYNX10Dc5YoPuJLUj66dTtcOl/PEbYZPhri3+O+/E9+N9jbeaQrOQ5gJ17x0CJ2mDoYYoNBlTNWNHuzxa/DufjrwvrG0og+YYbFCb0TBD/3o7itzN7dzXGodz7fJ36xsDOkyOSA44N8rHPv/+TMaDFpJn434N85M/mcq+CKoighywdjklVzS98Hg6QGBGV+kSaa1K0lyR5TkDcDN/YJTpR/zfbzSkk5evF7RudFYKJqmIhEiREir07FEBNaz4EKz780BN3qK9rOb+4Yo18z758nckgS6O+PgLHZk+vXer7Ibu8Bqtrbs1f33mx52HeyZJx3oiG80XzdbA5S/+EJ7LxEfs2dPz4YgasehwRRaLKLTkYgQJXkPRbAh1jqXmSrdzvgmfE+2TZ/fm4jty+dj+/fG80iR26n/651j+bOdEeV3eZL74QUisIbRr3SJF5TonWxjfiIGed3xacuXYI/XC9XthYAYkDUY3t1EgTNORkgE8Q4UDSgUQcOHEAugPJ6F9vUZQJ4nLdQr/+9V+Gga4vsQxCDNX7595yNXpM/fWxAnp9w+C6jNIn25U5osqQGrGHXpBO4Njbcu6y5fcvJodrHwnpWaFXWDVGFqXf3ZWuNz7F9evtryjG5haToHP7XvxbWza2iFgNlXpuKcHyK6tHL5JkixS+1juunuwlqD37/W0F3QTcdILUW0GNg3Fc2kp6NKi5lATmemoAkIT5rZxXz3fdmp+QNmG6RFxx3G6yeXiopZkVzfldYrTfTZzxY9go2+gYXmYIhS3ckt6EEPezY23ZHhjG0wPuHt1zsz7YsdGePuZYleMMIsKa0mbTFrulMGy3smJeRCspf8PuzQ4HIRqdaIXLhE867YgYBdntXkc36bU/P4w/kpZT8U9F0M0B0hoFnoNa0ucWwxFi50s7T15wN0wqTZfB7rLV8ymhbqbcOF/jadavUfN2shZ0GQ1pb4N42kdGn0cVTD91/WMycn5eqIRT/1+dFkb0vT1gOJuVvrCIf22UuKpp936SFW0qlsqFumJPWOTCzwU74XsKA+WBxnqDNVkAfAqI3jWqshyn9HMa99SvZBmGw/KcB1ejQyoPFY5su/OEPD70TyWoQ/ifVR3l8qTSAuvTUX4F4SeY0aNFzQAiVQFg3ZD7G/30EKN/pcEsABSjBXY9di74rlXpJc4dV48jaIBrAy4wzLwIDVZu+3Wgfsu0NpOcYww3vXHZQcrRC3NtQsLPGmEMX1A8sH30YZugBYujxCLw7e+5NDTddQ8ebGB+Yg5aX0KpqwIupSLr3yD5JnFxTvfanp6OG0+1+dmF36IgGsw9BBcP53nfHP7Nn3QZXpsxM+KpxDNn1+AqWB4kdjbiaYvvPqP7WQ4K/DjDUZ713/DbF7BGKSKJ08X+L1TRRyx+VW72oOvA13AQurXu049t3N9FKYE4W3c6E96a01yYdvi77+DBRXw9mRC/7LPGJlkA+7R7221cGQfcWoy6UKcrfxAvAfByD6cNacteqHCae+pClmLGtGBgmCSP7jBHR1td0X94u361bD+Yl2gYs99tkoA1uc864PfBTicapqevhqXBfe2bPli+P1HjMZFau4BGuVMGl26IaKDlJ4z69XR9GxxXHs50WbLbi8A18RTeErh51WZZT1hTTFgpx8Wj7SPiqT6sk2OKH85r4C64UsDKzqnBGXfUUoaF896nUJnkSv+mHvRIiKMBhUQOnzzGvH0q9+asmY9apqZqwWc8aGDOMEMlgeQqBSh0UaQD22I7sefTarkFgLNnOpA0eH+qwd6g/odX+VyWw0B1a1m/yLPc5VQZ9z1ZJO8LXb4Yorbd1/WLme7UEB7Br12FcFg/ZVo26XIsA9JtiBKdazloxFP0QQwOJpQUoEjgw93VsQ3pt0rCKNoh6nJyXVGcOwwfMadcXQ+URvH/535+00eY4Eg5/ZL+wfUy1pGJUknZOjnbjEmHEYhuwY0p+xm4xZM1K02w1DWcc8bsinMtmiZWNyuCBZ/tnhHYjz/gZOqLusgwBzQVdtPFQXeYDvHlRxcwtsR2I1jR9SKidvOb2pk7D0/kiKuOXx3pmDw5FAHRbmXVlZ+alSxe+4HSudixfa/PJYY6Eemo0ktJr68h52YcGKvsH9D7x9FV7L9S7wdKwKBuXmBW7fbMtZ0BIRzFlPcb1mY8ntpsX2YgAus0cM0qxRLPWt11KxvfcjqrgC9arE3m8J7feJRcQVJAes84r6u/mgbUnqdz/g0C2uJoV7kk9/KWCVLowW5ORS7lvZ2j/6qCOkew+f52I2ryqjx4+q25//1yT9tDo/my+SlZlz9lr8OddjuCHGldrDBnEGEwnJXBXmdJ7Xq+JKtBPmPRepewmW94ROGVEY9K48+r8iEhAznTxgVGdE9OK0EXnSCFdxvF8a4KTC1Ny8Zq277BNLiFcCHMD5HehYtchD+hZ78FWBoBAN+khLymyyAIGWcla7LW81lgicCQdtdia8MPAHdkHyHqG3pIuhuevM/bixgPysZe4Rwr4s4LcvH3W5BE8gV/6w1+RwejMzCR+Jv8/G9EW8Qz+QweIxZKCjA+nX4c6tn9YafUNfl8U+c1WMdwvXA8da6Z3RRuDsXagAVvT0Zx9Q6pk/qsCKSAz81zXtftFfEDNTw/nMbh6QWRZTY4Kn5/OFXffSAj/76bBAdiYoRFp7c2MrwXBTZt5pD1sm2GIVcEfwtp20adf2iZUXI3wDWlCAVZI5VLf66mMwGYAxzCvliGo+7viL19Yj4IKz07ZosMPW/Pqf0/rIzp+mP/O7JxxH0LzTZ8zGtGsO3EIT5x6VTrXW+L9lge9UMLP5ZbfCvOYlGnOieBpEnRSBxN+/eBNf0jbtwEE6BaozVxV4qWOLQ7+6ikfdG+BKwuxCyI+r2b+g2NMtkX7R7cfVDKWi/gCEkD1c1Ky8sLXhvgeOPvh4qJZ6E8Gr7NTbEFPc2vDsW2W8mljtFp6cCZWosryRHK3Q9DvR88m29NkVnXuriQIOiSsaDp+v21M4flUcLzYevBAC9r+MVqNvoDRCgVFjcygNXK7CxYFjb/lo07VvZQtl0mzn/Otv+dJ11dtrwHk1UA6tdCwes3k0nU2LSxsx7NMSPZetsmaMukJHoPXdCR9H6ozoxGmr2WYyJZLOZFAdgw2k9BCz3X693OLyGTsy3q+eeJJse92yaIg671/f8egn4PAMxQK2Xw0LvfdJ9B7c+QdSTPSvlCrZ4Lh/2hqm7tbaXDbzAlhudSEo7AeuWmqpzy1XKV1y1VBrpKRLqVS5lZqeN9q9BsTmNUoQMWRNIIGGI0XkysEScgVZo7HhYrA0aAlSowo8FVfuy+XFmorhOEEon8u5xsF5YIw5cionoMIFh21XR0sHiuumDtJfw+nn5hSVFWL+V9RU3FYyIFJvSGw2pNUyigX8KucDmjaOO3Bvn06XsQhbfOaUdPbnuSDWmjIkk52TYV1aNI3hlkhWrKEZPiwDGryPcPb7/Ixlz7apHkTh/YWvfmssF6S4khbvD3qJkQUWXBXnfiCUUkiJjQJl8LXtE8qdI6jFbdF2J7mu27yXl43z97C9g1SN2WwEo+DDkObPelpEHXkd0m3DNIkujVNKNF9TIezf1qxppdCImhf8Nwnarv4P/VOMM/3wQcw64DIJu3BnjxDwIDUjN3naMmojezm6PDDcFx+Ol8O5Quw18GQm4C8a5h/RSz6PcFW6gBTF2TGVxVQqOnGZIaKGYyadOBUwWhwpFM4Y1MpYAgHXq/BteO+aKbcGIUWgMKKyNSR6Nh9uugYs7CCqHCz0wqgp3YfYbHnElEZhgWfJP543fd+OS41IMqszGjM6JGmUvvg9tHyEgvCIZTK3WEHARCLmcidiR8TB3iQBqz1BqRqWJ/DARE8S1J/U4IxL0EWBgb6I+QLx5xePxrdV5SfrZ+F2GEjsUZXVNHgaDMdNWksQNZ/HAKcNGmU0nvEEBI+zOmE1ixxXPm4m1bBJHT+kVHkwo8pXEAkasZwTWC2AFfRVYw0/UY4tLq1YqLSjZyuaR6j5wJb4Am+yT3GWVXuc3YgNU83gbblc8JKsfUjQ0L5j3pUFcXIGcoAV0C7w+b5qRiJWxBErkn8ZuXeyWAoWfemlAxdpvLdw/rhqXbvasEXY8sC1hfyKcpB8b7lbyP1XAe4WscLzxUNbd3X21NY3PEFzwXuLtt5Rf5iKPSWQIjsIvr/VrYbw/OC7CL8vM/BTHHZ55YaJMpDOt7RtatpZOdw2n15Dh+tLjS8AfuXjPRzeub9QBzVvdrYJhQEUH2mkv0y498BGwnfvijtoFbU3Sdq2X/d0S3tLyzSL91Nz82OgBPgsau+ygT+tOAg51HCfXdGfynGqERTva8A2qPL7Pa2N3Ls/nZdAK99y6Ck2565DLW3UxLJRY+2t9/xuvrPZ0tpSWb6t0rfV0rSP09HWuq61dby1TQuiErxMpJfcprdDFTUPVbNFNztYaj1l+dW8n5pbXuQ0q1uaD4MnoFCi390nuhjf9yDYvxyyI3SaF10Xx0rlJiw63a3kU6p1K2dwkvyxWxyr1c8TOkFOXWKKqj3bivIEX2HGbbpAYuXDjqpD1sE+n1ZtncRJrmmgcniVDOuwvPWSCuywnn9aY7Uv01DN6xDTt1qlQ9e7hUtbhMKWpcJEBSFb9eUYXAJH5nq0kvshDm1FrWW38o7B29Blz859WyPPA1+bjwap+Pxkhtd1IKIw9fzlyk7V2k5MnmuVXsmttUNzrH3xttYH6JqjOKK2Q+emv175PqQ38T+9m6S7yfU8q8D+BxhTReHCvjTnWkAM91JY2Qkb5AGPQqWJqA76nlw+w/e9OYBipi4d2ktIeOROv1BFcW+agChA3eslEXUGbcIGARTc4nhT11BZ66XXzTFLFNyZIT5MLW+ryBmodW2VrEXDRMZqRD/2qyML72XgQpGELfNoz70gvo7BkBzxWp6ehAVacnpetXkN6xJGdgiJyhpJh7aCMIgDMcpRT8qiaLvL7GaNU+Zn4uilrga3YoM+iKsHHqj9Gu4ngrpFHoWrvlFQPsPcpxljqOLsvdmmjbremsHra9+uSsGD+oVupbsOb7FxZYU6sqxRbdx0nWOxkkkius4vnw/K0WCJR5uI75XXT314Bs+9DTnBxbyRmNG5ww5BgWPUJhnZsl2WW3N5+3UrdiU0LiqxIC9fJhufNl+WTJqu0LcSkkxX4zFAe5RWRLVcPj5TM1NFRtP5bbfkc/YbNNUIiLnpTBLTsrspgCMZx2nFakMvJucoijwaUMaKeL7QQuej6KO23JFlQItUujYzO/SYuE07fbvIRNG8Mncpo5d3l5lK0jIjmdu49Y9bX6o26YlZc7PfHf90vMdmHlwZQTyHDNX1Gl5k1j7cP4/5MNEp40QJzTM3GLiv0JrfBR4uAff0qBBMW0KU4Vmq2OMqcLMdTDevaPiCmbY4wYyVL1gZNnVRsj4HLpaAueanq4LcCplXpRKikymU6Yac4eu+EIo+1/N5+s9Fwi90QP2NrgCKGpTDLDKWLaRW6kbPamN3EZmKRIQQydUebES0+XGqdqhbgMSm4uH9hb7wAaqOIV2C4KPUvmIEL1APfA34K5lmixV36G80KLsbUo1CnurCyBRF7kcFS+9EsYX/zQff8B/bfdPkyzspMI4qjpnsXrrAo7/1qdfnS0TM3AaS2UTvR8eLVuLejuwLlHdbwnUWXZFVmoxhnaLLjjCbNfiZ2QJJLgiK28qOukylyxZyeuJP3C/pIbQ6TF2uhXgacKZWFbvgz3Gvwh5gaGdtICHZdAPwPaCzIujae1fMdOF92d4QwWHvOX2LKDJlj2i6NjfohqsghFuuG9hKraXN0ohV0EOkGaLLLzOMvuhXE8vU5dbocsZoDMlMITNy+TWi0JKIL5DU+0/pd0f0Q4m6CXWp8MHQI+V9nhncwSDKMcoQ/chzV79bKc+/vvg5/SFwO7907PD5u/dUyvev9D2jX0ZZdAeSRi/vf6q83WOzJxiYWhjKH9p6DmKUdtw35f4SxqtbH7ojScWHFrnW+D7lYm1Nk+HmayrwdPRCvfYm8MsljxofEc2MuDX32w/MM+iluvzrDZwTceltup9uht0Gl48d+QnHW05UsjzXa/nn2bNs83T9EHZou8nt48sFOPs17893CbXb2sNLWTGNjpU4AMOTrLhWy45PXquVRqxOVQTWSGNWhyr8yB548oJWYAPZXcDhzcKO93+8B+O5R8xKqN5cmoykFCo1rhYFYK2ohGezRtQVjG6p8jnAOlUpj+PqbcS/nlICNWQ4C7BEcP1Ob9/Ync6ta4I3LnJIVkb7NmHdWKj2wr9ZzKTi75sXK1NDe5xdY4opz8rE/QenH/csWXYqFdmbcQjX2AfitpBEGpG7fPIuvfCrKxVav9YQYmWkjg43qALTfJdtzKoUxnxE/3fROm/RjKi7uzAnOaggSFnXnpbrIHC2LNeWovFl2pZqrgn/5KLksjEiIMNi/IhEo/RFZZg/axYDKS/YJUzrU7tgh9uDm7jtpCFIWb892x2I2yqyMSrebr9Iq2PWsJ2MXrwrNSIh3QA5A2/ZUIK01fbwvmYEF8qGqpBiLGXqXS8euwZiLI7V9qaPLhj20UJP92qVF6V4vUQdYs38l9BVgSncYOG7ZVktitrffvtB2b7QJ+KGmnNevJUjWevhiBCvUiGNPdyGeAXLt0J4fpCc2GkF99XTUkG4V/tqpKXH9empBxVnv2uDXXpfE8msmmNWlOMY2F+wyVDMGSdCYePmYm6TodOyCznT5nDINFHQIiX4YnU6oV3q9UgwncylOGaSZo+XSaQmVjuzBk3GaKQXRxZxug1Jvs/0w2D4f1vxyUQeGBZ5vTID+4dc8sd4T+3QvlfAXB+aI7+Uzc7zFA+LOZxf5KC8Qm1vf8xIAdBoUzl1NKP+RHdF4fip5lcamnY3d1S1v1b/tWPIYi8RhL2k5Q5naUGg8Toa12iTmFmbUA0UTWh0CTOmS+pigHclpDhx8GaovSWjLXQr0VIEoh/z1KUTtn3XeOg79DC+5CSU6RrdPemTX/1sidv6D5gVaVZsJTPnUzslV6vFUvXVEunVHIlEc7VXZpNLbbKvMbBsb6/ks3+LoeXTV9IQsgMN9l0b2gJZnPNpOM7uvZ4uWbYd59RTOTw3JGXpnvqqhbX+G0DKVCtgEl1ULRPf3ergkN9PF64EEHWZRt3E2621fPSHaj+xSL2HhlzwdT2zqvh/wZdsCEjNo4ouILd7Ice1bRHwfpVWBZhjfZiZTAtFNVMLg6gWMhhqmWhK0R3EpoKtxyuWzS1q5mrpOwq8eVy3C/FReRMIHKeZKEI+eYiuoml2CPoMFjX6q8Blv0cE3VuoQk8K5yeMpdNHIIks3xhLCSXlfE8qv3x+jw9QYphS4zLHNf3ztrEmMJ04G012UsPX5+tqukXbV2hKbUkRTI6c+DxDflMhxosCIc/zgJhHFUtdjylvWCkpuL42dWDfpOluaqlZ1hNBtNsLfBGRqUJmISv9Z4FEekvgjWtsbGr8Qe52I7i9JfgRXgOQvV7bJNat+OttY/QwykuNwH4jC1b5ZUvZp7+uq2Fkurs4mgOhdrW/d9jgTQ67pgKDr8hm/k7o9o7s506y2CeeY3PuO8FmnbzvbtYPLa3/W/rZFJZ7GgIM367XwPYjgMpr/EMg4XoDm5Gul1gHs7/CISab3zugk04MaA0IVEUvrm3upWDR8DcKhltQMFyNgiETI/gne62kTd6c2dbk5WHDrx7ZJIsqcKYvSuJRlIaioBtFwTsoCv6UogTAdcgJLcgJzyInPIKc8KGUoi90wfSaRuwAoo+oqbqR2ucRpg4/cj3BTJj9KeZx4GfjmmAX5TmWYClTMNymzwQlxWmDR9V+/iOcJPZfmB6Hl+AGjY0o4tRt1vcHu4bFan2yz+AbRjNb8o1STjdGGqNOxX4SITVpyCPXI8yhiT3BAiYe3zIV+Khk5iRCPmjT+3Slep+uBvng5DGLQfEXA8EA9nbrnXoAsXwxe7+uItAIfo368Ug3QmBq+wjobfQx+gR9ij5Dn6MvwJfgPekrUvwaqSK+Vd7D7+D3zA8e2vh2IzD9tenxVD6JC4512xt8lj5HfT9Pfxp+os4HtAVdwYzKnKq+Qszxexo3rGwLcrd2VdQQN1mXx1PcwC1u4sPbzBNELv2LaLDdUtP2obQxK8azHoO4W3iD3T49fWeU2efR3f7/yLFYZmDQXvc9K9lagUUAMeLefxasAjCHfVgAZB6IdYs50Xu13bqLF9b24I9ZD2sDbi14/z8gy1ixltjgvOUB5LoAgBXYzalJgsaMrR1tXYdRRlGH9RQdsE+6xmRg8yIeo8oxRuMQBSoPuMOMYMLds4xGCJ+H2SMi5abus/wCVY5tNA0Xm0y9xGM0JtAOq1pgK0BdKAf7DKGv0Mfoy9F/ZGlalNvlwnlCchgtRL9lW6Ar4KN+oSdgIxXpIJyF27gO2O/NAlh1VXeNOyPd9/3SIKA/VCk39Y4EPYiuHeMBHJpWkm3QeJELPEYL0W9ggZKa9zGHzv8bI7DHe/4Ybhfe2E9ioO9JM323bubsSkQviMw+n3QNJUe8tOtrzy5v2Ea67A2xVZTs4u8y1jjnu53NC3kEbiE/ZjsiulOj20Q68U6YEimtxkuuC3vL8YZLo2sFEadQxuvG9lE0et6+lk+7MQHoN0PYlsaXb+vaN3tr1y42dVmkfSbV5xi3BbV1u11M9wD0lOzLXnYCR90t4wt+riuoKA19yuwD2pLAJwQ7Z3y+cIni8kg618nUSAT2O6VK/3WBIa1hT2ew7EoFSraMIj+TWE0+94raHAJwET9+Z7plXEjq3xDH3QDg5IGO+5L8L2+J/+iwzxPMxgEiBgAI/iyZoHAmMP0/eE5k9y6iNe1k6w7Wz4ucrqTpxyZ3BeUJv2Ryp3XFTPYdyL7JIwR4RkjzN7azXi2CIME0pTXodZc7ISjd+rL4FHxGEy3ARHUAx1V/LZvijl8wWV2m1fSCf+swc0W06Oqa5m6SKzytRnhQVagM6MchRgkJMXYE8YhB9umKooTpGRqNkK4fx4OW+u+4CrcGYrgTZ5vmG9TUjtfniqYZUWT6Ug0eE3hkiUG5nBpgjF14DXbo+DQRbfpV13zMplIJCuc+VLJxGgazxFwWI3ZLnj65X500xB03oZ0ML4aSP6GvQXKbuPMrUqvmaQh3UGZrRUZNiYo9tXTRU7xGldSypY45bArLULMztAb65imdIOaRDYpIUF5BsIo7KQ6/UzSwtI2SedS1k7QoIXPSc0GTF4uzWhxLxvwNxF7h9r12LLYXId9FD5srO/S32bKeWzZPJqX/AM3Qh1pufSt76jiQvYEl1mM0eM7TMkwAA3t9SDm76ZaXKLZ565vpO0ixvfQyCI2j5BOhV/k2PiV3sRt4KqFl/mDuDnUz6m7Vv78RPb3I1jPMXVCqVYif+ETFHnW3rchMb51e1uuVpzL0lgGTIAUMaRUFcKADsIEE0QIZmKfyDUlFZYco2a6/43QDCaXskcMGOK2s5KFzqPyi7sjfJ9S8NVojj8oX1MjuyfEEQICPcWimAWgjLBwkJq0OJjidHZz2iY3OZzsEkdnrENlynSNYYl5yhDKXYg8j1bqTCAhsnC7y5KtQKJtXlmIyhUu8NLLBBZiyuQOUyDbJdEUmyDWZrL9CeaaZYhIH7US0uJXmebTIijZBcrF80286Jyev7Ey1xEQOqsmTw7nKtdAUZezyTeDlky3XBGUZ43LKph7QHK7xqeAQevtocWRlEtJlA01RZMpRKTVFXerpxVxFxb68nF7jsq7GbdU20BueIVJOwsfFq4TPBIUSOLi4JMrQVz99dZMhaPC4WTsYygEnZqs4mrwYKdxeuPlYKTLJqDS/V4o4hCo+DvNQb/QI+vHorefgMTPMm4Y5u075P6JIXhH/e1/ynwEA) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}body,html{font-family:var(--monster-font-family);font-size:1rem;font-weight:400;line-height:1.4}html{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-paragraph,p{font-size:1rem;font-weight:400;line-height:1.6;text-align:justify}.monster-h1,h1{font-size:3rem;font-weight:400;line-height:1.15;margin:4rem 0 1.5rem}.monster-h2,h2{font-size:2.5rem;font-weight:400;line-height:1.2;margin:4rem 0 1.5rem}.monster-h3,h3{font-size:2rem;font-weight:400;line-height:1.25;margin:4rem 0 1.25rem}.monster-h4,h4{font-size:1.5rem;font-weight:400;line-height:1.3;margin:4rem 0 1.25rem}.monster-h5,h5{font-size:1.4rem;font-weight:bolder;line-height:1.3;margin:4rem 0 1.25rem}.monster-h6,h6{font-size:1.3rem;font-weight:700;line-height:1.3;margin:4rem 0 1.25rem}p+h1{margin-top:3.75rem}p+h2{margin-top:3rem}p+h3{margin-top:2.25rem}p+h4{margin-top:1.5rem}p+h5{margin-top:.75rem}div+h1,div+h2,div+h3,div+h4,div+h5,div+h6,p+h6{margin-top:0}.deco{background:linear-gradient(to right,var(--monster-color-gradient-1) 0,var(--monster-color-gradient-2) 50%,var(--monster-color-gradient-3) 100%);-webkit-background-clip:text;background-clip:text;background-size:cover;color:var(--monster-color-secondary-1);text-fill-color:transparent;-webkit-text-fill-color:transparent}::-moz-selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}::selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}kbd{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;border-radius:10rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;padding:.25em .6em;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}details{margin-bottom:1rem}summary{cursor:pointer;font-feature-settings:"tnum";font-weight:700;letter-spacing:.1em;padding:.6rem 1rem}details[open]{padding:.6rem 1rem .75rem}details[open] summary{margin-bottom:.5rem;padding:0}.monster-no-user-select{-webkit-user-select:none;-moz-user-select:none;user-select:none}@keyframes details-show{0%{opacity:0;transform:translateY(-.5em)}}details[open]>:not(summary){animation:details-show .15s ease-in-out}details[open]>:last-child{margin-bottom:0}.monospace{font-family:var(--monster-font-family-monospace)}:host(monster-button){display:flex}[data-monster-role=control]{align-items:stretch;display:flex}button{min-width:-moz-max-content;min-width:max-content;width:100%} 
+}`, 0);
       } catch (e) {
-        addAttributeToken(
-          document.getRootNode().querySelector("html"),
-          ATTRIBUTE_ERRORMESSAGE,
-          e + ""
-        );
+        addAttributeToken(document.getRootNode().querySelector("html"), ATTRIBUTE_ERRORMESSAGE, e + "");
       }
     }
   });
@@ -21494,7 +21487,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
             disabled: false,
             actions: {
               click: () => {
-                throw new Error("the click action is not defined");
               }
             },
             effects: {
@@ -21531,19 +21523,12 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
       init_constants2();
       StateButtonStyleSheet = new CSSStyleSheet();
       try {
-        StateButtonStyleSheet.insertRule(
-          `
+        StateButtonStyleSheet.insertRule(`
 @layer statebutton { 
-[data-monster-role=control]{box-sizing:border-box;outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:host{box-sizing:border-box;display:block}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-0{border-radius:0;border-style:none;border-width:0}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}:after,:before,:root{--monster-color-gray-1:#f6f6f6;--monster-color-gray-2:#e2e2e2;--monster-color-gray-3:#8b8b8b;--monster-color-gray-4:#6f6f6f;--monster-color-gray-5:#3e3e3e;--monster-color-gray-6:#222;--monster-color-rose-1:#fff7f9;--monster-color-rose-2:#ffdce5;--monster-color-rose-3:#ff3b8d;--monster-color-rose-4:#db0072;--monster-color-rose-5:#800040;--monster-color-rose-6:#4c0023;--monster-color-raspberry-1:#fff8f8;--monster-color-raspberry-2:#ffdddf;--monster-color-raspberry-3:#ff426c;--monster-color-raspberry-4:#de0051;--monster-color-raspberry-5:#82002c;--monster-color-raspberry-6:#510018;--monster-color-red-1:#fff8f6;--monster-color-red-2:#ffddd8;--monster-color-red-3:#ff4647;--monster-color-red-4:#e0002b;--monster-color-red-5:#830014;--monster-color-red-6:#530003;--monster-color-orange-1:#fff8f5;--monster-color-orange-2:#ffded1;--monster-color-orange-3:#fd4d00;--monster-color-orange-4:#cd3c00;--monster-color-orange-5:#752100;--monster-color-orange-6:#401600;--monster-color-cinnamon-1:#fff8f3;--monster-color-cinnamon-2:#ffdfc6;--monster-color-cinnamon-3:#d57300;--monster-color-cinnamon-4:#ac5c00;--monster-color-cinnamon-5:#633300;--monster-color-cinnamon-6:#371d00;--monster-color-amber-1:#fff8ef;--monster-color-amber-2:#ffe0b2;--monster-color-amber-3:#b98300;--monster-color-amber-4:#926700;--monster-color-amber-5:#523800;--monster-color-amber-6:#302100;--monster-color-yellow-1:#fff9e5;--monster-color-yellow-2:#ffe53e;--monster-color-yellow-3:#9c8b00;--monster-color-yellow-4:#7d6f00;--monster-color-yellow-5:#463d00;--monster-color-yellow-6:#292300;--monster-color-lime-1:#f7ffac;--monster-color-lime-2:#d5f200;--monster-color-lime-3:#819300;--monster-color-lime-4:#677600;--monster-color-lime-5:#394100;--monster-color-lime-6:#222600;--monster-color-chartreuse-1:#e5ffc3;--monster-color-chartreuse-2:#98fb00;--monster-color-chartreuse-3:#5c9b00;--monster-color-chartreuse-4:#497c00;--monster-color-chartreuse-5:#264500;--monster-color-chartreuse-6:#182600;--monster-color-green-1:#e0ffd9;--monster-color-green-2:#72ff6c;--monster-color-green-3:#00a21f;--monster-color-green-4:#008217;--monster-color-green-5:#004908;--monster-color-green-6:#062800;--monster-color-emerald-1:#dcffe6;--monster-color-emerald-2:#5dffa2;--monster-color-emerald-3:#00a05a;--monster-color-emerald-4:#008147;--monster-color-emerald-5:#004825;--monster-color-emerald-6:#002812;--monster-color-aquamarine-1:#daffef;--monster-color-aquamarine-2:#42ffc6;--monster-color-aquamarine-3:#009f78;--monster-color-aquamarine-4:#007f5f;--monster-color-aquamarine-5:#004734;--monster-color-aquamarine-6:#00281b;--monster-color-teal-1:#d7fff7;--monster-color-teal-2:#00ffe4;--monster-color-teal-3:#009e8c;--monster-color-teal-4:#007c6e;--monster-color-teal-5:#00443c;--monster-color-teal-6:#002722;--monster-color-cyan-1:#c4fffe;--monster-color-cyan-2:#00fafb;--monster-color-cyan-3:#00999a;--monster-color-cyan-4:#007a7b;--monster-color-cyan-5:#004344;--monster-color-cyan-6:#002525;--monster-color-powder-1:#dafaff;--monster-color-powder-2:#8df0ff;--monster-color-powder-3:#0098a9;--monster-color-powder-4:#007987;--monster-color-powder-5:#004048;--monster-color-powder-6:#002227;--monster-color-sky-1:#e3f7ff;--monster-color-sky-2:#aee9ff;--monster-color-sky-3:#0094b4;--monster-color-sky-4:#007590;--monster-color-sky-5:#00404f;--monster-color-sky-6:#001f28;--monster-color-cerulean-1:#e8f6ff;--monster-color-cerulean-2:#b9e3ff;--monster-color-cerulean-3:#0092c5;--monster-color-cerulean-4:#00749d;--monster-color-cerulean-5:#003c54;--monster-color-cerulean-6:#001d2a;--monster-color-azure-1:#e8f2ff;--monster-color-azure-2:#c6e0ff;--monster-color-azure-3:#008fdb;--monster-color-azure-4:#0071af;--monster-color-azure-5:#003b5e;--monster-color-azure-6:#001c30;--monster-color-blue-1:#f0f4ff;--monster-color-blue-2:#d4e0ff;--monster-color-blue-3:#0089fc;--monster-color-blue-4:#006dca;--monster-color-blue-5:#00386d;--monster-color-blue-6:#001a39;--monster-color-indigo-1:#f3f3ff;--monster-color-indigo-2:#deddff;--monster-color-indigo-3:#657eff;--monster-color-indigo-4:#0061fc;--monster-color-indigo-5:#00328a;--monster-color-indigo-6:#001649;--monster-color-violet-1:#f7f1ff;--monster-color-violet-2:#e8daff;--monster-color-violet-3:#9b70ff;--monster-color-violet-4:#794aff;--monster-color-violet-5:#2d0fbf;--monster-color-violet-6:#0b0074;--monster-color-purple-1:#fdf4ff;--monster-color-purple-2:#f7d9ff;--monster-color-purple-3:#d150ff;--monster-color-purple-4:#b01fe3;--monster-color-purple-5:#660087;--monster-color-purple-6:#3a004f;--monster-color-magenta-1:#fff3fc;--monster-color-magenta-2:#ffd7f6;--monster-color-magenta-3:#f911e0;--monster-color-magenta-4:#ca00b6;--monster-color-magenta-5:#740068;--monster-color-magenta-6:#44003c;--monster-color-pink-1:#fff7fb;--monster-color-pink-2:#ffdcec;--monster-color-pink-3:#ff2fb2;--monster-color-pink-4:#d2008f;--monster-color-pink-5:#790051;--monster-color-pink-6:#4b0030;--monster-gradient-tangerine-1:#e5b875;--monster-gradient-tangerine-2:#d9a362;--monster-gradient-tangerine-3:#c08a4e;--monster-gradient-tangerine-4:#a7713b;--monster-gradient-tangerine-5:#8f5a28;--monster-gradient-tangerine-6:#360505;--monster-color-seashell-1:#f7f5ef;--monster-color-seashell-2:#e5e2d9;--monster-color-seashell-3:#cbc6b3;--monster-color-seashell-4:#a19d8a;--monster-color-seashell-5:#7a7566;--monster-color-seashell-6:#514d3f}@font-face{font-display:swap;font-family:Raleway;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Quicksand;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}body,html{font-family:var(--monster-font-family);font-size:1rem;font-weight:400;line-height:1.4}html{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-paragraph,p{font-size:1rem;font-weight:400;line-height:1.6;text-align:justify}.monster-h1,h1{font-size:3rem;font-weight:400;line-height:1.15;margin:4rem 0 1.5rem}.monster-h2,h2{font-size:2.5rem;font-weight:400;line-height:1.2;margin:4rem 0 1.5rem}.monster-h3,h3{font-size:2rem;font-weight:400;line-height:1.25;margin:4rem 0 1.25rem}.monster-h4,h4{font-size:1.5rem;font-weight:400;line-height:1.3;margin:4rem 0 1.25rem}.monster-h5,h5{font-size:1.4rem;font-weight:bolder;line-height:1.3;margin:4rem 0 1.25rem}.monster-h6,h6{font-size:1.3rem;font-weight:700;line-height:1.3;margin:4rem 0 1.25rem}p+h1{margin-top:3.75rem}p+h2{margin-top:3rem}p+h3{margin-top:2.25rem}p+h4{margin-top:1.5rem}p+h5{margin-top:.75rem}div+h1,div+h2,div+h3,div+h4,div+h5,div+h6,p+h6{margin-top:0}.deco{background:linear-gradient(to right,var(--monster-color-gradient-1) 0,var(--monster-color-gradient-2) 50%,var(--monster-color-gradient-3) 100%);-webkit-background-clip:text;background-clip:text;background-size:cover;color:var(--monster-color-secondary-1);text-fill-color:transparent;-webkit-text-fill-color:transparent}::-moz-selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}::selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}kbd{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;border-radius:10rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;padding:.25em .6em;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}details{margin-bottom:1rem}summary{cursor:pointer;font-feature-settings:"tnum";font-weight:700;letter-spacing:.1em;padding:.6rem 1rem}details[open]{padding:.6rem 1rem .75rem}details[open] summary{margin-bottom:.5rem;padding:0}.monster-no-user-select{-webkit-user-select:none;-moz-user-select:none;user-select:none}@keyframes details-show{0%{opacity:0;transform:translateY(-.5em)}}details[open]>:not(summary){animation:details-show .15s ease-in-out}details[open]>:last-child{margin-bottom:0}.monospace{font-family:var(--monster-font-family-monospace)}div[data-monster-role=control]{height:100%}button{width:100%}[data-monster-role=button]{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between;transition:width 10s ease-in-out}div[data-monster-role=label]{align-items:center;display:flex;gap:.4rem;justify-content:center;width:100%}[data-monster-role=state]{align-content:center;align-items:center;align-self:stretch;display:flex;transition:width 12s ease-in-out}[data-monster-role=state]>img,[data-monster-role=state]>svg{margin-left:.3em}[data-monster-role=state]>svg.successful{animation:bouncy .5s linear forwards;color:var(--monster-color-successful)}[data-monster-role=state]>svg.activity{animation:bouncy .5s linear forwards;color:var(--monster-color-activity)}[data-monster-role=state]>svg.failed{animation:bouncy .5s linear forwards;color:var(--monster-color-failed)}[data-monster-role=state]>svg.activity{animation-duration:1s;animation-iteration-count:infinite;animation-name:activity;animation-timing-function:cubic-bezier(0,0,.2,1)}[data-monster-role=state].stateless{display:none}@keyframes activity{0%{transform:scale(1)}50%{transform:scale(.1)}to{transform:scale(1)}}@keyframes bouncy{0%{opacity:0;transform:scale(.1)}80%{opacity:1;transform:scale(1.15)}90%{transform:scale(.9)}to{transform:scale(1)}} 
-}`,
-          0
-        );
+[data-monster-role=control]{box-sizing:border-box;outline:none;width:100%}[data-monster-role=control].flex{align-items:center;display:flex;flex-direction:row}:host{box-sizing:border-box;display:block}.monster-border-primary-1,.monster-border-primary-2,.monster-border-primary-3,.monster-border-primary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-0{border-radius:0;border-style:none;border-width:0}.monster-border-primary-1{border-color:var(--monster-bg-color-primary-1)}.monster-border-primary-2{border-color:var(--monster-bg-color-primary-2)}.monster-border-primary-3{border-color:var(--monster-bg-color-primary-3)}.monster-border-primary-4{border-color:var(--monster-bg-color-primary-4)}.monster-border-secondary-1,.monster-border-secondary-2,.monster-border-secondary-3,.monster-border-secondary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-secondary-1{border-color:var(--monster-bg-color-secondary-1)}.monster-border-secondary-2{border-color:var(--monster-bg-color-secondary-2)}.monster-border-secondary-3{border-color:var(--monster-bg-color-secondary-3)}.monster-border-secondary-4{border-color:var(--monster-bg-color-secondary-4)}.monster-border-tertiary-1,.monster-border-tertiary-2,.monster-border-tertiary-3,.monster-border-tertiary-4{border-radius:var(--monster-border-radius);border-style:var(--monster-border-style);border-width:var(--monster-border-width)}.monster-border-tertiary-1{border-color:var(--monster-bg-color-tertiary-1)}.monster-border-tertiary-2{border-color:var(--monster-bg-color-tertiary-2)}.monster-border-tertiary-3{border-color:var(--monster-bg-color-tertiary-3)}.monster-border-tertiary-4{border-color:var(--monster-bg-color-tertiary-4)}:after,:before,:root{--monster-color-gray-1:#f6f6f6;--monster-color-gray-2:#e2e2e2;--monster-color-gray-3:#8b8b8b;--monster-color-gray-4:#6f6f6f;--monster-color-gray-5:#3e3e3e;--monster-color-gray-6:#222;--monster-color-rose-1:#fff7f9;--monster-color-rose-2:#ffdce5;--monster-color-rose-3:#ff3b8d;--monster-color-rose-4:#db0072;--monster-color-rose-5:#800040;--monster-color-rose-6:#4c0023;--monster-color-raspberry-1:#fff8f8;--monster-color-raspberry-2:#ffdddf;--monster-color-raspberry-3:#ff426c;--monster-color-raspberry-4:#de0051;--monster-color-raspberry-5:#82002c;--monster-color-raspberry-6:#510018;--monster-color-red-1:#fff8f6;--monster-color-red-2:#ffddd8;--monster-color-red-3:#ff4647;--monster-color-red-4:#e0002b;--monster-color-red-5:#830014;--monster-color-red-6:#530003;--monster-color-orange-1:#fff8f5;--monster-color-orange-2:#ffded1;--monster-color-orange-3:#fd4d00;--monster-color-orange-4:#cd3c00;--monster-color-orange-5:#752100;--monster-color-orange-6:#401600;--monster-color-cinnamon-1:#fff8f3;--monster-color-cinnamon-2:#ffdfc6;--monster-color-cinnamon-3:#d57300;--monster-color-cinnamon-4:#ac5c00;--monster-color-cinnamon-5:#633300;--monster-color-cinnamon-6:#371d00;--monster-color-amber-1:#fff8ef;--monster-color-amber-2:#ffe0b2;--monster-color-amber-3:#b98300;--monster-color-amber-4:#926700;--monster-color-amber-5:#523800;--monster-color-amber-6:#302100;--monster-color-yellow-1:#fff9e5;--monster-color-yellow-2:#ffe53e;--monster-color-yellow-3:#9c8b00;--monster-color-yellow-4:#7d6f00;--monster-color-yellow-5:#463d00;--monster-color-yellow-6:#292300;--monster-color-lime-1:#f7ffac;--monster-color-lime-2:#d5f200;--monster-color-lime-3:#819300;--monster-color-lime-4:#677600;--monster-color-lime-5:#394100;--monster-color-lime-6:#222600;--monster-color-chartreuse-1:#e5ffc3;--monster-color-chartreuse-2:#98fb00;--monster-color-chartreuse-3:#5c9b00;--monster-color-chartreuse-4:#497c00;--monster-color-chartreuse-5:#264500;--monster-color-chartreuse-6:#182600;--monster-color-green-1:#e0ffd9;--monster-color-green-2:#72ff6c;--monster-color-green-3:#00a21f;--monster-color-green-4:#008217;--monster-color-green-5:#004908;--monster-color-green-6:#062800;--monster-color-emerald-1:#dcffe6;--monster-color-emerald-2:#5dffa2;--monster-color-emerald-3:#00a05a;--monster-color-emerald-4:#008147;--monster-color-emerald-5:#004825;--monster-color-emerald-6:#002812;--monster-color-aquamarine-1:#daffef;--monster-color-aquamarine-2:#42ffc6;--monster-color-aquamarine-3:#009f78;--monster-color-aquamarine-4:#007f5f;--monster-color-aquamarine-5:#004734;--monster-color-aquamarine-6:#00281b;--monster-color-teal-1:#d7fff7;--monster-color-teal-2:#00ffe4;--monster-color-teal-3:#009e8c;--monster-color-teal-4:#007c6e;--monster-color-teal-5:#00443c;--monster-color-teal-6:#002722;--monster-color-cyan-1:#c4fffe;--monster-color-cyan-2:#00fafb;--monster-color-cyan-3:#00999a;--monster-color-cyan-4:#007a7b;--monster-color-cyan-5:#004344;--monster-color-cyan-6:#002525;--monster-color-powder-1:#dafaff;--monster-color-powder-2:#8df0ff;--monster-color-powder-3:#0098a9;--monster-color-powder-4:#007987;--monster-color-powder-5:#004048;--monster-color-powder-6:#002227;--monster-color-sky-1:#e3f7ff;--monster-color-sky-2:#aee9ff;--monster-color-sky-3:#0094b4;--monster-color-sky-4:#007590;--monster-color-sky-5:#00404f;--monster-color-sky-6:#001f28;--monster-color-cerulean-1:#e8f6ff;--monster-color-cerulean-2:#b9e3ff;--monster-color-cerulean-3:#0092c5;--monster-color-cerulean-4:#00749d;--monster-color-cerulean-5:#003c54;--monster-color-cerulean-6:#001d2a;--monster-color-azure-1:#e8f2ff;--monster-color-azure-2:#c6e0ff;--monster-color-azure-3:#008fdb;--monster-color-azure-4:#0071af;--monster-color-azure-5:#003b5e;--monster-color-azure-6:#001c30;--monster-color-blue-1:#f0f4ff;--monster-color-blue-2:#d4e0ff;--monster-color-blue-3:#0089fc;--monster-color-blue-4:#006dca;--monster-color-blue-5:#00386d;--monster-color-blue-6:#001a39;--monster-color-indigo-1:#f3f3ff;--monster-color-indigo-2:#deddff;--monster-color-indigo-3:#657eff;--monster-color-indigo-4:#0061fc;--monster-color-indigo-5:#00328a;--monster-color-indigo-6:#001649;--monster-color-violet-1:#f7f1ff;--monster-color-violet-2:#e8daff;--monster-color-violet-3:#9b70ff;--monster-color-violet-4:#794aff;--monster-color-violet-5:#2d0fbf;--monster-color-violet-6:#0b0074;--monster-color-purple-1:#fdf4ff;--monster-color-purple-2:#f7d9ff;--monster-color-purple-3:#d150ff;--monster-color-purple-4:#b01fe3;--monster-color-purple-5:#660087;--monster-color-purple-6:#3a004f;--monster-color-magenta-1:#fff3fc;--monster-color-magenta-2:#ffd7f6;--monster-color-magenta-3:#f911e0;--monster-color-magenta-4:#ca00b6;--monster-color-magenta-5:#740068;--monster-color-magenta-6:#44003c;--monster-color-pink-1:#fff7fb;--monster-color-pink-2:#ffdcec;--monster-color-pink-3:#ff2fb2;--monster-color-pink-4:#d2008f;--monster-color-pink-5:#790051;--monster-color-pink-6:#4b0030;--monster-gradient-tangerine-1:#e5b875;--monster-gradient-tangerine-2:#d9a362;--monster-gradient-tangerine-3:#c08a4e;--monster-gradient-tangerine-4:#a7713b;--monster-gradient-tangerine-5:#8f5a28;--monster-gradient-tangerine-6:#360505;--monster-color-seashell-1:#f7f5ef;--monster-color-seashell-2:#e5e2d9;--monster-color-seashell-3:#cbc6b3;--monster-color-seashell-4:#a19d8a;--monster-color-seashell-5:#7a7566;--monster-color-seashell-6:#514d3f}@font-face{font-display:swap;font-family:Raleway;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAFJ4ABIAAAAAt3AAAFIQAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGoE8G+46HIU8BmA/U1RBVEQAhQgIgQoJnxQRCAqBugyBmnALhCIAATYCJAOIQAQgBYUUByAMgxwbfaQXaJefmNz0Zol3v60cPeZMpG4HJSjk5qIINg6CGMglZf//n3F0jOGGDRA1rXeIncJIUkNHGn69qMRDU8Zajjs9UbsmtnqnE3v3vqiQmfRQpLkKW6QZwal6s5IUiJNUSUG/OwoDY6B675OjSjkDSSMu2pedpu9vJILUlJd707D+eLHpjYDI4e1uDnLjHHvxpDXGMyduLLn1qt0FCQOyFsJZE1+kJq3T+Ie7BJFINOANbi9vTUzhI7W4GmUL0lWjT/FQQi/m++xuPP02omRHe5pn4DgfNZfn+R9z979tmEeNaq1RxRqHTjTPNA2JFEgrHdo/nt/W/5zbgGCxia6EkViA2FhYGItRmE1ZvVUvqtStb7Mvrd3W7+t2+0XdoTnzzjYbp7mSHLACkhMWgCTL6s0Wv0AUohJfEqE3opPd58ikJnKlo+3uaeSHYJ6fcIcXjd+rKUEsaElTqlUlVRm/N+e/8iP0L5AKozNlJ3/9iBwshM6v5JIUJykgT3fdrOmq6Lcs+Z+q/XsAXFxEEiQIUaKosFn7ctT+7BBS5dqDolJXunbl7rttzD/v384LftJagFFALYPE5A7gnMrZBht4lXqsbZKmbdq0TtOmpmgNiugM2PYBc73Mrjq7GLsoXHcTpt9uPvFDz8eN3g+sxrPQAw6DTFNp/OZI9iinNitZhRmpQOCkdoBdANjVWlavMitwDNJX/pYIAkVwnOP/vW5xzoMw7SAFAKU+Zz/knP/Z9j+OdfrL8Ke2vdKbmphuxJSuL8EUAggHIiBHP+444EDzv1PTQ3YkOcOSlTHmj6Usdfo2L+/jpYe7IHWcQUgcgkpLFR1YTW8CGKQX9b8GFAAAH9to4RHQ6GLvFRri4DiwTzAADDMKDPr/fZ3V/qdgPmkGzKTEmWEXb7Q3ttgTYqo2nP6/+97Xf+F/9JHAVsIIcACBZwRykGT7gCR8VohJcUOOSDjiSbAphMozm2JRptBtUW69XbNFG3IVy2KLok48/Lfsm527IaqBLMuBbOFIweFUd01veL+Y8xWhtzcqTm2CITc5eLJwSI4fYlLYFIVHAs//T53N4/Yx1hKGU+HSqErdpPPns6fqqWJsNbZaClQtjlOLUMshcdoA5TQss4JLc90SxCOMMUK4KP9NshpzpX4vwxKChCASRERE/LKsWRlJwNKAcTnXAhEy3r1KHcZa/YdX58420/iaXmtGhoCAiIiAR23v/P9+KTACAN5hdkC3xUC4ELsggvkR2krEjYSEv0BKSmHChIvYOCAJkKQgyYMM2QoUMzCo16BJ85qAWCCdHek3AB0ODL1Lq0PgTe3hSw2fhi4XhPueuQWEH6xtIEQAbG2Nm5oV54QFP+yKgO2D4T5t/wz2XW92/rpqpLTSIP8qV9vLvOds0NLWyX51K6ofbvPZE1paf7w318C9Zthq7f32bfuL64VZHw514Ysm5lgfNbfG7W9lsUA4EGz723vxwGzp4fRR+mP8Ls5B7KB2eDJXc6xwlG6902ug7AzLA8NY21B2dB/P5qfOV8t1onyL5jZDDfQI5Rg8D98FvHsvclHuJsrdvsJrpc/Tr/gu/EfZJzXUzpWaDj7M7+UP8/8EkAAVaAS/CR+Xs/JN4YaIcO1xHZcUaMMbklrpKy7NfQJKQcURagoGmCW+HA6ENvbg33sl2pIYRmE9bIHb0mA6kk6lN5GdyMN5EbmQhxHKlwMgT58cgw7pdURz7nfMcQfcU3vIczVkdrhX8XHq4012tFOd7kT/a7p7m83WA71F7aO9M+djvdd6j7fxm+D1Pu3z3uirvmuyza53trv93lTb82RT2KaFVUKMNP36BvQMCo0GsEdkL8s+zLg1ExbM0NgCWAxgzf82DG1KXMfc4rjNcQfHKxSCuRuBI5AodDDDkGdV8CnVVEmEMain4Sa0AXTI0RBNpOYALVq1aV9vxJiUzHKWCis6mp0Bukx069Gr74snVNbsoCmkVMop5+pDGaWz2sLDr2iNt+oZO0b36YSIjWcxvnlN0x0VhlYoW4URjXXKyLG3Y3qoLdEazHAEEoVuMl3DDeERVpG/jeTER0CUZEU1motqFoiwJFKUaDFiacSlBJrEjSQKJ/CSFSmSKk161QlkdKeySXYzsdXKi6I9ikNJMtCUKlOuQqUq1VHT1zq6+lzfQNAIa5JpRovWaEP7ZxuNmTjMLBYuq3XUTgNdRDd6Uq9A33cbxAzxDDON0IxaNVaxd//s/ajxAE6JnPbFGZkuC3uaNU8EsDSLZVmxOj1Pd8HQxXSpedkXawbW6wZo8+6DriuQFFw5IpvnJh6/ZgFJK930aEM2XJ3yJB0DHophbqg0urkvMIgYltbGRPcdkd7Vj/NV4pbAba+/E4BjCg9p5Zeri/pdM0CG/7tXZNxVE+6bYavQn6umWwy3FXf6gg+XnAtHDgjkPNiUbqpowvDUvbRlcj5XZHYzV8Ji4Nl1vjsOhrMaxOHxeDwejz/VIHJXn6H0whg6qFOEUqQo0WLE0ohLCTKJ0yQ5LU9yRQpSpUlfZnASBkWplClXoVKV6qibTBtMmQKYYWHVUUftGIt62ldnMH3EpiU0qVQqHbCLxOU+E4/1XLfBEhzKhgUcgUShfxwmDz9G5ERAAHL7FHRKQyrnwuxQf5rhHBEBRIoSLUYszUbc4rtMdpl26Fgd55tgQG8x/fAZ2JzIvGbmlrcXAm3wXKa7ElfPcS2txfq+egfiHGoDMxyBRKHvy3SJ30Q6V8+6mdfZsaFV3eOUKsWMynkhyL1u4VI0L1SJLIxXyYzpLyNqiWz0XTpkaTyn1ZDti90mY02v0tUqtzSCl+qrK7rIuv1v9RD0sgxqGbJoGGfEklE1Yzr28O1l2KewX9N4ADaN1b7L0IaRTXOuy9yiu82pOwHQBC+pldCrOmK0Mg/r1vRYEm3DBEcgUegmUx03G4+witQgOfERECVZUY3m4tmEIvwUKUq0GLE04lICTuI0yTqtFclEClKlSa86WEZ3JJvsFWi7IxKJOBwOh8PhcETrRN3tDplMJpNhRIaiqAiGYRgmcbksy4Noz/rofQL7KcalND0FOW3RGZuOBR2xmVMxkUgkDl0X7uJiutS8bNGaE+v/ZQOwqe86GIIeEsCuovWYfCq2tvpMOBN7MzO68GWXLhtmgW2ffeHp1Mu7qwX5NDwTkpCScefBkxdvfinARIRIUaLFiKURlxIAiZE0rVq65IoUSZUmveqUMrps/z1ZWEZ5YBgGAAAAAACA0WZsd1Cp+Hw+n2/cOlk4rDpSl1K3Hr36jg1CTtwzOcNuCXYNgiDYhotH1ogOLRSux8nil4r2iYav0norzXvZ2nZjZLfaKD+VRgH/fgNmpkFbhgiGiUacGfXNmK49FPvY9tvbcTm75+3fdamW6YStwkdzaCHZcvq0CS4iU5ZmNxLXGBe/rQoHjMP1/QEGVMZFJgbDDJ/5T3eyBcvGPSqTimJcC+YQUjqGv2nC7q3nB0DOqv2G3VvlIhKIW8MRSBS6yZTiNGFX+RGCDHs8PYIdTjdAUAyvQkwSCpphNd20mpuMjQXKBQkWIjQpmJRUKYxKXcLDc6kIfHaTKaOMSc4MsVRYQ0ezU6FLpVuP3tLHuwprYfthiwiHFAWkSpmWRt+6nJ6U18CuyJ85j2x0b0d7N9pibq0lb4NnU+pO7tEULihdUO2hrptgYXCsxBFA3lQ2nmFc3FbRjGBgCd6BUH7qnXBbacjsK99RfIDMAFkBsoO+nZg8P0BBgMIAtQEan9WQEs9MAHNG8554wa+ArnqvTTjpGS7e/ilPmjARPmnsxWkdAARyOL9yAhymx7SGKlk7Gh48vDvNfdg+ITBZpD9gzgMIBwwBk5tmkEXIqqMMaETg/HUe26oLTTp4w4g9UkZ5bgbxEHtCyTLYPHmJUq3uJpqzvSNcumbBdXYQsku1C92N8jTvDFEU0rv817gmqsGjPfRuNjverTDmHCE4q+qbzOjuIIvRaDhzZ1/VJUphhiOQKHQwsZ5TjguAB8CuKr+YIMKewIoMO5xx9e4AEBTDSYpm2OTy8oIoyYoajejUQb8JwD/XB5iSswUighAsRGhS0CgzJzXMCTU1XEZHaTAXTCQSicXbY4VCoRgLExstldCtxZ1aUnlutGhtOQt18/RUdVpkDBvbS4nEoNFoNBqNFidXn0WJLJCrU8CUbqqMhZGpm+F8EbBIUaLFiKURlxKEEiVVLVNyRgpSpUmvugAZhAGlypSrUKlKtbpmA6wrQLcevfqaE7DTWs6YHm0E2dcliWWsWE3nmS7G5b6uGVnPnNuyyWbHwxDjpWk6M+j20eYMLQ/03VMmKm4ZnglJSMm48+DJize/KrdCkVMlKsyImmeZf0GQywJBEFxC/rggCIIgCIIz90bDEwMTj8fjAUAxdS6VsDcs1g8wfYCXrNd98SH8gajk5vuUPqg4XDP9Jm7oGWvGXxSdELLfrsESEsmWXTcM3cLtHFSGbSHBAjcCiUIXJqHnMlOLRBLasnUK2Sux1zqnMB/ZMGOx/zPu8ohDADAAOAACAAmAAkADYHglCkCuLVAiSIKFCP0khWNKPFUwbdyL+sDByegkaJ2WEMtWrE6/4vpW7G6e4mDw0BfxZhFt9GvfhPEAmyd4cMtUqsPl4ay7Guak5t0N52OOwJaBgSNHsk2Nh7qEWZYVq8e+ksxjj3EKSXg8LNilQqFQzE1fv5tvpQQFtFImyLtivTeWkQCk5ZRe2QiJ2ZrLYDV86MBYWX5xAPunk1yntZ2x6abNriXAshWrcfkU63y/j/m+gnzN8I3YtxzfCeOiAPi7Yh1wBBKFzs72WrlifWb3n+sOmkSizXHTXpmvAnOgea+7S8F1EHP8nU4InFY4Q5mWp3BALlesa7Bz4FuObE4EXRniyk8htCOik8vlcsWYIKr4/cHM3XXIccyODsBXH9R3NIBjUsd1fidj0iinH5riZfUODTiFQulzeax7+jHZVyxf38U3xLdr+U7u43H59KegK95Jvwvyqn3IgxLyUG2Y4QgkCv1BTD+IvCMPMg0lVYRBnSIQkaJEixFLIy4lCCT2hm0sEAgEJTDrqb4gJ2JYozSUKVehUpXqbNrZ+Zhejb+5rHrGzccLQhJSMu48ePLiza/KzQnMCEKwEKFJYYGyNyK1ltJU/J6WmFxUqLsInXSs34s4AJnTNP9JV81ZW08bwoxwjMoGg+1gPPxwAMeZkBEE+Vsupsxo9cWS5ivnaSUpFJQ1TEbteyKjMALlSQh6RK3gCCQK3eQU4jbEC7uq/AyCDHuCBQTscMbVuwMUBBTDQ9yQFM2wyRnyESxKsqJGU3RiEDPXL9DZ5F4IpAuSYCFCk8IGZVMFCdOkLuE1IKVFlGgxYmnENeNBCVSJknJEj+SMFEmVJr3qmDKIzGlkSbbd9HLk1fx+3e+VCpmKohglyUBVqky5CpWqVKcaUG3UlfpokMbaxNAsLVq1aU9GIlOfvJlMppjJZDJbRjtaNWk/rzWoMIIaNWesaut03yMO2PxII6MBE91qfoDyxCSwgCOQKHST6QVuDh5hFXlptrgMjyBKsqIaL17GcdkA58A8gCY/32PLbwknCQBANmtCw6NoBrVIqzbtOUsWU405lCwZ1tDx5p1o7TEdJBgSGL777BEjo94ao9ojtK9bv5/hAM8Ra46SjgmdeLzNDMhiUHnu7QmDDBZ+IUFiTcJoHclIkSpN+mZGcTcH5IcBpcqUR0WoVKU66qZ3usegF3mn+bFlriq9BmmnV7Pb7G0RtCasOwKQZEgh486DJy/e/J6Jrz2rvz118Pk8Pp/P5y/9NPJir9gJwylKrUy5CpWqVEfdVFNthrWgVZv2ZISYereBoJdHKeaeg0J7UBeqR8SO1an3pFAMKLwItVSJ++FmniHEsFEQW+pekoM5Hqf50lxBLLv9zCMAZTPQ17n9X5kHFX7c6Q2Jvb+KSIsSLUYsjbhmvJEEWxLHJDXMSK5IkVRp0quOIKOLzGlkSbbd9HLkyVegMBW5UKwkGWwpVaZchUpVqqOmj9p5qlNT3//1xsiARCKRSABABQDAgEAgEF4kcHPA4y/f2m7YGo5AotCVSSIaTeVGFAAlx1RIZRvGc5j0JIeocxzzpKtcaycxI1hSyV+61/GCwuzAMfQMw6LTKd8osFAcrNVDPIeFs6LHFxlNytieDjb8GOQQbhSItj02gIg8OVbUfgF/GtkaCsMMRyBR6D55mcPjLbYkI8J0wJwXf/M1no9djTVdWhpiD4MjkCj0GYY6kY1N5Q4EKgUhWIjQpNCjbKoSCNOiXoZbVF9/zsLdGYGgVbMzwJwz8+mqU2sjY1Brcjl3fG/sfz6q7og2Y34vfpdUhe/CZ2HH8yAA/xQ8D3myAIDNAVsCAJbZnxi2cH5s2cRJwVaOm2WWstPGZxYZA1KIR7mt3AzAmtkFUI5ilDcAm2QwojFXB6r3IsByVq5l+tNabctrF+QrAQ+lkiUWziHGKWc5u1FUdMKMhnxixnAU4lkaAno/nhuScEnHrQ6QEdoR2FIQ4GFnYHkfBgJTwNl42rQH7dV6IBKx4GDIPTSPAtYHcua/UzeP1epZJNatOASqFEQkYCWSjKomcvJ4Q/lYmR6bWiEWWVIFANaITOVw2ZVHzr5MzC/0i/D1kwEWVD/zT9b6DG632iK4UqC7TP2UNbnkEY864XYiKlW+BS3FUKxHDQYo+8B9yz1w4h07Ba4QkkzL0LGJGIrrZ+cNXuB3Pw6cedpAMU6GzRQqDW7ntB+cWisFyo3WCmQjL0MmXoBqNWRFIZI7gDXhtSct8LpBfkHsRQ6XpVfIRvZBU8p85F4hH8EKnxmEYmu+K6cYY3gQe1+/TzJAIRF1cKvNmn2Q0M8aOWsXjT9jvBCr521xqtWVI6apLpehKcxZuW9BWLJ3QGqf9JTiuvvU0wdghw/8IBRIX1VuNQysBqStVNPXZDtL+Nivcwi1PgD/5O0oym2J+78on0rxgA9OCla0gN0JEPHY/YP4nhIawbEJ2HlUnR9DbzfWMPAvxkrtA14x6jrAmYUcgRfRlZnnYxs2y+owLDwkS2Vk3dfjAAUVIJewD06tz+Auw6pIqxTl4dmjoGlYQXDMb31FJPs+67j9RNgsHYgwwOcYtufK6VhCLMuc4NFTbv9pEQjFNjNr0LWAJB3XGHm4x7nBRfXmHQhQ0bzqmOtVTnyeS6x1HbC/arj/Xe/7qMOl7M0eUnDPghyisF8qIoFbhfEgqyD4o3o2K5RLrMJYCaC5grHwupDNsVoXFI3+9WYPa1lwvOp91fvanGhomJip97upNHmOH+yb1+hLIpddr21RiA13Jib79k6pTB3dFAo714pQ1yRZbTXMydA7mQE9RFGhL/OxrHjdRno0Xdf9yEe0nXFfOerzY+DO3fiBWBFMAmqFbOegkAqXTVo5fS66yOIVlLCSdcp68ue4yJelhUPtU6Vm2jnNAPqwWaNnnv1w7JP6xQZawSIPlOFMEUGuzPCBb2dJUygY6Q9wr6JUjJr6NZcbEYwL/cxZfec82LOsMK49xX628P8Nq3TDEcIAPZwwhLw58hPKk5JSoDBJgiTLEStPA50m7SqYmNSx6FNv0iSjU04zmTbNYs4CqzfJflmC/YZJgNBwDAaBi8eBHT5HAk4IQkKuRER2ceHCjStXYhJeMN68Efz4wfjzJxEggJScnEygUAwlJXdh1JyEC+chggYpThxKvHh2EiRyliSJp2TpKDo6W2TIsFWmTF6y5EDy5EMKFPBWqBBfkRICBlVo1apRatSyU6fOVvXq+WjQwFeTJn6ateMwMfFn0cFep04BunTZols3pEcPvl69kD59+CZN2uaUU4ROO41r2jSuOfN2WrBA6E0yZMkM4bw5hwsWnC5acrhkxemyNZsrNtyu2vK4ZsdtzZ7HOswGEwuhkRiM7Tg4EC4enB1niJAQboudEBGRHVyIIRLecD58IX784Pz5QwIE2ElOTqQRXHAQ16U4hC7ggCEAg0YABwoKDruEl6+GqbFNPLWGAxDA2+2mUSNOiBg7t0SkS31oxeMkjrFn2IIjJzjMSUhOukkoEJSijyGgx2Ia/9Zc03b+n8+gqkgS28s756cjUp3zwTr+RPe6SerlUdT5aeuge/AHgBz9F4inwE8q+H4OvIW39FbeWry/BqMvv/KSupi9HkrVefG5Z4IavfjyWy+p4sVXyheVT5nxIq/zbvbjoqXX1Ze0hj0AYFMQZs2BkAgFIGFwxHYNB9Xdamwr3s7/CIfgYZifhT9ga10ywtzdZY/hcneTYa/kiz8KCBorhFZ4g1lXBGGWKA752ElId9aLK4SFNdV329bG7RIIKU4GEvhjr8LU1wjA23s9BmgbGjQ97oUKwqiOvyPZERICKIzA6WTpWQwV6oJle3VTlj5TyPKOjm4NbvOg/T9GVfxNA9hFhQDSw/fRjpCF2W8OA68iCyT+f2H/DG8C6e+m1x/II879NA35rwAA68QWAYglTTAsYACEqeN+6my3wYoA4F+jNoWcNS8OiajQQP7yMFawIjQRgSUMLI0Q7n1RAX6RF8YKIIJUoZ3ygC+Q2QosCktO5luMHGUaE3eLe8Vj0hqpWApIEalOapG6rdW+7qRAFcCeYikA4BPTsLh/wUWfObx9R6U8qfA4SKn5g7YCXASQCQBYN3kA//1N1f/k6S/0Y/1oBr74GXxx+2Nf0u+/7gvqC/Lzz0Ef9ORBqjn1PgLoZQ8b+1Z0c8gN/l/2DWfNmfKpX1037z2Lxn3ltBXTbE5Z8IPvfG/GJoSDy46AMxY2DgEhETEJGSUMToWgpkcxMDJ724R3/eH18SCCS4IkyXQyZMqSr0ChIsUMatSp16BJMyMTM4tOb/nNW37yvv/52Oc+8YXf/Tsu3LLMeT9bdXt2cNevXvLyaPjFDU+NgRcNuOB1r3nDLBIGRyNQGDxOyjmoVIOLh6+UGAwAkoP8wJOOhhbJBNUvhpUNLZqDU6J0KVKlybObXg6tEhVKlalS7luV2rVo1caqVgdvnaMQCcuWXHHV5ci4WUQmUmU0MMAmtgQsBSztF3RbBBewFIAw5l41ijcbBmQp6y3AENt82dAkwjxnz7P78VUUDB/VmuAd+x56cP++vXvGRkeGh1YsX7Z0yejI8OKbFy1cMDQ4MH/e3Dmz+/t6e7q7Ojva23KtLdlMOpVsbmrcgWA07PcefeThh7qddqvZuP+udG21lsTAP+fz6dr1mop+0LJ1TEggS6CuvC5oyAiub013YPMLbYzTbODATX5YEiYycpU5IVcPfJDlJ+oOudsvLOUyCHA0epShRd4duH4KgEpMEOWZGb5EFcMjVJkBUBUBRZkA2ZKNRsAN1+10xK8ti5Lvu9CQOcZwxobtVJYSNYSFI3/ezwiLJdQElVAVqbFfVj7GFYKUwiL2M9cSdgNm8LHcsAIlv3t+pTzikgjS8LhnpRA4yDpbO7BcekhLIRtyrso3hOFbiU29FgmKY5J82xRd8qylsFWkEH/ban8lnDv3Zy5e4DVGiZ3OQRDBD464XnWTmoFDR52uXJkzlfyCRN0jFULeqZVLNQEXmVElDotZNOfizQ4RLbi0K3VfQiuOKOESMFTv13Tvi6CVyU7WxMmKW3UbtDmnI17yX3HcnwjgofoU4maSUlLnIPod0w8yv66oWIMdSiGPUv2tgmA4Eda10FrntQm/elthfwuhAHWKs+Js/3zqtTxSfcZdWvMBkEko2OWd5h8Vxkl1wQ0tWqfXxjnbXTwDw5omWZ5qdvHIDbKYxyg970pJvzAz8n35OLRkfSbdDTpZgNM9lQJm2iU3/H0ngxvH29dAeY2QDQvxZ4zShpQbhAjBmwVbI7F7IvJ7kiN1FJGWNuAn0zMEyRl0h2N17JCKigCPKfy9nHNOtzwnIzwmguvZZ/TMBcQlHAfw5ExHDsXGuFuSeo3yCJnZRb3W7Uf3aNZ73EYK7kOSlVJswYYyJCtcGM1Grj98cnHhkFmu7PdOwn1WzR0hxTnRU8aBJmxqH9wQIIc/fUWBHj8qrISjbO2hPW7lRIaoDJpKp6WrVHb0ol5LnKLyFj2THgmy96ApZ6/lq1iNPY8vwDKz5gs+E/CZICPwcacqcnRir1RzPsnCgQVag5UMrKGJ6y4+yPYZI7yjKTJKSUN4oUT7GTdixO0DkfcTUdmkaBzqPbi5SiKfJaJDDKY1Zl12u1RAOkwSp7zHn6QkaipNLr6E0pHgmIQ0O3xBnWSyY20cuH2zWYxNQ3w2mFwP8xk5cKeDsdUakKlLHNJG8s5xzyhNttEBiRDNQscCl2v2ZAn1CitxMEjLMwG9p1dDtdqiwJTNCfLSqRS0AtVuqQPIsQCRZIm8x66INwpTCMJC2vYHrNMWMw5TxJ4Vi4HgRRokigFKPTpn45JYgxqh0boqguHP6IgkQTKVPp9BmCtySOJd6byE0lQ1dnktlciGUmpQO9tBn6ABRBvYbh/oXapnCC75GGIxl8W+ZZOjoHUhu7NC25UJoLdovC1VoAi2FAXp+M4N1DyAzUUjeSv5wG7Zbf9EcT6jMbsJ1BpY/Jtol7N0jpQhgLhcYfYeUZ2BXqGUH85Q8RRtz2fQdnznllB18dCDM3BM0RVmLXGPFVRjEdQhLP9DiJvpNzoUAveg9ZALfIjTVb4et5vPM9AUVC11JYBMyEpJoLawHVs3A0CND0cg2/xnXJN+IJW4AKf1GSUa3VBcuMrXlUYTugZoOzPfWKRuc8qYMmlOMKwl7x0kKtswlf2ZRsrj1hg2yzqBaPlAaMlkRC7zG4WaHc8ABrly0mDVgPhKg60KIGsln1FFQGoBHY1TGv9KgJp3Voo3OBIuA485orh0c0NG2LX6ySA9sGcBan2QhobgniJ6FetuKSHXLp5ecN1Fi1o3MgMmKdw0IrFhj81KiULDvRJDI5KSUlKAFIKxVzCugUxXpGgZfAgPEE90NezKzpxvHbPTVq2dOaq842EN9uyTzK2FYt+WdQZDe4UbeB18swvlQUCiFrbL+yC7WqlzZOUb2VpYQZu1mPUkT2Xy726Nj0gpUmoEWIer/FJkgkgbAAL4Dh/0lo5JDBMC7kg0DtzPogF0K7LWLXR06PEN0ooHH1lueJkQDPIWU6MZO6La2sgunF508C2lYGZPlcx2XJ1tuXFbre51CIUWShb4foj6LgGcmlg+UCiSixcH9rJ6TTJdAC24ApGbsa5ha/NIr+h9IeaXICiZu8C4JLzWT7gKYT7639+AAjLlppdXALbmt/zcdZ8nfI/swXNbZdw9mR1SO7IfgZKC/4MCwpCw5sD1j40wIubdtpBNcsVHmuUPvhaksxM9F8BLksQ36M/BOJAQt8TBBSUbSojwK32EYbeQrzuYGa9nWFhOKTlQBw9CFj9jTG4J3NgDveuAg1UOhb4KAp9pHgaMJKb0SloL7DodHsLjptXhkvOaaoe0CHjDU6tkKCB42gZJzRDcPo2xNeJrZDxcXeV3V28Jwk0HJhU08LtGDQMqKOP3TGoAI6YnbEkRwDRk3O4ki61InqT812xKbiioBMGE5DLpMKriOpovFLtbIe9xqMq/STYsy0ZQF5yaZavp/a+H7ubDnpSsiBwJFagBMi7wVWc7UHqlmw3fcLvvmnVRSFYRQEngxnHvux8Q1CV7AIAuAIDdAH1A+Lwg+gHgP4C9QLgBANaevOTwoqMHUoNgmVmEyDI7LrxLHDXXEk7ZAMI9zObGyCGDbk6G5UgnTpPc3+jZQMjYGUyuNXg+M/TibI2cBxgJwkb0bgi4fZf5ABCWT7BDSM8YeS/J8no4IsxQYk51wZKm44Cjw6pTfQjXjULv9ejPOVKJ3PhS2iIfulAK6sMLuzY5On/bHzhZDN2GaPh466ZLUUZEmWJ3XRG+8A+v5YOOlFIMRFB4+LjWyuSuSOep3qrPWrNBoRvGDWbgqcu9715kXz2BEMFUZXfhvL9UD/Oum64wz81IksSXvZuIOqcYRCpt+DUigsuE3Q7bvg8z9qEzf8mfeHFn55sJRUuLYxQ3fMHZuO7vhk8M091QxLBZ1Se2iQNV0djEuCFTbnyjeaqNWtDUObqJeJsBunIQ7PKWqvHPPFxEXTMKRjfADc+M9b75WitKeN2TTwPMb0PA9q2FUUGSaLhsljDAUAMMLdKYQHVjcwpgYKowaUQC16rrhxBDRU/aZgbEoUs+A10TxksnkSLjZayyRa+PhKKNjBT8LoSqrqBGiqGSRiF5TBC7h53CioeF4WFMV1zK5jDPobjHgP5a9sBDD1iO84WcL94Co5EdcIkHlNfJtfmmAEt+Ap1Jatw7v5LxbSU3meKCWs13codQUYlJVv+8tmurAGoE1npMhZexTLoPL0kg7Uey2MLEuvM0y45KlwGlWxAhnHfNjZaWNcM6rJbMimi0+szv9BBqOutfPVEjHjIbNd5paaNmbH3FLJvi1tlOxNsotdiOwT9nePO7+eSGFFTz0Tad9YdmA/pJ8qFa5gsfaoisw61Ant8Ovj+242WK3RVr+cyOCGTXTZ7Zq3yHJQLR+qfuSbgPl4UoUnnFMqluH9AP8RiO1kalsxeeHXnkuNIe9+606zih1s8OK86ekMr6qsBs8ruUq6xFH0gUfVsOYan3WStARf7F50v6wduKb0Yv2bsp2vCwSqFaMArrILvYV0qx/Ts6cD9/R0vmb7q+Uj4QJDHfLwqa1L2YSaKe6ocWXT6Eh+VwuaRyHspLtiUMefpJRUYIvdOp5YF+/MhgBB2pfwGjkKccf+wSI+BVzOXLGg1cxW4DVf9HOaaHiSs0/R3dfSi8hdFxYh7MwlF/jyhwDagF/Ce2z0hwwF4X5JbDsFJuAwM0NqtjsGMDCV6GK19hjUADbRN7yGdhOh8uwHL30Gzqylmcv7aIg7QolzPnLwrbjcNv36XKaFZz4i8PVHheQ3oQpaqLJDI3SDkEXLHMCJTZaPKyfQTUWr86qHcW6ZTe5oM7vatNDXkFlckUP6GSUQhVWitF2W719fPOZHe7g8Wr7Fm24y8hHkTmRgV7vjPRXPq4dD80a0aZg43fBV5tWvvI6ABYOgfGuti8i/kqxQuLEGoG1o5fTmm6nsWZrdluE2br0LgkdSh7F1MS5pD0DZDw8UitWKFmusx2H21xD/bm7xxs8OH1liYJSVw4YujwhxS30Bw25B7aCbGtgHZULIm6ueatxeyprVkq+lFnBmRVAd2oUT5CV6PLkXX4kaKbdgTmFhjeso/KjC8ImlgbLyrGK38S7Jjqt1E5aCMiXowa+UPgy3bJ56doHIgxPPgbwJrdWtlOGJ7MCN+05i6V7UmjijhSmI/eodXjI2WxQHjamfVOSPynWDt58boy8yvLN4q93JhpL5pWBnRG6laa1pEV5m/uIApRN7RXnTjIrmnA2sHkZpGcG6ys6ZeWXz6d8nTTftZhQObaBXmLVMVqZkgNDFgDi6XlTYm9cU2WYjpzSSFASBtqqsSoliUPKUfbAD1+pibWZ5yaYzi/fmWsHRXicj/9Np0ZzfiZtJ3111edgfAtX8W+mmv251dfEwFAtqG8tz2yDzLiDtvaberW+JqNbhCxtSgrM6q4slTJS41xaCpBGhppDrriQQWV7Ngdj4F6hSUjmoLSBstZTdvdfhAYnrBjUizm+gwVu8zqhsWb3x/F+5XEUDUTQXQCxwdHxy5vi6YHns28UiJh0n7xIWC35l2sGVQqSLHf1CN7gCQKkeGgR8aTWqW/Blf5KCAQgTmuLCxMzRjjLIsR4Qg3Vjo6+avXtmsCJoZMOkcbzF1KOHGD7ZGyklcWMxseiDsSmUwCSRbxM+OMVYgxKgwvR5ZNMCR41OQuHszuQ1+a7+uf3gMeP3GRGXHM0GOdbGhff7zIaREB+OxvTh098Bs3f/DAY3poDyrQUu6TEHyUh5dtcic+OChQFjeF+RDz4tvqdD9FtOCiA2kfIHvek2PLRftAO8dxYu4e0Liz7WByy+wDxX6ZGurZabruzGzWoO+mC+ZFknGsKTuLzNHCJC5H8gUzFs53WrBVMgK3IlOBFL/BEQWm9jTmcR8UEk0LJ/QEMDfgPHTZCqqWF/oKeev4UR4qGVUS5zxB0NfyrQdnT8wfdEaLtpcj3Jh4Fa/GT6Yc5ZuAi2Djuwc+Ib+nOI7w6MaqO+CvKa0jzaef4DqQoeUIAkdkm5u5nPO7ZmwTzAA5VUfxouS2GFAIMAhA1S+fYYVIpPcXiFLFCjmgeOEwAUdDIHw60PgpJND2OFRFbwIMEaxhpKWW72X7lmw8OYWOFw2dZsn2dNv8Jp+fFI4ZhmT9wZcZa9gSuABTru8hw5k0meCj7Sse9dKggJPRRgUseUVHak+xx8MQ1FGDhMqaulmnPLnAtDYACS9OW6Jexe1F+4w9vJkz5Ux+qgW85jkxwzw5wWAW5mHZyfzORbNMzCOc5jdVphZsUpse+pGgRpxmZ4+Z89i9pO3xxhg5Rh+/4bUCjEph60OP1/GWZrWori7aZWuQi+LZJwYp0bNMefZhwx499in6FJcAK4DmAGTIiFWJxDTzwlHfzfzavQYd4yYMyDSYPCLNmJCzuFFbpo5EuiiQZJmQlrIzkExBGmKp2LTjikiPsKfPvF2JdD4v1E/s2e26sxgCruCB6MyZLbsIP2Td9unM7rsstP2H6FBgUlOB60C/zY4q3Qy0prncAS7JZM812yYdJZL44gIDNu462YRaTzy5HKq7LjxjFOcbxaXZpB0rbZbUPTOb/7qxkfTPOgZ/dKKRgGz7bfIsoQ0Dxv3z983LN4YovoabmNZ2njOKHnZ9sRdTGjJqxIOYMidnJwRZDpkT22ppkdIUNXFSBhXKHGuBh+hl3+j5bSr2XMO7SB3VKaX2BjrOMm14q+RsOGBHswYFNr+kYLzqAM03njB99GjqjkaDxMfOaNrW6E9VMlBilTVxcWRiAJev/P+T4a4NbYqEskdsS4a4rVKLKQJNBJQFbSrfjtBmMoEUKSvjfAlAlYTjS0Rh1NHUtMWHW4Fn30YU0I4I9APU9rwtuN+benlSctiETRYm4g4j7t4AJJGoceokORgQM8z0fH9NLLaSQRE8WcC4FfkasCbZhX6k4sSbGXNNLdIvmQHOBGoGV4tgNK0s93xfAvri7emMAhaUgcGIyyffeXSpbHg9/d8m95u8/t+Tu7/t+7a4Tx/so/e5NPwzspvKRrNTj1zp/k/b/zX2oE///2SWe+NqvgmRdU0aKjwRIv16pE5FUenzb3o75AjgHEOkIF9+GXI9fENYKH9cRkPyqQ1GhPXS+LLGnmX2eG59k5TZuyrFXM9DmT7Kl4LmmRzYYLi5R2fDksKIbfC5rkxgADb6R2uTfeo1/JaJP4Z2tQbv75ibuG9vQa+oM+XauiKaHZs91rIyQW+rBmIogv4YEzh319fdt6egr865dWV564rJ+JSK+G7iU+Iebj/eLxfI9hFXOvExcVdNC95Sxx0p9I/aUz2aVYxXvaq5a9jim72mScbsAz2La0OObr0vCQ9YHdhApLlXa/WMuow+c/+qVv0DyqMpXLJmfELX8EaDbu1xv+EWtJBvooT0a+kW2Olm42Y3AkRmDQYX6PrjZWv92pJkUBNiX6go2dLhe8YjEQO1wyqcv/P2j2ui5H2PyytOd3JOAM7u1E22/FqnfURrdvb04i7oX4NDryfJLRouDI7amrvVq9w+7ap014jFFxqxN/eqV7r82amac7125UCwuUdX6+ilAilkvsWuGAhVqo2O+VOK+dWCfQcZ7SqC+Oq9/rrMPIMzuMSa7KG2FjNgiLck3/+o5VtDN1FxDjRpsixM3jZwywSkCsIrxBGlmexKOuyXSqwX1IwWjKnUaNSrxv7mzqNuTlUUVZq03cla+w/LdBO6W85sUbtIKIYVKL6H7HhWUrOr4CFqZPDxm+/Wh5RPHqX4LRNyIgjPF0eUlDITtHOeqrbun/VTifUKwWihmIpAo14N/p/gSqzg7luj0r7WKKN6OCPxl4XLB1BbwKEGvYwqyzUbO7nNqvrHm7tofqBM0dLndquvdELB8mB5n1zPWOja5JAqSEQrXdCH3PDewn2h+woJa/WSwsYhK9MjWsl067ot3AFDslXn87dShiRnvvma6BOv8nQOmHUQTRwvXW9/D6rQcS02Xj33DbI/vz+fXIbuSpVvVqvH1XfNvXuumhg3Vmy+rQhyjV9yXnRa2b2lLda/jH8bbaUt7N6a4PilTZc3mbljJboyzovcou8uz/uPINDz884ROj6wW210tyO0orFUoPXXNQbk9ZJXGVkroG6ZMy9XUPLa0z6rSgqlgXKlbVBbq40qcX93/t0PcZvskVJltM1OybhvKkytKOYM/uV0sVgTUeIBFWFg2uUO0DfzF9bWBXtjDjvSIHlV282knBlL/b/9Njq4wM+MBgtnEReD5lzWYDS2Gq0v/0Cbm6Ra13wH5A/rktyfLe3Y2s8q9rxb/KurGIjmHHpQ/sa9F+3G1jRlNmYoQw5X08X2fvrTPmKSZDxdjMvUpLJHpDkdBbcxwRT6BxGCBsQx1KrtSTmseACZBx2wkV3jfLTY0IJ6gki7KeQcXugL+ubQj5XPbtDozBmzoctRa+zN2kyQuwYbKX3ncoO0WlkQsI/OCXrcfb7PGHJfyf4TPv8OVi2tsJybYzcbMrgrBOXGJPu/OhmBEJUfjgniGC6J7wgCuGC8xyVRFNkUnd5AVqH3LHAy81wk0uRyJWGdb8j72IC0lc7Nb2sgfM26eUO2Yfbw+1mKSmX0JlPWZGw1UYb6DGkyZSlDesNt1bUXl0Z5o6Efe50AWmxsQd1BpMMYdA4v9PuDQwHXiH96Cb5sMefSBoMhZ8SaM/q/9C6bLC5NGY0pKghZO/32qT0VUAYqHWDGqVaJh8TVH97N0Rnikapdyl2nBJIZVBqjw1CrjgLa6WAzZnB3eYEhosrL5AYIZ2a2cxrnbL/WRiURfdi04Mxs26TsG1OlYv/PH4cAhTogJ+mauEIlie0IArJLJNDmbHMoE0qr/6iLnCSj14d8NH5qaVW9QRAtIou0y7NktuxEXOLUGc6k22D9/Tc2s/jfnRAhJIShjAu+6W214D1QMfEBe8ngI+QkecOmNH/7+SmdMPGdbiE0yatgv7NvGr8KBbCyIAl02locdEe62uvca7us2dcuyfK5yCL1svJed62zLrwS8nR7ndih2RWNBvhSt7opW4s3KGv9J4I4n8fSKCPuXqNAeaNRUCQvNmaVTBBuNxjhNncwixoMGdRzrm8zGuD2zSnzZ0YbujJWkylrM/TYd9YdEoymjN3Ybb3rVrbwXBzpoPWJvB3Uec8715+5sbXCKZNpkCK42Dfkc42Ewq7RRX6fPo25ouf5idGWet88p2tkWqKwhFgJWHMtRrM5Z5y1/67T3CRR61sxX4zUu6MpFDdnrIbuWgfVzanf2FtJKcsn/6rMrSnKaEza0+c+HCpm+rz/ecgTRN+//bVWYwp3haGc3m9dMjtQhxN+2CGIoSpJfHsQwgXjvaRlP3tHCAK0+dO82phQGjeYc9Z9uO4unaw0U+uwpNSOqLRNbdX0NDusmA8OVT0nkDV9JVAF4AFRnM8tNjThtSFZTm9A2l2BNKa35qn2EydIT2J0Lo77oTnQkzad/2sxEUSK/xpArbrulB1gJj35fVGW20MWaVY9WuRm3VIxrebf4tp+5ZKOx5shPVNnJIEuP8cW8YscSh3papJS9rR88PDOLLEGOjcXEb+5a/+lZsl/hG9OgvubvCd/cX2dThVKKA2V6gr5JxwI8ZxACFop9WuuavNt2lQzaaLqFGqvGhTSgkuR8ob+sBYOe/Vdou9FFM956rhQ8MOYeFNAGXiGfGZUObpMmOVLviT5/mM4CbfTrS48jti9f/nJCdcx6S2zNPnJ/LxHtNjrqatfKDKS5M1vZ1Cvff7652SIVp+eQboAvqAMGV6Pr534dPaNps9U3ic9TxKVtn+8SAMzHtlYvvzhry3vF75XYHnoq2XLHv7K/G7Be4U1g4f/WVW/RiHxC70/z6COfv7a5zrh/pz/JL1K8waraObt1lf65A9Cc1+ZI3+U7wGmVYTJoh6Skj1g15cc2S55d8/LwuLYPOAeEIAIBM4gL7oWq2L/yTcOrPLe5YLU8M7O7ts+fBsmVvJ9cNVUEXnq6CnSgDsrEPWRRsDZMJsn++aFW6KYhrGU52oS5Rga5vmVFQuVC8sheYVZFjAZ1Fvj9QnHH9LXeKy+9icTEyy6i5Wzehuh++q71xx7FlHtXMSEJ6ZhheSQ5D5z/UUVi5SLXIlduOy+xEfMC5D0sQzpriXU9Ran/TOJqkEtWHe2zKNyeiJ+5o7i0VVY26zpXwClxcfSZD9C751/pcyYMvC14zLJVexURh/X4nVqUpUIXLdrsAupVtVtfuwZr9gLMPIiRMsVjq9gaJzGrVJCScemwYjfPxABnlTqQFQdjI5HNoe1C5O01ZKigYWBLYBdLNYk/ZdexRoV4SB2fLw1c0XCIvmzq0qryFKBSjiTkfoYZvTo7wsrAMHZfzRA59YjBZW6P10+vspej+EeBZrZ8ued0856ysC5BDfw+1cuEoporaZUl9YVGnLsjRBZExPNJgKB1sZmHl6TaAzY8G1eGWFNG6KCc+P1Io0tq9LHKYXUfZw/f8WRNN73Bfh5kkgeqf8ZWS2Yvks3Ej7pfqi71m5oJMgGI6VN1OF6Mo2/r4lublATRt6pBkBN95ntXYzH2T/PzMV+Yei585xuTT1YS/82V7enNVZra3VS6OGBgC+ysIV+Y3eKXr3AE/AO0s75l9YY0pSLGqlUBkioDR/xVDqt57/A3ak+1TduLuG9aWfSAxqXb47RljWq8YCbDAm3YBAGO6+HOQp5mHMdpjEYu1N4D6NXBPgItolhA+omhcmnRdBRNwsgmuUmf+8yFI2IEHlYbG1ZMQzB0LDkNwHkE7TW4fzu3C0xhzV3b2l61ZAn6BmSKeFaKSMIGKlkeA9x64q9+XNdvn5omY2Wrwz19dcy/tmMfw603OKUrwj1zq5V93Ak86yZRqPFlrRYcqI5pPG8jz3TbDTVWC2tv+8qFqsII7GhZys++T1LXTP3y4/zyLcabT7N7dAE3dTtibjMozykVoKeAGY2xqG6s2KIe7RJag3kTOoMZcD8bnVEJqYF4VrHa6L7iTJpkbMXc0TqOGzKnVGaDU2I1oWpzUwf5ANVYM+gmyE07gRMMh0WIsZyUUmhhunXWZMm5f+/Hbvs08mDKrOrca5asG5iDj7aJbY40XnOsEZcUqwbDv/lfrDbUdWpyXqHatcxbXTTTgbeJ78eXF5n3zyLZPFvrODgnhOBp/vHTaWLWhH6Tdn83fR7stEy/X5v7srQK1XXvF2NaYPRNqRqDBi40f/n6xQl+L5Q7YZ+43pkEN9TzACYmoGucTxSiOctYoA3JhBZyKXVwjucvBo5GHRq1ciKOL/sugT4CGhm+gw7K8EKxzvSvP4xB9YJmWU7Jy8+IpU6DEA1/64RPc0INT63SyMZGwPv38ePs64C7FcLaxu0qc6q6t0Q6VECcELJcKVc2guCII2qlZ9+u/nZ1wclGCNokwDHxr4eRqSHvXzu1OyfpH//z79hBsyzT299bVU4dhl1iYcR5EmvBNNElNI1Aloq1zEUJlF6RNLN0wD88Lfv7p0+Cb4ObJeq2XNWw1u9oAoNIp/mJXwpK/zmh935PgQPZRaNRNJNPpUfvOfeONldhFAo2gqAW8VCQdlWF273DZD6aZNyVm6O7FlfDaryirvE8mfQ3y5LpHfRHAC4eJdE8uvMrTXaGqZDJOrU82saFwjEXfDpjzglU4g/dQM4J6a04jz/1ULcj+Tf/NFTiNWXyuv9HUAw3AveBSMH/CDuyzSHR9MLfQ+BW8sEQtE2EFgmFAqJpdXfh/Sy83WOeye5LFiHgKEpJ3hl/7WBb4F1rl5OWwXIPjKZBx1xoXC189wdvx/izuFdXjqCPI1PVF8COK96j4dMdjkBdKritSHU7ngJ3d/3f7z/J1k8EzT3zxSNBaph+b6y1TW0rFqMKodc+1S1FH0yLqDCAvDpvLg/bUEqtfFfp6pxptlL+KCDTsB11x2Jl4o4L1yvKcm9UuMVYMcv6ZQcku9WOuuOskurb+4cPpVPnt/14ZsbSCdOBeUY5gO3AUe60SLvw+BSsapayreEJ0psZf/3WhOfFHzo7oN+zzzv/3l8jMVprsy8wElWZSqO6IRMduXkT49IpWoKqC6+q0GvcQk1HsalkTwxdsN76vhHrIvAP2YRXZLiNL8rHsXfLJlS3MWwtzHcvDcg3+fmbm9T9v5bH39c3Dj+zLjl2fES16VuvLuooJDX08Pj9CzmcW/u5fB6u4tchxuxRvRzyxVt8bJoVbOumRUtYxrxxnDMw2EzvNx353TnyO96dD3sW/8l+5zWbJ3sKV382XLyyw3KW3Rf4PovPk23MqRcovtyvXyn5iNc+9Gni8DCyWsC9ikjHNTeSzMffFNf7cwcCvEefNZLe8glhmFG4Pib4jtNCREKubnzJV41ummD/8FMWz+FvtGBd3C0pvJd04czRTWa+5hxEZdA8xfFc5rjIuxdA+x4z7Lcy8/2CA6pDgGH8EPlnprDqsOzvIcb8UZFXq5mN1wd5SLjn4+bPxsvcaqINURRo/zW2Ta9pXjdv9f3FkuNWKzozwqgqrxSUXameQaXpSyMYWW6l7BYoZLFneH7r0whm6oCKm7MiGFGafH6f27sKWaXpeUl3Rj1AoWVNGOGFwxYd0lJQLIn/rqxtTOmSsJd3B51hBmzpRoP2VbIVhR9mrRLV9hX3NtoTTFjETWnB+nCk7lOU2vs9SLXZeIikTqfaJaevwJFxblDqvd3vr9DdW7/+6JFAPr/v07r2Q6jQfTQe6LzWPPBjg+ud/4QhHwdNvUfdKPstmxZtiqry7Kyga8YxysobV9Gqttj4CtgtbOGvivrqM7oM6yOslt5ZZh/ksqqhwfABrU9JEtr3KbFfRFP4c2Sm4P57fSuqWVR7N/XRS5ucGnprx5TvQCe/8UoReTqHMjLD8Yr/uaG5Hsnux6RAY92ebxPeL3TzRKJWe73Dvs9HY8CwO4Or3vY62mnpebpbs8dms8UsXEYnoCccgVEj8PQV5CrBKrULIIKlu46e2cByIOW6yZbCrZh/T91Q766QdTqcJWbOio6X0J+1F9d3IGoO3QkB1UhIrLNtJT1/df/6td9P/n906+XFckpBwPmOoTO6HU+XGcIjHwOyLRDHqWnEC0w+ufJ1JKggpEwcjURjuEafdb0yf9LIloUXMCDwL8VLnFYC8TU7qVV+irRry/xWS+NLd01RyBCUTGv92b5XV1JZP5/NTvgHUd1R7fD24WfDiCpM23m13NxJmKx9ukrrlhF7zC6Zrt8+1rfte24Ve4i9Ha0aNUJ+xXLB/WfZfErypctX7HiHz9l5NLmBJ7ATHE8fvIwdjvGd3+CYAjaTkkl3/z3wBVj8vMmzvDAVbasAgKG1OfAjImJ2WEPZsFM2IZb5LdsSL+7BMz5wrvN6RqxSFTD/+W7AiD/TvOIWJr9k8t55Xh+1aX2U6qnlxMzG2aQcLvzGXaft0oOcFWvEV2ZqQrBtDUO4DLKvD8fJiUvP+fthAfkigGQilNAjtBUYqX4/6eFks+uC0XHzqdKW07yNkJTznu2+/RG6DHgelabm3z9bUd5Xzq42tjZY9pSXxksd/7mlstmHvG+O6XUe2IBMzlSz8VxT8UFkh2eQyJ+3tf/G2JCleHsbzP90BbRnCau9Amuc6ZPGCRXpHPDlNc9SmYz1PKQn1yebh2hvMpQtfbIwrpqNLTG1Nll2hxvsG3qaV9Lbaw5+dbGavQpN1sHOyu2wJLf5VK+UOnpHT2ooxv4qModVWgJH7BNgZHeOvtfd/stKINrcnVSzNxCupPQkAP34ysTnQNmt7VbZa+3UNpYgj5ZHjBskKK0QQttzxdXXpx8dcODrtJvB3YtX39G6f1TZY/bVfZE/oiJ7sUDLlt9t/KZDc15r/dkeuMb4uCuV49ZEQykn2RYMtm9RQN/l3WGABXkFL6IoHf8n6dvAkhGLyh7begvhc4USCoIcPneqaeXXvggwAedwt2wI645DXnK121HhYByjVK06NK4/48aLvoXUy2t4Spe/kV2z/TYWqqj3bA2GjGs7Wjbo7HYOmrWoCUSPbN2uCVRsW+ESDXrRvx+ciSZGtX4fb5RKqUd9nntVBp+9Ix0YnEJbUUaKWVNHcXUK8y1nZR7io9DLPyfPSyXTCVx174nqll49okb3awILKhuPaLWPXXNuzu92uHEOaJ4+ej5va+NqF5DxmQ0KHtyxjnj06p5B9a94f3ap6o/MVUavf0zWPJA7hJ8KYec5eWTAvhM6kVJ8sUziIDMvKXUb5B+JJW5t9JRmfQoTh+tZn14oop1tLGteGZ7U9O0mc5lydWbAzYXbdx2p+pO/C8zSQVGjO/B3tlD7O883Fk2NqVWHpppWpnEk1n/mpZoV6aJdJHmO7O9QVJSv0hta7CU4Jtycbgt/mlDrf4UZ8EPgKUg/CcI/gGDJfWN7Eke+wSb9TuXN1km3CBeC7I5nt4CoDAlmi4Q1DN8QXdvAVg4207x9ffBIrio/rs/K1xaV6Rs9xs7XzkoSC3jQymBoAnc0fMGpBhhprPetvx9rrdXszme4QKgsJ8YPr0aabunqgAxMQTQDv+NPcwxj2OyM6du/3fnmj/Gv11kPQIBfNBcCwKTw3UgS5wFrAAdRxVwRgW8qQIuh1tHKlOkr9rYy18faowiW2sg67YGL1jJZMJUwocq4TuVyB2/7QKK7XQboPGwBqLWQD7WQL7XQH6zYQ0II37o6+2gaAH7123d37c/PDdcK0IAh/ubEXK3CWwHp2EyPOybH9rYmf0B2PshAPMsSHZmcev4Fsfuxf39xf2zV//7D4sXkbgZhtl8qwYOqIEH1GCf+8EfL9NqM5+GzVf2n2/+MEe0mUetZcBe/SHockYccJ74Brx6dRgAoD04B070qchozYLkWob65a5v8meWJmomAGpwmPIfQBgW5O8WajAHvo1dv/yi48b7bfwTPZ3sxAGv/aeoYQAgvl9KEwDs6R640fv1wbHxS9H+T989rSrNbq3nNL1fHlwA+ERDOIAfh1zkwRVHWguPTmEfWK//3XtN70cezqXbRH//s6D3b3+QszzslNJk77d9GxlsTCHpxzI8u+/T7784QtW8soH3Q+jJBHCR8kr4RyA+f6uDMz4McjYP97Shv9HCnp8Kf3iGUgvbg/dDuNDxSaIAKMT/21cZ8KD8DL3xuThFcW2i4p9V7hXLW0BVH1yHl4t7PL2/lQuouzhX74rwhv0akbKnp897PNO7FHzjoiuWlFNes+P/sBbP/2KnHdz8umvrPZSxFbLiwVxyDUoxpRk3l+/8zMePh5R1GAcA7srV+4/pAmJX25Vsi4gvAwqxWDTaEFJuyDQ2EcnWXqlKopKpuanRADTAhZO07XZbKjkblnWp7R3YaANTPb4pGTdzuUOqdY1Wie8mD3jocT06UywQAUlA20YBoKJlXRAJDMlNkMZ7ySotZEQjQI/EUclWldWOXVRmCleOgrYWVI1BL7mb+72e0dNrsL0C4dZs3oEKhaxuNsnBEbFxMkSER++ZjLZHYhJVV3mxoyVRaUT0qjovregcVdRsXjkmaFFtEeJljeQFVQpmU04QcbCHjAz1iUIawvlOXkO6LR6kXeomXMojZRNV3fqqx37Hh7fUegDVC1+ZqEwlq663zcy93q574+quAr0ttBUqf+JtjFipc0Ba+yl5a8cm7YzNrKNA+IQFO3pf1frVbe1DSphNWRtoHeJNhfsXReexqvsFqSfU756E1iyrsnBZWxpYaGYmIRKvWS7z7Og/7i4gdm4JDaRcmhjrK1M6N/RacmOJhGhl9Y04HKxkjZ/cGvKCnArtduwIdK1IRihWtsvob5HYWVahCL57iZZS9SUq+DTH891uAIjylVenNa1tSiGbHSn2zXlnp8uqd7nqmPmnCwXmx21X8uPHxzgfEItEy59tt9+uv7LXdlPoy5l671l4MAJ1o5WoKIF2F+6XZ1Tt62LN5guxWWWlEtMkxPfdvNxFrYgR121Rl2vasoD8eg63sF4tQ7lQeGxbPeLMCTiqr1wDL+vSJfV2+6MXfW9cEMPK0L/87kEi8Y2rb9VDt+P9GyLv5cBWJ1ou7cKdExWer8jP4wvDSs+z6BuPaGKOL/CmliSa4byiLug+mRBRRfBAN7GSZ02C4XH8epdWr/CB8gbUZUpeSs5xNQDIOYVA1EmIeiKXWKZRA1VGTCTxomOogOjQDcfX+z1rlOyhnUwtEPZiQDSlSQ0XHOV5si9e6Z3q69BntC2+6vPoPvC+4+0VbTt4/1/8wXIxG46mE4wn0Hi3/XAQpiLgAFZg0Lj5KH+1XBrHQnphTZ0v+3OjIp+6b0gs6uoSE7qVwju3teh9J9BOXc/CwDy//aUmFqlFLMmH5lU1R9hRUw4SaI30qFHWAnmmSlqo+atuG4XssS15zf1Ssyl5bZ3b4pFX87ayAcdmcZ+zoehzzoXEdaQSZkooLvmV4Lmzux6vEwW7RVCEtWt3dAUK3fFiZ1adi6VOQXch6mzGzz2hzjfMKQqTjij2u2apjiTPraRGJ77aNjTpcd6gPJBWAP9XtapcWP9x+jL8jdPPza/wqiNufDAw63bXKklrmsAe+QU8JfyfA2vqF+RP3Yn13ehh5+u5HrbMRIYw9PLtoX8wOYG1kXeC4ea9Z02M3aMaunz9cnyavXr7LEQPHq+qphiJHy0JgJgAyszomz3TllYBCdbIvROcUeLgNZLtLOpFprX04WKOgV5Aliw9ex2bM2wfnY+nNvMV/ivu/hOzxFHVblJDWaNJ6SRluVG9sVq0xrVEXTfUKBuMq6gPQXdUs1IyVtSwJWxvhd+inXQ9IC5KhxHLMt4fnJosutYMtqXALBvnQFQBmHOWdlVr+DTPxlIgd2GMq8lhP48RDXOuEQMZi89+YicSktgJILnmLh4Oh0O0eMqzdo9byofwmO37uhPrJIdcL72sE5x8zqioVYmkxVFFa5/blao3AKgh/kEOAmPux5bDNOQq1bIKwUmJhiYHC3CcmZLvkWFVkQ5ZejnE9cB/sCIi4lU0kY6etRUNaXuoQLytJ0Noy2oMCgrLiJCdQR3DBOf+yxUCjvLfQFbEea/Tl72SuNOuplT+nBtaWgrlyzNcROxsbX/TFdJy/2gxPa3oU2GpYbChL2v5H2ayINWNQL/zmKzYqUCsrV2asreXRL7/cl4aT67SMTAxEfJLwhOhNhXOJu/p0wN/vCVMqCzxOjfN5eLRLOCKIc+Mr1xe6fAwbFsW4L4c27m+atoAdATbpl/N3RJgbB0nfM26LfuKkPRsDSEA0VMTjdDXY7J4f78+YF/P4+shV+hclZTGfyPTm90uVKPRcBhutK5CKWYe9pga8cuCqRjhcMo5xNh4QcY6JR3ak5Y41m5SRB4WFFUtsiqAUjUSMBZ67PcMIdBMa2icFJ7U7j1Wsf1OayGcqzEzC3iAWUa5CjWac3iv07CSJRImGFPbid3Or5WCwLf2+4J2LsbU2UFhVSwTrFqDzIc4CmBNjJDWlVbTaDQa4mYkXpdskyJ3dTUeT1xGtlTIJuFMOGnhOlHKkhNEGhJz9Bl+jAlDMCoDQmqZzBWyUVSIPHVc62QDZg9PHNwFZTDEkIklmgQiYLBQkD4HY9VorKtaAoSLKAFpNcZUShmwIO2slRWTNjWmVlB8f4RRvuFexwoqQ1ZkBavjhuJi3godyfDJKwLzAFDvohaWhDRiJ92jTown936tuwTi3JlYlMtwOCyt15vF1aBlAmZA82otOdIGCx0WQJoOx6/3Y1nZoffnlDlo3b/H9r0SIDLmwYOuJc9daf2tWRKALa3DV9pBGLtmbva3pC4aJ60R6XqbGa7R+/eT/d5Qqn+o8odY9WC+puyV01hiCHwco24UpVF1HR0Smv14IcqUsNBjpYraXopBF5Jah6cqOk/JaFXmp8lk0JaMghCkFBvQDPzrFpQuAOIsaY2v92Ywp10gNFEpcrdh7taeMLRtTMkxGyUxSVVgFSmXZaNPsxsY+IZp8JGkxpObAF9Nd0aW0PPwnrr8HjCbBCt7pcrdNy+H28m6Q+pXj48+UMHKC2FNj2Q3ef+3aRqHuRD+mb/5Sefw94MaMLCfGVZZCSf6S4+Je/PhB+SmK1JfODU6E1ZUq5Mt6vWc9zaOU9Vlkgvq5IzheXqLhY3p9dMP75o//cXhLGefHezaK88zJV1f8/55i6r69eQfZXD31l74pObjerPZfRk3c4fx/LUxeYgtbM7uw/1qoe9zbYnp+TyMB7dW09/BdyzKbqteKHksGlyQUFbKxd7NNdxdEkZAABA8ilMPGzvRSgGBEDzYMXnnUFzRTHUSgNZ7VUT6keAe25pqf9QX1f84sWDiI9PHEbU4ZWtLYLPET6V0QNm9el9i0LQ9He94QvClunIEGiRcRmpPmZQpDQnmF6khAAPxvx9/33//98LH/1tSNKIfAMBa+w8Z5AF8PG/9s6In+e5sDgGgYAAAEMC/H8gjt6vr/0a9U77XX0BoKBVCeo7g3YSNt6vVQ6Wd4n/wleq9QlZNZm1Izy/2yucL/AoIRy4DpfuMQ32wJMrP6CLPUDfh6ueBllrhRfAb8IN5W5eSVcapO+raPi+xbzrfXazo7Od8/7LY1Q6g/56l0peZBAqo/r4t4F8y3+hiCGe4nkAj0+XWUgku/mycfV2vxE0ZDvq7T+aUthOUzVf9OJAVWAmAry5vwD4nzSOfeY2dpUtt2+aAfZ6qd0NlLsc4+4k4JWFvf9QTqvtGLeRjZhOC9xZ51cL3sID9Q5UjZdux2wWqkKptFGUILZlHLwrZIT7FUJcipBD8fKE9u+8/4i0X8tvbvOYE3BCPjbHlHjtmItkxvisi2oEufJy0IQYNzD26o8+K0bFsl4vY/uIJQHYoeN8+WQQ6dwJPS1iJwk+z2FS2pye6rc0tbT3B81Lfh2S7hhfUmrFyLq0EomiIb53+YKVe75LMdAwDkJsCc/0SCsTsxU+YWm/KeufK+WjcsF7ZZFzbhTEj3pn5yxUtD5VWDssueCtic/C2MdfI57zI9r2QHuNSfL28Jylz5dk7EnIRP0vtXwxvO2DrMvarxGJEq5XXLL+LF9RxwelIdhNx0bTHtJoRPRKUTinylZIE4E9XnaUTQDgoxB2MApAnSkNK5J7u4SvBtnO/sme/3t00AubJ/MHfR+k8ZEcFygMABNCQfrQ2FIwDtTsB+h8cg8MBCIzDoSYHAJbBtwbE3Xsc692/NODUrjYlGkg7F9JAkU7XIKBYW4MD3p7dz9HMMrsCArAr70I+foac3VeQ8LX5RIJ2Rj3MGtVrYCVG0tA6KNWwodreOpVa/njXU6yHWJxZuybJ6u6gU4d4w17azEJMoV8r4wD+ykrkoEZ91FZq5HLx9iXoAw8+HDAIM2pqWXDwzofXPNwbsg2fR+9k6yKFgLsHJkX8QpfmjVcdYmFSgNxer2OZYgoEDZKB9X1msmRKEnlrIDQNQPlAUDYulSfGWMcxeIefeqMI6vBC1axw495vIbfwBWHwxVUvUIyWjtTwW1Tg+cZTDb19jarp+fVVEgp5fX7s40K8Njnqrjn0tY21FdMb7YopiU1xVWKVPyaxyKck5lRNiG2EbRvgUikoTg91SXSgbBJcbS0wa6QBpiRqmU1IpaokKi5WMZGNirpGSuGURCZQpTWqhK+KeaqIqwo58QKaP5Xh0dFWkalxcFvY/PW3Qrr6w9dc13alJm27rivt2lwVhV5FIlpkpaoBEVZ5YVaxEFXaBNa/tpjfxdZezutw+Dc+IP/J/4yy4NzgrgbIwX0EGbVCZaWwlrSScj6O/E0+IBFh0d0i+45v37dmNZXK9TXwGv8MfPbetCx6XL+ApClDW/HjNiK+7vrq1Ss42128bbG/MviMc5Go5Jc3KmddZ28o7EU7VrCGBPZ4NtL89/tlXF0bIYmNIwBBAQ==) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Quicksand;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}body,html{font-family:var(--monster-font-family);font-size:1rem;font-weight:400;line-height:1.4}html{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-paragraph,p{font-size:1rem;font-weight:400;line-height:1.6;text-align:justify}.monster-h1,h1{font-size:3rem;font-weight:400;line-height:1.15;margin:4rem 0 1.5rem}.monster-h2,h2{font-size:2.5rem;font-weight:400;line-height:1.2;margin:4rem 0 1.5rem}.monster-h3,h3{font-size:2rem;font-weight:400;line-height:1.25;margin:4rem 0 1.25rem}.monster-h4,h4{font-size:1.5rem;font-weight:400;line-height:1.3;margin:4rem 0 1.25rem}.monster-h5,h5{font-size:1.4rem;font-weight:bolder;line-height:1.3;margin:4rem 0 1.25rem}.monster-h6,h6{font-size:1.3rem;font-weight:700;line-height:1.3;margin:4rem 0 1.25rem}p+h1{margin-top:3.75rem}p+h2{margin-top:3rem}p+h3{margin-top:2.25rem}p+h4{margin-top:1.5rem}p+h5{margin-top:.75rem}div+h1,div+h2,div+h3,div+h4,div+h5,div+h6,p+h6{margin-top:0}.deco{background:linear-gradient(to right,var(--monster-color-gradient-1) 0,var(--monster-color-gradient-2) 50%,var(--monster-color-gradient-3) 100%);-webkit-background-clip:text;background-clip:text;background-size:cover;color:var(--monster-color-secondary-1);text-fill-color:transparent;-webkit-text-fill-color:transparent}::-moz-selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}::selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}kbd{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;border-radius:10rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;padding:.25em .6em;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}details{margin-bottom:1rem}summary{cursor:pointer;font-feature-settings:"tnum";font-weight:700;letter-spacing:.1em;padding:.6rem 1rem}details[open]{padding:.6rem 1rem .75rem}details[open] summary{margin-bottom:.5rem;padding:0}.monster-no-user-select{-webkit-user-select:none;-moz-user-select:none;user-select:none}@keyframes details-show{0%{opacity:0;transform:translateY(-.5em)}}details[open]>:not(summary){animation:details-show .15s ease-in-out}details[open]>:last-child{margin-bottom:0}.monospace{font-family:var(--monster-font-family-monospace)}div[data-monster-role=control]{height:100%}button{min-width:-moz-max-content;min-width:max-content;width:100%}[data-monster-role=button]{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between;transition:width 10s ease-in-out}div[data-monster-role=label]{align-items:center;display:flex;gap:.4rem;justify-content:center;width:100%}[data-monster-role=state]{align-content:center;align-items:center;align-self:stretch;display:flex;transition:width 12s ease-in-out}[data-monster-role=state]>img,[data-monster-role=state]>svg{margin-left:.3em}[data-monster-role=state]>svg.successful{animation:bouncy .5s linear forwards;color:var(--monster-color-successful)}[data-monster-role=state]>svg.activity{animation:bouncy .5s linear forwards;color:var(--monster-color-activity)}[data-monster-role=state]>svg.failed{animation:bouncy .5s linear forwards;color:var(--monster-color-failed)}[data-monster-role=state]>svg.activity{animation-duration:1s;animation-iteration-count:infinite;animation-name:activity;animation-timing-function:cubic-bezier(0,0,.2,1)}[data-monster-role=state].stateless{display:none}@keyframes activity{0%{transform:scale(1)}50%{transform:scale(.1)}to{transform:scale(1)}}@keyframes bouncy{0%{opacity:0;transform:scale(.1)}80%{opacity:1;transform:scale(1.15)}90%{transform:scale(.9)}to{transform:scale(1)}} 
+}`, 0);
       } catch (e) {
-        addAttributeToken(
-          document.getRootNode().querySelector("html"),
-          ATTRIBUTE_ERRORMESSAGE,
-          e + ""
-        );
+        addAttributeToken(document.getRootNode().querySelector("html"), ATTRIBUTE_ERRORMESSAGE, e + "");
       }
     }
   });
@@ -24555,6 +24540,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     fireCustomEvent(this, "monster-selected", {
       selection
     });
+    fireEvent(this, "change");
     return new Processing(() => {
       const CLASSNAME = "selected";
       if (!this.shadowRoot) {
@@ -26149,19 +26135,12 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
       init_constants2();
       MessageStateButtonStyleSheet = new CSSStyleSheet();
       try {
-        MessageStateButtonStyleSheet.insertRule(
-          `
+        MessageStateButtonStyleSheet.insertRule(`
 @layer messagestatebutton { 
-@font-face{font-display:swap;font-family:Raleway;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Quicksand;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}body,html{font-family:var(--monster-font-family);font-size:1rem;font-weight:400;line-height:1.4}html{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-paragraph,p{font-size:1rem;font-weight:400;line-height:1.6;text-align:justify}.monster-h1,h1{font-size:3rem;font-weight:400;line-height:1.15;margin:4rem 0 1.5rem}.monster-h2,h2{font-size:2.5rem;font-weight:400;line-height:1.2;margin:4rem 0 1.5rem}.monster-h3,h3{font-size:2rem;font-weight:400;line-height:1.25;margin:4rem 0 1.25rem}.monster-h4,h4{font-size:1.5rem;font-weight:400;line-height:1.3;margin:4rem 0 1.25rem}.monster-h5,h5{font-size:1.4rem;font-weight:bolder;line-height:1.3;margin:4rem 0 1.25rem}.monster-h6,h6{font-size:1.3rem;font-weight:700;line-height:1.3;margin:4rem 0 1.25rem}p+h1{margin-top:3.75rem}p+h2{margin-top:3rem}p+h3{margin-top:2.25rem}p+h4{margin-top:1.5rem}p+h5{margin-top:.75rem}div+h1,div+h2,div+h3,div+h4,div+h5,div+h6,p+h6{margin-top:0}.deco{background:linear-gradient(to right,var(--monster-color-gradient-1) 0,var(--monster-color-gradient-2) 50%,var(--monster-color-gradient-3) 100%);-webkit-background-clip:text;background-clip:text;background-size:cover;color:var(--monster-color-secondary-1);text-fill-color:transparent;-webkit-text-fill-color:transparent}::-moz-selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}::selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}kbd{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;border-radius:10rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;padding:.25em .6em;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}details{margin-bottom:1rem}summary{cursor:pointer;font-feature-settings:"tnum";font-weight:700;letter-spacing:.1em;padding:.6rem 1rem}details[open]{padding:.6rem 1rem .75rem}details[open] summary{margin-bottom:.5rem;padding:0}.monster-no-user-select{-webkit-user-select:none;-moz-user-select:none;user-select:none}@keyframes details-show{0%{opacity:0;transform:translateY(-.5em)}}details[open]>:not(summary){animation:details-show .15s ease-in-out}details[open]>:last-child{margin-bottom:0}.monospace{font-family:var(--monster-font-family-monospace)}[data-monster-role=control] [data-monster-role=button]{width:100%}button{width:-moz-max-content;width:max-content} 
-}`,
-          0
-        );
+@font-face{font-display:swap;font-family:Raleway;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAFJ4ABIAAAAAt3AAAFIQAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGoE8G+46HIU8BmA/U1RBVEQAhQgIgQoJnxQRCAqBugyBmnALhCIAATYCJAOIQAQgBYUUByAMgxwbfaQXaJefmNz0Zol3v60cPeZMpG4HJSjk5qIINg6CGMglZf//n3F0jOGGDRA1rXeIncJIUkNHGn69qMRDU8Zajjs9UbsmtnqnE3v3vqiQmfRQpLkKW6QZwal6s5IUiJNUSUG/OwoDY6B675OjSjkDSSMu2pedpu9vJILUlJd707D+eLHpjYDI4e1uDnLjHHvxpDXGMyduLLn1qt0FCQOyFsJZE1+kJq3T+Ie7BJFINOANbi9vTUzhI7W4GmUL0lWjT/FQQi/m++xuPP02omRHe5pn4DgfNZfn+R9z979tmEeNaq1RxRqHTjTPNA2JFEgrHdo/nt/W/5zbgGCxia6EkViA2FhYGItRmE1ZvVUvqtStb7Mvrd3W7+t2+0XdoTnzzjYbp7mSHLACkhMWgCTL6s0Wv0AUohJfEqE3opPd58ikJnKlo+3uaeSHYJ6fcIcXjd+rKUEsaElTqlUlVRm/N+e/8iP0L5AKozNlJ3/9iBwshM6v5JIUJykgT3fdrOmq6Lcs+Z+q/XsAXFxEEiQIUaKosFn7ctT+7BBS5dqDolJXunbl7rttzD/v384LftJagFFALYPE5A7gnMrZBht4lXqsbZKmbdq0TtOmpmgNiugM2PYBc73Mrjq7GLsoXHcTpt9uPvFDz8eN3g+sxrPQAw6DTFNp/OZI9iinNitZhRmpQOCkdoBdANjVWlavMitwDNJX/pYIAkVwnOP/vW5xzoMw7SAFAKU+Zz/knP/Z9j+OdfrL8Ke2vdKbmphuxJSuL8EUAggHIiBHP+444EDzv1PTQ3YkOcOSlTHmj6Usdfo2L+/jpYe7IHWcQUgcgkpLFR1YTW8CGKQX9b8GFAAAH9to4RHQ6GLvFRri4DiwTzAADDMKDPr/fZ3V/qdgPmkGzKTEmWEXb7Q3ttgTYqo2nP6/+97Xf+F/9JHAVsIIcACBZwRykGT7gCR8VohJcUOOSDjiSbAphMozm2JRptBtUW69XbNFG3IVy2KLok48/Lfsm527IaqBLMuBbOFIweFUd01veL+Y8xWhtzcqTm2CITc5eLJwSI4fYlLYFIVHAs//T53N4/Yx1hKGU+HSqErdpPPns6fqqWJsNbZaClQtjlOLUMshcdoA5TQss4JLc90SxCOMMUK4KP9NshpzpX4vwxKChCASRERE/LKsWRlJwNKAcTnXAhEy3r1KHcZa/YdX58420/iaXmtGhoCAiIiAR23v/P9+KTACAN5hdkC3xUC4ELsggvkR2krEjYSEv0BKSmHChIvYOCAJkKQgyYMM2QoUMzCo16BJ85qAWCCdHek3AB0ODL1Lq0PgTe3hSw2fhi4XhPueuQWEH6xtIEQAbG2Nm5oV54QFP+yKgO2D4T5t/wz2XW92/rpqpLTSIP8qV9vLvOds0NLWyX51K6ofbvPZE1paf7w318C9Zthq7f32bfuL64VZHw514Ysm5lgfNbfG7W9lsUA4EGz723vxwGzp4fRR+mP8Ls5B7KB2eDJXc6xwlG6902ug7AzLA8NY21B2dB/P5qfOV8t1onyL5jZDDfQI5Rg8D98FvHsvclHuJsrdvsJrpc/Tr/gu/EfZJzXUzpWaDj7M7+UP8/8EkAAVaAS/CR+Xs/JN4YaIcO1xHZcUaMMbklrpKy7NfQJKQcURagoGmCW+HA6ENvbg33sl2pIYRmE9bIHb0mA6kk6lN5GdyMN5EbmQhxHKlwMgT58cgw7pdURz7nfMcQfcU3vIczVkdrhX8XHq4012tFOd7kT/a7p7m83WA71F7aO9M+djvdd6j7fxm+D1Pu3z3uirvmuyza53trv93lTb82RT2KaFVUKMNP36BvQMCo0GsEdkL8s+zLg1ExbM0NgCWAxgzf82DG1KXMfc4rjNcQfHKxSCuRuBI5AodDDDkGdV8CnVVEmEMain4Sa0AXTI0RBNpOYALVq1aV9vxJiUzHKWCis6mp0Bukx069Gr74snVNbsoCmkVMop5+pDGaWz2sLDr2iNt+oZO0b36YSIjWcxvnlN0x0VhlYoW4URjXXKyLG3Y3qoLdEazHAEEoVuMl3DDeERVpG/jeTER0CUZEU1motqFoiwJFKUaDFiacSlBJrEjSQKJ/CSFSmSKk161QlkdKeySXYzsdXKi6I9ikNJMtCUKlOuQqUq1VHT1zq6+lzfQNAIa5JpRovWaEP7ZxuNmTjMLBYuq3XUTgNdRDd6Uq9A33cbxAzxDDON0IxaNVaxd//s/ajxAE6JnPbFGZkuC3uaNU8EsDSLZVmxOj1Pd8HQxXSpedkXawbW6wZo8+6DriuQFFw5IpvnJh6/ZgFJK930aEM2XJ3yJB0DHophbqg0urkvMIgYltbGRPcdkd7Vj/NV4pbAba+/E4BjCg9p5Zeri/pdM0CG/7tXZNxVE+6bYavQn6umWwy3FXf6gg+XnAtHDgjkPNiUbqpowvDUvbRlcj5XZHYzV8Ji4Nl1vjsOhrMaxOHxeDwejz/VIHJXn6H0whg6qFOEUqQo0WLE0ohLCTKJ0yQ5LU9yRQpSpUlfZnASBkWplClXoVKV6qibTBtMmQKYYWHVUUftGIt62ldnMH3EpiU0qVQqHbCLxOU+E4/1XLfBEhzKhgUcgUShfxwmDz9G5ERAAHL7FHRKQyrnwuxQf5rhHBEBRIoSLUYszUbc4rtMdpl26Fgd55tgQG8x/fAZ2JzIvGbmlrcXAm3wXKa7ElfPcS2txfq+egfiHGoDMxyBRKHvy3SJ30Q6V8+6mdfZsaFV3eOUKsWMynkhyL1u4VI0L1SJLIxXyYzpLyNqiWz0XTpkaTyn1ZDti90mY02v0tUqtzSCl+qrK7rIuv1v9RD0sgxqGbJoGGfEklE1Yzr28O1l2KewX9N4ADaN1b7L0IaRTXOuy9yiu82pOwHQBC+pldCrOmK0Mg/r1vRYEm3DBEcgUegmUx03G4+witQgOfERECVZUY3m4tmEIvwUKUq0GLE04lICTuI0yTqtFclEClKlSa86WEZ3JJvsFWi7IxKJOBwOh8PhcETrRN3tDplMJpNhRIaiqAiGYRgmcbksy4Noz/rofQL7KcalND0FOW3RGZuOBR2xmVMxkUgkDl0X7uJiutS8bNGaE+v/ZQOwqe86GIIeEsCuovWYfCq2tvpMOBN7MzO68GWXLhtmgW2ffeHp1Mu7qwX5NDwTkpCScefBkxdvfinARIRIUaLFiKURlxIAiZE0rVq65IoUSZUmveqUMrps/z1ZWEZ5YBgGAAAAAACA0WZsd1Cp+Hw+n2/cOlk4rDpSl1K3Hr36jg1CTtwzOcNuCXYNgiDYhotH1ogOLRSux8nil4r2iYav0norzXvZ2nZjZLfaKD+VRgH/fgNmpkFbhgiGiUacGfXNmK49FPvY9tvbcTm75+3fdamW6YStwkdzaCHZcvq0CS4iU5ZmNxLXGBe/rQoHjMP1/QEGVMZFJgbDDJ/5T3eyBcvGPSqTimJcC+YQUjqGv2nC7q3nB0DOqv2G3VvlIhKIW8MRSBS6yZTiNGFX+RGCDHs8PYIdTjdAUAyvQkwSCpphNd20mpuMjQXKBQkWIjQpmJRUKYxKXcLDc6kIfHaTKaOMSc4MsVRYQ0ezU6FLpVuP3tLHuwprYfthiwiHFAWkSpmWRt+6nJ6U18CuyJ85j2x0b0d7N9pibq0lb4NnU+pO7tEULihdUO2hrptgYXCsxBFA3lQ2nmFc3FbRjGBgCd6BUH7qnXBbacjsK99RfIDMAFkBsoO+nZg8P0BBgMIAtQEan9WQEs9MAHNG8554wa+ArnqvTTjpGS7e/ilPmjARPmnsxWkdAARyOL9yAhymx7SGKlk7Gh48vDvNfdg+ITBZpD9gzgMIBwwBk5tmkEXIqqMMaETg/HUe26oLTTp4w4g9UkZ5bgbxEHtCyTLYPHmJUq3uJpqzvSNcumbBdXYQsku1C92N8jTvDFEU0rv817gmqsGjPfRuNjverTDmHCE4q+qbzOjuIIvRaDhzZ1/VJUphhiOQKHQwsZ5TjguAB8CuKr+YIMKewIoMO5xx9e4AEBTDSYpm2OTy8oIoyYoajejUQb8JwD/XB5iSswUighAsRGhS0CgzJzXMCTU1XEZHaTAXTCQSicXbY4VCoRgLExstldCtxZ1aUnlutGhtOQt18/RUdVpkDBvbS4nEoNFoNBqNFidXn0WJLJCrU8CUbqqMhZGpm+F8EbBIUaLFiKURlxKEEiVVLVNyRgpSpUmvugAZhAGlypSrUKlKtbpmA6wrQLcevfqaE7DTWs6YHm0E2dcliWWsWE3nmS7G5b6uGVnPnNuyyWbHwxDjpWk6M+j20eYMLQ/03VMmKm4ZnglJSMm48+DJize/KrdCkVMlKsyImmeZf0GQywJBEFxC/rggCIIgCIIz90bDEwMTj8fjAUAxdS6VsDcs1g8wfYCXrNd98SH8gajk5vuUPqg4XDP9Jm7oGWvGXxSdELLfrsESEsmWXTcM3cLtHFSGbSHBAjcCiUIXJqHnMlOLRBLasnUK2Sux1zqnMB/ZMGOx/zPu8ohDADAAOAACAAmAAkADYHglCkCuLVAiSIKFCP0khWNKPFUwbdyL+sDByegkaJ2WEMtWrE6/4vpW7G6e4mDw0BfxZhFt9GvfhPEAmyd4cMtUqsPl4ay7Guak5t0N52OOwJaBgSNHsk2Nh7qEWZYVq8e+ksxjj3EKSXg8LNilQqFQzE1fv5tvpQQFtFImyLtivTeWkQCk5ZRe2QiJ2ZrLYDV86MBYWX5xAPunk1yntZ2x6abNriXAshWrcfkU63y/j/m+gnzN8I3YtxzfCeOiAPi7Yh1wBBKFzs72WrlifWb3n+sOmkSizXHTXpmvAnOgea+7S8F1EHP8nU4InFY4Q5mWp3BALlesa7Bz4FuObE4EXRniyk8htCOik8vlcsWYIKr4/cHM3XXIccyODsBXH9R3NIBjUsd1fidj0iinH5riZfUODTiFQulzeax7+jHZVyxf38U3xLdr+U7u43H59KegK95Jvwvyqn3IgxLyUG2Y4QgkCv1BTD+IvCMPMg0lVYRBnSIQkaJEixFLIy4lCCT2hm0sEAgEJTDrqb4gJ2JYozSUKVehUpXqbNrZ+Zhejb+5rHrGzccLQhJSMu48ePLiza/KzQnMCEKwEKFJYYGyNyK1ltJU/J6WmFxUqLsInXSs34s4AJnTNP9JV81ZW08bwoxwjMoGg+1gPPxwAMeZkBEE+Vsupsxo9cWS5ivnaSUpFJQ1TEbteyKjMALlSQh6RK3gCCQK3eQU4jbEC7uq/AyCDHuCBQTscMbVuwMUBBTDQ9yQFM2wyRnyESxKsqJGU3RiEDPXL9DZ5F4IpAuSYCFCk8IGZVMFCdOkLuE1IKVFlGgxYmnENeNBCVSJknJEj+SMFEmVJr3qmDKIzGlkSbbd9HLk1fx+3e+VCpmKohglyUBVqky5CpWqVKcaUG3UlfpokMbaxNAsLVq1aU9GIlOfvJlMppjJZDJbRjtaNWk/rzWoMIIaNWesaut03yMO2PxII6MBE91qfoDyxCSwgCOQKHST6QVuDh5hFXlptrgMjyBKsqIaL17GcdkA58A8gCY/32PLbwknCQBANmtCw6NoBrVIqzbtOUsWU405lCwZ1tDx5p1o7TEdJBgSGL777BEjo94ao9ojtK9bv5/hAM8Ra46SjgmdeLzNDMhiUHnu7QmDDBZ+IUFiTcJoHclIkSpN+mZGcTcH5IcBpcqUR0WoVKU66qZ3usegF3mn+bFlriq9BmmnV7Pb7G0RtCasOwKQZEgh486DJy/e/J6Jrz2rvz118Pk8Pp/P5y/9NPJir9gJwylKrUy5CpWqVEfdVFNthrWgVZv2ZISYereBoJdHKeaeg0J7UBeqR8SO1an3pFAMKLwItVSJ++FmniHEsFEQW+pekoM5Hqf50lxBLLv9zCMAZTPQ17n9X5kHFX7c6Q2Jvb+KSIsSLUYsjbhmvJEEWxLHJDXMSK5IkVRp0quOIKOLzGlkSbbd9HLkyVegMBW5UKwkGWwpVaZchUpVqqOmj9p5qlNT3//1xsiARCKRSABABQDAgEAgEF4kcHPA4y/f2m7YGo5AotCVSSIaTeVGFAAlx1RIZRvGc5j0JIeocxzzpKtcaycxI1hSyV+61/GCwuzAMfQMw6LTKd8osFAcrNVDPIeFs6LHFxlNytieDjb8GOQQbhSItj02gIg8OVbUfgF/GtkaCsMMRyBR6D55mcPjLbYkI8J0wJwXf/M1no9djTVdWhpiD4MjkCj0GYY6kY1N5Q4EKgUhWIjQpNCjbKoSCNOiXoZbVF9/zsLdGYGgVbMzwJwz8+mqU2sjY1Brcjl3fG/sfz6q7og2Y34vfpdUhe/CZ2HH8yAA/xQ8D3myAIDNAVsCAJbZnxi2cH5s2cRJwVaOm2WWstPGZxYZA1KIR7mt3AzAmtkFUI5ilDcAm2QwojFXB6r3IsByVq5l+tNabctrF+QrAQ+lkiUWziHGKWc5u1FUdMKMhnxixnAU4lkaAno/nhuScEnHrQ6QEdoR2FIQ4GFnYHkfBgJTwNl42rQH7dV6IBKx4GDIPTSPAtYHcua/UzeP1epZJNatOASqFEQkYCWSjKomcvJ4Q/lYmR6bWiEWWVIFANaITOVw2ZVHzr5MzC/0i/D1kwEWVD/zT9b6DG632iK4UqC7TP2UNbnkEY864XYiKlW+BS3FUKxHDQYo+8B9yz1w4h07Ba4QkkzL0LGJGIrrZ+cNXuB3Pw6cedpAMU6GzRQqDW7ntB+cWisFyo3WCmQjL0MmXoBqNWRFIZI7gDXhtSct8LpBfkHsRQ6XpVfIRvZBU8p85F4hH8EKnxmEYmu+K6cYY3gQe1+/TzJAIRF1cKvNmn2Q0M8aOWsXjT9jvBCr521xqtWVI6apLpehKcxZuW9BWLJ3QGqf9JTiuvvU0wdghw/8IBRIX1VuNQysBqStVNPXZDtL+Nivcwi1PgD/5O0oym2J+78on0rxgA9OCla0gN0JEPHY/YP4nhIawbEJ2HlUnR9DbzfWMPAvxkrtA14x6jrAmYUcgRfRlZnnYxs2y+owLDwkS2Vk3dfjAAUVIJewD06tz+Auw6pIqxTl4dmjoGlYQXDMb31FJPs+67j9RNgsHYgwwOcYtufK6VhCLMuc4NFTbv9pEQjFNjNr0LWAJB3XGHm4x7nBRfXmHQhQ0bzqmOtVTnyeS6x1HbC/arj/Xe/7qMOl7M0eUnDPghyisF8qIoFbhfEgqyD4o3o2K5RLrMJYCaC5grHwupDNsVoXFI3+9WYPa1lwvOp91fvanGhomJip97upNHmOH+yb1+hLIpddr21RiA13Jib79k6pTB3dFAo714pQ1yRZbTXMydA7mQE9RFGhL/OxrHjdRno0Xdf9yEe0nXFfOerzY+DO3fiBWBFMAmqFbOegkAqXTVo5fS66yOIVlLCSdcp68ue4yJelhUPtU6Vm2jnNAPqwWaNnnv1w7JP6xQZawSIPlOFMEUGuzPCBb2dJUygY6Q9wr6JUjJr6NZcbEYwL/cxZfec82LOsMK49xX628P8Nq3TDEcIAPZwwhLw58hPKk5JSoDBJgiTLEStPA50m7SqYmNSx6FNv0iSjU04zmTbNYs4CqzfJflmC/YZJgNBwDAaBi8eBHT5HAk4IQkKuRER2ceHCjStXYhJeMN68Efz4wfjzJxEggJScnEygUAwlJXdh1JyEC+chggYpThxKvHh2EiRyliSJp2TpKDo6W2TIsFWmTF6y5EDy5EMKFPBWqBBfkRICBlVo1apRatSyU6fOVvXq+WjQwFeTJn6ateMwMfFn0cFep04BunTZols3pEcPvl69kD59+CZN2uaUU4ROO41r2jSuOfN2WrBA6E0yZMkM4bw5hwsWnC5acrhkxemyNZsrNtyu2vK4ZsdtzZ7HOswGEwuhkRiM7Tg4EC4enB1niJAQboudEBGRHVyIIRLecD58IX784Pz5QwIE2ElOTqQRXHAQ16U4hC7ggCEAg0YABwoKDruEl6+GqbFNPLWGAxDA2+2mUSNOiBg7t0SkS31oxeMkjrFn2IIjJzjMSUhOukkoEJSijyGgx2Ia/9Zc03b+n8+gqkgS28s756cjUp3zwTr+RPe6SerlUdT5aeuge/AHgBz9F4inwE8q+H4OvIW39FbeWry/BqMvv/KSupi9HkrVefG5Z4IavfjyWy+p4sVXyheVT5nxIq/zbvbjoqXX1Ze0hj0AYFMQZs2BkAgFIGFwxHYNB9Xdamwr3s7/CIfgYZifhT9ga10ywtzdZY/hcneTYa/kiz8KCBorhFZ4g1lXBGGWKA752ElId9aLK4SFNdV329bG7RIIKU4GEvhjr8LU1wjA23s9BmgbGjQ97oUKwqiOvyPZERICKIzA6WTpWQwV6oJle3VTlj5TyPKOjm4NbvOg/T9GVfxNA9hFhQDSw/fRjpCF2W8OA68iCyT+f2H/DG8C6e+m1x/II879NA35rwAA68QWAYglTTAsYACEqeN+6my3wYoA4F+jNoWcNS8OiajQQP7yMFawIjQRgSUMLI0Q7n1RAX6RF8YKIIJUoZ3ygC+Q2QosCktO5luMHGUaE3eLe8Vj0hqpWApIEalOapG6rdW+7qRAFcCeYikA4BPTsLh/wUWfObx9R6U8qfA4SKn5g7YCXASQCQBYN3kA//1N1f/k6S/0Y/1oBr74GXxx+2Nf0u+/7gvqC/Lzz0Ef9ORBqjn1PgLoZQ8b+1Z0c8gN/l/2DWfNmfKpX1037z2Lxn3ltBXTbE5Z8IPvfG/GJoSDy46AMxY2DgEhETEJGSUMToWgpkcxMDJ724R3/eH18SCCS4IkyXQyZMqSr0ChIsUMatSp16BJMyMTM4tOb/nNW37yvv/52Oc+8YXf/Tsu3LLMeT9bdXt2cNevXvLyaPjFDU+NgRcNuOB1r3nDLBIGRyNQGDxOyjmoVIOLh6+UGAwAkoP8wJOOhhbJBNUvhpUNLZqDU6J0KVKlybObXg6tEhVKlalS7luV2rVo1caqVgdvnaMQCcuWXHHV5ci4WUQmUmU0MMAmtgQsBSztF3RbBBewFIAw5l41ijcbBmQp6y3AENt82dAkwjxnz7P78VUUDB/VmuAd+x56cP++vXvGRkeGh1YsX7Z0yejI8OKbFy1cMDQ4MH/e3Dmz+/t6e7q7Ojva23KtLdlMOpVsbmrcgWA07PcefeThh7qddqvZuP+udG21lsTAP+fz6dr1mop+0LJ1TEggS6CuvC5oyAiub013YPMLbYzTbODATX5YEiYycpU5IVcPfJDlJ+oOudsvLOUyCHA0epShRd4duH4KgEpMEOWZGb5EFcMjVJkBUBUBRZkA2ZKNRsAN1+10xK8ti5Lvu9CQOcZwxobtVJYSNYSFI3/ezwiLJdQElVAVqbFfVj7GFYKUwiL2M9cSdgNm8LHcsAIlv3t+pTzikgjS8LhnpRA4yDpbO7BcekhLIRtyrso3hOFbiU29FgmKY5J82xRd8qylsFWkEH/ban8lnDv3Zy5e4DVGiZ3OQRDBD464XnWTmoFDR52uXJkzlfyCRN0jFULeqZVLNQEXmVElDotZNOfizQ4RLbi0K3VfQiuOKOESMFTv13Tvi6CVyU7WxMmKW3UbtDmnI17yX3HcnwjgofoU4maSUlLnIPod0w8yv66oWIMdSiGPUv2tgmA4Eda10FrntQm/elthfwuhAHWKs+Js/3zqtTxSfcZdWvMBkEko2OWd5h8Vxkl1wQ0tWqfXxjnbXTwDw5omWZ5qdvHIDbKYxyg970pJvzAz8n35OLRkfSbdDTpZgNM9lQJm2iU3/H0ngxvH29dAeY2QDQvxZ4zShpQbhAjBmwVbI7F7IvJ7kiN1FJGWNuAn0zMEyRl0h2N17JCKigCPKfy9nHNOtzwnIzwmguvZZ/TMBcQlHAfw5ExHDsXGuFuSeo3yCJnZRb3W7Uf3aNZ73EYK7kOSlVJswYYyJCtcGM1Grj98cnHhkFmu7PdOwn1WzR0hxTnRU8aBJmxqH9wQIIc/fUWBHj8qrISjbO2hPW7lRIaoDJpKp6WrVHb0ol5LnKLyFj2THgmy96ApZ6/lq1iNPY8vwDKz5gs+E/CZICPwcacqcnRir1RzPsnCgQVag5UMrKGJ6y4+yPYZI7yjKTJKSUN4oUT7GTdixO0DkfcTUdmkaBzqPbi5SiKfJaJDDKY1Zl12u1RAOkwSp7zHn6QkaipNLr6E0pHgmIQ0O3xBnWSyY20cuH2zWYxNQ3w2mFwP8xk5cKeDsdUakKlLHNJG8s5xzyhNttEBiRDNQscCl2v2ZAn1CitxMEjLMwG9p1dDtdqiwJTNCfLSqRS0AtVuqQPIsQCRZIm8x66INwpTCMJC2vYHrNMWMw5TxJ4Vi4HgRRokigFKPTpn45JYgxqh0boqguHP6IgkQTKVPp9BmCtySOJd6byE0lQ1dnktlciGUmpQO9tBn6ABRBvYbh/oXapnCC75GGIxl8W+ZZOjoHUhu7NC25UJoLdovC1VoAi2FAXp+M4N1DyAzUUjeSv5wG7Zbf9EcT6jMbsJ1BpY/Jtol7N0jpQhgLhcYfYeUZ2BXqGUH85Q8RRtz2fQdnznllB18dCDM3BM0RVmLXGPFVRjEdQhLP9DiJvpNzoUAveg9ZALfIjTVb4et5vPM9AUVC11JYBMyEpJoLawHVs3A0CND0cg2/xnXJN+IJW4AKf1GSUa3VBcuMrXlUYTugZoOzPfWKRuc8qYMmlOMKwl7x0kKtswlf2ZRsrj1hg2yzqBaPlAaMlkRC7zG4WaHc8ABrly0mDVgPhKg60KIGsln1FFQGoBHY1TGv9KgJp3Voo3OBIuA485orh0c0NG2LX6ySA9sGcBan2QhobgniJ6FetuKSHXLp5ecN1Fi1o3MgMmKdw0IrFhj81KiULDvRJDI5KSUlKAFIKxVzCugUxXpGgZfAgPEE90NezKzpxvHbPTVq2dOaq842EN9uyTzK2FYt+WdQZDe4UbeB18swvlQUCiFrbL+yC7WqlzZOUb2VpYQZu1mPUkT2Xy726Nj0gpUmoEWIer/FJkgkgbAAL4Dh/0lo5JDBMC7kg0DtzPogF0K7LWLXR06PEN0ooHH1lueJkQDPIWU6MZO6La2sgunF508C2lYGZPlcx2XJ1tuXFbre51CIUWShb4foj6LgGcmlg+UCiSixcH9rJ6TTJdAC24ApGbsa5ha/NIr+h9IeaXICiZu8C4JLzWT7gKYT7639+AAjLlppdXALbmt/zcdZ8nfI/swXNbZdw9mR1SO7IfgZKC/4MCwpCw5sD1j40wIubdtpBNcsVHmuUPvhaksxM9F8BLksQ36M/BOJAQt8TBBSUbSojwK32EYbeQrzuYGa9nWFhOKTlQBw9CFj9jTG4J3NgDveuAg1UOhb4KAp9pHgaMJKb0SloL7DodHsLjptXhkvOaaoe0CHjDU6tkKCB42gZJzRDcPo2xNeJrZDxcXeV3V28Jwk0HJhU08LtGDQMqKOP3TGoAI6YnbEkRwDRk3O4ki61InqT812xKbiioBMGE5DLpMKriOpovFLtbIe9xqMq/STYsy0ZQF5yaZavp/a+H7ubDnpSsiBwJFagBMi7wVWc7UHqlmw3fcLvvmnVRSFYRQEngxnHvux8Q1CV7AIAuAIDdAH1A+Lwg+gHgP4C9QLgBANaevOTwoqMHUoNgmVmEyDI7LrxLHDXXEk7ZAMI9zObGyCGDbk6G5UgnTpPc3+jZQMjYGUyuNXg+M/TibI2cBxgJwkb0bgi4fZf5ABCWT7BDSM8YeS/J8no4IsxQYk51wZKm44Cjw6pTfQjXjULv9ejPOVKJ3PhS2iIfulAK6sMLuzY5On/bHzhZDN2GaPh466ZLUUZEmWJ3XRG+8A+v5YOOlFIMRFB4+LjWyuSuSOep3qrPWrNBoRvGDWbgqcu9715kXz2BEMFUZXfhvL9UD/Oum64wz81IksSXvZuIOqcYRCpt+DUigsuE3Q7bvg8z9qEzf8mfeHFn55sJRUuLYxQ3fMHZuO7vhk8M091QxLBZ1Se2iQNV0djEuCFTbnyjeaqNWtDUObqJeJsBunIQ7PKWqvHPPFxEXTMKRjfADc+M9b75WitKeN2TTwPMb0PA9q2FUUGSaLhsljDAUAMMLdKYQHVjcwpgYKowaUQC16rrhxBDRU/aZgbEoUs+A10TxksnkSLjZayyRa+PhKKNjBT8LoSqrqBGiqGSRiF5TBC7h53CioeF4WFMV1zK5jDPobjHgP5a9sBDD1iO84WcL94Co5EdcIkHlNfJtfmmAEt+Ap1Jatw7v5LxbSU3meKCWs13codQUYlJVv+8tmurAGoE1npMhZexTLoPL0kg7Uey2MLEuvM0y45KlwGlWxAhnHfNjZaWNcM6rJbMimi0+szv9BBqOutfPVEjHjIbNd5paaNmbH3FLJvi1tlOxNsotdiOwT9nePO7+eSGFFTz0Tad9YdmA/pJ8qFa5gsfaoisw61Ant8Ovj+242WK3RVr+cyOCGTXTZ7Zq3yHJQLR+qfuSbgPl4UoUnnFMqluH9AP8RiO1kalsxeeHXnkuNIe9+606zih1s8OK86ekMr6qsBs8ruUq6xFH0gUfVsOYan3WStARf7F50v6wduKb0Yv2bsp2vCwSqFaMArrILvYV0qx/Ts6cD9/R0vmb7q+Uj4QJDHfLwqa1L2YSaKe6ocWXT6Eh+VwuaRyHspLtiUMefpJRUYIvdOp5YF+/MhgBB2pfwGjkKccf+wSI+BVzOXLGg1cxW4DVf9HOaaHiSs0/R3dfSi8hdFxYh7MwlF/jyhwDagF/Ce2z0hwwF4X5JbDsFJuAwM0NqtjsGMDCV6GK19hjUADbRN7yGdhOh8uwHL30Gzqylmcv7aIg7QolzPnLwrbjcNv36XKaFZz4i8PVHheQ3oQpaqLJDI3SDkEXLHMCJTZaPKyfQTUWr86qHcW6ZTe5oM7vatNDXkFlckUP6GSUQhVWitF2W719fPOZHe7g8Wr7Fm24y8hHkTmRgV7vjPRXPq4dD80a0aZg43fBV5tWvvI6ABYOgfGuti8i/kqxQuLEGoG1o5fTmm6nsWZrdluE2br0LgkdSh7F1MS5pD0DZDw8UitWKFmusx2H21xD/bm7xxs8OH1liYJSVw4YujwhxS30Bw25B7aCbGtgHZULIm6ueatxeyprVkq+lFnBmRVAd2oUT5CV6PLkXX4kaKbdgTmFhjeso/KjC8ImlgbLyrGK38S7Jjqt1E5aCMiXowa+UPgy3bJ56doHIgxPPgbwJrdWtlOGJ7MCN+05i6V7UmjijhSmI/eodXjI2WxQHjamfVOSPynWDt58boy8yvLN4q93JhpL5pWBnRG6laa1pEV5m/uIApRN7RXnTjIrmnA2sHkZpGcG6ys6ZeWXz6d8nTTftZhQObaBXmLVMVqZkgNDFgDi6XlTYm9cU2WYjpzSSFASBtqqsSoliUPKUfbAD1+pibWZ5yaYzi/fmWsHRXicj/9Np0ZzfiZtJ3111edgfAtX8W+mmv251dfEwFAtqG8tz2yDzLiDtvaberW+JqNbhCxtSgrM6q4slTJS41xaCpBGhppDrriQQWV7Ngdj4F6hSUjmoLSBstZTdvdfhAYnrBjUizm+gwVu8zqhsWb3x/F+5XEUDUTQXQCxwdHxy5vi6YHns28UiJh0n7xIWC35l2sGVQqSLHf1CN7gCQKkeGgR8aTWqW/Blf5KCAQgTmuLCxMzRjjLIsR4Qg3Vjo6+avXtmsCJoZMOkcbzF1KOHGD7ZGyklcWMxseiDsSmUwCSRbxM+OMVYgxKgwvR5ZNMCR41OQuHszuQ1+a7+uf3gMeP3GRGXHM0GOdbGhff7zIaREB+OxvTh098Bs3f/DAY3poDyrQUu6TEHyUh5dtcic+OChQFjeF+RDz4tvqdD9FtOCiA2kfIHvek2PLRftAO8dxYu4e0Liz7WByy+wDxX6ZGurZabruzGzWoO+mC+ZFknGsKTuLzNHCJC5H8gUzFs53WrBVMgK3IlOBFL/BEQWm9jTmcR8UEk0LJ/QEMDfgPHTZCqqWF/oKeev4UR4qGVUS5zxB0NfyrQdnT8wfdEaLtpcj3Jh4Fa/GT6Yc5ZuAi2Djuwc+Ib+nOI7w6MaqO+CvKa0jzaef4DqQoeUIAkdkm5u5nPO7ZmwTzAA5VUfxouS2GFAIMAhA1S+fYYVIpPcXiFLFCjmgeOEwAUdDIHw60PgpJND2OFRFbwIMEaxhpKWW72X7lmw8OYWOFw2dZsn2dNv8Jp+fFI4ZhmT9wZcZa9gSuABTru8hw5k0meCj7Sse9dKggJPRRgUseUVHak+xx8MQ1FGDhMqaulmnPLnAtDYACS9OW6Jexe1F+4w9vJkz5Ux+qgW85jkxwzw5wWAW5mHZyfzORbNMzCOc5jdVphZsUpse+pGgRpxmZ4+Z89i9pO3xxhg5Rh+/4bUCjEph60OP1/GWZrWori7aZWuQi+LZJwYp0bNMefZhwx499in6FJcAK4DmAGTIiFWJxDTzwlHfzfzavQYd4yYMyDSYPCLNmJCzuFFbpo5EuiiQZJmQlrIzkExBGmKp2LTjikiPsKfPvF2JdD4v1E/s2e26sxgCruCB6MyZLbsIP2Td9unM7rsstP2H6FBgUlOB60C/zY4q3Qy0prncAS7JZM812yYdJZL44gIDNu462YRaTzy5HKq7LjxjFOcbxaXZpB0rbZbUPTOb/7qxkfTPOgZ/dKKRgGz7bfIsoQ0Dxv3z983LN4YovoabmNZ2njOKHnZ9sRdTGjJqxIOYMidnJwRZDpkT22ppkdIUNXFSBhXKHGuBh+hl3+j5bSr2XMO7SB3VKaX2BjrOMm14q+RsOGBHswYFNr+kYLzqAM03njB99GjqjkaDxMfOaNrW6E9VMlBilTVxcWRiAJev/P+T4a4NbYqEskdsS4a4rVKLKQJNBJQFbSrfjtBmMoEUKSvjfAlAlYTjS0Rh1NHUtMWHW4Fn30YU0I4I9APU9rwtuN+benlSctiETRYm4g4j7t4AJJGoceokORgQM8z0fH9NLLaSQRE8WcC4FfkasCbZhX6k4sSbGXNNLdIvmQHOBGoGV4tgNK0s93xfAvri7emMAhaUgcGIyyffeXSpbHg9/d8m95u8/t+Tu7/t+7a4Tx/so/e5NPwzspvKRrNTj1zp/k/b/zX2oE///2SWe+NqvgmRdU0aKjwRIv16pE5FUenzb3o75AjgHEOkIF9+GXI9fENYKH9cRkPyqQ1GhPXS+LLGnmX2eG59k5TZuyrFXM9DmT7Kl4LmmRzYYLi5R2fDksKIbfC5rkxgADb6R2uTfeo1/JaJP4Z2tQbv75ibuG9vQa+oM+XauiKaHZs91rIyQW+rBmIogv4YEzh319fdt6egr865dWV564rJ+JSK+G7iU+Iebj/eLxfI9hFXOvExcVdNC95Sxx0p9I/aUz2aVYxXvaq5a9jim72mScbsAz2La0OObr0vCQ9YHdhApLlXa/WMuow+c/+qVv0DyqMpXLJmfELX8EaDbu1xv+EWtJBvooT0a+kW2Olm42Y3AkRmDQYX6PrjZWv92pJkUBNiX6go2dLhe8YjEQO1wyqcv/P2j2ui5H2PyytOd3JOAM7u1E22/FqnfURrdvb04i7oX4NDryfJLRouDI7amrvVq9w+7ap014jFFxqxN/eqV7r82amac7125UCwuUdX6+ilAilkvsWuGAhVqo2O+VOK+dWCfQcZ7SqC+Oq9/rrMPIMzuMSa7KG2FjNgiLck3/+o5VtDN1FxDjRpsixM3jZwywSkCsIrxBGlmexKOuyXSqwX1IwWjKnUaNSrxv7mzqNuTlUUVZq03cla+w/LdBO6W85sUbtIKIYVKL6H7HhWUrOr4CFqZPDxm+/Wh5RPHqX4LRNyIgjPF0eUlDITtHOeqrbun/VTifUKwWihmIpAo14N/p/gSqzg7luj0r7WKKN6OCPxl4XLB1BbwKEGvYwqyzUbO7nNqvrHm7tofqBM0dLndquvdELB8mB5n1zPWOja5JAqSEQrXdCH3PDewn2h+woJa/WSwsYhK9MjWsl067ot3AFDslXn87dShiRnvvma6BOv8nQOmHUQTRwvXW9/D6rQcS02Xj33DbI/vz+fXIbuSpVvVqvH1XfNvXuumhg3Vmy+rQhyjV9yXnRa2b2lLda/jH8bbaUt7N6a4PilTZc3mbljJboyzovcou8uz/uPINDz884ROj6wW210tyO0orFUoPXXNQbk9ZJXGVkroG6ZMy9XUPLa0z6rSgqlgXKlbVBbq40qcX93/t0PcZvskVJltM1OybhvKkytKOYM/uV0sVgTUeIBFWFg2uUO0DfzF9bWBXtjDjvSIHlV282knBlL/b/9Njq4wM+MBgtnEReD5lzWYDS2Gq0v/0Cbm6Ra13wH5A/rktyfLe3Y2s8q9rxb/KurGIjmHHpQ/sa9F+3G1jRlNmYoQw5X08X2fvrTPmKSZDxdjMvUpLJHpDkdBbcxwRT6BxGCBsQx1KrtSTmseACZBx2wkV3jfLTY0IJ6gki7KeQcXugL+ubQj5XPbtDozBmzoctRa+zN2kyQuwYbKX3ncoO0WlkQsI/OCXrcfb7PGHJfyf4TPv8OVi2tsJybYzcbMrgrBOXGJPu/OhmBEJUfjgniGC6J7wgCuGC8xyVRFNkUnd5AVqH3LHAy81wk0uRyJWGdb8j72IC0lc7Nb2sgfM26eUO2Yfbw+1mKSmX0JlPWZGw1UYb6DGkyZSlDesNt1bUXl0Z5o6Efe50AWmxsQd1BpMMYdA4v9PuDQwHXiH96Cb5sMefSBoMhZ8SaM/q/9C6bLC5NGY0pKghZO/32qT0VUAYqHWDGqVaJh8TVH97N0Rnikapdyl2nBJIZVBqjw1CrjgLa6WAzZnB3eYEhosrL5AYIZ2a2cxrnbL/WRiURfdi04Mxs26TsG1OlYv/PH4cAhTogJ+mauEIlie0IArJLJNDmbHMoE0qr/6iLnCSj14d8NH5qaVW9QRAtIou0y7NktuxEXOLUGc6k22D9/Tc2s/jfnRAhJIShjAu+6W214D1QMfEBe8ngI+QkecOmNH/7+SmdMPGdbiE0yatgv7NvGr8KBbCyIAl02locdEe62uvca7us2dcuyfK5yCL1svJed62zLrwS8nR7ndih2RWNBvhSt7opW4s3KGv9J4I4n8fSKCPuXqNAeaNRUCQvNmaVTBBuNxjhNncwixoMGdRzrm8zGuD2zSnzZ0YbujJWkylrM/TYd9YdEoymjN3Ybb3rVrbwXBzpoPWJvB3Uec8715+5sbXCKZNpkCK42Dfkc42Ewq7RRX6fPo25ouf5idGWet88p2tkWqKwhFgJWHMtRrM5Z5y1/67T3CRR61sxX4zUu6MpFDdnrIbuWgfVzanf2FtJKcsn/6rMrSnKaEza0+c+HCpm+rz/ecgTRN+//bVWYwp3haGc3m9dMjtQhxN+2CGIoSpJfHsQwgXjvaRlP3tHCAK0+dO82phQGjeYc9Z9uO4unaw0U+uwpNSOqLRNbdX0NDusmA8OVT0nkDV9JVAF4AFRnM8tNjThtSFZTm9A2l2BNKa35qn2EydIT2J0Lo77oTnQkzad/2sxEUSK/xpArbrulB1gJj35fVGW20MWaVY9WuRm3VIxrebf4tp+5ZKOx5shPVNnJIEuP8cW8YscSh3papJS9rR88PDOLLEGOjcXEb+5a/+lZsl/hG9OgvubvCd/cX2dThVKKA2V6gr5JxwI8ZxACFop9WuuavNt2lQzaaLqFGqvGhTSgkuR8ob+sBYOe/Vdou9FFM956rhQ8MOYeFNAGXiGfGZUObpMmOVLviT5/mM4CbfTrS48jti9f/nJCdcx6S2zNPnJ/LxHtNjrqatfKDKS5M1vZ1Cvff7652SIVp+eQboAvqAMGV6Pr534dPaNps9U3ic9TxKVtn+8SAMzHtlYvvzhry3vF75XYHnoq2XLHv7K/G7Be4U1g4f/WVW/RiHxC70/z6COfv7a5zrh/pz/JL1K8waraObt1lf65A9Cc1+ZI3+U7wGmVYTJoh6Skj1g15cc2S55d8/LwuLYPOAeEIAIBM4gL7oWq2L/yTcOrPLe5YLU8M7O7ts+fBsmVvJ9cNVUEXnq6CnSgDsrEPWRRsDZMJsn++aFW6KYhrGU52oS5Rga5vmVFQuVC8sheYVZFjAZ1Fvj9QnHH9LXeKy+9icTEyy6i5Wzehuh++q71xx7FlHtXMSEJ6ZhheSQ5D5z/UUVi5SLXIlduOy+xEfMC5D0sQzpriXU9Ran/TOJqkEtWHe2zKNyeiJ+5o7i0VVY26zpXwClxcfSZD9C751/pcyYMvC14zLJVexURh/X4nVqUpUIXLdrsAupVtVtfuwZr9gLMPIiRMsVjq9gaJzGrVJCScemwYjfPxABnlTqQFQdjI5HNoe1C5O01ZKigYWBLYBdLNYk/ZdexRoV4SB2fLw1c0XCIvmzq0qryFKBSjiTkfoYZvTo7wsrAMHZfzRA59YjBZW6P10+vspej+EeBZrZ8ued0856ysC5BDfw+1cuEoporaZUl9YVGnLsjRBZExPNJgKB1sZmHl6TaAzY8G1eGWFNG6KCc+P1Io0tq9LHKYXUfZw/f8WRNN73Bfh5kkgeqf8ZWS2Yvks3Ej7pfqi71m5oJMgGI6VN1OF6Mo2/r4lublATRt6pBkBN95ntXYzH2T/PzMV+Yei585xuTT1YS/82V7enNVZra3VS6OGBgC+ysIV+Y3eKXr3AE/AO0s75l9YY0pSLGqlUBkioDR/xVDqt57/A3ak+1TduLuG9aWfSAxqXb47RljWq8YCbDAm3YBAGO6+HOQp5mHMdpjEYu1N4D6NXBPgItolhA+omhcmnRdBRNwsgmuUmf+8yFI2IEHlYbG1ZMQzB0LDkNwHkE7TW4fzu3C0xhzV3b2l61ZAn6BmSKeFaKSMIGKlkeA9x64q9+XNdvn5omY2Wrwz19dcy/tmMfw603OKUrwj1zq5V93Ak86yZRqPFlrRYcqI5pPG8jz3TbDTVWC2tv+8qFqsII7GhZys++T1LXTP3y4/zyLcabT7N7dAE3dTtibjMozykVoKeAGY2xqG6s2KIe7RJag3kTOoMZcD8bnVEJqYF4VrHa6L7iTJpkbMXc0TqOGzKnVGaDU2I1oWpzUwf5ANVYM+gmyE07gRMMh0WIsZyUUmhhunXWZMm5f+/Hbvs08mDKrOrca5asG5iDj7aJbY40XnOsEZcUqwbDv/lfrDbUdWpyXqHatcxbXTTTgbeJ78eXF5n3zyLZPFvrODgnhOBp/vHTaWLWhH6Tdn83fR7stEy/X5v7srQK1XXvF2NaYPRNqRqDBi40f/n6xQl+L5Q7YZ+43pkEN9TzACYmoGucTxSiOctYoA3JhBZyKXVwjucvBo5GHRq1ciKOL/sugT4CGhm+gw7K8EKxzvSvP4xB9YJmWU7Jy8+IpU6DEA1/64RPc0INT63SyMZGwPv38ePs64C7FcLaxu0qc6q6t0Q6VECcELJcKVc2guCII2qlZ9+u/nZ1wclGCNokwDHxr4eRqSHvXzu1OyfpH//z79hBsyzT299bVU4dhl1iYcR5EmvBNNElNI1Aloq1zEUJlF6RNLN0wD88Lfv7p0+Cb4ObJeq2XNWw1u9oAoNIp/mJXwpK/zmh935PgQPZRaNRNJNPpUfvOfeONldhFAo2gqAW8VCQdlWF273DZD6aZNyVm6O7FlfDaryirvE8mfQ3y5LpHfRHAC4eJdE8uvMrTXaGqZDJOrU82saFwjEXfDpjzglU4g/dQM4J6a04jz/1ULcj+Tf/NFTiNWXyuv9HUAw3AveBSMH/CDuyzSHR9MLfQ+BW8sEQtE2EFgmFAqJpdXfh/Sy83WOeye5LFiHgKEpJ3hl/7WBb4F1rl5OWwXIPjKZBx1xoXC189wdvx/izuFdXjqCPI1PVF8COK96j4dMdjkBdKritSHU7ngJ3d/3f7z/J1k8EzT3zxSNBaph+b6y1TW0rFqMKodc+1S1FH0yLqDCAvDpvLg/bUEqtfFfp6pxptlL+KCDTsB11x2Jl4o4L1yvKcm9UuMVYMcv6ZQcku9WOuuOskurb+4cPpVPnt/14ZsbSCdOBeUY5gO3AUe60SLvw+BSsapayreEJ0psZf/3WhOfFHzo7oN+zzzv/3l8jMVprsy8wElWZSqO6IRMduXkT49IpWoKqC6+q0GvcQk1HsalkTwxdsN76vhHrIvAP2YRXZLiNL8rHsXfLJlS3MWwtzHcvDcg3+fmbm9T9v5bH39c3Dj+zLjl2fES16VuvLuooJDX08Pj9CzmcW/u5fB6u4tchxuxRvRzyxVt8bJoVbOumRUtYxrxxnDMw2EzvNx353TnyO96dD3sW/8l+5zWbJ3sKV382XLyyw3KW3Rf4PovPk23MqRcovtyvXyn5iNc+9Gni8DCyWsC9ikjHNTeSzMffFNf7cwcCvEefNZLe8glhmFG4Pib4jtNCREKubnzJV41ummD/8FMWz+FvtGBd3C0pvJd04czRTWa+5hxEZdA8xfFc5rjIuxdA+x4z7Lcy8/2CA6pDgGH8EPlnprDqsOzvIcb8UZFXq5mN1wd5SLjn4+bPxsvcaqINURRo/zW2Ta9pXjdv9f3FkuNWKzozwqgqrxSUXameQaXpSyMYWW6l7BYoZLFneH7r0whm6oCKm7MiGFGafH6f27sKWaXpeUl3Rj1AoWVNGOGFwxYd0lJQLIn/rqxtTOmSsJd3B51hBmzpRoP2VbIVhR9mrRLV9hX3NtoTTFjETWnB+nCk7lOU2vs9SLXZeIikTqfaJaevwJFxblDqvd3vr9DdW7/+6JFAPr/v07r2Q6jQfTQe6LzWPPBjg+ud/4QhHwdNvUfdKPstmxZtiqry7Kyga8YxysobV9Gqttj4CtgtbOGvivrqM7oM6yOslt5ZZh/ksqqhwfABrU9JEtr3KbFfRFP4c2Sm4P57fSuqWVR7N/XRS5ucGnprx5TvQCe/8UoReTqHMjLD8Yr/uaG5Hsnux6RAY92ebxPeL3TzRKJWe73Dvs9HY8CwO4Or3vY62mnpebpbs8dms8UsXEYnoCccgVEj8PQV5CrBKrULIIKlu46e2cByIOW6yZbCrZh/T91Q766QdTqcJWbOio6X0J+1F9d3IGoO3QkB1UhIrLNtJT1/df/6td9P/n906+XFckpBwPmOoTO6HU+XGcIjHwOyLRDHqWnEC0w+ufJ1JKggpEwcjURjuEafdb0yf9LIloUXMCDwL8VLnFYC8TU7qVV+irRry/xWS+NLd01RyBCUTGv92b5XV1JZP5/NTvgHUd1R7fD24WfDiCpM23m13NxJmKx9ukrrlhF7zC6Zrt8+1rfte24Ve4i9Ha0aNUJ+xXLB/WfZfErypctX7HiHz9l5NLmBJ7ATHE8fvIwdjvGd3+CYAjaTkkl3/z3wBVj8vMmzvDAVbasAgKG1OfAjImJ2WEPZsFM2IZb5LdsSL+7BMz5wrvN6RqxSFTD/+W7AiD/TvOIWJr9k8t55Xh+1aX2U6qnlxMzG2aQcLvzGXaft0oOcFWvEV2ZqQrBtDUO4DLKvD8fJiUvP+fthAfkigGQilNAjtBUYqX4/6eFks+uC0XHzqdKW07yNkJTznu2+/RG6DHgelabm3z9bUd5Xzq42tjZY9pSXxksd/7mlstmHvG+O6XUe2IBMzlSz8VxT8UFkh2eQyJ+3tf/G2JCleHsbzP90BbRnCau9Amuc6ZPGCRXpHPDlNc9SmYz1PKQn1yebh2hvMpQtfbIwrpqNLTG1Nll2hxvsG3qaV9Lbaw5+dbGavQpN1sHOyu2wJLf5VK+UOnpHT2ooxv4qModVWgJH7BNgZHeOvtfd/stKINrcnVSzNxCupPQkAP34ysTnQNmt7VbZa+3UNpYgj5ZHjBskKK0QQttzxdXXpx8dcODrtJvB3YtX39G6f1TZY/bVfZE/oiJ7sUDLlt9t/KZDc15r/dkeuMb4uCuV49ZEQykn2RYMtm9RQN/l3WGABXkFL6IoHf8n6dvAkhGLyh7begvhc4USCoIcPneqaeXXvggwAedwt2wI645DXnK121HhYByjVK06NK4/48aLvoXUy2t4Spe/kV2z/TYWqqj3bA2GjGs7Wjbo7HYOmrWoCUSPbN2uCVRsW+ESDXrRvx+ciSZGtX4fb5RKqUd9nntVBp+9Ix0YnEJbUUaKWVNHcXUK8y1nZR7io9DLPyfPSyXTCVx174nqll49okb3awILKhuPaLWPXXNuzu92uHEOaJ4+ej5va+NqF5DxmQ0KHtyxjnj06p5B9a94f3ap6o/MVUavf0zWPJA7hJ8KYec5eWTAvhM6kVJ8sUziIDMvKXUb5B+JJW5t9JRmfQoTh+tZn14oop1tLGteGZ7U9O0mc5lydWbAzYXbdx2p+pO/C8zSQVGjO/B3tlD7O883Fk2NqVWHpppWpnEk1n/mpZoV6aJdJHmO7O9QVJSv0hta7CU4Jtycbgt/mlDrf4UZ8EPgKUg/CcI/gGDJfWN7Eke+wSb9TuXN1km3CBeC7I5nt4CoDAlmi4Q1DN8QXdvAVg4207x9ffBIrio/rs/K1xaV6Rs9xs7XzkoSC3jQymBoAnc0fMGpBhhprPetvx9rrdXszme4QKgsJ8YPr0aabunqgAxMQTQDv+NPcwxj2OyM6du/3fnmj/Gv11kPQIBfNBcCwKTw3UgS5wFrAAdRxVwRgW8qQIuh1tHKlOkr9rYy18faowiW2sg67YGL1jJZMJUwocq4TuVyB2/7QKK7XQboPGwBqLWQD7WQL7XQH6zYQ0II37o6+2gaAH7123d37c/PDdcK0IAh/ubEXK3CWwHp2EyPOybH9rYmf0B2PshAPMsSHZmcev4Fsfuxf39xf2zV//7D4sXkbgZhtl8qwYOqIEH1GCf+8EfL9NqM5+GzVf2n2/+MEe0mUetZcBe/SHockYccJ74Brx6dRgAoD04B070qchozYLkWob65a5v8meWJmomAGpwmPIfQBgW5O8WajAHvo1dv/yi48b7bfwTPZ3sxAGv/aeoYQAgvl9KEwDs6R640fv1wbHxS9H+T989rSrNbq3nNL1fHlwA+ERDOIAfh1zkwRVHWguPTmEfWK//3XtN70cezqXbRH//s6D3b3+QszzslNJk77d9GxlsTCHpxzI8u+/T7784QtW8soH3Q+jJBHCR8kr4RyA+f6uDMz4McjYP97Shv9HCnp8Kf3iGUgvbg/dDuNDxSaIAKMT/21cZ8KD8DL3xuThFcW2i4p9V7hXLW0BVH1yHl4t7PL2/lQuouzhX74rwhv0akbKnp897PNO7FHzjoiuWlFNes+P/sBbP/2KnHdz8umvrPZSxFbLiwVxyDUoxpRk3l+/8zMePh5R1GAcA7srV+4/pAmJX25Vsi4gvAwqxWDTaEFJuyDQ2EcnWXqlKopKpuanRADTAhZO07XZbKjkblnWp7R3YaANTPb4pGTdzuUOqdY1Wie8mD3jocT06UywQAUlA20YBoKJlXRAJDMlNkMZ7ySotZEQjQI/EUclWldWOXVRmCleOgrYWVI1BL7mb+72e0dNrsL0C4dZs3oEKhaxuNsnBEbFxMkSER++ZjLZHYhJVV3mxoyVRaUT0qjovregcVdRsXjkmaFFtEeJljeQFVQpmU04QcbCHjAz1iUIawvlOXkO6LR6kXeomXMojZRNV3fqqx37Hh7fUegDVC1+ZqEwlq663zcy93q574+quAr0ttBUqf+JtjFipc0Ba+yl5a8cm7YzNrKNA+IQFO3pf1frVbe1DSphNWRtoHeJNhfsXReexqvsFqSfU756E1iyrsnBZWxpYaGYmIRKvWS7z7Og/7i4gdm4JDaRcmhjrK1M6N/RacmOJhGhl9Y04HKxkjZ/cGvKCnArtduwIdK1IRihWtsvob5HYWVahCL57iZZS9SUq+DTH891uAIjylVenNa1tSiGbHSn2zXlnp8uqd7nqmPmnCwXmx21X8uPHxzgfEItEy59tt9+uv7LXdlPoy5l671l4MAJ1o5WoKIF2F+6XZ1Tt62LN5guxWWWlEtMkxPfdvNxFrYgR121Rl2vasoD8eg63sF4tQ7lQeGxbPeLMCTiqr1wDL+vSJfV2+6MXfW9cEMPK0L/87kEi8Y2rb9VDt+P9GyLv5cBWJ1ou7cKdExWer8jP4wvDSs+z6BuPaGKOL/CmliSa4byiLug+mRBRRfBAN7GSZ02C4XH8epdWr/CB8gbUZUpeSs5xNQDIOYVA1EmIeiKXWKZRA1VGTCTxomOogOjQDcfX+z1rlOyhnUwtEPZiQDSlSQ0XHOV5si9e6Z3q69BntC2+6vPoPvC+4+0VbTt4/1/8wXIxG46mE4wn0Hi3/XAQpiLgAFZg0Lj5KH+1XBrHQnphTZ0v+3OjIp+6b0gs6uoSE7qVwju3teh9J9BOXc/CwDy//aUmFqlFLMmH5lU1R9hRUw4SaI30qFHWAnmmSlqo+atuG4XssS15zf1Ssyl5bZ3b4pFX87ayAcdmcZ+zoehzzoXEdaQSZkooLvmV4Lmzux6vEwW7RVCEtWt3dAUK3fFiZ1adi6VOQXch6mzGzz2hzjfMKQqTjij2u2apjiTPraRGJ77aNjTpcd6gPJBWAP9XtapcWP9x+jL8jdPPza/wqiNufDAw63bXKklrmsAe+QU8JfyfA2vqF+RP3Yn13ehh5+u5HrbMRIYw9PLtoX8wOYG1kXeC4ea9Z02M3aMaunz9cnyavXr7LEQPHq+qphiJHy0JgJgAyszomz3TllYBCdbIvROcUeLgNZLtLOpFprX04WKOgV5Aliw9ex2bM2wfnY+nNvMV/ivu/hOzxFHVblJDWaNJ6SRluVG9sVq0xrVEXTfUKBuMq6gPQXdUs1IyVtSwJWxvhd+inXQ9IC5KhxHLMt4fnJosutYMtqXALBvnQFQBmHOWdlVr+DTPxlIgd2GMq8lhP48RDXOuEQMZi89+YicSktgJILnmLh4Oh0O0eMqzdo9byofwmO37uhPrJIdcL72sE5x8zqioVYmkxVFFa5/blao3AKgh/kEOAmPux5bDNOQq1bIKwUmJhiYHC3CcmZLvkWFVkQ5ZejnE9cB/sCIi4lU0kY6etRUNaXuoQLytJ0Noy2oMCgrLiJCdQR3DBOf+yxUCjvLfQFbEea/Tl72SuNOuplT+nBtaWgrlyzNcROxsbX/TFdJy/2gxPa3oU2GpYbChL2v5H2ayINWNQL/zmKzYqUCsrV2asreXRL7/cl4aT67SMTAxEfJLwhOhNhXOJu/p0wN/vCVMqCzxOjfN5eLRLOCKIc+Mr1xe6fAwbFsW4L4c27m+atoAdATbpl/N3RJgbB0nfM26LfuKkPRsDSEA0VMTjdDXY7J4f78+YF/P4+shV+hclZTGfyPTm90uVKPRcBhutK5CKWYe9pga8cuCqRjhcMo5xNh4QcY6JR3ak5Y41m5SRB4WFFUtsiqAUjUSMBZ67PcMIdBMa2icFJ7U7j1Wsf1OayGcqzEzC3iAWUa5CjWac3iv07CSJRImGFPbid3Or5WCwLf2+4J2LsbU2UFhVSwTrFqDzIc4CmBNjJDWlVbTaDQa4mYkXpdskyJ3dTUeT1xGtlTIJuFMOGnhOlHKkhNEGhJz9Bl+jAlDMCoDQmqZzBWyUVSIPHVc62QDZg9PHNwFZTDEkIklmgQiYLBQkD4HY9VorKtaAoSLKAFpNcZUShmwIO2slRWTNjWmVlB8f4RRvuFexwoqQ1ZkBavjhuJi3godyfDJKwLzAFDvohaWhDRiJ92jTown936tuwTi3JlYlMtwOCyt15vF1aBlAmZA82otOdIGCx0WQJoOx6/3Y1nZoffnlDlo3b/H9r0SIDLmwYOuJc9daf2tWRKALa3DV9pBGLtmbva3pC4aJ60R6XqbGa7R+/eT/d5Qqn+o8odY9WC+puyV01hiCHwco24UpVF1HR0Smv14IcqUsNBjpYraXopBF5Jah6cqOk/JaFXmp8lk0JaMghCkFBvQDPzrFpQuAOIsaY2v92Ywp10gNFEpcrdh7taeMLRtTMkxGyUxSVVgFSmXZaNPsxsY+IZp8JGkxpObAF9Nd0aW0PPwnrr8HjCbBCt7pcrdNy+H28m6Q+pXj48+UMHKC2FNj2Q3ef+3aRqHuRD+mb/5Sefw94MaMLCfGVZZCSf6S4+Je/PhB+SmK1JfODU6E1ZUq5Mt6vWc9zaOU9Vlkgvq5IzheXqLhY3p9dMP75o//cXhLGefHezaK88zJV1f8/55i6r69eQfZXD31l74pObjerPZfRk3c4fx/LUxeYgtbM7uw/1qoe9zbYnp+TyMB7dW09/BdyzKbqteKHksGlyQUFbKxd7NNdxdEkZAABA8ilMPGzvRSgGBEDzYMXnnUFzRTHUSgNZ7VUT6keAe25pqf9QX1f84sWDiI9PHEbU4ZWtLYLPET6V0QNm9el9i0LQ9He94QvClunIEGiRcRmpPmZQpDQnmF6khAAPxvx9/33//98LH/1tSNKIfAMBa+w8Z5AF8PG/9s6In+e5sDgGgYAAAEMC/H8gjt6vr/0a9U77XX0BoKBVCeo7g3YSNt6vVQ6Wd4n/wleq9QlZNZm1Izy/2yucL/AoIRy4DpfuMQ32wJMrP6CLPUDfh6ueBllrhRfAb8IN5W5eSVcapO+raPi+xbzrfXazo7Od8/7LY1Q6g/56l0peZBAqo/r4t4F8y3+hiCGe4nkAj0+XWUgku/mycfV2vxE0ZDvq7T+aUthOUzVf9OJAVWAmAry5vwD4nzSOfeY2dpUtt2+aAfZ6qd0NlLsc4+4k4JWFvf9QTqvtGLeRjZhOC9xZ51cL3sID9Q5UjZdux2wWqkKptFGUILZlHLwrZIT7FUJcipBD8fKE9u+8/4i0X8tvbvOYE3BCPjbHlHjtmItkxvisi2oEufJy0IQYNzD26o8+K0bFsl4vY/uIJQHYoeN8+WQQ6dwJPS1iJwk+z2FS2pye6rc0tbT3B81Lfh2S7hhfUmrFyLq0EomiIb53+YKVe75LMdAwDkJsCc/0SCsTsxU+YWm/KeufK+WjcsF7ZZFzbhTEj3pn5yxUtD5VWDssueCtic/C2MdfI57zI9r2QHuNSfL28Jylz5dk7EnIRP0vtXwxvO2DrMvarxGJEq5XXLL+LF9RxwelIdhNx0bTHtJoRPRKUTinylZIE4E9XnaUTQDgoxB2MApAnSkNK5J7u4SvBtnO/sme/3t00AubJ/MHfR+k8ZEcFygMABNCQfrQ2FIwDtTsB+h8cg8MBCIzDoSYHAJbBtwbE3Xsc692/NODUrjYlGkg7F9JAkU7XIKBYW4MD3p7dz9HMMrsCArAr70I+foac3VeQ8LX5RIJ2Rj3MGtVrYCVG0tA6KNWwodreOpVa/njXU6yHWJxZuybJ6u6gU4d4w17azEJMoV8r4wD+ykrkoEZ91FZq5HLx9iXoAw8+HDAIM2pqWXDwzofXPNwbsg2fR+9k6yKFgLsHJkX8QpfmjVcdYmFSgNxer2OZYgoEDZKB9X1msmRKEnlrIDQNQPlAUDYulSfGWMcxeIefeqMI6vBC1axw495vIbfwBWHwxVUvUIyWjtTwW1Tg+cZTDb19jarp+fVVEgp5fX7s40K8Njnqrjn0tY21FdMb7YopiU1xVWKVPyaxyKck5lRNiG2EbRvgUikoTg91SXSgbBJcbS0wa6QBpiRqmU1IpaokKi5WMZGNirpGSuGURCZQpTWqhK+KeaqIqwo58QKaP5Xh0dFWkalxcFvY/PW3Qrr6w9dc13alJm27rivt2lwVhV5FIlpkpaoBEVZ5YVaxEFXaBNa/tpjfxdZezutw+Dc+IP/J/4yy4NzgrgbIwX0EGbVCZaWwlrSScj6O/E0+IBFh0d0i+45v37dmNZXK9TXwGv8MfPbetCx6XL+ApClDW/HjNiK+7vrq1Ss42128bbG/MviMc5Go5Jc3KmddZ28o7EU7VrCGBPZ4NtL89/tlXF0bIYmNIwBBAQ==) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Quicksand;font-style:normal;font-weight:300;src:url(data:application/x-font-woff2;charset=utf-8;base64,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) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}body,html{font-family:var(--monster-font-family);font-size:1rem;font-weight:400;line-height:1.4}html{background-color:var(--monster-bg-color-primary-1);color:var(--monster-color-primary-1)}.monster-paragraph,p{font-size:1rem;font-weight:400;line-height:1.6;text-align:justify}.monster-h1,h1{font-size:3rem;font-weight:400;line-height:1.15;margin:4rem 0 1.5rem}.monster-h2,h2{font-size:2.5rem;font-weight:400;line-height:1.2;margin:4rem 0 1.5rem}.monster-h3,h3{font-size:2rem;font-weight:400;line-height:1.25;margin:4rem 0 1.25rem}.monster-h4,h4{font-size:1.5rem;font-weight:400;line-height:1.3;margin:4rem 0 1.25rem}.monster-h5,h5{font-size:1.4rem;font-weight:bolder;line-height:1.3;margin:4rem 0 1.25rem}.monster-h6,h6{font-size:1.3rem;font-weight:700;line-height:1.3;margin:4rem 0 1.25rem}p+h1{margin-top:3.75rem}p+h2{margin-top:3rem}p+h3{margin-top:2.25rem}p+h4{margin-top:1.5rem}p+h5{margin-top:.75rem}div+h1,div+h2,div+h3,div+h4,div+h5,div+h6,p+h6{margin-top:0}.deco{background:linear-gradient(to right,var(--monster-color-gradient-1) 0,var(--monster-color-gradient-2) 50%,var(--monster-color-gradient-3) 100%);-webkit-background-clip:text;background-clip:text;background-size:cover;color:var(--monster-color-secondary-1);text-fill-color:transparent;-webkit-text-fill-color:transparent}::-moz-selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}::selection{background-color:var(--monster-bg-color-selection-1);color:var(--monster-color-selection-1)}kbd{background-color:var(--monster-bg-color-primary-4);border-radius:.25rem;border-radius:10rem;color:var(--monster-color-primary-4);display:inline-block;font-size:75%;font-weight:700;line-height:1;padding:.25em .6em;text-align:center;text-decoration:none;vertical-align:baseline;white-space:nowrap}details{margin-bottom:1rem}summary{cursor:pointer;font-feature-settings:"tnum";font-weight:700;letter-spacing:.1em;padding:.6rem 1rem}details[open]{padding:.6rem 1rem .75rem}details[open] summary{margin-bottom:.5rem;padding:0}.monster-no-user-select{-webkit-user-select:none;-moz-user-select:none;user-select:none}@keyframes details-show{0%{opacity:0;transform:translateY(-.5em)}}details[open]>:not(summary){animation:details-show .15s ease-in-out}details[open]>:last-child{margin-bottom:0}.monospace{font-family:var(--monster-font-family-monospace)}[data-monster-role=control] [data-monster-role=button]{min-width:-moz-max-content;min-width:max-content;width:100%}button{width:-moz-max-content;width:max-content} 
+}`, 0);
       } catch (e) {
-        addAttributeToken(
-          document.getRootNode().querySelector("html"),
-          ATTRIBUTE_ERRORMESSAGE,
-          e + ""
-        );
+        addAttributeToken(document.getRootNode().querySelector("html"), ATTRIBUTE_ERRORMESSAGE, e + "");
       }
     }
   });
@@ -26242,7 +26221,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          *
          * @param {string} state
          * @param {number} timeout
-         * @return {Monster.Components.Form.MessageStateButton}
+         * @return {MessageStateButton}
          * @throws {TypeError} value is not a string
          * @throws {TypeError} value is not an instance
          */
@@ -26251,7 +26230,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
         }
         /**
          *
-         * @return {Monster.Components.Form.MessageStateButton}
+         * @return {MessageStateButton}
          */
         removeState() {
           return this[buttonElementSymbol4].removeState();
@@ -26293,7 +26272,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
             },
             actions: {
               click: (e) => {
-                throw new Error("the click action is not defined");
               }
             },
             features: {
@@ -26325,7 +26303,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
          * @param {string|HTMLElement}message
          * @param {string} title
          * @param {string} icon
-         * @return {Monster.Components.Form.MessageStateButton}
+         * @return {MessageStateButton}
          */
         setMessage(message, title, icon) {
           if (isString(message)) {
@@ -26335,14 +26313,14 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
             const containerDiv = document.createElement("div");
             const messageDiv = document.createElement("div");
             const titleDiv = document.createElement("div");
-            titleDiv.setAttribute("data-monster-role", "message-title-box");
+            titleDiv.setAttribute(ATTRIBUTE_ROLE, "message-title-box");
             let titleElement, iconElement;
             if (title !== void 0) {
               title = validateString(title);
               titleElement = document.createElement("div");
               titleElement.setAttribute("class", "");
               titleElement.innerHTML = title;
-              titleElement.setAttribute("data-monster-role", "message-title");
+              titleElement.setAttribute(ATTRIBUTE_ROLE, "message-title");
               titleDiv.appendChild(titleElement);
             }
             if (icon !== void 0) {
@@ -26350,7 +26328,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
               iconElement = document.createElement("div");
               iconElement.setAttribute("class", "");
               iconElement.innerHTML = icon;
-              iconElement.setAttribute("data-monster-role", "message-icon");
+              iconElement.setAttribute(ATTRIBUTE_ROLE, "message-icon");
               titleDiv.appendChild(iconElement);
             }
             messageDiv.innerHTML = message;
@@ -26369,7 +26347,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
         /**
          * clears the Message
          *
-         * @return {Monster.Components.Form.MessageStateButton}
+         * @return {MessageStateButton}
          */
         clearMessage() {
           this.setOption("message.title", void 0);
@@ -26406,7 +26384,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
         }
         /**
          *
-         * @return {Monster.Components.Form.MessageStateButton}
+         * @return {MessageStateButton}
          */
         hideMessage() {
           super.hideDialog();
@@ -26414,7 +26392,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
         }
         /**
          *
-         * @return {Monster.Components.Form.MessageStateButton}
+         * @return {MessageStateButton}
          */
         toggleMessage() {
           super.toggleDialog();
@@ -39717,7 +39695,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
     if (monsterVersion instanceof Version) {
       return monsterVersion;
     }
-    monsterVersion = new Version("3.89.0");
+    monsterVersion = new Version("3.90.0");
     return monsterVersion;
   }
 
@@ -39725,7 +39703,7 @@ input,meter,progress,select,textarea{accent-color:var(--monster-color-secondary-
   describe("Monster", function() {
     describe(".getMonsterVersion()", function() {
       let monsterVersion2;
-      monsterVersion2 = new Version("3.89.0");
+      monsterVersion2 = new Version("3.90.0");
       let m = getMonsterVersion();
       it("should " + monsterVersion2 + " is " + m, function() {
         expect(m.compareTo(monsterVersion2)).is.equal(0);
@@ -51244,7 +51222,7 @@ chai/chai.js:
      *)
   *)
 */
-//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc291cmNlL3R5cGVzL2lzLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvdmFsaWRhdGUubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy90eXBlb2YubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL2V4dGVuZC5tanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RvbS1zdG9yYWdlQDIuMS4wL25vZGVfbW9kdWxlcy9kb20tc3RvcmFnZS9saWIvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2VsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsQDEuMy4xMi9ub2RlX21vZHVsZXMvZWxlbWVudC1pbnRlcm5hbHMtcG9seWZpbGwvZGlzdC9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vcHZ0c3V0aWxzQDEuMy42L25vZGVfbW9kdWxlcy9wdnRzdXRpbHMvYnVpbGQvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3B2dXRpbHNAMS4xLjMvbm9kZV9tb2R1bGVzL3B2dXRpbHMvYnVpbGQvdXRpbHMuZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2FzbjFqc0AzLjAuNS9ub2RlX21vZHVsZXMvYXNuMWpzL2J1aWxkL2luZGV4LmVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjEzL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L2VudW1zLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjEzL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L3R5cGVzL2JpdF9zdHJpbmcuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwZWN1bGlhcithc24xLXNjaGVtYUAyLjMuMTMvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvdHlwZXMvb2N0ZXRfc3RyaW5nLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjEzL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L3R5cGVzL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjEzL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L2NvbnZlcnRlcnMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwZWN1bGlhcithc24xLXNjaGVtYUAyLjMuMTMvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvaGVscGVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjEzL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L3NjaGVtYS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBlY3VsaWFyK2FzbjEtc2NoZW1hQDIuMy4xMy9ub2RlX21vZHVsZXMvQHBlY3VsaWFyL2FzbjEtc2NoZW1hL2J1aWxkL2VzMjAxNS9zdG9yYWdlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjEzL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L2RlY29yYXRvcnMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwZWN1bGlhcithc24xLXNjaGVtYUAyLjMuMTMvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvZXJyb3JzL3NjaGVtYV92YWxpZGF0aW9uLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjEzL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L2Vycm9ycy9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBlY3VsaWFyK2FzbjEtc2NoZW1hQDIuMy4xMy9ub2RlX21vZHVsZXMvQHBlY3VsaWFyL2FzbjEtc2NoZW1hL2J1aWxkL2VzMjAxNS9wYXJzZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwZWN1bGlhcithc24xLXNjaGVtYUAyLjMuMTMvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvc2VyaWFsaXplci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBlY3VsaWFyK2FzbjEtc2NoZW1hQDIuMy4xMy9ub2RlX21vZHVsZXMvQHBlY3VsaWFyL2FzbjEtc2NoZW1hL2J1aWxkL2VzMjAxNS9vYmplY3RzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjEzL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L2NvbnZlcnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwZWN1bGlhcithc24xLXNjaGVtYUAyLjMuMTMvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3RzbGliQDIuOC4xL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYubWpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIranNvbi1zY2hlbWFAMS4xLjEyL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvanNvbi1zY2hlbWEvYnVpbGQvaW5kZXguZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3dlYmNyeXB0by1jb3JlQDEuOC4xL25vZGVfbW9kdWxlcy93ZWJjcnlwdG8tY29yZS9idWlsZC93ZWJjcnlwdG8tY29yZS5lcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYmFzZTY0LWpzQDEuNS4xL25vZGVfbW9kdWxlcy9iYXNlNjQtanMvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2llZWU3NTRAMS4yLjEvbm9kZV9tb2R1bGVzL2llZWU3NTQvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2J1ZmZlckA1LjcuMS9ub2RlX21vZHVsZXMvYnVmZmVyL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrd2ViY3J5cHRvQDEuNS4wL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvd2ViY3J5cHRvL2J1aWxkL3dlYmNyeXB0by5lcy5qcyIsICIuLi8uLi9zb3VyY2UvY29uc3RhbnRzLm1qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZW51bXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXROb2RlTmFtZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFdpbmRvdy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2luc3RhbmNlT2YuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9hcHBseVN0eWxlcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvbWF0aC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvdXNlckFnZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvaXNMYXlvdXRWaWV3cG9ydC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldExheW91dFJlY3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9jb250YWlucy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldENvbXB1dGVkU3R5bGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pc1RhYmxlRWxlbWVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldERvY3VtZW50RWxlbWVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFBhcmVudE5vZGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvd2l0aGluLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRGcmVzaFNpZGVPYmplY3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL21lcmdlUGFkZGluZ09iamVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZXhwYW5kVG9IYXNoTWFwLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvYXJyb3cuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldFZhcmlhdGlvbi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2NvbXB1dGVTdHlsZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9ldmVudExpc3RlbmVycy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0T3Bwb3NpdGVQbGFjZW1lbnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0V2luZG93U2Nyb2xsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0V2luZG93U2Nyb2xsQmFyWC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFZpZXdwb3J0UmVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldERvY3VtZW50UmVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2lzU2Nyb2xsUGFyZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0U2Nyb2xsUGFyZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvbGlzdFNjcm9sbFBhcmVudHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3JlY3RUb0NsaWVudFJlY3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDbGlwcGluZ1JlY3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2NvbXB1dGVPZmZzZXRzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9kZXRlY3RPdmVyZmxvdy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvY29tcHV0ZUF1dG9QbGFjZW1lbnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9mbGlwLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvaGlkZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL29mZnNldC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL3BvcHBlck9mZnNldHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldEFsdEF4aXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9wcmV2ZW50T3ZlcmZsb3cuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldEhUTUxFbGVtZW50U2Nyb2xsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Tm9kZVNjcm9sbC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldENvbXBvc2l0ZVJlY3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL29yZGVyTW9kaWZpZXJzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9kZWJvdW5jZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvbWVyZ2VCeU5hbWUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2NyZWF0ZVBvcHBlci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvcG9wcGVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9pbmRleC5qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvYmFzZS5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL3N0YWNrLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9wYXRoZmluZGVyLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvdG9rZW5saXN0Lm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL2NvbnN0YW50cy5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9hdHRyaWJ1dGVzLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL3V0aWwubWpzIiwgIi4uLy4uL3NvdXJjZS91dGlsL2Nsb25lLm1qcyIsICIuLi8uLi9zb3VyY2UvaTE4bi9sb2NhbGUubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vbG9jYWxlLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvaWQubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9iYXNld2l0aG9wdGlvbnMubWpzIiwgIi4uLy4uL3NvdXJjZS9pMThuL3Byb3ZpZGVyLm1qcyIsICIuLi8uLi9zb3VyY2UvaTE4bi90cmFuc2xhdGlvbnMubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL3RyYW5zZm9ybWVyLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9waXBlLm1qcyIsICIuLi8uLi9zb3VyY2UvdGV4dC9mb3JtYXR0ZXIubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9tZWRpYXR5cGUubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9kYXRhdXJsLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvcXVldWUubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy91bmlxdWVxdWV1ZS5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL29ic2VydmVyLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvb2JzZXJ2ZXJsaXN0Lm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvcHJveHlvYnNlcnZlci5tanMiLCAiLi4vLi4vc291cmNlL2RvbS90aGVtZS5tanMiLCAiLi4vLi4vc291cmNlL2RvbS90ZW1wbGF0ZS5tanMiLCAiLi4vLi4vc291cmNlL2RhdGEvZGlmZi5tanMiLCAiLi4vLi4vc291cmNlL3V0aWwvdHJpbXNwYWNlcy5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9ldmVudHMubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vdXBkYXRlci5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9zbG90dGVkLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL3V0aWwvZXh0cmFjdC1rZXlzLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL3V0aWwvaW5pdC1vcHRpb25zLWZyb20tYXR0cmlidXRlcy5tanMiLCAiLi4vLi4vc291cmNlL2RvbS91dGlsL3NldC1vcHRpb24tZnJvbS1hdHRyaWJ1dGUubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vY3VzdG9tZWxlbWVudC5tanMiLCAiLi4vLi4vc291cmNlL21hdGgvcmFuZG9tLm1qcyIsICIuLi8uLi9zb3VyY2UvdXRpbC9kZWFkbWFuc3N3aXRjaC5tanMiLCAiLi4vLi4vc291cmNlL3V0aWwvcHJvY2Vzc2luZy9jYWxsYmFjay5tanMiLCAiLi4vLi4vc291cmNlL3V0aWwvcHJvY2Vzc2luZy5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9jb25zdGFudHMubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2xheW91dC9zdHlsZXNoZWV0L3RhYnMubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vdXRpbC9mZXRjaC5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvc3R5bGVzaGVldC90aGVtZS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS91dGlsL3BvcHBlci5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvbGF5b3V0L3RhYnMubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL25vdGlmeS9zdHlsZXNoZWV0L21lc3NhZ2UubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL25vdGlmeS9tZXNzYWdlLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ub3RpZnkvc3R5bGVzaGVldC9ub3RpZnkubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL25vdGlmeS9ub3RpZnkubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2xheW91dC9zdHlsZXNoZWV0L3NwbGl0LXBhbmVsLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9sYXlvdXQvc3BsaXQtcGFuZWwubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2xheW91dC9zdHlsZXNoZWV0L3BhbmVsLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9sYXlvdXQvcGFuZWwubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vcmVsb2FkLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL2N1c3RvbWNvbnRyb2wubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vc3R5bGVzaGVldC9idXR0b24ubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL3N0eWxlc2hlZXQvcmlwcGxlLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL2J1dHRvbi5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9zdHlsZXNoZWV0L3N0YXRlLWJ1dHRvbi5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS90eXBlcy9zdGF0ZS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9zdGF0ZS1idXR0b24ubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL2J1aWxkbWFwLm1qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQGZsb2F0aW5nLXVpK3V0aWxzQDAuMi44L25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvdXRpbHMvZGlzdC9mbG9hdGluZy11aS51dGlscy5tanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BmbG9hdGluZy11aStjb3JlQDEuNi44L25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvY29yZS9kaXN0L2Zsb2F0aW5nLXVpLmNvcmUubWpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZmxvYXRpbmctdWkrdXRpbHNAMC4yLjgvbm9kZV9tb2R1bGVzL0BmbG9hdGluZy11aS91dGlscy9kaXN0L2Zsb2F0aW5nLXVpLnV0aWxzLmRvbS5tanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BmbG9hdGluZy11aStkb21AMS42LjEyL25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvZG9tL2Rpc3QvZmxvYXRpbmctdWkuZG9tLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3V0aWwvZmxvYXRpbmctdWkubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vc3R5bGVzaGVldC9zZWxlY3QubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vc2VsZWN0Lm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9sYXlvdXQvc3R5bGVzaGVldC9wb3BwZXIubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2xheW91dC9wb3BwZXIubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vcG9wcGVyLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3N0eWxlc2hlZXQvcG9wcGVyLWJ1dHRvbi5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9wb3BwZXItYnV0dG9uLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3N0eWxlc2hlZXQvY29uZmlybS1idXR0b24ubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vc3R5bGVzaGVldC9tZXNzYWdlLXN0YXRlLWJ1dHRvbi5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9tZXNzYWdlLXN0YXRlLWJ1dHRvbi5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9jb25maXJtLWJ1dHRvbi5tanMiLCAiLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZGF0YXRhYmxlL2NvbnN0YW50cy5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZGF0YXRhYmxlL2RhdGFzb3VyY2UubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2RhdGF0YWJsZS9zdHlsZXNoZWV0L2RhdGFzZXQubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2RhdGF0YWJsZS91dGlsLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9zdHlsZXNoZWV0L2Zvcm0ubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2RhdGF0YWJsZS9kYXRhc2V0Lm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3N0eWxlc2hlZXQvZm9ybS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9mb3JtLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvbm9kZWxpc3QubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9ub2RlLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9idWlsZHRyZWUubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9ub2RlcmVjdXJzaXZlaXRlcmF0b3IubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vc3R5bGVzaGVldC90cmVlLXNlbGVjdC5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS90cmVlLXNlbGVjdC5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9zdHlsZXNoZWV0L3RvZ2dsZS1zd2l0Y2gubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vdG9nZ2xlLXN3aXRjaC5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS90ZW1wbGF0ZS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC9zdHlsZXNoZWV0L2hvc3QubWpzIiwgIi4uLy4uL3NvdXJjZS9pMThuL3Byb3ZpZGVycy9lbWJlZC5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9yZWFkeS5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9mb2N1c21hbmFnZXIubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9pbnRlcm5hbC5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9yZXNvdXJjZS5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9yZXNvdXJjZS9kYXRhLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL3Jlc291cmNlL2xpbmsubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vcmVzb3VyY2UvbGluay9zdHlsZXNoZWV0Lm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL3Jlc291cmNlL3NjcmlwdC5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9yZXNvdXJjZW1hbmFnZXIubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2hvc3Qvc3R5bGVzaGVldC9jb25maWctbWFuYWdlci5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC9jb25maWctbWFuYWdlci5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC9ob3N0Lm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ob3N0L3N0eWxlc2hlZXQvb3ZlcmxheS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC9vdmVybGF5Lm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ob3N0L3V0aWwubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2xheW91dC9zdHlsZXNoZWV0L2RldGFpbHMubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2hvc3QvY29uc3RhbnRzLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9sYXlvdXQvc3R5bGVzaGVldC9jb2xsYXBzZS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvbGF5b3V0L2NvbGxhcHNlLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9sYXlvdXQvZGV0YWlscy5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC9kZXRhaWxzLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvcmFuZG9taWQubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy91dWlkLm1qcyIsICJwcmVwYXJlLmpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvbGF5b3V0L3RhYnMubWpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFpQDUuMS4yL25vZGVfbW9kdWxlcy9jaGFpL2NoYWkuanMiLCAiLi4vdXRpbC9jaGFpLWRvbS5tanMiLCAiLi4vdXRpbC9qc2RvbS5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9sYXlvdXQvc2xpdC1wYW5lbC5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9sYXlvdXQvcGFuZWwubWpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvZm9ybS9yZWxvYWQubWpzIiwgIi4uL3V0aWwvaW50ZXJzZWN0aW9uLW1vY2subWpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvZm9ybS9zdGF0ZS1idXR0b24ubWpzIiwgIi4uL3V0aWwvcmVzaXplLW9ic2VydmVyLm1qcyIsICIuLi9jYXNlcy9jb21wb25lbnRzL2Zvcm0vc2VsZWN0Lm1qcyIsICIuLi9jYXNlcy9jb21wb25lbnRzL2Zvcm0vY29uZmlybS1idXR0b24ubWpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvZm9ybS9mb3JtLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9kYXRhc291cmNlL3N0b3JhZ2UubWpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvZm9ybS90cmVlLXNlbGVjdC5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9mb3JtL2J1dHRvbi5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9mb3JtL3RvZ2dsZS1zd2l0Y2gubWpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvZm9ybS90ZW1wbGF0ZS5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9ub3RpZnkvbWVzc2FnZS5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9ub3RpZnkvbm90aWZ5Lm1qcyIsICIuLi9jYXNlcy9jb21wb25lbnRzL2hvc3QvaG9zdC5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9ob3N0L292ZXJsYXkubWpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvaG9zdC91dGlsLm1qcyIsICIuLi9jYXNlcy9jb21wb25lbnRzL2hvc3QvZGV0YWlscy5tanMiLCAiLi4vY2FzZXMvdGV4dC9mb3JtYXR0ZXIubWpzIiwgIi4uLy4uL3NvdXJjZS90ZXh0L2dlbmVyYXRlLXJhbmdlLWNvbXBhcmlzb24tZXhwcmVzc2lvbi5tanMiLCAiLi4vY2FzZXMvdGV4dC91dGlsLm1qcyIsICIuLi8uLi9zb3VyY2UvdGV4dC9icmFja2V0ZWQta2V5LXZhbHVlLWhhc2gubWpzIiwgIi4uL2Nhc2VzL3RleHQvYnJhY2tldGVkLWtleS12YWx1ZS1oYXNoLm1qcyIsICIuLi9jYXNlcy9tYXRoL3JhbmRvbS5tanMiLCAiLi4vY2FzZXMvdXRpbC90cmltc3BhY2VzLm1qcyIsICIuLi9jYXNlcy91dGlsL3Byb2Nlc3NpbmcubWpzIiwgIi4uL2Nhc2VzL3V0aWwvZGVhZG1hbnNzd2l0Y2gubWpzIiwgIi4uLy4uL3NvdXJjZS91dGlsL2NvbXBhcmF0b3IubWpzIiwgIi4uL2Nhc2VzL3V0aWwvY29tcGFyYXRvci5tanMiLCAiLi4vLi4vc291cmNlL3V0aWwvZnJlZXplLm1qcyIsICIuLi9jYXNlcy91dGlsL2ZyZWV6ZS5tanMiLCAiLi4vY2FzZXMvdXRpbC9jbG9uZS5tanMiLCAiLi4vLi4vc291cmNlL2xvZ2dpbmcvaGFuZGxlci9jb25zb2xlLm1qcyIsICIuLi8uLi9zb3VyY2UvbG9nZ2luZy9oYW5kbGVyLm1qcyIsICIuLi8uLi9zb3VyY2UvbG9nZ2luZy9sb2dlbnRyeS5tanMiLCAiLi4vLi4vc291cmNlL2xvZ2dpbmcvbG9nZ2VyLm1qcyIsICIuLi9jYXNlcy9sb2dnaW5nL2hhbmRsZXIvY29uc29sZS5tanMiLCAiLi4vY2FzZXMvbG9nZ2luZy9sb2dnZXIubWpzIiwgIi4uL2Nhc2VzL2xvZ2dpbmcvaGFuZGxlci5tanMiLCAiLi4vY2FzZXMvbG9nZ2luZy9sb2dlbnRyeS5tanMiLCAiLi4vLi4vc291cmNlL25ldC93ZWJjb25uZWN0Lm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvb2JzZXJ2YWJsZXF1ZXVlLm1qcyIsICIuLi8uLi9zb3VyY2UvbmV0L3dlYmNvbm5lY3QvbWVzc2FnZS5tanMiLCAiLi4vY2FzZXMvbmV0L3dlYmNvbm5lY3QubWpzIiwgIi4uL3V0aWwvd2Vic29ja2V0Lm1qcyIsICIuLi9jYXNlcy9uZXQvd2ViY29ubmVjdC9tZXNzYWdlLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvdmVyc2lvbi5tanMiLCAiLi4vY2FzZXMvbW9uc3Rlci5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9kaW1lbnNpb24ubWpzIiwgIi4uL2Nhc2VzL2RvbS9kaW1lbnNpb24ubWpzIiwgIi4uLy4uL3NvdXJjZS91dGlsL3J1bnRpbWUubWpzIiwgIi4uL2Nhc2VzL2RvbS9yZXNvdXJjZS9saW5rL3N0eWxlc2hlZXQubWpzIiwgIi4uL3V0aWwvY2xlYW51cGRvbS5tanMiLCAiLi4vY2FzZXMvZG9tL3Jlc291cmNlL2xpbmsubWpzIiwgIi4uL2Nhc2VzL2RvbS9yZXNvdXJjZS9zY3JpcHQubWpzIiwgIi4uL2Nhc2VzL2RvbS9yZXNvdXJjZS9kYXRhLm1qcyIsICIuLi9jYXNlcy9kb20vdXRpbC9pbml0LW9wdGlvbnMtZnJvbS1hdHRyaWJ1dGVzLm1qcyIsICIuLi9jYXNlcy9kb20vdXRpbC9leHRyYWN0LWtleXMubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vd29ya2VyL2ZhY3RvcnkubWpzIiwgIi4uL2Nhc2VzL2RvbS93b3JrZXIvZmFjdG9yeS5tanMiLCAiLi4vY2FzZXMvZG9tL3VwZGF0ZXIubWpzIiwgIi4uL2Nhc2VzL2RvbS9sb2NhbGUubWpzIiwgIi4uL2Nhc2VzL2RvbS90aGVtZS5tanMiLCAiLi4vY2FzZXMvZG9tL2N1c3RvbWVsZW1lbnQubWpzIiwgIi4uL2Nhc2VzL2RvbS9mb2N1c21hbmFnZXIubWpzIiwgIi4uL2Nhc2VzL2RvbS9maW5kLm1qcyIsICIuLi9jYXNlcy9kb20vcmVhZHkubWpzIiwgIi4uL2Nhc2VzL2RvbS91dGlsLm1qcyIsICIuLi9jYXNlcy9kb20vY3VzdG9tZWxlbWVudC1pbml0ZnJvbXNjcmlwdGhvc3QubWpzIiwgIi4uL2Nhc2VzL2RvbS9zbG90dGVkLW5vZGVzLm1qcyIsICIuLi9jYXNlcy9kb20vYXR0cmlidXRlcy5tanMiLCAiLi4vY2FzZXMvZG9tL3Jlc291cmNlLm1qcyIsICIuLi9jYXNlcy9kb20vcmVzb3VyY2VtYW5hZ2VyLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL2Fzc2VtYmxlci5tanMiLCAiLi4vY2FzZXMvZG9tL2Fzc2VtYmxlci5tanMiLCAiLi4vY2FzZXMvZG9tL2N1c3RvbWNvbnRyb2wubWpzIiwgIi4uL2Nhc2VzL2RvbS90ZW1wbGF0ZS5tanMiLCAiLi4vY2FzZXMvZG9tL2V2ZW50cy5tanMiLCAiLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9kb20ubWpzIiwgIi4uL2Nhc2VzL2RhdGEvZGF0YXNvdXJjZS9kb20ubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2Uvc3RvcmFnZS9sb2NhbHN0b3JhZ2UubWpzIiwgIi4uL3V0aWwvbG9jYWxzdG9yYWdlLm1qcyIsICIuLi9jYXNlcy9kYXRhL2RhdGFzb3VyY2Uvc3RvcmFnZS9sb2NhbHN0b3JhZ2UubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2Uvc3RvcmFnZS9zZXNzaW9uc3RvcmFnZS5tanMiLCAiLi4vY2FzZXMvZGF0YS9kYXRhc291cmNlL3N0b3JhZ2Uvc2Vzc2lvbnN0b3JhZ2UubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2Uvc2VydmVyLm1qcyIsICIuLi9jYXNlcy9kYXRhL2RhdGFzb3VyY2Uvc2VydmVyLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9kYXRhc291cmNlL3NlcnZlci93ZWJjb25uZWN0Lm1qcyIsICIuLi9jYXNlcy9kYXRhL2RhdGFzb3VyY2Uvc2VydmVyL3dlYnNvY2tldC5tanMiLCAiLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvcmVzdGFwaS5tanMiLCAiLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvcmVzdGFwaS93cml0ZWVycm9yLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9kYXRhc291cmNlL3NlcnZlci9yZXN0YXBpL2RhdGEtZmV0Y2gtZXJyb3IubWpzIiwgIi4uL2Nhc2VzL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvcmVzdGFwaS5tanMiLCAiLi4vY2FzZXMvZGF0YS9kYXRhc291cmNlLm1qcyIsICIuLi9jYXNlcy9kYXRhL2J1aWxkbWFwLm1qcyIsICIuLi9jYXNlcy9kYXRhL3RyYW5zZm9ybWVyLm1qcyIsICIuLi9jYXNlcy9kYXRhL2RpZmYubWpzIiwgIi4uL2Nhc2VzL2RhdGEvYnVpbGR0cmVlLm1qcyIsICIuLi9jYXNlcy9kYXRhL3BhdGhmaW5kZXIubWpzIiwgIi4uL2Nhc2VzL2RhdGEvcGlwZS5tanMiLCAiLi4vY2FzZXMvZGF0YS9leHRlbmQubWpzIiwgIi4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy9hYnN0cmFjdC5tanMiLCAiLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL2ludmFsaWQubWpzIiwgIi4uL2Nhc2VzL2NvbnN0cmFpbnQvaW52YWxpZC5tanMiLCAiLi4vY2FzZXMvY29uc3RyYWludC9hYnN0cmFjdG9wZXJhdG9yLm1qcyIsICIuLi8uLi9zb3VyY2UvY29uc3RyYWludHMvYWJzdHJhY3RvcGVyYXRvci5tanMiLCAiLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL3ZhbGlkLm1qcyIsICIuLi8uLi9zb3VyY2UvY29uc3RyYWludHMvb3JvcGVyYXRvci5tanMiLCAiLi4vY2FzZXMvY29uc3RyYWludC9vcm9wZXJhdG9yLm1qcyIsICIuLi8uLi9zb3VyY2UvY29uc3RyYWludHMvaXNvYmplY3QubWpzIiwgIi4uL2Nhc2VzL2NvbnN0cmFpbnQvaXNvYmplY3QubWpzIiwgIi4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy9hbmRvcGVyYXRvci5tanMiLCAiLi4vY2FzZXMvY29uc3RyYWludC9hbmRvcGVyYXRvci5tanMiLCAiLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL2lzYXJyYXkubWpzIiwgIi4uL2Nhc2VzL2NvbnN0cmFpbnQvaXNhcnJheS5tanMiLCAiLi4vY2FzZXMvY29uc3RyYWludC92YWxpZC5tanMiLCAiLi4vY2FzZXMvdHlwZXMvbm9kZWxpc3QubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL2Jhc2UubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL21lZGlhdHlwZS5tanMiLCAiLi4vY2FzZXMvdHlwZXMvdG9rZW5saXN0Lm1qcyIsICIuLi9jYXNlcy90eXBlcy9wcm94eW9ic2VydmVyLm1qcyIsICIuLi9jYXNlcy90eXBlcy92ZXJzaW9uLm1qcyIsICIuLi9jYXNlcy90eXBlcy9nbG9iYWwubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL29ic2VydmVybGlzdC5tanMiLCAiLi4vY2FzZXMvdHlwZXMvaW50ZXJuYWwubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL29ic2VydmFibGVxdWV1ZS5tanMiLCAiLi4vY2FzZXMvdHlwZXMvZGF0YXVybC5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL2JpbmFyeS5tanMiLCAiLi4vY2FzZXMvdHlwZXMvYmluYXJ5Lm1qcyIsICIuLi9jYXNlcy90eXBlcy9vYnNlcnZlci5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL3JlZ2V4Lm1qcyIsICIuLi9jYXNlcy90eXBlcy9yZWdleC5tanMiLCAiLi4vY2FzZXMvdHlwZXMvcmFuZG9taWQubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL2lkLm1qcyIsICIuLi9jYXNlcy90eXBlcy91dWlkLm1qcyIsICIuLi9jYXNlcy90eXBlcy9pcy5tanMiLCAiLi4vY2FzZXMvdHlwZXMvdmFsaWRhdGUubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL3R5cGVvZi5tanMiLCAiLi4vY2FzZXMvdHlwZXMvdW5pcXVlcXVldWUubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL3N0YWNrLm1qcyIsICIuLi9jYXNlcy90eXBlcy9iYXNld2l0aG9wdGlvbnMubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL25vZGUubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL3F1ZXVlLm1qcyIsICIuLi9jYXNlcy90eXBlcy9ub2RlcmVjdXJzaXZlaXRlcmF0b3IubWpzIiwgIi4uLy4uL3NvdXJjZS9pMThuL2Zvcm1hdHRlci5tanMiLCAiLi4vY2FzZXMvaTE4bi9mb3JtYXR0ZXIubWpzIiwgIi4uL2Nhc2VzL2kxOG4vbG9jYWxlLm1qcyIsICIuLi9jYXNlcy9pMThuL3Byb3ZpZGVyLm1qcyIsICIuLi8uLi9zb3VyY2UvaTE4bi9wcm92aWRlcnMvZmV0Y2gubWpzIiwgIi4uL2Nhc2VzL2kxOG4vcHJvdmlkZXJzL2ZldGNoLm1qcyIsICIuLi9jYXNlcy9pMThuL3Byb3ZpZGVycy9lbWJlZC5tanMiLCAiLi4vY2FzZXMvaTE4bi90cmFuc2xhdGlvbnMubWpzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5leHBvcnQge1xuXHRpc0l0ZXJhYmxlLFxuXHRpc1ByaW1pdGl2ZSxcblx0aXNTeW1ib2wsXG5cdGlzQm9vbGVhbixcblx0aXNTdHJpbmcsXG5cdGlzT2JqZWN0LFxuXHRpc0luc3RhbmNlLFxuXHRpc0FycmF5LFxuXHRpc0Z1bmN0aW9uLFxuXHRpc0ludGVnZXIsXG59O1xuXG4vKipcbiAqIFdpdGggdGhpcyBmdW5jdGlvbiB5b3UgY2FuIGNoZWNrIGlmIGEgdmFsdWUgaXMgaXRlcmFibGUuXG4gKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCBpbiB0aGUgbGlicmFyeSB0byBoYXZlIGNvbnNpc3RlbnQgbmFtZXMuXG4gKlxuICogWW91IGNhbiBjYWxsIHRoZSBtZXRob2QgdmlhIHRoZSBtb25zdGVyIG5hbWVzcGFjZSBgTW9uc3Rlci5UeXBlcy5pc1ByaW1pdGl2ZSgpYC5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvaXMtMS5tanNcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjIuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuZnVuY3Rpb24gaXNJdGVyYWJsZSh2YWx1ZSkge1xuXHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZhbHNlO1xuXHRpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiBmYWxzZTtcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZT8uW1N5bWJvbC5pdGVyYXRvcl0gPT09IFwiZnVuY3Rpb25cIjtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgdmFsdWUgcGFzc2VkIGlzIGEgcHJpbWl0aXZlIChzdHJpbmcsIG51bWJlciwgYm9vbGVhbiwgTmFOLCB1bmRlZmluZWQsIG51bGwgb3Igc3ltYm9sKVxuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgaW4gdGhlIGxpYnJhcnkgdG8gaGF2ZSBjb25zaXN0ZW50IG5hbWVzLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy9pcy0yLm1qc1xuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICovXG5mdW5jdGlvbiBpc1ByaW1pdGl2ZSh2YWx1ZSkge1xuXHR2YXIgdHlwZTtcblxuXHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0dHlwZSA9IHR5cGVvZiB2YWx1ZTtcblxuXHRpZiAoXG5cdFx0dHlwZSA9PT0gXCJzdHJpbmdcIiB8fFxuXHRcdHR5cGUgPT09IFwibnVtYmVyXCIgfHxcblx0XHR0eXBlID09PSBcImJvb2xlYW5cIiB8fFxuXHRcdHR5cGUgPT09IFwic3ltYm9sXCJcblx0KSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHZhbHVlIHBhc3NlZCBpcyBhIHN5bWJvbFxuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgaW4gdGhlIGxpYnJhcnkgdG8gaGF2ZSBjb25zaXN0ZW50IG5hbWVzLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy9pcy0zLm1qc1xuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICovXG5mdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuXHRyZXR1cm4gXCJzeW1ib2xcIiA9PT0gdHlwZW9mIHZhbHVlID8gdHJ1ZSA6IGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB2YWx1ZSBwYXNzZWQgaXMgYSBib29sZWFuLlxuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgaW4gdGhlIGxpYnJhcnkgdG8gaGF2ZSBjb25zaXN0ZW50IG5hbWVzLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy9pcy00Lm1qc1xuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICovXG5mdW5jdGlvbiBpc0Jvb2xlYW4odmFsdWUpIHtcblx0aWYgKHZhbHVlID09PSB0cnVlIHx8IHZhbHVlID09PSBmYWxzZSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB2YWx1ZSBwYXNzZWQgaXMgYSBzdHJpbmdcbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGluIHRoZSBsaWJyYXJ5IHRvIGhhdmUgY29uc2lzdGVudCBuYW1lcy5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvaXMtNS5tanNcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuZnVuY3Rpb24gaXNTdHJpbmcodmFsdWUpIHtcblx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB2YWx1ZSBwYXNzZWQgaXMgYSBvYmplY3RcbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGluIHRoZSBsaWJyYXJ5IHRvIGhhdmUgY29uc2lzdGVudCBuYW1lcy5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvaXMtNi5tanNcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcblx0aWYgKGlzQXJyYXkodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmIChpc1ByaW1pdGl2ZSh2YWx1ZSkpIHJldHVybiBmYWxzZTtcblxuXHRpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHZhbHVlIHBhc3NlZCBpcyBhIG9iamVjdCBhbmQgaW5zdGFuY2Ugb2YgaW5zdGFuY2UuXG4gKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCBpbiB0aGUgbGlicmFyeSB0byBoYXZlIGNvbnNpc3RlbnQgbmFtZXMuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3R5cGVzL2lzLTcubWpzXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcGFyYW0geyp9IGluc3RhbmNlXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS41LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKi9cbmZ1bmN0aW9uIGlzSW5zdGFuY2UodmFsdWUsIGluc3RhbmNlKSB7XG5cdGlmICghaXNPYmplY3QodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghaXNGdW5jdGlvbihpbnN0YW5jZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCFpbnN0YW5jZS5oYXNPd25Qcm9wZXJ0eShcInByb3RvdHlwZVwiKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAodmFsdWUgaW5zdGFuY2VvZiBpbnN0YW5jZSkgcmV0dXJuIHRydWU7XG5cblx0bGV0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKTtcblx0d2hpbGUgKHByb3RvICE9IG51bGwpIHtcblx0XHRpZiAocHJvdG8gPT09IGluc3RhbmNlLnByb3RvdHlwZSkgcmV0dXJuIHRydWU7XG5cdFx0cHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8pO1xuXHR9XG5cblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB2YWx1ZSBwYXNzZWQgaXMgYSBhcnJheVxuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgaW4gdGhlIGxpYnJhcnkgdG8gaGF2ZSBjb25zaXN0ZW50IG5hbWVzLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy9pcy04Lm1qc1xuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kZS9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9pc0FycmF5XG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXkodmFsdWUpIHtcblx0cmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB2YWx1ZSBwYXNzZWQgaXMgYSBmdW5jdGlvblxuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgaW4gdGhlIGxpYnJhcnkgdG8gaGF2ZSBjb25zaXN0ZW50IG5hbWVzLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy9pcy05Lm1qc1xuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG5cdGlmIChpc0FycmF5KHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoaXNQcmltaXRpdmUodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHZhbHVlIHBhc3NlZCBpcyBhbiBpbnRlZ2VyLlxuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgaW4gdGhlIGxpYnJhcnkgdG8gaGF2ZSBjb25zaXN0ZW50IG5hbWVzLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy9pcy0xMC5tanNcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjQuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuZnVuY3Rpb24gaXNJbnRlZ2VyKHZhbHVlKSB7XG5cdHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQge1xuXHRpc0FycmF5LFxuXHRpc0Jvb2xlYW4sXG5cdGlzRnVuY3Rpb24sXG5cdGlzSW5zdGFuY2UsXG5cdGlzSW50ZWdlcixcblx0aXNJdGVyYWJsZSxcblx0aXNPYmplY3QsXG5cdGlzUHJpbWl0aXZlLFxuXHRpc1N0cmluZyxcblx0aXNTeW1ib2wsXG59IGZyb20gXCIuL2lzLm1qc1wiO1xuXG5leHBvcnQge1xuXHR2YWxpZGF0ZUl0ZXJhYmxlLFxuXHR2YWxpZGF0ZVByaW1pdGl2ZSxcblx0dmFsaWRhdGVCb29sZWFuLFxuXHR2YWxpZGF0ZVN0cmluZyxcblx0dmFsaWRhdGVPYmplY3QsXG5cdHZhbGlkYXRlSW5zdGFuY2UsXG5cdHZhbGlkYXRlQXJyYXksXG5cdHZhbGlkYXRlU3ltYm9sLFxuXHR2YWxpZGF0ZUZ1bmN0aW9uLFxuXHR2YWxpZGF0ZUludGVnZXIsXG59O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiB0aGUgdHlwZSBtYXRjaGVzIHRoZSBwcmltaXRpdmUgdHlwZS4gdGhpcyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8gaXNQcmltaXRpdmUoKSBleGNlcHQgdGhhdCBhIFR5cGVFcnJvciBpcyB0aHJvd24uXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7dmFsaWRhdGVJdGVyYWJsZX0gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvdHlwZXMvdmFsaWRhdGUubWpzJztcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlSXRlcmFibGUoJzInKSkgIC8vIFx1MjFBNiBUeXBlRXJyb3JcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlSXRlcmFibGUoW10pKSAgLy8gXHUyMUE2IHZhbHVlXG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4geyp9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjIuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgcHJpbWl0aXZlXG4gKiBAc2VlIHtAbGluayBpc1ByaW1pdGl2ZX1cbiAqIEBzZWUge0BsaW5rIE1vbnN0ZXIuVHlwZXMuaXNQcmltaXRpdmV9XG4gKiBAc2VlIHtAbGluayBNb25zdGVyLlR5cGVzI2lzUHJpbWl0aXZlfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUl0ZXJhYmxlKHZhbHVlKSB7XG5cdGlmICghaXNJdGVyYWJsZSh2YWx1ZSkpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsdWUgaXMgbm90IGl0ZXJhYmxlXCIpO1xuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIHR5cGUgbWF0Y2hlcyB0aGUgcHJpbWl0aXZlIHR5cGUuIHRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIGlzUHJpbWl0aXZlKCkgZXhjZXB0IHRoYXQgYSBUeXBlRXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge3ZhbGlkYXRlUHJpbWl0aXZlfSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS90eXBlcy92YWxpZGF0ZS5tanMnO1xuICogY29uc29sZS5sb2codmFsaWRhdGVQcmltaXRpdmUoJzInKSkgIC8vIFx1MjFBNiB2YWx1ZVxuICogY29uc29sZS5sb2codmFsaWRhdGVQcmltaXRpdmUoW10pKSAgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHsqfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHByaW1pdGl2ZVxuICogQHNlZSB7QGxpbmsgaXNQcmltaXRpdmV9XG4gKiBAc2VlIHtAbGluayBNb25zdGVyLlR5cGVzLmlzUHJpbWl0aXZlfVxuICogQHNlZSB7QGxpbmsgTW9uc3Rlci5UeXBlcyNpc1ByaW1pdGl2ZX1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVQcmltaXRpdmUodmFsdWUpIHtcblx0aWYgKCFpc1ByaW1pdGl2ZSh2YWx1ZSkpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsdWUgaXMgbm90IGEgcHJpbWl0aXZlXCIpO1xuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIHR5cGUgbWF0Y2hlcyB0aGUgYm9vbGVhbiB0eXBlLiB0aGlzIGZ1bmN0aW9uIGlzIGlkZW50aWNhbCB0byBpc0Jvb2xlYW4oKSBleGNlcHQgdGhhdCBhIFR5cGVFcnJvciBpcyB0aHJvd24uXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7dmFsaWRhdGVCb29sZWFufSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS90eXBlcy92YWxpZGF0ZS5tanMnO1xuICogY29uc29sZS5sb2codmFsaWRhdGVCb29sZWFuKGZhbHNlKSkgIC8vIFx1MjFBNiB2YWx1ZVxuICogY29uc29sZS5sb2codmFsaWRhdGVCb29sZWFuKCcyJykpICAvLyBcdTIxQTYgVHlwZUVycm9yXG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZUJvb2xlYW4oW10pKSAgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHsqfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG5cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gIHZhbHVlIGlzIG5vdCBwcmltaXRpdmVcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVCb29sZWFuKHZhbHVlKSB7XG5cdGlmICghaXNCb29sZWFuKHZhbHVlKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ2YWx1ZSBpcyBub3QgYSBib29sZWFuXCIpO1xuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIHR5cGUgbWF0Y2hlcyB0aGUgc3RyaW5nIHR5cGUuIHRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIGlzU3RyaW5nKCkgZXhjZXB0IHRoYXQgYSBUeXBlRXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge3ZhbGlkYXRlU3RyaW5nfSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS90eXBlcy92YWxpZGF0ZS5tanMnO1xuICogY29uc29sZS5sb2codmFsaWRhdGVTdHJpbmcoJzInKSkgIC8vIFx1MjFBNiB2YWx1ZVxuICogY29uc29sZS5sb2codmFsaWRhdGVTdHJpbmcoW10pKSAgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHsqfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVN0cmluZyh2YWx1ZSkge1xuXHRpZiAoIWlzU3RyaW5nKHZhbHVlKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ2YWx1ZSBpcyBub3QgYSBzdHJpbmdcIik7XG5cdH1cblx0cmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiB0aGUgdHlwZSBtYXRjaGVzIHRoZSBvYmplY3QgdHlwZS4gdGhpcyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8gaXNPYmplY3QoKSBleGNlcHQgdGhhdCBhIFR5cGVFcnJvciBpcyB0aHJvd24uXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7dmFsaWRhdGVPYmplY3R9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL3R5cGVzL3ZhbGlkYXRlLm1qcyc7XG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZU9iamVjdCh7fSkpICAvLyBcdTIxQTYgdmFsdWVcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlT2JqZWN0KCcyJykpICAvLyBcdTIxQTYgVHlwZUVycm9yXG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZU9iamVjdChbXSkpICAvLyBcdTIxQTYgVHlwZUVycm9yXG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4geyp9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlT2JqZWN0KHZhbHVlKSB7XG5cdGlmICghaXNPYmplY3QodmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInZhbHVlIGlzIG5vdCBhIG9iamVjdFwiKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIHRoZSB0eXBlIG1hdGNoZXMgdGhlIG9iamVjdCBpbnN0YW5jZS5cbiAqXG4gKiBgYGBcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHt2YWxpZGF0ZUluc3RhbmNlfSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS90eXBlcy92YWxpZGF0ZS5tanMnO1xuICogY29uc29sZS5sb2codmFsaWRhdGVJbnN0YW5jZSh7fSwgT2JqZWN0KSkgLy8gXHUyMUE2IHZhbHVlXG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZUluc3RhbmNlKCcyJywgT2JqZWN0KSkgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogY29uc29sZS5sb2codmFsaWRhdGVJbnN0YW5jZShbXSwgT2JqZWN0KSkgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHsqfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS41LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZlxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUluc3RhbmNlKHZhbHVlLCBpbnN0YW5jZSkge1xuXHRpZiAoIWlzSW5zdGFuY2UodmFsdWUsIGluc3RhbmNlKSkge1xuXHRcdGxldCBuID0gXCJcIjtcblx0XHRpZiAoaXNPYmplY3QoaW5zdGFuY2UpIHx8IGlzRnVuY3Rpb24oaW5zdGFuY2UpKSB7XG5cdFx0XHRuID0gaW5zdGFuY2U/LltcIm5hbWVcIl07XG5cdFx0fVxuXG5cdFx0aWYgKG4pIHtcblx0XHRcdG4gPSBgICR7bn1gO1xuXHRcdH1cblxuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoYHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiR7bn1gKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIHRoZSB0eXBlIG1hdGNoZXMgdGhlIGFycmF5IHR5cGUuIHRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIGlzQXJyYXkoKSBleGNlcHQgdGhhdCBhIFR5cGVFcnJvciBpcyB0aHJvd24uXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7dmFsaWRhdGVBcnJheX0gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvdHlwZXMvdmFsaWRhdGUubWpzJztcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlQXJyYXkoJzInKSkgIC8vIFx1MjFBNiBUeXBlRXJyb3JcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlQXJyYXkoW10pKSAgLy8gXHUyMUE2IHZhbHVlXG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4geyp9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGFycmF5XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQXJyYXkodmFsdWUpIHtcblx0aWYgKCFpc0FycmF5KHZhbHVlKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ2YWx1ZSBpcyBub3QgYW4gYXJyYXlcIik7XG5cdH1cblx0cmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiB0aGUgdHlwZSBtYXRjaGVzIHRoZSBzeW1ib2wgdHlwZS4gdGhpcyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8gaXNTeW1ib2woKSBleGNlcHQgdGhhdCBhIFR5cGVFcnJvciBpcyB0aHJvd24uXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7dmFsaWRhdGVTeW1ib2x9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL3R5cGVzL3ZhbGlkYXRlLm1qcyc7XG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZVN5bWJvbCgnMicpKSAgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogY29uc29sZS5sb2codmFsaWRhdGVTeW1ib2woKSkgIC8vIFx1MjFBNiB2YWx1ZVxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHsqfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS45LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBzeW1ib2xcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVTeW1ib2wodmFsdWUpIHtcblx0aWYgKCFpc1N5bWJvbCh2YWx1ZSkpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsdWUgaXMgbm90IGFuIHN5bWJvbFwiKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIHRoZSB0eXBlIG1hdGNoZXMgdGhlIGZ1bmN0aW9uIHR5cGUuIHRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIGlzRnVuY3Rpb24oKSBleGNlcHQgdGhhdCBhIFR5cGVFcnJvciBpcyB0aHJvd24uXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7dmFsaWRhdGVGdW5jdGlvbn0gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvdHlwZXMvdmFsaWRhdGUubWpzJztcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlRnVuY3Rpb24oKCk9Pnt9KSkgLy8gXHUyMUE2IHZhbHVlXG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZUZ1bmN0aW9uKCcyJykpICAvLyBcdTIxQTYgVHlwZUVycm9yXG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZUZ1bmN0aW9uKFtdKSkgIC8vIFx1MjFBNiBUeXBlRXJyb3JcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Kn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBmdW5jdGlvblxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUZ1bmN0aW9uKHZhbHVlKSB7XG5cdGlmICghaXNGdW5jdGlvbih2YWx1ZSkpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsdWUgaXMgbm90IGEgZnVuY3Rpb25cIik7XG5cdH1cblx0cmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiB0aGUgdHlwZSBpcyBhbiBpbnRlZ2VyLiB0aGlzIGZ1bmN0aW9uIGlzIGlkZW50aWNhbCB0byBpc0ludGVnZXIoKSBleGNlcHQgdGhhdCBhIFR5cGVFcnJvciBpcyB0aHJvd24uXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7dmFsaWRhdGVGdW5jdGlvbn0gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvdHlwZXMvdmFsaWRhdGUubWpzJztcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlSW50ZWdlcih0cnVlKSkgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogY29uc29sZS5sb2codmFsaWRhdGVJbnRlZ2VyKCcyJykpICAvLyBcdTIxQTYgVHlwZUVycm9yXG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZUludGVnZXIoMikpICAvLyBcdTIxQTYgdmFsdWVcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Kn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW50ZWdlclxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUludGVnZXIodmFsdWUpIHtcblx0aWYgKCFpc0ludGVnZXIodmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInZhbHVlIGlzIG5vdCBhbiBpbnRlZ2VyXCIpO1xuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQge1xuXHR2YWxpZGF0ZUZ1bmN0aW9uLFxuXHR2YWxpZGF0ZU9iamVjdCxcblx0dmFsaWRhdGVTdHJpbmcsXG59IGZyb20gXCIuL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBnZXRHbG9iYWwsIGdldEdsb2JhbE9iamVjdCwgZ2V0R2xvYmFsRnVuY3Rpb24gfTtcblxuLyoqXG4gKiBAdHlwZSB7b2JqZWN0fVxuICogQHByaXZhdGVcbiAqL1xubGV0IGdsb2JhbFJlZmVyZW5jZTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGVudmlyb25tZW50LlxuICovXG4oZnVuY3Rpb24gKCkge1xuXHRpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09IFwib2JqZWN0XCIpIHtcblx0XHRnbG9iYWxSZWZlcmVuY2UgPSBnbG9iYWxUaGlzO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdGdsb2JhbFJlZmVyZW5jZSA9IHNlbGY7XG5cdFx0cmV0dXJuO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRnbG9iYWxSZWZlcmVuY2UgPSB3aW5kb3c7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KE9iamVjdC5wcm90b3R5cGUsIFwiX19tb25zdGVyX19cIiwge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdH0pO1xuXG5cdGlmICh0eXBlb2YgX19tb25zdGVyX18gPT09IFwib2JqZWN0XCIpIHtcblx0XHRfX21vbnN0ZXJfXy5nbG9iYWxUaGlzID0gX19tb25zdGVyX187XG5cdFx0ZGVsZXRlIE9iamVjdC5wcm90b3R5cGUuX19tb25zdGVyX187XG5cblx0XHRnbG9iYWxSZWZlcmVuY2UgPSBnbG9iYWxUaGlzO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRyeSB7XG5cdFx0Z2xvYmFsUmVmZXJlbmNlID0gRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1xuXHR9IGNhdGNoIChlKSB7fVxuXG5cdHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIGVudmlyb25tZW50LlwiKTtcbn0pKCk7XG5cbi8qKlxuICogUmV0dXJuIGdsb2JhbFRoaXNcbiAqXG4gKiBJZiBnbG9iYWxUaGlzIGlzIG5vdCBhdmFpbGFibGUsIGl0IHdpbGwgYmUgcG9seWZpbGxlZFxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNi4wXG4gKiBAcmV0dXJuIHtvYmplY3R9IGdsb2JhbFRoaXNcbiAqL1xuZnVuY3Rpb24gZ2V0R2xvYmFsKCkge1xuXHRyZXR1cm4gZ2xvYmFsUmVmZXJlbmNlO1xufVxuXG4vKipcbiAqIFJldHVybiBnbG9iYWwgb2JqZWN0IG9yIHRocm93IEVycm9yXG4gKlxuICogWW91IGNhbiBjYWxsIHRoZSBtZXRob2QgdmlhIHRoZSBtb25zdGVyIG5hbWVzcGFjZSBgTW9uc3Rlci5UeXBlcy5nZXRHbG9iYWxPYmplY3QoKWAuXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7TW9uc3Rlcn0gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvbW9uc3Rlci5tanMnO1xuICogTW9uc3Rlci5UeXBlcy5nZXRHbG9iYWxPYmplY3QoJ2RvY3VtZW50JylcbiAqIC8vIFx1MjFBNiB7IH1cbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBhbHNvIGludGVncmF0ZSB0aGlzIGZ1bmN0aW9uIGluZGl2aWR1YWxseS5cbiAqXG4gKiBgYGBcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHtnZXRHbG9iYWxPYmplY3R9IGZyb20gJ2h0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vQHNjaHVrYWkvbW9uc3RlckAxLjMwLjAvZGlzdC9tb2R1bGVzL3R5cGVzL2dsb2JhbC5tanMnO1xuICogZ2V0R2xvYmFsT2JqZWN0KCdkb2N1bWVudCcpXG4gKiAvLyBcdTIxQTYgeyB9XG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNi4wXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybiB7b2JqZWN0fVxuICogQHRocm93cyB7RXJyb3J9IHRoZSBvYmplY3QgaXMgbm90IGRlZmluZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgb2JqZWN0XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuICovXG5mdW5jdGlvbiBnZXRHbG9iYWxPYmplY3QobmFtZSkge1xuXHR2YWxpZGF0ZVN0cmluZyhuYW1lKTtcblx0Y29uc3QgbyA9IGdsb2JhbFJlZmVyZW5jZT8uW25hbWVdO1xuXHRpZiAodHlwZW9mIG8gPT09IFwidW5kZWZpbmVkXCIpXG5cdFx0dGhyb3cgbmV3IEVycm9yKGB0aGUgb2JqZWN0ICR7bmFtZX0gaXMgbm90IGRlZmluZWRgKTtcblx0dmFsaWRhdGVPYmplY3Qobyk7XG5cdHJldHVybiBvO1xufVxuXG4vKipcbiAqIFJldHVybiBnbG9iYWwgZnVuY3Rpb24gb3IgdGhyb3cgRXJyb3JcbiAqXG4gKiBZb3UgY2FuIGNhbGwgdGhlIG1ldGhvZCB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBNb25zdGVyLlR5cGVzLmdldEdsb2JhbEZ1bmN0aW9uKClgLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge01vbnN0ZXJ9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL21vbnN0ZXIubWpzJztcbiAqIGNvbnNvbGUubG9nKE1vbnN0ZXIuVHlwZXMuZ2V0R2xvYmFsRnVuY3Rpb24oJ3BhcnNlSW50JykpIC8vIFx1MjFBNiBmIHBhcnNlSW50KCkgeyB9XG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gYWxzbyBpbnRlZ3JhdGUgdGhpcyBmdW5jdGlvbiBpbmRpdmlkdWFsbHkuXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7Z2V0R2xvYmFsRnVuY3Rpb259IGZyb20gJ2h0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vQHNjaHVrYWkvbW9uc3RlckAxLjMwLjAvZGlzdC9tb2R1bGVzL3R5cGVzL2dsb2JhbC5tanMnO1xuICogY29uc29sZS5sb2coZ2V0R2xvYmFsRnVuY3Rpb24oJ3BhcnNlSW50JykpIC8vIFx1MjFBNiBmIHBhcnNlSW50KCkgeyB9XG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNi4wXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybiB7b2JqZWN0fVxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBmdW5jdGlvblxuICogQHRocm93cyB7RXJyb3J9IHRoZSBmdW5jdGlvbiBpcyBub3QgZGVmaW5lZFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZ2V0R2xvYmFsRnVuY3Rpb24obmFtZSkge1xuXHR2YWxpZGF0ZVN0cmluZyhuYW1lKTtcblx0Y29uc3QgZiA9IGdsb2JhbFJlZmVyZW5jZT8uW25hbWVdO1xuXHRpZiAodHlwZW9mIGYgPT09IFwidW5kZWZpbmVkXCIpXG5cdFx0dGhyb3cgbmV3IEVycm9yKGB0aGUgZnVuY3Rpb24gJHtuYW1lfSBpcyBub3QgZGVmaW5lZGApO1xuXHR2YWxpZGF0ZUZ1bmN0aW9uKGYpO1xuXHRyZXR1cm4gZjtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5leHBvcnQgeyB0eXBlT2YgfTtcblxuLyoqXG4gKiBUaGUgYnVpbHQtaW4gdHlwZW9mIG1ldGhvZCBpcyBrbm93biB0byBoYXZlIHNvbWUgaGlzdG9yaWNhbCB3ZWFrbmVzc2VzLiBUaGlzIGZ1bmN0aW9uIHRyaWVzIHRvIHByb3ZpZGUgYSBiZXR0ZXIgYW5kIG1vcmUgYWNjdXJhdGUgcmVzdWx0LlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBwcmltaXRpdmVcbiAqL1xuZnVuY3Rpb24gdHlwZU9mKHZhbHVlKSB7XG5cdGxldCB0eXBlID0ge30udG9TdHJpbmcuY2FsbCh2YWx1ZSkubWF0Y2goL1xccyhbYS16QS1aXSspLylbMV07XG5cdGlmIChcIk9iamVjdFwiID09PSB0eXBlKSB7XG5cdFx0Y29uc3QgbmFtZSA9IHZhbHVlLmNvbnN0cnVjdG9yLm5hbWU7XG5cdFx0aWYgKG5hbWUpIHtcblx0XHRcdHJldHVybiBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcmVzdWx0cyA9IC9eKGNsYXNzfGZ1bmN0aW9uKVxccysoXFx3KykvLmV4ZWMoXG5cdFx0XHR2YWx1ZS5jb25zdHJ1Y3Rvci50b1N0cmluZygpLFxuXHRcdCk7XG5cdFx0dHlwZSA9IHJlc3VsdHMgJiYgcmVzdWx0cy5sZW5ndGggPiAyID8gcmVzdWx0c1syXSA6IFwiXCI7XG5cdH1cblxuXHRyZXR1cm4gdHlwZS50b0xvd2VyQ2FzZSgpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGlzQXJyYXksIGlzT2JqZWN0IH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgdHlwZU9mIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVvZi5tanNcIjtcblxuZXhwb3J0IHsgZXh0ZW5kIH07XG5cbi8qKlxuICogRXh0ZW5kIGNvcGllcyBhbGwgZW51bWVyYWJsZSBvd24gcHJvcGVydGllcyBmcm9tIG9uZSBvclxuICogbW9yZSBzb3VyY2Ugb2JqZWN0cyB0byBhIHRhcmdldCBvYmplY3QuIEl0IHJldHVybnMgdGhlIG1vZGlmaWVkIHRhcmdldCBvYmplY3QuXG4gKlxuICogQHJldHVybiB7b2JqZWN0fVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGFyZ3VtZW50XG4gKiBAdGhyb3dzIHtFcnJvcn0gdHlwZSBtaXNtYXRjaFxuICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGFyZ3VtZW50XG4gKiBAcGFyYW0gYXJnc1xuICovXG5mdW5jdGlvbiBleHRlbmQoLi4uYXJncykge1xuXHRsZXQgbztcblx0bGV0IGk7XG5cblx0aWYgKHR5cGVvZiBhcmdzICE9PSBcIm9iamVjdFwiIHx8IGFyZ3NbMF0gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGFyZ3VtZW50ICR7SlNPTi5zdHJpbmdpZnkoYXJnc1swXSl9YCk7XG5cdH1cblxuXHRmb3IgKGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuXHRcdGNvbnN0IGEgPSBhcmdzW2ldO1xuXG5cdFx0aWYgKCEoaXNPYmplY3QoYSkgfHwgaXNBcnJheShhKSkpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgYXJndW1lbnQgJHtKU09OLnN0cmluZ2lmeShhKX1gKTtcblx0XHR9XG5cblx0XHRpZiAobyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRvID0gYTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgayBpbiBhKSB7XG5cdFx0XHRjb25zdCB2ID0gYT8uW2tdO1xuXG5cdFx0XHRpZiAodiA9PT0gbz8uW2tdKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoKGlzT2JqZWN0KHYpICYmIHR5cGVPZih2KSA9PT0gXCJvYmplY3RcIikgfHwgaXNBcnJheSh2KSkge1xuXHRcdFx0XHRpZiAob1trXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0aWYgKGlzQXJyYXkodikpIHtcblx0XHRcdFx0XHRcdG9ba10gPSBbXTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0b1trXSA9IHt9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZiAodHlwZU9mKG9ba10pICE9PSB0eXBlT2YodikpIHtcblx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0XHRcdFx0YHR5cGUgbWlzbWF0Y2g6ICR7SlNPTi5zdHJpbmdpZnkob1trXSl9KCR7dHlwZU9mKFxuXHRcdFx0XHRcdFx0XHRcdG9ba10sXG5cdFx0XHRcdFx0XHRcdCl9KSAhPSAke0pTT04uc3RyaW5naWZ5KHYpfSgke3R5cGVPZih2KX0pYCxcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGlzQXJyYXkob1trXSkpIHtcblx0XHRcdFx0XHRvW2tdID0gW107XG5cdFx0XHRcdFx0b1trXS5wdXNoKC4uLnYpO1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0b1trXSA9IGV4dGVuZChvW2tdLCB2KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmIChpc0FycmF5KG8pKSB7XG5cdFx0XHRcdFx0by5wdXNoKHYpO1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG9ba10gPSB2O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBvO1xufVxuIiwgIi8vIGh0dHA6Ly93d3cucmFqZGVlcGQuY29tL2FydGljbGVzL2Nocm9tZS9sb2NhbHN0cmcvTG9jYWxTdG9yYWdlU2FtcGxlLmh0bVxuXG4vLyBOT1RFOlxuLy8gdGhpcyB2YXJpZXMgZnJvbSBhY3R1YWwgbG9jYWxTdG9yYWdlIGluIHNvbWUgc3VidGxlIHdheXNcblxuLy8gYWxzbywgdGhlcmUgaXMgbm8gcGVyc2lzdGVuY2Vcbi8vIFRPRE8gcGVyc2lzdFxuKGZ1bmN0aW9uICgpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgdmFyIGZzID0gcmVxdWlyZSgnZnMnKTtcblxuICBmdW5jdGlvbiBTdG9yYWdlKHBhdGgsIG9wdHMpIHtcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgICB2YXIgZGI7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ19fX3ByaXZfYmtfX18nLCB7XG4gICAgICB2YWx1ZToge1xuICAgICAgICBwYXRoOiBwYXRoXG4gICAgICB9XG4gICAgLCB3cml0YWJsZTogZmFsc2VcbiAgICAsIGVudW1lcmFibGU6IGZhbHNlXG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ19fX3ByaXZfc3RyaWN0X19fJywge1xuICAgICAgdmFsdWU6ICEhb3B0cy5zdHJpY3RcbiAgICAsIHdyaXRhYmxlOiBmYWxzZVxuICAgICwgZW51bWVyYWJsZTogZmFsc2VcbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnX19fcHJpdl93c19fXycsIHtcbiAgICAgIHZhbHVlOiBvcHRzLndzIHx8ICcgICdcbiAgICAsIHdyaXRhYmxlOiBmYWxzZVxuICAgICwgZW51bWVyYWJsZTogZmFsc2VcbiAgICB9KTtcblxuICAgIHRyeSB7XG4gICAgICBkYiA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHBhdGgpKTtcbiAgICB9IGNhdGNoKGUpIHtcbiAgICAgIGRiID0ge307XG4gICAgfVxuXG4gICAgT2JqZWN0LmtleXMoZGIpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgdGhpc1trZXldID0gZGJba2V5XTtcbiAgICB9LCB0aGlzKTtcbiAgfVxuXG4gIFN0b3JhZ2UucHJvdG90eXBlLmdldEl0ZW0gPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgaWYgKHRoaXMuX19fcHJpdl9zdHJpY3RfX18pIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZyh0aGlzW2tleV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXNba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgU3RvcmFnZS5wcm90b3R5cGUuc2V0SXRlbSA9IGZ1bmN0aW9uIChrZXksIHZhbCkge1xuICAgIGlmICh2YWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpc1trZXldID0gbnVsbDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX19fcHJpdl9zdHJpY3RfX18pIHtcbiAgICAgIHRoaXNba2V5XSA9IFN0cmluZyh2YWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tleV0gPSB2YWw7XG4gICAgfVxuICAgIHRoaXMuX19fc2F2ZV9fXygpO1xuICB9O1xuXG4gIFN0b3JhZ2UucHJvdG90eXBlLnJlbW92ZUl0ZW0gPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgZGVsZXRlIHRoaXNba2V5XTtcbiAgICB0aGlzLl9fX3NhdmVfX18oKTtcbiAgfTtcblxuICBTdG9yYWdlLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgLy8gZmlsdGVycyBvdXQgcHJvdG90eXBlIGtleXNcbiAgICBPYmplY3Qua2V5cyhzZWxmKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHNlbGZba2V5XSA9IHVuZGVmaW5lZDtcbiAgICAgIGRlbGV0ZSBzZWxmW2tleV07XG4gICAgfSk7XG4gIH07XG5cbiAgU3RvcmFnZS5wcm90b3R5cGUua2V5ID0gZnVuY3Rpb24gKGkpIHtcbiAgICBpID0gaSB8fCAwO1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzKVtpXTtcbiAgfTtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3RvcmFnZS5wcm90b3R5cGUsICdsZW5ndGgnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzKS5sZW5ndGg7XG4gICAgfVxuICB9KTtcblxuICBTdG9yYWdlLnByb3RvdHlwZS5fX19zYXZlX19fID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIGlmICghdGhpcy5fX19wcml2X2JrX19fLnBhdGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fX19wcml2X2JrX19fLmxvY2spIHtcbiAgICAgIHRoaXMuX19fcHJpdl9ia19fXy53YWl0ID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9fX3ByaXZfYmtfX18ubG9jayA9IHRydWU7XG4gICAgZnMud3JpdGVGaWxlKFxuICAgICAgdGhpcy5fX19wcml2X2JrX19fLnBhdGhcbiAgICAsIEpTT04uc3RyaW5naWZ5KHRoaXMsIG51bGwsIHRoaXMuX19fcHJpdl93c19fXylcbiAgICAsICd1dGY4J1xuICAgICwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIHNlbGYuX19fcHJpdl9ia19fXy5sb2NrID0gZmFsc2U7XG4gICAgICBpZiAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdDb3VsZCBub3Qgd3JpdGUgdG8gZGF0YWJhc2UnLCBzZWxmLl9fX3ByaXZfYmtfX18ucGF0aCk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChzZWxmLl9fX3ByaXZfYmtfX18ud2FpdCkge1xuICAgICAgICBzZWxmLl9fX3ByaXZfYmtfX18ud2FpdCA9IGZhbHNlO1xuICAgICAgICBzZWxmLl9fX3NhdmVfX18oKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3RvcmFnZSwgJ2NyZWF0ZScsIHtcbiAgICB2YWx1ZTogZnVuY3Rpb24gKHBhdGgsIG9wdHMpIHtcbiAgICAgIHJldHVybiBuZXcgU3RvcmFnZShwYXRoLCBvcHRzKTtcbiAgICB9XG4gICwgd3JpdGFibGU6IGZhbHNlXG4gICwgZW51bWVyYWJsZTogZmFsc2VcbiAgfSk7XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBTdG9yYWdlO1xufSgpKTtcbiIsICIoZnVuY3Rpb24gKGV4cG9ydHMpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICBjb25zdCByZWZNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgIGNvbnN0IHZhbGlkaXR5TWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBjb25zdCBoaWRkZW5JbnB1dE1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgY29uc3QgaW50ZXJuYWxzTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBjb25zdCB2YWxpZGF0aW9uTWVzc2FnZU1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgY29uc3QgZm9ybXNNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgIGNvbnN0IHNoYWRvd0hvc3RzTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBjb25zdCBmb3JtRWxlbWVudHNNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgIGNvbnN0IHJlZlZhbHVlTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBjb25zdCB1cGdyYWRlTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBjb25zdCBzaGFkb3dSb290TWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBjb25zdCB2YWxpZGF0aW9uQW5jaG9yTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBjb25zdCBkb2N1bWVudEZyYWdtZW50TWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBjb25zdCBjb25uZWN0ZWRDYWxsYmFja01hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgY29uc3QgdmFsaWRpdHlVcGdyYWRlTWFwID0gbmV3IFdlYWtNYXAoKTtcblxuICAgIGNvbnN0IGFvbSA9IHtcbiAgICAgICAgYXJpYUF0b21pYzogJ2FyaWEtYXRvbWljJyxcbiAgICAgICAgYXJpYUF1dG9Db21wbGV0ZTogJ2FyaWEtYXV0b2NvbXBsZXRlJyxcbiAgICAgICAgYXJpYUJ1c3k6ICdhcmlhLWJ1c3knLFxuICAgICAgICBhcmlhQ2hlY2tlZDogJ2FyaWEtY2hlY2tlZCcsXG4gICAgICAgIGFyaWFDb2xDb3VudDogJ2FyaWEtY29sY291bnQnLFxuICAgICAgICBhcmlhQ29sSW5kZXg6ICdhcmlhLWNvbGluZGV4JyxcbiAgICAgICAgYXJpYUNvbEluZGV4VGV4dDogJ2FyaWEtY29saW5kZXh0ZXh0JyxcbiAgICAgICAgYXJpYUNvbFNwYW46ICdhcmlhLWNvbHNwYW4nLFxuICAgICAgICBhcmlhQ3VycmVudDogJ2FyaWEtY3VycmVudCcsXG4gICAgICAgIGFyaWFEZXNjcmlwdGlvbjogJ2FyaWEtZGVzY3JpcHRpb24nLFxuICAgICAgICBhcmlhRGlzYWJsZWQ6ICdhcmlhLWRpc2FibGVkJyxcbiAgICAgICAgYXJpYUV4cGFuZGVkOiAnYXJpYS1leHBhbmRlZCcsXG4gICAgICAgIGFyaWFIYXNQb3B1cDogJ2FyaWEtaGFzcG9wdXAnLFxuICAgICAgICBhcmlhSGlkZGVuOiAnYXJpYS1oaWRkZW4nLFxuICAgICAgICBhcmlhSW52YWxpZDogJ2FyaWEtaW52YWxpZCcsXG4gICAgICAgIGFyaWFLZXlTaG9ydGN1dHM6ICdhcmlhLWtleXNob3J0Y3V0cycsXG4gICAgICAgIGFyaWFMYWJlbDogJ2FyaWEtbGFiZWwnLFxuICAgICAgICBhcmlhTGV2ZWw6ICdhcmlhLWxldmVsJyxcbiAgICAgICAgYXJpYUxpdmU6ICdhcmlhLWxpdmUnLFxuICAgICAgICBhcmlhTW9kYWw6ICdhcmlhLW1vZGFsJyxcbiAgICAgICAgYXJpYU11bHRpTGluZTogJ2FyaWEtbXVsdGlsaW5lJyxcbiAgICAgICAgYXJpYU11bHRpU2VsZWN0YWJsZTogJ2FyaWEtbXVsdGlzZWxlY3RhYmxlJyxcbiAgICAgICAgYXJpYU9yaWVudGF0aW9uOiAnYXJpYS1vcmllbnRhdGlvbicsXG4gICAgICAgIGFyaWFQbGFjZWhvbGRlcjogJ2FyaWEtcGxhY2Vob2xkZXInLFxuICAgICAgICBhcmlhUG9zSW5TZXQ6ICdhcmlhLXBvc2luc2V0JyxcbiAgICAgICAgYXJpYVByZXNzZWQ6ICdhcmlhLXByZXNzZWQnLFxuICAgICAgICBhcmlhUmVhZE9ubHk6ICdhcmlhLXJlYWRvbmx5JyxcbiAgICAgICAgYXJpYVJlbGV2YW50OiAnYXJpYS1yZWxldmFudCcsXG4gICAgICAgIGFyaWFSZXF1aXJlZDogJ2FyaWEtcmVxdWlyZWQnLFxuICAgICAgICBhcmlhUm9sZURlc2NyaXB0aW9uOiAnYXJpYS1yb2xlZGVzY3JpcHRpb24nLFxuICAgICAgICBhcmlhUm93Q291bnQ6ICdhcmlhLXJvd2NvdW50JyxcbiAgICAgICAgYXJpYVJvd0luZGV4OiAnYXJpYS1yb3dpbmRleCcsXG4gICAgICAgIGFyaWFSb3dJbmRleFRleHQ6ICdhcmlhLXJvd2luZGV4dGV4dCcsXG4gICAgICAgIGFyaWFSb3dTcGFuOiAnYXJpYS1yb3dzcGFuJyxcbiAgICAgICAgYXJpYVNlbGVjdGVkOiAnYXJpYS1zZWxlY3RlZCcsXG4gICAgICAgIGFyaWFTZXRTaXplOiAnYXJpYS1zZXRzaXplJyxcbiAgICAgICAgYXJpYVNvcnQ6ICdhcmlhLXNvcnQnLFxuICAgICAgICBhcmlhVmFsdWVNYXg6ICdhcmlhLXZhbHVlbWF4JyxcbiAgICAgICAgYXJpYVZhbHVlTWluOiAnYXJpYS12YWx1ZW1pbicsXG4gICAgICAgIGFyaWFWYWx1ZU5vdzogJ2FyaWEtdmFsdWVub3cnLFxuICAgICAgICBhcmlhVmFsdWVUZXh0OiAnYXJpYS12YWx1ZXRleHQnLFxuICAgICAgICByb2xlOiAncm9sZSdcbiAgICB9O1xuICAgIGNvbnN0IGluaXRBb20gPSAocmVmLCBpbnRlcm5hbHMpID0+IHtcbiAgICAgICAgZm9yIChsZXQga2V5IGluIGFvbSkge1xuICAgICAgICAgICAgaW50ZXJuYWxzW2tleV0gPSBudWxsO1xuICAgICAgICAgICAgbGV0IGNsb3N1cmVWYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVOYW1lID0gYW9tW2tleV07XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoaW50ZXJuYWxzLCBrZXksIHtcbiAgICAgICAgICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjbG9zdXJlVmFsdWU7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xvc3VyZVZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWYuaXNDb25uZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXBncmFkZU1hcC5zZXQocmVmLCBpbnRlcm5hbHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gaW5pdE5vZGUobm9kZSkge1xuICAgICAgICBjb25zdCBpbnRlcm5hbHMgPSBpbnRlcm5hbHNNYXAuZ2V0KG5vZGUpO1xuICAgICAgICBjb25zdCB7IGZvcm0gfSA9IGludGVybmFscztcbiAgICAgICAgaW5pdEZvcm0obm9kZSwgZm9ybSwgaW50ZXJuYWxzKTtcbiAgICAgICAgaW5pdExhYmVscyhub2RlLCBpbnRlcm5hbHMubGFiZWxzKTtcbiAgICB9XG4gICAgY29uc3Qgd2Fsa0ZpZWxkc2V0ID0gKG5vZGUsIGZpcnN0UmVuZGVyID0gZmFsc2UpID0+IHtcbiAgICAgICAgY29uc3Qgd2Fsa2VyID0gZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihub2RlLCBOb2RlRmlsdGVyLlNIT1dfRUxFTUVOVCwge1xuICAgICAgICAgICAgYWNjZXB0Tm9kZShub2RlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsc01hcC5oYXMobm9kZSkgP1xuICAgICAgICAgICAgICAgICAgICBOb2RlRmlsdGVyLkZJTFRFUl9BQ0NFUFQgOiBOb2RlRmlsdGVyLkZJTFRFUl9TS0lQO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IGN1cnJlbnQgPSB3YWxrZXIubmV4dE5vZGUoKTtcbiAgICAgICAgY29uc3QgaXNDYWxsTmVjZXNzYXJ5ID0gKCFmaXJzdFJlbmRlciB8fCBub2RlLmRpc2FibGVkKTtcbiAgICAgICAgd2hpbGUgKGN1cnJlbnQpIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50LmZvcm1EaXNhYmxlZENhbGxiYWNrICYmIGlzQ2FsbE5lY2Vzc2FyeSkge1xuICAgICAgICAgICAgICAgIHNldERpc2FibGVkKGN1cnJlbnQsIG5vZGUuZGlzYWJsZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3VycmVudCA9IHdhbGtlci5uZXh0Tm9kZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBkaXNhYmxlZE9yTmFtZU9ic2VydmVyQ29uZmlnID0geyBhdHRyaWJ1dGVzOiB0cnVlLCBhdHRyaWJ1dGVGaWx0ZXI6IFsnZGlzYWJsZWQnLCAnbmFtZSddIH07XG4gICAgY29uc3QgZGlzYWJsZWRPck5hbWVPYnNlcnZlciA9IG11dGF0aW9uT2JzZXJ2ZXJFeGlzdHMoKSA/IG5ldyBNdXRhdGlvbk9ic2VydmVyKChtdXRhdGlvbnNMaXN0KSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgbXV0YXRpb24gb2YgbXV0YXRpb25zTGlzdCkge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gbXV0YXRpb24udGFyZ2V0O1xuICAgICAgICAgICAgaWYgKG11dGF0aW9uLmF0dHJpYnV0ZU5hbWUgPT09ICdkaXNhYmxlZCcpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0LmNvbnN0cnVjdG9yWydmb3JtQXNzb2NpYXRlZCddKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldERpc2FibGVkKHRhcmdldCwgdGFyZ2V0Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRhcmdldC5sb2NhbE5hbWUgPT09ICdmaWVsZHNldCcpIHtcbiAgICAgICAgICAgICAgICAgICAgd2Fsa0ZpZWxkc2V0KHRhcmdldCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG11dGF0aW9uLmF0dHJpYnV0ZU5hbWUgPT09ICduYW1lJykge1xuICAgICAgICAgICAgICAgIGlmICh0YXJnZXQuY29uc3RydWN0b3JbJ2Zvcm1Bc3NvY2lhdGVkJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50ZXJuYWxzID0gaW50ZXJuYWxzTWFwLmdldCh0YXJnZXQpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHJlZlZhbHVlTWFwLmdldCh0YXJnZXQpO1xuICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbHMuc2V0Rm9ybVZhbHVlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KSA6IHt9O1xuICAgIGZ1bmN0aW9uIG9ic2VydmVyQ2FsbGJhY2sobXV0YXRpb25MaXN0KSB7XG4gICAgICAgIG11dGF0aW9uTGlzdC5mb3JFYWNoKG11dGF0aW9uUmVjb3JkID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgYWRkZWROb2RlcywgcmVtb3ZlZE5vZGVzIH0gPSBtdXRhdGlvblJlY29yZDtcbiAgICAgICAgICAgIGNvbnN0IGFkZGVkID0gQXJyYXkuZnJvbShhZGRlZE5vZGVzKTtcbiAgICAgICAgICAgIGNvbnN0IHJlbW92ZWQgPSBBcnJheS5mcm9tKHJlbW92ZWROb2Rlcyk7XG4gICAgICAgICAgICBhZGRlZC5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICBpZiAoaW50ZXJuYWxzTWFwLmhhcyhub2RlKSAmJiBub2RlLmNvbnN0cnVjdG9yWydmb3JtQXNzb2NpYXRlZCddKSB7XG4gICAgICAgICAgICAgICAgICAgIGluaXROb2RlKG5vZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodXBncmFkZU1hcC5oYXMobm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50ZXJuYWxzID0gdXBncmFkZU1hcC5nZXQobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFvbUtleXMgPSBPYmplY3Qua2V5cyhhb20pO1xuICAgICAgICAgICAgICAgICAgICBhb21LZXlzXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGtleSA9PiBpbnRlcm5hbHNba2V5XSAhPT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShhb21ba2V5XSwgaW50ZXJuYWxzW2tleV0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdXBncmFkZU1hcC5kZWxldGUobm9kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh2YWxpZGl0eVVwZ3JhZGVNYXAuaGFzKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGludGVybmFscyA9IHZhbGlkaXR5VXBncmFkZU1hcC5nZXQobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdpbnRlcm5hbHMtdmFsaWQnLCBpbnRlcm5hbHMudmFsaWRpdHkudmFsaWQudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdpbnRlcm5hbHMtaW52YWxpZCcsICghaW50ZXJuYWxzLnZhbGlkaXR5LnZhbGlkKS50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ2FyaWEtaW52YWxpZCcsICghaW50ZXJuYWxzLnZhbGlkaXR5LnZhbGlkKS50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRpdHlVcGdyYWRlTWFwLmRlbGV0ZShub2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUubG9jYWxOYW1lID09PSAnZm9ybScpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybUVsZW1lbnRzID0gZm9ybUVsZW1lbnRzTWFwLmdldChub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2Fsa2VyID0gZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihub2RlLCBOb2RlRmlsdGVyLlNIT1dfRUxFTUVOVCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXB0Tm9kZShub2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChpbnRlcm5hbHNNYXAuaGFzKG5vZGUpICYmIG5vZGUuY29uc3RydWN0b3JbJ2Zvcm1Bc3NvY2lhdGVkJ10gJiYgIShmb3JtRWxlbWVudHMgJiYgZm9ybUVsZW1lbnRzLmhhcyhub2RlKSkpID8gTm9kZUZpbHRlci5GSUxURVJfQUNDRVBUIDogTm9kZUZpbHRlci5GSUxURVJfU0tJUDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjdXJyZW50ID0gd2Fsa2VyLm5leHROb2RlKCk7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChjdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbml0Tm9kZShjdXJyZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSB3YWxrZXIubmV4dE5vZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobm9kZS5sb2NhbE5hbWUgPT09ICdmaWVsZHNldCcpIHtcbiAgICAgICAgICAgICAgICAgICAgKF9hID0gZGlzYWJsZWRPck5hbWVPYnNlcnZlci5vYnNlcnZlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChkaXNhYmxlZE9yTmFtZU9ic2VydmVyLCBub2RlLCBkaXNhYmxlZE9yTmFtZU9ic2VydmVyQ29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgd2Fsa0ZpZWxkc2V0KG5vZGUsIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmVtb3ZlZC5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGludGVybmFscyA9IGludGVybmFsc01hcC5nZXQobm9kZSk7XG4gICAgICAgICAgICAgICAgaWYgKGludGVybmFscyAmJiBoaWRkZW5JbnB1dE1hcC5nZXQoaW50ZXJuYWxzKSkge1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVIaWRkZW5JbnB1dHMoaW50ZXJuYWxzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNoYWRvd0hvc3RzTWFwLmhhcyhub2RlKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvYnNlcnZlciA9IHNoYWRvd0hvc3RzTWFwLmdldChub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZnJhZ21lbnRPYnNlcnZlckNhbGxiYWNrKG11dGF0aW9uTGlzdCkge1xuICAgICAgICBtdXRhdGlvbkxpc3QuZm9yRWFjaChtdXRhdGlvbiA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IHJlbW92ZWROb2RlcyB9ID0gbXV0YXRpb247XG4gICAgICAgICAgICByZW1vdmVkTm9kZXMuZm9yRWFjaChub2RlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBvYnNlcnZlciA9IGRvY3VtZW50RnJhZ21lbnRNYXAuZ2V0KG11dGF0aW9uLnRhcmdldCk7XG4gICAgICAgICAgICAgICAgaWYgKGludGVybmFsc01hcC5oYXMobm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdXBncmFkZUludGVybmFscyhub2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBkZWZlclVwZ3JhZGUgPSAoZnJhZ21lbnQpID0+IHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihmcmFnbWVudE9ic2VydmVyQ2FsbGJhY2spO1xuICAgICAgICBpZiAoKChfYSA9IHdpbmRvdyA9PT0gbnVsbCB8fCB3aW5kb3cgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHdpbmRvdy5TaGFkeURPTSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmluVXNlKSAmJlxuICAgICAgICAgICAgZnJhZ21lbnQubW9kZSAmJlxuICAgICAgICAgICAgZnJhZ21lbnQuaG9zdCkge1xuICAgICAgICAgICAgZnJhZ21lbnQgPSBmcmFnbWVudC5ob3N0O1xuICAgICAgICB9XG4gICAgICAgIChfYiA9IG9ic2VydmVyLm9ic2VydmUpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKG9ic2VydmVyLCBmcmFnbWVudCwgeyBjaGlsZExpc3Q6IHRydWUgfSk7XG4gICAgICAgIGRvY3VtZW50RnJhZ21lbnRNYXAuc2V0KGZyYWdtZW50LCBvYnNlcnZlcik7XG4gICAgfTtcbiAgICBtdXRhdGlvbk9ic2VydmVyRXhpc3RzKCkgPyBuZXcgTXV0YXRpb25PYnNlcnZlcihvYnNlcnZlckNhbGxiYWNrKSA6IHt9O1xuICAgIGNvbnN0IG9ic2VydmVyQ29uZmlnID0ge1xuICAgICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICAgIHN1YnRyZWU6IHRydWVcbiAgICB9O1xuXG4gICAgY29uc3Qgc2V0RGlzYWJsZWQgPSAocmVmLCBkaXNhYmxlZCkgPT4ge1xuICAgICAgICByZWYudG9nZ2xlQXR0cmlidXRlKCdpbnRlcm5hbHMtZGlzYWJsZWQnLCBkaXNhYmxlZCk7XG4gICAgICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgICAgICAgcmVmLnNldEF0dHJpYnV0ZSgnYXJpYS1kaXNhYmxlZCcsICd0cnVlJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZWYucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWRpc2FibGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlZi5mb3JtRGlzYWJsZWRDYWxsYmFjaykge1xuICAgICAgICAgICAgcmVmLmZvcm1EaXNhYmxlZENhbGxiYWNrLmFwcGx5KHJlZiwgW2Rpc2FibGVkXSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZUhpZGRlbklucHV0cyA9IChpbnRlcm5hbHMpID0+IHtcbiAgICAgICAgY29uc3QgaGlkZGVuSW5wdXRzID0gaGlkZGVuSW5wdXRNYXAuZ2V0KGludGVybmFscyk7XG4gICAgICAgIGhpZGRlbklucHV0cy5mb3JFYWNoKGhpZGRlbklucHV0ID0+IHtcbiAgICAgICAgICAgIGhpZGRlbklucHV0LnJlbW92ZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgaGlkZGVuSW5wdXRNYXAuc2V0KGludGVybmFscywgW10pO1xuICAgIH07XG4gICAgY29uc3QgY3JlYXRlSGlkZGVuSW5wdXQgPSAocmVmLCBpbnRlcm5hbHMpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgICAgICBpbnB1dC50eXBlID0gJ2hpZGRlbic7XG4gICAgICAgIGlucHV0Lm5hbWUgPSByZWYuZ2V0QXR0cmlidXRlKCduYW1lJyk7XG4gICAgICAgIHJlZi5hZnRlcihpbnB1dCk7XG4gICAgICAgIGhpZGRlbklucHV0TWFwLmdldChpbnRlcm5hbHMpLnB1c2goaW5wdXQpO1xuICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgfTtcbiAgICBjb25zdCBpbml0UmVmID0gKHJlZiwgaW50ZXJuYWxzKSA9PiB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaGlkZGVuSW5wdXRNYXAuc2V0KGludGVybmFscywgW10pO1xuICAgICAgICAoX2EgPSBkaXNhYmxlZE9yTmFtZU9ic2VydmVyLm9ic2VydmUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKGRpc2FibGVkT3JOYW1lT2JzZXJ2ZXIsIHJlZiwgZGlzYWJsZWRPck5hbWVPYnNlcnZlckNvbmZpZyk7XG4gICAgfTtcbiAgICBjb25zdCBpbml0TGFiZWxzID0gKHJlZiwgbGFiZWxzKSA9PiB7XG4gICAgICAgIGlmIChsYWJlbHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBBcnJheS5mcm9tKGxhYmVscykuZm9yRWFjaChsYWJlbCA9PiBsYWJlbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHJlZi5jbGljay5iaW5kKHJlZikpKTtcbiAgICAgICAgICAgIGxldCBmaXJzdExhYmVsSWQgPSBsYWJlbHNbMF0uaWQ7XG4gICAgICAgICAgICBpZiAoIWxhYmVsc1swXS5pZCkge1xuICAgICAgICAgICAgICAgIGZpcnN0TGFiZWxJZCA9IGAke2xhYmVsc1swXS5odG1sRm9yfV9MYWJlbGA7XG4gICAgICAgICAgICAgICAgbGFiZWxzWzBdLmlkID0gZmlyc3RMYWJlbElkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVmLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbGxlZGJ5JywgZmlyc3RMYWJlbElkKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgc2V0Rm9ybVZhbGlkaXR5ID0gKGZvcm0pID0+IHtcbiAgICAgICAgY29uc3QgbmF0aXZlQ29udHJvbFZhbGlkaXR5ID0gQXJyYXkuZnJvbShmb3JtLmVsZW1lbnRzKVxuICAgICAgICAgICAgLmZpbHRlcigoZWxlbWVudCkgPT4gIWVsZW1lbnQudGFnTmFtZS5pbmNsdWRlcygnLScpICYmIGVsZW1lbnQudmFsaWRpdHkpXG4gICAgICAgICAgICAubWFwKChlbGVtZW50KSA9PiBlbGVtZW50LnZhbGlkaXR5LnZhbGlkKTtcbiAgICAgICAgY29uc3QgcG9seWZpbGxlZEVsZW1lbnRzID0gZm9ybUVsZW1lbnRzTWFwLmdldChmb3JtKSB8fCBbXTtcbiAgICAgICAgY29uc3QgcG9seWZpbGxlZFZhbGlkaXR5ID0gQXJyYXkuZnJvbShwb2x5ZmlsbGVkRWxlbWVudHMpXG4gICAgICAgICAgICAuZmlsdGVyKGNvbnRyb2wgPT4gY29udHJvbC5pc0Nvbm5lY3RlZClcbiAgICAgICAgICAgIC5tYXAoKGNvbnRyb2wpID0+IGludGVybmFsc01hcC5nZXQoY29udHJvbCkudmFsaWRpdHkudmFsaWQpO1xuICAgICAgICBjb25zdCBoYXNJbnZhbGlkID0gWy4uLm5hdGl2ZUNvbnRyb2xWYWxpZGl0eSwgLi4ucG9seWZpbGxlZFZhbGlkaXR5XS5pbmNsdWRlcyhmYWxzZSk7XG4gICAgICAgIGZvcm0udG9nZ2xlQXR0cmlidXRlKCdpbnRlcm5hbHMtaW52YWxpZCcsIGhhc0ludmFsaWQpO1xuICAgICAgICBmb3JtLnRvZ2dsZUF0dHJpYnV0ZSgnaW50ZXJuYWxzLXZhbGlkJywgIWhhc0ludmFsaWQpO1xuICAgIH07XG4gICAgY29uc3QgZm9ybUlucHV0Q2FsbGJhY2sgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgc2V0Rm9ybVZhbGlkaXR5KGZpbmRQYXJlbnRGb3JtKGV2ZW50LnRhcmdldCkpO1xuICAgIH07XG4gICAgY29uc3QgZm9ybUNoYW5nZUNhbGxiYWNrID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIHNldEZvcm1WYWxpZGl0eShmaW5kUGFyZW50Rm9ybShldmVudC50YXJnZXQpKTtcbiAgICB9O1xuICAgIGNvbnN0IHdpcmVTdWJtaXRMb2dpYyA9IChmb3JtKSA9PiB7XG4gICAgICAgIGNvbnN0IHN1Ym1pdEJ1dHRvblNlbGVjdG9yID0gWydidXR0b25bdHlwZT1zdWJtaXRdJywgJ2lucHV0W3R5cGU9c3VibWl0XScsICdidXR0b246bm90KFt0eXBlXSknXVxuICAgICAgICAgICAgLm1hcChzZWwgPT4gYCR7c2VsfTpub3QoW2Rpc2FibGVkXSlgKVxuICAgICAgICAgICAgLm1hcChzZWwgPT4gYCR7c2VsfTpub3QoW2Zvcm1dKSR7Zm9ybS5pZCA/IGAsJHtzZWx9W2Zvcm09JyR7Zm9ybS5pZH0nXWAgOiAnJ31gKVxuICAgICAgICAgICAgLmpvaW4oJywnKTtcbiAgICAgICAgZm9ybS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgICAgICAgICAgIGlmICh0YXJnZXQuY2xvc2VzdChzdWJtaXRCdXR0b25TZWxlY3RvcikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50cyA9IGZvcm1FbGVtZW50c01hcC5nZXQoZm9ybSk7XG4gICAgICAgICAgICAgICAgaWYgKGZvcm0ubm9WYWxpZGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50cy5zaXplKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVzID0gQXJyYXkuZnJvbShlbGVtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkaXR5TGlzdCA9IG5vZGVzXG4gICAgICAgICAgICAgICAgICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAubWFwKG5vZGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50ZXJuYWxzID0gaW50ZXJuYWxzTWFwLmdldChub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbHMucmVwb3J0VmFsaWRpdHkoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWxpZGl0eUxpc3QuaW5jbHVkZXMoZmFsc2UpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGZvcm1SZXNldENhbGxiYWNrID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRzID0gZm9ybUVsZW1lbnRzTWFwLmdldChldmVudC50YXJnZXQpO1xuICAgICAgICBpZiAoZWxlbWVudHMgJiYgZWxlbWVudHMuc2l6ZSkge1xuICAgICAgICAgICAgZWxlbWVudHMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5jb25zdHJ1Y3Rvci5mb3JtQXNzb2NpYXRlZCAmJiBlbGVtZW50LmZvcm1SZXNldENhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZm9ybVJlc2V0Q2FsbGJhY2suYXBwbHkoZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGluaXRGb3JtID0gKHJlZiwgZm9ybSwgaW50ZXJuYWxzKSA9PiB7XG4gICAgICAgIGlmIChmb3JtKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtRWxlbWVudHMgPSBmb3JtRWxlbWVudHNNYXAuZ2V0KGZvcm0pO1xuICAgICAgICAgICAgaWYgKGZvcm1FbGVtZW50cykge1xuICAgICAgICAgICAgICAgIGZvcm1FbGVtZW50cy5hZGQocmVmKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluaXRTZXQgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICAgICAgaW5pdFNldC5hZGQocmVmKTtcbiAgICAgICAgICAgICAgICBmb3JtRWxlbWVudHNNYXAuc2V0KGZvcm0sIGluaXRTZXQpO1xuICAgICAgICAgICAgICAgIHdpcmVTdWJtaXRMb2dpYyhmb3JtKTtcbiAgICAgICAgICAgICAgICBmb3JtLmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2V0JywgZm9ybVJlc2V0Q2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIGZvcm0uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBmb3JtSW5wdXRDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgZm9ybS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmb3JtQ2hhbmdlQ2FsbGJhY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9ybXNNYXAuc2V0KGZvcm0sIHsgcmVmLCBpbnRlcm5hbHMgfSk7XG4gICAgICAgICAgICBpZiAocmVmLmNvbnN0cnVjdG9yWydmb3JtQXNzb2NpYXRlZCddICYmIHJlZi5mb3JtQXNzb2NpYXRlZENhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlZi5mb3JtQXNzb2NpYXRlZENhbGxiYWNrLmFwcGx5KHJlZiwgW2Zvcm1dKTtcbiAgICAgICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldEZvcm1WYWxpZGl0eShmb3JtKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZmluZFBhcmVudEZvcm0gPSAoZWxlbSkgPT4ge1xuICAgICAgICBsZXQgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlO1xuICAgICAgICBpZiAocGFyZW50ICYmIHBhcmVudC50YWdOYW1lICE9PSAnRk9STScpIHtcbiAgICAgICAgICAgIHBhcmVudCA9IGZpbmRQYXJlbnRGb3JtKHBhcmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICB9O1xuICAgIGNvbnN0IHRocm93SWZOb3RGb3JtQXNzb2NpYXRlZCA9IChyZWYsIG1lc3NhZ2UsIEVycm9yVHlwZSA9IERPTUV4Y2VwdGlvbikgPT4ge1xuICAgICAgICBpZiAoIXJlZi5jb25zdHJ1Y3RvclsnZm9ybUFzc29jaWF0ZWQnXSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yVHlwZShtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgb3ZlcnJpZGVGb3JtTWV0aG9kID0gKGZvcm0sIHJldHVyblZhbHVlLCBtZXRob2QpID0+IHtcbiAgICAgICAgY29uc3QgZWxlbWVudHMgPSBmb3JtRWxlbWVudHNNYXAuZ2V0KGZvcm0pO1xuICAgICAgICBpZiAoZWxlbWVudHMgJiYgZWxlbWVudHMuc2l6ZSkge1xuICAgICAgICAgICAgZWxlbWVudHMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnRlcm5hbHMgPSBpbnRlcm5hbHNNYXAuZ2V0KGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkID0gaW50ZXJuYWxzW21ldGhvZF0oKTtcbiAgICAgICAgICAgICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICAgIH07XG4gICAgY29uc3QgdXBncmFkZUludGVybmFscyA9IChyZWYpID0+IHtcbiAgICAgICAgaWYgKHJlZi5jb25zdHJ1Y3RvclsnZm9ybUFzc29jaWF0ZWQnXSkge1xuICAgICAgICAgICAgY29uc3QgaW50ZXJuYWxzID0gaW50ZXJuYWxzTWFwLmdldChyZWYpO1xuICAgICAgICAgICAgY29uc3QgeyBsYWJlbHMsIGZvcm0gfSA9IGludGVybmFscztcbiAgICAgICAgICAgIGluaXRMYWJlbHMocmVmLCBsYWJlbHMpO1xuICAgICAgICAgICAgaW5pdEZvcm0ocmVmLCBmb3JtLCBpbnRlcm5hbHMpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBmdW5jdGlvbiBtdXRhdGlvbk9ic2VydmVyRXhpc3RzKCkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXIgIT09ICd1bmRlZmluZWQnO1xuICAgIH1cblxuICAgIGNsYXNzIFZhbGlkaXR5U3RhdGUge1xuICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICAgIHRoaXMuYmFkSW5wdXQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMucGF0dGVybk1pc21hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnJhbmdlT3ZlcmZsb3cgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMucmFuZ2VVbmRlcmZsb3cgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc3RlcE1pc21hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnRvb0xvbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMudG9vU2hvcnQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMudHlwZU1pc21hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMudmFsdWVNaXNzaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBPYmplY3Quc2VhbCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBzZXRWYWxpZCA9ICh2YWxpZGl0eU9iamVjdCkgPT4ge1xuICAgICAgICB2YWxpZGl0eU9iamVjdC5iYWRJbnB1dCA9IGZhbHNlO1xuICAgICAgICB2YWxpZGl0eU9iamVjdC5jdXN0b21FcnJvciA9IGZhbHNlO1xuICAgICAgICB2YWxpZGl0eU9iamVjdC5wYXR0ZXJuTWlzbWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgdmFsaWRpdHlPYmplY3QucmFuZ2VPdmVyZmxvdyA9IGZhbHNlO1xuICAgICAgICB2YWxpZGl0eU9iamVjdC5yYW5nZVVuZGVyZmxvdyA9IGZhbHNlO1xuICAgICAgICB2YWxpZGl0eU9iamVjdC5zdGVwTWlzbWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgdmFsaWRpdHlPYmplY3QudG9vTG9uZyA9IGZhbHNlO1xuICAgICAgICB2YWxpZGl0eU9iamVjdC50b29TaG9ydCA9IGZhbHNlO1xuICAgICAgICB2YWxpZGl0eU9iamVjdC50eXBlTWlzbWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgdmFsaWRpdHlPYmplY3QudmFsaWQgPSB0cnVlO1xuICAgICAgICB2YWxpZGl0eU9iamVjdC52YWx1ZU1pc3NpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHZhbGlkaXR5T2JqZWN0O1xuICAgIH07XG4gICAgY29uc3QgcmVjb25jaWxlVmFsaWRpdHkgPSAodmFsaWRpdHlPYmplY3QsIG5ld1N0YXRlLCBmb3JtKSA9PiB7XG4gICAgICAgIHZhbGlkaXR5T2JqZWN0LnZhbGlkID0gaXNWYWxpZChuZXdTdGF0ZSk7XG4gICAgICAgIE9iamVjdC5rZXlzKG5ld1N0YXRlKS5mb3JFYWNoKGtleSA9PiB2YWxpZGl0eU9iamVjdFtrZXldID0gbmV3U3RhdGVba2V5XSk7XG4gICAgICAgIGlmIChmb3JtKSB7XG4gICAgICAgICAgICBzZXRGb3JtVmFsaWRpdHkoZm9ybSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbGlkaXR5T2JqZWN0O1xuICAgIH07XG4gICAgY29uc3QgaXNWYWxpZCA9ICh2YWxpZGl0eVN0YXRlKSA9PiB7XG4gICAgICAgIGxldCB2YWxpZCA9IHRydWU7XG4gICAgICAgIGZvciAobGV0IGtleSBpbiB2YWxpZGl0eVN0YXRlKSB7XG4gICAgICAgICAgICBpZiAoa2V5ICE9PSAndmFsaWQnICYmIHZhbGlkaXR5U3RhdGVba2V5XSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWxpZDtcbiAgICB9O1xuXG4gICAgY29uc3QgY3VzdG9tU3RhdGVNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgIGZ1bmN0aW9uIGFkZFN0YXRlKHJlZiwgc3RhdGVOYW1lKSB7XG4gICAgICAgIHJlZi50b2dnbGVBdHRyaWJ1dGUoc3RhdGVOYW1lLCB0cnVlKTtcbiAgICAgICAgaWYgKHJlZi5wYXJ0KSB7XG4gICAgICAgICAgICByZWYucGFydC5hZGQoc3RhdGVOYW1lKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjbGFzcyBDdXN0b21TdGF0ZVNldCBleHRlbmRzIFNldCB7XG4gICAgICAgIHN0YXRpYyBnZXQgaXNQb2x5ZmlsbGVkKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3RydWN0b3IocmVmKSB7XG4gICAgICAgICAgICBzdXBlcigpO1xuICAgICAgICAgICAgaWYgKCFyZWYgfHwgIXJlZi50YWdOYW1lIHx8IHJlZi50YWdOYW1lLmluZGV4T2YoJy0nKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbGxlZ2FsIGNvbnN0cnVjdG9yJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjdXN0b21TdGF0ZU1hcC5zZXQodGhpcywgcmVmKTtcbiAgICAgICAgfVxuICAgICAgICBhZGQoc3RhdGUpIHtcbiAgICAgICAgICAgIGlmICghL14tLS8udGVzdChzdGF0ZSkgfHwgdHlwZW9mIHN0YXRlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oYEZhaWxlZCB0byBleGVjdXRlICdhZGQnIG9uICdDdXN0b21TdGF0ZVNldCc6IFRoZSBzcGVjaWZpZWQgdmFsdWUgJHtzdGF0ZX0gbXVzdCBzdGFydCB3aXRoICctLScuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBzdXBlci5hZGQoc3RhdGUpO1xuICAgICAgICAgICAgY29uc3QgcmVmID0gY3VzdG9tU3RhdGVNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgY29uc3Qgc3RhdGVOYW1lID0gYHN0YXRlJHtzdGF0ZX1gO1xuICAgICAgICAgICAgaWYgKHJlZi5pc0Nvbm5lY3RlZCkge1xuICAgICAgICAgICAgICAgIGFkZFN0YXRlKHJlZiwgc3RhdGVOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBhZGRTdGF0ZShyZWYsIHN0YXRlTmFtZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGNsZWFyKCkge1xuICAgICAgICAgICAgZm9yIChsZXQgW2VudHJ5XSBvZiB0aGlzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlKGVudHJ5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN1cGVyLmNsZWFyKCk7XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlKHN0YXRlKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBzdXBlci5kZWxldGUoc3RhdGUpO1xuICAgICAgICAgICAgY29uc3QgcmVmID0gY3VzdG9tU3RhdGVNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgaWYgKHJlZi5pc0Nvbm5lY3RlZCkge1xuICAgICAgICAgICAgICAgIHJlZi50b2dnbGVBdHRyaWJ1dGUoYHN0YXRlJHtzdGF0ZX1gLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlZi5wYXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZi5wYXJ0LnJlbW92ZShgc3RhdGUke3N0YXRlfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZWYudG9nZ2xlQXR0cmlidXRlKGBzdGF0ZSR7c3RhdGV9YCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVmLnBhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZi5wYXJ0LnJlbW92ZShgc3RhdGUke3N0YXRlfWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcbiAgICAgICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xuICAgICAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgICAgICAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZFNldChyZWNlaXZlciwgc3RhdGUsIHZhbHVlLCBraW5kLCBmKSB7XG4gICAgICAgIGlmIChraW5kID09PSBcIm1cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtcbiAgICAgICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xuICAgICAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xuICAgICAgICByZXR1cm4gKGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyLCB2YWx1ZSkgOiBmID8gZi52YWx1ZSA9IHZhbHVlIDogc3RhdGUuc2V0KHJlY2VpdmVyLCB2YWx1ZSkpLCB2YWx1ZTtcbiAgICB9XG5cbiAgICB2YXIgX0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uX2VsZW1lbnRzO1xuICAgIGNsYXNzIEhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uIHtcbiAgICAgICAgY29uc3RydWN0b3IoZWxlbWVudHMpIHtcbiAgICAgICAgICAgIF9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbl9lbGVtZW50cy5zZXQodGhpcywgdm9pZCAwKTtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uX2VsZW1lbnRzLCBlbGVtZW50cywgXCJmXCIpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZWxlbWVudHNbaV07XG4gICAgICAgICAgICAgICAgdGhpc1tpXSA9IGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuaGFzQXR0cmlidXRlKCduYW1lJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc1tlbGVtZW50LmdldEF0dHJpYnV0ZSgnbmFtZScpXSA9IGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgT2JqZWN0LmZyZWV6ZSh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgbGVuZ3RoKCkge1xuICAgICAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uX2VsZW1lbnRzLCBcImZcIikubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIFsoX0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uX2VsZW1lbnRzID0gbmV3IFdlYWtNYXAoKSwgU3ltYm9sLml0ZXJhdG9yKV0oKSB7XG4gICAgICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb25fZWxlbWVudHMsIFwiZlwiKVtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgICAgIH1cbiAgICAgICAgaXRlbShpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpc1tpXSA9PSBudWxsID8gbnVsbCA6IHRoaXNbaV07XG4gICAgICAgIH1cbiAgICAgICAgbmFtZWRJdGVtKG5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzW25hbWVdID09IG51bGwgPyBudWxsIDogdGhpc1tuYW1lXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhdGNoRm9ybVByb3RvdHlwZSgpIHtcbiAgICAgICAgY29uc3QgY2hlY2tWYWxpZGl0eSA9IEhUTUxGb3JtRWxlbWVudC5wcm90b3R5cGUuY2hlY2tWYWxpZGl0eTtcbiAgICAgICAgSFRNTEZvcm1FbGVtZW50LnByb3RvdHlwZS5jaGVja1ZhbGlkaXR5ID0gY2hlY2tWYWxpZGl0eU92ZXJyaWRlO1xuICAgICAgICBjb25zdCByZXBvcnRWYWxpZGl0eSA9IEhUTUxGb3JtRWxlbWVudC5wcm90b3R5cGUucmVwb3J0VmFsaWRpdHk7XG4gICAgICAgIEhUTUxGb3JtRWxlbWVudC5wcm90b3R5cGUucmVwb3J0VmFsaWRpdHkgPSByZXBvcnRWYWxpZGl0eU92ZXJyaWRlO1xuICAgICAgICBmdW5jdGlvbiBjaGVja1ZhbGlkaXR5T3ZlcnJpZGUoLi4uYXJncykge1xuICAgICAgICAgICAgbGV0IHJldHVyblZhbHVlID0gY2hlY2tWYWxpZGl0eS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIHJldHVybiBvdmVycmlkZUZvcm1NZXRob2QodGhpcywgcmV0dXJuVmFsdWUsICdjaGVja1ZhbGlkaXR5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gcmVwb3J0VmFsaWRpdHlPdmVycmlkZSguLi5hcmdzKSB7XG4gICAgICAgICAgICBsZXQgcmV0dXJuVmFsdWUgPSByZXBvcnRWYWxpZGl0eS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIHJldHVybiBvdmVycmlkZUZvcm1NZXRob2QodGhpcywgcmV0dXJuVmFsdWUsICdyZXBvcnRWYWxpZGl0eScpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgZ2V0IH0gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEhUTUxGb3JtRWxlbWVudC5wcm90b3R5cGUsICdlbGVtZW50cycpO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEZvcm1FbGVtZW50LnByb3RvdHlwZSwgJ2VsZW1lbnRzJywge1xuICAgICAgICAgICAgZ2V0KC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50cyA9IGdldC5jYWxsKHRoaXMsIC4uLmFyZ3MpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvbHlmaWxsZWRFbGVtZW50cyA9IEFycmF5LmZyb20oZm9ybUVsZW1lbnRzTWFwLmdldCh0aGlzKSB8fCBbXSk7XG4gICAgICAgICAgICAgICAgaWYgKHBvbHlmaWxsZWRFbGVtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBvcmRlcmVkRWxlbWVudHMgPSBBcnJheS5mcm9tKGVsZW1lbnRzKS5jb25jYXQocG9seWZpbGxlZEVsZW1lbnRzKS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKSAmIDIgPyAxIDogLTE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbihvcmRlcmVkRWxlbWVudHMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2xhc3MgRWxlbWVudEludGVybmFscyB7XG4gICAgICAgIHN0YXRpYyBnZXQgaXNQb2x5ZmlsbGVkKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3RydWN0b3IocmVmKSB7XG4gICAgICAgICAgICBpZiAoIXJlZiB8fCAhcmVmLnRhZ05hbWUgfHwgcmVmLnRhZ05hbWUuaW5kZXhPZignLScpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0lsbGVnYWwgY29uc3RydWN0b3InKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJvb3ROb2RlID0gcmVmLmdldFJvb3ROb2RlKCk7XG4gICAgICAgICAgICBjb25zdCB2YWxpZGl0eSA9IG5ldyBWYWxpZGl0eVN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlcyA9IG5ldyBDdXN0b21TdGF0ZVNldChyZWYpO1xuICAgICAgICAgICAgcmVmTWFwLnNldCh0aGlzLCByZWYpO1xuICAgICAgICAgICAgdmFsaWRpdHlNYXAuc2V0KHRoaXMsIHZhbGlkaXR5KTtcbiAgICAgICAgICAgIGludGVybmFsc01hcC5zZXQocmVmLCB0aGlzKTtcbiAgICAgICAgICAgIGluaXRBb20ocmVmLCB0aGlzKTtcbiAgICAgICAgICAgIGluaXRSZWYocmVmLCB0aGlzKTtcbiAgICAgICAgICAgIE9iamVjdC5zZWFsKHRoaXMpO1xuICAgICAgICAgICAgaWYgKHJvb3ROb2RlIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudCkge1xuICAgICAgICAgICAgICAgIGRlZmVyVXBncmFkZShyb290Tm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2hlY2tWYWxpZGl0eSgpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IHJlZk1hcC5nZXQodGhpcyk7XG4gICAgICAgICAgICB0aHJvd0lmTm90Rm9ybUFzc29jaWF0ZWQocmVmLCBgRmFpbGVkIHRvIGV4ZWN1dGUgJ2NoZWNrVmFsaWRpdHknIG9uICdFbGVtZW50SW50ZXJuYWxzJzogVGhlIHRhcmdldCBlbGVtZW50IGlzIG5vdCBhIGZvcm0tYXNzb2NpYXRlZCBjdXN0b20gZWxlbWVudC5gKTtcbiAgICAgICAgICAgIGlmICghdGhpcy53aWxsVmFsaWRhdGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHZhbGlkaXR5ID0gdmFsaWRpdHlNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgaWYgKCF2YWxpZGl0eS52YWxpZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkaXR5RXZlbnQgPSBuZXcgRXZlbnQoJ2ludmFsaWQnLCB7XG4gICAgICAgICAgICAgICAgICAgIGJ1YmJsZXM6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBjYW5jZWxhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBjb21wb3NlZDogZmFsc2VcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZWYuZGlzcGF0Y2hFdmVudCh2YWxpZGl0eUV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWxpZGl0eS52YWxpZDtcbiAgICAgICAgfVxuICAgICAgICBnZXQgZm9ybSgpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IHJlZk1hcC5nZXQodGhpcyk7XG4gICAgICAgICAgICB0aHJvd0lmTm90Rm9ybUFzc29jaWF0ZWQocmVmLCBgRmFpbGVkIHRvIHJlYWQgdGhlICdmb3JtJyBwcm9wZXJ0eSBmcm9tICdFbGVtZW50SW50ZXJuYWxzJzogVGhlIHRhcmdldCBlbGVtZW50IGlzIG5vdCBhIGZvcm0tYXNzb2NpYXRlZCBjdXN0b20gZWxlbWVudC5gKTtcbiAgICAgICAgICAgIGxldCBmb3JtO1xuICAgICAgICAgICAgaWYgKHJlZi5jb25zdHJ1Y3RvclsnZm9ybUFzc29jaWF0ZWQnXSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIGZvcm0gPSBmaW5kUGFyZW50Rm9ybShyZWYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZvcm07XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGxhYmVscygpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IHJlZk1hcC5nZXQodGhpcyk7XG4gICAgICAgICAgICB0aHJvd0lmTm90Rm9ybUFzc29jaWF0ZWQocmVmLCBgRmFpbGVkIHRvIHJlYWQgdGhlICdsYWJlbHMnIHByb3BlcnR5IGZyb20gJ0VsZW1lbnRJbnRlcm5hbHMnOiBUaGUgdGFyZ2V0IGVsZW1lbnQgaXMgbm90IGEgZm9ybS1hc3NvY2lhdGVkIGN1c3RvbSBlbGVtZW50LmApO1xuICAgICAgICAgICAgY29uc3QgaWQgPSByZWYuZ2V0QXR0cmlidXRlKCdpZCcpO1xuICAgICAgICAgICAgY29uc3QgaG9zdFJvb3QgPSByZWYuZ2V0Um9vdE5vZGUoKTtcbiAgICAgICAgICAgIGlmIChob3N0Um9vdCAmJiBpZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3N0Um9vdC5xdWVyeVNlbGVjdG9yQWxsKGBbZm9yPVwiJHtpZH1cIl1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICByZXBvcnRWYWxpZGl0eSgpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IHJlZk1hcC5nZXQodGhpcyk7XG4gICAgICAgICAgICB0aHJvd0lmTm90Rm9ybUFzc29jaWF0ZWQocmVmLCBgRmFpbGVkIHRvIGV4ZWN1dGUgJ3JlcG9ydFZhbGlkaXR5JyBvbiAnRWxlbWVudEludGVybmFscyc6IFRoZSB0YXJnZXQgZWxlbWVudCBpcyBub3QgYSBmb3JtLWFzc29jaWF0ZWQgY3VzdG9tIGVsZW1lbnQuYCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMud2lsbFZhbGlkYXRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB2YWxpZCA9IHRoaXMuY2hlY2tWYWxpZGl0eSgpO1xuICAgICAgICAgICAgY29uc3QgYW5jaG9yID0gdmFsaWRhdGlvbkFuY2hvck1hcC5nZXQodGhpcyk7XG4gICAgICAgICAgICBpZiAoYW5jaG9yICYmICFyZWYuY29uc3RydWN0b3JbJ2Zvcm1Bc3NvY2lhdGVkJ10pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKGBGYWlsZWQgdG8gZXhlY3V0ZSAncmVwb3J0VmFsaWRpdHknIG9uICdFbGVtZW50SW50ZXJuYWxzJzogVGhlIHRhcmdldCBlbGVtZW50IGlzIG5vdCBhIGZvcm0tYXNzb2NpYXRlZCBjdXN0b20gZWxlbWVudC5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdmFsaWQgJiYgYW5jaG9yKSB7XG4gICAgICAgICAgICAgICAgcmVmLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgYW5jaG9yLmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmFsaWQ7XG4gICAgICAgIH1cbiAgICAgICAgc2V0Rm9ybVZhbHVlKHZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCByZWYgPSByZWZNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgdGhyb3dJZk5vdEZvcm1Bc3NvY2lhdGVkKHJlZiwgYEZhaWxlZCB0byBleGVjdXRlICdzZXRGb3JtVmFsdWUnIG9uICdFbGVtZW50SW50ZXJuYWxzJzogVGhlIHRhcmdldCBlbGVtZW50IGlzIG5vdCBhIGZvcm0tYXNzb2NpYXRlZCBjdXN0b20gZWxlbWVudC5gKTtcbiAgICAgICAgICAgIHJlbW92ZUhpZGRlbklucHV0cyh0aGlzKTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmICEodmFsdWUgaW5zdGFuY2VvZiBGb3JtRGF0YSkpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVmLmdldEF0dHJpYnV0ZSgnbmFtZScpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhpZGRlbklucHV0ID0gY3JlYXRlSGlkZGVuSW5wdXQocmVmLCB0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgaGlkZGVuSW5wdXQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlIGluc3RhbmNlb2YgRm9ybURhdGEpIHtcbiAgICAgICAgICAgICAgICBBcnJheS5mcm9tKHZhbHVlKS5yZXZlcnNlKCkuZm9yRWFjaCgoW2Zvcm1EYXRhS2V5LCBmb3JtRGF0YVZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZvcm1EYXRhVmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoaWRkZW5JbnB1dCA9IGNyZWF0ZUhpZGRlbklucHV0KHJlZiwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBoaWRkZW5JbnB1dC5uYW1lID0gZm9ybURhdGFLZXk7XG4gICAgICAgICAgICAgICAgICAgICAgICBoaWRkZW5JbnB1dC52YWx1ZSA9IGZvcm1EYXRhVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlZlZhbHVlTWFwLnNldChyZWYsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBzZXRWYWxpZGl0eSh2YWxpZGl0eUNoYW5nZXMsIHZhbGlkYXRpb25NZXNzYWdlLCBhbmNob3IpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IHJlZk1hcC5nZXQodGhpcyk7XG4gICAgICAgICAgICB0aHJvd0lmTm90Rm9ybUFzc29jaWF0ZWQocmVmLCBgRmFpbGVkIHRvIGV4ZWN1dGUgJ3NldFZhbGlkaXR5JyBvbiAnRWxlbWVudEludGVybmFscyc6IFRoZSB0YXJnZXQgZWxlbWVudCBpcyBub3QgYSBmb3JtLWFzc29jaWF0ZWQgY3VzdG9tIGVsZW1lbnQuYCk7XG4gICAgICAgICAgICBpZiAoIXZhbGlkaXR5Q2hhbmdlcykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ZhaWxlZCB0byBleGVjdXRlIFxcJ3NldFZhbGlkaXR5XFwnIG9uIFxcJ0VsZW1lbnRJbnRlcm5hbHNcXCc6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IDAgcHJlc2VudC4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhbGlkYXRpb25BbmNob3JNYXAuc2V0KHRoaXMsIGFuY2hvcik7XG4gICAgICAgICAgICBjb25zdCB2YWxpZGl0eSA9IHZhbGlkaXR5TWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkaXR5Q2hhbmdlc09iaiA9IHt9O1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdmFsaWRpdHlDaGFuZ2VzKSB7XG4gICAgICAgICAgICAgICAgdmFsaWRpdHlDaGFuZ2VzT2JqW2tleV0gPSB2YWxpZGl0eUNoYW5nZXNba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyh2YWxpZGl0eUNoYW5nZXNPYmopLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHNldFZhbGlkKHZhbGlkaXR5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNoZWNrID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB2YWxpZGl0eSksIHZhbGlkaXR5Q2hhbmdlc09iaik7XG4gICAgICAgICAgICBkZWxldGUgY2hlY2sudmFsaWQ7XG4gICAgICAgICAgICBjb25zdCB7IHZhbGlkIH0gPSByZWNvbmNpbGVWYWxpZGl0eSh2YWxpZGl0eSwgY2hlY2ssIHRoaXMuZm9ybSk7XG4gICAgICAgICAgICBpZiAoIXZhbGlkICYmICF2YWxpZGF0aW9uTWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oYEZhaWxlZCB0byBleGVjdXRlICdzZXRWYWxpZGl0eScgb24gJ0VsZW1lbnRJbnRlcm5hbHMnOiBUaGUgc2Vjb25kIGFyZ3VtZW50IHNob3VsZCBub3QgYmUgZW1wdHkgaWYgb25lIG9yIG1vcmUgZmxhZ3MgaW4gdGhlIGZpcnN0IGFyZ3VtZW50IGFyZSB0cnVlLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFsaWRhdGlvbk1lc3NhZ2VNYXAuc2V0KHRoaXMsIHZhbGlkID8gJycgOiB2YWxpZGF0aW9uTWVzc2FnZSk7XG4gICAgICAgICAgICBpZiAocmVmLmlzQ29ubmVjdGVkKSB7XG4gICAgICAgICAgICAgICAgcmVmLnRvZ2dsZUF0dHJpYnV0ZSgnaW50ZXJuYWxzLWludmFsaWQnLCAhdmFsaWQpO1xuICAgICAgICAgICAgICAgIHJlZi50b2dnbGVBdHRyaWJ1dGUoJ2ludGVybmFscy12YWxpZCcsIHZhbGlkKTtcbiAgICAgICAgICAgICAgICByZWYuc2V0QXR0cmlidXRlKCdhcmlhLWludmFsaWQnLCBgJHshdmFsaWR9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YWxpZGl0eVVwZ3JhZGVNYXAuc2V0KHJlZiwgdGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHNoYWRvd1Jvb3QoKSB7XG4gICAgICAgICAgICBjb25zdCByZWYgPSByZWZNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgY29uc3Qgc2hhZG93Um9vdCA9IHNoYWRvd1Jvb3RNYXAuZ2V0KHJlZik7XG4gICAgICAgICAgICBpZiAoc2hhZG93Um9vdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzaGFkb3dSb290O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHZhbGlkYXRpb25NZXNzYWdlKCkge1xuICAgICAgICAgICAgY29uc3QgcmVmID0gcmVmTWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIHRocm93SWZOb3RGb3JtQXNzb2NpYXRlZChyZWYsIGBGYWlsZWQgdG8gcmVhZCB0aGUgJ3ZhbGlkYXRpb25NZXNzYWdlJyBwcm9wZXJ0eSBmcm9tICdFbGVtZW50SW50ZXJuYWxzJzogVGhlIHRhcmdldCBlbGVtZW50IGlzIG5vdCBhIGZvcm0tYXNzb2NpYXRlZCBjdXN0b20gZWxlbWVudC5gKTtcbiAgICAgICAgICAgIHJldHVybiB2YWxpZGF0aW9uTWVzc2FnZU1hcC5nZXQodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHZhbGlkaXR5KCkge1xuICAgICAgICAgICAgY29uc3QgcmVmID0gcmVmTWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIHRocm93SWZOb3RGb3JtQXNzb2NpYXRlZChyZWYsIGBGYWlsZWQgdG8gcmVhZCB0aGUgJ3ZhbGlkaXR5JyBwcm9wZXJ0eSBmcm9tICdFbGVtZW50SW50ZXJuYWxzJzogVGhlIHRhcmdldCBlbGVtZW50IGlzIG5vdCBhIGZvcm0tYXNzb2NpYXRlZCBjdXN0b20gZWxlbWVudC5gKTtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkaXR5ID0gdmFsaWRpdHlNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgcmV0dXJuIHZhbGlkaXR5O1xuICAgICAgICB9XG4gICAgICAgIGdldCB3aWxsVmFsaWRhdGUoKSB7XG4gICAgICAgICAgICBjb25zdCByZWYgPSByZWZNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgdGhyb3dJZk5vdEZvcm1Bc3NvY2lhdGVkKHJlZiwgYEZhaWxlZCB0byByZWFkIHRoZSAnd2lsbFZhbGlkYXRlJyBwcm9wZXJ0eSBmcm9tICdFbGVtZW50SW50ZXJuYWxzJzogVGhlIHRhcmdldCBlbGVtZW50IGlzIG5vdCBhIGZvcm0tYXNzb2NpYXRlZCBjdXN0b20gZWxlbWVudC5gKTtcbiAgICAgICAgICAgIGlmICgocmVmLmRpc2FibGVkIHx8IHJlZi5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykpIHx8XG4gICAgICAgICAgICAgICAgcmVmLmhhc0F0dHJpYnV0ZSgncmVhZG9ubHknKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzRWxlbWVudEludGVybmFsc1N1cHBvcnRlZCgpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8ICF3aW5kb3cuRWxlbWVudEludGVybmFscyB8fCAhSFRNTEVsZW1lbnQucHJvdG90eXBlLmF0dGFjaEludGVybmFscykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNsYXNzIEVsZW1lbnRJbnRlcm5hbHNGZWF0dXJlRGV0ZWN0aW9uIGV4dGVuZHMgSFRNTEVsZW1lbnQge1xuICAgICAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmludGVybmFscyA9IHRoaXMuYXR0YWNoSW50ZXJuYWxzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmFuZG9tTmFtZSA9IGBlbGVtZW50LWludGVybmFscy1mZWF0dXJlLWRldGVjdGlvbi0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnJlcGxhY2UoL1teYS16XSsvZywgJycpfWA7XG4gICAgICAgIGN1c3RvbUVsZW1lbnRzLmRlZmluZShyYW5kb21OYW1lLCBFbGVtZW50SW50ZXJuYWxzRmVhdHVyZURldGVjdGlvbik7XG4gICAgICAgIGNvbnN0IGZlYXR1cmVEZXRlY3Rpb25FbGVtZW50ID0gbmV3IEVsZW1lbnRJbnRlcm5hbHNGZWF0dXJlRGV0ZWN0aW9uKCk7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAnc2hhZG93Um9vdCcsXG4gICAgICAgICAgICAnZm9ybScsXG4gICAgICAgICAgICAnd2lsbFZhbGlkYXRlJyxcbiAgICAgICAgICAgICd2YWxpZGl0eScsXG4gICAgICAgICAgICAndmFsaWRhdGlvbk1lc3NhZ2UnLFxuICAgICAgICAgICAgJ2xhYmVscycsXG4gICAgICAgICAgICAnc2V0Rm9ybVZhbHVlJyxcbiAgICAgICAgICAgICdzZXRWYWxpZGl0eScsXG4gICAgICAgICAgICAnY2hlY2tWYWxpZGl0eScsXG4gICAgICAgICAgICAncmVwb3J0VmFsaWRpdHknXG4gICAgICAgIF0uZXZlcnkocHJvcCA9PiBwcm9wIGluIGZlYXR1cmVEZXRlY3Rpb25FbGVtZW50LmludGVybmFscyk7XG4gICAgfVxuICAgIGxldCBoYXNFbGVtZW50SW50ZXJuYWxzUG9seWZpbGxCZWVuQXBwbGllZCA9IGZhbHNlO1xuICAgIGxldCBoYXNDdXN0b21TdGF0ZVNldFBvbHlmaWxsQmVlbkFwcGxpZWQgPSBmYWxzZTtcbiAgICBmdW5jdGlvbiBmb3JjZUN1c3RvbVN0YXRlU2V0UG9seWZpbGwoYXR0YWNoSW50ZXJuYWxzKSB7XG4gICAgICAgIGlmIChoYXNDdXN0b21TdGF0ZVNldFBvbHlmaWxsQmVlbkFwcGxpZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBoYXNDdXN0b21TdGF0ZVNldFBvbHlmaWxsQmVlbkFwcGxpZWQgPSB0cnVlO1xuICAgICAgICB3aW5kb3cuQ3VzdG9tU3RhdGVTZXQgPSBDdXN0b21TdGF0ZVNldDtcbiAgICAgICAgaWYgKGF0dGFjaEludGVybmFscykge1xuICAgICAgICAgICAgSFRNTEVsZW1lbnQucHJvdG90eXBlLmF0dGFjaEludGVybmFscyA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW50ZXJuYWxzID0gYXR0YWNoSW50ZXJuYWxzLmNhbGwodGhpcywgYXJncyk7XG4gICAgICAgICAgICAgICAgaW50ZXJuYWxzLnN0YXRlcyA9IG5ldyBDdXN0b21TdGF0ZVNldCh0aGlzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxzO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBmb3JjZUVsZW1lbnRJbnRlcm5hbHNQb2x5ZmlsbChmb3JjZUN1c3RvbVN0YXRlU2V0ID0gdHJ1ZSkge1xuICAgICAgICBpZiAoaGFzRWxlbWVudEludGVybmFsc1BvbHlmaWxsQmVlbkFwcGxpZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBoYXNFbGVtZW50SW50ZXJuYWxzUG9seWZpbGxCZWVuQXBwbGllZCA9IHRydWU7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgd2luZG93LkVsZW1lbnRJbnRlcm5hbHMgPSBFbGVtZW50SW50ZXJuYWxzO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc3QgZGVmaW5lID0gQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LnByb3RvdHlwZS5kZWZpbmU7XG4gICAgICAgICAgICBDdXN0b21FbGVtZW50UmVnaXN0cnkucHJvdG90eXBlLmRlZmluZSA9IGZ1bmN0aW9uIChuYW1lLCBjb25zdHJ1Y3Rvciwgb3B0aW9ucykge1xuICAgICAgICAgICAgICAgIGlmIChjb25zdHJ1Y3Rvci5mb3JtQXNzb2NpYXRlZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb25uZWN0ZWRDYWxsYmFjayA9IGNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25uZWN0ZWRDYWxsYmFjaztcbiAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3IucHJvdG90eXBlLmNvbm5lY3RlZENhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25uZWN0ZWRDYWxsYmFja01hcC5oYXModGhpcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0ZWRDYWxsYmFja01hcC5zZXQodGhpcywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldERpc2FibGVkKHRoaXMsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25uZWN0ZWRDYWxsYmFjayAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGVkQ2FsbGJhY2suYXBwbHkodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGdyYWRlSW50ZXJuYWxzKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWZpbmUuY2FsbCh0aGlzLCBuYW1lLCBjb25zdHJ1Y3Rvciwgb3B0aW9ucyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgSFRNTEVsZW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBIVE1MRWxlbWVudC5wcm90b3R5cGUuYXR0YWNoSW50ZXJuYWxzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy50YWdOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy50YWdOYW1lLmluZGV4T2YoJy0nKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZXhlY3V0ZSAnYXR0YWNoSW50ZXJuYWxzJyBvbiAnSFRNTEVsZW1lbnQnOiBVbmFibGUgdG8gYXR0YWNoIEVsZW1lbnRJbnRlcm5hbHMgdG8gbm9uLWN1c3RvbSBlbGVtZW50cy5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGludGVybmFsc01hcC5oYXModGhpcykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihgRE9NRXhjZXB0aW9uOiBGYWlsZWQgdG8gZXhlY3V0ZSAnYXR0YWNoSW50ZXJuYWxzJyBvbiAnSFRNTEVsZW1lbnQnOiBFbGVtZW50SW50ZXJuYWxzIGZvciB0aGUgc3BlY2lmaWVkIGVsZW1lbnQgd2FzIGFscmVhZHkgYXR0YWNoZWQuYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRWxlbWVudEludGVybmFscyh0aGlzKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBFbGVtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgZnVuY3Rpb24gYXR0YWNoU2hhZG93T2JzZXJ2ZXIoLi4uYXJncykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNoYWRvd1Jvb3QgPSBhdHRhY2hTaGFkb3cuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICAgICAgc2hhZG93Um9vdE1hcC5zZXQodGhpcywgc2hhZG93Um9vdCk7XG4gICAgICAgICAgICAgICAgaWYgKG11dGF0aW9uT2JzZXJ2ZXJFeGlzdHMoKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKG9ic2VydmVyQ2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICBpZiAod2luZG93LlNoYWR5RE9NKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5vYnNlcnZlKHRoaXMsIG9ic2VydmVyQ29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm9ic2VydmUoc2hhZG93Um9vdCwgb2JzZXJ2ZXJDb25maWcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHNoYWRvd0hvc3RzTWFwLnNldCh0aGlzLCBvYnNlcnZlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBzaGFkb3dSb290O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYXR0YWNoU2hhZG93ID0gRWxlbWVudC5wcm90b3R5cGUuYXR0YWNoU2hhZG93O1xuICAgICAgICAgICAgRWxlbWVudC5wcm90b3R5cGUuYXR0YWNoU2hhZG93ID0gYXR0YWNoU2hhZG93T2JzZXJ2ZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG11dGF0aW9uT2JzZXJ2ZXJFeGlzdHMoKSAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjb25zdCBkb2N1bWVudE9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIob2JzZXJ2ZXJDYWxsYmFjayk7XG4gICAgICAgICAgICBkb2N1bWVudE9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBvYnNlcnZlckNvbmZpZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBIVE1MRm9ybUVsZW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBwYXRjaEZvcm1Qcm90b3R5cGUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9yY2VDdXN0b21TdGF0ZVNldCB8fFxuICAgICAgICAgICAgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgIXdpbmRvdy5DdXN0b21TdGF0ZVNldCkpIHtcbiAgICAgICAgICAgIGZvcmNlQ3VzdG9tU3RhdGVTZXRQb2x5ZmlsbCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaXNDZVBvbHlmaWxsID0gISFjdXN0b21FbGVtZW50cy5wb2x5ZmlsbFdyYXBGbHVzaENhbGxiYWNrO1xuICAgIGlmICghaXNDZVBvbHlmaWxsKSB7XG4gICAgICAgIGlmICghaXNFbGVtZW50SW50ZXJuYWxzU3VwcG9ydGVkKCkpIHtcbiAgICAgICAgICAgIGZvcmNlRWxlbWVudEludGVybmFsc1BvbHlmaWxsKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmICF3aW5kb3cuQ3VzdG9tU3RhdGVTZXQpIHtcbiAgICAgICAgICAgIGZvcmNlQ3VzdG9tU3RhdGVTZXRQb2x5ZmlsbChIVE1MRWxlbWVudC5wcm90b3R5cGUuYXR0YWNoSW50ZXJuYWxzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGV4cG9ydHMuZm9yY2VDdXN0b21TdGF0ZVNldFBvbHlmaWxsID0gZm9yY2VDdXN0b21TdGF0ZVNldFBvbHlmaWxsO1xuICAgIGV4cG9ydHMuZm9yY2VFbGVtZW50SW50ZXJuYWxzUG9seWZpbGwgPSBmb3JjZUVsZW1lbnRJbnRlcm5hbHNQb2x5ZmlsbDtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbiAgICByZXR1cm4gZXhwb3J0cztcblxufSkoe30pO1xuIiwgIi8qIVxuICogTUlUIExpY2Vuc2VcbiAqIFxuICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjQgUGVjdWxpYXIgVmVudHVyZXMsIExMQ1xuICogXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKiBcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqIFxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKiBcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IEFSUkFZX0JVRkZFUl9OQU1FID0gXCJbb2JqZWN0IEFycmF5QnVmZmVyXVwiO1xuY2xhc3MgQnVmZmVyU291cmNlQ29udmVydGVyIHtcbiAgICBzdGF0aWMgaXNBcnJheUJ1ZmZlcihkYXRhKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZGF0YSkgPT09IEFSUkFZX0JVRkZFUl9OQU1FO1xuICAgIH1cbiAgICBzdGF0aWMgdG9BcnJheUJ1ZmZlcihkYXRhKSB7XG4gICAgICAgIGlmICh0aGlzLmlzQXJyYXlCdWZmZXIoZGF0YSkpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhLmJ5dGVMZW5ndGggPT09IGRhdGEuYnVmZmVyLmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhLmJ1ZmZlcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0YS5ieXRlT2Zmc2V0ID09PSAwICYmIGRhdGEuYnl0ZUxlbmd0aCA9PT0gZGF0YS5idWZmZXIuYnl0ZUxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGEuYnVmZmVyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnRvVWludDhBcnJheShkYXRhLmJ1ZmZlcilcbiAgICAgICAgICAgIC5zbGljZShkYXRhLmJ5dGVPZmZzZXQsIGRhdGEuYnl0ZU9mZnNldCArIGRhdGEuYnl0ZUxlbmd0aClcbiAgICAgICAgICAgIC5idWZmZXI7XG4gICAgfVxuICAgIHN0YXRpYyB0b1VpbnQ4QXJyYXkoZGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy50b1ZpZXcoZGF0YSwgVWludDhBcnJheSk7XG4gICAgfVxuICAgIHN0YXRpYyB0b1ZpZXcoZGF0YSwgdHlwZSkge1xuICAgICAgICBpZiAoZGF0YS5jb25zdHJ1Y3RvciA9PT0gdHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNBcnJheUJ1ZmZlcihkYXRhKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyB0eXBlKGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzQXJyYXlCdWZmZXJWaWV3KGRhdGEpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IHR5cGUoZGF0YS5idWZmZXIsIGRhdGEuYnl0ZU9mZnNldCwgZGF0YS5ieXRlTGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVGhlIHByb3ZpZGVkIHZhbHVlIGlzIG5vdCBvZiB0eXBlICcoQXJyYXlCdWZmZXIgb3IgQXJyYXlCdWZmZXJWaWV3KSdcIik7XG4gICAgfVxuICAgIHN0YXRpYyBpc0J1ZmZlclNvdXJjZShkYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzQXJyYXlCdWZmZXJWaWV3KGRhdGEpXG4gICAgICAgICAgICB8fCB0aGlzLmlzQXJyYXlCdWZmZXIoZGF0YSk7XG4gICAgfVxuICAgIHN0YXRpYyBpc0FycmF5QnVmZmVyVmlldyhkYXRhKSB7XG4gICAgICAgIHJldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcoZGF0YSlcbiAgICAgICAgICAgIHx8IChkYXRhICYmIHRoaXMuaXNBcnJheUJ1ZmZlcihkYXRhLmJ1ZmZlcikpO1xuICAgIH1cbiAgICBzdGF0aWMgaXNFcXVhbChhLCBiKSB7XG4gICAgICAgIGNvbnN0IGFWaWV3ID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShhKTtcbiAgICAgICAgY29uc3QgYlZpZXcgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGIpO1xuICAgICAgICBpZiAoYVZpZXcubGVuZ3RoICE9PSBiVmlldy5ieXRlTGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhVmlldy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGFWaWV3W2ldICE9PSBiVmlld1tpXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgc3RhdGljIGNvbmNhdCguLi5hcmdzKSB7XG4gICAgICAgIGxldCBidWZmZXJzO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhcmdzWzBdKSAmJiAhKGFyZ3NbMV0gaW5zdGFuY2VvZiBGdW5jdGlvbikpIHtcbiAgICAgICAgICAgIGJ1ZmZlcnMgPSBhcmdzWzBdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYXJnc1swXSkgJiYgYXJnc1sxXSBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICAgICAgICBidWZmZXJzID0gYXJnc1swXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICAgICAgICAgIGJ1ZmZlcnMgPSBhcmdzLnNsaWNlKDAsIGFyZ3MubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBidWZmZXJzID0gYXJncztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgc2l6ZSA9IDA7XG4gICAgICAgIGZvciAoY29uc3QgYnVmZmVyIG9mIGJ1ZmZlcnMpIHtcbiAgICAgICAgICAgIHNpemUgKz0gYnVmZmVyLmJ5dGVMZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoc2l6ZSk7XG4gICAgICAgIGxldCBvZmZzZXQgPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IGJ1ZmZlciBvZiBidWZmZXJzKSB7XG4gICAgICAgICAgICBjb25zdCB2aWV3ID0gdGhpcy50b1VpbnQ4QXJyYXkoYnVmZmVyKTtcbiAgICAgICAgICAgIHJlcy5zZXQodmlldywgb2Zmc2V0KTtcbiAgICAgICAgICAgIG9mZnNldCArPSB2aWV3Lmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJnc1thcmdzLmxlbmd0aCAtIDFdIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRvVmlldyhyZXMsIGFyZ3NbYXJncy5sZW5ndGggLSAxXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcy5idWZmZXI7XG4gICAgfVxufVxuXG5jb25zdCBTVFJJTkdfVFlQRSA9IFwic3RyaW5nXCI7XG5jb25zdCBIRVhfUkVHRVggPSAvXlswLTlhLWZcXHNdKyQvaTtcbmNvbnN0IEJBU0U2NF9SRUdFWCA9IC9eKD86W0EtWmEtejAtOSsvXXs0fSkqKD86W0EtWmEtejAtOSsvXXsyfT09fFtBLVphLXowLTkrL117M309KT8kLztcbmNvbnN0IEJBU0U2NFVSTF9SRUdFWCA9IC9eW2EtekEtWjAtOS1fXSskLztcbmNsYXNzIFV0ZjhDb252ZXJ0ZXIge1xuICAgIHN0YXRpYyBmcm9tU3RyaW5nKHRleHQpIHtcbiAgICAgICAgY29uc3QgcyA9IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudCh0ZXh0KSk7XG4gICAgICAgIGNvbnN0IHVpbnRBcnJheSA9IG5ldyBVaW50OEFycmF5KHMubGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB1aW50QXJyYXlbaV0gPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVpbnRBcnJheS5idWZmZXI7XG4gICAgfVxuICAgIHN0YXRpYyB0b1N0cmluZyhidWZmZXIpIHtcbiAgICAgICAgY29uc3QgYnVmID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShidWZmZXIpO1xuICAgICAgICBsZXQgZW5jb2RlZFN0cmluZyA9IFwiXCI7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnVmLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBlbmNvZGVkU3RyaW5nICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkZWNvZGVkU3RyaW5nID0gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShlbmNvZGVkU3RyaW5nKSk7XG4gICAgICAgIHJldHVybiBkZWNvZGVkU3RyaW5nO1xuICAgIH1cbn1cbmNsYXNzIFV0ZjE2Q29udmVydGVyIHtcbiAgICBzdGF0aWMgdG9TdHJpbmcoYnVmZmVyLCBsaXR0bGVFbmRpYW4gPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBhcnJheUJ1ZmZlciA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKGJ1ZmZlcik7XG4gICAgICAgIGNvbnN0IGRhdGFWaWV3ID0gbmV3IERhdGFWaWV3KGFycmF5QnVmZmVyKTtcbiAgICAgICAgbGV0IHJlcyA9IFwiXCI7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXlCdWZmZXIuYnl0ZUxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgICAgICBjb25zdCBjb2RlID0gZGF0YVZpZXcuZ2V0VWludDE2KGksIGxpdHRsZUVuZGlhbik7XG4gICAgICAgICAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBzdGF0aWMgZnJvbVN0cmluZyh0ZXh0LCBsaXR0bGVFbmRpYW4gPSBmYWxzZSkge1xuICAgICAgICBjb25zdCByZXMgPSBuZXcgQXJyYXlCdWZmZXIodGV4dC5sZW5ndGggKiAyKTtcbiAgICAgICAgY29uc3QgZGF0YVZpZXcgPSBuZXcgRGF0YVZpZXcocmVzKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBkYXRhVmlldy5zZXRVaW50MTYoaSAqIDIsIHRleHQuY2hhckNvZGVBdChpKSwgbGl0dGxlRW5kaWFuKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbn1cbmNsYXNzIENvbnZlcnQge1xuICAgIHN0YXRpYyBpc0hleChkYXRhKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgZGF0YSA9PT0gU1RSSU5HX1RZUEVcbiAgICAgICAgICAgICYmIEhFWF9SRUdFWC50ZXN0KGRhdGEpO1xuICAgIH1cbiAgICBzdGF0aWMgaXNCYXNlNjQoZGF0YSkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGRhdGEgPT09IFNUUklOR19UWVBFXG4gICAgICAgICAgICAmJiBCQVNFNjRfUkVHRVgudGVzdChkYXRhKTtcbiAgICB9XG4gICAgc3RhdGljIGlzQmFzZTY0VXJsKGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBkYXRhID09PSBTVFJJTkdfVFlQRVxuICAgICAgICAgICAgJiYgQkFTRTY0VVJMX1JFR0VYLnRlc3QoZGF0YSk7XG4gICAgfVxuICAgIHN0YXRpYyBUb1N0cmluZyhidWZmZXIsIGVuYyA9IFwidXRmOFwiKSB7XG4gICAgICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoYnVmZmVyKTtcbiAgICAgICAgc3dpdGNoIChlbmMudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcInV0ZjhcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5Ub1V0ZjhTdHJpbmcoYnVmKTtcbiAgICAgICAgICAgIGNhc2UgXCJiaW5hcnlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5Ub0JpbmFyeShidWYpO1xuICAgICAgICAgICAgY2FzZSBcImhleFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLlRvSGV4KGJ1Zik7XG4gICAgICAgICAgICBjYXNlIFwiYmFzZTY0XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuVG9CYXNlNjQoYnVmKTtcbiAgICAgICAgICAgIGNhc2UgXCJiYXNlNjR1cmxcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5Ub0Jhc2U2NFVybChidWYpO1xuICAgICAgICAgICAgY2FzZSBcInV0ZjE2bGVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gVXRmMTZDb252ZXJ0ZXIudG9TdHJpbmcoYnVmLCB0cnVlKTtcbiAgICAgICAgICAgIGNhc2UgXCJ1dGYxNlwiOlxuICAgICAgICAgICAgY2FzZSBcInV0ZjE2YmVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gVXRmMTZDb252ZXJ0ZXIudG9TdHJpbmcoYnVmKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHR5cGUgb2YgZW5jb2RpbmcgJyR7ZW5jfSdgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgRnJvbVN0cmluZyhzdHIsIGVuYyA9IFwidXRmOFwiKSB7XG4gICAgICAgIGlmICghc3RyKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoZW5jLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJ1dGY4XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuRnJvbVV0ZjhTdHJpbmcoc3RyKTtcbiAgICAgICAgICAgIGNhc2UgXCJiaW5hcnlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5Gcm9tQmluYXJ5KHN0cik7XG4gICAgICAgICAgICBjYXNlIFwiaGV4XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuRnJvbUhleChzdHIpO1xuICAgICAgICAgICAgY2FzZSBcImJhc2U2NFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkZyb21CYXNlNjQoc3RyKTtcbiAgICAgICAgICAgIGNhc2UgXCJiYXNlNjR1cmxcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5Gcm9tQmFzZTY0VXJsKHN0cik7XG4gICAgICAgICAgICBjYXNlIFwidXRmMTZsZVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBVdGYxNkNvbnZlcnRlci5mcm9tU3RyaW5nKHN0ciwgdHJ1ZSk7XG4gICAgICAgICAgICBjYXNlIFwidXRmMTZcIjpcbiAgICAgICAgICAgIGNhc2UgXCJ1dGYxNmJlXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFV0ZjE2Q29udmVydGVyLmZyb21TdHJpbmcoc3RyKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHR5cGUgb2YgZW5jb2RpbmcgJyR7ZW5jfSdgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgVG9CYXNlNjQoYnVmZmVyKSB7XG4gICAgICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoYnVmZmVyKTtcbiAgICAgICAgaWYgKHR5cGVvZiBidG9hICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBjb25zdCBiaW5hcnkgPSB0aGlzLlRvU3RyaW5nKGJ1ZiwgXCJiaW5hcnlcIik7XG4gICAgICAgICAgICByZXR1cm4gYnRvYShiaW5hcnkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGJ1ZikudG9TdHJpbmcoXCJiYXNlNjRcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIEZyb21CYXNlNjQoYmFzZTY0KSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZCA9IHRoaXMuZm9ybWF0U3RyaW5nKGJhc2U2NCk7XG4gICAgICAgIGlmICghZm9ybWF0dGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgICAgICB9XG4gICAgICAgIGlmICghQ29udmVydC5pc0Jhc2U2NChmb3JtYXR0ZWQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgJ2Jhc2U2NFRleHQnIGlzIG5vdCBCYXNlNjQgZW5jb2RlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGF0b2IgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLkZyb21CaW5hcnkoYXRvYihmb3JtYXR0ZWQpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShCdWZmZXIuZnJvbShmb3JtYXR0ZWQsIFwiYmFzZTY0XCIpKS5idWZmZXI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIEZyb21CYXNlNjRVcmwoYmFzZTY0dXJsKSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZCA9IHRoaXMuZm9ybWF0U3RyaW5nKGJhc2U2NHVybCk7XG4gICAgICAgIGlmICghZm9ybWF0dGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgICAgICB9XG4gICAgICAgIGlmICghQ29udmVydC5pc0Jhc2U2NFVybChmb3JtYXR0ZWQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgJ2Jhc2U2NHVybCcgaXMgbm90IEJhc2U2NFVybCBlbmNvZGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLkZyb21CYXNlNjQodGhpcy5CYXNlNjRQYWRkaW5nKGZvcm1hdHRlZC5yZXBsYWNlKC9cXC0vZywgXCIrXCIpLnJlcGxhY2UoL1xcXy9nLCBcIi9cIikpKTtcbiAgICB9XG4gICAgc3RhdGljIFRvQmFzZTY0VXJsKGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuVG9CYXNlNjQoZGF0YSkucmVwbGFjZSgvXFwrL2csIFwiLVwiKS5yZXBsYWNlKC9cXC8vZywgXCJfXCIpLnJlcGxhY2UoL1xcPS9nLCBcIlwiKTtcbiAgICB9XG4gICAgc3RhdGljIEZyb21VdGY4U3RyaW5nKHRleHQsIGVuY29kaW5nID0gQ29udmVydC5ERUZBVUxUX1VURjhfRU5DT0RJTkcpIHtcbiAgICAgICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgICAgICAgY2FzZSBcImFzY2lpXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuRnJvbUJpbmFyeSh0ZXh0KTtcbiAgICAgICAgICAgIGNhc2UgXCJ1dGY4XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFV0ZjhDb252ZXJ0ZXIuZnJvbVN0cmluZyh0ZXh0KTtcbiAgICAgICAgICAgIGNhc2UgXCJ1dGYxNlwiOlxuICAgICAgICAgICAgY2FzZSBcInV0ZjE2YmVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gVXRmMTZDb252ZXJ0ZXIuZnJvbVN0cmluZyh0ZXh0KTtcbiAgICAgICAgICAgIGNhc2UgXCJ1dGYxNmxlXCI6XG4gICAgICAgICAgICBjYXNlIFwidXNjMlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBVdGYxNkNvbnZlcnRlci5mcm9tU3RyaW5nKHRleHQsIHRydWUpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdHlwZSBvZiBlbmNvZGluZyAnJHtlbmNvZGluZ30nYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIFRvVXRmOFN0cmluZyhidWZmZXIsIGVuY29kaW5nID0gQ29udmVydC5ERUZBVUxUX1VURjhfRU5DT0RJTkcpIHtcbiAgICAgICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgICAgICAgY2FzZSBcImFzY2lpXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuVG9CaW5hcnkoYnVmZmVyKTtcbiAgICAgICAgICAgIGNhc2UgXCJ1dGY4XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFV0ZjhDb252ZXJ0ZXIudG9TdHJpbmcoYnVmZmVyKTtcbiAgICAgICAgICAgIGNhc2UgXCJ1dGYxNlwiOlxuICAgICAgICAgICAgY2FzZSBcInV0ZjE2YmVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gVXRmMTZDb252ZXJ0ZXIudG9TdHJpbmcoYnVmZmVyKTtcbiAgICAgICAgICAgIGNhc2UgXCJ1dGYxNmxlXCI6XG4gICAgICAgICAgICBjYXNlIFwidXNjMlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBVdGYxNkNvbnZlcnRlci50b1N0cmluZyhidWZmZXIsIHRydWUpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdHlwZSBvZiBlbmNvZGluZyAnJHtlbmNvZGluZ30nYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIEZyb21CaW5hcnkodGV4dCkge1xuICAgICAgICBjb25zdCBzdHJpbmdMZW5ndGggPSB0ZXh0Lmxlbmd0aDtcbiAgICAgICAgY29uc3QgcmVzdWx0VmlldyA9IG5ldyBVaW50OEFycmF5KHN0cmluZ0xlbmd0aCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyaW5nTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHJlc3VsdFZpZXdbaV0gPSB0ZXh0LmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdFZpZXcuYnVmZmVyO1xuICAgIH1cbiAgICBzdGF0aWMgVG9CaW5hcnkoYnVmZmVyKSB7XG4gICAgICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoYnVmZmVyKTtcbiAgICAgICAgbGV0IHJlcyA9IFwiXCI7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnVmLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHN0YXRpYyBUb0hleChidWZmZXIpIHtcbiAgICAgICAgY29uc3QgYnVmID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShidWZmZXIpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gXCJcIjtcbiAgICAgICAgY29uc3QgbGVuID0gYnVmLmxlbmd0aDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgY29uc3QgYnl0ZSA9IGJ1ZltpXTtcbiAgICAgICAgICAgIGlmIChieXRlIDwgMTYpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gXCIwXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQgKz0gYnl0ZS50b1N0cmluZygxNik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgc3RhdGljIEZyb21IZXgoaGV4U3RyaW5nKSB7XG4gICAgICAgIGxldCBmb3JtYXR0ZWQgPSB0aGlzLmZvcm1hdFN0cmluZyhoZXhTdHJpbmcpO1xuICAgICAgICBpZiAoIWZvcm1hdHRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIUNvbnZlcnQuaXNIZXgoZm9ybWF0dGVkKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50ICdoZXhTdHJpbmcnIGlzIG5vdCBIRVggZW5jb2RlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9ybWF0dGVkLmxlbmd0aCAlIDIpIHtcbiAgICAgICAgICAgIGZvcm1hdHRlZCA9IGAwJHtmb3JtYXR0ZWR9YDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXMgPSBuZXcgVWludDhBcnJheShmb3JtYXR0ZWQubGVuZ3RoIC8gMik7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZm9ybWF0dGVkLmxlbmd0aDsgaSA9IGkgKyAyKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gZm9ybWF0dGVkLnNsaWNlKGksIGkgKyAyKTtcbiAgICAgICAgICAgIHJlc1tpIC8gMl0gPSBwYXJzZUludChjLCAxNik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcy5idWZmZXI7XG4gICAgfVxuICAgIHN0YXRpYyBUb1V0ZjE2U3RyaW5nKGJ1ZmZlciwgbGl0dGxlRW5kaWFuID0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIFV0ZjE2Q29udmVydGVyLnRvU3RyaW5nKGJ1ZmZlciwgbGl0dGxlRW5kaWFuKTtcbiAgICB9XG4gICAgc3RhdGljIEZyb21VdGYxNlN0cmluZyh0ZXh0LCBsaXR0bGVFbmRpYW4gPSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gVXRmMTZDb252ZXJ0ZXIuZnJvbVN0cmluZyh0ZXh0LCBsaXR0bGVFbmRpYW4pO1xuICAgIH1cbiAgICBzdGF0aWMgQmFzZTY0UGFkZGluZyhiYXNlNjQpIHtcbiAgICAgICAgY29uc3QgcGFkQ291bnQgPSA0IC0gKGJhc2U2NC5sZW5ndGggJSA0KTtcbiAgICAgICAgaWYgKHBhZENvdW50IDwgNCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYWRDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgYmFzZTY0ICs9IFwiPVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBiYXNlNjQ7XG4gICAgfVxuICAgIHN0YXRpYyBmb3JtYXRTdHJpbmcoZGF0YSkge1xuICAgICAgICByZXR1cm4gKGRhdGEgPT09IG51bGwgfHwgZGF0YSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGF0YS5yZXBsYWNlKC9bXFxuXFxyXFx0IF0vZywgXCJcIikpIHx8IFwiXCI7XG4gICAgfVxufVxuQ29udmVydC5ERUZBVUxUX1VURjhfRU5DT0RJTkcgPSBcInV0ZjhcIjtcblxuZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgLi4uc291cmNlcykge1xuICAgIGNvbnN0IHJlcyA9IGFyZ3VtZW50c1swXTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBvYmogPSBhcmd1bWVudHNbaV07XG4gICAgICAgIGZvciAoY29uc3QgcHJvcCBpbiBvYmopIHtcbiAgICAgICAgICAgIHJlc1twcm9wXSA9IG9ialtwcm9wXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuZnVuY3Rpb24gY29tYmluZSguLi5idWYpIHtcbiAgICBjb25zdCB0b3RhbEJ5dGVMZW5ndGggPSBidWYubWFwKChpdGVtKSA9PiBpdGVtLmJ5dGVMZW5ndGgpLnJlZHVjZSgocHJldiwgY3VyKSA9PiBwcmV2ICsgY3VyKTtcbiAgICBjb25zdCByZXMgPSBuZXcgVWludDhBcnJheSh0b3RhbEJ5dGVMZW5ndGgpO1xuICAgIGxldCBjdXJyZW50UG9zID0gMDtcbiAgICBidWYubWFwKChpdGVtKSA9PiBuZXcgVWludDhBcnJheShpdGVtKSkuZm9yRWFjaCgoYXJyKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbTIgb2YgYXJyKSB7XG4gICAgICAgICAgICByZXNbY3VycmVudFBvcysrXSA9IGl0ZW0yO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlcy5idWZmZXI7XG59XG5mdW5jdGlvbiBpc0VxdWFsKGJ5dGVzMSwgYnl0ZXMyKSB7XG4gICAgaWYgKCEoYnl0ZXMxICYmIGJ5dGVzMikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoYnl0ZXMxLmJ5dGVMZW5ndGggIT09IGJ5dGVzMi5ieXRlTGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgYjEgPSBuZXcgVWludDhBcnJheShieXRlczEpO1xuICAgIGNvbnN0IGIyID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMyKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVzMS5ieXRlTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGIxW2ldICE9PSBiMltpXSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnRzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlciA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlcjtcbmV4cG9ydHMuQ29udmVydCA9IENvbnZlcnQ7XG5leHBvcnRzLmFzc2lnbiA9IGFzc2lnbjtcbmV4cG9ydHMuY29tYmluZSA9IGNvbWJpbmU7XG5leHBvcnRzLmlzRXF1YWwgPSBpc0VxdWFsO1xuIiwgIi8qIVxuIENvcHlyaWdodCAoYykgUGVjdWxpYXIgVmVudHVyZXMsIExMQ1xuKi9cblxuZnVuY3Rpb24gZ2V0VVRDRGF0ZShkYXRlKSB7XHJcbiAgICByZXR1cm4gbmV3IERhdGUoZGF0ZS5nZXRUaW1lKCkgKyAoZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpICogNjAwMDApKTtcclxufVxyXG5mdW5jdGlvbiBnZXRQYXJhbWV0ZXJzVmFsdWUocGFyYW1ldGVycywgbmFtZSwgZGVmYXVsdFZhbHVlKSB7XHJcbiAgICB2YXIgX2E7XHJcbiAgICBpZiAoKHBhcmFtZXRlcnMgaW5zdGFuY2VvZiBPYmplY3QpID09PSBmYWxzZSkge1xyXG4gICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gKF9hID0gcGFyYW1ldGVyc1tuYW1lXSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZGVmYXVsdFZhbHVlO1xyXG59XHJcbmZ1bmN0aW9uIGJ1ZmZlclRvSGV4Q29kZXMoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0ID0gMCwgaW5wdXRMZW5ndGggPSAoaW5wdXRCdWZmZXIuYnl0ZUxlbmd0aCAtIGlucHV0T2Zmc2V0KSwgaW5zZXJ0U3BhY2UgPSBmYWxzZSkge1xyXG4gICAgbGV0IHJlc3VsdCA9IFwiXCI7XHJcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgKG5ldyBVaW50OEFycmF5KGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpKSkge1xyXG4gICAgICAgIGNvbnN0IHN0ciA9IGl0ZW0udG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKHN0ci5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgcmVzdWx0ICs9IFwiMFwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXN1bHQgKz0gc3RyO1xyXG4gICAgICAgIGlmIChpbnNlcnRTcGFjZSkge1xyXG4gICAgICAgICAgICByZXN1bHQgKz0gXCIgXCI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdC50cmltKCk7XHJcbn1cclxuZnVuY3Rpb24gY2hlY2tCdWZmZXJQYXJhbXMoYmFzZUJsb2NrLCBpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICBpZiAoIShpbnB1dEJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSkge1xyXG4gICAgICAgIGJhc2VCbG9jay5lcnJvciA9IFwiV3JvbmcgcGFyYW1ldGVyOiBpbnB1dEJ1ZmZlciBtdXN0IGJlIFxcXCJBcnJheUJ1ZmZlclxcXCJcIjtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoIWlucHV0QnVmZmVyLmJ5dGVMZW5ndGgpIHtcclxuICAgICAgICBiYXNlQmxvY2suZXJyb3IgPSBcIldyb25nIHBhcmFtZXRlcjogaW5wdXRCdWZmZXIgaGFzIHplcm8gbGVuZ3RoXCI7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0T2Zmc2V0IDwgMCkge1xyXG4gICAgICAgIGJhc2VCbG9jay5lcnJvciA9IFwiV3JvbmcgcGFyYW1ldGVyOiBpbnB1dE9mZnNldCBsZXNzIHRoYW4gemVyb1wiO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmIChpbnB1dExlbmd0aCA8IDApIHtcclxuICAgICAgICBiYXNlQmxvY2suZXJyb3IgPSBcIldyb25nIHBhcmFtZXRlcjogaW5wdXRMZW5ndGggbGVzcyB0aGFuIHplcm9cIjtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoKGlucHV0QnVmZmVyLmJ5dGVMZW5ndGggLSBpbnB1dE9mZnNldCAtIGlucHV0TGVuZ3RoKSA8IDApIHtcclxuICAgICAgICBiYXNlQmxvY2suZXJyb3IgPSBcIkVuZCBvZiBpbnB1dCByZWFjaGVkIGJlZm9yZSBtZXNzYWdlIHdhcyBmdWxseSBkZWNvZGVkIChpbmNvbnNpc3RlbnQgb2Zmc2V0IGFuZCBsZW5ndGggdmFsdWVzKVwiO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcbmZ1bmN0aW9uIHV0aWxGcm9tQmFzZShpbnB1dEJ1ZmZlciwgaW5wdXRCYXNlKSB7XHJcbiAgICBsZXQgcmVzdWx0ID0gMDtcclxuICAgIGlmIChpbnB1dEJ1ZmZlci5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICByZXR1cm4gaW5wdXRCdWZmZXJbMF07XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBpID0gKGlucHV0QnVmZmVyLmxlbmd0aCAtIDEpOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHJlc3VsdCArPSBpbnB1dEJ1ZmZlclsoaW5wdXRCdWZmZXIubGVuZ3RoIC0gMSkgLSBpXSAqIE1hdGgucG93KDIsIGlucHV0QmFzZSAqIGkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5mdW5jdGlvbiB1dGlsVG9CYXNlKHZhbHVlLCBiYXNlLCByZXNlcnZlZCA9ICgtMSkpIHtcclxuICAgIGNvbnN0IGludGVybmFsUmVzZXJ2ZWQgPSByZXNlcnZlZDtcclxuICAgIGxldCBpbnRlcm5hbFZhbHVlID0gdmFsdWU7XHJcbiAgICBsZXQgcmVzdWx0ID0gMDtcclxuICAgIGxldCBiaWdnZXN0ID0gTWF0aC5wb3coMiwgYmFzZSk7XHJcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IDg7IGkrKykge1xyXG4gICAgICAgIGlmICh2YWx1ZSA8IGJpZ2dlc3QpIHtcclxuICAgICAgICAgICAgbGV0IHJldEJ1ZjtcclxuICAgICAgICAgICAgaWYgKGludGVybmFsUmVzZXJ2ZWQgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXRCdWYgPSBuZXcgQXJyYXlCdWZmZXIoaSk7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKGludGVybmFsUmVzZXJ2ZWQgPCBpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChuZXcgQXJyYXlCdWZmZXIoMCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0QnVmID0gbmV3IEFycmF5QnVmZmVyKGludGVybmFsUmVzZXJ2ZWQpO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gaW50ZXJuYWxSZXNlcnZlZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkocmV0QnVmKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IChpIC0gMSk7IGogPj0gMDsgai0tKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBiYXNpcyA9IE1hdGgucG93KDIsIGogKiBiYXNlKTtcclxuICAgICAgICAgICAgICAgIHJldFZpZXdbcmVzdWx0IC0gaiAtIDFdID0gTWF0aC5mbG9vcihpbnRlcm5hbFZhbHVlIC8gYmFzaXMpO1xyXG4gICAgICAgICAgICAgICAgaW50ZXJuYWxWYWx1ZSAtPSAocmV0Vmlld1tyZXN1bHQgLSBqIC0gMV0pICogYmFzaXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJldEJ1ZjtcclxuICAgICAgICB9XHJcbiAgICAgICAgYmlnZ2VzdCAqPSBNYXRoLnBvdygyLCBiYXNlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZXcgQXJyYXlCdWZmZXIoMCk7XHJcbn1cclxuZnVuY3Rpb24gdXRpbENvbmNhdEJ1ZiguLi5idWZmZXJzKSB7XHJcbiAgICBsZXQgb3V0cHV0TGVuZ3RoID0gMDtcclxuICAgIGxldCBwcmV2TGVuZ3RoID0gMDtcclxuICAgIGZvciAoY29uc3QgYnVmZmVyIG9mIGJ1ZmZlcnMpIHtcclxuICAgICAgICBvdXRwdXRMZW5ndGggKz0gYnVmZmVyLmJ5dGVMZW5ndGg7XHJcbiAgICB9XHJcbiAgICBjb25zdCByZXRCdWYgPSBuZXcgQXJyYXlCdWZmZXIob3V0cHV0TGVuZ3RoKTtcclxuICAgIGNvbnN0IHJldFZpZXcgPSBuZXcgVWludDhBcnJheShyZXRCdWYpO1xyXG4gICAgZm9yIChjb25zdCBidWZmZXIgb2YgYnVmZmVycykge1xyXG4gICAgICAgIHJldFZpZXcuc2V0KG5ldyBVaW50OEFycmF5KGJ1ZmZlciksIHByZXZMZW5ndGgpO1xyXG4gICAgICAgIHByZXZMZW5ndGggKz0gYnVmZmVyLmJ5dGVMZW5ndGg7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmV0QnVmO1xyXG59XHJcbmZ1bmN0aW9uIHV0aWxDb25jYXRWaWV3KC4uLnZpZXdzKSB7XHJcbiAgICBsZXQgb3V0cHV0TGVuZ3RoID0gMDtcclxuICAgIGxldCBwcmV2TGVuZ3RoID0gMDtcclxuICAgIGZvciAoY29uc3QgdmlldyBvZiB2aWV3cykge1xyXG4gICAgICAgIG91dHB1dExlbmd0aCArPSB2aWV3Lmxlbmd0aDtcclxuICAgIH1cclxuICAgIGNvbnN0IHJldEJ1ZiA9IG5ldyBBcnJheUJ1ZmZlcihvdXRwdXRMZW5ndGgpO1xyXG4gICAgY29uc3QgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KHJldEJ1Zik7XHJcbiAgICBmb3IgKGNvbnN0IHZpZXcgb2Ygdmlld3MpIHtcclxuICAgICAgICByZXRWaWV3LnNldCh2aWV3LCBwcmV2TGVuZ3RoKTtcclxuICAgICAgICBwcmV2TGVuZ3RoICs9IHZpZXcubGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJldFZpZXc7XHJcbn1cclxuZnVuY3Rpb24gdXRpbERlY29kZVRDKCkge1xyXG4gICAgY29uc3QgYnVmID0gbmV3IFVpbnQ4QXJyYXkodGhpcy52YWx1ZUhleCk7XHJcbiAgICBpZiAodGhpcy52YWx1ZUhleC5ieXRlTGVuZ3RoID49IDIpIHtcclxuICAgICAgICBjb25zdCBjb25kaXRpb24xID0gKGJ1ZlswXSA9PT0gMHhGRikgJiYgKGJ1ZlsxXSAmIDB4ODApO1xyXG4gICAgICAgIGNvbnN0IGNvbmRpdGlvbjIgPSAoYnVmWzBdID09PSAweDAwKSAmJiAoKGJ1ZlsxXSAmIDB4ODApID09PSAweDAwKTtcclxuICAgICAgICBpZiAoY29uZGl0aW9uMSB8fCBjb25kaXRpb24yKSB7XHJcbiAgICAgICAgICAgIHRoaXMud2FybmluZ3MucHVzaChcIk5lZWRsZXNzbHkgbG9uZyBmb3JtYXRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgYmlnSW50QnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKHRoaXMudmFsdWVIZXguYnl0ZUxlbmd0aCk7XHJcbiAgICBjb25zdCBiaWdJbnRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoYmlnSW50QnVmZmVyKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy52YWx1ZUhleC5ieXRlTGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBiaWdJbnRWaWV3W2ldID0gMDtcclxuICAgIH1cclxuICAgIGJpZ0ludFZpZXdbMF0gPSAoYnVmWzBdICYgMHg4MCk7XHJcbiAgICBjb25zdCBiaWdJbnQgPSB1dGlsRnJvbUJhc2UoYmlnSW50VmlldywgOCk7XHJcbiAgICBjb25zdCBzbWFsbEludEJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcih0aGlzLnZhbHVlSGV4LmJ5dGVMZW5ndGgpO1xyXG4gICAgY29uc3Qgc21hbGxJbnRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoc21hbGxJbnRCdWZmZXIpO1xyXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLnZhbHVlSGV4LmJ5dGVMZW5ndGg7IGorKykge1xyXG4gICAgICAgIHNtYWxsSW50Vmlld1tqXSA9IGJ1ZltqXTtcclxuICAgIH1cclxuICAgIHNtYWxsSW50Vmlld1swXSAmPSAweDdGO1xyXG4gICAgY29uc3Qgc21hbGxJbnQgPSB1dGlsRnJvbUJhc2Uoc21hbGxJbnRWaWV3LCA4KTtcclxuICAgIHJldHVybiAoc21hbGxJbnQgLSBiaWdJbnQpO1xyXG59XHJcbmZ1bmN0aW9uIHV0aWxFbmNvZGVUQyh2YWx1ZSkge1xyXG4gICAgY29uc3QgbW9kVmFsdWUgPSAodmFsdWUgPCAwKSA/ICh2YWx1ZSAqICgtMSkpIDogdmFsdWU7XHJcbiAgICBsZXQgYmlnSW50ID0gMTI4O1xyXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCA4OyBpKyspIHtcclxuICAgICAgICBpZiAobW9kVmFsdWUgPD0gYmlnSW50KSB7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSA8IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNtYWxsSW50ID0gYmlnSW50IC0gbW9kVmFsdWU7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXRCdWYgPSB1dGlsVG9CYXNlKHNtYWxsSW50LCA4LCBpKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJldFZpZXcgPSBuZXcgVWludDhBcnJheShyZXRCdWYpO1xyXG4gICAgICAgICAgICAgICAgcmV0Vmlld1swXSB8PSAweDgwO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldEJ1ZjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgcmV0QnVmID0gdXRpbFRvQmFzZShtb2RWYWx1ZSwgOCwgaSk7XHJcbiAgICAgICAgICAgIGxldCByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkocmV0QnVmKTtcclxuICAgICAgICAgICAgaWYgKHJldFZpZXdbMF0gJiAweDgwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0ZW1wQnVmID0gcmV0QnVmLnNsaWNlKDApO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGVtcFZpZXcgPSBuZXcgVWludDhBcnJheSh0ZW1wQnVmKTtcclxuICAgICAgICAgICAgICAgIHJldEJ1ZiA9IG5ldyBBcnJheUJ1ZmZlcihyZXRCdWYuYnl0ZUxlbmd0aCArIDEpO1xyXG4gICAgICAgICAgICAgICAgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KHJldEJ1Zik7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IHRlbXBCdWYuYnl0ZUxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0Vmlld1trICsgMV0gPSB0ZW1wVmlld1trXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldFZpZXdbMF0gPSAweDAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXRCdWY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJpZ0ludCAqPSBNYXRoLnBvdygyLCA4KTtcclxuICAgIH1cclxuICAgIHJldHVybiAobmV3IEFycmF5QnVmZmVyKDApKTtcclxufVxyXG5mdW5jdGlvbiBpc0VxdWFsQnVmZmVyKGlucHV0QnVmZmVyMSwgaW5wdXRCdWZmZXIyKSB7XHJcbiAgICBpZiAoaW5wdXRCdWZmZXIxLmJ5dGVMZW5ndGggIT09IGlucHV0QnVmZmVyMi5ieXRlTGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdmlldzEgPSBuZXcgVWludDhBcnJheShpbnB1dEJ1ZmZlcjEpO1xyXG4gICAgY29uc3QgdmlldzIgPSBuZXcgVWludDhBcnJheShpbnB1dEJ1ZmZlcjIpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2aWV3MS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmICh2aWV3MVtpXSAhPT0gdmlldzJbaV0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcbmZ1bmN0aW9uIHBhZE51bWJlcihpbnB1dE51bWJlciwgZnVsbExlbmd0aCkge1xyXG4gICAgY29uc3Qgc3RyID0gaW5wdXROdW1iZXIudG9TdHJpbmcoMTApO1xyXG4gICAgaWYgKGZ1bGxMZW5ndGggPCBzdHIubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcbiAgICBjb25zdCBkaWYgPSBmdWxsTGVuZ3RoIC0gc3RyLmxlbmd0aDtcclxuICAgIGNvbnN0IHBhZGRpbmcgPSBuZXcgQXJyYXkoZGlmKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGlmOyBpKyspIHtcclxuICAgICAgICBwYWRkaW5nW2ldID0gXCIwXCI7XHJcbiAgICB9XHJcbiAgICBjb25zdCBwYWRkaW5nU3RyaW5nID0gcGFkZGluZy5qb2luKFwiXCIpO1xyXG4gICAgcmV0dXJuIHBhZGRpbmdTdHJpbmcuY29uY2F0KHN0cik7XHJcbn1cclxuY29uc3QgYmFzZTY0VGVtcGxhdGUgPSBcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89XCI7XHJcbmNvbnN0IGJhc2U2NFVybFRlbXBsYXRlID0gXCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OS1fPVwiO1xyXG5mdW5jdGlvbiB0b0Jhc2U2NChpbnB1dCwgdXNlVXJsVGVtcGxhdGUgPSBmYWxzZSwgc2tpcFBhZGRpbmcgPSBmYWxzZSwgc2tpcExlYWRpbmdaZXJvcyA9IGZhbHNlKSB7XHJcbiAgICBsZXQgaSA9IDA7XHJcbiAgICBsZXQgZmxhZzEgPSAwO1xyXG4gICAgbGV0IGZsYWcyID0gMDtcclxuICAgIGxldCBvdXRwdXQgPSBcIlwiO1xyXG4gICAgY29uc3QgdGVtcGxhdGUgPSAodXNlVXJsVGVtcGxhdGUpID8gYmFzZTY0VXJsVGVtcGxhdGUgOiBiYXNlNjRUZW1wbGF0ZTtcclxuICAgIGlmIChza2lwTGVhZGluZ1plcm9zKSB7XHJcbiAgICAgICAgbGV0IG5vblplcm9Qb3NpdGlvbiA9IDA7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChpKSAhPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgbm9uWmVyb1Bvc2l0aW9uID0gaTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlucHV0ID0gaW5wdXQuc2xpY2Uobm9uWmVyb1Bvc2l0aW9uKTtcclxuICAgIH1cclxuICAgIHdoaWxlIChpIDwgaW5wdXQubGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgY2hyMSA9IGlucHV0LmNoYXJDb2RlQXQoaSsrKTtcclxuICAgICAgICBpZiAoaSA+PSBpbnB1dC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgZmxhZzEgPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjaHIyID0gaW5wdXQuY2hhckNvZGVBdChpKyspO1xyXG4gICAgICAgIGlmIChpID49IGlucHV0Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICBmbGFnMiA9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGNocjMgPSBpbnB1dC5jaGFyQ29kZUF0KGkrKyk7XHJcbiAgICAgICAgY29uc3QgZW5jMSA9IGNocjEgPj4gMjtcclxuICAgICAgICBjb25zdCBlbmMyID0gKChjaHIxICYgMHgwMykgPDwgNCkgfCAoY2hyMiA+PiA0KTtcclxuICAgICAgICBsZXQgZW5jMyA9ICgoY2hyMiAmIDB4MEYpIDw8IDIpIHwgKGNocjMgPj4gNik7XHJcbiAgICAgICAgbGV0IGVuYzQgPSBjaHIzICYgMHgzRjtcclxuICAgICAgICBpZiAoZmxhZzEgPT09IDEpIHtcclxuICAgICAgICAgICAgZW5jMyA9IGVuYzQgPSA2NDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChmbGFnMiA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgZW5jNCA9IDY0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChza2lwUGFkZGluZykge1xyXG4gICAgICAgICAgICBpZiAoZW5jMyA9PT0gNjQpIHtcclxuICAgICAgICAgICAgICAgIG91dHB1dCArPSBgJHt0ZW1wbGF0ZS5jaGFyQXQoZW5jMSl9JHt0ZW1wbGF0ZS5jaGFyQXQoZW5jMil9YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChlbmM0ID09PSA2NCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCArPSBgJHt0ZW1wbGF0ZS5jaGFyQXQoZW5jMSl9JHt0ZW1wbGF0ZS5jaGFyQXQoZW5jMil9JHt0ZW1wbGF0ZS5jaGFyQXQoZW5jMyl9YDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCArPSBgJHt0ZW1wbGF0ZS5jaGFyQXQoZW5jMSl9JHt0ZW1wbGF0ZS5jaGFyQXQoZW5jMil9JHt0ZW1wbGF0ZS5jaGFyQXQoZW5jMyl9JHt0ZW1wbGF0ZS5jaGFyQXQoZW5jNCl9YDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgb3V0cHV0ICs9IGAke3RlbXBsYXRlLmNoYXJBdChlbmMxKX0ke3RlbXBsYXRlLmNoYXJBdChlbmMyKX0ke3RlbXBsYXRlLmNoYXJBdChlbmMzKX0ke3RlbXBsYXRlLmNoYXJBdChlbmM0KX1gO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBvdXRwdXQ7XHJcbn1cclxuZnVuY3Rpb24gZnJvbUJhc2U2NChpbnB1dCwgdXNlVXJsVGVtcGxhdGUgPSBmYWxzZSwgY3V0VGFpbFplcm9zID0gZmFsc2UpIHtcclxuICAgIGNvbnN0IHRlbXBsYXRlID0gKHVzZVVybFRlbXBsYXRlKSA/IGJhc2U2NFVybFRlbXBsYXRlIDogYmFzZTY0VGVtcGxhdGU7XHJcbiAgICBmdW5jdGlvbiBpbmRleE9mKHRvU2VhcmNoKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA2NDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0ZW1wbGF0ZS5jaGFyQXQoaSkgPT09IHRvU2VhcmNoKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiA2NDtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHRlc3QoaW5jb21pbmcpIHtcclxuICAgICAgICByZXR1cm4gKChpbmNvbWluZyA9PT0gNjQpID8gMHgwMCA6IGluY29taW5nKTtcclxuICAgIH1cclxuICAgIGxldCBpID0gMDtcclxuICAgIGxldCBvdXRwdXQgPSBcIlwiO1xyXG4gICAgd2hpbGUgKGkgPCBpbnB1dC5sZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBlbmMxID0gaW5kZXhPZihpbnB1dC5jaGFyQXQoaSsrKSk7XHJcbiAgICAgICAgY29uc3QgZW5jMiA9IChpID49IGlucHV0Lmxlbmd0aCkgPyAweDAwIDogaW5kZXhPZihpbnB1dC5jaGFyQXQoaSsrKSk7XHJcbiAgICAgICAgY29uc3QgZW5jMyA9IChpID49IGlucHV0Lmxlbmd0aCkgPyAweDAwIDogaW5kZXhPZihpbnB1dC5jaGFyQXQoaSsrKSk7XHJcbiAgICAgICAgY29uc3QgZW5jNCA9IChpID49IGlucHV0Lmxlbmd0aCkgPyAweDAwIDogaW5kZXhPZihpbnB1dC5jaGFyQXQoaSsrKSk7XHJcbiAgICAgICAgY29uc3QgY2hyMSA9ICh0ZXN0KGVuYzEpIDw8IDIpIHwgKHRlc3QoZW5jMikgPj4gNCk7XHJcbiAgICAgICAgY29uc3QgY2hyMiA9ICgodGVzdChlbmMyKSAmIDB4MEYpIDw8IDQpIHwgKHRlc3QoZW5jMykgPj4gMik7XHJcbiAgICAgICAgY29uc3QgY2hyMyA9ICgodGVzdChlbmMzKSAmIDB4MDMpIDw8IDYpIHwgdGVzdChlbmM0KTtcclxuICAgICAgICBvdXRwdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjaHIxKTtcclxuICAgICAgICBpZiAoZW5jMyAhPT0gNjQpIHtcclxuICAgICAgICAgICAgb3V0cHV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hyMik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbmM0ICE9PSA2NCkge1xyXG4gICAgICAgICAgICBvdXRwdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjaHIzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoY3V0VGFpbFplcm9zKSB7XHJcbiAgICAgICAgY29uc3Qgb3V0cHV0TGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDtcclxuICAgICAgICBsZXQgbm9uWmVyb1N0YXJ0ID0gKC0xKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gKG91dHB1dExlbmd0aCAtIDEpOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgICBpZiAob3V0cHV0LmNoYXJDb2RlQXQoaSkgIT09IDApIHtcclxuICAgICAgICAgICAgICAgIG5vblplcm9TdGFydCA9IGk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobm9uWmVyb1N0YXJ0ICE9PSAoLTEpKSB7XHJcbiAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dC5zbGljZSgwLCBub25aZXJvU3RhcnQgKyAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG91dHB1dCA9IFwiXCI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG91dHB1dDtcclxufVxyXG5mdW5jdGlvbiBhcnJheUJ1ZmZlclRvU3RyaW5nKGJ1ZmZlcikge1xyXG4gICAgbGV0IHJlc3VsdFN0cmluZyA9IFwiXCI7XHJcbiAgICBjb25zdCB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTtcclxuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB2aWV3KSB7XHJcbiAgICAgICAgcmVzdWx0U3RyaW5nICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoZWxlbWVudCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0U3RyaW5nO1xyXG59XHJcbmZ1bmN0aW9uIHN0cmluZ1RvQXJyYXlCdWZmZXIoc3RyKSB7XHJcbiAgICBjb25zdCBzdHJpbmdMZW5ndGggPSBzdHIubGVuZ3RoO1xyXG4gICAgY29uc3QgcmVzdWx0QnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKHN0cmluZ0xlbmd0aCk7XHJcbiAgICBjb25zdCByZXN1bHRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkocmVzdWx0QnVmZmVyKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyaW5nTGVuZ3RoOyBpKyspIHtcclxuICAgICAgICByZXN1bHRWaWV3W2ldID0gc3RyLmNoYXJDb2RlQXQoaSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0QnVmZmVyO1xyXG59XHJcbmNvbnN0IGxvZzIgPSBNYXRoLmxvZygyKTtcclxuZnVuY3Rpb24gbmVhcmVzdFBvd2VyT2YyKGxlbmd0aCkge1xyXG4gICAgY29uc3QgYmFzZSA9IChNYXRoLmxvZyhsZW5ndGgpIC8gbG9nMik7XHJcbiAgICBjb25zdCBmbG9vciA9IE1hdGguZmxvb3IoYmFzZSk7XHJcbiAgICBjb25zdCByb3VuZCA9IE1hdGgucm91bmQoYmFzZSk7XHJcbiAgICByZXR1cm4gKChmbG9vciA9PT0gcm91bmQpID8gZmxvb3IgOiByb3VuZCk7XHJcbn1cclxuZnVuY3Rpb24gY2xlYXJQcm9wcyhvYmplY3QsIHByb3BzQXJyYXkpIHtcclxuICAgIGZvciAoY29uc3QgcHJvcCBvZiBwcm9wc0FycmF5KSB7XHJcbiAgICAgICAgZGVsZXRlIG9iamVjdFtwcm9wXTtcclxuICAgIH1cclxufVxuXG5leHBvcnQgeyBhcnJheUJ1ZmZlclRvU3RyaW5nLCBidWZmZXJUb0hleENvZGVzLCBjaGVja0J1ZmZlclBhcmFtcywgY2xlYXJQcm9wcywgZnJvbUJhc2U2NCwgZ2V0UGFyYW1ldGVyc1ZhbHVlLCBnZXRVVENEYXRlLCBpc0VxdWFsQnVmZmVyLCBuZWFyZXN0UG93ZXJPZjIsIHBhZE51bWJlciwgc3RyaW5nVG9BcnJheUJ1ZmZlciwgdG9CYXNlNjQsIHV0aWxDb25jYXRCdWYsIHV0aWxDb25jYXRWaWV3LCB1dGlsRGVjb2RlVEMsIHV0aWxFbmNvZGVUQywgdXRpbEZyb21CYXNlLCB1dGlsVG9CYXNlIH07XG4iLCAiLyohXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQsIEdNTyBHbG9iYWxTaWduXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUtMjAyMiwgUGVjdWxpYXIgVmVudHVyZXNcbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBcbiAqIEF1dGhvciAyMDE0LTIwMTksIFl1cnkgU3Ryb3poZXZza3lcbiAqIFxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbiAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAqIFxuICogKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gKiBcbiAqICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vclxuICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICogXG4gKiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHNcbiAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb21cbiAqICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cbiAqIFxuICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXG4gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxuICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcbiAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXG4gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcbiAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICogXG4gKi9cblxuaW1wb3J0ICogYXMgcHZ0c3V0aWxzIGZyb20gJ3B2dHN1dGlscyc7XG5pbXBvcnQgKiBhcyBwdnV0aWxzIGZyb20gJ3B2dXRpbHMnO1xuXG5mdW5jdGlvbiBhc3NlcnRCaWdJbnQoKSB7XHJcbiAgICBpZiAodHlwZW9mIEJpZ0ludCA9PT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJpZ0ludCBpcyBub3QgZGVmaW5lZC4gWW91ciBlbnZpcm9ubWVudCBkb2Vzbid0IGltcGxlbWVudCBCaWdJbnQuXCIpO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGNvbmNhdChidWZmZXJzKSB7XHJcbiAgICBsZXQgb3V0cHV0TGVuZ3RoID0gMDtcclxuICAgIGxldCBwcmV2TGVuZ3RoID0gMDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnVmZmVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IGJ1ZmZlcnNbaV07XHJcbiAgICAgICAgb3V0cHV0TGVuZ3RoICs9IGJ1ZmZlci5ieXRlTGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KG91dHB1dExlbmd0aCk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1ZmZlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBidWZmZXIgPSBidWZmZXJzW2ldO1xyXG4gICAgICAgIHJldFZpZXcuc2V0KG5ldyBVaW50OEFycmF5KGJ1ZmZlciksIHByZXZMZW5ndGgpO1xyXG4gICAgICAgIHByZXZMZW5ndGggKz0gYnVmZmVyLmJ5dGVMZW5ndGg7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmV0Vmlldy5idWZmZXI7XHJcbn1cclxuZnVuY3Rpb24gY2hlY2tCdWZmZXJQYXJhbXMoYmFzZUJsb2NrLCBpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICBpZiAoIShpbnB1dEJ1ZmZlciBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKSB7XHJcbiAgICAgICAgYmFzZUJsb2NrLmVycm9yID0gXCJXcm9uZyBwYXJhbWV0ZXI6IGlucHV0QnVmZmVyIG11c3QgYmUgJ1VpbnQ4QXJyYXknXCI7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKCFpbnB1dEJ1ZmZlci5ieXRlTGVuZ3RoKSB7XHJcbiAgICAgICAgYmFzZUJsb2NrLmVycm9yID0gXCJXcm9uZyBwYXJhbWV0ZXI6IGlucHV0QnVmZmVyIGhhcyB6ZXJvIGxlbmd0aFwiO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmIChpbnB1dE9mZnNldCA8IDApIHtcclxuICAgICAgICBiYXNlQmxvY2suZXJyb3IgPSBcIldyb25nIHBhcmFtZXRlcjogaW5wdXRPZmZzZXQgbGVzcyB0aGFuIHplcm9cIjtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoaW5wdXRMZW5ndGggPCAwKSB7XHJcbiAgICAgICAgYmFzZUJsb2NrLmVycm9yID0gXCJXcm9uZyBwYXJhbWV0ZXI6IGlucHV0TGVuZ3RoIGxlc3MgdGhhbiB6ZXJvXCI7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKChpbnB1dEJ1ZmZlci5ieXRlTGVuZ3RoIC0gaW5wdXRPZmZzZXQgLSBpbnB1dExlbmd0aCkgPCAwKSB7XHJcbiAgICAgICAgYmFzZUJsb2NrLmVycm9yID0gXCJFbmQgb2YgaW5wdXQgcmVhY2hlZCBiZWZvcmUgbWVzc2FnZSB3YXMgZnVsbHkgZGVjb2RlZCAoaW5jb25zaXN0ZW50IG9mZnNldCBhbmQgbGVuZ3RoIHZhbHVlcylcIjtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxuXG5jbGFzcyBWaWV3V3JpdGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuaXRlbXMgPSBbXTtcclxuICAgIH1cclxuICAgIHdyaXRlKGJ1Zikge1xyXG4gICAgICAgIHRoaXMuaXRlbXMucHVzaChidWYpO1xyXG4gICAgfVxyXG4gICAgZmluYWwoKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbmNhdCh0aGlzLml0ZW1zKTtcclxuICAgIH1cclxufVxuXG5jb25zdCBwb3dlcnMyID0gW25ldyBVaW50OEFycmF5KFsxXSldO1xyXG5jb25zdCBkaWdpdHNTdHJpbmcgPSBcIjAxMjM0NTY3ODlcIjtcclxuY29uc3QgTkFNRSA9IFwibmFtZVwiO1xyXG5jb25zdCBWQUxVRV9IRVhfVklFVyA9IFwidmFsdWVIZXhWaWV3XCI7XHJcbmNvbnN0IElTX0hFWF9PTkxZID0gXCJpc0hleE9ubHlcIjtcclxuY29uc3QgSURfQkxPQ0sgPSBcImlkQmxvY2tcIjtcclxuY29uc3QgVEFHX0NMQVNTID0gXCJ0YWdDbGFzc1wiO1xyXG5jb25zdCBUQUdfTlVNQkVSID0gXCJ0YWdOdW1iZXJcIjtcclxuY29uc3QgSVNfQ09OU1RSVUNURUQgPSBcImlzQ29uc3RydWN0ZWRcIjtcclxuY29uc3QgRlJPTV9CRVIgPSBcImZyb21CRVJcIjtcclxuY29uc3QgVE9fQkVSID0gXCJ0b0JFUlwiO1xyXG5jb25zdCBMT0NBTCA9IFwibG9jYWxcIjtcclxuY29uc3QgRU1QVFlfU1RSSU5HID0gXCJcIjtcclxuY29uc3QgRU1QVFlfQlVGRkVSID0gbmV3IEFycmF5QnVmZmVyKDApO1xyXG5jb25zdCBFTVBUWV9WSUVXID0gbmV3IFVpbnQ4QXJyYXkoMCk7XHJcbmNvbnN0IEVORF9PRl9DT05URU5UX05BTUUgPSBcIkVuZE9mQ29udGVudFwiO1xyXG5jb25zdCBPQ1RFVF9TVFJJTkdfTkFNRSA9IFwiT0NURVQgU1RSSU5HXCI7XHJcbmNvbnN0IEJJVF9TVFJJTkdfTkFNRSA9IFwiQklUIFNUUklOR1wiO1xuXG5mdW5jdGlvbiBIZXhCbG9jayhCYXNlQ2xhc3MpIHtcclxuICAgIHZhciBfYTtcclxuICAgIHJldHVybiBfYSA9IGNsYXNzIFNvbWUgZXh0ZW5kcyBCYXNlQ2xhc3Mge1xyXG4gICAgICAgICAgICBjb25zdHJ1Y3RvciguLi5hcmdzKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX2E7XHJcbiAgICAgICAgICAgICAgICBzdXBlciguLi5hcmdzKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IGFyZ3NbMF0gfHwge307XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzSGV4T25seSA9IChfYSA9IHBhcmFtcy5pc0hleE9ubHkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSBwYXJhbXMudmFsdWVIZXggPyBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShwYXJhbXMudmFsdWVIZXgpIDogRU1QVFlfVklFVztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBnZXQgdmFsdWVIZXgoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUhleFZpZXcuc2xpY2UoKS5idWZmZXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2V0IHZhbHVlSGV4KHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IG5ldyBVaW50OEFycmF5KHZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZpZXcgPSBpbnB1dEJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyID8gbmV3IFVpbnQ4QXJyYXkoaW5wdXRCdWZmZXIpIDogaW5wdXRCdWZmZXI7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWNoZWNrQnVmZmVyUGFyYW1zKHRoaXMsIHZpZXcsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbmRMZW5ndGggPSBpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSB2aWV3LnN1YmFycmF5KGlucHV0T2Zmc2V0LCBlbmRMZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnZhbHVlSGV4Vmlldy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1c2goXCJaZXJvIGJ1ZmZlciBsZW5ndGhcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0T2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCA9IGlucHV0TGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuZExlbmd0aDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0b0JFUihzaXplT25seSA9IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNIZXhPbmx5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiRmxhZyAnaXNIZXhPbmx5JyBpcyBub3Qgc2V0LCBhYm9ydFwiO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWV9CVUZGRVI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoc2l6ZU9ubHkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFycmF5QnVmZmVyKHRoaXMudmFsdWVIZXhWaWV3LmJ5dGVMZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICh0aGlzLnZhbHVlSGV4Vmlldy5ieXRlTGVuZ3RoID09PSB0aGlzLnZhbHVlSGV4Vmlldy5idWZmZXIuYnl0ZUxlbmd0aClcclxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMudmFsdWVIZXhWaWV3LmJ1ZmZlclxyXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy52YWx1ZUhleFZpZXcuc2xpY2UoKS5idWZmZXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdG9KU09OKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgICAgICAgICBpc0hleE9ubHk6IHRoaXMuaXNIZXhPbmx5LFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlSGV4OiBwdnRzdXRpbHMuQ29udmVydC5Ub0hleCh0aGlzLnZhbHVlSGV4VmlldyksXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBfYS5OQU1FID0gXCJoZXhCbG9ja1wiLFxyXG4gICAgICAgIF9hO1xyXG59XG5cbmNsYXNzIExvY2FsQmFzZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgYmxvY2tMZW5ndGggPSAwLCBlcnJvciA9IEVNUFRZX1NUUklORywgd2FybmluZ3MgPSBbXSwgdmFsdWVCZWZvcmVEZWNvZGUgPSBFTVBUWV9WSUVXLCB9ID0ge30pIHtcclxuICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoID0gYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgdGhpcy5lcnJvciA9IGVycm9yO1xyXG4gICAgICAgIHRoaXMud2FybmluZ3MgPSB3YXJuaW5ncztcclxuICAgICAgICB0aGlzLnZhbHVlQmVmb3JlRGVjb2RlVmlldyA9IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KHZhbHVlQmVmb3JlRGVjb2RlKTtcclxuICAgIH1cclxuICAgIHN0YXRpYyBibG9ja05hbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuTkFNRTtcclxuICAgIH1cclxuICAgIGdldCB2YWx1ZUJlZm9yZURlY29kZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUJlZm9yZURlY29kZVZpZXcuc2xpY2UoKS5idWZmZXI7XHJcbiAgICB9XHJcbiAgICBzZXQgdmFsdWVCZWZvcmVEZWNvZGUodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlQmVmb3JlRGVjb2RlVmlldyA9IG5ldyBVaW50OEFycmF5KHZhbHVlKTtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBibG9ja05hbWU6IHRoaXMuY29uc3RydWN0b3IuTkFNRSxcclxuICAgICAgICAgICAgYmxvY2tMZW5ndGg6IHRoaXMuYmxvY2tMZW5ndGgsXHJcbiAgICAgICAgICAgIGVycm9yOiB0aGlzLmVycm9yLFxyXG4gICAgICAgICAgICB3YXJuaW5nczogdGhpcy53YXJuaW5ncyxcclxuICAgICAgICAgICAgdmFsdWVCZWZvcmVEZWNvZGU6IHB2dHN1dGlscy5Db252ZXJ0LlRvSGV4KHRoaXMudmFsdWVCZWZvcmVEZWNvZGVWaWV3KSxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbkxvY2FsQmFzZUJsb2NrLk5BTUUgPSBcImJhc2VCbG9ja1wiO1xuXG5jbGFzcyBWYWx1ZUJsb2NrIGV4dGVuZHMgTG9jYWxCYXNlQmxvY2sge1xyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiVXNlciBuZWVkIHRvIG1ha2UgYSBzcGVjaWZpYyBmdW5jdGlvbiBpbiBhIGNsYXNzIHdoaWNoIGV4dGVuZHMgJ1ZhbHVlQmxvY2snXCIpO1xyXG4gICAgfVxyXG4gICAgdG9CRVIoc2l6ZU9ubHksIHdyaXRlcikge1xyXG4gICAgICAgIHRocm93IFR5cGVFcnJvcihcIlVzZXIgbmVlZCB0byBtYWtlIGEgc3BlY2lmaWMgZnVuY3Rpb24gaW4gYSBjbGFzcyB3aGljaCBleHRlbmRzICdWYWx1ZUJsb2NrJ1wiKTtcclxuICAgIH1cclxufVxyXG5WYWx1ZUJsb2NrLk5BTUUgPSBcInZhbHVlQmxvY2tcIjtcblxuY2xhc3MgTG9jYWxJZGVudGlmaWNhdGlvbkJsb2NrIGV4dGVuZHMgSGV4QmxvY2soTG9jYWxCYXNlQmxvY2spIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgaWRCbG9jayA9IHt9LCB9ID0ge30pIHtcclxuICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2Q7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICBpZiAoaWRCbG9jaykge1xyXG4gICAgICAgICAgICB0aGlzLmlzSGV4T25seSA9IChfYSA9IGlkQmxvY2suaXNIZXhPbmx5KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSBpZEJsb2NrLnZhbHVlSGV4ID8gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoaWRCbG9jay52YWx1ZUhleCkgOiBFTVBUWV9WSUVXO1xyXG4gICAgICAgICAgICB0aGlzLnRhZ0NsYXNzID0gKF9iID0gaWRCbG9jay50YWdDbGFzcykgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogLTE7XHJcbiAgICAgICAgICAgIHRoaXMudGFnTnVtYmVyID0gKF9jID0gaWRCbG9jay50YWdOdW1iZXIpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IC0xO1xyXG4gICAgICAgICAgICB0aGlzLmlzQ29uc3RydWN0ZWQgPSAoX2QgPSBpZEJsb2NrLmlzQ29uc3RydWN0ZWQpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy50YWdDbGFzcyA9IC0xO1xyXG4gICAgICAgICAgICB0aGlzLnRhZ051bWJlciA9IC0xO1xyXG4gICAgICAgICAgICB0aGlzLmlzQ29uc3RydWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB0b0JFUihzaXplT25seSA9IGZhbHNlKSB7XHJcbiAgICAgICAgbGV0IGZpcnN0T2N0ZXQgPSAwO1xyXG4gICAgICAgIHN3aXRjaCAodGhpcy50YWdDbGFzcykge1xyXG4gICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICBmaXJzdE9jdGV0IHw9IDB4MDA7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgZmlyc3RPY3RldCB8PSAweDQwO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICAgIGZpcnN0T2N0ZXQgfD0gMHg4MDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgICAgICBmaXJzdE9jdGV0IHw9IDB4QzA7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIlVua25vd24gdGFnIGNsYXNzXCI7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gRU1QVFlfQlVGRkVSO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5pc0NvbnN0cnVjdGVkKVxyXG4gICAgICAgICAgICBmaXJzdE9jdGV0IHw9IDB4MjA7XHJcbiAgICAgICAgaWYgKHRoaXMudGFnTnVtYmVyIDwgMzEgJiYgIXRoaXMuaXNIZXhPbmx5KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJldFZpZXcgPSBuZXcgVWludDhBcnJheSgxKTtcclxuICAgICAgICAgICAgaWYgKCFzaXplT25seSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IG51bWJlciA9IHRoaXMudGFnTnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgbnVtYmVyICY9IDB4MUY7XHJcbiAgICAgICAgICAgICAgICBmaXJzdE9jdGV0IHw9IG51bWJlcjtcclxuICAgICAgICAgICAgICAgIHJldFZpZXdbMF0gPSBmaXJzdE9jdGV0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXRWaWV3LmJ1ZmZlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzSGV4T25seSkge1xyXG4gICAgICAgICAgICBjb25zdCBlbmNvZGVkQnVmID0gcHZ1dGlscy51dGlsVG9CYXNlKHRoaXMudGFnTnVtYmVyLCA3KTtcclxuICAgICAgICAgICAgY29uc3QgZW5jb2RlZFZpZXcgPSBuZXcgVWludDhBcnJheShlbmNvZGVkQnVmKTtcclxuICAgICAgICAgICAgY29uc3Qgc2l6ZSA9IGVuY29kZWRCdWYuYnl0ZUxlbmd0aDtcclxuICAgICAgICAgICAgY29uc3QgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KHNpemUgKyAxKTtcclxuICAgICAgICAgICAgcmV0Vmlld1swXSA9IChmaXJzdE9jdGV0IHwgMHgxRik7XHJcbiAgICAgICAgICAgIGlmICghc2l6ZU9ubHkpIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgKHNpemUgLSAxKTsgaSsrKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldFZpZXdbaSArIDFdID0gZW5jb2RlZFZpZXdbaV0gfCAweDgwO1xyXG4gICAgICAgICAgICAgICAgcmV0Vmlld1tzaXplXSA9IGVuY29kZWRWaWV3W3NpemUgLSAxXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmV0Vmlldy5idWZmZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJldFZpZXcgPSBuZXcgVWludDhBcnJheSh0aGlzLnZhbHVlSGV4Vmlldy5ieXRlTGVuZ3RoICsgMSk7XHJcbiAgICAgICAgcmV0Vmlld1swXSA9IChmaXJzdE9jdGV0IHwgMHgxRik7XHJcbiAgICAgICAgaWYgKCFzaXplT25seSkge1xyXG4gICAgICAgICAgICBjb25zdCBjdXJWaWV3ID0gdGhpcy52YWx1ZUhleFZpZXc7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgKGN1clZpZXcubGVuZ3RoIC0gMSk7IGkrKylcclxuICAgICAgICAgICAgICAgIHJldFZpZXdbaSArIDFdID0gY3VyVmlld1tpXSB8IDB4ODA7XHJcbiAgICAgICAgICAgIHJldFZpZXdbdGhpcy52YWx1ZUhleFZpZXcuYnl0ZUxlbmd0aF0gPSBjdXJWaWV3W2N1clZpZXcubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXRWaWV3LmJ1ZmZlcjtcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IGlucHV0VmlldyA9IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGlucHV0QnVmZmVyKTtcclxuICAgICAgICBpZiAoIWNoZWNrQnVmZmVyUGFyYW1zKHRoaXMsIGlucHV0VmlldywgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGludEJ1ZmZlciA9IGlucHV0Vmlldy5zdWJhcnJheShpbnB1dE9mZnNldCwgaW5wdXRPZmZzZXQgKyBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgaWYgKGludEJ1ZmZlci5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiWmVybyBidWZmZXIgbGVuZ3RoXCI7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdGFnQ2xhc3NNYXNrID0gaW50QnVmZmVyWzBdICYgMHhDMDtcclxuICAgICAgICBzd2l0Y2ggKHRhZ0NsYXNzTWFzaykge1xyXG4gICAgICAgICAgICBjYXNlIDB4MDA6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRhZ0NsYXNzID0gKDEpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMHg0MDpcclxuICAgICAgICAgICAgICAgIHRoaXMudGFnQ2xhc3MgPSAoMik7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAweDgwOlxyXG4gICAgICAgICAgICAgICAgdGhpcy50YWdDbGFzcyA9ICgzKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDB4QzA6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRhZ0NsYXNzID0gKDQpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gXCJVbmtub3duIHRhZyBjbGFzc1wiO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzQ29uc3RydWN0ZWQgPSAoaW50QnVmZmVyWzBdICYgMHgyMCkgPT09IDB4MjA7XHJcbiAgICAgICAgdGhpcy5pc0hleE9ubHkgPSBmYWxzZTtcclxuICAgICAgICBjb25zdCB0YWdOdW1iZXJNYXNrID0gaW50QnVmZmVyWzBdICYgMHgxRjtcclxuICAgICAgICBpZiAodGFnTnVtYmVyTWFzayAhPT0gMHgxRikge1xyXG4gICAgICAgICAgICB0aGlzLnRhZ051bWJlciA9ICh0YWdOdW1iZXJNYXNrKTtcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCA9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgY291bnQgPSAxO1xyXG4gICAgICAgICAgICBsZXQgaW50VGFnTnVtYmVyQnVmZmVyID0gdGhpcy52YWx1ZUhleFZpZXcgPSBuZXcgVWludDhBcnJheSgyNTUpO1xyXG4gICAgICAgICAgICBsZXQgdGFnTnVtYmVyQnVmZmVyTWF4TGVuZ3RoID0gMjU1O1xyXG4gICAgICAgICAgICB3aGlsZSAoaW50QnVmZmVyW2NvdW50XSAmIDB4ODApIHtcclxuICAgICAgICAgICAgICAgIGludFRhZ051bWJlckJ1ZmZlcltjb3VudCAtIDFdID0gaW50QnVmZmVyW2NvdW50XSAmIDB4N0Y7XHJcbiAgICAgICAgICAgICAgICBjb3VudCsrO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvdW50ID49IGludEJ1ZmZlci5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gXCJFbmQgb2YgaW5wdXQgcmVhY2hlZCBiZWZvcmUgbWVzc2FnZSB3YXMgZnVsbHkgZGVjb2RlZFwiO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChjb3VudCA9PT0gdGFnTnVtYmVyQnVmZmVyTWF4TGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFnTnVtYmVyQnVmZmVyTWF4TGVuZ3RoICs9IDI1NTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZW1wQnVmZmVyVmlldyA9IG5ldyBVaW50OEFycmF5KHRhZ051bWJlckJ1ZmZlck1heExlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnRUYWdOdW1iZXJCdWZmZXIubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBCdWZmZXJWaWV3W2ldID0gaW50VGFnTnVtYmVyQnVmZmVyW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIGludFRhZ051bWJlckJ1ZmZlciA9IHRoaXMudmFsdWVIZXhWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodGFnTnVtYmVyQnVmZmVyTWF4TGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoID0gKGNvdW50ICsgMSk7XHJcbiAgICAgICAgICAgIGludFRhZ051bWJlckJ1ZmZlcltjb3VudCAtIDFdID0gaW50QnVmZmVyW2NvdW50XSAmIDB4N0Y7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXBCdWZmZXJWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoY291bnQpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspXHJcbiAgICAgICAgICAgICAgICB0ZW1wQnVmZmVyVmlld1tpXSA9IGludFRhZ051bWJlckJ1ZmZlcltpXTtcclxuICAgICAgICAgICAgaW50VGFnTnVtYmVyQnVmZmVyID0gdGhpcy52YWx1ZUhleFZpZXcgPSBuZXcgVWludDhBcnJheShjb3VudCk7XHJcbiAgICAgICAgICAgIGludFRhZ051bWJlckJ1ZmZlci5zZXQodGVtcEJ1ZmZlclZpZXcpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5ibG9ja0xlbmd0aCA8PSA5KVxyXG4gICAgICAgICAgICAgICAgdGhpcy50YWdOdW1iZXIgPSBwdnV0aWxzLnV0aWxGcm9tQmFzZShpbnRUYWdOdW1iZXJCdWZmZXIsIDcpO1xyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNIZXhPbmx5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMud2FybmluZ3MucHVzaChcIlRhZyB0b28gbG9uZywgcmVwcmVzZW50ZWQgYXMgaGV4LWNvZGVkXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgoKHRoaXMudGFnQ2xhc3MgPT09IDEpKSAmJlxyXG4gICAgICAgICAgICAodGhpcy5pc0NvbnN0cnVjdGVkKSkge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMudGFnTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICBjYXNlIDU6XHJcbiAgICAgICAgICAgICAgICBjYXNlIDY6XHJcbiAgICAgICAgICAgICAgICBjYXNlIDk6XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEzOlxyXG4gICAgICAgICAgICAgICAgY2FzZSAxNDpcclxuICAgICAgICAgICAgICAgIGNhc2UgMjM6XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI0OlxyXG4gICAgICAgICAgICAgICAgY2FzZSAzMTpcclxuICAgICAgICAgICAgICAgIGNhc2UgMzI6XHJcbiAgICAgICAgICAgICAgICBjYXNlIDMzOlxyXG4gICAgICAgICAgICAgICAgY2FzZSAzNDpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gXCJDb25zdHJ1Y3RlZCBlbmNvZGluZyB1c2VkIGZvciBwcmltaXRpdmUgdHlwZVwiO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKGlucHV0T2Zmc2V0ICsgdGhpcy5ibG9ja0xlbmd0aCk7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIHRhZ0NsYXNzOiB0aGlzLnRhZ0NsYXNzLFxyXG4gICAgICAgICAgICB0YWdOdW1iZXI6IHRoaXMudGFnTnVtYmVyLFxyXG4gICAgICAgICAgICBpc0NvbnN0cnVjdGVkOiB0aGlzLmlzQ29uc3RydWN0ZWQsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5Mb2NhbElkZW50aWZpY2F0aW9uQmxvY2suTkFNRSA9IFwiaWRlbnRpZmljYXRpb25CbG9ja1wiO1xuXG5jbGFzcyBMb2NhbExlbmd0aEJsb2NrIGV4dGVuZHMgTG9jYWxCYXNlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IoeyBsZW5CbG9jayA9IHt9LCB9ID0ge30pIHtcclxuICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuaXNJbmRlZmluaXRlRm9ybSA9IChfYSA9IGxlbkJsb2NrLmlzSW5kZWZpbml0ZUZvcm0pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubG9uZ0Zvcm1Vc2VkID0gKF9iID0gbGVuQmxvY2subG9uZ0Zvcm1Vc2VkKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBmYWxzZTtcclxuICAgICAgICB0aGlzLmxlbmd0aCA9IChfYyA9IGxlbkJsb2NrLmxlbmd0aCkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogMDtcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IHZpZXcgPSBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShpbnB1dEJ1ZmZlcik7XHJcbiAgICAgICAgaWYgKCFjaGVja0J1ZmZlclBhcmFtcyh0aGlzLCB2aWV3LCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaW50QnVmZmVyID0gdmlldy5zdWJhcnJheShpbnB1dE9mZnNldCwgaW5wdXRPZmZzZXQgKyBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgaWYgKGludEJ1ZmZlci5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiWmVybyBidWZmZXIgbGVuZ3RoXCI7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGludEJ1ZmZlclswXSA9PT0gMHhGRikge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gXCJMZW5ndGggYmxvY2sgMHhGRiBpcyByZXNlcnZlZCBieSBzdGFuZGFyZFwiO1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNJbmRlZmluaXRlRm9ybSA9IGludEJ1ZmZlclswXSA9PT0gMHg4MDtcclxuICAgICAgICBpZiAodGhpcy5pc0luZGVmaW5pdGVGb3JtKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggPSAxO1xyXG4gICAgICAgICAgICByZXR1cm4gKGlucHV0T2Zmc2V0ICsgdGhpcy5ibG9ja0xlbmd0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubG9uZ0Zvcm1Vc2VkID0gISEoaW50QnVmZmVyWzBdICYgMHg4MCk7XHJcbiAgICAgICAgaWYgKHRoaXMubG9uZ0Zvcm1Vc2VkID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICB0aGlzLmxlbmd0aCA9IChpbnRCdWZmZXJbMF0pO1xyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoID0gMTtcclxuICAgICAgICAgICAgcmV0dXJuIChpbnB1dE9mZnNldCArIHRoaXMuYmxvY2tMZW5ndGgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjb3VudCA9IGludEJ1ZmZlclswXSAmIDB4N0Y7XHJcbiAgICAgICAgaWYgKGNvdW50ID4gOCkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gXCJUb28gYmlnIGludGVnZXJcIjtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoKGNvdW50ICsgMSkgPiBpbnRCdWZmZXIubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIkVuZCBvZiBpbnB1dCByZWFjaGVkIGJlZm9yZSBtZXNzYWdlIHdhcyBmdWxseSBkZWNvZGVkXCI7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbGVuT2Zmc2V0ID0gaW5wdXRPZmZzZXQgKyAxO1xyXG4gICAgICAgIGNvbnN0IGxlbmd0aEJ1ZmZlclZpZXcgPSB2aWV3LnN1YmFycmF5KGxlbk9mZnNldCwgbGVuT2Zmc2V0ICsgY291bnQpO1xyXG4gICAgICAgIGlmIChsZW5ndGhCdWZmZXJWaWV3W2NvdW50IC0gMV0gPT09IDB4MDApXHJcbiAgICAgICAgICAgIHRoaXMud2FybmluZ3MucHVzaChcIk5lZWRsZXNzbHkgbG9uZyBlbmNvZGVkIGxlbmd0aFwiKTtcclxuICAgICAgICB0aGlzLmxlbmd0aCA9IHB2dXRpbHMudXRpbEZyb21CYXNlKGxlbmd0aEJ1ZmZlclZpZXcsIDgpO1xyXG4gICAgICAgIGlmICh0aGlzLmxvbmdGb3JtVXNlZCAmJiAodGhpcy5sZW5ndGggPD0gMTI3KSlcclxuICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKFwiVW5uZWNlc3NhcnkgdXNhZ2Ugb2YgbG9uZyBsZW5ndGggZm9ybVwiKTtcclxuICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoID0gY291bnQgKyAxO1xyXG4gICAgICAgIHJldHVybiAoaW5wdXRPZmZzZXQgKyB0aGlzLmJsb2NrTGVuZ3RoKTtcclxuICAgIH1cclxuICAgIHRvQkVSKHNpemVPbmx5ID0gZmFsc2UpIHtcclxuICAgICAgICBsZXQgcmV0QnVmO1xyXG4gICAgICAgIGxldCByZXRWaWV3O1xyXG4gICAgICAgIGlmICh0aGlzLmxlbmd0aCA+IDEyNylcclxuICAgICAgICAgICAgdGhpcy5sb25nRm9ybVVzZWQgPSB0cnVlO1xyXG4gICAgICAgIGlmICh0aGlzLmlzSW5kZWZpbml0ZUZvcm0pIHtcclxuICAgICAgICAgICAgcmV0QnVmID0gbmV3IEFycmF5QnVmZmVyKDEpO1xyXG4gICAgICAgICAgICBpZiAoc2l6ZU9ubHkgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkocmV0QnVmKTtcclxuICAgICAgICAgICAgICAgIHJldFZpZXdbMF0gPSAweDgwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXRCdWY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmxvbmdGb3JtVXNlZCkge1xyXG4gICAgICAgICAgICBjb25zdCBlbmNvZGVkQnVmID0gcHZ1dGlscy51dGlsVG9CYXNlKHRoaXMubGVuZ3RoLCA4KTtcclxuICAgICAgICAgICAgaWYgKGVuY29kZWRCdWYuYnl0ZUxlbmd0aCA+IDEyNykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiVG9vIGJpZyBsZW5ndGhcIjtcclxuICAgICAgICAgICAgICAgIHJldHVybiAoRU1QVFlfQlVGRkVSKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXRCdWYgPSBuZXcgQXJyYXlCdWZmZXIoZW5jb2RlZEJ1Zi5ieXRlTGVuZ3RoICsgMSk7XHJcbiAgICAgICAgICAgIGlmIChzaXplT25seSlcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXRCdWY7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuY29kZWRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoZW5jb2RlZEJ1Zik7XHJcbiAgICAgICAgICAgIHJldFZpZXcgPSBuZXcgVWludDhBcnJheShyZXRCdWYpO1xyXG4gICAgICAgICAgICByZXRWaWV3WzBdID0gZW5jb2RlZEJ1Zi5ieXRlTGVuZ3RoIHwgMHg4MDtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbmNvZGVkQnVmLmJ5dGVMZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgICAgIHJldFZpZXdbaSArIDFdID0gZW5jb2RlZFZpZXdbaV07XHJcbiAgICAgICAgICAgIHJldHVybiByZXRCdWY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldEJ1ZiA9IG5ldyBBcnJheUJ1ZmZlcigxKTtcclxuICAgICAgICBpZiAoc2l6ZU9ubHkgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIHJldFZpZXcgPSBuZXcgVWludDhBcnJheShyZXRCdWYpO1xyXG4gICAgICAgICAgICByZXRWaWV3WzBdID0gdGhpcy5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXRCdWY7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIGlzSW5kZWZpbml0ZUZvcm06IHRoaXMuaXNJbmRlZmluaXRlRm9ybSxcclxuICAgICAgICAgICAgbG9uZ0Zvcm1Vc2VkOiB0aGlzLmxvbmdGb3JtVXNlZCxcclxuICAgICAgICAgICAgbGVuZ3RoOiB0aGlzLmxlbmd0aCxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbkxvY2FsTGVuZ3RoQmxvY2suTkFNRSA9IFwibGVuZ3RoQmxvY2tcIjtcblxuY29uc3QgdHlwZVN0b3JlID0ge307XG5cbmNsYXNzIEJhc2VCbG9jayBleHRlbmRzIExvY2FsQmFzZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgbmFtZSA9IEVNUFRZX1NUUklORywgb3B0aW9uYWwgPSBmYWxzZSwgcHJpbWl0aXZlU2NoZW1hLCAuLi5wYXJhbWV0ZXJzIH0gPSB7fSwgdmFsdWVCbG9ja1R5cGUpIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xyXG4gICAgICAgIHRoaXMub3B0aW9uYWwgPSBvcHRpb25hbDtcclxuICAgICAgICBpZiAocHJpbWl0aXZlU2NoZW1hKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJpbWl0aXZlU2NoZW1hID0gcHJpbWl0aXZlU2NoZW1hO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlkQmxvY2sgPSBuZXcgTG9jYWxJZGVudGlmaWNhdGlvbkJsb2NrKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMubGVuQmxvY2sgPSBuZXcgTG9jYWxMZW5ndGhCbG9jayhwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2sgPSB2YWx1ZUJsb2NrVHlwZSA/IG5ldyB2YWx1ZUJsb2NrVHlwZShwYXJhbWV0ZXJzKSA6IG5ldyBWYWx1ZUJsb2NrKHBhcmFtZXRlcnMpO1xyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0T2Zmc2V0ID0gdGhpcy52YWx1ZUJsb2NrLmZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCAodGhpcy5sZW5CbG9jay5pc0luZGVmaW5pdGVGb3JtKSA/IGlucHV0TGVuZ3RoIDogdGhpcy5sZW5CbG9jay5sZW5ndGgpO1xyXG4gICAgICAgIGlmIChyZXN1bHRPZmZzZXQgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSB0aGlzLnZhbHVlQmxvY2suZXJyb3I7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5pZEJsb2NrLmVycm9yLmxlbmd0aClcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCArPSB0aGlzLmlkQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgaWYgKCF0aGlzLmxlbkJsb2NrLmVycm9yLmxlbmd0aClcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCArPSB0aGlzLmxlbkJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgIGlmICghdGhpcy52YWx1ZUJsb2NrLmVycm9yLmxlbmd0aClcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCArPSB0aGlzLnZhbHVlQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdE9mZnNldDtcclxuICAgIH1cclxuICAgIHRvQkVSKHNpemVPbmx5LCB3cml0ZXIpIHtcclxuICAgICAgICBjb25zdCBfd3JpdGVyID0gd3JpdGVyIHx8IG5ldyBWaWV3V3JpdGVyKCk7XHJcbiAgICAgICAgaWYgKCF3cml0ZXIpIHtcclxuICAgICAgICAgICAgcHJlcGFyZUluZGVmaW5pdGVGb3JtKHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpZEJsb2NrQnVmID0gdGhpcy5pZEJsb2NrLnRvQkVSKHNpemVPbmx5KTtcclxuICAgICAgICBfd3JpdGVyLndyaXRlKGlkQmxvY2tCdWYpO1xyXG4gICAgICAgIGlmICh0aGlzLmxlbkJsb2NrLmlzSW5kZWZpbml0ZUZvcm0pIHtcclxuICAgICAgICAgICAgX3dyaXRlci53cml0ZShuZXcgVWludDhBcnJheShbMHg4MF0pLmJ1ZmZlcik7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVCbG9jay50b0JFUihzaXplT25seSwgX3dyaXRlcik7XHJcbiAgICAgICAgICAgIF93cml0ZXIud3JpdGUobmV3IEFycmF5QnVmZmVyKDIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlQmxvY2tCdWYgPSB0aGlzLnZhbHVlQmxvY2sudG9CRVIoc2l6ZU9ubHkpO1xyXG4gICAgICAgICAgICB0aGlzLmxlbkJsb2NrLmxlbmd0aCA9IHZhbHVlQmxvY2tCdWYuYnl0ZUxlbmd0aDtcclxuICAgICAgICAgICAgY29uc3QgbGVuQmxvY2tCdWYgPSB0aGlzLmxlbkJsb2NrLnRvQkVSKHNpemVPbmx5KTtcclxuICAgICAgICAgICAgX3dyaXRlci53cml0ZShsZW5CbG9ja0J1Zik7XHJcbiAgICAgICAgICAgIF93cml0ZXIud3JpdGUodmFsdWVCbG9ja0J1Zik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghd3JpdGVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBfd3JpdGVyLmZpbmFsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBFTVBUWV9CVUZGRVI7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgY29uc3Qgb2JqZWN0ID0ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgaWRCbG9jazogdGhpcy5pZEJsb2NrLnRvSlNPTigpLFxyXG4gICAgICAgICAgICBsZW5CbG9jazogdGhpcy5sZW5CbG9jay50b0pTT04oKSxcclxuICAgICAgICAgICAgdmFsdWVCbG9jazogdGhpcy52YWx1ZUJsb2NrLnRvSlNPTigpLFxyXG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXHJcbiAgICAgICAgICAgIG9wdGlvbmFsOiB0aGlzLm9wdGlvbmFsLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKHRoaXMucHJpbWl0aXZlU2NoZW1hKVxyXG4gICAgICAgICAgICBvYmplY3QucHJpbWl0aXZlU2NoZW1hID0gdGhpcy5wcmltaXRpdmVTY2hlbWEudG9KU09OKCk7XHJcbiAgICAgICAgcmV0dXJuIG9iamVjdDtcclxuICAgIH1cclxuICAgIHRvU3RyaW5nKGVuY29kaW5nID0gXCJhc2NpaVwiKSB7XHJcbiAgICAgICAgaWYgKGVuY29kaW5nID09PSBcImFzY2lpXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMub25Bc2NpaUVuY29kaW5nKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwdnRzdXRpbHMuQ29udmVydC5Ub0hleCh0aGlzLnRvQkVSKCkpO1xyXG4gICAgfVxyXG4gICAgb25Bc2NpaUVuY29kaW5nKCkge1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNvbnN0cnVjdG9yLk5BTUV9IDogJHtwdnRzdXRpbHMuQ29udmVydC5Ub0hleCh0aGlzLnZhbHVlQmxvY2sudmFsdWVCZWZvcmVEZWNvZGVWaWV3KX1gO1xyXG4gICAgfVxyXG4gICAgaXNFcXVhbChvdGhlcikge1xyXG4gICAgICAgIGlmICh0aGlzID09PSBvdGhlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRoaXNSYXcgPSB0aGlzLnRvQkVSKCk7XHJcbiAgICAgICAgY29uc3Qgb3RoZXJSYXcgPSBvdGhlci50b0JFUigpO1xyXG4gICAgICAgIHJldHVybiBwdnV0aWxzLmlzRXF1YWxCdWZmZXIodGhpc1Jhdywgb3RoZXJSYXcpO1xyXG4gICAgfVxyXG59XHJcbkJhc2VCbG9jay5OQU1FID0gXCJCYXNlQmxvY2tcIjtcclxuZnVuY3Rpb24gcHJlcGFyZUluZGVmaW5pdGVGb3JtKGJhc2VCbG9jaykge1xyXG4gICAgaWYgKGJhc2VCbG9jayBpbnN0YW5jZW9mIHR5cGVTdG9yZS5Db25zdHJ1Y3RlZCkge1xyXG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgYmFzZUJsb2NrLnZhbHVlQmxvY2sudmFsdWUpIHtcclxuICAgICAgICAgICAgaWYgKHByZXBhcmVJbmRlZmluaXRlRm9ybSh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIGJhc2VCbG9jay5sZW5CbG9jay5pc0luZGVmaW5pdGVGb3JtID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiAhIWJhc2VCbG9jay5sZW5CbG9jay5pc0luZGVmaW5pdGVGb3JtO1xyXG59XG5cbmNsYXNzIEJhc2VTdHJpbmdCbG9jayBleHRlbmRzIEJhc2VCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IHZhbHVlID0gRU1QVFlfU1RSSU5HLCAuLi5wYXJhbWV0ZXJzIH0gPSB7fSwgc3RyaW5nVmFsdWVCbG9ja1R5cGUpIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzLCBzdHJpbmdWYWx1ZUJsb2NrVHlwZSk7XHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJvbVN0cmluZyh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZ2V0VmFsdWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVCbG9jay52YWx1ZTtcclxuICAgIH1cclxuICAgIHNldFZhbHVlKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBjb25zdCByZXN1bHRPZmZzZXQgPSB0aGlzLnZhbHVlQmxvY2suZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsICh0aGlzLmxlbkJsb2NrLmlzSW5kZWZpbml0ZUZvcm0pID8gaW5wdXRMZW5ndGggOiB0aGlzLmxlbkJsb2NrLmxlbmd0aCk7XHJcbiAgICAgICAgaWYgKHJlc3VsdE9mZnNldCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvciA9IHRoaXMudmFsdWVCbG9jay5lcnJvcjtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdE9mZnNldDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5mcm9tQnVmZmVyKHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXcpO1xyXG4gICAgICAgIGlmICghdGhpcy5pZEJsb2NrLmVycm9yLmxlbmd0aClcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCArPSB0aGlzLmlkQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgaWYgKCF0aGlzLmxlbkJsb2NrLmVycm9yLmxlbmd0aClcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCArPSB0aGlzLmxlbkJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgIGlmICghdGhpcy52YWx1ZUJsb2NrLmVycm9yLmxlbmd0aClcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCArPSB0aGlzLnZhbHVlQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdE9mZnNldDtcclxuICAgIH1cclxuICAgIG9uQXNjaWlFbmNvZGluZygpIHtcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FfSA6ICcke3RoaXMudmFsdWVCbG9jay52YWx1ZX0nYDtcclxuICAgIH1cclxufVxyXG5CYXNlU3RyaW5nQmxvY2suTkFNRSA9IFwiQmFzZVN0cmluZ0Jsb2NrXCI7XG5cbmNsYXNzIExvY2FsUHJpbWl0aXZlVmFsdWVCbG9jayBleHRlbmRzIEhleEJsb2NrKFZhbHVlQmxvY2spIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgaXNIZXhPbmx5ID0gdHJ1ZSwgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlzSGV4T25seSA9IGlzSGV4T25seTtcclxuICAgIH1cclxufVxyXG5Mb2NhbFByaW1pdGl2ZVZhbHVlQmxvY2suTkFNRSA9IFwiUHJpbWl0aXZlVmFsdWVCbG9ja1wiO1xuXG52YXIgX2EkdztcclxuY2xhc3MgUHJpbWl0aXZlIGV4dGVuZHMgQmFzZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMsIExvY2FsUHJpbWl0aXZlVmFsdWVCbG9jayk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLmlzQ29uc3RydWN0ZWQgPSBmYWxzZTtcclxuICAgIH1cclxufVxyXG5fYSR3ID0gUHJpbWl0aXZlO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLlByaW1pdGl2ZSA9IF9hJHc7XHJcbn0pKCk7XHJcblByaW1pdGl2ZS5OQU1FID0gXCJQUklNSVRJVkVcIjtcblxuZnVuY3Rpb24gbG9jYWxDaGFuZ2VUeXBlKGlucHV0T2JqZWN0LCBuZXdUeXBlKSB7XHJcbiAgICBpZiAoaW5wdXRPYmplY3QgaW5zdGFuY2VvZiBuZXdUeXBlKSB7XHJcbiAgICAgICAgcmV0dXJuIGlucHV0T2JqZWN0O1xyXG4gICAgfVxyXG4gICAgY29uc3QgbmV3T2JqZWN0ID0gbmV3IG5ld1R5cGUoKTtcclxuICAgIG5ld09iamVjdC5pZEJsb2NrID0gaW5wdXRPYmplY3QuaWRCbG9jaztcclxuICAgIG5ld09iamVjdC5sZW5CbG9jayA9IGlucHV0T2JqZWN0LmxlbkJsb2NrO1xyXG4gICAgbmV3T2JqZWN0Lndhcm5pbmdzID0gaW5wdXRPYmplY3Qud2FybmluZ3M7XHJcbiAgICBuZXdPYmplY3QudmFsdWVCZWZvcmVEZWNvZGVWaWV3ID0gaW5wdXRPYmplY3QudmFsdWVCZWZvcmVEZWNvZGVWaWV3O1xyXG4gICAgcmV0dXJuIG5ld09iamVjdDtcclxufVxyXG5mdW5jdGlvbiBsb2NhbEZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0ID0gMCwgaW5wdXRMZW5ndGggPSBpbnB1dEJ1ZmZlci5sZW5ndGgpIHtcclxuICAgIGNvbnN0IGluY29taW5nT2Zmc2V0ID0gaW5wdXRPZmZzZXQ7XHJcbiAgICBsZXQgcmV0dXJuT2JqZWN0ID0gbmV3IEJhc2VCbG9jayh7fSwgVmFsdWVCbG9jayk7XHJcbiAgICBjb25zdCBiYXNlQmxvY2sgPSBuZXcgTG9jYWxCYXNlQmxvY2soKTtcclxuICAgIGlmICghY2hlY2tCdWZmZXJQYXJhbXMoYmFzZUJsb2NrLCBpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSkge1xyXG4gICAgICAgIHJldHVybk9iamVjdC5lcnJvciA9IGJhc2VCbG9jay5lcnJvcjtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBvZmZzZXQ6IC0xLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHJldHVybk9iamVjdFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBjb25zdCBpbnRCdWZmZXIgPSBpbnB1dEJ1ZmZlci5zdWJhcnJheShpbnB1dE9mZnNldCwgaW5wdXRPZmZzZXQgKyBpbnB1dExlbmd0aCk7XHJcbiAgICBpZiAoIWludEJ1ZmZlci5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm5PYmplY3QuZXJyb3IgPSBcIlplcm8gYnVmZmVyIGxlbmd0aFwiO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG9mZnNldDogLTEsXHJcbiAgICAgICAgICAgIHJlc3VsdDogcmV0dXJuT2JqZWN0XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGxldCByZXN1bHRPZmZzZXQgPSByZXR1cm5PYmplY3QuaWRCbG9jay5mcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpO1xyXG4gICAgaWYgKHJldHVybk9iamVjdC5pZEJsb2NrLndhcm5pbmdzLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybk9iamVjdC53YXJuaW5ncy5jb25jYXQocmV0dXJuT2JqZWN0LmlkQmxvY2sud2FybmluZ3MpO1xyXG4gICAgfVxyXG4gICAgaWYgKHJlc3VsdE9mZnNldCA9PT0gLTEpIHtcclxuICAgICAgICByZXR1cm5PYmplY3QuZXJyb3IgPSByZXR1cm5PYmplY3QuaWRCbG9jay5lcnJvcjtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBvZmZzZXQ6IC0xLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHJldHVybk9iamVjdFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpbnB1dE9mZnNldCA9IHJlc3VsdE9mZnNldDtcclxuICAgIGlucHV0TGVuZ3RoIC09IHJldHVybk9iamVjdC5pZEJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgcmVzdWx0T2Zmc2V0ID0gcmV0dXJuT2JqZWN0LmxlbkJsb2NrLmZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCk7XHJcbiAgICBpZiAocmV0dXJuT2JqZWN0LmxlbkJsb2NrLndhcm5pbmdzLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybk9iamVjdC53YXJuaW5ncy5jb25jYXQocmV0dXJuT2JqZWN0LmxlbkJsb2NrLndhcm5pbmdzKTtcclxuICAgIH1cclxuICAgIGlmIChyZXN1bHRPZmZzZXQgPT09IC0xKSB7XHJcbiAgICAgICAgcmV0dXJuT2JqZWN0LmVycm9yID0gcmV0dXJuT2JqZWN0LmxlbkJsb2NrLmVycm9yO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG9mZnNldDogLTEsXHJcbiAgICAgICAgICAgIHJlc3VsdDogcmV0dXJuT2JqZWN0XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlucHV0T2Zmc2V0ID0gcmVzdWx0T2Zmc2V0O1xyXG4gICAgaW5wdXRMZW5ndGggLT0gcmV0dXJuT2JqZWN0LmxlbkJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgaWYgKCFyZXR1cm5PYmplY3QuaWRCbG9jay5pc0NvbnN0cnVjdGVkICYmXHJcbiAgICAgICAgcmV0dXJuT2JqZWN0LmxlbkJsb2NrLmlzSW5kZWZpbml0ZUZvcm0pIHtcclxuICAgICAgICByZXR1cm5PYmplY3QuZXJyb3IgPSBcIkluZGVmaW5pdGUgbGVuZ3RoIGZvcm0gdXNlZCBmb3IgcHJpbWl0aXZlIGVuY29kaW5nIGZvcm1cIjtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBvZmZzZXQ6IC0xLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHJldHVybk9iamVjdFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBsZXQgbmV3QVNOMVR5cGUgPSBCYXNlQmxvY2s7XHJcbiAgICBzd2l0Y2ggKHJldHVybk9iamVjdC5pZEJsb2NrLnRhZ0NsYXNzKSB7XHJcbiAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICBpZiAoKHJldHVybk9iamVjdC5pZEJsb2NrLnRhZ051bWJlciA+PSAzNykgJiZcclxuICAgICAgICAgICAgICAgIChyZXR1cm5PYmplY3QuaWRCbG9jay5pc0hleE9ubHkgPT09IGZhbHNlKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuT2JqZWN0LmVycm9yID0gXCJVTklWRVJTQUwgMzcgYW5kIHVwcGVyIHRhZ3MgYXJlIHJlc2VydmVkIGJ5IEFTTi4xIHN0YW5kYXJkXCI7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldDogLTEsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0OiByZXR1cm5PYmplY3RcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc3dpdGNoIChyZXR1cm5PYmplY3QuaWRCbG9jay50YWdOdW1iZXIpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoKHJldHVybk9iamVjdC5pZEJsb2NrLmlzQ29uc3RydWN0ZWQpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChyZXR1cm5PYmplY3QubGVuQmxvY2subGVuZ3RoID4gMCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuT2JqZWN0LmVycm9yID0gXCJUeXBlIFtVTklWRVJTQUwgMF0gaXMgcmVzZXJ2ZWRcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogLTEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IHJldHVybk9iamVjdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5FbmRPZkNvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuQm9vbGVhbjtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5JbnRlZ2VyO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLkJpdFN0cmluZztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5PY3RldFN0cmluZztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNTpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5OdWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA2OlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLk9iamVjdElkZW50aWZpZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEwOlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLkVudW1lcmF0ZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEyOlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLlV0ZjhTdHJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEzOlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLlJlbGF0aXZlT2JqZWN0SWRlbnRpZmllcjtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTQ6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuVElNRTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTU6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuT2JqZWN0LmVycm9yID0gXCJbVU5JVkVSU0FMIDE1XSBpcyByZXNlcnZlZCBieSBBU04uMSBzdGFuZGFyZFwiO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogLTEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdDogcmV0dXJuT2JqZWN0XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgMTY6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuU2VxdWVuY2U7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE3OlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLlNldDtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTg6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuTnVtZXJpY1N0cmluZztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTk6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuUHJpbnRhYmxlU3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyMDpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5UZWxldGV4U3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyMTpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5WaWRlb3RleFN0cmluZztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjI6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuSUE1U3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyMzpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5VVENUaW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyNDpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5HZW5lcmFsaXplZFRpbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI1OlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLkdyYXBoaWNTdHJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI2OlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLlZpc2libGVTdHJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI3OlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLkdlbmVyYWxTdHJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI4OlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLlVuaXZlcnNhbFN0cmluZztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjk6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuQ2hhcmFjdGVyU3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzMDpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5CbXBTdHJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDMxOlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLkRBVEU7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDMyOlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLlRpbWVPZkRheTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMzM6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuRGF0ZVRpbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM0OlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLkR1cmF0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld09iamVjdCA9IHJldHVybk9iamVjdC5pZEJsb2NrLmlzQ29uc3RydWN0ZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBuZXcgdHlwZVN0b3JlLkNvbnN0cnVjdGVkKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBuZXcgdHlwZVN0b3JlLlByaW1pdGl2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld09iamVjdC5pZEJsb2NrID0gcmV0dXJuT2JqZWN0LmlkQmxvY2s7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3T2JqZWN0LmxlbkJsb2NrID0gcmV0dXJuT2JqZWN0LmxlbkJsb2NrO1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld09iamVjdC53YXJuaW5ncyA9IHJldHVybk9iamVjdC53YXJuaW5ncztcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5PYmplY3QgPSBuZXdPYmplY3Q7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgIGNhc2UgMzpcclxuICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgICAgICBuZXdBU04xVHlwZSA9IHJldHVybk9iamVjdC5pZEJsb2NrLmlzQ29uc3RydWN0ZWRcclxuICAgICAgICAgICAgICAgID8gdHlwZVN0b3JlLkNvbnN0cnVjdGVkXHJcbiAgICAgICAgICAgICAgICA6IHR5cGVTdG9yZS5QcmltaXRpdmU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuT2JqZWN0ID0gbG9jYWxDaGFuZ2VUeXBlKHJldHVybk9iamVjdCwgbmV3QVNOMVR5cGUpO1xyXG4gICAgcmVzdWx0T2Zmc2V0ID0gcmV0dXJuT2JqZWN0LmZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCByZXR1cm5PYmplY3QubGVuQmxvY2suaXNJbmRlZmluaXRlRm9ybSA/IGlucHV0TGVuZ3RoIDogcmV0dXJuT2JqZWN0LmxlbkJsb2NrLmxlbmd0aCk7XHJcbiAgICByZXR1cm5PYmplY3QudmFsdWVCZWZvcmVEZWNvZGVWaWV3ID0gaW5wdXRCdWZmZXIuc3ViYXJyYXkoaW5jb21pbmdPZmZzZXQsIGluY29taW5nT2Zmc2V0ICsgcmV0dXJuT2JqZWN0LmJsb2NrTGVuZ3RoKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgb2Zmc2V0OiByZXN1bHRPZmZzZXQsXHJcbiAgICAgICAgcmVzdWx0OiByZXR1cm5PYmplY3RcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gZnJvbUJFUihpbnB1dEJ1ZmZlcikge1xyXG4gICAgaWYgKCFpbnB1dEJ1ZmZlci5ieXRlTGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IEJhc2VCbG9jayh7fSwgVmFsdWVCbG9jayk7XHJcbiAgICAgICAgcmVzdWx0LmVycm9yID0gXCJJbnB1dCBidWZmZXIgaGFzIHplcm8gbGVuZ3RoXCI7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgb2Zmc2V0OiAtMSxcclxuICAgICAgICAgICAgcmVzdWx0XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIHJldHVybiBsb2NhbEZyb21CRVIocHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoaW5wdXRCdWZmZXIpLnNsaWNlKCksIDAsIGlucHV0QnVmZmVyLmJ5dGVMZW5ndGgpO1xyXG59XG5cbmZ1bmN0aW9uIGNoZWNrTGVuKGluZGVmaW5pdGVMZW5ndGgsIGxlbmd0aCkge1xyXG4gICAgaWYgKGluZGVmaW5pdGVMZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgIH1cclxuICAgIHJldHVybiBsZW5ndGg7XHJcbn1cclxuY2xhc3MgTG9jYWxDb25zdHJ1Y3RlZFZhbHVlQmxvY2sgZXh0ZW5kcyBWYWx1ZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgdmFsdWUgPSBbXSwgaXNJbmRlZmluaXRlRm9ybSA9IGZhbHNlLCAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLmlzSW5kZWZpbml0ZUZvcm0gPSBpc0luZGVmaW5pdGVGb3JtO1xyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgdmlldyA9IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGlucHV0QnVmZmVyKTtcclxuICAgICAgICBpZiAoIWNoZWNrQnVmZmVyUGFyYW1zKHRoaXMsIHZpZXcsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnZhbHVlQmVmb3JlRGVjb2RlVmlldyA9IHZpZXcuc3ViYXJyYXkoaW5wdXRPZmZzZXQsIGlucHV0T2Zmc2V0ICsgaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgIGlmICh0aGlzLnZhbHVlQmVmb3JlRGVjb2RlVmlldy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKFwiWmVybyBidWZmZXIgbGVuZ3RoXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gaW5wdXRPZmZzZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBjdXJyZW50T2Zmc2V0ID0gaW5wdXRPZmZzZXQ7XHJcbiAgICAgICAgd2hpbGUgKGNoZWNrTGVuKHRoaXMuaXNJbmRlZmluaXRlRm9ybSwgaW5wdXRMZW5ndGgpID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCByZXR1cm5PYmplY3QgPSBsb2NhbEZyb21CRVIodmlldywgY3VycmVudE9mZnNldCwgaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgICAgICBpZiAocmV0dXJuT2JqZWN0Lm9mZnNldCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSByZXR1cm5PYmplY3QucmVzdWx0LmVycm9yO1xyXG4gICAgICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5jb25jYXQocmV0dXJuT2JqZWN0LnJlc3VsdC53YXJuaW5ncyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY3VycmVudE9mZnNldCA9IHJldHVybk9iamVjdC5vZmZzZXQ7XHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gcmV0dXJuT2JqZWN0LnJlc3VsdC5ibG9ja0xlbmd0aDtcclxuICAgICAgICAgICAgaW5wdXRMZW5ndGggLT0gcmV0dXJuT2JqZWN0LnJlc3VsdC5ibG9ja0xlbmd0aDtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZS5wdXNoKHJldHVybk9iamVjdC5yZXN1bHQpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0luZGVmaW5pdGVGb3JtICYmIHJldHVybk9iamVjdC5yZXN1bHQuY29uc3RydWN0b3IuTkFNRSA9PT0gRU5EX09GX0NPTlRFTlRfTkFNRSkge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuaXNJbmRlZmluaXRlRm9ybSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZVt0aGlzLnZhbHVlLmxlbmd0aCAtIDFdLmNvbnN0cnVjdG9yLk5BTUUgPT09IEVORF9PRl9DT05URU5UX05BTUUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUucG9wKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1c2goXCJObyBFbmRPZkNvbnRlbnQgYmxvY2sgZW5jb2RlZFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY3VycmVudE9mZnNldDtcclxuICAgIH1cclxuICAgIHRvQkVSKHNpemVPbmx5LCB3cml0ZXIpIHtcclxuICAgICAgICBjb25zdCBfd3JpdGVyID0gd3JpdGVyIHx8IG5ldyBWaWV3V3JpdGVyKCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVbaV0udG9CRVIoc2l6ZU9ubHksIF93cml0ZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXdyaXRlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gX3dyaXRlci5maW5hbCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gRU1QVFlfQlVGRkVSO1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIGNvbnN0IG9iamVjdCA9IHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIGlzSW5kZWZpbml0ZUZvcm06IHRoaXMuaXNJbmRlZmluaXRlRm9ybSxcclxuICAgICAgICAgICAgdmFsdWU6IFtdLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB0aGlzLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIG9iamVjdC52YWx1ZS5wdXNoKHZhbHVlLnRvSlNPTigpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9iamVjdDtcclxuICAgIH1cclxufVxyXG5Mb2NhbENvbnN0cnVjdGVkVmFsdWVCbG9jay5OQU1FID0gXCJDb25zdHJ1Y3RlZFZhbHVlQmxvY2tcIjtcblxudmFyIF9hJHY7XHJcbmNsYXNzIENvbnN0cnVjdGVkIGV4dGVuZHMgQmFzZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMsIExvY2FsQ29uc3RydWN0ZWRWYWx1ZUJsb2NrKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2suaXNDb25zdHJ1Y3RlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2suaXNJbmRlZmluaXRlRm9ybSA9IHRoaXMubGVuQmxvY2suaXNJbmRlZmluaXRlRm9ybTtcclxuICAgICAgICBjb25zdCByZXN1bHRPZmZzZXQgPSB0aGlzLnZhbHVlQmxvY2suZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsICh0aGlzLmxlbkJsb2NrLmlzSW5kZWZpbml0ZUZvcm0pID8gaW5wdXRMZW5ndGggOiB0aGlzLmxlbkJsb2NrLmxlbmd0aCk7XHJcbiAgICAgICAgaWYgKHJlc3VsdE9mZnNldCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvciA9IHRoaXMudmFsdWVCbG9jay5lcnJvcjtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdE9mZnNldDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLmlkQmxvY2suZXJyb3IubGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoICs9IHRoaXMuaWRCbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICBpZiAoIXRoaXMubGVuQmxvY2suZXJyb3IubGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoICs9IHRoaXMubGVuQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgaWYgKCF0aGlzLnZhbHVlQmxvY2suZXJyb3IubGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoICs9IHRoaXMudmFsdWVCbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgfVxyXG4gICAgb25Bc2NpaUVuY29kaW5nKCkge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IFtdO1xyXG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdGhpcy52YWx1ZUJsb2NrLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIHZhbHVlcy5wdXNoKHZhbHVlLnRvU3RyaW5nKFwiYXNjaWlcIikuc3BsaXQoXCJcXG5cIikubWFwKG8gPT4gYCAgJHtvfWApLmpvaW4oXCJcXG5cIikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBibG9ja05hbWUgPSB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPT09IDNcclxuICAgICAgICAgICAgPyBgWyR7dGhpcy5pZEJsb2NrLnRhZ051bWJlcn1dYFxyXG4gICAgICAgICAgICA6IHRoaXMuY29uc3RydWN0b3IuTkFNRTtcclxuICAgICAgICByZXR1cm4gdmFsdWVzLmxlbmd0aFxyXG4gICAgICAgICAgICA/IGAke2Jsb2NrTmFtZX0gOlxcbiR7dmFsdWVzLmpvaW4oXCJcXG5cIil9YFxyXG4gICAgICAgICAgICA6IGAke2Jsb2NrTmFtZX0gOmA7XHJcbiAgICB9XHJcbn1cclxuX2EkdiA9IENvbnN0cnVjdGVkO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLkNvbnN0cnVjdGVkID0gX2EkdjtcclxufSkoKTtcclxuQ29uc3RydWN0ZWQuTkFNRSA9IFwiQ09OU1RSVUNURURcIjtcblxuY2xhc3MgTG9jYWxFbmRPZkNvbnRlbnRWYWx1ZUJsb2NrIGV4dGVuZHMgVmFsdWVCbG9jayB7XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gaW5wdXRPZmZzZXQ7XHJcbiAgICB9XHJcbiAgICB0b0JFUihzaXplT25seSkge1xyXG4gICAgICAgIHJldHVybiBFTVBUWV9CVUZGRVI7XHJcbiAgICB9XHJcbn1cclxuTG9jYWxFbmRPZkNvbnRlbnRWYWx1ZUJsb2NrLm92ZXJyaWRlID0gXCJFbmRPZkNvbnRlbnRWYWx1ZUJsb2NrXCI7XG5cbnZhciBfYSR1O1xyXG5jbGFzcyBFbmRPZkNvbnRlbnQgZXh0ZW5kcyBCYXNlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycywgTG9jYWxFbmRPZkNvbnRlbnRWYWx1ZUJsb2NrKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAwO1xyXG4gICAgfVxyXG59XHJcbl9hJHUgPSBFbmRPZkNvbnRlbnQ7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuRW5kT2ZDb250ZW50ID0gX2EkdTtcclxufSkoKTtcclxuRW5kT2ZDb250ZW50Lk5BTUUgPSBFTkRfT0ZfQ09OVEVOVF9OQU1FO1xuXG52YXIgX2EkdDtcclxuY2xhc3MgTnVsbCBleHRlbmRzIEJhc2VCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzLCBWYWx1ZUJsb2NrKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSA1O1xyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubGVuQmxvY2subGVuZ3RoID4gMClcclxuICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKFwiTm9uLXplcm8gbGVuZ3RoIG9mIHZhbHVlIGJsb2NrIGZvciBOdWxsIHR5cGVcIik7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlkQmxvY2suZXJyb3IubGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoICs9IHRoaXMuaWRCbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICBpZiAoIXRoaXMubGVuQmxvY2suZXJyb3IubGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoICs9IHRoaXMubGVuQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCArPSBpbnB1dExlbmd0aDtcclxuICAgICAgICBpZiAoKGlucHV0T2Zmc2V0ICsgaW5wdXRMZW5ndGgpID4gaW5wdXRCdWZmZXIuYnl0ZUxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gXCJFbmQgb2YgaW5wdXQgcmVhY2hlZCBiZWZvcmUgbWVzc2FnZSB3YXMgZnVsbHkgZGVjb2RlZCAoaW5jb25zaXN0ZW50IG9mZnNldCBhbmQgbGVuZ3RoIHZhbHVlcylcIjtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKGlucHV0T2Zmc2V0ICsgaW5wdXRMZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgdG9CRVIoc2l6ZU9ubHksIHdyaXRlcikge1xyXG4gICAgICAgIGNvbnN0IHJldEJ1ZiA9IG5ldyBBcnJheUJ1ZmZlcigyKTtcclxuICAgICAgICBpZiAoIXNpemVPbmx5KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJldFZpZXcgPSBuZXcgVWludDhBcnJheShyZXRCdWYpO1xyXG4gICAgICAgICAgICByZXRWaWV3WzBdID0gMHgwNTtcclxuICAgICAgICAgICAgcmV0Vmlld1sxXSA9IDB4MDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh3cml0ZXIpIHtcclxuICAgICAgICAgICAgd3JpdGVyLndyaXRlKHJldEJ1Zik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXRCdWY7XHJcbiAgICB9XHJcbiAgICBvbkFzY2lpRW5jb2RpbmcoKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY29uc3RydWN0b3IuTkFNRX1gO1xyXG4gICAgfVxyXG59XHJcbl9hJHQgPSBOdWxsO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLk51bGwgPSBfYSR0O1xyXG59KSgpO1xyXG5OdWxsLk5BTUUgPSBcIk5VTExcIjtcblxuY2xhc3MgTG9jYWxCb29sZWFuVmFsdWVCbG9jayBleHRlbmRzIEhleEJsb2NrKFZhbHVlQmxvY2spIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgdmFsdWUsIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgaWYgKHBhcmFtZXRlcnMudmFsdWVIZXgpIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShwYXJhbWV0ZXJzLnZhbHVlSGV4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZ2V0IHZhbHVlKCkge1xyXG4gICAgICAgIGZvciAoY29uc3Qgb2N0ZXQgb2YgdGhpcy52YWx1ZUhleFZpZXcpIHtcclxuICAgICAgICAgICAgaWYgKG9jdGV0ID4gMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgc2V0IHZhbHVlKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZUhleFZpZXdbMF0gPSB2YWx1ZSA/IDB4RkYgOiAweDAwO1xyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgaW5wdXRWaWV3ID0gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoaW5wdXRCdWZmZXIpO1xyXG4gICAgICAgIGlmICghY2hlY2tCdWZmZXJQYXJhbXModGhpcywgaW5wdXRWaWV3LCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSBpbnB1dFZpZXcuc3ViYXJyYXkoaW5wdXRPZmZzZXQsIGlucHV0T2Zmc2V0ICsgaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgIGlmIChpbnB1dExlbmd0aCA+IDEpXHJcbiAgICAgICAgICAgIHRoaXMud2FybmluZ3MucHVzaChcIkJvb2xlYW4gdmFsdWUgZW5jb2RlZCBpbiBtb3JlIHRoZW4gMSBvY3RldFwiKTtcclxuICAgICAgICB0aGlzLmlzSGV4T25seSA9IHRydWU7XHJcbiAgICAgICAgcHZ1dGlscy51dGlsRGVjb2RlVEMuY2FsbCh0aGlzKTtcclxuICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoID0gaW5wdXRMZW5ndGg7XHJcbiAgICAgICAgcmV0dXJuIChpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoKTtcclxuICAgIH1cclxuICAgIHRvQkVSKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlSGV4Vmlldy5zbGljZSgpO1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbkxvY2FsQm9vbGVhblZhbHVlQmxvY2suTkFNRSA9IFwiQm9vbGVhblZhbHVlQmxvY2tcIjtcblxudmFyIF9hJHM7XHJcbmNsYXNzIEJvb2xlYW4gZXh0ZW5kcyBCYXNlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycywgTG9jYWxCb29sZWFuVmFsdWVCbG9jayk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMTtcclxuICAgIH1cclxuICAgIGdldFZhbHVlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlQmxvY2sudmFsdWU7XHJcbiAgICB9XHJcbiAgICBzZXRWYWx1ZSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgb25Bc2NpaUVuY29kaW5nKCkge1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNvbnN0cnVjdG9yLk5BTUV9IDogJHt0aGlzLmdldFZhbHVlfWA7XHJcbiAgICB9XHJcbn1cclxuX2EkcyA9IEJvb2xlYW47XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuQm9vbGVhbiA9IF9hJHM7XHJcbn0pKCk7XHJcbkJvb2xlYW4uTkFNRSA9IFwiQk9PTEVBTlwiO1xuXG5jbGFzcyBMb2NhbE9jdGV0U3RyaW5nVmFsdWVCbG9jayBleHRlbmRzIEhleEJsb2NrKExvY2FsQ29uc3RydWN0ZWRWYWx1ZUJsb2NrKSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IGlzQ29uc3RydWN0ZWQgPSBmYWxzZSwgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlzQ29uc3RydWN0ZWQgPSBpc0NvbnN0cnVjdGVkO1xyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdE9mZnNldCA9IDA7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNDb25zdHJ1Y3RlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmlzSGV4T25seSA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXN1bHRPZmZzZXQgPSBMb2NhbENvbnN0cnVjdGVkVmFsdWVCbG9jay5wcm90b3R5cGUuZnJvbUJFUi5jYWxsKHRoaXMsIGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0T2Zmc2V0ID09PSAtMSlcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy52YWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudEJsb2NrTmFtZSA9IHRoaXMudmFsdWVbaV0uY29uc3RydWN0b3IuTkFNRTtcclxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50QmxvY2tOYW1lID09PSBFTkRfT0ZfQ09OVEVOVF9OQU1FKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNJbmRlZmluaXRlRm9ybSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIkVuZE9mQ29udGVudCBpcyB1bmV4cGVjdGVkLCBPQ1RFVCBTVFJJTkcgbWF5IGNvbnNpc3RzIG9mIE9DVEVUIFNUUklOR3Mgb25seVwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRCbG9ja05hbWUgIT09IE9DVEVUX1NUUklOR19OQU1FKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiT0NURVQgU1RSSU5HIG1heSBjb25zaXN0cyBvZiBPQ1RFVCBTVFJJTkdzIG9ubHlcIjtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNIZXhPbmx5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmVzdWx0T2Zmc2V0ID0gc3VwZXIuZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCA9IGlucHV0TGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgfVxyXG4gICAgdG9CRVIoc2l6ZU9ubHksIHdyaXRlcikge1xyXG4gICAgICAgIGlmICh0aGlzLmlzQ29uc3RydWN0ZWQpXHJcbiAgICAgICAgICAgIHJldHVybiBMb2NhbENvbnN0cnVjdGVkVmFsdWVCbG9jay5wcm90b3R5cGUudG9CRVIuY2FsbCh0aGlzLCBzaXplT25seSwgd3JpdGVyKTtcclxuICAgICAgICByZXR1cm4gc2l6ZU9ubHlcclxuICAgICAgICAgICAgPyBuZXcgQXJyYXlCdWZmZXIodGhpcy52YWx1ZUhleFZpZXcuYnl0ZUxlbmd0aClcclxuICAgICAgICAgICAgOiB0aGlzLnZhbHVlSGV4Vmlldy5zbGljZSgpLmJ1ZmZlcjtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgaXNDb25zdHJ1Y3RlZDogdGhpcy5pc0NvbnN0cnVjdGVkLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuTG9jYWxPY3RldFN0cmluZ1ZhbHVlQmxvY2suTkFNRSA9IFwiT2N0ZXRTdHJpbmdWYWx1ZUJsb2NrXCI7XG5cbnZhciBfYSRyO1xyXG5jbGFzcyBPY3RldFN0cmluZyBleHRlbmRzIEJhc2VCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IGlkQmxvY2sgPSB7fSwgbGVuQmxvY2sgPSB7fSwgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICB2YXIgX2IsIF9jO1xyXG4gICAgICAgIChfYiA9IHBhcmFtZXRlcnMuaXNDb25zdHJ1Y3RlZCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogKHBhcmFtZXRlcnMuaXNDb25zdHJ1Y3RlZCA9ICEhKChfYyA9IHBhcmFtZXRlcnMudmFsdWUpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5sZW5ndGgpKTtcclxuICAgICAgICBzdXBlcih7XHJcbiAgICAgICAgICAgIGlkQmxvY2s6IHtcclxuICAgICAgICAgICAgICAgIGlzQ29uc3RydWN0ZWQ6IHBhcmFtZXRlcnMuaXNDb25zdHJ1Y3RlZCxcclxuICAgICAgICAgICAgICAgIC4uLmlkQmxvY2ssXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGxlbkJsb2NrOiB7XHJcbiAgICAgICAgICAgICAgICAuLi5sZW5CbG9jayxcclxuICAgICAgICAgICAgICAgIGlzSW5kZWZpbml0ZUZvcm06ICEhcGFyYW1ldGVycy5pc0luZGVmaW5pdGVGb3JtLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAuLi5wYXJhbWV0ZXJzLFxyXG4gICAgICAgIH0sIExvY2FsT2N0ZXRTdHJpbmdWYWx1ZUJsb2NrKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSA0O1xyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLmlzQ29uc3RydWN0ZWQgPSB0aGlzLmlkQmxvY2suaXNDb25zdHJ1Y3RlZDtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2suaXNJbmRlZmluaXRlRm9ybSA9IHRoaXMubGVuQmxvY2suaXNJbmRlZmluaXRlRm9ybTtcclxuICAgICAgICBpZiAoaW5wdXRMZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaWRCbG9jay5lcnJvci5sZW5ndGggPT09IDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoICs9IHRoaXMuaWRCbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICAgICAgaWYgKHRoaXMubGVuQmxvY2suZXJyb3IubGVuZ3RoID09PSAwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCArPSB0aGlzLmxlbkJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgICAgICByZXR1cm4gaW5wdXRPZmZzZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy52YWx1ZUJsb2NrLmlzQ29uc3RydWN0ZWQpIHtcclxuICAgICAgICAgICAgY29uc3QgdmlldyA9IGlucHV0QnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgPyBuZXcgVWludDhBcnJheShpbnB1dEJ1ZmZlcikgOiBpbnB1dEJ1ZmZlcjtcclxuICAgICAgICAgICAgY29uc3QgYnVmID0gdmlldy5zdWJhcnJheShpbnB1dE9mZnNldCwgaW5wdXRPZmZzZXQgKyBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYnVmLmJ5dGVMZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhc24gPSBsb2NhbEZyb21CRVIoYnVmLCAwLCBidWYuYnl0ZUxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFzbi5vZmZzZXQgIT09IC0xICYmIGFzbi5vZmZzZXQgPT09IGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZSA9IFthc24ucmVzdWx0XTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3VwZXIuZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKTtcclxuICAgIH1cclxuICAgIG9uQXNjaWlFbmNvZGluZygpIHtcclxuICAgICAgICBpZiAodGhpcy52YWx1ZUJsb2NrLmlzQ29uc3RydWN0ZWQgfHwgKHRoaXMudmFsdWVCbG9jay52YWx1ZSAmJiB0aGlzLnZhbHVlQmxvY2sudmFsdWUubGVuZ3RoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gQ29uc3RydWN0ZWQucHJvdG90eXBlLm9uQXNjaWlFbmNvZGluZy5jYWxsKHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FfSA6ICR7cHZ0c3V0aWxzLkNvbnZlcnQuVG9IZXgodGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4Vmlldyl9YDtcclxuICAgIH1cclxuICAgIGdldFZhbHVlKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5pZEJsb2NrLmlzQ29uc3RydWN0ZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXcuc2xpY2UoKS5idWZmZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGFycmF5ID0gW107XHJcbiAgICAgICAgZm9yIChjb25zdCBjb250ZW50IG9mIHRoaXMudmFsdWVCbG9jay52YWx1ZSkge1xyXG4gICAgICAgICAgICBpZiAoY29udGVudCBpbnN0YW5jZW9mIE9jdGV0U3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICBhcnJheS5wdXNoKGNvbnRlbnQudmFsdWVCbG9jay52YWx1ZUhleFZpZXcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLmNvbmNhdChhcnJheSk7XHJcbiAgICB9XHJcbn1cclxuX2EkciA9IE9jdGV0U3RyaW5nO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLk9jdGV0U3RyaW5nID0gX2EkcjtcclxufSkoKTtcclxuT2N0ZXRTdHJpbmcuTkFNRSA9IE9DVEVUX1NUUklOR19OQU1FO1xuXG5jbGFzcyBMb2NhbEJpdFN0cmluZ1ZhbHVlQmxvY2sgZXh0ZW5kcyBIZXhCbG9jayhMb2NhbENvbnN0cnVjdGVkVmFsdWVCbG9jaykge1xyXG4gICAgY29uc3RydWN0b3IoeyB1bnVzZWRCaXRzID0gMCwgaXNDb25zdHJ1Y3RlZCA9IGZhbHNlLCAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMudW51c2VkQml0cyA9IHVudXNlZEJpdHM7XHJcbiAgICAgICAgdGhpcy5pc0NvbnN0cnVjdGVkID0gaXNDb25zdHJ1Y3RlZDtcclxuICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoID0gdGhpcy52YWx1ZUhleFZpZXcuYnl0ZUxlbmd0aDtcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIGlmICghaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGlucHV0T2Zmc2V0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgcmVzdWx0T2Zmc2V0ID0gLTE7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNDb25zdHJ1Y3RlZCkge1xyXG4gICAgICAgICAgICByZXN1bHRPZmZzZXQgPSBMb2NhbENvbnN0cnVjdGVkVmFsdWVCbG9jay5wcm90b3R5cGUuZnJvbUJFUi5jYWxsKHRoaXMsIGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0T2Zmc2V0ID09PSAtMSlcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdGhpcy52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudEJsb2NrTmFtZSA9IHZhbHVlLmNvbnN0cnVjdG9yLk5BTUU7XHJcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudEJsb2NrTmFtZSA9PT0gRU5EX09GX0NPTlRFTlRfTkFNRSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzSW5kZWZpbml0ZUZvcm0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gXCJFbmRPZkNvbnRlbnQgaXMgdW5leHBlY3RlZCwgQklUIFNUUklORyBtYXkgY29uc2lzdHMgb2YgQklUIFNUUklOR3Mgb25seVwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRCbG9ja05hbWUgIT09IEJJVF9TVFJJTkdfTkFNRSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIkJJVCBTVFJJTkcgbWF5IGNvbnNpc3RzIG9mIEJJVCBTVFJJTkdzIG9ubHlcIjtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZUJsb2NrID0gdmFsdWUudmFsdWVCbG9jaztcclxuICAgICAgICAgICAgICAgIGlmICgodGhpcy51bnVzZWRCaXRzID4gMCkgJiYgKHZhbHVlQmxvY2sudW51c2VkQml0cyA+IDApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiVXNpbmcgb2YgXFxcInVudXNlZCBiaXRzXFxcIiBpbnNpZGUgY29uc3RydWN0aXZlIEJJVCBTVFJJTkcgYWxsb3dlZCBmb3IgbGVhc3Qgb25lIG9ubHlcIjtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVudXNlZEJpdHMgPSB2YWx1ZUJsb2NrLnVudXNlZEJpdHM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdE9mZnNldDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaW5wdXRWaWV3ID0gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoaW5wdXRCdWZmZXIpO1xyXG4gICAgICAgIGlmICghY2hlY2tCdWZmZXJQYXJhbXModGhpcywgaW5wdXRWaWV3LCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaW50QnVmZmVyID0gaW5wdXRWaWV3LnN1YmFycmF5KGlucHV0T2Zmc2V0LCBpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICB0aGlzLnVudXNlZEJpdHMgPSBpbnRCdWZmZXJbMF07XHJcbiAgICAgICAgaWYgKHRoaXMudW51c2VkQml0cyA+IDcpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiVW51c2VkIGJpdHMgZm9yIEJpdFN0cmluZyBtdXN0IGJlIGluIHJhbmdlIDAtN1wiO1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy51bnVzZWRCaXRzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJ1ZiA9IGludEJ1ZmZlci5zdWJhcnJheSgxKTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChidWYuYnl0ZUxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFzbiA9IGxvY2FsRnJvbUJFUihidWYsIDAsIGJ1Zi5ieXRlTGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYXNuLm9mZnNldCAhPT0gLTEgJiYgYXNuLm9mZnNldCA9PT0gKGlucHV0TGVuZ3RoIC0gMSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFthc24ucmVzdWx0XTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IGludEJ1ZmZlci5zdWJhcnJheSgxKTtcclxuICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoID0gaW50QnVmZmVyLmxlbmd0aDtcclxuICAgICAgICByZXR1cm4gKGlucHV0T2Zmc2V0ICsgaW5wdXRMZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgdG9CRVIoc2l6ZU9ubHksIHdyaXRlcikge1xyXG4gICAgICAgIGlmICh0aGlzLmlzQ29uc3RydWN0ZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIExvY2FsQ29uc3RydWN0ZWRWYWx1ZUJsb2NrLnByb3RvdHlwZS50b0JFUi5jYWxsKHRoaXMsIHNpemVPbmx5LCB3cml0ZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2l6ZU9ubHkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBBcnJheUJ1ZmZlcih0aGlzLnZhbHVlSGV4Vmlldy5ieXRlTGVuZ3RoICsgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy52YWx1ZUhleFZpZXcuYnl0ZUxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gRU1QVFlfQlVGRkVSO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy52YWx1ZUhleFZpZXcubGVuZ3RoICsgMSk7XHJcbiAgICAgICAgcmV0Vmlld1swXSA9IHRoaXMudW51c2VkQml0cztcclxuICAgICAgICByZXRWaWV3LnNldCh0aGlzLnZhbHVlSGV4VmlldywgMSk7XHJcbiAgICAgICAgcmV0dXJuIHJldFZpZXcuYnVmZmVyO1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICB1bnVzZWRCaXRzOiB0aGlzLnVudXNlZEJpdHMsXHJcbiAgICAgICAgICAgIGlzQ29uc3RydWN0ZWQ6IHRoaXMuaXNDb25zdHJ1Y3RlZCxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbkxvY2FsQml0U3RyaW5nVmFsdWVCbG9jay5OQU1FID0gXCJCaXRTdHJpbmdWYWx1ZUJsb2NrXCI7XG5cbnZhciBfYSRxO1xyXG5jbGFzcyBCaXRTdHJpbmcgZXh0ZW5kcyBCYXNlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IoeyBpZEJsb2NrID0ge30sIGxlbkJsb2NrID0ge30sIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgdmFyIF9iLCBfYztcclxuICAgICAgICAoX2IgPSBwYXJhbWV0ZXJzLmlzQ29uc3RydWN0ZWQpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IChwYXJhbWV0ZXJzLmlzQ29uc3RydWN0ZWQgPSAhISgoX2MgPSBwYXJhbWV0ZXJzLnZhbHVlKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSk7XHJcbiAgICAgICAgc3VwZXIoe1xyXG4gICAgICAgICAgICBpZEJsb2NrOiB7XHJcbiAgICAgICAgICAgICAgICBpc0NvbnN0cnVjdGVkOiBwYXJhbWV0ZXJzLmlzQ29uc3RydWN0ZWQsXHJcbiAgICAgICAgICAgICAgICAuLi5pZEJsb2NrLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBsZW5CbG9jazoge1xyXG4gICAgICAgICAgICAgICAgLi4ubGVuQmxvY2ssXHJcbiAgICAgICAgICAgICAgICBpc0luZGVmaW5pdGVGb3JtOiAhIXBhcmFtZXRlcnMuaXNJbmRlZmluaXRlRm9ybSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgLi4ucGFyYW1ldGVycyxcclxuICAgICAgICB9LCBMb2NhbEJpdFN0cmluZ1ZhbHVlQmxvY2spO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDM7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2suaXNDb25zdHJ1Y3RlZCA9IHRoaXMuaWRCbG9jay5pc0NvbnN0cnVjdGVkO1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay5pc0luZGVmaW5pdGVGb3JtID0gdGhpcy5sZW5CbG9jay5pc0luZGVmaW5pdGVGb3JtO1xyXG4gICAgICAgIHJldHVybiBzdXBlci5mcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgb25Bc2NpaUVuY29kaW5nKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnZhbHVlQmxvY2suaXNDb25zdHJ1Y3RlZCB8fCAodGhpcy52YWx1ZUJsb2NrLnZhbHVlICYmIHRoaXMudmFsdWVCbG9jay52YWx1ZS5sZW5ndGgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBDb25zdHJ1Y3RlZC5wcm90b3R5cGUub25Bc2NpaUVuY29kaW5nLmNhbGwodGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBiaXRzID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlSGV4ID0gdGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4VmlldztcclxuICAgICAgICAgICAgZm9yIChjb25zdCBieXRlIG9mIHZhbHVlSGV4KSB7XHJcbiAgICAgICAgICAgICAgICBiaXRzLnB1c2goYnl0ZS50b1N0cmluZygyKS5wYWRTdGFydCg4LCBcIjBcIikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGJpdHNTdHIgPSBiaXRzLmpvaW4oXCJcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBgJHt0aGlzLmNvbnN0cnVjdG9yLk5BTUV9IDogJHtiaXRzU3RyLnN1YnN0cmluZygwLCBiaXRzU3RyLmxlbmd0aCAtIHRoaXMudmFsdWVCbG9jay51bnVzZWRCaXRzKX1gO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5fYSRxID0gQml0U3RyaW5nO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLkJpdFN0cmluZyA9IF9hJHE7XHJcbn0pKCk7XHJcbkJpdFN0cmluZy5OQU1FID0gQklUX1NUUklOR19OQU1FO1xuXG52YXIgX2EkcDtcclxuZnVuY3Rpb24gdmlld0FkZChmaXJzdCwgc2Vjb25kKSB7XHJcbiAgICBjb25zdCBjID0gbmV3IFVpbnQ4QXJyYXkoWzBdKTtcclxuICAgIGNvbnN0IGZpcnN0VmlldyA9IG5ldyBVaW50OEFycmF5KGZpcnN0KTtcclxuICAgIGNvbnN0IHNlY29uZFZpZXcgPSBuZXcgVWludDhBcnJheShzZWNvbmQpO1xyXG4gICAgbGV0IGZpcnN0Vmlld0NvcHkgPSBmaXJzdFZpZXcuc2xpY2UoMCk7XHJcbiAgICBjb25zdCBmaXJzdFZpZXdDb3B5TGVuZ3RoID0gZmlyc3RWaWV3Q29weS5sZW5ndGggLSAxO1xyXG4gICAgY29uc3Qgc2Vjb25kVmlld0NvcHkgPSBzZWNvbmRWaWV3LnNsaWNlKDApO1xyXG4gICAgY29uc3Qgc2Vjb25kVmlld0NvcHlMZW5ndGggPSBzZWNvbmRWaWV3Q29weS5sZW5ndGggLSAxO1xyXG4gICAgbGV0IHZhbHVlID0gMDtcclxuICAgIGNvbnN0IG1heCA9IChzZWNvbmRWaWV3Q29weUxlbmd0aCA8IGZpcnN0Vmlld0NvcHlMZW5ndGgpID8gZmlyc3RWaWV3Q29weUxlbmd0aCA6IHNlY29uZFZpZXdDb3B5TGVuZ3RoO1xyXG4gICAgbGV0IGNvdW50ZXIgPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IG1heDsgaSA+PSAwOyBpLS0sIGNvdW50ZXIrKykge1xyXG4gICAgICAgIHN3aXRjaCAodHJ1ZSkge1xyXG4gICAgICAgICAgICBjYXNlIChjb3VudGVyIDwgc2Vjb25kVmlld0NvcHkubGVuZ3RoKTpcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gZmlyc3RWaWV3Q29weVtmaXJzdFZpZXdDb3B5TGVuZ3RoIC0gY291bnRlcl0gKyBzZWNvbmRWaWV3Q29weVtzZWNvbmRWaWV3Q29weUxlbmd0aCAtIGNvdW50ZXJdICsgY1swXTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBmaXJzdFZpZXdDb3B5W2ZpcnN0Vmlld0NvcHlMZW5ndGggLSBjb3VudGVyXSArIGNbMF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNbMF0gPSB2YWx1ZSAvIDEwO1xyXG4gICAgICAgIHN3aXRjaCAodHJ1ZSkge1xyXG4gICAgICAgICAgICBjYXNlIChjb3VudGVyID49IGZpcnN0Vmlld0NvcHkubGVuZ3RoKTpcclxuICAgICAgICAgICAgICAgIGZpcnN0Vmlld0NvcHkgPSBwdnV0aWxzLnV0aWxDb25jYXRWaWV3KG5ldyBVaW50OEFycmF5KFt2YWx1ZSAlIDEwXSksIGZpcnN0Vmlld0NvcHkpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICBmaXJzdFZpZXdDb3B5W2ZpcnN0Vmlld0NvcHlMZW5ndGggLSBjb3VudGVyXSA9IHZhbHVlICUgMTA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGNbMF0gPiAwKVxyXG4gICAgICAgIGZpcnN0Vmlld0NvcHkgPSBwdnV0aWxzLnV0aWxDb25jYXRWaWV3KGMsIGZpcnN0Vmlld0NvcHkpO1xyXG4gICAgcmV0dXJuIGZpcnN0Vmlld0NvcHk7XHJcbn1cclxuZnVuY3Rpb24gcG93ZXIyKG4pIHtcclxuICAgIGlmIChuID49IHBvd2VyczIubGVuZ3RoKSB7XHJcbiAgICAgICAgZm9yIChsZXQgcCA9IHBvd2VyczIubGVuZ3RoOyBwIDw9IG47IHArKykge1xyXG4gICAgICAgICAgICBjb25zdCBjID0gbmV3IFVpbnQ4QXJyYXkoWzBdKTtcclxuICAgICAgICAgICAgbGV0IGRpZ2l0cyA9IChwb3dlcnMyW3AgLSAxXSkuc2xpY2UoMCk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAoZGlnaXRzLmxlbmd0aCAtIDEpOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBuZXcgVWludDhBcnJheShbKGRpZ2l0c1tpXSA8PCAxKSArIGNbMF1dKTtcclxuICAgICAgICAgICAgICAgIGNbMF0gPSBuZXdWYWx1ZVswXSAvIDEwO1xyXG4gICAgICAgICAgICAgICAgZGlnaXRzW2ldID0gbmV3VmFsdWVbMF0gJSAxMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoY1swXSA+IDApXHJcbiAgICAgICAgICAgICAgICBkaWdpdHMgPSBwdnV0aWxzLnV0aWxDb25jYXRWaWV3KGMsIGRpZ2l0cyk7XHJcbiAgICAgICAgICAgIHBvd2VyczIucHVzaChkaWdpdHMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBwb3dlcnMyW25dO1xyXG59XHJcbmZ1bmN0aW9uIHZpZXdTdWIoZmlyc3QsIHNlY29uZCkge1xyXG4gICAgbGV0IGIgPSAwO1xyXG4gICAgY29uc3QgZmlyc3RWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoZmlyc3QpO1xyXG4gICAgY29uc3Qgc2Vjb25kVmlldyA9IG5ldyBVaW50OEFycmF5KHNlY29uZCk7XHJcbiAgICBjb25zdCBmaXJzdFZpZXdDb3B5ID0gZmlyc3RWaWV3LnNsaWNlKDApO1xyXG4gICAgY29uc3QgZmlyc3RWaWV3Q29weUxlbmd0aCA9IGZpcnN0Vmlld0NvcHkubGVuZ3RoIC0gMTtcclxuICAgIGNvbnN0IHNlY29uZFZpZXdDb3B5ID0gc2Vjb25kVmlldy5zbGljZSgwKTtcclxuICAgIGNvbnN0IHNlY29uZFZpZXdDb3B5TGVuZ3RoID0gc2Vjb25kVmlld0NvcHkubGVuZ3RoIC0gMTtcclxuICAgIGxldCB2YWx1ZTtcclxuICAgIGxldCBjb3VudGVyID0gMDtcclxuICAgIGZvciAobGV0IGkgPSBzZWNvbmRWaWV3Q29weUxlbmd0aDsgaSA+PSAwOyBpLS0sIGNvdW50ZXIrKykge1xyXG4gICAgICAgIHZhbHVlID0gZmlyc3RWaWV3Q29weVtmaXJzdFZpZXdDb3B5TGVuZ3RoIC0gY291bnRlcl0gLSBzZWNvbmRWaWV3Q29weVtzZWNvbmRWaWV3Q29weUxlbmd0aCAtIGNvdW50ZXJdIC0gYjtcclxuICAgICAgICBzd2l0Y2ggKHRydWUpIHtcclxuICAgICAgICAgICAgY2FzZSAodmFsdWUgPCAwKTpcclxuICAgICAgICAgICAgICAgIGIgPSAxO1xyXG4gICAgICAgICAgICAgICAgZmlyc3RWaWV3Q29weVtmaXJzdFZpZXdDb3B5TGVuZ3RoIC0gY291bnRlcl0gPSB2YWx1ZSArIDEwO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICBiID0gMDtcclxuICAgICAgICAgICAgICAgIGZpcnN0Vmlld0NvcHlbZmlyc3RWaWV3Q29weUxlbmd0aCAtIGNvdW50ZXJdID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGIgPiAwKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IChmaXJzdFZpZXdDb3B5TGVuZ3RoIC0gc2Vjb25kVmlld0NvcHlMZW5ndGggKyAxKTsgaSA+PSAwOyBpLS0sIGNvdW50ZXIrKykge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IGZpcnN0Vmlld0NvcHlbZmlyc3RWaWV3Q29weUxlbmd0aCAtIGNvdW50ZXJdIC0gYjtcclxuICAgICAgICAgICAgaWYgKHZhbHVlIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgYiA9IDE7XHJcbiAgICAgICAgICAgICAgICBmaXJzdFZpZXdDb3B5W2ZpcnN0Vmlld0NvcHlMZW5ndGggLSBjb3VudGVyXSA9IHZhbHVlICsgMTA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBiID0gMDtcclxuICAgICAgICAgICAgICAgIGZpcnN0Vmlld0NvcHlbZmlyc3RWaWV3Q29weUxlbmd0aCAtIGNvdW50ZXJdID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmaXJzdFZpZXdDb3B5LnNsaWNlKCk7XHJcbn1cclxuY2xhc3MgTG9jYWxJbnRlZ2VyVmFsdWVCbG9jayBleHRlbmRzIEhleEJsb2NrKFZhbHVlQmxvY2spIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgdmFsdWUsIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5fdmFsdWVEZWMgPSAwO1xyXG4gICAgICAgIGlmIChwYXJhbWV0ZXJzLnZhbHVlSGV4KSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWVIZXgoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZURlYyA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHNldFZhbHVlSGV4KCkge1xyXG4gICAgICAgIGlmICh0aGlzLnZhbHVlSGV4Vmlldy5sZW5ndGggPj0gNCkge1xyXG4gICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1c2goXCJUb28gYmlnIEludGVnZXIgZm9yIGRlY29kaW5nLCBoZXggb25seVwiKTtcclxuICAgICAgICAgICAgdGhpcy5pc0hleE9ubHkgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLl92YWx1ZURlYyA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmlzSGV4T25seSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZUhleFZpZXcubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdmFsdWVEZWMgPSBwdnV0aWxzLnV0aWxEZWNvZGVUQy5jYWxsKHRoaXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgc2V0IHZhbHVlRGVjKHYpIHtcclxuICAgICAgICB0aGlzLl92YWx1ZURlYyA9IHY7XHJcbiAgICAgICAgdGhpcy5pc0hleE9ubHkgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IG5ldyBVaW50OEFycmF5KHB2dXRpbHMudXRpbEVuY29kZVRDKHYpKTtcclxuICAgIH1cclxuICAgIGdldCB2YWx1ZURlYygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWVEZWM7XHJcbiAgICB9XHJcbiAgICBmcm9tREVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgsIGV4cGVjdGVkTGVuZ3RoID0gMCkge1xyXG4gICAgICAgIGNvbnN0IG9mZnNldCA9IHRoaXMuZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICBpZiAob2Zmc2V0ID09PSAtMSlcclxuICAgICAgICAgICAgcmV0dXJuIG9mZnNldDtcclxuICAgICAgICBjb25zdCB2aWV3ID0gdGhpcy52YWx1ZUhleFZpZXc7XHJcbiAgICAgICAgaWYgKCh2aWV3WzBdID09PSAweDAwKSAmJiAoKHZpZXdbMV0gJiAweDgwKSAhPT0gMCkpIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSB2aWV3LnN1YmFycmF5KDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGV4cGVjdGVkTGVuZ3RoICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodmlldy5sZW5ndGggPCBleHBlY3RlZExlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgoZXhwZWN0ZWRMZW5ndGggLSB2aWV3Lmxlbmd0aCkgPiAxKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZExlbmd0aCA9IHZpZXcubGVuZ3RoICsgMTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IHZpZXcuc3ViYXJyYXkoZXhwZWN0ZWRMZW5ndGggLSB2aWV3Lmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9mZnNldDtcclxuICAgIH1cclxuICAgIHRvREVSKHNpemVPbmx5ID0gZmFsc2UpIHtcclxuICAgICAgICBjb25zdCB2aWV3ID0gdGhpcy52YWx1ZUhleFZpZXc7XHJcbiAgICAgICAgc3dpdGNoICh0cnVlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgKCh2aWV3WzBdICYgMHg4MCkgIT09IDApOlxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy52YWx1ZUhleFZpZXcubGVuZ3RoICsgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlZFZpZXdbMF0gPSAweDAwO1xyXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRWaWV3LnNldCh2aWV3LCAxKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IHVwZGF0ZWRWaWV3O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgKCh2aWV3WzBdID09PSAweDAwKSAmJiAoKHZpZXdbMV0gJiAweDgwKSA9PT0gMCkpOlxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gdGhpcy52YWx1ZUhleFZpZXcuc3ViYXJyYXkoMSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudG9CRVIoc2l6ZU9ubHkpO1xyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0T2Zmc2V0ID0gc3VwZXIuZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICBpZiAocmVzdWx0T2Zmc2V0ID09PSAtMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNldFZhbHVlSGV4KCk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdE9mZnNldDtcclxuICAgIH1cclxuICAgIHRvQkVSKHNpemVPbmx5KSB7XHJcbiAgICAgICAgcmV0dXJuIHNpemVPbmx5XHJcbiAgICAgICAgICAgID8gbmV3IEFycmF5QnVmZmVyKHRoaXMudmFsdWVIZXhWaWV3Lmxlbmd0aClcclxuICAgICAgICAgICAgOiB0aGlzLnZhbHVlSGV4Vmlldy5zbGljZSgpLmJ1ZmZlcjtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgdmFsdWVEZWM6IHRoaXMudmFsdWVEZWMsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIHRvU3RyaW5nKCkge1xyXG4gICAgICAgIGNvbnN0IGZpcnN0Qml0ID0gKHRoaXMudmFsdWVIZXhWaWV3Lmxlbmd0aCAqIDgpIC0gMTtcclxuICAgICAgICBsZXQgZGlnaXRzID0gbmV3IFVpbnQ4QXJyYXkoKHRoaXMudmFsdWVIZXhWaWV3Lmxlbmd0aCAqIDgpIC8gMyk7XHJcbiAgICAgICAgbGV0IGJpdE51bWJlciA9IDA7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRCeXRlO1xyXG4gICAgICAgIGNvbnN0IGFzbjFWaWV3ID0gdGhpcy52YWx1ZUhleFZpZXc7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IFwiXCI7XHJcbiAgICAgICAgbGV0IGZsYWcgPSBmYWxzZTtcclxuICAgICAgICBmb3IgKGxldCBieXRlTnVtYmVyID0gKGFzbjFWaWV3LmJ5dGVMZW5ndGggLSAxKTsgYnl0ZU51bWJlciA+PSAwOyBieXRlTnVtYmVyLS0pIHtcclxuICAgICAgICAgICAgY3VycmVudEJ5dGUgPSBhc24xVmlld1tieXRlTnVtYmVyXTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA4OyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmICgoY3VycmVudEJ5dGUgJiAxKSA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYml0TnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgZmlyc3RCaXQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWdpdHMgPSB2aWV3U3ViKHBvd2VyMihiaXROdW1iZXIpLCBkaWdpdHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gXCItXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZ2l0cyA9IHZpZXdBZGQoZGlnaXRzLCBwb3dlcjIoYml0TnVtYmVyKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYml0TnVtYmVyKys7XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50Qnl0ZSA+Pj0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRpZ2l0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZGlnaXRzW2ldKVxyXG4gICAgICAgICAgICAgICAgZmxhZyA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmIChmbGFnKVxyXG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IGRpZ2l0c1N0cmluZy5jaGFyQXQoZGlnaXRzW2ldKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZsYWcgPT09IGZhbHNlKVxyXG4gICAgICAgICAgICByZXN1bHQgKz0gZGlnaXRzU3RyaW5nLmNoYXJBdCgwKTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG59XHJcbl9hJHAgPSBMb2NhbEludGVnZXJWYWx1ZUJsb2NrO1xyXG5Mb2NhbEludGVnZXJWYWx1ZUJsb2NrLk5BTUUgPSBcIkludGVnZXJWYWx1ZUJsb2NrXCI7XHJcbigoKSA9PiB7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2EkcC5wcm90b3R5cGUsIFwidmFsdWVIZXhcIiwge1xyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHYpIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSBuZXcgVWludDhBcnJheSh2KTtcclxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZUhleCgpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlSGV4Vmlldy5zbGljZSgpLmJ1ZmZlcjtcclxuICAgICAgICB9LFxyXG4gICAgfSk7XHJcbn0pKCk7XG5cbnZhciBfYSRvO1xyXG5jbGFzcyBJbnRlZ2VyIGV4dGVuZHMgQmFzZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMsIExvY2FsSW50ZWdlclZhbHVlQmxvY2spO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDI7XHJcbiAgICB9XHJcbiAgICB0b0JpZ0ludCgpIHtcclxuICAgICAgICBhc3NlcnRCaWdJbnQoKTtcclxuICAgICAgICByZXR1cm4gQmlnSW50KHRoaXMudmFsdWVCbG9jay50b1N0cmluZygpKTtcclxuICAgIH1cclxuICAgIHN0YXRpYyBmcm9tQmlnSW50KHZhbHVlKSB7XHJcbiAgICAgICAgYXNzZXJ0QmlnSW50KCk7XHJcbiAgICAgICAgY29uc3QgYmlnSW50VmFsdWUgPSBCaWdJbnQodmFsdWUpO1xyXG4gICAgICAgIGNvbnN0IHdyaXRlciA9IG5ldyBWaWV3V3JpdGVyKCk7XHJcbiAgICAgICAgY29uc3QgaGV4ID0gYmlnSW50VmFsdWUudG9TdHJpbmcoMTYpLnJlcGxhY2UoL14tLywgXCJcIik7XHJcbiAgICAgICAgY29uc3QgdmlldyA9IG5ldyBVaW50OEFycmF5KHB2dHN1dGlscy5Db252ZXJ0LkZyb21IZXgoaGV4KSk7XHJcbiAgICAgICAgaWYgKGJpZ0ludFZhbHVlIDwgMCkge1xyXG4gICAgICAgICAgICBjb25zdCBmaXJzdCA9IG5ldyBVaW50OEFycmF5KHZpZXcubGVuZ3RoICsgKHZpZXdbMF0gJiAweDgwID8gMSA6IDApKTtcclxuICAgICAgICAgICAgZmlyc3RbMF0gfD0gMHg4MDtcclxuICAgICAgICAgICAgY29uc3QgZmlyc3RJbnQgPSBCaWdJbnQoYDB4JHtwdnRzdXRpbHMuQ29udmVydC5Ub0hleChmaXJzdCl9YCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlY29uZEludCA9IGZpcnN0SW50ICsgYmlnSW50VmFsdWU7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlY29uZCA9IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KHB2dHN1dGlscy5Db252ZXJ0LkZyb21IZXgoc2Vjb25kSW50LnRvU3RyaW5nKDE2KSkpO1xyXG4gICAgICAgICAgICBzZWNvbmRbMF0gfD0gMHg4MDtcclxuICAgICAgICAgICAgd3JpdGVyLndyaXRlKHNlY29uZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodmlld1swXSAmIDB4ODApIHtcclxuICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZShuZXcgVWludDhBcnJheShbMF0pKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB3cml0ZXIud3JpdGUodmlldyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJlcyA9IG5ldyBJbnRlZ2VyKHtcclxuICAgICAgICAgICAgdmFsdWVIZXg6IHdyaXRlci5maW5hbCgpLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICB9XHJcbiAgICBjb252ZXJ0VG9ERVIoKSB7XHJcbiAgICAgICAgY29uc3QgaW50ZWdlciA9IG5ldyBJbnRlZ2VyKHsgdmFsdWVIZXg6IHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXcgfSk7XHJcbiAgICAgICAgaW50ZWdlci52YWx1ZUJsb2NrLnRvREVSKCk7XHJcbiAgICAgICAgcmV0dXJuIGludGVnZXI7XHJcbiAgICB9XHJcbiAgICBjb252ZXJ0RnJvbURFUigpIHtcclxuICAgICAgICByZXR1cm4gbmV3IEludGVnZXIoe1xyXG4gICAgICAgICAgICB2YWx1ZUhleDogdGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4Vmlld1swXSA9PT0gMFxyXG4gICAgICAgICAgICAgICAgPyB0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3LnN1YmFycmF5KDEpXHJcbiAgICAgICAgICAgICAgICA6IHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXcsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBvbkFzY2lpRW5jb2RpbmcoKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY29uc3RydWN0b3IuTkFNRX0gOiAke3RoaXMudmFsdWVCbG9jay50b1N0cmluZygpfWA7XHJcbiAgICB9XHJcbn1cclxuX2EkbyA9IEludGVnZXI7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuSW50ZWdlciA9IF9hJG87XHJcbn0pKCk7XHJcbkludGVnZXIuTkFNRSA9IFwiSU5URUdFUlwiO1xuXG52YXIgX2EkbjtcclxuY2xhc3MgRW51bWVyYXRlZCBleHRlbmRzIEludGVnZXIge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMTA7XHJcbiAgICB9XHJcbn1cclxuX2EkbiA9IEVudW1lcmF0ZWQ7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuRW51bWVyYXRlZCA9IF9hJG47XHJcbn0pKCk7XHJcbkVudW1lcmF0ZWQuTkFNRSA9IFwiRU5VTUVSQVRFRFwiO1xuXG5jbGFzcyBMb2NhbFNpZFZhbHVlQmxvY2sgZXh0ZW5kcyBIZXhCbG9jayhWYWx1ZUJsb2NrKSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IHZhbHVlRGVjID0gLTEsIGlzRmlyc3RTaWQgPSBmYWxzZSwgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLnZhbHVlRGVjID0gdmFsdWVEZWM7XHJcbiAgICAgICAgdGhpcy5pc0ZpcnN0U2lkID0gaXNGaXJzdFNpZDtcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIGlmICghaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGlucHV0T2Zmc2V0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpbnB1dFZpZXcgPSBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShpbnB1dEJ1ZmZlcik7XHJcbiAgICAgICAgaWYgKCFjaGVja0J1ZmZlclBhcmFtcyh0aGlzLCBpbnB1dFZpZXcsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpbnRCdWZmZXIgPSBpbnB1dFZpZXcuc3ViYXJyYXkoaW5wdXRPZmZzZXQsIGlucHV0T2Zmc2V0ICsgaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXRMZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlSGV4Vmlld1tpXSA9IGludEJ1ZmZlcltpXSAmIDB4N0Y7XHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGgrKztcclxuICAgICAgICAgICAgaWYgKChpbnRCdWZmZXJbaV0gJiAweDgwKSA9PT0gMHgwMClcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB0ZW1wVmlldyA9IG5ldyBVaW50OEFycmF5KHRoaXMuYmxvY2tMZW5ndGgpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5ibG9ja0xlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRlbXBWaWV3W2ldID0gdGhpcy52YWx1ZUhleFZpZXdbaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gdGVtcFZpZXc7XHJcbiAgICAgICAgaWYgKChpbnRCdWZmZXJbdGhpcy5ibG9ja0xlbmd0aCAtIDFdICYgMHg4MCkgIT09IDB4MDApIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiRW5kIG9mIGlucHV0IHJlYWNoZWQgYmVmb3JlIG1lc3NhZ2Ugd2FzIGZ1bGx5IGRlY29kZWRcIjtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy52YWx1ZUhleFZpZXdbMF0gPT09IDB4MDApXHJcbiAgICAgICAgICAgIHRoaXMud2FybmluZ3MucHVzaChcIk5lZWRsZXNzbHkgbG9uZyBmb3JtYXQgb2YgU0lEIGVuY29kaW5nXCIpO1xyXG4gICAgICAgIGlmICh0aGlzLmJsb2NrTGVuZ3RoIDw9IDgpXHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVEZWMgPSBwdnV0aWxzLnV0aWxGcm9tQmFzZSh0aGlzLnZhbHVlSGV4VmlldywgNyk7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNIZXhPbmx5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKFwiVG9vIGJpZyBTSUQgZm9yIGRlY29kaW5nLCBoZXggb25seVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIChpbnB1dE9mZnNldCArIHRoaXMuYmxvY2tMZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgc2V0IHZhbHVlQmlnSW50KHZhbHVlKSB7XHJcbiAgICAgICAgYXNzZXJ0QmlnSW50KCk7XHJcbiAgICAgICAgbGV0IGJpdHMgPSBCaWdJbnQodmFsdWUpLnRvU3RyaW5nKDIpO1xyXG4gICAgICAgIHdoaWxlIChiaXRzLmxlbmd0aCAlIDcpIHtcclxuICAgICAgICAgICAgYml0cyA9IFwiMFwiICsgYml0cztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShiaXRzLmxlbmd0aCAvIDcpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgYnl0ZXNbaV0gPSBwYXJzZUludChiaXRzLnNsaWNlKGkgKiA3LCBpICogNyArIDcpLCAyKSArIChpICsgMSA8IGJ5dGVzLmxlbmd0aCA/IDB4ODAgOiAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5mcm9tQkVSKGJ5dGVzLmJ1ZmZlciwgMCwgYnl0ZXMubGVuZ3RoKTtcclxuICAgIH1cclxuICAgIHRvQkVSKHNpemVPbmx5KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNIZXhPbmx5KSB7XHJcbiAgICAgICAgICAgIGlmIChzaXplT25seSlcclxuICAgICAgICAgICAgICAgIHJldHVybiAobmV3IEFycmF5QnVmZmVyKHRoaXMudmFsdWVIZXhWaWV3LmJ5dGVMZW5ndGgpKTtcclxuICAgICAgICAgICAgY29uc3QgY3VyVmlldyA9IHRoaXMudmFsdWVIZXhWaWV3O1xyXG4gICAgICAgICAgICBjb25zdCByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5ibG9ja0xlbmd0aCk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgKHRoaXMuYmxvY2tMZW5ndGggLSAxKTsgaSsrKVxyXG4gICAgICAgICAgICAgICAgcmV0Vmlld1tpXSA9IGN1clZpZXdbaV0gfCAweDgwO1xyXG4gICAgICAgICAgICByZXRWaWV3W3RoaXMuYmxvY2tMZW5ndGggLSAxXSA9IGN1clZpZXdbdGhpcy5ibG9ja0xlbmd0aCAtIDFdO1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0Vmlldy5idWZmZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGVuY29kZWRCdWYgPSBwdnV0aWxzLnV0aWxUb0Jhc2UodGhpcy52YWx1ZURlYywgNyk7XHJcbiAgICAgICAgaWYgKGVuY29kZWRCdWYuYnl0ZUxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gXCJFcnJvciBkdXJpbmcgZW5jb2RpbmcgU0lEIHZhbHVlXCI7XHJcbiAgICAgICAgICAgIHJldHVybiBFTVBUWV9CVUZGRVI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJldFZpZXcgPSBuZXcgVWludDhBcnJheShlbmNvZGVkQnVmLmJ5dGVMZW5ndGgpO1xyXG4gICAgICAgIGlmICghc2l6ZU9ubHkpIHtcclxuICAgICAgICAgICAgY29uc3QgZW5jb2RlZFZpZXcgPSBuZXcgVWludDhBcnJheShlbmNvZGVkQnVmKTtcclxuICAgICAgICAgICAgY29uc3QgbGVuID0gZW5jb2RlZEJ1Zi5ieXRlTGVuZ3RoIC0gMTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKylcclxuICAgICAgICAgICAgICAgIHJldFZpZXdbaV0gPSBlbmNvZGVkVmlld1tpXSB8IDB4ODA7XHJcbiAgICAgICAgICAgIHJldFZpZXdbbGVuXSA9IGVuY29kZWRWaWV3W2xlbl07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXRWaWV3O1xyXG4gICAgfVxyXG4gICAgdG9TdHJpbmcoKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IFwiXCI7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNIZXhPbmx5KVxyXG4gICAgICAgICAgICByZXN1bHQgPSBwdnRzdXRpbHMuQ29udmVydC5Ub0hleCh0aGlzLnZhbHVlSGV4Vmlldyk7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRmlyc3RTaWQpIHtcclxuICAgICAgICAgICAgICAgIGxldCBzaWRWYWx1ZSA9IHRoaXMudmFsdWVEZWM7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy52YWx1ZURlYyA8PSAzOSlcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBcIjAuXCI7XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52YWx1ZURlYyA8PSA3OSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBcIjEuXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpZFZhbHVlIC09IDQwO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gXCIyLlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaWRWYWx1ZSAtPSA4MDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gc2lkVmFsdWUudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB0aGlzLnZhbHVlRGVjLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIHZhbHVlRGVjOiB0aGlzLnZhbHVlRGVjLFxyXG4gICAgICAgICAgICBpc0ZpcnN0U2lkOiB0aGlzLmlzRmlyc3RTaWQsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5Mb2NhbFNpZFZhbHVlQmxvY2suTkFNRSA9IFwic2lkQmxvY2tcIjtcblxuY2xhc3MgTG9jYWxPYmplY3RJZGVudGlmaWVyVmFsdWVCbG9jayBleHRlbmRzIFZhbHVlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IoeyB2YWx1ZSA9IEVNUFRZX1NUUklORywgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLnZhbHVlID0gW107XHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJvbVN0cmluZyh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdE9mZnNldCA9IGlucHV0T2Zmc2V0O1xyXG4gICAgICAgIHdoaWxlIChpbnB1dExlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3Qgc2lkQmxvY2sgPSBuZXcgTG9jYWxTaWRWYWx1ZUJsb2NrKCk7XHJcbiAgICAgICAgICAgIHJlc3VsdE9mZnNldCA9IHNpZEJsb2NrLmZyb21CRVIoaW5wdXRCdWZmZXIsIHJlc3VsdE9mZnNldCwgaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0T2Zmc2V0ID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gc2lkQmxvY2suZXJyb3I7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlLmxlbmd0aCA9PT0gMClcclxuICAgICAgICAgICAgICAgIHNpZEJsb2NrLmlzRmlyc3RTaWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoICs9IHNpZEJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgICAgICBpbnB1dExlbmd0aCAtPSBzaWRCbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZS5wdXNoKHNpZEJsb2NrKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdE9mZnNldDtcclxuICAgIH1cclxuICAgIHRvQkVSKHNpemVPbmx5KSB7XHJcbiAgICAgICAgY29uc3QgcmV0QnVmZmVycyA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy52YWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZUJ1ZiA9IHRoaXMudmFsdWVbaV0udG9CRVIoc2l6ZU9ubHkpO1xyXG4gICAgICAgICAgICBpZiAodmFsdWVCdWYuYnl0ZUxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IHRoaXMudmFsdWVbaV0uZXJyb3I7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gRU1QVFlfQlVGRkVSO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldEJ1ZmZlcnMucHVzaCh2YWx1ZUJ1Zik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb25jYXQocmV0QnVmZmVycyk7XHJcbiAgICB9XHJcbiAgICBmcm9tU3RyaW5nKHN0cmluZykge1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSBbXTtcclxuICAgICAgICBsZXQgcG9zMSA9IDA7XHJcbiAgICAgICAgbGV0IHBvczIgPSAwO1xyXG4gICAgICAgIGxldCBzaWQgPSBcIlwiO1xyXG4gICAgICAgIGxldCBmbGFnID0gZmFsc2U7XHJcbiAgICAgICAgZG8ge1xyXG4gICAgICAgICAgICBwb3MyID0gc3RyaW5nLmluZGV4T2YoXCIuXCIsIHBvczEpO1xyXG4gICAgICAgICAgICBpZiAocG9zMiA9PT0gLTEpXHJcbiAgICAgICAgICAgICAgICBzaWQgPSBzdHJpbmcuc3Vic3RyaW5nKHBvczEpO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBzaWQgPSBzdHJpbmcuc3Vic3RyaW5nKHBvczEsIHBvczIpO1xyXG4gICAgICAgICAgICBwb3MxID0gcG9zMiArIDE7XHJcbiAgICAgICAgICAgIGlmIChmbGFnKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzaWRCbG9jayA9IHRoaXMudmFsdWVbMF07XHJcbiAgICAgICAgICAgICAgICBsZXQgcGx1cyA9IDA7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHNpZEJsb2NrLnZhbHVlRGVjKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsdXMgPSA0MDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwbHVzID0gODA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkU0lEID0gcGFyc2VJbnQoc2lkLCAxMCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNOYU4ocGFyc2VkU0lEKSlcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBzaWRCbG9jay52YWx1ZURlYyA9IHBhcnNlZFNJRCArIHBsdXM7XHJcbiAgICAgICAgICAgICAgICBmbGFnID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzaWRCbG9jayA9IG5ldyBMb2NhbFNpZFZhbHVlQmxvY2soKTtcclxuICAgICAgICAgICAgICAgIGlmIChzaWQgPiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikge1xyXG4gICAgICAgICAgICAgICAgICAgIGFzc2VydEJpZ0ludCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpZFZhbHVlID0gQmlnSW50KHNpZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgc2lkQmxvY2sudmFsdWVCaWdJbnQgPSBzaWRWYWx1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHNpZEJsb2NrLnZhbHVlRGVjID0gcGFyc2VJbnQoc2lkLCAxMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTmFOKHNpZEJsb2NrLnZhbHVlRGVjKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnZhbHVlLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNpZEJsb2NrLmlzRmlyc3RTaWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGZsYWcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZS5wdXNoKHNpZEJsb2NrKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gd2hpbGUgKHBvczIgIT09IC0xKTtcclxuICAgIH1cclxuICAgIHRvU3RyaW5nKCkge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBcIlwiO1xyXG4gICAgICAgIGxldCBpc0hleE9ubHkgPSBmYWxzZTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaXNIZXhPbmx5ID0gdGhpcy52YWx1ZVtpXS5pc0hleE9ubHk7XHJcbiAgICAgICAgICAgIGxldCBzaWRTdHIgPSB0aGlzLnZhbHVlW2ldLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIGlmIChpICE9PSAwKVxyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gYCR7cmVzdWx0fS5gO1xyXG4gICAgICAgICAgICBpZiAoaXNIZXhPbmx5KSB7XHJcbiAgICAgICAgICAgICAgICBzaWRTdHIgPSBgeyR7c2lkU3RyfX1gO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVbaV0uaXNGaXJzdFNpZClcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBgMi57JHtzaWRTdHJ9IC0gODB9YDtcclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gc2lkU3RyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzaWRTdHI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgY29uc3Qgb2JqZWN0ID0ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgdmFsdWU6IHRoaXMudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgc2lkQXJyYXk6IFtdLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIG9iamVjdC5zaWRBcnJheS5wdXNoKHRoaXMudmFsdWVbaV0udG9KU09OKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb2JqZWN0O1xyXG4gICAgfVxyXG59XHJcbkxvY2FsT2JqZWN0SWRlbnRpZmllclZhbHVlQmxvY2suTkFNRSA9IFwiT2JqZWN0SWRlbnRpZmllclZhbHVlQmxvY2tcIjtcblxudmFyIF9hJG07XHJcbmNsYXNzIE9iamVjdElkZW50aWZpZXIgZXh0ZW5kcyBCYXNlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycywgTG9jYWxPYmplY3RJZGVudGlmaWVyVmFsdWVCbG9jayk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gNjtcclxuICAgIH1cclxuICAgIGdldFZhbHVlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlQmxvY2sudG9TdHJpbmcoKTtcclxuICAgIH1cclxuICAgIHNldFZhbHVlKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLmZyb21TdHJpbmcodmFsdWUpO1xyXG4gICAgfVxyXG4gICAgb25Bc2NpaUVuY29kaW5nKCkge1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNvbnN0cnVjdG9yLk5BTUV9IDogJHt0aGlzLnZhbHVlQmxvY2sudG9TdHJpbmcoKSB8fCBcImVtcHR5XCJ9YDtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuZ2V0VmFsdWUoKSxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbl9hJG0gPSBPYmplY3RJZGVudGlmaWVyO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLk9iamVjdElkZW50aWZpZXIgPSBfYSRtO1xyXG59KSgpO1xyXG5PYmplY3RJZGVudGlmaWVyLk5BTUUgPSBcIk9CSkVDVCBJREVOVElGSUVSXCI7XG5cbmNsYXNzIExvY2FsUmVsYXRpdmVTaWRWYWx1ZUJsb2NrIGV4dGVuZHMgSGV4QmxvY2soTG9jYWxCYXNlQmxvY2spIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgdmFsdWVEZWMgPSAwLCAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMudmFsdWVEZWMgPSB2YWx1ZURlYztcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIGlmIChpbnB1dExlbmd0aCA9PT0gMClcclxuICAgICAgICAgICAgcmV0dXJuIGlucHV0T2Zmc2V0O1xyXG4gICAgICAgIGNvbnN0IGlucHV0VmlldyA9IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGlucHV0QnVmZmVyKTtcclxuICAgICAgICBpZiAoIWNoZWNrQnVmZmVyUGFyYW1zKHRoaXMsIGlucHV0VmlldywgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSlcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIGNvbnN0IGludEJ1ZmZlciA9IGlucHV0Vmlldy5zdWJhcnJheShpbnB1dE9mZnNldCwgaW5wdXRPZmZzZXQgKyBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSBuZXcgVWludDhBcnJheShpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dExlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVIZXhWaWV3W2ldID0gaW50QnVmZmVyW2ldICYgMHg3RjtcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCsrO1xyXG4gICAgICAgICAgICBpZiAoKGludEJ1ZmZlcltpXSAmIDB4ODApID09PSAweDAwKVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRlbXBWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5ibG9ja0xlbmd0aCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmJsb2NrTGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIHRlbXBWaWV3W2ldID0gdGhpcy52YWx1ZUhleFZpZXdbaV07XHJcbiAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSB0ZW1wVmlldztcclxuICAgICAgICBpZiAoKGludEJ1ZmZlclt0aGlzLmJsb2NrTGVuZ3RoIC0gMV0gJiAweDgwKSAhPT0gMHgwMCkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gXCJFbmQgb2YgaW5wdXQgcmVhY2hlZCBiZWZvcmUgbWVzc2FnZSB3YXMgZnVsbHkgZGVjb2RlZFwiO1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnZhbHVlSGV4Vmlld1swXSA9PT0gMHgwMClcclxuICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKFwiTmVlZGxlc3NseSBsb25nIGZvcm1hdCBvZiBTSUQgZW5jb2RpbmdcIik7XHJcbiAgICAgICAgaWYgKHRoaXMuYmxvY2tMZW5ndGggPD0gOClcclxuICAgICAgICAgICAgdGhpcy52YWx1ZURlYyA9IHB2dXRpbHMudXRpbEZyb21CYXNlKHRoaXMudmFsdWVIZXhWaWV3LCA3KTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pc0hleE9ubHkgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1c2goXCJUb28gYmlnIFNJRCBmb3IgZGVjb2RpbmcsIGhleCBvbmx5XCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKGlucHV0T2Zmc2V0ICsgdGhpcy5ibG9ja0xlbmd0aCk7XHJcbiAgICB9XHJcbiAgICB0b0JFUihzaXplT25seSkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzSGV4T25seSkge1xyXG4gICAgICAgICAgICBpZiAoc2l6ZU9ubHkpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKG5ldyBBcnJheUJ1ZmZlcih0aGlzLnZhbHVlSGV4Vmlldy5ieXRlTGVuZ3RoKSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1clZpZXcgPSB0aGlzLnZhbHVlSGV4VmlldztcclxuICAgICAgICAgICAgY29uc3QgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KHRoaXMuYmxvY2tMZW5ndGgpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8ICh0aGlzLmJsb2NrTGVuZ3RoIC0gMSk7IGkrKylcclxuICAgICAgICAgICAgICAgIHJldFZpZXdbaV0gPSBjdXJWaWV3W2ldIHwgMHg4MDtcclxuICAgICAgICAgICAgcmV0Vmlld1t0aGlzLmJsb2NrTGVuZ3RoIC0gMV0gPSBjdXJWaWV3W3RoaXMuYmxvY2tMZW5ndGggLSAxXTtcclxuICAgICAgICAgICAgcmV0dXJuIHJldFZpZXcuYnVmZmVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBlbmNvZGVkQnVmID0gcHZ1dGlscy51dGlsVG9CYXNlKHRoaXMudmFsdWVEZWMsIDcpO1xyXG4gICAgICAgIGlmIChlbmNvZGVkQnVmLmJ5dGVMZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiRXJyb3IgZHVyaW5nIGVuY29kaW5nIFNJRCB2YWx1ZVwiO1xyXG4gICAgICAgICAgICByZXR1cm4gRU1QVFlfQlVGRkVSO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoZW5jb2RlZEJ1Zi5ieXRlTGVuZ3RoKTtcclxuICAgICAgICBpZiAoIXNpemVPbmx5KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuY29kZWRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoZW5jb2RlZEJ1Zik7XHJcbiAgICAgICAgICAgIGNvbnN0IGxlbiA9IGVuY29kZWRCdWYuYnl0ZUxlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspXHJcbiAgICAgICAgICAgICAgICByZXRWaWV3W2ldID0gZW5jb2RlZFZpZXdbaV0gfCAweDgwO1xyXG4gICAgICAgICAgICByZXRWaWV3W2xlbl0gPSBlbmNvZGVkVmlld1tsZW5dO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmV0Vmlldy5idWZmZXI7XHJcbiAgICB9XHJcbiAgICB0b1N0cmluZygpIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gXCJcIjtcclxuICAgICAgICBpZiAodGhpcy5pc0hleE9ubHkpXHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHB2dHN1dGlscy5Db252ZXJ0LlRvSGV4KHRoaXMudmFsdWVIZXhWaWV3KTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy52YWx1ZURlYy50b1N0cmluZygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICB2YWx1ZURlYzogdGhpcy52YWx1ZURlYyxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbkxvY2FsUmVsYXRpdmVTaWRWYWx1ZUJsb2NrLk5BTUUgPSBcInJlbGF0aXZlU2lkQmxvY2tcIjtcblxuY2xhc3MgTG9jYWxSZWxhdGl2ZU9iamVjdElkZW50aWZpZXJWYWx1ZUJsb2NrIGV4dGVuZHMgVmFsdWVCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IHZhbHVlID0gRU1QVFlfU1RSSU5HLCAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSBbXTtcclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5mcm9tU3RyaW5nKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBsZXQgcmVzdWx0T2Zmc2V0ID0gaW5wdXRPZmZzZXQ7XHJcbiAgICAgICAgd2hpbGUgKGlucHV0TGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBzaWRCbG9jayA9IG5ldyBMb2NhbFJlbGF0aXZlU2lkVmFsdWVCbG9jaygpO1xyXG4gICAgICAgICAgICByZXN1bHRPZmZzZXQgPSBzaWRCbG9jay5mcm9tQkVSKGlucHV0QnVmZmVyLCByZXN1bHRPZmZzZXQsIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdE9mZnNldCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggPSAwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IHNpZEJsb2NrLmVycm9yO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdE9mZnNldDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoICs9IHNpZEJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgICAgICBpbnB1dExlbmd0aCAtPSBzaWRCbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZS5wdXNoKHNpZEJsb2NrKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdE9mZnNldDtcclxuICAgIH1cclxuICAgIHRvQkVSKHNpemVPbmx5LCB3cml0ZXIpIHtcclxuICAgICAgICBjb25zdCByZXRCdWZmZXJzID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlQnVmID0gdGhpcy52YWx1ZVtpXS50b0JFUihzaXplT25seSk7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZUJ1Zi5ieXRlTGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gdGhpcy52YWx1ZVtpXS5lcnJvcjtcclxuICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWV9CVUZGRVI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0QnVmZmVycy5wdXNoKHZhbHVlQnVmKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvbmNhdChyZXRCdWZmZXJzKTtcclxuICAgIH1cclxuICAgIGZyb21TdHJpbmcoc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFtdO1xyXG4gICAgICAgIGxldCBwb3MxID0gMDtcclxuICAgICAgICBsZXQgcG9zMiA9IDA7XHJcbiAgICAgICAgbGV0IHNpZCA9IFwiXCI7XHJcbiAgICAgICAgZG8ge1xyXG4gICAgICAgICAgICBwb3MyID0gc3RyaW5nLmluZGV4T2YoXCIuXCIsIHBvczEpO1xyXG4gICAgICAgICAgICBpZiAocG9zMiA9PT0gLTEpXHJcbiAgICAgICAgICAgICAgICBzaWQgPSBzdHJpbmcuc3Vic3RyaW5nKHBvczEpO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBzaWQgPSBzdHJpbmcuc3Vic3RyaW5nKHBvczEsIHBvczIpO1xyXG4gICAgICAgICAgICBwb3MxID0gcG9zMiArIDE7XHJcbiAgICAgICAgICAgIGNvbnN0IHNpZEJsb2NrID0gbmV3IExvY2FsUmVsYXRpdmVTaWRWYWx1ZUJsb2NrKCk7XHJcbiAgICAgICAgICAgIHNpZEJsb2NrLnZhbHVlRGVjID0gcGFyc2VJbnQoc2lkLCAxMCk7XHJcbiAgICAgICAgICAgIGlmIChpc05hTihzaWRCbG9jay52YWx1ZURlYykpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZS5wdXNoKHNpZEJsb2NrKTtcclxuICAgICAgICB9IHdoaWxlIChwb3MyICE9PSAtMSk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICB0b1N0cmluZygpIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gXCJcIjtcclxuICAgICAgICBsZXQgaXNIZXhPbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlzSGV4T25seSA9IHRoaXMudmFsdWVbaV0uaXNIZXhPbmx5O1xyXG4gICAgICAgICAgICBsZXQgc2lkU3RyID0gdGhpcy52YWx1ZVtpXS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICBpZiAoaSAhPT0gMClcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGAke3Jlc3VsdH0uYDtcclxuICAgICAgICAgICAgaWYgKGlzSGV4T25seSkge1xyXG4gICAgICAgICAgICAgICAgc2lkU3RyID0gYHske3NpZFN0cn19YDtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzaWRTdHI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHNpZFN0cjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICBjb25zdCBvYmplY3QgPSB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy50b1N0cmluZygpLFxyXG4gICAgICAgICAgICBzaWRBcnJheTogW10sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmFsdWUubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIG9iamVjdC5zaWRBcnJheS5wdXNoKHRoaXMudmFsdWVbaV0udG9KU09OKCkpO1xyXG4gICAgICAgIHJldHVybiBvYmplY3Q7XHJcbiAgICB9XHJcbn1cclxuTG9jYWxSZWxhdGl2ZU9iamVjdElkZW50aWZpZXJWYWx1ZUJsb2NrLk5BTUUgPSBcIlJlbGF0aXZlT2JqZWN0SWRlbnRpZmllclZhbHVlQmxvY2tcIjtcblxudmFyIF9hJGw7XHJcbmNsYXNzIFJlbGF0aXZlT2JqZWN0SWRlbnRpZmllciBleHRlbmRzIEJhc2VCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzLCBMb2NhbFJlbGF0aXZlT2JqZWN0SWRlbnRpZmllclZhbHVlQmxvY2spO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDEzO1xyXG4gICAgfVxyXG4gICAgZ2V0VmFsdWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVCbG9jay50b1N0cmluZygpO1xyXG4gICAgfVxyXG4gICAgc2V0VmFsdWUodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2suZnJvbVN0cmluZyh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBvbkFzY2lpRW5jb2RpbmcoKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY29uc3RydWN0b3IuTkFNRX0gOiAke3RoaXMudmFsdWVCbG9jay50b1N0cmluZygpIHx8IFwiZW1wdHlcIn1gO1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5nZXRWYWx1ZSgpLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuX2EkbCA9IFJlbGF0aXZlT2JqZWN0SWRlbnRpZmllcjtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5SZWxhdGl2ZU9iamVjdElkZW50aWZpZXIgPSBfYSRsO1xyXG59KSgpO1xyXG5SZWxhdGl2ZU9iamVjdElkZW50aWZpZXIuTkFNRSA9IFwiUmVsYXRpdmVPYmplY3RJZGVudGlmaWVyXCI7XG5cbnZhciBfYSRrO1xyXG5jbGFzcyBTZXF1ZW5jZSBleHRlbmRzIENvbnN0cnVjdGVkIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDE2O1xyXG4gICAgfVxyXG59XHJcbl9hJGsgPSBTZXF1ZW5jZTtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5TZXF1ZW5jZSA9IF9hJGs7XHJcbn0pKCk7XHJcblNlcXVlbmNlLk5BTUUgPSBcIlNFUVVFTkNFXCI7XG5cbnZhciBfYSRqO1xyXG5jbGFzcyBTZXQgZXh0ZW5kcyBDb25zdHJ1Y3RlZCB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAxNztcclxuICAgIH1cclxufVxyXG5fYSRqID0gU2V0O1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLlNldCA9IF9hJGo7XHJcbn0pKCk7XHJcblNldC5OQU1FID0gXCJTRVRcIjtcblxuY2xhc3MgTG9jYWxTdHJpbmdWYWx1ZUJsb2NrIGV4dGVuZHMgSGV4QmxvY2soVmFsdWVCbG9jaykge1xyXG4gICAgY29uc3RydWN0b3IoeyAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaXNIZXhPbmx5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnZhbHVlID0gRU1QVFlfU1RSSU5HO1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbkxvY2FsU3RyaW5nVmFsdWVCbG9jay5OQU1FID0gXCJTdHJpbmdWYWx1ZUJsb2NrXCI7XG5cbmNsYXNzIExvY2FsU2ltcGxlU3RyaW5nVmFsdWVCbG9jayBleHRlbmRzIExvY2FsU3RyaW5nVmFsdWVCbG9jayB7XHJcbn1cclxuTG9jYWxTaW1wbGVTdHJpbmdWYWx1ZUJsb2NrLk5BTUUgPSBcIlNpbXBsZVN0cmluZ1ZhbHVlQmxvY2tcIjtcblxuY2xhc3MgTG9jYWxTaW1wbGVTdHJpbmdCbG9jayBleHRlbmRzIEJhc2VTdHJpbmdCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycywgTG9jYWxTaW1wbGVTdHJpbmdWYWx1ZUJsb2NrKTtcclxuICAgIH1cclxuICAgIGZyb21CdWZmZXIoaW5wdXRCdWZmZXIpIHtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGlucHV0QnVmZmVyKSk7XHJcbiAgICB9XHJcbiAgICBmcm9tU3RyaW5nKGlucHV0U3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3Qgc3RyTGVuID0gaW5wdXRTdHJpbmcubGVuZ3RoO1xyXG4gICAgICAgIGNvbnN0IHZpZXcgPSB0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoc3RyTGVuKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ckxlbjsgaSsrKVxyXG4gICAgICAgICAgICB2aWV3W2ldID0gaW5wdXRTdHJpbmcuY2hhckNvZGVBdChpKTtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWUgPSBpbnB1dFN0cmluZztcclxuICAgIH1cclxufVxyXG5Mb2NhbFNpbXBsZVN0cmluZ0Jsb2NrLk5BTUUgPSBcIlNJTVBMRSBTVFJJTkdcIjtcblxuY2xhc3MgTG9jYWxVdGY4U3RyaW5nVmFsdWVCbG9jayBleHRlbmRzIExvY2FsU2ltcGxlU3RyaW5nQmxvY2sge1xyXG4gICAgZnJvbUJ1ZmZlcihpbnB1dEJ1ZmZlcikge1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXcgPSBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShpbnB1dEJ1ZmZlcik7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlID0gcHZ0c3V0aWxzLkNvbnZlcnQuVG9VdGY4U3RyaW5nKGlucHV0QnVmZmVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGV4KSB7XHJcbiAgICAgICAgICAgIHRoaXMud2FybmluZ3MucHVzaChgRXJyb3IgZHVyaW5nIFwiZGVjb2RlVVJJQ29tcG9uZW50XCI6ICR7ZXh9LCB1c2luZyByYXcgc3RyaW5nYCk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZSA9IHB2dHN1dGlscy5Db252ZXJ0LlRvQmluYXJ5KGlucHV0QnVmZmVyKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmcm9tU3RyaW5nKGlucHV0U3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4VmlldyA9IG5ldyBVaW50OEFycmF5KHB2dHN1dGlscy5Db252ZXJ0LkZyb21VdGY4U3RyaW5nKGlucHV0U3RyaW5nKSk7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlID0gaW5wdXRTdHJpbmc7XHJcbiAgICB9XHJcbn1cclxuTG9jYWxVdGY4U3RyaW5nVmFsdWVCbG9jay5OQU1FID0gXCJVdGY4U3RyaW5nVmFsdWVCbG9ja1wiO1xuXG52YXIgX2EkaTtcclxuY2xhc3MgVXRmOFN0cmluZyBleHRlbmRzIExvY2FsVXRmOFN0cmluZ1ZhbHVlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMTI7XHJcbiAgICB9XHJcbn1cclxuX2EkaSA9IFV0ZjhTdHJpbmc7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuVXRmOFN0cmluZyA9IF9hJGk7XHJcbn0pKCk7XHJcblV0ZjhTdHJpbmcuTkFNRSA9IFwiVVRGOFN0cmluZ1wiO1xuXG5jbGFzcyBMb2NhbEJtcFN0cmluZ1ZhbHVlQmxvY2sgZXh0ZW5kcyBMb2NhbFNpbXBsZVN0cmluZ0Jsb2NrIHtcclxuICAgIGZyb21CdWZmZXIoaW5wdXRCdWZmZXIpIHtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWUgPSBwdnRzdXRpbHMuQ29udmVydC5Ub1V0ZjE2U3RyaW5nKGlucHV0QnVmZmVyKTtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3ID0gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoaW5wdXRCdWZmZXIpO1xyXG4gICAgfVxyXG4gICAgZnJvbVN0cmluZyhpbnB1dFN0cmluZykge1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZSA9IGlucHV0U3RyaW5nO1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXcgPSBuZXcgVWludDhBcnJheShwdnRzdXRpbHMuQ29udmVydC5Gcm9tVXRmMTZTdHJpbmcoaW5wdXRTdHJpbmcpKTtcclxuICAgIH1cclxufVxyXG5Mb2NhbEJtcFN0cmluZ1ZhbHVlQmxvY2suTkFNRSA9IFwiQm1wU3RyaW5nVmFsdWVCbG9ja1wiO1xuXG52YXIgX2EkaDtcclxuY2xhc3MgQm1wU3RyaW5nIGV4dGVuZHMgTG9jYWxCbXBTdHJpbmdWYWx1ZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAzMDtcclxuICAgIH1cclxufVxyXG5fYSRoID0gQm1wU3RyaW5nO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLkJtcFN0cmluZyA9IF9hJGg7XHJcbn0pKCk7XHJcbkJtcFN0cmluZy5OQU1FID0gXCJCTVBTdHJpbmdcIjtcblxuY2xhc3MgTG9jYWxVbml2ZXJzYWxTdHJpbmdWYWx1ZUJsb2NrIGV4dGVuZHMgTG9jYWxTaW1wbGVTdHJpbmdCbG9jayB7XHJcbiAgICBmcm9tQnVmZmVyKGlucHV0QnVmZmVyKSB7XHJcbiAgICAgICAgY29uc3QgY29weUJ1ZmZlciA9IEFycmF5QnVmZmVyLmlzVmlldyhpbnB1dEJ1ZmZlcikgPyBpbnB1dEJ1ZmZlci5zbGljZSgpLmJ1ZmZlciA6IGlucHV0QnVmZmVyLnNsaWNlKDApO1xyXG4gICAgICAgIGNvbnN0IHZhbHVlVmlldyA9IG5ldyBVaW50OEFycmF5KGNvcHlCdWZmZXIpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWVWaWV3Lmxlbmd0aDsgaSArPSA0KSB7XHJcbiAgICAgICAgICAgIHZhbHVlVmlld1tpXSA9IHZhbHVlVmlld1tpICsgM107XHJcbiAgICAgICAgICAgIHZhbHVlVmlld1tpICsgMV0gPSB2YWx1ZVZpZXdbaSArIDJdO1xyXG4gICAgICAgICAgICB2YWx1ZVZpZXdbaSArIDJdID0gMHgwMDtcclxuICAgICAgICAgICAgdmFsdWVWaWV3W2kgKyAzXSA9IDB4MDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZSA9IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgbmV3IFVpbnQzMkFycmF5KGNvcHlCdWZmZXIpKTtcclxuICAgIH1cclxuICAgIGZyb21TdHJpbmcoaW5wdXRTdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBzdHJMZW5ndGggPSBpbnB1dFN0cmluZy5sZW5ndGg7XHJcbiAgICAgICAgY29uc3QgdmFsdWVIZXhWaWV3ID0gdGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4VmlldyA9IG5ldyBVaW50OEFycmF5KHN0ckxlbmd0aCAqIDQpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyTGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgY29kZUJ1ZiA9IHB2dXRpbHMudXRpbFRvQmFzZShpbnB1dFN0cmluZy5jaGFyQ29kZUF0KGkpLCA4KTtcclxuICAgICAgICAgICAgY29uc3QgY29kZVZpZXcgPSBuZXcgVWludDhBcnJheShjb2RlQnVmKTtcclxuICAgICAgICAgICAgaWYgKGNvZGVWaWV3Lmxlbmd0aCA+IDQpXHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgY29uc3QgZGlmID0gNCAtIGNvZGVWaWV3Lmxlbmd0aDtcclxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IChjb2RlVmlldy5sZW5ndGggLSAxKTsgaiA+PSAwOyBqLS0pXHJcbiAgICAgICAgICAgICAgICB2YWx1ZUhleFZpZXdbaSAqIDQgKyBqICsgZGlmXSA9IGNvZGVWaWV3W2pdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWUgPSBpbnB1dFN0cmluZztcclxuICAgIH1cclxufVxyXG5Mb2NhbFVuaXZlcnNhbFN0cmluZ1ZhbHVlQmxvY2suTkFNRSA9IFwiVW5pdmVyc2FsU3RyaW5nVmFsdWVCbG9ja1wiO1xuXG52YXIgX2EkZztcclxuY2xhc3MgVW5pdmVyc2FsU3RyaW5nIGV4dGVuZHMgTG9jYWxVbml2ZXJzYWxTdHJpbmdWYWx1ZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAyODtcclxuICAgIH1cclxufVxyXG5fYSRnID0gVW5pdmVyc2FsU3RyaW5nO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLlVuaXZlcnNhbFN0cmluZyA9IF9hJGc7XHJcbn0pKCk7XHJcblVuaXZlcnNhbFN0cmluZy5OQU1FID0gXCJVbml2ZXJzYWxTdHJpbmdcIjtcblxudmFyIF9hJGY7XHJcbmNsYXNzIE51bWVyaWNTdHJpbmcgZXh0ZW5kcyBMb2NhbFNpbXBsZVN0cmluZ0Jsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDE4O1xyXG4gICAgfVxyXG59XHJcbl9hJGYgPSBOdW1lcmljU3RyaW5nO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLk51bWVyaWNTdHJpbmcgPSBfYSRmO1xyXG59KSgpO1xyXG5OdW1lcmljU3RyaW5nLk5BTUUgPSBcIk51bWVyaWNTdHJpbmdcIjtcblxudmFyIF9hJGU7XHJcbmNsYXNzIFByaW50YWJsZVN0cmluZyBleHRlbmRzIExvY2FsU2ltcGxlU3RyaW5nQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMTk7XHJcbiAgICB9XHJcbn1cclxuX2EkZSA9IFByaW50YWJsZVN0cmluZztcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5QcmludGFibGVTdHJpbmcgPSBfYSRlO1xyXG59KSgpO1xyXG5QcmludGFibGVTdHJpbmcuTkFNRSA9IFwiUHJpbnRhYmxlU3RyaW5nXCI7XG5cbnZhciBfYSRkO1xyXG5jbGFzcyBUZWxldGV4U3RyaW5nIGV4dGVuZHMgTG9jYWxTaW1wbGVTdHJpbmdCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAyMDtcclxuICAgIH1cclxufVxyXG5fYSRkID0gVGVsZXRleFN0cmluZztcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5UZWxldGV4U3RyaW5nID0gX2EkZDtcclxufSkoKTtcclxuVGVsZXRleFN0cmluZy5OQU1FID0gXCJUZWxldGV4U3RyaW5nXCI7XG5cbnZhciBfYSRjO1xyXG5jbGFzcyBWaWRlb3RleFN0cmluZyBleHRlbmRzIExvY2FsU2ltcGxlU3RyaW5nQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMjE7XHJcbiAgICB9XHJcbn1cclxuX2EkYyA9IFZpZGVvdGV4U3RyaW5nO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLlZpZGVvdGV4U3RyaW5nID0gX2EkYztcclxufSkoKTtcclxuVmlkZW90ZXhTdHJpbmcuTkFNRSA9IFwiVmlkZW90ZXhTdHJpbmdcIjtcblxudmFyIF9hJGI7XHJcbmNsYXNzIElBNVN0cmluZyBleHRlbmRzIExvY2FsU2ltcGxlU3RyaW5nQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMjI7XHJcbiAgICB9XHJcbn1cclxuX2EkYiA9IElBNVN0cmluZztcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5JQTVTdHJpbmcgPSBfYSRiO1xyXG59KSgpO1xyXG5JQTVTdHJpbmcuTkFNRSA9IFwiSUE1U3RyaW5nXCI7XG5cbnZhciBfYSRhO1xyXG5jbGFzcyBHcmFwaGljU3RyaW5nIGV4dGVuZHMgTG9jYWxTaW1wbGVTdHJpbmdCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAyNTtcclxuICAgIH1cclxufVxyXG5fYSRhID0gR3JhcGhpY1N0cmluZztcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5HcmFwaGljU3RyaW5nID0gX2EkYTtcclxufSkoKTtcclxuR3JhcGhpY1N0cmluZy5OQU1FID0gXCJHcmFwaGljU3RyaW5nXCI7XG5cbnZhciBfYSQ5O1xyXG5jbGFzcyBWaXNpYmxlU3RyaW5nIGV4dGVuZHMgTG9jYWxTaW1wbGVTdHJpbmdCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAyNjtcclxuICAgIH1cclxufVxyXG5fYSQ5ID0gVmlzaWJsZVN0cmluZztcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5WaXNpYmxlU3RyaW5nID0gX2EkOTtcclxufSkoKTtcclxuVmlzaWJsZVN0cmluZy5OQU1FID0gXCJWaXNpYmxlU3RyaW5nXCI7XG5cbnZhciBfYSQ4O1xyXG5jbGFzcyBHZW5lcmFsU3RyaW5nIGV4dGVuZHMgTG9jYWxTaW1wbGVTdHJpbmdCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAyNztcclxuICAgIH1cclxufVxyXG5fYSQ4ID0gR2VuZXJhbFN0cmluZztcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5HZW5lcmFsU3RyaW5nID0gX2EkODtcclxufSkoKTtcclxuR2VuZXJhbFN0cmluZy5OQU1FID0gXCJHZW5lcmFsU3RyaW5nXCI7XG5cbnZhciBfYSQ3O1xyXG5jbGFzcyBDaGFyYWN0ZXJTdHJpbmcgZXh0ZW5kcyBMb2NhbFNpbXBsZVN0cmluZ0Jsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDI5O1xyXG4gICAgfVxyXG59XHJcbl9hJDcgPSBDaGFyYWN0ZXJTdHJpbmc7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuQ2hhcmFjdGVyU3RyaW5nID0gX2EkNztcclxufSkoKTtcclxuQ2hhcmFjdGVyU3RyaW5nLk5BTUUgPSBcIkNoYXJhY3RlclN0cmluZ1wiO1xuXG52YXIgX2EkNjtcclxuY2xhc3MgVVRDVGltZSBleHRlbmRzIFZpc2libGVTdHJpbmcge1xyXG4gICAgY29uc3RydWN0b3IoeyB2YWx1ZSwgdmFsdWVEYXRlLCAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMueWVhciA9IDA7XHJcbiAgICAgICAgdGhpcy5tb250aCA9IDA7XHJcbiAgICAgICAgdGhpcy5kYXkgPSAwO1xyXG4gICAgICAgIHRoaXMuaG91ciA9IDA7XHJcbiAgICAgICAgdGhpcy5taW51dGUgPSAwO1xyXG4gICAgICAgIHRoaXMuc2Vjb25kID0gMDtcclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5mcm9tU3RyaW5nKHZhbHVlKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4VmlldyA9IG5ldyBVaW50OEFycmF5KHZhbHVlLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3W2ldID0gdmFsdWUuY2hhckNvZGVBdChpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZhbHVlRGF0ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZyb21EYXRlKHZhbHVlRGF0ZSk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXcgPSBuZXcgVWludDhBcnJheSh0aGlzLnRvQnVmZmVyKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAyMztcclxuICAgIH1cclxuICAgIGZyb21CdWZmZXIoaW5wdXRCdWZmZXIpIHtcclxuICAgICAgICB0aGlzLmZyb21TdHJpbmcoU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShpbnB1dEJ1ZmZlcikpKTtcclxuICAgIH1cclxuICAgIHRvQnVmZmVyKCkge1xyXG4gICAgICAgIGNvbnN0IHN0ciA9IHRoaXMudG9TdHJpbmcoKTtcclxuICAgICAgICBjb25zdCBidWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoc3RyLmxlbmd0aCk7XHJcbiAgICAgICAgY29uc3QgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIHZpZXdbaV0gPSBzdHIuY2hhckNvZGVBdChpKTtcclxuICAgICAgICByZXR1cm4gYnVmZmVyO1xyXG4gICAgfVxyXG4gICAgZnJvbURhdGUoaW5wdXREYXRlKSB7XHJcbiAgICAgICAgdGhpcy55ZWFyID0gaW5wdXREYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XHJcbiAgICAgICAgdGhpcy5tb250aCA9IGlucHV0RGF0ZS5nZXRVVENNb250aCgpICsgMTtcclxuICAgICAgICB0aGlzLmRheSA9IGlucHV0RGF0ZS5nZXRVVENEYXRlKCk7XHJcbiAgICAgICAgdGhpcy5ob3VyID0gaW5wdXREYXRlLmdldFVUQ0hvdXJzKCk7XHJcbiAgICAgICAgdGhpcy5taW51dGUgPSBpbnB1dERhdGUuZ2V0VVRDTWludXRlcygpO1xyXG4gICAgICAgIHRoaXMuc2Vjb25kID0gaW5wdXREYXRlLmdldFVUQ1NlY29uZHMoKTtcclxuICAgIH1cclxuICAgIHRvRGF0ZSgpIHtcclxuICAgICAgICByZXR1cm4gKG5ldyBEYXRlKERhdGUuVVRDKHRoaXMueWVhciwgdGhpcy5tb250aCAtIDEsIHRoaXMuZGF5LCB0aGlzLmhvdXIsIHRoaXMubWludXRlLCB0aGlzLnNlY29uZCkpKTtcclxuICAgIH1cclxuICAgIGZyb21TdHJpbmcoaW5wdXRTdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBwYXJzZXIgPSAvKFxcZHsyfSkoXFxkezJ9KShcXGR7Mn0pKFxcZHsyfSkoXFxkezJ9KShcXGR7Mn0pWi9pZztcclxuICAgICAgICBjb25zdCBwYXJzZXJBcnJheSA9IHBhcnNlci5leGVjKGlucHV0U3RyaW5nKTtcclxuICAgICAgICBpZiAocGFyc2VyQXJyYXkgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiV3JvbmcgaW5wdXQgc3RyaW5nIGZvciBjb252ZXJzaW9uXCI7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgeWVhciA9IHBhcnNlSW50KHBhcnNlckFycmF5WzFdLCAxMCk7XHJcbiAgICAgICAgaWYgKHllYXIgPj0gNTApXHJcbiAgICAgICAgICAgIHRoaXMueWVhciA9IDE5MDAgKyB5ZWFyO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy55ZWFyID0gMjAwMCArIHllYXI7XHJcbiAgICAgICAgdGhpcy5tb250aCA9IHBhcnNlSW50KHBhcnNlckFycmF5WzJdLCAxMCk7XHJcbiAgICAgICAgdGhpcy5kYXkgPSBwYXJzZUludChwYXJzZXJBcnJheVszXSwgMTApO1xyXG4gICAgICAgIHRoaXMuaG91ciA9IHBhcnNlSW50KHBhcnNlckFycmF5WzRdLCAxMCk7XHJcbiAgICAgICAgdGhpcy5taW51dGUgPSBwYXJzZUludChwYXJzZXJBcnJheVs1XSwgMTApO1xyXG4gICAgICAgIHRoaXMuc2Vjb25kID0gcGFyc2VJbnQocGFyc2VyQXJyYXlbNl0sIDEwKTtcclxuICAgIH1cclxuICAgIHRvU3RyaW5nKGVuY29kaW5nID0gXCJpc29cIikge1xyXG4gICAgICAgIGlmIChlbmNvZGluZyA9PT0gXCJpc29cIikge1xyXG4gICAgICAgICAgICBjb25zdCBvdXRwdXRBcnJheSA9IG5ldyBBcnJheSg3KTtcclxuICAgICAgICAgICAgb3V0cHV0QXJyYXlbMF0gPSBwdnV0aWxzLnBhZE51bWJlcigoKHRoaXMueWVhciA8IDIwMDApID8gKHRoaXMueWVhciAtIDE5MDApIDogKHRoaXMueWVhciAtIDIwMDApKSwgMik7XHJcbiAgICAgICAgICAgIG91dHB1dEFycmF5WzFdID0gcHZ1dGlscy5wYWROdW1iZXIodGhpcy5tb250aCwgMik7XHJcbiAgICAgICAgICAgIG91dHB1dEFycmF5WzJdID0gcHZ1dGlscy5wYWROdW1iZXIodGhpcy5kYXksIDIpO1xyXG4gICAgICAgICAgICBvdXRwdXRBcnJheVszXSA9IHB2dXRpbHMucGFkTnVtYmVyKHRoaXMuaG91ciwgMik7XHJcbiAgICAgICAgICAgIG91dHB1dEFycmF5WzRdID0gcHZ1dGlscy5wYWROdW1iZXIodGhpcy5taW51dGUsIDIpO1xyXG4gICAgICAgICAgICBvdXRwdXRBcnJheVs1XSA9IHB2dXRpbHMucGFkTnVtYmVyKHRoaXMuc2Vjb25kLCAyKTtcclxuICAgICAgICAgICAgb3V0cHV0QXJyYXlbNl0gPSBcIlpcIjtcclxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dEFycmF5LmpvaW4oXCJcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzdXBlci50b1N0cmluZyhlbmNvZGluZyk7XHJcbiAgICB9XHJcbiAgICBvbkFzY2lpRW5jb2RpbmcoKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY29uc3RydWN0b3IuTkFNRX0gOiAke3RoaXMudG9EYXRlKCkudG9JU09TdHJpbmcoKX1gO1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICB5ZWFyOiB0aGlzLnllYXIsXHJcbiAgICAgICAgICAgIG1vbnRoOiB0aGlzLm1vbnRoLFxyXG4gICAgICAgICAgICBkYXk6IHRoaXMuZGF5LFxyXG4gICAgICAgICAgICBob3VyOiB0aGlzLmhvdXIsXHJcbiAgICAgICAgICAgIG1pbnV0ZTogdGhpcy5taW51dGUsXHJcbiAgICAgICAgICAgIHNlY29uZDogdGhpcy5zZWNvbmQsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5fYSQ2ID0gVVRDVGltZTtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5VVENUaW1lID0gX2EkNjtcclxufSkoKTtcclxuVVRDVGltZS5OQU1FID0gXCJVVENUaW1lXCI7XG5cbnZhciBfYSQ1O1xyXG5jbGFzcyBHZW5lcmFsaXplZFRpbWUgZXh0ZW5kcyBVVENUaW1lIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHZhciBfYjtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICAoX2IgPSB0aGlzLm1pbGxpc2Vjb25kKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAodGhpcy5taWxsaXNlY29uZCA9IDApO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDI0O1xyXG4gICAgfVxyXG4gICAgZnJvbURhdGUoaW5wdXREYXRlKSB7XHJcbiAgICAgICAgc3VwZXIuZnJvbURhdGUoaW5wdXREYXRlKTtcclxuICAgICAgICB0aGlzLm1pbGxpc2Vjb25kID0gaW5wdXREYXRlLmdldFVUQ01pbGxpc2Vjb25kcygpO1xyXG4gICAgfVxyXG4gICAgdG9EYXRlKCkge1xyXG4gICAgICAgIHJldHVybiAobmV3IERhdGUoRGF0ZS5VVEModGhpcy55ZWFyLCB0aGlzLm1vbnRoIC0gMSwgdGhpcy5kYXksIHRoaXMuaG91ciwgdGhpcy5taW51dGUsIHRoaXMuc2Vjb25kLCB0aGlzLm1pbGxpc2Vjb25kKSkpO1xyXG4gICAgfVxyXG4gICAgZnJvbVN0cmluZyhpbnB1dFN0cmluZykge1xyXG4gICAgICAgIGxldCBpc1VUQyA9IGZhbHNlO1xyXG4gICAgICAgIGxldCB0aW1lU3RyaW5nID0gXCJcIjtcclxuICAgICAgICBsZXQgZGF0ZVRpbWVTdHJpbmcgPSBcIlwiO1xyXG4gICAgICAgIGxldCBmcmFjdGlvblBhcnQgPSAwO1xyXG4gICAgICAgIGxldCBwYXJzZXI7XHJcbiAgICAgICAgbGV0IGhvdXJEaWZmZXJlbmNlID0gMDtcclxuICAgICAgICBsZXQgbWludXRlRGlmZmVyZW5jZSA9IDA7XHJcbiAgICAgICAgaWYgKGlucHV0U3RyaW5nW2lucHV0U3RyaW5nLmxlbmd0aCAtIDFdID09PSBcIlpcIikge1xyXG4gICAgICAgICAgICB0aW1lU3RyaW5nID0gaW5wdXRTdHJpbmcuc3Vic3RyaW5nKDAsIGlucHV0U3RyaW5nLmxlbmd0aCAtIDEpO1xyXG4gICAgICAgICAgICBpc1VUQyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBudW1iZXIgPSBuZXcgTnVtYmVyKGlucHV0U3RyaW5nW2lucHV0U3RyaW5nLmxlbmd0aCAtIDFdKTtcclxuICAgICAgICAgICAgaWYgKGlzTmFOKG51bWJlci52YWx1ZU9mKCkpKVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV3JvbmcgaW5wdXQgc3RyaW5nIGZvciBjb252ZXJzaW9uXCIpO1xyXG4gICAgICAgICAgICB0aW1lU3RyaW5nID0gaW5wdXRTdHJpbmc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc1VUQykge1xyXG4gICAgICAgICAgICBpZiAodGltZVN0cmluZy5pbmRleE9mKFwiK1wiKSAhPT0gLTEpXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXcm9uZyBpbnB1dCBzdHJpbmcgZm9yIGNvbnZlcnNpb25cIik7XHJcbiAgICAgICAgICAgIGlmICh0aW1lU3RyaW5nLmluZGV4T2YoXCItXCIpICE9PSAtMSlcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIldyb25nIGlucHV0IHN0cmluZyBmb3IgY29udmVyc2lvblwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBtdWx0aXBsaWVyID0gMTtcclxuICAgICAgICAgICAgbGV0IGRpZmZlcmVuY2VQb3NpdGlvbiA9IHRpbWVTdHJpbmcuaW5kZXhPZihcIitcIik7XHJcbiAgICAgICAgICAgIGxldCBkaWZmZXJlbmNlU3RyaW5nID0gXCJcIjtcclxuICAgICAgICAgICAgaWYgKGRpZmZlcmVuY2VQb3NpdGlvbiA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VQb3NpdGlvbiA9IHRpbWVTdHJpbmcuaW5kZXhPZihcIi1cIik7XHJcbiAgICAgICAgICAgICAgICBtdWx0aXBsaWVyID0gLTE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGRpZmZlcmVuY2VQb3NpdGlvbiAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VTdHJpbmcgPSB0aW1lU3RyaW5nLnN1YnN0cmluZyhkaWZmZXJlbmNlUG9zaXRpb24gKyAxKTtcclxuICAgICAgICAgICAgICAgIHRpbWVTdHJpbmcgPSB0aW1lU3RyaW5nLnN1YnN0cmluZygwLCBkaWZmZXJlbmNlUG9zaXRpb24pO1xyXG4gICAgICAgICAgICAgICAgaWYgKChkaWZmZXJlbmNlU3RyaW5nLmxlbmd0aCAhPT0gMikgJiYgKGRpZmZlcmVuY2VTdHJpbmcubGVuZ3RoICE9PSA0KSlcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXcm9uZyBpbnB1dCBzdHJpbmcgZm9yIGNvbnZlcnNpb25cIik7XHJcbiAgICAgICAgICAgICAgICBsZXQgbnVtYmVyID0gcGFyc2VJbnQoZGlmZmVyZW5jZVN0cmluZy5zdWJzdHJpbmcoMCwgMiksIDEwKTtcclxuICAgICAgICAgICAgICAgIGlmIChpc05hTihudW1iZXIudmFsdWVPZigpKSlcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXcm9uZyBpbnB1dCBzdHJpbmcgZm9yIGNvbnZlcnNpb25cIik7XHJcbiAgICAgICAgICAgICAgICBob3VyRGlmZmVyZW5jZSA9IG11bHRpcGxpZXIgKiBudW1iZXI7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGlmZmVyZW5jZVN0cmluZy5sZW5ndGggPT09IDQpIHtcclxuICAgICAgICAgICAgICAgICAgICBudW1iZXIgPSBwYXJzZUludChkaWZmZXJlbmNlU3RyaW5nLnN1YnN0cmluZygyLCA0KSwgMTApO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc05hTihudW1iZXIudmFsdWVPZigpKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV3JvbmcgaW5wdXQgc3RyaW5nIGZvciBjb252ZXJzaW9uXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIG1pbnV0ZURpZmZlcmVuY2UgPSBtdWx0aXBsaWVyICogbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBmcmFjdGlvblBvaW50UG9zaXRpb24gPSB0aW1lU3RyaW5nLmluZGV4T2YoXCIuXCIpO1xyXG4gICAgICAgIGlmIChmcmFjdGlvblBvaW50UG9zaXRpb24gPT09IC0xKVxyXG4gICAgICAgICAgICBmcmFjdGlvblBvaW50UG9zaXRpb24gPSB0aW1lU3RyaW5nLmluZGV4T2YoXCIsXCIpO1xyXG4gICAgICAgIGlmIChmcmFjdGlvblBvaW50UG9zaXRpb24gIT09IC0xKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZyYWN0aW9uUGFydENoZWNrID0gbmV3IE51bWJlcihgMCR7dGltZVN0cmluZy5zdWJzdHJpbmcoZnJhY3Rpb25Qb2ludFBvc2l0aW9uKX1gKTtcclxuICAgICAgICAgICAgaWYgKGlzTmFOKGZyYWN0aW9uUGFydENoZWNrLnZhbHVlT2YoKSkpXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXcm9uZyBpbnB1dCBzdHJpbmcgZm9yIGNvbnZlcnNpb25cIik7XHJcbiAgICAgICAgICAgIGZyYWN0aW9uUGFydCA9IGZyYWN0aW9uUGFydENoZWNrLnZhbHVlT2YoKTtcclxuICAgICAgICAgICAgZGF0ZVRpbWVTdHJpbmcgPSB0aW1lU3RyaW5nLnN1YnN0cmluZygwLCBmcmFjdGlvblBvaW50UG9zaXRpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIGRhdGVUaW1lU3RyaW5nID0gdGltZVN0cmluZztcclxuICAgICAgICBzd2l0Y2ggKHRydWUpIHtcclxuICAgICAgICAgICAgY2FzZSAoZGF0ZVRpbWVTdHJpbmcubGVuZ3RoID09PSA4KTpcclxuICAgICAgICAgICAgICAgIHBhcnNlciA9IC8oXFxkezR9KShcXGR7Mn0pKFxcZHsyfSkvaWc7XHJcbiAgICAgICAgICAgICAgICBpZiAoZnJhY3Rpb25Qb2ludFBvc2l0aW9uICE9PSAtMSlcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXcm9uZyBpbnB1dCBzdHJpbmcgZm9yIGNvbnZlcnNpb25cIik7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAoZGF0ZVRpbWVTdHJpbmcubGVuZ3RoID09PSAxMCk6XHJcbiAgICAgICAgICAgICAgICBwYXJzZXIgPSAvKFxcZHs0fSkoXFxkezJ9KShcXGR7Mn0pKFxcZHsyfSkvaWc7XHJcbiAgICAgICAgICAgICAgICBpZiAoZnJhY3Rpb25Qb2ludFBvc2l0aW9uICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBmcmFjdGlvblJlc3VsdCA9IDYwICogZnJhY3Rpb25QYXJ0O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWludXRlID0gTWF0aC5mbG9vcihmcmFjdGlvblJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZnJhY3Rpb25SZXN1bHQgPSA2MCAqIChmcmFjdGlvblJlc3VsdCAtIHRoaXMubWludXRlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlY29uZCA9IE1hdGguZmxvb3IoZnJhY3Rpb25SZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZyYWN0aW9uUmVzdWx0ID0gMTAwMCAqIChmcmFjdGlvblJlc3VsdCAtIHRoaXMuc2Vjb25kKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1pbGxpc2Vjb25kID0gTWF0aC5mbG9vcihmcmFjdGlvblJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAoZGF0ZVRpbWVTdHJpbmcubGVuZ3RoID09PSAxMik6XHJcbiAgICAgICAgICAgICAgICBwYXJzZXIgPSAvKFxcZHs0fSkoXFxkezJ9KShcXGR7Mn0pKFxcZHsyfSkoXFxkezJ9KS9pZztcclxuICAgICAgICAgICAgICAgIGlmIChmcmFjdGlvblBvaW50UG9zaXRpb24gIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZyYWN0aW9uUmVzdWx0ID0gNjAgKiBmcmFjdGlvblBhcnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWNvbmQgPSBNYXRoLmZsb29yKGZyYWN0aW9uUmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICBmcmFjdGlvblJlc3VsdCA9IDEwMDAgKiAoZnJhY3Rpb25SZXN1bHQgLSB0aGlzLnNlY29uZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5taWxsaXNlY29uZCA9IE1hdGguZmxvb3IoZnJhY3Rpb25SZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgKGRhdGVUaW1lU3RyaW5nLmxlbmd0aCA9PT0gMTQpOlxyXG4gICAgICAgICAgICAgICAgcGFyc2VyID0gLyhcXGR7NH0pKFxcZHsyfSkoXFxkezJ9KShcXGR7Mn0pKFxcZHsyfSkoXFxkezJ9KS9pZztcclxuICAgICAgICAgICAgICAgIGlmIChmcmFjdGlvblBvaW50UG9zaXRpb24gIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZnJhY3Rpb25SZXN1bHQgPSAxMDAwICogZnJhY3Rpb25QYXJ0O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWlsbGlzZWNvbmQgPSBNYXRoLmZsb29yKGZyYWN0aW9uUmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV3JvbmcgaW5wdXQgc3RyaW5nIGZvciBjb252ZXJzaW9uXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBwYXJzZXJBcnJheSA9IHBhcnNlci5leGVjKGRhdGVUaW1lU3RyaW5nKTtcclxuICAgICAgICBpZiAocGFyc2VyQXJyYXkgPT09IG51bGwpXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIldyb25nIGlucHV0IHN0cmluZyBmb3IgY29udmVyc2lvblwiKTtcclxuICAgICAgICBmb3IgKGxldCBqID0gMTsgaiA8IHBhcnNlckFycmF5Lmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAoaikge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMueWVhciA9IHBhcnNlSW50KHBhcnNlckFycmF5W2pdLCAxMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCA9IHBhcnNlSW50KHBhcnNlckFycmF5W2pdLCAxMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXkgPSBwYXJzZUludChwYXJzZXJBcnJheVtqXSwgMTApO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaG91ciA9IHBhcnNlSW50KHBhcnNlckFycmF5W2pdLCAxMCkgKyBob3VyRGlmZmVyZW5jZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNTpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1pbnV0ZSA9IHBhcnNlSW50KHBhcnNlckFycmF5W2pdLCAxMCkgKyBtaW51dGVEaWZmZXJlbmNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA2OlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vjb25kID0gcGFyc2VJbnQocGFyc2VyQXJyYXlbal0sIDEwKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV3JvbmcgaW5wdXQgc3RyaW5nIGZvciBjb252ZXJzaW9uXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc1VUQyA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgY29uc3QgdGVtcERhdGUgPSBuZXcgRGF0ZSh0aGlzLnllYXIsIHRoaXMubW9udGgsIHRoaXMuZGF5LCB0aGlzLmhvdXIsIHRoaXMubWludXRlLCB0aGlzLnNlY29uZCwgdGhpcy5taWxsaXNlY29uZCk7XHJcbiAgICAgICAgICAgIHRoaXMueWVhciA9IHRlbXBEYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XHJcbiAgICAgICAgICAgIHRoaXMubW9udGggPSB0ZW1wRGF0ZS5nZXRVVENNb250aCgpO1xyXG4gICAgICAgICAgICB0aGlzLmRheSA9IHRlbXBEYXRlLmdldFVUQ0RheSgpO1xyXG4gICAgICAgICAgICB0aGlzLmhvdXIgPSB0ZW1wRGF0ZS5nZXRVVENIb3VycygpO1xyXG4gICAgICAgICAgICB0aGlzLm1pbnV0ZSA9IHRlbXBEYXRlLmdldFVUQ01pbnV0ZXMoKTtcclxuICAgICAgICAgICAgdGhpcy5zZWNvbmQgPSB0ZW1wRGF0ZS5nZXRVVENTZWNvbmRzKCk7XHJcbiAgICAgICAgICAgIHRoaXMubWlsbGlzZWNvbmQgPSB0ZW1wRGF0ZS5nZXRVVENNaWxsaXNlY29uZHMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB0b1N0cmluZyhlbmNvZGluZyA9IFwiaXNvXCIpIHtcclxuICAgICAgICBpZiAoZW5jb2RpbmcgPT09IFwiaXNvXCIpIHtcclxuICAgICAgICAgICAgY29uc3Qgb3V0cHV0QXJyYXkgPSBbXTtcclxuICAgICAgICAgICAgb3V0cHV0QXJyYXkucHVzaChwdnV0aWxzLnBhZE51bWJlcih0aGlzLnllYXIsIDQpKTtcclxuICAgICAgICAgICAgb3V0cHV0QXJyYXkucHVzaChwdnV0aWxzLnBhZE51bWJlcih0aGlzLm1vbnRoLCAyKSk7XHJcbiAgICAgICAgICAgIG91dHB1dEFycmF5LnB1c2gocHZ1dGlscy5wYWROdW1iZXIodGhpcy5kYXksIDIpKTtcclxuICAgICAgICAgICAgb3V0cHV0QXJyYXkucHVzaChwdnV0aWxzLnBhZE51bWJlcih0aGlzLmhvdXIsIDIpKTtcclxuICAgICAgICAgICAgb3V0cHV0QXJyYXkucHVzaChwdnV0aWxzLnBhZE51bWJlcih0aGlzLm1pbnV0ZSwgMikpO1xyXG4gICAgICAgICAgICBvdXRwdXRBcnJheS5wdXNoKHB2dXRpbHMucGFkTnVtYmVyKHRoaXMuc2Vjb25kLCAyKSk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm1pbGxpc2Vjb25kICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXRBcnJheS5wdXNoKFwiLlwiKTtcclxuICAgICAgICAgICAgICAgIG91dHB1dEFycmF5LnB1c2gocHZ1dGlscy5wYWROdW1iZXIodGhpcy5taWxsaXNlY29uZCwgMykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG91dHB1dEFycmF5LnB1c2goXCJaXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0QXJyYXkuam9pbihcIlwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKGVuY29kaW5nKTtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgbWlsbGlzZWNvbmQ6IHRoaXMubWlsbGlzZWNvbmQsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5fYSQ1ID0gR2VuZXJhbGl6ZWRUaW1lO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLkdlbmVyYWxpemVkVGltZSA9IF9hJDU7XHJcbn0pKCk7XHJcbkdlbmVyYWxpemVkVGltZS5OQU1FID0gXCJHZW5lcmFsaXplZFRpbWVcIjtcblxudmFyIF9hJDQ7XHJcbmNsYXNzIERBVEUgZXh0ZW5kcyBVdGY4U3RyaW5nIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDMxO1xyXG4gICAgfVxyXG59XHJcbl9hJDQgPSBEQVRFO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLkRBVEUgPSBfYSQ0O1xyXG59KSgpO1xyXG5EQVRFLk5BTUUgPSBcIkRBVEVcIjtcblxudmFyIF9hJDM7XHJcbmNsYXNzIFRpbWVPZkRheSBleHRlbmRzIFV0ZjhTdHJpbmcge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMzI7XHJcbiAgICB9XHJcbn1cclxuX2EkMyA9IFRpbWVPZkRheTtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5UaW1lT2ZEYXkgPSBfYSQzO1xyXG59KSgpO1xyXG5UaW1lT2ZEYXkuTkFNRSA9IFwiVGltZU9mRGF5XCI7XG5cbnZhciBfYSQyO1xyXG5jbGFzcyBEYXRlVGltZSBleHRlbmRzIFV0ZjhTdHJpbmcge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMzM7XHJcbiAgICB9XHJcbn1cclxuX2EkMiA9IERhdGVUaW1lO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLkRhdGVUaW1lID0gX2EkMjtcclxufSkoKTtcclxuRGF0ZVRpbWUuTkFNRSA9IFwiRGF0ZVRpbWVcIjtcblxudmFyIF9hJDE7XHJcbmNsYXNzIER1cmF0aW9uIGV4dGVuZHMgVXRmOFN0cmluZyB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAzNDtcclxuICAgIH1cclxufVxyXG5fYSQxID0gRHVyYXRpb247XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuRHVyYXRpb24gPSBfYSQxO1xyXG59KSgpO1xyXG5EdXJhdGlvbi5OQU1FID0gXCJEdXJhdGlvblwiO1xuXG52YXIgX2E7XHJcbmNsYXNzIFRJTUUgZXh0ZW5kcyBVdGY4U3RyaW5nIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDE0O1xyXG4gICAgfVxyXG59XHJcbl9hID0gVElNRTtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5USU1FID0gX2E7XHJcbn0pKCk7XHJcblRJTUUuTkFNRSA9IFwiVElNRVwiO1xuXG5jbGFzcyBBbnkge1xyXG4gICAgY29uc3RydWN0b3IoeyBuYW1lID0gRU1QVFlfU1RSSU5HLCBvcHRpb25hbCA9IGZhbHNlLCB9ID0ge30pIHtcclxuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xyXG4gICAgICAgIHRoaXMub3B0aW9uYWwgPSBvcHRpb25hbDtcclxuICAgIH1cclxufVxuXG5jbGFzcyBDaG9pY2UgZXh0ZW5kcyBBbnkge1xyXG4gICAgY29uc3RydWN0b3IoeyB2YWx1ZSA9IFtdLCAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICAgIH1cclxufVxuXG5jbGFzcyBSZXBlYXRlZCBleHRlbmRzIEFueSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IHZhbHVlID0gbmV3IEFueSgpLCBsb2NhbCA9IGZhbHNlLCAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLmxvY2FsID0gbG9jYWw7XHJcbiAgICB9XHJcbn1cblxuY2xhc3MgUmF3RGF0YSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IGRhdGEgPSBFTVBUWV9WSUVXIH0gPSB7fSkge1xyXG4gICAgICAgIHRoaXMuZGF0YVZpZXcgPSBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShkYXRhKTtcclxuICAgIH1cclxuICAgIGdldCBkYXRhKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFWaWV3LnNsaWNlKCkuYnVmZmVyO1xyXG4gICAgfVxyXG4gICAgc2V0IGRhdGEodmFsdWUpIHtcclxuICAgICAgICB0aGlzLmRhdGFWaWV3ID0gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkodmFsdWUpO1xyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgZW5kTGVuZ3RoID0gaW5wdXRPZmZzZXQgKyBpbnB1dExlbmd0aDtcclxuICAgICAgICB0aGlzLmRhdGFWaWV3ID0gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoaW5wdXRCdWZmZXIpLnN1YmFycmF5KGlucHV0T2Zmc2V0LCBlbmRMZW5ndGgpO1xyXG4gICAgICAgIHJldHVybiBlbmRMZW5ndGg7XHJcbiAgICB9XHJcbiAgICB0b0JFUihzaXplT25seSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFWaWV3LnNsaWNlKCkuYnVmZmVyO1xyXG4gICAgfVxyXG59XG5cbmZ1bmN0aW9uIGNvbXBhcmVTY2hlbWEocm9vdCwgaW5wdXREYXRhLCBpbnB1dFNjaGVtYSkge1xyXG4gICAgaWYgKGlucHV0U2NoZW1hIGluc3RhbmNlb2YgQ2hvaWNlKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBpbnB1dFNjaGVtYS52YWx1ZS5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjb21wYXJlU2NoZW1hKHJvb3QsIGlucHV0RGF0YSwgaW5wdXRTY2hlbWEudmFsdWVbal0pO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0LnZlcmlmaWVkKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHZlcmlmaWVkOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdDogcm9vdFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvbnN0IF9yZXN1bHQgPSB7XHJcbiAgICAgICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICByZXN1bHQ6IHtcclxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogXCJXcm9uZyB2YWx1ZXMgZm9yIENob2ljZSB0eXBlXCJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS5oYXNPd25Qcm9wZXJ0eShOQU1FKSlcclxuICAgICAgICAgICAgICAgIF9yZXN1bHQubmFtZSA9IGlucHV0U2NoZW1hLm5hbWU7XHJcbiAgICAgICAgICAgIHJldHVybiBfcmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChpbnB1dFNjaGVtYSBpbnN0YW5jZW9mIEFueSkge1xyXG4gICAgICAgIGlmIChpbnB1dFNjaGVtYS5oYXNPd25Qcm9wZXJ0eShOQU1FKSlcclxuICAgICAgICAgICAgcm9vdFtpbnB1dFNjaGVtYS5uYW1lXSA9IGlucHV0RGF0YTtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogdHJ1ZSxcclxuICAgICAgICAgICAgcmVzdWx0OiByb290XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmICgocm9vdCBpbnN0YW5jZW9mIE9iamVjdCkgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHsgZXJyb3I6IFwiV3Jvbmcgcm9vdCBvYmplY3RcIiB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmICgoaW5wdXREYXRhIGluc3RhbmNlb2YgT2JqZWN0KSA9PT0gZmFsc2UpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogeyBlcnJvcjogXCJXcm9uZyBBU04uMSBkYXRhXCIgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoKGlucHV0U2NoZW1hIGluc3RhbmNlb2YgT2JqZWN0KSA9PT0gZmFsc2UpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogeyBlcnJvcjogXCJXcm9uZyBBU04uMSBzY2hlbWFcIiB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmICgoSURfQkxPQ0sgaW4gaW5wdXRTY2hlbWEpID09PSBmYWxzZSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiB7IGVycm9yOiBcIldyb25nIEFTTi4xIHNjaGVtYVwiIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKChGUk9NX0JFUiBpbiBpbnB1dFNjaGVtYS5pZEJsb2NrKSA9PT0gZmFsc2UpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogeyBlcnJvcjogXCJXcm9uZyBBU04uMSBzY2hlbWFcIiB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmICgoVE9fQkVSIGluIGlucHV0U2NoZW1hLmlkQmxvY2spID09PSBmYWxzZSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiB7IGVycm9yOiBcIldyb25nIEFTTi4xIHNjaGVtYVwiIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgY29uc3QgZW5jb2RlZElkID0gaW5wdXRTY2hlbWEuaWRCbG9jay50b0JFUihmYWxzZSk7XHJcbiAgICBpZiAoZW5jb2RlZElkLmJ5dGVMZW5ndGggPT09IDApIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogeyBlcnJvcjogXCJFcnJvciBlbmNvZGluZyBpZEJsb2NrIGZvciBBU04uMSBzY2hlbWFcIiB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGNvbnN0IGRlY29kZWRPZmZzZXQgPSBpbnB1dFNjaGVtYS5pZEJsb2NrLmZyb21CRVIoZW5jb2RlZElkLCAwLCBlbmNvZGVkSWQuYnl0ZUxlbmd0aCk7XHJcbiAgICBpZiAoZGVjb2RlZE9mZnNldCA9PT0gLTEpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogeyBlcnJvcjogXCJFcnJvciBkZWNvZGluZyBpZEJsb2NrIGZvciBBU04uMSBzY2hlbWFcIiB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmIChpbnB1dFNjaGVtYS5pZEJsb2NrLmhhc093blByb3BlcnR5KFRBR19DTEFTUykgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHsgZXJyb3I6IFwiV3JvbmcgQVNOLjEgc2NoZW1hXCIgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoaW5wdXRTY2hlbWEuaWRCbG9jay50YWdDbGFzcyAhPT0gaW5wdXREYXRhLmlkQmxvY2sudGFnQ2xhc3MpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogcm9vdFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoaW5wdXRTY2hlbWEuaWRCbG9jay5oYXNPd25Qcm9wZXJ0eShUQUdfTlVNQkVSKSA9PT0gZmFsc2UpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogeyBlcnJvcjogXCJXcm9uZyBBU04uMSBzY2hlbWFcIiB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmIChpbnB1dFNjaGVtYS5pZEJsb2NrLnRhZ051bWJlciAhPT0gaW5wdXREYXRhLmlkQmxvY2sudGFnTnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHJvb3RcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0U2NoZW1hLmlkQmxvY2suaGFzT3duUHJvcGVydHkoSVNfQ09OU1RSVUNURUQpID09PSBmYWxzZSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiB7IGVycm9yOiBcIldyb25nIEFTTi4xIHNjaGVtYVwiIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0U2NoZW1hLmlkQmxvY2suaXNDb25zdHJ1Y3RlZCAhPT0gaW5wdXREYXRhLmlkQmxvY2suaXNDb25zdHJ1Y3RlZCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiByb290XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmICghKElTX0hFWF9PTkxZIGluIGlucHV0U2NoZW1hLmlkQmxvY2spKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHsgZXJyb3I6IFwiV3JvbmcgQVNOLjEgc2NoZW1hXCIgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoaW5wdXRTY2hlbWEuaWRCbG9jay5pc0hleE9ubHkgIT09IGlucHV0RGF0YS5pZEJsb2NrLmlzSGV4T25seSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiByb290XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmIChpbnB1dFNjaGVtYS5pZEJsb2NrLmlzSGV4T25seSkge1xyXG4gICAgICAgIGlmICgoVkFMVUVfSEVYX1ZJRVcgaW4gaW5wdXRTY2hlbWEuaWRCbG9jaykgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICByZXN1bHQ6IHsgZXJyb3I6IFwiV3JvbmcgQVNOLjEgc2NoZW1hXCIgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzY2hlbWFWaWV3ID0gaW5wdXRTY2hlbWEuaWRCbG9jay52YWx1ZUhleFZpZXc7XHJcbiAgICAgICAgY29uc3QgYXNuMVZpZXcgPSBpbnB1dERhdGEuaWRCbG9jay52YWx1ZUhleFZpZXc7XHJcbiAgICAgICAgaWYgKHNjaGVtYVZpZXcubGVuZ3RoICE9PSBhc24xVmlldy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHJlc3VsdDogcm9vdFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNjaGVtYVZpZXcubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHNjaGVtYVZpZXdbaV0gIT09IGFzbjFWaWV3WzFdKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IHJvb3RcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoaW5wdXRTY2hlbWEubmFtZSkge1xyXG4gICAgICAgIGlucHV0U2NoZW1hLm5hbWUgPSBpbnB1dFNjaGVtYS5uYW1lLnJlcGxhY2UoL15cXHMrfFxccyskL2csIEVNUFRZX1NUUklORyk7XHJcbiAgICAgICAgaWYgKGlucHV0U2NoZW1hLm5hbWUpXHJcbiAgICAgICAgICAgIHJvb3RbaW5wdXRTY2hlbWEubmFtZV0gPSBpbnB1dERhdGE7XHJcbiAgICB9XHJcbiAgICBpZiAoaW5wdXRTY2hlbWEgaW5zdGFuY2VvZiB0eXBlU3RvcmUuQ29uc3RydWN0ZWQpIHtcclxuICAgICAgICBsZXQgYWRtaXNzaW9uID0gMDtcclxuICAgICAgICBsZXQgcmVzdWx0ID0ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDoge1xyXG4gICAgICAgICAgICAgICAgZXJyb3I6IFwiVW5rbm93biBlcnJvclwiLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBsZXQgbWF4TGVuZ3RoID0gaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgaWYgKG1heExlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWVbMF0gaW5zdGFuY2VvZiBSZXBlYXRlZCkge1xyXG4gICAgICAgICAgICAgICAgbWF4TGVuZ3RoID0gaW5wdXREYXRhLnZhbHVlQmxvY2sudmFsdWUubGVuZ3RoO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtYXhMZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHZlcmlmaWVkOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0OiByb290XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgoaW5wdXREYXRhLnZhbHVlQmxvY2sudmFsdWUubGVuZ3RoID09PSAwKSAmJlxyXG4gICAgICAgICAgICAoaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZS5sZW5ndGggIT09IDApKSB7XHJcbiAgICAgICAgICAgIGxldCBfb3B0aW9uYWwgPSB0cnVlO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWUubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgICAgICBfb3B0aW9uYWwgPSBfb3B0aW9uYWwgJiYgKGlucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWVbaV0ub3B0aW9uYWwgfHwgZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAoX29wdGlvbmFsKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHZlcmlmaWVkOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdDogcm9vdFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgaW5wdXRTY2hlbWEubmFtZSA9IGlucHV0U2NoZW1hLm5hbWUucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgRU1QVFlfU1RSSU5HKTtcclxuICAgICAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS5uYW1lKVxyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByb290W2lucHV0U2NoZW1hLm5hbWVdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJvb3QuZXJyb3IgPSBcIkluY29uc2lzdGVudCBvYmplY3QgbGVuZ3RoXCI7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICByZXN1bHQ6IHJvb3RcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhMZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoKGkgLSBhZG1pc3Npb24pID49IGlucHV0RGF0YS52YWx1ZUJsb2NrLnZhbHVlLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWVbaV0ub3B0aW9uYWwgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgX3Jlc3VsdCA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IHJvb3RcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIHJvb3QuZXJyb3IgPSBcIkluY29uc2lzdGVudCBsZW5ndGggYmV0d2VlbiBBU04uMSBkYXRhIGFuZCBzY2hlbWFcIjtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFNjaGVtYS5uYW1lID0gaW5wdXRTY2hlbWEubmFtZS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCBFTVBUWV9TVFJJTkcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJvb3RbaW5wdXRTY2hlbWEubmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVzdWx0Lm5hbWUgPSBpbnB1dFNjaGVtYS5uYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWVbMF0gaW5zdGFuY2VvZiBSZXBlYXRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvbXBhcmVTY2hlbWEocm9vdCwgaW5wdXREYXRhLnZhbHVlQmxvY2sudmFsdWVbaV0sIGlucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWVbMF0udmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQudmVyaWZpZWQgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlWzBdLm9wdGlvbmFsKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRtaXNzaW9uKys7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFNjaGVtYS5uYW1lID0gaW5wdXRTY2hlbWEubmFtZS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCBFTVBUWV9TVFJJTkcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS5uYW1lKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcm9vdFtpbnB1dFNjaGVtYS5uYW1lXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKChOQU1FIGluIGlucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWVbMF0pICYmIChpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlWzBdLm5hbWUubGVuZ3RoID4gMCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFycmF5Um9vdCA9IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKExPQ0FMIGluIGlucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWVbMF0pICYmIChpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlWzBdLmxvY2FsKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5Um9vdCA9IGlucHV0RGF0YTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlSb290ID0gcm9vdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhcnJheVJvb3RbaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVswXS5uYW1lXSA9PT0gXCJ1bmRlZmluZWRcIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5Um9vdFtpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlWzBdLm5hbWVdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5Um9vdFtpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlWzBdLm5hbWVdLnB1c2goaW5wdXREYXRhLnZhbHVlQmxvY2sudmFsdWVbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvbXBhcmVTY2hlbWEocm9vdCwgaW5wdXREYXRhLnZhbHVlQmxvY2sudmFsdWVbaSAtIGFkbWlzc2lvbl0sIGlucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWVbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQudmVyaWZpZWQgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlW2ldLm9wdGlvbmFsKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRtaXNzaW9uKys7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFNjaGVtYS5uYW1lID0gaW5wdXRTY2hlbWEubmFtZS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCBFTVBUWV9TVFJJTkcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS5uYW1lKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcm9vdFtpbnB1dFNjaGVtYS5uYW1lXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlc3VsdC52ZXJpZmllZCA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgY29uc3QgX3Jlc3VsdCA9IHtcclxuICAgICAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHJlc3VsdDogcm9vdFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgaW5wdXRTY2hlbWEubmFtZSA9IGlucHV0U2NoZW1hLm5hbWUucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgRU1QVFlfU1RSSU5HKTtcclxuICAgICAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJvb3RbaW5wdXRTY2hlbWEubmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgX3Jlc3VsdC5uYW1lID0gaW5wdXRTY2hlbWEubmFtZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gX3Jlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IHRydWUsXHJcbiAgICAgICAgICAgIHJlc3VsdDogcm9vdFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoaW5wdXRTY2hlbWEucHJpbWl0aXZlU2NoZW1hICYmXHJcbiAgICAgICAgKFZBTFVFX0hFWF9WSUVXIGluIGlucHV0RGF0YS52YWx1ZUJsb2NrKSkge1xyXG4gICAgICAgIGNvbnN0IGFzbjEgPSBsb2NhbEZyb21CRVIoaW5wdXREYXRhLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3KTtcclxuICAgICAgICBpZiAoYXNuMS5vZmZzZXQgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IF9yZXN1bHQgPSB7XHJcbiAgICAgICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICByZXN1bHQ6IGFzbjEucmVzdWx0XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBpbnB1dFNjaGVtYS5uYW1lID0gaW5wdXRTY2hlbWEubmFtZS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCBFTVBUWV9TVFJJTkcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcm9vdFtpbnB1dFNjaGVtYS5uYW1lXTtcclxuICAgICAgICAgICAgICAgICAgICBfcmVzdWx0Lm5hbWUgPSBpbnB1dFNjaGVtYS5uYW1lO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBfcmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY29tcGFyZVNjaGVtYShyb290LCBhc24xLnJlc3VsdCwgaW5wdXRTY2hlbWEucHJpbWl0aXZlU2NoZW1hKTtcclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgdmVyaWZpZWQ6IHRydWUsXHJcbiAgICAgICAgcmVzdWx0OiByb290XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIHZlcmlmeVNjaGVtYShpbnB1dEJ1ZmZlciwgaW5wdXRTY2hlbWEpIHtcclxuICAgIGlmICgoaW5wdXRTY2hlbWEgaW5zdGFuY2VvZiBPYmplY3QpID09PSBmYWxzZSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiB7IGVycm9yOiBcIldyb25nIEFTTi4xIHNjaGVtYSB0eXBlXCIgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBjb25zdCBhc24xID0gbG9jYWxGcm9tQkVSKHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGlucHV0QnVmZmVyKSk7XHJcbiAgICBpZiAoYXNuMS5vZmZzZXQgPT09IC0xKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IGFzbjEucmVzdWx0XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIHJldHVybiBjb21wYXJlU2NoZW1hKGFzbjEucmVzdWx0LCBhc24xLnJlc3VsdCwgaW5wdXRTY2hlbWEpO1xyXG59XG5cbmV4cG9ydCB7IEFueSwgQmFzZUJsb2NrLCBCYXNlU3RyaW5nQmxvY2ssIEJpdFN0cmluZywgQm1wU3RyaW5nLCBCb29sZWFuLCBDaGFyYWN0ZXJTdHJpbmcsIENob2ljZSwgQ29uc3RydWN0ZWQsIERBVEUsIERhdGVUaW1lLCBEdXJhdGlvbiwgRW5kT2ZDb250ZW50LCBFbnVtZXJhdGVkLCBHZW5lcmFsU3RyaW5nLCBHZW5lcmFsaXplZFRpbWUsIEdyYXBoaWNTdHJpbmcsIEhleEJsb2NrLCBJQTVTdHJpbmcsIEludGVnZXIsIE51bGwsIE51bWVyaWNTdHJpbmcsIE9iamVjdElkZW50aWZpZXIsIE9jdGV0U3RyaW5nLCBQcmltaXRpdmUsIFByaW50YWJsZVN0cmluZywgUmF3RGF0YSwgUmVsYXRpdmVPYmplY3RJZGVudGlmaWVyLCBSZXBlYXRlZCwgU2VxdWVuY2UsIFNldCwgVElNRSwgVGVsZXRleFN0cmluZywgVGltZU9mRGF5LCBVVENUaW1lLCBVbml2ZXJzYWxTdHJpbmcsIFV0ZjhTdHJpbmcsIFZhbHVlQmxvY2ssIFZpZGVvdGV4U3RyaW5nLCBWaWV3V3JpdGVyLCBWaXNpYmxlU3RyaW5nLCBjb21wYXJlU2NoZW1hLCBmcm9tQkVSLCB2ZXJpZnlTY2hlbWEgfTtcbiIsICJleHBvcnQgdmFyIEFzblR5cGVUeXBlcztcbihmdW5jdGlvbiAoQXNuVHlwZVR5cGVzKSB7XG4gICAgQXNuVHlwZVR5cGVzW0FzblR5cGVUeXBlc1tcIlNlcXVlbmNlXCJdID0gMF0gPSBcIlNlcXVlbmNlXCI7XG4gICAgQXNuVHlwZVR5cGVzW0FzblR5cGVUeXBlc1tcIlNldFwiXSA9IDFdID0gXCJTZXRcIjtcbiAgICBBc25UeXBlVHlwZXNbQXNuVHlwZVR5cGVzW1wiQ2hvaWNlXCJdID0gMl0gPSBcIkNob2ljZVwiO1xufSkoQXNuVHlwZVR5cGVzIHx8IChBc25UeXBlVHlwZXMgPSB7fSkpO1xuZXhwb3J0IHZhciBBc25Qcm9wVHlwZXM7XG4oZnVuY3Rpb24gKEFzblByb3BUeXBlcykge1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJBbnlcIl0gPSAxXSA9IFwiQW55XCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIkJvb2xlYW5cIl0gPSAyXSA9IFwiQm9vbGVhblwiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJPY3RldFN0cmluZ1wiXSA9IDNdID0gXCJPY3RldFN0cmluZ1wiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJCaXRTdHJpbmdcIl0gPSA0XSA9IFwiQml0U3RyaW5nXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIkludGVnZXJcIl0gPSA1XSA9IFwiSW50ZWdlclwiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJFbnVtZXJhdGVkXCJdID0gNl0gPSBcIkVudW1lcmF0ZWRcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiT2JqZWN0SWRlbnRpZmllclwiXSA9IDddID0gXCJPYmplY3RJZGVudGlmaWVyXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIlV0ZjhTdHJpbmdcIl0gPSA4XSA9IFwiVXRmOFN0cmluZ1wiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJCbXBTdHJpbmdcIl0gPSA5XSA9IFwiQm1wU3RyaW5nXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIlVuaXZlcnNhbFN0cmluZ1wiXSA9IDEwXSA9IFwiVW5pdmVyc2FsU3RyaW5nXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIk51bWVyaWNTdHJpbmdcIl0gPSAxMV0gPSBcIk51bWVyaWNTdHJpbmdcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiUHJpbnRhYmxlU3RyaW5nXCJdID0gMTJdID0gXCJQcmludGFibGVTdHJpbmdcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiVGVsZXRleFN0cmluZ1wiXSA9IDEzXSA9IFwiVGVsZXRleFN0cmluZ1wiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJWaWRlb3RleFN0cmluZ1wiXSA9IDE0XSA9IFwiVmlkZW90ZXhTdHJpbmdcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiSUE1U3RyaW5nXCJdID0gMTVdID0gXCJJQTVTdHJpbmdcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiR3JhcGhpY1N0cmluZ1wiXSA9IDE2XSA9IFwiR3JhcGhpY1N0cmluZ1wiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJWaXNpYmxlU3RyaW5nXCJdID0gMTddID0gXCJWaXNpYmxlU3RyaW5nXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIkdlbmVyYWxTdHJpbmdcIl0gPSAxOF0gPSBcIkdlbmVyYWxTdHJpbmdcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiQ2hhcmFjdGVyU3RyaW5nXCJdID0gMTldID0gXCJDaGFyYWN0ZXJTdHJpbmdcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiVVRDVGltZVwiXSA9IDIwXSA9IFwiVVRDVGltZVwiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJHZW5lcmFsaXplZFRpbWVcIl0gPSAyMV0gPSBcIkdlbmVyYWxpemVkVGltZVwiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJEQVRFXCJdID0gMjJdID0gXCJEQVRFXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIlRpbWVPZkRheVwiXSA9IDIzXSA9IFwiVGltZU9mRGF5XCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIkRhdGVUaW1lXCJdID0gMjRdID0gXCJEYXRlVGltZVwiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJEdXJhdGlvblwiXSA9IDI1XSA9IFwiRHVyYXRpb25cIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiVElNRVwiXSA9IDI2XSA9IFwiVElNRVwiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJOdWxsXCJdID0gMjddID0gXCJOdWxsXCI7XG59KShBc25Qcm9wVHlwZXMgfHwgKEFzblByb3BUeXBlcyA9IHt9KSk7XG4iLCAiaW1wb3J0ICogYXMgYXNuMWpzIGZyb20gXCJhc24xanNcIjtcbmltcG9ydCB7IEJ1ZmZlclNvdXJjZUNvbnZlcnRlciB9IGZyb20gXCJwdnRzdXRpbHNcIjtcbmV4cG9ydCBjbGFzcyBCaXRTdHJpbmcge1xuICAgIGNvbnN0cnVjdG9yKHBhcmFtcywgdW51c2VkQml0cyA9IDApIHtcbiAgICAgICAgdGhpcy51bnVzZWRCaXRzID0gMDtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgaWYgKHBhcmFtcykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXJhbXMgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZyb21OdW1iZXIocGFyYW1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKEJ1ZmZlclNvdXJjZUNvbnZlcnRlci5pc0J1ZmZlclNvdXJjZShwYXJhbXMpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51bnVzZWRCaXRzID0gdW51c2VkQml0cztcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIocGFyYW1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIlVuc3VwcG9ydGVkIHR5cGUgb2YgJ3BhcmFtcycgYXJndW1lbnQgZm9yIEJpdFN0cmluZ1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBmcm9tQVNOKGFzbikge1xuICAgICAgICBpZiAoIShhc24gaW5zdGFuY2VvZiBhc24xanMuQml0U3RyaW5nKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50ICdhc24nIGlzIG5vdCBpbnN0YW5jZSBvZiBBU04uMSBCaXRTdHJpbmdcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51bnVzZWRCaXRzID0gYXNuLnZhbHVlQmxvY2sudW51c2VkQml0cztcbiAgICAgICAgdGhpcy52YWx1ZSA9IGFzbi52YWx1ZUJsb2NrLnZhbHVlSGV4O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgdG9BU04oKSB7XG4gICAgICAgIHJldHVybiBuZXcgYXNuMWpzLkJpdFN0cmluZyh7IHVudXNlZEJpdHM6IHRoaXMudW51c2VkQml0cywgdmFsdWVIZXg6IHRoaXMudmFsdWUgfSk7XG4gICAgfVxuICAgIHRvU2NoZW1hKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBhc24xanMuQml0U3RyaW5nKHsgbmFtZSB9KTtcbiAgICB9XG4gICAgdG9OdW1iZXIoKSB7XG4gICAgICAgIGxldCByZXMgPSBcIlwiO1xuICAgICAgICBjb25zdCB1aW50QXJyYXkgPSBuZXcgVWludDhBcnJheSh0aGlzLnZhbHVlKTtcbiAgICAgICAgZm9yIChjb25zdCBvY3RldCBvZiB1aW50QXJyYXkpIHtcbiAgICAgICAgICAgIHJlcyArPSBvY3RldC50b1N0cmluZygyKS5wYWRTdGFydCg4LCBcIjBcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmVzID0gcmVzLnNwbGl0KFwiXCIpLnJldmVyc2UoKS5qb2luKFwiXCIpO1xuICAgICAgICBpZiAodGhpcy51bnVzZWRCaXRzKSB7XG4gICAgICAgICAgICByZXMgPSByZXMuc2xpY2UodGhpcy51bnVzZWRCaXRzKS5wYWRTdGFydCh0aGlzLnVudXNlZEJpdHMsIFwiMFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFyc2VJbnQocmVzLCAyKTtcbiAgICB9XG4gICAgZnJvbU51bWJlcih2YWx1ZSkge1xuICAgICAgICBsZXQgYml0cyA9IHZhbHVlLnRvU3RyaW5nKDIpO1xuICAgICAgICBjb25zdCBvY3RldFNpemUgPSAoYml0cy5sZW5ndGggKyA3KSA+PiAzO1xuICAgICAgICB0aGlzLnVudXNlZEJpdHMgPSAob2N0ZXRTaXplIDw8IDMpIC0gYml0cy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IG9jdGV0cyA9IG5ldyBVaW50OEFycmF5KG9jdGV0U2l6ZSk7XG4gICAgICAgIGJpdHMgPSBiaXRzLnBhZFN0YXJ0KG9jdGV0U2l6ZSA8PCAzLCBcIjBcIikuc3BsaXQoXCJcIikucmV2ZXJzZSgpLmpvaW4oXCJcIik7XG4gICAgICAgIGxldCBpbmRleCA9IDA7XG4gICAgICAgIHdoaWxlIChpbmRleCA8IG9jdGV0U2l6ZSkge1xuICAgICAgICAgICAgb2N0ZXRzW2luZGV4XSA9IHBhcnNlSW50KGJpdHMuc2xpY2UoaW5kZXggPDwgMywgKGluZGV4IDw8IDMpICsgOCksIDIpO1xuICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhbHVlID0gb2N0ZXRzLmJ1ZmZlcjtcbiAgICB9XG59XG4iLCAiaW1wb3J0ICogYXMgYXNuMWpzIGZyb20gXCJhc24xanNcIjtcbmltcG9ydCB7IEJ1ZmZlclNvdXJjZUNvbnZlcnRlciB9IGZyb20gXCJwdnRzdXRpbHNcIjtcbmV4cG9ydCBjbGFzcyBPY3RldFN0cmluZyB7XG4gICAgZ2V0IGJ5dGVMZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJ1ZmZlci5ieXRlTGVuZ3RoO1xuICAgIH1cbiAgICBnZXQgYnl0ZU9mZnNldCgpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKHBhcmFtKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcGFyYW0gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHRoaXMuYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKHBhcmFtKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChCdWZmZXJTb3VyY2VDb252ZXJ0ZXIuaXNCdWZmZXJTb3VyY2UocGFyYW0pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5idWZmZXIgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihwYXJhbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHBhcmFtKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkocGFyYW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5idWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnJvbUFTTihhc24pIHtcbiAgICAgICAgaWYgKCEoYXNuIGluc3RhbmNlb2YgYXNuMWpzLk9jdGV0U3RyaW5nKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50ICdhc24nIGlzIG5vdCBpbnN0YW5jZSBvZiBBU04uMSBPY3RldFN0cmluZ1wiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJ1ZmZlciA9IGFzbi52YWx1ZUJsb2NrLnZhbHVlSGV4O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgdG9BU04oKSB7XG4gICAgICAgIHJldHVybiBuZXcgYXNuMWpzLk9jdGV0U3RyaW5nKHsgdmFsdWVIZXg6IHRoaXMuYnVmZmVyIH0pO1xuICAgIH1cbiAgICB0b1NjaGVtYShuYW1lKSB7XG4gICAgICAgIHJldHVybiBuZXcgYXNuMWpzLk9jdGV0U3RyaW5nKHsgbmFtZSB9KTtcbiAgICB9XG59XG4iLCAiZXhwb3J0ICogZnJvbSBcIi4vYml0X3N0cmluZ1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vb2N0ZXRfc3RyaW5nXCI7XG4iLCAiaW1wb3J0ICogYXMgYXNuMWpzIGZyb20gXCJhc24xanNcIjtcbmltcG9ydCB7IEFzblByb3BUeXBlcyB9IGZyb20gXCIuL2VudW1zXCI7XG5pbXBvcnQgeyBPY3RldFN0cmluZyB9IGZyb20gXCIuL3R5cGVzL2luZGV4XCI7XG5leHBvcnQgY29uc3QgQXNuQW55Q29udmVydGVyID0ge1xuICAgIGZyb21BU046ICh2YWx1ZSkgPT4gdmFsdWUgaW5zdGFuY2VvZiBhc24xanMuTnVsbCA/IG51bGwgOiB2YWx1ZS52YWx1ZUJlZm9yZURlY29kZVZpZXcsXG4gICAgdG9BU046ICh2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgYXNuMWpzLk51bGwoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzY2hlbWEgPSBhc24xanMuZnJvbUJFUih2YWx1ZSk7XG4gICAgICAgIGlmIChzY2hlbWEucmVzdWx0LmVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Ioc2NoZW1hLnJlc3VsdC5lcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNjaGVtYS5yZXN1bHQ7XG4gICAgfSxcbn07XG5leHBvcnQgY29uc3QgQXNuSW50ZWdlckNvbnZlcnRlciA9IHtcbiAgICBmcm9tQVNOOiAodmFsdWUpID0+IHZhbHVlLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3LmJ5dGVMZW5ndGggPj0gNFxuICAgICAgICA/IHZhbHVlLnZhbHVlQmxvY2sudG9TdHJpbmcoKVxuICAgICAgICA6IHZhbHVlLnZhbHVlQmxvY2sudmFsdWVEZWMsXG4gICAgdG9BU046ICh2YWx1ZSkgPT4gbmV3IGFzbjFqcy5JbnRlZ2VyKHsgdmFsdWU6ICt2YWx1ZSB9KSxcbn07XG5leHBvcnQgY29uc3QgQXNuRW51bWVyYXRlZENvbnZlcnRlciA9IHtcbiAgICBmcm9tQVNOOiAodmFsdWUpID0+IHZhbHVlLnZhbHVlQmxvY2sudmFsdWVEZWMsXG4gICAgdG9BU046ICh2YWx1ZSkgPT4gbmV3IGFzbjFqcy5FbnVtZXJhdGVkKHsgdmFsdWUgfSksXG59O1xuZXhwb3J0IGNvbnN0IEFzbkludGVnZXJBcnJheUJ1ZmZlckNvbnZlcnRlciA9IHtcbiAgICBmcm9tQVNOOiAodmFsdWUpID0+IHZhbHVlLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3LFxuICAgIHRvQVNOOiAodmFsdWUpID0+IG5ldyBhc24xanMuSW50ZWdlcih7IHZhbHVlSGV4OiB2YWx1ZSB9KSxcbn07XG5leHBvcnQgY29uc3QgQXNuSW50ZWdlckJpZ0ludENvbnZlcnRlciA9IHtcbiAgICBmcm9tQVNOOiAodmFsdWUpID0+IHZhbHVlLnRvQmlnSW50KCksXG4gICAgdG9BU046ICh2YWx1ZSkgPT4gYXNuMWpzLkludGVnZXIuZnJvbUJpZ0ludCh2YWx1ZSksXG59O1xuZXhwb3J0IGNvbnN0IEFzbkJpdFN0cmluZ0NvbnZlcnRlciA9IHtcbiAgICBmcm9tQVNOOiAodmFsdWUpID0+IHZhbHVlLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3LFxuICAgIHRvQVNOOiAodmFsdWUpID0+IG5ldyBhc24xanMuQml0U3RyaW5nKHsgdmFsdWVIZXg6IHZhbHVlIH0pLFxufTtcbmV4cG9ydCBjb25zdCBBc25PYmplY3RJZGVudGlmaWVyQ29udmVydGVyID0ge1xuICAgIGZyb21BU046ICh2YWx1ZSkgPT4gdmFsdWUudmFsdWVCbG9jay50b1N0cmluZygpLFxuICAgIHRvQVNOOiAodmFsdWUpID0+IG5ldyBhc24xanMuT2JqZWN0SWRlbnRpZmllcih7IHZhbHVlIH0pLFxufTtcbmV4cG9ydCBjb25zdCBBc25Cb29sZWFuQ29udmVydGVyID0ge1xuICAgIGZyb21BU046ICh2YWx1ZSkgPT4gdmFsdWUudmFsdWVCbG9jay52YWx1ZSxcbiAgICB0b0FTTjogKHZhbHVlKSA9PiBuZXcgYXNuMWpzLkJvb2xlYW4oeyB2YWx1ZSB9KSxcbn07XG5leHBvcnQgY29uc3QgQXNuT2N0ZXRTdHJpbmdDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKHZhbHVlKSA9PiB2YWx1ZS52YWx1ZUJsb2NrLnZhbHVlSGV4VmlldyxcbiAgICB0b0FTTjogKHZhbHVlKSA9PiBuZXcgYXNuMWpzLk9jdGV0U3RyaW5nKHsgdmFsdWVIZXg6IHZhbHVlIH0pLFxufTtcbmV4cG9ydCBjb25zdCBBc25Db25zdHJ1Y3RlZE9jdGV0U3RyaW5nQ29udmVydGVyID0ge1xuICAgIGZyb21BU046ICh2YWx1ZSkgPT4gbmV3IE9jdGV0U3RyaW5nKHZhbHVlLmdldFZhbHVlKCkpLFxuICAgIHRvQVNOOiAodmFsdWUpID0+IHZhbHVlLnRvQVNOKCksXG59O1xuZnVuY3Rpb24gY3JlYXRlU3RyaW5nQ29udmVydGVyKEFzbjFUeXBlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZnJvbUFTTjogKHZhbHVlKSA9PiB2YWx1ZS52YWx1ZUJsb2NrLnZhbHVlLFxuICAgICAgICB0b0FTTjogKHZhbHVlKSA9PiBuZXcgQXNuMVR5cGUoeyB2YWx1ZSB9KSxcbiAgICB9O1xufVxuZXhwb3J0IGNvbnN0IEFzblV0ZjhTdHJpbmdDb252ZXJ0ZXIgPSBjcmVhdGVTdHJpbmdDb252ZXJ0ZXIoYXNuMWpzLlV0ZjhTdHJpbmcpO1xuZXhwb3J0IGNvbnN0IEFzbkJtcFN0cmluZ0NvbnZlcnRlciA9IGNyZWF0ZVN0cmluZ0NvbnZlcnRlcihhc24xanMuQm1wU3RyaW5nKTtcbmV4cG9ydCBjb25zdCBBc25Vbml2ZXJzYWxTdHJpbmdDb252ZXJ0ZXIgPSBjcmVhdGVTdHJpbmdDb252ZXJ0ZXIoYXNuMWpzLlVuaXZlcnNhbFN0cmluZyk7XG5leHBvcnQgY29uc3QgQXNuTnVtZXJpY1N0cmluZ0NvbnZlcnRlciA9IGNyZWF0ZVN0cmluZ0NvbnZlcnRlcihhc24xanMuTnVtZXJpY1N0cmluZyk7XG5leHBvcnQgY29uc3QgQXNuUHJpbnRhYmxlU3RyaW5nQ29udmVydGVyID0gY3JlYXRlU3RyaW5nQ29udmVydGVyKGFzbjFqcy5QcmludGFibGVTdHJpbmcpO1xuZXhwb3J0IGNvbnN0IEFzblRlbGV0ZXhTdHJpbmdDb252ZXJ0ZXIgPSBjcmVhdGVTdHJpbmdDb252ZXJ0ZXIoYXNuMWpzLlRlbGV0ZXhTdHJpbmcpO1xuZXhwb3J0IGNvbnN0IEFzblZpZGVvdGV4U3RyaW5nQ29udmVydGVyID0gY3JlYXRlU3RyaW5nQ29udmVydGVyKGFzbjFqcy5WaWRlb3RleFN0cmluZyk7XG5leHBvcnQgY29uc3QgQXNuSUE1U3RyaW5nQ29udmVydGVyID0gY3JlYXRlU3RyaW5nQ29udmVydGVyKGFzbjFqcy5JQTVTdHJpbmcpO1xuZXhwb3J0IGNvbnN0IEFzbkdyYXBoaWNTdHJpbmdDb252ZXJ0ZXIgPSBjcmVhdGVTdHJpbmdDb252ZXJ0ZXIoYXNuMWpzLkdyYXBoaWNTdHJpbmcpO1xuZXhwb3J0IGNvbnN0IEFzblZpc2libGVTdHJpbmdDb252ZXJ0ZXIgPSBjcmVhdGVTdHJpbmdDb252ZXJ0ZXIoYXNuMWpzLlZpc2libGVTdHJpbmcpO1xuZXhwb3J0IGNvbnN0IEFzbkdlbmVyYWxTdHJpbmdDb252ZXJ0ZXIgPSBjcmVhdGVTdHJpbmdDb252ZXJ0ZXIoYXNuMWpzLkdlbmVyYWxTdHJpbmcpO1xuZXhwb3J0IGNvbnN0IEFzbkNoYXJhY3RlclN0cmluZ0NvbnZlcnRlciA9IGNyZWF0ZVN0cmluZ0NvbnZlcnRlcihhc24xanMuQ2hhcmFjdGVyU3RyaW5nKTtcbmV4cG9ydCBjb25zdCBBc25VVENUaW1lQ29udmVydGVyID0ge1xuICAgIGZyb21BU046ICh2YWx1ZSkgPT4gdmFsdWUudG9EYXRlKCksXG4gICAgdG9BU046ICh2YWx1ZSkgPT4gbmV3IGFzbjFqcy5VVENUaW1lKHsgdmFsdWVEYXRlOiB2YWx1ZSB9KSxcbn07XG5leHBvcnQgY29uc3QgQXNuR2VuZXJhbGl6ZWRUaW1lQ29udmVydGVyID0ge1xuICAgIGZyb21BU046ICh2YWx1ZSkgPT4gdmFsdWUudG9EYXRlKCksXG4gICAgdG9BU046ICh2YWx1ZSkgPT4gbmV3IGFzbjFqcy5HZW5lcmFsaXplZFRpbWUoeyB2YWx1ZURhdGU6IHZhbHVlIH0pLFxufTtcbmV4cG9ydCBjb25zdCBBc25OdWxsQ29udmVydGVyID0ge1xuICAgIGZyb21BU046ICgpID0+IG51bGwsXG4gICAgdG9BU046ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBhc24xanMuTnVsbCgpO1xuICAgIH0sXG59O1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRDb252ZXJ0ZXIodHlwZSkge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5Bbnk6XG4gICAgICAgICAgICByZXR1cm4gQXNuQW55Q29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5CaXRTdHJpbmc6XG4gICAgICAgICAgICByZXR1cm4gQXNuQml0U3RyaW5nQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5CbXBTdHJpbmc6XG4gICAgICAgICAgICByZXR1cm4gQXNuQm1wU3RyaW5nQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5Cb29sZWFuOlxuICAgICAgICAgICAgcmV0dXJuIEFzbkJvb2xlYW5Db252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLkNoYXJhY3RlclN0cmluZzpcbiAgICAgICAgICAgIHJldHVybiBBc25DaGFyYWN0ZXJTdHJpbmdDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLkVudW1lcmF0ZWQ6XG4gICAgICAgICAgICByZXR1cm4gQXNuRW51bWVyYXRlZENvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuR2VuZXJhbFN0cmluZzpcbiAgICAgICAgICAgIHJldHVybiBBc25HZW5lcmFsU3RyaW5nQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5HZW5lcmFsaXplZFRpbWU6XG4gICAgICAgICAgICByZXR1cm4gQXNuR2VuZXJhbGl6ZWRUaW1lQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5HcmFwaGljU3RyaW5nOlxuICAgICAgICAgICAgcmV0dXJuIEFzbkdyYXBoaWNTdHJpbmdDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLklBNVN0cmluZzpcbiAgICAgICAgICAgIHJldHVybiBBc25JQTVTdHJpbmdDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLkludGVnZXI6XG4gICAgICAgICAgICByZXR1cm4gQXNuSW50ZWdlckNvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuTnVsbDpcbiAgICAgICAgICAgIHJldHVybiBBc25OdWxsQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5OdW1lcmljU3RyaW5nOlxuICAgICAgICAgICAgcmV0dXJuIEFzbk51bWVyaWNTdHJpbmdDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLk9iamVjdElkZW50aWZpZXI6XG4gICAgICAgICAgICByZXR1cm4gQXNuT2JqZWN0SWRlbnRpZmllckNvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuT2N0ZXRTdHJpbmc6XG4gICAgICAgICAgICByZXR1cm4gQXNuT2N0ZXRTdHJpbmdDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLlByaW50YWJsZVN0cmluZzpcbiAgICAgICAgICAgIHJldHVybiBBc25QcmludGFibGVTdHJpbmdDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLlRlbGV0ZXhTdHJpbmc6XG4gICAgICAgICAgICByZXR1cm4gQXNuVGVsZXRleFN0cmluZ0NvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuVVRDVGltZTpcbiAgICAgICAgICAgIHJldHVybiBBc25VVENUaW1lQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5Vbml2ZXJzYWxTdHJpbmc6XG4gICAgICAgICAgICByZXR1cm4gQXNuVW5pdmVyc2FsU3RyaW5nQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5VdGY4U3RyaW5nOlxuICAgICAgICAgICAgcmV0dXJuIEFzblV0ZjhTdHJpbmdDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLlZpZGVvdGV4U3RyaW5nOlxuICAgICAgICAgICAgcmV0dXJuIEFzblZpZGVvdGV4U3RyaW5nQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5WaXNpYmxlU3RyaW5nOlxuICAgICAgICAgICAgcmV0dXJuIEFzblZpc2libGVTdHJpbmdDb252ZXJ0ZXI7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIGlzQ29udmVydGlibGUodGFyZ2V0KSB7XG4gICAgaWYgKHR5cGVvZiB0YXJnZXQgPT09IFwiZnVuY3Rpb25cIiAmJiB0YXJnZXQucHJvdG90eXBlKSB7XG4gICAgICAgIGlmICh0YXJnZXQucHJvdG90eXBlLnRvQVNOICYmIHRhcmdldC5wcm90b3R5cGUuZnJvbUFTTikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaXNDb252ZXJ0aWJsZSh0YXJnZXQucHJvdG90eXBlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuICEhKHRhcmdldCAmJiB0eXBlb2YgdGFyZ2V0ID09PSBcIm9iamVjdFwiICYmIFwidG9BU05cIiBpbiB0YXJnZXQgJiYgXCJmcm9tQVNOXCIgaW4gdGFyZ2V0KTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gaXNUeXBlT2ZBcnJheSh0YXJnZXQpIHtcbiAgICB2YXIgX2E7XG4gICAgaWYgKHRhcmdldCkge1xuICAgICAgICBjb25zdCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0YXJnZXQpO1xuICAgICAgICBpZiAoKChfYSA9IHByb3RvID09PSBudWxsIHx8IHByb3RvID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwcm90by5wcm90b3R5cGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jb25zdHJ1Y3RvcikgPT09IEFycmF5KSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNUeXBlT2ZBcnJheShwcm90byk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0FycmF5RXF1YWwoYnl0ZXMxLCBieXRlczIpIHtcbiAgICBpZiAoIShieXRlczEgJiYgYnl0ZXMyKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChieXRlczEuYnl0ZUxlbmd0aCAhPT0gYnl0ZXMyLmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBiMSA9IG5ldyBVaW50OEFycmF5KGJ5dGVzMSk7XG4gICAgY29uc3QgYjIgPSBuZXcgVWludDhBcnJheShieXRlczIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZXMxLmJ5dGVMZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoYjFbaV0gIT09IGIyW2ldKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG4iLCAiaW1wb3J0ICogYXMgYXNuMWpzIGZyb20gXCJhc24xanNcIjtcbmltcG9ydCB7IEFzblByb3BUeXBlcywgQXNuVHlwZVR5cGVzIH0gZnJvbSBcIi4vZW51bXNcIjtcbmltcG9ydCB7IGlzQ29udmVydGlibGUgfSBmcm9tIFwiLi9oZWxwZXJcIjtcbmV4cG9ydCBjbGFzcyBBc25TY2hlbWFTdG9yYWdlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5pdGVtcyA9IG5ldyBXZWFrTWFwKCk7XG4gICAgfVxuICAgIGhhcyh0YXJnZXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXMuaGFzKHRhcmdldCk7XG4gICAgfVxuICAgIGdldCh0YXJnZXQsIGNoZWNrU2NoZW1hID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gdGhpcy5pdGVtcy5nZXQodGFyZ2V0KTtcbiAgICAgICAgaWYgKCFzY2hlbWEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGdldCBzY2hlbWEgZm9yICcke3RhcmdldC5wcm90b3R5cGUuY29uc3RydWN0b3IubmFtZX0nIHRhcmdldGApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGVja1NjaGVtYSAmJiAhc2NoZW1hLnNjaGVtYSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTY2hlbWEgJyR7dGFyZ2V0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5uYW1lfScgZG9lc24ndCBjb250YWluIEFTTi4xIHNjaGVtYS4gQ2FsbCAnQXNuU2NoZW1hU3RvcmFnZS5jYWNoZScuYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNjaGVtYTtcbiAgICB9XG4gICAgY2FjaGUodGFyZ2V0KSB7XG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IHRoaXMuZ2V0KHRhcmdldCk7XG4gICAgICAgIGlmICghc2NoZW1hLnNjaGVtYSkge1xuICAgICAgICAgICAgc2NoZW1hLnNjaGVtYSA9IHRoaXMuY3JlYXRlKHRhcmdldCwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY3JlYXRlRGVmYXVsdCh0YXJnZXQpIHtcbiAgICAgICAgY29uc3Qgc2NoZW1hID0ge1xuICAgICAgICAgICAgdHlwZTogQXNuVHlwZVR5cGVzLlNlcXVlbmNlLFxuICAgICAgICAgICAgaXRlbXM6IHt9LFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBwYXJlbnRTY2hlbWEgPSB0aGlzLmZpbmRQYXJlbnRTY2hlbWEodGFyZ2V0KTtcbiAgICAgICAgaWYgKHBhcmVudFNjaGVtYSkge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihzY2hlbWEsIHBhcmVudFNjaGVtYSk7XG4gICAgICAgICAgICBzY2hlbWEuaXRlbXMgPSBPYmplY3QuYXNzaWduKHt9LCBzY2hlbWEuaXRlbXMsIHBhcmVudFNjaGVtYS5pdGVtcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNjaGVtYTtcbiAgICB9XG4gICAgY3JlYXRlKHRhcmdldCwgdXNlTmFtZXMpIHtcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gdGhpcy5pdGVtcy5nZXQodGFyZ2V0KSB8fCB0aGlzLmNyZWF0ZURlZmF1bHQodGFyZ2V0KTtcbiAgICAgICAgY29uc3QgYXNuMVZhbHVlID0gW107XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHNjaGVtYS5pdGVtcykge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHNjaGVtYS5pdGVtc1trZXldO1xuICAgICAgICAgICAgY29uc3QgbmFtZSA9IHVzZU5hbWVzID8ga2V5IDogXCJcIjtcbiAgICAgICAgICAgIGxldCBhc24xSXRlbTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgKGl0ZW0udHlwZSkgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBBc24xVHlwZU5hbWUgPSBBc25Qcm9wVHlwZXNbaXRlbS50eXBlXTtcbiAgICAgICAgICAgICAgICBjb25zdCBBc24xVHlwZSA9IGFzbjFqc1tBc24xVHlwZU5hbWVdO1xuICAgICAgICAgICAgICAgIGlmICghQXNuMVR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZ2V0IEFTTjEgY2xhc3MgYnkgbmFtZSAnJHtBc24xVHlwZU5hbWV9J2ApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhc24xSXRlbSA9IG5ldyBBc24xVHlwZSh7IG5hbWUgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpc0NvbnZlcnRpYmxlKGl0ZW0udHlwZSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBpdGVtLnR5cGUoKTtcbiAgICAgICAgICAgICAgICBhc24xSXRlbSA9IGluc3RhbmNlLnRvU2NoZW1hKG5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXRlbS5vcHRpb25hbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1TY2hlbWEgPSB0aGlzLmdldChpdGVtLnR5cGUpO1xuICAgICAgICAgICAgICAgIGlmIChpdGVtU2NoZW1hLnR5cGUgPT09IEFzblR5cGVUeXBlcy5DaG9pY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgYXNuMUl0ZW0gPSBuZXcgYXNuMWpzLkFueSh7IG5hbWUgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhc24xSXRlbSA9IHRoaXMuY3JlYXRlKGl0ZW0udHlwZSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBhc24xSXRlbS5uYW1lID0gbmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhc24xSXRlbSA9IG5ldyBhc24xanMuQW55KHsgbmFtZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbmFsID0gISFpdGVtLm9wdGlvbmFsIHx8IGl0ZW0uZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoaXRlbS5yZXBlYXRlZCkge1xuICAgICAgICAgICAgICAgIGFzbjFJdGVtLm5hbWUgPSBcIlwiO1xuICAgICAgICAgICAgICAgIGNvbnN0IENvbnRhaW5lciA9IGl0ZW0ucmVwZWF0ZWQgPT09IFwic2V0XCJcbiAgICAgICAgICAgICAgICAgICAgPyBhc24xanMuU2V0XG4gICAgICAgICAgICAgICAgICAgIDogYXNuMWpzLlNlcXVlbmNlO1xuICAgICAgICAgICAgICAgIGFzbjFJdGVtID0gbmV3IENvbnRhaW5lcih7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgYXNuMWpzLlJlcGVhdGVkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBhc24xSXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGl0ZW0uY29udGV4dCAhPT0gbnVsbCAmJiBpdGVtLmNvbnRleHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLmltcGxpY2l0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaXRlbS50eXBlID09PSBcIm51bWJlclwiIHx8IGlzQ29udmVydGlibGUoaXRlbS50eXBlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ29udGFpbmVyID0gaXRlbS5yZXBlYXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gYXNuMWpzLkNvbnN0cnVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhc24xanMuUHJpbWl0aXZlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNuMVZhbHVlLnB1c2gobmV3IENvbnRhaW5lcih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZEJsb2NrOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ0NsYXNzOiAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdOdW1iZXI6IGl0ZW0uY29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWNoZShpdGVtLnR5cGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNSZXBlYXRlZCA9ICEhaXRlbS5yZXBlYXRlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9ICFpc1JlcGVhdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmdldChpdGVtLnR5cGUsIHRydWUpLnNjaGVtYVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYXNuMUl0ZW07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IFwidmFsdWVCbG9ja1wiIGluIHZhbHVlID8gdmFsdWUudmFsdWVCbG9jay52YWx1ZSA6IHZhbHVlLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNuMVZhbHVlLnB1c2gobmV3IGFzbjFqcy5Db25zdHJ1Y3RlZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogIWlzUmVwZWF0ZWQgPyBuYW1lIDogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZEJsb2NrOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ0NsYXNzOiAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdOdW1iZXI6IGl0ZW0uY29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYXNuMVZhbHVlLnB1c2gobmV3IGFzbjFqcy5Db25zdHJ1Y3RlZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkQmxvY2s6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdDbGFzczogMyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdOdW1iZXI6IGl0ZW0uY29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogW2FzbjFJdGVtXSxcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFzbjFJdGVtLm9wdGlvbmFsID0gb3B0aW9uYWw7XG4gICAgICAgICAgICAgICAgYXNuMVZhbHVlLnB1c2goYXNuMUl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoc2NoZW1hLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgQXNuVHlwZVR5cGVzLlNlcXVlbmNlOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgYXNuMWpzLlNlcXVlbmNlKHsgdmFsdWU6IGFzbjFWYWx1ZSwgbmFtZTogXCJcIiB9KTtcbiAgICAgICAgICAgIGNhc2UgQXNuVHlwZVR5cGVzLlNldDpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGFzbjFqcy5TZXQoeyB2YWx1ZTogYXNuMVZhbHVlLCBuYW1lOiBcIlwiIH0pO1xuICAgICAgICAgICAgY2FzZSBBc25UeXBlVHlwZXMuQ2hvaWNlOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgYXNuMWpzLkNob2ljZSh7IHZhbHVlOiBhc24xVmFsdWUsIG5hbWU6IFwiXCIgfSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgQVNOMSB0eXBlIGluIHVzZWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNldCh0YXJnZXQsIHNjaGVtYSkge1xuICAgICAgICB0aGlzLml0ZW1zLnNldCh0YXJnZXQsIHNjaGVtYSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBmaW5kUGFyZW50U2NoZW1hKHRhcmdldCkge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGFyZ2V0KTtcbiAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgY29uc3Qgc2NoZW1hID0gdGhpcy5pdGVtcy5nZXQocGFyZW50KTtcbiAgICAgICAgICAgIHJldHVybiBzY2hlbWEgfHwgdGhpcy5maW5kUGFyZW50U2NoZW1hKHBhcmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IEFzblNjaGVtYVN0b3JhZ2UgfSBmcm9tIFwiLi9zY2hlbWFcIjtcbmV4cG9ydCBjb25zdCBzY2hlbWFTdG9yYWdlID0gbmV3IEFzblNjaGVtYVN0b3JhZ2UoKTtcbiIsICJpbXBvcnQgKiBhcyBjb252ZXJ0ZXJzIGZyb20gXCIuL2NvbnZlcnRlcnNcIjtcbmltcG9ydCB7IEFzblR5cGVUeXBlcyB9IGZyb20gXCIuL2VudW1zXCI7XG5pbXBvcnQgeyBzY2hlbWFTdG9yYWdlIH0gZnJvbSBcIi4vc3RvcmFnZVwiO1xuZXhwb3J0IGNvbnN0IEFzblR5cGUgPSAob3B0aW9ucykgPT4gKHRhcmdldCkgPT4ge1xuICAgIGxldCBzY2hlbWE7XG4gICAgaWYgKCFzY2hlbWFTdG9yYWdlLmhhcyh0YXJnZXQpKSB7XG4gICAgICAgIHNjaGVtYSA9IHNjaGVtYVN0b3JhZ2UuY3JlYXRlRGVmYXVsdCh0YXJnZXQpO1xuICAgICAgICBzY2hlbWFTdG9yYWdlLnNldCh0YXJnZXQsIHNjaGVtYSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBzY2hlbWEgPSBzY2hlbWFTdG9yYWdlLmdldCh0YXJnZXQpO1xuICAgIH1cbiAgICBPYmplY3QuYXNzaWduKHNjaGVtYSwgb3B0aW9ucyk7XG59O1xuZXhwb3J0IGNvbnN0IEFzbkNob2ljZVR5cGUgPSAoKSA9PiBBc25UeXBlKHsgdHlwZTogQXNuVHlwZVR5cGVzLkNob2ljZSB9KTtcbmV4cG9ydCBjb25zdCBBc25TZXRUeXBlID0gKG9wdGlvbnMpID0+IEFzblR5cGUoeyB0eXBlOiBBc25UeXBlVHlwZXMuU2V0LCAuLi5vcHRpb25zIH0pO1xuZXhwb3J0IGNvbnN0IEFzblNlcXVlbmNlVHlwZSA9IChvcHRpb25zKSA9PiBBc25UeXBlKHsgdHlwZTogQXNuVHlwZVR5cGVzLlNlcXVlbmNlLCAuLi5vcHRpb25zIH0pO1xuZXhwb3J0IGNvbnN0IEFzblByb3AgPSAob3B0aW9ucykgPT4gKHRhcmdldCwgcHJvcGVydHlLZXkpID0+IHtcbiAgICBsZXQgc2NoZW1hO1xuICAgIGlmICghc2NoZW1hU3RvcmFnZS5oYXModGFyZ2V0LmNvbnN0cnVjdG9yKSkge1xuICAgICAgICBzY2hlbWEgPSBzY2hlbWFTdG9yYWdlLmNyZWF0ZURlZmF1bHQodGFyZ2V0LmNvbnN0cnVjdG9yKTtcbiAgICAgICAgc2NoZW1hU3RvcmFnZS5zZXQodGFyZ2V0LmNvbnN0cnVjdG9yLCBzY2hlbWEpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgc2NoZW1hID0gc2NoZW1hU3RvcmFnZS5nZXQodGFyZ2V0LmNvbnN0cnVjdG9yKTtcbiAgICB9XG4gICAgY29uc3QgY29weU9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKTtcbiAgICBpZiAodHlwZW9mIGNvcHlPcHRpb25zLnR5cGUgPT09IFwibnVtYmVyXCIgJiYgIWNvcHlPcHRpb25zLmNvbnZlcnRlcikge1xuICAgICAgICBjb25zdCBkZWZhdWx0Q29udmVydGVyID0gY29udmVydGVycy5kZWZhdWx0Q29udmVydGVyKG9wdGlvbnMudHlwZSk7XG4gICAgICAgIGlmICghZGVmYXVsdENvbnZlcnRlcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZ2V0IGRlZmF1bHQgY29udmVydGVyIGZvciBwcm9wZXJ0eSAnJHtwcm9wZXJ0eUtleX0nIG9mICR7dGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29weU9wdGlvbnMuY29udmVydGVyID0gZGVmYXVsdENvbnZlcnRlcjtcbiAgICB9XG4gICAgc2NoZW1hLml0ZW1zW3Byb3BlcnR5S2V5XSA9IGNvcHlPcHRpb25zO1xufTtcbiIsICJleHBvcnQgY2xhc3MgQXNuU2NoZW1hVmFsaWRhdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnNjaGVtYXMgPSBbXTtcbiAgICB9XG59XG4iLCAiZXhwb3J0ICogZnJvbSBcIi4vc2NoZW1hX3ZhbGlkYXRpb25cIjtcbiIsICJpbXBvcnQgKiBhcyBhc24xanMgZnJvbSBcImFzbjFqc1wiO1xuaW1wb3J0IHsgQXNuUHJvcFR5cGVzLCBBc25UeXBlVHlwZXMgfSBmcm9tIFwiLi9lbnVtc1wiO1xuaW1wb3J0ICogYXMgY29udmVydGVycyBmcm9tIFwiLi9jb252ZXJ0ZXJzXCI7XG5pbXBvcnQgeyBBc25TY2hlbWFWYWxpZGF0aW9uRXJyb3IgfSBmcm9tIFwiLi9lcnJvcnNcIjtcbmltcG9ydCB7IGlzQ29udmVydGlibGUsIGlzVHlwZU9mQXJyYXkgfSBmcm9tIFwiLi9oZWxwZXJcIjtcbmltcG9ydCB7IHNjaGVtYVN0b3JhZ2UgfSBmcm9tIFwiLi9zdG9yYWdlXCI7XG5leHBvcnQgY2xhc3MgQXNuUGFyc2VyIHtcbiAgICBzdGF0aWMgcGFyc2UoZGF0YSwgdGFyZ2V0KSB7XG4gICAgICAgIGNvbnN0IGFzbjFQYXJzZWQgPSBhc24xanMuZnJvbUJFUihkYXRhKTtcbiAgICAgICAgaWYgKGFzbjFQYXJzZWQucmVzdWx0LmVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYXNuMVBhcnNlZC5yZXN1bHQuZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlcyA9IHRoaXMuZnJvbUFTTihhc24xUGFyc2VkLnJlc3VsdCwgdGFyZ2V0KTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgc3RhdGljIGZyb21BU04oYXNuMVNjaGVtYSwgdGFyZ2V0KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChpc0NvbnZlcnRpYmxlKHRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG5ldyB0YXJnZXQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuZnJvbUFTTihhc24xU2NoZW1hKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IHNjaGVtYVN0b3JhZ2UuZ2V0KHRhcmdldCk7XG4gICAgICAgICAgICBzY2hlbWFTdG9yYWdlLmNhY2hlKHRhcmdldCk7XG4gICAgICAgICAgICBsZXQgdGFyZ2V0U2NoZW1hID0gc2NoZW1hLnNjaGVtYTtcbiAgICAgICAgICAgIGlmIChhc24xU2NoZW1hLmNvbnN0cnVjdG9yID09PSBhc24xanMuQ29uc3RydWN0ZWQgJiYgc2NoZW1hLnR5cGUgIT09IEFzblR5cGVUeXBlcy5DaG9pY2UpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRTY2hlbWEgPSBuZXcgYXNuMWpzLkNvbnN0cnVjdGVkKHtcbiAgICAgICAgICAgICAgICAgICAgaWRCbG9jazoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFnQ2xhc3M6IDMsXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWdOdW1iZXI6IGFzbjFTY2hlbWEuaWRCbG9jay50YWdOdW1iZXIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBzY2hlbWEuc2NoZW1hLnZhbHVlQmxvY2sudmFsdWUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gc2NoZW1hLml0ZW1zKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBhc24xU2NoZW1hW2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYXNuMUNvbXBhcmVkU2NoZW1hID0gYXNuMWpzLmNvbXBhcmVTY2hlbWEoe30sIGFzbjFTY2hlbWEsIHRhcmdldFNjaGVtYSk7XG4gICAgICAgICAgICBpZiAoIWFzbjFDb21wYXJlZFNjaGVtYS52ZXJpZmllZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBBc25TY2hlbWFWYWxpZGF0aW9uRXJyb3IoYERhdGEgZG9lcyBub3QgbWF0Y2ggdG8gJHt0YXJnZXQubmFtZX0gQVNOMSBzY2hlbWEuICR7YXNuMUNvbXBhcmVkU2NoZW1hLnJlc3VsdC5lcnJvcn1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IG5ldyB0YXJnZXQoKTtcbiAgICAgICAgICAgIGlmIChpc1R5cGVPZkFycmF5KHRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIShcInZhbHVlXCIgaW4gYXNuMVNjaGVtYS52YWx1ZUJsb2NrICYmIEFycmF5LmlzQXJyYXkoYXNuMVNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZ2V0IGl0ZW1zIGZyb20gdGhlIEFTTi4xIHBhcnNlZCB2YWx1ZS4gQVNOLjEgb2JqZWN0IGlzIG5vdCBjb25zdHJ1Y3RlZC5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbVR5cGUgPSBzY2hlbWEuaXRlbVR5cGU7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtVHlwZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb252ZXJ0ZXIgPSBjb252ZXJ0ZXJzLmRlZmF1bHRDb252ZXJ0ZXIoaXRlbVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbnZlcnRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZ2V0IGRlZmF1bHQgY29udmVydGVyIGZvciBhcnJheSBpdGVtIG9mICR7dGFyZ2V0Lm5hbWV9IEFTTjEgc2NoZW1hYCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5mcm9tKGFzbjFTY2hlbWEudmFsdWVCbG9jay52YWx1ZSwgKGVsZW1lbnQpID0+IGNvbnZlcnRlci5mcm9tQVNOKGVsZW1lbnQpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXQuZnJvbShhc24xU2NoZW1hLnZhbHVlQmxvY2sudmFsdWUsIChlbGVtZW50KSA9PiB0aGlzLmZyb21BU04oZWxlbWVudCwgaXRlbVR5cGUpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBzY2hlbWEuaXRlbXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhc24xU2NoZW1hVmFsdWUgPSBhc24xQ29tcGFyZWRTY2hlbWEucmVzdWx0W2tleV07XG4gICAgICAgICAgICAgICAgaWYgKCFhc24xU2NoZW1hVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHNjaGVtYUl0ZW0gPSBzY2hlbWEuaXRlbXNba2V5XTtcbiAgICAgICAgICAgICAgICBjb25zdCBzY2hlbWFJdGVtVHlwZSA9IHNjaGVtYUl0ZW0udHlwZTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNjaGVtYUl0ZW1UeXBlID09PSBcIm51bWJlclwiIHx8IGlzQ29udmVydGlibGUoc2NoZW1hSXRlbVR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnZlcnRlciA9IChfYSA9IHNjaGVtYUl0ZW0uY29udmVydGVyKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAoaXNDb252ZXJ0aWJsZShzY2hlbWFJdGVtVHlwZSlcbiAgICAgICAgICAgICAgICAgICAgICAgID8gbmV3IHNjaGVtYUl0ZW1UeXBlKClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY29udmVydGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb252ZXJ0ZXIgaXMgZW1wdHlcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYUl0ZW0ucmVwZWF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWFJdGVtLmltcGxpY2l0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ29udGFpbmVyID0gc2NoZW1hSXRlbS5yZXBlYXRlZCA9PT0gXCJzZXF1ZW5jZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gYXNuMWpzLlNlcXVlbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYXNuMWpzLlNldDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdJdGVtID0gbmV3IENvbnRhaW5lcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0l0ZW0udmFsdWVCbG9jayA9IGFzbjFTY2hlbWFWYWx1ZS52YWx1ZUJsb2NrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0l0ZW1Bc24gPSBhc24xanMuZnJvbUJFUihuZXdJdGVtLnRvQkVSKGZhbHNlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0l0ZW1Bc24ub2Zmc2V0ID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBwYXJzZSB0aGUgY2hpbGQgaXRlbS4gJHtuZXdJdGVtQXNuLnJlc3VsdC5lcnJvcn1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoXCJ2YWx1ZVwiIGluIG5ld0l0ZW1Bc24ucmVzdWx0LnZhbHVlQmxvY2sgJiYgQXJyYXkuaXNBcnJheShuZXdJdGVtQXNuLnJlc3VsdC52YWx1ZUJsb2NrLnZhbHVlKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGdldCBpdGVtcyBmcm9tIHRoZSBBU04uMSBwYXJzZWQgdmFsdWUuIEFTTi4xIG9iamVjdCBpcyBub3QgY29uc3RydWN0ZWQuXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG5ld0l0ZW1Bc24ucmVzdWx0LnZhbHVlQmxvY2sudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzW2tleV0gPSBBcnJheS5mcm9tKHZhbHVlLCAoZWxlbWVudCkgPT4gY29udmVydGVyLmZyb21BU04oZWxlbWVudCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzW2tleV0gPSBBcnJheS5mcm9tKGFzbjFTY2hlbWFWYWx1ZSwgKGVsZW1lbnQpID0+IGNvbnZlcnRlci5mcm9tQVNOKGVsZW1lbnQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IGFzbjFTY2hlbWFWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWFJdGVtLmltcGxpY2l0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld0l0ZW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ29udmVydGlibGUoc2NoZW1hSXRlbVR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0l0ZW0gPSBuZXcgc2NoZW1hSXRlbVR5cGUoKS50b1NjaGVtYShcIlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFzbjFUeXBlTmFtZSA9IEFzblByb3BUeXBlc1tzY2hlbWFJdGVtVHlwZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFzbjFUeXBlID0gYXNuMWpzW0FzbjFUeXBlTmFtZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXNuMVR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGdldCAnJHtBc24xVHlwZU5hbWV9JyBjbGFzcyBmcm9tIGFzbjFqcyBtb2R1bGVgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdJdGVtID0gbmV3IEFzbjFUeXBlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0l0ZW0udmFsdWVCbG9jayA9IHZhbHVlLnZhbHVlQmxvY2s7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBhc24xanMuZnJvbUJFUihuZXdJdGVtLnRvQkVSKGZhbHNlKSkucmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzW2tleV0gPSBjb252ZXJ0ZXIuZnJvbUFTTih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWFJdGVtLnJlcGVhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXNuMVNjaGVtYVZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBnZXQgbGlzdCBvZiBpdGVtcyBmcm9tIHRoZSBBU04uMSBwYXJzZWQgdmFsdWUuIEFTTi4xIHZhbHVlIHNob3VsZCBiZSBpdGVyYWJsZS5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNba2V5XSA9IEFycmF5LmZyb20oYXNuMVNjaGVtYVZhbHVlLCAoZWxlbWVudCkgPT4gdGhpcy5mcm9tQVNOKGVsZW1lbnQsIHNjaGVtYUl0ZW1UeXBlKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNba2V5XSA9IHRoaXMuZnJvbUFTTihhc24xU2NoZW1hVmFsdWUsIHNjaGVtYUl0ZW1UeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBBc25TY2hlbWFWYWxpZGF0aW9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBlcnJvci5zY2hlbWFzLnB1c2godGFyZ2V0Lm5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCAiaW1wb3J0ICogYXMgYXNuMWpzIGZyb20gXCJhc24xanNcIjtcbmltcG9ydCAqIGFzIGNvbnZlcnRlcnMgZnJvbSBcIi4vY29udmVydGVyc1wiO1xuaW1wb3J0IHsgQXNuUHJvcFR5cGVzLCBBc25UeXBlVHlwZXMgfSBmcm9tIFwiLi9lbnVtc1wiO1xuaW1wb3J0IHsgaXNDb252ZXJ0aWJsZSwgaXNBcnJheUVxdWFsIH0gZnJvbSBcIi4vaGVscGVyXCI7XG5pbXBvcnQgeyBzY2hlbWFTdG9yYWdlIH0gZnJvbSBcIi4vc3RvcmFnZVwiO1xuZXhwb3J0IGNsYXNzIEFzblNlcmlhbGl6ZXIge1xuICAgIHN0YXRpYyBzZXJpYWxpemUob2JqKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBhc24xanMuQmFzZUJsb2NrKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JqLnRvQkVSKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy50b0FTTihvYmopLnRvQkVSKGZhbHNlKTtcbiAgICB9XG4gICAgc3RhdGljIHRvQVNOKG9iaikge1xuICAgICAgICBpZiAob2JqICYmIHR5cGVvZiBvYmogPT09IFwib2JqZWN0XCIgJiYgaXNDb252ZXJ0aWJsZShvYmopKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JqLnRvQVNOKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEob2JqICYmIHR5cGVvZiBvYmogPT09IFwib2JqZWN0XCIpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUGFyYW1ldGVyIDEgc2hvdWxkIGJlIHR5cGUgb2YgT2JqZWN0LlwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0YXJnZXQgPSBvYmouY29uc3RydWN0b3I7XG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IHNjaGVtYVN0b3JhZ2UuZ2V0KHRhcmdldCk7XG4gICAgICAgIHNjaGVtYVN0b3JhZ2UuY2FjaGUodGFyZ2V0KTtcbiAgICAgICAgbGV0IGFzbjFWYWx1ZSA9IFtdO1xuICAgICAgICBpZiAoc2NoZW1hLml0ZW1UeXBlKSB7XG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQYXJhbWV0ZXIgMSBzaG91bGQgYmUgdHlwZSBvZiBBcnJheS5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS5pdGVtVHlwZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnZlcnRlciA9IGNvbnZlcnRlcnMuZGVmYXVsdENvbnZlcnRlcihzY2hlbWEuaXRlbVR5cGUpO1xuICAgICAgICAgICAgICAgIGlmICghY29udmVydGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGdldCBkZWZhdWx0IGNvbnZlcnRlciBmb3IgYXJyYXkgaXRlbSBvZiAke3RhcmdldC5uYW1lfSBBU04xIHNjaGVtYWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhc24xVmFsdWUgPSBvYmoubWFwKChvKSA9PiBjb252ZXJ0ZXIudG9BU04obykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYXNuMVZhbHVlID0gb2JqLm1hcCgobykgPT4gdGhpcy50b0Fzbkl0ZW0oeyB0eXBlOiBzY2hlbWEuaXRlbVR5cGUgfSwgXCJbXVwiLCB0YXJnZXQsIG8pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHNjaGVtYS5pdGVtcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNjaGVtYUl0ZW0gPSBzY2hlbWEuaXRlbXNba2V5XTtcbiAgICAgICAgICAgICAgICBjb25zdCBvYmpQcm9wID0gb2JqW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKG9ialByb3AgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICB8fCBzY2hlbWFJdGVtLmRlZmF1bHRWYWx1ZSA9PT0gb2JqUHJvcFxuICAgICAgICAgICAgICAgICAgICB8fCAodHlwZW9mIHNjaGVtYUl0ZW0uZGVmYXVsdFZhbHVlID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBvYmpQcm9wID09PSBcIm9iamVjdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiBpc0FycmF5RXF1YWwodGhpcy5zZXJpYWxpemUoc2NoZW1hSXRlbS5kZWZhdWx0VmFsdWUpLCB0aGlzLnNlcmlhbGl6ZShvYmpQcm9wKSkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBhc24xSXRlbSA9IEFzblNlcmlhbGl6ZXIudG9Bc25JdGVtKHNjaGVtYUl0ZW0sIGtleSwgdGFyZ2V0LCBvYmpQcm9wKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNjaGVtYUl0ZW0uY29udGV4dCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hSXRlbS5pbXBsaWNpdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzY2hlbWFJdGVtLnJlcGVhdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKHR5cGVvZiBzY2hlbWFJdGVtLnR5cGUgPT09IFwibnVtYmVyXCIgfHwgaXNDb252ZXJ0aWJsZShzY2hlbWFJdGVtLnR5cGUpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUudmFsdWVIZXggPSBhc24xSXRlbSBpbnN0YW5jZW9mIGFzbjFqcy5OdWxsID8gYXNuMUl0ZW0udmFsdWVCZWZvcmVEZWNvZGVWaWV3IDogYXNuMUl0ZW0udmFsdWVCbG9jay50b0JFUigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzbjFWYWx1ZS5wdXNoKG5ldyBhc24xanMuUHJpbWl0aXZlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWw6IHNjaGVtYUl0ZW0ub3B0aW9uYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkQmxvY2s6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ0NsYXNzOiAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnTnVtYmVyOiBzY2hlbWFJdGVtLmNvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzbjFWYWx1ZS5wdXNoKG5ldyBhc24xanMuQ29uc3RydWN0ZWQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbDogc2NoZW1hSXRlbS5vcHRpb25hbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRCbG9jazoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnQ2xhc3M6IDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdOdW1iZXI6IHNjaGVtYUl0ZW0uY29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGFzbjFJdGVtLnZhbHVlQmxvY2sudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNuMVZhbHVlLnB1c2gobmV3IGFzbjFqcy5Db25zdHJ1Y3RlZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWw6IHNjaGVtYUl0ZW0ub3B0aW9uYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRCbG9jazoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdDbGFzczogMyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnTnVtYmVyOiBzY2hlbWFJdGVtLmNvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogW2FzbjFJdGVtXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzY2hlbWFJdGVtLnJlcGVhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzbjFWYWx1ZSA9IGFzbjFWYWx1ZS5jb25jYXQoYXNuMUl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYXNuMVZhbHVlLnB1c2goYXNuMUl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgYXNuU2NoZW1hO1xuICAgICAgICBzd2l0Y2ggKHNjaGVtYS50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIEFzblR5cGVUeXBlcy5TZXF1ZW5jZTpcbiAgICAgICAgICAgICAgICBhc25TY2hlbWEgPSBuZXcgYXNuMWpzLlNlcXVlbmNlKHsgdmFsdWU6IGFzbjFWYWx1ZSB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQXNuVHlwZVR5cGVzLlNldDpcbiAgICAgICAgICAgICAgICBhc25TY2hlbWEgPSBuZXcgYXNuMWpzLlNldCh7IHZhbHVlOiBhc24xVmFsdWUgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEFzblR5cGVUeXBlcy5DaG9pY2U6XG4gICAgICAgICAgICAgICAgaWYgKCFhc24xVmFsdWVbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTY2hlbWEgJyR7dGFyZ2V0Lm5hbWV9JyBoYXMgd3JvbmcgZGF0YS4gQ2hvaWNlIGNhbm5vdCBiZSBlbXB0eS5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXNuU2NoZW1hID0gYXNuMVZhbHVlWzBdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhc25TY2hlbWE7XG4gICAgfVxuICAgIHN0YXRpYyB0b0Fzbkl0ZW0oc2NoZW1hSXRlbSwga2V5LCB0YXJnZXQsIG9ialByb3ApIHtcbiAgICAgICAgbGV0IGFzbjFJdGVtO1xuICAgICAgICBpZiAodHlwZW9mIChzY2hlbWFJdGVtLnR5cGUpID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICBjb25zdCBjb252ZXJ0ZXIgPSBzY2hlbWFJdGVtLmNvbnZlcnRlcjtcbiAgICAgICAgICAgIGlmICghY29udmVydGVyKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm9wZXJ0eSAnJHtrZXl9JyBkb2Vzbid0IGhhdmUgY29udmVydGVyIGZvciB0eXBlICR7QXNuUHJvcFR5cGVzW3NjaGVtYUl0ZW0udHlwZV19IGluIHNjaGVtYSAnJHt0YXJnZXQubmFtZX0nYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2NoZW1hSXRlbS5yZXBlYXRlZCkge1xuICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvYmpQcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUGFyYW1ldGVyICdvYmpQcm9wJyBzaG91bGQgYmUgdHlwZSBvZiBBcnJheS5cIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gQXJyYXkuZnJvbShvYmpQcm9wLCAoZWxlbWVudCkgPT4gY29udmVydGVyLnRvQVNOKGVsZW1lbnQpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBDb250YWluZXIgPSBzY2hlbWFJdGVtLnJlcGVhdGVkID09PSBcInNlcXVlbmNlXCJcbiAgICAgICAgICAgICAgICAgICAgPyBhc24xanMuU2VxdWVuY2VcbiAgICAgICAgICAgICAgICAgICAgOiBhc24xanMuU2V0O1xuICAgICAgICAgICAgICAgIGFzbjFJdGVtID0gbmV3IENvbnRhaW5lcih7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBpdGVtcyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFzbjFJdGVtID0gY29udmVydGVyLnRvQVNOKG9ialByb3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHNjaGVtYUl0ZW0ucmVwZWF0ZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob2JqUHJvcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlBhcmFtZXRlciAnb2JqUHJvcCcgc2hvdWxkIGJlIHR5cGUgb2YgQXJyYXkuXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtcyA9IEFycmF5LmZyb20ob2JqUHJvcCwgKGVsZW1lbnQpID0+IHRoaXMudG9BU04oZWxlbWVudCkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IENvbnRhaW5lciA9IHNjaGVtYUl0ZW0ucmVwZWF0ZWQgPT09IFwic2VxdWVuY2VcIlxuICAgICAgICAgICAgICAgICAgICA/IGFzbjFqcy5TZXF1ZW5jZVxuICAgICAgICAgICAgICAgICAgICA6IGFzbjFqcy5TZXQ7XG4gICAgICAgICAgICAgICAgYXNuMUl0ZW0gPSBuZXcgQ29udGFpbmVyKHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGl0ZW1zLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYXNuMUl0ZW0gPSB0aGlzLnRvQVNOKG9ialByb3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhc24xSXRlbTtcbiAgICB9XG59XG4iLCAiZXhwb3J0IGNsYXNzIEFzbkFycmF5IGV4dGVuZHMgQXJyYXkge1xuICAgIGNvbnN0cnVjdG9yKGl0ZW1zID0gW10pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpdGVtcyA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgc3VwZXIoaXRlbXMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgICAgICAgICAgIHRoaXMucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiIsICJpbXBvcnQgKiBhcyBhc24xanMgZnJvbSBcImFzbjFqc1wiO1xuaW1wb3J0IHsgQnVmZmVyU291cmNlQ29udmVydGVyIH0gZnJvbSBcInB2dHN1dGlsc1wiO1xuaW1wb3J0IHsgQXNuUGFyc2VyIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5pbXBvcnQgeyBBc25TZXJpYWxpemVyIH0gZnJvbSBcIi4vc2VyaWFsaXplclwiO1xuZXhwb3J0IGNsYXNzIEFzbkNvbnZlcnQge1xuICAgIHN0YXRpYyBzZXJpYWxpemUob2JqKSB7XG4gICAgICAgIHJldHVybiBBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShvYmopO1xuICAgIH1cbiAgICBzdGF0aWMgcGFyc2UoZGF0YSwgdGFyZ2V0KSB7XG4gICAgICAgIHJldHVybiBBc25QYXJzZXIucGFyc2UoZGF0YSwgdGFyZ2V0KTtcbiAgICB9XG4gICAgc3RhdGljIHRvU3RyaW5nKGRhdGEpIHtcbiAgICAgICAgY29uc3QgYnVmID0gQnVmZmVyU291cmNlQ29udmVydGVyLmlzQnVmZmVyU291cmNlKGRhdGEpXG4gICAgICAgICAgICA/IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKGRhdGEpXG4gICAgICAgICAgICA6IEFzbkNvbnZlcnQuc2VyaWFsaXplKGRhdGEpO1xuICAgICAgICBjb25zdCBhc24gPSBhc24xanMuZnJvbUJFUihidWYpO1xuICAgICAgICBpZiAoYXNuLm9mZnNldCA9PT0gLTEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGRlY29kZSBBU04uMSBkYXRhLiAke2Fzbi5yZXN1bHQuZXJyb3J9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFzbi5yZXN1bHQudG9TdHJpbmcoKTtcbiAgICB9XG59XG4iLCAiZXhwb3J0ICogZnJvbSBcIi4vY29udmVydGVyc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdHlwZXMvaW5kZXhcIjtcbmV4cG9ydCB7IEFzblByb3AsIEFzblR5cGUsIEFzbkNob2ljZVR5cGUsIEFzblNlcXVlbmNlVHlwZSwgQXNuU2V0VHlwZSB9IGZyb20gXCIuL2RlY29yYXRvcnNcIjtcbmV4cG9ydCB7IEFzblR5cGVUeXBlcywgQXNuUHJvcFR5cGVzIH0gZnJvbSBcIi4vZW51bXNcIjtcbmV4cG9ydCB7IEFzblBhcnNlciB9IGZyb20gXCIuL3BhcnNlclwiO1xuZXhwb3J0IHsgQXNuU2VyaWFsaXplciB9IGZyb20gXCIuL3NlcmlhbGl6ZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2Vycm9yc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vb2JqZWN0c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29udmVydFwiO1xuIiwgIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlLCBTdXBwcmVzc2VkRXJyb3IsIFN5bWJvbCwgSXRlcmF0b3IgKi9cblxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XG4gIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XG4gIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59XG5cbmV4cG9ydCB2YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcbiAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcbiAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0O1xuICB9XG4gIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcbiAgdmFyIHQgPSB7fTtcbiAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICB0W3BdID0gc1twXTtcbiAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XG4gICAgICB9XG4gIHJldHVybiB0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19wYXJhbShwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2VzRGVjb3JhdGUoY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHtcbiAgZnVuY3Rpb24gYWNjZXB0KGYpIHsgaWYgKGYgIT09IHZvaWQgMCAmJiB0eXBlb2YgZiAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRnVuY3Rpb24gZXhwZWN0ZWRcIik7IHJldHVybiBmOyB9XG4gIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleSA9IGtpbmQgPT09IFwiZ2V0dGVyXCIgPyBcImdldFwiIDoga2luZCA9PT0gXCJzZXR0ZXJcIiA/IFwic2V0XCIgOiBcInZhbHVlXCI7XG4gIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bXCJzdGF0aWNcIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsO1xuICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTtcbiAgdmFyIF8sIGRvbmUgPSBmYWxzZTtcbiAgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZhciBjb250ZXh0ID0ge307XG4gICAgICBmb3IgKHZhciBwIGluIGNvbnRleHRJbikgY29udGV4dFtwXSA9IHAgPT09IFwiYWNjZXNzXCIgPyB7fSA6IGNvbnRleHRJbltwXTtcbiAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dC5hY2Nlc3NbcF0gPSBjb250ZXh0SW4uYWNjZXNzW3BdO1xuICAgICAgY29udGV4dC5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uIChmKSB7IGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkXCIpOyBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmIHx8IG51bGwpKTsgfTtcbiAgICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpXSkoa2luZCA9PT0gXCJhY2Nlc3NvclwiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleV0sIGNvbnRleHQpO1xuICAgICAgaWYgKGtpbmQgPT09IFwiYWNjZXNzb3JcIikge1xuICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSBcIm9iamVjdFwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF87XG4gICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXztcbiAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF8pO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoXyA9IGFjY2VwdChyZXN1bHQpKSB7XG4gICAgICAgICAgaWYgKGtpbmQgPT09IFwiZmllbGRcIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXyk7XG4gICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleV0gPSBfO1xuICAgICAgfVxuICB9XG4gIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTtcbiAgZG9uZSA9IHRydWU7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19ydW5Jbml0aWFsaXplcnModGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZSkge1xuICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhbHVlID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnLCB2YWx1ZSkgOiBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnKTtcbiAgfVxuICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZSA6IHZvaWQgMDtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3Byb3BLZXkoeCkge1xuICByZXR1cm4gdHlwZW9mIHggPT09IFwic3ltYm9sXCIgPyB4IDogXCJcIi5jb25jYXQoeCk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19zZXRGdW5jdGlvbk5hbWUoZiwgbmFtZSwgcHJlZml4KSB7XG4gIGlmICh0eXBlb2YgbmFtZSA9PT0gXCJzeW1ib2xcIikgbmFtZSA9IG5hbWUuZGVzY3JpcHRpb24gPyBcIltcIi5jb25jYXQobmFtZS5kZXNjcmlwdGlvbiwgXCJdXCIpIDogXCJcIjtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCBcIm5hbWVcIiwgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiBwcmVmaXggPyBcIlwiLmNvbmNhdChwcmVmaXgsIFwiIFwiLCBuYW1lKSA6IG5hbWUgfSk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xuICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xuICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEl0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKTtcbiAgcmV0dXJuIGcubmV4dCA9IHZlcmIoMCksIGdbXCJ0aHJvd1wiXSA9IHZlcmIoMSksIGdbXCJyZXR1cm5cIl0gPSB2ZXJiKDIpLCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xuICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gIH1cbn1cblxuZXhwb3J0IHZhciBfX2NyZWF0ZUJpbmRpbmcgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIG9bazJdID0gbVtrXTtcbn0pO1xuXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIG8pIHtcbiAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xuICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xuICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcbiAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XG4gICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xuICAgICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xuICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghbSkgcmV0dXJuIG87XG4gIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICB0cnkge1xuICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gIH1cbiAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gIGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgIH1cbiAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICB9XG4gIHJldHVybiBhcjtcbn1cblxuLyoqIEBkZXByZWNhdGVkICovXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWQoKSB7XG4gIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxuICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xuICByZXR1cm4gYXI7XG59XG5cbi8qKiBAZGVwcmVjYXRlZCAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xuICBmb3IgKHZhciBzID0gMCwgaSA9IDAsIGlsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHMgKz0gYXJndW1lbnRzW2ldLmxlbmd0aDtcbiAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxuICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXG4gICAgICAgICAgcltrXSA9IGFbal07XG4gIHJldHVybiByO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheSh0bywgZnJvbSwgcGFjaykge1xuICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgICAgfVxuICB9XG4gIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XG4gIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcbiAgcmV0dXJuIGkgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgQXN5bmNJdGVyYXRvciA9PT0gXCJmdW5jdGlvblwiID8gQXN5bmNJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiLCBhd2FpdFJldHVybiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcbiAgZnVuY3Rpb24gYXdhaXRSZXR1cm4oZikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGYsIHJlamVjdCk7IH07IH1cbiAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlmIChnW25dKSB7IGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IGlmIChmKSBpW25dID0gZihpW25dKTsgfSB9XG4gIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cbiAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XG4gIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cbiAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcbiAgdmFyIGksIHA7XG4gIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XG4gIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IGZhbHNlIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcbiAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XG4gIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XG4gIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XG4gIHJldHVybiBjb29rZWQ7XG59O1xuXG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59O1xuXG52YXIgb3duS2V5cyA9IGZ1bmN0aW9uKG8pIHtcbiAgb3duS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIChvKSB7XG4gICAgdmFyIGFyID0gW107XG4gICAgZm9yICh2YXIgayBpbiBvKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIGspKSBhclthci5sZW5ndGhdID0gaztcbiAgICByZXR1cm4gYXI7XG4gIH07XG4gIHJldHVybiBvd25LZXlzKG8pO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0U3Rhcihtb2QpIHtcbiAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgPSBvd25LZXlzKG1vZCksIGkgPSAwOyBpIDwgay5sZW5ndGg7IGkrKykgaWYgKGtbaV0gIT09IFwiZGVmYXVsdFwiKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGtbaV0pO1xuICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnREZWZhdWx0KG1vZCkge1xuICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IGRlZmF1bHQ6IG1vZCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcbiAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xuICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xuICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XG4gIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcbiAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4oc3RhdGUsIHJlY2VpdmVyKSB7XG4gIGlmIChyZWNlaXZlciA9PT0gbnVsbCB8fCAodHlwZW9mIHJlY2VpdmVyICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiByZWNlaXZlciAhPT0gXCJmdW5jdGlvblwiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB1c2UgJ2luJyBvcGVyYXRvciBvbiBub24tb2JqZWN0XCIpO1xuICByZXR1cm4gdHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciA9PT0gc3RhdGUgOiBzdGF0ZS5oYXMocmVjZWl2ZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hZGREaXNwb3NhYmxlUmVzb3VyY2UoZW52LCB2YWx1ZSwgYXN5bmMpIHtcbiAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB2b2lkIDApIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IGV4cGVjdGVkLlwiKTtcbiAgICB2YXIgZGlzcG9zZSwgaW5uZXI7XG4gICAgaWYgKGFzeW5jKSB7XG4gICAgICBpZiAoIVN5bWJvbC5hc3luY0Rpc3Bvc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNEaXNwb3NlIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgICAgIGRpc3Bvc2UgPSB2YWx1ZVtTeW1ib2wuYXN5bmNEaXNwb3NlXTtcbiAgICB9XG4gICAgaWYgKGRpc3Bvc2UgPT09IHZvaWQgMCkge1xuICAgICAgaWYgKCFTeW1ib2wuZGlzcG9zZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5kaXNwb3NlIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgICAgIGRpc3Bvc2UgPSB2YWx1ZVtTeW1ib2wuZGlzcG9zZV07XG4gICAgICBpZiAoYXN5bmMpIGlubmVyID0gZGlzcG9zZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkaXNwb3NlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3Qgbm90IGRpc3Bvc2FibGUuXCIpO1xuICAgIGlmIChpbm5lcikgZGlzcG9zZSA9IGZ1bmN0aW9uKCkgeyB0cnkgeyBpbm5lci5jYWxsKHRoaXMpOyB9IGNhdGNoIChlKSB7IHJldHVybiBQcm9taXNlLnJlamVjdChlKTsgfSB9O1xuICAgIGVudi5zdGFjay5wdXNoKHsgdmFsdWU6IHZhbHVlLCBkaXNwb3NlOiBkaXNwb3NlLCBhc3luYzogYXN5bmMgfSk7XG4gIH1cbiAgZWxzZSBpZiAoYXN5bmMpIHtcbiAgICBlbnYuc3RhY2sucHVzaCh7IGFzeW5jOiB0cnVlIH0pO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxudmFyIF9TdXBwcmVzc2VkRXJyb3IgPSB0eXBlb2YgU3VwcHJlc3NlZEVycm9yID09PSBcImZ1bmN0aW9uXCIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IsIHN1cHByZXNzZWQsIG1lc3NhZ2UpIHtcbiAgdmFyIGUgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIHJldHVybiBlLm5hbWUgPSBcIlN1cHByZXNzZWRFcnJvclwiLCBlLmVycm9yID0gZXJyb3IsIGUuc3VwcHJlc3NlZCA9IHN1cHByZXNzZWQsIGU7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19kaXNwb3NlUmVzb3VyY2VzKGVudikge1xuICBmdW5jdGlvbiBmYWlsKGUpIHtcbiAgICBlbnYuZXJyb3IgPSBlbnYuaGFzRXJyb3IgPyBuZXcgX1N1cHByZXNzZWRFcnJvcihlLCBlbnYuZXJyb3IsIFwiQW4gZXJyb3Igd2FzIHN1cHByZXNzZWQgZHVyaW5nIGRpc3Bvc2FsLlwiKSA6IGU7XG4gICAgZW52Lmhhc0Vycm9yID0gdHJ1ZTtcbiAgfVxuICB2YXIgciwgcyA9IDA7XG4gIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgd2hpbGUgKHIgPSBlbnYuc3RhY2sucG9wKCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghci5hc3luYyAmJiBzID09PSAxKSByZXR1cm4gcyA9IDAsIGVudi5zdGFjay5wdXNoKHIpLCBQcm9taXNlLnJlc29sdmUoKS50aGVuKG5leHQpO1xuICAgICAgICBpZiAoci5kaXNwb3NlKSB7XG4gICAgICAgICAgdmFyIHJlc3VsdCA9IHIuZGlzcG9zZS5jYWxsKHIudmFsdWUpO1xuICAgICAgICAgIGlmIChyLmFzeW5jKSByZXR1cm4gcyB8PSAyLCBQcm9taXNlLnJlc29sdmUocmVzdWx0KS50aGVuKG5leHQsIGZ1bmN0aW9uKGUpIHsgZmFpbChlKTsgcmV0dXJuIG5leHQoKTsgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBzIHw9IDE7XG4gICAgICB9XG4gICAgICBjYXRjaCAoZSkge1xuICAgICAgICBmYWlsKGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocyA9PT0gMSkgcmV0dXJuIGVudi5oYXNFcnJvciA/IFByb21pc2UucmVqZWN0KGVudi5lcnJvcikgOiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICBpZiAoZW52Lmhhc0Vycm9yKSB0aHJvdyBlbnYuZXJyb3I7XG4gIH1cbiAgcmV0dXJuIG5leHQoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fcmV3cml0ZVJlbGF0aXZlSW1wb3J0RXh0ZW5zaW9uKHBhdGgsIHByZXNlcnZlSnN4KSB7XG4gIGlmICh0eXBlb2YgcGF0aCA9PT0gXCJzdHJpbmdcIiAmJiAvXlxcLlxcLj9cXC8vLnRlc3QocGF0aCkpIHtcbiAgICAgIHJldHVybiBwYXRoLnJlcGxhY2UoL1xcLih0c3gpJHwoKD86XFwuZCk/KSgoPzpcXC5bXi4vXSs/KT8pXFwuKFtjbV0/KXRzJC9pLCBmdW5jdGlvbiAobSwgdHN4LCBkLCBleHQsIGNtKSB7XG4gICAgICAgICAgcmV0dXJuIHRzeCA/IHByZXNlcnZlSnN4ID8gXCIuanN4XCIgOiBcIi5qc1wiIDogZCAmJiAoIWV4dCB8fCAhY20pID8gbSA6IChkICsgZXh0ICsgXCIuXCIgKyBjbS50b0xvd2VyQ2FzZSgpICsgXCJqc1wiKTtcbiAgICAgIH0pO1xuICB9XG4gIHJldHVybiBwYXRoO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZXh0ZW5kcyxcbiAgX19hc3NpZ24sXG4gIF9fcmVzdCxcbiAgX19kZWNvcmF0ZSxcbiAgX19wYXJhbSxcbiAgX19lc0RlY29yYXRlLFxuICBfX3J1bkluaXRpYWxpemVycyxcbiAgX19wcm9wS2V5LFxuICBfX3NldEZ1bmN0aW9uTmFtZSxcbiAgX19tZXRhZGF0YSxcbiAgX19hd2FpdGVyLFxuICBfX2dlbmVyYXRvcixcbiAgX19jcmVhdGVCaW5kaW5nLFxuICBfX2V4cG9ydFN0YXIsXG4gIF9fdmFsdWVzLFxuICBfX3JlYWQsXG4gIF9fc3ByZWFkLFxuICBfX3NwcmVhZEFycmF5cyxcbiAgX19zcHJlYWRBcnJheSxcbiAgX19hd2FpdCxcbiAgX19hc3luY0dlbmVyYXRvcixcbiAgX19hc3luY0RlbGVnYXRvcixcbiAgX19hc3luY1ZhbHVlcyxcbiAgX19tYWtlVGVtcGxhdGVPYmplY3QsXG4gIF9faW1wb3J0U3RhcixcbiAgX19pbXBvcnREZWZhdWx0LFxuICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0LFxuICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0LFxuICBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4sXG4gIF9fYWRkRGlzcG9zYWJsZVJlc291cmNlLFxuICBfX2Rpc3Bvc2VSZXNvdXJjZXMsXG4gIF9fcmV3cml0ZVJlbGF0aXZlSW1wb3J0RXh0ZW5zaW9uLFxufTtcbiIsICIvKipcbiAqIENvcHlyaWdodCAoYykgMjAyMCwgUGVjdWxpYXIgVmVudHVyZXMsIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKi9cblxuY2xhc3MgSnNvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3IobWVzc2FnZSwgaW5uZXJFcnJvcikge1xyXG4gICAgICAgIHN1cGVyKGlubmVyRXJyb3JcclxuICAgICAgICAgICAgPyBgJHttZXNzYWdlfS4gU2VlIHRoZSBpbm5lciBleGNlcHRpb24gZm9yIG1vcmUgZGV0YWlscy5gXHJcbiAgICAgICAgICAgIDogbWVzc2FnZSk7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcclxuICAgICAgICB0aGlzLmlubmVyRXJyb3IgPSBpbm5lckVycm9yO1xyXG4gICAgfVxyXG59XG5cbmNsYXNzIFRyYW5zZm9ybUVycm9yIGV4dGVuZHMgSnNvbkVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKHNjaGVtYSwgbWVzc2FnZSwgaW5uZXJFcnJvcikge1xyXG4gICAgICAgIHN1cGVyKG1lc3NhZ2UsIGlubmVyRXJyb3IpO1xyXG4gICAgICAgIHRoaXMuc2NoZW1hID0gc2NoZW1hO1xyXG4gICAgfVxyXG59XG5cbmNsYXNzIFBhcnNlckVycm9yIGV4dGVuZHMgVHJhbnNmb3JtRXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3Ioc2NoZW1hLCBtZXNzYWdlLCBpbm5lckVycm9yKSB7XHJcbiAgICAgICAgc3VwZXIoc2NoZW1hLCBgSlNPTiBkb2Vzbid0IG1hdGNoIHRvICcke3NjaGVtYS50YXJnZXQubmFtZX0nIHNjaGVtYS4gJHttZXNzYWdlfWAsIGlubmVyRXJyb3IpO1xyXG4gICAgfVxyXG59XG5cbmNsYXNzIFZhbGlkYXRpb25FcnJvciBleHRlbmRzIEpzb25FcnJvciB7XHJcbn1cblxuY2xhc3MgU2VyaWFsaXplckVycm9yIGV4dGVuZHMgSnNvbkVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKHNjaGVtYU5hbWUsIG1lc3NhZ2UsIGlubmVyRXJyb3IpIHtcclxuICAgICAgICBzdXBlcihgQ2Fubm90IHNlcmlhbGl6ZSBieSAnJHtzY2hlbWFOYW1lfScgc2NoZW1hLiAke21lc3NhZ2V9YCwgaW5uZXJFcnJvcik7XHJcbiAgICAgICAgdGhpcy5zY2hlbWFOYW1lID0gc2NoZW1hTmFtZTtcclxuICAgIH1cclxufVxuXG5jbGFzcyBLZXlFcnJvciBleHRlbmRzIFBhcnNlckVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKHNjaGVtYSwga2V5cywgZXJyb3JzID0ge30pIHtcclxuICAgICAgICBzdXBlcihzY2hlbWEsIFwiU29tZSBrZXlzIGRvZXNuJ3QgbWF0Y2ggdG8gc2NoZW1hXCIpO1xyXG4gICAgICAgIHRoaXMua2V5cyA9IGtleXM7XHJcbiAgICAgICAgdGhpcy5lcnJvcnMgPSBlcnJvcnM7XHJcbiAgICB9XHJcbn1cblxudmFyIEpzb25Qcm9wVHlwZXM7XHJcbihmdW5jdGlvbiAoSnNvblByb3BUeXBlcykge1xyXG4gICAgSnNvblByb3BUeXBlc1tKc29uUHJvcFR5cGVzW1wiQW55XCJdID0gMF0gPSBcIkFueVwiO1xyXG4gICAgSnNvblByb3BUeXBlc1tKc29uUHJvcFR5cGVzW1wiQm9vbGVhblwiXSA9IDFdID0gXCJCb29sZWFuXCI7XHJcbiAgICBKc29uUHJvcFR5cGVzW0pzb25Qcm9wVHlwZXNbXCJOdW1iZXJcIl0gPSAyXSA9IFwiTnVtYmVyXCI7XHJcbiAgICBKc29uUHJvcFR5cGVzW0pzb25Qcm9wVHlwZXNbXCJTdHJpbmdcIl0gPSAzXSA9IFwiU3RyaW5nXCI7XHJcbn0pKEpzb25Qcm9wVHlwZXMgfHwgKEpzb25Qcm9wVHlwZXMgPSB7fSkpO1xuXG5mdW5jdGlvbiBjaGVja1R5cGUodmFsdWUsIHR5cGUpIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgIGNhc2UgSnNvblByb3BUeXBlcy5Cb29sZWFuOlxyXG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIjtcclxuICAgICAgICBjYXNlIEpzb25Qcm9wVHlwZXMuTnVtYmVyOlxyXG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiO1xyXG4gICAgICAgIGNhc2UgSnNvblByb3BUeXBlcy5TdHJpbmc6XHJcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG5mdW5jdGlvbiB0aHJvd0lmVHlwZUlzV3JvbmcodmFsdWUsIHR5cGUpIHtcclxuICAgIGlmICghY2hlY2tUeXBlKHZhbHVlLCB0eXBlKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFZhbHVlIG11c3QgYmUgJHtKc29uUHJvcFR5cGVzW3R5cGVdfWApO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGlzQ29udmVydGlibGUodGFyZ2V0KSB7XHJcbiAgICBpZiAodGFyZ2V0ICYmIHRhcmdldC5wcm90b3R5cGUpIHtcclxuICAgICAgICBpZiAodGFyZ2V0LnByb3RvdHlwZS50b0pTT04gJiYgdGFyZ2V0LnByb3RvdHlwZS5mcm9tSlNPTikge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpc0NvbnZlcnRpYmxlKHRhcmdldC5wcm90b3R5cGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHJldHVybiAhISh0YXJnZXQgJiYgdGFyZ2V0LnRvSlNPTiAmJiB0YXJnZXQuZnJvbUpTT04pO1xyXG4gICAgfVxyXG59XG5cbmNsYXNzIEpzb25TY2hlbWFTdG9yYWdlIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuaXRlbXMgPSBuZXcgTWFwKCk7XHJcbiAgICB9XHJcbiAgICBoYXModGFyZ2V0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXMuaGFzKHRhcmdldCkgfHwgISF0aGlzLmZpbmRQYXJlbnRTY2hlbWEodGFyZ2V0KTtcclxuICAgIH1cclxuICAgIGdldCh0YXJnZXQpIHtcclxuICAgICAgICBjb25zdCBzY2hlbWEgPSB0aGlzLml0ZW1zLmdldCh0YXJnZXQpIHx8IHRoaXMuZmluZFBhcmVudFNjaGVtYSh0YXJnZXQpO1xyXG4gICAgICAgIGlmICghc2NoZW1hKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBnZXQgc2NoZW1hIGZvciBjdXJyZW50IHRhcmdldFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHNjaGVtYTtcclxuICAgIH1cclxuICAgIGNyZWF0ZSh0YXJnZXQpIHtcclxuICAgICAgICBjb25zdCBzY2hlbWEgPSB7IG5hbWVzOiB7fSB9O1xyXG4gICAgICAgIGNvbnN0IHBhcmVudFNjaGVtYSA9IHRoaXMuZmluZFBhcmVudFNjaGVtYSh0YXJnZXQpO1xyXG4gICAgICAgIGlmIChwYXJlbnRTY2hlbWEpIHtcclxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihzY2hlbWEsIHBhcmVudFNjaGVtYSk7XHJcbiAgICAgICAgICAgIHNjaGVtYS5uYW1lcyA9IHt9O1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG5hbWUgaW4gcGFyZW50U2NoZW1hLm5hbWVzKSB7XHJcbiAgICAgICAgICAgICAgICBzY2hlbWEubmFtZXNbbmFtZV0gPSBPYmplY3QuYXNzaWduKHt9LCBwYXJlbnRTY2hlbWEubmFtZXNbbmFtZV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNjaGVtYS50YXJnZXQgPSB0YXJnZXQ7XHJcbiAgICAgICAgcmV0dXJuIHNjaGVtYTtcclxuICAgIH1cclxuICAgIHNldCh0YXJnZXQsIHNjaGVtYSkge1xyXG4gICAgICAgIHRoaXMuaXRlbXMuc2V0KHRhcmdldCwgc2NoZW1hKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIGZpbmRQYXJlbnRTY2hlbWEodGFyZ2V0KSB7XHJcbiAgICAgICAgY29uc3QgcGFyZW50ID0gdGFyZ2V0Ll9fcHJvdG9fXztcclxuICAgICAgICBpZiAocGFyZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IHRoaXMuaXRlbXMuZ2V0KHBhcmVudCk7XHJcbiAgICAgICAgICAgIHJldHVybiBzY2hlbWEgfHwgdGhpcy5maW5kUGFyZW50U2NoZW1hKHBhcmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59XG5cbmNvbnN0IERFRkFVTFRfU0NIRU1BID0gXCJkZWZhdWx0XCI7XHJcbmNvbnN0IHNjaGVtYVN0b3JhZ2UgPSBuZXcgSnNvblNjaGVtYVN0b3JhZ2UoKTtcblxuY2xhc3MgUGF0dGVyblZhbGlkYXRpb24ge1xyXG4gICAgY29uc3RydWN0b3IocGF0dGVybikge1xyXG4gICAgICAgIHRoaXMucGF0dGVybiA9IG5ldyBSZWdFeHAocGF0dGVybik7XHJcbiAgICB9XHJcbiAgICB2YWxpZGF0ZSh2YWx1ZSkge1xyXG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSBuZXcgUmVnRXhwKHRoaXMucGF0dGVybi5zb3VyY2UsIHRoaXMucGF0dGVybi5mbGFncyk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFwiSW5jb21pbmcgdmFsdWUgbXVzdCBiZSBzdHJpbmdcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghcGF0dGVybi5leGVjKHZhbHVlKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBWYWx1ZSBkb2Vzbid0IG1hdGNoIHRvIHBhdHRlcm4gJyR7cGF0dGVybi50b1N0cmluZygpfSdgKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cblxuY2xhc3MgSW5jbHVzaXZlVmFsaWRhdGlvbiB7XHJcbiAgICBjb25zdHJ1Y3RvcihtaW4gPSBOdW1iZXIuTUlOX1ZBTFVFLCBtYXggPSBOdW1iZXIuTUFYX1ZBTFVFKSB7XHJcbiAgICAgICAgdGhpcy5taW4gPSBtaW47XHJcbiAgICAgICAgdGhpcy5tYXggPSBtYXg7XHJcbiAgICB9XHJcbiAgICB2YWxpZGF0ZSh2YWx1ZSkge1xyXG4gICAgICAgIHRocm93SWZUeXBlSXNXcm9uZyh2YWx1ZSwgSnNvblByb3BUeXBlcy5OdW1iZXIpO1xyXG4gICAgICAgIGlmICghKHRoaXMubWluIDw9IHZhbHVlICYmIHZhbHVlIDw9IHRoaXMubWF4KSkge1xyXG4gICAgICAgICAgICBjb25zdCBtaW4gPSB0aGlzLm1pbiA9PT0gTnVtYmVyLk1JTl9WQUxVRSA/IFwiTUlOXCIgOiB0aGlzLm1pbjtcclxuICAgICAgICAgICAgY29uc3QgbWF4ID0gdGhpcy5tYXggPT09IE51bWJlci5NQVhfVkFMVUUgPyBcIk1BWFwiIDogdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoYFZhbHVlIGRvZXNuJ3QgbWF0Y2ggdG8gZGlhcGFzb24gWyR7bWlufSwke21heH1dYCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XG5cbmNsYXNzIEV4Y2x1c2l2ZVZhbGlkYXRpb24ge1xyXG4gICAgY29uc3RydWN0b3IobWluID0gTnVtYmVyLk1JTl9WQUxVRSwgbWF4ID0gTnVtYmVyLk1BWF9WQUxVRSkge1xyXG4gICAgICAgIHRoaXMubWluID0gbWluO1xyXG4gICAgICAgIHRoaXMubWF4ID0gbWF4O1xyXG4gICAgfVxyXG4gICAgdmFsaWRhdGUodmFsdWUpIHtcclxuICAgICAgICB0aHJvd0lmVHlwZUlzV3JvbmcodmFsdWUsIEpzb25Qcm9wVHlwZXMuTnVtYmVyKTtcclxuICAgICAgICBpZiAoISh0aGlzLm1pbiA8IHZhbHVlICYmIHZhbHVlIDwgdGhpcy5tYXgpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1pbiA9IHRoaXMubWluID09PSBOdW1iZXIuTUlOX1ZBTFVFID8gXCJNSU5cIiA6IHRoaXMubWluO1xyXG4gICAgICAgICAgICBjb25zdCBtYXggPSB0aGlzLm1heCA9PT0gTnVtYmVyLk1BWF9WQUxVRSA/IFwiTUFYXCIgOiB0aGlzLm1heDtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgVmFsdWUgZG9lc24ndCBtYXRjaCB0byBkaWFwYXNvbiAoJHttaW59LCR7bWF4fSlgKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cblxuY2xhc3MgTGVuZ3RoVmFsaWRhdGlvbiB7XHJcbiAgICBjb25zdHJ1Y3RvcihsZW5ndGgsIG1pbkxlbmd0aCwgbWF4TGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5sZW5ndGggPSBsZW5ndGg7XHJcbiAgICAgICAgdGhpcy5taW5MZW5ndGggPSBtaW5MZW5ndGg7XHJcbiAgICAgICAgdGhpcy5tYXhMZW5ndGggPSBtYXhMZW5ndGg7XHJcbiAgICB9XHJcbiAgICB2YWxpZGF0ZSh2YWx1ZSkge1xyXG4gICAgICAgIGlmICh0aGlzLmxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggIT09IHRoaXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBWYWx1ZSBsZW5ndGggbXVzdCBiZSBleGFjdGx5ICR7dGhpcy5sZW5ndGh9LmApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMubWluTGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA8IHRoaXMubWluTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBWYWx1ZSBsZW5ndGggbXVzdCBiZSBtb3JlIHRoYW4gJHt0aGlzLm1pbkxlbmd0aH0uYCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMubWF4TGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IHRoaXMubWF4TGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBWYWx1ZSBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gJHt0aGlzLm1heExlbmd0aH0uYCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cblxuY2xhc3MgRW51bWVyYXRpb25WYWxpZGF0aW9uIHtcclxuICAgIGNvbnN0cnVjdG9yKGVudW1lcmF0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5lbnVtZXJhdGlvbiA9IGVudW1lcmF0aW9uO1xyXG4gICAgfVxyXG4gICAgdmFsaWRhdGUodmFsdWUpIHtcclxuICAgICAgICB0aHJvd0lmVHlwZUlzV3JvbmcodmFsdWUsIEpzb25Qcm9wVHlwZXMuU3RyaW5nKTtcclxuICAgICAgICBpZiAoIXRoaXMuZW51bWVyYXRpb24uaW5jbHVkZXModmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoYFZhbHVlIG11c3QgYmUgb25lIG9mICR7dGhpcy5lbnVtZXJhdGlvbi5tYXAoKHYpID0+IGAnJHt2fSdgKS5qb2luKFwiLCBcIil9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XG5cbmNsYXNzIEpzb25UcmFuc2Zvcm0ge1xyXG4gICAgc3RhdGljIGNoZWNrVmFsdWVzKGRhdGEsIHNjaGVtYUl0ZW0pIHtcclxuICAgICAgICBjb25zdCB2YWx1ZXMgPSBBcnJheS5pc0FycmF5KGRhdGEpID8gZGF0YSA6IFtkYXRhXTtcclxuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHZhbGlkYXRpb24gb2Ygc2NoZW1hSXRlbS52YWxpZGF0aW9ucykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRpb24gaW5zdGFuY2VvZiBMZW5ndGhWYWxpZGF0aW9uICYmIHNjaGVtYUl0ZW0ucmVwZWF0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uLnZhbGlkYXRlKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbi52YWxpZGF0ZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgY2hlY2tUeXBlcyh2YWx1ZSwgc2NoZW1hSXRlbSkge1xyXG4gICAgICAgIGlmIChzY2hlbWFJdGVtLnJlcGVhdGVkICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVmFsdWUgbXVzdCBiZSBBcnJheVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWFJdGVtLnR5cGUgPT09IFwibnVtYmVyXCIpIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV07XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgdiBvZiB2YWx1ZXMpIHtcclxuICAgICAgICAgICAgICAgIHRocm93SWZUeXBlSXNXcm9uZyh2LCBzY2hlbWFJdGVtLnR5cGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgc3RhdGljIGdldFNjaGVtYUJ5TmFtZShzY2hlbWEsIG5hbWUgPSBERUZBVUxUX1NDSEVNQSkge1xyXG4gICAgICAgIHJldHVybiB7IC4uLnNjaGVtYS5uYW1lc1tERUZBVUxUX1NDSEVNQV0sIC4uLnNjaGVtYS5uYW1lc1tuYW1lXSB9O1xyXG4gICAgfVxyXG59XG5cbmNsYXNzIEpzb25TZXJpYWxpemVyIGV4dGVuZHMgSnNvblRyYW5zZm9ybSB7XHJcbiAgICBzdGF0aWMgc2VyaWFsaXplKG9iaiwgb3B0aW9ucywgcmVwbGFjZXIsIHNwYWNlKSB7XHJcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKG9iaiwgb3B0aW9ucyk7XHJcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGpzb24sIHJlcGxhY2VyLCBzcGFjZSk7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgdG9KU09OKG9iaiwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICAgICAgbGV0IHJlcztcclxuICAgICAgICBsZXQgdGFyZ2V0U2NoZW1hID0gb3B0aW9ucy50YXJnZXRTY2hlbWE7XHJcbiAgICAgICAgY29uc3Qgc2NoZW1hTmFtZSA9IG9wdGlvbnMuc2NoZW1hTmFtZSB8fCBERUZBVUxUX1NDSEVNQTtcclxuICAgICAgICBpZiAoaXNDb252ZXJ0aWJsZShvYmopKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBvYmoudG9KU09OKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcclxuICAgICAgICAgICAgcmVzID0gW107XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBvYmopIHtcclxuICAgICAgICAgICAgICAgIHJlcy5wdXNoKHRoaXMudG9KU09OKGl0ZW0sIG9wdGlvbnMpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAgIGlmICh0YXJnZXRTY2hlbWEgJiYgIXNjaGVtYVN0b3JhZ2UuaGFzKHRhcmdldFNjaGVtYSkpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBKc29uRXJyb3IoXCJDYW5ub3QgZ2V0IHNjaGVtYSBmb3IgYHRhcmdldFNjaGVtYWAgcGFyYW1cIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGFyZ2V0U2NoZW1hID0gKHRhcmdldFNjaGVtYSB8fCBvYmouY29uc3RydWN0b3IpO1xyXG4gICAgICAgICAgICBpZiAoc2NoZW1hU3RvcmFnZS5oYXModGFyZ2V0U2NoZW1hKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2NoZW1hID0gc2NoZW1hU3RvcmFnZS5nZXQodGFyZ2V0U2NoZW1hKTtcclxuICAgICAgICAgICAgICAgIHJlcyA9IHt9O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmFtZWRTY2hlbWEgPSB0aGlzLmdldFNjaGVtYUJ5TmFtZShzY2hlbWEsIHNjaGVtYU5hbWUpO1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gbmFtZWRTY2hlbWEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gbmFtZWRTY2hlbWFba2V5XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2JqSXRlbSA9IG9ialtrZXldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoaXRlbS5vcHRpb25hbCAmJiBvYmpJdGVtID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoaXRlbS5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCAmJiBvYmpJdGVtID09PSBpdGVtLmRlZmF1bHRWYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXRlbS5vcHRpb25hbCAmJiBvYmpJdGVtID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBTZXJpYWxpemVyRXJyb3IodGFyZ2V0U2NoZW1hLm5hbWUsIGBQcm9wZXJ0eSAnJHtrZXl9JyBpcyByZXF1aXJlZC5gKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW0udHlwZSA9PT0gXCJudW1iZXJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uY29udmVydGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0ucmVwZWF0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBvYmpJdGVtLm1hcCgoZWwpID0+IGl0ZW0uY29udmVydGVyLnRvSlNPTihlbCwgb2JqKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGl0ZW0uY29udmVydGVyLnRvSlNPTihvYmpJdGVtLCBvYmopO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gb2JqSXRlbTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLnJlcGVhdGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBvYmpJdGVtLm1hcCgoZWwpID0+IHRoaXMudG9KU09OKGVsLCB7IHNjaGVtYU5hbWUgfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLnRvSlNPTihvYmpJdGVtLCB7IHNjaGVtYU5hbWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja1R5cGVzKHZhbHVlLCBpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja1ZhbHVlcyh2YWx1ZSwgaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc1tpdGVtLm5hbWUgfHwga2V5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIFNlcmlhbGl6ZXJFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBTZXJpYWxpemVyRXJyb3Ioc2NoZW1hLnRhcmdldC5uYW1lLCBgUHJvcGVydHkgJyR7a2V5fScgaXMgd3JvbmcuICR7ZS5tZXNzYWdlfWAsIGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmVzID0ge307XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcclxuICAgICAgICAgICAgICAgICAgICByZXNba2V5XSA9IHRoaXMudG9KU09OKG9ialtrZXldLCB7IHNjaGVtYU5hbWUgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJlcyA9IG9iajtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxufVxuXG5jbGFzcyBKc29uUGFyc2VyIGV4dGVuZHMgSnNvblRyYW5zZm9ybSB7XHJcbiAgICBzdGF0aWMgcGFyc2UoZGF0YSwgb3B0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IG9iaiA9IEpTT04ucGFyc2UoZGF0YSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJvbUpTT04ob2JqLCBvcHRpb25zKTtcclxuICAgIH1cclxuICAgIHN0YXRpYyBmcm9tSlNPTih0YXJnZXQsIG9wdGlvbnMpIHtcclxuICAgICAgICBjb25zdCB0YXJnZXRTY2hlbWEgPSBvcHRpb25zLnRhcmdldFNjaGVtYTtcclxuICAgICAgICBjb25zdCBzY2hlbWFOYW1lID0gb3B0aW9ucy5zY2hlbWFOYW1lIHx8IERFRkFVTFRfU0NIRU1BO1xyXG4gICAgICAgIGNvbnN0IG9iaiA9IG5ldyB0YXJnZXRTY2hlbWEoKTtcclxuICAgICAgICBpZiAoaXNDb252ZXJ0aWJsZShvYmopKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBvYmouZnJvbUpTT04odGFyZ2V0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gc2NoZW1hU3RvcmFnZS5nZXQodGFyZ2V0U2NoZW1hKTtcclxuICAgICAgICBjb25zdCBuYW1lZFNjaGVtYSA9IHRoaXMuZ2V0U2NoZW1hQnlOYW1lKHNjaGVtYSwgc2NoZW1hTmFtZSk7XHJcbiAgICAgICAgY29uc3Qga2V5RXJyb3JzID0ge307XHJcbiAgICAgICAgaWYgKG9wdGlvbnMuc3RyaWN0UHJvcGVydHkgJiYgIUFycmF5LmlzQXJyYXkodGFyZ2V0KSkge1xyXG4gICAgICAgICAgICBKc29uUGFyc2VyLmNoZWNrU3RyaWN0UHJvcGVydHkodGFyZ2V0LCBuYW1lZFNjaGVtYSwgc2NoZW1hKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gbmFtZWRTY2hlbWEpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBuYW1lZFNjaGVtYVtrZXldO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IGl0ZW0ubmFtZSB8fCBrZXk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRhcmdldFtuYW1lXTtcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIChpdGVtLm9wdGlvbmFsIHx8IGl0ZW0uZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIWl0ZW0ub3B0aW9uYWwgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZXJFcnJvcihzY2hlbWEsIGBQcm9wZXJ0eSAnJHtuYW1lfScgaXMgcmVxdWlyZWQuYCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrVHlwZXModmFsdWUsIGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja1ZhbHVlcyh2YWx1ZSwgaXRlbSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIChpdGVtLnR5cGUpID09PSBcIm51bWJlclwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uY29udmVydGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLnJlcGVhdGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmpba2V5XSA9IHZhbHVlLm1hcCgoZWwpID0+IGl0ZW0uY29udmVydGVyLmZyb21KU09OKGVsLCBvYmopKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ialtrZXldID0gaXRlbS5jb252ZXJ0ZXIuZnJvbUpTT04odmFsdWUsIG9iaik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ialtrZXldID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3T3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLi4ub3B0aW9ucyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0U2NoZW1hOiBpdGVtLnR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYU5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5yZXBlYXRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmpba2V5XSA9IHZhbHVlLm1hcCgoZWwpID0+IHRoaXMuZnJvbUpTT04oZWwsIG5ld09wdGlvbnMpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ialtrZXldID0gdGhpcy5mcm9tSlNPTih2YWx1ZSwgbmV3T3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIShlIGluc3RhbmNlb2YgUGFyc2VyRXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZSA9IG5ldyBQYXJzZXJFcnJvcihzY2hlbWEsIGBQcm9wZXJ0eSAnJHtrZXl9JyBpcyB3cm9uZy4gJHtlLm1lc3NhZ2V9YCwgZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5zdHJpY3RBbGxLZXlzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAga2V5RXJyb3JzW2tleV0gPSBlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoa2V5RXJyb3JzKTtcclxuICAgICAgICBpZiAoa2V5cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEtleUVycm9yKHNjaGVtYSwga2V5cywga2V5RXJyb3JzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9iajtcclxuICAgIH1cclxuICAgIHN0YXRpYyBjaGVja1N0cmljdFByb3BlcnR5KHRhcmdldCwgbmFtZWRTY2hlbWEsIHNjaGVtYSkge1xyXG4gICAgICAgIGNvbnN0IGpzb25Qcm9wcyA9IE9iamVjdC5rZXlzKHRhcmdldCk7XHJcbiAgICAgICAgY29uc3Qgc2NoZW1hUHJvcHMgPSBPYmplY3Qua2V5cyhuYW1lZFNjaGVtYSk7XHJcbiAgICAgICAgY29uc3Qga2V5cyA9IFtdO1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGpzb25Qcm9wcykge1xyXG4gICAgICAgICAgICBpZiAoc2NoZW1hUHJvcHMuaW5kZXhPZihrZXkpID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGtleSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGtleXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBLZXlFcnJvcihzY2hlbWEsIGtleXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxuXG5mdW5jdGlvbiBnZXRWYWxpZGF0aW9ucyhpdGVtKSB7XHJcbiAgICBjb25zdCB2YWxpZGF0aW9ucyA9IFtdO1xyXG4gICAgaWYgKGl0ZW0ucGF0dGVybikge1xyXG4gICAgICAgIHZhbGlkYXRpb25zLnB1c2gobmV3IFBhdHRlcm5WYWxpZGF0aW9uKGl0ZW0ucGF0dGVybikpO1xyXG4gICAgfVxyXG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gSnNvblByb3BUeXBlcy5OdW1iZXIgfHwgaXRlbS50eXBlID09PSBKc29uUHJvcFR5cGVzLkFueSkge1xyXG4gICAgICAgIGlmIChpdGVtLm1pbkluY2x1c2l2ZSAhPT0gdW5kZWZpbmVkIHx8IGl0ZW0ubWF4SW5jbHVzaXZlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbnMucHVzaChuZXcgSW5jbHVzaXZlVmFsaWRhdGlvbihpdGVtLm1pbkluY2x1c2l2ZSwgaXRlbS5tYXhJbmNsdXNpdmUpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGl0ZW0ubWluRXhjbHVzaXZlICE9PSB1bmRlZmluZWQgfHwgaXRlbS5tYXhFeGNsdXNpdmUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9ucy5wdXNoKG5ldyBFeGNsdXNpdmVWYWxpZGF0aW9uKGl0ZW0ubWluRXhjbHVzaXZlLCBpdGVtLm1heEV4Y2x1c2l2ZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXRlbS5lbnVtZXJhdGlvbiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb25zLnB1c2gobmV3IEVudW1lcmF0aW9uVmFsaWRhdGlvbihpdGVtLmVudW1lcmF0aW9uKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gSnNvblByb3BUeXBlcy5TdHJpbmcgfHwgaXRlbS5yZXBlYXRlZCB8fCBpdGVtLnR5cGUgPT09IEpzb25Qcm9wVHlwZXMuQW55KSB7XHJcbiAgICAgICAgaWYgKGl0ZW0ubGVuZ3RoICE9PSB1bmRlZmluZWQgfHwgaXRlbS5taW5MZW5ndGggIT09IHVuZGVmaW5lZCB8fCBpdGVtLm1heExlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb25zLnB1c2gobmV3IExlbmd0aFZhbGlkYXRpb24oaXRlbS5sZW5ndGgsIGl0ZW0ubWluTGVuZ3RoLCBpdGVtLm1heExlbmd0aCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB2YWxpZGF0aW9ucztcclxufVxyXG5jb25zdCBKc29uUHJvcCA9IChvcHRpb25zID0ge30pID0+ICh0YXJnZXQsIHByb3BlcnR5S2V5KSA9PiB7XHJcbiAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBgQ2Fubm90IHNldCB0eXBlIGZvciAke3Byb3BlcnR5S2V5fSBwcm9wZXJ0eSBvZiAke3RhcmdldC5jb25zdHJ1Y3Rvci5uYW1lfSBzY2hlbWFgO1xyXG4gICAgbGV0IHNjaGVtYTtcclxuICAgIGlmICghc2NoZW1hU3RvcmFnZS5oYXModGFyZ2V0LmNvbnN0cnVjdG9yKSkge1xyXG4gICAgICAgIHNjaGVtYSA9IHNjaGVtYVN0b3JhZ2UuY3JlYXRlKHRhcmdldC5jb25zdHJ1Y3Rvcik7XHJcbiAgICAgICAgc2NoZW1hU3RvcmFnZS5zZXQodGFyZ2V0LmNvbnN0cnVjdG9yLCBzY2hlbWEpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgc2NoZW1hID0gc2NoZW1hU3RvcmFnZS5nZXQodGFyZ2V0LmNvbnN0cnVjdG9yKTtcclxuICAgICAgICBpZiAoc2NoZW1hLnRhcmdldCAhPT0gdGFyZ2V0LmNvbnN0cnVjdG9yKSB7XHJcbiAgICAgICAgICAgIHNjaGVtYSA9IHNjaGVtYVN0b3JhZ2UuY3JlYXRlKHRhcmdldC5jb25zdHJ1Y3Rvcik7XHJcbiAgICAgICAgICAgIHNjaGVtYVN0b3JhZ2Uuc2V0KHRhcmdldC5jb25zdHJ1Y3Rvciwgc2NoZW1hKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCBkZWZhdWx0U2NoZW1hID0ge1xyXG4gICAgICAgIHR5cGU6IEpzb25Qcm9wVHlwZXMuQW55LFxyXG4gICAgICAgIHZhbGlkYXRpb25zOiBbXSxcclxuICAgIH07XHJcbiAgICBjb25zdCBjb3B5T3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oZGVmYXVsdFNjaGVtYSwgb3B0aW9ucyk7XHJcbiAgICBjb3B5T3B0aW9ucy52YWxpZGF0aW9ucyA9IGdldFZhbGlkYXRpb25zKGNvcHlPcHRpb25zKTtcclxuICAgIGlmICh0eXBlb2YgY29weU9wdGlvbnMudHlwZSAhPT0gXCJudW1iZXJcIikge1xyXG4gICAgICAgIGlmICghc2NoZW1hU3RvcmFnZS5oYXMoY29weU9wdGlvbnMudHlwZSkgJiYgIWlzQ29udmVydGlibGUoY29weU9wdGlvbnMudHlwZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2Vycm9yTWVzc2FnZX0uIEFzc2lnbmluZyB0eXBlIGRvZXNuJ3QgaGF2ZSBzY2hlbWEuYCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IHNjaGVtYU5hbWVzO1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucy5zY2hlbWEpKSB7XHJcbiAgICAgICAgc2NoZW1hTmFtZXMgPSBvcHRpb25zLnNjaGVtYTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHNjaGVtYU5hbWVzID0gW29wdGlvbnMuc2NoZW1hIHx8IERFRkFVTFRfU0NIRU1BXTtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3Qgc2NoZW1hTmFtZSBvZiBzY2hlbWFOYW1lcykge1xyXG4gICAgICAgIGlmICghc2NoZW1hLm5hbWVzW3NjaGVtYU5hbWVdKSB7XHJcbiAgICAgICAgICAgIHNjaGVtYS5uYW1lc1tzY2hlbWFOYW1lXSA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuYW1lZFNjaGVtYSA9IHNjaGVtYS5uYW1lc1tzY2hlbWFOYW1lXTtcclxuICAgICAgICBuYW1lZFNjaGVtYVtwcm9wZXJ0eUtleV0gPSBjb3B5T3B0aW9ucztcclxuICAgIH1cclxufTtcblxuZXhwb3J0IHsgSnNvbkVycm9yLCBKc29uUGFyc2VyLCBKc29uUHJvcCwgSnNvblByb3BUeXBlcywgSnNvblNlcmlhbGl6ZXIsIEtleUVycm9yLCBQYXJzZXJFcnJvciwgU2VyaWFsaXplckVycm9yLCBUcmFuc2Zvcm1FcnJvciwgVmFsaWRhdGlvbkVycm9yIH07XG4iLCAiLyohXG4gQ29weXJpZ2h0IChjKSBQZWN1bGlhciBWZW50dXJlcywgTExDXG4qL1xuXG5pbXBvcnQgeyBDb252ZXJ0LCBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIsIGNvbWJpbmUgfSBmcm9tICdwdnRzdXRpbHMnO1xuZXhwb3J0IHsgQnVmZmVyU291cmNlQ29udmVydGVyIH0gZnJvbSAncHZ0c3V0aWxzJztcbmltcG9ydCB7IEFzblByb3AsIEFzblByb3BUeXBlcywgQXNuVHlwZSwgQXNuVHlwZVR5cGVzLCBBc25JbnRlZ2VyQ29udmVydGVyLCBBc25TZXJpYWxpemVyLCBBc25Db252ZXJ0IH0gZnJvbSAnQHBlY3VsaWFyL2FzbjEtc2NoZW1hJztcbmltcG9ydCB7IF9fZGVjb3JhdGUgfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgeyBKc29uUHJvcCwgSnNvblByb3BUeXBlcyB9IGZyb20gJ0BwZWN1bGlhci9qc29uLXNjaGVtYSc7XG5pbXBvcnQgKiBhcyBhc24xIGZyb20gJ2FzbjFqcyc7XG5cbmNsYXNzIENyeXB0b0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xufVxuXG5jbGFzcyBBbGdvcml0aG1FcnJvciBleHRlbmRzIENyeXB0b0Vycm9yIHtcbn1cblxuY2xhc3MgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvciBleHRlbmRzIENyeXB0b0Vycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXRob2ROYW1lKSB7XG4gICAgICAgIHN1cGVyKGBVbnN1cHBvcnRlZCBvcGVyYXRpb246ICR7bWV0aG9kTmFtZSA/IGAke21ldGhvZE5hbWV9YCA6IFwiXCJ9YCk7XG4gICAgfVxufVxuXG5jbGFzcyBPcGVyYXRpb25FcnJvciBleHRlbmRzIENyeXB0b0Vycm9yIHtcbn1cblxuY2xhc3MgUmVxdWlyZWRQcm9wZXJ0eUVycm9yIGV4dGVuZHMgQ3J5cHRvRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKHByb3BOYW1lKSB7XG4gICAgICAgIHN1cGVyKGAke3Byb3BOYW1lfTogTWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eWApO1xuICAgIH1cbn1cblxuY2xhc3MgUGVtQ29udmVydGVyIHtcbiAgICBzdGF0aWMgdG9BcnJheUJ1ZmZlcihwZW0pIHtcbiAgICAgICAgY29uc3QgYmFzZTY0ID0gcGVtXG4gICAgICAgICAgICAucmVwbGFjZSgvLXs1fShCRUdJTnxFTkQpIC4qLXs1fS9nLCBcIlwiKVxuICAgICAgICAgICAgLnJlcGxhY2UoXCJcXHJcIiwgXCJcIilcbiAgICAgICAgICAgIC5yZXBsYWNlKFwiXFxuXCIsIFwiXCIpO1xuICAgICAgICByZXR1cm4gQ29udmVydC5Gcm9tQmFzZTY0KGJhc2U2NCk7XG4gICAgfVxuICAgIHN0YXRpYyB0b1VpbnQ4QXJyYXkocGVtKSB7XG4gICAgICAgIGNvbnN0IGJ5dGVzID0gdGhpcy50b0FycmF5QnVmZmVyKHBlbSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShieXRlcyk7XG4gICAgfVxuICAgIHN0YXRpYyBmcm9tQnVmZmVyU291cmNlKGJ1ZmZlciwgdGFnKSB7XG4gICAgICAgIGNvbnN0IGJhc2U2NCA9IENvbnZlcnQuVG9CYXNlNjQoYnVmZmVyKTtcbiAgICAgICAgbGV0IHNsaWNlZDtcbiAgICAgICAgbGV0IG9mZnNldCA9IDA7XG4gICAgICAgIGNvbnN0IHJvd3MgPSBbXTtcbiAgICAgICAgd2hpbGUgKG9mZnNldCA8IGJhc2U2NC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHNsaWNlZCA9IGJhc2U2NC5zbGljZShvZmZzZXQsIG9mZnNldCArIDY0KTtcbiAgICAgICAgICAgIGlmIChzbGljZWQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcm93cy5wdXNoKHNsaWNlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9mZnNldCArPSA2NDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cHBlckNhc2VUYWcgPSB0YWcudG9VcHBlckNhc2UoKTtcbiAgICAgICAgcmV0dXJuIGAtLS0tLUJFR0lOICR7dXBwZXJDYXNlVGFnfS0tLS0tXFxuJHtyb3dzLmpvaW4oXCJcXG5cIil9XFxuLS0tLS1FTkQgJHt1cHBlckNhc2VUYWd9LS0tLS1gO1xuICAgIH1cbiAgICBzdGF0aWMgaXNQRU0oZGF0YSkge1xuICAgICAgICByZXR1cm4gLy0tLS0tQkVHSU4gListLS0tLVtBLVphLXowLTkrLys9XFxzXFxuXSstLS0tLUVORCAuKy0tLS0tL2kudGVzdChkYXRhKTtcbiAgICB9XG4gICAgc3RhdGljIGdldFRhZ05hbWUocGVtKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1BFTShwZW0pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCYWQgcGFyYW1ldGVyLiBJbmNvbWluZyBkYXRhIGlzIG5vdCByaWdodCBQRU1cIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzID0gLy0tLS0tQkVHSU4gKC4rKS0tLS0tLy5leGVjKHBlbSk7XG4gICAgICAgIGlmICghcmVzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZ2V0IHRhZyBmcm9tIFBFTVwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzWzFdO1xuICAgIH1cbiAgICBzdGF0aWMgaGFzVGFnTmFtZShwZW0sIHRhZ05hbWUpIHtcbiAgICAgICAgY29uc3QgdGFnID0gdGhpcy5nZXRUYWdOYW1lKHBlbSk7XG4gICAgICAgIHJldHVybiB0YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09IHRhZy50b0xvd2VyQ2FzZSgpO1xuICAgIH1cbiAgICBzdGF0aWMgaXNDZXJ0aWZpY2F0ZShwZW0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzVGFnTmFtZShwZW0sIFwiY2VydGlmaWNhdGVcIik7XG4gICAgfVxuICAgIHN0YXRpYyBpc0NlcnRpZmljYXRlUmVxdWVzdChwZW0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzVGFnTmFtZShwZW0sIFwiY2VydGlmaWNhdGUgcmVxdWVzdFwiKTtcbiAgICB9XG4gICAgc3RhdGljIGlzQ1JMKHBlbSkge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNUYWdOYW1lKHBlbSwgXCJ4NTA5IGNybFwiKTtcbiAgICB9XG4gICAgc3RhdGljIGlzUHVibGljS2V5KHBlbSkge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNUYWdOYW1lKHBlbSwgXCJwdWJsaWMga2V5XCIpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gaXNKV0soZGF0YSkge1xuICAgIHJldHVybiB0eXBlb2YgZGF0YSA9PT0gXCJvYmplY3RcIiAmJiBcImt0eVwiIGluIGRhdGE7XG59XG5cbmNsYXNzIFByb3ZpZGVyQ3J5cHRvIHtcbiAgICBhc3luYyBkaWdlc3QoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrRGlnZXN0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICByZXR1cm4gdGhpcy5vbkRpZ2VzdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gICAgY2hlY2tEaWdlc3QoYWxnb3JpdGhtLCBfZGF0YSkge1xuICAgICAgICB0aGlzLmNoZWNrQWxnb3JpdGhtTmFtZShhbGdvcml0aG0pO1xuICAgIH1cbiAgICBhc3luYyBvbkRpZ2VzdChfYWxnb3JpdGhtLCBfZGF0YSkge1xuICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcihcImRpZ2VzdFwiKTtcbiAgICB9XG4gICAgYXN5bmMgZ2VuZXJhdGVLZXkoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrR2VuZXJhdGVLZXkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIHJldHVybiB0aGlzLm9uR2VuZXJhdGVLZXkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICAgIGNoZWNrR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBfZXh0cmFjdGFibGUsIGtleVVzYWdlcywgLi4uX2FyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0FsZ29yaXRobU5hbWUoYWxnb3JpdGhtKTtcbiAgICAgICAgdGhpcy5jaGVja0dlbmVyYXRlS2V5UGFyYW1zKGFsZ29yaXRobSk7XG4gICAgICAgIGlmICghKGtleVVzYWdlcyAmJiBrZXlVc2FnZXMubGVuZ3RoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgVXNhZ2VzIGNhbm5vdCBiZSBlbXB0eSB3aGVuIGNyZWF0aW5nIGEga2V5LmApO1xuICAgICAgICB9XG4gICAgICAgIGxldCBhbGxvd2VkVXNhZ2VzO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnVzYWdlcykpIHtcbiAgICAgICAgICAgIGFsbG93ZWRVc2FnZXMgPSB0aGlzLnVzYWdlcztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFsbG93ZWRVc2FnZXMgPSB0aGlzLnVzYWdlcy5wcml2YXRlS2V5LmNvbmNhdCh0aGlzLnVzYWdlcy5wdWJsaWNLZXkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hlY2tLZXlVc2FnZXMoa2V5VXNhZ2VzLCBhbGxvd2VkVXNhZ2VzKTtcbiAgICB9XG4gICAgY2hlY2tHZW5lcmF0ZUtleVBhcmFtcyhfYWxnb3JpdGhtKSB7XG4gICAgfVxuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoX2FsZ29yaXRobSwgX2V4dHJhY3RhYmxlLCBfa2V5VXNhZ2VzLCAuLi5fYXJncykge1xuICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcihcImdlbmVyYXRlS2V5XCIpO1xuICAgIH1cbiAgICBhc3luYyBzaWduKC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja1NpZ24uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIHJldHVybiB0aGlzLm9uU2lnbi5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gICAgY2hlY2tTaWduKGFsZ29yaXRobSwga2V5LCBfZGF0YSwgLi4uX2FyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0FsZ29yaXRobU5hbWUoYWxnb3JpdGhtKTtcbiAgICAgICAgdGhpcy5jaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pO1xuICAgICAgICB0aGlzLmNoZWNrQ3J5cHRvS2V5KGtleSwgXCJzaWduXCIpO1xuICAgIH1cbiAgICBhc3luYyBvblNpZ24oX2FsZ29yaXRobSwgX2tleSwgX2RhdGEsIC4uLl9hcmdzKSB7XG4gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yKFwic2lnblwiKTtcbiAgICB9XG4gICAgYXN5bmMgdmVyaWZ5KC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja1ZlcmlmeS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMub25WZXJpZnkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICAgIGNoZWNrVmVyaWZ5KGFsZ29yaXRobSwga2V5LCBfc2lnbmF0dXJlLCBfZGF0YSwgLi4uX2FyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0FsZ29yaXRobU5hbWUoYWxnb3JpdGhtKTtcbiAgICAgICAgdGhpcy5jaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pO1xuICAgICAgICB0aGlzLmNoZWNrQ3J5cHRvS2V5KGtleSwgXCJ2ZXJpZnlcIik7XG4gICAgfVxuICAgIGFzeW5jIG9uVmVyaWZ5KF9hbGdvcml0aG0sIF9rZXksIF9zaWduYXR1cmUsIF9kYXRhLCAuLi5fYXJncykge1xuICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcihcInZlcmlmeVwiKTtcbiAgICB9XG4gICAgYXN5bmMgZW5jcnlwdCguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tFbmNyeXB0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICByZXR1cm4gdGhpcy5vbkVuY3J5cHQuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICAgIGNoZWNrRW5jcnlwdChhbGdvcml0aG0sIGtleSwgX2RhdGEsIG9wdGlvbnMgPSB7fSwgLi4uX2FyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0FsZ29yaXRobU5hbWUoYWxnb3JpdGhtKTtcbiAgICAgICAgdGhpcy5jaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pO1xuICAgICAgICB0aGlzLmNoZWNrQ3J5cHRvS2V5KGtleSwgb3B0aW9ucy5rZXlVc2FnZSA/IFwiZW5jcnlwdFwiIDogdm9pZCAwKTtcbiAgICB9XG4gICAgYXN5bmMgb25FbmNyeXB0KF9hbGdvcml0aG0sIF9rZXksIF9kYXRhLCAuLi5fYXJncykge1xuICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcihcImVuY3J5cHRcIik7XG4gICAgfVxuICAgIGFzeW5jIGRlY3J5cHQoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrRGVjcnlwdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMub25EZWNyeXB0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH1cbiAgICBjaGVja0RlY3J5cHQoYWxnb3JpdGhtLCBrZXksIF9kYXRhLCBvcHRpb25zID0ge30sIC4uLl9hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1OYW1lKGFsZ29yaXRobSk7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKTtcbiAgICAgICAgdGhpcy5jaGVja0NyeXB0b0tleShrZXksIG9wdGlvbnMua2V5VXNhZ2UgPyBcImRlY3J5cHRcIiA6IHZvaWQgMCk7XG4gICAgfVxuICAgIGFzeW5jIG9uRGVjcnlwdChfYWxnb3JpdGhtLCBfa2V5LCBfZGF0YSwgLi4uX2FyZ3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IoXCJkZWNyeXB0XCIpO1xuICAgIH1cbiAgICBhc3luYyBkZXJpdmVCaXRzKC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0Rlcml2ZUJpdHMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIHJldHVybiB0aGlzLm9uRGVyaXZlQml0cy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gICAgY2hlY2tEZXJpdmVCaXRzKGFsZ29yaXRobSwgYmFzZUtleSwgbGVuZ3RoLCBvcHRpb25zID0ge30sIC4uLl9hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1OYW1lKGFsZ29yaXRobSk7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKTtcbiAgICAgICAgdGhpcy5jaGVja0NyeXB0b0tleShiYXNlS2V5LCBvcHRpb25zLmtleVVzYWdlID8gXCJkZXJpdmVCaXRzXCIgOiB2b2lkIDApO1xuICAgICAgICBpZiAobGVuZ3RoICUgOCAhPT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE9wZXJhdGlvbkVycm9yKFwibGVuZ3RoOiBJcyBub3QgbXVsdGlwbGUgb2YgOFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBvbkRlcml2ZUJpdHMoX2FsZ29yaXRobSwgX2Jhc2VLZXksIF9sZW5ndGgsIC4uLl9hcmdzKSB7XG4gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yKFwiZGVyaXZlQml0c1wiKTtcbiAgICB9XG4gICAgYXN5bmMgZXhwb3J0S2V5KC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0V4cG9ydEtleS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMub25FeHBvcnRLZXkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICAgIGNoZWNrRXhwb3J0S2V5KGZvcm1hdCwga2V5LCAuLi5fYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrS2V5Rm9ybWF0KGZvcm1hdCk7XG4gICAgICAgIHRoaXMuY2hlY2tDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgaWYgKCFrZXkuZXh0cmFjdGFibGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBDcnlwdG9FcnJvcihcImtleTogSXMgbm90IGV4dHJhY3RhYmxlXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KF9mb3JtYXQsIF9rZXksIC4uLl9hcmdzKSB7XG4gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yKFwiZXhwb3J0S2V5XCIpO1xuICAgIH1cbiAgICBhc3luYyBpbXBvcnRLZXkoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrSW1wb3J0S2V5LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICByZXR1cm4gdGhpcy5vbkltcG9ydEtleS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gICAgY2hlY2tJbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIF9leHRyYWN0YWJsZSwga2V5VXNhZ2VzLCAuLi5fYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrS2V5Rm9ybWF0KGZvcm1hdCk7XG4gICAgICAgIHRoaXMuY2hlY2tLZXlEYXRhKGZvcm1hdCwga2V5RGF0YSk7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1OYW1lKGFsZ29yaXRobSk7XG4gICAgICAgIHRoaXMuY2hlY2tJbXBvcnRQYXJhbXMoYWxnb3JpdGhtKTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy51c2FnZXMpKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrS2V5VXNhZ2VzKGtleVVzYWdlcywgdGhpcy51c2FnZXMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KF9mb3JtYXQsIF9rZXlEYXRhLCBfYWxnb3JpdGhtLCBfZXh0cmFjdGFibGUsIF9rZXlVc2FnZXMsIC4uLl9hcmdzKSB7XG4gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yKFwiaW1wb3J0S2V5XCIpO1xuICAgIH1cbiAgICBjaGVja0FsZ29yaXRobU5hbWUoYWxnb3JpdGhtKSB7XG4gICAgICAgIGlmIChhbGdvcml0aG0ubmFtZS50b0xvd2VyQ2FzZSgpICE9PSB0aGlzLm5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEFsZ29yaXRobUVycm9yKFwiVW5yZWNvZ25pemVkIG5hbWVcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tBbGdvcml0aG1QYXJhbXMoX2FsZ29yaXRobSkge1xuICAgIH1cbiAgICBjaGVja0Rlcml2ZWRLZXlQYXJhbXMoX2FsZ29yaXRobSkge1xuICAgIH1cbiAgICBjaGVja0tleVVzYWdlcyh1c2FnZXMsIGFsbG93ZWQpIHtcbiAgICAgICAgZm9yIChjb25zdCB1c2FnZSBvZiB1c2FnZXMpIHtcbiAgICAgICAgICAgIGlmIChhbGxvd2VkLmluZGV4T2YodXNhZ2UpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY3JlYXRlIGEga2V5IHVzaW5nIHRoZSBzcGVjaWZpZWQga2V5IHVzYWdlc1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1OYW1lKGtleS5hbGdvcml0aG0pO1xuICAgICAgICBpZiAoa2V5VXNhZ2UgJiYga2V5LnVzYWdlcy5pbmRleE9mKGtleVVzYWdlKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBDcnlwdG9FcnJvcihga2V5IGRvZXMgbm90IG1hdGNoIHRoYXQgb2Ygb3BlcmF0aW9uYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tSZXF1aXJlZFByb3BlcnR5KGRhdGEsIHByb3BOYW1lKSB7XG4gICAgICAgIGlmICghKHByb3BOYW1lIGluIGRhdGEpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmVxdWlyZWRQcm9wZXJ0eUVycm9yKHByb3BOYW1lKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja0hhc2hBbGdvcml0aG0oYWxnb3JpdGhtLCBoYXNoQWxnb3JpdGhtcykge1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaGFzaEFsZ29yaXRobXMpIHtcbiAgICAgICAgICAgIGlmIChpdGVtLnRvTG93ZXJDYXNlKCkgPT09IGFsZ29yaXRobS5uYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IE9wZXJhdGlvbkVycm9yKGBoYXNoOiBNdXN0IGJlIG9uZSBvZiAke2hhc2hBbGdvcml0aG1zLmpvaW4oXCIsIFwiKX1gKTtcbiAgICB9XG4gICAgY2hlY2tJbXBvcnRQYXJhbXMoX2FsZ29yaXRobSkge1xuICAgIH1cbiAgICBjaGVja0tleUZvcm1hdChmb3JtYXQpIHtcbiAgICAgICAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJyYXdcIjpcbiAgICAgICAgICAgIGNhc2UgXCJwa2NzOFwiOlxuICAgICAgICAgICAgY2FzZSBcInNwa2lcIjpcbiAgICAgICAgICAgIGNhc2UgXCJqd2tcIjpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImZvcm1hdDogSXMgaW52YWxpZCB2YWx1ZS4gTXVzdCBiZSAnandrJywgJ3JhdycsICdzcGtpJywgb3IgJ3BrY3M4J1wiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja0tleURhdGEoZm9ybWF0LCBrZXlEYXRhKSB7XG4gICAgICAgIGlmICgha2V5RGF0YSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleURhdGE6IENhbm5vdCBiZSBlbXB0eSBvbiBlbXB0eSBvbiBrZXkgaW1wb3J0aW5nXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtYXQgPT09IFwiandrXCIpIHtcbiAgICAgICAgICAgIGlmICghaXNKV0soa2V5RGF0YSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5RGF0YTogSXMgbm90IEpzb25XZWJUb2tlblwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghQnVmZmVyU291cmNlQ29udmVydGVyLmlzQnVmZmVyU291cmNlKGtleURhdGEpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5RGF0YTogSXMgbm90IEFycmF5QnVmZmVyVmlldyBvciBBcnJheUJ1ZmZlclwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcmVwYXJlRGF0YShkYXRhKSB7XG4gICAgICAgIHJldHVybiBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihkYXRhKTtcbiAgICB9XG59XG5cbmNsYXNzIEFlc1Byb3ZpZGVyIGV4dGVuZHMgUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNoZWNrR2VuZXJhdGVLZXlQYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJsZW5ndGhcIik7XG4gICAgICAgIGlmICh0eXBlb2YgYWxnb3JpdGhtLmxlbmd0aCAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImxlbmd0aDogSXMgbm90IG9mIHR5cGUgTnVtYmVyXCIpO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAxMjg6XG4gICAgICAgICAgICBjYXNlIDE5MjpcbiAgICAgICAgICAgIGNhc2UgMjU2OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwibGVuZ3RoOiBNdXN0IGJlIDEyOCwgMTkyLCBvciAyNTZcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tEZXJpdmVkS2V5UGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrR2VuZXJhdGVLZXlQYXJhbXMoYWxnb3JpdGhtKTtcbiAgICB9XG59XG5cbmNsYXNzIEFlc0NiY1Byb3ZpZGVyIGV4dGVuZHMgQWVzUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkFFUy1DQkNcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXCJlbmNyeXB0XCIsIFwiZGVjcnlwdFwiLCBcIndyYXBLZXlcIiwgXCJ1bndyYXBLZXlcIl07XG4gICAgfVxuICAgIGNoZWNrQWxnb3JpdGhtUGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwiaXZcIik7XG4gICAgICAgIGlmICghKGFsZ29yaXRobS5pdiBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8IEFycmF5QnVmZmVyLmlzVmlldyhhbGdvcml0aG0uaXYpKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIml2OiBJcyBub3Qgb2YgdHlwZSAnKEFycmF5QnVmZmVyIG9yIEFycmF5QnVmZmVyVmlldyknXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbGdvcml0aG0uaXYuYnl0ZUxlbmd0aCAhPT0gMTYpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJpdjogTXVzdCBoYXZlIGxlbmd0aCAxNiBieXRlc1wiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgQWVzQ21hY1Byb3ZpZGVyIGV4dGVuZHMgQWVzUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkFFUy1DTUFDXCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW1wic2lnblwiLCBcInZlcmlmeVwiXTtcbiAgICB9XG4gICAgY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJsZW5ndGhcIik7XG4gICAgICAgIGlmICh0eXBlb2YgYWxnb3JpdGhtLmxlbmd0aCAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImxlbmd0aDogSXMgbm90IGEgTnVtYmVyXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbGdvcml0aG0ubGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE9wZXJhdGlvbkVycm9yKFwibGVuZ3RoOiBNdXN0IGJlIG1vcmUgdGhhbiAwXCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBBZXNDdHJQcm92aWRlciBleHRlbmRzIEFlc1Byb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJBRVMtQ1RSXCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW1wiZW5jcnlwdFwiLCBcImRlY3J5cHRcIiwgXCJ3cmFwS2V5XCIsIFwidW53cmFwS2V5XCJdO1xuICAgIH1cbiAgICBjaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcImNvdW50ZXJcIik7XG4gICAgICAgIGlmICghKGFsZ29yaXRobS5jb3VudGVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgfHwgQXJyYXlCdWZmZXIuaXNWaWV3KGFsZ29yaXRobS5jb3VudGVyKSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJjb3VudGVyOiBJcyBub3Qgb2YgdHlwZSAnKEFycmF5QnVmZmVyIG9yIEFycmF5QnVmZmVyVmlldyknXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbGdvcml0aG0uY291bnRlci5ieXRlTGVuZ3RoICE9PSAxNikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIml2OiBNdXN0IGhhdmUgbGVuZ3RoIDE2IGJ5dGVzXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJsZW5ndGhcIik7XG4gICAgICAgIGlmICh0eXBlb2YgYWxnb3JpdGhtLmxlbmd0aCAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImxlbmd0aDogSXMgbm90IGEgTnVtYmVyXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbGdvcml0aG0ubGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE9wZXJhdGlvbkVycm9yKFwibGVuZ3RoOiBNdXN0IGJlIG1vcmUgdGhhbiAwXCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBBZXNFY2JQcm92aWRlciBleHRlbmRzIEFlc1Byb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJBRVMtRUNCXCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW1wiZW5jcnlwdFwiLCBcImRlY3J5cHRcIiwgXCJ3cmFwS2V5XCIsIFwidW53cmFwS2V5XCJdO1xuICAgIH1cbn1cblxuY2xhc3MgQWVzR2NtUHJvdmlkZXIgZXh0ZW5kcyBBZXNQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiQUVTLUdDTVwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtcImVuY3J5cHRcIiwgXCJkZWNyeXB0XCIsIFwid3JhcEtleVwiLCBcInVud3JhcEtleVwiXTtcbiAgICB9XG4gICAgY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcIml2XCIpO1xuICAgICAgICBpZiAoIShhbGdvcml0aG0uaXYgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciB8fCBBcnJheUJ1ZmZlci5pc1ZpZXcoYWxnb3JpdGhtLml2KSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJpdjogSXMgbm90IG9mIHR5cGUgJyhBcnJheUJ1ZmZlciBvciBBcnJheUJ1ZmZlclZpZXcpJ1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxnb3JpdGhtLml2LmJ5dGVMZW5ndGggPCAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT3BlcmF0aW9uRXJyb3IoXCJpdjogTXVzdCBoYXZlIGxlbmd0aCBtb3JlIHRoYW4gMCBhbmQgbGVzcyB0aGFuIDJeNjQgLSAxXCIpO1xuICAgICAgICB9XG4gICAgICAgIChfYSA9IGFsZ29yaXRobS50YWdMZW5ndGgpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IChhbGdvcml0aG0udGFnTGVuZ3RoID0gMTI4KTtcbiAgICAgICAgc3dpdGNoIChhbGdvcml0aG0udGFnTGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDMyOlxuICAgICAgICAgICAgY2FzZSA2NDpcbiAgICAgICAgICAgIGNhc2UgOTY6XG4gICAgICAgICAgICBjYXNlIDEwNDpcbiAgICAgICAgICAgIGNhc2UgMTEyOlxuICAgICAgICAgICAgY2FzZSAxMjA6XG4gICAgICAgICAgICBjYXNlIDEyODpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IE9wZXJhdGlvbkVycm9yKFwidGFnTGVuZ3RoOiBNdXN0IGJlIG9uZSBvZiAzMiwgNjQsIDk2LCAxMDQsIDExMiwgMTIwIG9yIDEyOFwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgQWVzS3dQcm92aWRlciBleHRlbmRzIEFlc1Byb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJBRVMtS1dcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXCJ3cmFwS2V5XCIsIFwidW53cmFwS2V5XCJdO1xuICAgIH1cbn1cblxuY2xhc3MgRGVzUHJvdmlkZXIgZXh0ZW5kcyBQcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW1wiZW5jcnlwdFwiLCBcImRlY3J5cHRcIiwgXCJ3cmFwS2V5XCIsIFwidW53cmFwS2V5XCJdO1xuICAgIH1cbiAgICBjaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgaWYgKHRoaXMuaXZTaXplKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwiaXZcIik7XG4gICAgICAgICAgICBpZiAoIShhbGdvcml0aG0uaXYgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciB8fCBBcnJheUJ1ZmZlci5pc1ZpZXcoYWxnb3JpdGhtLml2KSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiaXY6IElzIG5vdCBvZiB0eXBlICcoQXJyYXlCdWZmZXIgb3IgQXJyYXlCdWZmZXJWaWV3KSdcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWxnb3JpdGhtLml2LmJ5dGVMZW5ndGggIT09IHRoaXMuaXZTaXplKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgaXY6IE11c3QgaGF2ZSBsZW5ndGggJHt0aGlzLml2U2l6ZX0gYnl0ZXNgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja0dlbmVyYXRlS2V5UGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwibGVuZ3RoXCIpO1xuICAgICAgICBpZiAodHlwZW9mIGFsZ29yaXRobS5sZW5ndGggIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJsZW5ndGg6IElzIG5vdCBvZiB0eXBlIE51bWJlclwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxnb3JpdGhtLmxlbmd0aCAhPT0gdGhpcy5rZXlTaXplQml0cykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE9wZXJhdGlvbkVycm9yKGBhbGdvcml0aG0ubGVuZ3RoOiBNdXN0IGJlICR7dGhpcy5rZXlTaXplQml0c31gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja0Rlcml2ZWRLZXlQYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tHZW5lcmF0ZUtleVBhcmFtcyhhbGdvcml0aG0pO1xuICAgIH1cbn1cblxuY2xhc3MgUnNhUHJvdmlkZXIgZXh0ZW5kcyBQcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuaGFzaEFsZ29yaXRobXMgPSBbXCJTSEEtMVwiLCBcIlNIQS0yNTZcIiwgXCJTSEEtMzg0XCIsIFwiU0hBLTUxMlwiXTtcbiAgICB9XG4gICAgY2hlY2tHZW5lcmF0ZUtleVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcImhhc2hcIik7XG4gICAgICAgIHRoaXMuY2hlY2tIYXNoQWxnb3JpdGhtKGFsZ29yaXRobS5oYXNoLCB0aGlzLmhhc2hBbGdvcml0aG1zKTtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcInB1YmxpY0V4cG9uZW50XCIpO1xuICAgICAgICBpZiAoIShhbGdvcml0aG0ucHVibGljRXhwb25lbnQgJiYgYWxnb3JpdGhtLnB1YmxpY0V4cG9uZW50IGluc3RhbmNlb2YgVWludDhBcnJheSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJwdWJsaWNFeHBvbmVudDogTWlzc2luZyBvciBub3QgYSBVaW50OEFycmF5XCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHB1YmxpY0V4cG9uZW50ID0gQ29udmVydC5Ub0Jhc2U2NChhbGdvcml0aG0ucHVibGljRXhwb25lbnQpO1xuICAgICAgICBpZiAoIShwdWJsaWNFeHBvbmVudCA9PT0gXCJBdz09XCIgfHwgcHVibGljRXhwb25lbnQgPT09IFwiQVFBQlwiKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcInB1YmxpY0V4cG9uZW50OiBNdXN0IGJlIFszXSBvciBbMSwwLDFdXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJtb2R1bHVzTGVuZ3RoXCIpO1xuICAgICAgICBpZiAoYWxnb3JpdGhtLm1vZHVsdXNMZW5ndGggJSA4XG4gICAgICAgICAgICB8fCBhbGdvcml0aG0ubW9kdWx1c0xlbmd0aCA8IDI1NlxuICAgICAgICAgICAgfHwgYWxnb3JpdGhtLm1vZHVsdXNMZW5ndGggPiAxNjM4NCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlRoZSBtb2R1bHVzIGxlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgOCBiaXRzIGFuZCA+PSAyNTYgYW5kIDw9IDE2Mzg0XCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNoZWNrSW1wb3J0UGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwiaGFzaFwiKTtcbiAgICAgICAgdGhpcy5jaGVja0hhc2hBbGdvcml0aG0oYWxnb3JpdGhtLmhhc2gsIHRoaXMuaGFzaEFsZ29yaXRobXMpO1xuICAgIH1cbn1cblxuY2xhc3MgUnNhU3NhUHJvdmlkZXIgZXh0ZW5kcyBSc2FQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiUlNBU1NBLVBLQ1MxLXYxXzVcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSB7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBbXCJzaWduXCJdLFxuICAgICAgICAgICAgcHVibGljS2V5OiBbXCJ2ZXJpZnlcIl0sXG4gICAgICAgIH07XG4gICAgfVxufVxuXG5jbGFzcyBSc2FQc3NQcm92aWRlciBleHRlbmRzIFJzYVByb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJSU0EtUFNTXCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogW1wic2lnblwiXSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogW1widmVyaWZ5XCJdLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcInNhbHRMZW5ndGhcIik7XG4gICAgICAgIGlmICh0eXBlb2YgYWxnb3JpdGhtLnNhbHRMZW5ndGggIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJzYWx0TGVuZ3RoOiBJcyBub3QgYSBOdW1iZXJcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFsZ29yaXRobS5zYWx0TGVuZ3RoIDwgMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJzYWx0TGVuZ3RoOiBNdXN0IGJlIHBvc2l0aXZlIG51bWJlclwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgUnNhT2FlcFByb3ZpZGVyIGV4dGVuZHMgUnNhUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlJTQS1PQUVQXCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogW1wiZGVjcnlwdFwiLCBcInVud3JhcEtleVwiXSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogW1wiZW5jcnlwdFwiLCBcIndyYXBLZXlcIl0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNoZWNrQWxnb3JpdGhtUGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICBpZiAoYWxnb3JpdGhtLmxhYmVsXG4gICAgICAgICAgICAmJiAhKGFsZ29yaXRobS5sYWJlbCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8IEFycmF5QnVmZmVyLmlzVmlldyhhbGdvcml0aG0ubGFiZWwpKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImxhYmVsOiBJcyBub3Qgb2YgdHlwZSAnKEFycmF5QnVmZmVyIG9yIEFycmF5QnVmZmVyVmlldyknXCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBFbGxpcHRpY1Byb3ZpZGVyIGV4dGVuZHMgUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNoZWNrR2VuZXJhdGVLZXlQYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJuYW1lZEN1cnZlXCIpO1xuICAgICAgICB0aGlzLmNoZWNrTmFtZWRDdXJ2ZShhbGdvcml0aG0ubmFtZWRDdXJ2ZSk7XG4gICAgfVxuICAgIGNoZWNrTmFtZWRDdXJ2ZShuYW1lZEN1cnZlKSB7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLm5hbWVkQ3VydmVzKSB7XG4gICAgICAgICAgICBpZiAoaXRlbS50b0xvd2VyQ2FzZSgpID09PSBuYW1lZEN1cnZlLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IE9wZXJhdGlvbkVycm9yKGBuYW1lZEN1cnZlOiBNdXN0IGJlIG9uZSBvZiAke3RoaXMubmFtZWRDdXJ2ZXMuam9pbihcIiwgXCIpfWApO1xuICAgIH1cbn1cblxuY2xhc3MgRWNkc2FQcm92aWRlciBleHRlbmRzIEVsbGlwdGljUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkVDRFNBXCI7XG4gICAgICAgIHRoaXMuaGFzaEFsZ29yaXRobXMgPSBbXCJTSEEtMVwiLCBcIlNIQS0yNTZcIiwgXCJTSEEtMzg0XCIsIFwiU0hBLTUxMlwiXTtcbiAgICAgICAgdGhpcy51c2FnZXMgPSB7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBbXCJzaWduXCJdLFxuICAgICAgICAgICAgcHVibGljS2V5OiBbXCJ2ZXJpZnlcIl0sXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMubmFtZWRDdXJ2ZXMgPSBbXCJQLTI1NlwiLCBcIlAtMzg0XCIsIFwiUC01MjFcIiwgXCJLLTI1NlwiXTtcbiAgICB9XG4gICAgY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJoYXNoXCIpO1xuICAgICAgICB0aGlzLmNoZWNrSGFzaEFsZ29yaXRobShhbGdvcml0aG0uaGFzaCwgdGhpcy5oYXNoQWxnb3JpdGhtcyk7XG4gICAgfVxufVxuXG5jb25zdCBLRVlfVFlQRVMgPSBbXCJzZWNyZXRcIiwgXCJwcml2YXRlXCIsIFwicHVibGljXCJdO1xuY2xhc3MgQ3J5cHRvS2V5IHtcbiAgICBzdGF0aWMgY3JlYXRlKGFsZ29yaXRobSwgdHlwZSwgZXh0cmFjdGFibGUsIHVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBuZXcgdGhpcygpO1xuICAgICAgICBrZXkuYWxnb3JpdGhtID0gYWxnb3JpdGhtO1xuICAgICAgICBrZXkudHlwZSA9IHR5cGU7XG4gICAgICAgIGtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBrZXkudXNhZ2VzID0gdXNhZ2VzO1xuICAgICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgICBzdGF0aWMgaXNLZXlUeXBlKGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEtFWV9UWVBFUy5pbmRleE9mKGRhdGEpICE9PSAtMTtcbiAgICB9XG4gICAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgICAgICByZXR1cm4gXCJDcnlwdG9LZXlcIjtcbiAgICB9XG59XG5cbmNsYXNzIEVjZGhQcm92aWRlciBleHRlbmRzIEVsbGlwdGljUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkVDREhcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSB7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBbXCJkZXJpdmVCaXRzXCIsIFwiZGVyaXZlS2V5XCJdLFxuICAgICAgICAgICAgcHVibGljS2V5OiBbXSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5uYW1lZEN1cnZlcyA9IFtcIlAtMjU2XCIsIFwiUC0zODRcIiwgXCJQLTUyMVwiLCBcIkstMjU2XCJdO1xuICAgIH1cbiAgICBjaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcInB1YmxpY1wiKTtcbiAgICAgICAgaWYgKCEoYWxnb3JpdGhtLnB1YmxpYyBpbnN0YW5jZW9mIENyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJwdWJsaWM6IElzIG5vdCBhIENyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxnb3JpdGhtLnB1YmxpYy50eXBlICE9PSBcInB1YmxpY1wiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT3BlcmF0aW9uRXJyb3IoXCJwdWJsaWM6IElzIG5vdCBhIHB1YmxpYyBrZXlcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFsZ29yaXRobS5wdWJsaWMuYWxnb3JpdGhtLm5hbWUgIT09IHRoaXMubmFtZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE9wZXJhdGlvbkVycm9yKGBwdWJsaWM6IElzIG5vdCAke3RoaXMubmFtZX0ga2V5YCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIEVjZGhFc1Byb3ZpZGVyIGV4dGVuZHMgRWNkaFByb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJFQ0RILUVTXCI7XG4gICAgICAgIHRoaXMubmFtZWRDdXJ2ZXMgPSBbXCJYMjU1MTlcIiwgXCJYNDQ4XCJdO1xuICAgIH1cbn1cblxuY2xhc3MgRWREc2FQcm92aWRlciBleHRlbmRzIEVsbGlwdGljUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkVkRFNBXCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogW1wic2lnblwiXSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogW1widmVyaWZ5XCJdLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLm5hbWVkQ3VydmVzID0gW1wiRWQyNTUxOVwiLCBcIkVkNDQ4XCJdO1xuICAgIH1cbn1cblxubGV0IE9iamVjdElkZW50aWZpZXIgPSBjbGFzcyBPYmplY3RJZGVudGlmaWVyIHtcbiAgICBjb25zdHJ1Y3Rvcih2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLk9iamVjdElkZW50aWZpZXIgfSlcbl0sIE9iamVjdElkZW50aWZpZXIucHJvdG90eXBlLCBcInZhbHVlXCIsIHZvaWQgMCk7XG5PYmplY3RJZGVudGlmaWVyID0gX19kZWNvcmF0ZShbXG4gICAgQXNuVHlwZSh7IHR5cGU6IEFzblR5cGVUeXBlcy5DaG9pY2UgfSlcbl0sIE9iamVjdElkZW50aWZpZXIpO1xuXG5jbGFzcyBBbGdvcml0aG1JZGVudGlmaWVyIHtcbiAgICBjb25zdHJ1Y3RvcihwYXJhbXMpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBwYXJhbXMpO1xuICAgIH1cbn1cbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3Aoe1xuICAgICAgICB0eXBlOiBBc25Qcm9wVHlwZXMuT2JqZWN0SWRlbnRpZmllcixcbiAgICB9KVxuXSwgQWxnb3JpdGhtSWRlbnRpZmllci5wcm90b3R5cGUsIFwiYWxnb3JpdGhtXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHtcbiAgICAgICAgdHlwZTogQXNuUHJvcFR5cGVzLkFueSxcbiAgICAgICAgb3B0aW9uYWw6IHRydWUsXG4gICAgfSlcbl0sIEFsZ29yaXRobUlkZW50aWZpZXIucHJvdG90eXBlLCBcInBhcmFtZXRlcnNcIiwgdm9pZCAwKTtcblxuY2xhc3MgUHJpdmF0ZUtleUluZm8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnZlcnNpb24gPSAwO1xuICAgICAgICB0aGlzLnByaXZhdGVLZXlBbGdvcml0aG0gPSBuZXcgQWxnb3JpdGhtSWRlbnRpZmllcigpO1xuICAgICAgICB0aGlzLnByaXZhdGVLZXkgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgfVxufVxuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyIH0pXG5dLCBQcml2YXRlS2V5SW5mby5wcm90b3R5cGUsIFwidmVyc2lvblwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFsZ29yaXRobUlkZW50aWZpZXIgfSlcbl0sIFByaXZhdGVLZXlJbmZvLnByb3RvdHlwZSwgXCJwcml2YXRlS2V5QWxnb3JpdGhtXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLk9jdGV0U3RyaW5nIH0pXG5dLCBQcml2YXRlS2V5SW5mby5wcm90b3R5cGUsIFwicHJpdmF0ZUtleVwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5BbnksIG9wdGlvbmFsOiB0cnVlIH0pXG5dLCBQcml2YXRlS2V5SW5mby5wcm90b3R5cGUsIFwiYXR0cmlidXRlc1wiLCB2b2lkIDApO1xuXG5jbGFzcyBQdWJsaWNLZXlJbmZvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5wdWJsaWNLZXlBbGdvcml0aG0gPSBuZXcgQWxnb3JpdGhtSWRlbnRpZmllcigpO1xuICAgICAgICB0aGlzLnB1YmxpY0tleSA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICB9XG59XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQWxnb3JpdGhtSWRlbnRpZmllciB9KVxuXSwgUHVibGljS2V5SW5mby5wcm90b3R5cGUsIFwicHVibGljS2V5QWxnb3JpdGhtXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkJpdFN0cmluZyB9KVxuXSwgUHVibGljS2V5SW5mby5wcm90b3R5cGUsIFwicHVibGljS2V5XCIsIHZvaWQgMCk7XG5cbmNvbnN0IEpzb25CYXNlNjRVcmxBcnJheUJ1ZmZlckNvbnZlcnRlciA9IHtcbiAgICBmcm9tSlNPTjogKHZhbHVlKSA9PiBDb252ZXJ0LkZyb21CYXNlNjRVcmwodmFsdWUpLFxuICAgIHRvSlNPTjogKHZhbHVlKSA9PiBDb252ZXJ0LlRvQmFzZTY0VXJsKG5ldyBVaW50OEFycmF5KHZhbHVlKSksXG59O1xuXG5jb25zdCBBc25JbnRlZ2VyQXJyYXlCdWZmZXJDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlSGV4ID0gdmFsdWUudmFsdWVCbG9jay52YWx1ZUhleDtcbiAgICAgICAgcmV0dXJuICEobmV3IFVpbnQ4QXJyYXkodmFsdWVIZXgpWzBdKVxuICAgICAgICAgICAgPyB2YWx1ZS52YWx1ZUJsb2NrLnZhbHVlSGV4LnNsaWNlKDEpXG4gICAgICAgICAgICA6IHZhbHVlLnZhbHVlQmxvY2sudmFsdWVIZXg7XG4gICAgfSxcbiAgICB0b0FTTjogKHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlSGV4ID0gbmV3IFVpbnQ4QXJyYXkodmFsdWUpWzBdID4gMTI3XG4gICAgICAgICAgICA/IGNvbWJpbmUobmV3IFVpbnQ4QXJyYXkoWzBdKS5idWZmZXIsIHZhbHVlKVxuICAgICAgICAgICAgOiB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIG5ldyBhc24xLkludGVnZXIoeyB2YWx1ZUhleCB9KTtcbiAgICB9LFxufTtcblxudmFyIGluZGV4JDMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgQXNuSW50ZWdlckFycmF5QnVmZmVyQ29udmVydGVyOiBBc25JbnRlZ2VyQXJyYXlCdWZmZXJDb252ZXJ0ZXIsXG4gIEpzb25CYXNlNjRVcmxBcnJheUJ1ZmZlckNvbnZlcnRlcjogSnNvbkJhc2U2NFVybEFycmF5QnVmZmVyQ29udmVydGVyXG59KTtcblxuY2xhc3MgUnNhUHJpdmF0ZUtleSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMudmVyc2lvbiA9IDA7XG4gICAgICAgIHRoaXMubW9kdWx1cyA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgdGhpcy5wdWJsaWNFeHBvbmVudCA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgdGhpcy5wcml2YXRlRXhwb25lbnQgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIHRoaXMucHJpbWUxID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgICAgICB0aGlzLnByaW1lMiA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgdGhpcy5leHBvbmVudDEgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIHRoaXMuZXhwb25lbnQyID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgICAgICB0aGlzLmNvZWZmaWNpZW50ID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgIH1cbn1cbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuSW50ZWdlciwgY29udmVydGVyOiBBc25JbnRlZ2VyQ29udmVydGVyIH0pXG5dLCBSc2FQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJ2ZXJzaW9uXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkludGVnZXIsIGNvbnZlcnRlcjogQXNuSW50ZWdlckFycmF5QnVmZmVyQ29udmVydGVyIH0pLFxuICAgIEpzb25Qcm9wKHsgbmFtZTogXCJuXCIsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybEFycmF5QnVmZmVyQ29udmVydGVyIH0pXG5dLCBSc2FQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJtb2R1bHVzXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkludGVnZXIsIGNvbnZlcnRlcjogQXNuSW50ZWdlckFycmF5QnVmZmVyQ29udmVydGVyIH0pLFxuICAgIEpzb25Qcm9wKHsgbmFtZTogXCJlXCIsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybEFycmF5QnVmZmVyQ29udmVydGVyIH0pXG5dLCBSc2FQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJwdWJsaWNFeHBvbmVudFwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJBcnJheUJ1ZmZlckNvbnZlcnRlciB9KSxcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwiZFwiLCBjb252ZXJ0ZXI6IEpzb25CYXNlNjRVcmxBcnJheUJ1ZmZlckNvbnZlcnRlciB9KVxuXSwgUnNhUHJpdmF0ZUtleS5wcm90b3R5cGUsIFwicHJpdmF0ZUV4cG9uZW50XCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkludGVnZXIsIGNvbnZlcnRlcjogQXNuSW50ZWdlckFycmF5QnVmZmVyQ29udmVydGVyIH0pLFxuICAgIEpzb25Qcm9wKHsgbmFtZTogXCJwXCIsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybEFycmF5QnVmZmVyQ29udmVydGVyIH0pXG5dLCBSc2FQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJwcmltZTFcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuSW50ZWdlciwgY29udmVydGVyOiBBc25JbnRlZ2VyQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSksXG4gICAgSnNvblByb3AoeyBuYW1lOiBcInFcIiwgY29udmVydGVyOiBKc29uQmFzZTY0VXJsQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSlcbl0sIFJzYVByaXZhdGVLZXkucHJvdG90eXBlLCBcInByaW1lMlwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJBcnJheUJ1ZmZlckNvbnZlcnRlciB9KSxcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwiZHBcIiwgY29udmVydGVyOiBKc29uQmFzZTY0VXJsQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSlcbl0sIFJzYVByaXZhdGVLZXkucHJvdG90eXBlLCBcImV4cG9uZW50MVwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJBcnJheUJ1ZmZlckNvbnZlcnRlciB9KSxcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwiZHFcIiwgY29udmVydGVyOiBKc29uQmFzZTY0VXJsQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSlcbl0sIFJzYVByaXZhdGVLZXkucHJvdG90eXBlLCBcImV4cG9uZW50MlwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJBcnJheUJ1ZmZlckNvbnZlcnRlciB9KSxcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwicWlcIiwgY29udmVydGVyOiBKc29uQmFzZTY0VXJsQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSlcbl0sIFJzYVByaXZhdGVLZXkucHJvdG90eXBlLCBcImNvZWZmaWNpZW50XCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkFueSwgb3B0aW9uYWw6IHRydWUgfSlcbl0sIFJzYVByaXZhdGVLZXkucHJvdG90eXBlLCBcIm90aGVyUHJpbWVJbmZvc1wiLCB2b2lkIDApO1xuXG5jbGFzcyBSc2FQdWJsaWNLZXkge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLm1vZHVsdXMgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIHRoaXMucHVibGljRXhwb25lbnQgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgfVxufVxuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJBcnJheUJ1ZmZlckNvbnZlcnRlciB9KSxcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwiblwiLCBjb252ZXJ0ZXI6IEpzb25CYXNlNjRVcmxBcnJheUJ1ZmZlckNvbnZlcnRlciB9KVxuXSwgUnNhUHVibGljS2V5LnByb3RvdHlwZSwgXCJtb2R1bHVzXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkludGVnZXIsIGNvbnZlcnRlcjogQXNuSW50ZWdlckFycmF5QnVmZmVyQ29udmVydGVyIH0pLFxuICAgIEpzb25Qcm9wKHsgbmFtZTogXCJlXCIsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybEFycmF5QnVmZmVyQ29udmVydGVyIH0pXG5dLCBSc2FQdWJsaWNLZXkucHJvdG90eXBlLCBcInB1YmxpY0V4cG9uZW50XCIsIHZvaWQgMCk7XG5cbmxldCBFY1B1YmxpY0tleSA9IGNsYXNzIEVjUHVibGljS2V5IHtcbiAgICBjb25zdHJ1Y3Rvcih2YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIGxldCBieXRlcyA9IG5ldyBVaW50OEFycmF5KHRoaXMudmFsdWUpO1xuICAgICAgICBpZiAoYnl0ZXNbMF0gIT09IDB4MDQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBDcnlwdG9FcnJvcihcIldyb25nIEVDUG9pbnQuIEN1cnJlbnQgdmVyc2lvbiBzdXBwb3J0cyBvbmx5IFVuY29tcHJlc3NlZCAoMHgwNCkgcG9pbnRcIik7XG4gICAgICAgIH1cbiAgICAgICAgYnl0ZXMgPSBuZXcgVWludDhBcnJheSh0aGlzLnZhbHVlLnNsaWNlKDEpKTtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IGJ5dGVzLmxlbmd0aCAvIDI7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IDA7XG4gICAgICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICAgICAgICB4OiBDb252ZXJ0LlRvQmFzZTY0VXJsKGJ5dGVzLmJ1ZmZlci5zbGljZShvZmZzZXQsIG9mZnNldCArIHNpemUpKSxcbiAgICAgICAgICAgIHk6IENvbnZlcnQuVG9CYXNlNjRVcmwoYnl0ZXMuYnVmZmVyLnNsaWNlKG9mZnNldCArIHNpemUsIG9mZnNldCArIHNpemUgKyBzaXplKSksXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBqc29uO1xuICAgIH1cbiAgICBmcm9tSlNPTihqc29uKSB7XG4gICAgICAgIGlmICghKFwieFwiIGluIGpzb24pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ4OiBNaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghKFwieVwiIGluIGpzb24pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ5OiBNaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5XCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHggPSBDb252ZXJ0LkZyb21CYXNlNjRVcmwoanNvbi54KTtcbiAgICAgICAgY29uc3QgeSA9IENvbnZlcnQuRnJvbUJhc2U2NFVybChqc29uLnkpO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbWJpbmUobmV3IFVpbnQ4QXJyYXkoWzB4MDRdKS5idWZmZXIsIHgsIHkpO1xuICAgICAgICB0aGlzLnZhbHVlID0gbmV3IFVpbnQ4QXJyYXkodmFsdWUpLmJ1ZmZlcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuT2N0ZXRTdHJpbmcgfSlcbl0sIEVjUHVibGljS2V5LnByb3RvdHlwZSwgXCJ2YWx1ZVwiLCB2b2lkIDApO1xuRWNQdWJsaWNLZXkgPSBfX2RlY29yYXRlKFtcbiAgICBBc25UeXBlKHsgdHlwZTogQXNuVHlwZVR5cGVzLkNob2ljZSB9KVxuXSwgRWNQdWJsaWNLZXkpO1xuXG5jbGFzcyBFY1ByaXZhdGVLZXkge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnZlcnNpb24gPSAxO1xuICAgICAgICB0aGlzLnByaXZhdGVLZXkgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgfVxuICAgIGZyb21KU09OKGpzb24pIHtcbiAgICAgICAgaWYgKCEoXCJkXCIgaW4ganNvbikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImQ6IE1pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHlcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcml2YXRlS2V5ID0gQ29udmVydC5Gcm9tQmFzZTY0VXJsKGpzb24uZCk7XG4gICAgICAgIGlmIChcInhcIiBpbiBqc29uKSB7XG4gICAgICAgICAgICBjb25zdCBwdWJsaWNLZXkgPSBuZXcgRWNQdWJsaWNLZXkoKTtcbiAgICAgICAgICAgIHB1YmxpY0tleS5mcm9tSlNPTihqc29uKTtcbiAgICAgICAgICAgIGNvbnN0IGFzbiA9IEFzblNlcmlhbGl6ZXIudG9BU04ocHVibGljS2V5KTtcbiAgICAgICAgICAgIGlmIChcInZhbHVlSGV4XCIgaW4gYXNuLnZhbHVlQmxvY2spIHtcbiAgICAgICAgICAgICAgICB0aGlzLnB1YmxpY0tleSA9IGFzbi52YWx1ZUJsb2NrLnZhbHVlSGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIGNvbnN0IGp3ayA9IHt9O1xuICAgICAgICBqd2suZCA9IENvbnZlcnQuVG9CYXNlNjRVcmwodGhpcy5wcml2YXRlS2V5KTtcbiAgICAgICAgaWYgKHRoaXMucHVibGljS2V5KSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGp3aywgbmV3IEVjUHVibGljS2V5KHRoaXMucHVibGljS2V5KS50b0pTT04oKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGp3aztcbiAgICB9XG59XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkludGVnZXIsIGNvbnZlcnRlcjogQXNuSW50ZWdlckNvbnZlcnRlciB9KVxuXSwgRWNQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJ2ZXJzaW9uXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLk9jdGV0U3RyaW5nIH0pXG5dLCBFY1ByaXZhdGVLZXkucHJvdG90eXBlLCBcInByaXZhdGVLZXlcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyBjb250ZXh0OiAwLCB0eXBlOiBBc25Qcm9wVHlwZXMuQW55LCBvcHRpb25hbDogdHJ1ZSB9KVxuXSwgRWNQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJwYXJhbWV0ZXJzXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgY29udGV4dDogMSwgdHlwZTogQXNuUHJvcFR5cGVzLkJpdFN0cmluZywgb3B0aW9uYWw6IHRydWUgfSlcbl0sIEVjUHJpdmF0ZUtleS5wcm90b3R5cGUsIFwicHVibGljS2V5XCIsIHZvaWQgMCk7XG5cbmNvbnN0IEFzbkludGVnZXJXaXRob3V0UGFkZGluZ0NvbnZlcnRlciA9IHtcbiAgICBmcm9tQVNOOiAodmFsdWUpID0+IHtcbiAgICAgICAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheSh2YWx1ZS52YWx1ZUJsb2NrLnZhbHVlSGV4KTtcbiAgICAgICAgcmV0dXJuIChieXRlc1swXSA9PT0gMClcbiAgICAgICAgICAgID8gYnl0ZXMuYnVmZmVyLnNsaWNlKDEpXG4gICAgICAgICAgICA6IGJ5dGVzLmJ1ZmZlcjtcbiAgICB9LFxuICAgIHRvQVNOOiAodmFsdWUpID0+IHtcbiAgICAgICAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheSh2YWx1ZSk7XG4gICAgICAgIGlmIChieXRlc1swXSA+IDEyNykge1xuICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBuZXcgVWludDhBcnJheShieXRlcy5sZW5ndGggKyAxKTtcbiAgICAgICAgICAgIG5ld1ZhbHVlLnNldChieXRlcywgMSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IGFzbjEuSW50ZWdlcih7IHZhbHVlSGV4OiBuZXdWYWx1ZS5idWZmZXIgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBhc24xLkludGVnZXIoeyB2YWx1ZUhleDogdmFsdWUgfSk7XG4gICAgfSxcbn07XG5cbnZhciBpbmRleCQyID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBfX3Byb3RvX186IG51bGwsXG4gIEFzbkludGVnZXJXaXRob3V0UGFkZGluZ0NvbnZlcnRlcjogQXNuSW50ZWdlcldpdGhvdXRQYWRkaW5nQ29udmVydGVyXG59KTtcblxuY2xhc3MgRWNVdGlscyB7XG4gICAgc3RhdGljIGRlY29kZVBvaW50KGRhdGEsIHBvaW50U2l6ZSkge1xuICAgICAgICBjb25zdCB2aWV3ID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShkYXRhKTtcbiAgICAgICAgaWYgKCh2aWV3Lmxlbmd0aCA9PT0gMCkgfHwgKHZpZXdbMF0gIT09IDQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJPbmx5IHVuY29tcHJlc3NlZCBwb2ludCBmb3JtYXQgc3VwcG9ydGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG4gPSAodmlldy5sZW5ndGggLSAxKSAvIDI7XG4gICAgICAgIGlmIChuICE9PSAoTWF0aC5jZWlsKHBvaW50U2l6ZSAvIDgpKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUG9pbnQgZG9lcyBub3QgbWF0Y2ggZmllbGQgc2l6ZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB4YiA9IHZpZXcuc2xpY2UoMSwgbiArIDEpO1xuICAgICAgICBjb25zdCB5YiA9IHZpZXcuc2xpY2UobiArIDEsIG4gKyAxICsgbik7XG4gICAgICAgIHJldHVybiB7IHg6IHhiLCB5OiB5YiB9O1xuICAgIH1cbiAgICBzdGF0aWMgZW5jb2RlUG9pbnQocG9pbnQsIHBvaW50U2l6ZSkge1xuICAgICAgICBjb25zdCBzaXplID0gTWF0aC5jZWlsKHBvaW50U2l6ZSAvIDgpO1xuICAgICAgICBpZiAocG9pbnQueC5ieXRlTGVuZ3RoICE9PSBzaXplIHx8IHBvaW50LnkuYnl0ZUxlbmd0aCAhPT0gc2l6ZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiWCxZIGNvb3JkaW5hdGVzIGRvbid0IG1hdGNoIHBvaW50IHNpemUgY3JpdGVyaWFcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeCA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkocG9pbnQueCk7XG4gICAgICAgIGNvbnN0IHkgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KHBvaW50LnkpO1xuICAgICAgICBjb25zdCByZXMgPSBuZXcgVWludDhBcnJheShzaXplICogMiArIDEpO1xuICAgICAgICByZXNbMF0gPSA0O1xuICAgICAgICByZXMuc2V0KHgsIDEpO1xuICAgICAgICByZXMuc2V0KHksIHNpemUgKyAxKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgc3RhdGljIGdldFNpemUocG9pbnRTaXplKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmNlaWwocG9pbnRTaXplIC8gOCk7XG4gICAgfVxuICAgIHN0YXRpYyBlbmNvZGVTaWduYXR1cmUoc2lnbmF0dXJlLCBwb2ludFNpemUpIHtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMuZ2V0U2l6ZShwb2ludFNpemUpO1xuICAgICAgICBjb25zdCByID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShzaWduYXR1cmUucik7XG4gICAgICAgIGNvbnN0IHMgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KHNpZ25hdHVyZS5zKTtcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoc2l6ZSAqIDIpO1xuICAgICAgICByZXMuc2V0KHRoaXMucGFkU3RhcnQociwgc2l6ZSkpO1xuICAgICAgICByZXMuc2V0KHRoaXMucGFkU3RhcnQocywgc2l6ZSksIHNpemUpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBzdGF0aWMgZGVjb2RlU2lnbmF0dXJlKGRhdGEsIHBvaW50U2l6ZSkge1xuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5nZXRTaXplKHBvaW50U2l6ZSk7XG4gICAgICAgIGNvbnN0IHZpZXcgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGRhdGEpO1xuICAgICAgICBpZiAodmlldy5sZW5ndGggIT09IChzaXplICogMikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkluY29ycmVjdCBzaXplIG9mIHRoZSBzaWduYXR1cmVcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgciA9IHZpZXcuc2xpY2UoMCwgc2l6ZSk7XG4gICAgICAgIGNvbnN0IHMgPSB2aWV3LnNsaWNlKHNpemUpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcjogdGhpcy50cmltU3RhcnQociksXG4gICAgICAgICAgICBzOiB0aGlzLnRyaW1TdGFydChzKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgc3RhdGljIHRyaW1TdGFydChkYXRhKSB7XG4gICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgd2hpbGUgKChpIDwgZGF0YS5sZW5ndGggLSAxKSAmJiAoZGF0YVtpXSA9PT0gMCkpIHtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGEuc2xpY2UoaSwgZGF0YS5sZW5ndGgpO1xuICAgIH1cbiAgICBzdGF0aWMgcGFkU3RhcnQoZGF0YSwgc2l6ZSkge1xuICAgICAgICBpZiAoc2l6ZSA9PT0gZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlcyA9IG5ldyBVaW50OEFycmF5KHNpemUpO1xuICAgICAgICByZXMuc2V0KGRhdGEsIHNpemUgLSBkYXRhLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxufVxuXG5jbGFzcyBFY0RzYVNpZ25hdHVyZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuciA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgdGhpcy5zID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgIH1cbiAgICBzdGF0aWMgZnJvbVdlYkNyeXB0b1NpZ25hdHVyZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBwb2ludFNpemUgPSB2YWx1ZS5ieXRlTGVuZ3RoIC8gMjtcbiAgICAgICAgY29uc3QgcG9pbnQgPSBFY1V0aWxzLmRlY29kZVNpZ25hdHVyZSh2YWx1ZSwgcG9pbnRTaXplICogOCk7XG4gICAgICAgIGNvbnN0IGVjU2lnbmF0dXJlID0gbmV3IEVjRHNhU2lnbmF0dXJlKCk7XG4gICAgICAgIGVjU2lnbmF0dXJlLnIgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihwb2ludC5yKTtcbiAgICAgICAgZWNTaWduYXR1cmUucyA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKHBvaW50LnMpO1xuICAgICAgICByZXR1cm4gZWNTaWduYXR1cmU7XG4gICAgfVxuICAgIHRvV2ViQ3J5cHRvU2lnbmF0dXJlKHBvaW50U2l6ZSkge1xuICAgICAgICBpZiAoIXBvaW50U2l6ZSkge1xuICAgICAgICAgICAgY29uc3QgbWF4UG9pbnRMZW5ndGggPSBNYXRoLm1heCh0aGlzLnIuYnl0ZUxlbmd0aCwgdGhpcy5zLmJ5dGVMZW5ndGgpO1xuICAgICAgICAgICAgaWYgKG1heFBvaW50TGVuZ3RoIDw9IDMyKSB7XG4gICAgICAgICAgICAgICAgcG9pbnRTaXplID0gMjU2O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWF4UG9pbnRMZW5ndGggPD0gNDgpIHtcbiAgICAgICAgICAgICAgICBwb2ludFNpemUgPSAzODQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBwb2ludFNpemUgPSA1MjE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gRWNVdGlscy5lbmNvZGVTaWduYXR1cmUodGhpcywgcG9pbnRTaXplKTtcbiAgICAgICAgcmV0dXJuIHNpZ25hdHVyZS5idWZmZXI7XG4gICAgfVxufVxuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJXaXRob3V0UGFkZGluZ0NvbnZlcnRlciB9KVxuXSwgRWNEc2FTaWduYXR1cmUucHJvdG90eXBlLCBcInJcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuSW50ZWdlciwgY29udmVydGVyOiBBc25JbnRlZ2VyV2l0aG91dFBhZGRpbmdDb252ZXJ0ZXIgfSlcbl0sIEVjRHNhU2lnbmF0dXJlLnByb3RvdHlwZSwgXCJzXCIsIHZvaWQgMCk7XG5cbmNsYXNzIE9uZUFzeW1tZXRyaWNLZXkgZXh0ZW5kcyBQcml2YXRlS2V5SW5mbyB7XG59XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgY29udGV4dDogMSwgaW1wbGljaXQ6IHRydWUsIHR5cGU6IEFzblByb3BUeXBlcy5CaXRTdHJpbmcsIG9wdGlvbmFsOiB0cnVlIH0pXG5dLCBPbmVBc3ltbWV0cmljS2V5LnByb3RvdHlwZSwgXCJwdWJsaWNLZXlcIiwgdm9pZCAwKTtcblxubGV0IEVkUHJpdmF0ZUtleSA9IGNsYXNzIEVkUHJpdmF0ZUtleSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgfVxuICAgIGZyb21KU09OKGpzb24pIHtcbiAgICAgICAgaWYgKCFqc29uLmQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImQ6IE1pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHlcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWx1ZSA9IENvbnZlcnQuRnJvbUJhc2U2NFVybChqc29uLmQpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICBjb25zdCBqd2sgPSB7XG4gICAgICAgICAgICBkOiBDb252ZXJ0LlRvQmFzZTY0VXJsKHRoaXMudmFsdWUpLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gandrO1xuICAgIH1cbn07XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLk9jdGV0U3RyaW5nIH0pXG5dLCBFZFByaXZhdGVLZXkucHJvdG90eXBlLCBcInZhbHVlXCIsIHZvaWQgMCk7XG5FZFByaXZhdGVLZXkgPSBfX2RlY29yYXRlKFtcbiAgICBBc25UeXBlKHsgdHlwZTogQXNuVHlwZVR5cGVzLkNob2ljZSB9KVxuXSwgRWRQcml2YXRlS2V5KTtcblxubGV0IEVkUHVibGljS2V5ID0gY2xhc3MgRWRQdWJsaWNLZXkge1xuICAgIGNvbnN0cnVjdG9yKHZhbHVlKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgY29uc3QganNvbiA9IHtcbiAgICAgICAgICAgIHg6IENvbnZlcnQuVG9CYXNlNjRVcmwodGhpcy52YWx1ZSksXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBqc29uO1xuICAgIH1cbiAgICBmcm9tSlNPTihqc29uKSB7XG4gICAgICAgIGlmICghKFwieFwiIGluIGpzb24pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ4OiBNaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5XCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsdWUgPSBDb252ZXJ0LkZyb21CYXNlNjRVcmwoanNvbi54KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuQml0U3RyaW5nIH0pXG5dLCBFZFB1YmxpY0tleS5wcm90b3R5cGUsIFwidmFsdWVcIiwgdm9pZCAwKTtcbkVkUHVibGljS2V5ID0gX19kZWNvcmF0ZShbXG4gICAgQXNuVHlwZSh7IHR5cGU6IEFzblR5cGVUeXBlcy5DaG9pY2UgfSlcbl0sIEVkUHVibGljS2V5KTtcblxubGV0IEN1cnZlUHJpdmF0ZUtleSA9IGNsYXNzIEN1cnZlUHJpdmF0ZUtleSB7XG59O1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5PY3RldFN0cmluZyB9KSxcbiAgICBKc29uUHJvcCh7IHR5cGU6IEpzb25Qcm9wVHlwZXMuU3RyaW5nLCBjb252ZXJ0ZXI6IEpzb25CYXNlNjRVcmxBcnJheUJ1ZmZlckNvbnZlcnRlciB9KVxuXSwgQ3VydmVQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJkXCIsIHZvaWQgMCk7XG5DdXJ2ZVByaXZhdGVLZXkgPSBfX2RlY29yYXRlKFtcbiAgICBBc25UeXBlKHsgdHlwZTogQXNuVHlwZVR5cGVzLkNob2ljZSB9KVxuXSwgQ3VydmVQcml2YXRlS2V5KTtcblxuY29uc3QgaWRTZWNwMjU2cjEgPSBcIjEuMi44NDAuMTAwNDUuMy4xLjdcIjtcbmNvbnN0IGlkRWxsaXB0aWNDdXJ2ZSA9IFwiMS4zLjEzMi4wXCI7XG5jb25zdCBpZFNlY3AzODRyMSA9IGAke2lkRWxsaXB0aWNDdXJ2ZX0uMzRgO1xuY29uc3QgaWRTZWNwNTIxcjEgPSBgJHtpZEVsbGlwdGljQ3VydmV9LjM1YDtcbmNvbnN0IGlkU2VjcDI1NmsxID0gYCR7aWRFbGxpcHRpY0N1cnZlfS4xMGA7XG5jb25zdCBpZFZlcnNpb25PbmUgPSBcIjEuMy4zNi4zLjMuMi44LjEuMVwiO1xuY29uc3QgaWRCcmFpbnBvb2xQMTYwcjEgPSBgJHtpZFZlcnNpb25PbmV9LjFgO1xuY29uc3QgaWRCcmFpbnBvb2xQMTYwdDEgPSBgJHtpZFZlcnNpb25PbmV9LjJgO1xuY29uc3QgaWRCcmFpbnBvb2xQMTkycjEgPSBgJHtpZFZlcnNpb25PbmV9LjNgO1xuY29uc3QgaWRCcmFpbnBvb2xQMTkydDEgPSBgJHtpZFZlcnNpb25PbmV9LjRgO1xuY29uc3QgaWRCcmFpbnBvb2xQMjI0cjEgPSBgJHtpZFZlcnNpb25PbmV9LjVgO1xuY29uc3QgaWRCcmFpbnBvb2xQMjI0dDEgPSBgJHtpZFZlcnNpb25PbmV9LjZgO1xuY29uc3QgaWRCcmFpbnBvb2xQMjU2cjEgPSBgJHtpZFZlcnNpb25PbmV9LjdgO1xuY29uc3QgaWRCcmFpbnBvb2xQMjU2dDEgPSBgJHtpZFZlcnNpb25PbmV9LjhgO1xuY29uc3QgaWRCcmFpbnBvb2xQMzIwcjEgPSBgJHtpZFZlcnNpb25PbmV9LjlgO1xuY29uc3QgaWRCcmFpbnBvb2xQMzIwdDEgPSBgJHtpZFZlcnNpb25PbmV9LjEwYDtcbmNvbnN0IGlkQnJhaW5wb29sUDM4NHIxID0gYCR7aWRWZXJzaW9uT25lfS4xMWA7XG5jb25zdCBpZEJyYWlucG9vbFAzODR0MSA9IGAke2lkVmVyc2lvbk9uZX0uMTJgO1xuY29uc3QgaWRCcmFpbnBvb2xQNTEycjEgPSBgJHtpZFZlcnNpb25PbmV9LjEzYDtcbmNvbnN0IGlkQnJhaW5wb29sUDUxMnQxID0gYCR7aWRWZXJzaW9uT25lfS4xNGA7XG5jb25zdCBpZFgyNTUxOSA9IFwiMS4zLjEwMS4xMTBcIjtcbmNvbnN0IGlkWDQ0OCA9IFwiMS4zLjEwMS4xMTFcIjtcbmNvbnN0IGlkRWQyNTUxOSA9IFwiMS4zLjEwMS4xMTJcIjtcbmNvbnN0IGlkRWQ0NDggPSBcIjEuMy4xMDEuMTEzXCI7XG5cbnZhciBpbmRleCQxID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBfX3Byb3RvX186IG51bGwsXG4gIEFsZ29yaXRobUlkZW50aWZpZXI6IEFsZ29yaXRobUlkZW50aWZpZXIsXG4gIGdldCBDdXJ2ZVByaXZhdGVLZXkgKCkgeyByZXR1cm4gQ3VydmVQcml2YXRlS2V5OyB9LFxuICBFY0RzYVNpZ25hdHVyZTogRWNEc2FTaWduYXR1cmUsXG4gIEVjUHJpdmF0ZUtleTogRWNQcml2YXRlS2V5LFxuICBnZXQgRWNQdWJsaWNLZXkgKCkgeyByZXR1cm4gRWNQdWJsaWNLZXk7IH0sXG4gIGdldCBFZFByaXZhdGVLZXkgKCkgeyByZXR1cm4gRWRQcml2YXRlS2V5OyB9LFxuICBnZXQgRWRQdWJsaWNLZXkgKCkgeyByZXR1cm4gRWRQdWJsaWNLZXk7IH0sXG4gIGdldCBPYmplY3RJZGVudGlmaWVyICgpIHsgcmV0dXJuIE9iamVjdElkZW50aWZpZXI7IH0sXG4gIE9uZUFzeW1tZXRyaWNLZXk6IE9uZUFzeW1tZXRyaWNLZXksXG4gIFByaXZhdGVLZXlJbmZvOiBQcml2YXRlS2V5SW5mbyxcbiAgUHVibGljS2V5SW5mbzogUHVibGljS2V5SW5mbyxcbiAgUnNhUHJpdmF0ZUtleTogUnNhUHJpdmF0ZUtleSxcbiAgUnNhUHVibGljS2V5OiBSc2FQdWJsaWNLZXksXG4gIGNvbnZlcnRlcnM6IGluZGV4JDIsXG4gIGlkQnJhaW5wb29sUDE2MHIxOiBpZEJyYWlucG9vbFAxNjByMSxcbiAgaWRCcmFpbnBvb2xQMTYwdDE6IGlkQnJhaW5wb29sUDE2MHQxLFxuICBpZEJyYWlucG9vbFAxOTJyMTogaWRCcmFpbnBvb2xQMTkycjEsXG4gIGlkQnJhaW5wb29sUDE5MnQxOiBpZEJyYWlucG9vbFAxOTJ0MSxcbiAgaWRCcmFpbnBvb2xQMjI0cjE6IGlkQnJhaW5wb29sUDIyNHIxLFxuICBpZEJyYWlucG9vbFAyMjR0MTogaWRCcmFpbnBvb2xQMjI0dDEsXG4gIGlkQnJhaW5wb29sUDI1NnIxOiBpZEJyYWlucG9vbFAyNTZyMSxcbiAgaWRCcmFpbnBvb2xQMjU2dDE6IGlkQnJhaW5wb29sUDI1NnQxLFxuICBpZEJyYWlucG9vbFAzMjByMTogaWRCcmFpbnBvb2xQMzIwcjEsXG4gIGlkQnJhaW5wb29sUDMyMHQxOiBpZEJyYWlucG9vbFAzMjB0MSxcbiAgaWRCcmFpbnBvb2xQMzg0cjE6IGlkQnJhaW5wb29sUDM4NHIxLFxuICBpZEJyYWlucG9vbFAzODR0MTogaWRCcmFpbnBvb2xQMzg0dDEsXG4gIGlkQnJhaW5wb29sUDUxMnIxOiBpZEJyYWlucG9vbFA1MTJyMSxcbiAgaWRCcmFpbnBvb2xQNTEydDE6IGlkQnJhaW5wb29sUDUxMnQxLFxuICBpZEVkMjU1MTk6IGlkRWQyNTUxOSxcbiAgaWRFZDQ0ODogaWRFZDQ0OCxcbiAgaWRFbGxpcHRpY0N1cnZlOiBpZEVsbGlwdGljQ3VydmUsXG4gIGlkU2VjcDI1NmsxOiBpZFNlY3AyNTZrMSxcbiAgaWRTZWNwMjU2cjE6IGlkU2VjcDI1NnIxLFxuICBpZFNlY3AzODRyMTogaWRTZWNwMzg0cjEsXG4gIGlkU2VjcDUyMXIxOiBpZFNlY3A1MjFyMSxcbiAgaWRWZXJzaW9uT25lOiBpZFZlcnNpb25PbmUsXG4gIGlkWDI1NTE5OiBpZFgyNTUxOSxcbiAgaWRYNDQ4OiBpZFg0NDhcbn0pO1xuXG5jbGFzcyBFY0N1cnZlcyB7XG4gICAgY29uc3RydWN0b3IoKSB7IH1cbiAgICBzdGF0aWMgcmVnaXN0ZXIoaXRlbSkge1xuICAgICAgICBjb25zdCBvaWQgPSBuZXcgT2JqZWN0SWRlbnRpZmllcigpO1xuICAgICAgICBvaWQudmFsdWUgPSBpdGVtLmlkO1xuICAgICAgICBjb25zdCByYXcgPSBBc25Db252ZXJ0LnNlcmlhbGl6ZShvaWQpO1xuICAgICAgICB0aGlzLml0ZW1zLnB1c2goe1xuICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgIHJhdyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubmFtZXMucHVzaChpdGVtLm5hbWUpO1xuICAgIH1cbiAgICBzdGF0aWMgZmluZChuYW1lT3JJZCkge1xuICAgICAgICBuYW1lT3JJZCA9IG5hbWVPcklkLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLml0ZW1zKSB7XG4gICAgICAgICAgICBpZiAoaXRlbS5uYW1lLnRvVXBwZXJDYXNlKCkgPT09IG5hbWVPcklkIHx8IGl0ZW0uaWQudG9VcHBlckNhc2UoKSA9PT0gbmFtZU9ySWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgc3RhdGljIGdldChuYW1lT3JJZCkge1xuICAgICAgICBjb25zdCByZXMgPSB0aGlzLmZpbmQobmFtZU9ySWQpO1xuICAgICAgICBpZiAoIXJlcykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBFQyBuYW1lZCBjdXJ2ZSAnJHtuYW1lT3JJZH0nYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG59XG5FY0N1cnZlcy5pdGVtcyA9IFtdO1xuRWNDdXJ2ZXMubmFtZXMgPSBbXTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJQLTI1NlwiLCBpZDogaWRTZWNwMjU2cjEsIHNpemU6IDI1NiB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJQLTM4NFwiLCBpZDogaWRTZWNwMzg0cjEsIHNpemU6IDM4NCB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJQLTUyMVwiLCBpZDogaWRTZWNwNTIxcjEsIHNpemU6IDUyMSB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJLLTI1NlwiLCBpZDogaWRTZWNwMjU2azEsIHNpemU6IDI1NiB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJicmFpbnBvb2xQMTYwcjFcIiwgaWQ6IGlkQnJhaW5wb29sUDE2MHIxLCBzaXplOiAxNjAgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiYnJhaW5wb29sUDE2MHQxXCIsIGlkOiBpZEJyYWlucG9vbFAxNjB0MSwgc2l6ZTogMTYwIH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcImJyYWlucG9vbFAxOTJyMVwiLCBpZDogaWRCcmFpbnBvb2xQMTkycjEsIHNpemU6IDE5MiB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJicmFpbnBvb2xQMTkydDFcIiwgaWQ6IGlkQnJhaW5wb29sUDE5MnQxLCBzaXplOiAxOTIgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiYnJhaW5wb29sUDIyNHIxXCIsIGlkOiBpZEJyYWlucG9vbFAyMjRyMSwgc2l6ZTogMjI0IH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcImJyYWlucG9vbFAyMjR0MVwiLCBpZDogaWRCcmFpbnBvb2xQMjI0dDEsIHNpemU6IDIyNCB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJicmFpbnBvb2xQMjU2cjFcIiwgaWQ6IGlkQnJhaW5wb29sUDI1NnIxLCBzaXplOiAyNTYgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiYnJhaW5wb29sUDI1NnQxXCIsIGlkOiBpZEJyYWlucG9vbFAyNTZ0MSwgc2l6ZTogMjU2IH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcImJyYWlucG9vbFAzMjByMVwiLCBpZDogaWRCcmFpbnBvb2xQMzIwcjEsIHNpemU6IDMyMCB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJicmFpbnBvb2xQMzIwdDFcIiwgaWQ6IGlkQnJhaW5wb29sUDMyMHQxLCBzaXplOiAzMjAgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiYnJhaW5wb29sUDM4NHIxXCIsIGlkOiBpZEJyYWlucG9vbFAzODRyMSwgc2l6ZTogMzg0IH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcImJyYWlucG9vbFAzODR0MVwiLCBpZDogaWRCcmFpbnBvb2xQMzg0dDEsIHNpemU6IDM4NCB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJicmFpbnBvb2xQNTEycjFcIiwgaWQ6IGlkQnJhaW5wb29sUDUxMnIxLCBzaXplOiA1MTIgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiYnJhaW5wb29sUDUxMnQxXCIsIGlkOiBpZEJyYWlucG9vbFA1MTJ0MSwgc2l6ZTogNTEyIH0pO1xuXG5jbGFzcyBYMjU1MTlQcm92aWRlciBleHRlbmRzIFByb3ZpZGVyQ3J5cHRvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJYMjU1MTlcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSB7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBbXCJkZXJpdmVLZXlcIiwgXCJkZXJpdmVCaXRzXCJdLFxuICAgICAgICAgICAgcHVibGljS2V5OiBbXSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJwdWJsaWNcIik7XG4gICAgfVxufVxuXG5jbGFzcyBFZDI1NTE5UHJvdmlkZXIgZXh0ZW5kcyBQcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiRWQyNTUxOVwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IHtcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IFtcInNpZ25cIl0sXG4gICAgICAgICAgICBwdWJsaWNLZXk6IFtcInZlcmlmeVwiXSxcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbmNsYXNzIEhtYWNQcm92aWRlciBleHRlbmRzIFByb3ZpZGVyQ3J5cHRvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJITUFDXCI7XG4gICAgICAgIHRoaXMuaGFzaEFsZ29yaXRobXMgPSBbXCJTSEEtMVwiLCBcIlNIQS0yNTZcIiwgXCJTSEEtMzg0XCIsIFwiU0hBLTUxMlwiXTtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXCJzaWduXCIsIFwidmVyaWZ5XCJdO1xuICAgIH1cbiAgICBnZXREZWZhdWx0TGVuZ3RoKGFsZ05hbWUpIHtcbiAgICAgICAgc3dpdGNoIChhbGdOYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtMVwiOlxuICAgICAgICAgICAgY2FzZSBcIlNIQS0yNTZcIjpcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtMzg0XCI6XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTUxMlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiA1MTI7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBhbGdvcml0aG0gbmFtZSAnJHthbGdOYW1lfSdgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja0dlbmVyYXRlS2V5UGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwiaGFzaFwiKTtcbiAgICAgICAgdGhpcy5jaGVja0hhc2hBbGdvcml0aG0oYWxnb3JpdGhtLmhhc2gsIHRoaXMuaGFzaEFsZ29yaXRobXMpO1xuICAgICAgICBpZiAoXCJsZW5ndGhcIiBpbiBhbGdvcml0aG0pIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgYWxnb3JpdGhtLmxlbmd0aCAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJsZW5ndGg6IElzIG5vdCBhIE51bWJlclwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhbGdvcml0aG0ubGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwibGVuZ3RoOiBOdW1iZXIgaXMgb3V0IG9mIHJhbmdlXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGNoZWNrSW1wb3J0UGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwiaGFzaFwiKTtcbiAgICAgICAgdGhpcy5jaGVja0hhc2hBbGdvcml0aG0oYWxnb3JpdGhtLmhhc2gsIHRoaXMuaGFzaEFsZ29yaXRobXMpO1xuICAgIH1cbn1cblxuY2xhc3MgUGJrZGYyUHJvdmlkZXIgZXh0ZW5kcyBQcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiUEJLREYyXCI7XG4gICAgICAgIHRoaXMuaGFzaEFsZ29yaXRobXMgPSBbXCJTSEEtMVwiLCBcIlNIQS0yNTZcIiwgXCJTSEEtMzg0XCIsIFwiU0hBLTUxMlwiXTtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXCJkZXJpdmVCaXRzXCIsIFwiZGVyaXZlS2V5XCJdO1xuICAgIH1cbiAgICBjaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcImhhc2hcIik7XG4gICAgICAgIHRoaXMuY2hlY2tIYXNoQWxnb3JpdGhtKGFsZ29yaXRobS5oYXNoLCB0aGlzLmhhc2hBbGdvcml0aG1zKTtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcInNhbHRcIik7XG4gICAgICAgIGlmICghKGFsZ29yaXRobS5zYWx0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgfHwgQXJyYXlCdWZmZXIuaXNWaWV3KGFsZ29yaXRobS5zYWx0KSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJzYWx0OiBJcyBub3Qgb2YgdHlwZSAnKEFycmF5QnVmZmVyIG9yIEFycmF5QnVmZmVyVmlldyknXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJpdGVyYXRpb25zXCIpO1xuICAgICAgICBpZiAodHlwZW9mIGFsZ29yaXRobS5pdGVyYXRpb25zICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiaXRlcmF0aW9uczogSXMgbm90IGEgTnVtYmVyXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbGdvcml0aG0uaXRlcmF0aW9ucyA8IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRpb25zOiBJcyBsZXNzIHRoYW4gMVwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja0ltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgLi4uYXJncykge1xuICAgICAgICBzdXBlci5jaGVja0ltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgLi4uYXJncyk7XG4gICAgICAgIGlmIChleHRyYWN0YWJsZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiZXh0cmFjdGFibGU6IE11c3QgYmUgJ2ZhbHNlJ1wiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgSGtkZlByb3ZpZGVyIGV4dGVuZHMgUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkhLREZcIjtcbiAgICAgICAgdGhpcy5oYXNoQWxnb3JpdGhtcyA9IFtcIlNIQS0xXCIsIFwiU0hBLTI1NlwiLCBcIlNIQS0zODRcIiwgXCJTSEEtNTEyXCJdO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtcImRlcml2ZUtleVwiLCBcImRlcml2ZUJpdHNcIl07XG4gICAgfVxuICAgIGNoZWNrQWxnb3JpdGhtUGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwiaGFzaFwiKTtcbiAgICAgICAgdGhpcy5jaGVja0hhc2hBbGdvcml0aG0oYWxnb3JpdGhtLmhhc2gsIHRoaXMuaGFzaEFsZ29yaXRobXMpO1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwic2FsdFwiKTtcbiAgICAgICAgaWYgKCFCdWZmZXJTb3VyY2VDb252ZXJ0ZXIuaXNCdWZmZXJTb3VyY2UoYWxnb3JpdGhtLnNhbHQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwic2FsdDogSXMgbm90IG9mIHR5cGUgJyhBcnJheUJ1ZmZlciBvciBBcnJheUJ1ZmZlclZpZXcpJ1wiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwiaW5mb1wiKTtcbiAgICAgICAgaWYgKCFCdWZmZXJTb3VyY2VDb252ZXJ0ZXIuaXNCdWZmZXJTb3VyY2UoYWxnb3JpdGhtLmluZm8pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwic2FsdDogSXMgbm90IG9mIHR5cGUgJyhBcnJheUJ1ZmZlciBvciBBcnJheUJ1ZmZlclZpZXcpJ1wiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja0ltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgLi4uYXJncykge1xuICAgICAgICBzdXBlci5jaGVja0ltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgLi4uYXJncyk7XG4gICAgICAgIGlmIChleHRyYWN0YWJsZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiZXh0cmFjdGFibGU6IE11c3QgYmUgJ2ZhbHNlJ1wiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgU2hha2VQcm92aWRlciBleHRlbmRzIFByb3ZpZGVyQ3J5cHRvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXTtcbiAgICAgICAgdGhpcy5kZWZhdWx0TGVuZ3RoID0gMDtcbiAgICB9XG4gICAgZGlnZXN0KC4uLmFyZ3MpIHtcbiAgICAgICAgYXJnc1swXSA9IHsgbGVuZ3RoOiB0aGlzLmRlZmF1bHRMZW5ndGgsIC4uLmFyZ3NbMF0gfTtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmRpZ2VzdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gICAgY2hlY2tEaWdlc3QoYWxnb3JpdGhtLCBkYXRhKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrRGlnZXN0KGFsZ29yaXRobSwgZGF0YSk7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IGFsZ29yaXRobS5sZW5ndGggfHwgMDtcbiAgICAgICAgaWYgKHR5cGVvZiBsZW5ndGggIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJsZW5ndGg6IElzIG5vdCBhIE51bWJlclwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGVuZ3RoIDwgMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImxlbmd0aDogSXMgbmVnYXRpdmVcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIFNoYWtlMTI4UHJvdmlkZXIgZXh0ZW5kcyBTaGFrZVByb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJzaGFrZTEyOFwiO1xuICAgICAgICB0aGlzLmRlZmF1bHRMZW5ndGggPSAxNjtcbiAgICB9XG59XG5cbmNsYXNzIFNoYWtlMjU2UHJvdmlkZXIgZXh0ZW5kcyBTaGFrZVByb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJzaGFrZTI1NlwiO1xuICAgICAgICB0aGlzLmRlZmF1bHRMZW5ndGggPSAzMjtcbiAgICB9XG59XG5cbmNsYXNzIENyeXB0byB7XG4gICAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgICAgICByZXR1cm4gXCJDcnlwdG9cIjtcbiAgICB9XG4gICAgcmFuZG9tVVVJRCgpIHtcbiAgICAgICAgY29uc3QgYiA9IHRoaXMuZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KDE2KSk7XG4gICAgICAgIGJbNl0gPSAoYls2XSAmIDB4MGYpIHwgMHg0MDtcbiAgICAgICAgYls4XSA9IChiWzhdICYgMHgzZikgfCAweDgwO1xuICAgICAgICBjb25zdCB1dWlkID0gQ29udmVydC5Ub0hleChiKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICByZXR1cm4gYCR7dXVpZC5zdWJzdHJpbmcoMCwgOCl9LSR7dXVpZC5zdWJzdHJpbmcoOCwgMTIpfS0ke3V1aWQuc3Vic3RyaW5nKDEyLCAxNil9LSR7dXVpZC5zdWJzdHJpbmcoMTYsIDIwKX0tJHt1dWlkLnN1YnN0cmluZygyMCl9YDtcbiAgICB9XG59XG5cbmNsYXNzIFByb3ZpZGVyU3RvcmFnZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuaXRlbXMgPSB7fTtcbiAgICB9XG4gICAgZ2V0KGFsZ29yaXRobU5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXNbYWxnb3JpdGhtTmFtZS50b0xvd2VyQ2FzZSgpXSB8fCBudWxsO1xuICAgIH1cbiAgICBzZXQocHJvdmlkZXIpIHtcbiAgICAgICAgdGhpcy5pdGVtc1twcm92aWRlci5uYW1lLnRvTG93ZXJDYXNlKCldID0gcHJvdmlkZXI7XG4gICAgfVxuICAgIHJlbW92ZUF0KGFsZ29yaXRobU5hbWUpIHtcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLmdldChhbGdvcml0aG1OYW1lLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICBpZiAocHJvdmlkZXIpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLml0ZW1zW2FsZ29yaXRobU5hbWVdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm92aWRlcjtcbiAgICB9XG4gICAgaGFzKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5nZXQobmFtZSk7XG4gICAgfVxuICAgIGdldCBsZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLml0ZW1zKS5sZW5ndGg7XG4gICAgfVxuICAgIGdldCBhbGdvcml0aG1zKCkge1xuICAgICAgICBjb25zdCBhbGdvcml0aG1zID0gW107XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuaXRlbXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5pdGVtc1trZXldO1xuICAgICAgICAgICAgYWxnb3JpdGhtcy5wdXNoKHByb3ZpZGVyLm5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhbGdvcml0aG1zLnNvcnQoKTtcbiAgICB9XG59XG5cbmNvbnN0IGtleUZvcm1hdE1hcCA9IHtcbiAgICBcImp3a1wiOiBbXCJwcml2YXRlXCIsIFwicHVibGljXCIsIFwic2VjcmV0XCJdLFxuICAgIFwicGtjczhcIjogW1wicHJpdmF0ZVwiXSxcbiAgICBcInNwa2lcIjogW1wicHVibGljXCJdLFxuICAgIFwicmF3XCI6IFtcInNlY3JldFwiLCBcInB1YmxpY1wiXVxufTtcbmNvbnN0IHNvdXJjZUJ1ZmZlcktleUZvcm1hdHMgPSBbXCJwa2NzOFwiLCBcInNwa2lcIiwgXCJyYXdcIl07XG5jbGFzcyBTdWJ0bGVDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnByb3ZpZGVycyA9IG5ldyBQcm92aWRlclN0b3JhZ2UoKTtcbiAgICB9XG4gICAgc3RhdGljIGlzSGFzaGVkQWxnb3JpdGhtKGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIGRhdGFcbiAgICAgICAgICAgICYmIHR5cGVvZiBkYXRhID09PSBcIm9iamVjdFwiXG4gICAgICAgICAgICAmJiBcIm5hbWVcIiBpbiBkYXRhXG4gICAgICAgICAgICAmJiBcImhhc2hcIiBpbiBkYXRhXG4gICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgIDogZmFsc2U7XG4gICAgfVxuICAgIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICAgICAgcmV0dXJuIFwiU3VidGxlQ3J5cHRvXCI7XG4gICAgfVxuICAgIGFzeW5jIGRpZ2VzdCguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZEFyZ3VtZW50cyhhcmdzLCAyLCBcImRpZ2VzdFwiKTtcbiAgICAgICAgY29uc3QgW2FsZ29yaXRobSwgZGF0YSwgLi4ucGFyYW1zXSA9IGFyZ3M7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkQWxnb3JpdGhtID0gdGhpcy5wcmVwYXJlQWxnb3JpdGhtKGFsZ29yaXRobSk7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkRGF0YSA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKGRhdGEpO1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuZ2V0UHJvdmlkZXIocHJlcGFyZWRBbGdvcml0aG0ubmFtZSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb3ZpZGVyLmRpZ2VzdChwcmVwYXJlZEFsZ29yaXRobSwgcHJlcGFyZWREYXRhLCAuLi5wYXJhbXMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBhc3luYyBnZW5lcmF0ZUtleSguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZEFyZ3VtZW50cyhhcmdzLCAzLCBcImdlbmVyYXRlS2V5XCIpO1xuICAgICAgICBjb25zdCBbYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCAuLi5wYXJhbXNdID0gYXJncztcbiAgICAgICAgY29uc3QgcHJlcGFyZWRBbGdvcml0aG0gPSB0aGlzLnByZXBhcmVBbGdvcml0aG0oYWxnb3JpdGhtKTtcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLmdldFByb3ZpZGVyKHByZXBhcmVkQWxnb3JpdGhtLm5hbWUpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm92aWRlci5nZW5lcmF0ZUtleSh7IC4uLnByZXBhcmVkQWxnb3JpdGhtLCBuYW1lOiBwcm92aWRlci5uYW1lIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIC4uLnBhcmFtcyk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGFzeW5jIHNpZ24oLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRBcmd1bWVudHMoYXJncywgMywgXCJzaWduXCIpO1xuICAgICAgICBjb25zdCBbYWxnb3JpdGhtLCBrZXksIGRhdGEsIC4uLnBhcmFtc10gPSBhcmdzO1xuICAgICAgICB0aGlzLmNoZWNrQ3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkQWxnb3JpdGhtID0gdGhpcy5wcmVwYXJlQWxnb3JpdGhtKGFsZ29yaXRobSk7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkRGF0YSA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKGRhdGEpO1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuZ2V0UHJvdmlkZXIocHJlcGFyZWRBbGdvcml0aG0ubmFtZSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb3ZpZGVyLnNpZ24oeyAuLi5wcmVwYXJlZEFsZ29yaXRobSwgbmFtZTogcHJvdmlkZXIubmFtZSB9LCBrZXksIHByZXBhcmVkRGF0YSwgLi4ucGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgYXN5bmMgdmVyaWZ5KC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkQXJndW1lbnRzKGFyZ3MsIDQsIFwidmVyaWZ5XCIpO1xuICAgICAgICBjb25zdCBbYWxnb3JpdGhtLCBrZXksIHNpZ25hdHVyZSwgZGF0YSwgLi4ucGFyYW1zXSA9IGFyZ3M7XG4gICAgICAgIHRoaXMuY2hlY2tDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgY29uc3QgcHJlcGFyZWRBbGdvcml0aG0gPSB0aGlzLnByZXBhcmVBbGdvcml0aG0oYWxnb3JpdGhtKTtcbiAgICAgICAgY29uc3QgcHJlcGFyZWREYXRhID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoZGF0YSk7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkU2lnbmF0dXJlID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoc2lnbmF0dXJlKTtcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLmdldFByb3ZpZGVyKHByZXBhcmVkQWxnb3JpdGhtLm5hbWUpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm92aWRlci52ZXJpZnkoeyAuLi5wcmVwYXJlZEFsZ29yaXRobSwgbmFtZTogcHJvdmlkZXIubmFtZSB9LCBrZXksIHByZXBhcmVkU2lnbmF0dXJlLCBwcmVwYXJlZERhdGEsIC4uLnBhcmFtcyk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGFzeW5jIGVuY3J5cHQoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRBcmd1bWVudHMoYXJncywgMywgXCJlbmNyeXB0XCIpO1xuICAgICAgICBjb25zdCBbYWxnb3JpdGhtLCBrZXksIGRhdGEsIC4uLnBhcmFtc10gPSBhcmdzO1xuICAgICAgICB0aGlzLmNoZWNrQ3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkQWxnb3JpdGhtID0gdGhpcy5wcmVwYXJlQWxnb3JpdGhtKGFsZ29yaXRobSk7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkRGF0YSA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKGRhdGEpO1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuZ2V0UHJvdmlkZXIocHJlcGFyZWRBbGdvcml0aG0ubmFtZSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb3ZpZGVyLmVuY3J5cHQoeyAuLi5wcmVwYXJlZEFsZ29yaXRobSwgbmFtZTogcHJvdmlkZXIubmFtZSB9LCBrZXksIHByZXBhcmVkRGF0YSwgeyBrZXlVc2FnZTogdHJ1ZSB9LCAuLi5wYXJhbXMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBhc3luYyBkZWNyeXB0KC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkQXJndW1lbnRzKGFyZ3MsIDMsIFwiZGVjcnlwdFwiKTtcbiAgICAgICAgY29uc3QgW2FsZ29yaXRobSwga2V5LCBkYXRhLCAuLi5wYXJhbXNdID0gYXJncztcbiAgICAgICAgdGhpcy5jaGVja0NyeXB0b0tleShrZXkpO1xuICAgICAgICBjb25zdCBwcmVwYXJlZEFsZ29yaXRobSA9IHRoaXMucHJlcGFyZUFsZ29yaXRobShhbGdvcml0aG0pO1xuICAgICAgICBjb25zdCBwcmVwYXJlZERhdGEgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihkYXRhKTtcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLmdldFByb3ZpZGVyKHByZXBhcmVkQWxnb3JpdGhtLm5hbWUpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm92aWRlci5kZWNyeXB0KHsgLi4ucHJlcGFyZWRBbGdvcml0aG0sIG5hbWU6IHByb3ZpZGVyLm5hbWUgfSwga2V5LCBwcmVwYXJlZERhdGEsIHsga2V5VXNhZ2U6IHRydWUgfSwgLi4ucGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgYXN5bmMgZGVyaXZlQml0cyguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZEFyZ3VtZW50cyhhcmdzLCAzLCBcImRlcml2ZUJpdHNcIik7XG4gICAgICAgIGNvbnN0IFthbGdvcml0aG0sIGJhc2VLZXksIGxlbmd0aCwgLi4ucGFyYW1zXSA9IGFyZ3M7XG4gICAgICAgIHRoaXMuY2hlY2tDcnlwdG9LZXkoYmFzZUtleSk7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkQWxnb3JpdGhtID0gdGhpcy5wcmVwYXJlQWxnb3JpdGhtKGFsZ29yaXRobSk7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5nZXRQcm92aWRlcihwcmVwYXJlZEFsZ29yaXRobS5uYW1lKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJvdmlkZXIuZGVyaXZlQml0cyh7IC4uLnByZXBhcmVkQWxnb3JpdGhtLCBuYW1lOiBwcm92aWRlci5uYW1lIH0sIGJhc2VLZXksIGxlbmd0aCwgeyBrZXlVc2FnZTogdHJ1ZSB9LCAuLi5wYXJhbXMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBhc3luYyBkZXJpdmVLZXkoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRBcmd1bWVudHMoYXJncywgNSwgXCJkZXJpdmVLZXlcIik7XG4gICAgICAgIGNvbnN0IFthbGdvcml0aG0sIGJhc2VLZXksIGRlcml2ZWRLZXlUeXBlLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCAuLi5wYXJhbXNdID0gYXJncztcbiAgICAgICAgY29uc3QgcHJlcGFyZWREZXJpdmVkS2V5VHlwZSA9IHRoaXMucHJlcGFyZUFsZ29yaXRobShkZXJpdmVkS2V5VHlwZSk7XG4gICAgICAgIGNvbnN0IGltcG9ydFByb3ZpZGVyID0gdGhpcy5nZXRQcm92aWRlcihwcmVwYXJlZERlcml2ZWRLZXlUeXBlLm5hbWUpO1xuICAgICAgICBpbXBvcnRQcm92aWRlci5jaGVja0Rlcml2ZWRLZXlQYXJhbXMocHJlcGFyZWREZXJpdmVkS2V5VHlwZSk7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkQWxnb3JpdGhtID0gdGhpcy5wcmVwYXJlQWxnb3JpdGhtKGFsZ29yaXRobSk7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5nZXRQcm92aWRlcihwcmVwYXJlZEFsZ29yaXRobS5uYW1lKTtcbiAgICAgICAgcHJvdmlkZXIuY2hlY2tDcnlwdG9LZXkoYmFzZUtleSwgXCJkZXJpdmVLZXlcIik7XG4gICAgICAgIGNvbnN0IGRlcml2ZWRCaXRzID0gYXdhaXQgcHJvdmlkZXIuZGVyaXZlQml0cyh7IC4uLnByZXBhcmVkQWxnb3JpdGhtLCBuYW1lOiBwcm92aWRlci5uYW1lIH0sIGJhc2VLZXksIGRlcml2ZWRLZXlUeXBlLmxlbmd0aCB8fCA1MTIsIHsga2V5VXNhZ2U6IGZhbHNlIH0sIC4uLnBhcmFtcyk7XG4gICAgICAgIHJldHVybiB0aGlzLmltcG9ydEtleShcInJhd1wiLCBkZXJpdmVkQml0cywgZGVyaXZlZEtleVR5cGUsIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIC4uLnBhcmFtcyk7XG4gICAgfVxuICAgIGFzeW5jIGV4cG9ydEtleSguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZEFyZ3VtZW50cyhhcmdzLCAyLCBcImV4cG9ydEtleVwiKTtcbiAgICAgICAgY29uc3QgW2Zvcm1hdCwga2V5LCAuLi5wYXJhbXNdID0gYXJncztcbiAgICAgICAgdGhpcy5jaGVja0NyeXB0b0tleShrZXkpO1xuICAgICAgICBpZiAoIWtleUZvcm1hdE1hcFtmb3JtYXRdKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBrZXlGb3JtYXQgYXJndW1lbnRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFrZXlGb3JtYXRNYXBbZm9ybWF0XS5pbmNsdWRlcyhrZXkudHlwZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oXCJUaGUga2V5IGlzIG5vdCBvZiB0aGUgZXhwZWN0ZWQgdHlwZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuZ2V0UHJvdmlkZXIoa2V5LmFsZ29yaXRobS5uYW1lKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJvdmlkZXIuZXhwb3J0S2V5KGZvcm1hdCwga2V5LCAuLi5wYXJhbXMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBhc3luYyBpbXBvcnRLZXkoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRBcmd1bWVudHMoYXJncywgNSwgXCJpbXBvcnRLZXlcIik7XG4gICAgICAgIGNvbnN0IFtmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgLi4ucGFyYW1zXSA9IGFyZ3M7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkQWxnb3JpdGhtID0gdGhpcy5wcmVwYXJlQWxnb3JpdGhtKGFsZ29yaXRobSk7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5nZXRQcm92aWRlcihwcmVwYXJlZEFsZ29yaXRobS5uYW1lKTtcbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gXCJqd2tcIikge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBrZXlEYXRhICE9PSBcIm9iamVjdFwiIHx8ICFrZXlEYXRhLmt0eSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJLZXkgZGF0YSBtdXN0IGJlIGFuIG9iamVjdCBmb3IgSldLIGltcG9ydFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzb3VyY2VCdWZmZXJLZXlGb3JtYXRzLmluY2x1ZGVzKGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGlmICghQnVmZmVyU291cmNlQ29udmVydGVyLmlzQnVmZmVyU291cmNlKGtleURhdGEpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIktleSBkYXRhIG11c3QgYmUgYSBCdWZmZXJTb3VyY2UgZm9yIG5vbi1KV0sgZm9ybWF0c1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJUaGUgcHJvdmlkZWQgdmFsdWUgaXMgbm90IG9mIHR5cGUgJyhBcnJheUJ1ZmZlciBvciBBcnJheUJ1ZmZlclZpZXcgb3IgSnNvbldlYktleSknXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm92aWRlci5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB7IC4uLnByZXBhcmVkQWxnb3JpdGhtLCBuYW1lOiBwcm92aWRlci5uYW1lIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIC4uLnBhcmFtcyk7XG4gICAgfVxuICAgIGFzeW5jIHdyYXBLZXkoZm9ybWF0LCBrZXksIHdyYXBwaW5nS2V5LCB3cmFwQWxnb3JpdGhtLCAuLi5hcmdzKSB7XG4gICAgICAgIGxldCBrZXlEYXRhID0gYXdhaXQgdGhpcy5leHBvcnRLZXkoZm9ybWF0LCBrZXksIC4uLmFyZ3MpO1xuICAgICAgICBpZiAoZm9ybWF0ID09PSBcImp3a1wiKSB7XG4gICAgICAgICAgICBjb25zdCBqc29uID0gSlNPTi5zdHJpbmdpZnkoa2V5RGF0YSk7XG4gICAgICAgICAgICBrZXlEYXRhID0gQ29udmVydC5Gcm9tVXRmOFN0cmluZyhqc29uKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcmVwYXJlZEFsZ29yaXRobSA9IHRoaXMucHJlcGFyZUFsZ29yaXRobSh3cmFwQWxnb3JpdGhtKTtcbiAgICAgICAgY29uc3QgcHJlcGFyZWREYXRhID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoa2V5RGF0YSk7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5nZXRQcm92aWRlcihwcmVwYXJlZEFsZ29yaXRobS5uYW1lKTtcbiAgICAgICAgcmV0dXJuIHByb3ZpZGVyLmVuY3J5cHQoeyAuLi5wcmVwYXJlZEFsZ29yaXRobSwgbmFtZTogcHJvdmlkZXIubmFtZSB9LCB3cmFwcGluZ0tleSwgcHJlcGFyZWREYXRhLCB7IGtleVVzYWdlOiBmYWxzZSB9LCAuLi5hcmdzKTtcbiAgICB9XG4gICAgYXN5bmMgdW53cmFwS2V5KGZvcm1hdCwgd3JhcHBlZEtleSwgdW53cmFwcGluZ0tleSwgdW53cmFwQWxnb3JpdGhtLCB1bndyYXBwZWRLZXlBbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgcHJlcGFyZWRBbGdvcml0aG0gPSB0aGlzLnByZXBhcmVBbGdvcml0aG0odW53cmFwQWxnb3JpdGhtKTtcbiAgICAgICAgY29uc3QgcHJlcGFyZWREYXRhID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIod3JhcHBlZEtleSk7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5nZXRQcm92aWRlcihwcmVwYXJlZEFsZ29yaXRobS5uYW1lKTtcbiAgICAgICAgbGV0IGtleURhdGEgPSBhd2FpdCBwcm92aWRlci5kZWNyeXB0KHsgLi4ucHJlcGFyZWRBbGdvcml0aG0sIG5hbWU6IHByb3ZpZGVyLm5hbWUgfSwgdW53cmFwcGluZ0tleSwgcHJlcGFyZWREYXRhLCB7IGtleVVzYWdlOiBmYWxzZSB9LCAuLi5hcmdzKTtcbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gXCJqd2tcIikge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBrZXlEYXRhID0gSlNPTi5wYXJzZShDb252ZXJ0LlRvVXRmOFN0cmluZyhrZXlEYXRhKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IFR5cGVFcnJvcihcIndyYXBwZWRLZXk6IElzIG5vdCBhIEpTT05cIik7XG4gICAgICAgICAgICAgICAgZXJyb3IuaW50ZXJuYWwgPSBlO1xuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIHVud3JhcHBlZEtleUFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgLi4uYXJncyk7XG4gICAgfVxuICAgIGNoZWNrUmVxdWlyZWRBcmd1bWVudHMoYXJncywgc2l6ZSwgbWV0aG9kTmFtZSkge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPCBzaXplKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBGYWlsZWQgdG8gZXhlY3V0ZSAnJHttZXRob2ROYW1lfScgb24gJ1N1YnRsZUNyeXB0byc6ICR7c2l6ZX0gYXJndW1lbnRzIHJlcXVpcmVkLCBidXQgb25seSAke2FyZ3MubGVuZ3RofSBwcmVzZW50YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJlcGFyZUFsZ29yaXRobShhbGdvcml0aG0pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBhbGdvcml0aG0gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbmFtZTogYWxnb3JpdGhtLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoU3VidGxlQ3J5cHRvLmlzSGFzaGVkQWxnb3JpdGhtKGFsZ29yaXRobSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHByZXBhcmVkQWxnb3JpdGhtID0geyAuLi5hbGdvcml0aG0gfTtcbiAgICAgICAgICAgIHByZXBhcmVkQWxnb3JpdGhtLmhhc2ggPSB0aGlzLnByZXBhcmVBbGdvcml0aG0oYWxnb3JpdGhtLmhhc2gpO1xuICAgICAgICAgICAgcmV0dXJuIHByZXBhcmVkQWxnb3JpdGhtO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IC4uLmFsZ29yaXRobSB9O1xuICAgIH1cbiAgICBnZXRQcm92aWRlcihuYW1lKSB7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5wcm92aWRlcnMuZ2V0KG5hbWUpO1xuICAgICAgICBpZiAoIXByb3ZpZGVyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQWxnb3JpdGhtRXJyb3IoXCJVbnJlY29nbml6ZWQgbmFtZVwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvdmlkZXI7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSkge1xuICAgICAgICBpZiAoIShrZXkgaW5zdGFuY2VvZiBDcnlwdG9LZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBLZXkgaXMgbm90IG9mIHR5cGUgJ0NyeXB0b0tleSdgKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxudmFyIGluZGV4ID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBfX3Byb3RvX186IG51bGwsXG4gIGNvbnZlcnRlcnM6IGluZGV4JDNcbn0pO1xuXG5jb25zdCBSRVFVSVJFRF9GSUVMRFMgPSBbXCJjcnZcIiwgXCJlXCIsIFwia1wiLCBcImt0eVwiLCBcIm5cIiwgXCJ4XCIsIFwieVwiXTtcbmNsYXNzIEp3a1V0aWxzIHtcbiAgICBzdGF0aWMgYXN5bmMgdGh1bWJwcmludChoYXNoLCBqd2ssIGNyeXB0bykge1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5mb3JtYXQoandrLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIGNyeXB0by5zdWJ0bGUuZGlnZXN0KGhhc2gsIENvbnZlcnQuRnJvbUJpbmFyeShKU09OLnN0cmluZ2lmeShkYXRhKSkpO1xuICAgIH1cbiAgICBzdGF0aWMgZm9ybWF0KGp3aywgcmVtb3ZlID0gZmFsc2UpIHtcbiAgICAgICAgbGV0IHJlcyA9IE9iamVjdC5lbnRyaWVzKGp3ayk7XG4gICAgICAgIGlmIChyZW1vdmUpIHtcbiAgICAgICAgICAgIHJlcyA9IHJlcy5maWx0ZXIobyA9PiBSRVFVSVJFRF9GSUVMRFMuaW5jbHVkZXMob1swXSkpO1xuICAgICAgICB9XG4gICAgICAgIHJlcyA9IHJlcy5zb3J0KChba2V5QV0sIFtrZXlCXSkgPT4ga2V5QSA+IGtleUIgPyAxIDoga2V5QSA8IGtleUIgPyAtMSA6IDApO1xuICAgICAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKHJlcyk7XG4gICAgfVxufVxuXG5leHBvcnQgeyBBZXNDYmNQcm92aWRlciwgQWVzQ21hY1Byb3ZpZGVyLCBBZXNDdHJQcm92aWRlciwgQWVzRWNiUHJvdmlkZXIsIEFlc0djbVByb3ZpZGVyLCBBZXNLd1Byb3ZpZGVyLCBBZXNQcm92aWRlciwgQWxnb3JpdGhtRXJyb3IsIENyeXB0bywgQ3J5cHRvRXJyb3IsIENyeXB0b0tleSwgRGVzUHJvdmlkZXIsIEVjQ3VydmVzLCBFY1V0aWxzLCBFY2RoRXNQcm92aWRlciwgRWNkaFByb3ZpZGVyLCBFY2RzYVByb3ZpZGVyLCBFZDI1NTE5UHJvdmlkZXIsIEVkRHNhUHJvdmlkZXIsIEVsbGlwdGljUHJvdmlkZXIsIEhrZGZQcm92aWRlciwgSG1hY1Byb3ZpZGVyLCBKd2tVdGlscywgT3BlcmF0aW9uRXJyb3IsIFBia2RmMlByb3ZpZGVyLCBQZW1Db252ZXJ0ZXIsIFByb3ZpZGVyQ3J5cHRvLCBQcm92aWRlclN0b3JhZ2UsIFJlcXVpcmVkUHJvcGVydHlFcnJvciwgUnNhT2FlcFByb3ZpZGVyLCBSc2FQcm92aWRlciwgUnNhUHNzUHJvdmlkZXIsIFJzYVNzYVByb3ZpZGVyLCBTaGFrZTEyOFByb3ZpZGVyLCBTaGFrZTI1NlByb3ZpZGVyLCBTaGFrZVByb3ZpZGVyLCBTdWJ0bGVDcnlwdG8sIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IsIFgyNTUxOVByb3ZpZGVyLCBpbmRleCQxIGFzIGFzbjEsIGlzSldLLCBpbmRleCBhcyBqc29uIH07XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmV4cG9ydHMuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcbmV4cG9ydHMudG9CeXRlQXJyYXkgPSB0b0J5dGVBcnJheVxuZXhwb3J0cy5mcm9tQnl0ZUFycmF5ID0gZnJvbUJ5dGVBcnJheVxuXG52YXIgbG9va3VwID0gW11cbnZhciByZXZMb29rdXAgPSBbXVxudmFyIEFyciA9IHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJyA/IFVpbnQ4QXJyYXkgOiBBcnJheVxuXG52YXIgY29kZSA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJ1xuZm9yICh2YXIgaSA9IDAsIGxlbiA9IGNvZGUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgbG9va3VwW2ldID0gY29kZVtpXVxuICByZXZMb29rdXBbY29kZS5jaGFyQ29kZUF0KGkpXSA9IGlcbn1cblxuLy8gU3VwcG9ydCBkZWNvZGluZyBVUkwtc2FmZSBiYXNlNjQgc3RyaW5ncywgYXMgTm9kZS5qcyBkb2VzLlxuLy8gU2VlOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CYXNlNjQjVVJMX2FwcGxpY2F0aW9uc1xucmV2TG9va3VwWyctJy5jaGFyQ29kZUF0KDApXSA9IDYyXG5yZXZMb29rdXBbJ18nLmNoYXJDb2RlQXQoMCldID0gNjNcblxuZnVuY3Rpb24gZ2V0TGVucyAoYjY0KSB7XG4gIHZhciBsZW4gPSBiNjQubGVuZ3RoXG5cbiAgaWYgKGxlbiAlIDQgPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0JylcbiAgfVxuXG4gIC8vIFRyaW0gb2ZmIGV4dHJhIGJ5dGVzIGFmdGVyIHBsYWNlaG9sZGVyIGJ5dGVzIGFyZSBmb3VuZFxuICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9iZWF0Z2FtbWl0L2Jhc2U2NC1qcy9pc3N1ZXMvNDJcbiAgdmFyIHZhbGlkTGVuID0gYjY0LmluZGV4T2YoJz0nKVxuICBpZiAodmFsaWRMZW4gPT09IC0xKSB2YWxpZExlbiA9IGxlblxuXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSB2YWxpZExlbiA9PT0gbGVuXG4gICAgPyAwXG4gICAgOiA0IC0gKHZhbGlkTGVuICUgNClcblxuICByZXR1cm4gW3ZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW5dXG59XG5cbi8vIGJhc2U2NCBpcyA0LzMgKyB1cCB0byB0d28gY2hhcmFjdGVycyBvZiB0aGUgb3JpZ2luYWwgZGF0YVxuZnVuY3Rpb24gYnl0ZUxlbmd0aCAoYjY0KSB7XG4gIHZhciBsZW5zID0gZ2V0TGVucyhiNjQpXG4gIHZhciB2YWxpZExlbiA9IGxlbnNbMF1cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IGxlbnNbMV1cbiAgcmV0dXJuICgodmFsaWRMZW4gKyBwbGFjZUhvbGRlcnNMZW4pICogMyAvIDQpIC0gcGxhY2VIb2xkZXJzTGVuXG59XG5cbmZ1bmN0aW9uIF9ieXRlTGVuZ3RoIChiNjQsIHZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW4pIHtcbiAgcmV0dXJuICgodmFsaWRMZW4gKyBwbGFjZUhvbGRlcnNMZW4pICogMyAvIDQpIC0gcGxhY2VIb2xkZXJzTGVuXG59XG5cbmZ1bmN0aW9uIHRvQnl0ZUFycmF5IChiNjQpIHtcbiAgdmFyIHRtcFxuICB2YXIgbGVucyA9IGdldExlbnMoYjY0KVxuICB2YXIgdmFsaWRMZW4gPSBsZW5zWzBdXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSBsZW5zWzFdXG5cbiAgdmFyIGFyciA9IG5ldyBBcnIoX2J5dGVMZW5ndGgoYjY0LCB2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuKSlcblxuICB2YXIgY3VyQnl0ZSA9IDBcblxuICAvLyBpZiB0aGVyZSBhcmUgcGxhY2Vob2xkZXJzLCBvbmx5IGdldCB1cCB0byB0aGUgbGFzdCBjb21wbGV0ZSA0IGNoYXJzXG4gIHZhciBsZW4gPSBwbGFjZUhvbGRlcnNMZW4gPiAwXG4gICAgPyB2YWxpZExlbiAtIDRcbiAgICA6IHZhbGlkTGVuXG5cbiAgdmFyIGlcbiAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDE4KSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgMTIpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDIpXSA8PCA2KSB8XG4gICAgICByZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDMpXVxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiAxNikgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgaWYgKHBsYWNlSG9sZGVyc0xlbiA9PT0gMikge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAyKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPj4gNClcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIGlmIChwbGFjZUhvbGRlcnNMZW4gPT09IDEpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMTApIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA8PCA0KSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPj4gMilcbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gOCkgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICByZXR1cm4gYXJyXG59XG5cbmZ1bmN0aW9uIHRyaXBsZXRUb0Jhc2U2NCAobnVtKSB7XG4gIHJldHVybiBsb29rdXBbbnVtID4+IDE4ICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gPj4gMTIgJiAweDNGXSArXG4gICAgbG9va3VwW251bSA+PiA2ICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gJiAweDNGXVxufVxuXG5mdW5jdGlvbiBlbmNvZGVDaHVuayAodWludDgsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHRtcFxuICB2YXIgb3V0cHV0ID0gW11cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IDMpIHtcbiAgICB0bXAgPVxuICAgICAgKCh1aW50OFtpXSA8PCAxNikgJiAweEZGMDAwMCkgK1xuICAgICAgKCh1aW50OFtpICsgMV0gPDwgOCkgJiAweEZGMDApICtcbiAgICAgICh1aW50OFtpICsgMl0gJiAweEZGKVxuICAgIG91dHB1dC5wdXNoKHRyaXBsZXRUb0Jhc2U2NCh0bXApKVxuICB9XG4gIHJldHVybiBvdXRwdXQuam9pbignJylcbn1cblxuZnVuY3Rpb24gZnJvbUJ5dGVBcnJheSAodWludDgpIHtcbiAgdmFyIHRtcFxuICB2YXIgbGVuID0gdWludDgubGVuZ3RoXG4gIHZhciBleHRyYUJ5dGVzID0gbGVuICUgMyAvLyBpZiB3ZSBoYXZlIDEgYnl0ZSBsZWZ0LCBwYWQgMiBieXRlc1xuICB2YXIgcGFydHMgPSBbXVxuICB2YXIgbWF4Q2h1bmtMZW5ndGggPSAxNjM4MyAvLyBtdXN0IGJlIG11bHRpcGxlIG9mIDNcblxuICAvLyBnbyB0aHJvdWdoIHRoZSBhcnJheSBldmVyeSB0aHJlZSBieXRlcywgd2UnbGwgZGVhbCB3aXRoIHRyYWlsaW5nIHN0dWZmIGxhdGVyXG4gIGZvciAodmFyIGkgPSAwLCBsZW4yID0gbGVuIC0gZXh0cmFCeXRlczsgaSA8IGxlbjI7IGkgKz0gbWF4Q2h1bmtMZW5ndGgpIHtcbiAgICBwYXJ0cy5wdXNoKGVuY29kZUNodW5rKHVpbnQ4LCBpLCAoaSArIG1heENodW5rTGVuZ3RoKSA+IGxlbjIgPyBsZW4yIDogKGkgKyBtYXhDaHVua0xlbmd0aCkpKVxuICB9XG5cbiAgLy8gcGFkIHRoZSBlbmQgd2l0aCB6ZXJvcywgYnV0IG1ha2Ugc3VyZSB0byBub3QgZm9yZ2V0IHRoZSBleHRyYSBieXRlc1xuICBpZiAoZXh0cmFCeXRlcyA9PT0gMSkge1xuICAgIHRtcCA9IHVpbnQ4W2xlbiAtIDFdXG4gICAgcGFydHMucHVzaChcbiAgICAgIGxvb2t1cFt0bXAgPj4gMl0gK1xuICAgICAgbG9va3VwWyh0bXAgPDwgNCkgJiAweDNGXSArXG4gICAgICAnPT0nXG4gICAgKVxuICB9IGVsc2UgaWYgKGV4dHJhQnl0ZXMgPT09IDIpIHtcbiAgICB0bXAgPSAodWludDhbbGVuIC0gMl0gPDwgOCkgKyB1aW50OFtsZW4gLSAxXVxuICAgIHBhcnRzLnB1c2goXG4gICAgICBsb29rdXBbdG1wID4+IDEwXSArXG4gICAgICBsb29rdXBbKHRtcCA+PiA0KSAmIDB4M0ZdICtcbiAgICAgIGxvb2t1cFsodG1wIDw8IDIpICYgMHgzRl0gK1xuICAgICAgJz0nXG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIHBhcnRzLmpvaW4oJycpXG59XG4iLCAiLyohIGllZWU3NTQuIEJTRC0zLUNsYXVzZSBMaWNlbnNlLiBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmcvb3BlbnNvdXJjZT4gKi9cbmV4cG9ydHMucmVhZCA9IGZ1bmN0aW9uIChidWZmZXIsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtXG4gIHZhciBlTGVuID0gKG5CeXRlcyAqIDgpIC0gbUxlbiAtIDFcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDFcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxXG4gIHZhciBuQml0cyA9IC03XG4gIHZhciBpID0gaXNMRSA/IChuQnl0ZXMgLSAxKSA6IDBcbiAgdmFyIGQgPSBpc0xFID8gLTEgOiAxXG4gIHZhciBzID0gYnVmZmVyW29mZnNldCArIGldXG5cbiAgaSArPSBkXG5cbiAgZSA9IHMgJiAoKDEgPDwgKC1uQml0cykpIC0gMSlcbiAgcyA+Pj0gKC1uQml0cylcbiAgbkJpdHMgKz0gZUxlblxuICBmb3IgKDsgbkJpdHMgPiAwOyBlID0gKGUgKiAyNTYpICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHt9XG5cbiAgbSA9IGUgJiAoKDEgPDwgKC1uQml0cykpIC0gMSlcbiAgZSA+Pj0gKC1uQml0cylcbiAgbkJpdHMgKz0gbUxlblxuICBmb3IgKDsgbkJpdHMgPiAwOyBtID0gKG0gKiAyNTYpICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHt9XG5cbiAgaWYgKGUgPT09IDApIHtcbiAgICBlID0gMSAtIGVCaWFzXG4gIH0gZWxzZSBpZiAoZSA9PT0gZU1heCkge1xuICAgIHJldHVybiBtID8gTmFOIDogKChzID8gLTEgOiAxKSAqIEluZmluaXR5KVxuICB9IGVsc2Uge1xuICAgIG0gPSBtICsgTWF0aC5wb3coMiwgbUxlbilcbiAgICBlID0gZSAtIGVCaWFzXG4gIH1cbiAgcmV0dXJuIChzID8gLTEgOiAxKSAqIG0gKiBNYXRoLnBvdygyLCBlIC0gbUxlbilcbn1cblxuZXhwb3J0cy53cml0ZSA9IGZ1bmN0aW9uIChidWZmZXIsIHZhbHVlLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbSwgY1xuICB2YXIgZUxlbiA9IChuQnl0ZXMgKiA4KSAtIG1MZW4gLSAxXG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxXG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMVxuICB2YXIgcnQgPSAobUxlbiA9PT0gMjMgPyBNYXRoLnBvdygyLCAtMjQpIC0gTWF0aC5wb3coMiwgLTc3KSA6IDApXG4gIHZhciBpID0gaXNMRSA/IDAgOiAobkJ5dGVzIC0gMSlcbiAgdmFyIGQgPSBpc0xFID8gMSA6IC0xXG4gIHZhciBzID0gdmFsdWUgPCAwIHx8ICh2YWx1ZSA9PT0gMCAmJiAxIC8gdmFsdWUgPCAwKSA/IDEgOiAwXG5cbiAgdmFsdWUgPSBNYXRoLmFicyh2YWx1ZSlcblxuICBpZiAoaXNOYU4odmFsdWUpIHx8IHZhbHVlID09PSBJbmZpbml0eSkge1xuICAgIG0gPSBpc05hTih2YWx1ZSkgPyAxIDogMFxuICAgIGUgPSBlTWF4XG4gIH0gZWxzZSB7XG4gICAgZSA9IE1hdGguZmxvb3IoTWF0aC5sb2codmFsdWUpIC8gTWF0aC5MTjIpXG4gICAgaWYgKHZhbHVlICogKGMgPSBNYXRoLnBvdygyLCAtZSkpIDwgMSkge1xuICAgICAgZS0tXG4gICAgICBjICo9IDJcbiAgICB9XG4gICAgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICB2YWx1ZSArPSBydCAvIGNcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgKz0gcnQgKiBNYXRoLnBvdygyLCAxIC0gZUJpYXMpXG4gICAgfVxuICAgIGlmICh2YWx1ZSAqIGMgPj0gMikge1xuICAgICAgZSsrXG4gICAgICBjIC89IDJcbiAgICB9XG5cbiAgICBpZiAoZSArIGVCaWFzID49IGVNYXgpIHtcbiAgICAgIG0gPSAwXG4gICAgICBlID0gZU1heFxuICAgIH0gZWxzZSBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIG0gPSAoKHZhbHVlICogYykgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gZSArIGVCaWFzXG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSB2YWx1ZSAqIE1hdGgucG93KDIsIGVCaWFzIC0gMSkgKiBNYXRoLnBvdygyLCBtTGVuKVxuICAgICAgZSA9IDBcbiAgICB9XG4gIH1cblxuICBmb3IgKDsgbUxlbiA+PSA4OyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBtICYgMHhmZiwgaSArPSBkLCBtIC89IDI1NiwgbUxlbiAtPSA4KSB7fVxuXG4gIGUgPSAoZSA8PCBtTGVuKSB8IG1cbiAgZUxlbiArPSBtTGVuXG4gIGZvciAoOyBlTGVuID4gMDsgYnVmZmVyW29mZnNldCArIGldID0gZSAmIDB4ZmYsIGkgKz0gZCwgZSAvPSAyNTYsIGVMZW4gLT0gOCkge31cblxuICBidWZmZXJbb2Zmc2V0ICsgaSAtIGRdIHw9IHMgKiAxMjhcbn1cbiIsICIvKiFcbiAqIFRoZSBidWZmZXIgbW9kdWxlIGZyb20gbm9kZS5qcywgZm9yIHRoZSBicm93c2VyLlxuICpcbiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmc+XG4gKiBAbGljZW5zZSAgTUlUXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG5cbid1c2Ugc3RyaWN0J1xuXG52YXIgYmFzZTY0ID0gcmVxdWlyZSgnYmFzZTY0LWpzJylcbnZhciBpZWVlNzU0ID0gcmVxdWlyZSgnaWVlZTc1NCcpXG52YXIgY3VzdG9tSW5zcGVjdFN5bWJvbCA9XG4gICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2xbJ2ZvciddID09PSAnZnVuY3Rpb24nKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGRvdC1ub3RhdGlvblxuICAgID8gU3ltYm9sWydmb3InXSgnbm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20nKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGRvdC1ub3RhdGlvblxuICAgIDogbnVsbFxuXG5leHBvcnRzLkJ1ZmZlciA9IEJ1ZmZlclxuZXhwb3J0cy5TbG93QnVmZmVyID0gU2xvd0J1ZmZlclxuZXhwb3J0cy5JTlNQRUNUX01BWF9CWVRFUyA9IDUwXG5cbnZhciBLX01BWF9MRU5HVEggPSAweDdmZmZmZmZmXG5leHBvcnRzLmtNYXhMZW5ndGggPSBLX01BWF9MRU5HVEhcblxuLyoqXG4gKiBJZiBgQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlRgOlxuICogICA9PT0gdHJ1ZSAgICBVc2UgVWludDhBcnJheSBpbXBsZW1lbnRhdGlvbiAoZmFzdGVzdClcbiAqICAgPT09IGZhbHNlICAgUHJpbnQgd2FybmluZyBhbmQgcmVjb21tZW5kIHVzaW5nIGBidWZmZXJgIHY0Lnggd2hpY2ggaGFzIGFuIE9iamVjdFxuICogICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbiAobW9zdCBjb21wYXRpYmxlLCBldmVuIElFNilcbiAqXG4gKiBCcm93c2VycyB0aGF0IHN1cHBvcnQgdHlwZWQgYXJyYXlzIGFyZSBJRSAxMCssIEZpcmVmb3ggNCssIENocm9tZSA3KywgU2FmYXJpIDUuMSssXG4gKiBPcGVyYSAxMS42KywgaU9TIDQuMisuXG4gKlxuICogV2UgcmVwb3J0IHRoYXQgdGhlIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0eXBlZCBhcnJheXMgaWYgdGhlIGFyZSBub3Qgc3ViY2xhc3NhYmxlXG4gKiB1c2luZyBfX3Byb3RvX18uIEZpcmVmb3ggNC0yOSBsYWNrcyBzdXBwb3J0IGZvciBhZGRpbmcgbmV3IHByb3BlcnRpZXMgdG8gYFVpbnQ4QXJyYXlgXG4gKiAoU2VlOiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02OTU0MzgpLiBJRSAxMCBsYWNrcyBzdXBwb3J0XG4gKiBmb3IgX19wcm90b19fIGFuZCBoYXMgYSBidWdneSB0eXBlZCBhcnJheSBpbXBsZW1lbnRhdGlvbi5cbiAqL1xuQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgPSB0eXBlZEFycmF5U3VwcG9ydCgpXG5cbmlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgdHlwZW9mIGNvbnNvbGUuZXJyb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgY29uc29sZS5lcnJvcihcbiAgICAnVGhpcyBicm93c2VyIGxhY2tzIHR5cGVkIGFycmF5IChVaW50OEFycmF5KSBzdXBwb3J0IHdoaWNoIGlzIHJlcXVpcmVkIGJ5ICcgK1xuICAgICdgYnVmZmVyYCB2NS54LiBVc2UgYGJ1ZmZlcmAgdjQueCBpZiB5b3UgcmVxdWlyZSBvbGQgYnJvd3NlciBzdXBwb3J0LidcbiAgKVxufVxuXG5mdW5jdGlvbiB0eXBlZEFycmF5U3VwcG9ydCAoKSB7XG4gIC8vIENhbiB0eXBlZCBhcnJheSBpbnN0YW5jZXMgY2FuIGJlIGF1Z21lbnRlZD9cbiAgdHJ5IHtcbiAgICB2YXIgYXJyID0gbmV3IFVpbnQ4QXJyYXkoMSlcbiAgICB2YXIgcHJvdG8gPSB7IGZvbzogZnVuY3Rpb24gKCkgeyByZXR1cm4gNDIgfSB9XG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHByb3RvLCBVaW50OEFycmF5LnByb3RvdHlwZSlcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoYXJyLCBwcm90bylcbiAgICByZXR1cm4gYXJyLmZvbygpID09PSA0MlxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEJ1ZmZlci5wcm90b3R5cGUsICdwYXJlbnQnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKHRoaXMpKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgcmV0dXJuIHRoaXMuYnVmZmVyXG4gIH1cbn0pXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdWZmZXIucHJvdG90eXBlLCAnb2Zmc2V0Jywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0aGlzKSkgcmV0dXJuIHVuZGVmaW5lZFxuICAgIHJldHVybiB0aGlzLmJ5dGVPZmZzZXRcbiAgfVxufSlcblxuZnVuY3Rpb24gY3JlYXRlQnVmZmVyIChsZW5ndGgpIHtcbiAgaWYgKGxlbmd0aCA+IEtfTUFYX0xFTkdUSCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgXCInICsgbGVuZ3RoICsgJ1wiIGlzIGludmFsaWQgZm9yIG9wdGlvbiBcInNpemVcIicpXG4gIH1cbiAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2VcbiAgdmFyIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGxlbmd0aClcbiAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGJ1ZiwgQnVmZmVyLnByb3RvdHlwZSlcbiAgcmV0dXJuIGJ1ZlxufVxuXG4vKipcbiAqIFRoZSBCdWZmZXIgY29uc3RydWN0b3IgcmV0dXJucyBpbnN0YW5jZXMgb2YgYFVpbnQ4QXJyYXlgIHRoYXQgaGF2ZSB0aGVpclxuICogcHJvdG90eXBlIGNoYW5nZWQgdG8gYEJ1ZmZlci5wcm90b3R5cGVgLiBGdXJ0aGVybW9yZSwgYEJ1ZmZlcmAgaXMgYSBzdWJjbGFzcyBvZlxuICogYFVpbnQ4QXJyYXlgLCBzbyB0aGUgcmV0dXJuZWQgaW5zdGFuY2VzIHdpbGwgaGF2ZSBhbGwgdGhlIG5vZGUgYEJ1ZmZlcmAgbWV0aG9kc1xuICogYW5kIHRoZSBgVWludDhBcnJheWAgbWV0aG9kcy4gU3F1YXJlIGJyYWNrZXQgbm90YXRpb24gd29ya3MgYXMgZXhwZWN0ZWQgLS0gaXRcbiAqIHJldHVybnMgYSBzaW5nbGUgb2N0ZXQuXG4gKlxuICogVGhlIGBVaW50OEFycmF5YCBwcm90b3R5cGUgcmVtYWlucyB1bm1vZGlmaWVkLlxuICovXG5cbmZ1bmN0aW9uIEJ1ZmZlciAoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgLy8gQ29tbW9uIGNhc2UuXG4gIGlmICh0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuICAgIGlmICh0eXBlb2YgZW5jb2RpbmdPck9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICdUaGUgXCJzdHJpbmdcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLiBSZWNlaXZlZCB0eXBlIG51bWJlcidcbiAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIGFsbG9jVW5zYWZlKGFyZylcbiAgfVxuICByZXR1cm4gZnJvbShhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuQnVmZmVyLnBvb2xTaXplID0gODE5MiAvLyBub3QgdXNlZCBieSB0aGlzIGltcGxlbWVudGF0aW9uXG5cbmZ1bmN0aW9uIGZyb20gKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZnJvbVN0cmluZyh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldClcbiAgfVxuXG4gIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZyb21BcnJheVZpZXcodmFsdWUpXG4gIH1cblxuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAnVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgJyArXG4gICAgICAnb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgJyArICh0eXBlb2YgdmFsdWUpXG4gICAgKVxuICB9XG5cbiAgaWYgKGlzSW5zdGFuY2UodmFsdWUsIEFycmF5QnVmZmVyKSB8fFxuICAgICAgKHZhbHVlICYmIGlzSW5zdGFuY2UodmFsdWUuYnVmZmVyLCBBcnJheUJ1ZmZlcikpKSB7XG4gICAgcmV0dXJuIGZyb21BcnJheUJ1ZmZlcih2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgIChpc0luc3RhbmNlKHZhbHVlLCBTaGFyZWRBcnJheUJ1ZmZlcikgfHxcbiAgICAgICh2YWx1ZSAmJiBpc0luc3RhbmNlKHZhbHVlLmJ1ZmZlciwgU2hhcmVkQXJyYXlCdWZmZXIpKSkpIHtcbiAgICByZXR1cm4gZnJvbUFycmF5QnVmZmVyKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAnVGhlIFwidmFsdWVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSBudW1iZXInXG4gICAgKVxuICB9XG5cbiAgdmFyIHZhbHVlT2YgPSB2YWx1ZS52YWx1ZU9mICYmIHZhbHVlLnZhbHVlT2YoKVxuICBpZiAodmFsdWVPZiAhPSBudWxsICYmIHZhbHVlT2YgIT09IHZhbHVlKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHZhbHVlT2YsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIHZhciBiID0gZnJvbU9iamVjdCh2YWx1ZSlcbiAgaWYgKGIpIHJldHVybiBiXG5cbiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1ByaW1pdGl2ZSAhPSBudWxsICYmXG4gICAgICB0eXBlb2YgdmFsdWVbU3ltYm9sLnRvUHJpbWl0aXZlXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShcbiAgICAgIHZhbHVlW1N5bWJvbC50b1ByaW1pdGl2ZV0oJ3N0cmluZycpLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGhcbiAgICApXG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICdUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCAnICtcbiAgICAnb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgJyArICh0eXBlb2YgdmFsdWUpXG4gIClcbn1cblxuLyoqXG4gKiBGdW5jdGlvbmFsbHkgZXF1aXZhbGVudCB0byBCdWZmZXIoYXJnLCBlbmNvZGluZykgYnV0IHRocm93cyBhIFR5cGVFcnJvclxuICogaWYgdmFsdWUgaXMgYSBudW1iZXIuXG4gKiBCdWZmZXIuZnJvbShzdHJbLCBlbmNvZGluZ10pXG4gKiBCdWZmZXIuZnJvbShhcnJheSlcbiAqIEJ1ZmZlci5mcm9tKGJ1ZmZlcilcbiAqIEJ1ZmZlci5mcm9tKGFycmF5QnVmZmVyWywgYnl0ZU9mZnNldFssIGxlbmd0aF1dKVxuICoqL1xuQnVmZmVyLmZyb20gPSBmdW5jdGlvbiAodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gZnJvbSh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG4vLyBOb3RlOiBDaGFuZ2UgcHJvdG90eXBlICphZnRlciogQnVmZmVyLmZyb20gaXMgZGVmaW5lZCB0byB3b3JrYXJvdW5kIENocm9tZSBidWc6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9wdWxsLzE0OFxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEJ1ZmZlci5wcm90b3R5cGUsIFVpbnQ4QXJyYXkucHJvdG90eXBlKVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEJ1ZmZlciwgVWludDhBcnJheSlcblxuZnVuY3Rpb24gYXNzZXJ0U2l6ZSAoc2l6ZSkge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJzaXplXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlcicpXG4gIH0gZWxzZSBpZiAoc2l6ZSA8IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIFwiJyArIHNpemUgKyAnXCIgaXMgaW52YWxpZCBmb3Igb3B0aW9uIFwic2l6ZVwiJylcbiAgfVxufVxuXG5mdW5jdGlvbiBhbGxvYyAoc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgYXNzZXJ0U2l6ZShzaXplKVxuICBpZiAoc2l6ZSA8PSAwKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplKVxuICB9XG4gIGlmIChmaWxsICE9PSB1bmRlZmluZWQpIHtcbiAgICAvLyBPbmx5IHBheSBhdHRlbnRpb24gdG8gZW5jb2RpbmcgaWYgaXQncyBhIHN0cmluZy4gVGhpc1xuICAgIC8vIHByZXZlbnRzIGFjY2lkZW50YWxseSBzZW5kaW5nIGluIGEgbnVtYmVyIHRoYXQgd291bGRcbiAgICAvLyBiZSBpbnRlcnByZXRlZCBhcyBhIHN0YXJ0IG9mZnNldC5cbiAgICByZXR1cm4gdHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJ1xuICAgICAgPyBjcmVhdGVCdWZmZXIoc2l6ZSkuZmlsbChmaWxsLCBlbmNvZGluZylcbiAgICAgIDogY3JlYXRlQnVmZmVyKHNpemUpLmZpbGwoZmlsbClcbiAgfVxuICByZXR1cm4gY3JlYXRlQnVmZmVyKHNpemUpXG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBmaWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICogYWxsb2Moc2l6ZVssIGZpbGxbLCBlbmNvZGluZ11dKVxuICoqL1xuQnVmZmVyLmFsbG9jID0gZnVuY3Rpb24gKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIHJldHVybiBhbGxvYyhzaXplLCBmaWxsLCBlbmNvZGluZylcbn1cblxuZnVuY3Rpb24gYWxsb2NVbnNhZmUgKHNpemUpIHtcbiAgYXNzZXJ0U2l6ZShzaXplKVxuICByZXR1cm4gY3JlYXRlQnVmZmVyKHNpemUgPCAwID8gMCA6IGNoZWNrZWQoc2l6ZSkgfCAwKVxufVxuXG4vKipcbiAqIEVxdWl2YWxlbnQgdG8gQnVmZmVyKG51bSksIGJ5IGRlZmF1bHQgY3JlYXRlcyBhIG5vbi16ZXJvLWZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKiAqL1xuQnVmZmVyLmFsbG9jVW5zYWZlID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgcmV0dXJuIGFsbG9jVW5zYWZlKHNpemUpXG59XG4vKipcbiAqIEVxdWl2YWxlbnQgdG8gU2xvd0J1ZmZlcihudW0pLCBieSBkZWZhdWx0IGNyZWF0ZXMgYSBub24temVyby1maWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICovXG5CdWZmZXIuYWxsb2NVbnNhZmVTbG93ID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgcmV0dXJuIGFsbG9jVW5zYWZlKHNpemUpXG59XG5cbmZ1bmN0aW9uIGZyb21TdHJpbmcgKHN0cmluZywgZW5jb2RpbmcpIHtcbiAgaWYgKHR5cGVvZiBlbmNvZGluZyAhPT0gJ3N0cmluZycgfHwgZW5jb2RpbmcgPT09ICcnKSB7XG4gICAgZW5jb2RpbmcgPSAndXRmOCdcbiAgfVxuXG4gIGlmICghQnVmZmVyLmlzRW5jb2RpbmcoZW5jb2RpbmcpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICB9XG5cbiAgdmFyIGxlbmd0aCA9IGJ5dGVMZW5ndGgoc3RyaW5nLCBlbmNvZGluZykgfCAwXG4gIHZhciBidWYgPSBjcmVhdGVCdWZmZXIobGVuZ3RoKVxuXG4gIHZhciBhY3R1YWwgPSBidWYud3JpdGUoc3RyaW5nLCBlbmNvZGluZylcblxuICBpZiAoYWN0dWFsICE9PSBsZW5ndGgpIHtcbiAgICAvLyBXcml0aW5nIGEgaGV4IHN0cmluZywgZm9yIGV4YW1wbGUsIHRoYXQgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzIHdpbGxcbiAgICAvLyBjYXVzZSBldmVyeXRoaW5nIGFmdGVyIHRoZSBmaXJzdCBpbnZhbGlkIGNoYXJhY3RlciB0byBiZSBpZ25vcmVkLiAoZS5nLlxuICAgIC8vICdhYnh4Y2QnIHdpbGwgYmUgdHJlYXRlZCBhcyAnYWInKVxuICAgIGJ1ZiA9IGJ1Zi5zbGljZSgwLCBhY3R1YWwpXG4gIH1cblxuICByZXR1cm4gYnVmXG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUxpa2UgKGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGggPCAwID8gMCA6IGNoZWNrZWQoYXJyYXkubGVuZ3RoKSB8IDBcbiAgdmFyIGJ1ZiA9IGNyZWF0ZUJ1ZmZlcihsZW5ndGgpXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICBidWZbaV0gPSBhcnJheVtpXSAmIDI1NVxuICB9XG4gIHJldHVybiBidWZcbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5VmlldyAoYXJyYXlWaWV3KSB7XG4gIGlmIChpc0luc3RhbmNlKGFycmF5VmlldywgVWludDhBcnJheSkpIHtcbiAgICB2YXIgY29weSA9IG5ldyBVaW50OEFycmF5KGFycmF5VmlldylcbiAgICByZXR1cm4gZnJvbUFycmF5QnVmZmVyKGNvcHkuYnVmZmVyLCBjb3B5LmJ5dGVPZmZzZXQsIGNvcHkuYnl0ZUxlbmd0aClcbiAgfVxuICByZXR1cm4gZnJvbUFycmF5TGlrZShhcnJheVZpZXcpXG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUJ1ZmZlciAoYXJyYXksIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAoYnl0ZU9mZnNldCA8IDAgfHwgYXJyYXkuYnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJvZmZzZXRcIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKVxuICB9XG5cbiAgaWYgKGFycmF5LmJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0ICsgKGxlbmd0aCB8fCAwKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcImxlbmd0aFwiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpXG4gIH1cblxuICB2YXIgYnVmXG4gIGlmIChieXRlT2Zmc2V0ID09PSB1bmRlZmluZWQgJiYgbGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBidWYgPSBuZXcgVWludDhBcnJheShhcnJheSlcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0KVxuICB9IGVsc2Uge1xuICAgIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZVxuICBPYmplY3Quc2V0UHJvdG90eXBlT2YoYnVmLCBCdWZmZXIucHJvdG90eXBlKVxuXG4gIHJldHVybiBidWZcbn1cblxuZnVuY3Rpb24gZnJvbU9iamVjdCAob2JqKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIob2JqKSkge1xuICAgIHZhciBsZW4gPSBjaGVja2VkKG9iai5sZW5ndGgpIHwgMFxuICAgIHZhciBidWYgPSBjcmVhdGVCdWZmZXIobGVuKVxuXG4gICAgaWYgKGJ1Zi5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBidWZcbiAgICB9XG5cbiAgICBvYmouY29weShidWYsIDAsIDAsIGxlbilcbiAgICByZXR1cm4gYnVmXG4gIH1cblxuICBpZiAob2JqLmxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHR5cGVvZiBvYmoubGVuZ3RoICE9PSAnbnVtYmVyJyB8fCBudW1iZXJJc05hTihvYmoubGVuZ3RoKSkge1xuICAgICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcigwKVxuICAgIH1cbiAgICByZXR1cm4gZnJvbUFycmF5TGlrZShvYmopXG4gIH1cblxuICBpZiAob2JqLnR5cGUgPT09ICdCdWZmZXInICYmIEFycmF5LmlzQXJyYXkob2JqLmRhdGEpKSB7XG4gICAgcmV0dXJuIGZyb21BcnJheUxpa2Uob2JqLmRhdGEpXG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tlZCAobGVuZ3RoKSB7XG4gIC8vIE5vdGU6IGNhbm5vdCB1c2UgYGxlbmd0aCA8IEtfTUFYX0xFTkdUSGAgaGVyZSBiZWNhdXNlIHRoYXQgZmFpbHMgd2hlblxuICAvLyBsZW5ndGggaXMgTmFOICh3aGljaCBpcyBvdGhlcndpc2UgY29lcmNlZCB0byB6ZXJvLilcbiAgaWYgKGxlbmd0aCA+PSBLX01BWF9MRU5HVEgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAnc2l6ZTogMHgnICsgS19NQVhfTEVOR1RILnRvU3RyaW5nKDE2KSArICcgYnl0ZXMnKVxuICB9XG4gIHJldHVybiBsZW5ndGggfCAwXG59XG5cbmZ1bmN0aW9uIFNsb3dCdWZmZXIgKGxlbmd0aCkge1xuICBpZiAoK2xlbmd0aCAhPSBsZW5ndGgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBlcWVxZXFcbiAgICBsZW5ndGggPSAwXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5hbGxvYygrbGVuZ3RoKVxufVxuXG5CdWZmZXIuaXNCdWZmZXIgPSBmdW5jdGlvbiBpc0J1ZmZlciAoYikge1xuICByZXR1cm4gYiAhPSBudWxsICYmIGIuX2lzQnVmZmVyID09PSB0cnVlICYmXG4gICAgYiAhPT0gQnVmZmVyLnByb3RvdHlwZSAvLyBzbyBCdWZmZXIuaXNCdWZmZXIoQnVmZmVyLnByb3RvdHlwZSkgd2lsbCBiZSBmYWxzZVxufVxuXG5CdWZmZXIuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUgKGEsIGIpIHtcbiAgaWYgKGlzSW5zdGFuY2UoYSwgVWludDhBcnJheSkpIGEgPSBCdWZmZXIuZnJvbShhLCBhLm9mZnNldCwgYS5ieXRlTGVuZ3RoKVxuICBpZiAoaXNJbnN0YW5jZShiLCBVaW50OEFycmF5KSkgYiA9IEJ1ZmZlci5mcm9tKGIsIGIub2Zmc2V0LCBiLmJ5dGVMZW5ndGgpXG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGEpIHx8ICFCdWZmZXIuaXNCdWZmZXIoYikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgJ1RoZSBcImJ1ZjFcIiwgXCJidWYyXCIgYXJndW1lbnRzIG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXknXG4gICAgKVxuICB9XG5cbiAgaWYgKGEgPT09IGIpIHJldHVybiAwXG5cbiAgdmFyIHggPSBhLmxlbmd0aFxuICB2YXIgeSA9IGIubGVuZ3RoXG5cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IE1hdGgubWluKHgsIHkpOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAoYVtpXSAhPT0gYltpXSkge1xuICAgICAgeCA9IGFbaV1cbiAgICAgIHkgPSBiW2ldXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xXG4gIGlmICh5IDwgeCkgcmV0dXJuIDFcbiAgcmV0dXJuIDBcbn1cblxuQnVmZmVyLmlzRW5jb2RpbmcgPSBmdW5jdGlvbiBpc0VuY29kaW5nIChlbmNvZGluZykge1xuICBzd2l0Y2ggKFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ2hleCc6XG4gICAgY2FzZSAndXRmOCc6XG4gICAgY2FzZSAndXRmLTgnOlxuICAgIGNhc2UgJ2FzY2lpJzpcbiAgICBjYXNlICdsYXRpbjEnOlxuICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgY2FzZSAnYmFzZTY0JzpcbiAgICBjYXNlICd1Y3MyJzpcbiAgICBjYXNlICd1Y3MtMic6XG4gICAgY2FzZSAndXRmMTZsZSc6XG4gICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgcmV0dXJuIHRydWVcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuQnVmZmVyLmNvbmNhdCA9IGZ1bmN0aW9uIGNvbmNhdCAobGlzdCwgbGVuZ3RoKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShsaXN0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gIH1cblxuICBpZiAobGlzdC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gQnVmZmVyLmFsbG9jKDApXG4gIH1cblxuICB2YXIgaVxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBsZW5ndGggPSAwXG4gICAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICAgIGxlbmd0aCArPSBsaXN0W2ldLmxlbmd0aFxuICAgIH1cbiAgfVxuXG4gIHZhciBidWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUobGVuZ3RoKVxuICB2YXIgcG9zID0gMFxuICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkge1xuICAgIHZhciBidWYgPSBsaXN0W2ldXG4gICAgaWYgKGlzSW5zdGFuY2UoYnVmLCBVaW50OEFycmF5KSkge1xuICAgICAgaWYgKHBvcyArIGJ1Zi5sZW5ndGggPiBidWZmZXIubGVuZ3RoKSB7XG4gICAgICAgIEJ1ZmZlci5mcm9tKGJ1ZikuY29weShidWZmZXIsIHBvcylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKFxuICAgICAgICAgIGJ1ZmZlcixcbiAgICAgICAgICBidWYsXG4gICAgICAgICAgcG9zXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYnVmKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJylcbiAgICB9IGVsc2Uge1xuICAgICAgYnVmLmNvcHkoYnVmZmVyLCBwb3MpXG4gICAgfVxuICAgIHBvcyArPSBidWYubGVuZ3RoXG4gIH1cbiAgcmV0dXJuIGJ1ZmZlclxufVxuXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoc3RyaW5nKSkge1xuICAgIHJldHVybiBzdHJpbmcubGVuZ3RoXG4gIH1cbiAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhzdHJpbmcpIHx8IGlzSW5zdGFuY2Uoc3RyaW5nLCBBcnJheUJ1ZmZlcikpIHtcbiAgICByZXR1cm4gc3RyaW5nLmJ5dGVMZW5ndGhcbiAgfVxuICBpZiAodHlwZW9mIHN0cmluZyAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgJ1RoZSBcInN0cmluZ1wiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIG9yIEFycmF5QnVmZmVyLiAnICtcbiAgICAgICdSZWNlaXZlZCB0eXBlICcgKyB0eXBlb2Ygc3RyaW5nXG4gICAgKVxuICB9XG5cbiAgdmFyIGxlbiA9IHN0cmluZy5sZW5ndGhcbiAgdmFyIG11c3RNYXRjaCA9IChhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gPT09IHRydWUpXG4gIGlmICghbXVzdE1hdGNoICYmIGxlbiA9PT0gMCkgcmV0dXJuIDBcblxuICAvLyBVc2UgYSBmb3IgbG9vcCB0byBhdm9pZCByZWN1cnNpb25cbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcbiAgZm9yICg7Oykge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGVuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhUb0J5dGVzKHN0cmluZykubGVuZ3RoXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gbGVuICogMlxuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGxlbiA+Pj4gMVxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGJhc2U2NFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGhcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkge1xuICAgICAgICAgIHJldHVybiBtdXN0TWF0Y2ggPyAtMSA6IHV0ZjhUb0J5dGVzKHN0cmluZykubGVuZ3RoIC8vIGFzc3VtZSB1dGY4XG4gICAgICAgIH1cbiAgICAgICAgZW5jb2RpbmcgPSAoJycgKyBlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cbkJ1ZmZlci5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aFxuXG5mdW5jdGlvbiBzbG93VG9TdHJpbmcgKGVuY29kaW5nLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG5cbiAgLy8gTm8gbmVlZCB0byB2ZXJpZnkgdGhhdCBcInRoaXMubGVuZ3RoIDw9IE1BWF9VSU5UMzJcIiBzaW5jZSBpdCdzIGEgcmVhZC1vbmx5XG4gIC8vIHByb3BlcnR5IG9mIGEgdHlwZWQgYXJyYXkuXG5cbiAgLy8gVGhpcyBiZWhhdmVzIG5laXRoZXIgbGlrZSBTdHJpbmcgbm9yIFVpbnQ4QXJyYXkgaW4gdGhhdCB3ZSBzZXQgc3RhcnQvZW5kXG4gIC8vIHRvIHRoZWlyIHVwcGVyL2xvd2VyIGJvdW5kcyBpZiB0aGUgdmFsdWUgcGFzc2VkIGlzIG91dCBvZiByYW5nZS5cbiAgLy8gdW5kZWZpbmVkIGlzIGhhbmRsZWQgc3BlY2lhbGx5IGFzIHBlciBFQ01BLTI2MiA2dGggRWRpdGlvbixcbiAgLy8gU2VjdGlvbiAxMy4zLjMuNyBSdW50aW1lIFNlbWFudGljczogS2V5ZWRCaW5kaW5nSW5pdGlhbGl6YXRpb24uXG4gIGlmIChzdGFydCA9PT0gdW5kZWZpbmVkIHx8IHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ID0gMFxuICB9XG4gIC8vIFJldHVybiBlYXJseSBpZiBzdGFydCA+IHRoaXMubGVuZ3RoLiBEb25lIGhlcmUgdG8gcHJldmVudCBwb3RlbnRpYWwgdWludDMyXG4gIC8vIGNvZXJjaW9uIGZhaWwgYmVsb3cuXG4gIGlmIChzdGFydCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBpZiAoZW5kID09PSB1bmRlZmluZWQgfHwgZW5kID4gdGhpcy5sZW5ndGgpIHtcbiAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICB9XG5cbiAgaWYgKGVuZCA8PSAwKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICAvLyBGb3JjZSBjb2VyY2lvbiB0byB1aW50MzIuIFRoaXMgd2lsbCBhbHNvIGNvZXJjZSBmYWxzZXkvTmFOIHZhbHVlcyB0byAwLlxuICBlbmQgPj4+PSAwXG4gIHN0YXJ0ID4+Pj0gMFxuXG4gIGlmIChlbmQgPD0gc3RhcnQpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gJ3V0ZjgnXG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gaGV4U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgICByZXR1cm4gYXNjaWlTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxhdGluMVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBiYXNlNjRTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gdXRmMTZsZVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgICAgICBlbmNvZGluZyA9IChlbmNvZGluZyArICcnKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG4vLyBUaGlzIHByb3BlcnR5IGlzIHVzZWQgYnkgYEJ1ZmZlci5pc0J1ZmZlcmAgKGFuZCB0aGUgYGlzLWJ1ZmZlcmAgbnBtIHBhY2thZ2UpXG4vLyB0byBkZXRlY3QgYSBCdWZmZXIgaW5zdGFuY2UuIEl0J3Mgbm90IHBvc3NpYmxlIHRvIHVzZSBgaW5zdGFuY2VvZiBCdWZmZXJgXG4vLyByZWxpYWJseSBpbiBhIGJyb3dzZXJpZnkgY29udGV4dCBiZWNhdXNlIHRoZXJlIGNvdWxkIGJlIG11bHRpcGxlIGRpZmZlcmVudFxuLy8gY29waWVzIG9mIHRoZSAnYnVmZmVyJyBwYWNrYWdlIGluIHVzZS4gVGhpcyBtZXRob2Qgd29ya3MgZXZlbiBmb3IgQnVmZmVyXG4vLyBpbnN0YW5jZXMgdGhhdCB3ZXJlIGNyZWF0ZWQgZnJvbSBhbm90aGVyIGNvcHkgb2YgdGhlIGBidWZmZXJgIHBhY2thZ2UuXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL2lzc3Vlcy8xNTRcbkJ1ZmZlci5wcm90b3R5cGUuX2lzQnVmZmVyID0gdHJ1ZVxuXG5mdW5jdGlvbiBzd2FwIChiLCBuLCBtKSB7XG4gIHZhciBpID0gYltuXVxuICBiW25dID0gYlttXVxuICBiW21dID0gaVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXAxNiA9IGZ1bmN0aW9uIHN3YXAxNiAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgMiAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gMikge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDEpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwMzIgPSBmdW5jdGlvbiBzd2FwMzIgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDQgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyAzKVxuICAgIHN3YXAodGhpcywgaSArIDEsIGkgKyAyKVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDY0ID0gZnVuY3Rpb24gc3dhcDY0ICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSA4ICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSA4KSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgNylcbiAgICBzd2FwKHRoaXMsIGkgKyAxLCBpICsgNilcbiAgICBzd2FwKHRoaXMsIGkgKyAyLCBpICsgNSlcbiAgICBzd2FwKHRoaXMsIGkgKyAzLCBpICsgNClcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcgKCkge1xuICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICcnXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIDAsIGxlbmd0aClcbiAgcmV0dXJuIHNsb3dUb1N0cmluZy5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmcgPSBCdWZmZXIucHJvdG90eXBlLnRvU3RyaW5nXG5cbkJ1ZmZlci5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gZXF1YWxzIChiKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyJylcbiAgaWYgKHRoaXMgPT09IGIpIHJldHVybiB0cnVlXG4gIHJldHVybiBCdWZmZXIuY29tcGFyZSh0aGlzLCBiKSA9PT0gMFxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiBpbnNwZWN0ICgpIHtcbiAgdmFyIHN0ciA9ICcnXG4gIHZhciBtYXggPSBleHBvcnRzLklOU1BFQ1RfTUFYX0JZVEVTXG4gIHN0ciA9IHRoaXMudG9TdHJpbmcoJ2hleCcsIDAsIG1heCkucmVwbGFjZSgvKC57Mn0pL2csICckMSAnKS50cmltKClcbiAgaWYgKHRoaXMubGVuZ3RoID4gbWF4KSBzdHIgKz0gJyAuLi4gJ1xuICByZXR1cm4gJzxCdWZmZXIgJyArIHN0ciArICc+J1xufVxuaWYgKGN1c3RvbUluc3BlY3RTeW1ib2wpIHtcbiAgQnVmZmVyLnByb3RvdHlwZVtjdXN0b21JbnNwZWN0U3ltYm9sXSA9IEJ1ZmZlci5wcm90b3R5cGUuaW5zcGVjdFxufVxuXG5CdWZmZXIucHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlICh0YXJnZXQsIHN0YXJ0LCBlbmQsIHRoaXNTdGFydCwgdGhpc0VuZCkge1xuICBpZiAoaXNJbnN0YW5jZSh0YXJnZXQsIFVpbnQ4QXJyYXkpKSB7XG4gICAgdGFyZ2V0ID0gQnVmZmVyLmZyb20odGFyZ2V0LCB0YXJnZXQub2Zmc2V0LCB0YXJnZXQuYnl0ZUxlbmd0aClcbiAgfVxuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0YXJnZXQpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICdUaGUgXCJ0YXJnZXRcIiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5LiAnICtcbiAgICAgICdSZWNlaXZlZCB0eXBlICcgKyAodHlwZW9mIHRhcmdldClcbiAgICApXG4gIH1cblxuICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCkge1xuICAgIHN0YXJ0ID0gMFxuICB9XG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVuZCA9IHRhcmdldCA/IHRhcmdldC5sZW5ndGggOiAwXG4gIH1cbiAgaWYgKHRoaXNTdGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpc1N0YXJ0ID0gMFxuICB9XG4gIGlmICh0aGlzRW5kID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzRW5kID0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChzdGFydCA8IDAgfHwgZW5kID4gdGFyZ2V0Lmxlbmd0aCB8fCB0aGlzU3RhcnQgPCAwIHx8IHRoaXNFbmQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdvdXQgb2YgcmFuZ2UgaW5kZXgnKVxuICB9XG5cbiAgaWYgKHRoaXNTdGFydCA+PSB0aGlzRW5kICYmIHN0YXJ0ID49IGVuZCkge1xuICAgIHJldHVybiAwXG4gIH1cbiAgaWYgKHRoaXNTdGFydCA+PSB0aGlzRW5kKSB7XG4gICAgcmV0dXJuIC0xXG4gIH1cbiAgaWYgKHN0YXJ0ID49IGVuZCkge1xuICAgIHJldHVybiAxXG4gIH1cblxuICBzdGFydCA+Pj49IDBcbiAgZW5kID4+Pj0gMFxuICB0aGlzU3RhcnQgPj4+PSAwXG4gIHRoaXNFbmQgPj4+PSAwXG5cbiAgaWYgKHRoaXMgPT09IHRhcmdldCkgcmV0dXJuIDBcblxuICB2YXIgeCA9IHRoaXNFbmQgLSB0aGlzU3RhcnRcbiAgdmFyIHkgPSBlbmQgLSBzdGFydFxuICB2YXIgbGVuID0gTWF0aC5taW4oeCwgeSlcblxuICB2YXIgdGhpc0NvcHkgPSB0aGlzLnNsaWNlKHRoaXNTdGFydCwgdGhpc0VuZClcbiAgdmFyIHRhcmdldENvcHkgPSB0YXJnZXQuc2xpY2Uoc3RhcnQsIGVuZClcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKHRoaXNDb3B5W2ldICE9PSB0YXJnZXRDb3B5W2ldKSB7XG4gICAgICB4ID0gdGhpc0NvcHlbaV1cbiAgICAgIHkgPSB0YXJnZXRDb3B5W2ldXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xXG4gIGlmICh5IDwgeCkgcmV0dXJuIDFcbiAgcmV0dXJuIDBcbn1cblxuLy8gRmluZHMgZWl0aGVyIHRoZSBmaXJzdCBpbmRleCBvZiBgdmFsYCBpbiBgYnVmZmVyYCBhdCBvZmZzZXQgPj0gYGJ5dGVPZmZzZXRgLFxuLy8gT1IgdGhlIGxhc3QgaW5kZXggb2YgYHZhbGAgaW4gYGJ1ZmZlcmAgYXQgb2Zmc2V0IDw9IGBieXRlT2Zmc2V0YC5cbi8vXG4vLyBBcmd1bWVudHM6XG4vLyAtIGJ1ZmZlciAtIGEgQnVmZmVyIHRvIHNlYXJjaFxuLy8gLSB2YWwgLSBhIHN0cmluZywgQnVmZmVyLCBvciBudW1iZXJcbi8vIC0gYnl0ZU9mZnNldCAtIGFuIGluZGV4IGludG8gYGJ1ZmZlcmA7IHdpbGwgYmUgY2xhbXBlZCB0byBhbiBpbnQzMlxuLy8gLSBlbmNvZGluZyAtIGFuIG9wdGlvbmFsIGVuY29kaW5nLCByZWxldmFudCBpcyB2YWwgaXMgYSBzdHJpbmdcbi8vIC0gZGlyIC0gdHJ1ZSBmb3IgaW5kZXhPZiwgZmFsc2UgZm9yIGxhc3RJbmRleE9mXG5mdW5jdGlvbiBiaWRpcmVjdGlvbmFsSW5kZXhPZiAoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpIHtcbiAgLy8gRW1wdHkgYnVmZmVyIG1lYW5zIG5vIG1hdGNoXG4gIGlmIChidWZmZXIubGVuZ3RoID09PSAwKSByZXR1cm4gLTFcblxuICAvLyBOb3JtYWxpemUgYnl0ZU9mZnNldFxuICBpZiAodHlwZW9mIGJ5dGVPZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgZW5jb2RpbmcgPSBieXRlT2Zmc2V0XG4gICAgYnl0ZU9mZnNldCA9IDBcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0ID4gMHg3ZmZmZmZmZikge1xuICAgIGJ5dGVPZmZzZXQgPSAweDdmZmZmZmZmXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA8IC0weDgwMDAwMDAwKSB7XG4gICAgYnl0ZU9mZnNldCA9IC0weDgwMDAwMDAwXG4gIH1cbiAgYnl0ZU9mZnNldCA9ICtieXRlT2Zmc2V0IC8vIENvZXJjZSB0byBOdW1iZXIuXG4gIGlmIChudW1iZXJJc05hTihieXRlT2Zmc2V0KSkge1xuICAgIC8vIGJ5dGVPZmZzZXQ6IGl0IGl0J3MgdW5kZWZpbmVkLCBudWxsLCBOYU4sIFwiZm9vXCIsIGV0Yywgc2VhcmNoIHdob2xlIGJ1ZmZlclxuICAgIGJ5dGVPZmZzZXQgPSBkaXIgPyAwIDogKGJ1ZmZlci5sZW5ndGggLSAxKVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIGJ5dGVPZmZzZXQ6IG5lZ2F0aXZlIG9mZnNldHMgc3RhcnQgZnJvbSB0aGUgZW5kIG9mIHRoZSBidWZmZXJcbiAgaWYgKGJ5dGVPZmZzZXQgPCAwKSBieXRlT2Zmc2V0ID0gYnVmZmVyLmxlbmd0aCArIGJ5dGVPZmZzZXRcbiAgaWYgKGJ5dGVPZmZzZXQgPj0gYnVmZmVyLmxlbmd0aCkge1xuICAgIGlmIChkaXIpIHJldHVybiAtMVxuICAgIGVsc2UgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggLSAxXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA8IDApIHtcbiAgICBpZiAoZGlyKSBieXRlT2Zmc2V0ID0gMFxuICAgIGVsc2UgcmV0dXJuIC0xXG4gIH1cblxuICAvLyBOb3JtYWxpemUgdmFsXG4gIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgIHZhbCA9IEJ1ZmZlci5mcm9tKHZhbCwgZW5jb2RpbmcpXG4gIH1cblxuICAvLyBGaW5hbGx5LCBzZWFyY2ggZWl0aGVyIGluZGV4T2YgKGlmIGRpciBpcyB0cnVlKSBvciBsYXN0SW5kZXhPZlxuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHZhbCkpIHtcbiAgICAvLyBTcGVjaWFsIGNhc2U6IGxvb2tpbmcgZm9yIGVtcHR5IHN0cmluZy9idWZmZXIgYWx3YXlzIGZhaWxzXG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXlJbmRleE9mKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgdmFsID0gdmFsICYgMHhGRiAvLyBTZWFyY2ggZm9yIGEgYnl0ZSB2YWx1ZSBbMC0yNTVdXG4gICAgaWYgKHR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAoZGlyKSB7XG4gICAgICAgIHJldHVybiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIFt2YWxdLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcigndmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyJylcbn1cblxuZnVuY3Rpb24gYXJyYXlJbmRleE9mIChhcnIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcikge1xuICB2YXIgaW5kZXhTaXplID0gMVxuICB2YXIgYXJyTGVuZ3RoID0gYXJyLmxlbmd0aFxuICB2YXIgdmFsTGVuZ3RoID0gdmFsLmxlbmd0aFxuXG4gIGlmIChlbmNvZGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZW5jb2RpbmcgPSBTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICBpZiAoZW5jb2RpbmcgPT09ICd1Y3MyJyB8fCBlbmNvZGluZyA9PT0gJ3Vjcy0yJyB8fFxuICAgICAgICBlbmNvZGluZyA9PT0gJ3V0ZjE2bGUnIHx8IGVuY29kaW5nID09PSAndXRmLTE2bGUnKSB7XG4gICAgICBpZiAoYXJyLmxlbmd0aCA8IDIgfHwgdmFsLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgcmV0dXJuIC0xXG4gICAgICB9XG4gICAgICBpbmRleFNpemUgPSAyXG4gICAgICBhcnJMZW5ndGggLz0gMlxuICAgICAgdmFsTGVuZ3RoIC89IDJcbiAgICAgIGJ5dGVPZmZzZXQgLz0gMlxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWQgKGJ1ZiwgaSkge1xuICAgIGlmIChpbmRleFNpemUgPT09IDEpIHtcbiAgICAgIHJldHVybiBidWZbaV1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGJ1Zi5yZWFkVUludDE2QkUoaSAqIGluZGV4U2l6ZSlcbiAgICB9XG4gIH1cblxuICB2YXIgaVxuICBpZiAoZGlyKSB7XG4gICAgdmFyIGZvdW5kSW5kZXggPSAtMVxuICAgIGZvciAoaSA9IGJ5dGVPZmZzZXQ7IGkgPCBhcnJMZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHJlYWQoYXJyLCBpKSA9PT0gcmVhZCh2YWwsIGZvdW5kSW5kZXggPT09IC0xID8gMCA6IGkgLSBmb3VuZEluZGV4KSkge1xuICAgICAgICBpZiAoZm91bmRJbmRleCA9PT0gLTEpIGZvdW5kSW5kZXggPSBpXG4gICAgICAgIGlmIChpIC0gZm91bmRJbmRleCArIDEgPT09IHZhbExlbmd0aCkgcmV0dXJuIGZvdW5kSW5kZXggKiBpbmRleFNpemVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ICE9PSAtMSkgaSAtPSBpIC0gZm91bmRJbmRleFxuICAgICAgICBmb3VuZEluZGV4ID0gLTFcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGJ5dGVPZmZzZXQgKyB2YWxMZW5ndGggPiBhcnJMZW5ndGgpIGJ5dGVPZmZzZXQgPSBhcnJMZW5ndGggLSB2YWxMZW5ndGhcbiAgICBmb3IgKGkgPSBieXRlT2Zmc2V0OyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGZvdW5kID0gdHJ1ZVxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2YWxMZW5ndGg7IGorKykge1xuICAgICAgICBpZiAocmVhZChhcnIsIGkgKyBqKSAhPT0gcmVhZCh2YWwsIGopKSB7XG4gICAgICAgICAgZm91bmQgPSBmYWxzZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChmb3VuZCkgcmV0dXJuIGlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gLTFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbmNsdWRlcyA9IGZ1bmN0aW9uIGluY2x1ZGVzICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiB0aGlzLmluZGV4T2YodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykgIT09IC0xXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIGluZGV4T2YgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGJpZGlyZWN0aW9uYWxJbmRleE9mKHRoaXMsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIHRydWUpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUubGFzdEluZGV4T2YgPSBmdW5jdGlvbiBsYXN0SW5kZXhPZiAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZmFsc2UpXG59XG5cbmZ1bmN0aW9uIGhleFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgb2Zmc2V0ID0gTnVtYmVyKG9mZnNldCkgfHwgMFxuICB2YXIgcmVtYWluaW5nID0gYnVmLmxlbmd0aCAtIG9mZnNldFxuICBpZiAoIWxlbmd0aCkge1xuICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICB9IGVsc2Uge1xuICAgIGxlbmd0aCA9IE51bWJlcihsZW5ndGgpXG4gICAgaWYgKGxlbmd0aCA+IHJlbWFpbmluZykge1xuICAgICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gICAgfVxuICB9XG5cbiAgdmFyIHN0ckxlbiA9IHN0cmluZy5sZW5ndGhcblxuICBpZiAobGVuZ3RoID4gc3RyTGVuIC8gMikge1xuICAgIGxlbmd0aCA9IHN0ckxlbiAvIDJcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgdmFyIHBhcnNlZCA9IHBhcnNlSW50KHN0cmluZy5zdWJzdHIoaSAqIDIsIDIpLCAxNilcbiAgICBpZiAobnVtYmVySXNOYU4ocGFyc2VkKSkgcmV0dXJuIGlcbiAgICBidWZbb2Zmc2V0ICsgaV0gPSBwYXJzZWRcbiAgfVxuICByZXR1cm4gaVxufVxuXG5mdW5jdGlvbiB1dGY4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcih1dGY4VG9CeXRlcyhzdHJpbmcsIGJ1Zi5sZW5ndGggLSBvZmZzZXQpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBhc2NpaVdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIoYXNjaWlUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIGJhc2U2NFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIoYmFzZTY0VG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiB1Y3MyV3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcih1dGYxNmxlVG9CeXRlcyhzdHJpbmcsIGJ1Zi5sZW5ndGggLSBvZmZzZXQpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gd3JpdGUgKHN0cmluZywgb2Zmc2V0LCBsZW5ndGgsIGVuY29kaW5nKSB7XG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcpXG4gIGlmIChvZmZzZXQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVuY29kaW5nID0gJ3V0ZjgnXG4gICAgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgICBvZmZzZXQgPSAwXG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcsIGVuY29kaW5nKVxuICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgZW5jb2RpbmcgPSBvZmZzZXRcbiAgICBsZW5ndGggPSB0aGlzLmxlbmd0aFxuICAgIG9mZnNldCA9IDBcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZywgb2Zmc2V0WywgbGVuZ3RoXVssIGVuY29kaW5nXSlcbiAgfSBlbHNlIGlmIChpc0Zpbml0ZShvZmZzZXQpKSB7XG4gICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gICAgaWYgKGlzRmluaXRlKGxlbmd0aCkpIHtcbiAgICAgIGxlbmd0aCA9IGxlbmd0aCA+Pj4gMFxuICAgICAgaWYgKGVuY29kaW5nID09PSB1bmRlZmluZWQpIGVuY29kaW5nID0gJ3V0ZjgnXG4gICAgfSBlbHNlIHtcbiAgICAgIGVuY29kaW5nID0gbGVuZ3RoXG4gICAgICBsZW5ndGggPSB1bmRlZmluZWRcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0J1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkJ1xuICAgIClcbiAgfVxuXG4gIHZhciByZW1haW5pbmcgPSB0aGlzLmxlbmd0aCAtIG9mZnNldFxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQgfHwgbGVuZ3RoID4gcmVtYWluaW5nKSBsZW5ndGggPSByZW1haW5pbmdcblxuICBpZiAoKHN0cmluZy5sZW5ndGggPiAwICYmIChsZW5ndGggPCAwIHx8IG9mZnNldCA8IDApKSB8fCBvZmZzZXQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcycpXG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gaGV4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBhc2NpaVdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIC8vIFdhcm5pbmc6IG1heExlbmd0aCBub3QgdGFrZW4gaW50byBhY2NvdW50IGluIGJhc2U2NFdyaXRlXG4gICAgICAgIHJldHVybiBiYXNlNjRXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gdWNzMldyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgICAgICBlbmNvZGluZyA9ICgnJyArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTiAoKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ0J1ZmZlcicsXG4gICAgZGF0YTogQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyIHx8IHRoaXMsIDApXG4gIH1cbn1cblxuZnVuY3Rpb24gYmFzZTY0U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBpZiAoc3RhcnQgPT09IDAgJiYgZW5kID09PSBidWYubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGJhc2U2NC5mcm9tQnl0ZUFycmF5KGJ1ZilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmLnNsaWNlKHN0YXJ0LCBlbmQpKVxuICB9XG59XG5cbmZ1bmN0aW9uIHV0ZjhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcbiAgdmFyIHJlcyA9IFtdXG5cbiAgdmFyIGkgPSBzdGFydFxuICB3aGlsZSAoaSA8IGVuZCkge1xuICAgIHZhciBmaXJzdEJ5dGUgPSBidWZbaV1cbiAgICB2YXIgY29kZVBvaW50ID0gbnVsbFxuICAgIHZhciBieXRlc1BlclNlcXVlbmNlID0gKGZpcnN0Qnl0ZSA+IDB4RUYpXG4gICAgICA/IDRcbiAgICAgIDogKGZpcnN0Qnl0ZSA+IDB4REYpXG4gICAgICAgICAgPyAzXG4gICAgICAgICAgOiAoZmlyc3RCeXRlID4gMHhCRilcbiAgICAgICAgICAgICAgPyAyXG4gICAgICAgICAgICAgIDogMVxuXG4gICAgaWYgKGkgKyBieXRlc1BlclNlcXVlbmNlIDw9IGVuZCkge1xuICAgICAgdmFyIHNlY29uZEJ5dGUsIHRoaXJkQnl0ZSwgZm91cnRoQnl0ZSwgdGVtcENvZGVQb2ludFxuXG4gICAgICBzd2l0Y2ggKGJ5dGVzUGVyU2VxdWVuY2UpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmIChmaXJzdEJ5dGUgPCAweDgwKSB7XG4gICAgICAgICAgICBjb2RlUG9pbnQgPSBmaXJzdEJ5dGVcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHgxRikgPDwgMHg2IHwgKHNlY29uZEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweDdGKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgdGhpcmRCeXRlID0gYnVmW2kgKyAyXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwICYmICh0aGlyZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweEYpIDw8IDB4QyB8IChzZWNvbmRCeXRlICYgMHgzRikgPDwgMHg2IHwgKHRoaXJkQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4N0ZGICYmICh0ZW1wQ29kZVBvaW50IDwgMHhEODAwIHx8IHRlbXBDb2RlUG9pbnQgPiAweERGRkYpKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgdGhpcmRCeXRlID0gYnVmW2kgKyAyXVxuICAgICAgICAgIGZvdXJ0aEJ5dGUgPSBidWZbaSArIDNdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKHRoaXJkQnl0ZSAmIDB4QzApID09PSAweDgwICYmIChmb3VydGhCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHhGKSA8PCAweDEyIHwgKHNlY29uZEJ5dGUgJiAweDNGKSA8PCAweEMgfCAodGhpcmRCeXRlICYgMHgzRikgPDwgMHg2IHwgKGZvdXJ0aEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweEZGRkYgJiYgdGVtcENvZGVQb2ludCA8IDB4MTEwMDAwKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvZGVQb2ludCA9PT0gbnVsbCkge1xuICAgICAgLy8gd2UgZGlkIG5vdCBnZW5lcmF0ZSBhIHZhbGlkIGNvZGVQb2ludCBzbyBpbnNlcnQgYVxuICAgICAgLy8gcmVwbGFjZW1lbnQgY2hhciAoVStGRkZEKSBhbmQgYWR2YW5jZSBvbmx5IDEgYnl0ZVxuICAgICAgY29kZVBvaW50ID0gMHhGRkZEXG4gICAgICBieXRlc1BlclNlcXVlbmNlID0gMVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50ID4gMHhGRkZGKSB7XG4gICAgICAvLyBlbmNvZGUgdG8gdXRmMTYgKHN1cnJvZ2F0ZSBwYWlyIGRhbmNlKVxuICAgICAgY29kZVBvaW50IC09IDB4MTAwMDBcbiAgICAgIHJlcy5wdXNoKGNvZGVQb2ludCA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMClcbiAgICAgIGNvZGVQb2ludCA9IDB4REMwMCB8IGNvZGVQb2ludCAmIDB4M0ZGXG4gICAgfVxuXG4gICAgcmVzLnB1c2goY29kZVBvaW50KVxuICAgIGkgKz0gYnl0ZXNQZXJTZXF1ZW5jZVxuICB9XG5cbiAgcmV0dXJuIGRlY29kZUNvZGVQb2ludHNBcnJheShyZXMpXG59XG5cbi8vIEJhc2VkIG9uIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzIyNzQ3MjcyLzY4MDc0MiwgdGhlIGJyb3dzZXIgd2l0aFxuLy8gdGhlIGxvd2VzdCBsaW1pdCBpcyBDaHJvbWUsIHdpdGggMHgxMDAwMCBhcmdzLlxuLy8gV2UgZ28gMSBtYWduaXR1ZGUgbGVzcywgZm9yIHNhZmV0eVxudmFyIE1BWF9BUkdVTUVOVFNfTEVOR1RIID0gMHgxMDAwXG5cbmZ1bmN0aW9uIGRlY29kZUNvZGVQb2ludHNBcnJheSAoY29kZVBvaW50cykge1xuICB2YXIgbGVuID0gY29kZVBvaW50cy5sZW5ndGhcbiAgaWYgKGxlbiA8PSBNQVhfQVJHVU1FTlRTX0xFTkdUSCkge1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgY29kZVBvaW50cykgLy8gYXZvaWQgZXh0cmEgc2xpY2UoKVxuICB9XG5cbiAgLy8gRGVjb2RlIGluIGNodW5rcyB0byBhdm9pZCBcImNhbGwgc3RhY2sgc2l6ZSBleGNlZWRlZFwiLlxuICB2YXIgcmVzID0gJydcbiAgdmFyIGkgPSAwXG4gIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoXG4gICAgICBTdHJpbmcsXG4gICAgICBjb2RlUG9pbnRzLnNsaWNlKGksIGkgKz0gTUFYX0FSR1VNRU5UU19MRU5HVEgpXG4gICAgKVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gYXNjaWlTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciByZXQgPSAnJ1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0gJiAweDdGKVxuICB9XG4gIHJldHVybiByZXRcbn1cblxuZnVuY3Rpb24gbGF0aW4xU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgcmV0ID0gJydcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldKVxuICB9XG4gIHJldHVybiByZXRcbn1cblxuZnVuY3Rpb24gaGV4U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgbGVuID0gYnVmLmxlbmd0aFxuXG4gIGlmICghc3RhcnQgfHwgc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgaWYgKCFlbmQgfHwgZW5kIDwgMCB8fCBlbmQgPiBsZW4pIGVuZCA9IGxlblxuXG4gIHZhciBvdXQgPSAnJ1xuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIG91dCArPSBoZXhTbGljZUxvb2t1cFRhYmxlW2J1ZltpXV1cbiAgfVxuICByZXR1cm4gb3V0XG59XG5cbmZ1bmN0aW9uIHV0ZjE2bGVTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciBieXRlcyA9IGJ1Zi5zbGljZShzdGFydCwgZW5kKVxuICB2YXIgcmVzID0gJydcbiAgLy8gSWYgYnl0ZXMubGVuZ3RoIGlzIG9kZCwgdGhlIGxhc3QgOCBiaXRzIG11c3QgYmUgaWdub3JlZCAoc2FtZSBhcyBub2RlLmpzKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aCAtIDE7IGkgKz0gMikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldICsgKGJ5dGVzW2kgKyAxXSAqIDI1NikpXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24gc2xpY2UgKHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIHN0YXJ0ID0gfn5zdGFydFxuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IH5+ZW5kXG5cbiAgaWYgKHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ICs9IGxlblxuICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gMFxuICB9IGVsc2UgaWYgKHN0YXJ0ID4gbGVuKSB7XG4gICAgc3RhcnQgPSBsZW5cbiAgfVxuXG4gIGlmIChlbmQgPCAwKSB7XG4gICAgZW5kICs9IGxlblxuICAgIGlmIChlbmQgPCAwKSBlbmQgPSAwXG4gIH0gZWxzZSBpZiAoZW5kID4gbGVuKSB7XG4gICAgZW5kID0gbGVuXG4gIH1cblxuICBpZiAoZW5kIDwgc3RhcnQpIGVuZCA9IHN0YXJ0XG5cbiAgdmFyIG5ld0J1ZiA9IHRoaXMuc3ViYXJyYXkoc3RhcnQsIGVuZClcbiAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2VcbiAgT2JqZWN0LnNldFByb3RvdHlwZU9mKG5ld0J1ZiwgQnVmZmVyLnByb3RvdHlwZSlcblxuICByZXR1cm4gbmV3QnVmXG59XG5cbi8qXG4gKiBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGJ1ZmZlciBpc24ndCB0cnlpbmcgdG8gd3JpdGUgb3V0IG9mIGJvdW5kcy5cbiAqL1xuZnVuY3Rpb24gY2hlY2tPZmZzZXQgKG9mZnNldCwgZXh0LCBsZW5ndGgpIHtcbiAgaWYgKChvZmZzZXQgJSAxKSAhPT0gMCB8fCBvZmZzZXQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb2Zmc2V0IGlzIG5vdCB1aW50JylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVaW50TEUgPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludExFID0gZnVuY3Rpb24gcmVhZFVJbnRMRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIGldICogbXVsXG4gIH1cblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVpbnRCRSA9XG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50QkUgPSBmdW5jdGlvbiByZWFkVUludEJFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcbiAgfVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aF1cbiAgdmFyIG11bCA9IDFcbiAgd2hpbGUgKGJ5dGVMZW5ndGggPiAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgLS1ieXRlTGVuZ3RoXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVaW50OCA9XG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50OCA9IGZ1bmN0aW9uIHJlYWRVSW50OCAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAxLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIHRoaXNbb2Zmc2V0XVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVaW50MTZMRSA9XG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZMRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIHRoaXNbb2Zmc2V0XSB8ICh0aGlzW29mZnNldCArIDFdIDw8IDgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVpbnQxNkJFID1cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkJFID0gZnVuY3Rpb24gcmVhZFVJbnQxNkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSA8PCA4KSB8IHRoaXNbb2Zmc2V0ICsgMV1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludDMyTEUgPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyTEUgPSBmdW5jdGlvbiByZWFkVUludDMyTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICgodGhpc1tvZmZzZXRdKSB8XG4gICAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KSB8XG4gICAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCAxNikpICtcbiAgICAgICh0aGlzW29mZnNldCArIDNdICogMHgxMDAwMDAwKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVaW50MzJCRSA9XG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MzJCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MzJCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSAqIDB4MTAwMDAwMCkgK1xuICAgICgodGhpc1tvZmZzZXQgKyAxXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDgpIHxcbiAgICB0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRMRSA9IGZ1bmN0aW9uIHJlYWRJbnRMRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIGldICogbXVsXG4gIH1cbiAgbXVsICo9IDB4ODBcblxuICBpZiAodmFsID49IG11bCkgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50QkUgPSBmdW5jdGlvbiByZWFkSW50QkUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoXG4gIHZhciBtdWwgPSAxXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIC0taV1cbiAgd2hpbGUgKGkgPiAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgLS1pXSAqIG11bFxuICB9XG4gIG11bCAqPSAweDgwXG5cbiAgaWYgKHZhbCA+PSBtdWwpIHZhbCAtPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aClcblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDggPSBmdW5jdGlvbiByZWFkSW50OCAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAxLCB0aGlzLmxlbmd0aClcbiAgaWYgKCEodGhpc1tvZmZzZXRdICYgMHg4MCkpIHJldHVybiAodGhpc1tvZmZzZXRdKVxuICByZXR1cm4gKCgweGZmIC0gdGhpc1tvZmZzZXRdICsgMSkgKiAtMSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MTZMRSA9IGZ1bmN0aW9uIHJlYWRJbnQxNkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdIHwgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOClcbiAgcmV0dXJuICh2YWwgJiAweDgwMDApID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkJFID0gZnVuY3Rpb24gcmVhZEludDE2QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIDFdIHwgKHRoaXNbb2Zmc2V0XSA8PCA4KVxuICByZXR1cm4gKHZhbCAmIDB4ODAwMCkgPyB2YWwgfCAweEZGRkYwMDAwIDogdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDMyTEUgPSBmdW5jdGlvbiByZWFkSW50MzJMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDgpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDNdIDw8IDI0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkJFID0gZnVuY3Rpb24gcmVhZEludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gPDwgMjQpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDgpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRMRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdExFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgdHJ1ZSwgMjMsIDQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEZsb2F0QkUgPSBmdW5jdGlvbiByZWFkRmxvYXRCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCAyMywgNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRG91YmxlTEUgPSBmdW5jdGlvbiByZWFkRG91YmxlTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgOCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCA1MiwgOClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRG91YmxlQkUgPSBmdW5jdGlvbiByZWFkRG91YmxlQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgOCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCBmYWxzZSwgNTIsIDgpXG59XG5cbmZ1bmN0aW9uIGNoZWNrSW50IChidWYsIHZhbHVlLCBvZmZzZXQsIGV4dCwgbWF4LCBtaW4pIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYnVmKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJidWZmZXJcIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJylcbiAgaWYgKHZhbHVlID4gbWF4IHx8IHZhbHVlIDwgbWluKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJ2YWx1ZVwiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKVxuICBpZiAob2Zmc2V0ICsgZXh0ID4gYnVmLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVaW50TEUgPVxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlVUludExFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBtYXhCeXRlcyA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKSAtIDFcbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBtYXhCeXRlcywgMClcbiAgfVxuXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB0aGlzW29mZnNldF0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB0aGlzW29mZnNldCArIGldID0gKHZhbHVlIC8gbXVsKSAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVaW50QkUgPVxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlVUludEJFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBtYXhCeXRlcyA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKSAtIDFcbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBtYXhCeXRlcywgMClcbiAgfVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aCAtIDFcbiAgdmFyIG11bCA9IDFcbiAgdGhpc1tvZmZzZXQgKyBpXSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoLS1pID49IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB0aGlzW29mZnNldCArIGldID0gKHZhbHVlIC8gbXVsKSAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVaW50OCA9XG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDggPSBmdW5jdGlvbiB3cml0ZVVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHhmZiwgMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVpbnQxNkxFID1cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweGZmZmYsIDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVaW50MTZCRSA9XG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnQxNkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVWludDMyTEUgPVxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4ZmZmZmZmZmYsIDApXG4gIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgPj4+IDI0KVxuICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiAxNilcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVpbnQzMkJFID1cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweGZmZmZmZmZmLCAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDI0KVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlSW50TEUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIGxpbWl0ID0gTWF0aC5wb3coMiwgKDggKiBieXRlTGVuZ3RoKSAtIDEpXG5cbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBsaW1pdCAtIDEsIC1saW1pdClcbiAgfVxuXG4gIHZhciBpID0gMFxuICB2YXIgbXVsID0gMVxuICB2YXIgc3ViID0gMFxuICB0aGlzW29mZnNldF0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICBpZiAodmFsdWUgPCAwICYmIHN1YiA9PT0gMCAmJiB0aGlzW29mZnNldCArIGkgLSAxXSAhPT0gMCkge1xuICAgICAgc3ViID0gMVxuICAgIH1cbiAgICB0aGlzW29mZnNldCArIGldID0gKCh2YWx1ZSAvIG11bCkgPj4gMCkgLSBzdWIgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50QkUgPSBmdW5jdGlvbiB3cml0ZUludEJFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBsaW1pdCA9IE1hdGgucG93KDIsICg4ICogYnl0ZUxlbmd0aCkgLSAxKVxuXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbGltaXQgLSAxLCAtbGltaXQpXG4gIH1cblxuICB2YXIgaSA9IGJ5dGVMZW5ndGggLSAxXG4gIHZhciBtdWwgPSAxXG4gIHZhciBzdWIgPSAwXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgaWYgKHZhbHVlIDwgMCAmJiBzdWIgPT09IDAgJiYgdGhpc1tvZmZzZXQgKyBpICsgMV0gIT09IDApIHtcbiAgICAgIHN1YiA9IDFcbiAgICB9XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICgodmFsdWUgLyBtdWwpID4+IDApIC0gc3ViICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDggPSBmdW5jdGlvbiB3cml0ZUludDggKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAxLCAweDdmLCAtMHg4MClcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmICsgdmFsdWUgKyAxXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHg3ZmZmLCAtMHg4MDAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZCRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZUludDMyTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgPj4+IDI0KVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlSW50MzJCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKVxuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZmZmZmYgKyB2YWx1ZSArIDFcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5mdW5jdGlvbiBjaGVja0lFRUU3NTQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAob2Zmc2V0ICsgZXh0ID4gYnVmLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG4gIGlmIChvZmZzZXQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbn1cblxuZnVuY3Rpb24gd3JpdGVGbG9hdCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tJRUVFNzU0KGJ1ZiwgdmFsdWUsIG9mZnNldCwgNCwgMy40MDI4MjM0NjYzODUyODg2ZSszOCwgLTMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgpXG4gIH1cbiAgaWVlZTc1NC53cml0ZShidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgMjMsIDQpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVGbG9hdExFID0gZnVuY3Rpb24gd3JpdGVGbG9hdExFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlLCBub0Fzc2VydClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUZsb2F0QkUgPSBmdW5jdGlvbiB3cml0ZUZsb2F0QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZUZsb2F0KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlLCBub0Fzc2VydClcbn1cblxuZnVuY3Rpb24gd3JpdGVEb3VibGUgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDgsIDEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4LCAtMS43OTc2OTMxMzQ4NjIzMTU3RSszMDgpXG4gIH1cbiAgaWVlZTc1NC53cml0ZShidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgNTIsIDgpXG4gIHJldHVybiBvZmZzZXQgKyA4XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVMRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlLCBub0Fzc2VydClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZURvdWJsZUJFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRG91YmxlKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlLCBub0Fzc2VydClcbn1cblxuLy8gY29weSh0YXJnZXRCdWZmZXIsIHRhcmdldFN0YXJ0PTAsIHNvdXJjZVN0YXJ0PTAsIHNvdXJjZUVuZD1idWZmZXIubGVuZ3RoKVxuQnVmZmVyLnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gY29weSAodGFyZ2V0LCB0YXJnZXRTdGFydCwgc3RhcnQsIGVuZCkge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0YXJnZXQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdhcmd1bWVudCBzaG91bGQgYmUgYSBCdWZmZXInKVxuICBpZiAoIXN0YXJ0KSBzdGFydCA9IDBcbiAgaWYgKCFlbmQgJiYgZW5kICE9PSAwKSBlbmQgPSB0aGlzLmxlbmd0aFxuICBpZiAodGFyZ2V0U3RhcnQgPj0gdGFyZ2V0Lmxlbmd0aCkgdGFyZ2V0U3RhcnQgPSB0YXJnZXQubGVuZ3RoXG4gIGlmICghdGFyZ2V0U3RhcnQpIHRhcmdldFN0YXJ0ID0gMFxuICBpZiAoZW5kID4gMCAmJiBlbmQgPCBzdGFydCkgZW5kID0gc3RhcnRcblxuICAvLyBDb3B5IDAgYnl0ZXM7IHdlJ3JlIGRvbmVcbiAgaWYgKGVuZCA9PT0gc3RhcnQpIHJldHVybiAwXG4gIGlmICh0YXJnZXQubGVuZ3RoID09PSAwIHx8IHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm4gMFxuXG4gIC8vIEZhdGFsIGVycm9yIGNvbmRpdGlvbnNcbiAgaWYgKHRhcmdldFN0YXJ0IDwgMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzJylcbiAgfVxuICBpZiAoc3RhcnQgPCAwIHx8IHN0YXJ0ID49IHRoaXMubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbiAgaWYgKGVuZCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcycpXG5cbiAgLy8gQXJlIHdlIG9vYj9cbiAgaWYgKGVuZCA+IHRoaXMubGVuZ3RoKSBlbmQgPSB0aGlzLmxlbmd0aFxuICBpZiAodGFyZ2V0Lmxlbmd0aCAtIHRhcmdldFN0YXJ0IDwgZW5kIC0gc3RhcnQpIHtcbiAgICBlbmQgPSB0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgKyBzdGFydFxuICB9XG5cbiAgdmFyIGxlbiA9IGVuZCAtIHN0YXJ0XG5cbiAgaWYgKHRoaXMgPT09IHRhcmdldCAmJiB0eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIFVzZSBidWlsdC1pbiB3aGVuIGF2YWlsYWJsZSwgbWlzc2luZyBmcm9tIElFMTFcbiAgICB0aGlzLmNvcHlXaXRoaW4odGFyZ2V0U3RhcnQsIHN0YXJ0LCBlbmQpXG4gIH0gZWxzZSB7XG4gICAgVWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoXG4gICAgICB0YXJnZXQsXG4gICAgICB0aGlzLnN1YmFycmF5KHN0YXJ0LCBlbmQpLFxuICAgICAgdGFyZ2V0U3RhcnRcbiAgICApXG4gIH1cblxuICByZXR1cm4gbGVuXG59XG5cbi8vIFVzYWdlOlxuLy8gICAgYnVmZmVyLmZpbGwobnVtYmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChidWZmZXJbLCBvZmZzZXRbLCBlbmRdXSlcbi8vICAgIGJ1ZmZlci5maWxsKHN0cmluZ1ssIG9mZnNldFssIGVuZF1dWywgZW5jb2RpbmddKVxuQnVmZmVyLnByb3RvdHlwZS5maWxsID0gZnVuY3Rpb24gZmlsbCAodmFsLCBzdGFydCwgZW5kLCBlbmNvZGluZykge1xuICAvLyBIYW5kbGUgc3RyaW5nIGNhc2VzOlxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAodHlwZW9mIHN0YXJ0ID09PSAnc3RyaW5nJykge1xuICAgICAgZW5jb2RpbmcgPSBzdGFydFxuICAgICAgc3RhcnQgPSAwXG4gICAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGVuZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gZW5kXG4gICAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICAgIH1cbiAgICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZycgJiYgIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgIH1cbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdmFyIGNvZGUgPSB2YWwuY2hhckNvZGVBdCgwKVxuICAgICAgaWYgKChlbmNvZGluZyA9PT0gJ3V0ZjgnICYmIGNvZGUgPCAxMjgpIHx8XG4gICAgICAgICAgZW5jb2RpbmcgPT09ICdsYXRpbjEnKSB7XG4gICAgICAgIC8vIEZhc3QgcGF0aDogSWYgYHZhbGAgZml0cyBpbnRvIGEgc2luZ2xlIGJ5dGUsIHVzZSB0aGF0IG51bWVyaWMgdmFsdWUuXG4gICAgICAgIHZhbCA9IGNvZGVcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICB2YWwgPSB2YWwgJiAyNTVcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnYm9vbGVhbicpIHtcbiAgICB2YWwgPSBOdW1iZXIodmFsKVxuICB9XG5cbiAgLy8gSW52YWxpZCByYW5nZXMgYXJlIG5vdCBzZXQgdG8gYSBkZWZhdWx0LCBzbyBjYW4gcmFuZ2UgY2hlY2sgZWFybHkuXG4gIGlmIChzdGFydCA8IDAgfHwgdGhpcy5sZW5ndGggPCBzdGFydCB8fCB0aGlzLmxlbmd0aCA8IGVuZCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdPdXQgb2YgcmFuZ2UgaW5kZXgnKVxuICB9XG5cbiAgaWYgKGVuZCA8PSBzdGFydCkge1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBzdGFydCA9IHN0YXJ0ID4+PiAwXG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gdGhpcy5sZW5ndGggOiBlbmQgPj4+IDBcblxuICBpZiAoIXZhbCkgdmFsID0gMFxuXG4gIHZhciBpXG4gIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICAgIHRoaXNbaV0gPSB2YWxcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGJ5dGVzID0gQnVmZmVyLmlzQnVmZmVyKHZhbClcbiAgICAgID8gdmFsXG4gICAgICA6IEJ1ZmZlci5mcm9tKHZhbCwgZW5jb2RpbmcpXG4gICAgdmFyIGxlbiA9IGJ5dGVzLmxlbmd0aFxuICAgIGlmIChsZW4gPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSB2YWx1ZSBcIicgKyB2YWwgK1xuICAgICAgICAnXCIgaXMgaW52YWxpZCBmb3IgYXJndW1lbnQgXCJ2YWx1ZVwiJylcbiAgICB9XG4gICAgZm9yIChpID0gMDsgaSA8IGVuZCAtIHN0YXJ0OyArK2kpIHtcbiAgICAgIHRoaXNbaSArIHN0YXJ0XSA9IGJ5dGVzW2kgJSBsZW5dXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuLy8gSEVMUEVSIEZVTkNUSU9OU1xuLy8gPT09PT09PT09PT09PT09PVxuXG52YXIgSU5WQUxJRF9CQVNFNjRfUkUgPSAvW14rLzAtOUEtWmEtei1fXS9nXG5cbmZ1bmN0aW9uIGJhc2U2NGNsZWFuIChzdHIpIHtcbiAgLy8gTm9kZSB0YWtlcyBlcXVhbCBzaWducyBhcyBlbmQgb2YgdGhlIEJhc2U2NCBlbmNvZGluZ1xuICBzdHIgPSBzdHIuc3BsaXQoJz0nKVswXVxuICAvLyBOb2RlIHN0cmlwcyBvdXQgaW52YWxpZCBjaGFyYWN0ZXJzIGxpa2UgXFxuIGFuZCBcXHQgZnJvbSB0aGUgc3RyaW5nLCBiYXNlNjQtanMgZG9lcyBub3RcbiAgc3RyID0gc3RyLnRyaW0oKS5yZXBsYWNlKElOVkFMSURfQkFTRTY0X1JFLCAnJylcbiAgLy8gTm9kZSBjb252ZXJ0cyBzdHJpbmdzIHdpdGggbGVuZ3RoIDwgMiB0byAnJ1xuICBpZiAoc3RyLmxlbmd0aCA8IDIpIHJldHVybiAnJ1xuICAvLyBOb2RlIGFsbG93cyBmb3Igbm9uLXBhZGRlZCBiYXNlNjQgc3RyaW5ncyAobWlzc2luZyB0cmFpbGluZyA9PT0pLCBiYXNlNjQtanMgZG9lcyBub3RcbiAgd2hpbGUgKHN0ci5sZW5ndGggJSA0ICE9PSAwKSB7XG4gICAgc3RyID0gc3RyICsgJz0nXG4gIH1cbiAgcmV0dXJuIHN0clxufVxuXG5mdW5jdGlvbiB1dGY4VG9CeXRlcyAoc3RyaW5nLCB1bml0cykge1xuICB1bml0cyA9IHVuaXRzIHx8IEluZmluaXR5XG4gIHZhciBjb2RlUG9pbnRcbiAgdmFyIGxlbmd0aCA9IHN0cmluZy5sZW5ndGhcbiAgdmFyIGxlYWRTdXJyb2dhdGUgPSBudWxsXG4gIHZhciBieXRlcyA9IFtdXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGNvZGVQb2ludCA9IHN0cmluZy5jaGFyQ29kZUF0KGkpXG5cbiAgICAvLyBpcyBzdXJyb2dhdGUgY29tcG9uZW50XG4gICAgaWYgKGNvZGVQb2ludCA+IDB4RDdGRiAmJiBjb2RlUG9pbnQgPCAweEUwMDApIHtcbiAgICAgIC8vIGxhc3QgY2hhciB3YXMgYSBsZWFkXG4gICAgICBpZiAoIWxlYWRTdXJyb2dhdGUpIHtcbiAgICAgICAgLy8gbm8gbGVhZCB5ZXRcbiAgICAgICAgaWYgKGNvZGVQb2ludCA+IDB4REJGRikge1xuICAgICAgICAgIC8vIHVuZXhwZWN0ZWQgdHJhaWxcbiAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKGkgKyAxID09PSBsZW5ndGgpIHtcbiAgICAgICAgICAvLyB1bnBhaXJlZCBsZWFkXG4gICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHZhbGlkIGxlYWRcbiAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IGNvZGVQb2ludFxuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIDIgbGVhZHMgaW4gYSByb3dcbiAgICAgIGlmIChjb2RlUG9pbnQgPCAweERDMDApIHtcbiAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnRcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gdmFsaWQgc3Vycm9nYXRlIHBhaXJcbiAgICAgIGNvZGVQb2ludCA9IChsZWFkU3Vycm9nYXRlIC0gMHhEODAwIDw8IDEwIHwgY29kZVBvaW50IC0gMHhEQzAwKSArIDB4MTAwMDBcbiAgICB9IGVsc2UgaWYgKGxlYWRTdXJyb2dhdGUpIHtcbiAgICAgIC8vIHZhbGlkIGJtcCBjaGFyLCBidXQgbGFzdCBjaGFyIHdhcyBhIGxlYWRcbiAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgIH1cblxuICAgIGxlYWRTdXJyb2dhdGUgPSBudWxsXG5cbiAgICAvLyBlbmNvZGUgdXRmOFxuICAgIGlmIChjb2RlUG9pbnQgPCAweDgwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDEpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goY29kZVBvaW50KVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHg4MDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiB8IDB4QzAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDEwMDAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDMpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweEMgfCAweEUwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2ICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDExMDAwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSA0KSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHgxMiB8IDB4RjAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweEMgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29kZSBwb2ludCcpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVzXG59XG5cbmZ1bmN0aW9uIGFzY2lpVG9CeXRlcyAoc3RyKSB7XG4gIHZhciBieXRlQXJyYXkgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIC8vIE5vZGUncyBjb2RlIHNlZW1zIHRvIGJlIGRvaW5nIHRoaXMgYW5kIG5vdCAmIDB4N0YuLlxuICAgIGJ5dGVBcnJheS5wdXNoKHN0ci5jaGFyQ29kZUF0KGkpICYgMHhGRilcbiAgfVxuICByZXR1cm4gYnl0ZUFycmF5XG59XG5cbmZ1bmN0aW9uIHV0ZjE2bGVUb0J5dGVzIChzdHIsIHVuaXRzKSB7XG4gIHZhciBjLCBoaSwgbG9cbiAgdmFyIGJ5dGVBcnJheSA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKCh1bml0cyAtPSAyKSA8IDApIGJyZWFrXG5cbiAgICBjID0gc3RyLmNoYXJDb2RlQXQoaSlcbiAgICBoaSA9IGMgPj4gOFxuICAgIGxvID0gYyAlIDI1NlxuICAgIGJ5dGVBcnJheS5wdXNoKGxvKVxuICAgIGJ5dGVBcnJheS5wdXNoKGhpKVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiBiYXNlNjRUb0J5dGVzIChzdHIpIHtcbiAgcmV0dXJuIGJhc2U2NC50b0J5dGVBcnJheShiYXNlNjRjbGVhbihzdHIpKVxufVxuXG5mdW5jdGlvbiBibGl0QnVmZmVyIChzcmMsIGRzdCwgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGlmICgoaSArIG9mZnNldCA+PSBkc3QubGVuZ3RoKSB8fCAoaSA+PSBzcmMubGVuZ3RoKSkgYnJlYWtcbiAgICBkc3RbaSArIG9mZnNldF0gPSBzcmNbaV1cbiAgfVxuICByZXR1cm4gaVxufVxuXG4vLyBBcnJheUJ1ZmZlciBvciBVaW50OEFycmF5IG9iamVjdHMgZnJvbSBvdGhlciBjb250ZXh0cyAoaS5lLiBpZnJhbWVzKSBkbyBub3QgcGFzc1xuLy8gdGhlIGBpbnN0YW5jZW9mYCBjaGVjayBidXQgdGhleSBzaG91bGQgYmUgdHJlYXRlZCBhcyBvZiB0aGF0IHR5cGUuXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL2lzc3Vlcy8xNjZcbmZ1bmN0aW9uIGlzSW5zdGFuY2UgKG9iaiwgdHlwZSkge1xuICByZXR1cm4gb2JqIGluc3RhbmNlb2YgdHlwZSB8fFxuICAgIChvYmogIT0gbnVsbCAmJiBvYmouY29uc3RydWN0b3IgIT0gbnVsbCAmJiBvYmouY29uc3RydWN0b3IubmFtZSAhPSBudWxsICYmXG4gICAgICBvYmouY29uc3RydWN0b3IubmFtZSA9PT0gdHlwZS5uYW1lKVxufVxuZnVuY3Rpb24gbnVtYmVySXNOYU4gKG9iaikge1xuICAvLyBGb3IgSUUxMSBzdXBwb3J0XG4gIHJldHVybiBvYmogIT09IG9iaiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNlbGYtY29tcGFyZVxufVxuXG4vLyBDcmVhdGUgbG9va3VwIHRhYmxlIGZvciBgdG9TdHJpbmcoJ2hleCcpYFxuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9pc3N1ZXMvMjE5XG52YXIgaGV4U2xpY2VMb29rdXBUYWJsZSA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciBhbHBoYWJldCA9ICcwMTIzNDU2Nzg5YWJjZGVmJ1xuICB2YXIgdGFibGUgPSBuZXcgQXJyYXkoMjU2KVxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyArK2kpIHtcbiAgICB2YXIgaTE2ID0gaSAqIDE2XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCAxNjsgKytqKSB7XG4gICAgICB0YWJsZVtpMTYgKyBqXSA9IGFscGhhYmV0W2ldICsgYWxwaGFiZXRbal1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRhYmxlXG59KSgpXG4iLCAiLyohXG4gQ29weXJpZ2h0IChjKSBQZWN1bGlhciBWZW50dXJlcywgTExDXG4qL1xuXG5pbXBvcnQgKiBhcyBjb3JlIGZyb20gJ3dlYmNyeXB0by1jb3JlJztcbmltcG9ydCB7IEJ1ZmZlclNvdXJjZUNvbnZlcnRlciBhcyBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIkMSB9IGZyb20gJ3dlYmNyeXB0by1jb3JlJztcbmV4cG9ydCB7IENyeXB0b0tleSB9IGZyb20gJ3dlYmNyeXB0by1jb3JlJztcbmltcG9ydCB7IEJ1ZmZlciBhcyBCdWZmZXIkMSB9IGZyb20gJ2J1ZmZlcic7XG5pbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgKiBhcyBwcm9jZXNzIGZyb20gJ3Byb2Nlc3MnO1xuaW1wb3J0IHsgX19kZWNvcmF0ZSB9IGZyb20gJ3RzbGliJztcbmltcG9ydCB7IEpzb25Qcm9wLCBKc29uUHJvcFR5cGVzLCBKc29uU2VyaWFsaXplciwgSnNvblBhcnNlciB9IGZyb20gJ0BwZWN1bGlhci9qc29uLXNjaGVtYSc7XG5pbXBvcnQgeyBDb252ZXJ0LCBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIgfSBmcm9tICdwdnRzdXRpbHMnO1xuaW1wb3J0IHsgQXNuUGFyc2VyLCBBc25TZXJpYWxpemVyLCBBc25Db252ZXJ0IH0gZnJvbSAnQHBlY3VsaWFyL2FzbjEtc2NoZW1hJztcblxuY29uc3QgSnNvbkJhc2U2NFVybENvbnZlcnRlciA9IHtcbiAgICBmcm9tSlNPTjogKHZhbHVlKSA9PiBCdWZmZXIkMS5mcm9tKENvbnZlcnQuRnJvbUJhc2U2NFVybCh2YWx1ZSkpLFxuICAgIHRvSlNPTjogKHZhbHVlKSA9PiBDb252ZXJ0LlRvQmFzZTY0VXJsKHZhbHVlKSxcbn07XG5cbmNsYXNzIENyeXB0b0tleSBleHRlbmRzIGNvcmUuQ3J5cHRvS2V5IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5kYXRhID0gQnVmZmVyJDEuYWxsb2MoMCk7XG4gICAgICAgIHRoaXMuYWxnb3JpdGhtID0geyBuYW1lOiBcIlwiIH07XG4gICAgICAgIHRoaXMuZXh0cmFjdGFibGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy50eXBlID0gXCJzZWNyZXRcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXTtcbiAgICAgICAgdGhpcy5rdHkgPSBcIm9jdFwiO1xuICAgICAgICB0aGlzLmFsZyA9IFwiXCI7XG4gICAgfVxufVxuX19kZWNvcmF0ZShbXG4gICAgSnNvblByb3AoeyBuYW1lOiBcImV4dFwiLCB0eXBlOiBKc29uUHJvcFR5cGVzLkJvb2xlYW4sIG9wdGlvbmFsOiB0cnVlIH0pXG5dLCBDcnlwdG9LZXkucHJvdG90eXBlLCBcImV4dHJhY3RhYmxlXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwia2V5X29wc1wiLCB0eXBlOiBKc29uUHJvcFR5cGVzLlN0cmluZywgcmVwZWF0ZWQ6IHRydWUsIG9wdGlvbmFsOiB0cnVlIH0pXG5dLCBDcnlwdG9LZXkucHJvdG90eXBlLCBcInVzYWdlc1wiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgSnNvblByb3AoeyB0eXBlOiBKc29uUHJvcFR5cGVzLlN0cmluZyB9KVxuXSwgQ3J5cHRvS2V5LnByb3RvdHlwZSwgXCJrdHlcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEpzb25Qcm9wKHsgdHlwZTogSnNvblByb3BUeXBlcy5TdHJpbmcsIG9wdGlvbmFsOiB0cnVlIH0pXG5dLCBDcnlwdG9LZXkucHJvdG90eXBlLCBcImFsZ1wiLCB2b2lkIDApO1xuXG5jbGFzcyBTeW1tZXRyaWNLZXkgZXh0ZW5kcyBDcnlwdG9LZXkge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLmt0eSA9IFwib2N0XCI7XG4gICAgICAgIHRoaXMudHlwZSA9IFwic2VjcmV0XCI7XG4gICAgfVxufVxuXG5jbGFzcyBBc3ltbWV0cmljS2V5IGV4dGVuZHMgQ3J5cHRvS2V5IHtcbn1cblxuY2xhc3MgQWVzQ3J5cHRvS2V5IGV4dGVuZHMgU3ltbWV0cmljS2V5IHtcbiAgICBnZXQgYWxnKCkge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcIkFFUy1DQkNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYEEke3RoaXMuYWxnb3JpdGhtLmxlbmd0aH1DQkNgO1xuICAgICAgICAgICAgY2FzZSBcIkFFUy1DVFJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYEEke3RoaXMuYWxnb3JpdGhtLmxlbmd0aH1DVFJgO1xuICAgICAgICAgICAgY2FzZSBcIkFFUy1HQ01cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYEEke3RoaXMuYWxnb3JpdGhtLmxlbmd0aH1HQ01gO1xuICAgICAgICAgICAgY2FzZSBcIkFFUy1LV1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgQSR7dGhpcy5hbGdvcml0aG0ubGVuZ3RofUtXYDtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtQ01BQ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgQSR7dGhpcy5hbGdvcml0aG0ubGVuZ3RofUNNQUNgO1xuICAgICAgICAgICAgY2FzZSBcIkFFUy1FQ0JcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYEEke3RoaXMuYWxnb3JpdGhtLmxlbmd0aH1FQ0JgO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5BbGdvcml0aG1FcnJvcihcIlVuc3VwcG9ydGVkIGFsZ29yaXRobSBuYW1lXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNldCBhbGcodmFsdWUpIHtcbiAgICB9XG59XG5fX2RlY29yYXRlKFtcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwia1wiLCBjb252ZXJ0ZXI6IEpzb25CYXNlNjRVcmxDb252ZXJ0ZXIgfSlcbl0sIEFlc0NyeXB0b0tleS5wcm90b3R5cGUsIFwiZGF0YVwiLCB2b2lkIDApO1xuXG5jbGFzcyBBZXNDcnlwdG8ge1xuICAgIHN0YXRpYyBhc3luYyBnZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gbmV3IEFlc0NyeXB0b0tleSgpO1xuICAgICAgICBrZXkuYWxnb3JpdGhtID0gYWxnb3JpdGhtO1xuICAgICAgICBrZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAga2V5LnVzYWdlcyA9IGtleVVzYWdlcztcbiAgICAgICAga2V5LmRhdGEgPSBjcnlwdG8ucmFuZG9tQnl0ZXMoYWxnb3JpdGhtLmxlbmd0aCA+PiAzKTtcbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICBpZiAoIShrZXkgaW5zdGFuY2VvZiBBZXNDcnlwdG9LZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJrZXk6IElzIG5vdCBBZXNDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChmb3JtYXQudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcImp3a1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBKc29uU2VyaWFsaXplci50b0pTT04oa2V5KTtcbiAgICAgICAgICAgIGNhc2UgXCJyYXdcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoa2V5LmRhdGEpLmJ1ZmZlcjtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJmb3JtYXQ6IE11c3QgYmUgJ2p3aycgb3IgJ3JhdydcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBsZXQga2V5O1xuICAgICAgICBzd2l0Y2ggKGZvcm1hdC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiandrXCI6XG4gICAgICAgICAgICAgICAga2V5ID0gSnNvblBhcnNlci5mcm9tSlNPTihrZXlEYXRhLCB7IHRhcmdldFNjaGVtYTogQWVzQ3J5cHRvS2V5IH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInJhd1wiOlxuICAgICAgICAgICAgICAgIGtleSA9IG5ldyBBZXNDcnlwdG9LZXkoKTtcbiAgICAgICAgICAgICAgICBrZXkuZGF0YSA9IEJ1ZmZlciQxLmZyb20oa2V5RGF0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiZm9ybWF0OiBNdXN0IGJlICdqd2snIG9yICdyYXcnXCIpO1xuICAgICAgICB9XG4gICAgICAgIGtleS5hbGdvcml0aG0gPSBhbGdvcml0aG07XG4gICAgICAgIGtleS5hbGdvcml0aG0ubGVuZ3RoID0ga2V5LmRhdGEubGVuZ3RoIDw8IDM7XG4gICAgICAgIGtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBrZXkudXNhZ2VzID0ga2V5VXNhZ2VzO1xuICAgICAgICBzd2l0Y2ggKGtleS5hbGdvcml0aG0ubGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDEyODpcbiAgICAgICAgICAgIGNhc2UgMTkyOlxuICAgICAgICAgICAgY2FzZSAyNTY6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwia2V5RGF0YTogSXMgd3Jvbmcga2V5IGxlbmd0aFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZW5jcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBzd2l0Y2ggKGFsZ29yaXRobS5uYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtQ0JDXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jcnlwdEFlc0NCQyhhbGdvcml0aG0sIGtleSwgQnVmZmVyJDEuZnJvbShkYXRhKSk7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUNUUlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY3J5cHRBZXNDVFIoYWxnb3JpdGhtLCBrZXksIEJ1ZmZlciQxLmZyb20oZGF0YSkpO1xuICAgICAgICAgICAgY2FzZSBcIkFFUy1HQ01cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNyeXB0QWVzR0NNKGFsZ29yaXRobSwga2V5LCBCdWZmZXIkMS5mcm9tKGRhdGEpKTtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtS1dcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNyeXB0QWVzS1coYWxnb3JpdGhtLCBrZXksIEJ1ZmZlciQxLmZyb20oZGF0YSkpO1xuICAgICAgICAgICAgY2FzZSBcIkFFUy1FQ0JcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNyeXB0QWVzRUNCKGFsZ29yaXRobSwga2V5LCBCdWZmZXIkMS5mcm9tKGRhdGEpKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJhbGdvcml0aG06IElzIG5vdCByZWNvZ25pemVkXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBkZWNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGlmICghKGtleSBpbnN0YW5jZW9mIEFlc0NyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImtleTogSXMgbm90IEFlc0NyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKGFsZ29yaXRobS5uYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtQ0JDXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjcnlwdEFlc0NCQyhhbGdvcml0aG0sIGtleSwgQnVmZmVyJDEuZnJvbShkYXRhKSk7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUNUUlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY3J5cHRBZXNDVFIoYWxnb3JpdGhtLCBrZXksIEJ1ZmZlciQxLmZyb20oZGF0YSkpO1xuICAgICAgICAgICAgY2FzZSBcIkFFUy1HQ01cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNyeXB0QWVzR0NNKGFsZ29yaXRobSwga2V5LCBCdWZmZXIkMS5mcm9tKGRhdGEpKTtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtS1dcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNyeXB0QWVzS1coYWxnb3JpdGhtLCBrZXksIEJ1ZmZlciQxLmZyb20oZGF0YSkpO1xuICAgICAgICAgICAgY2FzZSBcIkFFUy1FQ0JcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNyeXB0QWVzRUNCKGFsZ29yaXRobSwga2V5LCBCdWZmZXIkMS5mcm9tKGRhdGEpKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJhbGdvcml0aG06IElzIG5vdCByZWNvZ25pemVkXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBlbmNyeXB0QWVzQ0JDKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGNpcGhlciA9IGNyeXB0by5jcmVhdGVDaXBoZXJpdihgYWVzLSR7a2V5LmFsZ29yaXRobS5sZW5ndGh9LWNiY2AsIGtleS5kYXRhLCBuZXcgVWludDhBcnJheShhbGdvcml0aG0uaXYpKTtcbiAgICAgICAgbGV0IGVuYyA9IGNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGVuYyA9IEJ1ZmZlciQxLmNvbmNhdChbZW5jLCBjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICBjb25zdCByZXMgPSBuZXcgVWludDhBcnJheShlbmMpLmJ1ZmZlcjtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGRlY3J5cHRBZXNDQkMoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgZGVjaXBoZXIgPSBjcnlwdG8uY3JlYXRlRGVjaXBoZXJpdihgYWVzLSR7a2V5LmFsZ29yaXRobS5sZW5ndGh9LWNiY2AsIGtleS5kYXRhLCBuZXcgVWludDhBcnJheShhbGdvcml0aG0uaXYpKTtcbiAgICAgICAgbGV0IGRlYyA9IGRlY2lwaGVyLnVwZGF0ZShkYXRhKTtcbiAgICAgICAgZGVjID0gQnVmZmVyJDEuY29uY2F0KFtkZWMsIGRlY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGRlYykuYnVmZmVyO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZW5jcnlwdEFlc0NUUihhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBjaXBoZXIgPSBjcnlwdG8uY3JlYXRlQ2lwaGVyaXYoYGFlcy0ke2tleS5hbGdvcml0aG0ubGVuZ3RofS1jdHJgLCBrZXkuZGF0YSwgQnVmZmVyJDEuZnJvbShhbGdvcml0aG0uY291bnRlcikpO1xuICAgICAgICBsZXQgZW5jID0gY2lwaGVyLnVwZGF0ZShkYXRhKTtcbiAgICAgICAgZW5jID0gQnVmZmVyJDEuY29uY2F0KFtlbmMsIGNpcGhlci5maW5hbCgpXSk7XG4gICAgICAgIGNvbnN0IHJlcyA9IG5ldyBVaW50OEFycmF5KGVuYykuYnVmZmVyO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZGVjcnlwdEFlc0NUUihhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBkZWNpcGhlciA9IGNyeXB0by5jcmVhdGVEZWNpcGhlcml2KGBhZXMtJHtrZXkuYWxnb3JpdGhtLmxlbmd0aH0tY3RyYCwga2V5LmRhdGEsIG5ldyBVaW50OEFycmF5KGFsZ29yaXRobS5jb3VudGVyKSk7XG4gICAgICAgIGxldCBkZWMgPSBkZWNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGRlYyA9IEJ1ZmZlciQxLmNvbmNhdChbZGVjLCBkZWNpcGhlci5maW5hbCgpXSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShkZWMpLmJ1ZmZlcjtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGVuY3J5cHRBZXNHQ00oYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgY2lwaGVyID0gY3J5cHRvLmNyZWF0ZUNpcGhlcml2KGBhZXMtJHtrZXkuYWxnb3JpdGhtLmxlbmd0aH0tZ2NtYCwga2V5LmRhdGEsIEJ1ZmZlciQxLmZyb20oYWxnb3JpdGhtLml2KSwge1xuICAgICAgICAgICAgYXV0aFRhZ0xlbmd0aDogKGFsZ29yaXRobS50YWdMZW5ndGggfHwgMTI4KSA+PiAzLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGFsZ29yaXRobS5hZGRpdGlvbmFsRGF0YSkge1xuICAgICAgICAgICAgY2lwaGVyLnNldEFBRChCdWZmZXIkMS5mcm9tKGFsZ29yaXRobS5hZGRpdGlvbmFsRGF0YSkpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBlbmMgPSBjaXBoZXIudXBkYXRlKGRhdGEpO1xuICAgICAgICBlbmMgPSBCdWZmZXIkMS5jb25jYXQoW2VuYywgY2lwaGVyLmZpbmFsKCksIGNpcGhlci5nZXRBdXRoVGFnKCldKTtcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoZW5jKS5idWZmZXI7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBkZWNyeXB0QWVzR0NNKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IHRhZ0xlbmd0aCA9IChhbGdvcml0aG0udGFnTGVuZ3RoIHx8IDEyOCkgPj4gMztcbiAgICAgICAgY29uc3QgZGVjaXBoZXIgPSBjcnlwdG8uY3JlYXRlRGVjaXBoZXJpdihgYWVzLSR7a2V5LmFsZ29yaXRobS5sZW5ndGh9LWdjbWAsIGtleS5kYXRhLCBuZXcgVWludDhBcnJheShhbGdvcml0aG0uaXYpLCB7XG4gICAgICAgICAgICBhdXRoVGFnTGVuZ3RoOiB0YWdMZW5ndGgsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBlbmMgPSBkYXRhLnNsaWNlKDAsIGRhdGEubGVuZ3RoIC0gdGFnTGVuZ3RoKTtcbiAgICAgICAgY29uc3QgdGFnID0gZGF0YS5zbGljZShkYXRhLmxlbmd0aCAtIHRhZ0xlbmd0aCk7XG4gICAgICAgIGlmIChhbGdvcml0aG0uYWRkaXRpb25hbERhdGEpIHtcbiAgICAgICAgICAgIGRlY2lwaGVyLnNldEFBRChCdWZmZXIkMS5mcm9tKGFsZ29yaXRobS5hZGRpdGlvbmFsRGF0YSkpO1xuICAgICAgICB9XG4gICAgICAgIGRlY2lwaGVyLnNldEF1dGhUYWcodGFnKTtcbiAgICAgICAgbGV0IGRlYyA9IGRlY2lwaGVyLnVwZGF0ZShlbmMpO1xuICAgICAgICBkZWMgPSBCdWZmZXIkMS5jb25jYXQoW2RlYywgZGVjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGVjKS5idWZmZXI7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBlbmNyeXB0QWVzS1coYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgY2lwaGVyID0gY3J5cHRvLmNyZWF0ZUNpcGhlcml2KGBpZC1hZXMke2tleS5hbGdvcml0aG0ubGVuZ3RofS13cmFwYCwga2V5LmRhdGEsIHRoaXMuQUVTX0tXX0lWKTtcbiAgICAgICAgbGV0IGVuYyA9IGNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGVuYyA9IEJ1ZmZlciQxLmNvbmNhdChbZW5jLCBjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZW5jKS5idWZmZXI7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBkZWNyeXB0QWVzS1coYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgZGVjaXBoZXIgPSBjcnlwdG8uY3JlYXRlRGVjaXBoZXJpdihgaWQtYWVzJHtrZXkuYWxnb3JpdGhtLmxlbmd0aH0td3JhcGAsIGtleS5kYXRhLCB0aGlzLkFFU19LV19JVik7XG4gICAgICAgIGxldCBkZWMgPSBkZWNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGRlYyA9IEJ1ZmZlciQxLmNvbmNhdChbZGVjLCBkZWNpcGhlci5maW5hbCgpXSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShkZWMpLmJ1ZmZlcjtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGVuY3J5cHRBZXNFQ0IoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgY2lwaGVyID0gY3J5cHRvLmNyZWF0ZUNpcGhlcml2KGBhZXMtJHtrZXkuYWxnb3JpdGhtLmxlbmd0aH0tZWNiYCwga2V5LmRhdGEsIG5ldyBVaW50OEFycmF5KDApKTtcbiAgICAgICAgbGV0IGVuYyA9IGNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGVuYyA9IEJ1ZmZlciQxLmNvbmNhdChbZW5jLCBjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICBjb25zdCByZXMgPSBuZXcgVWludDhBcnJheShlbmMpLmJ1ZmZlcjtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGRlY3J5cHRBZXNFQ0IoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgZGVjaXBoZXIgPSBjcnlwdG8uY3JlYXRlRGVjaXBoZXJpdihgYWVzLSR7a2V5LmFsZ29yaXRobS5sZW5ndGh9LWVjYmAsIGtleS5kYXRhLCBuZXcgVWludDhBcnJheSgwKSk7XG4gICAgICAgIGxldCBkZWMgPSBkZWNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGRlYyA9IEJ1ZmZlciQxLmNvbmNhdChbZGVjLCBkZWNpcGhlci5maW5hbCgpXSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShkZWMpLmJ1ZmZlcjtcbiAgICB9XG59XG5BZXNDcnlwdG8uQUVTX0tXX0lWID0gQnVmZmVyJDEuZnJvbShcIkE2QTZBNkE2QTZBNkE2QTZcIiwgXCJoZXhcIik7XG5cbmNvbnN0IGtleVN0b3JhZ2UgPSBuZXcgV2Vha01hcCgpO1xuZnVuY3Rpb24gZ2V0Q3J5cHRvS2V5KGtleSkge1xuICAgIGNvbnN0IHJlcyA9IGtleVN0b3JhZ2UuZ2V0KGtleSk7XG4gICAgaWYgKCFyZXMpIHtcbiAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJDYW5ub3QgZ2V0IENyeXB0b0tleSBmcm9tIHNlY3VyZSBzdG9yYWdlXCIpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuZnVuY3Rpb24gc2V0Q3J5cHRvS2V5KHZhbHVlKSB7XG4gICAgY29uc3Qga2V5ID0gY29yZS5DcnlwdG9LZXkuY3JlYXRlKHZhbHVlLmFsZ29yaXRobSwgdmFsdWUudHlwZSwgdmFsdWUuZXh0cmFjdGFibGUsIHZhbHVlLnVzYWdlcyk7XG4gICAgT2JqZWN0LmZyZWV6ZShrZXkpO1xuICAgIGtleVN0b3JhZ2Uuc2V0KGtleSwgdmFsdWUpO1xuICAgIHJldHVybiBrZXk7XG59XG5cbmNsYXNzIEFlc0NiY1Byb3ZpZGVyIGV4dGVuZHMgY29yZS5BZXNDYmNQcm92aWRlciB7XG4gICAgYXN5bmMgb25HZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgQWVzQ3J5cHRvLmdlbmVyYXRlS2V5KHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgIGxlbmd0aDogYWxnb3JpdGhtLmxlbmd0aCxcbiAgICAgICAgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgYXN5bmMgb25FbmNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZW5jcnlwdChhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRGVjcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gQWVzQ3J5cHRvLmRlY3J5cHQoYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICByZXR1cm4gQWVzQ3J5cHRvLmV4cG9ydEtleShmb3JtYXQsIGdldENyeXB0b0tleShrZXkpKTtcbiAgICB9XG4gICAgYXN5bmMgb25JbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgQWVzQ3J5cHRvLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIHsgbmFtZTogYWxnb3JpdGhtLm5hbWUgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgaWYgKCEoZ2V0Q3J5cHRvS2V5KGtleSkgaW5zdGFuY2VvZiBBZXNDcnlwdG9LZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgYSBBZXNDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNvbnN0IHplcm8gPSBCdWZmZXIkMS5mcm9tKFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSk7XG5jb25zdCByYiA9IEJ1ZmZlciQxLmZyb20oWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNV0pO1xuY29uc3QgYmxvY2tTaXplID0gMTY7XG5mdW5jdGlvbiBiaXRTaGlmdExlZnQoYnVmZmVyKSB7XG4gICAgY29uc3Qgc2hpZnRlZCA9IEJ1ZmZlciQxLmFsbG9jKGJ1ZmZlci5sZW5ndGgpO1xuICAgIGNvbnN0IGxhc3QgPSBidWZmZXIubGVuZ3RoIC0gMTtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbGFzdDsgaW5kZXgrKykge1xuICAgICAgICBzaGlmdGVkW2luZGV4XSA9IGJ1ZmZlcltpbmRleF0gPDwgMTtcbiAgICAgICAgaWYgKGJ1ZmZlcltpbmRleCArIDFdICYgMHg4MCkge1xuICAgICAgICAgICAgc2hpZnRlZFtpbmRleF0gKz0gMHgwMTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzaGlmdGVkW2xhc3RdID0gYnVmZmVyW2xhc3RdIDw8IDE7XG4gICAgcmV0dXJuIHNoaWZ0ZWQ7XG59XG5mdW5jdGlvbiB4b3IoYSwgYikge1xuICAgIGNvbnN0IGxlbmd0aCA9IE1hdGgubWluKGEubGVuZ3RoLCBiLmxlbmd0aCk7XG4gICAgY29uc3Qgb3V0cHV0ID0gQnVmZmVyJDEuYWxsb2MobGVuZ3RoKTtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIG91dHB1dFtpbmRleF0gPSBhW2luZGV4XSBeIGJbaW5kZXhdO1xuICAgIH1cbiAgICByZXR1cm4gb3V0cHV0O1xufVxuZnVuY3Rpb24gYWVzKGtleSwgbWVzc2FnZSkge1xuICAgIGNvbnN0IGNpcGhlciA9IGNyeXB0by5jcmVhdGVDaXBoZXJpdihgYWVzJHtrZXkubGVuZ3RoIDw8IDN9YCwga2V5LCB6ZXJvKTtcbiAgICBjb25zdCByZXN1bHQgPSBjaXBoZXIudXBkYXRlKG1lc3NhZ2UpO1xuICAgIGNpcGhlci5maW5hbCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBnZXRNZXNzYWdlQmxvY2sobWVzc2FnZSwgYmxvY2tJbmRleCkge1xuICAgIGNvbnN0IGJsb2NrID0gQnVmZmVyJDEuYWxsb2MoYmxvY2tTaXplKTtcbiAgICBjb25zdCBzdGFydCA9IGJsb2NrSW5kZXggKiBibG9ja1NpemU7XG4gICAgY29uc3QgZW5kID0gc3RhcnQgKyBibG9ja1NpemU7XG4gICAgbWVzc2FnZS5jb3B5KGJsb2NrLCAwLCBzdGFydCwgZW5kKTtcbiAgICByZXR1cm4gYmxvY2s7XG59XG5mdW5jdGlvbiBnZXRQYWRkZWRNZXNzYWdlQmxvY2sobWVzc2FnZSwgYmxvY2tJbmRleCkge1xuICAgIGNvbnN0IGJsb2NrID0gQnVmZmVyJDEuYWxsb2MoYmxvY2tTaXplKTtcbiAgICBjb25zdCBzdGFydCA9IGJsb2NrSW5kZXggKiBibG9ja1NpemU7XG4gICAgY29uc3QgZW5kID0gbWVzc2FnZS5sZW5ndGg7XG4gICAgYmxvY2suZmlsbCgwKTtcbiAgICBtZXNzYWdlLmNvcHkoYmxvY2ssIDAsIHN0YXJ0LCBlbmQpO1xuICAgIGJsb2NrW2VuZCAtIHN0YXJ0XSA9IDB4ODA7XG4gICAgcmV0dXJuIGJsb2NrO1xufVxuZnVuY3Rpb24gZ2VuZXJhdGVTdWJrZXlzKGtleSkge1xuICAgIGNvbnN0IGwgPSBhZXMoa2V5LCB6ZXJvKTtcbiAgICBsZXQgc3Via2V5MSA9IGJpdFNoaWZ0TGVmdChsKTtcbiAgICBpZiAobFswXSAmIDB4ODApIHtcbiAgICAgICAgc3Via2V5MSA9IHhvcihzdWJrZXkxLCByYik7XG4gICAgfVxuICAgIGxldCBzdWJrZXkyID0gYml0U2hpZnRMZWZ0KHN1YmtleTEpO1xuICAgIGlmIChzdWJrZXkxWzBdICYgMHg4MCkge1xuICAgICAgICBzdWJrZXkyID0geG9yKHN1YmtleTIsIHJiKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgc3Via2V5MSwgc3Via2V5MiB9O1xufVxuZnVuY3Rpb24gYWVzQ21hYyhrZXksIG1lc3NhZ2UpIHtcbiAgICBjb25zdCBzdWJrZXlzID0gZ2VuZXJhdGVTdWJrZXlzKGtleSk7XG4gICAgbGV0IGJsb2NrQ291bnQgPSBNYXRoLmNlaWwobWVzc2FnZS5sZW5ndGggLyBibG9ja1NpemUpO1xuICAgIGxldCBsYXN0QmxvY2tDb21wbGV0ZUZsYWc7XG4gICAgbGV0IGxhc3RCbG9jaztcbiAgICBpZiAoYmxvY2tDb3VudCA9PT0gMCkge1xuICAgICAgICBibG9ja0NvdW50ID0gMTtcbiAgICAgICAgbGFzdEJsb2NrQ29tcGxldGVGbGFnID0gZmFsc2U7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBsYXN0QmxvY2tDb21wbGV0ZUZsYWcgPSAobWVzc2FnZS5sZW5ndGggJSBibG9ja1NpemUgPT09IDApO1xuICAgIH1cbiAgICBjb25zdCBsYXN0QmxvY2tJbmRleCA9IGJsb2NrQ291bnQgLSAxO1xuICAgIGlmIChsYXN0QmxvY2tDb21wbGV0ZUZsYWcpIHtcbiAgICAgICAgbGFzdEJsb2NrID0geG9yKGdldE1lc3NhZ2VCbG9jayhtZXNzYWdlLCBsYXN0QmxvY2tJbmRleCksIHN1YmtleXMuc3Via2V5MSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBsYXN0QmxvY2sgPSB4b3IoZ2V0UGFkZGVkTWVzc2FnZUJsb2NrKG1lc3NhZ2UsIGxhc3RCbG9ja0luZGV4KSwgc3Via2V5cy5zdWJrZXkyKTtcbiAgICB9XG4gICAgbGV0IHggPSB6ZXJvO1xuICAgIGxldCB5O1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsYXN0QmxvY2tJbmRleDsgaW5kZXgrKykge1xuICAgICAgICB5ID0geG9yKHgsIGdldE1lc3NhZ2VCbG9jayhtZXNzYWdlLCBpbmRleCkpO1xuICAgICAgICB4ID0gYWVzKGtleSwgeSk7XG4gICAgfVxuICAgIHkgPSB4b3IobGFzdEJsb2NrLCB4KTtcbiAgICByZXR1cm4gYWVzKGtleSwgeSk7XG59XG5jbGFzcyBBZXNDbWFjUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLkFlc0NtYWNQcm92aWRlciB7XG4gICAgYXN5bmMgb25HZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgQWVzQ3J5cHRvLmdlbmVyYXRlS2V5KHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgIGxlbmd0aDogYWxnb3JpdGhtLmxlbmd0aCxcbiAgICAgICAgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgYXN5bmMgb25TaWduKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGFlc0NtYWMoZ2V0Q3J5cHRvS2V5KGtleSkuZGF0YSwgQnVmZmVyJDEuZnJvbShkYXRhKSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShyZXN1bHQpLmJ1ZmZlcjtcbiAgICB9XG4gICAgYXN5bmMgb25WZXJpZnkoYWxnb3JpdGhtLCBrZXksIHNpZ25hdHVyZSwgZGF0YSkge1xuICAgICAgICBjb25zdCBzaWduYXR1cmUyID0gYXdhaXQgdGhpcy5zaWduKGFsZ29yaXRobSwga2V5LCBkYXRhKTtcbiAgICAgICAgcmV0dXJuIEJ1ZmZlciQxLmZyb20oc2lnbmF0dXJlKS5jb21wYXJlKEJ1ZmZlciQxLmZyb20oc2lnbmF0dXJlMikpID09PSAwO1xuICAgIH1cbiAgICBhc3luYyBvbkV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICByZXR1cm4gQWVzQ3J5cHRvLmV4cG9ydEtleShmb3JtYXQsIGdldENyeXB0b0tleShrZXkpKTtcbiAgICB9XG4gICAgYXN5bmMgb25JbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgQWVzQ3J5cHRvLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIHsgbmFtZTogYWxnb3JpdGhtLm5hbWUgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkocmVzKTtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgaWYgKCEoZ2V0Q3J5cHRvS2V5KGtleSkgaW5zdGFuY2VvZiBBZXNDcnlwdG9LZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgYSBBZXNDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIEFlc0N0clByb3ZpZGVyIGV4dGVuZHMgY29yZS5BZXNDdHJQcm92aWRlciB7XG4gICAgYXN5bmMgb25HZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgQWVzQ3J5cHRvLmdlbmVyYXRlS2V5KHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgIGxlbmd0aDogYWxnb3JpdGhtLmxlbmd0aCxcbiAgICAgICAgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgYXN5bmMgb25FbmNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZW5jcnlwdChhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRGVjcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gQWVzQ3J5cHRvLmRlY3J5cHQoYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICByZXR1cm4gQWVzQ3J5cHRvLmV4cG9ydEtleShmb3JtYXQsIGdldENyeXB0b0tleShrZXkpKTtcbiAgICB9XG4gICAgYXN5bmMgb25JbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgQWVzQ3J5cHRvLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIHsgbmFtZTogYWxnb3JpdGhtLm5hbWUgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkocmVzKTtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgaWYgKCEoZ2V0Q3J5cHRvS2V5KGtleSkgaW5zdGFuY2VvZiBBZXNDcnlwdG9LZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgYSBBZXNDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIEFlc0djbVByb3ZpZGVyIGV4dGVuZHMgY29yZS5BZXNHY21Qcm92aWRlciB7XG4gICAgYXN5bmMgb25HZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgQWVzQ3J5cHRvLmdlbmVyYXRlS2V5KHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgIGxlbmd0aDogYWxnb3JpdGhtLmxlbmd0aCxcbiAgICAgICAgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgYXN5bmMgb25FbmNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZW5jcnlwdChhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRGVjcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gQWVzQ3J5cHRvLmRlY3J5cHQoYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICByZXR1cm4gQWVzQ3J5cHRvLmV4cG9ydEtleShmb3JtYXQsIGdldENyeXB0b0tleShrZXkpKTtcbiAgICB9XG4gICAgYXN5bmMgb25JbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgQWVzQ3J5cHRvLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIHsgbmFtZTogYWxnb3JpdGhtLm5hbWUgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkocmVzKTtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgaWYgKCEoZ2V0Q3J5cHRvS2V5KGtleSkgaW5zdGFuY2VvZiBBZXNDcnlwdG9LZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgYSBBZXNDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIEFlc0t3UHJvdmlkZXIgZXh0ZW5kcyBjb3JlLkFlc0t3UHJvdmlkZXIge1xuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IEFlc0NyeXB0by5nZW5lcmF0ZUtleSh7XG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICBsZW5ndGg6IGFsZ29yaXRobS5sZW5ndGgsXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KHJlcyk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBBZXNDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyBuYW1lOiBhbGdvcml0aG0ubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShyZXMpO1xuICAgIH1cbiAgICBhc3luYyBvbkVuY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5lbmNyeXB0KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25EZWNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZGVjcnlwdChhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGlmICghKGdldENyeXB0b0tleShrZXkpIGluc3RhbmNlb2YgQWVzQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleTogSXMgbm90IGEgQWVzQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBBZXNFY2JQcm92aWRlciBleHRlbmRzIGNvcmUuQWVzRWNiUHJvdmlkZXIge1xuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IEFlc0NyeXB0by5nZW5lcmF0ZUtleSh7XG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICBsZW5ndGg6IGFsZ29yaXRobS5sZW5ndGgsXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRW5jcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gQWVzQ3J5cHRvLmVuY3J5cHQoYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkRlY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5kZWNyeXB0KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IEFlc0NyeXB0by5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB7IG5hbWU6IGFsZ29yaXRobS5uYW1lIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KHJlcyk7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGlmICghKGdldENyeXB0b0tleShrZXkpIGluc3RhbmNlb2YgQWVzQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleTogSXMgbm90IGEgQWVzQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBEZXNDcnlwdG9LZXkgZXh0ZW5kcyBTeW1tZXRyaWNLZXkge1xuICAgIGdldCBhbGcoKSB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5hbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiREVTLUNCQ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgREVTLUNCQ2A7XG4gICAgICAgICAgICBjYXNlIFwiREVTLUVERTMtQ0JDXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAzREVTLUNCQ2A7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLkFsZ29yaXRobUVycm9yKFwiVW5zdXBwb3J0ZWQgYWxnb3JpdGhtIG5hbWVcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0IGFsZyh2YWx1ZSkge1xuICAgIH1cbn1cbl9fZGVjb3JhdGUoW1xuICAgIEpzb25Qcm9wKHsgbmFtZTogXCJrXCIsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybENvbnZlcnRlciB9KVxuXSwgRGVzQ3J5cHRvS2V5LnByb3RvdHlwZSwgXCJkYXRhXCIsIHZvaWQgMCk7XG5cbmNsYXNzIERlc0NyeXB0byB7XG4gICAgc3RhdGljIGFzeW5jIGdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBuZXcgRGVzQ3J5cHRvS2V5KCk7XG4gICAgICAgIGtleS5hbGdvcml0aG0gPSBhbGdvcml0aG07XG4gICAgICAgIGtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBrZXkudXNhZ2VzID0ga2V5VXNhZ2VzO1xuICAgICAgICBrZXkuZGF0YSA9IGNyeXB0by5yYW5kb21CeXRlcyhhbGdvcml0aG0ubGVuZ3RoID4+IDMpO1xuICAgICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHN3aXRjaCAoZm9ybWF0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJqd2tcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gSnNvblNlcmlhbGl6ZXIudG9KU09OKGtleSk7XG4gICAgICAgICAgICBjYXNlIFwicmF3XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGtleS5kYXRhKS5idWZmZXI7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiZm9ybWF0OiBNdXN0IGJlICdqd2snIG9yICdyYXcnXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBpbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgbGV0IGtleTtcbiAgICAgICAgc3dpdGNoIChmb3JtYXQudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcImp3a1wiOlxuICAgICAgICAgICAgICAgIGtleSA9IEpzb25QYXJzZXIuZnJvbUpTT04oa2V5RGF0YSwgeyB0YXJnZXRTY2hlbWE6IERlc0NyeXB0b0tleSB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJyYXdcIjpcbiAgICAgICAgICAgICAgICBrZXkgPSBuZXcgRGVzQ3J5cHRvS2V5KCk7XG4gICAgICAgICAgICAgICAga2V5LmRhdGEgPSBCdWZmZXIkMS5mcm9tKGtleURhdGEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImZvcm1hdDogTXVzdCBiZSAnandrJyBvciAncmF3J1wiKTtcbiAgICAgICAgfVxuICAgICAgICBrZXkuYWxnb3JpdGhtID0gYWxnb3JpdGhtO1xuICAgICAgICBrZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAga2V5LnVzYWdlcyA9IGtleVVzYWdlcztcbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGVuY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgc3dpdGNoIChhbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiREVTLUNCQ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY3J5cHREZXNDQkMoYWxnb3JpdGhtLCBrZXksIEJ1ZmZlciQxLmZyb20oZGF0YSkpO1xuICAgICAgICAgICAgY2FzZSBcIkRFUy1FREUzLUNCQ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY3J5cHREZXNFREUzQ0JDKGFsZ29yaXRobSwga2V5LCBCdWZmZXIkMS5mcm9tKGRhdGEpKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJhbGdvcml0aG06IElzIG5vdCByZWNvZ25pemVkXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBkZWNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGlmICghKGtleSBpbnN0YW5jZW9mIERlc0NyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImtleTogSXMgbm90IERlc0NyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKGFsZ29yaXRobS5uYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJERVMtQ0JDXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjcnlwdERlc0NCQyhhbGdvcml0aG0sIGtleSwgQnVmZmVyJDEuZnJvbShkYXRhKSk7XG4gICAgICAgICAgICBjYXNlIFwiREVTLUVERTMtQ0JDXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjcnlwdERlc0VERTNDQkMoYWxnb3JpdGhtLCBrZXksIEJ1ZmZlciQxLmZyb20oZGF0YSkpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImFsZ29yaXRobTogSXMgbm90IHJlY29nbml6ZWRcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGVuY3J5cHREZXNDQkMoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgY2lwaGVyID0gY3J5cHRvLmNyZWF0ZUNpcGhlcml2KGBkZXMtY2JjYCwga2V5LmRhdGEsIG5ldyBVaW50OEFycmF5KGFsZ29yaXRobS5pdikpO1xuICAgICAgICBsZXQgZW5jID0gY2lwaGVyLnVwZGF0ZShkYXRhKTtcbiAgICAgICAgZW5jID0gQnVmZmVyJDEuY29uY2F0KFtlbmMsIGNpcGhlci5maW5hbCgpXSk7XG4gICAgICAgIGNvbnN0IHJlcyA9IG5ldyBVaW50OEFycmF5KGVuYykuYnVmZmVyO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZGVjcnlwdERlc0NCQyhhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBkZWNpcGhlciA9IGNyeXB0by5jcmVhdGVEZWNpcGhlcml2KGBkZXMtY2JjYCwga2V5LmRhdGEsIG5ldyBVaW50OEFycmF5KGFsZ29yaXRobS5pdikpO1xuICAgICAgICBsZXQgZGVjID0gZGVjaXBoZXIudXBkYXRlKGRhdGEpO1xuICAgICAgICBkZWMgPSBCdWZmZXIkMS5jb25jYXQoW2RlYywgZGVjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGVjKS5idWZmZXI7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBlbmNyeXB0RGVzRURFM0NCQyhhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBjaXBoZXIgPSBjcnlwdG8uY3JlYXRlQ2lwaGVyaXYoYGRlcy1lZGUzLWNiY2AsIGtleS5kYXRhLCBCdWZmZXIkMS5mcm9tKGFsZ29yaXRobS5pdikpO1xuICAgICAgICBsZXQgZW5jID0gY2lwaGVyLnVwZGF0ZShkYXRhKTtcbiAgICAgICAgZW5jID0gQnVmZmVyJDEuY29uY2F0KFtlbmMsIGNpcGhlci5maW5hbCgpXSk7XG4gICAgICAgIGNvbnN0IHJlcyA9IG5ldyBVaW50OEFycmF5KGVuYykuYnVmZmVyO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZGVjcnlwdERlc0VERTNDQkMoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgZGVjaXBoZXIgPSBjcnlwdG8uY3JlYXRlRGVjaXBoZXJpdihgZGVzLWVkZTMtY2JjYCwga2V5LmRhdGEsIG5ldyBVaW50OEFycmF5KGFsZ29yaXRobS5pdikpO1xuICAgICAgICBsZXQgZGVjID0gZGVjaXBoZXIudXBkYXRlKGRhdGEpO1xuICAgICAgICBkZWMgPSBCdWZmZXIkMS5jb25jYXQoW2RlYywgZGVjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGVjKS5idWZmZXI7XG4gICAgfVxufVxuXG5jbGFzcyBEZXNDYmNQcm92aWRlciBleHRlbmRzIGNvcmUuRGVzUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLmtleVNpemVCaXRzID0gNjQ7XG4gICAgICAgIHRoaXMuaXZTaXplID0gODtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJERVMtQ0JDXCI7XG4gICAgfVxuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IERlc0NyeXB0by5nZW5lcmF0ZUtleSh7XG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICBsZW5ndGg6IHRoaXMua2V5U2l6ZUJpdHMsXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRW5jcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gRGVzQ3J5cHRvLmVuY3J5cHQoYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkRlY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIERlc0NyeXB0by5kZWNyeXB0KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIERlc0NyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IERlc0NyeXB0by5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB7IG5hbWU6IHRoaXMubmFtZSwgbGVuZ3RoOiB0aGlzLmtleVNpemVCaXRzIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICBpZiAoa2V5LmRhdGEubGVuZ3RoICE9PSAodGhpcy5rZXlTaXplQml0cyA+PiAzKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJrZXlEYXRhOiBXcm9uZyBrZXkgc2l6ZVwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGlmICghKGdldENyeXB0b0tleShrZXkpIGluc3RhbmNlb2YgRGVzQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleTogSXMgbm90IGEgRGVzQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBEZXNFZGUzQ2JjUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLkRlc1Byb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5rZXlTaXplQml0cyA9IDE5MjtcbiAgICAgICAgdGhpcy5pdlNpemUgPSA4O1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkRFUy1FREUzLUNCQ1wiO1xuICAgIH1cbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBEZXNDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgbGVuZ3RoOiB0aGlzLmtleVNpemVCaXRzLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBhc3luYyBvbkVuY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIERlc0NyeXB0by5lbmNyeXB0KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25EZWNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBEZXNDcnlwdG8uZGVjcnlwdChhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBEZXNDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBEZXNDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyBuYW1lOiB0aGlzLm5hbWUsIGxlbmd0aDogdGhpcy5rZXlTaXplQml0cyB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgaWYgKGtleS5kYXRhLmxlbmd0aCAhPT0gKHRoaXMua2V5U2l6ZUJpdHMgPj4gMykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwia2V5RGF0YTogV3Jvbmcga2V5IHNpemVcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBpZiAoIShnZXRDcnlwdG9LZXkoa2V5KSBpbnN0YW5jZW9mIERlc0NyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBhIERlc0NyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gZ2V0SndrQWxnb3JpdGhtKGFsZ29yaXRobSkge1xuICAgIHN3aXRjaCAoYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICBjYXNlIFwiUlNBLU9BRVBcIjoge1xuICAgICAgICAgICAgY29uc3QgbWRTaXplID0gLyhcXGQrKSQvLmV4ZWMoYWxnb3JpdGhtLmhhc2gubmFtZSlbMV07XG4gICAgICAgICAgICByZXR1cm4gYFJTQS1PQUVQJHttZFNpemUgIT09IFwiMVwiID8gYC0ke21kU2l6ZX1gIDogXCJcIn1gO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJSU0FTU0EtUEtDUzEtVjFfNVwiOlxuICAgICAgICAgICAgcmV0dXJuIGBSUyR7LyhcXGQrKSQvLmV4ZWMoYWxnb3JpdGhtLmhhc2gubmFtZSlbMV19YDtcbiAgICAgICAgY2FzZSBcIlJTQS1QU1NcIjpcbiAgICAgICAgICAgIHJldHVybiBgUFMkey8oXFxkKykkLy5leGVjKGFsZ29yaXRobS5oYXNoLm5hbWUpWzFdfWA7XG4gICAgICAgIGNhc2UgXCJSU0EtUEtDUzFcIjpcbiAgICAgICAgICAgIHJldHVybiBgUlMxYDtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiYWxnb3JpdGhtOiBJcyBub3QgcmVjb2duaXplZFwiKTtcbiAgICB9XG59XG5cbmNsYXNzIFJzYVByaXZhdGVLZXkgZXh0ZW5kcyBBc3ltbWV0cmljS2V5IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy50eXBlID0gXCJwcml2YXRlXCI7XG4gICAgfVxuICAgIGdldEtleSgpIHtcbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IEFzblBhcnNlci5wYXJzZSh0aGlzLmRhdGEsIGNvcmUuYXNuMS5Qcml2YXRlS2V5SW5mbyk7XG4gICAgICAgIHJldHVybiBBc25QYXJzZXIucGFyc2Uoa2V5SW5mby5wcml2YXRlS2V5LCBjb3JlLmFzbjEuUnNhUHJpdmF0ZUtleSk7XG4gICAgfVxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRLZXkoKTtcbiAgICAgICAgY29uc3QganNvbiA9IHtcbiAgICAgICAgICAgIGt0eTogXCJSU0FcIixcbiAgICAgICAgICAgIGFsZzogZ2V0SndrQWxnb3JpdGhtKHRoaXMuYWxnb3JpdGhtKSxcbiAgICAgICAgICAgIGtleV9vcHM6IHRoaXMudXNhZ2VzLFxuICAgICAgICAgICAgZXh0OiB0aGlzLmV4dHJhY3RhYmxlLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihqc29uLCBKc29uU2VyaWFsaXplci50b0pTT04oa2V5KSk7XG4gICAgfVxuICAgIGZyb21KU09OKGpzb24pIHtcbiAgICAgICAgY29uc3Qga2V5ID0gSnNvblBhcnNlci5mcm9tSlNPTihqc29uLCB7IHRhcmdldFNjaGVtYTogY29yZS5hc24xLlJzYVByaXZhdGVLZXkgfSk7XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBuZXcgY29yZS5hc24xLlByaXZhdGVLZXlJbmZvKCk7XG4gICAgICAgIGtleUluZm8ucHJpdmF0ZUtleUFsZ29yaXRobS5hbGdvcml0aG0gPSBcIjEuMi44NDAuMTEzNTQ5LjEuMS4xXCI7XG4gICAgICAgIGtleUluZm8ucHJpdmF0ZUtleUFsZ29yaXRobS5wYXJhbWV0ZXJzID0gbnVsbDtcbiAgICAgICAga2V5SW5mby5wcml2YXRlS2V5ID0gQXNuU2VyaWFsaXplci5zZXJpYWxpemUoa2V5KTtcbiAgICAgICAgdGhpcy5kYXRhID0gQnVmZmVyJDEuZnJvbShBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShrZXlJbmZvKSk7XG4gICAgfVxufVxuXG5jbGFzcyBSc2FQdWJsaWNLZXkgZXh0ZW5kcyBBc3ltbWV0cmljS2V5IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy50eXBlID0gXCJwdWJsaWNcIjtcbiAgICB9XG4gICAgZ2V0S2V5KCkge1xuICAgICAgICBjb25zdCBrZXlJbmZvID0gQXNuUGFyc2VyLnBhcnNlKHRoaXMuZGF0YSwgY29yZS5hc24xLlB1YmxpY0tleUluZm8pO1xuICAgICAgICByZXR1cm4gQXNuUGFyc2VyLnBhcnNlKGtleUluZm8ucHVibGljS2V5LCBjb3JlLmFzbjEuUnNhUHVibGljS2V5KTtcbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmdldEtleSgpO1xuICAgICAgICBjb25zdCBqc29uID0ge1xuICAgICAgICAgICAga3R5OiBcIlJTQVwiLFxuICAgICAgICAgICAgYWxnOiBnZXRKd2tBbGdvcml0aG0odGhpcy5hbGdvcml0aG0pLFxuICAgICAgICAgICAga2V5X29wczogdGhpcy51c2FnZXMsXG4gICAgICAgICAgICBleHQ6IHRoaXMuZXh0cmFjdGFibGUsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGpzb24sIEpzb25TZXJpYWxpemVyLnRvSlNPTihrZXkpKTtcbiAgICB9XG4gICAgZnJvbUpTT04oanNvbikge1xuICAgICAgICBjb25zdCBrZXkgPSBKc29uUGFyc2VyLmZyb21KU09OKGpzb24sIHsgdGFyZ2V0U2NoZW1hOiBjb3JlLmFzbjEuUnNhUHVibGljS2V5IH0pO1xuICAgICAgICBjb25zdCBrZXlJbmZvID0gbmV3IGNvcmUuYXNuMS5QdWJsaWNLZXlJbmZvKCk7XG4gICAgICAgIGtleUluZm8ucHVibGljS2V5QWxnb3JpdGhtLmFsZ29yaXRobSA9IFwiMS4yLjg0MC4xMTM1NDkuMS4xLjFcIjtcbiAgICAgICAga2V5SW5mby5wdWJsaWNLZXlBbGdvcml0aG0ucGFyYW1ldGVycyA9IG51bGw7XG4gICAgICAgIGtleUluZm8ucHVibGljS2V5ID0gQXNuU2VyaWFsaXplci5zZXJpYWxpemUoa2V5KTtcbiAgICAgICAgdGhpcy5kYXRhID0gQnVmZmVyJDEuZnJvbShBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShrZXlJbmZvKSk7XG4gICAgfVxufVxuXG5jbGFzcyBSc2FDcnlwdG8ge1xuICAgIHN0YXRpYyBhc3luYyBnZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3QgcHJpdmF0ZUtleSA9IG5ldyBSc2FQcml2YXRlS2V5KCk7XG4gICAgICAgIHByaXZhdGVLZXkuYWxnb3JpdGhtID0gYWxnb3JpdGhtO1xuICAgICAgICBwcml2YXRlS2V5LmV4dHJhY3RhYmxlID0gZXh0cmFjdGFibGU7XG4gICAgICAgIHByaXZhdGVLZXkudXNhZ2VzID0ga2V5VXNhZ2VzLmZpbHRlcigodXNhZ2UpID0+IHRoaXMucHJpdmF0ZUtleVVzYWdlcy5pbmRleE9mKHVzYWdlKSAhPT0gLTEpO1xuICAgICAgICBjb25zdCBwdWJsaWNLZXkgPSBuZXcgUnNhUHVibGljS2V5KCk7XG4gICAgICAgIHB1YmxpY0tleS5hbGdvcml0aG0gPSBhbGdvcml0aG07XG4gICAgICAgIHB1YmxpY0tleS5leHRyYWN0YWJsZSA9IHRydWU7XG4gICAgICAgIHB1YmxpY0tleS51c2FnZXMgPSBrZXlVc2FnZXMuZmlsdGVyKCh1c2FnZSkgPT4gdGhpcy5wdWJsaWNLZXlVc2FnZXMuaW5kZXhPZih1c2FnZSkgIT09IC0xKTtcbiAgICAgICAgY29uc3QgcHVibGljRXhwb25lbnQgPSBCdWZmZXIkMS5jb25jYXQoW1xuICAgICAgICAgICAgQnVmZmVyJDEuYWxsb2MoNCAtIGFsZ29yaXRobS5wdWJsaWNFeHBvbmVudC5ieXRlTGVuZ3RoLCAwKSxcbiAgICAgICAgICAgIEJ1ZmZlciQxLmZyb20oYWxnb3JpdGhtLnB1YmxpY0V4cG9uZW50KSxcbiAgICAgICAgXSkucmVhZEludDMyQkUoMCk7XG4gICAgICAgIGNvbnN0IGtleXMgPSBjcnlwdG8uZ2VuZXJhdGVLZXlQYWlyU3luYyhcInJzYVwiLCB7XG4gICAgICAgICAgICBtb2R1bHVzTGVuZ3RoOiBhbGdvcml0aG0ubW9kdWx1c0xlbmd0aCxcbiAgICAgICAgICAgIHB1YmxpY0V4cG9uZW50LFxuICAgICAgICAgICAgcHVibGljS2V5RW5jb2Rpbmc6IHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IFwiZGVyXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJzcGtpXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJpdmF0ZUtleUVuY29kaW5nOiB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiBcImRlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwicGtjczhcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBwcml2YXRlS2V5LmRhdGEgPSBrZXlzLnByaXZhdGVLZXk7XG4gICAgICAgIHB1YmxpY0tleS5kYXRhID0ga2V5cy5wdWJsaWNLZXk7XG4gICAgICAgIGNvbnN0IHJlcyA9IHtcbiAgICAgICAgICAgIHByaXZhdGVLZXksXG4gICAgICAgICAgICBwdWJsaWNLZXksXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBleHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgc3dpdGNoIChmb3JtYXQudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcImp3a1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBKc29uU2VyaWFsaXplci50b0pTT04oa2V5KTtcbiAgICAgICAgICAgIGNhc2UgXCJwa2NzOFwiOlxuICAgICAgICAgICAgY2FzZSBcInNwa2lcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoa2V5LmRhdGEpLmJ1ZmZlcjtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJmb3JtYXQ6IE11c3QgYmUgJ2p3aycsICdwa2NzOCcgb3IgJ3Nwa2knXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBpbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgc3dpdGNoIChmb3JtYXQudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcImp3a1wiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgandrID0ga2V5RGF0YTtcbiAgICAgICAgICAgICAgICBpZiAoandrLmQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXNuS2V5ID0gSnNvblBhcnNlci5mcm9tSlNPTihrZXlEYXRhLCB7IHRhcmdldFNjaGVtYTogY29yZS5hc24xLlJzYVByaXZhdGVLZXkgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmltcG9ydFByaXZhdGVLZXkoYXNuS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXNuS2V5ID0gSnNvblBhcnNlci5mcm9tSlNPTihrZXlEYXRhLCB7IHRhcmdldFNjaGVtYTogY29yZS5hc24xLlJzYVB1YmxpY0tleSB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0UHVibGljS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwic3BraVwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5SW5mbyA9IEFzblBhcnNlci5wYXJzZShuZXcgVWludDhBcnJheShrZXlEYXRhKSwgY29yZS5hc24xLlB1YmxpY0tleUluZm8pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFzbktleSA9IEFzblBhcnNlci5wYXJzZShrZXlJbmZvLnB1YmxpY0tleSwgY29yZS5hc24xLlJzYVB1YmxpY0tleSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0UHVibGljS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJwa2NzOFwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5SW5mbyA9IEFzblBhcnNlci5wYXJzZShuZXcgVWludDhBcnJheShrZXlEYXRhKSwgY29yZS5hc24xLlByaXZhdGVLZXlJbmZvKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhc25LZXkgPSBBc25QYXJzZXIucGFyc2Uoa2V5SW5mby5wcml2YXRlS2V5LCBjb3JlLmFzbjEuUnNhUHJpdmF0ZUtleSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0UHJpdmF0ZUtleShhc25LZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiZm9ybWF0OiBNdXN0IGJlICdqd2snLCAncGtjczgnIG9yICdzcGtpJ1wiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgc2lnbihhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBzd2l0Y2ggKGFsZ29yaXRobS5uYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJSU0EtUFNTXCI6XG4gICAgICAgICAgICBjYXNlIFwiUlNBU1NBLVBLQ1MxLVYxXzVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zaWduUnNhKGFsZ29yaXRobSwga2V5LCBkYXRhKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJhbGdvcml0aG06IElzIG5vdCByZWNvZ25pemVkXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyB2ZXJpZnkoYWxnb3JpdGhtLCBrZXksIHNpZ25hdHVyZSwgZGF0YSkge1xuICAgICAgICBzd2l0Y2ggKGFsZ29yaXRobS5uYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJSU0EtUFNTXCI6XG4gICAgICAgICAgICBjYXNlIFwiUlNBU1NBLVBLQ1MxLVYxXzVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52ZXJpZnlTU0EoYWxnb3JpdGhtLCBrZXksIGRhdGEsIHNpZ25hdHVyZSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiYWxnb3JpdGhtOiBJcyBub3QgcmVjb2duaXplZFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZW5jcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBzd2l0Y2ggKGFsZ29yaXRobS5uYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJSU0EtT0FFUFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY3J5cHRPQUVQKGFsZ29yaXRobSwga2V5LCBkYXRhKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJhbGdvcml0aG06IElzIG5vdCByZWNvZ25pemVkXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBkZWNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcIlJTQS1PQUVQXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjcnlwdE9BRVAoYWxnb3JpdGhtLCBrZXksIGRhdGEpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImFsZ29yaXRobTogSXMgbm90IHJlY29nbml6ZWRcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGltcG9ydFByaXZhdGVLZXkoYXNuS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IG5ldyBjb3JlLmFzbjEuUHJpdmF0ZUtleUluZm8oKTtcbiAgICAgICAga2V5SW5mby5wcml2YXRlS2V5QWxnb3JpdGhtLmFsZ29yaXRobSA9IFwiMS4yLjg0MC4xMTM1NDkuMS4xLjFcIjtcbiAgICAgICAga2V5SW5mby5wcml2YXRlS2V5QWxnb3JpdGhtLnBhcmFtZXRlcnMgPSBudWxsO1xuICAgICAgICBrZXlJbmZvLnByaXZhdGVLZXkgPSBBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShhc25LZXkpO1xuICAgICAgICBjb25zdCBrZXkgPSBuZXcgUnNhUHJpdmF0ZUtleSgpO1xuICAgICAgICBrZXkuZGF0YSA9IEJ1ZmZlciQxLmZyb20oQXNuU2VyaWFsaXplci5zZXJpYWxpemUoa2V5SW5mbykpO1xuICAgICAgICBrZXkuYWxnb3JpdGhtID0gT2JqZWN0LmFzc2lnbih7fSwgYWxnb3JpdGhtKTtcbiAgICAgICAga2V5LmFsZ29yaXRobS5wdWJsaWNFeHBvbmVudCA9IG5ldyBVaW50OEFycmF5KGFzbktleS5wdWJsaWNFeHBvbmVudCk7XG4gICAgICAgIGtleS5hbGdvcml0aG0ubW9kdWx1c0xlbmd0aCA9IGFzbktleS5tb2R1bHVzLmJ5dGVMZW5ndGggPDwgMztcbiAgICAgICAga2V5LmV4dHJhY3RhYmxlID0gZXh0cmFjdGFibGU7XG4gICAgICAgIGtleS51c2FnZXMgPSBrZXlVc2FnZXM7XG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICAgIHN0YXRpYyBpbXBvcnRQdWJsaWNLZXkoYXNuS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IG5ldyBjb3JlLmFzbjEuUHVibGljS2V5SW5mbygpO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleUFsZ29yaXRobS5hbGdvcml0aG0gPSBcIjEuMi44NDAuMTEzNTQ5LjEuMS4xXCI7XG4gICAgICAgIGtleUluZm8ucHVibGljS2V5QWxnb3JpdGhtLnBhcmFtZXRlcnMgPSBudWxsO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleSA9IEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGFzbktleSk7XG4gICAgICAgIGNvbnN0IGtleSA9IG5ldyBSc2FQdWJsaWNLZXkoKTtcbiAgICAgICAga2V5LmRhdGEgPSBCdWZmZXIkMS5mcm9tKEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleUluZm8pKTtcbiAgICAgICAga2V5LmFsZ29yaXRobSA9IE9iamVjdC5hc3NpZ24oe30sIGFsZ29yaXRobSk7XG4gICAgICAgIGtleS5hbGdvcml0aG0ucHVibGljRXhwb25lbnQgPSBuZXcgVWludDhBcnJheShhc25LZXkucHVibGljRXhwb25lbnQpO1xuICAgICAgICBrZXkuYWxnb3JpdGhtLm1vZHVsdXNMZW5ndGggPSBhc25LZXkubW9kdWx1cy5ieXRlTGVuZ3RoIDw8IDM7XG4gICAgICAgIGtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBrZXkudXNhZ2VzID0ga2V5VXNhZ2VzO1xuICAgICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0Q3J5cHRvQWxnb3JpdGhtKGFsZykge1xuICAgICAgICBzd2l0Y2ggKGFsZy5oYXNoLm5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcIlNIQS0xXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiUlNBLVNIQTFcIjtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtMjU2XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiUlNBLVNIQTI1NlwiO1xuICAgICAgICAgICAgY2FzZSBcIlNIQS0zODRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJSU0EtU0hBMzg0XCI7XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTUxMlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIlJTQS1TSEE1MTJcIjtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEzLTI1NlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIlJTQS1TSEEzLTI1NlwiO1xuICAgICAgICAgICAgY2FzZSBcIlNIQTMtMzg0XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiUlNBLVNIQTMtMzg0XCI7XG4gICAgICAgICAgICBjYXNlIFwiU0hBMy01MTJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJSU0EtU0hBMy01MTJcIjtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJhbGdvcml0aG0uaGFzaDogSXMgbm90IHJlY29nbml6ZWRcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIHNpZ25Sc2EoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgY3J5cHRvQWxnID0gdGhpcy5nZXRDcnlwdG9BbGdvcml0aG0oa2V5LmFsZ29yaXRobSk7XG4gICAgICAgIGNvbnN0IHNpZ25lciA9IGNyeXB0by5jcmVhdGVTaWduKGNyeXB0b0FsZyk7XG4gICAgICAgIHNpZ25lci51cGRhdGUoQnVmZmVyJDEuZnJvbShkYXRhKSk7XG4gICAgICAgIGlmICgha2V5LnBlbSkge1xuICAgICAgICAgICAga2V5LnBlbSA9IGAtLS0tLUJFR0lOIFBSSVZBVEUgS0VZLS0tLS1cXG4ke2tleS5kYXRhLnRvU3RyaW5nKFwiYmFzZTY0XCIpfVxcbi0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS1gO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBrZXk6IGtleS5wZW0sXG4gICAgICAgIH07XG4gICAgICAgIGlmIChhbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpID09PSBcIlJTQS1QU1NcIikge1xuICAgICAgICAgICAgb3B0aW9ucy5wYWRkaW5nID0gY3J5cHRvLmNvbnN0YW50cy5SU0FfUEtDUzFfUFNTX1BBRERJTkc7XG4gICAgICAgICAgICBvcHRpb25zLnNhbHRMZW5ndGggPSBhbGdvcml0aG0uc2FsdExlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzaWduYXR1cmUgPSBzaWduZXIuc2lnbihvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHNpZ25hdHVyZSkuYnVmZmVyO1xuICAgIH1cbiAgICBzdGF0aWMgdmVyaWZ5U1NBKGFsZ29yaXRobSwga2V5LCBkYXRhLCBzaWduYXR1cmUpIHtcbiAgICAgICAgY29uc3QgY3J5cHRvQWxnID0gdGhpcy5nZXRDcnlwdG9BbGdvcml0aG0oa2V5LmFsZ29yaXRobSk7XG4gICAgICAgIGNvbnN0IHNpZ25lciA9IGNyeXB0by5jcmVhdGVWZXJpZnkoY3J5cHRvQWxnKTtcbiAgICAgICAgc2lnbmVyLnVwZGF0ZShCdWZmZXIkMS5mcm9tKGRhdGEpKTtcbiAgICAgICAgaWYgKCFrZXkucGVtKSB7XG4gICAgICAgICAgICBrZXkucGVtID0gYC0tLS0tQkVHSU4gUFVCTElDIEtFWS0tLS0tXFxuJHtrZXkuZGF0YS50b1N0cmluZyhcImJhc2U2NFwiKX1cXG4tLS0tLUVORCBQVUJMSUMgS0VZLS0tLS1gO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBrZXk6IGtleS5wZW0sXG4gICAgICAgIH07XG4gICAgICAgIGlmIChhbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpID09PSBcIlJTQS1QU1NcIikge1xuICAgICAgICAgICAgb3B0aW9ucy5wYWRkaW5nID0gY3J5cHRvLmNvbnN0YW50cy5SU0FfUEtDUzFfUFNTX1BBRERJTkc7XG4gICAgICAgICAgICBvcHRpb25zLnNhbHRMZW5ndGggPSBhbGdvcml0aG0uc2FsdExlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvayA9IHNpZ25lci52ZXJpZnkob3B0aW9ucywgc2lnbmF0dXJlKTtcbiAgICAgICAgcmV0dXJuIG9rO1xuICAgIH1cbiAgICBzdGF0aWMgZW5jcnlwdE9BRVAoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGtleTogYC0tLS0tQkVHSU4gUFVCTElDIEtFWS0tLS0tXFxuJHtrZXkuZGF0YS50b1N0cmluZyhcImJhc2U2NFwiKX1cXG4tLS0tLUVORCBQVUJMSUMgS0VZLS0tLS1gLFxuICAgICAgICAgICAgcGFkZGluZzogY3J5cHRvLmNvbnN0YW50cy5SU0FfUEtDUzFfT0FFUF9QQURESU5HLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoYWxnb3JpdGhtLmxhYmVsKSA7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShjcnlwdG8ucHVibGljRW5jcnlwdChvcHRpb25zLCBkYXRhKSkuYnVmZmVyO1xuICAgIH1cbiAgICBzdGF0aWMgZGVjcnlwdE9BRVAoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGtleTogYC0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLVxcbiR7a2V5LmRhdGEudG9TdHJpbmcoXCJiYXNlNjRcIil9XFxuLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLWAsXG4gICAgICAgICAgICBwYWRkaW5nOiBjcnlwdG8uY29uc3RhbnRzLlJTQV9QS0NTMV9PQUVQX1BBRERJTkcsXG4gICAgICAgIH07XG4gICAgICAgIGlmIChhbGdvcml0aG0ubGFiZWwpIDtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGNyeXB0by5wcml2YXRlRGVjcnlwdChvcHRpb25zLCBkYXRhKSkuYnVmZmVyO1xuICAgIH1cbn1cblJzYUNyeXB0by5wdWJsaWNLZXlVc2FnZXMgPSBbXCJ2ZXJpZnlcIiwgXCJlbmNyeXB0XCIsIFwid3JhcEtleVwiXTtcblJzYUNyeXB0by5wcml2YXRlS2V5VXNhZ2VzID0gW1wic2lnblwiLCBcImRlY3J5cHRcIiwgXCJ1bndyYXBLZXlcIl07XG5cbmNsYXNzIFJzYVNzYVByb3ZpZGVyIGV4dGVuZHMgY29yZS5Sc2FTc2FQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuaGFzaEFsZ29yaXRobXMgPSBbXG4gICAgICAgICAgICBcIlNIQS0xXCIsIFwiU0hBLTI1NlwiLCBcIlNIQS0zODRcIiwgXCJTSEEtNTEyXCIsXG4gICAgICAgICAgICBcInNoYWtlMTI4XCIsIFwic2hha2UyNTZcIixcbiAgICAgICAgICAgIFwiU0hBMy0yNTZcIiwgXCJTSEEzLTM4NFwiLCBcIlNIQTMtNTEyXCJcbiAgICAgICAgXTtcbiAgICB9XG4gICAgYXN5bmMgb25HZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5cyA9IGF3YWl0IFJzYUNyeXB0by5nZW5lcmF0ZUtleSh7XG4gICAgICAgICAgICAuLi5hbGdvcml0aG0sXG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogc2V0Q3J5cHRvS2V5KGtleXMucHJpdmF0ZUtleSksXG4gICAgICAgICAgICBwdWJsaWNLZXk6IHNldENyeXB0b0tleShrZXlzLnB1YmxpY0tleSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIG9uU2lnbihhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gUnNhQ3J5cHRvLnNpZ24oYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvblZlcmlmeShhbGdvcml0aG0sIGtleSwgc2lnbmF0dXJlLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBSc2FDcnlwdG8udmVyaWZ5KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KHNpZ25hdHVyZSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIFJzYUNyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IFJzYUNyeXB0by5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB7IC4uLmFsZ29yaXRobSwgbmFtZTogdGhpcy5uYW1lIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGNvbnN0IGludGVybmFsS2V5ID0gZ2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGlmICghKGludGVybmFsS2V5IGluc3RhbmNlb2YgUnNhUHJpdmF0ZUtleSB8fCBpbnRlcm5hbEtleSBpbnN0YW5jZW9mIFJzYVB1YmxpY0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBSU0EgQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBSc2FQc3NQcm92aWRlciBleHRlbmRzIGNvcmUuUnNhUHNzUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLmhhc2hBbGdvcml0aG1zID0gW1xuICAgICAgICAgICAgXCJTSEEtMVwiLCBcIlNIQS0yNTZcIiwgXCJTSEEtMzg0XCIsIFwiU0hBLTUxMlwiLFxuICAgICAgICAgICAgXCJzaGFrZTEyOFwiLCBcInNoYWtlMjU2XCIsXG4gICAgICAgICAgICBcIlNIQTMtMjU2XCIsIFwiU0hBMy0zODRcIiwgXCJTSEEzLTUxMlwiXG4gICAgICAgIF07XG4gICAgfVxuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBhd2FpdCBSc2FDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgLi4uYWxnb3JpdGhtLFxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IHNldENyeXB0b0tleShrZXlzLnByaXZhdGVLZXkpLFxuICAgICAgICAgICAgcHVibGljS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wdWJsaWNLZXkpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBhc3luYyBvblNpZ24oYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIFJzYUNyeXB0by5zaWduKGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25WZXJpZnkoYWxnb3JpdGhtLCBrZXksIHNpZ25hdHVyZSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gUnNhQ3J5cHRvLnZlcmlmeShhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShzaWduYXR1cmUpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBSc2FDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBSc2FDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyAuLi5hbGdvcml0aG0sIG5hbWU6IHRoaXMubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBjb25zdCBpbnRlcm5hbEtleSA9IGdldENyeXB0b0tleShrZXkpO1xuICAgICAgICBpZiAoIShpbnRlcm5hbEtleSBpbnN0YW5jZW9mIFJzYVByaXZhdGVLZXkgfHwgaW50ZXJuYWxLZXkgaW5zdGFuY2VvZiBSc2FQdWJsaWNLZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgUlNBIENyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgU2hhQ3J5cHRvIHtcbiAgICBzdGF0aWMgc2l6ZShhbGdvcml0aG0pIHtcbiAgICAgICAgc3dpdGNoIChhbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTFcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gMTYwO1xuICAgICAgICAgICAgY2FzZSBcIlNIQS0yNTZcIjpcbiAgICAgICAgICAgIGNhc2UgXCJTSEEzLTI1NlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiAyNTY7XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTM4NFwiOlxuICAgICAgICAgICAgY2FzZSBcIlNIQTMtMzg0XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIDM4NDtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtNTEyXCI6XG4gICAgICAgICAgICBjYXNlIFwiU0hBMy01MTJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gNTEyO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnJlY29nbml6ZWQgbmFtZVwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgZ2V0QWxnb3JpdGhtTmFtZShhbGdvcml0aG0pIHtcbiAgICAgICAgc3dpdGNoIChhbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTFcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJzaGExXCI7XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTI1NlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcInNoYTI1NlwiO1xuICAgICAgICAgICAgY2FzZSBcIlNIQS0zODRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJzaGEzODRcIjtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtNTEyXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwic2hhNTEyXCI7XG4gICAgICAgICAgICBjYXNlIFwiU0hBMy0yNTZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJzaGEzLTI1NlwiO1xuICAgICAgICAgICAgY2FzZSBcIlNIQTMtMzg0XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwic2hhMy0zODRcIjtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEzLTUxMlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcInNoYTMtNTEyXCI7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVucmVjb2duaXplZCBuYW1lXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBkaWdlc3QoYWxnb3JpdGhtLCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGhhc2hBbGcgPSB0aGlzLmdldEFsZ29yaXRobU5hbWUoYWxnb3JpdGhtKTtcbiAgICAgICAgY29uc3QgaGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKGhhc2hBbGcpXG4gICAgICAgICAgICAudXBkYXRlKEJ1ZmZlciQxLmZyb20oZGF0YSkpLmRpZ2VzdCgpO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoaGFzaCkuYnVmZmVyO1xuICAgIH1cbn1cblxuY2xhc3MgUnNhT2FlcFByb3ZpZGVyIGV4dGVuZHMgY29yZS5Sc2FPYWVwUHJvdmlkZXIge1xuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBhd2FpdCBSc2FDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgLi4uYWxnb3JpdGhtLFxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IHNldENyeXB0b0tleShrZXlzLnByaXZhdGVLZXkpLFxuICAgICAgICAgICAgcHVibGljS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wdWJsaWNLZXkpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBhc3luYyBvbkVuY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxLZXkgPSBnZXRDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgY29uc3QgZGF0YVZpZXcgPSBuZXcgVWludDhBcnJheShkYXRhKTtcbiAgICAgICAgY29uc3Qga2V5U2l6ZSA9IE1hdGguY2VpbChpbnRlcm5hbEtleS5hbGdvcml0aG0ubW9kdWx1c0xlbmd0aCA+PiAzKTtcbiAgICAgICAgY29uc3QgaGFzaFNpemUgPSBTaGFDcnlwdG8uc2l6ZShpbnRlcm5hbEtleS5hbGdvcml0aG0uaGFzaCkgPj4gMztcbiAgICAgICAgY29uc3QgZGF0YUxlbmd0aCA9IGRhdGFWaWV3LmJ5dGVMZW5ndGg7XG4gICAgICAgIGNvbnN0IHBzTGVuZ3RoID0ga2V5U2l6ZSAtIGRhdGFMZW5ndGggLSAyICogaGFzaFNpemUgLSAyO1xuICAgICAgICBpZiAoZGF0YUxlbmd0aCA+IGtleVNpemUgLSAyICogaGFzaFNpemUgLSAyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEYXRhIHRvbyBsYXJnZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtZXNzYWdlID0gbmV3IFVpbnQ4QXJyYXkoa2V5U2l6ZSk7XG4gICAgICAgIGNvbnN0IHNlZWQgPSBtZXNzYWdlLnN1YmFycmF5KDEsIGhhc2hTaXplICsgMSk7XG4gICAgICAgIGNvbnN0IGRhdGFCbG9jayA9IG1lc3NhZ2Uuc3ViYXJyYXkoaGFzaFNpemUgKyAxKTtcbiAgICAgICAgZGF0YUJsb2NrLnNldChkYXRhVmlldywgaGFzaFNpemUgKyBwc0xlbmd0aCArIDEpO1xuICAgICAgICBjb25zdCBsYWJlbEhhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaChpbnRlcm5hbEtleS5hbGdvcml0aG0uaGFzaC5uYW1lLnJlcGxhY2UoXCItXCIsIFwiXCIpKVxuICAgICAgICAgICAgLnVwZGF0ZShjb3JlLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoYWxnb3JpdGhtLmxhYmVsIHx8IG5ldyBVaW50OEFycmF5KDApKSlcbiAgICAgICAgICAgIC5kaWdlc3QoKTtcbiAgICAgICAgZGF0YUJsb2NrLnNldChsYWJlbEhhc2gsIDApO1xuICAgICAgICBkYXRhQmxvY2tbaGFzaFNpemUgKyBwc0xlbmd0aF0gPSAxO1xuICAgICAgICBjcnlwdG8ucmFuZG9tRmlsbFN5bmMoc2VlZCk7XG4gICAgICAgIGNvbnN0IGRhdGFCbG9ja01hc2sgPSB0aGlzLm1nZjEoaW50ZXJuYWxLZXkuYWxnb3JpdGhtLmhhc2gsIHNlZWQsIGRhdGFCbG9jay5sZW5ndGgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGFCbG9jay5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZGF0YUJsb2NrW2ldIF49IGRhdGFCbG9ja01hc2tbaV07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VlZE1hc2sgPSB0aGlzLm1nZjEoaW50ZXJuYWxLZXkuYWxnb3JpdGhtLmhhc2gsIGRhdGFCbG9jaywgc2VlZC5sZW5ndGgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHNlZWRbaV0gXj0gc2VlZE1hc2tbaV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpbnRlcm5hbEtleS5wZW0pIHtcbiAgICAgICAgICAgIGludGVybmFsS2V5LnBlbSA9IGAtLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLVxcbiR7aW50ZXJuYWxLZXkuZGF0YS50b1N0cmluZyhcImJhc2U2NFwiKX1cXG4tLS0tLUVORCBQVUJMSUMgS0VZLS0tLS1gO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBrY3MwID0gY3J5cHRvLnB1YmxpY0VuY3J5cHQoe1xuICAgICAgICAgICAga2V5OiBpbnRlcm5hbEtleS5wZW0sXG4gICAgICAgICAgICBwYWRkaW5nOiBjcnlwdG8uY29uc3RhbnRzLlJTQV9OT19QQURESU5HLFxuICAgICAgICB9LCBCdWZmZXIkMS5mcm9tKG1lc3NhZ2UpKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHBrY3MwKS5idWZmZXI7XG4gICAgfVxuICAgIGFzeW5jIG9uRGVjcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBpbnRlcm5hbEtleSA9IGdldENyeXB0b0tleShrZXkpO1xuICAgICAgICBjb25zdCBrZXlTaXplID0gTWF0aC5jZWlsKGludGVybmFsS2V5LmFsZ29yaXRobS5tb2R1bHVzTGVuZ3RoID4+IDMpO1xuICAgICAgICBjb25zdCBoYXNoU2l6ZSA9IFNoYUNyeXB0by5zaXplKGludGVybmFsS2V5LmFsZ29yaXRobS5oYXNoKSA+PiAzO1xuICAgICAgICBjb25zdCBkYXRhTGVuZ3RoID0gZGF0YS5ieXRlTGVuZ3RoO1xuICAgICAgICBpZiAoZGF0YUxlbmd0aCAhPT0ga2V5U2l6ZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmFkIGRhdGFcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpbnRlcm5hbEtleS5wZW0pIHtcbiAgICAgICAgICAgIGludGVybmFsS2V5LnBlbSA9IGAtLS0tLUJFR0lOIFBSSVZBVEUgS0VZLS0tLS1cXG4ke2ludGVybmFsS2V5LmRhdGEudG9TdHJpbmcoXCJiYXNlNjRcIil9XFxuLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLWA7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHBrY3MwID0gY3J5cHRvLnByaXZhdGVEZWNyeXB0KHtcbiAgICAgICAgICAgIGtleTogaW50ZXJuYWxLZXkucGVtLFxuICAgICAgICAgICAgcGFkZGluZzogY3J5cHRvLmNvbnN0YW50cy5SU0FfTk9fUEFERElORyxcbiAgICAgICAgfSwgQnVmZmVyJDEuZnJvbShkYXRhKSk7XG4gICAgICAgIGNvbnN0IHogPSBwa2NzMFswXTtcbiAgICAgICAgY29uc3Qgc2VlZCA9IHBrY3MwLnN1YmFycmF5KDEsIGhhc2hTaXplICsgMSk7XG4gICAgICAgIGNvbnN0IGRhdGFCbG9jayA9IHBrY3MwLnN1YmFycmF5KGhhc2hTaXplICsgMSk7XG4gICAgICAgIGlmICh6ICE9PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEZWNyeXB0aW9uIGZhaWxlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZWVkTWFzayA9IHRoaXMubWdmMShpbnRlcm5hbEtleS5hbGdvcml0aG0uaGFzaCwgZGF0YUJsb2NrLCBzZWVkLmxlbmd0aCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VlZC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgc2VlZFtpXSBePSBzZWVkTWFza1tpXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRhQmxvY2tNYXNrID0gdGhpcy5tZ2YxKGludGVybmFsS2V5LmFsZ29yaXRobS5oYXNoLCBzZWVkLCBkYXRhQmxvY2subGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhQmxvY2subGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGRhdGFCbG9ja1tpXSBePSBkYXRhQmxvY2tNYXNrW2ldO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxhYmVsSGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKGludGVybmFsS2V5LmFsZ29yaXRobS5oYXNoLm5hbWUucmVwbGFjZShcIi1cIiwgXCJcIikpXG4gICAgICAgICAgICAudXBkYXRlKGNvcmUuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShhbGdvcml0aG0ubGFiZWwgfHwgbmV3IFVpbnQ4QXJyYXkoMCkpKVxuICAgICAgICAgICAgLmRpZ2VzdCgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhhc2hTaXplOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChsYWJlbEhhc2hbaV0gIT09IGRhdGFCbG9ja1tpXSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkRlY3J5cHRpb24gZmFpbGVkXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBwc0VuZCA9IGhhc2hTaXplO1xuICAgICAgICBmb3IgKDsgcHNFbmQgPCBkYXRhQmxvY2subGVuZ3RoOyBwc0VuZCsrKSB7XG4gICAgICAgICAgICBjb25zdCBwc3ogPSBkYXRhQmxvY2tbcHNFbmRdO1xuICAgICAgICAgICAgaWYgKHBzeiA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBzeiAhPT0gMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkRlY3J5cHRpb24gZmFpbGVkXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChwc0VuZCA9PT0gZGF0YUJsb2NrLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGVjcnlwdGlvbiBmYWlsZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgcGtjczAgPSBkYXRhQmxvY2suc3ViYXJyYXkocHNFbmQgKyAxKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHBrY3MwKS5idWZmZXI7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBSc2FDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBSc2FDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyAuLi5hbGdvcml0aG0sIG5hbWU6IHRoaXMubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBjb25zdCBpbnRlcm5hbEtleSA9IGdldENyeXB0b0tleShrZXkpO1xuICAgICAgICBpZiAoIShpbnRlcm5hbEtleSBpbnN0YW5jZW9mIFJzYVByaXZhdGVLZXkgfHwgaW50ZXJuYWxLZXkgaW5zdGFuY2VvZiBSc2FQdWJsaWNLZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgUlNBIENyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBtZ2YxKGFsZ29yaXRobSwgc2VlZCwgbGVuZ3RoID0gMCkge1xuICAgICAgICBjb25zdCBoYXNoU2l6ZSA9IFNoYUNyeXB0by5zaXplKGFsZ29yaXRobSkgPj4gMztcbiAgICAgICAgY29uc3QgbWFzayA9IG5ldyBVaW50OEFycmF5KGxlbmd0aCk7XG4gICAgICAgIGNvbnN0IGNvdW50ZXIgPSBuZXcgVWludDhBcnJheSg0KTtcbiAgICAgICAgY29uc3QgY2h1bmtzID0gTWF0aC5jZWlsKGxlbmd0aCAvIGhhc2hTaXplKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaHVua3M7IGkrKykge1xuICAgICAgICAgICAgY291bnRlclswXSA9IGkgPj4+IDI0O1xuICAgICAgICAgICAgY291bnRlclsxXSA9IChpID4+PiAxNikgJiAyNTU7XG4gICAgICAgICAgICBjb3VudGVyWzJdID0gKGkgPj4+IDgpICYgMjU1O1xuICAgICAgICAgICAgY291bnRlclszXSA9IGkgJiAyNTU7XG4gICAgICAgICAgICBjb25zdCBzdWJtYXNrID0gbWFzay5zdWJhcnJheShpICogaGFzaFNpemUpO1xuICAgICAgICAgICAgbGV0IGNodW5rID0gY3J5cHRvLmNyZWF0ZUhhc2goYWxnb3JpdGhtLm5hbWUucmVwbGFjZShcIi1cIiwgXCJcIikpXG4gICAgICAgICAgICAgICAgLnVwZGF0ZShzZWVkKVxuICAgICAgICAgICAgICAgIC51cGRhdGUoY291bnRlcilcbiAgICAgICAgICAgICAgICAuZGlnZXN0KCk7XG4gICAgICAgICAgICBpZiAoY2h1bmsubGVuZ3RoID4gc3VibWFzay5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjaHVuayA9IGNodW5rLnN1YmFycmF5KDAsIHN1Ym1hc2subGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN1Ym1hc2suc2V0KGNodW5rKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWFzaztcbiAgICB9XG59XG5cbmNsYXNzIFJzYUVzUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLlByb3ZpZGVyQ3J5cHRvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJSU0FFUy1QS0NTMS12MV81XCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0ge1xuICAgICAgICAgICAgcHVibGljS2V5OiBbXCJlbmNyeXB0XCIsIFwid3JhcEtleVwiXSxcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IFtcImRlY3J5cHRcIiwgXCJ1bndyYXBLZXlcIl0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBhd2FpdCBSc2FDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgLi4uYWxnb3JpdGhtLFxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IHNldENyeXB0b0tleShrZXlzLnByaXZhdGVLZXkpLFxuICAgICAgICAgICAgcHVibGljS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wdWJsaWNLZXkpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjaGVja0dlbmVyYXRlS2V5UGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwicHVibGljRXhwb25lbnRcIik7XG4gICAgICAgIGlmICghKGFsZ29yaXRobS5wdWJsaWNFeHBvbmVudCAmJiBhbGdvcml0aG0ucHVibGljRXhwb25lbnQgaW5zdGFuY2VvZiBVaW50OEFycmF5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcInB1YmxpY0V4cG9uZW50OiBNaXNzaW5nIG9yIG5vdCBhIFVpbnQ4QXJyYXlcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHVibGljRXhwb25lbnQgPSBDb252ZXJ0LlRvQmFzZTY0KGFsZ29yaXRobS5wdWJsaWNFeHBvbmVudCk7XG4gICAgICAgIGlmICghKHB1YmxpY0V4cG9uZW50ID09PSBcIkF3PT1cIiB8fCBwdWJsaWNFeHBvbmVudCA9PT0gXCJBUUFCXCIpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwicHVibGljRXhwb25lbnQ6IE11c3QgYmUgWzNdIG9yIFsxLDAsMV1cIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcIm1vZHVsdXNMZW5ndGhcIik7XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtLm1vZHVsdXNMZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgMTAyNDpcbiAgICAgICAgICAgIGNhc2UgMjA0ODpcbiAgICAgICAgICAgIGNhc2UgNDA5NjpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIm1vZHVsdXNMZW5ndGg6IE11c3QgYmUgMTAyNCwgMjA0OCwgb3IgNDA5NlwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBvbkVuY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMudG9DcnlwdG9PcHRpb25zKGtleSk7XG4gICAgICAgIGNvbnN0IGVuYyA9IGNyeXB0by5wdWJsaWNFbmNyeXB0KG9wdGlvbnMsIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGVuYykuYnVmZmVyO1xuICAgIH1cbiAgICBhc3luYyBvbkRlY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMudG9DcnlwdG9PcHRpb25zKGtleSk7XG4gICAgICAgIGNvbnN0IGRlYyA9IGNyeXB0by5wcml2YXRlRGVjcnlwdChvcHRpb25zLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShkZWMpLmJ1ZmZlcjtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIFJzYUNyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IFJzYUNyeXB0by5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB7IC4uLmFsZ29yaXRobSwgbmFtZTogdGhpcy5uYW1lIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGNvbnN0IGludGVybmFsS2V5ID0gZ2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGlmICghKGludGVybmFsS2V5IGluc3RhbmNlb2YgUnNhUHJpdmF0ZUtleSB8fCBpbnRlcm5hbEtleSBpbnN0YW5jZW9mIFJzYVB1YmxpY0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBSU0EgQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRvQ3J5cHRvT3B0aW9ucyhrZXkpIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IGtleS50eXBlLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBrZXk6IGAtLS0tLUJFR0lOICR7dHlwZX0gS0VZLS0tLS1cXG4ke2dldENyeXB0b0tleShrZXkpLmRhdGEudG9TdHJpbmcoXCJiYXNlNjRcIil9XFxuLS0tLS1FTkQgJHt0eXBlfSBLRVktLS0tLWAsXG4gICAgICAgICAgICBwYWRkaW5nOiBjcnlwdG8uY29uc3RhbnRzLlJTQV9QS0NTMV9QQURESU5HLFxuICAgICAgICB9O1xuICAgIH1cbn1cblxuY29uc3QgbmFtZWRPSURzID0ge1xuICAgIFwiMS4yLjg0MC4xMDA0NS4zLjEuN1wiOiBcIlAtMjU2XCIsXG4gICAgXCJQLTI1NlwiOiBcIjEuMi44NDAuMTAwNDUuMy4xLjdcIixcbiAgICBcIjEuMy4xMzIuMC4zNFwiOiBcIlAtMzg0XCIsXG4gICAgXCJQLTM4NFwiOiBcIjEuMy4xMzIuMC4zNFwiLFxuICAgIFwiMS4zLjEzMi4wLjM1XCI6IFwiUC01MjFcIixcbiAgICBcIlAtNTIxXCI6IFwiMS4zLjEzMi4wLjM1XCIsXG4gICAgXCIxLjMuMTMyLjAuMTBcIjogXCJLLTI1NlwiLFxuICAgIFwiSy0yNTZcIjogXCIxLjMuMTMyLjAuMTBcIixcbiAgICBcImJyYWlucG9vbFAxNjByMVwiOiBcIjEuMy4zNi4zLjMuMi44LjEuMS4xXCIsXG4gICAgXCIxLjMuMzYuMy4zLjIuOC4xLjEuMVwiOiBcImJyYWlucG9vbFAxNjByMVwiLFxuICAgIFwiYnJhaW5wb29sUDE2MHQxXCI6IFwiMS4zLjM2LjMuMy4yLjguMS4xLjJcIixcbiAgICBcIjEuMy4zNi4zLjMuMi44LjEuMS4yXCI6IFwiYnJhaW5wb29sUDE2MHQxXCIsXG4gICAgXCJicmFpbnBvb2xQMTkycjFcIjogXCIxLjMuMzYuMy4zLjIuOC4xLjEuM1wiLFxuICAgIFwiMS4zLjM2LjMuMy4yLjguMS4xLjNcIjogXCJicmFpbnBvb2xQMTkycjFcIixcbiAgICBcImJyYWlucG9vbFAxOTJ0MVwiOiBcIjEuMy4zNi4zLjMuMi44LjEuMS40XCIsXG4gICAgXCIxLjMuMzYuMy4zLjIuOC4xLjEuNFwiOiBcImJyYWlucG9vbFAxOTJ0MVwiLFxuICAgIFwiYnJhaW5wb29sUDIyNHIxXCI6IFwiMS4zLjM2LjMuMy4yLjguMS4xLjVcIixcbiAgICBcIjEuMy4zNi4zLjMuMi44LjEuMS41XCI6IFwiYnJhaW5wb29sUDIyNHIxXCIsXG4gICAgXCJicmFpbnBvb2xQMjI0dDFcIjogXCIxLjMuMzYuMy4zLjIuOC4xLjEuNlwiLFxuICAgIFwiMS4zLjM2LjMuMy4yLjguMS4xLjZcIjogXCJicmFpbnBvb2xQMjI0dDFcIixcbiAgICBcImJyYWlucG9vbFAyNTZyMVwiOiBcIjEuMy4zNi4zLjMuMi44LjEuMS43XCIsXG4gICAgXCIxLjMuMzYuMy4zLjIuOC4xLjEuN1wiOiBcImJyYWlucG9vbFAyNTZyMVwiLFxuICAgIFwiYnJhaW5wb29sUDI1NnQxXCI6IFwiMS4zLjM2LjMuMy4yLjguMS4xLjhcIixcbiAgICBcIjEuMy4zNi4zLjMuMi44LjEuMS44XCI6IFwiYnJhaW5wb29sUDI1NnQxXCIsXG4gICAgXCJicmFpbnBvb2xQMzIwcjFcIjogXCIxLjMuMzYuMy4zLjIuOC4xLjEuOVwiLFxuICAgIFwiMS4zLjM2LjMuMy4yLjguMS4xLjlcIjogXCJicmFpbnBvb2xQMzIwcjFcIixcbiAgICBcImJyYWlucG9vbFAzMjB0MVwiOiBcIjEuMy4zNi4zLjMuMi44LjEuMS4xMFwiLFxuICAgIFwiMS4zLjM2LjMuMy4yLjguMS4xLjEwXCI6IFwiYnJhaW5wb29sUDMyMHQxXCIsXG4gICAgXCJicmFpbnBvb2xQMzg0cjFcIjogXCIxLjMuMzYuMy4zLjIuOC4xLjEuMTFcIixcbiAgICBcIjEuMy4zNi4zLjMuMi44LjEuMS4xMVwiOiBcImJyYWlucG9vbFAzODRyMVwiLFxuICAgIFwiYnJhaW5wb29sUDM4NHQxXCI6IFwiMS4zLjM2LjMuMy4yLjguMS4xLjEyXCIsXG4gICAgXCIxLjMuMzYuMy4zLjIuOC4xLjEuMTJcIjogXCJicmFpbnBvb2xQMzg0dDFcIixcbiAgICBcImJyYWlucG9vbFA1MTJyMVwiOiBcIjEuMy4zNi4zLjMuMi44LjEuMS4xM1wiLFxuICAgIFwiMS4zLjM2LjMuMy4yLjguMS4xLjEzXCI6IFwiYnJhaW5wb29sUDUxMnIxXCIsXG4gICAgXCJicmFpbnBvb2xQNTEydDFcIjogXCIxLjMuMzYuMy4zLjIuOC4xLjEuMTRcIixcbiAgICBcIjEuMy4zNi4zLjMuMi44LjEuMS4xNFwiOiBcImJyYWlucG9vbFA1MTJ0MVwiLFxufTtcbmZ1bmN0aW9uIGdldE9pZEJ5TmFtZWRDdXJ2ZSQxKG5hbWVkQ3VydmUpIHtcbiAgICBjb25zdCBvaWQgPSBuYW1lZE9JRHNbbmFtZWRDdXJ2ZV07XG4gICAgaWYgKCFvaWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoYENhbm5vdCBjb252ZXJ0IFdlYkNyeXB0byBuYW1lZCBjdXJ2ZSAnJHtuYW1lZEN1cnZlfScgdG8gT0lEYCk7XG4gICAgfVxuICAgIHJldHVybiBvaWQ7XG59XG5cbmNsYXNzIEVjUHJpdmF0ZUtleSBleHRlbmRzIEFzeW1tZXRyaWNLZXkge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnR5cGUgPSBcInByaXZhdGVcIjtcbiAgICB9XG4gICAgZ2V0S2V5KCkge1xuICAgICAgICBjb25zdCBrZXlJbmZvID0gQXNuUGFyc2VyLnBhcnNlKHRoaXMuZGF0YSwgY29yZS5hc24xLlByaXZhdGVLZXlJbmZvKTtcbiAgICAgICAgcmV0dXJuIEFzblBhcnNlci5wYXJzZShrZXlJbmZvLnByaXZhdGVLZXksIGNvcmUuYXNuMS5FY1ByaXZhdGVLZXkpO1xuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0S2V5KCk7XG4gICAgICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICAgICAgICBrdHk6IFwiRUNcIixcbiAgICAgICAgICAgIGNydjogdGhpcy5hbGdvcml0aG0ubmFtZWRDdXJ2ZSxcbiAgICAgICAgICAgIGtleV9vcHM6IHRoaXMudXNhZ2VzLFxuICAgICAgICAgICAgZXh0OiB0aGlzLmV4dHJhY3RhYmxlLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihqc29uLCBKc29uU2VyaWFsaXplci50b0pTT04oa2V5KSk7XG4gICAgfVxuICAgIGZyb21KU09OKGpzb24pIHtcbiAgICAgICAgaWYgKCFqc29uLmNydikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoYENhbm5vdCBnZXQgbmFtZWQgY3VydmUgZnJvbSBKV0suIFByb3BlcnR5ICdjcnYnIGlzIHJlcXVpcmVkYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IG5ldyBjb3JlLmFzbjEuUHJpdmF0ZUtleUluZm8oKTtcbiAgICAgICAga2V5SW5mby5wcml2YXRlS2V5QWxnb3JpdGhtLmFsZ29yaXRobSA9IFwiMS4yLjg0MC4xMDA0NS4yLjFcIjtcbiAgICAgICAga2V5SW5mby5wcml2YXRlS2V5QWxnb3JpdGhtLnBhcmFtZXRlcnMgPSBBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShuZXcgY29yZS5hc24xLk9iamVjdElkZW50aWZpZXIoZ2V0T2lkQnlOYW1lZEN1cnZlJDEoanNvbi5jcnYpKSk7XG4gICAgICAgIGNvbnN0IGtleSA9IEpzb25QYXJzZXIuZnJvbUpTT04oanNvbiwgeyB0YXJnZXRTY2hlbWE6IGNvcmUuYXNuMS5FY1ByaXZhdGVLZXkgfSk7XG4gICAgICAgIGtleUluZm8ucHJpdmF0ZUtleSA9IEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleSk7XG4gICAgICAgIHRoaXMuZGF0YSA9IEJ1ZmZlciQxLmZyb20oQXNuU2VyaWFsaXplci5zZXJpYWxpemUoa2V5SW5mbykpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG5cbmNsYXNzIEVjUHVibGljS2V5IGV4dGVuZHMgQXN5bW1ldHJpY0tleSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudHlwZSA9IFwicHVibGljXCI7XG4gICAgfVxuICAgIGdldEtleSgpIHtcbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IEFzblBhcnNlci5wYXJzZSh0aGlzLmRhdGEsIGNvcmUuYXNuMS5QdWJsaWNLZXlJbmZvKTtcbiAgICAgICAgcmV0dXJuIG5ldyBjb3JlLmFzbjEuRWNQdWJsaWNLZXkoa2V5SW5mby5wdWJsaWNLZXkpO1xuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0S2V5KCk7XG4gICAgICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICAgICAgICBrdHk6IFwiRUNcIixcbiAgICAgICAgICAgIGNydjogdGhpcy5hbGdvcml0aG0ubmFtZWRDdXJ2ZSxcbiAgICAgICAgICAgIGtleV9vcHM6IHRoaXMudXNhZ2VzLFxuICAgICAgICAgICAgZXh0OiB0aGlzLmV4dHJhY3RhYmxlLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihqc29uLCBKc29uU2VyaWFsaXplci50b0pTT04oa2V5KSk7XG4gICAgfVxuICAgIGZyb21KU09OKGpzb24pIHtcbiAgICAgICAgaWYgKCFqc29uLmNydikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoYENhbm5vdCBnZXQgbmFtZWQgY3VydmUgZnJvbSBKV0suIFByb3BlcnR5ICdjcnYnIGlzIHJlcXVpcmVkYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qga2V5ID0gSnNvblBhcnNlci5mcm9tSlNPTihqc29uLCB7IHRhcmdldFNjaGVtYTogY29yZS5hc24xLkVjUHVibGljS2V5IH0pO1xuICAgICAgICBjb25zdCBrZXlJbmZvID0gbmV3IGNvcmUuYXNuMS5QdWJsaWNLZXlJbmZvKCk7XG4gICAgICAgIGtleUluZm8ucHVibGljS2V5QWxnb3JpdGhtLmFsZ29yaXRobSA9IFwiMS4yLjg0MC4xMDA0NS4yLjFcIjtcbiAgICAgICAga2V5SW5mby5wdWJsaWNLZXlBbGdvcml0aG0ucGFyYW1ldGVycyA9IEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKG5ldyBjb3JlLmFzbjEuT2JqZWN0SWRlbnRpZmllcihnZXRPaWRCeU5hbWVkQ3VydmUkMShqc29uLmNydikpKTtcbiAgICAgICAga2V5SW5mby5wdWJsaWNLZXkgPSBBc25TZXJpYWxpemVyLnRvQVNOKGtleSkudmFsdWVIZXg7XG4gICAgICAgIHRoaXMuZGF0YSA9IEJ1ZmZlciQxLmZyb20oQXNuU2VyaWFsaXplci5zZXJpYWxpemUoa2V5SW5mbykpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG5cbmNsYXNzIFNoYTFQcm92aWRlciBleHRlbmRzIGNvcmUuUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlNIQS0xXCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW107XG4gICAgfVxuICAgIGFzeW5jIG9uRGlnZXN0KGFsZ29yaXRobSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gU2hhQ3J5cHRvLmRpZ2VzdChhbGdvcml0aG0sIGRhdGEpO1xuICAgIH1cbn1cblxuY2xhc3MgU2hhMjU2UHJvdmlkZXIgZXh0ZW5kcyBjb3JlLlByb3ZpZGVyQ3J5cHRvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJTSEEtMjU2XCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW107XG4gICAgfVxuICAgIGFzeW5jIG9uRGlnZXN0KGFsZ29yaXRobSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gU2hhQ3J5cHRvLmRpZ2VzdChhbGdvcml0aG0sIGRhdGEpO1xuICAgIH1cbn1cblxuY2xhc3MgU2hhMzg0UHJvdmlkZXIgZXh0ZW5kcyBjb3JlLlByb3ZpZGVyQ3J5cHRvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJTSEEtMzg0XCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW107XG4gICAgfVxuICAgIGFzeW5jIG9uRGlnZXN0KGFsZ29yaXRobSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gU2hhQ3J5cHRvLmRpZ2VzdChhbGdvcml0aG0sIGRhdGEpO1xuICAgIH1cbn1cblxuY2xhc3MgU2hhNTEyUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLlByb3ZpZGVyQ3J5cHRvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJTSEEtNTEyXCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW107XG4gICAgfVxuICAgIGFzeW5jIG9uRGlnZXN0KGFsZ29yaXRobSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gU2hhQ3J5cHRvLmRpZ2VzdChhbGdvcml0aG0sIGRhdGEpO1xuICAgIH1cbn1cblxuY2xhc3MgU2hhMzI1NlByb3ZpZGVyIGV4dGVuZHMgY29yZS5Qcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiU0hBMy0yNTZcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXTtcbiAgICB9XG4gICAgYXN5bmMgb25EaWdlc3QoYWxnb3JpdGhtLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBTaGFDcnlwdG8uZGlnZXN0KGFsZ29yaXRobSwgZGF0YSk7XG4gICAgfVxufVxuXG5jbGFzcyBTaGEzMzg0UHJvdmlkZXIgZXh0ZW5kcyBjb3JlLlByb3ZpZGVyQ3J5cHRvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJTSEEzLTM4NFwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtdO1xuICAgIH1cbiAgICBhc3luYyBvbkRpZ2VzdChhbGdvcml0aG0sIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIFNoYUNyeXB0by5kaWdlc3QoYWxnb3JpdGhtLCBkYXRhKTtcbiAgICB9XG59XG5cbmNsYXNzIFNoYTM1MTJQcm92aWRlciBleHRlbmRzIGNvcmUuUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlNIQTMtNTEyXCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW107XG4gICAgfVxuICAgIGFzeW5jIG9uRGlnZXN0KGFsZ29yaXRobSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gU2hhQ3J5cHRvLmRpZ2VzdChhbGdvcml0aG0sIGRhdGEpO1xuICAgIH1cbn1cblxuY2xhc3MgRWNDcnlwdG8ge1xuICAgIHN0YXRpYyBhc3luYyBnZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3QgcHJpdmF0ZUtleSA9IG5ldyBFY1ByaXZhdGVLZXkoKTtcbiAgICAgICAgcHJpdmF0ZUtleS5hbGdvcml0aG0gPSBhbGdvcml0aG07XG4gICAgICAgIHByaXZhdGVLZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAgcHJpdmF0ZUtleS51c2FnZXMgPSBrZXlVc2FnZXMuZmlsdGVyKCh1c2FnZSkgPT4gdGhpcy5wcml2YXRlS2V5VXNhZ2VzLmluZGV4T2YodXNhZ2UpICE9PSAtMSk7XG4gICAgICAgIGNvbnN0IHB1YmxpY0tleSA9IG5ldyBFY1B1YmxpY0tleSgpO1xuICAgICAgICBwdWJsaWNLZXkuYWxnb3JpdGhtID0gYWxnb3JpdGhtO1xuICAgICAgICBwdWJsaWNLZXkuZXh0cmFjdGFibGUgPSB0cnVlO1xuICAgICAgICBwdWJsaWNLZXkudXNhZ2VzID0ga2V5VXNhZ2VzLmZpbHRlcigodXNhZ2UpID0+IHRoaXMucHVibGljS2V5VXNhZ2VzLmluZGV4T2YodXNhZ2UpICE9PSAtMSk7XG4gICAgICAgIGNvbnN0IGtleXMgPSBjcnlwdG8uZ2VuZXJhdGVLZXlQYWlyU3luYyhcImVjXCIsIHtcbiAgICAgICAgICAgIG5hbWVkQ3VydmU6IHRoaXMuZ2V0T3BlblNTTE5hbWVkQ3VydmUoYWxnb3JpdGhtLm5hbWVkQ3VydmUpLFxuICAgICAgICAgICAgcHVibGljS2V5RW5jb2Rpbmc6IHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IFwiZGVyXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJzcGtpXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJpdmF0ZUtleUVuY29kaW5nOiB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiBcImRlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwicGtjczhcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBwcml2YXRlS2V5LmRhdGEgPSBrZXlzLnByaXZhdGVLZXk7XG4gICAgICAgIHB1YmxpY0tleS5kYXRhID0ga2V5cy5wdWJsaWNLZXk7XG4gICAgICAgIGNvbnN0IHJlcyA9IHtcbiAgICAgICAgICAgIHByaXZhdGVLZXksXG4gICAgICAgICAgICBwdWJsaWNLZXksXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBzaWduKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGNyeXB0b0FsZyA9IFNoYUNyeXB0by5nZXRBbGdvcml0aG1OYW1lKGFsZ29yaXRobS5oYXNoKTtcbiAgICAgICAgY29uc3Qgc2lnbmVyID0gY3J5cHRvLmNyZWF0ZVNpZ24oY3J5cHRvQWxnKTtcbiAgICAgICAgc2lnbmVyLnVwZGF0ZShCdWZmZXIkMS5mcm9tKGRhdGEpKTtcbiAgICAgICAgaWYgKCFrZXkucGVtKSB7XG4gICAgICAgICAgICBrZXkucGVtID0gYC0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLVxcbiR7a2V5LmRhdGEudG9TdHJpbmcoXCJiYXNlNjRcIil9XFxuLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLWA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGtleToga2V5LnBlbSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gc2lnbmVyLnNpZ24ob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGVjU2lnbmF0dXJlID0gQXNuUGFyc2VyLnBhcnNlKHNpZ25hdHVyZSwgY29yZS5hc24xLkVjRHNhU2lnbmF0dXJlKTtcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlUmF3ID0gY29yZS5FY1V0aWxzLmVuY29kZVNpZ25hdHVyZShlY1NpZ25hdHVyZSwgY29yZS5FY0N1cnZlcy5nZXQoa2V5LmFsZ29yaXRobS5uYW1lZEN1cnZlKS5zaXplKTtcbiAgICAgICAgcmV0dXJuIHNpZ25hdHVyZVJhdy5idWZmZXI7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyB2ZXJpZnkoYWxnb3JpdGhtLCBrZXksIHNpZ25hdHVyZSwgZGF0YSkge1xuICAgICAgICBjb25zdCBjcnlwdG9BbGcgPSBTaGFDcnlwdG8uZ2V0QWxnb3JpdGhtTmFtZShhbGdvcml0aG0uaGFzaCk7XG4gICAgICAgIGNvbnN0IHNpZ25lciA9IGNyeXB0by5jcmVhdGVWZXJpZnkoY3J5cHRvQWxnKTtcbiAgICAgICAgc2lnbmVyLnVwZGF0ZShCdWZmZXIkMS5mcm9tKGRhdGEpKTtcbiAgICAgICAgaWYgKCFrZXkucGVtKSB7XG4gICAgICAgICAgICBrZXkucGVtID0gYC0tLS0tQkVHSU4gUFVCTElDIEtFWS0tLS0tXFxuJHtrZXkuZGF0YS50b1N0cmluZyhcImJhc2U2NFwiKX1cXG4tLS0tLUVORCBQVUJMSUMgS0VZLS0tLS1gO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBrZXk6IGtleS5wZW0sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGVjU2lnbmF0dXJlID0gbmV3IGNvcmUuYXNuMS5FY0RzYVNpZ25hdHVyZSgpO1xuICAgICAgICBjb25zdCBuYW1lZEN1cnZlID0gY29yZS5FY0N1cnZlcy5nZXQoa2V5LmFsZ29yaXRobS5uYW1lZEN1cnZlKTtcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlUG9pbnQgPSBjb3JlLkVjVXRpbHMuZGVjb2RlU2lnbmF0dXJlKHNpZ25hdHVyZSwgbmFtZWRDdXJ2ZS5zaXplKTtcbiAgICAgICAgZWNTaWduYXR1cmUuciA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKHNpZ25hdHVyZVBvaW50LnIpO1xuICAgICAgICBlY1NpZ25hdHVyZS5zID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoc2lnbmF0dXJlUG9pbnQucyk7XG4gICAgICAgIGNvbnN0IGVjU2lnbmF0dXJlUmF3ID0gQnVmZmVyJDEuZnJvbShBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShlY1NpZ25hdHVyZSkpO1xuICAgICAgICBjb25zdCBvayA9IHNpZ25lci52ZXJpZnkob3B0aW9ucywgZWNTaWduYXR1cmVSYXcpO1xuICAgICAgICByZXR1cm4gb2s7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBkZXJpdmVCaXRzKGFsZ29yaXRobSwgYmFzZUtleSwgbGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGNyeXB0b0FsZyA9IHRoaXMuZ2V0T3BlblNTTE5hbWVkQ3VydmUoYmFzZUtleS5hbGdvcml0aG0ubmFtZWRDdXJ2ZSk7XG4gICAgICAgIGNvbnN0IGVjZGggPSBjcnlwdG8uY3JlYXRlRUNESChjcnlwdG9BbGcpO1xuICAgICAgICBjb25zdCBhc25Qcml2YXRlS2V5ID0gQXNuUGFyc2VyLnBhcnNlKGJhc2VLZXkuZGF0YSwgY29yZS5hc24xLlByaXZhdGVLZXlJbmZvKTtcbiAgICAgICAgY29uc3QgYXNuRWNQcml2YXRlS2V5ID0gQXNuUGFyc2VyLnBhcnNlKGFzblByaXZhdGVLZXkucHJpdmF0ZUtleSwgY29yZS5hc24xLkVjUHJpdmF0ZUtleSk7XG4gICAgICAgIGVjZGguc2V0UHJpdmF0ZUtleShCdWZmZXIkMS5mcm9tKGFzbkVjUHJpdmF0ZUtleS5wcml2YXRlS2V5KSk7XG4gICAgICAgIGNvbnN0IGFzblB1YmxpY0tleSA9IEFzblBhcnNlci5wYXJzZShhbGdvcml0aG0ucHVibGljLmRhdGEsIGNvcmUuYXNuMS5QdWJsaWNLZXlJbmZvKTtcbiAgICAgICAgY29uc3QgYml0cyA9IGVjZGguY29tcHV0ZVNlY3JldChCdWZmZXIkMS5mcm9tKGFzblB1YmxpY0tleS5wdWJsaWNLZXkpKTtcbiAgICAgICAgaWYgKGxlbmd0aCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGJpdHM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGJpdHMpLmJ1ZmZlci5zbGljZSgwLCBsZW5ndGggPj4gMyk7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBleHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgc3dpdGNoIChmb3JtYXQudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcImp3a1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBKc29uU2VyaWFsaXplci50b0pTT04oa2V5KTtcbiAgICAgICAgICAgIGNhc2UgXCJwa2NzOFwiOlxuICAgICAgICAgICAgY2FzZSBcInNwa2lcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoa2V5LmRhdGEpLmJ1ZmZlcjtcbiAgICAgICAgICAgIGNhc2UgXCJyYXdcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IHB1YmxpY0tleUluZm8gPSBBc25QYXJzZXIucGFyc2Uoa2V5LmRhdGEsIGNvcmUuYXNuMS5QdWJsaWNLZXlJbmZvKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHVibGljS2V5SW5mby5wdWJsaWNLZXk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiZm9ybWF0OiBNdXN0IGJlICdqd2snLCAncmF3JywgcGtjczgnIG9yICdzcGtpJ1wiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIHN3aXRjaCAoZm9ybWF0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJqd2tcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGp3ayA9IGtleURhdGE7XG4gICAgICAgICAgICAgICAgaWYgKGp3ay5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFzbktleSA9IEpzb25QYXJzZXIuZnJvbUpTT04oa2V5RGF0YSwgeyB0YXJnZXRTY2hlbWE6IGNvcmUuYXNuMS5FY1ByaXZhdGVLZXkgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmltcG9ydFByaXZhdGVLZXkoYXNuS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXNuS2V5ID0gSnNvblBhcnNlci5mcm9tSlNPTihrZXlEYXRhLCB7IHRhcmdldFNjaGVtYTogY29yZS5hc24xLkVjUHVibGljS2V5IH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQdWJsaWNLZXkoYXNuS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJyYXdcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFzbktleSA9IG5ldyBjb3JlLmFzbjEuRWNQdWJsaWNLZXkoa2V5RGF0YSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0UHVibGljS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJzcGtpXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlJbmZvID0gQXNuUGFyc2VyLnBhcnNlKG5ldyBVaW50OEFycmF5KGtleURhdGEpLCBjb3JlLmFzbjEuUHVibGljS2V5SW5mbyk7XG4gICAgICAgICAgICAgICAgY29uc3QgYXNuS2V5ID0gbmV3IGNvcmUuYXNuMS5FY1B1YmxpY0tleShrZXlJbmZvLnB1YmxpY0tleSk7XG4gICAgICAgICAgICAgICAgdGhpcy5hc3NlcnRLZXlQYXJhbWV0ZXJzKGtleUluZm8ucHVibGljS2V5QWxnb3JpdGhtLnBhcmFtZXRlcnMsIGFsZ29yaXRobS5uYW1lZEN1cnZlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQdWJsaWNLZXkoYXNuS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInBrY3M4XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlJbmZvID0gQXNuUGFyc2VyLnBhcnNlKG5ldyBVaW50OEFycmF5KGtleURhdGEpLCBjb3JlLmFzbjEuUHJpdmF0ZUtleUluZm8pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFzbktleSA9IEFzblBhcnNlci5wYXJzZShrZXlJbmZvLnByaXZhdGVLZXksIGNvcmUuYXNuMS5FY1ByaXZhdGVLZXkpO1xuICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0S2V5UGFyYW1ldGVycyhrZXlJbmZvLnByaXZhdGVLZXlBbGdvcml0aG0ucGFyYW1ldGVycywgYWxnb3JpdGhtLm5hbWVkQ3VydmUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmltcG9ydFByaXZhdGVLZXkoYXNuS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImZvcm1hdDogTXVzdCBiZSAnandrJywgJ3JhdycsICdwa2NzOCcgb3IgJ3Nwa2knXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBhc3NlcnRLZXlQYXJhbWV0ZXJzKHBhcmFtZXRlcnMsIG5hbWVkQ3VydmUpIHtcbiAgICAgICAgaWYgKCFwYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5DcnlwdG9FcnJvcihcIktleSBpbmZvIGRvZXNuJ3QgaGF2ZSByZXF1aXJlZCBwYXJhbWV0ZXJzXCIpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBuYW1lZEN1cnZlSWRlbnRpZmllciA9IFwiXCI7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBuYW1lZEN1cnZlSWRlbnRpZmllciA9IEFzblBhcnNlci5wYXJzZShwYXJhbWV0ZXJzLCBjb3JlLmFzbjEuT2JqZWN0SWRlbnRpZmllcikudmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLkNyeXB0b0Vycm9yKFwiQ2Fubm90IHJlYWQga2V5IGluZm8gcGFyYW1ldGVyc1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZ2V0T2lkQnlOYW1lZEN1cnZlJDEobmFtZWRDdXJ2ZSkgIT09IG5hbWVkQ3VydmVJZGVudGlmaWVyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5DcnlwdG9FcnJvcihcIktleSBpbmZvIHBhcmFtZXRlciBkb2Vzbid0IG1hdGNoIHRvIG5hbWVkIGN1cnZlXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBpbXBvcnRQcml2YXRlS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBuZXcgY29yZS5hc24xLlByaXZhdGVLZXlJbmZvKCk7XG4gICAgICAgIGtleUluZm8ucHJpdmF0ZUtleUFsZ29yaXRobS5hbGdvcml0aG0gPSBcIjEuMi44NDAuMTAwNDUuMi4xXCI7XG4gICAgICAgIGtleUluZm8ucHJpdmF0ZUtleUFsZ29yaXRobS5wYXJhbWV0ZXJzID0gQXNuU2VyaWFsaXplci5zZXJpYWxpemUobmV3IGNvcmUuYXNuMS5PYmplY3RJZGVudGlmaWVyKGdldE9pZEJ5TmFtZWRDdXJ2ZSQxKGFsZ29yaXRobS5uYW1lZEN1cnZlKSkpO1xuICAgICAgICBrZXlJbmZvLnByaXZhdGVLZXkgPSBBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShhc25LZXkpO1xuICAgICAgICBjb25zdCBrZXkgPSBuZXcgRWNQcml2YXRlS2V5KCk7XG4gICAgICAgIGtleS5kYXRhID0gQnVmZmVyJDEuZnJvbShBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShrZXlJbmZvKSk7XG4gICAgICAgIGtleS5hbGdvcml0aG0gPSBPYmplY3QuYXNzaWduKHt9LCBhbGdvcml0aG0pO1xuICAgICAgICBrZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAga2V5LnVzYWdlcyA9IGtleVVzYWdlcztcbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGltcG9ydFB1YmxpY0tleShhc25LZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXlJbmZvID0gbmV3IGNvcmUuYXNuMS5QdWJsaWNLZXlJbmZvKCk7XG4gICAgICAgIGtleUluZm8ucHVibGljS2V5QWxnb3JpdGhtLmFsZ29yaXRobSA9IFwiMS4yLjg0MC4xMDA0NS4yLjFcIjtcbiAgICAgICAgY29uc3QgbmFtZWRDdXJ2ZSA9IGdldE9pZEJ5TmFtZWRDdXJ2ZSQxKGFsZ29yaXRobS5uYW1lZEN1cnZlKTtcbiAgICAgICAga2V5SW5mby5wdWJsaWNLZXlBbGdvcml0aG0ucGFyYW1ldGVycyA9IEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKG5ldyBjb3JlLmFzbjEuT2JqZWN0SWRlbnRpZmllcihuYW1lZEN1cnZlKSk7XG4gICAgICAgIGtleUluZm8ucHVibGljS2V5ID0gYXNuS2V5LnZhbHVlO1xuICAgICAgICBjb25zdCBrZXkgPSBuZXcgRWNQdWJsaWNLZXkoKTtcbiAgICAgICAga2V5LmRhdGEgPSBCdWZmZXIkMS5mcm9tKEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleUluZm8pKTtcbiAgICAgICAga2V5LmFsZ29yaXRobSA9IE9iamVjdC5hc3NpZ24oe30sIGFsZ29yaXRobSk7XG4gICAgICAgIGtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBrZXkudXNhZ2VzID0ga2V5VXNhZ2VzO1xuICAgICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0T3BlblNTTE5hbWVkQ3VydmUoY3VydmUpIHtcbiAgICAgICAgc3dpdGNoIChjdXJ2ZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiUC0yNTZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJwcmltZTI1NnYxXCI7XG4gICAgICAgICAgICBjYXNlIFwiSy0yNTZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJzZWNwMjU2azFcIjtcbiAgICAgICAgICAgIGNhc2UgXCJQLTM4NFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcInNlY3AzODRyMVwiO1xuICAgICAgICAgICAgY2FzZSBcIlAtNTIxXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwic2VjcDUyMXIxXCI7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBjdXJ2ZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbkVjQ3J5cHRvLnB1YmxpY0tleVVzYWdlcyA9IFtcInZlcmlmeVwiXTtcbkVjQ3J5cHRvLnByaXZhdGVLZXlVc2FnZXMgPSBbXCJzaWduXCIsIFwiZGVyaXZlS2V5XCIsIFwiZGVyaXZlQml0c1wiXTtcblxuY2xhc3MgRWNkc2FQcm92aWRlciBleHRlbmRzIGNvcmUuRWNkc2FQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZWRDdXJ2ZXMgPSBjb3JlLkVjQ3VydmVzLm5hbWVzO1xuICAgICAgICB0aGlzLmhhc2hBbGdvcml0aG1zID0gW1xuICAgICAgICAgICAgXCJTSEEtMVwiLCBcIlNIQS0yNTZcIiwgXCJTSEEtMzg0XCIsIFwiU0hBLTUxMlwiLFxuICAgICAgICAgICAgXCJzaGFrZTEyOFwiLCBcInNoYWtlMjU2XCIsXG4gICAgICAgICAgICBcIlNIQTMtMjU2XCIsIFwiU0hBMy0zODRcIiwgXCJTSEEzLTUxMlwiXG4gICAgICAgIF07XG4gICAgfVxuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBhd2FpdCBFY0NyeXB0by5nZW5lcmF0ZUtleSh7XG4gICAgICAgICAgICAuLi5hbGdvcml0aG0sXG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogc2V0Q3J5cHRvS2V5KGtleXMucHJpdmF0ZUtleSksXG4gICAgICAgICAgICBwdWJsaWNLZXk6IHNldENyeXB0b0tleShrZXlzLnB1YmxpY0tleSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIG9uU2lnbihhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gRWNDcnlwdG8uc2lnbihhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uVmVyaWZ5KGFsZ29yaXRobSwga2V5LCBzaWduYXR1cmUsIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEVjQ3J5cHRvLnZlcmlmeShhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShzaWduYXR1cmUpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBFY0NyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IEVjQ3J5cHRvLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIHsgLi4uYWxnb3JpdGhtLCBuYW1lOiB0aGlzLm5hbWUgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxLZXkgPSBnZXRDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgaWYgKCEoaW50ZXJuYWxLZXkgaW5zdGFuY2VvZiBFY1ByaXZhdGVLZXkgfHwgaW50ZXJuYWxLZXkgaW5zdGFuY2VvZiBFY1B1YmxpY0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBFQyBDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIEVjZGhQcm92aWRlciBleHRlbmRzIGNvcmUuRWNkaFByb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lZEN1cnZlcyA9IGNvcmUuRWNDdXJ2ZXMubmFtZXM7XG4gICAgfVxuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBhd2FpdCBFY0NyeXB0by5nZW5lcmF0ZUtleSh7XG4gICAgICAgICAgICAuLi5hbGdvcml0aG0sXG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogc2V0Q3J5cHRvS2V5KGtleXMucHJpdmF0ZUtleSksXG4gICAgICAgICAgICBwdWJsaWNLZXk6IHNldENyeXB0b0tleShrZXlzLnB1YmxpY0tleSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBFY0NyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IEVjQ3J5cHRvLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIHsgLi4uYWxnb3JpdGhtLCBuYW1lOiB0aGlzLm5hbWUgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxLZXkgPSBnZXRDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgaWYgKCEoaW50ZXJuYWxLZXkgaW5zdGFuY2VvZiBFY1ByaXZhdGVLZXkgfHwgaW50ZXJuYWxLZXkgaW5zdGFuY2VvZiBFY1B1YmxpY0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBFQyBDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgb25EZXJpdmVCaXRzKGFsZ29yaXRobSwgYmFzZUtleSwgbGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGJpdHMgPSBhd2FpdCBFY0NyeXB0by5kZXJpdmVCaXRzKHsgLi4uYWxnb3JpdGhtLCBwdWJsaWM6IGdldENyeXB0b0tleShhbGdvcml0aG0ucHVibGljKSB9LCBnZXRDcnlwdG9LZXkoYmFzZUtleSksIGxlbmd0aCk7XG4gICAgICAgIHJldHVybiBiaXRzO1xuICAgIH1cbn1cblxuY29uc3QgZWRPSURzID0ge1xuICAgIFtjb3JlLmFzbjEuaWRFZDQ0OF06IFwiRWQ0NDhcIixcbiAgICBcImVkNDQ4XCI6IGNvcmUuYXNuMS5pZEVkNDQ4LFxuICAgIFtjb3JlLmFzbjEuaWRYNDQ4XTogXCJYNDQ4XCIsXG4gICAgXCJ4NDQ4XCI6IGNvcmUuYXNuMS5pZFg0NDgsXG4gICAgW2NvcmUuYXNuMS5pZEVkMjU1MTldOiBcIkVkMjU1MTlcIixcbiAgICBcImVkMjU1MTlcIjogY29yZS5hc24xLmlkRWQyNTUxOSxcbiAgICBbY29yZS5hc24xLmlkWDI1NTE5XTogXCJYMjU1MTlcIixcbiAgICBcIngyNTUxOVwiOiBjb3JlLmFzbjEuaWRYMjU1MTksXG59O1xuZnVuY3Rpb24gZ2V0T2lkQnlOYW1lZEN1cnZlKG5hbWVkQ3VydmUpIHtcbiAgICBjb25zdCBvaWQgPSBlZE9JRHNbbmFtZWRDdXJ2ZS50b0xvd2VyQ2FzZSgpXTtcbiAgICBpZiAoIW9pZCkge1xuICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihgQ2Fubm90IGNvbnZlcnQgV2ViQ3J5cHRvIG5hbWVkIGN1cnZlICcke25hbWVkQ3VydmV9JyB0byBPSURgKTtcbiAgICB9XG4gICAgcmV0dXJuIG9pZDtcbn1cblxuY2xhc3MgRWRQcml2YXRlS2V5IGV4dGVuZHMgQXN5bW1ldHJpY0tleSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudHlwZSA9IFwicHJpdmF0ZVwiO1xuICAgIH1cbiAgICBnZXRLZXkoKSB7XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBBc25QYXJzZXIucGFyc2UodGhpcy5kYXRhLCBjb3JlLmFzbjEuUHJpdmF0ZUtleUluZm8pO1xuICAgICAgICByZXR1cm4gQXNuUGFyc2VyLnBhcnNlKGtleUluZm8ucHJpdmF0ZUtleSwgY29yZS5hc24xLkN1cnZlUHJpdmF0ZUtleSk7XG4gICAgfVxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRLZXkoKTtcbiAgICAgICAgY29uc3QganNvbiA9IHtcbiAgICAgICAgICAgIGt0eTogXCJPS1BcIixcbiAgICAgICAgICAgIGNydjogdGhpcy5hbGdvcml0aG0ubmFtZWRDdXJ2ZSxcbiAgICAgICAgICAgIGtleV9vcHM6IHRoaXMudXNhZ2VzLFxuICAgICAgICAgICAgZXh0OiB0aGlzLmV4dHJhY3RhYmxlLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihqc29uLCBKc29uU2VyaWFsaXplci50b0pTT04oa2V5KSk7XG4gICAgfVxuICAgIGZyb21KU09OKGpzb24pIHtcbiAgICAgICAgaWYgKCFqc29uLmNydikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoYENhbm5vdCBnZXQgbmFtZWQgY3VydmUgZnJvbSBKV0suIFByb3BlcnR5ICdjcnYnIGlzIHJlcXVpcmVkYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IG5ldyBjb3JlLmFzbjEuUHJpdmF0ZUtleUluZm8oKTtcbiAgICAgICAga2V5SW5mby5wcml2YXRlS2V5QWxnb3JpdGhtLmFsZ29yaXRobSA9IGdldE9pZEJ5TmFtZWRDdXJ2ZShqc29uLmNydik7XG4gICAgICAgIGNvbnN0IGtleSA9IEpzb25QYXJzZXIuZnJvbUpTT04oanNvbiwgeyB0YXJnZXRTY2hlbWE6IGNvcmUuYXNuMS5DdXJ2ZVByaXZhdGVLZXkgfSk7XG4gICAgICAgIGtleUluZm8ucHJpdmF0ZUtleSA9IEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleSk7XG4gICAgICAgIHRoaXMuZGF0YSA9IEJ1ZmZlciQxLmZyb20oQXNuU2VyaWFsaXplci5zZXJpYWxpemUoa2V5SW5mbykpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG5cbmNsYXNzIEVkUHVibGljS2V5IGV4dGVuZHMgQXN5bW1ldHJpY0tleSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudHlwZSA9IFwicHVibGljXCI7XG4gICAgfVxuICAgIGdldEtleSgpIHtcbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IEFzblBhcnNlci5wYXJzZSh0aGlzLmRhdGEsIGNvcmUuYXNuMS5QdWJsaWNLZXlJbmZvKTtcbiAgICAgICAgcmV0dXJuIGtleUluZm8ucHVibGljS2V5O1xuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0S2V5KCk7XG4gICAgICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICAgICAgICBrdHk6IFwiT0tQXCIsXG4gICAgICAgICAgICBjcnY6IHRoaXMuYWxnb3JpdGhtLm5hbWVkQ3VydmUsXG4gICAgICAgICAgICBrZXlfb3BzOiB0aGlzLnVzYWdlcyxcbiAgICAgICAgICAgIGV4dDogdGhpcy5leHRyYWN0YWJsZSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oanNvbiwge1xuICAgICAgICAgICAgeDogQ29udmVydC5Ub0Jhc2U2NFVybChrZXkpXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBmcm9tSlNPTihqc29uKSB7XG4gICAgICAgIGlmICghanNvbi5jcnYpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKGBDYW5ub3QgZ2V0IG5hbWVkIGN1cnZlIGZyb20gSldLLiBQcm9wZXJ0eSAnY3J2JyBpcyByZXF1aXJlZGApO1xuICAgICAgICB9XG4gICAgICAgIGlmICghanNvbi54KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihgQ2Fubm90IGdldCBwcm9wZXJ0eSBmcm9tIEpXSy4gUHJvcGVydHkgJ3gnIGlzIHJlcXVpcmVkYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IG5ldyBjb3JlLmFzbjEuUHVibGljS2V5SW5mbygpO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleUFsZ29yaXRobS5hbGdvcml0aG0gPSBnZXRPaWRCeU5hbWVkQ3VydmUoanNvbi5jcnYpO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleSA9IENvbnZlcnQuRnJvbUJhc2U2NFVybChqc29uLngpO1xuICAgICAgICB0aGlzLmRhdGEgPSBCdWZmZXIkMS5mcm9tKEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleUluZm8pKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuXG5jbGFzcyBFZENyeXB0byB7XG4gICAgc3RhdGljIGFzeW5jIGdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBwcml2YXRlS2V5ID0gbmV3IEVkUHJpdmF0ZUtleSgpO1xuICAgICAgICBwcml2YXRlS2V5LmFsZ29yaXRobSA9IGFsZ29yaXRobTtcbiAgICAgICAgcHJpdmF0ZUtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBwcml2YXRlS2V5LnVzYWdlcyA9IGtleVVzYWdlcy5maWx0ZXIoKHVzYWdlKSA9PiB0aGlzLnByaXZhdGVLZXlVc2FnZXMuaW5kZXhPZih1c2FnZSkgIT09IC0xKTtcbiAgICAgICAgY29uc3QgcHVibGljS2V5ID0gbmV3IEVkUHVibGljS2V5KCk7XG4gICAgICAgIHB1YmxpY0tleS5hbGdvcml0aG0gPSBhbGdvcml0aG07XG4gICAgICAgIHB1YmxpY0tleS5leHRyYWN0YWJsZSA9IHRydWU7XG4gICAgICAgIHB1YmxpY0tleS51c2FnZXMgPSBrZXlVc2FnZXMuZmlsdGVyKCh1c2FnZSkgPT4gdGhpcy5wdWJsaWNLZXlVc2FnZXMuaW5kZXhPZih1c2FnZSkgIT09IC0xKTtcbiAgICAgICAgY29uc3QgdHlwZSA9IGFsZ29yaXRobS5uYW1lZEN1cnZlLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGtleXMgPSBjcnlwdG8uZ2VuZXJhdGVLZXlQYWlyU3luYyh0eXBlLCB7XG4gICAgICAgICAgICBwdWJsaWNLZXlFbmNvZGluZzoge1xuICAgICAgICAgICAgICAgIGZvcm1hdDogXCJkZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBcInNwa2lcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcml2YXRlS2V5RW5jb2Rpbmc6IHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IFwiZGVyXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJwa2NzOFwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHByaXZhdGVLZXkuZGF0YSA9IGtleXMucHJpdmF0ZUtleTtcbiAgICAgICAgcHVibGljS2V5LmRhdGEgPSBrZXlzLnB1YmxpY0tleTtcbiAgICAgICAgY29uc3QgcmVzID0ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleSxcbiAgICAgICAgICAgIHB1YmxpY0tleSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIHNpZ24oYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgaWYgKCFrZXkucGVtKSB7XG4gICAgICAgICAgICBrZXkucGVtID0gYC0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLVxcbiR7a2V5LmRhdGEudG9TdHJpbmcoXCJiYXNlNjRcIil9XFxuLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLWA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGtleToga2V5LnBlbSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gY3J5cHRvLnNpZ24obnVsbCwgQnVmZmVyJDEuZnJvbShkYXRhKSwgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBjb3JlLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKHNpZ25hdHVyZSk7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyB2ZXJpZnkoYWxnb3JpdGhtLCBrZXksIHNpZ25hdHVyZSwgZGF0YSkge1xuICAgICAgICBpZiAoIWtleS5wZW0pIHtcbiAgICAgICAgICAgIGtleS5wZW0gPSBgLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS1cXG4ke2tleS5kYXRhLnRvU3RyaW5nKFwiYmFzZTY0XCIpfVxcbi0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLWA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGtleToga2V5LnBlbSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgb2sgPSBjcnlwdG8udmVyaWZ5KG51bGwsIEJ1ZmZlciQxLmZyb20oZGF0YSksIG9wdGlvbnMsIEJ1ZmZlciQxLmZyb20oc2lnbmF0dXJlKSk7XG4gICAgICAgIHJldHVybiBvaztcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGRlcml2ZUJpdHMoYWxnb3JpdGhtLCBiYXNlS2V5LCBsZW5ndGgpIHtcbiAgICAgICAgY29uc3QgcHVibGljS2V5ID0gY3J5cHRvLmNyZWF0ZVB1YmxpY0tleSh7XG4gICAgICAgICAgICBrZXk6IGFsZ29yaXRobS5wdWJsaWMuZGF0YSxcbiAgICAgICAgICAgIGZvcm1hdDogXCJkZXJcIixcbiAgICAgICAgICAgIHR5cGU6IFwic3BraVwiLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcHJpdmF0ZUtleSA9IGNyeXB0by5jcmVhdGVQcml2YXRlS2V5KHtcbiAgICAgICAgICAgIGtleTogYmFzZUtleS5kYXRhLFxuICAgICAgICAgICAgZm9ybWF0OiBcImRlclwiLFxuICAgICAgICAgICAgdHlwZTogXCJwa2NzOFwiLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgYml0cyA9IGNyeXB0by5kaWZmaWVIZWxsbWFuKHtcbiAgICAgICAgICAgIHB1YmxpY0tleSxcbiAgICAgICAgICAgIHByaXZhdGVLZXksXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYml0cykuYnVmZmVyLnNsaWNlKDAsIGxlbmd0aCA+PiAzKTtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICBzd2l0Y2ggKGZvcm1hdC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiandrXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEpzb25TZXJpYWxpemVyLnRvSlNPTihrZXkpO1xuICAgICAgICAgICAgY2FzZSBcInBrY3M4XCI6XG4gICAgICAgICAgICBjYXNlIFwic3BraVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShrZXkuZGF0YSkuYnVmZmVyO1xuICAgICAgICAgICAgY2FzZSBcInJhd1wiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHVibGljS2V5SW5mbyA9IEFzblBhcnNlci5wYXJzZShrZXkuZGF0YSwgY29yZS5hc24xLlB1YmxpY0tleUluZm8pO1xuICAgICAgICAgICAgICAgIHJldHVybiBwdWJsaWNLZXlJbmZvLnB1YmxpY0tleTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJmb3JtYXQ6IE11c3QgYmUgJ2p3aycsICdyYXcnLCBwa2NzOCcgb3IgJ3Nwa2knXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBpbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgc3dpdGNoIChmb3JtYXQudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcImp3a1wiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgandrID0ga2V5RGF0YTtcbiAgICAgICAgICAgICAgICBpZiAoandrLmQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXNuS2V5ID0gSnNvblBhcnNlci5mcm9tSlNPTihrZXlEYXRhLCB7IHRhcmdldFNjaGVtYTogY29yZS5hc24xLkN1cnZlUHJpdmF0ZUtleSB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0UHJpdmF0ZUtleShhc25LZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWp3ay54KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5RGF0YTogQ2Fubm90IGdldCByZXF1aXJlZCAneCcgZmlsZWRcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0UHVibGljS2V5KENvbnZlcnQuRnJvbUJhc2U2NFVybChqd2sueCksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInJhd1wiOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0UHVibGljS2V5KGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwic3BraVwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5SW5mbyA9IEFzblBhcnNlci5wYXJzZShuZXcgVWludDhBcnJheShrZXlEYXRhKSwgY29yZS5hc24xLlB1YmxpY0tleUluZm8pO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmltcG9ydFB1YmxpY0tleShrZXlJbmZvLnB1YmxpY0tleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJwa2NzOFwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5SW5mbyA9IEFzblBhcnNlci5wYXJzZShuZXcgVWludDhBcnJheShrZXlEYXRhKSwgY29yZS5hc24xLlByaXZhdGVLZXlJbmZvKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhc25LZXkgPSBBc25QYXJzZXIucGFyc2Uoa2V5SW5mby5wcml2YXRlS2V5LCBjb3JlLmFzbjEuQ3VydmVQcml2YXRlS2V5KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQcml2YXRlS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJmb3JtYXQ6IE11c3QgYmUgJ2p3aycsICdyYXcnLCAncGtjczgnIG9yICdzcGtpJ1wiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgaW1wb3J0UHJpdmF0ZUtleShhc25LZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBuZXcgRWRQcml2YXRlS2V5KCk7XG4gICAgICAgIGtleS5mcm9tSlNPTih7XG4gICAgICAgICAgICBjcnY6IGFsZ29yaXRobS5uYW1lZEN1cnZlLFxuICAgICAgICAgICAgZDogQ29udmVydC5Ub0Jhc2U2NFVybChhc25LZXkuZCksXG4gICAgICAgIH0pO1xuICAgICAgICBrZXkuYWxnb3JpdGhtID0gT2JqZWN0LmFzc2lnbih7fSwgYWxnb3JpdGhtKTtcbiAgICAgICAga2V5LmV4dHJhY3RhYmxlID0gZXh0cmFjdGFibGU7XG4gICAgICAgIGtleS51c2FnZXMgPSBrZXlVc2FnZXM7XG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBpbXBvcnRQdWJsaWNLZXkoYXNuS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gbmV3IEVkUHVibGljS2V5KCk7XG4gICAgICAgIGtleS5mcm9tSlNPTih7XG4gICAgICAgICAgICBjcnY6IGFsZ29yaXRobS5uYW1lZEN1cnZlLFxuICAgICAgICAgICAgeDogQ29udmVydC5Ub0Jhc2U2NFVybChhc25LZXkpLFxuICAgICAgICB9KTtcbiAgICAgICAga2V5LmFsZ29yaXRobSA9IE9iamVjdC5hc3NpZ24oe30sIGFsZ29yaXRobSk7XG4gICAgICAgIGtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBrZXkudXNhZ2VzID0ga2V5VXNhZ2VzO1xuICAgICAgICByZXR1cm4ga2V5O1xuICAgIH1cbn1cbkVkQ3J5cHRvLnB1YmxpY0tleVVzYWdlcyA9IFtcInZlcmlmeVwiXTtcbkVkQ3J5cHRvLnByaXZhdGVLZXlVc2FnZXMgPSBbXCJzaWduXCIsIFwiZGVyaXZlS2V5XCIsIFwiZGVyaXZlQml0c1wiXTtcblxuY2xhc3MgRWREc2FQcm92aWRlciBleHRlbmRzIGNvcmUuRWREc2FQcm92aWRlciB7XG4gICAgYXN5bmMgb25HZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5cyA9IGF3YWl0IEVkQ3J5cHRvLmdlbmVyYXRlS2V5KHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgIG5hbWVkQ3VydmU6IGFsZ29yaXRobS5uYW1lZEN1cnZlLnJlcGxhY2UoL15lZC9pLCBcIkVkXCIpLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IHNldENyeXB0b0tleShrZXlzLnByaXZhdGVLZXkpLFxuICAgICAgICAgICAgcHVibGljS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wdWJsaWNLZXkpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBhc3luYyBvblNpZ24oYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEVkQ3J5cHRvLnNpZ24oYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvblZlcmlmeShhbGdvcml0aG0sIGtleSwgc2lnbmF0dXJlLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBFZENyeXB0by52ZXJpZnkoYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoc2lnbmF0dXJlKSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICByZXR1cm4gRWRDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBFZENyeXB0by5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB7IC4uLmFsZ29yaXRobSwgbmFtZTogdGhpcy5uYW1lIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxufVxuXG5jbGFzcyBFY2RoRXNQcm92aWRlciBleHRlbmRzIGNvcmUuRWNkaEVzUHJvdmlkZXIge1xuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBhd2FpdCBFZENyeXB0by5nZW5lcmF0ZUtleSh7XG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICBuYW1lZEN1cnZlOiBhbGdvcml0aG0ubmFtZWRDdXJ2ZS50b1VwcGVyQ2FzZSgpLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IHNldENyeXB0b0tleShrZXlzLnByaXZhdGVLZXkpLFxuICAgICAgICAgICAgcHVibGljS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wdWJsaWNLZXkpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBhc3luYyBvbkRlcml2ZUJpdHMoYWxnb3JpdGhtLCBiYXNlS2V5LCBsZW5ndGgpIHtcbiAgICAgICAgY29uc3QgYml0cyA9IGF3YWl0IEVkQ3J5cHRvLmRlcml2ZUJpdHMoeyAuLi5hbGdvcml0aG0sIHB1YmxpYzogZ2V0Q3J5cHRvS2V5KGFsZ29yaXRobS5wdWJsaWMpIH0sIGdldENyeXB0b0tleShiYXNlS2V5KSwgbGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIGJpdHM7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBFZENyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IEVkQ3J5cHRvLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIHsgLi4uYWxnb3JpdGhtLCBuYW1lOiB0aGlzLm5hbWUgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG59XG5cbmNsYXNzIEVkMjU1MTlDcnlwdG9LZXkgZXh0ZW5kcyBDcnlwdG9LZXkge1xuICAgIGNvbnN0cnVjdG9yKGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIHVzYWdlcywgZGF0YSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmFsZ29yaXRobSA9IGFsZ29yaXRobTtcbiAgICAgICAgdGhpcy5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IHVzYWdlcztcbiAgICAgICAgdGhpcy5kYXRhID0gQnVmZmVyLmZyb20oZGF0YSk7XG4gICAgfVxuICAgIHRvSldLKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga3R5OiBcIk9LUFwiLFxuICAgICAgICAgICAgY3J2OiB0aGlzLmFsZ29yaXRobS5uYW1lLFxuICAgICAgICAgICAga2V5X29wczogdGhpcy51c2FnZXMsXG4gICAgICAgICAgICBleHQ6IHRoaXMuZXh0cmFjdGFibGUsXG4gICAgICAgIH07XG4gICAgfVxufVxuXG5jbGFzcyBFZDI1NTE5UHJpdmF0ZUtleSBleHRlbmRzIEVkMjU1MTlDcnlwdG9LZXkge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnR5cGUgPSBcInByaXZhdGVcIjtcbiAgICB9XG4gICAgdG9KV0soKSB7XG4gICAgICAgIGNvbnN0IHB1Ykp3ayA9IGNyeXB0by5jcmVhdGVQdWJsaWNLZXkoe1xuICAgICAgICAgICAga2V5OiB0aGlzLmRhdGEsXG4gICAgICAgICAgICBmb3JtYXQ6IFwicGVtXCIsXG4gICAgICAgIH0pLmV4cG9ydCh7IGZvcm1hdDogXCJqd2tcIiB9KTtcbiAgICAgICAgY29uc3QgcmF3ID0gY29yZS5QZW1Db252ZXJ0ZXIudG9VaW50OEFycmF5KHRoaXMuZGF0YS50b1N0cmluZygpKTtcbiAgICAgICAgY29uc3QgcGtjczggPSBBc25Db252ZXJ0LnBhcnNlKHJhdywgY29yZS5hc24xLlByaXZhdGVLZXlJbmZvKTtcbiAgICAgICAgY29uc3QgZCA9IEFzbkNvbnZlcnQucGFyc2UocGtjczgucHJpdmF0ZUtleSwgY29yZS5hc24xLkVkUHJpdmF0ZUtleSkudmFsdWU7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5zdXBlci50b0pXSygpLFxuICAgICAgICAgICAgLi4ucHViSndrLFxuICAgICAgICAgICAgZDogQnVmZmVyLmZyb20obmV3IFVpbnQ4QXJyYXkoZCkpLnRvU3RyaW5nKFwiYmFzZTY0dXJsXCIpLFxuICAgICAgICB9O1xuICAgIH1cbn1cblxuY2xhc3MgRWQyNTUxOVB1YmxpY0tleSBleHRlbmRzIEVkMjU1MTlDcnlwdG9LZXkge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnR5cGUgPSBcInB1YmxpY1wiO1xuICAgIH1cbiAgICB0b0pXSygpIHtcbiAgICAgICAgY29uc3QgandrID0gY3J5cHRvLmNyZWF0ZVB1YmxpY0tleSh7XG4gICAgICAgICAgICBrZXk6IHRoaXMuZGF0YSxcbiAgICAgICAgICAgIGZvcm1hdDogXCJwZW1cIixcbiAgICAgICAgfSkuZXhwb3J0KHsgZm9ybWF0OiBcImp3a1wiIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uc3VwZXIudG9KV0soKSxcbiAgICAgICAgICAgIC4uLmp3ayxcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbmNsYXNzIEVkMjU1MTlDcnlwdG8ge1xuICAgIHN0YXRpYyBhc3luYyBnZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IGFsZ29yaXRobS5uYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGtleXMgPSBjcnlwdG8uZ2VuZXJhdGVLZXlQYWlyU3luYyh0eXBlLCB7XG4gICAgICAgICAgICBwdWJsaWNLZXlFbmNvZGluZzoge1xuICAgICAgICAgICAgICAgIGZvcm1hdDogXCJwZW1cIixcbiAgICAgICAgICAgICAgICB0eXBlOiBcInNwa2lcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcml2YXRlS2V5RW5jb2Rpbmc6IHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IFwicGVtXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJwa2NzOFwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGtleUFsZyA9IHtcbiAgICAgICAgICAgIG5hbWU6IHR5cGUgPT09IFwiZWQyNTUxOVwiID8gXCJFZDI1NTE5XCIgOiBcIlgyNTUxOVwiLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBwcml2YXRlS2V5VXNhZ2VzID0ga2V5VXNhZ2VzLmZpbHRlcigodXNhZ2UpID0+IHRoaXMucHJpdmF0ZUtleVVzYWdlcy5pbmNsdWRlcyh1c2FnZSkpO1xuICAgICAgICBjb25zdCBwdWJsaWNLZXlVc2FnZXMgPSBrZXlVc2FnZXMuZmlsdGVyKCh1c2FnZSkgPT4gdGhpcy5wdWJsaWNLZXlVc2FnZXMuaW5jbHVkZXModXNhZ2UpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IG5ldyBFZDI1NTE5UHJpdmF0ZUtleShrZXlBbGcsIGV4dHJhY3RhYmxlLCBwcml2YXRlS2V5VXNhZ2VzLCBrZXlzLnByaXZhdGVLZXkpLFxuICAgICAgICAgICAgcHVibGljS2V5OiBuZXcgRWQyNTUxOVB1YmxpY0tleShrZXlBbGcsIHRydWUsIHB1YmxpY0tleVVzYWdlcywga2V5cy5wdWJsaWNLZXkpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgc2lnbihhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBzaWduYXR1cmUgPSBjcnlwdG8uc2lnbihudWxsLCBCdWZmZXIuZnJvbShkYXRhKSwga2V5LmRhdGEpO1xuICAgICAgICByZXR1cm4gY29yZS5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihzaWduYXR1cmUpO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgdmVyaWZ5KGFsZ29yaXRobSwga2V5LCBzaWduYXR1cmUsIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIGNyeXB0by52ZXJpZnkobnVsbCwgQnVmZmVyLmZyb20oZGF0YSksIGtleS5kYXRhLCBzaWduYXR1cmUpO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICAgICAgICBjYXNlIFwiandrXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGtleS50b0pXSygpO1xuICAgICAgICAgICAgY2FzZSBcInBrY3M4XCI6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29yZS5QZW1Db252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihrZXkuZGF0YS50b1N0cmluZygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJzcGtpXCI6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29yZS5QZW1Db252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihrZXkuZGF0YS50b1N0cmluZygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJyYXdcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGp3ayA9IGtleS50b0pXSygpO1xuICAgICAgICAgICAgICAgIHJldHVybiBDb252ZXJ0LkZyb21CYXNlNjRVcmwoandrLngpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJmb3JtYXQ6IE11c3QgYmUgJ2p3aycsICdyYXcnLCBwa2NzOCcgb3IgJ3Nwa2knXCIpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICAgICAgICBjYXNlIFwiandrXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBqd2sgPSBrZXlEYXRhO1xuICAgICAgICAgICAgICAgIGlmIChqd2suZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcml2YXRlRGF0YSA9IG5ldyBjb3JlLmFzbjEuRWRQcml2YXRlS2V5KCk7XG4gICAgICAgICAgICAgICAgICAgIHByaXZhdGVEYXRhLnZhbHVlID0gY29yZS5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihCdWZmZXIuZnJvbShqd2suZCwgXCJiYXNlNjR1cmxcIikpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwa2NzOCA9IG5ldyBjb3JlLmFzbjEuUHJpdmF0ZUtleUluZm8oKTtcbiAgICAgICAgICAgICAgICAgICAgcGtjczgucHJpdmF0ZUtleUFsZ29yaXRobS5hbGdvcml0aG0gPSBhbGdvcml0aG0ubmFtZS50b0xvd2VyQ2FzZSgpID09PSBcImVkMjU1MTlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPyBjb3JlLmFzbjEuaWRFZDI1NTE5XG4gICAgICAgICAgICAgICAgICAgICAgICA6IGNvcmUuYXNuMS5pZFgyNTUxOTtcbiAgICAgICAgICAgICAgICAgICAgcGtjczgucHJpdmF0ZUtleSA9IEFzbkNvbnZlcnQuc2VyaWFsaXplKHByaXZhdGVEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmF3ID0gQXNuQ29udmVydC5zZXJpYWxpemUocGtjczgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwZW0gPSBjb3JlLlBlbUNvbnZlcnRlci5mcm9tQnVmZmVyU291cmNlKHJhdywgXCJQUklWQVRFIEtFWVwiKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFZDI1NTE5UHJpdmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIHBlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGp3ay54KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHB1YktleSA9IGNyeXB0by5jcmVhdGVQdWJsaWNLZXkoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiBcImp3a1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBqd2ssXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwZW0gPSBwdWJLZXkuZXhwb3J0KHsgZm9ybWF0OiBcInBlbVwiLCB0eXBlOiBcInNwa2lcIiB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFZDI1NTE5UHVibGljS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgcGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwia2V5RGF0YTogQ2Fubm90IGltcG9ydCBKV0suICdkJyBvciAneCcgbXVzdCBiZSBwcmVzZW50ZWRcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInBrY3M4XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwZW0gPSBjb3JlLlBlbUNvbnZlcnRlci5mcm9tQnVmZmVyU291cmNlKGtleURhdGEsIFwiUFJJVkFURSBLRVlcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFZDI1NTE5UHJpdmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIHBlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwic3BraVwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGVtID0gY29yZS5QZW1Db252ZXJ0ZXIuZnJvbUJ1ZmZlclNvdXJjZShrZXlEYXRhLCBcIlBVQkxJQyBLRVlcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFZDI1NTE5UHVibGljS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgcGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJyYXdcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJhdyA9IGtleURhdGE7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gY3J5cHRvLmNyZWF0ZVB1YmxpY0tleSh7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdDogXCJqd2tcIixcbiAgICAgICAgICAgICAgICAgICAga2V5OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrdHk6IFwiT0tQXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjcnY6IGFsZ29yaXRobS5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwiZWQyNTUxOVwiID8gXCJFZDI1NTE5XCIgOiBcIlgyNTUxOVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgeDogQ29udmVydC5Ub0Jhc2U2NFVybChyYXcpLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBlbSA9IGtleS5leHBvcnQoeyBmb3JtYXQ6IFwicGVtXCIsIHR5cGU6IFwic3BraVwiIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRWQyNTUxOVB1YmxpY0tleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIHBlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImZvcm1hdDogTXVzdCBiZSAnandrJywgJ3JhdycsIHBrY3M4JyBvciAnc3BraSdcIikpO1xuICAgICAgICB9XG4gICAgfVxufVxuRWQyNTUxOUNyeXB0by5wcml2YXRlS2V5VXNhZ2VzID0gW1wic2lnblwiLCBcImRlcml2ZUJpdHNcIiwgXCJkZXJpdmVLZXlcIl07XG5FZDI1NTE5Q3J5cHRvLnB1YmxpY0tleVVzYWdlcyA9IFtcInZlcmlmeVwiXTtcblxuY2xhc3MgRWQyNTUxOVByb3ZpZGVyIGV4dGVuZHMgY29yZS5FZDI1NTE5UHJvdmlkZXIge1xuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBhd2FpdCBFZDI1NTE5Q3J5cHRvLmdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wcml2YXRlS2V5KSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogc2V0Q3J5cHRvS2V5KGtleXMucHVibGljS2V5KSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgYXN5bmMgb25TaWduKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGludGVybmFsS2V5ID0gZ2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IEVkMjU1MTlDcnlwdG8uc2lnbihhbGdvcml0aG0sIGludGVybmFsS2V5LCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgICAgIHJldHVybiBzaWduYXR1cmU7XG4gICAgfVxuICAgIG9uVmVyaWZ5KGFsZ29yaXRobSwga2V5LCBzaWduYXR1cmUsIGRhdGEpIHtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxLZXkgPSBnZXRDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgcmV0dXJuIEVkMjU1MTlDcnlwdG8udmVyaWZ5KGFsZ29yaXRobSwgaW50ZXJuYWxLZXksIG5ldyBVaW50OEFycmF5KHNpZ25hdHVyZSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxLZXkgPSBnZXRDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgcmV0dXJuIEVkMjU1MTlDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgaW50ZXJuYWxLZXkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBpbnRlcm5hbEtleSA9IGF3YWl0IEVkMjU1MTlDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShpbnRlcm5hbEtleSk7XG4gICAgfVxufVxuXG5jbGFzcyBYMjU1MTlQcm92aWRlciBleHRlbmRzIGNvcmUuWDI1NTE5UHJvdmlkZXIge1xuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBhd2FpdCBFZDI1NTE5Q3J5cHRvLmdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wcml2YXRlS2V5KSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogc2V0Q3J5cHRvS2V5KGtleXMucHVibGljS2V5KSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgYXN5bmMgb25EZXJpdmVCaXRzKGFsZ29yaXRobSwgYmFzZUtleSwgbGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGludGVybmFsQmFzZUtleSA9IGdldENyeXB0b0tleShiYXNlS2V5KTtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxQdWJsaWNLZXkgPSBnZXRDcnlwdG9LZXkoYWxnb3JpdGhtLnB1YmxpYyk7XG4gICAgICAgIGNvbnN0IHB1YmxpY0tleSA9IGNyeXB0by5jcmVhdGVQdWJsaWNLZXkoe1xuICAgICAgICAgICAga2V5OiBpbnRlcm5hbFB1YmxpY0tleS5kYXRhLnRvU3RyaW5nKCksXG4gICAgICAgICAgICBmb3JtYXQ6IFwicGVtXCIsXG4gICAgICAgICAgICB0eXBlOiBcInNwa2lcIixcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHByaXZhdGVLZXkgPSBjcnlwdG8uY3JlYXRlUHJpdmF0ZUtleSh7XG4gICAgICAgICAgICBrZXk6IGludGVybmFsQmFzZUtleS5kYXRhLnRvU3RyaW5nKCksXG4gICAgICAgICAgICBmb3JtYXQ6IFwicGVtXCIsXG4gICAgICAgICAgICB0eXBlOiBcInBrY3M4XCIsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBiaXRzID0gY3J5cHRvLmRpZmZpZUhlbGxtYW4oe1xuICAgICAgICAgICAgcHVibGljS2V5LFxuICAgICAgICAgICAgcHJpdmF0ZUtleSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShiaXRzKS5idWZmZXIuc2xpY2UoMCwgbGVuZ3RoID4+IDMpO1xuICAgIH1cbiAgICBhc3luYyBvbkV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICBjb25zdCBpbnRlcm5hbEtleSA9IGdldENyeXB0b0tleShrZXkpO1xuICAgICAgICByZXR1cm4gRWQyNTUxOUNyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBpbnRlcm5hbEtleSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IEVkMjU1MTlDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBpZiAoIShnZXRDcnlwdG9LZXkoa2V5KSBpbnN0YW5jZW9mIEVkMjU1MTlDcnlwdG9LZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgYSBFZDI1NTE5Q3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBQYmtkZkNyeXB0b0tleSBleHRlbmRzIENyeXB0b0tleSB7XG59XG5cbmNsYXNzIFBia2RmMlByb3ZpZGVyIGV4dGVuZHMgY29yZS5QYmtkZjJQcm92aWRlciB7XG4gICAgYXN5bmMgb25EZXJpdmVCaXRzKGFsZ29yaXRobSwgYmFzZUtleSwgbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzYWx0ID0gY29yZS5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihhbGdvcml0aG0uc2FsdCk7XG4gICAgICAgICAgICBjb25zdCBoYXNoID0gYWxnb3JpdGhtLmhhc2gubmFtZS5yZXBsYWNlKFwiLVwiLCBcIlwiKTtcbiAgICAgICAgICAgIGNyeXB0by5wYmtkZjIoZ2V0Q3J5cHRvS2V5KGJhc2VLZXkpLmRhdGEsIEJ1ZmZlciQxLmZyb20oc2FsdCksIGFsZ29yaXRobS5pdGVyYXRpb25zLCBsZW5ndGggPj4gMywgaGFzaCwgKGVyciwgZGVyaXZlZEJpdHMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShuZXcgVWludDhBcnJheShkZXJpdmVkQml0cykuYnVmZmVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGlmIChmb3JtYXQgPT09IFwicmF3XCIpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IG5ldyBQYmtkZkNyeXB0b0tleSgpO1xuICAgICAgICAgICAga2V5LmRhdGEgPSBCdWZmZXIkMS5mcm9tKGtleURhdGEpO1xuICAgICAgICAgICAga2V5LmFsZ29yaXRobSA9IHsgbmFtZTogdGhpcy5uYW1lIH07XG4gICAgICAgICAgICBrZXkuZXh0cmFjdGFibGUgPSBmYWxzZTtcbiAgICAgICAgICAgIGtleS51c2FnZXMgPSBrZXlVc2FnZXM7XG4gICAgICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJmb3JtYXQ6IE11c3QgYmUgJ3JhdydcIik7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGlmICghKGdldENyeXB0b0tleShrZXkpIGluc3RhbmNlb2YgUGJrZGZDcnlwdG9LZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgUEJLREYgQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBIbWFjQ3J5cHRvS2V5IGV4dGVuZHMgQ3J5cHRvS2V5IHtcbiAgICBnZXQgYWxnKCkge1xuICAgICAgICBjb25zdCBoYXNoID0gdGhpcy5hbGdvcml0aG0uaGFzaC5uYW1lLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIHJldHVybiBgSFMke2hhc2gucmVwbGFjZShcIlNIQS1cIiwgXCJcIil9YDtcbiAgICB9XG4gICAgc2V0IGFsZyh2YWx1ZSkge1xuICAgIH1cbn1cbl9fZGVjb3JhdGUoW1xuICAgIEpzb25Qcm9wKHsgbmFtZTogXCJrXCIsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybENvbnZlcnRlciB9KVxuXSwgSG1hY0NyeXB0b0tleS5wcm90b3R5cGUsIFwiZGF0YVwiLCB2b2lkIDApO1xuXG5jbGFzcyBIbWFjUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLkhtYWNQcm92aWRlciB7XG4gICAgYXN5bmMgb25HZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gKGFsZ29yaXRobS5sZW5ndGggfHwgdGhpcy5nZXREZWZhdWx0TGVuZ3RoKGFsZ29yaXRobS5oYXNoLm5hbWUpKSA+PiAzIDw8IDM7XG4gICAgICAgIGNvbnN0IGtleSA9IG5ldyBIbWFjQ3J5cHRvS2V5KCk7XG4gICAgICAgIGtleS5hbGdvcml0aG0gPSB7XG4gICAgICAgICAgICAuLi5hbGdvcml0aG0sXG4gICAgICAgICAgICBsZW5ndGgsXG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgIH07XG4gICAgICAgIGtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBrZXkudXNhZ2VzID0ga2V5VXNhZ2VzO1xuICAgICAgICBrZXkuZGF0YSA9IGNyeXB0by5yYW5kb21CeXRlcyhsZW5ndGggPj4gMyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgYXN5bmMgb25TaWduKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGNyeXB0b0FsZyA9IFNoYUNyeXB0by5nZXRBbGdvcml0aG1OYW1lKGtleS5hbGdvcml0aG0uaGFzaCk7XG4gICAgICAgIGNvbnN0IGhtYWMgPSBjcnlwdG8uY3JlYXRlSG1hYyhjcnlwdG9BbGcsIGdldENyeXB0b0tleShrZXkpLmRhdGEpXG4gICAgICAgICAgICAudXBkYXRlKEJ1ZmZlciQxLmZyb20oZGF0YSkpLmRpZ2VzdCgpO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoaG1hYykuYnVmZmVyO1xuICAgIH1cbiAgICBhc3luYyBvblZlcmlmeShhbGdvcml0aG0sIGtleSwgc2lnbmF0dXJlLCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGNyeXB0b0FsZyA9IFNoYUNyeXB0by5nZXRBbGdvcml0aG1OYW1lKGtleS5hbGdvcml0aG0uaGFzaCk7XG4gICAgICAgIGNvbnN0IGhtYWMgPSBjcnlwdG8uY3JlYXRlSG1hYyhjcnlwdG9BbGcsIGdldENyeXB0b0tleShrZXkpLmRhdGEpXG4gICAgICAgICAgICAudXBkYXRlKEJ1ZmZlciQxLmZyb20oZGF0YSkpLmRpZ2VzdCgpO1xuICAgICAgICByZXR1cm4gaG1hYy5jb21wYXJlKEJ1ZmZlciQxLmZyb20oc2lnbmF0dXJlKSkgPT09IDA7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGxldCBrZXk7XG4gICAgICAgIHN3aXRjaCAoZm9ybWF0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJqd2tcIjpcbiAgICAgICAgICAgICAgICBrZXkgPSBKc29uUGFyc2VyLmZyb21KU09OKGtleURhdGEsIHsgdGFyZ2V0U2NoZW1hOiBIbWFjQ3J5cHRvS2V5IH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInJhd1wiOlxuICAgICAgICAgICAgICAgIGtleSA9IG5ldyBIbWFjQ3J5cHRvS2V5KCk7XG4gICAgICAgICAgICAgICAga2V5LmRhdGEgPSBCdWZmZXIkMS5mcm9tKGtleURhdGEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImZvcm1hdDogTXVzdCBiZSAnandrJyBvciAncmF3J1wiKTtcbiAgICAgICAgfVxuICAgICAgICBrZXkuYWxnb3JpdGhtID0ge1xuICAgICAgICAgICAgaGFzaDogeyBuYW1lOiBhbGdvcml0aG0uaGFzaC5uYW1lIH0sXG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICBsZW5ndGg6IGtleS5kYXRhLmxlbmd0aCA8PCAzLFxuICAgICAgICB9O1xuICAgICAgICBrZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAga2V5LnVzYWdlcyA9IGtleVVzYWdlcztcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBhc3luYyBvbkV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICBzd2l0Y2ggKGZvcm1hdC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiandrXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEpzb25TZXJpYWxpemVyLnRvSlNPTihnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgICAgICAgICBjYXNlIFwicmF3XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGdldENyeXB0b0tleShrZXkpLmRhdGEpLmJ1ZmZlcjtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJmb3JtYXQ6IE11c3QgYmUgJ2p3aycgb3IgJ3JhdydcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgaWYgKCEoZ2V0Q3J5cHRvS2V5KGtleSkgaW5zdGFuY2VvZiBIbWFjQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleTogSXMgbm90IEhNQUMgQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBIa2RmQ3J5cHRvS2V5IGV4dGVuZHMgQ3J5cHRvS2V5IHtcbn1cblxuY2xhc3MgSGtkZlByb3ZpZGVyIGV4dGVuZHMgY29yZS5Ia2RmUHJvdmlkZXIge1xuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGlmIChmb3JtYXQudG9Mb3dlckNhc2UoKSAhPT0gXCJyYXdcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJPcGVyYXRpb24gbm90IHN1cHBvcnRlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBrZXkgPSBuZXcgSGtkZkNyeXB0b0tleSgpO1xuICAgICAgICBrZXkuZGF0YSA9IEJ1ZmZlciQxLmZyb20oa2V5RGF0YSk7XG4gICAgICAgIGtleS5hbGdvcml0aG0gPSB7IG5hbWU6IHRoaXMubmFtZSB9O1xuICAgICAgICBrZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAga2V5LnVzYWdlcyA9IGtleVVzYWdlcztcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBhc3luYyBvbkRlcml2ZUJpdHMocGFyYW1zLCBiYXNlS2V5LCBsZW5ndGgpIHtcbiAgICAgICAgY29uc3QgaGFzaCA9IHBhcmFtcy5oYXNoLm5hbWUucmVwbGFjZShcIi1cIiwgXCJcIik7XG4gICAgICAgIGNvbnN0IGhhc2hMZW5ndGggPSBjcnlwdG8uY3JlYXRlSGFzaChoYXNoKS5kaWdlc3QoKS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGJ5dGVMZW5ndGggPSBsZW5ndGggLyA4O1xuICAgICAgICBjb25zdCBpbmZvID0gQnVmZmVyU291cmNlQ29udmVydGVyJDEudG9VaW50OEFycmF5KHBhcmFtcy5pbmZvKTtcbiAgICAgICAgY29uc3QgUFJLID0gY3J5cHRvLmNyZWF0ZUhtYWMoaGFzaCwgQnVmZmVyU291cmNlQ29udmVydGVyJDEudG9VaW50OEFycmF5KHBhcmFtcy5zYWx0KSlcbiAgICAgICAgICAgIC51cGRhdGUoQnVmZmVyU291cmNlQ29udmVydGVyJDEudG9VaW50OEFycmF5KGdldENyeXB0b0tleShiYXNlS2V5KS5kYXRhKSlcbiAgICAgICAgICAgIC5kaWdlc3QoKTtcbiAgICAgICAgY29uc3QgYmxvY2tzID0gW0J1ZmZlciQxLmFsbG9jKDApXTtcbiAgICAgICAgY29uc3QgYmxvY2tDb3VudCA9IE1hdGguY2VpbChieXRlTGVuZ3RoIC8gaGFzaExlbmd0aCkgKyAxO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGJsb2NrQ291bnQ7ICsraSkge1xuICAgICAgICAgICAgYmxvY2tzLnB1c2goY3J5cHRvLmNyZWF0ZUhtYWMoaGFzaCwgUFJLKVxuICAgICAgICAgICAgICAgIC51cGRhdGUoQnVmZmVyJDEuY29uY2F0KFtibG9ja3NbaSAtIDFdLCBpbmZvLCBCdWZmZXIkMS5mcm9tKFtpXSldKSlcbiAgICAgICAgICAgICAgICAuZGlnZXN0KCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBCdWZmZXIkMS5jb25jYXQoYmxvY2tzKS5zbGljZSgwLCBieXRlTGVuZ3RoKTtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgaWYgKCEoZ2V0Q3J5cHRvS2V5KGtleSkgaW5zdGFuY2VvZiBIa2RmQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleTogSXMgbm90IEhLREYgQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBTaGFrZUNyeXB0byB7XG4gICAgc3RhdGljIGRpZ2VzdChhbGdvcml0aG0sIGRhdGEpIHtcbiAgICAgICAgY29uc3QgaGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKGFsZ29yaXRobS5uYW1lLnRvTG93ZXJDYXNlKCksIHsgb3V0cHV0TGVuZ3RoOiBhbGdvcml0aG0ubGVuZ3RoIH0pXG4gICAgICAgICAgICAudXBkYXRlKEJ1ZmZlciQxLmZyb20oZGF0YSkpLmRpZ2VzdCgpO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoaGFzaCkuYnVmZmVyO1xuICAgIH1cbn1cblxuY2xhc3MgU2hha2UxMjhQcm92aWRlciBleHRlbmRzIGNvcmUuU2hha2UxMjhQcm92aWRlciB7XG4gICAgYXN5bmMgb25EaWdlc3QoYWxnb3JpdGhtLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBTaGFrZUNyeXB0by5kaWdlc3QoYWxnb3JpdGhtLCBkYXRhKTtcbiAgICB9XG59XG5cbmNsYXNzIFNoYWtlMjU2UHJvdmlkZXIgZXh0ZW5kcyBjb3JlLlNoYWtlMjU2UHJvdmlkZXIge1xuICAgIGFzeW5jIG9uRGlnZXN0KGFsZ29yaXRobSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gU2hha2VDcnlwdG8uZGlnZXN0KGFsZ29yaXRobSwgZGF0YSk7XG4gICAgfVxufVxuXG5jbGFzcyBTdWJ0bGVDcnlwdG8gZXh0ZW5kcyBjb3JlLlN1YnRsZUNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBBZXNDYmNQcm92aWRlcigpKTtcbiAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBBZXNDdHJQcm92aWRlcigpKTtcbiAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBBZXNHY21Qcm92aWRlcigpKTtcbiAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBBZXNDbWFjUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgQWVzS3dQcm92aWRlcigpKTtcbiAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBBZXNFY2JQcm92aWRlcigpKTtcbiAgICAgICAgY29uc3QgY2lwaGVycyA9IGNyeXB0by5nZXRDaXBoZXJzKCk7XG4gICAgICAgIGlmIChjaXBoZXJzLmluY2x1ZGVzKFwiZGVzLWNiY1wiKSkge1xuICAgICAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBEZXNDYmNQcm92aWRlcigpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IERlc0VkZTNDYmNQcm92aWRlcigpKTtcbiAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBSc2FTc2FQcm92aWRlcigpKTtcbiAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBSc2FQc3NQcm92aWRlcigpKTtcbiAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBSc2FPYWVwUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgUnNhRXNQcm92aWRlcigpKTtcbiAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBFY2RzYVByb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IEVjZGhQcm92aWRlcigpKTtcbiAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBTaGExUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgU2hhMjU2UHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgU2hhMzg0UHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgU2hhNTEyUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgUGJrZGYyUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgSG1hY1Byb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IEhrZGZQcm92aWRlcigpKTtcbiAgICAgICAgY29uc3Qgbm9kZU1ham9yVmVyc2lvbiA9IChfYSA9IC9edihcXGQrKS8uZXhlYyhwcm9jZXNzLnZlcnNpb24pKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2FbMV07XG4gICAgICAgIGlmIChub2RlTWFqb3JWZXJzaW9uICYmIHBhcnNlSW50KG5vZGVNYWpvclZlcnNpb24sIDEwKSA+PSAxMikge1xuICAgICAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBTaGFrZTEyOFByb3ZpZGVyKCkpO1xuICAgICAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBTaGFrZTI1NlByb3ZpZGVyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhhc2hlcyA9IGNyeXB0by5nZXRIYXNoZXMoKTtcbiAgICAgICAgaWYgKGhhc2hlcy5pbmNsdWRlcyhcInNoYTMtMjU2XCIpKSB7XG4gICAgICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IFNoYTMyNTZQcm92aWRlcigpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaGFzaGVzLmluY2x1ZGVzKFwic2hhMy0zODRcIikpIHtcbiAgICAgICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgU2hhMzM4NFByb3ZpZGVyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChoYXNoZXMuaW5jbHVkZXMoXCJzaGEzLTUxMlwiKSkge1xuICAgICAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBTaGEzNTEyUHJvdmlkZXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGVNYWpvclZlcnNpb24gJiYgcGFyc2VJbnQobm9kZU1ham9yVmVyc2lvbiwgMTApID49IDE0KSB7XG4gICAgICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IEVkRHNhUHJvdmlkZXIoKSk7XG4gICAgICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IEVjZGhFc1Byb3ZpZGVyKCkpO1xuICAgICAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBFZDI1NTE5UHJvdmlkZXIoKSk7XG4gICAgICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IFgyNTUxOVByb3ZpZGVyKCkpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBDcnlwdG8gZXh0ZW5kcyBjb3JlLkNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuc3VidGxlID0gbmV3IFN1YnRsZUNyeXB0bygpO1xuICAgIH1cbiAgICBnZXRSYW5kb21WYWx1ZXMoYXJyYXkpIHtcbiAgICAgICAgaWYgKCFBcnJheUJ1ZmZlci5pc1ZpZXcoYXJyYXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2dldFJhbmRvbVZhbHVlcycgb24gJ0NyeXB0byc6IHBhcmFtZXRlciAxIGlzIG5vdCBvZiB0eXBlICdBcnJheUJ1ZmZlclZpZXcnXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlciQxLmZyb20oYXJyYXkuYnVmZmVyLCBhcnJheS5ieXRlT2Zmc2V0LCBhcnJheS5ieXRlTGVuZ3RoKTtcbiAgICAgICAgY3J5cHRvLnJhbmRvbUZpbGxTeW5jKGJ1ZmZlcik7XG4gICAgICAgIHJldHVybiBhcnJheTtcbiAgICB9XG59XG5cbmV4cG9ydCB7IENyeXB0byB9O1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmV4cG9ydCB7IGludGVybmFsU3ltYm9sLCBpbnRlcm5hbFN0YXRlU3ltYm9sLCBpbnN0YW5jZVN5bWJvbCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNC4wXG4gKi9cbmNvbnN0IGludGVybmFsU3ltYm9sID0gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvaW50ZXJuYWxcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgaW50ZXJuYWxTdGF0ZVN5bWJvbCA9IFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL3N0YXRlXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpbnN0YW5jZVN5bWJvbCA9IFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2luc3RhbmNlXCIpO1xuIiwgImV4cG9ydCB2YXIgdG9wID0gJ3RvcCc7XG5leHBvcnQgdmFyIGJvdHRvbSA9ICdib3R0b20nO1xuZXhwb3J0IHZhciByaWdodCA9ICdyaWdodCc7XG5leHBvcnQgdmFyIGxlZnQgPSAnbGVmdCc7XG5leHBvcnQgdmFyIGF1dG8gPSAnYXV0byc7XG5leHBvcnQgdmFyIGJhc2VQbGFjZW1lbnRzID0gW3RvcCwgYm90dG9tLCByaWdodCwgbGVmdF07XG5leHBvcnQgdmFyIHN0YXJ0ID0gJ3N0YXJ0JztcbmV4cG9ydCB2YXIgZW5kID0gJ2VuZCc7XG5leHBvcnQgdmFyIGNsaXBwaW5nUGFyZW50cyA9ICdjbGlwcGluZ1BhcmVudHMnO1xuZXhwb3J0IHZhciB2aWV3cG9ydCA9ICd2aWV3cG9ydCc7XG5leHBvcnQgdmFyIHBvcHBlciA9ICdwb3BwZXInO1xuZXhwb3J0IHZhciByZWZlcmVuY2UgPSAncmVmZXJlbmNlJztcbmV4cG9ydCB2YXIgdmFyaWF0aW9uUGxhY2VtZW50cyA9IC8qI19fUFVSRV9fKi9iYXNlUGxhY2VtZW50cy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGxhY2VtZW50KSB7XG4gIHJldHVybiBhY2MuY29uY2F0KFtwbGFjZW1lbnQgKyBcIi1cIiArIHN0YXJ0LCBwbGFjZW1lbnQgKyBcIi1cIiArIGVuZF0pO1xufSwgW10pO1xuZXhwb3J0IHZhciBwbGFjZW1lbnRzID0gLyojX19QVVJFX18qL1tdLmNvbmNhdChiYXNlUGxhY2VtZW50cywgW2F1dG9dKS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGxhY2VtZW50KSB7XG4gIHJldHVybiBhY2MuY29uY2F0KFtwbGFjZW1lbnQsIHBsYWNlbWVudCArIFwiLVwiICsgc3RhcnQsIHBsYWNlbWVudCArIFwiLVwiICsgZW5kXSk7XG59LCBbXSk7IC8vIG1vZGlmaWVycyB0aGF0IG5lZWQgdG8gcmVhZCB0aGUgRE9NXG5cbmV4cG9ydCB2YXIgYmVmb3JlUmVhZCA9ICdiZWZvcmVSZWFkJztcbmV4cG9ydCB2YXIgcmVhZCA9ICdyZWFkJztcbmV4cG9ydCB2YXIgYWZ0ZXJSZWFkID0gJ2FmdGVyUmVhZCc7IC8vIHB1cmUtbG9naWMgbW9kaWZpZXJzXG5cbmV4cG9ydCB2YXIgYmVmb3JlTWFpbiA9ICdiZWZvcmVNYWluJztcbmV4cG9ydCB2YXIgbWFpbiA9ICdtYWluJztcbmV4cG9ydCB2YXIgYWZ0ZXJNYWluID0gJ2FmdGVyTWFpbic7IC8vIG1vZGlmaWVyIHdpdGggdGhlIHB1cnBvc2UgdG8gd3JpdGUgdG8gdGhlIERPTSAob3Igd3JpdGUgaW50byBhIGZyYW1ld29yayBzdGF0ZSlcblxuZXhwb3J0IHZhciBiZWZvcmVXcml0ZSA9ICdiZWZvcmVXcml0ZSc7XG5leHBvcnQgdmFyIHdyaXRlID0gJ3dyaXRlJztcbmV4cG9ydCB2YXIgYWZ0ZXJXcml0ZSA9ICdhZnRlcldyaXRlJztcbmV4cG9ydCB2YXIgbW9kaWZpZXJQaGFzZXMgPSBbYmVmb3JlUmVhZCwgcmVhZCwgYWZ0ZXJSZWFkLCBiZWZvcmVNYWluLCBtYWluLCBhZnRlck1haW4sIGJlZm9yZVdyaXRlLCB3cml0ZSwgYWZ0ZXJXcml0ZV07IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE5vZGVOYW1lKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQgPyAoZWxlbWVudC5ub2RlTmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKSA6IG51bGw7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFdpbmRvdyhub2RlKSB7XG4gIGlmIChub2RlID09IG51bGwpIHtcbiAgICByZXR1cm4gd2luZG93O1xuICB9XG5cbiAgaWYgKG5vZGUudG9TdHJpbmcoKSAhPT0gJ1tvYmplY3QgV2luZG93XScpIHtcbiAgICB2YXIgb3duZXJEb2N1bWVudCA9IG5vZGUub3duZXJEb2N1bWVudDtcbiAgICByZXR1cm4gb3duZXJEb2N1bWVudCA/IG93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcgfHwgd2luZG93IDogd2luZG93O1xuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59IiwgImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5cbmZ1bmN0aW9uIGlzRWxlbWVudChub2RlKSB7XG4gIHZhciBPd25FbGVtZW50ID0gZ2V0V2luZG93KG5vZGUpLkVsZW1lbnQ7XG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgT3duRWxlbWVudCB8fCBub2RlIGluc3RhbmNlb2YgRWxlbWVudDtcbn1cblxuZnVuY3Rpb24gaXNIVE1MRWxlbWVudChub2RlKSB7XG4gIHZhciBPd25FbGVtZW50ID0gZ2V0V2luZG93KG5vZGUpLkhUTUxFbGVtZW50O1xuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIE93bkVsZW1lbnQgfHwgbm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50O1xufVxuXG5mdW5jdGlvbiBpc1NoYWRvd1Jvb3Qobm9kZSkge1xuICAvLyBJRSAxMSBoYXMgbm8gU2hhZG93Um9vdFxuICBpZiAodHlwZW9mIFNoYWRvd1Jvb3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIE93bkVsZW1lbnQgPSBnZXRXaW5kb3cobm9kZSkuU2hhZG93Um9vdDtcbiAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBPd25FbGVtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBTaGFkb3dSb290O1xufVxuXG5leHBvcnQgeyBpc0VsZW1lbnQsIGlzSFRNTEVsZW1lbnQsIGlzU2hhZG93Um9vdCB9OyIsICJpbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4uL2RvbS11dGlscy9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuLi9kb20tdXRpbHMvaW5zdGFuY2VPZi5qc1wiOyAvLyBUaGlzIG1vZGlmaWVyIHRha2VzIHRoZSBzdHlsZXMgcHJlcGFyZWQgYnkgdGhlIGBjb21wdXRlU3R5bGVzYCBtb2RpZmllclxuLy8gYW5kIGFwcGxpZXMgdGhlbSB0byB0aGUgSFRNTEVsZW1lbnRzIHN1Y2ggYXMgcG9wcGVyIGFuZCBhcnJvd1xuXG5mdW5jdGlvbiBhcHBseVN0eWxlcyhfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGU7XG4gIE9iamVjdC5rZXlzKHN0YXRlLmVsZW1lbnRzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdmFyIHN0eWxlID0gc3RhdGUuc3R5bGVzW25hbWVdIHx8IHt9O1xuICAgIHZhciBhdHRyaWJ1dGVzID0gc3RhdGUuYXR0cmlidXRlc1tuYW1lXSB8fCB7fTtcbiAgICB2YXIgZWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzW25hbWVdOyAvLyBhcnJvdyBpcyBvcHRpb25hbCArIHZpcnR1YWwgZWxlbWVudHNcblxuICAgIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCAhZ2V0Tm9kZU5hbWUoZWxlbWVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIEZsb3cgZG9lc24ndCBzdXBwb3J0IHRvIGV4dGVuZCB0aGlzIHByb3BlcnR5LCBidXQgaXQncyB0aGUgbW9zdFxuICAgIC8vIGVmZmVjdGl2ZSB3YXkgdG8gYXBwbHkgc3R5bGVzIHRvIGFuIEhUTUxFbGVtZW50XG4gICAgLy8gJEZsb3dGaXhNZVtjYW5ub3Qtd3JpdGVdXG5cblxuICAgIE9iamVjdC5hc3NpZ24oZWxlbWVudC5zdHlsZSwgc3R5bGUpO1xuICAgIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGF0dHJpYnV0ZXNbbmFtZV07XG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSA9PT0gdHJ1ZSA/ICcnIDogdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZWZmZWN0KF9yZWYyKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYyLnN0YXRlO1xuICB2YXIgaW5pdGlhbFN0eWxlcyA9IHtcbiAgICBwb3BwZXI6IHtcbiAgICAgIHBvc2l0aW9uOiBzdGF0ZS5vcHRpb25zLnN0cmF0ZWd5LFxuICAgICAgbGVmdDogJzAnLFxuICAgICAgdG9wOiAnMCcsXG4gICAgICBtYXJnaW46ICcwJ1xuICAgIH0sXG4gICAgYXJyb3c6IHtcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnXG4gICAgfSxcbiAgICByZWZlcmVuY2U6IHt9XG4gIH07XG4gIE9iamVjdC5hc3NpZ24oc3RhdGUuZWxlbWVudHMucG9wcGVyLnN0eWxlLCBpbml0aWFsU3R5bGVzLnBvcHBlcik7XG4gIHN0YXRlLnN0eWxlcyA9IGluaXRpYWxTdHlsZXM7XG5cbiAgaWYgKHN0YXRlLmVsZW1lbnRzLmFycm93KSB7XG4gICAgT2JqZWN0LmFzc2lnbihzdGF0ZS5lbGVtZW50cy5hcnJvdy5zdHlsZSwgaW5pdGlhbFN0eWxlcy5hcnJvdyk7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIE9iamVjdC5rZXlzKHN0YXRlLmVsZW1lbnRzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICB2YXIgZWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzW25hbWVdO1xuICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBzdGF0ZS5hdHRyaWJ1dGVzW25hbWVdIHx8IHt9O1xuICAgICAgdmFyIHN0eWxlUHJvcGVydGllcyA9IE9iamVjdC5rZXlzKHN0YXRlLnN0eWxlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSA/IHN0YXRlLnN0eWxlc1tuYW1lXSA6IGluaXRpYWxTdHlsZXNbbmFtZV0pOyAvLyBTZXQgYWxsIHZhbHVlcyB0byBhbiBlbXB0eSBzdHJpbmcgdG8gdW5zZXQgdGhlbVxuXG4gICAgICB2YXIgc3R5bGUgPSBzdHlsZVByb3BlcnRpZXMucmVkdWNlKGZ1bmN0aW9uIChzdHlsZSwgcHJvcGVydHkpIHtcbiAgICAgICAgc3R5bGVbcHJvcGVydHldID0gJyc7XG4gICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgIH0sIHt9KTsgLy8gYXJyb3cgaXMgb3B0aW9uYWwgKyB2aXJ0dWFsIGVsZW1lbnRzXG5cbiAgICAgIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCAhZ2V0Tm9kZU5hbWUoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBPYmplY3QuYXNzaWduKGVsZW1lbnQuc3R5bGUsIHN0eWxlKTtcbiAgICAgIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLmZvckVhY2goZnVuY3Rpb24gKGF0dHJpYnV0ZSkge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShhdHRyaWJ1dGUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdhcHBseVN0eWxlcycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnd3JpdGUnLFxuICBmbjogYXBwbHlTdHlsZXMsXG4gIGVmZmVjdDogZWZmZWN0LFxuICByZXF1aXJlczogWydjb21wdXRlU3R5bGVzJ11cbn07IiwgImltcG9ydCB7IGF1dG8gfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQuc3BsaXQoJy0nKVswXTtcbn0iLCAiZXhwb3J0IHZhciBtYXggPSBNYXRoLm1heDtcbmV4cG9ydCB2YXIgbWluID0gTWF0aC5taW47XG5leHBvcnQgdmFyIHJvdW5kID0gTWF0aC5yb3VuZDsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VUFTdHJpbmcoKSB7XG4gIHZhciB1YURhdGEgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YTtcblxuICBpZiAodWFEYXRhICE9IG51bGwgJiYgdWFEYXRhLmJyYW5kcyAmJiBBcnJheS5pc0FycmF5KHVhRGF0YS5icmFuZHMpKSB7XG4gICAgcmV0dXJuIHVhRGF0YS5icmFuZHMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gaXRlbS5icmFuZCArIFwiL1wiICsgaXRlbS52ZXJzaW9uO1xuICAgIH0pLmpvaW4oJyAnKTtcbiAgfVxuXG4gIHJldHVybiBuYXZpZ2F0b3IudXNlckFnZW50O1xufSIsICJpbXBvcnQgZ2V0VUFTdHJpbmcgZnJvbSBcIi4uL3V0aWxzL3VzZXJBZ2VudC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNMYXlvdXRWaWV3cG9ydCgpIHtcbiAgcmV0dXJuICEvXigoPyFjaHJvbWV8YW5kcm9pZCkuKSpzYWZhcmkvaS50ZXN0KGdldFVBU3RyaW5nKCkpO1xufSIsICJpbXBvcnQgeyBpc0VsZW1lbnQsIGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgeyByb3VuZCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGlzTGF5b3V0Vmlld3BvcnQgZnJvbSBcIi4vaXNMYXlvdXRWaWV3cG9ydC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIGluY2x1ZGVTY2FsZSwgaXNGaXhlZFN0cmF0ZWd5KSB7XG4gIGlmIChpbmNsdWRlU2NhbGUgPT09IHZvaWQgMCkge1xuICAgIGluY2x1ZGVTY2FsZSA9IGZhbHNlO1xuICB9XG5cbiAgaWYgKGlzRml4ZWRTdHJhdGVneSA9PT0gdm9pZCAwKSB7XG4gICAgaXNGaXhlZFN0cmF0ZWd5ID0gZmFsc2U7XG4gIH1cblxuICB2YXIgY2xpZW50UmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHZhciBzY2FsZVggPSAxO1xuICB2YXIgc2NhbGVZID0gMTtcblxuICBpZiAoaW5jbHVkZVNjYWxlICYmIGlzSFRNTEVsZW1lbnQoZWxlbWVudCkpIHtcbiAgICBzY2FsZVggPSBlbGVtZW50Lm9mZnNldFdpZHRoID4gMCA/IHJvdW5kKGNsaWVudFJlY3Qud2lkdGgpIC8gZWxlbWVudC5vZmZzZXRXaWR0aCB8fCAxIDogMTtcbiAgICBzY2FsZVkgPSBlbGVtZW50Lm9mZnNldEhlaWdodCA+IDAgPyByb3VuZChjbGllbnRSZWN0LmhlaWdodCkgLyBlbGVtZW50Lm9mZnNldEhlaWdodCB8fCAxIDogMTtcbiAgfVxuXG4gIHZhciBfcmVmID0gaXNFbGVtZW50KGVsZW1lbnQpID8gZ2V0V2luZG93KGVsZW1lbnQpIDogd2luZG93LFxuICAgICAgdmlzdWFsVmlld3BvcnQgPSBfcmVmLnZpc3VhbFZpZXdwb3J0O1xuXG4gIHZhciBhZGRWaXN1YWxPZmZzZXRzID0gIWlzTGF5b3V0Vmlld3BvcnQoKSAmJiBpc0ZpeGVkU3RyYXRlZ3k7XG4gIHZhciB4ID0gKGNsaWVudFJlY3QubGVmdCArIChhZGRWaXN1YWxPZmZzZXRzICYmIHZpc3VhbFZpZXdwb3J0ID8gdmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdCA6IDApKSAvIHNjYWxlWDtcbiAgdmFyIHkgPSAoY2xpZW50UmVjdC50b3AgKyAoYWRkVmlzdWFsT2Zmc2V0cyAmJiB2aXN1YWxWaWV3cG9ydCA/IHZpc3VhbFZpZXdwb3J0Lm9mZnNldFRvcCA6IDApKSAvIHNjYWxlWTtcbiAgdmFyIHdpZHRoID0gY2xpZW50UmVjdC53aWR0aCAvIHNjYWxlWDtcbiAgdmFyIGhlaWdodCA9IGNsaWVudFJlY3QuaGVpZ2h0IC8gc2NhbGVZO1xuICByZXR1cm4ge1xuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICB0b3A6IHksXG4gICAgcmlnaHQ6IHggKyB3aWR0aCxcbiAgICBib3R0b206IHkgKyBoZWlnaHQsXG4gICAgbGVmdDogeCxcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcbn0iLCAiaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjsgLy8gUmV0dXJucyB0aGUgbGF5b3V0IHJlY3Qgb2YgYW4gZWxlbWVudCByZWxhdGl2ZSB0byBpdHMgb2Zmc2V0UGFyZW50LiBMYXlvdXRcbi8vIG1lYW5zIGl0IGRvZXNuJ3QgdGFrZSBpbnRvIGFjY291bnQgdHJhbnNmb3Jtcy5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0TGF5b3V0UmVjdChlbGVtZW50KSB7XG4gIHZhciBjbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQpOyAvLyBVc2UgdGhlIGNsaWVudFJlY3Qgc2l6ZXMgaWYgaXQncyBub3QgYmVlbiB0cmFuc2Zvcm1lZC5cbiAgLy8gRml4ZXMgaHR0cHM6Ly9naXRodWIuY29tL3BvcHBlcmpzL3BvcHBlci1jb3JlL2lzc3Vlcy8xMjIzXG5cbiAgdmFyIHdpZHRoID0gZWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgdmFyIGhlaWdodCA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuXG4gIGlmIChNYXRoLmFicyhjbGllbnRSZWN0LndpZHRoIC0gd2lkdGgpIDw9IDEpIHtcbiAgICB3aWR0aCA9IGNsaWVudFJlY3Qud2lkdGg7XG4gIH1cblxuICBpZiAoTWF0aC5hYnMoY2xpZW50UmVjdC5oZWlnaHQgLSBoZWlnaHQpIDw9IDEpIHtcbiAgICBoZWlnaHQgPSBjbGllbnRSZWN0LmhlaWdodDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgeDogZWxlbWVudC5vZmZzZXRMZWZ0LFxuICAgIHk6IGVsZW1lbnQub2Zmc2V0VG9wLFxuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodFxuICB9O1xufSIsICJpbXBvcnQgeyBpc1NoYWRvd1Jvb3QgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb250YWlucyhwYXJlbnQsIGNoaWxkKSB7XG4gIHZhciByb290Tm9kZSA9IGNoaWxkLmdldFJvb3ROb2RlICYmIGNoaWxkLmdldFJvb3ROb2RlKCk7IC8vIEZpcnN0LCBhdHRlbXB0IHdpdGggZmFzdGVyIG5hdGl2ZSBtZXRob2RcblxuICBpZiAocGFyZW50LmNvbnRhaW5zKGNoaWxkKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIHRoZW4gZmFsbGJhY2sgdG8gY3VzdG9tIGltcGxlbWVudGF0aW9uIHdpdGggU2hhZG93IERPTSBzdXBwb3J0XG4gIGVsc2UgaWYgKHJvb3ROb2RlICYmIGlzU2hhZG93Um9vdChyb290Tm9kZSkpIHtcbiAgICAgIHZhciBuZXh0ID0gY2hpbGQ7XG5cbiAgICAgIGRvIHtcbiAgICAgICAgaWYgKG5leHQgJiYgcGFyZW50LmlzU2FtZU5vZGUobmV4dCkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ106IG5lZWQgYSBiZXR0ZXIgd2F5IHRvIGhhbmRsZSB0aGlzLi4uXG5cblxuICAgICAgICBuZXh0ID0gbmV4dC5wYXJlbnROb2RlIHx8IG5leHQuaG9zdDtcbiAgICAgIH0gd2hpbGUgKG5leHQpO1xuICAgIH0gLy8gR2l2ZSB1cCwgdGhlIHJlc3VsdCBpcyBmYWxzZVxuXG5cbiAgcmV0dXJuIGZhbHNlO1xufSIsICJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KSB7XG4gIHJldHVybiBnZXRXaW5kb3coZWxlbWVudCkuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbn0iLCAiaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1RhYmxlRWxlbWVudChlbGVtZW50KSB7XG4gIHJldHVybiBbJ3RhYmxlJywgJ3RkJywgJ3RoJ10uaW5kZXhPZihnZXROb2RlTmFtZShlbGVtZW50KSkgPj0gMDtcbn0iLCAiaW1wb3J0IHsgaXNFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpIHtcbiAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXTogYXNzdW1lIGJvZHkgaXMgYWx3YXlzIGF2YWlsYWJsZVxuICByZXR1cm4gKChpc0VsZW1lbnQoZWxlbWVudCkgPyBlbGVtZW50Lm93bmVyRG9jdW1lbnQgOiAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgZWxlbWVudC5kb2N1bWVudCkgfHwgd2luZG93LmRvY3VtZW50KS5kb2N1bWVudEVsZW1lbnQ7XG59IiwgImltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCB7IGlzU2hhZG93Um9vdCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFBhcmVudE5vZGUoZWxlbWVudCkge1xuICBpZiAoZ2V0Tm9kZU5hbWUoZWxlbWVudCkgPT09ICdodG1sJykge1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG5cbiAgcmV0dXJuICgvLyB0aGlzIGlzIGEgcXVpY2tlciAoYnV0IGxlc3MgdHlwZSBzYWZlKSB3YXkgdG8gc2F2ZSBxdWl0ZSBzb21lIGJ5dGVzIGZyb20gdGhlIGJ1bmRsZVxuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl1cbiAgICAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgICBlbGVtZW50LmFzc2lnbmVkU2xvdCB8fCAvLyBzdGVwIGludG8gdGhlIHNoYWRvdyBET00gb2YgdGhlIHBhcmVudCBvZiBhIHNsb3R0ZWQgbm9kZVxuICAgIGVsZW1lbnQucGFyZW50Tm9kZSB8fCAoIC8vIERPTSBFbGVtZW50IGRldGVjdGVkXG4gICAgaXNTaGFkb3dSb290KGVsZW1lbnQpID8gZWxlbWVudC5ob3N0IDogbnVsbCkgfHwgLy8gU2hhZG93Um9vdCBkZXRlY3RlZFxuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdOiBIVE1MRWxlbWVudCBpcyBhIE5vZGVcbiAgICBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkgLy8gZmFsbGJhY2tcblxuICApO1xufSIsICJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50LCBpc1NoYWRvd1Jvb3QgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgaXNUYWJsZUVsZW1lbnQgZnJvbSBcIi4vaXNUYWJsZUVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRQYXJlbnROb2RlIGZyb20gXCIuL2dldFBhcmVudE5vZGUuanNcIjtcbmltcG9ydCBnZXRVQVN0cmluZyBmcm9tIFwiLi4vdXRpbHMvdXNlckFnZW50LmpzXCI7XG5cbmZ1bmN0aW9uIGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCkge1xuICBpZiAoIWlzSFRNTEVsZW1lbnQoZWxlbWVudCkgfHwgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BvcHBlcmpzL3BvcHBlci1jb3JlL2lzc3Vlcy84MzdcbiAgZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbiA9PT0gJ2ZpeGVkJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQub2Zmc2V0UGFyZW50O1xufSAvLyBgLm9mZnNldFBhcmVudGAgcmVwb3J0cyBgbnVsbGAgZm9yIGZpeGVkIGVsZW1lbnRzLCB3aGlsZSBhYnNvbHV0ZSBlbGVtZW50c1xuLy8gcmV0dXJuIHRoZSBjb250YWluaW5nIGJsb2NrXG5cblxuZnVuY3Rpb24gZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHtcbiAgdmFyIGlzRmlyZWZveCA9IC9maXJlZm94L2kudGVzdChnZXRVQVN0cmluZygpKTtcbiAgdmFyIGlzSUUgPSAvVHJpZGVudC9pLnRlc3QoZ2V0VUFTdHJpbmcoKSk7XG5cbiAgaWYgKGlzSUUgJiYgaXNIVE1MRWxlbWVudChlbGVtZW50KSkge1xuICAgIC8vIEluIElFIDksIDEwIGFuZCAxMSBmaXhlZCBlbGVtZW50cyBjb250YWluaW5nIGJsb2NrIGlzIGFsd2F5cyBlc3RhYmxpc2hlZCBieSB0aGUgdmlld3BvcnRcbiAgICB2YXIgZWxlbWVudENzcyA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG5cbiAgICBpZiAoZWxlbWVudENzcy5wb3NpdGlvbiA9PT0gJ2ZpeGVkJykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgdmFyIGN1cnJlbnROb2RlID0gZ2V0UGFyZW50Tm9kZShlbGVtZW50KTtcblxuICBpZiAoaXNTaGFkb3dSb290KGN1cnJlbnROb2RlKSkge1xuICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUuaG9zdDtcbiAgfVxuXG4gIHdoaWxlIChpc0hUTUxFbGVtZW50KGN1cnJlbnROb2RlKSAmJiBbJ2h0bWwnLCAnYm9keSddLmluZGV4T2YoZ2V0Tm9kZU5hbWUoY3VycmVudE5vZGUpKSA8IDApIHtcbiAgICB2YXIgY3NzID0gZ2V0Q29tcHV0ZWRTdHlsZShjdXJyZW50Tm9kZSk7IC8vIFRoaXMgaXMgbm9uLWV4aGF1c3RpdmUgYnV0IGNvdmVycyB0aGUgbW9zdCBjb21tb24gQ1NTIHByb3BlcnRpZXMgdGhhdFxuICAgIC8vIGNyZWF0ZSBhIGNvbnRhaW5pbmcgYmxvY2suXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0NvbnRhaW5pbmdfYmxvY2sjaWRlbnRpZnlpbmdfdGhlX2NvbnRhaW5pbmdfYmxvY2tcblxuICAgIGlmIChjc3MudHJhbnNmb3JtICE9PSAnbm9uZScgfHwgY3NzLnBlcnNwZWN0aXZlICE9PSAnbm9uZScgfHwgY3NzLmNvbnRhaW4gPT09ICdwYWludCcgfHwgWyd0cmFuc2Zvcm0nLCAncGVyc3BlY3RpdmUnXS5pbmRleE9mKGNzcy53aWxsQ2hhbmdlKSAhPT0gLTEgfHwgaXNGaXJlZm94ICYmIGNzcy53aWxsQ2hhbmdlID09PSAnZmlsdGVyJyB8fCBpc0ZpcmVmb3ggJiYgY3NzLmZpbHRlciAmJiBjc3MuZmlsdGVyICE9PSAnbm9uZScpIHtcbiAgICAgIHJldHVybiBjdXJyZW50Tm9kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5wYXJlbnROb2RlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufSAvLyBHZXRzIHRoZSBjbG9zZXN0IGFuY2VzdG9yIHBvc2l0aW9uZWQgZWxlbWVudC4gSGFuZGxlcyBzb21lIGVkZ2UgY2FzZXMsXG4vLyBzdWNoIGFzIHRhYmxlIGFuY2VzdG9ycyBhbmQgY3Jvc3MgYnJvd3NlciBidWdzLlxuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE9mZnNldFBhcmVudChlbGVtZW50KSB7XG4gIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIHZhciBvZmZzZXRQYXJlbnQgPSBnZXRUcnVlT2Zmc2V0UGFyZW50KGVsZW1lbnQpO1xuXG4gIHdoaWxlIChvZmZzZXRQYXJlbnQgJiYgaXNUYWJsZUVsZW1lbnQob2Zmc2V0UGFyZW50KSAmJiBnZXRDb21wdXRlZFN0eWxlKG9mZnNldFBhcmVudCkucG9zaXRpb24gPT09ICdzdGF0aWMnKSB7XG4gICAgb2Zmc2V0UGFyZW50ID0gZ2V0VHJ1ZU9mZnNldFBhcmVudChvZmZzZXRQYXJlbnQpO1xuICB9XG5cbiAgaWYgKG9mZnNldFBhcmVudCAmJiAoZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSA9PT0gJ2h0bWwnIHx8IGdldE5vZGVOYW1lKG9mZnNldFBhcmVudCkgPT09ICdib2R5JyAmJiBnZXRDb21wdXRlZFN0eWxlKG9mZnNldFBhcmVudCkucG9zaXRpb24gPT09ICdzdGF0aWMnKSkge1xuICAgIHJldHVybiB3aW5kb3c7XG4gIH1cblxuICByZXR1cm4gb2Zmc2V0UGFyZW50IHx8IGdldENvbnRhaW5pbmdCbG9jayhlbGVtZW50KSB8fCB3aW5kb3c7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIFsndG9wJywgJ2JvdHRvbSddLmluZGV4T2YocGxhY2VtZW50KSA+PSAwID8gJ3gnIDogJ3knO1xufSIsICJpbXBvcnQgeyBtYXggYXMgbWF0aE1heCwgbWluIGFzIG1hdGhNaW4gfSBmcm9tIFwiLi9tYXRoLmpzXCI7XG5leHBvcnQgZnVuY3Rpb24gd2l0aGluKG1pbiwgdmFsdWUsIG1heCkge1xuICByZXR1cm4gbWF0aE1heChtaW4sIG1hdGhNaW4odmFsdWUsIG1heCkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhpbk1heENsYW1wKG1pbiwgdmFsdWUsIG1heCkge1xuICB2YXIgdiA9IHdpdGhpbihtaW4sIHZhbHVlLCBtYXgpO1xuICByZXR1cm4gdiA+IG1heCA/IG1heCA6IHY7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEZyZXNoU2lkZU9iamVjdCgpIHtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IDAsXG4gICAgcmlnaHQ6IDAsXG4gICAgYm90dG9tOiAwLFxuICAgIGxlZnQ6IDBcbiAgfTtcbn0iLCAiaW1wb3J0IGdldEZyZXNoU2lkZU9iamVjdCBmcm9tIFwiLi9nZXRGcmVzaFNpZGVPYmplY3QuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1lcmdlUGFkZGluZ09iamVjdChwYWRkaW5nT2JqZWN0KSB7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBnZXRGcmVzaFNpZGVPYmplY3QoKSwgcGFkZGluZ09iamVjdCk7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGV4cGFuZFRvSGFzaE1hcCh2YWx1ZSwga2V5cykge1xuICByZXR1cm4ga2V5cy5yZWR1Y2UoZnVuY3Rpb24gKGhhc2hNYXAsIGtleSkge1xuICAgIGhhc2hNYXBba2V5XSA9IHZhbHVlO1xuICAgIHJldHVybiBoYXNoTWFwO1xuICB9LCB7fSk7XG59IiwgImltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0TGF5b3V0UmVjdCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldExheW91dFJlY3QuanNcIjtcbmltcG9ydCBjb250YWlucyBmcm9tIFwiLi4vZG9tLXV0aWxzL2NvbnRhaW5zLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQuanNcIjtcbmltcG9ydCB7IHdpdGhpbiB9IGZyb20gXCIuLi91dGlscy93aXRoaW4uanNcIjtcbmltcG9ydCBtZXJnZVBhZGRpbmdPYmplY3QgZnJvbSBcIi4uL3V0aWxzL21lcmdlUGFkZGluZ09iamVjdC5qc1wiO1xuaW1wb3J0IGV4cGFuZFRvSGFzaE1hcCBmcm9tIFwiLi4vdXRpbHMvZXhwYW5kVG9IYXNoTWFwLmpzXCI7XG5pbXBvcnQgeyBsZWZ0LCByaWdodCwgYmFzZVBsYWNlbWVudHMsIHRvcCwgYm90dG9tIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxudmFyIHRvUGFkZGluZ09iamVjdCA9IGZ1bmN0aW9uIHRvUGFkZGluZ09iamVjdChwYWRkaW5nLCBzdGF0ZSkge1xuICBwYWRkaW5nID0gdHlwZW9mIHBhZGRpbmcgPT09ICdmdW5jdGlvbicgPyBwYWRkaW5nKE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnJlY3RzLCB7XG4gICAgcGxhY2VtZW50OiBzdGF0ZS5wbGFjZW1lbnRcbiAgfSkpIDogcGFkZGluZztcbiAgcmV0dXJuIG1lcmdlUGFkZGluZ09iamVjdCh0eXBlb2YgcGFkZGluZyAhPT0gJ251bWJlcicgPyBwYWRkaW5nIDogZXhwYW5kVG9IYXNoTWFwKHBhZGRpbmcsIGJhc2VQbGFjZW1lbnRzKSk7XG59O1xuXG5mdW5jdGlvbiBhcnJvdyhfcmVmKSB7XG4gIHZhciBfc3RhdGUkbW9kaWZpZXJzRGF0YSQ7XG5cbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWUsXG4gICAgICBvcHRpb25zID0gX3JlZi5vcHRpb25zO1xuICB2YXIgYXJyb3dFbGVtZW50ID0gc3RhdGUuZWxlbWVudHMuYXJyb3c7XG4gIHZhciBwb3BwZXJPZmZzZXRzID0gc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzO1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQoc3RhdGUucGxhY2VtZW50KTtcbiAgdmFyIGF4aXMgPSBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQoYmFzZVBsYWNlbWVudCk7XG4gIHZhciBpc1ZlcnRpY2FsID0gW2xlZnQsIHJpZ2h0XS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpID49IDA7XG4gIHZhciBsZW4gPSBpc1ZlcnRpY2FsID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuXG4gIGlmICghYXJyb3dFbGVtZW50IHx8ICFwb3BwZXJPZmZzZXRzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHBhZGRpbmdPYmplY3QgPSB0b1BhZGRpbmdPYmplY3Qob3B0aW9ucy5wYWRkaW5nLCBzdGF0ZSk7XG4gIHZhciBhcnJvd1JlY3QgPSBnZXRMYXlvdXRSZWN0KGFycm93RWxlbWVudCk7XG4gIHZhciBtaW5Qcm9wID0gYXhpcyA9PT0gJ3knID8gdG9wIDogbGVmdDtcbiAgdmFyIG1heFByb3AgPSBheGlzID09PSAneScgPyBib3R0b20gOiByaWdodDtcbiAgdmFyIGVuZERpZmYgPSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2VbbGVuXSArIHN0YXRlLnJlY3RzLnJlZmVyZW5jZVtheGlzXSAtIHBvcHBlck9mZnNldHNbYXhpc10gLSBzdGF0ZS5yZWN0cy5wb3BwZXJbbGVuXTtcbiAgdmFyIHN0YXJ0RGlmZiA9IHBvcHBlck9mZnNldHNbYXhpc10gLSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2VbYXhpc107XG4gIHZhciBhcnJvd09mZnNldFBhcmVudCA9IGdldE9mZnNldFBhcmVudChhcnJvd0VsZW1lbnQpO1xuICB2YXIgY2xpZW50U2l6ZSA9IGFycm93T2Zmc2V0UGFyZW50ID8gYXhpcyA9PT0gJ3knID8gYXJyb3dPZmZzZXRQYXJlbnQuY2xpZW50SGVpZ2h0IHx8IDAgOiBhcnJvd09mZnNldFBhcmVudC5jbGllbnRXaWR0aCB8fCAwIDogMDtcbiAgdmFyIGNlbnRlclRvUmVmZXJlbmNlID0gZW5kRGlmZiAvIDIgLSBzdGFydERpZmYgLyAyOyAvLyBNYWtlIHN1cmUgdGhlIGFycm93IGRvZXNuJ3Qgb3ZlcmZsb3cgdGhlIHBvcHBlciBpZiB0aGUgY2VudGVyIHBvaW50IGlzXG4gIC8vIG91dHNpZGUgb2YgdGhlIHBvcHBlciBib3VuZHNcblxuICB2YXIgbWluID0gcGFkZGluZ09iamVjdFttaW5Qcm9wXTtcbiAgdmFyIG1heCA9IGNsaWVudFNpemUgLSBhcnJvd1JlY3RbbGVuXSAtIHBhZGRpbmdPYmplY3RbbWF4UHJvcF07XG4gIHZhciBjZW50ZXIgPSBjbGllbnRTaXplIC8gMiAtIGFycm93UmVjdFtsZW5dIC8gMiArIGNlbnRlclRvUmVmZXJlbmNlO1xuICB2YXIgb2Zmc2V0ID0gd2l0aGluKG1pbiwgY2VudGVyLCBtYXgpOyAvLyBQcmV2ZW50cyBicmVha2luZyBzeW50YXggaGlnaGxpZ2h0aW5nLi4uXG5cbiAgdmFyIGF4aXNQcm9wID0gYXhpcztcbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IChfc3RhdGUkbW9kaWZpZXJzRGF0YSQgPSB7fSwgX3N0YXRlJG1vZGlmaWVyc0RhdGEkW2F4aXNQcm9wXSA9IG9mZnNldCwgX3N0YXRlJG1vZGlmaWVyc0RhdGEkLmNlbnRlck9mZnNldCA9IG9mZnNldCAtIGNlbnRlciwgX3N0YXRlJG1vZGlmaWVyc0RhdGEkKTtcbn1cblxuZnVuY3Rpb24gZWZmZWN0KF9yZWYyKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYyLnN0YXRlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYyLm9wdGlvbnM7XG4gIHZhciBfb3B0aW9ucyRlbGVtZW50ID0gb3B0aW9ucy5lbGVtZW50LFxuICAgICAgYXJyb3dFbGVtZW50ID0gX29wdGlvbnMkZWxlbWVudCA9PT0gdm9pZCAwID8gJ1tkYXRhLXBvcHBlci1hcnJvd10nIDogX29wdGlvbnMkZWxlbWVudDtcblxuICBpZiAoYXJyb3dFbGVtZW50ID09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH0gLy8gQ1NTIHNlbGVjdG9yXG5cblxuICBpZiAodHlwZW9mIGFycm93RWxlbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICBhcnJvd0VsZW1lbnQgPSBzdGF0ZS5lbGVtZW50cy5wb3BwZXIucXVlcnlTZWxlY3RvcihhcnJvd0VsZW1lbnQpO1xuXG4gICAgaWYgKCFhcnJvd0VsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpZiAoIWNvbnRhaW5zKHN0YXRlLmVsZW1lbnRzLnBvcHBlciwgYXJyb3dFbGVtZW50KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRlLmVsZW1lbnRzLmFycm93ID0gYXJyb3dFbGVtZW50O1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnYXJyb3cnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICBmbjogYXJyb3csXG4gIGVmZmVjdDogZWZmZWN0LFxuICByZXF1aXJlczogWydwb3BwZXJPZmZzZXRzJ10sXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFsncHJldmVudE92ZXJmbG93J11cbn07IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFZhcmlhdGlvbihwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5zcGxpdCgnLScpWzFdO1xufSIsICJpbXBvcnQgeyB0b3AsIGxlZnQsIHJpZ2h0LCBib3R0b20sIGVuZCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi4vdXRpbHMvZ2V0VmFyaWF0aW9uLmpzXCI7XG5pbXBvcnQgeyByb3VuZCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxudmFyIHVuc2V0U2lkZXMgPSB7XG4gIHRvcDogJ2F1dG8nLFxuICByaWdodDogJ2F1dG8nLFxuICBib3R0b206ICdhdXRvJyxcbiAgbGVmdDogJ2F1dG8nXG59OyAvLyBSb3VuZCB0aGUgb2Zmc2V0cyB0byB0aGUgbmVhcmVzdCBzdWl0YWJsZSBzdWJwaXhlbCBiYXNlZCBvbiB0aGUgRFBSLlxuLy8gWm9vbWluZyBjYW4gY2hhbmdlIHRoZSBEUFIsIGJ1dCBpdCBzZWVtcyB0byByZXBvcnQgYSB2YWx1ZSB0aGF0IHdpbGxcbi8vIGNsZWFubHkgZGl2aWRlIHRoZSB2YWx1ZXMgaW50byB0aGUgYXBwcm9wcmlhdGUgc3VicGl4ZWxzLlxuXG5mdW5jdGlvbiByb3VuZE9mZnNldHNCeURQUihfcmVmLCB3aW4pIHtcbiAgdmFyIHggPSBfcmVmLngsXG4gICAgICB5ID0gX3JlZi55O1xuICB2YXIgZHByID0gd2luLmRldmljZVBpeGVsUmF0aW8gfHwgMTtcbiAgcmV0dXJuIHtcbiAgICB4OiByb3VuZCh4ICogZHByKSAvIGRwciB8fCAwLFxuICAgIHk6IHJvdW5kKHkgKiBkcHIpIC8gZHByIHx8IDBcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hcFRvU3R5bGVzKF9yZWYyKSB7XG4gIHZhciBfT2JqZWN0JGFzc2lnbjI7XG5cbiAgdmFyIHBvcHBlciA9IF9yZWYyLnBvcHBlcixcbiAgICAgIHBvcHBlclJlY3QgPSBfcmVmMi5wb3BwZXJSZWN0LFxuICAgICAgcGxhY2VtZW50ID0gX3JlZjIucGxhY2VtZW50LFxuICAgICAgdmFyaWF0aW9uID0gX3JlZjIudmFyaWF0aW9uLFxuICAgICAgb2Zmc2V0cyA9IF9yZWYyLm9mZnNldHMsXG4gICAgICBwb3NpdGlvbiA9IF9yZWYyLnBvc2l0aW9uLFxuICAgICAgZ3B1QWNjZWxlcmF0aW9uID0gX3JlZjIuZ3B1QWNjZWxlcmF0aW9uLFxuICAgICAgYWRhcHRpdmUgPSBfcmVmMi5hZGFwdGl2ZSxcbiAgICAgIHJvdW5kT2Zmc2V0cyA9IF9yZWYyLnJvdW5kT2Zmc2V0cyxcbiAgICAgIGlzRml4ZWQgPSBfcmVmMi5pc0ZpeGVkO1xuICB2YXIgX29mZnNldHMkeCA9IG9mZnNldHMueCxcbiAgICAgIHggPSBfb2Zmc2V0cyR4ID09PSB2b2lkIDAgPyAwIDogX29mZnNldHMkeCxcbiAgICAgIF9vZmZzZXRzJHkgPSBvZmZzZXRzLnksXG4gICAgICB5ID0gX29mZnNldHMkeSA9PT0gdm9pZCAwID8gMCA6IF9vZmZzZXRzJHk7XG5cbiAgdmFyIF9yZWYzID0gdHlwZW9mIHJvdW5kT2Zmc2V0cyA9PT0gJ2Z1bmN0aW9uJyA/IHJvdW5kT2Zmc2V0cyh7XG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH0pIDoge1xuICAgIHg6IHgsXG4gICAgeTogeVxuICB9O1xuXG4gIHggPSBfcmVmMy54O1xuICB5ID0gX3JlZjMueTtcbiAgdmFyIGhhc1ggPSBvZmZzZXRzLmhhc093blByb3BlcnR5KCd4Jyk7XG4gIHZhciBoYXNZID0gb2Zmc2V0cy5oYXNPd25Qcm9wZXJ0eSgneScpO1xuICB2YXIgc2lkZVggPSBsZWZ0O1xuICB2YXIgc2lkZVkgPSB0b3A7XG4gIHZhciB3aW4gPSB3aW5kb3c7XG5cbiAgaWYgKGFkYXB0aXZlKSB7XG4gICAgdmFyIG9mZnNldFBhcmVudCA9IGdldE9mZnNldFBhcmVudChwb3BwZXIpO1xuICAgIHZhciBoZWlnaHRQcm9wID0gJ2NsaWVudEhlaWdodCc7XG4gICAgdmFyIHdpZHRoUHJvcCA9ICdjbGllbnRXaWR0aCc7XG5cbiAgICBpZiAob2Zmc2V0UGFyZW50ID09PSBnZXRXaW5kb3cocG9wcGVyKSkge1xuICAgICAgb2Zmc2V0UGFyZW50ID0gZ2V0RG9jdW1lbnRFbGVtZW50KHBvcHBlcik7XG5cbiAgICAgIGlmIChnZXRDb21wdXRlZFN0eWxlKG9mZnNldFBhcmVudCkucG9zaXRpb24gIT09ICdzdGF0aWMnICYmIHBvc2l0aW9uID09PSAnYWJzb2x1dGUnKSB7XG4gICAgICAgIGhlaWdodFByb3AgPSAnc2Nyb2xsSGVpZ2h0JztcbiAgICAgICAgd2lkdGhQcm9wID0gJ3Njcm9sbFdpZHRoJztcbiAgICAgIH1cbiAgICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhc3RdOiBmb3JjZSB0eXBlIHJlZmluZW1lbnQsIHdlIGNvbXBhcmUgb2Zmc2V0UGFyZW50IHdpdGggd2luZG93IGFib3ZlLCBidXQgRmxvdyBkb2Vzbid0IGRldGVjdCBpdFxuXG5cbiAgICBvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQ7XG5cbiAgICBpZiAocGxhY2VtZW50ID09PSB0b3AgfHwgKHBsYWNlbWVudCA9PT0gbGVmdCB8fCBwbGFjZW1lbnQgPT09IHJpZ2h0KSAmJiB2YXJpYXRpb24gPT09IGVuZCkge1xuICAgICAgc2lkZVkgPSBib3R0b207XG4gICAgICB2YXIgb2Zmc2V0WSA9IGlzRml4ZWQgJiYgb2Zmc2V0UGFyZW50ID09PSB3aW4gJiYgd2luLnZpc3VhbFZpZXdwb3J0ID8gd2luLnZpc3VhbFZpZXdwb3J0LmhlaWdodCA6IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgICAgb2Zmc2V0UGFyZW50W2hlaWdodFByb3BdO1xuICAgICAgeSAtPSBvZmZzZXRZIC0gcG9wcGVyUmVjdC5oZWlnaHQ7XG4gICAgICB5ICo9IGdwdUFjY2VsZXJhdGlvbiA/IDEgOiAtMTtcbiAgICB9XG5cbiAgICBpZiAocGxhY2VtZW50ID09PSBsZWZ0IHx8IChwbGFjZW1lbnQgPT09IHRvcCB8fCBwbGFjZW1lbnQgPT09IGJvdHRvbSkgJiYgdmFyaWF0aW9uID09PSBlbmQpIHtcbiAgICAgIHNpZGVYID0gcmlnaHQ7XG4gICAgICB2YXIgb2Zmc2V0WCA9IGlzRml4ZWQgJiYgb2Zmc2V0UGFyZW50ID09PSB3aW4gJiYgd2luLnZpc3VhbFZpZXdwb3J0ID8gd2luLnZpc3VhbFZpZXdwb3J0LndpZHRoIDogLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgICBvZmZzZXRQYXJlbnRbd2lkdGhQcm9wXTtcbiAgICAgIHggLT0gb2Zmc2V0WCAtIHBvcHBlclJlY3Qud2lkdGg7XG4gICAgICB4ICo9IGdwdUFjY2VsZXJhdGlvbiA/IDEgOiAtMTtcbiAgICB9XG4gIH1cblxuICB2YXIgY29tbW9uU3R5bGVzID0gT2JqZWN0LmFzc2lnbih7XG4gICAgcG9zaXRpb246IHBvc2l0aW9uXG4gIH0sIGFkYXB0aXZlICYmIHVuc2V0U2lkZXMpO1xuXG4gIHZhciBfcmVmNCA9IHJvdW5kT2Zmc2V0cyA9PT0gdHJ1ZSA/IHJvdW5kT2Zmc2V0c0J5RFBSKHtcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfSwgZ2V0V2luZG93KHBvcHBlcikpIDoge1xuICAgIHg6IHgsXG4gICAgeTogeVxuICB9O1xuXG4gIHggPSBfcmVmNC54O1xuICB5ID0gX3JlZjQueTtcblxuICBpZiAoZ3B1QWNjZWxlcmF0aW9uKSB7XG4gICAgdmFyIF9PYmplY3QkYXNzaWduO1xuXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywgKF9PYmplY3QkYXNzaWduID0ge30sIF9PYmplY3QkYXNzaWduW3NpZGVZXSA9IGhhc1kgPyAnMCcgOiAnJywgX09iamVjdCRhc3NpZ25bc2lkZVhdID0gaGFzWCA/ICcwJyA6ICcnLCBfT2JqZWN0JGFzc2lnbi50cmFuc2Zvcm0gPSAod2luLmRldmljZVBpeGVsUmF0aW8gfHwgMSkgPD0gMSA/IFwidHJhbnNsYXRlKFwiICsgeCArIFwicHgsIFwiICsgeSArIFwicHgpXCIgOiBcInRyYW5zbGF0ZTNkKFwiICsgeCArIFwicHgsIFwiICsgeSArIFwicHgsIDApXCIsIF9PYmplY3QkYXNzaWduKSk7XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgY29tbW9uU3R5bGVzLCAoX09iamVjdCRhc3NpZ24yID0ge30sIF9PYmplY3QkYXNzaWduMltzaWRlWV0gPSBoYXNZID8geSArIFwicHhcIiA6ICcnLCBfT2JqZWN0JGFzc2lnbjJbc2lkZVhdID0gaGFzWCA/IHggKyBcInB4XCIgOiAnJywgX09iamVjdCRhc3NpZ24yLnRyYW5zZm9ybSA9ICcnLCBfT2JqZWN0JGFzc2lnbjIpKTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZVN0eWxlcyhfcmVmNSkge1xuICB2YXIgc3RhdGUgPSBfcmVmNS5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmNS5vcHRpb25zO1xuICB2YXIgX29wdGlvbnMkZ3B1QWNjZWxlcmF0ID0gb3B0aW9ucy5ncHVBY2NlbGVyYXRpb24sXG4gICAgICBncHVBY2NlbGVyYXRpb24gPSBfb3B0aW9ucyRncHVBY2NlbGVyYXQgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRncHVBY2NlbGVyYXQsXG4gICAgICBfb3B0aW9ucyRhZGFwdGl2ZSA9IG9wdGlvbnMuYWRhcHRpdmUsXG4gICAgICBhZGFwdGl2ZSA9IF9vcHRpb25zJGFkYXB0aXZlID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkYWRhcHRpdmUsXG4gICAgICBfb3B0aW9ucyRyb3VuZE9mZnNldHMgPSBvcHRpb25zLnJvdW5kT2Zmc2V0cyxcbiAgICAgIHJvdW5kT2Zmc2V0cyA9IF9vcHRpb25zJHJvdW5kT2Zmc2V0cyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJHJvdW5kT2Zmc2V0cztcbiAgdmFyIGNvbW1vblN0eWxlcyA9IHtcbiAgICBwbGFjZW1lbnQ6IGdldEJhc2VQbGFjZW1lbnQoc3RhdGUucGxhY2VtZW50KSxcbiAgICB2YXJpYXRpb246IGdldFZhcmlhdGlvbihzdGF0ZS5wbGFjZW1lbnQpLFxuICAgIHBvcHBlcjogc3RhdGUuZWxlbWVudHMucG9wcGVyLFxuICAgIHBvcHBlclJlY3Q6IHN0YXRlLnJlY3RzLnBvcHBlcixcbiAgICBncHVBY2NlbGVyYXRpb246IGdwdUFjY2VsZXJhdGlvbixcbiAgICBpc0ZpeGVkOiBzdGF0ZS5vcHRpb25zLnN0cmF0ZWd5ID09PSAnZml4ZWQnXG4gIH07XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyAhPSBudWxsKSB7XG4gICAgc3RhdGUuc3R5bGVzLnBvcHBlciA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnN0eWxlcy5wb3BwZXIsIG1hcFRvU3R5bGVzKE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywge1xuICAgICAgb2Zmc2V0czogc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLFxuICAgICAgcG9zaXRpb246IHN0YXRlLm9wdGlvbnMuc3RyYXRlZ3ksXG4gICAgICBhZGFwdGl2ZTogYWRhcHRpdmUsXG4gICAgICByb3VuZE9mZnNldHM6IHJvdW5kT2Zmc2V0c1xuICAgIH0pKSk7XG4gIH1cblxuICBpZiAoc3RhdGUubW9kaWZpZXJzRGF0YS5hcnJvdyAhPSBudWxsKSB7XG4gICAgc3RhdGUuc3R5bGVzLmFycm93ID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuc3R5bGVzLmFycm93LCBtYXBUb1N0eWxlcyhPYmplY3QuYXNzaWduKHt9LCBjb21tb25TdHlsZXMsIHtcbiAgICAgIG9mZnNldHM6IHN0YXRlLm1vZGlmaWVyc0RhdGEuYXJyb3csXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIGFkYXB0aXZlOiBmYWxzZSxcbiAgICAgIHJvdW5kT2Zmc2V0czogcm91bmRPZmZzZXRzXG4gICAgfSkpKTtcbiAgfVxuXG4gIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIsIHtcbiAgICAnZGF0YS1wb3BwZXItcGxhY2VtZW50Jzogc3RhdGUucGxhY2VtZW50XG4gIH0pO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnY29tcHV0ZVN0eWxlcycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnYmVmb3JlV3JpdGUnLFxuICBmbjogY29tcHV0ZVN0eWxlcyxcbiAgZGF0YToge31cbn07IiwgImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRXaW5kb3cuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG52YXIgcGFzc2l2ZSA9IHtcbiAgcGFzc2l2ZTogdHJ1ZVxufTtcblxuZnVuY3Rpb24gZWZmZWN0KF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIGluc3RhbmNlID0gX3JlZi5pbnN0YW5jZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnM7XG4gIHZhciBfb3B0aW9ucyRzY3JvbGwgPSBvcHRpb25zLnNjcm9sbCxcbiAgICAgIHNjcm9sbCA9IF9vcHRpb25zJHNjcm9sbCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJHNjcm9sbCxcbiAgICAgIF9vcHRpb25zJHJlc2l6ZSA9IG9wdGlvbnMucmVzaXplLFxuICAgICAgcmVzaXplID0gX29wdGlvbnMkcmVzaXplID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkcmVzaXplO1xuICB2YXIgd2luZG93ID0gZ2V0V2luZG93KHN0YXRlLmVsZW1lbnRzLnBvcHBlcik7XG4gIHZhciBzY3JvbGxQYXJlbnRzID0gW10uY29uY2F0KHN0YXRlLnNjcm9sbFBhcmVudHMucmVmZXJlbmNlLCBzdGF0ZS5zY3JvbGxQYXJlbnRzLnBvcHBlcik7XG5cbiAgaWYgKHNjcm9sbCkge1xuICAgIHNjcm9sbFBhcmVudHMuZm9yRWFjaChmdW5jdGlvbiAoc2Nyb2xsUGFyZW50KSB7XG4gICAgICBzY3JvbGxQYXJlbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChyZXNpemUpIHtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHNjcm9sbCkge1xuICAgICAgc2Nyb2xsUGFyZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChzY3JvbGxQYXJlbnQpIHtcbiAgICAgICAgc2Nyb2xsUGFyZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGluc3RhbmNlLnVwZGF0ZSwgcGFzc2l2ZSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAocmVzaXplKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgICB9XG4gIH07XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdldmVudExpc3RlbmVycycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnd3JpdGUnLFxuICBmbjogZnVuY3Rpb24gZm4oKSB7fSxcbiAgZWZmZWN0OiBlZmZlY3QsXG4gIGRhdGE6IHt9XG59OyIsICJ2YXIgaGFzaCA9IHtcbiAgbGVmdDogJ3JpZ2h0JyxcbiAgcmlnaHQ6ICdsZWZ0JyxcbiAgYm90dG9tOiAndG9wJyxcbiAgdG9wOiAnYm90dG9tJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnJlcGxhY2UoL2xlZnR8cmlnaHR8Ym90dG9tfHRvcC9nLCBmdW5jdGlvbiAobWF0Y2hlZCkge1xuICAgIHJldHVybiBoYXNoW21hdGNoZWRdO1xuICB9KTtcbn0iLCAidmFyIGhhc2ggPSB7XG4gIHN0YXJ0OiAnZW5kJyxcbiAgZW5kOiAnc3RhcnQnXG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvc3RhcnR8ZW5kL2csIGZ1bmN0aW9uIChtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGhhc2hbbWF0Y2hlZF07XG4gIH0pO1xufSIsICJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0V2luZG93U2Nyb2xsKG5vZGUpIHtcbiAgdmFyIHdpbiA9IGdldFdpbmRvdyhub2RlKTtcbiAgdmFyIHNjcm9sbExlZnQgPSB3aW4ucGFnZVhPZmZzZXQ7XG4gIHZhciBzY3JvbGxUb3AgPSB3aW4ucGFnZVlPZmZzZXQ7XG4gIHJldHVybiB7XG4gICAgc2Nyb2xsTGVmdDogc2Nyb2xsTGVmdCxcbiAgICBzY3JvbGxUb3A6IHNjcm9sbFRvcFxuICB9O1xufSIsICJpbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGwgZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpIHtcbiAgLy8gSWYgPGh0bWw+IGhhcyBhIENTUyB3aWR0aCBncmVhdGVyIHRoYW4gdGhlIHZpZXdwb3J0LCB0aGVuIHRoaXMgd2lsbCBiZVxuICAvLyBpbmNvcnJlY3QgZm9yIFJUTC5cbiAgLy8gUG9wcGVyIDEgaXMgYnJva2VuIGluIHRoaXMgY2FzZSBhbmQgbmV2ZXIgaGFkIGEgYnVnIHJlcG9ydCBzbyBsZXQncyBhc3N1bWVcbiAgLy8gaXQncyBub3QgYW4gaXNzdWUuIEkgZG9uJ3QgdGhpbmsgYW55b25lIGV2ZXIgc3BlY2lmaWVzIHdpZHRoIG9uIDxodG1sPlxuICAvLyBhbnl3YXkuXG4gIC8vIEJyb3dzZXJzIHdoZXJlIHRoZSBsZWZ0IHNjcm9sbGJhciBkb2Vzbid0IGNhdXNlIGFuIGlzc3VlIHJlcG9ydCBgMGAgZm9yXG4gIC8vIHRoaXMgKGUuZy4gRWRnZSAyMDE5LCBJRTExLCBTYWZhcmkpXG4gIHJldHVybiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpKS5sZWZ0ICsgZ2V0V2luZG93U2Nyb2xsKGVsZW1lbnQpLnNjcm9sbExlZnQ7XG59IiwgImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbEJhclggZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsQmFyWC5qc1wiO1xuaW1wb3J0IGlzTGF5b3V0Vmlld3BvcnQgZnJvbSBcIi4vaXNMYXlvdXRWaWV3cG9ydC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSB7XG4gIHZhciB3aW4gPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIHZhciBodG1sID0gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpO1xuICB2YXIgdmlzdWFsVmlld3BvcnQgPSB3aW4udmlzdWFsVmlld3BvcnQ7XG4gIHZhciB3aWR0aCA9IGh0bWwuY2xpZW50V2lkdGg7XG4gIHZhciBoZWlnaHQgPSBodG1sLmNsaWVudEhlaWdodDtcbiAgdmFyIHggPSAwO1xuICB2YXIgeSA9IDA7XG5cbiAgaWYgKHZpc3VhbFZpZXdwb3J0KSB7XG4gICAgd2lkdGggPSB2aXN1YWxWaWV3cG9ydC53aWR0aDtcbiAgICBoZWlnaHQgPSB2aXN1YWxWaWV3cG9ydC5oZWlnaHQ7XG4gICAgdmFyIGxheW91dFZpZXdwb3J0ID0gaXNMYXlvdXRWaWV3cG9ydCgpO1xuXG4gICAgaWYgKGxheW91dFZpZXdwb3J0IHx8ICFsYXlvdXRWaWV3cG9ydCAmJiBzdHJhdGVneSA9PT0gJ2ZpeGVkJykge1xuICAgICAgeCA9IHZpc3VhbFZpZXdwb3J0Lm9mZnNldExlZnQ7XG4gICAgICB5ID0gdmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0LFxuICAgIHg6IHggKyBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpLFxuICAgIHk6IHlcbiAgfTtcbn0iLCAiaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGxCYXJYIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbEJhclguanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGwgZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsLmpzXCI7XG5pbXBvcnQgeyBtYXggfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiOyAvLyBHZXRzIHRoZSBlbnRpcmUgc2l6ZSBvZiB0aGUgc2Nyb2xsYWJsZSBkb2N1bWVudCBhcmVhLCBldmVuIGV4dGVuZGluZyBvdXRzaWRlXG4vLyBvZiB0aGUgYDxodG1sPmAgYW5kIGA8Ym9keT5gIHJlY3QgYm91bmRzIGlmIGhvcml6b250YWxseSBzY3JvbGxhYmxlXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldERvY3VtZW50UmVjdChlbGVtZW50KSB7XG4gIHZhciBfZWxlbWVudCRvd25lckRvY3VtZW47XG5cbiAgdmFyIGh0bWwgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIHZhciB3aW5TY3JvbGwgPSBnZXRXaW5kb3dTY3JvbGwoZWxlbWVudCk7XG4gIHZhciBib2R5ID0gKF9lbGVtZW50JG93bmVyRG9jdW1lbiA9IGVsZW1lbnQub3duZXJEb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9lbGVtZW50JG93bmVyRG9jdW1lbi5ib2R5O1xuICB2YXIgd2lkdGggPSBtYXgoaHRtbC5zY3JvbGxXaWR0aCwgaHRtbC5jbGllbnRXaWR0aCwgYm9keSA/IGJvZHkuc2Nyb2xsV2lkdGggOiAwLCBib2R5ID8gYm9keS5jbGllbnRXaWR0aCA6IDApO1xuICB2YXIgaGVpZ2h0ID0gbWF4KGh0bWwuc2Nyb2xsSGVpZ2h0LCBodG1sLmNsaWVudEhlaWdodCwgYm9keSA/IGJvZHkuc2Nyb2xsSGVpZ2h0IDogMCwgYm9keSA/IGJvZHkuY2xpZW50SGVpZ2h0IDogMCk7XG4gIHZhciB4ID0gLXdpblNjcm9sbC5zY3JvbGxMZWZ0ICsgZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KTtcbiAgdmFyIHkgPSAtd2luU2Nyb2xsLnNjcm9sbFRvcDtcblxuICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZShib2R5IHx8IGh0bWwpLmRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICB4ICs9IG1heChodG1sLmNsaWVudFdpZHRoLCBib2R5ID8gYm9keS5jbGllbnRXaWR0aCA6IDApIC0gd2lkdGg7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcbn0iLCAiaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4vZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNTY3JvbGxQYXJlbnQoZWxlbWVudCkge1xuICAvLyBGaXJlZm94IHdhbnRzIHVzIHRvIGNoZWNrIGAteGAgYW5kIGAteWAgdmFyaWF0aW9ucyBhcyB3ZWxsXG4gIHZhciBfZ2V0Q29tcHV0ZWRTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCksXG4gICAgICBvdmVyZmxvdyA9IF9nZXRDb21wdXRlZFN0eWxlLm92ZXJmbG93LFxuICAgICAgb3ZlcmZsb3dYID0gX2dldENvbXB1dGVkU3R5bGUub3ZlcmZsb3dYLFxuICAgICAgb3ZlcmZsb3dZID0gX2dldENvbXB1dGVkU3R5bGUub3ZlcmZsb3dZO1xuXG4gIHJldHVybiAvYXV0b3xzY3JvbGx8b3ZlcmxheXxoaWRkZW4vLnRlc3Qob3ZlcmZsb3cgKyBvdmVyZmxvd1kgKyBvdmVyZmxvd1gpO1xufSIsICJpbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tIFwiLi9nZXRQYXJlbnROb2RlLmpzXCI7XG5pbXBvcnQgaXNTY3JvbGxQYXJlbnQgZnJvbSBcIi4vaXNTY3JvbGxQYXJlbnQuanNcIjtcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFNjcm9sbFBhcmVudChub2RlKSB7XG4gIGlmIChbJ2h0bWwnLCAnYm9keScsICcjZG9jdW1lbnQnXS5pbmRleE9mKGdldE5vZGVOYW1lKG5vZGUpKSA+PSAwKSB7XG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXTogYXNzdW1lIGJvZHkgaXMgYWx3YXlzIGF2YWlsYWJsZVxuICAgIHJldHVybiBub2RlLm93bmVyRG9jdW1lbnQuYm9keTtcbiAgfVxuXG4gIGlmIChpc0hUTUxFbGVtZW50KG5vZGUpICYmIGlzU2Nyb2xsUGFyZW50KG5vZGUpKSB7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICByZXR1cm4gZ2V0U2Nyb2xsUGFyZW50KGdldFBhcmVudE5vZGUobm9kZSkpO1xufSIsICJpbXBvcnQgZ2V0U2Nyb2xsUGFyZW50IGZyb20gXCIuL2dldFNjcm9sbFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBpc1Njcm9sbFBhcmVudCBmcm9tIFwiLi9pc1Njcm9sbFBhcmVudC5qc1wiO1xuLypcbmdpdmVuIGEgRE9NIGVsZW1lbnQsIHJldHVybiB0aGUgbGlzdCBvZiBhbGwgc2Nyb2xsIHBhcmVudHMsIHVwIHRoZSBsaXN0IG9mIGFuY2Vzb3JzXG51bnRpbCB3ZSBnZXQgdG8gdGhlIHRvcCB3aW5kb3cgb2JqZWN0LiBUaGlzIGxpc3QgaXMgd2hhdCB3ZSBhdHRhY2ggc2Nyb2xsIGxpc3RlbmVyc1xudG8sIGJlY2F1c2UgaWYgYW55IG9mIHRoZXNlIHBhcmVudCBlbGVtZW50cyBzY3JvbGwsIHdlJ2xsIG5lZWQgdG8gcmUtY2FsY3VsYXRlIHRoZVxucmVmZXJlbmNlIGVsZW1lbnQncyBwb3NpdGlvbi5cbiovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxpc3RTY3JvbGxQYXJlbnRzKGVsZW1lbnQsIGxpc3QpIHtcbiAgdmFyIF9lbGVtZW50JG93bmVyRG9jdW1lbjtcblxuICBpZiAobGlzdCA9PT0gdm9pZCAwKSB7XG4gICAgbGlzdCA9IFtdO1xuICB9XG5cbiAgdmFyIHNjcm9sbFBhcmVudCA9IGdldFNjcm9sbFBhcmVudChlbGVtZW50KTtcbiAgdmFyIGlzQm9keSA9IHNjcm9sbFBhcmVudCA9PT0gKChfZWxlbWVudCRvd25lckRvY3VtZW4gPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfZWxlbWVudCRvd25lckRvY3VtZW4uYm9keSk7XG4gIHZhciB3aW4gPSBnZXRXaW5kb3coc2Nyb2xsUGFyZW50KTtcbiAgdmFyIHRhcmdldCA9IGlzQm9keSA/IFt3aW5dLmNvbmNhdCh3aW4udmlzdWFsVmlld3BvcnQgfHwgW10sIGlzU2Nyb2xsUGFyZW50KHNjcm9sbFBhcmVudCkgPyBzY3JvbGxQYXJlbnQgOiBbXSkgOiBzY3JvbGxQYXJlbnQ7XG4gIHZhciB1cGRhdGVkTGlzdCA9IGxpc3QuY29uY2F0KHRhcmdldCk7XG4gIHJldHVybiBpc0JvZHkgPyB1cGRhdGVkTGlzdCA6IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdOiBpc0JvZHkgdGVsbHMgdXMgdGFyZ2V0IHdpbGwgYmUgYW4gSFRNTEVsZW1lbnQgaGVyZVxuICB1cGRhdGVkTGlzdC5jb25jYXQobGlzdFNjcm9sbFBhcmVudHMoZ2V0UGFyZW50Tm9kZSh0YXJnZXQpKSk7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlY3RUb0NsaWVudFJlY3QocmVjdCkge1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgcmVjdCwge1xuICAgIGxlZnQ6IHJlY3QueCxcbiAgICB0b3A6IHJlY3QueSxcbiAgICByaWdodDogcmVjdC54ICsgcmVjdC53aWR0aCxcbiAgICBib3R0b206IHJlY3QueSArIHJlY3QuaGVpZ2h0XG4gIH0pO1xufSIsICJpbXBvcnQgeyB2aWV3cG9ydCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldFZpZXdwb3J0UmVjdCBmcm9tIFwiLi9nZXRWaWV3cG9ydFJlY3QuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudFJlY3QgZnJvbSBcIi4vZ2V0RG9jdW1lbnRSZWN0LmpzXCI7XG5pbXBvcnQgbGlzdFNjcm9sbFBhcmVudHMgZnJvbSBcIi4vbGlzdFNjcm9sbFBhcmVudHMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4vZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4vZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuaW1wb3J0IHsgaXNFbGVtZW50LCBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCBnZXRQYXJlbnROb2RlIGZyb20gXCIuL2dldFBhcmVudE5vZGUuanNcIjtcbmltcG9ydCBjb250YWlucyBmcm9tIFwiLi9jb250YWlucy5qc1wiO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgcmVjdFRvQ2xpZW50UmVjdCBmcm9tIFwiLi4vdXRpbHMvcmVjdFRvQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IHsgbWF4LCBtaW4gfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiO1xuXG5mdW5jdGlvbiBnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBzdHJhdGVneSkge1xuICB2YXIgcmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBmYWxzZSwgc3RyYXRlZ3kgPT09ICdmaXhlZCcpO1xuICByZWN0LnRvcCA9IHJlY3QudG9wICsgZWxlbWVudC5jbGllbnRUb3A7XG4gIHJlY3QubGVmdCA9IHJlY3QubGVmdCArIGVsZW1lbnQuY2xpZW50TGVmdDtcbiAgcmVjdC5ib3R0b20gPSByZWN0LnRvcCArIGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICByZWN0LnJpZ2h0ID0gcmVjdC5sZWZ0ICsgZWxlbWVudC5jbGllbnRXaWR0aDtcbiAgcmVjdC53aWR0aCA9IGVsZW1lbnQuY2xpZW50V2lkdGg7XG4gIHJlY3QuaGVpZ2h0ID0gZWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gIHJlY3QueCA9IHJlY3QubGVmdDtcbiAgcmVjdC55ID0gcmVjdC50b3A7XG4gIHJldHVybiByZWN0O1xufVxuXG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0RnJvbU1peGVkVHlwZShlbGVtZW50LCBjbGlwcGluZ1BhcmVudCwgc3RyYXRlZ3kpIHtcbiAgcmV0dXJuIGNsaXBwaW5nUGFyZW50ID09PSB2aWV3cG9ydCA/IHJlY3RUb0NsaWVudFJlY3QoZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSkgOiBpc0VsZW1lbnQoY2xpcHBpbmdQYXJlbnQpID8gZ2V0SW5uZXJCb3VuZGluZ0NsaWVudFJlY3QoY2xpcHBpbmdQYXJlbnQsIHN0cmF0ZWd5KSA6IHJlY3RUb0NsaWVudFJlY3QoZ2V0RG9jdW1lbnRSZWN0KGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSkpO1xufSAvLyBBIFwiY2xpcHBpbmcgcGFyZW50XCIgaXMgYW4gb3ZlcmZsb3dhYmxlIGNvbnRhaW5lciB3aXRoIHRoZSBjaGFyYWN0ZXJpc3RpYyBvZlxuLy8gY2xpcHBpbmcgKG9yIGhpZGluZykgb3ZlcmZsb3dpbmcgZWxlbWVudHMgd2l0aCBhIHBvc2l0aW9uIGRpZmZlcmVudCBmcm9tXG4vLyBgaW5pdGlhbGBcblxuXG5mdW5jdGlvbiBnZXRDbGlwcGluZ1BhcmVudHMoZWxlbWVudCkge1xuICB2YXIgY2xpcHBpbmdQYXJlbnRzID0gbGlzdFNjcm9sbFBhcmVudHMoZ2V0UGFyZW50Tm9kZShlbGVtZW50KSk7XG4gIHZhciBjYW5Fc2NhcGVDbGlwcGluZyA9IFsnYWJzb2x1dGUnLCAnZml4ZWQnXS5pbmRleE9mKGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkucG9zaXRpb24pID49IDA7XG4gIHZhciBjbGlwcGVyRWxlbWVudCA9IGNhbkVzY2FwZUNsaXBwaW5nICYmIGlzSFRNTEVsZW1lbnQoZWxlbWVudCkgPyBnZXRPZmZzZXRQYXJlbnQoZWxlbWVudCkgOiBlbGVtZW50O1xuXG4gIGlmICghaXNFbGVtZW50KGNsaXBwZXJFbGVtZW50KSkge1xuICAgIHJldHVybiBbXTtcbiAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvMTQxNFxuXG5cbiAgcmV0dXJuIGNsaXBwaW5nUGFyZW50cy5maWx0ZXIoZnVuY3Rpb24gKGNsaXBwaW5nUGFyZW50KSB7XG4gICAgcmV0dXJuIGlzRWxlbWVudChjbGlwcGluZ1BhcmVudCkgJiYgY29udGFpbnMoY2xpcHBpbmdQYXJlbnQsIGNsaXBwZXJFbGVtZW50KSAmJiBnZXROb2RlTmFtZShjbGlwcGluZ1BhcmVudCkgIT09ICdib2R5JztcbiAgfSk7XG59IC8vIEdldHMgdGhlIG1heGltdW0gYXJlYSB0aGF0IHRoZSBlbGVtZW50IGlzIHZpc2libGUgaW4gZHVlIHRvIGFueSBudW1iZXIgb2Zcbi8vIGNsaXBwaW5nIHBhcmVudHNcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDbGlwcGluZ1JlY3QoZWxlbWVudCwgYm91bmRhcnksIHJvb3RCb3VuZGFyeSwgc3RyYXRlZ3kpIHtcbiAgdmFyIG1haW5DbGlwcGluZ1BhcmVudHMgPSBib3VuZGFyeSA9PT0gJ2NsaXBwaW5nUGFyZW50cycgPyBnZXRDbGlwcGluZ1BhcmVudHMoZWxlbWVudCkgOiBbXS5jb25jYXQoYm91bmRhcnkpO1xuICB2YXIgY2xpcHBpbmdQYXJlbnRzID0gW10uY29uY2F0KG1haW5DbGlwcGluZ1BhcmVudHMsIFtyb290Qm91bmRhcnldKTtcbiAgdmFyIGZpcnN0Q2xpcHBpbmdQYXJlbnQgPSBjbGlwcGluZ1BhcmVudHNbMF07XG4gIHZhciBjbGlwcGluZ1JlY3QgPSBjbGlwcGluZ1BhcmVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2NSZWN0LCBjbGlwcGluZ1BhcmVudCkge1xuICAgIHZhciByZWN0ID0gZ2V0Q2xpZW50UmVjdEZyb21NaXhlZFR5cGUoZWxlbWVudCwgY2xpcHBpbmdQYXJlbnQsIHN0cmF0ZWd5KTtcbiAgICBhY2NSZWN0LnRvcCA9IG1heChyZWN0LnRvcCwgYWNjUmVjdC50b3ApO1xuICAgIGFjY1JlY3QucmlnaHQgPSBtaW4ocmVjdC5yaWdodCwgYWNjUmVjdC5yaWdodCk7XG4gICAgYWNjUmVjdC5ib3R0b20gPSBtaW4ocmVjdC5ib3R0b20sIGFjY1JlY3QuYm90dG9tKTtcbiAgICBhY2NSZWN0LmxlZnQgPSBtYXgocmVjdC5sZWZ0LCBhY2NSZWN0LmxlZnQpO1xuICAgIHJldHVybiBhY2NSZWN0O1xuICB9LCBnZXRDbGllbnRSZWN0RnJvbU1peGVkVHlwZShlbGVtZW50LCBmaXJzdENsaXBwaW5nUGFyZW50LCBzdHJhdGVneSkpO1xuICBjbGlwcGluZ1JlY3Qud2lkdGggPSBjbGlwcGluZ1JlY3QucmlnaHQgLSBjbGlwcGluZ1JlY3QubGVmdDtcbiAgY2xpcHBpbmdSZWN0LmhlaWdodCA9IGNsaXBwaW5nUmVjdC5ib3R0b20gLSBjbGlwcGluZ1JlY3QudG9wO1xuICBjbGlwcGluZ1JlY3QueCA9IGNsaXBwaW5nUmVjdC5sZWZ0O1xuICBjbGlwcGluZ1JlY3QueSA9IGNsaXBwaW5nUmVjdC50b3A7XG4gIHJldHVybiBjbGlwcGluZ1JlY3Q7XG59IiwgImltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4vZ2V0VmFyaWF0aW9uLmpzXCI7XG5pbXBvcnQgZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50IGZyb20gXCIuL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0LCBzdGFydCwgZW5kIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21wdXRlT2Zmc2V0cyhfcmVmKSB7XG4gIHZhciByZWZlcmVuY2UgPSBfcmVmLnJlZmVyZW5jZSxcbiAgICAgIGVsZW1lbnQgPSBfcmVmLmVsZW1lbnQsXG4gICAgICBwbGFjZW1lbnQgPSBfcmVmLnBsYWNlbWVudDtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBwbGFjZW1lbnQgPyBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgOiBudWxsO1xuICB2YXIgdmFyaWF0aW9uID0gcGxhY2VtZW50ID8gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkgOiBudWxsO1xuICB2YXIgY29tbW9uWCA9IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoIC8gMiAtIGVsZW1lbnQud2lkdGggLyAyO1xuICB2YXIgY29tbW9uWSA9IHJlZmVyZW5jZS55ICsgcmVmZXJlbmNlLmhlaWdodCAvIDIgLSBlbGVtZW50LmhlaWdodCAvIDI7XG4gIHZhciBvZmZzZXRzO1xuXG4gIHN3aXRjaCAoYmFzZVBsYWNlbWVudCkge1xuICAgIGNhc2UgdG9wOlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogY29tbW9uWCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnkgLSBlbGVtZW50LmhlaWdodFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBib3R0b206XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiBjb21tb25YLFxuICAgICAgICB5OiByZWZlcmVuY2UueSArIHJlZmVyZW5jZS5oZWlnaHRcbiAgICAgIH07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgcmlnaHQ6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCArIHJlZmVyZW5jZS53aWR0aCxcbiAgICAgICAgeTogY29tbW9uWVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBsZWZ0OlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLnggLSBlbGVtZW50LndpZHRoLFxuICAgICAgICB5OiBjb21tb25ZXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLngsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55XG4gICAgICB9O1xuICB9XG5cbiAgdmFyIG1haW5BeGlzID0gYmFzZVBsYWNlbWVudCA/IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChiYXNlUGxhY2VtZW50KSA6IG51bGw7XG5cbiAgaWYgKG1haW5BeGlzICE9IG51bGwpIHtcbiAgICB2YXIgbGVuID0gbWFpbkF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcblxuICAgIHN3aXRjaCAodmFyaWF0aW9uKSB7XG4gICAgICBjYXNlIHN0YXJ0OlxuICAgICAgICBvZmZzZXRzW21haW5BeGlzXSA9IG9mZnNldHNbbWFpbkF4aXNdIC0gKHJlZmVyZW5jZVtsZW5dIC8gMiAtIGVsZW1lbnRbbGVuXSAvIDIpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBlbmQ6XG4gICAgICAgIG9mZnNldHNbbWFpbkF4aXNdID0gb2Zmc2V0c1ttYWluQXhpc10gKyAocmVmZXJlbmNlW2xlbl0gLyAyIC0gZWxlbWVudFtsZW5dIC8gMik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvZmZzZXRzO1xufSIsICJpbXBvcnQgZ2V0Q2xpcHBpbmdSZWN0IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0Q2xpcHBpbmdSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgY29tcHV0ZU9mZnNldHMgZnJvbSBcIi4vY29tcHV0ZU9mZnNldHMuanNcIjtcbmltcG9ydCByZWN0VG9DbGllbnRSZWN0IGZyb20gXCIuL3JlY3RUb0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCB7IGNsaXBwaW5nUGFyZW50cywgcmVmZXJlbmNlLCBwb3BwZXIsIGJvdHRvbSwgdG9wLCByaWdodCwgYmFzZVBsYWNlbWVudHMsIHZpZXdwb3J0IH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgeyBpc0VsZW1lbnQgfSBmcm9tIFwiLi4vZG9tLXV0aWxzL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBtZXJnZVBhZGRpbmdPYmplY3QgZnJvbSBcIi4vbWVyZ2VQYWRkaW5nT2JqZWN0LmpzXCI7XG5pbXBvcnQgZXhwYW5kVG9IYXNoTWFwIGZyb20gXCIuL2V4cGFuZFRvSGFzaE1hcC5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRldGVjdE92ZXJmbG93KHN0YXRlLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICB2YXIgX29wdGlvbnMgPSBvcHRpb25zLFxuICAgICAgX29wdGlvbnMkcGxhY2VtZW50ID0gX29wdGlvbnMucGxhY2VtZW50LFxuICAgICAgcGxhY2VtZW50ID0gX29wdGlvbnMkcGxhY2VtZW50ID09PSB2b2lkIDAgPyBzdGF0ZS5wbGFjZW1lbnQgOiBfb3B0aW9ucyRwbGFjZW1lbnQsXG4gICAgICBfb3B0aW9ucyRzdHJhdGVneSA9IF9vcHRpb25zLnN0cmF0ZWd5LFxuICAgICAgc3RyYXRlZ3kgPSBfb3B0aW9ucyRzdHJhdGVneSA9PT0gdm9pZCAwID8gc3RhdGUuc3RyYXRlZ3kgOiBfb3B0aW9ucyRzdHJhdGVneSxcbiAgICAgIF9vcHRpb25zJGJvdW5kYXJ5ID0gX29wdGlvbnMuYm91bmRhcnksXG4gICAgICBib3VuZGFyeSA9IF9vcHRpb25zJGJvdW5kYXJ5ID09PSB2b2lkIDAgPyBjbGlwcGluZ1BhcmVudHMgOiBfb3B0aW9ucyRib3VuZGFyeSxcbiAgICAgIF9vcHRpb25zJHJvb3RCb3VuZGFyeSA9IF9vcHRpb25zLnJvb3RCb3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeSA9IF9vcHRpb25zJHJvb3RCb3VuZGFyeSA9PT0gdm9pZCAwID8gdmlld3BvcnQgOiBfb3B0aW9ucyRyb290Qm91bmRhcnksXG4gICAgICBfb3B0aW9ucyRlbGVtZW50Q29udGUgPSBfb3B0aW9ucy5lbGVtZW50Q29udGV4dCxcbiAgICAgIGVsZW1lbnRDb250ZXh0ID0gX29wdGlvbnMkZWxlbWVudENvbnRlID09PSB2b2lkIDAgPyBwb3BwZXIgOiBfb3B0aW9ucyRlbGVtZW50Q29udGUsXG4gICAgICBfb3B0aW9ucyRhbHRCb3VuZGFyeSA9IF9vcHRpb25zLmFsdEJvdW5kYXJ5LFxuICAgICAgYWx0Qm91bmRhcnkgPSBfb3B0aW9ucyRhbHRCb3VuZGFyeSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfb3B0aW9ucyRhbHRCb3VuZGFyeSxcbiAgICAgIF9vcHRpb25zJHBhZGRpbmcgPSBfb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgcGFkZGluZyA9IF9vcHRpb25zJHBhZGRpbmcgPT09IHZvaWQgMCA/IDAgOiBfb3B0aW9ucyRwYWRkaW5nO1xuICB2YXIgcGFkZGluZ09iamVjdCA9IG1lcmdlUGFkZGluZ09iamVjdCh0eXBlb2YgcGFkZGluZyAhPT0gJ251bWJlcicgPyBwYWRkaW5nIDogZXhwYW5kVG9IYXNoTWFwKHBhZGRpbmcsIGJhc2VQbGFjZW1lbnRzKSk7XG4gIHZhciBhbHRDb250ZXh0ID0gZWxlbWVudENvbnRleHQgPT09IHBvcHBlciA/IHJlZmVyZW5jZSA6IHBvcHBlcjtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciBlbGVtZW50ID0gc3RhdGUuZWxlbWVudHNbYWx0Qm91bmRhcnkgPyBhbHRDb250ZXh0IDogZWxlbWVudENvbnRleHRdO1xuICB2YXIgY2xpcHBpbmdDbGllbnRSZWN0ID0gZ2V0Q2xpcHBpbmdSZWN0KGlzRWxlbWVudChlbGVtZW50KSA/IGVsZW1lbnQgOiBlbGVtZW50LmNvbnRleHRFbGVtZW50IHx8IGdldERvY3VtZW50RWxlbWVudChzdGF0ZS5lbGVtZW50cy5wb3BwZXIpLCBib3VuZGFyeSwgcm9vdEJvdW5kYXJ5LCBzdHJhdGVneSk7XG4gIHZhciByZWZlcmVuY2VDbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KHN0YXRlLmVsZW1lbnRzLnJlZmVyZW5jZSk7XG4gIHZhciBwb3BwZXJPZmZzZXRzID0gY29tcHV0ZU9mZnNldHMoe1xuICAgIHJlZmVyZW5jZTogcmVmZXJlbmNlQ2xpZW50UmVjdCxcbiAgICBlbGVtZW50OiBwb3BwZXJSZWN0LFxuICAgIHN0cmF0ZWd5OiAnYWJzb2x1dGUnLFxuICAgIHBsYWNlbWVudDogcGxhY2VtZW50XG4gIH0pO1xuICB2YXIgcG9wcGVyQ2xpZW50UmVjdCA9IHJlY3RUb0NsaWVudFJlY3QoT2JqZWN0LmFzc2lnbih7fSwgcG9wcGVyUmVjdCwgcG9wcGVyT2Zmc2V0cykpO1xuICB2YXIgZWxlbWVudENsaWVudFJlY3QgPSBlbGVtZW50Q29udGV4dCA9PT0gcG9wcGVyID8gcG9wcGVyQ2xpZW50UmVjdCA6IHJlZmVyZW5jZUNsaWVudFJlY3Q7IC8vIHBvc2l0aXZlID0gb3ZlcmZsb3dpbmcgdGhlIGNsaXBwaW5nIHJlY3RcbiAgLy8gMCBvciBuZWdhdGl2ZSA9IHdpdGhpbiB0aGUgY2xpcHBpbmcgcmVjdFxuXG4gIHZhciBvdmVyZmxvd09mZnNldHMgPSB7XG4gICAgdG9wOiBjbGlwcGluZ0NsaWVudFJlY3QudG9wIC0gZWxlbWVudENsaWVudFJlY3QudG9wICsgcGFkZGluZ09iamVjdC50b3AsXG4gICAgYm90dG9tOiBlbGVtZW50Q2xpZW50UmVjdC5ib3R0b20gLSBjbGlwcGluZ0NsaWVudFJlY3QuYm90dG9tICsgcGFkZGluZ09iamVjdC5ib3R0b20sXG4gICAgbGVmdDogY2xpcHBpbmdDbGllbnRSZWN0LmxlZnQgLSBlbGVtZW50Q2xpZW50UmVjdC5sZWZ0ICsgcGFkZGluZ09iamVjdC5sZWZ0LFxuICAgIHJpZ2h0OiBlbGVtZW50Q2xpZW50UmVjdC5yaWdodCAtIGNsaXBwaW5nQ2xpZW50UmVjdC5yaWdodCArIHBhZGRpbmdPYmplY3QucmlnaHRcbiAgfTtcbiAgdmFyIG9mZnNldERhdGEgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLm9mZnNldDsgLy8gT2Zmc2V0cyBjYW4gYmUgYXBwbGllZCBvbmx5IHRvIHRoZSBwb3BwZXIgZWxlbWVudFxuXG4gIGlmIChlbGVtZW50Q29udGV4dCA9PT0gcG9wcGVyICYmIG9mZnNldERhdGEpIHtcbiAgICB2YXIgb2Zmc2V0ID0gb2Zmc2V0RGF0YVtwbGFjZW1lbnRdO1xuICAgIE9iamVjdC5rZXlzKG92ZXJmbG93T2Zmc2V0cykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICB2YXIgbXVsdGlwbHkgPSBbcmlnaHQsIGJvdHRvbV0uaW5kZXhPZihrZXkpID49IDAgPyAxIDogLTE7XG4gICAgICB2YXIgYXhpcyA9IFt0b3AsIGJvdHRvbV0uaW5kZXhPZihrZXkpID49IDAgPyAneScgOiAneCc7XG4gICAgICBvdmVyZmxvd09mZnNldHNba2V5XSArPSBvZmZzZXRbYXhpc10gKiBtdWx0aXBseTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBvdmVyZmxvd09mZnNldHM7XG59IiwgImltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4vZ2V0VmFyaWF0aW9uLmpzXCI7XG5pbXBvcnQgeyB2YXJpYXRpb25QbGFjZW1lbnRzLCBiYXNlUGxhY2VtZW50cywgcGxhY2VtZW50cyBhcyBhbGxQbGFjZW1lbnRzIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4vZGV0ZWN0T3ZlcmZsb3cuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbXB1dGVBdXRvUGxhY2VtZW50KHN0YXRlLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICB2YXIgX29wdGlvbnMgPSBvcHRpb25zLFxuICAgICAgcGxhY2VtZW50ID0gX29wdGlvbnMucGxhY2VtZW50LFxuICAgICAgYm91bmRhcnkgPSBfb3B0aW9ucy5ib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeSA9IF9vcHRpb25zLnJvb3RCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmcgPSBfb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgZmxpcFZhcmlhdGlvbnMgPSBfb3B0aW9ucy5mbGlwVmFyaWF0aW9ucyxcbiAgICAgIF9vcHRpb25zJGFsbG93ZWRBdXRvUCA9IF9vcHRpb25zLmFsbG93ZWRBdXRvUGxhY2VtZW50cyxcbiAgICAgIGFsbG93ZWRBdXRvUGxhY2VtZW50cyA9IF9vcHRpb25zJGFsbG93ZWRBdXRvUCA9PT0gdm9pZCAwID8gYWxsUGxhY2VtZW50cyA6IF9vcHRpb25zJGFsbG93ZWRBdXRvUDtcbiAgdmFyIHZhcmlhdGlvbiA9IGdldFZhcmlhdGlvbihwbGFjZW1lbnQpO1xuICB2YXIgcGxhY2VtZW50cyA9IHZhcmlhdGlvbiA/IGZsaXBWYXJpYXRpb25zID8gdmFyaWF0aW9uUGxhY2VtZW50cyA6IHZhcmlhdGlvblBsYWNlbWVudHMuZmlsdGVyKGZ1bmN0aW9uIChwbGFjZW1lbnQpIHtcbiAgICByZXR1cm4gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkgPT09IHZhcmlhdGlvbjtcbiAgfSkgOiBiYXNlUGxhY2VtZW50cztcbiAgdmFyIGFsbG93ZWRQbGFjZW1lbnRzID0gcGxhY2VtZW50cy5maWx0ZXIoZnVuY3Rpb24gKHBsYWNlbWVudCkge1xuICAgIHJldHVybiBhbGxvd2VkQXV0b1BsYWNlbWVudHMuaW5kZXhPZihwbGFjZW1lbnQpID49IDA7XG4gIH0pO1xuXG4gIGlmIChhbGxvd2VkUGxhY2VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICBhbGxvd2VkUGxhY2VtZW50cyA9IHBsYWNlbWVudHM7XG4gIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdHlwZV06IEZsb3cgc2VlbXMgdG8gaGF2ZSBwcm9ibGVtcyB3aXRoIHR3byBhcnJheSB1bmlvbnMuLi5cblxuXG4gIHZhciBvdmVyZmxvd3MgPSBhbGxvd2VkUGxhY2VtZW50cy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGxhY2VtZW50KSB7XG4gICAgYWNjW3BsYWNlbWVudF0gPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnk6IHJvb3RCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmc6IHBhZGRpbmdcbiAgICB9KVtnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCldO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG92ZXJmbG93cykuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBvdmVyZmxvd3NbYV0gLSBvdmVyZmxvd3NbYl07XG4gIH0pO1xufSIsICJpbXBvcnQgZ2V0T3Bwb3NpdGVQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE9wcG9zaXRlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGNvbXB1dGVBdXRvUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9jb21wdXRlQXV0b1BsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgYm90dG9tLCB0b3AsIHN0YXJ0LCByaWdodCwgbGVmdCwgYXV0byB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi4vdXRpbHMvZ2V0VmFyaWF0aW9uLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZnVuY3Rpb24gZ2V0RXhwYW5kZWRGYWxsYmFja1BsYWNlbWVudHMocGxhY2VtZW50KSB7XG4gIGlmIChnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgPT09IGF1dG8pIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICB2YXIgb3Bwb3NpdGVQbGFjZW1lbnQgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuICByZXR1cm4gW2dldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50KHBsYWNlbWVudCksIG9wcG9zaXRlUGxhY2VtZW50LCBnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudChvcHBvc2l0ZVBsYWNlbWVudCldO1xufVxuXG5mdW5jdGlvbiBmbGlwKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdLl9za2lwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIF9vcHRpb25zJG1haW5BeGlzID0gb3B0aW9ucy5tYWluQXhpcyxcbiAgICAgIGNoZWNrTWFpbkF4aXMgPSBfb3B0aW9ucyRtYWluQXhpcyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJG1haW5BeGlzLFxuICAgICAgX29wdGlvbnMkYWx0QXhpcyA9IG9wdGlvbnMuYWx0QXhpcyxcbiAgICAgIGNoZWNrQWx0QXhpcyA9IF9vcHRpb25zJGFsdEF4aXMgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRhbHRBeGlzLFxuICAgICAgc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzID0gb3B0aW9ucy5mYWxsYmFja1BsYWNlbWVudHMsXG4gICAgICBwYWRkaW5nID0gb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgYm91bmRhcnkgPSBvcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IG9wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBfb3B0aW9ucyRmbGlwVmFyaWF0aW8gPSBvcHRpb25zLmZsaXBWYXJpYXRpb25zLFxuICAgICAgZmxpcFZhcmlhdGlvbnMgPSBfb3B0aW9ucyRmbGlwVmFyaWF0aW8gPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRmbGlwVmFyaWF0aW8sXG4gICAgICBhbGxvd2VkQXV0b1BsYWNlbWVudHMgPSBvcHRpb25zLmFsbG93ZWRBdXRvUGxhY2VtZW50cztcbiAgdmFyIHByZWZlcnJlZFBsYWNlbWVudCA9IHN0YXRlLm9wdGlvbnMucGxhY2VtZW50O1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocHJlZmVycmVkUGxhY2VtZW50KTtcbiAgdmFyIGlzQmFzZVBsYWNlbWVudCA9IGJhc2VQbGFjZW1lbnQgPT09IHByZWZlcnJlZFBsYWNlbWVudDtcbiAgdmFyIGZhbGxiYWNrUGxhY2VtZW50cyA9IHNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyB8fCAoaXNCYXNlUGxhY2VtZW50IHx8ICFmbGlwVmFyaWF0aW9ucyA/IFtnZXRPcHBvc2l0ZVBsYWNlbWVudChwcmVmZXJyZWRQbGFjZW1lbnQpXSA6IGdldEV4cGFuZGVkRmFsbGJhY2tQbGFjZW1lbnRzKHByZWZlcnJlZFBsYWNlbWVudCkpO1xuICB2YXIgcGxhY2VtZW50cyA9IFtwcmVmZXJyZWRQbGFjZW1lbnRdLmNvbmNhdChmYWxsYmFja1BsYWNlbWVudHMpLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgICByZXR1cm4gYWNjLmNvbmNhdChnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgPT09IGF1dG8gPyBjb21wdXRlQXV0b1BsYWNlbWVudChzdGF0ZSwge1xuICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnk6IHJvb3RCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmc6IHBhZGRpbmcsXG4gICAgICBmbGlwVmFyaWF0aW9uczogZmxpcFZhcmlhdGlvbnMsXG4gICAgICBhbGxvd2VkQXV0b1BsYWNlbWVudHM6IGFsbG93ZWRBdXRvUGxhY2VtZW50c1xuICAgIH0pIDogcGxhY2VtZW50KTtcbiAgfSwgW10pO1xuICB2YXIgcmVmZXJlbmNlUmVjdCA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZTtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciBjaGVja3NNYXAgPSBuZXcgTWFwKCk7XG4gIHZhciBtYWtlRmFsbGJhY2tDaGVja3MgPSB0cnVlO1xuICB2YXIgZmlyc3RGaXR0aW5nUGxhY2VtZW50ID0gcGxhY2VtZW50c1swXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHBsYWNlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcGxhY2VtZW50ID0gcGxhY2VtZW50c1tpXTtcblxuICAgIHZhciBfYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KTtcblxuICAgIHZhciBpc1N0YXJ0VmFyaWF0aW9uID0gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkgPT09IHN0YXJ0O1xuICAgIHZhciBpc1ZlcnRpY2FsID0gW3RvcCwgYm90dG9tXS5pbmRleE9mKF9iYXNlUGxhY2VtZW50KSA+PSAwO1xuICAgIHZhciBsZW4gPSBpc1ZlcnRpY2FsID8gJ3dpZHRoJyA6ICdoZWlnaHQnO1xuICAgIHZhciBvdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgICAgYWx0Qm91bmRhcnk6IGFsdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZzogcGFkZGluZ1xuICAgIH0pO1xuICAgIHZhciBtYWluVmFyaWF0aW9uU2lkZSA9IGlzVmVydGljYWwgPyBpc1N0YXJ0VmFyaWF0aW9uID8gcmlnaHQgOiBsZWZ0IDogaXNTdGFydFZhcmlhdGlvbiA/IGJvdHRvbSA6IHRvcDtcblxuICAgIGlmIChyZWZlcmVuY2VSZWN0W2xlbl0gPiBwb3BwZXJSZWN0W2xlbl0pIHtcbiAgICAgIG1haW5WYXJpYXRpb25TaWRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpblZhcmlhdGlvblNpZGUpO1xuICAgIH1cblxuICAgIHZhciBhbHRWYXJpYXRpb25TaWRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpblZhcmlhdGlvblNpZGUpO1xuICAgIHZhciBjaGVja3MgPSBbXTtcblxuICAgIGlmIChjaGVja01haW5BeGlzKSB7XG4gICAgICBjaGVja3MucHVzaChvdmVyZmxvd1tfYmFzZVBsYWNlbWVudF0gPD0gMCk7XG4gICAgfVxuXG4gICAgaWYgKGNoZWNrQWx0QXhpcykge1xuICAgICAgY2hlY2tzLnB1c2gob3ZlcmZsb3dbbWFpblZhcmlhdGlvblNpZGVdIDw9IDAsIG92ZXJmbG93W2FsdFZhcmlhdGlvblNpZGVdIDw9IDApO1xuICAgIH1cblxuICAgIGlmIChjaGVja3MuZXZlcnkoZnVuY3Rpb24gKGNoZWNrKSB7XG4gICAgICByZXR1cm4gY2hlY2s7XG4gICAgfSkpIHtcbiAgICAgIGZpcnN0Rml0dGluZ1BsYWNlbWVudCA9IHBsYWNlbWVudDtcbiAgICAgIG1ha2VGYWxsYmFja0NoZWNrcyA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2hlY2tzTWFwLnNldChwbGFjZW1lbnQsIGNoZWNrcyk7XG4gIH1cblxuICBpZiAobWFrZUZhbGxiYWNrQ2hlY2tzKSB7XG4gICAgLy8gYDJgIG1heSBiZSBkZXNpcmVkIGluIHNvbWUgY2FzZXMgXHUyMDEzIHJlc2VhcmNoIGxhdGVyXG4gICAgdmFyIG51bWJlck9mQ2hlY2tzID0gZmxpcFZhcmlhdGlvbnMgPyAzIDogMTtcblxuICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKF9pKSB7XG4gICAgICB2YXIgZml0dGluZ1BsYWNlbWVudCA9IHBsYWNlbWVudHMuZmluZChmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgICAgIHZhciBjaGVja3MgPSBjaGVja3NNYXAuZ2V0KHBsYWNlbWVudCk7XG5cbiAgICAgICAgaWYgKGNoZWNrcykge1xuICAgICAgICAgIHJldHVybiBjaGVja3Muc2xpY2UoMCwgX2kpLmV2ZXJ5KGZ1bmN0aW9uIChjaGVjaykge1xuICAgICAgICAgICAgcmV0dXJuIGNoZWNrO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKGZpdHRpbmdQbGFjZW1lbnQpIHtcbiAgICAgICAgZmlyc3RGaXR0aW5nUGxhY2VtZW50ID0gZml0dGluZ1BsYWNlbWVudDtcbiAgICAgICAgcmV0dXJuIFwiYnJlYWtcIjtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZm9yICh2YXIgX2kgPSBudW1iZXJPZkNoZWNrczsgX2kgPiAwOyBfaS0tKSB7XG4gICAgICB2YXIgX3JldCA9IF9sb29wKF9pKTtcblxuICAgICAgaWYgKF9yZXQgPT09IFwiYnJlYWtcIikgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0YXRlLnBsYWNlbWVudCAhPT0gZmlyc3RGaXR0aW5nUGxhY2VtZW50KSB7XG4gICAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXS5fc2tpcCA9IHRydWU7XG4gICAgc3RhdGUucGxhY2VtZW50ID0gZmlyc3RGaXR0aW5nUGxhY2VtZW50O1xuICAgIHN0YXRlLnJlc2V0ID0gdHJ1ZTtcbiAgfVxufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnZmxpcCcsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIGZuOiBmbGlwLFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ29mZnNldCddLFxuICBkYXRhOiB7XG4gICAgX3NraXA6IGZhbHNlXG4gIH1cbn07IiwgImltcG9ydCB7IHRvcCwgYm90dG9tLCBsZWZ0LCByaWdodCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuXG5mdW5jdGlvbiBnZXRTaWRlT2Zmc2V0cyhvdmVyZmxvdywgcmVjdCwgcHJldmVudGVkT2Zmc2V0cykge1xuICBpZiAocHJldmVudGVkT2Zmc2V0cyA9PT0gdm9pZCAwKSB7XG4gICAgcHJldmVudGVkT2Zmc2V0cyA9IHtcbiAgICAgIHg6IDAsXG4gICAgICB5OiAwXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdG9wOiBvdmVyZmxvdy50b3AgLSByZWN0LmhlaWdodCAtIHByZXZlbnRlZE9mZnNldHMueSxcbiAgICByaWdodDogb3ZlcmZsb3cucmlnaHQgLSByZWN0LndpZHRoICsgcHJldmVudGVkT2Zmc2V0cy54LFxuICAgIGJvdHRvbTogb3ZlcmZsb3cuYm90dG9tIC0gcmVjdC5oZWlnaHQgKyBwcmV2ZW50ZWRPZmZzZXRzLnksXG4gICAgbGVmdDogb3ZlcmZsb3cubGVmdCAtIHJlY3Qud2lkdGggLSBwcmV2ZW50ZWRPZmZzZXRzLnhcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNBbnlTaWRlRnVsbHlDbGlwcGVkKG92ZXJmbG93KSB7XG4gIHJldHVybiBbdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0XS5zb21lKGZ1bmN0aW9uIChzaWRlKSB7XG4gICAgcmV0dXJuIG92ZXJmbG93W3NpZGVdID49IDA7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBoaWRlKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWU7XG4gIHZhciByZWZlcmVuY2VSZWN0ID0gc3RhdGUucmVjdHMucmVmZXJlbmNlO1xuICB2YXIgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcbiAgdmFyIHByZXZlbnRlZE9mZnNldHMgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLnByZXZlbnRPdmVyZmxvdztcbiAgdmFyIHJlZmVyZW5jZU92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICBlbGVtZW50Q29udGV4dDogJ3JlZmVyZW5jZSdcbiAgfSk7XG4gIHZhciBwb3BwZXJBbHRPdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgYWx0Qm91bmRhcnk6IHRydWVcbiAgfSk7XG4gIHZhciByZWZlcmVuY2VDbGlwcGluZ09mZnNldHMgPSBnZXRTaWRlT2Zmc2V0cyhyZWZlcmVuY2VPdmVyZmxvdywgcmVmZXJlbmNlUmVjdCk7XG4gIHZhciBwb3BwZXJFc2NhcGVPZmZzZXRzID0gZ2V0U2lkZU9mZnNldHMocG9wcGVyQWx0T3ZlcmZsb3csIHBvcHBlclJlY3QsIHByZXZlbnRlZE9mZnNldHMpO1xuICB2YXIgaXNSZWZlcmVuY2VIaWRkZW4gPSBpc0FueVNpZGVGdWxseUNsaXBwZWQocmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzKTtcbiAgdmFyIGhhc1BvcHBlckVzY2FwZWQgPSBpc0FueVNpZGVGdWxseUNsaXBwZWQocG9wcGVyRXNjYXBlT2Zmc2V0cyk7XG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSB7XG4gICAgcmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzOiByZWZlcmVuY2VDbGlwcGluZ09mZnNldHMsXG4gICAgcG9wcGVyRXNjYXBlT2Zmc2V0czogcG9wcGVyRXNjYXBlT2Zmc2V0cyxcbiAgICBpc1JlZmVyZW5jZUhpZGRlbjogaXNSZWZlcmVuY2VIaWRkZW4sXG4gICAgaGFzUG9wcGVyRXNjYXBlZDogaGFzUG9wcGVyRXNjYXBlZFxuICB9O1xuICBzdGF0ZS5hdHRyaWJ1dGVzLnBvcHBlciA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyLCB7XG4gICAgJ2RhdGEtcG9wcGVyLXJlZmVyZW5jZS1oaWRkZW4nOiBpc1JlZmVyZW5jZUhpZGRlbixcbiAgICAnZGF0YS1wb3BwZXItZXNjYXBlZCc6IGhhc1BvcHBlckVzY2FwZWRcbiAgfSk7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdoaWRlJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydwcmV2ZW50T3ZlcmZsb3cnXSxcbiAgZm46IGhpZGVcbn07IiwgImltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgeyB0b3AsIGxlZnQsIHJpZ2h0LCBwbGFjZW1lbnRzIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3RhbmNlQW5kU2tpZGRpbmdUb1hZKHBsYWNlbWVudCwgcmVjdHMsIG9mZnNldCkge1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KTtcbiAgdmFyIGludmVydERpc3RhbmNlID0gW2xlZnQsIHRvcF0uaW5kZXhPZihiYXNlUGxhY2VtZW50KSA+PSAwID8gLTEgOiAxO1xuXG4gIHZhciBfcmVmID0gdHlwZW9mIG9mZnNldCA9PT0gJ2Z1bmN0aW9uJyA/IG9mZnNldChPYmplY3QuYXNzaWduKHt9LCByZWN0cywge1xuICAgIHBsYWNlbWVudDogcGxhY2VtZW50XG4gIH0pKSA6IG9mZnNldCxcbiAgICAgIHNraWRkaW5nID0gX3JlZlswXSxcbiAgICAgIGRpc3RhbmNlID0gX3JlZlsxXTtcblxuICBza2lkZGluZyA9IHNraWRkaW5nIHx8IDA7XG4gIGRpc3RhbmNlID0gKGRpc3RhbmNlIHx8IDApICogaW52ZXJ0RGlzdGFuY2U7XG4gIHJldHVybiBbbGVmdCwgcmlnaHRdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPj0gMCA/IHtcbiAgICB4OiBkaXN0YW5jZSxcbiAgICB5OiBza2lkZGluZ1xuICB9IDoge1xuICAgIHg6IHNraWRkaW5nLFxuICAgIHk6IGRpc3RhbmNlXG4gIH07XG59XG5cbmZ1bmN0aW9uIG9mZnNldChfcmVmMikge1xuICB2YXIgc3RhdGUgPSBfcmVmMi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmMi5vcHRpb25zLFxuICAgICAgbmFtZSA9IF9yZWYyLm5hbWU7XG4gIHZhciBfb3B0aW9ucyRvZmZzZXQgPSBvcHRpb25zLm9mZnNldCxcbiAgICAgIG9mZnNldCA9IF9vcHRpb25zJG9mZnNldCA9PT0gdm9pZCAwID8gWzAsIDBdIDogX29wdGlvbnMkb2Zmc2V0O1xuICB2YXIgZGF0YSA9IHBsYWNlbWVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICAgIGFjY1twbGFjZW1lbnRdID0gZGlzdGFuY2VBbmRTa2lkZGluZ1RvWFkocGxhY2VtZW50LCBzdGF0ZS5yZWN0cywgb2Zmc2V0KTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG4gIHZhciBfZGF0YSRzdGF0ZSRwbGFjZW1lbnQgPSBkYXRhW3N0YXRlLnBsYWNlbWVudF0sXG4gICAgICB4ID0gX2RhdGEkc3RhdGUkcGxhY2VtZW50LngsXG4gICAgICB5ID0gX2RhdGEkc3RhdGUkcGxhY2VtZW50Lnk7XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyAhPSBudWxsKSB7XG4gICAgc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLnggKz0geDtcbiAgICBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMueSArPSB5O1xuICB9XG5cbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IGRhdGE7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdvZmZzZXQnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICByZXF1aXJlczogWydwb3BwZXJPZmZzZXRzJ10sXG4gIGZuOiBvZmZzZXRcbn07IiwgImltcG9ydCBjb21wdXRlT2Zmc2V0cyBmcm9tIFwiLi4vdXRpbHMvY29tcHV0ZU9mZnNldHMuanNcIjtcblxuZnVuY3Rpb24gcG9wcGVyT2Zmc2V0cyhfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuICAvLyBPZmZzZXRzIGFyZSB0aGUgYWN0dWFsIHBvc2l0aW9uIHRoZSBwb3BwZXIgbmVlZHMgdG8gaGF2ZSB0byBiZVxuICAvLyBwcm9wZXJseSBwb3NpdGlvbmVkIG5lYXIgaXRzIHJlZmVyZW5jZSBlbGVtZW50XG4gIC8vIFRoaXMgaXMgdGhlIG1vc3QgYmFzaWMgcGxhY2VtZW50LCBhbmQgd2lsbCBiZSBhZGp1c3RlZCBieVxuICAvLyB0aGUgbW9kaWZpZXJzIGluIHRoZSBuZXh0IHN0ZXBcbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IGNvbXB1dGVPZmZzZXRzKHtcbiAgICByZWZlcmVuY2U6IHN0YXRlLnJlY3RzLnJlZmVyZW5jZSxcbiAgICBlbGVtZW50OiBzdGF0ZS5yZWN0cy5wb3BwZXIsXG4gICAgc3RyYXRlZ3k6ICdhYnNvbHV0ZScsXG4gICAgcGxhY2VtZW50OiBzdGF0ZS5wbGFjZW1lbnRcbiAgfSk7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdwb3BwZXJPZmZzZXRzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdyZWFkJyxcbiAgZm46IHBvcHBlck9mZnNldHMsXG4gIGRhdGE6IHt9XG59OyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRBbHRBeGlzKGF4aXMpIHtcbiAgcmV0dXJuIGF4aXMgPT09ICd4JyA/ICd5JyA6ICd4Jztcbn0iLCAiaW1wb3J0IHsgdG9wLCBsZWZ0LCByaWdodCwgYm90dG9tLCBzdGFydCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldEFsdEF4aXMgZnJvbSBcIi4uL3V0aWxzL2dldEFsdEF4aXMuanNcIjtcbmltcG9ydCB7IHdpdGhpbiwgd2l0aGluTWF4Q2xhbXAgfSBmcm9tIFwiLi4vdXRpbHMvd2l0aGluLmpzXCI7XG5pbXBvcnQgZ2V0TGF5b3V0UmVjdCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldExheW91dFJlY3QuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi4vdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanNcIjtcbmltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4uL3V0aWxzL2dldFZhcmlhdGlvbi5qc1wiO1xuaW1wb3J0IGdldEZyZXNoU2lkZU9iamVjdCBmcm9tIFwiLi4vdXRpbHMvZ2V0RnJlc2hTaWRlT2JqZWN0LmpzXCI7XG5pbXBvcnQgeyBtaW4gYXMgbWF0aE1pbiwgbWF4IGFzIG1hdGhNYXggfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiO1xuXG5mdW5jdGlvbiBwcmV2ZW50T3ZlcmZsb3coX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYub3B0aW9ucyxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWU7XG4gIHZhciBfb3B0aW9ucyRtYWluQXhpcyA9IG9wdGlvbnMubWFpbkF4aXMsXG4gICAgICBjaGVja01haW5BeGlzID0gX29wdGlvbnMkbWFpbkF4aXMgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRtYWluQXhpcyxcbiAgICAgIF9vcHRpb25zJGFsdEF4aXMgPSBvcHRpb25zLmFsdEF4aXMsXG4gICAgICBjaGVja0FsdEF4aXMgPSBfb3B0aW9ucyRhbHRBeGlzID09PSB2b2lkIDAgPyBmYWxzZSA6IF9vcHRpb25zJGFsdEF4aXMsXG4gICAgICBib3VuZGFyeSA9IG9wdGlvbnMuYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnkgPSBvcHRpb25zLnJvb3RCb3VuZGFyeSxcbiAgICAgIGFsdEJvdW5kYXJ5ID0gb3B0aW9ucy5hbHRCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmcgPSBvcHRpb25zLnBhZGRpbmcsXG4gICAgICBfb3B0aW9ucyR0ZXRoZXIgPSBvcHRpb25zLnRldGhlcixcbiAgICAgIHRldGhlciA9IF9vcHRpb25zJHRldGhlciA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJHRldGhlcixcbiAgICAgIF9vcHRpb25zJHRldGhlck9mZnNldCA9IG9wdGlvbnMudGV0aGVyT2Zmc2V0LFxuICAgICAgdGV0aGVyT2Zmc2V0ID0gX29wdGlvbnMkdGV0aGVyT2Zmc2V0ID09PSB2b2lkIDAgPyAwIDogX29wdGlvbnMkdGV0aGVyT2Zmc2V0O1xuICB2YXIgb3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICByb290Qm91bmRhcnk6IHJvb3RCb3VuZGFyeSxcbiAgICBwYWRkaW5nOiBwYWRkaW5nLFxuICAgIGFsdEJvdW5kYXJ5OiBhbHRCb3VuZGFyeVxuICB9KTtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHN0YXRlLnBsYWNlbWVudCk7XG4gIHZhciB2YXJpYXRpb24gPSBnZXRWYXJpYXRpb24oc3RhdGUucGxhY2VtZW50KTtcbiAgdmFyIGlzQmFzZVBsYWNlbWVudCA9ICF2YXJpYXRpb247XG4gIHZhciBtYWluQXhpcyA9IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChiYXNlUGxhY2VtZW50KTtcbiAgdmFyIGFsdEF4aXMgPSBnZXRBbHRBeGlzKG1haW5BeGlzKTtcbiAgdmFyIHBvcHBlck9mZnNldHMgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHM7XG4gIHZhciByZWZlcmVuY2VSZWN0ID0gc3RhdGUucmVjdHMucmVmZXJlbmNlO1xuICB2YXIgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcbiAgdmFyIHRldGhlck9mZnNldFZhbHVlID0gdHlwZW9mIHRldGhlck9mZnNldCA9PT0gJ2Z1bmN0aW9uJyA/IHRldGhlck9mZnNldChPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5yZWN0cywge1xuICAgIHBsYWNlbWVudDogc3RhdGUucGxhY2VtZW50XG4gIH0pKSA6IHRldGhlck9mZnNldDtcbiAgdmFyIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZSA9IHR5cGVvZiB0ZXRoZXJPZmZzZXRWYWx1ZSA9PT0gJ251bWJlcicgPyB7XG4gICAgbWFpbkF4aXM6IHRldGhlck9mZnNldFZhbHVlLFxuICAgIGFsdEF4aXM6IHRldGhlck9mZnNldFZhbHVlXG4gIH0gOiBPYmplY3QuYXNzaWduKHtcbiAgICBtYWluQXhpczogMCxcbiAgICBhbHRBeGlzOiAwXG4gIH0sIHRldGhlck9mZnNldFZhbHVlKTtcbiAgdmFyIG9mZnNldE1vZGlmaWVyU3RhdGUgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLm9mZnNldCA/IHN0YXRlLm1vZGlmaWVyc0RhdGEub2Zmc2V0W3N0YXRlLnBsYWNlbWVudF0gOiBudWxsO1xuICB2YXIgZGF0YSA9IHtcbiAgICB4OiAwLFxuICAgIHk6IDBcbiAgfTtcblxuICBpZiAoIXBvcHBlck9mZnNldHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoY2hlY2tNYWluQXhpcykge1xuICAgIHZhciBfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQ7XG5cbiAgICB2YXIgbWFpblNpZGUgPSBtYWluQXhpcyA9PT0gJ3knID8gdG9wIDogbGVmdDtcbiAgICB2YXIgYWx0U2lkZSA9IG1haW5BeGlzID09PSAneScgPyBib3R0b20gOiByaWdodDtcbiAgICB2YXIgbGVuID0gbWFpbkF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcbiAgICB2YXIgb2Zmc2V0ID0gcG9wcGVyT2Zmc2V0c1ttYWluQXhpc107XG4gICAgdmFyIG1pbiA9IG9mZnNldCArIG92ZXJmbG93W21haW5TaWRlXTtcbiAgICB2YXIgbWF4ID0gb2Zmc2V0IC0gb3ZlcmZsb3dbYWx0U2lkZV07XG4gICAgdmFyIGFkZGl0aXZlID0gdGV0aGVyID8gLXBvcHBlclJlY3RbbGVuXSAvIDIgOiAwO1xuICAgIHZhciBtaW5MZW4gPSB2YXJpYXRpb24gPT09IHN0YXJ0ID8gcmVmZXJlbmNlUmVjdFtsZW5dIDogcG9wcGVyUmVjdFtsZW5dO1xuICAgIHZhciBtYXhMZW4gPSB2YXJpYXRpb24gPT09IHN0YXJ0ID8gLXBvcHBlclJlY3RbbGVuXSA6IC1yZWZlcmVuY2VSZWN0W2xlbl07IC8vIFdlIG5lZWQgdG8gaW5jbHVkZSB0aGUgYXJyb3cgaW4gdGhlIGNhbGN1bGF0aW9uIHNvIHRoZSBhcnJvdyBkb2Vzbid0IGdvXG4gICAgLy8gb3V0c2lkZSB0aGUgcmVmZXJlbmNlIGJvdW5kc1xuXG4gICAgdmFyIGFycm93RWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzLmFycm93O1xuICAgIHZhciBhcnJvd1JlY3QgPSB0ZXRoZXIgJiYgYXJyb3dFbGVtZW50ID8gZ2V0TGF5b3V0UmVjdChhcnJvd0VsZW1lbnQpIDoge1xuICAgICAgd2lkdGg6IDAsXG4gICAgICBoZWlnaHQ6IDBcbiAgICB9O1xuICAgIHZhciBhcnJvd1BhZGRpbmdPYmplY3QgPSBzdGF0ZS5tb2RpZmllcnNEYXRhWydhcnJvdyNwZXJzaXN0ZW50J10gPyBzdGF0ZS5tb2RpZmllcnNEYXRhWydhcnJvdyNwZXJzaXN0ZW50J10ucGFkZGluZyA6IGdldEZyZXNoU2lkZU9iamVjdCgpO1xuICAgIHZhciBhcnJvd1BhZGRpbmdNaW4gPSBhcnJvd1BhZGRpbmdPYmplY3RbbWFpblNpZGVdO1xuICAgIHZhciBhcnJvd1BhZGRpbmdNYXggPSBhcnJvd1BhZGRpbmdPYmplY3RbYWx0U2lkZV07IC8vIElmIHRoZSByZWZlcmVuY2UgbGVuZ3RoIGlzIHNtYWxsZXIgdGhhbiB0aGUgYXJyb3cgbGVuZ3RoLCB3ZSBkb24ndCB3YW50XG4gICAgLy8gdG8gaW5jbHVkZSBpdHMgZnVsbCBzaXplIGluIHRoZSBjYWxjdWxhdGlvbi4gSWYgdGhlIHJlZmVyZW5jZSBpcyBzbWFsbFxuICAgIC8vIGFuZCBuZWFyIHRoZSBlZGdlIG9mIGEgYm91bmRhcnksIHRoZSBwb3BwZXIgY2FuIG92ZXJmbG93IGV2ZW4gaWYgdGhlXG4gICAgLy8gcmVmZXJlbmNlIGlzIG5vdCBvdmVyZmxvd2luZyBhcyB3ZWxsIChlLmcuIHZpcnR1YWwgZWxlbWVudHMgd2l0aCBub1xuICAgIC8vIHdpZHRoIG9yIGhlaWdodClcblxuICAgIHZhciBhcnJvd0xlbiA9IHdpdGhpbigwLCByZWZlcmVuY2VSZWN0W2xlbl0sIGFycm93UmVjdFtsZW5dKTtcbiAgICB2YXIgbWluT2Zmc2V0ID0gaXNCYXNlUGxhY2VtZW50ID8gcmVmZXJlbmNlUmVjdFtsZW5dIC8gMiAtIGFkZGl0aXZlIC0gYXJyb3dMZW4gLSBhcnJvd1BhZGRpbmdNaW4gLSBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUubWFpbkF4aXMgOiBtaW5MZW4gLSBhcnJvd0xlbiAtIGFycm93UGFkZGluZ01pbiAtIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5tYWluQXhpcztcbiAgICB2YXIgbWF4T2Zmc2V0ID0gaXNCYXNlUGxhY2VtZW50ID8gLXJlZmVyZW5jZVJlY3RbbGVuXSAvIDIgKyBhZGRpdGl2ZSArIGFycm93TGVuICsgYXJyb3dQYWRkaW5nTWF4ICsgbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLm1haW5BeGlzIDogbWF4TGVuICsgYXJyb3dMZW4gKyBhcnJvd1BhZGRpbmdNYXggKyBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUubWFpbkF4aXM7XG4gICAgdmFyIGFycm93T2Zmc2V0UGFyZW50ID0gc3RhdGUuZWxlbWVudHMuYXJyb3cgJiYgZ2V0T2Zmc2V0UGFyZW50KHN0YXRlLmVsZW1lbnRzLmFycm93KTtcbiAgICB2YXIgY2xpZW50T2Zmc2V0ID0gYXJyb3dPZmZzZXRQYXJlbnQgPyBtYWluQXhpcyA9PT0gJ3knID8gYXJyb3dPZmZzZXRQYXJlbnQuY2xpZW50VG9wIHx8IDAgOiBhcnJvd09mZnNldFBhcmVudC5jbGllbnRMZWZ0IHx8IDAgOiAwO1xuICAgIHZhciBvZmZzZXRNb2RpZmllclZhbHVlID0gKF9vZmZzZXRNb2RpZmllclN0YXRlJCA9IG9mZnNldE1vZGlmaWVyU3RhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IG9mZnNldE1vZGlmaWVyU3RhdGVbbWFpbkF4aXNdKSAhPSBudWxsID8gX29mZnNldE1vZGlmaWVyU3RhdGUkIDogMDtcbiAgICB2YXIgdGV0aGVyTWluID0gb2Zmc2V0ICsgbWluT2Zmc2V0IC0gb2Zmc2V0TW9kaWZpZXJWYWx1ZSAtIGNsaWVudE9mZnNldDtcbiAgICB2YXIgdGV0aGVyTWF4ID0gb2Zmc2V0ICsgbWF4T2Zmc2V0IC0gb2Zmc2V0TW9kaWZpZXJWYWx1ZTtcbiAgICB2YXIgcHJldmVudGVkT2Zmc2V0ID0gd2l0aGluKHRldGhlciA/IG1hdGhNaW4obWluLCB0ZXRoZXJNaW4pIDogbWluLCBvZmZzZXQsIHRldGhlciA/IG1hdGhNYXgobWF4LCB0ZXRoZXJNYXgpIDogbWF4KTtcbiAgICBwb3BwZXJPZmZzZXRzW21haW5BeGlzXSA9IHByZXZlbnRlZE9mZnNldDtcbiAgICBkYXRhW21haW5BeGlzXSA9IHByZXZlbnRlZE9mZnNldCAtIG9mZnNldDtcbiAgfVxuXG4gIGlmIChjaGVja0FsdEF4aXMpIHtcbiAgICB2YXIgX29mZnNldE1vZGlmaWVyU3RhdGUkMjtcblxuICAgIHZhciBfbWFpblNpZGUgPSBtYWluQXhpcyA9PT0gJ3gnID8gdG9wIDogbGVmdDtcblxuICAgIHZhciBfYWx0U2lkZSA9IG1haW5BeGlzID09PSAneCcgPyBib3R0b20gOiByaWdodDtcblxuICAgIHZhciBfb2Zmc2V0ID0gcG9wcGVyT2Zmc2V0c1thbHRBeGlzXTtcblxuICAgIHZhciBfbGVuID0gYWx0QXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuXG4gICAgdmFyIF9taW4gPSBfb2Zmc2V0ICsgb3ZlcmZsb3dbX21haW5TaWRlXTtcblxuICAgIHZhciBfbWF4ID0gX29mZnNldCAtIG92ZXJmbG93W19hbHRTaWRlXTtcblxuICAgIHZhciBpc09yaWdpblNpZGUgPSBbdG9wLCBsZWZ0XS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpICE9PSAtMTtcblxuICAgIHZhciBfb2Zmc2V0TW9kaWZpZXJWYWx1ZSA9IChfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQyID0gb2Zmc2V0TW9kaWZpZXJTdGF0ZSA9PSBudWxsID8gdm9pZCAwIDogb2Zmc2V0TW9kaWZpZXJTdGF0ZVthbHRBeGlzXSkgIT0gbnVsbCA/IF9vZmZzZXRNb2RpZmllclN0YXRlJDIgOiAwO1xuXG4gICAgdmFyIF90ZXRoZXJNaW4gPSBpc09yaWdpblNpZGUgPyBfbWluIDogX29mZnNldCAtIHJlZmVyZW5jZVJlY3RbX2xlbl0gLSBwb3BwZXJSZWN0W19sZW5dIC0gX29mZnNldE1vZGlmaWVyVmFsdWUgKyBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUuYWx0QXhpcztcblxuICAgIHZhciBfdGV0aGVyTWF4ID0gaXNPcmlnaW5TaWRlID8gX29mZnNldCArIHJlZmVyZW5jZVJlY3RbX2xlbl0gKyBwb3BwZXJSZWN0W19sZW5dIC0gX29mZnNldE1vZGlmaWVyVmFsdWUgLSBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUuYWx0QXhpcyA6IF9tYXg7XG5cbiAgICB2YXIgX3ByZXZlbnRlZE9mZnNldCA9IHRldGhlciAmJiBpc09yaWdpblNpZGUgPyB3aXRoaW5NYXhDbGFtcChfdGV0aGVyTWluLCBfb2Zmc2V0LCBfdGV0aGVyTWF4KSA6IHdpdGhpbih0ZXRoZXIgPyBfdGV0aGVyTWluIDogX21pbiwgX29mZnNldCwgdGV0aGVyID8gX3RldGhlck1heCA6IF9tYXgpO1xuXG4gICAgcG9wcGVyT2Zmc2V0c1thbHRBeGlzXSA9IF9wcmV2ZW50ZWRPZmZzZXQ7XG4gICAgZGF0YVthbHRBeGlzXSA9IF9wcmV2ZW50ZWRPZmZzZXQgLSBfb2Zmc2V0O1xuICB9XG5cbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IGRhdGE7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdwcmV2ZW50T3ZlcmZsb3cnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICBmbjogcHJldmVudE92ZXJmbG93LFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ29mZnNldCddXG59OyIsICJleHBvcnQgeyBkZWZhdWx0IGFzIGFwcGx5U3R5bGVzIH0gZnJvbSBcIi4vYXBwbHlTdHlsZXMuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgYXJyb3cgfSBmcm9tIFwiLi9hcnJvdy5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjb21wdXRlU3R5bGVzIH0gZnJvbSBcIi4vY29tcHV0ZVN0eWxlcy5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBldmVudExpc3RlbmVycyB9IGZyb20gXCIuL2V2ZW50TGlzdGVuZXJzLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGZsaXAgfSBmcm9tIFwiLi9mbGlwLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGhpZGUgfSBmcm9tIFwiLi9oaWRlLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG9mZnNldCB9IGZyb20gXCIuL29mZnNldC5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwb3BwZXJPZmZzZXRzIH0gZnJvbSBcIi4vcG9wcGVyT2Zmc2V0cy5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwcmV2ZW50T3ZlcmZsb3cgfSBmcm9tIFwiLi9wcmV2ZW50T3ZlcmZsb3cuanNcIjsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0SFRNTEVsZW1lbnRTY3JvbGwoZWxlbWVudCkge1xuICByZXR1cm4ge1xuICAgIHNjcm9sbExlZnQ6IGVsZW1lbnQuc2Nyb2xsTGVmdCxcbiAgICBzY3JvbGxUb3A6IGVsZW1lbnQuc2Nyb2xsVG9wXG4gIH07XG59IiwgImltcG9ydCBnZXRXaW5kb3dTY3JvbGwgZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBnZXRIVE1MRWxlbWVudFNjcm9sbCBmcm9tIFwiLi9nZXRIVE1MRWxlbWVudFNjcm9sbC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Tm9kZVNjcm9sbChub2RlKSB7XG4gIGlmIChub2RlID09PSBnZXRXaW5kb3cobm9kZSkgfHwgIWlzSFRNTEVsZW1lbnQobm9kZSkpIHtcbiAgICByZXR1cm4gZ2V0V2luZG93U2Nyb2xsKG5vZGUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBnZXRIVE1MRWxlbWVudFNjcm9sbChub2RlKTtcbiAgfVxufSIsICJpbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IGdldE5vZGVTY3JvbGwgZnJvbSBcIi4vZ2V0Tm9kZVNjcm9sbC5qc1wiO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbEJhclggZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsQmFyWC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBpc1Njcm9sbFBhcmVudCBmcm9tIFwiLi9pc1Njcm9sbFBhcmVudC5qc1wiO1xuaW1wb3J0IHsgcm91bmQgfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiO1xuXG5mdW5jdGlvbiBpc0VsZW1lbnRTY2FsZWQoZWxlbWVudCkge1xuICB2YXIgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHZhciBzY2FsZVggPSByb3VuZChyZWN0LndpZHRoKSAvIGVsZW1lbnQub2Zmc2V0V2lkdGggfHwgMTtcbiAgdmFyIHNjYWxlWSA9IHJvdW5kKHJlY3QuaGVpZ2h0KSAvIGVsZW1lbnQub2Zmc2V0SGVpZ2h0IHx8IDE7XG4gIHJldHVybiBzY2FsZVggIT09IDEgfHwgc2NhbGVZICE9PSAxO1xufSAvLyBSZXR1cm5zIHRoZSBjb21wb3NpdGUgcmVjdCBvZiBhbiBlbGVtZW50IHJlbGF0aXZlIHRvIGl0cyBvZmZzZXRQYXJlbnQuXG4vLyBDb21wb3NpdGUgbWVhbnMgaXQgdGFrZXMgaW50byBhY2NvdW50IHRyYW5zZm9ybXMgYXMgd2VsbCBhcyBsYXlvdXQuXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Q29tcG9zaXRlUmVjdChlbGVtZW50T3JWaXJ0dWFsRWxlbWVudCwgb2Zmc2V0UGFyZW50LCBpc0ZpeGVkKSB7XG4gIGlmIChpc0ZpeGVkID09PSB2b2lkIDApIHtcbiAgICBpc0ZpeGVkID0gZmFsc2U7XG4gIH1cblxuICB2YXIgaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgPSBpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIHZhciBvZmZzZXRQYXJlbnRJc1NjYWxlZCA9IGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KSAmJiBpc0VsZW1lbnRTY2FsZWQob2Zmc2V0UGFyZW50KTtcbiAgdmFyIGRvY3VtZW50RWxlbWVudCA9IGdldERvY3VtZW50RWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICB2YXIgcmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50T3JWaXJ0dWFsRWxlbWVudCwgb2Zmc2V0UGFyZW50SXNTY2FsZWQsIGlzRml4ZWQpO1xuICB2YXIgc2Nyb2xsID0ge1xuICAgIHNjcm9sbExlZnQ6IDAsXG4gICAgc2Nyb2xsVG9wOiAwXG4gIH07XG4gIHZhciBvZmZzZXRzID0ge1xuICAgIHg6IDAsXG4gICAgeTogMFxuICB9O1xuXG4gIGlmIChpc09mZnNldFBhcmVudEFuRWxlbWVudCB8fCAhaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgJiYgIWlzRml4ZWQpIHtcbiAgICBpZiAoZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSAhPT0gJ2JvZHknIHx8IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wb3BwZXJqcy9wb3BwZXItY29yZS9pc3N1ZXMvMTA3OFxuICAgIGlzU2Nyb2xsUGFyZW50KGRvY3VtZW50RWxlbWVudCkpIHtcbiAgICAgIHNjcm9sbCA9IGdldE5vZGVTY3JvbGwob2Zmc2V0UGFyZW50KTtcbiAgICB9XG5cbiAgICBpZiAoaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpKSB7XG4gICAgICBvZmZzZXRzID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KG9mZnNldFBhcmVudCwgdHJ1ZSk7XG4gICAgICBvZmZzZXRzLnggKz0gb2Zmc2V0UGFyZW50LmNsaWVudExlZnQ7XG4gICAgICBvZmZzZXRzLnkgKz0gb2Zmc2V0UGFyZW50LmNsaWVudFRvcDtcbiAgICB9IGVsc2UgaWYgKGRvY3VtZW50RWxlbWVudCkge1xuICAgICAgb2Zmc2V0cy54ID0gZ2V0V2luZG93U2Nyb2xsQmFyWChkb2N1bWVudEVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgeDogcmVjdC5sZWZ0ICsgc2Nyb2xsLnNjcm9sbExlZnQgLSBvZmZzZXRzLngsXG4gICAgeTogcmVjdC50b3AgKyBzY3JvbGwuc2Nyb2xsVG9wIC0gb2Zmc2V0cy55LFxuICAgIHdpZHRoOiByZWN0LndpZHRoLFxuICAgIGhlaWdodDogcmVjdC5oZWlnaHRcbiAgfTtcbn0iLCAiaW1wb3J0IHsgbW9kaWZpZXJQaGFzZXMgfSBmcm9tIFwiLi4vZW51bXMuanNcIjsgLy8gc291cmNlOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy80OTg3NTI1NVxuXG5mdW5jdGlvbiBvcmRlcihtb2RpZmllcnMpIHtcbiAgdmFyIG1hcCA9IG5ldyBNYXAoKTtcbiAgdmFyIHZpc2l0ZWQgPSBuZXcgU2V0KCk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgbW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgbWFwLnNldChtb2RpZmllci5uYW1lLCBtb2RpZmllcik7XG4gIH0pOyAvLyBPbiB2aXNpdGluZyBvYmplY3QsIGNoZWNrIGZvciBpdHMgZGVwZW5kZW5jaWVzIGFuZCB2aXNpdCB0aGVtIHJlY3Vyc2l2ZWx5XG5cbiAgZnVuY3Rpb24gc29ydChtb2RpZmllcikge1xuICAgIHZpc2l0ZWQuYWRkKG1vZGlmaWVyLm5hbWUpO1xuICAgIHZhciByZXF1aXJlcyA9IFtdLmNvbmNhdChtb2RpZmllci5yZXF1aXJlcyB8fCBbXSwgbW9kaWZpZXIucmVxdWlyZXNJZkV4aXN0cyB8fCBbXSk7XG4gICAgcmVxdWlyZXMuZm9yRWFjaChmdW5jdGlvbiAoZGVwKSB7XG4gICAgICBpZiAoIXZpc2l0ZWQuaGFzKGRlcCkpIHtcbiAgICAgICAgdmFyIGRlcE1vZGlmaWVyID0gbWFwLmdldChkZXApO1xuXG4gICAgICAgIGlmIChkZXBNb2RpZmllcikge1xuICAgICAgICAgIHNvcnQoZGVwTW9kaWZpZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmVzdWx0LnB1c2gobW9kaWZpZXIpO1xuICB9XG5cbiAgbW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgaWYgKCF2aXNpdGVkLmhhcyhtb2RpZmllci5uYW1lKSkge1xuICAgICAgLy8gY2hlY2sgZm9yIHZpc2l0ZWQgb2JqZWN0XG4gICAgICBzb3J0KG1vZGlmaWVyKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBvcmRlck1vZGlmaWVycyhtb2RpZmllcnMpIHtcbiAgLy8gb3JkZXIgYmFzZWQgb24gZGVwZW5kZW5jaWVzXG4gIHZhciBvcmRlcmVkTW9kaWZpZXJzID0gb3JkZXIobW9kaWZpZXJzKTsgLy8gb3JkZXIgYmFzZWQgb24gcGhhc2VcblxuICByZXR1cm4gbW9kaWZpZXJQaGFzZXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBoYXNlKSB7XG4gICAgcmV0dXJuIGFjYy5jb25jYXQob3JkZXJlZE1vZGlmaWVycy5maWx0ZXIoZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgICByZXR1cm4gbW9kaWZpZXIucGhhc2UgPT09IHBoYXNlO1xuICAgIH0pKTtcbiAgfSwgW10pO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZWJvdW5jZShmbikge1xuICB2YXIgcGVuZGluZztcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXBlbmRpbmcpIHtcbiAgICAgIHBlbmRpbmcgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBwZW5kaW5nID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHJlc29sdmUoZm4oKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBlbmRpbmc7XG4gIH07XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1lcmdlQnlOYW1lKG1vZGlmaWVycykge1xuICB2YXIgbWVyZ2VkID0gbW9kaWZpZXJzLnJlZHVjZShmdW5jdGlvbiAobWVyZ2VkLCBjdXJyZW50KSB7XG4gICAgdmFyIGV4aXN0aW5nID0gbWVyZ2VkW2N1cnJlbnQubmFtZV07XG4gICAgbWVyZ2VkW2N1cnJlbnQubmFtZV0gPSBleGlzdGluZyA/IE9iamVjdC5hc3NpZ24oe30sIGV4aXN0aW5nLCBjdXJyZW50LCB7XG4gICAgICBvcHRpb25zOiBPYmplY3QuYXNzaWduKHt9LCBleGlzdGluZy5vcHRpb25zLCBjdXJyZW50Lm9wdGlvbnMpLFxuICAgICAgZGF0YTogT2JqZWN0LmFzc2lnbih7fSwgZXhpc3RpbmcuZGF0YSwgY3VycmVudC5kYXRhKVxuICAgIH0pIDogY3VycmVudDtcbiAgICByZXR1cm4gbWVyZ2VkO1xuICB9LCB7fSk7IC8vIElFMTEgZG9lcyBub3Qgc3VwcG9ydCBPYmplY3QudmFsdWVzXG5cbiAgcmV0dXJuIE9iamVjdC5rZXlzKG1lcmdlZCkubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gbWVyZ2VkW2tleV07XG4gIH0pO1xufSIsICJpbXBvcnQgZ2V0Q29tcG9zaXRlUmVjdCBmcm9tIFwiLi9kb20tdXRpbHMvZ2V0Q29tcG9zaXRlUmVjdC5qc1wiO1xuaW1wb3J0IGdldExheW91dFJlY3QgZnJvbSBcIi4vZG9tLXV0aWxzL2dldExheW91dFJlY3QuanNcIjtcbmltcG9ydCBsaXN0U2Nyb2xsUGFyZW50cyBmcm9tIFwiLi9kb20tdXRpbHMvbGlzdFNjcm9sbFBhcmVudHMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4vZG9tLXV0aWxzL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IG9yZGVyTW9kaWZpZXJzIGZyb20gXCIuL3V0aWxzL29yZGVyTW9kaWZpZXJzLmpzXCI7XG5pbXBvcnQgZGVib3VuY2UgZnJvbSBcIi4vdXRpbHMvZGVib3VuY2UuanNcIjtcbmltcG9ydCBtZXJnZUJ5TmFtZSBmcm9tIFwiLi91dGlscy9tZXJnZUJ5TmFtZS5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgeyBpc0VsZW1lbnQgfSBmcm9tIFwiLi9kb20tdXRpbHMvaW5zdGFuY2VPZi5qc1wiO1xudmFyIERFRkFVTFRfT1BUSU9OUyA9IHtcbiAgcGxhY2VtZW50OiAnYm90dG9tJyxcbiAgbW9kaWZpZXJzOiBbXSxcbiAgc3RyYXRlZ3k6ICdhYnNvbHV0ZSdcbn07XG5cbmZ1bmN0aW9uIGFyZVZhbGlkRWxlbWVudHMoKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gIWFyZ3Muc29tZShmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgIHJldHVybiAhKGVsZW1lbnQgJiYgdHlwZW9mIGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0ID09PSAnZnVuY3Rpb24nKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb3BwZXJHZW5lcmF0b3IoZ2VuZXJhdG9yT3B0aW9ucykge1xuICBpZiAoZ2VuZXJhdG9yT3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgZ2VuZXJhdG9yT3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgdmFyIF9nZW5lcmF0b3JPcHRpb25zID0gZ2VuZXJhdG9yT3B0aW9ucyxcbiAgICAgIF9nZW5lcmF0b3JPcHRpb25zJGRlZiA9IF9nZW5lcmF0b3JPcHRpb25zLmRlZmF1bHRNb2RpZmllcnMsXG4gICAgICBkZWZhdWx0TW9kaWZpZXJzID0gX2dlbmVyYXRvck9wdGlvbnMkZGVmID09PSB2b2lkIDAgPyBbXSA6IF9nZW5lcmF0b3JPcHRpb25zJGRlZixcbiAgICAgIF9nZW5lcmF0b3JPcHRpb25zJGRlZjIgPSBfZ2VuZXJhdG9yT3B0aW9ucy5kZWZhdWx0T3B0aW9ucyxcbiAgICAgIGRlZmF1bHRPcHRpb25zID0gX2dlbmVyYXRvck9wdGlvbnMkZGVmMiA9PT0gdm9pZCAwID8gREVGQVVMVF9PUFRJT05TIDogX2dlbmVyYXRvck9wdGlvbnMkZGVmMjtcbiAgcmV0dXJuIGZ1bmN0aW9uIGNyZWF0ZVBvcHBlcihyZWZlcmVuY2UsIHBvcHBlciwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSBkZWZhdWx0T3B0aW9ucztcbiAgICB9XG5cbiAgICB2YXIgc3RhdGUgPSB7XG4gICAgICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuICAgICAgb3JkZXJlZE1vZGlmaWVyczogW10sXG4gICAgICBvcHRpb25zOiBPYmplY3QuYXNzaWduKHt9LCBERUZBVUxUX09QVElPTlMsIGRlZmF1bHRPcHRpb25zKSxcbiAgICAgIG1vZGlmaWVyc0RhdGE6IHt9LFxuICAgICAgZWxlbWVudHM6IHtcbiAgICAgICAgcmVmZXJlbmNlOiByZWZlcmVuY2UsXG4gICAgICAgIHBvcHBlcjogcG9wcGVyXG4gICAgICB9LFxuICAgICAgYXR0cmlidXRlczoge30sXG4gICAgICBzdHlsZXM6IHt9XG4gICAgfTtcbiAgICB2YXIgZWZmZWN0Q2xlYW51cEZucyA9IFtdO1xuICAgIHZhciBpc0Rlc3Ryb3llZCA9IGZhbHNlO1xuICAgIHZhciBpbnN0YW5jZSA9IHtcbiAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgIHNldE9wdGlvbnM6IGZ1bmN0aW9uIHNldE9wdGlvbnMoc2V0T3B0aW9uc0FjdGlvbikge1xuICAgICAgICB2YXIgb3B0aW9ucyA9IHR5cGVvZiBzZXRPcHRpb25zQWN0aW9uID09PSAnZnVuY3Rpb24nID8gc2V0T3B0aW9uc0FjdGlvbihzdGF0ZS5vcHRpb25zKSA6IHNldE9wdGlvbnNBY3Rpb247XG4gICAgICAgIGNsZWFudXBNb2RpZmllckVmZmVjdHMoKTtcbiAgICAgICAgc3RhdGUub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRPcHRpb25zLCBzdGF0ZS5vcHRpb25zLCBvcHRpb25zKTtcbiAgICAgICAgc3RhdGUuc2Nyb2xsUGFyZW50cyA9IHtcbiAgICAgICAgICByZWZlcmVuY2U6IGlzRWxlbWVudChyZWZlcmVuY2UpID8gbGlzdFNjcm9sbFBhcmVudHMocmVmZXJlbmNlKSA6IHJlZmVyZW5jZS5jb250ZXh0RWxlbWVudCA/IGxpc3RTY3JvbGxQYXJlbnRzKHJlZmVyZW5jZS5jb250ZXh0RWxlbWVudCkgOiBbXSxcbiAgICAgICAgICBwb3BwZXI6IGxpc3RTY3JvbGxQYXJlbnRzKHBvcHBlcilcbiAgICAgICAgfTsgLy8gT3JkZXJzIHRoZSBtb2RpZmllcnMgYmFzZWQgb24gdGhlaXIgZGVwZW5kZW5jaWVzIGFuZCBgcGhhc2VgXG4gICAgICAgIC8vIHByb3BlcnRpZXNcblxuICAgICAgICB2YXIgb3JkZXJlZE1vZGlmaWVycyA9IG9yZGVyTW9kaWZpZXJzKG1lcmdlQnlOYW1lKFtdLmNvbmNhdChkZWZhdWx0TW9kaWZpZXJzLCBzdGF0ZS5vcHRpb25zLm1vZGlmaWVycykpKTsgLy8gU3RyaXAgb3V0IGRpc2FibGVkIG1vZGlmaWVyc1xuXG4gICAgICAgIHN0YXRlLm9yZGVyZWRNb2RpZmllcnMgPSBvcmRlcmVkTW9kaWZpZXJzLmZpbHRlcihmdW5jdGlvbiAobSkge1xuICAgICAgICAgIHJldHVybiBtLmVuYWJsZWQ7XG4gICAgICAgIH0pO1xuICAgICAgICBydW5Nb2RpZmllckVmZmVjdHMoKTtcbiAgICAgICAgcmV0dXJuIGluc3RhbmNlLnVwZGF0ZSgpO1xuICAgICAgfSxcbiAgICAgIC8vIFN5bmMgdXBkYXRlIFx1MjAxMyBpdCB3aWxsIGFsd2F5cyBiZSBleGVjdXRlZCwgZXZlbiBpZiBub3QgbmVjZXNzYXJ5LiBUaGlzXG4gICAgICAvLyBpcyB1c2VmdWwgZm9yIGxvdyBmcmVxdWVuY3kgdXBkYXRlcyB3aGVyZSBzeW5jIGJlaGF2aW9yIHNpbXBsaWZpZXMgdGhlXG4gICAgICAvLyBsb2dpYy5cbiAgICAgIC8vIEZvciBoaWdoIGZyZXF1ZW5jeSB1cGRhdGVzIChlLmcuIGByZXNpemVgIGFuZCBgc2Nyb2xsYCBldmVudHMpLCBhbHdheXNcbiAgICAgIC8vIHByZWZlciB0aGUgYXN5bmMgUG9wcGVyI3VwZGF0ZSBtZXRob2RcbiAgICAgIGZvcmNlVXBkYXRlOiBmdW5jdGlvbiBmb3JjZVVwZGF0ZSgpIHtcbiAgICAgICAgaWYgKGlzRGVzdHJveWVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIF9zdGF0ZSRlbGVtZW50cyA9IHN0YXRlLmVsZW1lbnRzLFxuICAgICAgICAgICAgcmVmZXJlbmNlID0gX3N0YXRlJGVsZW1lbnRzLnJlZmVyZW5jZSxcbiAgICAgICAgICAgIHBvcHBlciA9IF9zdGF0ZSRlbGVtZW50cy5wb3BwZXI7IC8vIERvbid0IHByb2NlZWQgaWYgYHJlZmVyZW5jZWAgb3IgYHBvcHBlcmAgYXJlIG5vdCB2YWxpZCBlbGVtZW50c1xuICAgICAgICAvLyBhbnltb3JlXG5cbiAgICAgICAgaWYgKCFhcmVWYWxpZEVsZW1lbnRzKHJlZmVyZW5jZSwgcG9wcGVyKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBTdG9yZSB0aGUgcmVmZXJlbmNlIGFuZCBwb3BwZXIgcmVjdHMgdG8gYmUgcmVhZCBieSBtb2RpZmllcnNcblxuXG4gICAgICAgIHN0YXRlLnJlY3RzID0ge1xuICAgICAgICAgIHJlZmVyZW5jZTogZ2V0Q29tcG9zaXRlUmVjdChyZWZlcmVuY2UsIGdldE9mZnNldFBhcmVudChwb3BwZXIpLCBzdGF0ZS5vcHRpb25zLnN0cmF0ZWd5ID09PSAnZml4ZWQnKSxcbiAgICAgICAgICBwb3BwZXI6IGdldExheW91dFJlY3QocG9wcGVyKVxuICAgICAgICB9OyAvLyBNb2RpZmllcnMgaGF2ZSB0aGUgYWJpbGl0eSB0byByZXNldCB0aGUgY3VycmVudCB1cGRhdGUgY3ljbGUuIFRoZVxuICAgICAgICAvLyBtb3N0IGNvbW1vbiB1c2UgY2FzZSBmb3IgdGhpcyBpcyB0aGUgYGZsaXBgIG1vZGlmaWVyIGNoYW5naW5nIHRoZVxuICAgICAgICAvLyBwbGFjZW1lbnQsIHdoaWNoIHRoZW4gbmVlZHMgdG8gcmUtcnVuIGFsbCB0aGUgbW9kaWZpZXJzLCBiZWNhdXNlIHRoZVxuICAgICAgICAvLyBsb2dpYyB3YXMgcHJldmlvdXNseSByYW4gZm9yIHRoZSBwcmV2aW91cyBwbGFjZW1lbnQgYW5kIGlzIHRoZXJlZm9yZVxuICAgICAgICAvLyBzdGFsZS9pbmNvcnJlY3RcblxuICAgICAgICBzdGF0ZS5yZXNldCA9IGZhbHNlO1xuICAgICAgICBzdGF0ZS5wbGFjZW1lbnQgPSBzdGF0ZS5vcHRpb25zLnBsYWNlbWVudDsgLy8gT24gZWFjaCB1cGRhdGUgY3ljbGUsIHRoZSBgbW9kaWZpZXJzRGF0YWAgcHJvcGVydHkgZm9yIGVhY2ggbW9kaWZpZXJcbiAgICAgICAgLy8gaXMgZmlsbGVkIHdpdGggdGhlIGluaXRpYWwgZGF0YSBzcGVjaWZpZWQgYnkgdGhlIG1vZGlmaWVyLiBUaGlzIG1lYW5zXG4gICAgICAgIC8vIGl0IGRvZXNuJ3QgcGVyc2lzdCBhbmQgaXMgZnJlc2ggb24gZWFjaCB1cGRhdGUuXG4gICAgICAgIC8vIFRvIGVuc3VyZSBwZXJzaXN0ZW50IGRhdGEsIHVzZSBgJHtuYW1lfSNwZXJzaXN0ZW50YFxuXG4gICAgICAgIHN0YXRlLm9yZGVyZWRNb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICAgICAgICByZXR1cm4gc3RhdGUubW9kaWZpZXJzRGF0YVttb2RpZmllci5uYW1lXSA9IE9iamVjdC5hc3NpZ24oe30sIG1vZGlmaWVyLmRhdGEpO1xuICAgICAgICB9KTtcblxuICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgc3RhdGUub3JkZXJlZE1vZGlmaWVycy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICBpZiAoc3RhdGUucmVzZXQgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHN0YXRlLnJlc2V0ID0gZmFsc2U7XG4gICAgICAgICAgICBpbmRleCA9IC0xO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIF9zdGF0ZSRvcmRlcmVkTW9kaWZpZSA9IHN0YXRlLm9yZGVyZWRNb2RpZmllcnNbaW5kZXhdLFxuICAgICAgICAgICAgICBmbiA9IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZS5mbixcbiAgICAgICAgICAgICAgX3N0YXRlJG9yZGVyZWRNb2RpZmllMiA9IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZS5vcHRpb25zLFxuICAgICAgICAgICAgICBfb3B0aW9ucyA9IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIgPT09IHZvaWQgMCA/IHt9IDogX3N0YXRlJG9yZGVyZWRNb2RpZmllMixcbiAgICAgICAgICAgICAgbmFtZSA9IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZS5uYW1lO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgc3RhdGUgPSBmbih7XG4gICAgICAgICAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgICAgICAgICAgb3B0aW9uczogX29wdGlvbnMsXG4gICAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgIGluc3RhbmNlOiBpbnN0YW5jZVxuICAgICAgICAgICAgfSkgfHwgc3RhdGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gQXN5bmMgYW5kIG9wdGltaXN0aWNhbGx5IG9wdGltaXplZCB1cGRhdGUgXHUyMDEzIGl0IHdpbGwgbm90IGJlIGV4ZWN1dGVkIGlmXG4gICAgICAvLyBub3QgbmVjZXNzYXJ5IChkZWJvdW5jZWQgdG8gcnVuIGF0IG1vc3Qgb25jZS1wZXItdGljaylcbiAgICAgIHVwZGF0ZTogZGVib3VuY2UoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICBpbnN0YW5jZS5mb3JjZVVwZGF0ZSgpO1xuICAgICAgICAgIHJlc29sdmUoc3RhdGUpO1xuICAgICAgICB9KTtcbiAgICAgIH0pLFxuICAgICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgICAgY2xlYW51cE1vZGlmaWVyRWZmZWN0cygpO1xuICAgICAgICBpc0Rlc3Ryb3llZCA9IHRydWU7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmICghYXJlVmFsaWRFbGVtZW50cyhyZWZlcmVuY2UsIHBvcHBlcikpIHtcbiAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9XG5cbiAgICBpbnN0YW5jZS5zZXRPcHRpb25zKG9wdGlvbnMpLnRoZW4oZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICBpZiAoIWlzRGVzdHJveWVkICYmIG9wdGlvbnMub25GaXJzdFVwZGF0ZSkge1xuICAgICAgICBvcHRpb25zLm9uRmlyc3RVcGRhdGUoc3RhdGUpO1xuICAgICAgfVxuICAgIH0pOyAvLyBNb2RpZmllcnMgaGF2ZSB0aGUgYWJpbGl0eSB0byBleGVjdXRlIGFyYml0cmFyeSBjb2RlIGJlZm9yZSB0aGUgZmlyc3RcbiAgICAvLyB1cGRhdGUgY3ljbGUgcnVucy4gVGhleSB3aWxsIGJlIGV4ZWN1dGVkIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSB1cGRhdGVcbiAgICAvLyBjeWNsZS4gVGhpcyBpcyB1c2VmdWwgd2hlbiBhIG1vZGlmaWVyIGFkZHMgc29tZSBwZXJzaXN0ZW50IGRhdGEgdGhhdFxuICAgIC8vIG90aGVyIG1vZGlmaWVycyBuZWVkIHRvIHVzZSwgYnV0IHRoZSBtb2RpZmllciBpcyBydW4gYWZ0ZXIgdGhlIGRlcGVuZGVudFxuICAgIC8vIG9uZS5cblxuICAgIGZ1bmN0aW9uIHJ1bk1vZGlmaWVyRWZmZWN0cygpIHtcbiAgICAgIHN0YXRlLm9yZGVyZWRNb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAoX3JlZikge1xuICAgICAgICB2YXIgbmFtZSA9IF9yZWYubmFtZSxcbiAgICAgICAgICAgIF9yZWYkb3B0aW9ucyA9IF9yZWYub3B0aW9ucyxcbiAgICAgICAgICAgIG9wdGlvbnMgPSBfcmVmJG9wdGlvbnMgPT09IHZvaWQgMCA/IHt9IDogX3JlZiRvcHRpb25zLFxuICAgICAgICAgICAgZWZmZWN0ID0gX3JlZi5lZmZlY3Q7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBlZmZlY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB2YXIgY2xlYW51cEZuID0gZWZmZWN0KHtcbiAgICAgICAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICBpbnN0YW5jZTogaW5zdGFuY2UsXG4gICAgICAgICAgICBvcHRpb25zOiBvcHRpb25zXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICB2YXIgbm9vcEZuID0gZnVuY3Rpb24gbm9vcEZuKCkge307XG5cbiAgICAgICAgICBlZmZlY3RDbGVhbnVwRm5zLnB1c2goY2xlYW51cEZuIHx8IG5vb3BGbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsZWFudXBNb2RpZmllckVmZmVjdHMoKSB7XG4gICAgICBlZmZlY3RDbGVhbnVwRm5zLmZvckVhY2goZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmbigpO1xuICAgICAgfSk7XG4gICAgICBlZmZlY3RDbGVhbnVwRm5zID0gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9O1xufVxuZXhwb3J0IHZhciBjcmVhdGVQb3BwZXIgPSAvKiNfX1BVUkVfXyovcG9wcGVyR2VuZXJhdG9yKCk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgZGV0ZWN0T3ZlcmZsb3cgfTsiLCAiaW1wb3J0IHsgcG9wcGVyR2VuZXJhdG9yLCBkZXRlY3RPdmVyZmxvdyB9IGZyb20gXCIuL2NyZWF0ZVBvcHBlci5qc1wiO1xuaW1wb3J0IGV2ZW50TGlzdGVuZXJzIGZyb20gXCIuL21vZGlmaWVycy9ldmVudExpc3RlbmVycy5qc1wiO1xuaW1wb3J0IHBvcHBlck9mZnNldHMgZnJvbSBcIi4vbW9kaWZpZXJzL3BvcHBlck9mZnNldHMuanNcIjtcbmltcG9ydCBjb21wdXRlU3R5bGVzIGZyb20gXCIuL21vZGlmaWVycy9jb21wdXRlU3R5bGVzLmpzXCI7XG5pbXBvcnQgYXBwbHlTdHlsZXMgZnJvbSBcIi4vbW9kaWZpZXJzL2FwcGx5U3R5bGVzLmpzXCI7XG5pbXBvcnQgb2Zmc2V0IGZyb20gXCIuL21vZGlmaWVycy9vZmZzZXQuanNcIjtcbmltcG9ydCBmbGlwIGZyb20gXCIuL21vZGlmaWVycy9mbGlwLmpzXCI7XG5pbXBvcnQgcHJldmVudE92ZXJmbG93IGZyb20gXCIuL21vZGlmaWVycy9wcmV2ZW50T3ZlcmZsb3cuanNcIjtcbmltcG9ydCBhcnJvdyBmcm9tIFwiLi9tb2RpZmllcnMvYXJyb3cuanNcIjtcbmltcG9ydCBoaWRlIGZyb20gXCIuL21vZGlmaWVycy9oaWRlLmpzXCI7XG52YXIgZGVmYXVsdE1vZGlmaWVycyA9IFtldmVudExpc3RlbmVycywgcG9wcGVyT2Zmc2V0cywgY29tcHV0ZVN0eWxlcywgYXBwbHlTdHlsZXMsIG9mZnNldCwgZmxpcCwgcHJldmVudE92ZXJmbG93LCBhcnJvdywgaGlkZV07XG52YXIgY3JlYXRlUG9wcGVyID0gLyojX19QVVJFX18qL3BvcHBlckdlbmVyYXRvcih7XG4gIGRlZmF1bHRNb2RpZmllcnM6IGRlZmF1bHRNb2RpZmllcnNcbn0pOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IGNyZWF0ZVBvcHBlciwgcG9wcGVyR2VuZXJhdG9yLCBkZWZhdWx0TW9kaWZpZXJzLCBkZXRlY3RPdmVyZmxvdyB9OyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IGNyZWF0ZVBvcHBlciBhcyBjcmVhdGVQb3BwZXJMaXRlIH0gZnJvbSBcIi4vcG9wcGVyLWxpdGUuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgKiBmcm9tIFwiLi9tb2RpZmllcnMvaW5kZXguanNcIjsiLCAiZXhwb3J0ICogZnJvbSBcIi4vZW51bXMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL21vZGlmaWVycy9pbmRleC5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IHBvcHBlckdlbmVyYXRvciwgZGV0ZWN0T3ZlcmZsb3csIGNyZWF0ZVBvcHBlciBhcyBjcmVhdGVQb3BwZXJCYXNlIH0gZnJvbSBcIi4vY3JlYXRlUG9wcGVyLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgY3JlYXRlUG9wcGVyIH0gZnJvbSBcIi4vcG9wcGVyLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgY3JlYXRlUG9wcGVyIGFzIGNyZWF0ZVBvcHBlckxpdGUgfSBmcm9tIFwiLi9wb3BwZXItbGl0ZS5qc1wiOyIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IEJhc2UgfTtcblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBiYXNlIGNsYXNzIGZyb20gd2hpY2ggdGhlIG1vc3QgY2xhc3NlcyBhcmUgZGVyaXZlZC5cbiAqXG4gKiBUaGlzIGNsYXNzIGhhcyBiZXNpZGVzIGEgYHRvU3RyaW5nYCB3aGljaCByZXR1cm5zIHRoZSBqc29uIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvYmplY3RcbiAqIGFsc28gYSBmdW5jdGlvbmFsaXR5IHRvIGNoZWNrIGlmIGFuIG9iamVjdCBpcyBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzLlxuICpcbiAqIFRoZXJlZm9yZSwgdGhlIGNsYXNzIGhhcyBhIHN0YXRpYyBtZXRob2QgYCBbU3ltYm9sLmhhc0luc3RhbmNlXSh0aGF0KWAgd2hpY2ggcmV0dXJucyB0cnVlIGlmIHRoZSBvYmplY3RcbiAqIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBjbGFzcy5cbiAqXG4gKiBAc2VlIFtodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9TeW1ib2wvaGFzSW5zdGFuY2VdKGRldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9TeW1ib2wvaGFzSW5zdGFuY2UpXG4gKlxuICogRGVyaXZlZCBjbGFzc2VzIHNob3VsZCBpbXBsZW1lbnQgYSBzdGF0aWMgZ2V0dGVyIGBpbnN0YW5jZVN5bWJvbGAgd2hpY2ggcmV0dXJucyBhIHVuaXF1ZSBzeW1ib2wuXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogc3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuICogICAgcmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL3R5cGVzL2Jhc2VcIik7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBUaGUgY2xhc3Mgd2FzIGZvcm1lcmx5IGNhbGxlZCBPYmplY3QuXG4gKlxuICogQHNpbmNlIDEuNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgVGhlIGJhc2UgY2xhc3MgZm9yIHRoZSBtb3N0IGNsYXNzZXMgaW4gdGhlIG1vbnN0ZXIgbGlicmFyeVxuICovXG5jbGFzcyBCYXNlIGV4dGVuZHMgT2JqZWN0IHtcblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHRvU3RyaW5nKCkge1xuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvdHlwZXMvYmFzZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHBhcmFtIHRoYXRcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgW1N5bWJvbC5oYXNJbnN0YW5jZV0odGhhdCkge1xuXHRcdGlmIChcblx0XHRcdHRoYXQgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0dGhhdCA9PT0gbnVsbCB8fFxuXHRcdFx0KHR5cGVvZiB0aGF0ICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiB0aGF0ICE9PSBcImZ1bmN0aW9uXCIpXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdGhhdENsYXNzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoYXQpO1xuXHRcdGlmIChcblx0XHRcdHRoYXRDbGFzcyA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHR0aGF0Q2xhc3MgPT09IG51bGwgfHxcblx0XHRcdCh0eXBlb2YgdGhhdENsYXNzICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiB0aGF0Q2xhc3MgIT09IFwiZnVuY3Rpb25cIilcblx0XHQpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRpZiAoY2hlY2tJbnN0YW5jZVN5bWJvbC5hcHBseSh0aGlzLCBbdGhhdENsYXNzXSkgPT09IHRydWUpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdC8vIHRoaXMgY2FsbCB0aGUgc3RhdGljIG1ldGhvZCBvZiB0aGUgc3VwZXIgY2xhc3MsIGlmIHRoZXJlIGlzIG9uZVxuXHRcdHJldHVybiBzdXBlcltTeW1ib2wuaGFzSW5zdGFuY2VdKHRoYXQpO1xuXHR9XG59XG5cbi8qKlxuICogdGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgdGhlIGNsYXNzIGhhcyBhIHN0YXRpYyBnZXR0ZXIgYGluc3RhbmNlU3ltYm9sYCBhbmQgaWYgdGhlIHZhbHVlIG9mIHRoaXMgZ2V0dGVyIGlzIGVxdWFsIHRvIHRoZVxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gb2JqXG4gKiBAcmV0dXJuIHtib29sZWFufGFueXxib29sZWFufVxuICogQHNpbmNlIDIuMS4wXG4gKi9cbmZ1bmN0aW9uIGNoZWNrSW5zdGFuY2VTeW1ib2wob2JqKSB7XG5cdGlmICh0aGlzLmhhc093blByb3BlcnR5KGluc3RhbmNlU3ltYm9sKSA9PT0gZmFsc2UpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRjb25zdCBwcm90byA9IG9iaj8uY29uc3RydWN0b3I7XG5cdGlmIChcblx0XHRwcm90byA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0cHJvdG8gPT09IG51bGwgfHxcblx0XHQodHlwZW9mIHByb3RvICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBwcm90byAhPT0gXCJmdW5jdGlvblwiKVxuXHQpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRpZiAocHJvdG8uaGFzT3duUHJvcGVydHkoaW5zdGFuY2VTeW1ib2wpICE9PSB0cnVlKSB7XG5cdFx0cmV0dXJuIGNoZWNrSW5zdGFuY2VTeW1ib2wuYXBwbHkodGhpcywgW29iai5fX3Byb3RvX19dKTtcblx0fVxuXG5cdGNvbnN0IHN5bWJvbCA9IHByb3RvW2luc3RhbmNlU3ltYm9sXTtcblx0aWYgKHN5bWJvbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0aWYgKG9iai5fX3Byb3RvX18pIHtcblx0XHRcdHJldHVybiBjaGVja0luc3RhbmNlU3ltYm9sKG9iai5fX3Byb3RvX18pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aWYgKHN5bWJvbCA9PT0gdGhpc1tpbnN0YW5jZVN5bWJvbF0pIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHJldHVybiBjaGVja0luc3RhbmNlU3ltYm9sLmFwcGx5KHRoaXMsIFtvYmouX19wcm90b19fXSk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBTdGFjayB9O1xuXG4vKipcbiAqIFlvdSBjYW4gY2FsbCB0aGUgbWV0aG9kIHZpYSB0aGUgbW9uc3RlciBuYW1lc3BhY2UgYG5ldyBRdWV1ZSgpYC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjQuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuY2xhc3MgU3RhY2sgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuZGF0YSA9IFtdO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci90eXBlcy9zdGFja1wiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0aXNFbXB0eSgpIHtcblx0XHRyZXR1cm4gdGhpcy5kYXRhLmxlbmd0aCA9PT0gMDtcblx0fVxuXG5cdC8qKlxuXHQgKiBsb29rcyBhdCB0aGUgb2JqZWN0IGF0IHRoZSB0b3Agb2YgdGhpcyBzdGFjayB3aXRob3V0IHJlbW92aW5nIGl0IGZyb20gdGhlIHN0YWNrLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHsqfVxuXHQgKi9cblx0cGVlaygpIHtcblx0XHRpZiAodGhpcy5pc0VtcHR5KCkpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZGF0YT8uW3RoaXMuZGF0YS5sZW5ndGggLSAxXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBwdXNoZXMgYW4gaXRlbSBvbnRvIHRoZSB0b3Agb2YgdGhpcyBzdGFjay5cblx0ICpcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHtRdWV1ZX1cblx0ICovXG5cdHB1c2godmFsdWUpIHtcblx0XHR0aGlzLmRhdGEucHVzaCh2YWx1ZSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogcmVtb3ZlIGFsbCBlbnRyaWVzXG5cdCAqXG5cdCAqIEByZXR1cm4ge1F1ZXVlfVxuXHQgKi9cblx0Y2xlYXIoKSB7XG5cdFx0dGhpcy5kYXRhID0gW107XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogcmVtb3ZlcyB0aGUgb2JqZWN0IGF0IHRoZSB0b3Agb2YgdGhpcyBzdGFjayBhbmQgcmV0dXJuc1xuXHQgKiB0aGF0IG9iamVjdCBhcyB0aGUgdmFsdWUgb2YgdGhpcyBmdW5jdGlvbi4gaXMgdGhlIHN0YWNrIGVtcHR5XG5cdCAqIHRoZSByZXR1cm4gdmFsdWUgaXMgdW5kZWZpbmVkLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHsqfVxuXHQgKi9cblx0cG9wKCkge1xuXHRcdGlmICh0aGlzLmlzRW1wdHkoKSkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZGF0YS5wb3AoKTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7XG5cdGlzQXJyYXksXG5cdGlzSW50ZWdlcixcblx0aXNPYmplY3QsXG5cdGlzUHJpbWl0aXZlLFxuXHRpc1N0cmluZyxcbn0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgU3RhY2sgfSBmcm9tIFwiLi4vdHlwZXMvc3RhY2subWpzXCI7XG5pbXBvcnQge1xuXHR2YWxpZGF0ZUludGVnZXIsXG5cdHZhbGlkYXRlQm9vbGVhbixcblx0dmFsaWRhdGVTdHJpbmcsXG59IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgUGF0aGZpbmRlciwgREVMSU1JVEVSLCBXSUxEQ0FSRCB9O1xuXG4vKipcbiAqIHBhdGggc2VwYXJhdG9yXG4gKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IERFTElNSVRFUiA9IFwiLlwiO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBXSUxEQ0FSRCA9IFwiKlwiO1xuXG4vKipcbiAqIFBhdGhmaW5kZXIgaXMgYSBjbGFzcyB0byBmaW5kIGEgcGF0aCB0byBhbiBvYmplY3QuXG4gKlxuICogV2l0aCB0aGUgaGVscCBvZiB0aGUgcGF0aGZpbmRlciwgdmFsdWVzIGNhbiBiZSByZWFkIGFuZCB3cml0dGVuIGZyb20gYW4gb2JqZWN0IGNvbnN0cnVjdC5cbiAqXG4gKiBgYGBcbiAqIG5ldyBQYXRoZmluZGVyKHtcbiAqIGE6IHtcbiAqICAgICBiOiB7XG4gKiAgICAgICAgIGY6IFtcbiAqICAgICAgICAgICAgIHtcbiAqICAgICAgICAgICAgICAgICBnOiBmYWxzZSxcbiAqICAgICAgICAgICAgIH1cbiAqICAgICAgICAgXSxcbiAqICAgICB9XG4gKiB9XG4gKiB9KS5nZXRWaWEoXCJhLmIuZi4wLmdcIik7IC8vIFx1MjFBNiBmYWxzZVxuICogYGBgXG4gKlxuICogaWYgYSB2YWx1ZSBpcyBub3QgcHJlc2VudCBvciBoYXMgdGhlIHdyb25nIHR5cGUsIGEgY29ycmVzcG9uZGluZyBleGNlcHRpb24gaXMgdGhyb3duLlxuICpcbiAqIGBgYFxuICogbmV3IFBhdGhmaW5kZXIoe30pLmdldFZpYShcImEuYi5mLjAuZ1wiKTsgLy8gXHUyMUE2IEVycm9yXG4gKiBgYGBcbiAqXG4gKiBUaGUgYFBhdGhmaW5kZXIuZXhpc3RzKClgIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIGFjY2VzcyB0byB0aGUgcGF0aCBpcyBwb3NzaWJsZS5cbiAqXG4gKiBgYGBcbiAqIG5ldyBQYXRoZmluZGVyKHt9KS5leGlzdHMoXCJhLmIuZi4wLmdcIik7IC8vIFx1MjFBNiBmYWxzZVxuICogYGBgXG4gKlxuICogcGF0aGZpbmRlciBjYW4gYWxzbyBiZSB1c2VkIHRvIGJ1aWxkIG9iamVjdCBzdHJ1Y3R1cmVzLiB0byBkbyB0aGlzLCB0aGUgYFBhdGhmaW5kZXIuc2V0VmlhKClgIG1ldGhvZCBtdXN0IGJlIHVzZWQuXG4gKlxuICogYGBgXG4gKiBvYmogPSB7fTtcbiAqIG5ldyBQYXRoZmluZGVyKG9iaikuc2V0VmlhKCdhLmIuMC5jJywgdHJ1ZSk7IC8vIFx1MjFBNiB7YTp7Yjpbe2M6dHJ1ZX1dfX1cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9saWJyYXJpZXMvcGF0aGZpbmRlci9leGFtcGxlLTEvIEV4YW1wbGUgMVxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2xpYnJhcmllcy9wYXRoZmluZGVyL2V4YW1wbGUtMi8gRXhhbXBsZSAyXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS40LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBQYXRoZmluZGVyIGlzIGEgY2xhc3MgdG8gZmluZCBhIHBhdGggdG8gYW4gb2JqZWN0LlxuICovXG5jbGFzcyBQYXRoZmluZGVyIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBjb25zdHJ1Y3Rvci5cblx0ICpcblx0ICogQHBhcmFtIHtvYmplY3R9IG9iamVjdCAtIFRoZSBvYmplY3QgcGFyYW1ldGVyIGZvciB0aGUgY29uc3RydWN0b3IuXG5cdCAqXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBUaHJvd3MgYW4gZXJyb3IgaWYgdGhlIHByb3ZpZGVkIG9iamVjdCBwYXJhbWV0ZXIgaXMgYSBzaW1wbGUgdHlwZS5cblx0ICovXG5cdGNvbnN0cnVjdG9yKG9iamVjdCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHRpZiAoaXNQcmltaXRpdmUob2JqZWN0KSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIHBhcmFtZXRlciBtdXN0IG5vdCBiZSBhIHNpbXBsZSB0eXBlXCIpO1xuXHRcdH1cblxuXHRcdHRoaXMub2JqZWN0ID0gb2JqZWN0O1xuXHRcdHRoaXMud2lsZENhcmQgPSBXSUxEQ0FSRDtcblx0fVxuXG5cdC8qKlxuXHQgKiBzZXQgd2lsZGNhcmRcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHdpbGRjYXJkXG5cdCAqIEByZXR1cm4ge1BhdGhmaW5kZXJ9XG5cdCAqIEBzaW5jZSAxLjcuMFxuXHQgKi9cblx0c2V0V2lsZENhcmQod2lsZGNhcmQpIHtcblx0XHR2YWxpZGF0ZVN0cmluZyh3aWxkY2FyZCk7XG5cdFx0dGhpcy53aWxkQ2FyZCA9IHdpbGRjYXJkO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfGFycmF5fSBwYXRoXG5cdCAqIEBzaW5jZSAxLjQuMFxuXHQgKiBAcmV0dXJuIHsqfVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBqb3VybmV5IGlzIG5vdCBhdCBpdHMgZW5kXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGludGVnZXJcblx0ICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGFjdGlvbiBmb3IgdGhpcyBkYXRhIHR5cGVcblx0ICovXG5cdGdldFZpYShwYXRoKSB7XG5cdFx0cmV0dXJuIGdldFZhbHVlVmlhUGF0aC5jYWxsKHRoaXMsIHRoaXMub2JqZWN0LCBwYXRoKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3xhcnJheX0gcGF0aFxuXHQgKiBAcGFyYW0geyp9IHZhbHVlXG5cdCAqIEByZXR1cm4ge1BhdGhmaW5kZXJ9XG5cdCAqIEBzaW5jZSAxLjQuMFxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW50ZWdlclxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgYWN0aW9uIGZvciB0aGlzIGRhdGEgdHlwZVxuXHQgKi9cblx0c2V0VmlhKHBhdGgsIHZhbHVlKSB7XG5cdFx0c2V0VmFsdWVWaWFQYXRoLmNhbGwodGhpcywgdGhpcy5vYmplY3QsIHBhdGgsIHZhbHVlKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBEZWxldGUgVmlhIFBhdGhcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd8YXJyYXl9IHBhdGhcblx0ICogQHJldHVybiB7UGF0aGZpbmRlcn1cblx0ICogQHNpbmNlIDEuNi4wXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnRlZ2VyXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBhY3Rpb24gZm9yIHRoaXMgZGF0YSB0eXBlXG5cdCAqL1xuXHRkZWxldGVWaWEocGF0aCkge1xuXHRcdGRlbGV0ZVZhbHVlVmlhUGF0aC5jYWxsKHRoaXMsIHRoaXMub2JqZWN0LCBwYXRoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3xhcnJheX0gcGF0aFxuXHQgKiBAcmV0dXJuIHtib29sfVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW50ZWdlclxuXHQgKiBAc2luY2UgMS40LjBcblx0ICovXG5cdGV4aXN0cyhwYXRoKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGdldFZhbHVlVmlhUGF0aC5jYWxsKHRoaXMsIHRoaXMub2JqZWN0LCBwYXRoLCB0cnVlKTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0gY2F0Y2ggKGUpIHt9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHsqfSBzdWJqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ3xhcnJheX0gcGF0aFxuICogQHBhcmFtIHtib29sZWFufSBjaGVja1xuICogQHJldHVybiB7TWFwfVxuICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhlIGpvdXJuZXkgaXMgbm90IGF0IGl0cyBlbmRcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBhY3Rpb24gZm9yIHRoaXMgZGF0YSB0eXBlXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpdGVyYXRlKHN1YmplY3QsIHBhdGgsIGNoZWNrKSB7XG5cdGlmIChjaGVjayA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0Y2hlY2sgPSBmYWxzZTtcblx0fVxuXHR2YWxpZGF0ZUJvb2xlYW4oY2hlY2spO1xuXG5cdGNvbnN0IHJlc3VsdCA9IG5ldyBNYXAoKTtcblxuXHRpZiAoaXNBcnJheShwYXRoKSkge1xuXHRcdHBhdGggPSBwYXRoLmpvaW4oREVMSU1JVEVSKTtcblx0fVxuXG5cdGlmIChpc09iamVjdChzdWJqZWN0KSB8fCBpc0FycmF5KHN1YmplY3QpKSB7XG5cdFx0Zm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoc3ViamVjdCkpIHtcblx0XHRcdHJlc3VsdC5zZXQoa2V5LCBnZXRWYWx1ZVZpYVBhdGguY2FsbCh0aGlzLCB2YWx1ZSwgcGF0aCwgY2hlY2spKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3Qga2V5ID0gcGF0aC5zcGxpdChERUxJTUlURVIpLnNoaWZ0KCk7XG5cdFx0cmVzdWx0LnNldChrZXksIGdldFZhbHVlVmlhUGF0aC5jYWxsKHRoaXMsIHN1YmplY3QsIHBhdGgsIGNoZWNrKSk7XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0gc3ViamVjdFxuICogQHBhcmFtIHBhdGhcbiAqIEBwYXJhbSBjaGVja1xuICogQHJldHVybiB7VnwqfE1hcH1cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuICogQHRocm93cyB7RXJyb3J9IHRoZSBqb3VybmV5IGlzIG5vdCBhdCBpdHMgZW5kXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgYWN0aW9uIGZvciB0aGlzIGRhdGEgdHlwZVxuICovXG5mdW5jdGlvbiBnZXRWYWx1ZVZpYVBhdGgoc3ViamVjdCwgcGF0aCwgY2hlY2spIHtcblx0aWYgKGNoZWNrID09PSB1bmRlZmluZWQpIHtcblx0XHRjaGVjayA9IGZhbHNlO1xuXHR9XG5cdHZhbGlkYXRlQm9vbGVhbihjaGVjayk7XG5cblx0aWYgKCEoaXNBcnJheShwYXRoKSB8fCBpc1N0cmluZyhwYXRoKSkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcInR5cGUgZXJyb3I6IGEgcGF0aCBtdXN0IGJlIGEgc3RyaW5nIG9yIGFuIGFycmF5IGluIGdldFZhbHVlVmlhUGF0aFwiLFxuXHRcdCk7XG5cdH1cblxuXHRsZXQgcGFydHM7XG5cdGlmIChpc1N0cmluZyhwYXRoKSkge1xuXHRcdGlmIChwYXRoID09PSBcIlwiKSB7XG5cdFx0XHRyZXR1cm4gc3ViamVjdDtcblx0XHR9XG5cblx0XHRwYXJ0cyA9IHBhdGguc3BsaXQoREVMSU1JVEVSKTtcblx0fVxuXG5cdGxldCBjdXJyZW50ID0gcGFydHMuc2hpZnQoKTtcblxuXHRpZiAoY3VycmVudCA9PT0gdGhpcy53aWxkQ2FyZCkge1xuXHRcdHJldHVybiBpdGVyYXRlLmNhbGwodGhpcywgc3ViamVjdCwgcGFydHMuam9pbihERUxJTUlURVIpLCBjaGVjayk7XG5cdH1cblxuXHRpZiAoaXNPYmplY3Qoc3ViamVjdCkgfHwgaXNBcnJheShzdWJqZWN0KSkge1xuXHRcdGxldCBhbmNob3I7XG5cdFx0aWYgKHN1YmplY3QgaW5zdGFuY2VvZiBNYXAgfHwgc3ViamVjdCBpbnN0YW5jZW9mIFdlYWtNYXApIHtcblx0XHRcdGFuY2hvciA9IHN1YmplY3QuZ2V0KGN1cnJlbnQpO1xuXHRcdH0gZWxzZSBpZiAoc3ViamVjdCBpbnN0YW5jZW9mIFNldCB8fCBzdWJqZWN0IGluc3RhbmNlb2YgV2Vha1NldCkge1xuXHRcdFx0Y3VycmVudCA9IHBhcnNlSW50KGN1cnJlbnQpO1xuXHRcdFx0dmFsaWRhdGVJbnRlZ2VyKGN1cnJlbnQpO1xuXHRcdFx0YW5jaG9yID0gWy4uLnN1YmplY3RdPy5bY3VycmVudF07XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgV2Vha1JlZiA9PT0gXCJmdW5jdGlvblwiICYmIHN1YmplY3QgaW5zdGFuY2VvZiBXZWFrUmVmKSB7XG5cdFx0XHR0aHJvdyBFcnJvcihcInVuc3VwcG9ydGVkIGFjdGlvbiBmb3IgdGhpcyBkYXRhIHR5cGUgKFdlYWtSZWYpXCIpO1xuXHRcdH0gZWxzZSBpZiAoaXNBcnJheShzdWJqZWN0KSkge1xuXHRcdFx0Y3VycmVudCA9IHBhcnNlSW50KGN1cnJlbnQpO1xuXHRcdFx0dmFsaWRhdGVJbnRlZ2VyKGN1cnJlbnQpO1xuXHRcdFx0YW5jaG9yID0gc3ViamVjdD8uW2N1cnJlbnRdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhbmNob3IgPSBzdWJqZWN0Py5bY3VycmVudF07XG5cdFx0fVxuXG5cdFx0aWYgKGlzT2JqZWN0KGFuY2hvcikgfHwgaXNBcnJheShhbmNob3IpKSB7XG5cdFx0XHRyZXR1cm4gZ2V0VmFsdWVWaWFQYXRoLmNhbGwodGhpcywgYW5jaG9yLCBwYXJ0cy5qb2luKERFTElNSVRFUiksIGNoZWNrKTtcblx0XHR9XG5cblx0XHRpZiAocGFydHMubGVuZ3RoID4gMCkge1xuXHRcdFx0dGhyb3cgRXJyb3IoYHRoZSBqb3VybmV5IGlzIG5vdCBhdCBpdHMgZW5kICgke3BhcnRzLmpvaW4oREVMSU1JVEVSKX0pYCk7XG5cdFx0fVxuXG5cdFx0aWYgKGNoZWNrID09PSB0cnVlKSB7XG5cdFx0XHRjb25zdCBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihcblx0XHRcdFx0T2JqZWN0LmdldFByb3RvdHlwZU9mKHN1YmplY3QpLFxuXHRcdFx0XHRjdXJyZW50LFxuXHRcdFx0KTtcblxuXHRcdFx0aWYgKCFzdWJqZWN0Lmhhc093blByb3BlcnR5KGN1cnJlbnQpICYmIGRlc2NyaXB0b3IgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0aHJvdyBFcnJvcihcInVua25vd24gdmFsdWUgXCIgKyBjdXJyZW50KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gYW5jaG9yO1xuXHR9XG5cblx0dGhyb3cgVHlwZUVycm9yKGB1bnN1cHBvcnRlZCB0eXBlICR7dHlwZW9mIHN1YmplY3R9IGZvciBwYXRoICR7cGF0aH1gKTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHN1YmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfGFycmF5fSBwYXRoXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHt2b2lkfVxuICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgam91cm5leSBpcyBub3QgYXQgaXRzIGVuZFxuICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGFjdGlvbiBmb3IgdGhpcyBkYXRhIHR5cGVcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNldFZhbHVlVmlhUGF0aChzdWJqZWN0LCBwYXRoLCB2YWx1ZSkge1xuXHRpZiAoIShpc0FycmF5KHBhdGgpIHx8IGlzU3RyaW5nKHBhdGgpKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInR5cGUgZXJyb3I6IGEgcGF0aCBtdXN0IGJlIGEgc3RyaW5nIG9yIGFuIGFycmF5XCIpO1xuXHR9XG5cblx0bGV0IHBhcnRzO1xuXHRpZiAoaXNBcnJheShwYXRoKSkge1xuXHRcdGlmIChwYXRoLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHBhcnRzID0gcGF0aDtcblx0fSBlbHNlIHtcblx0XHRwYXJ0cyA9IHBhdGguc3BsaXQoREVMSU1JVEVSKTtcblx0fVxuXG5cdGxldCBsYXN0ID0gcGFydHMucG9wKCk7XG5cdGNvbnN0IHN1YnBhdGggPSBwYXJ0cy5qb2luKERFTElNSVRFUik7XG5cblx0Y29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcblx0bGV0IGN1cnJlbnQgPSBzdWJwYXRoO1xuXHR3aGlsZSAodHJ1ZSkge1xuXHRcdHRyeSB7XG5cdFx0XHRnZXRWYWx1ZVZpYVBhdGguY2FsbCh0aGlzLCBzdWJqZWN0LCBjdXJyZW50LCB0cnVlKTtcblx0XHRcdGJyZWFrO1xuXHRcdH0gY2F0Y2ggKGUpIHt9XG5cblx0XHRzdGFjay5wdXNoKGN1cnJlbnQpO1xuXHRcdHBhcnRzLnBvcCgpO1xuXHRcdGN1cnJlbnQgPSBwYXJ0cy5qb2luKERFTElNSVRFUik7XG5cblx0XHRpZiAoY3VycmVudCA9PT0gXCJcIikgYnJlYWs7XG5cdH1cblxuXHR3aGlsZSAoIXN0YWNrLmlzRW1wdHkoKSkge1xuXHRcdGN1cnJlbnQgPSBzdGFjay5wb3AoKTtcblx0XHRsZXQgb2JqID0ge307XG5cblx0XHRpZiAoIXN0YWNrLmlzRW1wdHkoKSkge1xuXHRcdFx0Y29uc3QgbiA9IHN0YWNrLnBlZWsoKS5zcGxpdChERUxJTUlURVIpLnBvcCgpO1xuXHRcdFx0aWYgKGlzSW50ZWdlcihwYXJzZUludChuKSkpIHtcblx0XHRcdFx0b2JqID0gW107XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0c2V0VmFsdWVWaWFQYXRoLmNhbGwodGhpcywgc3ViamVjdCwgY3VycmVudCwgb2JqKTtcblx0fVxuXG5cdGNvbnN0IGFuY2hvciA9IGdldFZhbHVlVmlhUGF0aC5jYWxsKHRoaXMsIHN1YmplY3QsIHN1YnBhdGgpO1xuXG5cdGlmICghKGlzT2JqZWN0KHN1YmplY3QpIHx8IGlzQXJyYXkoc3ViamVjdCkpKSB7XG5cdFx0dGhyb3cgVHlwZUVycm9yKGB1bnN1cHBvcnRlZCB0eXBlOiAke3R5cGVvZiBzdWJqZWN0fSBpbiBzZXRWYWx1ZVZpYVBhdGhgKTtcblx0fVxuXG5cdGlmIChhbmNob3IgaW5zdGFuY2VvZiBNYXAgfHwgYW5jaG9yIGluc3RhbmNlb2YgV2Vha01hcCkge1xuXHRcdGFuY2hvci5zZXQobGFzdCwgdmFsdWUpO1xuXHR9IGVsc2UgaWYgKGFuY2hvciBpbnN0YW5jZW9mIFNldCB8fCBhbmNob3IgaW5zdGFuY2VvZiBXZWFrU2V0KSB7XG5cdFx0YW5jaG9yLmFwcGVuZCh2YWx1ZSk7XG5cdH0gZWxzZSBpZiAodHlwZW9mIFdlYWtSZWYgPT09IFwiZnVuY3Rpb25cIiAmJiBhbmNob3IgaW5zdGFuY2VvZiBXZWFrUmVmKSB7XG5cdFx0dGhyb3cgRXJyb3IoXCJ1bnN1cHBvcnRlZCBhY3Rpb24gZm9yIHRoaXMgZGF0YSB0eXBlIGluIHNldFZhbHVlVmlhUGF0aFwiKTtcblx0fSBlbHNlIGlmIChpc0FycmF5KGFuY2hvcikpIHtcblx0XHRsYXN0ID0gcGFyc2VJbnQobGFzdCk7XG5cdFx0dmFsaWRhdGVJbnRlZ2VyKGxhc3QpO1xuXHRcdGFzc2lnblByb3BlcnR5KGFuY2hvciwgXCJcIiArIGxhc3QsIHZhbHVlKTtcblx0fSBlbHNlIHtcblx0XHRhc3NpZ25Qcm9wZXJ0eShhbmNob3IsIGxhc3QsIHZhbHVlKTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge29iamVjdH0gb2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGFzc2lnblByb3BlcnR5KG9iamVjdCwga2V5LCB2YWx1ZSkge1xuXHRpZiAoIW9iamVjdC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG5cdFx0b2JqZWN0W2tleV0gPSB2YWx1ZTtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdGRlbGV0ZSBvYmplY3Rba2V5XTtcblx0fVxuXG5cdG9iamVjdFtrZXldID0gdmFsdWU7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBzdWJqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICogQHJldHVybiB7dm9pZH1cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhlIGpvdXJuZXkgaXMgbm90IGF0IGl0cyBlbmRcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBhY3Rpb24gZm9yIHRoaXMgZGF0YSB0eXBlXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjYuMFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZGVsZXRlVmFsdWVWaWFQYXRoKHN1YmplY3QsIHBhdGgpIHtcblx0aWYgKCEoaXNBcnJheShwYXRoKSB8fCBpc1N0cmluZyhwYXRoKSkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcInR5cGUgZXJyb3I6IGEgcGF0aCBtdXN0IGJlIGEgc3RyaW5nIG9yIGFuIGFycmF5IGluIGRlbGV0ZVZhbHVlVmlhUGF0aFwiLFxuXHRcdCk7XG5cdH1cblxuXHRsZXQgcGFydHM7XG5cdGlmIChpc0FycmF5KHBhdGgpKSB7XG5cdFx0aWYgKHBhdGgubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0cGFydHMgPSBwYXRoO1xuXHR9IGVsc2Uge1xuXHRcdHBhcnRzID0gcGF0aC5zcGxpdChERUxJTUlURVIpO1xuXHR9XG5cblx0bGV0IGxhc3QgPSBwYXJ0cy5wb3AoKTtcblx0Y29uc3Qgc3ViUGF0aCA9IHBhcnRzLmpvaW4oREVMSU1JVEVSKTtcblxuXHRjb25zdCBhbmNob3IgPSBnZXRWYWx1ZVZpYVBhdGguY2FsbCh0aGlzLCBzdWJqZWN0LCBzdWJQYXRoKTtcblxuXHRpZiAoYW5jaG9yIGluc3RhbmNlb2YgTWFwKSB7XG5cdFx0YW5jaG9yLmRlbGV0ZShsYXN0KTtcblx0fSBlbHNlIGlmIChcblx0XHRhbmNob3IgaW5zdGFuY2VvZiBTZXQgfHxcblx0XHRhbmNob3IgaW5zdGFuY2VvZiBXZWFrTWFwIHx8XG5cdFx0YW5jaG9yIGluc3RhbmNlb2YgV2Vha1NldCB8fFxuXHRcdCh0eXBlb2YgV2Vha1JlZiA9PT0gXCJmdW5jdGlvblwiICYmIGFuY2hvciBpbnN0YW5jZW9mIFdlYWtSZWYpXG5cdCkge1xuXHRcdHRocm93IEVycm9yKFwidW5zdXBwb3J0ZWQgYWN0aW9uIGZvciB0aGlzIGRhdGEgdHlwZSBpbiBkZWxldGVWYWx1ZVZpYVBhdGhcIik7XG5cdH0gZWxzZSBpZiAoaXNBcnJheShhbmNob3IpKSB7XG5cdFx0bGFzdCA9IHBhcnNlSW50KGxhc3QpO1xuXHRcdHZhbGlkYXRlSW50ZWdlcihsYXN0KTtcblx0XHRkZWxldGUgYW5jaG9yW2xhc3RdO1xuXHR9IGVsc2Uge1xuXHRcdGRlbGV0ZSBhbmNob3JbbGFzdF07XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpc0l0ZXJhYmxlLCBpc1N0cmluZyB9IGZyb20gXCIuL2lzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVGdW5jdGlvbiwgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlLm1qc1wiO1xuXG5leHBvcnQgeyBUb2tlbkxpc3QgfTtcblxuLyoqXG4gKiBBIGBUb2tlbkxpc3RgIGFsbG93cyB5b3UgdG8gbWFuYWdlIHRva2VucyAoaW5kaXZpZHVhbCBjaGFyYWN0ZXIgc3RyaW5ncyBzdWNoIGFzIGNzcyBjbGFzc2VzIGluIGFuIGF0dHJpYnV0ZSBzdHJpbmcpLlxuICpcbiAqIFRoZSBgVG9rZW5MaXN0YCBvZmZlcnMgdmFyaW91cyBmdW5jdGlvbnMgdG8gbWFuaXB1bGF0ZSB2YWx1ZXMuIEZvciBleGFtcGxlLCB5b3UgY2FuIGFkZCwgcmVtb3ZlIG9yIHJlcGxhY2UgYSBjbGFzcyBpbiBhIENTUyBsaXN0LlxuICpcbiAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgW2l0ZXJhdGlvbiBwcm90b2NvbF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvSXRlcmF0aW9uX3Byb3RvY29scykuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKi9cbmNsYXNzIFRva2VuTGlzdCBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHthcnJheXxzdHJpbmd8aXRlcmF0YWJsZX0gaW5pdFxuXHQgKi9cblx0Y29uc3RydWN0b3IoaW5pdCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy50b2tlbnMgPSBuZXcgU2V0KCk7XG5cblx0XHRpZiAodHlwZW9mIGluaXQgIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdHRoaXMuYWRkKGluaXQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBJdGVyYXRvciBwcm90b2NvbFxuXHQgKlxuXHQgKiBAcmV0dXJuIHtTeW1ib2wuaXRlcmF0b3J9XG5cdCAqL1xuXHRnZXRJdGVyYXRvcigpIHtcblx0XHRyZXR1cm4gdGhpc1tTeW1ib2wuaXRlcmF0b3JdKCk7XG5cdH1cblxuXHQvKipcblx0ICogSXRlcmF0b3Jcblx0ICpcblx0ICogQHJldHVybiB7e25leHQ6ICgoZnVuY3Rpb24oKTogKHt2YWx1ZTogKiwgZG9uZTogYm9vbGVhbn0pKXwqKX19XG5cdCAqL1xuXHRbU3ltYm9sLml0ZXJhdG9yXSgpIHtcblx0XHQvLyBVc2UgYSBuZXcgaW5kZXggZm9yIGVhY2ggaXRlcmF0b3IuIFRoaXMgbWFrZXMgbXVsdGlwbGVcblx0XHQvLyBpdGVyYXRpb25zIG92ZXIgdGhlIGl0ZXJhYmxlIHNhZmUgZm9yIG5vbi10cml2aWFsIGNhc2VzLFxuXHRcdC8vIHN1Y2ggYXMgdXNlIG9mIGJyZWFrIG9yIG5lc3RlZCBsb29waW5nIG92ZXIgdGhlIHNhbWUgaXRlcmFibGUuXG5cdFx0bGV0IGluZGV4ID0gMDtcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzKCk7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0bmV4dDogKCkgPT4ge1xuXHRcdFx0XHRpZiAoaW5kZXggPCBlbnRyaWVzLmxlbmd0aCkge1xuXHRcdFx0XHRcdHJldHVybiB7IHZhbHVlOiBlbnRyaWVzPy5baW5kZXgrK10sIGRvbmU6IGZhbHNlIH07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuIHsgZG9uZTogdHJ1ZSB9O1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0cnVlIGlmIGl0IGNvbnRhaW5zIHRva2VuLCBvdGhlcndpc2UgZmFsc2Vcblx0ICpcblx0ICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3R5cGVzL3Rva2VubGlzdC0yLm1qc1xuXHQgKiBAcGFyYW0ge2FycmF5fHN0cmluZ3xpdGVyYXRhYmxlfSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0Y29udGFpbnModmFsdWUpIHtcblx0XHRpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG5cdFx0XHR2YWx1ZSA9IHZhbHVlLnRyaW0oKTtcblx0XHRcdGxldCBjb3VudGVyID0gMDtcblx0XHRcdHZhbHVlLnNwbGl0KFwiIFwiKS5mb3JFYWNoKCh0b2tlbikgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy50b2tlbnMuaGFzKHRva2VuLnRyaW0oKSkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRcdGNvdW50ZXIrKztcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIGNvdW50ZXIgPiAwID8gdHJ1ZSA6IGZhbHNlO1xuXHRcdH1cblxuXHRcdGlmIChpc0l0ZXJhYmxlKHZhbHVlKSkge1xuXHRcdFx0bGV0IGNvdW50ZXIgPSAwO1xuXHRcdFx0Zm9yIChjb25zdCB0b2tlbiBvZiB2YWx1ZSkge1xuXHRcdFx0XHR2YWxpZGF0ZVN0cmluZyh0b2tlbik7XG5cdFx0XHRcdGlmICh0aGlzLnRva2Vucy5oYXModG9rZW4udHJpbSgpKSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcblx0XHRcdFx0Y291bnRlcisrO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGNvdW50ZXIgPiAwID8gdHJ1ZSA6IGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgdG9rZW5zXG5cdCAqXG5cdCAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy90b2tlbmxpc3QtMy5tanNcblx0ICogQHBhcmFtIHthcnJheXxzdHJpbmd8aXRlcmF0YWJsZX0gdmFsdWVcblx0ICogQHJldHVybiB7VG9rZW5MaXN0fVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHZhbHVlXG5cdCAqL1xuXHRhZGQodmFsdWUpIHtcblx0XHRpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG5cdFx0XHR2YWx1ZS5zcGxpdChcIiBcIikuZm9yRWFjaCgodG9rZW4pID0+IHtcblx0XHRcdFx0dGhpcy50b2tlbnMuYWRkKHRva2VuLnRyaW0oKSk7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2UgaWYgKGlzSXRlcmFibGUodmFsdWUpKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHRva2VuIG9mIHZhbHVlKSB7XG5cdFx0XHRcdHZhbGlkYXRlU3RyaW5nKHRva2VuKTtcblx0XHRcdFx0dGhpcy50b2tlbnMuYWRkKHRva2VuLnRyaW0oKSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ1bnN1cHBvcnRlZCB2YWx1ZVwiKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiByZW1vdmUgYWxsIHRva2Vuc1xuXHQgKlxuXHQgKiBAcmV0dXJuIHtUb2tlbkxpc3R9XG5cdCAqL1xuXHRjbGVhcigpIHtcblx0XHR0aGlzLnRva2Vucy5jbGVhcigpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgdG9rZW5cblx0ICpcblx0ICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3R5cGVzL3Rva2VubGlzdC00Lm1qc1xuXHQgKiBAcGFyYW0ge2FycmF5fHN0cmluZ3xpdGVyYXRhYmxlfSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHtUb2tlbkxpc3R9XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgdmFsdWVcblx0ICovXG5cdHJlbW92ZSh2YWx1ZSkge1xuXHRcdGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcblx0XHRcdHZhbHVlLnNwbGl0KFwiIFwiKS5mb3JFYWNoKCh0b2tlbikgPT4ge1xuXHRcdFx0XHR0aGlzLnRva2Vucy5kZWxldGUodG9rZW4udHJpbSgpKTtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSBpZiAoaXNJdGVyYWJsZSh2YWx1ZSkpIHtcblx0XHRcdGZvciAoY29uc3QgdG9rZW4gb2YgdmFsdWUpIHtcblx0XHRcdFx0dmFsaWRhdGVTdHJpbmcodG9rZW4pO1xuXHRcdFx0XHR0aGlzLnRva2Vucy5kZWxldGUodG9rZW4udHJpbSgpKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInVuc3VwcG9ydGVkIHZhbHVlXCIsIFwidHlwZXMvdG9rZW5saXN0Lm1qc1wiKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiB0aGlzIG1ldGhvZCByZXBsYWNlcyBhIHRva2VuIHdpdGggYSBuZXcgdG9rZW4uXG5cdCAqXG5cdCAqIGlmIHRoZSBwYXNzZWQgdG9rZW4gZXhpc3RzLCBpdCBpcyByZXBsYWNlZCB3aXRoIG5ld1Rva2VuIGFuZCBUb2tlbkxpc3QgaXMgcmV0dXJuZWQuXG5cdCAqIGlmIHRoZSB0b2tlbiBkb2VzIG5vdCBleGlzdCwgbmV3VG9rZW4gaXMgbm90IHNldCBhbmQgVG9rZW5MaXN0IGlzIHJldHVybmVkLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdG9rZW5cblx0ICogQHBhcmFtIHtzdHJpbmd9IG5ld1Rva2VuXG5cdCAqIEByZXR1cm4ge1Rva2VuTGlzdH1cblx0ICovXG5cdHJlcGxhY2UodG9rZW4sIG5ld1Rva2VuKSB7XG5cdFx0dmFsaWRhdGVTdHJpbmcodG9rZW4pO1xuXHRcdHZhbGlkYXRlU3RyaW5nKG5ld1Rva2VuKTtcblx0XHRpZiAoIXRoaXMuY29udGFpbnModG9rZW4pKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHRjb25zdCBhID0gQXJyYXkuZnJvbSh0aGlzLnRva2Vucyk7XG5cdFx0Y29uc3QgaSA9IGEuaW5kZXhPZih0b2tlbik7XG5cdFx0aWYgKGkgPT09IC0xKSByZXR1cm4gdGhpcztcblxuXHRcdGEuc3BsaWNlKGksIDEsIG5ld1Rva2VuKTtcblx0XHR0aGlzLnRva2VucyA9IG5ldyBTZXQoKTtcblx0XHR0aGlzLmFkZChhKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgdG9rZW4gZnJvbSBzdHJpbmcuIElmIHRva2VuIGRvZXNuJ3QgZXhpc3QgaXQncyBhZGRlZC5cblx0ICpcblx0ICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3R5cGVzL3Rva2VubGlzdC01Lm1qc1xuXHQgKiBAcGFyYW0ge2FycmF5fHN0cmluZ3xpdGVyYXRhYmxlfSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHZhbHVlXG5cdCAqL1xuXHR0b2dnbGUodmFsdWUpIHtcblx0XHRpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG5cdFx0XHR2YWx1ZS5zcGxpdChcIiBcIikuZm9yRWFjaCgodG9rZW4pID0+IHtcblx0XHRcdFx0dG9nZ2xlVmFsdWUuY2FsbCh0aGlzLCB0b2tlbik7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2UgaWYgKGlzSXRlcmFibGUodmFsdWUpKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHRva2VuIG9mIHZhbHVlKSB7XG5cdFx0XHRcdHRvZ2dsZVZhbHVlLmNhbGwodGhpcywgdG9rZW4pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlICE9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidW5zdXBwb3J0ZWQgdmFsdWVcIiwgXCJ0eXBlcy90b2tlbmxpc3QubWpzXCIpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIHJldHVybnMgYW4gYXJyYXkgd2l0aCBhbGwgdG9rZW5zXG5cdCAqXG5cdCAqIEByZXR1cm4ge2FycmF5fVxuXHQgKi9cblx0ZW50cmllcygpIHtcblx0XHRyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnRva2Vucyk7XG5cdH1cblxuXHQvKipcblx0ICogZXhlY3V0ZXMgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHdpdGggZWFjaCB2YWx1ZSBvZiB0aGUgc2V0XG5cdCAqXG5cdCAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG5cdCAqIEByZXR1cm4ge1Rva2VuTGlzdH1cblx0ICovXG5cdGZvckVhY2goY2FsbGJhY2spIHtcblx0XHR2YWxpZGF0ZUZ1bmN0aW9uKGNhbGxiYWNrKTtcblx0XHR0aGlzLnRva2Vucy5mb3JFYWNoKGNhbGxiYWNrKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiByZXR1cm5zIHRoZSBpbmRpdmlkdWFsIHRva2VucyBzZXBhcmF0ZWQgYnkgYSBibGFuayBjaGFyYWN0ZXJcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0dG9TdHJpbmcoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZW50cmllcygpLmpvaW4oXCIgXCIpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB0b2tlblxuICogQHJldHVybiB7dG9nZ2xlVmFsdWV9XG4gKiBAdGhyb3dzIHtFcnJvcn0gbXVzdCBiZSBjYWxsZWQgd2l0aCBUb2tlbkxpc3QuY2FsbFxuICovXG5mdW5jdGlvbiB0b2dnbGVWYWx1ZSh0b2tlbikge1xuXHRpZiAoISh0aGlzIGluc3RhbmNlb2YgVG9rZW5MaXN0KSlcblx0XHR0aHJvdyBFcnJvcihcIm11c3QgYmUgY2FsbGVkIHdpdGggVG9rZW5MaXN0LmNhbGxcIik7XG5cdHZhbGlkYXRlU3RyaW5nKHRva2VuKTtcblx0dG9rZW4gPSB0b2tlbi50cmltKCk7XG5cdGlmICh0aGlzLmNvbnRhaW5zKHRva2VuKSkge1xuXHRcdHRoaXMucmVtb3ZlKHRva2VuKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHR0aGlzLmFkZCh0b2tlbik7XG5cdHJldHVybiB0aGlzO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmV4cG9ydCB7XG5cdERFRkFVTFRfVEhFTUUsXG5cdEFUVFJJQlVURV9QUkVGSVgsXG5cdEFUVFJJQlVURV9PUFRJT05TLFxuXHRBVFRSSUJVVEVfT1BUSU9OU19TRUxFQ1RPUixcblx0QVRUUklCVVRFX1RIRU1FX1BSRUZJWCxcblx0QVRUUklCVVRFX1RIRU1FX05BTUUsXG5cdEFUVFJJQlVURV9VUERBVEVSX0FUVFJJQlVURVMsXG5cdEFUVFJJQlVURV9VUERBVEVSX1NFTEVDVF9USElTLFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9SRVBMQUNFLFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9JTlNFUlQsXG5cdEFUVFJJQlVURV9VUERBVEVSX0lOU0VSVF9SRUZFUkVOQ0UsXG5cdEFUVFJJQlVURV9VUERBVEVSX1JFTU9WRSxcblx0QVRUUklCVVRFX1VQREFURVJfQklORCxcblx0QVRUUklCVVRFX1VQREFURVJfQklORF9UWVBFLFxuXHRBVFRSSUJVVEVfVEVNUExBVEVfUFJFRklYLFxuXHRBVFRSSUJVVEVfUk9MRSxcblx0QVRUUklCVVRFX0RJU0FCTEVELFxuXHRBVFRSSUJVVEVfVkFMVUUsXG5cdEFUVFJJQlVURV9PQkpFQ1RMSU5LLFxuXHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRUQUdfU0NSSVBULFxuXHRUQUdfU1RZTEUsXG5cdFRBR19MSU5LLFxuXHRBVFRSSUJVVEVfSUQsXG5cdEFUVFJJQlVURV9DTEFTUyxcblx0QVRUUklCVVRFX1RJVExFLFxuXHRBVFRSSUJVVEVfU1JDLFxuXHRBVFRSSUJVVEVfSFJFRixcblx0QVRUUklCVVRFX1RZUEUsXG5cdEFUVFJJQlVURV9OT05DRSxcblx0QVRUUklCVVRFX1RSQU5TTEFURSxcblx0QVRUUklCVVRFX1RBQklOREVYLFxuXHRBVFRSSUJVVEVfU1BFTExDSEVDSyxcblx0QVRUUklCVVRFX1NMT1QsXG5cdEFUVFJJQlVURV9QQVJULFxuXHRBVFRSSUJVVEVfTEFORyxcblx0QVRUUklCVVRFX0lURU1UWVBFLFxuXHRBVFRSSUJVVEVfSVRFTVNDT1BFLFxuXHRBVFRSSUJVVEVfSVRFTVJFRixcblx0QVRUUklCVVRFX0lURU1JRCxcblx0QVRUUklCVVRFX0lURU1QUk9QLFxuXHRBVFRSSUJVVEVfSVMsXG5cdEFUVFJJQlVURV9JTlBVVE1PREUsXG5cdEFUVFJJQlVURV9BQ0NFU1NLRVksXG5cdEFUVFJJQlVURV9BVVRPQ0FQSVRBTElaRSxcblx0QVRUUklCVVRFX0FVVE9GT0NVUyxcblx0QVRUUklCVVRFX0NPTlRFTlRFRElUQUJMRSxcblx0QVRUUklCVVRFX0RJUixcblx0QVRUUklCVVRFX0RSQUdHQUJMRSxcblx0QVRUUklCVVRFX0VOVEVSS0VZSElOVCxcblx0QVRUUklCVVRFX0VYUE9SVFBBUlRTLFxuXHRBVFRSSUJVVEVfSElEREVOLFxuXHRBVFRSSUJVVEVfRk9STV9CSU5ELFxuXHRBVFRSSUJVVEVfRk9STV9CSU5EX1RZUEUsXG5cdG9iamVjdFVwZGF0ZXJMaW5rU3ltYm9sLFxuXHRjdXN0b21FbGVtZW50VXBkYXRlckxpbmtTeW1ib2wsXG5cdGluaXRDb250cm9sQ2FsbGJhY2tOYW1lLFxuXHRBVFRSSUJVVEVfU0NSSVBUX0hPU1QsXG5cdEFUVFJJQlVURV9JTklUX0NBTExCQUNLLFxufTtcblxuLyoqXG4gKiBkZWZhdWx0IHRoZW1lXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBERUZBVUxUX1RIRU1FID0gXCJtb25zdGVyXCI7XG5cbi8qKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9QUkVGSVggPSBcImRhdGEtbW9uc3Rlci1cIjtcblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgdG8gcGFzcyBvcHRpb25zIHRvIGEgY29udHJvbFxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfT1BUSU9OUyA9IGAke0FUVFJJQlVURV9QUkVGSVh9b3B0aW9uc2A7XG5cbi8qKlxuICogVGhpcyBpcyBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgdG8gcGFzcyB0aGUgc2NyaXB0IGhvc3QgdG8gYSBjb250cm9sXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMy40OC4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfU0NSSVBUX0hPU1QgPSBgJHtBVFRSSUJVVEVfUFJFRklYfXNjcmlwdC1ob3N0YDtcblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgdG8gcGFzcyBvcHRpb25zIHRvIGEgY29udHJvbFxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMzAuMFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX09QVElPTlNfU0VMRUNUT1IgPSBgJHtBVFRSSUJVVEVfUFJFRklYfW9wdGlvbnMtc2VsZWN0b3JgO1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSB0byBwYXNzIHRoZSBjYWxsYmFjayB0byBhIGNvbnRyb2xcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAzLjQ4LjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9JTklUX0NBTExCQUNLID0gYCR7QVRUUklCVVRFX1BSRUZJWH1pbml0LWNhbGxiYWNrYDtcblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBjYWxsYmFjayB0byBwYXNzIHRoZSBjYWxsYmFjayB0byBhIGNvbnRyb2xcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAzLjQ4LjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IGluaXRDb250cm9sQ2FsbGJhY2tOYW1lID0gYGluaXRDdXN0b21Db250cm9sQ2FsbGJhY2tgO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICovXG5jb25zdCBBVFRSSUJVVEVfVEhFTUVfUFJFRklYID0gYCR7QVRUUklCVVRFX1BSRUZJWH10aGVtZS1gO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9USEVNRV9OQU1FID0gYCR7QVRUUklCVVRFX1RIRU1FX1BSRUZJWH1uYW1lYDtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1VQREFURVJfQVRUUklCVVRFUyA9IGAke0FUVFJJQlVURV9QUkVGSVh9YXR0cmlidXRlc2A7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjcuMVxuICovXG5jb25zdCBBVFRSSUJVVEVfVVBEQVRFUl9TRUxFQ1RfVEhJUyA9IGAke0FUVFJJQlVURV9QUkVGSVh9c2VsZWN0LXRoaXNgO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICovXG5jb25zdCBBVFRSSUJVVEVfVVBEQVRFUl9SRVBMQUNFID0gYCR7QVRUUklCVVRFX1BSRUZJWH1yZXBsYWNlYDtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1VQREFURVJfSU5TRVJUID0gYCR7QVRUUklCVVRFX1BSRUZJWH1pbnNlcnRgO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICovXG5jb25zdCBBVFRSSUJVVEVfVVBEQVRFUl9JTlNFUlRfUkVGRVJFTkNFID0gYCR7QVRUUklCVVRFX1BSRUZJWH1pbnNlcnQtcmVmZXJlbmNlYDtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1VQREFURVJfUkVNT1ZFID0gYCR7QVRUUklCVVRFX1BSRUZJWH1yZW1vdmVgO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjkuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfVVBEQVRFUl9CSU5EID0gYCR7QVRUUklCVVRFX1BSRUZJWH1iaW5kYDtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMy43My4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9GT1JNX0JJTkQgPSBgJHtBVFRSSUJVVEVfUFJFRklYfWZvcm0tYmluZGA7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDMuNzMuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfRk9STV9CSU5EX1RZUEUgPSBgJHtBVFRSSUJVVEVfUFJFRklYfWZvcm0tYmluZC10eXBlYDtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS45LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1VQREFURVJfQklORF9UWVBFID0gYCR7QVRUUklCVVRFX1VQREFURVJfQklORH0tdHlwZWA7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjcuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfVEVNUExBVEVfUFJFRklYID0gYCR7QVRUUklCVVRFX1BSRUZJWH10ZW1wbGF0ZS1wcmVmaXhgO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjE0LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1JPTEUgPSBgJHtBVFRSSUJVVEVfUFJFRklYfXJvbGVgO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI0LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0RJU0FCTEVEID0gXCJkaXNhYmxlZFwiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI0LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1ZBTFVFID0gXCJ2YWx1ZVwiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjkuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfT0JKRUNUTElOSyA9IGAke0FUVFJJQlVURV9QUkVGSVh9b2JqZWN0bGlua2A7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjQuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFID0gYCR7QVRUUklCVVRFX1BSRUZJWH1lcnJvcmA7XG5cbi8qKlxuICogQHR5cGUge3N5bWJvbH1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjQuMFxuICovXG5jb25zdCBvYmplY3RVcGRhdGVyTGlua1N5bWJvbCA9IFN5bWJvbC5mb3IoXG5cdFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vQEBvYmplY3QtdXBkYXRlci1saW5rXCIsXG4pO1xuXG4vKipcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI0LjBcbiAqL1xuY29uc3QgY3VzdG9tRWxlbWVudFVwZGF0ZXJMaW5rU3ltYm9sID0gU3ltYm9sLmZvcihcblx0XCJAc2NodWthaS9tb25zdGVyL2RvbS9jdXN0b20tZWxlbWVudEBAb3B0aW9ucy11cGRhdGVyLWxpbmtcIixcbik7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBUQUdfU0NSSVBUID0gXCJzY3JpcHRcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IFRBR19TVFlMRSA9IFwic3R5bGVcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IFRBR19MSU5LID0gXCJsaW5rXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5cbmNvbnN0IEFUVFJJQlVURV9JRCA9IFwiaWRcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cblxuY29uc3QgQVRUUklCVVRFX0NMQVNTID0gXCJjbGFzc1wiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1RJVExFID0gXCJ0aXRsZVwiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1NSQyA9IFwic3JjXCI7XG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0hSRUYgPSBcImhyZWZcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9UWVBFID0gXCJ0eXBlXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfTk9OQ0UgPSBcIm5vbmNlXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfVFJBTlNMQVRFID0gXCJ0cmFuc2xhdGVcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9UQUJJTkRFWCA9IFwidGFiaW5kZXhcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9TUEVMTENIRUNLID0gXCJzcGVsbGNoZWNrXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfU0xPVCA9IFwic2xvdFwiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1BBUlQgPSBcInBhcnRcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9MQU5HID0gXCJsYW5nXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfSVRFTVRZUEUgPSBcIml0ZW10eXBlXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfSVRFTVNDT1BFID0gXCJpdGVtc2NvcGVcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9JVEVNUkVGID0gXCJpdGVtcmVmXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfSVRFTUlEID0gXCJpdGVtaWRcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9JVEVNUFJPUCA9IFwiaXRlbXByb3BcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9JUyA9IFwiaXNcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9JTlBVVE1PREUgPSBcImlucHV0bW9kZVwiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0FDQ0VTU0tFWSA9IFwiYWNjZXNza2V5XCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfQVVUT0NBUElUQUxJWkUgPSBcImF1dG9jYXBpdGFsaXplXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfQVVUT0ZPQ1VTID0gXCJhdXRvZm9jdXNcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9DT05URU5URURJVEFCTEUgPSBcImNvbnRlbnRlZGl0YWJsZVwiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0RJUiA9IFwiZGlyXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfRFJBR0dBQkxFID0gXCJkcmFnZ2FibGVcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9FTlRFUktFWUhJTlQgPSBcImVudGVya2V5aGludFwiO1xuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9FWFBPUlRQQVJUUyA9IFwiZXhwb3J0cGFydHNcIjtcbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfSElEREVOID0gXCJoaWRkZW5cIjtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBnZXRHbG9iYWxGdW5jdGlvbiB9IGZyb20gXCIuLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyBUb2tlbkxpc3QgfSBmcm9tIFwiLi4vdHlwZXMvdG9rZW5saXN0Lm1qc1wiO1xuaW1wb3J0IHtcblx0dmFsaWRhdGVJbnN0YW5jZSxcblx0dmFsaWRhdGVTdHJpbmcsXG5cdHZhbGlkYXRlU3ltYm9sLFxufSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfT0JKRUNUTElOSyB9IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHtcblx0ZmluZENsb3Nlc3RPYmplY3RMaW5rLFxuXHRhZGRUb09iamVjdExpbmssXG5cdHJlbW92ZU9iamVjdExpbmssXG5cdGhhc09iamVjdExpbmssXG5cdGdldExpbmtlZE9iamVjdHMsXG5cdHRvZ2dsZUF0dHJpYnV0ZVRva2VuLFxuXHRhZGRBdHRyaWJ1dGVUb2tlbixcblx0cmVtb3ZlQXR0cmlidXRlVG9rZW4sXG5cdGNvbnRhaW5zQXR0cmlidXRlVG9rZW4sXG5cdHJlcGxhY2VBdHRyaWJ1dGVUb2tlbixcblx0Y2xlYXJBdHRyaWJ1dGVUb2tlbnMsXG5cdGZpbmRDbG9zZXN0QnlBdHRyaWJ1dGUsXG5cdGZpbmRDbG9zZXN0QnlDbGFzcyxcbn07XG5cbi8qKlxuICogR2V0IHRoZSBjbG9zZXN0IG9iamVjdCBsaW5rIG9mIGEgbm9kZVxuICpcbiAqIGlmIGEgbm9kZSBpcyBzcGVjaWZpZWQgd2l0aG91dCBhIG9iamVjdCBsaW5rLCBhIHJlY3Vyc2l2ZSBzZWFyY2ggdXB3YXJkcyBpcyBwZXJmb3JtZWQgdW50aWwgdGhlIGNvcnJlc3BvbmRpbmdcbiAqIG9iamVjdCBsaW5rIGlzIGZvdW5kLCBvciB1bmRlZmluZWQgaXMgcmV0dXJuZWQuXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybiB7SFRNTEVsZW1lbnR8dW5kZWZpbmVkfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgSFRNTEVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gZmluZENsb3Nlc3RPYmplY3RMaW5rKGVsZW1lbnQpIHtcblx0cmV0dXJuIGZpbmRDbG9zZXN0QnlBdHRyaWJ1dGUoZWxlbWVudCwgQVRUUklCVVRFX09CSkVDVExJTkspO1xufVxuXG4vKipcbiAqIEFkZHMgYSBjbGFzcyBhdHRyaWJ1dGUgdG8gYW4gZWxlbWVudC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjkuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBwYXJhbSBlbGVtZW50XG4gKiBAcGFyYW0gc3ltYm9sXG4gKiBAcGFyYW0gb2JqZWN0XG4gKiBAcmV0dXJuIHsqfVxuICovXG5mdW5jdGlvbiBhZGRUb09iamVjdExpbmsoZWxlbWVudCwgc3ltYm9sLCBvYmplY3QpIHtcblx0dmFsaWRhdGVJbnN0YW5jZShlbGVtZW50LCBIVE1MRWxlbWVudCk7XG5cdHZhbGlkYXRlU3ltYm9sKHN5bWJvbCk7XG5cblx0aWYgKGVsZW1lbnQ/LltzeW1ib2xdID09PSB1bmRlZmluZWQpIHtcblx0XHRlbGVtZW50W3N5bWJvbF0gPSBuZXcgU2V0KCk7XG5cdH1cblxuXHRhZGRBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBBVFRSSUJVVEVfT0JKRUNUTElOSywgc3ltYm9sLnRvU3RyaW5nKCkpO1xuXHRlbGVtZW50W3N5bWJvbF0uYWRkKG9iamVjdCk7XG5cdHJldHVybiBlbGVtZW50O1xufVxuXG4vKipcbiAqIFJlbW92ZXMgYW4gb2JqZWN0IGZyb20gYW4gZWxlbWVudFxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtTeW1ib2x9IHN5bWJvbFxuICogQHJldHVybiB7Kn1cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlT2JqZWN0TGluayhlbGVtZW50LCBzeW1ib2wpIHtcblx0dmFsaWRhdGVJbnN0YW5jZShlbGVtZW50LCBIVE1MRWxlbWVudCk7XG5cdHZhbGlkYXRlU3ltYm9sKHN5bWJvbCk7XG5cblx0aWYgKGVsZW1lbnQ/LltzeW1ib2xdID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gZWxlbWVudDtcblx0fVxuXG5cdHJlbW92ZUF0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIEFUVFJJQlVURV9PQkpFQ1RMSU5LLCBzeW1ib2wudG9TdHJpbmcoKSk7XG5cdGRlbGV0ZSBlbGVtZW50W3N5bWJvbF07XG5cdHJldHVybiBlbGVtZW50O1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhbiBlbGVtZW50IGhhcyBhbiBvYmplY3QgbGlua1xuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtTeW1ib2x9IHN5bWJvbFxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaGFzT2JqZWN0TGluayhlbGVtZW50LCBzeW1ib2wpIHtcblx0dmFsaWRhdGVJbnN0YW5jZShlbGVtZW50LCBIVE1MRWxlbWVudCk7XG5cdHZhbGlkYXRlU3ltYm9sKHN5bWJvbCk7XG5cblx0aWYgKGVsZW1lbnQ/LltzeW1ib2xdID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gY29udGFpbnNBdHRyaWJ1dGVUb2tlbihcblx0XHRlbGVtZW50LFxuXHRcdEFUVFJJQlVURV9PQkpFQ1RMSU5LLFxuXHRcdHN5bWJvbC50b1N0cmluZygpLFxuXHQpO1xufVxuXG4vKipcbiAqIFRoZSBPYmplY3RMaW5rIGNhbiBiZSB1c2VkIHRvIGF0dGFjaCBvYmplY3RzIHRvIEhUTUxFbGVtZW50cy4gVGhlIGVsZW1lbnRzIGFyZSBrZXB0IGluIGEgc2V0IHVuZGVyIGEgdW5pcXVlXG4gKiBzeW1ib2wgYW5kIGNhbiBiZSByZWFkIHZpYSBhbiBpdGVyYXRvciB7QHNlZSB7QGxpbmsgZ2V0TGlua2VkT2JqZWN0c319LlxuICpcbiAqIEluIGFkZGl0aW9uLCBlbGVtZW50cyB3aXRoIGFuIG9iamVjdExpbmsgcmVjZWl2ZSB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb2JqZWN0bGlua2AuXG4gKlxuICogV2l0aCB0aGUgbWV0aG9kICB7QHNlZSB7QGxpbmsgYWRkVG9PYmplY3RMaW5rfX0gdGhlIG9iamVjdHMgY2FuIGJlIGFkZGVkLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtTeW1ib2x9IHN5bWJvbFxuICogQHJldHVybiB7SXRlcmF0b3J9XG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhlcmUgaXMgbm8gb2JqZWN0IGxpbmsgZm9yIHN5bWJvbFxuICovXG5mdW5jdGlvbiBnZXRMaW5rZWRPYmplY3RzKGVsZW1lbnQsIHN5bWJvbCkge1xuXHR2YWxpZGF0ZUluc3RhbmNlKGVsZW1lbnQsIEhUTUxFbGVtZW50KTtcblx0dmFsaWRhdGVTeW1ib2woc3ltYm9sKTtcblxuXHRpZiAoZWxlbWVudD8uW3N5bWJvbF0gPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihgdGhlcmUgaXMgbm8gb2JqZWN0IGxpbmsgZm9yICR7c3ltYm9sLnRvU3RyaW5nKCl9YCk7XG5cdH1cblxuXHRyZXR1cm4gZWxlbWVudD8uW3N5bWJvbF1bU3ltYm9sLml0ZXJhdG9yXSgpO1xufVxuXG4vKipcbiAqIFdpdGggdGhpcyBtZXRob2QgdG9rZW5zIGluIGFuIGF0dHJpYnV0ZSBjYW4gYmUgc3dpdGNoZWQgb24gb3Igb2ZmLiBGb3IgZXhhbXBsZSwgY2xhc3NlcyBjYW4gYmUgc3dpdGNoZWQgb24gYW5kIG9mZiBpbiB0aGUgZWxlbWVudHMgY2xhc3MgYXR0cmlidXRlLlxuICpcbiAqIFRva2VucyBhcmUgYWx3YXlzIHNlcGFyYXRlZCBieSBhIHNwYWNlLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICogQHBhcmFtIHtzdHJpbmd9IHRva2VuXG4gKiBAcmV0dXJuIHtIVE1MRWxlbWVudH1cbiAqL1xuZnVuY3Rpb24gdG9nZ2xlQXR0cmlidXRlVG9rZW4oZWxlbWVudCwga2V5LCB0b2tlbikge1xuXHR2YWxpZGF0ZUluc3RhbmNlKGVsZW1lbnQsIEhUTUxFbGVtZW50KTtcblx0dmFsaWRhdGVTdHJpbmcodG9rZW4pO1xuXHR2YWxpZGF0ZVN0cmluZyhrZXkpO1xuXG5cdGlmICghZWxlbWVudC5oYXNBdHRyaWJ1dGUoa2V5KSkge1xuXHRcdGVsZW1lbnQuc2V0QXR0cmlidXRlKGtleSwgdG9rZW4pO1xuXHRcdHJldHVybiBlbGVtZW50O1xuXHR9XG5cblx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUoXG5cdFx0a2V5LFxuXHRcdG5ldyBUb2tlbkxpc3QoZWxlbWVudC5nZXRBdHRyaWJ1dGUoa2V5KSkudG9nZ2xlKHRva2VuKS50b1N0cmluZygpLFxuXHQpO1xuXG5cdHJldHVybiBlbGVtZW50O1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIGFkZCBhIHRva2VuIHRvIGFuIGF0dHJpYnV0ZS4gVG9rZW5zIGFyZSBhbHdheXMgc2VwYXJhdGVkIGJ5IGEgc3BhY2UuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS45LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gdG9rZW5cbiAqIEByZXR1cm4ge0hUTUxFbGVtZW50fVxuICovXG5mdW5jdGlvbiBhZGRBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBrZXksIHRva2VuKSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgSFRNTEVsZW1lbnQpO1xuXHR2YWxpZGF0ZVN0cmluZyh0b2tlbik7XG5cdHZhbGlkYXRlU3RyaW5nKGtleSk7XG5cblx0aWYgKCFlbGVtZW50Lmhhc0F0dHJpYnV0ZShrZXkpKSB7XG5cdFx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUoa2V5LCB0b2tlbik7XG5cdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdH1cblxuXHRlbGVtZW50LnNldEF0dHJpYnV0ZShcblx0XHRrZXksXG5cdFx0bmV3IFRva2VuTGlzdChlbGVtZW50LmdldEF0dHJpYnV0ZShrZXkpKS5hZGQodG9rZW4pLnRvU3RyaW5nKCksXG5cdCk7XG5cblx0cmV0dXJuIGVsZW1lbnQ7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byByZW1vdmUgdG9rZW5zIGZyb20gYW4gYXR0cmlidXRlLlxuICpcbiAqIFRva2VucyBhcmUgYWx3YXlzIHNlcGFyYXRlZCBieSBhIHNwYWNlLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICogQHBhcmFtIHtzdHJpbmd9IHRva2VuXG4gKiBAcmV0dXJuIHtIVE1MRWxlbWVudH1cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQXR0cmlidXRlVG9rZW4oZWxlbWVudCwga2V5LCB0b2tlbikge1xuXHR2YWxpZGF0ZUluc3RhbmNlKGVsZW1lbnQsIEhUTUxFbGVtZW50KTtcblx0dmFsaWRhdGVTdHJpbmcodG9rZW4pO1xuXHR2YWxpZGF0ZVN0cmluZyhrZXkpO1xuXG5cdGlmICghZWxlbWVudC5oYXNBdHRyaWJ1dGUoa2V5KSkge1xuXHRcdHJldHVybiBlbGVtZW50O1xuXHR9XG5cblx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUoXG5cdFx0a2V5LFxuXHRcdG5ldyBUb2tlbkxpc3QoZWxlbWVudC5nZXRBdHRyaWJ1dGUoa2V5KSkucmVtb3ZlKHRva2VuKS50b1N0cmluZygpLFxuXHQpO1xuXG5cdHJldHVybiBlbGVtZW50O1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIGFuIGF0dHJpYnV0ZSBoYXMgYSB0b2tlbi5cbiAqXG4gKiBUb2tlbnMgYXJlIGFsd2F5cyBzZXBhcmF0ZWQgYnkgYSBzcGFjZS5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjkuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSB0b2tlblxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gY29udGFpbnNBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBrZXksIHRva2VuKSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgSFRNTEVsZW1lbnQpO1xuXHR2YWxpZGF0ZVN0cmluZyh0b2tlbik7XG5cdHZhbGlkYXRlU3RyaW5nKGtleSk7XG5cblx0aWYgKCFlbGVtZW50Lmhhc0F0dHJpYnV0ZShrZXkpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0cmV0dXJuIG5ldyBUb2tlbkxpc3QoZWxlbWVudC5nZXRBdHRyaWJ1dGUoa2V5KSkuY29udGFpbnModG9rZW4pO1xufVxuXG4vKipcbiAqIFRva2VucyBhcmUgYWx3YXlzIHNlcGFyYXRlZCBieSBhIHNwYWNlLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICogQHBhcmFtIHtzdHJpbmd9IGZyb21cbiAqIEBwYXJhbSB7c3RyaW5nfSB0b1xuICogQHJldHVybiB7SFRNTEVsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIHJlcGxhY2VBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBrZXksIGZyb20sIHRvKSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgSFRNTEVsZW1lbnQpO1xuXHR2YWxpZGF0ZVN0cmluZyhmcm9tKTtcblx0dmFsaWRhdGVTdHJpbmcodG8pO1xuXHR2YWxpZGF0ZVN0cmluZyhrZXkpO1xuXG5cdGlmICghZWxlbWVudC5oYXNBdHRyaWJ1dGUoa2V5KSkge1xuXHRcdHJldHVybiBlbGVtZW50O1xuXHR9XG5cblx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUoXG5cdFx0a2V5LFxuXHRcdG5ldyBUb2tlbkxpc3QoZWxlbWVudC5nZXRBdHRyaWJ1dGUoa2V5KSkucmVwbGFjZShmcm9tLCB0bykudG9TdHJpbmcoKSxcblx0KTtcblxuXHRyZXR1cm4gZWxlbWVudDtcbn1cblxuLyoqXG4gKiBUb2tlbnMgYXJlIGFsd2F5cyBzZXBhcmF0ZWQgYnkgYSBzcGFjZS5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjkuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqIEByZXR1cm4ge0hUTUxFbGVtZW50fVxuICovXG5mdW5jdGlvbiBjbGVhckF0dHJpYnV0ZVRva2VucyhlbGVtZW50LCBrZXkpIHtcblx0dmFsaWRhdGVJbnN0YW5jZShlbGVtZW50LCBIVE1MRWxlbWVudCk7XG5cdHZhbGlkYXRlU3RyaW5nKGtleSk7XG5cblx0aWYgKCFlbGVtZW50Lmhhc0F0dHJpYnV0ZShrZXkpKSB7XG5cdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdH1cblxuXHRlbGVtZW50LnNldEF0dHJpYnV0ZShrZXksIFwiXCIpO1xuXG5cdHJldHVybiBlbGVtZW50O1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gc2VhcmNoZXMsIHN0YXJ0aW5nIGZyb20gYW4gYEhUTUxFbGVtZW1lbnRgLCBmb3IgdGhlIG5leHQgZWxlbWVudCB0aGF0IGhhcyBhIGNlcnRhaW4gYXR0cmlidXRlLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxkaXYgZGF0YS1teS1hdHRyaWJ1dGU9XCIyXCIgaWQ9XCIyXCI+XG4gKiAgICAgPGRpdiBpZD1cIjFcIj48L2Rpdj5cbiAqIDwvZGl2PlxuICogYGBgXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogLy8gaWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkICh1bmRlZmluZWQpLCB0aGVuIG9ubHkgdGhlIGF0dHJpYnV0ZSBpcyBjaGVja2VkLlxuICogZmluZENsb3Nlc3RCeUF0dHJpYnV0ZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnMScpLCdkYXRhLW15LWF0dHJpYnV0ZScpOyAvLyBcdTIxQTYgbm9kZSB3aXRoIGlkIDJcbiAqIGZpbmRDbG9zZXN0QnlBdHRyaWJ1dGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJzInKSwnZGF0YS1teS1hdHRyaWJ1dGUnKTsgLy8gXHUyMUE2IG5vZGUgd2l0aCBpZCAyXG4gKlxuICogLy8gaWYgYSB2YWx1ZSBpcyBzcGVjaWZpZWQsIGZvciBleGFtcGxlIGFuIGVtcHR5IHN0cmluZywgdGhlbiB0aGUgbmFtZSBhbmQgdGhlIHZhbHVlIGFyZSBjaGVja2VkLlxuICogZmluZENsb3Nlc3RCeUF0dHJpYnV0ZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnMScpLCdkYXRhLW15LWF0dHJpYnV0ZScsICcnKTsgIC8vIFx1MjFBNiB1bmRlZmluZWRcbiAqIGZpbmRDbG9zZXN0QnlBdHRyaWJ1dGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJzEnKSwnZGF0YS1teS1hdHRyaWJ1dGUnLCAnMicpOyAvLyBcdTIxQTYgbm9kZSB3aXRoIGlkIDJcbiAqIGBgYFxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTQuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gdmFsdWVcbiAqIEByZXR1cm4ge0hUTUxFbGVtZW50fHVuZGVmaW5lZH1cbiAqIEBzdW1tYXJ5IGZpbmQgY2xvc2VzdCBub2RlXG4gKi9cbmZ1bmN0aW9uIGZpbmRDbG9zZXN0QnlBdHRyaWJ1dGUoZWxlbWVudCwga2V5LCB2YWx1ZSkge1xuXHR2YWxpZGF0ZUluc3RhbmNlKGVsZW1lbnQsIGdldEdsb2JhbEZ1bmN0aW9uKFwiSFRNTEVsZW1lbnRcIikpO1xuXG5cdGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZShrZXkpKSB7XG5cdFx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiBlbGVtZW50O1xuXHRcdH1cblxuXHRcdGlmIChlbGVtZW50LmdldEF0dHJpYnV0ZShrZXkpID09PSB2YWx1ZSkge1xuXHRcdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdFx0fVxuXHR9XG5cblx0bGV0IHNlbGVjdG9yID0gdmFsaWRhdGVTdHJpbmcoa2V5KTtcblx0aWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHNlbGVjdG9yICs9IGA9JHt2YWxpZGF0ZVN0cmluZyh2YWx1ZSl9YDtcblx0Y29uc3QgcmVzdWx0ID0gZWxlbWVudC5jbG9zZXN0KGBbJHtzZWxlY3Rvcn1dYCk7XG5cdGlmIChyZXN1bHQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHNlYXJjaGVzLCBzdGFydGluZyBmcm9tIGFuIGBIVE1MRWxlbWVudGAsIGZvciB0aGUgbmV4dCBlbGVtZW50IHRoYXQgaGFzIGEgY2VydGFpbiBhdHRyaWJ1dGUuXG4gKlxuICogYGBgaHRtbFxuICogPGRpdiBjbGFzcz1cIm15Y2xhc3NcIiBpZD1cIjJcIj5cbiAqICAgICA8ZGl2IGlkPVwiMVwiPjwvZGl2PlxuICogPC9kaXY+XG4gKiBgYGBcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiAvLyBpZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQgKHVuZGVmaW5lZCksIHRoZW4gb25seSB0aGUgYXR0cmlidXRlIGlzIGNoZWNrZWQuXG4gKiBmaW5kQ2xvc2VzdEJ5Q2xhc3MoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJzEnKSwnbXljbGFzcycpOyAvLyBcdTIxQTYgbm9kZSB3aXRoIGlkIDJcbiAqIGZpbmRDbG9zZXN0QnlDbGFzcyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnMicpLCdteWNsYXNzJyk7IC8vIFx1MjFBNiBub2RlIHdpdGggaWQgMlxuICogYGBgXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7ZmluZENsb3Nlc3RCeUNsYXNzfSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS9kb20vYXR0cmlidXRlcy5tanMnO1xuICogZmluZENsb3Nlc3RCeUNsYXNzKCk7XG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjcuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc05hbWVcbiAqIEByZXR1cm4ge0hUTUxFbGVtZW50fHVuZGVmaW5lZH1cbiAqIEBzdW1tYXJ5IGZpbmQgY2xvc2VzdCBub2RlXG4gKi9cbmZ1bmN0aW9uIGZpbmRDbG9zZXN0QnlDbGFzcyhlbGVtZW50LCBjbGFzc05hbWUpIHtcblx0dmFsaWRhdGVJbnN0YW5jZShlbGVtZW50LCBnZXRHbG9iYWxGdW5jdGlvbihcIkhUTUxFbGVtZW50XCIpKTtcblxuXHRpZiAoZWxlbWVudD8uY2xhc3NMaXN0Py5jb250YWlucyh2YWxpZGF0ZVN0cmluZyhjbGFzc05hbWUpKSkge1xuXHRcdHJldHVybiBlbGVtZW50O1xuXHR9XG5cblx0Y29uc3QgcmVzdWx0ID0gZWxlbWVudC5jbG9zZXN0KGAuJHtjbGFzc05hbWV9YCk7XG5cdGlmIChyZXN1bHQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGdldEdsb2JhbCB9IGZyb20gXCIuLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHtcblx0Z2V0RG9jdW1lbnQsXG5cdGdldFdpbmRvdyxcblx0Z2V0RG9jdW1lbnRGcmFnbWVudEZyb21TdHJpbmcsXG5cdGZpbmRFbGVtZW50V2l0aElkVXB3YXJkcyxcblx0Z2V0Q29udGFpbmluZ0RvY3VtZW50LFxuXHRnZXRSZWdpc3RlcmVkQ3VzdG9tRWxlbWVudHMsXG5cdGZpbmRFbGVtZW50V2l0aFNlbGVjdG9yVXB3YXJkcyxcbn07XG5cbi8qKlxuICogVGhpcyBtZXRob2QgZmV0Y2hlcyB0aGUgZG9jdW1lbnQgb2JqZWN0XG4gKlxuICogSW4gbm9kZWpzIHRoaXMgZnVuY3Rpb25hbGl0eSBjYW4gYmUgcGVyZm9ybWVkIHdpdGggW2pzZG9tXShodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9qc2RvbSkuXG4gKlxuICogYGBgXG4gKiBpbXBvcnQge0pTRE9NfSBmcm9tIFwianNkb21cIlxuICogaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwib2JqZWN0XCIpIHtcbiAqICAgIGNvbnN0IHt3aW5kb3d9ID0gbmV3IEpTRE9NKCcnLCB7XG4gKiAgICAgICAgdXJsOiAnaHR0cDovL2V4YW1wbGUuY29tLycsXG4gKiAgICAgICAgcHJldGVuZFRvQmVWaXN1YWw6IHRydWVcbiAqICAgIH0pO1xuICpcbiAqICAgIFtcbiAqICAgICAgICAnc2VsZicsXG4gKiAgICAgICAgJ2RvY3VtZW50JyxcbiAqICAgICAgICAnRG9jdW1lbnQnLFxuICogICAgICAgICdOb2RlJyxcbiAqICAgICAgICAnRWxlbWVudCcsXG4gKiAgICAgICAgJ0hUTUxFbGVtZW50JyxcbiAqICAgICAgICAnRG9jdW1lbnRGcmFnbWVudCcsXG4gKiAgICAgICAgJ0RPTVBhcnNlcicsXG4gKiAgICAgICAgJ1hNTFNlcmlhbGl6ZXInLFxuICogICAgICAgICdOb2RlRmlsdGVyJyxcbiAqICAgICAgICAnSW5wdXRFdmVudCcsXG4gKiAgICAgICAgJ0N1c3RvbUV2ZW50J1xuICogICAgXS5mb3JFYWNoKGtleSA9PiAoZ2V0R2xvYmFsKClba2V5XSA9IHdpbmRvd1trZXldKSk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjYuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEB0aHJvd3Mge0Vycm9yfSBub3Qgc3VwcG9ydGVkIGVudmlyb25tZW50XG4gKi9cbmZ1bmN0aW9uIGdldERvY3VtZW50KCkge1xuXHRjb25zdCBkb2N1bWVudCA9IGdldEdsb2JhbCgpPy5bXCJkb2N1bWVudFwiXTtcblx0aWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gXCJvYmplY3RcIikge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vdCBzdXBwb3J0ZWQgZW52aXJvbm1lbnRcIik7XG5cdH1cblxuXHRyZXR1cm4gZG9jdW1lbnQ7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgZmV0Y2hlcyB0aGUgd2luZG93IG9iamVjdFxuICpcbiAqIEluIG5vZGVqcyB0aGlzIGZ1bmN0aW9uYWxpdHkgY2FuIGJlIHBlcmZvcm1lZCB3aXRoIFtqc2RvbV0oaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvanNkb20pLlxuICpcbiAqIGBgYFxuICogaW1wb3J0IHtKU0RPTX0gZnJvbSBcImpzZG9tXCJcbiAqIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcIm9iamVjdFwiKSB7XG4gKiAgICBjb25zdCB7d2luZG93fSA9IG5ldyBKU0RPTSgnJywge1xuICogICAgICAgIHVybDogJ2h0dHA6Ly9leGFtcGxlLmNvbS8nLFxuICogICAgICAgIHByZXRlbmRUb0JlVmlzdWFsOiB0cnVlXG4gKiAgICB9KTtcbiAqXG4gKiAgICBnZXRHbG9iYWwoKVsnd2luZG93J109d2luZG93O1xuICpcbiAqICAgIFtcbiAqICAgICAgICAnc2VsZicsXG4gKiAgICAgICAgJ2RvY3VtZW50JyxcbiAqICAgICAgICAnRG9jdW1lbnQnLFxuICogICAgICAgICdOb2RlJyxcbiAqICAgICAgICAnRWxlbWVudCcsXG4gKiAgICAgICAgJ0hUTUxFbGVtZW50JyxcbiAqICAgICAgICAnRG9jdW1lbnRGcmFnbWVudCcsXG4gKiAgICAgICAgJ0RPTVBhcnNlcicsXG4gKiAgICAgICAgJ1hNTFNlcmlhbGl6ZXInLFxuICogICAgICAgICdOb2RlRmlsdGVyJyxcbiAqICAgICAgICAnSW5wdXRFdmVudCcsXG4gKiAgICAgICAgJ0N1c3RvbUV2ZW50J1xuICogICAgXS5mb3JFYWNoKGtleSA9PiAoZ2V0R2xvYmFsKClba2V5XSA9IHdpbmRvd1trZXldKSk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjYuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEB0aHJvd3Mge0Vycm9yfSBub3Qgc3VwcG9ydGVkIGVudmlyb25tZW50XG4gKi9cbmZ1bmN0aW9uIGdldFdpbmRvdygpIHtcblx0Y29uc3Qgd2luZG93ID0gZ2V0R2xvYmFsKCk/LltcIndpbmRvd1wiXTtcblx0aWYgKHR5cGVvZiB3aW5kb3cgIT09IFwib2JqZWN0XCIpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJub3Qgc3VwcG9ydGVkIGVudmlyb25tZW50XCIpO1xuXHR9XG5cblx0cmV0dXJuIHdpbmRvdztcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBmZXRjaGVzIHRoZSBkb2N1bWVudCBvYmplY3RcbiAqXG4gKiBJbiBub2RlanMgdGhpcyBmdW5jdGlvbmFsaXR5IGNhbiBiZSBwZXJmb3JtZWQgd2l0aCBbanNkb21dKGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2pzZG9tKS5cbiAqXG4gKiBgYGBcbiAqIGltcG9ydCB7SlNET019IGZyb20gXCJqc2RvbVwiXG4gKiBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJvYmplY3RcIikge1xuICogICAgY29uc3Qge3dpbmRvd30gPSBuZXcgSlNET00oJycsIHtcbiAqICAgICAgICB1cmw6ICdodHRwOi8vZXhhbXBsZS5jb20vJyxcbiAqICAgICAgICBwcmV0ZW5kVG9CZVZpc3VhbDogdHJ1ZVxuICogICAgfSk7XG4gKlxuICogICAgW1xuICogICAgICAgICdzZWxmJyxcbiAqICAgICAgICAnZG9jdW1lbnQnLFxuICogICAgICAgICdEb2N1bWVudCcsXG4gKiAgICAgICAgJ05vZGUnLFxuICogICAgICAgICdFbGVtZW50JyxcbiAqICAgICAgICAnSFRNTEVsZW1lbnQnLFxuICogICAgICAgICdEb2N1bWVudEZyYWdtZW50JyxcbiAqICAgICAgICAnRE9NUGFyc2VyJyxcbiAqICAgICAgICAnWE1MU2VyaWFsaXplcicsXG4gKiAgICAgICAgJ05vZGVGaWx0ZXInLFxuICogICAgICAgICdJbnB1dEV2ZW50JyxcbiAqICAgICAgICAnQ3VzdG9tRXZlbnQnXG4gKiAgICBdLmZvckVhY2goa2V5ID0+IChnZXRHbG9iYWwoKVtrZXldID0gd2luZG93W2tleV0pKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEByZXR1cm4ge0RvY3VtZW50RnJhZ21lbnR9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjYuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEB0aHJvd3Mge0Vycm9yfSBub3Qgc3VwcG9ydGVkIGVudmlyb25tZW50XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuICovXG5mdW5jdGlvbiBnZXREb2N1bWVudEZyYWdtZW50RnJvbVN0cmluZyhodG1sKSB7XG5cdHZhbGlkYXRlU3RyaW5nKGh0bWwpO1xuXG5cdGNvbnN0IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcblx0Y29uc3QgdGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGVtcGxhdGVcIik7XG5cdHRlbXBsYXRlLmlubmVySFRNTCA9IGh0bWw7XG5cblx0cmV0dXJuIHRlbXBsYXRlLmNvbnRlbnQ7XG59XG5cbi8qKlxuICogUmVjdXJzaXZlbHkgc2VhcmNoZXMgdXB3YXJkcyBmcm9tIGEgZ2l2ZW4gZWxlbWVudCB0byBmaW5kIGFuIGFuY2VzdG9yIGVsZW1lbnRcbiAqIHdpdGggYSBzcGVjaWZpZWQgSUQsIGNvbnNpZGVyaW5nIGJvdGggbm9ybWFsIERPTSBhbmQgc2hhZG93IERPTS5cbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fFNoYWRvd1Jvb3R9IGVsZW1lbnQgLSBUaGUgc3RhcnRpbmcgZWxlbWVudCBvciBzaGFkb3cgcm9vdCB0byBzZWFyY2ggZnJvbS5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0YXJnZXRJZCAtIFRoZSBJRCBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQgdG8gZmluZC5cbiAqIEByZXR1cm4ge0hUTUxFbGVtZW50fG51bGx9IC0gVGhlIGFuY2VzdG9yIGVsZW1lbnQgd2l0aCB0aGUgc3BlY2lmaWVkIElELCBvciBudWxsIGlmIG5vdCBmb3VuZC5cbiAqIEBzaW5jZSAzLjI5LjBcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuZnVuY3Rpb24gZmluZEVsZW1lbnRXaXRoSWRVcHdhcmRzKGVsZW1lbnQsIHRhcmdldElkKSB7XG5cdGlmICghZWxlbWVudCkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Ly8gQ2hlY2sgaWYgdGhlIGN1cnJlbnQgZWxlbWVudCBoYXMgdGhlIHRhcmdldCBJRFxuXHRpZiAoZWxlbWVudC5pZCA9PT0gdGFyZ2V0SWQpIHtcblx0XHRyZXR1cm4gZWxlbWVudDtcblx0fVxuXG5cdC8vIFNlYXJjaCB3aXRoaW4gdGhlIGN1cnJlbnQgZWxlbWVudCdzIHNoYWRvdyByb290LCBpZiBpdCBleGlzdHNcblx0aWYgKGVsZW1lbnQuc2hhZG93Um9vdCkge1xuXHRcdGNvbnN0IHRhcmdldCA9IGVsZW1lbnQuc2hhZG93Um9vdC5nZXRFbGVtZW50QnlJZCh0YXJnZXRJZCk7XG5cdFx0aWYgKHRhcmdldCkge1xuXHRcdFx0cmV0dXJuIHRhcmdldDtcblx0XHR9XG5cdH1cblxuXHQvLyBJZiB0aGUgY3VycmVudCBlbGVtZW50IGlzIHRoZSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIHNlYXJjaCB3aXRoaW4gdGhlIG1haW4gZG9jdW1lbnRcblx0aWYgKGVsZW1lbnQgPT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCB8fCBlbGVtZW50ID09PSBkb2N1bWVudCkge1xuXHRcdGNvbnN0IHRhcmdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhcmdldElkKTtcblx0XHRpZiAodGFyZ2V0KSB7XG5cdFx0XHRyZXR1cm4gdGFyZ2V0O1xuXHRcdH1cblx0fVxuXG5cdC8vIElmIHRoZSBjdXJyZW50IGVsZW1lbnQgaXMgaW5zaWRlIGEgc2hhZG93IHJvb3QsIHNlYXJjaCBpdHMgaG9zdCdzIGFuY2VzdG9yc1xuXHRjb25zdCByb290Tm9kZSA9IGVsZW1lbnQuZ2V0Um9vdE5vZGUoKTtcblx0aWYgKHJvb3ROb2RlICYmIHJvb3ROb2RlIGluc3RhbmNlb2YgU2hhZG93Um9vdCkge1xuXHRcdHJldHVybiBmaW5kRWxlbWVudFdpdGhJZFVwd2FyZHMocm9vdE5vZGUuaG9zdCwgdGFyZ2V0SWQpO1xuXHR9XG5cblx0Ly8gT3RoZXJ3aXNlLCBzZWFyY2ggdGhlIGN1cnJlbnQgZWxlbWVudCdzIHBhcmVudFxuXHRyZXR1cm4gZmluZEVsZW1lbnRXaXRoSWRVcHdhcmRzKGVsZW1lbnQucGFyZW50RWxlbWVudCwgdGFyZ2V0SWQpO1xufVxuXG4vKipcbiAqIFJlY3Vyc2l2ZWx5IHNlYXJjaGVzIHVwd2FyZHMgZnJvbSBhIGdpdmVuIGVsZW1lbnQgdG8gZmluZCBhbiBhbmNlc3RvciBlbGVtZW50XG4gKiB3aXRoIGEgc3BlY2lmaWVkIHNlbGVjdG9yLCBjb25zaWRlcmluZyBib3RoIG5vcm1hbCBET00gYW5kIHNoYWRvdyBET00uXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VmdWwgZm9yIGZpbmRpbmcgYSBwYXJlbnQgZWxlbWVudCB3aXRoIGEgc3BlY2lmaWMgY2xhc3MuXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudHxTaGFkb3dSb290fSBlbGVtZW50IC0gVGhlIHN0YXJ0aW5nIGVsZW1lbnQgb3Igc2hhZG93IHJvb3QgdG8gc2VhcmNoIGZyb20uXG4gKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBUaGUgc2VsZWN0b3Igb2YgdGhlIHRhcmdldCBlbGVtZW50IHRvIGZpbmQuXG4gKiBAcmV0dXJuIHtIVE1MRWxlbWVudHxudWxsfSAtIFRoZSBhbmNlc3RvciBlbGVtZW50IHdpdGggdGhlIHNwZWNpZmllZCBzZWxlY3Rvciwgb3IgbnVsbCBpZiBub3QgZm91bmQuXG4gKiBAc2luY2UgMy41NS4wXG4gKi9cbmZ1bmN0aW9uIGZpbmRFbGVtZW50V2l0aFNlbGVjdG9yVXB3YXJkcyhlbGVtZW50LCBzZWxlY3Rvcikge1xuXHRpZiAoIWVsZW1lbnQgfHwgIXNlbGVjdG9yKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvLyBTZWFyY2ggd2l0aGluIHRoZSBjdXJyZW50IGVsZW1lbnQncyBzaGFkb3cgcm9vdCwgaWYgaXQgZXhpc3RzXG5cdGlmIChlbGVtZW50LnNoYWRvd1Jvb3QpIHtcblx0XHRjb25zdCB0YXJnZXQgPSBlbGVtZW50LnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG5cdFx0aWYgKHRhcmdldCkge1xuXHRcdFx0cmV0dXJuIHRhcmdldDtcblx0XHR9XG5cdH1cblxuXHRpZiAoZWxlbWVudCA9PT0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG5cdFx0Y29uc3QgdGFyZ2V0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG5cdFx0aWYgKHRhcmdldCkge1xuXHRcdFx0cmV0dXJuIHRhcmdldDtcblx0XHR9XG5cdH1cblxuXHQvLyBJZiB0aGUgY3VycmVudCBlbGVtZW50IGlzIGluc2lkZSBhIHNoYWRvdyByb290LCBzZWFyY2ggaXRzIGhvc3QncyBhbmNlc3RvcnNcblx0Y29uc3Qgcm9vdE5vZGUgPSBlbGVtZW50LmdldFJvb3ROb2RlKCk7XG5cdGlmIChyb290Tm9kZSAmJiByb290Tm9kZSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpIHtcblx0XHRyZXR1cm4gZmluZEVsZW1lbnRXaXRoU2VsZWN0b3JVcHdhcmRzKHJvb3ROb2RlLmhvc3QsIHNlbGVjdG9yKTtcblx0fVxuXG5cdC8vIE90aGVyd2lzZSwgc2VhcmNoIHRoZSBjdXJyZW50IGVsZW1lbnQncyBwYXJlbnRcblx0cmV0dXJuIGZpbmRFbGVtZW50V2l0aFNlbGVjdG9yVXB3YXJkcyhlbGVtZW50LnBhcmVudEVsZW1lbnQsIHNlbGVjdG9yKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybiB7SFRNTEVsZW1lbnR8bnVsbH1cbiAqL1xuZnVuY3Rpb24gdHJhdmVyc2VTaGFkb3dSb290cyhlbGVtZW50KSB7XG5cdGxldCBjdXJyZW50Um9vdCA9IGVsZW1lbnQuc2hhZG93Um9vdDtcblx0bGV0IGN1cnJlbnRQYXJlbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XG5cblx0d2hpbGUgKFxuXHRcdGN1cnJlbnRQYXJlbnQgJiZcblx0XHRjdXJyZW50UGFyZW50Lm5vZGVUeXBlICE9PSBOb2RlLkRPQ1VNRU5UX05PREUgJiZcblx0XHRjdXJyZW50UGFyZW50Lm5vZGVUeXBlICE9PSBOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREVcblx0KSB7XG5cdFx0aWYgKGN1cnJlbnRSb290ICYmIGN1cnJlbnRSb290LnBhcmVudE5vZGUpIHtcblx0XHRcdGN1cnJlbnRQYXJlbnQgPSBjdXJyZW50Um9vdC5wYXJlbnROb2RlO1xuXHRcdFx0Y3VycmVudFJvb3QgPSBjdXJyZW50UGFyZW50LnNoYWRvd1Jvb3Q7XG5cdFx0fSBlbHNlIGlmIChjdXJyZW50UGFyZW50LnBhcmVudE5vZGUpIHtcblx0XHRcdGN1cnJlbnRQYXJlbnQgPSBjdXJyZW50UGFyZW50LnBhcmVudE5vZGU7XG5cdFx0XHRjdXJyZW50Um9vdCA9IG51bGw7XG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdGN1cnJlbnRSb290ICYmXG5cdFx0XHRjdXJyZW50Um9vdC5ob3N0ICYmXG5cdFx0XHRjdXJyZW50Um9vdC5ob3N0Lm5vZGVUeXBlID09PSBOb2RlLkRPQ1VNRU5UX05PREVcblx0XHQpIHtcblx0XHRcdGN1cnJlbnRQYXJlbnQgPSBjdXJyZW50Um9vdC5ob3N0O1xuXHRcdFx0Y3VycmVudFJvb3QgPSBudWxsO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjdXJyZW50UGFyZW50ID0gbnVsbDtcblx0XHRcdGN1cnJlbnRSb290ID0gbnVsbDtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gY3VycmVudFBhcmVudDtcbn1cblxuLyoqXG4gKiBSZWN1cnNpdmVseSBzZWFyY2hlcyB1cHdhcmRzIGZyb20gYSBnaXZlbiBlbGVtZW50IHRvIGZpbmQgYW4gYW5jZXN0b3IgZWxlbWVudFxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm4geyp9XG4gKiBAdGhyb3dzIHtFcnJvcn0gSW52YWxpZCBhcmd1bWVudC4gRXhwZWN0ZWQgYW4gSFRNTEVsZW1lbnQuXG4gKiBAc2luY2UgMy4zNi4wXG4gKi9cbmZ1bmN0aW9uIGdldENvbnRhaW5pbmdEb2N1bWVudChlbGVtZW50KSB7XG5cdGlmIChcblx0XHQhZWxlbWVudCB8fFxuXHRcdCEoXG5cdFx0XHRlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgfHxcblx0XHRcdGVsZW1lbnQgaW5zdGFuY2VvZiBlbGVtZW50Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuSFRNTEVsZW1lbnRcblx0XHQpXG5cdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYXJndW1lbnQuIEV4cGVjdGVkIGFuIEhUTUxFbGVtZW50LlwiKTtcblx0fVxuXG5cdHJldHVybiB0cmF2ZXJzZVNoYWRvd1Jvb3RzKGVsZW1lbnQpIHx8IG51bGw7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGxpc3Qgb2YgYWxsIHJlZ2lzdGVyZWQgY3VzdG9tIGVsZW1lbnRzIGluIHRoZSBjdXJyZW50IGRvY3VtZW50LlxuICpcbiAqIEByZXR1cm4ge3N0cmluZ1tdfVxuICogQHNpbmNlIDQuMC4wXG4gKiBAcmV0dXJuIHtzdHJpbmdbXX1cbiAqL1xuZnVuY3Rpb24gZ2V0UmVnaXN0ZXJlZEN1c3RvbUVsZW1lbnRzKCkge1xuXHRjb25zdCBjdXN0b21FbGVtZW50VGFncyA9IEFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIipcIikpXG5cdFx0Lm1hcCgodGFnKSA9PiB0YWcudGFnTmFtZS50b0xvd2VyQ2FzZSgpKVxuXHRcdC5maWx0ZXIoKHRhZ05hbWUpID0+IHRhZ05hbWUuaW5jbHVkZXMoXCItXCIpICYmIGN1c3RvbUVsZW1lbnRzLmdldCh0YWdOYW1lKSk7XG5cblx0cmV0dXJuIEFycmF5LmZyb20obmV3IFNldChjdXN0b21FbGVtZW50VGFncykpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGdldEdsb2JhbCB9IGZyb20gXCIuLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyBpc0FycmF5LCBpc0Z1bmN0aW9uLCBpc09iamVjdCwgaXNQcmltaXRpdmUgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyB0eXBlT2YgfSBmcm9tIFwiLi4vdHlwZXMvdHlwZW9mLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVPYmplY3QgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IGNsb25lIH07XG5cbi8qKlxuICogV2l0aCB0aGlzIGZ1bmN0aW9uLCBvYmplY3RzIGNhbiBiZSBjbG9uZWQuXG4gKiBUaGUgZW50aXJlIG9iamVjdCB0cmVlIGlzIHJ1biB0aHJvdWdoLlxuICpcbiAqIFByb3h5LCBFbGVtZW50LCBIVE1MRG9jdW1lbnQgYW5kIERvY3VtZW50RnJhZ21lbnQgaW5zdGFuY2VzIGFyZSBub3QgY2xvbmVkLlxuICogR2xvYmFsIG9iamVjdHMgc3VjaCBhcyB3aW5kb3dzIGFyZSBhbHNvIG5vdCBjbG9uZWQsXG4gKlxuICogSWYgYW4gb2JqZWN0IGhhcyBhIG1ldGhvZCBgZ2V0Q2xvbmUoKWAsIHRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gY3JlYXRlIHRoZSBjbG9uZS5cbiAqXG4gKiBAcGFyYW0geyp9IG9iaiBvYmplY3QgdG8gYmUgY2xvbmVkXG4gKiBAcmV0dXJuIHsqfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5hYmxlIHRvIGNsb25lIG9iaiEgaXRzIHR5cGUgaXNuJ3Qgc3VwcG9ydGVkLlxuICovXG5mdW5jdGlvbiBjbG9uZShvYmopIHtcblx0Ly8gdHlwZW9mIG51bGwgcmVzdWx0cyBpbiAnb2JqZWN0Jy4gIGh0dHBzOi8vMmFsaXR5LmNvbS8yMDEzLzEwL3R5cGVvZi1udWxsLmh0bWxcblx0aWYgKG51bGwgPT09IG9iaikge1xuXHRcdHJldHVybiBvYmo7XG5cdH1cblxuXHQvLyBIYW5kbGUgdGhlIHR3byBzaW1wbGUgdHlwZXMsIG51bGwgYW5kIHVuZGVmaW5lZFxuXHRpZiAoaXNQcmltaXRpdmUob2JqKSkge1xuXHRcdHJldHVybiBvYmo7XG5cdH1cblxuXHQvLyBIYW5kbGUgdGhlIHR3byBzaW1wbGUgdHlwZXMsIG51bGwgYW5kIHVuZGVmaW5lZFxuXHRpZiAoaXNGdW5jdGlvbihvYmopKSB7XG5cdFx0cmV0dXJuIG9iajtcblx0fVxuXG5cdC8vIEhhbmRsZSBBcnJheVxuXHRpZiAoaXNBcnJheShvYmopKSB7XG5cdFx0Y29uc3QgY29weSA9IFtdO1xuXHRcdGZvciAobGV0IGkgPSAwLCBsZW4gPSBvYmoubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdGNvcHlbaV0gPSBjbG9uZShvYmpbaV0pO1xuXHRcdH1cblxuXHRcdHJldHVybiBjb3B5O1xuXHR9XG5cblx0aWYgKGlzT2JqZWN0KG9iaikpIHtcblx0XHQvLyBIYW5kbGUgRGF0ZVxuXHRcdGlmIChvYmogaW5zdGFuY2VvZiBEYXRlKSB7XG5cdFx0XHRjb25zdCBjb3B5ID0gbmV3IERhdGUoKTtcblx0XHRcdGNvcHkuc2V0VGltZShvYmouZ2V0VGltZSgpKTtcblx0XHRcdHJldHVybiBjb3B5O1xuXHRcdH1cblxuXHRcdC8qKiBEbyBub3QgY2xvbmUgRE9NIG5vZGVzICovXG5cdFx0aWYgKHR5cGVvZiBFbGVtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIG9iaiBpbnN0YW5jZW9mIEVsZW1lbnQpIHJldHVybiBvYmo7XG5cdFx0aWYgKHR5cGVvZiBIVE1MRG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgb2JqIGluc3RhbmNlb2YgSFRNTERvY3VtZW50KVxuXHRcdFx0cmV0dXJuIG9iajtcblx0XHRpZiAoXG5cdFx0XHR0eXBlb2YgRG9jdW1lbnRGcmFnbWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHRcdFx0b2JqIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudFxuXHRcdClcblx0XHRcdHJldHVybiBvYmo7XG5cblx0XHQvKiogRG8gbm90IGNsb25lIGdsb2JhbCBvYmplY3RzICovXG5cdFx0aWYgKG9iaiA9PT0gZ2V0R2xvYmFsKCkpIHJldHVybiBvYmo7XG5cdFx0aWYgKHR5cGVvZiBnbG9iYWxDb250ZXh0ICE9PSBcInVuZGVmaW5lZFwiICYmIG9iaiA9PT0gZ2xvYmFsQ29udGV4dClcblx0XHRcdHJldHVybiBvYmo7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgb2JqID09PSB3aW5kb3cpIHJldHVybiBvYmo7XG5cdFx0aWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvYmogPT09IGRvY3VtZW50KSByZXR1cm4gb2JqO1xuXHRcdGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiICYmIG9iaiA9PT0gbmF2aWdhdG9yKSByZXR1cm4gb2JqO1xuXHRcdGlmICh0eXBlb2YgSlNPTiAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvYmogPT09IEpTT04pIHJldHVybiBvYmo7XG5cblx0XHQvLyBIYW5kbGUgUHJveHktT2JqZWN0XG5cdFx0dHJ5IHtcblx0XHRcdC8vIHRyeS9jYXRjaCBiZWNhdXNlIHBvc3NpYmxlOiBUeXBlRXJyb3I6IEZ1bmN0aW9uIGhhcyBub24tb2JqZWN0IHByb3RvdHlwZSAndW5kZWZpbmVkJyBpbiBpbnN0YW5jZW9mIGNoZWNrXG5cdFx0XHRpZiAob2JqIGluc3RhbmNlb2YgUHJveHkpIHtcblx0XHRcdFx0cmV0dXJuIG9iajtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlKSB7fVxuXG5cdFx0cmV0dXJuIGNsb25lT2JqZWN0KG9iaik7XG5cdH1cblxuXHR0aHJvdyBuZXcgRXJyb3IoXCJ1bmFibGUgdG8gY2xvbmUgb2JqISBpdHMgdHlwZSBpc24ndCBzdXBwb3J0ZWQuXCIpO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gb2JqXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjbG9uZU9iamVjdChvYmopIHtcblx0dmFsaWRhdGVPYmplY3Qob2JqKTtcblxuXHRjb25zdCBma3QgPSBvYmo/LltcImNvbnN0cnVjdG9yXCJdO1xuXG5cdC8qKiBPYmplY3QgaGFzIGNsb25lIG1ldGhvZCAqL1xuXHRpZiAodHlwZU9mKGZrdCkgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdGNvbnN0IHByb3RvdHlwZSA9IGZrdD8ucHJvdG90eXBlO1xuXHRcdGlmICh0eXBlb2YgcHJvdG90eXBlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdHByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eShcImdldENsb25lXCIpICYmXG5cdFx0XHRcdHR5cGVPZihvYmouZ2V0Q2xvbmUpID09PSBcImZ1bmN0aW9uXCJcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gb2JqLmdldENsb25lKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0bGV0IGNvcHkgPSB7fTtcblx0aWYgKFxuXHRcdHR5cGVvZiBvYmouY29uc3RydWN0b3IgPT09IFwiZnVuY3Rpb25cIiAmJlxuXHRcdHR5cGVvZiBvYmouY29uc3RydWN0b3IuY2FsbCA9PT0gXCJmdW5jdGlvblwiXG5cdCkge1xuXHRcdGNvcHkgPSBuZXcgb2JqLmNvbnN0cnVjdG9yKCk7XG5cdH1cblxuXHRmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcblx0XHRpZiAoIW9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRpZiAoaXNQcmltaXRpdmUob2JqW2tleV0pKSB7XG5cdFx0XHRjb3B5W2tleV0gPSBvYmpba2V5XTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGNvcHlba2V5XSA9IGNsb25lKG9ialtrZXldKTtcblx0fVxuXG5cdHJldHVybiBjb3B5O1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgY2xvbmUgfSBmcm9tIFwiLi4vdXRpbC9jbG9uZS5tanNcIjtcblxuZXhwb3J0IHsgTG9jYWxlLCBwYXJzZUxvY2FsZSB9O1xuXG4vKipcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHByb3BlcnRpZXNTeW1ib2wgPSBTeW1ib2woXCJwcm9wZXJ0aWVzXCIpO1xuXG4vKipcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGxvY2FsZVN0cmluZ1N5bWJvbCA9IFN5bWJvbChcImxvY2FsZVN0cmluZ1wiKTtcblxuLyoqXG4gKiBUaGUgTG9jYWxlIGNsYXNzIGlzIGEgYmFzZSBjbGFzcyBmb3IgdGhlIGxhbmd1YWdlIGNsYXNzZXMuXG4gKlxuICogUkZDXG4gKlxuICogYGBgXG4gKiBBIExhbmd1YWdlLVRhZyBjb25zaXN0cyBvZjpcbiAqIGxhbmd0YWcgICAgICAgICAgICAgICAgICAgICAgICAgICA7IGdlbmVyYXRlZCB0YWdcbiAqICAgICAgICAgICAtb3ItIHByaXZhdGUtdXNlICAgICAgICA7IGEgcHJpdmF0ZSB1c2UgdGFnXG4gKlxuICogbGFuZ3RhZyAgICAgICA9IChsYW5ndWFnZVxuICogICAgICAgICAgICAgICAgICAgIFtcIi1cIiBzY3JpcHRdXG4gKiAgICAgICAgICAgICAgICAgICAgW1wiLVwiIHJlZ2lvbl1cbiAqICAgICAgICAgICAgICAgICAgICAqKFwiLVwiIHZhcmlhbnQpXG4gKiAgICAgICAgICAgICAgICAgICAgKihcIi1cIiBleHRlbnNpb24pXG4gKiAgICAgICAgICAgICAgICAgICAgW1wiLVwiIHByaXZhdGV1c2VdKVxuICpcbiAqIGxhbmd1YWdlICAgICAgPSBcImVuXCIsIFwiYWxlXCIsIG9yIGEgcmVnaXN0ZXJlZCB2YWx1ZVxuICpcbiAqIHNjcmlwdCAgICAgICAgPSBcIkxhdG5cIiwgXCJDeXJsXCIsIFwiSGFudFwiIElTTyAxNTkyNCBjb2Rlc1xuICpcbiAqIHJlZ2lvbiAgICAgICAgPSBcIlVTXCIsIFwiQ1NcIiwgXCJGUlwiIElTTyAzMTY2IGNvZGVzXG4gKiAgICAgICAgICAgICAgICAgXCI0MTlcIiwgXCIwMTlcIiwgIG9yIFVOIE0uNDkgY29kZXNcbiAqXG4gKiB2YXJpYW50ICAgICAgID0gXCJyb3phalwiLCBcIm5lZGlzXCIsIFwiMTk5NlwiLCBtdWx0aXBsZSBzdWJ0YWdzIGNhbiBiZSB1c2VkIGluIGEgdGFnXG4gKlxuICogZXh0ZW5zaW9uICAgICA9IHNpbmdsZSBsZXR0ZXIgZm9sbG93ZWQgYnkgYWRkaXRpb25hbCBzdWJ0YWdzOyBtb3JlIHRoYW4gb25lIGV4dGVuc2lvblxuICogICAgICAgICAgICAgICAgIG1heSBiZSB1c2VkIGluIGEgbGFuZ3VhZ2UgdGFnXG4gKlxuICogcHJpdmF0ZS11c2UgICA9IFwieC1cIiBmb2xsb3dlZCBieSBhZGRpdGlvbmFsIHN1YnRhZ3MsIGFzIG1hbnkgYXMgYXJlIHJlcXVpcmVkXG4gKiAgICAgICAgICAgICAgICAgTm90ZSB0aGF0IHRoZXNlIGNhbiBzdGFydCBhIHRhZyBvciBhcHBlYXIgYXQgdGhlIGVuZCAoYnV0IG5vdFxuICogICAgICAgICAgICAgICAgIGluIHRoZSBtaWRkbGUpXG4gKiBgYGBcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjEzLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMzA2NlxuICovXG5jbGFzcyBMb2NhbGUgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBsYW5ndWFnZVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gW3JlZ2lvbl1cblx0ICogQHBhcmFtIHtzdHJpbmd9IFtzY3JpcHRdXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbdmFyaWFudHNdXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbZXh0bGFuZ11cblx0ICogQHBhcmFtIHtzdHJpbmd9IFtwcml2YXRlVXNlXVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgbG9jYWxlXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihsYW5ndWFnZSwgcmVnaW9uLCBzY3JpcHQsIHZhcmlhbnRzLCBleHRsYW5nLCBwcml2YXRlVXNlKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXNbcHJvcGVydGllc1N5bWJvbF0gPSB7XG5cdFx0XHRsYW5ndWFnZTogbGFuZ3VhZ2UgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHZhbGlkYXRlU3RyaW5nKGxhbmd1YWdlKSxcblx0XHRcdHNjcmlwdDogc2NyaXB0ID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB2YWxpZGF0ZVN0cmluZyhzY3JpcHQpLFxuXHRcdFx0cmVnaW9uOiByZWdpb24gPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHZhbGlkYXRlU3RyaW5nKHJlZ2lvbiksXG5cdFx0XHR2YXJpYW50czogdmFyaWFudHMgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHZhbGlkYXRlU3RyaW5nKHZhcmlhbnRzKSxcblx0XHRcdGV4dGxhbmc6IGV4dGxhbmcgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHZhbGlkYXRlU3RyaW5nKGV4dGxhbmcpLFxuXHRcdFx0cHJpdmF0ZVVzZTpcblx0XHRcdFx0cHJpdmF0ZVVzZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogdmFsaWRhdGVTdHJpbmcocHJpdmF0ZVVzZSksXG5cdFx0fTtcblxuXHRcdGNvbnN0IHMgPSBbXTtcblx0XHRpZiAobGFuZ3VhZ2UgIT09IHVuZGVmaW5lZCkgcy5wdXNoKGxhbmd1YWdlKTtcblx0XHRpZiAoc2NyaXB0ICE9PSB1bmRlZmluZWQpIHMucHVzaChzY3JpcHQpO1xuXHRcdGlmIChyZWdpb24gIT09IHVuZGVmaW5lZCkgcy5wdXNoKHJlZ2lvbik7XG5cdFx0aWYgKHZhcmlhbnRzICE9PSB1bmRlZmluZWQpIHMucHVzaCh2YXJpYW50cyk7XG5cdFx0aWYgKGV4dGxhbmcgIT09IHVuZGVmaW5lZCkgcy5wdXNoKGV4dGxhbmcpO1xuXHRcdGlmIChwcml2YXRlVXNlICE9PSB1bmRlZmluZWQpIHMucHVzaChwcml2YXRlVXNlKTtcblxuXHRcdGlmIChzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgbG9jYWxlXCIpO1xuXHRcdH1cblxuXHRcdHRoaXNbbG9jYWxlU3RyaW5nU3ltYm9sXSA9IHMuam9pbihcIi1cIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDMuMjcuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9pMThuL2xvY2FsZUBAaW5zdGFuY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0Z2V0IGxvY2FsZVN0cmluZygpIHtcblx0XHRyZXR1cm4gdGhpc1tsb2NhbGVTdHJpbmdTeW1ib2xdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ3x1bmRlZmluZWR9XG5cdCAqL1xuXHRnZXQgbGFuZ3VhZ2UoKSB7XG5cdFx0cmV0dXJuIHRoaXNbcHJvcGVydGllc1N5bWJvbF0ubGFuZ3VhZ2U7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfHVuZGVmaW5lZH1cblx0ICovXG5cdGdldCByZWdpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXNbcHJvcGVydGllc1N5bWJvbF0ucmVnaW9uO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ3x1bmRlZmluZWR9XG5cdCAqL1xuXHRnZXQgc2NyaXB0KCkge1xuXHRcdHJldHVybiB0aGlzW3Byb3BlcnRpZXNTeW1ib2xdLnNjcmlwdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd8dW5kZWZpbmVkfVxuXHQgKi9cblx0Z2V0IHZhcmlhbnRzKCkge1xuXHRcdHJldHVybiB0aGlzW3Byb3BlcnRpZXNTeW1ib2xdLnZhcmlhbnRzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ3x1bmRlZmluZWR9XG5cdCAqL1xuXHRnZXQgZXh0bGFuZygpIHtcblx0XHRyZXR1cm4gdGhpc1twcm9wZXJ0aWVzU3ltYm9sXS5leHRsYW5nO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ3x1bmRlZmluZWR9XG5cdCAqL1xuXHRnZXQgcHJpdmF0ZVVzZSgpIHtcblx0XHRyZXR1cm4gdGhpc1twcm9wZXJ0aWVzU3ltYm9sXS5wcml2YXRlVmFsdWU7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0dG9TdHJpbmcoKSB7XG5cdFx0cmV0dXJuIGAke3RoaXMubG9jYWxlU3RyaW5nfWA7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIHN0cnVjdHVyZSBoYXMgdGhlIGZvbGxvd2luZzogbGFuZ3VhZ2UsIHNjcmlwdCwgcmVnaW9uLCB2YXJpYW50cywgZXh0bGFuZywgcHJpdmF0ZVVzZVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkkxOG4uTG9jYWxlTWFwfVxuXHQgKi9cblx0Z2V0TWFwKCkge1xuXHRcdHJldHVybiBjbG9uZSh0aGlzW3Byb3BlcnRpZXNTeW1ib2xdKTtcblx0fVxufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IExvY2FsZU1hcFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGxhbmd1YWdlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc2NyaXB0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gcmVnaW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdmFyaWFudHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBleHRsYW5nXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcHJpdmF0ZVVzZVxuICovXG5cbi8qKlxuICogUGFyc2UgbG9jYWwgYWNjb3JkaW5nIHRvIHJmYzQ2NDYgc3RhbmRhcmRcbiAqXG4gKiBMaW1pdGF0aW9uczogVGhlIHJlZ2V4IGNhbm5vdCBoYW5kbGUgbXVsdGlwbGUgdmFyaWFudHMgb3IgcHJpdmF0ZS5cbiAqXG4gKiBZb3UgY2FuIGNhbGwgdGhlIG1ldGhvZCB2aWEgdGhpcyBmdW5jdGlvbiBpbmRpdmlkdWFsbHk6XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IHtjcmVhdGVMb2NhbGV9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL2kxOG4vbG9jYWxlLm1qcyc7XG4gKiBjcmVhdGVMb2NhbGUoKVxuICogYGBgXG4gKlxuICogUkZDXG4gKlxuICogYGBgXG4gKiAgIFRoZSBzeW50YXggb2YgdGhlIGxhbmd1YWdlIHRhZyBpbiBBQk5GIFtSRkM0MjM0XSBpczpcbiAqXG4gKiAgIExhbmd1YWdlLVRhZyAgPSBsYW5ndGFnXG4gKiAgICAgICAgICAgICAgICAgLyBwcml2YXRldXNlICAgICAgICAgICAgIDsgcHJpdmF0ZSB1c2UgdGFnXG4gKiAgICAgICAgICAgICAgICAgLyBncmFuZGZhdGhlcmVkICAgICAgICAgIDsgZ3JhbmRmYXRoZXJlZCByZWdpc3RyYXRpb25zXG4gKlxuICogICBsYW5ndGFnICAgICAgID0gKGxhbmd1YWdlXG4gKiAgICAgICAgICAgICAgICAgICAgW1wiLVwiIHNjcmlwdF1cbiAqICAgICAgICAgICAgICAgICAgICBbXCItXCIgcmVnaW9uXVxuICogICAgICAgICAgICAgICAgICAgICooXCItXCIgdmFyaWFudClcbiAqICAgICAgICAgICAgICAgICAgICAqKFwiLVwiIGV4dGVuc2lvbilcbiAqICAgICAgICAgICAgICAgICAgICBbXCItXCIgcHJpdmF0ZXVzZV0pXG4gKlxuICogICBsYW5ndWFnZSAgICAgID0gKDIqM0FMUEhBIFsgZXh0bGFuZyBdKSA7IHNob3J0ZXN0IElTTyA2MzkgY29kZVxuICogICAgICAgICAgICAgICAgIC8gNEFMUEhBICAgICAgICAgICAgICAgICA7IHJlc2VydmVkIGZvciBmdXR1cmUgdXNlXG4gKiAgICAgICAgICAgICAgICAgLyA1KjhBTFBIQSAgICAgICAgICAgICAgIDsgcmVnaXN0ZXJlZCBsYW5ndWFnZSBzdWJ0YWdcbiAqXG4gKiAgIGV4dGxhbmcgICAgICAgPSAqMyhcIi1cIiAzQUxQSEEpICAgICAgICAgOyByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZVxuICpcbiAqICAgc2NyaXB0ICAgICAgICA9IDRBTFBIQSAgICAgICAgICAgICAgICAgOyBJU08gMTU5MjQgY29kZVxuICpcbiAqICAgcmVnaW9uICAgICAgICA9IDJBTFBIQSAgICAgICAgICAgICAgICAgOyBJU08gMzE2NiBjb2RlXG4gKiAgICAgICAgICAgICAgICAgLyAzRElHSVQgICAgICAgICAgICAgICAgIDsgVU4gTS40OSBjb2RlXG4gKlxuICogICB2YXJpYW50ICAgICAgID0gNSo4YWxwaGFudW0gICAgICAgICAgICA7IHJlZ2lzdGVyZWQgdmFyaWFudHNcbiAqICAgICAgICAgICAgICAgICAvIChESUdJVCAzYWxwaGFudW0pXG4gKlxuICogICBleHRlbnNpb24gICAgID0gc2luZ2xldG9uIDEqKFwiLVwiICgyKjhhbHBoYW51bSkpXG4gKlxuICogICBzaW5nbGV0b24gICAgID0gJXg0MS01NyAvICV4NTktNUEgLyAleDYxLTc3IC8gJXg3OS03QSAvIERJR0lUXG4gKiAgICAgICAgICAgICAgICAgOyBcImFcIi1cIndcIiAvIFwieVwiLVwielwiIC8gXCJBXCItXCJXXCIgLyBcIllcIi1cIlpcIiAvIFwiMFwiLVwiOVwiXG4gKiAgICAgICAgICAgICAgICAgOyBTaW5nbGUgbGV0dGVyczogeC9YIGlzIHJlc2VydmVkIGZvciBwcml2YXRlIHVzZVxuICpcbiAqICAgcHJpdmF0ZXVzZSAgICA9IChcInhcIi9cIlhcIikgMSooXCItXCIgKDEqOGFscGhhbnVtKSlcbiAqXG4gKiAgIGdyYW5kZmF0aGVyZWQgPSAxKjNBTFBIQSAxKjIoXCItXCIgKDIqOGFscGhhbnVtKSlcbiAqICAgICAgICAgICAgICAgICAgIDsgZ3JhbmRmYXRoZXJlZCByZWdpc3RyYXRpb25cbiAqICAgICAgICAgICAgICAgICAgIDsgTm90ZTogaSBpcyB0aGUgb25seSBzaW5nbGV0b25cbiAqICAgICAgICAgICAgICAgICAgIDsgdGhhdCBzdGFydHMgYSBncmFuZGZhdGhlcmVkIHRhZ1xuICpcbiAqICAgYWxwaGFudW0gICAgICA9IChBTFBIQSAvIERJR0lUKSAgICAgICA7IGxldHRlcnMgYW5kIG51bWJlcnNcbiAqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIEZpZ3VyZSAxOiBMYW5ndWFnZSBUYWcgQUJORlxuICogYGBgXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGxvY2FsZVxuICogQHJldHVybiB7TG9jYWxlfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xNC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBsb2NhbGVcbiAqL1xuZnVuY3Rpb24gcGFyc2VMb2NhbGUobG9jYWxlKSB7XG5cdGxvY2FsZSA9IHZhbGlkYXRlU3RyaW5nKGxvY2FsZSkucmVwbGFjZSgvXy9nLCBcIi1cIik7XG5cblx0bGV0IGxhbmd1YWdlO1xuXHRsZXQgcmVnaW9uO1xuXHRsZXQgdmFyaWFudHM7XG5cdGxldCBwYXJ0cztcblx0bGV0IHNjcmlwdDtcblx0bGV0IGV4dGxhbmc7XG5cdGNvbnN0IHJlZ2V4UmVndWxhciA9XG5cdFx0XCIoYXJ0LWxvamJhbnxjZWwtZ2F1bGlzaHxuby1ib2t8bm8tbnlufHpoLWd1b3l1fHpoLWhha2thfHpoLW1pbnx6aC1taW4tbmFufHpoLXhpYW5nKVwiO1xuXHRjb25zdCByZWdleElycmVndWxhciA9XG5cdFx0XCIoZW4tR0Itb2VkfGktYW1pfGktYm5ufGktZGVmYXVsdHxpLWVub2NoaWFufGktaGFrfGkta2xpbmdvbnxpLWx1eHxpLW1pbmdvfGktbmF2YWpvfGktcHdufGktdGFvfGktdGF5fGktdHN1fHNnbi1CRS1GUnxzZ24tQkUtTkx8c2duLUNILURFKVwiO1xuXHRjb25zdCByZWdleEdyYW5kZmF0aGVyZWQgPSBgKCR7cmVnZXhJcnJlZ3VsYXJ9fCR7cmVnZXhSZWd1bGFyfSlgO1xuXHRjb25zdCByZWdleFByaXZhdGVVc2UgPSBcIih4KC1bQS1aYS16MC05XXsxLDh9KSspXCI7XG5cdGNvbnN0IHJlZ2V4U2luZ2xldG9uID0gXCJbMC05QS1XWS1aYS13eS16XVwiO1xuXHRjb25zdCByZWdleEV4dGVuc2lvbiA9IGAoJHtyZWdleFNpbmdsZXRvbn0oLVtBLVphLXowLTldezIsOH0pKylgO1xuXHRjb25zdCByZWdleFZhcmlhbnQgPSBcIihbQS1aYS16MC05XXs1LDh9fFswLTldW0EtWmEtejAtOV17M30pXCI7XG5cdGNvbnN0IHJlZ2V4UmVnaW9uID0gXCIoW0EtWmEtel17Mn18WzAtOV17M30pXCI7XG5cdGNvbnN0IHJlZ2V4U2NyaXB0ID0gXCIoW0EtWmEtel17NH0pXCI7XG5cdGNvbnN0IHJlZ2V4RXh0bGFuZyA9IFwiKFtBLVphLXpdezN9KC1bQS1aYS16XXszfSl7MCwyfSlcIjtcblx0Y29uc3QgcmVnZXhMYW5ndWFnZSA9IGAoKFtBLVphLXpdezIsM30oLSR7cmVnZXhFeHRsYW5nfSk/KXxbQS1aYS16XXs0fXxbQS1aYS16XXs1LDh9KWA7XG5cdGNvbnN0IHJlZ2V4TGFuZ3RhZyA9IGAoJHtyZWdleExhbmd1YWdlfSgtJHtyZWdleFNjcmlwdH0pPygtJHtyZWdleFJlZ2lvbn0pPygtJHtyZWdleFZhcmlhbnR9KSooLSR7cmVnZXhFeHRlbnNpb259KSooLSR7cmVnZXhQcml2YXRlVXNlfSk/KWA7XG5cdGNvbnN0IHJlZ2V4TGFuZ3VhZ2VUYWcgPSBgXigke3JlZ2V4R3JhbmRmYXRoZXJlZH18JHtyZWdleExhbmd0YWd9fCR7cmVnZXhQcml2YXRlVXNlfSkkYDtcblx0Y29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKHJlZ2V4TGFuZ3VhZ2VUYWcpO1xuXHRsZXQgbWF0Y2g7XG5cblx0aWYgKChtYXRjaCA9IHJlZ2V4LmV4ZWMobG9jYWxlKSkgIT09IG51bGwpIHtcblx0XHRpZiAobWF0Y2guaW5kZXggPT09IHJlZ2V4Lmxhc3RJbmRleCkge1xuXHRcdFx0cmVnZXgubGFzdEluZGV4Kys7XG5cdFx0fVxuXHR9XG5cblx0aWYgKG1hdGNoID09PSB1bmRlZmluZWQgfHwgbWF0Y2ggPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCBsb2NhbGVcIik7XG5cdH1cblxuXHRpZiAobWF0Y2hbNl0gIT09IHVuZGVmaW5lZCkge1xuXHRcdGxhbmd1YWdlID0gbWF0Y2hbNl07XG5cblx0XHRwYXJ0cyA9IGxhbmd1YWdlLnNwbGl0KFwiLVwiKTtcblx0XHRpZiAocGFydHMubGVuZ3RoID4gMSkge1xuXHRcdFx0bGFuZ3VhZ2UgPSBwYXJ0c1swXTtcblx0XHRcdGV4dGxhbmcgPSBwYXJ0c1sxXTtcblx0XHR9XG5cdH1cblxuXHRpZiAobWF0Y2hbMTRdICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZWdpb24gPSBtYXRjaFsxNF07XG5cdH1cblxuXHRpZiAobWF0Y2hbMTJdICE9PSB1bmRlZmluZWQpIHtcblx0XHRzY3JpcHQgPSBtYXRjaFsxMl07XG5cdH1cblxuXHRpZiAobWF0Y2hbMTZdICE9PSB1bmRlZmluZWQpIHtcblx0XHR2YXJpYW50cyA9IG1hdGNoWzE2XTtcblx0fVxuXG5cdHJldHVybiBuZXcgTG9jYWxlKGxhbmd1YWdlLCByZWdpb24sIHNjcmlwdCwgdmFyaWFudHMsIGV4dGxhbmcpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IHBhcnNlTG9jYWxlIH0gZnJvbSBcIi4uL2kxOG4vbG9jYWxlLm1qc1wiO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnQgfSBmcm9tIFwiLi91dGlsLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsT2JqZWN0IH0gZnJvbSBcIi4uL3R5cGVzL2dsb2JhbC5tanNcIjtcblxuZXhwb3J0IHsgZ2V0TG9jYWxlT2ZEb2N1bWVudCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBERUZBVUxUX0xBTkdVQUdFID0gXCJlblwiO1xuXG4vKipcbiAqIFdpdGggdGhpcyBmdW5jdGlvbiB5b3UgY2FuIHJlYWQgdGhlIGxhbmd1YWdlIHZlcnNpb24gc2V0IGJ5IHRoZSBkb2N1bWVudC5cbiAqIEZvciB0aGlzIHRoZSBhdHRyaWJ1dGUgYGxhbmdgIGluIHRoZSBodG1sIHRhZyBpcyByZWFkLiBJZiBubyBhdHRyaWJ1dGUgaXMgc2V0LCBgZW5gIGlzIHVzZWQgYXMgZGVmYXVsdC5cbiAqIEFsdGVybmF0aXZlbHksIHRoZSBsYW5ndWFnZSB2ZXJzaW9uIG9mIHRoZSBicm93c2VyIGlzIHVzZWQuXG4gKlxuICogYGBgaHRtbFxuICogPGh0bWwgbGFuZz1cImVuXCI+XG4gKiBgYGBcbiAqXG4gKiBZb3UgY2FuIGNhbGwgdGhlIGZ1bmN0aW9uIHZpYSBgZ2V0TG9jYWxlT2ZEb2N1bWVudCgpYC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjEzLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGxvY2FsZVxuICogQHN1bW1hcnkgVHJpZXMgdG8gZGV0ZXJtaW5lIHRoZSBsb2NhbGUgdXNlZFxuICovXG5mdW5jdGlvbiBnZXRMb2NhbGVPZkRvY3VtZW50KCkge1xuXHRjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cblx0Y29uc3QgaHRtbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpO1xuXHRpZiAoaHRtbCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIGh0bWwuaGFzQXR0cmlidXRlKFwibGFuZ1wiKSkge1xuXHRcdGNvbnN0IGxvY2FsZSA9IGh0bWwuZ2V0QXR0cmlidXRlKFwibGFuZ1wiKTtcblx0XHRpZiAobG9jYWxlKSB7XG5cdFx0XHRyZXR1cm4gbmV3IHBhcnNlTG9jYWxlKGxvY2FsZSk7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgbmF2aWdhdG9yTGFuZ3VhZ2UgPSBnZXROYXZpZ2F0b3JMYW5ndWFnZSgpO1xuXHRpZiAobmF2aWdhdG9yTGFuZ3VhZ2UpIHtcblx0XHRyZXR1cm4gcGFyc2VMb2NhbGUobmF2aWdhdG9yTGFuZ3VhZ2UpO1xuXHR9XG5cblx0cmV0dXJuIHBhcnNlTG9jYWxlKERFRkFVTFRfTEFOR1VBR0UpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd8dW5kZWZpbmVkfCp9XG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9OYXZpZ2F0b3IvbGFuZ3VhZ2VcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL05hdmlnYXRvci9sYW5ndWFnZXNcbiAqL1xuY29uc3QgZ2V0TmF2aWdhdG9yTGFuZ3VhZ2UgPSAoKSA9PiB7XG5cdGNvbnN0IG5hdmlnYXRvciA9IGdldEdsb2JhbE9iamVjdChcIm5hdmlnYXRvclwiKTtcblx0aWYgKG5hdmlnYXRvciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdGlmIChuYXZpZ2F0b3IuaGFzT3duUHJvcGVydHkoXCJsYW5ndWFnZVwiKSkge1xuXHRcdGNvbnN0IGxhbmd1YWdlID0gbmF2aWdhdG9yLmxhbmd1YWdlO1xuXHRcdGlmICh0eXBlb2YgbGFuZ3VhZ2UgPT09IFwic3RyaW5nXCIgJiYgbGFuZ3VhZ2UubGVuZ3RoID4gMCkge1xuXHRcdFx0cmV0dXJuIGxhbmd1YWdlO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IGxhbmd1YWdlcyA9IG5hdmlnYXRvcj8ubGFuZ3VhZ2VzO1xuXHRpZiAoQXJyYXkuaXNBcnJheShsYW5ndWFnZXMpICYmIGxhbmd1YWdlcy5sZW5ndGggPiAwKSB7XG5cdFx0cmV0dXJuIGxhbmd1YWdlc1swXTtcblx0fVxuXG5cdHJldHVybiB1bmRlZmluZWQ7XG59O1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgSUQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge01hcDxzdHJpbmcsIGludGVnZXI+fVxuICovXG5jb25zdCBpbnRlcm5hbENvdW50ZXIgPSBuZXcgTWFwKCk7XG5cbi8qKlxuICogV2l0aCB0aGUgaWQgY2xhc3MsIHNlcXVlbmNlcyBvZiBpZHMgY2FuIGJlIGNyZWF0ZWQuIGZvciB0aGlzIHB1cnBvc2UsIGFuIGludGVybmFsIGNvdW50ZXIgaXMgaW5jcmVtZW50ZWQgZm9yIGVhY2ggcHJlZml4LlxuICogdGh1cywgdGhlIGZpcnN0IGlkIHdpdGggdGhlIHByZWZpeCBgbXlpZGAgd2lsbCBiZSBgbXlpZDFgIGFuZCB0aGUgc2Vjb25kIGlkIGBteWlkMmAuXG4gKiBUaGUgaWRzIGFyZSB0aGUgc2FtZSBmb3IgZXZlcnkgY2FsbCwgZm9yIGV4YW1wbGUgb24gYSB3ZWIgcGFnZS5cbiAqXG4gKiBTbyB0aGUgaWRzIGNhbiBhbHNvIGJlIHVzZWQgZm9yIG5hdmlnYXRpb24uIHlvdSBoYXZlIHRvIHRha2UgY2FyZSB0aGF0IHRoZSBvcmRlciBzdGF5cyB0aGUgc2FtZS5cbiAqXG4gKiBBcyBvZiB2ZXJzaW9uIDEuNi4wIHRoZXJlIGlzIHRoZSBuZXcgUmFuZG9tSUQuIHRoaXMgSUQgY2xhc3MgaXMgY29udGludW91cyBmcm9tIG5vdyBvbi5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEF1dG9tYXRpYyBnZW5lcmF0aW9uIG9mIGlkc1xuICovXG5jbGFzcyBJRCBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICogY3JlYXRlIG5ldyBpZCB3aXRoIHByZWZpeFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4XG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihwcmVmaXgpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0aWYgKHByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRwcmVmaXggPSBcImlkXCI7XG5cdFx0fVxuXG5cdFx0dmFsaWRhdGVTdHJpbmcocHJlZml4KTtcblxuXHRcdGlmICghaW50ZXJuYWxDb3VudGVyLmhhcyhwcmVmaXgpKSB7XG5cdFx0XHRpbnRlcm5hbENvdW50ZXIuc2V0KHByZWZpeCwgMSk7XG5cdFx0fVxuXG5cdFx0bGV0IGNvdW50ID0gaW50ZXJuYWxDb3VudGVyLmdldChwcmVmaXgpO1xuXHRcdHRoaXMuaWQgPSBwcmVmaXggKyBjb3VudDtcblxuXHRcdGludGVybmFsQ291bnRlci5zZXQocHJlZml4LCArK2NvdW50KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHR0b1N0cmluZygpIHtcblx0XHRyZXR1cm4gdGhpcy5pZDtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IFBhdGhmaW5kZXIgfSBmcm9tIFwiLi4vZGF0YS9wYXRoZmluZGVyLm1qc1wiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZU9iamVjdCB9IGZyb20gXCIuL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBCYXNlV2l0aE9wdGlvbnMgfTtcblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBiYXNlIGNsYXNzIHdpdGggb3B0aW9ucyBmcm9tIHdoaWNoIHNvbWUgbW9uc3RlciBjbGFzc2VzIGFyZSBkZXJpdmVkLlxuICpcbiAqIFRoaXMgY2xhc3MgaXMgYWN0dWFsbHkgb25seSB1c2VkIGFzIGEgYmFzZSBjbGFzcy5cbiAqXG4gKiBDbGFzc2VzIHRoYXQgcmVxdWlyZSB0aGUgcG9zc2liaWxpdHkgb2Ygb3B0aW9ucyBjYW4gYmUgZGVyaXZlZCBkaXJlY3RseSBmcm9tIHRoaXMgY2xhc3MuXG4gKiBEZXJpdmVkIGNsYXNzZXMgYWxtb3N0IGFsd2F5cyBvdmVycmlkZSB0aGUgYGRlZmF1bHRgIGdldHRlciB3aXRoIHRoZWlyIG93biB2YWx1ZXMuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQGRlcHJlY2F0ZWQgc2luY2UgMy4xNS4wXG4gKi9cbmNsYXNzIEJhc2VXaXRoT3B0aW9ucyBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcblx0ICovXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0aWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0b3B0aW9ucyA9IHt9O1xuXHRcdH1cblxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0gZXh0ZW5kKHt9LCB0aGlzLmRlZmF1bHRzLCB2YWxpZGF0ZU9iamVjdChvcHRpb25zKSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBnZXR0ZXIgcHJvdmlkZXMgdGhlIG9wdGlvbnMuIERlcml2ZWQgY2xhc3NlcyBvdmVyd3JpdGVcblx0ICogdGhpcyBnZXR0ZXIgd2l0aCB0aGVpciBvd24gdmFsdWVzLiBJdCBpcyBhIGdvb2Qga2FybWEgdG8gYWx3YXlzIGluY2x1ZGVcblx0ICogdGhlIHZhbHVlcyBmcm9tIHRoZSBwYXJlbnQgY2xhc3MuXG5cdCAqXG5cdCAqIGBgYGphdmFzY3JpcHRcblx0ICogZ2V0IGRlZmF1bHRzKCkge1xuXHQgKiAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdCAqICAgICAgICAgbXlrZXk6IHRydWVcblx0ICogICAgIH0pO1xuXHQgKiB9XG5cdCAqXG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcmV0dXJuIHtvYmplY3R9XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cblx0LyoqXG5cdCAqIG5lc3RlZCBvcHRpb25zIGNhbiBiZSBzcGVjaWZpZWQgYnkgcGF0aCBgYS5iLmNgXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG5cdCAqIEBwYXJhbSB7Kn0gZGVmYXVsdFZhbHVlXG5cdCAqIEByZXR1cm4geyp9XG5cdCAqIEBzaW5jZSAxLjEwLjBcblx0ICovXG5cdGdldE9wdGlvbihwYXRoLCBkZWZhdWx0VmFsdWUpIHtcblx0XHRsZXQgdmFsdWU7XG5cblx0XHR0cnkge1xuXHRcdFx0dmFsdWUgPSBuZXcgUGF0aGZpbmRlcih0aGlzW2ludGVybmFsU3ltYm9sXSkuZ2V0VmlhKHBhdGgpO1xuXHRcdH0gY2F0Y2ggKGUpIHt9XG5cblx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge1xuXHRoYXNPYmplY3RMaW5rLFxuXHRnZXRMaW5rZWRPYmplY3RzLFxuXHRhZGRUb09iamVjdExpbmssXG59IGZyb20gXCIuLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IGdldExvY2FsZU9mRG9jdW1lbnQgfSBmcm9tIFwiLi4vZG9tL2xvY2FsZS5tanNcIjtcbmltcG9ydCB7IEJhc2VXaXRoT3B0aW9ucyB9IGZyb20gXCIuLi90eXBlcy9iYXNld2l0aG9wdGlvbnMubWpzXCI7XG5pbXBvcnQgeyBMb2NhbGUgfSBmcm9tIFwiLi9sb2NhbGUubWpzXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGlvbnMgfSBmcm9tIFwiLi90cmFuc2xhdGlvbnMubWpzXCI7XG5cbmV4cG9ydCB7IFByb3ZpZGVyLCB0cmFuc2xhdGlvbnNMaW5rU3ltYm9sIH07XG5cbi8qKlxuICogQHR5cGUge3N5bWJvbH1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDMuOS4wXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCB0cmFuc2xhdGlvbnNMaW5rU3ltYm9sID0gU3ltYm9sLmZvcihcblx0XCJAc2NodWthaS9tb25zdGVyL2kxOG4vdHJhbnNsYXRpb25zQEBsaW5rXCIsXG4pO1xuXG4vKipcbiAqIEEgcHJvdmlkZXIgbWFrZXMgYSB0cmFuc2xhdGlvbiBvYmplY3QgYXZhaWxhYmxlLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMzA2Nn1cbiAqL1xuY2xhc3MgUHJvdmlkZXIgZXh0ZW5kcyBCYXNlV2l0aE9wdGlvbnMge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDMuMjcuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9pMThuL3Byb3ZpZGVyQEBpbnN0YW5jZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0xvY2FsZXxzdHJpbmd9IGxvY2FsZVxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0Z2V0VHJhbnNsYXRpb25zKGxvY2FsZSkge1xuXHRcdGlmIChsb2NhbGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0bG9jYWxlID0gZ2V0TG9jYWxlT2ZEb2N1bWVudCgpO1xuXHRcdH1cblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRyZXNvbHZlKG5ldyBUcmFuc2xhdGlvbnMobG9jYWxlKSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHJlamVjdChlKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0xvY2FsZXxzdHJpbmd9IGxvY2FsZVxuXHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG5cdCAqIEByZXR1cm4ge1Byb3ZpZGVyfVxuXHQgKi9cblx0YXNzaWduVG9FbGVtZW50KGxvY2FsZSwgZWxlbWVudCkge1xuXHRcdGlmIChsb2NhbGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0bG9jYWxlID0gZ2V0TG9jYWxlT2ZEb2N1bWVudCgpO1xuXHRcdH1cblxuXHRcdGlmICghKGxvY2FsZSBpbnN0YW5jZW9mIExvY2FsZSkpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkxvY2FsZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgTG9jYWxlXCIpO1xuXHRcdH1cblxuXHRcdGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHRcdGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiYm9keVwiKTtcblx0XHR9XG5cblx0XHRpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJFbGVtZW50IGlzIG5vdCBhbiBIVE1MRWxlbWVudFwiKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGlvbnMobG9jYWxlKS50aGVuKChvYmopID0+IHtcblx0XHRcdGxldCB0cmFuc2xhdGlvbnMgPSBudWxsO1xuXHRcdFx0aWYgKGhhc09iamVjdExpbmsoZWxlbWVudCwgdHJhbnNsYXRpb25zTGlua1N5bWJvbCkpIHtcblx0XHRcdFx0Y29uc3Qgb2JqZWN0cyA9IGdldExpbmtlZE9iamVjdHMoZWxlbWVudCwgdHJhbnNsYXRpb25zTGlua1N5bWJvbCk7XG5cdFx0XHRcdGZvciAoY29uc3QgbyBvZiBvYmplY3RzKSB7XG5cdFx0XHRcdFx0aWYgKG8gaW5zdGFuY2VvZiBUcmFuc2xhdGlvbnMpIHtcblx0XHRcdFx0XHRcdHRyYW5zbGF0aW9ucyA9IG87XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoISh0cmFuc2xhdGlvbnMgaW5zdGFuY2VvZiBUcmFuc2xhdGlvbnMpKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiT2JqZWN0IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBUcmFuc2xhdGlvbnNcIik7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0cmFuc2xhdGlvbnMuYXNzaWduVHJhbnNsYXRpb25zKG9iaik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhZGRUb09iamVjdExpbmsoZWxlbWVudCwgdHJhbnNsYXRpb25zTGlua1N5bWJvbCwgb2JqKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG9iajtcblx0XHR9KTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGdldExpbmtlZE9iamVjdHMsIGhhc09iamVjdExpbmsgfSBmcm9tIFwiLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfT0JKRUNUTElOSyB9IGZyb20gXCIuLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnQgfSBmcm9tIFwiLi4vZG9tL3V0aWwubWpzXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQge1xuXHR2YWxpZGF0ZUludGVnZXIsXG5cdHZhbGlkYXRlT2JqZWN0LFxuXHR2YWxpZGF0ZVN0cmluZyxcbn0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgTG9jYWxlLCBwYXJzZUxvY2FsZSB9IGZyb20gXCIuL2xvY2FsZS5tanNcIjtcbmltcG9ydCB7IHRyYW5zbGF0aW9uc0xpbmtTeW1ib2wgfSBmcm9tIFwiLi9wcm92aWRlci5tanNcIjtcblxuZXhwb3J0IHsgVHJhbnNsYXRpb25zLCBnZXREb2N1bWVudFRyYW5zbGF0aW9ucyB9O1xuXG4vKipcbiAqIFdpdGggdGhpcyBjbGFzcyB5b3UgY2FuIG1hbmFnZSB0cmFuc2xhdGlvbnMgYW5kIGFjY2VzcyB0aGUga2V5cy5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvaTE4bi90cmFuc2xhdGlvbnMubWpzXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjEzLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMzA2NlxuICovXG5jbGFzcyBUcmFuc2xhdGlvbnMgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7TG9jYWxlfSBsb2NhbGVcblx0ICovXG5cdGNvbnN0cnVjdG9yKGxvY2FsZSkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHRpZiAobG9jYWxlIGluc3RhbmNlb2YgTG9jYWxlKSB7XG5cdFx0XHR0aGlzLmxvY2FsZSA9IGxvY2FsZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5sb2NhbGUgPSBwYXJzZUxvY2FsZSh2YWxpZGF0ZVN0cmluZyhsb2NhbGUpKTtcblx0XHR9XG5cblx0XHR0aGlzLnN0b3JhZ2UgPSBuZXcgTWFwKCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDMuMjcuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9pMThuL3RyYW5zbGF0aW9uc0BAaW5zdGFuY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogRmV0Y2hlcyBhIHRleHQgdXNpbmcgdGhlIHNwZWNpZmllZCBrZXkuXG5cdCAqIElmIG5vIHN1aXRhYmxlIGtleSBpcyBmb3VuZCwgYGRlZmF1bHRUZXh0YCBpcyB0YWtlbi5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGtleVxuXHQgKiBAcGFyYW0ge3N0cmluZ3x1bmRlZmluZWR9IGRlZmF1bHRUZXh0XG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICogQHRocm93cyB7RXJyb3J9IGtleSBub3QgZm91bmRcblx0ICovXG5cdGdldFRleHQoa2V5LCBkZWZhdWx0VGV4dCkge1xuXHRcdGlmICghdGhpcy5zdG9yYWdlLmhhcyhrZXkpKSB7XG5cdFx0XHRpZiAoZGVmYXVsdFRleHQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYGtleSAke2tleX0gbm90IGZvdW5kYCk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB2YWxpZGF0ZVN0cmluZyhkZWZhdWx0VGV4dCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgciA9IHRoaXMuc3RvcmFnZS5nZXQoa2V5KTtcblx0XHRpZiAoaXNPYmplY3QocikpIHtcblx0XHRcdHJldHVybiB0aGlzLmdldFBsdXJhbFJ1bGVUZXh0KGtleSwgXCJvdGhlclwiLCBkZWZhdWx0VGV4dCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuc3RvcmFnZS5nZXQoa2V5KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIG51bWJlciBgY291bnRgIGNhbiBiZSBwYXNzZWQgdG8gdGhpcyBtZXRob2QuIEluIGFkZGl0aW9uIHRvIGEgbnVtYmVyLCBvbmUgb2YgdGhlIGtleXdvcmRzIGNhbiBhbHNvIGJlIHBhc3NlZCBkaXJlY3RseS5cblx0ICogXCJ6ZXJvXCIsIFwib25lXCIsIFwidHdvXCIsIFwiZmV3XCIsIFwibWFueVwiIGFuZCBcIm90aGVyXCIuIFJlbWVtYmVyOiBub3QgZXZlcnkgbGFuZ3VhZ2UgaGFzIGFsbCBydWxlcy5cblx0ICpcblx0ICogVGhlIGFwcHJvcHJpYXRlIHRleHQgZm9yIHRoaXMgbnVtYmVyIGlzIHRoZW4gc2VsZWN0ZWQuIElmIG5vIHN1aXRhYmxlIGtleSBpcyBmb3VuZCwgYGRlZmF1bHRUZXh0YCBpcyB0YWtlbi5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGtleVxuXHQgKiBAcGFyYW0ge2ludGVnZXJ8c3RyaW5nfSBjb3VudFxuXHQgKiBAcGFyYW0ge3N0cmluZ3x1bmRlZmluZWR9IGRlZmF1bHRUZXh0XG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdGdldFBsdXJhbFJ1bGVUZXh0KGtleSwgY291bnQsIGRlZmF1bHRUZXh0KSB7XG5cdFx0aWYgKCF0aGlzLnN0b3JhZ2UuaGFzKGtleSkpIHtcblx0XHRcdHJldHVybiB2YWxpZGF0ZVN0cmluZyhkZWZhdWx0VGV4dCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgciA9IHZhbGlkYXRlT2JqZWN0KHRoaXMuc3RvcmFnZS5nZXQoa2V5KSk7XG5cblx0XHRsZXQga2V5d29yZDtcblx0XHRpZiAoaXNTdHJpbmcoY291bnQpKSB7XG5cdFx0XHRrZXl3b3JkID0gY291bnQudG9Mb2NhbGVTdHJpbmcoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y291bnQgPSB2YWxpZGF0ZUludGVnZXIoY291bnQpO1xuXHRcdFx0aWYgKGNvdW50ID09PSAwKSB7XG5cdFx0XHRcdC8vIHNwZWNpYWwgaGFuZGxpbmcgZm9yIHplcm8gY291bnRcblx0XHRcdFx0aWYgKHIuaGFzT3duUHJvcGVydHkoXCJ6ZXJvXCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHZhbGlkYXRlU3RyaW5nKHI/Lnplcm8pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGtleXdvcmQgPSBuZXcgSW50bC5QbHVyYWxSdWxlcyh0aGlzLmxvY2FsZS50b1N0cmluZygpKS5zZWxlY3QoXG5cdFx0XHRcdHZhbGlkYXRlSW50ZWdlcihjb3VudCksXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGlmIChyLmhhc093blByb3BlcnR5KGtleXdvcmQpKSB7XG5cdFx0XHRyZXR1cm4gdmFsaWRhdGVTdHJpbmcocltrZXl3b3JkXSk7XG5cdFx0fVxuXG5cdFx0Ly8gQGRlcHJlY2F0ZWQgc2luY2UgMjAyMy0wMy0xNFxuXHRcdC8vIERFRkFVTFRfS0VZIGlzIHVuZGVmaW5lZFxuXHRcdC8vIGlmIChyLmhhc093blByb3BlcnR5KERFRkFVTFRfS0VZKSkge1xuXHRcdC8vICAgICByZXR1cm4gdmFsaWRhdGVTdHJpbmcocltERUZBVUxUX0tFWV0pO1xuXHRcdC8vIH1cblxuXHRcdHJldHVybiB2YWxpZGF0ZVN0cmluZyhkZWZhdWx0VGV4dCk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IGEgdGV4dCBmb3IgYSBrZXlcblx0ICpcblx0ICogYGBgXG5cdCAqIHRyYW5zbGF0aW9ucy5zZXRUZXh0KFwidGV4dDFcIiwgXCJNYWtlIG15IGRheSFcIik7XG5cdCAqIC8vIHBsdXJhbCBydWxlc1xuXHQgKiB0cmFuc2xhdGlvbnMuc2V0VGV4dChcInRleHQ2XCIsIHtcblx0ICogICAgIFwiemVyb1wiOiBcIlRoZXJlIGFyZSBubyBmaWxlcyBvbiBEaXNrLlwiLFxuXHQgKiAgICAgXCJvbmVcIjogXCJUaGVyZSBpcyBvbmUgZmlsZSBvbiBEaXNrLlwiLFxuXHQgKiAgICAgXCJvdGhlclwiOiBcIlRoZXJlIGFyZSBmaWxlcyBvbiBEaXNrLlwiXG5cdCAqICAgICBcImRlZmF1bHRcIjogXCJUaGVyZSBhcmUgZmlsZXMgb24gRGlzay5cIlxuXHQgKiB9KTtcblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcblx0ICogQHBhcmFtIHtzdHJpbmd8b2JqZWN0fSB0ZXh0XG5cdCAqIEByZXR1cm4ge1RyYW5zbGF0aW9uc31cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmcgb3Igb2JqZWN0XG5cdCAqL1xuXHRzZXRUZXh0KGtleSwgdGV4dCkge1xuXHRcdGlmIChpc1N0cmluZyh0ZXh0KSB8fCBpc09iamVjdCh0ZXh0KSkge1xuXHRcdFx0dGhpcy5zdG9yYWdlLnNldCh2YWxpZGF0ZVN0cmluZyhrZXkpLCB0ZXh0KTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ2YWx1ZSBpcyBub3QgYSBzdHJpbmcgb3Igb2JqZWN0XCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIHRyYW5zZmVyIG92ZXJsYXlzIGZyb20gYW4gb2JqZWN0LiBUaGUga2V5cyBhcmUgdHJhbnNmZXJyZWQsIGFuZCB0aGUgdmFsdWVzIGFyZSBlbnRlcmVkXG5cdCAqIGFzIHRleHQuXG5cdCAqXG5cdCAqIFRoZSB2YWx1ZXMgY2FuIGVpdGhlciBiZSBjaGFyYWN0ZXIgc3RyaW5ncyBvciwgaW4gdGhlIGNhc2Ugb2YgdGV4dHMgd2l0aCBwbHVyYWwgZm9ybXMsIG9iamVjdHMuIFRoZSBwbHVyYWwgZm9ybXNcblx0ICogbXVzdCBiZSBzdG9yZWQgYXMgdGV4dCB2aWEgYSBzdGFuZGFyZCBrZXkgXCJ6ZXJvXCIsIFwib25lXCIsIFwidHdvXCIsIFwiZmV3XCIsIFwibWFueVwiIGFuZCBcIm90aGVyXCIuXG5cdCAqXG5cdCAqIEFkZGl0aW9uYWxseSwgdGhlIGtleSBkZWZhdWx0IGNhbiBiZSBzcGVjaWZpZWQsIHdoaWNoIHdpbGwgYmUgdXNlZCBpZiBubyBvdGhlciBrZXkgZml0cy5cblx0ICpcblx0ICogSW4gc29tZSBsYW5ndWFnZXMsIGxpa2UgZm9yIGV4YW1wbGUgaW4gR2VybWFuLCB0aGVyZSBpcyBubyBvd24gbW9yZSBudW1iZXIgYXQgdGhlIHZhbHVlIDAuIEluIHRoZXNlIGxhbmd1YWdlcyxcblx0ICogdGhlIGZ1bmN0aW9uIGFwcGxpZXMgYWRkaXRpb25hbGx5IHplcm8uXG5cdCAqXG5cdCAqIGBgYFxuXHQgKiB0cmFuc2xhdGlvbnMuYXNzaWduVHJhbnNsYXRpb25zKHtcblx0ICogICBcInRleHQxXCI6IFwiTWFrZSBteSBkYXkhXCIsXG5cdCAqICAgXCJ0ZXh0MlwiOiBcIkknbGwgYmUgYmFjayFcIixcblx0ICogICBcInRleHQ2XCI6IHtcblx0ICogICAgIFwiemVyb1wiOiBcIlRoZXJlIGFyZSBubyBmaWxlcyBvbiBEaXNrLlwiLFxuXHQgKiAgICAgXCJvbmVcIjogXCJUaGVyZSBpcyBvbmUgZmlsZSBvbiBEaXNrLlwiLFxuXHQgKiAgICAgXCJvdGhlclwiOiBcIlRoZXJlIGFyZSBmaWxlcyBvbiBEaXNrLlwiXG5cdCAqICAgICBcImRlZmF1bHRcIjogXCJUaGVyZSBhcmUgZmlsZXMgb24gRGlzay5cIlxuXHQgKiB9KTtcblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSB0cmFuc2xhdGlvbnNcblx0ICogQHJldHVybiB7VHJhbnNsYXRpb25zfVxuXHQgKi9cblx0YXNzaWduVHJhbnNsYXRpb25zKHRyYW5zbGF0aW9ucykge1xuXHRcdHZhbGlkYXRlT2JqZWN0KHRyYW5zbGF0aW9ucyk7XG5cblx0XHRpZiAodHJhbnNsYXRpb25zIGluc3RhbmNlb2YgVHJhbnNsYXRpb25zKSB7XG5cdFx0XHR0cmFuc2xhdGlvbnMuc3RvcmFnZS5mb3JFYWNoKCh2LCBrKSA9PiB7XG5cdFx0XHRcdHRoaXMuc2V0VGV4dChrLCB2KTtcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXModHJhbnNsYXRpb25zKSkge1xuXHRcdFx0dGhpcy5zZXRUZXh0KGssIHYpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgdHJhbnNsYXRpb25zIGZvciB0aGUgY3VycmVudCBkb2N1bWVudC5cbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fHVuZGVmaW5lZH0gW2VsZW1lbnRdIC0gRWxlbWVudCB0byBzZWFyY2ggZm9yIHRyYW5zbGF0aW9ucy4gRGVmYXVsdDogZWxlbWVudCB3aXRoIG9iamVjdGxpbmsgQHNjaHVrYWkvbW9uc3Rlci9pMThuL3RyYW5zbGF0aW9uc0BAbGluay5cbiAqIEByZXR1cm4ge1RyYW5zbGF0aW9uc31cbiAqIEB0aHJvd3Mge0Vycm9yfSBFbGVtZW50IGlzIG5vdCBhbiBIVE1MRWxlbWVudC5cbiAqIEB0aHJvd3Mge0Vycm9yfSBDYW5ub3QgZmluZCB0aGUgZWxlbWVudCB3aXRoIHRyYW5zbGF0aW9ucy4gQWRkIHRoZSB0cmFuc2xhdGlvbiBvYmplY3QgdG8gdGhlIGRvY3VtZW50LlxuICogQHRocm93cyB7RXJyb3J9IFRoaXMgZWxlbWVudCBoYXMgbm8gdHJhbnNsYXRpb25zLlxuICogQHRocm93cyB7RXJyb3J9IE1pc3NpbmcgdHJhbnNsYXRpb25zLlxuICovXG5mdW5jdGlvbiBnZXREb2N1bWVudFRyYW5zbGF0aW9ucyhlbGVtZW50KSB7XG5cdGNvbnN0IGQgPSBnZXREb2N1bWVudCgpO1xuXG5cdGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHRlbGVtZW50ID0gZC5xdWVyeVNlbGVjdG9yKFxuXHRcdFx0YFske0FUVFJJQlVURV9PQkpFQ1RMSU5LfX49XCIke3RyYW5zbGF0aW9uc0xpbmtTeW1ib2wudG9TdHJpbmcoKX1cIl1gLFxuXHRcdCk7XG5cdFx0aWYgKGVsZW1lbnQgPT09IG51bGwpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0XCJDYW5ub3QgZmluZCB0aGUgZWxlbWVudCB3aXRoIHRyYW5zbGF0aW9ucy4gQWRkIHRoZSB0cmFuc2xhdGlvbiBvYmplY3QgdG8gdGhlIGRvY3VtZW50LlwiLFxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHRpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiRWxlbWVudCBpcyBub3QgYW4gSFRNTEVsZW1lbnQuXCIpO1xuXHR9XG5cblx0aWYgKCFoYXNPYmplY3RMaW5rKGVsZW1lbnQsIHRyYW5zbGF0aW9uc0xpbmtTeW1ib2wpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhpcyBlbGVtZW50IGhhcyBubyB0cmFuc2xhdGlvbnMuXCIpO1xuXHR9XG5cblx0Y29uc3Qgb2JqID0gZ2V0TGlua2VkT2JqZWN0cyhlbGVtZW50LCB0cmFuc2xhdGlvbnNMaW5rU3ltYm9sKTtcblxuXHRmb3IgKGNvbnN0IHQgb2Ygb2JqKSB7XG5cdFx0aWYgKHQgaW5zdGFuY2VvZiBUcmFuc2xhdGlvbnMpIHtcblx0XHRcdHJldHVybiB0O1xuXHRcdH1cblx0fVxuXG5cdHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgdHJhbnNsYXRpb25zLlwiKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBnZXRMb2NhbGVPZkRvY3VtZW50IH0gZnJvbSBcIi4uL2RvbS9sb2NhbGUubWpzXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWwsIGdldEdsb2JhbE9iamVjdCB9IGZyb20gXCIuLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyBJRCB9IGZyb20gXCIuLi90eXBlcy9pZC5tanNcIjtcbmltcG9ydCB7IGlzQXJyYXksIGlzT2JqZWN0LCBpc1N0cmluZywgaXNQcmltaXRpdmUgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQge1xuXHRnZXREb2N1bWVudFRyYW5zbGF0aW9ucyxcblx0VHJhbnNsYXRpb25zLFxufSBmcm9tIFwiLi4vaTE4bi90cmFuc2xhdGlvbnMubWpzXCI7XG5pbXBvcnQge1xuXHR2YWxpZGF0ZUZ1bmN0aW9uLFxuXHR2YWxpZGF0ZUludGVnZXIsXG5cdHZhbGlkYXRlT2JqZWN0LFxuXHR2YWxpZGF0ZVByaW1pdGl2ZSxcblx0dmFsaWRhdGVTdHJpbmcsXG5cdHZhbGlkYXRlQm9vbGVhbixcbn0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgY2xvbmUgfSBmcm9tIFwiLi4vdXRpbC9jbG9uZS5tanNcIjtcbmltcG9ydCB7IFBhdGhmaW5kZXIgfSBmcm9tIFwiLi9wYXRoZmluZGVyLm1qc1wiO1xuXG5leHBvcnQgeyBUcmFuc2Zvcm1lciB9O1xuXG4vKipcbiAqIFRoZSB0cmFuc2Zvcm1lciBjbGFzcyBpcyBhIHN3aXNzIGFybXkga25pZmUgZm9yIG1hbmlwdWxhdGluZyB2YWx1ZXMuXG4gKlxuICogQSBzaW1wbGUgZXhhbXBsZSBpcyB0aGUgY29udmVyc2lvbiBvZiBhbGwgY2hhcmFjdGVycyB0byBsb3dlcmNhc2UuIGZvciB0aGlzIHB1cnBvc2UgdGhlIGNvbW1hbmQgYHRvbG93ZXJgIG11c3QgYmUgdXNlZC5cbiAqXG4gKiBgYGBqc1xuICogbGV0IHQgPSBuZXcgVHJhbnNmb3JtZXIoJ3RvbG93ZXInKS5ydW4oJ0FCQycpOyAvLyBcdTIxQTYgYWJjXG4gKiBgYGBcbiAqXG4gKiBAZnJhZ21lbnRzIC9mcmFnbWVudHMvbGlicmFyaWVzL3RyYW5zZm9ybWVyXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2xpYnJhcmllcy90cmFuc2Zvcm1lci9zaW1wbGVcbiAqXG4gKiBAc2luY2UgMS41LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBUaGUgdHJhbnNmb3JtZXIgY2xhc3MgaXMgYSBzd2lzcyBhcm15IGtuaWZlIGZvciBtYW5pcHVsYXRpbmcgdmFsdWVzLiBlc3BlY2lhbGx5IGluIGNvbWJpbmF0aW9uIHdpdGggdGhlIHBpcGUsIHByb2Nlc3NpbmcgY2hhaW5zIGNhbiBiZSBidWlsdCB1cC5cbiAqL1xuY2xhc3MgVHJhbnNmb3JtZXIgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBkZWZpbml0aW9uXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihkZWZpbml0aW9uKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLmFyZ3MgPSBkaXNhc3NlbWJsZShkZWZpbml0aW9uKTtcblx0XHR0aGlzLmNvbW1hbmQgPSB0aGlzLmFyZ3Muc2hpZnQoKTtcblx0XHR0aGlzLmNhbGxiYWNrcyA9IG5ldyBNYXAoKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuXHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuXHQgKiBAcGFyYW0ge29iamVjdH0gY29udGV4dFxuXHQgKiBAcmV0dXJuIHtUcmFuc2Zvcm1lcn1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBmdW5jdGlvblxuXHQgKi9cblx0c2V0Q2FsbGJhY2sobmFtZSwgY2FsbGJhY2ssIGNvbnRleHQpIHtcblx0XHR2YWxpZGF0ZVN0cmluZyhuYW1lKTtcblx0XHR2YWxpZGF0ZUZ1bmN0aW9uKGNhbGxiYWNrKTtcblxuXHRcdGlmIChjb250ZXh0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHZhbGlkYXRlT2JqZWN0KGNvbnRleHQpO1xuXHRcdH1cblxuXHRcdHRoaXMuY2FsbGJhY2tzLnNldChuYW1lLCB7XG5cdFx0XHRjYWxsYmFjazogY2FsbGJhY2ssXG5cdFx0XHRjb250ZXh0OiBjb250ZXh0LFxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHsqfVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdW5rbm93biBjb21tYW5kXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdHlwZSBub3Qgc3VwcG9ydGVkXG5cdCAqL1xuXHRydW4odmFsdWUpIHtcblx0XHRyZXR1cm4gdHJhbnNmb3JtLmFwcGx5KHRoaXMsIFt2YWx1ZV0pO1xuXHR9XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21tYW5kXG4gKiBAcmV0dXJuIHthcnJheX1cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGRpc2Fzc2VtYmxlKGNvbW1hbmQpIHtcblx0dmFsaWRhdGVTdHJpbmcoY29tbWFuZCk7XG5cblx0Y29uc3QgcGxhY2Vob2xkZXIgPSBuZXcgTWFwKCk7XG5cdGNvbnN0IHJlZ2V4ID0gLygoPzxwYXR0ZXJuPlxcXFwoPzxjaGFyPi4pKXsxfSkvZ2ltO1xuXG5cdC8vIFRoZSBzZXBhcmF0b3IgZm9yIGFyZ3MgbXVzdCBiZSBlc2NhcGVkXG5cdC8vIHVuZGVmaW5lZCBzdHJpbmcgd2hpY2ggc2hvdWxkIG5vdCBvY2N1ciBub3JtYWxseSBhbmQgaXMgYWxzbyBub3QgYSByZWdleFxuXHRjb25zdCByZXN1bHQgPSBjb21tYW5kLm1hdGNoQWxsKHJlZ2V4KTtcblxuXHRmb3IgKGNvbnN0IG0gb2YgcmVzdWx0KSB7XG5cdFx0Y29uc3QgZyA9IG0/LltcImdyb3Vwc1wiXTtcblx0XHRpZiAoIWlzT2JqZWN0KGcpKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRjb25zdCBwID0gZz8uW1wicGF0dGVyblwiXTtcblx0XHRjb25zdCBjID0gZz8uW1wiY2hhclwiXTtcblxuXHRcdGlmIChwICYmIGMpIHtcblx0XHRcdGNvbnN0IHIgPSBgX18ke25ldyBJRCgpLnRvU3RyaW5nKCl9X19gO1xuXHRcdFx0cGxhY2Vob2xkZXIuc2V0KHIsIGMpO1xuXHRcdFx0Y29tbWFuZCA9IGNvbW1hbmQucmVwbGFjZShwLCByKTtcblx0XHR9XG5cdH1cblx0bGV0IHBhcnRzID0gY29tbWFuZC5zcGxpdChcIjpcIik7XG5cblx0cGFydHMgPSBwYXJ0cy5tYXAoZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0bGV0IHYgPSB2YWx1ZS50cmltKCk7XG5cdFx0Zm9yIChjb25zdCBrIG9mIHBsYWNlaG9sZGVyKSB7XG5cdFx0XHR2ID0gdi5yZXBsYWNlKGtbMF0sIGtbMV0pO1xuXHRcdH1cblx0XHRyZXR1cm4gdjtcblx0fSk7XG5cblx0cmV0dXJuIHBhcnRzO1xufVxuXG4vKipcbiAqIHRyaWVzIHRvIG1ha2UgYSBzdHJpbmcgb3V0IG9mIHZhbHVlIGFuZCBpZiB0aGlzIHN1Y2NlZWRzIHRvIHJldHVybiBpdCBiYWNrXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY29udmVydFRvU3RyaW5nKHZhbHVlKSB7XG5cdGlmIChpc09iamVjdCh2YWx1ZSkgJiYgdmFsdWUuaGFzT3duUHJvcGVydHkoXCJ0b1N0cmluZ1wiKSkge1xuXHRcdHZhbHVlID0gdmFsdWUudG9TdHJpbmcoKTtcblx0fVxuXG5cdHZhbGlkYXRlU3RyaW5nKHZhbHVlKTtcblx0cmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHsqfVxuICogQHByaXZhdGVcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bmtub3duIGNvbW1hbmRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuICogQHRocm93cyB7RXJyb3J9IHR5cGUgbm90IHN1cHBvcnRlZFxuICogQHRocm93cyB7RXJyb3J9IG1pc3Npbmcga2V5IHBhcmFtZXRlclxuICovXG5mdW5jdGlvbiB0cmFuc2Zvcm0odmFsdWUpIHtcblx0Y29uc3QgY29uc29sZSA9IGdldEdsb2JhbE9iamVjdChcImNvbnNvbGVcIik7XG5cblx0Y29uc3QgYXJncyA9IGNsb25lKHRoaXMuYXJncyk7XG5cdGxldCBrZXk7XG5cdGxldCBkZWZhdWx0VmFsdWU7XG5cblx0bGV0IHRyYW5zbGF0aW9ucztcblx0bGV0IGRhdGU7XG5cdGxldCBsb2NhbGU7XG5cdGxldCB0aW1lc3RhbXA7XG5cdGxldCBtYXA7XG5cdGxldCBrZXlWYWx1ZTtcblxuXHRzd2l0Y2ggKHRoaXMuY29tbWFuZCkge1xuXHRcdGNhc2UgXCJzdGF0aWNcIjpcblx0XHRcdHJldHVybiB0aGlzLmFyZ3Muam9pbihcIjpcIik7XG5cblx0XHRjYXNlIFwidG9sb3dlclwiOlxuXHRcdGNhc2UgXCJzdHJ0b2xvd2VyXCI6XG5cdFx0Y2FzZSBcInRvbG93ZXJjYXNlXCI6XG5cdFx0XHR2YWxpZGF0ZVN0cmluZyh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gdmFsdWUudG9Mb3dlckNhc2UoKTtcblxuXHRcdGNhc2UgXCJjb250YWluc1wiOlxuXHRcdFx0aWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWUuaW5jbHVkZXMoYXJnc1swXSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc0FycmF5KHZhbHVlKSkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWUuaW5jbHVkZXMoYXJnc1swXSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc09iamVjdCh2YWx1ZSkpIHtcblx0XHRcdFx0cmV0dXJuIHZhbHVlLmhhc093blByb3BlcnR5KGFyZ3NbMF0pO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRjYXNlIFwiaGFzLWVudHJpZXNcIjpcblx0XHRjYXNlIFwiaGFzZW50cmllc1wiOlxuXHRcdFx0aWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuXHRcdFx0XHRyZXR1cm4gT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCA+IDA7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc0FycmF5KHZhbHVlKSkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWUubGVuZ3RoID4gMDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0Y2FzZSBcImlzdW5kZWZpbmVkXCI6XG5cdFx0Y2FzZSBcImlzLXVuZGVmaW5lZFwiOlxuXHRcdFx0cmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQ7XG5cblx0XHRjYXNlIFwiaXNudWxsXCI6XG5cdFx0Y2FzZSBcImlzLW51bGxcIjpcblx0XHRcdHJldHVybiB2YWx1ZSA9PT0gbnVsbDtcblxuXHRcdGNhc2UgXCJpc3NldFwiOlxuXHRcdGNhc2UgXCJpcy1zZXRcIjpcblx0XHRcdHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsO1xuXG5cdFx0Y2FzZSBcImlzbnVtYmVyXCI6XG5cdFx0Y2FzZSBcImlzLW51bWJlclwiOlxuXHRcdFx0cmV0dXJuIGlzUHJpbWl0aXZlKHZhbHVlKSAmJiAhaXNOYU4odmFsdWUpO1xuXG5cdFx0Y2FzZSBcImlzaW50ZWdlclwiOlxuXHRcdGNhc2UgXCJpcy1pbnRlZ2VyXCI6XG5cdFx0XHRyZXR1cm4gaXNQcmltaXRpdmUodmFsdWUpICYmICFpc05hTih2YWx1ZSkgJiYgdmFsdWUgJSAxID09PSAwO1xuXG5cdFx0Y2FzZSBcImlzZmxvYXRcIjpcblx0XHRjYXNlIFwiaXMtZmxvYXRcIjpcblx0XHRcdHJldHVybiBpc1ByaW1pdGl2ZSh2YWx1ZSkgJiYgIWlzTmFOKHZhbHVlKSAmJiB2YWx1ZSAlIDEgIT09IDA7XG5cblx0XHRjYXNlIFwiaXNvYmplY3RcIjpcblx0XHRjYXNlIFwiaXMtb2JqZWN0XCI6XG5cdFx0XHRyZXR1cm4gaXNPYmplY3QodmFsdWUpO1xuXG5cdFx0Y2FzZSBcImlzYXJyYXlcIjpcblx0XHRjYXNlIFwiaXMtYXJyYXlcIjpcblx0XHRcdHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKTtcblxuXHRcdGNhc2UgXCJub3RcIjpcblx0XHRcdHZhbGlkYXRlQm9vbGVhbih2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gIXZhbHVlO1xuXG5cdFx0Y2FzZSBcInRvdXBwZXJcIjpcblx0XHRjYXNlIFwic3RydG91cHBlclwiOlxuXHRcdGNhc2UgXCJ0b3VwcGVyY2FzZVwiOlxuXHRcdFx0dmFsaWRhdGVTdHJpbmcodmFsdWUpO1xuXHRcdFx0cmV0dXJuIHZhbHVlLnRvVXBwZXJDYXNlKCk7XG5cblx0XHRjYXNlIFwidG9zdHJpbmdcIjpcblx0XHRcdHJldHVybiBgJHt2YWx1ZX1gO1xuXG5cdFx0Y2FzZSBcInRvaW50ZWdlclwiOlxuXHRcdFx0Y29uc3QgbiA9IHBhcnNlSW50KHZhbHVlKTtcblx0XHRcdHZhbGlkYXRlSW50ZWdlcihuKTtcblx0XHRcdHJldHVybiBuO1xuXG5cdFx0Y2FzZSBcInRvLWpzb25cIjpcblx0XHRjYXNlIFwidG9qc29uXCI6XG5cdFx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuXG5cdFx0Y2FzZSBcImZyb20tanNvblwiOlxuXHRcdGNhc2UgXCJmcm9tanNvblwiOlxuXHRcdFx0cmV0dXJuIEpTT04ucGFyc2UodmFsdWUpO1xuXG5cdFx0Y2FzZSBcInRyaW1cIjpcblx0XHRcdHZhbGlkYXRlU3RyaW5nKHZhbHVlKTtcblx0XHRcdHJldHVybiB2YWx1ZS50cmltKCk7XG5cblx0XHRjYXNlIFwicmF3dXJsZW5jb2RlXCI6XG5cdFx0XHR2YWxpZGF0ZVN0cmluZyh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKVxuXHRcdFx0XHQucmVwbGFjZSgvIS9nLCBcIiUyMVwiKVxuXHRcdFx0XHQucmVwbGFjZSgvJy9nLCBcIiUyN1wiKVxuXHRcdFx0XHQucmVwbGFjZSgvXFwoL2csIFwiJTI4XCIpXG5cdFx0XHRcdC5yZXBsYWNlKC9cXCkvZywgXCIlMjlcIilcblx0XHRcdFx0LnJlcGxhY2UoL1xcKi9nLCBcIiUyQVwiKTtcblxuXHRcdGNhc2UgXCJjYWxsXCI6XG5cdFx0XHQvKipcblx0XHRcdCAqIGNhbGxiYWNrLWRlZmluaXRpb25cblx0XHRcdCAqIGZ1bmN0aW9uIGNhbGxiYWNrKHZhbHVlLCAuLi5hcmdzKSB7XG5cdFx0XHQgKiAgIHJldHVybiB2YWx1ZTtcblx0XHRcdCAqIH1cblx0XHRcdCAqL1xuXG5cdFx0XHRsZXQgY2FsbGJhY2s7XG5cdFx0XHRjb25zdCBjYWxsYmFja05hbWUgPSBhcmdzLnNoaWZ0KCk7XG5cdFx0XHRsZXQgY29udGV4dCA9IGdldEdsb2JhbCgpO1xuXG5cdFx0XHRpZiAoaXNPYmplY3QodmFsdWUpICYmIHZhbHVlLmhhc093blByb3BlcnR5KGNhbGxiYWNrTmFtZSkpIHtcblx0XHRcdFx0Y2FsbGJhY2sgPSB2YWx1ZVtjYWxsYmFja05hbWVdO1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLmNhbGxiYWNrcy5oYXMoY2FsbGJhY2tOYW1lKSkge1xuXHRcdFx0XHRjb25zdCBzID0gdGhpcy5jYWxsYmFja3MuZ2V0KGNhbGxiYWNrTmFtZSk7XG5cdFx0XHRcdGNhbGxiYWNrID0gcz8uW1wiY2FsbGJhY2tcIl07XG5cdFx0XHRcdGNvbnRleHQgPSBzPy5bXCJjb250ZXh0XCJdO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0dHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIiAmJlxuXHRcdFx0XHR3aW5kb3cuaGFzT3duUHJvcGVydHkoY2FsbGJhY2tOYW1lKVxuXHRcdFx0KSB7XG5cdFx0XHRcdGNhbGxiYWNrID0gd2luZG93W2NhbGxiYWNrTmFtZV07XG5cdFx0XHR9XG5cdFx0XHR2YWxpZGF0ZUZ1bmN0aW9uKGNhbGxiYWNrKTtcblxuXHRcdFx0YXJncy51bnNoaWZ0KHZhbHVlKTtcblx0XHRcdHJldHVybiBjYWxsYmFjay5jYWxsKGNvbnRleHQsIC4uLmFyZ3MpO1xuXG5cdFx0Y2FzZSBcInBsYWluXCI6XG5cdFx0Y2FzZSBcInBsYWludGV4dFwiOlxuXHRcdFx0dmFsaWRhdGVTdHJpbmcodmFsdWUpO1xuXHRcdFx0Y29uc3QgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyh2YWx1ZSwgXCJ0ZXh0L2h0bWxcIik7XG5cdFx0XHRyZXR1cm4gZG9jLmJvZHkudGV4dENvbnRlbnQgfHwgXCJcIjtcblxuXHRcdGNhc2UgXCJpZlwiOlxuXHRcdGNhc2UgXCI/XCI6XG5cdFx0XHR2YWxpZGF0ZVByaW1pdGl2ZSh2YWx1ZSk7XG5cblx0XHRcdGxldCB0cnVlU3RhdGVtZW50ID0gYXJncy5zaGlmdCgpIHx8IHVuZGVmaW5lZDtcblx0XHRcdGxldCBmYWxzZVN0YXRlbWVudCA9IGFyZ3Muc2hpZnQoKSB8fCB1bmRlZmluZWQ7XG5cblx0XHRcdHRydWVTdGF0ZW1lbnQgPSBjb252ZXJ0U3BlY2lhbFN0cmluZ3ModHJ1ZVN0YXRlbWVudCwgdmFsdWUpO1xuXHRcdFx0ZmFsc2VTdGF0ZW1lbnQgPSBjb252ZXJ0U3BlY2lhbFN0cmluZ3MoZmFsc2VTdGF0ZW1lbnQsIHZhbHVlKTtcblxuXHRcdFx0Y29uc3QgY29uZGl0aW9uID0gZXZhbHVhdGVDb25kaXRpb24odmFsdWUpO1xuXHRcdFx0cmV0dXJuIGNvbmRpdGlvbiA/IHRydWVTdGF0ZW1lbnQgOiBmYWxzZVN0YXRlbWVudDtcblxuXHRcdGNhc2UgXCJ1Y2ZpcnN0XCI6XG5cdFx0XHR2YWxpZGF0ZVN0cmluZyh2YWx1ZSk7XG5cblx0XHRcdGNvbnN0IGZpcnN0Y2hhciA9IHZhbHVlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuIGZpcnN0Y2hhciArIHZhbHVlLnN1YnN0cigxKTtcblx0XHRjYXNlIFwidWN3b3Jkc1wiOlxuXHRcdFx0dmFsaWRhdGVTdHJpbmcodmFsdWUpO1xuXG5cdFx0XHRyZXR1cm4gdmFsdWUucmVwbGFjZShcblx0XHRcdFx0L14oW2EtelxcdTAwRTAtXFx1MDBGQ10pfFxccysoW2EtelxcdTAwRTAtXFx1MDBGQ10pL2csXG5cdFx0XHRcdGZ1bmN0aW9uICh2KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHYudG9VcHBlckNhc2UoKTtcblx0XHRcdFx0fSxcblx0XHRcdCk7XG5cblx0XHRjYXNlIFwiY291bnRcIjpcblx0XHRjYXNlIFwibGVuZ3RoXCI6XG5cdFx0XHRpZiAoXG5cdFx0XHRcdChpc1N0cmluZyh2YWx1ZSkgfHwgaXNPYmplY3QodmFsdWUpIHx8IGlzQXJyYXkodmFsdWUpKSAmJlxuXHRcdFx0XHR2YWx1ZS5oYXNPd25Qcm9wZXJ0eShcImxlbmd0aFwiKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiB2YWx1ZS5sZW5ndGg7XG5cdFx0XHR9XG5cblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoYHVuc3VwcG9ydGVkIHR5cGUgJHt0eXBlb2YgdmFsdWV9YCk7XG5cblx0XHRjYXNlIFwidG8tYmFzZTY0XCI6XG5cdFx0Y2FzZSBcImJ0b2FcIjpcblx0XHRjYXNlIFwiYmFzZTY0XCI6XG5cdFx0XHRyZXR1cm4gYnRvYShjb252ZXJ0VG9TdHJpbmcodmFsdWUpKTtcblxuXHRcdGNhc2UgXCJhdG9iXCI6XG5cdFx0Y2FzZSBcImZyb20tYmFzZTY0XCI6XG5cdFx0XHRyZXR1cm4gYXRvYihjb252ZXJ0VG9TdHJpbmcodmFsdWUpKTtcblxuXHRcdGNhc2UgXCJlbXB0eVwiOlxuXHRcdFx0cmV0dXJuIFwiXCI7XG5cblx0XHRjYXNlIFwidW5kZWZpbmVkXCI6XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0Y2FzZSBcImRlYnVnXCI6XG5cdFx0XHRpZiAoaXNPYmplY3QoY29uc29sZSkpIHtcblx0XHRcdFx0Y29uc29sZS5sb2codmFsdWUpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cblx0XHRjYXNlIFwicHJlZml4XCI6XG5cdFx0XHR2YWxpZGF0ZVN0cmluZyh2YWx1ZSk7XG5cdFx0XHRjb25zdCBwcmVmaXggPSBhcmdzPy5bMF07XG5cdFx0XHRyZXR1cm4gcHJlZml4ICsgdmFsdWU7XG5cblx0XHRjYXNlIFwic3VmZml4XCI6XG5cdFx0XHR2YWxpZGF0ZVN0cmluZyh2YWx1ZSk7XG5cdFx0XHRjb25zdCBzdWZmaXggPSBhcmdzPy5bMF07XG5cdFx0XHRyZXR1cm4gdmFsdWUgKyBzdWZmaXg7XG5cblx0XHRjYXNlIFwidW5pcWlkXCI6XG5cdFx0XHRyZXR1cm4gbmV3IElEKCkudG9TdHJpbmcoKTtcblxuXHRcdGNhc2UgXCJmaXJzdC1rZXlcIjpcblx0XHRjYXNlIFwibGFzdC1rZXlcIjpcblx0XHRjYXNlIFwibnRoLWxhc3Qta2V5XCI6XG5cdFx0Y2FzZSBcIm50aC1rZXlcIjpcblx0XHRcdGlmICghaXNPYmplY3QodmFsdWUpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInR5cGUgbm90IHN1cHBvcnRlZFwiKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlKS5zb3J0KCk7XG5cblx0XHRcdGlmICh0aGlzLmNvbW1hbmQgPT09IFwiZmlyc3Qta2V5XCIpIHtcblx0XHRcdFx0a2V5ID0gMDtcblx0XHRcdH0gZWxzZSBpZiAodGhpcy5jb21tYW5kID09PSBcImxhc3Qta2V5XCIpIHtcblx0XHRcdFx0a2V5ID0ga2V5cy5sZW5ndGggLSAxO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0a2V5ID0gdmFsaWRhdGVJbnRlZ2VyKHBhcnNlSW50KGFyZ3Muc2hpZnQoKSkpO1xuXG5cdFx0XHRcdGlmICh0aGlzLmNvbW1hbmQgPT09IFwibnRoLWxhc3Qta2V5XCIpIHtcblx0XHRcdFx0XHRrZXkgPSBrZXlzLmxlbmd0aCAtIGtleSAtIDE7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0ZGVmYXVsdFZhbHVlID0gYXJncy5zaGlmdCgpIHx8IFwiXCI7XG5cblx0XHRcdGNvbnN0IHVzZUtleSA9IGtleXM/LltrZXldO1xuXG5cdFx0XHRpZiAodmFsdWU/Llt1c2VLZXldKSB7XG5cdFx0XHRcdHJldHVybiB2YWx1ZT8uW3VzZUtleV07XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkZWZhdWx0VmFsdWU7XG5cblx0XHRjYXNlIFwia2V5XCI6XG5cdFx0Y2FzZSBcInByb3BlcnR5XCI6XG5cdFx0Y2FzZSBcImluZGV4XCI6XG5cdFx0XHRrZXkgPSBhcmdzLnNoaWZ0KCkgfHwgdW5kZWZpbmVkO1xuXG5cdFx0XHRpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibWlzc2luZyBrZXkgcGFyYW1ldGVyXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWZhdWx0VmFsdWUgPSBhcmdzLnNoaWZ0KCkgfHwgdW5kZWZpbmVkO1xuXG5cdFx0XHRpZiAodmFsdWUgaW5zdGFuY2VvZiBNYXApIHtcblx0XHRcdFx0aWYgKCF2YWx1ZS5oYXMoa2V5KSkge1xuXHRcdFx0XHRcdHJldHVybiBkZWZhdWx0VmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHZhbHVlLmdldChrZXkpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNPYmplY3QodmFsdWUpIHx8IGlzQXJyYXkodmFsdWUpKSB7XG5cdFx0XHRcdGlmICh2YWx1ZT8uW2tleV0pIHtcblx0XHRcdFx0XHRyZXR1cm4gdmFsdWU/LltrZXldO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGRlZmF1bHRWYWx1ZTtcblx0XHRcdH1cblxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidHlwZSBub3Qgc3VwcG9ydGVkXCIpO1xuXG5cdFx0Y2FzZSBcInBhdGgtZXhpc3RzXCI6XG5cdFx0XHRrZXkgPSBhcmdzLnNoaWZ0KCk7XG5cdFx0XHRpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibWlzc2luZyBrZXkgcGFyYW1ldGVyXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbmV3IFBhdGhmaW5kZXIodmFsdWUpLmV4aXN0cyhrZXkpO1xuXG5cdFx0Y2FzZSBcImNvbmNhdFwiOlxuXHRcdFx0Y29uc3QgcGYyID0gbmV3IFBhdGhmaW5kZXIodmFsdWUpO1xuXHRcdFx0bGV0IGNvbmNhdCA9IFwiXCI7XG5cdFx0XHR3aGlsZSAoYXJncy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGtleSA9IGFyZ3Muc2hpZnQoKTtcblx0XHRcdFx0aWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibWlzc2luZyBrZXkgcGFyYW1ldGVyXCIpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gYWRkIGVtcHR5IHN0cmluZ3Ncblx0XHRcdFx0aWYgKGlzU3RyaW5nKGtleSkgJiYga2V5LnRyaW0oKSA9PT0gXCJcIikge1xuXHRcdFx0XHRcdGNvbmNhdCArPSBrZXk7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIXBmMi5leGlzdHMoa2V5KSkge1xuXHRcdFx0XHRcdGNvbmNhdCArPSBrZXk7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgdiA9IHBmMi5nZXRWaWEoa2V5KTtcblx0XHRcdFx0aWYgKCFpc1ByaW1pdGl2ZSh2KSkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInZhbHVlIGlzIG5vdCBwcmltaXRpdmVcIik7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25jYXQgKz0gdjtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGNvbmNhdDtcblx0XHRjYXNlIFwicGF0aFwiOlxuXHRcdFx0a2V5ID0gYXJncy5zaGlmdCgpO1xuXHRcdFx0aWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIm1pc3Npbmcga2V5IHBhcmFtZXRlclwiKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgcGYgPSBuZXcgUGF0aGZpbmRlcih2YWx1ZSk7XG5cblx0XHRcdGlmICghcGYuZXhpc3RzKGtleSkpIHtcblx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHBmLmdldFZpYShrZXkpO1xuXG5cdFx0Y2FzZSBcInN1YnN0cmluZ1wiOlxuXHRcdFx0dmFsaWRhdGVTdHJpbmcodmFsdWUpO1xuXG5cdFx0XHRjb25zdCBzdGFydCA9IHBhcnNlSW50KGFyZ3NbMF0pIHx8IDA7XG5cdFx0XHRjb25zdCBlbmQgPSAocGFyc2VJbnQoYXJnc1sxXSkgfHwgMCkgKyBzdGFydDtcblxuXHRcdFx0cmV0dXJuIHZhbHVlLnN1YnN0cmluZyhzdGFydCwgZW5kKTtcblxuXHRcdGNhc2UgXCJub3BcIjpcblx0XHRcdHJldHVybiB2YWx1ZTtcblxuXHRcdGNhc2UgXCI/P1wiOlxuXHRcdGNhc2UgXCJkZWZhdWx0XCI6XG5cdFx0XHRpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdGRlZmF1bHRWYWx1ZSA9IGFyZ3Muc2hpZnQoKTtcblx0XHRcdGxldCBkZWZhdWx0VHlwZSA9IGFyZ3Muc2hpZnQoKTtcblx0XHRcdGlmIChkZWZhdWx0VHlwZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGRlZmF1bHRUeXBlID0gXCJzdHJpbmdcIjtcblx0XHRcdH1cblxuXHRcdFx0c3dpdGNoIChkZWZhdWx0VHlwZSkge1xuXHRcdFx0XHRjYXNlIFwiaW50XCI6XG5cdFx0XHRcdGNhc2UgXCJpbnRlZ2VyXCI6XG5cdFx0XHRcdFx0cmV0dXJuIHBhcnNlSW50KGRlZmF1bHRWYWx1ZSk7XG5cdFx0XHRcdGNhc2UgXCJmbG9hdFwiOlxuXHRcdFx0XHRcdHJldHVybiBwYXJzZUZsb2F0KGRlZmF1bHRWYWx1ZSk7XG5cdFx0XHRcdGNhc2UgXCJ1bmRlZmluZWRcIjpcblx0XHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0XHRjYXNlIFwiYm9vbFwiOlxuXHRcdFx0XHRjYXNlIFwiYm9vbGVhblwiOlxuXHRcdFx0XHRcdGRlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQoZGVmYXVsdFZhbHVlICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdFx0XHRcdFx0XHRcdGRlZmF1bHRWYWx1ZSAhPT0gXCJcIiAmJlxuXHRcdFx0XHRcdFx0XHRkZWZhdWx0VmFsdWUgIT09IFwib2ZmXCIgJiZcblx0XHRcdFx0XHRcdFx0ZGVmYXVsdFZhbHVlICE9PSBcImZhbHNlXCIgJiZcblx0XHRcdFx0XHRcdFx0ZGVmYXVsdFZhbHVlICE9PSBcImZhbHNlXCIpIHx8XG5cdFx0XHRcdFx0XHRkZWZhdWx0VmFsdWUgPT09IFwib25cIiB8fFxuXHRcdFx0XHRcdFx0ZGVmYXVsdFZhbHVlID09PSBcInRydWVcIiB8fFxuXHRcdFx0XHRcdFx0ZGVmYXVsdFZhbHVlID09PSBcInRydWVcIlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdGNhc2UgXCJzdHJpbmdcIjpcblx0XHRcdFx0XHRyZXR1cm4gYCR7ZGVmYXVsdFZhbHVlfWA7XG5cdFx0XHRcdGNhc2UgXCJvYmplY3RcIjpcblx0XHRcdFx0XHRyZXR1cm4gSlNPTi5wYXJzZShhdG9iKGRlZmF1bHRWYWx1ZSkpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0eXBlIG5vdCBzdXBwb3J0ZWRcIik7XG5cblx0XHRjYXNlIFwibWFwXCI6XG5cdFx0XHRtYXAgPSBuZXcgTWFwKCk7XG5cdFx0XHR3aGlsZSAoYXJncy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGtleVZhbHVlID0gYXJncy5zaGlmdCgpO1xuXHRcdFx0XHRpZiAoa2V5VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIm1pc3Npbmcga2V5IHBhcmFtZXRlclwiKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGtleVZhbHVlID0ga2V5VmFsdWUuc3BsaXQoXCI9XCIpO1xuXHRcdFx0XHRtYXAuc2V0KGtleVZhbHVlWzBdLCBrZXlWYWx1ZVsxXSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBtYXAuZ2V0KHZhbHVlKTtcblxuXHRcdGNhc2UgXCJlcXVhbHNcIjpcblx0XHRcdGlmIChhcmdzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nIHZhbHVlIHBhcmFtZXRlclwiKTtcblx0XHRcdH1cblxuXHRcdFx0dmFsaWRhdGVQcmltaXRpdmUodmFsdWUpO1xuXG5cdFx0XHRjb25zdCBlcXVhbHNWYWx1ZSA9IGFyZ3Muc2hpZnQoKTtcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBUaGUgaGlzdG9yeSBvZiBcdTIwMUN0eXBlb2YgbnVsbFx1MjAxRFxuXHRcdFx0ICogaHR0cHM6Ly8yYWxpdHkuY29tLzIwMTMvMTAvdHlwZW9mLW51bGwuaHRtbFxuXHRcdFx0ICogSW4gSmF2YVNjcmlwdCwgdHlwZW9mIG51bGwgaXMgJ29iamVjdCcsIHdoaWNoIGluY29ycmVjdGx5IHN1Z2dlc3RzXG5cdFx0XHQgKiB0aGF0IG51bGwgaXMgYW4gb2JqZWN0LlxuXHRcdFx0ICovXG5cdFx0XHRpZiAodmFsdWUgPT09IG51bGwpIHtcblx0XHRcdFx0cmV0dXJuIGVxdWFsc1ZhbHVlID09PSBcIm51bGxcIjtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgdHlwZU9mVmFsdWUgPSB0eXBlb2YgdmFsdWU7XG5cblx0XHRcdHN3aXRjaCAodHlwZU9mVmFsdWUpIHtcblx0XHRcdFx0Y2FzZSBcInN0cmluZ1wiOlxuXHRcdFx0XHRcdHJldHVybiB2YWx1ZSA9PT0gZXF1YWxzVmFsdWU7XG5cdFx0XHRcdGNhc2UgXCJudW1iZXJcIjpcblx0XHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IHBhcnNlRmxvYXQoZXF1YWxzVmFsdWUpO1xuXHRcdFx0XHRjYXNlIFwiYm9vbGVhblwiOlxuXHRcdFx0XHRcdHJldHVybiB2YWx1ZSA9PT0gKGVxdWFsc1ZhbHVlID09PSBcInRydWVcIiB8fCBlcXVhbHNWYWx1ZSA9PT0gXCJvblwiKTtcblx0XHRcdFx0Y2FzZSBcInVuZGVmaW5lZFwiOlxuXHRcdFx0XHRcdHJldHVybiBlcXVhbHNWYWx1ZSA9PT0gXCJ1bmRlZmluZWRcIjtcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0eXBlIG5vdCBzdXBwb3J0ZWRcIik7XG5cdFx0XHR9XG5cblx0XHRjYXNlIFwibW9uZXlcIjpcblx0XHRjYXNlIFwiY3VycmVuY3lcIjpcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGxvY2FsZSA9IGdldExvY2FsZU9mRG9jdW1lbnQoKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCBsb2NhbGUgb3IgbWlzc2luZyBmb3JtYXQgKCR7ZS5tZXNzYWdlfSlgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVmVyd2VuZGVuIHZvbiBSZWdFeHAsIHVtIFdcdTAwRTRocnVuZyB1bmQgQmV0cmFnIHp1IGV4dHJhaGllcmVuXG5cdFx0XHRjb25zdCBtYXRjaCA9IHZhbHVlLm1hdGNoKC9eKFtBLVpdezN9KVtcXHMtXSooXFxkKyhcXC5cXGQrKT8pJC8pO1xuXHRcdFx0aWYgKCFtYXRjaCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGN1cnJlbmN5IGZvcm1hdFwiKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgY3VycmVuY3kgPSBtYXRjaFsxXTtcblx0XHRcdGNvbnN0IGFtb3VudCA9IG1hdGNoWzJdO1xuXG5cdFx0XHRjb25zdCBtYXhpbXVtRnJhY3Rpb25EaWdpdHMgPSBhcmdzPy5bMF0gfHwgMjtcblx0XHRcdGNvbnN0IHJvdW5kaW5nSW5jcmVtZW50ID0gYXJncz8uWzFdIHx8IDU7XG5cblx0XHRcdGNvbnN0IG5mID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KGxvY2FsZS50b1N0cmluZygpLCB7XG5cdFx0XHRcdHN0eWxlOiBcImN1cnJlbmN5XCIsXG5cdFx0XHRcdGN1cnJlbmN5OiBjdXJyZW5jeSxcblx0XHRcdFx0bWF4aW11bUZyYWN0aW9uRGlnaXRzOiBtYXhpbXVtRnJhY3Rpb25EaWdpdHMsXG5cdFx0XHRcdHJvdW5kaW5nSW5jcmVtZW50OiByb3VuZGluZ0luY3JlbWVudCxcblx0XHRcdH0pO1xuXG5cdFx0XHRyZXR1cm4gbmYuZm9ybWF0KGFtb3VudCk7XG5cblx0XHRjYXNlIFwidGltZXN0YW1wXCI6XG5cdFx0XHRkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuXHRcdFx0dGltZXN0YW1wID0gZGF0ZS5nZXRUaW1lKCk7XG5cdFx0XHRpZiAoaXNOYU4odGltZXN0YW1wKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGRhdGVcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGltZXN0YW1wO1xuXG5cdFx0Y2FzZSBcInRpbWVcIjpcblx0XHRcdGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG5cdFx0XHRpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZGF0ZVwiKTtcblx0XHRcdH1cblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0bG9jYWxlID0gZ2V0TG9jYWxlT2ZEb2N1bWVudCgpO1xuXHRcdFx0XHRyZXR1cm4gZGF0ZS50b0xvY2FsZVRpbWVTdHJpbmcobG9jYWxlLnRvU3RyaW5nKCksIHtcblx0XHRcdFx0XHRob3VyMTI6IGZhbHNlLFxuXHRcdFx0XHR9KTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCBsb2NhbGUgb3IgbWlzc2luZyBmb3JtYXQgKCR7ZS5tZXNzYWdlfSlgKTtcblx0XHRcdH1cblxuXHRcdGNhc2UgXCJkYXRldGltZWZvcm1hdFwiOlxuXHRcdFx0ZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcblx0XHRcdGlmIChpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBkYXRlXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBvcHRpb25zID0ge1xuXHRcdFx0XHRkYXRlU3R5bGU6IFwibWVkaXVtXCIsXG5cdFx0XHRcdHRpbWVTdHlsZTogXCJtZWRpdW1cIixcblx0XHRcdFx0aG91cjEyOiBmYWxzZSxcblx0XHRcdH07XG5cblx0XHRcdGlmIChhcmdzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0b3B0aW9ucy5kYXRlU3R5bGUgPSBhcmdzLnNoaWZ0KCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChhcmdzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0b3B0aW9ucy50aW1lU3R5bGUgPSBhcmdzLnNoaWZ0KCk7XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGxvY2FsZSA9IGdldExvY2FsZU9mRG9jdW1lbnQoKS50b1N0cmluZygpO1xuXHRcdFx0XHRyZXR1cm4gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQobG9jYWxlLCBvcHRpb25zKS5mb3JtYXQoZGF0ZSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgbG9jYWxlIG9yIG1pc3NpbmcgZm9ybWF0ICgke2UubWVzc2FnZX0pYCk7XG5cdFx0XHR9XG5cblx0XHRjYXNlIFwiZGF0ZXRpbWVcIjpcblx0XHRcdGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG5cdFx0XHRpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZGF0ZVwiKTtcblx0XHRcdH1cblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0bG9jYWxlID0gZ2V0TG9jYWxlT2ZEb2N1bWVudCgpO1xuXHRcdFx0XHRyZXR1cm4gZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUudG9TdHJpbmcoKSwge1xuXHRcdFx0XHRcdGhvdXIxMjogZmFsc2UsXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGxvY2FsZSBvciBtaXNzaW5nIGZvcm1hdCAoJHtlLm1lc3NhZ2V9KWApO1xuXHRcdFx0fVxuXG5cdFx0Y2FzZSBcImRhdGVcIjpcblx0XHRcdGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG5cdFx0XHRpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZGF0ZVwiKTtcblx0XHRcdH1cblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0bG9jYWxlID0gZ2V0TG9jYWxlT2ZEb2N1bWVudCgpO1xuXHRcdFx0XHRyZXR1cm4gZGF0ZS50b0xvY2FsZURhdGVTdHJpbmcobG9jYWxlLnRvU3RyaW5nKCksIHtcblx0XHRcdFx0XHR5ZWFyOiBcIm51bWVyaWNcIixcblx0XHRcdFx0XHRtb250aDogXCIyLWRpZ2l0XCIsXG5cdFx0XHRcdFx0ZGF5OiBcIjItZGlnaXRcIixcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgbG9jYWxlIG9yIG1pc3NpbmcgZm9ybWF0ICgke2UubWVzc2FnZX0pYCk7XG5cdFx0XHR9XG5cblx0XHRjYXNlIFwieWVhclwiOlxuXHRcdFx0ZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcblx0XHRcdGlmIChpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBkYXRlXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGF0ZS5nZXRGdWxsWWVhcigpO1xuXG5cdFx0Y2FzZSBcIm1vbnRoXCI6XG5cdFx0XHRkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuXHRcdFx0aWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGRhdGVcIik7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkYXRlLmdldE1vbnRoKCkgKyAxO1xuXG5cdFx0Y2FzZSBcImRheVwiOlxuXHRcdFx0ZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcblx0XHRcdGlmIChpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBkYXRlXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGF0ZS5nZXREYXRlKCk7XG5cblx0XHRjYXNlIFwid2Vla2RheVwiOlxuXHRcdFx0ZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcblx0XHRcdGlmIChpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBkYXRlXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGF0ZS5nZXREYXkoKTtcblxuXHRcdGNhc2UgXCJob3VyXCI6XG5cdFx0Y2FzZSBcImhvdXJzXCI6XG5cdFx0XHRkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuXHRcdFx0aWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGRhdGVcIik7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkYXRlLmdldEhvdXJzKCk7XG5cblx0XHRjYXNlIFwibWludXRlXCI6XG5cdFx0Y2FzZSBcIm1pbnV0ZXNcIjpcblx0XHRcdGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG5cdFx0XHRpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZGF0ZVwiKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRhdGUuZ2V0TWludXRlcygpO1xuXG5cdFx0Y2FzZSBcInNlY29uZFwiOlxuXHRcdGNhc2UgXCJzZWNvbmRzXCI6XG5cdFx0XHRkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuXHRcdFx0aWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGRhdGVcIik7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkYXRlLmdldFNlY29uZHMoKTtcblxuXHRcdGNhc2UgXCJpMThuXCI6XG5cdFx0Y2FzZSBcInRyYW5zbGF0aW9uXCI6XG5cdFx0XHR0cmFuc2xhdGlvbnMgPSBnZXREb2N1bWVudFRyYW5zbGF0aW9ucygpO1xuXHRcdFx0aWYgKCEodHJhbnNsYXRpb25zIGluc3RhbmNlb2YgVHJhbnNsYXRpb25zKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nIHRyYW5zbGF0aW9uc1wiKTtcblx0XHRcdH1cblxuXHRcdFx0a2V5ID0gYXJncy5zaGlmdCgpIHx8IHVuZGVmaW5lZDtcblx0XHRcdGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRrZXkgPSB2YWx1ZTtcblx0XHRcdH1cblxuXHRcdFx0ZGVmYXVsdFZhbHVlID0gYXJncy5zaGlmdCgpIHx8IHVuZGVmaW5lZDtcblxuXHRcdFx0ZGVmYXVsdFZhbHVlID0gY29udmVydFNwZWNpYWxTdHJpbmdzKGRlZmF1bHRWYWx1ZSwgdmFsdWUpO1xuXG5cdFx0XHRyZXR1cm4gdHJhbnNsYXRpb25zLmdldFRleHQoa2V5LCBkZWZhdWx0VmFsdWUpO1xuXG5cdFx0Y2FzZSBcInNldC10b2dnbGVcIjpcblx0XHRjYXNlIFwic2V0LXNldFwiOlxuXHRcdGNhc2UgXCJzZXQtcmVtb3ZlXCI6XG5cdFx0XHRjb25zdCBtb2RpZmllciA9IGFyZ3Muc2hpZnQoKTtcblx0XHRcdGxldCBkZWxpbWl0ZXIgPSBhcmdzLnNoaWZ0KCk7XG5cdFx0XHRpZiAoZGVsaW1pdGVyID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0ZGVsaW1pdGVyID0gXCIgXCI7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHNldCA9IG5ldyBTZXQodmFsdWUuc3BsaXQoZGVsaW1pdGVyKSk7XG5cdFx0XHRjb25zdCB0b2dnbGUgPSBuZXcgU2V0KG1vZGlmaWVyLnNwbGl0KGRlbGltaXRlcikpO1xuXHRcdFx0aWYgKHRoaXMuY29tbWFuZCA9PT0gXCJzZXQtdG9nZ2xlXCIpIHtcblx0XHRcdFx0Zm9yIChjb25zdCB0IG9mIHRvZ2dsZSkge1xuXHRcdFx0XHRcdGlmIChzZXQuaGFzKHQpKSB7XG5cdFx0XHRcdFx0XHRzZXQuZGVsZXRlKHQpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzZXQuYWRkKHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmICh0aGlzLmNvbW1hbmQgPT09IFwic2V0LXNldFwiKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgdCBvZiB0b2dnbGUpIHtcblx0XHRcdFx0XHRzZXQuYWRkKHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMuY29tbWFuZCA9PT0gXCJzZXQtcmVtb3ZlXCIpIHtcblx0XHRcdFx0Zm9yIChjb25zdCB0IG9mIHRvZ2dsZSkge1xuXHRcdFx0XHRcdHNldC5kZWxldGUodCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBBcnJheS5mcm9tKHNldCkuam9pbihkZWxpbWl0ZXIpO1xuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdHRocm93IG5ldyBFcnJvcihgdW5rbm93biBjb21tYW5kICR7dGhpcy5jb21tYW5kfWApO1xuXHR9XG59XG5cbi8qKlxuICogY29udmVydHMgc3BlY2lhbCBzdHJpbmdzIHRvIHRoZWlyIHZhbHVlc1xuICogQHByaXZhdGVcbiAqIEBwYXJhbSBpbnB1dFxuICogQHBhcmFtIHZhbHVlXG4gKiBAcmV0dXJuIHt1bmRlZmluZWR8KnxudWxsfHN0cmluZ31cbiAqL1xuZnVuY3Rpb24gY29udmVydFNwZWNpYWxTdHJpbmdzKGlucHV0LCB2YWx1ZSkge1xuXHRzd2l0Y2ggKGlucHV0KSB7XG5cdFx0Y2FzZSBcInZhbHVlXCI6XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0Y2FzZSBcIlxcXFx2YWx1ZVwiOlxuXHRcdFx0cmV0dXJuIFwidmFsdWVcIjtcblx0XHRjYXNlIFwiXFxcXHVuZGVmaW5lZFwiOlxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRjYXNlIFwiXFxcXG51bGxcIjpcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRyZXR1cm4gaW5wdXQ7XG5cdH1cbn1cblxuLyoqXG4gKiBjaGVja3MgaWYgYSB2YWx1ZSBpcyB0cnVlIG9yIG5vdFxuICogQHBhcmFtIHZhbHVlXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBldmFsdWF0ZUNvbmRpdGlvbih2YWx1ZSkge1xuXHRjb25zdCBsb3dlclZhbHVlID0gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiID8gdmFsdWUudG9Mb3dlckNhc2UoKSA6IHZhbHVlO1xuXG5cdHJldHVybiAoXG5cdFx0KHZhbHVlICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdHZhbHVlICE9PSBudWxsICYmXG5cdFx0XHR2YWx1ZSAhPT0gXCJcIiAmJlxuXHRcdFx0bG93ZXJWYWx1ZSAhPT0gXCJvZmZcIiAmJlxuXHRcdFx0bG93ZXJWYWx1ZSAhPT0gXCJmYWxzZVwiICYmXG5cdFx0XHR2YWx1ZSAhPT0gZmFsc2UpIHx8XG5cdFx0bG93ZXJWYWx1ZSA9PT0gXCJvblwiIHx8XG5cdFx0bG93ZXJWYWx1ZSA9PT0gXCJ0cnVlXCIgfHxcblx0XHR2YWx1ZSA9PT0gdHJ1ZVxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgVHJhbnNmb3JtZXIgfSBmcm9tIFwiLi90cmFuc2Zvcm1lci5tanNcIjtcblxuZXhwb3J0IHsgUGlwZSB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBERUxJTUlURVIgPSBcInxcIjtcblxuLyoqXG4gKiBUaGUgcGlwZSBjbGFzcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBjb21iaW5lIHNldmVyYWwgcHJvY2Vzc2luZyBzdGVwcy5cbiAqXG4gKiBBIHBpcGUgY29uc2lzdHMgb2YgY29tbWFuZHMgd2hvc2UgaW5wdXQgYW5kIG91dHB1dCBhcmUgY29ubmVjdGVkIHdpdGggdGhlIHBpcGUgc3ltYm9sIGB8YC5cbiAqXG4gKiBXaXRoIHRoZSBQaXBlLCBwcm9jZXNzaW5nIHN0ZXBzIGNhbiBiZSBjb21iaW5lZC4gSGVyZSwgdGhlIHZhbHVlIG9mIGFuIG9iamVjdCBpcyBhY2Nlc3NlZCB2aWEgdGhlIHBhdGhmaW5kZXIgKHBhdGggY29tbWFuZCkuXG4gKiB0aGUgd29yZCBpcyB0aGVuIGNvbnZlcnRlZCB0byB1cHBlcmNhc2UgbGV0dGVycyBhbmQgYSBwcmVmaXggSGVsbG8gaXMgYWRkZWQuIHRoZSB0d28gYmFja3NsYXNoIHNhZmUgdGhlIHNwYWNlIGNoYXIuXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2xpYnJhcmllcy9waXBlL2V4YW1wbGUtMS9cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IFRoZSBwaXBlIGNsYXNzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGNvbWJpbmUgc2V2ZXJhbCBwcm9jZXNzaW5nIHN0ZXBzLlxuICovXG5jbGFzcyBQaXBlIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcGlwZSBhIHBpcGUgY29uc2lzdHMgb2YgY29tbWFuZHMgd2hvc2UgaW5wdXQgYW5kIG91dHB1dCBhcmUgY29ubmVjdGVkIHdpdGggdGhlIHBpcGUgc3ltYm9sIGB8YC5cblx0ICogQHRocm93cyB7VHlwZUVycm9yfVxuXHQgKi9cblx0Y29uc3RydWN0b3IocGlwZSkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dmFsaWRhdGVTdHJpbmcocGlwZSk7XG5cblx0XHR0aGlzLnBpcGUgPSBwaXBlLnNwbGl0KERFTElNSVRFUikubWFwKCh2KSA9PiB7XG5cdFx0XHRyZXR1cm4gbmV3IFRyYW5zZm9ybWVyKHYpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG5cdCAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBjb250ZXh0XG5cdCAqIEByZXR1cm4ge1RyYW5zZm9ybWVyfVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIGZ1bmN0aW9uXG5cdCAqL1xuXHRzZXRDYWxsYmFjayhuYW1lLCBjYWxsYmFjaywgY29udGV4dCkge1xuXHRcdGZvciAoY29uc3QgWywgdF0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5waXBlKSkge1xuXHRcdFx0dC5zZXRDYWxsYmFjayhuYW1lLCBjYWxsYmFjaywgY29udGV4dCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogcnVuIGEgcGlwZVxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IHZhbHVlXG5cdCAqIEByZXR1cm4geyp9XG5cdCAqL1xuXHRydW4odmFsdWUpIHtcblx0XHRyZXR1cm4gdGhpcy5waXBlLnJlZHVjZSgoYWNjdW11bGF0b3IsIHRyYW5zZm9ybWVyLCBjdXJyZW50SW5kZXgsIGFycmF5KSA9PiB7XG5cdFx0XHRyZXR1cm4gdHJhbnNmb3JtZXIucnVuKGFjY3VtdWxhdG9yKTtcblx0XHR9LCB2YWx1ZSk7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQgeyBQaXBlIH0gZnJvbSBcIi4uL2RhdGEvcGlwZS5tanNcIjtcblxuaW1wb3J0IHsgQmFzZVdpdGhPcHRpb25zIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2V3aXRob3B0aW9ucy5tanNcIjtcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZyB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlQXJyYXksIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBGb3JtYXR0ZXIgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgaW50ZXJuYWxPYmplY3RTeW1ib2wgPSBTeW1ib2woXCJpbnRlcm5hbE9iamVjdFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgd2F0Y2hkb2dTeW1ib2wgPSBTeW1ib2woXCJ3YXRjaGRvZ1wiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgbWFya2VyT3BlbkluZGV4U3ltYm9sID0gU3ltYm9sKFwibWFya2VyT3BlbkluZGV4XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBtYXJrZXJDbG9zZUluZGV4U3ltYm9sID0gU3ltYm9sKFwibWFya2VyY2xvc2VJbmRleFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgd29ya2luZ0RhdGFTeW1ib2wgPSBTeW1ib2woXCJ3b3JraW5nRGF0YVwiKTtcblxuLyoqXG4gKiBNZXNzYWdlcyBjYW4gYmUgZm9ybWF0dGVkIHdpdGggdGhlIGZvcm1hdHRlci4gVG8gZG8gdGhpcywgYW4gb2JqZWN0IHdpdGggdGhlIHZhbHVlcyBtdXN0IGJlIHBhc3NlZCB0byB0aGUgZm9ybWF0dGVyLiBUaGUgbWVzc2FnZSBjYW4gdGhlbiBjb250YWluIHBsYWNlaG9sZGVycy5cbiAqXG4gKiBMb29rIGF0IHRoZSBleGFtcGxlIGJlbG93LiBUaGUgcGxhY2Vob2xkZXJzIHVzZSB0aGUgbG9naWMgb2YgUGlwZS5cbiAqXG4gKiAjIyBNYXJrZXIgaW4gbWFya2VyXG4gKlxuICogTWFya2VycyBjYW4gYmUgbmVzdGVkLiBIZXJlLCB0aGUgaW5uZXIgbWFya2VyIGlzIHJlc29sdmVkIGZpcnN0IGAke3N1YmtleX0gXHUyMUE2IDEgPSAke215a2V5Mn1gIGFuZCB0aGVuIHRoZSBvdXRlciBtYXJrZXIgYCR7bXlrZXkyfWAuXG4gKlxuICogYGBgXG4gKiBjb25zdCB0ZXh0ID0gJyR7bXlrZXkke3N1YmtleX19JztcbiAqIGxldCBvYmogPSB7XG4gKiAgbXlrZXkyOiBcIjFcIixcbiAqICBzdWJrZXk6IFwiMlwiXG4gKiB9O1xuICpcbiAqIG5ldyBGb3JtYXR0ZXIob2JqKS5mb3JtYXQodGV4dCk7XG4gKiAvLyBcdTIxQTYgMVxuICogYGBgXG4gKlxuICogIyMgQ2FsbGJhY2tzXG4gKlxuICogVGhlIHZhbHVlcyBpbiBhIGZvcm1hdHRlciBjYW4gYmUgYWRqdXN0ZWQgdmlhIHRoZSBjb21tYW5kcyBvZiB0aGUgYFRyYW5zZm9ybWVyYCBvciB0aGVgUGlwZWAuXG4gKiBUaGVyZSBpcyBhbHNvIHRoZSBwb3NzaWJpbGl0eSB0byB1c2UgY2FsbGJhY2tzLlxuICpcbiAqIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBGb3JtYXR0ZXIoe3g6ICcxJ30sIHtcbiAqICAgICAgICAgICAgICAgIGNhbGxiYWNrczoge1xuICogICAgICAgICAgICAgICAgICAgIHF1b3RlOiAodmFsdWUpID0+IHtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdcIicgKyB2YWx1ZSArICdcIidcbiAqICAgICAgICAgICAgICAgICAgICB9XG4gKiAgICAgICAgICAgICAgICB9XG4gKiAgICAgICAgICAgIH0pO1xuICpcbiAqIGZvcm1hdHRlci5mb3JtYXQoJyR7eCB8IGNhbGw6cXVvdGV9JykpXG4gKiAvLyBcdTIxQTYgXCIxXCJcbiAqXG4gKiAjIyBNYXJrZXIgd2l0aCBwYXJhbWV0ZXJcbiAqXG4gKiBBIHN0cmluZyBjYW4gYWxzbyBicmluZyBpdHMgb3duIHZhbHVlcy4gVGhlc2UgbXVzdCB0aGVuIGJlIHNlcGFyYXRlZCBmcm9tIHRoZSBrZXkgYnkgYSBzZXBhcmF0b3IgYDo6YC5cbiAqIFRoZSB2YWx1ZXMgdGhlbXNlbHZlcyBtdXN0IGJlIHNwZWNpZmllZCBpbiBrZXkvdmFsdWUgcGFpcnMuIFRoZSBrZXkgbXVzdCBiZSBzZXBhcmF0ZWQgZnJvbSB0aGUgdmFsdWUgYnkgYSBzZXBhcmF0b3IgYD1gLlxuICpcbiAqIFdoZW4gdXNpbmcgYSBwaXBlLCB5b3UgbXVzdCBwYXkgYXR0ZW50aW9uIHRvIHRoZSBzZXBhcmF0b3JzLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogaW1wb3J0IHtGb3JtYXR0ZXJ9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL3RleHQvZm9ybWF0dGVyLm1qcyc7XG4gKlxuICogbmV3IEZvcm1hdHRlcih7XG4gKiAgICAgICBhOiB7XG4gKiAgICAgICAgICAgYjoge1xuICogICAgICAgICAgICAgICBjOiBcIkhlbGxvXCJcbiAqICAgICAgICAgICB9LFxuICogICAgICAgICAgIGQ6IFwid29ybGRcIixcbiAqICAgICAgIH1cbiAqICAgfSkuZm9ybWF0KFwiJHthLmIuY30gJHthLmQgfCB1Y2ZpcnN0fSFcIik7IC8vIHdpdGggcGlwZVxuICpcbiAqIC8vIFx1MjFBNiBIZWxsbyBXb3JsZCFcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjEyLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKi9cbmNsYXNzIEZvcm1hdHRlciBleHRlbmRzIEJhc2VXaXRoT3B0aW9ucyB7XG5cdC8qKlxuXHQgKiBEZWZhdWx0IHZhbHVlcyBmb3IgdGhlIG1hcmtlcnMgYXJlIGAke2AgYW5kIGB9YFxuXHQgKlxuXHQgKiBAcGFyYW0gb2JqZWN0XG5cdCAqIEBwYXJhbSBvcHRpb25zXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihvYmplY3QsIG9wdGlvbnMpIHtcblx0XHRzdXBlcihvcHRpb25zKTtcblx0XHR0aGlzW2ludGVybmFsT2JqZWN0U3ltYm9sXSA9IG9iamVjdCB8fCB7fTtcblx0XHR0aGlzW21hcmtlck9wZW5JbmRleFN5bWJvbF0gPSAwO1xuXHRcdHRoaXNbbWFya2VyQ2xvc2VJbmRleFN5bWJvbF0gPSAwO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBtYXJrZXJcblx0ICogQHByb3BlcnR5IHthcnJheX0gbWFya2VyLm9wZW49W1wiJHtcIl1cblx0ICogQHByb3BlcnR5IHthcnJheX0gbWFya2VyLmNsb3NlPVtcIiR7XCJdXG5cdCAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBwYXJhbWV0ZXJcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHBhcmFtZXRlci5kZWxpbWl0ZXI9XCI6OlwiXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwYXJhbWV0ZXIuYXNzaWdubWVudD1cIj1cIlxuXHQgKiBAcHJvcGVydHkge29iamVjdH0gY2FsbGJhY2tzPXt9XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIGV4dGVuZCh7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdG1hcmtlcjoge1xuXHRcdFx0XHRvcGVuOiBbXCIke1wiXSxcblx0XHRcdFx0Y2xvc2U6IFtcIn1cIl0sXG5cdFx0XHR9LFxuXHRcdFx0cGFyYW1ldGVyOiB7XG5cdFx0XHRcdGRlbGltaXRlcjogXCI6OlwiLFxuXHRcdFx0XHRhc3NpZ25tZW50OiBcIj1cIixcblx0XHRcdH0sXG5cdFx0XHRjYWxsYmFja3M6IHt9LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBuZXcgUGFyYW1ldGVyIENoYXJhY3RlclxuXHQgKlxuXHQgKiBEZWZhdWx0IHZhbHVlcyBmb3IgdGhlIGNoYXJzIGFyZSBgOjpgIGFuZCBgPWBcblx0ICpcblx0ICogYGBgXG5cdCAqIGZvcm1hdHRlci5zZXRQYXJhbWV0ZXJDaGFycygnIycpO1xuXHQgKiBmb3JtYXR0ZXIuc2V0UGFyYW1ldGVyQ2hhcnMoJ1snLCddJyk7XG5cdCAqIGZvcm1hdHRlci5zZXRQYXJhbWV0ZXJDaGFycygnaTE4bnsnLCd9Jyk7XG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gZGVsaW1pdGVyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBhc3NpZ25tZW50XG5cdCAqIEByZXR1cm4ge0Zvcm1hdHRlcn1cblx0ICogQHNpbmNlIDEuMjQuMFxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKi9cblx0c2V0UGFyYW1ldGVyQ2hhcnMoZGVsaW1pdGVyLCBhc3NpZ25tZW50KSB7XG5cdFx0aWYgKGRlbGltaXRlciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXVtcInBhcmFtZXRlclwiXVtcImRlbGltaXRlclwiXSA9XG5cdFx0XHRcdHZhbGlkYXRlU3RyaW5nKGRlbGltaXRlcik7XG5cdFx0fVxuXG5cdFx0aWYgKGFzc2lnbm1lbnQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJwYXJhbWV0ZXJcIl1bXCJhc3NpZ25tZW50XCJdID1cblx0XHRcdFx0dmFsaWRhdGVTdHJpbmcoYXNzaWdubWVudCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IG5ldyBNYXJrZXJcblx0ICpcblx0ICogRGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBtYXJrZXJzIGFyZSBgJHtgIGFuZCBgfWBcblx0ICpcblx0ICogYGBgXG5cdCAqIGZvcm1hdHRlci5zZXRNYXJrZXIoJyMnKTsgLy8gb3BlbiBhbmQgY2xvc2UgYXJlIGJvdGggI1xuXHQgKiBmb3JtYXR0ZXIuc2V0TWFya2VyKCdbJywnXScpO1xuXHQgKiBmb3JtYXR0ZXIuc2V0TWFya2VyKCdpMThueycsJ30nKTtcblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwYXJhbSB7YXJyYXl8c3RyaW5nfSBvcGVuXG5cdCAqIEBwYXJhbSB7YXJyYXl8c3RyaW5nfHVuZGVmaW5lZH0gY2xvc2Vcblx0ICogQHJldHVybiB7Rm9ybWF0dGVyfVxuXHQgKiBAc2luY2UgMS4xMi4wXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqL1xuXHRzZXRNYXJrZXIob3BlbiwgY2xvc2UpIHtcblx0XHRpZiAoY2xvc2UgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y2xvc2UgPSBvcGVuO1xuXHRcdH1cblxuXHRcdGlmIChpc1N0cmluZyhvcGVuKSkgb3BlbiA9IFtvcGVuXTtcblx0XHRpZiAoaXNTdHJpbmcoY2xvc2UpKSBjbG9zZSA9IFtjbG9zZV07XG5cblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXVtcIm1hcmtlclwiXVtcIm9wZW5cIl0gPSB2YWxpZGF0ZUFycmF5KG9wZW4pO1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wibWFya2VyXCJdW1wiY2xvc2VcIl0gPSB2YWxpZGF0ZUFycmF5KGNsb3NlKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0b28gZGVlcCBuZXN0aW5nXG5cdCAqL1xuXHRmb3JtYXQodGV4dCkge1xuXHRcdHRoaXNbd2F0Y2hkb2dTeW1ib2xdID0gMDtcblx0XHR0aGlzW21hcmtlck9wZW5JbmRleFN5bWJvbF0gPSAwO1xuXHRcdHRoaXNbbWFya2VyQ2xvc2VJbmRleFN5bWJvbF0gPSAwO1xuXHRcdHRoaXNbd29ya2luZ0RhdGFTeW1ib2xdID0ge307XG5cdFx0cmV0dXJuIGZvcm1hdC5jYWxsKHRoaXMsIHRleHQpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZm9ybWF0KHRleHQpIHtcblx0dGhpc1t3YXRjaGRvZ1N5bWJvbF0rKztcblx0aWYgKHRoaXNbd2F0Y2hkb2dTeW1ib2xdID4gMjApIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0b28gZGVlcCBuZXN0aW5nXCIpO1xuXHR9XG5cblx0Y29uc3Qgb3Blbk1hcmtlciA9XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJtYXJrZXJcIl1bXCJvcGVuXCJdPy5bdGhpc1ttYXJrZXJPcGVuSW5kZXhTeW1ib2xdXTtcblx0Y29uc3QgY2xvc2VNYXJrZXIgPVxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wibWFya2VyXCJdW1wiY2xvc2VcIl0/Llt0aGlzW21hcmtlckNsb3NlSW5kZXhTeW1ib2xdXTtcblxuXHQvLyBjb250YWlucyBubyBwbGFjZWhvbGRlcnNcblx0aWYgKHRleHQuaW5kZXhPZihvcGVuTWFya2VyKSA9PT0gLTEgfHwgdGV4dC5pbmRleE9mKGNsb3NlTWFya2VyKSA9PT0gLTEpIHtcblx0XHRyZXR1cm4gdGV4dDtcblx0fVxuXG5cdGxldCByZXN1bHQgPSB0b2tlbml6ZS5jYWxsKFxuXHRcdHRoaXMsXG5cdFx0dmFsaWRhdGVTdHJpbmcodGV4dCksXG5cdFx0b3Blbk1hcmtlcixcblx0XHRjbG9zZU1hcmtlcixcblx0KTtcblxuXHRpZiAoXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJtYXJrZXJcIl1bXCJvcGVuXCJdPy5bdGhpc1ttYXJrZXJPcGVuSW5kZXhTeW1ib2xdICsgMV1cblx0KSB7XG5cdFx0dGhpc1ttYXJrZXJPcGVuSW5kZXhTeW1ib2xdKys7XG5cdH1cblxuXHRpZiAoXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJtYXJrZXJcIl1bXCJjbG9zZVwiXT8uW3RoaXNbbWFya2VyQ2xvc2VJbmRleFN5bWJvbF0gKyAxXVxuXHQpIHtcblx0XHR0aGlzW21hcmtlckNsb3NlSW5kZXhTeW1ib2xdKys7XG5cdH1cblxuXHRyZXN1bHQgPSBmb3JtYXQuY2FsbCh0aGlzLCByZXN1bHQpO1xuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTIuMFxuICogQHBhcmFtIHRleHRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemUodGV4dCwgb3Blbk1hcmtlciwgY2xvc2VNYXJrZXIpIHtcblx0Y29uc3QgZm9ybWF0dGVkID0gW107XG5cblx0Y29uc3QgcGFyYW1ldGVyQXNzaWdubWVudCA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wicGFyYW1ldGVyXCJdW1wiYXNzaWdubWVudFwiXTtcblx0Y29uc3QgcGFyYW1ldGVyRGVsaW1pdGVyID0gdGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJwYXJhbWV0ZXJcIl1bXCJkZWxpbWl0ZXJcIl07XG5cdGNvbnN0IGNhbGxiYWNrcyA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wiY2FsbGJhY2tzXCJdO1xuXG5cdHdoaWxlICh0cnVlKSB7XG5cdFx0Y29uc3Qgc3RhcnRJbmRleCA9IHRleHQuaW5kZXhPZihvcGVuTWFya2VyKTtcblx0XHQvLyBubyBtYXJrZXJcblx0XHRpZiAoc3RhcnRJbmRleCA9PT0gLTEpIHtcblx0XHRcdGZvcm1hdHRlZC5wdXNoKHRleHQpO1xuXHRcdFx0YnJlYWs7XG5cdFx0fSBlbHNlIGlmIChzdGFydEluZGV4ID4gMCkge1xuXHRcdFx0Zm9ybWF0dGVkLnB1c2godGV4dC5zdWJzdHJpbmcoMCwgc3RhcnRJbmRleCkpO1xuXHRcdFx0dGV4dCA9IHRleHQuc3Vic3RyaW5nKHN0YXJ0SW5kZXgpO1xuXHRcdH1cblxuXHRcdGxldCBlbmRJbmRleCA9IHRleHQuc3Vic3RyaW5nKG9wZW5NYXJrZXIubGVuZ3RoKS5pbmRleE9mKGNsb3NlTWFya2VyKTtcblx0XHRpZiAoZW5kSW5kZXggIT09IC0xKSBlbmRJbmRleCArPSBvcGVuTWFya2VyLmxlbmd0aDtcblx0XHRsZXQgaW5zaWRlU3RhcnRJbmRleCA9IHRleHRcblx0XHRcdC5zdWJzdHJpbmcob3Blbk1hcmtlci5sZW5ndGgpXG5cdFx0XHQuaW5kZXhPZihvcGVuTWFya2VyKTtcblx0XHRpZiAoaW5zaWRlU3RhcnRJbmRleCAhPT0gLTEpIHtcblx0XHRcdGluc2lkZVN0YXJ0SW5kZXggKz0gb3Blbk1hcmtlci5sZW5ndGg7XG5cdFx0XHRpZiAoaW5zaWRlU3RhcnRJbmRleCA8IGVuZEluZGV4KSB7XG5cdFx0XHRcdGNvbnN0IHJlc3VsdCA9IHRva2VuaXplLmNhbGwoXG5cdFx0XHRcdFx0dGhpcyxcblx0XHRcdFx0XHR0ZXh0LnN1YnN0cmluZyhpbnNpZGVTdGFydEluZGV4KSxcblx0XHRcdFx0XHRvcGVuTWFya2VyLFxuXHRcdFx0XHRcdGNsb3NlTWFya2VyLFxuXHRcdFx0XHQpO1xuXHRcdFx0XHR0ZXh0ID0gdGV4dC5zdWJzdHJpbmcoMCwgaW5zaWRlU3RhcnRJbmRleCkgKyByZXN1bHQ7XG5cdFx0XHRcdGVuZEluZGV4ID0gdGV4dC5zdWJzdHJpbmcob3Blbk1hcmtlci5sZW5ndGgpLmluZGV4T2YoY2xvc2VNYXJrZXIpO1xuXHRcdFx0XHRpZiAoZW5kSW5kZXggIT09IC0xKSBlbmRJbmRleCArPSBvcGVuTWFya2VyLmxlbmd0aDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZW5kSW5kZXggPT09IC0xKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJzeW50YXggZXJyb3IgaW4gZm9ybWF0dGVyIHRlbXBsYXRlXCIpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGtleSA9IHRleHQuc3Vic3RyaW5nKG9wZW5NYXJrZXIubGVuZ3RoLCBlbmRJbmRleCk7XG5cdFx0Y29uc3QgcGFydHMgPSBrZXkuc3BsaXQocGFyYW1ldGVyRGVsaW1pdGVyKTtcblx0XHRjb25zdCBjdXJyZW50UGlwZSA9IHBhcnRzLnNoaWZ0KCk7XG5cblx0XHR0aGlzW3dvcmtpbmdEYXRhU3ltYm9sXSA9IGV4dGVuZChcblx0XHRcdHt9LFxuXHRcdFx0dGhpc1tpbnRlcm5hbE9iamVjdFN5bWJvbF0sXG5cdFx0XHR0aGlzW3dvcmtpbmdEYXRhU3ltYm9sXSxcblx0XHQpO1xuXG5cdFx0Zm9yIChjb25zdCBrdiBvZiBwYXJ0cykge1xuXHRcdFx0Y29uc3QgW2ssIHZdID0ga3Yuc3BsaXQocGFyYW1ldGVyQXNzaWdubWVudCk7XG5cdFx0XHR0aGlzW3dvcmtpbmdEYXRhU3ltYm9sXVtrXSA9IHY7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdDEgPSBrZXkuc3BsaXQoXCJ8XCIpLnNoaWZ0KCkudHJpbSgpOyAvLyBwaXBlIHN5bWJvbFxuXHRcdGNvbnN0IHQyID0gdDEuc3BsaXQoXCI6OlwiKS5zaGlmdCgpLnRyaW0oKTsgLy8ga2V5IHZhbHVlIGRlbGltaXRlclxuXHRcdGNvbnN0IHQzID0gdDIuc3BsaXQoXCIuXCIpLnNoaWZ0KCkudHJpbSgpOyAvLyBwYXRoIGRlbGltaXRlclxuXHRcdGNvbnN0IHByZWZpeCA9IHRoaXNbd29ya2luZ0RhdGFTeW1ib2xdPy5bdDNdID8gXCJwYXRoOlwiIDogXCJzdGF0aWM6XCI7XG5cblx0XHRsZXQgY29tbWFuZCA9IFwiXCI7XG5cdFx0aWYgKFxuXHRcdFx0cHJlZml4ICYmXG5cdFx0XHRrZXkuaW5kZXhPZihwcmVmaXgpICE9PSAwICYmXG5cdFx0XHRrZXkuaW5kZXhPZihcInBhdGg6XCIpICE9PSAwICYmXG5cdFx0XHRrZXkuaW5kZXhPZihcInN0YXRpYzpcIikgIT09IDBcblx0XHQpIHtcblx0XHRcdGNvbW1hbmQgPSBwcmVmaXg7XG5cdFx0fVxuXG5cdFx0Y29tbWFuZCArPSBjdXJyZW50UGlwZTtcblxuXHRcdGNvbnN0IHBpcGUgPSBuZXcgUGlwZShjb21tYW5kKTtcblxuXHRcdGlmIChpc09iamVjdChjYWxsYmFja3MpKSB7XG5cdFx0XHRmb3IgKGNvbnN0IFtuYW1lLCBjYWxsYmFja10gb2YgT2JqZWN0LmVudHJpZXMoY2FsbGJhY2tzKSkge1xuXHRcdFx0XHRwaXBlLnNldENhbGxiYWNrKG5hbWUsIGNhbGxiYWNrKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmb3JtYXR0ZWQucHVzaCh2YWxpZGF0ZVN0cmluZyhwaXBlLnJ1bih0aGlzW3dvcmtpbmdEYXRhU3ltYm9sXSkpKTtcblxuXHRcdHRleHQgPSB0ZXh0LnN1YnN0cmluZyhlbmRJbmRleCArIGNsb3NlTWFya2VyLmxlbmd0aCk7XG5cdH1cblxuXHRyZXR1cm4gZm9ybWF0dGVkLmpvaW4oXCJcIik7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gXCIuL2lzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVBcnJheSwgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IE1lZGlhVHlwZSwgcGFyc2VNZWRpYVR5cGUgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgaW50ZXJuYWwgPSBTeW1ib2woXCJpbnRlcm5hbFwiKTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBQYXJhbWV0ZXJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBrZXlcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2YWx1ZVxuICovXG5cbi8qKlxuICogWW91IGNhbiBjcmVhdGUgYW4gb2JqZWN0IHZpYSB0aGUgbW9uc3RlciBuYW1lc3BhY2UgYG5ldyBNb25zdGVyLlR5cGVzLk1lZGlhVHlwZSgpYC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuY2xhc3MgTWVkaWFUeXBlIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gc3VidHlwZVxuXHQgKiBAcGFyYW0ge01vbnN0ZXIuVHlwZXMuUGFyYW1ldGVyW119IHBhcmFtZXRlclxuXHQgKi9cblx0Y29uc3RydWN0b3IodHlwZSwgc3VidHlwZSwgcGFyYW1ldGVyKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXNbaW50ZXJuYWxdID0ge1xuXHRcdFx0dHlwZTogdmFsaWRhdGVTdHJpbmcodHlwZSkudG9Mb3dlckNhc2UoKSxcblx0XHRcdHN1YnR5cGU6IHZhbGlkYXRlU3RyaW5nKHN1YnR5cGUpLnRvTG93ZXJDYXNlKCksXG5cdFx0XHRwYXJhbWV0ZXI6IFtdLFxuXHRcdH07XG5cblx0XHRpZiAocGFyYW1ldGVyICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXNbaW50ZXJuYWxdW1wicGFyYW1ldGVyXCJdID0gdmFsaWRhdGVBcnJheShwYXJhbWV0ZXIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvdHlwZXMvbWVkaWEtdHlwZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtTdHJpbmd9XG5cdCAqL1xuXHRnZXQgdHlwZSgpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbF0udHlwZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtTdHJpbmd9XG5cdCAqL1xuXHRnZXQgc3VidHlwZSgpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbF0uc3VidHlwZTtcblx0fVxuXG5cdC8vIC8qKlxuXHQvLyAgKiBAcmV0dXJuIHtNb25zdGVyLlR5cGVzLlBhcmFtZXRlcltdfVxuXHQvLyAgKi9cblx0Ly8gZ2V0IHBhcmFtZXRlcigpIHtcblx0Ly8gXHRyZXR1cm4gdGhpc1tpbnRlcm5hbF0ucGFyYW1ldGVyO1xuXHQvLyB9XG5cblx0LyoqXG5cdCAqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01hcH1cblx0ICovXG5cdGdldCBwYXJhbWV0ZXIoKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gbmV3IE1hcCgpO1xuXG5cdFx0dGhpc1tpbnRlcm5hbF1bXCJwYXJhbWV0ZXJcIl0uZm9yRWFjaCgocCkgPT4ge1xuXHRcdFx0bGV0IHZhbHVlID0gcC52YWx1ZTtcblxuXHRcdFx0Ly8gaW50ZXJuYWxseSBzcGVjaWFsIHZhbHVlcyBhcmUgcGFydGx5IHN0b3JlZCB3aXRoIHF1b3RlcywgdGhpcyBmdW5jdGlvbiByZW1vdmVzIHRoZW0uXG5cdFx0XHRpZiAodmFsdWUuc3RhcnRzV2l0aCgnXCInKSAmJiB2YWx1ZS5lbmRzV2l0aCgnXCInKSkge1xuXHRcdFx0XHR2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygxLCB2YWx1ZS5sZW5ndGggLSAxKTtcblx0XHRcdH1cblxuXHRcdFx0cmVzdWx0LnNldChwLmtleSwgdmFsdWUpO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHR0b1N0cmluZygpIHtcblx0XHRjb25zdCBwYXJhbWV0ZXIgPSBbXTtcblx0XHRmb3IgKGNvbnN0IGEgb2YgdGhpc1tpbnRlcm5hbF0ucGFyYW1ldGVyKSB7XG5cdFx0XHRwYXJhbWV0ZXIucHVzaChgJHthLmtleX09JHthLnZhbHVlfWApO1xuXHRcdH1cblxuXHRcdHJldHVybiBgJHt0aGlzW2ludGVybmFsXS50eXBlfS8ke3RoaXNbaW50ZXJuYWxdLnN1YnR5cGV9JHtcblx0XHRcdHBhcmFtZXRlci5sZW5ndGggPiAwID8gYDske3BhcmFtZXRlci5qb2luKFwiO1wiKX1gIDogXCJcIlxuXHRcdH1gO1xuXHR9XG59XG5cbi8qKlxuICogWW91IGNhbiBjYWxsIHRoZSBmdW5jdGlvbiB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBNb25zdGVyLlR5cGVzLnBhcnNlTWVkaWFUeXBlKClgLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge01vbnN0ZXJ9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL21vbnN0ZXIubWpzJztcbiAqIGNvbnNvbGUubG9nKE1vbnN0ZXIuVHlwZXMucGFyc2VNZWRpYVR5cGUoKSlcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBhbHNvIGludGVncmF0ZSB0aGlzIGZ1bmN0aW9uIGluZGl2aWR1YWxseS5cbiAqXG4gKiBgYGBcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHtwYXJzZU1lZGlhVHlwZX0gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvdHlwZXMvZGF0YXVybC5tanMnO1xuICogY29uc29sZS5sb2cocGFyc2VNZWRpYVR5cGUoKSlcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogU3BlY2lmaWNhdGlvbjpcbiAqXG4gKiBgYGBcbiAqIGRhdGF1cmwgICAgOj0gXCJkYXRhOlwiIFsgbWVkaWF0eXBlIF0gWyBcIjtiYXNlNjRcIiBdIFwiLFwiIGRhdGFcbiAqIG1lZGlhdHlwZSAgOj0gWyB0eXBlIFwiL1wiIHN1YnR5cGUgXSAqKCBcIjtcIiBwYXJhbWV0ZXIgKVxuICogZGF0YSAgICAgICA6PSAqdXJsY2hhclxuICogcGFyYW1ldGVyICA6PSBhdHRyaWJ1dGUgXCI9XCIgdmFsdWVcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBtZWRpYXR5cGVcbiAqIEByZXR1cm4ge01vbnN0ZXIuVHlwZXMuTWVkaWFUeXBlfVxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzIwNDUjc2VjdGlvbi01LjFcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdGhlIG1pbWV0eXBlIGNhbiBub3QgYmUgcGFyc2VkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IGJsYW5rIHZhbHVlIGlzIG5vdCBhbGxvd2VkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IG1hbGZvcm1lZCBkYXRhIHVybFxuICovXG5mdW5jdGlvbiBwYXJzZU1lZGlhVHlwZShtZWRpYXR5cGUpIHtcblx0Y29uc3QgcmVnZXggPVxuXHRcdC8oPzx0eXBlPltBLVphLXpdK3xcXCopXFwvKD88c3VidHlwZT4oW2EtekEtWjAtOS5cXCtfXFwtXSspfFxcKnwpKD88cGFyYW1ldGVyPlxccyo7XFxzKihbYS16QS1aMC05XSspXFxzKig9XFxzKihcIj9bQS1aYS16MC05X1xcLV0rXCI/KSk/KSovZztcblx0Y29uc3QgcmVzdWx0ID0gcmVnZXguZXhlYyh2YWxpZGF0ZVN0cmluZyhtZWRpYXR5cGUpKTtcblxuXHRjb25zdCBncm91cHMgPSByZXN1bHQ/LltcImdyb3Vwc1wiXTtcblx0aWYgKGdyb3VwcyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInRoZSBtaW1ldHlwZSBjYW4gbm90IGJlIHBhcnNlZFwiKTtcblx0fVxuXG5cdGNvbnN0IHR5cGUgPSBncm91cHM/LltcInR5cGVcIl07XG5cdGNvbnN0IHN1YnR5cGUgPSBncm91cHM/LltcInN1YnR5cGVcIl07XG5cdGNvbnN0IHBhcmFtZXRlciA9IGdyb3Vwcz8uW1wicGFyYW1ldGVyXCJdO1xuXG5cdGlmIChzdWJ0eXBlID09PSBcIlwiIHx8IHR5cGUgPT09IFwiXCIpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwiYmxhbmsgdmFsdWUgaXMgbm90IGFsbG93ZWRcIik7XG5cdH1cblxuXHRyZXR1cm4gbmV3IE1lZGlhVHlwZSh0eXBlLCBzdWJ0eXBlLCBwYXJzZVBhcmFtZXRlcihwYXJhbWV0ZXIpKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xOC4wXG4gKiBAcGFyYW0ge1N0cmluZ30gcGFyYW1ldGVyXG4gKiBAcmV0dXJuIHtNb25zdGVyLlR5cGVzLlBhcmFtZXRlcltdfHVuZGVmaW5lZH1cbiAqL1xuZnVuY3Rpb24gcGFyc2VQYXJhbWV0ZXIocGFyYW1ldGVyKSB7XG5cdGlmICghaXNTdHJpbmcocGFyYW1ldGVyKSkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRjb25zdCByZXN1bHQgPSBbXTtcblxuXHRwYXJhbWV0ZXIuc3BsaXQoXCI7XCIpLmZvckVhY2goKGVudHJ5KSA9PiB7XG5cdFx0ZW50cnkgPSBlbnRyeS50cmltKCk7XG5cdFx0aWYgKGVudHJ5ID09PSBcIlwiKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3Qga3YgPSBlbnRyeS5zcGxpdChcIj1cIik7XG5cblx0XHRjb25zdCBrZXkgPSB2YWxpZGF0ZVN0cmluZyhrdj8uWzBdKS50cmltKCk7XG5cdFx0Y29uc3QgdmFsdWUgPSB2YWxpZGF0ZVN0cmluZyhrdj8uWzFdKS50cmltKCk7XG5cblx0XHQvLyBpZiB2YWx1ZXMgYXJlIHF1b3RlZCwgdGhleSByZW1haW4gc28gaW50ZXJuYWxseVxuXHRcdHJlc3VsdC5wdXNoKHtcblx0XHRcdGtleToga2V5LFxuXHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdH0pO1xuXHR9KTtcblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tIFwiLi9pcy5tanNcIjtcbmltcG9ydCB7IE1lZGlhVHlwZSwgcGFyc2VNZWRpYVR5cGUgfSBmcm9tIFwiLi9tZWRpYXR5cGUubWpzXCI7XG5pbXBvcnQge1xuXHR2YWxpZGF0ZUJvb2xlYW4sXG5cdHZhbGlkYXRlSW5zdGFuY2UsXG5cdHZhbGlkYXRlU3RyaW5nLFxufSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IERhdGFVcmwsIHBhcnNlRGF0YVVSTCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpbnRlcm5hbCA9IFN5bWJvbChcImludGVybmFsXCIpO1xuXG4vKipcbiAqIFlvdSBjYW4gY3JlYXRlIGFuIG9iamVjdCB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBuZXcgRGF0YVVybCgpYC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9CYXNpY3Nfb2ZfSFRUUC9EYXRhX1VSSXNcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmMyMzk3XG4gKi9cbmNsYXNzIERhdGFVcmwgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBjb250ZW50XG5cdCAqIEBwYXJhbSB7U3RyaW5nfE1lZGlhVHlwZX0gbWVkaWF0eXBlXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gYmFzZTY0PXRydWVcblx0ICovXG5cdGNvbnN0cnVjdG9yKGNvbnRlbnQsIG1lZGlhdHlwZSwgYmFzZTY0KSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmIChpc1N0cmluZyhtZWRpYXR5cGUpKSB7XG5cdFx0XHRtZWRpYXR5cGUgPSBwYXJzZU1lZGlhVHlwZShtZWRpYXR5cGUpO1xuXHRcdH1cblxuXHRcdHRoaXNbaW50ZXJuYWxdID0ge1xuXHRcdFx0Y29udGVudDogdmFsaWRhdGVTdHJpbmcoY29udGVudCksXG5cdFx0XHRtZWRpYXR5cGU6IHZhbGlkYXRlSW5zdGFuY2UobWVkaWF0eXBlLCBNZWRpYVR5cGUpLFxuXHRcdFx0YmFzZTY0OiB2YWxpZGF0ZUJvb2xlYW4oYmFzZTY0ID09PSB1bmRlZmluZWQgPyB0cnVlIDogYmFzZTY0KSxcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci90eXBlcy9kYXRhLXVybFwiKTtcblx0fVxuXG5cdGdldCBjb250ZW50KCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsXS5iYXNlNjRcblx0XHRcdD8gYXRvYih0aGlzW2ludGVybmFsXS5jb250ZW50KVxuXHRcdFx0OiB0aGlzW2ludGVybmFsXS5jb250ZW50O1xuXHR9XG5cblx0Z2V0IG1lZGlhdHlwZSgpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbF0ubWVkaWF0eXBlO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzIzOTdcblx0ICovXG5cdHRvU3RyaW5nKCkge1xuXHRcdGxldCBjb250ZW50ID0gdGhpc1tpbnRlcm5hbF0uY29udGVudDtcblxuXHRcdGlmICh0aGlzW2ludGVybmFsXS5iYXNlNjQgPT09IHRydWUpIHtcblx0XHRcdGNvbnRlbnQgPSBgO2Jhc2U2NCwke2NvbnRlbnR9YDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29udGVudCA9IGAsJHtlbmNvZGVVUklDb21wb25lbnQoY29udGVudCl9YDtcblx0XHR9XG5cblx0XHRyZXR1cm4gYGRhdGE6JHt0aGlzW2ludGVybmFsXS5tZWRpYXR5cGUudG9TdHJpbmcoKX0ke2NvbnRlbnR9YDtcblx0fVxufVxuXG4vKipcbiAqIFlvdSBjYW4gY2FsbCB0aGUgZnVuY3Rpb24gdmlhIHRoZSBtb25zdGVyIG5hbWVzcGFjZSBgcGFyc2VEYXRhVVJMKClgLlxuICpcbiAqIFNwZWNpZmljYXRpb246XG4gKlxuICogYGBgXG4gKiBkYXRhdXJsICAgIDo9IFwiZGF0YTpcIiBbIG1lZGlhdHlwZSBdIFsgXCI7YmFzZTY0XCIgXSBcIixcIiBkYXRhXG4gKiBtZWRpYXR5cGUgIDo9IFsgdHlwZSBcIi9cIiBzdWJ0eXBlIF0gKiggXCI7XCIgcGFyYW1ldGVyIClcbiAqIGRhdGEgICAgICAgOj0gKnVybGNoYXJcbiAqIHBhcmFtZXRlciAgOj0gYXR0cmlidXRlIFwiPVwiIHZhbHVlXG4gKiBgYGBcbiAqXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvQmFzaWNzX29mX0hUVFAvRGF0YV9VUklzXG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMjM5N1xuICogQHRocm93cyB7VHlwZUVycm9yfSBpbmNvcnJlY3Qgb3IgbWlzc2luZyBkYXRhIHByb3RvY29sXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IG1hbGZvcm1lZCBkYXRhIHVybFxuICogQHBhcmFtIHtzdHJpbmd9IGRhdGF1cmxcbiAqIEByZXR1cm4ge0RhdGFVcmx9XG4gKi9cbmZ1bmN0aW9uIHBhcnNlRGF0YVVSTChkYXRhdXJsKSB7XG5cdHZhbGlkYXRlU3RyaW5nKGRhdGF1cmwpO1xuXG5cdGRhdGF1cmwgPSBkYXRhdXJsLnRyaW0oKTtcblxuXHRpZiAoZGF0YXVybC5zdWJzdHJpbmcoMCwgNSkgIT09IFwiZGF0YTpcIikge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJpbmNvcnJlY3Qgb3IgbWlzc2luZyBkYXRhIHByb3RvY29sXCIpO1xuXHR9XG5cblx0ZGF0YXVybCA9IGRhdGF1cmwuc3Vic3RyaW5nKDUpO1xuXG5cdGNvbnN0IHAgPSBkYXRhdXJsLmluZGV4T2YoXCIsXCIpO1xuXHRpZiAocCA9PT0gLTEpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwibWFsZm9ybWVkIGRhdGEgdXJsXCIpO1xuXHR9XG5cblx0bGV0IGNvbnRlbnQgPSBkYXRhdXJsLnN1YnN0cmluZyhwICsgMSk7XG5cdGNvbnN0IG1lZGlhdHlwZUFuZEJhc2U2NCA9IGRhdGF1cmwuc3Vic3RyaW5nKDAsIHApLnRyaW0oKTtcblx0bGV0IG1lZGlhdHlwZSA9IFwidGV4dC9wbGFpbjtjaGFyc2V0PVVTLUFTQ0lJXCI7XG5cdGxldCBiYXNlNjRGbGFnID0gZmFsc2U7XG5cblx0aWYgKG1lZGlhdHlwZUFuZEJhc2U2NCAhPT0gXCJcIikge1xuXHRcdG1lZGlhdHlwZSA9IG1lZGlhdHlwZUFuZEJhc2U2NDtcblx0XHRpZiAobWVkaWF0eXBlQW5kQmFzZTY0LmVuZHNXaXRoKFwiYmFzZTY0XCIpKSB7XG5cdFx0XHRjb25zdCBpID0gbWVkaWF0eXBlQW5kQmFzZTY0Lmxhc3RJbmRleE9mKFwiO1wiKTtcblx0XHRcdG1lZGlhdHlwZSA9IG1lZGlhdHlwZUFuZEJhc2U2NC5zdWJzdHJpbmcoMCwgaSk7XG5cdFx0XHRiYXNlNjRGbGFnID0gdHJ1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29udGVudCA9IGRlY29kZVVSSUNvbXBvbmVudChjb250ZW50KTtcblx0XHR9XG5cblx0XHRtZWRpYXR5cGUgPSBwYXJzZU1lZGlhVHlwZShtZWRpYXR5cGUpO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnRlbnQgPSBkZWNvZGVVUklDb21wb25lbnQoY29udGVudCk7XG5cdH1cblxuXHRyZXR1cm4gbmV3IERhdGFVcmwoY29udGVudCwgbWVkaWF0eXBlLCBiYXNlNjRGbGFnKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZS5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgUXVldWUgfTtcblxuLyoqXG4gKiBBIHF1ZXVlIGlzIGEgbGlzdCBvZiBpdGVtcyB0aGF0IGFyZSBwcm9jZXNzZWQgb25lIGFmdGVyIGFub3RoZXIgKGZpcnN0IGluLCBmaXJzdCBvdXQpLlxuICpcbiAqIFdpdGggYSBxdWV1ZSB5b3UgY2FuIGFkZCBpdGVtcyB0byB0aGUgZW5kIG9mIHRoZSBsaXN0IGBRdWV1ZS5hZGQoKWAgYW5kIHJlbW92ZSBpdGVtcyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpc3QgYFF1ZXVlLnBvcCgpYC5cbiAqXG4gKiBXaXRoIGBRdWV1ZS5wZWVrKClgIHlvdSBjYW4gZ2V0IHRoZSBmaXJzdCBpdGVtIHdpdGhvdXQgcmVtb3ZpbmcgaXQgZnJvbSB0aGUgbGlzdC5cbiAqXG4gKiBZb3UgY2FuIGNyZWF0ZSB0aGUgaW5zdGFuY2UgdmlhIGBuZXcgUXVldWUoKWAuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS40LjBcbiAqIEBzdW1tYXJ5IEEgUXVldWUgKEZpZm8pXG4gKi9cbmNsYXNzIFF1ZXVlIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLmRhdGEgPSBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvdHlwZXMvcXVldWVcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGlzRW1wdHkoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZGF0YS5sZW5ndGggPT09IDA7XG5cdH1cblxuXHQvKipcblx0ICogUmVhZCB0aGUgZWxlbWVudCBhdCB0aGUgZnJvbnQgb2YgdGhlIHF1ZXVlIHdpdGhvdXQgcmVtb3ZpbmcgaXQuXG5cdCAqXG5cdCAqIEByZXR1cm4geyp9XG5cdCAqL1xuXHRwZWVrKCkge1xuXHRcdGlmICh0aGlzLmlzRW1wdHkoKSkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5kYXRhWzBdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBhIG5ldyBlbGVtZW50IHRvIHRoZSBlbmQgb2YgdGhlIHF1ZXVlLlxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IHZhbHVlXG5cdCAqIEByZXR1cm4ge1F1ZXVlfVxuXHQgKi9cblx0YWRkKHZhbHVlKSB7XG5cdFx0dGhpcy5kYXRhLnB1c2godmFsdWUpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIHJlbW92ZSBhbGwgZW50cmllc1xuXHQgKlxuXHQgKiBAcmV0dXJuIHtRdWV1ZX1cblx0ICovXG5cdGNsZWFyKCkge1xuXHRcdHRoaXMuZGF0YSA9IFtdO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZSB0aGUgZWxlbWVudCBhdCB0aGUgZnJvbnQgb2YgdGhlIHF1ZXVlXG5cdCAqIElmIHRoZSBxdWV1ZSBpcyBlbXB0eSwgcmV0dXJuIHVuZGVmaW5lZC5cblx0ICpcblx0ICogQHJldHVybiB7Kn1cblx0ICovXG5cdHBvbGwoKSB7XG5cdFx0aWYgKHRoaXMuaXNFbXB0eSgpKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5kYXRhLnNoaWZ0KCk7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBRdWV1ZSB9IGZyb20gXCIuL3F1ZXVlLm1qc1wiO1xuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVPYmplY3QgfSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgVW5pcXVlUXVldWUgfTtcblxuLyoqXG4gKiBBbiBVbmlxdWVRdWV1ZSBpcyBhIHF1ZXVlIHRoYXQgY29udGFpbnMgaXRlbXMgb25seSBvbmNlLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBxdWV1ZSBmb3IgdW5pcXVlIHZhbHVlc1xuICovXG5jbGFzcyBVbmlxdWVRdWV1ZSBleHRlbmRzIFF1ZXVlIHtcblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0ge1xuXHRcdFx0dW5pcXVlOiBuZXcgV2Vha1NldCgpLFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogQWRkIGEgbmV3IGVsZW1lbnQgdG8gdGhlIGVuZCBvZiB0aGUgcXVldWUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHtRdWV1ZX1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBvYmplY3Rcblx0ICovXG5cdGFkZCh2YWx1ZSkge1xuXHRcdHZhbGlkYXRlT2JqZWN0KHZhbHVlKTtcblxuXHRcdGlmICghdGhpc1tpbnRlcm5hbFN5bWJvbF0udW5pcXVlLmhhcyh2YWx1ZSkpIHtcblx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLnVuaXF1ZS5hZGQodmFsdWUpO1xuXHRcdFx0c3VwZXIuYWRkKHZhbHVlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiByZW1vdmUgYWxsIGVudHJpZXNcblx0ICpcblx0ICogQHJldHVybiB7UXVldWV9XG5cdCAqL1xuXHRjbGVhcigpIHtcblx0XHRzdXBlci5jbGVhcigpO1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLnVuaXF1ZSA9IG5ldyBXZWFrU2V0KCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlIHRoZSBlbGVtZW50IGF0IHRoZSBmcm9udCBvZiB0aGUgcXVldWVcblx0ICogSWYgdGhlIHF1ZXVlIGlzIGVtcHR5LCByZXR1cm4gdW5kZWZpbmVkLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtvYmplY3R9XG5cdCAqL1xuXHRwb2xsKCkge1xuXHRcdGlmICh0aGlzLmlzRW1wdHkoKSkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0Y29uc3QgdmFsdWUgPSB0aGlzLmRhdGEuc2hpZnQoKTtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS51bmlxdWUuZGVsZXRlKHZhbHVlKTtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZS5tanNcIjtcbmltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSBcIi4vaXMubWpzXCI7XG5pbXBvcnQgeyBUb2tlbkxpc3QgfSBmcm9tIFwiLi90b2tlbmxpc3QubWpzXCI7XG5pbXBvcnQgeyBVbmlxdWVRdWV1ZSB9IGZyb20gXCIuL3VuaXF1ZXF1ZXVlLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuZXhwb3J0IHsgT2JzZXJ2ZXIgfTtcblxuLyoqXG4gKiBBbiBvYnNlcnZlciBtYW5hZ2VzIGEgY2FsbGJhY2sgZnVuY3Rpb25cbiAqXG4gKiBUaGUgdXBkYXRlIG1ldGhvZCBpcyBjYWxsZWQgd2l0aCB0aGUgc3ViamVjdCBvYmplY3QgYXMgdGhpcyBwb2ludGVyLiBGb3IgdGhpcyByZWFzb25cbiAqIHRoZSBjYWxsYmFjayBzaG91bGQgbm90IGJlIGFuIGFycm93IGZ1bmN0aW9uLCBiZWNhdXNlIGl0IGdldHMgdGhpcyBwb2ludGVyIG9mIGl0cyBvd24gY29udGV4dC5cbiAqXG4gKiBJbmNsdWRlIHRoaXMgY2xhc3MgaW4geW91ciBwcm9qZWN0IHdpdGggdGhlIGZvbGxvd2luZyBjb2RlOlxuICpcbiAqIGBgYGpzXG4gKiBpbXBvcnQgeyBPYnNlcnZlciB9IGZyb20gXCJAc2NodWthaS9tb25zdGVyL3NvdXJjZS90eXBlcy9vYnNlcnZlci5tanNcIjtcbiAqIGBgYFxuICpcbiAqIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBwYXNzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBgYGBqc1xuICogbmV3IE9ic2VydmVyKCgpPT57XG4gKiAgICAgLy8gdGhpcyBpcyBub3Qgc3ViamVjdFxuICogfSlcbiAqXG4gKiBuZXcgT2JzZXJ2ZXIoZnVuY3Rpb24oKSB7XG4gKiAgICAgLy8gdGhpcyBpcyBzdWJqZWN0XG4gKiB9KVxuICogYGBgXG4gKlxuICogQWRkaXRpb25hbCBhcmd1bWVudHMgY2FuIGJlIHBhc3NlZCB0byB0aGUgY2FsbGJhY2suIFRvIGRvIHRoaXMsIHNpbXBseSBzcGVjaWZ5IHRoZW0uXG4gKlxuICogYGBganNcbiAqIE9ic2VydmVyKGZ1bmN0aW9uKGEsIGIsIGMpIHtcbiAqICAgICBjb25zb2xlLmxvZyhhLCBiLCBjKTsgLy8gXHUyMUE2IFwiYVwiLCAyLCB0cnVlXG4gKiB9LCBcImFcIiwgMiwgdHJ1ZSlcbiAqIGBgYFxuICpcbiAqIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBtdXN0IGhhdmUgYXMgbWFueSBwYXJhbWV0ZXJzIGFzIGFyZ3VtZW50cyBhcmUgZ2l2ZW4uXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqL1xuY2xhc3MgT2JzZXJ2ZXIgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7Kn0gYXJnc1xuXHQgKi9cblx0Y29uc3RydWN0b3IoY2FsbGJhY2ssIC4uLmFyZ3MpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0aWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJvYnNlcnZlciBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG5cdFx0fVxuXG5cdFx0dGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuXHRcdHRoaXMuYXJndW1lbnRzID0gYXJncztcblx0XHR0aGlzLnRhZ3MgPSBuZXcgVG9rZW5MaXN0KCk7XG5cdFx0dGhpcy5xdWV1ZSA9IG5ldyBVbmlxdWVRdWV1ZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci90eXBlcy9vYnNlcnZlclwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGFnXG5cdCAqIEByZXR1cm4ge09ic2VydmVyfVxuXHQgKi9cblx0YWRkVGFnKHRhZykge1xuXHRcdHRoaXMudGFncy5hZGQodGFnKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGFnXG5cdCAqIEByZXR1cm4ge09ic2VydmVyfVxuXHQgKi9cblx0cmVtb3ZlVGFnKHRhZykge1xuXHRcdHRoaXMudGFncy5yZW1vdmUodGFnKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtBcnJheX1cblx0ICovXG5cdGdldFRhZ3MoKSB7XG5cdFx0cmV0dXJuIHRoaXMudGFncy5lbnRyaWVzKCk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRhZ1xuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0aGFzVGFnKHRhZykge1xuXHRcdHJldHVybiB0aGlzLnRhZ3MuY29udGFpbnModGFnKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gc3ViamVjdFxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0dXBkYXRlKHN1YmplY3QpIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRcdGlmICghaXNPYmplY3Qoc3ViamVjdCkpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChcInN1YmplY3QgbXVzdCBiZSBhbiBvYmplY3RcIik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcblx0XHRcdHNlbGYucXVldWUuYWRkKHN1YmplY3QpO1xuXG5cdFx0XHRxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Ly8gdGhlIHF1ZXVlIGFuZCB0aGUgYHF1ZXVlTWljcm90YXNrYCBlbnN1cmUgdGhhdCBhbiBvYmplY3QgaXMgbm90XG5cdFx0XHRcdFx0Ly8gaW5mb3JtZWQgb2YgdGhlIHNhbWUgY2hhbmdlIG1vcmUgdGhhbiBvbmNlLlxuXHRcdFx0XHRcdGlmIChzZWxmLnF1ZXVlLmlzRW1wdHkoKSkge1xuXHRcdFx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbnN0IHMgPSBzZWxmLnF1ZXVlLnBvbGwoKTtcblx0XHRcdFx0XHRjb25zdCByZXN1bHQgPSBzZWxmLmNhbGxiYWNrLmFwcGx5KHMsIHNlbGYuYXJndW1lbnRzKTtcblxuXHRcdFx0XHRcdGlmIChpc09iamVjdChyZXN1bHQpICYmIHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcblx0XHRcdFx0XHRcdHJlc3VsdC50aGVuKHJlc29sdmUpLmNhdGNoKHJlamVjdCk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmVzb2x2ZShyZXN1bHQpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0cmVqZWN0KGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgT2JzZXJ2ZXIgfSBmcm9tIFwiLi9vYnNlcnZlci5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlSW5zdGFuY2UgfSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgT2JzZXJ2ZXJMaXN0IH07XG5cbi8qKlxuICogV2l0aCB0aGUgaGVscCBvZiB0aGUgT2JzZXJ2ZXJMaXN0IGNsYXNzLCBvYnNlcnZlciBjYW4gYmUgbWFuYWdlZC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICovXG5jbGFzcyBPYnNlcnZlckxpc3QgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMub2JzZXJ2ZXJzID0gW107XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybiB7T2JzZXJ2ZXJMaXN0fVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBPYnNlcnZlclxuXHQgKi9cblx0YXR0YWNoKG9ic2VydmVyKSB7XG5cdFx0dmFsaWRhdGVJbnN0YW5jZShvYnNlcnZlciwgT2JzZXJ2ZXIpO1xuXG5cdFx0dGhpcy5vYnNlcnZlcnMucHVzaChvYnNlcnZlcik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybiB7T2JzZXJ2ZXJMaXN0fVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBPYnNlcnZlclxuXHQgKi9cblx0ZGV0YWNoKG9ic2VydmVyKSB7XG5cdFx0dmFsaWRhdGVJbnN0YW5jZShvYnNlcnZlciwgT2JzZXJ2ZXIpO1xuXG5cdFx0dmFyIGkgPSAwO1xuXHRcdHZhciBsID0gdGhpcy5vYnNlcnZlcnMubGVuZ3RoO1xuXHRcdGZvciAoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRpZiAodGhpcy5vYnNlcnZlcnNbaV0gPT09IG9ic2VydmVyKSB7XG5cdFx0XHRcdHRoaXMub2JzZXJ2ZXJzLnNwbGljZShpLCAxKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBPYnNlcnZlclxuXHQgKi9cblx0Y29udGFpbnMob2JzZXJ2ZXIpIHtcblx0XHR2YWxpZGF0ZUluc3RhbmNlKG9ic2VydmVyLCBPYnNlcnZlcik7XG5cdFx0dmFyIGkgPSAwO1xuXHRcdHZhciBsID0gdGhpcy5vYnNlcnZlcnMubGVuZ3RoO1xuXHRcdGZvciAoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRpZiAodGhpcy5vYnNlcnZlcnNbaV0gPT09IG9ic2VydmVyKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHN1YmplY3Rcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdG5vdGlmeShzdWJqZWN0KSB7XG5cdFx0Y29uc3QgcG9taXNlcyA9IFtdO1xuXG5cdFx0bGV0IGkgPSAwO1xuXHRcdGNvbnN0IGwgPSB0aGlzLm9ic2VydmVycy5sZW5ndGg7XG5cdFx0Zm9yICg7IGkgPCBsOyBpKyspIHtcblx0XHRcdHBvbWlzZXMucHVzaCh0aGlzLm9ic2VydmVyc1tpXS51cGRhdGUoc3ViamVjdCkpO1xuXHRcdH1cblxuXHRcdHJldHVybiBQcm9taXNlLmFsbChwb21pc2VzKTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgaXNBcnJheSwgaXNPYmplY3QsIGlzUHJpbWl0aXZlIH0gZnJvbSBcIi4vaXMubWpzXCI7XG5pbXBvcnQgeyBPYnNlcnZlciB9IGZyb20gXCIuL29ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHsgT2JzZXJ2ZXJMaXN0IH0gZnJvbSBcIi4vb2JzZXJ2ZXJsaXN0Lm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVPYmplY3QgfSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGNsb25lIH0gZnJvbSBcIi4uL3V0aWwvY2xvbmUubWpzXCI7XG5leHBvcnQgeyBQcm94eU9ic2VydmVyIH07XG5cbi8qKlxuICogQW4gb2JzZXJ2ZXIgbWFuYWdlcyBhIGNhbGxiYWNrIGZ1bmN0aW9uXG4gKlxuICogV2l0aCB0aGUgUHJveHlPYnNlcnZlciB5b3UgY2FuIGF0dGFjaCBvYnNlcnZlciBmb3Igb2JzZXJ2YXRpb24uXG4gKiBXaXRoIGVhY2ggY2hhbmdlIGF0IHRoZSBvYmplY3QgdG8gYmUgb2JzZXJ2ZWQsIGFuIHVwZGF0ZSB0YWtlcyBwbGFjZS5cbiAqXG4gKiBUaGlzIGFsc28gYXBwbGllcyB0byBuZXN0ZWQgb2JqZWN0cy5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuY2xhc3MgUHJveHlPYnNlcnZlciBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtvYmplY3R9IG9iamVjdFxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIG9iamVjdFxuXHQgKi9cblx0Y29uc3RydWN0b3Iob2JqZWN0KSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMucmVhbFN1YmplY3QgPSB2YWxpZGF0ZU9iamVjdChvYmplY3QpO1xuXHRcdHRoaXMuc3ViamVjdCA9IG5ldyBQcm94eShvYmplY3QsIGdldEhhbmRsZXIuY2FsbCh0aGlzKSk7XG5cblx0XHR0aGlzLm9iamVjdE1hcCA9IG5ldyBXZWFrTWFwKCk7XG5cdFx0dGhpcy5vYmplY3RNYXAuc2V0KHRoaXMucmVhbFN1YmplY3QsIHRoaXMuc3ViamVjdCk7XG5cblx0XHR0aGlzLnByb3h5TWFwID0gbmV3IFdlYWtNYXAoKTtcblx0XHR0aGlzLnByb3h5TWFwLnNldCh0aGlzLnN1YmplY3QsIHRoaXMucmVhbFN1YmplY3QpO1xuXG5cdFx0dGhpcy5vYnNlcnZlcnMgPSBuZXcgT2JzZXJ2ZXJMaXN0KCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL3R5cGVzL3Byb3h5LW9ic2VydmVyXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge29iamVjdH1cblx0ICovXG5cdGdldFN1YmplY3QoKSB7XG5cdFx0cmV0dXJuIHRoaXMuc3ViamVjdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAc2luY2UgMS4yNC4wXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcblx0ICogQHJldHVybiB7TW9uc3Rlci5UeXBlcy5Qcm94eU9ic2VydmVyfVxuXHQgKi9cblx0c2V0U3ViamVjdChvYmopIHtcblx0XHRsZXQgaTtcblx0XHRjb25zdCBjbG9uZWRPYmplY3QgPSBjbG9uZShvYmopO1xuXHRcdGNvbnN0IGsgPSBPYmplY3Qua2V5cyh0aGlzLnN1YmplY3QpO1xuXHRcdGZvciAoaSA9IDA7IGkgPCBrLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRkZWxldGUgdGhpcy5zdWJqZWN0W2tbaV1dO1xuXHRcdH1cblxuXHRcdHRoaXMuc3ViamVjdCA9IGV4dGVuZCh0aGlzLnN1YmplY3QsIGNsb25lZE9iamVjdCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSByZWFsIG9iamVjdFxuXHQgKlxuXHQgKiBDaGFuZ2VzIHRvIHRoaXMgb2JqZWN0IGFyZSBub3Qgbm90aWNlZCBieSB0aGUgb2JzZXJ2ZXJzLCBzbyB5b3UgY2FuIG1ha2UgYSBsYXJnZSBudW1iZXIgb2YgY2hhbmdlcyBhbmQgaW5mb3JtIHRoZSBvYnNlcnZlcnMgbGF0ZXIuXG5cdCAqXG5cdCAqIEByZXR1cm4ge29iamVjdH1cblx0ICovXG5cdGdldFJlYWxTdWJqZWN0KCkge1xuXHRcdHJldHVybiB0aGlzLnJlYWxTdWJqZWN0O1xuXHR9XG5cblx0LyoqXG5cdCAqIGF0dGFjaCBhIG5ldyBvYnNlcnZlclxuXHQgKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJuIHtQcm94eU9ic2VydmVyfVxuXHQgKi9cblx0YXR0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHR0aGlzLm9ic2VydmVycy5hdHRhY2gob2JzZXJ2ZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIGRldGFjaCBhIG9ic2VydmVyXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm4ge1Byb3h5T2JzZXJ2ZXJ9XG5cdCAqL1xuXHRkZXRhY2hPYnNlcnZlcihvYnNlcnZlcikge1xuXHRcdHRoaXMub2JzZXJ2ZXJzLmRldGFjaChvYnNlcnZlcik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogbm90aWZ5IGFsbCBvYnNlcnZlclxuXHQgKlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0bm90aWZ5T2JzZXJ2ZXJzKCkge1xuXHRcdHJldHVybiB0aGlzLm9ic2VydmVycy5ub3RpZnkodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGNvbnRhaW5zT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHRyZXR1cm4gdGhpcy5vYnNlcnZlcnMuY29udGFpbnMob2JzZXJ2ZXIpO1xuXHR9XG59XG5cbi8qKlxuICpcbiAqIEByZXR1cm4ge3tkZWZpbmVQcm9wZXJ0eTogKGZ1bmN0aW9uKCo9LCAqPSwgKj0pOiAqKSwgc2V0UHJvdG90eXBlT2Y6IChmdW5jdGlvbigqLCAqPSk6IGJvb2xlYW4pLCBzZXQ6IChmdW5jdGlvbigqLCAqLCAqLCAqKTogYm9vbGVhbiksIGdldDogKChmdW5jdGlvbigqPSwgKj0sICo9KTogKHVuZGVmaW5lZCkpfCopLCBkZWxldGVQcm9wZXJ0eTogKChmdW5jdGlvbigqLCAqKTogKGJvb2xlYW4pKXwqKX19XG4gKiBAcHJpdmF0ZVxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRsYWIuc2NodWthaS5jb20vLS9zbmlwcGV0cy80OX1cbiAqL1xuZnVuY3Rpb24gZ2V0SGFuZGxlcigpIHtcblx0Y29uc3QgcHJveHkgPSB0aGlzO1xuXG5cdC8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvOS4wLyNzZWMtcHJveHktb2JqZWN0LWludGVybmFsLW1ldGhvZHMtYW5kLWludGVybmFsLXNsb3RzXG5cdGNvbnN0IGhhbmRsZXIgPSB7XG5cdFx0Ly8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy85LjAvI3NlYy1wcm94eS1vYmplY3QtaW50ZXJuYWwtbWV0aG9kcy1hbmQtaW50ZXJuYWwtc2xvdHMtZ2V0LXAtcmVjZWl2ZXJcblx0XHRnZXQ6IGZ1bmN0aW9uICh0YXJnZXQsIGtleSwgcmVjZWl2ZXIpIHtcblx0XHRcdGNvbnN0IHZhbHVlID0gUmVmbGVjdC5nZXQodGFyZ2V0LCBrZXksIHJlY2VpdmVyKTtcblxuXHRcdFx0aWYgKHR5cGVvZiBrZXkgPT09IFwic3ltYm9sXCIpIHtcblx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNQcmltaXRpdmUodmFsdWUpKSB7XG5cdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gc2V0IHZhbHVlIGFzIHByb3h5IGlmIG9iamVjdCBvciBhcnJheVxuXHRcdFx0aWYgKGlzQXJyYXkodmFsdWUpIHx8IGlzT2JqZWN0KHZhbHVlKSkge1xuXHRcdFx0XHRpZiAocHJveHkub2JqZWN0TWFwLmhhcyh2YWx1ZSkpIHtcblx0XHRcdFx0XHRyZXR1cm4gcHJveHkub2JqZWN0TWFwLmdldCh2YWx1ZSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAocHJveHkucHJveHlNYXAuaGFzKHZhbHVlKSkge1xuXHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zdCBwID0gbmV3IFByb3h5KHZhbHVlLCBoYW5kbGVyKTtcblx0XHRcdFx0XHRwcm94eS5vYmplY3RNYXAuc2V0KHZhbHVlLCBwKTtcblx0XHRcdFx0XHRwcm94eS5wcm94eU1hcC5zZXQocCwgdmFsdWUpO1xuXHRcdFx0XHRcdHJldHVybiBwO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9LFxuXG5cdFx0Ly8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy85LjAvI3NlYy1wcm94eS1vYmplY3QtaW50ZXJuYWwtbWV0aG9kcy1hbmQtaW50ZXJuYWwtc2xvdHMtc2V0LXAtdi1yZWNlaXZlclxuXHRcdHNldDogZnVuY3Rpb24gKHRhcmdldCwga2V5LCB2YWx1ZSwgcmVjZWl2ZXIpIHtcblx0XHRcdGlmIChwcm94eS5wcm94eU1hcC5oYXModmFsdWUpKSB7XG5cdFx0XHRcdHZhbHVlID0gcHJveHkucHJveHlNYXAuZ2V0KHZhbHVlKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHByb3h5LnByb3h5TWFwLmhhcyh0YXJnZXQpKSB7XG5cdFx0XHRcdHRhcmdldCA9IHByb3h5LnByb3h5TWFwLmdldCh0YXJnZXQpO1xuXHRcdFx0fVxuXG5cdFx0XHRsZXQgY3VycmVudCA9IFJlZmxlY3QuZ2V0KHRhcmdldCwga2V5LCByZWNlaXZlcik7XG5cdFx0XHRpZiAocHJveHkucHJveHlNYXAuaGFzKGN1cnJlbnQpKSB7XG5cdFx0XHRcdGN1cnJlbnQgPSBwcm94eS5wcm94eU1hcC5nZXQoY3VycmVudCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChjdXJyZW50ID09PSB2YWx1ZSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0bGV0IHJlc3VsdDtcblx0XHRcdGxldCBkZXNjcmlwdG9yID0gUmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpO1xuXG5cdFx0XHRpZiAoZGVzY3JpcHRvciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGRlc2NyaXB0b3IgPSB7XG5cdFx0XHRcdFx0d3JpdGFibGU6IHRydWUsXG5cdFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdGRlc2NyaXB0b3JbXCJ2YWx1ZVwiXSA9IHZhbHVlO1xuXHRcdFx0cmVzdWx0ID0gUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZGVzY3JpcHRvcik7XG5cblx0XHRcdGlmICh0eXBlb2Yga2V5ICE9PSBcInN5bWJvbFwiKSB7XG5cdFx0XHRcdHByb3h5Lm9ic2VydmVycy5ub3RpZnkocHJveHkpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0sXG5cblx0XHQvLyBodHRwczovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzkuMC8jc2VjLXByb3h5LW9iamVjdC1pbnRlcm5hbC1tZXRob2RzLWFuZC1pbnRlcm5hbC1zbG90cy1kZWxldGUtcFxuXHRcdGRlbGV0ZVByb3BlcnR5OiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHtcblx0XHRcdGlmIChrZXkgaW4gdGFyZ2V0KSB7XG5cdFx0XHRcdGRlbGV0ZSB0YXJnZXRba2V5XTtcblxuXHRcdFx0XHRpZiAodHlwZW9mIGtleSAhPT0gXCJzeW1ib2xcIikge1xuXHRcdFx0XHRcdHByb3h5Lm9ic2VydmVycy5ub3RpZnkocHJveHkpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSxcblxuXHRcdC8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvOS4wLyNzZWMtcHJveHktb2JqZWN0LWludGVybmFsLW1ldGhvZHMtYW5kLWludGVybmFsLXNsb3RzLWRlZmluZW93bnByb3BlcnR5LXAtZGVzY1xuXHRcdGRlZmluZVByb3BlcnR5OiBmdW5jdGlvbiAodGFyZ2V0LCBrZXksIGRlc2NyaXB0b3IpIHtcblx0XHRcdGNvbnN0IHJlc3VsdCA9IFJlZmxlY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGRlc2NyaXB0b3IpO1xuXHRcdFx0aWYgKHR5cGVvZiBrZXkgIT09IFwic3ltYm9sXCIpIHtcblx0XHRcdFx0cHJveHkub2JzZXJ2ZXJzLm5vdGlmeShwcm94eSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0sXG5cblx0XHQvLyBodHRwczovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzkuMC8jc2VjLXByb3h5LW9iamVjdC1pbnRlcm5hbC1tZXRob2RzLWFuZC1pbnRlcm5hbC1zbG90cy1zZXRwcm90b3R5cGVvZi12XG5cdFx0c2V0UHJvdG90eXBlT2Y6IGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuXHRcdFx0Y29uc3QgcmVzdWx0ID0gUmVmbGVjdC5zZXRQcm90b3R5cGVPZihvYmplY3QxLCBrZXkpO1xuXG5cdFx0XHRpZiAodHlwZW9mIGtleSAhPT0gXCJzeW1ib2xcIikge1xuXHRcdFx0XHRwcm94eS5vYnNlcnZlcnMubm90aWZ5KHByb3h5KTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9LFxuXHR9O1xuXG5cdHJldHVybiBoYW5kbGVyO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbE9iamVjdCB9IGZyb20gXCIuLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9USEVNRV9OQU1FLCBERUZBVUxUX1RIRU1FIH0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuZXhwb3J0IHsgVGhlbWUsIGdldERvY3VtZW50VGhlbWUgfTtcblxuLyoqXG4gKiBUaGUgVGhlbWUgY2xhc3MgcHJvdmlkZXMgdGhlIGZ1bmN0aW9uYWxpdHkgZm9yIHRoZSB0aGVtZS5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvZG9tL3RoZW1lLm1qc1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS43LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIHRoZW1lIGNsYXNzXG4gKi9cbmNsYXNzIFRoZW1lIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0gbmFtZVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKi9cblx0Y29uc3RydWN0b3IobmFtZSkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dmFsaWRhdGVTdHJpbmcobmFtZSk7XG5cdFx0dGhpcy5uYW1lID0gbmFtZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL3RoZW1lXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdGdldE5hbWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMubmFtZTtcblx0fVxufVxuXG4vKipcbiAqIFRoZSB0aGVtaW5nIHVzZWQgaW4gdGhlIGRvY3VtZW50IGNhbiBiZSBkZWZpbmVkIHZpYSB0aGUgaHRtbC10YWcuXG4gKiBUaGUgdGhlbWluZyBpcyBzcGVjaWZpZWQgdmlhIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci10aGVtZS1uYW1lYC5cbiAqXG4gKiBBcyBuYW1lIGZvciBhIHRoZW1lIGFsbCBjaGFyYWN0ZXJzIGFyZSB2YWxpZCwgd2hpY2ggYXJlIGFsc28gYWxsb3dlZCBmb3IgYSBIVE1MRWxlbWVudC1JRC5cbiAqXG4gKiBgYGBcbiAqIDxodG1sIGRhdGEtbW9uc3Rlci10aGVtZS1uYW1lPVwibXktdGhlbWVcIj5cbiAqIGBgYFxuICpcbiAqIHRoZSBkZWZhdWx0IHRoZW1lIG5hbWUgaXMgYG1vbnN0ZXJgLlxuICpcbiAqIEByZXR1cm4ge1RoZW1lfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS43LjBcbiAqL1xuZnVuY3Rpb24gZ2V0RG9jdW1lbnRUaGVtZSgpIHtcblx0Y29uc3QgZG9jdW1lbnQgPSBnZXRHbG9iYWxPYmplY3QoXCJkb2N1bWVudFwiKTtcblx0bGV0IG5hbWUgPSBERUZBVUxUX1RIRU1FO1xuXG5cdGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKTtcblx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdGNvbnN0IHRoZW1lID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1RIRU1FX05BTUUpO1xuXHRcdGlmICh0aGVtZSkge1xuXHRcdFx0bmFtZSA9IHRoZW1lO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBuZXcgVGhlbWUobmFtZSk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsRnVuY3Rpb24sIGdldEdsb2JhbE9iamVjdCB9IGZyb20gXCIuLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlLCB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9URU1QTEFURV9QUkVGSVggfSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBnZXREb2N1bWVudFRoZW1lIH0gZnJvbSBcIi4vdGhlbWUubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBmaW5kRWxlbWVudFdpdGhJZFVwd2FyZHMgfSBmcm9tIFwiLi91dGlsLm1qc1wiO1xuXG5leHBvcnQgeyBUZW1wbGF0ZSB9O1xuXG4vKipcbiAqIFRoZSB0ZW1wbGF0ZSBjbGFzcyBwcm92aWRlcyBtZXRob2RzIGZvciBjcmVhdGluZyB0ZW1wbGF0ZXMuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS42LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIHRlbXBsYXRlIGNsYXNzXG4gKi9cbmNsYXNzIFRlbXBsYXRlIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge0hUTUxUZW1wbGF0ZUVsZW1lbnR9IHRlbXBsYXRlXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgZnVuY3Rpb25cblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBmdW5jdGlvbiBpcyBub3QgZGVmaW5lZFxuXHQgKi9cblx0Y29uc3RydWN0b3IodGVtcGxhdGUpIHtcblx0XHRzdXBlcigpO1xuXHRcdGNvbnN0IEhUTUxUZW1wbGF0ZUVsZW1lbnQgPSBnZXRHbG9iYWxGdW5jdGlvbihcIkhUTUxUZW1wbGF0ZUVsZW1lbnRcIik7XG5cdFx0dmFsaWRhdGVJbnN0YW5jZSh0ZW1wbGF0ZSwgSFRNTFRlbXBsYXRlRWxlbWVudCk7XG5cdFx0dGhpcy50ZW1wbGF0ZSA9IHRlbXBsYXRlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vcmVzb3VyY2UvdGVtcGxhdGVcIik7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7SFRNTFRlbXBsYXRlRWxlbWVudH1cblx0ICovXG5cdGdldFRlbXBsYXRlRWxlbWVudCgpIHtcblx0XHRyZXR1cm4gdGhpcy50ZW1wbGF0ZTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtEb2N1bWVudEZyYWdtZW50fVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZlxuXHQgKi9cblx0Y3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpIHtcblx0XHRyZXR1cm4gdGhpcy50ZW1wbGF0ZS5jb250ZW50LmNsb25lTm9kZSh0cnVlKTtcblx0fVxufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGxvYWRzIGEgdGVtcGxhdGUgd2l0aCB0aGUgZ2l2ZW4gSUQgYW5kIHJldHVybnMgaXQuXG4gKlxuICogVG8gZG8gdGhpcywgaXQgZmlyc3QgcmVhZHMgdGhlIHRoZW1lIG9mIHRoZSBkb2N1bWVudCBhbmQgbG9va3MgZm9yIHRoZSBgZGF0YS1tb25zdGVyLXRoZW1lLW5hbWVgIGF0dHJpYnV0ZSBpbiB0aGUgSFRNTCB0YWcuXG4gKlxuICogYGBgXG4gKiA8aHRtbCBkYXRhLW1vbnN0ZXItdGhlbWUtbmFtZT1cIm15LXRoZW1lXCI+XG4gKiBgYGBcbiAqXG4gKiBJZiBubyB0aGVtZSB3YXMgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCB0aGVtZSBpcyBgbW9uc3RlcmAuXG4gKlxuICogTm93IGl0IGlzIGxvb2tlZCBpZiB0aGVyZSBpcyBhIHRlbXBsYXRlIHdpdGggdGhlIGdpdmVuIElEIGFuZCB0aGVtZSBgaWQtdGhlbWVgIGFuZCBpZiB5ZXMgaXQgaXMgcmV0dXJuZWQuXG4gKiBJZiB0aGVyZSBpcyBubyB0ZW1wbGF0ZSBhIHNlYXJjaCBmb3IgYSB0ZW1wbGF0ZSB3aXRoIHRoZSBnaXZlbiBJRCBgaWRgIGlzIGRvbmUuIElmIHRoaXMgaXMgYWxzbyBub3QgZm91bmQsIGFuIGVycm9yIGlzIHRocm93bi5cbiAqXG4gKiBZb3UgY2FuIGNhbGwgdGhlIG1ldGhvZCB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBNb25zdGVyLkRPTS5maW5kRG9jdW1lbnRUZW1wbGF0ZSgpYC5cbiAqXG4gKiBgYGBcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHtmaW5kVGVtcGxhdGV9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL2RvbS90ZW1wbGF0ZS5tanMnO1xuICogZmluZERvY3VtZW50VGVtcGxhdGUoKVxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGltcG9ydCB7IGZpbmREb2N1bWVudFRlbXBsYXRlIH0gZnJvbSBcImh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vQHNjaHVrYWkvbW9uc3RlckBsYXRlc3Qvc291cmNlL2RvbS90ZW1wbGF0ZS5tanNcIjtcbiAqXG4gKiBjb25zdCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAqIHRlbXBsYXRlLmlkID0gXCJteVRlbXBsYXRlXCI7XG4gKiB0ZW1wbGF0ZS5pbm5lckhUTUwgPSBcIjxwPm15IGRlZmF1bHQgdGVtcGxhdGU8L3A+XCI7XG4gKiBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRlbXBsYXRlKTtcbiAqXG4gKiBjb25zdCB0aGVtZWRUZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAqIHRoZW1lZFRlbXBsYXRlLmlkID0gXCJteVRlbXBsYXRlLW15VGhlbWVcIjtcbiAqIHRoZW1lZFRlbXBsYXRlLmlubmVySFRNTCA9IFwiPHA+bXkgdGhlbWVkIHRlbXBsYXRlPC9wPlwiO1xuICogZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGVtZWRUZW1wbGF0ZSk7XG4gKlxuICogLy8gbG9hZHMgdGhlIHRlbXBsZSBhbmQgc2luY2Ugbm8gdGhlbWUgaXMgc2V0IHRoZSBkZWZhdWx0IHRlbXBsYXRlXG4gKiBjb25zdCB0ZW1wbGF0ZTEgPSBmaW5kRG9jdW1lbnRUZW1wbGF0ZShcIm15VGVtcGxhdGVcIik7XG4gKiBjb25zb2xlLmxvZyh0ZW1wbGF0ZTEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKTtcbiAqIC8vIFx1MjFBNiAnPHA+bXkgZGVmYXVsdCB0ZW1wbGF0ZTwvcD4nXG4gKlxuICogLy8gbm93IHdlIHNldCBvdXIgb3duIHRoZW1lXG4gKiBkb2N1bWVudFxuICogLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpXG4gKiAuc2V0QXR0cmlidXRlKFwiZGF0YS1tb25zdGVyLXRoZW1lLW5hbWVcIiwgXCJteVRoZW1lXCIpO1xuICpcbiAqIC8vIG5vdyB3ZSBkb24ndCBnZXQgdGhlIGRlZmF1bHQgdGVtcGxhdGUsXG4gKiAvLyBidXQgdGhlIHRlbXBsYXRlIHdpdGggdGhlIHRoZW1lIGluIHRoZSBpZFxuICogY29uc3QgdGVtcGxhdGUyID0gZmluZERvY3VtZW50VGVtcGxhdGUoXCJteVRlbXBsYXRlXCIpO1xuICogY29uc29sZS5sb2codGVtcGxhdGUyLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSk7XG4gKiAvLyBcdTIxQTYgJzxwPm15IHRoZW1lZCB0ZW1wbGF0ZTwvcD4nXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGlkXG4gKiBAcGFyYW0ge05vZGV9IGN1cnJlbnROb2RlXG4gKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5UZW1wbGF0ZX1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7RXJyb3J9IHRlbXBsYXRlIGlkIG5vdCBmb3VuZC5cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRG9jdW1lbnRUZW1wbGF0ZShpZCwgY3VycmVudE5vZGUpIHtcblx0dmFsaWRhdGVTdHJpbmcoaWQpO1xuXG5cdGNvbnN0IGRvY3VtZW50ID0gZ2V0R2xvYmFsT2JqZWN0KFwiZG9jdW1lbnRcIik7XG5cdGNvbnN0IEhUTUxUZW1wbGF0ZUVsZW1lbnQgPSBnZXRHbG9iYWxGdW5jdGlvbihcIkhUTUxUZW1wbGF0ZUVsZW1lbnRcIik7XG5cdGNvbnN0IERvY3VtZW50RnJhZ21lbnQgPSBnZXRHbG9iYWxGdW5jdGlvbihcIkRvY3VtZW50RnJhZ21lbnRcIik7XG5cdGNvbnN0IERvY3VtZW50ID0gZ2V0R2xvYmFsRnVuY3Rpb24oXCJEb2N1bWVudFwiKTtcblxuXHRsZXQgcHJlZml4SUQ7XG5cblx0aWYgKFxuXHRcdCEoXG5cdFx0XHRjdXJyZW50Tm9kZSBpbnN0YW5jZW9mIERvY3VtZW50IHx8IGN1cnJlbnROb2RlIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudFxuXHRcdClcblx0KSB7XG5cdFx0aWYgKGN1cnJlbnROb2RlIGluc3RhbmNlb2YgTm9kZSkge1xuXHRcdFx0aWYgKGN1cnJlbnROb2RlLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfVEVNUExBVEVfUFJFRklYKSkge1xuXHRcdFx0XHRwcmVmaXhJRCA9IGN1cnJlbnROb2RlLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfVEVNUExBVEVfUFJFRklYKTtcblx0XHRcdH1cblxuXHRcdFx0Y3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5nZXRSb290Tm9kZSgpO1xuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdCEoXG5cdFx0XHRcdFx0Y3VycmVudE5vZGUgaW5zdGFuY2VvZiBEb2N1bWVudCB8fFxuXHRcdFx0XHRcdGN1cnJlbnROb2RlIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudFxuXHRcdFx0XHQpXG5cdFx0XHQpIHtcblx0XHRcdFx0Y3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5vd25lckRvY3VtZW50O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdCEoXG5cdFx0XHRcdGN1cnJlbnROb2RlIGluc3RhbmNlb2YgRG9jdW1lbnQgfHxcblx0XHRcdFx0Y3VycmVudE5vZGUgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50XG5cdFx0XHQpXG5cdFx0KSB7XG5cdFx0XHRjdXJyZW50Tm9kZSA9IGRvY3VtZW50O1xuXHRcdH1cblx0fVxuXG5cdGxldCB0ZW1wbGF0ZTtcblx0Y29uc3QgdGhlbWUgPSBnZXREb2N1bWVudFRoZW1lKCk7XG5cblx0aWYgKHByZWZpeElEKSB7XG5cdFx0Y29uc3QgdGhlbWVkUHJlZml4SUQgPSBgJHtwcmVmaXhJRH0tJHtpZH0tJHt0aGVtZS5nZXROYW1lKCl9YDtcblxuXHRcdHRlbXBsYXRlID0gZmluZEVsZW1lbnRXaXRoSWRVcHdhcmRzKGN1cnJlbnROb2RlLCB0aGVtZWRQcmVmaXhJRCk7XG5cdFx0aWYgKHRlbXBsYXRlIGluc3RhbmNlb2YgSFRNTFRlbXBsYXRlRWxlbWVudCkge1xuXHRcdFx0cmV0dXJuIG5ldyBUZW1wbGF0ZSh0ZW1wbGF0ZSk7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgdGhlbWVkSUQgPSBgJHtpZH0tJHt0aGVtZS5nZXROYW1lKCl9YDtcblxuXHR0ZW1wbGF0ZSA9IGZpbmRFbGVtZW50V2l0aElkVXB3YXJkcyhjdXJyZW50Tm9kZSwgdGhlbWVkSUQpO1xuXHRpZiAodGVtcGxhdGUgaW5zdGFuY2VvZiBIVE1MVGVtcGxhdGVFbGVtZW50KSB7XG5cdFx0cmV0dXJuIG5ldyBUZW1wbGF0ZSh0ZW1wbGF0ZSk7XG5cdH1cblxuXHR0ZW1wbGF0ZSA9IGZpbmRFbGVtZW50V2l0aElkVXB3YXJkcyhjdXJyZW50Tm9kZSwgaWQpO1xuXHRpZiAodGVtcGxhdGUgaW5zdGFuY2VvZiBIVE1MVGVtcGxhdGVFbGVtZW50KSB7XG5cdFx0cmV0dXJuIG5ldyBUZW1wbGF0ZSh0ZW1wbGF0ZSk7XG5cdH1cblxuXHR0aHJvdyBuZXcgRXJyb3IoYHRlbXBsYXRlICR7aWR9IG5vdCBmb3VuZC5gKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpc0FycmF5LCBpc09iamVjdCB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IHR5cGVPZiB9IGZyb20gXCIuLi90eXBlcy90eXBlb2YubWpzXCI7XG5cbmV4cG9ydCB7IGRpZmYgfTtcblxuLyoqXG4gKiBXaXRoIHRoZSBkaWZmIGZ1bmN0aW9uIHlvdSBjYW4gcGVyZm9ybSB0aGUgY2hhbmdlIG9mIG9uZSBvYmplY3QgdG8gYW5vdGhlci4gVGhlIHJlc3VsdCBzaG93cyB0aGUgY2hhbmdlcyBvZiB0aGUgc2Vjb25kIG9iamVjdCB0byB0aGUgZmlyc3Qgb2JqZWN0LlxuICpcbiAqIFRoZSBvcGVyYXRvciBgYWRkYCBtZWFucyB0aGF0IHNvbWV0aGluZyBoYXMgYmVlbiBhZGRlZCB0byB0aGUgc2Vjb25kIG9iamVjdC4gYGRlbGV0ZWAgbWVhbnMgdGhhdCBzb21ldGhpbmcgaGFzIGJlZW4gZGVsZXRlZCBmcm9tIHRoZSBzZWNvbmQgb2JqZWN0IGNvbXBhcmVkIHRvIHRoZSBmaXJzdCBvYmplY3QuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL2RhdGEvZGlmZi5tanNcbiAqIEBwYXJhbSB7Kn0gZmlyc3RcbiAqIEBwYXJhbSB7Kn0gc2Vjb25kXG4gKiBAcmV0dXJuIHthcnJheX1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICovXG5mdW5jdGlvbiBkaWZmKGZpcnN0LCBzZWNvbmQpIHtcblx0cmV0dXJuIGRvRGlmZihmaXJzdCwgc2Vjb25kKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGFcbiAqIEBwYXJhbSBiXG4gKiBAcGFyYW0gdHlwZVxuICogQHJldHVybiB7U2V0PHN0cmluZz58U2V0PG51bWJlcj59XG4gKi9cbmZ1bmN0aW9uIGdldEtleXMoYSwgYiwgdHlwZSkge1xuXHRpZiAoaXNBcnJheSh0eXBlKSkge1xuXHRcdGNvbnN0IGtleXMgPVxuXHRcdFx0YS5sZW5ndGggPiBiLmxlbmd0aCA/IG5ldyBBcnJheShhLmxlbmd0aCkgOiBuZXcgQXJyYXkoYi5sZW5ndGgpO1xuXHRcdGtleXMuZmlsbCgwKTtcblx0XHRyZXR1cm4gbmV3IFNldChrZXlzLm1hcCgoXywgaSkgPT4gaSkpO1xuXHR9XG5cblx0cmV0dXJuIG5ldyBTZXQoT2JqZWN0LmtleXMoYSkuY29uY2F0KE9iamVjdC5rZXlzKGIpKSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBhXG4gKiBAcGFyYW0gYlxuICogQHBhcmFtIHBhdGhcbiAqIEBwYXJhbSBkaWZmXG4gKiBAcmV0dXJuIHthcnJheX1cbiAqL1xuZnVuY3Rpb24gZG9EaWZmKGEsIGIsIHBhdGgsIGRpZmYpIHtcblx0Y29uc3QgdHlwZUEgPSB0eXBlT2YoYSk7XG5cdGNvbnN0IHR5cGVCID0gdHlwZU9mKGIpO1xuXG5cdGNvbnN0IGN1cnJQYXRoID0gcGF0aCB8fCBbXTtcblx0Y29uc3QgY3VyckRpZmYgPSBkaWZmIHx8IFtdO1xuXG5cdGlmICh0eXBlQSA9PT0gdHlwZUIgJiYgKHR5cGVBID09PSBcIm9iamVjdFwiIHx8IHR5cGVBID09PSBcImFycmF5XCIpKSB7XG5cdFx0Z2V0S2V5cyhhLCBiLCB0eXBlQSkuZm9yRWFjaCgodikgPT4ge1xuXHRcdFx0aWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSwgdikpIHtcblx0XHRcdFx0Y3VyckRpZmYucHVzaChidWlsZFJlc3VsdChhW3ZdLCBiW3ZdLCBcImFkZFwiLCBjdXJyUGF0aC5jb25jYXQodikpKTtcblx0XHRcdH0gZWxzZSBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCB2KSkge1xuXHRcdFx0XHRjdXJyRGlmZi5wdXNoKGJ1aWxkUmVzdWx0KGFbdl0sIGJbdl0sIFwiZGVsZXRlXCIsIGN1cnJQYXRoLmNvbmNhdCh2KSkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZG9EaWZmKGFbdl0sIGJbdl0sIGN1cnJQYXRoLmNvbmNhdCh2KSwgY3VyckRpZmYpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IG8gPSBnZXRPcGVyYXRvcihhLCBiLCB0eXBlQSwgdHlwZUIpO1xuXHRcdGlmIChvICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGN1cnJEaWZmLnB1c2goYnVpbGRSZXN1bHQoYSwgYiwgbywgcGF0aCkpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBjdXJyRGlmZjtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHsqfSBhXG4gKiBAcGFyYW0geyp9IGJcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcGVyYXRvclxuICogQHBhcmFtIHthcnJheX0gcGF0aFxuICogQHJldHVybiB7e3BhdGg6IGFycmF5LCBvcGVyYXRvcjogc3RyaW5nfX1cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkUmVzdWx0KGEsIGIsIG9wZXJhdG9yLCBwYXRoKSB7XG5cdGNvbnN0IHJlc3VsdCA9IHtcblx0XHRvcGVyYXRvcixcblx0XHRwYXRoLFxuXHR9O1xuXG5cdGlmIChvcGVyYXRvciAhPT0gXCJhZGRcIikge1xuXHRcdHJlc3VsdC5maXJzdCA9IHtcblx0XHRcdHZhbHVlOiBhLFxuXHRcdFx0dHlwZTogdHlwZW9mIGEsXG5cdFx0fTtcblxuXHRcdGlmIChpc09iamVjdChhKSkge1xuXHRcdFx0Y29uc3QgbmFtZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihhKT8uY29uc3RydWN0b3I/Lm5hbWU7XG5cdFx0XHRpZiAobmFtZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJlc3VsdC5maXJzdC5pbnN0YW5jZSA9IG5hbWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKG9wZXJhdG9yID09PSBcImFkZFwiIHx8IG9wZXJhdG9yID09PSBcInVwZGF0ZVwiKSB7XG5cdFx0cmVzdWx0LnNlY29uZCA9IHtcblx0XHRcdHZhbHVlOiBiLFxuXHRcdFx0dHlwZTogdHlwZW9mIGIsXG5cdFx0fTtcblxuXHRcdGlmIChpc09iamVjdChiKSkge1xuXHRcdFx0Y29uc3QgbmFtZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihiKT8uY29uc3RydWN0b3I/Lm5hbWU7XG5cdFx0XHRpZiAobmFtZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJlc3VsdC5zZWNvbmQuaW5zdGFuY2UgPSBuYW1lO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gYVxuICogQHBhcmFtIHsqfSBiXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc05vdEVxdWFsKGEsIGIpIHtcblx0aWYgKHR5cGVvZiBhICE9PSB0eXBlb2YgYikge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0aWYgKGEgaW5zdGFuY2VvZiBEYXRlICYmIGIgaW5zdGFuY2VvZiBEYXRlKSB7XG5cdFx0cmV0dXJuIGEuZ2V0VGltZSgpICE9PSBiLmdldFRpbWUoKTtcblx0fVxuXG5cdHJldHVybiBhICE9PSBiO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IGFcbiAqIEBwYXJhbSB7Kn0gYlxuICogQHJldHVybiB7c3RyaW5nfHVuZGVmaW5lZH1cbiAqL1xuZnVuY3Rpb24gZ2V0T3BlcmF0b3IoYSwgYikge1xuXHQvKipcblx0ICogQHR5cGUge3N0cmluZ3x1bmRlZmluZWR9XG5cdCAqL1xuXHRsZXQgb3BlcmF0b3I7XG5cblx0LyoqXG5cdCAqIEB0eXBlIHtzdHJpbmd9XG5cdCAqL1xuXHRjb25zdCB0eXBlQSA9IHR5cGVvZiBhO1xuXG5cdC8qKlxuXHQgKiBAdHlwZSB7c3RyaW5nfVxuXHQgKi9cblx0Y29uc3QgdHlwZUIgPSB0eXBlb2YgYjtcblxuXHRpZiAodHlwZUEgPT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZUIgIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRvcGVyYXRvciA9IFwiYWRkXCI7XG5cdH0gZWxzZSBpZiAodHlwZUEgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZUIgPT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRvcGVyYXRvciA9IFwiZGVsZXRlXCI7XG5cdH0gZWxzZSBpZiAoaXNOb3RFcXVhbChhLCBiKSkge1xuXHRcdG9wZXJhdG9yID0gXCJ1cGRhdGVcIjtcblx0fVxuXG5cdHJldHVybiBvcGVyYXRvcjtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBJRCB9IGZyb20gXCIuLi90eXBlcy9pZC5tanNcIjtcbmltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IHRyaW1TcGFjZXMgfTtcblxuLyoqXG4gKiBUaGlzIHNwZWNpYWwgdHJpbSBmdW5jdGlvbiBhbGxvd3MgdG8gdHJpbSBzcGFjZXMgdGhhdCBoYXZlIGJlZW4gcHJvdGVjdGVkIGJ5IGEgc3BlY2lhbCBlc2NhcGUgY2hhcmFjdGVyLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge3RyaW1TcGFjZXN9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL3V0aWwvdHJpbXNwYWNlcy5tanMnO1xuICogdHJpbVNwYWNlcygnIGhlbGxvIFxcXFwgJylcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogSGludDogT25lIHN0cm9rZSBpcyBlc2NhcGVkIGJ5IHRoZSBqYXZhc2NyaXB0IGludGVycHJldGVyLCB0aGUgc2Vjb25kIHN0cm9rZSBlc2NhcGVzIHRoZSBzdHJva2UuXG4gKlxuICogYGBgdGV4dFxuICogYVxcIGIgIFx1MjFBNiBhIGJcbiAqIGFcXFxcIGIgXHUyMUE2IGFcXCBiXG4gKiBgYGBcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI0LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIHRyaW1TcGFjZXModmFsdWUpIHtcblx0dmFsaWRhdGVTdHJpbmcodmFsdWUpO1xuXG5cdGNvbnN0IHBsYWNlaG9sZGVyID0gbmV3IE1hcCgpO1xuXHRjb25zdCByZWdleCA9IC8oKD88cGF0dGVybj5cXFxcKD88Y2hhcj4uKSl7MX0pL2dpbTtcblxuXHQvLyBUaGUgc2VwYXJhdG9yIGZvciBhcmdzIG11c3QgYmUgZXNjYXBlZFxuXHQvLyB1bmRlZmluZWQgc3RyaW5nIHdoaWNoIHNob3VsZCBub3Qgb2NjdXIgbm9ybWFsbHkgYW5kIGlzIGFsc28gbm90IGEgcmVnZXhcblx0Y29uc3QgcmVzdWx0ID0gdmFsdWUubWF0Y2hBbGwocmVnZXgpO1xuXG5cdGZvciAoY29uc3QgbSBvZiByZXN1bHQpIHtcblx0XHRjb25zdCBnID0gbT8uW1wiZ3JvdXBzXCJdO1xuXHRcdGlmICghaXNPYmplY3QoZykpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGNvbnN0IHAgPSBnPy5bXCJwYXR0ZXJuXCJdO1xuXHRcdGNvbnN0IGMgPSBnPy5bXCJjaGFyXCJdO1xuXG5cdFx0aWYgKHAgJiYgYykge1xuXHRcdFx0Y29uc3QgciA9IGBfXyR7bmV3IElEKCkudG9TdHJpbmcoKX1fX2A7XG5cdFx0XHRwbGFjZWhvbGRlci5zZXQociwgYyk7XG5cdFx0XHR2YWx1ZSA9IHZhbHVlLnJlcGxhY2UocCwgcik7XG5cdFx0fVxuXHR9XG5cblx0dmFsdWUgPSB2YWx1ZS50cmltKCk7XG5cdHBsYWNlaG9sZGVyLmZvckVhY2goKHYsIGspID0+IHtcblx0XHR2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoaywgYFxcXFwke3Z9YCk7XG5cdH0pO1xuXG5cdHJldHVybiB2YWx1ZTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpc0FycmF5LCBpc09iamVjdCB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlSW5zdGFuY2UsIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnQgfSBmcm9tIFwiLi91dGlsLm1qc1wiO1xuXG5leHBvcnQgeyBmaXJlRXZlbnQsIGZpcmVDdXN0b21FdmVudCwgZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQgfTtcblxuLyoqXG4gKiBUaGUgZnVuY3Rpb24gc2VuZHMgYW4gZXZlbnRcbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnQgfCBOb2RlIHwgSFRNTENvbGxlY3Rpb24gfCBOb2RlTGlzdH0gZWxlbWVudFxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjEwLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBIVE1MRWxlbWVudCBvciBIVE1MQ29sbGVjdGlvblxuICogQHN1bW1hcnkgQ29uc3RydWN0IGFuZCBzZW5kIGFuZCBldmVudFxuICovXG5mdW5jdGlvbiBmaXJlRXZlbnQoZWxlbWVudCwgdHlwZSkge1xuXHRjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cblx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdGlmICh0eXBlID09PSBcImNsaWNrXCIpIHtcblx0XHRcdGVsZW1lbnQuY2xpY2soKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRXZlbnQvRXZlbnRcblx0XHRjb25zdCBldmVudCA9IG5ldyBFdmVudCh2YWxpZGF0ZVN0cmluZyh0eXBlKSwge1xuXHRcdFx0YnViYmxlczogdHJ1ZSxcblx0XHRcdGNhbmNlbGFibGU6IHRydWUsXG5cdFx0XHRjb21wb3NlZDogdHJ1ZSxcblx0XHR9KTtcblxuXHRcdGVsZW1lbnQuZGlzcGF0Y2hFdmVudChldmVudCk7XG5cdH0gZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxDb2xsZWN0aW9uIHx8IGVsZW1lbnQgaW5zdGFuY2VvZiBOb2RlTGlzdCkge1xuXHRcdGZvciAoY29uc3QgZSBvZiBlbGVtZW50KSB7XG5cdFx0XHRmaXJlRXZlbnQoZSwgdHlwZSk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXG5cdFx0XHRcInZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBIVE1MRWxlbWVudCBvciBIVE1MQ29sbGVjdGlvblwiLFxuXHRcdCk7XG5cdH1cbn1cblxuLyoqXG4gKiBZb3UgY2FuIGNhbGwgdGhlIGZ1bmN0aW9uIHZpYSB0aGUgbW9uc3RlciBuYW1lc3BhY2UgYG5ldyBNb25zdGVyLkRPTS5maXJlQ3VzdG9tRXZlbnQoKWAuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50IHwgTm9kZSB8IEhUTUxDb2xsZWN0aW9uIHwgTm9kZUxpc3R9IGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge29iamVjdH0gZGV0YWlsXG4gKiBAcmV0dXJuIHt2b2lkfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yOS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgSFRNTEVsZW1lbnQgb3IgSFRNTENvbGxlY3Rpb25cbiAqIEBzdW1tYXJ5IENvbnN0cnVjdCBhbmQgc2VuZCBhbmQgZXZlbnRcbiAqL1xuZnVuY3Rpb24gZmlyZUN1c3RvbUV2ZW50KGVsZW1lbnQsIHR5cGUsIGRldGFpbCkge1xuXHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0aWYgKCFpc09iamVjdChkZXRhaWwpKSB7XG5cdFx0XHRkZXRhaWwgPSB7IGRldGFpbCB9O1xuXHRcdH1cblxuXHRcdGNvbnN0IGV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KHZhbGlkYXRlU3RyaW5nKHR5cGUpLCB7XG5cdFx0XHRidWJibGVzOiB0cnVlLFxuXHRcdFx0Y2FuY2VsYWJsZTogdHJ1ZSxcblx0XHRcdGNvbXBvc2VkOiB0cnVlLFxuXHRcdFx0ZGV0YWlsLFxuXHRcdH0pO1xuXG5cdFx0ZWxlbWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcblx0fSBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTENvbGxlY3Rpb24gfHwgZWxlbWVudCBpbnN0YW5jZW9mIE5vZGVMaXN0KSB7XG5cdFx0Zm9yIChjb25zdCBlIG9mIGVsZW1lbnQpIHtcblx0XHRcdGZpcmVDdXN0b21FdmVudChlLCB0eXBlLCBkZXRhaWwpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFxuXHRcdFx0XCJlbGVtZW50IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBIVE1MRWxlbWVudCBvciBIVE1MQ29sbGVjdGlvblwiLFxuXHRcdCk7XG5cdH1cbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIHBhdGggYEV2ZW50LmNvbXBvc2VkUGF0aCgpYCBmcm9tIGFuIGV2ZW50IGFuZCB0cmllcyB0byBmaW5kIHRoZSBuZXh0IGVsZW1lbnRcbiAqIHVwIHRoZSB0cmVlIGBlbGVtZW50LmNsb3Nlc3QoKWAgd2l0aCB0aGUgYXR0cmlidXRlIGFuZCB2YWx1ZS4gSWYgbm8gdmFsdWUsIG9yIGEgdmFsdWUgdGhhdCBpcyB1bmRlZmluZWQgb3IgbnVsbCxcbiAqIGlzIHNwZWNpZmllZCwgb25seSB0aGUgYXR0cmlidXRlIGlzIHNlYXJjaGVkLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTQuMFxuICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ3xudWxsfHVuZGVmaW5lZH0gYXR0cmlidXRlVmFsdWVcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBldmVudFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mIEhUTUxFbGVtZW50XG4gKiBAc3VtbWFyeSBIZWxwIGZ1bmN0aW9uIHRvIGZpbmQgdGhlIGFwcHJvcHJpYXRlIGNvbnRyb2xcbiAqL1xuZnVuY3Rpb24gZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoZXZlbnQsIGF0dHJpYnV0ZU5hbWUsIGF0dHJpYnV0ZVZhbHVlKSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZXZlbnQsIEV2ZW50KTtcblxuXHRpZiAodHlwZW9mIGV2ZW50LmNvbXBvc2VkUGF0aCAhPT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgZXZlbnRcIik7XG5cdH1cblxuXHRjb25zdCBwYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG5cblx0Ly8gY2xvc2VzdCBjYW5ub3QgYmUgdXNlZCBoZXJlLCBiZWNhdXNlIGNsb3Nlc3QgaXMgbm90IGNvcnJlY3QgZm9yIHNsb3R0ZWQgZWxlbWVudHNcblx0aWYgKGlzQXJyYXkocGF0aCkpIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IG8gPSBwYXRoW2ldO1xuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdG8gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJlxuXHRcdFx0XHRvLmhhc0F0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSAmJlxuXHRcdFx0XHQoYXR0cmlidXRlVmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0XHRcdG8uZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpID09PSBhdHRyaWJ1dGVWYWx1ZSlcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gbztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGRpZmYgfSBmcm9tIFwiLi4vZGF0YS9kaWZmLm1qc1wiO1xuaW1wb3J0IHsgUGF0aGZpbmRlciB9IGZyb20gXCIuLi9kYXRhL3BhdGhmaW5kZXIubWpzXCI7XG5pbXBvcnQgeyBQaXBlIH0gZnJvbSBcIi4uL2RhdGEvcGlwZS5tanNcIjtcbmltcG9ydCB7XG5cdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdEFUVFJJQlVURV9VUERBVEVSX0FUVFJJQlVURVMsXG5cdEFUVFJJQlVURV9VUERBVEVSX0JJTkQsXG5cdEFUVFJJQlVURV9VUERBVEVSX0JJTkRfVFlQRSxcblx0QVRUUklCVVRFX1VQREFURVJfSU5TRVJULFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9JTlNFUlRfUkVGRVJFTkNFLFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9SRU1PVkUsXG5cdEFUVFJJQlVURV9VUERBVEVSX1JFUExBQ0UsXG5cdEFUVFJJQlVURV9VUERBVEVSX1NFTEVDVF9USElTLFxufSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IGlzQXJyYXksIGlzU3RyaW5nLCBpc0luc3RhbmNlLCBpc0l0ZXJhYmxlIH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgT2JzZXJ2ZXIgfSBmcm9tIFwiLi4vdHlwZXMvb2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQgeyBQcm94eU9ic2VydmVyIH0gZnJvbSBcIi4uL3R5cGVzL3Byb3h5b2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUFycmF5LCB2YWxpZGF0ZUluc3RhbmNlIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgY2xvbmUgfSBmcm9tIFwiLi4vdXRpbC9jbG9uZS5tanNcIjtcbmltcG9ydCB7IHRyaW1TcGFjZXMgfSBmcm9tIFwiLi4vdXRpbC90cmltc3BhY2VzLm1qc1wiO1xuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4sIGFkZFRvT2JqZWN0TGluayB9IGZyb20gXCIuL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyB1cGRhdGVyVHJhbnNmb3JtZXJNZXRob2RzU3ltYm9sIH0gZnJvbSBcIi4vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50IH0gZnJvbSBcIi4vZXZlbnRzLm1qc1wiO1xuaW1wb3J0IHsgZmluZERvY3VtZW50VGVtcGxhdGUgfSBmcm9tIFwiLi90ZW1wbGF0ZS5tanNcIjtcbmltcG9ydCB7IGdldFdpbmRvdyB9IGZyb20gXCIuL3V0aWwubWpzXCI7XG5cbmV4cG9ydCB7IFVwZGF0ZXIsIGFkZE9iamVjdFdpdGhVcGRhdGVyVG9FbGVtZW50IH07XG5cbi8qKlxuICogVGhlIHVwZGF0ZXIgY2xhc3MgY29ubmVjdHMgYW4gb2JqZWN0IHdpdGggdGhlIERPTS4gSW4gdGhpcyB3YXksIHN0cnVjdHVyZXMgYW5kIGNvbnRlbnRzIGluIHRoZSBET00gY2FuIGJlXG4gKiBwcm9ncmFtbWF0aWNhbGx5IGFkYXB0ZWQgdmlhIGF0dHJpYnV0ZXMuXG4gKlxuICogRm9yIGV4YW1wbGUsIHRvIGluY2x1ZGUgYSBzdHJpbmcgZnJvbSBhbiBvYmplY3QsIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1yZXBsYWNlYCBjYW4gYmUgdXNlZC5cbiAqIGEgZnVydGhlciBleHBsYW5hdGlvbiBjYW4gYmUgZm91bmQgdW5kZXIgW21vbnN0ZXJqcy5vcmddKGh0dHBzOi8vbW9uc3RlcmpzLm9yZy8pXG4gKlxuICogQ2hhbmdlcyB0byBhdHRyaWJ1dGVzIGFyZSBtYWRlIG9ubHkgd2hlbiB0aGUgZGlyZWN0IHZhbHVlcyBhcmUgY2hhbmdlZC4gSWYgeW91IHdhbnQgdG8gYXNzaWduIGNoYW5nZXNcbiAqIHRvIG90aGVyIHZhbHVlcyBhcyB3ZWxsLCB5b3UgaGF2ZSB0byBpbnNlcnQgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLXNlbGVjdC10aGlzYC4gVGhpcyBzaG91bGQgYmVcbiAqIGRvbmUgd2l0aCBjYXJlLCBhcyBpdCBjYW4gcmVkdWNlIHBlcmZvcm1hbmNlLlxuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9saWJyYXJpZXMvZG9tL3VwZGF0ZXIvc2ltcGxlLyBTaW1wbGUgZXhhbXBsZVxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7RXJyb3J9IHRoZSB2YWx1ZSBpcyBub3QgaXRlcmFibGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBwaXBlcyBhcmUgbm90IGFsbG93ZWQgd2hlbiBjbG9uaW5nIGEgbm9kZS5cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyB0ZW1wbGF0ZSB3YXMgZm91bmQgd2l0aCB0aGUgc3BlY2lmaWVkIGtleS5cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgbWF4aW11bSBkZXB0aCBmb3IgdGhlIHJlY3Vyc2lvbiBpcyByZWFjaGVkLlxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBvYmplY3RcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mIEhUTUxFbGVtZW50XG4gKiBAc3VtbWFyeSBUaGUgdXBkYXRlciBjbGFzcyBjb25uZWN0cyBhbiBvYmplY3Qgd2l0aCB0aGUgZG9tXG4gKi9cbmNsYXNzIFVwZGF0ZXIgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqIEBzaW5jZSAxLjguMFxuXHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG5cdCAqIEBwYXJhbSB7b2JqZWN0fFByb3h5T2JzZXJ2ZXJ8dW5kZWZpbmVkfSBzdWJqZWN0XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgb2JqZWN0XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mIEhUTUxFbGVtZW50XG5cdCAqIEBzZWUge0BsaW5rIE1vbnN0ZXIuRE9NLmZpbmREb2N1bWVudFRlbXBsYXRlfVxuXHQgKi9cblx0Y29uc3RydWN0b3IoZWxlbWVudCwgc3ViamVjdCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHQvKipcblx0XHQgKiBAdHlwZSB7SFRNTEVsZW1lbnR9XG5cdFx0ICovXG5cdFx0aWYgKHN1YmplY3QgPT09IHVuZGVmaW5lZCkgc3ViamVjdCA9IHt9O1xuXHRcdGlmICghaXNJbnN0YW5jZShzdWJqZWN0LCBQcm94eU9ic2VydmVyKSkge1xuXHRcdFx0c3ViamVjdCA9IG5ldyBQcm94eU9ic2VydmVyKHN1YmplY3QpO1xuXHRcdH1cblxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0ge1xuXHRcdFx0ZWxlbWVudDogdmFsaWRhdGVJbnN0YW5jZShlbGVtZW50LCBIVE1MRWxlbWVudCksXG5cdFx0XHRsYXN0OiB7fSxcblx0XHRcdGNhbGxiYWNrczogbmV3IE1hcCgpLFxuXHRcdFx0ZXZlbnRUeXBlczogW1wia2V5dXBcIiwgXCJjbGlja1wiLCBcImNoYW5nZVwiLCBcImRyb3BcIiwgXCJ0b3VjaGVuZFwiLCBcImlucHV0XCJdLFxuXHRcdFx0c3ViamVjdDogc3ViamVjdCxcblx0XHR9O1xuXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uY2FsbGJhY2tzLnNldChcblx0XHRcdFwiY2hlY2tzdGF0ZVwiLFxuXHRcdFx0Z2V0Q2hlY2tTdGF0ZUNhbGxiYWNrLmNhbGwodGhpcyksXG5cdFx0KTtcblxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLnN1YmplY3QuYXR0YWNoT2JzZXJ2ZXIoXG5cdFx0XHRuZXcgT2JzZXJ2ZXIoKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBzID0gdGhpc1tpbnRlcm5hbFN5bWJvbF0uc3ViamVjdC5nZXRSZWFsU3ViamVjdCgpO1xuXG5cdFx0XHRcdGNvbnN0IGRpZmZSZXN1bHQgPSBkaWZmKHRoaXNbaW50ZXJuYWxTeW1ib2xdLmxhc3QsIHMpO1xuXHRcdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5sYXN0ID0gY2xvbmUocyk7XG5cblx0XHRcdFx0Y29uc3QgcHJvbWlzZXMgPSBbXTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IFssIGNoYW5nZV0gb2YgT2JqZWN0LmVudHJpZXMoZGlmZlJlc3VsdCkpIHtcblx0XHRcdFx0XHRwcm9taXNlcy5wdXNoKFxuXHRcdFx0XHRcdFx0bmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRnZXRXaW5kb3coKS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZW1vdmVFbGVtZW50LmNhbGwodGhpcywgY2hhbmdlKTtcblx0XHRcdFx0XHRcdFx0XHRcdGluc2VydEVsZW1lbnQuY2FsbCh0aGlzLCBjaGFuZ2UpO1xuXHRcdFx0XHRcdFx0XHRcdFx0dXBkYXRlQ29udGVudC5jYWxsKHRoaXMsIGNoYW5nZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR1cGRhdGVBdHRyaWJ1dGVzLmNhbGwodGhpcywgY2hhbmdlKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZWplY3QoZXJyb3IpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKTtcblx0XHRcdH0pLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogRGVmYXVsdHM6ICdrZXl1cCcsICdjbGljaycsICdjaGFuZ2UnLCAnZHJvcCcsICd0b3VjaGVuZCdcblx0ICpcblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZGUvZG9jcy9XZWIvRXZlbnRzfVxuXHQgKiBAc2luY2UgMS45LjBcblx0ICogQHBhcmFtIHtBcnJheX0gdHlwZXNcblx0ICogQHJldHVybiB7VXBkYXRlcn1cblx0ICovXG5cdHNldEV2ZW50VHlwZXModHlwZXMpIHtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5ldmVudFR5cGVzID0gdmFsaWRhdGVBcnJheSh0eXBlcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogV2l0aCB0aGlzIG1ldGhvZCwgdGhlIGV2ZW50bGlzdGVuZXJzIGFyZSBob29rZWQgaW4gYW5kIHRoZSBtYWdpYyBiZWdpbnMuXG5cdCAqXG5cdCAqIGBgYGpzXG5cdCAqIHVwZGF0ZXIucnVuKCkudGhlbigoKSA9PiB7XG5cdCAqICAgdXBkYXRlci5lbmFibGVFdmVudFByb2Nlc3NpbmcoKTtcblx0ICogfSk7XG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAc2luY2UgMS45LjBcblx0ICogQHJldHVybiB7VXBkYXRlcn1cblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBiaW5kIGFyZ3VtZW50IG11c3Qgc3RhcnQgYXMgYSB2YWx1ZSB3aXRoIGEgcGF0aFxuXHQgKi9cblx0ZW5hYmxlRXZlbnRQcm9jZXNzaW5nKCkge1xuXHRcdHRoaXMuZGlzYWJsZUV2ZW50UHJvY2Vzc2luZygpO1xuXG5cdFx0Zm9yIChjb25zdCB0eXBlIG9mIHRoaXNbaW50ZXJuYWxTeW1ib2xdLmV2ZW50VHlwZXMpIHtcblx0XHRcdC8vIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0V2ZW50VGFyZ2V0L2FkZEV2ZW50TGlzdGVuZXJcblx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcblx0XHRcdFx0dHlwZSxcblx0XHRcdFx0Z2V0Q29udHJvbEV2ZW50SGFuZGxlci5jYWxsKHRoaXMpLFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Y2FwdHVyZTogdHJ1ZSxcblx0XHRcdFx0XHRwYXNzaXZlOiB0cnVlLFxuXHRcdFx0XHR9LFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCB0dXJucyBvZmYgdGhlIG1hZ2ljIG9yIHdobyBsb3ZlcyBpdCBtb3JlIHByb2ZhbmUgaXQgcmVtb3ZlcyB0aGUgZXZlbnRMaXN0ZW5lci5cblx0ICpcblx0ICogQHNpbmNlIDEuOS4wXG5cdCAqIEByZXR1cm4ge1VwZGF0ZXJ9XG5cdCAqL1xuXHRkaXNhYmxlRXZlbnRQcm9jZXNzaW5nKCkge1xuXHRcdGZvciAoY29uc3QgdHlwZSBvZiB0aGlzW2ludGVybmFsU3ltYm9sXS5ldmVudFR5cGVzKSB7XG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXG5cdFx0XHRcdHR5cGUsXG5cdFx0XHRcdGdldENvbnRyb2xFdmVudEhhbmRsZXIuY2FsbCh0aGlzKSxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIHJ1biBtZXRob2QgbXVzdCBiZSBjYWxsZWQgZm9yIHRoZSB1cGRhdGUgdG8gc3RhcnQgd29ya2luZy5cblx0ICogVGhlIG1ldGhvZCBlbnN1cmVzIHRoYXQgY2hhbmdlcyBhcmUgZGV0ZWN0ZWQuXG5cdCAqXG5cdCAqIGBgYGpzXG5cdCAqIHVwZGF0ZXIucnVuKCkudGhlbigoKSA9PiB7XG5cdCAqICAgdXBkYXRlci5lbmFibGVFdmVudFByb2Nlc3NpbmcoKTtcblx0ICogfSk7XG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAc3VtbWFyeSBMZXQgdGhlIG1hZ2ljIGJlZ2luXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRydW4oKSB7XG5cdFx0Ly8gdGhlIGtleSBfX2luaXRfX2hhcyBubyBmdXJ0aGVyIG1lYW5pbmcgYW5kIGlzIG9ubHlcblx0XHQvLyB1c2VkIHRvIGNyZWF0ZSB0aGUgZGlmZiBmb3IgZW1wdHkgb2JqZWN0cy5cblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5sYXN0ID0geyBfX2luaXRfXzogdHJ1ZSB9O1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsU3ltYm9sXS5zdWJqZWN0Lm5vdGlmeU9ic2VydmVycygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHZhbHVlcyBvZiBib3VuZCBlbGVtZW50cyBhbmQgY2hhbmdlcyB0aGVtIGluIHN1YmplY3Rcblx0ICpcblx0ICogQHNpbmNlIDEuMjcuMFxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5VcGRhdGVyfVxuXHQgKi9cblx0cmV0cmlldmUoKSB7XG5cdFx0cmV0cmlldmVGcm9tQmluZGluZ3MuY2FsbCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBJZiB5b3UgaGF2ZSBwYXNzZWQgYSBQcm94eU9ic2VydmVyIGluIHRoZSBjb25zdHJ1Y3RvciwgeW91IHdpbGwgZ2V0IHRoZSBvYmplY3QgdGhhdCB0aGUgUHJveHlPYnNlcnZlciBtYW5hZ2VzIGhlcmUuXG5cdCAqIEhvd2V2ZXIsIGlmIHlvdSBwYXNzZWQgYSBzaW1wbGUgb2JqZWN0LCBoZXJlIHlvdSB3aWxsIGdldCBhIHByb3h5IGZvciB0aGF0IG9iamVjdC5cblx0ICpcblx0ICogRm9yIGNoYW5nZXMsIHRoZSBQcm94eU9ic2VydmVyIG11c3QgYmUgdXNlZC5cblx0ICpcblx0ICogQHNpbmNlIDEuOC4wXG5cdCAqIEByZXR1cm4ge1Byb3h5fVxuXHQgKi9cblx0Z2V0U3ViamVjdCgpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbFN5bWJvbF0uc3ViamVjdC5nZXRTdWJqZWN0KCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgdG8gcmVnaXN0ZXIgY29tbWFuZHMgdGhhdCBjYW4gYmUgY2FsbGVkIHZpYSBjYWxsOiBpbnN0cnVjdGlvbi5cblx0ICogVGhpcyBjYW4gYmUgdXNlZCB0byBwcm92aWRlIGEgcGlwZSB3aXRoIGl0cyBvd24gZnVuY3Rpb25hbGl0eS5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcblx0ICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcblx0ICogQHJldHVybiB7VHJhbnNmb3JtZXJ9XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgZnVuY3Rpb25cblx0ICovXG5cdHNldENhbGxiYWNrKG5hbWUsIGNhbGxiYWNrKSB7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uY2FsbGJhY2tzLnNldChuYW1lLCBjYWxsYmFjayk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS45LjBcbiAqIEByZXR1cm4ge2Z1bmN0aW9uXG4gKiBAdGhpcyBVcGRhdGVyXG4gKi9cbmZ1bmN0aW9uIGdldENoZWNrU3RhdGVDYWxsYmFjaygpIHtcblx0cmV0dXJuIGZ1bmN0aW9uIChjdXJyZW50KSB7XG5cdFx0Ly8gdGhpcyBpcyBhIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBvYmplY3QgKHRoZXJlZm9yZSBubyBhcnJheSBmdW5jdGlvbiBoZXJlKVxuXHRcdGlmICh0aGlzIGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCkge1xuXHRcdFx0aWYgKFtcInJhZGlvXCIsIFwiY2hlY2tib3hcIl0uaW5kZXhPZih0aGlzLnR5cGUpICE9PSAtMSkge1xuXHRcdFx0XHRyZXR1cm4gYCR7dGhpcy52YWx1ZX1gID09PSBgJHtjdXJyZW50fWAgPyBcInRydWVcIiA6IHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHRoaXMgaW5zdGFuY2VvZiBIVE1MT3B0aW9uRWxlbWVudCkge1xuXHRcdFx0aWYgKGlzQXJyYXkoY3VycmVudCkgJiYgY3VycmVudC5pbmRleE9mKHRoaXMudmFsdWUpICE9PSAtMSkge1xuXHRcdFx0XHRyZXR1cm4gXCJ0cnVlXCI7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IHN5bWJvbCA9IFN5bWJvbChcIkBzY2h1a2FpL21vbnN0ZXIvdXBkYXRlckBARXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn1cbiAqIEB0aGlzIFVwZGF0ZXJcbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgYmluZCBhcmd1bWVudCBtdXN0IHN0YXJ0IGFzIGEgdmFsdWUgd2l0aCBhIHBhdGhcbiAqL1xuZnVuY3Rpb24gZ2V0Q29udHJvbEV2ZW50SGFuZGxlcigpIHtcblx0aWYgKHRoaXNbc3ltYm9sXSkge1xuXHRcdHJldHVybiB0aGlzW3N5bWJvbF07XG5cdH1cblxuXHQvKipcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBiaW5kIGFyZ3VtZW50IG11c3Qgc3RhcnQgYXMgYSB2YWx1ZSB3aXRoIGEgcGF0aC5cblx0ICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIG9iamVjdFxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKi9cblx0dGhpc1tzeW1ib2xdID0gKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgZWxlbWVudCA9IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KGV2ZW50LCBBVFRSSUJVVEVfVVBEQVRFUl9CSU5EKTtcblxuXHRcdGlmIChlbGVtZW50ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0cXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuXHRcdFx0cmV0cmlldmVBbmRTZXRWYWx1ZS5jYWxsKHRoaXMsIGVsZW1lbnQpO1xuXHRcdH0pO1xuXHR9O1xuXG5cdHJldHVybiB0aGlzW3N5bWJvbF07XG59XG5cbi8qKlxuICogQHRocm93cyB7RXJyb3J9IHRoZSBiaW5kIGFyZ3VtZW50IG11c3Qgc3RhcnQgYXMgYSB2YWx1ZSB3aXRoIGEgcGF0aFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybiB2b2lkXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiByZXRyaWV2ZUFuZFNldFZhbHVlKGVsZW1lbnQpIHtcblx0Y29uc3QgcGF0aGZpbmRlciA9IG5ldyBQYXRoZmluZGVyKHRoaXNbaW50ZXJuYWxTeW1ib2xdLnN1YmplY3QuZ2V0U3ViamVjdCgpKTtcblxuXHRsZXQgcGF0aCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9VUERBVEVSX0JJTkQpO1xuXHRpZiAocGF0aCA9PT0gbnVsbClcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgYmluZCBhcmd1bWVudCBtdXN0IHN0YXJ0IGFzIGEgdmFsdWUgd2l0aCBhIHBhdGhcIik7XG5cblx0aWYgKHBhdGguaW5kZXhPZihcInBhdGg6XCIpICE9PSAwKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIGJpbmQgYXJndW1lbnQgbXVzdCBzdGFydCBhcyBhIHZhbHVlIHdpdGggYSBwYXRoXCIpO1xuXHR9XG5cblx0cGF0aCA9IHBhdGguc3Vic3RyaW5nKDUpOyAvLyByZW1vdmUgcGF0aDogZnJvbSB0aGUgc3RyaW5nXG5cblx0bGV0IHZhbHVlO1xuXG5cdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCkge1xuXHRcdHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG5cdFx0XHRjYXNlIFwiY2hlY2tib3hcIjpcblx0XHRcdFx0dmFsdWUgPSBlbGVtZW50LmNoZWNrZWQgPyBlbGVtZW50LnZhbHVlIDogdW5kZWZpbmVkO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHZhbHVlID0gZWxlbWVudC52YWx1ZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50KSB7XG5cdFx0dmFsdWUgPSBlbGVtZW50LnZhbHVlO1xuXHR9IGVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MU2VsZWN0RWxlbWVudCkge1xuXHRcdHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG5cdFx0XHRjYXNlIFwic2VsZWN0LW9uZVwiOlxuXHRcdFx0XHR2YWx1ZSA9IGVsZW1lbnQudmFsdWU7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcInNlbGVjdC1tdWx0aXBsZVwiOlxuXHRcdFx0XHR2YWx1ZSA9IGVsZW1lbnQudmFsdWU7XG5cblx0XHRcdFx0bGV0IG9wdGlvbnMgPSBlbGVtZW50Py5zZWxlY3RlZE9wdGlvbnM7XG5cdFx0XHRcdGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0b3B0aW9ucyA9IGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcIjpzY29wZSBvcHRpb246Y2hlY2tlZFwiKTtcblx0XHRcdFx0dmFsdWUgPSBBcnJheS5mcm9tKG9wdGlvbnMpLm1hcCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSk7XG5cblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXG5cdFx0Ly8gdmFsdWVzIGZyb20gY3VzdG9tIGVsZW1lbnRzXG5cdH0gZWxzZSBpZiAoXG5cdFx0KGVsZW1lbnQ/LmNvbnN0cnVjdG9yPy5wcm90b3R5cGUgJiZcblx0XHRcdCEhT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihcblx0XHRcdFx0ZWxlbWVudC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsXG5cdFx0XHRcdFwidmFsdWVcIixcblx0XHRcdCk/LltcImdldFwiXSkgfHxcblx0XHRlbGVtZW50Lmhhc093blByb3BlcnR5KFwidmFsdWVcIilcblx0KSB7XG5cdFx0dmFsdWUgPSBlbGVtZW50Py5bXCJ2YWx1ZVwiXTtcblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCBvYmplY3RcIik7XG5cdH1cblxuXHRpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG5cdFx0Y29uc3QgdHlwZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9VUERBVEVSX0JJTkRfVFlQRSk7XG5cdFx0c3dpdGNoICh0eXBlKSB7XG5cdFx0XHRjYXNlIFwibnVtYmVyXCI6XG5cdFx0XHRjYXNlIFwiaW50XCI6XG5cdFx0XHRjYXNlIFwiZmxvYXRcIjpcblx0XHRcdGNhc2UgXCJpbnRlZ2VyXCI6XG5cdFx0XHRcdHZhbHVlID0gTnVtYmVyKHZhbHVlKTtcblx0XHRcdFx0aWYgKGlzTmFOKHZhbHVlKSkge1xuXHRcdFx0XHRcdHZhbHVlID0gMDtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJib29sZWFuXCI6XG5cdFx0XHRjYXNlIFwiYm9vbFwiOlxuXHRcdFx0Y2FzZSBcImNoZWNrYm94XCI6XG5cdFx0XHRcdHZhbHVlID0gdmFsdWUgPT09IFwidHJ1ZVwiIHx8IHZhbHVlID09PSBcIjFcIiB8fCB2YWx1ZSA9PT0gXCJvblwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJhcnJheVwiOlxuXHRcdFx0Y2FzZSBcImxpc3RcIjpcblx0XHRcdFx0dmFsdWUgPSB2YWx1ZS5zcGxpdChcIixcIik7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIm9iamVjdFwiOlxuXHRcdFx0Y2FzZSBcImpzb25cIjpcblx0XHRcdFx0dmFsdWUgPSBKU09OLnBhcnNlKHZhbHVlKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHRjb25zdCBjb3B5ID0gY2xvbmUodGhpc1tpbnRlcm5hbFN5bWJvbF0uc3ViamVjdC5nZXRSZWFsU3ViamVjdCgpKTtcblxuXHRjb25zdCBwZiA9IG5ldyBQYXRoZmluZGVyKGNvcHkpO1xuXHRwZi5zZXRWaWEocGF0aCwgdmFsdWUpO1xuXG5cdGNvbnN0IGRpZmZSZXN1bHQgPSBkaWZmKGNvcHksIHRoaXNbaW50ZXJuYWxTeW1ib2xdLnN1YmplY3QuZ2V0UmVhbFN1YmplY3QoKSk7XG5cblx0aWYgKGRpZmZSZXN1bHQubGVuZ3RoID4gMCkge1xuXHRcdHBhdGhmaW5kZXIuc2V0VmlhKHBhdGgsIHZhbHVlKTtcblx0fVxufVxuXG4vKipcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjcuMFxuICogQHJldHVybiB2b2lkXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiByZXRyaWV2ZUZyb21CaW5kaW5ncygpIHtcblx0aWYgKHRoaXNbaW50ZXJuYWxTeW1ib2xdLmVsZW1lbnQubWF0Y2hlcyhgWyR7QVRUUklCVVRFX1VQREFURVJfQklORH1dYCkpIHtcblx0XHRyZXRyaWV2ZUFuZFNldFZhbHVlLmNhbGwodGhpcywgdGhpc1tpbnRlcm5hbFN5bWJvbF0uZWxlbWVudCk7XG5cdH1cblxuXHRmb3IgKGNvbnN0IFssIGVsZW1lbnRdIG9mIHRoaXNbaW50ZXJuYWxTeW1ib2xdLmVsZW1lbnRcblx0XHQucXVlcnlTZWxlY3RvckFsbChgWyR7QVRUUklCVVRFX1VQREFURVJfQklORH1dYClcblx0XHQuZW50cmllcygpKSB7XG5cdFx0cmV0cmlldmVBbmRTZXRWYWx1ZS5jYWxsKHRoaXMsIGVsZW1lbnQpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKiBAcGFyYW0ge29iamVjdH0gY2hhbmdlXG4gKiBAcmV0dXJuIHt2b2lkfVxuICovXG5mdW5jdGlvbiByZW1vdmVFbGVtZW50KGNoYW5nZSkge1xuXHRmb3IgKGNvbnN0IFssIGVsZW1lbnRdIG9mIHRoaXNbaW50ZXJuYWxTeW1ib2xdLmVsZW1lbnRcblx0XHQucXVlcnlTZWxlY3RvckFsbChgOnNjb3BlIFske0FUVFJJQlVURV9VUERBVEVSX1JFTU9WRX1dYClcblx0XHQuZW50cmllcygpKSB7XG5cdFx0ZWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsZW1lbnQpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKiBAcGFyYW0ge29iamVjdH0gY2hhbmdlXG4gKiBAcmV0dXJuIHt2b2lkfVxuICogQHRocm93cyB7RXJyb3J9IHRoZSB2YWx1ZSBpcyBub3QgaXRlcmFibGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBwaXBlcyBhcmUgbm90IGFsbG93ZWQgd2hlbiBjbG9uaW5nIGEgbm9kZS5cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyB0ZW1wbGF0ZSB3YXMgZm91bmQgd2l0aCB0aGUgc3BlY2lmaWVkIGtleS5cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgbWF4aW11bSBkZXB0aCBmb3IgdGhlIHJlY3Vyc2lvbiBpcyByZWFjaGVkLlxuICogQHRoaXMgVXBkYXRlclxuICovXG5mdW5jdGlvbiBpbnNlcnRFbGVtZW50KGNoYW5nZSkge1xuXHRjb25zdCBzdWJqZWN0ID0gdGhpc1tpbnRlcm5hbFN5bWJvbF0uc3ViamVjdC5nZXRSZWFsU3ViamVjdCgpO1xuXG5cdGNvbnN0IG1lbSA9IG5ldyBXZWFrU2V0KCk7XG5cdGxldCB3ZCA9IDA7XG5cblx0Y29uc3QgY29udGFpbmVyID0gdGhpc1tpbnRlcm5hbFN5bWJvbF0uZWxlbWVudDtcblxuXHR3aGlsZSAodHJ1ZSkge1xuXHRcdGxldCBmb3VuZCA9IGZhbHNlO1xuXHRcdHdkKys7XG5cblx0XHRjb25zdCBwID0gY2xvbmUoY2hhbmdlPy5bXCJwYXRoXCJdKTtcblx0XHRpZiAoIWlzQXJyYXkocCkpIHJldHVybjtcblxuXHRcdHdoaWxlIChwLmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbnN0IGN1cnJlbnQgPSBwLmpvaW4oXCIuXCIpO1xuXG5cdFx0XHRsZXQgaXRlcmF0b3IgPSBuZXcgU2V0KCk7XG5cdFx0XHRjb25zdCBxdWVyeSA9IGBbJHtBVFRSSUJVVEVfVVBEQVRFUl9JTlNFUlR9Kj1cInBhdGg6JHtjdXJyZW50fVwiXWA7XG5cblx0XHRcdGNvbnN0IGUgPSBjb250YWluZXIucXVlcnlTZWxlY3RvckFsbChxdWVyeSk7XG5cblx0XHRcdGlmIChlLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0aXRlcmF0b3IgPSBuZXcgU2V0KFsuLi5lXSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChjb250YWluZXIubWF0Y2hlcyhxdWVyeSkpIHtcblx0XHRcdFx0aXRlcmF0b3IuYWRkKGNvbnRhaW5lcik7XG5cdFx0XHR9XG5cblx0XHRcdGZvciAoY29uc3QgWywgY29udGFpbmVyRWxlbWVudF0gb2YgaXRlcmF0b3IuZW50cmllcygpKSB7XG5cdFx0XHRcdGlmIChtZW0uaGFzKGNvbnRhaW5lckVsZW1lbnQpKSBjb250aW51ZTtcblx0XHRcdFx0bWVtLmFkZChjb250YWluZXJFbGVtZW50KTtcblxuXHRcdFx0XHRmb3VuZCA9IHRydWU7XG5cblx0XHRcdFx0Y29uc3QgYXR0cmlidXRlcyA9IGNvbnRhaW5lckVsZW1lbnQuZ2V0QXR0cmlidXRlKFxuXHRcdFx0XHRcdEFUVFJJQlVURV9VUERBVEVSX0lOU0VSVCxcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKGF0dHJpYnV0ZXMgPT09IG51bGwpIGNvbnRpbnVlO1xuXG5cdFx0XHRcdGNvbnN0IGRlZiA9IHRyaW1TcGFjZXMoYXR0cmlidXRlcyk7XG5cdFx0XHRcdGNvbnN0IGkgPSBkZWYuaW5kZXhPZihcIiBcIik7XG5cdFx0XHRcdGNvbnN0IGtleSA9IHRyaW1TcGFjZXMoZGVmLnN1YnN0cigwLCBpKSk7XG5cdFx0XHRcdGNvbnN0IHJlZlByZWZpeCA9IGAke2tleX0tYDtcblx0XHRcdFx0Y29uc3QgY21kID0gdHJpbVNwYWNlcyhkZWYuc3Vic3RyKGkpKTtcblxuXHRcdFx0XHQvLyB0aGlzIGNhc2UgaXMgYWN0dWFsbHkgZXhjbHVkZWQgYnkgdGhlIHF1ZXJ5IGJ1dCBpcyBuZXZlcnRoZWxlc3MgY2hlY2tlZCBhZ2FpbiBoZXJlXG5cdFx0XHRcdGlmIChjbWQuaW5kZXhPZihcInxcIikgPiAwKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwicGlwZXMgYXJlIG5vdCBhbGxvd2VkIHdoZW4gY2xvbmluZyBhIG5vZGUuXCIpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgcGlwZSA9IG5ldyBQaXBlKGNtZCk7XG5cdFx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmNhbGxiYWNrcy5mb3JFYWNoKChmLCBuKSA9PiB7XG5cdFx0XHRcdFx0cGlwZS5zZXRDYWxsYmFjayhuLCBmKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0bGV0IHZhbHVlO1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGNvbnRhaW5lckVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKEFUVFJJQlVURV9FUlJPUk1FU1NBR0UpO1xuXHRcdFx0XHRcdHZhbHVlID0gcGlwZS5ydW4oc3ViamVjdCk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRjb250YWluZXJFbGVtZW50LnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgZGF0YVBhdGggPSBjbWQuc3BsaXQoXCI6XCIpLnBvcCgpO1xuXG5cdFx0XHRcdGxldCBpbnNlcnRQb2ludDtcblx0XHRcdFx0aWYgKGNvbnRhaW5lckVsZW1lbnQuaGFzQ2hpbGROb2RlcygpKSB7XG5cdFx0XHRcdFx0aW5zZXJ0UG9pbnQgPSBjb250YWluZXJFbGVtZW50Lmxhc3RDaGlsZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghaXNJdGVyYWJsZSh2YWx1ZSkpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgdmFsdWUgaXMgbm90IGl0ZXJhYmxlXCIpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgYXZhaWxhYmxlID0gbmV3IFNldCgpO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgW2ldIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlKSkge1xuXHRcdFx0XHRcdGNvbnN0IHJlZiA9IHJlZlByZWZpeCArIGk7XG5cdFx0XHRcdFx0Y29uc3QgY3VycmVudFBhdGggPSBgJHtkYXRhUGF0aH0uJHtpfWA7XG5cblx0XHRcdFx0XHRhdmFpbGFibGUuYWRkKHJlZik7XG5cdFx0XHRcdFx0Y29uc3QgcmVmRWxlbWVudCA9IGNvbnRhaW5lckVsZW1lbnQucXVlcnlTZWxlY3Rvcihcblx0XHRcdFx0XHRcdGBbJHtBVFRSSUJVVEVfVVBEQVRFUl9JTlNFUlRfUkVGRVJFTkNFfT1cIiR7cmVmfVwiXWAsXG5cdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdGlmIChyZWZFbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdFx0XHRcdGluc2VydFBvaW50ID0gcmVmRWxlbWVudDtcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGFwcGVuZE5ld0RvY3VtZW50RnJhZ21lbnQoY29udGFpbmVyRWxlbWVudCwga2V5LCByZWYsIGN1cnJlbnRQYXRoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IG5vZGVzID0gY29udGFpbmVyRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFxuXHRcdFx0XHRcdGBbJHtBVFRSSUJVVEVfVVBEQVRFUl9JTlNFUlRfUkVGRVJFTkNFfSo9XCIke3JlZlByZWZpeH1cIl1gLFxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgWywgbm9kZV0gb2YgT2JqZWN0LmVudHJpZXMobm9kZXMpKSB7XG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0IWF2YWlsYWJsZS5oYXMoXG5cdFx0XHRcdFx0XHRcdG5vZGUuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9VUERBVEVSX0lOU0VSVF9SRUZFUkVOQ0UpLFxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0Y29udGFpbmVyRWxlbWVudC5yZW1vdmVDaGlsZChub2RlKTtcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdFx0Y29udGFpbmVyRWxlbWVudC5zZXRBdHRyaWJ1dGUoXG5cdFx0XHRcdFx0XHRcdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRcdFx0XHRcdFx0XHRgJHtjb250YWluZXJFbGVtZW50LmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfRVJST1JNRVNTQUdFKX0sICR7XG5cdFx0XHRcdFx0XHRcdFx0XHRlLm1lc3NhZ2Vcblx0XHRcdFx0XHRcdFx0XHR9YC50cmltKCksXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHAucG9wKCk7XG5cdFx0fVxuXG5cdFx0aWYgKGZvdW5kID09PSBmYWxzZSkgYnJlYWs7XG5cdFx0aWYgKHdkKysgPiAyMDApIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBtYXhpbXVtIGRlcHRoIGZvciB0aGUgcmVjdXJzaW9uIGlzIHJlYWNoZWQuXCIpO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqXG4gKiBAcHJpdmF0ZVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGNvbnRhaW5lclxuICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICogQHBhcmFtIHtzdHJpbmd9IHJlZlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAqIEB0aHJvd3Mge0Vycm9yfSBubyB0ZW1wbGF0ZSB3YXMgZm91bmQgd2l0aCB0aGUgc3BlY2lmaWVkIGtleS5cbiAqL1xuZnVuY3Rpb24gYXBwZW5kTmV3RG9jdW1lbnRGcmFnbWVudChjb250YWluZXIsIGtleSwgcmVmLCBwYXRoKSB7XG5cdGNvbnN0IHRlbXBsYXRlID0gZmluZERvY3VtZW50VGVtcGxhdGUoa2V5LCBjb250YWluZXIpO1xuXG5cdGNvbnN0IG5vZGVzID0gdGVtcGxhdGUuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuXHRmb3IgKGNvbnN0IFssIG5vZGVdIG9mIE9iamVjdC5lbnRyaWVzKG5vZGVzLmNoaWxkTm9kZXMpKSB7XG5cdFx0aWYgKG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0YXBwbHlSZWN1cnNpdmUobm9kZSwga2V5LCBwYXRoKTtcblx0XHRcdG5vZGUuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9VUERBVEVSX0lOU0VSVF9SRUZFUkVOQ0UsIHJlZik7XG5cdFx0fVxuXG5cdFx0Y29udGFpbmVyLmFwcGVuZENoaWxkKG5vZGUpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTAuMFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGFwcGx5UmVjdXJzaXZlKG5vZGUsIGtleSwgcGF0aCkge1xuXHRpZiAobm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0aWYgKG5vZGUuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9VUERBVEVSX1JFUExBQ0UpKSB7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IG5vZGUuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9VUERBVEVSX1JFUExBQ0UpO1xuXHRcdFx0bm9kZS5zZXRBdHRyaWJ1dGUoXG5cdFx0XHRcdEFUVFJJQlVURV9VUERBVEVSX1JFUExBQ0UsXG5cdFx0XHRcdHZhbHVlLnJlcGxhY2VBbGwoYHBhdGg6JHtrZXl9YCwgYHBhdGg6JHtwYXRofWApLFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRpZiAobm9kZS5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX1VQREFURVJfQVRUUklCVVRFUykpIHtcblx0XHRcdGNvbnN0IHZhbHVlID0gbm9kZS5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1VQREFURVJfQVRUUklCVVRFUyk7XG5cdFx0XHRub2RlLnNldEF0dHJpYnV0ZShcblx0XHRcdFx0QVRUUklCVVRFX1VQREFURVJfQVRUUklCVVRFUyxcblx0XHRcdFx0dmFsdWUucmVwbGFjZUFsbChgcGF0aDoke2tleX1gLCBgcGF0aDoke3BhdGh9YCksXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgWywgY2hpbGRdIG9mIE9iamVjdC5lbnRyaWVzKG5vZGUuY2hpbGROb2RlcykpIHtcblx0XHRcdGFwcGx5UmVjdXJzaXZlKGNoaWxkLCBrZXksIHBhdGgpO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICogQHBhcmFtIHtvYmplY3R9IGNoYW5nZVxuICogQHJldHVybiB7dm9pZH1cbiAqIEB0aGlzIFVwZGF0ZXJcbiAqL1xuZnVuY3Rpb24gdXBkYXRlQ29udGVudChjaGFuZ2UpIHtcblx0Y29uc3Qgc3ViamVjdCA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdLnN1YmplY3QuZ2V0UmVhbFN1YmplY3QoKTtcblxuXHRjb25zdCBwID0gY2xvbmUoY2hhbmdlPy5bXCJwYXRoXCJdKTtcblx0cnVuVXBkYXRlQ29udGVudC5jYWxsKHRoaXMsIHRoaXNbaW50ZXJuYWxTeW1ib2xdLmVsZW1lbnQsIHAsIHN1YmplY3QpO1xuXG5cdGNvbnN0IHNsb3RzID0gdGhpc1tpbnRlcm5hbFN5bWJvbF0uZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwic2xvdFwiKTtcblx0aWYgKHNsb3RzLmxlbmd0aCA+IDApIHtcblx0XHRmb3IgKGNvbnN0IFssIHNsb3RdIG9mIE9iamVjdC5lbnRyaWVzKHNsb3RzKSkge1xuXHRcdFx0Zm9yIChjb25zdCBbLCBlbGVtZW50XSBvZiBPYmplY3QuZW50cmllcyhzbG90LmFzc2lnbmVkTm9kZXMoKSkpIHtcblx0XHRcdFx0cnVuVXBkYXRlQ29udGVudC5jYWxsKHRoaXMsIGVsZW1lbnQsIHAsIHN1YmplY3QpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gY29udGFpbmVyXG4gKiBAcGFyYW0ge2FycmF5fSBwYXJ0c1xuICogQHBhcmFtIHtvYmplY3R9IHN1YmplY3RcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHJ1blVwZGF0ZUNvbnRlbnQoY29udGFpbmVyLCBwYXJ0cywgc3ViamVjdCkge1xuXHRpZiAoIWlzQXJyYXkocGFydHMpKSByZXR1cm47XG5cdGlmICghKGNvbnRhaW5lciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkgcmV0dXJuO1xuXHRwYXJ0cyA9IGNsb25lKHBhcnRzKTtcblxuXHRjb25zdCBtZW0gPSBuZXcgV2Vha1NldCgpO1xuXG5cdHdoaWxlIChwYXJ0cy5sZW5ndGggPiAwKSB7XG5cdFx0Y29uc3QgY3VycmVudCA9IHBhcnRzLmpvaW4oXCIuXCIpO1xuXHRcdHBhcnRzLnBvcCgpO1xuXG5cdFx0Ly8gVW5mb3J0dW5hdGVseSwgc3RhdGljIGRhdGEgaXMgYWx3YXlzIGNoYW5nZWQgYXMgd2VsbCwgc2luY2UgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHJlYWN0IHRvIGNoYW5nZXMgaGVyZS5cblx0XHRjb25zdCBxdWVyeSA9IGBbJHtBVFRSSUJVVEVfVVBEQVRFUl9SRVBMQUNFfV49XCJwYXRoOiR7Y3VycmVudH1cIl0sIFske0FUVFJJQlVURV9VUERBVEVSX1JFUExBQ0V9Xj1cInN0YXRpYzpcIl0sIFske0FUVFJJQlVURV9VUERBVEVSX1JFUExBQ0V9Xj1cImkxOG46XCJdYDtcblx0XHRjb25zdCBlID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoYCR7cXVlcnl9YCk7XG5cblx0XHRjb25zdCBpdGVyYXRvciA9IG5ldyBTZXQoWy4uLmVdKTtcblxuXHRcdGlmIChjb250YWluZXIubWF0Y2hlcyhxdWVyeSkpIHtcblx0XHRcdGl0ZXJhdG9yLmFkZChjb250YWluZXIpO1xuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIEB0eXBlIHtIVE1MRWxlbWVudH1cblx0XHQgKi9cblx0XHRmb3IgKGNvbnN0IFtlbGVtZW50XSBvZiBpdGVyYXRvci5lbnRyaWVzKCkpIHtcblx0XHRcdGlmIChtZW0uaGFzKGVsZW1lbnQpKSByZXR1cm47XG5cdFx0XHRtZW0uYWRkKGVsZW1lbnQpO1xuXG5cdFx0XHRjb25zdCBhdHRyaWJ1dGVzID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1VQREFURVJfUkVQTEFDRSk7XG5cdFx0XHRjb25zdCBjbWQgPSB0cmltU3BhY2VzKGF0dHJpYnV0ZXMpO1xuXG5cdFx0XHRjb25zdCBwaXBlID0gbmV3IFBpcGUoY21kKTtcblx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmNhbGxiYWNrcy5mb3JFYWNoKChmLCBuKSA9PiB7XG5cdFx0XHRcdHBpcGUuc2V0Q2FsbGJhY2sobiwgZik7XG5cdFx0XHR9KTtcblxuXHRcdFx0bGV0IHZhbHVlO1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0ZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoQVRUUklCVVRFX0VSUk9STUVTU0FHRSk7XG5cdFx0XHRcdHZhbHVlID0gcGlwZS5ydW4oc3ViamVjdCk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGVsZW1lbnQuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh2YWx1ZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRcdHdoaWxlIChlbGVtZW50LmZpcnN0Q2hpbGQpIHtcblx0XHRcdFx0XHRlbGVtZW50LnJlbW92ZUNoaWxkKGVsZW1lbnQuZmlyc3RDaGlsZCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGVsZW1lbnQuYXBwZW5kQ2hpbGQodmFsdWUpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUoXG5cdFx0XHRcdFx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdFx0XHRcdFx0YCR7ZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0VSUk9STUVTU0FHRSl9LCAke1xuXHRcdFx0XHRcdFx0XHRlLm1lc3NhZ2Vcblx0XHRcdFx0XHRcdH1gLnRyaW0oKSxcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbGVtZW50LmlubmVySFRNTCA9IHZhbHVlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAc2luY2UgMS44LjBcbiAqIEBwYXJhbSB7b2JqZWN0fSBjaGFuZ2VcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZUF0dHJpYnV0ZXMoY2hhbmdlKSB7XG5cdGNvbnN0IHN1YmplY3QgPSB0aGlzW2ludGVybmFsU3ltYm9sXS5zdWJqZWN0LmdldFJlYWxTdWJqZWN0KCk7XG5cdGNvbnN0IHAgPSBjbG9uZShjaGFuZ2U/LltcInBhdGhcIl0pO1xuXHRydW5VcGRhdGVBdHRyaWJ1dGVzLmNhbGwodGhpcywgdGhpc1tpbnRlcm5hbFN5bWJvbF0uZWxlbWVudCwgcCwgc3ViamVjdCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGNvbnRhaW5lclxuICogQHBhcmFtIHthcnJheX0gcGFydHNcbiAqIEBwYXJhbSB7b2JqZWN0fSBzdWJqZWN0XG4gKiBAcmV0dXJuIHt2b2lkfVxuICogQHRoaXMgVXBkYXRlclxuICovXG5mdW5jdGlvbiBydW5VcGRhdGVBdHRyaWJ1dGVzKGNvbnRhaW5lciwgcGFydHMsIHN1YmplY3QpIHtcblx0aWYgKCFpc0FycmF5KHBhcnRzKSkgcmV0dXJuO1xuXHRwYXJ0cyA9IGNsb25lKHBhcnRzKTtcblxuXHRjb25zdCBtZW0gPSBuZXcgV2Vha1NldCgpO1xuXG5cdHdoaWxlIChwYXJ0cy5sZW5ndGggPiAwKSB7XG5cdFx0Y29uc3QgY3VycmVudCA9IHBhcnRzLmpvaW4oXCIuXCIpO1xuXHRcdHBhcnRzLnBvcCgpO1xuXG5cdFx0bGV0IGl0ZXJhdG9yID0gbmV3IFNldCgpO1xuXG5cdFx0Y29uc3QgcXVlcnkgPSBgWyR7QVRUUklCVVRFX1VQREFURVJfU0VMRUNUX1RISVN9XVske0FUVFJJQlVURV9VUERBVEVSX0FUVFJJQlVURVN9XSwgWyR7QVRUUklCVVRFX1VQREFURVJfQVRUUklCVVRFU30qPVwicGF0aDoke2N1cnJlbnR9XCJdLCBbJHtBVFRSSUJVVEVfVVBEQVRFUl9BVFRSSUJVVEVTfV49XCJzdGF0aWM6XCJdLCBbJHtBVFRSSUJVVEVfVVBEQVRFUl9BVFRSSUJVVEVTfV49XCJpMThuOlwiXWA7XG5cblx0XHRjb25zdCBlID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwocXVlcnkpO1xuXG5cdFx0aWYgKGUubGVuZ3RoID4gMCkge1xuXHRcdFx0aXRlcmF0b3IgPSBuZXcgU2V0KFsuLi5lXSk7XG5cdFx0fVxuXG5cdFx0aWYgKGNvbnRhaW5lci5tYXRjaGVzKHF1ZXJ5KSkge1xuXHRcdFx0aXRlcmF0b3IuYWRkKGNvbnRhaW5lcik7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBbZWxlbWVudF0gb2YgaXRlcmF0b3IuZW50cmllcygpKSB7XG5cdFx0XHRpZiAobWVtLmhhcyhlbGVtZW50KSkgcmV0dXJuO1xuXHRcdFx0bWVtLmFkZChlbGVtZW50KTtcblxuXHRcdFx0Ly8gdGhpcyBjYXNlIG9jY3VycyB3aGVuIHRoZSBBVFRSSUJVVEVfVVBEQVRFUl9TRUxFQ1RfVEhJUyBhdHRyaWJ1dGUgaXMgc2V0XG5cdFx0XHRpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9VUERBVEVSX0FUVFJJQlVURVMpKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBhdHRyaWJ1dGVzID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1VQREFURVJfQVRUUklCVVRFUyk7XG5cblx0XHRcdGZvciAobGV0IFssIGRlZl0gb2YgT2JqZWN0LmVudHJpZXMoYXR0cmlidXRlcy5zcGxpdChcIixcIikpKSB7XG5cdFx0XHRcdGRlZiA9IHRyaW1TcGFjZXMoZGVmKTtcblx0XHRcdFx0Y29uc3QgaSA9IGRlZi5pbmRleE9mKFwiIFwiKTtcblx0XHRcdFx0Y29uc3QgbmFtZSA9IHRyaW1TcGFjZXMoZGVmLnN1YnN0cigwLCBpKSk7XG5cdFx0XHRcdGNvbnN0IGNtZCA9IHRyaW1TcGFjZXMoZGVmLnN1YnN0cihpKSk7XG5cblx0XHRcdFx0Y29uc3QgcGlwZSA9IG5ldyBQaXBlKGNtZCk7XG5cblx0XHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uY2FsbGJhY2tzLmZvckVhY2goKGYsIG4pID0+IHtcblx0XHRcdFx0XHRwaXBlLnNldENhbGxiYWNrKG4sIGYsIGVsZW1lbnQpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRsZXQgdmFsdWU7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0ZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoQVRUUklCVVRFX0VSUk9STUVTU0FHRSk7XG5cdFx0XHRcdFx0dmFsdWUgPSBwaXBlLnJ1bihzdWJqZWN0KTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdGVsZW1lbnQuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGVsZW1lbnQuZ2V0QXR0cmlidXRlKG5hbWUpICE9PSB2YWx1ZSkge1xuXHRcdFx0XHRcdGVsZW1lbnQuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGhhbmRsZUlucHV0Q29udHJvbEF0dHJpYnV0ZVVwZGF0ZS5jYWxsKHRoaXMsIGVsZW1lbnQsIG5hbWUsIHZhbHVlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudHwqfSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfHVuZGVmaW5lZH0gdmFsdWVcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKiBAdGhpcyBVcGRhdGVyXG4gKi9cblxuZnVuY3Rpb24gaGFuZGxlSW5wdXRDb250cm9sQXR0cmlidXRlVXBkYXRlKGVsZW1lbnQsIG5hbWUsIHZhbHVlKSB7XG5cdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTFNlbGVjdEVsZW1lbnQpIHtcblx0XHRzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuXHRcdFx0Y2FzZSBcInNlbGVjdC1tdWx0aXBsZVwiOlxuXHRcdFx0XHRmb3IgKGNvbnN0IFtpbmRleCwgb3B0XSBvZiBPYmplY3QuZW50cmllcyhlbGVtZW50Lm9wdGlvbnMpKSB7XG5cdFx0XHRcdFx0aWYgKHZhbHVlLmluZGV4T2Yob3B0LnZhbHVlKSAhPT0gLTEpIHtcblx0XHRcdFx0XHRcdG9wdC5zZWxlY3RlZCA9IHRydWU7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG9wdC5zZWxlY3RlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcInNlbGVjdC1vbmVcIjpcblx0XHRcdFx0Ly8gT25seSBvbmUgdmFsdWUgbWF5IGJlIHNlbGVjdGVkXG5cblx0XHRcdFx0Zm9yIChjb25zdCBbaW5kZXgsIG9wdF0gb2YgT2JqZWN0LmVudHJpZXMoZWxlbWVudC5vcHRpb25zKSkge1xuXHRcdFx0XHRcdGlmIChvcHQudmFsdWUgPT09IHZhbHVlKSB7XG5cdFx0XHRcdFx0XHRlbGVtZW50LnNlbGVjdGVkSW5kZXggPSBpbmRleDtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fSBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCkge1xuXHRcdHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG5cdFx0XHRjYXNlIFwicmFkaW9cIjpcblx0XHRcdFx0aWYgKG5hbWUgPT09IFwiY2hlY2tlZFwiKSB7XG5cdFx0XHRcdFx0ZWxlbWVudC5jaGVja2VkID0gdmFsdWUgIT09IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIFwiY2hlY2tib3hcIjpcblx0XHRcdFx0aWYgKG5hbWUgPT09IFwiY2hlY2tlZFwiKSB7XG5cdFx0XHRcdFx0ZWxlbWVudC5jaGVja2VkID0gdmFsdWUgIT09IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcInRleHRcIjpcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGlmIChuYW1lID09PSBcInZhbHVlXCIpIHtcblx0XHRcdFx0XHRlbGVtZW50LnZhbHVlID0gdmFsdWUgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiB2YWx1ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fSBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCkge1xuXHRcdGlmIChuYW1lID09PSBcInZhbHVlXCIpIHtcblx0XHRcdGVsZW1lbnQudmFsdWUgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IHZhbHVlO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7Tm9kZUxpc3R8SFRNTEVsZW1lbnR8U2V0PEhUTUxFbGVtZW50Pn0gZWxlbWVudHNcbiAqIEBwYXJhbSB7U3ltYm9sfSBzeW1ib2xcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmplY3RcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWdcbiAqXG4gKiBDb25maWc6IGVuYWJsZUV2ZW50UHJvY2Vzc2luZyB7Ym9vbGVhbn0gLSBkZWZhdWx0OiBmYWxzZSAtIGVuYWJsZXMgdGhlIGV2ZW50IHByb2Nlc3NpbmdcbiAqXG4gKiBAcmV0dXJuIHtQcm9taXNlW119XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjIzLjBcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gZWxlbWVudHMgaXMgbm90IGFuIGluc3RhbmNlIG9mIE5vZGVMaXN0LCBIVE1MRWxlbWVudCBvciBTZXRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBIVE1MRWxlbWVudFxuICogQHRocm93cyB7VHlwZUVycm9yfSBzeW1ib2wgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBTeW1ib2xcbiAqL1xuZnVuY3Rpb24gYWRkT2JqZWN0V2l0aFVwZGF0ZXJUb0VsZW1lbnQoZWxlbWVudHMsIHN5bWJvbCwgb2JqZWN0LCBjb25maWcgPSB7fSkge1xuXHRpZiAoISh0aGlzIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcblx0XHRcdFwidGhlIGNvbnRleHQgb2YgdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIEhUTUxFbGVtZW50XCIsXG5cdFx0KTtcblx0fVxuXG5cdGlmICghKHR5cGVvZiBzeW1ib2wgPT09IFwic3ltYm9sXCIpKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInN5bWJvbCBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFN5bWJvbFwiKTtcblx0fVxuXG5cdGNvbnN0IHVwZGF0ZXJzID0gbmV3IFNldCgpO1xuXG5cdGlmIChlbGVtZW50cyBpbnN0YW5jZW9mIE5vZGVMaXN0KSB7XG5cdFx0ZWxlbWVudHMgPSBuZXcgU2V0KFsuLi5lbGVtZW50c10pO1xuXHR9IGVsc2UgaWYgKGVsZW1lbnRzIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRlbGVtZW50cyA9IG5ldyBTZXQoW2VsZW1lbnRzXSk7XG5cdH0gZWxzZSBpZiAoZWxlbWVudHMgaW5zdGFuY2VvZiBTZXQpIHtcblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFxuXHRcdFx0YGVsZW1lbnRzIGlzIG5vdCBhIHZhbGlkIHR5cGUuIChhY3R1YWw6ICR7dHlwZW9mIGVsZW1lbnRzfSlgLFxuXHRcdCk7XG5cdH1cblxuXHRjb25zdCByZXN1bHQgPSBbXTtcblxuXHRjb25zdCB1cGRhdGVyQ2FsbGJhY2tzID0gW107XG5cdGNvbnN0IGNiID0gdGhpcz8uW3VwZGF0ZXJUcmFuc2Zvcm1lck1ldGhvZHNTeW1ib2xdO1xuXHRpZiAodGhpcyBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIHR5cGVvZiBjYiA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0Y29uc3QgY2FsbGJhY2tzID0gY2IuY2FsbCh0aGlzKTtcblx0XHRpZiAodHlwZW9mIGNhbGxiYWNrcyA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0Zm9yIChjb25zdCBbbmFtZSwgY2FsbGJhY2tdIG9mIE9iamVjdC5lbnRyaWVzKGNhbGxiYWNrcykpIHtcblx0XHRcdFx0aWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRcdFx0dXBkYXRlckNhbGxiYWNrcy5wdXNoKFtuYW1lLCBjYWxsYmFja10pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdFx0XHRcdFx0dGhpcyxcblx0XHRcdFx0XHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0XHRcdFx0XHRgb25VcGRhdGVyUGlwZUNhbGxiYWNrczogJHtuYW1lfSBpcyBub3QgYSBmdW5jdGlvbmAsXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRcdFx0dGhpcyxcblx0XHRcdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRcdFx0YG9uVXBkYXRlclBpcGVDYWxsYmFja3MgZG8gbm90IHJldHVybiBhbiBvYmplY3Qgd2l0aCBmdW5jdGlvbnNgLFxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHRlbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG5cdFx0aWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkgcmV0dXJuO1xuXHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTFRlbXBsYXRlRWxlbWVudCkgcmV0dXJuO1xuXG5cdFx0Y29uc3QgdSA9IG5ldyBVcGRhdGVyKGVsZW1lbnQsIG9iamVjdCk7XG5cdFx0dXBkYXRlcnMuYWRkKHUpO1xuXG5cdFx0aWYgKHVwZGF0ZXJDYWxsYmFja3MubGVuZ3RoID4gMCkge1xuXHRcdFx0Zm9yIChjb25zdCBbbmFtZSwgY2FsbGJhY2tdIG9mIHVwZGF0ZXJDYWxsYmFja3MpIHtcblx0XHRcdFx0dS5zZXRDYWxsYmFjayhuYW1lLCBjYWxsYmFjayk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmVzdWx0LnB1c2goXG5cdFx0XHR1LnJ1bigpLnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRpZiAoY29uZmlnLmV2ZW50UHJvY2Vzc2luZyA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdHUuZW5hYmxlRXZlbnRQcm9jZXNzaW5nKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdTtcblx0XHRcdH0pLFxuXHRcdCk7XG5cdH0pO1xuXG5cdGlmICh1cGRhdGVycy5zaXplID4gMCkge1xuXHRcdGFkZFRvT2JqZWN0TGluayh0aGlzLCBzeW1ib2wsIHVwZGF0ZXJzKTtcblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgZ2V0U2xvdHRlZEVsZW1lbnRzLCBnZXRTbG90dGVkTm9kZXMgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtTdHJpbmd8dW5kZWZpbmVkfSBxdWVyeVxuICogQHBhcmFtIHtTdHJpbmd8dW5kZWZpbmVkfG51bGx9IG5hbWUgbmFtZSBvZiB0aGUgc2xvdCAoaWYgdGhlIHBhcmFtZXRlciBpcyB1bmRlZmluZWQsIGFsbCBzbG90cyBhcmUgc2VhcmNoZWQsIGlmIHRoZSBwYXJhbWV0ZXIgaGFzIHRoZSB2YWx1ZSBudWxsLCBhbGwgc2xvdHMgd2l0aG91dCBhIG5hbWUgYXJlIHNlYXJjaGVkLiBpZiBhIHN0cmluZyBpcyBzcGVjaWZpZWQsIHRoZSBzbG90cyB3aXRoIHRoaXMgbmFtZSBhcmUgc2VhcmNoZWQuKVxuICogQHJldHVybiB7Kn1cbiAqIEB0aGlzIEN1c3RvbUVsZW1lbnRcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDMuMzMuMFxuICogQHRocm93cyB7RXJyb3J9IHF1ZXJ5IG11c3QgYmUgYSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZ2V0U2xvdHRlZE5vZGVzKHF1ZXJ5LCBuYW1lKSB7XG5cdGNvbnN0IHJlc3VsdCA9IG5ldyBTZXQoKTtcblxuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRsZXQgc2VsZWN0b3IgPSBcInNsb3RcIjtcblx0aWYgKG5hbWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdGlmIChuYW1lID09PSBudWxsKSB7XG5cdFx0XHRzZWxlY3RvciArPSBcIjpub3QoW25hbWVdKVwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzZWxlY3RvciArPSBgW25hbWU9JHt2YWxpZGF0ZVN0cmluZyhuYW1lKX1dYDtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBzbG90cyA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcblxuXHRmb3IgKGNvbnN0IFssIHNsb3RdIG9mIE9iamVjdC5lbnRyaWVzKHNsb3RzKSkge1xuXHRcdHNsb3QuYXNzaWduZWROb2RlcygpLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHtcblx0XHRcdGlmIChub2RlID09PSBudWxsIHx8IG5vZGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc1N0cmluZyhxdWVyeSkpIHtcblx0XHRcdFx0bm9kZS5xdWVyeVNlbGVjdG9yQWxsKHF1ZXJ5KS5mb3JFYWNoKGZ1bmN0aW9uIChuKSB7XG5cdFx0XHRcdFx0cmVzdWx0LmFkZChuKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0aWYgKG5vZGUubWF0Y2hlcyhxdWVyeSkpIHtcblx0XHRcdFx0XHRyZXN1bHQuYWRkKG5vZGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKHF1ZXJ5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwicXVlcnkgbXVzdCBiZSBhIHN0cmluZ1wiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlc3VsdC5hZGQobm9kZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge1N0cmluZ3x1bmRlZmluZWR9IHF1ZXJ5XG4gKiBAcGFyYW0ge1N0cmluZ3x1bmRlZmluZWR8bnVsbH0gbmFtZSBuYW1lIG9mIHRoZSBzbG90IChpZiB0aGUgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZCwgYWxsIHNsb3RzIGFyZSBzZWFyY2hlZCwgaWYgdGhlIHBhcmFtZXRlciBoYXMgdGhlIHZhbHVlIG51bGwsIGFsbCBzbG90cyB3aXRob3V0IGEgbmFtZSBhcmUgc2VhcmNoZWQuIGlmIGEgc3RyaW5nIGlzIHNwZWNpZmllZCwgdGhlIHNsb3RzIHdpdGggdGhpcyBuYW1lIGFyZSBzZWFyY2hlZC4pXG4gKiBAcmV0dXJuIHsqfVxuICogQHRoaXMgQ3VzdG9tRWxlbWVudFxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yMy4wXG4gKiBAdGhyb3dzIHtFcnJvcn0gcXVlcnkgbXVzdCBiZSBhIHN0cmluZ1xuICovXG5mdW5jdGlvbiBnZXRTbG90dGVkRWxlbWVudHMocXVlcnksIG5hbWUpIHtcblx0Y29uc3QgcmVzdWx0ID0gbmV3IFNldCgpO1xuXG5cdGlmICghKHRoaXMuc2hhZG93Um9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpKSB7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGxldCBzZWxlY3RvciA9IFwic2xvdFwiO1xuXHRpZiAobmFtZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0aWYgKG5hbWUgPT09IG51bGwpIHtcblx0XHRcdHNlbGVjdG9yICs9IFwiOm5vdChbbmFtZV0pXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNlbGVjdG9yICs9IGBbbmFtZT0ke3ZhbGlkYXRlU3RyaW5nKG5hbWUpfV1gO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IHNsb3RzID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuXG5cdGZvciAoY29uc3QgWywgc2xvdF0gb2YgT2JqZWN0LmVudHJpZXMoc2xvdHMpKSB7XG5cdFx0c2xvdC5hc3NpZ25lZEVsZW1lbnRzKCkuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQhKG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgJiZcblx0XHRcdFx0IShub2RlIGluc3RhbmNlb2YgU1ZHRWxlbWVudCkgJiZcblx0XHRcdFx0IShub2RlIGluc3RhbmNlb2YgTWF0aE1MRWxlbWVudClcblx0XHRcdClcblx0XHRcdFx0cmV0dXJuO1xuXG5cdFx0XHRpZiAoaXNTdHJpbmcocXVlcnkpKSB7XG5cdFx0XHRcdGlmIChxdWVyeS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0bm9kZS5xdWVyeVNlbGVjdG9yQWxsKHF1ZXJ5KS5mb3JFYWNoKGZ1bmN0aW9uIChuKSB7XG5cdFx0XHRcdFx0XHRyZXN1bHQuYWRkKG4pO1xuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0aWYgKG5vZGUubWF0Y2hlcyhxdWVyeSkpIHtcblx0XHRcdFx0XHRcdHJlc3VsdC5hZGQobm9kZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJlc3VsdC5hZGQobm9kZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAocXVlcnkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJxdWVyeSBtdXN0IGJlIGEgc3RyaW5nIGFuZCBub3QgZW1wdHlcIik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXN1bHQuYWRkKG5vZGUpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5leHBvcnQgeyBleHRyYWN0S2V5cyB9O1xuXG4vKipcbiAqIEV4dHJhY3RzIHRoZSBrZXlzIGZyb20gdGhlIGdpdmVuIG9iamVjdCBhbmQgcmV0dXJucyBhIG1hcCB3aXRoIHRoZSBrZXlzIGFuZCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlQcmVmaXhcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlTZXBhcmF0b3JcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVNlcGFyYXRvclxuICogQHJldHVybiB7TWFwPGFueSwgYW55Pn1cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdEtleXMoXG5cdG9iaixcblx0a2V5UHJlZml4ID0gXCJcIixcblx0a2V5U2VwYXJhdG9yID0gXCItXCIsXG5cdHZhbHVlU2VwYXJhdG9yID0gXCIuXCIsXG4pIHtcblx0Y29uc3QgcmVzdWx0TWFwID0gbmV3IE1hcCgpO1xuXG5cdGZ1bmN0aW9uIGhlbHBlcihjdXJyZW50T2JqLCBjdXJyZW50S2V5UHJlZml4LCBjdXJyZW50VmFsdWVQcmVmaXgpIHtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBjdXJyZW50T2JqKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGN1cnJlbnRPYmpba2V5XSAhPT0gbnVsbCAmJlxuXHRcdFx0XHR0eXBlb2YgY3VycmVudE9ialtrZXldID09PSBcIm9iamVjdFwiICYmXG5cdFx0XHRcdCFBcnJheS5pc0FycmF5KGN1cnJlbnRPYmpba2V5XSlcblx0XHRcdCkge1xuXHRcdFx0XHRjb25zdCBuZXdLZXlQcmVmaXggPSBjdXJyZW50S2V5UHJlZml4XG5cdFx0XHRcdFx0PyBjdXJyZW50S2V5UHJlZml4ICsga2V5U2VwYXJhdG9yICsga2V5LnRvTG93ZXJDYXNlKClcblx0XHRcdFx0XHQ6IGtleS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRjb25zdCBuZXdWYWx1ZVByZWZpeCA9IGN1cnJlbnRWYWx1ZVByZWZpeFxuXHRcdFx0XHRcdD8gY3VycmVudFZhbHVlUHJlZml4ICsgdmFsdWVTZXBhcmF0b3IgKyBrZXlcblx0XHRcdFx0XHQ6IGtleTtcblx0XHRcdFx0aGVscGVyKGN1cnJlbnRPYmpba2V5XSwgbmV3S2V5UHJlZml4LCBuZXdWYWx1ZVByZWZpeCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBmaW5hbEtleSA9IGN1cnJlbnRLZXlQcmVmaXhcblx0XHRcdFx0XHQ/IGN1cnJlbnRLZXlQcmVmaXggKyBrZXlTZXBhcmF0b3IgKyBrZXkudG9Mb3dlckNhc2UoKVxuXHRcdFx0XHRcdDoga2V5LnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdGNvbnN0IGZpbmFsVmFsdWUgPSBjdXJyZW50VmFsdWVQcmVmaXhcblx0XHRcdFx0XHQ/IGN1cnJlbnRWYWx1ZVByZWZpeCArIHZhbHVlU2VwYXJhdG9yICsga2V5XG5cdFx0XHRcdFx0OiBrZXk7XG5cdFx0XHRcdHJlc3VsdE1hcC5zZXQoZmluYWxLZXksIGZpbmFsVmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGhlbHBlcihvYmosIGtleVByZWZpeCwga2V5UHJlZml4KTtcblx0cmV0dXJuIHJlc3VsdE1hcDtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBQYXRoZmluZGVyIH0gZnJvbSBcIi4uLy4uL2RhdGEvcGF0aGZpbmRlci5tanNcIjtcbmltcG9ydCB7XG5cdGlzQm9vbGVhbixcblx0aXNTdHJpbmcsXG5cdGlzT2JqZWN0LFxuXHRpc0FycmF5LFxuXHRpc0Z1bmN0aW9uLFxuXHRpc0ludGVnZXIsXG59IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IGV4dHJhY3RLZXlzIH0gZnJvbSBcIi4vZXh0cmFjdC1rZXlzLm1qc1wiO1xuXG5leHBvcnQgeyBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzIH07XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgdGhlIGdpdmVuIG9wdGlvbnMgb2JqZWN0IGJhc2VkIG9uIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBjdXJyZW50IERPTSBlbGVtZW50LlxuICogVGhlIGZ1bmN0aW9uIGxvb2tzIGZvciBhdHRyaWJ1dGVzIHdpdGggdGhlIHByZWZpeCAnZGF0YS1tb25zdGVyLW9wdGlvbi0nLCBhbmQgbWFwcyB0aGVtIHRvXG4gKiBwcm9wZXJ0aWVzIGluIHRoZSBvcHRpb25zIG9iamVjdC4gSXQgcmVwbGFjZXMgdGhlIGRhc2hlcyB3aXRoIGRvdHMgdG8gZm9ybSB0aGUgcHJvcGVydHkgcGF0aC5cbiAqIEZvciBleGFtcGxlLCB0aGUgYXR0cmlidXRlICdkYXRhLW1vbnN0ZXItb3B0aW9uLXVybCcgbWFwcyB0byB0aGUgJ3VybCcgcHJvcGVydHkgaW4gdGhlIG9wdGlvbnMgb2JqZWN0LlxuICpcbiAqIFdpdGggdGhlIG1hcHBpbmcgcGFyYW1ldGVyLCB0aGUgYXR0cmlidXRlIHZhbHVlIGNhbiBiZSBtYXBwZWQgdG8gYSBkaWZmZXJlbnQgdmFsdWUuXG4gKiBGb3IgZXhhbXBsZSwgdGhlIGF0dHJpYnV0ZSAnZGF0YS1tb25zdGVyLW9wdGlvbi1mb28nIG1hcHMgdG8gdGhlICdiYXInIHByb3BlcnR5IGluIHRoZSBvcHRpb25zIG9iamVjdC5cbiAqXG4gKiBUaGUgbWFwcGluZyBvYmplY3Qgd291bGQgbG9vayBsaWtlIHRoaXM6XG4gKlxuICoge1xuICogICAgJ2Zvbyc6ICh2YWx1ZSkgPT4gdmFsdWUgKyAnYmFyJ1xuICogICAgLy8gdGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgJ2RhdGEtbW9uc3Rlci1vcHRpb24tZm9vJyBpcyBhcHBlbmRlZCB3aXRoICdiYXInXG4gKiAgICAvLyBhbmQgYXNzaWduZWQgdG8gdGhlICdiYXInIHByb3BlcnR5IGluIHRoZSBvcHRpb25zIG9iamVjdC5cbiAqICAgIC8vIGUuZy4gPGRpdiBkYXRhLW1vbnN0ZXItb3B0aW9uLWZvbz1cImZvb1wiPjwvZGl2PlxuICogICAgJ2Jhci5iYXonOiAodmFsdWUpID0+IHZhbHVlICsgJ2JhcidcbiAqICAgIC8vIHRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlICdkYXRhLW1vbnN0ZXItb3B0aW9uLWJhci1iYXonIGlzIGFwcGVuZGVkIHdpdGggJ2JhcidcbiAqICAgIC8vIGFuZCBhc3NpZ25lZCB0byB0aGUgJ2Jhci5iYXonIHByb3BlcnR5IGluIHRoZSBvcHRpb25zIG9iamVjdC5cbiAqICAgIC8vIGUuZy4gPGRpdiBkYXRhLW1vbnN0ZXItb3B0aW9uLWJhci1iYXo9XCJmb29cIj48L2Rpdj5cbiAqIH1cbiAqXG4gKiBBcnJheSB2YWx1ZXMgaGF2ZSB0byBiZSBzZXBhcmF0ZWQgYnkgJzo6Jy5cbiAqXG4gKiBAc2luY2UgMy4zOC4wXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50IC0gVGhlIERPTSBlbGVtZW50IHRvIGJlIHVzZWQgYXMgdGhlIHNvdXJjZSBvZiB0aGUgYXR0cmlidXRlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgb2JqZWN0IHRvIGJlIGluaXRpYWxpemVkLlxuICogQHBhcmFtIHtPYmplY3R9IG1hcHBpbmcgLSBBIG1hcHBpbmcgYmV0d2VlbiB0aGUgYXR0cmlidXRlIHZhbHVlIGFuZCB0aGUgcHJvcGVydHkgdmFsdWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4IC0gVGhlIHByZWZpeCBvZiB0aGUgYXR0cmlidXRlcyB0byBiZSBjb25zaWRlcmVkLlxuICogQHJldHVybiB7T2JqZWN0fSAtIFRoZSBpbml0aWFsaXplZCBvcHRpb25zIG9iamVjdC5cbiAqIEB0aGlzIEhUTUxFbGVtZW50IC0gVGhlIGNvbnRleHQgb2YgdGhlIERPTSBlbGVtZW50LlxuICovXG5mdW5jdGlvbiBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzKFxuXHRlbGVtZW50LFxuXHRvcHRpb25zLFxuXHRtYXBwaW5nID0ge30sXG5cdHByZWZpeCA9IFwiZGF0YS1tb25zdGVyLW9wdGlvbi1cIixcbikge1xuXHRpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSByZXR1cm4gb3B0aW9ucztcblx0aWYgKCFlbGVtZW50Lmhhc0F0dHJpYnV0ZXMoKSkgcmV0dXJuIG9wdGlvbnM7XG5cblx0Y29uc3Qga2V5TWFwID0gZXh0cmFjdEtleXMob3B0aW9ucyk7XG5cdGNvbnN0IGZpbmRlciA9IG5ldyBQYXRoZmluZGVyKG9wdGlvbnMpO1xuXG5cdGVsZW1lbnQuZ2V0QXR0cmlidXRlTmFtZXMoKS5mb3JFYWNoKChuYW1lKSA9PiB7XG5cdFx0aWYgKCFuYW1lLnN0YXJ0c1dpdGgocHJlZml4KSkgcmV0dXJuO1xuXG5cdFx0Ly8gY2hlY2sgaWYgdGhlIGF0dHJpYnV0ZSBuYW1lIGlzIGEgdmFsaWQgb3B0aW9uLlxuXHRcdC8vIHRoZSBtYXBwaW5nIGJldHdlZW4gdGhlIGF0dHJpYnV0ZSBpcyBzaW1wbGUuIFRoZSBkYXNoIGlzIHJlcGxhY2VkIGJ5IGEgZG90LlxuXHRcdC8vIGUuZy4gZGF0YS1tb25zdGVyLXVybCA9PiB1cmxcblx0XHRjb25zdCBvcHRpb25OYW1lID0ga2V5TWFwLmdldChuYW1lLnN1YnN0cmluZyhwcmVmaXgubGVuZ3RoKS50b0xvd2VyQ2FzZSgpKTtcblx0XHRpZiAoIWZpbmRlci5leGlzdHMob3B0aW9uTmFtZSkpIHJldHVybjtcblxuXHRcdGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZShuYW1lKSkge1xuXHRcdFx0bGV0IHZhbHVlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUobmFtZSk7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdG1hcHBpbmcuaGFzT3duUHJvcGVydHkob3B0aW9uTmFtZSkgJiZcblx0XHRcdFx0aXNGdW5jdGlvbihtYXBwaW5nW29wdGlvbk5hbWVdKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHZhbHVlID0gbWFwcGluZ1tvcHRpb25OYW1lXSh2YWx1ZSk7XG5cdFx0XHR9XG5cblx0XHRcdGxldCBvcHRpb25WYWx1ZSA9IGZpbmRlci5nZXRWaWEob3B0aW9uTmFtZSk7XG5cdFx0XHRpZiAob3B0aW9uVmFsdWUgPT09IG51bGwgfHwgb3B0aW9uVmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRvcHRpb25WYWx1ZSA9IHZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvL2NvbnN0IHR5cGVPZk9wdGlvblZhbHVlID0gdHlwZW9mIG9wdGlvblZhbHVlO1xuXHRcdFx0aWYgKG9wdGlvblZhbHVlID09PSBudWxsIHx8IG9wdGlvblZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dmFsdWUgPSBudWxsO1xuXHRcdFx0fSBlbHNlIGlmIChpc0Jvb2xlYW4ob3B0aW9uVmFsdWUpKSB7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWUgPT09IFwidHJ1ZVwiO1xuXHRcdFx0fSBlbHNlIGlmIChpc0ludGVnZXIob3B0aW9uVmFsdWUpKSB7XG5cdFx0XHRcdHZhbHVlID0gTnVtYmVyKHZhbHVlKTtcblx0XHRcdH0gZWxzZSBpZiAoaXNTdHJpbmcob3B0aW9uVmFsdWUpKSB7XG5cdFx0XHRcdHZhbHVlID0gU3RyaW5nKHZhbHVlKTtcblx0XHRcdH0gZWxzZSBpZiAoaXNPYmplY3Qob3B0aW9uVmFsdWUpKSB7XG5cdFx0XHRcdHZhbHVlID0gSlNPTi5wYXJzZSh2YWx1ZSk7XG5cdFx0XHR9IGVsc2UgaWYgKGlzQXJyYXkob3B0aW9uVmFsdWUpKSB7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWUuc3BsaXQoXCI6OlwiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHZhbHVlID0gb3B0aW9uVmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdGZpbmRlci5zZXRWaWEob3B0aW9uTmFtZSwgdmFsdWUpO1xuXHRcdH1cblx0fSk7XG5cblx0cmV0dXJuIG9wdGlvbnM7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgUGF0aGZpbmRlciB9IGZyb20gXCIuLi8uLi9kYXRhL3BhdGhmaW5kZXIubWpzXCI7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgYXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2wgfSBmcm9tIFwiLi4vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IGV4dHJhY3RLZXlzIH0gZnJvbSBcIi4vZXh0cmFjdC1rZXlzLm1qc1wiO1xuXG5leHBvcnQgeyBzZXRPcHRpb25Gcm9tQXR0cmlidXRlIH07XG5cbi8qKlxuICogU2V0IHRoZSBnaXZlbiBvcHRpb25zIG9iamVjdCBiYXNlZCBvbiB0aGUgYXR0cmlidXRlcyBvZiB0aGUgY3VycmVudCBET00gZWxlbWVudC5cbiAqIFRoZSBmdW5jdGlvbiBsb29rcyBmb3IgYXR0cmlidXRlcyB3aXRoIHRoZSBwcmVmaXggJ2RhdGEtbW9uc3Rlci1vcHRpb24tJywgYW5kIG1hcHMgdGhlbSB0b1xuICogcHJvcGVydGllcyBpbiB0aGUgb3B0aW9ucyBvYmplY3QuIEl0IHJlcGxhY2VzIHRoZSBkYXNoZXMgd2l0aCBkb3RzIHRvIGZvcm0gdGhlIHByb3BlcnR5IHBhdGguXG4gKiBGb3IgZXhhbXBsZSwgdGhlIGF0dHJpYnV0ZSAnZGF0YS1tb25zdGVyLW9wdGlvbi11cmwnIG1hcHMgdG8gdGhlICd1cmwnIHByb3BlcnR5IGluIHRoZSBvcHRpb25zIG9iamVjdC5cbiAqXG4gKiBXaXRoIHRoZSBtYXBwaW5nIHBhcmFtZXRlciwgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBjYW4gYmUgbWFwcGVkIHRvIGEgZGlmZmVyZW50IHZhbHVlLlxuICogRm9yIGV4YW1wbGUsIHRoZSBhdHRyaWJ1dGUgJ2RhdGEtbW9uc3Rlci1vcHRpb24tZm9vJyBtYXBzIHRvIHRoZSAnYmFyJyBwcm9wZXJ0eSBpbiB0aGUgb3B0aW9ucyBvYmplY3QuXG4gKlxuICogVGhlIG1hcHBpbmcgb2JqZWN0IHdvdWxkIGxvb2sgbGlrZSB0aGlzOlxuICoge1xuICogICAgJ2Zvbyc6ICh2YWx1ZSkgPT4gdmFsdWUgKyAnYmFyJ1xuICogICAgLy8gdGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgJ2RhdGEtbW9uc3Rlci1vcHRpb24tZm9vJyBpcyBhcHBlbmRlZCB3aXRoICdiYXInXG4gKiAgICAvLyBhbmQgYXNzaWduZWQgdG8gdGhlICdiYXInIHByb3BlcnR5IGluIHRoZSBvcHRpb25zIG9iamVjdC5cbiAqICAgIC8vIGUuZy4gPGRpdiBkYXRhLW1vbnN0ZXItb3B0aW9uLWZvbz1cImZvb1wiPjwvZGl2PlxuICogICAgJ2Jhci5iYXonOiAodmFsdWUpID0+IHZhbHVlICsgJ2JhcidcbiAqICAgIC8vIHRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlICdkYXRhLW1vbnN0ZXItb3B0aW9uLWJhci1iYXonIGlzIGFwcGVuZGVkIHdpdGggJ2JhcidcbiAqICAgIC8vIGFuZCBhc3NpZ25lZCB0byB0aGUgJ2Jhci5iYXonIHByb3BlcnR5IGluIHRoZSBvcHRpb25zIG9iamVjdC5cbiAqICAgIC8vIGUuZy4gPGRpdiBkYXRhLW1vbnN0ZXItb3B0aW9uLWJhci1iYXo9XCJmb29cIj48L2Rpdj5cbiAqIH1cbiAqXG4gKiBAc2luY2UgMy40NS4wXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50IC0gVGhlIERPTSBlbGVtZW50IHRvIGJlIHVzZWQgYXMgdGhlIHNvdXJjZSBvZiB0aGUgYXR0cmlidXRlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBuYW1lIC0gVGhlIGF0dHJpYnV0ZSBvYmplY3QgdG8gYmUgdXNlZCBhcyB0aGUgc291cmNlIG9mIHRoZSBhdHRyaWJ1dGVzLlxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3QgdG8gYmUgaW5pdGlhbGl6ZWQuXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwcGluZyAtIEEgbWFwcGluZyBiZXR3ZWVuIHRoZSBhdHRyaWJ1dGUgdmFsdWUgYW5kIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwcmVmaXggLSBUaGUgcHJlZml4IG9mIHRoZSBhdHRyaWJ1dGVzIHRvIGJlIGNvbnNpZGVyZWQuXG4gKiBAcmV0dXJuIHtPYmplY3R9IC0gVGhlIGluaXRpYWxpemVkIG9wdGlvbnMgb2JqZWN0LlxuICogQHRoaXMgSFRNTEVsZW1lbnQgLSBUaGUgY29udGV4dCBvZiB0aGUgRE9NIGVsZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIHNldE9wdGlvbkZyb21BdHRyaWJ1dGUoXG5cdGVsZW1lbnQsXG5cdG5hbWUsXG5cdG9wdGlvbnMsXG5cdG1hcHBpbmcgPSB7fSxcblx0cHJlZml4ID0gXCJkYXRhLW1vbnN0ZXItb3B0aW9uLVwiLFxuKSB7XG5cdGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHJldHVybiBvcHRpb25zO1xuXHRpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlcygpKSByZXR1cm4gb3B0aW9ucztcblxuXHRjb25zdCBrZXlNYXAgPSBleHRyYWN0S2V5cyhvcHRpb25zKTtcblx0Y29uc3QgZmluZGVyID0gbmV3IFBhdGhmaW5kZXIob3B0aW9ucyk7XG5cblx0Ly8gY2hlY2sgaWYgdGhlIGF0dHJpYnV0ZSBuYW1lIGlzIGEgdmFsaWQgb3B0aW9uLlxuXHQvLyB0aGUgbWFwcGluZyBiZXR3ZWVuIHRoZSBhdHRyaWJ1dGUgaXMgc2ltcGxlLiBUaGUgZGFzaCBpcyByZXBsYWNlZCBieSBhIGRvdC5cblx0Ly8gZS5nLiBkYXRhLW1vbnN0ZXItdXJsID0+IHVybFxuXHRjb25zdCBvcHRpb25OYW1lID0ga2V5TWFwLmdldChuYW1lLnN1YnN0cmluZyhwcmVmaXgubGVuZ3RoKS50b0xvd2VyQ2FzZSgpKTtcblx0aWYgKCFmaW5kZXIuZXhpc3RzKG9wdGlvbk5hbWUpKSByZXR1cm47XG5cblx0aWYgKCFlbGVtZW50Lmhhc0F0dHJpYnV0ZShuYW1lKSkge1xuXHRcdHJldHVybiBvcHRpb25zO1xuXHR9XG5cblx0bGV0IHZhbHVlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUobmFtZSk7XG5cdGlmIChtYXBwaW5nLmhhc093blByb3BlcnR5KG9wdGlvbk5hbWUpICYmIGlzRnVuY3Rpb24obWFwcGluZ1tvcHRpb25OYW1lXSkpIHtcblx0XHR2YWx1ZSA9IG1hcHBpbmdbb3B0aW9uTmFtZV0odmFsdWUpO1xuXHR9XG5cblx0Y29uc3QgdHlwZU9mT3B0aW9uVmFsdWUgPSB0eXBlb2YgZmluZGVyLmdldFZpYShvcHRpb25OYW1lKTtcblx0aWYgKHR5cGVPZk9wdGlvblZhbHVlID09PSBcImJvb2xlYW5cIikge1xuXHRcdHZhbHVlID0gdmFsdWUgPT09IFwidHJ1ZVwiO1xuXHR9IGVsc2UgaWYgKHR5cGVPZk9wdGlvblZhbHVlID09PSBcIm51bWJlclwiKSB7XG5cdFx0dmFsdWUgPSBOdW1iZXIodmFsdWUpO1xuXHR9IGVsc2UgaWYgKHR5cGVPZk9wdGlvblZhbHVlID09PSBcInN0cmluZ1wiKSB7XG5cdFx0dmFsdWUgPSBTdHJpbmcodmFsdWUpO1xuXHR9IGVsc2UgaWYgKHR5cGVPZk9wdGlvblZhbHVlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0dmFsdWUgPSBKU09OLnBhcnNlKHZhbHVlKTtcblx0fVxuXG5cdGZpbmRlci5zZXRWaWEob3B0aW9uTmFtZSwgdmFsdWUpO1xuXG5cdHJldHVybiBvcHRpb25zO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGZpbmRFbGVtZW50V2l0aElkVXB3YXJkcyB9IGZyb20gXCIuL3V0aWwubWpzXCI7XG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQgeyBQYXRoZmluZGVyIH0gZnJvbSBcIi4uL2RhdGEvcGF0aGZpbmRlci5tanNcIjtcbmltcG9ydCB7IEZvcm1hdHRlciB9IGZyb20gXCIuLi90ZXh0L2Zvcm1hdHRlci5tanNcIjtcblxuaW1wb3J0IHsgcGFyc2VEYXRhVVJMIH0gZnJvbSBcIi4uL3R5cGVzL2RhdGF1cmwubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWxPYmplY3QgfSBmcm9tIFwiLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHtcblx0aXNBcnJheSxcblx0aXNGdW5jdGlvbixcblx0aXNJdGVyYWJsZSxcblx0aXNPYmplY3QsXG5cdGlzU3RyaW5nLFxufSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBPYnNlcnZlciB9IGZyb20gXCIuLi90eXBlcy9vYnNlcnZlci5tanNcIjtcbmltcG9ydCB7IFByb3h5T2JzZXJ2ZXIgfSBmcm9tIFwiLi4vdHlwZXMvcHJveHlvYnNlcnZlci5tanNcIjtcbmltcG9ydCB7XG5cdHZhbGlkYXRlRnVuY3Rpb24sXG5cdHZhbGlkYXRlSW5zdGFuY2UsXG5cdHZhbGlkYXRlT2JqZWN0LFxufSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBjbG9uZSB9IGZyb20gXCIuLi91dGlsL2Nsb25lLm1qc1wiO1xuaW1wb3J0IHtcblx0YWRkQXR0cmlidXRlVG9rZW4sXG5cdGdldExpbmtlZE9iamVjdHMsXG5cdGhhc09iamVjdExpbmssXG59IGZyb20gXCIuL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge1xuXHRBVFRSSUJVVEVfRElTQUJMRUQsXG5cdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdEFUVFJJQlVURV9PUFRJT05TLFxuXHRBVFRSSUJVVEVfSU5JVF9DQUxMQkFDSyxcblx0QVRUUklCVVRFX09QVElPTlNfU0VMRUNUT1IsXG5cdEFUVFJJQlVURV9TQ1JJUFRfSE9TVCxcblx0Y3VzdG9tRWxlbWVudFVwZGF0ZXJMaW5rU3ltYm9sLFxuXHRpbml0Q29udHJvbENhbGxiYWNrTmFtZSxcbn0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZmluZERvY3VtZW50VGVtcGxhdGUsIFRlbXBsYXRlIH0gZnJvbSBcIi4vdGVtcGxhdGUubWpzXCI7XG5pbXBvcnQgeyBhZGRPYmplY3RXaXRoVXBkYXRlclRvRWxlbWVudCB9IGZyb20gXCIuL3VwZGF0ZXIubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBnZXREb2N1bWVudFRyYW5zbGF0aW9ucyB9IGZyb20gXCIuLi9pMThuL3RyYW5zbGF0aW9ucy5tanNcIjtcbmltcG9ydCB7IGdldFNsb3R0ZWRFbGVtZW50cyB9IGZyb20gXCIuL3Nsb3R0ZWQubWpzXCI7XG5pbXBvcnQgeyBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzIH0gZnJvbSBcIi4vdXRpbC9pbml0LW9wdGlvbnMtZnJvbS1hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgc2V0T3B0aW9uRnJvbUF0dHJpYnV0ZSB9IGZyb20gXCIuL3V0aWwvc2V0LW9wdGlvbi1mcm9tLWF0dHJpYnV0ZS5tanNcIjtcblxuZXhwb3J0IHtcblx0Q3VzdG9tRWxlbWVudCxcblx0aW5pdE1ldGhvZFN5bWJvbCxcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdGF0dHJpYnV0ZU9ic2VydmVyU3ltYm9sLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG5cdGdldFNsb3R0ZWRFbGVtZW50cyxcblx0dXBkYXRlclRyYW5zZm9ybWVyTWV0aG9kc1N5bWJvbCxcbn07XG5cbi8qKlxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgaW5pdE1ldGhvZFN5bWJvbCA9IFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RvbS9AQGluaXRNZXRob2RTeW1ib2xcIik7XG5cbi8qKlxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgYXNzZW1ibGVNZXRob2RTeW1ib2wgPSBTeW1ib2wuZm9yKFxuXHRcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL0BAYXNzZW1ibGVNZXRob2RTeW1ib2xcIixcbik7XG5cbi8qKlxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgdXBkYXRlclRyYW5zZm9ybWVyTWV0aG9kc1N5bWJvbCA9IFN5bWJvbC5mb3IoXG5cdFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vQEB1cGRhdGVyVHJhbnNmb3JtZXJNZXRob2RzU3ltYm9sXCIsXG4pO1xuXG4vKipcbiAqIHRoaXMgc3ltYm9sIGhvbGRzIHRoZSBhdHRyaWJ1dGUgb2JzZXJ2ZXIgY2FsbGJhY2tzLiBUaGUga2V5IGlzIHRoZSBhdHRyaWJ1dGUgbmFtZS5cbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGF0dHJpYnV0ZU9ic2VydmVyU3ltYm9sID0gU3ltYm9sLmZvcihcblx0XCJAc2NodWthaS9tb25zdGVyL2RvbS9AQGF0dHJpYnV0ZU9ic2VydmVyXCIsXG4pO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBhdHRyaWJ1dGVNdXRhdGlvbk9ic2VydmVyU3ltYm9sID0gU3ltYm9sKFxuXHRcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL0BAbXV0YXRpb25PYnNlcnZlclwiLFxuKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgdXBkYXRlQ2xvbmVEYXRhU3ltYm9sID0gU3ltYm9sKFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vQEB1cGRhdGVDbG9uZURhdGFcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHNjcmlwdEhvc3RFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwic2NyaXB0SG9zdEVsZW1lbnRcIik7XG5cbi8qKlxuICogVGhlIGBDdXN0b21FbGVtZW50YCBjbGFzcyBwcm92aWRlcyBhIHdheSB0byBkZWZpbmUgYSBuZXcgSFRNTCBlbGVtZW50IHVzaW5nIHRoZSBwb3dlciBvZiBDdXN0b20gRWxlbWVudHMuXG4gKlxuICogKipJTVBPUlRBTlQ6KiogQWZ0ZXIgZGVmaW5pbmcgYSBgQ3VzdG9tRWxlbWVudGAsIHRoZSBgcmVnaXN0ZXJDdXN0b21FbGVtZW50YCBtZXRob2QgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IGNsYXNzIG5hbWVcbiAqIHRvIG1ha2UgdGhlIHRhZyBkZWZpbmVkIHZpYSB0aGUgYGdldFRhZ2AgbWV0aG9kIGtub3duIHRvIHRoZSBET00uXG4gKlxuICogWW91IGNhbiBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhlIG9iamVjdCB2aWEgdGhlIGBkb2N1bWVudC5jcmVhdGVFbGVtZW50KClgIGZ1bmN0aW9uLlxuICpcbiAqICMjIFN0eWxpbmdcbiAqXG4gKiBUbyBkaXNwbGF5IGN1c3RvbSBlbGVtZW50cyBvcHRpbWFsbHksIHRoZSBgOmRlZmluZWRgIHBzZXVkby1jbGFzcyBjYW4gYmUgdXNlZC4gVG8gcHJldmVudCBjdXN0b20gZWxlbWVudHMgZnJvbSBiZWluZyBkaXNwbGF5ZWQgYW5kIGZsaWNrZXJpbmcgdW50aWwgdGhlIGNvbnRyb2wgaXMgcmVnaXN0ZXJlZCxcbiAqIGl0IGlzIHJlY29tbWVuZGVkIHRvIGNyZWF0ZSBhIENTUyBkaXJlY3RpdmUuXG4gKlxuICogSW4gdGhlIHNpbXBsZXN0IGNhc2UsIHlvdSBjYW4gc2ltcGx5IGhpZGUgdGhlIGNvbnRyb2w6XG4gKlxuICogYGBgaHRtbFxuICogPHN0eWxlPlxuICogbXktY3VzdG9tLWVsZW1lbnQ6bm90KDpkZWZpbmVkKSB7XG4gKiAgICAgZGlzcGxheTogbm9uZTtcbiAqIH1cbiAqXG4gKiBteS1jdXN0b20tZWxlbWVudDpkZWZpbmVkIHtcbiAqICAgICBkaXNwbGF5OiBmbGV4O1xuICogfVxuICogPC9zdHlsZT5cbiAqIGBgYFxuICpcbiAqIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gZGlzcGxheSBhIGxvYWRlcjpcbiAqXG4gKiBgYGBjc3NcbiAqIG15LWN1c3RvbS1lbGVtZW50Om5vdCg6ZGVmaW5lZCkge1xuICogICAgIGRpc3BsYXk6IGZsZXg7XG4gKiAgICAgYm94LXNoYWRvdzogMCA0cHggMTBweCAwIHJnYmEoMzMsIDMzLCAzMywgMC4xNSk7XG4gKiAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICogICAgIGhlaWdodDogMjAwcHg7XG4gKiAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICogICAgIG92ZXJmbG93OiBoaWRkZW47XG4gKiB9XG4gKlxuICogbXktY3VzdG9tLWVsZW1lbnQ6bm90KDpkZWZpbmVkKTo6YmVmb3JlIHtcbiAqICAgICBjb250ZW50OiAnJztcbiAqICAgICBkaXNwbGF5OiBibG9jaztcbiAqICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gKiAgICAgbGVmdDogLTE1MHB4O1xuICogICAgIHRvcDogMDtcbiAqICAgICBoZWlnaHQ6IDEwMCU7XG4gKiAgICAgd2lkdGg6IDE1MHB4O1xuICogICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgdHJhbnNwYXJlbnQgMCUsICNFOEU4RTggNTAlLCB0cmFuc3BhcmVudCAxMDAlKTtcbiAqICAgICBhbmltYXRpb246IGxvYWQgMXMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpIGluZmluaXRlO1xuICogfVxuICpcbiAqIEBrZXlmcmFtZXMgbG9hZCB7XG4gKiAgICAgZnJvbSB7XG4gKiAgICAgICAgIGxlZnQ6IC0xNTBweDtcbiAqICAgICB9XG4gKiAgICAgdG8ge1xuICogICAgICAgICBsZWZ0OiAxMDAlO1xuICogICAgIH1cbiAqIH1cbiAqXG4gKiBteS1jdXN0b20tZWxlbWVudDpkZWZpbmVkIHtcbiAqICAgICBkaXNwbGF5OiBmbGV4O1xuICogfVxuICogYGBgXG4gKlxuICogTW9yZSBpbmZvcm1hdGlvbiBhYm91dCBDdXN0b20gRWxlbWVudHMgY2FuIGJlIGZvdW5kIGluIHRoZSBbTUROIFdlYiBEb2NzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9XZWJfQ29tcG9uZW50cy9Vc2luZ19jdXN0b21fZWxlbWVudHMpLlxuICogQW5kIGluIHRoZSBbSFRNTCBTdGFuZGFyZF0oaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvY3VzdG9tLWVsZW1lbnRzLmh0bWwjY3VzdG9tLWVsZW1lbnRzKSBvciBpbiB0aGUgW1dIQVRXRyBXaWtpXShodHRwczovL3dpa2kud2hhdHdnLm9yZy93aWtpL0N1c3RvbV9FbGVtZW50cykuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS43LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIGJhc2UgY2xhc3MgZm9yIEhUTUw1IGN1c3RvbSBjb250cm9scy5cbiAqL1xuY2xhc3MgQ3VzdG9tRWxlbWVudCBleHRlbmRzIEhUTUxFbGVtZW50IHtcblx0LyoqXG5cdCAqIEEgbmV3IG9iamVjdCBpcyBjcmVhdGVkLiBGaXJzdCwgdGhlIGBpbml0T3B0aW9uc2AgbWV0aG9kIGlzIGNhbGxlZC4gSGVyZSB0aGVcblx0ICogb3B0aW9ucyBjYW4gYmUgZGVmaW5lZCBpbiBkZXJpdmVkIGNsYXNzZXMuIFN1YnNlcXVlbnRseSwgdGhlIHNoYWRvd1Jvb3QgaXMgaW5pdGlhbGl6ZWQuXG5cdCAqXG5cdCAqIElNUE9SVEFOVDogQ3VzdG9tQ29udHJvbHMgaW5zdGFuY2VzIGFyZSBub3QgY3JlYXRlZCB2aWEgdGhlIGNvbnN0cnVjdG9yLCBidXQgZWl0aGVyIHZpYSBhIHRhZyBpbiB0aGUgSFRNTCBvciB2aWEgPGNvZGU+ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgpPC9jb2RlPi5cblx0ICpcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBvcHRpb24gYXR0cmlidXRlIGRvZXMgbm90IGNvbnRhaW4gYSB2YWxpZCBKU09OIGRlZmluaXRpb24uXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpc1thdHRyaWJ1dGVPYnNlcnZlclN5bWJvbF0gPSB7fTtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IG5ldyBQcm94eU9ic2VydmVyKHtcblx0XHRcdG9wdGlvbnM6IGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXModGhpcywgZXh0ZW5kKHt9LCB0aGlzLmRlZmF1bHRzKSksXG5cdFx0fSk7XG5cdFx0dGhpc1tpbml0TWV0aG9kU3ltYm9sXSgpO1xuXHRcdGluaXRPcHRpb25PYnNlcnZlci5jYWxsKHRoaXMpO1xuXHRcdHRoaXNbc2NyaXB0SG9zdEVsZW1lbnRTeW1ib2xdID0gW107XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RvbS9jdXN0b20tZWxlbWVudEBAaW5zdGFuY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgZGV0ZXJtaW5lcyB3aGljaCBhdHRyaWJ1dGVzIGFyZSB0byBiZVxuXHQgKiBtb25pdG9yZWQgYnkgYGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpYC4gVW5mb3J0dW5hdGVseSwgdGhpcyBtZXRob2QgaXMgc3RhdGljLlxuXHQgKiBUaGVyZWZvcmUsIHRoZSBgb2JzZXJ2ZWRBdHRyaWJ1dGVzYCBwcm9wZXJ0eSBjYW5ub3QgYmUgY2hhbmdlZCBkdXJpbmcgcnVudGltZS5cblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nW119XG5cdCAqIEBzaW5jZSAxLjE1LjBcblx0ICovXG5cdHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuXHRcdHJldHVybiBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0gYXR0cmlidXRlXG5cdCAqIEBwYXJhbSBjYWxsYmFja1xuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5DdXN0b21FbGVtZW50fVxuXHQgKi9cblx0YWRkQXR0cmlidXRlT2JzZXJ2ZXIoYXR0cmlidXRlLCBjYWxsYmFjaykge1xuXHRcdHZhbGlkYXRlRnVuY3Rpb24oY2FsbGJhY2spO1xuXHRcdHRoaXNbYXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2xdW2F0dHJpYnV0ZV0gPSBjYWxsYmFjaztcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0gYXR0cmlidXRlXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLkN1c3RvbUVsZW1lbnR9XG5cdCAqL1xuXHRyZW1vdmVBdHRyaWJ1dGVPYnNlcnZlcihhdHRyaWJ1dGUpIHtcblx0XHRkZWxldGUgdGhpc1thdHRyaWJ1dGVPYnNlcnZlclN5bWJvbF1bYXR0cmlidXRlXTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYGRlZmF1bHRzYCBwcm9wZXJ0eSBkZWZpbmVzIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgYSBjb250cm9sLiBJZiB5b3Ugd2FudCB0byBvdmVycmlkZSB0aGVzZSxcblx0ICogeW91IGNhbiB1c2UgdmFyaW91cyBtZXRob2RzLCB3aGljaCBhcmUgZGVzY3JpYmVkIGluIHRoZSBkb2N1bWVudGF0aW9uIGF2YWlsYWJsZSBhdFxuXHQgKiB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnZW5kb2Njb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH0uXG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGFyZSBsaXN0ZWQgYmVsb3c6XG5cdCAqXG5cdCAqIE1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNoYWRvd1Jvb3QgY2FuIGJlIGZvdW5kIGluIHRoZSBbTUROIFdlYiBEb2NzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudC9hdHRhY2hTaGFkb3cpLFxuXHQgKiBpbiB0aGUgW0hUTUwgU3RhbmRhcmRdKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2N1c3RvbS1lbGVtZW50cy5odG1sI2N1c3RvbS1lbGVtZW50cykgb3IgaW4gdGhlIFtXSEFUV0cgV2lraV0oaHR0cHM6Ly93aWtpLndoYXR3Zy5vcmcvd2lraS9DdXN0b21fRWxlbWVudHMpLlxuXHQgKlxuXHQgKiBNb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0ZW1wbGF0ZSBlbGVtZW50IGNhbiBiZSBmb3VuZCBpbiB0aGUgW01ETiBXZWIgRG9jc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RlbXBsYXRlKS5cblx0ICpcblx0ICogTW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2xvdCBlbGVtZW50IGNhbiBiZSBmb3VuZCBpbiB0aGUgW01ETiBXZWIgRG9jc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3Nsb3QpLlxuXHQgKlxuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IGRpc2FibGVkPWZhbHNlIFNwZWNpZmllcyB3aGV0aGVyIHRoZSBjb250cm9sIGlzIGRpc2FibGVkLiBXaGVuIHByZXNlbnQsIGl0IG1ha2VzIHRoZSBlbGVtZW50IG5vbi1tdXRhYmxlLCBub24tZm9jdXNhYmxlLCBhbmQgbm9uLXN1Ym1pdHRhYmxlIHdpdGggdGhlIGZvcm0uXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzaGFkb3dNb2RlPW9wZW4gU3BlY2lmaWVzIHRoZSBtb2RlIG9mIHRoZSBzaGFkb3cgcm9vdC4gV2hlbiBzZXQgdG8gYG9wZW5gLCBlbGVtZW50cyBpbiB0aGUgc2hhZG93IHJvb3QgYXJlIGFjY2Vzc2libGUgZnJvbSBKYXZhU2NyaXB0IG91dHNpZGUgdGhlIHJvb3QsIHdoaWxlIHNldHRpbmcgaXQgdG8gYGNsb3NlZGAgZGVuaWVzIGFjY2VzcyB0byB0aGUgcm9vdCdzIG5vZGVzIGZyb20gSmF2YVNjcmlwdCBvdXRzaWRlIGl0LlxuXHQgKiBAcHJvcGVydHkge0Jvb2xlYW59IGRlbGVnYXRlc0ZvY3VzPXRydWUgU3BlY2lmaWVzIHRoZSBiZWhhdmlvciBvZiB0aGUgY29udHJvbCB3aXRoIHJlc3BlY3QgdG8gZm9jdXNhYmlsaXR5LiBXaGVuIHNldCB0byBgdHJ1ZWAsIGl0IG1pdGlnYXRlcyBjdXN0b20gZWxlbWVudCBpc3N1ZXMgYXJvdW5kIGZvY3VzYWJpbGl0eS4gV2hlbiBhIG5vbi1mb2N1c2FibGUgcGFydCBvZiB0aGUgc2hhZG93IERPTSBpcyBjbGlja2VkLCB0aGUgZmlyc3QgZm9jdXNhYmxlIHBhcnQgaXMgZ2l2ZW4gZm9jdXMsIGFuZCB0aGUgc2hhZG93IGhvc3QgaXMgZ2l2ZW4gYW55IGF2YWlsYWJsZSA6Zm9jdXMgc3R5bGluZy5cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBTcGVjaWZpZXMgdGhlIHRlbXBsYXRlcyB1c2VkIGJ5IHRoZSBjb250cm9sLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW49dW5kZWZpbmVkIFNwZWNpZmllcyB0aGUgbWFpbiB0ZW1wbGF0ZSB1c2VkIGJ5IHRoZSBjb250cm9sLlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVNYXBwaW5nIFNwZWNpZmllcyB0aGUgbWFwcGluZyBvZiB0ZW1wbGF0ZXMuXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZUZvcm1hdHRlciBTcGVjaWZpZXMgdGhlIGZvcm1hdHRlciBmb3IgdGhlIHRlbXBsYXRlcy5cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlRm9ybWF0dGVyLm1hcmtlciBTcGVjaWZpZXMgdGhlIG1hcmtlciBmb3IgdGhlIHRlbXBsYXRlcy5cblx0ICogQHByb3BlcnR5IHtGdW5jdGlvbn0gdGVtcGxhdGVGb3JtYXR0ZXIubWFya2VyLm9wZW49bnVsbCBTcGVjaWZpZXMgdGhlIG9wZW5pbmcgbWFya2VyIGZvciB0aGUgdGVtcGxhdGVzLlxuXHQgKiBAcHJvcGVydHkge0Z1bmN0aW9ufSB0ZW1wbGF0ZUZvcm1hdHRlci5tYXJrZXIuY2xvc2U9bnVsbCBTcGVjaWZpZXMgdGhlIGNsb3NpbmcgbWFya2VyIGZvciB0aGUgdGVtcGxhdGVzLlxuXHQgKiBAcHJvcGVydHkge0Jvb2xlYW59IGV2ZW50UHJvY2Vzc2luZz1mYWxzZSBTcGVjaWZpZXMgd2hldGhlciB0aGUgY29udHJvbCBwcm9jZXNzZXMgZXZlbnRzLlxuXHQgKiBAc2luY2UgMS44LjBcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0ZGlzYWJsZWQ6IGZhbHNlLFxuXHRcdFx0c2hhZG93TW9kZTogXCJvcGVuXCIsXG5cdFx0XHRkZWxlZ2F0ZXNGb2N1czogdHJ1ZSxcblx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRtYWluOiB1bmRlZmluZWQsXG5cdFx0XHR9LFxuXHRcdFx0dGVtcGxhdGVNYXBwaW5nOiB7fSxcblx0XHRcdHRlbXBsYXRlRm9ybWF0dGVyOiB7XG5cdFx0XHRcdG1hcmtlcjoge1xuXHRcdFx0XHRcdG9wZW46IG51bGwsXG5cdFx0XHRcdFx0Y2xvc2U6IG51bGwsXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXG5cdFx0XHRldmVudFByb2Nlc3Npbmc6IGZhbHNlLFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgdXBkYXRlcyB0aGUgbGFiZWxzIG9mIHRoZSBlbGVtZW50LlxuXHQgKiBUaGUgbGFiZWxzIGFyZSBkZWZpbmVkIGluIHRoZSBvcHRpb24gb2JqZWN0LlxuXHQgKiBUaGUga2V5IG9mIHRoZSBsYWJlbCBpcyB1c2VkIHRvIHJldHJpZXZlIHRoZSB0cmFuc2xhdGlvbiBmcm9tIHRoZSBkb2N1bWVudC5cblx0ICogSWYgdGhlIHRyYW5zbGF0aW9uIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBsYWJlbCwgdGhlIGxhYmVsIGlzIHVwZGF0ZWQuXG5cdCAqXG5cdCAqIEJlZm9yZSB5b3UgY2FuIHVzZSB0aGlzIG1ldGhvZCwgeW91IG11c3QgaGF2ZSBsb2FkZWQgdGhlIHRyYW5zbGF0aW9ucy5cblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uQ3VzdG9tRWxlbWVudH1cblx0ICogQHRocm93cyB7RXJyb3J9ICBDYW5ub3QgZmluZCBhbiBlbGVtZW50IHdpdGggdHJhbnNsYXRpb25zLiBBZGQgYSB0cmFuc2xhdGlvbiBvYmplY3QgdG8gdGhlIGRvY3VtZW50LlxuXHQgKi9cblx0dXBkYXRlSTE4bigpIHtcblx0XHRsZXQgdHJhbnNsYXRpb25zO1xuXG5cdFx0dHJ5IHtcblx0XHRcdHRyYW5zbGF0aW9ucyA9IGdldERvY3VtZW50VHJhbnNsYXRpb25zKCk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS50b1N0cmluZygpKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGlmICghdHJhbnNsYXRpb25zKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHRjb25zdCBsYWJlbHMgPSB0aGlzLmdldE9wdGlvbihcImxhYmVsc1wiKTtcblx0XHRpZiAoIShpc09iamVjdChsYWJlbHMpIHx8IGlzSXRlcmFibGUobGFiZWxzKSkpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3Qga2V5IGluIGxhYmVscykge1xuXHRcdFx0Y29uc3QgZGVmID0gbGFiZWxzW2tleV07XG5cblx0XHRcdGlmIChpc1N0cmluZyhkZWYpKSB7XG5cdFx0XHRcdGNvbnN0IHRleHQgPSB0cmFuc2xhdGlvbnMuZ2V0VGV4dChrZXksIGRlZik7XG5cdFx0XHRcdGlmICh0ZXh0ICE9PSBkZWYpIHtcblx0XHRcdFx0XHR0aGlzLnNldE9wdGlvbihgbGFiZWxzLiR7a2V5fWAsIHRleHQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fSBlbHNlIGlmIChpc09iamVjdChkZWYpKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgayBpbiBkZWYpIHtcblx0XHRcdFx0XHRjb25zdCBkID0gZGVmW2tdO1xuXG5cdFx0XHRcdFx0Y29uc3QgdGV4dCA9IHRyYW5zbGF0aW9ucy5nZXRQbHVyYWxSdWxlVGV4dChrZXksIGssIGQpO1xuXHRcdFx0XHRcdGlmICghaXNTdHJpbmcodGV4dCkpIHtcblx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgbGFiZWxzIGRlZmluaXRpb25cIik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICh0ZXh0ICE9PSBkKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnNldE9wdGlvbihgbGFiZWxzLiR7a2V5fS4ke2t9YCwgdGV4dCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGxhYmVscyBkZWZpbml0aW9uXCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYGdldFRhZygpYCBtZXRob2QgcmV0dXJucyB0aGUgdGFnIG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXN0b20gZWxlbWVudC4gVGhpcyBtZXRob2Qgc2hvdWxkIGJlIG92ZXJ3cml0dGVuXG5cdCAqIGJ5IHRoZSBkZXJpdmVkIGNsYXNzLlxuXHQgKlxuXHQgKiBOb3RlIHRoYXQgdGhlcmUgaXMgbm8gY2hlY2sgb24gdGhlIG5hbWUgb2YgdGhlIHRhZyBpbiB0aGlzIGNsYXNzLiBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2Zcblx0ICogdGhlIGRldmVsb3BlciB0byBhc3NpZ24gYW4gYXBwcm9wcmlhdGUgdGFnIG5hbWUuIElmIHRoZSBuYW1lIGlzIG5vdCB2YWxpZCwgdGhlXG5cdCAqIGByZWdpc3RlckN1c3RvbUVsZW1lbnQoKWAgbWV0aG9kIHdpbGwgaXNzdWUgYW4gZXJyb3IuXG5cdCAqXG5cdCAqIEBzZWUgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvY3VzdG9tLWVsZW1lbnRzLmh0bWwjdmFsaWQtY3VzdG9tLWVsZW1lbnQtbmFtZVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gVGhpcyBtZXRob2QgbXVzdCBiZSBvdmVycmlkZGVuIGJ5IHRoZSBkZXJpdmVkIGNsYXNzLlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSB0YWcgbmFtZSBhc3NvY2lhdGVkIHdpdGggdGhlIGN1c3RvbSBlbGVtZW50LlxuXHQgKiBAc2luY2UgMS43LjBcblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XCJUaGUgbWV0aG9kIGBnZXRUYWcoKWAgbXVzdCBiZSBvdmVycmlkZGVuIGJ5IHRoZSBkZXJpdmVkIGNsYXNzLlwiLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGBnZXRDU1NTdHlsZVNoZWV0KClgIG1ldGhvZCByZXR1cm5zIGEgYENTU1N0eWxlU2hlZXRgIG9iamVjdCB0aGF0IGRlZmluZXMgdGhlIHN0eWxlcyBmb3IgdGhlIGN1c3RvbSBlbGVtZW50LlxuXHQgKiBJZiB0aGUgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgYENTU1N0eWxlU2hlZXRgIGNvbnN0cnVjdG9yLCB0aGVuIGFuIG9iamVjdCBjYW4gYmUgYnVpbHQgdXNpbmcgdGhlIHByb3ZpZGVkIGRldG91ci5cblx0ICpcblx0ICogSWYgYHVuZGVmaW5lZGAgaXMgcmV0dXJuZWQsIHRoZW4gdGhlIHNoYWRvdyByb290IGRvZXMgbm90IHJlY2VpdmUgYSBzdHlsZXNoZWV0LlxuXHQgKlxuXHQgKiBFeGFtcGxlIHVzYWdlOlxuXHQgKlxuXHQgKiBgYGBqc1xuXHQgKiBjbGFzcyBNeUVsZW1lbnQgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcblx0ICogICBzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0ICogICAgICAgY29uc3Qgc2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXHQgKiAgICAgICBzaGVldC5yZXBsYWNlU3luYyhcInAgeyBjb2xvcjogcmVkOyB9XCIpO1xuXHQgKiAgICAgICByZXR1cm4gc2hlZXQ7XG5cdCAqICAgfVxuXHQgKiB9XG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBJZiB0aGUgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgYENTU1N0eWxlU2hlZXRgIGNvbnN0cnVjdG9yLFxuXHQgKiB5b3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIHdvcmthcm91bmQgdG8gY3JlYXRlIHRoZSBzdHlsZXNoZWV0OlxuXHQgKlxuXHQgKiBgYGBqc1xuXHQgKiBjb25zdCBkb2MgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoJ3RpdGxlJyk7XG5cdCAqIGxldCBzdHlsZSA9IGRvYy5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG5cdCAqIHN0eWxlLmlubmVySFRNTCA9IFwicCB7IGNvbG9yOiByZWQ7IH1cIjtcblx0ICogc3R5bGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJcIikpO1xuXHQgKiBkb2MuaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG5cdCAqIHJldHVybiBkb2Muc3R5bGVTaGVldHNbMF07XG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcmV0dXJuIHtDU1NTdHlsZVNoZWV0fENTU1N0eWxlU2hlZXRbXXxzdHJpbmd8dW5kZWZpbmVkfSBBIGBDU1NTdHlsZVNoZWV0YCBvYmplY3Qgb3IgYW4gYXJyYXkgb2Ygc3VjaCBvYmplY3RzIHRoYXQgZGVmaW5lIHRoZSBzdHlsZXMgZm9yIHRoZSBjdXN0b20gZWxlbWVudCwgb3IgYHVuZGVmaW5lZGAgaWYgbm8gc3R5bGVzaGVldCBzaG91bGQgYmUgYXBwbGllZC5cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogYXR0YWNoIGEgbmV3IG9ic2VydmVyXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm4ge0N1c3RvbUVsZW1lbnR9XG5cdCAqL1xuXHRhdHRhY2hPYnNlcnZlcihvYnNlcnZlcikge1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmF0dGFjaE9ic2VydmVyKG9ic2VydmVyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBkZXRhY2ggYSBvYnNlcnZlclxuXHQgKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJuIHtDdXN0b21FbGVtZW50fVxuXHQgKi9cblx0ZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5kZXRhY2hPYnNlcnZlcihvYnNlcnZlcik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybiB7UHJveHlPYnNlcnZlcn1cblx0ICovXG5cdGNvbnRhaW5zT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbFN5bWJvbF0uY29udGFpbnNPYnNlcnZlcihvYnNlcnZlcik7XG5cdH1cblxuXHQvKipcblx0ICogbmVzdGVkIG9wdGlvbnMgY2FuIGJlIHNwZWNpZmllZCBieSBwYXRoIGBhLmIuY2Bcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcblx0ICogQHBhcmFtIHsqfSBkZWZhdWx0VmFsdWVcblx0ICogQHJldHVybiB7Kn1cblx0ICogQHNpbmNlIDEuMTAuMFxuXHQgKi9cblx0Z2V0T3B0aW9uKHBhdGgsIGRlZmF1bHRWYWx1ZSA9IHVuZGVmaW5lZCkge1xuXHRcdGxldCB2YWx1ZTtcblxuXHRcdHRyeSB7XG5cdFx0XHR2YWx1ZSA9IG5ldyBQYXRoZmluZGVyKFxuXHRcdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRSZWFsU3ViamVjdCgpW1wib3B0aW9uc1wiXSxcblx0XHRcdCkuZ2V0VmlhKHBhdGgpO1xuXHRcdH0gY2F0Y2ggKGUpIHt9XG5cblx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IG9wdGlvbiBhbmQgaW5mb3JtIGVsZW1lbnRzXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybiB7Q3VzdG9tRWxlbWVudH1cblx0ICogQHNpbmNlIDEuMTQuMFxuXHQgKi9cblx0c2V0T3B0aW9uKHBhdGgsIHZhbHVlKSB7XG5cdFx0bmV3IFBhdGhmaW5kZXIodGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpW1wib3B0aW9uc1wiXSkuc2V0VmlhKFxuXHRcdFx0cGF0aCxcblx0XHRcdHZhbHVlLFxuXHRcdCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHNpbmNlIDEuMTUuMFxuXHQgKiBAcGFyYW0ge3N0cmluZ3xvYmplY3R9IG9wdGlvbnNcblx0ICogQHJldHVybiB7Q3VzdG9tRWxlbWVudH1cblx0ICovXG5cdHNldE9wdGlvbnMob3B0aW9ucykge1xuXHRcdGlmIChpc1N0cmluZyhvcHRpb25zKSkge1xuXHRcdFx0b3B0aW9ucyA9IHBhcnNlT3B0aW9uc0pTT04uY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0XHR9XG5cdFx0Ly8gMjAyNC0wMS0yMTogcmVtb3ZlIHRoaXMuZGVmYXVsdHMsIG90aGVyd2lzZSBpdCB3aWxsIG92ZXJ3cml0ZVxuXHRcdC8vIHRoZSBjdXJyZW50IHNldHRpbmdzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gbWFkZS5cblx0XHQvLyBodHRwczovL2dpdGxhYi5zY2h1a2FpLmNvbS9vc3MvbGlicmFyaWVzL2phdmFzY3JpcHQvbW9uc3Rlci8tL2lzc3Vlcy8xMzZcblx0XHRleHRlbmQodGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpW1wib3B0aW9uc1wiXSwgb3B0aW9ucyk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBJcyBjYWxsZWQgb25jZSB2aWEgdGhlIGNvbnN0cnVjdG9yXG5cdCAqXG5cdCAqIEByZXR1cm4ge0N1c3RvbUVsZW1lbnR9XG5cdCAqIEBzaW5jZSAxLjguMFxuXHQgKi9cblx0W2luaXRNZXRob2RTeW1ib2xdKCkge1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbmNlIHdoZW4gdGhlIG9iamVjdCBpcyBlcXVpcHBlZCB3aXRoIHVwZGF0ZSBmb3IgdGhlIGR5bmFtaWMgY2hhbmdlIG9mIHRoZSBkb20uXG5cdCAqIFRoZSBmdW5jdGlvbnMgcmV0dXJuZWQgaGVyZSBjYW4gYmUgdXNlZCBhcyBwaXBlIGZ1bmN0aW9ucyBpbiB0aGUgdGVtcGxhdGUuXG5cdCAqXG5cdCAqIEluIHRoZSBleGFtcGxlLCB0aGUgZnVuY3Rpb24gYG15LXRyYW5zZm9ybWVyYCBpcyBkZWZpbmVkLiBJbiB0aGUgdGVtcGxhdGUsIHlvdSBjYW4gdXNlIGl0IGFzIGZvbGxvd3M6XG5cdCAqXG5cdCAqIGBgYGh0bWxcblx0ICogPG15LWVsZW1lbnRcblx0ICogICBkYXRhLW1vbnN0ZXItb3B0aW9uLXRyYW5zZm9ybWVyPVwicGF0aDpteS12YWx1ZSB8IGNhbGw6bXktdHJhbnNmb3JtZXJcIj5cblx0ICogPC9teS1lbGVtZW50PlxuXHQgKiBgYGBcblx0ICpcblx0ICogVGhlIGZ1bmN0aW9uIGBteS10cmFuc2Zvcm1lcmAgaXMgY2FsbGVkIHdpdGggdGhlIHZhbHVlIG9mIGBteS12YWx1ZWAgYXMgYSBwYXJhbWV0ZXIuXG5cdCAqXG5cdCAqIGBgYGpzXG5cdCAqIGNsYXNzIE15RWxlbWVudCBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuXHQgKiBbdXBkYXRlclRyYW5zZm9ybWVyTWV0aG9kc1N5bWJvbF0oKSB7XG5cdCAqICAgIHJldHVybiB7XG5cdCAqICAgICAgIFwibXktdHJhbnNmb3JtZXJcIjogKHZhbHVlKSA9PiB7XG5cdCAqICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiBXZXJ0KSB7XG5cdCAqICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG5cdCAqICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlICsgXCIhXCI7XG5cdCAqICAgICAgICAgICBjYXNlIFwiWmFobFwiOlxuXHQgKiAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSArIDE7XG5cdCAqICAgICAgICAgICBkZWZhdWx0OlxuXHQgKiAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcblx0ICogICAgICAgICAgIH1cblx0ICogICAgfVxuXHQgKiAgICB9O1xuXHQgKiAgfTtcblx0ICogIH1cblx0ICogYGBgXG5cdCAqXG5cdCAqIEByZXR1cm4ge29iamVjdH1cblx0ICogQHNpbmNlIDIuNDMuMFxuXHQgKi9cblx0W3VwZGF0ZXJUcmFuc2Zvcm1lck1ldGhvZHNTeW1ib2xdKCkge1xuXHRcdHJldHVybiB7fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb25jZSB3aGVuIHRoZSBvYmplY3QgaXMgaW5jbHVkZWQgaW4gdGhlIERPTSBmb3IgdGhlIGZpcnN0IHRpbWUuIEl0IHBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgYWN0aW9uczpcblx0ICpcblx0ICogPG9sPlxuXHQgKiA8bGk+RXh0cmFjdHMgdGhlIG9wdGlvbnMgZnJvbSB0aGUgYXR0cmlidXRlcyBhbmQgdGhlIHNjcmlwdCB0YWcgb2YgdGhlIGVsZW1lbnQgYW5kIHNldHMgdGhlbS48L2xpPlxuXHQgKiA8bGk+SW5pdGlhbGl6ZXMgdGhlIHNoYWRvdyByb290IGFuZCBpdHMgQ1NTIHN0eWxlc2hlZXQgKGlmIHNwZWNpZmllZCkuPC9saT5cblx0ICogPGxpPkluaXRpYWxpemVzIHRoZSBIVE1MIGNvbnRlbnQgb2YgdGhlIGVsZW1lbnQuPC9saT5cblx0ICogPGxpPkluaXRpYWxpemVzIHRoZSBjdXN0b20gZWxlbWVudHMgaW5zaWRlIHRoZSBzaGFkb3cgcm9vdCBhbmQgdGhlIHNsb3R0ZWQgZWxlbWVudHMuPC9saT5cblx0ICogPGxpPkF0dGFjaGVzIGEgbXV0YXRpb24gb2JzZXJ2ZXIgdG8gb2JzZXJ2ZSBjaGFuZ2VzIHRvIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBlbGVtZW50LjwvbGk+XG5cdCAqXG5cdCAqIEByZXR1cm4ge0N1c3RvbUVsZW1lbnR9IC0gVGhlIHVwZGF0ZWQgY3VzdG9tIGVsZW1lbnQuXG5cdCAqIEBzaW5jZSAxLjguMFxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRsZXQgZWxlbWVudHM7XG5cdFx0bGV0IG5vZGVMaXN0O1xuXG5cdFx0Ly8gRXh0cmFjdCBvcHRpb25zIGZyb20gYXR0cmlidXRlcyBhbmQgc2V0IHRoZW1cblx0XHRjb25zdCBBdHRyaWJ1dGVPcHRpb25zID0gZ2V0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzLmNhbGwodGhpcyk7XG5cdFx0aWYgKFxuXHRcdFx0aXNPYmplY3QoQXR0cmlidXRlT3B0aW9ucykgJiZcblx0XHRcdE9iamVjdC5rZXlzKEF0dHJpYnV0ZU9wdGlvbnMpLmxlbmd0aCA+IDBcblx0XHQpIHtcblx0XHRcdHRoaXMuc2V0T3B0aW9ucyhBdHRyaWJ1dGVPcHRpb25zKTtcblx0XHR9XG5cblx0XHQvLyBFeHRyYWN0IG9wdGlvbnMgZnJvbSBzY3JpcHQgdGFnIGFuZCBzZXQgdGhlbVxuXHRcdGNvbnN0IFNjcmlwdE9wdGlvbnMgPSBnZXRPcHRpb25zRnJvbVNjcmlwdFRhZy5jYWxsKHRoaXMpO1xuXHRcdGlmIChpc09iamVjdChTY3JpcHRPcHRpb25zKSAmJiBPYmplY3Qua2V5cyhTY3JpcHRPcHRpb25zKS5sZW5ndGggPiAwKSB7XG5cdFx0XHR0aGlzLnNldE9wdGlvbnMoU2NyaXB0T3B0aW9ucyk7XG5cdFx0fVxuXG5cdFx0Ly8gSW5pdGlhbGl6ZSB0aGUgc2hhZG93IHJvb3QgYW5kIGl0cyBDU1Mgc3R5bGVzaGVldFxuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcInNoYWRvd01vZGVcIiwgZmFsc2UpICE9PSBmYWxzZSkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aW5pdFNoYWRvd1Jvb3QuY2FsbCh0aGlzKTtcblx0XHRcdFx0ZWxlbWVudHMgPSB0aGlzLnNoYWRvd1Jvb3QuY2hpbGROb2Rlcztcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS50b1N0cmluZygpKTtcblx0XHRcdH1cblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aW5pdENTU1N0eWxlc2hlZXQuY2FsbCh0aGlzKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS50b1N0cmluZygpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBJZiB0aGUgZWxlbWVudHMgYXJlIG5vdCBmb3VuZCBpbnNpZGUgdGhlIHNoYWRvdyByb290LCBpbml0aWFsaXplIHRoZSBIVE1MIGNvbnRlbnQgb2YgdGhlIGVsZW1lbnRcblx0XHRpZiAoIShlbGVtZW50cyBpbnN0YW5jZW9mIE5vZGVMaXN0KSkge1xuXHRcdFx0aW5pdEh0bWxDb250ZW50LmNhbGwodGhpcyk7XG5cdFx0XHRlbGVtZW50cyA9IHRoaXMuY2hpbGROb2Rlcztcblx0XHR9XG5cblx0XHQvLyBJbml0aWFsaXplIHRoZSBjdXN0b20gZWxlbWVudHMgaW5zaWRlIHRoZSBzaGFkb3cgcm9vdCBhbmQgdGhlIHNsb3R0ZWQgZWxlbWVudHNcblx0XHRpbml0RnJvbUNhbGxiYWNrSG9zdC5jYWxsKHRoaXMpO1xuXHRcdHRyeSB7XG5cdFx0XHRub2RlTGlzdCA9IG5ldyBTZXQoWy4uLmVsZW1lbnRzLCAuLi5nZXRTbG90dGVkRWxlbWVudHMuY2FsbCh0aGlzKV0pO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdG5vZGVMaXN0ID0gZWxlbWVudHM7XG5cdFx0fVxuXG5cdFx0dGhpc1t1cGRhdGVDbG9uZURhdGFTeW1ib2xdID0gY2xvbmUoXG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRSZWFsU3ViamVjdCgpW1wib3B0aW9uc1wiXSxcblx0XHQpO1xuXG5cdFx0Y29uc3QgY2ZnID0ge307XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZXZlbnRQcm9jZXNzaW5nXCIpID09PSB0cnVlKSB7XG5cdFx0XHRjZmcuZXZlbnRQcm9jZXNzaW5nID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRhZGRPYmplY3RXaXRoVXBkYXRlclRvRWxlbWVudC5jYWxsKFxuXHRcdFx0dGhpcyxcblx0XHRcdG5vZGVMaXN0LFxuXHRcdFx0Y3VzdG9tRWxlbWVudFVwZGF0ZXJMaW5rU3ltYm9sLFxuXHRcdFx0dGhpc1t1cGRhdGVDbG9uZURhdGFTeW1ib2xdLFxuXHRcdFx0Y2ZnLFxuXHRcdCk7XG5cblx0XHQvLyBBdHRhY2ggYSBtdXRhdGlvbiBvYnNlcnZlciB0byBvYnNlcnZlIGNoYW5nZXMgdG8gdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIGVsZW1lbnRcblx0XHRhdHRhY2hBdHRyaWJ1dGVDaGFuZ2VNdXRhdGlvbk9ic2VydmVyLmNhbGwodGhpcyk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBZb3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmc/IFRoaXMgZnVuY3Rpb24gaXMgb25seSBmb3IgYWR2YW5jZWQgdXNlcnMuXG5cdCAqIFRoZSByZXN1bHQgaXMgYSBjbG9uZSBvZiB0aGUgaW50ZXJuYWwgZGF0YS5cblx0ICpcblx0ICogQHJldHVybiB7Kn1cblx0ICovXG5cdGdldEludGVybmFsVXBkYXRlQ2xvbmVEYXRhKCkge1xuXHRcdHJldHVybiBjbG9uZSh0aGlzW3VwZGF0ZUNsb25lRGF0YVN5bWJvbF0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBldmVyeSB0aW1lIHRoZSBlbGVtZW50IGlzIGluc2VydGVkIGludG8gdGhlIERPTS4gSXQgY2hlY2tzIGlmIHRoZSBjdXN0b20gZWxlbWVudFxuXHQgKiBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkIGFuZCBpZiBub3QsIGNhbGxzIHRoZSBhc3NlbWJsZU1ldGhvZCB0byBpbml0aWFsaXplIGl0LlxuXHQgKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKiBAc2luY2UgMS43LjBcblx0ICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudC9jb25uZWN0ZWRDYWxsYmFja1xuXHQgKi9cblx0Y29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0Ly8gQ2hlY2sgaWYgdGhlIG9iamVjdCBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkXG5cdFx0aWYgKCFoYXNPYmplY3RMaW5rKHRoaXMsIGN1c3RvbUVsZW1lbnRVcGRhdGVyTGlua1N5bWJvbCkpIHtcblx0XHRcdC8vIElmIG5vdCwgY2FsbCB0aGUgYXNzZW1ibGVNZXRob2QgdG8gaW5pdGlhbGl6ZSB0aGUgb2JqZWN0XG5cdFx0XHR0aGlzW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxsZWQgZXZlcnkgdGltZSB0aGUgZWxlbWVudCBpcyByZW1vdmVkIGZyb20gdGhlIERPTS4gVXNlZnVsIGZvciBydW5uaW5nIGNsZWFuIHVwIGNvZGUuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqIEBzaW5jZSAxLjcuMFxuXHQgKi9cblx0ZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7fVxuXG5cdC8qKlxuXHQgKiBUaGUgY3VzdG9tIGVsZW1lbnQgaGFzIGJlZW4gbW92ZWQgaW50byBhIG5ldyBkb2N1bWVudCAoZS5nLiBzb21lb25lIGNhbGxlZCBkb2N1bWVudC5hZG9wdE5vZGUoZWwpKS5cblx0ICpcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICogQHNpbmNlIDEuNy4wXG5cdCAqL1xuXHRhZG9wdGVkQ2FsbGJhY2soKSB7fVxuXG5cdC8qKlxuXHQgKiBDYWxsZWQgd2hlbiBhbiBvYnNlcnZlZCBhdHRyaWJ1dGUgaGFzIGJlZW4gYWRkZWQsIHJlbW92ZWQsIHVwZGF0ZWQsIG9yIHJlcGxhY2VkLiBBbHNvIGNhbGxlZCBmb3IgaW5pdGlhbFxuXHQgKiB2YWx1ZXMgd2hlbiBhbiBlbGVtZW50IGlzIGNyZWF0ZWQgYnkgdGhlIHBhcnNlciwgb3IgdXBncmFkZWQuIE5vdGU6IG9ubHkgYXR0cmlidXRlcyBsaXN0ZWQgaW4gdGhlIG9ic2VydmVkQXR0cmlidXRlc1xuXHQgKiBwcm9wZXJ0eSB3aWxsIHJlY2VpdmUgdGhpcyBjYWxsYmFjay5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGF0dHJOYW1lXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBvbGRWYWxcblx0ICogQHBhcmFtIHtzdHJpbmd9IG5ld1ZhbFxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKiBAc2luY2UgMS4xNS4wXG5cdCAqL1xuXHRhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soYXR0ck5hbWUsIG9sZFZhbCwgbmV3VmFsKSB7XG5cdFx0aWYgKGF0dHJOYW1lLnN0YXJ0c1dpdGgoXCJkYXRhLW1vbnN0ZXItb3B0aW9uLVwiKSkge1xuXHRcdFx0c2V0T3B0aW9uRnJvbUF0dHJpYnV0ZShcblx0XHRcdFx0dGhpcyxcblx0XHRcdFx0YXR0ck5hbWUsXG5cdFx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKVtcIm9wdGlvbnNcIl0sXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGNhbGxiYWNrID0gdGhpc1thdHRyaWJ1dGVPYnNlcnZlclN5bWJvbF0/LlthdHRyTmFtZV07XG5cdFx0aWYgKGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjYWxsYmFjay5jYWxsKHRoaXMsIG5ld1ZhbCwgb2xkVmFsKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS50b1N0cmluZygpKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtOb2RlfSBub2RlXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mXG5cdCAqIEBzaW5jZSAxLjE5LjBcblx0ICovXG5cdGhhc05vZGUobm9kZSkge1xuXHRcdGlmIChjb250YWluQ2hpbGROb2RlLmNhbGwodGhpcywgdmFsaWRhdGVJbnN0YW5jZShub2RlLCBOb2RlKSkpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdGlmICghKHRoaXMuc2hhZG93Um9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbnRhaW5DaGlsZE5vZGUuY2FsbCh0aGlzLnNoYWRvd1Jvb3QsIG5vZGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENhbGxzIGEgY2FsbGJhY2sgZnVuY3Rpb24gaWYgaXQgZXhpc3RzLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuXHQgKiBAcGFyYW0geyp9IGFyZ3Ncblx0ICogQHJldHVybiB7Kn1cblx0ICovXG5cdGNhbGxDYWxsYmFjayhuYW1lLCBhcmdzKSB7XG5cdFx0cmV0dXJuIGNhbGxDb250cm9sQ2FsbGJhY2suY2FsbCh0aGlzLCBuYW1lLCAuLi5hcmdzKTtcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBjYWxsQmFja0Z1bmN0aW9uTmFtZVxuICogQHBhcmFtIHsqfSAgYXJnc1xuICogQHJldHVybiB7YW55fVxuICovXG5mdW5jdGlvbiBjYWxsQ29udHJvbENhbGxiYWNrKGNhbGxCYWNrRnVuY3Rpb25OYW1lLCAuLi5hcmdzKSB7XG5cdGlmICghaXNTdHJpbmcoY2FsbEJhY2tGdW5jdGlvbk5hbWUpIHx8IGNhbGxCYWNrRnVuY3Rpb25OYW1lID09PSBcIlwiKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKGNhbGxCYWNrRnVuY3Rpb25OYW1lIGluIHRoaXMpIHtcblx0XHRyZXR1cm4gdGhpc1tjYWxsQmFja0Z1bmN0aW9uTmFtZV0odGhpcywgLi4uYXJncyk7XG5cdH1cblxuXHRpZiAoIXRoaXMuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9TQ1JJUFRfSE9TVCkpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZiAodGhpc1tzY3JpcHRIb3N0RWxlbWVudFN5bWJvbF0ubGVuZ3RoID09PSAwKSB7XG5cdFx0Y29uc3QgdGFyZ2V0SWQgPSB0aGlzLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfU0NSSVBUX0hPU1QpO1xuXHRcdGlmICghdGFyZ2V0SWQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBsaXN0ID0gdGFyZ2V0SWQuc3BsaXQoXCIsXCIpO1xuXHRcdGZvciAoY29uc3QgaWQgb2YgbGlzdCkge1xuXHRcdFx0Y29uc3QgaG9zdCA9IGZpbmRFbGVtZW50V2l0aElkVXB3YXJkcyh0aGlzLCB0YXJnZXRJZCk7XG5cdFx0XHRpZiAoIShob3N0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzW3NjcmlwdEhvc3RFbGVtZW50U3ltYm9sXS5wdXNoKGhvc3QpO1xuXHRcdH1cblx0fVxuXG5cdGZvciAoY29uc3QgaG9zdCBvZiB0aGlzW3NjcmlwdEhvc3RFbGVtZW50U3ltYm9sXSkge1xuXHRcdGlmIChjYWxsQmFja0Z1bmN0aW9uTmFtZSBpbiBob3N0KSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRyZXR1cm4gaG9zdFtjYWxsQmFja0Z1bmN0aW9uTmFtZV0odGhpcywgLi4uYXJncyk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUudG9TdHJpbmcoKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0dGhpcyxcblx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdGBjYWxsYmFjayAke2NhbGxCYWNrRnVuY3Rpb25OYW1lfSBub3QgZm91bmRgLFxuXHQpO1xufVxuXG4vKipcbiAqIEluaXRpYWxpemVzIHRoZSBjdXN0b20gZWxlbWVudCBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKlxuICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgZWxlbWVudCBpcyBhdHRhY2hlZCB0byB0aGUgRE9NLiBJdCBjaGVja3MgaWYgdGhlXG4gKiBgZGF0YS1tb25zdGVyLW9wdGlvbi1jYWxsYmFja2AgYXR0cmlidXRlIGlzIHNldCwgYW5kIGlmIG5vdCwgdGhlIGRlZmF1bHQgY2FsbGJhY2tcbiAqIGBpbml0Q3VzdG9tQ29udHJvbENhbGxiYWNrYCBpcyBjYWxsZWQuIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBzZWFyY2hlZCBmb3IgaW4gdGhpc1xuICogZWxlbWVudCBhbmQgaW4gdGhlIGhvc3QgZWxlbWVudC4gSWYgdGhlIGNhbGxiYWNrIGlzIGZvdW5kLCBpdCBpcyBjYWxsZWQgd2l0aCB0aGUgZWxlbWVudFxuICogYXMgYSBwYXJhbWV0ZXIuXG4gKlxuICogQHRoaXMgQ3VzdG9tRWxlbWVudFxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5L2RlZmluZSNwcm92aWRpbmdfYV9jb25zdHJ1Y3Rpb25fY2FsbGJhY2tcbiAqIEBzaW5jZSAxLjguMFxuICovXG5mdW5jdGlvbiBpbml0RnJvbUNhbGxiYWNrSG9zdCgpIHtcblx0Ly8gU2V0IHRoZSBkZWZhdWx0IGNhbGxiYWNrIGZ1bmN0aW9uIG5hbWVcblx0bGV0IGNhbGxCYWNrRnVuY3Rpb25OYW1lID0gaW5pdENvbnRyb2xDYWxsYmFja05hbWU7XG5cblx0Ly8gSWYgdGhlIGBkYXRhLW1vbnN0ZXItb3B0aW9uLWNhbGxiYWNrYCBhdHRyaWJ1dGUgaXMgc2V0LCB1c2UgaXRzIHZhbHVlIGFzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBuYW1lXG5cdGlmICh0aGlzLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfSU5JVF9DQUxMQkFDSykpIHtcblx0XHRjYWxsQmFja0Z1bmN0aW9uTmFtZSA9IHRoaXMuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9JTklUX0NBTExCQUNLKTtcblx0fVxuXG5cdC8vIENhbGwgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGggdGhlIGVsZW1lbnQgYXMgYSBwYXJhbWV0ZXIgaWYgaXQgZXhpc3RzXG5cdGNhbGxDb250cm9sQ2FsbGJhY2suY2FsbCh0aGlzLCBjYWxsQmFja0Z1bmN0aW9uTmFtZSk7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIGVsZW1lbnQgaXMgZmlyc3QgY3JlYXRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHRoaXMgQ3VzdG9tRWxlbWVudFxuICovXG5mdW5jdGlvbiBhdHRhY2hBdHRyaWJ1dGVDaGFuZ2VNdXRhdGlvbk9ic2VydmVyKCkge1xuXHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRpZiAodHlwZW9mIHNlbGZbYXR0cmlidXRlTXV0YXRpb25PYnNlcnZlclN5bWJvbF0gIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRzZWxmW2F0dHJpYnV0ZU11dGF0aW9uT2JzZXJ2ZXJTeW1ib2xdID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoXG5cdFx0ZnVuY3Rpb24gKG11dGF0aW9ucywgb2JzZXJ2ZXIpIHtcblx0XHRcdGZvciAoY29uc3QgbXV0YXRpb24gb2YgbXV0YXRpb25zKSB7XG5cdFx0XHRcdGlmIChtdXRhdGlvbi50eXBlID09PSBcImF0dHJpYnV0ZXNcIikge1xuXHRcdFx0XHRcdHNlbGYuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKFxuXHRcdFx0XHRcdFx0bXV0YXRpb24uYXR0cmlidXRlTmFtZSxcblx0XHRcdFx0XHRcdG11dGF0aW9uLm9sZFZhbHVlLFxuXHRcdFx0XHRcdFx0bXV0YXRpb24udGFyZ2V0LmdldEF0dHJpYnV0ZShtdXRhdGlvbi5hdHRyaWJ1dGVOYW1lKSxcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0KTtcblxuXHR0cnkge1xuXHRcdHNlbGZbYXR0cmlidXRlTXV0YXRpb25PYnNlcnZlclN5bWJvbF0ub2JzZXJ2ZShzZWxmLCB7XG5cdFx0XHRhdHRyaWJ1dGVzOiB0cnVlLFxuXHRcdFx0YXR0cmlidXRlT2xkVmFsdWU6IHRydWUsXG5cdFx0fSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRhZGRBdHRyaWJ1dGVUb2tlbihzZWxmLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLnRvU3RyaW5nKCkpO1xuXHR9XG59XG5cbi8qKlxuICogQHRoaXMgQ3VzdG9tRWxlbWVudFxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gY29udGFpbkNoaWxkTm9kZShub2RlKSB7XG5cdGlmICh0aGlzLmNvbnRhaW5zKG5vZGUpKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRmb3IgKGNvbnN0IFssIGVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuY2hpbGROb2RlcykpIHtcblx0XHRpZiAoZS5jb250YWlucyhub2RlKSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0Y29udGFpbkNoaWxkTm9kZS5jYWxsKGUsIG5vZGUpO1xuXHR9XG5cblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTUuMFxuICogQHByaXZhdGVcbiAqIEB0aGlzIEN1c3RvbUVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gaW5pdE9wdGlvbk9ic2VydmVyKCkge1xuXHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRsZXQgbGFzdERpc2FibGVkVmFsdWUgPSB1bmRlZmluZWQ7XG5cdHNlbGYuYXR0YWNoT2JzZXJ2ZXIoXG5cdFx0bmV3IE9ic2VydmVyKGZ1bmN0aW9uICgpIHtcblx0XHRcdGNvbnN0IGZsYWcgPSBzZWxmLmdldE9wdGlvbihcImRpc2FibGVkXCIpO1xuXG5cdFx0XHRpZiAoZmxhZyA9PT0gbGFzdERpc2FibGVkVmFsdWUpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRsYXN0RGlzYWJsZWRWYWx1ZSA9IGZsYWc7XG5cblx0XHRcdGlmICghKHNlbGYuc2hhZG93Um9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgcXVlcnkgPVxuXHRcdFx0XHRcImJ1dHRvbiwgY29tbWFuZCwgZmllbGRzZXQsIGtleWdlbiwgb3B0Z3JvdXAsIG9wdGlvbiwgc2VsZWN0LCB0ZXh0YXJlYSwgaW5wdXQsIFtkYXRhLW1vbnN0ZXItb2JqZWN0bGlua11cIjtcblx0XHRcdGNvbnN0IGVsZW1lbnRzID0gc2VsZi5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwocXVlcnkpO1xuXG5cdFx0XHRsZXQgbm9kZUxpc3Q7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRub2RlTGlzdCA9IG5ldyBTZXQoW1xuXHRcdFx0XHRcdC4uLmVsZW1lbnRzLFxuXHRcdFx0XHRcdC4uLmdldFNsb3R0ZWRFbGVtZW50cy5jYWxsKHNlbGYsIHF1ZXJ5KSxcblx0XHRcdFx0XSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdG5vZGVMaXN0ID0gZWxlbWVudHM7XG5cdFx0XHR9XG5cblx0XHRcdGZvciAoY29uc3QgZWxlbWVudCBvZiBbLi4ubm9kZUxpc3RdKSB7XG5cdFx0XHRcdGlmIChmbGFnID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0RJU0FCTEVELCBcIlwiKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShBVFRSSUJVVEVfRElTQUJMRUQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSksXG5cdCk7XG5cblx0c2VsZi5hdHRhY2hPYnNlcnZlcihcblx0XHRuZXcgT2JzZXJ2ZXIoZnVuY3Rpb24gKCkge1xuXHRcdFx0Ly8gbm90IGluaXRpYWxpc2VkXG5cdFx0XHRpZiAoIWhhc09iamVjdExpbmsoc2VsZiwgY3VzdG9tRWxlbWVudFVwZGF0ZXJMaW5rU3ltYm9sKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHQvLyBpbmZvcm0gZXZlcnkgZWxlbWVudFxuXHRcdFx0Y29uc3QgdXBkYXRlcnMgPSBnZXRMaW5rZWRPYmplY3RzKHNlbGYsIGN1c3RvbUVsZW1lbnRVcGRhdGVyTGlua1N5bWJvbCk7XG5cblx0XHRcdGZvciAoY29uc3QgbGlzdCBvZiB1cGRhdGVycykge1xuXHRcdFx0XHRmb3IgKGNvbnN0IHVwZGF0ZXIgb2YgbGlzdCkge1xuXHRcdFx0XHRcdGNvbnN0IGQgPSBjbG9uZShzZWxmW2ludGVybmFsU3ltYm9sXS5nZXRSZWFsU3ViamVjdCgpW1wib3B0aW9uc1wiXSk7XG5cdFx0XHRcdFx0T2JqZWN0LmFzc2lnbih1cGRhdGVyLmdldFN1YmplY3QoKSwgZCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KSxcblx0KTtcblxuXHQvLyBkaXNhYmxlZFxuXHRzZWxmW2F0dHJpYnV0ZU9ic2VydmVyU3ltYm9sXVtBVFRSSUJVVEVfRElTQUJMRURdID0gKCkgPT4ge1xuXHRcdGlmIChzZWxmLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfRElTQUJMRUQpKSB7XG5cdFx0XHRzZWxmLnNldE9wdGlvbihBVFRSSUJVVEVfRElTQUJMRUQsIHRydWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzZWxmLnNldE9wdGlvbihBVFRSSUJVVEVfRElTQUJMRUQsIHVuZGVmaW5lZCk7XG5cdFx0fVxuXHR9O1xuXG5cdC8vIGRhdGEtbW9uc3Rlci1vcHRpb25zXG5cdHNlbGZbYXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2xdW0FUVFJJQlVURV9PUFRJT05TXSA9ICgpID0+IHtcblx0XHRjb25zdCBvcHRpb25zID0gZ2V0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzLmNhbGwoc2VsZik7XG5cdFx0aWYgKGlzT2JqZWN0KG9wdGlvbnMpICYmIE9iamVjdC5rZXlzKG9wdGlvbnMpLmxlbmd0aCA+IDApIHtcblx0XHRcdHNlbGYuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHR9XG5cdH07XG5cblx0Ly8gZGF0YS1tb25zdGVyLW9wdGlvbnMtc2VsZWN0b3Jcblx0c2VsZlthdHRyaWJ1dGVPYnNlcnZlclN5bWJvbF1bQVRUUklCVVRFX09QVElPTlNfU0VMRUNUT1JdID0gKCkgPT4ge1xuXHRcdGNvbnN0IG9wdGlvbnMgPSBnZXRPcHRpb25zRnJvbVNjcmlwdFRhZy5jYWxsKHNlbGYpO1xuXHRcdGlmIChpc09iamVjdChvcHRpb25zKSAmJiBPYmplY3Qua2V5cyhvcHRpb25zKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRzZWxmLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdFx0fVxuXHR9O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIG9iamVjdFxuICovXG5mdW5jdGlvbiBnZXRPcHRpb25zRnJvbVNjcmlwdFRhZygpIHtcblx0aWYgKCF0aGlzLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfT1BUSU9OU19TRUxFQ1RPUikpIHtcblx0XHRyZXR1cm4ge307XG5cdH1cblxuXHRjb25zdCBub2RlID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihcblx0XHR0aGlzLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfT1BUSU9OU19TRUxFQ1RPUiksXG5cdCk7XG5cdGlmICghKG5vZGUgaW5zdGFuY2VvZiBIVE1MU2NyaXB0RWxlbWVudCkpIHtcblx0XHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRcdHRoaXMsXG5cdFx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdFx0YHRoZSBzZWxlY3RvciAke0FUVFJJQlVURV9PUFRJT05TX1NFTEVDVE9SfSBmb3Igb3B0aW9ucyB3YXMgc3BlY2lmaWVkICgke3RoaXMuZ2V0QXR0cmlidXRlKFxuXHRcdFx0XHRBVFRSSUJVVEVfT1BUSU9OU19TRUxFQ1RPUixcblx0XHRcdCl9KSBidXQgbm90IGZvdW5kLmAsXG5cdFx0KTtcblx0XHRyZXR1cm4ge307XG5cdH1cblxuXHRsZXQgb2JqID0ge307XG5cblx0dHJ5IHtcblx0XHRvYmogPSBwYXJzZU9wdGlvbnNKU09OLmNhbGwodGhpcywgbm9kZS50ZXh0Q29udGVudC50cmltKCkpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0XHR0aGlzLFxuXHRcdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRcdGB3aGVuIGFuYWx5emluZyB0aGUgY29uZmlndXJhdGlvbiBmcm9tIHRoZSBzY3JpcHQgdGFnIHRoZXJlIHdhcyBhbiBlcnJvci4gJHtlfWAsXG5cdFx0KTtcblx0fVxuXG5cdHJldHVybiBvYmo7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gZ2V0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzKCkge1xuXHRpZiAodGhpcy5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX09QVElPTlMpKSB7XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBwYXJzZU9wdGlvbnNKU09OLmNhbGwodGhpcywgdGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX09QVElPTlMpKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRcdFx0dGhpcyxcblx0XHRcdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRcdFx0YHRoZSBvcHRpb25zIGF0dHJpYnV0ZSAke0FUVFJJQlVURV9PUFRJT05TfSBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQganNvbiBkZWZpbml0aW9uIChhY3R1YWw6ICR7dGhpcy5nZXRBdHRyaWJ1dGUoXG5cdFx0XHRcdFx0QVRUUklCVVRFX09QVElPTlMsXG5cdFx0XHRcdCl9KS4ke2V9YCxcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHt9O1xufVxuXG4vKipcbiAqIFBhcnNlcyB0aGUgZ2l2ZW4gSlNPTiBkYXRhIGFuZCByZXR1cm5zIHRoZSBwYXJzZWQgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gZGF0YSBUaGUgSlNPTiBkYXRhIHRvIGJlIHBhcnNlZC5cbiAqIEByZXR1cm4ge09iamVjdH0gVGhlIHBhcnNlZCBvYmplY3QuXG4gKiBAdGhyb3dzIHtlcnJvcn0gVGhyb3dzIGFuIGVycm9yIGlmIHRoZSBKU09OIGRhdGEgaXMgbm90IHZhbGlkLlxuICovXG5mdW5jdGlvbiBwYXJzZU9wdGlvbnNKU09OKGRhdGEpIHtcblx0bGV0IG9iaiA9IHt9O1xuXG5cdGlmICghaXNTdHJpbmcoZGF0YSkpIHtcblx0XHRyZXR1cm4gb2JqO1xuXHR9XG5cblx0Ly8gdGhlIGNvbmZpZ3VyYXRpb24gY2FuIGJlIHNwZWNpZmllZCBhcyBhIGRhdGEgdXJsLlxuXHR0cnkge1xuXHRcdGNvbnN0IGRhdGFVcmwgPSBwYXJzZURhdGFVUkwoZGF0YSk7XG5cdFx0ZGF0YSA9IGRhdGFVcmwuY29udGVudDtcblx0fSBjYXRjaCAoZSkge31cblxuXHR0cnkge1xuXHRcdG9iaiA9IEpTT04ucGFyc2UoZGF0YSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHR0aHJvdyBlO1xuXHR9XG5cblx0cmV0dXJuIHZhbGlkYXRlT2JqZWN0KG9iaik7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge2luaXRIdG1sQ29udGVudH1cbiAqL1xuZnVuY3Rpb24gaW5pdEh0bWxDb250ZW50KCkge1xuXHR0cnkge1xuXHRcdGNvbnN0IHRlbXBsYXRlID0gZmluZERvY3VtZW50VGVtcGxhdGUodGhpcy5jb25zdHJ1Y3Rvci5nZXRUYWcoKSk7XG5cdFx0dGhpcy5hcHBlbmRDaGlsZCh0ZW1wbGF0ZS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0bGV0IGh0bWwgPSB0aGlzLmdldE9wdGlvbihcInRlbXBsYXRlcy5tYWluXCIsIFwiXCIpO1xuXHRcdGlmIChpc1N0cmluZyhodG1sKSAmJiBodG1sLmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbnN0IG1hcHBpbmcgPSB0aGlzLmdldE9wdGlvbihcInRlbXBsYXRlTWFwcGluZ1wiLCB7fSk7XG5cdFx0XHRpZiAoaXNPYmplY3QobWFwcGluZykpIHtcblx0XHRcdFx0aHRtbCA9IG5ldyBGb3JtYXR0ZXIobWFwcGluZywge30pLmZvcm1hdChodG1sKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuaW5uZXJIVE1MID0gaHRtbDtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7Q3VzdG9tRWxlbWVudH1cbiAqIEB0aGlzIEN1c3RvbUVsZW1lbnRcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTYuMFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2ZcbiAqL1xuZnVuY3Rpb24gaW5pdENTU1N0eWxlc2hlZXQoKSB7XG5cdGlmICghKHRoaXMuc2hhZG93Um9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpKSB7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjb25zdCBzdHlsZVNoZWV0ID0gdGhpcy5jb25zdHJ1Y3Rvci5nZXRDU1NTdHlsZVNoZWV0KCk7XG5cblx0aWYgKHN0eWxlU2hlZXQgaW5zdGFuY2VvZiBDU1NTdHlsZVNoZWV0KSB7XG5cdFx0aWYgKHN0eWxlU2hlZXQuY3NzUnVsZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0dGhpcy5zaGFkb3dSb290LmFkb3B0ZWRTdHlsZVNoZWV0cyA9IFtzdHlsZVNoZWV0XTtcblx0XHR9XG5cdH0gZWxzZSBpZiAoaXNBcnJheShzdHlsZVNoZWV0KSkge1xuXHRcdGNvbnN0IGFzc2lnbiA9IFtdO1xuXHRcdGZvciAoY29uc3QgcyBvZiBzdHlsZVNoZWV0KSB7XG5cdFx0XHRpZiAoaXNTdHJpbmcocykpIHtcblx0XHRcdFx0Y29uc3QgdHJpbWVkU3R5bGVTaGVldCA9IHMudHJpbSgpO1xuXHRcdFx0XHRpZiAodHJpbWVkU3R5bGVTaGVldCAhPT0gXCJcIikge1xuXHRcdFx0XHRcdGNvbnN0IHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuXHRcdFx0XHRcdHN0eWxlLmlubmVySFRNTCA9IHRyaW1lZFN0eWxlU2hlZXQ7XG5cdFx0XHRcdFx0dGhpcy5zaGFkb3dSb290LnByZXBlbmQoc3R5bGUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHR2YWxpZGF0ZUluc3RhbmNlKHMsIENTU1N0eWxlU2hlZXQpO1xuXG5cdFx0XHRpZiAocy5jc3NSdWxlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGFzc2lnbi5wdXNoKHMpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChhc3NpZ24ubGVuZ3RoID4gMCkge1xuXHRcdFx0dGhpcy5zaGFkb3dSb290LmFkb3B0ZWRTdHlsZVNoZWV0cyA9IGFzc2lnbjtcblx0XHR9XG5cdH0gZWxzZSBpZiAoaXNTdHJpbmcoc3R5bGVTaGVldCkpIHtcblx0XHRjb25zdCB0cmltZWRTdHlsZVNoZWV0ID0gc3R5bGVTaGVldC50cmltKCk7XG5cdFx0aWYgKHRyaW1lZFN0eWxlU2hlZXQgIT09IFwiXCIpIHtcblx0XHRcdGNvbnN0IHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuXHRcdFx0c3R5bGUuaW5uZXJIVE1MID0gc3R5bGVTaGVldDtcblx0XHRcdHRoaXMuc2hhZG93Um9vdC5wcmVwZW5kKHN0eWxlKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7Q3VzdG9tRWxlbWVudH1cbiAqIEB0aHJvd3Mge0Vycm9yfSBodG1sIGlzIG5vdCBzZXQuXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50L2F0dGFjaFNoYWRvd1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqL1xuZnVuY3Rpb24gaW5pdFNoYWRvd1Jvb3QoKSB7XG5cdGxldCB0ZW1wbGF0ZTtcblx0bGV0IGh0bWw7XG5cblx0dHJ5IHtcblx0XHR0ZW1wbGF0ZSA9IGZpbmREb2N1bWVudFRlbXBsYXRlKHRoaXMuY29uc3RydWN0b3IuZ2V0VGFnKCkpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aHRtbCA9IHRoaXMuZ2V0T3B0aW9uKFwidGVtcGxhdGVzLm1haW5cIiwgXCJcIik7XG5cdFx0aWYgKCFpc1N0cmluZyhodG1sKSB8fCBodG1sID09PSB1bmRlZmluZWQgfHwgaHRtbCA9PT0gXCJcIikge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaHRtbCBpcyBub3Qgc2V0LlwiKTtcblx0XHR9XG5cdH1cblxuXHR0aGlzLmF0dGFjaFNoYWRvdyh7XG5cdFx0bW9kZTogdGhpcy5nZXRPcHRpb24oXCJzaGFkb3dNb2RlXCIsIFwib3BlblwiKSxcblx0XHRkZWxlZ2F0ZXNGb2N1czogdGhpcy5nZXRPcHRpb24oXCJkZWxlZ2F0ZXNGb2N1c1wiLCB0cnVlKSxcblx0fSk7XG5cblx0aWYgKHRlbXBsYXRlIGluc3RhbmNlb2YgVGVtcGxhdGUpIHtcblx0XHR0aGlzLnNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQodGVtcGxhdGUuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNvbnN0IG1hcHBpbmcgPSB0aGlzLmdldE9wdGlvbihcInRlbXBsYXRlTWFwcGluZ1wiLCB7fSk7XG5cdGlmIChpc09iamVjdChtYXBwaW5nKSkge1xuXHRcdGNvbnN0IGZvcm1hdHRlciA9IG5ldyBGb3JtYXR0ZXIobWFwcGluZyk7XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwidGVtcGxhdGVGb3JtYXR0ZXIubWFya2VyLm9wZW5cIikgIT09IG51bGwpIHtcblx0XHRcdGZvcm1hdHRlci5zZXRNYXJrZXIoXG5cdFx0XHRcdHRoaXMuZ2V0T3B0aW9uKFwidGVtcGxhdGVGb3JtYXR0ZXIubWFya2VyLm9wZW5cIiksXG5cdFx0XHRcdHRoaXMuZ2V0T3B0aW9uKFwidGVtcGxhdGVGb3JtYXR0ZXIubWFya2VyLmNsb3NlXCIpLFxuXHRcdFx0KTtcblx0XHR9XG5cdFx0aHRtbCA9IGZvcm1hdHRlci5mb3JtYXQoaHRtbCk7XG5cdH1cblxuXHR0aGlzLnNoYWRvd1Jvb3QuaW5uZXJIVE1MID0gaHRtbDtcblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgcmVnaXN0ZXJzIGEgbmV3IGVsZW1lbnQuIFRoZSBzdHJpbmcgcmV0dXJuZWQgYnkgYEN1c3RvbUVsZW1lbnQuZ2V0VGFnKClgIGlzIHVzZWQgYXMgdGhlIHRhZy5cbiAqXG4gKiBAcGFyYW0ge0N1c3RvbUVsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjcuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEB0aHJvd3Mge0RPTUV4Y2VwdGlvbn0gRmFpbGVkIHRvIGV4ZWN1dGUgJ2RlZmluZScgb24gJ0N1c3RvbUVsZW1lbnRSZWdpc3RyeSc6IGlzIG5vdCBhIHZhbGlkIGN1c3RvbSBlbGVtZW50IG5hbWVcbiAqL1xuZnVuY3Rpb24gcmVnaXN0ZXJDdXN0b21FbGVtZW50KGVsZW1lbnQpIHtcblx0dmFsaWRhdGVGdW5jdGlvbihlbGVtZW50KTtcblx0Y29uc3QgY3VzdG9tRWxlbWVudHMgPSBnZXRHbG9iYWxPYmplY3QoXCJjdXN0b21FbGVtZW50c1wiKTtcblx0aWYgKGN1c3RvbUVsZW1lbnRzID09PSB1bmRlZmluZWQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJjdXN0b21FbGVtZW50cyBpcyBub3Qgc3VwcG9ydGVkLlwiKTtcblx0fVxuXG5cdGNvbnN0IHRhZyA9IGVsZW1lbnQ/LmdldFRhZygpO1xuXHRpZiAoIWlzU3RyaW5nKHRhZykgfHwgdGFnID09PSBcIlwiKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidGFnIGlzIG5vdCBzZXQuXCIpO1xuXHR9XG5cblx0aWYgKGN1c3RvbUVsZW1lbnRzLmdldCh0YWcpICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRjdXN0b21FbGVtZW50cy5kZWZpbmUodGFnLCBlbGVtZW50KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBnZXRHbG9iYWwgfSBmcm9tIFwiLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuXG5leHBvcnQgeyByYW5kb20gfTtcblxuLyoqXG4gKiB0aGlzIGZ1bmN0aW9uIHVzZXMgY3J5cHQgYW5kIHJldHVybnMgYSByYW5kb20gbnVtYmVyLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBtaW4gc3RhcnRpbmcgdmFsdWUgb2YgdGhlIGRlZmluaXRpb24gc2V0IChkZWZhdWx0IGlzIDApXG4gKiBAcGFyYW0ge251bWJlcn0gbWF4IGVuZCB2YWx1ZSBvZiB0aGUgZGVmaW5pdGlvbiBzZXQgKGRlZmF1bHQgaXMgMTAwMDAwMDAwMClcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqIEB0aHJvd3Mge0Vycm9yfSBtaXNzaW5nIGNyeXB0XG4gKiBAdGhyb3dzIHtFcnJvcn0gd2UgY2Fubm90IGdlbmVyYXRlIG51bWJlcnMgbGFyZ2VyIHRoYW4gNTMgYml0cy5cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgZGlzdGFuY2UgaXMgdG9vIHNtYWxsIHRvIGNyZWF0ZSBhIHJhbmRvbSBudW1iZXIuXG5cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICovXG5mdW5jdGlvbiByYW5kb20obWluLCBtYXgpIHtcblx0aWYgKG1pbiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0bWluID0gMDtcblx0fVxuXHRpZiAobWF4ID09PSB1bmRlZmluZWQpIHtcblx0XHRtYXggPSBNQVg7XG5cdH1cblxuXHRpZiAobWF4IDwgbWluKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibWF4IG11c3QgYmUgZ3JlYXRlciB0aGFuIG1pblwiKTtcblx0fVxuXG5cdHJldHVybiBNYXRoLnJvdW5kKGNyZWF0ZShtaW4sIG1heCkpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5jb25zdCBNQVggPSAxMDAwMDAwMDAwO1xuXG5NYXRoLmxvZzIgPVxuXHRNYXRoLmxvZzIgfHxcblx0ZnVuY3Rpb24gKG4pIHtcblx0XHRyZXR1cm4gTWF0aC5sb2cobikgLyBNYXRoLmxvZygyKTtcblx0fTtcblxuLyoqXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IG1pblxuICogQHBhcmFtIHtudW1iZXJ9IG1heFxuICogQHJldHVybiB7bnVtYmVyfVxuICogQHByaXZhdGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBtaXNzaW5nIGNyeXB0XG4gKiBAdGhyb3dzIHtFcnJvcn0gd2UgY2Fubm90IGdlbmVyYXRlIG51bWJlcnMgbGFyZ2VyIHRoYW4gNTMgYml0cy5cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgZGlzdGFuY2UgaXMgdG9vIHNtYWxsIHRvIGNyZWF0ZSBhIHJhbmRvbSBudW1iZXIuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZShtaW4sIG1heCkge1xuXHRjb25zdCBnbG9iYWxSZWZlcmVuY2UgPSBnZXRHbG9iYWwoKTtcblxuXHRjb25zdCBjcnlwdCA9XG5cdFx0Z2xvYmFsUmVmZXJlbmNlPy5bXCJjcnlwdG9cIl0gfHxcblx0XHRnbG9iYWxSZWZlcmVuY2U/LltcIm1zQ3J5cHRvXCJdIHx8XG5cdFx0Z2xvYmFsUmVmZXJlbmNlPy5bXCJjcnlwdG9cIl0gfHxcblx0XHR1bmRlZmluZWQ7XG5cblx0aWYgKHR5cGVvZiBjcnlwdCA9PT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm1pc3NpbmcgY3J5cHRcIik7XG5cdH1cblxuXHRsZXQgcnZhbCA9IDA7XG5cdGNvbnN0IHJhbmdlID0gbWF4IC0gbWluO1xuXHRpZiAocmFuZ2UgPCAyKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIGRpc3RhbmNlIGlzIHRvbyBzbWFsbCB0byBjcmVhdGUgYSByYW5kb20gbnVtYmVyLlwiKTtcblx0fVxuXG5cdGNvbnN0IGJpdHNOZWVkZWQgPSBNYXRoLmNlaWwoTWF0aC5sb2cyKHJhbmdlKSk7XG5cdGlmIChiaXRzTmVlZGVkID4gNTMpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ3ZSBjYW5ub3QgZ2VuZXJhdGUgbnVtYmVycyBsYXJnZXIgdGhhbiA1MyBiaXRzLlwiKTtcblx0fVxuXHRjb25zdCBieXRlc05lZWRlZCA9IE1hdGguY2VpbChiaXRzTmVlZGVkIC8gOCk7XG5cdGNvbnN0IG1hc2sgPSBNYXRoLnBvdygyLCBiaXRzTmVlZGVkKSAtIDE7XG5cblx0Y29uc3QgYnl0ZUFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZXNOZWVkZWQpO1xuXHRjcnlwdC5nZXRSYW5kb21WYWx1ZXMoYnl0ZUFycmF5KTtcblxuXHRsZXQgcCA9IChieXRlc05lZWRlZCAtIDEpICogODtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBieXRlc05lZWRlZDsgaSsrKSB7XG5cdFx0cnZhbCArPSBieXRlQXJyYXlbaV0gKiBNYXRoLnBvdygyLCBwKTtcblx0XHRwIC09IDg7XG5cdH1cblxuXHRydmFsID0gcnZhbCAmIG1hc2s7XG5cblx0aWYgKHJ2YWwgPj0gcmFuZ2UpIHtcblx0XHRyZXR1cm4gY3JlYXRlKG1pbiwgbWF4KTtcblx0fVxuXG5cdGlmIChydmFsIDwgbWluKSB7XG5cdFx0cnZhbCArPSBtaW47XG5cdH1cblxuXHRyZXR1cm4gcnZhbDtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IGlzSW50ZWdlciB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlRnVuY3Rpb24sIHZhbGlkYXRlSW50ZWdlciB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgRGVhZE1hbnNTd2l0Y2ggfTtcblxuLyoqXG4gKiBUaGUgZGVhZCBtYW4ncyBzd2l0Y2ggYWxsb3dzIHNldHRpbmcgYSB0aW1lciB3aGljaCBjYW4gYmUgcmVzZXQgYWdhaW5cbiAqIGFuZCBhZ2FpbiB3aXRoaW4gYSBkZWZpbmVkIHBlcmlvZCBvZiB0aW1lLlxuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlL3V0aWwvZGVhZG1hbnNzd2l0Y2gvc2ltcGxlLyBTaW1wbGUgZXhhbXBsZVxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjkuMFxuICogQHN1bW1hcnkgQ2xhc3MgdG8gYmUgYWJsZSB0byBleGVjdXRlIGZ1bmN0aW9uIGNoYWluc1xuICovXG5jbGFzcyBEZWFkTWFuc1N3aXRjaCBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICogQ3JlYXRlIG5ldyBkZWFkIG1hbidzIHN3aXRjaFxuXHQgKlxuXHQgKiBAcGFyYW0ge0ludGVnZXJ9IGRlbGF5XG5cdCAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG5cdCAqIEB0aHJvdyB7VHlwZUVycm9yfSB0aGUgYXJndW1lbnRzIG11c3QgYmUgZWl0aGVyIGludGVnZXIgb3IgZnVuY3Rpb25zXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGludGVnZXJcblx0ICovXG5cdGNvbnN0cnVjdG9yKGRlbGF5LCBjYWxsYmFjaykge1xuXHRcdHN1cGVyKCk7XG5cblx0XHRpbml0LmNhbGwodGhpcywgdmFsaWRhdGVJbnRlZ2VyKGRlbGF5KSwgdmFsaWRhdGVGdW5jdGlvbihjYWxsYmFjaykpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSBkZWxheVxuXHQgKiBAcmV0dXJucyB7RGVhZE1hbnNTd2l0Y2h9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBoYXMgYWxyZWFkeSBydW5cblx0ICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGFyZ3VtZW50XG5cdCAqL1xuXHR0b3VjaChkZWxheSkge1xuXHRcdGlmICh0aGlzW2ludGVybmFsU3ltYm9sXVtcImlzQWxyZWFkeVJ1blwiXSA9PT0gdHJ1ZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaGFzIGFscmVhZHkgcnVuXCIpO1xuXHRcdH1cblxuXHRcdGlmIChpc0ludGVnZXIoZGVsYXkpKSB7XG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXVtcImRlbGF5XCJdID0gZGVsYXk7XG5cdFx0fSBlbHNlIGlmIChkZWxheSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCBhcmd1bWVudFwiKTtcblx0XHR9XG5cblx0XHRjbGVhclRpbWVvdXQodGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJ0aW1lclwiXSk7XG5cdFx0aW5pdENhbGxiYWNrLmNhbGwodGhpcyk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gaGFzIGFscmVhZHkgcnVuXG5cdCAqIEByZXR1cm5zIHtEZWFkTWFuc1N3aXRjaH1cblx0ICovXG5cdGRlZnVzZSgpIHtcblx0XHRpZiAodGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJpc0FscmVhZHlSdW5cIl0gPT09IHRydWUpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImhhcyBhbHJlYWR5IHJ1blwiKTtcblx0XHR9XG5cblx0XHRjbGVhclRpbWVvdXQodGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJ0aW1lclwiXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpbml0Q2FsbGJhY2soKSB7XG5cdHRoaXNbaW50ZXJuYWxTeW1ib2xdW1widGltZXJcIl0gPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXVtcImlzQWxyZWFkeVJ1blwiXSA9IHRydWU7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJjYWxsYmFja1wiXSgpO1xuXHR9LCB0aGlzW2ludGVybmFsU3ltYm9sXVtcImRlbGF5XCJdKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtpbnRlZ2VyfSBkZWxheVxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqL1xuZnVuY3Rpb24gaW5pdChkZWxheSwgY2FsbGJhY2spIHtcblx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSB7XG5cdFx0Y2FsbGJhY2ssXG5cdFx0ZGVsYXksXG5cdFx0aXNBbHJlYWR5UnVuOiBmYWxzZSxcblx0XHR0aW1lcjogdW5kZWZpbmVkLFxuXHR9O1xuXG5cdGluaXRDYWxsYmFjay5jYWxsKHRoaXMpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbEZ1bmN0aW9uIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlRnVuY3Rpb24sIHZhbGlkYXRlSW50ZWdlciB9IGZyb20gXCIuLi8uLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgQ2FsbGJhY2sgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBDYWxsYmFjayB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuXHQgKiBAcGFyYW0ge2ludHx1bmRlZmluZWR9IHRpbWVcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBmdW5jdGlvblxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnRlZ2VyXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihjYWxsYmFjaywgdGltZSkge1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0ge1xuXHRcdFx0Y2FsbGJhY2s6IHZhbGlkYXRlRnVuY3Rpb24oY2FsbGJhY2spLFxuXHRcdFx0dGltZTogdmFsaWRhdGVJbnRlZ2VyKHRpbWUgPz8gMCksXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0gIHsqfSBkYXRhXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRydW4oZGF0YSkge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRnZXRHbG9iYWxGdW5jdGlvbihcInNldFRpbWVvdXRcIikoKCkgPT4ge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdHJlc29sdmUodGhpc1tpbnRlcm5hbFN5bWJvbF0uY2FsbGJhY2soZGF0YSkpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0cmVqZWN0KGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LCB0aGlzW2ludGVybmFsU3ltYm9sXS50aW1lKTtcblx0XHR9KTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IGlzRnVuY3Rpb24sIGlzSW50ZWdlciB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IFF1ZXVlIH0gZnJvbSBcIi4uL3R5cGVzL3F1ZXVlLm1qc1wiO1xuaW1wb3J0IHsgQ2FsbGJhY2sgfSBmcm9tIFwiLi9wcm9jZXNzaW5nL2NhbGxiYWNrLm1qc1wiO1xuXG5leHBvcnQgeyBQcm9jZXNzaW5nIH07XG5cbi8qKlxuICogVGhpcyBjbGFzcyBhbGxvd3MgZXhlY3V0aW5nIHNldmVyYWwgZnVuY3Rpb25zIGluIG9yZGVyLlxuICpcbiAqIEZ1bmN0aW9ucyBhbmQgdGltZW91dHMgY2FuIGJlIHBhc3NlZC4gSWYgYSB0aW1lb3V0IGlzIHBhc3NlZCwgaXQgYXBwbGllcyB0byBhbGwgZnVydGhlciBmdW5jdGlvbnMuXG4gKiBJbiB0aGUgZXhhbXBsZVxuICpcbiAqIGB0aW1lb3V0MSwgZnVuY3Rpb24xLCBmdW5jdGlvbjIsIGZ1bmN0aW9uMywgdGltZW91dDIsIGZ1bmN0aW9uNGBcbiAqXG4gKiB0aGUgdGltZW91dDEgaXMgdmFsaWQgZm9yIHRoZSBmdW5jdGlvbnMgMSwgMiBhbmQgMyBhbmQgdGhlIHRpbWVvdXQyIGZvciB0aGUgZnVuY3Rpb240LlxuICpcbiAqIFNvIHRoZSBleGVjdXRpb24gdGltZSBpcyB0aW1lb3V0MSt0aW1lb3V0MSt0aW1lb3V0MSt0aW1lb3V0MlxuICpcbiAqIFRoZSByZXN1bHQgb2YgYHJ1bigpYCBpcyBhIHByb21pc2UuXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2xpYnJhcmllcy91dGlsL3Byb2Nlc3Npbmcvc2ltcGxlLyBBIHNpbXBsZSBleGFtcGxlXG4gKlxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjEuMFxuICogQHN1bW1hcnkgQ2xhc3MgdG8gYmUgYWJsZSB0byBleGVjdXRlIGZ1bmN0aW9uIGNoYWluc1xuICovXG5jbGFzcyBQcm9jZXNzaW5nIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKiBDcmVhdGUgbmV3IFByb2Nlc3Npbmdcblx0ICpcblx0ICogRnVuY3Rpb25zIGFuZCB0aW1lb3V0cyBjYW4gYmUgcGFzc2VkLiBJZiBhIHRpbWVvdXQgaXMgcGFzc2VkLCBpdCBhcHBsaWVzIHRvIGFsbCBmdXJ0aGVyIGZ1bmN0aW9ucy5cblx0ICogSW4gdGhlIGV4YW1wbGVcblx0ICpcblx0ICogYHRpbWVvdXQxLCBmdW5jdGlvbjEsIGZ1bmN0aW9uMiwgZnVuY3Rpb24zLCB0aW1lb3V0MiwgZnVuY3Rpb240YFxuXHQgKlxuXHQgKiB0aGUgdGltZW91dDEgaXMgdmFsaWQgZm9yIHRoZSBmdW5jdGlvbnMgMSwgMiBhbmQgMyBhbmQgdGhlIHRpbWVvdXQyIGZvciB0aGUgZnVuY3Rpb240LlxuXHQgKlxuXHQgKiBTbyB0aGUgZXhlY3V0aW9uIHRpbWUgaXMgdGltZW91dDErdGltZW91dDErdGltZW91dDErdGltZW91dDJcblx0ICpcblx0ICogQHRocm93IHtUeXBlRXJyb3J9IHRoZSBhcmd1bWVudHMgbXVzdCBiZSBlaXRoZXIgaW50ZWdlciBvciBmdW5jdGlvbnNcblx0ICogQHBhcmFtIHsuLi4oaW50fGZ1bmN0aW9uKX0gYXJnc1xuXHQgKi9cblx0Y29uc3RydWN0b3IoLi4uYXJncykge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IHtcblx0XHRcdHF1ZXVlOiBuZXcgUXVldWUoKSxcblx0XHR9O1xuXG5cdFx0bGV0IHRpbWUgPSAwO1xuXG5cdFx0aWYgKHR5cGVvZiBhcmdzICE9PSBcIm9iamVjdFwiIHx8IGFyZ3NbMF0gPT09IG51bGwpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ0aGUgYXJndW1lbnRzIG11c3QgYmUgZWl0aGVyIGludGVnZXIgb3IgZnVuY3Rpb25zXCIpO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgWywgYXJnXSBvZiBPYmplY3QuZW50cmllcyhhcmdzKSkge1xuXHRcdFx0aWYgKGlzSW50ZWdlcihhcmcpICYmIGFyZyA+PSAwKSB7XG5cdFx0XHRcdHRpbWUgPSBhcmc7XG5cdFx0XHR9IGVsc2UgaWYgKGlzRnVuY3Rpb24oYXJnKSkge1xuXHRcdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5xdWV1ZS5hZGQobmV3IENhbGxiYWNrKGFyZywgdGltZSkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcblx0XHRcdFx0XHRcInRoZSBhcmd1bWVudHMgbXVzdCBiZSBlaXRoZXIgaW50ZWdlciBvciBmdW5jdGlvbnNcIixcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQWRkcyBhIGZ1bmN0aW9uIHdpdGggdGhlIGRlc2lyZWQgdGltZW91dFxuXHQgKiBJZiBubyB0aW1lb3V0IGlzIHNwZWNpZmllZCwgdGhlIHRpbWVvdXQgb2YgdGhlIHByZXZpb3VzIGZ1bmN0aW9uIGlzIHVzZWQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7aW50fHVuZGVmaW5lZH0gdGltZVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIGZ1bmN0aW9uXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGludGVnZXJcblx0ICovXG5cdGFkZChjYWxsYmFjaywgdGltZSkge1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLnF1ZXVlLmFkZChuZXcgQ2FsbGJhY2soY2FsbGJhY2ssIHRpbWUpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB0aGUgZGVmaW5lZCBmdW5jdGlvbnMgaW4gb3JkZXIuXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gZGF0YVxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0cnVuKGRhdGEpIHtcblx0XHRpZiAodGhpc1tpbnRlcm5hbFN5bWJvbF0ucXVldWUuaXNFbXB0eSgpKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGRhdGEpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGNhbGxiYWNrID0gdGhpc1tpbnRlcm5hbFN5bWJvbF0ucXVldWUucG9sbCgpO1xuXG5cdFx0aWYgKGNhbGxiYWNrID09PSBudWxsIHx8IGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoZGF0YSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNhbGxiYWNrLnJ1bihkYXRhKS50aGVuKChyZXN1bHQpID0+IHtcblx0XHRcdHJldHVybiB0aGlzLnJ1bihyZXN1bHQpO1xuXHRcdH0pO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgQVRUUklCVVRFX1BSRUZJWCB9IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG4vKipcbiAqIEBzaW5jZSAxLjAuMFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgU1RZTEVfRElTUExBWV9NT0RFX0JMT0NLID0gXCJibG9ja1wiO1xuXG4vKipcbiAqIFRoaXMgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItdXJsYCBjYW4gYmUgdXNlZCB0byBwYXNzIGEgVVJMIHRvIHRoZSBjb250cm9sLlxuICpcbiAqIEBzaW5jZSAxLjAuMFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0ZPUk1fVVJMID0gYCR7QVRUUklCVVRFX1BSRUZJWH11cmxgO1xuXG4vKipcbiAqIFRoaXMgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItcmVsb2FkYCBjYW4gYmUgdXNlZCB0byBjb250cm9sIHRoZSByZWxvYWQuXG4gKlxuICogdmFsaWQgdmFsdWVzOiBvbnNob3dcbiAqXG4gKiBAc2luY2UgMS4xMS4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfRk9STV9SRUxPQUQgPSBgJHtBVFRSSUJVVEVfUFJFRklYfXJlbG9hZGA7XG5cbi8qKlxuICogYGRhdGEtbW9uc3Rlci1pbnRlbmRgXG4gKlxuICogQHNpbmNlIDEuOS4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfVklTSUJJTElUWSA9IGAke0FUVFJJQlVURV9QUkVGSVh9dmlzaWJpbGl0eWA7XG4vKipcbiAqIGBkYXRhLW1vbnN0ZXItaW50ZW5kYFxuICpcbiAqIEBzaW5jZSAxLjkuMFxuICogQGRlcHJlY2F0ZWQgc2luY2UgMy4zMi4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfQlVUVE9OX0NMQVNTID0gYCR7QVRUUklCVVRFX1BSRUZJWH1idXR0b24tY2xhc3NgO1xuXG4vKipcbiAqIGBkYXRhLW1vbnN0ZXItaW50ZW5kYFxuICpcbiAqIEBzaW5jZSAxLjguMFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0lOVEVORCA9IGAke0FUVFJJQlVURV9QUkVGSVh9aW50ZW5kYDtcblxuLyoqXG4gKiBgZGF0YS1tb25zdGVyLWhhcy1jaGlsZHJlbmBcbiAqXG4gKiBAc2luY2UgMS44LjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9IQVNfQ0hJTERSRU4gPSBgJHtBVFRSSUJVVEVfUFJFRklYfWhhcy1jaGlsZHJlbmA7XG5cbi8qKlxuICogVGhpcyBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1kYXRhc291cmNlYCBjYW4gYmUgdXNlZCB0byBwYXNzIGEgZGF0YXNvdXJjZS5cbiAqXG4gKiBAc2luY2UgMS42LjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9GT1JNX0RBVEFTT1VSQ0UgPSBgJHtBVFRSSUJVVEVfUFJFRklYfWRhdGFzb3VyY2VgO1xuXG4vKipcbiAqIFRoaXMgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItZGF0YXNvdXJjZS1hcmd1bWVudHNgIGNhbiBiZSB1c2VkIHRvIHBhc3MgYXJndW1lbnRzLlxuICpcbiAqIEBzaW5jZSAxLjYuMFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0ZPUk1fREFUQVNPVVJDRV9BUkdVTUVOVFMgPSBgJHtBVFRSSUJVVEVfUFJFRklYfWRhdGFzb3VyY2UtYXJndW1lbnRzYDtcblxuLyoqXG4gKiBUaGlzIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLWJ1dHRvbi1sYWJlbGAgY2FuIGJlIHVzZWQgdG8gcGFzcyBsYWJlbHMuXG4gKlxuICogQHNpbmNlIDEuNi4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfQlVUVE9OX0xBQkVMID0gYCR7QVRUUklCVVRFX1BSRUZJWH1idXR0b24tbGFiZWxgO1xuXG5leHBvcnQge1xuXHRBVFRSSUJVVEVfQlVUVE9OX0xBQkVMLFxuXHRTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0ssXG5cdEFUVFJJQlVURV9GT1JNX1VSTCxcblx0QVRUUklCVVRFX0ZPUk1fREFUQVNPVVJDRSxcblx0QVRUUklCVVRFX0ZPUk1fREFUQVNPVVJDRV9BUkdVTUVOVFMsXG5cdEFUVFJJQlVURV9JTlRFTkQsXG5cdEFUVFJJQlVURV9WSVNJQklMSVRZLFxuXHRBVFRSSUJVVEVfRk9STV9SRUxPQUQsXG5cdEFUVFJJQlVURV9IQVNfQ0hJTERSRU4sXG5cdEFUVFJJQlVURV9CVVRUT05fQ0xBU1MsXG59O1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywgMjAyNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IFRhYnNTdHlsZVNoZWV0IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBUYWJzU3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG5cdFRhYnNTdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIHRhYnMgeyBcbjphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1mb250LWZhbWlseTotYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCxcXFwiUXVpY2tzYW5kXFxcIixcXFwiU2Vnb2UgVUlcXFwiLFxcXCJSb2JvdG9cXFwiLFxcXCJPeHlnZW5cXFwiLFxcXCJVYnVudHVcXFwiLFxcXCJDYW50YXJlbGxcXFwiLFxcXCJGaXJhIFNhbnNcXFwiLFxcXCJEcm9pZCBTYW5zXFxcIixcXFwiSGVsdmV0aWNhIE5ldWVcXFwiLEFyaWFsLHNhbnMtc2VyaWYsXFxcIkFwcGxlIENvbG9yIEVtb2ppXFxcIixcXFwiU2Vnb2UgVUkgRW1vamlcXFwiLFxcXCJTZWdvZSBVSSBTeW1ib2xcXFwiOy0tbW9uc3Rlci1mb250LWZhbWlseS1tb25vc3BhY2U6XFxcIkNvbnNvbGFzXFxcIixcXFwiQ291cmllciBOZXdcXFwiLFxcXCJSb2JvdG8gTW9ub1xcXCIsXFxcIlNvdXJjZSBDb2RlIFByb1xcXCIsXFxcIkZpcmEgTW9ub1xcXCIsbW9ub3NwYWNlOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNil9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNik7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTIpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNik7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTIpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi00KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNik7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0zKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMik7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0yKTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNCk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi01KTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTMpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNCk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS02KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMyk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0yKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNCk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTUpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTYpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMTojODMzYWI0Oy0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0yOiNmZDFkMWQ7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTM6I2ZjYjA0NTstLW1vbnN0ZXItYm94LXNoYWRvdy0xOm5vbmU7LS1tb25zdGVyLWJveC1zaGFkb3ctMjotMXB4IDFweCAxMHB4IDFweCBoc2xhKDAsMCUsNzYlLC42MSk7LS1tb25zdGVyLXRleHQtc2hhZG93Om5vbmU7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC0xKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTYpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWhvdmVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtNik7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC0yKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItd2lkdGg6MnB4Oy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1zdHlsZTpzb2xpZDstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItcmFkaXVzOjA7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS01KTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItdGhlbWUtb24tY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItdGhlbWUtb24tYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi01KTstLW1vbnN0ZXItdGhlbWUtb2ZmLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtb2ZmLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci10aGVtZS1vbi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLXRoZW1lLW9uLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtb2ZmLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtb2ZmLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS01KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWJvcmRlci1zdHlsZTpzb2xpZDstLW1vbnN0ZXItYm9yZGVyLXdpZHRoOjNweDstLW1vbnN0ZXItYm9yZGVyLXJhZGl1czowOy0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZTotNHB4Oy0tbW9uc3Rlci16LWluZGV4LWRlZmF1bHQ6MDstLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lOjEwOy0tbW9uc3Rlci16LWluZGV4LWRyb3Bkb3duOjIwMDstLW1vbnN0ZXItei1pbmRleC1kcm9wZG93bi1vdmVybGF5OjIxMDstLW1vbnN0ZXItei1pbmRleC1zdGlja3k6MzAwOy0tbW9uc3Rlci16LWluZGV4LXN0aWNreS1vdmVybGF5OjMxMDstLW1vbnN0ZXItei1pbmRleC1maXhlZDo0MDA7LS1tb25zdGVyLXotaW5kZXgtZml4ZWQtb3ZlcmxheTo0MTA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtYmFja2Ryb3A6NTAwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLWJhY2tkcm9wLW92ZXJsYXk6NTEwOy0tbW9uc3Rlci16LWluZGV4LW9mZmNhbnZhczo2MDA7LS1tb25zdGVyLXotaW5kZXgtb2ZmY2FudmFzLW92ZXJsYXk6NjEwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsOjcwMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1vdmVybGF5OjcxMDstLW1vbnN0ZXItei1pbmRleC1wb3BvdmVyOjgwMDstLW1vbnN0ZXItei1pbmRleC1wb3BvdmVyLW92ZXJsYXk6ODEwOy0tbW9uc3Rlci16LWluZGV4LXRvb2x0aXA6ODAwOy0tbW9uc3Rlci16LWluZGV4LXRvb2x0aXAtb3ZlcmxheTo5MTA7LS1tb25zdGVyLXNwYWNlLTA6MDstLW1vbnN0ZXItc3BhY2UtMToycHg7LS1tb25zdGVyLXNwYWNlLTI6NHB4Oy0tbW9uc3Rlci1zcGFjZS0zOjZweDstLW1vbnN0ZXItc3BhY2UtNDoxMHB4Oy0tbW9uc3Rlci1zcGFjZS01OjE2cHg7LS1tb25zdGVyLXNwYWNlLTY6MjZweDstLW1vbnN0ZXItc3BhY2UtNzo0MnB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTA6NDgwcHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtNDo0ODBweDstLW1vbnN0ZXItYnJlYWtwb2ludC03Ojc2OHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTk6OTkycHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtMTI6MTIwMHB4Oy0tbW9uc3Rlci1kcmFnZ2VyLXdpZHRoOjJweDstLW1vbnN0ZXItZHJhZ2dlci1oYW5kbGUtd2lkdGg6NHB4Oy0tbW9uc3Rlci1kcmFnZ2VyLWhhbmRsZS1oZWlnaHQ6NTBweH0uYmxvY2t7ZGlzcGxheTpibG9ja30uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmdyaWR7ZGlzcGxheTpncmlkfS5pbmxpbmUtZ3JpZHtkaXNwbGF5OmlubGluZS1ncmlkfS5mbGV4e2Rpc3BsYXk6ZmxleH0uaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleH0uaGlkZGVuLC5oaWRlLC5ub25le2Rpc3BsYXk6bm9uZX0udmlzaWJsZXt2aXNpYmlsaXR5OnZpc2libGV9LmludmlzaWJsZXt2aXNpYmlsaXR5OmhpZGRlbn0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMywubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLTB7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1zdHlsZTpub25lO2JvcmRlci13aWR0aDowfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0yLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMywubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0yLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0zLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTEpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTEpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMSl9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0xKX0ubW9uc3Rlci10aGVtZS1lcnJvci0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTEpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTEpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtMXtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xKX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTEpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMSl9Lm1vbnN0ZXItY29sb3ItZXJyb3ItMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0xKX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS1kaXNhYmxlZC0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yKX0ubW9uc3Rlci10aGVtZS1zZWNvbmRhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLXRoZW1lLXRlcnRpYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItdGhlbWUtZGVzdHJ1Y3RpdmUtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yKX0ubW9uc3Rlci10aGVtZS1zdWNjZXNzLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTIpfS5tb25zdGVyLXRoZW1lLXdhcm5pbmctMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMil9Lm1vbnN0ZXItdGhlbWUtZXJyb3ItMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0yKX0ubW9uc3Rlci10aGVtZS1zZWxlY3Rpb24tMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTIpfS5tb25zdGVyLWJvcmRlci1jb2xvci0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWJvcmRlci0yKX0ubW9uc3Rlci1jb2xvci1uZXV0cmFsLTJ7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWNvbG9yLXByaW1hcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMil9Lm1vbnN0ZXItY29sb3Itc3VjY2Vzcy0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yKX0ubW9uc3Rlci1jb2xvci13YXJuaW5nLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTIpfS5tb25zdGVyLWNvbG9yLWVycm9yLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMil9Lm1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktZGlzYWJsZWQtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMyl9Lm1vbnN0ZXItdGhlbWUtc2Vjb25kYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci10aGVtZS10ZXJ0aWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLXRoZW1lLWRlc3RydWN0aXZlLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMyl9Lm1vbnN0ZXItdGhlbWUtc3VjY2Vzcy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zKX0ubW9uc3Rlci10aGVtZS13YXJuaW5nLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTMpfS5tb25zdGVyLXRoZW1lLWVycm9yLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMyl9Lm1vbnN0ZXItdGhlbWUtc2VsZWN0aW9uLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKX0ubW9uc3Rlci1ib3JkZXItY29sb3ItM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ib3JkZXItMyl9Lm1vbnN0ZXItY29sb3ItbmV1dHJhbC0ze2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1jb2xvci1wcmltYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItY29sb3ItdGVydGlhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTMpfS5tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMyl9Lm1vbnN0ZXItY29sb3Itd2FybmluZy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0zKX0ubW9uc3Rlci1jb2xvci1lcnJvci0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTMpfS5tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNCl9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy00KX0ubW9uc3Rlci10aGVtZS1lcnJvci00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTQpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNCl9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTQpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtNHtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00KX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNCl9Lm1vbnN0ZXItY29sb3ItZXJyb3ItNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci00KX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQpfS5tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29udGFpbmVyLTEsLm1vbnN0ZXItdGhlbWUtY29udHJvbC1yb3ctMXtib3JkZXI6MXB4IHNvbGlkIHZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItY29sb3IpfS5tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29udGFpbmVyLTEsLm1vbnN0ZXItdGhlbWUtY29udHJvbC1lbGVtZW50LC5tb25zdGVyLXRoZW1lLWNvbnRyb2wtcm93LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmctY29sb3IpO2NvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1jb2xvcil9Lm1vbnN0ZXItdGhlbWUtY29udHJvbC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJnLWNvbG9yKX0ubW9uc3Rlci10aGVtZS1iYWNrZ3JvdW5kLWluaGVyaXR7YmFja2dyb3VuZC1jb2xvcjppbmhlcml0IWltcG9ydGFudH0ubW9uc3Rlci10aGVtZS1vbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtb24tYmctY29sb3IpO2NvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtb24tY29sb3IpfS5tb25zdGVyLXRoZW1lLW9mZntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtb2ZmLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLW9mZi1jb2xvcil9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPXBvcHBlcl17YmFja2dyb3VuZDp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7ZGlzcGxheTpub25lO3BhZGRpbmc6MS4xZW07ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtbW9kYWwpfVtkYXRhLXBvcHBlci1hcnJvd10sW2RhdGEtcG9wcGVyLWFycm93XTpiZWZvcmV7YmFja2dyb3VuZDppbmhlcml0O2hlaWdodDpjYWxjKG1heCh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSwgLTEqdmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkpKjIpO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOmNhbGMobWF4KHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpLCAtMSp2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSkqMil9W2RhdGEtcG9wcGVyLWFycm93XXt2aXNpYmlsaXR5OmhpZGRlbn1bZGF0YS1wb3BwZXItYXJyb3ddOmJlZm9yZXtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29udGVudDpcXFwiXFxcIjt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKTt2aXNpYmlsaXR5OnZpc2libGV9ZGl2W2RhdGEtcG9wcGVyLXBsYWNlbWVudF49dG9wXT5bZGF0YS1wb3BwZXItYXJyb3dde2JvdHRvbTpjYWxjKHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpIC0gdmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpLzIpfWRpdltkYXRhLXBvcHBlci1wbGFjZW1lbnRePXRvcF0+W2RhdGEtcG9wcGVyLWFycm93XTpiZWZvcmV7Ym9yZGVyLWJvdHRvbTp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkgdmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItbGVmdDp0cmFuc3BhcmVudDtib3JkZXItcmlnaHQ6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpIHZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKSB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXRvcDp0cmFuc3BhcmVudH1kaXZbZGF0YS1wb3BwZXItcGxhY2VtZW50Xj1ib3R0b21dPltkYXRhLXBvcHBlci1hcnJvd117dG9wOmNhbGModmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkgLSB2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkpfWRpdltkYXRhLXBvcHBlci1wbGFjZW1lbnRePWJvdHRvbV0+W2RhdGEtcG9wcGVyLWFycm93XTpiZWZvcmV7Ym9yZGVyLWJvdHRvbTp0cmFuc3BhcmVudDtib3JkZXItbGVmdDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkgdmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmlnaHQ6dHJhbnNwYXJlbnQ7Ym9yZGVyLXRvcDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkgdmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX1kaXZbZGF0YS1wb3BwZXItcGxhY2VtZW50Xj1sZWZ0XT5bZGF0YS1wb3BwZXItYXJyb3dde3JpZ2h0OmNhbGModmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkgLSB2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkpfWRpdltkYXRhLXBvcHBlci1wbGFjZW1lbnRePWxlZnRdPltkYXRhLXBvcHBlci1hcnJvd106YmVmb3Jle2JvcmRlci1ib3R0b206dHJhbnNwYXJlbnQ7Ym9yZGVyLWxlZnQ6dHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0OnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSB2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci10b3A6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpIHZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKSB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9ZGl2W2RhdGEtcG9wcGVyLXBsYWNlbWVudF49cmlnaHRdPltkYXRhLXBvcHBlci1hcnJvd117bGVmdDpjYWxjKHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpIC0gdmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpLzIpfWRpdltkYXRhLXBvcHBlci1wbGFjZW1lbnRePXJpZ2h0XT5bZGF0YS1wb3BwZXItYXJyb3ddOmJlZm9yZXtib3JkZXItYm90dG9tOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSB2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1sZWZ0OnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSB2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yaWdodDp0cmFuc3BhcmVudDtib3JkZXItdG9wOnRyYW5zcGFyZW50fVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3V0bGluZTpub25lO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXh7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9Omhvc3R7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6YmxvY2t9Lm1vbnN0ZXItYmFkZ2UtcHJpbWFyeXtwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2UtcHJpbWFyeSwubW9uc3Rlci1iYWRnZS1wcmltYXJ5LXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLXByaW1hcnktcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS1zZWNvbmRhcnl7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLXNlY29uZGFyeSwubW9uc3Rlci1iYWRnZS1zZWNvbmRhcnktcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTMpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLXNlY29uZGFyeS1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLXRlcnRpYXJ5e3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS10ZXJ0aWFyeSwubW9uc3Rlci1iYWRnZS10ZXJ0aWFyeS1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTMpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLXRlcnRpYXJ5LXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2UtZGVzdHJ1Y3RpdmV7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLWRlc3RydWN0aXZlLC5tb25zdGVyLWJhZGdlLWRlc3RydWN0aXZlLXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTEpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMSk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2UtZGVzdHJ1Y3RpdmUtcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS1zdWNjZXNze3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS1zdWNjZXNzLC5tb25zdGVyLWJhZGdlLXN1Y2Nlc3MtcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMSk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2Utc3VjY2Vzcy1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLXdhcm5pbmd7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLXdhcm5pbmcsLm1vbnN0ZXItYmFkZ2Utd2FybmluZy1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTEpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0xKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS13YXJuaW5nLXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2UtZXJyb3J7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLWVycm9yLC5tb25zdGVyLWJhZGdlLWVycm9yLXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTEpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMSk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2UtZXJyb3ItcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX1bZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBidXR0b24uaGlkZGVue2Rpc3BsYXk6bm9uZX1uYXZbZGF0YS1tb25zdGVyLXJvbGU9bmF2XXthbGlnbi1pdGVtczpmbGV4LWVuZDtib3JkZXItYm90dG9tLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItYm90dG9tLXdpZHRoOnRoaW47Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOm5vd3JhcDttYXJnaW4tYm90dG9tOi43NXJlbTtvdmVyZmxvdzpoaWRkZW59W2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gYnV0dG9uIC5yZW1vdmUtdGFiey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lO2FwcGVhcmFuY2U6bm9uZTtiYWNrZ3JvdW5kLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J000LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMEw4IDcuMjkzbDIuNjQ2LTIuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC43MDcgOGwyLjY0NyAyLjY0NmEuNS41IDAgMCAxLS43MDguNzA4TDggOC43MDdsLTIuNjQ2IDIuNjQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4TDcuMjkzIDggNC42NDYgNS4zNTRhLjUuNSAwIDAgMSAwLS43MDgnLyUzRSUzQy9zdmclM0VcXFwiKTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjEwMCUgMTAwJTtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOjE2cHg7ZmxleC13cmFwOm5vd3JhcDtoZWlnaHQ6MTZweDttaW4taGVpZ2h0OjE2cHg7b3JkZXI6Mjt3aWR0aDoxNnB4fVtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIGJ1dHRvbiBzcGFue2Rpc3BsYXk6ZmxleDtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS40O3doaXRlLXNwYWNlOnByZX1bZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBidXR0b257YWxpZ24tY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLXNlbGY6c3RyZXRjaDtib3JkZXI6bm9uZTtib3JkZXItYm90dG9tOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MS41O21hcmdpbi1yaWdodDouNzVyZW07b3V0bGluZTpub25lO3BhZGRpbmc6LjM3NXJlbSAwO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3RyYW5zaXRpb246Y29sb3IgLjhzOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9W2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gYnV0dG9uOm5vdChbZGlzYWJsZWRdKTpob3Zlcntib3JkZXItYm90dG9tLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfVtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIGJ1dHRvbltkYXRhLW1vbnN0ZXItc3RhdGU9YWN0aXZlXSxbZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBidXR0b25bZGF0YS1tb25zdGVyLXN0YXRlPWFjdGl2ZV06bm90KFtkaXNhYmxlZF0pOmhvdmVye2JhY2tncm91bmQtY29sb3I6aW5oZXJpdDtib3JkZXItYm90dG9tLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpIWltcG9ydGFudH1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspe1tkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIGJ1dHRvbltkYXRhLW1vbnN0ZXItc3RhdGU9YWN0aXZlXSxbZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBidXR0b25bZGF0YS1tb25zdGVyLXN0YXRlPWFjdGl2ZV06bm90KFtkaXNhYmxlZF0pOmhvdmVye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKSFpbXBvcnRhbnR9fVtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIGJ1dHRvbltkaXNhYmxlZF17YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTEpO2N1cnNvcjpub3QtYWxsb3dlZH1bZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBidXR0b25bZGF0YS1tb25zdGVyLXJvbGU9c3dpdGNoXXthbGlnbi1zZWxmOmNlbnRlcjtib3JkZXI6MDtvcmRlcjoyO3RvdWNoLWFjdGlvbjpub25lfVtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIGJ1dHRvbltkYXRhLW1vbnN0ZXItcm9sZT1zd2l0Y2hdOm5vdChbZGlzYWJsZWRdKTpob3Zlcntib3JkZXItYm90dG9tLXdpZHRoOjB9W2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gYnV0dG9uIGltZ3toZWlnaHQ6MS4zcmVtO21hcmdpbi1sZWZ0Oi40cmVtO3dpZHRoOjEuM3JlbX06OnNsb3R0ZWQoOm5vdChbc2xvdF0pOm5vdCguYWN0aXZlKSl7ZGlzcGxheTpub25lfTo6c2xvdHRlZCgqKXthbGlnbi1zZWxmOmNlbnRlcn06OnNsb3R0ZWQoW3Nsb3RdKXtib3JkZXItYm90dG9tLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItYm90dG9tLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKX06OnNsb3R0ZWQoW3Nsb3Q9c3RhcnRdKXttYXJnaW4tcmlnaHQ6Ljc1cmVtO29yZGVyOjB9OjpzbG90dGVkKFtzbG90PWVuZF0pe21hcmdpbi1sZWZ0Oi43NXJlbTtvcmRlcjozfVtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIFtkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXItbmF2XSBidXR0b246bm90KFtkaXNhYmxlZF0pe2JvcmRlcjowO2p1c3RpZnktY29udGVudDpsZWZ0O3BhZGRpbmctbGVmdDoxNXB4O3BhZGRpbmctcmlnaHQ6MTVweDt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIFtkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXItbmF2XSBidXR0b246aG92ZXIsW2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gW2RhdGEtbW9uc3Rlci1yb2xlPXBvcHBlci1uYXZdIGJ1dHRvbltkYXRhLW1vbnN0ZXItc3RhdGU9YWN0aXZlXSxbZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyLW5hdl0gYnV0dG9uW2RhdGEtbW9uc3Rlci1zdGF0ZT1hY3RpdmVdOm5vdChbZGlzYWJsZWRdKTpob3Zlcntib3JkZXI6MH1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspe1tkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIFtkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXItbmF2XSBidXR0b25bZGF0YS1tb25zdGVyLXN0YXRlPWFjdGl2ZV0sW2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gW2RhdGEtbW9uc3Rlci1yb2xlPXBvcHBlci1uYXZdIGJ1dHRvbltkYXRhLW1vbnN0ZXItc3RhdGU9YWN0aXZlXTpub3QoW2Rpc2FibGVkXSk6aG92ZXJ7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCkhaW1wb3J0YW50fX0gXG59YCxcblx0XHQwLFxuXHQpO1xufSBjYXRjaCAoZSkge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpLFxuXHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0ZSArIFwiXCIsXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBmaXJlQ3VzdG9tRXZlbnQgfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2V2ZW50cy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlSW5zdGFuY2UsIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5mdW5jdGlvbiBmaW5kU2hhZG93Um9vdChlbGVtZW50KSB7XG5cdGlmIChlbGVtZW50IGluc3RhbmNlb2YgU2hhZG93Um9vdCkgcmV0dXJuIGVsZW1lbnQ7XG5cdGlmICghZWxlbWVudC5wYXJlbnROb2RlKSByZXR1cm4gbnVsbDtcblx0cmV0dXJuIGZpbmRTaGFkb3dSb290KGVsZW1lbnQucGFyZW50Tm9kZSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gdXJsXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBmZXRjaCBvcHRpb25zXG4gKiBAcGFyYW0ge09iamVjdH0gZmlsdGVyIGZldGNoIG9wdGlvbnNcbiAqIEByZXR1cm4ge1Byb21pc2U8T2JqZWN0Pn1cbiAqIEB0aHJvd3Mge0Vycm9yfSB3ZSB3b24ndCBiZSBhYmxlIHRvIHJlYWQgdGhlIGRhdGFcbiAqIEB0aHJvd3Mge0Vycm9yfSBjbGllbnQgZXJyb3JcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bmRlZmluZWQgc3RhdHVzIG9yIHR5cGVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuICovXG5mdW5jdGlvbiBsb2FkQW5kQXNzaWduQ29udGVudChlbGVtZW50LCB1cmwsIG9wdGlvbnMsIGZpbHRlcikge1xuXHRyZXR1cm4gbG9hZENvbnRlbnQodXJsLCBvcHRpb25zKS50aGVuKChyZXNwb25zZSkgPT4ge1xuXHRcdGxldCBjb250ZW50ID0gcmVzcG9uc2UuY29udGVudDtcblxuXHRcdGlmIChpc1N0cmluZyhmaWx0ZXIpICYmIGZpbHRlciAhPT0gXCJcIikge1xuXHRcdFx0Y29uc3QgdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdFx0XHRjb25zdCBjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0XHRcdGMuaW5uZXJIVE1MID0gY29udGVudDtcblx0XHRcdGZvciAoY29uc3QgWywgbm9kZV0gb2YgYy5xdWVyeVNlbGVjdG9yQWxsKGZpbHRlcikuZW50cmllcygpKSB7XG5cdFx0XHRcdHQuYXBwZW5kQ2hpbGQobm9kZSk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnRlbnQgPSB0LmlubmVySFRNTDtcblx0XHR9XG5cblx0XHRjb25zdCB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0XHR0LmlubmVySFRNTCA9IGNvbnRlbnQ7XG5cblx0XHRjb25zdCBzY3JpcHRzID0gdC5xdWVyeVNlbGVjdG9yQWxsKFwic2NyaXB0XCIpO1xuXHRcdGZvciAoY29uc3QgWywgc2NyaXB0XSBvZiBzY3JpcHRzLmVudHJpZXMoKSkge1xuXHRcdFx0Y29uc3QgcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG5cdFx0XHRzLmlubmVySFRNTCA9IHNjcmlwdC5pbm5lckhUTUw7XG5cdFx0XHRpZiAoc2NyaXB0LnNyYykgcy5zcmMgPSBzY3JpcHQuc3JjO1xuXHRcdFx0aWYgKHNjcmlwdC50eXBlKSBzLnR5cGUgPSBzY3JpcHQudHlwZTtcblx0XHRcdGlmIChzY3JpcHQuYXN5bmMpIHMuYXN5bmMgPSBzY3JpcHQuYXN5bmM7XG5cdFx0XHRpZiAoc2NyaXB0LmRlZmVyKSBzLmRlZmVyID0gc2NyaXB0LmRlZmVyO1xuXHRcdFx0aWYgKHNjcmlwdC5jcm9zc09yaWdpbikgcy5jcm9zc09yaWdpbiA9IHNjcmlwdC5jcm9zc09yaWdpbjtcblx0XHRcdGlmIChzY3JpcHQuaW50ZWdyaXR5KSBzLmludGVncml0eSA9IHNjcmlwdC5pbnRlZ3JpdHk7XG5cdFx0XHRpZiAoc2NyaXB0LnJlZmVycmVyUG9saWN5KSBzLnJlZmVycmVyUG9saWN5ID0gc2NyaXB0LnJlZmVycmVyUG9saWN5O1xuXHRcdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzKTtcblx0XHRcdHQucmVtb3ZlQ2hpbGQoc2NyaXB0KTtcblx0XHR9XG5cblx0XHR2YWxpZGF0ZUluc3RhbmNlKGVsZW1lbnQsIEhUTUxFbGVtZW50KS5pbm5lckhUTUwgPSB0LmlubmVySFRNTDtcblxuXHRcdGNvbnN0IHJvb3QgPSBmaW5kU2hhZG93Um9vdChlbGVtZW50KTtcblx0XHRpZiAocm9vdCAhPT0gbnVsbCkge1xuXHRcdFx0ZWxlbWVudCA9IHJvb3QuaG9zdDtcblx0XHR9XG5cblx0XHRmaXJlQ3VzdG9tRXZlbnQoZWxlbWVudCwgXCJtb25zdGVyLWZldGNoZWRcIiwge1xuXHRcdFx0dXJsLFxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHJlc3BvbnNlO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd8VVJMfSB1cmxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIGZldGNoIG9wdGlvbnNcbiAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn1cbiAqIEB0aHJvd3Mge0Vycm9yfSB3ZSB3b24ndCBiZSBhYmxlIHRvIHJlYWQgdGhlIGRhdGFcbiAqIEB0aHJvd3Mge0Vycm9yfSBjbGllbnQgZXJyb3JcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bmRlZmluZWQgc3RhdHVzIG9yIHR5cGVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGxvYWRDb250ZW50KHVybCwgb3B0aW9ucykge1xuXHRpZiAodXJsIGluc3RhbmNlb2YgVVJMKSB7XG5cdFx0dXJsID0gdXJsLnRvU3RyaW5nKCk7XG5cdH1cblxuXHRyZXR1cm4gZmV0Y2godmFsaWRhdGVTdHJpbmcodXJsKSwgb3B0aW9ucykudGhlbigocmVzcG9uc2UpID0+IHtcblx0XHQvLyBUaGUgb2sgcmVhZC1vbmx5IHByb3BlcnR5IG9mIHRoZSBSZXNwb25zZSBpbnRlcmZhY2UgY29udGFpbnMgYVxuXHRcdC8vIEJvb2xlYW4gc3RhdGluZyB3aGV0aGVyIHRoZSByZXNwb25zZSB3YXMgc3VjY2Vzc2Z1bCAoc3RhdHVzIGluIHRoZSByYW5nZSAyMDAtMjk5KSBvciBub3QuXG5cdFx0aWYgKHJlc3BvbnNlPy5vayAhPT0gdHJ1ZSkge1xuXHRcdFx0Ly8gQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvUmVzcG9uc2UvdHlwZVxuXHRcdFx0aWYgKFxuXHRcdFx0XHRbXCJlcnJvclwiLCBcIm9wYXF1ZVwiLCBcIm9wYXF1ZXJlZGlyZWN0XCJdLmluZGV4T2YocmVzcG9uc2U/LnR5cGUpICE9PSAtMVxuXHRcdFx0KSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0XHRgd2Ugd29uJ3QgYmUgYWJsZSB0byByZWFkIHRoZSBkYXRhICgke3Jlc3BvbnNlPy50eXBlfSlgLFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBzdGF0dXNDbGFzcyA9IGAke3Jlc3BvbnNlPy5zdGF0dXN9YC5zdWJzdHJpbmcoMCwgMSk7XG5cdFx0XHRzd2l0Y2ggKHN0YXR1c0NsYXNzKSB7XG5cdFx0XHRcdGNhc2UgXCI0XCI6XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBjbGllbnQgZXJyb3IgJHtyZXNwb25zZT8uc3RhdHVzVGV4dH1gKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdFx0XHRgdW5kZWZpbmVkIHN0YXR1cyAoJHtyZXNwb25zZT8uc3RhdHVzfSAvICR7cmVzcG9uc2U/LnN0YXR1c1RleHR9KSBvciB0eXBlICgke3Jlc3BvbnNlPy50eXBlfSlgLFxuXHRcdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcblx0XHRcdHJlc3BvbnNlXG5cdFx0XHRcdC50ZXh0KClcblx0XHRcdFx0LnRoZW4oKGNvbnRlbnQpID0+IHtcblx0XHRcdFx0XHRyZXNvbHZlKHtcblx0XHRcdFx0XHRcdGNvbnRlbnQsXG5cdFx0XHRcdFx0XHR0eXBlOiByZXNwb25zZS5oZWFkZXJzLmdldChcIkNvbnRlbnQtVHlwZVwiKSxcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKHJlamVjdCk7XG5cdFx0fSk7XG5cdH0pO1xufVxuXG5leHBvcnQgeyBsb2FkQW5kQXNzaWduQ29udGVudCwgbG9hZENvbnRlbnQgfTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIDIwMjQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICovXG5cbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0VSUk9STUVTU0FHRSB9IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBUaGVtZVN0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IFRoZW1lU3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG5cdFRoZW1lU3R5bGVTaGVldC5pbnNlcnRSdWxlKFxuXHRcdGBcbkBsYXllciB0aGVtZSB7IFxuLm1vbnN0ZXItdGhlbWUtcHJpbWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTEpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTEpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMSl9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0xKX0ubW9uc3Rlci10aGVtZS1lcnJvci0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTEpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTEpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtMXtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xKX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTEpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMSl9Lm1vbnN0ZXItY29sb3ItZXJyb3ItMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0xKX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS1kaXNhYmxlZC0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yKX0ubW9uc3Rlci10aGVtZS1zZWNvbmRhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLXRoZW1lLXRlcnRpYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItdGhlbWUtZGVzdHJ1Y3RpdmUtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yKX0ubW9uc3Rlci10aGVtZS1zdWNjZXNzLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTIpfS5tb25zdGVyLXRoZW1lLXdhcm5pbmctMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMil9Lm1vbnN0ZXItdGhlbWUtZXJyb3ItMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0yKX0ubW9uc3Rlci10aGVtZS1zZWxlY3Rpb24tMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTIpfS5tb25zdGVyLWJvcmRlci1jb2xvci0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWJvcmRlci0yKX0ubW9uc3Rlci1jb2xvci1uZXV0cmFsLTJ7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWNvbG9yLXByaW1hcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMil9Lm1vbnN0ZXItY29sb3Itc3VjY2Vzcy0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yKX0ubW9uc3Rlci1jb2xvci13YXJuaW5nLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTIpfS5tb25zdGVyLWNvbG9yLWVycm9yLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMil9Lm1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktZGlzYWJsZWQtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMyl9Lm1vbnN0ZXItdGhlbWUtc2Vjb25kYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci10aGVtZS10ZXJ0aWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLXRoZW1lLWRlc3RydWN0aXZlLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMyl9Lm1vbnN0ZXItdGhlbWUtc3VjY2Vzcy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zKX0ubW9uc3Rlci10aGVtZS13YXJuaW5nLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTMpfS5tb25zdGVyLXRoZW1lLWVycm9yLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMyl9Lm1vbnN0ZXItdGhlbWUtc2VsZWN0aW9uLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKX0ubW9uc3Rlci1ib3JkZXItY29sb3ItM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ib3JkZXItMyl9Lm1vbnN0ZXItY29sb3ItbmV1dHJhbC0ze2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1jb2xvci1wcmltYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItY29sb3ItdGVydGlhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTMpfS5tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMyl9Lm1vbnN0ZXItY29sb3Itd2FybmluZy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0zKX0ubW9uc3Rlci1jb2xvci1lcnJvci0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTMpfS5tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNCl9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy00KX0ubW9uc3Rlci10aGVtZS1lcnJvci00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTQpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNCl9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTQpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtNHtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00KX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNCl9Lm1vbnN0ZXItY29sb3ItZXJyb3ItNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci00KX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQpfS5tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29udGFpbmVyLTEsLm1vbnN0ZXItdGhlbWUtY29udHJvbC1yb3ctMXtib3JkZXI6MXB4IHNvbGlkIHZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItY29sb3IpfS5tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29udGFpbmVyLTEsLm1vbnN0ZXItdGhlbWUtY29udHJvbC1lbGVtZW50LC5tb25zdGVyLXRoZW1lLWNvbnRyb2wtcm93LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmctY29sb3IpO2NvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1jb2xvcil9Lm1vbnN0ZXItdGhlbWUtY29udHJvbC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJnLWNvbG9yKX0ubW9uc3Rlci10aGVtZS1iYWNrZ3JvdW5kLWluaGVyaXR7YmFja2dyb3VuZC1jb2xvcjppbmhlcml0IWltcG9ydGFudH0ubW9uc3Rlci10aGVtZS1vbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtb24tYmctY29sb3IpO2NvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtb24tY29sb3IpfS5tb25zdGVyLXRoZW1lLW9mZntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtb2ZmLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLW9mZi1jb2xvcil9IFxufWAsXG5cdFx0MCxcblx0KTtcbn0gY2F0Y2ggKGUpIHtcblx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0ZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKSxcblx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdGUgKyBcIlwiLFxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi8uLi8uLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUJvb2xlYW4gfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IHNldEV2ZW50TGlzdGVuZXJzTW9kaWZpZXJzLCBwb3BwZXJJbnN0YW5jZVN5bWJvbCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBwb3BwZXJJbnN0YW5jZVN5bWJvbCA9IFN5bWJvbChcInBvcHBlckluc3RhbmNlXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdGhpcyB7Q3VzdG9tRWxlbWVudH1cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gbW9kZVxuICovXG5mdW5jdGlvbiBzZXRFdmVudExpc3RlbmVyc01vZGlmaWVycyhtb2RlKSB7XG5cdGNvbnN0IG9wdGlvbnMgPSBleHRlbmQoe30sIHRoaXMuZ2V0T3B0aW9uKFwicG9wcGVyXCIpKTtcblx0Y29uc3QgbW9kaWZpZXJzID0gb3B0aW9ucz8uW1wibW9kaWZpZXJzXCJdO1xuXG5cdGlmICghaXNBcnJheShtb2RpZmllcnMpKSB7XG5cdFx0b3B0aW9uc1tcIm1vZGlmaWVyc1wiXSA9IFtdO1xuXHR9XG5cblx0aWYgKFxuXHRcdG9wdGlvbnNbXCJtb2RpZmllcnNcIl0uZmlsdGVyKChlbnRyeSkgPT4ge1xuXHRcdFx0aWYgKGVudHJ5Py5bXCJuYW1lXCJdID09PSBcImV2ZW50TGlzdGVuZXJzXCIpIHtcblx0XHRcdFx0Ly8gcGVyZm9ybWFuY2UgaHR0cHM6Ly9wb3BwZXIuanMub3JnL2RvY3MvdjIvdHV0b3JpYWwvI3BlcmZvcm1hbmNlXG5cdFx0XHRcdGVudHJ5W1wiZW5hYmxlZFwiXSA9IHZhbGlkYXRlQm9vbGVhbihtb2RlKTtcblx0XHRcdH1cblx0XHR9KS5sZW5ndGggPT09IDBcblx0KSB7XG5cdFx0b3B0aW9uc1tcIm1vZGlmaWVyc1wiXS5wdXNoKHtcblx0XHRcdG5hbWU6IFwiZXZlbnRMaXN0ZW5lcnNcIixcblx0XHRcdGVuYWJsZWQ6IHZhbGlkYXRlQm9vbGVhbihtb2RlKSxcblx0XHR9KTtcblx0fVxuXG5cdHRoaXNbcG9wcGVySW5zdGFuY2VTeW1ib2xdLnNldE9wdGlvbnMob3B0aW9ucyk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgY3JlYXRlUG9wcGVyIH0gZnJvbSBcIkBwb3BwZXJqcy9jb3JlXCI7XG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vLi4vZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQgeyBQYXRoZmluZGVyIH0gZnJvbSBcIi4uLy4uL2RhdGEvcGF0aGZpbmRlci5tanNcIjtcbmltcG9ydCB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuLFxuXHRhZGRUb09iamVjdExpbmssXG5cdGhhc09iamVjdExpbmssXG59IGZyb20gXCIuLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7XG5cdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdEFUVFJJQlVURV9QUkVGSVgsXG5cdEFUVFJJQlVURV9ST0xFLFxufSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRDdXN0b21FbGVtZW50LFxuXHRnZXRTbG90dGVkRWxlbWVudHMsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHtcblx0ZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQsXG5cdGZpcmVDdXN0b21FdmVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5pbXBvcnQgeyBnZXREb2N1bWVudCB9IGZyb20gXCIuLi8uLi9kb20vdXRpbC5tanNcIjtcbmltcG9ydCB7IHJhbmRvbSB9IGZyb20gXCIuLi8uLi9tYXRoL3JhbmRvbS5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbCB9IGZyb20gXCIuLi8uLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyBJRCB9IGZyb20gXCIuLi8uLi90eXBlcy9pZC5tanNcIjtcbmltcG9ydCB7IGlzQXJyYXksIGlzU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgVG9rZW5MaXN0IH0gZnJvbSBcIi4uLy4uL3R5cGVzL3Rva2VubGlzdC5tanNcIjtcbmltcG9ydCB7IGNsb25lIH0gZnJvbSBcIi4uLy4uL3V0aWwvY2xvbmUubWpzXCI7XG5pbXBvcnQgeyBEZWFkTWFuc1N3aXRjaCB9IGZyb20gXCIuLi8uLi91dGlsL2RlYWRtYW5zc3dpdGNoLm1qc1wiO1xuaW1wb3J0IHsgUHJvY2Vzc2luZyB9IGZyb20gXCIuLi8uLi91dGlsL3Byb2Nlc3NpbmcubWpzXCI7XG5pbXBvcnQge1xuXHRBVFRSSUJVVEVfQlVUVE9OX0xBQkVMLFxuXHRBVFRSSUJVVEVfRk9STV9SRUxPQUQsXG5cdEFUVFJJQlVURV9GT1JNX1VSTCxcblx0U1RZTEVfRElTUExBWV9NT0RFX0JMT0NLLFxufSBmcm9tIFwiLi4vZm9ybS9jb25zdGFudHMubWpzXCI7XG5cbmltcG9ydCB7IFRhYnNTdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC90YWJzLm1qc1wiO1xuaW1wb3J0IHsgbG9hZEFuZEFzc2lnbkNvbnRlbnQgfSBmcm9tIFwiLi4vZm9ybS91dGlsL2ZldGNoLm1qc1wiO1xuaW1wb3J0IHsgVGhlbWVTdHlsZVNoZWV0IH0gZnJvbSBcIi4uL3N0eWxlc2hlZXQvdGhlbWUubWpzXCI7XG5pbXBvcnQge1xuXHRwb3BwZXJJbnN0YW5jZVN5bWJvbCxcblx0c2V0RXZlbnRMaXN0ZW5lcnNNb2RpZmllcnMsXG59IGZyb20gXCIuLi9mb3JtL3V0aWwvcG9wcGVyLm1qc1wiO1xuXG5leHBvcnQgeyBUYWJzIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHBvcHBlckVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJwb3BwZXJFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBwb3BwZXJOYXZFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwicG9wcGVyTmF2RWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgY29udHJvbEVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJjb250cm9sRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgbmF2RWxlbWVudFN5bWJvbCA9IFN5bWJvbChcIm5hdkVsZW1lbnRcIik7XG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBzd2l0Y2hFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwic3dpdGNoRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgY2hhbmdlVGFiRXZlbnRIYW5kbGVyID0gU3ltYm9sKFwiY2hhbmdlVGFiRXZlbnRIYW5kbGVyXCIpO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcmVtb3ZlVGFiRXZlbnRIYW5kbGVyID0gU3ltYm9sKFwicmVtb3ZlVGFiRXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBwb3BwZXJTd2l0Y2hFdmVudEhhbmRsZXIgPSBTeW1ib2woXCJwb3BwZXJTd2l0Y2hFdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgY2xvc2VFdmVudEhhbmRsZXIgPSBTeW1ib2woXCJjbG9zZUV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgbXV0YXRpb25PYnNlcnZlclN5bWJvbCA9IFN5bWJvbChcIm11dGF0aW9uT2JzZXJ2ZXJcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGRpbWVuc2lvbnNTeW1ib2wgPSBTeW1ib2woXCJkaW1lbnNpb25zXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCB0aW1lckNhbGxiYWNrU3ltYm9sID0gU3ltYm9sKFwidGltZXJDYWxsYmFja1wiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCByZXNpemVPYnNlcnZlclN5bWJvbCA9IFN5bWJvbChcInJlc2l6ZU9ic2VydmVyXCIpO1xuXG4vKipcbiAqIEEgVGFicyBDb250cm9sXG4gKlxuICogQGZyYWdtZW50cyAvZnJhZ21lbnRzL2NvbXBvbmVudHMvbGF5b3V0L3RhYnMvXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvbGF5b3V0L3RhYnMtc2ltcGxlXG4gKlxuICogQHNpbmNlIDMuNzQuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IFRoaXMgQ3VzdG9tQ29udHJvbCBjcmVhdGVzIGEgdGFiIGVsZW1lbnQgd2l0aCBhIHZhcmlldHkgb2Ygb3B0aW9ucy5cbiAqL1xuY2xhc3MgVGFicyBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9sYXlvdXQvdGFic1wiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBIVE1MIHRhZywgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGxhYmVsc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbGFiZWxzLm5ldy10YWItbGFiZWw9XCJOZXcgVGFiXCJcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZlYXR1cmVzXG5cdCAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBmZWF0dXJlcy5vcGVuRGVsYXk9NTAwIE9wZW4gZGVsYXkgaW4gbWlsbGlzZWNvbmRzXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmZXRjaCBGZXRjaCBbc2VlIFVzaW5nIEZldGNoIG1vemlsbGEub3JnXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmV0Y2hfQVBJL1VzaW5nX0ZldGNoKVxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2gucmVkaXJlY3Q9ZXJyb3Jcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLm1ldGhvZD1HRVRcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLm1vZGU9c2FtZS1vcmlnaW5cblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLmNyZWRlbnRpYWxzPXNhbWUtb3JpZ2luXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmZXRjaC5oZWFkZXJzPXtcImFjY2VwdFwiOlwidGV4dC9odG1sXCJ9fVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gcG9wcGVyIFtQb3BwZXJKUyBPcHRpb25zXShodHRwczovL3BvcHBlci5qcy5vcmcvZG9jcy92Mi8pXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwb3BwZXIucGxhY2VtZW50PWJvdHRvbSBQb3BwZXJKUyBwbGFjZW1lbnRcblx0ICogQHByb3BlcnR5IHtPYmplY3RbXX0gbW9kaWZpZXJzPXtuYW1lOm9mZnNldH0gUG9wcGVySlMgcGxhY2VtZW50XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdH0sXG5cdFx0XHRsYWJlbHM6IHtcblx0XHRcdFx0XCJuZXctdGFiLWxhYmVsXCI6IFwiTmV3IFRhYlwiLFxuXHRcdFx0fSxcblx0XHRcdGJ1dHRvbnM6IHtcblx0XHRcdFx0c3RhbmRhcmQ6IFtdLFxuXHRcdFx0XHRwb3BwZXI6IFtdLFxuXHRcdFx0fSxcblx0XHRcdGZldGNoOiB7XG5cdFx0XHRcdHJlZGlyZWN0OiBcImVycm9yXCIsXG5cdFx0XHRcdG1ldGhvZDogXCJHRVRcIixcblx0XHRcdFx0bW9kZTogXCJzYW1lLW9yaWdpblwiLFxuXHRcdFx0XHRjcmVkZW50aWFsczogXCJzYW1lLW9yaWdpblwiLFxuXHRcdFx0XHRoZWFkZXJzOiB7XG5cdFx0XHRcdFx0YWNjZXB0OiBcInRleHQvaHRtbFwiLFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblxuXHRcdFx0ZmVhdHVyZXM6IHtcblx0XHRcdFx0b3BlbkRlbGF5OiBudWxsLFxuXHRcdFx0fSxcblxuXHRcdFx0Y2xhc3Nlczoge1xuXHRcdFx0XHRidXR0b246IFwibW9uc3Rlci10aGVtZS1wcmltYXJ5LTFcIixcblx0XHRcdFx0cG9wcGVyOiBcIm1vbnN0ZXItdGhlbWUtcHJpbWFyeS0xXCIsXG5cdFx0XHRcdG5hdmlnYXRpb246IFwibW9uc3Rlci10aGVtZS1wcmltYXJ5LTFcIixcblx0XHRcdH0sXG5cblx0XHRcdHBvcHBlcjoge1xuXHRcdFx0XHRwbGFjZW1lbnQ6IFwiYm90dG9tXCIsXG5cdFx0XHRcdG1vZGlmaWVyczogW1xuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdG5hbWU6IFwib2Zmc2V0XCIsXG5cdFx0XHRcdFx0XHRvcHRpb25zOiB7XG5cdFx0XHRcdFx0XHRcdG9mZnNldDogWzAsIDJdLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9LFxuXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0bmFtZTogXCJldmVudExpc3RlbmVyc1wiLFxuXHRcdFx0XHRcdFx0ZW5hYmxlZDogZmFsc2UsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XSxcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGludGVybmFsIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcblxuXHRcdHRoaXNbZGltZW5zaW9uc1N5bWJvbF0gPSBuZXcgUGF0aGZpbmRlcih7IGRhdGE6IHt9IH0pO1xuXG5cdFx0aW5pdEV2ZW50SGFuZGxlci5jYWxsKHRoaXMpO1xuXG5cdFx0Ly8gc2V0dXAgc3RydWN0dXJlXG5cdFx0aW5pdFRhYkJ1dHRvbnMuY2FsbCh0aGlzKS50aGVuKCgpID0+IHtcblx0XHRcdGluaXRQb3BwZXJTd2l0Y2guY2FsbCh0aGlzKTtcblx0XHRcdGluaXRQb3BwZXIuY2FsbCh0aGlzKTtcblx0XHRcdGF0dGFjaFJlc2l6ZU9ic2VydmVyLmNhbGwodGhpcyk7XG5cdFx0XHRhdHRhY2hUYWJDaGFuZ2VPYnNlcnZlci5jYWxsKHRoaXMpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBpbnRlcm5hbCBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqXG5cdCAqIEByZXR1cm4ge0NTU1N0eWxlU2hlZXRbXX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiBbVGFic1N0eWxlU2hlZXRdO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBpbnRlcm5hbCBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci10YWJzXCI7XG5cdH1cblxuXHQvKipcblx0ICogQSBmdW5jdGlvbiB0aGF0IGFjdGl2YXRlcyBhIHRhYiBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgbmFtZS5cblx0ICpcblx0ICogVGhlIHRhYnMgaGF2ZSB0byBiZSBuYW1lZCB3aXRoIHRoZSBgZGF0YS1tb25zdGVyLW5hbWVgIGF0dHJpYnV0ZS5cblx0ICpcblx0ICogQHBhcmFtIHt0eXBlfSBpZE9yTmFtZSAtIHRoZSBuYW1lIG9yIGlkIG9mIHRoZSB0YWIgdG8gYWN0aXZhdGVcblx0ICogQHJldHVybiB7VGFic30gLSBUaGUgY3VycmVudCBpbnN0YW5jZVxuXHQgKi9cblx0YWN0aXZlVGFiKGlkT3JOYW1lKSB7XG5cdFx0bGV0IGZvdW5kID0gZmFsc2U7XG5cblx0XHRnZXRTbG90dGVkRWxlbWVudHMuY2FsbCh0aGlzKS5mb3JFYWNoKChub2RlKSA9PiB7XG5cdFx0XHRpZiAoZm91bmQgPT09IHRydWUpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAobm9kZS5nZXRBdHRyaWJ1dGUoXCJkYXRhLW1vbnN0ZXItbmFtZVwiKSA9PT0gaWRPck5hbWUpIHtcblx0XHRcdFx0dGhpcy5zaGFkb3dSb290XG5cdFx0XHRcdFx0LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XHRcdFx0XHRgW2RhdGEtbW9uc3Rlci10YWItcmVmZXJlbmNlPVwiJHtub2RlLmdldEF0dHJpYnV0ZShcImlkXCIpfVwiXWAsXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHRcdC5jbGljaygpO1xuXHRcdFx0XHRmb3VuZCA9IHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChub2RlLmdldEF0dHJpYnV0ZShcImlkXCIpID09PSBpZE9yTmFtZSkge1xuXHRcdFx0XHR0aGlzLnNoYWRvd1Jvb3Rcblx0XHRcdFx0XHQucXVlcnlTZWxlY3Rvcihcblx0XHRcdFx0XHRcdGBbZGF0YS1tb25zdGVyLXRhYi1yZWZlcmVuY2U9XCIke25vZGUuZ2V0QXR0cmlidXRlKFwiaWRcIil9XCJdYCxcblx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0LmNsaWNrKCk7XG5cdFx0XHRcdGZvdW5kID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBuYW1lIG9yIGlkIG9mIHRoZSBjdXJyZW50bHkgYWN0aXZlIHRhYi5cblx0ICpcblx0ICogVGhlIHRhYnMgaGF2ZSB0byBiZSBuYW1lZCB3aXRoIHRoZSBgZGF0YS1tb25zdGVyLW5hbWVgIGF0dHJpYnV0ZS5cblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfG51bGx9XG5cdCAqL1xuXHRnZXRBY3RpdmVUYWIoKSB7XG5cdFx0Y29uc3Qgbm9kZXMgPSBnZXRTbG90dGVkRWxlbWVudHMuY2FsbCh0aGlzKTtcblx0XHRmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcblx0XHRcdGlmIChub2RlLm1hdGNoZXMoXCIuYWN0aXZlXCIpID09PSB0cnVlKSB7XG5cdFx0XHRcdGlmIChub2RlLmhhc0F0dHJpYnV0ZShcImRhdGEtbW9uc3Rlci1uYW1lXCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG5vZGUuZ2V0QXR0cmlidXRlKFwiZGF0YS1tb25zdGVyLW5hbWVcIik7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gbm9kZS5nZXRBdHRyaWJ1dGUoXCJpZFwiKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBkb20gYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKi9cblx0Y29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuXHRcdGNvbnN0IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcblxuXHRcdGZvciAoY29uc3QgWywgdHlwZV0gb2YgT2JqZWN0LmVudHJpZXMoW1wiY2xpY2tcIiwgXCJ0b3VjaFwiXSkpIHtcblx0XHRcdC8vIGNsb3NlIG9uIG91dHNpZGUgdWktZXZlbnRzXG5cdFx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIHRoaXNbY2xvc2VFdmVudEhhbmRsZXJdKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBkb20gYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKi9cblx0ZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuXHRcdGNvbnN0IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcblxuXHRcdC8vIGNsb3NlIG9uIG91dHNpZGUgdWktZXZlbnRzXG5cdFx0Zm9yIChjb25zdCBbLCB0eXBlXSBvZiBPYmplY3QuZW50cmllcyhbXCJjbGlja1wiLCBcInRvdWNoXCJdKSkge1xuXHRcdFx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCB0aGlzW2Nsb3NlRXZlbnRIYW5kbGVyXSk7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaW5pdFBvcHBlclN3aXRjaCgpIHtcblx0Y29uc3Qgbm9kZXMgPSBnZXRTbG90dGVkRWxlbWVudHMuY2FsbCh0aGlzLCBgWyR7QVRUUklCVVRFX1JPTEV9PVwic3dpdGNoXCJdYCk7IC8vIG51bGwgXHUyMUE2IG9ubHkgdW5uYW1lZCBzbG90c1xuXHRsZXQgc3dpdGNoQnV0dG9uO1xuXHRpZiAobm9kZXMuc2l6ZSA9PT0gMCkge1xuXHRcdHN3aXRjaEJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIik7XG5cdFx0c3dpdGNoQnV0dG9uLnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSwgXCJzd2l0Y2hcIik7XG5cdFx0c3dpdGNoQnV0dG9uLnNldEF0dHJpYnV0ZShcInBhcnRcIiwgXCJzd2l0Y2hcIik7XG5cdFx0c3dpdGNoQnV0dG9uLmNsYXNzTGlzdC5hZGQoXCJoaWRkZW5cIik7XG5cdFx0Y29uc3QgY2xhc3NMaXN0ID0gdGhpcy5nZXRPcHRpb24oXCJjbGFzc2VzLmJ1dHRvblwiKTtcblx0XHRpZiAoY2xhc3NMaXN0KSB7XG5cdFx0XHRzd2l0Y2hCdXR0b24uY2xhc3NMaXN0LmFkZChjbGFzc0xpc3QpO1xuXHRcdH1cblx0XHRzd2l0Y2hCdXR0b24uaW5uZXJIVE1MID1cblx0XHRcdCc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPjxwYXRoIGQ9XCJNOS41IDEzYTEuNSAxLjUgMCAxIDEtMyAwIDEuNSAxLjUgMCAwIDEgMyAwem0wLTVhMS41IDEuNSAwIDEgMS0zIDAgMS41IDEuNSAwIDAgMSAzIDB6bTAtNWExLjUgMS41IDAgMSAxLTMgMCAxLjUgMS41IDAgMCAxIDMgMHpcIi8+PC9zdmc+Jztcblx0XHR0aGlzW25hdkVsZW1lbnRTeW1ib2xdLnByZXBlbmQoc3dpdGNoQnV0dG9uKTtcblx0fSBlbHNlIHtcblx0XHRzd2l0Y2hCdXR0b24gPSBub2Rlcy5uZXh0KCk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICovXG5cdHRoaXNbcG9wcGVyU3dpdGNoRXZlbnRIYW5kbGVyXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChldmVudCwgQVRUUklCVVRFX1JPTEUsIFwic3dpdGNoXCIpO1xuXG5cdFx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudCkge1xuXHRcdFx0dG9nZ2xlUG9wcGVyLmNhbGwodGhpcyk7XG5cdFx0fVxuXHR9O1xuXG5cdGZvciAoY29uc3QgdHlwZSBvZiBbXCJjbGlja1wiLCBcInRvdWNoXCJdKSB7XG5cdFx0c3dpdGNoQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgdGhpc1twb3BwZXJTd2l0Y2hFdmVudEhhbmRsZXJdKTtcblx0fVxuXG5cdHRoaXNbc3dpdGNoRWxlbWVudFN5bWJvbF0gPSBzd2l0Y2hCdXR0b247XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaGlkZVBvcHBlcigpIHtcblx0aWYgKCF0aGlzW3BvcHBlckluc3RhbmNlU3ltYm9sXSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuXHQvLyBwZXJmb3JtYW5jZSBodHRwczovL3BvcHBlci5qcy5vcmcvZG9jcy92Mi90dXRvcmlhbC8jcGVyZm9ybWFuY2Vcblx0c2V0RXZlbnRMaXN0ZW5lcnNNb2RpZmllcnMuY2FsbCh0aGlzLCBmYWxzZSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc2hvd1BvcHBlcigpIHtcblx0aWYgKHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUuZGlzcGxheSA9PT0gU1RZTEVfRElTUExBWV9NT0RFX0JMT0NLKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcblx0dGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ID0gU1RZTEVfRElTUExBWV9NT0RFX0JMT0NLO1xuXHQvLyBwZXJmb3JtYW5jZSBodHRwczovL3BvcHBlci5qcy5vcmcvZG9jcy92Mi90dXRvcmlhbC8jcGVyZm9ybWFuY2Vcblx0c2V0RXZlbnRMaXN0ZW5lcnNNb2RpZmllcnMuY2FsbCh0aGlzLCB0cnVlKTtcblxuXHR0aGlzW3BvcHBlckluc3RhbmNlU3ltYm9sXS51cGRhdGUoKTtcblxuXHRuZXcgUHJvY2Vzc2luZygoKSA9PiB7XG5cdFx0dGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5yZW1vdmVQcm9wZXJ0eShcInZpc2liaWxpdHlcIik7XG5cdH0pXG5cdFx0LnJ1bih1bmRlZmluZWQpXG5cdFx0LnRoZW4oKCkgPT4ge30pXG5cdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHRvZ2dsZVBvcHBlcigpIHtcblx0aWYgKHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUuZGlzcGxheSA9PT0gU1RZTEVfRElTUExBWV9NT0RFX0JMT0NLKSB7XG5cdFx0aGlkZVBvcHBlci5jYWxsKHRoaXMpO1xuXHR9IGVsc2Uge1xuXHRcdHNob3dQb3BwZXIuY2FsbCh0aGlzKTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGF0dGFjaFJlc2l6ZU9ic2VydmVyKCkge1xuXHQvLyBhZ2FpbnN0IGZsaWNrZXJpbmdcblx0dGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0gPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKGVudHJpZXMpID0+IHtcblx0XHRpZiAodGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXSBpbnN0YW5jZW9mIERlYWRNYW5zU3dpdGNoKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdLnRvdWNoKCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0ZGVsZXRlIHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXSA9IG5ldyBEZWFkTWFuc1N3aXRjaCgyMDAsICgpID0+IHtcblx0XHRcdHRoaXNbZGltZW5zaW9uc1N5bWJvbF0uc2V0VmlhKFwiZGF0YS5jYWxjdWxhdGVkXCIsIGZhbHNlKTtcblx0XHRcdGNoZWNrQW5kUmVhcnJhbmdlQnV0dG9ucy5jYWxsKHRoaXMpO1xuXHRcdH0pO1xuXHR9KTtcblxuXHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXS5vYnNlcnZlKHRoaXNbbmF2RWxlbWVudFN5bWJvbF0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGF0dGFjaFRhYkNoYW5nZU9ic2VydmVyKCkge1xuXHQvLyBhZ2FpbnN0IGZsaWNrZXJpbmdcblx0bmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9ucykgPT4ge1xuXHRcdGxldCBydW5VcGRhdGUgPSBmYWxzZTtcblxuXHRcdGZvciAoY29uc3QgbXV0YXRpb24gb2YgbXV0YXRpb25zKSB7XG5cdFx0XHRpZiAobXV0YXRpb24udHlwZSA9PT0gXCJjaGlsZExpc3RcIikge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0bXV0YXRpb24uYWRkZWROb2Rlcy5sZW5ndGggPiAwIHx8XG5cdFx0XHRcdFx0bXV0YXRpb24ucmVtb3ZlZE5vZGVzLmxlbmd0aCA+IDBcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cnVuVXBkYXRlID0gdHJ1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChydW5VcGRhdGUgPT09IHRydWUpIHtcblx0XHRcdHRoaXNbZGltZW5zaW9uc1N5bWJvbF0uc2V0VmlhKFwiZGF0YS5jYWxjdWxhdGVkXCIsIGZhbHNlKTtcblx0XHRcdGluaXRUYWJCdXR0b25zLmNhbGwodGhpcyk7XG5cdFx0fVxuXHR9KS5vYnNlcnZlKHRoaXMsIHtcblx0XHRjaGlsZExpc3Q6IHRydWUsXG5cdH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtTZWxlY3R9XG4gKiBAZXh0ZXJuYWwgXCJleHRlcm5hbDpjcmVhdGVQb3BwZXJcIlxuICogQHNlZSB7QGxpbmsgIFBsdWdpbnN9XG4gKi9cbmZ1bmN0aW9uIGluaXRQb3BwZXIoKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdGNvbnN0IG9wdGlvbnMgPSBleHRlbmQoe30sIHNlbGYuZ2V0T3B0aW9uKFwicG9wcGVyXCIpKTtcblxuXHRzZWxmW3BvcHBlckluc3RhbmNlU3ltYm9sXSA9IGNyZWF0ZVBvcHBlcihcblx0XHRzZWxmW3N3aXRjaEVsZW1lbnRTeW1ib2xdLFxuXHRcdHNlbGZbcG9wcGVyRWxlbWVudFN5bWJvbF0sXG5cdFx0b3B0aW9ucyxcblx0KTtcblxuXHRjb25zdCBvYnNlcnZlcjEgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbiAobXV0YXRpb25zKSB7XG5cdFx0bGV0IHJ1blVwZGF0ZSA9IGZhbHNlO1xuXHRcdGZvciAoY29uc3QgbXV0YXRpb24gb2YgbXV0YXRpb25zKSB7XG5cdFx0XHRpZiAobXV0YXRpb24udHlwZSA9PT0gXCJjaGlsZExpc3RcIikge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0bXV0YXRpb24uYWRkZWROb2Rlcy5sZW5ndGggPiAwIHx8XG5cdFx0XHRcdFx0bXV0YXRpb24ucmVtb3ZlZE5vZGVzLmxlbmd0aCA+IDBcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cnVuVXBkYXRlID0gdHJ1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChydW5VcGRhdGUgPT09IHRydWUpIHtcblx0XHRcdHNlbGZbcG9wcGVySW5zdGFuY2VTeW1ib2xdLnVwZGF0ZSgpO1xuXHRcdH1cblx0fSk7XG5cblx0b2JzZXJ2ZXIxLm9ic2VydmUoc2VsZltwb3BwZXJOYXZFbGVtZW50U3ltYm9sXSwge1xuXHRcdGNoaWxkTGlzdDogdHJ1ZSxcblx0XHRzdWJ0cmVlOiB0cnVlLFxuXHR9KTtcblxuXHRyZXR1cm4gc2VsZjtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICovXG5mdW5jdGlvbiBzaG93KGVsZW1lbnQpIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0Y29uc3QgcmVmZXJlbmNlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoYCR7QVRUUklCVVRFX1BSRUZJWH10YWItcmVmZXJlbmNlYCk7XG5cblx0Y29uc3Qgbm9kZXMgPSBnZXRTbG90dGVkRWxlbWVudHMuY2FsbCh0aGlzKTtcblx0Zm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG5cdFx0Y29uc3QgaWQgPSBub2RlLmdldEF0dHJpYnV0ZShcImlkXCIpO1xuXG5cdFx0aWYgKGlkID09PSByZWZlcmVuY2UpIHtcblx0XHRcdG5vZGUuY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKTtcblxuXHRcdFx0Y29uc3Qgb3BlbkRlbGF5ID0gcGFyc2VJbnQodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5vcGVuRGVsYXlcIiksIDEwKTtcblxuXHRcdFx0aWYgKCFpc05hTihvcGVuRGVsYXkpICYmIG9wZW5EZWxheSA+IDApIHtcblx0XHRcdFx0bm9kZS5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcblxuXHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHRub2RlLnN0eWxlLnZpc2liaWxpdHkgPSBcInZpc2libGVcIjtcblx0XHRcdFx0fSwgb3BlbkRlbGF5KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gZ2V0IGFsbCBkYXRhLSBmcm9tIGJ1dHRvbiBhbmQgZmlsdGVyIG91dCBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcyBhbmQgZGF0YS1tb25zdGVyLWluc2VydFxuXHRcdFx0Y29uc3QgZGF0YSA9IHt9O1xuXHRcdFx0Y29uc3QgbWFzayA9IFtcblx0XHRcdFx0XCJkYXRhLW1vbnN0ZXItYXR0cmlidXRlc1wiLFxuXHRcdFx0XHRcImRhdGEtbW9uc3Rlci1pbnNlcnQtcmVmZXJlbmNlXCIsXG5cdFx0XHRcdFwiZGF0YS1tb25zdGVyLXN0YXRlXCIsXG5cdFx0XHRcdFwiZGF0YS1tb25zdGVyLWJ1dHRvbi1sYWJlbFwiLFxuXHRcdFx0XHRcImRhdGEtbW9uc3Rlci1vYmplY3RsaW5rXCIsXG5cdFx0XHRcdFwiZGF0YS1tb25zdGVyLXJvbGVcIixcblx0XHRcdF07XG5cblx0XHRcdGZvciAoY29uc3QgWywgYXR0cl0gb2YgT2JqZWN0LmVudHJpZXMobm9kZS5hdHRyaWJ1dGVzKSkge1xuXHRcdFx0XHRpZiAoYXR0ci5uYW1lLnN0YXJ0c1dpdGgoXCJkYXRhLVwiKSAmJiBtYXNrLmluZGV4T2YoYXR0ci5uYW1lKSA9PT0gLTEpIHtcblx0XHRcdFx0XHRkYXRhW2F0dHIubmFtZV0gPSBhdHRyLnZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChub2RlLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfRk9STV9VUkwpKSB7XG5cdFx0XHRcdGNvbnN0IHVybCA9IG5vZGUuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1VSTCk7XG5cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdCFub2RlLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfRk9STV9SRUxPQUQpIHx8XG5cdFx0XHRcdFx0bm9kZS5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fUkVMT0FEKS50b0xvd2VyQ2FzZSgpID09PSBcIm9uc2hvd1wiXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdG5vZGUucmVtb3ZlQXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1VSTCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb24oXCJmZXRjaFwiLCB7fSk7XG5cdFx0XHRcdGNvbnN0IGZpbHRlciA9IHVuZGVmaW5lZDtcblx0XHRcdFx0bG9hZEFuZEFzc2lnbkNvbnRlbnQobm9kZSwgdXJsLCBvcHRpb25zLCBmaWx0ZXIpXG5cdFx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdFx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci10YWItY2hhbmdlZFwiLCB7XG5cdFx0XHRcdFx0XHRcdHJlZmVyZW5jZSxcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci10YWItY2hhbmdlZFwiLCB7XG5cdFx0XHRcdFx0cmVmZXJlbmNlLFxuXHRcdFx0XHRcdGRhdGEsXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRub2RlLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIik7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3Qgc3RhbmRhcmRCdXR0b25zID0gdGhpcy5nZXRPcHRpb24oXCJidXR0b25zLnN0YW5kYXJkXCIpO1xuXHRmb3IgKGNvbnN0IGluZGV4IGluIHN0YW5kYXJkQnV0dG9ucykge1xuXHRcdGNvbnN0IGJ1dHRvbiA9IHN0YW5kYXJkQnV0dG9uc1tpbmRleF07XG5cdFx0Y29uc3Qgc3RhdGUgPSBidXR0b25bXCJyZWZlcmVuY2VcIl0gPT09IHJlZmVyZW5jZSA/IFwiYWN0aXZlXCIgOiBcImluYWN0aXZlXCI7XG5cdFx0dGhpcy5zZXRPcHRpb24oYGJ1dHRvbnMuc3RhbmRhcmQuJHtpbmRleH0uc3RhdGVgLCBzdGF0ZSk7XG5cdH1cblxuXHRjb25zdCBwb3BwZXJCdXR0b24gPSB0aGlzLmdldE9wdGlvbihcImJ1dHRvbnMucG9wcGVyXCIpO1xuXHRmb3IgKGNvbnN0IGluZGV4IGluIHBvcHBlckJ1dHRvbikge1xuXHRcdGNvbnN0IGJ1dHRvbiA9IHBvcHBlckJ1dHRvbltpbmRleF07XG5cdFx0Y29uc3Qgc3RhdGUgPSBidXR0b25bXCJyZWZlcmVuY2VcIl0gPT09IHJlZmVyZW5jZSA/IFwiYWN0aXZlXCIgOiBcImluYWN0aXZlXCI7XG5cdFx0dGhpcy5zZXRPcHRpb24oYGJ1dHRvbnMucG9wcGVyLiR7aW5kZXh9LnN0YXRlYCwgc3RhdGUpO1xuXHR9XG5cblx0aGlkZVBvcHBlci5jYWxsKHRoaXMpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudEhhbmRsZXIoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKi9cblx0dGhpc1tjaGFuZ2VUYWJFdmVudEhhbmRsZXJdID0gKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgZWxlbWVudCA9IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KGV2ZW50LCBBVFRSSUJVVEVfUk9MRSwgXCJidXR0b25cIik7XG5cblx0XHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxCdXR0b25FbGVtZW50ICYmIGVsZW1lbnQuZGlzYWJsZWQgIT09IHRydWUpIHtcblx0XHRcdHNob3cuY2FsbCh0aGlzLCBlbGVtZW50KTtcblx0XHR9XG5cdH07XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG5cdCAqIEBmaXJlcyBtb25zdGVyLXRhYi1yZW1vdmVcblx0ICovXG5cdHRoaXNbcmVtb3ZlVGFiRXZlbnRIYW5kbGVyXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChcblx0XHRcdGV2ZW50LFxuXHRcdFx0QVRUUklCVVRFX1JPTEUsXG5cdFx0XHRcInJlbW92ZS10YWJcIixcblx0XHQpO1xuXG5cdFx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0Y29uc3QgYnV0dG9uID0gZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoXG5cdFx0XHRcdGV2ZW50LFxuXHRcdFx0XHRBVFRSSUJVVEVfUk9MRSxcblx0XHRcdFx0XCJidXR0b25cIixcblx0XHRcdCk7XG5cblx0XHRcdGlmIChidXR0b24gaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudCAmJiBidXR0b24uZGlzYWJsZWQgIT09IHRydWUpIHtcblx0XHRcdFx0Y29uc3QgcmVmZXJlbmNlID0gYnV0dG9uLmdldEF0dHJpYnV0ZShcblx0XHRcdFx0XHRgJHtBVFRSSUJVVEVfUFJFRklYfXRhYi1yZWZlcmVuY2VgLFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAocmVmZXJlbmNlKSB7XG5cdFx0XHRcdFx0Y29uc3QgY29udGFpbmVyID0gdGhpcy5xdWVyeVNlbGVjdG9yKGBbaWQ9JHtyZWZlcmVuY2V9XWApO1xuXHRcdFx0XHRcdGlmIChjb250YWluZXIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0XHRcdFx0Y29udGFpbmVyLnJlbW92ZSgpO1xuXHRcdFx0XHRcdFx0aW5pdFRhYkJ1dHRvbnMuY2FsbCh0aGlzKTtcblx0XHRcdFx0XHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItdGFiLXJlbW92ZVwiLCB7XG5cdFx0XHRcdFx0XHRcdHJlZmVyZW5jZSxcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHR0aGlzW25hdkVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaFwiLCB0aGlzW2NoYW5nZVRhYkV2ZW50SGFuZGxlcl0pO1xuXHR0aGlzW25hdkVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzW2NoYW5nZVRhYkV2ZW50SGFuZGxlcl0pO1xuXG5cdHRoaXNbbmF2RWxlbWVudFN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoXCIsIHRoaXNbcmVtb3ZlVGFiRXZlbnRIYW5kbGVyXSk7XG5cdHRoaXNbbmF2RWxlbWVudFN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXNbcmVtb3ZlVGFiRXZlbnRIYW5kbGVyXSk7XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG5cdCAqL1xuXHR0aGlzW2Nsb3NlRXZlbnRIYW5kbGVyXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IHBhdGggPSBldmVudC5jb21wb3NlZFBhdGgoKTtcblxuXHRcdGZvciAoY29uc3QgWywgZWxlbWVudF0gb2YgT2JqZWN0LmVudHJpZXMocGF0aCkpIHtcblx0XHRcdGlmIChlbGVtZW50ID09PSB0aGlzKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRoaWRlUG9wcGVyLmNhbGwodGhpcyk7XG5cdH07XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBvYnNlcnZlZE5vZGVcbiAqL1xuZnVuY3Rpb24gYXR0YWNoVGFiTXV0YXRpb25PYnNlcnZlcihvYnNlcnZlZE5vZGUpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0aWYgKGhhc09iamVjdExpbmsob2JzZXJ2ZWROb2RlLCBtdXRhdGlvbk9ic2VydmVyU3ltYm9sKSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8qKlxuXHQgKiB0aGlzIGNvbnN0cnVjdCBtb25pdG9ycyBhIG5vZGUgd2hldGhlciBpdCBpcyBkaXNhYmxlZCBvciBtb2RpZmllZFxuXHQgKiBAdHlwZSB7TXV0YXRpb25PYnNlcnZlcn1cblx0ICovXG5cdGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKG11dGF0aW9ucykge1xuXHRcdGlmIChpc0FycmF5KG11dGF0aW9ucykpIHtcblx0XHRcdGNvbnN0IG11dGF0aW9uID0gbXV0YXRpb25zLnBvcCgpO1xuXHRcdFx0aWYgKG11dGF0aW9uIGluc3RhbmNlb2YgTXV0YXRpb25SZWNvcmQpIHtcblx0XHRcdFx0aW5pdFRhYkJ1dHRvbnMuY2FsbChzZWxmKTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdG9ic2VydmVyLm9ic2VydmUob2JzZXJ2ZWROb2RlLCB7XG5cdFx0Y2hpbGRMaXN0OiBmYWxzZSxcblx0XHRhdHRyaWJ1dGVzOiB0cnVlLFxuXHRcdHN1YnRyZWU6IGZhbHNlLFxuXHRcdGF0dHJpYnV0ZUZpbHRlcjogW1xuXHRcdFx0XCJkaXNhYmxlZFwiLFxuXHRcdFx0QVRUUklCVVRFX0JVVFRPTl9MQUJFTCxcblx0XHRcdGAke0FUVFJJQlVURV9QUkVGSVh9YnV0dG9uLWljb25gLFxuXHRcdF0sXG5cdH0pO1xuXG5cdGFkZFRvT2JqZWN0TGluayhvYnNlcnZlZE5vZGUsIG11dGF0aW9uT2JzZXJ2ZXJTeW1ib2wsIG9ic2VydmVyKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7U2VsZWN0fVxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqL1xuZnVuY3Rpb24gaW5pdENvbnRyb2xSZWZlcmVuY2VzKCkge1xuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHR0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09Y29udHJvbF1gLFxuXHQpO1xuXHR0aGlzW25hdkVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YG5hdlske0FUVFJJQlVURV9ST0xFfT1uYXZdYCxcblx0KTtcblx0dGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09cG9wcGVyXWAsXG5cdCk7XG5cdHRoaXNbcG9wcGVyTmF2RWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PXBvcHBlci1uYXZdYCxcblx0KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7UHJvbWlzZTx1bmtub3duPn1cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKlxuICovXG5mdW5jdGlvbiBpbml0VGFiQnV0dG9ucygpIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0bGV0IGFjdGl2ZVJlZmVyZW5jZTtcblxuXHRjb25zdCBkaW1lbnNpb25zQ2FsY3VsYXRlZCA9IHRoaXNbZGltZW5zaW9uc1N5bWJvbF0uZ2V0VmlhKFxuXHRcdFwiZGF0YS5jYWxjdWxhdGVkXCIsXG5cdFx0ZmFsc2UsXG5cdCk7XG5cblx0Y29uc3QgYnV0dG9ucyA9IFtdO1xuXHRjb25zdCBub2RlcyA9IGdldFNsb3R0ZWRFbGVtZW50cy5jYWxsKHRoaXMsIHVuZGVmaW5lZCwgbnVsbCk7IC8vIG51bGwgXHUyMUE2IG9ubHkgdW5uYW1lZCBzbG90c1xuXG5cdGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuXHRcdGlmICghKG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIGNvbnRpbnVlO1xuXHRcdGxldCBsYWJlbCA9IGdldEJ1dHRvbkxhYmVsLmNhbGwodGhpcywgbm9kZSk7XG5cblx0XHRsZXQgcmVmZXJlbmNlO1xuXHRcdGlmIChub2RlLmhhc0F0dHJpYnV0ZShcImlkXCIpKSB7XG5cdFx0XHRyZWZlcmVuY2UgPSBub2RlLmdldEF0dHJpYnV0ZShcImlkXCIpO1xuXHRcdH1cblxuXHRcdGxldCBkaXNhYmxlZDtcblx0XHRpZiAobm9kZS5oYXNBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKSB8fCBub2RlLmRpc2FibGVkID09PSB0cnVlKSB7XG5cdFx0XHRkaXNhYmxlZCA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKCFyZWZlcmVuY2UpIHtcblx0XHRcdHJlZmVyZW5jZSA9IG5ldyBJRChcInRhYlwiKS50b1N0cmluZygpO1xuXHRcdFx0bm9kZS5zZXRBdHRyaWJ1dGUoXCJpZFwiLCByZWZlcmVuY2UpO1xuXHRcdH1cblxuXHRcdGlmIChub2RlLmhhc0F0dHJpYnV0ZShgJHtBVFRSSUJVVEVfUFJFRklYfWJ1dHRvbi1pY29uYCkpIHtcblx0XHRcdGxhYmVsID0gYDxzcGFuIHBhcnQ9XCJsYWJlbFwiPiR7bGFiZWx9PC9zcGFuPjxpbWcgcGFydD1cImljb25cIiBzcmM9XCIke25vZGUuZ2V0QXR0cmlidXRlKFxuXHRcdFx0XHRgJHtBVFRSSUJVVEVfUFJFRklYfWJ1dHRvbi1pY29uYCxcblx0XHRcdCl9XCI+YDtcblx0XHR9XG5cblx0XHRsZXQgcmVtb3ZlID0gZmFsc2U7XG5cdFx0aWYgKG5vZGUuaGFzQXR0cmlidXRlKGAke0FUVFJJQlVURV9QUkVGSVh9cmVtb3ZhYmxlYCkpIHtcblx0XHRcdHJlbW92ZSA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKG5vZGUubWF0Y2hlcyhcIi5hY3RpdmVcIikgPT09IHRydWUgJiYgZGlzYWJsZWQgIT09IHRydWUpIHtcblx0XHRcdG5vZGUuY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKTtcblx0XHRcdGFjdGl2ZVJlZmVyZW5jZSA9IHJlZmVyZW5jZTtcblx0XHR9XG5cblx0XHRjb25zdCBzdGF0ZSA9IFwiXCI7XG5cdFx0Y29uc3QgY2xhc3NlcyA9IGRpbWVuc2lvbnNDYWxjdWxhdGVkID8gXCJcIiA6IFwiaW52aXNpYmxlXCI7XG5cblx0XHRidXR0b25zLnB1c2goe1xuXHRcdFx0cmVmZXJlbmNlLFxuXHRcdFx0bGFiZWwsXG5cdFx0XHRzdGF0ZSxcblx0XHRcdGNsYXNzOiBjbGFzc2VzLFxuXHRcdFx0ZGlzYWJsZWQsXG5cdFx0XHRyZW1vdmUsXG5cdFx0fSk7XG5cblx0XHRhdHRhY2hUYWJNdXRhdGlvbk9ic2VydmVyLmNhbGwodGhpcywgbm9kZSk7XG5cdH1cblxuXHR0aGlzLnNldE9wdGlvbihcImJ1dHRvbnMuc3RhbmRhcmRcIiwgY2xvbmUoYnV0dG9ucykpO1xuXHR0aGlzLnNldE9wdGlvbihcImJ1dHRvbnMucG9wcGVyXCIsIFtdKTtcblx0dGhpcy5zZXRPcHRpb24oXCJtYXJrZXJcIiwgcmFuZG9tKCkpO1xuXG5cdHJldHVybiBhZGp1c3RCdXR0b25WaXNpYmlsaXR5LmNhbGwodGhpcykudGhlbigoKSA9PiB7XG5cdFx0aWYgKGFjdGl2ZVJlZmVyZW5jZSkge1xuXHRcdFx0cmV0dXJuIG5ldyBQcm9jZXNzaW5nKCgpID0+IHtcblx0XHRcdFx0Y29uc3QgYnV0dG9uID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XHRcdFx0YFske0FUVFJJQlVURV9QUkVGSVh9dGFiLXJlZmVyZW5jZT1cIiR7YWN0aXZlUmVmZXJlbmNlfVwiXWAsXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmIChidXR0b24gaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudCAmJiBidXR0b24uZGlzYWJsZWQgIT09IHRydWUpIHtcblx0XHRcdFx0XHRzaG93LmNhbGwodGhpcywgYnV0dG9uKTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdFx0LnJ1bih1bmRlZmluZWQpXG5cdFx0XHRcdC50aGVuKCgpID0+IHt9KVxuXHRcdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBjaGVja0FuZFJlYXJyYW5nZUJ1dHRvbnMoKSB7XG5cdGlmICh0aGlzW2RpbWVuc2lvbnNTeW1ib2xdLmdldFZpYShcImRhdGEuY2FsY3VsYXRlZFwiLCBmYWxzZSkgIT09IHRydWUpIHtcblx0XHRjYWxjdWxhdGVOYXZpZ2F0aW9uQnV0dG9uc0RpbWVuc2lvbnMuY2FsbCh0aGlzKTtcblx0fVxuXG5cdHJlYXJyYW5nZUJ1dHRvbnMuY2FsbCh0aGlzKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7UHJvbWlzZTx1bmtub3duPn1cbiAqL1xuZnVuY3Rpb24gYWRqdXN0QnV0dG9uVmlzaWJpbGl0eSgpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0Y29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbiAobXV0YXRpb25zKSB7XG5cdFx0XHRjb25zdCBkZWZDb3VudCA9IHNlbGYuZ2V0T3B0aW9uKFwiYnV0dG9ucy5zdGFuZGFyZFwiKS5sZW5ndGg7XG5cdFx0XHRjb25zdCBkb21Db3VudCA9IHNlbGZbbmF2RWxlbWVudFN5bWJvbF0ucXVlcnlTZWxlY3RvckFsbChcblx0XHRcdFx0J2J1dHRvbltkYXRhLW1vbnN0ZXItcm9sZT1cImJ1dHRvblwiXScsXG5cdFx0XHQpLmxlbmd0aDtcblxuXHRcdFx0Ly8gaW4gZHJhd2luZ1xuXHRcdFx0aWYgKGRlZkNvdW50ICE9PSBkb21Db3VudCkgcmV0dXJuO1xuXG5cdFx0XHRvYnNlcnZlci5kaXNjb25uZWN0KCk7XG5cblx0XHRcdGNoZWNrQW5kUmVhcnJhbmdlQnV0dG9ucy5jYWxsKHNlbGYpO1xuXG5cdFx0XHRyZXNvbHZlKCk7XG5cdFx0fSk7XG5cblx0XHRvYnNlcnZlci5vYnNlcnZlKHNlbGZbbmF2RWxlbWVudFN5bWJvbF0sIHtcblx0XHRcdGF0dHJpYnV0ZXM6IHRydWUsXG5cdFx0fSk7XG5cdH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZnVuY3Rpb24gZ2V0RGltVmFsdWUodmFsdWUpIHtcblx0aWYgKFt1bmRlZmluZWQsIG51bGxdLmluZGV4T2YodmFsdWUpICE9PSAtMSkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0Y29uc3QgdmFsdWVBc0ludCA9IHBhcnNlSW50KHZhbHVlLCAxMCk7XG5cblx0aWYgKGlzTmFOKHZhbHVlQXNJbnQpKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRyZXR1cm4gdmFsdWVBc0ludDtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5mdW5jdGlvbiBjYWxjQm94V2lkdGgobm9kZSkge1xuXHRjb25zdCBkaW0gPSBnZXRHbG9iYWwoXCJ3aW5kb3dcIikuZ2V0Q29tcHV0ZWRTdHlsZShub2RlKTtcblx0Y29uc3QgYm91bmRpbmcgPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG5cdHJldHVybiAoXG5cdFx0Z2V0RGltVmFsdWUoZGltW1wiYm9yZGVyLWxlZnQtd2lkdGhcIl0pICtcblx0XHRnZXREaW1WYWx1ZShkaW1bXCJwYWRkaW5nLWxlZnRcIl0pICtcblx0XHRnZXREaW1WYWx1ZShkaW1bXCJtYXJnaW4tbGVmdFwiXSkgK1xuXHRcdGdldERpbVZhbHVlKGJvdW5kaW5nW1wid2lkdGhcIl0pICtcblx0XHRnZXREaW1WYWx1ZShkaW1bXCJib3JkZXItcmlnaHQtd2lkdGhcIl0pICtcblx0XHRnZXREaW1WYWx1ZShkaW1bXCJtYXJnaW4tcmlnaHRcIl0pICtcblx0XHRnZXREaW1WYWx1ZShkaW1bXCJwYWRkaW5nLWxlZnRcIl0pXG5cdCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gcmVhcnJhbmdlQnV0dG9ucygpIHtcblx0Y29uc3Qgc3RhbmRhcmRCdXR0b25zID0gW107XG5cdGNvbnN0IHBvcHBlckJ1dHRvbnMgPSBbXTtcblxuXHRsZXQgc3VtID0gMDtcblx0Y29uc3Qgc3BhY2UgPSB0aGlzW2RpbWVuc2lvbnNTeW1ib2xdLmdldFZpYShcImRhdGEuc3BhY2VcIik7XG5cblx0Y29uc3QgYnV0dG9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwiYnV0dG9ucy5zdGFuZGFyZFwiKTtcblx0Zm9yIChjb25zdCBbLCBidXR0b25dIG9mIGJ1dHRvbnMuZW50cmllcygpKSB7XG5cdFx0Y29uc3QgcmVmID0gYnV0dG9uPy5yZWZlcmVuY2U7XG5cblx0XHRzdW0gKz0gdGhpc1tkaW1lbnNpb25zU3ltYm9sXS5nZXRWaWEoYGRhdGEuYnV0dG9uLiR7cmVmfWApO1xuXG5cdFx0aWYgKHN1bSA+IHNwYWNlKSB7XG5cdFx0XHRwb3BwZXJCdXR0b25zLnB1c2goY2xvbmUoYnV0dG9uKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHN0YW5kYXJkQnV0dG9ucy5wdXNoKGNsb25lKGJ1dHRvbikpO1xuXHRcdH1cblx0fVxuXG5cdHRoaXMuc2V0T3B0aW9uKFwiYnV0dG9ucy5zdGFuZGFyZFwiLCBzdGFuZGFyZEJ1dHRvbnMpO1xuXHR0aGlzLnNldE9wdGlvbihcImJ1dHRvbnMucG9wcGVyXCIsIHBvcHBlckJ1dHRvbnMpO1xuXG5cdGlmICh0aGlzW3N3aXRjaEVsZW1lbnRTeW1ib2xdKSB7XG5cdFx0aWYgKHBvcHBlckJ1dHRvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0dGhpc1tzd2l0Y2hFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QucmVtb3ZlKFwiaGlkZGVuXCIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzW3N3aXRjaEVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5hZGQoXCJoaWRkZW5cIik7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gY2FsY3VsYXRlTmF2aWdhdGlvbkJ1dHRvbnNEaW1lbnNpb25zKCkge1xuXHRjb25zdCB3aWR0aCA9IHRoaXNbbmF2RWxlbWVudFN5bWJvbF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG5cblx0bGV0IHN0YXJ0RW5kV2lkdGggPSAwO1xuXG5cdGdldFNsb3R0ZWRFbGVtZW50cy5jYWxsKHRoaXMsIHVuZGVmaW5lZCwgXCJzdGFydFwiKS5mb3JFYWNoKChub2RlKSA9PiB7XG5cdFx0c3RhcnRFbmRXaWR0aCArPSBjYWxjQm94V2lkdGguY2FsbCh0aGlzLCBub2RlKTtcblx0fSk7XG5cblx0Z2V0U2xvdHRlZEVsZW1lbnRzLmNhbGwodGhpcywgdW5kZWZpbmVkLCBcImVuZFwiKS5mb3JFYWNoKChub2RlKSA9PiB7XG5cdFx0c3RhcnRFbmRXaWR0aCArPSBjYWxjQm94V2lkdGguY2FsbCh0aGlzLCBub2RlKTtcblx0fSk7XG5cblx0dGhpc1tkaW1lbnNpb25zU3ltYm9sXS5zZXRWaWEoXCJkYXRhLnNwYWNlXCIsIHdpZHRoIC0gc3RhcnRFbmRXaWR0aCAtIDIpO1xuXHR0aGlzW2RpbWVuc2lvbnNTeW1ib2xdLnNldFZpYShcImRhdGEudmlzaWJsZVwiLCAhKHdpZHRoID09PSAwKSk7XG5cblx0Y29uc3QgYnV0dG9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwiYnV0dG9ucy5zdGFuZGFyZFwiKS5jb25jYXQoXG5cdFx0dGhpcy5nZXRPcHRpb24oXCJidXR0b25zLnBvcHBlclwiKSxcblx0KTtcblxuXHRmb3IgKGNvbnN0IFtpLCBidXR0b25dIG9mIGJ1dHRvbnMuZW50cmllcygpKSB7XG5cdFx0Y29uc3QgcmVmID0gYnV0dG9uPy5yZWZlcmVuY2U7XG5cdFx0Y29uc3QgZWxlbWVudCA9IHRoaXNbbmF2RWxlbWVudFN5bWJvbF0ucXVlcnlTZWxlY3Rvcihcblx0XHRcdGA6c2NvcGUgPiBbJHtBVFRSSUJVVEVfUFJFRklYfXRhYi1yZWZlcmVuY2U9XCIke3JlZn1cIl1gLFxuXHRcdCk7XG5cdFx0aWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxCdXR0b25FbGVtZW50KSkgY29udGludWU7XG5cblx0XHR0aGlzW2RpbWVuc2lvbnNTeW1ib2xdLnNldFZpYShcblx0XHRcdGBkYXRhLmJ1dHRvbi4ke3JlZn1gLFxuXHRcdFx0Y2FsY0JveFdpZHRoLmNhbGwodGhpcywgZWxlbWVudCksXG5cdFx0KTtcblx0XHRidXR0b25bXCJjbGFzc1wiXSA9IG5ldyBUb2tlbkxpc3QoYnV0dG9uW1wiY2xhc3NcIl0pXG5cdFx0XHQucmVtb3ZlKFwiaW52aXNpYmxlXCIpXG5cdFx0XHQudG9TdHJpbmcoKTtcblx0fVxuXG5cdGNvbnN0IHNsb3RzID0gdGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0ucXVlcnlTZWxlY3RvckFsbChcblx0XHRgbmF2WyR7QVRUUklCVVRFX1BSRUZJWH1yb2xlPW5hdl0gPiBzbG90LmludmlzaWJsZSwgc2xvdFske0FUVFJJQlVURV9QUkVGSVh9cm9sZT1zbG90XS5pbnZpc2libGVgLFxuXHQpO1xuXHRmb3IgKGNvbnN0IFssIHNsb3RdIG9mIHNsb3RzLmVudHJpZXMoKSkge1xuXHRcdHNsb3QuY2xhc3NMaXN0LnJlbW92ZShcImludmlzaWJsZVwiKTtcblx0fVxuXG5cdHRoaXNbZGltZW5zaW9uc1N5bWJvbF0uc2V0VmlhKFwiZGF0YS5jYWxjdWxhdGVkXCIsIHRydWUpO1xuXHR0aGlzLnNldE9wdGlvbihcImJ1dHRvbnMuc3RhbmRhcmRcIiwgY2xvbmUoYnV0dG9ucykpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBub2RlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldEJ1dHRvbkxhYmVsKG5vZGUpIHtcblx0bGV0IGxhYmVsO1xuXHRsZXQgc2V0TGFiZWwgPSBmYWxzZTtcblx0aWYgKG5vZGUuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9CVVRUT05fTEFCRUwpKSB7XG5cdFx0bGFiZWwgPSBub2RlLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfQlVUVE9OX0xBQkVMKTtcblx0fSBlbHNlIHtcblx0XHRsYWJlbCA9IG5vZGUuaW5uZXJUZXh0O1xuXHRcdHNldExhYmVsID0gdHJ1ZTtcblx0fVxuXG5cdGlmICghaXNTdHJpbmcobGFiZWwpKSB7XG5cdFx0bGFiZWwgPSBcIlwiO1xuXHR9XG5cblx0bGFiZWwgPSBsYWJlbC50cmltKCk7XG5cblx0aWYgKGxhYmVsID09PSBcIlwiKSB7XG5cdFx0bGFiZWwgPSB0aGlzLmdldE9wdGlvbihcImxhYmVscy5uZXctdGFiLWxhYmVsXCIsIFwiTmV3IFRhYlwiKTtcblx0fVxuXG5cdGlmIChsYWJlbC5sZW5ndGggPiAxMDApIHtcblx0XHRsYWJlbCA9IGAke2xhYmVsLnN1YnN0cmluZygwLCA5OSl9XHUyMDI2YDtcblx0fVxuXG5cdGlmIChzZXRMYWJlbCA9PT0gdHJ1ZSkge1xuXHRcdG5vZGUuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9CVVRUT05fTEFCRUwsIGxhYmVsKTtcblx0fVxuXG5cdHJldHVybiBsYWJlbDtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuICAgICAgICA8dGVtcGxhdGUgaWQ9XCJidXR0b25zXCI+XG4gICAgICAgICAgICA8YnV0dG9uIHBhcnQ9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzIHBhdGg6Y2xhc3Nlcy5idXR0b24sXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1zdGF0ZSBwYXRoOmJ1dHRvbnMuc3RhdGUsXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkIHBhdGg6YnV0dG9ucy5kaXNhYmxlZCB8IGlmOnRydWUsICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXRhYi1yZWZlcmVuY2UgcGF0aDpidXR0b25zLnJlZmVyZW5jZVwiPjxzcGFuXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpidXR0b25zLmxhYmVsXCI+PC9zcGFuPjxzcGFuIHBhcnQ9XCJyZW1vdmUtdGFiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2xhc3MgcGF0aDpidXR0b25zLnJlbW92ZSB8ID86cmVtb3ZlLXRhYjpoaWRkZW4gXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwicmVtb3ZlLXRhYlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCI+PC9zcGFuPjwvYnV0dG9uPlxuICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udHJvbFwiIHBhcnQ9XCJjb250cm9sXCI+XG4gICAgICAgICAgICA8bmF2IGRhdGEtbW9uc3Rlci1yb2xlPVwibmF2XCIgcGFydD1cIm5hdlwiXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiZGF0YS1tb25zdGVyLW1hcmtlciBwYXRoOm1hcmtlciwgY2xhc3MgcGF0aDpjbGFzc2VzLm5hdmlnYXRpb25cIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItaW5zZXJ0PVwiYnV0dG9ucyBwYXRoOmJ1dHRvbnMuc3RhbmRhcmRcIj5cbiAgICAgICAgICAgICAgICA8c2xvdCBuYW1lPVwic3RhcnRcIiBjbGFzcz1cImludmlzaWJsZVwiPjwvc2xvdD5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwicG9wcGVyXCIgcGFydD1cInBvcHBlclwiIHRhYmluZGV4PVwiLTFcIlxuXHRcdFx0XHRcdCBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNsYXNzIHBhdGg6Y2xhc3Nlcy5wb3BwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLXBvcHBlci1hcnJvdz48L2Rpdj5cblxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgcGFydD1cInBvcHBlci1uYXZcIiBkYXRhLW1vbnN0ZXItcm9sZT1cInBvcHBlci1uYXZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1pbnNlcnQ9XCJidXR0b25zIHBhdGg6YnV0dG9ucy5wb3BwZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8c2xvdCBuYW1lPVwicG9wcGVyXCIgY2xhc3M9XCJpbnZpc2libGVcIj48L3Nsb3Q+XG4gICAgICAgICAgICAgICAgPHNsb3QgbmFtZT1cImVuZFwiIGNsYXNzPVwiaW52aXNpYmxlXCI+PC9zbG90PlxuICAgICAgICAgICAgPC9uYXY+XG4gICAgICAgICAgICA8c2xvdCBkYXRhLW1vbnN0ZXItcm9sZT1cInNsb3RcIiBjbGFzcz1cImludmlzaWJsZVwiPjwvc2xvdD5cbiAgICAgICAgPC9kaXY+YDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KFRhYnMpO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywgMjAyNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IE1lc3NhZ2VTdHlsZVNoZWV0IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBNZXNzYWdlU3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG5cdE1lc3NhZ2VTdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIG1lc3NhZ2UgeyBcbjp3aGVyZShodG1sKXtsaW5lLWhlaWdodDoxLjE1Oy13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlOy1tb3otdGV4dC1zaXplLWFkanVzdDoxMDAlO3RleHQtc2l6ZS1hZGp1c3Q6MTAwJX06d2hlcmUoaDEpe2ZvbnQtc2l6ZToyZW07bWFyZ2luLWJsb2NrLWVuZDouNjdlbTttYXJnaW4tYmxvY2stc3RhcnQ6LjY3ZW19OndoZXJlKGRsLG9sLHVsKSA6d2hlcmUoZGwsb2wsdWwpe21hcmdpbi1ibG9jay1lbmQ6MDttYXJnaW4tYmxvY2stc3RhcnQ6MH06d2hlcmUoaHIpe2JveC1zaXppbmc6Y29udGVudC1ib3g7Y29sb3I6aW5oZXJpdDtoZWlnaHQ6MH06d2hlcmUoYWJiclt0aXRsZV0pe3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7LXdlYmtpdC10ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZH06d2hlcmUoYixzdHJvbmcpe2ZvbnQtd2VpZ2h0OmJvbGRlcn06d2hlcmUoY29kZSxrYmQscHJlLHNhbXApe2ZvbnQtZmFtaWx5Om1vbm9zcGFjZSxtb25vc3BhY2U7Zm9udC1zaXplOjFlbX06d2hlcmUoc21hbGwpe2ZvbnQtc2l6ZTo4MCV9OndoZXJlKHRhYmxlKXtib3JkZXItY29sb3I6Y3VycmVudENvbG9yO3RleHQtaW5kZW50OjB9OndoZXJlKGJ1dHRvbixpbnB1dCxzZWxlY3Qpe21hcmdpbjowfTp3aGVyZShidXR0b24pe3RleHQtdHJhbnNmb3JtOm5vbmV9OndoZXJlKGJ1dHRvbixpbnB1dDppcyhbdHlwZT1idXR0b24gaV0sW3R5cGU9cmVzZXQgaV0sW3R5cGU9c3VibWl0IGldKSl7LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbn06d2hlcmUocHJvZ3Jlc3Mpe3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfTp3aGVyZShzZWxlY3Qpe3RleHQtdHJhbnNmb3JtOm5vbmV9OndoZXJlKHRleHRhcmVhKXttYXJnaW46MH06d2hlcmUoaW5wdXRbdHlwZT1zZWFyY2ggaV0pey13ZWJraXQtYXBwZWFyYW5jZTp0ZXh0ZmllbGQ7b3V0bGluZS1vZmZzZXQ6LTJweH06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfTo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjppbmhlcml0O29wYWNpdHk6LjU0fTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b247Zm9udDppbmhlcml0fTp3aGVyZShidXR0b24saW5wdXQ6aXMoW3R5cGU9YnV0dG9uIGldLFt0eXBlPWNvbG9yIGldLFt0eXBlPXJlc2V0IGldLFt0eXBlPXN1Ym1pdCBpXSkpOjotbW96LWZvY3VzLWlubmVye2JvcmRlci1zdHlsZTpub25lO3BhZGRpbmc6MH06d2hlcmUoYnV0dG9uLGlucHV0OmlzKFt0eXBlPWJ1dHRvbiBpXSxbdHlwZT1jb2xvciBpXSxbdHlwZT1yZXNldCBpXSxbdHlwZT1zdWJtaXQgaV0pKTo6LW1vei1mb2N1c3Jpbmd7b3V0bGluZToxcHggZG90dGVkIEJ1dHRvblRleHR9OndoZXJlKDotbW96LXVpLWludmFsaWQpe2JveC1zaGFkb3c6bm9uZX06d2hlcmUoZGlhbG9nKXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOnNvbGlkO2NvbG9yOiMwMDA7aGVpZ2h0Oi1tb3otZml0LWNvbnRlbnQ7aGVpZ2h0OmZpdC1jb250ZW50O2xlZnQ6MDttYXJnaW46YXV0bztwYWRkaW5nOjFlbTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3dpZHRoOi1tb3otZml0LWNvbnRlbnQ7d2lkdGg6Zml0LWNvbnRlbnR9OndoZXJlKGRpYWxvZzpub3QoW29wZW5dKSl7ZGlzcGxheTpub25lfTp3aGVyZShzdW1tYXJ5KXtkaXNwbGF5Omxpc3QtaXRlbX1odG1se2hlaWdodDoxMDAlfWJvZHksaHRtbHttaW4taGVpZ2h0OmNhbGMoMTAwdmggLSA0MHB4KX1ib2R5e2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXJnaW46MDtwYWRkaW5nOjA7d29yZC1icmVhazpicmVhay13b3JkfS5ibG9ja3tkaXNwbGF5OmJsb2NrfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uZ3JpZHtkaXNwbGF5OmdyaWR9LmlubGluZS1ncmlke2Rpc3BsYXk6aW5saW5lLWdyaWR9LmZsZXh7ZGlzcGxheTpmbGV4fS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS5oaWRkZW4sLmhpZGUsLm5vbmV7ZGlzcGxheTpub25lfS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMiwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0zLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItMHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXdpZHRoOjB9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMSwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0zLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZ3JheS0xOiNmNmY2ZjY7LS1tb25zdGVyLWNvbG9yLWdyYXktMjojZTJlMmUyOy0tbW9uc3Rlci1jb2xvci1ncmF5LTM6IzhiOGI4YjstLW1vbnN0ZXItY29sb3ItZ3JheS00OiM2ZjZmNmY7LS1tb25zdGVyLWNvbG9yLWdyYXktNTojM2UzZTNlOy0tbW9uc3Rlci1jb2xvci1ncmF5LTY6IzIyMjstLW1vbnN0ZXItY29sb3Itcm9zZS0xOiNmZmY3Zjk7LS1tb25zdGVyLWNvbG9yLXJvc2UtMjojZmZkY2U1Oy0tbW9uc3Rlci1jb2xvci1yb3NlLTM6I2ZmM2I4ZDstLW1vbnN0ZXItY29sb3Itcm9zZS00OiNkYjAwNzI7LS1tb25zdGVyLWNvbG9yLXJvc2UtNTojODAwMDQwOy0tbW9uc3Rlci1jb2xvci1yb3NlLTY6IzRjMDAyMzstLW1vbnN0ZXItY29sb3ItcmFzcGJlcnJ5LTE6I2ZmZjhmODstLW1vbnN0ZXItY29sb3ItcmFzcGJlcnJ5LTI6I2ZmZGRkZjstLW1vbnN0ZXItY29sb3ItcmFzcGJlcnJ5LTM6I2ZmNDI2YzstLW1vbnN0ZXItY29sb3ItcmFzcGJlcnJ5LTQ6I2RlMDA1MTstLW1vbnN0ZXItY29sb3ItcmFzcGJlcnJ5LTU6IzgyMDAyYzstLW1vbnN0ZXItY29sb3ItcmFzcGJlcnJ5LTY6IzUxMDAxODstLW1vbnN0ZXItY29sb3ItcmVkLTE6I2ZmZjhmNjstLW1vbnN0ZXItY29sb3ItcmVkLTI6I2ZmZGRkODstLW1vbnN0ZXItY29sb3ItcmVkLTM6I2ZmNDY0NzstLW1vbnN0ZXItY29sb3ItcmVkLTQ6I2UwMDAyYjstLW1vbnN0ZXItY29sb3ItcmVkLTU6IzgzMDAxNDstLW1vbnN0ZXItY29sb3ItcmVkLTY6IzUzMDAwMzstLW1vbnN0ZXItY29sb3Itb3JhbmdlLTE6I2ZmZjhmNTstLW1vbnN0ZXItY29sb3Itb3JhbmdlLTI6I2ZmZGVkMTstLW1vbnN0ZXItY29sb3Itb3JhbmdlLTM6I2ZkNGQwMDstLW1vbnN0ZXItY29sb3Itb3JhbmdlLTQ6I2NkM2MwMDstLW1vbnN0ZXItY29sb3Itb3JhbmdlLTU6Izc1MjEwMDstLW1vbnN0ZXItY29sb3Itb3JhbmdlLTY6IzQwMTYwMDstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMTojZmZmOGYzOy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0yOiNmZmRmYzY7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTM6I2Q1NzMwMDstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tNDojYWM1YzAwOy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi01OiM2MzMzMDA7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTY6IzM3MWQwMDstLW1vbnN0ZXItY29sb3ItYW1iZXItMTojZmZmOGVmOy0tbW9uc3Rlci1jb2xvci1hbWJlci0yOiNmZmUwYjI7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTM6I2I5ODMwMDstLW1vbnN0ZXItY29sb3ItYW1iZXItNDojOTI2NzAwOy0tbW9uc3Rlci1jb2xvci1hbWJlci01OiM1MjM4MDA7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTY6IzMwMjEwMDstLW1vbnN0ZXItY29sb3IteWVsbG93LTE6I2ZmZjllNTstLW1vbnN0ZXItY29sb3IteWVsbG93LTI6I2ZmZTUzZTstLW1vbnN0ZXItY29sb3IteWVsbG93LTM6IzljOGIwMDstLW1vbnN0ZXItY29sb3IteWVsbG93LTQ6IzdkNmYwMDstLW1vbnN0ZXItY29sb3IteWVsbG93LTU6IzQ2M2QwMDstLW1vbnN0ZXItY29sb3IteWVsbG93LTY6IzI5MjMwMDstLW1vbnN0ZXItY29sb3ItbGltZS0xOiNmN2ZmYWM7LS1tb25zdGVyLWNvbG9yLWxpbWUtMjojZDVmMjAwOy0tbW9uc3Rlci1jb2xvci1saW1lLTM6IzgxOTMwMDstLW1vbnN0ZXItY29sb3ItbGltZS00OiM2Nzc2MDA7LS1tb25zdGVyLWNvbG9yLWxpbWUtNTojMzk0MTAwOy0tbW9uc3Rlci1jb2xvci1saW1lLTY6IzIyMjYwMDstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS0xOiNlNWZmYzM7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtMjojOThmYjAwOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTM6IzVjOWIwMDstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS00OiM0OTdjMDA7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtNTojMjY0NTAwOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTY6IzE4MjYwMDstLW1vbnN0ZXItY29sb3ItZ3JlZW4tMTojZTBmZmQ5Oy0tbW9uc3Rlci1jb2xvci1ncmVlbi0yOiM3MmZmNmM7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTM6IzAwYTIxZjstLW1vbnN0ZXItY29sb3ItZ3JlZW4tNDojMDA4MjE3Oy0tbW9uc3Rlci1jb2xvci1ncmVlbi01OiMwMDQ5MDg7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTY6IzA2MjgwMDstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC0xOiNkY2ZmZTY7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtMjojNWRmZmEyOy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTM6IzAwYTA1YTstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC00OiMwMDgxNDc7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtNTojMDA0ODI1Oy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTY6IzAwMjgxMjstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS0xOiNkYWZmZWY7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtMjojNDJmZmM2Oy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTM6IzAwOWY3ODstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS00OiMwMDdmNWY7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtNTojMDA0NzM0Oy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTY6IzAwMjgxYjstLW1vbnN0ZXItY29sb3ItdGVhbC0xOiNkN2ZmZjc7LS1tb25zdGVyLWNvbG9yLXRlYWwtMjojMDBmZmU0Oy0tbW9uc3Rlci1jb2xvci10ZWFsLTM6IzAwOWU4YzstLW1vbnN0ZXItY29sb3ItdGVhbC00OiMwMDdjNmU7LS1tb25zdGVyLWNvbG9yLXRlYWwtNTojMDA0NDNjOy0tbW9uc3Rlci1jb2xvci10ZWFsLTY6IzAwMjcyMjstLW1vbnN0ZXItY29sb3ItY3lhbi0xOiNjNGZmZmU7LS1tb25zdGVyLWNvbG9yLWN5YW4tMjojMDBmYWZiOy0tbW9uc3Rlci1jb2xvci1jeWFuLTM6IzAwOTk5YTstLW1vbnN0ZXItY29sb3ItY3lhbi00OiMwMDdhN2I7LS1tb25zdGVyLWNvbG9yLWN5YW4tNTojMDA0MzQ0Oy0tbW9uc3Rlci1jb2xvci1jeWFuLTY6IzAwMjUyNTstLW1vbnN0ZXItY29sb3ItcG93ZGVyLTE6I2RhZmFmZjstLW1vbnN0ZXItY29sb3ItcG93ZGVyLTI6IzhkZjBmZjstLW1vbnN0ZXItY29sb3ItcG93ZGVyLTM6IzAwOThhOTstLW1vbnN0ZXItY29sb3ItcG93ZGVyLTQ6IzAwNzk4NzstLW1vbnN0ZXItY29sb3ItcG93ZGVyLTU6IzAwNDA0ODstLW1vbnN0ZXItY29sb3ItcG93ZGVyLTY6IzAwMjIyNzstLW1vbnN0ZXItY29sb3Itc2t5LTE6I2UzZjdmZjstLW1vbnN0ZXItY29sb3Itc2t5LTI6I2FlZTlmZjstLW1vbnN0ZXItY29sb3Itc2t5LTM6IzAwOTRiNDstLW1vbnN0ZXItY29sb3Itc2t5LTQ6IzAwNzU5MDstLW1vbnN0ZXItY29sb3Itc2t5LTU6IzAwNDA0ZjstLW1vbnN0ZXItY29sb3Itc2t5LTY6IzAwMWYyODstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tMTojZThmNmZmOy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi0yOiNiOWUzZmY7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTM6IzAwOTJjNTstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tNDojMDA3NDlkOy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi01OiMwMDNjNTQ7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTY6IzAwMWQyYTstLW1vbnN0ZXItY29sb3ItYXp1cmUtMTojZThmMmZmOy0tbW9uc3Rlci1jb2xvci1henVyZS0yOiNjNmUwZmY7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTM6IzAwOGZkYjstLW1vbnN0ZXItY29sb3ItYXp1cmUtNDojMDA3MWFmOy0tbW9uc3Rlci1jb2xvci1henVyZS01OiMwMDNiNWU7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTY6IzAwMWMzMDstLW1vbnN0ZXItY29sb3ItYmx1ZS0xOiNmMGY0ZmY7LS1tb25zdGVyLWNvbG9yLWJsdWUtMjojZDRlMGZmOy0tbW9uc3Rlci1jb2xvci1ibHVlLTM6IzAwODlmYzstLW1vbnN0ZXItY29sb3ItYmx1ZS00OiMwMDZkY2E7LS1tb25zdGVyLWNvbG9yLWJsdWUtNTojMDAzODZkOy0tbW9uc3Rlci1jb2xvci1ibHVlLTY6IzAwMWEzOTstLW1vbnN0ZXItY29sb3ItaW5kaWdvLTE6I2YzZjNmZjstLW1vbnN0ZXItY29sb3ItaW5kaWdvLTI6I2RlZGRmZjstLW1vbnN0ZXItY29sb3ItaW5kaWdvLTM6IzY1N2VmZjstLW1vbnN0ZXItY29sb3ItaW5kaWdvLTQ6IzAwNjFmYzstLW1vbnN0ZXItY29sb3ItaW5kaWdvLTU6IzAwMzI4YTstLW1vbnN0ZXItY29sb3ItaW5kaWdvLTY6IzAwMTY0OTstLW1vbnN0ZXItY29sb3ItdmlvbGV0LTE6I2Y3ZjFmZjstLW1vbnN0ZXItY29sb3ItdmlvbGV0LTI6I2U4ZGFmZjstLW1vbnN0ZXItY29sb3ItdmlvbGV0LTM6IzliNzBmZjstLW1vbnN0ZXItY29sb3ItdmlvbGV0LTQ6Izc5NGFmZjstLW1vbnN0ZXItY29sb3ItdmlvbGV0LTU6IzJkMGZiZjstLW1vbnN0ZXItY29sb3ItdmlvbGV0LTY6IzBiMDA3NDstLW1vbnN0ZXItY29sb3ItcHVycGxlLTE6I2ZkZjRmZjstLW1vbnN0ZXItY29sb3ItcHVycGxlLTI6I2Y3ZDlmZjstLW1vbnN0ZXItY29sb3ItcHVycGxlLTM6I2QxNTBmZjstLW1vbnN0ZXItY29sb3ItcHVycGxlLTQ6I2IwMWZlMzstLW1vbnN0ZXItY29sb3ItcHVycGxlLTU6IzY2MDA4NzstLW1vbnN0ZXItY29sb3ItcHVycGxlLTY6IzNhMDA0ZjstLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xOiNmZmYzZmM7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMjojZmZkN2Y2Oy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTM6I2Y5MTFlMDstLW1vbnN0ZXItY29sb3ItbWFnZW50YS00OiNjYTAwYjY7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNTojNzQwMDY4Oy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTY6IzQ0MDAzYzstLW1vbnN0ZXItY29sb3ItcGluay0xOiNmZmY3ZmI7LS1tb25zdGVyLWNvbG9yLXBpbmstMjojZmZkY2VjOy0tbW9uc3Rlci1jb2xvci1waW5rLTM6I2ZmMmZiMjstLW1vbnN0ZXItY29sb3ItcGluay00OiNkMjAwOGY7LS1tb25zdGVyLWNvbG9yLXBpbmstNTojNzkwMDUxOy0tbW9uc3Rlci1jb2xvci1waW5rLTY6IzRiMDAzMDstLW1vbnN0ZXItZ3JhZGllbnQtdGFuZ2VyaW5lLTE6I2U1Yjg3NTstLW1vbnN0ZXItZ3JhZGllbnQtdGFuZ2VyaW5lLTI6I2Q5YTM2MjstLW1vbnN0ZXItZ3JhZGllbnQtdGFuZ2VyaW5lLTM6I2MwOGE0ZTstLW1vbnN0ZXItZ3JhZGllbnQtdGFuZ2VyaW5lLTQ6I2E3NzEzYjstLW1vbnN0ZXItZ3JhZGllbnQtdGFuZ2VyaW5lLTU6IzhmNWEyODstLW1vbnN0ZXItZ3JhZGllbnQtdGFuZ2VyaW5lLTY6IzM2MDUwNTstLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtMTojZjdmNWVmOy0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC0yOiNlNWUyZDk7LS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTM6I2NiYzZiMzstLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtNDojYTE5ZDhhOy0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC01OiM3YTc1NjY7LS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTY6IzUxNGQzZn0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktZGlzYWJsZWQtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMSl9Lm1vbnN0ZXItdGhlbWUtc2Vjb25kYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci10aGVtZS10ZXJ0aWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLXRoZW1lLWRlc3RydWN0aXZlLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMSl9Lm1vbnN0ZXItdGhlbWUtc3VjY2Vzcy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xKX0ubW9uc3Rlci10aGVtZS13YXJuaW5nLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTEpfS5tb25zdGVyLXRoZW1lLWVycm9yLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMSl9Lm1vbnN0ZXItdGhlbWUtc2VsZWN0aW9uLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX0ubW9uc3Rlci1ib3JkZXItY29sb3ItMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ib3JkZXItMSl9Lm1vbnN0ZXItY29sb3ItbmV1dHJhbC0xe2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1jb2xvci1wcmltYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItY29sb3ItdGVydGlhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTEpfS5tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMSl9Lm1vbnN0ZXItY29sb3Itd2FybmluZy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0xKX0ubW9uc3Rlci1jb2xvci1lcnJvci0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTEpfS5tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTIpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTIpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMil9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0yKX0ubW9uc3Rlci10aGVtZS1lcnJvci0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTIpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMil9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTIpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtMntjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yKX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTIpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMil9Lm1vbnN0ZXItY29sb3ItZXJyb3ItMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0yKX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTIpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS1kaXNhYmxlZC0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zKX0ubW9uc3Rlci10aGVtZS1zZWNvbmRhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLXRoZW1lLXRlcnRpYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItdGhlbWUtZGVzdHJ1Y3RpdmUtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zKX0ubW9uc3Rlci10aGVtZS1zdWNjZXNzLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTMpfS5tb25zdGVyLXRoZW1lLXdhcm5pbmctM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMyl9Lm1vbnN0ZXItdGhlbWUtZXJyb3ItM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0zKX0ubW9uc3Rlci10aGVtZS1zZWxlY3Rpb24tM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTMpfS5tb25zdGVyLWJvcmRlci1jb2xvci0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWJvcmRlci0zKX0ubW9uc3Rlci1jb2xvci1uZXV0cmFsLTN7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWNvbG9yLXByaW1hcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMyl9Lm1vbnN0ZXItY29sb3Itc3VjY2Vzcy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zKX0ubW9uc3Rlci1jb2xvci13YXJuaW5nLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTMpfS5tb25zdGVyLWNvbG9yLWVycm9yLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMyl9Lm1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktZGlzYWJsZWQtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNCl9Lm1vbnN0ZXItdGhlbWUtc2Vjb25kYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci10aGVtZS10ZXJ0aWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLXRoZW1lLWRlc3RydWN0aXZlLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNCl9Lm1vbnN0ZXItdGhlbWUtc3VjY2Vzcy00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00KX0ubW9uc3Rlci10aGVtZS13YXJuaW5nLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQpfS5tb25zdGVyLXRoZW1lLWVycm9yLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItNCl9Lm1vbnN0ZXItdGhlbWUtc2VsZWN0aW9uLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00KX0ubW9uc3Rlci1ib3JkZXItY29sb3ItNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ib3JkZXItNCl9Lm1vbnN0ZXItY29sb3ItbmV1dHJhbC00e2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci1jb2xvci1wcmltYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItY29sb3ItdGVydGlhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQpfS5tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNCl9Lm1vbnN0ZXItY29sb3Itd2FybmluZy00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy00KX0ubW9uc3Rlci1jb2xvci1lcnJvci00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTQpfS5tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNCl9Lm1vbnN0ZXItdGhlbWUtY29udHJvbC1jb250YWluZXItMSwubW9uc3Rlci10aGVtZS1jb250cm9sLXJvdy0xe2JvcmRlcjoxcHggc29saWQgdmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1jb2xvcil9Lm1vbnN0ZXItdGhlbWUtY29udHJvbC1jb250YWluZXItMSwubW9uc3Rlci10aGVtZS1jb250cm9sLWVsZW1lbnQsLm1vbnN0ZXItdGhlbWUtY29udHJvbC1yb3ctMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWNvbG9yKX0ubW9uc3Rlci10aGVtZS1jb250cm9sLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmctY29sb3IpfS5tb25zdGVyLXRoZW1lLWJhY2tncm91bmQtaW5oZXJpdHtiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXQhaW1wb3J0YW50fS5tb25zdGVyLXRoZW1lLW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1vbi1iZy1jb2xvcik7Y29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1vbi1jb2xvcil9Lm1vbnN0ZXItdGhlbWUtb2Zme2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1vZmYtYmctY29sb3IpO2NvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtb2ZmLWNvbG9yKX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17Ym94LXNpemluZzpib3JkZXItYm94O291dGxpbmU6bm9uZX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0uZmxleHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd306aG9zdHtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpibG9ja31bZGF0YS1tb25zdGVyLXJvbGU9bWVzc2FnZV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47cGFkZGluZzo4cHg7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udGVudF17ZmxleC1ncm93OjI7QG1peGlucyBwYXJhZ3JhcGh9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIFtkYXRhLW1vbnN0ZXItcm9sZT1jbG9zZV17Y3Vyc29yOnBvaW50ZXI7aGVpZ2h0OjE2cHg7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LTEwcHg7dG9wOi01cHg7d2lkdGg6MTZweDt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1tb2RhbC1vdmVybGF5KX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gW2RhdGEtbW9uc3Rlci1yb2xlPWNsb3NlXTpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmJsb2NrO2hlaWdodDoxMDAlOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J000LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMEw4IDcuMjkzbDIuNjQ2LTIuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC43MDcgOGwyLjY0NyAyLjY0NmEuNS41IDAgMCAxLS43MDguNzA4TDggOC43MDdsLTIuNjQ2IDIuNjQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4TDcuMjkzIDggNC42NDYgNS4zNTRhLjUuNSAwIDAgMSAwLS43MDgnLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjEwMCV9IFxufWAsXG5cdFx0MCxcblx0KTtcbn0gY2F0Y2ggKGUpIHtcblx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0ZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKSxcblx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdGUgKyBcIlwiLFxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7XG5cdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdEFUVFJJQlVURV9QUkVGSVgsXG5cdEFUVFJJQlVURV9ST0xFLFxufSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRDdXN0b21FbGVtZW50LFxuXHRpbml0TWV0aG9kU3ltYm9sLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50IH0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IE1lc3NhZ2VTdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9tZXNzYWdlLm1qc1wiO1xuXG5leHBvcnQgeyBNZXNzYWdlIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNvbnRyb2xFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiY29udHJvbEVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHJlbW92ZUVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJyZW1vdmVFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCB0aW1lclN5bWJvbCA9IFN5bWJvbChcInRpbWVyXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBtb3VzZWVudGVyRXZlbnRIYW5kbGVyU3ltYm9sID0gU3ltYm9sKFwibW91c2VlbnRlckV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgbW91c2VsZWF2ZUV2ZW50SGFuZGxlclN5bWJvbCA9IFN5bWJvbChcIm1vdXNlbGVhdmVFdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHJlbW92ZUV2ZW50SGFuZGxlclN5bWJvbCA9IFN5bWJvbChcInJlbW92ZUV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBUaGlzIEN1c3RvbUNvbnRyb2wgY3JlYXRlcyBhIG5vdGlmaWNhdGlvbiBlbGVtZW50IHdpdGggYSB2YXJpZXR5IG9mIG9wdGlvbnMuXG4gKlxuICogPGltZyBzcmM9XCIuL2ltYWdlcy9tZXNzYWdlLnBuZ1wiPlxuICpcbiAqIERlcGVuZGVuY2llczogdGhlIHN5c3RlbSB1c2VzIGZ1bmN0aW9ucyBvZiB0aGUgW21vbnN0ZXJqc10oaHR0cHM6Ly9tb25zdGVyanMub3JnLykgbGlicmFyeS5cbiAqXG4gKiBZb3UgY2FuIGNyZWF0ZSB0aGlzIGNvbnRyb2wgZWl0aGVyIGJ5IHNwZWNpZnlpbmcgdGhlIEhUTUwgdGFnIGA8bW9uc3Rlci1ub3RpZnktbWVzc2FnZSAvPmAgZGlyZWN0bHkgaW4gdGhlIEhUTUxcbiAqXG4gKiBgYGBodG1sXG4gKiA8bW9uc3Rlci1ub3RpZnktbWVzc2FnZT48L21vbnN0ZXItbm90aWZ5LW1lc3NhZ2U+XG4gKiBgYGBcbiAqXG4gKiBvciB1c2luZyBKYXZhc2NyaXB0IHZpYSB0aGUgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItbm90aWZ5Jyk7YCBtZXRob2QuXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0ICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS9jb21wb25lbnRzL25vdGlmeS9tZXNzYWdlLmpzJztcbiAqIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItbm90aWZ5LW1lc3NhZ2UnKTtcbiAqIGBgYFxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vLi4vZXhhbXBsZS9jb21wb25lbnRzL25vdGlmeS9tZXNzYWdlLm1qc1xuICogQHN0YXJ0dW1sIG1lc3NhZ2UucG5nXG4gKiBza2lucGFyYW0gbW9ub2Nocm9tZSB0cnVlXG4gKiBza2lucGFyYW0gc2hhZG93aW5nIGZhbHNlXG4gKiBIVE1MRWxlbWVudCA8fC0tIEN1c3RvbUVsZW1lbnRcbiAqIEN1c3RvbUVsZW1lbnQgPHwtLSBNZXNzYWdlXG4gKiBAZW5kdW1sXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIGhpZ2hseSBjb25maWd1cmFibGUgc2VsZWN0IGNvbnRyb2xcbiAqL1xuY2xhc3MgTWVzc2FnZSBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuXHQvKipcblx0ICogVGhlIGRlZmF1bHRzIGNhbiBiZSBzZXQgZWl0aGVyIGRpcmVjdGx5IGluIHRoZSBvYmplY3Qgb3IgdmlhIGFuIGF0dHJpYnV0ZSBpbiB0aGUgSFRNTCB0YWcuXG5cdCAqIFRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgaW4gdGhlIEhUTUwgdGFnIG11c3QgYmUgYSBKU09OIHN0cmluZy5cblx0ICpcblx0ICogYGBgXG5cdCAqIDxtb25zdGVyLW1lc3NhZ2UgZGF0YS1tb25zdGVyLW9wdGlvbnM9XCJ7fVwiPjwvbW9uc3Rlci1tZXNzYWdlPlxuXHQgKiBgYGBcblx0ICpcblx0ICogU2luY2UgMS4xOC4wIHRoZSBKU09OIGNhbiBiZSBzcGVjaWZpZWQgYXMgYSBEYXRhVVJJLlxuXHQgKlxuXHQgKiBgYGBcblx0ICogbmV3IE1vbnN0ZXIuVHlwZXMuRGF0YVVybChidG9hKEpTT04uc3RyaW5naWZ5KHtcblx0ICogICAgICAgIHRpbWVvdXQ6IDMwMDAsXG5cdCAqICAgICAgICBmZWF0dXJlczoge1xuXHQgKiAgICAgICAgICBjbG9zZTogdHJ1ZSxcblx0ICogICAgICAgICAgZGlzYXBwZWFyOiB0cnVlXG5cdCAqICAgICAgICB9XG5cdCAqICAgIH0pKSwnYXBwbGljYXRpb24vanNvbicsdHJ1ZSkudG9TdHJpbmcoKVxuXHQgKiBgYGBcblx0ICpcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIFRlbXBsYXRlIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7aW50ZWdlcn0gdGltZW91dCB0aW1lIGluIG1pbGxpc2Vjb25kcyB1bnRpbCB0aGUgbWVzc2FnZSBzaG91bGQgYmUgcmVtb3ZlZC4gVGhlIHRpbWVvdXQgY2FuIGJlIGRpc2FibGVkIHZpYSB0aGUgZmVhdHVyZSBgZGlzYXBwZWFyYC5cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZlYXR1cmVzXG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZmVhdHVyZXMuY2xvc2Ugc2hvdyBjbG9zZSBidXR0b25cblx0ICogQHByb3BlcnR5IHtib29sZWFufSBmZWF0dXJlcy5kaXNhcHBlYXIgYXV0b21hdGljYWxseSByZW1vdmUgdGhlIG1lc3NhZ2UgYWZ0ZXIgdGhlIHRpbWVvdXRcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICpcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbihcblx0XHRcdHt9LFxuXHRcdFx0c3VwZXIuZGVmYXVsdHMsXG5cdFx0XHR7XG5cdFx0XHRcdHRpbWVvdXQ6IDYwMDAsXG5cdFx0XHRcdGZlYXR1cmVzOiB7XG5cdFx0XHRcdFx0Y2xvc2U6IHRydWUsXG5cdFx0XHRcdFx0ZGlzYXBwZWFyOiB0cnVlLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjb250ZW50OiBcIjxzbG90Pjwvc2xvdD5cIixcblx0XHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0XHRpbml0T3B0aW9uc0Zyb21Bcmd1bWVudHMuY2FsbCh0aGlzKSxcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Ob3RpZnkuTWVzc2FnZX1cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cdFx0aW5pdENvbnRyb2xSZWZlcmVuY2VzLmNhbGwodGhpcyk7XG5cdFx0aW5pdEV2ZW50aGFuZGxlci5jYWxsKHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1ub3RpZnktbWVzc2FnZVwiO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge0NTU1N0eWxlU2hlZXRbXX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiBbTWVzc2FnZVN0eWxlU2hlZXRdO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRbaW5pdE1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbaW5pdE1ldGhvZFN5bWJvbF0oKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKi9cblx0Y29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLmRpc2FwcGVhclwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0c3RhcnRGYWRlb3V0LmNhbGwodGhpcyk7XG5cdFx0XHR0aGlzLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWVudGVyXCIsIHRoaXNbbW91c2VlbnRlckV2ZW50SGFuZGxlclN5bWJvbF0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKi9cblx0ZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcblx0XHRzdG9wRmFkZW91dC5jYWxsKHRoaXMpO1xuXG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMuZGlzYXBwZWFyXCIpID09PSB0cnVlKSB7XG5cdFx0XHR0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoXG5cdFx0XHRcdFwibW91c2VlbnRlclwiLFxuXHRcdFx0XHR0aGlzW21vdXNlZW50ZXJFdmVudEhhbmRsZXJTeW1ib2xdLFxuXHRcdFx0KTtcblx0XHRcdHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihcblx0XHRcdFx0XCJtb3VzZWVudGVyXCIsXG5cdFx0XHRcdHRoaXNbbW91c2VsZWF2ZUV2ZW50SGFuZGxlclN5bWJvbF0sXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHN0YXJ0RmFkZW91dCgpIHtcblx0aWYgKCF0aGlzPy5bdGltZXJTeW1ib2xdKSB7XG5cdFx0dGhpc1t0aW1lclN5bWJvbF0gPSBzZXRUaW1lb3V0KFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZW1vdmVTZWxmLmNhbGwodGhpcyk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5nZXRPcHRpb24oXCJ0aW1lb3V0XCIsIDEwMDApLFxuXHRcdCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlU2VsZigpIHtcblx0c3RvcEZhZGVvdXQoKTtcblx0dGhpcy5jbGFzc0xpc3QuYWRkKFwiZmFkZW91dFwiKTtcblxuXHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHR0aGlzLnJlbW92ZSgpO1xuXHR9LCAyMDApO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHN0b3BGYWRlb3V0KCkge1xuXHRpZiAodGhpcz8uW3RpbWVyU3ltYm9sXSkge1xuXHRcdGNsZWFyVGltZW91dCh0aGlzW3RpbWVyU3ltYm9sXSk7XG5cdFx0dGhpc1t0aW1lclN5bWJvbF0gPSB1bmRlZmluZWQ7XG5cdH1cbn1cblxuLyoqXG4gKiBUaGlzIGF0dHJpYnV0ZSBjYW4gYmUgdXNlZCB0byBwYXNzIGEgVVJMIHRvIHRoaXMgc2VsZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGluaXRPcHRpb25zRnJvbUFyZ3VtZW50cygpIHtcblx0Y29uc3Qgb3B0aW9ucyA9IHt9O1xuXG5cdGNvbnN0IHRpbWVvdXQgPSB0aGlzLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfUFJFRklYICsgXCJ0aW1lb3V0XCIpO1xuXHRpZiAoaXNTdHJpbmcodGltZW91dCkpIHtcblx0XHR0cnkge1xuXHRcdFx0b3B0aW9uc1tcInRpbWVvdXRcIl0gPSBwYXJzZUludCh0aW1lb3V0LCAxMCk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUoXG5cdFx0XHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0XHRcdHRoaXMuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgKyBcIiwgXCIgKyBlLnRvU3RyaW5nKCkpLFxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gb3B0aW9ucztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7TWVzc2FnZX1cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGluaXRDb250cm9sUmVmZXJlbmNlcygpIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0dGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRcIltcIiArIEFUVFJJQlVURV9ST0xFICsgXCI9Y29udHJvbF1cIixcblx0KTtcblx0dGhpc1tyZW1vdmVFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdFwiW1wiICsgQVRUUklCVVRFX1JPTEUgKyBcIj1jbG9zZV1cIixcblx0KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpbml0RXZlbnRoYW5kbGVyKCkge1xuXHQvKipcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICovXG5cdHRoaXNbbW91c2VlbnRlckV2ZW50SGFuZGxlclN5bWJvbF0gPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBlbGVtZW50ID0gZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoXG5cdFx0XHRldmVudCxcblx0XHRcdEFUVFJJQlVURV9ST0xFLFxuXHRcdFx0XCJjb250cm9sXCIsXG5cdFx0KTtcblxuXHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihcblx0XHRcdFx0XCJtb3VzZWVudGVyXCIsXG5cdFx0XHRcdHRoaXNbbW91c2VlbnRlckV2ZW50SGFuZGxlclN5bWJvbF0sXG5cdFx0XHQpO1xuXHRcdFx0dGhpcy5hZGRFdmVudExpc3RlbmVyKFwibW91c2VsZWF2ZVwiLCB0aGlzW21vdXNlbGVhdmVFdmVudEhhbmRsZXJTeW1ib2xdKTtcblx0XHRcdHN0b3BGYWRlb3V0LmNhbGwodGhpcyk7XG5cdFx0fVxuXHR9O1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKi9cblx0dGhpc1ttb3VzZWxlYXZlRXZlbnRIYW5kbGVyU3ltYm9sXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChcblx0XHRcdGV2ZW50LFxuXHRcdFx0QVRUUklCVVRFX1JPTEUsXG5cdFx0XHRcImNvbnRyb2xcIixcblx0XHQpO1xuXHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihcblx0XHRcdFx0XCJtb3VzZWxlYXZlXCIsXG5cdFx0XHRcdHRoaXNbbW91c2VsZWF2ZUV2ZW50SGFuZGxlclN5bWJvbF0sXG5cdFx0XHQpO1xuXHRcdFx0dGhpcy5hZGRFdmVudExpc3RlbmVyKFwibW91c2VlbnRlclwiLCB0aGlzW21vdXNlZW50ZXJFdmVudEhhbmRsZXJTeW1ib2xdKTtcblx0XHRcdHN0YXJ0RmFkZW91dC5jYWxsKHRoaXMpO1xuXHRcdH1cblx0fTtcblxuXHQvKipcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICovXG5cdHRoaXNbcmVtb3ZlRXZlbnRIYW5kbGVyU3ltYm9sXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChldmVudCwgQVRUUklCVVRFX1JPTEUsIFwiY2xvc2VcIik7XG5cblx0XHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRyZW1vdmVTZWxmLmNhbGwodGhpcyk7XG5cdFx0fVxuXHR9O1xuXG5cdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLmNsb3NlXCIpID09PSB0cnVlKSB7XG5cdFx0dGhpc1tyZW1vdmVFbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFxuXHRcdFx0XCJjbGlja1wiLFxuXHRcdFx0dGhpc1tyZW1vdmVFdmVudEhhbmRsZXJTeW1ib2xdLFxuXHRcdCk7XG5cdFx0dGhpc1tyZW1vdmVFbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFxuXHRcdFx0XCJ0b3VjaFwiLFxuXHRcdFx0dGhpc1tyZW1vdmVFdmVudEhhbmRsZXJTeW1ib2xdLFxuXHRcdCk7XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udHJvbFwiIHBhcnQ9XCJjb250cm9sXCIgY2xhc3M9XCJjZW50ZXJcIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJtZXNzYWdlXCIgcGFydD1cIm1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImRhdGEtbW9uc3Rlci1vcmllbnRhdGlvbiBwYXRoOm9yaWVudGF0aW9uXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6Y29udGVudFwiIHBhcnQ9XCJjb250ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udGVudFwiPlxuXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBwYXJ0PVwicmVtb3ZlXCJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2xhc3MgcGF0aDpmZWF0dXJlcy5jbG9zZSB8ID86OmhpZGRlbiBcIlxuICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJjbG9zZVwiIHRhYmluZGV4PVwiLTFcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICBgO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoTWVzc2FnZSk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCAyMDI0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqL1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgTm90aWZ5U3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgTm90aWZ5U3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG5cdE5vdGlmeVN0eWxlU2hlZXQuaW5zZXJ0UnVsZShcblx0XHRgXG5AbGF5ZXIgbm90aWZ5IHsgXG4uYmxvY2t7ZGlzcGxheTpibG9ja30uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmdyaWR7ZGlzcGxheTpncmlkfS5pbmxpbmUtZ3JpZHtkaXNwbGF5OmlubGluZS1ncmlkfS5mbGV4e2Rpc3BsYXk6ZmxleH0uaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleH0uaGlkZGVuLC5oaWRlLC5ub25le2Rpc3BsYXk6bm9uZX0udmlzaWJsZXt2aXNpYmlsaXR5OnZpc2libGV9LmludmlzaWJsZXt2aXNpYmlsaXR5OmhpZGRlbn0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMywubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLTB7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1zdHlsZTpub25lO2JvcmRlci13aWR0aDowfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0yLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMywubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0yLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0zLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdXRsaW5lOm5vbmU7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0uZmxleHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd306aG9zdHtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpibG9ja31kaXZbZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17YWxpZ24taXRlbXM6ZmxleC1zdGFydDtib3JkZXI6MDtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjttYXJnaW46MDttYXgtaGVpZ2h0OjEwMHZIO3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MDstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7d2lkdGg6MjVyZW07ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtbW9kYWwtb3ZlcmxheSl9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdW2RhdGEtbW9uc3Rlci1vcmllbnRhdGlvbio9bGVmdF17bGVmdDowO3JpZ2h0OmF1dG99W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdW2RhdGEtbW9uc3Rlci1vcmllbnRhdGlvbio9cmlnaHRde2xlZnQ6YXV0bztyaWdodDowfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXVtkYXRhLW1vbnN0ZXItb3JpZW50YXRpb24qPWNlbnRlcl17bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlKX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF1bZGF0YS1tb25zdGVyLW9yaWVudGF0aW9uKj1ib3R0b21de2FsaWduLWl0ZW1zOmZsZXgtZW5kO2JvdHRvbTowfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXVtkYXRhLW1vbnN0ZXItb3JpZW50YXRpb24qPXRvcF17YWxpZ24taXRlbXM6ZmxleC1zdGFydDt0b3A6MH1bZGF0YS1tb25zdGVyLXJvbGU9Y29udGFpbmVyXXt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1tZXNzYWdlXXtiYWNrZ3JvdW5kLWNsaXA6cGFkZGluZy1ib3g7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItbWVzc2FnZS1ib3JkZXItY29sb3IscmdiYSgwLDAsMCwuMSkpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1tZXNzYWdlLWJvcmRlci1yYWRpdXMsLjI1cmVtKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1tZXNzYWdlLWJvcmRlci1zdHlsZSxzb2xpZCk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItbWVzc2FnZS1ib3JkZXItd2lkdGgsMXB4KTtib3gtc2hhZG93OjAgLjVyZW0gMXJlbSByZ2JhKDAsMCwwLC4xNSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2Rpc3BsYXk6ZmxleDtmb250LXNpemU6Ljg3NXJlbTttYXJnaW46dmFyKC0tbW9uc3Rlci1tZXNzYWdlLW1hcmdpbi10b3AsMTVweCkgdmFyKC0tbW9uc3Rlci1tZXNzYWdlLW1hcmdpbi1yaWdodCw1cHgpIHZhcigtLW1vbnN0ZXItbWVzc2FnZS1tYXJnaW4tYm90dG9tLDApIHZhcigtLW1vbnN0ZXItbWVzc2FnZS1tYXJnaW4tbGVmdCwwKTttYXgtaGVpZ2h0OjIwMHB4O21heC13aWR0aDoxMDAlO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOnZhcigtLW1vbnN0ZXItbWVzc2FnZS1wYWRkaW5nLXRvcCw1cHgpIHZhcigtLW1vbnN0ZXItbWVzc2FnZS1wYWRkaW5nLXJpZ2h0LDVweCkgdmFyKC0tbW9uc3Rlci1tZXNzYWdlLXBhZGRpbmctYm90dG9tLDVweCkgdmFyKC0tbW9uc3Rlci1tZXNzYWdlLXBhZGRpbmctbGVmdCw1cHgpO3BvaW50ZXItZXZlbnRzOmF1dG87cG9zaXRpb246cmVsYXRpdmU7dGV4dC1vdmVyZmxvdzplbGxpcHNpczstd2Via2l0LXVzZXItc2VsZWN0OnRleHQ7LW1vei11c2VyLXNlbGVjdDp0ZXh0O3VzZXItc2VsZWN0OnRleHQ7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9bWVzc2FnZV06Zmlyc3QtY2hpbGR7bWFyZ2luLXRvcDowfVtkYXRhLW1vbnN0ZXItcm9sZT1tZXNzYWdlXS5mYWRlb3V0e2JvcmRlcjowO21hcmdpbi1ib3R0b206MDttYXJnaW4tdG9wOjA7bWF4LWhlaWdodDowO3BhZGRpbmctYm90dG9tOjA7cGFkZGluZy10b3A6MDt0cmFuc2l0aW9uOmFsbCAuMnMgY3ViaWMtYmV6aWVyKDEsLS4wNCwwLDEuMDMpfSBcbn1gLFxuXHRcdDAsXG5cdCk7XG59IGNhdGNoIChlKSB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcihcImh0bWxcIiksXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRlICsgXCJcIixcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBBVFRSSUJVVEVfUk9MRSB9IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdEN1c3RvbUVsZW1lbnQsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVJbnN0YW5jZSwgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBNZXNzYWdlIH0gZnJvbSBcIi4vbWVzc2FnZS5tanNcIjtcbmltcG9ydCB7IE5vdGlmeVN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L25vdGlmeS5tanNcIjtcbmltcG9ydCB7IFF1ZXVlIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3F1ZXVlLm1qc1wiO1xuaW1wb3J0IHsgZmlyZUN1c3RvbUV2ZW50IH0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5cbmV4cG9ydCB7IE5vdGlmeSB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjb250cm9sRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImNvbnRyb2xFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjb250YWluZXJFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiY29udGFpbmVyRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcXVldWVTeW1ib2wgPSBTeW1ib2woXCJxdWV1ZVwiKTtcblxuLyoqXG4gKiBUaGlzIEN1c3RvbUNvbnRyb2wgY3JlYXRlcyBhIG5vdGlmaWNhdGlvbiBlbGVtZW50IHdpdGggYSB2YXJpZXR5IG9mIG9wdGlvbnMuXG4gKlxuICogPGltZyBzcmM9XCIuL2ltYWdlcy9ub3RpZnkucG5nXCI+XG4gKlxuICogRGVwZW5kZW5jaWVzOiB0aGUgc3lzdGVtIHVzZXMgZnVuY3Rpb25zIG9mIHRoZSBbbW9uc3RlcmpzXShodHRwczovL21vbnN0ZXJqcy5vcmcvKSBsaWJyYXJ5LlxuICpcbiAqIFlvdSBjYW4gY3JlYXRlIHRoaXMgY29udHJvbCBlaXRoZXIgYnkgc3BlY2lmeWluZyB0aGUgSFRNTCB0YWcgYDxtb25zdGVyLW5vdGlmeSAvPmAgZGlyZWN0bHkgaW4gdGhlIEhUTUxcbiAqXG4gKiBgYGBodG1sXG4gKiA8bW9uc3Rlci1ub3RpZnk+PC9tb25zdGVyLW5vdGlmeT5cbiAqIGBgYFxuICpcbiAqIG9yIHVzaW5nIEphdmFzY3JpcHQgdmlhIHRoZSBgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1ub3RpZnknKTtgIG1ldGhvZC5cbiAqXG4gKiBgYGBqc1xuICogaW1wb3J0ICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS9jb21wb25lbnRzL25vdGlmeS9ub3RpZnkuanMnO1xuICogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1ub3RpZnknKTtcbiAqIGBgYFxuICpcbiAqICMjIEV2ZW50c1xuICpcbiAqIFRoZSBDdXN0b21FdmVudCBoYXMgdGhlIHByb3BlcnR5IFtgZGV0YWlsYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0N1c3RvbUV2ZW50L2RldGFpbCkuXG4gKlxuICogYGBgXG4gKiBub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ21vbnN0ZXItbm90aWZ5LW1lc3NhZ2UnLChlKT0+Y29uc29sZS5sb2coZS5kZXRhaWwpKVxuICogYGBgXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi8uLi9leGFtcGxlL2NvbXBvbmVudHMvbm90aWZ5L25vdGlmeS5tanNcbiAqIEBzdGFydHVtbCBub3RpZnkucG5nXG4gKiBza2lucGFyYW0gbW9ub2Nocm9tZSB0cnVlXG4gKiBza2lucGFyYW0gc2hhZG93aW5nIGZhbHNlXG4gKiBIVE1MRWxlbWVudCA8fC0tIEN1c3RvbUVsZW1lbnRcbiAqIEN1c3RvbUVsZW1lbnQgPHwtLSBOb3RpZnlcbiAqIEBlbmR1bWxcbiAqXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIGhpZ2hseSBjb25maWd1cmFibGUgc2VsZWN0IGNvbnRyb2xcbiAqL1xuY2xhc3MgTm90aWZ5IGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpc1txdWV1ZVN5bWJvbF0gPSBuZXcgUXVldWUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgZGVmYXVsdHMgY2FuIGJlIHNldCBlaXRoZXIgZGlyZWN0bHkgaW4gdGhlIG9iamVjdCBvciB2aWEgYW4gYXR0cmlidXRlIGluIHRoZSBIVE1MIHRhZy5cblx0ICogVGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1vcHRpb25zYCBpbiB0aGUgSFRNTCB0YWcgbXVzdCBiZSBhIEpTT04gc3RyaW5nLlxuXHQgKlxuXHQgKiBgYGBodG1sXG5cdCAqIDxtb25zdGVyLW5vdGlmeSBkYXRhLW1vbnN0ZXItb3B0aW9ucz1cInt9XCI+PC9tb25zdGVyLW5vdGlmeT5cblx0ICogYGBgXG5cdCAqXG5cdCAqIFNpbmNlIDEuMTguMCB0aGUgSlNPTiBjYW4gYmUgc3BlY2lmaWVkIGFzIGEgRGF0YVVSSS5cblx0ICpcblx0ICogYGBgXG5cdCAqIG5ldyBNb25zdGVyLlR5cGVzLkRhdGFVcmwoYnRvYShKU09OLnN0cmluZ2lmeSh7XG5cdCAqICAgICAgICBvcmllbnRhdGlvbjogJ3JpZ2h0IHRvcCdcblx0ICogICAgfSkpLCdhcHBsaWNhdGlvbi9qc29uJyx0cnVlKS50b1N0cmluZygpXG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzIFRlbXBsYXRlIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbihcblx0XHRcdHt9LFxuXHRcdFx0c3VwZXIuZGVmYXVsdHMsXG5cdFx0XHR7XG5cdFx0XHRcdG9yaWVudGF0aW9uOiBcImxlZnQgdG9wXCIsXG5cdFx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdFx0aW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzLmNhbGwodGhpcyksXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtOb3RpZnl9XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXHRcdGluaXRDb250cm9sUmVmZXJlbmNlcy5jYWxsKHRoaXMpO1xuXG5cdFx0aWYgKHRoaXNbY29udGFpbmVyRWxlbWVudFN5bWJvbF0pIHtcblx0XHRcdHdoaWxlICh0aGlzW3F1ZXVlU3ltYm9sXS5pc0VtcHR5KCkgPT09IGZhbHNlKSB7XG5cdFx0XHRcdHRoaXMucHVzaCh0aGlzW3F1ZXVlU3ltYm9sXS5wb2xsKCkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1ub3RpZnlcIjtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtDU1NTdHlsZVNoZWV0W119XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW05vdGlmeVN0eWxlU2hlZXRdO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7TW9uc3Rlci5Db21wb25lbnRzLk5vdGlmeS5NYXNzYWdlfFN0cmluZ30gbWVzc2FnZVxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuTm90aWZ5Lk5vdGlmeX1cblx0ICovXG5cdHB1c2gobWVzc2FnZSkge1xuXHRcdGxldCBtZXNzYWdlRWxlbWVudCA9IG1lc3NhZ2U7XG5cdFx0aWYgKCEobWVzc2FnZSBpbnN0YW5jZW9mIE1lc3NhZ2UpKSB7XG5cdFx0XHRjb25zdCB0ZXh0ID0gdmFsaWRhdGVTdHJpbmcobWVzc2FnZSk7XG5cdFx0XHRtZXNzYWdlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJtb25zdGVyLW5vdGlmeS1tZXNzYWdlXCIpO1xuXHRcdFx0bWVzc2FnZUVsZW1lbnQuc2V0T3B0aW9uKFwiY29udGVudFwiLCB0ZXh0KTtcblx0XHR9XG5cblx0XHR2YWxpZGF0ZUluc3RhbmNlKG1lc3NhZ2VFbGVtZW50LCBNZXNzYWdlKTtcblx0XHRtZXNzYWdlRWxlbWVudC5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUsIFwibWVzc2FnZVwiKTtcblxuXHRcdC8vIGlmIG5vdCBjb25uZWN0ZWQsIGFkZCB0byBxdWV1ZVxuXHRcdGlmICghdGhpc1tjb250YWluZXJFbGVtZW50U3ltYm9sXSkge1xuXHRcdFx0dGhpc1txdWV1ZVN5bWJvbF0uYWRkKG1lc3NhZ2VFbGVtZW50KTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItbm90aWZ5LW1lc3NhZ2VcIiwge1xuXHRcdFx0bWVzc2FnZUVsZW1lbnQsXG5cdFx0fSk7XG5cblx0XHR0aGlzW2NvbnRhaW5lckVsZW1lbnRTeW1ib2xdLmFwcGVuZENoaWxkKG1lc3NhZ2VFbGVtZW50KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuXG4vKipcbiAqIFRoaXMgYXR0cmlidXRlIGNhbiBiZSB1c2VkIHRvIHBhc3MgYSBVUkwgdG8gdGhpcyBzZWxlY3QuXG4gKlxuICogYGBgXG4gKiA8bW9uc3Rlci1zZWxlY3QgZGF0YS1tb25zdGVyLXVybD1cImh0dHBzOi8vZXhhbXBsZS5jb20vXCI+PC9tb25zdGVyLXNlbGVjdD5cbiAqIGBgYFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGluaXRPcHRpb25zRnJvbUFyZ3VtZW50cygpIHtcblx0Y29uc3Qgb3B0aW9ucyA9IHt9O1xuXG5cdHJldHVybiBvcHRpb25zO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtTZWxlY3R9XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdHRoaXNbY29udHJvbEVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XCJbXCIgKyBBVFRSSUJVVEVfUk9MRSArIFwiPWNvbnRyb2xdXCIsXG5cdCk7XG5cdHRoaXNbY29udGFpbmVyRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRcIltcIiArIEFUVFJJQlVURV9ST0xFICsgXCI9Y29udGFpbmVyXVwiLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250cm9sXCIgcGFydD1cImNvbnRyb2xcIiBjbGFzcz1cImNlbnRlclwiXG4gICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJkYXRhLW1vbnN0ZXItb3JpZW50YXRpb24gcGF0aDpvcmllbnRhdGlvblwiPlxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIGA7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChOb3RpZnkpO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywgMjAyNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IFNwbGl0UGFuZWxTdHlsZVNoZWV0IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBTcGxpdFBhbmVsU3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG5cdFNwbGl0UGFuZWxTdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIHNwbGl0cGFuZWwgeyBcbltkYXRhLW1vbnN0ZXItcm9sZT1zcGxpdC1wYW5lbF17Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7aGVpZ2h0OmF1dG87bWFyZ2luOjA7cGFkZGluZzowO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPXNwbGl0LXBhbmVsXSAucGFuZWx7ZmxleC1ncm93OjE7b3ZlcmZsb3c6YXV0b31bZGF0YS1tb25zdGVyLXJvbGU9c3BsaXQtcGFuZWxdIFtkYXRhLW1vbnN0ZXItcm9sZT1kcmFnZ2VyXXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7aGVpZ2h0OmF1dG87cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6dmFyKC0tbW9uc3Rlci1kcmFnZ2VyLXdpZHRoKX06aXMoW2RhdGEtbW9uc3Rlci1yb2xlPXNwbGl0LXBhbmVsXSBbZGF0YS1tb25zdGVyLXJvbGU9ZHJhZ2dlcl0pIFtkYXRhLW1vbnN0ZXItcm9sZT1oYW5kbGVde2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKTtjdXJzb3I6cG9pbnRlcjtoZWlnaHQ6dmFyKC0tbW9uc3Rlci1kcmFnZ2VyLWhhbmRsZS1oZWlnaHQpO2xlZnQ6NTAlO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpO3dpZHRoOnZhcigtLW1vbnN0ZXItZHJhZ2dlci1oYW5kbGUtd2lkdGgpO3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW91dGxpbmUpfS5ob3Jpem9udGFsW2RhdGEtbW9uc3Rlci1yb2xlPXNwbGl0LXBhbmVsXXtmbGV4LWRpcmVjdGlvbjpjb2x1bW59Lmhvcml6b250YWxbZGF0YS1tb25zdGVyLXJvbGU9c3BsaXQtcGFuZWxdIFtkYXRhLW1vbnN0ZXItcm9sZT1kcmFnZ2VyXXtoZWlnaHQ6dmFyKC0tbW9uc3Rlci1kcmFnZ2VyLXdpZHRoKTt3aWR0aDoxMDAlfTppcyguaG9yaXpvbnRhbFtkYXRhLW1vbnN0ZXItcm9sZT1zcGxpdC1wYW5lbF0gW2RhdGEtbW9uc3Rlci1yb2xlPWRyYWdnZXJdKSBbZGF0YS1tb25zdGVyLXJvbGU9aGFuZGxlXXtoZWlnaHQ6dmFyKC0tbW9uc3Rlci1kcmFnZ2VyLWhhbmRsZS13aWR0aCk7d2lkdGg6dmFyKC0tbW9uc3Rlci1kcmFnZ2VyLWhhbmRsZS1oZWlnaHQpfSBcbn1gLFxuXHRcdDAsXG5cdCk7XG59IGNhdGNoIChlKSB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcihcImh0bWxcIiksXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRlICsgXCJcIixcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0Q3VzdG9tRWxlbWVudCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgXCIuLi9ub3RpZnkvbm90aWZ5Lm1qc1wiO1xuaW1wb3J0IHsgZmlyZUN1c3RvbUV2ZW50IH0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5pbXBvcnQgeyBPYnNlcnZlciB9IGZyb20gXCIuLi8uLi90eXBlcy9vYnNlcnZlci5tanNcIjtcbmltcG9ydCB7IFNwbGl0UGFuZWxTdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9zcGxpdC1wYW5lbC5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgU3BsaXRQYW5lbCwgVFlQRV9WRVJUSUNBTCwgVFlQRV9IT1JJWk9OVEFMIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHNwbGl0U2NyZWVuRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcInNwbGl0U2NyZWVuRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgZHJhZ2dlckVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJkcmFnZ2VyRWxlbWVudFwiKTtcbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHN0YXJ0UGFuZWxFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwic3RhcnRQYW5lbEVsZW1lbnRcIik7XG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBlbmRQYW5lbEVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJlbmRQYW5lbEVsZW1lbnRcIik7XG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBoYW5kbGVFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiaGFuZGxlRWxlbWVudFwiKTtcblxuLyoqXG4gKlxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgVFlQRV9WRVJUSUNBTCA9IFwidmVydGljYWxcIjtcbi8qKlxuICpcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IFRZUEVfSE9SSVpPTlRBTCA9IFwiaG9yaXpvbnRhbFwiO1xuXG4vKipcbiAqIEEgU3BsaXRQYW5lbCBDb250cm9sXG4gKlxuICogQGZyYWdtZW50cyAvZnJhZ21lbnRzL2NvbXBvbmVudHMvbGF5b3V0L3NwbGl0LXBhbmVsL1xuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2xheW91dC9zcGxpdC1wYW5lbC1zaW1wbGVcbiAqXG4gKiBAc2luY2UgMy41NC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgVGhlIFNwbGl0UGFuZWwgY29udHJvbCBpcyBhIHNpbXBsZSBsYXlvdXQgY29udHJvbCB0aGF0IGFsbG93cyB5b3UgdG8gc3BsaXQgdGhlIHNjcmVlblxuICogaW50byB0d28gcGFydHMuIFRoZSBzcGxpdCBjYW4gYmUgZWl0aGVyIHZlcnRpY2FsIG9yIGhvcml6b250YWwuIFRoZSBjb250cm9sIHByb3ZpZGVzIGFcbiAqIGRyYWdnYWJsZSBoYW5kbGUgdGhhdCBhbGxvd3MgeW91IHRvIGFkanVzdCB0aGUgc2l6ZSBvZiB0aGUgdHdvIHBhbmVscy5cbiAqL1xuY2xhc3MgU3BsaXRQYW5lbCBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9sYXlvdXQvc3BsaXQtcGFuZWxcIik7XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgSFRNTCB0YWcsIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1vcHRpb25zYCBtdXN0IGJlIHVzZWQuXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZy9lbi9kb2MvI2NvbmZpZ3VyYXRlLWEtbW9uc3Rlci1jb250cm9sfVxuXHQgKlxuXHQgKiBUaGUgaW5kaXZpZHVhbCBjb25maWd1cmF0aW9uIHZhbHVlcyBjYW4gYmUgZm91bmQgaW4gdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIFRlbXBsYXRlIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbiBNYWluIHRlbXBsYXRlXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzcGxpdFR5cGUgU3BsaXQgdHlwZSAodmVydGljYWwgb3IgaG9yaXpvbnRhbClcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGRpbWVuc2lvbiBEaW1lbnNpb25cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGRpbWVuc2lvbi5pbml0aWFsIEluaXRpYWwgZGltZW5zaW9uIG9mIHRoZSBzdGFydCBwYW5lbFxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gZGltZW5zaW9uLm1heCBNYXhpbXVtIGRpbWVuc2lvbiBvZiB0aGUgc3RhcnQgcGFuZWwgKGluIHBlcmNlbnRhZ2UpXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBkaW1lbnNpb24ubWluIE1pbmltdW0gZGltZW5zaW9uIG9mIHRoZSBzdGFydCBwYW5lbCAoaW4gcGVyY2VudGFnZSlcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0fSxcblx0XHRcdHNwbGl0VHlwZTogVFlQRV9WRVJUSUNBTCxcblx0XHRcdGRpbWVuc2lvbjoge1xuXHRcdFx0XHRpbml0aWFsOiBcIjYwJVwiLFxuXHRcdFx0XHRtYXg6IFwiODAlXCIsXG5cdFx0XHRcdG1pbjogXCIyMCVcIixcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHRmdWxsU3RhcnRTY3JlZW4oKSB7XG5cdFx0dGhpcy5zZXREaW1lbnNpb24oXCIxMDAlXCIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0ZnVsbEVuZFNjcmVlbigpIHtcblx0XHR0aGlzLnNldERpbWVuc2lvbihcIjAlXCIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0aXNGdWxsU3RhcnRTY3JlZW4oKSB7XG5cdFx0cmV0dXJuIHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKS5jdXJyZW50RGltZW5zaW9uID09PSBcIjEwMCVcIjtcblx0fVxuXG5cdGlzRnVsbEVuZFNjcmVlbigpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpLmN1cnJlbnREaW1lbnNpb24gPT09IFwiMCVcIjtcblx0fVxuXG5cdGlzSW5pdGlhbFNjcmVlbigpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpLmN1cnJlbnREaW1lbnNpb24gPT09XG5cdFx0XHR0aGlzLmdldE9wdGlvbihcImRpbWVuc2lvblwiKS5pbml0aWFsXG5cdFx0KTtcblx0fVxuXG5cdHJlc2V0U2NyZWVuKCkge1xuXHRcdHRoaXMuc2V0RGltZW5zaW9uKHRoaXMuZ2V0T3B0aW9uKFwiZGltZW5zaW9uXCIpLmluaXRpYWwpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0Q29udGVudChodG1sKSB7XG5cdFx0dGhpcy5zZXRPcHRpb24oXCJjb250ZW50XCIsIGh0bWwpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0LlZpZXdlcn1cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcblx0XHRpbml0RXZlbnRIYW5kbGVyLmNhbGwodGhpcyk7XG5cdFx0Ly9hcHBseVBhbmVsRGltZW5zaW9ucy5jYWxsKHRoaXMpO1xuXHRcdHRoaXMuc2V0RGltZW5zaW9uKHRoaXMuZ2V0T3B0aW9uKFwiZGltZW5zaW9uXCIpLmluaXRpYWwpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrIGlmIHRoZSBkaW1lbnNpb24gaXMgYSBwZXJjZW50YWdlIGFuZCB3aXRoaW4gYSB2YWxpZCByYW5nZSwgdGhlbiBzZXQgdGhlIGRpbWVuc2lvbiBvcHRpb24uXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBkaW1lbnNpb24gLSBUaGUgZGltZW5zaW9uIHRvIGJlIHNldCwgY2FuIGJlIGluIHBlcmNlbnRhZ2Ugb3IgYWJzb2x1dGUgdmFsdWUuXG5cdCAqIEByZXR1cm4ge09iamVjdH0gLSBSZXR1cm5zIHRoZSBjdXJyZW50IG9iamVjdCBpbnN0YW5jZSBmb3IgY2hhaW5pbmcuXG5cdCAqL1xuXHRzZXREaW1lbnNpb24oZGltZW5zaW9uKSB7XG5cdFx0Ly8gY2hlY2sgaWYgcGVyY2VudCBhbmQgZ3JlYXRlciB0aGFuMTAwXG5cdFx0aWYgKGRpbWVuc2lvbi5pbmNsdWRlcyhcIiVcIikpIHtcblx0XHRcdGlmIChwYXJzZUludChkaW1lbnNpb24pID4gMTAwKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcImRpbWVuc2lvbiBtdXN0IGJlIGxlc3MgdGhhbiAxMDAlXCIpO1xuXHRcdFx0fSBlbHNlIGlmIChwYXJzZUludChkaW1lbnNpb24pIDwgMCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJkaW1lbnNpb24gbXVzdCBiZSBncmVhdGVyIHRoYW4gMCVcIik7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpLmN1cnJlbnREaW1lbnNpb24gPSBkaW1lbnNpb247XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLXNwbGl0LXBhbmVsXCI7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7Q1NTU3R5bGVTaGVldFtdfVxuXHQgKi9cblx0c3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG5cdFx0cmV0dXJuIFtTcGxpdFBhbmVsU3R5bGVTaGVldF07XG5cdH1cbn1cblxuLyoqXG4gKiBTZXQgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIHBhbmVsIGJhc2VkIG9uIHRoZSBzcGxpdCB0eXBlLlxuICogQGZpcmVzIG1vbnN0ZXItZGltZW5zaW9uLWNoYW5nZWRcbiAqL1xuZnVuY3Rpb24gYXBwbHlQYW5lbERpbWVuc2lvbnMoKSB7XG5cdGNvbnN0IHNwbGl0VHlwZSA9IHRoaXMuZ2V0T3B0aW9uKFwic3BsaXRUeXBlXCIpO1xuXHRjb25zdCBkaW1lbnNpb24gPSB0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRTdWJqZWN0KCkuY3VycmVudERpbWVuc2lvbjtcblxuXHRpZiAoc3BsaXRUeXBlID09PSBUWVBFX1ZFUlRJQ0FMKSB7XG5cdFx0dGhpc1tzdGFydFBhbmVsRWxlbWVudFN5bWJvbF0uc3R5bGUud2lkdGggPSBkaW1lbnNpb247XG5cdFx0dGhpc1tlbmRQYW5lbEVsZW1lbnRTeW1ib2xdLnN0eWxlLndpZHRoID0gYGNhbGMoMTAwJSAtICR7ZGltZW5zaW9ufSAtIDVweClgO1xuXHRcdHRoaXNbZHJhZ2dlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmN1cnNvciA9IFwiZXctcmVzaXplXCI7XG5cdFx0dGhpc1tzcGxpdFNjcmVlbkVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5hZGQoXCJ2ZXJ0aWNhbFwiKTtcblx0XHR0aGlzW3NwbGl0U2NyZWVuRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LnJlbW92ZShcImhvcml6b250YWxcIik7XG5cdH0gZWxzZSB7XG5cdFx0dGhpc1tzdGFydFBhbmVsRWxlbWVudFN5bWJvbF0uc3R5bGUuaGVpZ2h0ID0gZGltZW5zaW9uO1xuXHRcdHRoaXNbZW5kUGFuZWxFbGVtZW50U3ltYm9sXS5zdHlsZS5oZWlnaHQgPVxuXHRcdFx0YGNhbGMoMTAwJSAtICR7ZGltZW5zaW9ufSAtIDVweClgO1xuXHRcdHRoaXNbZHJhZ2dlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmN1cnNvciA9IFwibnMtcmVzaXplXCI7XG5cdFx0dGhpc1tzcGxpdFNjcmVlbkVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5hZGQoXCJob3Jpem9udGFsXCIpO1xuXHRcdHRoaXNbc3BsaXRTY3JlZW5FbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QucmVtb3ZlKFwidmVydGljYWxcIik7XG5cdH1cblxuXHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLWRpbWVuc2lvbi1jaGFuZ2VkXCIsIHtcblx0XHRjb250cm9sbGVyOiB0aGlzLFxuXHRcdGRpbWVuc2lvbjogZGltZW5zaW9uLFxuXHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7U2VsZWN0fVxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqL1xuZnVuY3Rpb24gaW5pdENvbnRyb2xSZWZlcmVuY2VzKCkge1xuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHR0aGlzW3NwbGl0U2NyZWVuRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRcIltkYXRhLW1vbnN0ZXItcm9sZT1zcGxpdC1wYW5lbF1cIixcblx0KTtcblx0dGhpc1tkcmFnZ2VyRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRcIltkYXRhLW1vbnN0ZXItcm9sZT1kcmFnZ2VyXVwiLFxuXHQpO1xuXHR0aGlzW2hhbmRsZUVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XCJbZGF0YS1tb25zdGVyLXJvbGU9aGFuZGxlXVwiLFxuXHQpO1xuXG5cdHRoaXNbc3RhcnRQYW5lbEVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XCJbZGF0YS1tb25zdGVyLXJvbGU9c3RhcnRQYW5lbF1cIixcblx0KTtcblx0dGhpc1tlbmRQYW5lbEVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XCJbZGF0YS1tb25zdGVyLXJvbGU9ZW5kUGFuZWxdXCIsXG5cdCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50SGFuZGxlcigpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0bGV0IGxhc3REaW1lbnNpb24gPSB0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRTdWJqZWN0KCkuY3VycmVudERpbWVuc2lvbjtcblx0bGV0IGxhc3RUeXBlID0gdGhpcy5nZXRPcHRpb24oXCJzcGxpdFR5cGVcIik7XG5cblx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpLmlzRHJhZ2dpbmcgPSBmYWxzZTtcblxuXHQvLyBAdG9kbzogYWRkIGJldHRlciB0b3VjaCBzdXBwb3J0XG5cdGNvbnN0IGV2ZW50VHlwZXMgPSBbXCJkYmxjbGlja1wiLCBcInRvdWNoc3RhcnRcIl07XG5cdGZvciAoY29uc3QgZXZlbnRUeXBlIG9mIGV2ZW50VHlwZXMpIHtcblx0XHR0aGlzW2RyYWdnZXJFbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgKCkgPT4ge1xuXHRcdFx0c2VsZltpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpLmlzRHJhZ2dpbmcgPSBmYWxzZTtcblx0XHRcdGxhc3REaW1lbnNpb24gPSB1bmRlZmluZWQ7XG5cblx0XHRcdGxldCBjdXJyZW50RGltZW5zaW9uO1xuXHRcdFx0aWYgKHNlbGYuZ2V0T3B0aW9uKFwic3BsaXRUeXBlXCIpID09PSBUWVBFX1ZFUlRJQ0FMKSB7XG5cdFx0XHRcdGNvbnN0IHRvcFBhbmVsID0gc2VsZltzdGFydFBhbmVsRWxlbWVudFN5bWJvbF07XG5cdFx0XHRcdGN1cnJlbnREaW1lbnNpb24gPSB0b3BQYW5lbC5zdHlsZS53aWR0aDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHRvcFBhbmVsID0gc2VsZltzdGFydFBhbmVsRWxlbWVudFN5bWJvbF07XG5cdFx0XHRcdGN1cnJlbnREaW1lbnNpb24gPSB0b3BQYW5lbC5zdHlsZS5oZWlnaHQ7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChjdXJyZW50RGltZW5zaW9uID09PSBzZWxmLmdldE9wdGlvbihcImRpbWVuc2lvblwiKS5pbml0aWFsKSB7XG5cdFx0XHRcdHNlbGYuc2V0RGltZW5zaW9uKHNlbGYuZ2V0T3B0aW9uKFwiZGltZW5zaW9uXCIpLm1heCk7XG5cdFx0XHR9IGVsc2UgaWYgKGN1cnJlbnREaW1lbnNpb24gPT09IHNlbGYuZ2V0T3B0aW9uKFwiZGltZW5zaW9uXCIpLm1heCkge1xuXHRcdFx0XHRzZWxmLnNldERpbWVuc2lvbihzZWxmLmdldE9wdGlvbihcImRpbWVuc2lvblwiKS5taW4pO1xuXHRcdFx0fSBlbHNlIGlmIChjdXJyZW50RGltZW5zaW9uID09PSBzZWxmLmdldE9wdGlvbihcImRpbWVuc2lvblwiKS5taW4pIHtcblx0XHRcdFx0c2VsZi5zZXREaW1lbnNpb24oc2VsZi5nZXRPcHRpb24oXCJkaW1lbnNpb25cIikuaW5pdGlhbCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzZWxmLnNldERpbWVuc2lvbihzZWxmLmdldE9wdGlvbihcImRpbWVuc2lvblwiKS5pbml0aWFsKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHRoaXNbZHJhZ2dlckVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiwgKCkgPT4ge1xuXHRcdHNlbGZbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKS5pc0RyYWdnaW5nID0gdHJ1ZTtcblxuXHRcdGNvbnN0IGV2ZW50TGlzdGVuZXIgPSAoZSkgPT4ge1xuXHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG5cdFx0XHQvLyB0aGUgNXB4IGFyZSB3cm9uZyBhbmQgbXVzdCBiZSBjYWxjIGZyb20gY3NzIHByb3BlcnR5IC0tbW9uc3Rlci1kcmFnZ2VyLXdpZHRoXG5cblx0XHRcdGxldCBkcmFnZ2VyV2lkdGggPSBnZXRDb21wdXRlZFN0eWxlKFxuXHRcdFx0XHRzZWxmW2RyYWdnZXJFbGVtZW50U3ltYm9sXSxcblx0XHRcdCkuZ2V0UHJvcGVydHlWYWx1ZShcIi0tbW9uc3Rlci1kcmFnZ2VyLXdpZHRoXCIpO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRkcmFnZ2VyV2lkdGggPT09IFwiXCIgfHxcblx0XHRcdFx0ZHJhZ2dlcldpZHRoID09PSB1bmRlZmluZWQgfHxcblx0XHRcdFx0ZHJhZ2dlcldpZHRoID09PSBudWxsXG5cdFx0XHQpIHtcblx0XHRcdFx0ZHJhZ2dlcldpZHRoID0gXCIwXCI7XG5cdFx0XHR9XG5cblx0XHRcdGlmICghc2VsZltpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpLmlzRHJhZ2dpbmcpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc2VsZi5nZXRPcHRpb24oXCJzcGxpdFR5cGVcIikgPT09IFRZUEVfSE9SSVpPTlRBTCkge1xuXHRcdFx0XHRjb25zdCBjb250YWluZXJPZmZzZXRUb3AgPSBzZWxmW3NwbGl0U2NyZWVuRWxlbWVudFN5bWJvbF0ub2Zmc2V0VG9wO1xuXHRcdFx0XHRjb25zdCB0b3BQYW5lbCA9IHNlbGZbc3RhcnRQYW5lbEVsZW1lbnRTeW1ib2xdO1xuXHRcdFx0XHRjb25zdCBib3R0b21QYW5lbCA9IHNlbGZbZW5kUGFuZWxFbGVtZW50U3ltYm9sXTtcblx0XHRcdFx0bGV0IG5ld1RvcEhlaWdodCA9IGUuY2xpZW50WSAtIGNvbnRhaW5lck9mZnNldFRvcDtcblxuXHRcdFx0XHRjb25zdCBtaW4gPSB0aGlzLmdldE9wdGlvbihcImRpbWVuc2lvblwiKS5taW47XG5cdFx0XHRcdGNvbnN0IG1heCA9IHRoaXMuZ2V0T3B0aW9uKFwiZGltZW5zaW9uXCIpLm1heDtcblxuXHRcdFx0XHRjb25zdCB0b3BBc1BlcmNlbnQgPVxuXHRcdFx0XHRcdChuZXdUb3BIZWlnaHQgLyB0aGlzW3NwbGl0U2NyZWVuRWxlbWVudFN5bWJvbF0ub2Zmc2V0SGVpZ2h0KSAqIDEwMDtcblx0XHRcdFx0aWYgKHBhcnNlSW50KG1pbikgPiB0b3BBc1BlcmNlbnQpIHtcblx0XHRcdFx0XHRuZXdUb3BIZWlnaHQgPSBtaW47XG5cdFx0XHRcdH0gZWxzZSBpZiAocGFyc2VJbnQobWF4KSA8IHRvcEFzUGVyY2VudCkge1xuXHRcdFx0XHRcdG5ld1RvcEhlaWdodCA9IG1heDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRuZXdUb3BIZWlnaHQgPSB0b3BBc1BlcmNlbnQgKyBcIiVcIjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIGNhbGMgbmV3IHRvcCBoZWlnaHQgdG8gcGl4ZWxcblx0XHRcdFx0Y29uc3QgbmV3VG9wSGVpZ2h0UHggPVxuXHRcdFx0XHRcdChwYXJzZUludChuZXdUb3BIZWlnaHQpIC8gMTAwKSAqXG5cdFx0XHRcdFx0dGhpc1tzcGxpdFNjcmVlbkVsZW1lbnRTeW1ib2xdLm9mZnNldEhlaWdodDtcblxuXHRcdFx0XHR0b3BQYW5lbC5zdHlsZS5oZWlnaHQgPSBgJHtuZXdUb3BIZWlnaHRQeH1weGA7XG5cdFx0XHRcdGJvdHRvbVBhbmVsLnN0eWxlLmhlaWdodCA9IGBjYWxjKDEwMCUgLSAke25ld1RvcEhlaWdodFB4fXB4IC0gJHtkcmFnZ2VyV2lkdGh9KWA7IC8vIDVweCBpcyBkcmFnZ2VyIGhlaWdodFxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgY29udGFpbmVyT2Zmc2V0TGVmdCA9IHNlbGZbc3BsaXRTY3JlZW5FbGVtZW50U3ltYm9sXS5vZmZzZXRMZWZ0O1xuXHRcdFx0XHRjb25zdCBsZWZ0UGFuZWwgPSBzZWxmW3N0YXJ0UGFuZWxFbGVtZW50U3ltYm9sXTtcblx0XHRcdFx0Y29uc3QgcmlnaHRQYW5lbCA9IHNlbGZbZW5kUGFuZWxFbGVtZW50U3ltYm9sXTtcblx0XHRcdFx0bGV0IG5ld0xlZnRXaWR0aCA9IGUuY2xpZW50WCAtIGNvbnRhaW5lck9mZnNldExlZnQ7XG5cblx0XHRcdFx0Y29uc3QgbWluID0gdGhpcy5nZXRPcHRpb24oXCJkaW1lbnNpb25cIikubWluO1xuXHRcdFx0XHRjb25zdCBtYXggPSB0aGlzLmdldE9wdGlvbihcImRpbWVuc2lvblwiKS5tYXg7XG5cblx0XHRcdFx0Y29uc3QgbGVmdEFzUGVyY2VudCA9XG5cdFx0XHRcdFx0KG5ld0xlZnRXaWR0aCAvIHRoaXNbc3BsaXRTY3JlZW5FbGVtZW50U3ltYm9sXS5vZmZzZXRXaWR0aCkgKiAxMDA7XG5cblx0XHRcdFx0aWYgKHBhcnNlSW50KG1pbikgPiBsZWZ0QXNQZXJjZW50KSB7XG5cdFx0XHRcdFx0bmV3TGVmdFdpZHRoID0gbWluO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHBhcnNlSW50KG1heCkgPCBsZWZ0QXNQZXJjZW50KSB7XG5cdFx0XHRcdFx0bmV3TGVmdFdpZHRoID0gbWF4O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG5ld0xlZnRXaWR0aCA9IGxlZnRBc1BlcmNlbnQgKyBcIiVcIjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGxlZnRQYW5lbC5zdHlsZS53aWR0aCA9IGAke25ld0xlZnRXaWR0aH1gO1xuXHRcdFx0XHRyaWdodFBhbmVsLnN0eWxlLndpZHRoID0gYGNhbGMoMTAwJSAtICR7bmV3TGVmdFdpZHRofSAtICR7ZHJhZ2dlcldpZHRofSlgOyAvLyA1cHggaXMgZHJhZ2dlciB3aWR0aFxuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRjb25zdCBkcmFnRXZlbnRIYW5kbGVyID0gKGUpID0+IHtcblx0XHRcdHNlbGZbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKS5pc0RyYWdnaW5nID0gZmFsc2U7XG5cdFx0XHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsIGV2ZW50TGlzdGVuZXIpO1xuXHRcdFx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgZXZlbnRMaXN0ZW5lcik7XG5cdFx0fTtcblxuXHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIiwgZXZlbnRMaXN0ZW5lcik7XG5cdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgZHJhZ0V2ZW50SGFuZGxlcik7XG5cdH0pO1xuXG5cdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmF0dGFjaE9ic2VydmVyKFxuXHRcdG5ldyBPYnNlcnZlcigoKSA9PiB7XG5cdFx0XHRsZXQgYXBwbHkgPSBmYWxzZTtcblxuXHRcdFx0aWYgKFxuXHRcdFx0XHRsYXN0RGltZW5zaW9uICE9PSB0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRTdWJqZWN0KCkuY3VycmVudERpbWVuc2lvblxuXHRcdFx0KSB7XG5cdFx0XHRcdGxhc3REaW1lbnNpb24gPSB0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRTdWJqZWN0KCkuY3VycmVudERpbWVuc2lvbjtcblx0XHRcdFx0YXBwbHkgPSB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAobGFzdFR5cGUgIT09IHRoaXMuZ2V0T3B0aW9uKFwic3BsaXRUeXBlXCIpKSB7XG5cdFx0XHRcdGxhc3RUeXBlID0gdGhpcy5nZXRPcHRpb24oXCJzcGxpdFR5cGVcIik7XG5cdFx0XHRcdGFwcGx5ID0gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGFwcGx5KSB7XG5cdFx0XHRcdGFwcGx5UGFuZWxEaW1lbnNpb25zLmNhbGwodGhpcyk7XG5cdFx0XHR9XG5cdFx0fSksXG5cdCk7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInNwbGl0LXBhbmVsXCIgcGFydD1cImNvbnRyb2xcIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJzdGFydFBhbmVsXCIgY2xhc3M9XCJwYW5lbFwiIHBhcnQ9XCJzdGFydFBhbmVsXCI+XG4gICAgICAgICAgICAgICAgPHNsb3QgbmFtZT1cInN0YXJ0XCI+PC9zbG90PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiZHJhZ2dlclwiIHBhcnQ9XCJkcmFnZ2VyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImhhbmRsZVwiIHBhcnQ9XCJoYW5kbGVcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImVuZFBhbmVsXCIgY2xhc3M9XCJwYW5lbFwiIHBhcnQ9XCJlbmRQYW5lbFwiPlxuICAgICAgICAgICAgICAgIDxzbG90IG5hbWU9XCJlbmRcIj48L3Nsb3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+YDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KFNwbGl0UGFuZWwpO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywgMjAyNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IFBhbmVsU3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgUGFuZWxTdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcblx0UGFuZWxTdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIHBhbmVsIHsgXG46YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItZm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsXFxcIlF1aWNrc2FuZFxcXCIsXFxcIlNlZ29lIFVJXFxcIixcXFwiUm9ib3RvXFxcIixcXFwiT3h5Z2VuXFxcIixcXFwiVWJ1bnR1XFxcIixcXFwiQ2FudGFyZWxsXFxcIixcXFwiRmlyYSBTYW5zXFxcIixcXFwiRHJvaWQgU2Fuc1xcXCIsXFxcIkhlbHZldGljYSBOZXVlXFxcIixBcmlhbCxzYW5zLXNlcmlmLFxcXCJBcHBsZSBDb2xvciBFbW9qaVxcXCIsXFxcIlNlZ29lIFVJIEVtb2ppXFxcIixcXFwiU2Vnb2UgVUkgU3ltYm9sXFxcIjstLW1vbnN0ZXItZm9udC1mYW1pbHktbW9ub3NwYWNlOlxcXCJDb25zb2xhc1xcXCIsXFxcIkNvdXJpZXIgTmV3XFxcIixcXFwiUm9ib3RvIE1vbm9cXFwiLFxcXCJTb3VyY2UgQ29kZSBQcm9cXFwiLFxcXCJGaXJhIE1vbm9cXFwiLG1vbm9zcGFjZTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMSk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTYpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0yKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNil9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTYpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0yKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNCk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTYpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMyk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi01KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMik7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTQpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0zKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTQpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNik7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMik7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS01KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTQpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS01KTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMyl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNil9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy02KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNil9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTE6IzgzM2FiNDstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMjojZmQxZDFkOy0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0zOiNmY2IwNDU7LS1tb25zdGVyLWJveC1zaGFkb3ctMTpub25lOy0tbW9uc3Rlci1ib3gtc2hhZG93LTI6LTFweCAxcHggMTBweCAxcHggaHNsYSgwLDAlLDc2JSwuNjEpOy0tbW9uc3Rlci10ZXh0LXNoYWRvdzpub25lOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtMSk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC02KTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTYpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWhvdmVyLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtMik7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXdpZHRoOjJweDstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItc3R5bGU6c29saWQ7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXJhZGl1czowOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNSk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWhvdmVyLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLXRoZW1lLW9uLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLXRoZW1lLW9uLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNSk7LS1tb25zdGVyLXRoZW1lLW9mZi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLW9mZi1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItdGhlbWUtb24tY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci10aGVtZS1vbi1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLW9mZi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLW9mZi1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1ib3JkZXItc3R5bGU6c29saWQ7LS1tb25zdGVyLWJvcmRlci13aWR0aDozcHg7LS1tb25zdGVyLWJvcmRlci1yYWRpdXM6MDstLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2U6LTRweDstLW1vbnN0ZXItei1pbmRleC1kZWZhdWx0OjA7LS1tb25zdGVyLXotaW5kZXgtb3V0bGluZToxMDstLW1vbnN0ZXItei1pbmRleC1kcm9wZG93bjoyMDA7LS1tb25zdGVyLXotaW5kZXgtZHJvcGRvd24tb3ZlcmxheToyMTA7LS1tb25zdGVyLXotaW5kZXgtc3RpY2t5OjMwMDstLW1vbnN0ZXItei1pbmRleC1zdGlja3ktb3ZlcmxheTozMTA7LS1tb25zdGVyLXotaW5kZXgtZml4ZWQ6NDAwOy0tbW9uc3Rlci16LWluZGV4LWZpeGVkLW92ZXJsYXk6NDEwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLWJhY2tkcm9wOjUwMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1iYWNrZHJvcC1vdmVybGF5OjUxMDstLW1vbnN0ZXItei1pbmRleC1vZmZjYW52YXM6NjAwOy0tbW9uc3Rlci16LWluZGV4LW9mZmNhbnZhcy1vdmVybGF5OjYxMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbDo3MDA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtb3ZlcmxheTo3MTA7LS1tb25zdGVyLXotaW5kZXgtcG9wb3Zlcjo4MDA7LS1tb25zdGVyLXotaW5kZXgtcG9wb3Zlci1vdmVybGF5OjgxMDstLW1vbnN0ZXItei1pbmRleC10b29sdGlwOjgwMDstLW1vbnN0ZXItei1pbmRleC10b29sdGlwLW92ZXJsYXk6OTEwOy0tbW9uc3Rlci1zcGFjZS0wOjA7LS1tb25zdGVyLXNwYWNlLTE6MnB4Oy0tbW9uc3Rlci1zcGFjZS0yOjRweDstLW1vbnN0ZXItc3BhY2UtMzo2cHg7LS1tb25zdGVyLXNwYWNlLTQ6MTBweDstLW1vbnN0ZXItc3BhY2UtNToxNnB4Oy0tbW9uc3Rlci1zcGFjZS02OjI2cHg7LS1tb25zdGVyLXNwYWNlLTc6NDJweDstLW1vbnN0ZXItYnJlYWtwb2ludC0wOjQ4MHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTQ6NDgwcHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtNzo3NjhweDstLW1vbnN0ZXItYnJlYWtwb2ludC05Ojk5MnB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTEyOjEyMDBweDstLW1vbnN0ZXItZHJhZ2dlci13aWR0aDoycHg7LS1tb25zdGVyLWRyYWdnZXItaGFuZGxlLXdpZHRoOjRweDstLW1vbnN0ZXItZHJhZ2dlci1oYW5kbGUtaGVpZ2h0OjUwcHh9LmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmlubGluZXtkaXNwbGF5OmlubGluZX0uaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5ncmlke2Rpc3BsYXk6Z3JpZH0uaW5saW5lLWdyaWR7ZGlzcGxheTppbmxpbmUtZ3JpZH0uZmxleHtkaXNwbGF5OmZsZXh9LmlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXh9LmhpZGRlbiwuaGlkZSwubm9uZXtkaXNwbGF5Om5vbmV9LnZpc2libGV7dmlzaWJpbGl0eTp2aXNpYmxlfS5pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW59Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMSwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0yLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci0we2JvcmRlci1yYWRpdXM6MDtib3JkZXItc3R5bGU6bm9uZTtib3JkZXItd2lkdGg6MH0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMiwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMSwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMiwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMywubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS1kaXNhYmxlZC0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xKX0ubW9uc3Rlci10aGVtZS1zZWNvbmRhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLXRoZW1lLXRlcnRpYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItdGhlbWUtZGVzdHJ1Y3RpdmUtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xKX0ubW9uc3Rlci10aGVtZS1zdWNjZXNzLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTEpfS5tb25zdGVyLXRoZW1lLXdhcm5pbmctMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMSl9Lm1vbnN0ZXItdGhlbWUtZXJyb3ItMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0xKX0ubW9uc3Rlci10aGVtZS1zZWxlY3Rpb24tMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfS5tb25zdGVyLWJvcmRlci1jb2xvci0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWJvcmRlci0xKX0ubW9uc3Rlci1jb2xvci1uZXV0cmFsLTF7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWNvbG9yLXByaW1hcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMSl9Lm1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xKX0ubW9uc3Rlci1jb2xvci13YXJuaW5nLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTEpfS5tb25zdGVyLWNvbG9yLWVycm9yLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMSl9Lm1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktZGlzYWJsZWQtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMil9Lm1vbnN0ZXItdGhlbWUtc2Vjb25kYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci10aGVtZS10ZXJ0aWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLXRoZW1lLWRlc3RydWN0aXZlLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMil9Lm1vbnN0ZXItdGhlbWUtc3VjY2Vzcy0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yKX0ubW9uc3Rlci10aGVtZS13YXJuaW5nLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTIpfS5tb25zdGVyLXRoZW1lLWVycm9yLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMil9Lm1vbnN0ZXItdGhlbWUtc2VsZWN0aW9uLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yKX0ubW9uc3Rlci1ib3JkZXItY29sb3ItMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ib3JkZXItMil9Lm1vbnN0ZXItY29sb3ItbmV1dHJhbC0ye2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1jb2xvci1wcmltYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItY29sb3ItdGVydGlhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTIpfS5tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMil9Lm1vbnN0ZXItY29sb3Itd2FybmluZy0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0yKX0ubW9uc3Rlci1jb2xvci1lcnJvci0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTIpfS5tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMil9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTMpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTMpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMyl9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0zKX0ubW9uc3Rlci10aGVtZS1lcnJvci0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTMpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyl9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTMpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtM3tjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zKX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTMpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMyl9Lm1vbnN0ZXItY29sb3ItZXJyb3ItM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0zKX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTMpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS1kaXNhYmxlZC00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00KX0ubW9uc3Rlci10aGVtZS1zZWNvbmRhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLXRoZW1lLXRlcnRpYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItdGhlbWUtZGVzdHJ1Y3RpdmUtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00KX0ubW9uc3Rlci10aGVtZS1zdWNjZXNzLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQpfS5tb25zdGVyLXRoZW1lLXdhcm5pbmctNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNCl9Lm1vbnN0ZXItdGhlbWUtZXJyb3ItNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci00KX0ubW9uc3Rlci10aGVtZS1zZWxlY3Rpb24tNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQpfS5tb25zdGVyLWJvcmRlci1jb2xvci00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWJvcmRlci00KX0ubW9uc3Rlci1jb2xvci1uZXV0cmFsLTR7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLWNvbG9yLXByaW1hcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNCl9Lm1vbnN0ZXItY29sb3Itc3VjY2Vzcy00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00KX0ubW9uc3Rlci1jb2xvci13YXJuaW5nLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQpfS5tb25zdGVyLWNvbG9yLWVycm9yLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItNCl9Lm1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00KX0ubW9uc3Rlci10aGVtZS1jb250cm9sLWNvbnRhaW5lci0xLC5tb25zdGVyLXRoZW1lLWNvbnRyb2wtcm93LTF7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLWNvbG9yKX0ubW9uc3Rlci10aGVtZS1jb250cm9sLWNvbnRhaW5lci0xLC5tb25zdGVyLXRoZW1lLWNvbnRyb2wtZWxlbWVudCwubW9uc3Rlci10aGVtZS1jb250cm9sLXJvdy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29sb3IpfS5tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1iZy1jb2xvcil9Lm1vbnN0ZXItdGhlbWUtYmFja2dyb3VuZC1pbmhlcml0e2JhY2tncm91bmQtY29sb3I6aW5oZXJpdCFpbXBvcnRhbnR9Lm1vbnN0ZXItdGhlbWUtb257YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLW9uLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLW9uLWNvbG9yKX0ubW9uc3Rlci10aGVtZS1vZmZ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLW9mZi1iZy1jb2xvcik7Y29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1vZmYtY29sb3IpfWRpdltkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXJde2JhY2tncm91bmQ6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2Rpc3BsYXk6bm9uZTtwYWRkaW5nOjEuMWVtO3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW1vZGFsKX1bZGF0YS1wb3BwZXItYXJyb3ddLFtkYXRhLXBvcHBlci1hcnJvd106YmVmb3Jle2JhY2tncm91bmQ6aW5oZXJpdDtoZWlnaHQ6Y2FsYyhtYXgodmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSksIC0xKnZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpKSoyKTtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDpjYWxjKG1heCh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSwgLTEqdmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkpKjIpfVtkYXRhLXBvcHBlci1hcnJvd117dmlzaWJpbGl0eTpoaWRkZW59W2RhdGEtcG9wcGVyLWFycm93XTpiZWZvcmV7Ym94LXNpemluZzpib3JkZXItYm94O2NvbnRlbnQ6XFxcIlxcXCI7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyk7dmlzaWJpbGl0eTp2aXNpYmxlfWRpdltkYXRhLXBvcHBlci1wbGFjZW1lbnRePXRvcF0+W2RhdGEtcG9wcGVyLWFycm93XXtib3R0b206Y2FsYyh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSAtIHZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKS8yKX1kaXZbZGF0YS1wb3BwZXItcGxhY2VtZW50Xj10b3BdPltkYXRhLXBvcHBlci1hcnJvd106YmVmb3Jle2JvcmRlci1ib3R0b206dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpIHZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKSB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLWxlZnQ6dHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0OnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSB2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci10b3A6dHJhbnNwYXJlbnR9ZGl2W2RhdGEtcG9wcGVyLXBsYWNlbWVudF49Ym90dG9tXT5bZGF0YS1wb3BwZXItYXJyb3dde3RvcDpjYWxjKHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpIC0gdmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpKX1kaXZbZGF0YS1wb3BwZXItcGxhY2VtZW50Xj1ib3R0b21dPltkYXRhLXBvcHBlci1hcnJvd106YmVmb3Jle2JvcmRlci1ib3R0b206dHJhbnNwYXJlbnQ7Ym9yZGVyLWxlZnQ6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpIHZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKSB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJpZ2h0OnRyYW5zcGFyZW50O2JvcmRlci10b3A6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpIHZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKSB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9ZGl2W2RhdGEtcG9wcGVyLXBsYWNlbWVudF49bGVmdF0+W2RhdGEtcG9wcGVyLWFycm93XXtyaWdodDpjYWxjKHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpIC0gdmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpKX1kaXZbZGF0YS1wb3BwZXItcGxhY2VtZW50Xj1sZWZ0XT5bZGF0YS1wb3BwZXItYXJyb3ddOmJlZm9yZXtib3JkZXItYm90dG9tOnRyYW5zcGFyZW50O2JvcmRlci1sZWZ0OnRyYW5zcGFyZW50O2JvcmRlci1yaWdodDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkgdmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItdG9wOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSB2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfWRpdltkYXRhLXBvcHBlci1wbGFjZW1lbnRePXJpZ2h0XT5bZGF0YS1wb3BwZXItYXJyb3dde2xlZnQ6Y2FsYyh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSAtIHZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKS8yKX1kaXZbZGF0YS1wb3BwZXItcGxhY2VtZW50Xj1yaWdodF0+W2RhdGEtcG9wcGVyLWFycm93XTpiZWZvcmV7Ym9yZGVyLWJvdHRvbTp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkgdmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItbGVmdDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkgdmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmlnaHQ6dHJhbnNwYXJlbnQ7Ym9yZGVyLXRvcDp0cmFuc3BhcmVudH1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0uZmxleHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd30ubW9uc3Rlci1iYWRnZS1wcmltYXJ5e3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS1wcmltYXJ5LC5tb25zdGVyLWJhZGdlLXByaW1hcnktcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2UtcHJpbWFyeS1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLXNlY29uZGFyeXtwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2Utc2Vjb25kYXJ5LC5tb25zdGVyLWJhZGdlLXNlY29uZGFyeS1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2Utc2Vjb25kYXJ5LXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2UtdGVydGlhcnl7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLXRlcnRpYXJ5LC5tb25zdGVyLWJhZGdlLXRlcnRpYXJ5LXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2UtdGVydGlhcnktcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS1kZXN0cnVjdGl2ZXtwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2UtZGVzdHJ1Y3RpdmUsLm1vbnN0ZXItYmFkZ2UtZGVzdHJ1Y3RpdmUtcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMSk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1kZXN0cnVjdGl2ZS1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLXN1Y2Nlc3N7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLXN1Y2Nlc3MsLm1vbnN0ZXItYmFkZ2Utc3VjY2Vzcy1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTEpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1zdWNjZXNzLXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2Utd2FybmluZ3twYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2Utd2FybmluZywubW9uc3Rlci1iYWRnZS13YXJuaW5nLXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMSk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTEpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLXdhcm5pbmctcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS1lcnJvcntwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2UtZXJyb3IsLm1vbnN0ZXItYmFkZ2UtZXJyb3ItcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMSk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0xKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1lcnJvci1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfTpob3N0e2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmJsb2NrO2hlaWdodDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO2hlaWdodDpmaWxsLWF2YWlsYWJsZTtoZWlnaHQ6LW1vei1hdmFpbGFibGU7aGVpZ2h0OnN0cmV0Y2g7b3ZlcmZsb3c6YXV0bzt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtib3JkZXI6MDtib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0Oi13ZWJraXQtZmlsbC1hdmFpbGFibGU7aGVpZ2h0OmZpbGwtYXZhaWxhYmxlO2hlaWdodDotbW96LWF2YWlsYWJsZTtoZWlnaHQ6c3RyZXRjaDttYXJnaW46MDtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6YXV0bztwYWRkaW5nOjA7c2Nyb2xsYmFyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKSB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7c2Nyb2xsYmFyLXdpZHRoOnRoaW47Ly9wb3NpdGlvbjpmaXhlZDsvL3RvcDowOy8vbGVmdDowOy8vcmlnaHQ6MDsvL2JvdHRvbTowOy8vb3ZlcmZsb3c6YXV0bzsvL2JveC1zaXppbmc6Ym9yZGVyLWJveH0gXG59YCxcblx0XHQwLFxuXHQpO1xufSBjYXRjaCAoZSkge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpLFxuXHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0ZSArIFwiXCIsXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdEN1c3RvbUVsZW1lbnQsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHsgRGVhZE1hbnNTd2l0Y2ggfSBmcm9tIFwiLi4vLi4vdXRpbC9kZWFkbWFuc3N3aXRjaC5tanNcIjtcblxuaW1wb3J0IHsgUGFuZWxTdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9wYW5lbC5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgUGFuZWwgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgUGFuZWxFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiUGFuZWxFbGVtZW50XCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHJlc2l6ZU9ic2VydmVyU3ltYm9sID0gU3ltYm9sKFwicmVzaXplT2JzZXJ2ZXJcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHRpbWVyQ2FsbGJhY2tTeW1ib2wgPSBTeW1ib2woXCJ0aW1lckNhbGxiYWNrXCIpO1xuXG4vKipcbiAqIEEgU2xpZGVyXG4gKlxuICogQGZyYWdtZW50cyAvZnJhZ21lbnRzL2NvbXBvbmVudHMvbGF5b3V0L3BhbmVsL1xuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2xheW91dC9wYW5lbC1zaW1wbGVcbiAqXG4gKiBAc2luY2UgMy41NC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgVGhlIFBhbmVsIGNvbXBvbmVudCBpcyB1c2VkIHRvIGRpc3BsYXkgYSBwYW5lbCwgaXNuJ3QgdGhhdCBjb29sP1xuICovXG5jbGFzcyBQYW5lbCBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9sYXlvdXQvcGFuZWxcIik7XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgSFRNTCB0YWcsIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1vcHRpb25zYCBtdXN0IGJlIHVzZWQuXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZy9lbi9kb2MvI2NvbmZpZ3VyYXRlLWEtbW9uc3Rlci1jb250cm9sfVxuXHQgKlxuXHQgKiBUaGUgaW5kaXZpZHVhbCBjb25maWd1cmF0aW9uIHZhbHVlcyBjYW4gYmUgZm91bmQgaW4gdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIFRlbXBsYXRlIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbiBNYWluIHRlbXBsYXRlXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBoZWlnaHRBZGp1c3RtZW50IEhlaWdodCBhZGp1c3RtZW50XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdH0sXG5cdFx0XHRoZWlnaHRBZGp1c3RtZW50OiA0LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0LlZpZXdlcn1cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcblx0XHRpbml0RXZlbnRIYW5kbGVyLmNhbGwodGhpcyk7XG5cblx0XHRjYWxjSGVpZ2h0LmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBkb20gYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKi9cblx0Y29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblx0XHRhdHRhY2hSZXNpemVPYnNlcnZlci5jYWxsKHRoaXMpO1xuXG5cdFx0Ly8gZGlzYWJsZSBzY3JvbGxpbmcgaW4gcGFyZW50IG5vZGVcblx0XHRpZiAodGhpcy5wYXJlbnROb2RlICYmIHRoaXMucGFyZW50Tm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHR0aGlzLnBhcmVudE5vZGUuc3R5bGUub3ZlcmZsb3cgPSBcImhpZGRlblwiO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGRvbSBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqL1xuXHRkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHRzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuXHRcdGRpc2Nvbm5lY3RSZXNpemVPYnNlcnZlci5jYWxsKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1wYW5lbFwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge0NTU1N0eWxlU2hlZXRbXX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiBbUGFuZWxTdHlsZVNoZWV0XTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNhbGNIZWlnaHQoKSB7XG5cdHRoaXMuc3R5bGUuYm94U2l6aW5nID0gXCJib3JkZXItYm94XCI7XG5cblx0Y29uc3QgaGVpZ2h0ID0gY2FsY3VsYXRlTWF4aW11bUhlaWdodC5jYWxsKHRoaXMsIHRoaXMpO1xuXHRpZiAoaGVpZ2h0IDwgMCkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXMuc3R5bGUuaGVpZ2h0ID0gYCR7aGVpZ2h0fXB4YDtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIG1heGltdW0gaGVpZ2h0IG9mIGFuIGVsZW1lbnQgYmFzZWQgb24gdGhlIHdpbmRvdydzIGlubmVyIGhlaWdodFxuICogQHBhcmFtIGVsZW1lbnRcbiAqIEByZXR1cm4geyp9XG4gKi9cbmZ1bmN0aW9uIGNhbGN1bGF0ZU1heGltdW1IZWlnaHQoZWxlbWVudCkge1xuXHRsZXQgdG90YWxCb3R0b21Cb3JkZXIgPSAwO1xuXHRsZXQgdG90YWxCb3R0b21QYWRkaW5nID0gMDtcblx0bGV0IHRvdGFsQm90dG9tTWFyZ2luID0gMDtcblx0bGV0IHRvdGFsT3V0bGluZUhlaWdodCA9IDA7XG5cdGxldCB0b3RhbEJveFNoYWRvd0hlaWdodCA9IDA7XG5cdGxldCBjdXJyZW50RWxlbWVudCA9IGVsZW1lbnQ7XG5cblx0Ly8gR2V0IHRoZSBkaXN0YW5jZSBmcm9tIHRoZSB0b3Agb2YgdGhlIGVsZW1lbnQgdG8gdGhlIHRvcCBvZiB0aGUgdmlld3BvcnRcblx0Y29uc3QgZGlzdGFuY2VGcm9tVG9wID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7XG5cblx0Ly8gTG9vcCB0aHJvdWdoIHRoZSBlbGVtZW50cyB1cCB0byB0aGUgYm9keSB0byBzdW0gdXAgdGhlIGJvdHRvbSBib3JkZXJzLCBwYWRkaW5nLCBhbmQgbWFyZ2luXG5cdHdoaWxlIChjdXJyZW50RWxlbWVudCAmJiBjdXJyZW50RWxlbWVudCAhPT0gZG9jdW1lbnQuYm9keSkge1xuXHRcdGNvbnN0IHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoY3VycmVudEVsZW1lbnQpO1xuXG5cdFx0Ly8gQm94IHNpemluZ1xuXHRcdGNvbnN0IGJveFNpemluZyA9IHN0eWxlLmJveFNpemluZztcblxuXHRcdC8vIEJvcmRlcnMsIHBhZGRpbmcsIGFuZCBtYXJnaW5cblx0XHRjb25zdCBib3JkZXJCb3R0b21XaWR0aCA9IHBhcnNlRmxvYXQoc3R5bGUuYm9yZGVyQm90dG9tV2lkdGgpO1xuXHRcdGNvbnN0IHBhZGRpbmdCb3R0b20gPSBwYXJzZUZsb2F0KHN0eWxlLnBhZGRpbmdCb3R0b20pO1xuXHRcdGNvbnN0IG1hcmdpbkJvdHRvbSA9IHBhcnNlRmxvYXQoc3R5bGUubWFyZ2luQm90dG9tKTtcblxuXHRcdC8vIE91dGxpbmUgYW5kIGJveC1zaGFkb3dcblx0XHRjb25zdCBvdXRsaW5lSGVpZ2h0ID0gcGFyc2VGbG9hdChzdHlsZS5vdXRsaW5lV2lkdGgpO1xuXHRcdC8vIFRoaXMgaXMgYSBzaW1wbGlmaWNhdGlvbjsgYm94LXNoYWRvdyBpcyBtb3JlIGNvbXBsZXggdG8gcGFyc2Vcblx0XHRjb25zdCBib3hTaGFkb3dWZXJ0aWNhbCA9IHBhcnNlRmxvYXQoc3R5bGUuYm94U2hhZG93LnNwbGl0KFwiIFwiKVszXSB8fCAwKTtcblxuXHRcdC8vIEFjY3VtdWxhdGUgdmFsdWVzXG5cdFx0dG90YWxCb3R0b21Cb3JkZXIgKz0gaXNOYU4oYm9yZGVyQm90dG9tV2lkdGgpID8gMCA6IGJvcmRlckJvdHRvbVdpZHRoO1xuXHRcdHRvdGFsQm90dG9tUGFkZGluZyArPVxuXHRcdFx0aXNOYU4ocGFkZGluZ0JvdHRvbSkgfHwgYm94U2l6aW5nID09PSBcImJvcmRlci1ib3hcIiA/IDAgOiBwYWRkaW5nQm90dG9tO1xuXHRcdHRvdGFsQm90dG9tTWFyZ2luICs9IGlzTmFOKG1hcmdpbkJvdHRvbSkgPyAwIDogbWFyZ2luQm90dG9tO1xuXHRcdHRvdGFsT3V0bGluZUhlaWdodCArPSBpc05hTihvdXRsaW5lSGVpZ2h0KSA/IDAgOiBvdXRsaW5lSGVpZ2h0O1xuXHRcdHRvdGFsQm94U2hhZG93SGVpZ2h0ICs9IGlzTmFOKGJveFNoYWRvd1ZlcnRpY2FsKSA/IDAgOiBib3hTaGFkb3dWZXJ0aWNhbDtcblxuXHRcdGN1cnJlbnRFbGVtZW50ID0gY3VycmVudEVsZW1lbnQucGFyZW50Tm9kZSB8fCBjdXJyZW50RWxlbWVudC5ob3N0O1xuXHR9XG5cblx0Ly8gQ2FsY3VsYXRlIHRoZSBtYXhpbXVtIGhlaWdodCBieSBzdWJ0cmFjdGluZyB0aGUgZGlzdGFuY2UsIGJvcmRlcnMsIHBhZGRpbmcsIG1hcmdpbiwgb3V0bGluZSwgYW5kIGJveC1zaGFkb3cgZnJvbSB0aGUgd2luZG93J3MgaW5uZXIgaGVpZ2h0XG5cdGNvbnN0IG1heGltdW1IZWlnaHQgPVxuXHRcdHdpbmRvdy5pbm5lckhlaWdodCAtXG5cdFx0ZGlzdGFuY2VGcm9tVG9wIC1cblx0XHR0b3RhbEJvdHRvbUJvcmRlciAtXG5cdFx0dG90YWxCb3R0b21QYWRkaW5nIC1cblx0XHR0b3RhbEJvdHRvbU1hcmdpbiAtXG5cdFx0dG90YWxPdXRsaW5lSGVpZ2h0IC1cblx0XHR0b3RhbEJveFNoYWRvd0hlaWdodDtcblx0cmV0dXJuIG1heGltdW1IZWlnaHQgKyB0aGlzLmdldE9wdGlvbihcImhlaWdodEFkanVzdG1lbnRcIik7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYXR0YWNoUmVzaXplT2JzZXJ2ZXIoKSB7XG5cdC8vIGFnYWluc3QgZmxpY2tlcmluZ1xuXHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXSA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XG5cdFx0aWYgKHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF0gaW5zdGFuY2VvZiBEZWFkTWFuc1N3aXRjaCkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXS50b3VjaCgpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGRlbGV0ZSB0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF0gPSBuZXcgRGVhZE1hbnNTd2l0Y2goMjAwLCAoKSA9PiB7XG5cdFx0XHRjYWxjSGVpZ2h0LmNhbGwodGhpcyk7XG5cdFx0fSk7XG5cdH0pO1xuXG5cdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdLm9ic2VydmUodGhpcy5vd25lckRvY3VtZW50LmJvZHkpO1xuXHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXS5vYnNlcnZlKGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBkaXNjb25uZWN0UmVzaXplT2JzZXJ2ZXIoKSB7XG5cdGlmICh0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXSBpbnN0YW5jZW9mIFJlc2l6ZU9ic2VydmVyKSB7XG5cdFx0dGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0uZGlzY29ubmVjdCgpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1NlbGVjdH1cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGluaXRDb250cm9sUmVmZXJlbmNlcygpIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0dGhpc1tQYW5lbEVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XCJbZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF1cIixcblx0KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpbml0RXZlbnRIYW5kbGVyKCkge1xuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udHJvbFwiIHBhcnQ9XCJjb250cm9sXCI+XG4gICAgICAgICAgICA8c2xvdD48L3Nsb3Q+XG4gICAgICAgIDwvZGl2PmA7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChQYW5lbCk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge1xuXHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRBVFRSSUJVVEVfUk9MRSxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0YXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2wsXG5cdEN1c3RvbUVsZW1lbnQsXG5cdGluaXRNZXRob2RTeW1ib2wsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRk9STV9SRUxPQUQsIEFUVFJJQlVURV9GT1JNX1VSTCB9IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGxvYWRBbmRBc3NpZ25Db250ZW50IH0gZnJvbSBcIi4vdXRpbC9mZXRjaC5tanNcIjtcblxuZXhwb3J0IHsgUmVsb2FkIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGludGVyc2VjdGlvbk9ic2VydmVyV2FzSW5pdGlhbGl6ZWQgPSBTeW1ib2woXCJ3YXNJbml0aWFsaXplZFwiKTtcblxuLyoqXG4gKiBUaGlzIEN1c3RvbUNvbnRyb2wgcmVsb2FkcyB0aGUgY29udGVudCBvZiBhIHVybCBhbmQgZW1iZWRzIGl0IGludG8gdGhlIGRvbS5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1hZ2VzL3JlbG9hZC5wbmdcIj5cbiAqXG4gKiBZb3UgY2FuIGNyZWF0ZSB0aGlzIGNvbnRyb2wgZWl0aGVyIGJ5IHNwZWNpZnlpbmcgdGhlIEhUTUwgdGFnIGA8bW9uc3Rlci1yZWxvYWQgLz5gIGRpcmVjdGx5IGluIHRoZSBIVE1MIG9yIHVzaW5nXG4gKiBKYXZhc2NyaXB0IHZpYSB0aGUgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItcmVsb2FkJyk7YCBtZXRob2QuXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItcmVsb2FkPjwvbW9uc3Rlci1yZWxvYWQ+XG4gKlxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge1JlbG9hZH0gZnJvbSAnQHNjaHVrYWkvY29tcG9uZW50LWZvcm0vc291cmNlL3JlbG9hZC5qcyc7XG4gKiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXJlbG9hZCcpO1xuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBBIHNpbXBsZSBjb25maWd1cmF0aW9uIGNhbiBsb29rIGxpa2UgdGhpc1xuICpcbiAqIGBgYGh0bWxcbiAqIDxzY3JpcHQgaWQ9XCJjb25maWdcIlxuICogICAgICAgICB0eXBlPVwiYXBwbGljYXRpb24vanNvblwiPlxuICogICAgIHtcbiAqICAgICAgICAgXCJ1cmxcIjogXCIuL2NvbnRlbnQuaHRtbFwiLFxuICogICAgIH1cbiAqIDwvc2NyaXB0PlxuICpcbiAqIDxtb25zdGVyLXJlbG9hZCBkYXRhLW1vbnN0ZXItb3B0aW9ucy1zZWxlY3Rvcj1cIiNjb25maWdcIj5cbiAqIDwvbW9uc3Rlci1yZWxvYWQ+XG4gKiBgYGBcbiAqXG4gKiBJZiB5b3Ugd2FudCB0byBkaXNwbGF5IGEgbG9hZGVyLCB5b3UgY2FuIGluc2VydCBhIGRpdiB3aXRoIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udGFpbmVyXCJgLlxuICogVGhlIGNvbnRlbnQgb2YgdGhpcyBkaXYgd2lsbCBiZSByZXBsYWNlZCBieSB0aGUgbG9hZGVkIGNvZGUuXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItcmVsb2FkIGRhdGEtbW9uc3Rlci1vcHRpb25zLXNlbGVjdG9yPVwiI2NvbmZpZ1wiPlxuICogPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRhaW5lclwiPlxuICogTE9BREVSIC4uLlxuICogPC9kaXY+XG4gKiA8L21vbnN0ZXItcmVsb2FkPlxuICogYGBgXG4gKlxuICogSWYgeW91IG5lZWQgYWRkaXRpb25hbCBzdHJ1Y3R1cmUsIHlvdSBjYW4gc2ltcGx5IHNwZWNpZnkgaXQuXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItcmVsb2FkIGRhdGEtbW9uc3Rlci1vcHRpb25zLXNlbGVjdG9yPVwiI2NvbmZpZ1wiPlxuICogPGRpdiBjbGFzcz1cInJvd1wiPlxuICogICA8ZGl2IGNsYXNzPVwiY29sXCIgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250YWluZXJcIj5cbiAqICAgICAgIExPQURFUiAuLi5cbiAqICAgPC9kaXY+XG4gKiA8L2Rpdj5cbiAqIDwvbW9uc3Rlci1yZWxvYWQ+XG4gKiBgYGBcbiAqXG4gKiBAZnJhZ21lbnRzIC9mcmFnbWVudHMvY29tcG9uZW50cy9mb3JtL3JlbG9hZC9cbiAqXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9mb3JtL3JlbG9hZC1zaW1wbGVcbiAqXG4gKiBAc2luY2UgMS4xMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBiZWF1dGlmdWwgcmVsb2FkIGNvbnRyb2xcbiAqIEBmaXJlcyBtb25zdGVyLWZldGNoZWRcbiAqL1xuY2xhc3MgUmVsb2FkIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9mb3JtL3JlbG9hZFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBIVE1MIHRhZywgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHVybD11bmRlZmluZWRcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHJlbG9hZD11bmRlZmluZWQgY3VycmVudGx5IHRoZSB2YWx1ZXMgZGVmaW5lZCBhcmUgYG9uc2hvd2AgYW5kIGBhbHdheXNgLiBUaGUgZGVmYXVsdCBgb25zaG93YCByZW1vdmVzIHRoZSBJbnRlcnNlY3Rpb25PYnNlcnZlci4gVGhpcyBtZWFucyB0aGF0IHRoZSBjb250ZW50IGlzIG9ubHkgbG9hZGVkIG9uY2UuIHJlbG9hZGluZyBvZiB0aGUgY29udGVudCBkb2VzIG5vdCBvY2N1ci5cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGZpbHRlcj11bmRlZmluZWQgZG9tIHNlbGVjdG9ycyB0byBzZWFyY2ggZm9yIGVsZW1lbnRzLCBpZiB1bmRlZmluZWQgdGhlbiBldmVyeXRoaW5nIGlzIHRha2VuXG5cdCAqIEBwcm9wZXJ0eSB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uUHJvY2Vzc29yW119IHByb2Nlc3NvcnNcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZldGNoIEZldGNoIFtzZWUgVXNpbmcgRmV0Y2ggbW96aWxsYS5vcmddKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GZXRjaF9BUEkvVXNpbmdfRmV0Y2gpXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5yZWRpcmVjdD1lcnJvclxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2gubWV0aG9kPUdFVFxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2gubW9kZT1zYW1lLW9yaWdpblxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2guY3JlZGVudGlhbHM9c2FtZS1vcmlnaW5cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZldGNoLmhlYWRlcnM9e1wiYWNjZXB0XCI6XCJ0ZXh0L2h0bWxcIn19XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oXG5cdFx0XHR7fSxcblx0XHRcdHN1cGVyLmRlZmF1bHRzLFxuXHRcdFx0e1xuXHRcdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZS5jYWxsKHRoaXMpLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRzaGFkb3dNb2RlOiBudWxsLFxuXHRcdFx0XHR1cmw6IG51bGwsXG5cdFx0XHRcdHJlbG9hZDogXCJvbnNob3dcIixcblx0XHRcdFx0ZmlsdGVyOiBudWxsLFxuXHRcdFx0XHRmZXRjaDoge1xuXHRcdFx0XHRcdHJlZGlyZWN0OiBcImVycm9yXCIsXG5cdFx0XHRcdFx0bWV0aG9kOiBcIkdFVFwiLFxuXHRcdFx0XHRcdG1vZGU6IFwic2FtZS1vcmlnaW5cIixcblx0XHRcdFx0XHRjcmVkZW50aWFsczogXCJzYW1lLW9yaWdpblwiLFxuXHRcdFx0XHRcdGhlYWRlcnM6IHtcblx0XHRcdFx0XHRcdGFjY2VwdDogXCJ0ZXh0L2h0bWxcIixcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdGluaXRPcHRpb25zRnJvbUFyZ3VtZW50cy5jYWxsKHRoaXMpLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgZGV0ZXJtaW5lcyB3aGljaCBhdHRyaWJ1dGVzIGFyZSB0byBiZSBtb25pdG9yZWQgYnkgYGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpYC5cblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nW119XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcblx0XHRjb25zdCBsaXN0ID0gc3VwZXIub2JzZXJ2ZWRBdHRyaWJ1dGVzO1xuXHRcdGxpc3QucHVzaChBVFRSSUJVVEVfRk9STV9VUkwpO1xuXHRcdHJldHVybiBsaXN0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqL1xuXHRbaW5pdE1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbaW5pdE1ldGhvZFN5bWJvbF0oKTtcblxuXHRcdC8vIGRhdGEtbW9uc3Rlci1vcHRpb25zXG5cdFx0dGhpc1thdHRyaWJ1dGVPYnNlcnZlclN5bWJvbF1bQVRUUklCVVRFX0ZPUk1fVVJMXSA9ICh1cmwpID0+IHtcblx0XHRcdGlmICh0aGlzLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfRk9STV9VUkwpKSB7XG5cdFx0XHRcdHRoaXMuc2V0T3B0aW9uKFwidXJsXCIsIG5ldyBVUkwodXJsLCBkb2N1bWVudC5sb2NhdGlvbikudG9TdHJpbmcoKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnNldE9wdGlvbihcInVybFwiLCB1bmRlZmluZWQpO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGludGVybmFsIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICogQHRocm93cyB7RXJyb3J9IG1pc3NpbmcgZGVmYXVsdCBzbG90XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBtaXNzaW5nIHVybFxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gd2Ugd29uJ3QgYmUgYWJsZSB0byByZWFkIHRoZSBkYXRhXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSByZXF1ZXN0IGZhaWxlZFxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gbm90IGZvdW5kXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB1bmRlZmluZWQgc3RhdHVzIG9yIHR5cGVcblx0ICogQGZpcmVzIG1vbnN0ZXItZmV0Y2hlZFxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5Gb3JtfVxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblx0XHRpbml0SW50ZXJzZWN0aW9uT2JzZXJ2ZXIuY2FsbCh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgaW50ZXJuYWwgYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItcmVsb2FkXCI7XG5cdH1cblxuXHQvKipcblx0ICogbG9hZCBjb250ZW50IGZyb20gdXJsXG5cdCAqXG5cdCAqIEl0IGlzIGltcG9ydGFudCB0byBrbm93IHRoYXQgd2l0aCB0aGlzIGZ1bmN0aW9uIHRoZSBsb2FkaW5nIGlzIGV4ZWN1dGVkXG5cdCAqIGRpcmVjdGx5LiBpdCBpcyBsb2FkZWQgYXMgd2VsbCB3aGVuIHRoZSBlbGVtZW50IGlzIG5vdCB2aXNpYmxlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3x1bmRlZmluZWR9IHVybFxuXHQgKi9cblx0ZmV0Y2godXJsKSB7XG5cdFx0aWYgKGlzU3RyaW5nKHVybCkgfHwgdXJsIGluc3RhbmNlb2YgVVJMKSB7XG5cdFx0XHR0aGlzLnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfRk9STV9VUkwsIGAke3VybH1gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbG9hZENvbnRlbnQuY2FsbCh0aGlzKTtcblx0fVxufVxuXG4vKipcbiAqIFRoaXMgYXR0cmlidXRlIGNhbiBiZSB1c2VkIHRvIHBhc3MgYSBVUkwgdG8gdGhpcyBzZWxlY3QuXG4gKlxuICogYGBgXG4gKiA8bW9uc3Rlci1zZWxlY3QgZGF0YS1tb25zdGVyLXVybD1cImh0dHBzOi8vZXhhbXBsZS5jb20vXCI+PC9tb25zdGVyLXNlbGVjdD5cbiAqIGBgYFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGluaXRPcHRpb25zRnJvbUFyZ3VtZW50cygpIHtcblx0Y29uc3Qgb3B0aW9ucyA9IHt9O1xuXG5cdGNvbnN0IHVybCA9IHRoaXMuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1VSTCk7XG5cblx0aWYgKGlzU3RyaW5nKHVybCkpIHtcblx0XHRvcHRpb25zW1widXJsXCJdID0gbmV3IFVSTCh1cmwsIGRvY3VtZW50LmxvY2F0aW9uKS50b1N0cmluZygpO1xuXHR9XG5cblx0aWYgKHRoaXMuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1JFTE9BRCkpIHtcblx0XHRvcHRpb25zW1wicmVsb2FkXCJdID0gdGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fUkVMT0FEKS50b0xvd2VyQ2FzZSgpO1xuXHR9XG5cblx0cmV0dXJuIG9wdGlvbnM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBtaXNzaW5nIGRlZmF1bHQgc2xvdFxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSBtaXNzaW5nIHVybFxuICogQHRocm93cyB7RXJyb3J9IHdlIHdvbid0IGJlIGFibGUgdG8gcmVhZCB0aGUgZGF0YVxuICogQHRocm93cyB7RXJyb3J9IHJlcXVlc3QgZmFpbGVkXG4gKiBAdGhyb3dzIHtFcnJvcn0gbm90IGZvdW5kXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5kZWZpbmVkIHN0YXR1cyBvciB0eXBlXG4gKiBAZmlyZXMgbW9uc3Rlci1mZXRjaGVkXG4gKi9cbmZ1bmN0aW9uIGluaXRJbnRlcnNlY3Rpb25PYnNlcnZlcigpIHtcblx0aWYgKHRoaXNbaW50ZXJzZWN0aW9uT2JzZXJ2ZXJXYXNJbml0aWFsaXplZF0gPT09IHRydWUpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzW2ludGVyc2VjdGlvbk9ic2VydmVyV2FzSW5pdGlhbGl6ZWRdID0gdHJ1ZTtcblxuXHRjb25zdCBvcHRpb25zID0ge1xuXHRcdHRocmVzaG9sZDogWzAuNV0sXG5cdH07XG5cblx0Y29uc3QgY2FsbGJhY2sgPSAoZW50cmllcywgb2JzZXJ2ZXIpID0+IHtcblx0XHRmb3IgKGNvbnN0IFssIGVudHJ5XSBvZiBlbnRyaWVzLmVudHJpZXMoKSkge1xuXHRcdFx0aWYgKGVudHJ5LmlzSW50ZXJzZWN0aW5nID09PSB0cnVlKSB7XG5cdFx0XHRcdC8vIHVuZGVmaW5lZCBvciBhbHdheXMgZG8gdGhlIHNhbWVcblx0XHRcdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwicmVsb2FkXCIpID09PSBcIm9uc2hvd1wiKSB7XG5cdFx0XHRcdFx0b2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRsb2FkQ29udGVudC5jYWxsKHRoaXMpLmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLnRvU3RyaW5nKCkpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS50b1N0cmluZygpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHRjb25zdCBvYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihjYWxsYmFjaywgb3B0aW9ucyk7XG5cdG9ic2VydmVyLm9ic2VydmUodGhpcyk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBtaXNzaW5nIGRlZmF1bHQgc2xvdFxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSBtaXNzaW5nIHVybFxuICogQHRocm93cyB7RXJyb3J9IHdlIHdvbid0IGJlIGFibGUgdG8gcmVhZCB0aGUgZGF0YVxuICogQHRocm93cyB7RXJyb3J9IHJlcXVlc3QgZmFpbGVkXG4gKiBAdGhyb3dzIHtFcnJvcn0gbm90IGZvdW5kXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5kZWZpbmVkIHN0YXR1cyBvciB0eXBlXG4gKiBAdGhyb3dzIHtFcnJvcn0gY2xpZW50IGVycm9yXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5kZWZpbmVkIHN0YXR1cyBvciB0eXBlXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZlxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqIEBmaXJlcyBtb25zdGVyLWZldGNoZWRcbiAqIEByZXR1cm4ge1Byb21pc2V9XG4gKi9cbmZ1bmN0aW9uIGxvYWRDb250ZW50KCkge1xuXHRjb25zdCB1cmwgPSB0aGlzLmdldE9wdGlvbihcInVybFwiLCB1bmRlZmluZWQpO1xuXHRpZiAoIWlzU3RyaW5nKHVybCkgfHwgdXJsID09PSBcIlwiKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibWlzc2luZyB1cmxcIik7XG5cdH1cblxuXHRjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb24oXCJmZXRjaFwiLCB7fSk7XG5cblx0bGV0IHBhcmVudE5vZGUgPSB0aGlzO1xuXHRpZiAodGhpcy5zaGFkb3dSb290KSB7XG5cdFx0cGFyZW50Tm9kZSA9IHRoaXMuc2hhZG93Um9vdDtcblx0fVxuXG5cdGxldCBjb250YWluZXIgPSBwYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3IoYFske0FUVFJJQlVURV9ST0xFfT1jb250YWluZXJdYCk7XG5cdGxldCBjdXJyZW50RGlzcGxheU1vZGUgPSBjb250YWluZXI/LnN0eWxlPy5kaXNwbGF5O1xuXG5cdGlmIChjdXJyZW50RGlzcGxheU1vZGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdGN1cnJlbnREaXNwbGF5TW9kZSA9IFwiaW5oZXJpdFwiO1xuXHR9XG5cblx0aWYgKCEoY29udGFpbmVyIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0Y29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0XHRjb250YWluZXIuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuXHRcdGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUsIFwiY29udGFpbmVyXCIpO1xuXHRcdHBhcmVudE5vZGUuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTtcblx0fVxuXG5cdHJldHVybiBsb2FkQW5kQXNzaWduQ29udGVudChjb250YWluZXIsIHVybCwgb3B0aW9ucywgdGhpcy5nZXRPcHRpb24oXCJmaWx0ZXJcIikpXG5cdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0aWYgKGN1cnJlbnREaXNwbGF5TW9kZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gY3VycmVudERpc3BsYXlNb2RlO1xuXHRcdFx0fVxuXHRcdH0pXG5cdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHR0aHJvdyBlO1xuXHRcdH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHRyZXR1cm4gdGhpcy5pbm5lckhUTUw7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChSZWxvYWQpO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBDdXN0b21FbGVtZW50LCBhdHRyaWJ1dGVPYnNlcnZlclN5bWJvbCB9IGZyb20gXCIuL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IEN1c3RvbUNvbnRyb2wgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgYXR0YWNoZWRJbnRlcm5hbFN5bWJvbCA9IFN5bWJvbChcImF0dGFjaGVkSW50ZXJuYWxcIik7XG5cbi8qKlxuICogVGhpcyBpcyBhIGJhc2UgY2xhc3MgZm9yIGNyZWF0aW5nIGN1c3RvbSBjb250cm9scyB1c2luZyB0aGUgcG93ZXIgb2YgQ3VzdG9tRWxlbWVudC5cbiAqXG4gKiBBZnRlciBkZWZpbmluZyBhIGBDdXN0b21FbGVtZW50YCwgdGhlIGByZWdpc3RlckN1c3RvbUVsZW1lbnRgIG1ldGhvZCBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgY2xhc3MgbmFtZS4gT25seSB0aGVuXG4gKiB3aWxsIHRoZSB0YWcgZGVmaW5lZCB2aWEgdGhlIGBnZXRUYWdgIG1ldGhvZCBiZSBtYWRlIGtub3duIHRvIHRoZSBET00uXG4gKlxuICogVGhpcyBjb250cm9sIHVzZXMgYGF0dGFjaEludGVybmFscygpYCB0byBpbnRlZ3JhdGUgdGhlIGNvbnRyb2wgaW50byBhIGZvcm0uIElmIHRoZSB0YXJnZXQgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydFxuICogdGhpcyBtZXRob2QsIHRoZSBbcG9seWZpbGxdKGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2VsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsKSBjYW4gYmUgdXNlZC5cbiAqXG4gKiBZb3UgY2FuIGNyZWF0ZSB0aGUgb2JqZWN0IHVzaW5nIHRoZSBmdW5jdGlvbiBgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgpYC5cbiAqXG4gKiBUaGlzIGNvbnRyb2wgdXNlcyBgYXR0YWNoSW50ZXJuYWxzKClgIHRvIGludGVncmF0ZSB0aGUgY29udHJvbCBpbnRvIGEgZm9ybS4gSWYgdGhlIHRhcmdldCBlbnZpcm9ubWVudCBkb2VzIG5vdCBzdXBwb3J0XG4gKiB0aGlzIG1ldGhvZCwgdGhlIFBvbHlmaWxsIGZvciBhdHRhY2hJbnRlcm5hbHMoKSBjYW4gYmUgdXNlZDoge0BsaW5rIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2VsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsfGVsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsfS5cbiAqXG4gKiBMZWFybiBtb3JlIGFib3V0IFdJQ0cgV2ViIENvbXBvbmVudHM6IHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vV0lDRy93ZWJjb21wb25lbnRzfFdJQ0cgV2ViIENvbXBvbmVudHN9LlxuICpcbiAqIFJlYWQgdGhlIEhUTUwgc3BlY2lmaWNhdGlvbiBmb3IgQ3VzdG9tIEVsZW1lbnRzOiB7QGxpbmsgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvY3VzdG9tLWVsZW1lbnRzLmh0bWwjY3VzdG9tLWVsZW1lbnRzfEN1c3RvbSBFbGVtZW50c30uXG4gKlxuICogUmVhZCB0aGUgSFRNTCBzcGVjaWZpY2F0aW9uIGZvciBDdXN0b20gRWxlbWVudCBSZWFjdGlvbnM6IHtAbGluayBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL2Rldi9jdXN0b20tZWxlbWVudHMuaHRtbCNjdXN0b20tZWxlbWVudC1yZWFjdGlvbnN8Q3VzdG9tIEVsZW1lbnQgUmVhY3Rpb25zfS5cbiAqXG4gKiBAc3VtbWFyeSBBIGJhc2UgY2xhc3MgZm9yIGN1c3RvbSBjb250cm9scyBiYXNlZCBvbiBDdXN0b21FbGVtZW50LlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xNC4wXG4gKi9cbmNsYXNzIEN1c3RvbUNvbnRyb2wgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcblx0LyoqXG5cdCAqIFRoZSBjb25zdHJ1Y3RvciBtZXRob2Qgb2YgQ3VzdG9tQ29udHJvbCwgd2hpY2ggaXMgY2FsbGVkIHdoZW4gY3JlYXRpbmcgYSBuZXcgaW5zdGFuY2UuXG5cdCAqIEl0IGNoZWNrcyB3aGV0aGVyIHRoZSBlbGVtZW50IHN1cHBvcnRzIGBhdHRhY2hJbnRlcm5hbHMoKWAgYW5kIGluaXRpYWxpemVzIGFuIGludGVybmFsIGZvcm0tYXNzb2NpYXRlZCBlbGVtZW50XG5cdCAqIGlmIHN1cHBvcnRlZC4gQWRkaXRpb25hbGx5LCBpdCBpbml0aWFsaXplcyBhIE11dGF0aW9uT2JzZXJ2ZXIgdG8gd2F0Y2ggZm9yIGF0dHJpYnV0ZSBjaGFuZ2VzLlxuXHQgKlxuXHQgKiBTZWUgdGhlIGxpbmtzIGJlbG93IGZvciBtb3JlIGluZm9ybWF0aW9uOlxuXHQgKiB7QGxpbmsgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvY3VzdG9tLWVsZW1lbnRzLmh0bWwjZG9tLWN1c3RvbWVsZW1lbnRyZWdpc3RyeS1kZWZpbmV8Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmRlZmluZSgpfVxuXHQgKiB7QGxpbmsgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvY3VzdG9tLWVsZW1lbnRzLmh0bWwjZG9tLWN1c3RvbWVsZW1lbnRyZWdpc3RyeS1nZXR8Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmdldCgpfVxuXHQgKiBhbmQge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzfEVsZW1lbnRJbnRlcm5hbHN9XG5cdCAqXG5cdCAqIEBpbmhlcml0ZG9jXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgRWxlbWVudEludGVybmFscyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBhIHBvbHlmaWxsIGlzIG5lY2Vzc2FyeVxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdC8vIGNoZWNrIGlmIGVsZW1lbnQgc3VwcG9ydHMgYGF0dGFjaEludGVybmFscygpYFxuXHRcdGlmICh0eXBlb2YgdGhpc1tcImF0dGFjaEludGVybmFsc1wiXSA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHR0aGlzW2F0dGFjaGVkSW50ZXJuYWxTeW1ib2xdID0gdGhpcy5hdHRhY2hJbnRlcm5hbHMoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gYGF0dGFjaEludGVybmFscygpYCBpcyBub3Qgc3VwcG9ydGVkLCBzbyBhIHBvbHlmaWxsIGlzIG5lY2Vzc2FyeVxuXHRcdFx0dGhyb3cgRXJyb3IoXG5cdFx0XHRcdFwidGhlIEVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3NhcnlcIixcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Ly8gaW5pdGlhbGl6ZSBhIE11dGF0aW9uT2JzZXJ2ZXIgdG8gd2F0Y2ggZm9yIGF0dHJpYnV0ZSBjaGFuZ2VzXG5cdFx0aW5pdE9ic2VydmVyLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RvbS9jdXN0b20tY29udHJvbEBAaW5zdGFuY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgZGV0ZXJtaW5lcyB3aGljaCBhdHRyaWJ1dGVzIGFyZSB0byBiZSBtb25pdG9yZWQgYnkgYGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpYC5cblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nW119XG5cdCAqIEBzaW5jZSAxLjE1LjBcblx0ICovXG5cdHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuXHRcdHJldHVybiBzdXBlci5vYnNlcnZlZEF0dHJpYnV0ZXM7XG5cdH1cblxuXHQvKipcblx0ICogQWRkaW5nIGEgc3RhdGljIGBmb3JtQXNzb2NpYXRlZGAgcHJvcGVydHksIHdpdGggYSB0cnVlIHZhbHVlLCBtYWtlcyBhbiBhdXRvbm9tb3VzIGN1c3RvbSBlbGVtZW50IGEgZm9ybS1hc3NvY2lhdGVkIGN1c3RvbSBlbGVtZW50LlxuXHQgKlxuXHQgKiBAc2VlIFthdHRhY2hJbnRlcm5hbHMoKV17QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxFbGVtZW50L2F0dGFjaEludGVybmFsc31cblx0ICogQHNlZSBbQ3VzdG9tIEVsZW1lbnRzIEZhY2UgRXhhbXBsZV17QGxpbmsgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvY3VzdG9tLWVsZW1lbnRzLmh0bWwjY3VzdG9tLWVsZW1lbnRzLWZhY2UtZXhhbXBsZX1cblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdHN0YXRpYyBmb3JtQXNzb2NpYXRlZCA9IHRydWU7XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0ZG9jXG5cdCAqKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBleHRlbmQoe30sIHN1cGVyLmRlZmF1bHRzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNdXN0IGJlIG92ZXJyaWRkZW4gYnkgYSBkZXJpdmVkIGNsYXNzIGFuZCByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBjb250cm9sLlxuXHQgKlxuXHQgKiBUaGlzIGlzIGEgbWV0aG9kIG9mIFtpbnRlcm5hbCBBUEldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzKSwgd2hpY2ggaXMgYSBwYXJ0IG9mIHRoZSB3ZWIgc3RhbmRhcmQgZm9yIGN1c3RvbSBlbGVtZW50cy5cblx0ICpcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSB2YWx1ZSBnZXR0ZXIgbXVzdCBiZSBvdmVyd3JpdHRlbiBieSB0aGUgZGVyaXZlZCBjbGFzc1xuXHQgKi9cblx0Z2V0IHZhbHVlKCkge1xuXHRcdHRocm93IEVycm9yKFwidGhlIHZhbHVlIGdldHRlciBtdXN0IGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBkZXJpdmVkIGNsYXNzXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE11c3QgYmUgb3ZlcnJpZGRlbiBieSBhIGRlcml2ZWQgY2xhc3MgYW5kIHNldCB0aGUgdmFsdWUgb2YgdGhlIGNvbnRyb2wuXG5cdCAqXG5cdCAqIFRoaXMgaXMgYSBtZXRob2Qgb2YgW2ludGVybmFsIEFQSV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMpLCB3aGljaCBpcyBhIHBhcnQgb2YgdGhlIHdlYiBzdGFuZGFyZCBmb3IgY3VzdG9tIGVsZW1lbnRzLlxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgdmFsdWUgc2V0dGVyIG11c3QgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIGRlcml2ZWQgY2xhc3Ncblx0ICovXG5cdHNldCB2YWx1ZSh2YWx1ZSkge1xuXHRcdHRocm93IEVycm9yKFwidGhlIHZhbHVlIHNldHRlciBtdXN0IGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBkZXJpdmVkIGNsYXNzXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgaXMgYSBtZXRob2Qgb2YgW2ludGVybmFsIGFwaV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMpXG5cdCAqXG5cdCAqIEByZXR1cm4ge05vZGVMaXN0fVxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscy9sYWJlbHN9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgRWxlbWVudEludGVybmFscyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBhIHBvbHlmaWxsIGlzIG5lY2Vzc2FyeVxuXHQgKi9cblx0Z2V0IGxhYmVscygpIHtcblx0XHRyZXR1cm4gZ2V0SW50ZXJuYWwuY2FsbCh0aGlzKT8ubGFiZWxzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgaXMgYSBtZXRob2Qgb2YgW2ludGVybmFsIGFwaV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMpXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ3xudWxsfVxuXHQgKi9cblx0Z2V0IG5hbWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlKFwibmFtZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGlzIGEgbWV0aG9kIG9mIFtpbnRlcm5hbCBhcGldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzKVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRnZXQgdHlwZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5nZXRUYWcoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGlzIGEgbWV0aG9kIG9mIFtpbnRlcm5hbCBhcGldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzKVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtWYWxpZGl0eVN0YXRlfVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIEVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3Nhcnlcblx0ICogQHNlZSBbVmFsaWRpdHlTdGF0ZV17QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1ZhbGlkaXR5U3RhdGV9XG5cdCAqIEBzZWUgW3ZhbGlkaXR5XXtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvdmFsaWRpdHl9XG5cdCAqL1xuXHRnZXQgdmFsaWRpdHkoKSB7XG5cdFx0cmV0dXJuIGdldEludGVybmFsLmNhbGwodGhpcyk/LnZhbGlkaXR5O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgaXMgYSBtZXRob2Qgb2YgW2ludGVybmFsIGFwaV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMpXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscy92YWxpZGF0aW9uTWVzc2FnZVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIEVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3Nhcnlcblx0ICovXG5cdGdldCB2YWxpZGF0aW9uTWVzc2FnZSgpIHtcblx0XHRyZXR1cm4gZ2V0SW50ZXJuYWwuY2FsbCh0aGlzKT8udmFsaWRhdGlvbk1lc3NhZ2U7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBpcyBhIG1ldGhvZCBvZiBbaW50ZXJuYWwgYXBpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscylcblx0ICpcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscy93aWxsVmFsaWRhdGVcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBFbGVtZW50SW50ZXJuYWxzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGEgcG9seWZpbGwgaXMgbmVjZXNzYXJ5XG5cdCAqL1xuXHRnZXQgd2lsbFZhbGlkYXRlKCkge1xuXHRcdHJldHVybiBnZXRJbnRlcm5hbC5jYWxsKHRoaXMpPy53aWxsVmFsaWRhdGU7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBpcyBhIG1ldGhvZCBvZiBbaW50ZXJuYWwgYXBpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscylcblx0ICpcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscy9zdGF0ZXNcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBFbGVtZW50SW50ZXJuYWxzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGEgcG9seWZpbGwgaXMgbmVjZXNzYXJ5XG5cdCAqL1xuXHRnZXQgc3RhdGVzKCkge1xuXHRcdHJldHVybiBnZXRJbnRlcm5hbC5jYWxsKHRoaXMpPy5zdGF0ZXM7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBpcyBhIG1ldGhvZCBvZiBbaW50ZXJuYWwgYXBpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscylcblx0ICpcblx0ICogQHJldHVybiB7SFRNTEZvbnRFbGVtZW50fG51bGx9XG5cdCAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMvZm9ybVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIEVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3Nhcnlcblx0ICovXG5cdGdldCBmb3JtKCkge1xuXHRcdHJldHVybiBnZXRJbnRlcm5hbC5jYWxsKHRoaXMpPy5mb3JtO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgaXMgYSBtZXRob2Qgb2YgW2ludGVybmFsIGFwaV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMpXG5cdCAqXG5cdCAqIGBgYFxuXHQgKiAvLyBVc2UgdGhlIGNvbnRyb2wncyBuYW1lIGFzIHRoZSBiYXNlIG5hbWUgZm9yIHN1Ym1pdHRlZCBkYXRhXG5cdCAqIGNvbnN0IG4gPSB0aGlzLmdldEF0dHJpYnV0ZSgnbmFtZScpO1xuXHQgKiBjb25zdCBlbnRyaWVzID0gbmV3IEZvcm1EYXRhKCk7XG5cdCAqIGVudHJpZXMuYXBwZW5kKG4gKyAnLWZpcnN0LW5hbWUnLCB0aGlzLmZpcnN0TmFtZV8pO1xuXHQgKiBlbnRyaWVzLmFwcGVuZChuICsgJy1sYXN0LW5hbWUnLCB0aGlzLmxhc3ROYW1lXyk7XG5cdCAqIHRoaXMuc2V0Rm9ybVZhbHVlKGVudHJpZXMpO1xuXHQgKiBgYGBcblx0ICpcblx0ICogQHBhcmFtIHtGaWxlfHN0cmluZ3xGb3JtRGF0YX0gdmFsdWVcblx0ICogQHBhcmFtIHtGaWxlfHN0cmluZ3xGb3JtRGF0YX0gc3RhdGVcblx0ICogQHJldHVybiB7dW5kZWZpbmVkfVxuXHQgKiBAdGhyb3dzIHtET01FeGNlcHRpb259IE5vdFN1cHBvcnRlZEVycm9yXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgRWxlbWVudEludGVybmFscyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBhIHBvbHlmaWxsIGlzIG5lY2Vzc2FyeVxuXHQgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzL3NldEZvcm1WYWx1ZVxuXHQgKi9cblx0c2V0Rm9ybVZhbHVlKHZhbHVlLCBzdGF0ZSkge1xuXHRcdGdldEludGVybmFsLmNhbGwodGhpcykuc2V0Rm9ybVZhbHVlKHZhbHVlLCBzdGF0ZSk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtvYmplY3R9IGZsYWdzXG5cdCAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gbWVzc2FnZVxuXHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBhbmNob3Jcblx0ICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscy9zZXRWYWxpZGl0eVxuXHQgKiBAcmV0dXJuIHt1bmRlZmluZWR9XG5cdCAqIEB0aHJvd3Mge0RPTUV4Y2VwdGlvbn0gTm90U3VwcG9ydGVkRXJyb3Jcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBFbGVtZW50SW50ZXJuYWxzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGEgcG9seWZpbGwgaXMgbmVjZXNzYXJ5XG5cdCAqL1xuXHRzZXRWYWxpZGl0eShmbGFncywgbWVzc2FnZSwgYW5jaG9yKSB7XG5cdFx0Z2V0SW50ZXJuYWwuY2FsbCh0aGlzKS5zZXRWYWxpZGl0eShmbGFncywgbWVzc2FnZSwgYW5jaG9yKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGlzIGEgbWV0aG9kIG9mIFtpbnRlcm5hbCBhcGldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzKVxuXHQgKlxuXHQgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzL2NoZWNrVmFsaWRpdHlcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICogQHRocm93cyB7RE9NRXhjZXB0aW9ufSBOb3RTdXBwb3J0ZWRFcnJvclxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIEVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3Nhcnlcblx0ICovXG5cdGNoZWNrVmFsaWRpdHkoKSB7XG5cdFx0cmV0dXJuIGdldEludGVybmFsLmNhbGwodGhpcyk/LmNoZWNrVmFsaWRpdHkoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGlzIGEgbWV0aG9kIG9mIFtpbnRlcm5hbCBhcGldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzKVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzL3JlcG9ydFZhbGlkaXR5XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgRWxlbWVudEludGVybmFscyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBhIHBvbHlmaWxsIGlzIG5lY2Vzc2FyeVxuXHQgKiBAdGhyb3dzIHtET01FeGNlcHRpb259IE5vdFN1cHBvcnRlZEVycm9yXG5cdCAqL1xuXHRyZXBvcnRWYWxpZGl0eSgpIHtcblx0XHRyZXR1cm4gZ2V0SW50ZXJuYWwuY2FsbCh0aGlzKT8ucmVwb3J0VmFsaWRpdHkoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBgZm9ybWAgYXR0cmlidXRlIG9mIHRoZSBjdXN0b20gY29udHJvbCB0byB0aGUgYGlkYCBvZiB0aGUgcGFzc2VkIGZvcm0gZWxlbWVudC5cblx0ICogSWYgbm8gZm9ybSBlbGVtZW50IGlzIHBhc3NlZCwgcmVtb3ZlcyB0aGUgYGZvcm1gIGF0dHJpYnV0ZS5cblx0ICpcblx0ICogQHBhcmFtIHtIVE1MRm9ybUVsZW1lbnR9IGZvcm0gLSBUaGUgZm9ybSBlbGVtZW50IHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBjb250cm9sXG5cdCAqL1xuXHRmb3JtQXNzb2NpYXRlZENhbGxiYWNrKGZvcm0pIHtcblx0XHRpZiAoZm9ybSkge1xuXHRcdFx0aWYgKGZvcm0uaWQpIHtcblx0XHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUoXCJmb3JtXCIsIGZvcm0uaWQpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnJlbW92ZUF0dHJpYnV0ZShcImZvcm1cIik7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgb3IgcmVtb3ZlcyB0aGUgYGRpc2FibGVkYCBhdHRyaWJ1dGUgb2YgdGhlIGN1c3RvbSBjb250cm9sIGJhc2VkIG9uIHRoZSBwYXNzZWQgdmFsdWUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gZGlzYWJsZWQgLSBXaGV0aGVyIG9yIG5vdCB0aGUgY29udHJvbCBzaG91bGQgYmUgZGlzYWJsZWRcblx0ICovXG5cdGZvcm1EaXNhYmxlZENhbGxiYWNrKGRpc2FibGVkKSB7XG5cdFx0aWYgKGRpc2FibGVkKSB7XG5cdFx0XHRpZiAoIXRoaXMuaGFzQXR0cmlidXRlKFwiZGlzYWJsZWRcIikpIHtcblx0XHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiLCBcIlwiKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKHRoaXMuaGFzQXR0cmlidXRlKFwiZGlzYWJsZWRcIikpIHtcblx0XHRcdFx0dGhpcy5yZW1vdmVBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHN0YXRlXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlXG5cdCAqL1xuXHRmb3JtU3RhdGVSZXN0b3JlQ2FsbGJhY2soc3RhdGUsIG1vZGUpIHt9XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRmb3JtUmVzZXRDYWxsYmFjaygpIHtcblx0XHR0aGlzLnZhbHVlID0gXCJcIjtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhlIEVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3NhcnlcbiAqIEB0aGlzIEN1c3RvbUNvbnRyb2xcbiAqL1xuZnVuY3Rpb24gZ2V0SW50ZXJuYWwoKSB7XG5cdGlmICghKGF0dGFjaGVkSW50ZXJuYWxTeW1ib2wgaW4gdGhpcykpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcIkVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3NhcnlcIixcblx0XHQpO1xuXHR9XG5cblx0cmV0dXJuIHRoaXNbYXR0YWNoZWRJbnRlcm5hbFN5bWJvbF07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqIEB0aGlzIEN1c3RvbUNvbnRyb2xcbiAqL1xuZnVuY3Rpb24gaW5pdE9ic2VydmVyKCkge1xuXHQvLyB2YWx1ZVxuXHR0aGlzW2F0dHJpYnV0ZU9ic2VydmVyU3ltYm9sXVtcInZhbHVlXCJdID0gKCkgPT4ge1xuXHRcdHRoaXMuc2V0T3B0aW9uKFwidmFsdWVcIiwgdGhpcy5nZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiKSk7XG5cdH07XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCAyMDI0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqL1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgQnV0dG9uU3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgQnV0dG9uU3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG5cdEJ1dHRvblN0eWxlU2hlZXQuaW5zZXJ0UnVsZShcblx0XHRgXG5AbGF5ZXIgYnV0dG9uIHsgXG5bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17Ym94LXNpemluZzpib3JkZXItYm94O291dGxpbmU6bm9uZTt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXS5mbGV4e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fTpob3N0e2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmJsb2NrfS5tb25zdGVyLWJ1dHRvbi1wcmltYXJ5LGJ1dHRvbnthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofS5tb25zdGVyLWJ1dHRvbi1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1zZWNvbmRhcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYnV0dG9uLXNlY29uZGFyeSwubW9uc3Rlci1idXR0b24tdGVydGlhcnl7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtcG9zaXRpb246NTAlO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7Z2FwOi40cmVtO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MS41O291dGxpbmU6bm9uZTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzouMzc1cmVtIC43NXJlbTtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3dpZHRoOi13ZWJraXQtZmlsbC1hdmFpbGFibGU7d2lkdGg6LW1vei1hdmFpbGFibGU7d2lkdGg6c3RyZXRjaH0ubW9uc3Rlci1idXR0b24tdGVydGlhcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1idXR0b24tb3V0bGluZS1wcmltYXJ5LC5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXNlY29uZGFyeXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXNlY29uZGFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1idXR0b24tb3V0bGluZS10ZXJ0aWFyeXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpO2JhY2tncm91bmQtcG9zaXRpb246NTAlO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofWJ1dHRvbjphY3RpdmUsYnV0dG9uOmhvdmVye2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTIpO3RyYW5zaXRpb246YmFja2dyb3VuZCAuOHMsY29sb3IgLjI1cyAuMDgzMzMzMzMzM3N9YnV0dG9uOmFjdGl2ZXt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lKX0ubW9uc3Rlci1idXR0b24tYmFyLC5tb25zdGVyLWJ1dHRvbi1ncm91cHthbGlnbi1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpzdHJldGNoO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOm5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0ubW9uc3Rlci1idXR0b24tZ3JvdXB7Ym94LXNpemluZzpib3JkZXItYm94O2dhcDowO21hcmdpbjoxcmVtIDB9Lm1vbnN0ZXItYnV0dG9uLWdyb3VwPjpub3QoOmxhc3QtY2hpbGQpe21hcmdpbi1yaWdodDpjYWxjKHZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSotMSl9Lm1vbnN0ZXItYnV0dG9uLWdyb3VwIDpob3Zlcntib3gtc2hhZG93Om5vbmV9YnV0dG9uOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00KTtvdXRsaW5lLW9mZnNldDoycHg7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtb3V0bGluZSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpsaWdodCl7YnV0dG9uOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKTtvdXRsaW5lLW9mZnNldDoycHg7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtb3V0bGluZSl9fS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMiwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0zLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItMHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXdpZHRoOjB9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMSwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0zLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX1AZm9udC1mYWNle2ZvbnQtZGlzcGxheTpzd2FwO2ZvbnQtZmFtaWx5OlJhbGV3YXk7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6MzAwO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi94LWZvbnQtd29mZjI7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R01nQUJBQUFBQUZKNEFCSUFBQUFBdDNBQUFGSVFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdvRThHKzQ2SElVOEJtQS9VMVJCVkVRQWhRZ0lnUW9KbnhRUkNBcUJ1Z3lCbW5BTGhDSUFBVFlDSkFPSVFBUWdCWVVVQnlBTWd4d2JmYVFYYUplZm1OejBab2wzdjYwY1BlWk1wRzRISlNqazVxSUlOZzZDR01nbFpmLy9uM0Ywak9HR0RSQTFyWGVJbmNKSVVrTkhHbjY5cU1SRFU4WmFqanM5VWJzbXRucW5FM3YzdnFpUW1mUlFwTGtLVzZRWndhbDZzNUlVaUpOVVNVRy9Pd29EWTZCNjc1T2pTamtEU1NNdTJwZWRwdTl2SklMVWxKZDcwN0QrZUxIcGpZREk0ZTF1RG5MakhIdnhwRFhHTXlkdUxMbjFxdDBGQ1FPeUZzSlpFMStrSnEzVCtJZTdCSkZJTk9BTmJpOXZUVXpoSTdXNEdtVUwwbFdqVC9GUVFpL20rK3h1UFAwMm9tUkhlNXBuNERnZk5aZm4rUjl6OTc5dG1FZU5hcTFSeFJxSFRqVFBOQTJKRkVnckhkby9udC9XLzV6YmdHQ3hpYTZFa1ZpQTJGaFlHSXRSbUUxWnZWVXZxdFN0YjdNdnJkM1c3K3QyKzBYZG9Ubnp6allicDdtU0hMQUNraE1XZ0NUTDZzMFd2MEFVb2hKZkVxRTNvcFBkNThpa0puS2xvKzN1YWVTSFlKNmZjSWNYamQrcktVRXNhRWxUcWxVbFZSbS9OK2UvOGlQMEw1QUtvek5sSjMvOWlCd3NoTTZ2NUpJVUp5a2dUM2Zkck9tcTZMY3MrWitxL1hzQVhGeEVFaVFJVWFLb3NGbjdjdFQrN0JCUzVkcURvbEpYdW5ibDdydHR6RC92Mzg0TGZ0SmFnRkZBTFlQRTVBN2duTXJaQmh0NGxYcXNiWkttYmRxMFR0T21wbWdOaXVnTTJQWUJjNzNNcmpxN0dMc29YSGNUcHQ5dVB2RkR6OGVOM2crc3hyUFFBdzZEVEZOcC9PWkk5aWluTml0WmhSbXBRT0NrZG9CZEFOalZXbGF2TWl0d0ROSlgvcFlJQWtWd25PUC92VzV4em9NdzdTQUZBS1UrWnova25QL1o5aitPZGZyTDhLZTJ2ZEtibXBodXhKU3VMOEVVQWdnSElpQkhQKzQ0NEVEenYxUFRRM1lrT2NPU2xUSG1qNlVzZGZvMkwrL2pwWWU3SUhXY1FVZ2Nna3BMRlIxWVRXOENHS1FYOWI4R0ZBQUFIOXRvNFJIUTZHTHZGUnJpNERpd1R6QUFERE1LRFByL2ZaM1YvcWRnUG1rR3pLVEVtV0VYYjdRM3R0Z1RZcW8yblA2Lys5N1hmK0YvOUpIQVZzSUljQUNCWndSeWtHVDdnQ1I4Vm9oSmNVT09TRGppU2JBcGhNb3ptMkpScHRCdFVXNjlYYk5GRzNJVnkyS0xvazQ4L0xmc201MjdJYXFCTE11QmJPRkl3ZUZVZDAxdmVMK1k4eFdodHpjcVRtMkNJVGM1ZUxKd1NJNGZZbExZRklWSEFzLy9UNTNONC9ZeDFoS0dVK0hTcUVyZHBQUG5zNmZxcVdKc05iWmFDbFF0amxPTFVNc2hjZG9BNVRRc3M0SkxjOTBTeENPTU1VSzRLUDlOc2hwenBYNHZ3eEtDaENBU1JFUkUvTEtzV1JsSndOS0FjVG5YQWhFeTNyMUtIY1phL1lkWDU4NDIwL2lhWG10R2hvQ0FpSWlBUjIzdi9QOStLVEFDQU41aGRrQzN4VUM0RUxzZ2d2a1Iya3JFallTRXYwQktTbUhDaEl2WU9DQUprS1FneVlNTTJRb1VNekNvMTZCSjg1cUFXQ0NkSGVrM0FCME9ETDFMcTBQZ1RlM2hTdzJmaGk0WGhQdWV1UVdFSDZ4dElFUUFiRzJObTVvVjU0UUZQK3lLZ08yRDRUNXQvd3oyWFc5Mi9ycHFwTFRTSVA4cVY5dkx2T2RzME5MV3lYNTFLNm9mYnZQWkUxcGFmN3czMThDOVp0aHE3ZjMyYmZ1TDY0VlpIdzUxNFlzbTVsZ2ZOYmZHN1c5bHNVQTRFR3o3MjN2eHdHenA0ZlJSK21QOExzNUI3S0IyZURKWGM2eHdsRzY5MDJ1ZzdBekxBOE5ZMjFCMmRCL1A1cWZPVjh0MW9ueUw1alpERGZRSTVSZzhEOThGdkhzdmNsSHVKc3JkdnNKcnBjL1RyL2d1L0VmWkp6WFV6cFdhRGo3TTcrVVA4LzhFa0FBVmFBUy9DUitYcy9KTjRZYUljTzF4SFpjVWFNTWJrbHJwS3k3TmZRSktRY1VSYWdvR21DVytIQTZFTnZiZzMzc2wycElZUm1FOWJJSGIwbUE2a2s2bE41R2R5TU41RWJtUWh4SEtsd01nVDU4Y2d3N3BkVVJ6N25mTWNRZmNVM3ZJY3pWa2RyaFg4WEhxNDAxMnRGT2Q3a1QvYTdwN204M1dBNzFGN2FPOU0rZGp2ZGQ2ajdmeG0rRDFQdTN6M3VpcnZtdXl6YTUzdHJ2OTNsVGI4MlJUMkthRlZVS01OUDM2QnZRTUNvMEdzRWRrTDhzK3pMZzFFeGJNME5nQ1dBeGd6ZjgyREcxS1hNZmM0cmpOY1FmSEt4U0N1UnVCSTVBb2RERERrR2RWOENuVlZFbUVNYWluNFNhMEFYVEkwUkJOcE9ZQUxWcTFhVjl2eEppVXpIS1dDaXM2bXAwQnVreDA2OUdyNzRzblZOYnNvQ21rVk1vcDUrcERHYVd6MnNMRHIyaU50K29aTzBiMzZZU0lqV2N4dm5sTjB4MFZobFlvVzRVUmpYWEt5TEczWTNxb0xkRWF6SEFFRW9WdU1sM0REZUVSVnBHL2plVEVSMENVWkVVMW1vdHFGb2l3SkZLVWFERmlhY1NsQkpyRWpTUUtKL0NTRlNtU0trMTYxUWxrZEtleVNYWXpzZFhLaTZJOWlrTkpNdENVS2xPdVFxVXExVkhUMXpxNitsemZRTkFJYTVKcFJvdldhRVA3Wnh1Tm1Uak1MQll1cTNYVVRnTmRSRGQ2VXE5QTMzY2J4QXp4RERPTjBJeGFOVmF4ZC8vcy9hanhBRTZKblBiRkdaa3VDM3VhTlU4RXNEU0xaVm14T2oxUGQ4SFF4WFNwZWRrWGF3Ylc2d1pvOCs2RHJpdVFGRnc1SXB2bkpoNi9aZ0ZKSzkzMGFFTTJYSjN5SkIwREhvcGhicWcwdXJrdk1JZ1lsdGJHUlBjZGtkN1ZqL05WNHBiQWJhKy9FNEJqQ2c5cDVaZXJpL3BkTTBDRy83dFhaTnhWRSs2YllhdlFuNnVtV3d5M0ZYZjZnZytYbkF0SERnamtQTmlVYnFwb3d2RFV2YlJsY2o1WFpIWXpWOEppNE5sMXZqc09ock1heE9IeGVEd2Vqei9WSUhKWG42SDB3aGc2cUZPRVVxUW8wV0xFMG9oTENUS0oweVE1TFU5eVJRcFNwVWxmWm5BU0JrV3BsQ2xYb1ZLVjZxaWJUQnRNbVFLWVlXSFZVVWZ0R0l0NjJsZG5NSDNFcGlVMHFWUXFIYkNMeE9VK0U0LzFYTGZCRWh6S2hnVWNnVVNoZnh3bUR6OUc1RVJBQUhMN0ZIUktReXJud3V4UWY1cmhIQkVCUklvU0xVWXN6VWJjNHJ0TWRwbDI2RmdkNTV0Z1FHOHgvZkFaMkp6SXZHYm1scmNYQW0zd1hLYTdFbGZQY1MydHhmcStlZ2ZpSEdvRE14eUJSS0h2eTNTSjMwUTZWOCs2bWRmWnNhRlYzZU9VS3NXTXlua2h5TDF1NFZJMEwxU0pMSXhYeVl6cEx5TnFpV3owWFRwa2FUeW4xWkR0aTkwbVkwMnYwdFVxdHpTQ2wrcXJLN3JJdXYxdjlSRDBzZ3hxR2JKb0dHZkVrbEUxWXpyMjhPMWwyS2V3WDlONEFEYU4xYjdMMElhUlRYT3V5OXlpdTgycE93SFFCQytwbGRDck9tSzBNZy9yMXZSWUVtM0RCRWNnVWVnbVV4MDNHNCt3aXRRZ09mRVJFQ1ZaVVkzbTR0bUVJdndVS1VxMEdMRTA0bElDVHVJMHlUcXRGY2xFQ2xLbFNhODZXRVozSkp2c0ZXaTdJeEtKT0J3T2g4UGhjRVRyUk4zdERwbE1KcE5oUklhaXFBaUdZUmdtY2Jrc3k0Tm96L3JvZlFMN0tjYWxORDBGT1czUkdadU9CUjJ4bVZNeGtVZ2tEbDBYN3VKaXV0UzhiTkdhRSt2L1pRT3dxZTg2R0lJZUVzQ3VvdldZZkNxMnR2cE1PQk43TXpPNjhHV1hMaHRtZ1cyZmZlSHAxTXU3cXdYNU5Ed1RrcENTY2VmQmt4ZHZmaW5BUklSSVVhTEZpS1VSbHhJQWlaRTByVnE2NUlvVVNaVW12ZXFVTXJwcy96MVpXRVo1WUJnR0FBQUFBQUNBMFdac2QxQ3ArSHcrbjIvY09sazRyRHBTbDFLM0hyMzZqZzFDVHR3ek9jTnVDWFlOZ2lEWWhvdEgxb2dPTFJTdXg4bmlsNHIyaVlhdjBub3J6WHZaMm5aalpMZmFLRCtWUmdIL2ZnTm1wa0ZiaGdpR2lVYWNHZlhObUs0OUZQdlk5dHZiY1RtNzUrM2ZkYW1XNllTdHdrZHphQ0haY3ZxMENTNGlVNVptTnhMWEdCZS9yUW9Iak1QMS9RRUdWTVpGSmdiRERKLzVUM2V5QmN2R1BTcVRpbUpjQytZUVVqcUd2Mm5DN3EzbkIwRE9xdjJHM1Z2bEloS0lXOE1SU0JTNnlaVGlOR0ZYK1JHQ0RIczhQWUlkVGpkQVVBeXZRa3dTQ3BwaE5kMjBtcHVNalFYS0JRa1dJalFwbUpSVUtZeEtYY0xEYzZrSWZIYVRLYU9NU2M0TXNWUllRMGV6VTZGTHBWdVAzdExIdXdwcllmdGhpd2lIRkFXa1NwbVdSdCs2bko2VTE4Q3V5Sjg1ajJ4MGIwZDdOOXBpYnEwbGI0Tm5VK3BPN3RFVUxpaGRVTzJocnB0Z1lYQ3N4QkZBM2xRMm5tRmMzRmJSakdCZ0NkNkJVSDdxblhCYmFjanNLOTlSZklETUFGa0Jzb08rblpnOFAwQkJnTUlBdFFFYW45V1FFczlNQUhORzg1NTR3YStBcm5xdlRUanBHUzdlL2lsUG1qQVJQbW5zeFdrZEFBUnlPTDl5QWh5bXg3U0dLbGs3R2g0OHZEdk5mZGcrSVRCWnBEOWd6Z01JQnd3Qms1dG1rRVhJcXFNTWFFVGcvSFVlMjZvTFRUcDR3NGc5VWtaNWJnYnhFSHRDeVRMWVBIbUpVcTN1SnBxenZTTmN1bWJCZFhZUXNrdTFDOTJOOGpUdkRGRVUwcnY4MTdnbXFzR2pQZlJ1Tmp2ZXJURG1IQ0U0cStxYnpPanVJSXZSYURoeloxL1ZKVXBoaGlPUUtIUXdzWjVUamd1QUI4Q3VLcitZSU1LZXdJb01PNXh4OWU0QUVCVERTWXBtMk9UeThvSW95WW9hamVqVVFiOEp3RC9YQjVpU3N3VWlnaEFzUkdoUzBDZ3pKelhNQ1RVMVhFWkhhVEFYVENRU2ljWGJZNFZDb1JnTEV4c3RsZEN0eFoxYVVubHV0R2h0T1F0MTgvUlVkVnBrREJ2YlM0bkVvTkZvTkJxTkZpZFhuMFdKTEpDclU4Q1VicXFNaFpHcG0rRjhFYkJJVWFMRmlLVVJseEtFRWlWVkxWTnlSZ3BTcFVtdnVnQVpoQUdseXBTclVLbEt0YnBtQTZ3clFMY2V2ZnFhRTdEVFdzNllIbTBFMmRjbGlXV3NXRTNubVM3RzViNnVHVm5Qbk51eXlXYkh3eERqcFdrNk0rajIwZVlNTFEvMDNWTW1LbTRabmdsSlNNbTQ4K0RKaXplL0tyZENrVk1sS3N5SW1tZVpmMEdReXdKQkVGeEMvcmdnQ0lJZ0NJSXo5MGJERXdNVGo4ZmpBVUF4ZFM2VnNEY3MxZzh3ZllDWHJOZDk4U0g4Z2FqazV2dVVQcWc0WERQOUptN29HV3ZHWHhTZEVMTGZyc0VTRXNtV1hUY00zY0x0SEZTR2JTSEJBamNDaVVJWEpxSG5NbE9MUkJMYXNuVUsyU3V4MXpxbk1CL1pNR094L3pQdThvaERBREFBT0FBQ0FBbUFBa0FEWUhnbENrQ3VMVkFpU0lLRkNQMGtoV05LUEZVd2JkeUwrc0RCeWVna2FKMldFTXRXckU2LzR2cFc3RzZlNG1EdzBCZnhaaEZ0OUd2ZmhQRUFteWQ0Y010VXFzUGw0YXk3R3VhazV0ME41Mk9Pd0phQmdTTkhzazJOaDdxRVdaWVZxOGUra3N4amozRUtTWGc4TE5pbFFxRlF6RTFmdjV0dnBRUUZ0RklteUx0aXZUZVdrUUNrNVpSZTJRaUoyWnJMWURWODZNQllXWDV4QVB1bmsxeW50WjJ4NmFiTnJpWEFzaFdyY2ZrVTYzeS9qL20rZ256TjhJM1l0eHpmQ2VPaUFQaTdZaDF3QkJLRnpzNzJXcmxpZldiM24rc09ta1NpelhIVFhwbXZBbk9nZWErN1M4RjFFSFA4blU0SW5GWTRRNW1XcDNCQUxsZXNhN0J6NEZ1T2JFNEVYUm5peWs4aHRDT2lrOHZsY3NXWUlLcjQvY0hNM1hYSWNjeU9Ec0JYSDlSM05JQmpVc2QxZmlkajBpaW5INXJpWmZVT0RUaUZRdWx6ZWF4NytqSFpWeXhmMzhVM3hMZHIrVTd1NDNINTlLZWdLOTVKdnd2eXFuM0lneEx5VUcyWTRRZ2tDdjFCVEQrSXZDTVBNZzBsVllSQm5TSVFrYUpFaXhGTEl5NGxDQ1QyaG0wc0VBZ0VKVERycWI0Z0oySllvelNVS1ZlaFVwWHFiTnJaK1poZWpiKzVySHJHemNjTFFoSlNNdTQ4ZVBMaXphL0t6UW5NQ0VLd0VLRkpZWUd5TnlLMWx0SlUvSjZXbUZ4VXFMc0luWFNzMzRzNEFKblROUDlKVjgxWlcwOGJ3b3h3ak1vR2crMWdQUHh3QU1lWmtCRUUrVnN1cHN4bzljV1M1aXZuYVNVcEZKUTFURWJ0ZXlLak1BTGxTUWg2UkszZ0NDUUszZVFVNGpiRUM3dXEvQXlDREh1Q0JRVHNjTWJWdXdNVUJCVERROXlRRk0yd3lSbnlFU3hLc3FKR1UzUmlFRFBYTDlEWjVGNElwQXVTWUNGQ2s4SUdaVk1GQ2RPa0x1RTFJS1ZGbEdneFltbkVOZU5CQ1ZTSmtuSkVqK1NNRkVtVkpyM3FtREtJekdsa1NiYmQ5SExrMWZ4KzNlK1ZDcG1Lb2hnbHlVQlZxa3k1Q3BXcVZLY2FVRzNVbGZwb2tNYmF4TkFzTFZxMWFVOUdJbE9mdkpsTXBwakpaREpiUmp0YU5Xay9yeldvTUlJYU5XZXNhdXQwM3lNTzJQeElJNk1CRTkxcWZvRHl4Q1N3Z0NPUUtIU1Q2UVZ1RGg1aEZYbHB0cmdNanlCS3NxSWFMMTdHY2RrQTU4QThnQ1kvMzJQTGJ3a25DUUJBTm10Q3c2Tm9CclZJcXpidE9Vc1dVNDA1bEN3WjF0RHg1cDFvN1RFZEpCZ1NHTDc3N0JFam85NGFvOW9qdEs5YnY1L2hBTThSYTQ2U2pnbWRlTHpORE1oaVVIbnU3UW1EREJaK0lVRmlUY0pvSGNsSWtTcE4rbVpHY1RjSDVJY0JwY3FVUjBXb1ZLVTY2cVozdXNlZ0YzbW4rYkZscmlxOUJtbW5WN1BiN0cwUnRDYXNPd0tRWkVnaDQ4NkRKeS9lL0o2SnJ6MnJ2ejExOFBrOFBwL1A1eS85TlBKaXI5Z0p3eWxLclV5NUNwV3FWRWZkVkZOdGhyV2dWWnYyWklTWWVyZUJvSmRIS2VhZWcwSjdVQmVxUjhTTzFhbjNwRkFNS0x3SXRWU0orK0ZtbmlIRXNGRVFXK3Bla29NNUhxZjUwbHhCTEx2OXpDTUFaVFBRMTduOVg1a0hGWDdjNlEySnZiK0tTSXNTTFVZc2piaG12SkVFV3hMSEpEWE1TSzVJa1ZScDBxdU9JS09Mekdsa1NiYmQ5SExreVZlZ01CVzVVS3drR1d3cFZhWmNoVXBWcXFPbWo5cDVxbE5UMy8vMXhzaUFSQ0tSU0FCQUJRREFnRUFnRUY0a2NIUEE0eS9mMm03WUdvNUFvdENWU1NJYVRlVkdGQUFseDFSSVpSdkdjNWowSkllb2N4enpwS3RjYXljeEkxaFN5Vis2MS9HQ3d1ekFNZlFNdzZMVEtkOG9zRkFjck5WRFBJZUZzNkxIRnhsTnl0aWVEamI4R09RUWJoU0l0ajAyZ0lnOE9WYlVmZ0YvR3RrYUNzTU1SeUJSNkQ1NW1jUGpMYllrSThKMHdKd1hmL00xbm85ZGpUVmRXaHBpRDRNamtDajBHWVk2a1kxTjVRNEVLZ1VoV0lqUXBOQ2piS29TQ05PaVhvWmJWRjkvenNMZEdZR2dWYk16d0p3ejgrbXFVMnNqWTFCcmNqbDNmRy9zZno2cTdvZzJZMzR2ZnBkVWhlL0NaMkhIOHlBQS94UThEM215QUlETkFWc0NBSmJabnhpMmNINXMyY1JKd1ZhT20yV1dzdFBHWnhZWkExS0lSN210M0F6QW10a0ZVSTVpbERjQW0yUXdvakZYQjZyM0lzQnlWcTVsK3ROYWJjdHJGK1FyQVErbGtpVVd6aUhHS1djNXUxRlVkTUtNaG54aXhuQVU0bGthQW5vL25odVNjRW5IclE2UUVkb1IyRklRNEdGbllIa2ZCZ0pUd05sNDJyUUg3ZFY2SUJLeDRHRElQVFNQQXRZSGN1YS9VemVQMWVwWkpOYXRPQVNxRkVRa1lDV1NqS29tY3ZKNFEvbFltUjZiV2lFV1dWSUZBTmFJVE9WdzJaVkh6cjVNekMvMGkvRDFrd0VXVkQvelQ5YjZERzYzMmlLNFVxQzdUUDJVTmJua0VZODY0WFlpS2xXK0JTM0ZVS3hIRFFZbys4Qjl5ejF3NGgwN0JhNFFra3pMMExHSkdJcnJaK2NOWHVCM1B3NmNlZHBBTVU2R3pSUXFEVzdudEIrY1dpc0Z5bzNXQ21RakwwTW1Yb0JxTldSRklaSTdnRFhodFNjdDhMcEJma0hzUlE2WHBWZklSdlpCVThwODVGNGhIOEVLbnhtRVltdStLNmNZWTNnUWUxKy9UekpBSVJGMWNLdk5tbjJRME04YU9Xc1hqVDlqdkJDcjUyMXhxdFdWSTZhcExwZWhLY3hadVc5QldMSjNRR3FmOUpUaXV2dlUwd2RnaHcvOElCUklYMVZ1TlF5c0JxU3RWTlBYWkR0TCtOaXZjd2kxUGdELzVPMG95bTJKKzc4b24wcnhnQTlPQ2xhMGdOMEpFUEhZL1lQNG5oSWF3YkVKMkhsVW5SOURiemZXTVBBdnhrcnRBMTR4NmpyQW1ZVWNnUmZSbFpubll4czJ5K293TER3a1MyVmszZGZqQUFVVklKZXdEMDZ0eitBdXc2cElxeFRsNGRtam9HbFlRWERNYjMxRkpQcys2N2o5Uk5nc0hZZ3d3T2NZdHVmSzZWaENMTXVjNE5GVGJ2OXBFUWpGTmpOcjBMV0FKQjNYR0htNHg3bkJSZlhtSFFoUTBienFtT3RWVG55ZVM2eDFIYkMvYXJqL1hlLzdxTU9sN00wZVVuRFBnaHlpc0Y4cUlvRmJoZkVncXlENG8zbzJLNVJMck1KWUNhQzVnckh3dXBETnNWb1hGSTMrOVdZUGExbHd2T3A5MWZ2YW5HaG9tSmlwOTd1cE5IbU9IK3liMStoTElwZGRyMjFSaUExM0ppYjc5azZwVEIzZEZBbzcxNHBRMXlSWmJUWE15ZEE3bVFFOVJGR2hML094ckhqZFJubzBYZGY5eUVlMG5YRmZPZXJ6WStETzNmaUJXQkZNQW1xRmJPZWdrQXFYVFZvNWZTNjZ5T0lWbExDU2RjcDY4dWU0eUplbGhVUHRVNlZtMmpuTkFQcXdXYU5ubnYxdzdKUDZ4UVphd1NJUGxPRk1FVUd1elBDQmIyZEpVeWdZNlE5d3I2SlVqSnI2TlpjYkVZd0wvY3haZmVjODJMT3NNSzQ5eFg2MjhQOE5xM1RERWNJQVBad3doTHc1OGhQS2s1SlNvREJKZ2lUTEVTdFBBNTBtN1NxWW1OU3g2Rk52MGlTalUwNHptVGJOWXM0Q3F6ZkpmbG1DL1laSmdOQndEQWFCaThlQkhUNUhBazRJUWtLdVJFUjJjZUhDalN0WFloSmVNTjY4RWZ6NHdmanpKeEVnZ0pTY25FeWdVQXdsSlhkaDFKeUVDK2NoZ2dZcFRoeEt2SGgyRWlSeWxpU0pwMlRwS0RvNlcyVElzRldtVEY2eTVFRHk1RU1LRlBCV3FCQmZrUklDQmxWbzFhcFJhdFN5VTZmT1Z2WHErV2pRd0ZlVEpuNmF0ZU13TWZGbjBjRmVwMDRCdW5UWm9sczNwRWNQdmw2OWtENTkrQ1pOMnVhVVU0Uk9PNDFyMmpTdU9mTjJXckJBNkUweVpNa000Ync1aHdzV25DNWFjcmhreGVteU5ac3JOdHl1MnZLNFpzZHR6WjdIT3N3R0V3dWhrUmlNN1RnNEVDNGVuQjFuaUpBUWJvdWRFQkdSSFZ5SUlSTGVjRDU4SVg3ODRQejVRd0lFMkVsT1RxUVJYSEFRMTZVNGhDN2dnQ0VBZzBZQUJ3b0tEcnVFbDYrR3FiRk5QTFdHQXhEQTIrMm1VU05PaUJnN3QwU2tTMzFveGVNa2pyRm4ySUlqSnpqTVNVaE91a2tvRUpTaWp5R2d4MklhLzlaYzAzYituOCtncWtnUzI4czc1NmNqVXAzendUcitSUGU2U2VybFVkVDVhZXVnZS9BSGdCejlGNGlud0U4cStINE92SVczOUZiZVdyeS9CcU12di9LU3VwaTlIa3JWZWZHNVo0SWF2Zmp5V3krcDRzVlh5aGVWVDVueElxL3pidmJqb3FYWDFaZTBoajBBWUZNUVpzMkJrQWdGSUdGd3hIWU5COVhkYW13cjNzNy9DSWZnWVppZmhUOWdhMTB5d3R6ZFpZL2hjbmVUWWEva2l6OEtDQm9yaEZaNGcxbFhCR0dXS0E3NTJFbElkOWFMSzRTRk5kVjMyOWJHN1JJSUtVNEdFdmhqcjhMVTF3akEyM3M5Qm1nYkdqUTk3b1VLd3FpT3Z5UFpFUklDS0l6QTZXVHBXUXdWNm9KbGUzVlRsajVUeVBLT2ptNE5idk9nL1Q5R1ZmeE5BOWhGaFFEU3cvZlJqcENGMlc4T0E2OGlDeVQrZjJIL0RHOEM2ZSttMXgvSUk4NzlOQTM1cndBQTY4UVdBWWdsVFRBc1lBQ0VxZU4rNm15M3dZb0E0RitqTm9XY05TOE9pYWpRUVA3eU1GYXdJalFSZ1NVTUxJMFE3bjFSQVg2UkY4WUtJSUpVb1ozeWdDK1EyUW9zQ2t0TzVsdU1IR1VhRTNlTGU4VmowaHFwV0FwSUVhbE9hcEc2cmRXKzdxUkFGY0NlWWlrQTRCUFRzTGgvd1VXZk9ieDlSNlU4cWZBNFNLbjVnN1lDWEFTUUNRQllOM2tBLy8xTjFmL2s2Uy8wWS8xb0JyNzRHWHh4KzJOZjB1Ky83Z3ZxQy9MenowRWY5T1JCcWpuMVBnTG9aUThiKzFaMGM4Z04vbC8yRFdmTm1mS3BYMTAzN3oyTHhuM2x0QlhUYkU1WjhJUHZmRy9HSm9TRHk0NkFNeFkyRGdFaEVURUpHU1VNVG9XZ3BrY3hNREo3MjRSMy9lSDE4U0NDUzRJa3lYUXlaTXFTcjBDaElzVU1hdFNwMTZCSk15TVRNNHRPYi9uTlczN3l2di81Mk9jKzhZWGYvVHN1M0xMTWVUOWJkWHQyY05ldlh2THlhUGpGRFUrTmdSY051T0IxcjNuRExCSUdSeU5RR0R4T3lqbW9WSU9MaDYrVUdBd0Frb1A4d0pPT2hoYkpCTlV2aHBVTkxacURVNkowS1ZLbHliT2JYZzZ0RWhWS2xhbFM3bHVWMnJWbzFjYXFWZ2R2bmFNUUNjdVdYSEhWNWNpNFdVUW1VbVUwTU1BbXRnUXNCU3p0RjNSYkJCZXdGSUF3NWw0MWlqY2JCbVFwNnkzQUVOdDgyZEFrd2p4bno3UDc4VlVVREIvVm11QWQreDU2Y1ArK3ZYdkdSa2VHaDFZc1g3WjB5ZWpJOE9LYkZ5MWNNRFE0TUgvZTNEbXorL3Q2ZTdxN09qdmEyM0t0TGRsTU9wVnNibXJjZ1dBMDdQY2VmZVRoaDdxZGRxdlp1UCt1ZEcyMWxzVEFQK2Z6NmRyMW1vcCswTEoxVEVnZ1M2Q3V2QzVveUFpdWIwMTNZUE1MYll6VGJPREFUWDVZRWlZeWNwVTVJVmNQZkpEbEorb091ZHN2TE9VeUNIQTBlcFNoUmQ0ZHVINEtnRXBNRU9XWkdiNUVGY01qVkprQlVCVUJSWmtBMlpLTlJzQU4xKzEweEs4dGk1THZ1OUNRT2Nad3hvYnRWSllTTllTRkkzL2V6d2lMSmRRRWxWQVZxYkZmVmo3R0ZZS1V3aUwyTTljU2RnTm04TEhjc0FJbHYzdCtwVHppa2dqUzhMaG5wUkE0eURwYk83QmNla2hMSVJ0eXJzbzNoT0ZiaVUyOUZnbUtZNUo4MnhSZDhxeWxzRldrRUgvYmFuOGxuRHYzWnk1ZTREVkdpWjNPUVJEQkQ0NjRYbldUbW9GRFI1MnVYSmt6bGZ5Q1JOMGpGVUxlcVpWTE5RRVhtVkVsRG90Wk5PZml6UTRSTGJpMEszVmZRaXVPS09FU01GVHYxM1R2aTZDVnlVN1d4TW1LVzNVYnREbW5JMTd5WDNIY253amdvZm9VNG1hU1VsTG5JUG9kMHc4eXY2Nm9XSU1kU2lHUFV2MnRnbUE0RWRhMTBGcm50UW0vZWx0aGZ3dWhBSFdLcytKcy8zenF0VHhTZmNaZFd2TUJrRWtvMk9XZDVoOFZ4a2wxd1EwdFdxZlh4am5iWFR3RHc1b21XWjVxZHZISURiS1l4eWc5NzBwSnZ6QXo4bjM1T0xSa2ZTYmREVHBaZ05NOWxRSm0yaVUzL0gwbmd4dkgyOWRBZVkyUURRdnhaNHpTaHBRYmhBakJtd1ZiSTdGN0l2SjdraU4xRkpHV051QW4wek1FeVJsMGgyTjE3SkNLaWdDUEtmeTluSE5PdHp3bkl6d21ndXZaWi9UTUJjUWxIQWZ3NUV4SERzWEd1RnVTZW8zeUNKblpSYjNXN1VmM2FOWjczRVlLN2tPU2xWSnN3WVl5SkN0Y0dNMUdyajk4Y25IaGtGbXU3UGRPd24xV3pSMGh4VG5SVThhQkpteHFIOXdRSUljL2ZVV0JIajhxcklTamJPMmhQVzdsUklhb0RKcEtwNldyVkhiMG9sNUxuS0x5RmoyVEhnbXk5NkFwWjYvbHExaU5QWTh2d0RLejVncytFL0NaSUNQd2NhY3FjblJpcjFSelBzbkNnUVZhZzVVTXJLR0o2eTQreVBZWkk3eWpLVEpLU1VONG9VVDdHVGRpeE8wRGtmY1RVZG1rYUJ6cVBiaTVTaUtmSmFKRERLWTFabDEydTFSQU9rd1NwN3pIbjZRa2FpcE5McjZFMHBIZ21JUTBPM3hCbldTeVkyMGN1SDJ6V1l4TlEzdzJtRndQOHhrNWNLZURzZFVha0tsTEhOSkc4czV4enloTnR0RUJpUkROUXNjQ2wydjJaQW4xQ2l0eE1FakxNd0c5cDFkRHRkcWl3SlROQ2ZMU3FSUzBBdFZ1cVFQSXNRQ1JaSW04eDY2SU53cFRDTUpDMnZZSHJOTVdNdzVUeEo0Vmk0SGdSUm9raWdGS1BUcG40NUpZZ3hxaDBib3FndUhQNklna1FUS1ZQcDlCbUN0eVNPSmQ2YnlFMGxRMWRua3RsY2lHVW1wUU85dEJuNkFCUkJ2WWJoL29YYXBuQ0M3NUdHSXhsOFcrWlpPam9IVWh1N05DMjVVSm9MZG92QzFWb0FpMkZBWHArTTROMUR5QXpVVWplU3Y1d0c3WmJmOUVjVDZqTWJzSjFCcFkvSnRvbDdOMGpwUWhnTGhjWWZZZVVaMkJYcUdVSDg1UThSUnR6MmZRZG56bmxsQjE4ZENETTNCTTBSVm1MWEdQRlZSakVkUWhMUDlEaUp2cE56b1VBdmVnOVpBTGZJalRWYjRldDV2UE05QVVWQzExSllCTXlFcEpvTGF3SFZzM0EwQ05EMGNnMi94blhKTitJSlc0QUtmMUdTVWEzVkJjdU1yWGxVWVR1Z1pvT3pQZldLUnVjOHFZTW1sT01Ld2w3eDBrS3Rzd2xmMlpSc3JqMWhnMnl6cUJhUGxBYU1sa1JDN3pHNFdhSGM4QUJybHkwbURWZ1BoS2c2MEtJR3NsbjFGRlFHb0JIWTFUR3Y5S2dKcDNWb28zT0JJdUE0ODVvcmgwYzBORzJMWDZ5U0E5c0djQmFuMlFob2JnbmlKNkZldHVLU0hYTHA1ZWNOMUZpMW8zTWdNbUtkdzBJckZoajgxS2lVTER2UkpESTVLU1VsS0FGSUt4VnpDdWdVeFhwR2daZkFnUEVFOTBOZXpLenB4dkhiUFRWcTJkT2FxODQyRU45dXlUeksyRll0K1dkUVpEZTRVYmVCMThzd3ZsUVVDaUZyYkwreUM3V3FselpPVWIyVnBZUVp1MW1QVWtUMlh5NzI2TmowZ3BVbW9FV0llci9GSmtna2diQUFMNERoLzBsbzVKREJNQzdrZzBEdHpQb2dGMEs3TFdMWFIwNlBFTjBvb0hIMWx1ZUprUURQSVdVNk1aTzZMYTJzZ3VuRjUwOEMybFlHWlBsY3gyWEoxdHVYRmJyZTUxQ0lVV1NoYjRmb2o2TGdHY21sZytVQ2lTaXhjSDlySjZUVEpkQUMyNEFwR2JzYTVoYS9OSXIraDlJZWFYSUNpWnU4QzRKTHpXVDdnS1lUNzYzOStBQWpMbHBwZFhBTGJtdC96Y2RaOG5mSS9zd1hOYlpkdzltUjFTTzdJZmdaS0MvNE1Dd3BDdzVzRDFqNDB3SXViZHRwQk5jc1ZIbXVVUHZoYWtzeE05RjhCTGtzUTM2TS9CT0pBUXQ4VEJCU1ViU29qd0szMkVZYmVRcnp1WUdhOW5XRmhPS1RsUUJ3OUNGajlqVEc0SjNOZ0R2ZXVBZzFVT2hiNEtBcDlwSGdhTUpLYjBTbG9MN0RvZEhzTGpwdFhoa3ZPYWFvZTBDSGpEVTZ0a0tDQjQyZ1pKelJEY1BvMnhOZUpyWkR4Y1hlVjNWMjhKd2swSEpoVTA4THRHRFFNcUtPUDNUR29BSTZZbmJFa1J3RFJrM080a2k2MUlucVQ4MTJ4S2JpaW9CTUdFNURMcE1LcmlPcG92Rkx0YkllOXhxTXEvU1RZc3kwWlFGNXlhWmF2cC9hK0g3dWJEbnBTc2lCd0pGYWdCTWk3d1ZXYzdVSHFsbXczZmNMdnZtblZSU0ZZUlFFbmd4bkh2dXg4UTFDVjdBSUF1QUlEZEFIMUErTHdnK2dIZ1A0QzlRTGdCQU5hZXZPVHdvcU1IVW9OZ21WbUV5REk3THJ4TEhEWFhFazdaQU1JOXpPYkd5Q0dEYms2RzVVZ25UcFBjMytqWlFNallHVXl1TlhnK00vVGliSTJjQnhnSndrYjBiZ2k0ZlpmNUFCQ1dUN0JEU004WWVTL0o4bm80SXN4UVlrNTF3WkttNDRDanc2cFRmUWpYalVMdjllalBPVktKM1BoUzJpSWZ1bEFLNnNNTHV6WTVPbi9iSHpoWkROMkdhUGg0NjZaTFVVWkVtV0ozWFJHKzhBK3Y1WU9PbEZJTVJGQjQrTGpXeXVTdVNPZXAzcXJQV3JOQm9SdkdEV2JncWN1OTcxNWtYejJCRU1GVVpYZmh2TDlVRC9PdW02NHd6ODFJa3NTWHZadUlPcWNZUkNwdCtEVWlnc3VFM1E3YnZnOHo5cUV6ZjhtZmVIRm41NXNKUlV1TFl4UTNmTUhadU83dmhrOE0wOTFReExCWjFTZTJpUU5WMGRqRXVDRlRibnlqZWFxTld0RFVPYnFKZUpzQnVuSVE3UEtXcXZIUFBGeEVYVE1LUmpmQURjK005Yjc1V2l0S2VOMlRUd1BNYjBQQTlxMkZVVUdTYUxoc2xqREFVQU1NTGRLWVFIVmpjd3BnWUtvd2FVUUMxNnJyaHhCRFJVL2FaZ2JFb1VzK0ExMFR4a3Nua1NMalpheXlSYStQaEtLTmpCVDhMb1NxcnFCR2lxR1NSaUY1VEJDN2g1M0Npb2VGNFdGTVYxeks1akRQb2JqSGdQNWE5c0JERDFpTzg0V2NMOTRDbzVFZGNJa0hsTmZKdGZtbUFFdCtBcDFKYXR3N3Y1THhiU1UzbWVLQ1dzMTNjb2RRVVlsSlZ2Kzh0bXVyQUdvRTFucE1oWmV4VExvUEwwa2c3VWV5Mk1MRXV2TTB5NDVLbHdHbFd4QWhuSGZOalphV05jTTZySmJNaW1pMCtzenY5QkJxT3V0ZlBWRWpIakliTmQ1cGFhTm1iSDNGTEp2aTF0bE94TnNvdGRpT3dUOW5lUE83K2VTR0ZGVHowVGFkOVlkbUEvcEo4cUZhNWdzZmFvaXN3NjFBbnQ4T3ZqKzI0MldLM1JWcitjeU9DR1RYVFo3WnEzeUhKUUxSK3FmdVNiZ1BsNFVvVW5uRk1xbHVIOUFQOFJpTzFrYWxzeGVlSFhua3VOSWU5KzYwNnppaDFzOE9LODZla01yNnFzQnM4cnVVcTZ4RkgwZ1VmVnNPWWFuM1dTdEFSZjdGNTB2NndkdUtiMFl2MmJzcDJ2Q3dTcUZhTUFycklMdllWMHF4L1RzNmNEOS9SMHZtYjdxK1VqNFFKREhmTHdxYTFMMllTYUtlNm9jV1hUNkVoK1Z3dWFSeUhzcEx0aVVNZWZwSlJVWUl2ZE9wNVlGKy9NaGdCQjJwZndHamtLY2NmK3dTSStCVnpPWExHZzFjeFc0RFZmOUhPYWFIaVNzMC9SM2RmU2k4aGRGeFloN013bEYvanlod0RhZ0YvQ2UyejBod3dGNFg1SmJEc0ZKdUF3TTBOcXRqc0dNRENWNkdLMTloalVBRGJSTjd5R2RoT2g4dXdITDMwR3pxeWxtY3Y3YUlnN1FvbHpQbkx3cmJqY052MzZYS2FGWno0aThQVkhoZVEzb1FwYXFMSkRJM1NEa0VYTEhNQ0pUWmFQS3lmUVRVV3I4NnFIY1c2WlRlNW9NN3ZhdE5EWGtGbGNrVVA2R1NVUWhWV2l0RjJXNzE5ZlBPWkhlN2c4V3I3Rm0yNHk4aEhrVG1SZ1Y3dmpQUlhQcTRkRDgwYTBhWmc0M2ZCVjV0V3Z2STZBQllPZ2ZHdXRpOGkva3F4UXVMRUdvRzFvNWZUbW02bnNXWnJkbHVFMmJyMExna2RTaDdGMU1TNXBEMERaRHc4VWl0V0tGbXVzeDJIMjF4RC9ibTd4eHM4T0gxbGlZSlNWdzRZdWp3aHhTMzBCdzI1QjdhQ2JHdGdIWlVMSW02dWVhdHhleXByVmtxK2xGbkJtUlZBZDJvVVQ1Q1Y2UExrWFg0a2FLYmRnVG1GaGplc28vS2pDOEltbGdiTHlyR0szOFM3SmpxdDFFNWFDTWlYb3dhK1VQZ3kzYko1NmRvSElneFBQZ2J3SnJkV3RsT0dKN01DTiswNWk2VjdVbWppamhTbUkvZW9kWGpJMld4UUhqYW1mVk9TUHluV0R0NThib3k4eXZMTjRxOTNKaHBMNXBXQm5SRzZsYWExcEVWNW0vdUlBcFJON1JYblRqSXJtbkEyc0hrWnBHY0c2eXM2WmVXWHo2ZDhuVFRmdFpoUU9iYUJYbUxWTVZxWmtnTkRGZ0RpNlhsVFltOWNVMldZanB6U1NGQVNCdHFxc1NvbGlVUEtVZmJBRDErcGliV1o1eWFZemkvZm1Xc0hSWGljai85TnAwWnpmaVp0SjMxMTFlZGdmQXRYOFcrbW12MjUxZGZFd0ZBdHFHOHR6MnlEekxpRHR2YWJlclcrSnFOYmhDeHRTZ3JNNnE0c2xUSlM0MXhhQ3BCR2hwcERycmlRUVdWN05nZGo0RjZoU1VqbW9MU0JzdFpUZHZkZmhBWW5yQmpVaXptK2d3VnU4enFoc1diM3gvRis1WEVVRFVUUVhRQ3h3ZEh4eTV2aTZZSG5zMjhVaUpoMG43eElXQzM1bDJzR1ZRcVNMSGYxQ043Z0NRS2tlR2dSOGFUV3FXL0JsZjVLQ0FRZ1RtdUxDeE16UmpqTElzUjRRZzNWam82K2F2WHRtc0NKb1pNT2tjYnpGMUtPSEdEN1pHeWtsY1dNeHNlaURzU21Vd0NTUmJ4TStPTVZZZ3hLZ3d2UjVaTk1DUjQxT1F1SHN6dVExK2E3K3VmM2dNZVAzR1JHWEhNMEdPZGJHaGZmN3pJYVJFQitPeHZUaDA5OEJzM2YvREFZM3BvRHlyUVV1NlRFSHlVaDVkdGNpYytPQ2hRRmplRitSRHo0dHZxZEQ5RnRPQ2lBMmtmSUh2ZWsyUExSZnRBTzhkeFl1NGUwTGl6N1dCeXkrd0R4WDZaR3VyWmFicnV6R3pXb08rbUMrWkZrbkdzS1R1THpOSENKQzVIOGdVekZzNTNXckJWTWdLM0lsT0JGTC9CRVFXbTlqVG1jUjhVRWswTEovUUVNRGZnUEhUWkNxcVdGL29LZWV2NFVSNHFHVlVTNXp4QjBOZnlyUWRuVDh3ZmRFYUx0cGNqM0poNEZhL0dUNlljNVp1QWkyRGp1d2MrSWIrbk9JN3c2TWFxTytDdkthMGp6YWVmNERxUW9lVUlBa2RrbTV1NW5QTzdabXdUekFBNVZVZnhvdVMyR0ZBSU1BaEExUytmWVlWSXBQY1hpRkxGQ2ptZ2VPRXdBVWRESUh3NjBQZ3BKTkQyT0ZSRmJ3SU1FYXhocEtXVzcyWDdsbXc4T1lXT0Z3MmRac24yZE52OEpwK2ZGSTRaaG1UOXdaY1phOWdTdUFCVHJ1OGh3NWswbWVDajdTc2U5ZEtnZ0pQUlJnVXNlVVZIYWsreHg4TVExRkdEaE1xYXVsbW5QTG5BdERZQUNTOU9XNkpleGUxRis0dzl2Smt6NVV4K3FnVzg1amt4d3p3NXdXQVc1bUhaeWZ6T1JiTk16Q09jNWpkVnBoWnNVcHNlK3BHZ1JweG1aNCtaODlpOXBPM3h4aGc1UmgrLzRiVUNqRXBoNjBPUDEvR1dacldvcmk3YVpXdVFpK0xaSndZcDBiTk1lZlpod3g0OTlpbjZGSmNBSzREbUFHVElpRldKeERUendsSGZ6ZnphdlFZZDR5WU15RFNZUENMTm1KQ3p1RkZicG81RXVpaVFaSm1RbHJJemtFeEJHbUtwMkxUamlraVBzS2ZQdkYySmRENHYxRS9zMmUyNnN4Z0NydUNCNk15Wkxic0lQMlRkOXVuTTdyc3N0UDJINkZCZ1VsT0I2MEMvelk0cTNReTBwcm5jQVM3SlpNODEyeVlkSlpMNDRnSUROdTQ2MllSYVR6eTVIS3E3TGp4akZPY2J4YVhacEIwcmJaYlVQVE9iLzdxeGtmVFBPZ1ovZEtLUmdHejdiZklzb1EwRHh2M3o5ODNMTjRZb3ZvYWJtTloybmpPS0huWjlzUmRUR2pKcXhJT1lNaWRuSndSWkRwa1QyMnBwa2RJVU5YRlNCaFhLSEd1QmgraGwzK2o1YlNyMlhNTzdTQjNWS2FYMkJqck9NbTE0cStSc09HQkhzd1lGTnIra1lMenFBTTAzbmpCOTlHanFqa2FEeE1mT2FOclc2RTlWTWxCaWxUVnhjV1JpQUpldi9QK1Q0YTROYllxRXNrZHNTNGE0clZLTEtRSk5CSlFGYlNyZmp0Qm1Nb0VVS1N2amZBbEFsWVRqUzBSaDFOSFV0TVdIVzRGbjMwWVUwSTRJOUFQVTlyd3R1TitiZW5sU2N0aUVUUlltNGc0ajd0NEFKSkdvY2Vva09SZ1FNOHowZkg5TkxMYVNRUkU4V2NDNEZma2FzQ2JaaFg2azRzU2JHWE5OTGRJdm1RSE9CR29HVjR0Z05LMHM5M3hmQXZyaTdlbU1BaGFVZ2NHSXl5ZmZlWFNwYkhnOS9kOG05NXU4L3QrVHU3L3QrN2E0VHgvc28vZTVOUHd6c3B2S1JyTlRqMXpwL2svYi96WDJvRS8vLzJTV2UrTnF2Z21SZFUwYUtqd1JJdjE2cEU1RlVlbnpiM283NUFqZ0hFT2tJRjkrR1hJOWZFTllLSDljUmtQeXFRMUdoUFhTK0xMR25tWDJlRzU5azVUWnV5ckZYTTlEbVQ3S2w0TG1tUnpZWUxpNVIyZkRrc0tJYmZDNXJreGdBRGI2UjJ1VGZlbzEvSmFKUDRaMnRRYnY3NWlidUc5dlFhK29NK1hhdWlLYUhaczkxckl5UVcrckJtSW9ndjRZRXpoMzE5ZmR0NmVncjg2NWRXVjU2NHJKK0pTSytHN2lVK0llYmovZUx4Zkk5aEZYT3ZFeGNWZE5DOTVTeHgwcDlJL2FVejJhVll4WHZhcTVhOWppbTcybVNjYnNBejJMYTBPT2JyMHZDUTlZSGRoQXBMbFhhL1dNdW93K2MvK3FWdjBEeXFNcFhMSm1mRUxYOEVhRGJ1MXh2K0VXdEpCdm9vVDBhK2tXMk9sbTQyWTNBa1JtRFFZWDZQcmpaV3Y5MnBKa1VCTmlYNmdvMmRMaGU4WWpFUU8xd3lxY3YvUDJqMnVpNUgyUHl5dE9kM0pPQU03dTFFMjIvRnFuZlVScmR2YjA0aTdvWDRORHJ5ZkpMUm91REk3YW1ydlZxOXcrN2FwMDE0akZGeHF4Ti9lcVY3cjgyYW1hYzcxMjVVQ3d1VWRYNitpbEFpbGt2c1d1R0FoVnFvMk8rVk9LK2RXQ2ZRY1o3U3FDK09xOS9yck1QSU16dU1TYTdLRzJGak5naUxjazMvK281VnRETjFGeERqUnBzaXhNM2pad3l3U2tDc0lyeEJHbG1leEtPdXlYU3F3WDFJd1dqS25VYU5Tcnh2N216cU51VGxVVVZacTAzY2xhK3cvTGRCTzZXODVzVWJ0SUtJWVZLTDZIN0hoV1VyT3I0Q0ZxWlBEeG0rL1doNVJQSHFYNExSTnlJZ2pQRjBlVWxESVR0SE9lcXJidW4vVlRpZlVLd1dpaG1JcEFvMTROL3AvZ1Nxemc3bHVqMHI3V0tLTjZPQ1B4bDRYTEIxQmJ3S0VHdll3cXl6VWJPN25OcXZySG03dG9mcUJNMGRMbmRxdXZkRUxCOG1CNW4xelBXT2phNUpBcVNFUXJYZENIM1BEZXduMmgrd29KYS9XU3dzWWhLOU1qV3NsMDY3b3QzQUZEc2xYbjg3ZFNoaVJudnZtYTZCT3Y4blFPbUhVUVRSd3ZYVzkvRDZyUWNTMDJYajMzRGJJL3Z6K2ZYSWJ1U3BWdlZxdkgxWGZOdlh1dW1oZzNWbXkrclFoeWpWOXlYblJhMmIybExkYS9qSDhiYmFVdDdONmE0UGlsVFpjM21ibGpKYm95em92Y291OHV6L3VQSU5Eejg4NFJPajZ3VzIxMHR5TzBvckZVb1BYWE5RYms5WkpYR1Zrcm9HNlpNeTlYVVBMYTB6NnJTZ3FsZ1hLbGJWQmJxNDBxY1g5My90MFBjWnZza1ZKbHRNMU95Ymh2S2t5dEtPWU0vdVYwc1ZnVFVlSUJGV0ZnMnVVTzBEZnpGOWJXQlh0akRqdlNJSGxWMjgya25CbEwvYi85TmpxNHdNK01CZ3RuRVJlRDVseldZRFMyR3Ewdi8wQ2JtNlJhMTN3SDVBL3JrdHlmTGUzWTJzOHE5cnhiL0t1ckdJam1ISHBRL3NhOUYrM0cxalJsTm1Zb1F3NVgwOFgyZnZyVFBtS1NaRHhkak12VXBMSkhwRGtkQmJjeHdSVDZCeEdDQnNReDFLcnRTVG1zZUFDWkJ4MndrVjNqZkxUWTBJSjZna2k3S2VRY1h1Z0wrdWJRajVYUGJ0RG96Qm16b2N0UmErek4ya3lRdXdZYktYM25jb08wV2xrUXNJL09DWHJjZmI3UEdISmZ5ZjRUUHY4T1ZpMnRzSnliWXpjYk1yZ3JCT1hHSlB1L09obUJFSlVmamduaUdDNko3d2dDdUdDOHh5VlJGTmtVbmQ1QVZxSDNMSEF5ODF3azB1UnlKV0dkYjhqNzJJQzBsYzdOYjJzZ2ZNMjZlVU8yWWZidysxbUtTbVgwSmxQV1pHdzFVWWI2REdreVpTbERlc050MWJVWGwwWjVvNkVmZTUwQVdteHNRZDFCcE1NWWRBNHY5UHVEUXdIWGlIOTZDYjVzTWVmU0JvTWhaOFNhTS9xLzlDNmJMQzVOR1kwcEtnaFpPLzMycVQwVlVBWXFIV0RHcVZhSmg4VFZIOTdOMFJuaWthcGR5bDJuQkpJWlZCcWp3MUNyamdMYTZXQXpabkIzZVlFaG9zckw1QVlJWjJhMmN4cm5iTC9XUmlVUmZkaTA0TXhzMjZUc0cxT2xZdi9QSDRjQWhUb2dKK21hdUVJbGllMElBckpMSk5EbWJITW9FMHFyLzZpTG5DU2oxNGQ4Tkg1cWFWVzlRUkF0SW91MHk3Tmt0dXhFWE9MVUdjNmsyMkQ5L1RjMnMvamZuUkFoSklTaGpBdSs2VzIxNEQxUU1mRUJlOG5nSStRa2VjT21OSC83K1NtZE1QR2RiaUUweWF0Z3Y3TnZHcjhLQmJDeUlBbDAybG9jZEVlNjJ1dmNhN3VzMmRjdXlmSzV5Q0wxc3ZKZWQ2MnpMcndTOG5SN25kaWgyUldOQnZoU3Q3b3BXNHMzS0d2OUo0STRuOGZTS0NQdVhxTkFlYU5SVUNRdk5tYVZUQkJ1TnhqaE5uY3dpeG9NR2RSenJtOHpHdUQyelNuelowWWJ1akpXa3lsck0vVFlkOVlkRW95bWpOM1liYjNyVnJid1hCenBvUFdKdkIzVWVjODcxNSs1c2JYQ0taTnBrQ0s0MkRma2M0MkV3cTdSUlg2ZlBvMjVvdWY1aWRHV2V0ODhwMnRrV3FLd2hGZ0pXSE10UnJNNVo1eTEvNjdUM0NSUjYxc3hYNHpVdTZNcEZEZG5ySWJ1V2dmVnphbmYyRnRKS2Nzbi82ck1yU25LYUV6YTArYytIQ3BtK3J6L2VjZ1RSTisvL2JWV1l3cDNoYUdjM205ZE1qdFFoeE4rMkNHSW9TcEpmSHNRd2dYanZhUmxQM3RIQ0FLMCtkTzgycGhRR2plWWM5Wjl1TzR1bmF3MFUrdXdwTlNPcUxSTmJkWDBORHVzbUE4T1ZUMG5rRFY5SlZBRjRBRlJuTTh0TmpUaHRTRlpUbTlBMmwyQk5LYTM1cW4yRXlkSVQySjBMbzc3b1RuUWt6YWQvMnN4RVVTSy94cEFyYnJ1bEIxZ0pqMzVmVkdXMjBNV2FWWTlXdVJtM1ZJeHJlYmY0dHArNVpLT3g1c2hQVk5uSklFdVA4Y1c4WXNjU2gzcGFwSlM5clI4OFBET0xMRUdPamNYRWIrNWEvK2xac2wvaEc5T2d2dWJ2Q2QvY1gyZFRoVktLQTJWNmdyNUp4d0k4WnhBQ0ZvcDlXdXVhdk50MmxRemFhTHFGR3F2R2hUU2drdVI4b2Irc0JZT2UvVmRvdTlGRk05NTZyaFE4TU9ZZUZOQUdYaUdmR1pVT2JwTW1PVkx2aVQ1L21NNENiZlRyUzQ4anRpOWYvbkpDZGN4NlMyek5QbkovTHhIdE5qcnFhdGZLREtTNU0xdloxQ3ZmZjc2NTJTSVZwK2VRYm9BdnFBTUdWNlByNTM0ZFBhTnBzOVUzaWM5VHhLVnRuKzhTQU16SHRsWXZ2emhyeTN2Rjc1WFlIbm9xMlhMSHY3Sy9HN0JlNFUxZzRmL1dWVy9SaUh4QzcwL3o2Q09mdjdhNXpyaC9wei9KTDFLOHdhcmFPYnQxbGY2NUE5Q2MxK1pJMytVN3dHbVZZVEpvaDZTa2oxZzE1Y2MyUzU1ZDgvTHd1TFlQT0FlRUlBSUJNNGdMN29XcTJML3lUY09yUExlNVlMVThNN083dHMrZkJzbVZ2SjljTlZVRVhucTZDblNnRHNyRVBXUlJzRFpNSnNuKythRlc2S1lockdVNTJvUzVSZ2E1dm1WRlF1VkM4c2hlWVZaRmpBWjFGdmo5UW5ISDlMWGVLeSs5aWNURXl5Nmk1V3plaHVoKytxNzF4eDdGbEh0WE1TRUo2WmhoZVNRNUQ1ei9VVVZpNVNMWElsZHVPeSt4RWZNQzVEMHNRenByaVhVOVJhbi9UT0pxa0V0V0hlMnpLTnllaUorNW83aTBWVlkyNnpwWHdDbHhjZlNaRDlDNzUxL3BjeVlNdkMxNHpMSlZleFVSaC9YNG5WcVVwVUlYTGRyc0F1cFZ0VnRmdXdacjlnTE1QSWlSTXNWanE5Z2FKekdyVkpDU2NlbXdZamZQeEFCbmxUcVFGUWRqSTVITm9lMUM1TzAxWktpZ1lXQkxZQmRMTllrL1pkZXhSb1Y0U0IyZkx3MWMwWENJdm16cTBxcnlGS0JTamlUa2ZvWVp2VG83d3NyQU1IWmZ6UkE1OVlqQlpXNlAxMCt2c3BlaitFZUJaclo4dWVkMDg1NnlzQzVCRGZ3KzFjdUVvcG9yYVpVbDlZVkduTHNqUkJaRXhQTkpnS0Ixc1ptSGw2VGFBelk4RzFlR1dGTkc2S0NjK1AxSW8wdHE5TEhLWVhVZlp3L2Y4V1JOTjczQmZoNWtrZ2VxZjhaV1MyWXZrczNFajdwZnFpNzFtNW9KTWdHSTZWTjFPRjZNbzIvcjRsdWJsQVRSdDZwQmtCTjk1bnRYWXpIMlQvUHpNVitZZWk1ODV4dVRUMVlTLzgyVjdlbk5WWnJhM1ZTNk9HQmdDK3lzSVYrWTNlS1hyM0FFL0FPMHM3NWw5WVkwcFNMR3FsVUJraW9EUi94VkRxdDU3L0EzYWsrMVRkdUx1RzlhV2ZTQXhxWGI0N1JsaldxOFlDYkRBbTNZQkFHTzYrSE9RcDVtSE1kcGpFWXUxTjRENk5YQlBnSXRvbGhBK29taGNtblJkQlJOd3NnbXVVbWYrOHlGSTJJRUhsWWJHMVpNUXpCMExEa053SGtFN1RXNGZ6dTNDMHhoelYzYjJsNjFaQW42Qm1TS2VGYUtTTUlHS2xrZUE5eDY0cTkrWE5kdm41b21ZMldyd3oxOWRjeS90bU1mdzYwM09LVXJ3ajF6cTVWOTNBazg2eVpScVBGbHJSWWNxSTVwUEc4anozVGJEVFZXQzJ0dis4cUZxc0lJN0doWnlzKytUMUxYVFAzeTQvenlMY2FiVDdON2RBRTNkVHRpYmpNb3p5a1ZvS2VBR1kyeHFHNnMyS0llN1JKYWcza1RPb01aY0Q4Ym5WRUpxWUY0VnJIYTZMN2lUSnBrYk1YYzBUcU9HektuVkdhRFUySTFvV3B6VXdmNUFOVllNK2dteUUwN2dSTU1oMFdJc1p5VVVtaGh1blhXWk1tNWYrL0hidnMwOG1ES3JPcmNhNWFzRzVpRGo3YUpiWTQwWG5Pc0VaY1Vxd2JEdi9sZnJEYlVkV3B5WHFIYXRjeGJYVFRUZ2JlSjc4ZVhGNW4zenlMWlBGdnJPRGduaE9CcC92SFRhV0xXaEg2VGRuODNmUjdzdEV5L1g1djdzclFLMVhYdkYyTmFZUFJOcVJxREJpNDBmL242eFFsK0w1UTdZWis0M3BrRU45VHpBQ1ltb0d1Y1R4U2lPY3RZb0EzSmhCWnlLWFZ3anVjdkJvNUdIUnExY2lLT0wvc3VnVDRDR2htK2d3N0s4RUt4enZTdlA0eEI5WUptV1U3Snk4K0lwVTZERUExLzY0UlBjMElOVDYzU3lNWkd3UHYzOGVQczY0QzdGY0xheHUwcWM2cTZ0MFE2VkVDY0VMSmNLVmMyZ3VDSUkycWxaOSt1L25aMXdjbEdDTm9rd0RIeHI0ZVJxU0h2WHp1MU95ZnBILy96NzloQnN5elQyOTliVlU0ZGhsMWlZY1I1RW12Qk5ORWxOSTFBbG9xMXpFVUpsRjZSTkxOMHdEODhMZnY3cDArQ2I0T2JKZXEyWE5XdzF1OW9Bb05JcC9tSlh3cEsvem1oOTM1UGdRUFpSYU5STkpOUHBVZnZPZmVPTmxkaEZBbzJncUFXOFZDUWRsV0YyNzNEWkQ2YVpOeVZtNk83RmxmRGFyeWlydkU4bWZRM3k1THBIZlJIQUM0ZUpkRTh1dk1yVFhhR3FaREpPclU4MnNhRndqRVhmRHBqemdsVTRnL2RRTTRKNmEwNGp6LzFVTGNqK1RmL05GVGlOV1h5dXY5SFVBdzNBdmVCU01IL0NEdXl6U0hSOU1MZlErQlc4c0VRdEUyRUZnbUZBcUpwZFhmaC9TeTgzV09leWU1TEZpSGdLRXBKM2hsLzdXQmI0RjFybDVPV3dYSVBqS1pCeDF4b1hDMTg5d2R2eC9penVGZFhqcUNQSTFQVkY4Q09LOTZqNGRNZGprQmRLcml0U0hVN25nSjNkLzNmN3ovSjFrOEV6VDN6eFNOQmFwaCtiNnkxVFcwckZxTUtvZGMrMVMxRkgweUxxRENBdkRwdkxnL2JVRXF0ZkZmcDZweHB0bEwrS0NEVHNCMTF4MkpsNG80TDF5dktjbTlVdU1WWU1jdjZaUWNrdTlXT3V1T3NrdXJiKzRjUHBWUG50LzE0WnNiU0NkT0JlVVk1Z08zQVVlNjBTTHZ3K0JTc2FwYXlyZUVKMHBzWmYvM1doT2ZGSHpvN29OK3p6enYvM2w4ak1WcHJzeTh3RWxXWlNxTzZJUk1kdVhrVDQ5SXBXb0txQzYrcTBHdmNRazFIc2Fsa1R3eGRzTjc2dmhIckl2QVAyWVJYWkxpTkw4ckhzWGZMSmxTM01Xd3R6SGN2RGNnMytmbWJtOVQ5djViSDM5YzNEait6TGpsMmZFUzE2VnV2THVvb0pEWDA4UGo5Q3ptY1cvdTVmQjZ1NHRjaHh1eFJ2Unp5eFZ0OGJKb1ZiT3VtUlV0WXhyeHhuRE13MkV6dk54MzUzVG55Tzk2ZEQzc1cvOGwrNXpXYkozc0tWMzgyWEx5eXczS1czUmY0UG92UGsyM01xUmNvdnR5dlh5bjVpTmMrOUduaThEQ3lXc0M5aWtqSE5UZVN6TWZmRk5mN2N3Y0N2RWVmTlpMZThnbGhtRkc0UGliNGp0TkNSRUt1Ym56SlY0MXVtbUQvOEZNV3orRnZ0R0JkM0MwcHZKZDA0Y3pSVFdhKzVoeEVaZEE4eGZGYzVyakl1eGRBK3g0ejdMY3k4LzJDQTZwRGdHSDhFUGxucHJEcXNPenZJY2I4VVpGWHE1bU4xd2Q1U0xqbjQrYlB4c3ZjYXFJTlVSUm8velcyVGE5cFhqZHY5ZjNGa3VOV0t6b3p3cWdxcnhTVVhhbWVRYVhwU3lNWVdXNmw3QllvWkxGbmVIN3Iwd2htNm9DS203TWlHRkdhZkg2ZjI3c0tXYVhwZVVsM1JqMUFvV1ZOR09HRnd4WWQwbEpRTEluL3JxeHRUT21Tc0pkM0I1MWhCbXpwUm9QMlZiSVZoUjltclJMVjloWDNOdG9UVEZqRVRXbkIrbkNrN2xPVTJ2czlTTFhaZUlpa1RxZmFKYWV2d0pGeGJsRHF2ZDN2cjlEZFc3Lys2SkZBUHIvdjA3cjJRNmpRZlRRZTZMeldQUEJqZyt1ZC80UWhId2ROdlVmZEtQc3RteFp0aXFyeTdLeWdhOFl4eXNvYlY5R3F0dGo0Q3RndGJPR3ZpdnJxTTdvTTZ5T3NsdDVaWmgva3NxcWh3ZkFCclU5SkV0cjNLYkZmUkZQNGMyU200UDU3ZlN1cVdWUjdOL1hSUzV1Y0ducHJ4NVR2UUNlLzhVb1JlVHFITWpMRDhZci91YUc1SHNudXg2UkFZOTJlYnhQZUwzVHpSS0pXZTczRHZzOUhZOEN3TzRPcjN2WTYybW5wZWJwYnM4ZG1zOFVzWEVZbm9DY2NnVkVqOFBRVjVDckJLclVMSUlLbHU0NmUyY0J5SU9XNnlaYkNyWmgvVDkxUTc2NlFkVHFjSldiT2lvNlgwSisxRjlkM0lHb08zUWtCMVVoSXJMTnRKVDEvZGYvNnRkOVAvbjkwNitYRmNrcEJ3UG1Pb1RPNkhVK1hHY0lqSHdPeUxSREhxV25FQzB3K3VmSjFKS2dncEV3Y2pVUmp1RWFmZGIweWY5TElsb1VYTUNEd0w4VkxuRllDOFRVN3FWVitpclJyeS94V1MrTkxkMDFSeUJDVVRHdjkyYjVYVjFKWlA1L05UdmdIVWQxUjdmRDI0V2ZEaUNwTTIzbTEzTnhKbUt4OXVrcnJsaEY3ekM2WnJ0OCsxcmZ0ZTI0VmU0aTlIYTBhTlVKK3hYTEIvV2ZaZkVyeXBjdFg3SGlIejlsNU5MbUJKN0FUSEU4ZnZJd2RqdkdkMytDWUFqYVRra2wzL3ozd0JWajh2TW16dkRBVmJhc0FnS0cxT2ZBakltSjJXRVBac0ZNMklaYjVMZHNTTCs3Qk16NXdydk42UnF4U0ZURC8rVzdBaUQvVHZPSVdKcjlrOHQ1NVhoKzFhWDJVNnFubHhNekcyYVFjTHZ6R1hhZnQwb09jRld2RVYyWnFRckJ0RFVPNERMS3ZEOGZKaVV2UCtmdGhBZmtpZ0dRaWxOQWp0QlVZcVg0LzZlRmtzK3VDMFhIenFkS1cwN3lOa0pUem51MisvUkc2REhnZWxhYm0zejliVWQ1WHpxNDJ0alpZOXBTWHhrc2QvN21sc3RtSHZHK082WFVlMklCTXpsU3o4VnhUOFVGa2gyZVF5SiszdGYvRzJKQ2xlSHNielA5MEJiUm5DYXU5QW11YzZaUEdDUlhwSFBEbE5jOVNtWXoxUEtRbjF5ZWJoMmh2TXBRdGZiSXdycHFOTFRHMU5sbDJoeHZzRzNxYVY5TGJhdzUrZGJHYXZRcE4xc0hPeXUyd0pMZjVWSytVT25wSFQyb294djRxTW9kVldnSkg3Qk5nWkhlT3Z0ZmQvc3RLSU5yY25WU3pOeEN1cFBRa0FQMzR5c1RuUU5tdDdWYlphKzNVTnBZZ2o1WkhqQnNrS0swUVF0dHp4ZFhYcHg4ZGNPRHJ0SnZCM1l0WDM5RzZmMVRaWS9iVmZaRS9vaUo3c1VETGx0OXQvS1pEYzE1ci9ka2V1TWI0dUN1VjQ5WkVReWtuMlJZTXRtOVJRTi9sM1dHQUJYa0ZMNklvSGY4bjZkdkFraEdMeWg3YmVndmhjNFVTQ29JY1BuZXFhZVhYdmdnd0FlZHd0MndJNjQ1RFhuSzEyMUhoWUJ5alZLMDZOSzQvNDhhTHZvWFV5MnQ0U3BlL2tWMnovVFlXcXFqM2JBMkdqR3M3V2pibzdIWU9tcldvQ1VTUGJOMnVDVlJzVytFU0RYclJ2eCtjaVNaR3RYNGZiNVJLcVVkOW5udFZCcCs5SXgwWW5FSmJVVWFLV1ZOSGNYVUs4eTFuWlI3aW85RExQeWZQU3lYVENWeDE3NG5xbGw0OW9rYjNhd0lMS2h1UGFMV1BYWE51enU5MnVIRU9hSjQrZWo1dmErTnFGNUR4bVEwS0h0eXhqbmowNnA1QjlhOTRmM2FwNm8vTVZVYXZmMHpXUEpBN2hKOEtZZWM1ZVdUQXZoTTZrVko4c1V6aUlETXZLWFViNUIrSkpXNXQ5SlJtZlFvVGgrdFpuMTRvb3AxdExHdGVHWjdVOU8wbWM1bHlkV2JBellYYmR4MnArcE8vQzh6U1FWR2pPL0IzdGxEN084ODNGazJOcVZXSHBwcFdwbkVrMW4vbXBab1Y2YUpkSkhtTzdPOVFWSlN2MGh0YTdDVTRKdHljYmd0L21sRHJmNFVaOEVQZ0tVZy9DY0kvZ0dESmZXTjdFa2Urd1NiOVR1WE4xa20zQ0JlQzdJNW50NENvREFsbWk0UTFETjhRWGR2QVZnNDIwN3g5ZmZCSXJpby9ycy9LMXhhVjZSczl4czdYemtvU0MzalF5bUJvQW5jMGZNR3BCaGhwclBldHZ4OXJyZFhzem1lNFFLZ3NKOFlQcjBhYWJ1bnFnQXhNUVRRRHYrTlBjd3hqMk95TTZkdS8zZm5tai9HdjExa1BRSUJmTkJjQ3dLVHczVWdTNXdGckFBZFJ4VndSZ1c4cVFJdWgxdEhLbE9rcjlyWXkxOGZhb3dpVzJzZzY3WUdMMWpKWk1KVXdvY3E0VHVWeUIyLzdRS0s3WFFib1BHd0JxTFdRRDdXUUw3WFFINnpZUTBJSTM3bzYrMmdhQUg3MTIzZDM3Yy9QRGRjSzBJQWgvdWJFWEszQ1d3SHAyRXlQT3liSDlyWW1mMEIyUHNoQVBNc1NIWm1jZXY0RnNmdXhmMzl4ZjJ6Vi8vN0Q0c1hrYmdaaHRsOHF3WU9xSUVIMUdDZis4RWZMOU5xTTUrR3pWZjJuMi8rTUVlMG1VZXRaY0JlL1NIb2NrWWNjSjc0QnJ4NmRSZ0FvRDA0QjA3MHFjaG96WUxrV29iNjVhNXY4bWVXSm1vbUFHcHdtUElmUUJnVzVPOFdhakFIdm8xZHYveWk0OGI3YmZ3VFBaM3N4QUd2L2Flb1lRQWd2bDlLRXdEczZSNjQwZnYxd2JIeFM5SCtUOTg5clNyTmJxM25OTDFmSGx3QStFUkRPSUFmaDF6a3dSVkhXZ3VQVG1FZldLLy8zWHRONzBjZXpxWGJSSC8vczZEM2IzK1FzenpzbE5Kazc3ZDlHeGxzVENIcHh6STh1Ky9UNzc4NFF0Vzhzb0gzUStqSkJIQ1I4a3I0UnlBK2Y2dURNejRNY2pZUDk3U2h2OUhDbnA4S2YzaUdVZ3ZiZy9kRHVORHhTYUlBS01ULzIxY1o4S0Q4REwzeHVUaEZjVzJpNHA5VjdoWExXMEJWSDF5SGw0dDdQTDIvbFF1b3V6aFg3NHJ3aHYwYWtiS25wODk3UE5PN0ZIempvaXVXbEZOZXMrUC9zQmJQLzJLbkhkejh1bXZyUFpTeEZiTGl3Vnh5RFVveHBSazNsKy84ek1lUGg1UjFHQWNBN3NyVis0L3BBbUpYMjVWc2k0Z3ZBd3F4V0RUYUVGSnV5RFEyRWNuV1hxbEtvcEtwdWFuUkFEVEFoWk8wN1haYktqa2JsbldwN1IzWWFBTlRQYjRwR1RkenVVT3FkWTFXaWU4bUQzam9jVDA2VXl3UUFVbEEyMFlCb0tKbFhSQUpETWxOa01aN3lTb3RaRVFqUUkvRVVjbFdsZFdPWFZSbUNsZU9ncllXVkkxQkw3bWIrNzJlMGROcnNMMEM0ZFpzM29FS2hheHVOc25CRWJGeE1rU0VSKytaakxaSFloSlZWM214b3lWUmFVVDBxam92cmVnY1ZkUnNYamttYUZGdEVlSmxqZVFGVlFwbVUwNFFjYkNIakF6MWlVSWF3dmxPWGtPNkxSNmtYZW9tWE1valpSTlYzZnFxeDM3SGg3ZlVlZ0RWQzErWnFFd2xxNjYzemN5OTNxNTc0K3F1QXIwdHRCVXFmK0p0akZpcGMwQmEreWw1YThjbTdZek5yS05BK0lRRk8zcGYxZnJWYmUxRFNwaE5XUnRvSGVKTmhmc1hSZWV4cXZzRnFTZlU3NTZFMWl5cnNuQlpXeHBZYUdZbUlSS3ZXUzd6N09nLzdpNGdkbTRKRGFSY21oanJLMU02Ti9SYWNtT0poR2hsOVkwNEhLeGtqWi9jR3ZLQ25BcnRkdXdJZEsxSVJpaFd0c3ZvYjVIWVdWYWhDTDU3aVpaUzlTVXErRFRIODkxdUFJanlsVmVuTmExdFNpR2JIU24yelhsbnA4dXFkN25xbVBtbkN3WG14MjFYOHVQSHh6Z2ZFSXRFeTU5dHQ5K3V2N0xYZGxQb3k1bDY3MWw0TUFKMW81V29LSUYyRis2WFoxVHQ2MkxONWd1eFdXV2xFdE1reFBmZHZOeEZyWWdSMTIxUmwydmFzb0Q4ZWc2M3NGNHRRN2xRZUd4YlBlTE1DVGlxcjF3REwrdlNKZlYyKzZNWGZXOWNFTVBLMEwvODdrRWk4WTJyYjlWRHQrUDlHeUx2NWNCV0oxb3U3Y0tkRXhXZXI4alA0d3ZEU3MrejZCdVBhR0tPTC9DbWxpU2E0YnlpTHVnK21SQlJSZkJBTjdHU1owMkM0WEg4ZXBkV3IvQ0I4Z2JVWlVwZVNzNXhOUURJT1lWQTFFbUllaUtYV0taUkExVkdUQ1R4b21Pb2dPalFEY2ZYK3oxcmxPeWhuVXd0RVBaaVFEU2xTUTBYSE9WNXNpOWU2WjNxNjlCbnRDMis2dlBvUHZDKzQrMFZiVHQ0LzEvOHdYSXhHNDZtRTR3bjBIaTMvWEFRcGlMZ0FGWmcwTGo1S0grMVhCckhRbnBoVFowdiszT2pJcCs2YjBnczZ1b1NFN3FWd2p1M3RlaDlKOUJPWGMvQ3dEeS8vYVVtRnFsRkxNbUg1bFUxUjloUlV3NFNhSTMwcUZIV0FubW1TbHFvK2F0dUc0WHNzUzE1emYxU3N5bDViWjNiNHBGWDg3YXlBY2RtY1orem9laHp6b1hFZGFRU1prb29Mdm1WNExtenV4NnZFd1c3UlZDRXRXdDNkQVVLM2ZGaVoxYWRpNlZPUVhjaDZtekd6ejJoempmTUtRcVRqaWoydTJhcGppVFByYVJHSjc3YU5qVHBjZDZnUEpCV0FQOVh0YXBjV1A5eCtqTDhqZFBQemEvd3FpTnVmREF3NjNiWEtrbHJtc0FlK1FVOEpmeWZBMnZxRitSUDNZbjEzZWhoNSt1NUhyYk1SSVl3OVBMdG9YOHdPWUcxa1hlQzRlYTlaMDJNM2FNYXVuejljbnlhdlhyN0xFUVBIcStxcGhpSkh5MEpnSmdBeXN6b216M1RsbFlCQ2RiSXZST2NVZUxnTlpMdExPcEZwclgwNFdLT2dWNUFsaXc5ZXgyYk0yd2ZuWStuTnZNVi9pdnUvaE96eEZIVmJsSkRXYU5KNlNSbHVWRzlzVnEweHJWRVhUZlVLQnVNcTZnUFFYZFVzMUl5VnRTd0pXeHZoZCtpblhROUlDNUtoeEhMTXQ0Zm5Kb3N1dFlNdHFYQUxCdm5RRlFCbUhPV2RsVnIrRFRQeGxJZ2QyR01xOGxoUDQ4UkRYT3VFUU1aaTg5K1lpY1NrdGdKSUxubUxoNE9oME8wZU1xemRvOWJ5b2Z3bU8zN3VoUHJKSWRjTDcyc0U1eDh6cWlvVllta3hWRkZhNS9ibGFvM0FLZ2gva0VPQW1QdXg1YkROT1FxMWJJS3dVbUpoaVlIQzNDY21aTHZrV0ZWa1E1WmVqbkU5Y0Ivc0NJaTRsVTBrWTZldFJVTmFYdW9RTHl0SjBOb3kyb01DZ3JMaUpDZFFSM0RCT2YreXhVQ2p2TGZRRmJFZWEvVGw3MlN1Tk91cGxUK25CdGFXZ3JseXpOY1JPeHNiWC9URmRKeS8yZ3hQYTNvVTJHcFliQ2hMMnY1SDJheUlOV05RTC96bUt6WXFVQ3NyVjJhc3JlWFJMNy9jbDRhVDY3U01UQXhFZkpMd2hPaE5oWE9KdS9wMHdOL3ZDVk1xQ3p4T2pmTjVlTFJMT0NLSWMrTXIxeGU2ZkF3YkZzVzRMNGMyN20rYXRvQWRBVGJwbC9OM1JKZ2JCMG5mTTI2TGZ1S2tQUnNEU0VBMFZNVGpkRFhZN0o0Zjc4K1lGL1A0K3NoVitoY2xaVEdmeVBUbTkwdVZLUFJjQmh1dEs1Q0tXWWU5cGdhOGN1Q3FSamhjTW81eE5oNFFjWTZKUjNhazVZNDFtNVNSQjRXRkZVdHNpcUFValVTTUJaNjdQY01JZEJNYTJpY0ZKN1U3ajFXc2YxT2F5R2NxekV6QzNpQVdVYTVDaldhYzNpdjA3Q1NKUkltR0ZQYmlkM09yNVdDd0xmMis0SjJMc2JVMlVGaFZTd1RyRnFEekljNENtQk5qSkRXbFZiVGFEUWE0bVlrWHBkc2t5SjNkVFVlVDF4R3RsVElKdUZNT0duaE9sSEtraE5FR2hKejlCbCtqQWxETUNvRFFtcVp6Qld5VVZTSVBIVmM2MlFEWmc5UEhOd0ZaVERFa0lrbG1nUWlZTEJRa0Q0SFk5Vm9yS3RhQW9TTEtBRnBOY1pVU2htd0lPMnNsUldUTmpXbVZsQjhmNFJSdnVGZXh3b3FRMVprQmF2amh1SmkzZ29keWZESkt3THpBRkR2b2hhV2hEUmlKOTJqVG93bjkzNnR1d1RpM0psWWxNdHdPQ3l0MTV2RjFhQmxBbVpBODJvdE9kSUdDeDBXUUpvT3g2LzNZMW5ab2ZmbmxEbG8zYi9IOXIwU0lETG13WU91SmM5ZGFmMnRXUktBTGEzRFY5cEJHTHRtYnZhM3BDNGFKNjBSNlhxYkdhN1IrL2VUL2Q1UXFuK284b2RZOVdDK3B1eVYwMWhpQ0h3Y28yNFVwVkYxSFIwU212MTRJY3FVc05CanBZcmFYb3BCRjVKYWg2Y3FPay9KYUZYbXA4bGswSmFNZ2hDa0ZCdlFEUHpyRnBRdUFPSXNhWTJ2OTJZd3AxMGdORkVwY3JkaDd0YWVNTFJ0VE1reEd5VXhTVlZnRlNtWFphTlBzeHNZK0lacDhKR2t4cE9iQUY5TmQwYVcwUFB3bnJyOEhqQ2JCQ3Q3cGNyZE55K0gyOG02UStwWGo0OCtVTUhLQzJGTmoyUTNlZiszYVJxSHVSRCttYi81U2Vmdzk0TWFNTENmR1ZaWkNTZjZTNCtKZS9QaEIrU21LMUpmT0RVNkUxWlVxNU10NnZXYzl6YU9VOVZsa2d2cTVJemhlWHFMaFkzcDlkTVA3NW8vL2NYaExHZWZIZXphSzg4ekpWMWY4LzU1aTZyNjllUWZaWEQzMWw3NHBPYmplclBaZlJrM2M0ZngvTFV4ZVlndGJNN3V3LzFxb2U5emJZbnArVHlNQjdkVzA5L0JkeXpLYnF0ZUtIa3NHbHlRVUZiS3hkN05OZHhkRWtaQUFCQThpbE1QR3p2UlNnR0JFRHpZTVhublVGelJUSFVTZ05aN1ZVVDZrZUFlMjVwcWY5UVgxZjg0c1dEaUk5UEhFYlU0Wld0TFlMUEVUNlYwUU5tOWVsOWkwTFE5SGU5NFF2Q2x1bklFR2lSY1JtcFBtWlFwRFFubUY2a2hBQVB4dng5LzMzLy85OExILzF0U05LSWZBTUJhK3c4WjVBRjhQRy85czZJbitlNXNEZ0dnWUFBQUVNQy9IOGdqdDZ2ci8wYTlVNzdYWDBCb0tCVkNlbzdnM1lTTnQ2dlZRNldkNG4vd2xlcTlRbFpOWm0xSXp5LzJ5dWNML0FvSVJ5NERwZnVNUTMyd0pNclA2Q0xQVURmaDZ1ZUJsbHJoUmZBYjhJTjVXNWVTVmNhcE8rcmFQaSt4YnpyZlhhem83T2Q4LzdMWTFRNmcvNTZsMHBlWkJBcW8vcjR0NEY4eTMraGlDR2U0bmtBajArWFdVZ2t1L215Y2ZWMnZ4RTBaRHZxN1QrYVV0aE9VelZmOU9KQVZXQW1Bcnk1dndENG56U09mZVkyZHBVdHQyK2FBZlo2cWQwTmxMc2M0KzRrNEpXRnZmOVFUcXZ0R0xlUmpaaE9DOXhaNTFjTDNzSUQ5UTVValpkdXgyd1dxa0twdEZHVUlMWmxITHdyWklUN0ZVSmNpcEJEOGZLRTl1KzgvNGkwWDh0dmJ2T1lFM0JDUGpiSGxIanRtSXRreHZpc2kyb0V1Zkp5MElRWU56RDI2bzgrSzBiRnNsNHZZL3VJSlFIWW9lTjgrV1FRNmR3SlBTMWlKd2srejJGUzJweWU2cmMwdGJUM0I4MUxmaDJTN2hoZlVtckZ5THEwRW9taUliNTMrWUtWZTc1TE1kQXdEa0pzQ2MvMFNDc1RzeFUrWVdtL0tldWZLK1dqY3NGN1paRnpiaFRFajNwbjV5eFV0RDVWV0Rzc3VlQ3RpYy9DMk1kZkk1N3pJOXIyUUh1TlNmTDI4SnlsejVkazdFbklSUDB2dFh3eHZPMkRyTXZhcnhHSkVxNVhYTEwrTEY5Unh3ZWxJZGhOeDBiVEh0Sm9SUFJLVVRpbnlsWklFNEU5WG5hVVRRRGdveEIyTUFwQW5Ta05LNUo3dTRTdkJ0bk8vc21lLzN0MDBBdWJKL01IZlIrazhaRWNGeWdNQUJOQ1FmclEyRkl3RHRUc0IraDhjZzhNQkNJekRvU1lIQUpiQnR3YkUzWHNjNjkyL05PRFVyallsR2tnN0Y5SkFrVTdYSUtCWVc0TUQzcDdkejlITU1yc0NBckFyNzBJK2ZvYWMzVmVROExYNVJJSjJSajNNR3RWcllDVkcwdEE2S05Xd29kcmVPcFZhL25qWFU2eUhXSnhadXliSjZ1NmdVNGQ0dzE3YXpFSk1vVjhyNHdEK3lrcmtvRVo5MUZacTVITHg5aVhvQXc4K0hEQUlNMnBxV1hEd3pvZlhQTndic2cyZlIrOWs2eUtGZ0xzSEprWDhRcGZtalZjZFltRlNnTnhlcjJPWllnb0VEWktCOVgxbXNtUktFbmxySURRTlFQbEFVRFl1bFNmR1dNY3hlSWVmZXFNSTZ2QkMxYXh3NDk1dkliZndCV0h3eFZVdlVJeVdqdFR3VzFUZytjWlREYjE5amFycCtmVlZFZ3A1Zlg3czQwSzhOam5xcmpuMHRZMjFGZE1iN1lvcGlVMXhWV0tWUHlheHlLY2s1bFJOaUcyRWJSdmdVaWtvVGc5MVNYU2diQkpjYlMwd2E2UUJwaVJxbVUxSXBhb2tLaTVXTVpHTmlycEdTdUdVUkNaUXBUV3FoSytLZWFxSXF3bzU4UUthUDVYaDBkRldrYWx4Y0Z2WS9QVzNRcnI2dzlkYzEzYWxKbTI3cml2dDJsd1ZoVjVGSWxwa3Bhb0JFVlo1WVZheEVGWGFCTmEvdHBqZnhkWmV6dXR3K0RjK0lQL0ovNHl5NE56Z3JnYkl3WDBFR2JWQ1phV3dsclNTY2o2Ty9FMCtJQkZoMGQwaSs0NXYzN2RtTlpYSzlUWHdHdjhNZlBiZXRDeDZYTCtBcENsRFcvSGpOaUsrN3ZycTFTczQyMTI4YmJHL012aU1jNUdvNUpjM0ttZGRaMjhvN0VVN1ZyQ0dCUFo0TnRMODkvdGxYRjBiSVltTkl3QkJBUT09KSBmb3JtYXQoXFxcIndvZmYyXFxcIik7dW5pY29kZS1yYW5nZTp1KzAwPz8sdSswMTMxLHUrMDE1Mi0wMTUzLHUrMDJiYi0wMmJjLHUrMDJjNix1KzAyZGEsdSswMmRjLHUrMjAwMC0yMDZmLHUrMjA3NCx1KzIwYWMsdSsyMTIyLHUrMjE5MSx1KzIxOTMsdSsyMjEyLHUrMjIxNSx1K2ZlZmYsdStmZmZkfUBmb250LWZhY2V7Zm9udC1kaXNwbGF5OnN3YXA7Zm9udC1mYW1pbHk6UXVpY2tzYW5kO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjMwMDtzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24veC1mb250LXdvZmYyO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdNZ0FCQUFBQUFESTBBQkFBQUFBQWRYQUFBREhUQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHbHdibkZZY2h6QUdZRDlUVkVGVUhBQ0ZBQkVJQ29HcUlJR0dWZ3VFS0FBQk5nSWtBNGhNQkNBRmhVSUhJQXdIRzJwZ1JRZGkyRGdBYVBBWkZrV3djUUFGbSs4VFJka21uVWoyL3lsQm16R2hkZWhiWlNGMFI3dW83aGtaQ1pHVDZobnBvYlpUV3h5NmNPRGgwRWcvOW8wRlIrSEE4czNKMWIzdHc1OVhvemdjQ053alptdHR3Q1Z4WDRoTG9wRWtUYVJYdDBaSVkySXQ0amY5MlhzQ3ZNUkxVd2oyUW8wSWtoY3hLa1lxNWlRdGNmbmltcnBaMGpxSHRHbmdKYmwvdERxemlpcWRxd0F6b1EwVEx4ODZNenBYNXRJNVQvenY5Njk3NXI0QW9vc1JCREpmQmJta1dnc0l0b3FOYkcyWEo5Q2tlb2JIYmYzekJCbW9HQTFJNWFneEdPMUdUYW9ORUZUTTY3SXVvbjlGWHZ6ZitpdWl3UUVLL1cvYWhtaWJ6K1ZkRWJWVlI0WU4rUGQvamN6Q1RPN0xud1dnSXFGbDVRQWwyMVlCMnA1S0pGbEw2SmY3WmVCemZ1NGNGSjNxK0FPQzhRVjY2em9iV3dZaFd3RC9WNXNtdkVYb3pFbUVUV3Z0S0cyVFBHM2hXY3BRbTluUU92UjhKRklWZ1pCZDJtYkZjK0kxZllYdndOUWtaaXZxeVAwZTkzODZ5MWJhOWQzekJxR0xxd0FYM1hwemJUSDYrdGJYekdna0EydUpmUXllbGZXZUpTdmdDMEpGVUYxYXhOZFRVMkhUcFNqN2xKbC9uZW1xNys5dlNNay82SmFkR3NzcXJnR2VldG5hTlZQTDR6K2Q3cXgvc2d4bkYyVDVlZ0hTVVd5WDdBRERWTUt4b3h6MEJjaHVYeGkyQXNDYXRUUHl2Z09PTlRPYnJPU2NjR3VDUWx6aEViS0IvdnJ0ejFpckg4aHNabmE3OW5Jbmh5MHlSRUxDSnlMZ1dmODYvM0FnVERBQUFMcGpORWczSk5OUVpMaHNaTG95cEZ3MXBrNGRjdGhoNUtpanlBa25FTUlCUXArdUovaWxraGlwdUNQSGVnK0c5bHBGb1EvYSt4T0tjNkhGQXhCMnpycDNvekFYYWlCdXhWTThWbUNrV21WN3R0ODNVcWw2aTZ4d3lhc3dDcFY5K2N6VTVPZmpyTXJIL0IxYmRzU1pLN21TVy9hL3RDbXZLb0pFaWhZalZpS1BQcnltS1ZEa1AvOXJNTU1zY3kydzBGTExyTFBSRG50ZGN4MHpLek0vRTZpQXBDajZML2svYUtBM0EyOE95VnhhQzRPbFQ1YWR1UE1QV2ZaQjB2QmtSdG5jWUFHZGhTdVdibG8yNTFyVDllQ09DS0xnZmJZR2txQko2VlF5YTRLVEdJSFVnNWZocVJTWUVqTUhSeElISStsSjNGVHp0TjBwV2g3RERERlBwdG9wdU40NEovQUlrZzFTZU9wY2k5aFAwUlRRRWlXT3d6eE4wMFpIVStVcFMxR0Y4QllQRUQzQUJMRjFucUxGZkF0U0lkczR0WlFyRUpDejlUS3RaMlRNVVZoYXhIT0xXM2lZU3QwcG9FY1lnb1N4NDdWRHFjeWhrZ2tGUFlIZHZNU3g5VjkrdDc2TkxacURCMm05WVlobXRtdjR6MGw3MWFEWC9oY3pPd1F1eHE2azFsVUM3bm1udEcvUDNTenpLR1EvZndSVUQvY09NUWlESXBUZ2p4dnZiL1Bid0U5c2xBNmlqTElUeGJrR2xwMm1YaGZVMU81QS95SGVhYlJXSXpJZFdqV1oyVzA5OFMzTkpteElVeEQwSlMySVFxaDcvRExPVkZVWTlJLzA3MWRxSkZ5NGdOOVNOeVBzQXFrbEpHWFBhZmVNK3hiRjVxSVljL0lBQnhtbG00QmNCK29QT1J6MTlDTTJvdWgyb0d0RU5OMkFKRnJDVnpPNE5vRDNleFdTRUtHNHNqTUR0T1ZKU2dZTFYzb1NhTFllZTZPckU1OUpXdEk3WHE2Rk1OQjZwQmFEem1TRzd4OVAvbmNvQVFDMFlPNjVBVi84VnFSNXBDN08wS0pSU1RpWE1IZWFqenZxOGZENlRFYXRkU2VFZEN5SnlPUDdIUzBITnNjam40RVVIN0lWdjVCOU5jSHQ2UStReHI1TmdKbEVZcEJibDdpV0ZUZzJTdnN0TkxwazF3ZDBFT0IvSEtPUDUxb0FrS0hiazBjeGdhVVNtRWR6dnZSRVhmWG5VRXF4cUdnZHgvMXBVQm42eVNVYmlMOGJrSWxDcE9DMkhGL1kweDVxcHhUTDZMbWxVUGJGT0pNallRRGVZSkljWUFodEtWcWZyRktJbmdtak9JNWV4K1diU1VBckNHTndoSURpYUtQUVYxMmV6YWRBMDRDSEc4NUxZbWgyZ2lNRW9oZ3VGQ0U3V3QyUm5wWk9QMExBbXpqSk5KTWwxRnFRMndmYlVCSmI4K2dkZmlTR1NXMWdDMXRaMHo3UVZRZGRvVFN5c2pTZWJ6b2xmeW9oU3RnZ0JlZUxDSE9EZk15bzJCT1M4YTEyaGlkcjNZVWhSRFZYVEFJeEU2eHdtczBERWcxTVJGSEFHdEdaSkxFNkN0QlpsNUoyQTd1bFRQMjBNalFYdStGR2NSaGpDb1ZYdG93Wml0aGVBaWdibG5PWklSZ0RDZ1lLZWpqQlFvUTZoUmgyTElhckdXQjd6K1lpdEtBdXFFTUFsOVFESWdIYzlSc1lpVXpBTmdNc1pHTExvVWF4YWtrVnJmRG96SzIxMFpiSzA0WnBpNkNFQlZvc01PQUFVVmdRaXdWMkhNakJEdUtVZ0pPSWd5WGhFTW5zVUNsU2FhU3h3NlRyaU9tTVJWMjRXU0cvQXIxb2I4TE45TUZhZmJGb3FOcmNjQ055NGtpanFJd0JKbE53QkM4bVdWZ2xHK3RNWit2NTVPTVY0RWlGMktDSWJWU3NsRm9aTnBtRnc4MlhXc3dvQzU2S0QrcVVyb0l6S21udTRHQVplSlovRUFCTTRRV1FScEZxaG9WWUNRZlBkcE9oSEdhV3V4NGV1RmlIbnU0MDBwbzFON0NYVk1uZktqUjJZZEZpc2NXcUZxdUJkTnZBYTlkeTh0RVRQKzcxM0x3Y0RQeHZEZDBhdys5bmV5ZmdkL1kzOENFTDVzSmlXQW5yKzMzL3daS2NRbndLanJYaU1BQnBEdUNvYVVpa0dJU2hDQUVGeUVFVjVKZWxGY0hCcDlMbmUvZS9hN2JNRXc4S3BQNlpaVm1WUjhTNW9iQW1WWkpXT001eTBqOEJBQlFZUVRVbVF5YVpHRVQxeDlIRENVa01HMk0ySEVPaHVYNUhqVHVCcFNwQUt3aVhPbXNxQnFEQVh6UVVJd1orZk9CSHZnWmhZaFBHMy9qVnlJdkpPRGRCSUMwaks1c0tuTjc2cVV4c0k1Ump0QXBpdndjbWVBUUs5RllLR3NFU3RDUVFvZzc2RzRaZW1xVEpUQVJXMUQ4eUJWSVFCVk1JaGFadS9WSDdoU09CUkZLUm1qUWtTYmtnUUhvaXJZemhLRlhYN0xJSm9MQzVhYW5pMHhnV0xnUmdUZ2xrck9hMVdNSnduUTlYemxjZm1BRHNoUTRIOUVvZW55NVNvckhyV2c5dHMwcEk3di8zc0Vld0FhenJ1QytHQ1BDZnhya1Q5Q1lBOUM5YkE1QnhTS0szZHgwQVlJL2V5aXFtdEJ1QW8wdGNOdWJyODB3bDQrbTRNUGo5bUthV1AvRkoxdGx0UGRVek80Ry9oTDlXanBUTnNsVnVJeWZJNlhKWHVWaWVFd3F0NGRibWZqOEFDQ0p6U2ZkbjRwTW80M0tza1hXeXNRVnBqRDlTd20wRjlBUEF2d09BTngydXZjYjJDOXVBQzkrRUM4OTR6enFmR2FQN0tPYmhybk03ejIwQkFZQkVRSDhuZ043SzkzWjFldVZ6TlBxbjdUUEhJdk1jZGRWMWk2MnozbjlPbVdXVCtaYWFhWWtMempsdmdXdUloaVJRc0dhMG1vdGdZR1JpWmhFbFdxdzRkZzVPaVpJa1M1Rm1qZit0OVFBSG9rSjZiLzNnYmpMMTFrZGZPYlEzZ0JoNjZtdTlzdjYzVHVkVG9GQ1JZbVZXdVdlMVMvYWI2N0RqampqaHZwc1JjVXVOTFM3YjdIYlV1T3VpMy8wUkRsZmMwQkFldjZtMTFULys5cStGQkF4SGhTZFNDeEF1Uktnd2tWclEwUXNpYTgycXBiWmFPYU9OQkM3eEZLbGlUTk5lQnJlTzJ1bWdrNjU2NmE2SG5vWVlZS0JCUEVhYllLeHhKaG52cklueTVjaVZwOFJVcFd3bVIwMkVqVGJZYVpjZENBMi9FQUJvRFFCc1A5QnlRTDhGTVA4QThKOEROd2NBQURaMkZieUVoT01VTENXcW9waElpRkZHUDYvSlNiYm5uSmdVeFYxRHpMUUFoQ0pJdUViQm8zZ3lhU1VKUlNOZEVMSFNIdElNM0hIR3NTTnhmZXdFbmNmcjZjQ2dNV2w3amFhSjAwZXhRdFFSOWlpRzRDVXc4Z1NpSm5ud1NiMnJzQWlwUkVsbnhDWU1zNmNTeUkrZTJSeDZFcWIrQ3JHRUhtT29OQU9GcEpTeU5sQVRoSFROUG9COUhRT3J4NGo1WGt6T2c0UU9DV21jUGpSeFRDM1U4WVBvdVVVN1g3ek12cmtpV283ZEpzWm5RUUFFN25uMS90NWZaMlJFUW1vMHdlaXV2SmtMbGcrd1JPa3M1eFM4TThXTGxUb0V4S1JKdU41Wmx1YzlWeG1HcDNYb2hTRlpnNjAyaDBQcGZRamdISExkVTlkWUdaR1VqRjh4R1BhZnBDaU5CcTlWNmkwNlQwNFlZcDRvSzE0b2MzZWxyQ2lWRVlEYy9qL3lRU25QT3RhSm56SEJhYWhjQTBDZkFDcThTNzVadEFrMHBUbktOQXV1TVFXUWJGaXZ0blBVeG5NTFFPdTJmRW1OYjFacTU1SU1jNVFadG1wOFZ5bFIrRkJZb3lsWHBYN1ZCREFtZG1JdEhWMkZSd3hxM2Y0ekpveDR0M0taZnBzank4dS9WV2JVZzdaMVI5TWdwYmpKNHRtNFdBRE1RazQ1d0RTa1VSZ3R5RW13Mk1LUlRXREZaZE4vRkdhUmZaSGJhN09MWU8vdVQ0aUhCNHFNY3F0SDdLVnYwYnF3T1pGL3RlWStEUTRvSFVRWWhRNE9WUW9iVFdOMVM3REI4UFhjK3p1eDZPUTN4TzFGZG1FcUEvdnlpSzN0dWFIU1JhVzQwT1kwOFpWQVBUV01Yd0s0WkVPeEJoQzhmVHdhc0doeEtTdDd5UWxCb1Q1MG9yeCtrTnFvbUcrcUlNMTRUeVhWaFNJRDEwdUVJMkNjdUZPcTU0Q2NRdk56eC9wY2Y4R29kTlkvUzN4bWFWK3pKWnN3NzlpbGU5Ri9VOHJoUFZDNG1RbGNNRHJib0RZUzZDTmI0QUt3eHArUkVGVlMxVEk2VU1adzR3WVdRTlBRVzV0TlRuRlBkTmd3MEZNK2RxZ0hnODI2SjhzaVZpM3VuUTRUbHNpOWdiN0c0NW1XTG5kL0R6Ky9SbmE4UkxFZTU5bXFwcjdTaG9xdFZ3U0l2Zm1HZFYydjh5cHFqVTd2NWo2bnJQMTExcGdzaUx4TmplMVdIQjhiTWpwV0o4MWR0UzJwYW53VGd3bk4yMzNXcXc0YkRKU1pHbEJKVFNEbEhlTVlaWFp0TzlmdWxXTS9lMEROM1p6TkZiemYvZHMydVhJTEtneGRrd045V0VUWnU3bHM1cmt3d1JLd3lWdVYyRk0yZWFsZkdWYWgzTFUwcjUxdFdmTTVXRkhDSi9XTVlZVWpoV3krY0VvOGV5V0JNWEV6V0NWTGt5YllqajF2clZKZG5PUlhleHNyZ1VETHFiYWgyb2lEODU3RVNHTGF2dGtUTEpSZm1OV0U4ZWFHMjkwV201SXNYaTVUaDdXd2xPOGMzTFNuM2V1aTdXUjVIOHhEWTEyTENiQ3lFeFYrNng0ZjN0UXdVREdyM2h0bE9mQUc2MzE4eGtyem1zamJxd1l0RVZTVzh2UjlLTGVoWjdvSjNva2E1aldMVm45cFdxY3JtRDJWdkdPYUo4ZW4rS2lPZFVia1BYSlFmVzV4WmI3VzJSZUR0T0pUYTBOYk56d3RSSlBBWjlSdHFTYXgwcUdsTGs5Mmd2MURYNU9VUSsrM1k2dTBVSzNQUHlEUmM4ZUlsbWtTY0VacDB3UzJ3NndjSzMrS3FuSjM0eWVOYWJ2RjUvUnlEUjBqNzhIdzg1SG16R1ZPUzBXSWc5SkFlbGdPNDl3Tmt0STdoQTBXOWt3SnVqOUNFbDJHYUJMNXFrSlhKbWdzc1M2YWdOVnY3b29HaUFneGFsKzNxd1RYZlRpbHJDbWxWbG84WTBMTTJEL0FOaGZ1aVNKck5YVnNCeDBXdFBia1Zrdk5hSGxrd2dBMWNPUXRJeXlFVWcwT0hIbHpkOTFRVzNybDNXMC9zM2R3bmZZSzBnQ09XendQdElDSFZuTlg3ZUJnUm5SY0dRU3JqaXVjMXdud3FXVWwxNnZSWjlWaFhTZU1JUzBrZkpDNzI4a1BrL3IyREVkVFBJOTBHS0FKbXR1UmcwcGpIYUU1Uy9sbXk3SFFDWTNnQnFrYmJrcERpdDdLTVBwOUxrUVFTWi9QNUlxRHdSQ2VQUno3ZDM2ME9nYUZUanNlTjUvRE84bWE0bEN4bDUxV2NwTzhUbnlkdUZsbWZoZnpWbXQ2ZWNoOExlbThuK2dRS0tLaGd3MkVYK3AvRGVzaTlHQVJWZ0s5a1RsT0xUa1FJYXJYTWJKWnRhRUQwNmI1YmRJNGFKK0VUWCtBaVE1SmR0dWNRMVhhRHp2REZxMXNMYUpjM3R4S1EzdFFMZXlVcXlLV1ZRM0YvcTBkRmo4WUQ4azZ5ZGRWRmE1K1ZzK0RTRzZ1Qy9uTjljZW51RU5xbGpKLzRjb3QvbjdmK3BpWWVZVXBvK0ZaT2xGR3hSdlYxV3k0VkVQR0tMSnBYN0FCM3VDdExGMmJtV2FJQmlORjZoQjkyM0cvVDJtdWR0SUUxZno2NlRVdzNBYnJRcmFsd0VGaE8zWkxMWkpHeld6d3p3TGpEcyt6OG9aazg0Z093b0hVQUhBZ0x3OFhoMmFGTXI2NmpzNVNveGt0SllCZVRyUmpYNXpuQmtkbUk5TSsvMWhyY1lqWXRkWnJnYnJWVFI2YzA2bzNtdWFDa05aY2pyZlBzWGxpcGFqTkx3YXVmTDVFVlNLRUFIZ3pvN0VNeFlKVzAvb2lKeHVOdGtvMFdtVS9PNDROZFVXekl1c05rZFpmamRmU1ZvMng4T0RISDZMelRIdXoycHdPVC9PY0JFakoxUlVqUjhiODc1TklFQkJ1bTNCdHQ2ekVvZGIxaE1kb01ockdHcVhVNDJCMG03M2t5THVSb2E1OFJ4bkdpS3htSUh3dGdOU3V2a0FxdXZSMEtOSnd2MzRZZTRZOStwdlczNUUwdHNGRjFndXVqVExVMzVmcFU4RHdsQWZQbkc3SDAzelc4WDBkSm5tdkp6eVk0NXg4bGhENmcySkFURVI1bXgvckV0M21OenEzT2thVXdKdklmR3UrZnE1WGZCT0hqYWZ2UUQ2SW93aGhiOW5RYXhUNkpEZlNiOFZreHJtVlZucXU1clhJNVJxN1JIeU1KUmlOSm5PSHQ4a212YmdnellqZ25UbjRkeWV4Y1N6TzN2UXlEb0o5bFdJanVJc1JLUjhmYkFBWG16dnNsdk11YmJvdlRhbWM3SzJiUlVmMkgweVJqTHRKcWVUdXlBamU4WVFjSkpBMWRjZHR6dVZDZTAvRXJoWU5Jd3UwWU96RXRlYitTbE1LT1VRc0U5dXVadXZ1UVhXYlhwWGxDYnV2SkFSWFB5QW16RkdoSSt1T0dNQkg3RFBPMG9EVXcxTTc4QU4zaEo2RUIrcW8wWVJoSTU4YkJYQ0lVTElteWdoV1ZzYXlzSVNRQjU2aHFCMkhJcFh6T3pPOUVsRnNkeHVCT1gwaVBoU3hOUDllVmh5U1NJcDJFelhrYWJSN2ZmUXhrZWlURDRMMEZZQ0dHaU56TURkSWpYaGhkelhQemVRNnNIVXdEeWdkVXN3eCt1bUtpcTQ5bzVRcnk0RUpQY2h2WDMybUoxRVpQdkxySjZwY2FWdW1DM3BRcVh6ajJldlg0b3BVN3ZOdTJhK09WK2VyeHZJajJVYmw2QTNuUnNreGtXdzlmTkFlalZ3TUlFNVJIRVNvNXhyMXhOS3M3Y2NOOE53MzFNZi85dFJBS05ETEhEN2NMNjVtbWVwYW9oa25QZUxZbmNiK1pHQVZzM1FtZXM1eUJHdjR4YkpSN1J1V2pLSVd3UTZsZkN0RnRIQWUwV0NvbzFEQytTQjZKc2RucEVtUGdCMmdTUTZKVWk4VkZvSUJoVjNraENoZjAyWXhqOUp2ZWcvVEtxVHdnM2VIUE81c1ZrV0RZdkdDU2FCdXFJN25hQTlvTkI4NzJOZ291SVFia0VySGI4OEoyZE5qUzZKcERyVGZWN3JoOFdyeGtyOGNCM1poMTJLbk1tS3FIbzFwT2VuaHRGNDZhekU5TGE4N3VjUnYzSlIyeXlRN21JTmxmZG5Ham5VSmV0L0YxdWplK3FPNlN3NnZZU3A2RFJzaUdnSjVCY3hYVm8zUjVMVitZVjF1dXpodmlYRCthYjFaR05EeDJQeDRucmFtYWNidHFIS29jeXYzMGV6QjI4R3JralhlMCt4QWtCd2FUTXpMZFltRk85Ty9nMkdJZUhBU1ZOclR6NFV4ckk4VHhLampWSnFydDFYcmRJN0RNKzNEZStDUTFmVzUvVjNUWEhkZnhvckV3TVBUYnhyc1JhWXBubEtITXh4WkhzK0pjZk1iN1hHcFBCV21MZnVDUS9mU3pldjJQUmF1Q3o2QWxsL0I0RUNFdnRGbzlCckdFZFpwbklPSStMZ2duNUJicU93U2JqaS8xaHFCYTM0bjlmSjlBRDNVOGlidWFtR0dkM1cxTHVSbE5vaHpuTGt1aVBlRDFqM0NERHA1VFZOR0ErRmhkWG9hWUV5TVQwcVR4MlJud3BzOEl0QjlmSEozeWE1RmVnQ2xmUDByUmxsOWQ3Q1ozMzNqL2hnM0cyTXRhdk0xZkJVTkJyTjFUZUZXRjBvYzdpd0NvUXZLbWVTcGhCUmVIdHl3MHlpdzkwbjZ4cGdDWXlrbW9OS0dobWgwSVZaWThLQmtPMFcxcHFZSWk5TWlUVkc5NEoyamgrY3ZPUzBSc2VRSzVnVUQ4RUFxUDJDYXI5SWpWaHRWM3N3UFZOelRCM3Z3WUNraVdCVTdyNzNONDJCQW42TjFHOWZsOU5YL0Q1QStKM2s5UjZOVVcvTnlicVRyVnN6dzV6Zk9EOE5vMW90WXZYMlNnWU5YMTBEYzVZb1B1SkxVajY2ZFR0Y09sL1BFYllaUGhyaTMrTysvRTkrTjlqYmVhUXJPUTVnSjE3eDBDSjJtRG9ZWW9OQmxUTldOSHV6eGEvRHVmanJ3dnJHMG9nK1lZYkZDYjBUQkQvM283aXR6TjdkelhHb2R6N2ZKMzZ4c0RPa3lPU0E0NE44ckhQdi8rVE1hREZwSm40MzROODVNL21jcStDS29pZ2h5d2Rqa2xWelM5OEhnNlFHQkdWK2tTYWExSzBseVI1VGtEY0ROL1lKVHBSL3pmYnpTa2s1ZXZGN1J1ZEZZS0pxbUloRWlSRWlyMDdGRUJOYXo0RUt6NzgwQk4zcUs5ck9iKzRZbzE4ejc1OG5ja2dTNk8rUGdMSFprK3ZYZXI3SWJ1OEJxdHJiczFmMzNteDUySGV5Wkp4M29pRzgwWHpkYkE1Uy8rRUo3THhFZnMyZFB6NFlnYXNlaHdSUmFMS0xUa1lnUUpYa1BSYkFoMWpxWG1TcmR6dmdtZkUrMlRaL2ZtNGp0eStkaisvZkc4MGlSMjZuLzY1MWorYk9kRWVWM2VaTDc0UVVpc0liUnIzU0pGNVRvbld4amZpSUdlZDN4YWN1WFlJL1hDOVh0aFlBWWtEVVkzdDFFZ1ROT1JrZ0U4UTRVRFNnVVFjT0hFQXVnUEo2Rjl2VVpRSjRuTGRRci8rOVYrR2dhNHZzUXhDRE5YNzU5NXlOWHBNL2ZXeEFucDl3K0M2ak5JbjI1VTVvc3FRR3JHSFhwQk80TmpiY3U2eTVmY3ZKb2RySHducFdhRlhXRFZHRnFYZjNaV3VOejdGOWV2dHJ5akc1aGFUb0hQN1h2eGJXemEyaUZnTmxYcHVLY0h5SzZ0SEw1SmtpeFMrMWp1dW51d2xxRDM3L1cwRjNRVGNkSUxVVzBHTmczRmMya3A2TktpNWxBVG1lbW9Ba0lUNXJaeFh6M2ZkbXArUU5tRzZSRnh4M0c2eWVYaW9wWmtWemZsZFlyVGZUWnp4WTlnbzIrZ1lYbVlJaFMzY2t0NkVFUGV6WTIzWkhoakcwd1B1SHQxenN6N1lzZEdlUHVaWWxlTU1Jc0thMG1iVEZydWxNR3kzc21KZVJDc3BmOFB1elE0SElScWRhSVhMaEU4NjdZZ1lCZG50WGtjMzZiVS9QNHcva3BaVDhVOUYwTTBCMGhvRm5vTmEwdWNXd3hGaTUwczdUMTV3TjB3cVRaZkI3ckxWOHltaGJxYmNPRi9qYWRhdlVmTjJzaFowR1ExcGI0TjQya2RHbjBjVlREOTEvV015Y241ZXFJUlQvMStkRmtiMHZUMWdPSnVWdnJDSWYyMlV1S3BwOTM2U0ZXMHFsc3FGdW1KUFdPVEN6d1U3NFhzS0ErV0J4bnFETlZrQWZBcUkzaldxc2h5bjlITWE5OVN2WkJtR3cvS2NCMWVqUXlvUEZZNXN1L09FUEQ3MFR5V29RL2lmVlIzbDhxVFNBdXZUVVg0RjRTZVkwYU5GelFBaVZRRmczWkQ3Ry8zMEVLTi9wY0VzQUJTakJYWTlkaTc0cmxYcEpjNGRWNDhqYUlCckF5NHd6THdJRFZadSszV2dmc3UwTnBPY1l3dzN2WEhaUWNyUkMzTnRRc0xQR21FTVgxQThzSDMwWVp1Z0JZdWp4Q0x3N2UrNU5EVGRkUThlYkdCK1lnNWFYMEtwcXdJdXBTTHIzeUQ1Sm5GeFR2ZmFucDZPRzArMStkbUYzNklnR3N3OUJCY1A1M25mSFA3Tm4zUVpYcHN4TStLcHhETm4xK0FxV0I0a2RqYmlhWXZ2UHFQN1dRNEsvRGpEVVo3MTMvRGJGN0JHS1NLSjA4WCtMMVRSUnl4K1ZXNzJvT3ZBMTNBUXVyWHUwNDl0M045RktZRTRXM2M2RTk2YTAxeVlkdmk3NytEQlJYdzltUkMvN0xQR0psa0ErN1I3MjIxY0dRZmNXb3k2VUtjcmZ4QXZBZkJ5RDZjTmFjdGVxSENhZStwQ2xtTEd0R0JnbUNTUDdqQkhSMXRkMFg5NHUzNjFiRCtZbDJnWXM5OXRrb0ExdWM4NjRQZkJUaWNhcHFldmhxWEJmZTJiUGxpK1AxSGpNWkZhdTRCR3VWTUdsMjZJYUtEbEo0ejY5WFI5R3h4WEhzNTBXYkxiaThBMThSVGVFcmg1MVdaWlQxaFRURmdweDhXajdTUGlxVDZzazJPS0g4NXI0QzY0VXNES3pxbkJHWGZVVW9hRjg5Nm5VSm5rU3YrbUh2UklpS01CaFVRT256ekd2SDBxOSthc21ZOWFwcVpxd1djOGFHRE9NRU1sZ2VRcUJTaDBVYVFEMjJJN3NlZlRhcmtGZ0xObk9wQTBlSCtxd2Q2Zy9vZFgrVnlXdzBCMWExbS95TFBjNVZRWjl6MVpKTzhMWGI0WW9yYmQxL1dMbWU3VUVCN0JyMTJGY0ZnL1pWbzI2WElzQTlKdGlCS2RhemxveEZQMFFRd09KcFFVb0VqZ3c5M1ZzUTNwdDByQ0tOb2g2bkp5WFZHY093d2ZNYWRjWFErVVJ2SC81MzUrMDBlWTRFZzUvWkwrd2ZVeTFwR0pVa25aT2puYmpFbUhFWWh1d1kwcCt4bTR4Wk0xSzAydzFEV2NjOGJzaW5NdG1pWldOeXVDQlovdG5oSFlqei9nWk9xTHVzZ3dCelFWZHRQRlFYZVlEdkhsUnhjd3RzUjJJMWpSOVNLaWR2T2IycGs3RDAva2lLdU9YeDNwbUR3NUZBSFJibVhWbForYWxTeGUrNEhTdWRpeGZhL1BKWVk2RWVtbzBrdEpyNjhoNTJZY0dLdnNIOUQ3eDlGVjdMOVM3d2RLd0tCdVhtQlc3ZmJNdFowQklSekZsUGNiMW1ZOG50cHNYMllnQXVzMGNNMHF4UkxQV3QxMUt4dmZjanFyZ0M5YXJFM204SjdmZUpSY1FWSkFlczg0cjZ1L21nYlVucWR6L2cwQzJ1Sm9WN2trOS9LV0NWTG93VzVPUlM3bHZaMmovNnFDT2tldytmNTJJMnJ5cWp4NCtxMjUvLzF5VDl0RG8vbXkrU2xabHo5bHI4T2RkanVDSEdsZHJEQm5FR0V3bkpYQlhtZEo3WHErSkt0QlBtUFJlcGV3bVc5NFJPR1ZFWTlLNDgrcjhpRWhBem5UeGdWR2RFOU9LMEVYblNDRmR4dkY4YTRLVEMxTnk4WnEyNzdCTkxpRmNDSE1ENUhlaFl0Y2hEK2haNzhGV0JvQkFOK2toTHlteXlBSUdXY2xhN0xXODFsZ2ljQ1FkdGRpYThNUEFIZGtIeUhxRzNwSXVodWV2TS9iaXhnUHlzWmU0UndyNHM0TGN2SDNXNUJFOGdWLzZ3MStSd2VqTXpDUitKdjgvRzlFVzhReitRd2VJeFpLQ2pBK25YNGM2dG45WWFmVU5mbDhVK2MxV01kd3ZYQThkYTZaM1JSdURzWGFnQVZ2VDBaeDlRNnBrL3FzQ0tTQXo4MXpYdGZ0RmZFRE5Udy9uTWJoNlFXUlpUWTRLbjUvT0ZYZmZTQWovNzZiQkFkaVlvUkZwN2MyTXJ3WEJUWnQ1cEQxc20yR0lWY0Vmd3RwMjBhZGYyaVpVWEkzd0RXbENBVlpJNVZMZjY2bU13R1lBeHpDdmxpR28rN3ZpTDE5WWo0SUt6MDdab3NNUFcvUHFmMC9ySXpwK21QL083Snh4SDBMelRaOHpHdEdzTzNFSVQ1eDZWVHJYVytMOWxnZTlVTUxQNVpiZkN2T1lsR25PaWVCcEVuUlNCeE4rL2VCTmYwamJ0d0VFNkJhb3pWeFY0cVdPTFE3KzZpa2ZkRytCS3d1eEN5SStyMmIrZzJOTXRrWDdSN2NmVkRLV2kvZ0NFa0QxYzFLeThzTFhodmdlT1B2aDRxSlo2RThHcjdOVGJFRlBjMnZEc1cyVzhtbGp0RnA2Y0NaV29zcnlSSEszUTlEdlI4OG0yOU5rVm5YdXJpUUlPaVNzYURwK3YyMU00ZmxVY0x6WWV2QkFDOXIrTVZxTnZvRFJDZ1ZGamN5Z05YSzdDeFlGamIvbG8wN1Z2WlF0bDBtem4vT3R2K2RKMTFkdHJ3SGsxVUE2dGRDd2VzM2swblUyTFN4c3g3Tk1TUFpldHNtYU11a0pIb1BYZENSOUg2b3pveEdtcjJXWXlKWkxPWkZBZGd3Mms5QkN6M1g2OTNPTHlHVHN5M3ErZWVKSnNlOTJ5YUlnNjcxL2Y4ZWduNFBBTXhRSzJYdzBMdmZkSjlCN2MrUWRTVFBTdmxDclo0TGgvMmhxbTd0YmFYRGJ6QWxodWRTRW83QWV1V21xcHp5MVhLVjF5MVZCcnBLUkxxVlM1bFpxZU45cTlCc1RtTlVvUU1XUk5JSUdHSTBYa3lzRVNjZ1ZabzdIaFlyQTBhQWxTb3dvOEZWZnV5K1hGbW9yaE9FRW9uOHU1eHNGNVlJdzVjaW9ub01JRmgyMVhSMHNIaXV1bUR0SmZ3K25uNWhTVkZXTCtWOVJVM0ZZeUlGSnZTR3cycE5VeWlnWDhLdWNEbWphT08zQnZuMDZYc1FoYmZPYVVkUGJudVNEV21qSWtrNTJUWVYxYU5JM2hsa2hXcktFWlBpd0RHcnlQY1BiNy9JeGx6N2FwSGtUaC9ZV3ZmbXNzRjZTNGtoYnZEM3FKa1FVV1hCWG5maUNVVWtpSmpRSmw4TFh0RThxZEk2akZiZEYySjdtdTI3eVhsNDN6OTdDOWcxU04yV3dFbytERGtPYlBlbHBFSFhrZDBtM0ROSWt1alZOS05GOVRJZXpmMXF4cHBkQ0ltaGY4TnduYXJ2NFAvVk9NTS8zd1FjdzY0RElKdTNCbmp4RHdJRFVqTjNuYU1tb2plem02UEREY0Z4K09sOE81UXV3MThHUW00QzhhNWgvUlN6NlBjRlc2Z0JURjJUR1Z4VlFxT25HWklhS0dZeWFkT0JVd1dod3BGTTRZMU1wWUFnSFhxL0J0ZU8rYUtiY0dJVVdnTUtLeU5TUjZOaDl1dWdZczdDQ3FIQ3owd3FncDNZZlliSG5FbEVaaGdXZkpQNTQzZmQrT1M0MUlNcXN6R2pNNkpHbVV2dmc5dEh5RWd2Q0laVEszV0VIQVJDTG1jaWRpUjhUQjNpUUJxejFCcVJxV0ovREFSRThTMUovVTRJeEwwRVdCZ2I2SStRTHg1eGVQeHJkVjVTZnJaK0YyR0Vqc1VaWFZOSGdhRE1kTldrc1FOWi9IQUtjTkdtVTBudkVFQkkrek9tRTFpeHhYUG00bTFiQkpIVCtrVkhrd284cFhFQWthc1p3VFdDMkFGZlJWWXcwL1VZNHRMcTFZcUxTalp5dWFSNmo1d0piNEFtK3lUM0dXVlh1YzNZZ05VODNnYmJsYzhKS3NmVWpRMEw1ajNwVUZjWElHY29BVjBDN3crYjVxUmlKV3hCRXJrbjhadVhleVdBb1dmZW1sQXhkcHZMZHcvcmhxWGJ2YXNFWFk4c0MxaGZ5S2NwQjhiN2xieVAxWEFlNFdzY0x6eFVOYmQzWDIxTlkzUEVGendYdUx0dDVSZjVpS1BTV1FJanNJdnIvVnJZYncvT0M3Q0w4dk0vQlRISFo1NVlhSk1wRE90N1J0YXRwWk9kdzJuMTVEaCt0TGpTOEFmdVhqUFJ6ZXViOVFCelZ2ZHJZSmhRRVVIMm1rdjB5NDk4Qkd3bmZ2aWp0b0ZiVTNTZHEyWC9kMFMzdEx5elNMOTFOejgyT2dCUGdzYXUreWdUK3RPQWc1MUhDZlhkR2Z5bkdxRVJUdmE4QTJxUEw3UGEyTjNMcy9uWmRBSzk5eTZDazI1NjVETFczVXhMSlJZKzJ0OS94dXZyUFowdHBTV2I2dDByZlYwclNQMDlIV3VxNjFkYnkxVFF1aUVyeE1wSmZjcHJkREZUVVBWYk5GTnp0WWFqMWwrZFc4bjVwYlh1UTBxMXVhRDRNbm9GQ2kzOTBudWhqZjl5RFl2eHl5STNTYUYxMFh4MHJsSml3NjNhM2tVNnAxSzJkd2t2eXhXeHlyMWM4VE9rRk9YV0tLcWozYml2SUVYMkhHYmJwQVl1WERqcXBEMXNFK24xWnRuY1JKcm1tZ2NuaVZET3V3dlBXU0N1eXdubjlhWTdVdjAxRE42eERUdDFxbFE5ZTdoVXRiaE1LV3BjSkVCU0ZiOWVVWVhBSkg1bnEwa3ZzaERtMUZyV1czOG83QjI5Qmx6ODU5V3lQUEExK2Jqd2FwK1B4a2h0ZDFJS0l3OWZ6bHlrN1YyazVNbm11VlhzbXR0VU56ckgzeHR0WUg2SnFqT0tLMlErZW12MTc1UHFRMzhUKzltNlM3eWZVOHE4RCtCeGhUUmVIQ3ZqVG5Xa0FNOTFKWTJRa2I1QUdQUXFXSnFBNzZubHcrdy9lOU9ZQmlwaTRkMmt0SWVPUk92MUJGY1crYWdDaEEzZXNsRVhVR2JjSUdBUlRjNG5oVDExQlo2NlhYelRGTEZOeVpJVDVNTFcrcnlCbW9kVzJWckVYRFJNWnFSRC8ycXlNTDcyWGdRcEdFTGZOb3o3MGd2bzdCa0J6eFdwNmVoQVZhY25wZXRYa042eEpHZGdpSnlocEpoN2FDTUlnRE1jcFJUOHFpYUx2TDdHYU5VK1puNHVpbHJnYTNZb00raUtzSEhxajlHdTRuZ3JwRkhvV3J2bEZRUHNQY3B4bGpxT0xzdmRtbWpicmVtc0hyYTkrdVNzR0Qrb1Z1cGJzT2I3RnhaWVU2c3F4UmJkeDBuV094a2traXVzNHZudy9LMFdDSlI1dUk3NVhYVDMxNEJzKzlEVG5CeGJ5Um1ORzV3dzVCZ1dQVUpoblpzbDJXVzNONSszVXJkaVUwTGlxeElDOWZKaHVmTmwrV1RKcXUwTGNTa2t4WDR6RkFlNVJXUkxWY1BqNVRNMU5GUnRQNWJiZmtjL1liTk5VSWlMbnBUQkxUc3JzcGdDTVp4Mm5GYWtNdkp1Y29pandhVU1hS2VMN1FRdWVqNktPMjNKRmxRSXRVdWpZek8vU1l1RTA3ZmJ2SVJORzhNbmNwbzVkM2w1bEswaklqbWR1NDlZOWJYNm8yNllsWmM3UGZIZjkwdk1kbUhsd1pRVHlIRE5YMUdsNWsxajdjUDQvNU1ORXA0MFFKelRNM0dMaXYwSnJmQlI0dUFmZjBxQkJNVzBLVTRWbXEyT01xY0xNZFREZXZhUGlDbWJZNHdZeVZMMWdaTm5WUnNqNEhMcGFBdWVhbnE0TGNDcGxYcFJLaWt5bVU2WWFjNGV1K0VJbysxL041K3M5RndpOTBRUDJOcmdDS0dwVERMREtXTGFSVzZrYlBhbU4zRVptS1JJUVF5ZFVlYkVTMCtYR3FkcWhiZ01TbTR1SDloYjd3QWFxT0lWMkM0S1BVdm1JRUwxQVBmQTM0SzVsbWl4VjM2RzgwS0xzYlVvMUNudXJDeUJSRjdrY0ZTKzlFc1lYL3pRZmY4Qi9iZmRQa3l6c3BNSTRxanBuc1hyckFvNy8xcWRmblMwVE0zQWFTMlVUdlI4ZUxWdUxlanV3TGxIZGJ3blVXWFpGVm1veGhuYUxMampDYk5maVoyUUpKTGdpSzI4cU91a3lseXhaeWV1SlAzQy9wSWJRNlRGMnVoWGdhY0taV0Zidmd6M0d2d2g1Z2FHZHRJQ0haZEFQd1BhQ3pJdWphZTFmTWRPRjkyZDRRd1dIdk9YMkxLREpsajJpNk5qZm9ocXNnaEZ1dUc5aEtyYVhOMG9oVjBFT2tHYUxMTHpPTXZ1aFhFOHZVNWRib2NzWm9ETWxNSVROeStUV2kwSktJTDVEVSswL3BkMGYwUTRtNkNYV3A4TUhRSStWOW5obmN3U0RLTWNvUS9jaHpWNzliS2MrL3Z2ZzUvU0Z3Tzc5MDdQRDV1L2RVeXZldjlEMmpYMFpaZEFlU1JpL3ZmNnE4M1dPekp4aVlXaGpLSDlwNkRtS1VkdHczNWY0U3hxdGJIN29qU2NXSEZyblcrRDdsWW0xTmsrSG1heXJ3ZFBSQ3ZmWW04TXNsanhvZkVjMk11RFgzMncvTU0raWx1dnpyRFp3VGNlbHR1cDl1aHQwR2w0OGQrUW5IVzA1VXNqelhhL25uMmJOczgzVDlFSFpvdThudDQ4c0ZPUHMxNzg5M0NiWGIyc05MV1RHTmpwVTRBTU9UckxoV3k0NVBYcXVWUnF4T1ZRVFdTR05XaHlyOHlCNTQ4b0pXWUFQWlhjRGh6Y0tPOTMrOEIrTzVSOHhLcU41Y21veWtGQ28xcmhZRllLMm9oR2V6UnRRVmpHNnA4am5BT2xVcGorUHFiY1MvbmxJQ05XUTRDN0JFY1AxT2I5L1luYzZ0YTRJM0xuSklWa2I3Tm1IZFdLajJ3cjlaektUaTc1c1hLMU5EZTV4ZFk0b3B6OHJFL1FlbkgvY3NXWFlxRmRtYmNRalgyQWZpdHBCRUdwRzdmUEl1dmZDckt4VmF2OVlRWW1Xa2pnNDNxQUxUZkpkdHpLb1V4bnhFLzNmUk9tL1JqS2k3dXpBbk9hZ2dTRm5YbnBicklIQzJMTmVXb3ZGbDJwWnFyZ24vNUtMa3NqRWlJTU5pL0loRW8vUkZaWmcvYXhZREtTL1lKVXpyVTd0Z2g5dURtN2p0cENGSVdiODkyeDJJMnlxeU1TcmVicjlJcTJQV3NKMk1YcndyTlNJaDNRQTVBMi9aVUlLMDFmYnd2bVlFRjhxR3FwQmlMR1hxWFM4ZXV3WmlMSTdWOXFhUExoajIwVUpQOTJxVkY2VjR2VVFkWXMzOGw5QlZnU25jWU9HN1pWa3RpdHJmZnZ0QjJiN1FKK0tHbW5OZXZKVWpXZXZoaUJDdlVpR05QZHlHZUFYTHQwSjRmcENjMkdrRjk5WFRVa0c0Vi90cXBLWEg5ZW1wQnhWbnYydURYWHBmRThtc21tTldsT01ZMkYrd3lWRE1HU2RDWWVQbVltNlRvZE95Q3puVDVuRElORkhRSWlYNFluVTZvVjNxOVVnd25jeWxPR2FTWm8rWFNhUW1WanV6QmszR2FLUVhSeFp4dWcxSnZzLzB3MkQ0ZjF2eHlVUWVHQlo1dlRJRCs0ZGM4c2Q0VCszUXZsZkFYQithSTcrVXpjN3pGQStMT1p4ZjVLQzhRbTF2Zjh4SUFkQm9VemwxTktQK1JIZEY0ZmlwNWxjYW1uWTNkMVMxdjFiL3RXUElZaThSaEwyazVRNW5hVUdnOFRvYTEyaVRtRm1iVUEwVVRXaDBDVE9tUytwaWdIY2xwRGh4OEdhb3ZTV2pMWFFyMFZJRW9oL3oxS1VUdG4zWGVPZzc5REMrNUNTVTZScmRQZW1UWC8xc2lkdjZENWdWYVZac0pUUG5VenNsVjZ2RlV2WFZFdW5WSElsRWM3VlhacE5MYmJLdk1iQnNiNi9rczMrTG9lWFRWOUlRc2dNTjlsMGIyZ0pablBOcE9NN3V2WjR1V2JZZDU5UlRPVHczSkdYcG52cXFoYlgrRzBES1ZDdGdFbDFVTFJQZjNlcmdrTjlQRjY0RUVIV1pSdDNFMjYyMWZQU0hhait4U0wySGhsendkVDJ6cXZoL3daZHNDRWpObzRvdUlMZDdJY2UxYlJId2ZwVldCWmhqZlppWlRBdEZOVk1MZzZnV01oaHFtV2hLMFIzRXBvS3R4eXVXelMxcTVtcnBPd3E4ZVZ5M0MvRlJlUk1JSEtlWktFSStlWWl1b21sMkNQb01Galg2cThCbHYwY0UzVnVvUWs4SzV5ZU1wZE5ISUlrczN4aExDU1hsZkU4cXYzeCtqdzlRWXBoUzR6TEhOZjN6dHJFbU1KMDRHMDEyVXNQWDUrdHF1a1hiVjJoS2JVa1JUSTZjK0R4RGZsTWh4b3NDSWMvemdKaEhGVXRkanlsdldDa3B1TDQyZFdEZnBPbHVhcWxaMWhOQnROc0xmQkdScVVKbUlTdjlaNEZFZWt2Z2pXdHNiR3I4UWU1Mkk3aTlKZmdSWGdPUXZWN2JKTmF0K090dFkvUXd5a3VOd0g0akMxYjVaVXZacDcrdXEyRmt1cnM0bWdPaGRyVy9kOWpnVFE2N3BnS0RyOGhtL2s3bzlvN3M1MDZ5MkNlZVkzUHVPOEZtbmJ6dmJ0WVBMYTMvVy9yWkZKWjdHZ0lNMzY3WHdQWWpnTXByL0VNZzRYb0RtNUd1bDFnSHM3L0NJU2FiM3p1Z2swNE1hQTBJVkVVdnJtM3VwV0RSOERjS2hsdFFNRnlOZ2lFVEkvZ25lNjJrVGQ2YzJkYms1V0hEcng3WkpJc3FjS1l2U3VKUmxJYWlvQnRGd1Rzb0N2NlVvZ1RBZGNnSkxjZ0p6eUluUElLYzhLR1VvaTkwd2ZTYVJ1d0FvbytvcWJxUjJ1Y1JwZzQvY2ozQlRKajlLZVp4NEdmam1tQVg1VG1XWUNsVE1OeW16d1FseFdtRFI5VisvaU9jSlBaZm1CNkhsK0FHalkwbzR0UnQxdmNIdTRiRmFuMnl6K0FiUmpOYjhvMVNUamRHR3FOT3hYNFNJVFZweUNQWEk4eWhpVDNCQWlZZTN6SVYrS2hrNWlSQ1BtalQrM1NsZXArdUJ2bmc1REdMUWZFWEE4RUE5bmJyblhvQXNYd3hlNyt1SXRBSWZvMzY4VWczUW1CcSt3am9iZlF4K2dSOWlqNURuNk12d0pmZ1Bla3JVdndhcVNLK1ZkN0Q3K0QzekE4ZTJ2aDJJekQ5dGVueFZENkpDNDUxMnh0OGxqNUhmVDlQZnhwK29zNEh0QVZkd1l6S25LcStRc3p4ZXhvM3JHd0xjcmQyVmRRUU4xbVh4MVBjd0MxdTRzUGJ6Qk5FTHYyTGFMRGRVdFAyb2JReEs4YXpIb080VzNpRDNUNDlmV2VVMmVmUjNmNy95TEZZWm1EUVh2YzlLOWxhZ1VVQU1lTGVmeGFzQWpDSGZWZ0FaQjZJZFlzNTBYdTEzYnFMRjliMjRJOVpEMnNEYmkxNC96OGd5MWl4bHRqZ3ZPVUI1TG9BZ0JYWXphbEpnc2FNclIxdFhZZFJSbEdIOVJRZHNFKzZ4bVJnOHlJZW84b3hSdU1RQlNvUHVNT01ZTUxkczR4R0NKK0gyU01pNWFidXMvd0NWWTV0TkEwWG0weTl4R00wSnRBT3ExcGdLMEJkS0FmN0RLR3YwTWZveTlGL1pHbGFsTnZsd25sQ2NoZ3RSTDlsVzZBcjRLTitvU2RnSXhYcElKeUYyN2dPMk8vTkFsaDFWWGVOT3lQZDkvM1NJS0EvVkNrMzlZNEVQWWl1SGVNQkhKcFdrbTNRZUpFTFBFWUwwVzlnZ1pLYTl6R0h6djhiSTdESGUvNFliaGZlMkU5aW9POUpNMzIzYnVic1NrUXZpTXcrbjNRTkpVZTh0T3Ryenk1djJFYTY3QTJ4VlpUczR1OHkxampudTUzTkMza0ViaUUvWmpzaXVsT2oyMFE2OFU2WUVpbXR4a3V1QzN2TDhZWkxvMnNGRWFkUXh1dkc5bEUwZXQ2K2xrKzdNUUhvTjBQWWxzYVhiK3ZhTjN0cjF5NDJkVm1rZlNiVjV4aTNCYlYxdTExTTl3RDBsT3pMWG5ZQ1I5MHQ0d3Qrcml1b0tBMTl5dXdEMnBMQUp3UTdaM3krY0luaThrZzYxOG5VU0FUMk82VksvM1dCSWExaFQyZXc3RW9GU3JhTUlqK1RXRTArOTRyYUhBSndFVDkrWjdwbFhFanEzeERIM1FEZzVJR08rNUw4TDIrSi8raXd6eFBNeGdFaUJnQUkvaXlab0hBbU1QMC9lRTVrOXk2aU5lMWs2dzdXejR1Y3JxVHB4eVozQmVVSnYyUnlwM1hGVFBZZHlMN0pJd1I0Umtqek43YXpYaTJDSU1FMHBUWG9kWmM3SVNqZCtyTDRGSHhHRXkzQVJIVUF4MVYvTFp2aWpsOHdXVjJtMWZTQ2Yrc3djMFcwNk9xYTVtNlNLenl0Um5oUVZhZ002TWNoUmdrSk1YWUU4WWhCOXVtS29vVHBHUnFOa0s0Zng0T1crdSs0Q3JjR1lyZ1RaNXZtRzlUVWp0Zm5pcVlaVVdUNlVnMGVFM2hraVVHNW5CcGdqRjE0RFhibytEUVJiZnBWMTN6TXBsSUpDdWMrVkxKeEdnYXp4RndXSTNaTG5qNjVYNTAweEIwM29aME1MNGFTUDZHdlFYS2J1UE1yVXF2bWFRaDNVR1pyUlVaTmlZbzl0WFRSVTd4R2xkU3lwWTQ1YkFyTFVMTXp0QWI2NWltZElPYVJEWXBJVUY1QnNJbzdLUTYvVXpTd3RJMlNlZFMxazdRb0lYUFNjMEdURjR1eldoeEx4dndOeEY3aDlyMTJMTFlYSWQ5RkQ1c3JPL1MzMmJLZVd6WlBKcVgvQU0zUWgxcHVmU3Q3NmppUXZZRWwxbU0wZU03VE1rd0FBM3Q5U0RtNzZaYVhLTFo1NjV2cE8waXh2ZlF5Q0kyajVCT2hWL2syUGlWM3NSdDRLcUZsL21EdURuVXo2bTdWdjc4UlBiM0kxalBNWFZDcVZZaWYrRVRGSG5XM3JjaE1iNTFlMXV1VnB6TDBsZ0dUSUFVTWFSVUZjS0FEc0lFRTBRSVptS2Z5RFVsRlpZY28yYTYvNDNRRENhWHNrY01HT0syczVLRnpxUHlpN3NqZko5UzhOVm9qajhvWDFNanV5ZkVFUUlDUGNXaW1BV2dqTEJ3a0pxME9KamlkSFp6MmlZM09aenNFa2RuckVObHluU05ZWWw1eWhES1hZZzhqMWJxVENBaHNuQzd5NUt0UUtKdFhsbUl5aFV1OE5MTEJCWml5dVFPVXlEYkpkRVVteURXWnJMOUNlYWFaWWhJSDdVUzB1SlhtZWJUSWlqWkJjckY4MDI4Nkp5ZXY3RXkxeEVRT3FzbVR3N25LdGRBVVplenlUZURsa3kzWEJHVVo0M0xLcGg3UUhLN3hxZUFRZXZ0b2NXUmxFdEpsQTAxUlpNcFJLVFZGWGVycHhWeEZ4YjY4bkY3anNxN0diZFUyMEJ1ZUlWSk93c2ZGcTRUUEJJVVNPTGk0Sk1yUVZ6OTlkWk1oYVBDNFdUc1l5Z0VuWnFzNG1yd1lLZHhldVBsWUtUTEpxRFMvVjRvNGhDbytEdk5RYi9RSSt2SG9yZWZnTVRQTW00WTV1MDc1UDZKSVhoSC9lMS95bndFQSkgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpO3VuaWNvZGUtcmFuZ2U6dSswMD8/LHUrMDEzMSx1KzAxNTItMDE1Myx1KzAyYmItMDJiYyx1KzAyYzYsdSswMmRhLHUrMDJkYyx1KzIwMDAtMjA2Zix1KzIwNzQsdSsyMGFjLHUrMjEyMix1KzIxOTEsdSsyMTkzLHUrMjIxMix1KzIyMTUsdStmZWZmLHUrZmZmZH1ib2R5LGh0bWx7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNH1odG1se2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1wYXJhZ3JhcGgscHtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS42O3RleHQtYWxpZ246anVzdGlmeX0ubW9uc3Rlci1oMSxoMXtmb250LXNpemU6M3JlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xNTttYXJnaW46NHJlbSAwIDEuNXJlbX0ubW9uc3Rlci1oMixoMntmb250LXNpemU6Mi41cmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjI7bWFyZ2luOjRyZW0gMCAxLjVyZW19Lm1vbnN0ZXItaDMsaDN7Zm9udC1zaXplOjJyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMjU7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfS5tb25zdGVyLWg0LGg0e2ZvbnQtc2l6ZToxLjVyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMzttYXJnaW46NHJlbSAwIDEuMjVyZW19Lm1vbnN0ZXItaDUsaDV7Zm9udC1zaXplOjEuNHJlbTtmb250LXdlaWdodDpib2xkZXI7bGluZS1oZWlnaHQ6MS4zO21hcmdpbjo0cmVtIDAgMS4yNXJlbX0ubW9uc3Rlci1oNixoNntmb250LXNpemU6MS4zcmVtO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxLjM7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfXAraDF7bWFyZ2luLXRvcDozLjc1cmVtfXAraDJ7bWFyZ2luLXRvcDozcmVtfXAraDN7bWFyZ2luLXRvcDoyLjI1cmVtfXAraDR7bWFyZ2luLXRvcDoxLjVyZW19cCtoNXttYXJnaW4tdG9wOi43NXJlbX1kaXYraDEsZGl2K2gyLGRpditoMyxkaXYraDQsZGl2K2g1LGRpditoNixwK2g2e21hcmdpbi10b3A6MH0uZGVjb3tiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTEpIDAsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0yKSA1MCUsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0zKSAxMDAlKTstd2Via2l0LWJhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtc2l6ZTpjb3Zlcjtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKTt0ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnR9OjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfTo6c2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9a2Jke2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2JvcmRlci1yYWRpdXM6MTByZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7cGFkZGluZzouMjVlbSAuNmVtO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH1kZXRhaWxze21hcmdpbi1ib3R0b206MXJlbX1zdW1tYXJ5e2N1cnNvcjpwb2ludGVyO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczpcXFwidG51bVxcXCI7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4xZW07cGFkZGluZzouNnJlbSAxcmVtfWRldGFpbHNbb3Blbl17cGFkZGluZzouNnJlbSAxcmVtIC43NXJlbX1kZXRhaWxzW29wZW5dIHN1bW1hcnl7bWFyZ2luLWJvdHRvbTouNXJlbTtwYWRkaW5nOjB9Lm1vbnN0ZXItbm8tdXNlci1zZWxlY3R7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfUBrZXlmcmFtZXMgZGV0YWlscy1zaG93ezAle29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtLjVlbSl9fWRldGFpbHNbb3Blbl0+Om5vdChzdW1tYXJ5KXthbmltYXRpb246ZGV0YWlscy1zaG93IC4xNXMgZWFzZS1pbi1vdXR9ZGV0YWlsc1tvcGVuXT46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9Lm1vbm9zcGFjZXtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5LW1vbm9zcGFjZSl9Omhvc3QobW9uc3Rlci1idXR0b24pe2Rpc3BsYXk6ZmxleH1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17YWxpZ24taXRlbXM6c3RyZXRjaDtkaXNwbGF5OmZsZXh9YnV0dG9ue3dpZHRoOjEwMCV9IFxufWAsXG5cdFx0MCxcblx0KTtcbn0gY2F0Y2ggKGUpIHtcblx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0ZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKSxcblx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdGUgKyBcIlwiLFxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywgMjAyNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IFJpcHBsZVN0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IFJpcHBsZVN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRSaXBwbGVTdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIHJpcHBsZSB7IFxuc3Bhbi5tb25zdGVyLWZ4LXJpcHBsZXthbmltYXRpb246bW9uc3Rlci1meC1yaXBwbGUgLjZzIGxpbmVhcjtiYWNrZ3JvdW5kLWNvbG9yOmhzbGEoMCwwJSwxMDAlLC43KTtib3JkZXItcmFkaXVzOjUwJTtwb3NpdGlvbjphYnNvbHV0ZTt0cmFuc2Zvcm06c2NhbGUoMCl9QGtleWZyYW1lcyBtb25zdGVyLWZ4LXJpcHBsZXt0b3tvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKDQpfX0gXG59YCxcblx0XHQwLFxuXHQpO1xufSBjYXRjaCAoZSkge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpLFxuXHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0ZSArIFwiXCIsXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge1xuXHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRBVFRSSUJVVEVfUk9MRSxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBDdXN0b21Db250cm9sIH0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21jb250cm9sLm1qc1wiO1xuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdGF0dHJpYnV0ZU9ic2VydmVyU3ltYm9sLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50IH0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0JVVFRPTl9DTEFTUyB9IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IEJ1dHRvblN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L2J1dHRvbi5tanNcIjtcbmltcG9ydCB7IFJpcHBsZVN0eWxlU2hlZXQgfSBmcm9tIFwiLi4vc3R5bGVzaGVldC9yaXBwbGUubWpzXCI7XG5pbXBvcnQgeyBmaXJlQ3VzdG9tRXZlbnQgfSBmcm9tIFwiLi4vLi4vZG9tL2V2ZW50cy5tanNcIjtcblxuZXhwb3J0IHsgQnV0dG9uIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmV4cG9ydCBjb25zdCBidXR0b25FbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiYnV0dG9uRWxlbWVudFwiKTtcblxuLyoqXG4gKiBBIGJ1dHRvblxuICpcbiAqIEBmcmFnbWVudHMgL2ZyYWdtZW50cy9jb21wb25lbnRzL2Zvcm0vYnV0dG9uL1xuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2Zvcm0vYnV0dG9uLXNpbXBsZVxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvZm9ybS9idXR0b24td2l0aC1jbGljay1ldmVudFxuICpcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIGJlYXV0aWZ1bCBidXR0b24gdGhhdCBjYW4gbWFrZSB5b3VyIGxpZmUgZWFzaWVyIGFuZCBhbHNvIGxvb2tzIGdvb2QuXG4gKiBAZmlyZXMgbW9uc3Rlci1idXR0b24tY2xpY2tlZCB0aGlzIGV2ZW50IGlzIHRyaWdnZXJlZCB3aGVuIHRoZSBidXR0b24gaXMgY2xpY2tlZC4gSXQgY29udGFpbnMgdGhlIGZpZWxkIHtidXR0b259IHdpdGggdGhlIGJ1dHRvbiBpbnN0YW5jZS5cbiAqL1xuY2xhc3MgQnV0dG9uIGV4dGVuZHMgQ3VzdG9tQ29udHJvbCB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIDxjb2RlPmluc3RhbmNlb2Y8L2NvZGU+IG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2Zvcm0vYnV0dG9uQEBpbnN0YW5jZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtCdXR0b259XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXHRcdGluaXRDb250cm9sUmVmZXJlbmNlcy5jYWxsKHRoaXMpO1xuXHRcdGluaXRFdmVudEhhbmRsZXIuY2FsbCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgPGNvZGU+QnV0dG9uLmNsaWNrKCk8L2NvZGU+IG1ldGhvZCBzaW11bGF0ZXMgYSBjbGljayBvbiB0aGUgaW50ZXJuYWwgYnV0dG9uIGVsZW1lbnQuXG5cdCAqXG5cdCAqIEBzaW5jZSAzLjI3LjBcblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxFbGVtZW50L2NsaWNrfVxuXHQgKi9cblx0Y2xpY2soKSB7XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZGlzYWJsZWRcIikgPT09IHRydWUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdICYmXG5cdFx0XHRpc0Z1bmN0aW9uKHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uY2xpY2spXG5cdFx0KSB7XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmNsaWNrKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBCdXR0b24uZm9jdXMoKSBtZXRob2Qgc2V0cyBmb2N1cyBvbiB0aGUgaW50ZXJuYWwgYnV0dG9uIGVsZW1lbnQuXG5cdCAqXG5cdCAqIEBzaW5jZSAzLjI3LjBcblx0ICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxFbGVtZW50L2ZvY3VzfVxuXHQgKi9cblx0Zm9jdXMob3B0aW9ucykge1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImRpc2FibGVkXCIpID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXSAmJlxuXHRcdFx0aXNGdW5jdGlvbih0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmZvY3VzKVxuXHRcdCkge1xuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5mb2N1cyhvcHRpb25zKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhlIEJ1dHRvbi5ibHVyKCkgbWV0aG9kIHJlbW92ZXMgZm9jdXMgZnJvbSB0aGUgaW50ZXJuYWwgYnV0dG9uIGVsZW1lbnQuXG5cdCAqL1xuXHRibHVyKCkge1xuXHRcdGlmIChcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0gJiZcblx0XHRcdGlzRnVuY3Rpb24odGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5ibHVyKVxuXHRcdCkge1xuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5ibHVyKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGRldGVybWluZXMgd2hpY2ggYXR0cmlidXRlcyBhcmUgdG8gYmUgbW9uaXRvcmVkIGJ5IGBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKWAuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ1tdfVxuXHQgKi9cblx0c3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG5cdFx0Y29uc3QgYXR0cmlidXRlcyA9IHN1cGVyLm9ic2VydmVkQXR0cmlidXRlcztcblx0XHRhdHRyaWJ1dGVzLnB1c2goQVRUUklCVVRFX0JVVFRPTl9DTEFTUyk7XG5cdFx0cmV0dXJuIGF0dHJpYnV0ZXM7XG5cdH1cblxuXHQvKipcblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxFbGVtZW50L2F0dGFjaEludGVybmFsc31cblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdHN0YXRpYyBnZXQgZm9ybUFzc29jaWF0ZWQoKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGJ1dHRvbi5cblx0ICpcblx0ICogYGBgamF2YXNjcmlwdFxuXHQgKiBlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbW9uc3Rlci1idXR0b24nKTtcblx0ICogY29uc29sZS5sb2coZS52YWx1ZSlcblx0ICogYGBgXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHZhbHVlIG9mIHRoZSBidXR0b25cblx0ICovXG5cdGdldCB2YWx1ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRPcHRpb24oXCJ2YWx1ZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIHZhbHVlIG9mIHRoZSBidXR0b24uXG5cdCAqXG5cdCAqIGBgYGphdmFzY3JpcHRcblx0ICogZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21vbnN0ZXItYnV0dG9uJyk7XG5cdCAqIGUudmFsdWU9MVxuXHQgKiBgYGBcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG5cdCAqL1xuXHRzZXQgdmFsdWUodmFsdWUpIHtcblx0XHR0aGlzLnNldE9wdGlvbihcInZhbHVlXCIsIHZhbHVlKTtcblx0XHR0cnkge1xuXHRcdFx0dGhpcz8uc2V0Rm9ybVZhbHVlKHRoaXMudmFsdWUpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIEhUTUwgdGFnLCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gbGFiZWxzIExhYmVsc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbGFiZWxzLmJ1dHRvbj1cIjxzbG90Pjwvc2xvdD5cIiBCdXR0b24gbGFiZWxcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGFjdGlvbnMgQ2FsbGJhY2tzXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhY3Rpb25zLmNsaWNrPVwidGhyb3cgRXJyb3JcIiBDYWxsYmFjayB3aGVuIGNsaWNrZWRcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGNsYXNzZXMgQ1NTIGNsYXNzZXNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGNsYXNzZXMuYnV0dG9uPVwibW9uc3Rlci1idXR0b24tcHJpbWFyeVwiIENTUyBjbGFzcyBmb3IgdGhlIGJ1dHRvblxuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IGRpc2FibGVkPWZhbHNlIERpc2FibGVkIHN0YXRlXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBlZmZlY3RzIEVmZmVjdHNcblx0ICogQHByb3BlcnR5IHtib29sZWFufSBlZmZlY3RzLnJpcHBsZT10cnVlIFJpcHBsZSBlZmZlY3Rcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHR5cGU9XCJidXR0b25cIiBUaGUgZGVmYXVsdCBiZWhhdmlvciBvZiB0aGUgYnV0dG9uLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOiBzdWJtaXQsIHJlc2V0LCBidXR0b25cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0fSxcblx0XHRcdGxhYmVsczoge1xuXHRcdFx0XHRidXR0b246IFwiPHNsb3Q+PC9zbG90PlwiLFxuXHRcdFx0fSxcblx0XHRcdGNsYXNzZXM6IHtcblx0XHRcdFx0YnV0dG9uOiBcIm1vbnN0ZXItYnV0dG9uLXByaW1hcnlcIixcblx0XHRcdH0sXG5cdFx0XHRkaXNhYmxlZDogZmFsc2UsXG5cdFx0XHRhY3Rpb25zOiB7XG5cdFx0XHRcdGNsaWNrOiAoKSA9PiB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIGNsaWNrIGFjdGlvbiBpcyBub3QgZGVmaW5lZFwiKTtcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0XHRlZmZlY3RzOiB7XG5cdFx0XHRcdHJpcHBsZTogdHJ1ZSxcblx0XHRcdH0sXG5cdFx0XHR2YWx1ZTogbnVsbCxcblx0XHRcdHR5cGU6IFwiYnV0dG9uXCIsXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLWJ1dHRvblwiO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge0NTU1N0eWxlU2hlZXRbXX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiBbUmlwcGxlU3R5bGVTaGVldCwgQnV0dG9uU3R5bGVTaGVldF07XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7aW5pdEV2ZW50SGFuZGxlcn1cbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50SGFuZGxlcigpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cdGNvbnN0IGJ1dHRvbiA9IHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF07XG5cblx0Y29uc3QgdHlwZSA9IFwiY2xpY2tcIjtcblxuXHRidXR0b24uYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0XHRjb25zdCBjYWxsYmFjayA9IHNlbGYuZ2V0T3B0aW9uKFwiYWN0aW9ucy5jbGlja1wiKTtcblxuXHRcdGZpcmVDdXN0b21FdmVudChzZWxmLCBcIm1vbnN0ZXItYnV0dG9uLWNsaWNrZWRcIiwge1xuXHRcdFx0YnV0dG9uOiBzZWxmLFxuXHRcdH0pO1xuXG5cdFx0aWYgKCFpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGVsZW1lbnQgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChcblx0XHRcdGV2ZW50LFxuXHRcdFx0QVRUUklCVVRFX1JPTEUsXG5cdFx0XHRcImNvbnRyb2xcIixcblx0XHQpO1xuXG5cdFx0aWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIE5vZGUgJiYgc2VsZi5oYXNOb2RlKGVsZW1lbnQpKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNhbGxiYWNrLmNhbGwoc2VsZiwgZXZlbnQpO1xuXHR9KTtcblxuXHRpZiAoc2VsZi5nZXRPcHRpb24oXCJlZmZlY3RzLnJpcHBsZVwiKSkge1xuXHRcdGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgY3JlYXRlUmlwcGxlLmJpbmQoc2VsZikpO1xuXHR9XG5cblx0Ly8gZGF0YS1tb25zdGVyLW9wdGlvbnNcblx0c2VsZlthdHRyaWJ1dGVPYnNlcnZlclN5bWJvbF1bQVRUUklCVVRFX0JVVFRPTl9DTEFTU10gPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRzZWxmLnNldE9wdGlvbihcImNsYXNzZXMuYnV0dG9uXCIsIHZhbHVlKTtcblx0fTtcblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWJ1dHRvbl1gLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250cm9sXCIgcGFydD1cImNvbnRyb2xcIj5cbiAgICAgICAgICAgIDxidXR0b24gZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJkaXNhYmxlZCBwYXRoOmRpc2FibGVkIHwgaWY6dHJ1ZSwgY2xhc3MgcGF0aDpjbGFzc2VzLmJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSBwYXRoOnR5cGVcIlxuICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIHBhcnQ9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6bGFiZWxzLmJ1dHRvblwiPjwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5gO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVSaXBwbGUoZXZlbnQpIHtcblx0Y29uc3QgYnV0dG9uID0gdGhpc1tidXR0b25FbGVtZW50U3ltYm9sXTtcblxuXHRjb25zdCBjaXJjbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtcblx0Y29uc3QgZGlhbWV0ZXIgPSBNYXRoLm1heChidXR0b24uY2xpZW50V2lkdGgsIGJ1dHRvbi5jbGllbnRIZWlnaHQpO1xuXHRjb25zdCByYWRpdXMgPSBkaWFtZXRlciAvIDI7XG5cblx0Y2lyY2xlLnN0eWxlLndpZHRoID0gY2lyY2xlLnN0eWxlLmhlaWdodCA9IGAke2RpYW1ldGVyfXB4YDtcblx0Y2lyY2xlLnN0eWxlLmxlZnQgPSBgJHtldmVudC5jbGllbnRYIC0gYnV0dG9uLm9mZnNldExlZnQgLSByYWRpdXN9cHhgO1xuXHRjaXJjbGUuc3R5bGUudG9wID0gYCR7ZXZlbnQuY2xpZW50WSAtIGJ1dHRvbi5vZmZzZXRUb3AgLSByYWRpdXN9cHhgO1xuXHRjaXJjbGUuY2xhc3NMaXN0LmFkZChcIm1vbnN0ZXItZngtcmlwcGxlXCIpO1xuXG5cdGNvbnN0IHJpcHBsZXMgPSBidXR0b24uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcIm1vbnN0ZXItZngtcmlwcGxlXCIpO1xuXHRmb3IgKGNvbnN0IHJpcHBsZSBvZiByaXBwbGVzKSB7XG5cdFx0cmlwcGxlLnJlbW92ZSgpO1xuXHR9XG5cblx0YnV0dG9uLmFwcGVuZENoaWxkKGNpcmNsZSk7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChCdXR0b24pO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywgMjAyNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IFN0YXRlQnV0dG9uU3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgU3RhdGVCdXR0b25TdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcblx0U3RhdGVCdXR0b25TdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIHN0YXRlYnV0dG9uIHsgXG5bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17Ym94LXNpemluZzpib3JkZXItYm94O291dGxpbmU6bm9uZTt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXS5mbGV4e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fTpob3N0e2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmJsb2NrfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMiwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0zLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItMHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXdpZHRoOjB9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMSwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0zLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZ3JheS0xOiNmNmY2ZjY7LS1tb25zdGVyLWNvbG9yLWdyYXktMjojZTJlMmUyOy0tbW9uc3Rlci1jb2xvci1ncmF5LTM6IzhiOGI4YjstLW1vbnN0ZXItY29sb3ItZ3JheS00OiM2ZjZmNmY7LS1tb25zdGVyLWNvbG9yLWdyYXktNTojM2UzZTNlOy0tbW9uc3Rlci1jb2xvci1ncmF5LTY6IzIyMjstLW1vbnN0ZXItY29sb3Itcm9zZS0xOiNmZmY3Zjk7LS1tb25zdGVyLWNvbG9yLXJvc2UtMjojZmZkY2U1Oy0tbW9uc3Rlci1jb2xvci1yb3NlLTM6I2ZmM2I4ZDstLW1vbnN0ZXItY29sb3Itcm9zZS00OiNkYjAwNzI7LS1tb25zdGVyLWNvbG9yLXJvc2UtNTojODAwMDQwOy0tbW9uc3Rlci1jb2xvci1yb3NlLTY6IzRjMDAyMzstLW1vbnN0ZXItY29sb3ItcmFzcGJlcnJ5LTE6I2ZmZjhmODstLW1vbnN0ZXItY29sb3ItcmFzcGJlcnJ5LTI6I2ZmZGRkZjstLW1vbnN0ZXItY29sb3ItcmFzcGJlcnJ5LTM6I2ZmNDI2YzstLW1vbnN0ZXItY29sb3ItcmFzcGJlcnJ5LTQ6I2RlMDA1MTstLW1vbnN0ZXItY29sb3ItcmFzcGJlcnJ5LTU6IzgyMDAyYzstLW1vbnN0ZXItY29sb3ItcmFzcGJlcnJ5LTY6IzUxMDAxODstLW1vbnN0ZXItY29sb3ItcmVkLTE6I2ZmZjhmNjstLW1vbnN0ZXItY29sb3ItcmVkLTI6I2ZmZGRkODstLW1vbnN0ZXItY29sb3ItcmVkLTM6I2ZmNDY0NzstLW1vbnN0ZXItY29sb3ItcmVkLTQ6I2UwMDAyYjstLW1vbnN0ZXItY29sb3ItcmVkLTU6IzgzMDAxNDstLW1vbnN0ZXItY29sb3ItcmVkLTY6IzUzMDAwMzstLW1vbnN0ZXItY29sb3Itb3JhbmdlLTE6I2ZmZjhmNTstLW1vbnN0ZXItY29sb3Itb3JhbmdlLTI6I2ZmZGVkMTstLW1vbnN0ZXItY29sb3Itb3JhbmdlLTM6I2ZkNGQwMDstLW1vbnN0ZXItY29sb3Itb3JhbmdlLTQ6I2NkM2MwMDstLW1vbnN0ZXItY29sb3Itb3JhbmdlLTU6Izc1MjEwMDstLW1vbnN0ZXItY29sb3Itb3JhbmdlLTY6IzQwMTYwMDstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMTojZmZmOGYzOy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0yOiNmZmRmYzY7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTM6I2Q1NzMwMDstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tNDojYWM1YzAwOy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi01OiM2MzMzMDA7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTY6IzM3MWQwMDstLW1vbnN0ZXItY29sb3ItYW1iZXItMTojZmZmOGVmOy0tbW9uc3Rlci1jb2xvci1hbWJlci0yOiNmZmUwYjI7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTM6I2I5ODMwMDstLW1vbnN0ZXItY29sb3ItYW1iZXItNDojOTI2NzAwOy0tbW9uc3Rlci1jb2xvci1hbWJlci01OiM1MjM4MDA7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTY6IzMwMjEwMDstLW1vbnN0ZXItY29sb3IteWVsbG93LTE6I2ZmZjllNTstLW1vbnN0ZXItY29sb3IteWVsbG93LTI6I2ZmZTUzZTstLW1vbnN0ZXItY29sb3IteWVsbG93LTM6IzljOGIwMDstLW1vbnN0ZXItY29sb3IteWVsbG93LTQ6IzdkNmYwMDstLW1vbnN0ZXItY29sb3IteWVsbG93LTU6IzQ2M2QwMDstLW1vbnN0ZXItY29sb3IteWVsbG93LTY6IzI5MjMwMDstLW1vbnN0ZXItY29sb3ItbGltZS0xOiNmN2ZmYWM7LS1tb25zdGVyLWNvbG9yLWxpbWUtMjojZDVmMjAwOy0tbW9uc3Rlci1jb2xvci1saW1lLTM6IzgxOTMwMDstLW1vbnN0ZXItY29sb3ItbGltZS00OiM2Nzc2MDA7LS1tb25zdGVyLWNvbG9yLWxpbWUtNTojMzk0MTAwOy0tbW9uc3Rlci1jb2xvci1saW1lLTY6IzIyMjYwMDstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS0xOiNlNWZmYzM7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtMjojOThmYjAwOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTM6IzVjOWIwMDstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS00OiM0OTdjMDA7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtNTojMjY0NTAwOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTY6IzE4MjYwMDstLW1vbnN0ZXItY29sb3ItZ3JlZW4tMTojZTBmZmQ5Oy0tbW9uc3Rlci1jb2xvci1ncmVlbi0yOiM3MmZmNmM7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTM6IzAwYTIxZjstLW1vbnN0ZXItY29sb3ItZ3JlZW4tNDojMDA4MjE3Oy0tbW9uc3Rlci1jb2xvci1ncmVlbi01OiMwMDQ5MDg7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTY6IzA2MjgwMDstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC0xOiNkY2ZmZTY7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtMjojNWRmZmEyOy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTM6IzAwYTA1YTstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC00OiMwMDgxNDc7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtNTojMDA0ODI1Oy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTY6IzAwMjgxMjstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS0xOiNkYWZmZWY7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtMjojNDJmZmM2Oy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTM6IzAwOWY3ODstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS00OiMwMDdmNWY7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtNTojMDA0NzM0Oy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTY6IzAwMjgxYjstLW1vbnN0ZXItY29sb3ItdGVhbC0xOiNkN2ZmZjc7LS1tb25zdGVyLWNvbG9yLXRlYWwtMjojMDBmZmU0Oy0tbW9uc3Rlci1jb2xvci10ZWFsLTM6IzAwOWU4YzstLW1vbnN0ZXItY29sb3ItdGVhbC00OiMwMDdjNmU7LS1tb25zdGVyLWNvbG9yLXRlYWwtNTojMDA0NDNjOy0tbW9uc3Rlci1jb2xvci10ZWFsLTY6IzAwMjcyMjstLW1vbnN0ZXItY29sb3ItY3lhbi0xOiNjNGZmZmU7LS1tb25zdGVyLWNvbG9yLWN5YW4tMjojMDBmYWZiOy0tbW9uc3Rlci1jb2xvci1jeWFuLTM6IzAwOTk5YTstLW1vbnN0ZXItY29sb3ItY3lhbi00OiMwMDdhN2I7LS1tb25zdGVyLWNvbG9yLWN5YW4tNTojMDA0MzQ0Oy0tbW9uc3Rlci1jb2xvci1jeWFuLTY6IzAwMjUyNTstLW1vbnN0ZXItY29sb3ItcG93ZGVyLTE6I2RhZmFmZjstLW1vbnN0ZXItY29sb3ItcG93ZGVyLTI6IzhkZjBmZjstLW1vbnN0ZXItY29sb3ItcG93ZGVyLTM6IzAwOThhOTstLW1vbnN0ZXItY29sb3ItcG93ZGVyLTQ6IzAwNzk4NzstLW1vbnN0ZXItY29sb3ItcG93ZGVyLTU6IzAwNDA0ODstLW1vbnN0ZXItY29sb3ItcG93ZGVyLTY6IzAwMjIyNzstLW1vbnN0ZXItY29sb3Itc2t5LTE6I2UzZjdmZjstLW1vbnN0ZXItY29sb3Itc2t5LTI6I2FlZTlmZjstLW1vbnN0ZXItY29sb3Itc2t5LTM6IzAwOTRiNDstLW1vbnN0ZXItY29sb3Itc2t5LTQ6IzAwNzU5MDstLW1vbnN0ZXItY29sb3Itc2t5LTU6IzAwNDA0ZjstLW1vbnN0ZXItY29sb3Itc2t5LTY6IzAwMWYyODstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tMTojZThmNmZmOy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi0yOiNiOWUzZmY7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTM6IzAwOTJjNTstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tNDojMDA3NDlkOy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi01OiMwMDNjNTQ7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTY6IzAwMWQyYTstLW1vbnN0ZXItY29sb3ItYXp1cmUtMTojZThmMmZmOy0tbW9uc3Rlci1jb2xvci1henVyZS0yOiNjNmUwZmY7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTM6IzAwOGZkYjstLW1vbnN0ZXItY29sb3ItYXp1cmUtNDojMDA3MWFmOy0tbW9uc3Rlci1jb2xvci1henVyZS01OiMwMDNiNWU7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTY6IzAwMWMzMDstLW1vbnN0ZXItY29sb3ItYmx1ZS0xOiNmMGY0ZmY7LS1tb25zdGVyLWNvbG9yLWJsdWUtMjojZDRlMGZmOy0tbW9uc3Rlci1jb2xvci1ibHVlLTM6IzAwODlmYzstLW1vbnN0ZXItY29sb3ItYmx1ZS00OiMwMDZkY2E7LS1tb25zdGVyLWNvbG9yLWJsdWUtNTojMDAzODZkOy0tbW9uc3Rlci1jb2xvci1ibHVlLTY6IzAwMWEzOTstLW1vbnN0ZXItY29sb3ItaW5kaWdvLTE6I2YzZjNmZjstLW1vbnN0ZXItY29sb3ItaW5kaWdvLTI6I2RlZGRmZjstLW1vbnN0ZXItY29sb3ItaW5kaWdvLTM6IzY1N2VmZjstLW1vbnN0ZXItY29sb3ItaW5kaWdvLTQ6IzAwNjFmYzstLW1vbnN0ZXItY29sb3ItaW5kaWdvLTU6IzAwMzI4YTstLW1vbnN0ZXItY29sb3ItaW5kaWdvLTY6IzAwMTY0OTstLW1vbnN0ZXItY29sb3ItdmlvbGV0LTE6I2Y3ZjFmZjstLW1vbnN0ZXItY29sb3ItdmlvbGV0LTI6I2U4ZGFmZjstLW1vbnN0ZXItY29sb3ItdmlvbGV0LTM6IzliNzBmZjstLW1vbnN0ZXItY29sb3ItdmlvbGV0LTQ6Izc5NGFmZjstLW1vbnN0ZXItY29sb3ItdmlvbGV0LTU6IzJkMGZiZjstLW1vbnN0ZXItY29sb3ItdmlvbGV0LTY6IzBiMDA3NDstLW1vbnN0ZXItY29sb3ItcHVycGxlLTE6I2ZkZjRmZjstLW1vbnN0ZXItY29sb3ItcHVycGxlLTI6I2Y3ZDlmZjstLW1vbnN0ZXItY29sb3ItcHVycGxlLTM6I2QxNTBmZjstLW1vbnN0ZXItY29sb3ItcHVycGxlLTQ6I2IwMWZlMzstLW1vbnN0ZXItY29sb3ItcHVycGxlLTU6IzY2MDA4NzstLW1vbnN0ZXItY29sb3ItcHVycGxlLTY6IzNhMDA0ZjstLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xOiNmZmYzZmM7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMjojZmZkN2Y2Oy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTM6I2Y5MTFlMDstLW1vbnN0ZXItY29sb3ItbWFnZW50YS00OiNjYTAwYjY7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNTojNzQwMDY4Oy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTY6IzQ0MDAzYzstLW1vbnN0ZXItY29sb3ItcGluay0xOiNmZmY3ZmI7LS1tb25zdGVyLWNvbG9yLXBpbmstMjojZmZkY2VjOy0tbW9uc3Rlci1jb2xvci1waW5rLTM6I2ZmMmZiMjstLW1vbnN0ZXItY29sb3ItcGluay00OiNkMjAwOGY7LS1tb25zdGVyLWNvbG9yLXBpbmstNTojNzkwMDUxOy0tbW9uc3Rlci1jb2xvci1waW5rLTY6IzRiMDAzMDstLW1vbnN0ZXItZ3JhZGllbnQtdGFuZ2VyaW5lLTE6I2U1Yjg3NTstLW1vbnN0ZXItZ3JhZGllbnQtdGFuZ2VyaW5lLTI6I2Q5YTM2MjstLW1vbnN0ZXItZ3JhZGllbnQtdGFuZ2VyaW5lLTM6I2MwOGE0ZTstLW1vbnN0ZXItZ3JhZGllbnQtdGFuZ2VyaW5lLTQ6I2E3NzEzYjstLW1vbnN0ZXItZ3JhZGllbnQtdGFuZ2VyaW5lLTU6IzhmNWEyODstLW1vbnN0ZXItZ3JhZGllbnQtdGFuZ2VyaW5lLTY6IzM2MDUwNTstLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtMTojZjdmNWVmOy0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC0yOiNlNWUyZDk7LS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTM6I2NiYzZiMzstLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtNDojYTE5ZDhhOy0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC01OiM3YTc1NjY7LS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTY6IzUxNGQzZn1AZm9udC1mYWNle2ZvbnQtZGlzcGxheTpzd2FwO2ZvbnQtZmFtaWx5OlJhbGV3YXk7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6MzAwO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi94LWZvbnQtd29mZjI7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R01nQUJBQUFBQUZKNEFCSUFBQUFBdDNBQUFGSVFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdvRThHKzQ2SElVOEJtQS9VMVJCVkVRQWhRZ0lnUW9KbnhRUkNBcUJ1Z3lCbW5BTGhDSUFBVFlDSkFPSVFBUWdCWVVVQnlBTWd4d2JmYVFYYUplZm1OejBab2wzdjYwY1BlWk1wRzRISlNqazVxSUlOZzZDR01nbFpmLy9uM0Ywak9HR0RSQTFyWGVJbmNKSVVrTkhHbjY5cU1SRFU4WmFqanM5VWJzbXRucW5FM3YzdnFpUW1mUlFwTGtLVzZRWndhbDZzNUlVaUpOVVNVRy9Pd29EWTZCNjc1T2pTamtEU1NNdTJwZWRwdTl2SklMVWxKZDcwN0QrZUxIcGpZREk0ZTF1RG5MakhIdnhwRFhHTXlkdUxMbjFxdDBGQ1FPeUZzSlpFMStrSnEzVCtJZTdCSkZJTk9BTmJpOXZUVXpoSTdXNEdtVUwwbFdqVC9GUVFpL20rK3h1UFAwMm9tUkhlNXBuNERnZk5aZm4rUjl6OTc5dG1FZU5hcTFSeFJxSFRqVFBOQTJKRkVnckhkby9udC9XLzV6YmdHQ3hpYTZFa1ZpQTJGaFlHSXRSbUUxWnZWVXZxdFN0YjdNdnJkM1c3K3QyKzBYZG9Ubnp6allicDdtU0hMQUNraE1XZ0NUTDZzMFd2MEFVb2hKZkVxRTNvcFBkNThpa0puS2xvKzN1YWVTSFlKNmZjSWNYamQrcktVRXNhRWxUcWxVbFZSbS9OK2UvOGlQMEw1QUtvek5sSjMvOWlCd3NoTTZ2NUpJVUp5a2dUM2Zkck9tcTZMY3MrWitxL1hzQVhGeEVFaVFJVWFLb3NGbjdjdFQrN0JCUzVkcURvbEpYdW5ibDdydHR6RC92Mzg0TGZ0SmFnRkZBTFlQRTVBN2duTXJaQmh0NGxYcXNiWkttYmRxMFR0T21wbWdOaXVnTTJQWUJjNzNNcmpxN0dMc29YSGNUcHQ5dVB2RkR6OGVOM2crc3hyUFFBdzZEVEZOcC9PWkk5aWluTml0WmhSbXBRT0NrZG9CZEFOalZXbGF2TWl0d0ROSlgvcFlJQWtWd25PUC92VzV4em9NdzdTQUZBS1UrWnova25QL1o5aitPZGZyTDhLZTJ2ZEtibXBodXhKU3VMOEVVQWdnSElpQkhQKzQ0NEVEenYxUFRRM1lrT2NPU2xUSG1qNlVzZGZvMkwrL2pwWWU3SUhXY1FVZ2Nna3BMRlIxWVRXOENHS1FYOWI4R0ZBQUFIOXRvNFJIUTZHTHZGUnJpNERpd1R6QUFERE1LRFByL2ZaM1YvcWRnUG1rR3pLVEVtV0VYYjdRM3R0Z1RZcW8yblA2Lys5N1hmK0YvOUpIQVZzSUljQUNCWndSeWtHVDdnQ1I4Vm9oSmNVT09TRGppU2JBcGhNb3ptMkpScHRCdFVXNjlYYk5GRzNJVnkyS0xvazQ4L0xmc201MjdJYXFCTE11QmJPRkl3ZUZVZDAxdmVMK1k4eFdodHpjcVRtMkNJVGM1ZUxKd1NJNGZZbExZRklWSEFzLy9UNTNONC9ZeDFoS0dVK0hTcUVyZHBQUG5zNmZxcVdKc05iWmFDbFF0amxPTFVNc2hjZG9BNVRRc3M0SkxjOTBTeENPTU1VSzRLUDlOc2hwenBYNHZ3eEtDaENBU1JFUkUvTEtzV1JsSndOS0FjVG5YQWhFeTNyMUtIY1phL1lkWDU4NDIwL2lhWG10R2hvQ0FpSWlBUjIzdi9QOStLVEFDQU41aGRrQzN4VUM0RUxzZ2d2a1Iya3JFallTRXYwQktTbUhDaEl2WU9DQUprS1FneVlNTTJRb1VNekNvMTZCSjg1cUFXQ0NkSGVrM0FCME9ETDFMcTBQZ1RlM2hTdzJmaGk0WGhQdWV1UVdFSDZ4dElFUUFiRzJObTVvVjU0UUZQK3lLZ08yRDRUNXQvd3oyWFc5Mi9ycHFwTFRTSVA4cVY5dkx2T2RzME5MV3lYNTFLNm9mYnZQWkUxcGFmN3czMThDOVp0aHE3ZjMyYmZ1TDY0VlpIdzUxNFlzbTVsZ2ZOYmZHN1c5bHNVQTRFR3o3MjN2eHdHenA0ZlJSK21QOExzNUI3S0IyZURKWGM2eHdsRzY5MDJ1ZzdBekxBOE5ZMjFCMmRCL1A1cWZPVjh0MW9ueUw1alpERGZRSTVSZzhEOThGdkhzdmNsSHVKc3JkdnNKcnBjL1RyL2d1L0VmWkp6WFV6cFdhRGo3TTcrVVA4LzhFa0FBVmFBUy9DUitYcy9KTjRZYUljTzF4SFpjVWFNTWJrbHJwS3k3TmZRSktRY1VSYWdvR21DVytIQTZFTnZiZzMzc2wycElZUm1FOWJJSGIwbUE2a2s2bE41R2R5TU41RWJtUWh4SEtsd01nVDU4Y2d3N3BkVVJ6N25mTWNRZmNVM3ZJY3pWa2RyaFg4WEhxNDAxMnRGT2Q3a1QvYTdwN204M1dBNzFGN2FPOU0rZGp2ZGQ2ajdmeG0rRDFQdTN6M3VpcnZtdXl6YTUzdHJ2OTNsVGI4MlJUMkthRlZVS01OUDM2QnZRTUNvMEdzRWRrTDhzK3pMZzFFeGJNME5nQ1dBeGd6ZjgyREcxS1hNZmM0cmpOY1FmSEt4U0N1UnVCSTVBb2RERERrR2RWOENuVlZFbUVNYWluNFNhMEFYVEkwUkJOcE9ZQUxWcTFhVjl2eEppVXpIS1dDaXM2bXAwQnVreDA2OUdyNzRzblZOYnNvQ21rVk1vcDUrcERHYVd6MnNMRHIyaU50K29aTzBiMzZZU0lqV2N4dm5sTjB4MFZobFlvVzRVUmpYWEt5TEczWTNxb0xkRWF6SEFFRW9WdU1sM0REZUVSVnBHL2plVEVSMENVWkVVMW1vdHFGb2l3SkZLVWFERmlhY1NsQkpyRWpTUUtKL0NTRlNtU0trMTYxUWxrZEtleVNYWXpzZFhLaTZJOWlrTkpNdENVS2xPdVFxVXExVkhUMXpxNitsemZRTkFJYTVKcFJvdldhRVA3Wnh1Tm1Uak1MQll1cTNYVVRnTmRSRGQ2VXE5QTMzY2J4QXp4RERPTjBJeGFOVmF4ZC8vcy9hanhBRTZKblBiRkdaa3VDM3VhTlU4RXNEU0xaVm14T2oxUGQ4SFF4WFNwZWRrWGF3Ylc2d1pvOCs2RHJpdVFGRnc1SXB2bkpoNi9aZ0ZKSzkzMGFFTTJYSjN5SkIwREhvcGhicWcwdXJrdk1JZ1lsdGJHUlBjZGtkN1ZqL05WNHBiQWJhKy9FNEJqQ2c5cDVaZXJpL3BkTTBDRy83dFhaTnhWRSs2YllhdlFuNnVtV3d5M0ZYZjZnZytYbkF0SERnamtQTmlVYnFwb3d2RFV2YlJsY2o1WFpIWXpWOEppNE5sMXZqc09ock1heE9IeGVEd2Vqei9WSUhKWG42SDB3aGc2cUZPRVVxUW8wV0xFMG9oTENUS0oweVE1TFU5eVJRcFNwVWxmWm5BU0JrV3BsQ2xYb1ZLVjZxaWJUQnRNbVFLWVlXSFZVVWZ0R0l0NjJsZG5NSDNFcGlVMHFWUXFIYkNMeE9VK0U0LzFYTGZCRWh6S2hnVWNnVVNoZnh3bUR6OUc1RVJBQUhMN0ZIUktReXJud3V4UWY1cmhIQkVCUklvU0xVWXN6VWJjNHJ0TWRwbDI2RmdkNTV0Z1FHOHgvZkFaMkp6SXZHYm1scmNYQW0zd1hLYTdFbGZQY1MydHhmcStlZ2ZpSEdvRE14eUJSS0h2eTNTSjMwUTZWOCs2bWRmWnNhRlYzZU9VS3NXTXlua2h5TDF1NFZJMEwxU0pMSXhYeVl6cEx5TnFpV3owWFRwa2FUeW4xWkR0aTkwbVkwMnYwdFVxdHpTQ2wrcXJLN3JJdXYxdjlSRDBzZ3hxR2JKb0dHZkVrbEUxWXpyMjhPMWwyS2V3WDlONEFEYU4xYjdMMElhUlRYT3V5OXlpdTgycE93SFFCQytwbGRDck9tSzBNZy9yMXZSWUVtM0RCRWNnVWVnbVV4MDNHNCt3aXRRZ09mRVJFQ1ZaVVkzbTR0bUVJdndVS1VxMEdMRTA0bElDVHVJMHlUcXRGY2xFQ2xLbFNhODZXRVozSkp2c0ZXaTdJeEtKT0J3T2g4UGhjRVRyUk4zdERwbE1KcE5oUklhaXFBaUdZUmdtY2Jrc3k0Tm96L3JvZlFMN0tjYWxORDBGT1czUkdadU9CUjJ4bVZNeGtVZ2tEbDBYN3VKaXV0UzhiTkdhRSt2L1pRT3dxZTg2R0lJZUVzQ3VvdldZZkNxMnR2cE1PQk43TXpPNjhHV1hMaHRtZ1cyZmZlSHAxTXU3cXdYNU5Ed1RrcENTY2VmQmt4ZHZmaW5BUklSSVVhTEZpS1VSbHhJQWlaRTByVnE2NUlvVVNaVW12ZXFVTXJwcy96MVpXRVo1WUJnR0FBQUFBQUNBMFdac2QxQ3ArSHcrbjIvY09sazRyRHBTbDFLM0hyMzZqZzFDVHR3ek9jTnVDWFlOZ2lEWWhvdEgxb2dPTFJTdXg4bmlsNHIyaVlhdjBub3J6WHZaMm5aalpMZmFLRCtWUmdIL2ZnTm1wa0ZiaGdpR2lVYWNHZlhObUs0OUZQdlk5dHZiY1RtNzUrM2ZkYW1XNllTdHdrZHphQ0haY3ZxMENTNGlVNVptTnhMWEdCZS9yUW9Iak1QMS9RRUdWTVpGSmdiRERKLzVUM2V5QmN2R1BTcVRpbUpjQytZUVVqcUd2Mm5DN3EzbkIwRE9xdjJHM1Z2bEloS0lXOE1SU0JTNnlaVGlOR0ZYK1JHQ0RIczhQWUlkVGpkQVVBeXZRa3dTQ3BwaE5kMjBtcHVNalFYS0JRa1dJalFwbUpSVUtZeEtYY0xEYzZrSWZIYVRLYU9NU2M0TXNWUllRMGV6VTZGTHBWdVAzdExIdXdwcllmdGhpd2lIRkFXa1NwbVdSdCs2bko2VTE4Q3V5Sjg1ajJ4MGIwZDdOOXBpYnEwbGI0Tm5VK3BPN3RFVUxpaGRVTzJocnB0Z1lYQ3N4QkZBM2xRMm5tRmMzRmJSakdCZ0NkNkJVSDdxblhCYmFjanNLOTlSZklETUFGa0Jzb08rblpnOFAwQkJnTUlBdFFFYW45V1FFczlNQUhORzg1NTR3YStBcm5xdlRUanBHUzdlL2lsUG1qQVJQbW5zeFdrZEFBUnlPTDl5QWh5bXg3U0dLbGs3R2g0OHZEdk5mZGcrSVRCWnBEOWd6Z01JQnd3Qms1dG1rRVhJcXFNTWFFVGcvSFVlMjZvTFRUcDR3NGc5VWtaNWJnYnhFSHRDeVRMWVBIbUpVcTN1SnBxenZTTmN1bWJCZFhZUXNrdTFDOTJOOGpUdkRGRVUwcnY4MTdnbXFzR2pQZlJ1Tmp2ZXJURG1IQ0U0cStxYnpPanVJSXZSYURoeloxL1ZKVXBoaGlPUUtIUXdzWjVUamd1QUI4Q3VLcitZSU1LZXdJb01PNXh4OWU0QUVCVERTWXBtMk9UeThvSW95WW9hamVqVVFiOEp3RC9YQjVpU3N3VWlnaEFzUkdoUzBDZ3pKelhNQ1RVMVhFWkhhVEFYVENRU2ljWGJZNFZDb1JnTEV4c3RsZEN0eFoxYVVubHV0R2h0T1F0MTgvUlVkVnBrREJ2YlM0bkVvTkZvTkJxTkZpZFhuMFdKTEpDclU4Q1VicXFNaFpHcG0rRjhFYkJJVWFMRmlLVVJseEtFRWlWVkxWTnlSZ3BTcFVtdnVnQVpoQUdseXBTclVLbEt0YnBtQTZ3clFMY2V2ZnFhRTdEVFdzNllIbTBFMmRjbGlXV3NXRTNubVM3RzViNnVHVm5Qbk51eXlXYkh3eERqcFdrNk0rajIwZVlNTFEvMDNWTW1LbTRabmdsSlNNbTQ4K0RKaXplL0tyZENrVk1sS3N5SW1tZVpmMEdReXdKQkVGeEMvcmdnQ0lJZ0NJSXo5MGJERXdNVGo4ZmpBVUF4ZFM2VnNEY3MxZzh3ZllDWHJOZDk4U0g4Z2FqazV2dVVQcWc0WERQOUptN29HV3ZHWHhTZEVMTGZyc0VTRXNtV1hUY00zY0x0SEZTR2JTSEJBamNDaVVJWEpxSG5NbE9MUkJMYXNuVUsyU3V4MXpxbk1CL1pNR094L3pQdThvaERBREFBT0FBQ0FBbUFBa0FEWUhnbENrQ3VMVkFpU0lLRkNQMGtoV05LUEZVd2JkeUwrc0RCeWVna2FKMldFTXRXckU2LzR2cFc3RzZlNG1EdzBCZnhaaEZ0OUd2ZmhQRUFteWQ0Y010VXFzUGw0YXk3R3VhazV0ME41Mk9Pd0phQmdTTkhzazJOaDdxRVdaWVZxOGUra3N4amozRUtTWGc4TE5pbFFxRlF6RTFmdjV0dnBRUUZ0RklteUx0aXZUZVdrUUNrNVpSZTJRaUoyWnJMWURWODZNQllXWDV4QVB1bmsxeW50WjJ4NmFiTnJpWEFzaFdyY2ZrVTYzeS9qL20rZ256TjhJM1l0eHpmQ2VPaUFQaTdZaDF3QkJLRnpzNzJXcmxpZldiM24rc09ta1NpelhIVFhwbXZBbk9nZWErN1M4RjFFSFA4blU0SW5GWTRRNW1XcDNCQUxsZXNhN0J6NEZ1T2JFNEVYUm5peWs4aHRDT2lrOHZsY3NXWUlLcjQvY0hNM1hYSWNjeU9Ec0JYSDlSM05JQmpVc2QxZmlkajBpaW5INXJpWmZVT0RUaUZRdWx6ZWF4NytqSFpWeXhmMzhVM3hMZHIrVTd1NDNINTlLZWdLOTVKdnd2eXFuM0lneEx5VUcyWTRRZ2tDdjFCVEQrSXZDTVBNZzBsVllSQm5TSVFrYUpFaXhGTEl5NGxDQ1QyaG0wc0VBZ0VKVERycWI0Z0oySllvelNVS1ZlaFVwWHFiTnJaK1poZWpiKzVySHJHemNjTFFoSlNNdTQ4ZVBMaXphL0t6UW5NQ0VLd0VLRkpZWUd5TnlLMWx0SlUvSjZXbUZ4VXFMc0luWFNzMzRzNEFKblROUDlKVjgxWlcwOGJ3b3h3ak1vR2crMWdQUHh3QU1lWmtCRUUrVnN1cHN4bzljV1M1aXZuYVNVcEZKUTFURWJ0ZXlLak1BTGxTUWg2UkszZ0NDUUszZVFVNGpiRUM3dXEvQXlDREh1Q0JRVHNjTWJWdXdNVUJCVERROXlRRk0yd3lSbnlFU3hLc3FKR1UzUmlFRFBYTDlEWjVGNElwQXVTWUNGQ2s4SUdaVk1GQ2RPa0x1RTFJS1ZGbEdneFltbkVOZU5CQ1ZTSmtuSkVqK1NNRkVtVkpyM3FtREtJekdsa1NiYmQ5SExrMWZ4KzNlK1ZDcG1Lb2hnbHlVQlZxa3k1Q3BXcVZLY2FVRzNVbGZwb2tNYmF4TkFzTFZxMWFVOUdJbE9mdkpsTXBwakpaREpiUmp0YU5Xay9yeldvTUlJYU5XZXNhdXQwM3lNTzJQeElJNk1CRTkxcWZvRHl4Q1N3Z0NPUUtIU1Q2UVZ1RGg1aEZYbHB0cmdNanlCS3NxSWFMMTdHY2RrQTU4QThnQ1kvMzJQTGJ3a25DUUJBTm10Q3c2Tm9CclZJcXpidE9Vc1dVNDA1bEN3WjF0RHg1cDFvN1RFZEpCZ1NHTDc3N0JFam85NGFvOW9qdEs5YnY1L2hBTThSYTQ2U2pnbWRlTHpORE1oaVVIbnU3UW1EREJaK0lVRmlUY0pvSGNsSWtTcE4rbVpHY1RjSDVJY0JwY3FVUjBXb1ZLVTY2cVozdXNlZ0YzbW4rYkZscmlxOUJtbW5WN1BiN0cwUnRDYXNPd0tRWkVnaDQ4NkRKeS9lL0o2SnJ6MnJ2ejExOFBrOFBwL1A1eS85TlBKaXI5Z0p3eWxLclV5NUNwV3FWRWZkVkZOdGhyV2dWWnYyWklTWWVyZUJvSmRIS2VhZWcwSjdVQmVxUjhTTzFhbjNwRkFNS0x3SXRWU0orK0ZtbmlIRXNGRVFXK3Bla29NNUhxZjUwbHhCTEx2OXpDTUFaVFBRMTduOVg1a0hGWDdjNlEySnZiK0tTSXNTTFVZc2piaG12SkVFV3hMSEpEWE1TSzVJa1ZScDBxdU9JS09Mekdsa1NiYmQ5SExreVZlZ01CVzVVS3drR1d3cFZhWmNoVXBWcXFPbWo5cDVxbE5UMy8vMXhzaUFSQ0tSU0FCQUJRREFnRUFnRUY0a2NIUEE0eS9mMm03WUdvNUFvdENWU1NJYVRlVkdGQUFseDFSSVpSdkdjNWowSkllb2N4enpwS3RjYXljeEkxaFN5Vis2MS9HQ3d1ekFNZlFNdzZMVEtkOG9zRkFjck5WRFBJZUZzNkxIRnhsTnl0aWVEamI4R09RUWJoU0l0ajAyZ0lnOE9WYlVmZ0YvR3RrYUNzTU1SeUJSNkQ1NW1jUGpMYllrSThKMHdKd1hmL00xbm85ZGpUVmRXaHBpRDRNamtDajBHWVk2a1kxTjVRNEVLZ1VoV0lqUXBOQ2piS29TQ05PaVhvWmJWRjkvenNMZEdZR2dWYk16d0p3ejgrbXFVMnNqWTFCcmNqbDNmRy9zZno2cTdvZzJZMzR2ZnBkVWhlL0NaMkhIOHlBQS94UThEM215QUlETkFWc0NBSmJabnhpMmNINXMyY1JKd1ZhT20yV1dzdFBHWnhZWkExS0lSN210M0F6QW10a0ZVSTVpbERjQW0yUXdvakZYQjZyM0lzQnlWcTVsK3ROYWJjdHJGK1FyQVErbGtpVVd6aUhHS1djNXUxRlVkTUtNaG54aXhuQVU0bGthQW5vL25odVNjRW5IclE2UUVkb1IyRklRNEdGbllIa2ZCZ0pUd05sNDJyUUg3ZFY2SUJLeDRHRElQVFNQQXRZSGN1YS9VemVQMWVwWkpOYXRPQVNxRkVRa1lDV1NqS29tY3ZKNFEvbFltUjZiV2lFV1dWSUZBTmFJVE9WdzJaVkh6cjVNekMvMGkvRDFrd0VXVkQvelQ5YjZERzYzMmlLNFVxQzdUUDJVTmJua0VZODY0WFlpS2xXK0JTM0ZVS3hIRFFZbys4Qjl5ejF3NGgwN0JhNFFra3pMMExHSkdJcnJaK2NOWHVCM1B3NmNlZHBBTVU2R3pSUXFEVzdudEIrY1dpc0Z5bzNXQ21RakwwTW1Yb0JxTldSRklaSTdnRFhodFNjdDhMcEJma0hzUlE2WHBWZklSdlpCVThwODVGNGhIOEVLbnhtRVltdStLNmNZWTNnUWUxKy9UekpBSVJGMWNLdk5tbjJRME04YU9Xc1hqVDlqdkJDcjUyMXhxdFdWSTZhcExwZWhLY3hadVc5QldMSjNRR3FmOUpUaXV2dlUwd2RnaHcvOElCUklYMVZ1TlF5c0JxU3RWTlBYWkR0TCtOaXZjd2kxUGdELzVPMG95bTJKKzc4b24wcnhnQTlPQ2xhMGdOMEpFUEhZL1lQNG5oSWF3YkVKMkhsVW5SOURiemZXTVBBdnhrcnRBMTR4NmpyQW1ZVWNnUmZSbFpubll4czJ5K293TER3a1MyVmszZGZqQUFVVklKZXdEMDZ0eitBdXc2cElxeFRsNGRtam9HbFlRWERNYjMxRkpQcys2N2o5Uk5nc0hZZ3d3T2NZdHVmSzZWaENMTXVjNE5GVGJ2OXBFUWpGTmpOcjBMV0FKQjNYR0htNHg3bkJSZlhtSFFoUTBienFtT3RWVG55ZVM2eDFIYkMvYXJqL1hlLzdxTU9sN00wZVVuRFBnaHlpc0Y4cUlvRmJoZkVncXlENG8zbzJLNVJMck1KWUNhQzVnckh3dXBETnNWb1hGSTMrOVdZUGExbHd2T3A5MWZ2YW5HaG9tSmlwOTd1cE5IbU9IK3liMStoTElwZGRyMjFSaUExM0ppYjc5azZwVEIzZEZBbzcxNHBRMXlSWmJUWE15ZEE3bVFFOVJGR2hML094ckhqZFJubzBYZGY5eUVlMG5YRmZPZXJ6WStETzNmaUJXQkZNQW1xRmJPZWdrQXFYVFZvNWZTNjZ5T0lWbExDU2RjcDY4dWU0eUplbGhVUHRVNlZtMmpuTkFQcXdXYU5ubnYxdzdKUDZ4UVphd1NJUGxPRk1FVUd1elBDQmIyZEpVeWdZNlE5d3I2SlVqSnI2TlpjYkVZd0wvY3haZmVjODJMT3NNSzQ5eFg2MjhQOE5xM1RERWNJQVBad3doTHc1OGhQS2s1SlNvREJKZ2lUTEVTdFBBNTBtN1NxWW1OU3g2Rk52MGlTalUwNHptVGJOWXM0Q3F6ZkpmbG1DL1laSmdOQndEQWFCaThlQkhUNUhBazRJUWtLdVJFUjJjZUhDalN0WFloSmVNTjY4RWZ6NHdmanpKeEVnZ0pTY25FeWdVQXdsSlhkaDFKeUVDK2NoZ2dZcFRoeEt2SGgyRWlSeWxpU0pwMlRwS0RvNlcyVElzRldtVEY2eTVFRHk1RU1LRlBCV3FCQmZrUklDQmxWbzFhcFJhdFN5VTZmT1Z2WHErV2pRd0ZlVEpuNmF0ZU13TWZGbjBjRmVwMDRCdW5UWm9sczNwRWNQdmw2OWtENTkrQ1pOMnVhVVU0Uk9PNDFyMmpTdU9mTjJXckJBNkUweVpNa000Ync1aHdzV25DNWFjcmhreGVteU5ac3JOdHl1MnZLNFpzZHR6WjdIT3N3R0V3dWhrUmlNN1RnNEVDNGVuQjFuaUpBUWJvdWRFQkdSSFZ5SUlSTGVjRDU4SVg3ODRQejVRd0lFMkVsT1RxUVJYSEFRMTZVNGhDN2dnQ0VBZzBZQUJ3b0tEcnVFbDYrR3FiRk5QTFdHQXhEQTIrMm1VU05PaUJnN3QwU2tTMzFveGVNa2pyRm4ySUlqSnpqTVNVaE91a2tvRUpTaWp5R2d4MklhLzlaYzAzYituOCtncWtnUzI4czc1NmNqVXAzendUcitSUGU2U2VybFVkVDVhZXVnZS9BSGdCejlGNGlud0U4cStINE92SVczOUZiZVdyeS9CcU12di9LU3VwaTlIa3JWZWZHNVo0SWF2Zmp5V3krcDRzVlh5aGVWVDVueElxL3pidmJqb3FYWDFaZTBoajBBWUZNUVpzMkJrQWdGSUdGd3hIWU5COVhkYW13cjNzNy9DSWZnWVppZmhUOWdhMTB5d3R6ZFpZL2hjbmVUWWEva2l6OEtDQm9yaEZaNGcxbFhCR0dXS0E3NTJFbElkOWFMSzRTRk5kVjMyOWJHN1JJSUtVNEdFdmhqcjhMVTF3akEyM3M5Qm1nYkdqUTk3b1VLd3FpT3Z5UFpFUklDS0l6QTZXVHBXUXdWNm9KbGUzVlRsajVUeVBLT2ptNE5idk9nL1Q5R1ZmeE5BOWhGaFFEU3cvZlJqcENGMlc4T0E2OGlDeVQrZjJIL0RHOEM2ZSttMXgvSUk4NzlOQTM1cndBQTY4UVdBWWdsVFRBc1lBQ0VxZU4rNm15M3dZb0E0RitqTm9XY05TOE9pYWpRUVA3eU1GYXdJalFSZ1NVTUxJMFE3bjFSQVg2UkY4WUtJSUpVb1ozeWdDK1EyUW9zQ2t0TzVsdU1IR1VhRTNlTGU4VmowaHFwV0FwSUVhbE9hcEc2cmRXKzdxUkFGY0NlWWlrQTRCUFRzTGgvd1VXZk9ieDlSNlU4cWZBNFNLbjVnN1lDWEFTUUNRQllOM2tBLy8xTjFmL2s2Uy8wWS8xb0JyNzRHWHh4KzJOZjB1Ky83Z3ZxQy9MenowRWY5T1JCcWpuMVBnTG9aUThiKzFaMGM4Z04vbC8yRFdmTm1mS3BYMTAzN3oyTHhuM2x0QlhUYkU1WjhJUHZmRy9HSm9TRHk0NkFNeFkyRGdFaEVURUpHU1VNVG9XZ3BrY3hNREo3MjRSMy9lSDE4U0NDUzRJa3lYUXlaTXFTcjBDaElzVU1hdFNwMTZCSk15TVRNNHRPYi9uTlczN3l2di81Mk9jKzhZWGYvVHN1M0xMTWVUOWJkWHQyY05ldlh2THlhUGpGRFUrTmdSY051T0IxcjNuRExCSUdSeU5RR0R4T3lqbW9WSU9MaDYrVUdBd0Frb1A4d0pPT2hoYkpCTlV2aHBVTkxacURVNkowS1ZLbHliT2JYZzZ0RWhWS2xhbFM3bHVWMnJWbzFjYXFWZ2R2bmFNUUNjdVdYSEhWNWNpNFdVUW1VbVUwTU1BbXRnUXNCU3p0RjNSYkJCZXdGSUF3NWw0MWlqY2JCbVFwNnkzQUVOdDgyZEFrd2p4bno3UDc4VlVVREIvVm11QWQreDU2Y1ArK3ZYdkdSa2VHaDFZc1g3WjB5ZWpJOE9LYkZ5MWNNRFE0TUgvZTNEbXorL3Q2ZTdxN09qdmEyM0t0TGRsTU9wVnNibXJjZ1dBMDdQY2VmZVRoaDdxZGRxdlp1UCt1ZEcyMWxzVEFQK2Z6NmRyMW1vcCswTEoxVEVnZ1M2Q3V2QzVveUFpdWIwMTNZUE1MYll6VGJPREFUWDVZRWlZeWNwVTVJVmNQZkpEbEorb091ZHN2TE9VeUNIQTBlcFNoUmQ0ZHVINEtnRXBNRU9XWkdiNUVGY01qVkprQlVCVUJSWmtBMlpLTlJzQU4xKzEweEs4dGk1THZ1OUNRT2Nad3hvYnRWSllTTllTRkkzL2V6d2lMSmRRRWxWQVZxYkZmVmo3R0ZZS1V3aUwyTTljU2RnTm04TEhjc0FJbHYzdCtwVHppa2dqUzhMaG5wUkE0eURwYk83QmNla2hMSVJ0eXJzbzNoT0ZiaVUyOUZnbUtZNUo4MnhSZDhxeWxzRldrRUgvYmFuOGxuRHYzWnk1ZTREVkdpWjNPUVJEQkQ0NjRYbldUbW9GRFI1MnVYSmt6bGZ5Q1JOMGpGVUxlcVpWTE5RRVhtVkVsRG90Wk5PZml6UTRSTGJpMEszVmZRaXVPS09FU01GVHYxM1R2aTZDVnlVN1d4TW1LVzNVYnREbW5JMTd5WDNIY253amdvZm9VNG1hU1VsTG5JUG9kMHc4eXY2Nm9XSU1kU2lHUFV2MnRnbUE0RWRhMTBGcm50UW0vZWx0aGZ3dWhBSFdLcytKcy8zenF0VHhTZmNaZFd2TUJrRWtvMk9XZDVoOFZ4a2wxd1EwdFdxZlh4am5iWFR3RHc1b21XWjVxZHZISURiS1l4eWc5NzBwSnZ6QXo4bjM1T0xSa2ZTYmREVHBaZ05NOWxRSm0yaVUzL0gwbmd4dkgyOWRBZVkyUURRdnhaNHpTaHBRYmhBakJtd1ZiSTdGN0l2SjdraU4xRkpHV051QW4wek1FeVJsMGgyTjE3SkNLaWdDUEtmeTluSE5PdHp3bkl6d21ndXZaWi9UTUJjUWxIQWZ3NUV4SERzWEd1RnVTZW8zeUNKblpSYjNXN1VmM2FOWjczRVlLN2tPU2xWSnN3WVl5SkN0Y0dNMUdyajk4Y25IaGtGbXU3UGRPd24xV3pSMGh4VG5SVThhQkpteHFIOXdRSUljL2ZVV0JIajhxcklTamJPMmhQVzdsUklhb0RKcEtwNldyVkhiMG9sNUxuS0x5RmoyVEhnbXk5NkFwWjYvbHExaU5QWTh2d0RLejVncytFL0NaSUNQd2NhY3FjblJpcjFSelBzbkNnUVZhZzVVTXJLR0o2eTQreVBZWkk3eWpLVEpLU1VONG9VVDdHVGRpeE8wRGtmY1RVZG1rYUJ6cVBiaTVTaUtmSmFKRERLWTFabDEydTFSQU9rd1NwN3pIbjZRa2FpcE5McjZFMHBIZ21JUTBPM3hCbldTeVkyMGN1SDJ6V1l4TlEzdzJtRndQOHhrNWNLZURzZFVha0tsTEhOSkc4czV4enloTnR0RUJpUkROUXNjQ2wydjJaQW4xQ2l0eE1FakxNd0c5cDFkRHRkcWl3SlROQ2ZMU3FSUzBBdFZ1cVFQSXNRQ1JaSW04eDY2SU53cFRDTUpDMnZZSHJOTVdNdzVUeEo0Vmk0SGdSUm9raWdGS1BUcG40NUpZZ3hxaDBib3FndUhQNklna1FUS1ZQcDlCbUN0eVNPSmQ2YnlFMGxRMWRua3RsY2lHVW1wUU85dEJuNkFCUkJ2WWJoL29YYXBuQ0M3NUdHSXhsOFcrWlpPam9IVWh1N05DMjVVSm9MZG92QzFWb0FpMkZBWHArTTROMUR5QXpVVWplU3Y1d0c3WmJmOUVjVDZqTWJzSjFCcFkvSnRvbDdOMGpwUWhnTGhjWWZZZVVaMkJYcUdVSDg1UThSUnR6MmZRZG56bmxsQjE4ZENETTNCTTBSVm1MWEdQRlZSakVkUWhMUDlEaUp2cE56b1VBdmVnOVpBTGZJalRWYjRldDV2UE05QVVWQzExSllCTXlFcEpvTGF3SFZzM0EwQ05EMGNnMi94blhKTitJSlc0QUtmMUdTVWEzVkJjdU1yWGxVWVR1Z1pvT3pQZldLUnVjOHFZTW1sT01Ld2w3eDBrS3Rzd2xmMlpSc3JqMWhnMnl6cUJhUGxBYU1sa1JDN3pHNFdhSGM4QUJybHkwbURWZ1BoS2c2MEtJR3NsbjFGRlFHb0JIWTFUR3Y5S2dKcDNWb28zT0JJdUE0ODVvcmgwYzBORzJMWDZ5U0E5c0djQmFuMlFob2JnbmlKNkZldHVLU0hYTHA1ZWNOMUZpMW8zTWdNbUtkdzBJckZoajgxS2lVTER2UkpESTVLU1VsS0FGSUt4VnpDdWdVeFhwR2daZkFnUEVFOTBOZXpLenB4dkhiUFRWcTJkT2FxODQyRU45dXlUeksyRll0K1dkUVpEZTRVYmVCMThzd3ZsUVVDaUZyYkwreUM3V3FselpPVWIyVnBZUVp1MW1QVWtUMlh5NzI2TmowZ3BVbW9FV0llci9GSmtna2diQUFMNERoLzBsbzVKREJNQzdrZzBEdHpQb2dGMEs3TFdMWFIwNlBFTjBvb0hIMWx1ZUprUURQSVdVNk1aTzZMYTJzZ3VuRjUwOEMybFlHWlBsY3gyWEoxdHVYRmJyZTUxQ0lVV1NoYjRmb2o2TGdHY21sZytVQ2lTaXhjSDlySjZUVEpkQUMyNEFwR2JzYTVoYS9OSXIraDlJZWFYSUNpWnU4QzRKTHpXVDdnS1lUNzYzOStBQWpMbHBwZFhBTGJtdC96Y2RaOG5mSS9zd1hOYlpkdzltUjFTTzdJZmdaS0MvNE1Dd3BDdzVzRDFqNDB3SXViZHRwQk5jc1ZIbXVVUHZoYWtzeE05RjhCTGtzUTM2TS9CT0pBUXQ4VEJCU1ViU29qd0szMkVZYmVRcnp1WUdhOW5XRmhPS1RsUUJ3OUNGajlqVEc0SjNOZ0R2ZXVBZzFVT2hiNEtBcDlwSGdhTUpLYjBTbG9MN0RvZEhzTGpwdFhoa3ZPYWFvZTBDSGpEVTZ0a0tDQjQyZ1pKelJEY1BvMnhOZUpyWkR4Y1hlVjNWMjhKd2swSEpoVTA4THRHRFFNcUtPUDNUR29BSTZZbmJFa1J3RFJrM080a2k2MUlucVQ4MTJ4S2JpaW9CTUdFNURMcE1LcmlPcG92Rkx0YkllOXhxTXEvU1RZc3kwWlFGNXlhWmF2cC9hK0g3dWJEbnBTc2lCd0pGYWdCTWk3d1ZXYzdVSHFsbXczZmNMdnZtblZSU0ZZUlFFbmd4bkh2dXg4UTFDVjdBSUF1QUlEZEFIMUErTHdnK2dIZ1A0QzlRTGdCQU5hZXZPVHdvcU1IVW9OZ21WbUV5REk3THJ4TEhEWFhFazdaQU1JOXpPYkd5Q0dEYms2RzVVZ25UcFBjMytqWlFNallHVXl1TlhnK00vVGliSTJjQnhnSndrYjBiZ2k0ZlpmNUFCQ1dUN0JEU004WWVTL0o4bm80SXN4UVlrNTF3WkttNDRDanc2cFRmUWpYalVMdjllalBPVktKM1BoUzJpSWZ1bEFLNnNNTHV6WTVPbi9iSHpoWkROMkdhUGg0NjZaTFVVWkVtV0ozWFJHKzhBK3Y1WU9PbEZJTVJGQjQrTGpXeXVTdVNPZXAzcXJQV3JOQm9SdkdEV2JncWN1OTcxNWtYejJCRU1GVVpYZmh2TDlVRC9PdW02NHd6ODFJa3NTWHZadUlPcWNZUkNwdCtEVWlnc3VFM1E3YnZnOHo5cUV6ZjhtZmVIRm41NXNKUlV1TFl4UTNmTUhadU83dmhrOE0wOTFReExCWjFTZTJpUU5WMGRqRXVDRlRibnlqZWFxTld0RFVPYnFKZUpzQnVuSVE3UEtXcXZIUFBGeEVYVE1LUmpmQURjK005Yjc1V2l0S2VOMlRUd1BNYjBQQTlxMkZVVUdTYUxoc2xqREFVQU1NTGRLWVFIVmpjd3BnWUtvd2FVUUMxNnJyaHhCRFJVL2FaZ2JFb1VzK0ExMFR4a3Nua1NMalpheXlSYStQaEtLTmpCVDhMb1NxcnFCR2lxR1NSaUY1VEJDN2g1M0Npb2VGNFdGTVYxeks1akRQb2JqSGdQNWE5c0JERDFpTzg0V2NMOTRDbzVFZGNJa0hsTmZKdGZtbUFFdCtBcDFKYXR3N3Y1THhiU1UzbWVLQ1dzMTNjb2RRVVlsSlZ2Kzh0bXVyQUdvRTFucE1oWmV4VExvUEwwa2c3VWV5Mk1MRXV2TTB5NDVLbHdHbFd4QWhuSGZOalphV05jTTZySmJNaW1pMCtzenY5QkJxT3V0ZlBWRWpIakliTmQ1cGFhTm1iSDNGTEp2aTF0bE94TnNvdGRpT3dUOW5lUE83K2VTR0ZGVHowVGFkOVlkbUEvcEo4cUZhNWdzZmFvaXN3NjFBbnQ4T3ZqKzI0MldLM1JWcitjeU9DR1RYVFo3WnEzeUhKUUxSK3FmdVNiZ1BsNFVvVW5uRk1xbHVIOUFQOFJpTzFrYWxzeGVlSFhua3VOSWU5KzYwNnppaDFzOE9LODZla01yNnFzQnM4cnVVcTZ4RkgwZ1VmVnNPWWFuM1dTdEFSZjdGNTB2NndkdUtiMFl2MmJzcDJ2Q3dTcUZhTUFycklMdllWMHF4L1RzNmNEOS9SMHZtYjdxK1VqNFFKREhmTHdxYTFMMllTYUtlNm9jV1hUNkVoK1Z3dWFSeUhzcEx0aVVNZWZwSlJVWUl2ZE9wNVlGKy9NaGdCQjJwZndHamtLY2NmK3dTSStCVnpPWExHZzFjeFc0RFZmOUhPYWFIaVNzMC9SM2RmU2k4aGRGeFloN013bEYvanlod0RhZ0YvQ2UyejBod3dGNFg1SmJEc0ZKdUF3TTBOcXRqc0dNRENWNkdLMTloalVBRGJSTjd5R2RoT2g4dXdITDMwR3pxeWxtY3Y3YUlnN1FvbHpQbkx3cmJqY052MzZYS2FGWno0aThQVkhoZVEzb1FwYXFMSkRJM1NEa0VYTEhNQ0pUWmFQS3lmUVRVV3I4NnFIY1c2WlRlNW9NN3ZhdE5EWGtGbGNrVVA2R1NVUWhWV2l0RjJXNzE5ZlBPWkhlN2c4V3I3Rm0yNHk4aEhrVG1SZ1Y3dmpQUlhQcTRkRDgwYTBhWmc0M2ZCVjV0V3Z2STZBQllPZ2ZHdXRpOGkva3F4UXVMRUdvRzFvNWZUbW02bnNXWnJkbHVFMmJyMExna2RTaDdGMU1TNXBEMERaRHc4VWl0V0tGbXVzeDJIMjF4RC9ibTd4eHM4T0gxbGlZSlNWdzRZdWp3aHhTMzBCdzI1QjdhQ2JHdGdIWlVMSW02dWVhdHhleXByVmtxK2xGbkJtUlZBZDJvVVQ1Q1Y2UExrWFg0a2FLYmRnVG1GaGplc28vS2pDOEltbGdiTHlyR0szOFM3SmpxdDFFNWFDTWlYb3dhK1VQZ3kzYko1NmRvSElneFBQZ2J3SnJkV3RsT0dKN01DTiswNWk2VjdVbWppamhTbUkvZW9kWGpJMld4UUhqYW1mVk9TUHluV0R0NThib3k4eXZMTjRxOTNKaHBMNXBXQm5SRzZsYWExcEVWNW0vdUlBcFJON1JYblRqSXJtbkEyc0hrWnBHY0c2eXM2WmVXWHo2ZDhuVFRmdFpoUU9iYUJYbUxWTVZxWmtnTkRGZ0RpNlhsVFltOWNVMldZanB6U1NGQVNCdHFxc1NvbGlVUEtVZmJBRDErcGliV1o1eWFZemkvZm1Xc0hSWGljai85TnAwWnpmaVp0SjMxMTFlZGdmQXRYOFcrbW12MjUxZGZFd0ZBdHFHOHR6MnlEekxpRHR2YWJlclcrSnFOYmhDeHRTZ3JNNnE0c2xUSlM0MXhhQ3BCR2hwcERycmlRUVdWN05nZGo0RjZoU1VqbW9MU0JzdFpUZHZkZmhBWW5yQmpVaXptK2d3VnU4enFoc1diM3gvRis1WEVVRFVUUVhRQ3h3ZEh4eTV2aTZZSG5zMjhVaUpoMG43eElXQzM1bDJzR1ZRcVNMSGYxQ043Z0NRS2tlR2dSOGFUV3FXL0JsZjVLQ0FRZ1RtdUxDeE16UmpqTElzUjRRZzNWam82K2F2WHRtc0NKb1pNT2tjYnpGMUtPSEdEN1pHeWtsY1dNeHNlaURzU21Vd0NTUmJ4TStPTVZZZ3hLZ3d2UjVaTk1DUjQxT1F1SHN6dVExK2E3K3VmM2dNZVAzR1JHWEhNMEdPZGJHaGZmN3pJYVJFQitPeHZUaDA5OEJzM2YvREFZM3BvRHlyUVV1NlRFSHlVaDVkdGNpYytPQ2hRRmplRitSRHo0dHZxZEQ5RnRPQ2lBMmtmSUh2ZWsyUExSZnRBTzhkeFl1NGUwTGl6N1dCeXkrd0R4WDZaR3VyWmFicnV6R3pXb08rbUMrWkZrbkdzS1R1THpOSENKQzVIOGdVekZzNTNXckJWTWdLM0lsT0JGTC9CRVFXbTlqVG1jUjhVRWswTEovUUVNRGZnUEhUWkNxcVdGL29LZWV2NFVSNHFHVlVTNXp4QjBOZnlyUWRuVDh3ZmRFYUx0cGNqM0poNEZhL0dUNlljNVp1QWkyRGp1d2MrSWIrbk9JN3c2TWFxTytDdkthMGp6YWVmNERxUW9lVUlBa2RrbTV1NW5QTzdabXdUekFBNVZVZnhvdVMyR0ZBSU1BaEExUytmWVlWSXBQY1hpRkxGQ2ptZ2VPRXdBVWRESUh3NjBQZ3BKTkQyT0ZSRmJ3SU1FYXhocEtXVzcyWDdsbXc4T1lXT0Z3MmRac24yZE52OEpwK2ZGSTRaaG1UOXdaY1phOWdTdUFCVHJ1OGh3NWswbWVDajdTc2U5ZEtnZ0pQUlJnVXNlVVZIYWsreHg4TVExRkdEaE1xYXVsbW5QTG5BdERZQUNTOU9XNkpleGUxRis0dzl2Smt6NVV4K3FnVzg1amt4d3p3NXdXQVc1bUhaeWZ6T1JiTk16Q09jNWpkVnBoWnNVcHNlK3BHZ1JweG1aNCtaODlpOXBPM3h4aGc1UmgrLzRiVUNqRXBoNjBPUDEvR1dacldvcmk3YVpXdVFpK0xaSndZcDBiTk1lZlpod3g0OTlpbjZGSmNBSzREbUFHVElpRldKeERUendsSGZ6ZnphdlFZZDR5WU15RFNZUENMTm1KQ3p1RkZicG81RXVpaVFaSm1RbHJJemtFeEJHbUtwMkxUamlraVBzS2ZQdkYySmRENHYxRS9zMmUyNnN4Z0NydUNCNk15Wkxic0lQMlRkOXVuTTdyc3N0UDJINkZCZ1VsT0I2MEMvelk0cTNReTBwcm5jQVM3SlpNODEyeVlkSlpMNDRnSUROdTQ2MllSYVR6eTVIS3E3TGp4akZPY2J4YVhacEIwcmJaYlVQVE9iLzdxeGtmVFBPZ1ovZEtLUmdHejdiZklzb1EwRHh2M3o5ODNMTjRZb3ZvYWJtTloybmpPS0huWjlzUmRUR2pKcXhJT1lNaWRuSndSWkRwa1QyMnBwa2RJVU5YRlNCaFhLSEd1QmgraGwzK2o1YlNyMlhNTzdTQjNWS2FYMkJqck9NbTE0cStSc09HQkhzd1lGTnIra1lMenFBTTAzbmpCOTlHanFqa2FEeE1mT2FOclc2RTlWTWxCaWxUVnhjV1JpQUpldi9QK1Q0YTROYllxRXNrZHNTNGE0clZLTEtRSk5CSlFGYlNyZmp0Qm1Nb0VVS1N2amZBbEFsWVRqUzBSaDFOSFV0TVdIVzRGbjMwWVUwSTRJOUFQVTlyd3R1TitiZW5sU2N0aUVUUlltNGc0ajd0NEFKSkdvY2Vva09SZ1FNOHowZkg5TkxMYVNRUkU4V2NDNEZma2FzQ2JaaFg2azRzU2JHWE5OTGRJdm1RSE9CR29HVjR0Z05LMHM5M3hmQXZyaTdlbU1BaGFVZ2NHSXl5ZmZlWFNwYkhnOS9kOG05NXU4L3QrVHU3L3QrN2E0VHgvc28vZTVOUHd6c3B2S1JyTlRqMXpwL2svYi96WDJvRS8vLzJTV2UrTnF2Z21SZFUwYUtqd1JJdjE2cEU1RlVlbnpiM283NUFqZ0hFT2tJRjkrR1hJOWZFTllLSDljUmtQeXFRMUdoUFhTK0xMR25tWDJlRzU5azVUWnV5ckZYTTlEbVQ3S2w0TG1tUnpZWUxpNVIyZkRrc0tJYmZDNXJreGdBRGI2UjJ1VGZlbzEvSmFKUDRaMnRRYnY3NWlidUc5dlFhK29NK1hhdWlLYUhaczkxckl5UVcrckJtSW9ndjRZRXpoMzE5ZmR0NmVncjg2NWRXVjU2NHJKK0pTSytHN2lVK0llYmovZUx4Zkk5aEZYT3ZFeGNWZE5DOTVTeHgwcDlJL2FVejJhVll4WHZhcTVhOWppbTcybVNjYnNBejJMYTBPT2JyMHZDUTlZSGRoQXBMbFhhL1dNdW93K2MvK3FWdjBEeXFNcFhMSm1mRUxYOEVhRGJ1MXh2K0VXdEpCdm9vVDBhK2tXMk9sbTQyWTNBa1JtRFFZWDZQcmpaV3Y5MnBKa1VCTmlYNmdvMmRMaGU4WWpFUU8xd3lxY3YvUDJqMnVpNUgyUHl5dE9kM0pPQU03dTFFMjIvRnFuZlVScmR2YjA0aTdvWDRORHJ5ZkpMUm91REk3YW1ydlZxOXcrN2FwMDE0akZGeHF4Ti9lcVY3cjgyYW1hYzcxMjVVQ3d1VWRYNitpbEFpbGt2c1d1R0FoVnFvMk8rVk9LK2RXQ2ZRY1o3U3FDK09xOS9yck1QSU16dU1TYTdLRzJGak5naUxjazMvK281VnRETjFGeERqUnBzaXhNM2pad3l3U2tDc0lyeEJHbG1leEtPdXlYU3F3WDFJd1dqS25VYU5Tcnh2N216cU51VGxVVVZacTAzY2xhK3cvTGRCTzZXODVzVWJ0SUtJWVZLTDZIN0hoV1VyT3I0Q0ZxWlBEeG0rL1doNVJQSHFYNExSTnlJZ2pQRjBlVWxESVR0SE9lcXJidW4vVlRpZlVLd1dpaG1JcEFvMTROL3AvZ1Nxemc3bHVqMHI3V0tLTjZPQ1B4bDRYTEIxQmJ3S0VHdll3cXl6VWJPN25OcXZySG03dG9mcUJNMGRMbmRxdXZkRUxCOG1CNW4xelBXT2phNUpBcVNFUXJYZENIM1BEZXduMmgrd29KYS9XU3dzWWhLOU1qV3NsMDY3b3QzQUZEc2xYbjg3ZFNoaVJudnZtYTZCT3Y4blFPbUhVUVRSd3ZYVzkvRDZyUWNTMDJYajMzRGJJL3Z6K2ZYSWJ1U3BWdlZxdkgxWGZOdlh1dW1oZzNWbXkrclFoeWpWOXlYblJhMmIybExkYS9qSDhiYmFVdDdONmE0UGlsVFpjM21ibGpKYm95em92Y291OHV6L3VQSU5Eejg4NFJPajZ3VzIxMHR5TzBvckZVb1BYWE5RYms5WkpYR1Zrcm9HNlpNeTlYVVBMYTB6NnJTZ3FsZ1hLbGJWQmJxNDBxY1g5My90MFBjWnZza1ZKbHRNMU95Ymh2S2t5dEtPWU0vdVYwc1ZnVFVlSUJGV0ZnMnVVTzBEZnpGOWJXQlh0akRqdlNJSGxWMjgya25CbEwvYi85TmpxNHdNK01CZ3RuRVJlRDVseldZRFMyR3Ewdi8wQ2JtNlJhMTN3SDVBL3JrdHlmTGUzWTJzOHE5cnhiL0t1ckdJam1ISHBRL3NhOUYrM0cxalJsTm1Zb1F3NVgwOFgyZnZyVFBtS1NaRHhkak12VXBMSkhwRGtkQmJjeHdSVDZCeEdDQnNReDFLcnRTVG1zZUFDWkJ4MndrVjNqZkxUWTBJSjZna2k3S2VRY1h1Z0wrdWJRajVYUGJ0RG96Qm16b2N0UmErek4ya3lRdXdZYktYM25jb08wV2xrUXNJL09DWHJjZmI3UEdISmZ5ZjRUUHY4T1ZpMnRzSnliWXpjYk1yZ3JCT1hHSlB1L09obUJFSlVmamduaUdDNko3d2dDdUdDOHh5VlJGTmtVbmQ1QVZxSDNMSEF5ODF3azB1UnlKV0dkYjhqNzJJQzBsYzdOYjJzZ2ZNMjZlVU8yWWZidysxbUtTbVgwSmxQV1pHdzFVWWI2REdreVpTbERlc050MWJVWGwwWjVvNkVmZTUwQVdteHNRZDFCcE1NWWRBNHY5UHVEUXdIWGlIOTZDYjVzTWVmU0JvTWhaOFNhTS9xLzlDNmJMQzVOR1kwcEtnaFpPLzMycVQwVlVBWXFIV0RHcVZhSmg4VFZIOTdOMFJuaWthcGR5bDJuQkpJWlZCcWp3MUNyamdMYTZXQXpabkIzZVlFaG9zckw1QVlJWjJhMmN4cm5iTC9XUmlVUmZkaTA0TXhzMjZUc0cxT2xZdi9QSDRjQWhUb2dKK21hdUVJbGllMElBckpMSk5EbWJITW9FMHFyLzZpTG5DU2oxNGQ4Tkg1cWFWVzlRUkF0SW91MHk3Tmt0dXhFWE9MVUdjNmsyMkQ5L1RjMnMvamZuUkFoSklTaGpBdSs2VzIxNEQxUU1mRUJlOG5nSStRa2VjT21OSC83K1NtZE1QR2RiaUUweWF0Z3Y3TnZHcjhLQmJDeUlBbDAybG9jZEVlNjJ1dmNhN3VzMmRjdXlmSzV5Q0wxc3ZKZWQ2MnpMcndTOG5SN25kaWgyUldOQnZoU3Q3b3BXNHMzS0d2OUo0STRuOGZTS0NQdVhxTkFlYU5SVUNRdk5tYVZUQkJ1TnhqaE5uY3dpeG9NR2RSenJtOHpHdUQyelNuelowWWJ1akpXa3lsck0vVFlkOVlkRW95bWpOM1liYjNyVnJid1hCenBvUFdKdkIzVWVjODcxNSs1c2JYQ0taTnBrQ0s0MkRma2M0MkV3cTdSUlg2ZlBvMjVvdWY1aWRHV2V0ODhwMnRrV3FLd2hGZ0pXSE10UnJNNVo1eTEvNjdUM0NSUjYxc3hYNHpVdTZNcEZEZG5ySWJ1V2dmVnphbmYyRnRKS2Nzbi82ck1yU25LYUV6YTArYytIQ3BtK3J6L2VjZ1RSTisvL2JWV1l3cDNoYUdjM205ZE1qdFFoeE4rMkNHSW9TcEpmSHNRd2dYanZhUmxQM3RIQ0FLMCtkTzgycGhRR2plWWM5Wjl1TzR1bmF3MFUrdXdwTlNPcUxSTmJkWDBORHVzbUE4T1ZUMG5rRFY5SlZBRjRBRlJuTTh0TmpUaHRTRlpUbTlBMmwyQk5LYTM1cW4yRXlkSVQySjBMbzc3b1RuUWt6YWQvMnN4RVVTSy94cEFyYnJ1bEIxZ0pqMzVmVkdXMjBNV2FWWTlXdVJtM1ZJeHJlYmY0dHArNVpLT3g1c2hQVk5uSklFdVA4Y1c4WXNjU2gzcGFwSlM5clI4OFBET0xMRUdPamNYRWIrNWEvK2xac2wvaEc5T2d2dWJ2Q2QvY1gyZFRoVktLQTJWNmdyNUp4d0k4WnhBQ0ZvcDlXdXVhdk50MmxRemFhTHFGR3F2R2hUU2drdVI4b2Irc0JZT2UvVmRvdTlGRk05NTZyaFE4TU9ZZUZOQUdYaUdmR1pVT2JwTW1PVkx2aVQ1L21NNENiZlRyUzQ4anRpOWYvbkpDZGN4NlMyek5QbkovTHhIdE5qcnFhdGZLREtTNU0xdloxQ3ZmZjc2NTJTSVZwK2VRYm9BdnFBTUdWNlByNTM0ZFBhTnBzOVUzaWM5VHhLVnRuKzhTQU16SHRsWXZ2emhyeTN2Rjc1WFlIbm9xMlhMSHY3Sy9HN0JlNFUxZzRmL1dWVy9SaUh4QzcwL3o2Q09mdjdhNXpyaC9wei9KTDFLOHdhcmFPYnQxbGY2NUE5Q2MxK1pJMytVN3dHbVZZVEpvaDZTa2oxZzE1Y2MyUzU1ZDgvTHd1TFlQT0FlRUlBSUJNNGdMN29XcTJML3lUY09yUExlNVlMVThNN083dHMrZkJzbVZ2SjljTlZVRVhucTZDblNnRHNyRVBXUlJzRFpNSnNuKythRlc2S1lockdVNTJvUzVSZ2E1dm1WRlF1VkM4c2hlWVZaRmpBWjFGdmo5UW5ISDlMWGVLeSs5aWNURXl5Nmk1V3plaHVoKytxNzF4eDdGbEh0WE1TRUo2WmhoZVNRNUQ1ei9VVVZpNVNMWElsZHVPeSt4RWZNQzVEMHNRenByaVhVOVJhbi9UT0pxa0V0V0hlMnpLTnllaUorNW83aTBWVlkyNnpwWHdDbHhjZlNaRDlDNzUxL3BjeVlNdkMxNHpMSlZleFVSaC9YNG5WcVVwVUlYTGRyc0F1cFZ0VnRmdXdacjlnTE1QSWlSTXNWanE5Z2FKekdyVkpDU2NlbXdZamZQeEFCbmxUcVFGUWRqSTVITm9lMUM1TzAxWktpZ1lXQkxZQmRMTllrL1pkZXhSb1Y0U0IyZkx3MWMwWENJdm16cTBxcnlGS0JTamlUa2ZvWVp2VG83d3NyQU1IWmZ6UkE1OVlqQlpXNlAxMCt2c3BlaitFZUJaclo4dWVkMDg1NnlzQzVCRGZ3KzFjdUVvcG9yYVpVbDlZVkduTHNqUkJaRXhQTkpnS0Ixc1ptSGw2VGFBelk4RzFlR1dGTkc2S0NjK1AxSW8wdHE5TEhLWVhVZlp3L2Y4V1JOTjczQmZoNWtrZ2VxZjhaV1MyWXZrczNFajdwZnFpNzFtNW9KTWdHSTZWTjFPRjZNbzIvcjRsdWJsQVRSdDZwQmtCTjk1bnRYWXpIMlQvUHpNVitZZWk1ODV4dVRUMVlTLzgyVjdlbk5WWnJhM1ZTNk9HQmdDK3lzSVYrWTNlS1hyM0FFL0FPMHM3NWw5WVkwcFNMR3FsVUJraW9EUi94VkRxdDU3L0EzYWsrMVRkdUx1RzlhV2ZTQXhxWGI0N1JsaldxOFlDYkRBbTNZQkFHTzYrSE9RcDVtSE1kcGpFWXUxTjRENk5YQlBnSXRvbGhBK29taGNtblJkQlJOd3NnbXVVbWYrOHlGSTJJRUhsWWJHMVpNUXpCMExEa053SGtFN1RXNGZ6dTNDMHhoelYzYjJsNjFaQW42Qm1TS2VGYUtTTUlHS2xrZUE5eDY0cTkrWE5kdm41b21ZMldyd3oxOWRjeS90bU1mdzYwM09LVXJ3ajF6cTVWOTNBazg2eVpScVBGbHJSWWNxSTVwUEc4anozVGJEVFZXQzJ0dis4cUZxc0lJN0doWnlzKytUMUxYVFAzeTQvenlMY2FiVDdON2RBRTNkVHRpYmpNb3p5a1ZvS2VBR1kyeHFHNnMyS0llN1JKYWcza1RPb01aY0Q4Ym5WRUpxWUY0VnJIYTZMN2lUSnBrYk1YYzBUcU9HektuVkdhRFUySTFvV3B6VXdmNUFOVllNK2dteUUwN2dSTU1oMFdJc1p5VVVtaGh1blhXWk1tNWYrL0hidnMwOG1ES3JPcmNhNWFzRzVpRGo3YUpiWTQwWG5Pc0VaY1Vxd2JEdi9sZnJEYlVkV3B5WHFIYXRjeGJYVFRUZ2JlSjc4ZVhGNW4zenlMWlBGdnJPRGduaE9CcC92SFRhV0xXaEg2VGRuODNmUjdzdEV5L1g1djdzclFLMVhYdkYyTmFZUFJOcVJxREJpNDBmL242eFFsK0w1UTdZWis0M3BrRU45VHpBQ1ltb0d1Y1R4U2lPY3RZb0EzSmhCWnlLWFZ3anVjdkJvNUdIUnExY2lLT0wvc3VnVDRDR2htK2d3N0s4RUt4enZTdlA0eEI5WUptV1U3Snk4K0lwVTZERUExLzY0UlBjMElOVDYzU3lNWkd3UHYzOGVQczY0QzdGY0xheHUwcWM2cTZ0MFE2VkVDY0VMSmNLVmMyZ3VDSUkycWxaOSt1L25aMXdjbEdDTm9rd0RIeHI0ZVJxU0h2WHp1MU95ZnBILy96NzloQnN5elQyOTliVlU0ZGhsMWlZY1I1RW12Qk5ORWxOSTFBbG9xMXpFVUpsRjZSTkxOMHdEODhMZnY3cDArQ2I0T2JKZXEyWE5XdzF1OW9Bb05JcC9tSlh3cEsvem1oOTM1UGdRUFpSYU5STkpOUHBVZnZPZmVPTmxkaEZBbzJncUFXOFZDUWRsV0YyNzNEWkQ2YVpOeVZtNk83RmxmRGFyeWlydkU4bWZRM3k1THBIZlJIQUM0ZUpkRTh1dk1yVFhhR3FaREpPclU4MnNhRndqRVhmRHBqemdsVTRnL2RRTTRKNmEwNGp6LzFVTGNqK1RmL05GVGlOV1h5dXY5SFVBdzNBdmVCU01IL0NEdXl6U0hSOU1MZlErQlc4c0VRdEUyRUZnbUZBcUpwZFhmaC9TeTgzV09leWU1TEZpSGdLRXBKM2hsLzdXQmI0RjFybDVPV3dYSVBqS1pCeDF4b1hDMTg5d2R2eC9penVGZFhqcUNQSTFQVkY4Q09LOTZqNGRNZGprQmRLcml0U0hVN25nSjNkLzNmN3ovSjFrOEV6VDN6eFNOQmFwaCtiNnkxVFcwckZxTUtvZGMrMVMxRkgweUxxRENBdkRwdkxnL2JVRXF0ZkZmcDZweHB0bEwrS0NEVHNCMTF4MkpsNG80TDF5dktjbTlVdU1WWU1jdjZaUWNrdTlXT3V1T3NrdXJiKzRjUHBWUG50LzE0WnNiU0NkT0JlVVk1Z08zQVVlNjBTTHZ3K0JTc2FwYXlyZUVKMHBzWmYvM1doT2ZGSHpvN29OK3p6enYvM2w4ak1WcHJzeTh3RWxXWlNxTzZJUk1kdVhrVDQ5SXBXb0txQzYrcTBHdmNRazFIc2Fsa1R3eGRzTjc2dmhIckl2QVAyWVJYWkxpTkw4ckhzWGZMSmxTM01Xd3R6SGN2RGNnMytmbWJtOVQ5djViSDM5YzNEait6TGpsMmZFUzE2VnV2THVvb0pEWDA4UGo5Q3ptY1cvdTVmQjZ1NHRjaHh1eFJ2Unp5eFZ0OGJKb1ZiT3VtUlV0WXhyeHhuRE13MkV6dk54MzUzVG55Tzk2ZEQzc1cvOGwrNXpXYkozc0tWMzgyWEx5eXczS1czUmY0UG92UGsyM01xUmNvdnR5dlh5bjVpTmMrOUduaThEQ3lXc0M5aWtqSE5UZVN6TWZmRk5mN2N3Y0N2RWVmTlpMZThnbGhtRkc0UGliNGp0TkNSRUt1Ym56SlY0MXVtbUQvOEZNV3orRnZ0R0JkM0MwcHZKZDA0Y3pSVFdhKzVoeEVaZEE4eGZGYzVyakl1eGRBK3g0ejdMY3k4LzJDQTZwRGdHSDhFUGxucHJEcXNPenZJY2I4VVpGWHE1bU4xd2Q1U0xqbjQrYlB4c3ZjYXFJTlVSUm8velcyVGE5cFhqZHY5ZjNGa3VOV0t6b3p3cWdxcnhTVVhhbWVRYVhwU3lNWVdXNmw3QllvWkxGbmVIN3Iwd2htNm9DS203TWlHRkdhZkg2ZjI3c0tXYVhwZVVsM1JqMUFvV1ZOR09HRnd4WWQwbEpRTEluL3JxeHRUT21Tc0pkM0I1MWhCbXpwUm9QMlZiSVZoUjltclJMVjloWDNOdG9UVEZqRVRXbkIrbkNrN2xPVTJ2czlTTFhaZUlpa1RxZmFKYWV2d0pGeGJsRHF2ZDN2cjlEZFc3Lys2SkZBUHIvdjA3cjJRNmpRZlRRZTZMeldQUEJqZyt1ZC80UWhId2ROdlVmZEtQc3RteFp0aXFyeTdLeWdhOFl4eXNvYlY5R3F0dGo0Q3RndGJPR3ZpdnJxTTdvTTZ5T3NsdDVaWmgva3NxcWh3ZkFCclU5SkV0cjNLYkZmUkZQNGMyU200UDU3ZlN1cVdWUjdOL1hSUzV1Y0ducHJ4NVR2UUNlLzhVb1JlVHFITWpMRDhZci91YUc1SHNudXg2UkFZOTJlYnhQZUwzVHpSS0pXZTczRHZzOUhZOEN3TzRPcjN2WTYybW5wZWJwYnM4ZG1zOFVzWEVZbm9DY2NnVkVqOFBRVjVDckJLclVMSUlLbHU0NmUyY0J5SU9XNnlaYkNyWmgvVDkxUTc2NlFkVHFjSldiT2lvNlgwSisxRjlkM0lHb08zUWtCMVVoSXJMTnRKVDEvZGYvNnRkOVAvbjkwNitYRmNrcEJ3UG1Pb1RPNkhVK1hHY0lqSHdPeUxSREhxV25FQzB3K3VmSjFKS2dncEV3Y2pVUmp1RWFmZGIweWY5TElsb1VYTUNEd0w4VkxuRllDOFRVN3FWVitpclJyeS94V1MrTkxkMDFSeUJDVVRHdjkyYjVYVjFKWlA1L05UdmdIVWQxUjdmRDI0V2ZEaUNwTTIzbTEzTnhKbUt4OXVrcnJsaEY3ekM2WnJ0OCsxcmZ0ZTI0VmU0aTlIYTBhTlVKK3hYTEIvV2ZaZkVyeXBjdFg3SGlIejlsNU5MbUJKN0FUSEU4ZnZJd2RqdkdkMytDWUFqYVRra2wzL3ozd0JWajh2TW16dkRBVmJhc0FnS0cxT2ZBakltSjJXRVBac0ZNMklaYjVMZHNTTCs3Qk16NXdydk42UnF4U0ZURC8rVzdBaUQvVHZPSVdKcjlrOHQ1NVhoKzFhWDJVNnFubHhNekcyYVFjTHZ6R1hhZnQwb09jRld2RVYyWnFRckJ0RFVPNERMS3ZEOGZKaVV2UCtmdGhBZmtpZ0dRaWxOQWp0QlVZcVg0LzZlRmtzK3VDMFhIenFkS1cwN3lOa0pUem51MisvUkc2REhnZWxhYm0zejliVWQ1WHpxNDJ0alpZOXBTWHhrc2QvN21sc3RtSHZHK082WFVlMklCTXpsU3o4VnhUOFVGa2gyZVF5SiszdGYvRzJKQ2xlSHNielA5MEJiUm5DYXU5QW11YzZaUEdDUlhwSFBEbE5jOVNtWXoxUEtRbjF5ZWJoMmh2TXBRdGZiSXdycHFOTFRHMU5sbDJoeHZzRzNxYVY5TGJhdzUrZGJHYXZRcE4xc0hPeXUyd0pMZjVWSytVT25wSFQyb294djRxTW9kVldnSkg3Qk5nWkhlT3Z0ZmQvc3RLSU5yY25WU3pOeEN1cFBRa0FQMzR5c1RuUU5tdDdWYlphKzNVTnBZZ2o1WkhqQnNrS0swUVF0dHp4ZFhYcHg4ZGNPRHJ0SnZCM1l0WDM5RzZmMVRaWS9iVmZaRS9vaUo3c1VETGx0OXQvS1pEYzE1ci9ka2V1TWI0dUN1VjQ5WkVReWtuMlJZTXRtOVJRTi9sM1dHQUJYa0ZMNklvSGY4bjZkdkFraEdMeWg3YmVndmhjNFVTQ29JY1BuZXFhZVhYdmdnd0FlZHd0MndJNjQ1RFhuSzEyMUhoWUJ5alZLMDZOSzQvNDhhTHZvWFV5MnQ0U3BlL2tWMnovVFlXcXFqM2JBMkdqR3M3V2pibzdIWU9tcldvQ1VTUGJOMnVDVlJzVytFU0RYclJ2eCtjaVNaR3RYNGZiNVJLcVVkOW5udFZCcCs5SXgwWW5FSmJVVWFLV1ZOSGNYVUs4eTFuWlI3aW85RExQeWZQU3lYVENWeDE3NG5xbGw0OW9rYjNhd0lMS2h1UGFMV1BYWE51enU5MnVIRU9hSjQrZWo1dmErTnFGNUR4bVEwS0h0eXhqbmowNnA1QjlhOTRmM2FwNm8vTVZVYXZmMHpXUEpBN2hKOEtZZWM1ZVdUQXZoTTZrVko4c1V6aUlETXZLWFViNUIrSkpXNXQ5SlJtZlFvVGgrdFpuMTRvb3AxdExHdGVHWjdVOU8wbWM1bHlkV2JBellYYmR4MnArcE8vQzh6U1FWR2pPL0IzdGxEN084ODNGazJOcVZXSHBwcFdwbkVrMW4vbXBab1Y2YUpkSkhtTzdPOVFWSlN2MGh0YTdDVTRKdHljYmd0L21sRHJmNFVaOEVQZ0tVZy9DY0kvZ0dESmZXTjdFa2Urd1NiOVR1WE4xa20zQ0JlQzdJNW50NENvREFsbWk0UTFETjhRWGR2QVZnNDIwN3g5ZmZCSXJpby9ycy9LMXhhVjZSczl4czdYemtvU0MzalF5bUJvQW5jMGZNR3BCaGhwclBldHZ4OXJyZFhzem1lNFFLZ3NKOFlQcjBhYWJ1bnFnQXhNUVRRRHYrTlBjd3hqMk95TTZkdS8zZm5tai9HdjExa1BRSUJmTkJjQ3dLVHczVWdTNXdGckFBZFJ4VndSZ1c4cVFJdWgxdEhLbE9rcjlyWXkxOGZhb3dpVzJzZzY3WUdMMWpKWk1KVXdvY3E0VHVWeUIyLzdRS0s3WFFib1BHd0JxTFdRRDdXUUw3WFFINnpZUTBJSTM3bzYrMmdhQUg3MTIzZDM3Yy9QRGRjSzBJQWgvdWJFWEszQ1d3SHAyRXlQT3liSDlyWW1mMEIyUHNoQVBNc1NIWm1jZXY0RnNmdXhmMzl4ZjJ6Vi8vN0Q0c1hrYmdaaHRsOHF3WU9xSUVIMUdDZis4RWZMOU5xTTUrR3pWZjJuMi8rTUVlMG1VZXRaY0JlL1NIb2NrWWNjSjc0QnJ4NmRSZ0FvRDA0QjA3MHFjaG96WUxrV29iNjVhNXY4bWVXSm1vbUFHcHdtUElmUUJnVzVPOFdhakFIdm8xZHYveWk0OGI3YmZ3VFBaM3N4QUd2L2Flb1lRQWd2bDlLRXdEczZSNjQwZnYxd2JIeFM5SCtUOTg5clNyTmJxM25OTDFmSGx3QStFUkRPSUFmaDF6a3dSVkhXZ3VQVG1FZldLLy8zWHRONzBjZXpxWGJSSC8vczZEM2IzK1FzenpzbE5Kazc3ZDlHeGxzVENIcHh6STh1Ky9UNzc4NFF0Vzhzb0gzUStqSkJIQ1I4a3I0UnlBK2Y2dURNejRNY2pZUDk3U2h2OUhDbnA4S2YzaUdVZ3ZiZy9kRHVORHhTYUlBS01ULzIxY1o4S0Q4REwzeHVUaEZjVzJpNHA5VjdoWExXMEJWSDF5SGw0dDdQTDIvbFF1b3V6aFg3NHJ3aHYwYWtiS25wODk3UE5PN0ZIempvaXVXbEZOZXMrUC9zQmJQLzJLbkhkejh1bXZyUFpTeEZiTGl3Vnh5RFVveHBSazNsKy84ek1lUGg1UjFHQWNBN3NyVis0L3BBbUpYMjVWc2k0Z3ZBd3F4V0RUYUVGSnV5RFEyRWNuV1hxbEtvcEtwdWFuUkFEVEFoWk8wN1haYktqa2JsbldwN1IzWWFBTlRQYjRwR1RkenVVT3FkWTFXaWU4bUQzam9jVDA2VXl3UUFVbEEyMFlCb0tKbFhSQUpETWxOa01aN3lTb3RaRVFqUUkvRVVjbFdsZFdPWFZSbUNsZU9ncllXVkkxQkw3bWIrNzJlMGROcnNMMEM0ZFpzM29FS2hheHVOc25CRWJGeE1rU0VSKytaakxaSFloSlZWM214b3lWUmFVVDBxam92cmVnY1ZkUnNYamttYUZGdEVlSmxqZVFGVlFwbVUwNFFjYkNIakF6MWlVSWF3dmxPWGtPNkxSNmtYZW9tWE1valpSTlYzZnFxeDM3SGg3ZlVlZ0RWQzErWnFFd2xxNjYzemN5OTNxNTc0K3F1QXIwdHRCVXFmK0p0akZpcGMwQmEreWw1YThjbTdZek5yS05BK0lRRk8zcGYxZnJWYmUxRFNwaE5XUnRvSGVKTmhmc1hSZWV4cXZzRnFTZlU3NTZFMWl5cnNuQlpXeHBZYUdZbUlSS3ZXUzd6N09nLzdpNGdkbTRKRGFSY21oanJLMU02Ti9SYWNtT0poR2hsOVkwNEhLeGtqWi9jR3ZLQ25BcnRkdXdJZEsxSVJpaFd0c3ZvYjVIWVdWYWhDTDU3aVpaUzlTVXErRFRIODkxdUFJanlsVmVuTmExdFNpR2JIU24yelhsbnA4dXFkN25xbVBtbkN3WG14MjFYOHVQSHh6Z2ZFSXRFeTU5dHQ5K3V2N0xYZGxQb3k1bDY3MWw0TUFKMW81V29LSUYyRis2WFoxVHQ2MkxONWd1eFdXV2xFdE1reFBmZHZOeEZyWWdSMTIxUmwydmFzb0Q4ZWc2M3NGNHRRN2xRZUd4YlBlTE1DVGlxcjF3REwrdlNKZlYyKzZNWGZXOWNFTVBLMEwvODdrRWk4WTJyYjlWRHQrUDlHeUx2NWNCV0oxb3U3Y0tkRXhXZXI4alA0d3ZEU3MrejZCdVBhR0tPTC9DbWxpU2E0YnlpTHVnK21SQlJSZkJBTjdHU1owMkM0WEg4ZXBkV3IvQ0I4Z2JVWlVwZVNzNXhOUURJT1lWQTFFbUllaUtYV0taUkExVkdUQ1R4b21Pb2dPalFEY2ZYK3oxcmxPeWhuVXd0RVBaaVFEU2xTUTBYSE9WNXNpOWU2WjNxNjlCbnRDMis2dlBvUHZDKzQrMFZiVHQ0LzEvOHdYSXhHNDZtRTR3bjBIaTMvWEFRcGlMZ0FGWmcwTGo1S0grMVhCckhRbnBoVFowdiszT2pJcCs2YjBnczZ1b1NFN3FWd2p1M3RlaDlKOUJPWGMvQ3dEeS8vYVVtRnFsRkxNbUg1bFUxUjloUlV3NFNhSTMwcUZIV0FubW1TbHFvK2F0dUc0WHNzUzE1emYxU3N5bDViWjNiNHBGWDg3YXlBY2RtY1orem9laHp6b1hFZGFRU1prb29Mdm1WNExtenV4NnZFd1c3UlZDRXRXdDNkQVVLM2ZGaVoxYWRpNlZPUVhjaDZtekd6ejJoempmTUtRcVRqaWoydTJhcGppVFByYVJHSjc3YU5qVHBjZDZnUEpCV0FQOVh0YXBjV1A5eCtqTDhqZFBQemEvd3FpTnVmREF3NjNiWEtrbHJtc0FlK1FVOEpmeWZBMnZxRitSUDNZbjEzZWhoNSt1NUhyYk1SSVl3OVBMdG9YOHdPWUcxa1hlQzRlYTlaMDJNM2FNYXVuejljbnlhdlhyN0xFUVBIcStxcGhpSkh5MEpnSmdBeXN6b216M1RsbFlCQ2RiSXZST2NVZUxnTlpMdExPcEZwclgwNFdLT2dWNUFsaXc5ZXgyYk0yd2ZuWStuTnZNVi9pdnUvaE96eEZIVmJsSkRXYU5KNlNSbHVWRzlzVnEweHJWRVhUZlVLQnVNcTZnUFFYZFVzMUl5VnRTd0pXeHZoZCtpblhROUlDNUtoeEhMTXQ0Zm5Kb3N1dFlNdHFYQUxCdm5RRlFCbUhPV2RsVnIrRFRQeGxJZ2QyR01xOGxoUDQ4UkRYT3VFUU1aaTg5K1lpY1NrdGdKSUxubUxoNE9oME8wZU1xemRvOWJ5b2Z3bU8zN3VoUHJKSWRjTDcyc0U1eDh6cWlvVllta3hWRkZhNS9ibGFvM0FLZ2gva0VPQW1QdXg1YkROT1FxMWJJS3dVbUpoaVlIQzNDY21aTHZrV0ZWa1E1WmVqbkU5Y0Ivc0NJaTRsVTBrWTZldFJVTmFYdW9RTHl0SjBOb3kyb01DZ3JMaUpDZFFSM0RCT2YreXhVQ2p2TGZRRmJFZWEvVGw3MlN1Tk91cGxUK25CdGFXZ3JseXpOY1JPeHNiWC9URmRKeS8yZ3hQYTNvVTJHcFliQ2hMMnY1SDJheUlOV05RTC96bUt6WXFVQ3NyVjJhc3JlWFJMNy9jbDRhVDY3U01UQXhFZkpMd2hPaE5oWE9KdS9wMHdOL3ZDVk1xQ3p4T2pmTjVlTFJMT0NLSWMrTXIxeGU2ZkF3YkZzVzRMNGMyN20rYXRvQWRBVGJwbC9OM1JKZ2JCMG5mTTI2TGZ1S2tQUnNEU0VBMFZNVGpkRFhZN0o0Zjc4K1lGL1A0K3NoVitoY2xaVEdmeVBUbTkwdVZLUFJjQmh1dEs1Q0tXWWU5cGdhOGN1Q3FSamhjTW81eE5oNFFjWTZKUjNhazVZNDFtNVNSQjRXRkZVdHNpcUFValVTTUJaNjdQY01JZEJNYTJpY0ZKN1U3ajFXc2YxT2F5R2NxekV6QzNpQVdVYTVDaldhYzNpdjA3Q1NKUkltR0ZQYmlkM09yNVdDd0xmMis0SjJMc2JVMlVGaFZTd1RyRnFEekljNENtQk5qSkRXbFZiVGFEUWE0bVlrWHBkc2t5SjNkVFVlVDF4R3RsVElKdUZNT0duaE9sSEtraE5FR2hKejlCbCtqQWxETUNvRFFtcVp6Qld5VVZTSVBIVmM2MlFEWmc5UEhOd0ZaVERFa0lrbG1nUWlZTEJRa0Q0SFk5Vm9yS3RhQW9TTEtBRnBOY1pVU2htd0lPMnNsUldUTmpXbVZsQjhmNFJSdnVGZXh3b3FRMVprQmF2amh1SmkzZ29keWZESkt3THpBRkR2b2hhV2hEUmlKOTJqVG93bjkzNnR1d1RpM0psWWxNdHdPQ3l0MTV2RjFhQmxBbVpBODJvdE9kSUdDeDBXUUpvT3g2LzNZMW5ab2ZmbmxEbG8zYi9IOXIwU0lETG13WU91SmM5ZGFmMnRXUktBTGEzRFY5cEJHTHRtYnZhM3BDNGFKNjBSNlhxYkdhN1IrL2VUL2Q1UXFuK284b2RZOVdDK3B1eVYwMWhpQ0h3Y28yNFVwVkYxSFIwU212MTRJY3FVc05CanBZcmFYb3BCRjVKYWg2Y3FPay9KYUZYbXA4bGswSmFNZ2hDa0ZCdlFEUHpyRnBRdUFPSXNhWTJ2OTJZd3AxMGdORkVwY3JkaDd0YWVNTFJ0VE1reEd5VXhTVlZnRlNtWFphTlBzeHNZK0lacDhKR2t4cE9iQUY5TmQwYVcwUFB3bnJyOEhqQ2JCQ3Q3cGNyZE55K0gyOG02UStwWGo0OCtVTUhLQzJGTmoyUTNlZiszYVJxSHVSRCttYi81U2Vmdzk0TWFNTENmR1ZaWkNTZjZTNCtKZS9QaEIrU21LMUpmT0RVNkUxWlVxNU10NnZXYzl6YU9VOVZsa2d2cTVJemhlWHFMaFkzcDlkTVA3NW8vL2NYaExHZWZIZXphSzg4ekpWMWY4LzU1aTZyNjllUWZaWEQzMWw3NHBPYmplclBaZlJrM2M0ZngvTFV4ZVlndGJNN3V3LzFxb2U5emJZbnArVHlNQjdkVzA5L0JkeXpLYnF0ZUtIa3NHbHlRVUZiS3hkN05OZHhkRWtaQUFCQThpbE1QR3p2UlNnR0JFRHpZTVhublVGelJUSFVTZ05aN1ZVVDZrZUFlMjVwcWY5UVgxZjg0c1dEaUk5UEhFYlU0Wld0TFlMUEVUNlYwUU5tOWVsOWkwTFE5SGU5NFF2Q2x1bklFR2lSY1JtcFBtWlFwRFFubUY2a2hBQVB4dng5LzMzLy85OExILzF0U05LSWZBTUJhK3c4WjVBRjhQRy85czZJbitlNXNEZ0dnWUFBQUVNQy9IOGdqdDZ2ci8wYTlVNzdYWDBCb0tCVkNlbzdnM1lTTnQ2dlZRNldkNG4vd2xlcTlRbFpOWm0xSXp5LzJ5dWNML0FvSVJ5NERwZnVNUTMyd0pNclA2Q0xQVURmaDZ1ZUJsbHJoUmZBYjhJTjVXNWVTVmNhcE8rcmFQaSt4YnpyZlhhem83T2Q4LzdMWTFRNmcvNTZsMHBlWkJBcW8vcjR0NEY4eTMraGlDR2U0bmtBajArWFdVZ2t1L215Y2ZWMnZ4RTBaRHZxN1QrYVV0aE9VelZmOU9KQVZXQW1Bcnk1dndENG56U09mZVkyZHBVdHQyK2FBZlo2cWQwTmxMc2M0KzRrNEpXRnZmOVFUcXZ0R0xlUmpaaE9DOXhaNTFjTDNzSUQ5UTVValpkdXgyd1dxa0twdEZHVUlMWmxITHdyWklUN0ZVSmNpcEJEOGZLRTl1KzgvNGkwWDh0dmJ2T1lFM0JDUGpiSGxIanRtSXRreHZpc2kyb0V1Zkp5MElRWU56RDI2bzgrSzBiRnNsNHZZL3VJSlFIWW9lTjgrV1FRNmR3SlBTMWlKd2srejJGUzJweWU2cmMwdGJUM0I4MUxmaDJTN2hoZlVtckZ5THEwRW9taUliNTMrWUtWZTc1TE1kQXdEa0pzQ2MvMFNDc1RzeFUrWVdtL0tldWZLK1dqY3NGN1paRnpiaFRFajNwbjV5eFV0RDVWV0Rzc3VlQ3RpYy9DMk1kZkk1N3pJOXIyUUh1TlNmTDI4SnlsejVkazdFbklSUDB2dFh3eHZPMkRyTXZhcnhHSkVxNVhYTEwrTEY5Unh3ZWxJZGhOeDBiVEh0Sm9SUFJLVVRpbnlsWklFNEU5WG5hVVRRRGdveEIyTUFwQW5Ta05LNUo3dTRTdkJ0bk8vc21lLzN0MDBBdWJKL01IZlIrazhaRWNGeWdNQUJOQ1FmclEyRkl3RHRUc0IraDhjZzhNQkNJekRvU1lIQUpiQnR3YkUzWHNjNjkyL05PRFVyallsR2tnN0Y5SkFrVTdYSUtCWVc0TUQzcDdkejlITU1yc0NBckFyNzBJK2ZvYWMzVmVROExYNVJJSjJSajNNR3RWcllDVkcwdEE2S05Xd29kcmVPcFZhL25qWFU2eUhXSnhadXliSjZ1NmdVNGQ0dzE3YXpFSk1vVjhyNHdEK3lrcmtvRVo5MUZacTVITHg5aVhvQXc4K0hEQUlNMnBxV1hEd3pvZlhQTndic2cyZlIrOWs2eUtGZ0xzSEprWDhRcGZtalZjZFltRlNnTnhlcjJPWllnb0VEWktCOVgxbXNtUktFbmxySURRTlFQbEFVRFl1bFNmR1dNY3hlSWVmZXFNSTZ2QkMxYXh3NDk1dkliZndCV0h3eFZVdlVJeVdqdFR3VzFUZytjWlREYjE5amFycCtmVlZFZ3A1Zlg3czQwSzhOam5xcmpuMHRZMjFGZE1iN1lvcGlVMXhWV0tWUHlheHlLY2s1bFJOaUcyRWJSdmdVaWtvVGc5MVNYU2diQkpjYlMwd2E2UUJwaVJxbVUxSXBhb2tLaTVXTVpHTmlycEdTdUdVUkNaUXBUV3FoSytLZWFxSXF3bzU4UUthUDVYaDBkRldrYWx4Y0Z2WS9QVzNRcnI2dzlkYzEzYWxKbTI3cml2dDJsd1ZoVjVGSWxwa3Bhb0JFVlo1WVZheEVGWGFCTmEvdHBqZnhkWmV6dXR3K0RjK0lQL0ovNHl5NE56Z3JnYkl3WDBFR2JWQ1phV3dsclNTY2o2Ty9FMCtJQkZoMGQwaSs0NXYzN2RtTlpYSzlUWHdHdjhNZlBiZXRDeDZYTCtBcENsRFcvSGpOaUsrN3ZycTFTczQyMTI4YmJHL012aU1jNUdvNUpjM0ttZGRaMjhvN0VVN1ZyQ0dCUFo0TnRMODkvdGxYRjBiSVltTkl3QkJBUT09KSBmb3JtYXQoXFxcIndvZmYyXFxcIik7dW5pY29kZS1yYW5nZTp1KzAwPz8sdSswMTMxLHUrMDE1Mi0wMTUzLHUrMDJiYi0wMmJjLHUrMDJjNix1KzAyZGEsdSswMmRjLHUrMjAwMC0yMDZmLHUrMjA3NCx1KzIwYWMsdSsyMTIyLHUrMjE5MSx1KzIxOTMsdSsyMjEyLHUrMjIxNSx1K2ZlZmYsdStmZmZkfUBmb250LWZhY2V7Zm9udC1kaXNwbGF5OnN3YXA7Zm9udC1mYW1pbHk6UXVpY2tzYW5kO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjMwMDtzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24veC1mb250LXdvZmYyO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdNZ0FCQUFBQUFESTBBQkFBQUFBQWRYQUFBREhUQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHbHdibkZZY2h6QUdZRDlUVkVGVUhBQ0ZBQkVJQ29HcUlJR0dWZ3VFS0FBQk5nSWtBNGhNQkNBRmhVSUhJQXdIRzJwZ1JRZGkyRGdBYVBBWkZrV3djUUFGbSs4VFJka21uVWoyL3lsQm16R2hkZWhiWlNGMFI3dW83aGtaQ1pHVDZobnBvYlpUV3h5NmNPRGgwRWcvOW8wRlIrSEE4czNKMWIzdHc1OVhvemdjQ053alptdHR3Q1Z4WDRoTG9wRWtUYVJYdDBaSVkySXQ0amY5MlhzQ3ZNUkxVd2oyUW8wSWtoY3hLa1lxNWlRdGNmbmltcnBaMGpxSHRHbmdKYmwvdERxemlpcWRxd0F6b1EwVEx4ODZNenBYNXRJNVQvenY5Njk3NXI0QW9vc1JCREpmQmJta1dnc0l0b3FOYkcyWEo5Q2tlb2JIYmYzekJCbW9HQTFJNWFneEdPMUdUYW9ORUZUTTY3SXVvbjlGWHZ6ZitpdWl3UUVLL1cvYWhtaWJ6K1ZkRWJWVlI0WU4rUGQvamN6Q1RPN0xud1dnSXFGbDVRQWwyMVlCMnA1S0pGbEw2SmY3WmVCemZ1NGNGSjNxK0FPQzhRVjY2em9iV3dZaFd3RC9WNXNtdkVYb3pFbUVUV3Z0S0cyVFBHM2hXY3BRbTluUU92UjhKRklWZ1pCZDJtYkZjK0kxZllYdndOUWtaaXZxeVAwZTkzODZ5MWJhOWQzekJxR0xxd0FYM1hwemJUSDYrdGJYekdna0EydUpmUXllbGZXZUpTdmdDMEpGVUYxYXhOZFRVMkhUcFNqN2xKbC9uZW1xNys5dlNNay82SmFkR3NzcXJnR2VldG5hTlZQTDR6K2Q3cXgvc2d4bkYyVDVlZ0hTVVd5WDdBRERWTUt4b3h6MEJjaHVYeGkyQXNDYXRUUHl2Z09PTlRPYnJPU2NjR3VDUWx6aEViS0IvdnJ0ejFpckg4aHNabmE3OW5Jbmh5MHlSRUxDSnlMZ1dmODYvM0FnVERBQUFMcGpORWczSk5OUVpMaHNaTG95cEZ3MXBrNGRjdGhoNUtpanlBa25FTUlCUXArdUovaWxraGlwdUNQSGVnK0c5bHBGb1EvYSt4T0tjNkhGQXhCMnpycDNvekFYYWlCdXhWTThWbUNrV21WN3R0ODNVcWw2aTZ4d3lhc3dDcFY5K2N6VTVPZmpyTXJIL0IxYmRzU1pLN21TVy9hL3RDbXZLb0pFaWhZalZpS1BQcnltS1ZEa1AvOXJNTU1zY3kydzBGTExyTFBSRG50ZGN4MHpLek0vRTZpQXBDajZML2svYUtBM0EyOE95VnhhQzRPbFQ1YWR1UE1QV2ZaQjB2QmtSdG5jWUFHZGhTdVdibG8yNTFyVDllQ09DS0xnZmJZR2txQko2VlF5YTRLVEdJSFVnNWZocVJTWUVqTUhSeElISStsSjNGVHp0TjBwV2g3RERERlBwdG9wdU40NEovQUlrZzFTZU9wY2k5aFAwUlRRRWlXT3d6eE4wMFpIVStVcFMxR0Y4QllQRUQzQUJMRjFucUxGZkF0U0lkczR0WlFyRUpDejlUS3RaMlRNVVZoYXhIT0xXM2lZU3QwcG9FY1lnb1N4NDdWRHFjeWhrZ2tGUFlIZHZNU3g5VjkrdDc2TkxacURCMm05WVlobXRtdjR6MGw3MWFEWC9oY3pPd1F1eHE2azFsVUM3bm1udEcvUDNTenpLR1EvZndSVUQvY09NUWlESXBUZ2p4dnZiL1Bid0U5c2xBNmlqTElUeGJrR2xwMm1YaGZVMU81QS95SGVhYlJXSXpJZFdqV1oyVzA5OFMzTkpteElVeEQwSlMySVFxaDcvRExPVkZVWTlJLzA3MWRxSkZ5NGdOOVNOeVBzQXFrbEpHWFBhZmVNK3hiRjVxSVljL0lBQnhtbG00QmNCK29QT1J6MTlDTTJvdWgyb0d0RU5OMkFKRnJDVnpPNE5vRDNleFdTRUtHNHNqTUR0T1ZKU2dZTFYzb1NhTFllZTZPckU1OUpXdEk3WHE2Rk1OQjZwQmFEem1TRzd4OVAvbmNvQVFDMFlPNjVBVi84VnFSNXBDN08wS0pSU1RpWE1IZWFqenZxOGZENlRFYXRkU2VFZEN5SnlPUDdIUzBITnNjam40RVVIN0lWdjVCOU5jSHQ2UStReHI1TmdKbEVZcEJibDdpV0ZUZzJTdnN0TkxwazF3ZDBFT0IvSEtPUDUxb0FrS0hiazBjeGdhVVNtRWR6dnZSRVhmWG5VRXF4cUdnZHgvMXBVQm42eVNVYmlMOGJrSWxDcE9DMkhGL1kweDVxcHhUTDZMbWxVUGJGT0pNallRRGVZSkljWUFodEtWcWZyRktJbmdtak9JNWV4K1diU1VBckNHTndoSURpYUtQUVYxMmV6YWRBMDRDSEc4NUxZbWgyZ2lNRW9oZ3VGQ0U3V3QyUm5wWk9QMExBbXpqSk5KTWwxRnFRMndmYlVCSmI4K2dkZmlTR1NXMWdDMXRaMHo3UVZRZGRvVFN5c2pTZWJ6b2xmeW9oU3RnZ0JlZUxDSE9EZk15bzJCT1M4YTEyaGlkcjNZVWhSRFZYVEFJeEU2eHdtczBERWcxTVJGSEFHdEdaSkxFNkN0QlpsNUoyQTd1bFRQMjBNalFYdStGR2NSaGpDb1ZYdG93Wml0aGVBaWdibG5PWklSZ0RDZ1lLZWpqQlFvUTZoUmgyTElhckdXQjd6K1lpdEtBdXFFTUFsOVFESWdIYzlSc1lpVXpBTmdNc1pHTExvVWF4YWtrVnJmRG96SzIxMFpiSzA0WnBpNkNFQlZvc01PQUFVVmdRaXdWMkhNakJEdUtVZ0pPSWd5WGhFTW5zVUNsU2FhU3h3NlRyaU9tTVJWMjRXU0cvQXIxb2I4TE45TUZhZmJGb3FOcmNjQ055NGtpanFJd0JKbE53QkM4bVdWZ2xHK3RNWit2NTVPTVY0RWlGMktDSWJWU3NsRm9aTnBtRnc4MlhXc3dvQzU2S0QrcVVyb0l6S21udTRHQVplSlovRUFCTTRRV1FScEZxaG9WWUNRZlBkcE9oSEdhV3V4NGV1RmlIbnU0MDBwbzFON0NYVk1uZktqUjJZZEZpc2NXcUZxdUJkTnZBYTlkeTh0RVRQKzcxM0x3Y0RQeHZEZDBhdys5bmV5ZmdkL1kzOENFTDVzSmlXQW5yKzMzL3daS2NRbndLanJYaU1BQnBEdUNvYVVpa0dJU2hDQUVGeUVFVjVKZWxGY0hCcDlMbmUvZS9hN2JNRXc4S3BQNlpaVm1WUjhTNW9iQW1WWkpXT001eTBqOEJBQlFZUVRVbVF5YVpHRVQxeDlIRENVa01HMk0ySEVPaHVYNUhqVHVCcFNwQUt3aVhPbXNxQnFEQVh6UVVJd1orZk9CSHZnWmhZaFBHMy9qVnlJdkpPRGRCSUMwaks1c0tuTjc2cVV4c0k1Ump0QXBpdndjbWVBUUs5RllLR3NFU3RDUVFvZzc2RzRaZW1xVEpUQVJXMUQ4eUJWSVFCVk1JaGFadS9WSDdoU09CUkZLUm1qUWtTYmtnUUhvaXJZemhLRlhYN0xJSm9MQzVhYW5pMHhnV0xnUmdUZ2xrck9hMVdNSnduUTlYemxjZm1BRHNoUTRIOUVvZW55NVNvckhyV2c5dHMwcEk3di8zc0Vld0FhenJ1QytHQ1BDZnhya1Q5Q1lBOUM5YkE1QnhTS0szZHgwQVlJL2V5aXFtdEJ1QW8wdGNOdWJyODB3bDQrbTRNUGo5bUthV1AvRkoxdGx0UGRVek80Ry9oTDlXanBUTnNsVnVJeWZJNlhKWHVWaWVFd3F0NGRibWZqOEFDQ0p6U2ZkbjRwTW80M0tza1hXeXNRVnBqRDlTd20wRjlBUEF2d09BTngydXZjYjJDOXVBQzkrRUM4OTR6enFmR2FQN0tPYmhybk03ejIwQkFZQkVRSDhuZ043SzkzWjFldVZ6TlBxbjdUUEhJdk1jZGRWMWk2MnozbjlPbVdXVCtaYWFhWWtMempsdmdXdUloaVJRc0dhMG1vdGdZR1JpWmhFbFdxdzRkZzVPaVpJa1M1Rm1qZit0OVFBSG9rSjZiLzNnYmpMMTFrZGZPYlEzZ0JoNjZtdTlzdjYzVHVkVG9GQ1JZbVZXdVdlMVMvYWI2N0RqampqaHZwc1JjVXVOTFM3YjdIYlV1T3VpMy8wUkRsZmMwQkFldjZtMTFULys5cStGQkF4SGhTZFNDeEF1Uktnd2tWclEwUXNpYTgycXBiWmFPYU9OQkM3eEZLbGlUTk5lQnJlTzJ1bWdrNjU2NmE2SG5vWVlZS0JCUEVhYllLeHhKaG52cklueTVjaVZwOFJVcFd3bVIwMkVqVGJZYVpjZENBMi9FQUJvRFFCc1A5QnlRTDhGTVA4QThKOEROd2NBQURaMkZieUVoT01VTENXcW9waElpRkZHUDYvSlNiYm5uSmdVeFYxRHpMUUFoQ0pJdUViQm8zZ3lhU1VKUlNOZEVMSFNIdElNM0hIR3NTTnhmZXdFbmNmcjZjQ2dNV2w3amFhSjAwZXhRdFFSOWlpRzRDVXc4Z1NpSm5ud1NiMnJzQWlwUkVsbnhDWU1zNmNTeUkrZTJSeDZFcWIrQ3JHRUhtT29OQU9GcEpTeU5sQVRoSFROUG9COUhRT3J4NGo1WGt6T2c0UU9DV21jUGpSeFRDM1U4WVBvdVVVN1g3ek12cmtpV283ZEpzWm5RUUFFN25uMS90NWZaMlJFUW1vMHdlaXV2SmtMbGcrd1JPa3M1eFM4TThXTGxUb0V4S1JKdU41Wmx1YzlWeG1HcDNYb2hTRlpnNjAyaDBQcGZRamdISExkVTlkWUdaR1VqRjh4R1BhZnBDaU5CcTlWNmkwNlQwNFlZcDRvSzE0b2MzZWxyQ2lWRVlEYy9qL3lRU25QT3RhSm56SEJhYWhjQTBDZkFDcThTNzVadEFrMHBUbktOQXV1TVFXUWJGaXZ0blBVeG5NTFFPdTJmRW1OYjFacTU1SU1jNVFadG1wOFZ5bFIrRkJZb3lsWHBYN1ZCREFtZG1JdEhWMkZSd3hxM2Y0ekpveDR0M0taZnBzank4dS9WV2JVZzdaMVI5TWdwYmpKNHRtNFdBRE1RazQ1d0RTa1VSZ3R5RW13Mk1LUlRXREZaZE4vRkdhUmZaSGJhN09MWU8vdVQ0aUhCNHFNY3F0SDdLVnYwYnF3T1pGL3RlWStEUTRvSFVRWWhRNE9WUW9iVFdOMVM3REI4UFhjK3p1eDZPUTN4TzFGZG1FcUEvdnlpSzN0dWFIU1JhVzQwT1kwOFpWQVBUV01Yd0s0WkVPeEJoQzhmVHdhc0doeEtTdDd5UWxCb1Q1MG9yeCtrTnFvbUcrcUlNMTRUeVhWaFNJRDEwdUVJMkNjdUZPcTU0Q2NRdk56eC9wY2Y4R29kTlkvUzN4bWFWK3pKWnN3NzlpbGU5Ri9VOHJoUFZDNG1RbGNNRHJib0RZUzZDTmI0QUt3eHArUkVGVlMxVEk2VU1adzR3WVdRTlBRVzV0TlRuRlBkTmd3MEZNK2RxZ0hnODI2SjhzaVZpM3VuUTRUbHNpOWdiN0c0NW1XTG5kL0R6Ky9SbmE4UkxFZTU5bXFwcjdTaG9xdFZ3U0l2Zm1HZFYydjh5cHFqVTd2NWo2bnJQMTExcGdzaUx4TmplMVdIQjhiTWpwV0o4MWR0UzJwYW53VGd3bk4yMzNXcXc0YkRKU1pHbEJKVFNEbEhlTVlaWFp0TzlmdWxXTS9lMEROM1p6TkZiemYvZHMydVhJTEtneGRrd045V0VUWnU3bHM1cmt3d1JLd3lWdVYyRk0yZWFsZkdWYWgzTFUwcjUxdFdmTTVXRkhDSi9XTVlZVWpoV3krY0VvOGV5V0JNWEV6V0NWTGt5YllqajF2clZKZG5PUlhleHNyZ1VETHFiYWgyb2lEODU3RVNHTGF2dGtUTEpSZm1OV0U4ZWFHMjkwV201SXNYaTVUaDdXd2xPOGMzTFNuM2V1aTdXUjVIOHhEWTEyTENiQ3lFeFYrNng0ZjN0UXdVREdyM2h0bE9mQUc2MzE4eGtyem1zamJxd1l0RVZTVzh2UjlLTGVoWjdvSjNva2E1aldMVm45cFdxY3JtRDJWdkdPYUo4ZW4rS2lPZFVia1BYSlFmVzV4WmI3VzJSZUR0T0pUYTBOYk56d3RSSlBBWjlSdHFTYXgwcUdsTGs5Mmd2MURYNU9VUSsrM1k2dTBVSzNQUHlEUmM4ZUlsbWtTY0VacDB3UzJ3NndjSzMrS3FuSjM0eWVOYWJ2RjUvUnlEUjBqNzhIdzg1SG16R1ZPUzBXSWc5SkFlbGdPNDl3Tmt0STdoQTBXOWt3SnVqOUNFbDJHYUJMNXFrSlhKbWdzc1M2YWdOVnY3b29HaUFneGFsKzNxd1RYZlRpbHJDbWxWbG84WTBMTTJEL0FOaGZ1aVNKck5YVnNCeDBXdFBia1Zrdk5hSGxrd2dBMWNPUXRJeXlFVWcwT0hIbHpkOTFRVzNybDNXMC9zM2R3bmZZSzBnQ09XendQdElDSFZuTlg3ZUJnUm5SY0dRU3JqaXVjMXdud3FXVWwxNnZSWjlWaFhTZU1JUzBrZkpDNzI4a1BrL3IyREVkVFBJOTBHS0FKbXR1UmcwcGpIYUU1Uy9sbXk3SFFDWTNnQnFrYmJrcERpdDdLTVBwOUxrUVFTWi9QNUlxRHdSQ2VQUno3ZDM2ME9nYUZUanNlTjUvRE84bWE0bEN4bDUxV2NwTzhUbnlkdUZsbWZoZnpWbXQ2ZWNoOExlbThuK2dRS0tLaGd3MkVYK3AvRGVzaTlHQVJWZ0s5a1RsT0xUa1FJYXJYTWJKWnRhRUQwNmI1YmRJNGFKK0VUWCtBaVE1SmR0dWNRMVhhRHp2REZxMXNMYUpjM3R4S1EzdFFMZXlVcXlLV1ZRM0YvcTBkRmo4WUQ4azZ5ZGRWRmE1K1ZzK0RTRzZ1Qy9uTjljZW51RU5xbGpKLzRjb3QvbjdmK3BpWWVZVXBvK0ZaT2xGR3hSdlYxV3k0VkVQR0tMSnBYN0FCM3VDdExGMmJtV2FJQmlORjZoQjkyM0cvVDJtdWR0SUUxZno2NlRVdzNBYnJRcmFsd0VGaE8zWkxMWkpHeld6d3p3TGpEcyt6OG9aazg0Z093b0hVQUhBZ0x3OFhoMmFGTXI2NmpzNVNveGt0SllCZVRyUmpYNXpuQmtkbUk5TSsvMWhyY1lqWXRkWnJnYnJWVFI2YzA2bzNtdWFDa05aY2pyZlBzWGxpcGFqTkx3YXVmTDVFVlNLRUFIZ3pvN0VNeFlKVzAvb2lKeHVOdGtvMFdtVS9PNDROZFVXekl1c05rZFpmamRmU1ZvMng4T0RISDZMelRIdXoycHdPVC9PY0JFakoxUlVqUjhiODc1TklFQkJ1bTNCdHQ2ekVvZGIxaE1kb01ockdHcVhVNDJCMG03M2t5THVSb2E1OFJ4bkdpS3htSUh3dGdOU3V2a0FxdXZSMEtOSnd2MzRZZTRZOStwdlczNUUwdHNGRjFndXVqVExVMzVmcFU4RHdsQWZQbkc3SDAzelc4WDBkSm5tdkp6eVk0NXg4bGhENmcySkFURVI1bXgvckV0M21OenEzT2thVXdKdklmR3UrZnE1WGZCT0hqYWZ2UUQ2SW93aGhiOW5RYXhUNkpEZlNiOFZreHJtVlZucXU1clhJNVJxN1JIeU1KUmlOSm5PSHQ4a212YmdnellqZ25UbjRkeWV4Y1N6TzN2UXlEb0o5bFdJanVJc1JLUjhmYkFBWG16dnNsdk11YmJvdlRhbWM3SzJiUlVmMkgweVJqTHRKcWVUdXlBamU4WVFjSkpBMWRjZHR6dVZDZTAvRXJoWU5Jd3UwWU96RXRlYitTbE1LT1VRc0U5dXVadXZ1UVhXYlhwWGxDYnV2SkFSWFB5QW16RkdoSSt1T0dNQkg3RFBPMG9EVXcxTTc4QU4zaEo2RUIrcW8wWVJoSTU4YkJYQ0lVTElteWdoV1ZzYXlzSVNRQjU2aHFCMkhJcFh6T3pPOUVsRnNkeHVCT1gwaVBoU3hOUDllVmh5U1NJcDJFelhrYWJSN2ZmUXhrZWlURDRMMEZZQ0dHaU56TURkSWpYaGhkelhQemVRNnNIVXdEeWdkVXN3eCt1bUtpcTQ5bzVRcnk0RUpQY2h2WDMybUoxRVpQdkxySjZwY2FWdW1DM3BRcVh6ajJldlg0b3BVN3ZOdTJhK09WK2VyeHZJajJVYmw2QTNuUnNreGtXdzlmTkFlalZ3TUlFNVJIRVNvNXhyMXhOS3M3Y2NOOE53MzFNZi85dFJBS05ETEhEN2NMNjVtbWVwYW9oa25QZUxZbmNiK1pHQVZzM1FtZXM1eUJHdjR4YkpSN1J1V2pLSVd3UTZsZkN0RnRIQWUwV0NvbzFEQytTQjZKc2RucEVtUGdCMmdTUTZKVWk4VkZvSUJoVjNraENoZjAyWXhqOUp2ZWcvVEtxVHdnM2VIUE81c1ZrV0RZdkdDU2FCdXFJN25hQTlvTkI4NzJOZ291SVFia0VySGI4OEoyZE5qUzZKcERyVGZWN3JoOFdyeGtyOGNCM1poMTJLbk1tS3FIbzFwT2VuaHRGNDZhekU5TGE4N3VjUnYzSlIyeXlRN21JTmxmZG5Ham5VSmV0L0YxdWplK3FPNlN3NnZZU3A2RFJzaUdnSjVCY3hYVm8zUjVMVitZVjF1dXpodmlYRCthYjFaR05EeDJQeDRucmFtYWNidHFIS29jeXYzMGV6QjI4R3JralhlMCt4QWtCd2FUTXpMZFltRk85Ty9nMkdJZUhBU1ZOclR6NFV4ckk4VHhLampWSnFydDFYcmRJN0RNKzNEZStDUTFmVzUvVjNUWEhkZnhvckV3TVBUYnhyc1JhWXBubEtITXh4WkhzK0pjZk1iN1hHcFBCV21MZnVDUS9mU3pldjJQUmF1Q3o2QWxsL0I0RUNFdnRGbzlCckdFZFpwbklPSStMZ2duNUJicU93U2JqaS8xaHFCYTM0bjlmSjlBRDNVOGlidWFtR0dkM1cxTHVSbE5vaHpuTGt1aVBlRDFqM0NERHA1VFZOR0ErRmhkWG9hWUV5TVQwcVR4MlJud3BzOEl0QjlmSEozeWE1RmVnQ2xmUDByUmxsOWQ3Q1ozMzNqL2hnM0cyTXRhdk0xZkJVTkJyTjFUZUZXRjBvYzdpd0NvUXZLbWVTcGhCUmVIdHl3MHlpdzkwbjZ4cGdDWXlrbW9OS0dobWgwSVZaWThLQmtPMFcxcHFZSWk5TWlUVkc5NEoyamgrY3ZPUzBSc2VRSzVnVUQ4RUFxUDJDYXI5SWpWaHRWM3N3UFZOelRCM3Z3WUNraVdCVTdyNzNONDJCQW42TjFHOWZsOU5YL0Q1QStKM2s5UjZOVVcvTnlicVRyVnN6dzV6Zk9EOE5vMW90WXZYMlNnWU5YMTBEYzVZb1B1SkxVajY2ZFR0Y09sL1BFYllaUGhyaTMrTysvRTkrTjlqYmVhUXJPUTVnSjE3eDBDSjJtRG9ZWW9OQmxUTldOSHV6eGEvRHVmanJ3dnJHMG9nK1lZYkZDYjBUQkQvM283aXR6TjdkelhHb2R6N2ZKMzZ4c0RPa3lPU0E0NE44ckhQdi8rVE1hREZwSm40MzROODVNL21jcStDS29pZ2h5d2Rqa2xWelM5OEhnNlFHQkdWK2tTYWExSzBseVI1VGtEY0ROL1lKVHBSL3pmYnpTa2s1ZXZGN1J1ZEZZS0pxbUloRWlSRWlyMDdGRUJOYXo0RUt6NzgwQk4zcUs5ck9iKzRZbzE4ejc1OG5ja2dTNk8rUGdMSFprK3ZYZXI3SWJ1OEJxdHJiczFmMzNteDUySGV5Wkp4M29pRzgwWHpkYkE1Uy8rRUo3THhFZnMyZFB6NFlnYXNlaHdSUmFMS0xUa1lnUUpYa1BSYkFoMWpxWG1TcmR6dmdtZkUrMlRaL2ZtNGp0eStkaisvZkc4MGlSMjZuLzY1MWorYk9kRWVWM2VaTDc0UVVpc0liUnIzU0pGNVRvbld4amZpSUdlZDN4YWN1WFlJL1hDOVh0aFlBWWtEVVkzdDFFZ1ROT1JrZ0U4UTRVRFNnVVFjT0hFQXVnUEo2Rjl2VVpRSjRuTGRRci8rOVYrR2dhNHZzUXhDRE5YNzU5NXlOWHBNL2ZXeEFucDl3K0M2ak5JbjI1VTVvc3FRR3JHSFhwQk80TmpiY3U2eTVmY3ZKb2RySHducFdhRlhXRFZHRnFYZjNaV3VOejdGOWV2dHJ5akc1aGFUb0hQN1h2eGJXemEyaUZnTmxYcHVLY0h5SzZ0SEw1SmtpeFMrMWp1dW51d2xxRDM3L1cwRjNRVGNkSUxVVzBHTmczRmMya3A2TktpNWxBVG1lbW9Ba0lUNXJaeFh6M2ZkbXArUU5tRzZSRnh4M0c2eWVYaW9wWmtWemZsZFlyVGZUWnp4WTlnbzIrZ1lYbVlJaFMzY2t0NkVFUGV6WTIzWkhoakcwd1B1SHQxenN6N1lzZEdlUHVaWWxlTU1Jc0thMG1iVEZydWxNR3kzc21KZVJDc3BmOFB1elE0SElScWRhSVhMaEU4NjdZZ1lCZG50WGtjMzZiVS9QNHcva3BaVDhVOUYwTTBCMGhvRm5vTmEwdWNXd3hGaTUwczdUMTV3TjB3cVRaZkI3ckxWOHltaGJxYmNPRi9qYWRhdlVmTjJzaFowR1ExcGI0TjQya2RHbjBjVlREOTEvV015Y241ZXFJUlQvMStkRmtiMHZUMWdPSnVWdnJDSWYyMlV1S3BwOTM2U0ZXMHFsc3FGdW1KUFdPVEN6d1U3NFhzS0ErV0J4bnFETlZrQWZBcUkzaldxc2h5bjlITWE5OVN2WkJtR3cvS2NCMWVqUXlvUEZZNXN1L09FUEQ3MFR5V29RL2lmVlIzbDhxVFNBdXZUVVg0RjRTZVkwYU5GelFBaVZRRmczWkQ3Ry8zMEVLTi9wY0VzQUJTakJYWTlkaTc0cmxYcEpjNGRWNDhqYUlCckF5NHd6THdJRFZadSszV2dmc3UwTnBPY1l3dzN2WEhaUWNyUkMzTnRRc0xQR21FTVgxQThzSDMwWVp1Z0JZdWp4Q0x3N2UrNU5EVGRkUThlYkdCK1lnNWFYMEtwcXdJdXBTTHIzeUQ1Sm5GeFR2ZmFucDZPRzArMStkbUYzNklnR3N3OUJCY1A1M25mSFA3Tm4zUVpYcHN4TStLcHhETm4xK0FxV0I0a2RqYmlhWXZ2UHFQN1dRNEsvRGpEVVo3MTMvRGJGN0JHS1NLSjA4WCtMMVRSUnl4K1ZXNzJvT3ZBMTNBUXVyWHUwNDl0M045RktZRTRXM2M2RTk2YTAxeVlkdmk3NytEQlJYdzltUkMvN0xQR0psa0ErN1I3MjIxY0dRZmNXb3k2VUtjcmZ4QXZBZkJ5RDZjTmFjdGVxSENhZStwQ2xtTEd0R0JnbUNTUDdqQkhSMXRkMFg5NHUzNjFiRCtZbDJnWXM5OXRrb0ExdWM4NjRQZkJUaWNhcHFldmhxWEJmZTJiUGxpK1AxSGpNWkZhdTRCR3VWTUdsMjZJYUtEbEo0ejY5WFI5R3h4WEhzNTBXYkxiaThBMThSVGVFcmg1MVdaWlQxaFRURmdweDhXajdTUGlxVDZzazJPS0g4NXI0QzY0VXNES3pxbkJHWGZVVW9hRjg5Nm5VSm5rU3YrbUh2UklpS01CaFVRT256ekd2SDBxOSthc21ZOWFwcVpxd1djOGFHRE9NRU1sZ2VRcUJTaDBVYVFEMjJJN3NlZlRhcmtGZ0xObk9wQTBlSCtxd2Q2Zy9vZFgrVnlXdzBCMWExbS95TFBjNVZRWjl6MVpKTzhMWGI0WW9yYmQxL1dMbWU3VUVCN0JyMTJGY0ZnL1pWbzI2WElzQTlKdGlCS2RhemxveEZQMFFRd09KcFFVb0VqZ3c5M1ZzUTNwdDByQ0tOb2g2bkp5WFZHY093d2ZNYWRjWFErVVJ2SC81MzUrMDBlWTRFZzUvWkwrd2ZVeTFwR0pVa25aT2puYmpFbUhFWWh1d1kwcCt4bTR4Wk0xSzAydzFEV2NjOGJzaW5NdG1pWldOeXVDQlovdG5oSFlqei9nWk9xTHVzZ3dCelFWZHRQRlFYZVlEdkhsUnhjd3RzUjJJMWpSOVNLaWR2T2IycGs3RDAva2lLdU9YeDNwbUR3NUZBSFJibVhWbForYWxTeGUrNEhTdWRpeGZhL1BKWVk2RWVtbzBrdEpyNjhoNTJZY0dLdnNIOUQ3eDlGVjdMOVM3d2RLd0tCdVhtQlc3ZmJNdFowQklSekZsUGNiMW1ZOG50cHNYMllnQXVzMGNNMHF4UkxQV3QxMUt4dmZjanFyZ0M5YXJFM204SjdmZUpSY1FWSkFlczg0cjZ1L21nYlVucWR6L2cwQzJ1Sm9WN2trOS9LV0NWTG93VzVPUlM3bHZaMmovNnFDT2tldytmNTJJMnJ5cWp4NCtxMjUvLzF5VDl0RG8vbXkrU2xabHo5bHI4T2RkanVDSEdsZHJEQm5FR0V3bkpYQlhtZEo3WHErSkt0QlBtUFJlcGV3bVc5NFJPR1ZFWTlLNDgrcjhpRWhBem5UeGdWR2RFOU9LMEVYblNDRmR4dkY4YTRLVEMxTnk4WnEyNzdCTkxpRmNDSE1ENUhlaFl0Y2hEK2haNzhGV0JvQkFOK2toTHlteXlBSUdXY2xhN0xXODFsZ2ljQ1FkdGRpYThNUEFIZGtIeUhxRzNwSXVodWV2TS9iaXhnUHlzWmU0UndyNHM0TGN2SDNXNUJFOGdWLzZ3MStSd2VqTXpDUitKdjgvRzlFVzhReitRd2VJeFpLQ2pBK25YNGM2dG45WWFmVU5mbDhVK2MxV01kd3ZYQThkYTZaM1JSdURzWGFnQVZ2VDBaeDlRNnBrL3FzQ0tTQXo4MXpYdGZ0RmZFRE5Udy9uTWJoNlFXUlpUWTRLbjUvT0ZYZmZTQWovNzZiQkFkaVlvUkZwN2MyTXJ3WEJUWnQ1cEQxc20yR0lWY0Vmd3RwMjBhZGYyaVpVWEkzd0RXbENBVlpJNVZMZjY2bU13R1lBeHpDdmxpR28rN3ZpTDE5WWo0SUt6MDdab3NNUFcvUHFmMC9ySXpwK21QL083Snh4SDBMelRaOHpHdEdzTzNFSVQ1eDZWVHJYVytMOWxnZTlVTUxQNVpiZkN2T1lsR25PaWVCcEVuUlNCeE4rL2VCTmYwamJ0d0VFNkJhb3pWeFY0cVdPTFE3KzZpa2ZkRytCS3d1eEN5SStyMmIrZzJOTXRrWDdSN2NmVkRLV2kvZ0NFa0QxYzFLeThzTFhodmdlT1B2aDRxSlo2RThHcjdOVGJFRlBjMnZEc1cyVzhtbGp0RnA2Y0NaV29zcnlSSEszUTlEdlI4OG0yOU5rVm5YdXJpUUlPaVNzYURwK3YyMU00ZmxVY0x6WWV2QkFDOXIrTVZxTnZvRFJDZ1ZGamN5Z05YSzdDeFlGamIvbG8wN1Z2WlF0bDBtem4vT3R2K2RKMTFkdHJ3SGsxVUE2dGRDd2VzM2swblUyTFN4c3g3Tk1TUFpldHNtYU11a0pIb1BYZENSOUg2b3pveEdtcjJXWXlKWkxPWkZBZGd3Mms5QkN6M1g2OTNPTHlHVHN5M3ErZWVKSnNlOTJ5YUlnNjcxL2Y4ZWduNFBBTXhRSzJYdzBMdmZkSjlCN2MrUWRTVFBTdmxDclo0TGgvMmhxbTd0YmFYRGJ6QWxodWRTRW83QWV1V21xcHp5MVhLVjF5MVZCcnBLUkxxVlM1bFpxZU45cTlCc1RtTlVvUU1XUk5JSUdHSTBYa3lzRVNjZ1ZabzdIaFlyQTBhQWxTb3dvOEZWZnV5K1hGbW9yaE9FRW9uOHU1eHNGNVlJdzVjaW9ub01JRmgyMVhSMHNIaXV1bUR0SmZ3K25uNWhTVkZXTCtWOVJVM0ZZeUlGSnZTR3cycE5VeWlnWDhLdWNEbWphT08zQnZuMDZYc1FoYmZPYVVkUGJudVNEV21qSWtrNTJUWVYxYU5JM2hsa2hXcktFWlBpd0RHcnlQY1BiNy9JeGx6N2FwSGtUaC9ZV3ZmbXNzRjZTNGtoYnZEM3FKa1FVV1hCWG5maUNVVWtpSmpRSmw4TFh0RThxZEk2akZiZEYySjdtdTI3eVhsNDN6OTdDOWcxU04yV3dFbytERGtPYlBlbHBFSFhrZDBtM0ROSWt1alZOS05GOVRJZXpmMXF4cHBkQ0ltaGY4TnduYXJ2NFAvVk9NTS8zd1FjdzY0RElKdTNCbmp4RHdJRFVqTjNuYU1tb2plem02UEREY0Z4K09sOE81UXV3MThHUW00QzhhNWgvUlN6NlBjRlc2Z0JURjJUR1Z4VlFxT25HWklhS0dZeWFkT0JVd1dod3BGTTRZMU1wWUFnSFhxL0J0ZU8rYUtiY0dJVVdnTUtLeU5TUjZOaDl1dWdZczdDQ3FIQ3owd3FncDNZZlliSG5FbEVaaGdXZkpQNTQzZmQrT1M0MUlNcXN6R2pNNkpHbVV2dmc5dEh5RWd2Q0laVEszV0VIQVJDTG1jaWRpUjhUQjNpUUJxejFCcVJxV0ovREFSRThTMUovVTRJeEwwRVdCZ2I2SStRTHg1eGVQeHJkVjVTZnJaK0YyR0Vqc1VaWFZOSGdhRE1kTldrc1FOWi9IQUtjTkdtVTBudkVFQkkrek9tRTFpeHhYUG00bTFiQkpIVCtrVkhrd284cFhFQWthc1p3VFdDMkFGZlJWWXcwL1VZNHRMcTFZcUxTalp5dWFSNmo1d0piNEFtK3lUM0dXVlh1YzNZZ05VODNnYmJsYzhKS3NmVWpRMEw1ajNwVUZjWElHY29BVjBDN3crYjVxUmlKV3hCRXJrbjhadVhleVdBb1dmZW1sQXhkcHZMZHcvcmhxWGJ2YXNFWFk4c0MxaGZ5S2NwQjhiN2xieVAxWEFlNFdzY0x6eFVOYmQzWDIxTlkzUEVGendYdUx0dDVSZjVpS1BTV1FJanNJdnIvVnJZYncvT0M3Q0w4dk0vQlRISFo1NVlhSk1wRE90N1J0YXRwWk9kdzJuMTVEaCt0TGpTOEFmdVhqUFJ6ZXViOVFCelZ2ZHJZSmhRRVVIMm1rdjB5NDk4Qkd3bmZ2aWp0b0ZiVTNTZHEyWC9kMFMzdEx5elNMOTFOejgyT2dCUGdzYXUreWdUK3RPQWc1MUhDZlhkR2Z5bkdxRVJUdmE4QTJxUEw3UGEyTjNMcy9uWmRBSzk5eTZDazI1NjVETFczVXhMSlJZKzJ0OS94dXZyUFowdHBTV2I2dDByZlYwclNQMDlIV3VxNjFkYnkxVFF1aUVyeE1wSmZjcHJkREZUVVBWYk5GTnp0WWFqMWwrZFc4bjVwYlh1UTBxMXVhRDRNbm9GQ2kzOTBudWhqZjl5RFl2eHl5STNTYUYxMFh4MHJsSml3NjNhM2tVNnAxSzJkd2t2eXhXeHlyMWM4VE9rRk9YV0tLcWozYml2SUVYMkhHYmJwQVl1WERqcXBEMXNFK24xWnRuY1JKcm1tZ2NuaVZET3V3dlBXU0N1eXdubjlhWTdVdjAxRE42eERUdDFxbFE5ZTdoVXRiaE1LV3BjSkVCU0ZiOWVVWVhBSkg1bnEwa3ZzaERtMUZyV1czOG83QjI5Qmx6ODU5V3lQUEExK2Jqd2FwK1B4a2h0ZDFJS0l3OWZ6bHlrN1YyazVNbm11VlhzbXR0VU56ckgzeHR0WUg2SnFqT0tLMlErZW12MTc1UHFRMzhUKzltNlM3eWZVOHE4RCtCeGhUUmVIQ3ZqVG5Xa0FNOTFKWTJRa2I1QUdQUXFXSnFBNzZubHcrdy9lOU9ZQmlwaTRkMmt0SWVPUk92MUJGY1crYWdDaEEzZXNsRVhVR2JjSUdBUlRjNG5oVDExQlo2NlhYelRGTEZOeVpJVDVNTFcrcnlCbW9kVzJWckVYRFJNWnFSRC8ycXlNTDcyWGdRcEdFTGZOb3o3MGd2bzdCa0J6eFdwNmVoQVZhY25wZXRYa042eEpHZGdpSnlocEpoN2FDTUlnRE1jcFJUOHFpYUx2TDdHYU5VK1puNHVpbHJnYTNZb00raUtzSEhxajlHdTRuZ3JwRkhvV3J2bEZRUHNQY3B4bGpxT0xzdmRtbWpicmVtc0hyYTkrdVNzR0Qrb1Z1cGJzT2I3RnhaWVU2c3F4UmJkeDBuV094a2traXVzNHZudy9LMFdDSlI1dUk3NVhYVDMxNEJzKzlEVG5CeGJ5Um1ORzV3dzVCZ1dQVUpoblpzbDJXVzNONSszVXJkaVUwTGlxeElDOWZKaHVmTmwrV1RKcXUwTGNTa2t4WDR6RkFlNVJXUkxWY1BqNVRNMU5GUnRQNWJiZmtjL1liTk5VSWlMbnBUQkxUc3JzcGdDTVp4Mm5GYWtNdkp1Y29pandhVU1hS2VMN1FRdWVqNktPMjNKRmxRSXRVdWpZek8vU1l1RTA3ZmJ2SVJORzhNbmNwbzVkM2w1bEswaklqbWR1NDlZOWJYNm8yNllsWmM3UGZIZjkwdk1kbUhsd1pRVHlIRE5YMUdsNWsxajdjUDQvNU1ORXA0MFFKelRNM0dMaXYwSnJmQlI0dUFmZjBxQkJNVzBLVTRWbXEyT01xY0xNZFREZXZhUGlDbWJZNHdZeVZMMWdaTm5WUnNqNEhMcGFBdWVhbnE0TGNDcGxYcFJLaWt5bVU2WWFjNGV1K0VJbysxL041K3M5RndpOTBRUDJOcmdDS0dwVERMREtXTGFSVzZrYlBhbU4zRVptS1JJUVF5ZFVlYkVTMCtYR3FkcWhiZ01TbTR1SDloYjd3QWFxT0lWMkM0S1BVdm1JRUwxQVBmQTM0SzVsbWl4VjM2RzgwS0xzYlVvMUNudXJDeUJSRjdrY0ZTKzlFc1lYL3pRZmY4Qi9iZmRQa3l6c3BNSTRxanBuc1hyckFvNy8xcWRmblMwVE0zQWFTMlVUdlI4ZUxWdUxlanV3TGxIZGJ3blVXWFpGVm1veGhuYUxMampDYk5maVoyUUpKTGdpSzI4cU91a3lseXhaeWV1SlAzQy9wSWJRNlRGMnVoWGdhY0taV0Zidmd6M0d2d2g1Z2FHZHRJQ0haZEFQd1BhQ3pJdWphZTFmTWRPRjkyZDRRd1dIdk9YMkxLREpsajJpNk5qZm9ocXNnaEZ1dUc5aEtyYVhOMG9oVjBFT2tHYUxMTHpPTXZ1aFhFOHZVNWRib2NzWm9ETWxNSVROeStUV2kwSktJTDVEVSswL3BkMGYwUTRtNkNYV3A4TUhRSStWOW5obmN3U0RLTWNvUS9jaHpWNzliS2MrL3Z2ZzUvU0Z3Tzc5MDdQRDV1L2RVeXZldjlEMmpYMFpaZEFlU1JpL3ZmNnE4M1dPekp4aVlXaGpLSDlwNkRtS1VkdHczNWY0U3hxdGJIN29qU2NXSEZyblcrRDdsWW0xTmsrSG1heXJ3ZFBSQ3ZmWW04TXNsanhvZkVjMk11RFgzMncvTU0raWx1dnpyRFp3VGNlbHR1cDl1aHQwR2w0OGQrUW5IVzA1VXNqelhhL25uMmJOczgzVDlFSFpvdThudDQ4c0ZPUHMxNzg5M0NiWGIyc05MV1RHTmpwVTRBTU9UckxoV3k0NVBYcXVWUnF4T1ZRVFdTR05XaHlyOHlCNTQ4b0pXWUFQWlhjRGh6Y0tPOTMrOEIrTzVSOHhLcU41Y21veWtGQ28xcmhZRllLMm9oR2V6UnRRVmpHNnA4am5BT2xVcGorUHFiY1MvbmxJQ05XUTRDN0JFY1AxT2I5L1luYzZ0YTRJM0xuSklWa2I3Tm1IZFdLajJ3cjlaektUaTc1c1hLMU5EZTV4ZFk0b3B6OHJFL1FlbkgvY3NXWFlxRmRtYmNRalgyQWZpdHBCRUdwRzdmUEl1dmZDckt4VmF2OVlRWW1Xa2pnNDNxQUxUZkpkdHpLb1V4bnhFLzNmUk9tL1JqS2k3dXpBbk9hZ2dTRm5YbnBicklIQzJMTmVXb3ZGbDJwWnFyZ24vNUtMa3NqRWlJTU5pL0loRW8vUkZaWmcvYXhZREtTL1lKVXpyVTd0Z2g5dURtN2p0cENGSVdiODkyeDJJMnlxeU1TcmVicjlJcTJQV3NKMk1YcndyTlNJaDNRQTVBMi9aVUlLMDFmYnd2bVlFRjhxR3FwQmlMR1hxWFM4ZXV3WmlMSTdWOXFhUExoajIwVUpQOTJxVkY2VjR2VVFkWXMzOGw5QlZnU25jWU9HN1pWa3RpdHJmZnZ0QjJiN1FKK0tHbW5OZXZKVWpXZXZoaUJDdlVpR05QZHlHZUFYTHQwSjRmcENjMkdrRjk5WFRVa0c0Vi90cXBLWEg5ZW1wQnhWbnYydURYWHBmRThtc21tTldsT01ZMkYrd3lWRE1HU2RDWWVQbVltNlRvZE95Q3puVDVuRElORkhRSWlYNFluVTZvVjNxOVVnd25jeWxPR2FTWm8rWFNhUW1WanV6QmszR2FLUVhSeFp4dWcxSnZzLzB3MkQ0ZjF2eHlVUWVHQlo1dlRJRCs0ZGM4c2Q0VCszUXZsZkFYQithSTcrVXpjN3pGQStMT1p4ZjVLQzhRbTF2Zjh4SUFkQm9VemwxTktQK1JIZEY0ZmlwNWxjYW1uWTNkMVMxdjFiL3RXUElZaThSaEwyazVRNW5hVUdnOFRvYTEyaVRtRm1iVUEwVVRXaDBDVE9tUytwaWdIY2xwRGh4OEdhb3ZTV2pMWFFyMFZJRW9oL3oxS1VUdG4zWGVPZzc5REMrNUNTVTZScmRQZW1UWC8xc2lkdjZENWdWYVZac0pUUG5VenNsVjZ2RlV2WFZFdW5WSElsRWM3VlhacE5MYmJLdk1iQnNiNi9rczMrTG9lWFRWOUlRc2dNTjlsMGIyZ0pablBOcE9NN3V2WjR1V2JZZDU5UlRPVHczSkdYcG52cXFoYlgrRzBES1ZDdGdFbDFVTFJQZjNlcmdrTjlQRjY0RUVIV1pSdDNFMjYyMWZQU0hhait4U0wySGhsendkVDJ6cXZoL3daZHNDRWpObzRvdUlMZDdJY2UxYlJId2ZwVldCWmhqZlppWlRBdEZOVk1MZzZnV01oaHFtV2hLMFIzRXBvS3R4eXVXelMxcTVtcnBPd3E4ZVZ5M0MvRlJlUk1JSEtlWktFSStlWWl1b21sMkNQb01Galg2cThCbHYwY0UzVnVvUWs4SzV5ZU1wZE5ISUlrczN4aExDU1hsZkU4cXYzeCtqdzlRWXBoUzR6TEhOZjN6dHJFbU1KMDRHMDEyVXNQWDUrdHF1a1hiVjJoS2JVa1JUSTZjK0R4RGZsTWh4b3NDSWMvemdKaEhGVXRkanlsdldDa3B1TDQyZFdEZnBPbHVhcWxaMWhOQnROc0xmQkdScVVKbUlTdjlaNEZFZWt2Z2pXdHNiR3I4UWU1Mkk3aTlKZmdSWGdPUXZWN2JKTmF0K090dFkvUXd5a3VOd0g0akMxYjVaVXZacDcrdXEyRmt1cnM0bWdPaGRyVy9kOWpnVFE2N3BnS0RyOGhtL2s3bzlvN3M1MDZ5MkNlZVkzUHVPOEZtbmJ6dmJ0WVBMYTMvVy9yWkZKWjdHZ0lNMzY3WHdQWWpnTXByL0VNZzRYb0RtNUd1bDFnSHM3L0NJU2FiM3p1Z2swNE1hQTBJVkVVdnJtM3VwV0RSOERjS2hsdFFNRnlOZ2lFVEkvZ25lNjJrVGQ2YzJkYms1V0hEcng3WkpJc3FjS1l2U3VKUmxJYWlvQnRGd1Rzb0N2NlVvZ1RBZGNnSkxjZ0p6eUluUElLYzhLR1VvaTkwd2ZTYVJ1d0FvbytvcWJxUjJ1Y1JwZzQvY2ozQlRKajlLZVp4NEdmam1tQVg1VG1XWUNsVE1OeW16d1FseFdtRFI5VisvaU9jSlBaZm1CNkhsK0FHalkwbzR0UnQxdmNIdTRiRmFuMnl6K0FiUmpOYjhvMVNUamRHR3FOT3hYNFNJVFZweUNQWEk4eWhpVDNCQWlZZTN6SVYrS2hrNWlSQ1BtalQrM1NsZXArdUJ2bmc1REdMUWZFWEE4RUE5bmJyblhvQXNYd3hlNyt1SXRBSWZvMzY4VWczUW1CcSt3am9iZlF4K2dSOWlqNURuNk12d0pmZ1Bla3JVdndhcVNLK1ZkN0Q3K0QzekE4ZTJ2aDJJekQ5dGVueFZENkpDNDUxMnh0OGxqNUhmVDlQZnhwK29zNEh0QVZkd1l6S25LcStRc3p4ZXhvM3JHd0xjcmQyVmRRUU4xbVh4MVBjd0MxdTRzUGJ6Qk5FTHYyTGFMRGRVdFAyb2JReEs4YXpIb080VzNpRDNUNDlmV2VVMmVmUjNmNy95TEZZWm1EUVh2YzlLOWxhZ1VVQU1lTGVmeGFzQWpDSGZWZ0FaQjZJZFlzNTBYdTEzYnFMRjliMjRJOVpEMnNEYmkxNC96OGd5MWl4bHRqZ3ZPVUI1TG9BZ0JYWXphbEpnc2FNclIxdFhZZFJSbEdIOVJRZHNFKzZ4bVJnOHlJZW84b3hSdU1RQlNvUHVNT01ZTUxkczR4R0NKK0gyU01pNWFidXMvd0NWWTV0TkEwWG0weTl4R00wSnRBT3ExcGdLMEJkS0FmN0RLR3YwTWZveTlGL1pHbGFsTnZsd25sQ2NoZ3RSTDlsVzZBcjRLTitvU2RnSXhYcElKeUYyN2dPMk8vTkFsaDFWWGVOT3lQZDkvM1NJS0EvVkNrMzlZNEVQWWl1SGVNQkhKcFdrbTNRZUpFTFBFWUwwVzlnZ1pLYTl6R0h6djhiSTdESGUvNFliaGZlMkU5aW9POUpNMzIzYnVic1NrUXZpTXcrbjNRTkpVZTh0T3Ryenk1djJFYTY3QTJ4VlpUczR1OHkxampudTUzTkMza0ViaUUvWmpzaXVsT2oyMFE2OFU2WUVpbXR4a3V1QzN2TDhZWkxvMnNGRWFkUXh1dkc5bEUwZXQ2K2xrKzdNUUhvTjBQWWxzYVhiK3ZhTjN0cjF5NDJkVm1rZlNiVjV4aTNCYlYxdTExTTl3RDBsT3pMWG5ZQ1I5MHQ0d3Qrcml1b0tBMTl5dXdEMnBMQUp3UTdaM3krY0luaThrZzYxOG5VU0FUMk82VksvM1dCSWExaFQyZXc3RW9GU3JhTUlqK1RXRTArOTRyYUhBSndFVDkrWjdwbFhFanEzeERIM1FEZzVJR08rNUw4TDIrSi8raXd6eFBNeGdFaUJnQUkvaXlab0hBbU1QMC9lRTVrOXk2aU5lMWs2dzdXejR1Y3JxVHB4eVozQmVVSnYyUnlwM1hGVFBZZHlMN0pJd1I0Umtqek43YXpYaTJDSU1FMHBUWG9kWmM3SVNqZCtyTDRGSHhHRXkzQVJIVUF4MVYvTFp2aWpsOHdXVjJtMWZTQ2Yrc3djMFcwNk9xYTVtNlNLenl0Um5oUVZhZ002TWNoUmdrSk1YWUU4WWhCOXVtS29vVHBHUnFOa0s0Zng0T1crdSs0Q3JjR1lyZ1RaNXZtRzlUVWp0Zm5pcVlaVVdUNlVnMGVFM2hraVVHNW5CcGdqRjE0RFhibytEUVJiZnBWMTN6TXBsSUpDdWMrVkxKeEdnYXp4RndXSTNaTG5qNjVYNTAweEIwM29aME1MNGFTUDZHdlFYS2J1UE1yVXF2bWFRaDNVR1pyUlVaTmlZbzl0WFRSVTd4R2xkU3lwWTQ1YkFyTFVMTXp0QWI2NWltZElPYVJEWXBJVUY1QnNJbzdLUTYvVXpTd3RJMlNlZFMxazdRb0lYUFNjMEdURjR1eldoeEx4dndOeEY3aDlyMTJMTFlYSWQ5RkQ1c3JPL1MzMmJLZVd6WlBKcVgvQU0zUWgxcHVmU3Q3NmppUXZZRWwxbU0wZU03VE1rd0FBM3Q5U0RtNzZaYVhLTFo1NjV2cE8waXh2ZlF5Q0kyajVCT2hWL2syUGlWM3NSdDRLcUZsL21EdURuVXo2bTdWdjc4UlBiM0kxalBNWFZDcVZZaWYrRVRGSG5XM3JjaE1iNTFlMXV1VnB6TDBsZ0dUSUFVTWFSVUZjS0FEc0lFRTBRSVptS2Z5RFVsRlpZY28yYTYvNDNRRENhWHNrY01HT0syczVLRnpxUHlpN3NqZko5UzhOVm9qajhvWDFNanV5ZkVFUUlDUGNXaW1BV2dqTEJ3a0pxME9KamlkSFp6MmlZM09aenNFa2RuckVObHluU05ZWWw1eWhES1hZZzhqMWJxVENBaHNuQzd5NUt0UUtKdFhsbUl5aFV1OE5MTEJCWml5dVFPVXlEYkpkRVVteURXWnJMOUNlYWFaWWhJSDdVUzB1SlhtZWJUSWlqWkJjckY4MDI4Nkp5ZXY3RXkxeEVRT3FzbVR3N25LdGRBVVplenlUZURsa3kzWEJHVVo0M0xLcGg3UUhLN3hxZUFRZXZ0b2NXUmxFdEpsQTAxUlpNcFJLVFZGWGVycHhWeEZ4YjY4bkY3anNxN0diZFUyMEJ1ZUlWSk93c2ZGcTRUUEJJVVNPTGk0Sk1yUVZ6OTlkWk1oYVBDNFdUc1l5Z0VuWnFzNG1yd1lLZHhldVBsWUtUTEpxRFMvVjRvNGhDbytEdk5RYi9RSSt2SG9yZWZnTVRQTW00WTV1MDc1UDZKSVhoSC9lMS95bndFQSkgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpO3VuaWNvZGUtcmFuZ2U6dSswMD8/LHUrMDEzMSx1KzAxNTItMDE1Myx1KzAyYmItMDJiYyx1KzAyYzYsdSswMmRhLHUrMDJkYyx1KzIwMDAtMjA2Zix1KzIwNzQsdSsyMGFjLHUrMjEyMix1KzIxOTEsdSsyMTkzLHUrMjIxMix1KzIyMTUsdStmZWZmLHUrZmZmZH1ib2R5LGh0bWx7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNH1odG1se2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1wYXJhZ3JhcGgscHtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS42O3RleHQtYWxpZ246anVzdGlmeX0ubW9uc3Rlci1oMSxoMXtmb250LXNpemU6M3JlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xNTttYXJnaW46NHJlbSAwIDEuNXJlbX0ubW9uc3Rlci1oMixoMntmb250LXNpemU6Mi41cmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjI7bWFyZ2luOjRyZW0gMCAxLjVyZW19Lm1vbnN0ZXItaDMsaDN7Zm9udC1zaXplOjJyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMjU7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfS5tb25zdGVyLWg0LGg0e2ZvbnQtc2l6ZToxLjVyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMzttYXJnaW46NHJlbSAwIDEuMjVyZW19Lm1vbnN0ZXItaDUsaDV7Zm9udC1zaXplOjEuNHJlbTtmb250LXdlaWdodDpib2xkZXI7bGluZS1oZWlnaHQ6MS4zO21hcmdpbjo0cmVtIDAgMS4yNXJlbX0ubW9uc3Rlci1oNixoNntmb250LXNpemU6MS4zcmVtO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxLjM7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfXAraDF7bWFyZ2luLXRvcDozLjc1cmVtfXAraDJ7bWFyZ2luLXRvcDozcmVtfXAraDN7bWFyZ2luLXRvcDoyLjI1cmVtfXAraDR7bWFyZ2luLXRvcDoxLjVyZW19cCtoNXttYXJnaW4tdG9wOi43NXJlbX1kaXYraDEsZGl2K2gyLGRpditoMyxkaXYraDQsZGl2K2g1LGRpditoNixwK2g2e21hcmdpbi10b3A6MH0uZGVjb3tiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTEpIDAsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0yKSA1MCUsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0zKSAxMDAlKTstd2Via2l0LWJhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtc2l6ZTpjb3Zlcjtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKTt0ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnR9OjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfTo6c2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9a2Jke2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2JvcmRlci1yYWRpdXM6MTByZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7cGFkZGluZzouMjVlbSAuNmVtO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH1kZXRhaWxze21hcmdpbi1ib3R0b206MXJlbX1zdW1tYXJ5e2N1cnNvcjpwb2ludGVyO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczpcXFwidG51bVxcXCI7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4xZW07cGFkZGluZzouNnJlbSAxcmVtfWRldGFpbHNbb3Blbl17cGFkZGluZzouNnJlbSAxcmVtIC43NXJlbX1kZXRhaWxzW29wZW5dIHN1bW1hcnl7bWFyZ2luLWJvdHRvbTouNXJlbTtwYWRkaW5nOjB9Lm1vbnN0ZXItbm8tdXNlci1zZWxlY3R7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfUBrZXlmcmFtZXMgZGV0YWlscy1zaG93ezAle29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtLjVlbSl9fWRldGFpbHNbb3Blbl0+Om5vdChzdW1tYXJ5KXthbmltYXRpb246ZGV0YWlscy1zaG93IC4xNXMgZWFzZS1pbi1vdXR9ZGV0YWlsc1tvcGVuXT46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9Lm1vbm9zcGFjZXtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5LW1vbm9zcGFjZSl9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2hlaWdodDoxMDAlfWJ1dHRvbnt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1idXR0b25de2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOm5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbjt0cmFuc2l0aW9uOndpZHRoIDEwcyBlYXNlLWluLW91dH1kaXZbZGF0YS1tb25zdGVyLXJvbGU9bGFiZWxde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7Z2FwOi40cmVtO2p1c3RpZnktY29udGVudDpjZW50ZXI7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9c3RhdGVde2FsaWduLWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1zZWxmOnN0cmV0Y2g7ZGlzcGxheTpmbGV4O3RyYW5zaXRpb246d2lkdGggMTJzIGVhc2UtaW4tb3V0fVtkYXRhLW1vbnN0ZXItcm9sZT1zdGF0ZV0+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+IG1heFdpZHRoKSB7XG5cdFx0XHRcdFx0XHRcdFx0YXZhaWxhYmxlV2lkdGggPSBtYXhXaWR0aDtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmIChhdmFpbGFibGVIZWlnaHQgPiBtYXhIZWlnaHQpIHtcblx0XHRcdFx0XHRcdFx0XHRhdmFpbGFibGVIZWlnaHQgPSBtYXhIZWlnaHQ7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRPYmplY3QuYXNzaWduKGVsZW1lbnRzLmZsb2F0aW5nLnN0eWxlLCB7XG5cdFx0XHRcdFx0XHRcdFx0Ym94U2l6aW5nOiBcImJvcmRlci1ib3hcIixcblx0XHRcdFx0XHRcdFx0XHRtYXhXaWR0aDogYCR7YXZhaWxhYmxlV2lkdGh9cHhgLFxuXHRcdFx0XHRcdFx0XHRcdG1heEhlaWdodDogYCR7YXZhaWxhYmxlSGVpZ2h0fXB4YCxcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwib2Zmc2V0XCI6XG5cdFx0XHRcdFx0Y29uc3QgbyA9IGt2Py5zaGlmdCgpO1xuXHRcdFx0XHRcdGNvbmZpZ1tcIm1pZGRsZXdhcmVcIl1ba2V5XSA9IG9mZnNldChwYXJzZUludChvKSB8fCAxMCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJoaWRlXCI6XG5cdFx0XHRcdFx0Y29uZmlnW1wibWlkZGxld2FyZVwiXVtrZXldID0gaGlkZSgpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihgVW5rbm93biBmdW5jdGlvbjogJHtmbn1gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRwb3BwZXJFbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KFwidmlzaWJpbGl0eVwiKTtcblx0XHRwb3BwZXJFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG5cblx0XHRhdXRvVXBkYXRlKGNvbnRyb2xFbGVtZW50LCBwb3BwZXJFbGVtZW50LCAoKSA9PiB7XG5cdFx0XHRjb21wdXRlUG9zaXRpb24oY29udHJvbEVsZW1lbnQsIHBvcHBlckVsZW1lbnQsIGNvbmZpZykudGhlbihcblx0XHRcdFx0KHsgeCwgeSwgcGxhY2VtZW50LCBtaWRkbGV3YXJlRGF0YSB9KSA9PiB7XG5cdFx0XHRcdFx0T2JqZWN0LmFzc2lnbihwb3BwZXJFbGVtZW50LnN0eWxlLCB7XG5cdFx0XHRcdFx0XHR0b3A6IFwiMFwiLFxuXHRcdFx0XHRcdFx0bGVmdDogXCIwXCIsXG5cdFx0XHRcdFx0XHR0cmFuc2Zvcm06IGB0cmFuc2xhdGUoJHtyb3VuZEJ5RFBSKHgpfXB4LCR7cm91bmRCeURQUih5KX1weClgLFxuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0aWYgKG1pZGRsZXdhcmVEYXRhLmFycm93KSB7XG5cdFx0XHRcdFx0XHRjb25zdCBzaWRlID0gcGxhY2VtZW50LnNwbGl0KFwiLVwiKVswXTtcblxuXHRcdFx0XHRcdFx0Y29uc3Qgc3RhdGljU2lkZSA9IHtcblx0XHRcdFx0XHRcdFx0dG9wOiBcImJvdHRvbVwiLFxuXHRcdFx0XHRcdFx0XHRyaWdodDogXCJsZWZ0XCIsXG5cdFx0XHRcdFx0XHRcdGJvdHRvbTogXCJ0b3BcIixcblx0XHRcdFx0XHRcdFx0bGVmdDogXCJyaWdodFwiLFxuXHRcdFx0XHRcdFx0fVtzaWRlXTtcblxuXHRcdFx0XHRcdFx0Ly8gbW9uc3Rlci1ib3JkZXItd2lkdGggPSArIDQgKDIqMikgKHNob3VsZCBjb21lIGZyb20gY3NzKVxuXHRcdFx0XHRcdFx0Y29uc3QgYXJyb3dMZW4gPSBhcnJvd0VsZW1lbnQub2Zmc2V0V2lkdGggKyA0O1xuXG5cdFx0XHRcdFx0XHRjb25zdCBib3JkZXJTdHlsZSA9IHtcblx0XHRcdFx0XHRcdFx0Ym9yZGVyTGVmdDogXCJ0cmFuc3BhcmVudFwiLFxuXHRcdFx0XHRcdFx0XHRib3JkZXJSaWdodDogXCJ0cmFuc3BhcmVudFwiLFxuXHRcdFx0XHRcdFx0XHRib3JkZXJCb3R0b206IFwidHJhbnNwYXJlbnRcIixcblx0XHRcdFx0XHRcdFx0Ym9yZGVyVG9wOiBcInRyYW5zcGFyZW50XCIsXG5cdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRjb25zdCBkZWZhdWx0Qm9yZGVyID1cblx0XHRcdFx0XHRcdFx0XCJ2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkgdmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KVwiO1xuXG5cdFx0XHRcdFx0XHRzd2l0Y2ggKHNpZGUpIHtcblx0XHRcdFx0XHRcdFx0Y2FzZSBcInRvcFwiOlxuXHRcdFx0XHRcdFx0XHRcdGJvcmRlclN0eWxlLmJvcmRlclJpZ2h0ID0gZGVmYXVsdEJvcmRlcjtcblx0XHRcdFx0XHRcdFx0XHRib3JkZXJTdHlsZS5ib3JkZXJCb3R0b20gPSBkZWZhdWx0Qm9yZGVyO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJib3R0b21cIjpcblx0XHRcdFx0XHRcdFx0XHRib3JkZXJTdHlsZS5ib3JkZXJUb3AgPSBkZWZhdWx0Qm9yZGVyO1xuXHRcdFx0XHRcdFx0XHRcdGJvcmRlclN0eWxlLmJvcmRlckxlZnQgPSBkZWZhdWx0Qm9yZGVyO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJsZWZ0XCI6XG5cdFx0XHRcdFx0XHRcdFx0Ym9yZGVyU3R5bGUuYm9yZGVyUmlnaHQgPSBkZWZhdWx0Qm9yZGVyO1xuXHRcdFx0XHRcdFx0XHRcdGJvcmRlclN0eWxlLmJvcmRlclRvcCA9IGRlZmF1bHRCb3JkZXI7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRcdFx0Y2FzZSBcInJpZ2h0XCI6XG5cdFx0XHRcdFx0XHRcdFx0Ym9yZGVyU3R5bGUuYm9yZGVyQm90dG9tID0gZGVmYXVsdEJvcmRlcjtcblx0XHRcdFx0XHRcdFx0XHRib3JkZXJTdHlsZS5ib3JkZXJMZWZ0ID0gZGVmYXVsdEJvcmRlcjtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Y29uc3QgeyB4LCB5IH0gPSBtaWRkbGV3YXJlRGF0YS5hcnJvdztcblxuXHRcdFx0XHRcdFx0T2JqZWN0LmFzc2lnbihcblx0XHRcdFx0XHRcdFx0YXJyb3dFbGVtZW50LnN0eWxlLFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0bGVmdDogeCAhPSBudWxsID8gYCR7eH1weGAgOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdHRvcDogeSAhPSBudWxsID8gYCR7eX1weGAgOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdC8vIEVuc3VyZSB0aGUgc3RhdGljIHNpZGUgZ2V0cyB1bnNldCB3aGVuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gZmxpcHBpbmcgdG8gb3RoZXIgcGxhY2VtZW50cycgYXhlcy5cblx0XHRcdFx0XHRcdFx0XHRyaWdodDogXCJcIixcblx0XHRcdFx0XHRcdFx0XHRib3R0b206IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0W3N0YXRpY1NpZGVdOiBgJHstYXJyb3dMZW4gLyAyfXB4YCxcblx0XHRcdFx0XHRcdFx0XHR0cmFuc2Zvcm06IFwicm90YXRlKDQ1ZGVnKVwiLFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRib3JkZXJTdHlsZSxcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0KTtcblx0XHR9KTtcblx0fSkucnVuKCk7XG59XG5cbmZ1bmN0aW9uIHJvdW5kQnlEUFIodmFsdWUpIHtcblx0Y29uc3QgZHByID0gd2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMTtcblx0cmV0dXJuIE1hdGgucm91bmQodmFsdWUgKiBkcHIpIC8gZHByO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywgMjAyNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IFNlbGVjdFN0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IFNlbGVjdFN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRTZWxlY3RTdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIHNlbGVjdCB7IFxuLmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmlubGluZXtkaXNwbGF5OmlubGluZX0uaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5ncmlke2Rpc3BsYXk6Z3JpZH0uaW5saW5lLWdyaWR7ZGlzcGxheTppbmxpbmUtZ3JpZH0uZmxleHtkaXNwbGF5OmZsZXh9LmlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXh9LmhpZGRlbiwuaGlkZSwubm9uZXtkaXNwbGF5Om5vbmV9LnZpc2libGV7dmlzaWJpbGl0eTp2aXNpYmxlfS5pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW59Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMSwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0yLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci0we2JvcmRlci1yYWRpdXM6MDtib3JkZXItc3R5bGU6bm9uZTtib3JkZXItd2lkdGg6MH0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMiwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMSwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMiwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMywubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXS5mbGV4e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fTpob3N0e2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmJsb2NrfS5tb25zdGVyLWJhZGdlLXByaW1hcnl7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLXByaW1hcnksLm1vbnN0ZXItYmFkZ2UtcHJpbWFyeS1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1wcmltYXJ5LXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2Utc2Vjb25kYXJ5e3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS1zZWNvbmRhcnksLm1vbnN0ZXItYmFkZ2Utc2Vjb25kYXJ5LXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1zZWNvbmRhcnktcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS10ZXJ0aWFyeXtwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2UtdGVydGlhcnksLm1vbnN0ZXItYmFkZ2UtdGVydGlhcnktcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS10ZXJ0aWFyeS1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLWRlc3RydWN0aXZle3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS1kZXN0cnVjdGl2ZSwubW9uc3Rlci1iYWRnZS1kZXN0cnVjdGl2ZS1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTEpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLWRlc3RydWN0aXZlLXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2Utc3VjY2Vzc3twYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2Utc3VjY2VzcywubW9uc3Rlci1iYWRnZS1zdWNjZXNzLXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMSk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTEpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLXN1Y2Nlc3MtcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS13YXJuaW5ne3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS13YXJuaW5nLC5tb25zdGVyLWJhZGdlLXdhcm5pbmctcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMSk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2Utd2FybmluZy1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLWVycm9ye3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS1lcnJvciwubW9uc3Rlci1iYWRnZS1lcnJvci1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTEpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLWVycm9yLXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPXBvcHBlcl17YWxpZ24tY29udGVudDpjZW50ZXI7YmFja2dyb3VuZDp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7ZGlzcGxheTpub25lO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2xlZnQ6MDtwYWRkaW5nOjEuMWVtO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3dpZHRoOi1tb3otbWF4LWNvbnRlbnQ7d2lkdGg6bWF4LWNvbnRlbnQ7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtbW9kYWwpfWRpdltkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXJdIGRpdltkYXRhLW1vbnN0ZXItcm9sZT1hcnJvd117YmFja2dyb3VuZDp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7aGVpZ2h0OmNhbGMobWF4KHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpLCAtMSAqIHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpKSoyKTtwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOmNhbGMobWF4KHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpLCAtMSAqIHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpKSoyKTt6LWluZGV4Oi0xfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250YWluZXJdey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lO2FwcGVhcmFuY2U6bm9uZTtmbGV4OjQgMCA5MCU7bWluLWhlaWdodDoxLjRlbTtvdmVyZmxvdzphdXRvO3Njcm9sbGJhci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO3Njcm9sbGJhci13aWR0aDp0aGluO3dpZHRoOjEwMCV9LmQtbm9uZXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fWRpdltkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtkaXNwbGF5OmZsZXg7aGVpZ2h0OjEwMCU7cG9zaXRpb246cmVsYXRpdmV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRhaW5lcl0ub3Blbnstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBkPSdNNy42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBsNiA2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA1LjcwN2wtNS42NDYgNS42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDh6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGQ9J003LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMGw2IDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDUuNzA3bC01LjY0NiA1LjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOHonLyUzRSUzQy9zdmclM0VcXFwiKX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udGFpbmVyXS5jbGVhcixbZGF0YS1tb25zdGVyLXJvbGU9Y29udGFpbmVyXS5vcGVue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXIgY2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyIGNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6LjhlbTttYXNrLXNpemU6LjhlbX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udGFpbmVyXS5jbGVhcnstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXthY2NlbnQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItY29sb3IpOy1vLWJvcmRlci1pbWFnZTppbml0aWFsO2JvcmRlci1pbWFnZTppbml0aWFsO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci13aWR0aCk7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6MTAwJTttYXJnaW46MDtvdXRsaW5lOm5vbmU7cGFkZGluZzouNHJlbSAuNnJlbTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOmZpbGwtYXZhaWxhYmxlfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6bGlnaHQpe1tkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF06Zm9jdXN7b3V0bGluZToxcHggZGFzaGVkIHZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQpO291dGxpbmUtb2Zmc2V0OjJweH19W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdOmhvdmVye2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTIpO3RyYW5zaXRpb246YmFja2dyb3VuZCAuOHMsY29sb3IgLjI1cyAuMDgzMzMzMzMzM3N9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPXNlbGVjdGlvbl17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOndyYXA7Z2FwOjVweDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydDttYXJnaW46NXB4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb24tY29udHJvbF17bWFyZ2luLXJpZ2h0OjhweH1bZGF0YS1tb25zdGVyLXJvbGU9YmFkZ2Vde2Rpc3BsYXk6aW5saW5lLWZsZXh9W2RhdGEtbW9uc3Rlci1yb2xlPWJhZGdlLWxhYmVsXXthbGlnbi1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztnYXA6N3B4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufVtkYXRhLW1vbnN0ZXItcm9sZT1maWx0ZXJdLFtkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXItZmlsdGVyXXtkaXNwbGF5OmZsZXg7ZmxleC1ncm93OjIwMDtvcmRlcjo5OTk5OTk5OTt2aXNpYmlsaXR5OmhpZGRlbn1bZGF0YS1tb25zdGVyLXJvbGU9ZmlsdGVyXS5hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMik7Ym9yZGVyOjA7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKTtib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpO21pbi13aWR0aDo0MCU7b3V0bGluZTpub25lO3Zpc2liaWxpdHk6dmlzaWJsZX0uYWN0aXZlW2RhdGEtbW9uc3Rlci1yb2xlPWZpbHRlcl1bbmFtZT1wb3BwZXItZmlsdGVyXXtoZWlnaHQ6MS41ZW07bWFyZ2luOjIuNWVtO3BhZGRpbmc6MnB4O3dpZHRoOmNhbGMoMTAwJSAtIHZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSoyKX0ub3B0aW9uLWZpbHRlci1jb250cm9se2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTtkaXNwbGF5OmZsZXg7aGVpZ2h0OjIuNWVtO21hcmdpbjotMS4xZW0gLTEuMWVtIC4zZW19W2RhdGEtbW9uc3Rlci1yb2xlPXJlbW92ZS1iYWRnZV17YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMik7aGVpZ2h0OjE2cHg7bWFyZ2luLWxlZnQ6NXB4Oy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNNC42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCA3LjI5M2wyLjY0Ni0yLjY0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsMi42NDcgMi42NDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC0yLjY0NiAyLjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4IDQuNjQ2IDUuMzU0YS41LjUgMCAwIDEgMC0uNzA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNNC42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCA3LjI5M2wyLjY0Ni0yLjY0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsMi42NDcgMi42NDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC0yLjY0NiAyLjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4IDQuNjQ2IDUuMzU0YS41LjUgMCAwIDEgMC0uNzA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7b3JkZXI6Mn1bZGF0YS1tb25zdGVyLXJvbGU9cmVtb3ZlLWJhZGdlXSxbZGF0YS1tb25zdGVyLXJvbGU9c3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNdey13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXIgY2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyIGNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6LjhlbTttYXNrLXNpemU6LjhlbTttaW4taGVpZ2h0OjE2cHg7d2lkdGg6MTZweH1bZGF0YS1tb25zdGVyLXJvbGU9c3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNdey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lO2FwcGVhcmFuY2U6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBkPSdNMS42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCAxMC4yOTNsNS42NDYtNS42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOGwtNiA2YS41LjUgMCAwIDEtLjcwOCAwbC02LTZhLjUuNSAwIDAgMSAwLS43MDgnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgZD0nTTEuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggMTAuMjkzbDUuNjQ2LTUuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhsLTYgNmEuNS41IDAgMCAxLS43MDggMGwtNi02YS41LjUgMCAwIDEgMC0uNzA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIil9Lm9wZW5bZGF0YS1tb25zdGVyLXJvbGU9c3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNde2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGQ9J003LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMGw2IDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDUuNzA3bC01LjY0NiA1LjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOHonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgZD0nTTcuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwbDYgNmEuNS41IDAgMCAxLS43MDguNzA4TDggNS43MDdsLTUuNjQ2IDUuNjQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4eicvJTNFJTNDL3N2ZyUzRVxcXCIpfS5lbXB0eVtkYXRhLW1vbnN0ZXItcm9sZT1zdGF0dXMtb3ItcmVtb3ZlLWJhZGdlc117YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIGNsYXNzPSdiaSBiaS1kYXNoLWNpcmNsZScgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNCA4YS41LjUgMCAwIDEgLjUtLjVoN2EuNS41IDAgMCAxIDAgMWgtN0EuNS41IDAgMCAxIDQgOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2JpIGJpLWRhc2gtY2lyY2xlJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J000IDhhLjUuNSAwIDAgMSAuNS0uNWg3YS41LjUgMCAwIDEgMCAxaC03QS41LjUgMCAwIDEgNCA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIil9LmNsZWFyW2RhdGEtbW9uc3Rlci1yb2xlPXN0YXR1cy1vci1yZW1vdmUtYmFkZ2VzXXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpfS5lcnJvcltkYXRhLW1vbnN0ZXItcm9sZT1zdGF0dXMtb3ItcmVtb3ZlLWJhZGdlc117YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTEpOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J003LjAwMiAxMWExIDEgMCAxIDEgMiAwIDEgMSAwIDAgMS0yIDBNNy4xIDQuOTk1YS45MDUuOTA1IDAgMSAxIDEuOCAwbC0uMzUgMy41MDdhLjU1Mi41NTIgMCAwIDEtMS4xIDB6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J003LjAwMiAxMWExIDEgMCAxIDEgMiAwIDEgMSAwIDAgMS0yIDBNNy4xIDQuOTk1YS45MDUuOTA1IDAgMSAxIDEuOCAwbC0uMzUgMy41MDdhLjU1Mi41NTIgMCAwIDEtMS4xIDB6Jy8lM0UlM0Mvc3ZnJTNFXFxcIil9LmxvYWRpbmdbZGF0YS1tb25zdGVyLXJvbGU9c3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNde2FuaW1hdGlvbi1kdXJhdGlvbjoxczthbmltYXRpb24taXRlcmF0aW9uLWNvdW50OmluZmluaXRlO2FuaW1hdGlvbi1uYW1lOmFjdGl2aXR5O2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAsMCwuMiwxKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2FjdGl2aXR5JyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDY2lyY2xlIGN4PSc4JyBjeT0nOCcgcj0nOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2FjdGl2aXR5JyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDY2lyY2xlIGN4PSc4JyBjeT0nOCcgcj0nOCcvJTNFJTNDL3N2ZyUzRVxcXCIpfUBrZXlmcmFtZXMgYWN0aXZpdHl7MCV7dHJhbnNmb3JtOnNjYWxlKDEpfTUwJXt0cmFuc2Zvcm06c2NhbGUoLjEpfXRve3RyYW5zZm9ybTpzY2FsZSgxKX19W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbnNde2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXgtZ3JvdzoxO3Njcm9sbGJhci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO3Njcm9sbGJhci13aWR0aDp0aGlufVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25de2FsaWduLWl0ZW1zOmNlbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O3BhZGRpbmc6NnB4IDVweH1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXSBsYWJlbHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydDt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dIGxhYmVsPmRpdnthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtvdXRsaW5lOm5vbmU7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9bm8tb3B0aW9uc117YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNCk7Ym9yZGVyLXJhZGl1czouMmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy00KTttYXJnaW46MS4xZW0gMS4xZW0gMDtwYWRkaW5nOi4zZW0gLjhlbX0uc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpfVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci1maWx0ZXJlZD10cnVlXSxbZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXVtkYXRhLW1vbnN0ZXItdmlzaWJpbGl0eT1oaWRkZW5de2Rpc3BsYXk6bm9uZX1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXVtkYXRhLW1vbnN0ZXItZm9jdXNlZD10cnVlXXtvdXRsaW5lOjFweCBkYXNoZWQgdmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMik7b3V0bGluZS1vZmZzZXQ6LTJweH1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXT5pbnB1dDpmb2N1cyxbZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXT5sYWJlbDpmb2N1c3tvdXRsaW5lOm5vbmV9IFxufWAsXG5cdFx0MCxcblx0KTtcbn0gY2F0Y2ggKGUpIHtcblx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0ZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKSxcblx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdGUgKyBcIlwiLFxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGJ1aWxkTWFwIH0gZnJvbSBcIi4uLy4uL2RhdGEvYnVpbGRtYXAubWpzXCI7XG5pbXBvcnQgeyBEZWFkTWFuc1N3aXRjaCB9IGZyb20gXCIuLi8uLi91dGlsL2RlYWRtYW5zc3dpdGNoLm1qc1wiO1xuaW1wb3J0IHsgcG9zaXRpb25Qb3BwZXIgfSBmcm9tIFwiLi91dGlsL2Zsb2F0aW5nLXVpLm1qc1wiO1xuaW1wb3J0IHtcblx0YWRkQXR0cmlidXRlVG9rZW4sXG5cdGZpbmRDbG9zZXN0QnlBdHRyaWJ1dGUsXG5cdHJlbW92ZUF0dHJpYnV0ZVRva2VuLFxufSBmcm9tIFwiLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge1xuXHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRBVFRSSUJVVEVfUFJFRklYLFxuXHRBVFRSSUJVVEVfUk9MRSxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBDdXN0b21Db250cm9sIH0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21jb250cm9sLm1qc1wiO1xuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdGdldFNsb3R0ZWRFbGVtZW50cyxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQge1xuXHRmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudCxcblx0ZmlyZUN1c3RvbUV2ZW50LFxuXHRmaXJlRXZlbnQsXG59IGZyb20gXCIuLi8uLi9kb20vZXZlbnRzLm1qc1wiO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnQgfSBmcm9tIFwiLi4vLi4vZG9tL3V0aWwubWpzXCI7XG5pbXBvcnQgeyBGb3JtYXR0ZXIgfSBmcm9tIFwiLi4vLi4vdGV4dC9mb3JtYXR0ZXIubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWwgfSBmcm9tIFwiLi4vLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgSUQgfSBmcm9tIFwiLi4vLi4vdHlwZXMvaWQubWpzXCI7XG5pbXBvcnQge1xuXHRpc0FycmF5LFxuXHRpc0Z1bmN0aW9uLFxuXHRpc0ludGVnZXIsXG5cdGlzSXRlcmFibGUsXG5cdGlzT2JqZWN0LFxuXHRpc1ByaW1pdGl2ZSxcblx0aXNTdHJpbmcsXG59IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IE9ic2VydmVyIH0gZnJvbSBcIi4uLy4uL3R5cGVzL29ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHsgUHJveHlPYnNlcnZlciB9IGZyb20gXCIuLi8uLi90eXBlcy9wcm94eW9ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVBcnJheSwgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBQcm9jZXNzaW5nIH0gZnJvbSBcIi4uLy4uL3V0aWwvcHJvY2Vzc2luZy5tanNcIjtcbmltcG9ydCB7IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSyB9IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IFNlbGVjdFN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L3NlbGVjdC5tanNcIjtcbmltcG9ydCB7XG5cdGdldERvY3VtZW50VHJhbnNsYXRpb25zLFxuXHRUcmFuc2xhdGlvbnMsXG59IGZyb20gXCIuLi8uLi9pMThuL3RyYW5zbGF0aW9ucy5tanNcIjtcblxuZXhwb3J0IHtcblx0U2VsZWN0LFxuXHRwb3BwZXJFbGVtZW50U3ltYm9sLFxuXHRnZXRTdW1tYXJ5VGVtcGxhdGUsXG5cdGdldFNlbGVjdGlvblRlbXBsYXRlLFxufTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3Qgbm9PcHRpb25zQXZhaWxhYmxlTWVzc2FnZSA9IFwiTm8gb3B0aW9ucyBhdmFpbGFibGUuXCI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IGNsaWNrVG9Mb2FkT3B0aW9uc01lc3NhZ2UgPSBcIkNsaWNrIHRvIGxvYWQgb3B0aW9ucy5cIjtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuY29uc3QgdGltZXJDYWxsYmFja1N5bWJvbCA9IFN5bWJvbChcInRpbWVyQ2FsbGJhY2tcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtTeW1ib2x9XG4gKi9cbmNvbnN0IGtleUZpbHRlckV2ZW50U3ltYm9sID0gU3ltYm9sKFwia2V5RmlsdGVyRXZlbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtTeW1ib2x9XG4gKi9cbmNvbnN0IGxhenlMb2FkRG9uZVN5bWJvbCA9IFN5bWJvbChcImxhenlMb2FkRG9uZVwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuY29uc3QgaXNMb2FkaW5nU3ltYm9sID0gU3ltYm9sKFwiaXNMb2FkaW5nXCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtTeW1ib2x9XG4gKi9cbmNvbnN0IGNsb3NlRXZlbnRIYW5kbGVyID0gU3ltYm9sKFwiY2xvc2VFdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuY29uc3QgY2xlYXJPcHRpb25FdmVudEhhbmRsZXIgPSBTeW1ib2woXCJjbGVhck9wdGlvbkV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7U3ltYm9sfVxuICovXG5jb25zdCByZXNpemVPYnNlcnZlclN5bWJvbCA9IFN5bWJvbChcInJlc2l6ZU9ic2VydmVyXCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtTeW1ib2x9XG4gKi9cbmNvbnN0IGtleUV2ZW50SGFuZGxlciA9IFN5bWJvbChcImtleUV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7U3ltYm9sfVxuICovXG5jb25zdCBsYXN0RmV0Y2hlZERhdGFTeW1ib2wgPSBTeW1ib2woXCJsYXN0RmV0Y2hlZERhdGFcIik7XG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtTeW1ib2x9XG4gKi9cbmNvbnN0IGlucHV0RXZlbnRIYW5kbGVyID0gU3ltYm9sKFwiaW5wdXRFdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuY29uc3QgY2hhbmdlRXZlbnRIYW5kbGVyID0gU3ltYm9sKFwiY2hhbmdlRXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtTeW1ib2x9XG4gKi9cbmNvbnN0IGNvbnRyb2xFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiY29udHJvbEVsZW1lbnRcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuY29uc3Qgc2VsZWN0aW9uRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcInNlbGVjdGlvbkVsZW1lbnRcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuY29uc3QgY29udGFpbmVyRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImNvbnRhaW5lckVsZW1lbnRcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuY29uc3QgcG9wcGVyRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcInBvcHBlckVsZW1lbnRcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuY29uc3QgaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImlubGluZUZpbHRlckVsZW1lbnRcIik7XG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtTeW1ib2x9XG4gKi9cbmNvbnN0IHBvcHBlckZpbHRlckVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJwb3BwZXJGaWx0ZXJFbGVtZW50XCIpO1xuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7U3ltYm9sfVxuICovXG5jb25zdCBwb3BwZXJGaWx0ZXJDb250YWluZXJFbGVtZW50U3ltYm9sID0gU3ltYm9sKFxuXHRcInBvcHBlckZpbHRlckNvbnRhaW5lckVsZW1lbnRcIixcbik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuY29uc3Qgb3B0aW9uc0VsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJvcHRpb25zRWxlbWVudFwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7U3ltYm9sfVxuICovXG5jb25zdCBub09wdGlvbnNBdmFpbGFibGVFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwibm9PcHRpb25zQXZhaWxhYmxlRWxlbWVudFwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7U3ltYm9sfVxuICovXG5jb25zdCBzdGF0dXNPclJlbW92ZUJhZGdlc0VsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJzdGF0dXNPclJlbW92ZUJhZGdlc0VsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtTeW1ib2x9XG4gKi9cbmNvbnN0IGFyZU9wdGlvbnNBdmFpbGFibGVBbmRJbml0U3ltYm9sID0gU3ltYm9sKFwiQEBhcmVPcHRpb25zQXZhaWxhYmxlQW5kSW5pdFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgZGlzYWJsZWRSZXF1ZXN0TWFya2VyID0gU3ltYm9sKFwiQEBkaXNhYmxlZFJlcXVlc3RNYXJrZXJcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cbmNvbnN0IEZPQ1VTX0RJUkVDVElPTl9VUCA9IDE7XG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5jb25zdCBGT0NVU19ESVJFQ1RJT05fRE9XTiA9IDI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEZJTFRFUl9NT0RFX1JFTU9URSA9IFwicmVtb3RlXCI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEZJTFRFUl9NT0RFX09QVElPTlMgPSBcIm9wdGlvbnNcIjtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgRklMVEVSX01PREVfRElTQUJMRUQgPSBcImRpc2FibGVkXCI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEZJTFRFUl9QT1NJVElPTl9QT1BQRVIgPSBcInBvcHBlclwiO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgRklMVEVSX1BPU0lUSU9OX0lOTElORSA9IFwiaW5saW5lXCI7XG5cbi8qKlxuICogQSBzZWxlY3QgY29udHJvbCB0aGF0IGNhbiBiZSB1c2VkIHRvIHNlbGVjdCBvbmUgb3IgbW9yZSBvcHRpb25zIGZyb20gYSBsaXN0LlxuICpcbiAqIEBmcmFnbWVudHMgL2ZyYWdtZW50cy9jb21wb25lbnRzL2Zvcm0vc2VsZWN0L1xuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2Zvcm0vc2VsZWN0LXdpdGgtb3B0aW9ucyBTZWxlY3Qgd2l0aCBvcHRpb25zXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9mb3JtL3NlbGVjdC1tdWx0aXBsZSBNdWx0aXBsZSBzZWxlY3Rpb25cbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2Zvcm0vc2VsZWN0LWZpbHRlciBGaWx0ZXJcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2Zvcm0vc2VsZWN0LWZldGNoIEZldGNoIG9wdGlvbnNcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2Zvcm0vc2VsZWN0LWxhenkgTGF6eSBsb2FkXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9mb3JtL3NlbGVjdC1yZW1vdGUtZmlsdGVyIFJlbW90ZSBmaWx0ZXJcbiAqXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBiZWF1dGlmdWwgc2VsZWN0IGNvbnRyb2wgdGhhdCBjYW4gbWFrZSB5b3VyIGxpZmUgZWFzaWVyIGFuZCBhbHNvIGxvb2tzIGdvb2QuXG4gKiBAZmlyZXMgbW9uc3Rlci1jaGFuZ2VcbiAqIEBmaXJlcyBtb25zdGVyLWNoYW5nZWRcbiAqL1xuY2xhc3MgU2VsZWN0IGV4dGVuZHMgQ3VzdG9tQ29udHJvbCB7XG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHRpbml0T3B0aW9uT2JzZXJ2ZXIuY2FsbCh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7U3ltYm9sfVxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2Zvcm0vc2VsZWN0QEBpbnN0YW5jZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgY3VycmVudCBzZWxlY3Rpb24gb2YgdGhlIFNlbGVjdFxuXHQgKlxuXHQgKiBgYGBcblx0ICogZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21vbnN0ZXItc2VsZWN0Jyk7XG5cdCAqIGNvbnNvbGUubG9nKGUudmFsdWUpXG5cdCAqIC8vIFx1MjFBNiAxXG5cdCAqIC8vIFx1MjFBNiBbJzEnLCcyJ11cblx0ICogYGBgXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdGdldCB2YWx1ZSgpIHtcblx0XHRyZXR1cm4gY29udmVydFNlbGVjdGlvblRvVmFsdWUuY2FsbCh0aGlzLCB0aGlzLmdldE9wdGlvbihcInNlbGVjdGlvblwiKSk7XG5cdH1cblxuXHQvKipcblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxFbGVtZW50L2F0dGFjaEludGVybmFsc31cblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdHN0YXRpYyBnZXQgZm9ybUFzc29jaWF0ZWQoKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IHNlbGVjdGlvblxuXHQgKlxuXHQgKiBgYGBcblx0ICogZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21vbnN0ZXItc2VsZWN0Jyk7XG5cdCAqIGUudmFsdWU9MVxuXHQgKiBgYGBcblx0ICpcblx0ICogQHByb3BlcnR5IHtzdHJpbmd8YXJyYXl9IHZhbHVlXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG5cdCAqIEBmaXJlcyBtb25zdGVyLXNlbGVjdGVkIHRoaXMgZXZlbnQgaXMgZmlyZWQgd2hlbiB0aGUgc2VsZWN0aW9uIGlzIHNldFxuXHQgKi9cblx0c2V0IHZhbHVlKHZhbHVlKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gY29udmVydFZhbHVlVG9TZWxlY3Rpb24uY2FsbCh0aGlzLCB2YWx1ZSk7XG5cdFx0c2V0U2VsZWN0aW9uXG5cdFx0XHQuY2FsbCh0aGlzLCByZXN1bHQuc2VsZWN0aW9uKVxuXHRcdFx0LnRoZW4oKCkgPT4ge30pXG5cdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIEhUTUwgdGFnLCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRvZ2dsZUV2ZW50VHlwZT1jbGljayx0b3VjaCBMaXN0IG9mIGV2ZW50IHR5cGVzIHRvIGJlIG9ic2VydmVkIGZvciBvcGVuaW5nIHRoZSBkcm9wZG93blxuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IGRlbGVnYXRlc0ZvY3VzPWZhbHNlIGxvcmVtIFtzZWUgbW96aWxsYS5vcmddKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9TaGFkb3dSb290L2RlbGVnYXRlc0ZvY3VzKVxuXHQgKiBAcHJvcGVydHkge09iamVjdFtdfSBvcHRpb25zIFNlbGVjdGlvbiBvZiBrZXkgaWRlbnRpZmllciBwYWlycyBhdmFpbGFibGUgZm9yIHNlbGVjdGlvbiBhbmQgZGlzcGxheWVkIGluIHRoZSBkcm9wZG93bi5cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IG9wdGlvbnNbXS5sYWJlbFxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gb3B0aW9uc1tdLnZhbHVlXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBvcHRpb25zW10udmlzaWJpbGl0eSBoaWRkZW4gb3IgdmlzaWJsZVxuXHQgKiBAcHJvcGVydHkge0FycmF5fSBzZWxlY3Rpb24gU2VsZWN0ZWQgb3B0aW9uc1xuXHQgKiBAcHJvcGVydHkge0ludGVnZXJ9IHNob3dNYXhPcHRpb25zPTEwIE1heGltdW0gbnVtYmVyIG9mIHZpc2libGUgb3B0aW9ucyBiZWZvcmUgYSBzY3JvbGwgYmFyIHNob3VsZCBiZSBkaXNwbGF5ZWQuXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlPXJhZGlvIE11bHRpcGxlIChjaGVja2JveCkgb3Igc2luZ2xlIHNlbGVjdGlvbiAocmFkaW8pXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBuYW1lPShyYW5kb20gaWQpIE5hbWUgb2YgdGhlIGZvcm0gZmllbGRcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHVybCBMb2FkIG9wdGlvbnMgZnJvbSBzZXJ2ZXIgcGVyIHVybFxuXHQgKiBAcHJvcGVydHkge29iamVjdH0gbG9va3VwIExvYWQgb3B0aW9ucyBmcm9tIHNlcnZlciBwZXIgdXJsXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsb29rdXAudXJsPW51bGwgTG9hZCBvcHRpb25zIGZyb20gc2VydmVyIHBlciB1cmxcblx0ICogQHByb3BlcnR5IHtib29sZWFufSBsb29rdXAuZ3JvdXBpbmc9ZmFsc2UgTG9hZCBhbGwgc2VsZWN0ZWQgb3B0aW9ucyBmcm9tIHNlcnZlciBwZXIgdXJsIGF0IG9uY2UgKHRydWUpIG9yIG9uZSBieSBvbmUgKGZhbHNlKVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZmV0Y2ggRmV0Y2ggW3NlZSBVc2luZyBGZXRjaCBtb3ppbGxhLm9yZ10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0ZldGNoX0FQSS9Vc2luZ19GZXRjaClcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLnJlZGlyZWN0PWVycm9yXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5tZXRob2Q9R0VUXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5tb2RlPXNhbWUtb3JpZ2luXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5jcmVkZW50aWFscz1zYW1lLW9yaWdpblxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZmV0Y2guaGVhZGVycz17XCJhY2NlcHRcIjpcImFwcGxpY2F0aW9uL2pzb25cIn19XG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBsYWJlbHNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5jYW5ub3QtYmUtbG9hZGVkIGNhbm5vdCBiZSBsb2FkZWRcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5uby1vcHRpb25zLWF2YWlsYWJsZSBubyBvcHRpb25zIGF2YWlsYWJsZVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbGFiZWxzLnNlbGVjdC1hbi1vcHRpb24gc2VsZWN0IGFuIG9wdGlvblxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbGFiZWxzLm5vLW9wdGlvbiBubyBvcHRpb24gaW4gdGhlIGxpc3QsIG1heWJlIHlvdSBoYXZlIHRvIGNoYW5nZSB0aGUgZmlsdGVyXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmZWF0dXJlcyBMaXN0IHdpdGggZmVhdHVyZXNcblx0ICogQHByb3BlcnR5IHtCb29sZWFufSBmZWF0dXJlcy5jbGVhckFsbD10cnVlIERpc3BsYXkgb2YgYSBkZWxldGUgYnV0dG9uIHRvIGRlbGV0ZSB0aGUgZW50aXJlIHNlbGVjdGlvblxuXHQgKiBAcHJvcGVydHkge0Jvb2xlYW59IGZlYXR1cmVzLmNsZWFyPXRydWUgRGlzcGxheSBvZiBhIGRlbGV0ZSBrZXkgZm9yIGRlbGV0aW5nIHRoZSBzcGVjaWZpYyBzZWxlY3Rpb25cblx0ICogQHByb3BlcnR5IHtCb29sZWFufSBmZWF0dXJlcy5sYXp5TG9hZD1mYWxzZSBMb2FkIG9wdGlvbnMgd2hlbiBmaXJzdCBvcGVuaW5nIHRoZSBkcm9wZG93bi4gKEhpbnQ7IGxhenlsTG9hZCBpcyBub3Qgc3VwcG9ydGVkIHdpdGggcmVtb3RlIGZpbHRlcilcblx0ICogQHByb3BlcnR5IHtCb29sZWFufSBmZWF0dXJlcy5jbG9zZU9uU2VsZWN0PWZhbHNlIENsb3NlIHRoZSBkcm9wZG93biB3aGVuIGFuIG9wdGlvbiBpcyBzZWxlY3RlZCAoc2luY2UgMy41NC4wKVxuXHQgKiBAcHJvcGVydHkge0Jvb2xlYW59IGZlYXR1cmVzLmVtcHR5VmFsdWVJZk5vT3B0aW9ucz1mYWxzZSBJZiBubyBvcHRpb25zIGFyZSBhdmFpbGFibGUsIHRoZSBzZWxlY3Rpb24gaXMgc2V0IHRvIGFuIGVtcHR5IGFycmF5XG5cdCAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZmVhdHVyZXMuc3RvcmVGZXRjaGVkRGF0YT1mYWxzZSBTdG9yZSBmZXRjaGVkIGRhdGEgaW4gdGhlIG9iamVjdFxuXHQgKiBAcHJvcGVydHkge0Jvb2xlYW59IGZlYXR1cmVzLnVzZVN0cmljdFZhbHVlQ29tcGFyaXNvbj10cnVlIFVzZSBzdHJpY3QgdmFsdWUgY29tcGFyaXNvbiBmb3IgdGhlIHNlbGVjdGlvblxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gZmlsdGVyLmRlZmF1bHRWYWx1ZT1udWxsIERlZmF1bHQgZmlsdGVyIHZhbHVlLCBpZiB0aGUgZmlsdGVyIGlzIGVtcHR5LCBpZiB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBudWxsLCB0aGVuIG5vIHJlcXVlc3QgaXMgbWFkZVxuXHQgKiBAcHJvcGVydHkge0Jvb2xlYW59IGZpbHRlci5tb2RlPW9wdGlvbnMgRmlsdGVyIG1vZGUsIHZhbHVlczogb3B0aW9ucywgcmVtb3RlLCBkaXNhYmxlZCAoSGludDsgbGF6eWxMb2FkIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aCByZW1vdGUgZmlsdGVyLCBpZiB5b3UgdXNlIHJlbW90ZSBmaWx0ZXIsIHRoZSBsYXp5TG9hZCBpcyBkaXNhYmxlZClcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVNYXBwaW5nIE1hcHBpbmcgb2YgdGhlIHRlbXBsYXRlIHBsYWNlaG9sZGVyc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVNYXBwaW5nLnNlbGVjdGVkIFNlbGVjdGVkIFRlbXBsYXRlXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBwb3BwZXIgW1BvcHBlckpTIE9wdGlvbnNdKGh0dHBzOi8vcG9wcGVyLmpzLm9yZy9kb2NzL3YyLylcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHBvcHBlci5wbGFjZW1lbnQ9Ym90dG9tIFBvcHBlckpTIHBsYWNlbWVudFxuXHQgKiBAcHJvcGVydHkge09iamVjdFtdfSBtb2RpZmllcnM9e25hbWU6b2Zmc2V0fSBQb3BwZXJKUyBwbGFjZW1lbnRcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IG1hcHBpbmdcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IG1hcHBpbmcuc2VsZWN0b3I9KiBQYXRoIHRvIHNlbGVjdCB0aGUgYXBwcm9wcmlhdGUgZW50cmllc1xuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gbWFwcGluZy5sYWJlbFRlbXBsYXRlPVwiXCIgdGVtcGxhdGUgd2l0aCB0aGUgbGFiZWwgcGxhY2Vob2xkZXJzIGluIHRoZSBmb3JtICR7bmFtZX0sIHdoZXJlIG5hbWUgaXMgdGhlIGtleSAoKiopXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBtYXBwaW5nLnZhbHVlVGVtcGxhdGU9XCJcIiB0ZW1wbGF0ZSB3aXRoIHRoZSB2YWx1ZSBwbGFjZWhvbGRlcnMgaW4gdGhlIGZvcm0gJHtuYW1lfSwgd2hlcmUgbmFtZSBpcyB0aGUga2V5XG5cdCAqIEBwcm9wZXJ0eSB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm1+ZXhhbXBsZUZpbHRlckNhbGxiYWNrfHVuZGVmaW5lZH0gbWFwcGluZy5maWx0ZXIgRmlsdGVyaW5nIG9mIHZhbHVlcyB2aWEgYSBmdW5jdGlvblxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZm9ybWF0dGVyXG5cdCAqIEBwcm9wZXJ0eSB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm1+Zm9ybWF0dGVyU2VsZWN0aW9uQ2FsbGJhY2t8dW5kZWZpbmVkfSBmb3JtYXR0ZXIuc2VsZWN0aW9uIGZvcm1hdCBzZWxlY3Rpb24gbGFiZWxcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbihcblx0XHRcdHt9LFxuXHRcdFx0c3VwZXIuZGVmYXVsdHMsXG5cdFx0XHR7XG5cdFx0XHRcdHRvZ2dsZUV2ZW50VHlwZTogW1wiY2xpY2tcIiwgXCJ0b3VjaFwiXSxcblx0XHRcdFx0ZGVsZWdhdGVzRm9jdXM6IGZhbHNlLFxuXHRcdFx0XHRvcHRpb25zOiBbXSxcblx0XHRcdFx0c2VsZWN0aW9uOiBbXSxcblx0XHRcdFx0c2hvd01heE9wdGlvbnM6IDEwLFxuXHRcdFx0XHR0eXBlOiBcInJhZGlvXCIsXG5cdFx0XHRcdG5hbWU6IG5ldyBJRChcInNcIikudG9TdHJpbmcoKSxcblx0XHRcdFx0ZmVhdHVyZXM6IHtcblx0XHRcdFx0XHRjbGVhckFsbDogdHJ1ZSxcblx0XHRcdFx0XHRjbGVhcjogdHJ1ZSxcblx0XHRcdFx0XHRsYXp5TG9hZDogZmFsc2UsXG5cdFx0XHRcdFx0Y2xvc2VPblNlbGVjdDogZmFsc2UsXG5cdFx0XHRcdFx0ZW1wdHlWYWx1ZUlmTm9PcHRpb25zOiBmYWxzZSxcblx0XHRcdFx0XHRzdG9yZUZldGNoZWREYXRhOiBmYWxzZSxcblx0XHRcdFx0XHR1c2VTdHJpY3RWYWx1ZUNvbXBhcmlzb246IGZhbHNlLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR1cmw6IG51bGwsXG5cdFx0XHRcdGxvb2t1cDoge1xuXHRcdFx0XHRcdHVybDogbnVsbCxcblx0XHRcdFx0XHRncm91cGluZzogZmFsc2UsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGxhYmVsczoge1xuXHRcdFx0XHRcdFwiY2Fubm90LWJlLWxvYWRlZFwiOiBcIkNhbm5vdCBiZSBsb2FkZWRcIixcblx0XHRcdFx0XHRcIm5vLW9wdGlvbnMtYXZhaWxhYmxlXCI6IG5vT3B0aW9uc0F2YWlsYWJsZU1lc3NhZ2UsXG5cdFx0XHRcdFx0XCJjbGljay10by1sb2FkLW9wdGlvbnNcIjogY2xpY2tUb0xvYWRPcHRpb25zTWVzc2FnZSxcblx0XHRcdFx0XHRcInNlbGVjdC1hbi1vcHRpb25cIjogXCJTZWxlY3QgYW4gb3B0aW9uXCIsXG5cdFx0XHRcdFx0XCJzdW1tYXJ5LXRleHRcIjoge1xuXHRcdFx0XHRcdFx0emVybzogXCJObyBlbnRyaWVzIHdlcmUgc2VsZWN0ZWRcIixcblx0XHRcdFx0XHRcdG9uZTogJzxzcGFuIGNsYXNzPVwibW9uc3Rlci1iYWRnZS1wcmltYXJ5LXBpbGxcIj4xPC9zcGFuPiBlbnRyeSB3YXMgc2VsZWN0ZWQnLFxuXHRcdFx0XHRcdFx0b3RoZXI6XG5cdFx0XHRcdFx0XHRcdCc8c3BhbiBjbGFzcz1cIm1vbnN0ZXItYmFkZ2UtcHJpbWFyeS1waWxsXCI+JHtjb3VudH08L3NwYW4+IGVudHJpZXMgd2VyZSBzZWxlY3RlZCcsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcIm5vLW9wdGlvbnNcIjpcblx0XHRcdFx0XHRcdFwiVW5mb3J0dW5hdGVseSwgdGhlcmUgYXJlIG5vIG9wdGlvbnMgYXZhaWxhYmxlIGluIHRoZSBsaXN0LlwiLFxuXHRcdFx0XHRcdFwibm8tb3B0aW9ucy1mb3VuZFwiOlxuXHRcdFx0XHRcdFx0XCJObyBvcHRpb25zIGFyZSBhdmFpbGFibGUgaW4gdGhlIGxpc3QuIFBsZWFzZSBjb25zaWRlciBtb2RpZnlpbmcgdGhlIGZpbHRlci5cIixcblx0XHRcdFx0fSxcblx0XHRcdFx0bWVzc2FnZXM6IHtcblx0XHRcdFx0XHRjb250cm9sOiBudWxsLFxuXHRcdFx0XHRcdHNlbGVjdGVkOiBudWxsLFxuXHRcdFx0XHRcdGVtcHR5T3B0aW9uczogbnVsbCxcblx0XHRcdFx0fSxcblx0XHRcdFx0ZmV0Y2g6IHtcblx0XHRcdFx0XHRyZWRpcmVjdDogXCJlcnJvclwiLFxuXHRcdFx0XHRcdG1ldGhvZDogXCJHRVRcIixcblx0XHRcdFx0XHRtb2RlOiBcInNhbWUtb3JpZ2luXCIsXG5cdFx0XHRcdFx0Y3JlZGVudGlhbHM6IFwic2FtZS1vcmlnaW5cIixcblx0XHRcdFx0XHRoZWFkZXJzOiB7XG5cdFx0XHRcdFx0XHRhY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGZpbHRlcjoge1xuXHRcdFx0XHRcdGRlZmF1bHRWYWx1ZTogbnVsbCxcblx0XHRcdFx0XHRtb2RlOiBGSUxURVJfTU9ERV9ESVNBQkxFRCxcblx0XHRcdFx0XHRwb3NpdGlvbjogRklMVEVSX1BPU0lUSU9OX0lOTElORSxcblx0XHRcdFx0XHRtYXJrZXI6IHtcblx0XHRcdFx0XHRcdG9wZW46IFwie1wiLFxuXHRcdFx0XHRcdFx0Y2xvc2U6IFwifVwiLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNsYXNzZXM6IHtcblx0XHRcdFx0XHRiYWRnZTogXCJtb25zdGVyLWJhZGdlLXByaW1hcnlcIixcblx0XHRcdFx0XHRzdGF0dXNPclJlbW92ZUJhZGdlOiBcImVtcHR5XCIsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdG1hcHBpbmc6IHtcblx0XHRcdFx0XHRzZWxlY3RvcjogXCIqXCIsXG5cdFx0XHRcdFx0bGFiZWxUZW1wbGF0ZTogXCJcIixcblx0XHRcdFx0XHR2YWx1ZVRlbXBsYXRlOiBcIlwiLFxuXHRcdFx0XHRcdGZpbHRlcjogbnVsbCxcblx0XHRcdFx0fSxcblx0XHRcdFx0Zm9ybWF0dGVyOiB7XG5cdFx0XHRcdFx0c2VsZWN0aW9uOiBidWlsZFNlbGVjdGlvbkxhYmVsLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR0ZW1wbGF0ZU1hcHBpbmc6IHtcblx0XHRcdFx0XHQvKiogd2l0aCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItc2VsZWN0ZWQtdGVtcGxhdGVgIHRoZSB0ZW1wbGF0ZSBmb3IgdGhlIHNlbGVjdGVkIG9wdGlvbnMgY2FuIGJlIGRlZmluZWQuICovXG5cdFx0XHRcdFx0c2VsZWN0ZWQ6IGdldFNlbGVjdGlvblRlbXBsYXRlKCksXG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0cG9wcGVyOiB7XG5cdFx0XHRcdFx0cGxhY2VtZW50OiBcImJvdHRvbVwiLFxuXHRcdFx0XHRcdG1pZGRsZXdhcmU6IFtcImZsaXBcIiwgXCJvZmZzZXQ6MVwiXSxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0XHRpbml0T3B0aW9uc0Zyb21Bcmd1bWVudHMuY2FsbCh0aGlzKSxcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge1NlbGVjdH1cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbChzZWxmKTtcblx0XHRpbml0RXZlbnRIYW5kbGVyLmNhbGwoc2VsZik7XG5cblx0XHRsZXQgbGF6eUxvYWRGbGFnID0gc2VsZi5nZXRPcHRpb24oXCJmZWF0dXJlcy5sYXp5TG9hZFwiLCBmYWxzZSk7XG5cdFx0bGV0IHJlbW90ZUZpbHRlckZsYWcgPSBnZXRGaWx0ZXJNb2RlLmNhbGwodGhpcykgPT09IEZJTFRFUl9NT0RFX1JFTU9URTtcblxuXHRcdGlmIChnZXRGaWx0ZXJNb2RlLmNhbGwodGhpcykgPT09IEZJTFRFUl9NT0RFX1JFTU9URSkge1xuXHRcdFx0c2VsZi5nZXRPcHRpb24oXCJmZWF0dXJlcy5sYXp5TG9hZFwiLCBmYWxzZSk7XG5cdFx0XHRpZiAobGF6eUxvYWRGbGFnID09PSB0cnVlKSB7XG5cdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdFx0XHRcdHRoaXMsXG5cdFx0XHRcdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRcdFx0XHRcImxhenlMb2FkIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aCByZW1vdGUgZmlsdGVyXCIsXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGxhenlMb2FkRmxhZyA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChzZWxmLmhhc0F0dHJpYnV0ZShcInZhbHVlXCIpKSB7XG5cdFx0XHRuZXcgUHJvY2Vzc2luZygxMCwgKCkgPT4ge1xuXHRcdFx0XHR0aGlzLnZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiKTtcblx0XHRcdH0pXG5cdFx0XHRcdC5ydW4oKVxuXHRcdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cblx0XHRpZiAoc2VsZi5nZXRPcHRpb24oXCJ1cmxcIikgIT09IG51bGwpIHtcblx0XHRcdGlmIChsYXp5TG9hZEZsYWcgfHwgcmVtb3RlRmlsdGVyRmxhZykge1xuXHRcdFx0XHRsb29rdXBTZWxlY3Rpb24uY2FsbChzZWxmKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNlbGYuZmV0Y2goKS5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHNlbGYsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGAke2V9YCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGxldCBsYXN0VmFsdWUgPSBzZWxmLnZhbHVlO1xuXHRcdHNlbGZbaW50ZXJuYWxTeW1ib2xdLmF0dGFjaE9ic2VydmVyKFxuXHRcdFx0bmV3IE9ic2VydmVyKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0aWYgKGlzT2JqZWN0KHRoaXMpICYmIHRoaXMgaW5zdGFuY2VvZiBQcm94eU9ic2VydmVyKSB7XG5cdFx0XHRcdFx0Y29uc3QgbiA9IHRoaXMuZ2V0U3ViamVjdCgpPy5vcHRpb25zPy52YWx1ZTtcblxuXHRcdFx0XHRcdGlmIChsYXN0VmFsdWUgIT09IG4pIHtcblx0XHRcdFx0XHRcdGxhc3RWYWx1ZSA9IG47XG5cdFx0XHRcdFx0XHRzZXRTZWxlY3Rpb25cblx0XHRcdFx0XHRcdFx0LmNhbGwoc2VsZiwgbilcblx0XHRcdFx0XHRcdFx0LnRoZW4oKCkgPT4ge30pXG5cdFx0XHRcdFx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHNlbGYsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGAke2V9YCk7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSksXG5cdFx0KTtcblxuXHRcdGFyZU9wdGlvbnNBdmFpbGFibGVBbmRJbml0LmNhbGwoc2VsZik7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHsqfVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gc3RvcmVGZXRjaGVkRGF0YSBpcyBub3QgZW5hYmxlZFxuXHQgKiBAc2luY2UgMy42Ni4wXG5cdCAqL1xuXHRnZXRMYXN0RmV0Y2hlZERhdGEoKSB7XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMuc3RvcmVGZXRjaGVkRGF0YVwiKSA9PT0gZmFsc2UpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInN0b3JlRmV0Y2hlZERhdGEgaXMgbm90IGVuYWJsZWRcIik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM/LltsYXN0RmV0Y2hlZERhdGFTeW1ib2xdO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBCdXR0b24uY2xpY2soKSBtZXRob2Qgc2ltdWxhdGVzIGEgY2xpY2sgb24gdGhlIGludGVybmFsIGJ1dHRvbiBlbGVtZW50LlxuXHQgKlxuXHQgKiBAc2luY2UgMy4yNy4wXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MRWxlbWVudC9jbGlja31cblx0ICovXG5cdGNsaWNrKCkge1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImRpc2FibGVkXCIpID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dG9nZ2xlLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIEJ1dHRvbi5mb2N1cygpIG1ldGhvZCBzZXRzIGZvY3VzIG9uIHRoZSBpbnRlcm5hbCBidXR0b24gZWxlbWVudC5cblx0ICpcblx0ICogQHNpbmNlIDMuMjcuMFxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvZm9jdXN9XG5cdCAqL1xuXHRmb2N1cyhvcHRpb25zKSB7XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZGlzYWJsZWRcIikgPT09IHRydWUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRuZXcgUHJvY2Vzc2luZygoKSA9PiB7XG5cdFx0XHRnYXRoZXJTdGF0ZS5jYWxsKHRoaXMpO1xuXHRcdFx0Zm9jdXNGaWx0ZXIuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0XHR9KVxuXHRcdFx0LnJ1bigpXG5cdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgYCR7ZX1gKTtcblx0XHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBCdXR0b24uYmx1cigpIG1ldGhvZCByZW1vdmVzIGZvY3VzIGZyb20gdGhlIGludGVybmFsIGJ1dHRvbiBlbGVtZW50LlxuXHQgKiBAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvYmx1clxuXHQgKi9cblx0Ymx1cigpIHtcblx0XHRuZXcgUHJvY2Vzc2luZygoKSA9PiB7XG5cdFx0XHRnYXRoZXJTdGF0ZS5jYWxsKHRoaXMpO1xuXHRcdFx0Ymx1ckZpbHRlci5jYWxsKHRoaXMpO1xuXHRcdH0pXG5cdFx0XHQucnVuKClcblx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBgJHtlfWApO1xuXHRcdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogSWYgbm8gdXJsIGlzIHNwZWNpZmllZCwgdGhlIG9wdGlvbnMgYXJlIHRha2VuIGZyb20gdGhlIENvbXBvbmVudCBpdHNlbGYuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gdXJsIFVSTCB0byBmZXRjaCB0aGUgb3B0aW9uc1xuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0ZmV0Y2godXJsKSB7XG5cdFx0cmV0dXJuIGZldGNoSXQuY2FsbCh0aGlzLCB1cmwpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqL1xuXHRjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHRzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXHRcdGNvbnN0IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcblxuXHRcdGZvciAoY29uc3QgWywgdHlwZV0gb2YgT2JqZWN0LmVudHJpZXMoW1wiY2xpY2tcIiwgXCJ0b3VjaFwiXSkpIHtcblx0XHRcdC8vIGNsb3NlIG9uIG91dHNpZGUgdWktZXZlbnRzXG5cdFx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIHRoaXNbY2xvc2VFdmVudEhhbmRsZXJdKTtcblx0XHR9XG5cblx0XHRwYXJzZVNsb3RzVG9PcHRpb25zLmNhbGwodGhpcyk7XG5cdFx0YXR0YWNoUmVzaXplT2JzZXJ2ZXIuY2FsbCh0aGlzKTtcblx0XHR1cGRhdGVQb3BwZXIuY2FsbCh0aGlzKTtcblxuXHRcdG5ldyBQcm9jZXNzaW5nKCgpID0+IHtcblx0XHRcdGdhdGhlclN0YXRlLmNhbGwodGhpcyk7XG5cdFx0XHRmb2N1c0ZpbHRlci5jYWxsKHRoaXMpO1xuXHRcdH0pXG5cdFx0XHQucnVuKClcblx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBgJHtlfWApO1xuXHRcdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG5cdFx0Y29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXG5cdFx0Ly8gY2xvc2Ugb24gb3V0c2lkZSB1aS1ldmVudHNcblx0XHRmb3IgKGNvbnN0IFssIHR5cGVdIG9mIE9iamVjdC5lbnRyaWVzKFtcImNsaWNrXCIsIFwidG91Y2hcIl0pKSB7XG5cdFx0XHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIHRoaXNbY2xvc2VFdmVudEhhbmRsZXJdKTtcblx0XHR9XG5cblx0XHRkaXNjb25uZWN0UmVzaXplT2JzZXJ2ZXIuY2FsbCh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbXBvcnQgU2VsZWN0IE9wdGlvbnMgZnJvbSBkYXRhc2V0XG5cdCAqIE5vdCB0byBiZSBjb25mdXNlZCB3aXRoIHRoZSBjb250cm9sIGRlZmF1bHRzL29wdGlvbnNcblx0ICpcblx0ICogQHBhcmFtIHthcnJheXxvYmplY3R8TWFwfFNldH0gZGF0YVxuXHQgKiBAcmV0dXJuIHtTZWxlY3R9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBtYXAgaXMgbm90IGl0ZXJhYmxlXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBtaXNzaW5nIGxhYmVsIGNvbmZpZ3VyYXRpb25cblx0ICogQGZpcmVzIG1vbnN0ZXItb3B0aW9ucy1zZXQgdGhpcyBldmVudCBpcyBmaXJlZCB3aGVuIHRoZSBvcHRpb25zIGFyZSBzZXRcblx0ICovXG5cdGltcG9ydE9wdGlvbnMoZGF0YSkge1xuXHRcdGNvbnN0IG1hcHBpbmdPcHRpb25zID0gdGhpcy5nZXRPcHRpb24oXCJtYXBwaW5nXCIsIHt9KTtcblx0XHRjb25zdCBzZWxlY3RvciA9IG1hcHBpbmdPcHRpb25zPy5bXCJzZWxlY3RvclwiXTtcblx0XHRjb25zdCBsYWJlbFRlbXBsYXRlID0gbWFwcGluZ09wdGlvbnM/LltcImxhYmVsVGVtcGxhdGVcIl07XG5cdFx0Y29uc3QgdmFsdWVUZW1wbGF0ZSA9IG1hcHBpbmdPcHRpb25zPy5bXCJ2YWx1ZVRlbXBsYXRlXCJdO1xuXHRcdGNvbnN0IGZpbHRlciA9IG1hcHBpbmdPcHRpb25zPy5bXCJmaWx0ZXJcIl07XG5cblx0XHRsZXQgZmxhZyA9IGZhbHNlO1xuXHRcdGlmIChsYWJlbFRlbXBsYXRlID09PSBcIlwiKSB7XG5cdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBcImVtcHR5IGxhYmVsIHRlbXBsYXRlXCIpO1xuXHRcdFx0ZmxhZyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKHZhbHVlVGVtcGxhdGUgPT09IFwiXCIpIHtcblx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIFwiZW1wdHkgdmFsdWUgdGVtcGxhdGVcIik7XG5cdFx0XHRmbGFnID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAoZmxhZyA9PT0gdHJ1ZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibWlzc2luZyBsYWJlbCBjb25maWd1cmF0aW9uXCIpO1xuXHRcdH1cblxuXHRcdGNvbnN0IG1hcCA9IGJ1aWxkTWFwKGRhdGEsIHNlbGVjdG9yLCBsYWJlbFRlbXBsYXRlLCB2YWx1ZVRlbXBsYXRlLCBmaWx0ZXIpO1xuXG5cdFx0Y29uc3Qgb3B0aW9ucyA9IFtdO1xuXG5cdFx0aWYgKCFpc0l0ZXJhYmxlKG1hcCkpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIm1hcCBpcyBub3QgaXRlcmFibGVcIik7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdmlzaWJpbGl0eSA9IFwidmlzaWJsZVwiO1xuXG5cdFx0bWFwLmZvckVhY2goKGxhYmVsLCB2YWx1ZSkgPT4ge1xuXHRcdFx0b3B0aW9ucy5wdXNoKHtcblx0XHRcdFx0dmFsdWUsXG5cdFx0XHRcdGxhYmVsLFxuXHRcdFx0XHR2aXNpYmlsaXR5LFxuXHRcdFx0XHRkYXRhOiBtYXAuZ2V0KHZhbHVlKSxcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0cnVuQXNPcHRpb25MZW5ndGhDaGFuZ2VkLmNhbGwodGhpcywgbWFwLnNpemUpO1xuXHRcdHRoaXMuc2V0T3B0aW9uKFwib3B0aW9uc1wiLCBvcHRpb25zKTtcblxuXHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItb3B0aW9ucy1zZXRcIiwge1xuXHRcdFx0b3B0aW9ucyxcblx0XHR9KTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEByZXR1cm4ge1NlbGVjdH1cblx0ICovXG5cdGNhbGNBbmRTZXRPcHRpb25zRGltZW5zaW9uKCkge1xuXHRcdGNhbGNBbmRTZXRPcHRpb25zRGltZW5zaW9uLmNhbGwodGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLXNlbGVjdFwiO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge0NTU1N0eWxlU2hlZXRbXX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiBbU2VsZWN0U3R5bGVTaGVldF07XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBsb29rdXBTZWxlY3Rpb24oKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdGNvbnN0IHNlbGVjdGlvbiA9IHNlbGYuZ2V0T3B0aW9uKFwic2VsZWN0aW9uXCIpO1xuXHRcdGlmIChzZWxlY3Rpb24ubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKHNlbGZbaXNMb2FkaW5nU3ltYm9sXSA9PT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChzZWxmW2xhenlMb2FkRG9uZVN5bWJvbF0gPT09IHRydWUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRsZXQgdXJsID0gc2VsZi5nZXRPcHRpb24oXCJ1cmxcIik7XG5cdFx0bGV0IGxvb2t1cFVybCA9IHNlbGYuZ2V0T3B0aW9uKFwibG9va3VwLnVybFwiKTtcblx0XHRpZiAobG9va3VwVXJsICE9PSBudWxsKSB7XG5cdFx0XHR1cmwgPSBsb29rdXBVcmw7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwibG9va3VwLmdyb3VwaW5nXCIpID09PSB0cnVlKSB7XG5cdFx0XHRmaWx0ZXJGcm9tUmVtb3RlQnlWYWx1ZVxuXHRcdFx0XHQuY2FsbChcblx0XHRcdFx0XHRzZWxmLFxuXHRcdFx0XHRcdHVybCxcblx0XHRcdFx0XHRzZWxlY3Rpb24ubWFwKChzKSA9PiBzPy5bXCJ2YWx1ZVwiXSksXG5cdFx0XHRcdClcblx0XHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4oc2VsZiwgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgYCR7ZX1gKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBzIG9mIHNlbGVjdGlvbikge1xuXHRcdFx0aWYgKHM/LltcInZhbHVlXCJdKSB7XG5cdFx0XHRcdGZpbHRlckZyb21SZW1vdGVCeVZhbHVlLmNhbGwoc2VsZiwgdXJsLCBzPy5bXCJ2YWx1ZVwiXSkuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbihzZWxmLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBgJHtlfWApO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdH0sIDEwMCk7XG59XG5cbmZ1bmN0aW9uIGZldGNoSXQodXJsLCBjb250cm9sT3B0aW9ucykge1xuXHRpZiAodXJsIGluc3RhbmNlb2YgVVJMKSB7XG5cdFx0dXJsID0gdXJsLnRvU3RyaW5nKCk7XG5cdH1cblxuXHRpZiAodXJsICE9PSB1bmRlZmluZWQgJiYgdXJsICE9PSBudWxsKSB7XG5cdFx0dXJsID0gdmFsaWRhdGVTdHJpbmcodXJsKTtcblx0fSBlbHNlIHtcblx0XHR1cmwgPSB0aGlzLmdldE9wdGlvbihcInVybFwiKTtcblx0XHRpZiAodXJsID09PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gdXJsIGRlZmluZWRcIikpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0c2V0U3RhdHVzT3JSZW1vdmVCYWRnZXMuY2FsbCh0aGlzLCBcImxvYWRpbmdcIik7XG5cblx0XHRuZXcgUHJvY2Vzc2luZygxMCwgKCkgPT4ge1xuXHRcdFx0ZmV0Y2hEYXRhXG5cdFx0XHRcdC5jYWxsKHRoaXMsIHVybClcblx0XHRcdFx0LnRoZW4oKG1hcCkgPT4ge1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdGlzT2JqZWN0KG1hcCkgfHxcblx0XHRcdFx0XHRcdGlzQXJyYXkobWFwKSB8fFxuXHRcdFx0XHRcdFx0bWFwIGluc3RhbmNlb2YgU2V0IHx8XG5cdFx0XHRcdFx0XHRtYXAgaW5zdGFuY2VvZiBNYXBcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuaW1wb3J0T3B0aW9ucyhtYXApO1xuXHRcdFx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdFx0XHRzZXRTdGF0dXNPclJlbW92ZUJhZGdlcy5jYWxsKHRoaXMsIFwiZXJyb3JcIik7XG5cdFx0XHRcdFx0XHRcdHJlamVjdChlKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR0aGlzW2xhc3RGZXRjaGVkRGF0YVN5bWJvbF0gPSBtYXA7XG5cblx0XHRcdFx0XHRcdGxldCByZXN1bHQ7XG5cdFx0XHRcdFx0XHRjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmdldE9wdGlvbihcInNlbGVjdGlvblwiKTtcblx0XHRcdFx0XHRcdGxldCBuZXdWYWx1ZSA9IFtdO1xuXHRcdFx0XHRcdFx0aWYgKHNlbGVjdGlvbikge1xuXHRcdFx0XHRcdFx0XHRuZXdWYWx1ZSA9IHNlbGVjdGlvbjtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAodGhpcy5oYXNBdHRyaWJ1dGUoXCJ2YWx1ZVwiKSkge1xuXHRcdFx0XHRcdFx0XHRuZXdWYWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwidmFsdWVcIik7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHJlc3VsdCA9IHNldFNlbGVjdGlvbi5jYWxsKHRoaXMsIG5ld1ZhbHVlKTtcblx0XHRcdFx0XHRcdHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGNoZWNrT3B0aW9uU3RhdGUuY2FsbCh0aGlzKTtcblx0XHRcdFx0XHRcdFx0c2V0U3RhdHVzT3JSZW1vdmVCYWRnZXMuY2FsbCh0aGlzLCBcImNsb3NlZFwiKTtcblx0XHRcdFx0XHRcdFx0dXBkYXRlUG9wcGVyLmNhbGwodGhpcyk7XG5cdFx0XHRcdFx0XHRcdHJlc29sdmUocmVzdWx0KTtcblx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0c2V0U3RhdHVzT3JSZW1vdmVCYWRnZXMuY2FsbCh0aGlzLCBcImVycm9yXCIpO1xuXHRcdFx0XHRcdHJlamVjdChuZXcgRXJyb3IoXCJpbnZhbGlkIHJlc3BvbnNlXCIpKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdFx0c2V0U3RhdHVzT3JSZW1vdmVCYWRnZXMuY2FsbCh0aGlzLCBcImVycm9yXCIpO1xuXHRcdFx0XHRcdHJlamVjdChlKTtcblx0XHRcdFx0fSk7XG5cdFx0fSlcblx0XHRcdC5ydW4oKVxuXHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwodGhpcywgXCJlcnJvclwiKTtcblx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHRcdFx0cmVqZWN0KGUpO1xuXHRcdFx0fSk7XG5cdH0pO1xufVxuXG4vKipcbiAqIFRoaXMgYXR0cmlidXRlIGNhbiBiZSB1c2VkIHRvIHBhc3MgYSBVUkwgdG8gdGhpcyBzZWxlY3QuXG4gKlxuICogYGBgXG4gKiA8bW9uc3Rlci1zZWxlY3QgZGF0YS1tb25zdGVyLXVybD1cImh0dHBzOi8vZXhhbXBsZS5jb20vXCI+PC9tb25zdGVyLXNlbGVjdD5cbiAqIGBgYFxuICpcbiAqIEBwcml2YXRlXG4gKiBAZGVwcmVjYXRlZCAyMDI0LTAxLTIxICh5b3Ugc2hvdWxkIHVzZSBkYXRhLW1vbnN0ZXItb3B0aW9uLS4uLilcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gaW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzKCkge1xuXHRjb25zdCBvcHRpb25zID0ge307XG5cblx0Y29uc3QgdGVtcGxhdGUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImRhdGEtbW9uc3Rlci1zZWxlY3RlZC10ZW1wbGF0ZVwiKTtcblx0aWYgKGlzU3RyaW5nKHRlbXBsYXRlKSkge1xuXHRcdGlmICghb3B0aW9uc1tcInRlbXBsYXRlTWFwcGluZ1wiXSkgb3B0aW9uc1tcInRlbXBsYXRlTWFwcGluZ1wiXSA9IHt9O1xuXG5cdFx0c3dpdGNoICh0ZW1wbGF0ZSkge1xuXHRcdFx0Y2FzZSBcInN1bW1hcnlcIjpcblx0XHRcdGNhc2UgXCJkZWZhdWx0XCI6XG5cdFx0XHRcdG9wdGlvbnNbXCJ0ZW1wbGF0ZU1hcHBpbmdcIl1bXCJzZWxlY3RlZFwiXSA9IGdldFN1bW1hcnlUZW1wbGF0ZSgpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJzZWxlY3RlZFwiOlxuXHRcdFx0XHRvcHRpb25zW1widGVtcGxhdGVNYXBwaW5nXCJdW1wic2VsZWN0ZWRcIl0gPSBnZXRTZWxlY3Rpb25UZW1wbGF0ZSgpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdFx0XHRcdHRoaXMsXG5cdFx0XHRcdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRcdFx0XHRcImludmFsaWQgdGVtcGxhdGUsIHVzZSBzdW1tYXJ5IG9yIHNlbGVjdGVkXCIsXG5cdFx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG9wdGlvbnM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYXR0YWNoUmVzaXplT2JzZXJ2ZXIoKSB7XG5cdC8vIGFnYWluc3QgZmxpY2tlcmluZ1xuXHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXSA9IG5ldyBSZXNpemVPYnNlcnZlcigoZW50cmllcykgPT4ge1xuXHRcdGlmICh0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdIGluc3RhbmNlb2YgRGVhZE1hbnNTd2l0Y2gpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF0udG91Y2goKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRkZWxldGUgdGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdID0gbmV3IERlYWRNYW5zU3dpdGNoKDIwMCwgKCkgPT4ge1xuXHRcdFx0dXBkYXRlUG9wcGVyLmNhbGwodGhpcyk7XG5cdFx0XHRkZWxldGUgdGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXTtcblx0XHR9KTtcblx0fSk7XG5cblx0dGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0ub2JzZXJ2ZSh0aGlzLnBhcmVudEVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBkaXNjb25uZWN0UmVzaXplT2JzZXJ2ZXIoKSB7XG5cdGlmICh0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXSBpbnN0YW5jZW9mIFJlc2l6ZU9ic2VydmVyKSB7XG5cdFx0dGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0uZGlzY29ubmVjdCgpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldFNlbGVjdGlvblRlbXBsYXRlKCkge1xuXHRyZXR1cm4gYDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJzZWxlY3Rpb25cIiBwYXJ0PVwic2VsZWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWluc2VydD1cInNlbGVjdGlvbiBwYXRoOnNlbGVjdGlvblwiIHJvbGU9XCJzZWFyY2hcIlxuICAgICAgICAgICAgPjxpbnB1dCB0eXBlPVwidGV4dFwiIHJvbGU9XCJzZWFyY2hib3hcIlxuICAgICAgICAgICAgICAgICAgICBwYXJ0PVwiaW5saW5lLWZpbHRlclwiIG5hbWU9XCJpbmxpbmUtZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJmaWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgPjxkaXYgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOm1lc3NhZ2VzLmNvbnRyb2xcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PmA7XG59XG5cbmZ1bmN0aW9uIGdldFN1bW1hcnlUZW1wbGF0ZSgpIHtcblx0cmV0dXJuIGA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwic2VsZWN0aW9uXCIgcm9sZT1cInNlYXJjaFwiIHBhcnQ9XCJzdW1tYXJ5XCI+XG4gICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcm9sZT1cInNlYXJjaGJveFwiXG4gICAgICAgICAgIHBhcnQ9XCJpbmxpbmUtZmlsdGVyXCIgbmFtZT1cImlubGluZS1maWx0ZXJcIlxuICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cImZpbHRlclwiXG4gICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgPlxuICAgIDxkaXYgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOm1lc3NhZ2VzLnNlbGVjdGVkXCI+PC9kaXY+ICAgIFxuPC9kaXY+YDtcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHt2b2lkfVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gcGFyc2VTbG90c1RvT3B0aW9ucygpIHtcblx0bGV0IG9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbihcIm9wdGlvbnNcIik7XG5cdGlmICghaXNJdGVyYWJsZShvcHRpb25zKSkge1xuXHRcdG9wdGlvbnMgPSBbXTtcblx0fVxuXG5cdGxldCBjb3VudGVyID0gMTtcblx0Z2V0U2xvdHRlZEVsZW1lbnRzLmNhbGwodGhpcywgXCJkaXZcIikuZm9yRWFjaCgobm9kZSkgPT4ge1xuXHRcdGxldCB2YWx1ZSA9IChjb3VudGVyKyspLnRvU3RyaW5nKCk7XG5cdFx0bGV0IHZpc2liaWxpdHkgPSBcInZpc2libGVcIjtcblxuXHRcdGlmIChub2RlLmhhc0F0dHJpYnV0ZShcImRhdGEtbW9uc3Rlci12YWx1ZVwiKSkge1xuXHRcdFx0dmFsdWUgPSBub2RlLmdldEF0dHJpYnV0ZShcImRhdGEtbW9uc3Rlci12YWx1ZVwiKTtcblx0XHR9XG5cblx0XHRpZiAobm9kZS5zdHlsZS5kaXNwbGF5ID09PSBcIm5vbmVcIikge1xuXHRcdFx0dmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XG5cdFx0fVxuXG5cdFx0Y29uc3QgbGFiZWwgPSBub2RlLm91dGVySFRNTDtcblxuXHRcdG9wdGlvbnMucHVzaCh7XG5cdFx0XHR2YWx1ZSxcblx0XHRcdGxhYmVsLFxuXHRcdFx0dmlzaWJpbGl0eSxcblx0XHR9KTtcblx0fSk7XG5cblx0cnVuQXNPcHRpb25MZW5ndGhDaGFuZ2VkLmNhbGwodGhpcywgb3B0aW9ucy5sZW5ndGgpO1xuXHR0aGlzLnNldE9wdGlvbihcIm9wdGlvbnNcIiwgb3B0aW9ucyk7XG59XG5cbi8qKlxuICogd2FpdCB1bnRpbCBhbGwgb3B0aW9ucyBhcmUgZmluaXNoZWQgcmVuZGVyaW5nXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7aW50fSB0YXJnZXRMZW5ndGhcbiAqL1xuZnVuY3Rpb24gcnVuQXNPcHRpb25MZW5ndGhDaGFuZ2VkKHRhcmdldExlbmd0aCkge1xuXHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRpZiAoIXNlbGZbb3B0aW9uc0VsZW1lbnRTeW1ib2xdKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3QgY2FsbGJhY2sgPSBmdW5jdGlvbiAobXV0YXRpb25zTGlzdCwgb2JzZXJ2ZXIpIHtcblx0XHRjb25zdCBydW4gPSBmYWxzZTtcblx0XHRmb3IgKGNvbnN0IG11dGF0aW9uIG9mIG11dGF0aW9uc0xpc3QpIHtcblx0XHRcdGlmIChtdXRhdGlvbi50eXBlID09PSBcImNoaWxkTGlzdFwiKSB7XG5cdFx0XHRcdGNvbnN0IHJ1biA9IHRydWU7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChydW4gPT09IHRydWUpIHtcblx0XHRcdGNvbnN0IG5vZGVzID0gc2VsZltvcHRpb25zRWxlbWVudFN5bWJvbF0ucXVlcnlTZWxlY3RvckFsbChcblx0XHRcdFx0YGRpdlske0FUVFJJQlVURV9ST0xFfT1vcHRpb25dYCxcblx0XHRcdCk7XG5cblx0XHRcdGlmIChub2Rlcy5sZW5ndGggPT09IHRhcmdldExlbmd0aCkge1xuXHRcdFx0XHRjaGVja09wdGlvblN0YXRlLmNhbGwoc2VsZik7XG5cdFx0XHRcdG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0Y29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihjYWxsYmFjayk7XG5cdG9ic2VydmVyLm9ic2VydmUoc2VsZltvcHRpb25zRWxlbWVudFN5bWJvbF0sIHtcblx0XHRhdHRyaWJ1dGVzOiBmYWxzZSxcblx0XHRjaGlsZExpc3Q6IHRydWUsXG5cdFx0c3VidHJlZTogdHJ1ZSxcblx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4geyp9XG4gKi9cbmZ1bmN0aW9uIGJ1aWxkU2VsZWN0aW9uTGFiZWwodmFsdWUpIHtcblx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwib3B0aW9uc1wiKTtcblxuXHRmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMubGVuZ3RoOyBpKyspIHtcblx0XHRsZXQgbyA9IG9wdGlvbnM/LltpXTtcblx0XHRsZXQgbCwgdiwgdjI7XG5cblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy51c2VTdHJpY3RWYWx1ZUNvbXBhcmlzb25cIikgPT09IHRydWUpIHtcblx0XHRcdHYgPSB2YWx1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0diA9IGAke3ZhbHVlfWA7XG5cdFx0fVxuXG5cdFx0aWYgKGlzUHJpbWl0aXZlKG8pICYmIG8gPT09IHZhbHVlKSB7XG5cdFx0XHRyZXR1cm4gbztcblx0XHR9IGVsc2UgaWYgKCFpc09iamVjdChvKSkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMudXNlU3RyaWN0VmFsdWVDb21wYXJpc29uXCIpID09PSB0cnVlKSB7XG5cdFx0XHRsID0gbz8uW1wibGFiZWxcIl07XG5cdFx0XHR2MiA9IG8/LltcInZhbHVlXCJdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRsID0gYCR7bz8uW1wibGFiZWxcIl19YDtcblx0XHRcdHYyID0gYCR7bz8uW1widmFsdWVcIl19YDtcblx0XHR9XG5cblx0XHRpZiAodjIgPT09IHYpIHtcblx0XHRcdHJldHVybiBsO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyB2YWx1ZSBmb3VuZFxuICovXG5mdW5jdGlvbiBnZXRTZWxlY3Rpb25MYWJlbCh2YWx1ZSkge1xuXHRjb25zdCBjYWxsYmFjayA9IHRoaXMuZ2V0T3B0aW9uKFwiZm9ybWF0dGVyLnNlbGVjdGlvblwiKTtcblx0aWYgKGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG5cdFx0Y29uc3QgbGFiZWwgPSBjYWxsYmFjay5jYWxsKHRoaXMsIHZhbHVlKTtcblx0XHRpZiAoaXNTdHJpbmcobGFiZWwpKSByZXR1cm4gbGFiZWw7XG5cdH1cblxuXHRpZiAoaXNTdHJpbmcodmFsdWUpIHx8IGlzSW50ZWdlcih2YWx1ZSkpIHtcblx0XHRyZXR1cm4gYCR7dmFsdWV9YDtcblx0fVxuXG5cdHJldHVybiB0aGlzLmdldE9wdGlvbihcImxhYmVscy5jYW5ub3QtYmUtbG9hZGVkXCIsIHZhbHVlKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAqL1xuZnVuY3Rpb24gaGFuZGxlVG9nZ2xlS2V5Ym9hcmRFdmVudHMoZXZlbnQpIHtcblx0c3dpdGNoIChldmVudD8uW1wiY29kZVwiXSkge1xuXHRcdGNhc2UgXCJFc2NhcGVcIjpcblx0XHRcdHRvZ2dsZS5jYWxsKHRoaXMpO1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJTcGFjZVwiOlxuXHRcdFx0dG9nZ2xlLmNhbGwodGhpcyk7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkFycm93RG93blwiOlxuXHRcdFx0c2hvdy5jYWxsKHRoaXMpO1xuXHRcdFx0YWN0aXZhdGVDdXJyZW50T3B0aW9uLmNhbGwodGhpcywgRk9DVVNfRElSRUNUSU9OX0RPV04pO1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJBcnJvd1VwXCI6XG5cdFx0XHRoaWRlLmNhbGwodGhpcyk7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0YnJlYWs7XG5cdH1cbn1cblxuLyoqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjE1LjBcbiAqIEBwcml2YXRlXG4gKiBAdGhpcyBDdXN0b21FbGVtZW50XG4gKi9cbmZ1bmN0aW9uIGluaXRPcHRpb25PYnNlcnZlcigpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0c2VsZi5hdHRhY2hPYnNlcnZlcihcblx0XHRuZXcgT2JzZXJ2ZXIoZnVuY3Rpb24gKCkge1xuXHRcdFx0bmV3IFByb2Nlc3NpbmcoKCkgPT4ge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdHNlbGYudXBkYXRlSTE4bigpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlKTtcblx0XHRcdFx0XHRyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuXHRcdFx0XHRcdFx0c2V0U3RhdHVzT3JSZW1vdmVCYWRnZXMuY2FsbChzZWxmLCBcImVycm9yXCIpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0YXJlT3B0aW9uc0F2YWlsYWJsZUFuZEluaXQuY2FsbChzZWxmKTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoZSk7XG5cdFx0XHRcdFx0cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcblx0XHRcdFx0XHRcdHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwoc2VsZiwgXCJlcnJvclwiKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHNldFN1bW1hcnlBbmRDb250cm9sVGV4dC5jYWxsKHNlbGYpO1xuXHRcdFx0fSkucnVuKCk7XG5cdFx0fSksXG5cdCk7XG59XG5cbmZ1bmN0aW9uIGdldERlZmF1bHRUcmFuc2xhdGlvbigpIHtcblx0Y29uc3QgdHJhbnNsYXRpb24gPSBuZXcgVHJhbnNsYXRpb25zKFwiZW5cIikuYXNzaWduVHJhbnNsYXRpb25zKFxuXHRcdHRoaXMuZ2V0T3B0aW9uKFwibGFiZWxzXCIsIHt9KSxcblx0KTtcblxuXHR0cnkge1xuXHRcdGNvbnN0IGRvYyA9IGdldERvY3VtZW50VHJhbnNsYXRpb25zKCk7XG5cdFx0dHJhbnNsYXRpb24ubG9jYWxlID0gZG9jLmxvY2FsZTtcblx0fSBjYXRjaCAoZSkge31cblxuXHRyZXR1cm4gdHJhbnNsYXRpb247XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ3wqfVxuICovXG5mdW5jdGlvbiBzZXRTdW1tYXJ5QW5kQ29udHJvbFRleHQoKSB7XG5cdGNvbnN0IHRyYW5zbGF0aW9ucyA9IGdldERlZmF1bHRUcmFuc2xhdGlvbi5jYWxsKHRoaXMpO1xuXHRjb25zdCBzZWxlY3Rpb25zID0gdGhpcy5nZXRPcHRpb24oXCJzZWxlY3Rpb25cIik7XG5cblx0Y29uc3QgdGV4dCA9IHRyYW5zbGF0aW9ucy5nZXRQbHVyYWxSdWxlVGV4dChcblx0XHRcInN1bW1hcnktdGV4dFwiLFxuXHRcdHNlbGVjdGlvbnMubGVuZ3RoLFxuXHRcdFwiXCIsXG5cdCk7XG5cblx0Y29uc3Qgc2VsZWN0ZWRUZXh0ID0gbmV3IEZvcm1hdHRlcih7XG5cdFx0Y291bnQ6IFN0cmluZyhzZWxlY3Rpb25zLmxlbmd0aCksXG5cdH0pLmZvcm1hdCh0ZXh0KTtcblxuXHR0aGlzLnNldE9wdGlvbihcIm1lc3NhZ2VzLnNlbGVjdGVkXCIsIHNlbGVjdGVkVGV4dCk7XG5cblx0Y29uc3QgY3VycmVudCA9IHRoaXMuZ2V0T3B0aW9uKFwibWVzc2FnZXMuY29udHJvbFwiKTtcblx0Y29uc3QgbXNnID0gdGhpcy5nZXRPcHRpb24oXCJsYWJlbHMuc2VsZWN0LWFuLW9wdGlvblwiKTtcblxuXHRpZiAoXG5cdFx0Y3VycmVudCA9PT0gXCJcIiB8fFxuXHRcdGN1cnJlbnQgPT09IHVuZGVmaW5lZCB8fFxuXHRcdGN1cnJlbnQgPT09IG1zZyB8fFxuXHRcdGN1cnJlbnQgPT09IG51bGxcblx0KSB7XG5cdFx0aWYgKHNlbGVjdGlvbnMgPT09IHVuZGVmaW5lZCB8fCBzZWxlY3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0dGhpcy5zZXRPcHRpb24oXCJtZXNzYWdlcy5jb250cm9sXCIsIG1zZyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0T3B0aW9uKFwibWVzc2FnZXMuY29udHJvbFwiLCBcIlwiKTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7Tm9kZUxpc3R9XG4gKi9cbmZ1bmN0aW9uIGdldE9wdGlvbkVsZW1lbnRzKCkge1xuXHRyZXR1cm4gdGhpc1tvcHRpb25zRWxlbWVudFN5bWJvbF0ucXVlcnlTZWxlY3RvckFsbChcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PW9wdGlvbl1gLFxuXHQpO1xufVxuXG4vKipcbiAqIFdpdGggdGhlIGhlbHAgb2YgdGhpcyBmaWx0ZXIgY2FsbGJhY2ssIHZhbHVlcyBjYW4gYmUgZmlsdGVyZWQgb3V0LiBPbmx5IGlmIHRoZSBmaWx0ZXIgZnVuY3Rpb24gcmV0dXJucyB0cnVlLCB0aGUgdmFsdWUgaXMgdGFrZW4gZm9yIHRoZSBtYXAuXG4gKlxuICogQGNhbGxiYWNrIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtfmV4YW1wbGVGaWx0ZXJDYWxsYmFja1xuICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAgS2V5XG4gKiBAc2VlIE1vbnN0ZXIuRGF0YS5idWlsZE1hcFxuICovXG5cbi8qKlxuICpcbiAqIEBjYWxsYmFjayBNb25zdGVyLkNvbXBvbmVudHMuRm9ybX5mb3JtYXR0ZXJTZWxlY3Rpb25DYWxsYmFja1xuICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZVxuICogQHJldHVybiB7c3RyaW5nfHVuZGVmaW5lZH1cbiAqIEBzZWUgTW9uc3Rlci5EYXRhLmJ1aWxkTWFwXG4gKi9cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjYWxjQW5kU2V0T3B0aW9uc0RpbWVuc2lvbigpIHtcblx0Y29uc3Qgb3B0aW9ucyA9IGdldE9wdGlvbkVsZW1lbnRzLmNhbGwodGhpcyk7XG5cdGNvbnN0IGNvbnRhaW5lciA9IHRoaXNbb3B0aW9uc0VsZW1lbnRTeW1ib2xdO1xuXHRpZiAoIShjb250YWluZXIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBvcHRpb25zIGluc3RhbmNlb2YgTm9kZUxpc3QpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0bGV0IHZpc2libGUgPSAwO1xuXHRsZXQgb3B0aW9uSGVpZ2h0ID0gMDtcblx0Y29uc3QgbWF4ID0gdGhpcy5nZXRPcHRpb24oXCJzaG93TWF4T3B0aW9uc1wiLCAxMCk7XG5cblx0bGV0IHNjcm9sbEZsYWcgPSBmYWxzZTtcblx0Zm9yIChjb25zdCBbLCBvcHRpb25dIG9mIE9iamVjdC5lbnRyaWVzKG9wdGlvbnMpKSB7XG5cdFx0Y29uc3QgY29tcHV0ZWRTdHlsZSA9IGdldEdsb2JhbCgpLmdldENvbXB1dGVkU3R5bGUob3B0aW9uKTtcblx0XHRpZiAoY29tcHV0ZWRTdHlsZS5kaXNwbGF5ID09PSBcIm5vbmVcIikgY29udGludWU7XG5cblx0XHRsZXQgaCA9IG9wdGlvbi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XG5cdFx0aCArPSBwYXJzZUludChjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCJtYXJnaW4tdG9wXCIpLCAxMCk7XG5cdFx0aCArPSBwYXJzZUludChjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCJtYXJnaW4tYm90dG9tXCIpLCAxMCk7XG5cdFx0b3B0aW9uSGVpZ2h0ICs9IGg7XG5cblx0XHR2aXNpYmxlKys7XG5cblx0XHRpZiAodmlzaWJsZSA+IG1heCkge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0aWYgKHZpc2libGUgPiBtYXgpIHtcblx0XHR2aXNpYmxlID0gbWF4O1xuXHRcdHNjcm9sbEZsYWcgPSB0cnVlO1xuXHR9XG5cblx0aWYgKHZpc2libGUgPT09IDApIHtcblx0XHRpZiAoZ2V0RmlsdGVyTW9kZS5jYWxsKHRoaXMpID09PSBGSUxURVJfTU9ERV9ESVNBQkxFRCkge1xuXHRcdFx0dGhpcy5zZXRPcHRpb24oXG5cdFx0XHRcdFwibWVzc2FnZXMuZW1wdHlPcHRpb25zXCIsXG5cdFx0XHRcdHRoaXMuZ2V0T3B0aW9uKFwibGFiZWxzLm5vLW9wdGlvbnMtYXZhaWxhYmxlXCIpLFxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXRPcHRpb24oXG5cdFx0XHRcdFwibWVzc2FnZXMuZW1wdHlPcHRpb25zXCIsXG5cdFx0XHRcdHRoaXMuZ2V0T3B0aW9uKFwibGFiZWxzLm5vLW9wdGlvbnMtZm91bmRcIiksXG5cdFx0XHQpO1xuXHRcdH1cblx0XHR0aGlzW25vT3B0aW9uc0F2YWlsYWJsZUVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5yZW1vdmUoXCJkLW5vbmVcIik7XG5cdH0gZWxzZSB7XG5cdFx0dGhpc1tub09wdGlvbnNBdmFpbGFibGVFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuYWRkKFwiZC1ub25lXCIpO1xuXHR9XG5cblx0Y29uc3Qgc3R5bGVzID0gZ2V0R2xvYmFsKCkuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzW29wdGlvbnNFbGVtZW50U3ltYm9sXSk7XG5cdGxldCBwYWRkaW5nID0gcGFyc2VJbnQoc3R5bGVzLmdldFByb3BlcnR5VmFsdWUoXCJwYWRkaW5nLXRvcFwiKSwgMTApO1xuXHRwYWRkaW5nICs9IHBhcnNlSW50KHN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKFwicGFkZGluZy1ib3R0b21cIiksIDEwKTtcblxuXHRsZXQgbWFyZ2luID0gcGFyc2VJbnQoc3R5bGVzLmdldFByb3BlcnR5VmFsdWUoXCJtYXJnaW4tdG9wXCIpLCAxMCk7XG5cdG1hcmdpbiArPSBwYXJzZUludChzdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZShcIm1hcmdpbi1ib3R0b21cIiksIDEwKTtcblxuXHRjb25zdCBjb250YWluZXJIZWlnaHQgPSBvcHRpb25IZWlnaHQgKyBwYWRkaW5nICsgbWFyZ2luO1xuXHRjb250YWluZXIuc3R5bGUuaGVpZ2h0ID0gYCR7Y29udGFpbmVySGVpZ2h0fXB4YDtcblxuXHRpZiAoc2Nyb2xsRmxhZyA9PT0gdHJ1ZSkge1xuXHRcdGNvbnRhaW5lci5zdHlsZS5vdmVyZmxvd1kgPSBcInNjcm9sbFwiO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnRhaW5lci5zdHlsZS5vdmVyZmxvd1kgPSBcImF1dG9cIjtcblx0fVxuXG5cdGNvbnN0IGRvbVJlY3QgPSB0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuXHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLndpZHRoID0gYCR7ZG9tUmVjdC53aWR0aH1weGA7XG5cdGNvbnRhaW5lci5zdHlsZS5vdmVyZmxvd1ggPSBcImF1dG9cIjtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IGRpcmVjdGlvblxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqL1xuZnVuY3Rpb24gYWN0aXZhdGVDdXJyZW50T3B0aW9uKGRpcmVjdGlvbikge1xuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHRsZXQgZm9jdXNlZCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKGBbJHtBVFRSSUJVVEVfUFJFRklYfWZvY3VzZWRdYCk7XG5cblx0aWYgKFxuXHRcdCEoZm9jdXNlZCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB8fFxuXHRcdGZvY3VzZWQubWF0Y2hlcyhcIltkYXRhLW1vbnN0ZXItdmlzaWJpbGl0eT1oaWRkZW5dXCIpXG5cdCkge1xuXHRcdGZvciAoY29uc3QgWywgZV0gb2YgT2JqZWN0LmVudHJpZXMoXG5cdFx0XHR0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbChgWyR7QVRUUklCVVRFX1JPTEV9PW9wdGlvbl1gKSxcblx0XHQpKSB7XG5cdFx0XHRpZiAoZS5tYXRjaGVzKFwiW2RhdGEtbW9uc3Rlci12aXNpYmlsaXR5PXZpc2libGVdXCIpKSB7XG5cdFx0XHRcdGZvY3VzZWQgPSBlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0aWYgKGRpcmVjdGlvbiA9PT0gRk9DVVNfRElSRUNUSU9OX0RPV04pIHtcblx0XHRcdHdoaWxlIChmb2N1c2VkLm5leHRTaWJsaW5nKSB7XG5cdFx0XHRcdGZvY3VzZWQgPSBmb2N1c2VkLm5leHRTaWJsaW5nO1xuXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRmb2N1c2VkIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiZcblx0XHRcdFx0XHRmb2N1c2VkLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSkgJiZcblx0XHRcdFx0XHRmb2N1c2VkLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSkgPT09IFwib3B0aW9uXCIgJiZcblx0XHRcdFx0XHRmb2N1c2VkLm1hdGNoZXMoXCJbZGF0YS1tb25zdGVyLXZpc2liaWxpdHk9dmlzaWJsZV1cIikgJiZcblx0XHRcdFx0XHRmb2N1c2VkLm1hdGNoZXMoXCI6bm90KFtkYXRhLW1vbnN0ZXItZmlsdGVyZWQ9dHJ1ZV0pXCIpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGxldCBmb3VuZCA9IGZhbHNlO1xuXHRcdFx0d2hpbGUgKGZvY3VzZWQucHJldmlvdXNTaWJsaW5nKSB7XG5cdFx0XHRcdGZvY3VzZWQgPSBmb2N1c2VkLnByZXZpb3VzU2libGluZztcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGZvY3VzZWQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJlxuXHRcdFx0XHRcdGZvY3VzZWQuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9ST0xFKSAmJlxuXHRcdFx0XHRcdGZvY3VzZWQuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9ST0xFKSA9PT0gXCJvcHRpb25cIiAmJlxuXHRcdFx0XHRcdGZvY3VzZWQubWF0Y2hlcyhcIltkYXRhLW1vbnN0ZXItdmlzaWJpbGl0eT12aXNpYmxlXVwiKSAmJlxuXHRcdFx0XHRcdGZvY3VzZWQubWF0Y2hlcyhcIjpub3QoW2RhdGEtbW9uc3Rlci1maWx0ZXJlZD10cnVlXSlcIilcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0Zm91bmQgPSB0cnVlO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoZm91bmQgPT09IGZhbHNlKSB7XG5cdFx0XHRcdGZvY3VzRmlsdGVyLmNhbGwodGhpcyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0bmV3IFByb2Nlc3NpbmcoKCkgPT4ge1xuXHRcdGlmIChmb2N1c2VkIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdHRoaXMuc2hhZG93Um9vdFxuXHRcdFx0XHQucXVlcnlTZWxlY3RvckFsbChgWyR7QVRUUklCVVRFX1BSRUZJWH1mb2N1c2VkXWApXG5cdFx0XHRcdC5mb3JFYWNoKChlKSA9PiB7XG5cdFx0XHRcdFx0ZS5yZW1vdmVBdHRyaWJ1dGUoYCR7QVRUUklCVVRFX1BSRUZJWH1mb2N1c2VkYCk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRmb2N1c2VkLmZvY3VzKCk7XG5cdFx0XHRmb2N1c2VkLnNldEF0dHJpYnV0ZShgJHtBVFRSSUJVVEVfUFJFRklYfWZvY3VzZWRgLCB0cnVlKTtcblx0XHR9XG5cdH0pXG5cdFx0LnJ1bigpXG5cdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGZpbHRlck9wdGlvbnMoKSB7XG5cdG5ldyBQcm9jZXNzaW5nKCgpID0+IHtcblx0XHRsZXQgZmlsdGVyVmFsdWU7XG5cblx0XHRzd2l0Y2ggKHRoaXMuZ2V0T3B0aW9uKFwiZmlsdGVyLnBvc2l0aW9uXCIpKSB7XG5cdFx0XHRjYXNlIEZJTFRFUl9QT1NJVElPTl9JTkxJTkU6XG5cdFx0XHRcdGlmICh0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdFx0XHRmaWx0ZXJWYWx1ZSA9IHRoaXNbaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbF0udmFsdWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgRklMVEVSX1BPU0lUSU9OX1BPUFBFUjpcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGlmICh0aGlzW3BvcHBlckZpbHRlckVsZW1lbnRTeW1ib2xdIGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCkge1xuXHRcdFx0XHRcdGZpbHRlclZhbHVlID0gdGhpc1twb3BwZXJGaWx0ZXJFbGVtZW50U3ltYm9sXS52YWx1ZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IG9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbihcIm9wdGlvbnNcIik7XG5cdFx0Zm9yIChjb25zdCBbaSwgb3B0aW9uXSBvZiBPYmplY3QuZW50cmllcyhvcHRpb25zKSkge1xuXHRcdFx0aWYgKG9wdGlvbi5sYWJlbC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoZmlsdGVyVmFsdWUpID09PSAtMSkge1xuXHRcdFx0XHR0aGlzLnNldE9wdGlvbihgb3B0aW9ucy4ke2l9LmZpbHRlcmVkYCwgXCJ0cnVlXCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5zZXRPcHRpb24oYG9wdGlvbnMuJHtpfS5maWx0ZXJlZGAsIHVuZGVmaW5lZCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KVxuXHRcdC5ydW4oKVxuXHRcdC50aGVuKCgpID0+IHtcblx0XHRcdG5ldyBQcm9jZXNzaW5nKDEwMCwgKCkgPT4ge1xuXHRcdFx0XHRjYWxjQW5kU2V0T3B0aW9uc0RpbWVuc2lvbi5jYWxsKHRoaXMpO1xuXHRcdFx0XHRmb2N1c0ZpbHRlci5jYWxsKHRoaXMpO1xuXHRcdFx0fSlcblx0XHRcdFx0LnJ1bigpXG5cdFx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0XHRcdH0pO1xuXHRcdH0pXG5cdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICovXG5mdW5jdGlvbiBoYW5kbGVGaWx0ZXJLZXlib2FyZEV2ZW50cyhldmVudCkge1xuXHRjb25zdCBzaGlmdEtleSA9IGV2ZW50Py5bXCJzaGlmdEtleVwiXTtcblxuXHRzd2l0Y2ggKGV2ZW50Py5bXCJjb2RlXCJdKSB7XG5cdFx0Y2FzZSBcIlRhYlwiOlxuXHRcdFx0YWN0aXZhdGVDdXJyZW50T3B0aW9uLmNhbGwodGhpcywgRk9DVVNfRElSRUNUSU9OX0RPV04pO1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJFc2NhcGVcIjpcblx0XHRcdHRvZ2dsZS5jYWxsKHRoaXMpO1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJUYWJcIiAmJiBzaGlmdEtleSA9PT0gdHJ1ZTpcblx0XHRjYXNlIFwiQXJyb3dVcFwiOlxuXHRcdFx0YWN0aXZhdGVDdXJyZW50T3B0aW9uLmNhbGwodGhpcywgRk9DVVNfRElSRUNUSU9OX1VQKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiVGFiXCIgJiYgIXNoaWZ0S2V5OlxuXHRcdGNhc2UgXCJBcnJvd0Rvd25cIjpcblx0XHRcdGFjdGl2YXRlQ3VycmVudE9wdGlvbi5jYWxsKHRoaXMsIEZPQ1VTX0RJUkVDVElPTl9ET1dOKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0aWYgKFxuXHRcdFx0XHR0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLmxhenlMb2FkXCIpID09PSB0cnVlICYmXG5cdFx0XHRcdHRoaXNbbGF6eUxvYWREb25lU3ltYm9sXSAhPT0gdHJ1ZVxuXHRcdFx0KSB7XG5cdFx0XHRcdHRoaXMuY2xpY2soKTtcblx0XHRcdH1cblxuXHRcdFx0aGFuZGxlRmlsdGVyS2V5RXZlbnRzLmNhbGwodGhpcyk7XG5cdH1cbn1cblxuLyoqXG4gKiBNZXRob2QgaGFuZGxlRmlsdGVyS2V5RXZlbnRzIGlzIHVzZWQgdG8gaGFuZGxlIGZpbHRlciBrZXkgZXZlbnRzLlxuICogRGVib3VuY2UgaXMgdXNlZCB0byBwcmV2ZW50IG11bHRpcGxlIGNhbGxzLlxuICpcbiAqIEBmdW5jdGlvblxuICogQG5hbWUgaGFuZGxlRmlsdGVyS2V5RXZlbnRzXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3ZvaWR9IFRoaXMgbWV0aG9kIGRvZXMgbm90IHJldHVybiBhbnl0aGluZy5cbiAqL1xuZnVuY3Rpb24gaGFuZGxlRmlsdGVyS2V5RXZlbnRzKCkge1xuXHRpZiAodGhpc1trZXlGaWx0ZXJFdmVudFN5bWJvbF0gaW5zdGFuY2VvZiBEZWFkTWFuc1N3aXRjaCkge1xuXHRcdHRyeSB7XG5cdFx0XHR0aGlzW2tleUZpbHRlckV2ZW50U3ltYm9sXS50b3VjaCgpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdGRlbGV0ZSB0aGlzW2tleUZpbHRlckV2ZW50U3ltYm9sXTtcblx0XHR9XG5cdH1cblxuXHR0aGlzW2tleUZpbHRlckV2ZW50U3ltYm9sXSA9IG5ldyBEZWFkTWFuc1N3aXRjaCgyMDAsICgpID0+IHtcblx0XHRpZiAoZ2V0RmlsdGVyTW9kZS5jYWxsKHRoaXMpICE9PSBGSUxURVJfTU9ERV9SRU1PVEUpIHtcblx0XHRcdGZpbHRlck9wdGlvbnMuY2FsbCh0aGlzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZmlsdGVyRnJvbVJlbW90ZS5jYWxsKHRoaXMpLmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRkZWxldGUgdGhpc1trZXlGaWx0ZXJFdmVudFN5bWJvbF07XG5cdH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGZpbHRlckZyb21SZW1vdGUoKSB7XG5cdGlmIChcblx0XHQhKHRoaXNbaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgJiZcblx0XHQhKHRoaXNbcG9wcGVyRmlsdGVyRWxlbWVudFN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudClcblx0KSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0c2hvdy5jYWxsKHRoaXMpO1xuXG5cdGNvbnN0IHVybCA9IHRoaXMuZ2V0T3B0aW9uKFwidXJsXCIpO1xuXHRpZiAoIXVybCkge1xuXHRcdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdFx0dGhpcyxcblx0XHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0XHRcIk1pc3NpbmcgVVJMIGZvciBSZW1vdGUgRmlsdGVyLlwiLFxuXHRcdCk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0bGV0IGZpbHRlclZhbHVlO1xuXG5cdHN3aXRjaCAodGhpcy5nZXRPcHRpb24oXCJmaWx0ZXIucG9zaXRpb25cIikpIHtcblx0XHRjYXNlIEZJTFRFUl9QT1NJVElPTl9JTkxJTkU6XG5cdFx0XHRpZiAodGhpc1tpbmxpbmVGaWx0ZXJFbGVtZW50U3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRcdGZpbHRlclZhbHVlID0gdGhpc1tpbmxpbmVGaWx0ZXJFbGVtZW50U3ltYm9sXS52YWx1ZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0fVxuXG5cdFx0XHRicmVhaztcblx0XHRjYXNlIEZJTFRFUl9QT1NJVElPTl9QT1BQRVI6XG5cdFx0ZGVmYXVsdDpcblx0XHRcdGlmICh0aGlzW3BvcHBlckZpbHRlckVsZW1lbnRTeW1ib2xdIGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCkge1xuXHRcdFx0XHRmaWx0ZXJWYWx1ZSA9IHRoaXNbcG9wcGVyRmlsdGVyRWxlbWVudFN5bWJvbF0udmFsdWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdH1cblx0fVxuXG5cdHJldHVybiBmaWx0ZXJGcm9tUmVtb3RlQnlWYWx1ZS5jYWxsKHRoaXMsIHVybCwgZmlsdGVyVmFsdWUpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVUkwodXJsLCB2YWx1ZSkge1xuXHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gXCJcIikge1xuXHRcdHZhbHVlID0gdGhpcy5nZXRPcHRpb24oXCJmaWx0ZXIuZGVmYXVsdFZhbHVlXCIpO1xuXHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSBcIlwiKSB7XG5cdFx0XHR2YWx1ZSA9IGRpc2FibGVkUmVxdWVzdE1hcmtlci50b1N0cmluZygpO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IGZvcm1hdHRlciA9IG5ldyBGb3JtYXR0ZXIoeyBmaWx0ZXI6IGVuY29kZVVSSSh2YWx1ZSkgfSk7XG5cdGNvbnN0IG9wZW5NYXJrZXIgPSB0aGlzLmdldE9wdGlvbihcImZpbHRlci5tYXJrZXIub3BlblwiKTtcblx0bGV0IGNsb3NlTWFya2VyID0gdGhpcy5nZXRPcHRpb24oXCJmaWx0ZXIubWFya2VyLmNsb3NlXCIpO1xuXHRpZiAoIWNsb3NlTWFya2VyKSB7XG5cdFx0Y2xvc2VNYXJrZXIgPSBvcGVuTWFya2VyO1xuXHR9XG5cblx0aWYgKG9wZW5NYXJrZXIgJiYgY2xvc2VNYXJrZXIpIHtcblx0XHRmb3JtYXR0ZXIuc2V0TWFya2VyKG9wZW5NYXJrZXIsIGNsb3NlTWFya2VyKTtcblx0fVxuXG5cdHJldHVybiBmb3JtYXR0ZXIuZm9ybWF0KHVybCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBvcHRpb25VcmxcbiAqIEBwYXJhbSB2YWx1ZVxuICogQHJldHVybnMge1Byb21pc2U8dW5rbm93bj59XG4gKi9cbmZ1bmN0aW9uIGZpbHRlckZyb21SZW1vdGVCeVZhbHVlKG9wdGlvblVybCwgdmFsdWUpIHtcblx0cmV0dXJuIG5ldyBQcm9jZXNzaW5nKCgpID0+IHtcblx0XHRsZXQgdXJsID0gZm9ybWF0VVJMLmNhbGwodGhpcywgb3B0aW9uVXJsLCB2YWx1ZSk7XG5cdFx0aWYgKHVybC5pbmRleE9mKGRpc2FibGVkUmVxdWVzdE1hcmtlci50b1N0cmluZygpKSAhPT0gLTEpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRmZXRjaEl0XG5cdFx0XHQuY2FsbCh0aGlzLCB1cmwsIHtcblx0XHRcdFx0ZGlzYWJsZUhpZGluZzogdHJ1ZSxcblx0XHRcdH0pXG5cdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdGNoZWNrT3B0aW9uU3RhdGUuY2FsbCh0aGlzKTtcblx0XHRcdFx0c2hvdy5jYWxsKHRoaXMpO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHR0aHJvdyBlO1xuXHRcdFx0fSk7XG5cdH0pXG5cdFx0LnJ1bigpXG5cdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHR0aHJvdyBlO1xuXHRcdH0pO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBoYW5kbGVPcHRpb25LZXlib2FyZEV2ZW50cyhldmVudCkge1xuXHRjb25zdCBzaGlmdEtleSA9IGV2ZW50Py5bXCJzaGlmdEtleVwiXTtcblxuXHRzd2l0Y2ggKGV2ZW50Py5bXCJjb2RlXCJdKSB7XG5cdFx0Y2FzZSBcIkVzY2FwZVwiOlxuXHRcdFx0dG9nZ2xlLmNhbGwodGhpcyk7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkVudGVyXCI6XG5cdFx0Y2FzZSBcIlNwYWNlXCI6XG5cdFx0XHRjb25zdCBwYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG5cdFx0XHRjb25zdCBlbGVtZW50ID0gcGF0aD8uWzBdO1xuXHRcdFx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0XHRjb25zdCBpbnB1dCA9IGVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpbnB1dFwiKTtcblx0XHRcdFx0aWYgKCFpbnB1dCkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRmaXJlRXZlbnQoaW5wdXQsIFwiY2xpY2tcIik7XG5cdFx0XHR9XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIFwiVGFiXCIgJiYgc2hpZnRLZXkgPT09IHRydWU6XG5cdFx0Y2FzZSBcIkFycm93VXBcIjpcblx0XHRcdGFjdGl2YXRlQ3VycmVudE9wdGlvbi5jYWxsKHRoaXMsIEZPQ1VTX0RJUkVDVElPTl9VUCk7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIFwiVGFiXCIgJiYgIXNoaWZ0S2V5OlxuXHRcdGNhc2UgXCJBcnJvd0xlZnRcIjpcblx0XHRjYXNlIFwiQXJyb3dSaWdodFwiOlxuXHRcdFx0Ly8gaGFuZGxlZCBieSB0cmVlIHNlbGVjdFxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkFycm93RG93blwiOlxuXHRcdFx0YWN0aXZhdGVDdXJyZW50T3B0aW9uLmNhbGwodGhpcywgRk9DVVNfRElSRUNUSU9OX0RPV04pO1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRjb25zdCBwID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG5cdFx0XHRpZiAocD8uWzBdIGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRmb2N1c0ZpbHRlci5jYWxsKHRoaXMpO1xuXHRcdFx0YnJlYWs7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRGaWx0ZXJNb2RlKCkge1xuXHRzd2l0Y2ggKHRoaXMuZ2V0T3B0aW9uKFwiZmlsdGVyLm1vZGVcIikpIHtcblx0XHRjYXNlIEZJTFRFUl9NT0RFX09QVElPTlM6XG5cdFx0XHRyZXR1cm4gRklMVEVSX01PREVfT1BUSU9OUztcblx0XHRjYXNlIEZJTFRFUl9NT0RFX1JFTU9URTpcblx0XHRcdHJldHVybiBGSUxURVJfTU9ERV9SRU1PVEU7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiBGSUxURVJfTU9ERV9ESVNBQkxFRDtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGJsdXJGaWx0ZXIoKSB7XG5cdGlmICghKHRoaXNbaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZiAoZ2V0RmlsdGVyTW9kZS5jYWxsKHRoaXMpID09PSBGSUxURVJfTU9ERV9ESVNBQkxFRCkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXNbcG9wcGVyRmlsdGVyQ29udGFpbmVyRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKTtcblx0dGhpc1twb3BwZXJGaWx0ZXJDb250YWluZXJFbGVtZW50U3ltYm9sXS5ibHVyKCk7XG5cblx0dGhpc1tpbmxpbmVGaWx0ZXJFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpO1xuXHR0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdLmJsdXIoKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGZvY3VzT3B0aW9uc1xuICovXG5mdW5jdGlvbiBmb2N1c1BvcHBlckZpbHRlcihmb2N1c09wdGlvbnMpIHtcblx0dGhpc1twb3BwZXJGaWx0ZXJDb250YWluZXJFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QucmVtb3ZlKFwiZC1ub25lXCIpO1xuXHR0aGlzW3BvcHBlckZpbHRlckVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5hZGQoXCJhY3RpdmVcIik7XG5cdHRoaXNbaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKTtcblx0dGhpc1tpbmxpbmVGaWx0ZXJFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuYWRkKFwiZC1ub25lXCIpO1xuXG5cdGlmICghKHRoaXNbcG9wcGVyRmlsdGVyRWxlbWVudFN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRcdHRoaXMsXG5cdFx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdFx0XCJNaXNzaW5nIFBvcHBlciBGaWx0ZXIgRWxlbWVudC5cIixcblx0XHQpO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIHZpc2liaWxpdHkgaXMgc2V0IHRvIHZpc2libGUsIGJlY2F1c2UgZm9jdXMoKSBkb2VzIG5vdCB3b3JrIG9uIGludmlzaWJsZSBlbGVtZW50c1xuXHQvLyBhbmQgdGhlIGNsYXNzIGRlZmluaXRpb24gaXMgYXNzaWduZWQgbGF0ZXIgaW4gdGhlIHByb2Nlc3Npbmdcblx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0aWYgKGZvY3VzT3B0aW9ucyA9PT0gdW5kZWZpbmVkIHx8IGZvY3VzT3B0aW9ucyA9PT0gbnVsbCkge1xuXHRcdFx0dGhpc1twb3BwZXJGaWx0ZXJFbGVtZW50U3ltYm9sXS5mb2N1cygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzW3BvcHBlckZpbHRlckVsZW1lbnRTeW1ib2xdLmZvY3VzKGZvY3VzT3B0aW9ucyk7XG5cdFx0fVxuXHR9LCAxMDApO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZm9jdXNPcHRpb25zXG4gKi9cbmZ1bmN0aW9uIGZvY3VzSW5saW5lRmlsdGVyKGZvY3VzT3B0aW9ucykge1xuXHRjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb24oXCJvcHRpb25zXCIpO1xuXHRpZiAoXG5cdFx0KCFpc0FycmF5KG9wdGlvbnMpIHx8IG9wdGlvbnMubGVuZ3RoID09PSAwKSAmJlxuXHRcdGdldEZpbHRlck1vZGUuY2FsbCh0aGlzKSAhPT0gRklMVEVSX01PREVfUkVNT1RFXG5cdCkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXNbcG9wcGVyRmlsdGVyQ29udGFpbmVyRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZChcImQtbm9uZVwiKTtcblx0dGhpc1tpbmxpbmVGaWx0ZXJFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuYWRkKFwiYWN0aXZlXCIpO1xuXHR0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5yZW1vdmUoXCJkLW5vbmVcIik7XG5cblx0Ly8gdmlzaWJpbGl0eSBpcyBzZXQgdG8gdmlzaWJsZSwgYmVjYXVzZSBmb2N1cygpIGRvZXMgbm90IHdvcmsgb24gaW52aXNpYmxlIGVsZW1lbnRzXG5cdC8vIGFuZCB0aGUgY2xhc3MgZGVmaW5pdGlvbiBpcyBhc3NpZ25lZCBsYXRlciBpbiB0aGUgcHJvY2Vzc2luZ1xuXHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRpZiAoZm9jdXNPcHRpb25zID09PSB1bmRlZmluZWQgfHwgZm9jdXNPcHRpb25zID09PSBudWxsKSB7XG5cdFx0XHR0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdLmZvY3VzKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXNbaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbF0uZm9jdXMoZm9jdXNPcHRpb25zKTtcblx0XHR9XG5cdH0sIDEwMCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZm9jdXNGaWx0ZXIoZm9jdXNPcHRpb25zKSB7XG5cdGlmIChnZXRGaWx0ZXJNb2RlLmNhbGwodGhpcykgPT09IEZJTFRFUl9NT0RFX0RJU0FCTEVEKSB7XG5cdFx0dGhpc1twb3BwZXJGaWx0ZXJDb250YWluZXJFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuYWRkKFwiZC1ub25lXCIpO1xuXHRcdHRoaXNbaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZChcImQtbm9uZVwiKTtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZiAodGhpcy5nZXRPcHRpb24oXCJmaWx0ZXIucG9zaXRpb25cIikgPT09IEZJTFRFUl9QT1NJVElPTl9JTkxJTkUpIHtcblx0XHRyZXR1cm4gZm9jdXNJbmxpbmVGaWx0ZXIuY2FsbCh0aGlzLCBmb2N1c09wdGlvbnMpO1xuXHR9XG5cblx0cmV0dXJuIGZvY3VzUG9wcGVyRmlsdGVyLmNhbGwodGhpcywgZm9jdXNPcHRpb25zKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7YXJyYXl9XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcbiAqL1xuZnVuY3Rpb24gZ2F0aGVyU3RhdGUoKSB7XG5cdGNvbnN0IHR5cGUgPSB0aGlzLmdldE9wdGlvbihcInR5cGVcIik7XG5cdGlmIChbXCJyYWRpb1wiLCBcImNoZWNrYm94XCJdLmluZGV4T2YodHlwZSkgPT09IC0xKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgdHlwZVwiKTtcblx0fVxuXG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdGNvbnN0IHNlbGVjdGlvbiA9IFtdO1xuXHRjb25zdCBlbGVtZW50cyA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKFxuXHRcdGBpbnB1dFt0eXBlPSR7dHlwZX1dOmNoZWNrZWRgLFxuXHQpO1xuXG5cdGZvciAoY29uc3QgZSBvZiBlbGVtZW50cykge1xuXHRcdHNlbGVjdGlvbi5wdXNoKHtcblx0XHRcdGxhYmVsOiBnZXRTZWxlY3Rpb25MYWJlbC5jYWxsKHRoaXMsIGUudmFsdWUpLFxuXHRcdFx0dmFsdWU6IGUudmFsdWUsXG5cdFx0fSk7XG5cdH1cblxuXHRzZXRTZWxlY3Rpb25cblx0XHQuY2FsbCh0aGlzLCBzZWxlY3Rpb24pXG5cdFx0LnRoZW4oKCkgPT4ge30pXG5cdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBgJHtlfWApO1xuXHRcdH0pO1xuXG5cdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLmNsb3NlT25TZWxlY3RcIikgPT09IHRydWUpIHtcblx0XHR0b2dnbGUuY2FsbCh0aGlzKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcbiAqL1xuZnVuY3Rpb24gY2xlYXJTZWxlY3Rpb24oKSB7XG5cdGNvbnN0IHR5cGUgPSB0aGlzLmdldE9wdGlvbihcInR5cGVcIik7XG5cdGlmIChbXCJyYWRpb1wiLCBcImNoZWNrYm94XCJdLmluZGV4T2YodHlwZSkgPT09IC0xKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgdHlwZVwiKTtcblx0fVxuXG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdHNldFNlbGVjdGlvblxuXHRcdC5jYWxsKHRoaXMsIFtdKVxuXHRcdC50aGVuKCgpID0+IHt9KVxuXHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgYCR7ZX1gKTtcblx0XHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBhcmVPcHRpb25zQXZhaWxhYmxlQW5kSW5pdCgpIHtcblx0Ly8gcHJldmVudCBtdWx0aXBsZSBjYWxsc1xuXHRpZiAodGhpc1thcmVPcHRpb25zQXZhaWxhYmxlQW5kSW5pdFN5bWJvbF0gPT09IHVuZGVmaW5lZCkge1xuXHRcdHRoaXNbYXJlT3B0aW9uc0F2YWlsYWJsZUFuZEluaXRTeW1ib2xdID0gMDtcblx0fVxuXG5cdGlmICh0aGlzW2FyZU9wdGlvbnNBdmFpbGFibGVBbmRJbml0U3ltYm9sXSA+IDApIHtcblx0XHR0aGlzW2FyZU9wdGlvbnNBdmFpbGFibGVBbmRJbml0U3ltYm9sXS0tO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0dGhpc1thcmVPcHRpb25zQXZhaWxhYmxlQW5kSW5pdFN5bWJvbF0rKztcblxuXHRjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb24oXCJvcHRpb25zXCIpO1xuXG5cdGlmIChcblx0XHRvcHRpb25zID09PSB1bmRlZmluZWQgfHxcblx0XHRvcHRpb25zID09PSBudWxsIHx8XG5cdFx0KGlzQXJyYXkob3B0aW9ucykgJiYgb3B0aW9ucy5sZW5ndGggPT09IDApXG5cdCkge1xuXHRcdHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwodGhpcywgXCJlbXB0eVwiKTtcblxuXHRcdC8vIGhpZGUuY2FsbCh0aGlzKTtcblxuXHRcdGxldCBtc2cgPSB0aGlzLmdldE9wdGlvbihcImxhYmVscy5uby1vcHRpb25zLWF2YWlsYWJsZVwiKTtcblxuXHRcdGlmIChcblx0XHRcdHRoaXMuZ2V0T3B0aW9uKFwidXJsXCIpICE9PSBudWxsICYmXG5cdFx0XHR0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLmxhenlMb2FkXCIpID09PSB0cnVlICYmXG5cdFx0XHR0aGlzW2xhenlMb2FkRG9uZVN5bWJvbF0gIT09IHRydWVcblx0XHQpIHtcblx0XHRcdG1zZyA9IHRoaXMuZ2V0T3B0aW9uKFwibGFiZWxzLmNsaWNrLXRvLWxvYWQtb3B0aW9uc1wiKTtcblx0XHR9XG5cblx0XHR0aGlzLnNldE9wdGlvbihcIm1lc3NhZ2VzLmNvbnRyb2xcIiwgbXNnKTtcblx0XHR0aGlzLnNldE9wdGlvbihcIm1lc3NhZ2VzLnN1bW1hcnlcIiwgXCJcIik7XG5cblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5lbXB0eVZhbHVlSWZOb09wdGlvbnNcIikgPT09IHRydWUpIHtcblx0XHRcdHRoaXMudmFsdWUgPSBcIlwiO1xuXHRcdH1cblx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBub09wdGlvbnNBdmFpbGFibGVNZXNzYWdlKTtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRjb25zdCBzZWxlY3Rpb25zID0gdGhpcy5nZXRPcHRpb24oXCJzZWxlY3Rpb25cIik7XG5cdGlmIChcblx0XHRzZWxlY3Rpb25zID09PSB1bmRlZmluZWQgfHxcblx0XHRzZWxlY3Rpb25zID09PSBudWxsIHx8XG5cdFx0c2VsZWN0aW9ucy5sZW5ndGggPT09IDBcblx0KSB7XG5cdFx0dGhpcy5zZXRPcHRpb24oXG5cdFx0XHRcIm1lc3NhZ2VzLmNvbnRyb2xcIixcblx0XHRcdHRoaXMuZ2V0T3B0aW9uKFwibGFiZWxzLnNlbGVjdC1hbi1vcHRpb25cIiksXG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHR0aGlzLnNldE9wdGlvbihcIm1lc3NhZ2VzLmNvbnRyb2xcIiwgXCJcIik7XG5cdH1cblxuXHR0aGlzLnNldE9wdGlvbihcIm1lc3NhZ2VzLnN1bW1hcnlcIiwgc2V0U3VtbWFyeUFuZENvbnRyb2xUZXh0LmNhbGwodGhpcykpO1xuXG5cdGxldCB1cGRhdGVkID0gZmFsc2U7XG5cdGxldCB2YWx1ZUNvdW50ZXIgPSAxO1xuXHRmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG5cdFx0aWYgKG9wdGlvbj8udmlzaWJpbGl0eSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRvcHRpb24udmlzaWJpbGl0eSA9IFwidmlzaWJsZVwiO1xuXHRcdFx0dXBkYXRlZCA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKG9wdGlvbj8udmFsdWUgPT09IHVuZGVmaW5lZCAmJiBvcHRpb24/LmxhYmVsID09PSB1bmRlZmluZWQpIHtcblx0XHRcdG9wdGlvbi52YWx1ZSA9IGAke3ZhbHVlQ291bnRlcisrfWA7XG5cdFx0XHRvcHRpb24ubGFiZWwgPSBvcHRpb24udmFsdWU7XG5cdFx0XHR1cGRhdGVkID0gdHJ1ZTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGlmIChvcHRpb24/LnZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdG9wdGlvbi52YWx1ZSA9IG9wdGlvbi5sYWJlbDtcblx0XHRcdHVwZGF0ZWQgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmIChvcHRpb24/LmxhYmVsID09PSB1bmRlZmluZWQpIHtcblx0XHRcdG9wdGlvbi5sYWJlbCA9IG9wdGlvbi52YWx1ZTtcblx0XHRcdHVwZGF0ZWQgPSB0cnVlO1xuXHRcdH1cblx0fVxuXG5cdGlmICh1cGRhdGVkKSB7XG5cdFx0dGhpcy5zZXRPcHRpb24oXCJvcHRpb25zXCIsIG9wdGlvbnMpO1xuXHR9XG5cblx0c2V0U3RhdHVzT3JSZW1vdmVCYWRnZXMuY2FsbCh0aGlzKTtcblxuXHRyZW1vdmVBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBub09wdGlvbnNBdmFpbGFibGVNZXNzYWdlKTtcblx0cmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGNoZWNrT3B0aW9uU3RhdGUoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdGNvbnN0IGVsZW1lbnRzID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1vcHRpb25dIGlucHV0YCxcblx0KTtcblxuXHRsZXQgc2VsZWN0aW9uID0gdGhpcy5nZXRPcHRpb24oXCJzZWxlY3Rpb25cIik7XG5cdGlmICghaXNBcnJheShzZWxlY3Rpb24pKSB7XG5cdFx0c2VsZWN0aW9uID0gW107XG5cdH1cblxuXHRjb25zdCBjaGVja2VkVmFsdWVzID0gc2VsZWN0aW9uLm1hcCgoYSkgPT4ge1xuXHRcdHJldHVybiBhLnZhbHVlO1xuXHR9KTtcblxuXHRmb3IgKGNvbnN0IGUgb2YgZWxlbWVudHMpIHtcblx0XHRpZiAoY2hlY2tlZFZhbHVlcy5pbmRleE9mKGUudmFsdWUpICE9PSAtMSkge1xuXHRcdFx0aWYgKGUuY2hlY2tlZCAhPT0gdHJ1ZSkgZS5jaGVja2VkID0gdHJ1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKGUuY2hlY2tlZCAhPT0gZmFsc2UpIGUuY2hlY2tlZCA9IGZhbHNlO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRWYWx1ZVRvU2VsZWN0aW9uKHZhbHVlKSB7XG5cdGNvbnN0IHNlbGVjdGlvbiA9IFtdO1xuXG5cdGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcblx0XHR2YWx1ZSA9IHZhbHVlXG5cdFx0XHQuc3BsaXQoXCIsXCIpXG5cdFx0XHQubWFwKChhKSA9PiB7XG5cdFx0XHRcdHJldHVybiBhLnRyaW0oKTtcblx0XHRcdH0pXG5cdFx0XHQuZmlsdGVyKChhKSA9PiB7XG5cdFx0XHRcdHJldHVybiBhICE9PSBcIlwiO1xuXHRcdFx0fSk7XG5cdH1cblxuXHRpZiAoaXNTdHJpbmcodmFsdWUpIHx8IGlzSW50ZWdlcih2YWx1ZSkpIHtcblx0XHRzZWxlY3Rpb24ucHVzaCh7XG5cdFx0XHRsYWJlbDogZ2V0U2VsZWN0aW9uTGFiZWwuY2FsbCh0aGlzLCB2YWx1ZSksXG5cdFx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcblx0XHRmb3IgKGNvbnN0IHYgb2YgdmFsdWUpIHtcblx0XHRcdHNlbGVjdGlvbi5wdXNoKHtcblx0XHRcdFx0bGFiZWw6IGdldFNlbGVjdGlvbkxhYmVsLmNhbGwodGhpcywgdiksXG5cdFx0XHRcdHZhbHVlOiB2LFxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0dmFsdWUgPSB2YWx1ZS5qb2luKFwiLFwiKTtcblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCB0eXBlXCIpO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRzZWxlY3Rpb246IHNlbGVjdGlvbixcblx0XHR2YWx1ZTogdmFsdWUsXG5cdH07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7YXJyYXl9IHNlbGVjdGlvblxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBjb252ZXJ0U2VsZWN0aW9uVG9WYWx1ZShzZWxlY3Rpb24pIHtcblx0Y29uc3QgdmFsdWUgPSBbXTtcblxuXHRpZiAoaXNBcnJheShzZWxlY3Rpb24pKSB7XG5cdFx0Zm9yIChjb25zdCBvYmogb2Ygc2VsZWN0aW9uKSB7XG5cdFx0XHRjb25zdCB2ID0gb2JqPy5bXCJ2YWx1ZVwiXTtcblx0XHRcdGlmICh2ICE9PSB1bmRlZmluZWQpIHZhbHVlLnB1c2godik7XG5cdFx0fVxuXHR9XG5cblx0aWYgKHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9IGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMSkge1xuXHRcdHJldHVybiB2YWx1ZS5wb3AoKTtcblx0fVxuXG5cdHJldHVybiB2YWx1ZS5qb2luKFwiLFwiKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHthcnJheX0gc2VsZWN0aW9uXG4gKiBAcmV0dXJuIHtQcm9taXNlfVxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqL1xuZnVuY3Rpb24gc2V0U2VsZWN0aW9uKHNlbGVjdGlvbikge1xuXHRpZiAoaXNTdHJpbmcoc2VsZWN0aW9uKSkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRWYWx1ZVRvU2VsZWN0aW9uLmNhbGwodGhpcywgc2VsZWN0aW9uKTtcblx0XHRzZWxlY3Rpb24gPSByZXN1bHQ/LnNlbGVjdGlvbjtcblx0fSBlbHNlIGlmIChzZWxlY3Rpb24gPT09IHVuZGVmaW5lZCkge1xuXHRcdHNlbGVjdGlvbiA9IFtdO1xuXHR9XG5cblx0dmFsaWRhdGVBcnJheShzZWxlY3Rpb24pO1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgc2VsZWN0aW9uLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIGwgPSBnZXRTZWxlY3Rpb25MYWJlbC5jYWxsKHRoaXMsIHNlbGVjdGlvbltpXS52YWx1ZSk7XG5cdFx0aWYgKGwgPT09IHNlbGVjdGlvbltpXS52YWx1ZSkge1xuXHRcdFx0bCA9IHNlbGVjdGlvbltpXS5sYWJlbDtcblx0XHR9XG5cblx0XHRzZWxlY3Rpb25baV0gPSB7XG5cdFx0XHRsYWJlbDogbCxcblx0XHRcdHZhbHVlOiBzZWxlY3Rpb25baV0udmFsdWUsXG5cdFx0fTtcblx0fVxuXG5cdHRoaXMuc2V0T3B0aW9uKFwic2VsZWN0aW9uXCIsIHNlbGVjdGlvbik7XG5cdGNoZWNrT3B0aW9uU3RhdGUuY2FsbCh0aGlzKTtcblxuXHR0cnkge1xuXHRcdHRoaXM/LnNldEZvcm1WYWx1ZSh0aGlzLnZhbHVlKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdH1cblxuXHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLXNlbGVjdGVkXCIsIHtcblx0XHRzZWxlY3Rpb24sXG5cdH0pO1xuXG5cdHJldHVybiBuZXcgUHJvY2Vzc2luZygoKSA9PiB7XG5cdFx0Y29uc3QgQ0xBU1NOQU1FID0gXCJzZWxlY3RlZFwiO1xuXG5cdFx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgbm90U2VsZWN0ZWQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbChcIjpub3QoOmNoZWNrZWQpXCIpO1xuXG5cdFx0aWYgKG5vdFNlbGVjdGVkKSB7XG5cdFx0XHRub3RTZWxlY3RlZC5mb3JFYWNoKChub2RlKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHBhcmVudCA9IG5vZGUuY2xvc2VzdChgWyR7QVRUUklCVVRFX1JPTEV9PW9wdGlvbl1gKTtcblx0XHRcdFx0aWYgKHBhcmVudCkge1xuXHRcdFx0XHRcdHBhcmVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTTkFNRSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoXCI6Y2hlY2tlZFwiKTtcblx0XHRpZiAoc2VsZWN0ZWQpIHtcblx0XHRcdHNlbGVjdGVkLmZvckVhY2goKG5vZGUpID0+IHtcblx0XHRcdFx0Y29uc3QgcGFyZW50ID0gbm9kZS5jbG9zZXN0KGBbJHtBVFRSSUJVVEVfUk9MRX09b3B0aW9uXWApO1xuXHRcdFx0XHRpZiAocGFyZW50KSB7XG5cdFx0XHRcdFx0cGFyZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NOQU1FKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KVxuXHRcdC5ydW4oKVxuXHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICogQHJldHVybiB7UHJvbWlzZX1cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdGhlIHJlc3VsdCBjYW5ub3QgYmUgcGFyc2VkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHJlc3BvbnNlXG4gKi9cbmZ1bmN0aW9uIGZldGNoRGF0YSh1cmwpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cdGlmICghdXJsKSB1cmwgPSB0aGlzLmdldE9wdGlvbihcInVybFwiKTtcblx0aWYgKCF1cmwpIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblxuXHRjb25zdCBmZXRjaE9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbihcImZldGNoXCIsIHt9KTtcblxuXHRsZXQgZGVsYXlXYXRjaCA9IGZhbHNlO1xuXG5cdC8vIGlmIGZldGNoIHNob3J0IHRpbWUsIGRvIG5vdCBzaG93IGxvYWRpbmcgYmFkZ2UsIGJlY2F1c2Ugb2YgZmxpY2tlcmluZ1xuXHRyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuXHRcdGlmIChkZWxheVdhdGNoID09PSB0cnVlKSByZXR1cm47XG5cdFx0c2V0U3RhdHVzT3JSZW1vdmVCYWRnZXMuY2FsbCh0aGlzLCBcImxvYWRpbmdcIik7XG5cdFx0ZGVsYXlXYXRjaCA9IHRydWU7XG5cdH0pO1xuXG5cdHVybCA9IGZvcm1hdFVSTC5jYWxsKHRoaXMsIHVybCk7XG5cblx0c2VsZltpc0xvYWRpbmdTeW1ib2xdID0gdHJ1ZTtcblx0Y29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5cdHJldHVybiBnbG9iYWxcblx0XHQuZmV0Y2godXJsLCBmZXRjaE9wdGlvbnMpXG5cdFx0LnRoZW4oKHJlc3BvbnNlKSA9PiB7XG5cdFx0XHRzZWxmW2lzTG9hZGluZ1N5bWJvbF0gPSBmYWxzZTtcblx0XHRcdGRlbGF5V2F0Y2ggPSB0cnVlO1xuXHRcdFx0Y29uc3QgY29udGVudFR5cGUgPSByZXNwb25zZS5oZWFkZXJzLmdldChcImNvbnRlbnQtdHlwZVwiKTtcblx0XHRcdGlmIChjb250ZW50VHlwZSAmJiBjb250ZW50VHlwZS5pbmRleE9mKFwiYXBwbGljYXRpb24vanNvblwiKSAhPT0gLTEpIHtcblx0XHRcdFx0cmV0dXJuIHJlc3BvbnNlLnRleHQoKTtcblx0XHRcdH1cblxuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihgdW5zdXBwb3J0ZWQgcmVzcG9uc2UgJHtjb250ZW50VHlwZX1gKTtcblx0XHR9KVxuXHRcdC50aGVuKCh0ZXh0KSA9PiB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKEpTT04ucGFyc2UoU3RyaW5nKHRleHQpKSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ0aGUgcmVzdWx0IGNhbm5vdCBiZSBwYXJzZWQsIGNoZWNrIHRoZSBVUkxcIik7XG5cdFx0XHR9XG5cdFx0fSlcblx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdHNlbGZbaXNMb2FkaW5nU3ltYm9sXSA9IGZhbHNlO1xuXHRcdFx0ZGVsYXlXYXRjaCA9IHRydWU7XG5cdFx0XHR0aHJvdyBlO1xuXHRcdH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGhpZGUoKSB7XG5cdHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuXHRzZXRTdGF0dXNPclJlbW92ZUJhZGdlcy5jYWxsKHRoaXMsIFwiY2xvc2VkXCIpO1xuXHRyZW1vdmVBdHRyaWJ1dGVUb2tlbih0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXSwgXCJjbGFzc1wiLCBcIm9wZW5cIik7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc2hvdygpIHtcblx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZGlzYWJsZWRcIiwgdW5kZWZpbmVkKSA9PT0gdHJ1ZSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmICh0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmRpc3BsYXkgPT09IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSykge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGZvY3VzRmlsdGVyLmNhbGwodGhpcyk7XG5cblx0Y29uc3QgbGF6eUxvYWRGbGFnID1cblx0XHR0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLmxhenlMb2FkXCIpICYmIHRoaXNbbGF6eUxvYWREb25lU3ltYm9sXSAhPT0gdHJ1ZTtcblxuXHRpZiAobGF6eUxvYWRGbGFnID09PSB0cnVlKSB7XG5cdFx0dGhpc1tsYXp5TG9hZERvbmVTeW1ib2xdID0gdHJ1ZTtcblx0XHRzZXRTdGF0dXNPclJlbW92ZUJhZGdlcy5jYWxsKHRoaXMsIFwibG9hZGluZ1wiKTtcblxuXHRcdG5ldyBQcm9jZXNzaW5nKDIwMCwgKCkgPT4ge1xuXHRcdFx0dGhpcy5mZXRjaCgpXG5cdFx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0XHRjaGVja09wdGlvblN0YXRlLmNhbGwodGhpcyk7XG5cdFx0XHRcdFx0cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcblx0XHRcdFx0XHRcdHNob3cuY2FsbCh0aGlzKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHRcdFx0XHRzZXRTdGF0dXNPclJlbW92ZUJhZGdlcy5jYWxsKHRoaXMsIFwiZXJyb3JcIik7XG5cdFx0XHRcdH0pO1xuXHRcdH0pXG5cdFx0XHQucnVuKClcblx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdFx0XHRzZXRTdGF0dXNPclJlbW92ZUJhZGdlcy5jYWxsKHRoaXMsIFwiZXJyb3JcIik7XG5cdFx0XHR9KTtcblxuXHRcdHJldHVybjtcblx0fVxuXG5cdGNvbnN0IGhhc1BvcHBlckZpbHRlckZsYWcgPVxuXHRcdHRoaXMuZ2V0T3B0aW9uKFwiZmlsdGVyLnBvc2l0aW9uXCIpID09PSBGSUxURVJfUE9TSVRJT05fUE9QUEVSICYmXG5cdFx0Z2V0RmlsdGVyTW9kZS5jYWxsKHRoaXMpICE9PSBGSUxURVJfTU9ERV9ESVNBQkxFRDtcblxuXHRjb25zdCBvcHRpb25zID0gZ2V0T3B0aW9uRWxlbWVudHMuY2FsbCh0aGlzKTtcblx0aWYgKG9wdGlvbnMubGVuZ3RoID09PSAwICYmIGhhc1BvcHBlckZpbHRlckZsYWcgPT09IGZhbHNlKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcblx0dGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ID0gU1RZTEVfRElTUExBWV9NT0RFX0JMT0NLO1xuXHRzZXRTdGF0dXNPclJlbW92ZUJhZGdlcy5jYWxsKHRoaXMsIFwib3BlblwiKTtcblxuXHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXSwgXCJjbGFzc1wiLCBcIm9wZW5cIik7XG5cblx0bmV3IFByb2Nlc3NpbmcoKCkgPT4ge1xuXHRcdGNhbGNBbmRTZXRPcHRpb25zRGltZW5zaW9uLmNhbGwodGhpcyk7XG5cdFx0Zm9jdXNGaWx0ZXIuY2FsbCh0aGlzKTtcblx0XHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLnJlbW92ZVByb3BlcnR5KFwidmlzaWJpbGl0eVwiKTtcblx0XHR1cGRhdGVQb3BwZXIuY2FsbCh0aGlzKTtcblx0fSlcblx0XHQucnVuKClcblx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gdG9nZ2xlKCkge1xuXHRpZiAodGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ID09PSBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0spIHtcblx0XHRoaWRlLmNhbGwodGhpcyk7XG5cdH0gZWxzZSB7XG5cdFx0c2hvdy5jYWxsKHRoaXMpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBmaXJlcyBtb25zdGVyLXNlbGVjdGlvbi1yZW1vdmVkXG4gKiBAZmlyZXMgbW9uc3Rlci1zZWxlY3Rpb24tY2xlYXJlZFxuICovXG5mdW5jdGlvbiBpbml0RXZlbnRIYW5kbGVyKCkge1xuXHRjb25zdCBzZWxmID0gdGhpcztcblxuXHQvKipcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICovXG5cdHNlbGZbY2xlYXJPcHRpb25FdmVudEhhbmRsZXJdID0gKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgZWxlbWVudCA9IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KFxuXHRcdFx0ZXZlbnQsXG5cdFx0XHRBVFRSSUJVVEVfUk9MRSxcblx0XHRcdFwicmVtb3ZlLWJhZGdlXCIsXG5cdFx0KTtcblxuXHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdGNvbnN0IGJhZGdlID0gZmluZENsb3Nlc3RCeUF0dHJpYnV0ZShlbGVtZW50LCBBVFRSSUJVVEVfUk9MRSwgXCJiYWRnZVwiKTtcblx0XHRcdGlmIChiYWRnZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRcdGNvbnN0IHZhbHVlID0gYmFkZ2UuZ2V0QXR0cmlidXRlKGAke0FUVFJJQlVURV9QUkVGSVh9dmFsdWVgKTtcblxuXHRcdFx0XHRsZXQgc2VsZWN0aW9uID0gc2VsZi5nZXRPcHRpb24oXCJzZWxlY3Rpb25cIik7XG5cdFx0XHRcdHNlbGVjdGlvbiA9IHNlbGVjdGlvbi5maWx0ZXIoKGIpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdmFsdWUgIT09IGIudmFsdWU7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHNldFNlbGVjdGlvblxuXHRcdFx0XHRcdC5jYWxsKHNlbGYsIHNlbGVjdGlvbilcblx0XHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0XHRmaXJlQ3VzdG9tRXZlbnQoc2VsZiwgXCJtb25zdGVyLXNlbGVjdGlvbi1yZW1vdmVkXCIsIHtcblx0XHRcdFx0XHRcdFx0dmFsdWUsXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4oc2VsZiwgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG5cdCAqL1xuXHRzZWxmW2Nsb3NlRXZlbnRIYW5kbGVyXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IHBhdGggPSBldmVudC5jb21wb3NlZFBhdGgoKTtcblxuXHRcdGZvciAoY29uc3QgWywgZWxlbWVudF0gb2YgT2JqZWN0LmVudHJpZXMocGF0aCkpIHtcblx0XHRcdGlmIChlbGVtZW50ID09PSBzZWxmKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cdFx0aGlkZS5jYWxsKHNlbGYpO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKi9cblx0c2VsZltpbnB1dEV2ZW50SGFuZGxlcl0gPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBwYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG5cdFx0Y29uc3QgZWxlbWVudCA9IHBhdGg/LlswXTtcblxuXHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdGlmIChcblx0XHRcdFx0ZWxlbWVudC5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUpICYmXG5cdFx0XHRcdGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9ST0xFKSA9PT0gXCJvcHRpb24tY29udHJvbFwiXG5cdFx0XHQpIHtcblx0XHRcdFx0ZmlyZUN1c3RvbUV2ZW50KHNlbGYsIFwibW9uc3Rlci1jaGFuZ2VcIiwge1xuXHRcdFx0XHRcdHR5cGU6IGV2ZW50LnR5cGUsXG5cdFx0XHRcdFx0dmFsdWU6IGVsZW1lbnQudmFsdWUsXG5cdFx0XHRcdFx0Y2hlY2tlZDogZWxlbWVudC5jaGVja2VkLFxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdGVsZW1lbnQuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9ST0xFKSAmJlxuXHRcdFx0XHRlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSkgPT09IFwiZmlsdGVyXCJcblx0XHRcdCkge1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHQvKipcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICovXG5cdHNlbGZbY2hhbmdlRXZlbnRIYW5kbGVyXSA9IChldmVudCkgPT4ge1xuXHRcdGdhdGhlclN0YXRlLmNhbGwoc2VsZik7XG5cdFx0ZmlyZUN1c3RvbUV2ZW50KHNlbGYsIFwibW9uc3Rlci1jaGFuZ2VkXCIsIGV2ZW50Py5kZXRhaWwpO1xuXHR9O1xuXG5cdHNlbGZba2V5RXZlbnRIYW5kbGVyXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IHBhdGggPSBldmVudC5jb21wb3NlZFBhdGgoKTtcblx0XHRjb25zdCBlbGVtZW50ID0gcGF0aC5zaGlmdCgpO1xuXG5cdFx0bGV0IHJvbGU7XG5cblx0XHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUpKSB7XG5cdFx0XHRcdHJvbGUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSk7XG5cdFx0XHR9IGVsc2UgaWYgKGVsZW1lbnQgPT09IHRoaXMpIHtcblx0XHRcdFx0c2hvdy5jYWxsKHRoaXMpO1xuXHRcdFx0XHQvLyBmb2N1c0ZpbHRlci5jYWxsKHNlbGYpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgZSA9IGVsZW1lbnQuY2xvc2VzdChgWyR7QVRUUklCVVRFX1JPTEV9XWApO1xuXHRcdFx0XHRpZiAoZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIGUuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9ST0xFKSkge1xuXHRcdFx0XHRcdHJvbGUgPSBlLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHN3aXRjaCAocm9sZSkge1xuXHRcdFx0Y2FzZSBcImZpbHRlclwiOlxuXHRcdFx0XHRoYW5kbGVGaWx0ZXJLZXlib2FyZEV2ZW50cy5jYWxsKHNlbGYsIGV2ZW50KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwib3B0aW9uLWxhYmVsXCI6XG5cdFx0XHRjYXNlIFwib3B0aW9uLWNvbnRyb2xcIjpcblx0XHRcdGNhc2UgXCJvcHRpb25cIjpcblx0XHRcdFx0aGFuZGxlT3B0aW9uS2V5Ym9hcmRFdmVudHMuY2FsbChzZWxmLCBldmVudCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImNvbnRyb2xcIjpcblx0XHRcdGNhc2UgXCJ0b2dnbGVcIjpcblx0XHRcdFx0aGFuZGxlVG9nZ2xlS2V5Ym9hcmRFdmVudHMuY2FsbChzZWxmLCBldmVudCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fTtcblxuXHRjb25zdCB0eXBlcyA9IHNlbGYuZ2V0T3B0aW9uKFwidG9nZ2xlRXZlbnRUeXBlXCIsIFtcImNsaWNrXCJdKTtcblxuXHRmb3IgKGNvbnN0IFssIHR5cGVdIG9mIE9iamVjdC5lbnRyaWVzKHR5cGVzKSkge1xuXHRcdHNlbGZbY29udHJvbEVsZW1lbnRTeW1ib2xdXG5cdFx0XHQucXVlcnlTZWxlY3RvcihgWyR7QVRUUklCVVRFX1JPTEV9PVwiY29udGFpbmVyXCJdYClcblx0XHRcdC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGZ1bmN0aW9uIChldmVudCkge1xuXHRcdFx0XHRjb25zdCBlbGVtZW50ID0gZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoXG5cdFx0XHRcdFx0ZXZlbnQsXG5cdFx0XHRcdFx0QVRUUklCVVRFX1JPTEUsXG5cdFx0XHRcdFx0XCJyZW1vdmUtYmFkZ2VcIixcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRvZ2dsZS5jYWxsKHNlbGYpO1xuXHRcdFx0fSk7XG5cblx0XHRzZWxmW2NvbnRyb2xFbGVtZW50U3ltYm9sXVxuXHRcdFx0LnF1ZXJ5U2VsZWN0b3IoYFske0FUVFJJQlVURV9ST0xFfT1cInN0YXR1cy1vci1yZW1vdmUtYmFkZ2VzXCJdYClcblx0XHRcdC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGZ1bmN0aW9uIChldmVudCkge1xuXHRcdFx0XHRpZiAoc2VsZi5nZXRPcHRpb24oXCJkaXNhYmxlZFwiLCB1bmRlZmluZWQpID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgcGF0aCA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpO1xuXHRcdFx0XHRjb25zdCBlbGVtZW50ID0gcGF0aD8uWzBdO1xuXHRcdFx0XHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRcdFx0Y29uc3QgY29udHJvbCA9IGVsZW1lbnQuY2xvc2VzdChcblx0XHRcdFx0XHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09XCJzdGF0dXMtb3ItcmVtb3ZlLWJhZGdlc1wiXWAsXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRpZiAoY29udHJvbCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRcdFx0XHRpZiAoY29udHJvbC5jbGFzc0xpc3QuY29udGFpbnMoXCJjbGVhclwiKSkge1xuXHRcdFx0XHRcdFx0XHRjbGVhclNlbGVjdGlvbi5jYWxsKHNlbGYpO1xuXG5cdFx0XHRcdFx0XHRcdGZpcmVDdXN0b21FdmVudChzZWxmLCBcIm1vbnN0ZXItc2VsZWN0aW9uLWNsZWFyZWRcIiwge30pO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgZWxlbWVudCA9IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KFxuXHRcdFx0XHRcdFx0XHRcdGV2ZW50LFxuXHRcdFx0XHRcdFx0XHRcdEFUVFJJQlVURV9ST0xFLFxuXHRcdFx0XHRcdFx0XHRcdFwicmVtb3ZlLWJhZGdlXCIsXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHR0b2dnbGUuY2FsbChzZWxmKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0Ly8gYmFkZ2UsIHNlbGVjdGlvblxuXHRcdHNlbGYuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBzZWxmW2NsZWFyT3B0aW9uRXZlbnRIYW5kbGVyXSk7XG5cdH1cblxuXHRzZWxmLmFkZEV2ZW50TGlzdGVuZXIoXCJtb25zdGVyLWNoYW5nZVwiLCBzZWxmW2NoYW5nZUV2ZW50SGFuZGxlcl0pO1xuXHRzZWxmLmFkZEV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLCBzZWxmW2lucHV0RXZlbnRIYW5kbGVyXSk7XG5cdHNlbGYuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgc2VsZltrZXlFdmVudEhhbmRsZXJdKTtcblxuXHRyZXR1cm4gc2VsZjtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7U2VsZWN0fVxuICovXG5mdW5jdGlvbiBzZXRTdGF0dXNPclJlbW92ZUJhZGdlcyhzdWdnZXN0aW9uKSB7XG5cdHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG5cdFx0Y29uc3Qgc2VsZWN0aW9uID0gdGhpcy5nZXRPcHRpb24oXCJzZWxlY3Rpb25cIik7XG5cblx0XHRjb25zdCBjbGVhckFsbEZsYWcgPVxuXHRcdFx0aXNBcnJheShzZWxlY3Rpb24pICYmXG5cdFx0XHRzZWxlY3Rpb24ubGVuZ3RoID4gMCAmJlxuXHRcdFx0dGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5jbGVhckFsbFwiKSA9PT0gdHJ1ZTtcblxuXHRcdGNvbnN0IGN1cnJlbnQgPSB0aGlzLmdldE9wdGlvbihcImNsYXNzZXMuc3RhdHVzT3JSZW1vdmVCYWRnZVwiKTtcblxuXHRcdGlmIChzdWdnZXN0aW9uID09PSBcImVycm9yXCIpIHtcblx0XHRcdGlmIChjdXJyZW50ICE9PSBcImVycm9yXCIpIHtcblx0XHRcdFx0dGhpcy5zZXRPcHRpb24oXCJjbGFzc2VzLnN0YXR1c09yUmVtb3ZlQmFkZ2VcIiwgXCJlcnJvclwiKTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAodGhpc1tpc0xvYWRpbmdTeW1ib2xdID09PSB0cnVlKSB7XG5cdFx0XHRpZiAoY3VycmVudCAhPT0gXCJsb2FkaW5nXCIpIHtcblx0XHRcdFx0dGhpcy5zZXRPcHRpb24oXCJjbGFzc2VzLnN0YXR1c09yUmVtb3ZlQmFkZ2VcIiwgXCJsb2FkaW5nXCIpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChzdWdnZXN0aW9uID09PSBcImxvYWRpbmdcIikge1xuXHRcdFx0aWYgKGN1cnJlbnQgIT09IFwibG9hZGluZ1wiKSB7XG5cdFx0XHRcdHRoaXMuc2V0T3B0aW9uKFwiY2xhc3Nlcy5zdGF0dXNPclJlbW92ZUJhZGdlXCIsIFwibG9hZGluZ1wiKTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoY2xlYXJBbGxGbGFnKSB7XG5cdFx0XHRpZiAoY3VycmVudCAhPT0gXCJjbGVhclwiKSB7XG5cdFx0XHRcdHRoaXMuc2V0T3B0aW9uKFwiY2xhc3Nlcy5zdGF0dXNPclJlbW92ZUJhZGdlXCIsIFwiY2xlYXJcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXNbY29udHJvbEVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5jb250YWlucyhcIm9wZW5cIikpIHtcblx0XHRcdGlmIChjdXJyZW50ICE9PSBcIm9wZW5cIikge1xuXHRcdFx0XHR0aGlzLnNldE9wdGlvbihcImNsYXNzZXMuc3RhdHVzT3JSZW1vdmVCYWRnZVwiLCBcIm9wZW5cIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwib3B0aW9uc1wiKTtcblx0XHRpZiAoXG5cdFx0XHRvcHRpb25zID09PSB1bmRlZmluZWQgfHxcblx0XHRcdG9wdGlvbnMgPT09IG51bGwgfHxcblx0XHRcdChpc0FycmF5KG9wdGlvbnMpICYmIG9wdGlvbnMubGVuZ3RoID09PSAwKVxuXHRcdCkge1xuXHRcdFx0aWYgKGN1cnJlbnQgIT09IFwiZW1wdHlcIikge1xuXHRcdFx0XHR0aGlzLnNldE9wdGlvbihcImNsYXNzZXMuc3RhdHVzT3JSZW1vdmVCYWRnZVwiLCBcImVtcHR5XCIpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChzdWdnZXN0aW9uKSB7XG5cdFx0XHRpZiAoY3VycmVudCAhPT0gc3VnZ2VzdGlvbikge1xuXHRcdFx0XHR0aGlzLnNldE9wdGlvbihcImNsYXNzZXMuc3RhdHVzT3JSZW1vdmVCYWRnZVwiLCBzdWdnZXN0aW9uKTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cdH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtTZWxlY3R9XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdHRoaXNbY29udHJvbEVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1jb250cm9sXWAsXG5cdCk7XG5cdHRoaXNbc2VsZWN0aW9uRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PXNlbGVjdGlvbl1gLFxuXHQpO1xuXHR0aGlzW2NvbnRhaW5lckVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1jb250YWluZXJdYCxcblx0KTtcblx0dGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09cG9wcGVyXWAsXG5cdCk7XG5cdHRoaXNbaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWZpbHRlcl1bbmFtZT1cImlubGluZS1maWx0ZXJcIl1gLFxuXHQpO1xuXHR0aGlzW3BvcHBlckZpbHRlckVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1maWx0ZXJdW25hbWU9XCJwb3BwZXItZmlsdGVyXCJdYCxcblx0KTtcblx0dGhpc1twb3BwZXJGaWx0ZXJDb250YWluZXJFbGVtZW50U3ltYm9sXSA9XG5cdFx0dGhpc1twb3BwZXJGaWx0ZXJFbGVtZW50U3ltYm9sXS5wYXJlbnRFbGVtZW50O1xuXHR0aGlzW29wdGlvbnNFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09b3B0aW9uc11gLFxuXHQpO1xuXHR0aGlzW25vT3B0aW9uc0F2YWlsYWJsZUVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1cIm5vLW9wdGlvbnNcIl1gLFxuXHQpO1xuXHR0aGlzW3N0YXR1c09yUmVtb3ZlQmFkZ2VzRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PXN0YXR1cy1vci1yZW1vdmUtYmFkZ2VzXWAsXG5cdCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gdXBkYXRlUG9wcGVyKCkge1xuXHRpZiAodGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ICE9PSBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0spIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZiAodGhpcy5nZXRPcHRpb24oXCJkaXNhYmxlZFwiLCBmYWxzZSkgPT09IHRydWUpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRuZXcgUHJvY2Vzc2luZygoKSA9PiB7XG5cdFx0Y2FsY0FuZFNldE9wdGlvbnNEaW1lbnNpb24uY2FsbCh0aGlzKTtcblx0XHRwb3NpdGlvblBvcHBlci5jYWxsKFxuXHRcdFx0dGhpcyxcblx0XHRcdHRoaXNbY29udHJvbEVsZW1lbnRTeW1ib2xdLFxuXHRcdFx0dGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXSxcblx0XHRcdHRoaXMuZ2V0T3B0aW9uKFwicG9wcGVyXCIsIHt9KSxcblx0XHQpO1xuXHR9KVxuXHRcdC5ydW4oKVxuXHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHR9KTtcblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuICAgICAgICA8dGVtcGxhdGUgaWQ9XCJvcHRpb25zXCI+XG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwib3B0aW9uXCIgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1maWx0ZXJlZCBwYXRoOm9wdGlvbnMuZmlsdGVyZWQsXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci12aXNpYmlsaXR5IHBhdGg6b3B0aW9ucy52aXNpYmlsaXR5XCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIHBhcnQ9XCJvcHRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGRhdGEtbW9uc3Rlci1yb2xlPVwib3B0aW9uLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJcbiAgICAgICAgICAgIHR5cGUgcGF0aDp0eXBlLFxuICAgICAgICAgICAgcm9sZSBwYXRoOnJvbGUsXG4gICAgICAgICAgICB2YWx1ZSBwYXRoOm9wdGlvbnMgfCBpbmRleDp2YWx1ZSwgXG4gICAgICAgICAgICBuYW1lIHBhdGg6bmFtZSwgXG4gICAgICAgICAgICBwYXJ0IHBhdGg6dHlwZSB8IHByZWZpeDpvcHRpb24tIHwgc3VmZml4OiBmb3JtLFxuICAgICAgICAgICAgY2xhc3MgcGF0aDpvcHRpb25zLmNsYXNzIFxuICAgICAgICAgICAgXCIgdGFiaW5kZXg9XCItMVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpvcHRpb25zIHwgaW5kZXg6bGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQ9XCJvcHRpb24tbGFiZWxcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGVtcGxhdGU+XG5cbiAgICAgICAgPHRlbXBsYXRlIGlkPVwic2VsZWN0aW9uXCI+XG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiYmFkZ2VcIlxuICAgICAgICAgICAgICAgICBwYXJ0PVwiYmFkZ2VcIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItdmFsdWUgcGF0aDpzZWxlY3Rpb24gfCBpbmRleDp2YWx1ZSwgXG4gICAgICAgICAgICAgICAgIGNsYXNzIHBhdGg6Y2xhc3NlcyB8IGluZGV4OmJhZGdlLCBcbiAgICAgICAgcGFydCBwYXRoOnR5cGUgfCBzdWZmaXg6LW9wdGlvbiB8IHByZWZpeDogZm9ybS1cIiB0YWJpbmRleD1cIi0xXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6c2VsZWN0aW9uIHwgaW5kZXg6bGFiZWxcIiBwYXJ0PVwiYmFkZ2UtbGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJiYWRnZS1sYWJlbFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgcGFydD1cInJlbW92ZS1iYWRnZVwiIGRhdGEtbW9uc3Rlci1zZWxlY3QtdGhpc1xuICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJjbGFzcyBwYXRoOmZlYXR1cmVzLmNsZWFyIHwgPzo6aGlkZGVuIFwiXG4gICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cInJlbW92ZS1iYWRnZVwiIHRhYmluZGV4PVwiLTFcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3RlbXBsYXRlPlxuXG4gICAgICAgIDxzbG90IGNsYXNzPVwiaGlkZGVuXCI+PC9zbG90PlxuXG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250cm9sXCIgcGFydD1cImNvbnRyb2xcIiB0YWJpbmRleD1cIjBcIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICBcXCR7c2VsZWN0ZWR9XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInBvcHBlclwiIHBhcnQ9XCJwb3BwZXJcIiB0YWJpbmRleD1cIi0xXCIgY2xhc3M9XCJtb25zdGVyLWNvbG9yLXByaW1hcnktMVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcHRpb24tZmlsdGVyLWNvbnRyb2xcIiByb2xlPVwic2VhcmNoXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHJvbGU9XCJzZWFyY2hib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydD1cInBvcHBlci1maWx0ZXJcIiBuYW1lPVwicG9wcGVyLWZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cImZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBwYXJ0PVwiY29udGVudFwiIGNsYXNzPVwiZmxleFwiIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpjb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgcGFydD1cIm9wdGlvbnNcIiBkYXRhLW1vbnN0ZXItcm9sZT1cIm9wdGlvbnNcIiBkYXRhLW1vbnN0ZXItaW5zZXJ0PVwib3B0aW9ucyBwYXRoOm9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IHBhcnQ9XCJuby1vcHRpb25zXCIgZGF0YS1tb25zdGVyLXJvbGU9XCJuby1vcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDptZXNzYWdlcy5lbXB0eU9wdGlvbnNcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBwYXJ0PVwic3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNcIiBkYXRhLW1vbnN0ZXItcm9sZT1cInN0YXR1cy1vci1yZW1vdmUtYmFkZ2VzXCJcbiAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJjbGFzcyBwYXRoOmNsYXNzZXMuc3RhdHVzT3JSZW1vdmVCYWRnZVwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICBgO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoU2VsZWN0KTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIDIwMjQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICovXG5cbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0VSUk9STUVTU0FHRSB9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBQb3BwZXJTdHlsZVNoZWV0IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBQb3BwZXJTdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcblx0UG9wcGVyU3R5bGVTaGVldC5pbnNlcnRSdWxlKFxuXHRcdGBcbkBsYXllciBwb3BwZXIgeyBcbltkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3V0bGluZTpub25lO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXh7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9Omhvc3R7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6YmxvY2t9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPXBvcHBlcl17YWxpZ24tY29udGVudDpjZW50ZXI7YmFja2dyb3VuZDp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7ZGlzcGxheTpub25lO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2xlZnQ6MDtwYWRkaW5nOjEuMWVtO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3dpZHRoOi1tb3otbWF4LWNvbnRlbnQ7d2lkdGg6bWF4LWNvbnRlbnQ7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtbW9kYWwpfWRpdltkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXJdIGRpdltkYXRhLW1vbnN0ZXItcm9sZT1hcnJvd117YmFja2dyb3VuZDp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7aGVpZ2h0OmNhbGMobWF4KHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpLCAtMSAqIHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpKSoyKTtwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOmNhbGMobWF4KHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpLCAtMSAqIHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpKSoyKTt6LWluZGV4Oi0xfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246cmVsYXRpdmV9IFxufWAsXG5cdFx0MCxcblx0KTtcbn0gY2F0Y2ggKGUpIHtcblx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0ZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKSxcblx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdGUgKyBcIlwiLFxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuLFxuXHRyZW1vdmVBdHRyaWJ1dGVUb2tlbixcbn0gZnJvbSBcIi4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX1JPTEUgfSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRDdXN0b21FbGVtZW50LFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IGZpcmVDdXN0b21FdmVudCB9IGZyb20gXCIuLi8uLi9kb20vZXZlbnRzLm1qc1wiO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnQgfSBmcm9tIFwiLi4vLi4vZG9tL3V0aWwubWpzXCI7XG5pbXBvcnQgeyBEZWFkTWFuc1N3aXRjaCB9IGZyb20gXCIuLi8uLi91dGlsL2RlYWRtYW5zc3dpdGNoLm1qc1wiO1xuaW1wb3J0IHsgU1RZTEVfRElTUExBWV9NT0RFX0JMT0NLIH0gZnJvbSBcIi4uL2Zvcm0vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgcG9zaXRpb25Qb3BwZXIgfSBmcm9tIFwiLi4vZm9ybS91dGlsL2Zsb2F0aW5nLXVpLm1qc1wiO1xuaW1wb3J0IHsgUG9wcGVyU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvcG9wcGVyLm1qc1wiO1xuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcblxuZXhwb3J0IHsgUG9wcGVyIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHRpbWVyQ2FsbGJhY2tTeW1ib2wgPSBTeW1ib2woXCJ0aW1lckNhbGxiYWNrXCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHJlc2l6ZU9ic2VydmVyU3ltYm9sID0gU3ltYm9sKFwicmVzaXplT2JzZXJ2ZXJcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgY2xvc2VFdmVudEhhbmRsZXIgPSBTeW1ib2woXCJjbG9zZUV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgY29udHJvbEVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJjb250cm9sRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgYnV0dG9uRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImJ1dHRvbkVsZW1lbnRcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcG9wcGVyRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcInBvcHBlckVsZW1lbnRcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgYXJyb3dFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiYXJyb3dFbGVtZW50XCIpO1xuXG4vKipcbiAqIEEgUG9wcGVyIGlzIGEgZmxvYXRpbmcgVUkgZWxlbWVudCB0aGF0IGNhbiBiZSBzaG93biBvciBoaWRkZW4uXG4gKlxuICogQGZyYWdtZW50cyAvZnJhZ21lbnRzL2NvbXBvbmVudHMvbGF5b3V0L3BvcHBlci9cbiAqXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9sYXlvdXQvcG9wcGVyLXNpbXBsZVxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvbGF5b3V0L3BvcHBlci1jbGlja1xuICpcbiAqIEBzaW5jZSAxLjY1LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIGJlYXV0aWZ1bCBwb3BwZXIgdGhhdCBjYW4gbWFrZSB5b3VyIGxpZmUgZWFzaWVyIGFuZCBhbHNvIGxvb2tzIGdvb2QuXG4gKiBAZmlyZXMgbW9uc3Rlci1wb3BwZXItaGlkZSBmaXJlZCB3aGVuIHRoZSBwb3BwZXIgaXMgaGlkZS5cbiAqIEBmaXJlcyBtb25zdGVyLXBvcHBlci1oaWRkZW4gZmlyZWQgd2hlbiB0aGUgcG9wcGVyIGlzIGhpZGRlbi5cbiAqIEBmaXJlcyBtb25zdGVyLXBvcHBlci1vcGVuIGZpcmVkIHdoZW4gdGhlIHBvcHBlciBpcyBvcGVuLlxuICogQGZpcmVzIG1vbnN0ZXItcG9wcGVyLW9wZW5lZCBmaXJlZCB3aGVuIHRoZSBwb3BwZXIgaXMgb3BlbmVkLlxuICovXG5jbGFzcyBQb3BwZXIgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2NvbXBvbmVudHMvbGF5b3V0L3BvcHBlckBAaW5zdGFuY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgSFRNTCB0YWcsIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1vcHRpb25zYCBtdXN0IGJlIHVzZWQuXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZy9lbi9kb2MvI2NvbmZpZ3VyYXRlLWEtbW9uc3Rlci1jb250cm9sfVxuXHQgKlxuXHQgKiBUaGUgaW5kaXZpZHVhbCBjb25maWd1cmF0aW9uIHZhbHVlcyBjYW4gYmUgZm91bmQgaW4gdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIFRoZSB0ZW1wbGF0ZXMgZm9yIHRoZSBjb250cm9sLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gVGhlIG1haW4gdGVtcGxhdGUuXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtb2RlIFRoZSBtb2RlIG9mIHRoZSBwb3BwZXIuIFBvc3NpYmxlIHZhbHVlcyBhcmUgYGNsaWNrYCwgYGVudGVyYCwgYG1hbnVhbGAsIGBmb2N1c2AsIFwiYXV0b1wiIG9yIGEgY29tYmluYXRpb24gb2YgdGhlbS5cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGNvbnRlbnQgVGhlIGNvbnRlbnQgb2YgdGhlIHBvcHBlci5cblx0ICogQHByb3BlcnR5IHtvYmplY3R9IHBvcHBlciBUaGUgcG9wcGVyIG9wdGlvbnMuXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwb3BwZXIucGxhY2VtZW50IFRoZSBwbGFjZW1lbnQgb2YgdGhlIHBvcHBlci4gUG9zc2libGUgdmFsdWVzIGFyZSBgdG9wYCwgYGJvdHRvbWAsIGBsZWZ0YCBhbmQgYHJpZ2h0YC5cblx0ICogQHByb3BlcnR5IHtmdW5jdGlvbltdfSBwb3BwZXIubWlkZGxld2FyZSBUaGUgbWlkZGxld2FyZSBmdW5jdGlvbnMgb2YgdGhlIHBvcHBlci5cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZlYXR1cmVzIFRoZSBmZWF0dXJlcyBvZiB0aGUgcG9wcGVyLlxuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IGZlYXR1cmVzLnByZXZlbnRPcGVuRXZlbnRTZW50IFByZXZlbnRzIHRoZSBvcGVuIGV2ZW50IGZyb20gYmVpbmcgc2VudC5cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0fSxcblx0XHRcdG1vZGU6IFwiYXV0byBmb2N1c1wiLFxuXHRcdFx0Y29udGVudDogXCI8c2xvdD48L3Nsb3Q+XCIsXG5cdFx0XHRwb3BwZXI6IHtcblx0XHRcdFx0cGxhY2VtZW50OiBcInRvcFwiLFxuXHRcdFx0XHRtaWRkbGV3YXJlOiBbXCJhdXRvUGxhY2VtZW50XCIsIFwic2hpZnRcIiwgXCJvZmZzZXQ6MTVcIiwgXCJhcnJvd1wiXSxcblx0XHRcdH0sXG5cdFx0XHRmZWF0dXJlczoge1xuXHRcdFx0XHRwcmV2ZW50T3BlbkV2ZW50U2VudDogZmFsc2UsXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGNvbm5lY3RlZENhbGxiYWNrYCBtZXRob2Qgb24gdGhlIGZpcnN0IGNhbGwuXG5cdCAqXG5cdCAqIEByZXR1cm4ge1ZvaWR9XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXHRcdGluaXRDb250cm9sUmVmZXJlbmNlcy5jYWxsKHRoaXMpO1xuXHRcdGluaXRFdmVudEhhbmRsZXIuY2FsbCh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSB0YWcgbmFtZSBvZiB0aGUgZWxlbWVudC5cblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLXBvcHBlclwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGNzcyBzdHlsZXMgb2YgdGhlIGVsZW1lbnQuXG5cdCAqXG5cdCAqIEByZXR1cm4ge0NTU1N0eWxlU2hlZXRbXX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiBbUG9wcGVyU3R5bGVTaGVldF07XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIGVsZW1lbnQgaXMgY29ubmVjdGVkIHRvIHRoZSBkb20uXG5cdCAqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqL1xuXHRjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHRzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG5cdFx0Y29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXG5cdFx0Zm9yIChjb25zdCBbLCB0eXBlXSBvZiBPYmplY3QuZW50cmllcyhbXCJjbGlja1wiLCBcInRvdWNoXCJdKSkge1xuXHRcdFx0Ly8gY2xvc2Ugb24gb3V0c2lkZSB1aS1ldmVudHNcblx0XHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgdGhpc1tjbG9zZUV2ZW50SGFuZGxlcl0pO1xuXHRcdH1cblxuXHRcdHVwZGF0ZVBvcHBlci5jYWxsKHRoaXMpO1xuXHRcdGF0dGFjaFJlc2l6ZU9ic2VydmVyLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIGVsZW1lbnQgaXMgZGlzY29ubmVjdGVkIGZyb20gdGhlIGRvbS5cblx0ICpcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG5cblx0XHQvLyBjbG9zZSBvbiBvdXRzaWRlIHVpLWV2ZW50c1xuXHRcdGZvciAoY29uc3QgWywgdHlwZV0gb2YgT2JqZWN0LmVudHJpZXMoW1wiY2xpY2tcIiwgXCJ0b3VjaFwiXSkpIHtcblx0XHRcdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgdGhpc1tjbG9zZUV2ZW50SGFuZGxlcl0pO1xuXHRcdH1cblxuXHRcdGRpc2Nvbm5lY3RSZXNpemVPYnNlcnZlci5jYWxsKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpdGggdGhpcyBtZXRob2QgeW91IGNhbiBzaG93IHRoZSBwb3BwZXIuXG5cdCAqXG5cdCAqIEByZXR1cm4ge1BvcHBlcn1cblx0ICovXG5cdHNob3dEaWFsb2coKSB7XG5cdFx0c2hvdy5jYWxsKHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpdGggdGhpcyBtZXRob2QgeW91IGNhbiBoaWRlIHRoZSBwb3BwZXIuXG5cdCAqXG5cdCAqIEByZXR1cm4ge1BvcHBlcn1cblx0ICovXG5cdGhpZGVEaWFsb2coKSB7XG5cdFx0aGlkZS5jYWxsKHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpdGggdGhpcyBtZXRob2QgeW91IGNhbiB0b2dnbGUgdGhlIHBvcHBlci5cblx0ICpcblx0ICogQHJldHVybiB7UG9wcGVyfVxuXHQgKi9cblx0dG9nZ2xlRGlhbG9nKCkge1xuXHRcdGlmICh0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmRpc3BsYXkgPT09IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSykge1xuXHRcdFx0dGhpcy5oaWRlRGlhbG9nKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2hvd0RpYWxvZygpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtQb3BwZXJ9XG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudEhhbmRsZXIoKSB7XG5cdHRoaXNbY2xvc2VFdmVudEhhbmRsZXJdID0gKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgcGF0aCA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpO1xuXG5cdFx0Zm9yIChjb25zdCBbLCBlbGVtZW50XSBvZiBPYmplY3QuZW50cmllcyhwYXRoKSkge1xuXHRcdFx0aWYgKGVsZW1lbnQgPT09IHRoaXMpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRoaWRlLmNhbGwodGhpcyk7XG5cdH07XG5cblx0bGV0IG1vZGVzID0gbnVsbDtcblx0Y29uc3QgbW9kZU9wdGlvbiA9IHRoaXMuZ2V0T3B0aW9uKFwibW9kZVwiKTtcblxuXHRpZiAodHlwZW9mIG1vZGVPcHRpb24gPT09IFwic3RyaW5nXCIpIHtcblx0XHRtb2RlcyA9IG1vZGVPcHRpb24uc3BsaXQoXCIgXCIpO1xuXHR9XG5cblx0aWYgKFxuXHRcdG1vZGVzID09PSBudWxsIHx8XG5cdFx0bW9kZXMgPT09IHVuZGVmaW5lZCB8fFxuXHRcdGlzQXJyYXkobW9kZXMpID09PSBmYWxzZSB8fFxuXHRcdG1vZGVzLmxlbmd0aCA9PT0gMFxuXHQpIHtcblx0XHRtb2RlcyA9IFtcIm1hbnVhbFwiXTtcblx0fVxuXG5cdGZvciAoY29uc3QgWywgbW9kZV0gb2YgT2JqZWN0LmVudHJpZXMobW9kZXMpKSB7XG5cdFx0aW5pdEV2ZW50SGFuZGxlckJ5TW9kZS5jYWxsKHRoaXMsIG1vZGUpO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBtb2RlXG4gKiBAcmV0dXJuIHtQb3BwZXJ9XG4gKiBAdGhyb3dzIEVycm9yXG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudEhhbmRsZXJCeU1vZGUobW9kZSkge1xuXHRzd2l0Y2ggKG1vZGUpIHtcblx0XHRjYXNlIFwibWFudWFsXCI6XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgXCJmb2N1c1wiOlxuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFwiZm9jdXNcIiwgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLnByZXZlbnRPcGVuRXZlbnRTZW50XCIpID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLnNob3dEaWFsb2coKTtcblx0XHRcdH0pO1xuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFwiYmx1clwiLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMucHJldmVudE9wZW5FdmVudFNlbnRcIikgPT09IHRydWUpIHtcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuaGlkZURpYWxvZygpO1xuXHRcdFx0fSk7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgXCJjbGlja1wiOlxuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLnByZXZlbnRPcGVuRXZlbnRTZW50XCIpID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLnRvZ2dsZURpYWxvZygpO1xuXHRcdFx0fSk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiZW50ZXJcIjpcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZW50ZXJcIiwgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLnByZXZlbnRPcGVuRXZlbnRTZW50XCIpID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLnNob3dEaWFsb2coKTtcblx0XHRcdH0pO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIFwiYXV0b1wiOiAvLyBpcyBob3ZlclxuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFwibW91c2VlbnRlclwiLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMucHJldmVudE9wZW5FdmVudFNlbnRcIikgPT09IHRydWUpIHtcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuc2hvd0RpYWxvZygpO1xuXHRcdFx0fSk7XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsIChldmVudCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5wcmV2ZW50T3BlbkV2ZW50U2VudFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5oaWRlRGlhbG9nKCk7XG5cdFx0XHR9KTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gbW9kZSAke21vZGV9YCk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBhdHRhY2hSZXNpemVPYnNlcnZlcigpIHtcblx0Ly8gYWdhaW5zdCBmbGlja2VyaW5nXG5cdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdID0gbmV3IFJlc2l6ZU9ic2VydmVyKChlbnRyaWVzKSA9PiB7XG5cdFx0aWYgKHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF0gaW5zdGFuY2VvZiBEZWFkTWFuc1N3aXRjaCkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXS50b3VjaCgpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGRlbGV0ZSB0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF0gPSBuZXcgRGVhZE1hbnNTd2l0Y2goMjAwLCAoKSA9PiB7XG5cdFx0XHR1cGRhdGVQb3BwZXIuY2FsbCh0aGlzKTtcblx0XHR9KTtcblx0fSk7XG5cblx0dGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0ub2JzZXJ2ZSh0aGlzLnBhcmVudEVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBkaXNjb25uZWN0UmVzaXplT2JzZXJ2ZXIoKSB7XG5cdGlmICh0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXSBpbnN0YW5jZW9mIFJlc2l6ZU9ic2VydmVyKSB7XG5cdFx0dGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0uZGlzY29ubmVjdCgpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaGlkZSgpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0ZmlyZUN1c3RvbUV2ZW50KHNlbGYsIFwibW9uc3Rlci1wb3BwZXItaGlkZVwiLCB7XG5cdFx0c2VsZixcblx0fSk7XG5cblx0c2VsZltwb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG5cdHJlbW92ZUF0dHJpYnV0ZVRva2VuKHNlbGZbY29udHJvbEVsZW1lbnRTeW1ib2xdLCBcImNsYXNzXCIsIFwib3BlblwiKTtcblxuXHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRmaXJlQ3VzdG9tRXZlbnQoc2VsZiwgXCJtb25zdGVyLXBvcHBlci1oaWRkZW5cIiwge1xuXHRcdFx0c2VsZixcblx0XHR9KTtcblx0fSwgMCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc2hvdygpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0aWYgKHNlbGYuZ2V0T3B0aW9uKFwiZGlzYWJsZWRcIiwgZmFsc2UpID09PSB0cnVlKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKHNlbGZbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUuZGlzcGxheSA9PT0gU1RZTEVfRElTUExBWV9NT0RFX0JMT0NLKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0ZmlyZUN1c3RvbUV2ZW50KHNlbGYsIFwibW9uc3Rlci1wb3BwZXItb3BlblwiLCB7XG5cdFx0c2VsZixcblx0fSk7XG5cblx0c2VsZltwb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcblx0c2VsZltwb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ID0gU1RZTEVfRElTUExBWV9NT0RFX0JMT0NLO1xuXG5cdGFkZEF0dHJpYnV0ZVRva2VuKHNlbGZbY29udHJvbEVsZW1lbnRTeW1ib2xdLCBcImNsYXNzXCIsIFwib3BlblwiKTtcblx0dXBkYXRlUG9wcGVyLmNhbGwoc2VsZik7XG5cblx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0ZmlyZUN1c3RvbUV2ZW50KHNlbGYsIFwibW9uc3Rlci1wb3BwZXItb3BlbmVkXCIsIHtcblx0XHRcdHNlbGYsXG5cdFx0fSk7XG5cdH0sIDApO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZVBvcHBlcigpIHtcblx0aWYgKHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUuZGlzcGxheSAhPT0gU1RZTEVfRElTUExBWV9NT0RFX0JMT0NLKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZGlzYWJsZWRcIiwgZmFsc2UpID09PSB0cnVlKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0cG9zaXRpb25Qb3BwZXIuY2FsbChcblx0XHR0aGlzLFxuXHRcdHRoaXNbY29udHJvbEVsZW1lbnRTeW1ib2xdLFxuXHRcdHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0sXG5cdFx0dGhpcy5nZXRPcHRpb24oXCJwb3BwZXJcIiwge30pLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtQb3BwZXJ9XG4gKi9cbmZ1bmN0aW9uIGluaXRDb250cm9sUmVmZXJlbmNlcygpIHtcblx0dGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWNvbnRyb2xdYCxcblx0KTtcblx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09YnV0dG9uXWAsXG5cdCk7XG5cdHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PXBvcHBlcl1gLFxuXHQpO1xuXHR0aGlzW2Fycm93RWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWFycm93XWAsXG5cdCk7XG5cdHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250cm9sXCIgcGFydD1cImNvbnRyb2xcIj5cbiAgICAgICAgICAgIDxzbG90IG5hbWU9XCJidXR0b25cIiBkYXRhLW1vbnN0ZXItcm9sZT1cImJ1dHRvblwiPjwvc2xvdD5cblxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInBvcHBlclwiIHBhcnQ9XCJwb3BwZXJcIiB0YWJpbmRleD1cIi0xXCIgY2xhc3M9XCJtb25zdGVyLWNvbG9yLXByaW1hcnktMVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJhcnJvd1wiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgcGFydD1cImNvbnRlbnRcIiBjbGFzcz1cImZsZXhcIiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6Y29udGVudFwiPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIGA7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChQb3BwZXIpO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IFBvcHBlciBhcyBOZXdQb3BwZXIgfSBmcm9tIFwiLi4vbGF5b3V0L3BvcHBlci5tanNcIjtcblxuZXhwb3J0IHsgUG9wcGVyIH07XG5cbi8qKlxuICogQHNpbmNlIDEuMTAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBkZXByZWNhdGVkIHNpbmNlIDMuNjUuMFxuICovXG5jbGFzcyBQb3BwZXIgZXh0ZW5kcyBOZXdQb3BwZXIge31cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIDIwMjQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICovXG5cbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0VSUk9STUVTU0FHRSB9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBQb3BwZXJCdXR0b25TdHlsZVNoZWV0IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBQb3BwZXJCdXR0b25TdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcblx0UG9wcGVyQnV0dG9uU3R5bGVTaGVldC5pbnNlcnRSdWxlKFxuXHRcdGBcbkBsYXllciBwb3BwZXJidXR0b24geyBcbltkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3V0bGluZTpub25lO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXh7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9Omhvc3R7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6YmxvY2t9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPXBvcHBlcl17YWxpZ24tY29udGVudDpjZW50ZXI7YmFja2dyb3VuZDp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7ZGlzcGxheTpub25lO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2xlZnQ6MDtwYWRkaW5nOjEuMWVtO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3dpZHRoOi1tb3otbWF4LWNvbnRlbnQ7d2lkdGg6bWF4LWNvbnRlbnQ7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtbW9kYWwpfWRpdltkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXJdIGRpdltkYXRhLW1vbnN0ZXItcm9sZT1hcnJvd117YmFja2dyb3VuZDp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7aGVpZ2h0OmNhbGMobWF4KHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpLCAtMSAqIHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpKSoyKTtwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOmNhbGMobWF4KHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpLCAtMSAqIHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpKSoyKTt6LWluZGV4Oi0xfS5tb25zdGVyLWJ1dHRvbi1wcmltYXJ5LGJ1dHRvbnthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofS5tb25zdGVyLWJ1dHRvbi1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1zZWNvbmRhcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYnV0dG9uLXNlY29uZGFyeSwubW9uc3Rlci1idXR0b24tdGVydGlhcnl7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtcG9zaXRpb246NTAlO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7Z2FwOi40cmVtO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MS41O291dGxpbmU6bm9uZTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzouMzc1cmVtIC43NXJlbTtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3dpZHRoOi13ZWJraXQtZmlsbC1hdmFpbGFibGU7d2lkdGg6LW1vei1hdmFpbGFibGU7d2lkdGg6c3RyZXRjaH0ubW9uc3Rlci1idXR0b24tdGVydGlhcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1idXR0b24tb3V0bGluZS1wcmltYXJ5LC5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXNlY29uZGFyeXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXNlY29uZGFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1idXR0b24tb3V0bGluZS10ZXJ0aWFyeXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpO2JhY2tncm91bmQtcG9zaXRpb246NTAlO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofWJ1dHRvbjphY3RpdmUsYnV0dG9uOmhvdmVye2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTIpO3RyYW5zaXRpb246YmFja2dyb3VuZCAuOHMsY29sb3IgLjI1cyAuMDgzMzMzMzMzM3N9YnV0dG9uOmFjdGl2ZXt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lKX0ubW9uc3Rlci1idXR0b24tYmFyLC5tb25zdGVyLWJ1dHRvbi1ncm91cHthbGlnbi1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpzdHJldGNoO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOm5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0ubW9uc3Rlci1idXR0b24tZ3JvdXB7Ym94LXNpemluZzpib3JkZXItYm94O2dhcDowO21hcmdpbjoxcmVtIDB9Lm1vbnN0ZXItYnV0dG9uLWdyb3VwPjpub3QoOmxhc3QtY2hpbGQpe21hcmdpbi1yaWdodDpjYWxjKHZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSotMSl9Lm1vbnN0ZXItYnV0dG9uLWdyb3VwIDpob3Zlcntib3gtc2hhZG93Om5vbmV9YnV0dG9uOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00KTtvdXRsaW5lLW9mZnNldDoycHg7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtb3V0bGluZSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpsaWdodCl7YnV0dG9uOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKTtvdXRsaW5lLW9mZnNldDoycHg7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtb3V0bGluZSl9fUBmb250LWZhY2V7Zm9udC1kaXNwbGF5OnN3YXA7Zm9udC1mYW1pbHk6UmFsZXdheTtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDozMDA7c3JjOnVybChkYXRhOmFwcGxpY2F0aW9uL3gtZm9udC13b2ZmMjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxkMDlHTWdBQkFBQUFBRko0QUJJQUFBQUF0M0FBQUZJUUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR29FOEcrNDZISVU4Qm1BL1UxUkJWRVFBaFFnSWdRb0pueFFSQ0FxQnVneUJtbkFMaENJQUFUWUNKQU9JUUFRZ0JZVVVCeUFNZ3h3YmZhUVhhSmVmbU56MFpvbDN2NjBjUGVaTXBHNEhKU2prNXFJSU5nNkNHTWdsWmYvL24zRjBqT0dHRFJBMXJYZUluY0pJVWtOSEduNjlxTVJEVThaYWpqczlVYnNtdG5xbkUzdjN2cWlRbWZSUXBMa0tXNlFad2FsNnM1SVVpSk5VU1VHL093b0RZNkI2NzVPalNqa0RTU011MnBlZHB1OXZKSUxVbEpkNzA3RCtlTEhwallESTRlMXVEbkxqSEh2eHBEWEdNeWR1TExuMXF0MEZDUU95RnNKWkUxK2tKcTNUK0llN0JKRklOT0FOYmk5dlRVemhJN1c0R21VTDBsV2pUL0ZRUWkvbSsreHVQUDAyb21SSGU1cG40RGdmTlpmbitSOXo5Nzl0bUVlTmFxMVJ4UnFIVGpUUE5BMkpGRWdySGRvL250L1cvNXpiZ0dDeGlhNkVrVmlBMkZoWUdJdFJtRTFadlZVdnF0U3RiN012cmQzVzcrdDIrMFhkb1RuenpqWWJwN21TSExBQ2toTVdnQ1RMNnMwV3YwQVVvaEpmRXFFM29wUGQ1OGlrSm5LbG8rM3VhZVNIWUo2ZmNJY1hqZCtyS1VFc2FFbFRxbFVsVlJtL04rZS84aVAwTDVBS296TmxKMy85aUJ3c2hNNnY1SklVSnlrZ1QzZmRyT21xNkxjcytaK3EvWHNBWEZ4RUVpUUlVYUtvc0ZuN2N0VCs3QkJTNWRxRG9sSlh1bmJsN3J0dHpEL3YzODRMZnRKYWdGRkFMWVBFNUE3Z25NclpCaHQ0bFhxc2JaS21iZHEwVHRPbXBtZ05pdWdNMlBZQmM3M01yanE3R0xzb1hIY1RwdDl1UHZGRHo4ZU4zZytzeHJQUUF3NkRURk5wL09aSTlpaW5OaXRaaFJtcFFPQ2tkb0JkQU5qVldsYXZNaXR3RE5KWC9wWUlBa1Z3bk9QL3ZXNXh6b013N1NBRkFLVStaei9rblAvWjlqK09kZnJMOEtlMnZkS2JtcGh1eEpTdUw4RVVBZ2dISWlCSFArNDQ0RUR6djFQVFEzWWtPY09TbFRIbWo2VXNkZm8yTCsvanBZZTdJSFdjUVVnY2drcExGUjFZVFc4Q0dLUVg5YjhHRkFBQUg5dG80UkhRNkdMdkZScmk0RGl3VHpBQURETUtEUHIvZlozVi9xZGdQbWtHektURW1XRVhiN1EzdHRnVFlxbzJuUDYvKzk3WGYrRi85SkhBVnNJSWNBQ0Jad1J5a0dUN2dDUjhWb2hKY1VPT1NEamlTYkFwaE1vem0ySlJwdEJ0VVc2OVhiTkZHM0lWeTJLTG9rNDgvTGZzbTUyN0lhcUJMTXVCYk9GSXdlRlVkMDF2ZUwrWTh4V2h0emNxVG0yQ0lUYzVlTEp3U0k0ZllsTFlGSVZIQXMvL1Q1M040L1l4MWhLR1UrSFNxRXJkcFBQbnM2ZnFxV0pzTmJaYUNsUXRqbE9MVU1zaGNkb0E1VFFzczRKTGM5MFN4Q09NTVVLNEtQOU5zaHB6cFg0dnd4S0NoQ0FTUkVSRS9MS3NXUmxKd05LQWNUblhBaEV5M3IxS0hjWmEvWWRYNTg0MjAvaWFYbXRHaG9DQWlJaUFSMjN2L1A5K0tUQUNBTjVoZGtDM3hVQzRFTHNnZ3ZrUjJrckVqWVNFdjBCS1NtSENoSXZZT0NBSmtLUWd5WU1NMlFvVU16Q28xNkJKODVxQVdDQ2RIZWszQUIwT0RMMUxxMFBnVGUzaFN3MmZoaTRYaFB1ZXVRV0VINnh0SUVRQWJHMk5tNW9WNTRRRlAreUtnTzJENFQ1dC93ejJYVzkyL3JwcXBMVFNJUDhxVjl2THZPZHMwTkxXeVg1MUs2b2ZidlBaRTFwYWY3dzMxOEM5WnRocTdmMzJiZnVMNjRWWkh3NTE0WXNtNWxnZk5iZkc3Vzlsc1VBNEVHejcyM3Z4d0d6cDRmUlIrbVA4THM1QjdLQjJlREpYYzZ4d2xHNjkwMnVnN0F6TEE4TlkyMUIyZEIvUDVxZk9WOHQxb255TDVqWkREZlFJNVJnOEQ5OEZ2SHN2Y2xIdUpzcmR2c0pycGMvVHIvZ3UvRWZaSnpYVXpwV2FEajdNNytVUDgvOEVrQUFWYUFTL0NSK1hzL0pONFlhSWNPMXhIWmNVYU1NYmtscnBLeTdOZlFKS1FjVVJhZ29HbUNXK0hBNkVOdmJnMzNzbDJwSVlSbUU5YklIYjBtQTZrazZsTjVHZHlNTjVFYm1RaHhIS2x3TWdUNThjZ3c3cGRVUno3bmZNY1FmY1UzdkljelZrZHJoWDhYSHE0MDEydEZPZDdrVC9hN3A3bTgzV0E3MUY3YU85TStkanZkZDZqN2Z4bStEMVB1M3ozdWlydm11eXphNTN0cnY5M2xUYjgyUlQyS2FGVlVLTU5QMzZCdlFNQ28wR3NFZGtMOHMrekxnMUV4Yk0wTmdDV0F4Z3pmODJERzFLWE1mYzRyak5jUWZIS3hTQ3VSdUJJNUFvZERERGtHZFY4Q25WVkVtRU1haW40U2EwQVhUSTBSQk5wT1lBTFZxMWFWOXZ4SmlVekhLV0NpczZtcDBCdWt4MDY5R3I3NHNuVk5ic29DbWtWTW9wNStwREdhV3oyc0xEcjJpTnQrb1pPMGIzNllTSWpXY3h2bmxOMHgwVmhsWW9XNFVSalhYS3lMRzNZM3FvTGRFYXpIQUVFb1Z1TWwzRERlRVJWcEcvamVURVIwQ1VaRVUxbW90cUZvaXdKRktVYURGaWFjU2xCSnJFalNRS0ovQ1NGU21TS2sxNjFRbGtkS2V5U1hZenNkWEtpNkk5aWtOSk10Q1VLbE91UXFVcTFWSFQxenE2K2x6ZlFOQUlhNUpwUm92V2FFUDdaeHVObVRqTUxCWXVxM1hVVGdOZFJEZDZVcTlBMzNjYnhBenhERE9OMEl4YU5WYXhkLy9zL2FqeEFFNkpuUGJGR1prdUMzdWFOVThFc0RTTFpWbXhPajFQZDhIUXhYU3BlZGtYYXdiVzZ3Wm84KzZEcml1UUZGdzVJcHZuSmg2L1pnRkpLOTMwYUVNMlhKM3lKQjBESG9waGJxZzB1cmt2TUlnWWx0YkdSUGNka2Q3VmovTlY0cGJBYmErL0U0QmpDZzlwNVplcmkvcGRNMENHLzd0WFpOeFZFKzZiWWF2UW42dW1Xd3kzRlhmNmdnK1huQXRIRGdqa1BOaVVicXBvd3ZEVXZiUmxjajVYWkhZelY4Smk0TmwxdmpzT2hyTWF4T0h4ZUR3ZWp6L1ZJSEpYbjZIMHdoZzZxRk9FVXFRbzBXTEUwb2hMQ1RLSjB5UTVMVTl5UlFwU3BVbGZabkFTQmtXcGxDbFhvVktWNnFpYlRCdE1tUUtZWVdIVlVVZnRHSXQ2Mmxkbk1IM0VwaVUwcVZRcUhiQ0x4T1UrRTQvMVhMZkJFaHpLaGdVY2dVU2hmeHdtRHo5RzVFUkFBSEw3RkhSS1F5cm53dXhRZjVyaEhCRUJSSW9TTFVZc3pVYmM0cnRNZHBsMjZGZ2Q1NXRnUUc4eC9mQVoySnpJdkdibWxyY1hBbTN3WEthN0VsZlBjUzJ0eGZxK2VnZmlIR29ETXh5QlJLSHZ5M1NKMzBRNlY4KzZtZGZac2FGVjNlT1VLc1dNeW5raHlMMXU0VkkwTDFTSkxJeFh5WXpwTHlOcWlXejBYVHBrYVR5bjFaRHRpOTBtWTAydjB0VXF0elNDbCtxcks3ckl1djF2OVJEMHNneHFHYkpvR0dmRWtsRTFZenIyOE8xbDJLZXdYOU40QURhTjFiN0wwSWFSVFhPdXk5eWl1ODJwT3dIUUJDK3BsZENyT21LME1nL3IxdlJZRW0zREJFY2dVZWdtVXgwM0c0K3dpdFFnT2ZFUkVDVlpVWTNtNHRtRUl2d1VLVXEwR0xFMDRsSUNUdUkweVRxdEZjbEVDbEtsU2E4NldFWjNKSnZzRldpN0l4S0pPQndPaDhQaGNFVHJSTjN0RHBsTUpwTmhSSWFpcUFpR1lSZ21jYmtzeTROb3ovcm9mUUw3S2NhbE5EMEZPVzNSR1p1T0JSMnhtVk14a1Vna0RsMFg3dUppdXRTOGJOR2FFK3YvWlFPd3FlODZHSUllRXNDdW92V1lmQ3EydHZwTU9CTjdNek82OEdXWExodG1nVzJmZmVIcDFNdTdxd1g1TkR3VGtwQ1NjZWZCa3hkdmZpbkFSSVJJVWFMRmlLVVJseElBaVpFMHJWcTY1SW9VU1pVbXZlcVVNcnBzL3oxWldFWjVZQmdHQUFBQUFBQ0EwV1pzZDFDcCtIdytuMi9jT2xrNHJEcFNsMUszSHIzNmpnMUNUdHd6T2NOdUNYWU5naURZaG90SDFvZ09MUlN1eDhuaWw0cjJpWWF2MG5vcnpYdloyblpqWkxmYUtEK1ZSZ0gvZmdObXBrRmJoZ2lHaVVhY0dmWE5tSzQ5RlB2WTl0dmJjVG03NSszZmRhbVc2WVN0d2tkemFDSFpjdnEwQ1M0aVU1Wm1OeExYR0JlL3JRb0hqTVAxL1FFR1ZNWkZKZ2JEREovNVQzZXlCY3ZHUFNxVGltSmNDK1lRVWpxR3YybkM3cTNuQjBET3F2MkczVnZsSWhLSVc4TVJTQlM2eVpUaU5HRlgrUkdDREhzOFBZSWRUamRBVUF5dlFrd1NDcHBoTmQyMG1wdU1qUVhLQlFrV0lqUXBtSlJVS1l4S1hjTERjNmtJZkhhVEthT01TYzRNc1ZSWVEwZXpVNkZMcFZ1UDN0TEh1d3ByWWZ0aGl3aUhGQVdrU3BtV1J0KzZuSjZVMThDdXlKODVqMngwYjBkN045cGlicTBsYjROblUrcE83dEVVTGloZFVPMmhycHRnWVhDc3hCRkEzbFEybm1GYzNGYlJqR0JnQ2Q2QlVIN3FuWEJiYWNqc0s5OVJmSURNQUZrQnNvTytuWmc4UDBCQmdNSUF0UUVhbjlXUUVzOU1BSE5HODU1NHdhK0FybnF2VFRqcEdTN2UvaWxQbWpBUlBtbnN4V2tkQUFSeU9MOXlBaHlteDdTR0tsazdHaDQ4dkR2TmZkZytJVEJacEQ5Z3pnTUlCd3dCazV0bWtFWElxcU1NYUVUZy9IVWUyNm9MVFRwNHc0ZzlVa1o1YmdieEVIdEN5VExZUEhtSlVxM3VKcHF6dlNOY3VtYkJkWFlRc2t1MUM5Mk44alR2REZFVTBydjgxN2dtcXNHalBmUnVOanZlclREbUhDRTRxK3Fiek9qdUlJdlJhRGh6WjEvVkpVcGhoaU9RS0hRd3NaNVRqZ3VBQjhDdUtyK1lJTUtld0lvTU81eHg5ZTRBRUJURFNZcG0yT1R5OG9Jb3lZb2FqZWpVUWI4SndEL1hCNWlTc3dVaWdoQXNSR2hTMENnekp6WE1DVFUxWEVaSGFUQVhUQ1FTaWNYYlk0VkNvUmdMRXhzdGxkQ3R4WjFhVW5sdXRHaHRPUXQxOC9SVWRWcGtEQnZiUzRuRW9ORm9OQnFORmlkWG4wV0pMSkNyVThDVWJxcU1oWkdwbStGOEViQklVYUxGaUtVUmx4S0VFaVZWTFZOeVJncFNwVW12dWdBWmhBR2x5cFNyVUtsS3RicG1BNndyUUxjZXZmcWFFN0RUV3M2WUhtMEUyZGNsaVdXc1dFM25tUzdHNWI2dUdWblBuTnV5eVdiSHd4RGpwV2s2TStqMjBlWU1MUS8wM1ZNbUttNFpuZ2xKU01tNDgrREppemUvS3JkQ2tWTWxLc3lJbW1lWmYwR1F5d0pCRUZ4Qy9yZ2dDSUlnQ0lJejkwYkRFd01UajhmakFVQXhkUzZWc0RjczFnOHdmWUNYck5kOThTSDhnYWprNXZ1VVBxZzRYRFA5Sm03b0dXdkdYeFNkRUxMZnJzRVNFc21XWFRjTTNjTHRIRlNHYlNIQkFqY0NpVUlYSnFIbk1sT0xSQkxhc25VSzJTdXgxenFuTUIvWk1HT3gvelB1OG9oREFEQUFPQUFDQUFtQUFrQURZSGdsQ2tDdUxWQWlTSUtGQ1Awa2hXTktQRlV3YmR5TCtzREJ5ZWdrYUoyV0VNdFdyRTYvNHZwVzdHNmU0bUR3MEJmeFpoRnQ5R3ZmaFBFQW15ZDRjTXRVcXNQbDRheTdHdWFrNXQwTjUyT093SmFCZ1NOSHNrMk5oN3FFV1pZVnE4ZStrc3hqajNFS1NYZzhMTmlsUXFGUXpFMWZ2NXR2cFFRRnRGSW15THRpdlRlV2tRQ2s1WlJlMlFpSjJackxZRFY4Nk1CWVdYNXhBUHVuazF5bnRaMng2YWJOcmlYQXNoV3JjZmtVNjN5L2ovbStnbnpOOEkzWXR4emZDZU9pQVBpN1loMXdCQktGenM3MldybGlmV2IzbitzT21rU2l6WEhUWHBtdkFuT2dlYSs3UzhGMUVIUDhuVTRJbkZZNFE1bVdwM0JBTGxlc2E3Qno0RnVPYkU0RVhSbml5azhodENPaWs4dmxjc1dZSUtyNC9jSE0zWFhJY2N5T0RzQlhIOVIzTklCalVzZDFmaWRqMGlpbkg1cmlaZlVPRFRpRlF1bHplYXg3K2pIWlZ5eGYzOFUzeExkcitVN3U0M0g1OUtlZ0s5NUp2d3Z5cW4zSWd4THlVRzJZNFFna0N2MUJURCtJdkNNUE1nMGxWWVJCblNJUWthSkVpeEZMSXk0bENDVDJobTBzRUFnRUpURHJxYjRnSjJKWW96U1VLVmVoVXBYcWJOclorWmhlamIrNXJIckd6Y2NMUWhKU011NDhlUExpemEvS3pRbk1DRUt3RUtGSllZR3lOeUsxbHRKVS9KNldtRnhVcUxzSW5YU3MzNHM0QUpuVE5QOUpWODFaVzA4YndveHdqTW9HZysxZ1BQeHdBTWVaa0JFRStWc3Vwc3hvOWNXUzVpdm5hU1VwRkpRMVRFYnRleUtqTUFMbFNRaDZSSzNnQ0NRSzNlUVU0amJFQzd1cS9BeUNESHVDQlFUc2NNYlZ1d01VQkJURFE5eVFGTTJ3eVJueUVTeEtzcUpHVTNSaUVEUFhMOURaNUY0SXBBdVNZQ0ZDazhJR1pWTUZDZE9rTHVFMUlLVkZsR2d4WW1uRU5lTkJDVlNKa25KRWorU01GRW1WSnIzcW1ES0l6R2xrU2JiZDlITGsxZngrM2UrVkNwbUtvaGdseVVCVnFreTVDcFdxVktjYVVHM1VsZnBva01iYXhOQXNMVnExYVU5R0lsT2Z2SmxNcHBqSlpESmJSanRhTldrL3J6V29NSUlhTldlc2F1dDAzeU1PMlB4SUk2TUJFOTFxZm9EeXhDU3dnQ09RS0hTVDZRVnVEaDVoRlhscHRyZ01qeUJLc3FJYUwxN0djZGtBNThBOGdDWS8zMlBMYndrbkNRQkFObXRDdzZOb0JyVklxemJ0T1VzV1U0MDVsQ3daMXREeDVwMW83VEVkSkJnU0dMNzc3QkVqbzk0YW85b2p0SzlidjUvaEFNOFJhNDZTamdtZGVMek5ETWhpVUhudTdRbUREQlorSVVGaVRjSm9IY2xJa1NwTittWkdjVGNINUljQnBjcVVSMFdvVktVNjZxWjN1c2VnRjNtbitiRmxyaXE5Qm1tblY3UGI3RzBSdENhc093S1FaRWdoNDg2REp5L2UvSjZKcnoycnZ6MTE4UGs4UHAvUDV5LzlOUEppcjlnSnd5bEtyVXk1Q3BXcVZFZmRWRk50aHJXZ1ZadjJaSVNZZXJlQm9KZEhLZWFlZzBKN1VCZXFSOFNPMWFuM3BGQU1LTHdJdFZTSisrRm1uaUhFc0ZFUVcrcGVrb001SHFmNTBseEJMTHY5ekNNQVpUUFExN245WDVrSEZYN2M2UTJKdmIrS1NJc1NMVVlzamJobXZKRUVXeExISkRYTVNLNUlrVlJwMHF1T0lLT0x6R2xrU2JiZDlITGt5VmVnTUJXNVVLd2tHV3dwVmFaY2hVcFZxcU9tajlwNXFsTlQzLy8xeHNpQVJDS1JTQUJBQlFEQWdFQWdFRjRrY0hQQTR5L2YybTdZR281QW90Q1ZTU0lhVGVWR0ZBQWx4MVJJWlJ2R2M1ajBKSWVvY3h6enBLdGNheWN4STFoU3lWKzYxL0dDd3V6QU1mUU13NkxUS2Q4b3NGQWNyTlZEUEllRnM2TEhGeGxOeXRpZURqYjhHT1FRYmhTSXRqMDJnSWc4T1ZiVWZnRi9HdGthQ3NNTVJ5QlI2RDU1bWNQakxiWWtJOEowd0p3WGYvTTFubzlkalRWZFdocGlENE1qa0NqMEdZWTZrWTFONVE0RUtnVWhXSWpRcE5DamJLb1NDTk9pWG9aYlZGOS96c0xkR1lHZ1ZiTXp3Snd6OCttcVUyc2pZMUJyY2psM2ZHL3NmejZxN29nMlkzNHZmcGRVaGUvQ1oySEg4eUFBL3hROEQzbXlBSUROQVZzQ0FKYlpueGkyY0g1czJjUkp3VmFPbTJXV3N0UEdaeFlaQTFLSVI3bXQzQXpBbXRrRlVJNWlsRGNBbTJRd29qRlhCNnIzSXNCeVZxNWwrdE5hYmN0ckYrUXJBUStsa2lVV3ppSEdLV2M1dTFGVWRNS01obnhpeG5BVTRsa2FBbm8vbmh1U2NFbkhyUTZRRWRvUjJGSVE0R0ZuWUhrZkJnSlR3Tmw0MnJRSDdkVjZJQkt4NEdESVBUU1BBdFlIY3VhL1V6ZVAxZXBaSk5hdE9BU3FGRVFrWUNXU2pLb21jdko0US9sWW1SNmJXaUVXV1ZJRkFOYUlUT1Z3MlpWSHpyNU16Qy8waS9EMWt3RVdWRC96VDliNkRHNjMyaUs0VXFDN1RQMlVOYm5rRVk4NjRYWWlLbFcrQlMzRlVLeEhEUVlvKzhCOXl6MXc0aDA3QmE0UWtrekwwTEdKR0lyclorY05YdUIzUHc2Y2VkcEFNVTZHelJRcURXN250QitjV2lzRnlvM1dDbVFqTDBNbVhvQnFOV1JGSVpJN2dEWGh0U2N0OExwQmZrSHNSUTZYcFZmSVJ2WkJVOHA4NUY0aEg4RUtueG1FWW11K0s2Y1lZM2dRZTErL1R6SkFJUkYxY0t2Tm1uMlEwTThhT1dzWGpUOWp2QkNyNTIxeHF0V1ZJNmFwTHBlaEtjeFp1VzlCV0xKM1FHcWY5SlRpdXZ2VTB3ZGdody84SUJSSVgxVnVOUXlzQnFTdFZOUFhaRHRMK05pdmN3aTFQZ0QvNU8wb3ltMkorNzhvbjByeGdBOU9DbGEwZ04wSkVQSFkvWVA0bmhJYXdiRUoySGxVblI5RGJ6ZldNUEF2eGtydEExNHg2anJBbVlVY2dSZlJsWm5uWXhzMnkrb3dMRHdrUzJWazNkZmpBQVVWSUpld0QwNnR6K0F1dzZwSXF4VGw0ZG1qb0dsWVFYRE1iMzFGSlBzKzY3ajlSTmdzSFlnd3dPY1l0dWZLNlZoQ0xNdWM0TkZUYnY5cEVRakZOak5yMExXQUpCM1hHSG00eDduQlJmWG1IUWhRMGJ6cW1PdFZUbnllUzZ4MUhiQy9hcmovWGUvN3FNT2w3TTBlVW5EUGdoeWlzRjhxSW9GYmhmRWdxeUQ0bzNvMks1UkxyTUpZQ2FDNWdySHd1cEROc1ZvWEZJMys5V1lQYTFsd3ZPcDkxZnZhbkdob21KaXA5N3VwTkhtT0greWIxK2hMSXBkZHIyMVJpQTEzSmliNzlrNnBUQjNkRkFvNzE0cFExeVJaYlRYTXlkQTdtUUU5UkZHaEwvT3hySGpkUm5vMFhkZjl5RWUwblhGZk9lcnpZK0RPM2ZpQldCRk1BbXFGYk9lZ2tBcVhUVm81ZlM2NnlPSVZsTENTZGNwNjh1ZTR5SmVsaFVQdFU2Vm0yam5OQVBxd1dhTm5udjF3N0pQNnhRWmF3U0lQbE9GTUVVR3V6UENCYjJkSlV5Z1k2UTl3cjZKVWpKcjZOWmNiRVl3TC9jeFpmZWM4MkxPc01LNDl4WDYyOFA4TnEzVERFY0lBUFp3d2hMdzU4aFBLazVKU29EQkpnaVRMRVN0UEE1MG03U3FZbU5TeDZGTnYwaVNqVTA0em1UYk5ZczRDcXpmSmZsbUMvWVpKZ05Cd0RBYUJpOGVCSFQ1SEFrNElRa0t1UkVSMmNlSENqU3RYWWhKZU1ONjhFZno0d2Zqekp4RWdnSlNjbkV5Z1VBd2xKWGRoMUp5RUMrY2hnZ1lwVGh4S3ZIaDJFaVJ5bGlTSnAyVHBLRG82VzJUSXNGV21URjZ5NUVEeTVFTUtGUEJXcUJCZmtSSUNCbFZvMWFwUmF0U3lVNmZPVnZYcStXalF3RmVUSm42YXRlTXdNZkZuMGNGZXAwNEJ1blRab2xzM3BFY1B2bDY5a0Q1OStDWk4ydWFVVTRST080MXIyalN1T2ZOMldyQkE2RTB5Wk1rTTRidzVod3NXbkM1YWNyaGt4ZW15Tlpzck50eXUydks0WnNkdHpaN0hPc3dHRXd1aGtSaU03VGc0RUM0ZW5CMW5pSkFRYm91ZEVCR1JIVnlJSVJMZWNENThJWDc4NFB6NVF3SUUyRWxPVHFRUlhIQVExNlU0aEM3Z2dDRUFnMFlBQndvS0RydUVsNitHcWJGTlBMV0dBeERBMisybVVTTk9pQmc3dDBTa1MzMW94ZU1ranJGbjJJSWpKempNU1VoT3Vra29FSlNpanlHZ3gySWEvOVpjMDNiK244K2dxa2dTMjhzNzU2Y2pVcDN6d1RyK1JQZTZTZXJsVWRUNWFldWdlL0FIZ0J6OUY0aW53RThxK0g0T3ZJVzM5RmJlV3J5L0JxTXZ2L0tTdXBpOUhrclZlZkc1WjRJYXZmanlXeStwNHNWWHloZVZUNW54SXEvemJ2YmpvcVhYMVplMGhqMEFZRk1RWnMyQmtBZ0ZJR0Z3eEhZTkI5WGRhbXdyM3M3L0NJZmdZWmlmaFQ5Z2ExMHl3dHpkWlkvaGNuZVRZYS9raXo4S0NCb3JoRlo0ZzFsWEJHR1dLQTc1MkVsSWQ5YUxLNFNGTmRWMzI5Ykc3UklJS1U0R0V2aGpyOExVMXdqQTIzczlCbWdiR2pROTdvVUt3cWlPdnlQWkVSSUNLSXpBNldUcFdRd1Y2b0psZTNWVGxqNVR5UEtPam00TmJ2T2cvVDlHVmZ4TkE5aEZoUURTdy9mUmpwQ0YyVzhPQTY4aUN5VCtmMkgvREc4QzZlK20xeC9JSTg3OU5BMzVyd0FBNjhRV0FZZ2xUVEFzWUFDRXFlTis2bXkzd1lvQTRGK2pOb1djTlM4T2lhalFRUDd5TUZhd0lqUVJnU1VNTEkwUTduMVJBWDZSRjhZS0lJSlVvWjN5Z0MrUTJRb3NDa3RPNWx1TUhHVWFFM2VMZThWajBocXBXQXBJRWFsT2FwRzZyZFcrN3FSQUZjQ2VZaWtBNEJQVHNMaC93VVdmT2J4OVI2VThxZkE0U0tuNWc3WUNYQVNRQ1FCWU4za0EvLzFOMWYvazZTLzBZLzFvQnI3NEdYeHgrMk5mMHUrLzdndnFDL0x6ejBFZjlPUkJxam4xUGdMb1pROGIrMVowYzhnTi9sLzJEV2ZObWZLcFgxMDM3ejJMeG4zbHRCWFRiRTVaOElQdmZHL0dKb1NEeTQ2QU14WTJEZ0VoRVRFSkdTVU1Ub1dncGtjeE1ESjcyNFIzL2VIMThTQ0NTNElreVhReVpNcVNyMENoSXNVTWF0U3AxNkJKTXlNVE00dE9iL25OVzM3eXZ2LzUyT2MrOFlYZi9Uc3UzTExNZVQ5YmRYdDJjTmV2WHZMeWFQakZEVStOZ1JjTnVPQjFyM25ETEJJR1J5TlFHRHhPeWptb1ZJT0xoNitVR0F3QWtvUDh3Sk9PaGhiSkJOVXZocFVOTFpxRFU2SjBLVktseWJPYlhnNnRFaFZLbGFsUzdsdVYyclZvMWNhcVZnZHZuYU1RQ2N1V1hISFY1Y2k0V1VRbVVtVTBNTUFtdGdRc0JTenRGM1JiQkJld0ZJQXc1bDQxaWpjYkJtUXA2eTNBRU50ODJkQWt3anhuejdQNzhWVVVEQi9WbXVBZCt4NTZjUCsrdlh2R1JrZUdoMVlzWDdaMHllakk4T0tiRnkxY01EUTRNSC9lM0RteisvdDZlN3E3T2p2YTIzS3RMZGxNT3BWc2JtcmNnV0EwN1BjZWZlVGhoN3FkZHF2WnVQK3VkRzIxbHNUQVArZno2ZHIxbW9wKzBMSjFURWdnUzZDdXZDNW95QWl1YjAxM1lQTUxiWXpUYk9EQVRYNVlFaVl5Y3BVNUlWY1BmSkRsSitvT3Vkc3ZMT1V5Q0hBMGVwU2hSZDRkdUg0S2dFcE1FT1daR2I1RUZjTWpWSmtCVUJVQlJaa0EyWktOUnNBTjErMTB4Szh0aTVMdnU5Q1FPY1p3eG9idFZKWVNOWVNGSTMvZXp3aUxKZFFFbFZBVnFiRmZWajdHRllLVXdpTDJNOWNTZGdObThMSGNzQUlsdjN0K3BUemlrZ2pTOExobnBSQTR5RHBiTzdCY2VraExJUnR5cnNvM2hPRmJpVTI5RmdtS1k1SjgyeFJkOHF5bHNGV2tFSC9iYW44bG5EdjNaeTVlNERWR2laM09RUkRCRDQ2NFhuV1Rtb0ZEUjUydVhKa3psZnlDUk4wakZVTGVxWlZMTlFFWG1WRWxEb3RaTk9maXpRNFJMYmkwSzNWZlFpdU9LT0VTTUZUdjEzVHZpNkNWeVU3V3hNbUtXM1VidERtbkkxN3lYM0hjbndqZ29mb1U0bWFTVWxMbklQb2Qwdzh5djY2b1dJTWRTaUdQVXYydGdtQTRFZGExMEZybnRRbS9lbHRoZnd1aEFIV0tzK0pzLzN6cXRUeFNmY1pkV3ZNQmtFa28yT1dkNWg4VnhrbDF3UTB0V3FmWHhqbmJYVHdEdzVvbVdaNXFkdkhJRGJLWXh5Zzk3MHBKdnpBejhuMzVPTFJrZlNiZERUcFpnTk05bFFKbTJpVTMvSDBuZ3h2SDI5ZEFlWTJRRFF2eFo0elNocFFiaEFqQm13VmJJN0Y3SXZKN2tpTjFGSkdXTnVBbjB6TUV5UmwwaDJOMTdKQ0tpZ0NQS2Z5OW5ITk90enduSXp3bWd1dlpaL1RNQmNRbEhBZnc1RXhIRHNYR3VGdVNlbzN5Q0puWlJiM1c3VWYzYU5aNzNFWUs3a09TbFZKc3dZWXlKQ3RjR00xR3JqOThjbkhoa0ZtdTdQZE93bjFXelIwaHhUblJVOGFCSm14cUg5d1FJSWMvZlVXQkhqOHFySVNqYk8yaFBXN2xSSWFvREpwS3A2V3JWSGIwb2w1TG5LTHlGajJUSGdteTk2QXBaNi9scTFpTlBZOHZ3REt6NWdzK0UvQ1pJQ1B3Y2FjcWNuUmlyMVJ6UHNuQ2dRVmFnNVVNcktHSjZ5NCt5UFlaSTd5aktUSktTVU40b1VUN0dUZGl4TzBEa2ZjVFVkbWthQnpxUGJpNVNpS2ZKYUpEREtZMVpsMTJ1MVJBT2t3U3A3ekhuNlFrYWlwTkxyNkUwcEhnbUlRME8zeEJuV1N5WTIwY3VIMnpXWXhOUTN3Mm1Gd1A4eGs1Y0tlRHNkVWFrS2xMSE5KRzhzNXh6eWhOdHRFQmlSRE5Rc2NDbDJ2MlpBbjFDaXR4TUVqTE13RzlwMWREdGRxaXdKVE5DZkxTcVJTMEF0VnVxUVBJc1FDUlpJbTh4NjZJTndwVENNSkMydllIck5NV013NVR4SjRWaTRIZ1JSb2tpZ0ZLUFRwbjQ1SllneHFoMGJvcWd1SFA2SWdrUVRLVlBwOUJtQ3R5U09KZDZieUUwbFExZG5rdGxjaUdVbXBRTzl0Qm42QUJSQnZZYmgvb1hhcG5DQzc1R0dJeGw4VytaWk9qb0hVaHU3TkMyNVVKb0xkb3ZDMVZvQWkyRkFYcCtNNE4xRHlBelVVamVTdjV3RzdaYmY5RWNUNmpNYnNKMUJwWS9KdG9sN04wanBRaGdMaGNZZlllVVoyQlhxR1VIODVROFJSdHoyZlFkbnpubGxCMThkQ0RNM0JNMFJWbUxYR1BGVlJqRWRRaExQOURpSnZwTnpvVUF2ZWc5WkFMZklqVFZiNGV0NXZQTTlBVVZDMTFKWUJNeUVwSm9MYXdIVnMzQTBDTkQwY2cyL3huWEpOK0lKVzRBS2YxR1NVYTNWQmN1TXJYbFVZVHVnWm9PelBmV0tSdWM4cVlNbWxPTUt3bDd4MGtLdHN3bGYyWlJzcmoxaGcyeXpxQmFQbEFhTWxrUkM3ekc0V2FIYzhBQnJseTBtRFZnUGhLZzYwS0lHc2xuMUZGUUdvQkhZMVRHdjlLZ0pwM1ZvbzNPQkl1QTQ4NW9yaDBjME5HMkxYNnlTQTlzR2NCYW4yUWhvYmduaUo2RmV0dUtTSFhMcDVlY04xRmkxbzNNZ01tS2R3MElyRmhqODFLaVVMRHZSSkRJNUtTVWxLQUZJS3hWekN1Z1V4WHBHZ1pmQWdQRUU5ME5lekt6cHh2SGJQVFZxMmRPYXE4NDJFTjl1eVR6SzJGWXQrV2RRWkRlNFViZUIxOHN3dmxRVUNpRnJiTCt5QzdXcWx6Wk9VYjJWcFlRWnUxbVBVa1QyWHk3MjZOajBncFVtb0VXSWVyL0ZKa2drZ2JBQUw0RGgvMGxvNUpEQk1DN2tnMER0elBvZ0YwSzdMV0xYUjA2UEVOMG9vSEgxbHVlSmtRRFBJV1U2TVpPNkxhMnNndW5GNTA4QzJsWUdaUGxjeDJYSjF0dVhGYnJlNTFDSVVXU2hiNGZvajZMZ0djbWxnK1VDaVNpeGNIOXJKNlRUSmRBQzI0QXBHYnNhNWhhL05JcitoOUllYVhJQ2ladThDNEpMeldUN2dLWVQ3NjM5K0FBakxscHBkWEFMYm10L3pjZFo4bmZJL3N3WE5iWmR3OW1SMVNPN0lmZ1pLQy80TUN3cEN3NXNEMWo0MHdJdWJkdHBCTmNzVkhtdVVQdmhha3N4TTlGOEJMa3NRMzZNL0JPSkFRdDhUQkJTVWJTb2p3SzMyRVliZVFyenVZR2E5bldGaE9LVGxRQnc5Q0ZqOWpURzRKM05nRHZldUFnMVVPaGI0S0FwOXBIZ2FNSktiMFNsb0w3RG9kSHNManB0WGhrdk9hYW9lMENIakRVNnRrS0NCNDJnWkp6UkRjUG8yeE5lSnJaRHhjWGVWM1YyOEp3azBISmhVMDhMdEdEUU1xS09QM1RHb0FJNlluYkVrUndEUmszTzRraTYxSW5xVDgxMnhLYmlpb0JNR0U1RExwTUtyaU9wb3ZGTHRiSWU5eHFNcS9TVFlzeTBaUUY1eWFaYXZwL2ErSDd1YkRucFNzaUJ3SkZhZ0JNaTd3VldjN1VIcWxtdzNmY0x2dm1uVlJTRllSUUVuZ3huSHZ1eDhRMUNWN0FJQXVBSURkQUgxQStMd2crZ0hnUDRDOVFMZ0JBTmFldk9Ud29xTUhVb05nbVZtRXlESTdMcnhMSERYWEVrN1pBTUk5ek9iR3lDR0RiazZHNVVnblRwUGMzK2paUU1qWUdVeXVOWGcrTS9UaWJJMmNCeGdKd2tiMGJnaTRmWmY1QUJDV1Q3QkRTTThZZVMvSjhubzRJc3hRWWs1MXdaS200NENqdzZwVGZRalhqVUx2OWVqUE9WS0ozUGhTMmlJZnVsQUs2c01MdXpZNU9uL2JIemhaRE4yR2FQaDQ2NlpMVVVaRW1XSjNYUkcrOEErdjVZT09sRklNUkZCNCtMald5dVN1U09lcDNxclBXck5Cb1J2R0RXYmdxY3U5NzE1a1h6MkJFTUZVWlhmaHZMOVVEL091bTY0d3o4MUlrc1NYdlp1SU9xY1lSQ3B0K0RVaWdzdUUzUTdidmc4ejlxRXpmOG1mZUhGbjU1c0pSVXVMWXhRM2ZNSFp1Tzd2aGs4TTA5MVF4TEJaMVNlMmlRTlYwZGpFdUNGVGJueWplYXFOV3REVU9icUplSnNCdW5JUTdQS1dxdkhQUEZ4RVhUTUtSamZBRGMrTTliNzVXaXRLZU4yVFR3UE1iMFBBOXEyRlVVR1NhTGhzbGpEQVVBTU1MZEtZUUhWamN3cGdZS293YVVRQzE2cnJoeEJEUlUvYVpnYkVvVXMrQTEwVHhrc25rU0xqWmF5eVJhK1BoS0tOakJUOExvU3FycUJHaXFHU1JpRjVUQkM3aDUzQ2lvZUY0V0ZNVjF6SzVqRFBvYmpIZ1A1YTlzQkREMWlPODRXY0w5NENvNUVkY0lrSGxOZkp0Zm1tQUV0K0FwMUphdHc3djVMeGJTVTNtZUtDV3MxM2NvZFFVWWxKVnYrOHRtdXJBR29FMW5wTWhaZXhUTG9QTDBrZzdVZXkyTUxFdXZNMHk0NUtsd0dsV3hBaG5IZk5qWmFXTmNNNnJKYk1pbWkwK3N6djlCQnFPdXRmUFZFakhqSWJOZDVwYWFObWJIM0ZMSnZpMXRsT3hOc290ZGlPd1Q5bmVQTzcrZVNHRkZUejBUYWQ5WWRtQS9wSjhxRmE1Z3NmYW9pc3c2MUFudDhPdmorMjQyV0szUlZyK2N5T0NHVFhUWjdacTN5SEpRTFIrcWZ1U2JnUGw0VW9Vbm5GTXFsdUg5QVA4UmlPMWthbHN4ZWVIWG5rdU5JZTkrNjA2emloMXM4T0s4NmVrTXI2cXNCczhydVVxNnhGSDBnVWZWc09ZYW4zV1N0QVJmN0Y1MHY2d2R1S2IwWXYyYnNwMnZDd1NxRmFNQXJySUx2WVYwcXgvVHM2Y0Q5L1Iwdm1iN3ErVWo0UUpESGZMd3FhMUwyWVNhS2U2b2NXWFQ2RWgrVnd1YVJ5SHNwTHRpVU1lZnBKUlVZSXZkT3A1WUYrL01oZ0JCMnBmd0dqa0tjY2Yrd1NJK0JWek9YTEdnMWN4VzREVmY5SE9hYUhpU3MwL1IzZGZTaThoZEZ4WWg3TXdsRi9qeWh3RGFnRi9DZTJ6MGh3d0Y0WDVKYkRzRkp1QXdNME5xdGpzR01EQ1Y2R0sxOWhqVUFEYlJON3lHZGhPaDh1d0hMMzBHenF5bG1jdjdhSWc3UW9selBuTHdyYmpjTnYzNlhLYUZaejRpOFBWSGhlUTNvUXBhcUxKREkzU0RrRVhMSE1DSlRaYVBLeWZRVFVXcjg2cUhjVzZaVGU1b003dmF0TkRYa0ZsY2tVUDZHU1VRaFZXaXRGMlc3MTlmUE9aSGU3ZzhXcjdGbTI0eThoSGtUbVJnVjd2alBSWFBxNGREODBhMGFaZzQzZkJWNXRXdnZJNkFCWU9nZkd1dGk4aS9rcXhRdUxFR29HMW81ZlRtbTZuc1dacmRsdUUyYnIwTGdrZFNoN0YxTVM1cEQwRFpEdzhVaXRXS0ZtdXN4MkgyMXhEL2JtN3h4czhPSDFsaVlKU1Z3NFl1andoeFMzMEJ3MjVCN2FDYkd0Z0haVUxJbTZ1ZWF0eGV5cHJWa3ErbEZuQm1SVkFkMm9VVDVDVjZQTGtYWDRrYUtiZGdUbUZoamVzby9LakM4SW1sZ2JMeXJHSzM4UzdKanF0MUU1YUNNaVhvd2ErVVBneTNiSjU2ZG9ISWd4UFBnYndKcmRXdGxPR0o3TUNOKzA1aTZWN1VtamlqaFNtSS9lb2RYakkyV3hRSGphbWZWT1NQeW5XRHQ1OGJveTh5dkxONHE5M0pocEw1cFdCblJHNmxhYTFwRVY1bS91SUFwUk43UlhuVGpJcm1uQTJzSGtacEdjRzZ5czZaZVdYejZkOG5UVGZ0WmhRT2JhQlhtTFZNVnFaa2dOREZnRGk2WGxUWW05Y1UyV1lqcHpTU0ZBU0J0cXFzU29saVVQS1VmYkFEMStwaWJXWjV5YVl6aS9mbVdzSFJYaWNqLzlOcDBaemZpWnRKMzExMWVkZ2ZBdFg4VyttbXYyNTFkZkV3RkF0cUc4dHoyeUR6TGlEdHZhYmVyVytKcU5iaEN4dFNnck02cTRzbFRKUzQxeGFDcEJHaHBwRHJyaVFRV1Y3TmdkajRGNmhTVWptb0xTQnN0WlRkdmRmaEFZbnJCalVpem0rZ3dWdTh6cWhzV2IzeC9GKzVYRVVEVVRRWFFDeHdkSHh5NXZpNllIbnMyOFVpSmgwbjd4SVdDMzVsMnNHVlFxU0xIZjFDTjdnQ1FLa2VHZ1I4YVRXcVcvQmxmNUtDQVFnVG11TEN4TXpSampMSXNSNFFnM1ZqbzYrYXZYdG1zQ0pvWk1Pa2NiekYxS09IR0Q3Wkd5a2xjV014c2VpRHNTbVV3Q1NSYnhNK09NVllneEtnd3ZSNVpOTUNSNDFPUXVIc3p1UTErYTcrdWYzZ01lUDNHUkdYSE0wR09kYkdoZmY3eklhUkVCK094dlRoMDk4QnMzZi9EQVkzcG9EeXJRVXU2VEVIeVVoNWR0Y2ljK09DaFFGamVGK1JEejR0dnFkRDlGdE9DaUEya2ZJSHZlazJQTFJmdEFPOGR4WXU0ZTBMaXo3V0J5eSt3RHhYNlpHdXJaYWJydXpHeldvTyttQytaRmtuR3NLVHVMek5IQ0pDNUg4Z1V6RnM1M1dyQlZNZ0szSWxPQkZML0JFUVdtOWpUbWNSOFVFazBMSi9RRU1EZmdQSFRaQ3FxV0Yvb0tlZXY0VVI0cUdWVVM1enhCME5meXJRZG5UOHdmZEVhTHRwY2ozSmg0RmEvR1Q2WWM1WnVBaTJEanV3YytJYituT0k3dzZNYXFPK0N2S2EwanphZWY0RHFRb2VVSUFrZGttNXU1blBPN1ptd1R6QUE1VlVmeG91UzJHRkFJTUFoQTFTK2ZZWVZJcFBjWGlGTEZDam1nZU9Fd0FVZERJSHc2MFBncEpORDJPRlJGYndJTUVheGhwS1dXNzJYN2xtdzhPWVdPRncyZFpzbjJkTnY4SnArZkZJNFpobVQ5d1pjWmE5Z1N1QUJUcnU4aHc1azBtZUNqN1NzZTlkS2dnSlBSUmdVc2VVVkhhayt4eDhNUTFGR0RoTXFhdWxtblBMbkF0RFlBQ1M5T1c2SmV4ZTFGKzR3OXZKa3o1VXgrcWdXODVqa3h3enc1d1dBVzVtSFp5ZnpPUmJOTXpDT2M1amRWcGhac1Vwc2UrcEdnUnB4bVo0K1o4OWk5cE8zeHhoZzVSaCsvNGJVQ2pFcGg2ME9QMS9HV1pyV29yaTdhWld1UWkrTFpKd1lwMGJOTWVmWmh3eDQ5OWluNkZKY0FLNERtQUdUSWlGV0p4RFR6d2xIZnpmemF2UVlkNHlZTXlEU1lQQ0xObUpDenVGRmJwbzVFdWlpUVpKbVFsckl6a0V4QkdtS3AyTFRqaWtpUHNLZlB2RjJKZEQ0djFFL3MyZTI2c3hnQ3J1Q0I2TXlaTGJzSVAyVGQ5dW5NN3Jzc3RQMkg2RkJnVWxPQjYwQy96WTRxM1F5MHBybmNBUzdKWk04MTJ5WWRKWkw0NGdJRE51NDYyWVJhVHp5NUhLcTdManhqRk9jYnhhWFpwQjByYlpiVVBUT2IvN3F4a2ZUUE9nWi9kS0tSZ0d6N2JmSXNvUTBEeHYzejk4M0xONFlvdm9hYm1OWjJuak9LSG5aOXNSZFRHakpxeElPWU1pZG5Kd1JaRHBrVDIycHBrZElVTlhGU0JoWEtIR3VCaCtobDMrajViU3IyWE1PN1NCM1ZLYVgyQmpyT01tMTRxK1JzT0dCSHN3WUZOcitrWUx6cUFNMDNuakI5OUdqcWprYUR4TWZPYU5yVzZFOVZNbEJpbFRWeGNXUmlBSmV2L1ArVDRhNE5iWXFFc2tkc1M0YTRyVktMS1FKTkJKUUZiU3JmanRCbU1vRVVLU3ZqZkFsQWxZVGpTMFJoMU5IVXRNV0hXNEZuMzBZVTBJNEk5QVBVOXJ3dHVOK2JlbmxTY3RpRVRSWW00ZzRqN3Q0QUpKR29jZW9rT1JnUU04ejBmSDlOTExhU1FSRThXY0M0RmZrYXNDYlpoWDZrNHNTYkdYTk5MZEl2bVFIT0JHb0dWNHRnTkswczkzeGZBdnJpN2VtTUFoYVVnY0dJeXlmZmVYU3BiSGc5L2Q4bTk1dTgvdCtUdTcvdCs3YTRUeC9zby9lNU5Qd3pzcHZLUnJOVGoxenAvay9iL3pYMm9FLy8vMlNXZStOcXZnbVJkVTBhS2p3Ukl2MTZwRTVGVWVuemIzbzc1QWpnSEVPa0lGOStHWEk5ZkVOWUtIOWNSa1B5cVExR2hQWFMrTExHbm1YMmVHNTlrNVRadXlyRlhNOURtVDdLbDRMbW1SellZTGk1UjJmRGtzS0liZkM1cmt4Z0FEYjZSMnVUZmVvMS9KYUpQNFoydFFidjc1aWJ1Rzl2UWErb00rWGF1aUthSFpzOTFySXlRVytyQm1Jb2d2NFlFemgzMTlmZHQ2ZWdyODY1ZFdWNTY0ckorSlNLK0c3aVUrSWViai9lTHhmSTloRlhPdkV4Y1ZkTkM5NVN4eDBwOUkvYVV6MmFWWXhYdmFxNWE5amltNzJtU2Nic0F6MkxhME9PYnIwdkNROVlIZGhBcExsWGEvV011b3crYy8rcVZ2MER5cU1wWExKbWZFTFg4RWFEYnUxeHYrRVd0SkJ2b29UMGEra1cyT2xtNDJZM0FrUm1EUVlYNlByalpXdjkycEprVUJOaVg2Z28yZExoZThZakVRTzF3eXFjdi9QMmoydWk1SDJQeXl0T2QzSk9BTTd1MUUyMi9GcW5mVVJyZHZiMDRpN29YNE5EcnlmSkxSb3VESTdhbXJ2VnE5dys3YXAwMTRqRkZ4cXhOL2VxVjdyODJhbWFjNzEyNVVDd3VVZFg2K2lsQWlsa3ZzV3VHQWhWcW8yTytWT0srZFdDZlFjWjdTcUMrT3E5L3JyTVBJTXp1TVNhN0tHMkZqTmdpTGNrMy8rbzVWdEROMUZ4RGpScHNpeE0zalp3eXdTa0NzSXJ4QkdsbWV4S091eVhTcXdYMUl3V2pLblVhTlNyeHY3bXpxTnVUbFVVVlpxMDNjbGErdy9MZEJPNlc4NXNVYnRJS0lZVktMNkg3SGhXVXJPcjRDRnFaUER4bSsvV2g1UlBIcVg0TFJOeUlnalBGMGVVbERJVHRIT2VxcmJ1bi9WVGlmVUt3V2lobUlwQW8xNE4vcC9nU3F6ZzdsdWowcjdXS0tONk9DUHhsNFhMQjFCYndLRUd2WXdxeXpVYk83bk5xdnJIbTd0b2ZxQk0wZExuZHF1dmRFTEI4bUI1bjF6UFdPamE1SkFxU0VRclhkQ0gzUERld24yaCt3b0phL1dTd3NZaEs5TWpXc2wwNjdvdDNBRkRzbFhuODdkU2hpUm52dm1hNkJPdjhuUU9tSFVRVFJ3dlhXOS9ENnJRY1MwMlhqMzNEYkkvdnorZlhJYnVTcFZ2VnF2SDFYZk52WHV1bWhnM1ZteStyUWh5alY5eVhuUmEyYjJsTGRhL2pIOGJiYVV0N042YTRQaWxUWmMzbWJsakpib3l6b3Zjb3U4dXovdVBJTkR6ODg0Uk9qNndXMjEwdHlPMG9yRlVvUFhYTlFiazlaSlhHVmtyb0c2Wk15OVhVUExhMHo2clNncWxnWEtsYlZCYnE0MHFjWDkzL3QwUGNadnNrVkpsdE0xT3liaHZLa3l0S09ZTS91VjBzVmdUVWVJQkZXRmcydVVPMERmekY5YldCWHRqRGp2U0lIbFYyODJrbkJsTC9iLzlOanE0d00rTUJndG5FUmVENWx6V1lEUzJHcTB2LzBDYm02UmExM3dINUEvcmt0eWZMZTNZMnM4cTlyeGIvS3VyR0lqbUhIcFEvc2E5RiszRzFqUmxObVlvUXc1WDA4WDJmdnJUUG1LU1pEeGRqTXZVcExKSHBEa2RCYmN4d1JUNkJ4R0NCc1F4MUtydFNUbXNlQUNaQngyd2tWM2pmTFRZMElKNmdraTdLZVFjWHVnTCt1YlFqNVhQYnREb3pCbXpvY3RSYSt6TjJreVF1d1liS1gzbmNvTzBXbGtRc0kvT0NYcmNmYjdQR0hKZnlmNFRQdjhPVmkydHNKeWJZemNiTXJnckJPWEdKUHUvT2htQkVKVWZqZ25pR0M2Sjd3Z0N1R0M4eHlWUkZOa1VuZDVBVnFIM0xIQXk4MXdrMHVSeUpXR2RiOGo3MklDMGxjN05iMnNnZk0yNmVVTzJZZmJ3KzFtS1NtWDBKbFBXWkd3MVVZYjZER2t5WlNsRGVzTnQxYlVYbDBaNW82RWZlNTBBV214c1FkMUJwTU1ZZEE0djlQdURRd0hYaUg5NkNiNXNNZWZTQm9NaFo4U2FNL3EvOUM2YkxDNU5HWTBwS2doWk8vMzJxVDBWVUFZcUhXREdxVmFKaDhUVkg5N04wUm5pa2FwZHlsMm5CSklaVkJxancxQ3JqZ0xhNldBelpuQjNlWUVob3NyTDVBWUlaMmEyY3hybmJML1dSaVVSZmRpMDRNeHMyNlRzRzFPbFl2L1BINGNBaFRvZ0orbWF1RUlsaWUwSUFySkxKTkRtYkhNb0UwcXIvNmlMbkNTajE0ZDhOSDVxYVZXOVFSQXRJb3UweTdOa3R1eEVYT0xVR2M2azIyRDkvVGMycy9qZm5SQWhKSVNoakF1KzZXMjE0RDFRTWZFQmU4bmdJK1FrZWNPbU5ILzcrU21kTVBHZGJpRTB5YXRndjdOdkdyOEtCYkN5SUFsMDJsb2NkRWU2MnV2Y2E3dXMyZGN1eWZLNXlDTDFzdkplZDYyekxyd1M4blI3bmRpaDJSV05CdmhTdDdvcFc0czNLR3Y5SjRJNG44ZlNLQ1B1WHFOQWVhTlJVQ1F2Tm1hVlRCQnVOeGpoTm5jd2l4b01HZFJ6cm04ekd1RDJ6U256WjBZYnVqSldreWxyTS9UWWQ5WWRFb3ltak4zWWJiM3JWcmJ3WEJ6cG9QV0p2QjNVZWM4NzE1KzVzYlhDS1pOcGtDSzQyRGZrYzQyRXdxN1JSWDZmUG8yNW91ZjVpZEdXZXQ4OHAydGtXcUt3aEZnSldITXRSck01WjV5MS82N1QzQ1JSNjFzeFg0elV1Nk1wRkRkbnJJYnVXZ2ZWemFuZjJGdEpLY3NuLzZyTXJTbkthRXphMCtjK0hDcG0rcnovZWNnVFJOKy8vYlZXWXdwM2hhR2MzbTlkTWp0UWh4TisyQ0dJb1NwSmZIc1F3Z1hqdmFSbFAzdEhDQUswK2RPODJwaFFHamVZYzlaOXVPNHVuYXcwVSt1d3BOU09xTFJOYmRYME5EdXNtQThPVlQwbmtEVjlKVkFGNEFGUm5NOHROalRodFNGWlRtOUEybDJCTkthMzVxbjJFeWRJVDJKMExvNzdvVG5Ra3phZC8yc3hFVVNLL3hwQXJicnVsQjFnSmozNWZWR1cyME1XYVZZOVd1Um0zVkl4cmViZjR0cCs1WktPeDVzaFBWTm5KSUV1UDhjVzhZc2NTaDNwYXBKUzlyUjg4UERPTExFR09qY1hFYis1YS8rbFpzbC9oRzlPZ3Z1YnZDZC9jWDJkVGhWS0tBMlY2Z3I1Snh3SThaeEFDRm9wOVd1dWF2TnQybFF6YWFMcUZHcXZHaFRTZ2t1UjhvYitzQllPZS9WZG91OUZGTTk1NnJoUThNT1llRk5BR1hpR2ZHWlVPYnBNbU9WTHZpVDUvbU00Q2JmVHJTNDhqdGk5Zi9uSkNkY3g2UzJ6TlBuSi9MeEh0TmpycWF0ZktES1M1TTF2WjFDdmZmNzY1MlNJVnArZVFib0F2cUFNR1Y2UHI1MzRkUGFOcHM5VTNpYzlUeEtWdG4rOFNBTXpIdGxZdnZ6aHJ5M3ZGNzVYWUhub3EyWExIdjdLL0c3QmU0VTFnNGYvV1ZXL1JpSHhDNzAvejZDT2Z2N2E1enJoL3B6L0pMMUs4d2FyYU9idDFsZjY1QTlDYzErWkkzK1U3d0dtVllUSm9oNlNrajFnMTVjYzJTNTVkOC9Md3VMWVBPQWVFSUFJQk00Z0w3b1dxMkwveVRjT3JQTGU1WUxVOE03Tzd0cytmQnNtVnZKOWNOVlVFWG5xNkNuU2dEc3JFUFdSUnNEWk1Kc24rK2FGVzZLWWhyR1U1Mm9TNVJnYTV2bVZGUXVWQzhzaGVZVlpGakFaMUZ2ajlRbkhIOUxYZUt5KzlpY1RFeXk2aTVXemVodWgrK3E3MXh4N0ZsSHRYTVNFSjZaaGhlU1E1RDV6L1VVVmk1U0xYSWxkdU95K3hFZk1DNUQwc1F6cHJpWFU5UmFuL1RPSnFrRXRXSGUyektOeWVpSis1bzdpMFZWWTI2enBYd0NseGNmU1pEOUM3NTEvcGN5WU12QzE0ekxKVmV4VVJoL1g0blZxVXBVSVhMZHJzQXVwVnRWdGZ1d1pyOWdMTVBJaVJNc1ZqcTlnYUp6R3JWSkNTY2Vtd1lqZlB4QUJubFRxUUZRZGpJNUhOb2UxQzVPMDFaS2lnWVdCTFlCZExOWWsvWmRleFJvVjRTQjJmTHcxYzBYQ0l2bXpxMHFyeUZLQlNqaVRrZm9ZWnZUbzd3c3JBTUhaZnpSQTU5WWpCWlc2UDEwK3ZzcGVqK0VlQlpyWjh1ZWQwODU2eXNDNUJEZncrMWN1RW9wb3JhWlVsOVlWR25Mc2pSQlpFeFBOSmdLQjFzWm1IbDZUYUF6WThHMWVHV0ZORzZLQ2MrUDFJbzB0cTlMSEtZWFVmWncvZjhXUk5ONzNCZmg1a2tnZXFmOFpXUzJZdmtzM0VqN3BmcWk3MW01b0pNZ0dJNlZOMU9GNk1vMi9yNGx1YmxBVFJ0NnBCa0JOOTVudFhZekgyVC9Qek1WK1llaTU4NXh1VFQxWVMvODJWN2VuTlZacmEzVlM2T0dCZ0MreXNJVitZM2VLWHIzQUUvQU8wczc1bDlZWTBwU0xHcWxVQmtpb0RSL3hWRHF0NTcvQTNhaysxVGR1THVHOWFXZlNBeHFYYjQ3UmxqV3E4WUNiREFtM1lCQUdPNitIT1FwNW1ITWRwakVZdTFONEQ2TlhCUGdJdG9saEErb21oY21uUmRCUk53c2dtdVVtZis4eUZJMklFSGxZYkcxWk1RekIwTERrTndIa0U3VFc0Znp1M0MweGh6VjNiMmw2MVpBbjZCbVNLZUZhS1NNSUdLbGtlQTl4NjRxOStYTmR2bjVvbVkyV3J3ejE5ZGN5L3RtTWZ3NjAzT0tVcndqMXpxNVY5M0FrODZ5WlJxUEZsclJZY3FJNXBQRzhqejNUYkRUVldDMnR2KzhxRnFzSUk3R2haeXMrK1QxTFhUUDN5NC96eUxjYWJUN043ZEFFM2RUdGliak1venlrVm9LZUFHWTJ4cUc2czJLSWU3UkphZzNrVE9vTVpjRDhiblZFSnFZRjRWckhhNkw3aVRKcGtiTVhjMFRxT0d6S25WR2FEVTJJMW9XcHpVd2Y1QU5WWU0rZ215RTA3Z1JNTWgwV0lzWnlVVW1oaHVuWFdaTW01ZisvSGJ2czA4bURLck9yY2E1YXNHNWlEajdhSmJZNDBYbk9zRVpjVXF3YkR2L2xmckRiVWRXcHlYcUhhdGN4YlhUVFRnYmVKNzhlWEY1bjN6eUxaUEZ2ck9EZ25oT0JwL3ZIVGFXTFdoSDZUZG44M2ZSN3N0RXkvWDV2N3NyUUsxWFh2RjJOYVlQUk5xUnFEQmk0MGYvbjZ4UWwrTDVRN1laKzQzcGtFTjlUekFDWW1vR3VjVHhTaU9jdFlvQTNKaEJaeUtYVndqdWN2Qm81R0hScTFjaUtPTC9zdWdUNENHaG0rZ3c3SzhFS3h6dlN2UDR4QjlZSm1XVTdKeTgrSXBVNkRFQTEvNjRSUGMwSU5UNjNTeU1aR3dQdjM4ZVBzNjRDN0ZjTGF4dTBxYzZxNnQwUTZWRUNjRUxKY0tWYzJndUNJSTJxbFo5K3Uvbloxd2NsR0NOb2t3REh4cjRlUnFTSHZYenUxT3lmcEgvL3o3OWhCc3l6VDI5OWJWVTRkaGwxaVljUjVFbXZCTk5FbE5JMUFsb3ExekVVSmxGNlJOTE4wd0Q4OExmdjdwMCtDYjRPYkplcTJYTld3MXU5b0FvTklwL21KWHdwSy96bWg5MzVQZ1FQWlJhTlJOSk5QcFVmdk9mZU9ObGRoRkFvMmdxQVc4VkNRZGxXRjI3M0RaRDZhWk55Vm02TzdGbGZEYXJ5aXJ2RThtZlEzeTVMcEhmUkhBQzRlSmRFOHV2TXJUWGFHcVpESk9yVTgyc2FGd2pFWGZEcGp6Z2xVNGcvZFFNNEo2YTA0anovMVVMY2orVGYvTkZUaU5XWHl1djlIVUF3M0F2ZUJTTUgvQ0R1eXpTSFI5TUxmUStCVzhzRVF0RTJFRmdtRkFxSnBkWGZoL1N5ODNXT2V5ZTVMRmlIZ0tFcEozaGwvN1dCYjRGMXJsNU9Xd1hJUGpLWkJ4MXhvWEMxODl3ZHZ4L2l6dUZkWGpxQ1BJMVBWRjhDT0s5Nmo0ZE1kamtCZEtyaXRTSFU3bmdKM2QvM2Y3ei9KMWs4RXpUM3p4U05CYXBoK2I2eTFUVzByRnFNS29kYysxUzFGSDB5THFEQ0F2RHB2TGcvYlVFcXRmRmZwNnB4cHRsTCtLQ0RUc0IxMXgySmw0bzRMMXl2S2NtOVV1TVZZTWN2NlpRY2t1OVdPdXVPc2t1cmIrNGNQcFZQbnQvMTRac2JTQ2RPQmVVWTVnTzNBVWU2MFNMdncrQlNzYXBheXJlRUowcHNaZi8zV2hPZkZIem83b04renp6di8zbDhqTVZwcnN5OHdFbFdaU3FPNklSTWR1WGtUNDlJcFdvS3FDNitxMEd2Y1FrMUhzYWxrVHd4ZHNONzZ2aEhySXZBUDJZUlhaTGlOTDhySHNYZkxKbFMzTVd3dHpIY3ZEY2czK2ZtYm05VDl2NWJIMzljM0RqK3pMamwyZkVTMTZWdXZMdW9vSkRYMDhQajlDem1jVy91NWZCNnU0dGNoeHV4UnZSenl4VnQ4YkpvVmJPdW1SVXRZeHJ4eG5ETXcyRXp2TngzNTNUbnlPOTZkRDNzVy84bCs1eldiSjNzS1YzODJYTHl5dzNLVzNSZjRQb3ZQazIzTXFSY292dHl2WHluNWlOYys5R25pOERDeVdzQzlpa2pITlRlU3pNZmZGTmY3Y3djQ3ZFZWZOWkxlOGdsaG1GRzRQaWI0anROQ1JFS3VibnpKVjQxdW1tRC84Rk1XeitGdnRHQmQzQzBwdkpkMDRjelJUV2ErNWh4RVpkQTh4ZkZjNXJqSXV4ZEEreDR6N0xjeTgvMkNBNnBEZ0dIOEVQbG5wckRxc096dkljYjhVWkZYcTVtTjF3ZDVTTGpuNCtiUHhzdmNhcUlOVVJSby96VzJUYTlwWGpkdjlmM0ZrdU5XS3pvendxZ3FyeFNVWGFtZVFhWHBTeU1ZV1c2bDdCWW9aTEZuZUg3cjB3aG02b0NLbTdNaUdGR2FmSDZmMjdzS1dhWHBlVWwzUmoxQW9XVk5HT0dGd3hZZDBsSlFMSW4vcnF4dFRPbVNzSmQzQjUxaEJtenBSb1AyVmJJVmhSOW1yUkxWOWhYM050b1RURmpFVFduQituQ2s3bE9VMnZzOVNMWFplSWlrVHFmYUphZXZ3SkZ4YmxEcXZkM3ZyOURkVzcvKzZKRkFQci92MDdyMlE2alFmVFFlNkx6V1BQQmpnK3VkLzRRaEh3ZE52VWZkS1BzdG14WnRpcXJ5N0t5Z2E4WXh5c29iVjlHcXR0ajRDdGd0Yk9Hdml2cnFNN29NNnlPc2x0NVpaaC9rc3FxaHdmQUJyVTlKRXRyM0tiRmZSRlA0YzJTbTRQNTdmU3VxV1ZSN04vWFJTNXVjR25wcng1VHZRQ2UvOFVvUmVUcUhNakxEOFlyL3VhRzVIc251eDZSQVk5MmVieFBlTDNUelJLSldlNzNEdnM5SFk4Q3dPNE9yM3ZZNjJtbnBlYnBiczhkbXM4VXNYRVlub0NjY2dWRWo4UFFWNUNyQktyVUxJSUtsdTQ2ZTJjQnlJT1c2eVpiQ3JaaC9UOTFRNzY2UWRUcWNKV2JPaW82WDBKKzFGOWQzSUdvTzNRa0IxVWhJckxOdEpUMS9kZi82dGQ5UC9uOTA2K1hGY2twQndQbU9vVE82SFUrWEdjSWpId095TFJESHFXbkVDMHcrdWZKMUpLZ2dwRXdjalVSanVFYWZkYjB5ZjlMSWxvVVhNQ0R3TDhWTG5GWUM4VFU3cVZWK2lyUnJ5L3hXUytOTGQwMVJ5QkNVVEd2OTJiNVhWMUpaUDUvTlR2Z0hVZDFSN2ZEMjRXZkRpQ3BNMjNtMTNOeEptS3g5dWtycmxoRjd6QzZacnQ4KzFyZnRlMjRWZTRpOUhhMGFOVUoreFhMQi9XZlpmRXJ5cGN0WDdIaUh6OWw1TkxtQko3QVRIRThmdkl3ZGp2R2QzK0NZQWphVGtrbDMvejN3QlZqOHZNbXp2REFWYmFzQWdLRzFPZkFqSW1KMldFUFpzRk0ySVpiNUxkc1NMKzdCTXo1d3J2TjZScXhTRlRELytXN0FpRC9Udk9JV0pyOWs4dDU1WGgrMWFYMlU2cW5seE16RzJhUWNMdnpHWGFmdDBvT2NGV3ZFVjJacVFyQnREVU80RExLdkQ4ZkppVXZQK2Z0aEFma2lnR1FpbE5BanRCVVlxWDQvNmVGa3MrdUMwWEh6cWRLVzA3eU5rSlR6bnUyKy9SRzZESGdlbGFibTN6OWJVZDVYenE0MnRqWlk5cFNYeGtzZC83bWxzdG1IdkcrTzZYVWUySUJNemxTejhWeFQ4VUZraDJlUXlKKzN0Zi9HMkpDbGVIc2J6UDkwQmJSbkNhdTlBbXVjNlpQR0NSWHBIUERsTmM5U21ZejFQS1FuMXllYmgyaHZNcFF0ZmJJd3JwcU5MVEcxTmxsMmh4dnNHM3FhVjlMYmF3NStkYkdhdlFwTjFzSE95dTJ3SkxmNVZLK1VPbnBIVDJvb3h2NHFNb2RWV2dKSDdCTmdaSGVPdnRmZC9zdEtJTnJjblZTek54Q3VwUFFrQVAzNHlzVG5RTm10N1ZiWmErM1VOcFlnajVaSGpCc2tLSzBRUXR0enhkWFhweDhkY09EcnRKdkIzWXRYMzlHNmYxVFpZL2JWZlpFL29pSjdzVURMbHQ5dC9LWkRjMTVyL2RrZXVNYjR1Q3VWNDlaRVF5a24yUllNdG05UlFOL2wzV0dBQlhrRkw2SW9IZjhuNmR2QWtoR0x5aDdiZWd2aGM0VVNDb0ljUG5lcWFlWFh2Z2d3QWVkd3Qyd0k2NDVEWG5LMTIxSGhZQnlqVkswNk5LNC80OGFMdm9YVXkydDRTcGUva1Yyei9UWVdxcWozYkEyR2pHczdXamJvN0hZT21yV29DVVNQYk4ydUNWUnNXK0VTRFhyUnZ4K2NpU1pHdFg0ZmI1UktxVWQ5bm50VkJwKzlJeDBZbkVKYlVVYUtXVk5IY1hVSzh5MW5aUjdpbzlETFB5ZlBTeVhUQ1Z4MTc0bnFsbDQ5b2tiM2F3SUxLaHVQYUxXUFhYTnV6dTkydUhFT2FKNCtlajV2YStOcUY1RHhtUTBLSHR5eGpuajA2cDVCOWE5NGYzYXA2by9NVlVhdmYweldQSkE3aEo4S1llYzVlV1RBdmhNNmtWSjhzVXppSURNdktYVWI1QitKSlc1dDlKUm1mUW9UaCt0Wm4xNG9vcDF0TEd0ZUdaN1U5TzBtYzVseWRXYkF6WVhiZHgycCtwTy9DOHpTUVZHak8vQjN0bEQ3Tzg4M0ZrMk5xVldIcHBwV3BuRWsxbi9tcFpvVjZhSmRKSG1PN085UVZKU3YwaHRhN0NVNEp0eWNiZ3QvbWxEcmY0VVo4RVBnS1VnL0NjSS9nR0RKZldON0VrZSt3U2I5VHVYTjFrbTNDQmVDN0k1bnQ0Q29EQWxtaTRRMUROOFFYZHZBVmc0MjA3eDlmZkJJcmlvL3JzL0sxeGFWNlJzOXhzN1h6a29TQzNqUXltQm9BbmMwZk1HcEJoaHByUGV0dng5cnJkWHN6bWU0UUtnc0o4WVByMGFhYnVucWdBeE1RVFFEditOUGN3eGoyT3lNNmR1LzNmbm1qL0d2MTFrUFFJQmZOQmNDd0tUdzNVZ1M1d0ZyQUFkUnhWd1JnVzhxUUl1aDF0SEtsT2tyOXJZeTE4ZmFvd2lXMnNnNjdZR0wxakpaTUpVd29jcTRUdVZ5QjIvN1FLSzdYUWJvUEd3QnFMV1FEN1dRTDdYUUg2ellRMElJMzdvNisyZ2FBSDcxMjNkMzdjL1BEZGNLMElBaC91YkVYSzNDV3dIcDJFeVBPeWJIOXJZbWYwQjJQc2hBUE1zU0habWNldjRGc2Z1eGYzOXhmMnpWLy83RDRzWGtiZ1podGw4cXdZT3FJRUgxR0NmKzhFZkw5TnFNNStHelZmMm4yLytNRWUwbVVldFpjQmUvU0hvY2tZY2NKNzRCcng2ZFJnQW9EMDRCMDcwcWNob3pZTGtXb2I2NWE1djhtZVdKbW9tQUdwd21QSWZRQmdXNU84V2FqQUh2bzFkdi95aTQ4YjdiZndUUFozc3hBR3YvYWVvWVFBZ3ZsOUtFd0RzNlI2NDBmdjF3Ykh4UzlIK1Q5ODlyU3JOYnEzbk5MMWZIbHdBK0VSRE9JQWZoMXprd1JWSFdndVBUbUVmV0svLzNYdE43MGNlenFYYlJILy9zNkQzYjMrUXN6enNsTkprNzdkOUd4bHNUQ0hweHpJOHUrL1Q3Nzg0UXRXOHNvSDNRK2pKQkhDUjhrcjRSeUErZjZ1RE16NE1jallQOTdTaHY5SENucDhLZjNpR1VndmJnL2REdU5EeFNhSUFLTVQvMjFjWjhLRDhETDN4dVRoRmNXMmk0cDlWN2hYTFcwQlZIMXlIbDR0N1BMMi9sUXVvdXpoWDc0cndodjBha2JLbnA4OTdQTk83Rkh6am9pdVdsRk5lcytQL3NCYlAvMktuSGR6OHVtdnJQWlN4RmJMaXdWeHlEVW94cFJrM2wrLzh6TWVQaDVSMUdBY0E3c3JWKzQvcEFtSlgyNVZzaTRndkF3cXhXRFRhRUZKdXlEUTJFY25XWHFsS29wS3B1YW5SQURUQWhaTzA3WFpiS2prYmxuV3A3UjNZYUFOVFBiNHBHVGR6dVVPcWRZMVdpZThtRDNqb2NUMDZVeXdRQVVsQTIwWUJvS0psWFJBSkRNbE5rTVo3eVNvdFpFUWpRSS9FVWNsV2xkV09YVlJtQ2xlT2dyWVdWSTFCTDdtYis3MmUwZE5yc0wwQzRkWnMzb0VLaGF4dU5zbkJFYkZ4TWtTRVIrK1pqTFpIWWhKVlYzbXhveVZSYVVUMHFqb3ZyZWdjVmRSc1hqa21hRkZ0RWVKbGplUUZWUXBtVTA0UWNiQ0hqQXoxaVVJYXd2bE9Ya082TFI2a1hlb21YTW9qWlJOVjNmcXF4MzdIaDdmVWVnRFZDMStacUV3bHE2NjN6Y3k5M3E1NzQrcXVBcjB0dEJVcWYrSnRqRmlwYzBCYSt5bDVhOGNtN1l6TnJLTkErSVFGTzNwZjFmclZiZTFEU3BoTldSdG9IZUpOaGZzWFJlZXhxdnNGcVNmVTc1NkUxaXlyc25CWld4cFlhR1ltSVJLdldTN3o3T2cvN2k0Z2RtNEpEYVJjbWhqcksxTTZOL1JhY21PSmhHaGw5WTA0SEt4a2paL2NHdktDbkFydGR1d0lkSzFJUmloV3Rzdm9iNUhZV1ZhaENMNTdpWlpTOVNVcStEVEg4OTF1QUlqeWxWZW5OYTF0U2lHYkhTbjJ6WGxucDh1cWQ3bnFtUG1uQ3dYbXgyMVg4dVBIeHpnZkVJdEV5NTl0dDkrdXY3TFhkbFBveTVsNjcxbDRNQUoxbzVXb0tJRjJGKzZYWjFUdDYyTE41Z3V4V1dXbEV0TWt4UGZkdk54RnJZZ1IxMjFSbDJ2YXNvRDhlZzYzc0Y0dFE3bFFlR3hiUGVMTUNUaXFyMXdETCt2U0pmVjIrNk1YZlc5Y0VNUEswTC84N2tFaThZMnJiOVZEdCtQOUd5THY1Y0JXSjFvdTdjS2RFeFdlcjhqUDR3dkRTcyt6NkJ1UGFHS09ML0NtbGlTYTRieWlMdWcrbVJCUlJmQkFON0dTWjAyQzRYSDhlcGRXci9DQjhnYlVaVXBlU3M1eE5RRElPWVZBMUVtSWVpS1hXS1pSQTFWR1RDVHhvbU9vZ09qUURjZlgrejFybE95aG5Vd3RFUFppUURTbFNRMFhIT1Y1c2k5ZTZaM3E2OUJudEMyKzZ2UG9QdkMrNCswVmJUdDQvMS84d1hJeEc0Nm1FNHduMEhpMy9YQVFwaUxnQUZaZzBMajVLSCsxWEJySFFucGhUWjB2KzNPaklwKzZiMGdzNnVvU0U3cVZ3anUzdGVoOUo5Qk9YYy9Dd0R5Ly9hVW1GcWxGTE1tSDVsVTFSOWhSVXc0U2FJMzBxRkhXQW5tbVNscW8rYXR1RzRYc3NTMTV6ZjFTc3lsNWJaM2I0cEZYODdheUFjZG1jWit6b2VoenpvWEVkYVFTWmtvb0x2bVY0TG16dXg2dkV3VzdSVkNFdFd0M2RBVUszZkZpWjFhZGk2Vk9RWGNoNm16R3p6Mmh6amZNS1FxVGppajJ1MmFwamlUUHJhUkdKNzdhTmpUcGNkNmdQSkJXQVA5WHRhcGNXUDl4K2pMOGpkUFB6YS93cWlOdWZEQXc2M2JYS2tscm1zQWUrUVU4SmZ5ZkEydnFGK1JQM1luMTNlaGg1K3U1SHJiTVJJWXc5UEx0b1g4d09ZRzFrWGVDNGVhOVowMk0zYU1hdW56OWNueWF2WHI3TEVRUEhxK3FwaGlKSHkwSmdKZ0F5c3pvbXozVGxsWUJDZGJJdlJPY1VlTGdOWkx0TE9wRnByWDA0V0tPZ1Y1QWxpdzlleDJiTTJ3Zm5ZK25Odk1WL2l2dS9oT3p4RkhWYmxKRFdhTko2U1JsdVZHOXNWcTB4clZFWFRmVUtCdU1xNmdQUVhkVXMxSXlWdFN3Sld4dmhkK2luWFE5SUM1S2h4SExNdDRmbkpvc3V0WU10cVhBTEJ2blFGUUJtSE9XZGxWcitEVFB4bElnZDJHTXE4bGhQNDhSRFhPdUVRTVppODkrWWljU2t0Z0pJTG5tTGg0T2gwTzBlTXF6ZG85YnlvZndtTzM3dWhQckpJZGNMNzJzRTV4OHpxaW9WWW1reFZGRmE1L2JsYW8zQUtnaC9rRU9BbVB1eDViRE5PUXExYklLd1VtSmhpWUhDM0NjbVpMdmtXRlZrUTVaZWpuRTljQi9zQ0lpNGxVMGtZNmV0UlVOYVh1b1FMeXRKME5veTJvTUNnckxpSkNkUVIzREJPZit5eFVDanZMZlFGYkVlYS9UbDcyU3VOT3VwbFQrbkJ0YVdncmx5ek5jUk94c2JYL1RGZEp5LzJneFBhM29VMkdwWWJDaEwydjVIMmF5SU5XTlFML3ptS3pZcVVDc3JWMmFzcmVYUkw3L2NsNGFUNjdTTVRBeEVmSkx3aE9oTmhYT0p1L3Awd04vdkNWTXFDenhPamZONWVMUkxPQ0tJYytNcjF4ZTZmQXdiRnNXNEw0YzI3bSthdG9BZEFUYnBsL04zUkpnYkIwbmZNMjZMZnVLa1BSc0RTRUEwVk1UamREWFk3SjRmNzgrWUYvUDQrc2hWK2hjbFpUR2Z5UFRtOTB1VktQUmNCaHV0SzVDS1dZZTlwZ2E4Y3VDcVJqaGNNbzV4Tmg0UWNZNkpSM2FrNVk0MW01U1JCNFdGRlV0c2lxQVVqVVNNQlo2N1BjTUlkQk1hMmljRko3VTdqMVdzZjFPYXlHY3F6RXpDM2lBV1VhNUNqV2FjM2l2MDdDU0pSSW1HRlBiaWQzT3I1V0N3TGYyKzRKMkxzYlUyVUZoVlN3VHJGcUR6SWM0Q21CTmpKRFdsVmJUYURRYTRtWWtYcGRza3lKM2RUVWVUMXhHdGxUSUp1Rk1PR25oT2xIS2toTkVHaEp6OUJsK2pBbERNQ29EUW1xWnpCV3lVVlNJUEhWYzYyUURaZzlQSE53RlpUREVrSWtsbWdRaVlMQlFrRDRIWTlWb3JLdGFBb1NMS0FGcE5jWlVTaG13SU8yc2xSV1ROaldtVmxCOGY0UlJ2dUZleHdvcVExWmtCYXZqaHVKaTNnb2R5ZkRKS3dMekFGRHZvaGFXaERSaUo5MmpUb3duOTM2dHV3VGkzSmxZbE10d09DeXQxNXZGMWFCbEFtWkE4Mm90T2RJR0N4MFdRSm9PeDYvM1kxblpvZmZubERsbzNiL0g5cjBTSURMbXdZT3VKYzlkYWYydFdSS0FMYTNEVjlwQkdMdG1idmEzcEM0YUo2MFI2WHFiR2E3UisvZVQvZDVRcW4rbzhvZFk5V0MrcHV5VjAxaGlDSHdjbzI0VXBWRjFIUjBTbXYxNEljcVVzTkJqcFlyYVhvcEJGNUphaDZjcU9rL0phRlhtcDhsazBKYU1naENrRkJ2UURQenJGcFF1QU9Jc2FZMnY5Mll3cDEwZ05GRXBjcmRoN3RhZU1MUnRUTWt4R3lVeFNWVmdGU21YWmFOUHN4c1krSVpwOEpHa3hwT2JBRjlOZDBhVzBQUHducnI4SGpDYkJDdDdwY3JkTnkrSDI4bTZRK3BYajQ4K1VNSEtDMkZOajJRM2VmKzNhUnFIdVJEK21iLzVTZWZ3OTRNYU1MQ2ZHVlpaQ1NmNlM0K0plL1BoQitTbUsxSmZPRFU2RTFaVXE1TXQ2dldjOXphT1U5VmxrZ3ZxNUl6aGVYcUxoWTNwOWRNUDc1by8vY1hoTEdlZkhlemFLODh6SlYxZjgvNTVpNnI2OWVRZlpYRDMxbDc0cE9iamVyUFpmUmszYzRmeC9MVXhlWWd0Yk03dXcvMXFvZTl6YllucCtUeU1CN2RXMDkvQmR5ekticXRlS0hrc0dseVFVRmJLeGQ3Tk5keGRFa1pBQUJBOGlsTVBHenZSU2dHQkVEellNWG5uVUZ6UlRIVVNnTlo3VlVUNmtlQWUyNXBxZjlRWDFmODRzV0RpSTlQSEViVTRaV3RMWUxQRVQ2VjBRTm05ZWw5aTBMUTlIZTk0UXZDbHVuSUVHaVJjUm1wUG1aUXBEUW5tRjZraEFBUHh2eDkvMzMvLzk4TEgvMXRTTktJZkFNQmErdzhaNUFGOFBHLzlzNkluK2U1c0RnR2dZQUFBRU1DL0g4Z2p0NnZyLzBhOVU3N1hYMEJvS0JWQ2VvN2czWVNOdDZ2VlE2V2Q0bi93bGVxOVFsWk5abTFJenkvMnl1Y0wvQW9JUnk0RHBmdU1RMzJ3Sk1yUDZDTFBVRGZoNnVlQmxscmhSZkFiOElONVc1ZVNWY2FwTytyYVBpK3hienJmWGF6bzdPZDgvN0xZMVE2Zy81NmwwcGVaQkFxby9yNHQ0Rjh5MytoaUNHZTRua0FqMCtYV1Vna3UvbXljZlYydnhFMFpEdnE3VCthVXRoT1V6VmY5T0pBVldBbUFyeTV2d0Q0bnpTT2ZlWTJkcFV0dDIrYUFmWjZxZDBObExzYzQrNGs0SldGdmY5UVRxdnRHTGVSalpoT0M5eFo1MWNMM3NJRDlRNVVqWmR1eDJ3V3FrS3B0RkdVSUxabEhMd3JaSVQ3RlVKY2lwQkQ4ZktFOXUrOC80aTBYOHR2YnZPWUUzQkNQamJIbEhqdG1JdGt4dmlzaTJvRXVmSnkwSVFZTnpEMjZvOCtLMGJGc2w0dlkvdUlKUUhZb2VOOCtXUVE2ZHdKUFMxaUp3ayt6MkZTMnB5ZTZyYzB0YlQzQjgxTGZoMlM3aGhmVW1yRnlMcTBFb21pSWI1MytZS1ZlNzVMTWRBd0RrSnNDYy8wU0NzVHN4VStZV20vS2V1ZksrV2pjc0Y3WlpGemJoVEVqM3BuNXl4VXRENVZXRHNzdWVDdGljL0MyTWRmSTU3ekk5cjJRSHVOU2ZMMjhKeWx6NWRrN0VuSVJQMHZ0WHd4dk8yRHJNdmFyeEdKRXE1WFhMTCtMRjlSeHdlbElkaE54MGJUSHRKb1JQUktVVGlueWxaSUU0RTlYbmFVVFFEZ294QjJNQXBBblNrTks1Sjd1NFN2QnRuTy9zbWUvM3QwMEF1YkovTUhmUitrOFpFY0Z5Z01BQk5DUWZyUTJGSXdEdFRzQitoOGNnOE1CQ0l6RG9TWUhBSmJCdHdiRTNYc2M2OTIvTk9EVXJqWWxHa2c3RjlKQWtVN1hJS0JZVzRNRDNwN2R6OUhNTXJzQ0FyQXI3MEkrZm9hYzNWZVE4TFg1UklKMlJqM01HdFZyWUNWRzB0QTZLTld3b2RyZU9wVmEvbmpYVTZ5SFdKeFp1eWJKNnU2Z1U0ZDR3MTdhekVKTW9WOHI0d0QreWtya29FWjkxRlpxNUhMeDlpWG9BdzgrSERBSU0ycHFXWER3em9mWFBOd2JzZzJmUis5azZ5S0ZnTHNISmtYOFFwZm1qVmNkWW1GU2dOeGVyMk9aWWdvRURaS0I5WDFtc21SS0VubHJJRFFOUVBsQVVEWXVsU2ZHV01jeGVJZWZlcU1JNnZCQzFheHc0OTV2SWJmd0JXSHd4VlV2VUl5V2p0VHdXMVRnK2NaVERiMTlqYXJwK2ZWVkVncDVmWDdzNDBLOE5qbnFyam4wdFkyMUZkTWI3WW9waVUxeFZXS1ZQeWF4eUtjazVsUk5pRzJFYlJ2Z1Vpa29UZzkxU1hTZ2JCSmNiUzB3YTZRQnBpUnFtVTFJcGFva0tpNVdNWkdOaXJwR1N1R1VSQ1pRcFRXcWhLK0tlYXFJcXdvNThRS2FQNVhoMGRGV2thbHhjRnZZL1BXM1FycjZ3OWRjMTNhbEptMjdyaXZ0Mmx3VmhWNUZJbHBrcGFvQkVWWjVZVmF4RUZYYUJOYS90cGpmeGRaZXp1dHcrRGMrSVAvSi80eXk0TnpncmdiSXdYMEVHYlZDWmFXd2xyU1NjajZPL0UwK0lCRmgwZDBpKzQ1djM3ZG1OWlhLOVRYd0d2OE1mUGJldEN4NlhMK0FwQ2xEVy9Iak5pSys3dnJxMVNzNDIxMjhiYkcvTXZpTWM1R281SmMzS21kZFoyOG83RVU3VnJDR0JQWjROdEw4OS90bFhGMGJJWW1OSXdCQkFRPT0pIGZvcm1hdChcXFwid29mZjJcXFwiKTt1bmljb2RlLXJhbmdlOnUrMDA/Pyx1KzAxMzEsdSswMTUyLTAxNTMsdSswMmJiLTAyYmMsdSswMmM2LHUrMDJkYSx1KzAyZGMsdSsyMDAwLTIwNmYsdSsyMDc0LHUrMjBhYyx1KzIxMjIsdSsyMTkxLHUrMjE5Myx1KzIyMTIsdSsyMjE1LHUrZmVmZix1K2ZmZmR9QGZvbnQtZmFjZXtmb250LWRpc3BsYXk6c3dhcDtmb250LWZhbWlseTpRdWlja3NhbmQ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6MzAwO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi94LWZvbnQtd29mZjI7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R01nQUJBQUFBQURJMEFCQUFBQUFBZFhBQUFESFRBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdsd2JuRlljaHpBR1lEOVRWRUZVSEFDRkFCRUlDb0dxSUlHR1ZndUVLQUFCTmdJa0E0aE1CQ0FGaFVJSElBd0hHMnBnUlFkaTJEZ0FhUEFaRmtXd2NRQUZtKzhUUmRrbW5VajIveWxCbXpHaGRlaGJaU0YwUjd1bzdoa1pDWkdUNmhucG9iWlRXeHk2Y09EaDBFZy85bzBGUitIQThzM0oxYjN0dzU5WG96Z2NDTndqWm10dHdDVnhYNGhMb3BFa1RhUlh0MFpJWTJJdDRqZjkyWHNDdk1STFV3ajJRbzBJa2hjeEtrWXE1aVF0Y2ZuaW1ycFowanFIdEduZ0pibC90RHF6aWlxZHF3QXpvUTBUTHg4Nk16cFg1dEk1VC96djk2OTc1cjRBb29zUkJESmZCYm1rV2dzSXRvcU5iRzJYSjlDa2VvYkhiZjN6QkJtb0dBMUk1YWd4R08xR1Rhb05FRlRNNjdJdW9uOUZYdnpmK2l1aXdRRUsvVy9haG1pYnorVmRFYlZWUjRZTitQZC9qY3pDVE83TG53V2dJcUZsNVFBbDIxWUIycDVLSkZsTDZKZjdaZUJ6ZnU0Y0ZKM3ErQU9DOFFWNjZ6b2JXd1loV3dEL1Y1c212RVhvekVtRVRXdnRLRzJUUEczaFdjcFFtOW5RT3ZSOEpGSVZnWkJkMm1iRmMrSTFmWVh2d05Ra1ppdnF5UDBlOTM4NnkxYmE5ZDN6QnFHTHF3QVgzWHB6YlRINit0Ylh6R2drQTJ1SmZReWVsZldlSlN2Z0MwSkZVRjFheE5kVFUySFRwU2o3bEpsL25lbXE3Kzl2U01rLzZKYWRHc3NxcmdHZWV0bmFOVlBMNHorZDdxeC9zZ3huRjJUNWVnSFNVV3lYN0FERFZNS3hveHowQmNodVh4aTJBc0NhdFRQeXZnT09OVE9ick9TY2NHdUNRbHpoRWJLQi92cnR6MWlySDhoc1puYTc5bkluaHkweVJFTENKeUxnV2Y4Ni8zQWdUREFBQUxwak5FZzNKTk5RWkxoc1pMb3lwRncxcGs0ZGN0aGg1S2lqeUFrbkVNSUJRcCt1Si9pbGtoaXB1Q1BIZWcrRzlscEZvUS9hK3hPS2M2SEZBeEIyenJwM296QVhhaUJ1eFZNOFZtQ2tXbVY3dHQ4M1VxbDZpNnh3eWFzd0NwVjkrY3pVNU9manJNckgvQjFiZHNTWks3bVNXL2EvdENtdktvSkVpaFlqVmlLUFByeW1LVkRrUC85ck1NTXNjeTJ3MEZMTHJMUFJEbnRkY3gwekt6TS9FNmlBcENqNkwvay9hS0EzQTI4T3lWeGFDNE9sVDVhZHVQTVBXZlpCMHZCa1J0bmNZQUdkaFN1V2JsbzI1MXJUOWVDT0NLTGdmYllHa3FCSjZWUXlhNEtUR0lIVWc1ZmhxUlNZRWpNSFJ4SUhJK2xKM0ZUenROMHBXaDdERERGUHB0b3B1TjQ0Si9BSWtnMVNlT3BjaTloUDBSVFFFaVdPd3p4TjAwWkhVK1VwUzFHRjhCWVBFRDNBQkxGMW5xTEZmQXRTSWRzNHRaUXJFSkN6OVRLdFoyVE1VVmhheEhPTFczaVlTdDBwb0VjWWdvU3g0N1ZEcWN5aGtna0ZQWUhkdk1TeDlWOSt0NzZOTFpxREIybTlZWWhtdG12NHowbDcxYURYL2hjek93UXV4cTZrMWxVQzdubW50Ry9QM1N6ektHUS9md1JVRC9jT01RaURJcFRnanh2dmIvUGJ3RTlzbEE2aWpMSVR4YmtHbHAybVhoZlUxTzVBL3lIZWFiUldJeklkV2pXWjJXMDk4UzNOSm14SVV4RDBKUzJJUXFoNy9ETE9WRlVZOUkvMDcxZHFKRnk0Z045U055UHNBcWtsSkdYUGFmZU0reGJGNXFJWWMvSUFCeG1sbTRCY0Irb1BPUnoxOUNNMm91aDJvR3RFTk4yQUpGckNWek80Tm9EM2V4V1NFS0c0c2pNRHRPVkpTZ1lMVjNvU2FMWWVlNk9yRTU5Sld0STdYcTZGTU5CNnBCYUR6bVNHN3g5UC9uY29BUUMwWU82NUFWLzhWcVI1cEM3TzBLSlJTVGlYTUhlYWp6dnE4ZkQ2VEVhdGRTZUVkQ3lKeU9QN0hTMEhOc2NqbjRFVUg3SVZ2NUI5TmNIdDZRK1F4cjVOZ0psRVlwQmJsN2lXRlRnMlN2c3ROTHBrMXdkMEVPQi9IS09QNTFvQWtLSGJrMGN4Z2FVU21FZHp2dlJFWGZYblVFcXhxR2dkeC8xcFVCbjZ5U1ViaUw4YmtJbENwT0MySEYvWTB4NXFweFRMNkxtbFVQYkZPSk1qWVFEZVlKSWNZQWh0S1ZxZnJGS0luZ21qT0k1ZXgrV2JTVUFyQ0dOd2hJRGlhS1BRVjEyZXphZEEwNENIRzg1TFltaDJnaU1Fb2hndUZDRTdXdDJSbnBaT1AwTEFtempKTkpNbDFGcVEyd2ZiVUJKYjgrZ2RmaVNHU1cxZ0MxdFowejdRVlFkZG9UU3lzalNlYnpvbGZ5b2hTdGdnQmVlTENIT0RmTXlvMkJPUzhhMTJoaWRyM1lVaFJEVlhUQUl4RTZ4d21zMERFZzFNUkZIQUd0R1pKTEU2Q3RCWmw1SjJBN3VsVFAyME1qUVh1K0ZHY1JoakNvVlh0b3daaXRoZUFpZ2Jsbk9aSVJnRENnWUtlampCUW9RNmhSaDJMSWFyR1dCN3orWWl0S0F1cUVNQWw5UURJZ0hjOVJzWWlVekFOZ01zWkdMTG9VYXhha2tWcmZEb3pLMjEwWmJLMDRacGk2Q0VCVm9zTU9BQVVWZ1Fpd1YySE1qQkR1S1VnSk9JZ3lYaEVNbnNVQ2xTYWFTeHc2VHJpT21NUlYyNFdTRy9BcjFvYjhMTjlNRmFmYkZvcU5yY2NDTnk0a2lqcUl3QkpsTndCQzhtV1ZnbEcrdE1aK3Y1NU9NVjRFaUYyS0NJYlZTc2xGb1pOcG1GdzgyWFdzd29DNTZLRCtxVXJvSXpLbW51NEdBWmVKWi9FQUJNNFFXUVJwRnFob1ZZQ1FmUGRwT2hIR2FXdXg0ZXVGaUhudTQwMHBvMU43Q1hWTW5mS2pSMllkRmlzY1dxRnF1QmROdkFhOWR5OHRFVFArNzEzTHdjRFB4dkRkMGF3KzluZXlmZ2QvWTM4Q0VMNXNKaVdBbnIrMzMvd1pLY1Fud0tqclhpTUFCcER1Q29hVWlrR0lTaENBRUZ5RUVWNUplbEZjSEJwOUxuZS9lL2E3Yk1FdzhLcFA2WlpWbVZSOFM1b2JBbVZaSldPTTV5MGo4QkFCUVlRVFVtUXlhWkdFVDF4OUhEQ1VrTUcyTTJIRU9odVg1SGpUdUJwU3BBS3dpWE9tc3FCcURBWHpRVUl3WitmT0JIdmdaaFloUEczL2pWeUl2Sk9EZEJJQzBqSzVzS25ONzZxVXhzSTVSanRBcGl2d2NtZUFRSzlGWUtHc0VTdENRUW9nNzZHNFplbXFUSlRBUlcxRDh5QlZJUUJWTUloYVp1L1ZIN2hTT0JSRktSbWpRa1Nia2dRSG9pcll6aEtGWFg3TElKb0xDNWFhbmkweGdXTGdSZ1RnbGtyT2ExV01Kd25ROVh6bGNmbUFEc2hRNEg5RW9lbnk1U29ySHJXZzl0czBwSTd2LzNzRWV3QWF6cnVDK0dDUENmeHJrVDlDWUE5QzliQTVCeFNLSzNkeDBBWUkvZXlpcW10QnVBbzB0Y051YnI4MHdsNCttNE1QajltS2FXUC9GSjF0bHRQZFV6TzRHL2hMOVdqcFROc2xWdUl5Zkk2WEpYdVZpZUV3cXQ0ZGJtZmo4QUNDSnpTZmRuNHBNbzQzS3NrWFd5c1FWcGpEOVN3bTBGOUFQQXZ3T0FOeDJ1dmNiMkM5dUFDOStFQzg5NHp6cWZHYVA3S09iaHJuTTd6MjBCQVlCRVFIOG5nTjdLOTNaMWV1VnpOUHFuN1RQSEl2TWNkZFYxaTYyejNuOU9tV1dUK1phYWFZa0x6amx2Z1d1SWhpUlFzR2EwbW90Z1lHUmlaaEVsV3F3NGRnNU9pWklrUzVGbWpmK3Q5UUFIb2tKNmIvM2diakwxMWtkZk9iUTNnQmg2Nm11OXN2NjNUdWRUb0ZDUlltVld1V2UxUy9hYjY3RGpqampodnBzUmNVdU5MUzdiN0hiVXVPdWkzLzBSRGxmYzBCQWV2Nm0xMVQvKzlxK0ZCQXhIaFNkU0N4QXVSS2d3a1ZyUTBRc2lhODJxcGJaYU9hT05CQzd4RktsaVROTmVCcmVPMnVtZ2s2NTY2YTZIbm9ZWVlLQkJQRWFiWUt4eEpobnZySW55NWNpVnA4UlVwV3dtUjAyRWpUYllhWmNkQ0EyL0VBQm9EUUJzUDlCeVFMOEZNUDhBOEo4RE53Y0FBRFoyRmJ5RWhPTVVMQ1dxb3BoSWlGRkdQNi9KU2Jibm5KZ1V4VjFEekxRQWhDSkl1RWJCbzNneWFTVUpSU05kRUxIU0h0SU0zSEhHc1NOeGZld0VuY2ZyNmNDZ01XbDdqYWFKMDBleFF0UVI5aWlHNENVdzhnU2lKbm53U2IycnNBaXBSRWxueENZTXM2Y1N5SStlMlJ4NkVxYitDckdFSG1Pb05BT0ZwSlN5TmxBVGhIVE5Qb0I5SFFPcng0ajVYa3pPZzRRT0NXbWNQalJ4VEMzVThZUG91VVU3WDd6TXZya2lXbzdkSnNablFRQUU3bm4xL3Q1ZloyUkVRbW8wd2VpdXZKa0xsZyt3Uk9rczV4UzhNOFdMbFRvRXhLUkp1TjVabHVjOVZ4bUdwM1hvaFNGWmc2MDJoMFBwZlFqZ0hITGRVOWRZR1pHVWpGOHhHUGFmcENpTkJxOVY2aTA2VDA0WVlwNG9LMTRvYzNlbHJDaVZFWURjL2oveVFTblBPdGFKbnpIQmFhaGNBMENmQUNxOFM3NVp0QWswcFRuS05BdXVNUVdRYkZpdnRuUFV4bk1MUU91MmZFbU5iMVpxNTVJTWM1UVp0bXA4VnlsUitGQllveWxYcFg3VkJEQW1kbUl0SFYyRlJ3eHEzZjR6Sm94NHQzS1pmcHNqeTh1L1ZXYlVnN1oxUjlNZ3Biako0dG00V0FETVFrNDV3RFNrVVJndHlFbXcyTUtSVFdERlpkTi9GR2FSZlpIYmE3T0xZTy91VDRpSEI0cU1jcXRIN0tWdjBicXdPWkYvdGVZK0RRNG9IVVFZaFE0T1ZRb2JUV04xUzdEQjhQWGMrenV4Nk9RM3hPMUZkbUVxQS92eWlLM3R1YUhTUmFXNDBPWTA4WlZBUFRXTVh3SzRaRU94QmhDOGZUd2FzR2h4S1N0N3lRbEJvVDUwb3J4K2tOcW9tRytxSU0xNFR5WFZoU0lEMTB1RUkyQ2N1Rk9xNTRDY1F2Tnp4L3BjZjhHb2ROWS9TM3htYVYrekpac3c3OWlsZTlGL1U4cmhQVkM0bVFsY01EcmJvRFlTNkNOYjRBS3d4cCtSRUZWUzFUSTZVTVp3NHdZV1FOUFFXNXROVG5GUGROZ3cwRk0rZHFnSGc4MjZKOHNpVmkzdW5RNFRsc2k5Z2I3RzQ1bVdMbmQvRHorL1JuYThSTEVlNTltcXByN1Nob3F0VndTSXZmbUdkVjJ2OHlwcWpVN3Y1ajZuclAxMTFwZ3NpTHhOamUxV0hCOGJNanBXSjgxZHRTMnBhbndUZ3duTjIzM1dxdzRiREpTWkdsQkpUU0RsSGVNWVpYWnRPOWZ1bFdNL2UwRE4zWnpORmJ6Zi9kczJ1WElMS2d4ZGt3TjlXRVRadTdsczVya3d3Ukt3eVZ1VjJGTTJlYWxmR1ZhaDNMVTByNTF0V2ZNNVdGSENKL1dNWVlVamhXeStjRW84ZXlXQk1YRXpXQ1ZMa3liWWpqMXZyVkpkbk9SWGV4c3JnVURMcWJhaDJvaUQ4NTdFU0dMYXZ0a1RMSlJmbU5XRThlYUcyOTBXbTVJc1hpNVRoN1d3bE84YzNMU24zZXVpN1dSNUg4eERZMTJMQ2JDeUV4Vis2eDRmM3RRd1VER3IzaHRsT2ZBRzYzMTh4a3J6bXNqYnF3WXRFVlNXOHZSOUtMZWhaN29KM29rYTVqV0xWbjlwV3Fjcm1EMlZ2R09hSjhlbitLaU9kVWJrUFhKUWZXNXhaYjdXMlJlRHRPSlRhME5iTnp3dFJKUEFaOVJ0cVNheDBxR2xMazkyZ3YxRFg1T1VRKyszWTZ1MFVLM1BQeURSYzhlSWxta1NjRVpwMHdTMnc2d2NLMytLcW5KMzR5ZU5hYnZGNS9SeURSMGo3OEh3ODVIbXpHVk9TMFdJZzlKQWVsZ080OXdOa3RJN2hBMFc5a3dKdWo5Q0VsMkdhQkw1cWtKWEptZ3NzUzZhZ05Wdjdvb0dpQWd4YWwrM3F3VFhmVGlsckNtbFZsbzhZMExNMkQvQU5oZnVpU0pyTlhWc0J4MFd0UGJrVmt2TmFIbGt3Z0ExY09RdEl5eUVVZzBPSEhsemQ5MVFXM3JsM1cwL3MzZHduZllLMGdDT1d6d1B0SUNIVm5OWDdlQmdSblJjR1FTcmppdWMxd253cVdVbDE2dlJaOVZoWFNlTUlTMGtmSkM3MjhrUGsvcjJERWRUUEk5MEdLQUptdHVSZzBwakhhRTVTL2xteTdIUUNZM2dCcWtiYmtwRGl0N0tNUHA5TGtRUVNaL1A1SXFEd1JDZVBSejdkMzYwT2dhRlRqc2VONS9ETzhtYTRsQ3hsNTFXY3BPOFRueWR1RmxtZmhmelZtdDZlY2g4TGVtOG4rZ1FLS0toZ3cyRVgrcC9EZXNpOUdBUlZnSzlrVGxPTFRrUUlhclhNYkpadGFFRDA2YjViZEk0YUorRVRYK0FpUTVKZHR1Y1ExWGFEenZERnExc0xhSmMzdHhLUTN0UUxleVVxeUtXVlEzRi9xMGRGajhZRDhrNnlkZFZGYTUrVnMrRFNHNnVDL25OOWNlbnVFTnFsakovNGNvdC9uN2YrcGlZZVlVcG8rRlpPbEZHeFJ2VjFXeTRWRVBHS0xKcFg3QUIzdUN0TEYyYm1XYUlCaU5GNmhCOTIzRy9UMm11ZHRJRTFmejY2VFV3M0FiclFyYWx3RUZoTzNaTExaSkd6V3p3endMakRzK3o4b1prODRnT3dvSFVBSEFnTHc4WGgyYUZNcjY2anM1U294a3RKWUJlVHJSalg1em5Ca2RtSTlNKy8xaHJjWWpZdGRacmdiclZUUjZjMDZvM211YUNrTlpjanJmUHNYbGlwYWpOTHdhdWZMNUVWU0tFQUhnem83RU14WUpXMC9vaUp4dU50a28wV21VL080NE5kVVd6SXVzTmtkWmZqZGZTVm8yeDhPREhINkx6VEh1ejJwd09UL09jQkVqSjFSVWpSOGI4NzVOSUVCQnVtM0J0dDZ6RW9kYjFoTWRvTWhyR0dxWFU0MkIwbTcza3lMdVJvYTU4UnhuR2lLeG1JSHd0Z05TdXZrQXF1dlIwS05Kd3YzNFllNFk5K3B2VzM1RTB0c0ZGMWd1dWpUTFUzNWZwVThEd2xBZlBuRzdIMDN6VzhYMGRKbm12Snp5WTQ1eDhsaEQ2ZzJKQVRFUjVteC9yRXQzbU56cTNPa2FVd0p2SWZHdStmcTVYZkJPSGphZnZRRDZJb3doaGI5blFheFQ2SkRmU2I4Vmt4cm1WVm5xdTVyWEk1UnE3Ukh5TUpSaU5Kbk9IdDhrbXZiZ2d6WWpnblRuNGR5ZXhjU3pPM3ZReURvSjlsV0lqdUlzUktSOGZiQUFYbXp2c2x2TXViYm92VGFtYzdLMmJSVWYySDB5UmpMdEpxZVR1eUFqZThZUWNKSkExZGNkdHp1VkNlMC9FcmhZTkl3dTBZT3pFdGViK1NsTUtPVVFzRTl1dVp1dnVRWFdiWHBYbENidXZKQVJYUHlBbXpGR2hJK3VPR01CSDdEUE8wb0RVdzFNNzhBTjNoSjZFQitxbzBZUmhJNThiQlhDSVVMSW15Z2hXVnNheXNJU1FCNTZocUIySElwWHpPek85RWxGc2R4dUJPWDBpUGhTeE5QOWVWaHlTU0lwMkV6WGthYlI3ZmZReGtlaVRENEwwRllDR0dpTnpNRGRJalhoaGR6WFB6ZVE2c0hVd0R5Z2RVc3d4K3VtS2lxNDlvNVFyeTRFSlBjaHZYMzJtSjFFWlB2THJKNnBjYVZ1bUMzcFFxWHpqMmV2WDRvcFU3dk51MmErT1YrZXJ4dklqMlVibDZBM25Sc2t4a1d3OWZOQWVqVndNSUU1UkhFU281eHIxeE5LczdjY044TnczMU1mLzl0UkFLTkRMSEQ3Y0w2NW1tZXBhb2hrblBlTFluY2IrWkdBVnMzUW1lczV5Qkd2NHhiSlI3UnVXaktJV3dRNmxmQ3RGdEhBZTBXQ29vMURDK1NCNkpzZG5wRW1QZ0IyZ1NRNkpVaThWRm9JQmhWM2toQ2hmMDJZeGo5SnZlZy9US3FUd2czZUhQTzVzVmtXRFl2R0NTYUJ1cUk3bmFBOW9OQjg3Mk5nb3VJUWJrRXJIYjg4SjJkTmpTNkpwRHJUZlY3cmg4V3J4a3I4Y0IzWmgxMktuTW1LcUhvMXBPZW5odEY0NmF6RTlMYTg3dWNSdjNKUjJ5eVE3bUlObGZkbkdqblVKZXQvRjF1amUrcU82U3c2dllTcDZEUnNpR2dKNUJjeFhWbzNSNUxWK1lWMXV1emh2aVhEK2FiMVpHTkR4MlB4NG5yYW1hY2J0cUhLb2N5djMwZXpCMjhHcmtqWGUwK3hBa0J3YVRNekxkWW1GTzlPL2cyR0llSEFTVk5yVHo0VXhySThUeEtqalZKcXJ0MVhyZEk3RE0rM0RlK0NRMWZXNS9WM1RYSGRmeG9yRXdNUFRieHJzUmFZcG5sS0hNeHhaSHMrSmNmTWI3WEdwUEJXbUxmdUNRL2ZTemV2MlBSYXVDejZBbGwvQjRFQ0V2dEZvOUJyR0VkWnBuSU9JK0xnZ241QmJxT3dTYmppLzFocUJhMzRuOWZKOUFEM1U4aWJ1YW1HR2QzVzFMdVJsTm9oem5Ma3VpUGVEMWozQ0REcDVUVk5HQStGaGRYb2FZRXlNVDBxVHgyUm53cHM4SXRCOWZISjN5YTVGZWdDbGZQMHJSbGw5ZDdDWjMzM2ovaGczRzJNdGF2TTFmQlVOQnJOMVRlRldGMG9jN2l3Q29RdkttZVNwaEJSZUh0eXcweWl3OTBuNnhwZ0NZeWttb05LR2htaDBJVlpZOEtCa08wVzFwcVlJaTlNaVRWRzk0SjJqaCtjdk9TMFJzZVFLNWdVRDhFQXFQMkNhcjlJalZodFYzc3dQVk56VEIzdndZQ2tpV0JVN3I3M040MkJBbjZOMUc5Zmw5TlgvRDVBK0ozazlSNk5VVy9OeWJxVHJWc3p3NXpmT0Q4Tm8xb3RZdlgyU2dZTlgxMERjNVlvUHVKTFVqNjZkVHRjT2wvUEViWVpQaHJpMytPKy9FOStOOWpiZWFRck9RNWdKMTd4MENKMm1Eb1lZb05CbFROV05IdXp4YS9EdWZqcnd2ckcwb2crWVliRkNiMFRCRC8zbzdpdHpON2R6WEdvZHo3ZkozNnhzRE9reU9TQTQ0TjhySFB2LytUTWFERnBKbjQzNE44NU0vbWNxK0NLb2lnaHl3ZGprbFZ6Uzk4SGc2UUdCR1Yra1NhYTFLMGx5UjVUa0RjRE4vWUpUcFIvemZielNrazVldkY3UnVkRllLSnFtSWhFaVJFaXIwN0ZFQk5hejRFS3o3ODBCTjNxSzlyT2IrNFlvMTh6NzU4bmNrZ1M2TytQZ0xIWmsrdlhlcjdJYnU4QnF0cmJzMWYzM214NTJIZXlaSngzb2lHODBYemRiQTVTLytFSjdMeEVmczJkUHo0WWdhc2Vod1JSYUxLTFRrWWdRSlhrUFJiQWgxanFYbVNyZHp2Z21mRSsyVFovZm00anR5K2RqKy9mRzgwaVIyNm4vNjUxaitiT2RFZVYzZVpMNzRRVWlzSWJScjNTSkY1VG9uV3hqZmlJR2VkM3hhY3VYWUkvWEM5WHRoWUFZa0RVWTN0MUVnVE5PUmtnRThRNFVEU2dVUWNPSEVBdWdQSjZGOXZVWlFKNG5MZFFyLys5VitHZ2E0dnNReENETlg3NTk1eU5YcE0vZld4QW5wOXcrQzZqTkluMjVVNW9zcVFHckdIWHBCTzROamJjdTZ5NWZjdkpvZHJId25wV2FGWFdEVkdGcVhmM1pXdU56N0Y5ZXZ0cnlqRzVoYVRvSFA3WHZ4Yld6YTJpRmdObFhwdUtjSHlLNnRITDVKa2l4UysxanV1bnV3bHFEMzcvVzBGM1FUY2RJTFVXMEdOZzNGYzJrcDZOS2k1bEFUbWVtb0FrSVQ1clp4WHozZmRtcCtRTm1HNlJGeHgzRzZ5ZVhpb3Baa1Z6ZmxkWXJUZlRaenhZOWdvMitnWVhtWUloUzNja3Q2RUVQZXpZMjNaSGhqRzB3UHVIdDF6c3o3WXNkR2VQdVpZbGVNTUlzS2EwbWJURnJ1bE1HeTNzbUplUkNzcGY4UHV6UTRISVJxZGFJWExoRTg2N1lnWUJkbnRYa2MzNmJVL1A0dy9rcFpUOFU5RjBNMEIwaG9Gbm9OYTB1Y1d3eEZpNTBzN1QxNXdOMHdxVFpmQjdyTFY4eW1oYnFiY09GL2phZGF2VWZOMnNoWjBHUTFwYjRONDJrZEduMGNWVEQ5MS9XTXljbjVlcUlSVC8xK2RGa2IwdlQxZ09KdVZ2ckNJZjIyVXVLcHA5MzZTRlcwcWxzcUZ1bUpQV09UQ3p3VTc0WHNLQStXQnhucUROVmtBZkFxSTNqV3FzaHluOUhNYTk5U3ZaQm1Hdy9LY0IxZWpReW9QRlk1c3UvT0VQRDcwVHlXb1EvaWZWUjNsOHFUU0F1dlRVWDRGNFNlWTBhTkZ6UUFpVlFGZzNaRDdHLzMwRUtOL3BjRXNBQlNqQlhZOWRpNzRybFhwSmM0ZFY0OGphSUJyQXk0d3pMd0lEVlp1KzNXZ2ZzdTBOcE9jWXd3M3ZYSFpRY3JSQzNOdFFzTFBHbUVNWDFBOHNIMzBZWnVnQll1anhDTHc3ZSs1TkRUZGRROGViR0IrWWc1YVgwS3Bxd0l1cFNMcjN5RDVKbkZ4VHZmYW5wNk9HMCsxK2RtRjM2SWdHc3c5QkJjUDUzbmZIUDdObjNRWlhwc3hNK0tweERObjErQXFXQjRrZGpiaWFZdnZQcVA3V1E0Sy9EakRVWjcxMy9EYkY3QkdLU0tKMDhYK0wxVFJSeXgrVlc3Mm9PdkExM0FRdXJYdTA0OXQzTjlGS1lFNFczYzZFOTZhMDF5WWR2aTc3K0RCUlh3OW1SQy83TFBHSmxrQSs3UjcyMjFjR1FmY1dveTZVS2NyZnhBdkFmQnlENmNOYWN0ZXFIQ2FlK3BDbG1MR3RHQmdtQ1NQN2pCSFIxdGQwWDk0dTM2MWJEK1lsMmdZczk5dGtvQTF1Yzg2NFBmQlRpY2FwcWV2aHFYQmZlMmJQbGkrUDFIak1aRmF1NEJHdVZNR2wyNklhS0RsSjR6NjlYUjlHeHhYSHM1MFdiTGJpOEExOFJUZUVyaDUxV1paVDFoVFRGZ3B4OFdqN1NQaXFUNnNrMk9LSDg1cjRDNjRVc0RLenFuQkdYZlVVb2FGODk2blVKbmtTdittSHZSSWlLTUJoVVFPbnp6R3ZIMHE5K2FzbVk5YXBxWnF3V2M4YUdET01FTWxnZVFxQlNoMFVhUUQyMkk3c2VmVGFya0ZnTE5uT3BBMGVIK3F3ZDZnL29kWCtWeVd3MEIxYTFtL3lMUGM1VlFaOXoxWkpPOExYYjRZb3JiZDEvV0xtZTdVRUI3QnIxMkZjRmcvWlZvMjZYSXNBOUp0aUJLZGF6bG94RlAwUVF3T0pwUVVvRWpndzkzVnNRM3B0MHJDS05vaDZuSnlYVkdjT3d3Zk1hZGNYUStVUnZILzUzNSswMGVZNEVnNS9aTCt3ZlV5MXBHSlVrblpPam5iakVtSEVZaHV3WTBwK3htNHhaTTFLMDJ3MURXY2M4YnNpbk10bWlaV055dUNCWi90bmhIWWp6L2daT3FMdXNnd0J6UVZkdFBGUVhlWUR2SGxSeGN3dHNSMkkxalI5U0tpZHZPYjJwazdEMC9raUt1T1h4M3BtRHc1RkFIUmJtWFZsWithbFN4ZSs0SFN1ZGl4ZmEvUEpZWTZFZW1vMGt0SnI2OGg1MlljR0t2c0g5RDd4OUZWN0w5Uzd3ZEt3S0J1WG1CVzdmYk10WjBCSVJ6RmxQY2IxbVk4bnRwc1gyWWdBdXMwY00wcXhSTFBXdDExS3h2ZmNqcXJnQzlhckUzbThKN2ZlSlJjUVZKQWVzODRyNnUvbWdiVW5xZHovZzBDMnVKb1Y3a2s5L0tXQ1ZMb3dXNU9SUzdsdloyai82cUNPa2V3K2Y1Mkkycnlxang0K3EyNS8vMXlUOXREby9teStTbFpsejlscjhPZGRqdUNIR2xkckRCbkVHRXduSlhCWG1kSjdYcStKS3RCUG1QUmVwZXdtVzk0Uk9HVkVZOUs0OCtyOGlFaEF6blR4Z1ZHZEU5T0swRVhuU0NGZHh2RjhhNEtUQzFOeThacTI3N0JOTGlGY0NITUQ1SGVoWXRjaEQraFo3OEZXQm9CQU4ra2hMeW15eUFJR1djbGE3TFc4MWxnaWNDUWR0ZGlhOE1QQUhka0h5SHFHM3BJdWh1ZXZNL2JpeGdQeXNaZTRSd3I0czRMY3ZIM1c1QkU4Z1YvNncxK1J3ZWpNekNSK0p2OC9HOUVXOFF6K1F3ZUl4WktDakErblg0YzZ0bjlZYWZVTmZsOFUrYzFXTWR3dlhBOGRhNlozUlJ1RHNYYWdBVnZUMFp4OVE2cGsvcXNDS1NBejgxelh0ZnRGZkVETlR3L25NYmg2UVdSWlRZNEtuNS9PRlhmZlNBai83NmJCQWRpWW9SRnA3YzJNcndYQlRadDVwRDFzbTJHSVZjRWZ3dHAyMGFkZjJpWlVYSTN3RFdsQ0FWWkk1VkxmNjZtTXdHWUF4ekN2bGlHbys3dmlMMTlZajRJS3owN1pvc01QVy9QcWYwL3JJenArbVAvTzdKeHhIMEx6VFo4ekd0R3NPM0VJVDV4NlZUclhXK0w5bGdlOVVNTFA1WmJmQ3ZPWWxHbk9pZUJwRW5SU0J4TisvZUJOZjBqYnR3RUU2QmFvelZ4VjRxV09MUTcrNmlrZmRHK0JLd3V4Q3lJK3IyYitnMk5NdGtYN1I3Y2ZWREtXaS9nQ0VrRDFjMUt5OHNMWGh2Z2VPUHZoNHFKWjZFOEdyN05UYkVGUGMydkRzVzJXOG1sanRGcDZjQ1pXb3NyeVJISzNROUR2Ujg4bTI5TmtWblh1cmlRSU9pU3NhRHArdjIxTTRmbFVjTHpZZXZCQUM5citNVnFOdm9EUkNnVkZqY3lnTlhLN0N4WUZqYi9sbzA3VnZaUXRsMG16bi9PdHYrZEoxMWR0cndIazFVQTZ0ZEN3ZXMzazBuVTJMU3hzeDdOTVNQWmV0c21hTXVrSkhvUFhkQ1I5SDZvem94R21yMldZeUpaTE9aRkFkZ3cyazlCQ3ozWDY5M09MeUdUc3kzcStlZUpKc2U5MnlhSWc2NzEvZjhlZ240UEFNeFFLMlh3MEx2ZmRKOUI3YytRZFNUUFN2bENyWjRMaC8yaHFtN3RiYVhEYnpBbGh1ZFNFbzdBZXVXbXFwenkxWEtWMXkxVkJycEtSTHFWUzVsWnFlTjlxOUJzVG1OVW9RTVdSTklJR0dJMFhreXNFU2NnVlpvN0hoWXJBMGFBbFNvd284RlZmdXkrWEZtb3JoT0VFb244dTV4c0Y1WUl3NWNpb25vTUlGaDIxWFIwc0hpdXVtRHRKZncrbm41aFNWRldMK1Y5UlUzRll5SUZKdlNHdzJwTlV5aWdYOEt1Y0RtamFPTzNCdm4wNlhzUWhiZk9hVWRQYm51U0RXbWpJa2s1MlRZVjFhTkkzaGxraFdyS0VaUGl3REdyeVBjUGI3L0l4bHo3YXBIa1RoL1lXdmZtc3NGNlM0a2hidkQzcUprUVVXWEJYbmZpQ1VVa2lKalFKbDhMWHRFOHFkSTZqRmJkRjJKN211Mjd5WGw0M3o5N0M5ZzFTTjJXd0VvK0REa09iUGVscEVIWGtkMG0zRE5Ja3VqVk5LTkY5VEllemYxcXhwcGRDSW1oZjhOd25hcnY0UC9WT01NLzN3UWN3NjRESUp1M0JuanhEd0lEVWpOM25hTW1vamV6bTZQRERjRngrT2w4TzVRdXcxOEdRbTRDOGE1aC9SU3o2UGNGVzZnQlRGMlRHVnhWUXFPbkdaSWFLR1l5YWRPQlV3V2h3cEZNNFkxTXBZQWdIWHEvQnRlTythS2JjR0lVV2dNS0t5TlNSNk5oOXV1Z1lzN0NDcUhDejB3cWdwM1lmWWJIbkVsRVpoZ1dmSlA1NDNmZCtPUzQxSU1xc3pHak02SkdtVXZ2Zzl0SHlFZ3ZDSVpUSzNXRUhBUkNMbWNpZGlSOFRCM2lRQnF6MUJxUnFXSi9EQVJFOFMxSi9VNEl4TDBFV0JnYjZJK1FMeDV4ZVB4cmRWNVNmclorRjJHRWpzVVpYVk5IZ2FETWROV2tzUU5aL0hBS2NOR21VMG52RUVCSSt6T21FMWl4eFhQbTRtMWJCSkhUK2tWSGt3bzhwWEVBa2FzWndUV0MyQUZmUlZZdzAvVVk0dExxMVlxTFNqWnl1YVI2ajV3SmI0QW0reVQzR1dWWHVjM1lnTlU4M2diYmxjOEpLc2ZValEwTDVqM3BVRmNYSUdjb0FWMEM3dytiNXFSaUpXeEJFcmtuOFp1WGV5V0FvV2ZlbWxBeGRwdkxkdy9yaHFYYnZhc0VYWThzQzFoZnlLY3BCOGI3bGJ5UDFYQWU0V3NjTHp4VU5iZDNYMjFOWTNQRUZ6d1h1THR0NVJmNWlLUFNXUUlqc0l2ci9Wcllidy9PQzdDTDh2TS9CVEhIWjU1WWFKTXBET3Q3UnRhdHBaT2R3Mm4xNURoK3RMalM4QWZ1WGpQUnpldWI5UUJ6VnZkcllKaFFFVUgybWt2MHk0OThCR3duZnZpanRvRmJVM1NkcTJYL2QwUzN0THl6U0w5MU56ODJPZ0JQZ3NhdSt5Z1QrdE9BZzUxSENmWGRHZnluR3FFUlR2YThBMnFQTDdQYTJOM0xzL25aZEFLOTl5NkNrMjU2NURMVzNVeExKUlkrMnQ5L3h1dnJQWjB0cFNXYjZ0MHJmVjByU1AwOUhXdXE2MWRieTFUUXVpRXJ4TXBKZmNwcmRERlRVUFZiTkZOenRZYWoxbCtkVzhuNXBiWHVRMHExdWFENE1ub0ZDaTM5MG51aGpmOXlEWXZ4eXlJM1NhRjEwWHgwcmxKaXc2M2Eza1U2cDFLMmR3a3Z5eFd4eXIxYzhUT2tGT1hXS0txajNiaXZJRVgySEdiYnBBWXVYRGpxcEQxc0UrbjFadG5jUkpybW1nY25pVkRPdXd2UFdTQ3V5d25uOWFZN1V2MDFETjZ4RFR0MXFsUTllN2hVdGJoTUtXcGNKRUJTRmI5ZVVZWEFKSDVucTBrdnNoRG0xRnJXVzM4bzdCMjlCbHo4NTlXeVBQQTErYmp3YXArUHhraHRkMUlLSXc5ZnpseWs3VjJrNU1ubXVWWHNtdHRVTnpySDN4dHRZSDZKcWpPS0syUStlbXYxNzVQcVEzOFQrOW02Uzd5ZlU4cThEK0J4aFRSZUhDdmpUbldrQU05MUpZMlFrYjVBR1BRcVdKcUE3Nm5sdyt3L2U5T1lCaXBpNGQya3RJZU9ST3YxQkZjVythZ0NoQTNlc2xFWFVHYmNJR0FSVGM0bmhUMTFCWjY2WFh6VEZMRk55WklUNU1MVytyeUJtb2RXMlZyRVhEUk1acVJELzJxeU1MNzJYZ1FwR0VMZk5vejcwZ3ZvN0JrQnp4V3A2ZWhBVmFjbnBldFhrTjZ4SkdkZ2lKeWhwSmg3YUNNSWdETWNwUlQ4cWlhTHZMN0dhTlUrWm40dWlscmdhM1lvTStpS3NISHFqOUd1NG5ncnBGSG9XcnZsRlFQc1BjcHhsanFPTHN2ZG1tamJyZW1zSHJhOSt1U3NHRCtvVnVwYnNPYjdGeFpZVTZzcXhSYmR4MG5XT3hra2tpdXM0dm53L0swV0NKUjV1STc1WFhUMzE0QnMrOURUbkJ4YnlSbU5HNXd3NUJnV1BVSmhuWnNsMldXM041KzNVcmRpVTBMaXF4SUM5ZkpodWZObCtXVEpxdTBMY1Nra3hYNHpGQWU1UldSTFZjUGo1VE0xTkZSdFA1YmJma2MvWWJOTlVJaUxucFRCTFRzcnNwZ0NNWngybkZha012SnVjb2lqd2FVTWFLZUw3UVF1ZWo2S08yM0pGbFFJdFV1all6Ty9TWXVFMDdmYnZJUk5HOE1uY3BvNWQzbDVsSzBqSWptZHU0OVk5Ylg2bzI2WWxaYzdQZkhmOTB2TWRtSGx3WlFUeUhETlgxR2w1azFqN2NQNC81TU5FcDQwUUp6VE0zR0xpdjBKcmZCUjR1QWZmMHFCQk1XMEtVNFZtcTJPTXFjTE1kVERldmFQaUNtYlk0d1l5VkwxZ1pOblZSc2o0SExwYUF1ZWFucTRMY0NwbFhwUktpa3ltVTZZYWM0ZXUrRUlvKzEvTjUrczlGd2k5MFFQMk5yZ0NLR3BURExES1dMYVJXNmtiUGFtTjNFWm1LUklRUXlkVWViRVMwK1hHcWRxaGJnTVNtNHVIOWhiN3dBYXFPSVYyQzRLUFV2bUlFTDFBUGZBMzRLNWxtaXhWMzZHODBLTHNiVW8xQ251ckN5QlJGN2tjRlMrOUVzWVgvelFmZjhCL2JmZFBreXpzcE1JNHFqcG5zWHJyQW83LzFxZGZuUzBUTTNBYVMyVVR2UjhlTFZ1TGVqdXdMbEhkYnduVVdYWkZWbW94aG5hTExqakNiTmZpWjJRSkpMZ2lLMjhxT3VreWx5eFp5ZXVKUDNDL3BJYlE2VEYydWhYZ2FjS1pXRmJ2Z3ozR3Z3aDVnYUdkdElDSFpkQVB3UGFDekl1amFlMWZNZE9GOTJkNFF3V0h2T1gyTEtESmxqMmk2Tmpmb2hxc2doRnV1RzloS3JhWE4wb2hWMEVPa0dhTExMek9NdnVoWEU4dlU1ZGJvY3Nab0RNbE1JVE55K1RXaTBKS0lMNURVKzAvcGQwZjBRNG02Q1hXcDhNSFFJK1Y5bmhuY3dTREtNY29RL2NoelY3OWJLYysvdnZnNS9TRndPNzkwN1BENXUvZFV5dmV2OUQyalgwWlpkQWVTUmkvdmY2cTgzV096SnhpWVdoaktIOXA2RG1LVWR0dzM1ZjRTeHF0Ykg3b2pTY1dIRnJuVytEN2xZbTFOaytIbWF5cndkUFJDdmZZbThNc2xqeG9mRWMyTXVEWDMydy9NTStpbHV2enJEWndUY2VsdHVwOXVodDBHbDQ4ZCtRbkhXMDVVc2p6WGEvbm4yYk5zODNUOUVIWm91OG50NDhzRk9QczE3ODkzQ2JYYjJzTkxXVEdOanBVNEFNT1RyTGhXeTQ1UFhxdVZScXhPVlFUV1NHTldoeXI4eUI1NDhvSldZQVBaWGNEaHpjS085Mys4QitPNVI4eEtxTjVjbW95a0ZDbzFyaFlGWUsyb2hHZXpSdFFWakc2cDhqbkFPbFVwaitQcWJjUy9ubElDTldRNEM3QkVjUDFPYjkvWW5jNnRhNEkzTG5KSVZrYjdObUhkV0tqMndyOVp6S1RpNzVzWEsxTkRlNXhkWTRvcHo4ckUvUWVuSC9jc1dYWXFGZG1iY1FqWDJBZml0cEJFR3BHN2ZQSXV2ZkNyS3hWYXY5WVFZbVdramc0M3FBTFRmSmR0ektvVXhueEUvM2ZST20vUmpLaTd1ekFuT2FnZ1NGblhucGJySUhDMkxOZVdvdkZsMnBacXJnbi81S0xrc2pFaUlNTmkvSWhFby9SRlpaZy9heFlES1MvWUpVenJVN3RnaDl1RG03anRwQ0ZJV2I4OTJ4MkkyeXF5TVNyZWJyOUlxMlBXc0oyTVhyd3JOU0loM1FBNUEyL1pVSUswMWZid3ZtWUVGOHFHcXBCaUxHWHFYUzhldXdaaUxJN1Y5cWFQTGhqMjBVSlA5MnFWRjZWNHZVUWRZczM4bDlCVmdTbmNZT0c3WlZrdGl0cmZmdnRCMmI3UUorS0dtbk5ldkpValdldmhpQkN2VWlHTlBkeUdlQVhMdDBKNGZwQ2MyR2tGOTlYVFVrRzRWL3RxcEtYSDllbXBCeFZudjJ1RFhYcGZFOG1zbW1OV2xPTVkyRit3eVZETUdTZENZZVBtWW02VG9kT3lDem5UNW5ESU5GSFFJaVg0WW5VNm9WM3E5VWd3bmN5bE9HYVNabytYU2FRbVZqdXpCazNHYUtRWFJ4Wnh1ZzFKdnMvMHcyRDRmMXZ4eVVRZUdCWjV2VElEKzRkYzhzZDRUKzNRdmxmQVhCK2FJNytVemM3ekZBK0xPWnhmNUtDOFFtMXZmOHhJQWRCb1V6bDFOS1ArUkhkRjRmaXA1bGNhbW5ZM2QxUzF2MWIvdFdQSVlpOFJoTDJrNVE1bmFVR2c4VG9hMTJpVG1GbWJVQTBVVFdoMENUT21TK3BpZ0hjbHBEaHg4R2FvdlNXakxYUXIwVklFb2gvejFLVVR0bjNYZU9nNzlEQys1Q1NVNlJyZFBlbVRYLzFzaWR2NkQ1Z1ZhVlpzSlRQblV6c2xWNnZGVXZYVkV1blZISWxFYzdWWFpwTkxiYkt2TWJCc2I2L2tzMytMb2VYVFY5SVFzZ01OOWwwYjJnSlpuUE5wT003dXZaNHVXYllkNTlSVE9UdzNKR1hwbnZxcWhiWCtHMERLVkN0Z0VsMVVMUlBmM2VyZ2tOOVBGNjRFRUhXWlJ0M0UyNjIxZlBTSGFqK3hTTDJIaGx6d2RUMnpxdmgvd1pkc0NFak5vNG91SUxkN0ljZTFiUkh3ZnBWV0JaaGpmWmlaVEF0Rk5WTUxnNmdXTWhocW1XaEswUjNFcG9LdHh5dVd6UzFxNW1ycE93cThlVnkzQy9GUmVSTUlIS2VaS0VJK2VZaXVvbWwyQ1BvTUZqWDZxOEJsdjBjRTNWdW9RazhLNXllTXBkTkhJSWtzM3hoTENTWGxmRThxdjN4K2p3OVFZcGhTNHpMSE5mM3p0ckVtTUowNEcwMTJVc1BYNSt0cXVrWGJWMmhLYlVrUlRJNmMrRHhEZmxNaHhvc0NJYy96Z0poSEZVdGRqeWx2V0NrcHVMNDJkV0RmcE9sdWFxbFoxaE5CdE5zTGZCR1JxVUptSVN2OVo0RkVla3Znald0c2JHcjhRZTUySTdpOUpmZ1JYZ09RdlY3YkpOYXQrT3R0WS9Rd3lrdU53SDRqQzFiNVpVdlpwNyt1cTJGa3VyczRtZ09oZHJXL2Q5amdUUTY3cGdLRHI4aG0vazdvOW83czUwNnkyQ2VlWTNQdU84Rm1uYnp2YnRZUExhMy9XL3JaRkpaN0dnSU0zNjdYd1BZamdNcHIvRU1nNFhvRG01R3VsMWdIczcvQ0lTYWIzenVnazA0TWFBMElWRVV2cm0zdXBXRFI4RGNLaGx0UU1GeU5naUVUSS9nbmU2MmtUZDZjMmRiazVXSERyeDdaSklzcWNLWXZTdUpSbElhaW9CdEZ3VHNvQ3Y2VW9nVEFkY2dKTGNnSnp5SW5QSUtjOEtHVW9pOTB3ZlNhUnV3QW9vK29xYnFSMnVjUnBnNC9jajNCVEpqOUtlWng0R2ZqbW1BWDVUbVdZQ2xUTU55bXp3UWx4V21EUjlWKy9pT2NKUFpmbUI2SGwrQUdqWTBvNHRSdDF2Y0h1NGJGYW4yeXorQWJSak5iOG8xU1RqZEdHcU5PeFg0U0lUVnB5Q1BYSTh5aGlUM0JBaVllM3pJVitLaGs1aVJDUG1qVCszU2xlcCt1QnZuZzVER0xRZkVYQThFQTluYnJuWG9Bc1h3eGU3K3VJdEFJZm8zNjhVZzNRbUJxK3dqb2JmUXgrZ1I5aWo1RG42TXZ3SmZnUGVrclV2d2FxU0srVmQ3RDcrRDN6QThlMnZoMkl6RDl0ZW54VkQ2SkM0NTEyeHQ4bGo1SGZUOVBmeHArb3M0SHRBVmR3WXpLbktxK1FzenhleG8zckd3TGNyZDJWZFFRTjFtWHgxUGN3QzF1NHNQYnpCTkVMdjJMYUxEZFV0UDJvYlF4SzhhekhvTzRXM2lEM1Q0OWZXZVUyZWZSM2Y3L3lMRllabURRWHZjOUs5bGFnVVVBTWVMZWZ4YXNBakNIZlZnQVpCNklkWXM1MFh1MTNicUxGOWIyNEk5WkQyc0RiaTE0L3o4Z3kxaXhsdGpndk9VQjVMb0FnQlhZemFsSmdzYU1yUjF0WFlkUlJsR0g5UlFkc0UrNnhtUmc4eUllbzhveFJ1TVFCU29QdU1PTVlNTGRzNHhHQ0orSDJTTWk1YWJ1cy93Q1ZZNXROQTBYbTB5OXhHTTBKdEFPcTFwZ0swQmRLQWY3REtHdjBNZm95OUYvWkdsYWxOdmx3bmxDY2hndFJMOWxXNkFyNEtOK29TZGdJeFhwSUp5RjI3Z08yTy9OQWxoMVZYZU5PeVBkOS8zU0lLQS9WQ2szOVk0RVBZaXVIZU1CSEpwV2ttM1FlSkVMUEVZTDBXOWdnWkthOXpHSHp2OGJJN0RIZS80WWJoZmUyRTlpb085Sk0zMjNidWJzU2tRdmlNdytuM1FOSlVlOHRPdHJ6eTV2MkVhNjdBMnhWWlRzNHU4eTFqam51NTNOQzNrRWJpRS9aanNpdWxPajIwUTY4VTZZRWltdHhrdXVDM3ZMOFlaTG8yc0ZFYWRReHV2RzlsRTBldDYrbGsrN01RSG9OMFBZbHNhWGIrdmFOM3RyMXk0MmRWbWtmU2JWNXhpM0JiVjF1MTFNOXdEMGxPekxYbllDUjkwdDR3dCtyaXVvS0ExOXl1d0QycExBSndRN1ozeStjSW5pOGtnNjE4blVTQVQyTzZWSy8zV0JJYTFoVDJldzdFb0ZTcmFNSWorVFdFMCs5NHJhSEFKd0VUOStaN3BsWEVqcTN4REgzUURnNUlHTys1TDhMMitKLytpd3p4UE14Z0VpQmdBSS9peVpvSEFtTVAwL2VFNWs5eTZpTmUxazZ3N1d6NHVjcnFUcHh5WjNCZVVKdjJSeXAzWEZUUFlkeUw3Skl3UjRSa2p6TjdhelhpMkNJTUUwcFRYb2RaYzdJU2pkK3JMNEZIeEdFeTNBUkhVQXgxVi9MWnZpamw4d1dWMm0xZlNDZitzd2MwVzA2T3FhNW02U0t6eXRSbmhRVmFnTTZNY2hSZ2tKTVhZRThZaEI5dW1Lb29UcEdScU5rSzRmeDRPVyt1KzRDcmNHWXJnVFo1dm1HOVRVanRmbmlxWVpVV1Q2VWcwZUUzaGtpVUc1bkJwZ2pGMTREWGJvK0RRUmJmcFYxM3pNcGxJSkN1YytWTEp4R2dhenhGd1dJM1pMbmo2NVg1MDB4QjAzb1owTUw0YVNQNkd2UVhLYnVQTXJVcXZtYVFoM1VHWnJSVVpOaVlvOXRYVFJVN3hHbGRTeXBZNDViQXJMVUxNenRBYjY1aW1kSU9hUkRZcElVRjVCc0lvN0tRNi9VelN3dEkyU2VkUzFrN1FvSVhQU2MwR1RGNHV6V2h4THh2d054RjdoOXIxMkxMWVhJZDlGRDVzck8vUzMyYktlV3paUEpxWC9BTTNRaDFwdWZTdDc2amlRdllFbDFtTTBlTTdUTWt3QUEzdDlTRG03NlphWEtMWjU2NXZwTzBpeHZmUXlDSTJqNUJPaFYvazJQaVYzc1J0NEtxRmwvbUR1RG5VejZtN1Z2NzhSUGIzSTFqUE1YVkNxVllpZitFVEZIblczcmNoTWI1MWUxdXVWcHpMMGxnR1RJQVVNYVJVRmNLQURzSUVFMFFJWm1LZnlEVWxGWlljbzJhNi80M1FEQ2FYc2tjTUdPSzJzNUtGenFQeWk3c2pmSjlTOE5Wb2pqOG9YMU1qdXlmRUVRSUNQY1dpbUFXZ2pMQndrSnEwT0pqaWRIWnoyaVkzT1p6c0VrZG5yRU5seW5TTllZbDV5aERLWFlnOGoxYnFUQ0Foc25DN3k1S3RRS0p0WGxtSXloVXU4TkxMQkJaaXl1UU9VeURiSmRFVW15RFdackw5Q2VhYVpZaElIN1VTMHVKWG1lYlRJaWpaQmNyRjgwMjg2SnlldjdFeTF4RVFPcXNtVHc3bkt0ZEFVWmV6eVRlRGxreTNYQkdVWjQzTEtwaDdRSEs3eHFlQVFldnRvY1dSbEV0SmxBMDFSWk1wUktUVkZYZXJweFZ4RnhiNjhuRjdqc3E3R2JkVTIwQnVlSVZKT3dzZkZxNFRQQklVU09MaTRKTXJRVno5OWRaTWhhUEM0V1RzWXlnRW5acXM0bXJ3WUtkeGV1UGxZS1RMSnFEUy9WNG80aENvK0R2TlFiL1FJK3ZIb3JlZmdNVFBNbTRZNXUwNzVQNkpJWGhIL2UxL3lud0VBKSBmb3JtYXQoXFxcIndvZmYyXFxcIik7dW5pY29kZS1yYW5nZTp1KzAwPz8sdSswMTMxLHUrMDE1Mi0wMTUzLHUrMDJiYi0wMmJjLHUrMDJjNix1KzAyZGEsdSswMmRjLHUrMjAwMC0yMDZmLHUrMjA3NCx1KzIwYWMsdSsyMTIyLHUrMjE5MSx1KzIxOTMsdSsyMjEyLHUrMjIxNSx1K2ZlZmYsdStmZmZkfWJvZHksaHRtbHtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS40fWh0bWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLXBhcmFncmFwaCxwe2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjY7dGV4dC1hbGlnbjpqdXN0aWZ5fS5tb25zdGVyLWgxLGgxe2ZvbnQtc2l6ZTozcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjE1O21hcmdpbjo0cmVtIDAgMS41cmVtfS5tb25zdGVyLWgyLGgye2ZvbnQtc2l6ZToyLjVyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMjttYXJnaW46NHJlbSAwIDEuNXJlbX0ubW9uc3Rlci1oMyxoM3tmb250LXNpemU6MnJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4yNTttYXJnaW46NHJlbSAwIDEuMjVyZW19Lm1vbnN0ZXItaDQsaDR7Zm9udC1zaXplOjEuNXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4zO21hcmdpbjo0cmVtIDAgMS4yNXJlbX0ubW9uc3Rlci1oNSxoNXtmb250LXNpemU6MS40cmVtO2ZvbnQtd2VpZ2h0OmJvbGRlcjtsaW5lLWhlaWdodDoxLjM7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfS5tb25zdGVyLWg2LGg2e2ZvbnQtc2l6ZToxLjNyZW07Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjEuMzttYXJnaW46NHJlbSAwIDEuMjVyZW19cCtoMXttYXJnaW4tdG9wOjMuNzVyZW19cCtoMnttYXJnaW4tdG9wOjNyZW19cCtoM3ttYXJnaW4tdG9wOjIuMjVyZW19cCtoNHttYXJnaW4tdG9wOjEuNXJlbX1wK2g1e21hcmdpbi10b3A6Ljc1cmVtfWRpditoMSxkaXYraDIsZGl2K2gzLGRpditoNCxkaXYraDUsZGl2K2g2LHAraDZ7bWFyZ2luLXRvcDowfS5kZWNve2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMSkgMCx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTIpIDUwJSx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTMpIDEwMCUpOy13ZWJraXQtYmFja2dyb3VuZC1jbGlwOnRleHQ7YmFja2dyb3VuZC1jbGlwOnRleHQ7YmFja2dyb3VuZC1zaXplOmNvdmVyO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpO3RleHQtZmlsbC1jb2xvcjp0cmFuc3BhcmVudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjp0cmFuc3BhcmVudH06Oi1tb3otc2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9OjpzZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX1rYmR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czouMjVyZW07Ym9yZGVyLXJhZGl1czoxMHJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTtwYWRkaW5nOi4yNWVtIC42ZW07dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfWRldGFpbHN7bWFyZ2luLWJvdHRvbToxcmVtfXN1bW1hcnl7Y3Vyc29yOnBvaW50ZXI7Zm9udC1mZWF0dXJlLXNldHRpbmdzOlxcXCJ0bnVtXFxcIjtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjFlbTtwYWRkaW5nOi42cmVtIDFyZW19ZGV0YWlsc1tvcGVuXXtwYWRkaW5nOi42cmVtIDFyZW0gLjc1cmVtfWRldGFpbHNbb3Blbl0gc3VtbWFyeXttYXJnaW4tYm90dG9tOi41cmVtO3BhZGRpbmc6MH0ubW9uc3Rlci1uby11c2VyLXNlbGVjdHstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9QGtleWZyYW1lcyBkZXRhaWxzLXNob3d7MCV7b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0uNWVtKX19ZGV0YWlsc1tvcGVuXT46bm90KHN1bW1hcnkpe2FuaW1hdGlvbjpkZXRhaWxzLXNob3cgLjE1cyBlYXNlLWluLW91dH1kZXRhaWxzW29wZW5dPjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0ubW9ub3NwYWNle2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHktbW9ub3NwYWNlKX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOnJlbGF0aXZlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSBidXR0b257d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9YnV0dG9uXXt3aWR0aDotbW96LW1heC1jb250ZW50O3dpZHRoOm1heC1jb250ZW50fWRpdltkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtoZWlnaHQ6MTAwJX0gXG59YCxcblx0XHQwLFxuXHQpO1xufSBjYXRjaCAoZSkge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpLFxuXHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0ZSArIFwiXCIsXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge1xuXHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRBVFRSSUJVVEVfUk9MRSxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBnZXREb2N1bWVudCB9IGZyb20gXCIuLi8uLi9kb20vdXRpbC5tanNcIjtcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBEZWFkTWFuc1N3aXRjaCB9IGZyb20gXCIuLi8uLi91dGlsL2RlYWRtYW5zc3dpdGNoLm1qc1wiO1xuaW1wb3J0IHsgUG9wcGVyIH0gZnJvbSBcIi4vcG9wcGVyLm1qc1wiO1xuaW1wb3J0IHsgU1RZTEVfRElTUExBWV9NT0RFX0JMT0NLIH0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgUG9wcGVyQnV0dG9uU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvcG9wcGVyLWJ1dHRvbi5tanNcIjtcbmltcG9ydCB7IHBvc2l0aW9uUG9wcGVyIH0gZnJvbSBcIi4vdXRpbC9mbG9hdGluZy11aS5tanNcIjtcbmltcG9ydCBcIi4vYnV0dG9uLm1qc1wiO1xuXG5leHBvcnQgeyBQb3BwZXJCdXR0b24gfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgdGltZXJDYWxsYmFja1N5bWJvbCA9IFN5bWJvbChcInRpbWVyQ2FsbGJhY2tcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcmVzaXplT2JzZXJ2ZXJTeW1ib2wgPSBTeW1ib2woXCJyZXNpemVPYnNlcnZlclwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjbG9zZUV2ZW50SGFuZGxlciA9IFN5bWJvbChcImNsb3NlRXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjb250cm9sRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImNvbnRyb2xFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBidXR0b25FbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiYnV0dG9uRWxlbWVudFwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBwb3BwZXJFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwicG9wcGVyRWxlbWVudFwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBhcnJvd0VsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJhcnJvd0VsZW1lbnRcIik7XG5cbi8qKlxuICogVGhpcyBhY3Rpb24gY2FsbGJhY2sgZXhlY3V0ZXMgdGhlIGFjdGlvbnMgd2hlbiBhIGJ1dHRvbiBpcyBjbGlja2VkLlxuICpcbiAqIEBjYWxsYmFjayBNb25zdGVyLkNvbXBvbmVudHMuRm9ybX5leGFtcGxlQWN0aW9uQ2FsbGJhY2tcbiAqIEBwYXJhbSB7RXZlbnR9IGUgRXZlbnRcbiAqIEB0aGlzIHtDdXN0b21Db250cm9sfVxuICovXG5cbi8qKlxuICogVGhlIFBvcHBlckJ1dHRvbiBpcyBhIGJ1dHRvbiB0aGF0IG9wZW5zIGEgcG9wcGVyIGVsZW1lbnQuXG4gKlxuICogPGltZyBzcmM9XCIuL2ltYWdlcy9wb3BwZXItYnV0dG9uLnBuZ1wiPlxuICpcbiAqIERlcGVuZGVuY2llczogdGhlIHN5c3RlbSB1c2VzIGZ1bmN0aW9ucyBvZiB0aGUgW21vbnN0ZXJqc10oaHR0cHM6Ly9tb25zdGVyanMub3JnLykgbGlicmFyeVxuICogYXMgd2VsbCBhcyBbcG9vcGVyanNdKGh0dHBzOi8vcG9wcGVyLmpzLm9yZy9kb2NzL3YyLykuXG4gKlxuICogWW91IGNhbiBjcmVhdGUgdGhpcyBjb250cm9sIGVpdGhlciBieSBzcGVjaWZ5aW5nIHRoZSBIVE1MIHRhZyA8bW9uc3Rlci1wb3BwZXItYnV0dG9uIC8+YCBkaXJlY3RseSBpbiB0aGUgSFRNTCBvciB1c2luZ1xuICogSmF2YXNjcmlwdCB2aWEgdGhlIGBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXBvcHBlci1idXR0b24nKTtgIG1ldGhvZC5cbiAqXG4gKiBgYGBodG1sXG4gKiA8bW9uc3Rlci1wb3BwZXItYnV0dG9uPjwvbW9uc3Rlci1wb3BwZXItYnV0dG9uPlxuICogYGBgXG4gKlxuICogT3IgeW91IGNhbiBjcmVhdGUgdGhpcyBDdXN0b21Db250cm9sIGRpcmVjdGx5IGluIEphdmFzY3JpcHQ6XG4gKlxuICogYGBganNcbiAqIGltcG9ydCB7UG9wcGVyQnV0dG9ufSBmcm9tICdAc2NodWthaS9jb21wb25lbnQtZm9ybS9zb3VyY2UvcG9wcGVyLWJ1dHRvbi5qcyc7XG4gKiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXBvcHBlci1idXR0b24nKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBgZGF0YS1tb25zdGVyLW9wdGlvbi1jbGFzc2VzLWJ1dHRvbmAgYXR0cmlidXRlIGNhbiBiZSB1c2VkIHRvIGNoYW5nZSB0aGUgQ1NTIGNsYXNzIG9mIHRoZSBidXR0b24uXG4gKlxuICogQHN0YXJ0dW1sIHBvcHBlci1idXR0b24ucG5nXG4gKiBza2lucGFyYW0gbW9ub2Nocm9tZSB0cnVlXG4gKiBza2lucGFyYW0gc2hhZG93aW5nIGZhbHNlXG4gKiBIVE1MRWxlbWVudCA8fC0tIEN1c3RvbUVsZW1lbnRcbiAqIEN1c3RvbUVsZW1lbnQgPHwtLSBDdXN0b21Db250cm9sXG4gKiBDdXN0b21Db250cm9sIDx8LS0gUG9wcGVyXG4gKiBQb3BwZXIgPHwtLSBQb3BwZXJCdXR0b25cbiAqIEBlbmR1bWxcbiAqXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBwb3BwZXIgYnV0dG9uXG4gKi9cblxuLyoqXG4gKiBBIGJlYXV0aWZ1bCBwb3BwZXIgYnV0dG9uIHRoYXQgY2FuIG1ha2UgeW91ciBsaWZlIGVhc2llciBhbmQgYWxzbyBsb29rcyBnb29kLlxuICpcbiAqIEBmcmFnbWVudHMgL2ZyYWdtZW50cy9jb21wb25lbnRzL2Zvcm0vcG9wcGVyLWJ1dHRvbi9cbiAqXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9mb3JtL3BvcHBlci1idXR0b24tc2ltcGxlXG4gKlxuICogQHNpbmNlIDEuNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBiZWF1dGlmdWwgcG9wcGVyIGJ1dHRvblxuICogQGZpcmVzIG1vbnN0ZXItb3B0aW9ucy1zZXRcbiAqIEBmaXJlcyBtb25zdGVyLXNlbGVjdGVkXG4gKiBAZmlyZXMgbW9uc3Rlci1jaGFuZ2VcbiAqIEBmaXJlcyBtb25zdGVyLWNoYW5nZWRcbiAqL1xuY2xhc3MgUG9wcGVyQnV0dG9uIGV4dGVuZHMgUG9wcGVyIHtcblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFxuXHRcdFx0XCJAc2NodWthaS9tb25zdGVyL2NvbXBvbmVudHMvZm9ybS9wb3BwZXItYnV0dG9uQEBpbnN0YW5jZVwiLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgSFRNTCB0YWcsIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1vcHRpb25zYCBtdXN0IGJlIHVzZWQuXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZy9lbi9kb2MvI2NvbmZpZ3VyYXRlLWEtbW9uc3Rlci1jb250cm9sfVxuXHQgKlxuXHQgKiBUaGUgaW5kaXZpZHVhbCBjb25maWd1cmF0aW9uIHZhbHVlcyBjYW4gYmUgZm91bmQgaW4gdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIC0gVGhlIHRlbXBsYXRlcyBmb3IgdGhlIGNvbnRyb2wuXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbiAtIFRoZSBtYWluIHRlbXBsYXRlLlxuXHQgKiBAcHJvcGVydHkge29iamVjdH0gbGFiZWxzIC0gVGhlIGxhYmVscyBmb3IgdGhlIGNvbnRyb2wuXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYWJlbHMuYnV0dG9uIC0gVGhlIGxhYmVsIGZvciB0aGUgYnV0dG9uLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gY29udGVudCAtIFRoZSBjb250ZW50IG9mIHRoZSBwb3BwZXIuXG5cdCAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBwb3BwZXIgLSBUaGUgcG9wcGVyIG9wdGlvbnMuXG5cdCAqIEBleHRlbmRzIHtCdXR0b24uZGVmYXVsdHN9XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdH0sXG5cdFx0XHRhY3Rpb25zOiB7XG5cdFx0XHRcdGNsaWNrOiAoZSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMudG9nZ2xlRGlhbG9nKCk7XG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdFx0Y2xhc3Nlczoge1xuXHRcdFx0XHRidXR0b246IFwibW9uc3Rlci1idXR0b25cIixcblx0XHRcdH0sXG5cdFx0XHRsYWJlbHM6IHtcblx0XHRcdFx0YnV0dG9uOiAnPHNsb3QgbmFtZT1cImJ1dHRvblwiPjwvc2xvdD4nLFxuXHRcdFx0fSxcblx0XHRcdG1vZGU6IFwiY2xpY2tcIixcblx0XHRcdHZhbHVlOiBudWxsLFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlBvcHBlckJ1dHRvbn1cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cdFx0aW5pdENvbnRyb2xSZWZlcmVuY2VzLmNhbGwodGhpcyk7XG5cdFx0aW5pdEV2ZW50SGFuZGxlci5jYWxsKHRoaXMpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLXBvcHBlci1idXR0b25cIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtDU1NTdHlsZVNoZWV0W119XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRjb25zdCBzdHlsZXMgPSBzdXBlci5nZXRDU1NTdHlsZVNoZWV0KCk7XG5cdFx0c3R5bGVzLnB1c2goUG9wcGVyQnV0dG9uU3R5bGVTaGVldCk7XG5cdFx0cmV0dXJuIHN0eWxlcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKi9cblx0Y29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuXHRcdGNvbnN0IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcblxuXHRcdGZvciAoY29uc3QgWywgdHlwZV0gb2YgT2JqZWN0LmVudHJpZXMoW1wiY2xpY2tcIiwgXCJ0b3VjaFwiXSkpIHtcblx0XHRcdC8vIGNsb3NlIG9uIG91dHNpZGUgdWktZXZlbnRzXG5cdFx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIHRoaXNbY2xvc2VFdmVudEhhbmRsZXJdKTtcblx0XHR9XG5cblx0XHR1cGRhdGVQb3BwZXIuY2FsbCh0aGlzKTtcblx0XHRhdHRhY2hSZXNpemVPYnNlcnZlci5jYWxsKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqL1xuXHRkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHRzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuXG5cdFx0Ly8gY2xvc2Ugb24gb3V0c2lkZSB1aS1ldmVudHNcblx0XHRmb3IgKGNvbnN0IFssIHR5cGVdIG9mIE9iamVjdC5lbnRyaWVzKFtcImNsaWNrXCIsIFwidG91Y2hcIl0pKSB7XG5cdFx0XHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIHRoaXNbY2xvc2VFdmVudEhhbmRsZXJdKTtcblx0XHR9XG5cblx0XHRkaXNjb25uZWN0UmVzaXplT2JzZXJ2ZXIuY2FsbCh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQnV0dG9uLmNsaWNrKCkgbWV0aG9kIHNpbXVsYXRlcyBhIGNsaWNrIG9uIHRoZSBpbnRlcm5hbCBidXR0b24gZWxlbWVudC5cblx0ICpcblx0ICogQHNpbmNlIDMuMjcuMFxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvY2xpY2t9XG5cdCAqL1xuXHRjbGljaygpIHtcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJkaXNhYmxlZFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0gJiZcblx0XHRcdGlzRnVuY3Rpb24odGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5jbGljaylcblx0XHQpIHtcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uY2xpY2soKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhlIEJ1dHRvbi5mb2N1cygpIG1ldGhvZCBzZXRzIGZvY3VzIG9uIHRoZSBpbnRlcm5hbCBidXR0b24gZWxlbWVudC5cblx0ICpcblx0ICogQHNpbmNlIDMuMjcuMFxuXHQgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvZm9jdXN9XG5cdCAqL1xuXHRmb2N1cyhvcHRpb25zKSB7XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZGlzYWJsZWRcIikgPT09IHRydWUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdICYmXG5cdFx0XHRpc0Z1bmN0aW9uKHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uZm9jdXMpXG5cdFx0KSB7XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmZvY3VzKG9wdGlvbnMpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQnV0dG9uLmJsdXIoKSBtZXRob2QgcmVtb3ZlcyBmb2N1cyBmcm9tIHRoZSBpbnRlcm5hbCBidXR0b24gZWxlbWVudC5cblx0ICovXG5cdGJsdXIoKSB7XG5cdFx0aWYgKFxuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXSAmJlxuXHRcdFx0aXNGdW5jdGlvbih0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmJsdXIpXG5cdFx0KSB7XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmJsdXIoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxFbGVtZW50L2F0dGFjaEludGVybmFsc31cblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdHN0YXRpYyBnZXQgZm9ybUFzc29jaWF0ZWQoKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGN1cnJlbnQgc2VsZWN0aW9uIG9mIHRoZSBTZWxlY3Rcblx0ICpcblx0ICogYGBgXG5cdCAqIGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLXNlbGVjdCcpO1xuXHQgKiBjb25zb2xlLmxvZyhlLnZhbHVlKVxuXHQgKiAvLyBcdTIxQTYgMVxuXHQgKiAvLyBcdTIxQTYgWycxJywnMiddXG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ3xhcnJheX1cblx0ICovXG5cdGdldCB2YWx1ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRPcHRpb24oXCJ2YWx1ZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgc2VsZWN0aW9uXG5cdCAqXG5cdCAqIGBgYFxuXHQgKiBlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbW9uc3Rlci1zZWxlY3QnKTtcblx0ICogZS52YWx1ZT0xXG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ3xhcnJheX0gdmFsdWVcblx0ICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcblx0ICovXG5cdHNldCB2YWx1ZSh2YWx1ZSkge1xuXHRcdHRoaXMuc2V0T3B0aW9uKFwidmFsdWVcIiwgdmFsdWUpO1xuXHRcdHRyeSB7XG5cdFx0XHR0aGlzPy5zZXRGb3JtVmFsdWUodGhpcy52YWx1ZSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7aW5pdEV2ZW50SGFuZGxlcn1cbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50SGFuZGxlcigpIHtcblx0dGhpc1tjbG9zZUV2ZW50SGFuZGxlcl0gPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBwYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG5cblx0XHRmb3IgKGNvbnN0IFssIGVsZW1lbnRdIG9mIE9iamVjdC5lbnRyaWVzKHBhdGgpKSB7XG5cdFx0XHRpZiAoZWxlbWVudCA9PT0gdGhpcykge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMuaGlkZURpYWxvZygpO1xuXHR9O1xuXG5cdHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGF0dGFjaFJlc2l6ZU9ic2VydmVyKCkge1xuXHQvLyBhZ2FpbnN0IGZsaWNrZXJpbmdcblx0dGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0gPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuXHRcdGlmICh0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdIGluc3RhbmNlb2YgRGVhZE1hbnNTd2l0Y2gpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF0udG91Y2goKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRkZWxldGUgdGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdID0gbmV3IERlYWRNYW5zU3dpdGNoKDIwMCwgKCkgPT4ge1xuXHRcdFx0dXBkYXRlUG9wcGVyLmNhbGwodGhpcyk7XG5cdFx0fSk7XG5cdH0pO1xuXG5cdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdLm9ic2VydmUodGhpcy5wYXJlbnRFbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gZGlzY29ubmVjdFJlc2l6ZU9ic2VydmVyKCkge1xuXHRpZiAodGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0gaW5zdGFuY2VvZiBSZXNpemVPYnNlcnZlcikge1xuXHRcdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdLmRpc2Nvbm5lY3QoKTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZVBvcHBlcigpIHtcblx0aWYgKHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUuZGlzcGxheSAhPT0gU1RZTEVfRElTUExBWV9NT0RFX0JMT0NLKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZGlzYWJsZWRcIiwgZmFsc2UpID09PSB0cnVlKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0cG9zaXRpb25Qb3BwZXIuY2FsbChcblx0XHR0aGlzLFxuXHRcdHRoaXNbY29udHJvbEVsZW1lbnRTeW1ib2xdLFxuXHRcdHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0sXG5cdFx0dGhpcy5nZXRPcHRpb24oXCJwb3BwZXJcIiwge30pLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtTZWxlY3R9XG4gKi9cbmZ1bmN0aW9uIGluaXRDb250cm9sUmVmZXJlbmNlcygpIHtcblx0dGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWNvbnRyb2xdYCxcblx0KTtcblxuXHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1idXR0b25dYCxcblx0KTtcblxuXHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1wb3BwZXJdYCxcblx0KTtcblxuXHR0aGlzW2Fycm93RWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWFycm93XWAsXG5cdCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImRpc2FibGVkIHBhdGg6ZGlzYWJsZWQgfCBpZjp0cnVlLCBjbGFzcyBwYXRoOmNsYXNzZXMuYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBwYXJ0PVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmxhYmVscy5idXR0b25cIj48L2J1dHRvbj5cblxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInBvcHBlclwiIHBhcnQ9XCJwb3BwZXJcIiB0YWJpbmRleD1cIi0xXCIgY2xhc3M9XCJtb25zdGVyLWNvbG9yLXByaW1hcnktMVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJhcnJvd1wiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgcGFydD1cImNvbnRlbnRcIiBjbGFzcz1cImZsZXhcIiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6Y29udGVudFwiPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIGA7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChQb3BwZXJCdXR0b24pO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywgMjAyNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IENvbmZpcm1CdXR0b25TdHlsZVNoZWV0IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBDb25maXJtQnV0dG9uU3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG5cdENvbmZpcm1CdXR0b25TdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIGNvbmZpcm1idXR0b24geyBcbi5ibG9ja3tkaXNwbGF5OmJsb2NrfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uZ3JpZHtkaXNwbGF5OmdyaWR9LmlubGluZS1ncmlke2Rpc3BsYXk6aW5saW5lLWdyaWR9LmZsZXh7ZGlzcGxheTpmbGV4fS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS5oaWRkZW4sLmhpZGUsLm5vbmV7ZGlzcGxheTpub25lfS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3V0bGluZTpub25lO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXh7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9Omhvc3R7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6YmxvY2t9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMSwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0yLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci0we2JvcmRlci1yYWRpdXM6MDtib3JkZXItc3R5bGU6bm9uZTtib3JkZXItd2lkdGg6MH0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMiwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMSwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMiwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMywubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfUBmb250LWZhY2V7Zm9udC1kaXNwbGF5OnN3YXA7Zm9udC1mYW1pbHk6UmFsZXdheTtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDozMDA7c3JjOnVybChkYXRhOmFwcGxpY2F0aW9uL3gtZm9udC13b2ZmMjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxkMDlHTWdBQkFBQUFBRko0QUJJQUFBQUF0M0FBQUZJUUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR29FOEcrNDZISVU4Qm1BL1UxUkJWRVFBaFFnSWdRb0pueFFSQ0FxQnVneUJtbkFMaENJQUFUWUNKQU9JUUFRZ0JZVVVCeUFNZ3h3YmZhUVhhSmVmbU56MFpvbDN2NjBjUGVaTXBHNEhKU2prNXFJSU5nNkNHTWdsWmYvL24zRjBqT0dHRFJBMXJYZUluY0pJVWtOSEduNjlxTVJEVThaYWpqczlVYnNtdG5xbkUzdjN2cWlRbWZSUXBMa0tXNlFad2FsNnM1SVVpSk5VU1VHL093b0RZNkI2NzVPalNqa0RTU011MnBlZHB1OXZKSUxVbEpkNzA3RCtlTEhwallESTRlMXVEbkxqSEh2eHBEWEdNeWR1TExuMXF0MEZDUU95RnNKWkUxK2tKcTNUK0llN0JKRklOT0FOYmk5dlRVemhJN1c0R21VTDBsV2pUL0ZRUWkvbSsreHVQUDAyb21SSGU1cG40RGdmTlpmbitSOXo5Nzl0bUVlTmFxMVJ4UnFIVGpUUE5BMkpGRWdySGRvL250L1cvNXpiZ0dDeGlhNkVrVmlBMkZoWUdJdFJtRTFadlZVdnF0U3RiN012cmQzVzcrdDIrMFhkb1RuenpqWWJwN21TSExBQ2toTVdnQ1RMNnMwV3YwQVVvaEpmRXFFM29wUGQ1OGlrSm5LbG8rM3VhZVNIWUo2ZmNJY1hqZCtyS1VFc2FFbFRxbFVsVlJtL04rZS84aVAwTDVBS296TmxKMy85aUJ3c2hNNnY1SklVSnlrZ1QzZmRyT21xNkxjcytaK3EvWHNBWEZ4RUVpUUlVYUtvc0ZuN2N0VCs3QkJTNWRxRG9sSlh1bmJsN3J0dHpEL3YzODRMZnRKYWdGRkFMWVBFNUE3Z25NclpCaHQ0bFhxc2JaS21iZHEwVHRPbXBtZ05pdWdNMlBZQmM3M01yanE3R0xzb1hIY1RwdDl1UHZGRHo4ZU4zZytzeHJQUUF3NkRURk5wL09aSTlpaW5OaXRaaFJtcFFPQ2tkb0JkQU5qVldsYXZNaXR3RE5KWC9wWUlBa1Z3bk9QL3ZXNXh6b013N1NBRkFLVStaei9rblAvWjlqK09kZnJMOEtlMnZkS2JtcGh1eEpTdUw4RVVBZ2dISWlCSFArNDQ0RUR6djFQVFEzWWtPY09TbFRIbWo2VXNkZm8yTCsvanBZZTdJSFdjUVVnY2drcExGUjFZVFc4Q0dLUVg5YjhHRkFBQUg5dG80UkhRNkdMdkZScmk0RGl3VHpBQURETUtEUHIvZlozVi9xZGdQbWtHektURW1XRVhiN1EzdHRnVFlxbzJuUDYvKzk3WGYrRi85SkhBVnNJSWNBQ0Jad1J5a0dUN2dDUjhWb2hKY1VPT1NEamlTYkFwaE1vem0ySlJwdEJ0VVc2OVhiTkZHM0lWeTJLTG9rNDgvTGZzbTUyN0lhcUJMTXVCYk9GSXdlRlVkMDF2ZUwrWTh4V2h0emNxVG0yQ0lUYzVlTEp3U0k0ZllsTFlGSVZIQXMvL1Q1M040L1l4MWhLR1UrSFNxRXJkcFBQbnM2ZnFxV0pzTmJaYUNsUXRqbE9MVU1zaGNkb0E1VFFzczRKTGM5MFN4Q09NTVVLNEtQOU5zaHB6cFg0dnd4S0NoQ0FTUkVSRS9MS3NXUmxKd05LQWNUblhBaEV5M3IxS0hjWmEvWWRYNTg0MjAvaWFYbXRHaG9DQWlJaUFSMjN2L1A5K0tUQUNBTjVoZGtDM3hVQzRFTHNnZ3ZrUjJrckVqWVNFdjBCS1NtSENoSXZZT0NBSmtLUWd5WU1NMlFvVU16Q28xNkJKODVxQVdDQ2RIZWszQUIwT0RMMUxxMFBnVGUzaFN3MmZoaTRYaFB1ZXVRV0VINnh0SUVRQWJHMk5tNW9WNTRRRlAreUtnTzJENFQ1dC93ejJYVzkyL3JwcXBMVFNJUDhxVjl2THZPZHMwTkxXeVg1MUs2b2ZidlBaRTFwYWY3dzMxOEM5WnRocTdmMzJiZnVMNjRWWkh3NTE0WXNtNWxnZk5iZkc3Vzlsc1VBNEVHejcyM3Z4d0d6cDRmUlIrbVA4THM1QjdLQjJlREpYYzZ4d2xHNjkwMnVnN0F6TEE4TlkyMUIyZEIvUDVxZk9WOHQxb255TDVqWkREZlFJNVJnOEQ5OEZ2SHN2Y2xIdUpzcmR2c0pycGMvVHIvZ3UvRWZaSnpYVXpwV2FEajdNNytVUDgvOEVrQUFWYUFTL0NSK1hzL0pONFlhSWNPMXhIWmNVYU1NYmtscnBLeTdOZlFKS1FjVVJhZ29HbUNXK0hBNkVOdmJnMzNzbDJwSVlSbUU5YklIYjBtQTZrazZsTjVHZHlNTjVFYm1RaHhIS2x3TWdUNThjZ3c3cGRVUno3bmZNY1FmY1UzdkljelZrZHJoWDhYSHE0MDEydEZPZDdrVC9hN3A3bTgzV0E3MUY3YU85TStkanZkZDZqN2Z4bStEMVB1M3ozdWlydm11eXphNTN0cnY5M2xUYjgyUlQyS2FGVlVLTU5QMzZCdlFNQ28wR3NFZGtMOHMrekxnMUV4Yk0wTmdDV0F4Z3pmODJERzFLWE1mYzRyak5jUWZIS3hTQ3VSdUJJNUFvZERERGtHZFY4Q25WVkVtRU1haW40U2EwQVhUSTBSQk5wT1lBTFZxMWFWOXZ4SmlVekhLV0NpczZtcDBCdWt4MDY5R3I3NHNuVk5ic29DbWtWTW9wNStwREdhV3oyc0xEcjJpTnQrb1pPMGIzNllTSWpXY3h2bmxOMHgwVmhsWW9XNFVSalhYS3lMRzNZM3FvTGRFYXpIQUVFb1Z1TWwzRERlRVJWcEcvamVURVIwQ1VaRVUxbW90cUZvaXdKRktVYURGaWFjU2xCSnJFalNRS0ovQ1NGU21TS2sxNjFRbGtkS2V5U1hZenNkWEtpNkk5aWtOSk10Q1VLbE91UXFVcTFWSFQxenE2K2x6ZlFOQUlhNUpwUm92V2FFUDdaeHVObVRqTUxCWXVxM1hVVGdOZFJEZDZVcTlBMzNjYnhBenhERE9OMEl4YU5WYXhkLy9zL2FqeEFFNkpuUGJGR1prdUMzdWFOVThFc0RTTFpWbXhPajFQZDhIUXhYU3BlZGtYYXdiVzZ3Wm84KzZEcml1UUZGdzVJcHZuSmg2L1pnRkpLOTMwYUVNMlhKM3lKQjBESG9waGJxZzB1cmt2TUlnWWx0YkdSUGNka2Q3VmovTlY0cGJBYmErL0U0QmpDZzlwNVplcmkvcGRNMENHLzd0WFpOeFZFKzZiWWF2UW42dW1Xd3kzRlhmNmdnK1huQXRIRGdqa1BOaVVicXBvd3ZEVXZiUmxjajVYWkhZelY4Smk0TmwxdmpzT2hyTWF4T0h4ZUR3ZWp6L1ZJSEpYbjZIMHdoZzZxRk9FVXFRbzBXTEUwb2hMQ1RLSjB5UTVMVTl5UlFwU3BVbGZabkFTQmtXcGxDbFhvVktWNnFpYlRCdE1tUUtZWVdIVlVVZnRHSXQ2Mmxkbk1IM0VwaVUwcVZRcUhiQ0x4T1UrRTQvMVhMZkJFaHpLaGdVY2dVU2hmeHdtRHo5RzVFUkFBSEw3RkhSS1F5cm53dXhRZjVyaEhCRUJSSW9TTFVZc3pVYmM0cnRNZHBsMjZGZ2Q1NXRnUUc4eC9mQVoySnpJdkdibWxyY1hBbTN3WEthN0VsZlBjUzJ0eGZxK2VnZmlIR29ETXh5QlJLSHZ5M1NKMzBRNlY4KzZtZGZac2FGVjNlT1VLc1dNeW5raHlMMXU0VkkwTDFTSkxJeFh5WXpwTHlOcWlXejBYVHBrYVR5bjFaRHRpOTBtWTAydjB0VXF0elNDbCtxcks3ckl1djF2OVJEMHNneHFHYkpvR0dmRWtsRTFZenIyOE8xbDJLZXdYOU40QURhTjFiN0wwSWFSVFhPdXk5eWl1ODJwT3dIUUJDK3BsZENyT21LME1nL3IxdlJZRW0zREJFY2dVZWdtVXgwM0c0K3dpdFFnT2ZFUkVDVlpVWTNtNHRtRUl2d1VLVXEwR0xFMDRsSUNUdUkweVRxdEZjbEVDbEtsU2E4NldFWjNKSnZzRldpN0l4S0pPQndPaDhQaGNFVHJSTjN0RHBsTUpwTmhSSWFpcUFpR1lSZ21jYmtzeTROb3ovcm9mUUw3S2NhbE5EMEZPVzNSR1p1T0JSMnhtVk14a1Vna0RsMFg3dUppdXRTOGJOR2FFK3YvWlFPd3FlODZHSUllRXNDdW92V1lmQ3EydHZwTU9CTjdNek82OEdXWExodG1nVzJmZmVIcDFNdTdxd1g1TkR3VGtwQ1NjZWZCa3hkdmZpbkFSSVJJVWFMRmlLVVJseElBaVpFMHJWcTY1SW9VU1pVbXZlcVVNcnBzL3oxWldFWjVZQmdHQUFBQUFBQ0EwV1pzZDFDcCtIdytuMi9jT2xrNHJEcFNsMUszSHIzNmpnMUNUdHd6T2NOdUNYWU5naURZaG90SDFvZ09MUlN1eDhuaWw0cjJpWWF2MG5vcnpYdloyblpqWkxmYUtEK1ZSZ0gvZmdObXBrRmJoZ2lHaVVhY0dmWE5tSzQ5RlB2WTl0dmJjVG03NSszZmRhbVc2WVN0d2tkemFDSFpjdnEwQ1M0aVU1Wm1OeExYR0JlL3JRb0hqTVAxL1FFR1ZNWkZKZ2JEREovNVQzZXlCY3ZHUFNxVGltSmNDK1lRVWpxR3YybkM3cTNuQjBET3F2MkczVnZsSWhLSVc4TVJTQlM2eVpUaU5HRlgrUkdDREhzOFBZSWRUamRBVUF5dlFrd1NDcHBoTmQyMG1wdU1qUVhLQlFrV0lqUXBtSlJVS1l4S1hjTERjNmtJZkhhVEthT01TYzRNc1ZSWVEwZXpVNkZMcFZ1UDN0TEh1d3ByWWZ0aGl3aUhGQVdrU3BtV1J0KzZuSjZVMThDdXlKODVqMngwYjBkN045cGlicTBsYjROblUrcE83dEVVTGloZFVPMmhycHRnWVhDc3hCRkEzbFEybm1GYzNGYlJqR0JnQ2Q2QlVIN3FuWEJiYWNqc0s5OVJmSURNQUZrQnNvTytuWmc4UDBCQmdNSUF0UUVhbjlXUUVzOU1BSE5HODU1NHdhK0FybnF2VFRqcEdTN2UvaWxQbWpBUlBtbnN4V2tkQUFSeU9MOXlBaHlteDdTR0tsazdHaDQ4dkR2TmZkZytJVEJacEQ5Z3pnTUlCd3dCazV0bWtFWElxcU1NYUVUZy9IVWUyNm9MVFRwNHc0ZzlVa1o1YmdieEVIdEN5VExZUEhtSlVxM3VKcHF6dlNOY3VtYkJkWFlRc2t1MUM5Mk44alR2REZFVTBydjgxN2dtcXNHalBmUnVOanZlclREbUhDRTRxK3Fiek9qdUlJdlJhRGh6WjEvVkpVcGhoaU9RS0hRd3NaNVRqZ3VBQjhDdUtyK1lJTUtld0lvTU81eHg5ZTRBRUJURFNZcG0yT1R5OG9Jb3lZb2FqZWpVUWI4SndEL1hCNWlTc3dVaWdoQXNSR2hTMENnekp6WE1DVFUxWEVaSGFUQVhUQ1FTaWNYYlk0VkNvUmdMRXhzdGxkQ3R4WjFhVW5sdXRHaHRPUXQxOC9SVWRWcGtEQnZiUzRuRW9ORm9OQnFORmlkWG4wV0pMSkNyVThDVWJxcU1oWkdwbStGOEViQklVYUxGaUtVUmx4S0VFaVZWTFZOeVJncFNwVW12dWdBWmhBR2x5cFNyVUtsS3RicG1BNndyUUxjZXZmcWFFN0RUV3M2WUhtMEUyZGNsaVdXc1dFM25tUzdHNWI2dUdWblBuTnV5eVdiSHd4RGpwV2s2TStqMjBlWU1MUS8wM1ZNbUttNFpuZ2xKU01tNDgrREppemUvS3JkQ2tWTWxLc3lJbW1lWmYwR1F5d0pCRUZ4Qy9yZ2dDSUlnQ0lJejkwYkRFd01UajhmakFVQXhkUzZWc0RjczFnOHdmWUNYck5kOThTSDhnYWprNXZ1VVBxZzRYRFA5Sm03b0dXdkdYeFNkRUxMZnJzRVNFc21XWFRjTTNjTHRIRlNHYlNIQkFqY0NpVUlYSnFIbk1sT0xSQkxhc25VSzJTdXgxenFuTUIvWk1HT3gvelB1OG9oREFEQUFPQUFDQUFtQUFrQURZSGdsQ2tDdUxWQWlTSUtGQ1Awa2hXTktQRlV3YmR5TCtzREJ5ZWdrYUoyV0VNdFdyRTYvNHZwVzdHNmU0bUR3MEJmeFpoRnQ5R3ZmaFBFQW15ZDRjTXRVcXNQbDRheTdHdWFrNXQwTjUyT093SmFCZ1NOSHNrMk5oN3FFV1pZVnE4ZStrc3hqajNFS1NYZzhMTmlsUXFGUXpFMWZ2NXR2cFFRRnRGSW15THRpdlRlV2tRQ2s1WlJlMlFpSjJackxZRFY4Nk1CWVdYNXhBUHVuazF5bnRaMng2YWJOcmlYQXNoV3JjZmtVNjN5L2ovbStnbnpOOEkzWXR4emZDZU9pQVBpN1loMXdCQktGenM3MldybGlmV2IzbitzT21rU2l6WEhUWHBtdkFuT2dlYSs3UzhGMUVIUDhuVTRJbkZZNFE1bVdwM0JBTGxlc2E3Qno0RnVPYkU0RVhSbml5azhodENPaWs4dmxjc1dZSUtyNC9jSE0zWFhJY2N5T0RzQlhIOVIzTklCalVzZDFmaWRqMGlpbkg1cmlaZlVPRFRpRlF1bHplYXg3K2pIWlZ5eGYzOFUzeExkcitVN3U0M0g1OUtlZ0s5NUp2d3Z5cW4zSWd4THlVRzJZNFFna0N2MUJURCtJdkNNUE1nMGxWWVJCblNJUWthSkVpeEZMSXk0bENDVDJobTBzRUFnRUpURHJxYjRnSjJKWW96U1VLVmVoVXBYcWJOclorWmhlamIrNXJIckd6Y2NMUWhKU011NDhlUExpemEvS3pRbk1DRUt3RUtGSllZR3lOeUsxbHRKVS9KNldtRnhVcUxzSW5YU3MzNHM0QUpuVE5QOUpWODFaVzA4YndveHdqTW9HZysxZ1BQeHdBTWVaa0JFRStWc3Vwc3hvOWNXUzVpdm5hU1VwRkpRMVRFYnRleUtqTUFMbFNRaDZSSzNnQ0NRSzNlUVU0amJFQzd1cS9BeUNESHVDQlFUc2NNYlZ1d01VQkJURFE5eVFGTTJ3eVJueUVTeEtzcUpHVTNSaUVEUFhMOURaNUY0SXBBdVNZQ0ZDazhJR1pWTUZDZE9rTHVFMUlLVkZsR2d4WW1uRU5lTkJDVlNKa25KRWorU01GRW1WSnIzcW1ES0l6R2xrU2JiZDlITGsxZngrM2UrVkNwbUtvaGdseVVCVnFreTVDcFdxVktjYVVHM1VsZnBva01iYXhOQXNMVnExYVU5R0lsT2Z2SmxNcHBqSlpESmJSanRhTldrL3J6V29NSUlhTldlc2F1dDAzeU1PMlB4SUk2TUJFOTFxZm9EeXhDU3dnQ09RS0hTVDZRVnVEaDVoRlhscHRyZ01qeUJLc3FJYUwxN0djZGtBNThBOGdDWS8zMlBMYndrbkNRQkFObXRDdzZOb0JyVklxemJ0T1VzV1U0MDVsQ3daMXREeDVwMW83VEVkSkJnU0dMNzc3QkVqbzk0YW85b2p0SzlidjUvaEFNOFJhNDZTamdtZGVMek5ETWhpVUhudTdRbUREQlorSVVGaVRjSm9IY2xJa1NwTittWkdjVGNINUljQnBjcVVSMFdvVktVNjZxWjN1c2VnRjNtbitiRmxyaXE5Qm1tblY3UGI3RzBSdENhc093S1FaRWdoNDg2REp5L2UvSjZKcnoycnZ6MTE4UGs4UHAvUDV5LzlOUEppcjlnSnd5bEtyVXk1Q3BXcVZFZmRWRk50aHJXZ1ZadjJaSVNZZXJlQm9KZEhLZWFlZzBKN1VCZXFSOFNPMWFuM3BGQU1LTHdJdFZTSisrRm1uaUhFc0ZFUVcrcGVrb001SHFmNTBseEJMTHY5ekNNQVpUUFExN245WDVrSEZYN2M2UTJKdmIrS1NJc1NMVVlzamJobXZKRUVXeExISkRYTVNLNUlrVlJwMHF1T0lLT0x6R2xrU2JiZDlITGt5VmVnTUJXNVVLd2tHV3dwVmFaY2hVcFZxcU9tajlwNXFsTlQzLy8xeHNpQVJDS1JTQUJBQlFEQWdFQWdFRjRrY0hQQTR5L2YybTdZR281QW90Q1ZTU0lhVGVWR0ZBQWx4MVJJWlJ2R2M1ajBKSWVvY3h6enBLdGNheWN4STFoU3lWKzYxL0dDd3V6QU1mUU13NkxUS2Q4b3NGQWNyTlZEUEllRnM2TEhGeGxOeXRpZURqYjhHT1FRYmhTSXRqMDJnSWc4T1ZiVWZnRi9HdGthQ3NNTVJ5QlI2RDU1bWNQakxiWWtJOEowd0p3WGYvTTFubzlkalRWZFdocGlENE1qa0NqMEdZWTZrWTFONVE0RUtnVWhXSWpRcE5DamJLb1NDTk9pWG9aYlZGOS96c0xkR1lHZ1ZiTXp3Snd6OCttcVUyc2pZMUJyY2psM2ZHL3NmejZxN29nMlkzNHZmcGRVaGUvQ1oySEg4eUFBL3hROEQzbXlBSUROQVZzQ0FKYlpueGkyY0g1czJjUkp3VmFPbTJXV3N0UEdaeFlaQTFLSVI3bXQzQXpBbXRrRlVJNWlsRGNBbTJRd29qRlhCNnIzSXNCeVZxNWwrdE5hYmN0ckYrUXJBUStsa2lVV3ppSEdLV2M1dTFGVWRNS01obnhpeG5BVTRsa2FBbm8vbmh1U2NFbkhyUTZRRWRvUjJGSVE0R0ZuWUhrZkJnSlR3Tmw0MnJRSDdkVjZJQkt4NEdESVBUU1BBdFlIY3VhL1V6ZVAxZXBaSk5hdE9BU3FGRVFrWUNXU2pLb21jdko0US9sWW1SNmJXaUVXV1ZJRkFOYUlUT1Z3MlpWSHpyNU16Qy8waS9EMWt3RVdWRC96VDliNkRHNjMyaUs0VXFDN1RQMlVOYm5rRVk4NjRYWWlLbFcrQlMzRlVLeEhEUVlvKzhCOXl6MXc0aDA3QmE0UWtrekwwTEdKR0lyclorY05YdUIzUHc2Y2VkcEFNVTZHelJRcURXN250QitjV2lzRnlvM1dDbVFqTDBNbVhvQnFOV1JGSVpJN2dEWGh0U2N0OExwQmZrSHNSUTZYcFZmSVJ2WkJVOHA4NUY0aEg4RUtueG1FWW11K0s2Y1lZM2dRZTErL1R6SkFJUkYxY0t2Tm1uMlEwTThhT1dzWGpUOWp2QkNyNTIxeHF0V1ZJNmFwTHBlaEtjeFp1VzlCV0xKM1FHcWY5SlRpdXZ2VTB3ZGdody84SUJSSVgxVnVOUXlzQnFTdFZOUFhaRHRMK05pdmN3aTFQZ0QvNU8wb3ltMkorNzhvbjByeGdBOU9DbGEwZ04wSkVQSFkvWVA0bmhJYXdiRUoySGxVblI5RGJ6ZldNUEF2eGtydEExNHg2anJBbVlVY2dSZlJsWm5uWXhzMnkrb3dMRHdrUzJWazNkZmpBQVVWSUpld0QwNnR6K0F1dzZwSXF4VGw0ZG1qb0dsWVFYRE1iMzFGSlBzKzY3ajlSTmdzSFlnd3dPY1l0dWZLNlZoQ0xNdWM0TkZUYnY5cEVRakZOak5yMExXQUpCM1hHSG00eDduQlJmWG1IUWhRMGJ6cW1PdFZUbnllUzZ4MUhiQy9hcmovWGUvN3FNT2w3TTBlVW5EUGdoeWlzRjhxSW9GYmhmRWdxeUQ0bzNvMks1UkxyTUpZQ2FDNWdySHd1cEROc1ZvWEZJMys5V1lQYTFsd3ZPcDkxZnZhbkdob21KaXA5N3VwTkhtT0greWIxK2hMSXBkZHIyMVJpQTEzSmliNzlrNnBUQjNkRkFvNzE0cFExeVJaYlRYTXlkQTdtUUU5UkZHaEwvT3hySGpkUm5vMFhkZjl5RWUwblhGZk9lcnpZK0RPM2ZpQldCRk1BbXFGYk9lZ2tBcVhUVm81ZlM2NnlPSVZsTENTZGNwNjh1ZTR5SmVsaFVQdFU2Vm0yam5OQVBxd1dhTm5udjF3N0pQNnhRWmF3U0lQbE9GTUVVR3V6UENCYjJkSlV5Z1k2UTl3cjZKVWpKcjZOWmNiRVl3TC9jeFpmZWM4MkxPc01LNDl4WDYyOFA4TnEzVERFY0lBUFp3d2hMdzU4aFBLazVKU29EQkpnaVRMRVN0UEE1MG03U3FZbU5TeDZGTnYwaVNqVTA0em1UYk5ZczRDcXpmSmZsbUMvWVpKZ05Cd0RBYUJpOGVCSFQ1SEFrNElRa0t1UkVSMmNlSENqU3RYWWhKZU1ONjhFZno0d2Zqekp4RWdnSlNjbkV5Z1VBd2xKWGRoMUp5RUMrY2hnZ1lwVGh4S3ZIaDJFaVJ5bGlTSnAyVHBLRG82VzJUSXNGV21URjZ5NUVEeTVFTUtGUEJXcUJCZmtSSUNCbFZvMWFwUmF0U3lVNmZPVnZYcStXalF3RmVUSm42YXRlTXdNZkZuMGNGZXAwNEJ1blRab2xzM3BFY1B2bDY5a0Q1OStDWk4ydWFVVTRST080MXIyalN1T2ZOMldyQkE2RTB5Wk1rTTRidzVod3NXbkM1YWNyaGt4ZW15Tlpzck50eXUydks0WnNkdHpaN0hPc3dHRXd1aGtSaU03VGc0RUM0ZW5CMW5pSkFRYm91ZEVCR1JIVnlJSVJMZWNENThJWDc4NFB6NVF3SUUyRWxPVHFRUlhIQVExNlU0aEM3Z2dDRUFnMFlBQndvS0RydUVsNitHcWJGTlBMV0dBeERBMisybVVTTk9pQmc3dDBTa1MzMW94ZU1ranJGbjJJSWpKempNU1VoT3Vra29FSlNpanlHZ3gySWEvOVpjMDNiK244K2dxa2dTMjhzNzU2Y2pVcDN6d1RyK1JQZTZTZXJsVWRUNWFldWdlL0FIZ0J6OUY0aW53RThxK0g0T3ZJVzM5RmJlV3J5L0JxTXZ2L0tTdXBpOUhrclZlZkc1WjRJYXZmanlXeStwNHNWWHloZVZUNW54SXEvemJ2YmpvcVhYMVplMGhqMEFZRk1RWnMyQmtBZ0ZJR0Z3eEhZTkI5WGRhbXdyM3M3L0NJZmdZWmlmaFQ5Z2ExMHl3dHpkWlkvaGNuZVRZYS9raXo4S0NCb3JoRlo0ZzFsWEJHR1dLQTc1MkVsSWQ5YUxLNFNGTmRWMzI5Ykc3UklJS1U0R0V2aGpyOExVMXdqQTIzczlCbWdiR2pROTdvVUt3cWlPdnlQWkVSSUNLSXpBNldUcFdRd1Y2b0psZTNWVGxqNVR5UEtPam00TmJ2T2cvVDlHVmZ4TkE5aEZoUURTdy9mUmpwQ0YyVzhPQTY4aUN5VCtmMkgvREc4QzZlK20xeC9JSTg3OU5BMzVyd0FBNjhRV0FZZ2xUVEFzWUFDRXFlTis2bXkzd1lvQTRGK2pOb1djTlM4T2lhalFRUDd5TUZhd0lqUVJnU1VNTEkwUTduMVJBWDZSRjhZS0lJSlVvWjN5Z0MrUTJRb3NDa3RPNWx1TUhHVWFFM2VMZThWajBocXBXQXBJRWFsT2FwRzZyZFcrN3FSQUZjQ2VZaWtBNEJQVHNMaC93VVdmT2J4OVI2VThxZkE0U0tuNWc3WUNYQVNRQ1FCWU4za0EvLzFOMWYvazZTLzBZLzFvQnI3NEdYeHgrMk5mMHUrLzdndnFDL0x6ejBFZjlPUkJxam4xUGdMb1pROGIrMVowYzhnTi9sLzJEV2ZObWZLcFgxMDM3ejJMeG4zbHRCWFRiRTVaOElQdmZHL0dKb1NEeTQ2QU14WTJEZ0VoRVRFSkdTVU1Ub1dncGtjeE1ESjcyNFIzL2VIMThTQ0NTNElreVhReVpNcVNyMENoSXNVTWF0U3AxNkJKTXlNVE00dE9iL25OVzM3eXZ2LzUyT2MrOFlYZi9Uc3UzTExNZVQ5YmRYdDJjTmV2WHZMeWFQakZEVStOZ1JjTnVPQjFyM25ETEJJR1J5TlFHRHhPeWptb1ZJT0xoNitVR0F3QWtvUDh3Sk9PaGhiSkJOVXZocFVOTFpxRFU2SjBLVktseWJPYlhnNnRFaFZLbGFsUzdsdVYyclZvMWNhcVZnZHZuYU1RQ2N1V1hISFY1Y2k0V1VRbVVtVTBNTUFtdGdRc0JTenRGM1JiQkJld0ZJQXc1bDQxaWpjYkJtUXA2eTNBRU50ODJkQWt3anhuejdQNzhWVVVEQi9WbXVBZCt4NTZjUCsrdlh2R1JrZUdoMVlzWDdaMHllakk4T0tiRnkxY01EUTRNSC9lM0RteisvdDZlN3E3T2p2YTIzS3RMZGxNT3BWc2JtcmNnV0EwN1BjZWZlVGhoN3FkZHF2WnVQK3VkRzIxbHNUQVArZno2ZHIxbW9wKzBMSjFURWdnUzZDdXZDNW95QWl1YjAxM1lQTUxiWXpUYk9EQVRYNVlFaVl5Y3BVNUlWY1BmSkRsSitvT3Vkc3ZMT1V5Q0hBMGVwU2hSZDRkdUg0S2dFcE1FT1daR2I1RUZjTWpWSmtCVUJVQlJaa0EyWktOUnNBTjErMTB4Szh0aTVMdnU5Q1FPY1p3eG9idFZKWVNOWVNGSTMvZXp3aUxKZFFFbFZBVnFiRmZWajdHRllLVXdpTDJNOWNTZGdObThMSGNzQUlsdjN0K3BUemlrZ2pTOExobnBSQTR5RHBiTzdCY2VraExJUnR5cnNvM2hPRmJpVTI5RmdtS1k1SjgyeFJkOHF5bHNGV2tFSC9iYW44bG5EdjNaeTVlNERWR2laM09RUkRCRDQ2NFhuV1Rtb0ZEUjUydVhKa3psZnlDUk4wakZVTGVxWlZMTlFFWG1WRWxEb3RaTk9maXpRNFJMYmkwSzNWZlFpdU9LT0VTTUZUdjEzVHZpNkNWeVU3V3hNbUtXM1VidERtbkkxN3lYM0hjbndqZ29mb1U0bWFTVWxMbklQb2Qwdzh5djY2b1dJTWRTaUdQVXYydGdtQTRFZGExMEZybnRRbS9lbHRoZnd1aEFIV0tzK0pzLzN6cXRUeFNmY1pkV3ZNQmtFa28yT1dkNWg4VnhrbDF3UTB0V3FmWHhqbmJYVHdEdzVvbVdaNXFkdkhJRGJLWXh5Zzk3MHBKdnpBejhuMzVPTFJrZlNiZERUcFpnTk05bFFKbTJpVTMvSDBuZ3h2SDI5ZEFlWTJRRFF2eFo0elNocFFiaEFqQm13VmJJN0Y3SXZKN2tpTjFGSkdXTnVBbjB6TUV5UmwwaDJOMTdKQ0tpZ0NQS2Z5OW5ITk90enduSXp3bWd1dlpaL1RNQmNRbEhBZnc1RXhIRHNYR3VGdVNlbzN5Q0puWlJiM1c3VWYzYU5aNzNFWUs3a09TbFZKc3dZWXlKQ3RjR00xR3JqOThjbkhoa0ZtdTdQZE93bjFXelIwaHhUblJVOGFCSm14cUg5d1FJSWMvZlVXQkhqOHFySVNqYk8yaFBXN2xSSWFvREpwS3A2V3JWSGIwb2w1TG5LTHlGajJUSGdteTk2QXBaNi9scTFpTlBZOHZ3REt6NWdzK0UvQ1pJQ1B3Y2FjcWNuUmlyMVJ6UHNuQ2dRVmFnNVVNcktHSjZ5NCt5UFlaSTd5aktUSktTVU40b1VUN0dUZGl4TzBEa2ZjVFVkbWthQnpxUGJpNVNpS2ZKYUpEREtZMVpsMTJ1MVJBT2t3U3A3ekhuNlFrYWlwTkxyNkUwcEhnbUlRME8zeEJuV1N5WTIwY3VIMnpXWXhOUTN3Mm1Gd1A4eGs1Y0tlRHNkVWFrS2xMSE5KRzhzNXh6eWhOdHRFQmlSRE5Rc2NDbDJ2MlpBbjFDaXR4TUVqTE13RzlwMWREdGRxaXdKVE5DZkxTcVJTMEF0VnVxUVBJc1FDUlpJbTh4NjZJTndwVENNSkMydllIck5NV013NVR4SjRWaTRIZ1JSb2tpZ0ZLUFRwbjQ1SllneHFoMGJvcWd1SFA2SWdrUVRLVlBwOUJtQ3R5U09KZDZieUUwbFExZG5rdGxjaUdVbXBRTzl0Qm42QUJSQnZZYmgvb1hhcG5DQzc1R0dJeGw4VytaWk9qb0hVaHU3TkMyNVVKb0xkb3ZDMVZvQWkyRkFYcCtNNE4xRHlBelVVamVTdjV3RzdaYmY5RWNUNmpNYnNKMUJwWS9KdG9sN04wanBRaGdMaGNZZlllVVoyQlhxR1VIODVROFJSdHoyZlFkbnpubGxCMThkQ0RNM0JNMFJWbUxYR1BGVlJqRWRRaExQOURpSnZwTnpvVUF2ZWc5WkFMZklqVFZiNGV0NXZQTTlBVVZDMTFKWUJNeUVwSm9MYXdIVnMzQTBDTkQwY2cyL3huWEpOK0lKVzRBS2YxR1NVYTNWQmN1TXJYbFVZVHVnWm9PelBmV0tSdWM4cVlNbWxPTUt3bDd4MGtLdHN3bGYyWlJzcmoxaGcyeXpxQmFQbEFhTWxrUkM3ekc0V2FIYzhBQnJseTBtRFZnUGhLZzYwS0lHc2xuMUZGUUdvQkhZMVRHdjlLZ0pwM1ZvbzNPQkl1QTQ4NW9yaDBjME5HMkxYNnlTQTlzR2NCYW4yUWhvYmduaUo2RmV0dUtTSFhMcDVlY04xRmkxbzNNZ01tS2R3MElyRmhqODFLaVVMRHZSSkRJNUtTVWxLQUZJS3hWekN1Z1V4WHBHZ1pmQWdQRUU5ME5lekt6cHh2SGJQVFZxMmRPYXE4NDJFTjl1eVR6SzJGWXQrV2RRWkRlNFViZUIxOHN3dmxRVUNpRnJiTCt5QzdXcWx6Wk9VYjJWcFlRWnUxbVBVa1QyWHk3MjZOajBncFVtb0VXSWVyL0ZKa2drZ2JBQUw0RGgvMGxvNUpEQk1DN2tnMER0elBvZ0YwSzdMV0xYUjA2UEVOMG9vSEgxbHVlSmtRRFBJV1U2TVpPNkxhMnNndW5GNTA4QzJsWUdaUGxjeDJYSjF0dVhGYnJlNTFDSVVXU2hiNGZvajZMZ0djbWxnK1VDaVNpeGNIOXJKNlRUSmRBQzI0QXBHYnNhNWhhL05JcitoOUllYVhJQ2ladThDNEpMeldUN2dLWVQ3NjM5K0FBakxscHBkWEFMYm10L3pjZFo4bmZJL3N3WE5iWmR3OW1SMVNPN0lmZ1pLQy80TUN3cEN3NXNEMWo0MHdJdWJkdHBCTmNzVkhtdVVQdmhha3N4TTlGOEJMa3NRMzZNL0JPSkFRdDhUQkJTVWJTb2p3SzMyRVliZVFyenVZR2E5bldGaE9LVGxRQnc5Q0ZqOWpURzRKM05nRHZldUFnMVVPaGI0S0FwOXBIZ2FNSktiMFNsb0w3RG9kSHNManB0WGhrdk9hYW9lMENIakRVNnRrS0NCNDJnWkp6UkRjUG8yeE5lSnJaRHhjWGVWM1YyOEp3azBISmhVMDhMdEdEUU1xS09QM1RHb0FJNlluYkVrUndEUmszTzRraTYxSW5xVDgxMnhLYmlpb0JNR0U1RExwTUtyaU9wb3ZGTHRiSWU5eHFNcS9TVFlzeTBaUUY1eWFaYXZwL2ErSDd1YkRucFNzaUJ3SkZhZ0JNaTd3VldjN1VIcWxtdzNmY0x2dm1uVlJTRllSUUVuZ3huSHZ1eDhRMUNWN0FJQXVBSURkQUgxQStMd2crZ0hnUDRDOVFMZ0JBTmFldk9Ud29xTUhVb05nbVZtRXlESTdMcnhMSERYWEVrN1pBTUk5ek9iR3lDR0RiazZHNVVnblRwUGMzK2paUU1qWUdVeXVOWGcrTS9UaWJJMmNCeGdKd2tiMGJnaTRmWmY1QUJDV1Q3QkRTTThZZVMvSjhubzRJc3hRWWs1MXdaS200NENqdzZwVGZRalhqVUx2OWVqUE9WS0ozUGhTMmlJZnVsQUs2c01MdXpZNU9uL2JIemhaRE4yR2FQaDQ2NlpMVVVaRW1XSjNYUkcrOEErdjVZT09sRklNUkZCNCtMald5dVN1U09lcDNxclBXck5Cb1J2R0RXYmdxY3U5NzE1a1h6MkJFTUZVWlhmaHZMOVVEL091bTY0d3o4MUlrc1NYdlp1SU9xY1lSQ3B0K0RVaWdzdUUzUTdidmc4ejlxRXpmOG1mZUhGbjU1c0pSVXVMWXhRM2ZNSFp1Tzd2aGs4TTA5MVF4TEJaMVNlMmlRTlYwZGpFdUNGVGJueWplYXFOV3REVU9icUplSnNCdW5JUTdQS1dxdkhQUEZ4RVhUTUtSamZBRGMrTTliNzVXaXRLZU4yVFR3UE1iMFBBOXEyRlVVR1NhTGhzbGpEQVVBTU1MZEtZUUhWamN3cGdZS293YVVRQzE2cnJoeEJEUlUvYVpnYkVvVXMrQTEwVHhrc25rU0xqWmF5eVJhK1BoS0tOakJUOExvU3FycUJHaXFHU1JpRjVUQkM3aDUzQ2lvZUY0V0ZNVjF6SzVqRFBvYmpIZ1A1YTlzQkREMWlPODRXY0w5NENvNUVkY0lrSGxOZkp0Zm1tQUV0K0FwMUphdHc3djVMeGJTVTNtZUtDV3MxM2NvZFFVWWxKVnYrOHRtdXJBR29FMW5wTWhaZXhUTG9QTDBrZzdVZXkyTUxFdXZNMHk0NUtsd0dsV3hBaG5IZk5qWmFXTmNNNnJKYk1pbWkwK3N6djlCQnFPdXRmUFZFakhqSWJOZDVwYWFObWJIM0ZMSnZpMXRsT3hOc290ZGlPd1Q5bmVQTzcrZVNHRkZUejBUYWQ5WWRtQS9wSjhxRmE1Z3NmYW9pc3c2MUFudDhPdmorMjQyV0szUlZyK2N5T0NHVFhUWjdacTN5SEpRTFIrcWZ1U2JnUGw0VW9Vbm5GTXFsdUg5QVA4UmlPMWthbHN4ZWVIWG5rdU5JZTkrNjA2emloMXM4T0s4NmVrTXI2cXNCczhydVVxNnhGSDBnVWZWc09ZYW4zV1N0QVJmN0Y1MHY2d2R1S2IwWXYyYnNwMnZDd1NxRmFNQXJySUx2WVYwcXgvVHM2Y0Q5L1Iwdm1iN3ErVWo0UUpESGZMd3FhMUwyWVNhS2U2b2NXWFQ2RWgrVnd1YVJ5SHNwTHRpVU1lZnBKUlVZSXZkT3A1WUYrL01oZ0JCMnBmd0dqa0tjY2Yrd1NJK0JWek9YTEdnMWN4VzREVmY5SE9hYUhpU3MwL1IzZGZTaThoZEZ4WWg3TXdsRi9qeWh3RGFnRi9DZTJ6MGh3d0Y0WDVKYkRzRkp1QXdNME5xdGpzR01EQ1Y2R0sxOWhqVUFEYlJON3lHZGhPaDh1d0hMMzBHenF5bG1jdjdhSWc3UW9selBuTHdyYmpjTnYzNlhLYUZaejRpOFBWSGhlUTNvUXBhcUxKREkzU0RrRVhMSE1DSlRaYVBLeWZRVFVXcjg2cUhjVzZaVGU1b003dmF0TkRYa0ZsY2tVUDZHU1VRaFZXaXRGMlc3MTlmUE9aSGU3ZzhXcjdGbTI0eThoSGtUbVJnVjd2alBSWFBxNGREODBhMGFaZzQzZkJWNXRXdnZJNkFCWU9nZkd1dGk4aS9rcXhRdUxFR29HMW81ZlRtbTZuc1dacmRsdUUyYnIwTGdrZFNoN0YxTVM1cEQwRFpEdzhVaXRXS0ZtdXN4MkgyMXhEL2JtN3h4czhPSDFsaVlKU1Z3NFl1andoeFMzMEJ3MjVCN2FDYkd0Z0haVUxJbTZ1ZWF0eGV5cHJWa3ErbEZuQm1SVkFkMm9VVDVDVjZQTGtYWDRrYUtiZGdUbUZoamVzby9LakM4SW1sZ2JMeXJHSzM4UzdKanF0MUU1YUNNaVhvd2ErVVBneTNiSjU2ZG9ISWd4UFBnYndKcmRXdGxPR0o3TUNOKzA1aTZWN1VtamlqaFNtSS9lb2RYakkyV3hRSGphbWZWT1NQeW5XRHQ1OGJveTh5dkxONHE5M0pocEw1cFdCblJHNmxhYTFwRVY1bS91SUFwUk43UlhuVGpJcm1uQTJzSGtacEdjRzZ5czZaZVdYejZkOG5UVGZ0WmhRT2JhQlhtTFZNVnFaa2dOREZnRGk2WGxUWW05Y1UyV1lqcHpTU0ZBU0J0cXFzU29saVVQS1VmYkFEMStwaWJXWjV5YVl6aS9mbVdzSFJYaWNqLzlOcDBaemZpWnRKMzExMWVkZ2ZBdFg4VyttbXYyNTFkZkV3RkF0cUc4dHoyeUR6TGlEdHZhYmVyVytKcU5iaEN4dFNnck02cTRzbFRKUzQxeGFDcEJHaHBwRHJyaVFRV1Y3TmdkajRGNmhTVWptb0xTQnN0WlRkdmRmaEFZbnJCalVpem0rZ3dWdTh6cWhzV2IzeC9GKzVYRVVEVVRRWFFDeHdkSHh5NXZpNllIbnMyOFVpSmgwbjd4SVdDMzVsMnNHVlFxU0xIZjFDTjdnQ1FLa2VHZ1I4YVRXcVcvQmxmNUtDQVFnVG11TEN4TXpSampMSXNSNFFnM1ZqbzYrYXZYdG1zQ0pvWk1Pa2NiekYxS09IR0Q3Wkd5a2xjV014c2VpRHNTbVV3Q1NSYnhNK09NVllneEtnd3ZSNVpOTUNSNDFPUXVIc3p1UTErYTcrdWYzZ01lUDNHUkdYSE0wR09kYkdoZmY3eklhUkVCK094dlRoMDk4QnMzZi9EQVkzcG9EeXJRVXU2VEVIeVVoNWR0Y2ljK09DaFFGamVGK1JEejR0dnFkRDlGdE9DaUEya2ZJSHZlazJQTFJmdEFPOGR4WXU0ZTBMaXo3V0J5eSt3RHhYNlpHdXJaYWJydXpHeldvTyttQytaRmtuR3NLVHVMek5IQ0pDNUg4Z1V6RnM1M1dyQlZNZ0szSWxPQkZML0JFUVdtOWpUbWNSOFVFazBMSi9RRU1EZmdQSFRaQ3FxV0Yvb0tlZXY0VVI0cUdWVVM1enhCME5meXJRZG5UOHdmZEVhTHRwY2ozSmg0RmEvR1Q2WWM1WnVBaTJEanV3YytJYituT0k3dzZNYXFPK0N2S2EwanphZWY0RHFRb2VVSUFrZGttNXU1blBPN1ptd1R6QUE1VlVmeG91UzJHRkFJTUFoQTFTK2ZZWVZJcFBjWGlGTEZDam1nZU9Fd0FVZERJSHc2MFBncEpORDJPRlJGYndJTUVheGhwS1dXNzJYN2xtdzhPWVdPRncyZFpzbjJkTnY4SnArZkZJNFpobVQ5d1pjWmE5Z1N1QUJUcnU4aHc1azBtZUNqN1NzZTlkS2dnSlBSUmdVc2VVVkhhayt4eDhNUTFGR0RoTXFhdWxtblBMbkF0RFlBQ1M5T1c2SmV4ZTFGKzR3OXZKa3o1VXgrcWdXODVqa3h3enc1d1dBVzVtSFp5ZnpPUmJOTXpDT2M1amRWcGhac1Vwc2UrcEdnUnB4bVo0K1o4OWk5cE8zeHhoZzVSaCsvNGJVQ2pFcGg2ME9QMS9HV1pyV29yaTdhWld1UWkrTFpKd1lwMGJOTWVmWmh3eDQ5OWluNkZKY0FLNERtQUdUSWlGV0p4RFR6d2xIZnpmemF2UVlkNHlZTXlEU1lQQ0xObUpDenVGRmJwbzVFdWlpUVpKbVFsckl6a0V4QkdtS3AyTFRqaWtpUHNLZlB2RjJKZEQ0djFFL3MyZTI2c3hnQ3J1Q0I2TXlaTGJzSVAyVGQ5dW5NN3Jzc3RQMkg2RkJnVWxPQjYwQy96WTRxM1F5MHBybmNBUzdKWk04MTJ5WWRKWkw0NGdJRE51NDYyWVJhVHp5NUhLcTdManhqRk9jYnhhWFpwQjByYlpiVVBUT2IvN3F4a2ZUUE9nWi9kS0tSZ0d6N2JmSXNvUTBEeHYzejk4M0xONFlvdm9hYm1OWjJuak9LSG5aOXNSZFRHakpxeElPWU1pZG5Kd1JaRHBrVDIycHBrZElVTlhGU0JoWEtIR3VCaCtobDMrajViU3IyWE1PN1NCM1ZLYVgyQmpyT01tMTRxK1JzT0dCSHN3WUZOcitrWUx6cUFNMDNuakI5OUdqcWprYUR4TWZPYU5yVzZFOVZNbEJpbFRWeGNXUmlBSmV2L1ArVDRhNE5iWXFFc2tkc1M0YTRyVktMS1FKTkJKUUZiU3JmanRCbU1vRVVLU3ZqZkFsQWxZVGpTMFJoMU5IVXRNV0hXNEZuMzBZVTBJNEk5QVBVOXJ3dHVOK2JlbmxTY3RpRVRSWW00ZzRqN3Q0QUpKR29jZW9rT1JnUU04ejBmSDlOTExhU1FSRThXY0M0RmZrYXNDYlpoWDZrNHNTYkdYTk5MZEl2bVFIT0JHb0dWNHRnTkswczkzeGZBdnJpN2VtTUFoYVVnY0dJeXlmZmVYU3BiSGc5L2Q4bTk1dTgvdCtUdTcvdCs3YTRUeC9zby9lNU5Qd3pzcHZLUnJOVGoxenAvay9iL3pYMm9FLy8vMlNXZStOcXZnbVJkVTBhS2p3Ukl2MTZwRTVGVWVuemIzbzc1QWpnSEVPa0lGOStHWEk5ZkVOWUtIOWNSa1B5cVExR2hQWFMrTExHbm1YMmVHNTlrNVRadXlyRlhNOURtVDdLbDRMbW1SellZTGk1UjJmRGtzS0liZkM1cmt4Z0FEYjZSMnVUZmVvMS9KYUpQNFoydFFidjc1aWJ1Rzl2UWErb00rWGF1aUthSFpzOTFySXlRVytyQm1Jb2d2NFlFemgzMTlmZHQ2ZWdyODY1ZFdWNTY0ckorSlNLK0c3aVUrSWViai9lTHhmSTloRlhPdkV4Y1ZkTkM5NVN4eDBwOUkvYVV6MmFWWXhYdmFxNWE5amltNzJtU2Nic0F6MkxhME9PYnIwdkNROVlIZGhBcExsWGEvV011b3crYy8rcVZ2MER5cU1wWExKbWZFTFg4RWFEYnUxeHYrRVd0SkJ2b29UMGEra1cyT2xtNDJZM0FrUm1EUVlYNlByalpXdjkycEprVUJOaVg2Z28yZExoZThZakVRTzF3eXFjdi9QMmoydWk1SDJQeXl0T2QzSk9BTTd1MUUyMi9GcW5mVVJyZHZiMDRpN29YNE5EcnlmSkxSb3VESTdhbXJ2VnE5dys3YXAwMTRqRkZ4cXhOL2VxVjdyODJhbWFjNzEyNVVDd3VVZFg2K2lsQWlsa3ZzV3VHQWhWcW8yTytWT0srZFdDZlFjWjdTcUMrT3E5L3JyTVBJTXp1TVNhN0tHMkZqTmdpTGNrMy8rbzVWdEROMUZ4RGpScHNpeE0zalp3eXdTa0NzSXJ4QkdsbWV4S091eVhTcXdYMUl3V2pLblVhTlNyeHY3bXpxTnVUbFVVVlpxMDNjbGErdy9MZEJPNlc4NXNVYnRJS0lZVktMNkg3SGhXVXJPcjRDRnFaUER4bSsvV2g1UlBIcVg0TFJOeUlnalBGMGVVbERJVHRIT2VxcmJ1bi9WVGlmVUt3V2lobUlwQW8xNE4vcC9nU3F6ZzdsdWowcjdXS0tONk9DUHhsNFhMQjFCYndLRUd2WXdxeXpVYk83bk5xdnJIbTd0b2ZxQk0wZExuZHF1dmRFTEI4bUI1bjF6UFdPamE1SkFxU0VRclhkQ0gzUERld24yaCt3b0phL1dTd3NZaEs5TWpXc2wwNjdvdDNBRkRzbFhuODdkU2hpUm52dm1hNkJPdjhuUU9tSFVRVFJ3dlhXOS9ENnJRY1MwMlhqMzNEYkkvdnorZlhJYnVTcFZ2VnF2SDFYZk52WHV1bWhnM1ZteStyUWh5alY5eVhuUmEyYjJsTGRhL2pIOGJiYVV0N042YTRQaWxUWmMzbWJsakpib3l6b3Zjb3U4dXovdVBJTkR6ODg0Uk9qNndXMjEwdHlPMG9yRlVvUFhYTlFiazlaSlhHVmtyb0c2Wk15OVhVUExhMHo2clNncWxnWEtsYlZCYnE0MHFjWDkzL3QwUGNadnNrVkpsdE0xT3liaHZLa3l0S09ZTS91VjBzVmdUVWVJQkZXRmcydVVPMERmekY5YldCWHRqRGp2U0lIbFYyODJrbkJsTC9iLzlOanE0d00rTUJndG5FUmVENWx6V1lEUzJHcTB2LzBDYm02UmExM3dINUEvcmt0eWZMZTNZMnM4cTlyeGIvS3VyR0lqbUhIcFEvc2E5RiszRzFqUmxObVlvUXc1WDA4WDJmdnJUUG1LU1pEeGRqTXZVcExKSHBEa2RCYmN4d1JUNkJ4R0NCc1F4MUtydFNUbXNlQUNaQngyd2tWM2pmTFRZMElKNmdraTdLZVFjWHVnTCt1YlFqNVhQYnREb3pCbXpvY3RSYSt6TjJreVF1d1liS1gzbmNvTzBXbGtRc0kvT0NYcmNmYjdQR0hKZnlmNFRQdjhPVmkydHNKeWJZemNiTXJnckJPWEdKUHUvT2htQkVKVWZqZ25pR0M2Sjd3Z0N1R0M4eHlWUkZOa1VuZDVBVnFIM0xIQXk4MXdrMHVSeUpXR2RiOGo3MklDMGxjN05iMnNnZk0yNmVVTzJZZmJ3KzFtS1NtWDBKbFBXWkd3MVVZYjZER2t5WlNsRGVzTnQxYlVYbDBaNW82RWZlNTBBV214c1FkMUJwTU1ZZEE0djlQdURRd0hYaUg5NkNiNXNNZWZTQm9NaFo4U2FNL3EvOUM2YkxDNU5HWTBwS2doWk8vMzJxVDBWVUFZcUhXREdxVmFKaDhUVkg5N04wUm5pa2FwZHlsMm5CSklaVkJxancxQ3JqZ0xhNldBelpuQjNlWUVob3NyTDVBWUlaMmEyY3hybmJML1dSaVVSZmRpMDRNeHMyNlRzRzFPbFl2L1BINGNBaFRvZ0orbWF1RUlsaWUwSUFySkxKTkRtYkhNb0UwcXIvNmlMbkNTajE0ZDhOSDVxYVZXOVFSQXRJb3UweTdOa3R1eEVYT0xVR2M2azIyRDkvVGMycy9qZm5SQWhKSVNoakF1KzZXMjE0RDFRTWZFQmU4bmdJK1FrZWNPbU5ILzcrU21kTVBHZGJpRTB5YXRndjdOdkdyOEtCYkN5SUFsMDJsb2NkRWU2MnV2Y2E3dXMyZGN1eWZLNXlDTDFzdkplZDYyekxyd1M4blI3bmRpaDJSV05CdmhTdDdvcFc0czNLR3Y5SjRJNG44ZlNLQ1B1WHFOQWVhTlJVQ1F2Tm1hVlRCQnVOeGpoTm5jd2l4b01HZFJ6cm04ekd1RDJ6U256WjBZYnVqSldreWxyTS9UWWQ5WWRFb3ltak4zWWJiM3JWcmJ3WEJ6cG9QV0p2QjNVZWM4NzE1KzVzYlhDS1pOcGtDSzQyRGZrYzQyRXdxN1JSWDZmUG8yNW91ZjVpZEdXZXQ4OHAydGtXcUt3aEZnSldITXRSck01WjV5MS82N1QzQ1JSNjFzeFg0elV1Nk1wRkRkbnJJYnVXZ2ZWemFuZjJGdEpLY3NuLzZyTXJTbkthRXphMCtjK0hDcG0rcnovZWNnVFJOKy8vYlZXWXdwM2hhR2MzbTlkTWp0UWh4TisyQ0dJb1NwSmZIc1F3Z1hqdmFSbFAzdEhDQUswK2RPODJwaFFHamVZYzlaOXVPNHVuYXcwVSt1d3BOU09xTFJOYmRYME5EdXNtQThPVlQwbmtEVjlKVkFGNEFGUm5NOHROalRodFNGWlRtOUEybDJCTkthMzVxbjJFeWRJVDJKMExvNzdvVG5Ra3phZC8yc3hFVVNLL3hwQXJicnVsQjFnSmozNWZWR1cyME1XYVZZOVd1Um0zVkl4cmViZjR0cCs1WktPeDVzaFBWTm5KSUV1UDhjVzhZc2NTaDNwYXBKUzlyUjg4UERPTExFR09qY1hFYis1YS8rbFpzbC9oRzlPZ3Z1YnZDZC9jWDJkVGhWS0tBMlY2Z3I1Snh3SThaeEFDRm9wOVd1dWF2TnQybFF6YWFMcUZHcXZHaFRTZ2t1UjhvYitzQllPZS9WZG91OUZGTTk1NnJoUThNT1llRk5BR1hpR2ZHWlVPYnBNbU9WTHZpVDUvbU00Q2JmVHJTNDhqdGk5Zi9uSkNkY3g2UzJ6TlBuSi9MeEh0TmpycWF0ZktES1M1TTF2WjFDdmZmNzY1MlNJVnArZVFib0F2cUFNR1Y2UHI1MzRkUGFOcHM5VTNpYzlUeEtWdG4rOFNBTXpIdGxZdnZ6aHJ5M3ZGNzVYWUhub3EyWExIdjdLL0c3QmU0VTFnNGYvV1ZXL1JpSHhDNzAvejZDT2Z2N2E1enJoL3B6L0pMMUs4d2FyYU9idDFsZjY1QTlDYzErWkkzK1U3d0dtVllUSm9oNlNrajFnMTVjYzJTNTVkOC9Md3VMWVBPQWVFSUFJQk00Z0w3b1dxMkwveVRjT3JQTGU1WUxVOE03Tzd0cytmQnNtVnZKOWNOVlVFWG5xNkNuU2dEc3JFUFdSUnNEWk1Kc24rK2FGVzZLWWhyR1U1Mm9TNVJnYTV2bVZGUXVWQzhzaGVZVlpGakFaMUZ2ajlRbkhIOUxYZUt5KzlpY1RFeXk2aTVXemVodWgrK3E3MXh4N0ZsSHRYTVNFSjZaaGhlU1E1RDV6L1VVVmk1U0xYSWxkdU95K3hFZk1DNUQwc1F6cHJpWFU5UmFuL1RPSnFrRXRXSGUyektOeWVpSis1bzdpMFZWWTI2enBYd0NseGNmU1pEOUM3NTEvcGN5WU12QzE0ekxKVmV4VVJoL1g0blZxVXBVSVhMZHJzQXVwVnRWdGZ1d1pyOWdMTVBJaVJNc1ZqcTlnYUp6R3JWSkNTY2Vtd1lqZlB4QUJubFRxUUZRZGpJNUhOb2UxQzVPMDFaS2lnWVdCTFlCZExOWWsvWmRleFJvVjRTQjJmTHcxYzBYQ0l2bXpxMHFyeUZLQlNqaVRrZm9ZWnZUbzd3c3JBTUhaZnpSQTU5WWpCWlc2UDEwK3ZzcGVqK0VlQlpyWjh1ZWQwODU2eXNDNUJEZncrMWN1RW9wb3JhWlVsOVlWR25Mc2pSQlpFeFBOSmdLQjFzWm1IbDZUYUF6WThHMWVHV0ZORzZLQ2MrUDFJbzB0cTlMSEtZWFVmWncvZjhXUk5ONzNCZmg1a2tnZXFmOFpXUzJZdmtzM0VqN3BmcWk3MW01b0pNZ0dJNlZOMU9GNk1vMi9yNGx1YmxBVFJ0NnBCa0JOOTVudFhZekgyVC9Qek1WK1llaTU4NXh1VFQxWVMvODJWN2VuTlZacmEzVlM2T0dCZ0MreXNJVitZM2VLWHIzQUUvQU8wczc1bDlZWTBwU0xHcWxVQmtpb0RSL3hWRHF0NTcvQTNhaysxVGR1THVHOWFXZlNBeHFYYjQ3UmxqV3E4WUNiREFtM1lCQUdPNitIT1FwNW1ITWRwakVZdTFONEQ2TlhCUGdJdG9saEErb21oY21uUmRCUk53c2dtdVVtZis4eUZJMklFSGxZYkcxWk1RekIwTERrTndIa0U3VFc0Znp1M0MweGh6VjNiMmw2MVpBbjZCbVNLZUZhS1NNSUdLbGtlQTl4NjRxOStYTmR2bjVvbVkyV3J3ejE5ZGN5L3RtTWZ3NjAzT0tVcndqMXpxNVY5M0FrODZ5WlJxUEZsclJZY3FJNXBQRzhqejNUYkRUVldDMnR2KzhxRnFzSUk3R2haeXMrK1QxTFhUUDN5NC96eUxjYWJUN043ZEFFM2RUdGliak1venlrVm9LZUFHWTJ4cUc2czJLSWU3UkphZzNrVE9vTVpjRDhiblZFSnFZRjRWckhhNkw3aVRKcGtiTVhjMFRxT0d6S25WR2FEVTJJMW9XcHpVd2Y1QU5WWU0rZ215RTA3Z1JNTWgwV0lzWnlVVW1oaHVuWFdaTW01ZisvSGJ2czA4bURLck9yY2E1YXNHNWlEajdhSmJZNDBYbk9zRVpjVXF3YkR2L2xmckRiVWRXcHlYcUhhdGN4YlhUVFRnYmVKNzhlWEY1bjN6eUxaUEZ2ck9EZ25oT0JwL3ZIVGFXTFdoSDZUZG44M2ZSN3N0RXkvWDV2N3NyUUsxWFh2RjJOYVlQUk5xUnFEQmk0MGYvbjZ4UWwrTDVRN1laKzQzcGtFTjlUekFDWW1vR3VjVHhTaU9jdFlvQTNKaEJaeUtYVndqdWN2Qm81R0hScTFjaUtPTC9zdWdUNENHaG0rZ3c3SzhFS3h6dlN2UDR4QjlZSm1XVTdKeTgrSXBVNkRFQTEvNjRSUGMwSU5UNjNTeU1aR3dQdjM4ZVBzNjRDN0ZjTGF4dTBxYzZxNnQwUTZWRUNjRUxKY0tWYzJndUNJSTJxbFo5K3Uvbloxd2NsR0NOb2t3REh4cjRlUnFTSHZYenUxT3lmcEgvL3o3OWhCc3l6VDI5OWJWVTRkaGwxaVljUjVFbXZCTk5FbE5JMUFsb3ExekVVSmxGNlJOTE4wd0Q4OExmdjdwMCtDYjRPYkplcTJYTld3MXU5b0FvTklwL21KWHdwSy96bWg5MzVQZ1FQWlJhTlJOSk5QcFVmdk9mZU9ObGRoRkFvMmdxQVc4VkNRZGxXRjI3M0RaRDZhWk55Vm02TzdGbGZEYXJ5aXJ2RThtZlEzeTVMcEhmUkhBQzRlSmRFOHV2TXJUWGFHcVpESk9yVTgyc2FGd2pFWGZEcGp6Z2xVNGcvZFFNNEo2YTA0anovMVVMY2orVGYvTkZUaU5XWHl1djlIVUF3M0F2ZUJTTUgvQ0R1eXpTSFI5TUxmUStCVzhzRVF0RTJFRmdtRkFxSnBkWGZoL1N5ODNXT2V5ZTVMRmlIZ0tFcEozaGwvN1dCYjRGMXJsNU9Xd1hJUGpLWkJ4MXhvWEMxODl3ZHZ4L2l6dUZkWGpxQ1BJMVBWRjhDT0s5Nmo0ZE1kamtCZEtyaXRTSFU3bmdKM2QvM2Y3ei9KMWs4RXpUM3p4U05CYXBoK2I2eTFUVzByRnFNS29kYysxUzFGSDB5THFEQ0F2RHB2TGcvYlVFcXRmRmZwNnB4cHRsTCtLQ0RUc0IxMXgySmw0bzRMMXl2S2NtOVV1TVZZTWN2NlpRY2t1OVdPdXVPc2t1cmIrNGNQcFZQbnQvMTRac2JTQ2RPQmVVWTVnTzNBVWU2MFNMdncrQlNzYXBheXJlRUowcHNaZi8zV2hPZkZIem83b04renp6di8zbDhqTVZwcnN5OHdFbFdaU3FPNklSTWR1WGtUNDlJcFdvS3FDNitxMEd2Y1FrMUhzYWxrVHd4ZHNONzZ2aEhySXZBUDJZUlhaTGlOTDhySHNYZkxKbFMzTVd3dHpIY3ZEY2czK2ZtYm05VDl2NWJIMzljM0RqK3pMamwyZkVTMTZWdXZMdW9vSkRYMDhQajlDem1jVy91NWZCNnU0dGNoeHV4UnZSenl4VnQ4YkpvVmJPdW1SVXRZeHJ4eG5ETXcyRXp2TngzNTNUbnlPOTZkRDNzVy84bCs1eldiSjNzS1YzODJYTHl5dzNLVzNSZjRQb3ZQazIzTXFSY292dHl2WHluNWlOYys5R25pOERDeVdzQzlpa2pITlRlU3pNZmZGTmY3Y3djQ3ZFZWZOWkxlOGdsaG1GRzRQaWI0anROQ1JFS3VibnpKVjQxdW1tRC84Rk1XeitGdnRHQmQzQzBwdkpkMDRjelJUV2ErNWh4RVpkQTh4ZkZjNXJqSXV4ZEEreDR6N0xjeTgvMkNBNnBEZ0dIOEVQbG5wckRxc096dkljYjhVWkZYcTVtTjF3ZDVTTGpuNCtiUHhzdmNhcUlOVVJSby96VzJUYTlwWGpkdjlmM0ZrdU5XS3pvendxZ3FyeFNVWGFtZVFhWHBTeU1ZV1c2bDdCWW9aTEZuZUg3cjB3aG02b0NLbTdNaUdGR2FmSDZmMjdzS1dhWHBlVWwzUmoxQW9XVk5HT0dGd3hZZDBsSlFMSW4vcnF4dFRPbVNzSmQzQjUxaEJtenBSb1AyVmJJVmhSOW1yUkxWOWhYM050b1RURmpFVFduQituQ2s3bE9VMnZzOVNMWFplSWlrVHFmYUphZXZ3SkZ4YmxEcXZkM3ZyOURkVzcvKzZKRkFQci92MDdyMlE2alFmVFFlNkx6V1BQQmpnK3VkLzRRaEh3ZE52VWZkS1BzdG14WnRpcXJ5N0t5Z2E4WXh5c29iVjlHcXR0ajRDdGd0Yk9Hdml2cnFNN29NNnlPc2x0NVpaaC9rc3FxaHdmQUJyVTlKRXRyM0tiRmZSRlA0YzJTbTRQNTdmU3VxV1ZSN04vWFJTNXVjR25wcng1VHZRQ2UvOFVvUmVUcUhNakxEOFlyL3VhRzVIc251eDZSQVk5MmVieFBlTDNUelJLSldlNzNEdnM5SFk4Q3dPNE9yM3ZZNjJtbnBlYnBiczhkbXM4VXNYRVlub0NjY2dWRWo4UFFWNUNyQktyVUxJSUtsdTQ2ZTJjQnlJT1c2eVpiQ3JaaC9UOTFRNzY2UWRUcWNKV2JPaW82WDBKKzFGOWQzSUdvTzNRa0IxVWhJckxOdEpUMS9kZi82dGQ5UC9uOTA2K1hGY2twQndQbU9vVE82SFUrWEdjSWpId095TFJESHFXbkVDMHcrdWZKMUpLZ2dwRXdjalVSanVFYWZkYjB5ZjlMSWxvVVhNQ0R3TDhWTG5GWUM4VFU3cVZWK2lyUnJ5L3hXUytOTGQwMVJ5QkNVVEd2OTJiNVhWMUpaUDUvTlR2Z0hVZDFSN2ZEMjRXZkRpQ3BNMjNtMTNOeEptS3g5dWtycmxoRjd6QzZacnQ4KzFyZnRlMjRWZTRpOUhhMGFOVUoreFhMQi9XZlpmRXJ5cGN0WDdIaUh6OWw1TkxtQko3QVRIRThmdkl3ZGp2R2QzK0NZQWphVGtrbDMvejN3QlZqOHZNbXp2REFWYmFzQWdLRzFPZkFqSW1KMldFUFpzRk0ySVpiNUxkc1NMKzdCTXo1d3J2TjZScXhTRlRELytXN0FpRC9Udk9JV0pyOWs4dDU1WGgrMWFYMlU2cW5seE16RzJhUWNMdnpHWGFmdDBvT2NGV3ZFVjJacVFyQnREVU80RExLdkQ4ZkppVXZQK2Z0aEFma2lnR1FpbE5BanRCVVlxWDQvNmVGa3MrdUMwWEh6cWRLVzA3eU5rSlR6bnUyKy9SRzZESGdlbGFibTN6OWJVZDVYenE0MnRqWlk5cFNYeGtzZC83bWxzdG1IdkcrTzZYVWUySUJNemxTejhWeFQ4VUZraDJlUXlKKzN0Zi9HMkpDbGVIc2J6UDkwQmJSbkNhdTlBbXVjNlpQR0NSWHBIUERsTmM5U21ZejFQS1FuMXllYmgyaHZNcFF0ZmJJd3JwcU5MVEcxTmxsMmh4dnNHM3FhVjlMYmF3NStkYkdhdlFwTjFzSE95dTJ3SkxmNVZLK1VPbnBIVDJvb3h2NHFNb2RWV2dKSDdCTmdaSGVPdnRmZC9zdEtJTnJjblZTek54Q3VwUFFrQVAzNHlzVG5RTm10N1ZiWmErM1VOcFlnajVaSGpCc2tLSzBRUXR0enhkWFhweDhkY09EcnRKdkIzWXRYMzlHNmYxVFpZL2JWZlpFL29pSjdzVURMbHQ5dC9LWkRjMTVyL2RrZXVNYjR1Q3VWNDlaRVF5a24yUllNdG05UlFOL2wzV0dBQlhrRkw2SW9IZjhuNmR2QWtoR0x5aDdiZWd2aGM0VVNDb0ljUG5lcWFlWFh2Z2d3QWVkd3Qyd0k2NDVEWG5LMTIxSGhZQnlqVkswNk5LNC80OGFMdm9YVXkydDRTcGUva1Yyei9UWVdxcWozYkEyR2pHczdXamJvN0hZT21yV29DVVNQYk4ydUNWUnNXK0VTRFhyUnZ4K2NpU1pHdFg0ZmI1UktxVWQ5bm50VkJwKzlJeDBZbkVKYlVVYUtXVk5IY1hVSzh5MW5aUjdpbzlETFB5ZlBTeVhUQ1Z4MTc0bnFsbDQ5b2tiM2F3SUxLaHVQYUxXUFhYTnV6dTkydUhFT2FKNCtlajV2YStOcUY1RHhtUTBLSHR5eGpuajA2cDVCOWE5NGYzYXA2by9NVlVhdmYweldQSkE3aEo4S1llYzVlV1RBdmhNNmtWSjhzVXppSURNdktYVWI1QitKSlc1dDlKUm1mUW9UaCt0Wm4xNG9vcDF0TEd0ZUdaN1U5TzBtYzVseWRXYkF6WVhiZHgycCtwTy9DOHpTUVZHak8vQjN0bEQ3Tzg4M0ZrMk5xVldIcHBwV3BuRWsxbi9tcFpvVjZhSmRKSG1PN085UVZKU3YwaHRhN0NVNEp0eWNiZ3QvbWxEcmY0VVo4RVBnS1VnL0NjSS9nR0RKZldON0VrZSt3U2I5VHVYTjFrbTNDQmVDN0k1bnQ0Q29EQWxtaTRRMUROOFFYZHZBVmc0MjA3eDlmZkJJcmlvL3JzL0sxeGFWNlJzOXhzN1h6a29TQzNqUXltQm9BbmMwZk1HcEJoaHByUGV0dng5cnJkWHN6bWU0UUtnc0o4WVByMGFhYnVucWdBeE1RVFFEditOUGN3eGoyT3lNNmR1LzNmbm1qL0d2MTFrUFFJQmZOQmNDd0tUdzNVZ1M1d0ZyQUFkUnhWd1JnVzhxUUl1aDF0SEtsT2tyOXJZeTE4ZmFvd2lXMnNnNjdZR0wxakpaTUpVd29jcTRUdVZ5QjIvN1FLSzdYUWJvUEd3QnFMV1FEN1dRTDdYUUg2ellRMElJMzdvNisyZ2FBSDcxMjNkMzdjL1BEZGNLMElBaC91YkVYSzNDV3dIcDJFeVBPeWJIOXJZbWYwQjJQc2hBUE1zU0habWNldjRGc2Z1eGYzOXhmMnpWLy83RDRzWGtiZ1podGw4cXdZT3FJRUgxR0NmKzhFZkw5TnFNNStHelZmMm4yLytNRWUwbVVldFpjQmUvU0hvY2tZY2NKNzRCcng2ZFJnQW9EMDRCMDcwcWNob3pZTGtXb2I2NWE1djhtZVdKbW9tQUdwd21QSWZRQmdXNU84V2FqQUh2bzFkdi95aTQ4YjdiZndUUFozc3hBR3YvYWVvWVFBZ3ZsOUtFd0RzNlI2NDBmdjF3Ykh4UzlIK1Q5ODlyU3JOYnEzbk5MMWZIbHdBK0VSRE9JQWZoMXprd1JWSFdndVBUbUVmV0svLzNYdE43MGNlenFYYlJILy9zNkQzYjMrUXN6enNsTkprNzdkOUd4bHNUQ0hweHpJOHUrL1Q3Nzg0UXRXOHNvSDNRK2pKQkhDUjhrcjRSeUErZjZ1RE16NE1jallQOTdTaHY5SENucDhLZjNpR1VndmJnL2REdU5EeFNhSUFLTVQvMjFjWjhLRDhETDN4dVRoRmNXMmk0cDlWN2hYTFcwQlZIMXlIbDR0N1BMMi9sUXVvdXpoWDc0cndodjBha2JLbnA4OTdQTk83Rkh6am9pdVdsRk5lcytQL3NCYlAvMktuSGR6OHVtdnJQWlN4RmJMaXdWeHlEVW94cFJrM2wrLzh6TWVQaDVSMUdBY0E3c3JWKzQvcEFtSlgyNVZzaTRndkF3cXhXRFRhRUZKdXlEUTJFY25XWHFsS29wS3B1YW5SQURUQWhaTzA3WFpiS2prYmxuV3A3UjNZYUFOVFBiNHBHVGR6dVVPcWRZMVdpZThtRDNqb2NUMDZVeXdRQVVsQTIwWUJvS0psWFJBSkRNbE5rTVo3eVNvdFpFUWpRSS9FVWNsV2xkV09YVlJtQ2xlT2dyWVdWSTFCTDdtYis3MmUwZE5yc0wwQzRkWnMzb0VLaGF4dU5zbkJFYkZ4TWtTRVIrK1pqTFpIWWhKVlYzbXhveVZSYVVUMHFqb3ZyZWdjVmRSc1hqa21hRkZ0RWVKbGplUUZWUXBtVTA0UWNiQ0hqQXoxaVVJYXd2bE9Ya082TFI2a1hlb21YTW9qWlJOVjNmcXF4MzdIaDdmVWVnRFZDMStacUV3bHE2NjN6Y3k5M3E1NzQrcXVBcjB0dEJVcWYrSnRqRmlwYzBCYSt5bDVhOGNtN1l6TnJLTkErSVFGTzNwZjFmclZiZTFEU3BoTldSdG9IZUpOaGZzWFJlZXhxdnNGcVNmVTc1NkUxaXlyc25CWld4cFlhR1ltSVJLdldTN3o3T2cvN2k0Z2RtNEpEYVJjbWhqcksxTTZOL1JhY21PSmhHaGw5WTA0SEt4a2paL2NHdktDbkFydGR1d0lkSzFJUmloV3Rzdm9iNUhZV1ZhaENMNTdpWlpTOVNVcStEVEg4OTF1QUlqeWxWZW5OYTF0U2lHYkhTbjJ6WGxucDh1cWQ3bnFtUG1uQ3dYbXgyMVg4dVBIeHpnZkVJdEV5NTl0dDkrdXY3TFhkbFBveTVsNjcxbDRNQUoxbzVXb0tJRjJGKzZYWjFUdDYyTE41Z3V4V1dXbEV0TWt4UGZkdk54RnJZZ1IxMjFSbDJ2YXNvRDhlZzYzc0Y0dFE3bFFlR3hiUGVMTUNUaXFyMXdETCt2U0pmVjIrNk1YZlc5Y0VNUEswTC84N2tFaThZMnJiOVZEdCtQOUd5THY1Y0JXSjFvdTdjS2RFeFdlcjhqUDR3dkRTcyt6NkJ1UGFHS09ML0NtbGlTYTRieWlMdWcrbVJCUlJmQkFON0dTWjAyQzRYSDhlcGRXci9DQjhnYlVaVXBlU3M1eE5RRElPWVZBMUVtSWVpS1hXS1pSQTFWR1RDVHhvbU9vZ09qUURjZlgrejFybE95aG5Vd3RFUFppUURTbFNRMFhIT1Y1c2k5ZTZaM3E2OUJudEMyKzZ2UG9QdkMrNCswVmJUdDQvMS84d1hJeEc0Nm1FNHduMEhpMy9YQVFwaUxnQUZaZzBMajVLSCsxWEJySFFucGhUWjB2KzNPaklwKzZiMGdzNnVvU0U3cVZ3anUzdGVoOUo5Qk9YYy9Dd0R5Ly9hVW1GcWxGTE1tSDVsVTFSOWhSVXc0U2FJMzBxRkhXQW5tbVNscW8rYXR1RzRYc3NTMTV6ZjFTc3lsNWJaM2I0cEZYODdheUFjZG1jWit6b2VoenpvWEVkYVFTWmtvb0x2bVY0TG16dXg2dkV3VzdSVkNFdFd0M2RBVUszZkZpWjFhZGk2Vk9RWGNoNm16R3p6Mmh6amZNS1FxVGppajJ1MmFwamlUUHJhUkdKNzdhTmpUcGNkNmdQSkJXQVA5WHRhcGNXUDl4K2pMOGpkUFB6YS93cWlOdWZEQXc2M2JYS2tscm1zQWUrUVU4SmZ5ZkEydnFGK1JQM1luMTNlaGg1K3U1SHJiTVJJWXc5UEx0b1g4d09ZRzFrWGVDNGVhOVowMk0zYU1hdW56OWNueWF2WHI3TEVRUEhxK3FwaGlKSHkwSmdKZ0F5c3pvbXozVGxsWUJDZGJJdlJPY1VlTGdOWkx0TE9wRnByWDA0V0tPZ1Y1QWxpdzlleDJiTTJ3Zm5ZK25Odk1WL2l2dS9oT3p4RkhWYmxKRFdhTko2U1JsdVZHOXNWcTB4clZFWFRmVUtCdU1xNmdQUVhkVXMxSXlWdFN3Sld4dmhkK2luWFE5SUM1S2h4SExNdDRmbkpvc3V0WU10cVhBTEJ2blFGUUJtSE9XZGxWcitEVFB4bElnZDJHTXE4bGhQNDhSRFhPdUVRTVppODkrWWljU2t0Z0pJTG5tTGg0T2gwTzBlTXF6ZG85YnlvZndtTzM3dWhQckpJZGNMNzJzRTV4OHpxaW9WWW1reFZGRmE1L2JsYW8zQUtnaC9rRU9BbVB1eDViRE5PUXExYklLd1VtSmhpWUhDM0NjbVpMdmtXRlZrUTVaZWpuRTljQi9zQ0lpNGxVMGtZNmV0UlVOYVh1b1FMeXRKME5veTJvTUNnckxpSkNkUVIzREJPZit5eFVDanZMZlFGYkVlYS9UbDcyU3VOT3VwbFQrbkJ0YVdncmx5ek5jUk94c2JYL1RGZEp5LzJneFBhM29VMkdwWWJDaEwydjVIMmF5SU5XTlFML3ptS3pZcVVDc3JWMmFzcmVYUkw3L2NsNGFUNjdTTVRBeEVmSkx3aE9oTmhYT0p1L3Awd04vdkNWTXFDenhPamZONWVMUkxPQ0tJYytNcjF4ZTZmQXdiRnNXNEw0YzI3bSthdG9BZEFUYnBsL04zUkpnYkIwbmZNMjZMZnVLa1BSc0RTRUEwVk1UamREWFk3SjRmNzgrWUYvUDQrc2hWK2hjbFpUR2Z5UFRtOTB1VktQUmNCaHV0SzVDS1dZZTlwZ2E4Y3VDcVJqaGNNbzV4Tmg0UWNZNkpSM2FrNVk0MW01U1JCNFdGRlV0c2lxQVVqVVNNQlo2N1BjTUlkQk1hMmljRko3VTdqMVdzZjFPYXlHY3F6RXpDM2lBV1VhNUNqV2FjM2l2MDdDU0pSSW1HRlBiaWQzT3I1V0N3TGYyKzRKMkxzYlUyVUZoVlN3VHJGcUR6SWM0Q21CTmpKRFdsVmJUYURRYTRtWWtYcGRza3lKM2RUVWVUMXhHdGxUSUp1Rk1PR25oT2xIS2toTkVHaEp6OUJsK2pBbERNQ29EUW1xWnpCV3lVVlNJUEhWYzYyUURaZzlQSE53RlpUREVrSWtsbWdRaVlMQlFrRDRIWTlWb3JLdGFBb1NMS0FGcE5jWlVTaG13SU8yc2xSV1ROaldtVmxCOGY0UlJ2dUZleHdvcVExWmtCYXZqaHVKaTNnb2R5ZkRKS3dMekFGRHZvaGFXaERSaUo5MmpUb3duOTM2dHV3VGkzSmxZbE10d09DeXQxNXZGMWFCbEFtWkE4Mm90T2RJR0N4MFdRSm9PeDYvM1kxblpvZmZubERsbzNiL0g5cjBTSURMbXdZT3VKYzlkYWYydFdSS0FMYTNEVjlwQkdMdG1idmEzcEM0YUo2MFI2WHFiR2E3UisvZVQvZDVRcW4rbzhvZFk5V0MrcHV5VjAxaGlDSHdjbzI0VXBWRjFIUjBTbXYxNEljcVVzTkJqcFlyYVhvcEJGNUphaDZjcU9rL0phRlhtcDhsazBKYU1naENrRkJ2UURQenJGcFF1QU9Jc2FZMnY5Mll3cDEwZ05GRXBjcmRoN3RhZU1MUnRUTWt4R3lVeFNWVmdGU21YWmFOUHN4c1krSVpwOEpHa3hwT2JBRjlOZDBhVzBQUHducnI4SGpDYkJDdDdwY3JkTnkrSDI4bTZRK3BYajQ4K1VNSEtDMkZOajJRM2VmKzNhUnFIdVJEK21iLzVTZWZ3OTRNYU1MQ2ZHVlpaQ1NmNlM0K0plL1BoQitTbUsxSmZPRFU2RTFaVXE1TXQ2dldjOXphT1U5VmxrZ3ZxNUl6aGVYcUxoWTNwOWRNUDc1by8vY1hoTEdlZkhlemFLODh6SlYxZjgvNTVpNnI2OWVRZlpYRDMxbDc0cE9iamVyUFpmUmszYzRmeC9MVXhlWWd0Yk03dXcvMXFvZTl6YllucCtUeU1CN2RXMDkvQmR5ekticXRlS0hrc0dseVFVRmJLeGQ3Tk5keGRFa1pBQUJBOGlsTVBHenZSU2dHQkVEellNWG5uVUZ6UlRIVVNnTlo3VlVUNmtlQWUyNXBxZjlRWDFmODRzV0RpSTlQSEViVTRaV3RMWUxQRVQ2VjBRTm05ZWw5aTBMUTlIZTk0UXZDbHVuSUVHaVJjUm1wUG1aUXBEUW5tRjZraEFBUHh2eDkvMzMvLzk4TEgvMXRTTktJZkFNQmErdzhaNUFGOFBHLzlzNkluK2U1c0RnR2dZQUFBRU1DL0g4Z2p0NnZyLzBhOVU3N1hYMEJvS0JWQ2VvN2czWVNOdDZ2VlE2V2Q0bi93bGVxOVFsWk5abTFJenkvMnl1Y0wvQW9JUnk0RHBmdU1RMzJ3Sk1yUDZDTFBVRGZoNnVlQmxscmhSZkFiOElONVc1ZVNWY2FwTytyYVBpK3hienJmWGF6bzdPZDgvN0xZMVE2Zy81NmwwcGVaQkFxby9yNHQ0Rjh5MytoaUNHZTRua0FqMCtYV1Vna3UvbXljZlYydnhFMFpEdnE3VCthVXRoT1V6VmY5T0pBVldBbUFyeTV2d0Q0bnpTT2ZlWTJkcFV0dDIrYUFmWjZxZDBObExzYzQrNGs0SldGdmY5UVRxdnRHTGVSalpoT0M5eFo1MWNMM3NJRDlRNVVqWmR1eDJ3V3FrS3B0RkdVSUxabEhMd3JaSVQ3RlVKY2lwQkQ4ZktFOXUrOC80aTBYOHR2YnZPWUUzQkNQamJIbEhqdG1JdGt4dmlzaTJvRXVmSnkwSVFZTnpEMjZvOCtLMGJGc2w0dlkvdUlKUUhZb2VOOCtXUVE2ZHdKUFMxaUp3ayt6MkZTMnB5ZTZyYzB0YlQzQjgxTGZoMlM3aGhmVW1yRnlMcTBFb21pSWI1MytZS1ZlNzVMTWRBd0RrSnNDYy8wU0NzVHN4VStZV20vS2V1ZksrV2pjc0Y3WlpGemJoVEVqM3BuNXl4VXRENVZXRHNzdWVDdGljL0MyTWRmSTU3ekk5cjJRSHVOU2ZMMjhKeWx6NWRrN0VuSVJQMHZ0WHd4dk8yRHJNdmFyeEdKRXE1WFhMTCtMRjlSeHdlbElkaE54MGJUSHRKb1JQUktVVGlueWxaSUU0RTlYbmFVVFFEZ294QjJNQXBBblNrTks1Sjd1NFN2QnRuTy9zbWUvM3QwMEF1YkovTUhmUitrOFpFY0Z5Z01BQk5DUWZyUTJGSXdEdFRzQitoOGNnOE1CQ0l6RG9TWUhBSmJCdHdiRTNYc2M2OTIvTk9EVXJqWWxHa2c3RjlKQWtVN1hJS0JZVzRNRDNwN2R6OUhNTXJzQ0FyQXI3MEkrZm9hYzNWZVE4TFg1UklKMlJqM01HdFZyWUNWRzB0QTZLTld3b2RyZU9wVmEvbmpYVTZ5SFdKeFp1eWJKNnU2Z1U0ZDR3MTdhekVKTW9WOHI0d0QreWtya29FWjkxRlpxNUhMeDlpWG9BdzgrSERBSU0ycHFXWER3em9mWFBOd2JzZzJmUis5azZ5S0ZnTHNISmtYOFFwZm1qVmNkWW1GU2dOeGVyMk9aWWdvRURaS0I5WDFtc21SS0VubHJJRFFOUVBsQVVEWXVsU2ZHV01jeGVJZWZlcU1JNnZCQzFheHc0OTV2SWJmd0JXSHd4VlV2VUl5V2p0VHdXMVRnK2NaVERiMTlqYXJwK2ZWVkVncDVmWDdzNDBLOE5qbnFyam4wdFkyMUZkTWI3WW9waVUxeFZXS1ZQeWF4eUtjazVsUk5pRzJFYlJ2Z1Vpa29UZzkxU1hTZ2JCSmNiUzB3YTZRQnBpUnFtVTFJcGFva0tpNVdNWkdOaXJwR1N1R1VSQ1pRcFRXcWhLK0tlYXFJcXdvNThRS2FQNVhoMGRGV2thbHhjRnZZL1BXM1FycjZ3OWRjMTNhbEptMjdyaXZ0Mmx3VmhWNUZJbHBrcGFvQkVWWjVZVmF4RUZYYUJOYS90cGpmeGRaZXp1dHcrRGMrSVAvSi80eXk0TnpncmdiSXdYMEVHYlZDWmFXd2xyU1NjajZPL0UwK0lCRmgwZDBpKzQ1djM3ZG1OWlhLOVRYd0d2OE1mUGJldEN4NlhMK0FwQ2xEVy9Iak5pSys3dnJxMVNzNDIxMjhiYkcvTXZpTWM1R281SmMzS21kZFoyOG83RVU3VnJDR0JQWjROdEw4OS90bFhGMGJJWW1OSXdCQkFRPT0pIGZvcm1hdChcXFwid29mZjJcXFwiKTt1bmljb2RlLXJhbmdlOnUrMDA/Pyx1KzAxMzEsdSswMTUyLTAxNTMsdSswMmJiLTAyYmMsdSswMmM2LHUrMDJkYSx1KzAyZGMsdSsyMDAwLTIwNmYsdSsyMDc0LHUrMjBhYyx1KzIxMjIsdSsyMTkxLHUrMjE5Myx1KzIyMTIsdSsyMjE1LHUrZmVmZix1K2ZmZmR9QGZvbnQtZmFjZXtmb250LWRpc3BsYXk6c3dhcDtmb250LWZhbWlseTpRdWlja3NhbmQ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6MzAwO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi94LWZvbnQtd29mZjI7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R01nQUJBQUFBQURJMEFCQUFBQUFBZFhBQUFESFRBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdsd2JuRlljaHpBR1lEOVRWRUZVSEFDRkFCRUlDb0dxSUlHR1ZndUVLQUFCTmdJa0E0aE1CQ0FGaFVJSElBd0hHMnBnUlFkaTJEZ0FhUEFaRmtXd2NRQUZtKzhUUmRrbW5VajIveWxCbXpHaGRlaGJaU0YwUjd1bzdoa1pDWkdUNmhucG9iWlRXeHk2Y09EaDBFZy85bzBGUitIQThzM0oxYjN0dzU5WG96Z2NDTndqWm10dHdDVnhYNGhMb3BFa1RhUlh0MFpJWTJJdDRqZjkyWHNDdk1STFV3ajJRbzBJa2hjeEtrWXE1aVF0Y2ZuaW1ycFowanFIdEduZ0pibC90RHF6aWlxZHF3QXpvUTBUTHg4Nk16cFg1dEk1VC96djk2OTc1cjRBb29zUkJESmZCYm1rV2dzSXRvcU5iRzJYSjlDa2VvYkhiZjN6QkJtb0dBMUk1YWd4R08xR1Rhb05FRlRNNjdJdW9uOUZYdnpmK2l1aXdRRUsvVy9haG1pYnorVmRFYlZWUjRZTitQZC9qY3pDVE83TG53V2dJcUZsNVFBbDIxWUIycDVLSkZsTDZKZjdaZUJ6ZnU0Y0ZKM3ErQU9DOFFWNjZ6b2JXd1loV3dEL1Y1c212RVhvekVtRVRXdnRLRzJUUEczaFdjcFFtOW5RT3ZSOEpGSVZnWkJkMm1iRmMrSTFmWVh2d05Ra1ppdnF5UDBlOTM4NnkxYmE5ZDN6QnFHTHF3QVgzWHB6YlRINit0Ylh6R2drQTJ1SmZReWVsZldlSlN2Z0MwSkZVRjFheE5kVFUySFRwU2o3bEpsL25lbXE3Kzl2U01rLzZKYWRHc3NxcmdHZWV0bmFOVlBMNHorZDdxeC9zZ3huRjJUNWVnSFNVV3lYN0FERFZNS3hveHowQmNodVh4aTJBc0NhdFRQeXZnT09OVE9ick9TY2NHdUNRbHpoRWJLQi92cnR6MWlySDhoc1puYTc5bkluaHkweVJFTENKeUxnV2Y4Ni8zQWdUREFBQUxwak5FZzNKTk5RWkxoc1pMb3lwRncxcGs0ZGN0aGg1S2lqeUFrbkVNSUJRcCt1Si9pbGtoaXB1Q1BIZWcrRzlscEZvUS9hK3hPS2M2SEZBeEIyenJwM296QVhhaUJ1eFZNOFZtQ2tXbVY3dHQ4M1VxbDZpNnh3eWFzd0NwVjkrY3pVNU9manJNckgvQjFiZHNTWks3bVNXL2EvdENtdktvSkVpaFlqVmlLUFByeW1LVkRrUC85ck1NTXNjeTJ3MEZMTHJMUFJEbnRkY3gwekt6TS9FNmlBcENqNkwvay9hS0EzQTI4T3lWeGFDNE9sVDVhZHVQTVBXZlpCMHZCa1J0bmNZQUdkaFN1V2JsbzI1MXJUOWVDT0NLTGdmYllHa3FCSjZWUXlhNEtUR0lIVWc1ZmhxUlNZRWpNSFJ4SUhJK2xKM0ZUenROMHBXaDdERERGUHB0b3B1TjQ0Si9BSWtnMVNlT3BjaTloUDBSVFFFaVdPd3p4TjAwWkhVK1VwUzFHRjhCWVBFRDNBQkxGMW5xTEZmQXRTSWRzNHRaUXJFSkN6OVRLdFoyVE1VVmhheEhPTFczaVlTdDBwb0VjWWdvU3g0N1ZEcWN5aGtna0ZQWUhkdk1TeDlWOSt0NzZOTFpxREIybTlZWWhtdG12NHowbDcxYURYL2hjek93UXV4cTZrMWxVQzdubW50Ry9QM1N6ektHUS9md1JVRC9jT01RaURJcFRnanh2dmIvUGJ3RTlzbEE2aWpMSVR4YmtHbHAybVhoZlUxTzVBL3lIZWFiUldJeklkV2pXWjJXMDk4UzNOSm14SVV4RDBKUzJJUXFoNy9ETE9WRlVZOUkvMDcxZHFKRnk0Z045U055UHNBcWtsSkdYUGFmZU0reGJGNXFJWWMvSUFCeG1sbTRCY0Irb1BPUnoxOUNNMm91aDJvR3RFTk4yQUpGckNWek80Tm9EM2V4V1NFS0c0c2pNRHRPVkpTZ1lMVjNvU2FMWWVlNk9yRTU5Sld0STdYcTZGTU5CNnBCYUR6bVNHN3g5UC9uY29BUUMwWU82NUFWLzhWcVI1cEM3TzBLSlJTVGlYTUhlYWp6dnE4ZkQ2VEVhdGRTZUVkQ3lKeU9QN0hTMEhOc2NqbjRFVUg3SVZ2NUI5TmNIdDZRK1F4cjVOZ0psRVlwQmJsN2lXRlRnMlN2c3ROTHBrMXdkMEVPQi9IS09QNTFvQWtLSGJrMGN4Z2FVU21FZHp2dlJFWGZYblVFcXhxR2dkeC8xcFVCbjZ5U1ViaUw4YmtJbENwT0MySEYvWTB4NXFweFRMNkxtbFVQYkZPSk1qWVFEZVlKSWNZQWh0S1ZxZnJGS0luZ21qT0k1ZXgrV2JTVUFyQ0dOd2hJRGlhS1BRVjEyZXphZEEwNENIRzg1TFltaDJnaU1Fb2hndUZDRTdXdDJSbnBaT1AwTEFtempKTkpNbDFGcVEyd2ZiVUJKYjgrZ2RmaVNHU1cxZ0MxdFowejdRVlFkZG9UU3lzalNlYnpvbGZ5b2hTdGdnQmVlTENIT0RmTXlvMkJPUzhhMTJoaWRyM1lVaFJEVlhUQUl4RTZ4d21zMERFZzFNUkZIQUd0R1pKTEU2Q3RCWmw1SjJBN3VsVFAyME1qUVh1K0ZHY1JoakNvVlh0b3daaXRoZUFpZ2Jsbk9aSVJnRENnWUtlampCUW9RNmhSaDJMSWFyR1dCN3orWWl0S0F1cUVNQWw5UURJZ0hjOVJzWWlVekFOZ01zWkdMTG9VYXhha2tWcmZEb3pLMjEwWmJLMDRacGk2Q0VCVm9zTU9BQVVWZ1Fpd1YySE1qQkR1S1VnSk9JZ3lYaEVNbnNVQ2xTYWFTeHc2VHJpT21NUlYyNFdTRy9BcjFvYjhMTjlNRmFmYkZvcU5yY2NDTnk0a2lqcUl3QkpsTndCQzhtV1ZnbEcrdE1aK3Y1NU9NVjRFaUYyS0NJYlZTc2xGb1pOcG1GdzgyWFdzd29DNTZLRCtxVXJvSXpLbW51NEdBWmVKWi9FQUJNNFFXUVJwRnFob1ZZQ1FmUGRwT2hIR2FXdXg0ZXVGaUhudTQwMHBvMU43Q1hWTW5mS2pSMllkRmlzY1dxRnF1QmROdkFhOWR5OHRFVFArNzEzTHdjRFB4dkRkMGF3KzluZXlmZ2QvWTM4Q0VMNXNKaVdBbnIrMzMvd1pLY1Fud0tqclhpTUFCcER1Q29hVWlrR0lTaENBRUZ5RUVWNUplbEZjSEJwOUxuZS9lL2E3Yk1FdzhLcFA2WlpWbVZSOFM1b2JBbVZaSldPTTV5MGo4QkFCUVlRVFVtUXlhWkdFVDF4OUhEQ1VrTUcyTTJIRU9odVg1SGpUdUJwU3BBS3dpWE9tc3FCcURBWHpRVUl3WitmT0JIdmdaaFloUEczL2pWeUl2Sk9EZEJJQzBqSzVzS25ONzZxVXhzSTVSanRBcGl2d2NtZUFRSzlGWUtHc0VTdENRUW9nNzZHNFplbXFUSlRBUlcxRDh5QlZJUUJWTUloYVp1L1ZIN2hTT0JSRktSbWpRa1Nia2dRSG9pcll6aEtGWFg3TElKb0xDNWFhbmkweGdXTGdSZ1RnbGtyT2ExV01Kd25ROVh6bGNmbUFEc2hRNEg5RW9lbnk1U29ySHJXZzl0czBwSTd2LzNzRWV3QWF6cnVDK0dDUENmeHJrVDlDWUE5QzliQTVCeFNLSzNkeDBBWUkvZXlpcW10QnVBbzB0Y051YnI4MHdsNCttNE1QajltS2FXUC9GSjF0bHRQZFV6TzRHL2hMOVdqcFROc2xWdUl5Zkk2WEpYdVZpZUV3cXQ0ZGJtZmo4QUNDSnpTZmRuNHBNbzQzS3NrWFd5c1FWcGpEOVN3bTBGOUFQQXZ3T0FOeDJ1dmNiMkM5dUFDOStFQzg5NHp6cWZHYVA3S09iaHJuTTd6MjBCQVlCRVFIOG5nTjdLOTNaMWV1VnpOUHFuN1RQSEl2TWNkZFYxaTYyejNuOU9tV1dUK1phYWFZa0x6amx2Z1d1SWhpUlFzR2EwbW90Z1lHUmlaaEVsV3F3NGRnNU9pWklrUzVGbWpmK3Q5UUFIb2tKNmIvM2diakwxMWtkZk9iUTNnQmg2Nm11OXN2NjNUdWRUb0ZDUlltVld1V2UxUy9hYjY3RGpqampodnBzUmNVdU5MUzdiN0hiVXVPdWkzLzBSRGxmYzBCQWV2Nm0xMVQvKzlxK0ZCQXhIaFNkU0N4QXVSS2d3a1ZyUTBRc2lhODJxcGJaYU9hT05CQzd4RktsaVROTmVCcmVPMnVtZ2s2NTY2YTZIbm9ZWVlLQkJQRWFiWUt4eEpobnZySW55NWNpVnA4UlVwV3dtUjAyRWpUYllhWmNkQ0EyL0VBQm9EUUJzUDlCeVFMOEZNUDhBOEo4RE53Y0FBRFoyRmJ5RWhPTVVMQ1dxb3BoSWlGRkdQNi9KU2Jibm5KZ1V4VjFEekxRQWhDSkl1RWJCbzNneWFTVUpSU05kRUxIU0h0SU0zSEhHc1NOeGZld0VuY2ZyNmNDZ01XbDdqYWFKMDBleFF0UVI5aWlHNENVdzhnU2lKbm53U2IycnNBaXBSRWxueENZTXM2Y1N5SStlMlJ4NkVxYitDckdFSG1Pb05BT0ZwSlN5TmxBVGhIVE5Qb0I5SFFPcng0ajVYa3pPZzRRT0NXbWNQalJ4VEMzVThZUG91VVU3WDd6TXZya2lXbzdkSnNablFRQUU3bm4xL3Q1ZloyUkVRbW8wd2VpdXZKa0xsZyt3Uk9rczV4UzhNOFdMbFRvRXhLUkp1TjVabHVjOVZ4bUdwM1hvaFNGWmc2MDJoMFBwZlFqZ0hITGRVOWRZR1pHVWpGOHhHUGFmcENpTkJxOVY2aTA2VDA0WVlwNG9LMTRvYzNlbHJDaVZFWURjL2oveVFTblBPdGFKbnpIQmFhaGNBMENmQUNxOFM3NVp0QWswcFRuS05BdXVNUVdRYkZpdnRuUFV4bk1MUU91MmZFbU5iMVpxNTVJTWM1UVp0bXA4VnlsUitGQllveWxYcFg3VkJEQW1kbUl0SFYyRlJ3eHEzZjR6Sm94NHQzS1pmcHNqeTh1L1ZXYlVnN1oxUjlNZ3Biako0dG00V0FETVFrNDV3RFNrVVJndHlFbXcyTUtSVFdERlpkTi9GR2FSZlpIYmE3T0xZTy91VDRpSEI0cU1jcXRIN0tWdjBicXdPWkYvdGVZK0RRNG9IVVFZaFE0T1ZRb2JUV04xUzdEQjhQWGMrenV4Nk9RM3hPMUZkbUVxQS92eWlLM3R1YUhTUmFXNDBPWTA4WlZBUFRXTVh3SzRaRU94QmhDOGZUd2FzR2h4S1N0N3lRbEJvVDUwb3J4K2tOcW9tRytxSU0xNFR5WFZoU0lEMTB1RUkyQ2N1Rk9xNTRDY1F2Tnp4L3BjZjhHb2ROWS9TM3htYVYrekpac3c3OWlsZTlGL1U4cmhQVkM0bVFsY01EcmJvRFlTNkNOYjRBS3d4cCtSRUZWUzFUSTZVTVp3NHdZV1FOUFFXNXROVG5GUGROZ3cwRk0rZHFnSGc4MjZKOHNpVmkzdW5RNFRsc2k5Z2I3RzQ1bVdMbmQvRHorL1JuYThSTEVlNTltcXByN1Nob3F0VndTSXZmbUdkVjJ2OHlwcWpVN3Y1ajZuclAxMTFwZ3NpTHhOamUxV0hCOGJNanBXSjgxZHRTMnBhbndUZ3duTjIzM1dxdzRiREpTWkdsQkpUU0RsSGVNWVpYWnRPOWZ1bFdNL2UwRE4zWnpORmJ6Zi9kczJ1WElMS2d4ZGt3TjlXRVRadTdsczVya3d3Ukt3eVZ1VjJGTTJlYWxmR1ZhaDNMVTByNTF0V2ZNNVdGSENKL1dNWVlVamhXeStjRW84ZXlXQk1YRXpXQ1ZMa3liWWpqMXZyVkpkbk9SWGV4c3JnVURMcWJhaDJvaUQ4NTdFU0dMYXZ0a1RMSlJmbU5XRThlYUcyOTBXbTVJc1hpNVRoN1d3bE84YzNMU24zZXVpN1dSNUg4eERZMTJMQ2JDeUV4Vis2eDRmM3RRd1VER3IzaHRsT2ZBRzYzMTh4a3J6bXNqYnF3WXRFVlNXOHZSOUtMZWhaN29KM29rYTVqV0xWbjlwV3Fjcm1EMlZ2R09hSjhlbitLaU9kVWJrUFhKUWZXNXhaYjdXMlJlRHRPSlRhME5iTnp3dFJKUEFaOVJ0cVNheDBxR2xMazkyZ3YxRFg1T1VRKyszWTZ1MFVLM1BQeURSYzhlSWxta1NjRVpwMHdTMnc2d2NLMytLcW5KMzR5ZU5hYnZGNS9SeURSMGo3OEh3ODVIbXpHVk9TMFdJZzlKQWVsZ080OXdOa3RJN2hBMFc5a3dKdWo5Q0VsMkdhQkw1cWtKWEptZ3NzUzZhZ05Wdjdvb0dpQWd4YWwrM3F3VFhmVGlsckNtbFZsbzhZMExNMkQvQU5oZnVpU0pyTlhWc0J4MFd0UGJrVmt2TmFIbGt3Z0ExY09RdEl5eUVVZzBPSEhsemQ5MVFXM3JsM1cwL3MzZHduZllLMGdDT1d6d1B0SUNIVm5OWDdlQmdSblJjR1FTcmppdWMxd253cVdVbDE2dlJaOVZoWFNlTUlTMGtmSkM3MjhrUGsvcjJERWRUUEk5MEdLQUptdHVSZzBwakhhRTVTL2xteTdIUUNZM2dCcWtiYmtwRGl0N0tNUHA5TGtRUVNaL1A1SXFEd1JDZVBSejdkMzYwT2dhRlRqc2VONS9ETzhtYTRsQ3hsNTFXY3BPOFRueWR1RmxtZmhmelZtdDZlY2g4TGVtOG4rZ1FLS0toZ3cyRVgrcC9EZXNpOUdBUlZnSzlrVGxPTFRrUUlhclhNYkpadGFFRDA2YjViZEk0YUorRVRYK0FpUTVKZHR1Y1ExWGFEenZERnExc0xhSmMzdHhLUTN0UUxleVVxeUtXVlEzRi9xMGRGajhZRDhrNnlkZFZGYTUrVnMrRFNHNnVDL25OOWNlbnVFTnFsakovNGNvdC9uN2YrcGlZZVlVcG8rRlpPbEZHeFJ2VjFXeTRWRVBHS0xKcFg3QUIzdUN0TEYyYm1XYUlCaU5GNmhCOTIzRy9UMm11ZHRJRTFmejY2VFV3M0FiclFyYWx3RUZoTzNaTExaSkd6V3p3endMakRzK3o4b1prODRnT3dvSFVBSEFnTHc4WGgyYUZNcjY2anM1U294a3RKWUJlVHJSalg1em5Ca2RtSTlNKy8xaHJjWWpZdGRacmdiclZUUjZjMDZvM211YUNrTlpjanJmUHNYbGlwYWpOTHdhdWZMNUVWU0tFQUhnem83RU14WUpXMC9vaUp4dU50a28wV21VL080NE5kVVd6SXVzTmtkWmZqZGZTVm8yeDhPREhINkx6VEh1ejJwd09UL09jQkVqSjFSVWpSOGI4NzVOSUVCQnVtM0J0dDZ6RW9kYjFoTWRvTWhyR0dxWFU0MkIwbTcza3lMdVJvYTU4UnhuR2lLeG1JSHd0Z05TdXZrQXF1dlIwS05Kd3YzNFllNFk5K3B2VzM1RTB0c0ZGMWd1dWpUTFUzNWZwVThEd2xBZlBuRzdIMDN6VzhYMGRKbm12Snp5WTQ1eDhsaEQ2ZzJKQVRFUjVteC9yRXQzbU56cTNPa2FVd0p2SWZHdStmcTVYZkJPSGphZnZRRDZJb3doaGI5blFheFQ2SkRmU2I4Vmt4cm1WVm5xdTVyWEk1UnE3Ukh5TUpSaU5Kbk9IdDhrbXZiZ2d6WWpnblRuNGR5ZXhjU3pPM3ZReURvSjlsV0lqdUlzUktSOGZiQUFYbXp2c2x2TXViYm92VGFtYzdLMmJSVWYySDB5UmpMdEpxZVR1eUFqZThZUWNKSkExZGNkdHp1VkNlMC9FcmhZTkl3dTBZT3pFdGViK1NsTUtPVVFzRTl1dVp1dnVRWFdiWHBYbENidXZKQVJYUHlBbXpGR2hJK3VPR01CSDdEUE8wb0RVdzFNNzhBTjNoSjZFQitxbzBZUmhJNThiQlhDSVVMSW15Z2hXVnNheXNJU1FCNTZocUIySElwWHpPek85RWxGc2R4dUJPWDBpUGhTeE5QOWVWaHlTU0lwMkV6WGthYlI3ZmZReGtlaVRENEwwRllDR0dpTnpNRGRJalhoaGR6WFB6ZVE2c0hVd0R5Z2RVc3d4K3VtS2lxNDlvNVFyeTRFSlBjaHZYMzJtSjFFWlB2THJKNnBjYVZ1bUMzcFFxWHpqMmV2WDRvcFU3dk51MmErT1YrZXJ4dklqMlVibDZBM25Sc2t4a1d3OWZOQWVqVndNSUU1UkhFU281eHIxeE5LczdjY044TnczMU1mLzl0UkFLTkRMSEQ3Y0w2NW1tZXBhb2hrblBlTFluY2IrWkdBVnMzUW1lczV5Qkd2NHhiSlI3UnVXaktJV3dRNmxmQ3RGdEhBZTBXQ29vMURDK1NCNkpzZG5wRW1QZ0IyZ1NRNkpVaThWRm9JQmhWM2toQ2hmMDJZeGo5SnZlZy9US3FUd2czZUhQTzVzVmtXRFl2R0NTYUJ1cUk3bmFBOW9OQjg3Mk5nb3VJUWJrRXJIYjg4SjJkTmpTNkpwRHJUZlY3cmg4V3J4a3I4Y0IzWmgxMktuTW1LcUhvMXBPZW5odEY0NmF6RTlMYTg3dWNSdjNKUjJ5eVE3bUlObGZkbkdqblVKZXQvRjF1amUrcU82U3c2dllTcDZEUnNpR2dKNUJjeFhWbzNSNUxWK1lWMXV1emh2aVhEK2FiMVpHTkR4MlB4NG5yYW1hY2J0cUhLb2N5djMwZXpCMjhHcmtqWGUwK3hBa0J3YVRNekxkWW1GTzlPL2cyR0llSEFTVk5yVHo0VXhySThUeEtqalZKcXJ0MVhyZEk3RE0rM0RlK0NRMWZXNS9WM1RYSGRmeG9yRXdNUFRieHJzUmFZcG5sS0hNeHhaSHMrSmNmTWI3WEdwUEJXbUxmdUNRL2ZTemV2MlBSYXVDejZBbGwvQjRFQ0V2dEZvOUJyR0VkWnBuSU9JK0xnZ241QmJxT3dTYmppLzFocUJhMzRuOWZKOUFEM1U4aWJ1YW1HR2QzVzFMdVJsTm9oem5Ma3VpUGVEMWozQ0REcDVUVk5HQStGaGRYb2FZRXlNVDBxVHgyUm53cHM4SXRCOWZISjN5YTVGZWdDbGZQMHJSbGw5ZDdDWjMzM2ovaGczRzJNdGF2TTFmQlVOQnJOMVRlRldGMG9jN2l3Q29RdkttZVNwaEJSZUh0eXcweWl3OTBuNnhwZ0NZeWttb05LR2htaDBJVlpZOEtCa08wVzFwcVlJaTlNaVRWRzk0SjJqaCtjdk9TMFJzZVFLNWdVRDhFQXFQMkNhcjlJalZodFYzc3dQVk56VEIzdndZQ2tpV0JVN3I3M040MkJBbjZOMUc5Zmw5TlgvRDVBK0ozazlSNk5VVy9OeWJxVHJWc3p3NXpmT0Q4Tm8xb3RZdlgyU2dZTlgxMERjNVlvUHVKTFVqNjZkVHRjT2wvUEViWVpQaHJpMytPKy9FOStOOWpiZWFRck9RNWdKMTd4MENKMm1Eb1lZb05CbFROV05IdXp4YS9EdWZqcnd2ckcwb2crWVliRkNiMFRCRC8zbzdpdHpON2R6WEdvZHo3ZkozNnhzRE9reU9TQTQ0TjhySFB2LytUTWFERnBKbjQzNE44NU0vbWNxK0NLb2lnaHl3ZGprbFZ6Uzk4SGc2UUdCR1Yra1NhYTFLMGx5UjVUa0RjRE4vWUpUcFIvemZielNrazVldkY3UnVkRllLSnFtSWhFaVJFaXIwN0ZFQk5hejRFS3o3ODBCTjNxSzlyT2IrNFlvMTh6NzU4bmNrZ1M2TytQZ0xIWmsrdlhlcjdJYnU4QnF0cmJzMWYzM214NTJIZXlaSngzb2lHODBYemRiQTVTLytFSjdMeEVmczJkUHo0WWdhc2Vod1JSYUxLTFRrWWdRSlhrUFJiQWgxanFYbVNyZHp2Z21mRSsyVFovZm00anR5K2RqKy9mRzgwaVIyNm4vNjUxaitiT2RFZVYzZVpMNzRRVWlzSWJScjNTSkY1VG9uV3hqZmlJR2VkM3hhY3VYWUkvWEM5WHRoWUFZa0RVWTN0MUVnVE5PUmtnRThRNFVEU2dVUWNPSEVBdWdQSjZGOXZVWlFKNG5MZFFyLys5VitHZ2E0dnNReENETlg3NTk1eU5YcE0vZld4QW5wOXcrQzZqTkluMjVVNW9zcVFHckdIWHBCTzROamJjdTZ5NWZjdkpvZHJId25wV2FGWFdEVkdGcVhmM1pXdU56N0Y5ZXZ0cnlqRzVoYVRvSFA3WHZ4Yld6YTJpRmdObFhwdUtjSHlLNnRITDVKa2l4UysxanV1bnV3bHFEMzcvVzBGM1FUY2RJTFVXMEdOZzNGYzJrcDZOS2k1bEFUbWVtb0FrSVQ1clp4WHozZmRtcCtRTm1HNlJGeHgzRzZ5ZVhpb3Baa1Z6ZmxkWXJUZlRaenhZOWdvMitnWVhtWUloUzNja3Q2RUVQZXpZMjNaSGhqRzB3UHVIdDF6c3o3WXNkR2VQdVpZbGVNTUlzS2EwbWJURnJ1bE1HeTNzbUplUkNzcGY4UHV6UTRISVJxZGFJWExoRTg2N1lnWUJkbnRYa2MzNmJVL1A0dy9rcFpUOFU5RjBNMEIwaG9Gbm9OYTB1Y1d3eEZpNTBzN1QxNXdOMHdxVFpmQjdyTFY4eW1oYnFiY09GL2phZGF2VWZOMnNoWjBHUTFwYjRONDJrZEduMGNWVEQ5MS9XTXljbjVlcUlSVC8xK2RGa2IwdlQxZ09KdVZ2ckNJZjIyVXVLcHA5MzZTRlcwcWxzcUZ1bUpQV09UQ3p3VTc0WHNLQStXQnhucUROVmtBZkFxSTNqV3FzaHluOUhNYTk5U3ZaQm1Hdy9LY0IxZWpReW9QRlk1c3UvT0VQRDcwVHlXb1EvaWZWUjNsOHFUU0F1dlRVWDRGNFNlWTBhTkZ6UUFpVlFGZzNaRDdHLzMwRUtOL3BjRXNBQlNqQlhZOWRpNzRybFhwSmM0ZFY0OGphSUJyQXk0d3pMd0lEVlp1KzNXZ2ZzdTBOcE9jWXd3M3ZYSFpRY3JSQzNOdFFzTFBHbUVNWDFBOHNIMzBZWnVnQll1anhDTHc3ZSs1TkRUZGRROGViR0IrWWc1YVgwS3Bxd0l1cFNMcjN5RDVKbkZ4VHZmYW5wNk9HMCsxK2RtRjM2SWdHc3c5QkJjUDUzbmZIUDdObjNRWlhwc3hNK0tweERObjErQXFXQjRrZGpiaWFZdnZQcVA3V1E0Sy9EakRVWjcxMy9EYkY3QkdLU0tKMDhYK0wxVFJSeXgrVlc3Mm9PdkExM0FRdXJYdTA0OXQzTjlGS1lFNFczYzZFOTZhMDF5WWR2aTc3K0RCUlh3OW1SQy83TFBHSmxrQSs3UjcyMjFjR1FmY1dveTZVS2NyZnhBdkFmQnlENmNOYWN0ZXFIQ2FlK3BDbG1MR3RHQmdtQ1NQN2pCSFIxdGQwWDk0dTM2MWJEK1lsMmdZczk5dGtvQTF1Yzg2NFBmQlRpY2FwcWV2aHFYQmZlMmJQbGkrUDFIak1aRmF1NEJHdVZNR2wyNklhS0RsSjR6NjlYUjlHeHhYSHM1MFdiTGJpOEExOFJUZUVyaDUxV1paVDFoVFRGZ3B4OFdqN1NQaXFUNnNrMk9LSDg1cjRDNjRVc0RLenFuQkdYZlVVb2FGODk2blVKbmtTdittSHZSSWlLTUJoVVFPbnp6R3ZIMHE5K2FzbVk5YXBxWnF3V2M4YUdET01FTWxnZVFxQlNoMFVhUUQyMkk3c2VmVGFya0ZnTE5uT3BBMGVIK3F3ZDZnL29kWCtWeVd3MEIxYTFtL3lMUGM1VlFaOXoxWkpPOExYYjRZb3JiZDEvV0xtZTdVRUI3QnIxMkZjRmcvWlZvMjZYSXNBOUp0aUJLZGF6bG94RlAwUVF3T0pwUVVvRWpndzkzVnNRM3B0MHJDS05vaDZuSnlYVkdjT3d3Zk1hZGNYUStVUnZILzUzNSswMGVZNEVnNS9aTCt3ZlV5MXBHSlVrblpPam5iakVtSEVZaHV3WTBwK3htNHhaTTFLMDJ3MURXY2M4YnNpbk10bWlaV055dUNCWi90bmhIWWp6L2daT3FMdXNnd0J6UVZkdFBGUVhlWUR2SGxSeGN3dHNSMkkxalI5U0tpZHZPYjJwazdEMC9raUt1T1h4M3BtRHc1RkFIUmJtWFZsWithbFN4ZSs0SFN1ZGl4ZmEvUEpZWTZFZW1vMGt0SnI2OGg1MlljR0t2c0g5RDd4OUZWN0w5Uzd3ZEt3S0J1WG1CVzdmYk10WjBCSVJ6RmxQY2IxbVk4bnRwc1gyWWdBdXMwY00wcXhSTFBXdDExS3h2ZmNqcXJnQzlhckUzbThKN2ZlSlJjUVZKQWVzODRyNnUvbWdiVW5xZHovZzBDMnVKb1Y3a2s5L0tXQ1ZMb3dXNU9SUzdsdloyai82cUNPa2V3K2Y1Mkkycnlxang0K3EyNS8vMXlUOXREby9teStTbFpsejlscjhPZGRqdUNIR2xkckRCbkVHRXduSlhCWG1kSjdYcStKS3RCUG1QUmVwZXdtVzk0Uk9HVkVZOUs0OCtyOGlFaEF6blR4Z1ZHZEU5T0swRVhuU0NGZHh2RjhhNEtUQzFOeThacTI3N0JOTGlGY0NITUQ1SGVoWXRjaEQraFo3OEZXQm9CQU4ra2hMeW15eUFJR1djbGE3TFc4MWxnaWNDUWR0ZGlhOE1QQUhka0h5SHFHM3BJdWh1ZXZNL2JpeGdQeXNaZTRSd3I0czRMY3ZIM1c1QkU4Z1YvNncxK1J3ZWpNekNSK0p2OC9HOUVXOFF6K1F3ZUl4WktDakErblg0YzZ0bjlZYWZVTmZsOFUrYzFXTWR3dlhBOGRhNlozUlJ1RHNYYWdBVnZUMFp4OVE2cGsvcXNDS1NBejgxelh0ZnRGZkVETlR3L25NYmg2UVdSWlRZNEtuNS9PRlhmZlNBai83NmJCQWRpWW9SRnA3YzJNcndYQlRadDVwRDFzbTJHSVZjRWZ3dHAyMGFkZjJpWlVYSTN3RFdsQ0FWWkk1VkxmNjZtTXdHWUF4ekN2bGlHbys3dmlMMTlZajRJS3owN1pvc01QVy9QcWYwL3JJenArbVAvTzdKeHhIMEx6VFo4ekd0R3NPM0VJVDV4NlZUclhXK0w5bGdlOVVNTFA1WmJmQ3ZPWWxHbk9pZUJwRW5SU0J4TisvZUJOZjBqYnR3RUU2QmFvelZ4VjRxV09MUTcrNmlrZmRHK0JLd3V4Q3lJK3IyYitnMk5NdGtYN1I3Y2ZWREtXaS9nQ0VrRDFjMUt5OHNMWGh2Z2VPUHZoNHFKWjZFOEdyN05UYkVGUGMydkRzVzJXOG1sanRGcDZjQ1pXb3NyeVJISzNROUR2Ujg4bTI5TmtWblh1cmlRSU9pU3NhRHArdjIxTTRmbFVjTHpZZXZCQUM5citNVnFOdm9EUkNnVkZqY3lnTlhLN0N4WUZqYi9sbzA3VnZaUXRsMG16bi9PdHYrZEoxMWR0cndIazFVQTZ0ZEN3ZXMzazBuVTJMU3hzeDdOTVNQWmV0c21hTXVrSkhvUFhkQ1I5SDZvem94R21yMldZeUpaTE9aRkFkZ3cyazlCQ3ozWDY5M09MeUdUc3kzcStlZUpKc2U5MnlhSWc2NzEvZjhlZ240UEFNeFFLMlh3MEx2ZmRKOUI3YytRZFNUUFN2bENyWjRMaC8yaHFtN3RiYVhEYnpBbGh1ZFNFbzdBZXVXbXFwenkxWEtWMXkxVkJycEtSTHFWUzVsWnFlTjlxOUJzVG1OVW9RTVdSTklJR0dJMFhreXNFU2NnVlpvN0hoWXJBMGFBbFNvd284RlZmdXkrWEZtb3JoT0VFb244dTV4c0Y1WUl3NWNpb25vTUlGaDIxWFIwc0hpdXVtRHRKZncrbm41aFNWRldMK1Y5UlUzRll5SUZKdlNHdzJwTlV5aWdYOEt1Y0RtamFPTzNCdm4wNlhzUWhiZk9hVWRQYm51U0RXbWpJa2s1MlRZVjFhTkkzaGxraFdyS0VaUGl3REdyeVBjUGI3L0l4bHo3YXBIa1RoL1lXdmZtc3NGNlM0a2hidkQzcUprUVVXWEJYbmZpQ1VVa2lKalFKbDhMWHRFOHFkSTZqRmJkRjJKN211Mjd5WGw0M3o5N0M5ZzFTTjJXd0VvK0REa09iUGVscEVIWGtkMG0zRE5Ja3VqVk5LTkY5VEllemYxcXhwcGRDSW1oZjhOd25hcnY0UC9WT01NLzN3UWN3NjRESUp1M0JuanhEd0lEVWpOM25hTW1vamV6bTZQRERjRngrT2w4TzVRdXcxOEdRbTRDOGE1aC9SU3o2UGNGVzZnQlRGMlRHVnhWUXFPbkdaSWFLR1l5YWRPQlV3V2h3cEZNNFkxTXBZQWdIWHEvQnRlTythS2JjR0lVV2dNS0t5TlNSNk5oOXV1Z1lzN0NDcUhDejB3cWdwM1lmWWJIbkVsRVpoZ1dmSlA1NDNmZCtPUzQxSU1xc3pHak02SkdtVXZ2Zzl0SHlFZ3ZDSVpUSzNXRUhBUkNMbWNpZGlSOFRCM2lRQnF6MUJxUnFXSi9EQVJFOFMxSi9VNEl4TDBFV0JnYjZJK1FMeDV4ZVB4cmRWNVNmclorRjJHRWpzVVpYVk5IZ2FETWROV2tzUU5aL0hBS2NOR21VMG52RUVCSSt6T21FMWl4eFhQbTRtMWJCSkhUK2tWSGt3bzhwWEVBa2FzWndUV0MyQUZmUlZZdzAvVVk0dExxMVlxTFNqWnl1YVI2ajV3SmI0QW0reVQzR1dWWHVjM1lnTlU4M2diYmxjOEpLc2ZValEwTDVqM3BVRmNYSUdjb0FWMEM3dytiNXFSaUpXeEJFcmtuOFp1WGV5V0FvV2ZlbWxBeGRwdkxkdy9yaHFYYnZhc0VYWThzQzFoZnlLY3BCOGI3bGJ5UDFYQWU0V3NjTHp4VU5iZDNYMjFOWTNQRUZ6d1h1THR0NVJmNWlLUFNXUUlqc0l2ci9Wcllidy9PQzdDTDh2TS9CVEhIWjU1WWFKTXBET3Q3UnRhdHBaT2R3Mm4xNURoK3RMalM4QWZ1WGpQUnpldWI5UUJ6VnZkcllKaFFFVUgybWt2MHk0OThCR3duZnZpanRvRmJVM1NkcTJYL2QwUzN0THl6U0w5MU56ODJPZ0JQZ3NhdSt5Z1QrdE9BZzUxSENmWGRHZnluR3FFUlR2YThBMnFQTDdQYTJOM0xzL25aZEFLOTl5NkNrMjU2NURMVzNVeExKUlkrMnQ5L3h1dnJQWjB0cFNXYjZ0MHJmVjByU1AwOUhXdXE2MWRieTFUUXVpRXJ4TXBKZmNwcmRERlRVUFZiTkZOenRZYWoxbCtkVzhuNXBiWHVRMHExdWFENE1ub0ZDaTM5MG51aGpmOXlEWXZ4eXlJM1NhRjEwWHgwcmxKaXc2M2Eza1U2cDFLMmR3a3Z5eFd4eXIxYzhUT2tGT1hXS0txajNiaXZJRVgySEdiYnBBWXVYRGpxcEQxc0UrbjFadG5jUkpybW1nY25pVkRPdXd2UFdTQ3V5d25uOWFZN1V2MDFETjZ4RFR0MXFsUTllN2hVdGJoTUtXcGNKRUJTRmI5ZVVZWEFKSDVucTBrdnNoRG0xRnJXVzM4bzdCMjlCbHo4NTlXeVBQQTErYmp3YXArUHhraHRkMUlLSXc5ZnpseWs3VjJrNU1ubXVWWHNtdHRVTnpySDN4dHRZSDZKcWpPS0syUStlbXYxNzVQcVEzOFQrOW02Uzd5ZlU4cThEK0J4aFRSZUhDdmpUbldrQU05MUpZMlFrYjVBR1BRcVdKcUE3Nm5sdyt3L2U5T1lCaXBpNGQya3RJZU9ST3YxQkZjVythZ0NoQTNlc2xFWFVHYmNJR0FSVGM0bmhUMTFCWjY2WFh6VEZMRk55WklUNU1MVytyeUJtb2RXMlZyRVhEUk1acVJELzJxeU1MNzJYZ1FwR0VMZk5vejcwZ3ZvN0JrQnp4V3A2ZWhBVmFjbnBldFhrTjZ4SkdkZ2lKeWhwSmg3YUNNSWdETWNwUlQ4cWlhTHZMN0dhTlUrWm40dWlscmdhM1lvTStpS3NISHFqOUd1NG5ncnBGSG9XcnZsRlFQc1BjcHhsanFPTHN2ZG1tamJyZW1zSHJhOSt1U3NHRCtvVnVwYnNPYjdGeFpZVTZzcXhSYmR4MG5XT3hra2tpdXM0dm53L0swV0NKUjV1STc1WFhUMzE0QnMrOURUbkJ4YnlSbU5HNXd3NUJnV1BVSmhuWnNsMldXM041KzNVcmRpVTBMaXF4SUM5ZkpodWZObCtXVEpxdTBMY1Nra3hYNHpGQWU1UldSTFZjUGo1VE0xTkZSdFA1YmJma2MvWWJOTlVJaUxucFRCTFRzcnNwZ0NNWngybkZha012SnVjb2lqd2FVTWFLZUw3UVF1ZWo2S08yM0pGbFFJdFV1all6Ty9TWXVFMDdmYnZJUk5HOE1uY3BvNWQzbDVsSzBqSWptZHU0OVk5Ylg2bzI2WWxaYzdQZkhmOTB2TWRtSGx3WlFUeUhETlgxR2w1azFqN2NQNC81TU5FcDQwUUp6VE0zR0xpdjBKcmZCUjR1QWZmMHFCQk1XMEtVNFZtcTJPTXFjTE1kVERldmFQaUNtYlk0d1l5VkwxZ1pOblZSc2o0SExwYUF1ZWFucTRMY0NwbFhwUktpa3ltVTZZYWM0ZXUrRUlvKzEvTjUrczlGd2k5MFFQMk5yZ0NLR3BURExES1dMYVJXNmtiUGFtTjNFWm1LUklRUXlkVWViRVMwK1hHcWRxaGJnTVNtNHVIOWhiN3dBYXFPSVYyQzRLUFV2bUlFTDFBUGZBMzRLNWxtaXhWMzZHODBLTHNiVW8xQ251ckN5QlJGN2tjRlMrOUVzWVgvelFmZjhCL2JmZFBreXpzcE1JNHFqcG5zWHJyQW83LzFxZGZuUzBUTTNBYVMyVVR2UjhlTFZ1TGVqdXdMbEhkYnduVVdYWkZWbW94aG5hTExqakNiTmZpWjJRSkpMZ2lLMjhxT3VreWx5eFp5ZXVKUDNDL3BJYlE2VEYydWhYZ2FjS1pXRmJ2Z3ozR3Z3aDVnYUdkdElDSFpkQVB3UGFDekl1amFlMWZNZE9GOTJkNFF3V0h2T1gyTEtESmxqMmk2Tmpmb2hxc2doRnV1RzloS3JhWE4wb2hWMEVPa0dhTExMek9NdnVoWEU4dlU1ZGJvY3Nab0RNbE1JVE55K1RXaTBKS0lMNURVKzAvcGQwZjBRNG02Q1hXcDhNSFFJK1Y5bmhuY3dTREtNY29RL2NoelY3OWJLYysvdnZnNS9TRndPNzkwN1BENXUvZFV5dmV2OUQyalgwWlpkQWVTUmkvdmY2cTgzV096SnhpWVdoaktIOXA2RG1LVWR0dzM1ZjRTeHF0Ykg3b2pTY1dIRnJuVytEN2xZbTFOaytIbWF5cndkUFJDdmZZbThNc2xqeG9mRWMyTXVEWDMydy9NTStpbHV2enJEWndUY2VsdHVwOXVodDBHbDQ4ZCtRbkhXMDVVc2p6WGEvbm4yYk5zODNUOUVIWm91OG50NDhzRk9QczE3ODkzQ2JYYjJzTkxXVEdOanBVNEFNT1RyTGhXeTQ1UFhxdVZScXhPVlFUV1NHTldoeXI4eUI1NDhvSldZQVBaWGNEaHpjS085Mys4QitPNVI4eEtxTjVjbW95a0ZDbzFyaFlGWUsyb2hHZXpSdFFWakc2cDhqbkFPbFVwaitQcWJjUy9ubElDTldRNEM3QkVjUDFPYjkvWW5jNnRhNEkzTG5KSVZrYjdObUhkV0tqMndyOVp6S1RpNzVzWEsxTkRlNXhkWTRvcHo4ckUvUWVuSC9jc1dYWXFGZG1iY1FqWDJBZml0cEJFR3BHN2ZQSXV2ZkNyS3hWYXY5WVFZbVdramc0M3FBTFRmSmR0ektvVXhueEUvM2ZST20vUmpLaTd1ekFuT2FnZ1NGblhucGJySUhDMkxOZVdvdkZsMnBacXJnbi81S0xrc2pFaUlNTmkvSWhFby9SRlpaZy9heFlES1MvWUpVenJVN3RnaDl1RG03anRwQ0ZJV2I4OTJ4MkkyeXF5TVNyZWJyOUlxMlBXc0oyTVhyd3JOU0loM1FBNUEyL1pVSUswMWZid3ZtWUVGOHFHcXBCaUxHWHFYUzhldXdaaUxJN1Y5cWFQTGhqMjBVSlA5MnFWRjZWNHZVUWRZczM4bDlCVmdTbmNZT0c3WlZrdGl0cmZmdnRCMmI3UUorS0dtbk5ldkpValdldmhpQkN2VWlHTlBkeUdlQVhMdDBKNGZwQ2MyR2tGOTlYVFVrRzRWL3RxcEtYSDllbXBCeFZudjJ1RFhYcGZFOG1zbW1OV2xPTVkyRit3eVZETUdTZENZZVBtWW02VG9kT3lDem5UNW5ESU5GSFFJaVg0WW5VNm9WM3E5VWd3bmN5bE9HYVNabytYU2FRbVZqdXpCazNHYUtRWFJ4Wnh1ZzFKdnMvMHcyRDRmMXZ4eVVRZUdCWjV2VElEKzRkYzhzZDRUKzNRdmxmQVhCK2FJNytVemM3ekZBK0xPWnhmNUtDOFFtMXZmOHhJQWRCb1V6bDFOS1ArUkhkRjRmaXA1bGNhbW5ZM2QxUzF2MWIvdFdQSVlpOFJoTDJrNVE1bmFVR2c4VG9hMTJpVG1GbWJVQTBVVFdoMENUT21TK3BpZ0hjbHBEaHg4R2FvdlNXakxYUXIwVklFb2gvejFLVVR0bjNYZU9nNzlEQys1Q1NVNlJyZFBlbVRYLzFzaWR2NkQ1Z1ZhVlpzSlRQblV6c2xWNnZGVXZYVkV1blZISWxFYzdWWFpwTkxiYkt2TWJCc2I2L2tzMytMb2VYVFY5SVFzZ01OOWwwYjJnSlpuUE5wT003dXZaNHVXYllkNTlSVE9UdzNKR1hwbnZxcWhiWCtHMERLVkN0Z0VsMVVMUlBmM2VyZ2tOOVBGNjRFRUhXWlJ0M0UyNjIxZlBTSGFqK3hTTDJIaGx6d2RUMnpxdmgvd1pkc0NFak5vNG91SUxkN0ljZTFiUkh3ZnBWV0JaaGpmWmlaVEF0Rk5WTUxnNmdXTWhocW1XaEswUjNFcG9LdHh5dVd6UzFxNW1ycE93cThlVnkzQy9GUmVSTUlIS2VaS0VJK2VZaXVvbWwyQ1BvTUZqWDZxOEJsdjBjRTNWdW9RazhLNXllTXBkTkhJSWtzM3hoTENTWGxmRThxdjN4K2p3OVFZcGhTNHpMSE5mM3p0ckVtTUowNEcwMTJVc1BYNSt0cXVrWGJWMmhLYlVrUlRJNmMrRHhEZmxNaHhvc0NJYy96Z0poSEZVdGRqeWx2V0NrcHVMNDJkV0RmcE9sdWFxbFoxaE5CdE5zTGZCR1JxVUptSVN2OVo0RkVla3Znald0c2JHcjhRZTUySTdpOUpmZ1JYZ09RdlY3YkpOYXQrT3R0WS9Rd3lrdU53SDRqQzFiNVpVdlpwNyt1cTJGa3VyczRtZ09oZHJXL2Q5amdUUTY3cGdLRHI4aG0vazdvOW83czUwNnkyQ2VlWTNQdU84Rm1uYnp2YnRZUExhMy9XL3JaRkpaN0dnSU0zNjdYd1BZamdNcHIvRU1nNFhvRG01R3VsMWdIczcvQ0lTYWIzenVnazA0TWFBMElWRVV2cm0zdXBXRFI4RGNLaGx0UU1GeU5naUVUSS9nbmU2MmtUZDZjMmRiazVXSERyeDdaSklzcWNLWXZTdUpSbElhaW9CdEZ3VHNvQ3Y2VW9nVEFkY2dKTGNnSnp5SW5QSUtjOEtHVW9pOTB3ZlNhUnV3QW9vK29xYnFSMnVjUnBnNC9jajNCVEpqOUtlWng0R2ZqbW1BWDVUbVdZQ2xUTU55bXp3UWx4V21EUjlWKy9pT2NKUFpmbUI2SGwrQUdqWTBvNHRSdDF2Y0h1NGJGYW4yeXorQWJSak5iOG8xU1RqZEdHcU5PeFg0U0lUVnB5Q1BYSTh5aGlUM0JBaVllM3pJVitLaGs1aVJDUG1qVCszU2xlcCt1QnZuZzVER0xRZkVYQThFQTluYnJuWG9Bc1h3eGU3K3VJdEFJZm8zNjhVZzNRbUJxK3dqb2JmUXgrZ1I5aWo1RG42TXZ3SmZnUGVrclV2d2FxU0srVmQ3RDcrRDN6QThlMnZoMkl6RDl0ZW54VkQ2SkM0NTEyeHQ4bGo1SGZUOVBmeHArb3M0SHRBVmR3WXpLbktxK1FzenhleG8zckd3TGNyZDJWZFFRTjFtWHgxUGN3QzF1NHNQYnpCTkVMdjJMYUxEZFV0UDJvYlF4SzhhekhvTzRXM2lEM1Q0OWZXZVUyZWZSM2Y3L3lMRllabURRWHZjOUs5bGFnVVVBTWVMZWZ4YXNBakNIZlZnQVpCNklkWXM1MFh1MTNicUxGOWIyNEk5WkQyc0RiaTE0L3o4Z3kxaXhsdGpndk9VQjVMb0FnQlhZemFsSmdzYU1yUjF0WFlkUlJsR0g5UlFkc0UrNnhtUmc4eUllbzhveFJ1TVFCU29QdU1PTVlNTGRzNHhHQ0orSDJTTWk1YWJ1cy93Q1ZZNXROQTBYbTB5OXhHTTBKdEFPcTFwZ0swQmRLQWY3REtHdjBNZm95OUYvWkdsYWxOdmx3bmxDY2hndFJMOWxXNkFyNEtOK29TZGdJeFhwSUp5RjI3Z08yTy9OQWxoMVZYZU5PeVBkOS8zU0lLQS9WQ2szOVk0RVBZaXVIZU1CSEpwV2ttM1FlSkVMUEVZTDBXOWdnWkthOXpHSHp2OGJJN0RIZS80WWJoZmUyRTlpb085Sk0zMjNidWJzU2tRdmlNdytuM1FOSlVlOHRPdHJ6eTV2MkVhNjdBMnhWWlRzNHU4eTFqam51NTNOQzNrRWJpRS9aanNpdWxPajIwUTY4VTZZRWltdHhrdXVDM3ZMOFlaTG8yc0ZFYWRReHV2RzlsRTBldDYrbGsrN01RSG9OMFBZbHNhWGIrdmFOM3RyMXk0MmRWbWtmU2JWNXhpM0JiVjF1MTFNOXdEMGxPekxYbllDUjkwdDR3dCtyaXVvS0ExOXl1d0QycExBSndRN1ozeStjSW5pOGtnNjE4blVTQVQyTzZWSy8zV0JJYTFoVDJldzdFb0ZTcmFNSWorVFdFMCs5NHJhSEFKd0VUOStaN3BsWEVqcTN4REgzUURnNUlHTys1TDhMMitKLytpd3p4UE14Z0VpQmdBSS9peVpvSEFtTVAwL2VFNWs5eTZpTmUxazZ3N1d6NHVjcnFUcHh5WjNCZVVKdjJSeXAzWEZUUFlkeUw3Skl3UjRSa2p6TjdhelhpMkNJTUUwcFRYb2RaYzdJU2pkK3JMNEZIeEdFeTNBUkhVQXgxVi9MWnZpamw4d1dWMm0xZlNDZitzd2MwVzA2T3FhNW02U0t6eXRSbmhRVmFnTTZNY2hSZ2tKTVhZRThZaEI5dW1Lb29UcEdScU5rSzRmeDRPVyt1KzRDcmNHWXJnVFo1dm1HOVRVanRmbmlxWVpVV1Q2VWcwZUUzaGtpVUc1bkJwZ2pGMTREWGJvK0RRUmJmcFYxM3pNcGxJSkN1YytWTEp4R2dhenhGd1dJM1pMbmo2NVg1MDB4QjAzb1owTUw0YVNQNkd2UVhLYnVQTXJVcXZtYVFoM1VHWnJSVVpOaVlvOXRYVFJVN3hHbGRTeXBZNDViQXJMVUxNenRBYjY1aW1kSU9hUkRZcElVRjVCc0lvN0tRNi9VelN3dEkyU2VkUzFrN1FvSVhQU2MwR1RGNHV6V2h4THh2d054RjdoOXIxMkxMWVhJZDlGRDVzck8vUzMyYktlV3paUEpxWC9BTTNRaDFwdWZTdDc2amlRdllFbDFtTTBlTTdUTWt3QUEzdDlTRG03NlphWEtMWjU2NXZwTzBpeHZmUXlDSTJqNUJPaFYvazJQaVYzc1J0NEtxRmwvbUR1RG5VejZtN1Z2NzhSUGIzSTFqUE1YVkNxVllpZitFVEZIblczcmNoTWI1MWUxdXVWcHpMMGxnR1RJQVVNYVJVRmNLQURzSUVFMFFJWm1LZnlEVWxGWlljbzJhNi80M1FEQ2FYc2tjTUdPSzJzNUtGenFQeWk3c2pmSjlTOE5Wb2pqOG9YMU1qdXlmRUVRSUNQY1dpbUFXZ2pMQndrSnEwT0pqaWRIWnoyaVkzT1p6c0VrZG5yRU5seW5TTllZbDV5aERLWFlnOGoxYnFUQ0Foc25DN3k1S3RRS0p0WGxtSXloVXU4TkxMQkJaaXl1UU9VeURiSmRFVW15RFdackw5Q2VhYVpZaElIN1VTMHVKWG1lYlRJaWpaQmNyRjgwMjg2SnlldjdFeTF4RVFPcXNtVHc3bkt0ZEFVWmV6eVRlRGxreTNYQkdVWjQzTEtwaDdRSEs3eHFlQVFldnRvY1dSbEV0SmxBMDFSWk1wUktUVkZYZXJweFZ4RnhiNjhuRjdqc3E3R2JkVTIwQnVlSVZKT3dzZkZxNFRQQklVU09MaTRKTXJRVno5OWRaTWhhUEM0V1RzWXlnRW5acXM0bXJ3WUtkeGV1UGxZS1RMSnFEUy9WNG80aENvK0R2TlFiL1FJK3ZIb3JlZmdNVFBNbTRZNXUwNzVQNkpJWGhIL2UxL3lud0VBKSBmb3JtYXQoXFxcIndvZmYyXFxcIik7dW5pY29kZS1yYW5nZTp1KzAwPz8sdSswMTMxLHUrMDE1Mi0wMTUzLHUrMDJiYi0wMmJjLHUrMDJjNix1KzAyZGEsdSswMmRjLHUrMjAwMC0yMDZmLHUrMjA3NCx1KzIwYWMsdSsyMTIyLHUrMjE5MSx1KzIxOTMsdSsyMjEyLHUrMjIxNSx1K2ZlZmYsdStmZmZkfWJvZHksaHRtbHtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS40fWh0bWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLXBhcmFncmFwaCxwe2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjY7dGV4dC1hbGlnbjpqdXN0aWZ5fS5tb25zdGVyLWgxLGgxe2ZvbnQtc2l6ZTozcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjE1O21hcmdpbjo0cmVtIDAgMS41cmVtfS5tb25zdGVyLWgyLGgye2ZvbnQtc2l6ZToyLjVyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMjttYXJnaW46NHJlbSAwIDEuNXJlbX0ubW9uc3Rlci1oMyxoM3tmb250LXNpemU6MnJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4yNTttYXJnaW46NHJlbSAwIDEuMjVyZW19Lm1vbnN0ZXItaDQsaDR7Zm9udC1zaXplOjEuNXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4zO21hcmdpbjo0cmVtIDAgMS4yNXJlbX0ubW9uc3Rlci1oNSxoNXtmb250LXNpemU6MS40cmVtO2ZvbnQtd2VpZ2h0OmJvbGRlcjtsaW5lLWhlaWdodDoxLjM7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfS5tb25zdGVyLWg2LGg2e2ZvbnQtc2l6ZToxLjNyZW07Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjEuMzttYXJnaW46NHJlbSAwIDEuMjVyZW19cCtoMXttYXJnaW4tdG9wOjMuNzVyZW19cCtoMnttYXJnaW4tdG9wOjNyZW19cCtoM3ttYXJnaW4tdG9wOjIuMjVyZW19cCtoNHttYXJnaW4tdG9wOjEuNXJlbX1wK2g1e21hcmdpbi10b3A6Ljc1cmVtfWRpditoMSxkaXYraDIsZGl2K2gzLGRpditoNCxkaXYraDUsZGl2K2g2LHAraDZ7bWFyZ2luLXRvcDowfS5kZWNve2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMSkgMCx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTIpIDUwJSx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTMpIDEwMCUpOy13ZWJraXQtYmFja2dyb3VuZC1jbGlwOnRleHQ7YmFja2dyb3VuZC1jbGlwOnRleHQ7YmFja2dyb3VuZC1zaXplOmNvdmVyO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpO3RleHQtZmlsbC1jb2xvcjp0cmFuc3BhcmVudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjp0cmFuc3BhcmVudH06Oi1tb3otc2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9OjpzZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX1rYmR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czouMjVyZW07Ym9yZGVyLXJhZGl1czoxMHJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTtwYWRkaW5nOi4yNWVtIC42ZW07dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfWRldGFpbHN7bWFyZ2luLWJvdHRvbToxcmVtfXN1bW1hcnl7Y3Vyc29yOnBvaW50ZXI7Zm9udC1mZWF0dXJlLXNldHRpbmdzOlxcXCJ0bnVtXFxcIjtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjFlbTtwYWRkaW5nOi42cmVtIDFyZW19ZGV0YWlsc1tvcGVuXXtwYWRkaW5nOi42cmVtIDFyZW0gLjc1cmVtfWRldGFpbHNbb3Blbl0gc3VtbWFyeXttYXJnaW4tYm90dG9tOi41cmVtO3BhZGRpbmc6MH0ubW9uc3Rlci1uby11c2VyLXNlbGVjdHstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9QGtleWZyYW1lcyBkZXRhaWxzLXNob3d7MCV7b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0uNWVtKX19ZGV0YWlsc1tvcGVuXT46bm90KHN1bW1hcnkpe2FuaW1hdGlvbjpkZXRhaWxzLXNob3cgLjE1cyBlYXNlLWluLW91dH1kZXRhaWxzW29wZW5dPjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0ubW9ub3NwYWNle2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHktbW9ub3NwYWNlKX1kaXZbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyXXthbGlnbi1jb250ZW50OmNlbnRlcjtiYWNrZ3JvdW5kOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtkaXNwbGF5Om5vbmU7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bGVmdDowO3BhZGRpbmc6MS4xZW07cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7d2lkdGg6LW1vei1tYXgtY29udGVudDt3aWR0aDptYXgtY29udGVudDt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1tb2RhbCl9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPXBvcHBlcl0gZGl2W2RhdGEtbW9uc3Rlci1yb2xlPWFycm93XXtiYWNrZ3JvdW5kOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtoZWlnaHQ6Y2FsYyhtYXgodmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSksIC0xICogdmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkpKjIpO3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6Y2FsYyhtYXgodmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSksIC0xICogdmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkpKjIpO3otaW5kZXg6LTF9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPWRlY2lzaW9uXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1ldmVubHk7bWFyZ2luOjFyZW0gMCAuNHJlbTt3aWR0aDotbW96LW1heC1jb250ZW50O3dpZHRoOm1heC1jb250ZW50fWRpdltkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtoZWlnaHQ6MTAwJTt3aWR0aDotbW96LW1heC1jb250ZW50O3dpZHRoOm1heC1jb250ZW50fWJ1dHRvbnt3aWR0aDoxMDAlfSBcbn1gLFxuXHRcdDAsXG5cdCk7XG59IGNhdGNoIChlKSB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcihcImh0bWxcIiksXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRlICsgXCJcIixcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIDIwMjQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICovXG5cbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0VSUk9STUVTU0FHRSB9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBNZXNzYWdlU3RhdGVCdXR0b25TdHlsZVNoZWV0IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBNZXNzYWdlU3RhdGVCdXR0b25TdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcblx0TWVzc2FnZVN0YXRlQnV0dG9uU3R5bGVTaGVldC5pbnNlcnRSdWxlKFxuXHRcdGBcbkBsYXllciBtZXNzYWdlc3RhdGVidXR0b24geyBcbkBmb250LWZhY2V7Zm9udC1kaXNwbGF5OnN3YXA7Zm9udC1mYW1pbHk6UmFsZXdheTtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDozMDA7c3JjOnVybChkYXRhOmFwcGxpY2F0aW9uL3gtZm9udC13b2ZmMjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxkMDlHTWdBQkFBQUFBRko0QUJJQUFBQUF0M0FBQUZJUUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR29FOEcrNDZISVU4Qm1BL1UxUkJWRVFBaFFnSWdRb0pueFFSQ0FxQnVneUJtbkFMaENJQUFUWUNKQU9JUUFRZ0JZVVVCeUFNZ3h3YmZhUVhhSmVmbU56MFpvbDN2NjBjUGVaTXBHNEhKU2prNXFJSU5nNkNHTWdsWmYvL24zRjBqT0dHRFJBMXJYZUluY0pJVWtOSEduNjlxTVJEVThaYWpqczlVYnNtdG5xbkUzdjN2cWlRbWZSUXBMa0tXNlFad2FsNnM1SVVpSk5VU1VHL093b0RZNkI2NzVPalNqa0RTU011MnBlZHB1OXZKSUxVbEpkNzA3RCtlTEhwallESTRlMXVEbkxqSEh2eHBEWEdNeWR1TExuMXF0MEZDUU95RnNKWkUxK2tKcTNUK0llN0JKRklOT0FOYmk5dlRVemhJN1c0R21VTDBsV2pUL0ZRUWkvbSsreHVQUDAyb21SSGU1cG40RGdmTlpmbitSOXo5Nzl0bUVlTmFxMVJ4UnFIVGpUUE5BMkpGRWdySGRvL250L1cvNXpiZ0dDeGlhNkVrVmlBMkZoWUdJdFJtRTFadlZVdnF0U3RiN012cmQzVzcrdDIrMFhkb1RuenpqWWJwN21TSExBQ2toTVdnQ1RMNnMwV3YwQVVvaEpmRXFFM29wUGQ1OGlrSm5LbG8rM3VhZVNIWUo2ZmNJY1hqZCtyS1VFc2FFbFRxbFVsVlJtL04rZS84aVAwTDVBS296TmxKMy85aUJ3c2hNNnY1SklVSnlrZ1QzZmRyT21xNkxjcytaK3EvWHNBWEZ4RUVpUUlVYUtvc0ZuN2N0VCs3QkJTNWRxRG9sSlh1bmJsN3J0dHpEL3YzODRMZnRKYWdGRkFMWVBFNUE3Z25NclpCaHQ0bFhxc2JaS21iZHEwVHRPbXBtZ05pdWdNMlBZQmM3M01yanE3R0xzb1hIY1RwdDl1UHZGRHo4ZU4zZytzeHJQUUF3NkRURk5wL09aSTlpaW5OaXRaaFJtcFFPQ2tkb0JkQU5qVldsYXZNaXR3RE5KWC9wWUlBa1Z3bk9QL3ZXNXh6b013N1NBRkFLVStaei9rblAvWjlqK09kZnJMOEtlMnZkS2JtcGh1eEpTdUw4RVVBZ2dISWlCSFArNDQ0RUR6djFQVFEzWWtPY09TbFRIbWo2VXNkZm8yTCsvanBZZTdJSFdjUVVnY2drcExGUjFZVFc4Q0dLUVg5YjhHRkFBQUg5dG80UkhRNkdMdkZScmk0RGl3VHpBQURETUtEUHIvZlozVi9xZGdQbWtHektURW1XRVhiN1EzdHRnVFlxbzJuUDYvKzk3WGYrRi85SkhBVnNJSWNBQ0Jad1J5a0dUN2dDUjhWb2hKY1VPT1NEamlTYkFwaE1vem0ySlJwdEJ0VVc2OVhiTkZHM0lWeTJLTG9rNDgvTGZzbTUyN0lhcUJMTXVCYk9GSXdlRlVkMDF2ZUwrWTh4V2h0emNxVG0yQ0lUYzVlTEp3U0k0ZllsTFlGSVZIQXMvL1Q1M040L1l4MWhLR1UrSFNxRXJkcFBQbnM2ZnFxV0pzTmJaYUNsUXRqbE9MVU1zaGNkb0E1VFFzczRKTGM5MFN4Q09NTVVLNEtQOU5zaHB6cFg0dnd4S0NoQ0FTUkVSRS9MS3NXUmxKd05LQWNUblhBaEV5M3IxS0hjWmEvWWRYNTg0MjAvaWFYbXRHaG9DQWlJaUFSMjN2L1A5K0tUQUNBTjVoZGtDM3hVQzRFTHNnZ3ZrUjJrckVqWVNFdjBCS1NtSENoSXZZT0NBSmtLUWd5WU1NMlFvVU16Q28xNkJKODVxQVdDQ2RIZWszQUIwT0RMMUxxMFBnVGUzaFN3MmZoaTRYaFB1ZXVRV0VINnh0SUVRQWJHMk5tNW9WNTRRRlAreUtnTzJENFQ1dC93ejJYVzkyL3JwcXBMVFNJUDhxVjl2THZPZHMwTkxXeVg1MUs2b2ZidlBaRTFwYWY3dzMxOEM5WnRocTdmMzJiZnVMNjRWWkh3NTE0WXNtNWxnZk5iZkc3Vzlsc1VBNEVHejcyM3Z4d0d6cDRmUlIrbVA4THM1QjdLQjJlREpYYzZ4d2xHNjkwMnVnN0F6TEE4TlkyMUIyZEIvUDVxZk9WOHQxb255TDVqWkREZlFJNVJnOEQ5OEZ2SHN2Y2xIdUpzcmR2c0pycGMvVHIvZ3UvRWZaSnpYVXpwV2FEajdNNytVUDgvOEVrQUFWYUFTL0NSK1hzL0pONFlhSWNPMXhIWmNVYU1NYmtscnBLeTdOZlFKS1FjVVJhZ29HbUNXK0hBNkVOdmJnMzNzbDJwSVlSbUU5YklIYjBtQTZrazZsTjVHZHlNTjVFYm1RaHhIS2x3TWdUNThjZ3c3cGRVUno3bmZNY1FmY1UzdkljelZrZHJoWDhYSHE0MDEydEZPZDdrVC9hN3A3bTgzV0E3MUY3YU85TStkanZkZDZqN2Z4bStEMVB1M3ozdWlydm11eXphNTN0cnY5M2xUYjgyUlQyS2FGVlVLTU5QMzZCdlFNQ28wR3NFZGtMOHMrekxnMUV4Yk0wTmdDV0F4Z3pmODJERzFLWE1mYzRyak5jUWZIS3hTQ3VSdUJJNUFvZERERGtHZFY4Q25WVkVtRU1haW40U2EwQVhUSTBSQk5wT1lBTFZxMWFWOXZ4SmlVekhLV0NpczZtcDBCdWt4MDY5R3I3NHNuVk5ic29DbWtWTW9wNStwREdhV3oyc0xEcjJpTnQrb1pPMGIzNllTSWpXY3h2bmxOMHgwVmhsWW9XNFVSalhYS3lMRzNZM3FvTGRFYXpIQUVFb1Z1TWwzRERlRVJWcEcvamVURVIwQ1VaRVUxbW90cUZvaXdKRktVYURGaWFjU2xCSnJFalNRS0ovQ1NGU21TS2sxNjFRbGtkS2V5U1hZenNkWEtpNkk5aWtOSk10Q1VLbE91UXFVcTFWSFQxenE2K2x6ZlFOQUlhNUpwUm92V2FFUDdaeHVObVRqTUxCWXVxM1hVVGdOZFJEZDZVcTlBMzNjYnhBenhERE9OMEl4YU5WYXhkLy9zL2FqeEFFNkpuUGJGR1prdUMzdWFOVThFc0RTTFpWbXhPajFQZDhIUXhYU3BlZGtYYXdiVzZ3Wm84KzZEcml1UUZGdzVJcHZuSmg2L1pnRkpLOTMwYUVNMlhKM3lKQjBESG9waGJxZzB1cmt2TUlnWWx0YkdSUGNka2Q3VmovTlY0cGJBYmErL0U0QmpDZzlwNVplcmkvcGRNMENHLzd0WFpOeFZFKzZiWWF2UW42dW1Xd3kzRlhmNmdnK1huQXRIRGdqa1BOaVVicXBvd3ZEVXZiUmxjajVYWkhZelY4Smk0TmwxdmpzT2hyTWF4T0h4ZUR3ZWp6L1ZJSEpYbjZIMHdoZzZxRk9FVXFRbzBXTEUwb2hMQ1RLSjB5UTVMVTl5UlFwU3BVbGZabkFTQmtXcGxDbFhvVktWNnFpYlRCdE1tUUtZWVdIVlVVZnRHSXQ2Mmxkbk1IM0VwaVUwcVZRcUhiQ0x4T1UrRTQvMVhMZkJFaHpLaGdVY2dVU2hmeHdtRHo5RzVFUkFBSEw3RkhSS1F5cm53dXhRZjVyaEhCRUJSSW9TTFVZc3pVYmM0cnRNZHBsMjZGZ2Q1NXRnUUc4eC9mQVoySnpJdkdibWxyY1hBbTN3WEthN0VsZlBjUzJ0eGZxK2VnZmlIR29ETXh5QlJLSHZ5M1NKMzBRNlY4KzZtZGZac2FGVjNlT1VLc1dNeW5raHlMMXU0VkkwTDFTSkxJeFh5WXpwTHlOcWlXejBYVHBrYVR5bjFaRHRpOTBtWTAydjB0VXF0elNDbCtxcks3ckl1djF2OVJEMHNneHFHYkpvR0dmRWtsRTFZenIyOE8xbDJLZXdYOU40QURhTjFiN0wwSWFSVFhPdXk5eWl1ODJwT3dIUUJDK3BsZENyT21LME1nL3IxdlJZRW0zREJFY2dVZWdtVXgwM0c0K3dpdFFnT2ZFUkVDVlpVWTNtNHRtRUl2d1VLVXEwR0xFMDRsSUNUdUkweVRxdEZjbEVDbEtsU2E4NldFWjNKSnZzRldpN0l4S0pPQndPaDhQaGNFVHJSTjN0RHBsTUpwTmhSSWFpcUFpR1lSZ21jYmtzeTROb3ovcm9mUUw3S2NhbE5EMEZPVzNSR1p1T0JSMnhtVk14a1Vna0RsMFg3dUppdXRTOGJOR2FFK3YvWlFPd3FlODZHSUllRXNDdW92V1lmQ3EydHZwTU9CTjdNek82OEdXWExodG1nVzJmZmVIcDFNdTdxd1g1TkR3VGtwQ1NjZWZCa3hkdmZpbkFSSVJJVWFMRmlLVVJseElBaVpFMHJWcTY1SW9VU1pVbXZlcVVNcnBzL3oxWldFWjVZQmdHQUFBQUFBQ0EwV1pzZDFDcCtIdytuMi9jT2xrNHJEcFNsMUszSHIzNmpnMUNUdHd6T2NOdUNYWU5naURZaG90SDFvZ09MUlN1eDhuaWw0cjJpWWF2MG5vcnpYdloyblpqWkxmYUtEK1ZSZ0gvZmdObXBrRmJoZ2lHaVVhY0dmWE5tSzQ5RlB2WTl0dmJjVG03NSszZmRhbVc2WVN0d2tkemFDSFpjdnEwQ1M0aVU1Wm1OeExYR0JlL3JRb0hqTVAxL1FFR1ZNWkZKZ2JEREovNVQzZXlCY3ZHUFNxVGltSmNDK1lRVWpxR3YybkM3cTNuQjBET3F2MkczVnZsSWhLSVc4TVJTQlM2eVpUaU5HRlgrUkdDREhzOFBZSWRUamRBVUF5dlFrd1NDcHBoTmQyMG1wdU1qUVhLQlFrV0lqUXBtSlJVS1l4S1hjTERjNmtJZkhhVEthT01TYzRNc1ZSWVEwZXpVNkZMcFZ1UDN0TEh1d3ByWWZ0aGl3aUhGQVdrU3BtV1J0KzZuSjZVMThDdXlKODVqMngwYjBkN045cGlicTBsYjROblUrcE83dEVVTGloZFVPMmhycHRnWVhDc3hCRkEzbFEybm1GYzNGYlJqR0JnQ2Q2QlVIN3FuWEJiYWNqc0s5OVJmSURNQUZrQnNvTytuWmc4UDBCQmdNSUF0UUVhbjlXUUVzOU1BSE5HODU1NHdhK0FybnF2VFRqcEdTN2UvaWxQbWpBUlBtbnN4V2tkQUFSeU9MOXlBaHlteDdTR0tsazdHaDQ4dkR2TmZkZytJVEJacEQ5Z3pnTUlCd3dCazV0bWtFWElxcU1NYUVUZy9IVWUyNm9MVFRwNHc0ZzlVa1o1YmdieEVIdEN5VExZUEhtSlVxM3VKcHF6dlNOY3VtYkJkWFlRc2t1MUM5Mk44alR2REZFVTBydjgxN2dtcXNHalBmUnVOanZlclREbUhDRTRxK3Fiek9qdUlJdlJhRGh6WjEvVkpVcGhoaU9RS0hRd3NaNVRqZ3VBQjhDdUtyK1lJTUtld0lvTU81eHg5ZTRBRUJURFNZcG0yT1R5OG9Jb3lZb2FqZWpVUWI4SndEL1hCNWlTc3dVaWdoQXNSR2hTMENnekp6WE1DVFUxWEVaSGFUQVhUQ1FTaWNYYlk0VkNvUmdMRXhzdGxkQ3R4WjFhVW5sdXRHaHRPUXQxOC9SVWRWcGtEQnZiUzRuRW9ORm9OQnFORmlkWG4wV0pMSkNyVThDVWJxcU1oWkdwbStGOEViQklVYUxGaUtVUmx4S0VFaVZWTFZOeVJncFNwVW12dWdBWmhBR2x5cFNyVUtsS3RicG1BNndyUUxjZXZmcWFFN0RUV3M2WUhtMEUyZGNsaVdXc1dFM25tUzdHNWI2dUdWblBuTnV5eVdiSHd4RGpwV2s2TStqMjBlWU1MUS8wM1ZNbUttNFpuZ2xKU01tNDgrREppemUvS3JkQ2tWTWxLc3lJbW1lWmYwR1F5d0pCRUZ4Qy9yZ2dDSUlnQ0lJejkwYkRFd01UajhmakFVQXhkUzZWc0RjczFnOHdmWUNYck5kOThTSDhnYWprNXZ1VVBxZzRYRFA5Sm03b0dXdkdYeFNkRUxMZnJzRVNFc21XWFRjTTNjTHRIRlNHYlNIQkFqY0NpVUlYSnFIbk1sT0xSQkxhc25VSzJTdXgxenFuTUIvWk1HT3gvelB1OG9oREFEQUFPQUFDQUFtQUFrQURZSGdsQ2tDdUxWQWlTSUtGQ1Awa2hXTktQRlV3YmR5TCtzREJ5ZWdrYUoyV0VNdFdyRTYvNHZwVzdHNmU0bUR3MEJmeFpoRnQ5R3ZmaFBFQW15ZDRjTXRVcXNQbDRheTdHdWFrNXQwTjUyT093SmFCZ1NOSHNrMk5oN3FFV1pZVnE4ZStrc3hqajNFS1NYZzhMTmlsUXFGUXpFMWZ2NXR2cFFRRnRGSW15THRpdlRlV2tRQ2s1WlJlMlFpSjJackxZRFY4Nk1CWVdYNXhBUHVuazF5bnRaMng2YWJOcmlYQXNoV3JjZmtVNjN5L2ovbStnbnpOOEkzWXR4emZDZU9pQVBpN1loMXdCQktGenM3MldybGlmV2IzbitzT21rU2l6WEhUWHBtdkFuT2dlYSs3UzhGMUVIUDhuVTRJbkZZNFE1bVdwM0JBTGxlc2E3Qno0RnVPYkU0RVhSbml5azhodENPaWs4dmxjc1dZSUtyNC9jSE0zWFhJY2N5T0RzQlhIOVIzTklCalVzZDFmaWRqMGlpbkg1cmlaZlVPRFRpRlF1bHplYXg3K2pIWlZ5eGYzOFUzeExkcitVN3U0M0g1OUtlZ0s5NUp2d3Z5cW4zSWd4THlVRzJZNFFna0N2MUJURCtJdkNNUE1nMGxWWVJCblNJUWthSkVpeEZMSXk0bENDVDJobTBzRUFnRUpURHJxYjRnSjJKWW96U1VLVmVoVXBYcWJOclorWmhlamIrNXJIckd6Y2NMUWhKU011NDhlUExpemEvS3pRbk1DRUt3RUtGSllZR3lOeUsxbHRKVS9KNldtRnhVcUxzSW5YU3MzNHM0QUpuVE5QOUpWODFaVzA4YndveHdqTW9HZysxZ1BQeHdBTWVaa0JFRStWc3Vwc3hvOWNXUzVpdm5hU1VwRkpRMVRFYnRleUtqTUFMbFNRaDZSSzNnQ0NRSzNlUVU0amJFQzd1cS9BeUNESHVDQlFUc2NNYlZ1d01VQkJURFE5eVFGTTJ3eVJueUVTeEtzcUpHVTNSaUVEUFhMOURaNUY0SXBBdVNZQ0ZDazhJR1pWTUZDZE9rTHVFMUlLVkZsR2d4WW1uRU5lTkJDVlNKa25KRWorU01GRW1WSnIzcW1ES0l6R2xrU2JiZDlITGsxZngrM2UrVkNwbUtvaGdseVVCVnFreTVDcFdxVktjYVVHM1VsZnBva01iYXhOQXNMVnExYVU5R0lsT2Z2SmxNcHBqSlpESmJSanRhTldrL3J6V29NSUlhTldlc2F1dDAzeU1PMlB4SUk2TUJFOTFxZm9EeXhDU3dnQ09RS0hTVDZRVnVEaDVoRlhscHRyZ01qeUJLc3FJYUwxN0djZGtBNThBOGdDWS8zMlBMYndrbkNRQkFObXRDdzZOb0JyVklxemJ0T1VzV1U0MDVsQ3daMXREeDVwMW83VEVkSkJnU0dMNzc3QkVqbzk0YW85b2p0SzlidjUvaEFNOFJhNDZTamdtZGVMek5ETWhpVUhudTdRbUREQlorSVVGaVRjSm9IY2xJa1NwTittWkdjVGNINUljQnBjcVVSMFdvVktVNjZxWjN1c2VnRjNtbitiRmxyaXE5Qm1tblY3UGI3RzBSdENhc093S1FaRWdoNDg2REp5L2UvSjZKcnoycnZ6MTE4UGs4UHAvUDV5LzlOUEppcjlnSnd5bEtyVXk1Q3BXcVZFZmRWRk50aHJXZ1ZadjJaSVNZZXJlQm9KZEhLZWFlZzBKN1VCZXFSOFNPMWFuM3BGQU1LTHdJdFZTSisrRm1uaUhFc0ZFUVcrcGVrb001SHFmNTBseEJMTHY5ekNNQVpUUFExN245WDVrSEZYN2M2UTJKdmIrS1NJc1NMVVlzamJobXZKRUVXeExISkRYTVNLNUlrVlJwMHF1T0lLT0x6R2xrU2JiZDlITGt5VmVnTUJXNVVLd2tHV3dwVmFaY2hVcFZxcU9tajlwNXFsTlQzLy8xeHNpQVJDS1JTQUJBQlFEQWdFQWdFRjRrY0hQQTR5L2YybTdZR281QW90Q1ZTU0lhVGVWR0ZBQWx4MVJJWlJ2R2M1ajBKSWVvY3h6enBLdGNheWN4STFoU3lWKzYxL0dDd3V6QU1mUU13NkxUS2Q4b3NGQWNyTlZEUEllRnM2TEhGeGxOeXRpZURqYjhHT1FRYmhTSXRqMDJnSWc4T1ZiVWZnRi9HdGthQ3NNTVJ5QlI2RDU1bWNQakxiWWtJOEowd0p3WGYvTTFubzlkalRWZFdocGlENE1qa0NqMEdZWTZrWTFONVE0RUtnVWhXSWpRcE5DamJLb1NDTk9pWG9aYlZGOS96c0xkR1lHZ1ZiTXp3Snd6OCttcVUyc2pZMUJyY2psM2ZHL3NmejZxN29nMlkzNHZmcGRVaGUvQ1oySEg4eUFBL3hROEQzbXlBSUROQVZzQ0FKYlpueGkyY0g1czJjUkp3VmFPbTJXV3N0UEdaeFlaQTFLSVI3bXQzQXpBbXRrRlVJNWlsRGNBbTJRd29qRlhCNnIzSXNCeVZxNWwrdE5hYmN0ckYrUXJBUStsa2lVV3ppSEdLV2M1dTFGVWRNS01obnhpeG5BVTRsa2FBbm8vbmh1U2NFbkhyUTZRRWRvUjJGSVE0R0ZuWUhrZkJnSlR3Tmw0MnJRSDdkVjZJQkt4NEdESVBUU1BBdFlIY3VhL1V6ZVAxZXBaSk5hdE9BU3FGRVFrWUNXU2pLb21jdko0US9sWW1SNmJXaUVXV1ZJRkFOYUlUT1Z3MlpWSHpyNU16Qy8waS9EMWt3RVdWRC96VDliNkRHNjMyaUs0VXFDN1RQMlVOYm5rRVk4NjRYWWlLbFcrQlMzRlVLeEhEUVlvKzhCOXl6MXc0aDA3QmE0UWtrekwwTEdKR0lyclorY05YdUIzUHc2Y2VkcEFNVTZHelJRcURXN250QitjV2lzRnlvM1dDbVFqTDBNbVhvQnFOV1JGSVpJN2dEWGh0U2N0OExwQmZrSHNSUTZYcFZmSVJ2WkJVOHA4NUY0aEg4RUtueG1FWW11K0s2Y1lZM2dRZTErL1R6SkFJUkYxY0t2Tm1uMlEwTThhT1dzWGpUOWp2QkNyNTIxeHF0V1ZJNmFwTHBlaEtjeFp1VzlCV0xKM1FHcWY5SlRpdXZ2VTB3ZGdody84SUJSSVgxVnVOUXlzQnFTdFZOUFhaRHRMK05pdmN3aTFQZ0QvNU8wb3ltMkorNzhvbjByeGdBOU9DbGEwZ04wSkVQSFkvWVA0bmhJYXdiRUoySGxVblI5RGJ6ZldNUEF2eGtydEExNHg2anJBbVlVY2dSZlJsWm5uWXhzMnkrb3dMRHdrUzJWazNkZmpBQVVWSUpld0QwNnR6K0F1dzZwSXF4VGw0ZG1qb0dsWVFYRE1iMzFGSlBzKzY3ajlSTmdzSFlnd3dPY1l0dWZLNlZoQ0xNdWM0TkZUYnY5cEVRakZOak5yMExXQUpCM1hHSG00eDduQlJmWG1IUWhRMGJ6cW1PdFZUbnllUzZ4MUhiQy9hcmovWGUvN3FNT2w3TTBlVW5EUGdoeWlzRjhxSW9GYmhmRWdxeUQ0bzNvMks1UkxyTUpZQ2FDNWdySHd1cEROc1ZvWEZJMys5V1lQYTFsd3ZPcDkxZnZhbkdob21KaXA5N3VwTkhtT0greWIxK2hMSXBkZHIyMVJpQTEzSmliNzlrNnBUQjNkRkFvNzE0cFExeVJaYlRYTXlkQTdtUUU5UkZHaEwvT3hySGpkUm5vMFhkZjl5RWUwblhGZk9lcnpZK0RPM2ZpQldCRk1BbXFGYk9lZ2tBcVhUVm81ZlM2NnlPSVZsTENTZGNwNjh1ZTR5SmVsaFVQdFU2Vm0yam5OQVBxd1dhTm5udjF3N0pQNnhRWmF3U0lQbE9GTUVVR3V6UENCYjJkSlV5Z1k2UTl3cjZKVWpKcjZOWmNiRVl3TC9jeFpmZWM4MkxPc01LNDl4WDYyOFA4TnEzVERFY0lBUFp3d2hMdzU4aFBLazVKU29EQkpnaVRMRVN0UEE1MG03U3FZbU5TeDZGTnYwaVNqVTA0em1UYk5ZczRDcXpmSmZsbUMvWVpKZ05Cd0RBYUJpOGVCSFQ1SEFrNElRa0t1UkVSMmNlSENqU3RYWWhKZU1ONjhFZno0d2Zqekp4RWdnSlNjbkV5Z1VBd2xKWGRoMUp5RUMrY2hnZ1lwVGh4S3ZIaDJFaVJ5bGlTSnAyVHBLRG82VzJUSXNGV21URjZ5NUVEeTVFTUtGUEJXcUJCZmtSSUNCbFZvMWFwUmF0U3lVNmZPVnZYcStXalF3RmVUSm42YXRlTXdNZkZuMGNGZXAwNEJ1blRab2xzM3BFY1B2bDY5a0Q1OStDWk4ydWFVVTRST080MXIyalN1T2ZOMldyQkE2RTB5Wk1rTTRidzVod3NXbkM1YWNyaGt4ZW15Tlpzck50eXUydks0WnNkdHpaN0hPc3dHRXd1aGtSaU03VGc0RUM0ZW5CMW5pSkFRYm91ZEVCR1JIVnlJSVJMZWNENThJWDc4NFB6NVF3SUUyRWxPVHFRUlhIQVExNlU0aEM3Z2dDRUFnMFlBQndvS0RydUVsNitHcWJGTlBMV0dBeERBMisybVVTTk9pQmc3dDBTa1MzMW94ZU1ranJGbjJJSWpKempNU1VoT3Vra29FSlNpanlHZ3gySWEvOVpjMDNiK244K2dxa2dTMjhzNzU2Y2pVcDN6d1RyK1JQZTZTZXJsVWRUNWFldWdlL0FIZ0J6OUY0aW53RThxK0g0T3ZJVzM5RmJlV3J5L0JxTXZ2L0tTdXBpOUhrclZlZkc1WjRJYXZmanlXeStwNHNWWHloZVZUNW54SXEvemJ2YmpvcVhYMVplMGhqMEFZRk1RWnMyQmtBZ0ZJR0Z3eEhZTkI5WGRhbXdyM3M3L0NJZmdZWmlmaFQ5Z2ExMHl3dHpkWlkvaGNuZVRZYS9raXo4S0NCb3JoRlo0ZzFsWEJHR1dLQTc1MkVsSWQ5YUxLNFNGTmRWMzI5Ykc3UklJS1U0R0V2aGpyOExVMXdqQTIzczlCbWdiR2pROTdvVUt3cWlPdnlQWkVSSUNLSXpBNldUcFdRd1Y2b0psZTNWVGxqNVR5UEtPam00TmJ2T2cvVDlHVmZ4TkE5aEZoUURTdy9mUmpwQ0YyVzhPQTY4aUN5VCtmMkgvREc4QzZlK20xeC9JSTg3OU5BMzVyd0FBNjhRV0FZZ2xUVEFzWUFDRXFlTis2bXkzd1lvQTRGK2pOb1djTlM4T2lhalFRUDd5TUZhd0lqUVJnU1VNTEkwUTduMVJBWDZSRjhZS0lJSlVvWjN5Z0MrUTJRb3NDa3RPNWx1TUhHVWFFM2VMZThWajBocXBXQXBJRWFsT2FwRzZyZFcrN3FSQUZjQ2VZaWtBNEJQVHNMaC93VVdmT2J4OVI2VThxZkE0U0tuNWc3WUNYQVNRQ1FCWU4za0EvLzFOMWYvazZTLzBZLzFvQnI3NEdYeHgrMk5mMHUrLzdndnFDL0x6ejBFZjlPUkJxam4xUGdMb1pROGIrMVowYzhnTi9sLzJEV2ZObWZLcFgxMDM3ejJMeG4zbHRCWFRiRTVaOElQdmZHL0dKb1NEeTQ2QU14WTJEZ0VoRVRFSkdTVU1Ub1dncGtjeE1ESjcyNFIzL2VIMThTQ0NTNElreVhReVpNcVNyMENoSXNVTWF0U3AxNkJKTXlNVE00dE9iL25OVzM3eXZ2LzUyT2MrOFlYZi9Uc3UzTExNZVQ5YmRYdDJjTmV2WHZMeWFQakZEVStOZ1JjTnVPQjFyM25ETEJJR1J5TlFHRHhPeWptb1ZJT0xoNitVR0F3QWtvUDh3Sk9PaGhiSkJOVXZocFVOTFpxRFU2SjBLVktseWJPYlhnNnRFaFZLbGFsUzdsdVYyclZvMWNhcVZnZHZuYU1RQ2N1V1hISFY1Y2k0V1VRbVVtVTBNTUFtdGdRc0JTenRGM1JiQkJld0ZJQXc1bDQxaWpjYkJtUXA2eTNBRU50ODJkQWt3anhuejdQNzhWVVVEQi9WbXVBZCt4NTZjUCsrdlh2R1JrZUdoMVlzWDdaMHllakk4T0tiRnkxY01EUTRNSC9lM0RteisvdDZlN3E3T2p2YTIzS3RMZGxNT3BWc2JtcmNnV0EwN1BjZWZlVGhoN3FkZHF2WnVQK3VkRzIxbHNUQVArZno2ZHIxbW9wKzBMSjFURWdnUzZDdXZDNW95QWl1YjAxM1lQTUxiWXpUYk9EQVRYNVlFaVl5Y3BVNUlWY1BmSkRsSitvT3Vkc3ZMT1V5Q0hBMGVwU2hSZDRkdUg0S2dFcE1FT1daR2I1RUZjTWpWSmtCVUJVQlJaa0EyWktOUnNBTjErMTB4Szh0aTVMdnU5Q1FPY1p3eG9idFZKWVNOWVNGSTMvZXp3aUxKZFFFbFZBVnFiRmZWajdHRllLVXdpTDJNOWNTZGdObThMSGNzQUlsdjN0K3BUemlrZ2pTOExobnBSQTR5RHBiTzdCY2VraExJUnR5cnNvM2hPRmJpVTI5RmdtS1k1SjgyeFJkOHF5bHNGV2tFSC9iYW44bG5EdjNaeTVlNERWR2laM09RUkRCRDQ2NFhuV1Rtb0ZEUjUydVhKa3psZnlDUk4wakZVTGVxWlZMTlFFWG1WRWxEb3RaTk9maXpRNFJMYmkwSzNWZlFpdU9LT0VTTUZUdjEzVHZpNkNWeVU3V3hNbUtXM1VidERtbkkxN3lYM0hjbndqZ29mb1U0bWFTVWxMbklQb2Qwdzh5djY2b1dJTWRTaUdQVXYydGdtQTRFZGExMEZybnRRbS9lbHRoZnd1aEFIV0tzK0pzLzN6cXRUeFNmY1pkV3ZNQmtFa28yT1dkNWg4VnhrbDF3UTB0V3FmWHhqbmJYVHdEdzVvbVdaNXFkdkhJRGJLWXh5Zzk3MHBKdnpBejhuMzVPTFJrZlNiZERUcFpnTk05bFFKbTJpVTMvSDBuZ3h2SDI5ZEFlWTJRRFF2eFo0elNocFFiaEFqQm13VmJJN0Y3SXZKN2tpTjFGSkdXTnVBbjB6TUV5UmwwaDJOMTdKQ0tpZ0NQS2Z5OW5ITk90enduSXp3bWd1dlpaL1RNQmNRbEhBZnc1RXhIRHNYR3VGdVNlbzN5Q0puWlJiM1c3VWYzYU5aNzNFWUs3a09TbFZKc3dZWXlKQ3RjR00xR3JqOThjbkhoa0ZtdTdQZE93bjFXelIwaHhUblJVOGFCSm14cUg5d1FJSWMvZlVXQkhqOHFySVNqYk8yaFBXN2xSSWFvREpwS3A2V3JWSGIwb2w1TG5LTHlGajJUSGdteTk2QXBaNi9scTFpTlBZOHZ3REt6NWdzK0UvQ1pJQ1B3Y2FjcWNuUmlyMVJ6UHNuQ2dRVmFnNVVNcktHSjZ5NCt5UFlaSTd5aktUSktTVU40b1VUN0dUZGl4TzBEa2ZjVFVkbWthQnpxUGJpNVNpS2ZKYUpEREtZMVpsMTJ1MVJBT2t3U3A3ekhuNlFrYWlwTkxyNkUwcEhnbUlRME8zeEJuV1N5WTIwY3VIMnpXWXhOUTN3Mm1Gd1A4eGs1Y0tlRHNkVWFrS2xMSE5KRzhzNXh6eWhOdHRFQmlSRE5Rc2NDbDJ2MlpBbjFDaXR4TUVqTE13RzlwMWREdGRxaXdKVE5DZkxTcVJTMEF0VnVxUVBJc1FDUlpJbTh4NjZJTndwVENNSkMydllIck5NV013NVR4SjRWaTRIZ1JSb2tpZ0ZLUFRwbjQ1SllneHFoMGJvcWd1SFA2SWdrUVRLVlBwOUJtQ3R5U09KZDZieUUwbFExZG5rdGxjaUdVbXBRTzl0Qm42QUJSQnZZYmgvb1hhcG5DQzc1R0dJeGw4VytaWk9qb0hVaHU3TkMyNVVKb0xkb3ZDMVZvQWkyRkFYcCtNNE4xRHlBelVVamVTdjV3RzdaYmY5RWNUNmpNYnNKMUJwWS9KdG9sN04wanBRaGdMaGNZZlllVVoyQlhxR1VIODVROFJSdHoyZlFkbnpubGxCMThkQ0RNM0JNMFJWbUxYR1BGVlJqRWRRaExQOURpSnZwTnpvVUF2ZWc5WkFMZklqVFZiNGV0NXZQTTlBVVZDMTFKWUJNeUVwSm9MYXdIVnMzQTBDTkQwY2cyL3huWEpOK0lKVzRBS2YxR1NVYTNWQmN1TXJYbFVZVHVnWm9PelBmV0tSdWM4cVlNbWxPTUt3bDd4MGtLdHN3bGYyWlJzcmoxaGcyeXpxQmFQbEFhTWxrUkM3ekc0V2FIYzhBQnJseTBtRFZnUGhLZzYwS0lHc2xuMUZGUUdvQkhZMVRHdjlLZ0pwM1ZvbzNPQkl1QTQ4NW9yaDBjME5HMkxYNnlTQTlzR2NCYW4yUWhvYmduaUo2RmV0dUtTSFhMcDVlY04xRmkxbzNNZ01tS2R3MElyRmhqODFLaVVMRHZSSkRJNUtTVWxLQUZJS3hWekN1Z1V4WHBHZ1pmQWdQRUU5ME5lekt6cHh2SGJQVFZxMmRPYXE4NDJFTjl1eVR6SzJGWXQrV2RRWkRlNFViZUIxOHN3dmxRVUNpRnJiTCt5QzdXcWx6Wk9VYjJWcFlRWnUxbVBVa1QyWHk3MjZOajBncFVtb0VXSWVyL0ZKa2drZ2JBQUw0RGgvMGxvNUpEQk1DN2tnMER0elBvZ0YwSzdMV0xYUjA2UEVOMG9vSEgxbHVlSmtRRFBJV1U2TVpPNkxhMnNndW5GNTA4QzJsWUdaUGxjeDJYSjF0dVhGYnJlNTFDSVVXU2hiNGZvajZMZ0djbWxnK1VDaVNpeGNIOXJKNlRUSmRBQzI0QXBHYnNhNWhhL05JcitoOUllYVhJQ2ladThDNEpMeldUN2dLWVQ3NjM5K0FBakxscHBkWEFMYm10L3pjZFo4bmZJL3N3WE5iWmR3OW1SMVNPN0lmZ1pLQy80TUN3cEN3NXNEMWo0MHdJdWJkdHBCTmNzVkhtdVVQdmhha3N4TTlGOEJMa3NRMzZNL0JPSkFRdDhUQkJTVWJTb2p3SzMyRVliZVFyenVZR2E5bldGaE9LVGxRQnc5Q0ZqOWpURzRKM05nRHZldUFnMVVPaGI0S0FwOXBIZ2FNSktiMFNsb0w3RG9kSHNManB0WGhrdk9hYW9lMENIakRVNnRrS0NCNDJnWkp6UkRjUG8yeE5lSnJaRHhjWGVWM1YyOEp3azBISmhVMDhMdEdEUU1xS09QM1RHb0FJNlluYkVrUndEUmszTzRraTYxSW5xVDgxMnhLYmlpb0JNR0U1RExwTUtyaU9wb3ZGTHRiSWU5eHFNcS9TVFlzeTBaUUY1eWFaYXZwL2ErSDd1YkRucFNzaUJ3SkZhZ0JNaTd3VldjN1VIcWxtdzNmY0x2dm1uVlJTRllSUUVuZ3huSHZ1eDhRMUNWN0FJQXVBSURkQUgxQStMd2crZ0hnUDRDOVFMZ0JBTmFldk9Ud29xTUhVb05nbVZtRXlESTdMcnhMSERYWEVrN1pBTUk5ek9iR3lDR0RiazZHNVVnblRwUGMzK2paUU1qWUdVeXVOWGcrTS9UaWJJMmNCeGdKd2tiMGJnaTRmWmY1QUJDV1Q3QkRTTThZZVMvSjhubzRJc3hRWWs1MXdaS200NENqdzZwVGZRalhqVUx2OWVqUE9WS0ozUGhTMmlJZnVsQUs2c01MdXpZNU9uL2JIemhaRE4yR2FQaDQ2NlpMVVVaRW1XSjNYUkcrOEErdjVZT09sRklNUkZCNCtMald5dVN1U09lcDNxclBXck5Cb1J2R0RXYmdxY3U5NzE1a1h6MkJFTUZVWlhmaHZMOVVEL091bTY0d3o4MUlrc1NYdlp1SU9xY1lSQ3B0K0RVaWdzdUUzUTdidmc4ejlxRXpmOG1mZUhGbjU1c0pSVXVMWXhRM2ZNSFp1Tzd2aGs4TTA5MVF4TEJaMVNlMmlRTlYwZGpFdUNGVGJueWplYXFOV3REVU9icUplSnNCdW5JUTdQS1dxdkhQUEZ4RVhUTUtSamZBRGMrTTliNzVXaXRLZU4yVFR3UE1iMFBBOXEyRlVVR1NhTGhzbGpEQVVBTU1MZEtZUUhWamN3cGdZS293YVVRQzE2cnJoeEJEUlUvYVpnYkVvVXMrQTEwVHhrc25rU0xqWmF5eVJhK1BoS0tOakJUOExvU3FycUJHaXFHU1JpRjVUQkM3aDUzQ2lvZUY0V0ZNVjF6SzVqRFBvYmpIZ1A1YTlzQkREMWlPODRXY0w5NENvNUVkY0lrSGxOZkp0Zm1tQUV0K0FwMUphdHc3djVMeGJTVTNtZUtDV3MxM2NvZFFVWWxKVnYrOHRtdXJBR29FMW5wTWhaZXhUTG9QTDBrZzdVZXkyTUxFdXZNMHk0NUtsd0dsV3hBaG5IZk5qWmFXTmNNNnJKYk1pbWkwK3N6djlCQnFPdXRmUFZFakhqSWJOZDVwYWFObWJIM0ZMSnZpMXRsT3hOc290ZGlPd1Q5bmVQTzcrZVNHRkZUejBUYWQ5WWRtQS9wSjhxRmE1Z3NmYW9pc3c2MUFudDhPdmorMjQyV0szUlZyK2N5T0NHVFhUWjdacTN5SEpRTFIrcWZ1U2JnUGw0VW9Vbm5GTXFsdUg5QVA4UmlPMWthbHN4ZWVIWG5rdU5JZTkrNjA2emloMXM4T0s4NmVrTXI2cXNCczhydVVxNnhGSDBnVWZWc09ZYW4zV1N0QVJmN0Y1MHY2d2R1S2IwWXYyYnNwMnZDd1NxRmFNQXJySUx2WVYwcXgvVHM2Y0Q5L1Iwdm1iN3ErVWo0UUpESGZMd3FhMUwyWVNhS2U2b2NXWFQ2RWgrVnd1YVJ5SHNwTHRpVU1lZnBKUlVZSXZkT3A1WUYrL01oZ0JCMnBmd0dqa0tjY2Yrd1NJK0JWek9YTEdnMWN4VzREVmY5SE9hYUhpU3MwL1IzZGZTaThoZEZ4WWg3TXdsRi9qeWh3RGFnRi9DZTJ6MGh3d0Y0WDVKYkRzRkp1QXdNME5xdGpzR01EQ1Y2R0sxOWhqVUFEYlJON3lHZGhPaDh1d0hMMzBHenF5bG1jdjdhSWc3UW9selBuTHdyYmpjTnYzNlhLYUZaejRpOFBWSGhlUTNvUXBhcUxKREkzU0RrRVhMSE1DSlRaYVBLeWZRVFVXcjg2cUhjVzZaVGU1b003dmF0TkRYa0ZsY2tVUDZHU1VRaFZXaXRGMlc3MTlmUE9aSGU3ZzhXcjdGbTI0eThoSGtUbVJnVjd2alBSWFBxNGREODBhMGFaZzQzZkJWNXRXdnZJNkFCWU9nZkd1dGk4aS9rcXhRdUxFR29HMW81ZlRtbTZuc1dacmRsdUUyYnIwTGdrZFNoN0YxTVM1cEQwRFpEdzhVaXRXS0ZtdXN4MkgyMXhEL2JtN3h4czhPSDFsaVlKU1Z3NFl1andoeFMzMEJ3MjVCN2FDYkd0Z0haVUxJbTZ1ZWF0eGV5cHJWa3ErbEZuQm1SVkFkMm9VVDVDVjZQTGtYWDRrYUtiZGdUbUZoamVzby9LakM4SW1sZ2JMeXJHSzM4UzdKanF0MUU1YUNNaVhvd2ErVVBneTNiSjU2ZG9ISWd4UFBnYndKcmRXdGxPR0o3TUNOKzA1aTZWN1VtamlqaFNtSS9lb2RYakkyV3hRSGphbWZWT1NQeW5XRHQ1OGJveTh5dkxONHE5M0pocEw1cFdCblJHNmxhYTFwRVY1bS91SUFwUk43UlhuVGpJcm1uQTJzSGtacEdjRzZ5czZaZVdYejZkOG5UVGZ0WmhRT2JhQlhtTFZNVnFaa2dOREZnRGk2WGxUWW05Y1UyV1lqcHpTU0ZBU0J0cXFzU29saVVQS1VmYkFEMStwaWJXWjV5YVl6aS9mbVdzSFJYaWNqLzlOcDBaemZpWnRKMzExMWVkZ2ZBdFg4VyttbXYyNTFkZkV3RkF0cUc4dHoyeUR6TGlEdHZhYmVyVytKcU5iaEN4dFNnck02cTRzbFRKUzQxeGFDcEJHaHBwRHJyaVFRV1Y3TmdkajRGNmhTVWptb0xTQnN0WlRkdmRmaEFZbnJCalVpem0rZ3dWdTh6cWhzV2IzeC9GKzVYRVVEVVRRWFFDeHdkSHh5NXZpNllIbnMyOFVpSmgwbjd4SVdDMzVsMnNHVlFxU0xIZjFDTjdnQ1FLa2VHZ1I4YVRXcVcvQmxmNUtDQVFnVG11TEN4TXpSampMSXNSNFFnM1ZqbzYrYXZYdG1zQ0pvWk1Pa2NiekYxS09IR0Q3Wkd5a2xjV014c2VpRHNTbVV3Q1NSYnhNK09NVllneEtnd3ZSNVpOTUNSNDFPUXVIc3p1UTErYTcrdWYzZ01lUDNHUkdYSE0wR09kYkdoZmY3eklhUkVCK094dlRoMDk4QnMzZi9EQVkzcG9EeXJRVXU2VEVIeVVoNWR0Y2ljK09DaFFGamVGK1JEejR0dnFkRDlGdE9DaUEya2ZJSHZlazJQTFJmdEFPOGR4WXU0ZTBMaXo3V0J5eSt3RHhYNlpHdXJaYWJydXpHeldvTyttQytaRmtuR3NLVHVMek5IQ0pDNUg4Z1V6RnM1M1dyQlZNZ0szSWxPQkZML0JFUVdtOWpUbWNSOFVFazBMSi9RRU1EZmdQSFRaQ3FxV0Yvb0tlZXY0VVI0cUdWVVM1enhCME5meXJRZG5UOHdmZEVhTHRwY2ozSmg0RmEvR1Q2WWM1WnVBaTJEanV3YytJYituT0k3dzZNYXFPK0N2S2EwanphZWY0RHFRb2VVSUFrZGttNXU1blBPN1ptd1R6QUE1VlVmeG91UzJHRkFJTUFoQTFTK2ZZWVZJcFBjWGlGTEZDam1nZU9Fd0FVZERJSHc2MFBncEpORDJPRlJGYndJTUVheGhwS1dXNzJYN2xtdzhPWVdPRncyZFpzbjJkTnY4SnArZkZJNFpobVQ5d1pjWmE5Z1N1QUJUcnU4aHc1azBtZUNqN1NzZTlkS2dnSlBSUmdVc2VVVkhhayt4eDhNUTFGR0RoTXFhdWxtblBMbkF0RFlBQ1M5T1c2SmV4ZTFGKzR3OXZKa3o1VXgrcWdXODVqa3h3enc1d1dBVzVtSFp5ZnpPUmJOTXpDT2M1amRWcGhac1Vwc2UrcEdnUnB4bVo0K1o4OWk5cE8zeHhoZzVSaCsvNGJVQ2pFcGg2ME9QMS9HV1pyV29yaTdhWld1UWkrTFpKd1lwMGJOTWVmWmh3eDQ5OWluNkZKY0FLNERtQUdUSWlGV0p4RFR6d2xIZnpmemF2UVlkNHlZTXlEU1lQQ0xObUpDenVGRmJwbzVFdWlpUVpKbVFsckl6a0V4QkdtS3AyTFRqaWtpUHNLZlB2RjJKZEQ0djFFL3MyZTI2c3hnQ3J1Q0I2TXlaTGJzSVAyVGQ5dW5NN3Jzc3RQMkg2RkJnVWxPQjYwQy96WTRxM1F5MHBybmNBUzdKWk04MTJ5WWRKWkw0NGdJRE51NDYyWVJhVHp5NUhLcTdManhqRk9jYnhhWFpwQjByYlpiVVBUT2IvN3F4a2ZUUE9nWi9kS0tSZ0d6N2JmSXNvUTBEeHYzejk4M0xONFlvdm9hYm1OWjJuak9LSG5aOXNSZFRHakpxeElPWU1pZG5Kd1JaRHBrVDIycHBrZElVTlhGU0JoWEtIR3VCaCtobDMrajViU3IyWE1PN1NCM1ZLYVgyQmpyT01tMTRxK1JzT0dCSHN3WUZOcitrWUx6cUFNMDNuakI5OUdqcWprYUR4TWZPYU5yVzZFOVZNbEJpbFRWeGNXUmlBSmV2L1ArVDRhNE5iWXFFc2tkc1M0YTRyVktMS1FKTkJKUUZiU3JmanRCbU1vRVVLU3ZqZkFsQWxZVGpTMFJoMU5IVXRNV0hXNEZuMzBZVTBJNEk5QVBVOXJ3dHVOK2JlbmxTY3RpRVRSWW00ZzRqN3Q0QUpKR29jZW9rT1JnUU04ejBmSDlOTExhU1FSRThXY0M0RmZrYXNDYlpoWDZrNHNTYkdYTk5MZEl2bVFIT0JHb0dWNHRnTkswczkzeGZBdnJpN2VtTUFoYVVnY0dJeXlmZmVYU3BiSGc5L2Q4bTk1dTgvdCtUdTcvdCs3YTRUeC9zby9lNU5Qd3pzcHZLUnJOVGoxenAvay9iL3pYMm9FLy8vMlNXZStOcXZnbVJkVTBhS2p3Ukl2MTZwRTVGVWVuemIzbzc1QWpnSEVPa0lGOStHWEk5ZkVOWUtIOWNSa1B5cVExR2hQWFMrTExHbm1YMmVHNTlrNVRadXlyRlhNOURtVDdLbDRMbW1SellZTGk1UjJmRGtzS0liZkM1cmt4Z0FEYjZSMnVUZmVvMS9KYUpQNFoydFFidjc1aWJ1Rzl2UWErb00rWGF1aUthSFpzOTFySXlRVytyQm1Jb2d2NFlFemgzMTlmZHQ2ZWdyODY1ZFdWNTY0ckorSlNLK0c3aVUrSWViai9lTHhmSTloRlhPdkV4Y1ZkTkM5NVN4eDBwOUkvYVV6MmFWWXhYdmFxNWE5amltNzJtU2Nic0F6MkxhME9PYnIwdkNROVlIZGhBcExsWGEvV011b3crYy8rcVZ2MER5cU1wWExKbWZFTFg4RWFEYnUxeHYrRVd0SkJ2b29UMGEra1cyT2xtNDJZM0FrUm1EUVlYNlByalpXdjkycEprVUJOaVg2Z28yZExoZThZakVRTzF3eXFjdi9QMmoydWk1SDJQeXl0T2QzSk9BTTd1MUUyMi9GcW5mVVJyZHZiMDRpN29YNE5EcnlmSkxSb3VESTdhbXJ2VnE5dys3YXAwMTRqRkZ4cXhOL2VxVjdyODJhbWFjNzEyNVVDd3VVZFg2K2lsQWlsa3ZzV3VHQWhWcW8yTytWT0srZFdDZlFjWjdTcUMrT3E5L3JyTVBJTXp1TVNhN0tHMkZqTmdpTGNrMy8rbzVWdEROMUZ4RGpScHNpeE0zalp3eXdTa0NzSXJ4QkdsbWV4S091eVhTcXdYMUl3V2pLblVhTlNyeHY3bXpxTnVUbFVVVlpxMDNjbGErdy9MZEJPNlc4NXNVYnRJS0lZVktMNkg3SGhXVXJPcjRDRnFaUER4bSsvV2g1UlBIcVg0TFJOeUlnalBGMGVVbERJVHRIT2VxcmJ1bi9WVGlmVUt3V2lobUlwQW8xNE4vcC9nU3F6ZzdsdWowcjdXS0tONk9DUHhsNFhMQjFCYndLRUd2WXdxeXpVYk83bk5xdnJIbTd0b2ZxQk0wZExuZHF1dmRFTEI4bUI1bjF6UFdPamE1SkFxU0VRclhkQ0gzUERld24yaCt3b0phL1dTd3NZaEs5TWpXc2wwNjdvdDNBRkRzbFhuODdkU2hpUm52dm1hNkJPdjhuUU9tSFVRVFJ3dlhXOS9ENnJRY1MwMlhqMzNEYkkvdnorZlhJYnVTcFZ2VnF2SDFYZk52WHV1bWhnM1ZteStyUWh5alY5eVhuUmEyYjJsTGRhL2pIOGJiYVV0N042YTRQaWxUWmMzbWJsakpib3l6b3Zjb3U4dXovdVBJTkR6ODg0Uk9qNndXMjEwdHlPMG9yRlVvUFhYTlFiazlaSlhHVmtyb0c2Wk15OVhVUExhMHo2clNncWxnWEtsYlZCYnE0MHFjWDkzL3QwUGNadnNrVkpsdE0xT3liaHZLa3l0S09ZTS91VjBzVmdUVWVJQkZXRmcydVVPMERmekY5YldCWHRqRGp2U0lIbFYyODJrbkJsTC9iLzlOanE0d00rTUJndG5FUmVENWx6V1lEUzJHcTB2LzBDYm02UmExM3dINUEvcmt0eWZMZTNZMnM4cTlyeGIvS3VyR0lqbUhIcFEvc2E5RiszRzFqUmxObVlvUXc1WDA4WDJmdnJUUG1LU1pEeGRqTXZVcExKSHBEa2RCYmN4d1JUNkJ4R0NCc1F4MUtydFNUbXNlQUNaQngyd2tWM2pmTFRZMElKNmdraTdLZVFjWHVnTCt1YlFqNVhQYnREb3pCbXpvY3RSYSt6TjJreVF1d1liS1gzbmNvTzBXbGtRc0kvT0NYcmNmYjdQR0hKZnlmNFRQdjhPVmkydHNKeWJZemNiTXJnckJPWEdKUHUvT2htQkVKVWZqZ25pR0M2Sjd3Z0N1R0M4eHlWUkZOa1VuZDVBVnFIM0xIQXk4MXdrMHVSeUpXR2RiOGo3MklDMGxjN05iMnNnZk0yNmVVTzJZZmJ3KzFtS1NtWDBKbFBXWkd3MVVZYjZER2t5WlNsRGVzTnQxYlVYbDBaNW82RWZlNTBBV214c1FkMUJwTU1ZZEE0djlQdURRd0hYaUg5NkNiNXNNZWZTQm9NaFo4U2FNL3EvOUM2YkxDNU5HWTBwS2doWk8vMzJxVDBWVUFZcUhXREdxVmFKaDhUVkg5N04wUm5pa2FwZHlsMm5CSklaVkJxancxQ3JqZ0xhNldBelpuQjNlWUVob3NyTDVBWUlaMmEyY3hybmJML1dSaVVSZmRpMDRNeHMyNlRzRzFPbFl2L1BINGNBaFRvZ0orbWF1RUlsaWUwSUFySkxKTkRtYkhNb0UwcXIvNmlMbkNTajE0ZDhOSDVxYVZXOVFSQXRJb3UweTdOa3R1eEVYT0xVR2M2azIyRDkvVGMycy9qZm5SQWhKSVNoakF1KzZXMjE0RDFRTWZFQmU4bmdJK1FrZWNPbU5ILzcrU21kTVBHZGJpRTB5YXRndjdOdkdyOEtCYkN5SUFsMDJsb2NkRWU2MnV2Y2E3dXMyZGN1eWZLNXlDTDFzdkplZDYyekxyd1M4blI3bmRpaDJSV05CdmhTdDdvcFc0czNLR3Y5SjRJNG44ZlNLQ1B1WHFOQWVhTlJVQ1F2Tm1hVlRCQnVOeGpoTm5jd2l4b01HZFJ6cm04ekd1RDJ6U256WjBZYnVqSldreWxyTS9UWWQ5WWRFb3ltak4zWWJiM3JWcmJ3WEJ6cG9QV0p2QjNVZWM4NzE1KzVzYlhDS1pOcGtDSzQyRGZrYzQyRXdxN1JSWDZmUG8yNW91ZjVpZEdXZXQ4OHAydGtXcUt3aEZnSldITXRSck01WjV5MS82N1QzQ1JSNjFzeFg0elV1Nk1wRkRkbnJJYnVXZ2ZWemFuZjJGdEpLY3NuLzZyTXJTbkthRXphMCtjK0hDcG0rcnovZWNnVFJOKy8vYlZXWXdwM2hhR2MzbTlkTWp0UWh4TisyQ0dJb1NwSmZIc1F3Z1hqdmFSbFAzdEhDQUswK2RPODJwaFFHamVZYzlaOXVPNHVuYXcwVSt1d3BOU09xTFJOYmRYME5EdXNtQThPVlQwbmtEVjlKVkFGNEFGUm5NOHROalRodFNGWlRtOUEybDJCTkthMzVxbjJFeWRJVDJKMExvNzdvVG5Ra3phZC8yc3hFVVNLL3hwQXJicnVsQjFnSmozNWZWR1cyME1XYVZZOVd1Um0zVkl4cmViZjR0cCs1WktPeDVzaFBWTm5KSUV1UDhjVzhZc2NTaDNwYXBKUzlyUjg4UERPTExFR09qY1hFYis1YS8rbFpzbC9oRzlPZ3Z1YnZDZC9jWDJkVGhWS0tBMlY2Z3I1Snh3SThaeEFDRm9wOVd1dWF2TnQybFF6YWFMcUZHcXZHaFRTZ2t1UjhvYitzQllPZS9WZG91OUZGTTk1NnJoUThNT1llRk5BR1hpR2ZHWlVPYnBNbU9WTHZpVDUvbU00Q2JmVHJTNDhqdGk5Zi9uSkNkY3g2UzJ6TlBuSi9MeEh0TmpycWF0ZktES1M1TTF2WjFDdmZmNzY1MlNJVnArZVFib0F2cUFNR1Y2UHI1MzRkUGFOcHM5VTNpYzlUeEtWdG4rOFNBTXpIdGxZdnZ6aHJ5M3ZGNzVYWUhub3EyWExIdjdLL0c3QmU0VTFnNGYvV1ZXL1JpSHhDNzAvejZDT2Z2N2E1enJoL3B6L0pMMUs4d2FyYU9idDFsZjY1QTlDYzErWkkzK1U3d0dtVllUSm9oNlNrajFnMTVjYzJTNTVkOC9Md3VMWVBPQWVFSUFJQk00Z0w3b1dxMkwveVRjT3JQTGU1WUxVOE03Tzd0cytmQnNtVnZKOWNOVlVFWG5xNkNuU2dEc3JFUFdSUnNEWk1Kc24rK2FGVzZLWWhyR1U1Mm9TNVJnYTV2bVZGUXVWQzhzaGVZVlpGakFaMUZ2ajlRbkhIOUxYZUt5KzlpY1RFeXk2aTVXemVodWgrK3E3MXh4N0ZsSHRYTVNFSjZaaGhlU1E1RDV6L1VVVmk1U0xYSWxkdU95K3hFZk1DNUQwc1F6cHJpWFU5UmFuL1RPSnFrRXRXSGUyektOeWVpSis1bzdpMFZWWTI2enBYd0NseGNmU1pEOUM3NTEvcGN5WU12QzE0ekxKVmV4VVJoL1g0blZxVXBVSVhMZHJzQXVwVnRWdGZ1d1pyOWdMTVBJaVJNc1ZqcTlnYUp6R3JWSkNTY2Vtd1lqZlB4QUJubFRxUUZRZGpJNUhOb2UxQzVPMDFaS2lnWVdCTFlCZExOWWsvWmRleFJvVjRTQjJmTHcxYzBYQ0l2bXpxMHFyeUZLQlNqaVRrZm9ZWnZUbzd3c3JBTUhaZnpSQTU5WWpCWlc2UDEwK3ZzcGVqK0VlQlpyWjh1ZWQwODU2eXNDNUJEZncrMWN1RW9wb3JhWlVsOVlWR25Mc2pSQlpFeFBOSmdLQjFzWm1IbDZUYUF6WThHMWVHV0ZORzZLQ2MrUDFJbzB0cTlMSEtZWFVmWncvZjhXUk5ONzNCZmg1a2tnZXFmOFpXUzJZdmtzM0VqN3BmcWk3MW01b0pNZ0dJNlZOMU9GNk1vMi9yNGx1YmxBVFJ0NnBCa0JOOTVudFhZekgyVC9Qek1WK1llaTU4NXh1VFQxWVMvODJWN2VuTlZacmEzVlM2T0dCZ0MreXNJVitZM2VLWHIzQUUvQU8wczc1bDlZWTBwU0xHcWxVQmtpb0RSL3hWRHF0NTcvQTNhaysxVGR1THVHOWFXZlNBeHFYYjQ3UmxqV3E4WUNiREFtM1lCQUdPNitIT1FwNW1ITWRwakVZdTFONEQ2TlhCUGdJdG9saEErb21oY21uUmRCUk53c2dtdVVtZis4eUZJMklFSGxZYkcxWk1RekIwTERrTndIa0U3VFc0Znp1M0MweGh6VjNiMmw2MVpBbjZCbVNLZUZhS1NNSUdLbGtlQTl4NjRxOStYTmR2bjVvbVkyV3J3ejE5ZGN5L3RtTWZ3NjAzT0tVcndqMXpxNVY5M0FrODZ5WlJxUEZsclJZY3FJNXBQRzhqejNUYkRUVldDMnR2KzhxRnFzSUk3R2haeXMrK1QxTFhUUDN5NC96eUxjYWJUN043ZEFFM2RUdGliak1venlrVm9LZUFHWTJ4cUc2czJLSWU3UkphZzNrVE9vTVpjRDhiblZFSnFZRjRWckhhNkw3aVRKcGtiTVhjMFRxT0d6S25WR2FEVTJJMW9XcHpVd2Y1QU5WWU0rZ215RTA3Z1JNTWgwV0lzWnlVVW1oaHVuWFdaTW01ZisvSGJ2czA4bURLck9yY2E1YXNHNWlEajdhSmJZNDBYbk9zRVpjVXF3YkR2L2xmckRiVWRXcHlYcUhhdGN4YlhUVFRnYmVKNzhlWEY1bjN6eUxaUEZ2ck9EZ25oT0JwL3ZIVGFXTFdoSDZUZG44M2ZSN3N0RXkvWDV2N3NyUUsxWFh2RjJOYVlQUk5xUnFEQmk0MGYvbjZ4UWwrTDVRN1laKzQzcGtFTjlUekFDWW1vR3VjVHhTaU9jdFlvQTNKaEJaeUtYVndqdWN2Qm81R0hScTFjaUtPTC9zdWdUNENHaG0rZ3c3SzhFS3h6dlN2UDR4QjlZSm1XVTdKeTgrSXBVNkRFQTEvNjRSUGMwSU5UNjNTeU1aR3dQdjM4ZVBzNjRDN0ZjTGF4dTBxYzZxNnQwUTZWRUNjRUxKY0tWYzJndUNJSTJxbFo5K3Uvbloxd2NsR0NOb2t3REh4cjRlUnFTSHZYenUxT3lmcEgvL3o3OWhCc3l6VDI5OWJWVTRkaGwxaVljUjVFbXZCTk5FbE5JMUFsb3ExekVVSmxGNlJOTE4wd0Q4OExmdjdwMCtDYjRPYkplcTJYTld3MXU5b0FvTklwL21KWHdwSy96bWg5MzVQZ1FQWlJhTlJOSk5QcFVmdk9mZU9ObGRoRkFvMmdxQVc4VkNRZGxXRjI3M0RaRDZhWk55Vm02TzdGbGZEYXJ5aXJ2RThtZlEzeTVMcEhmUkhBQzRlSmRFOHV2TXJUWGFHcVpESk9yVTgyc2FGd2pFWGZEcGp6Z2xVNGcvZFFNNEo2YTA0anovMVVMY2orVGYvTkZUaU5XWHl1djlIVUF3M0F2ZUJTTUgvQ0R1eXpTSFI5TUxmUStCVzhzRVF0RTJFRmdtRkFxSnBkWGZoL1N5ODNXT2V5ZTVMRmlIZ0tFcEozaGwvN1dCYjRGMXJsNU9Xd1hJUGpLWkJ4MXhvWEMxODl3ZHZ4L2l6dUZkWGpxQ1BJMVBWRjhDT0s5Nmo0ZE1kamtCZEtyaXRTSFU3bmdKM2QvM2Y3ei9KMWs4RXpUM3p4U05CYXBoK2I2eTFUVzByRnFNS29kYysxUzFGSDB5THFEQ0F2RHB2TGcvYlVFcXRmRmZwNnB4cHRsTCtLQ0RUc0IxMXgySmw0bzRMMXl2S2NtOVV1TVZZTWN2NlpRY2t1OVdPdXVPc2t1cmIrNGNQcFZQbnQvMTRac2JTQ2RPQmVVWTVnTzNBVWU2MFNMdncrQlNzYXBheXJlRUowcHNaZi8zV2hPZkZIem83b04renp6di8zbDhqTVZwcnN5OHdFbFdaU3FPNklSTWR1WGtUNDlJcFdvS3FDNitxMEd2Y1FrMUhzYWxrVHd4ZHNONzZ2aEhySXZBUDJZUlhaTGlOTDhySHNYZkxKbFMzTVd3dHpIY3ZEY2czK2ZtYm05VDl2NWJIMzljM0RqK3pMamwyZkVTMTZWdXZMdW9vSkRYMDhQajlDem1jVy91NWZCNnU0dGNoeHV4UnZSenl4VnQ4YkpvVmJPdW1SVXRZeHJ4eG5ETXcyRXp2TngzNTNUbnlPOTZkRDNzVy84bCs1eldiSjNzS1YzODJYTHl5dzNLVzNSZjRQb3ZQazIzTXFSY292dHl2WHluNWlOYys5R25pOERDeVdzQzlpa2pITlRlU3pNZmZGTmY3Y3djQ3ZFZWZOWkxlOGdsaG1GRzRQaWI0anROQ1JFS3VibnpKVjQxdW1tRC84Rk1XeitGdnRHQmQzQzBwdkpkMDRjelJUV2ErNWh4RVpkQTh4ZkZjNXJqSXV4ZEEreDR6N0xjeTgvMkNBNnBEZ0dIOEVQbG5wckRxc096dkljYjhVWkZYcTVtTjF3ZDVTTGpuNCtiUHhzdmNhcUlOVVJSby96VzJUYTlwWGpkdjlmM0ZrdU5XS3pvendxZ3FyeFNVWGFtZVFhWHBTeU1ZV1c2bDdCWW9aTEZuZUg3cjB3aG02b0NLbTdNaUdGR2FmSDZmMjdzS1dhWHBlVWwzUmoxQW9XVk5HT0dGd3hZZDBsSlFMSW4vcnF4dFRPbVNzSmQzQjUxaEJtenBSb1AyVmJJVmhSOW1yUkxWOWhYM050b1RURmpFVFduQituQ2s3bE9VMnZzOVNMWFplSWlrVHFmYUphZXZ3SkZ4YmxEcXZkM3ZyOURkVzcvKzZKRkFQci92MDdyMlE2alFmVFFlNkx6V1BQQmpnK3VkLzRRaEh3ZE52VWZkS1BzdG14WnRpcXJ5N0t5Z2E4WXh5c29iVjlHcXR0ajRDdGd0Yk9Hdml2cnFNN29NNnlPc2x0NVpaaC9rc3FxaHdmQUJyVTlKRXRyM0tiRmZSRlA0YzJTbTRQNTdmU3VxV1ZSN04vWFJTNXVjR25wcng1VHZRQ2UvOFVvUmVUcUhNakxEOFlyL3VhRzVIc251eDZSQVk5MmVieFBlTDNUelJLSldlNzNEdnM5SFk4Q3dPNE9yM3ZZNjJtbnBlYnBiczhkbXM4VXNYRVlub0NjY2dWRWo4UFFWNUNyQktyVUxJSUtsdTQ2ZTJjQnlJT1c2eVpiQ3JaaC9UOTFRNzY2UWRUcWNKV2JPaW82WDBKKzFGOWQzSUdvTzNRa0IxVWhJckxOdEpUMS9kZi82dGQ5UC9uOTA2K1hGY2twQndQbU9vVE82SFUrWEdjSWpId095TFJESHFXbkVDMHcrdWZKMUpLZ2dwRXdjalVSanVFYWZkYjB5ZjlMSWxvVVhNQ0R3TDhWTG5GWUM4VFU3cVZWK2lyUnJ5L3hXUytOTGQwMVJ5QkNVVEd2OTJiNVhWMUpaUDUvTlR2Z0hVZDFSN2ZEMjRXZkRpQ3BNMjNtMTNOeEptS3g5dWtycmxoRjd6QzZacnQ4KzFyZnRlMjRWZTRpOUhhMGFOVUoreFhMQi9XZlpmRXJ5cGN0WDdIaUh6OWw1TkxtQko3QVRIRThmdkl3ZGp2R2QzK0NZQWphVGtrbDMvejN3QlZqOHZNbXp2REFWYmFzQWdLRzFPZkFqSW1KMldFUFpzRk0ySVpiNUxkc1NMKzdCTXo1d3J2TjZScXhTRlRELytXN0FpRC9Udk9JV0pyOWs4dDU1WGgrMWFYMlU2cW5seE16RzJhUWNMdnpHWGFmdDBvT2NGV3ZFVjJacVFyQnREVU80RExLdkQ4ZkppVXZQK2Z0aEFma2lnR1FpbE5BanRCVVlxWDQvNmVGa3MrdUMwWEh6cWRLVzA3eU5rSlR6bnUyKy9SRzZESGdlbGFibTN6OWJVZDVYenE0MnRqWlk5cFNYeGtzZC83bWxzdG1IdkcrTzZYVWUySUJNemxTejhWeFQ4VUZraDJlUXlKKzN0Zi9HMkpDbGVIc2J6UDkwQmJSbkNhdTlBbXVjNlpQR0NSWHBIUERsTmM5U21ZejFQS1FuMXllYmgyaHZNcFF0ZmJJd3JwcU5MVEcxTmxsMmh4dnNHM3FhVjlMYmF3NStkYkdhdlFwTjFzSE95dTJ3SkxmNVZLK1VPbnBIVDJvb3h2NHFNb2RWV2dKSDdCTmdaSGVPdnRmZC9zdEtJTnJjblZTek54Q3VwUFFrQVAzNHlzVG5RTm10N1ZiWmErM1VOcFlnajVaSGpCc2tLSzBRUXR0enhkWFhweDhkY09EcnRKdkIzWXRYMzlHNmYxVFpZL2JWZlpFL29pSjdzVURMbHQ5dC9LWkRjMTVyL2RrZXVNYjR1Q3VWNDlaRVF5a24yUllNdG05UlFOL2wzV0dBQlhrRkw2SW9IZjhuNmR2QWtoR0x5aDdiZWd2aGM0VVNDb0ljUG5lcWFlWFh2Z2d3QWVkd3Qyd0k2NDVEWG5LMTIxSGhZQnlqVkswNk5LNC80OGFMdm9YVXkydDRTcGUva1Yyei9UWVdxcWozYkEyR2pHczdXamJvN0hZT21yV29DVVNQYk4ydUNWUnNXK0VTRFhyUnZ4K2NpU1pHdFg0ZmI1UktxVWQ5bm50VkJwKzlJeDBZbkVKYlVVYUtXVk5IY1hVSzh5MW5aUjdpbzlETFB5ZlBTeVhUQ1Z4MTc0bnFsbDQ5b2tiM2F3SUxLaHVQYUxXUFhYTnV6dTkydUhFT2FKNCtlajV2YStOcUY1RHhtUTBLSHR5eGpuajA2cDVCOWE5NGYzYXA2by9NVlVhdmYweldQSkE3aEo4S1llYzVlV1RBdmhNNmtWSjhzVXppSURNdktYVWI1QitKSlc1dDlKUm1mUW9UaCt0Wm4xNG9vcDF0TEd0ZUdaN1U5TzBtYzVseWRXYkF6WVhiZHgycCtwTy9DOHpTUVZHak8vQjN0bEQ3Tzg4M0ZrMk5xVldIcHBwV3BuRWsxbi9tcFpvVjZhSmRKSG1PN085UVZKU3YwaHRhN0NVNEp0eWNiZ3QvbWxEcmY0VVo4RVBnS1VnL0NjSS9nR0RKZldON0VrZSt3U2I5VHVYTjFrbTNDQmVDN0k1bnQ0Q29EQWxtaTRRMUROOFFYZHZBVmc0MjA3eDlmZkJJcmlvL3JzL0sxeGFWNlJzOXhzN1h6a29TQzNqUXltQm9BbmMwZk1HcEJoaHByUGV0dng5cnJkWHN6bWU0UUtnc0o4WVByMGFhYnVucWdBeE1RVFFEditOUGN3eGoyT3lNNmR1LzNmbm1qL0d2MTFrUFFJQmZOQmNDd0tUdzNVZ1M1d0ZyQUFkUnhWd1JnVzhxUUl1aDF0SEtsT2tyOXJZeTE4ZmFvd2lXMnNnNjdZR0wxakpaTUpVd29jcTRUdVZ5QjIvN1FLSzdYUWJvUEd3QnFMV1FEN1dRTDdYUUg2ellRMElJMzdvNisyZ2FBSDcxMjNkMzdjL1BEZGNLMElBaC91YkVYSzNDV3dIcDJFeVBPeWJIOXJZbWYwQjJQc2hBUE1zU0habWNldjRGc2Z1eGYzOXhmMnpWLy83RDRzWGtiZ1podGw4cXdZT3FJRUgxR0NmKzhFZkw5TnFNNStHelZmMm4yLytNRWUwbVVldFpjQmUvU0hvY2tZY2NKNzRCcng2ZFJnQW9EMDRCMDcwcWNob3pZTGtXb2I2NWE1djhtZVdKbW9tQUdwd21QSWZRQmdXNU84V2FqQUh2bzFkdi95aTQ4YjdiZndUUFozc3hBR3YvYWVvWVFBZ3ZsOUtFd0RzNlI2NDBmdjF3Ykh4UzlIK1Q5ODlyU3JOYnEzbk5MMWZIbHdBK0VSRE9JQWZoMXprd1JWSFdndVBUbUVmV0svLzNYdE43MGNlenFYYlJILy9zNkQzYjMrUXN6enNsTkprNzdkOUd4bHNUQ0hweHpJOHUrL1Q3Nzg0UXRXOHNvSDNRK2pKQkhDUjhrcjRSeUErZjZ1RE16NE1jallQOTdTaHY5SENucDhLZjNpR1VndmJnL2REdU5EeFNhSUFLTVQvMjFjWjhLRDhETDN4dVRoRmNXMmk0cDlWN2hYTFcwQlZIMXlIbDR0N1BMMi9sUXVvdXpoWDc0cndodjBha2JLbnA4OTdQTk83Rkh6am9pdVdsRk5lcytQL3NCYlAvMktuSGR6OHVtdnJQWlN4RmJMaXdWeHlEVW94cFJrM2wrLzh6TWVQaDVSMUdBY0E3c3JWKzQvcEFtSlgyNVZzaTRndkF3cXhXRFRhRUZKdXlEUTJFY25XWHFsS29wS3B1YW5SQURUQWhaTzA3WFpiS2prYmxuV3A3UjNZYUFOVFBiNHBHVGR6dVVPcWRZMVdpZThtRDNqb2NUMDZVeXdRQVVsQTIwWUJvS0psWFJBSkRNbE5rTVo3eVNvdFpFUWpRSS9FVWNsV2xkV09YVlJtQ2xlT2dyWVdWSTFCTDdtYis3MmUwZE5yc0wwQzRkWnMzb0VLaGF4dU5zbkJFYkZ4TWtTRVIrK1pqTFpIWWhKVlYzbXhveVZSYVVUMHFqb3ZyZWdjVmRSc1hqa21hRkZ0RWVKbGplUUZWUXBtVTA0UWNiQ0hqQXoxaVVJYXd2bE9Ya082TFI2a1hlb21YTW9qWlJOVjNmcXF4MzdIaDdmVWVnRFZDMStacUV3bHE2NjN6Y3k5M3E1NzQrcXVBcjB0dEJVcWYrSnRqRmlwYzBCYSt5bDVhOGNtN1l6TnJLTkErSVFGTzNwZjFmclZiZTFEU3BoTldSdG9IZUpOaGZzWFJlZXhxdnNGcVNmVTc1NkUxaXlyc25CWld4cFlhR1ltSVJLdldTN3o3T2cvN2k0Z2RtNEpEYVJjbWhqcksxTTZOL1JhY21PSmhHaGw5WTA0SEt4a2paL2NHdktDbkFydGR1d0lkSzFJUmloV3Rzdm9iNUhZV1ZhaENMNTdpWlpTOVNVcStEVEg4OTF1QUlqeWxWZW5OYTF0U2lHYkhTbjJ6WGxucDh1cWQ3bnFtUG1uQ3dYbXgyMVg4dVBIeHpnZkVJdEV5NTl0dDkrdXY3TFhkbFBveTVsNjcxbDRNQUoxbzVXb0tJRjJGKzZYWjFUdDYyTE41Z3V4V1dXbEV0TWt4UGZkdk54RnJZZ1IxMjFSbDJ2YXNvRDhlZzYzc0Y0dFE3bFFlR3hiUGVMTUNUaXFyMXdETCt2U0pmVjIrNk1YZlc5Y0VNUEswTC84N2tFaThZMnJiOVZEdCtQOUd5THY1Y0JXSjFvdTdjS2RFeFdlcjhqUDR3dkRTcyt6NkJ1UGFHS09ML0NtbGlTYTRieWlMdWcrbVJCUlJmQkFON0dTWjAyQzRYSDhlcGRXci9DQjhnYlVaVXBlU3M1eE5RRElPWVZBMUVtSWVpS1hXS1pSQTFWR1RDVHhvbU9vZ09qUURjZlgrejFybE95aG5Vd3RFUFppUURTbFNRMFhIT1Y1c2k5ZTZaM3E2OUJudEMyKzZ2UG9QdkMrNCswVmJUdDQvMS84d1hJeEc0Nm1FNHduMEhpMy9YQVFwaUxnQUZaZzBMajVLSCsxWEJySFFucGhUWjB2KzNPaklwKzZiMGdzNnVvU0U3cVZ3anUzdGVoOUo5Qk9YYy9Dd0R5Ly9hVW1GcWxGTE1tSDVsVTFSOWhSVXc0U2FJMzBxRkhXQW5tbVNscW8rYXR1RzRYc3NTMTV6ZjFTc3lsNWJaM2I0cEZYODdheUFjZG1jWit6b2VoenpvWEVkYVFTWmtvb0x2bVY0TG16dXg2dkV3VzdSVkNFdFd0M2RBVUszZkZpWjFhZGk2Vk9RWGNoNm16R3p6Mmh6amZNS1FxVGppajJ1MmFwamlUUHJhUkdKNzdhTmpUcGNkNmdQSkJXQVA5WHRhcGNXUDl4K2pMOGpkUFB6YS93cWlOdWZEQXc2M2JYS2tscm1zQWUrUVU4SmZ5ZkEydnFGK1JQM1luMTNlaGg1K3U1SHJiTVJJWXc5UEx0b1g4d09ZRzFrWGVDNGVhOVowMk0zYU1hdW56OWNueWF2WHI3TEVRUEhxK3FwaGlKSHkwSmdKZ0F5c3pvbXozVGxsWUJDZGJJdlJPY1VlTGdOWkx0TE9wRnByWDA0V0tPZ1Y1QWxpdzlleDJiTTJ3Zm5ZK25Odk1WL2l2dS9oT3p4RkhWYmxKRFdhTko2U1JsdVZHOXNWcTB4clZFWFRmVUtCdU1xNmdQUVhkVXMxSXlWdFN3Sld4dmhkK2luWFE5SUM1S2h4SExNdDRmbkpvc3V0WU10cVhBTEJ2blFGUUJtSE9XZGxWcitEVFB4bElnZDJHTXE4bGhQNDhSRFhPdUVRTVppODkrWWljU2t0Z0pJTG5tTGg0T2gwTzBlTXF6ZG85YnlvZndtTzM3dWhQckpJZGNMNzJzRTV4OHpxaW9WWW1reFZGRmE1L2JsYW8zQUtnaC9rRU9BbVB1eDViRE5PUXExYklLd1VtSmhpWUhDM0NjbVpMdmtXRlZrUTVaZWpuRTljQi9zQ0lpNGxVMGtZNmV0UlVOYVh1b1FMeXRKME5veTJvTUNnckxpSkNkUVIzREJPZit5eFVDanZMZlFGYkVlYS9UbDcyU3VOT3VwbFQrbkJ0YVdncmx5ek5jUk94c2JYL1RGZEp5LzJneFBhM29VMkdwWWJDaEwydjVIMmF5SU5XTlFML3ptS3pZcVVDc3JWMmFzcmVYUkw3L2NsNGFUNjdTTVRBeEVmSkx3aE9oTmhYT0p1L3Awd04vdkNWTXFDenhPamZONWVMUkxPQ0tJYytNcjF4ZTZmQXdiRnNXNEw0YzI3bSthdG9BZEFUYnBsL04zUkpnYkIwbmZNMjZMZnVLa1BSc0RTRUEwVk1UamREWFk3SjRmNzgrWUYvUDQrc2hWK2hjbFpUR2Z5UFRtOTB1VktQUmNCaHV0SzVDS1dZZTlwZ2E4Y3VDcVJqaGNNbzV4Tmg0UWNZNkpSM2FrNVk0MW01U1JCNFdGRlV0c2lxQVVqVVNNQlo2N1BjTUlkQk1hMmljRko3VTdqMVdzZjFPYXlHY3F6RXpDM2lBV1VhNUNqV2FjM2l2MDdDU0pSSW1HRlBiaWQzT3I1V0N3TGYyKzRKMkxzYlUyVUZoVlN3VHJGcUR6SWM0Q21CTmpKRFdsVmJUYURRYTRtWWtYcGRza3lKM2RUVWVUMXhHdGxUSUp1Rk1PR25oT2xIS2toTkVHaEp6OUJsK2pBbERNQ29EUW1xWnpCV3lVVlNJUEhWYzYyUURaZzlQSE53RlpUREVrSWtsbWdRaVlMQlFrRDRIWTlWb3JLdGFBb1NMS0FGcE5jWlVTaG13SU8yc2xSV1ROaldtVmxCOGY0UlJ2dUZleHdvcVExWmtCYXZqaHVKaTNnb2R5ZkRKS3dMekFGRHZvaGFXaERSaUo5MmpUb3duOTM2dHV3VGkzSmxZbE10d09DeXQxNXZGMWFCbEFtWkE4Mm90T2RJR0N4MFdRSm9PeDYvM1kxblpvZmZubERsbzNiL0g5cjBTSURMbXdZT3VKYzlkYWYydFdSS0FMYTNEVjlwQkdMdG1idmEzcEM0YUo2MFI2WHFiR2E3UisvZVQvZDVRcW4rbzhvZFk5V0MrcHV5VjAxaGlDSHdjbzI0VXBWRjFIUjBTbXYxNEljcVVzTkJqcFlyYVhvcEJGNUphaDZjcU9rL0phRlhtcDhsazBKYU1naENrRkJ2UURQenJGcFF1QU9Jc2FZMnY5Mll3cDEwZ05GRXBjcmRoN3RhZU1MUnRUTWt4R3lVeFNWVmdGU21YWmFOUHN4c1krSVpwOEpHa3hwT2JBRjlOZDBhVzBQUHducnI4SGpDYkJDdDdwY3JkTnkrSDI4bTZRK3BYajQ4K1VNSEtDMkZOajJRM2VmKzNhUnFIdVJEK21iLzVTZWZ3OTRNYU1MQ2ZHVlpaQ1NmNlM0K0plL1BoQitTbUsxSmZPRFU2RTFaVXE1TXQ2dldjOXphT1U5VmxrZ3ZxNUl6aGVYcUxoWTNwOWRNUDc1by8vY1hoTEdlZkhlemFLODh6SlYxZjgvNTVpNnI2OWVRZlpYRDMxbDc0cE9iamVyUFpmUmszYzRmeC9MVXhlWWd0Yk03dXcvMXFvZTl6YllucCtUeU1CN2RXMDkvQmR5ekticXRlS0hrc0dseVFVRmJLeGQ3Tk5keGRFa1pBQUJBOGlsTVBHenZSU2dHQkVEellNWG5uVUZ6UlRIVVNnTlo3VlVUNmtlQWUyNXBxZjlRWDFmODRzV0RpSTlQSEViVTRaV3RMWUxQRVQ2VjBRTm05ZWw5aTBMUTlIZTk0UXZDbHVuSUVHaVJjUm1wUG1aUXBEUW5tRjZraEFBUHh2eDkvMzMvLzk4TEgvMXRTTktJZkFNQmErdzhaNUFGOFBHLzlzNkluK2U1c0RnR2dZQUFBRU1DL0g4Z2p0NnZyLzBhOVU3N1hYMEJvS0JWQ2VvN2czWVNOdDZ2VlE2V2Q0bi93bGVxOVFsWk5abTFJenkvMnl1Y0wvQW9JUnk0RHBmdU1RMzJ3Sk1yUDZDTFBVRGZoNnVlQmxscmhSZkFiOElONVc1ZVNWY2FwTytyYVBpK3hienJmWGF6bzdPZDgvN0xZMVE2Zy81NmwwcGVaQkFxby9yNHQ0Rjh5MytoaUNHZTRua0FqMCtYV1Vna3UvbXljZlYydnhFMFpEdnE3VCthVXRoT1V6VmY5T0pBVldBbUFyeTV2d0Q0bnpTT2ZlWTJkcFV0dDIrYUFmWjZxZDBObExzYzQrNGs0SldGdmY5UVRxdnRHTGVSalpoT0M5eFo1MWNMM3NJRDlRNVVqWmR1eDJ3V3FrS3B0RkdVSUxabEhMd3JaSVQ3RlVKY2lwQkQ4ZktFOXUrOC80aTBYOHR2YnZPWUUzQkNQamJIbEhqdG1JdGt4dmlzaTJvRXVmSnkwSVFZTnpEMjZvOCtLMGJGc2w0dlkvdUlKUUhZb2VOOCtXUVE2ZHdKUFMxaUp3ayt6MkZTMnB5ZTZyYzB0YlQzQjgxTGZoMlM3aGhmVW1yRnlMcTBFb21pSWI1MytZS1ZlNzVMTWRBd0RrSnNDYy8wU0NzVHN4VStZV20vS2V1ZksrV2pjc0Y3WlpGemJoVEVqM3BuNXl4VXRENVZXRHNzdWVDdGljL0MyTWRmSTU3ekk5cjJRSHVOU2ZMMjhKeWx6NWRrN0VuSVJQMHZ0WHd4dk8yRHJNdmFyeEdKRXE1WFhMTCtMRjlSeHdlbElkaE54MGJUSHRKb1JQUktVVGlueWxaSUU0RTlYbmFVVFFEZ294QjJNQXBBblNrTks1Sjd1NFN2QnRuTy9zbWUvM3QwMEF1YkovTUhmUitrOFpFY0Z5Z01BQk5DUWZyUTJGSXdEdFRzQitoOGNnOE1CQ0l6RG9TWUhBSmJCdHdiRTNYc2M2OTIvTk9EVXJqWWxHa2c3RjlKQWtVN1hJS0JZVzRNRDNwN2R6OUhNTXJzQ0FyQXI3MEkrZm9hYzNWZVE4TFg1UklKMlJqM01HdFZyWUNWRzB0QTZLTld3b2RyZU9wVmEvbmpYVTZ5SFdKeFp1eWJKNnU2Z1U0ZDR3MTdhekVKTW9WOHI0d0QreWtya29FWjkxRlpxNUhMeDlpWG9BdzgrSERBSU0ycHFXWER3em9mWFBOd2JzZzJmUis5azZ5S0ZnTHNISmtYOFFwZm1qVmNkWW1GU2dOeGVyMk9aWWdvRURaS0I5WDFtc21SS0VubHJJRFFOUVBsQVVEWXVsU2ZHV01jeGVJZWZlcU1JNnZCQzFheHc0OTV2SWJmd0JXSHd4VlV2VUl5V2p0VHdXMVRnK2NaVERiMTlqYXJwK2ZWVkVncDVmWDdzNDBLOE5qbnFyam4wdFkyMUZkTWI3WW9waVUxeFZXS1ZQeWF4eUtjazVsUk5pRzJFYlJ2Z1Vpa29UZzkxU1hTZ2JCSmNiUzB3YTZRQnBpUnFtVTFJcGFva0tpNVdNWkdOaXJwR1N1R1VSQ1pRcFRXcWhLK0tlYXFJcXdvNThRS2FQNVhoMGRGV2thbHhjRnZZL1BXM1FycjZ3OWRjMTNhbEptMjdyaXZ0Mmx3VmhWNUZJbHBrcGFvQkVWWjVZVmF4RUZYYUJOYS90cGpmeGRaZXp1dHcrRGMrSVAvSi80eXk0TnpncmdiSXdYMEVHYlZDWmFXd2xyU1NjajZPL0UwK0lCRmgwZDBpKzQ1djM3ZG1OWlhLOVRYd0d2OE1mUGJldEN4NlhMK0FwQ2xEVy9Iak5pSys3dnJxMVNzNDIxMjhiYkcvTXZpTWM1R281SmMzS21kZFoyOG83RVU3VnJDR0JQWjROdEw4OS90bFhGMGJJWW1OSXdCQkFRPT0pIGZvcm1hdChcXFwid29mZjJcXFwiKTt1bmljb2RlLXJhbmdlOnUrMDA/Pyx1KzAxMzEsdSswMTUyLTAxNTMsdSswMmJiLTAyYmMsdSswMmM2LHUrMDJkYSx1KzAyZGMsdSsyMDAwLTIwNmYsdSsyMDc0LHUrMjBhYyx1KzIxMjIsdSsyMTkxLHUrMjE5Myx1KzIyMTIsdSsyMjE1LHUrZmVmZix1K2ZmZmR9QGZvbnQtZmFjZXtmb250LWRpc3BsYXk6c3dhcDtmb250LWZhbWlseTpRdWlja3NhbmQ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6MzAwO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi94LWZvbnQtd29mZjI7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R01nQUJBQUFBQURJMEFCQUFBQUFBZFhBQUFESFRBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdsd2JuRlljaHpBR1lEOVRWRUZVSEFDRkFCRUlDb0dxSUlHR1ZndUVLQUFCTmdJa0E0aE1CQ0FGaFVJSElBd0hHMnBnUlFkaTJEZ0FhUEFaRmtXd2NRQUZtKzhUUmRrbW5VajIveWxCbXpHaGRlaGJaU0YwUjd1bzdoa1pDWkdUNmhucG9iWlRXeHk2Y09EaDBFZy85bzBGUitIQThzM0oxYjN0dzU5WG96Z2NDTndqWm10dHdDVnhYNGhMb3BFa1RhUlh0MFpJWTJJdDRqZjkyWHNDdk1STFV3ajJRbzBJa2hjeEtrWXE1aVF0Y2ZuaW1ycFowanFIdEduZ0pibC90RHF6aWlxZHF3QXpvUTBUTHg4Nk16cFg1dEk1VC96djk2OTc1cjRBb29zUkJESmZCYm1rV2dzSXRvcU5iRzJYSjlDa2VvYkhiZjN6QkJtb0dBMUk1YWd4R08xR1Rhb05FRlRNNjdJdW9uOUZYdnpmK2l1aXdRRUsvVy9haG1pYnorVmRFYlZWUjRZTitQZC9qY3pDVE83TG53V2dJcUZsNVFBbDIxWUIycDVLSkZsTDZKZjdaZUJ6ZnU0Y0ZKM3ErQU9DOFFWNjZ6b2JXd1loV3dEL1Y1c212RVhvekVtRVRXdnRLRzJUUEczaFdjcFFtOW5RT3ZSOEpGSVZnWkJkMm1iRmMrSTFmWVh2d05Ra1ppdnF5UDBlOTM4NnkxYmE5ZDN6QnFHTHF3QVgzWHB6YlRINit0Ylh6R2drQTJ1SmZReWVsZldlSlN2Z0MwSkZVRjFheE5kVFUySFRwU2o3bEpsL25lbXE3Kzl2U01rLzZKYWRHc3NxcmdHZWV0bmFOVlBMNHorZDdxeC9zZ3huRjJUNWVnSFNVV3lYN0FERFZNS3hveHowQmNodVh4aTJBc0NhdFRQeXZnT09OVE9ick9TY2NHdUNRbHpoRWJLQi92cnR6MWlySDhoc1puYTc5bkluaHkweVJFTENKeUxnV2Y4Ni8zQWdUREFBQUxwak5FZzNKTk5RWkxoc1pMb3lwRncxcGs0ZGN0aGg1S2lqeUFrbkVNSUJRcCt1Si9pbGtoaXB1Q1BIZWcrRzlscEZvUS9hK3hPS2M2SEZBeEIyenJwM296QVhhaUJ1eFZNOFZtQ2tXbVY3dHQ4M1VxbDZpNnh3eWFzd0NwVjkrY3pVNU9manJNckgvQjFiZHNTWks3bVNXL2EvdENtdktvSkVpaFlqVmlLUFByeW1LVkRrUC85ck1NTXNjeTJ3MEZMTHJMUFJEbnRkY3gwekt6TS9FNmlBcENqNkwvay9hS0EzQTI4T3lWeGFDNE9sVDVhZHVQTVBXZlpCMHZCa1J0bmNZQUdkaFN1V2JsbzI1MXJUOWVDT0NLTGdmYllHa3FCSjZWUXlhNEtUR0lIVWc1ZmhxUlNZRWpNSFJ4SUhJK2xKM0ZUenROMHBXaDdERERGUHB0b3B1TjQ0Si9BSWtnMVNlT3BjaTloUDBSVFFFaVdPd3p4TjAwWkhVK1VwUzFHRjhCWVBFRDNBQkxGMW5xTEZmQXRTSWRzNHRaUXJFSkN6OVRLdFoyVE1VVmhheEhPTFczaVlTdDBwb0VjWWdvU3g0N1ZEcWN5aGtna0ZQWUhkdk1TeDlWOSt0NzZOTFpxREIybTlZWWhtdG12NHowbDcxYURYL2hjek93UXV4cTZrMWxVQzdubW50Ry9QM1N6ektHUS9md1JVRC9jT01RaURJcFRnanh2dmIvUGJ3RTlzbEE2aWpMSVR4YmtHbHAybVhoZlUxTzVBL3lIZWFiUldJeklkV2pXWjJXMDk4UzNOSm14SVV4RDBKUzJJUXFoNy9ETE9WRlVZOUkvMDcxZHFKRnk0Z045U055UHNBcWtsSkdYUGFmZU0reGJGNXFJWWMvSUFCeG1sbTRCY0Irb1BPUnoxOUNNMm91aDJvR3RFTk4yQUpGckNWek80Tm9EM2V4V1NFS0c0c2pNRHRPVkpTZ1lMVjNvU2FMWWVlNk9yRTU5Sld0STdYcTZGTU5CNnBCYUR6bVNHN3g5UC9uY29BUUMwWU82NUFWLzhWcVI1cEM3TzBLSlJTVGlYTUhlYWp6dnE4ZkQ2VEVhdGRTZUVkQ3lKeU9QN0hTMEhOc2NqbjRFVUg3SVZ2NUI5TmNIdDZRK1F4cjVOZ0psRVlwQmJsN2lXRlRnMlN2c3ROTHBrMXdkMEVPQi9IS09QNTFvQWtLSGJrMGN4Z2FVU21FZHp2dlJFWGZYblVFcXhxR2dkeC8xcFVCbjZ5U1ViaUw4YmtJbENwT0MySEYvWTB4NXFweFRMNkxtbFVQYkZPSk1qWVFEZVlKSWNZQWh0S1ZxZnJGS0luZ21qT0k1ZXgrV2JTVUFyQ0dOd2hJRGlhS1BRVjEyZXphZEEwNENIRzg1TFltaDJnaU1Fb2hndUZDRTdXdDJSbnBaT1AwTEFtempKTkpNbDFGcVEyd2ZiVUJKYjgrZ2RmaVNHU1cxZ0MxdFowejdRVlFkZG9UU3lzalNlYnpvbGZ5b2hTdGdnQmVlTENIT0RmTXlvMkJPUzhhMTJoaWRyM1lVaFJEVlhUQUl4RTZ4d21zMERFZzFNUkZIQUd0R1pKTEU2Q3RCWmw1SjJBN3VsVFAyME1qUVh1K0ZHY1JoakNvVlh0b3daaXRoZUFpZ2Jsbk9aSVJnRENnWUtlampCUW9RNmhSaDJMSWFyR1dCN3orWWl0S0F1cUVNQWw5UURJZ0hjOVJzWWlVekFOZ01zWkdMTG9VYXhha2tWcmZEb3pLMjEwWmJLMDRacGk2Q0VCVm9zTU9BQVVWZ1Fpd1YySE1qQkR1S1VnSk9JZ3lYaEVNbnNVQ2xTYWFTeHc2VHJpT21NUlYyNFdTRy9BcjFvYjhMTjlNRmFmYkZvcU5yY2NDTnk0a2lqcUl3QkpsTndCQzhtV1ZnbEcrdE1aK3Y1NU9NVjRFaUYyS0NJYlZTc2xGb1pOcG1GdzgyWFdzd29DNTZLRCtxVXJvSXpLbW51NEdBWmVKWi9FQUJNNFFXUVJwRnFob1ZZQ1FmUGRwT2hIR2FXdXg0ZXVGaUhudTQwMHBvMU43Q1hWTW5mS2pSMllkRmlzY1dxRnF1QmROdkFhOWR5OHRFVFArNzEzTHdjRFB4dkRkMGF3KzluZXlmZ2QvWTM4Q0VMNXNKaVdBbnIrMzMvd1pLY1Fud0tqclhpTUFCcER1Q29hVWlrR0lTaENBRUZ5RUVWNUplbEZjSEJwOUxuZS9lL2E3Yk1FdzhLcFA2WlpWbVZSOFM1b2JBbVZaSldPTTV5MGo4QkFCUVlRVFVtUXlhWkdFVDF4OUhEQ1VrTUcyTTJIRU9odVg1SGpUdUJwU3BBS3dpWE9tc3FCcURBWHpRVUl3WitmT0JIdmdaaFloUEczL2pWeUl2Sk9EZEJJQzBqSzVzS25ONzZxVXhzSTVSanRBcGl2d2NtZUFRSzlGWUtHc0VTdENRUW9nNzZHNFplbXFUSlRBUlcxRDh5QlZJUUJWTUloYVp1L1ZIN2hTT0JSRktSbWpRa1Nia2dRSG9pcll6aEtGWFg3TElKb0xDNWFhbmkweGdXTGdSZ1RnbGtyT2ExV01Kd25ROVh6bGNmbUFEc2hRNEg5RW9lbnk1U29ySHJXZzl0czBwSTd2LzNzRWV3QWF6cnVDK0dDUENmeHJrVDlDWUE5QzliQTVCeFNLSzNkeDBBWUkvZXlpcW10QnVBbzB0Y051YnI4MHdsNCttNE1QajltS2FXUC9GSjF0bHRQZFV6TzRHL2hMOVdqcFROc2xWdUl5Zkk2WEpYdVZpZUV3cXQ0ZGJtZmo4QUNDSnpTZmRuNHBNbzQzS3NrWFd5c1FWcGpEOVN3bTBGOUFQQXZ3T0FOeDJ1dmNiMkM5dUFDOStFQzg5NHp6cWZHYVA3S09iaHJuTTd6MjBCQVlCRVFIOG5nTjdLOTNaMWV1VnpOUHFuN1RQSEl2TWNkZFYxaTYyejNuOU9tV1dUK1phYWFZa0x6amx2Z1d1SWhpUlFzR2EwbW90Z1lHUmlaaEVsV3F3NGRnNU9pWklrUzVGbWpmK3Q5UUFIb2tKNmIvM2diakwxMWtkZk9iUTNnQmg2Nm11OXN2NjNUdWRUb0ZDUlltVld1V2UxUy9hYjY3RGpqampodnBzUmNVdU5MUzdiN0hiVXVPdWkzLzBSRGxmYzBCQWV2Nm0xMVQvKzlxK0ZCQXhIaFNkU0N4QXVSS2d3a1ZyUTBRc2lhODJxcGJaYU9hT05CQzd4RktsaVROTmVCcmVPMnVtZ2s2NTY2YTZIbm9ZWVlLQkJQRWFiWUt4eEpobnZySW55NWNpVnA4UlVwV3dtUjAyRWpUYllhWmNkQ0EyL0VBQm9EUUJzUDlCeVFMOEZNUDhBOEo4RE53Y0FBRFoyRmJ5RWhPTVVMQ1dxb3BoSWlGRkdQNi9KU2Jibm5KZ1V4VjFEekxRQWhDSkl1RWJCbzNneWFTVUpSU05kRUxIU0h0SU0zSEhHc1NOeGZld0VuY2ZyNmNDZ01XbDdqYWFKMDBleFF0UVI5aWlHNENVdzhnU2lKbm53U2IycnNBaXBSRWxueENZTXM2Y1N5SStlMlJ4NkVxYitDckdFSG1Pb05BT0ZwSlN5TmxBVGhIVE5Qb0I5SFFPcng0ajVYa3pPZzRRT0NXbWNQalJ4VEMzVThZUG91VVU3WDd6TXZya2lXbzdkSnNablFRQUU3bm4xL3Q1ZloyUkVRbW8wd2VpdXZKa0xsZyt3Uk9rczV4UzhNOFdMbFRvRXhLUkp1TjVabHVjOVZ4bUdwM1hvaFNGWmc2MDJoMFBwZlFqZ0hITGRVOWRZR1pHVWpGOHhHUGFmcENpTkJxOVY2aTA2VDA0WVlwNG9LMTRvYzNlbHJDaVZFWURjL2oveVFTblBPdGFKbnpIQmFhaGNBMENmQUNxOFM3NVp0QWswcFRuS05BdXVNUVdRYkZpdnRuUFV4bk1MUU91MmZFbU5iMVpxNTVJTWM1UVp0bXA4VnlsUitGQllveWxYcFg3VkJEQW1kbUl0SFYyRlJ3eHEzZjR6Sm94NHQzS1pmcHNqeTh1L1ZXYlVnN1oxUjlNZ3Biako0dG00V0FETVFrNDV3RFNrVVJndHlFbXcyTUtSVFdERlpkTi9GR2FSZlpIYmE3T0xZTy91VDRpSEI0cU1jcXRIN0tWdjBicXdPWkYvdGVZK0RRNG9IVVFZaFE0T1ZRb2JUV04xUzdEQjhQWGMrenV4Nk9RM3hPMUZkbUVxQS92eWlLM3R1YUhTUmFXNDBPWTA4WlZBUFRXTVh3SzRaRU94QmhDOGZUd2FzR2h4S1N0N3lRbEJvVDUwb3J4K2tOcW9tRytxSU0xNFR5WFZoU0lEMTB1RUkyQ2N1Rk9xNTRDY1F2Tnp4L3BjZjhHb2ROWS9TM3htYVYrekpac3c3OWlsZTlGL1U4cmhQVkM0bVFsY01EcmJvRFlTNkNOYjRBS3d4cCtSRUZWUzFUSTZVTVp3NHdZV1FOUFFXNXROVG5GUGROZ3cwRk0rZHFnSGc4MjZKOHNpVmkzdW5RNFRsc2k5Z2I3RzQ1bVdMbmQvRHorL1JuYThSTEVlNTltcXByN1Nob3F0VndTSXZmbUdkVjJ2OHlwcWpVN3Y1ajZuclAxMTFwZ3NpTHhOamUxV0hCOGJNanBXSjgxZHRTMnBhbndUZ3duTjIzM1dxdzRiREpTWkdsQkpUU0RsSGVNWVpYWnRPOWZ1bFdNL2UwRE4zWnpORmJ6Zi9kczJ1WElMS2d4ZGt3TjlXRVRadTdsczVya3d3Ukt3eVZ1VjJGTTJlYWxmR1ZhaDNMVTByNTF0V2ZNNVdGSENKL1dNWVlVamhXeStjRW84ZXlXQk1YRXpXQ1ZMa3liWWpqMXZyVkpkbk9SWGV4c3JnVURMcWJhaDJvaUQ4NTdFU0dMYXZ0a1RMSlJmbU5XRThlYUcyOTBXbTVJc1hpNVRoN1d3bE84YzNMU24zZXVpN1dSNUg4eERZMTJMQ2JDeUV4Vis2eDRmM3RRd1VER3IzaHRsT2ZBRzYzMTh4a3J6bXNqYnF3WXRFVlNXOHZSOUtMZWhaN29KM29rYTVqV0xWbjlwV3Fjcm1EMlZ2R09hSjhlbitLaU9kVWJrUFhKUWZXNXhaYjdXMlJlRHRPSlRhME5iTnp3dFJKUEFaOVJ0cVNheDBxR2xMazkyZ3YxRFg1T1VRKyszWTZ1MFVLM1BQeURSYzhlSWxta1NjRVpwMHdTMnc2d2NLMytLcW5KMzR5ZU5hYnZGNS9SeURSMGo3OEh3ODVIbXpHVk9TMFdJZzlKQWVsZ080OXdOa3RJN2hBMFc5a3dKdWo5Q0VsMkdhQkw1cWtKWEptZ3NzUzZhZ05Wdjdvb0dpQWd4YWwrM3F3VFhmVGlsckNtbFZsbzhZMExNMkQvQU5oZnVpU0pyTlhWc0J4MFd0UGJrVmt2TmFIbGt3Z0ExY09RdEl5eUVVZzBPSEhsemQ5MVFXM3JsM1cwL3MzZHduZllLMGdDT1d6d1B0SUNIVm5OWDdlQmdSblJjR1FTcmppdWMxd253cVdVbDE2dlJaOVZoWFNlTUlTMGtmSkM3MjhrUGsvcjJERWRUUEk5MEdLQUptdHVSZzBwakhhRTVTL2xteTdIUUNZM2dCcWtiYmtwRGl0N0tNUHA5TGtRUVNaL1A1SXFEd1JDZVBSejdkMzYwT2dhRlRqc2VONS9ETzhtYTRsQ3hsNTFXY3BPOFRueWR1RmxtZmhmelZtdDZlY2g4TGVtOG4rZ1FLS0toZ3cyRVgrcC9EZXNpOUdBUlZnSzlrVGxPTFRrUUlhclhNYkpadGFFRDA2YjViZEk0YUorRVRYK0FpUTVKZHR1Y1ExWGFEenZERnExc0xhSmMzdHhLUTN0UUxleVVxeUtXVlEzRi9xMGRGajhZRDhrNnlkZFZGYTUrVnMrRFNHNnVDL25OOWNlbnVFTnFsakovNGNvdC9uN2YrcGlZZVlVcG8rRlpPbEZHeFJ2VjFXeTRWRVBHS0xKcFg3QUIzdUN0TEYyYm1XYUlCaU5GNmhCOTIzRy9UMm11ZHRJRTFmejY2VFV3M0FiclFyYWx3RUZoTzNaTExaSkd6V3p3endMakRzK3o4b1prODRnT3dvSFVBSEFnTHc4WGgyYUZNcjY2anM1U294a3RKWUJlVHJSalg1em5Ca2RtSTlNKy8xaHJjWWpZdGRacmdiclZUUjZjMDZvM211YUNrTlpjanJmUHNYbGlwYWpOTHdhdWZMNUVWU0tFQUhnem83RU14WUpXMC9vaUp4dU50a28wV21VL080NE5kVVd6SXVzTmtkWmZqZGZTVm8yeDhPREhINkx6VEh1ejJwd09UL09jQkVqSjFSVWpSOGI4NzVOSUVCQnVtM0J0dDZ6RW9kYjFoTWRvTWhyR0dxWFU0MkIwbTcza3lMdVJvYTU4UnhuR2lLeG1JSHd0Z05TdXZrQXF1dlIwS05Kd3YzNFllNFk5K3B2VzM1RTB0c0ZGMWd1dWpUTFUzNWZwVThEd2xBZlBuRzdIMDN6VzhYMGRKbm12Snp5WTQ1eDhsaEQ2ZzJKQVRFUjVteC9yRXQzbU56cTNPa2FVd0p2SWZHdStmcTVYZkJPSGphZnZRRDZJb3doaGI5blFheFQ2SkRmU2I4Vmt4cm1WVm5xdTVyWEk1UnE3Ukh5TUpSaU5Kbk9IdDhrbXZiZ2d6WWpnblRuNGR5ZXhjU3pPM3ZReURvSjlsV0lqdUlzUktSOGZiQUFYbXp2c2x2TXViYm92VGFtYzdLMmJSVWYySDB5UmpMdEpxZVR1eUFqZThZUWNKSkExZGNkdHp1VkNlMC9FcmhZTkl3dTBZT3pFdGViK1NsTUtPVVFzRTl1dVp1dnVRWFdiWHBYbENidXZKQVJYUHlBbXpGR2hJK3VPR01CSDdEUE8wb0RVdzFNNzhBTjNoSjZFQitxbzBZUmhJNThiQlhDSVVMSW15Z2hXVnNheXNJU1FCNTZocUIySElwWHpPek85RWxGc2R4dUJPWDBpUGhTeE5QOWVWaHlTU0lwMkV6WGthYlI3ZmZReGtlaVRENEwwRllDR0dpTnpNRGRJalhoaGR6WFB6ZVE2c0hVd0R5Z2RVc3d4K3VtS2lxNDlvNVFyeTRFSlBjaHZYMzJtSjFFWlB2THJKNnBjYVZ1bUMzcFFxWHpqMmV2WDRvcFU3dk51MmErT1YrZXJ4dklqMlVibDZBM25Sc2t4a1d3OWZOQWVqVndNSUU1UkhFU281eHIxeE5LczdjY044TnczMU1mLzl0UkFLTkRMSEQ3Y0w2NW1tZXBhb2hrblBlTFluY2IrWkdBVnMzUW1lczV5Qkd2NHhiSlI3UnVXaktJV3dRNmxmQ3RGdEhBZTBXQ29vMURDK1NCNkpzZG5wRW1QZ0IyZ1NRNkpVaThWRm9JQmhWM2toQ2hmMDJZeGo5SnZlZy9US3FUd2czZUhQTzVzVmtXRFl2R0NTYUJ1cUk3bmFBOW9OQjg3Mk5nb3VJUWJrRXJIYjg4SjJkTmpTNkpwRHJUZlY3cmg4V3J4a3I4Y0IzWmgxMktuTW1LcUhvMXBPZW5odEY0NmF6RTlMYTg3dWNSdjNKUjJ5eVE3bUlObGZkbkdqblVKZXQvRjF1amUrcU82U3c2dllTcDZEUnNpR2dKNUJjeFhWbzNSNUxWK1lWMXV1emh2aVhEK2FiMVpHTkR4MlB4NG5yYW1hY2J0cUhLb2N5djMwZXpCMjhHcmtqWGUwK3hBa0J3YVRNekxkWW1GTzlPL2cyR0llSEFTVk5yVHo0VXhySThUeEtqalZKcXJ0MVhyZEk3RE0rM0RlK0NRMWZXNS9WM1RYSGRmeG9yRXdNUFRieHJzUmFZcG5sS0hNeHhaSHMrSmNmTWI3WEdwUEJXbUxmdUNRL2ZTemV2MlBSYXVDejZBbGwvQjRFQ0V2dEZvOUJyR0VkWnBuSU9JK0xnZ241QmJxT3dTYmppLzFocUJhMzRuOWZKOUFEM1U4aWJ1YW1HR2QzVzFMdVJsTm9oem5Ma3VpUGVEMWozQ0REcDVUVk5HQStGaGRYb2FZRXlNVDBxVHgyUm53cHM4SXRCOWZISjN5YTVGZWdDbGZQMHJSbGw5ZDdDWjMzM2ovaGczRzJNdGF2TTFmQlVOQnJOMVRlRldGMG9jN2l3Q29RdkttZVNwaEJSZUh0eXcweWl3OTBuNnhwZ0NZeWttb05LR2htaDBJVlpZOEtCa08wVzFwcVlJaTlNaVRWRzk0SjJqaCtjdk9TMFJzZVFLNWdVRDhFQXFQMkNhcjlJalZodFYzc3dQVk56VEIzdndZQ2tpV0JVN3I3M040MkJBbjZOMUc5Zmw5TlgvRDVBK0ozazlSNk5VVy9OeWJxVHJWc3p3NXpmT0Q4Tm8xb3RZdlgyU2dZTlgxMERjNVlvUHVKTFVqNjZkVHRjT2wvUEViWVpQaHJpMytPKy9FOStOOWpiZWFRck9RNWdKMTd4MENKMm1Eb1lZb05CbFROV05IdXp4YS9EdWZqcnd2ckcwb2crWVliRkNiMFRCRC8zbzdpdHpON2R6WEdvZHo3ZkozNnhzRE9reU9TQTQ0TjhySFB2LytUTWFERnBKbjQzNE44NU0vbWNxK0NLb2lnaHl3ZGprbFZ6Uzk4SGc2UUdCR1Yra1NhYTFLMGx5UjVUa0RjRE4vWUpUcFIvemZielNrazVldkY3UnVkRllLSnFtSWhFaVJFaXIwN0ZFQk5hejRFS3o3ODBCTjNxSzlyT2IrNFlvMTh6NzU4bmNrZ1M2TytQZ0xIWmsrdlhlcjdJYnU4QnF0cmJzMWYzM214NTJIZXlaSngzb2lHODBYemRiQTVTLytFSjdMeEVmczJkUHo0WWdhc2Vod1JSYUxLTFRrWWdRSlhrUFJiQWgxanFYbVNyZHp2Z21mRSsyVFovZm00anR5K2RqKy9mRzgwaVIyNm4vNjUxaitiT2RFZVYzZVpMNzRRVWlzSWJScjNTSkY1VG9uV3hqZmlJR2VkM3hhY3VYWUkvWEM5WHRoWUFZa0RVWTN0MUVnVE5PUmtnRThRNFVEU2dVUWNPSEVBdWdQSjZGOXZVWlFKNG5MZFFyLys5VitHZ2E0dnNReENETlg3NTk1eU5YcE0vZld4QW5wOXcrQzZqTkluMjVVNW9zcVFHckdIWHBCTzROamJjdTZ5NWZjdkpvZHJId25wV2FGWFdEVkdGcVhmM1pXdU56N0Y5ZXZ0cnlqRzVoYVRvSFA3WHZ4Yld6YTJpRmdObFhwdUtjSHlLNnRITDVKa2l4UysxanV1bnV3bHFEMzcvVzBGM1FUY2RJTFVXMEdOZzNGYzJrcDZOS2k1bEFUbWVtb0FrSVQ1clp4WHozZmRtcCtRTm1HNlJGeHgzRzZ5ZVhpb3Baa1Z6ZmxkWXJUZlRaenhZOWdvMitnWVhtWUloUzNja3Q2RUVQZXpZMjNaSGhqRzB3UHVIdDF6c3o3WXNkR2VQdVpZbGVNTUlzS2EwbWJURnJ1bE1HeTNzbUplUkNzcGY4UHV6UTRISVJxZGFJWExoRTg2N1lnWUJkbnRYa2MzNmJVL1A0dy9rcFpUOFU5RjBNMEIwaG9Gbm9OYTB1Y1d3eEZpNTBzN1QxNXdOMHdxVFpmQjdyTFY4eW1oYnFiY09GL2phZGF2VWZOMnNoWjBHUTFwYjRONDJrZEduMGNWVEQ5MS9XTXljbjVlcUlSVC8xK2RGa2IwdlQxZ09KdVZ2ckNJZjIyVXVLcHA5MzZTRlcwcWxzcUZ1bUpQV09UQ3p3VTc0WHNLQStXQnhucUROVmtBZkFxSTNqV3FzaHluOUhNYTk5U3ZaQm1Hdy9LY0IxZWpReW9QRlk1c3UvT0VQRDcwVHlXb1EvaWZWUjNsOHFUU0F1dlRVWDRGNFNlWTBhTkZ6UUFpVlFGZzNaRDdHLzMwRUtOL3BjRXNBQlNqQlhZOWRpNzRybFhwSmM0ZFY0OGphSUJyQXk0d3pMd0lEVlp1KzNXZ2ZzdTBOcE9jWXd3M3ZYSFpRY3JSQzNOdFFzTFBHbUVNWDFBOHNIMzBZWnVnQll1anhDTHc3ZSs1TkRUZGRROGViR0IrWWc1YVgwS3Bxd0l1cFNMcjN5RDVKbkZ4VHZmYW5wNk9HMCsxK2RtRjM2SWdHc3c5QkJjUDUzbmZIUDdObjNRWlhwc3hNK0tweERObjErQXFXQjRrZGpiaWFZdnZQcVA3V1E0Sy9EakRVWjcxMy9EYkY3QkdLU0tKMDhYK0wxVFJSeXgrVlc3Mm9PdkExM0FRdXJYdTA0OXQzTjlGS1lFNFczYzZFOTZhMDF5WWR2aTc3K0RCUlh3OW1SQy83TFBHSmxrQSs3UjcyMjFjR1FmY1dveTZVS2NyZnhBdkFmQnlENmNOYWN0ZXFIQ2FlK3BDbG1MR3RHQmdtQ1NQN2pCSFIxdGQwWDk0dTM2MWJEK1lsMmdZczk5dGtvQTF1Yzg2NFBmQlRpY2FwcWV2aHFYQmZlMmJQbGkrUDFIak1aRmF1NEJHdVZNR2wyNklhS0RsSjR6NjlYUjlHeHhYSHM1MFdiTGJpOEExOFJUZUVyaDUxV1paVDFoVFRGZ3B4OFdqN1NQaXFUNnNrMk9LSDg1cjRDNjRVc0RLenFuQkdYZlVVb2FGODk2blVKbmtTdittSHZSSWlLTUJoVVFPbnp6R3ZIMHE5K2FzbVk5YXBxWnF3V2M4YUdET01FTWxnZVFxQlNoMFVhUUQyMkk3c2VmVGFya0ZnTE5uT3BBMGVIK3F3ZDZnL29kWCtWeVd3MEIxYTFtL3lMUGM1VlFaOXoxWkpPOExYYjRZb3JiZDEvV0xtZTdVRUI3QnIxMkZjRmcvWlZvMjZYSXNBOUp0aUJLZGF6bG94RlAwUVF3T0pwUVVvRWpndzkzVnNRM3B0MHJDS05vaDZuSnlYVkdjT3d3Zk1hZGNYUStVUnZILzUzNSswMGVZNEVnNS9aTCt3ZlV5MXBHSlVrblpPam5iakVtSEVZaHV3WTBwK3htNHhaTTFLMDJ3MURXY2M4YnNpbk10bWlaV055dUNCWi90bmhIWWp6L2daT3FMdXNnd0J6UVZkdFBGUVhlWUR2SGxSeGN3dHNSMkkxalI5U0tpZHZPYjJwazdEMC9raUt1T1h4M3BtRHc1RkFIUmJtWFZsWithbFN4ZSs0SFN1ZGl4ZmEvUEpZWTZFZW1vMGt0SnI2OGg1MlljR0t2c0g5RDd4OUZWN0w5Uzd3ZEt3S0J1WG1CVzdmYk10WjBCSVJ6RmxQY2IxbVk4bnRwc1gyWWdBdXMwY00wcXhSTFBXdDExS3h2ZmNqcXJnQzlhckUzbThKN2ZlSlJjUVZKQWVzODRyNnUvbWdiVW5xZHovZzBDMnVKb1Y3a2s5L0tXQ1ZMb3dXNU9SUzdsdloyai82cUNPa2V3K2Y1Mkkycnlxang0K3EyNS8vMXlUOXREby9teStTbFpsejlscjhPZGRqdUNIR2xkckRCbkVHRXduSlhCWG1kSjdYcStKS3RCUG1QUmVwZXdtVzk0Uk9HVkVZOUs0OCtyOGlFaEF6blR4Z1ZHZEU5T0swRVhuU0NGZHh2RjhhNEtUQzFOeThacTI3N0JOTGlGY0NITUQ1SGVoWXRjaEQraFo3OEZXQm9CQU4ra2hMeW15eUFJR1djbGE3TFc4MWxnaWNDUWR0ZGlhOE1QQUhka0h5SHFHM3BJdWh1ZXZNL2JpeGdQeXNaZTRSd3I0czRMY3ZIM1c1QkU4Z1YvNncxK1J3ZWpNekNSK0p2OC9HOUVXOFF6K1F3ZUl4WktDakErblg0YzZ0bjlZYWZVTmZsOFUrYzFXTWR3dlhBOGRhNlozUlJ1RHNYYWdBVnZUMFp4OVE2cGsvcXNDS1NBejgxelh0ZnRGZkVETlR3L25NYmg2UVdSWlRZNEtuNS9PRlhmZlNBai83NmJCQWRpWW9SRnA3YzJNcndYQlRadDVwRDFzbTJHSVZjRWZ3dHAyMGFkZjJpWlVYSTN3RFdsQ0FWWkk1VkxmNjZtTXdHWUF4ekN2bGlHbys3dmlMMTlZajRJS3owN1pvc01QVy9QcWYwL3JJenArbVAvTzdKeHhIMEx6VFo4ekd0R3NPM0VJVDV4NlZUclhXK0w5bGdlOVVNTFA1WmJmQ3ZPWWxHbk9pZUJwRW5SU0J4TisvZUJOZjBqYnR3RUU2QmFvelZ4VjRxV09MUTcrNmlrZmRHK0JLd3V4Q3lJK3IyYitnMk5NdGtYN1I3Y2ZWREtXaS9nQ0VrRDFjMUt5OHNMWGh2Z2VPUHZoNHFKWjZFOEdyN05UYkVGUGMydkRzVzJXOG1sanRGcDZjQ1pXb3NyeVJISzNROUR2Ujg4bTI5TmtWblh1cmlRSU9pU3NhRHArdjIxTTRmbFVjTHpZZXZCQUM5citNVnFOdm9EUkNnVkZqY3lnTlhLN0N4WUZqYi9sbzA3VnZaUXRsMG16bi9PdHYrZEoxMWR0cndIazFVQTZ0ZEN3ZXMzazBuVTJMU3hzeDdOTVNQWmV0c21hTXVrSkhvUFhkQ1I5SDZvem94R21yMldZeUpaTE9aRkFkZ3cyazlCQ3ozWDY5M09MeUdUc3kzcStlZUpKc2U5MnlhSWc2NzEvZjhlZ240UEFNeFFLMlh3MEx2ZmRKOUI3YytRZFNUUFN2bENyWjRMaC8yaHFtN3RiYVhEYnpBbGh1ZFNFbzdBZXVXbXFwenkxWEtWMXkxVkJycEtSTHFWUzVsWnFlTjlxOUJzVG1OVW9RTVdSTklJR0dJMFhreXNFU2NnVlpvN0hoWXJBMGFBbFNvd284RlZmdXkrWEZtb3JoT0VFb244dTV4c0Y1WUl3NWNpb25vTUlGaDIxWFIwc0hpdXVtRHRKZncrbm41aFNWRldMK1Y5UlUzRll5SUZKdlNHdzJwTlV5aWdYOEt1Y0RtamFPTzNCdm4wNlhzUWhiZk9hVWRQYm51U0RXbWpJa2s1MlRZVjFhTkkzaGxraFdyS0VaUGl3REdyeVBjUGI3L0l4bHo3YXBIa1RoL1lXdmZtc3NGNlM0a2hidkQzcUprUVVXWEJYbmZpQ1VVa2lKalFKbDhMWHRFOHFkSTZqRmJkRjJKN211Mjd5WGw0M3o5N0M5ZzFTTjJXd0VvK0REa09iUGVscEVIWGtkMG0zRE5Ja3VqVk5LTkY5VEllemYxcXhwcGRDSW1oZjhOd25hcnY0UC9WT01NLzN3UWN3NjRESUp1M0JuanhEd0lEVWpOM25hTW1vamV6bTZQRERjRngrT2w4TzVRdXcxOEdRbTRDOGE1aC9SU3o2UGNGVzZnQlRGMlRHVnhWUXFPbkdaSWFLR1l5YWRPQlV3V2h3cEZNNFkxTXBZQWdIWHEvQnRlTythS2JjR0lVV2dNS0t5TlNSNk5oOXV1Z1lzN0NDcUhDejB3cWdwM1lmWWJIbkVsRVpoZ1dmSlA1NDNmZCtPUzQxSU1xc3pHak02SkdtVXZ2Zzl0SHlFZ3ZDSVpUSzNXRUhBUkNMbWNpZGlSOFRCM2lRQnF6MUJxUnFXSi9EQVJFOFMxSi9VNEl4TDBFV0JnYjZJK1FMeDV4ZVB4cmRWNVNmclorRjJHRWpzVVpYVk5IZ2FETWROV2tzUU5aL0hBS2NOR21VMG52RUVCSSt6T21FMWl4eFhQbTRtMWJCSkhUK2tWSGt3bzhwWEVBa2FzWndUV0MyQUZmUlZZdzAvVVk0dExxMVlxTFNqWnl1YVI2ajV3SmI0QW0reVQzR1dWWHVjM1lnTlU4M2diYmxjOEpLc2ZValEwTDVqM3BVRmNYSUdjb0FWMEM3dytiNXFSaUpXeEJFcmtuOFp1WGV5V0FvV2ZlbWxBeGRwdkxkdy9yaHFYYnZhc0VYWThzQzFoZnlLY3BCOGI3bGJ5UDFYQWU0V3NjTHp4VU5iZDNYMjFOWTNQRUZ6d1h1THR0NVJmNWlLUFNXUUlqc0l2ci9Wcllidy9PQzdDTDh2TS9CVEhIWjU1WWFKTXBET3Q3UnRhdHBaT2R3Mm4xNURoK3RMalM4QWZ1WGpQUnpldWI5UUJ6VnZkcllKaFFFVUgybWt2MHk0OThCR3duZnZpanRvRmJVM1NkcTJYL2QwUzN0THl6U0w5MU56ODJPZ0JQZ3NhdSt5Z1QrdE9BZzUxSENmWGRHZnluR3FFUlR2YThBMnFQTDdQYTJOM0xzL25aZEFLOTl5NkNrMjU2NURMVzNVeExKUlkrMnQ5L3h1dnJQWjB0cFNXYjZ0MHJmVjByU1AwOUhXdXE2MWRieTFUUXVpRXJ4TXBKZmNwcmRERlRVUFZiTkZOenRZYWoxbCtkVzhuNXBiWHVRMHExdWFENE1ub0ZDaTM5MG51aGpmOXlEWXZ4eXlJM1NhRjEwWHgwcmxKaXc2M2Eza1U2cDFLMmR3a3Z5eFd4eXIxYzhUT2tGT1hXS0txajNiaXZJRVgySEdiYnBBWXVYRGpxcEQxc0UrbjFadG5jUkpybW1nY25pVkRPdXd2UFdTQ3V5d25uOWFZN1V2MDFETjZ4RFR0MXFsUTllN2hVdGJoTUtXcGNKRUJTRmI5ZVVZWEFKSDVucTBrdnNoRG0xRnJXVzM4bzdCMjlCbHo4NTlXeVBQQTErYmp3YXArUHhraHRkMUlLSXc5ZnpseWs3VjJrNU1ubXVWWHNtdHRVTnpySDN4dHRZSDZKcWpPS0syUStlbXYxNzVQcVEzOFQrOW02Uzd5ZlU4cThEK0J4aFRSZUhDdmpUbldrQU05MUpZMlFrYjVBR1BRcVdKcUE3Nm5sdyt3L2U5T1lCaXBpNGQya3RJZU9ST3YxQkZjVythZ0NoQTNlc2xFWFVHYmNJR0FSVGM0bmhUMTFCWjY2WFh6VEZMRk55WklUNU1MVytyeUJtb2RXMlZyRVhEUk1acVJELzJxeU1MNzJYZ1FwR0VMZk5vejcwZ3ZvN0JrQnp4V3A2ZWhBVmFjbnBldFhrTjZ4SkdkZ2lKeWhwSmg3YUNNSWdETWNwUlQ4cWlhTHZMN0dhTlUrWm40dWlscmdhM1lvTStpS3NISHFqOUd1NG5ncnBGSG9XcnZsRlFQc1BjcHhsanFPTHN2ZG1tamJyZW1zSHJhOSt1U3NHRCtvVnVwYnNPYjdGeFpZVTZzcXhSYmR4MG5XT3hra2tpdXM0dm53L0swV0NKUjV1STc1WFhUMzE0QnMrOURUbkJ4YnlSbU5HNXd3NUJnV1BVSmhuWnNsMldXM041KzNVcmRpVTBMaXF4SUM5ZkpodWZObCtXVEpxdTBMY1Nra3hYNHpGQWU1UldSTFZjUGo1VE0xTkZSdFA1YmJma2MvWWJOTlVJaUxucFRCTFRzcnNwZ0NNWngybkZha012SnVjb2lqd2FVTWFLZUw3UVF1ZWo2S08yM0pGbFFJdFV1all6Ty9TWXVFMDdmYnZJUk5HOE1uY3BvNWQzbDVsSzBqSWptZHU0OVk5Ylg2bzI2WWxaYzdQZkhmOTB2TWRtSGx3WlFUeUhETlgxR2w1azFqN2NQNC81TU5FcDQwUUp6VE0zR0xpdjBKcmZCUjR1QWZmMHFCQk1XMEtVNFZtcTJPTXFjTE1kVERldmFQaUNtYlk0d1l5VkwxZ1pOblZSc2o0SExwYUF1ZWFucTRMY0NwbFhwUktpa3ltVTZZYWM0ZXUrRUlvKzEvTjUrczlGd2k5MFFQMk5yZ0NLR3BURExES1dMYVJXNmtiUGFtTjNFWm1LUklRUXlkVWViRVMwK1hHcWRxaGJnTVNtNHVIOWhiN3dBYXFPSVYyQzRLUFV2bUlFTDFBUGZBMzRLNWxtaXhWMzZHODBLTHNiVW8xQ251ckN5QlJGN2tjRlMrOUVzWVgvelFmZjhCL2JmZFBreXpzcE1JNHFqcG5zWHJyQW83LzFxZGZuUzBUTTNBYVMyVVR2UjhlTFZ1TGVqdXdMbEhkYnduVVdYWkZWbW94aG5hTExqakNiTmZpWjJRSkpMZ2lLMjhxT3VreWx5eFp5ZXVKUDNDL3BJYlE2VEYydWhYZ2FjS1pXRmJ2Z3ozR3Z3aDVnYUdkdElDSFpkQVB3UGFDekl1amFlMWZNZE9GOTJkNFF3V0h2T1gyTEtESmxqMmk2Tmpmb2hxc2doRnV1RzloS3JhWE4wb2hWMEVPa0dhTExMek9NdnVoWEU4dlU1ZGJvY3Nab0RNbE1JVE55K1RXaTBKS0lMNURVKzAvcGQwZjBRNG02Q1hXcDhNSFFJK1Y5bmhuY3dTREtNY29RL2NoelY3OWJLYysvdnZnNS9TRndPNzkwN1BENXUvZFV5dmV2OUQyalgwWlpkQWVTUmkvdmY2cTgzV096SnhpWVdoaktIOXA2RG1LVWR0dzM1ZjRTeHF0Ykg3b2pTY1dIRnJuVytEN2xZbTFOaytIbWF5cndkUFJDdmZZbThNc2xqeG9mRWMyTXVEWDMydy9NTStpbHV2enJEWndUY2VsdHVwOXVodDBHbDQ4ZCtRbkhXMDVVc2p6WGEvbm4yYk5zODNUOUVIWm91OG50NDhzRk9QczE3ODkzQ2JYYjJzTkxXVEdOanBVNEFNT1RyTGhXeTQ1UFhxdVZScXhPVlFUV1NHTldoeXI4eUI1NDhvSldZQVBaWGNEaHpjS085Mys4QitPNVI4eEtxTjVjbW95a0ZDbzFyaFlGWUsyb2hHZXpSdFFWakc2cDhqbkFPbFVwaitQcWJjUy9ubElDTldRNEM3QkVjUDFPYjkvWW5jNnRhNEkzTG5KSVZrYjdObUhkV0tqMndyOVp6S1RpNzVzWEsxTkRlNXhkWTRvcHo4ckUvUWVuSC9jc1dYWXFGZG1iY1FqWDJBZml0cEJFR3BHN2ZQSXV2ZkNyS3hWYXY5WVFZbVdramc0M3FBTFRmSmR0ektvVXhueEUvM2ZST20vUmpLaTd1ekFuT2FnZ1NGblhucGJySUhDMkxOZVdvdkZsMnBacXJnbi81S0xrc2pFaUlNTmkvSWhFby9SRlpaZy9heFlES1MvWUpVenJVN3RnaDl1RG03anRwQ0ZJV2I4OTJ4MkkyeXF5TVNyZWJyOUlxMlBXc0oyTVhyd3JOU0loM1FBNUEyL1pVSUswMWZid3ZtWUVGOHFHcXBCaUxHWHFYUzhldXdaaUxJN1Y5cWFQTGhqMjBVSlA5MnFWRjZWNHZVUWRZczM4bDlCVmdTbmNZT0c3WlZrdGl0cmZmdnRCMmI3UUorS0dtbk5ldkpValdldmhpQkN2VWlHTlBkeUdlQVhMdDBKNGZwQ2MyR2tGOTlYVFVrRzRWL3RxcEtYSDllbXBCeFZudjJ1RFhYcGZFOG1zbW1OV2xPTVkyRit3eVZETUdTZENZZVBtWW02VG9kT3lDem5UNW5ESU5GSFFJaVg0WW5VNm9WM3E5VWd3bmN5bE9HYVNabytYU2FRbVZqdXpCazNHYUtRWFJ4Wnh1ZzFKdnMvMHcyRDRmMXZ4eVVRZUdCWjV2VElEKzRkYzhzZDRUKzNRdmxmQVhCK2FJNytVemM3ekZBK0xPWnhmNUtDOFFtMXZmOHhJQWRCb1V6bDFOS1ArUkhkRjRmaXA1bGNhbW5ZM2QxUzF2MWIvdFdQSVlpOFJoTDJrNVE1bmFVR2c4VG9hMTJpVG1GbWJVQTBVVFdoMENUT21TK3BpZ0hjbHBEaHg4R2FvdlNXakxYUXIwVklFb2gvejFLVVR0bjNYZU9nNzlEQys1Q1NVNlJyZFBlbVRYLzFzaWR2NkQ1Z1ZhVlpzSlRQblV6c2xWNnZGVXZYVkV1blZISWxFYzdWWFpwTkxiYkt2TWJCc2I2L2tzMytMb2VYVFY5SVFzZ01OOWwwYjJnSlpuUE5wT003dXZaNHVXYllkNTlSVE9UdzNKR1hwbnZxcWhiWCtHMERLVkN0Z0VsMVVMUlBmM2VyZ2tOOVBGNjRFRUhXWlJ0M0UyNjIxZlBTSGFqK3hTTDJIaGx6d2RUMnpxdmgvd1pkc0NFak5vNG91SUxkN0ljZTFiUkh3ZnBWV0JaaGpmWmlaVEF0Rk5WTUxnNmdXTWhocW1XaEswUjNFcG9LdHh5dVd6UzFxNW1ycE93cThlVnkzQy9GUmVSTUlIS2VaS0VJK2VZaXVvbWwyQ1BvTUZqWDZxOEJsdjBjRTNWdW9RazhLNXllTXBkTkhJSWtzM3hoTENTWGxmRThxdjN4K2p3OVFZcGhTNHpMSE5mM3p0ckVtTUowNEcwMTJVc1BYNSt0cXVrWGJWMmhLYlVrUlRJNmMrRHhEZmxNaHhvc0NJYy96Z0poSEZVdGRqeWx2V0NrcHVMNDJkV0RmcE9sdWFxbFoxaE5CdE5zTGZCR1JxVUptSVN2OVo0RkVla3Znald0c2JHcjhRZTUySTdpOUpmZ1JYZ09RdlY3YkpOYXQrT3R0WS9Rd3lrdU53SDRqQzFiNVpVdlpwNyt1cTJGa3VyczRtZ09oZHJXL2Q5amdUUTY3cGdLRHI4aG0vazdvOW83czUwNnkyQ2VlWTNQdU84Rm1uYnp2YnRZUExhMy9XL3JaRkpaN0dnSU0zNjdYd1BZamdNcHIvRU1nNFhvRG01R3VsMWdIczcvQ0lTYWIzenVnazA0TWFBMElWRVV2cm0zdXBXRFI4RGNLaGx0UU1GeU5naUVUSS9nbmU2MmtUZDZjMmRiazVXSERyeDdaSklzcWNLWXZTdUpSbElhaW9CdEZ3VHNvQ3Y2VW9nVEFkY2dKTGNnSnp5SW5QSUtjOEtHVW9pOTB3ZlNhUnV3QW9vK29xYnFSMnVjUnBnNC9jajNCVEpqOUtlWng0R2ZqbW1BWDVUbVdZQ2xUTU55bXp3UWx4V21EUjlWKy9pT2NKUFpmbUI2SGwrQUdqWTBvNHRSdDF2Y0h1NGJGYW4yeXorQWJSak5iOG8xU1RqZEdHcU5PeFg0U0lUVnB5Q1BYSTh5aGlUM0JBaVllM3pJVitLaGs1aVJDUG1qVCszU2xlcCt1QnZuZzVER0xRZkVYQThFQTluYnJuWG9Bc1h3eGU3K3VJdEFJZm8zNjhVZzNRbUJxK3dqb2JmUXgrZ1I5aWo1RG42TXZ3SmZnUGVrclV2d2FxU0srVmQ3RDcrRDN6QThlMnZoMkl6RDl0ZW54VkQ2SkM0NTEyeHQ4bGo1SGZUOVBmeHArb3M0SHRBVmR3WXpLbktxK1FzenhleG8zckd3TGNyZDJWZFFRTjFtWHgxUGN3QzF1NHNQYnpCTkVMdjJMYUxEZFV0UDJvYlF4SzhhekhvTzRXM2lEM1Q0OWZXZVUyZWZSM2Y3L3lMRllabURRWHZjOUs5bGFnVVVBTWVMZWZ4YXNBakNIZlZnQVpCNklkWXM1MFh1MTNicUxGOWIyNEk5WkQyc0RiaTE0L3o4Z3kxaXhsdGpndk9VQjVMb0FnQlhZemFsSmdzYU1yUjF0WFlkUlJsR0g5UlFkc0UrNnhtUmc4eUllbzhveFJ1TVFCU29QdU1PTVlNTGRzNHhHQ0orSDJTTWk1YWJ1cy93Q1ZZNXROQTBYbTB5OXhHTTBKdEFPcTFwZ0swQmRLQWY3REtHdjBNZm95OUYvWkdsYWxOdmx3bmxDY2hndFJMOWxXNkFyNEtOK29TZGdJeFhwSUp5RjI3Z08yTy9OQWxoMVZYZU5PeVBkOS8zU0lLQS9WQ2szOVk0RVBZaXVIZU1CSEpwV2ttM1FlSkVMUEVZTDBXOWdnWkthOXpHSHp2OGJJN0RIZS80WWJoZmUyRTlpb085Sk0zMjNidWJzU2tRdmlNdytuM1FOSlVlOHRPdHJ6eTV2MkVhNjdBMnhWWlRzNHU4eTFqam51NTNOQzNrRWJpRS9aanNpdWxPajIwUTY4VTZZRWltdHhrdXVDM3ZMOFlaTG8yc0ZFYWRReHV2RzlsRTBldDYrbGsrN01RSG9OMFBZbHNhWGIrdmFOM3RyMXk0MmRWbWtmU2JWNXhpM0JiVjF1MTFNOXdEMGxPekxYbllDUjkwdDR3dCtyaXVvS0ExOXl1d0QycExBSndRN1ozeStjSW5pOGtnNjE4blVTQVQyTzZWSy8zV0JJYTFoVDJldzdFb0ZTcmFNSWorVFdFMCs5NHJhSEFKd0VUOStaN3BsWEVqcTN4REgzUURnNUlHTys1TDhMMitKLytpd3p4UE14Z0VpQmdBSS9peVpvSEFtTVAwL2VFNWs5eTZpTmUxazZ3N1d6NHVjcnFUcHh5WjNCZVVKdjJSeXAzWEZUUFlkeUw3Skl3UjRSa2p6TjdhelhpMkNJTUUwcFRYb2RaYzdJU2pkK3JMNEZIeEdFeTNBUkhVQXgxVi9MWnZpamw4d1dWMm0xZlNDZitzd2MwVzA2T3FhNW02U0t6eXRSbmhRVmFnTTZNY2hSZ2tKTVhZRThZaEI5dW1Lb29UcEdScU5rSzRmeDRPVyt1KzRDcmNHWXJnVFo1dm1HOVRVanRmbmlxWVpVV1Q2VWcwZUUzaGtpVUc1bkJwZ2pGMTREWGJvK0RRUmJmcFYxM3pNcGxJSkN1YytWTEp4R2dhenhGd1dJM1pMbmo2NVg1MDB4QjAzb1owTUw0YVNQNkd2UVhLYnVQTXJVcXZtYVFoM1VHWnJSVVpOaVlvOXRYVFJVN3hHbGRTeXBZNDViQXJMVUxNenRBYjY1aW1kSU9hUkRZcElVRjVCc0lvN0tRNi9VelN3dEkyU2VkUzFrN1FvSVhQU2MwR1RGNHV6V2h4THh2d054RjdoOXIxMkxMWVhJZDlGRDVzck8vUzMyYktlV3paUEpxWC9BTTNRaDFwdWZTdDc2amlRdllFbDFtTTBlTTdUTWt3QUEzdDlTRG03NlphWEtMWjU2NXZwTzBpeHZmUXlDSTJqNUJPaFYvazJQaVYzc1J0NEtxRmwvbUR1RG5VejZtN1Z2NzhSUGIzSTFqUE1YVkNxVllpZitFVEZIblczcmNoTWI1MWUxdXVWcHpMMGxnR1RJQVVNYVJVRmNLQURzSUVFMFFJWm1LZnlEVWxGWlljbzJhNi80M1FEQ2FYc2tjTUdPSzJzNUtGenFQeWk3c2pmSjlTOE5Wb2pqOG9YMU1qdXlmRUVRSUNQY1dpbUFXZ2pMQndrSnEwT0pqaWRIWnoyaVkzT1p6c0VrZG5yRU5seW5TTllZbDV5aERLWFlnOGoxYnFUQ0Foc25DN3k1S3RRS0p0WGxtSXloVXU4TkxMQkJaaXl1UU9VeURiSmRFVW15RFdackw5Q2VhYVpZaElIN1VTMHVKWG1lYlRJaWpaQmNyRjgwMjg2SnlldjdFeTF4RVFPcXNtVHc3bkt0ZEFVWmV6eVRlRGxreTNYQkdVWjQzTEtwaDdRSEs3eHFlQVFldnRvY1dSbEV0SmxBMDFSWk1wUktUVkZYZXJweFZ4RnhiNjhuRjdqc3E3R2JkVTIwQnVlSVZKT3dzZkZxNFRQQklVU09MaTRKTXJRVno5OWRaTWhhUEM0V1RzWXlnRW5acXM0bXJ3WUtkeGV1UGxZS1RMSnFEUy9WNG80aENvK0R2TlFiL1FJK3ZIb3JlZmdNVFBNbTRZNXUwNzVQNkpJWGhIL2UxL3lud0VBKSBmb3JtYXQoXFxcIndvZmYyXFxcIik7dW5pY29kZS1yYW5nZTp1KzAwPz8sdSswMTMxLHUrMDE1Mi0wMTUzLHUrMDJiYi0wMmJjLHUrMDJjNix1KzAyZGEsdSswMmRjLHUrMjAwMC0yMDZmLHUrMjA3NCx1KzIwYWMsdSsyMTIyLHUrMjE5MSx1KzIxOTMsdSsyMjEyLHUrMjIxNSx1K2ZlZmYsdStmZmZkfWJvZHksaHRtbHtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS40fWh0bWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLXBhcmFncmFwaCxwe2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjY7dGV4dC1hbGlnbjpqdXN0aWZ5fS5tb25zdGVyLWgxLGgxe2ZvbnQtc2l6ZTozcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjE1O21hcmdpbjo0cmVtIDAgMS41cmVtfS5tb25zdGVyLWgyLGgye2ZvbnQtc2l6ZToyLjVyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMjttYXJnaW46NHJlbSAwIDEuNXJlbX0ubW9uc3Rlci1oMyxoM3tmb250LXNpemU6MnJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4yNTttYXJnaW46NHJlbSAwIDEuMjVyZW19Lm1vbnN0ZXItaDQsaDR7Zm9udC1zaXplOjEuNXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4zO21hcmdpbjo0cmVtIDAgMS4yNXJlbX0ubW9uc3Rlci1oNSxoNXtmb250LXNpemU6MS40cmVtO2ZvbnQtd2VpZ2h0OmJvbGRlcjtsaW5lLWhlaWdodDoxLjM7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfS5tb25zdGVyLWg2LGg2e2ZvbnQtc2l6ZToxLjNyZW07Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjEuMzttYXJnaW46NHJlbSAwIDEuMjVyZW19cCtoMXttYXJnaW4tdG9wOjMuNzVyZW19cCtoMnttYXJnaW4tdG9wOjNyZW19cCtoM3ttYXJnaW4tdG9wOjIuMjVyZW19cCtoNHttYXJnaW4tdG9wOjEuNXJlbX1wK2g1e21hcmdpbi10b3A6Ljc1cmVtfWRpditoMSxkaXYraDIsZGl2K2gzLGRpditoNCxkaXYraDUsZGl2K2g2LHAraDZ7bWFyZ2luLXRvcDowfS5kZWNve2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMSkgMCx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTIpIDUwJSx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTMpIDEwMCUpOy13ZWJraXQtYmFja2dyb3VuZC1jbGlwOnRleHQ7YmFja2dyb3VuZC1jbGlwOnRleHQ7YmFja2dyb3VuZC1zaXplOmNvdmVyO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpO3RleHQtZmlsbC1jb2xvcjp0cmFuc3BhcmVudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjp0cmFuc3BhcmVudH06Oi1tb3otc2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9OjpzZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX1rYmR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czouMjVyZW07Ym9yZGVyLXJhZGl1czoxMHJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTtwYWRkaW5nOi4yNWVtIC42ZW07dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfWRldGFpbHN7bWFyZ2luLWJvdHRvbToxcmVtfXN1bW1hcnl7Y3Vyc29yOnBvaW50ZXI7Zm9udC1mZWF0dXJlLXNldHRpbmdzOlxcXCJ0bnVtXFxcIjtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjFlbTtwYWRkaW5nOi42cmVtIDFyZW19ZGV0YWlsc1tvcGVuXXtwYWRkaW5nOi42cmVtIDFyZW0gLjc1cmVtfWRldGFpbHNbb3Blbl0gc3VtbWFyeXttYXJnaW4tYm90dG9tOi41cmVtO3BhZGRpbmc6MH0ubW9uc3Rlci1uby11c2VyLXNlbGVjdHstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9QGtleWZyYW1lcyBkZXRhaWxzLXNob3d7MCV7b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0uNWVtKX19ZGV0YWlsc1tvcGVuXT46bm90KHN1bW1hcnkpe2FuaW1hdGlvbjpkZXRhaWxzLXNob3cgLjE1cyBlYXNlLWluLW91dH1kZXRhaWxzW29wZW5dPjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0ubW9ub3NwYWNle2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHktbW9ub3NwYWNlKX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gW2RhdGEtbW9uc3Rlci1yb2xlPWJ1dHRvbl17d2lkdGg6MTAwJX1idXR0b257d2lkdGg6LW1vei1tYXgtY29udGVudDt3aWR0aDptYXgtY29udGVudH0gXG59YCxcblx0XHQwLFxuXHQpO1xufSBjYXRjaCAoZSkge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpLFxuXHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0ZSArIFwiXCIsXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX1JPTEUgfSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IGlzQXJyYXksIGlzU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBQb3BwZXIgfSBmcm9tIFwiLi9wb3BwZXIubWpzXCI7XG5pbXBvcnQgeyBNZXNzYWdlU3RhdGVCdXR0b25TdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9tZXNzYWdlLXN0YXRlLWJ1dHRvbi5tanNcIjtcbmltcG9ydCB7IFN0YXRlQnV0dG9uU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvc3RhdGUtYnV0dG9uLm1qc1wiO1xuaW1wb3J0IFwiLi9zdGF0ZS1idXR0b24ubWpzXCI7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuXG5leHBvcnQgeyBNZXNzYWdlU3RhdGVCdXR0b24gfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgYnV0dG9uRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImJ1dHRvbkVsZW1lbnRcIik7XG5cbi8qKlxuICogQSBzZWxlY3QgY29udHJvbCB0aGF0IGNhbiBiZSB1c2VkIHRvIHNlbGVjdCBvbmUgb3IgbW9yZSBvcHRpb25zIGZyb20gYSBsaXN0LlxuICpcbiAqIEBmcmFnbWVudHMgL2ZyYWdtZW50cy9jb21wb25lbnRzL2Zvcm0vbWVzc2FnZS1zdGF0ZS1idXR0b24vXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvZm9ybS9tZXNzYWdlLXN0YXRlLWJ1dHRvbi1zaW1wbGVcbiAqXG4gKiBAc2luY2UgMi4xMS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBiZWF1dGlmdWwgc2VsZWN0IGNvbnRyb2wgdGhhdCBjYW4gbWFrZSB5b3VyIGxpZmUgZWFzaWVyIGFuZCBhbHNvIGxvb2tzIGdvb2QuXG4gKiBAZmlyZXMgbW9uc3Rlci1vcHRpb25zLXNldFxuICogQGZpcmVzIG1vbnN0ZXItc2VsZWN0ZWRcbiAqIEBmaXJlcyBtb25zdGVyLWNoYW5nZVxuICogQGZpcmVzIG1vbnN0ZXItY2hhbmdlZFxuICovXG5jbGFzcyBNZXNzYWdlU3RhdGVCdXR0b24gZXh0ZW5kcyBQb3BwZXIge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcblx0XHRcdFwiQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2Zvcm0vbWVzc2FnZS1zdGF0ZS1idXR0b25AQGluc3RhbmNlXCIsXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc3RhdGVcblx0ICogQHBhcmFtIHtudW1iZXJ9IHRpbWVvdXRcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uTWVzc2FnZVN0YXRlQnV0dG9ufVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZVxuXHQgKi9cblx0c2V0U3RhdGUoc3RhdGUsIHRpbWVvdXQpIHtcblx0XHRyZXR1cm4gdGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5zZXRTdGF0ZShzdGF0ZSwgdGltZW91dCk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uTWVzc2FnZVN0YXRlQnV0dG9ufVxuXHQgKi9cblx0cmVtb3ZlU3RhdGUoKSB7XG5cdFx0cmV0dXJuIHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0ucmVtb3ZlU3RhdGUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5UeXBlcy5TdGF0ZXx1bmRlZmluZWR9XG5cdCAqL1xuXHRnZXRTdGF0ZSgpIHtcblx0XHRyZXR1cm4gdGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5nZXRTdGF0ZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIEhUTUwgdGFnLCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gbGFiZWxzIExhYmVsIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYWJlbHMuYnV0dG9uIEJ1dHRvbiBsYWJlbFxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gbW9kZSBNb2RlIGRlZmluaXRpb25zIChtYW51YWwsIHN1Ym1pdClcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdG1lc3NhZ2U6IHtcblx0XHRcdFx0dGl0bGU6IHVuZGVmaW5lZCxcblx0XHRcdFx0Y29udGVudDogdW5kZWZpbmVkLFxuXHRcdFx0XHRpY29uOiB1bmRlZmluZWQsXG5cdFx0XHR9LFxuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHR9LFxuXHRcdFx0bW9kZTogXCJtYW51YWxcIixcblx0XHRcdGxhYmVsczoge1xuXHRcdFx0XHRidXR0b246IFwiPHNsb3Q+PC9zbG90PlwiLFxuXHRcdFx0fSxcblx0XHRcdGNsYXNzZXM6IHtcblx0XHRcdFx0YnV0dG9uOiBcIm1vbnN0ZXItYnV0dG9uLXByaW1hcnlcIixcblx0XHRcdH0sXG5cdFx0XHRhY3Rpb25zOiB7XG5cdFx0XHRcdGNsaWNrOiAoZSkgPT4ge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBjbGljayBhY3Rpb24gaXMgbm90IGRlZmluZWRcIik7XG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdFx0ZmVhdHVyZXM6IHtcblx0XHRcdFx0ZGlzYWJsZUJ1dHRvbjogZmFsc2UsXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXHRcdGluaXRDb250cm9sUmVmZXJlbmNlcy5jYWxsKHRoaXMpO1xuXG5cdFx0bGV0IG1vZGVzID0gbnVsbDtcblx0XHRjb25zdCBtb2RlT3B0aW9uID0gdGhpcy5nZXRPcHRpb24oXCJtb2RlXCIpO1xuXHRcdGlmICh0eXBlb2YgbW9kZU9wdGlvbiA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0bW9kZXMgPSBtb2RlT3B0aW9uLnNwbGl0KFwiIFwiKTtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHRtb2RlcyA9PT0gbnVsbCB8fFxuXHRcdFx0bW9kZXMgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0aXNBcnJheShtb2RlcykgPT09IGZhbHNlIHx8XG5cdFx0XHRtb2Rlcy5sZW5ndGggPT09IDBcblx0XHQpIHtcblx0XHRcdG1vZGVzID0gW1wibWFudWFsXCJdO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgWywgbW9kZV0gb2YgT2JqZWN0LmVudHJpZXMobW9kZXMpKSB7XG5cdFx0XHRpbml0RXZlbnRIYW5kbGVyQnlNb2RlLmNhbGwodGhpcywgbW9kZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgbWVzc2FnZVxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3xIVE1MRWxlbWVudH1tZXNzYWdlXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaWNvblxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5NZXNzYWdlU3RhdGVCdXR0b259XG5cdCAqL1xuXHRzZXRNZXNzYWdlKG1lc3NhZ2UsIHRpdGxlLCBpY29uKSB7XG5cdFx0aWYgKGlzU3RyaW5nKG1lc3NhZ2UpKSB7XG5cdFx0XHRpZiAobWVzc2FnZSA9PT0gXCJcIikge1xuXHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwibWVzc2FnZSBtdXN0IG5vdCBiZSBlbXB0eVwiKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgY29udGFpbmVyRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0XHRcdGNvbnN0IG1lc3NhZ2VEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHRcdFx0Y29uc3QgdGl0bGVEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHRcdFx0dGl0bGVEaXYuc2V0QXR0cmlidXRlKFwiZGF0YS1tb25zdGVyLXJvbGVcIiwgXCJtZXNzYWdlLXRpdGxlLWJveFwiKTtcblxuXHRcdFx0bGV0IHRpdGxlRWxlbWVudCwgaWNvbkVsZW1lbnQ7XG5cdFx0XHRpZiAodGl0bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0aXRsZSA9IHZhbGlkYXRlU3RyaW5nKHRpdGxlKTtcblx0XHRcdFx0dGl0bGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0XHRcdFx0dGl0bGVFbGVtZW50LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIFwiXCIpO1xuXHRcdFx0XHR0aXRsZUVsZW1lbnQuaW5uZXJIVE1MID0gdGl0bGU7XG5cdFx0XHRcdHRpdGxlRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJkYXRhLW1vbnN0ZXItcm9sZVwiLCBcIm1lc3NhZ2UtdGl0bGVcIik7XG5cdFx0XHRcdHRpdGxlRGl2LmFwcGVuZENoaWxkKHRpdGxlRWxlbWVudCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpY29uICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0aWNvbiA9IHZhbGlkYXRlU3RyaW5nKGljb24pO1xuXHRcdFx0XHRpY29uRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdFx0XHRcdGljb25FbGVtZW50LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIFwiXCIpO1xuXHRcdFx0XHRpY29uRWxlbWVudC5pbm5lckhUTUwgPSBpY29uO1xuXHRcdFx0XHRpY29uRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJkYXRhLW1vbnN0ZXItcm9sZVwiLCBcIm1lc3NhZ2UtaWNvblwiKTtcblx0XHRcdFx0dGl0bGVEaXYuYXBwZW5kQ2hpbGQoaWNvbkVsZW1lbnQpO1xuXHRcdFx0fVxuXG5cdFx0XHRtZXNzYWdlRGl2LmlubmVySFRNTCA9IG1lc3NhZ2U7XG5cdFx0XHRjb250YWluZXJEaXYuYXBwZW5kQ2hpbGQodGl0bGVEaXYpO1xuXHRcdFx0Y29udGFpbmVyRGl2LmFwcGVuZENoaWxkKG1lc3NhZ2VEaXYpO1xuXG5cdFx0XHR0aGlzLnNldE9wdGlvbihcIm1lc3NhZ2UuY29udGVudFwiLCBjb250YWluZXJEaXYpO1xuXHRcdH0gZWxzZSBpZiAobWVzc2FnZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHR0aGlzLnNldE9wdGlvbihcIm1lc3NhZ2UuY29udGVudFwiLCBtZXNzYWdlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcblx0XHRcdFx0XCJtZXNzYWdlIG11c3QgYmUgYSBzdHJpbmcgb3IgYW4gaW5zdGFuY2Ugb2YgSFRNTEVsZW1lbnRcIixcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogY2xlYXJzIHRoZSBNZXNzYWdlXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLk1lc3NhZ2VTdGF0ZUJ1dHRvbn1cblx0ICovXG5cdGNsZWFyTWVzc2FnZSgpIHtcblx0XHR0aGlzLnNldE9wdGlvbihcIm1lc3NhZ2UudGl0bGVcIiwgdW5kZWZpbmVkKTtcblx0XHR0aGlzLnNldE9wdGlvbihcIm1lc3NhZ2UuY29udGVudFwiLCB1bmRlZmluZWQpO1xuXHRcdHRoaXMuc2V0T3B0aW9uKFwibWVzc2FnZS5pY29uXCIsIHVuZGVmaW5lZCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogV2l0aCB0aGlzIG1ldGhvZCB5b3UgY2FuIHNob3cgdGhlIHBvcHBlciB3aXRoIHRpbWVvdXQgZmVhdHVyZS5cblx0ICpcblx0ICogQHBhcmFtIHtudW1iZXJ9IHRpbWVvdXRcblx0ICogQHJldHVybiB7TWVzc2FnZVN0YXRlQnV0dG9ufVxuXHQgKi9cblx0c2hvd01lc3NhZ2UodGltZW91dCkge1xuXHRcdHRoaXMuc2hvd0RpYWxvZy5jYWxsKHRoaXMpO1xuXG5cdFx0aWYgKHRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHN1cGVyLmhpZGVEaWFsb2coKTtcblx0XHRcdH0sIHRpbWVvdXQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpdGggdGhpcyBtZXRob2QgeW91IGNhbiBzaG93IHRoZSBwb3BwZXIuXG5cdCAqXG5cdCAqIEByZXR1cm4ge01lc3NhZ2VTdGF0ZUJ1dHRvbn1cblx0ICovXG5cdHNob3dEaWFsb2coKSB7XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwibWVzc2FnZS5jb250ZW50XCIpID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0c3VwZXIuc2hvd0RpYWxvZygpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLk1lc3NhZ2VTdGF0ZUJ1dHRvbn1cblx0ICovXG5cdGhpZGVNZXNzYWdlKCkge1xuXHRcdHN1cGVyLmhpZGVEaWFsb2coKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5NZXNzYWdlU3RhdGVCdXR0b259XG5cdCAqL1xuXHR0b2dnbGVNZXNzYWdlKCkge1xuXHRcdHN1cGVyLnRvZ2dsZURpYWxvZygpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge09iamVjdH1cblx0ICovXG5cdGdldE1lc3NhZ2UoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0T3B0aW9uKFwibWVzc2FnZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItbWVzc2FnZS1zdGF0ZS1idXR0b25cIjtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtBcnJheTxDU1NTdHlsZVNoZWV0Pn1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdGNvbnN0IHN0eWxlcyA9IFBvcHBlci5nZXRDU1NTdHlsZVNoZWV0KCk7XG5cdFx0c3R5bGVzLnB1c2goU3RhdGVCdXR0b25TdHlsZVNoZWV0KTtcblx0XHRzdHlsZXMucHVzaChNZXNzYWdlU3RhdGVCdXR0b25TdHlsZVNoZWV0KTtcblx0XHRyZXR1cm4gc3R5bGVzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBCdXR0b24uY2xpY2soKSBtZXRob2Qgc2ltdWxhdGVzIGEgY2xpY2sgb24gdGhlIGludGVybmFsIGJ1dHRvbiBlbGVtZW50LlxuXHQgKlxuXHQgKiBAc2luY2UgMy4yNy4wXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MRWxlbWVudC9jbGlja31cblx0ICovXG5cdGNsaWNrKCkge1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImRpc2FibGVkXCIpID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXSAmJlxuXHRcdFx0aXNGdW5jdGlvbih0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmNsaWNrKVxuXHRcdCkge1xuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5jbGljaygpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQnV0dG9uLmZvY3VzKCkgbWV0aG9kIHNldHMgZm9jdXMgb24gdGhlIGludGVybmFsIGJ1dHRvbiBlbGVtZW50LlxuXHQgKlxuXHQgKiBAc2luY2UgMy4yNy4wXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MRWxlbWVudC9mb2N1c31cblx0ICovXG5cdGZvY3VzKG9wdGlvbnMpIHtcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJkaXNhYmxlZFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0gJiZcblx0XHRcdGlzRnVuY3Rpb24odGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5mb2N1cylcblx0XHQpIHtcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uZm9jdXMob3B0aW9ucyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBCdXR0b24uYmx1cigpIG1ldGhvZCByZW1vdmVzIGZvY3VzIGZyb20gdGhlIGludGVybmFsIGJ1dHRvbiBlbGVtZW50LlxuXHQgKi9cblx0Ymx1cigpIHtcblx0XHRpZiAoXG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdICYmXG5cdFx0XHRpc0Z1bmN0aW9uKHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uYmx1cilcblx0XHQpIHtcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uYmx1cigpO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBpbml0RXZlbnRIYW5kbGVyQnlNb2RlKG1vZGUpIHtcblx0c3dpdGNoIChtb2RlKSB7XG5cdFx0Y2FzZSBcIm1hbnVhbFwiOlxuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5zZXRPcHRpb24oXCJhY3Rpb25zLmNsaWNrXCIsIChlKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGNhbGxiYWNrID0gdGhpcy5nZXRPcHRpb24oXCJhY3Rpb25zLmNsaWNrXCIpO1xuXHRcdFx0XHRpZiAoaXNGdW5jdGlvbihjYWxsYmFjaykpIHtcblx0XHRcdFx0XHRjYWxsYmFjayhlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJzdWJtaXRcIjpcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uc2V0T3B0aW9uKFwiYWN0aW9ucy5jbGlja1wiLCAoZSkgPT4ge1xuXHRcdFx0XHRjb25zdCBmb3JtID0gdGhpcy5mb3JtO1xuXG5cdFx0XHRcdGlmIChmb3JtIGluc3RhbmNlb2YgSFRNTEZvcm1FbGVtZW50KSB7XG5cdFx0XHRcdFx0Zm9ybS5yZXF1ZXN0U3VibWl0KCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRicmVhaztcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtTZWxlY3R9XG4gKi9cbmZ1bmN0aW9uIGluaXRDb250cm9sUmVmZXJlbmNlcygpIHtcblx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09YnV0dG9uXWAsXG5cdCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiPlxuXG4gICAgICAgICAgICA8bW9uc3Rlci1zdGF0ZS1idXR0b24gZXhwb3J0cGFydHM9XCJidXR0b246YnV0dG9uLWJ1dHRvbixjb250cm9sOmJ1dHRvbi1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImRhdGEtbW9uc3Rlci1vcHRpb24tY2xhc3Nlcy1idXR0b24gcGF0aDpjbGFzc2VzLmJ1dHRvbiwgZGlzYWJsZWQgcGF0aDpmZWF0dXJlcy5kaXNhYmxlQnV0dG9uIHwgaWY6dHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydD1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJidXR0b25cIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6bGFiZWxzLmJ1dHRvblwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvbW9uc3Rlci1zdGF0ZS1idXR0b24+XG5cblxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInBvcHBlclwiIHBhcnQ9XCJwb3BwZXJcIiB0YWJpbmRleD1cIi0xXCIgY2xhc3M9XCJtb25zdGVyLWNvbG9yLXByaW1hcnktMVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJhcnJvd1wiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJtZXNzYWdlXCIgcGFydD1cIm1lc3NhZ2VcIiBjbGFzcz1cImZsZXhcIlxuICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOm1lc3NhZ2UuY29udGVudFwiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICBgO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoTWVzc2FnZVN0YXRlQnV0dG9uKTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfUk9MRSB9IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHsgdHlwZU9mIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3R5cGVvZi5tanNcIjtcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCIuL2J1dHRvbi5tanNcIjtcbmltcG9ydCB7IFBvcHBlckJ1dHRvbiB9IGZyb20gXCIuL3BvcHBlci1idXR0b24ubWpzXCI7XG5pbXBvcnQgeyBDb25maXJtQnV0dG9uU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvY29uZmlybS1idXR0b24ubWpzXCI7XG5pbXBvcnQgeyBmaXJlQ3VzdG9tRXZlbnQgfSBmcm9tIFwiLi4vLi4vZG9tL2V2ZW50cy5tanNcIjtcblxuaW1wb3J0IFwiLi9idXR0b24ubWpzXCI7XG5pbXBvcnQgXCIuL21lc3NhZ2Utc3RhdGUtYnV0dG9uLm1qc1wiO1xuaW1wb3J0IHsgUG9wcGVyQnV0dG9uU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvcG9wcGVyLWJ1dHRvbi5tanNcIjtcbmltcG9ydCB7IFN0YXRlQnV0dG9uU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvc3RhdGUtYnV0dG9uLm1qc1wiO1xuXG5leHBvcnQgeyBDb25maXJtQnV0dG9uIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNvbmZpcm1CdXR0b25FbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiY29uZmlybUJ1dHRvbkVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNhbmNlbEJ1dHRvbkVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJjYW5jZWxCdXR0b25FbGVtZW50XCIpO1xuXG4vKipcbiAqIFRoaXMgYWN0aW9uIGNhbGxiYWNrIGV4ZWN1dGVzIHRoZSBhY3Rpb25zIHdoZW4gYSBidXR0b24gaXMgY2xpY2tlZC5cbiAqXG4gKiBAY2FsbGJhY2sgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1+ZXhhbXBsZUFjdGlvbkNhbGxiYWNrXG4gKiBAcGFyYW0ge0V2ZW50fSBlIEV2ZW50XG4gKiBAdGhpcyB7Q3VzdG9tQ29udHJvbH1cbiAqL1xuXG4vKipcbiAqIFRoaXMgQ3VzdG9tQ29udHJvbCBjcmVhdGVzIGEgY29uZmlybSBidXR0b24gZWxlbWVudCB3aXRoIGEgdmFyaWV0eSBvZiBvcHRpb25zLlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWFnZXMvY29uZmlybS1idXR0b24ucG5nXCI+XG4gKlxuICogRGVwZW5kZW5jaWVzOiB0aGUgc3lzdGVtIHVzZXMgZnVuY3Rpb25zIG9mIHRoZSBbbW9uc3RlcmpzXShodHRwczovL21vbnN0ZXJqcy5vcmcvKSBsaWJyYXJ5XG4gKiBhcyB3ZWxsIGFzIFtwb29wZXJqc10oaHR0cHM6Ly9wb3BwZXIuanMub3JnL2RvY3MvdjIvKS5cbiAqXG4gKiBZb3UgY2FuIGNyZWF0ZSB0aGlzIGNvbnRyb2wgZWl0aGVyIGJ5IHNwZWNpZnlpbmcgdGhlIEhUTUwgdGFnIDxtb25zdGVyLWNvbmZpcm0tYnV0dG9uIC8+YCBkaXJlY3RseSBpbiB0aGUgSFRNTCBvciB1c2luZ1xuICogSmF2YXNjcmlwdCB2aWEgdGhlIGBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWNvbmZpcm0tYnV0dG9uJyk7YCBtZXRob2QuXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItY29uZmlybS1idXR0b24+PC9tb25zdGVyLWNvbmZpcm0tYnV0dG9uPlxuICogYGBgXG4gKlxuICogT3IgeW91IGNhbiBjcmVhdGUgdGhpcyBDdXN0b21Db250cm9sIGRpcmVjdGx5IGluIEphdmFzY3JpcHQ6XG4gKlxuICogYGBganNcbiAqIGltcG9ydCB7Q29uZmlybUJ1dHRvbn0gZnJvbSAnQHNjaHVrYWkvY29tcG9uZW50LWZvcm0vc291cmNlL2NvbmZpcm0tYnV0dG9uLmpzJztcbiAqIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItY29uZmlybS1idXR0b24nKTtcbiAqIGBgYFxuICogVGhlIGBkYXRhLW1vbnN0ZXItYnV0dG9uLWNsYXNzYCBhdHRyaWJ1dGUgY2FuIGJlIHVzZWQgdG8gY2hhbmdlIHRoZSBDU1MgY2xhc3Mgb2YgdGhlIGJ1dHRvbi5cbiAqXG4gKiBAc3RhcnR1bWwgY29uZmlybS1idXR0b24ucG5nXG4gKiBza2lucGFyYW0gbW9ub2Nocm9tZSB0cnVlXG4gKiBza2lucGFyYW0gc2hhZG93aW5nIGZhbHNlXG4gKiBIVE1MRWxlbWVudCA8fC0tIEN1c3RvbUVsZW1lbnRcbiAqIEN1c3RvbUVsZW1lbnQgPHwtLSBDdXN0b21Db250cm9sXG4gKiBDdXN0b21Db250cm9sIDx8LS0gQnV0dG9uXG4gKiBCdXR0b24gPHwtLSBQb3BwZXJCdXR0b25cbiAqIFBvcHBlckJ1dHRvbiA8fC0tIENvbmZpcm1CdXR0b25cbiAqIEBlbmR1bWxcbiAqXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBjb25maXJtIGJ1dHRvblxuICovXG5cbi8qKlxuICogQSBjb25maXJtIGJ1dHRvbiBjb250cm9sLlxuICpcbiAqIEBmcmFnbWVudHMgL2ZyYWdtZW50cy9jb21wb25lbnRzL2Zvcm0vY29uZmlybS1idXR0b24vXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvZm9ybS9jb25maXJtLWJ1dHRvbi1zaW1wbGVcbiAqXG4gKiBAc2luY2UgMS41LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIGNvbmZpcm0gYnV0dG9uIGNvbnRyb2xcbiAqL1xuY2xhc3MgQ29uZmlybUJ1dHRvbiBleHRlbmRzIFBvcHBlckJ1dHRvbiB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcblx0XHRcdFwiQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2Zvcm0vY29uZmlybS1idXR0b25AQGluc3RhbmNlXCIsXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBIVE1MIHRhZywgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0b2dnbGVFdmVudFR5cGU9Y2xpY2ssdG91Y2ggTGlzdCBvZiBldmVudCB0eXBlcyB0byBiZSBvYnNlcnZlZCBmb3Igb3BlbmluZyB0aGUgY29uZmlybSBtZXNzYWdlXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5idXR0b249JzxzbG90IG5hbWU9XCJidXR0b25cIj48L3Nsb3Q+JyBCdXR0b24gbGFiZWxcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5tZXNzYWdlPSc8c2xvdD5TaG91bGQgSSBTdGF5IG9yIFNob3VsZCBJIEdvPzwvc2xvdD4nIE1lc3NhZ2Vcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5jb25maXJtPSc8c2xvdCBuYW1lPVwiY29uZmlybVwiPkNvbmZpcm08L3Nsb3Q+JyBDb25maXJtIGJ1dHRvbiBsYWJlbFxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbGFiZWxzLmNhbmNlbD0nPHNsb3QgbmFtZT1cImNhbmNlbFwiPkNhbmNlbDwvc2xvdD4nIENhbmNlbCBidXR0b24gbGFiZWxcblx0ICogQHByb3BlcnR5IHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybX5leGFtcGxlQWN0aW9uQ2FsbGJhY2t9IGFjdGlvbnMuY29uZmlybVxuXHQgKiBAcHJvcGVydHkge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtfmV4YW1wbGVBY3Rpb25DYWxsYmFja30gYWN0aW9ucy5jYW5jZWwgTGlzdCBvZiBldmVudCB0eXBlcyB0byBiZSBvYnNlcnZlZCBmb3Igb3BlbmluZyB0aGUgZHJvcGRvd25cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHBvcHBlciBbUG9wcGVySlMgT3B0aW9uc10oaHR0cHM6Ly9wb3BwZXIuanMub3JnL2RvY3MvdjIvKVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcG9wcGVyLnBsYWNlbWVudD10b3AgUG9wcGVySlMgcGxhY2VtZW50XG5cdCAqIEBleHRlbmRzIHtQb3BwZXJCdXR0b259XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0Y29uc3Qgb2JqID0gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0fSxcblx0XHRcdGxhYmVsczoge1xuXHRcdFx0XHRidXR0b246ICc8c2xvdCBuYW1lPVwiYnV0dG9uXCI+PC9zbG90PicsXG5cdFx0XHRcdG1lc3NhZ2U6IFwiPHNsb3Q+U2hvdWxkIEkgU3RheSBvciBTaG91bGQgSSBHbz88L3Nsb3Q+XCIsXG5cdFx0XHRcdGNvbmZpcm06ICc8c2xvdCBuYW1lPVwiY29uZmlybVwiPkNvbmZpcm08L3Nsb3Q+Jyxcblx0XHRcdFx0Y2FuY2VsOiAnPHNsb3QgbmFtZT1cImNhbmNlbFwiPkNhbmNlbDwvc2xvdD4nLFxuXHRcdFx0fSxcblx0XHR9KTtcblxuXHRcdG9ialtcImNsYXNzZXNcIl1bXCJjb25maXJtQnV0dG9uXCJdID0gXCJtb25zdGVyLWJ1dHRvbi1wcmltYXJ5XCI7XG5cdFx0b2JqW1wiY2xhc3Nlc1wiXVtcImNhbmNlbEJ1dHRvblwiXSA9IFwibW9uc3Rlci1idXR0b24tc2Vjb25kYXJ5XCI7XG5cdFx0b2JqW1wiYWN0aW9uc1wiXVtcImNhbmNlbFwiXSA9IChlKSA9PiB7XG5cdFx0XHR0aGlzLmhpZGVEaWFsb2coKTtcblx0XHR9O1xuXG5cdFx0b2JqW1wiYWN0aW9uc1wiXVtcImNvbmZpcm1cIl0gPSAoZSkgPT4ge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhpcyBjYWxsYmFjayBtdXN0IGJlIGltcGxlbWVudGVkXCIpO1xuXHRcdH07XG5cblx0XHRyZXR1cm4gb2JqO1xuXHR9XG5cblx0aGlkZURpYWxvZygpIHtcblx0XHRzdXBlci5oaWRlRGlhbG9nKCk7XG5cdFx0dGhpc1tjb25maXJtQnV0dG9uRWxlbWVudFN5bWJvbF0ucmVtb3ZlU3RhdGUoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5Qb3BwZXJCdXR0b259XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXHRcdGluaXRDb250cm9sUmVmZXJlbmNlcy5jYWxsKHRoaXMpO1xuXHRcdGluaXRFdmVudGhhbmRsZXIuY2FsbCh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItY29uZmlybS1idXR0b25cIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtBcnJheX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdGNvbnN0IHN0eWxlcyA9IFBvcHBlckJ1dHRvbi5nZXRDU1NTdHlsZVNoZWV0KCk7XG5cdFx0c3R5bGVzLnB1c2goQ29uZmlybUJ1dHRvblN0eWxlU2hlZXQpO1xuXHRcdHJldHVybiBzdHlsZXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uUG9wcGVyQnV0dG9ufVxuXHQgKi9cblx0c2hvd0RpYWxvZygpIHtcblx0XHRjb25zdCBjb25maXJtQnV0dG9uQ2xhc3MgPSB0aGlzLmdldE9wdGlvbihcImNsYXNzZXMuY29uZmlybUJ1dHRvblwiKTtcblx0XHRpZiAoY29uZmlybUJ1dHRvbkNsYXNzKSB7XG5cdFx0XHR0aGlzW2NvbmZpcm1CdXR0b25FbGVtZW50U3ltYm9sXS5zZXRPcHRpb24oXG5cdFx0XHRcdFwiY2xhc3Nlcy5idXR0b25cIixcblx0XHRcdFx0Y29uZmlybUJ1dHRvbkNsYXNzLFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRjb25zdCBjYW5jZWxCdXR0b25DbGFzcyA9IHRoaXMuZ2V0T3B0aW9uKFwiY2xhc3Nlcy5jYW5jZWxCdXR0b25cIik7XG5cdFx0aWYgKGNhbmNlbEJ1dHRvbkNsYXNzKSB7XG5cdFx0XHR0aGlzW2NhbmNlbEJ1dHRvbkVsZW1lbnRTeW1ib2xdLnNldE9wdGlvbihcblx0XHRcdFx0XCJjbGFzc2VzLmJ1dHRvblwiLFxuXHRcdFx0XHRjYW5jZWxCdXR0b25DbGFzcyxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHN1cGVyLnNob3dEaWFsb2coKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIGNvbmZpcm0gYnV0dG9uIHN0YXRlXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0ZVxuXHQgKiBAcGFyYW0ge251bWJlcn0gdGltZW91dFxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5Db25maXJtQnV0dG9ufVxuXHQgKi9cblx0c2V0Q29uZmlybUJ1dHRvblN0YXRlKHN0YXRlLCB0aW1lb3V0KSB7XG5cdFx0dGhpc1tjb25maXJtQnV0dG9uRWxlbWVudFN5bWJvbF0uc2V0U3RhdGUoc3RhdGUsIHRpbWVvdXQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBhbmQgc2hvdyB0aGUgY29uZmlybSBidXR0b24gbWVzc2FnZVxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxuXHQgKiBAcGFyYW0ge251bWJlcn0gdGltZW91dFxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5Db25maXJtQnV0dG9ufVxuXHQgKi9cblx0c2hvd0NvbmZpcm1CdXR0b25NZXNzYWdlKG1lc3NhZ2UsIHRpbWVvdXQpIHtcblx0XHR0aGlzW2NvbmZpcm1CdXR0b25FbGVtZW50U3ltYm9sXS5zZXRNZXNzYWdlKG1lc3NhZ2UpO1xuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0dGhpc1tjb25maXJtQnV0dG9uRWxlbWVudFN5bWJvbF0uc2hvd01lc3NhZ2UodGltZW91dCk7XG5cdFx0fSwgMCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHR5cGVcbiAqIEByZXR1cm4ge2Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBnZXRBY3Rpb24odHlwZSkge1xuXHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRyZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdFx0Y29uc3QgY2FsbGJhY2sgPSBzZWxmLmdldE9wdGlvbihgYWN0aW9ucy4ke3R5cGV9YCk7XG5cdFx0aWYgKHR5cGVPZihjYWxsYmFjaykgIT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNhbGxiYWNrLmNhbGwodGhpcywgZXZlbnQpO1xuXHR9O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtpbml0RXZlbnRoYW5kbGVyfVxuICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlBvcHBlckJ1dHRvbiNtb25zdGVyLWNvbmZpcm1cbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5Qb3BwZXJCdXR0b24jbW9uc3Rlci1jb25maXJtZWRcbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50aGFuZGxlcigpIHtcblx0dGhpc1tjYW5jZWxCdXR0b25FbGVtZW50U3ltYm9sXS5zZXRPcHRpb24oXG5cdFx0XCJjbGlja0V2ZW50VHlwZVwiLFxuXHRcdHRoaXMuZ2V0T3B0aW9uKFwiY2xpY2tFdmVudFR5cGVcIiwgW1wiY2xpY2tcIl0pLFxuXHQpO1xuXHR0aGlzW2NhbmNlbEJ1dHRvbkVsZW1lbnRTeW1ib2xdLnNldE9wdGlvbihcblx0XHRcImFjdGlvbnMuY2xpY2tcIixcblx0XHRnZXRBY3Rpb24uY2FsbCh0aGlzLCBcImNhbmNlbFwiKSxcblx0KTtcblxuXHR0aGlzW2NvbmZpcm1CdXR0b25FbGVtZW50U3ltYm9sXS5zZXRPcHRpb24oXG5cdFx0XCJjbGlja0V2ZW50VHlwZVwiLFxuXHRcdHRoaXMuZ2V0T3B0aW9uKFwiY2xpY2tFdmVudFR5cGVcIiwgW1wiY2xpY2tcIl0pLFxuXHQpO1xuXHR0aGlzW2NvbmZpcm1CdXR0b25FbGVtZW50U3ltYm9sXS5zZXRPcHRpb24oXCJhY3Rpb25zLmNsaWNrXCIsICgpID0+IHtcblx0XHRjb25zdCBjYWxsYmFjayA9IGdldEFjdGlvbi5jYWxsKHRoaXMsIFwiY29uZmlybVwiKTtcblx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLWNvbmZpcm1cIiwge30pO1xuXHRcdGNhbGxiYWNrLmNhbGwodGhpcyk7XG5cdFx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci1jb25maXJtZWRcIiwge30pO1xuXHR9KTtcblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7U2VsZWN0fVxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdHRoaXNbY29uZmlybUJ1dHRvbkVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1jb25maXJtXWAsXG5cdCk7XG5cdHRoaXNbY2FuY2VsQnV0dG9uRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWNhbmNlbF1gLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImRpc2FibGVkIHBhdGg6ZGlzYWJsZWQgfCBpZjp0cnVlLCBjbGFzcyBwYXRoOmNsYXNzZXMuYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBwYXJ0PVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmxhYmVscy5idXR0b25cIj48L2J1dHRvbj5cblxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInBvcHBlclwiIHBhcnQ9XCJwb3BwZXJcIiB0YWJpbmRleD1cIi0xXCIgY2xhc3M9XCJtb25zdGVyLWNvbG9yLXByaW1hcnktMVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJhcnJvd1wiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgcGFydD1cIm1lc3NhZ2VcIiBjbGFzcz1cImZsZXhcIiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6bGFiZWxzLm1lc3NhZ2VcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiZGVjaXNpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPG1vbnN0ZXItbWVzc2FnZS1zdGF0ZS1idXR0b24gZXhwb3J0cGFydHM9XCJtb25zdGVyLXN0YXRlLWJ1dHRvbjpjb25maXJtLWJ1dHRvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2w6Y29uZmlybS1jb250cm9sLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uLWJ1dHRvbjpjb25maXJtLWNvbnRyb2wtYnV0dG9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uLWNvbnRyb2w6Y29uZmlybS1idXR0b24tY29udHJvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcHBlcjpjb25maXJtLXBvcHBlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6Y29uZmlybS1wb3BwZXItbWVzc2FnZS1tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjpjb25maXJtLXBvcHBlci1tZXNzYWdlLWljb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTpjb25maXJtLXBvcHBlci1tZXNzYWdlLXRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJkYXRhLW1vbnN0ZXItYnV0dG9uLWNsYXNzIHBhdGg6Y2xhc3Nlcy5jb25maXJtQnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJjb25maXJtXCIgcGFydD1cImNvbmZpcm1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpsYWJlbHMuY29uZmlybVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tb25zdGVyLW1lc3NhZ2Utc3RhdGUtYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICAgIDxtb25zdGVyLWJ1dHRvbiBleHBvcnRwYXJ0cz1cImJ1dHRvbjpjYW5jZWwtYnV0dG9uLGNvbnRyb2w6Y2FuY2VsLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJkYXRhLW1vbnN0ZXItYnV0dG9uLWNsYXNzIHBhdGg6Y2xhc3Nlcy5jYW5jZWxCdXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJjYW5jZWxcIiBwYXJ0PVwiY2FuY2VsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6bGFiZWxzLmNhbmNlbFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tb25zdGVyLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICBgO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoQ29uZmlybUJ1dHRvbik7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgcGFyc2VEYXRhVVJMIH0gZnJvbSBcIi4uL3R5cGVzL2RhdGF1cmwubWpzXCI7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IFByb3h5T2JzZXJ2ZXIgfSBmcm9tIFwiLi4vdHlwZXMvcHJveHlvYnNlcnZlci5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlT2JqZWN0IH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSBcIi4vZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHsgUGF0aGZpbmRlciB9IGZyb20gXCIuL3BhdGhmaW5kZXIubWpzXCI7XG5cbmV4cG9ydCB7IERhdGFzb3VyY2UgfTtcblxuLyoqXG4gKiBUaGlzIGNhbGxiYWNrIGNhbiBiZSBwYXNzZWQgdG8gYSBkYXRhc291cmNlIGFuZCBpcyB1c2VkIHRvIGFkYXB0IGRhdGEgc3RydWN0dXJlcy5cbiAqXG4gKiBAY2FsbGJhY2sgTW9uc3Rlci5EYXRhLkRhdGFzb3VyY2V+ZXhhbXBsZUNhbGxiYWNrXG4gKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5ICBLZXlcbiAqIEBzZWUgTW9uc3Rlci5EYXRhLkRhdGFzb3VyY2VcbiAqL1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNC4wXG4gKi9cbmNvbnN0IGludGVybmFsRGF0YVN5bWJvbCA9IFN5bWJvbC5mb3IoXG5cdFwiQHNjaHVrYWkvbW9uc3Rlci9kYXRhL2RhdGFzb3VyY2UvQEBkYXRhXCIsXG4pO1xuXG4vKipcbiAqIFRoZSBkYXRhc291cmNlIGNsYXNzIGlzIHRoZSBiYXNpcyBmb3IgZGVhbGluZyB3aXRoIGRpZmZlcmVudCBkYXRhIHNvdXJjZXMuXG4gKiBJdCBwcm92aWRlcyBhIHVuaWZpZWQgaW50ZXJmYWNlIGZvciBhY2Nlc3NpbmcgZGF0YVxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL2RhdGEvZGF0YXNvdXJjZS5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjIuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IFRoZSBkYXRhc291cmNlIGNsYXNzIGVuY2Fwc3VsYXRlcyB0aGUgYWNjZXNzIHRvIGRhdGEgb2JqZWN0cy5cbiAqL1xuY2xhc3MgRGF0YXNvdXJjZSBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICogY3JlYXRlcyBhIG5ldyBkYXRhc291cmNlXG5cdCAqXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSBuZXcgUHJveHlPYnNlcnZlcih7XG5cdFx0XHRvcHRpb25zOiBleHRlbmQoe30sIHRoaXMuZGVmYXVsdHMpLFxuXHRcdH0pO1xuXG5cdFx0dGhpc1tpbnRlcm5hbERhdGFTeW1ib2xdID0gbmV3IFByb3h5T2JzZXJ2ZXIoe30pO1xuXHR9XG5cblx0LyoqXG5cdCAqIGF0dGFjaCBhIG5ldyBvYnNlcnZlclxuXHQgKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJuIHtEYXRhc291cmNlfVxuXHQgKi9cblx0YXR0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHR0aGlzW2ludGVybmFsRGF0YVN5bWJvbF0uYXR0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIGRldGFjaCBhIG9ic2VydmVyXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm4ge0RhdGFzb3VyY2V9XG5cdCAqL1xuXHRkZXRhY2hPYnNlcnZlcihvYnNlcnZlcikge1xuXHRcdHRoaXNbaW50ZXJuYWxEYXRhU3ltYm9sXS5kZXRhY2hPYnNlcnZlcihvYnNlcnZlcik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGNvbnRhaW5zT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbERhdGFTeW1ib2xdLmNvbnRhaW5zT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlcml2ZWQgY2xhc3NlcyBjYW4gb3ZlcnJpZGUgYW5kIGV4dGVuZCB0aGlzIG1ldGhvZCBhcyBmb2xsb3dzLlxuXHQgKlxuXHQgKiBgYGBcblx0ICogZ2V0IGRlZmF1bHRzKCkge1xuXHQgKiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0ICogICAgICAgIG15VmFsdWU6dHJ1ZVxuXHQgKiAgICB9KTtcblx0ICogfVxuXHQgKiBgYGBcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4ge307XG5cdH1cblxuXHQvKipcblx0ICogU2V0IG9wdGlvblxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuXHQgKiBAcGFyYW0geyp9IHZhbHVlXG5cdCAqIEByZXR1cm4ge0RhdGFzb3VyY2V9XG5cdCAqL1xuXHRzZXRPcHRpb24ocGF0aCwgdmFsdWUpIHtcblx0XHRuZXcgUGF0aGZpbmRlcih0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRTdWJqZWN0KClbXCJvcHRpb25zXCJdKS5zZXRWaWEoXG5cdFx0XHRwYXRoLFxuXHRcdFx0dmFsdWUsXG5cdFx0KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3xvYmplY3R9IG9wdGlvbnNcblx0ICogQHJldHVybiB7RGF0YXNvdXJjZX1cblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBvcHRpb25zIGRvZXMgbm90IGNvbnRhaW4gYSB2YWxpZCBqc29uIGRlZmluaXRpb25cblx0ICovXG5cdHNldE9wdGlvbnMob3B0aW9ucykge1xuXHRcdGlmIChpc1N0cmluZyhvcHRpb25zKSkge1xuXHRcdFx0b3B0aW9ucyA9IHBhcnNlT3B0aW9uc0pTT04ob3B0aW9ucyk7XG5cdFx0fVxuXHRcdGV4dGVuZChcblx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKVtcIm9wdGlvbnNcIl0sXG5cdFx0XHR0aGlzLmRlZmF1bHRzLFxuXHRcdFx0b3B0aW9ucyxcblx0XHQpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogbmVzdGVkIG9wdGlvbnMgY2FuIGJlIHNwZWNpZmllZCBieSBwYXRoIGBhLmIuY2Bcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcblx0ICogQHBhcmFtIHsqfSBkZWZhdWx0VmFsdWVcblx0ICogQHJldHVybiB7Kn1cblx0ICovXG5cdGdldE9wdGlvbihwYXRoLCBkZWZhdWx0VmFsdWUpIHtcblx0XHRsZXQgdmFsdWU7XG5cblx0XHR0cnkge1xuXHRcdFx0dmFsdWUgPSBuZXcgUGF0aGZpbmRlcihcblx0XHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0UmVhbFN1YmplY3QoKVtcIm9wdGlvbnNcIl0sXG5cdFx0XHQpLmdldFZpYShwYXRoKTtcblx0XHR9IGNhdGNoIChlKSB7fVxuXG5cdFx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiBkZWZhdWx0VmFsdWU7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGlzIG1ldGhvZCBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGRlcml2ZWQgY2xhc3Nlcy5cblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdHJlYWQoKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidGhpcyBtZXRob2QgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBkZXJpdmVkIGNsYXNzZXNcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHRocm93cyB7RXJyb3J9IHRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZGVyaXZlZCBjbGFzc2VzLlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0d3JpdGUoKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidGhpcyBtZXRob2QgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBkZXJpdmVkIGNsYXNzZXNcIik7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyByZWFsIG9iamVjdFxuXHQgKlxuXHQgKiBAcmV0dXJuIHtPYmplY3R8QXJyYXl9XG5cdCAqL1xuXHRnZXQoKSB7XG5cdFx0cmV0dXJuIHRoaXNbaW50ZXJuYWxEYXRhU3ltYm9sXS5nZXRSZWFsU3ViamVjdCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fEFycmF5fSBkYXRhXG5cdCAqIEByZXR1cm4ge0RhdGFzb3VyY2V9XG5cdCAqL1xuXHRzZXQoZGF0YSkge1xuXHRcdHRoaXNbaW50ZXJuYWxEYXRhU3ltYm9sXS5zZXRTdWJqZWN0KGRhdGEpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9kYXRhL2RhdGFzb3VyY2VcIik7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtTdHJpbmd9IGRhdGFcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgb3B0aW9ucyBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQganNvbiBkZWZpbml0aW9uXG4gKi9cbmZ1bmN0aW9uIHBhcnNlT3B0aW9uc0pTT04oZGF0YSkge1xuXHRpZiAoaXNTdHJpbmcoZGF0YSkpIHtcblx0XHQvLyB0aGUgY29uZmlndXJhdGlvbiBjYW4gYmUgc3BlY2lmaWVkIGFzIGEgZGF0YSB1cmwuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGRhdGFVcmwgPSBwYXJzZURhdGFVUkwoZGF0YSk7XG5cdFx0XHRkYXRhID0gZGF0YVVybC5jb250ZW50O1xuXHRcdH0gY2F0Y2ggKGUpIHt9XG5cblx0XHR0cnkge1xuXHRcdFx0Y29uc3Qgb2JqID0gSlNPTi5wYXJzZShkYXRhKTtcblx0XHRcdHZhbGlkYXRlT2JqZWN0KG9iaik7XG5cdFx0XHRyZXR1cm4gb2JqO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0YHRoZSBvcHRpb25zIGRvZXMgbm90IGNvbnRhaW4gYSB2YWxpZCBqc29uIGRlZmluaXRpb24gKGFjdHVhbDogJHtkYXRhfSkuYCxcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHt9O1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEFUVFJJQlVURV9QUkVGSVggfSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuLyoqXG4gKiBAc2luY2UgMS4wLjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSyA9IFwiYmxvY2tcIjtcblxuLyoqXG4gKiBUaGlzIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLWRhdGFzb3VyY2VgIGNhbiBiZSB1c2VkIHRvIHBhc3MgYSBkYXRhc291cmNlLlxuICpcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9EQVRBU09VUkNFID0gYCR7QVRUUklCVVRFX1BSRUZJWH1kYXRhc291cmNlYDtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfREFUQVNPVVJDRV9TRUxFQ1RPUiA9IGAke0FUVFJJQlVURV9EQVRBU09VUkNFfS1zZWxlY3RvcmA7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0RBVEFUQUJMRV9HUklEX1RFTVBMQVRFID0gYCR7QVRUUklCVVRFX1BSRUZJWH1ncmlkLXRlbXBsYXRlYDtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfREFUQVRBQkxFX0hFQUQgPSBgJHtBVFRSSUJVVEVfUFJFRklYfWhlYWRgO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9EQVRBVEFCTEVfQUxJR04gPSBgJHtBVFRSSUJVVEVfUFJFRklYfWFsaWduYDtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfREFUQVRBQkxFX1NPUlRBQkxFID0gYCR7QVRUUklCVVRFX1BSRUZJWH1zb3J0YWJsZWA7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0RBVEFUQUJMRV9JTkRFWCA9IGAke0FUVFJJQlVURV9QUkVGSVh9aW5kZXhgO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9EQVRBVEFCTEVfTU9ERSA9IGAke0FUVFJJQlVURV9QUkVGSVh9bW9kZWA7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0RBVEFUQUJMRV9SRVNQT05TSVZFX0JSRUFLUE9JTlQgPSBgJHtBVFRSSUJVVEVfUFJFRklYfXJlc3BvbnNpdmUtYnJlYWtwb2ludGA7XG5cbi8qKlxuICogVGhpcyBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1kYXRhc291cmNlLWFyZ3VtZW50c2AgY2FuIGJlIHVzZWQgdG8gcGFzcyBhcmd1bWVudHMuXG4gKlxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0RBVEFTT1VSQ0VfQVJHVU1FTlRTID0gYCR7QVRUUklCVVRFX0RBVEFTT1VSQ0V9LWFyZ3VtZW50c2A7XG5cbi8qKlxuICogQ29sdW1uIGlzIG5vdCBoaWRlYWJsZSBhbmQgdmlzaWJsZVxuICpcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfREFUQVRBQkxFX01PREVfRklYRUQgPSBcImZpeGVkXCI7XG5cbi8qKlxuICogQ29sdW1uIGlzIGhpZGRlblxuICpcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfREFUQVRBQkxFX01PREVfSElEREVOID0gXCJoaWRkZW5cIjtcblxuLyoqXG4gKiBDb2x1bW4gaXMgdmlzaWJsZVxuICpcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfREFUQVRBQkxFX01PREVfVklTSUJMRSA9IFwidmlzaWJsZVwiO1xuXG5leHBvcnQge1xuXHRBVFRSSUJVVEVfREFUQVNPVVJDRSxcblx0QVRUUklCVVRFX0RBVEFTT1VSQ0VfU0VMRUNUT1IsXG5cdEFUVFJJQlVURV9EQVRBU09VUkNFX0FSR1VNRU5UUyxcblx0QVRUUklCVVRFX0RBVEFUQUJMRV9HUklEX1RFTVBMQVRFLFxuXHRBVFRSSUJVVEVfREFUQVRBQkxFX0hFQUQsXG5cdEFUVFJJQlVURV9EQVRBVEFCTEVfU09SVEFCTEUsXG5cdEFUVFJJQlVURV9EQVRBVEFCTEVfTU9ERSxcblx0QVRUUklCVVRFX0RBVEFUQUJMRV9JTkRFWCxcblx0QVRUUklCVVRFX0RBVEFUQUJMRV9BTElHTixcblx0QVRUUklCVVRFX0RBVEFUQUJMRV9NT0RFX0ZJWEVELFxuXHRBVFRSSUJVVEVfREFUQVRBQkxFX1JFU1BPTlNJVkVfQlJFQUtQT0lOVCxcblx0QVRUUklCVVRFX0RBVEFUQUJMRV9NT0RFX1ZJU0lCTEUsXG5cdEFUVFJJQlVURV9EQVRBVEFCTEVfTU9ERV9ISURERU4sXG5cdFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSyxcbn07XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHtcblx0Q3VzdG9tRWxlbWVudCxcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IERhdGFzb3VyY2UgYXMgRGF0YXNvdXJjZUJhc2UgfSBmcm9tIFwiLi4vLi4vZGF0YS9kYXRhc291cmNlLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBEYXRhc291cmNlLCBkYXRhU291cmNlU3ltYm9sIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGRhdGFTb3VyY2VTeW1ib2wgPSBTeW1ib2wuZm9yKFxuXHRcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9kYXRhc291cmNlQEBkYXRhc291cmNlXCIsXG4pO1xuXG4vKipcbiAqIFRoZSBEYXRhc291cmNlIGNvbXBvbmVudCBpcyBhIGJhc2ljIGNsYXNzIGZvciB0aGUgZGF0YXRhYmxlIGNvbXBvbmVudC5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1hZ2VzL2RhdGFzb3VyY2UucG5nXCI+XG4gKlxuICogRGVwZW5kZW5jaWVzOiB0aGUgc3lzdGVtIHVzZXMgZnVuY3Rpb25zIG9mIHRoZSBbbW9uc3RlcmpzXShodHRwczovL21vbnN0ZXJqcy5vcmcvKSBsaWJyYXJ5XG4gKlxuICogQHN0YXJ0dW1sIGRhdGFzb3VyY2UucG5nXG4gKiBza2lucGFyYW0gbW9ub2Nocm9tZSB0cnVlXG4gKiBza2lucGFyYW0gc2hhZG93aW5nIGZhbHNlXG4gKiBIVE1MRWxlbWVudCA8fC0tIEN1c3RvbUVsZW1lbnRcbiAqIEN1c3RvbUVsZW1lbnQgPHwtLSBEYXRhc291cmNlXG4gKiBAZW5kdW1sXG4gKlxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgYWJzdHJhY3QgZGF0YXNvdXJjZVxuICovXG5jbGFzcyBEYXRhc291cmNlIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG5cdC8qKlxuXHQgKiB0aGUgY29uc3RydWN0b3Igb2YgdGhlIGNsYXNzXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXNbZGF0YVNvdXJjZVN5bWJvbF0gPSBuZXcgRGF0YXNvdXJjZUJhc2UoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2RhdGFzb3VyY2VAQGluc3RhbmNlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIEhUTUwgdGFnLCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge30pO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLkZvcm19XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgZGF0YSwgd2l0aG91dCBwcm94eVxuXHQgKiBAcmV0dXJuIHtPYmplY3R9XG5cdCAqL1xuXHRnZXQgZGF0YSgpIHtcblx0XHRyZXR1cm4gdGhpc1tkYXRhU291cmNlU3ltYm9sXS5nZXQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBzZXQgdGhlIGRhdGFcblx0ICogQHBhcmFtIHtPYmplY3R9IGRhdGFcblx0ICovXG5cdHNldCBkYXRhKGRhdGEpIHtcblx0XHR0aGlzW2RhdGFTb3VyY2VTeW1ib2xdLnNldChkYXRhKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGRhdGFzb3VyY2Vcblx0ICogQHJldHVybiB7TW9uc3Rlci5EYXRhLkRhdGFzb3VyY2V9XG5cdCAqL1xuXHRnZXQgZGF0YXNvdXJjZSgpIHtcblx0XHRyZXR1cm4gdGhpc1tkYXRhU291cmNlU3ltYm9sXTtcblx0fVxuXG5cdHdyaXRlKCkge1xuXHRcdHRoaXNbZGF0YVNvdXJjZVN5bWJvbF0ud3JpdGUoKTtcblx0fVxuXG5cdHJlYWQoKSB7XG5cdFx0dGhpc1tkYXRhU291cmNlU3ltYm9sXS5yZWFkKCk7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIDIwMjQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICovXG5cbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0VSUk9STUVTU0FHRSB9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBEYXRhc2V0U3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgRGF0YXNldFN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHREYXRhc2V0U3R5bGVTaGVldC5pbnNlcnRSdWxlKFxuXHRcdGBcbkBsYXllciBkYXRhc2V0IHsgXG46d2hlcmUoaHRtbCl7bGluZS1oZWlnaHQ6MS4xNTstd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6MTAwJTstbW96LXRleHQtc2l6ZS1hZGp1c3Q6MTAwJTt0ZXh0LXNpemUtYWRqdXN0OjEwMCV9OndoZXJlKGgxKXtmb250LXNpemU6MmVtO21hcmdpbi1ibG9jay1lbmQ6LjY3ZW07bWFyZ2luLWJsb2NrLXN0YXJ0Oi42N2VtfTp3aGVyZShkbCxvbCx1bCkgOndoZXJlKGRsLG9sLHVsKXttYXJnaW4tYmxvY2stZW5kOjA7bWFyZ2luLWJsb2NrLXN0YXJ0OjB9OndoZXJlKGhyKXtib3gtc2l6aW5nOmNvbnRlbnQtYm94O2NvbG9yOmluaGVyaXQ7aGVpZ2h0OjB9OndoZXJlKGFiYnJbdGl0bGVdKXt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOy13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWR9OndoZXJlKGIsc3Ryb25nKXtmb250LXdlaWdodDpib2xkZXJ9OndoZXJlKGNvZGUsa2JkLHByZSxzYW1wKXtmb250LWZhbWlseTptb25vc3BhY2UsbW9ub3NwYWNlO2ZvbnQtc2l6ZToxZW19OndoZXJlKHNtYWxsKXtmb250LXNpemU6ODAlfTp3aGVyZSh0YWJsZSl7Ym9yZGVyLWNvbG9yOmN1cnJlbnRDb2xvcjt0ZXh0LWluZGVudDowfTp3aGVyZShidXR0b24saW5wdXQsc2VsZWN0KXttYXJnaW46MH06d2hlcmUoYnV0dG9uKXt0ZXh0LXRyYW5zZm9ybTpub25lfTp3aGVyZShidXR0b24saW5wdXQ6aXMoW3R5cGU9YnV0dG9uIGldLFt0eXBlPXJlc2V0IGldLFt0eXBlPXN1Ym1pdCBpXSkpey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b259OndoZXJlKHByb2dyZXNzKXt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX06d2hlcmUoc2VsZWN0KXt0ZXh0LXRyYW5zZm9ybTpub25lfTp3aGVyZSh0ZXh0YXJlYSl7bWFyZ2luOjB9OndoZXJlKGlucHV0W3R5cGU9c2VhcmNoIGldKXstd2Via2l0LWFwcGVhcmFuY2U6dGV4dGZpZWxkO291dGxpbmUtb2Zmc2V0Oi0ycHh9Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbntoZWlnaHQ6YXV0b306Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6aW5oZXJpdDtvcGFjaXR5Oi41NH06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbnstd2Via2l0LWFwcGVhcmFuY2U6YnV0dG9uO2ZvbnQ6aW5oZXJpdH06d2hlcmUoYnV0dG9uLGlucHV0OmlzKFt0eXBlPWJ1dHRvbiBpXSxbdHlwZT1jb2xvciBpXSxbdHlwZT1yZXNldCBpXSxbdHlwZT1zdWJtaXQgaV0pKTo6LW1vei1mb2N1cy1pbm5lcntib3JkZXItc3R5bGU6bm9uZTtwYWRkaW5nOjB9OndoZXJlKGJ1dHRvbixpbnB1dDppcyhbdHlwZT1idXR0b24gaV0sW3R5cGU9Y29sb3IgaV0sW3R5cGU9cmVzZXQgaV0sW3R5cGU9c3VibWl0IGldKSk6Oi1tb3otZm9jdXNyaW5ne291dGxpbmU6MXB4IGRvdHRlZCBCdXR0b25UZXh0fTp3aGVyZSg6LW1vei11aS1pbnZhbGlkKXtib3gtc2hhZG93Om5vbmV9OndoZXJlKGRpYWxvZyl7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjpzb2xpZDtjb2xvcjojMDAwO2hlaWdodDotbW96LWZpdC1jb250ZW50O2hlaWdodDpmaXQtY29udGVudDtsZWZ0OjA7bWFyZ2luOmF1dG87cGFkZGluZzoxZW07cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt3aWR0aDotbW96LWZpdC1jb250ZW50O3dpZHRoOmZpdC1jb250ZW50fTp3aGVyZShkaWFsb2c6bm90KFtvcGVuXSkpe2Rpc3BsYXk6bm9uZX06d2hlcmUoc3VtbWFyeSl7ZGlzcGxheTpsaXN0LWl0ZW19aHRtbHtoZWlnaHQ6MTAwJX1ib2R5LGh0bWx7bWluLWhlaWdodDpjYWxjKDEwMHZoIC0gNDBweCl9Ym9keXtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWFyZ2luOjA7cGFkZGluZzowO3dvcmQtYnJlYWs6YnJlYWstd29yZH0uYmxvY2t7ZGlzcGxheTpibG9ja30uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmdyaWR7ZGlzcGxheTpncmlkfS5pbmxpbmUtZ3JpZHtkaXNwbGF5OmlubGluZS1ncmlkfS5mbGV4e2Rpc3BsYXk6ZmxleH0uaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleH0uaGlkZGVuLC5oaWRlLC5ub25le2Rpc3BsYXk6bm9uZX0udmlzaWJsZXt2aXNpYmlsaXR5OnZpc2libGV9LmludmlzaWJsZXt2aXNpYmlsaXR5OmhpZGRlbn0ubW9uc3Rlci1idXR0b24tcHJpbWFyeSxidXR0b257YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtcG9zaXRpb246NTAlO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7Z2FwOi40cmVtO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MS41O291dGxpbmU6bm9uZTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzouMzc1cmVtIC43NXJlbTtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3dpZHRoOi13ZWJraXQtZmlsbC1hdmFpbGFibGU7d2lkdGg6LW1vei1hdmFpbGFibGU7d2lkdGg6c3RyZXRjaH0ubW9uc3Rlci1idXR0b24tcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1idXR0b24tc2Vjb25kYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1zZWNvbmRhcnksLm1vbnN0ZXItYnV0dG9uLXRlcnRpYXJ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLXRlcnRpYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtcHJpbWFyeSwubW9uc3Rlci1idXR0b24tb3V0bGluZS1zZWNvbmRhcnl7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtcG9zaXRpb246NTAlO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7Z2FwOi40cmVtO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MS41O291dGxpbmU6bm9uZTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzouMzc1cmVtIC43NXJlbTtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3dpZHRoOi13ZWJraXQtZmlsbC1hdmFpbGFibGU7d2lkdGg6LW1vei1hdmFpbGFibGU7d2lkdGg6c3RyZXRjaH0ubW9uc3Rlci1idXR0b24tb3V0bGluZS1zZWNvbmRhcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtdGVydGlhcnl7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7Z2FwOi40cmVtO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MS41O291dGxpbmU6bm9uZTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzouMzc1cmVtIC43NXJlbTtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3dpZHRoOi13ZWJraXQtZmlsbC1hdmFpbGFibGU7d2lkdGg6LW1vei1hdmFpbGFibGU7d2lkdGg6c3RyZXRjaH1idXR0b246YWN0aXZlLGJ1dHRvbjpob3Zlcntib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0yKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjhzLGNvbG9yIC4yNXMgLjA4MzMzMzMzMzNzfWJ1dHRvbjphY3RpdmV7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtb3V0bGluZSl9Lm1vbnN0ZXItYnV0dG9uLWJhciwubW9uc3Rlci1idXR0b24tZ3JvdXB7YWxpZ24tY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6c3RyZXRjaDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDpub3dyYXA7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59Lm1vbnN0ZXItYnV0dG9uLWdyb3Vwe2JveC1zaXppbmc6Ym9yZGVyLWJveDtnYXA6MDttYXJnaW46MXJlbSAwfS5tb25zdGVyLWJ1dHRvbi1ncm91cD46bm90KDpsYXN0LWNoaWxkKXttYXJnaW4tcmlnaHQ6Y2FsYyh2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkqLTEpfS5tb25zdGVyLWJ1dHRvbi1ncm91cCA6aG92ZXJ7Ym94LXNoYWRvdzpub25lfWJ1dHRvbjpmb2N1c3tvdXRsaW5lOjFweCBkYXNoZWQgdmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNCk7b3V0bGluZS1vZmZzZXQ6MnB4O3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW91dGxpbmUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6bGlnaHQpe2J1dHRvbjpmb2N1c3tvdXRsaW5lOjFweCBkYXNoZWQgdmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyk7b3V0bGluZS1vZmZzZXQ6MnB4O3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW91dGxpbmUpfX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17Ym94LXNpemluZzpib3JkZXItYm94O291dGxpbmU6bm9uZTt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXS5mbGV4e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fTpob3N0e2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmJsb2NrfTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1mb250LWZhbWlseTotYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCxcXFwiUXVpY2tzYW5kXFxcIixcXFwiU2Vnb2UgVUlcXFwiLFxcXCJSb2JvdG9cXFwiLFxcXCJPeHlnZW5cXFwiLFxcXCJVYnVudHVcXFwiLFxcXCJDYW50YXJlbGxcXFwiLFxcXCJGaXJhIFNhbnNcXFwiLFxcXCJEcm9pZCBTYW5zXFxcIixcXFwiSGVsdmV0aWNhIE5ldWVcXFwiLEFyaWFsLHNhbnMtc2VyaWYsXFxcIkFwcGxlIENvbG9yIEVtb2ppXFxcIixcXFwiU2Vnb2UgVUkgRW1vamlcXFwiLFxcXCJTZWdvZSBVSSBTeW1ib2xcXFwiOy0tbW9uc3Rlci1mb250LWZhbWlseS1tb25vc3BhY2U6XFxcIkNvbnNvbGFzXFxcIixcXFwiQ291cmllciBOZXdcXFwiLFxcXCJSb2JvdG8gTW9ub1xcXCIsXFxcIlNvdXJjZSBDb2RlIFByb1xcXCIsXFxcIkZpcmEgTW9ub1xcXCIsbW9ub3NwYWNlOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNil9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNik7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTIpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNik7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTIpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi00KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNik7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0zKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMik7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0yKTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNCk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi01KTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTMpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNCk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS02KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMyk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0yKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNCk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTUpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTYpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMTojODMzYWI0Oy0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0yOiNmZDFkMWQ7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTM6I2ZjYjA0NTstLW1vbnN0ZXItYm94LXNoYWRvdy0xOm5vbmU7LS1tb25zdGVyLWJveC1zaGFkb3ctMjotMXB4IDFweCAxMHB4IDFweCBoc2xhKDAsMCUsNzYlLC42MSk7LS1tb25zdGVyLXRleHQtc2hhZG93Om5vbmU7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC0xKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTYpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWhvdmVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtNik7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC0yKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItd2lkdGg6MnB4Oy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1zdHlsZTpzb2xpZDstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItcmFkaXVzOjA7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS01KTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItdGhlbWUtb24tY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItdGhlbWUtb24tYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi01KTstLW1vbnN0ZXItdGhlbWUtb2ZmLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtb2ZmLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci10aGVtZS1vbi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLXRoZW1lLW9uLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtb2ZmLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtb2ZmLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS01KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWJvcmRlci1zdHlsZTpzb2xpZDstLW1vbnN0ZXItYm9yZGVyLXdpZHRoOjNweDstLW1vbnN0ZXItYm9yZGVyLXJhZGl1czowOy0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZTotNHB4Oy0tbW9uc3Rlci16LWluZGV4LWRlZmF1bHQ6MDstLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lOjEwOy0tbW9uc3Rlci16LWluZGV4LWRyb3Bkb3duOjIwMDstLW1vbnN0ZXItei1pbmRleC1kcm9wZG93bi1vdmVybGF5OjIxMDstLW1vbnN0ZXItei1pbmRleC1zdGlja3k6MzAwOy0tbW9uc3Rlci16LWluZGV4LXN0aWNreS1vdmVybGF5OjMxMDstLW1vbnN0ZXItei1pbmRleC1maXhlZDo0MDA7LS1tb25zdGVyLXotaW5kZXgtZml4ZWQtb3ZlcmxheTo0MTA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtYmFja2Ryb3A6NTAwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLWJhY2tkcm9wLW92ZXJsYXk6NTEwOy0tbW9uc3Rlci16LWluZGV4LW9mZmNhbnZhczo2MDA7LS1tb25zdGVyLXotaW5kZXgtb2ZmY2FudmFzLW92ZXJsYXk6NjEwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsOjcwMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1vdmVybGF5OjcxMDstLW1vbnN0ZXItei1pbmRleC1wb3BvdmVyOjgwMDstLW1vbnN0ZXItei1pbmRleC1wb3BvdmVyLW92ZXJsYXk6ODEwOy0tbW9uc3Rlci16LWluZGV4LXRvb2x0aXA6ODAwOy0tbW9uc3Rlci16LWluZGV4LXRvb2x0aXAtb3ZlcmxheTo5MTA7LS1tb25zdGVyLXNwYWNlLTA6MDstLW1vbnN0ZXItc3BhY2UtMToycHg7LS1tb25zdGVyLXNwYWNlLTI6NHB4Oy0tbW9uc3Rlci1zcGFjZS0zOjZweDstLW1vbnN0ZXItc3BhY2UtNDoxMHB4Oy0tbW9uc3Rlci1zcGFjZS01OjE2cHg7LS1tb25zdGVyLXNwYWNlLTY6MjZweDstLW1vbnN0ZXItc3BhY2UtNzo0MnB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTA6NDgwcHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtNDo0ODBweDstLW1vbnN0ZXItYnJlYWtwb2ludC03Ojc2OHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTk6OTkycHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtMTI6MTIwMHB4Oy0tbW9uc3Rlci1kcmFnZ2VyLXdpZHRoOjJweDstLW1vbnN0ZXItZHJhZ2dlci1oYW5kbGUtd2lkdGg6NHB4Oy0tbW9uc3Rlci1kcmFnZ2VyLWhhbmRsZS1oZWlnaHQ6NTBweH1zcGFuLm1vbnN0ZXItZngtcmlwcGxle2FuaW1hdGlvbjptb25zdGVyLWZ4LXJpcHBsZSAuNnMgbGluZWFyO2JhY2tncm91bmQtY29sb3I6aHNsYSgwLDAlLDEwMCUsLjcpO2JvcmRlci1yYWRpdXM6NTAlO3Bvc2l0aW9uOmFic29sdXRlO3RyYW5zZm9ybTpzY2FsZSgwKX1Aa2V5ZnJhbWVzIG1vbnN0ZXItZngtcmlwcGxle3Rve29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoNCl9fS5tb25zdGVyLWJhZGdlLXByaW1hcnl7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLXByaW1hcnksLm1vbnN0ZXItYmFkZ2UtcHJpbWFyeS1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1wcmltYXJ5LXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2Utc2Vjb25kYXJ5e3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS1zZWNvbmRhcnksLm1vbnN0ZXItYmFkZ2Utc2Vjb25kYXJ5LXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1zZWNvbmRhcnktcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS10ZXJ0aWFyeXtwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2UtdGVydGlhcnksLm1vbnN0ZXItYmFkZ2UtdGVydGlhcnktcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS10ZXJ0aWFyeS1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLWRlc3RydWN0aXZle3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS1kZXN0cnVjdGl2ZSwubW9uc3Rlci1iYWRnZS1kZXN0cnVjdGl2ZS1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTEpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLWRlc3RydWN0aXZlLXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2Utc3VjY2Vzc3twYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2Utc3VjY2VzcywubW9uc3Rlci1iYWRnZS1zdWNjZXNzLXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMSk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTEpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLXN1Y2Nlc3MtcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS13YXJuaW5ne3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS13YXJuaW5nLC5tb25zdGVyLWJhZGdlLXdhcm5pbmctcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMSk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2Utd2FybmluZy1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLWVycm9ye3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS1lcnJvciwubW9uc3Rlci1iYWRnZS1lcnJvci1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTEpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLWVycm9yLXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTEtaW5mbzpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWljb24tdGVydGlhcnktMS1pbmZvOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS0xLWluZm86YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTEtaW5mbzpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMS1pbmZvOmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTEtaW5mbzpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyBjbGFzcz0nYmkgYmktaW5mby1jaXJjbGUnIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nbTguOTMgNi41ODgtMi4yOS4yODctLjA4Mi4zOC40NS4wODNjLjI5NC4wNy4zNTIuMTc2LjI4OC40NjlsLS43MzggMy40NjhjLS4xOTQuODk3LjEwNSAxLjMxOS44MDggMS4zMTkuNTQ1IDAgMS4xNzgtLjI1MiAxLjQ2NS0uNTk4bC4wODgtLjQxNmMtLjIuMTc2LS40OTIuMjQ2LS42ODYuMjQ2LS4yNzUgMC0uMzc1LS4xOTMtLjMwNC0uNTMzek05IDQuNWExIDEgMCAxIDEtMiAwIDEgMSAwIDAgMSAyIDAnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIGNsYXNzPSdiaSBiaS1pbmZvLWNpcmNsZScgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdtOC45MyA2LjU4OC0yLjI5LjI4Ny0uMDgyLjM4LjQ1LjA4M2MuMjk0LjA3LjM1Mi4xNzYuMjg4LjQ2OWwtLjczOCAzLjQ2OGMtLjE5NC44OTcuMTA1IDEuMzE5LjgwOCAxLjMxOS41NDUgMCAxLjE3OC0uMjUyIDEuNDY1LS41OThsLjA4OC0uNDE2Yy0uMi4xNzYtLjQ5Mi4yNDYtLjY4Ni4yNDYtLjI3NSAwLS4zNzUtLjE5My0uMzA0LS41MzN6TTkgNC41YTEgMSAwIDEgMS0yIDAgMSAxIDAgMCAxIDIgMCcvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0yLWluZm86YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTItaW5mbzpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMi1pbmZvOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWljb24tcHJpbWFyeS0yLWluZm86YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTItaW5mbzpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0yLWluZm86YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2JpIGJpLWluZm8tY2lyY2xlJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J204LjkzIDYuNTg4LTIuMjkuMjg3LS4wODIuMzguNDUuMDgzYy4yOTQuMDcuMzUyLjE3Ni4yODguNDY5bC0uNzM4IDMuNDY4Yy0uMTk0Ljg5Ny4xMDUgMS4zMTkuODA4IDEuMzE5LjU0NSAwIDEuMTc4LS4yNTIgMS40NjUtLjU5OGwuMDg4LS40MTZjLS4yLjE3Ni0uNDkyLjI0Ni0uNjg2LjI0Ni0uMjc1IDAtLjM3NS0uMTkzLS4zMDQtLjUzM3pNOSA0LjVhMSAxIDAgMSAxLTIgMCAxIDEgMCAwIDEgMiAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyBjbGFzcz0nYmkgYmktaW5mby1jaXJjbGUnIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nbTguOTMgNi41ODgtMi4yOS4yODctLjA4Mi4zOC40NS4wODNjLjI5NC4wNy4zNTIuMTc2LjI4OC40NjlsLS43MzggMy40NjhjLS4xOTQuODk3LjEwNSAxLjMxOS44MDggMS4zMTkuNTQ1IDAgMS4xNzgtLjI1MiAxLjQ2NS0uNTk4bC4wODgtLjQxNmMtLjIuMTc2LS40OTIuMjQ2LS42ODYuMjQ2LS4yNzUgMC0uMzc1LS4xOTMtLjMwNC0uNTMzek05IDQuNWExIDEgMCAxIDEtMiAwIDEgMSAwIDAgMSAyIDAnLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMy1pbmZvOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0zLWluZm86YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTMtaW5mbzpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMy1pbmZvOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0zLWluZm86YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMy1pbmZvOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIGNsYXNzPSdiaSBiaS1pbmZvLWNpcmNsZScgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdtOC45MyA2LjU4OC0yLjI5LjI4Ny0uMDgyLjM4LjQ1LjA4M2MuMjk0LjA3LjM1Mi4xNzYuMjg4LjQ2OWwtLjczOCAzLjQ2OGMtLjE5NC44OTcuMTA1IDEuMzE5LjgwOCAxLjMxOS41NDUgMCAxLjE3OC0uMjUyIDEuNDY1LS41OThsLjA4OC0uNDE2Yy0uMi4xNzYtLjQ5Mi4yNDYtLjY4Ni4yNDYtLjI3NSAwLS4zNzUtLjE5My0uMzA0LS41MzN6TTkgNC41YTEgMSAwIDEgMS0yIDAgMSAxIDAgMCAxIDIgMCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2JpIGJpLWluZm8tY2lyY2xlJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J204LjkzIDYuNTg4LTIuMjkuMjg3LS4wODIuMzguNDUuMDgzYy4yOTQuMDcuMzUyLjE3Ni4yODguNDY5bC0uNzM4IDMuNDY4Yy0uMTk0Ljg5Ny4xMDUgMS4zMTkuODA4IDEuMzE5LjU0NSAwIDEuMTc4LS4yNTIgMS40NjUtLjU5OGwuMDg4LS40MTZjLS4yLjE3Ni0uNDkyLjI0Ni0uNjg2LjI0Ni0uMjc1IDAtLjM3NS0uMTkzLS4zMDQtLjUzM3pNOSA0LjVhMSAxIDAgMSAxLTIgMCAxIDEgMCAwIDEgMiAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTQtaW5mbzpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWljb24tdGVydGlhcnktNC1pbmZvOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS00LWluZm86YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTQtaW5mbzpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktNC1pbmZvOmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTQtaW5mbzpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyBjbGFzcz0nYmkgYmktaW5mby1jaXJjbGUnIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nbTguOTMgNi41ODgtMi4yOS4yODctLjA4Mi4zOC40NS4wODNjLjI5NC4wNy4zNTIuMTc2LjI4OC40NjlsLS43MzggMy40NjhjLS4xOTQuODk3LjEwNSAxLjMxOS44MDggMS4zMTkuNTQ1IDAgMS4xNzgtLjI1MiAxLjQ2NS0uNTk4bC4wODgtLjQxNmMtLjIuMTc2LS40OTIuMjQ2LS42ODYuMjQ2LS4yNzUgMC0uMzc1LS4xOTMtLjMwNC0uNTMzek05IDQuNWExIDEgMCAxIDEtMiAwIDEgMSAwIDAgMSAyIDAnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIGNsYXNzPSdiaSBiaS1pbmZvLWNpcmNsZScgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdtOC45MyA2LjU4OC0yLjI5LjI4Ny0uMDgyLjM4LjQ1LjA4M2MuMjk0LjA3LjM1Mi4xNzYuMjg4LjQ2OWwtLjczOCAzLjQ2OGMtLjE5NC44OTcuMTA1IDEuMzE5LjgwOCAxLjMxOS41NDUgMCAxLjE3OC0uMjUyIDEuNDY1LS41OThsLjA4OC0uNDE2Yy0uMi4xNzYtLjQ5Mi4yNDYtLjY4Ni4yNDYtLjI3NSAwLS4zNzUtLjE5My0uMzA0LS41MzN6TTkgNC41YTEgMSAwIDEgMS0yIDAgMSAxIDAgMCAxIDIgMCcvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0xLW9uOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0xLW9uOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS0xLW9uOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWljb24tcHJpbWFyeS0xLW9uOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0xLW9uOmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTEtb246YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2JpIGJpLXRvZ2dsZS1vbicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTUgM2E1IDUgMCAwIDAgMCAxMGg2YTUgNSAwIDAgMCAwLTEwem02IDlhNCA0IDAgMSAxIDAtOCA0IDQgMCAwIDEgMCA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyBjbGFzcz0nYmkgYmktdG9nZ2xlLW9uJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNNSAzYTUgNSAwIDAgMCAwIDEwaDZhNSA1IDAgMCAwIDAtMTB6bTYgOWE0IDQgMCAxIDEgMC04IDQgNCAwIDAgMSAwIDgnLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMi1vbjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWljb24tdGVydGlhcnktMi1vbjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMi1vbjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMi1vbjpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMi1vbjpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0yLW9uOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIGNsYXNzPSdiaSBiaS10b2dnbGUtb24nIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J001IDNhNSA1IDAgMCAwIDAgMTBoNmE1IDUgMCAwIDAgMC0xMHptNiA5YTQgNCAwIDEgMSAwLTggNCA0IDAgMCAxIDAgOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2JpIGJpLXRvZ2dsZS1vbicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTUgM2E1IDUgMCAwIDAgMCAxMGg2YTUgNSAwIDAgMCAwLTEwem02IDlhNCA0IDAgMSAxIDAtOCA0IDQgMCAwIDEgMCA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTMtb246YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTMtb246YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTMtb246YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTMtb246YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTMtb246YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMy1vbjpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyBjbGFzcz0nYmkgYmktdG9nZ2xlLW9uJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNNSAzYTUgNSAwIDAgMCAwIDEwaDZhNSA1IDAgMCAwIDAtMTB6bTYgOWE0IDQgMCAxIDEgMC04IDQgNCAwIDAgMSAwIDgnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIGNsYXNzPSdiaSBiaS10b2dnbGUtb24nIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J001IDNhNSA1IDAgMCAwIDAgMTBoNmE1IDUgMCAwIDAgMC0xMHptNiA5YTQgNCAwIDEgMSAwLTggNCA0IDAgMCAxIDAgOCcvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS00LW9uOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS00LW9uOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS00LW9uOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWljb24tcHJpbWFyeS00LW9uOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS00LW9uOmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTQtb246YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2JpIGJpLXRvZ2dsZS1vbicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTUgM2E1IDUgMCAwIDAgMCAxMGg2YTUgNSAwIDAgMCAwLTEwem02IDlhNCA0IDAgMSAxIDAtOCA0IDQgMCAwIDEgMCA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyBjbGFzcz0nYmkgYmktdG9nZ2xlLW9uJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNNSAzYTUgNSAwIDAgMCAwIDEwaDZhNSA1IDAgMCAwIDAtMTB6bTYgOWE0IDQgMCAxIDEgMC04IDQgNCAwIDAgMSAwIDgnLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMS1vZmY6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTEtb2ZmOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS0xLW9mZjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMS1vZmY6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTEtb2ZmOmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTEtb2ZmOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J00xMSA0YTQgNCAwIDAgMSAwIDhIOGE1IDUgMCAwIDAgMi00IDUgNSAwIDAgMC0yLTR6bS02IDhhNCA0IDAgMSAxIDAtOCA0IDQgMCAwIDEgMCA4TTAgOGE1IDUgMCAwIDAgNSA1aDZhNSA1IDAgMCAwIDAtMTBINWE1IDUgMCAwIDAtNSA1Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNMTEgNGE0IDQgMCAwIDEgMCA4SDhhNSA1IDAgMCAwIDItNCA1IDUgMCAwIDAtMi00em0tNiA4YTQgNCAwIDEgMSAwLTggNCA0IDAgMCAxIDAgOE0wIDhhNSA1IDAgMCAwIDUgNWg2YTUgNSAwIDAgMCAwLTEwSDVhNSA1IDAgMCAwLTUgNScvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0yLW9mZjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWljb24tdGVydGlhcnktMi1vZmY6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTItb2ZmOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWljb24tcHJpbWFyeS0yLW9mZjpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMi1vZmY6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMi1vZmY6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTExIDRhNCA0IDAgMCAxIDAgOEg4YTUgNSAwIDAgMCAyLTQgNSA1IDAgMCAwLTItNHptLTYgOGE0IDQgMCAxIDEgMC04IDQgNCAwIDAgMSAwIDhNMCA4YTUgNSAwIDAgMCA1IDVoNmE1IDUgMCAwIDAgMC0xMEg1YTUgNSAwIDAgMC01IDUnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J00xMSA0YTQgNCAwIDAgMSAwIDhIOGE1IDUgMCAwIDAgMi00IDUgNSAwIDAgMC0yLTR6bS02IDhhNCA0IDAgMSAxIDAtOCA0IDQgMCAwIDEgMCA4TTAgOGE1IDUgMCAwIDAgNSA1aDZhNSA1IDAgMCAwIDAtMTBINWE1IDUgMCAwIDAtNSA1Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTMtb2ZmOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0zLW9mZjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMy1vZmY6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTMtb2ZmOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0zLW9mZjpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0zLW9mZjpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNMTEgNGE0IDQgMCAwIDEgMCA4SDhhNSA1IDAgMCAwIDItNCA1IDUgMCAwIDAtMi00em0tNiA4YTQgNCAwIDEgMSAwLTggNCA0IDAgMCAxIDAgOE0wIDhhNSA1IDAgMCAwIDUgNWg2YTUgNSAwIDAgMCAwLTEwSDVhNSA1IDAgMCAwLTUgNScvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTExIDRhNCA0IDAgMCAxIDAgOEg4YTUgNSAwIDAgMCAyLTQgNSA1IDAgMCAwLTItNHptLTYgOGE0IDQgMCAxIDEgMC04IDQgNCAwIDAgMSAwIDhNMCA4YTUgNSAwIDAgMCA1IDVoNmE1IDUgMCAwIDAgMC0xMEg1YTUgNSAwIDAgMC01IDUnLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktNC1vZmY6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTQtb2ZmOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS00LW9mZjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1pY29uLXByaW1hcnktNC1vZmY6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTQtb2ZmOmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTQtb2ZmOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J00xMSA0YTQgNCAwIDAgMSAwIDhIOGE1IDUgMCAwIDAgMi00IDUgNSAwIDAgMC0yLTR6bS02IDhhNCA0IDAgMSAxIDAtOCA0IDQgMCAwIDEgMCA4TTAgOGE1IDUgMCAwIDAgNSA1aDZhNSA1IDAgMCAwIDAtMTBINWE1IDUgMCAwIDAtNSA1Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNMTEgNGE0IDQgMCAwIDEgMCA4SDhhNSA1IDAgMCAwIDItNCA1IDUgMCAwIDAtMi00em0tNiA4YTQgNCAwIDEgMSAwLTggNCA0IDAgMCAxIDAgOE0wIDhhNSA1IDAgMCAwIDUgNWg2YTUgNSAwIDAgMCAwLTEwSDVhNSA1IDAgMCAwLTUgNScvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0xLXBvc2l0aXY6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTEtcG9zaXRpdjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMS1wb3NpdGl2OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWljb24tcHJpbWFyeS0xLXBvc2l0aXY6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTEtcG9zaXRpdjpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0xLXBvc2l0aXY6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdtMTAuOTcgNC45Ny0uMDIuMDIyLTMuNDczIDQuNDI1LTIuMDkzLTIuMDk0YS43NS43NSAwIDAgMC0xLjA2IDEuMDZMNi45NyAxMS4wM2EuNzUuNzUgMCAwIDAgMS4wNzktLjAybDMuOTkyLTQuOTlhLjc1Ljc1IDAgMCAwLTEuMDcxLTEuMDUnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nbTEwLjk3IDQuOTctLjAyLjAyMi0zLjQ3MyA0LjQyNS0yLjA5My0yLjA5NGEuNzUuNzUgMCAwIDAtMS4wNiAxLjA2TDYuOTcgMTEuMDNhLjc1Ljc1IDAgMCAwIDEuMDc5LS4wMmwzLjk5Mi00Ljk5YS43NS43NSAwIDAgMC0xLjA3MS0xLjA1Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTItcG9zaXRpdjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWljb24tdGVydGlhcnktMi1wb3NpdGl2OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS0yLXBvc2l0aXY6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTItcG9zaXRpdjpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMi1wb3NpdGl2OmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTItcG9zaXRpdjpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J20xMC45NyA0Ljk3LS4wMi4wMjItMy40NzMgNC40MjUtMi4wOTMtMi4wOTRhLjc1Ljc1IDAgMCAwLTEuMDYgMS4wNkw2Ljk3IDExLjAzYS43NS43NSAwIDAgMCAxLjA3OS0uMDJsMy45OTItNC45OWEuNzUuNzUgMCAwIDAtMS4wNzEtMS4wNScvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdtMTAuOTcgNC45Ny0uMDIuMDIyLTMuNDczIDQuNDI1LTIuMDkzLTIuMDk0YS43NS43NSAwIDAgMC0xLjA2IDEuMDZMNi45NyAxMS4wM2EuNzUuNzUgMCAwIDAgMS4wNzktLjAybDMuOTkyLTQuOTlhLjc1Ljc1IDAgMCAwLTEuMDcxLTEuMDUnLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMy1wb3NpdGl2OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0zLXBvc2l0aXY6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTMtcG9zaXRpdjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMy1wb3NpdGl2OmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0zLXBvc2l0aXY6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMy1wb3NpdGl2OmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nbTEwLjk3IDQuOTctLjAyLjAyMi0zLjQ3MyA0LjQyNS0yLjA5My0yLjA5NGEuNzUuNzUgMCAwIDAtMS4wNiAxLjA2TDYuOTcgMTEuMDNhLjc1Ljc1IDAgMCAwIDEuMDc5LS4wMmwzLjk5Mi00Ljk5YS43NS43NSAwIDAgMC0xLjA3MS0xLjA1Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J20xMC45NyA0Ljk3LS4wMi4wMjItMy40NzMgNC40MjUtMi4wOTMtMi4wOTRhLjc1Ljc1IDAgMCAwLTEuMDYgMS4wNkw2Ljk3IDExLjAzYS43NS43NSAwIDAgMCAxLjA3OS0uMDJsMy45OTItNC45OWEuNzUuNzUgMCAwIDAtMS4wNzEtMS4wNScvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS00LXBvc2l0aXY6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTQtcG9zaXRpdjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktNC1wb3NpdGl2OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWljb24tcHJpbWFyeS00LXBvc2l0aXY6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTQtcG9zaXRpdjpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS00LXBvc2l0aXY6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdtMTAuOTcgNC45Ny0uMDIuMDIyLTMuNDczIDQuNDI1LTIuMDkzLTIuMDk0YS43NS43NSAwIDAgMC0xLjA2IDEuMDZMNi45NyAxMS4wM2EuNzUuNzUgMCAwIDAgMS4wNzktLjAybDMuOTkyLTQuOTlhLjc1Ljc1IDAgMCAwLTEuMDcxLTEuMDUnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nbTEwLjk3IDQuOTctLjAyLjAyMi0zLjQ3MyA0LjQyNS0yLjA5My0yLjA5NGEuNzUuNzUgMCAwIDAtMS4wNiAxLjA2TDYuOTcgMTEuMDNhLjc1Ljc1IDAgMCAwIDEuMDc5LS4wMmwzLjk5Mi00Ljk5YS43NS43NSAwIDAgMC0xLjA3MS0xLjA1Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTEtbmVnYXRpdjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWljb24tdGVydGlhcnktMS1uZWdhdGl2OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS0xLW5lZ2F0aXY6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTEtbmVnYXRpdjpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMS1uZWdhdGl2OmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTEtbmVnYXRpdjpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J000LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMEw4IDcuMjkzbDIuNjQ2LTIuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC43MDcgOGwyLjY0NyAyLjY0NmEuNS41IDAgMCAxLS43MDguNzA4TDggOC43MDdsLTIuNjQ2IDIuNjQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4TDcuMjkzIDggNC42NDYgNS4zNTRhLjUuNSAwIDAgMSAwLS43MDgnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0yLW5lZ2F0aXY6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTItbmVnYXRpdjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMi1uZWdhdGl2OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWljb24tcHJpbWFyeS0yLW5lZ2F0aXY6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTItbmVnYXRpdjpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0yLW5lZ2F0aXY6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNC42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCA3LjI5M2wyLjY0Ni0yLjY0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsMi42NDcgMi42NDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC0yLjY0NiAyLjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4IDQuNjQ2IDUuMzU0YS41LjUgMCAwIDEgMC0uNzA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J000LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMEw4IDcuMjkzbDIuNjQ2LTIuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC43MDcgOGwyLjY0NyAyLjY0NmEuNS41IDAgMCAxLS43MDguNzA4TDggOC43MDdsLTIuNjQ2IDIuNjQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4TDcuMjkzIDggNC42NDYgNS4zNTRhLjUuNSAwIDAgMSAwLS43MDgnLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMy1uZWdhdGl2OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0zLW5lZ2F0aXY6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTMtbmVnYXRpdjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMy1uZWdhdGl2OmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0zLW5lZ2F0aXY6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMy1uZWdhdGl2OmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNC42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCA3LjI5M2wyLjY0Ni0yLjY0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsMi42NDcgMi42NDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC0yLjY0NiAyLjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4IDQuNjQ2IDUuMzU0YS41LjUgMCAwIDEgMC0uNzA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTQtbmVnYXRpdjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWljb24tdGVydGlhcnktNC1uZWdhdGl2OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS00LW5lZ2F0aXY6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTQtbmVnYXRpdjpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktNC1uZWdhdGl2OmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTQtbmVnYXRpdjpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J000LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMEw4IDcuMjkzbDIuNjQ2LTIuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC43MDcgOGwyLjY0NyAyLjY0NmEuNS41IDAgMCAxLS43MDguNzA4TDggOC43MDdsLTIuNjQ2IDIuNjQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4TDcuMjkzIDggNC42NDYgNS4zNTRhLjUuNSAwIDAgMSAwLS43MDgnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0xLXdhcm5pbmc6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTEtd2FybmluZzpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMS13YXJuaW5nOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWljb24tcHJpbWFyeS0xLXdhcm5pbmc6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTEtd2FybmluZzpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0xLXdhcm5pbmc6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNy4wMDIgMTFhMSAxIDAgMSAxIDIgMCAxIDEgMCAwIDEtMiAwTTcuMSA0Ljk5NWEuOTA1LjkwNSAwIDEgMSAxLjggMGwtLjM1IDMuNTA3YS41NTIuNTUyIDAgMCAxLTEuMSAweicvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNy4wMDIgMTFhMSAxIDAgMSAxIDIgMCAxIDEgMCAwIDEtMiAwTTcuMSA0Ljk5NWEuOTA1LjkwNSAwIDEgMSAxLjggMGwtLjM1IDMuNTA3YS41NTIuNTUyIDAgMCAxLTEuMSAweicvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0yLXdhcm5pbmc6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTItd2FybmluZzpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMi13YXJuaW5nOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWljb24tcHJpbWFyeS0yLXdhcm5pbmc6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTItd2FybmluZzpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0yLXdhcm5pbmc6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNy4wMDIgMTFhMSAxIDAgMSAxIDIgMCAxIDEgMCAwIDEtMiAwTTcuMSA0Ljk5NWEuOTA1LjkwNSAwIDEgMSAxLjggMGwtLjM1IDMuNTA3YS41NTIuNTUyIDAgMCAxLTEuMSAweicvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNy4wMDIgMTFhMSAxIDAgMSAxIDIgMCAxIDEgMCAwIDEtMiAwTTcuMSA0Ljk5NWEuOTA1LjkwNSAwIDEgMSAxLjggMGwtLjM1IDMuNTA3YS41NTIuNTUyIDAgMCAxLTEuMSAweicvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0zLXdhcm5pbmc6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTMtd2FybmluZzpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMy13YXJuaW5nOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWljb24tcHJpbWFyeS0zLXdhcm5pbmc6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTMtd2FybmluZzpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0zLXdhcm5pbmc6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNy4wMDIgMTFhMSAxIDAgMSAxIDIgMCAxIDEgMCAwIDEtMiAwTTcuMSA0Ljk5NWEuOTA1LjkwNSAwIDEgMSAxLjggMGwtLjM1IDMuNTA3YS41NTIuNTUyIDAgMCAxLTEuMSAweicvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNy4wMDIgMTFhMSAxIDAgMSAxIDIgMCAxIDEgMCAwIDEtMiAwTTcuMSA0Ljk5NWEuOTA1LjkwNSAwIDEgMSAxLjggMGwtLjM1IDMuNTA3YS41NTIuNTUyIDAgMCAxLTEuMSAweicvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS00LXdhcm5pbmc6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTQtd2FybmluZzpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktNC13YXJuaW5nOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWljb24tcHJpbWFyeS00LXdhcm5pbmc6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTQtd2FybmluZzpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS00LXdhcm5pbmc6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNy4wMDIgMTFhMSAxIDAgMSAxIDIgMCAxIDEgMCAwIDEtMiAwTTcuMSA0Ljk5NWEuOTA1LjkwNSAwIDEgMSAxLjggMGwtLjM1IDMuNTA3YS41NTIuNTUyIDAgMCAxLTEuMSAweicvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNy4wMDIgMTFhMSAxIDAgMSAxIDIgMCAxIDEgMCAwIDEtMiAwTTcuMSA0Ljk5NWEuOTA1LjkwNSAwIDEgMSAxLjggMGwtLjM1IDMuNTA3YS41NTIuNTUyIDAgMCAxLTEuMSAweicvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0xLW5ldXRyYWw6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTEtbmV1dHJhbDpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMS1uZXV0cmFsOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWljb24tcHJpbWFyeS0xLW5ldXRyYWw6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTEtbmV1dHJhbDpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0xLW5ldXRyYWw6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNy4wMDIgMTFhMSAxIDAgMSAxIDIgMCAxIDEgMCAwIDEtMiAwTTcuMSA0Ljk5NWEuOTA1LjkwNSAwIDEgMSAxLjggMGwtLjM1IDMuNTA3YS41NTIuNTUyIDAgMCAxLTEuMSAweicvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNy4wMDIgMTFhMSAxIDAgMSAxIDIgMCAxIDEgMCAwIDEtMiAwTTcuMSA0Ljk5NWEuOTA1LjkwNSAwIDEgMSAxLjggMGwtLjM1IDMuNTA3YS41NTIuNTUyIDAgMCAxLTEuMSAweicvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0yLW5ldXRyYWw6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTItbmV1dHJhbDpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMi1uZXV0cmFsOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWljb24tcHJpbWFyeS0yLW5ldXRyYWw6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTItbmV1dHJhbDpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0yLW5ldXRyYWw6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNy4wMDIgMTFhMSAxIDAgMSAxIDIgMCAxIDEgMCAwIDEtMiAwTTcuMSA0Ljk5NWEuOTA1LjkwNSAwIDEgMSAxLjggMGwtLjM1IDMuNTA3YS41NTIuNTUyIDAgMCAxLTEuMSAweicvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNy4wMDIgMTFhMSAxIDAgMSAxIDIgMCAxIDEgMCAwIDEtMiAwTTcuMSA0Ljk5NWEuOTA1LjkwNSAwIDEgMSAxLjggMGwtLjM1IDMuNTA3YS41NTIuNTUyIDAgMCAxLTEuMSAweicvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0zLW5ldXRyYWw6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTMtbmV1dHJhbDpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMy1uZXV0cmFsOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWljb24tcHJpbWFyeS0zLW5ldXRyYWw6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTMtbmV1dHJhbDpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0zLW5ldXRyYWw6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNy4wMDIgMTFhMSAxIDAgMSAxIDIgMCAxIDEgMCAwIDEtMiAwTTcuMSA0Ljk5NWEuOTA1LjkwNSAwIDEgMSAxLjggMGwtLjM1IDMuNTA3YS41NTIuNTUyIDAgMCAxLTEuMSAweicvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNy4wMDIgMTFhMSAxIDAgMSAxIDIgMCAxIDEgMCAwIDEtMiAwTTcuMSA0Ljk5NWEuOTA1LjkwNSAwIDEgMSAxLjggMGwtLjM1IDMuNTA3YS41NTIuNTUyIDAgMCAxLTEuMSAweicvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS00LW5ldXRyYWw6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTQtbmV1dHJhbDpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktNC1uZXV0cmFsOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWljb24tcHJpbWFyeS00LW5ldXRyYWw6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTQtbmV1dHJhbDpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS00LW5ldXRyYWw6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNy4wMDIgMTFhMSAxIDAgMSAxIDIgMCAxIDEgMCAwIDEtMiAwTTcuMSA0Ljk5NWEuOTA1LjkwNSAwIDEgMSAxLjggMGwtLjM1IDMuNTA3YS41NTIuNTUyIDAgMCAxLTEuMSAweicvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNy4wMDIgMTFhMSAxIDAgMSAxIDIgMCAxIDEgMCAwIDEtMiAwTTcuMSA0Ljk5NWEuOTA1LjkwNSAwIDEgMSAxLjggMGwtLjM1IDMuNTA3YS41NTIuNTUyIDAgMCAxLTEuMSAweicvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0xLXF1ZXN0aW9uOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0xLXF1ZXN0aW9uOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS0xLXF1ZXN0aW9uOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWljb24tcHJpbWFyeS0xLXF1ZXN0aW9uOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0xLXF1ZXN0aW9uOmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTEtcXVlc3Rpb246YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNS4yNTUgNS43ODZhLjIzNy4yMzcgMCAwIDAgLjI0MS4yNDdoLjgyNWMuMTM4IDAgLjI0OC0uMTEzLjI2Ni0uMjUuMDktLjY1Ni41NC0xLjEzNCAxLjM0Mi0xLjEzNC42ODYgMCAxLjMxNC4zNDMgMS4zMTQgMS4xNjggMCAuNjM1LS4zNzQuOTI3LS45NjUgMS4zNzEtLjY3My40ODktMS4yMDYgMS4wNi0xLjE2OCAxLjk4N2wuMDAzLjIxN2EuMjUuMjUgMCAwIDAgLjI1LjI0NmguODExYS4yNS4yNSAwIDAgMCAuMjUtLjI1di0uMTA1YzAtLjcxOC4yNzMtLjkyNyAxLjAxLTEuNDg2LjYwOS0uNDYzIDEuMjQ0LS45NzcgMS4yNDQtMi4wNTYgMC0xLjUxMS0xLjI3Ni0yLjI0MS0yLjY3My0yLjI0MS0xLjI2NyAwLTIuNjU1LjU5LTIuNzUgMi4yODZtMS41NTcgNS43NjNjMCAuNTMzLjQyNS45MjcgMS4wMS45MjcuNjA5IDAgMS4wMjgtLjM5NCAxLjAyOC0uOTI3IDAtLjU1Mi0uNDItLjk0LTEuMDI5LS45NC0uNTg0IDAtMS4wMDkuMzg4LTEuMDA5Ljk0Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J001LjI1NSA1Ljc4NmEuMjM3LjIzNyAwIDAgMCAuMjQxLjI0N2guODI1Yy4xMzggMCAuMjQ4LS4xMTMuMjY2LS4yNS4wOS0uNjU2LjU0LTEuMTM0IDEuMzQyLTEuMTM0LjY4NiAwIDEuMzE0LjM0MyAxLjMxNCAxLjE2OCAwIC42MzUtLjM3NC45MjctLjk2NSAxLjM3MS0uNjczLjQ4OS0xLjIwNiAxLjA2LTEuMTY4IDEuOTg3bC4wMDMuMjE3YS4yNS4yNSAwIDAgMCAuMjUuMjQ2aC44MTFhLjI1LjI1IDAgMCAwIC4yNS0uMjV2LS4xMDVjMC0uNzE4LjI3My0uOTI3IDEuMDEtMS40ODYuNjA5LS40NjMgMS4yNDQtLjk3NyAxLjI0NC0yLjA1NiAwLTEuNTExLTEuMjc2LTIuMjQxLTIuNjczLTIuMjQxLTEuMjY3IDAtMi42NTUuNTktMi43NSAyLjI4Nm0xLjU1NyA1Ljc2M2MwIC41MzMuNDI1LjkyNyAxLjAxLjkyNy42MDkgMCAxLjAyOC0uMzk0IDEuMDI4LS45MjcgMC0uNTUyLS40Mi0uOTQtMS4wMjktLjk0LS41ODQgMC0xLjAwOS4zODgtMS4wMDkuOTQnLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMi1xdWVzdGlvbjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWljb24tdGVydGlhcnktMi1xdWVzdGlvbjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMi1xdWVzdGlvbjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMi1xdWVzdGlvbjpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMi1xdWVzdGlvbjpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0yLXF1ZXN0aW9uOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTUuMjU1IDUuNzg2YS4yMzcuMjM3IDAgMCAwIC4yNDEuMjQ3aC44MjVjLjEzOCAwIC4yNDgtLjExMy4yNjYtLjI1LjA5LS42NTYuNTQtMS4xMzQgMS4zNDItMS4xMzQuNjg2IDAgMS4zMTQuMzQzIDEuMzE0IDEuMTY4IDAgLjYzNS0uMzc0LjkyNy0uOTY1IDEuMzcxLS42NzMuNDg5LTEuMjA2IDEuMDYtMS4xNjggMS45ODdsLjAwMy4yMTdhLjI1LjI1IDAgMCAwIC4yNS4yNDZoLjgxMWEuMjUuMjUgMCAwIDAgLjI1LS4yNXYtLjEwNWMwLS43MTguMjczLS45MjcgMS4wMS0xLjQ4Ni42MDktLjQ2MyAxLjI0NC0uOTc3IDEuMjQ0LTIuMDU2IDAtMS41MTEtMS4yNzYtMi4yNDEtMi42NzMtMi4yNDEtMS4yNjcgMC0yLjY1NS41OS0yLjc1IDIuMjg2bTEuNTU3IDUuNzYzYzAgLjUzMy40MjUuOTI3IDEuMDEuOTI3LjYwOSAwIDEuMDI4LS4zOTQgMS4wMjgtLjkyNyAwLS41NTItLjQyLS45NC0xLjAyOS0uOTQtLjU4NCAwLTEuMDA5LjM4OC0xLjAwOS45NCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNS4yNTUgNS43ODZhLjIzNy4yMzcgMCAwIDAgLjI0MS4yNDdoLjgyNWMuMTM4IDAgLjI0OC0uMTEzLjI2Ni0uMjUuMDktLjY1Ni41NC0xLjEzNCAxLjM0Mi0xLjEzNC42ODYgMCAxLjMxNC4zNDMgMS4zMTQgMS4xNjggMCAuNjM1LS4zNzQuOTI3LS45NjUgMS4zNzEtLjY3My40ODktMS4yMDYgMS4wNi0xLjE2OCAxLjk4N2wuMDAzLjIxN2EuMjUuMjUgMCAwIDAgLjI1LjI0NmguODExYS4yNS4yNSAwIDAgMCAuMjUtLjI1di0uMTA1YzAtLjcxOC4yNzMtLjkyNyAxLjAxLTEuNDg2LjYwOS0uNDYzIDEuMjQ0LS45NzcgMS4yNDQtMi4wNTYgMC0xLjUxMS0xLjI3Ni0yLjI0MS0yLjY3My0yLjI0MS0xLjI2NyAwLTIuNjU1LjU5LTIuNzUgMi4yODZtMS41NTcgNS43NjNjMCAuNTMzLjQyNS45MjcgMS4wMS45MjcuNjA5IDAgMS4wMjgtLjM5NCAxLjAyOC0uOTI3IDAtLjU1Mi0uNDItLjk0LTEuMDI5LS45NC0uNTg0IDAtMS4wMDkuMzg4LTEuMDA5Ljk0Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTMtcXVlc3Rpb246YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTMtcXVlc3Rpb246YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTMtcXVlc3Rpb246YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTMtcXVlc3Rpb246YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTMtcXVlc3Rpb246YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMy1xdWVzdGlvbjpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J001LjI1NSA1Ljc4NmEuMjM3LjIzNyAwIDAgMCAuMjQxLjI0N2guODI1Yy4xMzggMCAuMjQ4LS4xMTMuMjY2LS4yNS4wOS0uNjU2LjU0LTEuMTM0IDEuMzQyLTEuMTM0LjY4NiAwIDEuMzE0LjM0MyAxLjMxNCAxLjE2OCAwIC42MzUtLjM3NC45MjctLjk2NSAxLjM3MS0uNjczLjQ4OS0xLjIwNiAxLjA2LTEuMTY4IDEuOTg3bC4wMDMuMjE3YS4yNS4yNSAwIDAgMCAuMjUuMjQ2aC44MTFhLjI1LjI1IDAgMCAwIC4yNS0uMjV2LS4xMDVjMC0uNzE4LjI3My0uOTI3IDEuMDEtMS40ODYuNjA5LS40NjMgMS4yNDQtLjk3NyAxLjI0NC0yLjA1NiAwLTEuNTExLTEuMjc2LTIuMjQxLTIuNjczLTIuMjQxLTEuMjY3IDAtMi42NTUuNTktMi43NSAyLjI4Nm0xLjU1NyA1Ljc2M2MwIC41MzMuNDI1LjkyNyAxLjAxLjkyNy42MDkgMCAxLjAyOC0uMzk0IDEuMDI4LS45MjcgMC0uNTUyLS40Mi0uOTQtMS4wMjktLjk0LS41ODQgMC0xLjAwOS4zODgtMS4wMDkuOTQnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTUuMjU1IDUuNzg2YS4yMzcuMjM3IDAgMCAwIC4yNDEuMjQ3aC44MjVjLjEzOCAwIC4yNDgtLjExMy4yNjYtLjI1LjA5LS42NTYuNTQtMS4xMzQgMS4zNDItMS4xMzQuNjg2IDAgMS4zMTQuMzQzIDEuMzE0IDEuMTY4IDAgLjYzNS0uMzc0LjkyNy0uOTY1IDEuMzcxLS42NzMuNDg5LTEuMjA2IDEuMDYtMS4xNjggMS45ODdsLjAwMy4yMTdhLjI1LjI1IDAgMCAwIC4yNS4yNDZoLjgxMWEuMjUuMjUgMCAwIDAgLjI1LS4yNXYtLjEwNWMwLS43MTguMjczLS45MjcgMS4wMS0xLjQ4Ni42MDktLjQ2MyAxLjI0NC0uOTc3IDEuMjQ0LTIuMDU2IDAtMS41MTEtMS4yNzYtMi4yNDEtMi42NzMtMi4yNDEtMS4yNjcgMC0yLjY1NS41OS0yLjc1IDIuMjg2bTEuNTU3IDUuNzYzYzAgLjUzMy40MjUuOTI3IDEuMDEuOTI3LjYwOSAwIDEuMDI4LS4zOTQgMS4wMjgtLjkyNyAwLS41NTItLjQyLS45NC0xLjAyOS0uOTQtLjU4NCAwLTEuMDA5LjM4OC0xLjAwOS45NCcvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS00LXF1ZXN0aW9uOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS00LXF1ZXN0aW9uOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS00LXF1ZXN0aW9uOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWljb24tcHJpbWFyeS00LXF1ZXN0aW9uOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS00LXF1ZXN0aW9uOmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTQtcXVlc3Rpb246YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNS4yNTUgNS43ODZhLjIzNy4yMzcgMCAwIDAgLjI0MS4yNDdoLjgyNWMuMTM4IDAgLjI0OC0uMTEzLjI2Ni0uMjUuMDktLjY1Ni41NC0xLjEzNCAxLjM0Mi0xLjEzNC42ODYgMCAxLjMxNC4zNDMgMS4zMTQgMS4xNjggMCAuNjM1LS4zNzQuOTI3LS45NjUgMS4zNzEtLjY3My40ODktMS4yMDYgMS4wNi0xLjE2OCAxLjk4N2wuMDAzLjIxN2EuMjUuMjUgMCAwIDAgLjI1LjI0NmguODExYS4yNS4yNSAwIDAgMCAuMjUtLjI1di0uMTA1YzAtLjcxOC4yNzMtLjkyNyAxLjAxLTEuNDg2LjYwOS0uNDYzIDEuMjQ0LS45NzcgMS4yNDQtMi4wNTYgMC0xLjUxMS0xLjI3Ni0yLjI0MS0yLjY3My0yLjI0MS0xLjI2NyAwLTIuNjU1LjU5LTIuNzUgMi4yODZtMS41NTcgNS43NjNjMCAuNTMzLjQyNS45MjcgMS4wMS45MjcuNjA5IDAgMS4wMjgtLjM5NCAxLjAyOC0uOTI3IDAtLjU1Mi0uNDItLjk0LTEuMDI5LS45NC0uNTg0IDAtMS4wMDkuMzg4LTEuMDA5Ljk0Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J001LjI1NSA1Ljc4NmEuMjM3LjIzNyAwIDAgMCAuMjQxLjI0N2guODI1Yy4xMzggMCAuMjQ4LS4xMTMuMjY2LS4yNS4wOS0uNjU2LjU0LTEuMTM0IDEuMzQyLTEuMTM0LjY4NiAwIDEuMzE0LjM0MyAxLjMxNCAxLjE2OCAwIC42MzUtLjM3NC45MjctLjk2NSAxLjM3MS0uNjczLjQ4OS0xLjIwNiAxLjA2LTEuMTY4IDEuOTg3bC4wMDMuMjE3YS4yNS4yNSAwIDAgMCAuMjUuMjQ2aC44MTFhLjI1LjI1IDAgMCAwIC4yNS0uMjV2LS4xMDVjMC0uNzE4LjI3My0uOTI3IDEuMDEtMS40ODYuNjA5LS40NjMgMS4yNDQtLjk3NyAxLjI0NC0yLjA1NiAwLTEuNTExLTEuMjc2LTIuMjQxLTIuNjczLTIuMjQxLTEuMjY3IDAtMi42NTUuNTktMi43NSAyLjI4Nm0xLjU1NyA1Ljc2M2MwIC41MzMuNDI1LjkyNyAxLjAxLjkyNy42MDkgMCAxLjAyOC0uMzk0IDEuMDI4LS45MjcgMC0uNTUyLS40Mi0uOTQtMS4wMjktLjk0LS41ODQgMC0xLjAwOS4zODgtMS4wMDkuOTQnLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMS1wbHVzOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0xLXBsdXM6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTEtcGx1czpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMS1wbHVzOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0xLXBsdXM6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMS1wbHVzOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTggNGEuNS41IDAgMCAxIC41LjV2M2gzYS41LjUgMCAwIDEgMCAxaC0zdjNhLjUuNSAwIDAgMS0xIDB2LTNoLTNhLjUuNSAwIDAgMSAwLTFoM3YtM0EuNS41IDAgMCAxIDggNCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNOCA0YS41LjUgMCAwIDEgLjUuNXYzaDNhLjUuNSAwIDAgMSAwIDFoLTN2M2EuNS41IDAgMCAxLTEgMHYtM2gtM2EuNS41IDAgMCAxIDAtMWgzdi0zQS41LjUgMCAwIDEgOCA0Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTItcGx1czpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWljb24tdGVydGlhcnktMi1wbHVzOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS0yLXBsdXM6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTItcGx1czpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMi1wbHVzOmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTItcGx1czpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J004IDRhLjUuNSAwIDAgMSAuNS41djNoM2EuNS41IDAgMCAxIDAgMWgtM3YzYS41LjUgMCAwIDEtMSAwdi0zaC0zYS41LjUgMCAwIDEgMC0xaDN2LTNBLjUuNSAwIDAgMSA4IDQnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTggNGEuNS41IDAgMCAxIC41LjV2M2gzYS41LjUgMCAwIDEgMCAxaC0zdjNhLjUuNSAwIDAgMS0xIDB2LTNoLTNhLjUuNSAwIDAgMSAwLTFoM3YtM0EuNS41IDAgMCAxIDggNCcvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0zLXBsdXM6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTMtcGx1czpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMy1wbHVzOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWljb24tcHJpbWFyeS0zLXBsdXM6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTMtcGx1czpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0zLXBsdXM6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNOCA0YS41LjUgMCAwIDEgLjUuNXYzaDNhLjUuNSAwIDAgMSAwIDFoLTN2M2EuNS41IDAgMCAxLTEgMHYtM2gtM2EuNS41IDAgMCAxIDAtMWgzdi0zQS41LjUgMCAwIDEgOCA0Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J004IDRhLjUuNSAwIDAgMSAuNS41djNoM2EuNS41IDAgMCAxIDAgMWgtM3YzYS41LjUgMCAwIDEtMSAwdi0zaC0zYS41LjUgMCAwIDEgMC0xaDN2LTNBLjUuNSAwIDAgMSA4IDQnLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktNC1wbHVzOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS00LXBsdXM6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTQtcGx1czpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1pY29uLXByaW1hcnktNC1wbHVzOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS00LXBsdXM6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktNC1wbHVzOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTggNGEuNS41IDAgMCAxIC41LjV2M2gzYS41LjUgMCAwIDEgMCAxaC0zdjNhLjUuNSAwIDAgMS0xIDB2LTNoLTNhLjUuNSAwIDAgMSAwLTFoM3YtM0EuNS41IDAgMCAxIDggNCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNOCA0YS41LjUgMCAwIDEgLjUuNXYzaDNhLjUuNSAwIDAgMSAwIDFoLTN2M2EuNS41IDAgMCAxLTEgMHYtM2gtM2EuNS41IDAgMCAxIDAtMWgzdi0zQS41LjUgMCAwIDEgOCA0Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTEtZGFzaDpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWljb24tdGVydGlhcnktMS1kYXNoOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS0xLWRhc2g6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTEtZGFzaDpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMS1kYXNoOmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTEtZGFzaDpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J000IDhhLjUuNSAwIDAgMSAuNS0uNWg3YS41LjUgMCAwIDEgMCAxaC03QS41LjUgMCAwIDEgNCA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J000IDhhLjUuNSAwIDAgMSAuNS0uNWg3YS41LjUgMCAwIDEgMCAxaC03QS41LjUgMCAwIDEgNCA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTItZGFzaDpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWljb24tdGVydGlhcnktMi1kYXNoOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS0yLWRhc2g6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTItZGFzaDpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMi1kYXNoOmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTItZGFzaDpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J000IDhhLjUuNSAwIDAgMSAuNS0uNWg3YS41LjUgMCAwIDEgMCAxaC03QS41LjUgMCAwIDEgNCA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J000IDhhLjUuNSAwIDAgMSAuNS0uNWg3YS41LjUgMCAwIDEgMCAxaC03QS41LjUgMCAwIDEgNCA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTMtZGFzaDpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWljb24tdGVydGlhcnktMy1kYXNoOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS0zLWRhc2g6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTMtZGFzaDpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMy1kYXNoOmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTMtZGFzaDpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J000IDhhLjUuNSAwIDAgMSAuNS0uNWg3YS41LjUgMCAwIDEgMCAxaC03QS41LjUgMCAwIDEgNCA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J000IDhhLjUuNSAwIDAgMSAuNS0uNWg3YS41LjUgMCAwIDEgMCAxaC03QS41LjUgMCAwIDEgNCA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTQtZGFzaDpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWljb24tdGVydGlhcnktNC1kYXNoOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS00LWRhc2g6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTQtZGFzaDpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktNC1kYXNoOmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTQtZGFzaDpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J000IDhhLjUuNSAwIDAgMSAuNS0uNWg3YS41LjUgMCAwIDEgMCAxaC03QS41LjUgMCAwIDEgNCA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J000IDhhLjUuNSAwIDAgMSAuNS0uNWg3YS41LjUgMCAwIDEgMCAxaC03QS41LjUgMCAwIDEgNCA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTEtZ2VhcjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWljb24tdGVydGlhcnktMS1nZWFyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS0xLWdlYXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTEtZ2VhcjpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMS1nZWFyOmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTEtZ2VhcjpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCA0Ljc1NGEzLjI0NiAzLjI0NiAwIDEgMCAwIDYuNDkyIDMuMjQ2IDMuMjQ2IDAgMCAwIDAtNi40OTJNNS43NTQgOGEyLjI0NiAyLjI0NiAwIDEgMSA0LjQ5MiAwIDIuMjQ2IDIuMjQ2IDAgMCAxLTQuNDkyIDAnLyUzRSUzQ3BhdGggZD0nTTkuNzk2IDEuMzQzYy0uNTI3LTEuNzktMy4wNjUtMS43OS0zLjU5MiAwbC0uMDk0LjMxOWEuODczLjg3MyAwIDAgMS0xLjI1NS41MmwtLjI5Mi0uMTZjLTEuNjQtLjg5Mi0zLjQzMy45MDItMi41NCAyLjU0MWwuMTU5LjI5MmEuODczLjg3MyAwIDAgMS0uNTIgMS4yNTVsLS4zMTkuMDk0Yy0xLjc5LjUyNy0xLjc5IDMuMDY1IDAgMy41OTJsLjMxOS4wOTRhLjg3My44NzMgMCAwIDEgLjUyIDEuMjU1bC0uMTYuMjkyYy0uODkyIDEuNjQuOTAxIDMuNDM0IDIuNTQxIDIuNTRsLjI5Mi0uMTU5YS44NzMuODczIDAgMCAxIDEuMjU1LjUybC4wOTQuMzE5Yy41MjcgMS43OSAzLjA2NSAxLjc5IDMuNTkyIDBsLjA5NC0uMzE5YS44NzMuODczIDAgMCAxIDEuMjU1LS41MmwuMjkyLjE2YzEuNjQuODkzIDMuNDM0LS45MDIgMi41NC0yLjU0MWwtLjE1OS0uMjkyYS44NzMuODczIDAgMCAxIC41Mi0xLjI1NWwuMzE5LS4wOTRjMS43OS0uNTI3IDEuNzktMy4wNjUgMC0zLjU5MmwtLjMxOS0uMDk0YS44NzMuODczIDAgMCAxLS41Mi0xLjI1NWwuMTYtLjI5MmMuODkzLTEuNjQtLjkwMi0zLjQzMy0yLjU0MS0yLjU0bC0uMjkyLjE1OWEuODczLjg3MyAwIDAgMS0xLjI1NS0uNTJ6bS0yLjYzMy4yODNjLjI0Ni0uODM1IDEuNDI4LS44MzUgMS42NzQgMGwuMDk0LjMxOWExLjg3MyAxLjg3MyAwIDAgMCAyLjY5MyAxLjExNWwuMjkxLS4xNmMuNzY0LS40MTUgMS42LjQyIDEuMTg0IDEuMTg1bC0uMTU5LjI5MmExLjg3MyAxLjg3MyAwIDAgMCAxLjExNiAyLjY5MmwuMzE4LjA5NGMuODM1LjI0Ni44MzUgMS40MjggMCAxLjY3NGwtLjMxOS4wOTRhMS44NzMgMS44NzMgMCAwIDAtMS4xMTUgMi42OTNsLjE2LjI5MWMuNDE1Ljc2NC0uNDIgMS42LTEuMTg1IDEuMTg0bC0uMjkxLS4xNTlhMS44NzMgMS44NzMgMCAwIDAtMi42OTMgMS4xMTZsLS4wOTQuMzE4Yy0uMjQ2LjgzNS0xLjQyOC44MzUtMS42NzQgMGwtLjA5NC0uMzE5YTEuODczIDEuODczIDAgMCAwLTIuNjkyLTEuMTE1bC0uMjkyLjE2Yy0uNzY0LjQxNS0xLjYtLjQyLTEuMTg0LTEuMTg1bC4xNTktLjI5MUExLjg3MyAxLjg3MyAwIDAgMCAxLjk0NSA4LjkzbC0uMzE5LS4wOTRjLS44MzUtLjI0Ni0uODM1LTEuNDI4IDAtMS42NzRsLjMxOS0uMDk0QTEuODczIDEuODczIDAgMCAwIDMuMDYgNC4zNzdsLS4xNi0uMjkyYy0uNDE1LS43NjQuNDItMS42IDEuMTg1LTEuMTg0bC4yOTIuMTU5YTEuODczIDEuODczIDAgMCAwIDIuNjkyLTEuMTE1eicvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggNC43NTRhMy4yNDYgMy4yNDYgMCAxIDAgMCA2LjQ5MiAzLjI0NiAzLjI0NiAwIDAgMCAwLTYuNDkyTTUuNzU0IDhhMi4yNDYgMi4yNDYgMCAxIDEgNC40OTIgMCAyLjI0NiAyLjI0NiAwIDAgMS00LjQ5MiAwJy8lM0UlM0NwYXRoIGQ9J005Ljc5NiAxLjM0M2MtLjUyNy0xLjc5LTMuMDY1LTEuNzktMy41OTIgMGwtLjA5NC4zMTlhLjg3My44NzMgMCAwIDEtMS4yNTUuNTJsLS4yOTItLjE2Yy0xLjY0LS44OTItMy40MzMuOTAyLTIuNTQgMi41NDFsLjE1OS4yOTJhLjg3My44NzMgMCAwIDEtLjUyIDEuMjU1bC0uMzE5LjA5NGMtMS43OS41MjctMS43OSAzLjA2NSAwIDMuNTkybC4zMTkuMDk0YS44NzMuODczIDAgMCAxIC41MiAxLjI1NWwtLjE2LjI5MmMtLjg5MiAxLjY0LjkwMSAzLjQzNCAyLjU0MSAyLjU0bC4yOTItLjE1OWEuODczLjg3MyAwIDAgMSAxLjI1NS41MmwuMDk0LjMxOWMuNTI3IDEuNzkgMy4wNjUgMS43OSAzLjU5MiAwbC4wOTQtLjMxOWEuODczLjg3MyAwIDAgMSAxLjI1NS0uNTJsLjI5Mi4xNmMxLjY0Ljg5MyAzLjQzNC0uOTAyIDIuNTQtMi41NDFsLS4xNTktLjI5MmEuODczLjg3MyAwIDAgMSAuNTItMS4yNTVsLjMxOS0uMDk0YzEuNzktLjUyNyAxLjc5LTMuMDY1IDAtMy41OTJsLS4zMTktLjA5NGEuODczLjg3MyAwIDAgMS0uNTItMS4yNTVsLjE2LS4yOTJjLjg5My0xLjY0LS45MDItMy40MzMtMi41NDEtMi41NGwtLjI5Mi4xNTlhLjg3My44NzMgMCAwIDEtMS4yNTUtLjUyem0tMi42MzMuMjgzYy4yNDYtLjgzNSAxLjQyOC0uODM1IDEuNjc0IDBsLjA5NC4zMTlhMS44NzMgMS44NzMgMCAwIDAgMi42OTMgMS4xMTVsLjI5MS0uMTZjLjc2NC0uNDE1IDEuNi40MiAxLjE4NCAxLjE4NWwtLjE1OS4yOTJhMS44NzMgMS44NzMgMCAwIDAgMS4xMTYgMi42OTJsLjMxOC4wOTRjLjgzNS4yNDYuODM1IDEuNDI4IDAgMS42NzRsLS4zMTkuMDk0YTEuODczIDEuODczIDAgMCAwLTEuMTE1IDIuNjkzbC4xNi4yOTFjLjQxNS43NjQtLjQyIDEuNi0xLjE4NSAxLjE4NGwtLjI5MS0uMTU5YTEuODczIDEuODczIDAgMCAwLTIuNjkzIDEuMTE2bC0uMDk0LjMxOGMtLjI0Ni44MzUtMS40MjguODM1LTEuNjc0IDBsLS4wOTQtLjMxOWExLjg3MyAxLjg3MyAwIDAgMC0yLjY5Mi0xLjExNWwtLjI5Mi4xNmMtLjc2NC40MTUtMS42LS40Mi0xLjE4NC0xLjE4NWwuMTU5LS4yOTFBMS44NzMgMS44NzMgMCAwIDAgMS45NDUgOC45M2wtLjMxOS0uMDk0Yy0uODM1LS4yNDYtLjgzNS0xLjQyOCAwLTEuNjc0bC4zMTktLjA5NEExLjg3MyAxLjg3MyAwIDAgMCAzLjA2IDQuMzc3bC0uMTYtLjI5MmMtLjQxNS0uNzY0LjQyLTEuNiAxLjE4NS0xLjE4NGwuMjkyLjE1OWExLjg3MyAxLjg3MyAwIDAgMCAyLjY5Mi0xLjExNXonLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMi1nZWFyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0yLWdlYXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTItZ2VhcjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMi1nZWFyOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0yLWdlYXI6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMi1nZWFyOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDQuNzU0YTMuMjQ2IDMuMjQ2IDAgMSAwIDAgNi40OTIgMy4yNDYgMy4yNDYgMCAwIDAgMC02LjQ5Mk01Ljc1NCA4YTIuMjQ2IDIuMjQ2IDAgMSAxIDQuNDkyIDAgMi4yNDYgMi4yNDYgMCAwIDEtNC40OTIgMCcvJTNFJTNDcGF0aCBkPSdNOS43OTYgMS4zNDNjLS41MjctMS43OS0zLjA2NS0xLjc5LTMuNTkyIDBsLS4wOTQuMzE5YS44NzMuODczIDAgMCAxLTEuMjU1LjUybC0uMjkyLS4xNmMtMS42NC0uODkyLTMuNDMzLjkwMi0yLjU0IDIuNTQxbC4xNTkuMjkyYS44NzMuODczIDAgMCAxLS41MiAxLjI1NWwtLjMxOS4wOTRjLTEuNzkuNTI3LTEuNzkgMy4wNjUgMCAzLjU5MmwuMzE5LjA5NGEuODczLjg3MyAwIDAgMSAuNTIgMS4yNTVsLS4xNi4yOTJjLS44OTIgMS42NC45MDEgMy40MzQgMi41NDEgMi41NGwuMjkyLS4xNTlhLjg3My44NzMgMCAwIDEgMS4yNTUuNTJsLjA5NC4zMTljLjUyNyAxLjc5IDMuMDY1IDEuNzkgMy41OTIgMGwuMDk0LS4zMTlhLjg3My44NzMgMCAwIDEgMS4yNTUtLjUybC4yOTIuMTZjMS42NC44OTMgMy40MzQtLjkwMiAyLjU0LTIuNTQxbC0uMTU5LS4yOTJhLjg3My44NzMgMCAwIDEgLjUyLTEuMjU1bC4zMTktLjA5NGMxLjc5LS41MjcgMS43OS0zLjA2NSAwLTMuNTkybC0uMzE5LS4wOTRhLjg3My44NzMgMCAwIDEtLjUyLTEuMjU1bC4xNi0uMjkyYy44OTMtMS42NC0uOTAyLTMuNDMzLTIuNTQxLTIuNTRsLS4yOTIuMTU5YS44NzMuODczIDAgMCAxLTEuMjU1LS41MnptLTIuNjMzLjI4M2MuMjQ2LS44MzUgMS40MjgtLjgzNSAxLjY3NCAwbC4wOTQuMzE5YTEuODczIDEuODczIDAgMCAwIDIuNjkzIDEuMTE1bC4yOTEtLjE2Yy43NjQtLjQxNSAxLjYuNDIgMS4xODQgMS4xODVsLS4xNTkuMjkyYTEuODczIDEuODczIDAgMCAwIDEuMTE2IDIuNjkybC4zMTguMDk0Yy44MzUuMjQ2LjgzNSAxLjQyOCAwIDEuNjc0bC0uMzE5LjA5NGExLjg3MyAxLjg3MyAwIDAgMC0xLjExNSAyLjY5M2wuMTYuMjkxYy40MTUuNzY0LS40MiAxLjYtMS4xODUgMS4xODRsLS4yOTEtLjE1OWExLjg3MyAxLjg3MyAwIDAgMC0yLjY5MyAxLjExNmwtLjA5NC4zMThjLS4yNDYuODM1LTEuNDI4LjgzNS0xLjY3NCAwbC0uMDk0LS4zMTlhMS44NzMgMS44NzMgMCAwIDAtMi42OTItMS4xMTVsLS4yOTIuMTZjLS43NjQuNDE1LTEuNi0uNDItMS4xODQtMS4xODVsLjE1OS0uMjkxQTEuODczIDEuODczIDAgMCAwIDEuOTQ1IDguOTNsLS4zMTktLjA5NGMtLjgzNS0uMjQ2LS44MzUtMS40MjggMC0xLjY3NGwuMzE5LS4wOTRBMS44NzMgMS44NzMgMCAwIDAgMy4wNiA0LjM3N2wtLjE2LS4yOTJjLS40MTUtLjc2NC40Mi0xLjYgMS4xODUtMS4xODRsLjI5Mi4xNTlhMS44NzMgMS44NzMgMCAwIDAgMi42OTItMS4xMTV6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCA0Ljc1NGEzLjI0NiAzLjI0NiAwIDEgMCAwIDYuNDkyIDMuMjQ2IDMuMjQ2IDAgMCAwIDAtNi40OTJNNS43NTQgOGEyLjI0NiAyLjI0NiAwIDEgMSA0LjQ5MiAwIDIuMjQ2IDIuMjQ2IDAgMCAxLTQuNDkyIDAnLyUzRSUzQ3BhdGggZD0nTTkuNzk2IDEuMzQzYy0uNTI3LTEuNzktMy4wNjUtMS43OS0zLjU5MiAwbC0uMDk0LjMxOWEuODczLjg3MyAwIDAgMS0xLjI1NS41MmwtLjI5Mi0uMTZjLTEuNjQtLjg5Mi0zLjQzMy45MDItMi41NCAyLjU0MWwuMTU5LjI5MmEuODczLjg3MyAwIDAgMS0uNTIgMS4yNTVsLS4zMTkuMDk0Yy0xLjc5LjUyNy0xLjc5IDMuMDY1IDAgMy41OTJsLjMxOS4wOTRhLjg3My44NzMgMCAwIDEgLjUyIDEuMjU1bC0uMTYuMjkyYy0uODkyIDEuNjQuOTAxIDMuNDM0IDIuNTQxIDIuNTRsLjI5Mi0uMTU5YS44NzMuODczIDAgMCAxIDEuMjU1LjUybC4wOTQuMzE5Yy41MjcgMS43OSAzLjA2NSAxLjc5IDMuNTkyIDBsLjA5NC0uMzE5YS44NzMuODczIDAgMCAxIDEuMjU1LS41MmwuMjkyLjE2YzEuNjQuODkzIDMuNDM0LS45MDIgMi41NC0yLjU0MWwtLjE1OS0uMjkyYS44NzMuODczIDAgMCAxIC41Mi0xLjI1NWwuMzE5LS4wOTRjMS43OS0uNTI3IDEuNzktMy4wNjUgMC0zLjU5MmwtLjMxOS0uMDk0YS44NzMuODczIDAgMCAxLS41Mi0xLjI1NWwuMTYtLjI5MmMuODkzLTEuNjQtLjkwMi0zLjQzMy0yLjU0MS0yLjU0bC0uMjkyLjE1OWEuODczLjg3MyAwIDAgMS0xLjI1NS0uNTJ6bS0yLjYzMy4yODNjLjI0Ni0uODM1IDEuNDI4LS44MzUgMS42NzQgMGwuMDk0LjMxOWExLjg3MyAxLjg3MyAwIDAgMCAyLjY5MyAxLjExNWwuMjkxLS4xNmMuNzY0LS40MTUgMS42LjQyIDEuMTg0IDEuMTg1bC0uMTU5LjI5MmExLjg3MyAxLjg3MyAwIDAgMCAxLjExNiAyLjY5MmwuMzE4LjA5NGMuODM1LjI0Ni44MzUgMS40MjggMCAxLjY3NGwtLjMxOS4wOTRhMS44NzMgMS44NzMgMCAwIDAtMS4xMTUgMi42OTNsLjE2LjI5MWMuNDE1Ljc2NC0uNDIgMS42LTEuMTg1IDEuMTg0bC0uMjkxLS4xNTlhMS44NzMgMS44NzMgMCAwIDAtMi42OTMgMS4xMTZsLS4wOTQuMzE4Yy0uMjQ2LjgzNS0xLjQyOC44MzUtMS42NzQgMGwtLjA5NC0uMzE5YTEuODczIDEuODczIDAgMCAwLTIuNjkyLTEuMTE1bC0uMjkyLjE2Yy0uNzY0LjQxNS0xLjYtLjQyLTEuMTg0LTEuMTg1bC4xNTktLjI5MUExLjg3MyAxLjg3MyAwIDAgMCAxLjk0NSA4LjkzbC0uMzE5LS4wOTRjLS44MzUtLjI0Ni0uODM1LTEuNDI4IDAtMS42NzRsLjMxOS0uMDk0QTEuODczIDEuODczIDAgMCAwIDMuMDYgNC4zNzdsLS4xNi0uMjkyYy0uNDE1LS43NjQuNDItMS42IDEuMTg1LTEuMTg0bC4yOTIuMTU5YTEuODczIDEuODczIDAgMCAwIDIuNjkyLTEuMTE1eicvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0zLWdlYXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTMtZ2VhcjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMy1nZWFyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWljb24tcHJpbWFyeS0zLWdlYXI6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTMtZ2VhcjpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0zLWdlYXI6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggNC43NTRhMy4yNDYgMy4yNDYgMCAxIDAgMCA2LjQ5MiAzLjI0NiAzLjI0NiAwIDAgMCAwLTYuNDkyTTUuNzU0IDhhMi4yNDYgMi4yNDYgMCAxIDEgNC40OTIgMCAyLjI0NiAyLjI0NiAwIDAgMS00LjQ5MiAwJy8lM0UlM0NwYXRoIGQ9J005Ljc5NiAxLjM0M2MtLjUyNy0xLjc5LTMuMDY1LTEuNzktMy41OTIgMGwtLjA5NC4zMTlhLjg3My44NzMgMCAwIDEtMS4yNTUuNTJsLS4yOTItLjE2Yy0xLjY0LS44OTItMy40MzMuOTAyLTIuNTQgMi41NDFsLjE1OS4yOTJhLjg3My44NzMgMCAwIDEtLjUyIDEuMjU1bC0uMzE5LjA5NGMtMS43OS41MjctMS43OSAzLjA2NSAwIDMuNTkybC4zMTkuMDk0YS44NzMuODczIDAgMCAxIC41MiAxLjI1NWwtLjE2LjI5MmMtLjg5MiAxLjY0LjkwMSAzLjQzNCAyLjU0MSAyLjU0bC4yOTItLjE1OWEuODczLjg3MyAwIDAgMSAxLjI1NS41MmwuMDk0LjMxOWMuNTI3IDEuNzkgMy4wNjUgMS43OSAzLjU5MiAwbC4wOTQtLjMxOWEuODczLjg3MyAwIDAgMSAxLjI1NS0uNTJsLjI5Mi4xNmMxLjY0Ljg5MyAzLjQzNC0uOTAyIDIuNTQtMi41NDFsLS4xNTktLjI5MmEuODczLjg3MyAwIDAgMSAuNTItMS4yNTVsLjMxOS0uMDk0YzEuNzktLjUyNyAxLjc5LTMuMDY1IDAtMy41OTJsLS4zMTktLjA5NGEuODczLjg3MyAwIDAgMS0uNTItMS4yNTVsLjE2LS4yOTJjLjg5My0xLjY0LS45MDItMy40MzMtMi41NDEtMi41NGwtLjI5Mi4xNTlhLjg3My44NzMgMCAwIDEtMS4yNTUtLjUyem0tMi42MzMuMjgzYy4yNDYtLjgzNSAxLjQyOC0uODM1IDEuNjc0IDBsLjA5NC4zMTlhMS44NzMgMS44NzMgMCAwIDAgMi42OTMgMS4xMTVsLjI5MS0uMTZjLjc2NC0uNDE1IDEuNi40MiAxLjE4NCAxLjE4NWwtLjE1OS4yOTJhMS44NzMgMS44NzMgMCAwIDAgMS4xMTYgMi42OTJsLjMxOC4wOTRjLjgzNS4yNDYuODM1IDEuNDI4IDAgMS42NzRsLS4zMTkuMDk0YTEuODczIDEuODczIDAgMCAwLTEuMTE1IDIuNjkzbC4xNi4yOTFjLjQxNS43NjQtLjQyIDEuNi0xLjE4NSAxLjE4NGwtLjI5MS0uMTU5YTEuODczIDEuODczIDAgMCAwLTIuNjkzIDEuMTE2bC0uMDk0LjMxOGMtLjI0Ni44MzUtMS40MjguODM1LTEuNjc0IDBsLS4wOTQtLjMxOWExLjg3MyAxLjg3MyAwIDAgMC0yLjY5Mi0xLjExNWwtLjI5Mi4xNmMtLjc2NC40MTUtMS42LS40Mi0xLjE4NC0xLjE4NWwuMTU5LS4yOTFBMS44NzMgMS44NzMgMCAwIDAgMS45NDUgOC45M2wtLjMxOS0uMDk0Yy0uODM1LS4yNDYtLjgzNS0xLjQyOCAwLTEuNjc0bC4zMTktLjA5NEExLjg3MyAxLjg3MyAwIDAgMCAzLjA2IDQuMzc3bC0uMTYtLjI5MmMtLjQxNS0uNzY0LjQyLTEuNiAxLjE4NS0xLjE4NGwuMjkyLjE1OWExLjg3MyAxLjg3MyAwIDAgMCAyLjY5Mi0xLjExNXonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDQuNzU0YTMuMjQ2IDMuMjQ2IDAgMSAwIDAgNi40OTIgMy4yNDYgMy4yNDYgMCAwIDAgMC02LjQ5Mk01Ljc1NCA4YTIuMjQ2IDIuMjQ2IDAgMSAxIDQuNDkyIDAgMi4yNDYgMi4yNDYgMCAwIDEtNC40OTIgMCcvJTNFJTNDcGF0aCBkPSdNOS43OTYgMS4zNDNjLS41MjctMS43OS0zLjA2NS0xLjc5LTMuNTkyIDBsLS4wOTQuMzE5YS44NzMuODczIDAgMCAxLTEuMjU1LjUybC0uMjkyLS4xNmMtMS42NC0uODkyLTMuNDMzLjkwMi0yLjU0IDIuNTQxbC4xNTkuMjkyYS44NzMuODczIDAgMCAxLS41MiAxLjI1NWwtLjMxOS4wOTRjLTEuNzkuNTI3LTEuNzkgMy4wNjUgMCAzLjU5MmwuMzE5LjA5NGEuODczLjg3MyAwIDAgMSAuNTIgMS4yNTVsLS4xNi4yOTJjLS44OTIgMS42NC45MDEgMy40MzQgMi41NDEgMi41NGwuMjkyLS4xNTlhLjg3My44NzMgMCAwIDEgMS4yNTUuNTJsLjA5NC4zMTljLjUyNyAxLjc5IDMuMDY1IDEuNzkgMy41OTIgMGwuMDk0LS4zMTlhLjg3My44NzMgMCAwIDEgMS4yNTUtLjUybC4yOTIuMTZjMS42NC44OTMgMy40MzQtLjkwMiAyLjU0LTIuNTQxbC0uMTU5LS4yOTJhLjg3My44NzMgMCAwIDEgLjUyLTEuMjU1bC4zMTktLjA5NGMxLjc5LS41MjcgMS43OS0zLjA2NSAwLTMuNTkybC0uMzE5LS4wOTRhLjg3My44NzMgMCAwIDEtLjUyLTEuMjU1bC4xNi0uMjkyYy44OTMtMS42NC0uOTAyLTMuNDMzLTIuNTQxLTIuNTRsLS4yOTIuMTU5YS44NzMuODczIDAgMCAxLTEuMjU1LS41MnptLTIuNjMzLjI4M2MuMjQ2LS44MzUgMS40MjgtLjgzNSAxLjY3NCAwbC4wOTQuMzE5YTEuODczIDEuODczIDAgMCAwIDIuNjkzIDEuMTE1bC4yOTEtLjE2Yy43NjQtLjQxNSAxLjYuNDIgMS4xODQgMS4xODVsLS4xNTkuMjkyYTEuODczIDEuODczIDAgMCAwIDEuMTE2IDIuNjkybC4zMTguMDk0Yy44MzUuMjQ2LjgzNSAxLjQyOCAwIDEuNjc0bC0uMzE5LjA5NGExLjg3MyAxLjg3MyAwIDAgMC0xLjExNSAyLjY5M2wuMTYuMjkxYy40MTUuNzY0LS40MiAxLjYtMS4xODUgMS4xODRsLS4yOTEtLjE1OWExLjg3MyAxLjg3MyAwIDAgMC0yLjY5MyAxLjExNmwtLjA5NC4zMThjLS4yNDYuODM1LTEuNDI4LjgzNS0xLjY3NCAwbC0uMDk0LS4zMTlhMS44NzMgMS44NzMgMCAwIDAtMi42OTItMS4xMTVsLS4yOTIuMTZjLS43NjQuNDE1LTEuNi0uNDItMS4xODQtMS4xODVsLjE1OS0uMjkxQTEuODczIDEuODczIDAgMCAwIDEuOTQ1IDguOTNsLS4zMTktLjA5NGMtLjgzNS0uMjQ2LS44MzUtMS40MjggMC0xLjY3NGwuMzE5LS4wOTRBMS44NzMgMS44NzMgMCAwIDAgMy4wNiA0LjM3N2wtLjE2LS4yOTJjLS40MTUtLjc2NC40Mi0xLjYgMS4xODUtMS4xODRsLjI5Mi4xNTlhMS44NzMgMS44NzMgMCAwIDAgMi42OTItMS4xMTV6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTQtZ2VhcjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWljb24tdGVydGlhcnktNC1nZWFyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS00LWdlYXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTQtZ2VhcjpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktNC1nZWFyOmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTQtZ2VhcjpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCA0Ljc1NGEzLjI0NiAzLjI0NiAwIDEgMCAwIDYuNDkyIDMuMjQ2IDMuMjQ2IDAgMCAwIDAtNi40OTJNNS43NTQgOGEyLjI0NiAyLjI0NiAwIDEgMSA0LjQ5MiAwIDIuMjQ2IDIuMjQ2IDAgMCAxLTQuNDkyIDAnLyUzRSUzQ3BhdGggZD0nTTkuNzk2IDEuMzQzYy0uNTI3LTEuNzktMy4wNjUtMS43OS0zLjU5MiAwbC0uMDk0LjMxOWEuODczLjg3MyAwIDAgMS0xLjI1NS41MmwtLjI5Mi0uMTZjLTEuNjQtLjg5Mi0zLjQzMy45MDItMi41NCAyLjU0MWwuMTU5LjI5MmEuODczLjg3MyAwIDAgMS0uNTIgMS4yNTVsLS4zMTkuMDk0Yy0xLjc5LjUyNy0xLjc5IDMuMDY1IDAgMy41OTJsLjMxOS4wOTRhLjg3My44NzMgMCAwIDEgLjUyIDEuMjU1bC0uMTYuMjkyYy0uODkyIDEuNjQuOTAxIDMuNDM0IDIuNTQxIDIuNTRsLjI5Mi0uMTU5YS44NzMuODczIDAgMCAxIDEuMjU1LjUybC4wOTQuMzE5Yy41MjcgMS43OSAzLjA2NSAxLjc5IDMuNTkyIDBsLjA5NC0uMzE5YS44NzMuODczIDAgMCAxIDEuMjU1LS41MmwuMjkyLjE2YzEuNjQuODkzIDMuNDM0LS45MDIgMi41NC0yLjU0MWwtLjE1OS0uMjkyYS44NzMuODczIDAgMCAxIC41Mi0xLjI1NWwuMzE5LS4wOTRjMS43OS0uNTI3IDEuNzktMy4wNjUgMC0zLjU5MmwtLjMxOS0uMDk0YS44NzMuODczIDAgMCAxLS41Mi0xLjI1NWwuMTYtLjI5MmMuODkzLTEuNjQtLjkwMi0zLjQzMy0yLjU0MS0yLjU0bC0uMjkyLjE1OWEuODczLjg3MyAwIDAgMS0xLjI1NS0uNTJ6bS0yLjYzMy4yODNjLjI0Ni0uODM1IDEuNDI4LS44MzUgMS42NzQgMGwuMDk0LjMxOWExLjg3MyAxLjg3MyAwIDAgMCAyLjY5MyAxLjExNWwuMjkxLS4xNmMuNzY0LS40MTUgMS42LjQyIDEuMTg0IDEuMTg1bC0uMTU5LjI5MmExLjg3MyAxLjg3MyAwIDAgMCAxLjExNiAyLjY5MmwuMzE4LjA5NGMuODM1LjI0Ni44MzUgMS40MjggMCAxLjY3NGwtLjMxOS4wOTRhMS44NzMgMS44NzMgMCAwIDAtMS4xMTUgMi42OTNsLjE2LjI5MWMuNDE1Ljc2NC0uNDIgMS42LTEuMTg1IDEuMTg0bC0uMjkxLS4xNTlhMS44NzMgMS44NzMgMCAwIDAtMi42OTMgMS4xMTZsLS4wOTQuMzE4Yy0uMjQ2LjgzNS0xLjQyOC44MzUtMS42NzQgMGwtLjA5NC0uMzE5YTEuODczIDEuODczIDAgMCAwLTIuNjkyLTEuMTE1bC0uMjkyLjE2Yy0uNzY0LjQxNS0xLjYtLjQyLTEuMTg0LTEuMTg1bC4xNTktLjI5MUExLjg3MyAxLjg3MyAwIDAgMCAxLjk0NSA4LjkzbC0uMzE5LS4wOTRjLS44MzUtLjI0Ni0uODM1LTEuNDI4IDAtMS42NzRsLjMxOS0uMDk0QTEuODczIDEuODczIDAgMCAwIDMuMDYgNC4zNzdsLS4xNi0uMjkyYy0uNDE1LS43NjQuNDItMS42IDEuMTg1LTEuMTg0bC4yOTIuMTU5YTEuODczIDEuODczIDAgMCAwIDIuNjkyLTEuMTE1eicvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggNC43NTRhMy4yNDYgMy4yNDYgMCAxIDAgMCA2LjQ5MiAzLjI0NiAzLjI0NiAwIDAgMCAwLTYuNDkyTTUuNzU0IDhhMi4yNDYgMi4yNDYgMCAxIDEgNC40OTIgMCAyLjI0NiAyLjI0NiAwIDAgMS00LjQ5MiAwJy8lM0UlM0NwYXRoIGQ9J005Ljc5NiAxLjM0M2MtLjUyNy0xLjc5LTMuMDY1LTEuNzktMy41OTIgMGwtLjA5NC4zMTlhLjg3My44NzMgMCAwIDEtMS4yNTUuNTJsLS4yOTItLjE2Yy0xLjY0LS44OTItMy40MzMuOTAyLTIuNTQgMi41NDFsLjE1OS4yOTJhLjg3My44NzMgMCAwIDEtLjUyIDEuMjU1bC0uMzE5LjA5NGMtMS43OS41MjctMS43OSAzLjA2NSAwIDMuNTkybC4zMTkuMDk0YS44NzMuODczIDAgMCAxIC41MiAxLjI1NWwtLjE2LjI5MmMtLjg5MiAxLjY0LjkwMSAzLjQzNCAyLjU0MSAyLjU0bC4yOTItLjE1OWEuODczLjg3MyAwIDAgMSAxLjI1NS41MmwuMDk0LjMxOWMuNTI3IDEuNzkgMy4wNjUgMS43OSAzLjU5MiAwbC4wOTQtLjMxOWEuODczLjg3MyAwIDAgMSAxLjI1NS0uNTJsLjI5Mi4xNmMxLjY0Ljg5MyAzLjQzNC0uOTAyIDIuNTQtMi41NDFsLS4xNTktLjI5MmEuODczLjg3MyAwIDAgMSAuNTItMS4yNTVsLjMxOS0uMDk0YzEuNzktLjUyNyAxLjc5LTMuMDY1IDAtMy41OTJsLS4zMTktLjA5NGEuODczLjg3MyAwIDAgMS0uNTItMS4yNTVsLjE2LS4yOTJjLjg5My0xLjY0LS45MDItMy40MzMtMi41NDEtMi41NGwtLjI5Mi4xNTlhLjg3My44NzMgMCAwIDEtMS4yNTUtLjUyem0tMi42MzMuMjgzYy4yNDYtLjgzNSAxLjQyOC0uODM1IDEuNjc0IDBsLjA5NC4zMTlhMS44NzMgMS44NzMgMCAwIDAgMi42OTMgMS4xMTVsLjI5MS0uMTZjLjc2NC0uNDE1IDEuNi40MiAxLjE4NCAxLjE4NWwtLjE1OS4yOTJhMS44NzMgMS44NzMgMCAwIDAgMS4xMTYgMi42OTJsLjMxOC4wOTRjLjgzNS4yNDYuODM1IDEuNDI4IDAgMS42NzRsLS4zMTkuMDk0YTEuODczIDEuODczIDAgMCAwLTEuMTE1IDIuNjkzbC4xNi4yOTFjLjQxNS43NjQtLjQyIDEuNi0xLjE4NSAxLjE4NGwtLjI5MS0uMTU5YTEuODczIDEuODczIDAgMCAwLTIuNjkzIDEuMTE2bC0uMDk0LjMxOGMtLjI0Ni44MzUtMS40MjguODM1LTEuNjc0IDBsLS4wOTQtLjMxOWExLjg3MyAxLjg3MyAwIDAgMC0yLjY5Mi0xLjExNWwtLjI5Mi4xNmMtLjc2NC40MTUtMS42LS40Mi0xLjE4NC0xLjE4NWwuMTU5LS4yOTFBMS44NzMgMS44NzMgMCAwIDAgMS45NDUgOC45M2wtLjMxOS0uMDk0Yy0uODM1LS4yNDYtLjgzNS0xLjQyOCAwLTEuNjc0bC4zMTktLjA5NEExLjg3MyAxLjg3MyAwIDAgMCAzLjA2IDQuMzc3bC0uMTYtLjI5MmMtLjQxNS0uNzY0LjQyLTEuNiAxLjE4NS0xLjE4NGwuMjkyLjE1OWExLjg3MyAxLjg3MyAwIDAgMCAyLjY5Mi0xLjExNXonLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMS1ob21lOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0xLWhvbWU6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTEtaG9tZTpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMS1ob21lOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0xLWhvbWU6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMS1ob21lOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004LjcwNyAxLjVhMSAxIDAgMCAwLTEuNDE0IDBMLjY0NiA4LjE0NmEuNS41IDAgMCAwIC43MDguNzA4TDIgOC4yMDdWMTMuNUExLjUgMS41IDAgMCAwIDMuNSAxNWg5YTEuNSAxLjUgMCAwIDAgMS41LTEuNVY4LjIwN2wuNjQ2LjY0N2EuNS41IDAgMCAwIC43MDgtLjcwOEwxMyA1Ljc5M1YyLjVhLjUuNSAwIDAgMC0uNS0uNWgtMWEuNS41IDAgMCAwLS41LjV2MS4yOTN6TTEzIDcuMjA3VjEzLjVhLjUuNSAwIDAgMS0uNS41aC05YS41LjUgMCAwIDEtLjUtLjVWNy4yMDdsNS01eicvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTguNzA3IDEuNWExIDEgMCAwIDAtMS40MTQgMEwuNjQ2IDguMTQ2YS41LjUgMCAwIDAgLjcwOC43MDhMMiA4LjIwN1YxMy41QTEuNSAxLjUgMCAwIDAgMy41IDE1aDlhMS41IDEuNSAwIDAgMCAxLjUtMS41VjguMjA3bC42NDYuNjQ3YS41LjUgMCAwIDAgLjcwOC0uNzA4TDEzIDUuNzkzVjIuNWEuNS41IDAgMCAwLS41LS41aC0xYS41LjUgMCAwIDAtLjUuNXYxLjI5M3pNMTMgNy4yMDdWMTMuNWEuNS41IDAgMCAxLS41LjVoLTlhLjUuNSAwIDAgMS0uNS0uNVY3LjIwN2w1LTV6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTItaG9tZTpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWljb24tdGVydGlhcnktMi1ob21lOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS0yLWhvbWU6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTItaG9tZTpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMi1ob21lOmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTItaG9tZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOC43MDcgMS41YTEgMSAwIDAgMC0xLjQxNCAwTC42NDYgOC4xNDZhLjUuNSAwIDAgMCAuNzA4LjcwOEwyIDguMjA3VjEzLjVBMS41IDEuNSAwIDAgMCAzLjUgMTVoOWExLjUgMS41IDAgMCAwIDEuNS0xLjVWOC4yMDdsLjY0Ni42NDdhLjUuNSAwIDAgMCAuNzA4LS43MDhMMTMgNS43OTNWMi41YS41LjUgMCAwIDAtLjUtLjVoLTFhLjUuNSAwIDAgMC0uNS41djEuMjkzek0xMyA3LjIwN1YxMy41YS41LjUgMCAwIDEtLjUuNWgtOWEuNS41IDAgMCAxLS41LS41VjcuMjA3bDUtNXonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004LjcwNyAxLjVhMSAxIDAgMCAwLTEuNDE0IDBMLjY0NiA4LjE0NmEuNS41IDAgMCAwIC43MDguNzA4TDIgOC4yMDdWMTMuNUExLjUgMS41IDAgMCAwIDMuNSAxNWg5YTEuNSAxLjUgMCAwIDAgMS41LTEuNVY4LjIwN2wuNjQ2LjY0N2EuNS41IDAgMCAwIC43MDgtLjcwOEwxMyA1Ljc5M1YyLjVhLjUuNSAwIDAgMC0uNS0uNWgtMWEuNS41IDAgMCAwLS41LjV2MS4yOTN6TTEzIDcuMjA3VjEzLjVhLjUuNSAwIDAgMS0uNS41aC05YS41LjUgMCAwIDEtLjUtLjVWNy4yMDdsNS01eicvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0zLWhvbWU6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTMtaG9tZTpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMy1ob21lOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWljb24tcHJpbWFyeS0zLWhvbWU6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTMtaG9tZTpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0zLWhvbWU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTguNzA3IDEuNWExIDEgMCAwIDAtMS40MTQgMEwuNjQ2IDguMTQ2YS41LjUgMCAwIDAgLjcwOC43MDhMMiA4LjIwN1YxMy41QTEuNSAxLjUgMCAwIDAgMy41IDE1aDlhMS41IDEuNSAwIDAgMCAxLjUtMS41VjguMjA3bC42NDYuNjQ3YS41LjUgMCAwIDAgLjcwOC0uNzA4TDEzIDUuNzkzVjIuNWEuNS41IDAgMCAwLS41LS41aC0xYS41LjUgMCAwIDAtLjUuNXYxLjI5M3pNMTMgNy4yMDdWMTMuNWEuNS41IDAgMCAxLS41LjVoLTlhLjUuNSAwIDAgMS0uNS0uNVY3LjIwN2w1LTV6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOC43MDcgMS41YTEgMSAwIDAgMC0xLjQxNCAwTC42NDYgOC4xNDZhLjUuNSAwIDAgMCAuNzA4LjcwOEwyIDguMjA3VjEzLjVBMS41IDEuNSAwIDAgMCAzLjUgMTVoOWExLjUgMS41IDAgMCAwIDEuNS0xLjVWOC4yMDdsLjY0Ni42NDdhLjUuNSAwIDAgMCAuNzA4LS43MDhMMTMgNS43OTNWMi41YS41LjUgMCAwIDAtLjUtLjVoLTFhLjUuNSAwIDAgMC0uNS41djEuMjkzek0xMyA3LjIwN1YxMy41YS41LjUgMCAwIDEtLjUuNWgtOWEuNS41IDAgMCAxLS41LS41VjcuMjA3bDUtNXonLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktNC1ob21lOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS00LWhvbWU6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTQtaG9tZTpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1pY29uLXByaW1hcnktNC1ob21lOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS00LWhvbWU6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktNC1ob21lOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004LjcwNyAxLjVhMSAxIDAgMCAwLTEuNDE0IDBMLjY0NiA4LjE0NmEuNS41IDAgMCAwIC43MDguNzA4TDIgOC4yMDdWMTMuNUExLjUgMS41IDAgMCAwIDMuNSAxNWg5YTEuNSAxLjUgMCAwIDAgMS41LTEuNVY4LjIwN2wuNjQ2LjY0N2EuNS41IDAgMCAwIC43MDgtLjcwOEwxMyA1Ljc5M1YyLjVhLjUuNSAwIDAgMC0uNS0uNWgtMWEuNS41IDAgMCAwLS41LjV2MS4yOTN6TTEzIDcuMjA3VjEzLjVhLjUuNSAwIDAgMS0uNS41aC05YS41LjUgMCAwIDEtLjUtLjVWNy4yMDdsNS01eicvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTguNzA3IDEuNWExIDEgMCAwIDAtMS40MTQgMEwuNjQ2IDguMTQ2YS41LjUgMCAwIDAgLjcwOC43MDhMMiA4LjIwN1YxMy41QTEuNSAxLjUgMCAwIDAgMy41IDE1aDlhMS41IDEuNSAwIDAgMCAxLjUtMS41VjguMjA3bC42NDYuNjQ3YS41LjUgMCAwIDAgLjcwOC0uNzA4TDEzIDUuNzkzVjIuNWEuNS41IDAgMCAwLS41LS41aC0xYS41LjUgMCAwIDAtLjUuNXYxLjI5M3pNMTMgNy4yMDdWMTMuNWEuNS41IDAgMCAxLS41LjVoLTlhLjUuNSAwIDAgMS0uNS0uNVY3LjIwN2w1LTV6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTEtY291bnRlcmNsb2Nrd2lzZTpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWljb24tdGVydGlhcnktMS1jb3VudGVyY2xvY2t3aXNlOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS0xLWNvdW50ZXJjbG9ja3dpc2U6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTEtY291bnRlcmNsb2Nrd2lzZTpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMS1jb3VudGVyY2xvY2t3aXNlOmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTEtY291bnRlcmNsb2Nrd2lzZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGQ9J004IDNhNSA1IDAgMSAxLTQuNTQ2IDIuOTE0LjUuNSAwIDAgMC0uOTA4LS40MTdBNiA2IDAgMSAwIDggMnonLyUzRSUzQ3BhdGggZD0nTTggNC40NjZWLjUzNGEuMjUuMjUgMCAwIDAtLjQxLS4xOTJMNS4yMyAyLjMwOGEuMjUuMjUgMCAwIDAgMCAuMzg0bDIuMzYgMS45NjZBLjI1LjI1IDAgMCAwIDggNC40NjYnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgZD0nTTggM2E1IDUgMCAxIDEtNC41NDYgMi45MTQuNS41IDAgMCAwLS45MDgtLjQxN0E2IDYgMCAxIDAgOCAyeicvJTNFJTNDcGF0aCBkPSdNOCA0LjQ2NlYuNTM0YS4yNS4yNSAwIDAgMC0uNDEtLjE5Mkw1LjIzIDIuMzA4YS4yNS4yNSAwIDAgMCAwIC4zODRsMi4zNiAxLjk2NkEuMjUuMjUgMCAwIDAgOCA0LjQ2NicvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0yLWNvdW50ZXJjbG9ja3dpc2U6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTItY291bnRlcmNsb2Nrd2lzZTpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMi1jb3VudGVyY2xvY2t3aXNlOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWljb24tcHJpbWFyeS0yLWNvdW50ZXJjbG9ja3dpc2U6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTItY291bnRlcmNsb2Nrd2lzZTpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0yLWNvdW50ZXJjbG9ja3dpc2U6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBkPSdNOCAzYTUgNSAwIDEgMS00LjU0NiAyLjkxNC41LjUgMCAwIDAtLjkwOC0uNDE3QTYgNiAwIDEgMCA4IDJ6Jy8lM0UlM0NwYXRoIGQ9J004IDQuNDY2Vi41MzRhLjI1LjI1IDAgMCAwLS40MS0uMTkyTDUuMjMgMi4zMDhhLjI1LjI1IDAgMCAwIDAgLjM4NGwyLjM2IDEuOTY2QS4yNS4yNSAwIDAgMCA4IDQuNDY2Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGQ9J004IDNhNSA1IDAgMSAxLTQuNTQ2IDIuOTE0LjUuNSAwIDAgMC0uOTA4LS40MTdBNiA2IDAgMSAwIDggMnonLyUzRSUzQ3BhdGggZD0nTTggNC40NjZWLjUzNGEuMjUuMjUgMCAwIDAtLjQxLS4xOTJMNS4yMyAyLjMwOGEuMjUuMjUgMCAwIDAgMCAuMzg0bDIuMzYgMS45NjZBLjI1LjI1IDAgMCAwIDggNC40NjYnLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMy1jb3VudGVyY2xvY2t3aXNlOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0zLWNvdW50ZXJjbG9ja3dpc2U6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTMtY291bnRlcmNsb2Nrd2lzZTpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMy1jb3VudGVyY2xvY2t3aXNlOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0zLWNvdW50ZXJjbG9ja3dpc2U6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMy1jb3VudGVyY2xvY2t3aXNlOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgZD0nTTggM2E1IDUgMCAxIDEtNC41NDYgMi45MTQuNS41IDAgMCAwLS45MDgtLjQxN0E2IDYgMCAxIDAgOCAyeicvJTNFJTNDcGF0aCBkPSdNOCA0LjQ2NlYuNTM0YS4yNS4yNSAwIDAgMC0uNDEtLjE5Mkw1LjIzIDIuMzA4YS4yNS4yNSAwIDAgMCAwIC4zODRsMi4zNiAxLjk2NkEuMjUuMjUgMCAwIDAgOCA0LjQ2NicvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBkPSdNOCAzYTUgNSAwIDEgMS00LjU0NiAyLjkxNC41LjUgMCAwIDAtLjkwOC0uNDE3QTYgNiAwIDEgMCA4IDJ6Jy8lM0UlM0NwYXRoIGQ9J004IDQuNDY2Vi41MzRhLjI1LjI1IDAgMCAwLS40MS0uMTkyTDUuMjMgMi4zMDhhLjI1LjI1IDAgMCAwIDAgLjM4NGwyLjM2IDEuOTY2QS4yNS4yNSAwIDAgMCA4IDQuNDY2Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTQtY291bnRlcmNsb2Nrd2lzZTpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWljb24tdGVydGlhcnktNC1jb3VudGVyY2xvY2t3aXNlOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS00LWNvdW50ZXJjbG9ja3dpc2U6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTQtY291bnRlcmNsb2Nrd2lzZTpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktNC1jb3VudGVyY2xvY2t3aXNlOmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTQtY291bnRlcmNsb2Nrd2lzZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGQ9J004IDNhNSA1IDAgMSAxLTQuNTQ2IDIuOTE0LjUuNSAwIDAgMC0uOTA4LS40MTdBNiA2IDAgMSAwIDggMnonLyUzRSUzQ3BhdGggZD0nTTggNC40NjZWLjUzNGEuMjUuMjUgMCAwIDAtLjQxLS4xOTJMNS4yMyAyLjMwOGEuMjUuMjUgMCAwIDAgMCAuMzg0bDIuMzYgMS45NjZBLjI1LjI1IDAgMCAwIDggNC40NjYnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgZD0nTTggM2E1IDUgMCAxIDEtNC41NDYgMi45MTQuNS41IDAgMCAwLS45MDgtLjQxN0E2IDYgMCAxIDAgOCAyeicvJTNFJTNDcGF0aCBkPSdNOCA0LjQ2NlYuNTM0YS4yNS4yNSAwIDAgMC0uNDEtLjE5Mkw1LjIzIDIuMzA4YS4yNS4yNSAwIDAgMCAwIC4zODRsMi4zNiAxLjk2NkEuMjUuMjUgMCAwIDAgOCA0LjQ2NicvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tc3VjY2Vzcy0yOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMik7LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nbTEwLjk3IDQuOTctLjAyLjAyMi0zLjQ3MyA0LjQyNS0yLjA5My0yLjA5NGEuNzUuNzUgMCAwIDAtMS4wNiAxLjA2TDYuOTcgMTEuMDNhLjc1Ljc1IDAgMCAwIDEuMDc5LS4wMmwzLjk5Mi00Ljk5YS43NS43NSAwIDAgMC0xLjA3MS0xLjA1Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J20xMC45NyA0Ljk3LS4wMi4wMjItMy40NzMgNC40MjUtMi4wOTMtMi4wOTRhLjc1Ljc1IDAgMCAwLTEuMDYgMS4wNkw2Ljk3IDExLjAzYS43NS43NSAwIDAgMCAxLjA3OS0uMDJsMy45OTItNC45OWEuNzUuNzUgMCAwIDAtMS4wNzEtMS4wNScvJTNFJTNDL3N2ZyUzRVxcXCIpfS5tb25zdGVyLWljb24td2FybmluZy0yOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMik7LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKX0ubW9uc3Rlci1pY29uLWVycm9yLTI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTIpOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J000LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMEw4IDcuMjkzbDIuNjQ2LTIuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC43MDcgOGwyLjY0NyAyLjY0NmEuNS41IDAgMCAxLS43MDguNzA4TDggOC43MDdsLTIuNjQ2IDIuNjQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4TDcuMjkzIDggNC42NDYgNS4zNTRhLjUuNSAwIDAgMSAwLS43MDgnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpfS5tb25zdGVyLWljb24tZXJyb3ItMjpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zdWNjZXNzLTI6YmVmb3JlLC5tb25zdGVyLWljb24td2FybmluZy0yOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1zdWNjZXNzLTM6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zKTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdtMTAuOTcgNC45Ny0uMDIuMDIyLTMuNDczIDQuNDI1LTIuMDkzLTIuMDk0YS43NS43NSAwIDAgMC0xLjA2IDEuMDZMNi45NyAxMS4wM2EuNzUuNzUgMCAwIDAgMS4wNzktLjAybDMuOTkyLTQuOTlhLjc1Ljc1IDAgMCAwLTEuMDcxLTEuMDUnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nbTEwLjk3IDQuOTctLjAyLjAyMi0zLjQ3MyA0LjQyNS0yLjA5My0yLjA5NGEuNzUuNzUgMCAwIDAtMS4wNiAxLjA2TDYuOTcgMTEuMDNhLjc1Ljc1IDAgMCAwIDEuMDc5LS4wMmwzLjk5Mi00Ljk5YS43NS43NSAwIDAgMC0xLjA3MS0xLjA1Jy8lM0UlM0Mvc3ZnJTNFXFxcIil9Lm1vbnN0ZXItaWNvbi13YXJuaW5nLTM6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zKTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNy4wMDIgMTFhMSAxIDAgMSAxIDIgMCAxIDEgMCAwIDEtMiAwTTcuMSA0Ljk5NWEuOTA1LjkwNSAwIDEgMSAxLjggMGwtLjM1IDMuNTA3YS41NTIuNTUyIDAgMCAxLTEuMSAweicvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNy4wMDIgMTFhMSAxIDAgMSAxIDIgMCAxIDEgMCAwIDEtMiAwTTcuMSA0Ljk5NWEuOTA1LjkwNSAwIDEgMSAxLjggMGwtLjM1IDMuNTA3YS41NTIuNTUyIDAgMCAxLTEuMSAweicvJTNFJTNDL3N2ZyUzRVxcXCIpfS5tb25zdGVyLWljb24tZXJyb3ItMzpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMyk7LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNC42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCA3LjI5M2wyLjY0Ni0yLjY0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsMi42NDcgMi42NDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC0yLjY0NiAyLjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4IDQuNjQ2IDUuMzU0YS41LjUgMCAwIDEgMC0uNzA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIil9Lm1vbnN0ZXItaWNvbi1lcnJvci0zOmJlZm9yZSwubW9uc3Rlci1pY29uLXN1Y2Nlc3MtMzpiZWZvcmUsLm1vbnN0ZXItaWNvbi13YXJuaW5nLTM6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXN1Y2Nlc3MtMTpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTEpOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyBjbGFzcz0nYmkgYmktY2hlY2stY2lyY2xlJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J20xMC45NyA0Ljk3LS4wMi4wMjItMy40NzMgNC40MjUtMi4wOTMtMi4wOTRhLjc1Ljc1IDAgMCAwLTEuMDYgMS4wNkw2Ljk3IDExLjAzYS43NS43NSAwIDAgMCAxLjA3OS0uMDJsMy45OTItNC45OWEuNzUuNzUgMCAwIDAtMS4wNzEtMS4wNScvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2JpIGJpLWNoZWNrLWNpcmNsZScgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdtMTAuOTcgNC45Ny0uMDIuMDIyLTMuNDczIDQuNDI1LTIuMDkzLTIuMDk0YS43NS43NSAwIDAgMC0xLjA2IDEuMDZMNi45NyAxMS4wM2EuNzUuNzUgMCAwIDAgMS4wNzktLjAybDMuOTkyLTQuOTlhLjc1Ljc1IDAgMCAwLTEuMDcxLTEuMDUnLyUzRSUzQy9zdmclM0VcXFwiKX0ubW9uc3Rlci1pY29uLXdhcm5pbmctMTpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTEpOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyBjbGFzcz0nYmkgYmktZXhjbGFtYXRpb24tY2lyY2xlJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J003LjAwMiAxMWExIDEgMCAxIDEgMiAwIDEgMSAwIDAgMS0yIDBNNy4xIDQuOTk1YS45MDUuOTA1IDAgMSAxIDEuOCAwbC0uMzUgMy41MDdhLjU1Mi41NTIgMCAwIDEtMS4xIDB6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyBjbGFzcz0nYmkgYmktZXhjbGFtYXRpb24tY2lyY2xlJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J003LjAwMiAxMWExIDEgMCAxIDEgMiAwIDEgMSAwIDAgMS0yIDBNNy4xIDQuOTk1YS45MDUuOTA1IDAgMSAxIDEuOCAwbC0uMzUgMy41MDdhLjU1Mi41NTIgMCAwIDEtMS4xIDB6Jy8lM0UlM0Mvc3ZnJTNFXFxcIil9Lm1vbnN0ZXItaWNvbi1lcnJvci0xOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0xKTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2JpIGJpLXgtY2lyY2xlJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J000LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMEw4IDcuMjkzbDIuNjQ2LTIuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC43MDcgOGwyLjY0NyAyLjY0NmEuNS41IDAgMCAxLS43MDguNzA4TDggOC43MDdsLTIuNjQ2IDIuNjQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4TDcuMjkzIDggNC42NDYgNS4zNTRhLjUuNSAwIDAgMSAwLS43MDgnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIGNsYXNzPSdiaSBiaS14LWNpcmNsZScgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNC42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCA3LjI5M2wyLjY0Ni0yLjY0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsMi42NDcgMi42NDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC0yLjY0NiAyLjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4IDQuNjQ2IDUuMzU0YS41LjUgMCAwIDEgMC0uNzA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIil9Lm1vbnN0ZXItaWNvbi1lcnJvci0xOmJlZm9yZSwubW9uc3Rlci1pY29uLXN1Y2Nlc3MtMTpiZWZvcmUsLm1vbnN0ZXItaWNvbi13YXJuaW5nLTE6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXN1Y2Nlc3MtNDpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQpOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyBjbGFzcz0nYmkgYmktY2hlY2stY2lyY2xlJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J20xMC45NyA0Ljk3LS4wMi4wMjItMy40NzMgNC40MjUtMi4wOTMtMi4wOTRhLjc1Ljc1IDAgMCAwLTEuMDYgMS4wNkw2Ljk3IDExLjAzYS43NS43NSAwIDAgMCAxLjA3OS0uMDJsMy45OTItNC45OWEuNzUuNzUgMCAwIDAtMS4wNzEtMS4wNScvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2JpIGJpLWNoZWNrLWNpcmNsZScgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdtMTAuOTcgNC45Ny0uMDIuMDIyLTMuNDczIDQuNDI1LTIuMDkzLTIuMDk0YS43NS43NSAwIDAgMC0xLjA2IDEuMDZMNi45NyAxMS4wM2EuNzUuNzUgMCAwIDAgMS4wNzktLjAybDMuOTkyLTQuOTlhLjc1Ljc1IDAgMCAwLTEuMDcxLTEuMDUnLyUzRSUzQy9zdmclM0VcXFwiKX0ubW9uc3Rlci1pY29uLXdhcm5pbmctNDpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQpOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyBjbGFzcz0nYmkgYmktZXhjbGFtYXRpb24tY2lyY2xlJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J003LjAwMiAxMWExIDEgMCAxIDEgMiAwIDEgMSAwIDAgMS0yIDBNNy4xIDQuOTk1YS45MDUuOTA1IDAgMSAxIDEuOCAwbC0uMzUgMy41MDdhLjU1Mi41NTIgMCAwIDEtMS4xIDB6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyBjbGFzcz0nYmkgYmktZXhjbGFtYXRpb24tY2lyY2xlJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J003LjAwMiAxMWExIDEgMCAxIDEgMiAwIDEgMSAwIDAgMS0yIDBNNy4xIDQuOTk1YS45MDUuOTA1IDAgMSAxIDEuOCAwbC0uMzUgMy41MDdhLjU1Mi41NTIgMCAwIDEtMS4xIDB6Jy8lM0UlM0Mvc3ZnJTNFXFxcIil9Lm1vbnN0ZXItaWNvbi1lcnJvci00OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci00KTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2JpIGJpLXgtY2lyY2xlJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J000LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMEw4IDcuMjkzbDIuNjQ2LTIuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC43MDcgOGwyLjY0NyAyLjY0NmEuNS41IDAgMCAxLS43MDguNzA4TDggOC43MDdsLTIuNjQ2IDIuNjQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4TDcuMjkzIDggNC42NDYgNS4zNTRhLjUuNSAwIDAgMSAwLS43MDgnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIGNsYXNzPSdiaSBiaS14LWNpcmNsZScgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNC42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCA3LjI5M2wyLjY0Ni0yLjY0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsMi42NDcgMi42NDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC0yLjY0NiAyLjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4IDQuNjQ2IDUuMzU0YS41LjUgMCAwIDEgMC0uNzA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIil9Lm1vbnN0ZXItaWNvbi1lcnJvci00OmJlZm9yZSwubW9uc3Rlci1pY29uLXN1Y2Nlc3MtNDpiZWZvcmUsLm1vbnN0ZXItaWNvbi13YXJuaW5nLTQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX1hLGE6YWN0aXZlLGE6Zm9jdXMsYTpob3ZlcixhOmxpbmssYTp2aXNpdGVke2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpO291dGxpbmU6bm9uZTt0ZXh0LWRlY29yYXRpb246bm9uZTt0cmFuc2l0aW9uOmNvbG9yIC4zcyBlYXNlLWluLW91dCx0ZXh0LWRlY29yYXRpb24tY29sb3IgLjNzIGVhc2UtaW4tb3V0fWE6YWN0aXZlLGE6Zm9jdXMsYTpob3Zlcntjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMik7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt0ZXh0LWRlY29yYXRpb24tY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSApO3RleHQtZGVjb3JhdGlvbi10aGlja25lc3M6MXB4O3RleHQtdW5kZXJsaW5lLW9mZnNldDoycHh9YTpmb2N1c3tvdXRsaW5lOjFweCBkYXNoZWQgdmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSk7b3V0bGluZS1vZmZzZXQ6MnB4fUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7YSxhOmFjdGl2ZSxhOmZvY3VzLGE6aG92ZXIsYTpsaW5rLGE6dmlzaXRlZHtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWFtYmVyLTIpfWE6Zm9jdXN7b3V0bGluZToxcHggZGFzaGVkIHZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQpfX0ubW9uc3Rlci1za2VsZXRvbi1jb2wtMTB7LS1tb25zdGVyLXNrZWxldG9uLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItc2tlbGV0b24taGVpZ2h0OjEwMCU7LS1tb25zdGVyLXNrZWxldG9uLXdpZHRoOjEwJTstLW1vbnN0ZXItc2tlbGV0b246bGluZWFyLWdyYWRpZW50KDkwZGVnLHZhcigtLW1vbnN0ZXItc2tlbGV0b24tY29sb3IpIDAsdHJhbnNwYXJlbnQgdmFyKC0tbW9uc3Rlci1za2VsZXRvbi13aWR0aCkpfS5tb25zdGVyLXNrZWxldG9uLWNvbC0xMCwubW9uc3Rlci1za2VsZXRvbi1jb2wtMjB7YmFja2dyb3VuZC1pbWFnZTp2YXIoLS1tb25zdGVyLXNrZWxldG9uKTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMDtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOnZhcigtLW1vbnN0ZXItc2tlbGV0b24td2lkdGgpIHZhcigtLW1vbnN0ZXItc2tlbGV0b24taGVpZ2h0KTtjb2xvcjp2YXIoLS1tb25zdGVyLXNrZWxldG9uLWNvbG9yKTttaW4taGVpZ2h0OjFweH0ubW9uc3Rlci1za2VsZXRvbi1jb2wtMjB7LS1tb25zdGVyLXNrZWxldG9uLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItc2tlbGV0b24taGVpZ2h0OjEwMCU7LS1tb25zdGVyLXNrZWxldG9uLXdpZHRoOjIwJTstLW1vbnN0ZXItc2tlbGV0b246bGluZWFyLWdyYWRpZW50KDkwZGVnLHZhcigtLW1vbnN0ZXItc2tlbGV0b24tY29sb3IpIDAsdHJhbnNwYXJlbnQgdmFyKC0tbW9uc3Rlci1za2VsZXRvbi13aWR0aCkpfS5tb25zdGVyLXNrZWxldG9uLWNvbC0zMHstLW1vbnN0ZXItc2tlbGV0b24tY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1za2VsZXRvbi1oZWlnaHQ6MTAwJTstLW1vbnN0ZXItc2tlbGV0b24td2lkdGg6MzAlOy0tbW9uc3Rlci1za2VsZXRvbjpsaW5lYXItZ3JhZGllbnQoOTBkZWcsdmFyKC0tbW9uc3Rlci1za2VsZXRvbi1jb2xvcikgMCx0cmFuc3BhcmVudCB2YXIoLS1tb25zdGVyLXNrZWxldG9uLXdpZHRoKSl9Lm1vbnN0ZXItc2tlbGV0b24tY29sLTMwLC5tb25zdGVyLXNrZWxldG9uLWNvbC00MHtiYWNrZ3JvdW5kLWltYWdlOnZhcigtLW1vbnN0ZXItc2tlbGV0b24pO2JhY2tncm91bmQtcG9zaXRpb246MCAwO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXNpemU6dmFyKC0tbW9uc3Rlci1za2VsZXRvbi13aWR0aCkgdmFyKC0tbW9uc3Rlci1za2VsZXRvbi1oZWlnaHQpO2NvbG9yOnZhcigtLW1vbnN0ZXItc2tlbGV0b24tY29sb3IpO21pbi1oZWlnaHQ6MXB4fS5tb25zdGVyLXNrZWxldG9uLWNvbC00MHstLW1vbnN0ZXItc2tlbGV0b24tY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1za2VsZXRvbi1oZWlnaHQ6MTAwJTstLW1vbnN0ZXItc2tlbGV0b24td2lkdGg6NDAlOy0tbW9uc3Rlci1za2VsZXRvbjpsaW5lYXItZ3JhZGllbnQoOTBkZWcsdmFyKC0tbW9uc3Rlci1za2VsZXRvbi1jb2xvcikgMCx0cmFuc3BhcmVudCB2YXIoLS1tb25zdGVyLXNrZWxldG9uLXdpZHRoKSl9Lm1vbnN0ZXItc2tlbGV0b24tY29sLTUwey0tbW9uc3Rlci1za2VsZXRvbi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLXNrZWxldG9uLWhlaWdodDoxMDAlOy0tbW9uc3Rlci1za2VsZXRvbi13aWR0aDo1MCU7LS1tb25zdGVyLXNrZWxldG9uOmxpbmVhci1ncmFkaWVudCg5MGRlZyx2YXIoLS1tb25zdGVyLXNrZWxldG9uLWNvbG9yKSAwLHRyYW5zcGFyZW50IHZhcigtLW1vbnN0ZXItc2tlbGV0b24td2lkdGgpKX0ubW9uc3Rlci1za2VsZXRvbi1jb2wtNTAsLm1vbnN0ZXItc2tlbGV0b24tY29sLTYwe2JhY2tncm91bmQtaW1hZ2U6dmFyKC0tbW9uc3Rlci1za2VsZXRvbik7YmFja2dyb3VuZC1wb3NpdGlvbjowIDA7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTp2YXIoLS1tb25zdGVyLXNrZWxldG9uLXdpZHRoKSB2YXIoLS1tb25zdGVyLXNrZWxldG9uLWhlaWdodCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1za2VsZXRvbi1jb2xvcik7bWluLWhlaWdodDoxcHh9Lm1vbnN0ZXItc2tlbGV0b24tY29sLTYwey0tbW9uc3Rlci1za2VsZXRvbi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLXNrZWxldG9uLWhlaWdodDoxMDAlOy0tbW9uc3Rlci1za2VsZXRvbi13aWR0aDo2MCU7LS1tb25zdGVyLXNrZWxldG9uOmxpbmVhci1ncmFkaWVudCg5MGRlZyx2YXIoLS1tb25zdGVyLXNrZWxldG9uLWNvbG9yKSAwLHRyYW5zcGFyZW50IHZhcigtLW1vbnN0ZXItc2tlbGV0b24td2lkdGgpKX0ubW9uc3Rlci1za2VsZXRvbi1jb2wtNzB7LS1tb25zdGVyLXNrZWxldG9uLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItc2tlbGV0b24taGVpZ2h0OjEwMCU7LS1tb25zdGVyLXNrZWxldG9uLXdpZHRoOjcwJTstLW1vbnN0ZXItc2tlbGV0b246bGluZWFyLWdyYWRpZW50KDkwZGVnLHZhcigtLW1vbnN0ZXItc2tlbGV0b24tY29sb3IpIDAsdHJhbnNwYXJlbnQgdmFyKC0tbW9uc3Rlci1za2VsZXRvbi13aWR0aCkpfS5tb25zdGVyLXNrZWxldG9uLWNvbC03MCwubW9uc3Rlci1za2VsZXRvbi1jb2wtODB7YmFja2dyb3VuZC1pbWFnZTp2YXIoLS1tb25zdGVyLXNrZWxldG9uKTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMDtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOnZhcigtLW1vbnN0ZXItc2tlbGV0b24td2lkdGgpIHZhcigtLW1vbnN0ZXItc2tlbGV0b24taGVpZ2h0KTtjb2xvcjp2YXIoLS1tb25zdGVyLXNrZWxldG9uLWNvbG9yKTttaW4taGVpZ2h0OjFweH0ubW9uc3Rlci1za2VsZXRvbi1jb2wtODB7LS1tb25zdGVyLXNrZWxldG9uLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItc2tlbGV0b24taGVpZ2h0OjEwMCU7LS1tb25zdGVyLXNrZWxldG9uLXdpZHRoOjgwJTstLW1vbnN0ZXItc2tlbGV0b246bGluZWFyLWdyYWRpZW50KDkwZGVnLHZhcigtLW1vbnN0ZXItc2tlbGV0b24tY29sb3IpIDAsdHJhbnNwYXJlbnQgdmFyKC0tbW9uc3Rlci1za2VsZXRvbi13aWR0aCkpfS5tb25zdGVyLXNrZWxldG9uLWNvbC05MHstLW1vbnN0ZXItc2tlbGV0b24tY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1za2VsZXRvbi1oZWlnaHQ6MTAwJTstLW1vbnN0ZXItc2tlbGV0b24td2lkdGg6OTAlOy0tbW9uc3Rlci1za2VsZXRvbjpsaW5lYXItZ3JhZGllbnQoOTBkZWcsdmFyKC0tbW9uc3Rlci1za2VsZXRvbi1jb2xvcikgMCx0cmFuc3BhcmVudCB2YXIoLS1tb25zdGVyLXNrZWxldG9uLXdpZHRoKSl9Lm1vbnN0ZXItc2tlbGV0b24tY29sLTEwMCwubW9uc3Rlci1za2VsZXRvbi1jb2wtOTB7YmFja2dyb3VuZC1pbWFnZTp2YXIoLS1tb25zdGVyLXNrZWxldG9uKTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMDtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOnZhcigtLW1vbnN0ZXItc2tlbGV0b24td2lkdGgpIHZhcigtLW1vbnN0ZXItc2tlbGV0b24taGVpZ2h0KTtjb2xvcjp2YXIoLS1tb25zdGVyLXNrZWxldG9uLWNvbG9yKTttaW4taGVpZ2h0OjFweH0ubW9uc3Rlci1za2VsZXRvbi1jb2wtMTAwey0tbW9uc3Rlci1za2VsZXRvbi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLXNrZWxldG9uLWhlaWdodDoxMDAlOy0tbW9uc3Rlci1za2VsZXRvbi13aWR0aDoxMDAlOy0tbW9uc3Rlci1za2VsZXRvbjpsaW5lYXItZ3JhZGllbnQoOTBkZWcsdmFyKC0tbW9uc3Rlci1za2VsZXRvbi1jb2xvcikgMCx0cmFuc3BhcmVudCB2YXIoLS1tb25zdGVyLXNrZWxldG9uLXdpZHRoKSl9Lm1vbnN0ZXItc2tlbGV0b24tYW5pbWF0ZWR7YW5pbWF0aW9uLWR1cmF0aW9uOjIuMjVzO2FuaW1hdGlvbi1maWxsLW1vZGU6Zm9yd2FyZHM7YW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDppbmZpbml0ZTthbmltYXRpb24tbmFtZTpzaGltbWVyO2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246bGluZWFyO2JvcmRlci1yYWRpdXM6NHB4fUBrZXlmcmFtZXMgc2hpbW1lcnswJXtmaWx0ZXI6YnJpZ2h0bmVzcygxKX01MCV7ZmlsdGVyOmJyaWdodG5lc3MoMS41KX10b3tmaWx0ZXI6YnJpZ2h0bmVzcygxKX19IFxufWAsXG5cdFx0MCxcblx0KTtcbn0gY2F0Y2ggKGUpIHtcblx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0ZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKSxcblx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdGUgKyBcIlwiLFxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGRpZmYgfSBmcm9tIFwiLi4vLi4vZGF0YS9kaWZmLm1qc1wiO1xuaW1wb3J0IHsgUGF0aGZpbmRlciB9IGZyb20gXCIuLi8uLi9kYXRhL3BhdGhmaW5kZXIubWpzXCI7XG5pbXBvcnQgeyBpc09iamVjdCB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IE9ic2VydmVyIH0gZnJvbSBcIi4uLy4uL3R5cGVzL29ic2VydmVyLm1qc1wiO1xuXG5leHBvcnQgeyBoYW5kbGVEYXRhU291cmNlQ2hhbmdlcywgZGF0YXNvdXJjZUxpbmtlZEVsZW1lbnRTeW1ib2wgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgZGF0YXNvdXJjZUxpbmtlZEVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJkYXRhc291cmNlTGlua2VkRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBoYW5kbGVEYXRhU291cmNlQ2hhbmdlcygpIHtcblx0aWYgKCF0aGlzW2RhdGFzb3VyY2VMaW5rZWRFbGVtZW50U3ltYm9sXSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGxldCBkYXRhID0gdGhpc1tkYXRhc291cmNlTGlua2VkRWxlbWVudFN5bWJvbF0uZGF0YTtcblxuXHRjb25zdCBhY3R1YWxEYXRhID0gSlNPTi5zdHJpbmdpZnkodGhpcy5nZXRPcHRpb24oXCJkYXRhXCIpKTtcblx0Y29uc3QgYWN0dWFsRGF0YUFzT2JqID0gSlNPTi5wYXJzZShhY3R1YWxEYXRhKTtcblxuXHRjb25zdCBwYXRoID0gdGhpcy5nZXRPcHRpb24oXCJtYXBwaW5nLmRhdGFcIik7XG5cdGlmIChwYXRoKSB7XG5cdFx0ZGF0YSA9IG5ldyBQYXRoZmluZGVyKGRhdGEpLmdldFZpYShwYXRoKTtcblx0fVxuXG5cdGlmIChpc09iamVjdChkYXRhKSkge1xuXHRcdGNvbnN0IHRtcCA9IFtdO1xuXHRcdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhkYXRhKTtcblx0XHRmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG5cdFx0XHR0bXAucHVzaChkYXRhW2tleV0pO1xuXHRcdH1cblx0XHRkYXRhID0gdG1wO1xuXHR9XG5cblx0Y29uc3QgaW5kZXggPSB0aGlzLmdldE9wdGlvbihcIm1hcHBpbmcuaW5kZXhcIik7XG5cdGlmIChpbmRleCAhPT0gdW5kZWZpbmVkICYmIGluZGV4ICE9PSBudWxsKSB7XG5cdFx0ZGF0YSA9IGRhdGE/LltpbmRleF07XG5cdH1cblxuXHRpZiAoZGF0YSA9PT0gdW5kZWZpbmVkIHx8IGRhdGEgPT09IG51bGwpIHtcblx0XHRkYXRhID0gW107XG5cdH1cblxuXHRjb25zdCByZXN1bHQgPSBkaWZmKGRhdGEsIGFjdHVhbERhdGFBc09iaik7XG5cdGlmIChyZXN1bHQubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0cXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuXHRcdHRoaXMuc2V0T3B0aW9uKFwiZGF0YVwiLCBkYXRhKTtcblx0fSk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCAyMDI0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqL1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgRm9ybVN0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IEZvcm1TdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcblx0Rm9ybVN0eWxlU2hlZXQuaW5zZXJ0UnVsZShcblx0XHRgXG5AbGF5ZXIgZm9ybSB7IFxuaW5wdXQsbWV0ZXIscHJvZ3Jlc3Msc2VsZWN0LHRleHRhcmVhe2FjY2VudC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXdpZHRoKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOjEwMCU7bWFyZ2luOjA7b3V0bGluZTpub25lfWlucHV0LHNlbGVjdCx0ZXh0YXJlYXtoZWlnaHQ6LW1vei1maXQtY29udGVudDtoZWlnaHQ6Zml0LWNvbnRlbnQ7cGFkZGluZzouNHJlbSAuNnJlbX10ZXh0YXJlYXttaW4taGVpZ2h0OjZyZW07cmVzaXplOnZlcnRpY2FsfWlucHV0W3R5cGU9Y29sb3Jde2hlaWdodDoycmVtO21hcmdpbjowO3BhZGRpbmc6LjFyZW07d2lkdGg6MnJlbX1pbnB1dDpob3Zlcjpub3QoW3R5cGU9cmFkaW9dKTpub3QoW3R5cGU9Y2hlY2tib3hdKTpub3QoW3R5cGU9cmFuZ2VdKSxzZWxlY3Q6aG92ZXIsdGV4dGFyZWE6aG92ZXJ7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMik7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC44cyxjb2xvciAuMjVzIC4wODMzMzMzMzMzc31pbnB1dDpmb2N1cyxzZWxlY3Q6Zm9jdXMsdGV4dGFyZWE6Zm9jdXN7b3V0bGluZToxcHggZGFzaGVkIHZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTMpO291dGxpbmUtb2Zmc2V0OjNweH0gXG59YCxcblx0XHQwLFxuXHQpO1xufSBjYXRjaCAoZSkge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpLFxuXHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0ZSArIFwiXCIsXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wsIGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IFBhdGhmaW5kZXIgfSBmcm9tIFwiLi4vLi4vZGF0YS9wYXRoZmluZGVyLm1qc1wiO1xuaW1wb3J0IHsgZ2V0TGlua2VkT2JqZWN0cywgaGFzT2JqZWN0TGluayB9IGZyb20gXCIuLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnRVcGRhdGVyTGlua1N5bWJvbCB9IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdEN1c3RvbUVsZW1lbnQsXG5cdGF0dHJpYnV0ZU9ic2VydmVyU3ltYm9sLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IGZpbmRFbGVtZW50V2l0aFNlbGVjdG9yVXB3YXJkcyB9IGZyb20gXCIuLi8uLi9kb20vdXRpbC5tanNcIjtcbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgT2JzZXJ2ZXIgfSBmcm9tIFwiLi4vLi4vdHlwZXMvb2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQgeyBjbG9uZSB9IGZyb20gXCIuLi8uLi91dGlsL2Nsb25lLm1qc1wiO1xuaW1wb3J0IHtcblx0QVRUUklCVVRFX0RBVEFTT1VSQ0VfU0VMRUNUT1IsXG5cdEFUVFJJQlVURV9EQVRBVEFCTEVfSU5ERVgsXG59IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IERhdGFzb3VyY2UgfSBmcm9tIFwiLi9kYXRhc291cmNlLm1qc1wiO1xuaW1wb3J0IHsgRGF0YXNldFN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L2RhdGFzZXQubWpzXCI7XG5pbXBvcnQge1xuXHRoYW5kbGVEYXRhU291cmNlQ2hhbmdlcyxcblx0ZGF0YXNvdXJjZUxpbmtlZEVsZW1lbnRTeW1ib2wsXG59IGZyb20gXCIuL3V0aWwubWpzXCI7XG5pbXBvcnQgeyBGb3JtU3R5bGVTaGVldCB9IGZyb20gXCIuLi9zdHlsZXNoZWV0L2Zvcm0ubWpzXCI7XG5cbmV4cG9ydCB7IERhdGFTZXQgfTtcblxuLyoqXG4gKiBUaGUgZGF0YSBzZXQgY29tcG9uZW50IGlzIHVzZWQgdG8gc2hvdyB0aGUgZGF0YSBvZiBhIGRhdGEgc291cmNlLlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWFnZXMvZGF0YXNldC5wbmdcIj5cbiAqXG4gKiBZb3UgY2FuIGNyZWF0ZSB0aGlzIGNvbnRyb2wgZWl0aGVyIGJ5IHNwZWNpZnlpbmcgdGhlIEhUTUwgdGFnIDxtb25zdGVyLWRhdGFzZXQgLz5gIGRpcmVjdGx5IGluIHRoZSBIVE1MIG9yIHVzaW5nXG4gKiBKYXZhc2NyaXB0IHZpYSB0aGUgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItZGF0YXNldCcpO2AgbWV0aG9kLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxtb25zdGVyLWRhdGFzZXQ+PC9tb25zdGVyLWRhdGFzZXQ+XG4gKiBgYGBcbiAqXG4gKiBPciB5b3UgY2FuIGNyZWF0ZSB0aGlzIEN1c3RvbUNvbnRyb2wgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdDpcbiAqXG4gKiBgYGBqc1xuICogaW1wb3J0ICdAc2NodWthaS9jb21wb25lbnQtZGF0YXRhYmxlL3NvdXJjZS9kYXRhc2V0Lm1qcyc7XG4gKiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWRhdGFzZXQnKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBCb2R5IHNob3VsZCBoYXZlIGEgY2xhc3MgXCJoaWRkZW5cIiB0byBlbnN1cmUgdGhhdCB0aGUgc3R5bGVzIGFyZSBhcHBsaWVkIGNvcnJlY3RseS5cbiAqXG4gKiBgYGBjc3NcbiAqIGJvZHkuaGlkZGVuIHtcbiAqICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBzdGFydHVtbCBkYXRhc2V0LnBuZ1xuICogc2tpbnBhcmFtIG1vbm9jaHJvbWUgdHJ1ZVxuICogc2tpbnBhcmFtIHNoYWRvd2luZyBmYWxzZVxuICogSFRNTEVsZW1lbnQgPHwtLSBDdXN0b21FbGVtZW50XG4gKiBDdXN0b21FbGVtZW50IDx8LS0gRGF0YVNldFxuICogQGVuZHVtbFxuICpcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIGRhdGEgc2V0XG4gKi9cbmNsYXNzIERhdGFTZXQgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2NvbXBvbmVudHMvZGF0YXNldEBAaW5zdGFuY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgZGV0ZXJtaW5lcyB3aGljaCBhdHRyaWJ1dGVzIGFyZSB0byBiZSBtb25pdG9yZWQgYnkgYGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpYC5cblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nW119XG5cdCAqIEBzaW5jZSAxLjE1LjBcblx0ICovXG5cdHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuXHRcdGNvbnN0IGF0dHJpYnV0ZXMgPSBzdXBlci5vYnNlcnZlZEF0dHJpYnV0ZXM7XG5cdFx0YXR0cmlidXRlcy5wdXNoKEFUVFJJQlVURV9EQVRBVEFCTEVfSU5ERVgpO1xuXHRcdHJldHVybiBhdHRyaWJ1dGVzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIEhUTUwgdGFnLCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKiBAcHJvcGVydHkge29iamVjdH0gZGF0YXNvdXJjZSBUaGUgZGF0YXNvdXJjZVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gZGF0YXNvdXJjZS5zZWxlY3RvciBUaGUgc2VsZWN0b3Igb2YgdGhlIGRhdGFzb3VyY2Vcblx0ICogQHByb3BlcnR5IHtvYmplY3R9IG1hcHBpbmcgVGhlIG1hcHBpbmdcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IG1hcHBpbmcuZGF0YSBUaGUgZGF0YVxuXHQgKiBAcHJvcGVydHkge251bWJlcn0gbWFwcGluZy5pbmRleCBUaGUgaW5kZXhcblx0ICogQHByb3BlcnR5IHtBcnJheX0gZGF0YSBUaGUgZGF0YVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdGNvbnN0IG9iaiA9IE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdH0sXG5cblx0XHRcdGRhdGFzb3VyY2U6IHtcblx0XHRcdFx0c2VsZWN0b3I6IG51bGwsXG5cdFx0XHR9LFxuXG5cdFx0XHRtYXBwaW5nOiB7XG5cdFx0XHRcdGRhdGE6IFwiZGF0YXNldFwiLFxuXHRcdFx0XHRpbmRleDogMCxcblx0XHRcdH0sXG5cblx0XHRcdGZlYXR1cmVzOiB7XG5cdFx0XHRcdC8qKlxuXHRcdFx0XHQgKiBAc2luY2UgMy43MC4wXG5cdFx0XHRcdCAqIEB0eXBlIHtib29sZWFufVxuXHRcdFx0XHQgKi9cblx0XHRcdFx0cmVmcmVzaE9uTXV0YXRpb246IHRydWUsXG5cdFx0XHR9LFxuXG5cdFx0XHQvKipcblx0XHRcdCAqIEBzaW5jZSAzLjcwLjBcblx0XHRcdCAqIEB0eXBlIHtib29sZWFufVxuXHRcdFx0ICovXG5cdFx0XHRyZWZyZXNoT25NdXRhdGlvbjoge1xuXHRcdFx0XHRzZWxlY3RvcjogXCJpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYVwiLFxuXHRcdFx0fSxcblxuXHRcdFx0ZGF0YToge30sXG5cdFx0fSk7XG5cblx0XHR1cGRhdGVPcHRpb25zRnJvbUFyZ3VtZW50cy5jYWxsKHRoaXMsIG9iaik7XG5cdFx0cmV0dXJuIG9iajtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItZGF0YXNldFwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgY3JlYXRlZC5cblx0ICogQHNpbmNlIDMuNzAuMFxuXHQgKiBAcmV0dXJuIHtEYXRhU2V0fVxuXHQgKi9cblx0cmVmcmVzaCgpIHtcblx0XHQvLyBtYWtlcyBzdXJlIHRoYXQgaGFuZGxlRGF0YVNvdXJjZUNoYW5nZXMgaXMgY2FsbGVkXG5cdFx0dGhpcy5zZXRPcHRpb24oXCJkYXRhXCIsIHt9KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlPHVua25vd24+fVxuXHQgKi9cblx0d3JpdGUoKSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGlmICghdGhpc1tkYXRhc291cmNlTGlua2VkRWxlbWVudFN5bWJvbF0pIHtcblx0XHRcdFx0cmVqZWN0KG5ldyBFcnJvcihcIk5vIGRhdGFzb3VyY2VcIikpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGludGVybmFsVXBkYXRlQ2xvbmVEYXRhID0gdGhpcy5nZXRJbnRlcm5hbFVwZGF0ZUNsb25lRGF0YSgpO1xuXHRcdFx0aWYgKCFpbnRlcm5hbFVwZGF0ZUNsb25lRGF0YSkge1xuXHRcdFx0XHRyZWplY3QobmV3IEVycm9yKFwiTm8gdXBkYXRlIGRhdGFcIikpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGludGVybmFsRGF0YSA9IGludGVybmFsVXBkYXRlQ2xvbmVEYXRhPy5bXCJkYXRhXCJdO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRpbnRlcm5hbERhdGEgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0XHRpbnRlcm5hbERhdGEgPT09IG51bGwgfHxcblx0XHRcdFx0aW50ZXJuYWxEYXRhID09PSBcIlwiXG5cdFx0XHQpIHtcblx0XHRcdFx0cmVqZWN0KG5ldyBFcnJvcihcIk5vIGRhdGFcIikpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHF1ZXVlTWljcm90YXNrKCgpID0+IHtcblx0XHRcdFx0Y29uc3QgcGF0aCA9IHRoaXMuZ2V0T3B0aW9uKFwibWFwcGluZy5kYXRhXCIpO1xuXHRcdFx0XHRjb25zdCBpbmRleCA9IHRoaXMuZ2V0T3B0aW9uKFwibWFwcGluZy5pbmRleFwiKTtcblxuXHRcdFx0XHRsZXQgcGF0aFdpdGhJbmRleDtcblxuXHRcdFx0XHRpZiAoaXNTdHJpbmcocGF0aCkgJiYgcGF0aCAhPT0gXCJcIikge1xuXHRcdFx0XHRcdHBhdGhXaXRoSW5kZXggPSBwYXRoICsgXCIuXCIgKyBpbmRleDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRwYXRoV2l0aEluZGV4ID0gU3RyaW5nKGluZGV4KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IGRhdGEgPSB0aGlzW2RhdGFzb3VyY2VMaW5rZWRFbGVtZW50U3ltYm9sXT8uZGF0YTtcblx0XHRcdFx0aWYgKCFkYXRhKSB7XG5cdFx0XHRcdFx0cmVqZWN0KG5ldyBFcnJvcihcIk5vIGRhdGFcIikpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IHVucmVmID0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG5cdFx0XHRcdGNvbnN0IHJlZiA9IEpTT04ucGFyc2UodW5yZWYpO1xuXG5cdFx0XHRcdG5ldyBQYXRoZmluZGVyKHJlZikuc2V0VmlhKHBhdGhXaXRoSW5kZXgsIGludGVybmFsRGF0YSk7XG5cblx0XHRcdFx0dGhpc1tkYXRhc291cmNlTGlua2VkRWxlbWVudFN5bWJvbF0uZGF0YSA9IHJlZjtcblxuXHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyByZXNwb25zaWJsZSBmb3IgYXNzZW1ibGluZyB0aGUgY29tcG9uZW50LlxuXHQgKlxuXHQgKiBJdCBjYWxscyB0aGUgcGFyZW50J3MgYXNzZW1ibGUgbWV0aG9kIGZpcnN0LCB0aGVuIGluaXRpYWxpemVzIGNvbnRyb2wgcmVmZXJlbmNlcyBhbmQgZXZlbnQgaGFuZGxlcnMuXG5cdCAqIElmIHRoZSBgZGF0YXNvdXJjZS5zZWxlY3RvcmAgb3B0aW9uIGlzIHByb3ZpZGVkIGFuZCBpcyBhIHN0cmluZywgaXQgc2VhcmNoZXMgZm9yIHRoZSBjb3JyZXNwb25kaW5nXG5cdCAqIGVsZW1lbnQgaW4gdGhlIERPTSB1c2luZyB0aGF0IHNlbGVjdG9yLlxuXHQgKlxuXHQgKiBJZiB0aGUgc2VsZWN0b3IgbWF0Y2hlcyBleGFjdGx5IG9uZSBlbGVtZW50LCBpdCBjaGVja3MgaWYgdGhlIGVsZW1lbnQgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGBEYXRhc291cmNlYCBjbGFzcy5cblx0ICpcblx0ICogSWYgaXQgaXMsIHRoZSBjb21wb25lbnQncyBgZGF0YXNvdXJjZUxpbmtlZEVsZW1lbnRTeW1ib2xgIHByb3BlcnR5IGlzIHNldCB0byB0aGUgZWxlbWVudCwgYW5kIHRoZSBjb21wb25lbnRcblx0ICogYXR0YWNoZXMgYW4gb2JzZXJ2ZXIgdG8gdGhlIGRhdGFzb3VyY2UncyBjaGFuZ2VzLlxuXHQgKlxuXHQgKiBUaGUgb2JzZXJ2ZXIgaXMgYSBmdW5jdGlvbiB0aGF0IGNhbGxzIHRoZSBgaGFuZGxlRGF0YVNvdXJjZUNoYW5nZXNgIG1ldGhvZCBpbiB0aGUgY29udGV4dCBvZiB0aGUgY29tcG9uZW50LlxuXHQgKiBBZGRpdGlvbmFsbHksIHRoZSBjb21wb25lbnQgYXR0YWNoZXMgYW4gb2JzZXJ2ZXIgdG8gaXRzZWxmLCB3aGljaCBhbHNvIGNhbGxzIHRoZSBgaGFuZGxlRGF0YVNvdXJjZUNoYW5nZXNgXG5cdCAqIG1ldGhvZCBpbiB0aGUgY29tcG9uZW50J3MgY29udGV4dC5cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cblx0XHRpbml0RXZlbnRIYW5kbGVyLmNhbGwodGhpcyk7XG5cblx0XHRpZiAoIXRoaXNbZGF0YXNvdXJjZUxpbmtlZEVsZW1lbnRTeW1ib2xdKSB7XG5cdFx0XHRjb25zdCBzZWxlY3RvciA9IHRoaXMuZ2V0T3B0aW9uKFwiZGF0YXNvdXJjZS5zZWxlY3RvclwiKTtcblxuXHRcdFx0aWYgKGlzU3RyaW5nKHNlbGVjdG9yKSkge1xuXHRcdFx0XHRjb25zdCBlbGVtZW50ID0gZmluZEVsZW1lbnRXaXRoU2VsZWN0b3JVcHdhcmRzKHRoaXMsIHNlbGVjdG9yKTtcblx0XHRcdFx0aWYgKGVsZW1lbnQgPT09IG51bGwpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgc2VsZWN0b3IgbXVzdCBtYXRjaCBleGFjdGx5IG9uZSBlbGVtZW50XCIpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIERhdGFzb3VyY2UpKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInRoZSBlbGVtZW50IG11c3QgYmUgYSBkYXRhc291cmNlXCIpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpc1tkYXRhc291cmNlTGlua2VkRWxlbWVudFN5bWJvbF0gPSBlbGVtZW50O1xuXHRcdFx0XHRlbGVtZW50LmRhdGFzb3VyY2UuYXR0YWNoT2JzZXJ2ZXIoXG5cdFx0XHRcdFx0bmV3IE9ic2VydmVyKGhhbmRsZURhdGFTb3VyY2VDaGFuZ2VzLmJpbmQodGhpcykpLFxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIHNlbGVjdG9yIG11c3QgYmUgYSBzdHJpbmdcIik7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0dGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5yZWZyZXNoT25NdXRhdGlvblwiKSAmJlxuXHRcdFx0dGhpcy5nZXRPcHRpb24oXCJyZWZyZXNoT25NdXRhdGlvbi5zZWxlY3RvclwiKVxuXHRcdCkge1xuXHRcdFx0aW5pdE11dGF0aW9uT2JzZXJ2ZXIuY2FsbCh0aGlzKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiBbQ1NTU3R5bGVTaGVldF1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiBbRm9ybVN0eWxlU2hlZXQsIERhdGFzZXRTdHlsZVNoZWV0XTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudEhhbmRsZXIoKSB7XG5cdHRoaXNbYXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2xdW0FUVFJJQlVURV9EQVRBVEFCTEVfSU5ERVhdID0gKCkgPT4ge1xuXHRcdGNvbnN0IGluZGV4ID0gdGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0RBVEFUQUJMRV9JTkRFWCk7XG5cdFx0aWYgKGluZGV4KSB7XG5cdFx0XHR0aGlzLnNldE9wdGlvbihcIm1hcHBpbmcuaW5kZXhcIiwgcGFyc2VJbnQoaW5kZXgsIDEwKSk7XG5cdFx0fVxuXHR9O1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICovXG5mdW5jdGlvbiB1cGRhdGVPcHRpb25zRnJvbUFyZ3VtZW50cyhvcHRpb25zKSB7XG5cdGNvbnN0IGluZGV4ID0gdGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0RBVEFUQUJMRV9JTkRFWCk7XG5cblx0aWYgKGluZGV4ICE9PSBudWxsICYmIGluZGV4ICE9PSB1bmRlZmluZWQpIHtcblx0XHRvcHRpb25zLm1hcHBpbmcuaW5kZXggPSBwYXJzZUludChpbmRleCwgMTApO1xuXHR9XG5cblx0Y29uc3Qgc2VsZWN0b3IgPSB0aGlzLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfREFUQVNPVVJDRV9TRUxFQ1RPUik7XG5cblx0aWYgKHNlbGVjdG9yKSB7XG5cdFx0b3B0aW9ucy5kYXRhc291cmNlLnNlbGVjdG9yID0gc2VsZWN0b3I7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpbml0TXV0YXRpb25PYnNlcnZlcigpIHtcblx0Y29uc3QgY29uZmlnID0geyBhdHRyaWJ1dGVzOiBmYWxzZSwgY2hpbGRMaXN0OiB0cnVlLCBzdWJ0cmVlOiB0cnVlIH07XG5cblx0Y29uc3QgY2FsbGJhY2sgPSAobXV0YXRpb25MaXN0LCBvYnNlcnZlcikgPT4ge1xuXHRcdGlmIChtdXRhdGlvbkxpc3QubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0bGV0IGRvbmVGbGFnID0gZmFsc2U7XG5cdFx0Zm9yIChjb25zdCBtdXRhdGlvbiBvZiBtdXRhdGlvbkxpc3QpIHtcblx0XHRcdGlmIChtdXRhdGlvbi50eXBlID09PSBcImNoaWxkTGlzdFwiKSB7XG5cdFx0XHRcdGZvciAoY29uc3Qgbm9kZSBvZiBtdXRhdGlvbi5hZGRlZE5vZGVzKSB7XG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0bm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmXG5cdFx0XHRcdFx0XHRub2RlLm1hdGNoZXModGhpcy5nZXRPcHRpb24oXCJyZWZyZXNoT25NdXRhdGlvbi5zZWxlY3RvclwiKSlcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdGRvbmVGbGFnID0gdHJ1ZTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChkb25lRmxhZykge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGRvbmVGbGFnKSB7XG5cdFx0XHR0aGlzLnJlZnJlc2goKTtcblx0XHR9XG5cdH07XG5cblx0Y29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihjYWxsYmFjayk7XG5cdG9ic2VydmVyLm9ic2VydmUodGhpcywgY29uZmlnKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udHJvbFwiIHBhcnQ9XCJjb250cm9sXCI+XG4gICAgICAgICAgICA8c2xvdD48L3Nsb3Q+XG4gICAgICAgIDwvZGl2PlxuICAgIGA7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChEYXRhU2V0KTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIDIwMjQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICovXG5cbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0VSUk9STUVTU0FHRSB9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBGb3JtU3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgRm9ybVN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRGb3JtU3R5bGVTaGVldC5pbnNlcnRSdWxlKFxuXHRcdGBcbkBsYXllciBmb3JtIHsgXG4uYmxvY2t7ZGlzcGxheTpibG9ja30uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmdyaWR7ZGlzcGxheTpncmlkfS5pbmxpbmUtZ3JpZHtkaXNwbGF5OmlubGluZS1ncmlkfS5mbGV4e2Rpc3BsYXk6ZmxleH0uaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleH0uaGlkZGVuLC5oaWRlLC5ub25le2Rpc3BsYXk6bm9uZX0udmlzaWJsZXt2aXNpYmlsaXR5OnZpc2libGV9LmludmlzaWJsZXt2aXNpYmlsaXR5OmhpZGRlbn0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMywubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLTB7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1zdHlsZTpub25lO2JvcmRlci13aWR0aDowfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0yLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMywubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0yLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0zLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9aW5wdXQsbWV0ZXIscHJvZ3Jlc3Msc2VsZWN0LHRleHRhcmVhe2FjY2VudC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXdpZHRoKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOjEwMCU7bWFyZ2luOjA7b3V0bGluZTpub25lfWlucHV0LHNlbGVjdCx0ZXh0YXJlYXtoZWlnaHQ6LW1vei1maXQtY29udGVudDtoZWlnaHQ6Zml0LWNvbnRlbnQ7cGFkZGluZzouNHJlbSAuNnJlbX10ZXh0YXJlYXttaW4taGVpZ2h0OjZyZW07cmVzaXplOnZlcnRpY2FsfWlucHV0W3R5cGU9Y29sb3Jde2hlaWdodDoycmVtO21hcmdpbjowO3BhZGRpbmc6LjFyZW07d2lkdGg6MnJlbX1pbnB1dDpob3Zlcjpub3QoW3R5cGU9cmFkaW9dKTpub3QoW3R5cGU9Y2hlY2tib3hdKTpub3QoW3R5cGU9cmFuZ2VdKSxzZWxlY3Q6aG92ZXIsdGV4dGFyZWE6aG92ZXJ7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMik7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC44cyxjb2xvciAuMjVzIC4wODMzMzMzMzMzc31pbnB1dDpmb2N1cyxzZWxlY3Q6Zm9jdXMsdGV4dGFyZWE6Zm9jdXN7b3V0bGluZToxcHggZGFzaGVkIHZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTMpO291dGxpbmUtb2Zmc2V0OjNweH1AZm9udC1mYWNle2ZvbnQtZGlzcGxheTpzd2FwO2ZvbnQtZmFtaWx5OlJhbGV3YXk7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6MzAwO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi94LWZvbnQtd29mZjI7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R01nQUJBQUFBQUZKNEFCSUFBQUFBdDNBQUFGSVFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdvRThHKzQ2SElVOEJtQS9VMVJCVkVRQWhRZ0lnUW9KbnhRUkNBcUJ1Z3lCbW5BTGhDSUFBVFlDSkFPSVFBUWdCWVVVQnlBTWd4d2JmYVFYYUplZm1OejBab2wzdjYwY1BlWk1wRzRISlNqazVxSUlOZzZDR01nbFpmLy9uM0Ywak9HR0RSQTFyWGVJbmNKSVVrTkhHbjY5cU1SRFU4WmFqanM5VWJzbXRucW5FM3YzdnFpUW1mUlFwTGtLVzZRWndhbDZzNUlVaUpOVVNVRy9Pd29EWTZCNjc1T2pTamtEU1NNdTJwZWRwdTl2SklMVWxKZDcwN0QrZUxIcGpZREk0ZTF1RG5MakhIdnhwRFhHTXlkdUxMbjFxdDBGQ1FPeUZzSlpFMStrSnEzVCtJZTdCSkZJTk9BTmJpOXZUVXpoSTdXNEdtVUwwbFdqVC9GUVFpL20rK3h1UFAwMm9tUkhlNXBuNERnZk5aZm4rUjl6OTc5dG1FZU5hcTFSeFJxSFRqVFBOQTJKRkVnckhkby9udC9XLzV6YmdHQ3hpYTZFa1ZpQTJGaFlHSXRSbUUxWnZWVXZxdFN0YjdNdnJkM1c3K3QyKzBYZG9Ubnp6allicDdtU0hMQUNraE1XZ0NUTDZzMFd2MEFVb2hKZkVxRTNvcFBkNThpa0puS2xvKzN1YWVTSFlKNmZjSWNYamQrcktVRXNhRWxUcWxVbFZSbS9OK2UvOGlQMEw1QUtvek5sSjMvOWlCd3NoTTZ2NUpJVUp5a2dUM2Zkck9tcTZMY3MrWitxL1hzQVhGeEVFaVFJVWFLb3NGbjdjdFQrN0JCUzVkcURvbEpYdW5ibDdydHR6RC92Mzg0TGZ0SmFnRkZBTFlQRTVBN2duTXJaQmh0NGxYcXNiWkttYmRxMFR0T21wbWdOaXVnTTJQWUJjNzNNcmpxN0dMc29YSGNUcHQ5dVB2RkR6OGVOM2crc3hyUFFBdzZEVEZOcC9PWkk5aWluTml0WmhSbXBRT0NrZG9CZEFOalZXbGF2TWl0d0ROSlgvcFlJQWtWd25PUC92VzV4em9NdzdTQUZBS1UrWnova25QL1o5aitPZGZyTDhLZTJ2ZEtibXBodXhKU3VMOEVVQWdnSElpQkhQKzQ0NEVEenYxUFRRM1lrT2NPU2xUSG1qNlVzZGZvMkwrL2pwWWU3SUhXY1FVZ2Nna3BMRlIxWVRXOENHS1FYOWI4R0ZBQUFIOXRvNFJIUTZHTHZGUnJpNERpd1R6QUFERE1LRFByL2ZaM1YvcWRnUG1rR3pLVEVtV0VYYjdRM3R0Z1RZcW8yblA2Lys5N1hmK0YvOUpIQVZzSUljQUNCWndSeWtHVDdnQ1I4Vm9oSmNVT09TRGppU2JBcGhNb3ptMkpScHRCdFVXNjlYYk5GRzNJVnkyS0xvazQ4L0xmc201MjdJYXFCTE11QmJPRkl3ZUZVZDAxdmVMK1k4eFdodHpjcVRtMkNJVGM1ZUxKd1NJNGZZbExZRklWSEFzLy9UNTNONC9ZeDFoS0dVK0hTcUVyZHBQUG5zNmZxcVdKc05iWmFDbFF0amxPTFVNc2hjZG9BNVRRc3M0SkxjOTBTeENPTU1VSzRLUDlOc2hwenBYNHZ3eEtDaENBU1JFUkUvTEtzV1JsSndOS0FjVG5YQWhFeTNyMUtIY1phL1lkWDU4NDIwL2lhWG10R2hvQ0FpSWlBUjIzdi9QOStLVEFDQU41aGRrQzN4VUM0RUxzZ2d2a1Iya3JFallTRXYwQktTbUhDaEl2WU9DQUprS1FneVlNTTJRb1VNekNvMTZCSjg1cUFXQ0NkSGVrM0FCME9ETDFMcTBQZ1RlM2hTdzJmaGk0WGhQdWV1UVdFSDZ4dElFUUFiRzJObTVvVjU0UUZQK3lLZ08yRDRUNXQvd3oyWFc5Mi9ycHFwTFRTSVA4cVY5dkx2T2RzME5MV3lYNTFLNm9mYnZQWkUxcGFmN3czMThDOVp0aHE3ZjMyYmZ1TDY0VlpIdzUxNFlzbTVsZ2ZOYmZHN1c5bHNVQTRFR3o3MjN2eHdHenA0ZlJSK21QOExzNUI3S0IyZURKWGM2eHdsRzY5MDJ1ZzdBekxBOE5ZMjFCMmRCL1A1cWZPVjh0MW9ueUw1alpERGZRSTVSZzhEOThGdkhzdmNsSHVKc3JkdnNKcnBjL1RyL2d1L0VmWkp6WFV6cFdhRGo3TTcrVVA4LzhFa0FBVmFBUy9DUitYcy9KTjRZYUljTzF4SFpjVWFNTWJrbHJwS3k3TmZRSktRY1VSYWdvR21DVytIQTZFTnZiZzMzc2wycElZUm1FOWJJSGIwbUE2a2s2bE41R2R5TU41RWJtUWh4SEtsd01nVDU4Y2d3N3BkVVJ6N25mTWNRZmNVM3ZJY3pWa2RyaFg4WEhxNDAxMnRGT2Q3a1QvYTdwN204M1dBNzFGN2FPOU0rZGp2ZGQ2ajdmeG0rRDFQdTN6M3VpcnZtdXl6YTUzdHJ2OTNsVGI4MlJUMkthRlZVS01OUDM2QnZRTUNvMEdzRWRrTDhzK3pMZzFFeGJNME5nQ1dBeGd6ZjgyREcxS1hNZmM0cmpOY1FmSEt4U0N1UnVCSTVBb2RERERrR2RWOENuVlZFbUVNYWluNFNhMEFYVEkwUkJOcE9ZQUxWcTFhVjl2eEppVXpIS1dDaXM2bXAwQnVreDA2OUdyNzRzblZOYnNvQ21rVk1vcDUrcERHYVd6MnNMRHIyaU50K29aTzBiMzZZU0lqV2N4dm5sTjB4MFZobFlvVzRVUmpYWEt5TEczWTNxb0xkRWF6SEFFRW9WdU1sM0REZUVSVnBHL2plVEVSMENVWkVVMW1vdHFGb2l3SkZLVWFERmlhY1NsQkpyRWpTUUtKL0NTRlNtU0trMTYxUWxrZEtleVNYWXpzZFhLaTZJOWlrTkpNdENVS2xPdVFxVXExVkhUMXpxNitsemZRTkFJYTVKcFJvdldhRVA3Wnh1Tm1Uak1MQll1cTNYVVRnTmRSRGQ2VXE5QTMzY2J4QXp4RERPTjBJeGFOVmF4ZC8vcy9hanhBRTZKblBiRkdaa3VDM3VhTlU4RXNEU0xaVm14T2oxUGQ4SFF4WFNwZWRrWGF3Ylc2d1pvOCs2RHJpdVFGRnc1SXB2bkpoNi9aZ0ZKSzkzMGFFTTJYSjN5SkIwREhvcGhicWcwdXJrdk1JZ1lsdGJHUlBjZGtkN1ZqL05WNHBiQWJhKy9FNEJqQ2c5cDVaZXJpL3BkTTBDRy83dFhaTnhWRSs2YllhdlFuNnVtV3d5M0ZYZjZnZytYbkF0SERnamtQTmlVYnFwb3d2RFV2YlJsY2o1WFpIWXpWOEppNE5sMXZqc09ock1heE9IeGVEd2Vqei9WSUhKWG42SDB3aGc2cUZPRVVxUW8wV0xFMG9oTENUS0oweVE1TFU5eVJRcFNwVWxmWm5BU0JrV3BsQ2xYb1ZLVjZxaWJUQnRNbVFLWVlXSFZVVWZ0R0l0NjJsZG5NSDNFcGlVMHFWUXFIYkNMeE9VK0U0LzFYTGZCRWh6S2hnVWNnVVNoZnh3bUR6OUc1RVJBQUhMN0ZIUktReXJud3V4UWY1cmhIQkVCUklvU0xVWXN6VWJjNHJ0TWRwbDI2RmdkNTV0Z1FHOHgvZkFaMkp6SXZHYm1scmNYQW0zd1hLYTdFbGZQY1MydHhmcStlZ2ZpSEdvRE14eUJSS0h2eTNTSjMwUTZWOCs2bWRmWnNhRlYzZU9VS3NXTXlua2h5TDF1NFZJMEwxU0pMSXhYeVl6cEx5TnFpV3owWFRwa2FUeW4xWkR0aTkwbVkwMnYwdFVxdHpTQ2wrcXJLN3JJdXYxdjlSRDBzZ3hxR2JKb0dHZkVrbEUxWXpyMjhPMWwyS2V3WDlONEFEYU4xYjdMMElhUlRYT3V5OXlpdTgycE93SFFCQytwbGRDck9tSzBNZy9yMXZSWUVtM0RCRWNnVWVnbVV4MDNHNCt3aXRRZ09mRVJFQ1ZaVVkzbTR0bUVJdndVS1VxMEdMRTA0bElDVHVJMHlUcXRGY2xFQ2xLbFNhODZXRVozSkp2c0ZXaTdJeEtKT0J3T2g4UGhjRVRyUk4zdERwbE1KcE5oUklhaXFBaUdZUmdtY2Jrc3k0Tm96L3JvZlFMN0tjYWxORDBGT1czUkdadU9CUjJ4bVZNeGtVZ2tEbDBYN3VKaXV0UzhiTkdhRSt2L1pRT3dxZTg2R0lJZUVzQ3VvdldZZkNxMnR2cE1PQk43TXpPNjhHV1hMaHRtZ1cyZmZlSHAxTXU3cXdYNU5Ed1RrcENTY2VmQmt4ZHZmaW5BUklSSVVhTEZpS1VSbHhJQWlaRTByVnE2NUlvVVNaVW12ZXFVTXJwcy96MVpXRVo1WUJnR0FBQUFBQUNBMFdac2QxQ3ArSHcrbjIvY09sazRyRHBTbDFLM0hyMzZqZzFDVHR3ek9jTnVDWFlOZ2lEWWhvdEgxb2dPTFJTdXg4bmlsNHIyaVlhdjBub3J6WHZaMm5aalpMZmFLRCtWUmdIL2ZnTm1wa0ZiaGdpR2lVYWNHZlhObUs0OUZQdlk5dHZiY1RtNzUrM2ZkYW1XNllTdHdrZHphQ0haY3ZxMENTNGlVNVptTnhMWEdCZS9yUW9Iak1QMS9RRUdWTVpGSmdiRERKLzVUM2V5QmN2R1BTcVRpbUpjQytZUVVqcUd2Mm5DN3EzbkIwRE9xdjJHM1Z2bEloS0lXOE1SU0JTNnlaVGlOR0ZYK1JHQ0RIczhQWUlkVGpkQVVBeXZRa3dTQ3BwaE5kMjBtcHVNalFYS0JRa1dJalFwbUpSVUtZeEtYY0xEYzZrSWZIYVRLYU9NU2M0TXNWUllRMGV6VTZGTHBWdVAzdExIdXdwcllmdGhpd2lIRkFXa1NwbVdSdCs2bko2VTE4Q3V5Sjg1ajJ4MGIwZDdOOXBpYnEwbGI0Tm5VK3BPN3RFVUxpaGRVTzJocnB0Z1lYQ3N4QkZBM2xRMm5tRmMzRmJSakdCZ0NkNkJVSDdxblhCYmFjanNLOTlSZklETUFGa0Jzb08rblpnOFAwQkJnTUlBdFFFYW45V1FFczlNQUhORzg1NTR3YStBcm5xdlRUanBHUzdlL2lsUG1qQVJQbW5zeFdrZEFBUnlPTDl5QWh5bXg3U0dLbGs3R2g0OHZEdk5mZGcrSVRCWnBEOWd6Z01JQnd3Qms1dG1rRVhJcXFNTWFFVGcvSFVlMjZvTFRUcDR3NGc5VWtaNWJnYnhFSHRDeVRMWVBIbUpVcTN1SnBxenZTTmN1bWJCZFhZUXNrdTFDOTJOOGpUdkRGRVUwcnY4MTdnbXFzR2pQZlJ1Tmp2ZXJURG1IQ0U0cStxYnpPanVJSXZSYURoeloxL1ZKVXBoaGlPUUtIUXdzWjVUamd1QUI4Q3VLcitZSU1LZXdJb01PNXh4OWU0QUVCVERTWXBtMk9UeThvSW95WW9hamVqVVFiOEp3RC9YQjVpU3N3VWlnaEFzUkdoUzBDZ3pKelhNQ1RVMVhFWkhhVEFYVENRU2ljWGJZNFZDb1JnTEV4c3RsZEN0eFoxYVVubHV0R2h0T1F0MTgvUlVkVnBrREJ2YlM0bkVvTkZvTkJxTkZpZFhuMFdKTEpDclU4Q1VicXFNaFpHcG0rRjhFYkJJVWFMRmlLVVJseEtFRWlWVkxWTnlSZ3BTcFVtdnVnQVpoQUdseXBTclVLbEt0YnBtQTZ3clFMY2V2ZnFhRTdEVFdzNllIbTBFMmRjbGlXV3NXRTNubVM3RzViNnVHVm5Qbk51eXlXYkh3eERqcFdrNk0rajIwZVlNTFEvMDNWTW1LbTRabmdsSlNNbTQ4K0RKaXplL0tyZENrVk1sS3N5SW1tZVpmMEdReXdKQkVGeEMvcmdnQ0lJZ0NJSXo5MGJERXdNVGo4ZmpBVUF4ZFM2VnNEY3MxZzh3ZllDWHJOZDk4U0g4Z2FqazV2dVVQcWc0WERQOUptN29HV3ZHWHhTZEVMTGZyc0VTRXNtV1hUY00zY0x0SEZTR2JTSEJBamNDaVVJWEpxSG5NbE9MUkJMYXNuVUsyU3V4MXpxbk1CL1pNR094L3pQdThvaERBREFBT0FBQ0FBbUFBa0FEWUhnbENrQ3VMVkFpU0lLRkNQMGtoV05LUEZVd2JkeUwrc0RCeWVna2FKMldFTXRXckU2LzR2cFc3RzZlNG1EdzBCZnhaaEZ0OUd2ZmhQRUFteWQ0Y010VXFzUGw0YXk3R3VhazV0ME41Mk9Pd0phQmdTTkhzazJOaDdxRVdaWVZxOGUra3N4amozRUtTWGc4TE5pbFFxRlF6RTFmdjV0dnBRUUZ0RklteUx0aXZUZVdrUUNrNVpSZTJRaUoyWnJMWURWODZNQllXWDV4QVB1bmsxeW50WjJ4NmFiTnJpWEFzaFdyY2ZrVTYzeS9qL20rZ256TjhJM1l0eHpmQ2VPaUFQaTdZaDF3QkJLRnpzNzJXcmxpZldiM24rc09ta1NpelhIVFhwbXZBbk9nZWErN1M4RjFFSFA4blU0SW5GWTRRNW1XcDNCQUxsZXNhN0J6NEZ1T2JFNEVYUm5peWs4aHRDT2lrOHZsY3NXWUlLcjQvY0hNM1hYSWNjeU9Ec0JYSDlSM05JQmpVc2QxZmlkajBpaW5INXJpWmZVT0RUaUZRdWx6ZWF4NytqSFpWeXhmMzhVM3hMZHIrVTd1NDNINTlLZWdLOTVKdnd2eXFuM0lneEx5VUcyWTRRZ2tDdjFCVEQrSXZDTVBNZzBsVllSQm5TSVFrYUpFaXhGTEl5NGxDQ1QyaG0wc0VBZ0VKVERycWI0Z0oySllvelNVS1ZlaFVwWHFiTnJaK1poZWpiKzVySHJHemNjTFFoSlNNdTQ4ZVBMaXphL0t6UW5NQ0VLd0VLRkpZWUd5TnlLMWx0SlUvSjZXbUZ4VXFMc0luWFNzMzRzNEFKblROUDlKVjgxWlcwOGJ3b3h3ak1vR2crMWdQUHh3QU1lWmtCRUUrVnN1cHN4bzljV1M1aXZuYVNVcEZKUTFURWJ0ZXlLak1BTGxTUWg2UkszZ0NDUUszZVFVNGpiRUM3dXEvQXlDREh1Q0JRVHNjTWJWdXdNVUJCVERROXlRRk0yd3lSbnlFU3hLc3FKR1UzUmlFRFBYTDlEWjVGNElwQXVTWUNGQ2s4SUdaVk1GQ2RPa0x1RTFJS1ZGbEdneFltbkVOZU5CQ1ZTSmtuSkVqK1NNRkVtVkpyM3FtREtJekdsa1NiYmQ5SExrMWZ4KzNlK1ZDcG1Lb2hnbHlVQlZxa3k1Q3BXcVZLY2FVRzNVbGZwb2tNYmF4TkFzTFZxMWFVOUdJbE9mdkpsTXBwakpaREpiUmp0YU5Xay9yeldvTUlJYU5XZXNhdXQwM3lNTzJQeElJNk1CRTkxcWZvRHl4Q1N3Z0NPUUtIU1Q2UVZ1RGg1aEZYbHB0cmdNanlCS3NxSWFMMTdHY2RrQTU4QThnQ1kvMzJQTGJ3a25DUUJBTm10Q3c2Tm9CclZJcXpidE9Vc1dVNDA1bEN3WjF0RHg1cDFvN1RFZEpCZ1NHTDc3N0JFam85NGFvOW9qdEs5YnY1L2hBTThSYTQ2U2pnbWRlTHpORE1oaVVIbnU3UW1EREJaK0lVRmlUY0pvSGNsSWtTcE4rbVpHY1RjSDVJY0JwY3FVUjBXb1ZLVTY2cVozdXNlZ0YzbW4rYkZscmlxOUJtbW5WN1BiN0cwUnRDYXNPd0tRWkVnaDQ4NkRKeS9lL0o2SnJ6MnJ2ejExOFBrOFBwL1A1eS85TlBKaXI5Z0p3eWxLclV5NUNwV3FWRWZkVkZOdGhyV2dWWnYyWklTWWVyZUJvSmRIS2VhZWcwSjdVQmVxUjhTTzFhbjNwRkFNS0x3SXRWU0orK0ZtbmlIRXNGRVFXK3Bla29NNUhxZjUwbHhCTEx2OXpDTUFaVFBRMTduOVg1a0hGWDdjNlEySnZiK0tTSXNTTFVZc2piaG12SkVFV3hMSEpEWE1TSzVJa1ZScDBxdU9JS09Mekdsa1NiYmQ5SExreVZlZ01CVzVVS3drR1d3cFZhWmNoVXBWcXFPbWo5cDVxbE5UMy8vMXhzaUFSQ0tSU0FCQUJRREFnRUFnRUY0a2NIUEE0eS9mMm03WUdvNUFvdENWU1NJYVRlVkdGQUFseDFSSVpSdkdjNWowSkllb2N4enpwS3RjYXljeEkxaFN5Vis2MS9HQ3d1ekFNZlFNdzZMVEtkOG9zRkFjck5WRFBJZUZzNkxIRnhsTnl0aWVEamI4R09RUWJoU0l0ajAyZ0lnOE9WYlVmZ0YvR3RrYUNzTU1SeUJSNkQ1NW1jUGpMYllrSThKMHdKd1hmL00xbm85ZGpUVmRXaHBpRDRNamtDajBHWVk2a1kxTjVRNEVLZ1VoV0lqUXBOQ2piS29TQ05PaVhvWmJWRjkvenNMZEdZR2dWYk16d0p3ejgrbXFVMnNqWTFCcmNqbDNmRy9zZno2cTdvZzJZMzR2ZnBkVWhlL0NaMkhIOHlBQS94UThEM215QUlETkFWc0NBSmJabnhpMmNINXMyY1JKd1ZhT20yV1dzdFBHWnhZWkExS0lSN210M0F6QW10a0ZVSTVpbERjQW0yUXdvakZYQjZyM0lzQnlWcTVsK3ROYWJjdHJGK1FyQVErbGtpVVd6aUhHS1djNXUxRlVkTUtNaG54aXhuQVU0bGthQW5vL25odVNjRW5IclE2UUVkb1IyRklRNEdGbllIa2ZCZ0pUd05sNDJyUUg3ZFY2SUJLeDRHRElQVFNQQXRZSGN1YS9VemVQMWVwWkpOYXRPQVNxRkVRa1lDV1NqS29tY3ZKNFEvbFltUjZiV2lFV1dWSUZBTmFJVE9WdzJaVkh6cjVNekMvMGkvRDFrd0VXVkQvelQ5YjZERzYzMmlLNFVxQzdUUDJVTmJua0VZODY0WFlpS2xXK0JTM0ZVS3hIRFFZbys4Qjl5ejF3NGgwN0JhNFFra3pMMExHSkdJcnJaK2NOWHVCM1B3NmNlZHBBTVU2R3pSUXFEVzdudEIrY1dpc0Z5bzNXQ21RakwwTW1Yb0JxTldSRklaSTdnRFhodFNjdDhMcEJma0hzUlE2WHBWZklSdlpCVThwODVGNGhIOEVLbnhtRVltdStLNmNZWTNnUWUxKy9UekpBSVJGMWNLdk5tbjJRME04YU9Xc1hqVDlqdkJDcjUyMXhxdFdWSTZhcExwZWhLY3hadVc5QldMSjNRR3FmOUpUaXV2dlUwd2RnaHcvOElCUklYMVZ1TlF5c0JxU3RWTlBYWkR0TCtOaXZjd2kxUGdELzVPMG95bTJKKzc4b24wcnhnQTlPQ2xhMGdOMEpFUEhZL1lQNG5oSWF3YkVKMkhsVW5SOURiemZXTVBBdnhrcnRBMTR4NmpyQW1ZVWNnUmZSbFpubll4czJ5K293TER3a1MyVmszZGZqQUFVVklKZXdEMDZ0eitBdXc2cElxeFRsNGRtam9HbFlRWERNYjMxRkpQcys2N2o5Uk5nc0hZZ3d3T2NZdHVmSzZWaENMTXVjNE5GVGJ2OXBFUWpGTmpOcjBMV0FKQjNYR0htNHg3bkJSZlhtSFFoUTBienFtT3RWVG55ZVM2eDFIYkMvYXJqL1hlLzdxTU9sN00wZVVuRFBnaHlpc0Y4cUlvRmJoZkVncXlENG8zbzJLNVJMck1KWUNhQzVnckh3dXBETnNWb1hGSTMrOVdZUGExbHd2T3A5MWZ2YW5HaG9tSmlwOTd1cE5IbU9IK3liMStoTElwZGRyMjFSaUExM0ppYjc5azZwVEIzZEZBbzcxNHBRMXlSWmJUWE15ZEE3bVFFOVJGR2hML094ckhqZFJubzBYZGY5eUVlMG5YRmZPZXJ6WStETzNmaUJXQkZNQW1xRmJPZWdrQXFYVFZvNWZTNjZ5T0lWbExDU2RjcDY4dWU0eUplbGhVUHRVNlZtMmpuTkFQcXdXYU5ubnYxdzdKUDZ4UVphd1NJUGxPRk1FVUd1elBDQmIyZEpVeWdZNlE5d3I2SlVqSnI2TlpjYkVZd0wvY3haZmVjODJMT3NNSzQ5eFg2MjhQOE5xM1RERWNJQVBad3doTHc1OGhQS2s1SlNvREJKZ2lUTEVTdFBBNTBtN1NxWW1OU3g2Rk52MGlTalUwNHptVGJOWXM0Q3F6ZkpmbG1DL1laSmdOQndEQWFCaThlQkhUNUhBazRJUWtLdVJFUjJjZUhDalN0WFloSmVNTjY4RWZ6NHdmanpKeEVnZ0pTY25FeWdVQXdsSlhkaDFKeUVDK2NoZ2dZcFRoeEt2SGgyRWlSeWxpU0pwMlRwS0RvNlcyVElzRldtVEY2eTVFRHk1RU1LRlBCV3FCQmZrUklDQmxWbzFhcFJhdFN5VTZmT1Z2WHErV2pRd0ZlVEpuNmF0ZU13TWZGbjBjRmVwMDRCdW5UWm9sczNwRWNQdmw2OWtENTkrQ1pOMnVhVVU0Uk9PNDFyMmpTdU9mTjJXckJBNkUweVpNa000Ync1aHdzV25DNWFjcmhreGVteU5ac3JOdHl1MnZLNFpzZHR6WjdIT3N3R0V3dWhrUmlNN1RnNEVDNGVuQjFuaUpBUWJvdWRFQkdSSFZ5SUlSTGVjRDU4SVg3ODRQejVRd0lFMkVsT1RxUVJYSEFRMTZVNGhDN2dnQ0VBZzBZQUJ3b0tEcnVFbDYrR3FiRk5QTFdHQXhEQTIrMm1VU05PaUJnN3QwU2tTMzFveGVNa2pyRm4ySUlqSnpqTVNVaE91a2tvRUpTaWp5R2d4MklhLzlaYzAzYituOCtncWtnUzI4czc1NmNqVXAzendUcitSUGU2U2VybFVkVDVhZXVnZS9BSGdCejlGNGlud0U4cStINE92SVczOUZiZVdyeS9CcU12di9LU3VwaTlIa3JWZWZHNVo0SWF2Zmp5V3krcDRzVlh5aGVWVDVueElxL3pidmJqb3FYWDFaZTBoajBBWUZNUVpzMkJrQWdGSUdGd3hIWU5COVhkYW13cjNzNy9DSWZnWVppZmhUOWdhMTB5d3R6ZFpZL2hjbmVUWWEva2l6OEtDQm9yaEZaNGcxbFhCR0dXS0E3NTJFbElkOWFMSzRTRk5kVjMyOWJHN1JJSUtVNEdFdmhqcjhMVTF3akEyM3M5Qm1nYkdqUTk3b1VLd3FpT3Z5UFpFUklDS0l6QTZXVHBXUXdWNm9KbGUzVlRsajVUeVBLT2ptNE5idk9nL1Q5R1ZmeE5BOWhGaFFEU3cvZlJqcENGMlc4T0E2OGlDeVQrZjJIL0RHOEM2ZSttMXgvSUk4NzlOQTM1cndBQTY4UVdBWWdsVFRBc1lBQ0VxZU4rNm15M3dZb0E0RitqTm9XY05TOE9pYWpRUVA3eU1GYXdJalFSZ1NVTUxJMFE3bjFSQVg2UkY4WUtJSUpVb1ozeWdDK1EyUW9zQ2t0TzVsdU1IR1VhRTNlTGU4VmowaHFwV0FwSUVhbE9hcEc2cmRXKzdxUkFGY0NlWWlrQTRCUFRzTGgvd1VXZk9ieDlSNlU4cWZBNFNLbjVnN1lDWEFTUUNRQllOM2tBLy8xTjFmL2s2Uy8wWS8xb0JyNzRHWHh4KzJOZjB1Ky83Z3ZxQy9MenowRWY5T1JCcWpuMVBnTG9aUThiKzFaMGM4Z04vbC8yRFdmTm1mS3BYMTAzN3oyTHhuM2x0QlhUYkU1WjhJUHZmRy9HSm9TRHk0NkFNeFkyRGdFaEVURUpHU1VNVG9XZ3BrY3hNREo3MjRSMy9lSDE4U0NDUzRJa3lYUXlaTXFTcjBDaElzVU1hdFNwMTZCSk15TVRNNHRPYi9uTlczN3l2di81Mk9jKzhZWGYvVHN1M0xMTWVUOWJkWHQyY05ldlh2THlhUGpGRFUrTmdSY051T0IxcjNuRExCSUdSeU5RR0R4T3lqbW9WSU9MaDYrVUdBd0Frb1A4d0pPT2hoYkpCTlV2aHBVTkxacURVNkowS1ZLbHliT2JYZzZ0RWhWS2xhbFM3bHVWMnJWbzFjYXFWZ2R2bmFNUUNjdVdYSEhWNWNpNFdVUW1VbVUwTU1BbXRnUXNCU3p0RjNSYkJCZXdGSUF3NWw0MWlqY2JCbVFwNnkzQUVOdDgyZEFrd2p4bno3UDc4VlVVREIvVm11QWQreDU2Y1ArK3ZYdkdSa2VHaDFZc1g3WjB5ZWpJOE9LYkZ5MWNNRFE0TUgvZTNEbXorL3Q2ZTdxN09qdmEyM0t0TGRsTU9wVnNibXJjZ1dBMDdQY2VmZVRoaDdxZGRxdlp1UCt1ZEcyMWxzVEFQK2Z6NmRyMW1vcCswTEoxVEVnZ1M2Q3V2QzVveUFpdWIwMTNZUE1MYll6VGJPREFUWDVZRWlZeWNwVTVJVmNQZkpEbEorb091ZHN2TE9VeUNIQTBlcFNoUmQ0ZHVINEtnRXBNRU9XWkdiNUVGY01qVkprQlVCVUJSWmtBMlpLTlJzQU4xKzEweEs4dGk1THZ1OUNRT2Nad3hvYnRWSllTTllTRkkzL2V6d2lMSmRRRWxWQVZxYkZmVmo3R0ZZS1V3aUwyTTljU2RnTm04TEhjc0FJbHYzdCtwVHppa2dqUzhMaG5wUkE0eURwYk83QmNla2hMSVJ0eXJzbzNoT0ZiaVUyOUZnbUtZNUo4MnhSZDhxeWxzRldrRUgvYmFuOGxuRHYzWnk1ZTREVkdpWjNPUVJEQkQ0NjRYbldUbW9GRFI1MnVYSmt6bGZ5Q1JOMGpGVUxlcVpWTE5RRVhtVkVsRG90Wk5PZml6UTRSTGJpMEszVmZRaXVPS09FU01GVHYxM1R2aTZDVnlVN1d4TW1LVzNVYnREbW5JMTd5WDNIY253amdvZm9VNG1hU1VsTG5JUG9kMHc4eXY2Nm9XSU1kU2lHUFV2MnRnbUE0RWRhMTBGcm50UW0vZWx0aGZ3dWhBSFdLcytKcy8zenF0VHhTZmNaZFd2TUJrRWtvMk9XZDVoOFZ4a2wxd1EwdFdxZlh4am5iWFR3RHc1b21XWjVxZHZISURiS1l4eWc5NzBwSnZ6QXo4bjM1T0xSa2ZTYmREVHBaZ05NOWxRSm0yaVUzL0gwbmd4dkgyOWRBZVkyUURRdnhaNHpTaHBRYmhBakJtd1ZiSTdGN0l2SjdraU4xRkpHV051QW4wek1FeVJsMGgyTjE3SkNLaWdDUEtmeTluSE5PdHp3bkl6d21ndXZaWi9UTUJjUWxIQWZ3NUV4SERzWEd1RnVTZW8zeUNKblpSYjNXN1VmM2FOWjczRVlLN2tPU2xWSnN3WVl5SkN0Y0dNMUdyajk4Y25IaGtGbXU3UGRPd24xV3pSMGh4VG5SVThhQkpteHFIOXdRSUljL2ZVV0JIajhxcklTamJPMmhQVzdsUklhb0RKcEtwNldyVkhiMG9sNUxuS0x5RmoyVEhnbXk5NkFwWjYvbHExaU5QWTh2d0RLejVncytFL0NaSUNQd2NhY3FjblJpcjFSelBzbkNnUVZhZzVVTXJLR0o2eTQreVBZWkk3eWpLVEpLU1VONG9VVDdHVGRpeE8wRGtmY1RVZG1rYUJ6cVBiaTVTaUtmSmFKRERLWTFabDEydTFSQU9rd1NwN3pIbjZRa2FpcE5McjZFMHBIZ21JUTBPM3hCbldTeVkyMGN1SDJ6V1l4TlEzdzJtRndQOHhrNWNLZURzZFVha0tsTEhOSkc4czV4enloTnR0RUJpUkROUXNjQ2wydjJaQW4xQ2l0eE1FakxNd0c5cDFkRHRkcWl3SlROQ2ZMU3FSUzBBdFZ1cVFQSXNRQ1JaSW04eDY2SU53cFRDTUpDMnZZSHJOTVdNdzVUeEo0Vmk0SGdSUm9raWdGS1BUcG40NUpZZ3hxaDBib3FndUhQNklna1FUS1ZQcDlCbUN0eVNPSmQ2YnlFMGxRMWRua3RsY2lHVW1wUU85dEJuNkFCUkJ2WWJoL29YYXBuQ0M3NUdHSXhsOFcrWlpPam9IVWh1N05DMjVVSm9MZG92QzFWb0FpMkZBWHArTTROMUR5QXpVVWplU3Y1d0c3WmJmOUVjVDZqTWJzSjFCcFkvSnRvbDdOMGpwUWhnTGhjWWZZZVVaMkJYcUdVSDg1UThSUnR6MmZRZG56bmxsQjE4ZENETTNCTTBSVm1MWEdQRlZSakVkUWhMUDlEaUp2cE56b1VBdmVnOVpBTGZJalRWYjRldDV2UE05QVVWQzExSllCTXlFcEpvTGF3SFZzM0EwQ05EMGNnMi94blhKTitJSlc0QUtmMUdTVWEzVkJjdU1yWGxVWVR1Z1pvT3pQZldLUnVjOHFZTW1sT01Ld2w3eDBrS3Rzd2xmMlpSc3JqMWhnMnl6cUJhUGxBYU1sa1JDN3pHNFdhSGM4QUJybHkwbURWZ1BoS2c2MEtJR3NsbjFGRlFHb0JIWTFUR3Y5S2dKcDNWb28zT0JJdUE0ODVvcmgwYzBORzJMWDZ5U0E5c0djQmFuMlFob2JnbmlKNkZldHVLU0hYTHA1ZWNOMUZpMW8zTWdNbUtkdzBJckZoajgxS2lVTER2UkpESTVLU1VsS0FGSUt4VnpDdWdVeFhwR2daZkFnUEVFOTBOZXpLenB4dkhiUFRWcTJkT2FxODQyRU45dXlUeksyRll0K1dkUVpEZTRVYmVCMThzd3ZsUVVDaUZyYkwreUM3V3FselpPVWIyVnBZUVp1MW1QVWtUMlh5NzI2TmowZ3BVbW9FV0llci9GSmtna2diQUFMNERoLzBsbzVKREJNQzdrZzBEdHpQb2dGMEs3TFdMWFIwNlBFTjBvb0hIMWx1ZUprUURQSVdVNk1aTzZMYTJzZ3VuRjUwOEMybFlHWlBsY3gyWEoxdHVYRmJyZTUxQ0lVV1NoYjRmb2o2TGdHY21sZytVQ2lTaXhjSDlySjZUVEpkQUMyNEFwR2JzYTVoYS9OSXIraDlJZWFYSUNpWnU4QzRKTHpXVDdnS1lUNzYzOStBQWpMbHBwZFhBTGJtdC96Y2RaOG5mSS9zd1hOYlpkdzltUjFTTzdJZmdaS0MvNE1Dd3BDdzVzRDFqNDB3SXViZHRwQk5jc1ZIbXVVUHZoYWtzeE05RjhCTGtzUTM2TS9CT0pBUXQ4VEJCU1ViU29qd0szMkVZYmVRcnp1WUdhOW5XRmhPS1RsUUJ3OUNGajlqVEc0SjNOZ0R2ZXVBZzFVT2hiNEtBcDlwSGdhTUpLYjBTbG9MN0RvZEhzTGpwdFhoa3ZPYWFvZTBDSGpEVTZ0a0tDQjQyZ1pKelJEY1BvMnhOZUpyWkR4Y1hlVjNWMjhKd2swSEpoVTA4THRHRFFNcUtPUDNUR29BSTZZbmJFa1J3RFJrM080a2k2MUlucVQ4MTJ4S2JpaW9CTUdFNURMcE1LcmlPcG92Rkx0YkllOXhxTXEvU1RZc3kwWlFGNXlhWmF2cC9hK0g3dWJEbnBTc2lCd0pGYWdCTWk3d1ZXYzdVSHFsbXczZmNMdnZtblZSU0ZZUlFFbmd4bkh2dXg4UTFDVjdBSUF1QUlEZEFIMUErTHdnK2dIZ1A0QzlRTGdCQU5hZXZPVHdvcU1IVW9OZ21WbUV5REk3THJ4TEhEWFhFazdaQU1JOXpPYkd5Q0dEYms2RzVVZ25UcFBjMytqWlFNallHVXl1TlhnK00vVGliSTJjQnhnSndrYjBiZ2k0ZlpmNUFCQ1dUN0JEU004WWVTL0o4bm80SXN4UVlrNTF3WkttNDRDanc2cFRmUWpYalVMdjllalBPVktKM1BoUzJpSWZ1bEFLNnNNTHV6WTVPbi9iSHpoWkROMkdhUGg0NjZaTFVVWkVtV0ozWFJHKzhBK3Y1WU9PbEZJTVJGQjQrTGpXeXVTdVNPZXAzcXJQV3JOQm9SdkdEV2JncWN1OTcxNWtYejJCRU1GVVpYZmh2TDlVRC9PdW02NHd6ODFJa3NTWHZadUlPcWNZUkNwdCtEVWlnc3VFM1E3YnZnOHo5cUV6ZjhtZmVIRm41NXNKUlV1TFl4UTNmTUhadU83dmhrOE0wOTFReExCWjFTZTJpUU5WMGRqRXVDRlRibnlqZWFxTld0RFVPYnFKZUpzQnVuSVE3UEtXcXZIUFBGeEVYVE1LUmpmQURjK005Yjc1V2l0S2VOMlRUd1BNYjBQQTlxMkZVVUdTYUxoc2xqREFVQU1NTGRLWVFIVmpjd3BnWUtvd2FVUUMxNnJyaHhCRFJVL2FaZ2JFb1VzK0ExMFR4a3Nua1NMalpheXlSYStQaEtLTmpCVDhMb1NxcnFCR2lxR1NSaUY1VEJDN2g1M0Npb2VGNFdGTVYxeks1akRQb2JqSGdQNWE5c0JERDFpTzg0V2NMOTRDbzVFZGNJa0hsTmZKdGZtbUFFdCtBcDFKYXR3N3Y1THhiU1UzbWVLQ1dzMTNjb2RRVVlsSlZ2Kzh0bXVyQUdvRTFucE1oWmV4VExvUEwwa2c3VWV5Mk1MRXV2TTB5NDVLbHdHbFd4QWhuSGZOalphV05jTTZySmJNaW1pMCtzenY5QkJxT3V0ZlBWRWpIakliTmQ1cGFhTm1iSDNGTEp2aTF0bE94TnNvdGRpT3dUOW5lUE83K2VTR0ZGVHowVGFkOVlkbUEvcEo4cUZhNWdzZmFvaXN3NjFBbnQ4T3ZqKzI0MldLM1JWcitjeU9DR1RYVFo3WnEzeUhKUUxSK3FmdVNiZ1BsNFVvVW5uRk1xbHVIOUFQOFJpTzFrYWxzeGVlSFhua3VOSWU5KzYwNnppaDFzOE9LODZla01yNnFzQnM4cnVVcTZ4RkgwZ1VmVnNPWWFuM1dTdEFSZjdGNTB2NndkdUtiMFl2MmJzcDJ2Q3dTcUZhTUFycklMdllWMHF4L1RzNmNEOS9SMHZtYjdxK1VqNFFKREhmTHdxYTFMMllTYUtlNm9jV1hUNkVoK1Z3dWFSeUhzcEx0aVVNZWZwSlJVWUl2ZE9wNVlGKy9NaGdCQjJwZndHamtLY2NmK3dTSStCVnpPWExHZzFjeFc0RFZmOUhPYWFIaVNzMC9SM2RmU2k4aGRGeFloN013bEYvanlod0RhZ0YvQ2UyejBod3dGNFg1SmJEc0ZKdUF3TTBOcXRqc0dNRENWNkdLMTloalVBRGJSTjd5R2RoT2g4dXdITDMwR3pxeWxtY3Y3YUlnN1FvbHpQbkx3cmJqY052MzZYS2FGWno0aThQVkhoZVEzb1FwYXFMSkRJM1NEa0VYTEhNQ0pUWmFQS3lmUVRVV3I4NnFIY1c2WlRlNW9NN3ZhdE5EWGtGbGNrVVA2R1NVUWhWV2l0RjJXNzE5ZlBPWkhlN2c4V3I3Rm0yNHk4aEhrVG1SZ1Y3dmpQUlhQcTRkRDgwYTBhWmc0M2ZCVjV0V3Z2STZBQllPZ2ZHdXRpOGkva3F4UXVMRUdvRzFvNWZUbW02bnNXWnJkbHVFMmJyMExna2RTaDdGMU1TNXBEMERaRHc4VWl0V0tGbXVzeDJIMjF4RC9ibTd4eHM4T0gxbGlZSlNWdzRZdWp3aHhTMzBCdzI1QjdhQ2JHdGdIWlVMSW02dWVhdHhleXByVmtxK2xGbkJtUlZBZDJvVVQ1Q1Y2UExrWFg0a2FLYmRnVG1GaGplc28vS2pDOEltbGdiTHlyR0szOFM3SmpxdDFFNWFDTWlYb3dhK1VQZ3kzYko1NmRvSElneFBQZ2J3SnJkV3RsT0dKN01DTiswNWk2VjdVbWppamhTbUkvZW9kWGpJMld4UUhqYW1mVk9TUHluV0R0NThib3k4eXZMTjRxOTNKaHBMNXBXQm5SRzZsYWExcEVWNW0vdUlBcFJON1JYblRqSXJtbkEyc0hrWnBHY0c2eXM2WmVXWHo2ZDhuVFRmdFpoUU9iYUJYbUxWTVZxWmtnTkRGZ0RpNlhsVFltOWNVMldZanB6U1NGQVNCdHFxc1NvbGlVUEtVZmJBRDErcGliV1o1eWFZemkvZm1Xc0hSWGljai85TnAwWnpmaVp0SjMxMTFlZGdmQXRYOFcrbW12MjUxZGZFd0ZBdHFHOHR6MnlEekxpRHR2YWJlclcrSnFOYmhDeHRTZ3JNNnE0c2xUSlM0MXhhQ3BCR2hwcERycmlRUVdWN05nZGo0RjZoU1VqbW9MU0JzdFpUZHZkZmhBWW5yQmpVaXptK2d3VnU4enFoc1diM3gvRis1WEVVRFVUUVhRQ3h3ZEh4eTV2aTZZSG5zMjhVaUpoMG43eElXQzM1bDJzR1ZRcVNMSGYxQ043Z0NRS2tlR2dSOGFUV3FXL0JsZjVLQ0FRZ1RtdUxDeE16UmpqTElzUjRRZzNWam82K2F2WHRtc0NKb1pNT2tjYnpGMUtPSEdEN1pHeWtsY1dNeHNlaURzU21Vd0NTUmJ4TStPTVZZZ3hLZ3d2UjVaTk1DUjQxT1F1SHN6dVExK2E3K3VmM2dNZVAzR1JHWEhNMEdPZGJHaGZmN3pJYVJFQitPeHZUaDA5OEJzM2YvREFZM3BvRHlyUVV1NlRFSHlVaDVkdGNpYytPQ2hRRmplRitSRHo0dHZxZEQ5RnRPQ2lBMmtmSUh2ZWsyUExSZnRBTzhkeFl1NGUwTGl6N1dCeXkrd0R4WDZaR3VyWmFicnV6R3pXb08rbUMrWkZrbkdzS1R1THpOSENKQzVIOGdVekZzNTNXckJWTWdLM0lsT0JGTC9CRVFXbTlqVG1jUjhVRWswTEovUUVNRGZnUEhUWkNxcVdGL29LZWV2NFVSNHFHVlVTNXp4QjBOZnlyUWRuVDh3ZmRFYUx0cGNqM0poNEZhL0dUNlljNVp1QWkyRGp1d2MrSWIrbk9JN3c2TWFxTytDdkthMGp6YWVmNERxUW9lVUlBa2RrbTV1NW5QTzdabXdUekFBNVZVZnhvdVMyR0ZBSU1BaEExUytmWVlWSXBQY1hpRkxGQ2ptZ2VPRXdBVWRESUh3NjBQZ3BKTkQyT0ZSRmJ3SU1FYXhocEtXVzcyWDdsbXc4T1lXT0Z3MmRac24yZE52OEpwK2ZGSTRaaG1UOXdaY1phOWdTdUFCVHJ1OGh3NWswbWVDajdTc2U5ZEtnZ0pQUlJnVXNlVVZIYWsreHg4TVExRkdEaE1xYXVsbW5QTG5BdERZQUNTOU9XNkpleGUxRis0dzl2Smt6NVV4K3FnVzg1amt4d3p3NXdXQVc1bUhaeWZ6T1JiTk16Q09jNWpkVnBoWnNVcHNlK3BHZ1JweG1aNCtaODlpOXBPM3h4aGc1UmgrLzRiVUNqRXBoNjBPUDEvR1dacldvcmk3YVpXdVFpK0xaSndZcDBiTk1lZlpod3g0OTlpbjZGSmNBSzREbUFHVElpRldKeERUendsSGZ6ZnphdlFZZDR5WU15RFNZUENMTm1KQ3p1RkZicG81RXVpaVFaSm1RbHJJemtFeEJHbUtwMkxUamlraVBzS2ZQdkYySmRENHYxRS9zMmUyNnN4Z0NydUNCNk15Wkxic0lQMlRkOXVuTTdyc3N0UDJINkZCZ1VsT0I2MEMvelk0cTNReTBwcm5jQVM3SlpNODEyeVlkSlpMNDRnSUROdTQ2MllSYVR6eTVIS3E3TGp4akZPY2J4YVhacEIwcmJaYlVQVE9iLzdxeGtmVFBPZ1ovZEtLUmdHejdiZklzb1EwRHh2M3o5ODNMTjRZb3ZvYWJtTloybmpPS0huWjlzUmRUR2pKcXhJT1lNaWRuSndSWkRwa1QyMnBwa2RJVU5YRlNCaFhLSEd1QmgraGwzK2o1YlNyMlhNTzdTQjNWS2FYMkJqck9NbTE0cStSc09HQkhzd1lGTnIra1lMenFBTTAzbmpCOTlHanFqa2FEeE1mT2FOclc2RTlWTWxCaWxUVnhjV1JpQUpldi9QK1Q0YTROYllxRXNrZHNTNGE0clZLTEtRSk5CSlFGYlNyZmp0Qm1Nb0VVS1N2amZBbEFsWVRqUzBSaDFOSFV0TVdIVzRGbjMwWVUwSTRJOUFQVTlyd3R1TitiZW5sU2N0aUVUUlltNGc0ajd0NEFKSkdvY2Vva09SZ1FNOHowZkg5TkxMYVNRUkU4V2NDNEZma2FzQ2JaaFg2azRzU2JHWE5OTGRJdm1RSE9CR29HVjR0Z05LMHM5M3hmQXZyaTdlbU1BaGFVZ2NHSXl5ZmZlWFNwYkhnOS9kOG05NXU4L3QrVHU3L3QrN2E0VHgvc28vZTVOUHd6c3B2S1JyTlRqMXpwL2svYi96WDJvRS8vLzJTV2UrTnF2Z21SZFUwYUtqd1JJdjE2cEU1RlVlbnpiM283NUFqZ0hFT2tJRjkrR1hJOWZFTllLSDljUmtQeXFRMUdoUFhTK0xMR25tWDJlRzU5azVUWnV5ckZYTTlEbVQ3S2w0TG1tUnpZWUxpNVIyZkRrc0tJYmZDNXJreGdBRGI2UjJ1VGZlbzEvSmFKUDRaMnRRYnY3NWlidUc5dlFhK29NK1hhdWlLYUhaczkxckl5UVcrckJtSW9ndjRZRXpoMzE5ZmR0NmVncjg2NWRXVjU2NHJKK0pTSytHN2lVK0llYmovZUx4Zkk5aEZYT3ZFeGNWZE5DOTVTeHgwcDlJL2FVejJhVll4WHZhcTVhOWppbTcybVNjYnNBejJMYTBPT2JyMHZDUTlZSGRoQXBMbFhhL1dNdW93K2MvK3FWdjBEeXFNcFhMSm1mRUxYOEVhRGJ1MXh2K0VXdEpCdm9vVDBhK2tXMk9sbTQyWTNBa1JtRFFZWDZQcmpaV3Y5MnBKa1VCTmlYNmdvMmRMaGU4WWpFUU8xd3lxY3YvUDJqMnVpNUgyUHl5dE9kM0pPQU03dTFFMjIvRnFuZlVScmR2YjA0aTdvWDRORHJ5ZkpMUm91REk3YW1ydlZxOXcrN2FwMDE0akZGeHF4Ti9lcVY3cjgyYW1hYzcxMjVVQ3d1VWRYNitpbEFpbGt2c1d1R0FoVnFvMk8rVk9LK2RXQ2ZRY1o3U3FDK09xOS9yck1QSU16dU1TYTdLRzJGak5naUxjazMvK281VnRETjFGeERqUnBzaXhNM2pad3l3U2tDc0lyeEJHbG1leEtPdXlYU3F3WDFJd1dqS25VYU5Tcnh2N216cU51VGxVVVZacTAzY2xhK3cvTGRCTzZXODVzVWJ0SUtJWVZLTDZIN0hoV1VyT3I0Q0ZxWlBEeG0rL1doNVJQSHFYNExSTnlJZ2pQRjBlVWxESVR0SE9lcXJidW4vVlRpZlVLd1dpaG1JcEFvMTROL3AvZ1Nxemc3bHVqMHI3V0tLTjZPQ1B4bDRYTEIxQmJ3S0VHdll3cXl6VWJPN25OcXZySG03dG9mcUJNMGRMbmRxdXZkRUxCOG1CNW4xelBXT2phNUpBcVNFUXJYZENIM1BEZXduMmgrd29KYS9XU3dzWWhLOU1qV3NsMDY3b3QzQUZEc2xYbjg3ZFNoaVJudnZtYTZCT3Y4blFPbUhVUVRSd3ZYVzkvRDZyUWNTMDJYajMzRGJJL3Z6K2ZYSWJ1U3BWdlZxdkgxWGZOdlh1dW1oZzNWbXkrclFoeWpWOXlYblJhMmIybExkYS9qSDhiYmFVdDdONmE0UGlsVFpjM21ibGpKYm95em92Y291OHV6L3VQSU5Eejg4NFJPajZ3VzIxMHR5TzBvckZVb1BYWE5RYms5WkpYR1Zrcm9HNlpNeTlYVVBMYTB6NnJTZ3FsZ1hLbGJWQmJxNDBxY1g5My90MFBjWnZza1ZKbHRNMU95Ymh2S2t5dEtPWU0vdVYwc1ZnVFVlSUJGV0ZnMnVVTzBEZnpGOWJXQlh0akRqdlNJSGxWMjgya25CbEwvYi85TmpxNHdNK01CZ3RuRVJlRDVseldZRFMyR3Ewdi8wQ2JtNlJhMTN3SDVBL3JrdHlmTGUzWTJzOHE5cnhiL0t1ckdJam1ISHBRL3NhOUYrM0cxalJsTm1Zb1F3NVgwOFgyZnZyVFBtS1NaRHhkak12VXBMSkhwRGtkQmJjeHdSVDZCeEdDQnNReDFLcnRTVG1zZUFDWkJ4MndrVjNqZkxUWTBJSjZna2k3S2VRY1h1Z0wrdWJRajVYUGJ0RG96Qm16b2N0UmErek4ya3lRdXdZYktYM25jb08wV2xrUXNJL09DWHJjZmI3UEdISmZ5ZjRUUHY4T1ZpMnRzSnliWXpjYk1yZ3JCT1hHSlB1L09obUJFSlVmamduaUdDNko3d2dDdUdDOHh5VlJGTmtVbmQ1QVZxSDNMSEF5ODF3azB1UnlKV0dkYjhqNzJJQzBsYzdOYjJzZ2ZNMjZlVU8yWWZidysxbUtTbVgwSmxQV1pHdzFVWWI2REdreVpTbERlc050MWJVWGwwWjVvNkVmZTUwQVdteHNRZDFCcE1NWWRBNHY5UHVEUXdIWGlIOTZDYjVzTWVmU0JvTWhaOFNhTS9xLzlDNmJMQzVOR1kwcEtnaFpPLzMycVQwVlVBWXFIV0RHcVZhSmg4VFZIOTdOMFJuaWthcGR5bDJuQkpJWlZCcWp3MUNyamdMYTZXQXpabkIzZVlFaG9zckw1QVlJWjJhMmN4cm5iTC9XUmlVUmZkaTA0TXhzMjZUc0cxT2xZdi9QSDRjQWhUb2dKK21hdUVJbGllMElBckpMSk5EbWJITW9FMHFyLzZpTG5DU2oxNGQ4Tkg1cWFWVzlRUkF0SW91MHk3Tmt0dXhFWE9MVUdjNmsyMkQ5L1RjMnMvamZuUkFoSklTaGpBdSs2VzIxNEQxUU1mRUJlOG5nSStRa2VjT21OSC83K1NtZE1QR2RiaUUweWF0Z3Y3TnZHcjhLQmJDeUlBbDAybG9jZEVlNjJ1dmNhN3VzMmRjdXlmSzV5Q0wxc3ZKZWQ2MnpMcndTOG5SN25kaWgyUldOQnZoU3Q3b3BXNHMzS0d2OUo0STRuOGZTS0NQdVhxTkFlYU5SVUNRdk5tYVZUQkJ1TnhqaE5uY3dpeG9NR2RSenJtOHpHdUQyelNuelowWWJ1akpXa3lsck0vVFlkOVlkRW95bWpOM1liYjNyVnJid1hCenBvUFdKdkIzVWVjODcxNSs1c2JYQ0taTnBrQ0s0MkRma2M0MkV3cTdSUlg2ZlBvMjVvdWY1aWRHV2V0ODhwMnRrV3FLd2hGZ0pXSE10UnJNNVo1eTEvNjdUM0NSUjYxc3hYNHpVdTZNcEZEZG5ySWJ1V2dmVnphbmYyRnRKS2Nzbi82ck1yU25LYUV6YTArYytIQ3BtK3J6L2VjZ1RSTisvL2JWV1l3cDNoYUdjM205ZE1qdFFoeE4rMkNHSW9TcEpmSHNRd2dYanZhUmxQM3RIQ0FLMCtkTzgycGhRR2plWWM5Wjl1TzR1bmF3MFUrdXdwTlNPcUxSTmJkWDBORHVzbUE4T1ZUMG5rRFY5SlZBRjRBRlJuTTh0TmpUaHRTRlpUbTlBMmwyQk5LYTM1cW4yRXlkSVQySjBMbzc3b1RuUWt6YWQvMnN4RVVTSy94cEFyYnJ1bEIxZ0pqMzVmVkdXMjBNV2FWWTlXdVJtM1ZJeHJlYmY0dHArNVpLT3g1c2hQVk5uSklFdVA4Y1c4WXNjU2gzcGFwSlM5clI4OFBET0xMRUdPamNYRWIrNWEvK2xac2wvaEc5T2d2dWJ2Q2QvY1gyZFRoVktLQTJWNmdyNUp4d0k4WnhBQ0ZvcDlXdXVhdk50MmxRemFhTHFGR3F2R2hUU2drdVI4b2Irc0JZT2UvVmRvdTlGRk05NTZyaFE4TU9ZZUZOQUdYaUdmR1pVT2JwTW1PVkx2aVQ1L21NNENiZlRyUzQ4anRpOWYvbkpDZGN4NlMyek5QbkovTHhIdE5qcnFhdGZLREtTNU0xdloxQ3ZmZjc2NTJTSVZwK2VRYm9BdnFBTUdWNlByNTM0ZFBhTnBzOVUzaWM5VHhLVnRuKzhTQU16SHRsWXZ2emhyeTN2Rjc1WFlIbm9xMlhMSHY3Sy9HN0JlNFUxZzRmL1dWVy9SaUh4QzcwL3o2Q09mdjdhNXpyaC9wei9KTDFLOHdhcmFPYnQxbGY2NUE5Q2MxK1pJMytVN3dHbVZZVEpvaDZTa2oxZzE1Y2MyUzU1ZDgvTHd1TFlQT0FlRUlBSUJNNGdMN29XcTJML3lUY09yUExlNVlMVThNN083dHMrZkJzbVZ2SjljTlZVRVhucTZDblNnRHNyRVBXUlJzRFpNSnNuKythRlc2S1lockdVNTJvUzVSZ2E1dm1WRlF1VkM4c2hlWVZaRmpBWjFGdmo5UW5ISDlMWGVLeSs5aWNURXl5Nmk1V3plaHVoKytxNzF4eDdGbEh0WE1TRUo2WmhoZVNRNUQ1ei9VVVZpNVNMWElsZHVPeSt4RWZNQzVEMHNRenByaVhVOVJhbi9UT0pxa0V0V0hlMnpLTnllaUorNW83aTBWVlkyNnpwWHdDbHhjZlNaRDlDNzUxL3BjeVlNdkMxNHpMSlZleFVSaC9YNG5WcVVwVUlYTGRyc0F1cFZ0VnRmdXdacjlnTE1QSWlSTXNWanE5Z2FKekdyVkpDU2NlbXdZamZQeEFCbmxUcVFGUWRqSTVITm9lMUM1TzAxWktpZ1lXQkxZQmRMTllrL1pkZXhSb1Y0U0IyZkx3MWMwWENJdm16cTBxcnlGS0JTamlUa2ZvWVp2VG83d3NyQU1IWmZ6UkE1OVlqQlpXNlAxMCt2c3BlaitFZUJaclo4dWVkMDg1NnlzQzVCRGZ3KzFjdUVvcG9yYVpVbDlZVkduTHNqUkJaRXhQTkpnS0Ixc1ptSGw2VGFBelk4RzFlR1dGTkc2S0NjK1AxSW8wdHE5TEhLWVhVZlp3L2Y4V1JOTjczQmZoNWtrZ2VxZjhaV1MyWXZrczNFajdwZnFpNzFtNW9KTWdHSTZWTjFPRjZNbzIvcjRsdWJsQVRSdDZwQmtCTjk1bnRYWXpIMlQvUHpNVitZZWk1ODV4dVRUMVlTLzgyVjdlbk5WWnJhM1ZTNk9HQmdDK3lzSVYrWTNlS1hyM0FFL0FPMHM3NWw5WVkwcFNMR3FsVUJraW9EUi94VkRxdDU3L0EzYWsrMVRkdUx1RzlhV2ZTQXhxWGI0N1JsaldxOFlDYkRBbTNZQkFHTzYrSE9RcDVtSE1kcGpFWXUxTjRENk5YQlBnSXRvbGhBK29taGNtblJkQlJOd3NnbXVVbWYrOHlGSTJJRUhsWWJHMVpNUXpCMExEa053SGtFN1RXNGZ6dTNDMHhoelYzYjJsNjFaQW42Qm1TS2VGYUtTTUlHS2xrZUE5eDY0cTkrWE5kdm41b21ZMldyd3oxOWRjeS90bU1mdzYwM09LVXJ3ajF6cTVWOTNBazg2eVpScVBGbHJSWWNxSTVwUEc4anozVGJEVFZXQzJ0dis4cUZxc0lJN0doWnlzKytUMUxYVFAzeTQvenlMY2FiVDdON2RBRTNkVHRpYmpNb3p5a1ZvS2VBR1kyeHFHNnMyS0llN1JKYWcza1RPb01aY0Q4Ym5WRUpxWUY0VnJIYTZMN2lUSnBrYk1YYzBUcU9HektuVkdhRFUySTFvV3B6VXdmNUFOVllNK2dteUUwN2dSTU1oMFdJc1p5VVVtaGh1blhXWk1tNWYrL0hidnMwOG1ES3JPcmNhNWFzRzVpRGo3YUpiWTQwWG5Pc0VaY1Vxd2JEdi9sZnJEYlVkV3B5WHFIYXRjeGJYVFRUZ2JlSjc4ZVhGNW4zenlMWlBGdnJPRGduaE9CcC92SFRhV0xXaEg2VGRuODNmUjdzdEV5L1g1djdzclFLMVhYdkYyTmFZUFJOcVJxREJpNDBmL242eFFsK0w1UTdZWis0M3BrRU45VHpBQ1ltb0d1Y1R4U2lPY3RZb0EzSmhCWnlLWFZ3anVjdkJvNUdIUnExY2lLT0wvc3VnVDRDR2htK2d3N0s4RUt4enZTdlA0eEI5WUptV1U3Snk4K0lwVTZERUExLzY0UlBjMElOVDYzU3lNWkd3UHYzOGVQczY0QzdGY0xheHUwcWM2cTZ0MFE2VkVDY0VMSmNLVmMyZ3VDSUkycWxaOSt1L25aMXdjbEdDTm9rd0RIeHI0ZVJxU0h2WHp1MU95ZnBILy96NzloQnN5elQyOTliVlU0ZGhsMWlZY1I1RW12Qk5ORWxOSTFBbG9xMXpFVUpsRjZSTkxOMHdEODhMZnY3cDArQ2I0T2JKZXEyWE5XdzF1OW9Bb05JcC9tSlh3cEsvem1oOTM1UGdRUFpSYU5STkpOUHBVZnZPZmVPTmxkaEZBbzJncUFXOFZDUWRsV0YyNzNEWkQ2YVpOeVZtNk83RmxmRGFyeWlydkU4bWZRM3k1THBIZlJIQUM0ZUpkRTh1dk1yVFhhR3FaREpPclU4MnNhRndqRVhmRHBqemdsVTRnL2RRTTRKNmEwNGp6LzFVTGNqK1RmL05GVGlOV1h5dXY5SFVBdzNBdmVCU01IL0NEdXl6U0hSOU1MZlErQlc4c0VRdEUyRUZnbUZBcUpwZFhmaC9TeTgzV09leWU1TEZpSGdLRXBKM2hsLzdXQmI0RjFybDVPV3dYSVBqS1pCeDF4b1hDMTg5d2R2eC9penVGZFhqcUNQSTFQVkY4Q09LOTZqNGRNZGprQmRLcml0U0hVN25nSjNkLzNmN3ovSjFrOEV6VDN6eFNOQmFwaCtiNnkxVFcwckZxTUtvZGMrMVMxRkgweUxxRENBdkRwdkxnL2JVRXF0ZkZmcDZweHB0bEwrS0NEVHNCMTF4MkpsNG80TDF5dktjbTlVdU1WWU1jdjZaUWNrdTlXT3V1T3NrdXJiKzRjUHBWUG50LzE0WnNiU0NkT0JlVVk1Z08zQVVlNjBTTHZ3K0JTc2FwYXlyZUVKMHBzWmYvM1doT2ZGSHpvN29OK3p6enYvM2w4ak1WcHJzeTh3RWxXWlNxTzZJUk1kdVhrVDQ5SXBXb0txQzYrcTBHdmNRazFIc2Fsa1R3eGRzTjc2dmhIckl2QVAyWVJYWkxpTkw4ckhzWGZMSmxTM01Xd3R6SGN2RGNnMytmbWJtOVQ5djViSDM5YzNEait6TGpsMmZFUzE2VnV2THVvb0pEWDA4UGo5Q3ptY1cvdTVmQjZ1NHRjaHh1eFJ2Unp5eFZ0OGJKb1ZiT3VtUlV0WXhyeHhuRE13MkV6dk54MzUzVG55Tzk2ZEQzc1cvOGwrNXpXYkozc0tWMzgyWEx5eXczS1czUmY0UG92UGsyM01xUmNvdnR5dlh5bjVpTmMrOUduaThEQ3lXc0M5aWtqSE5UZVN6TWZmRk5mN2N3Y0N2RWVmTlpMZThnbGhtRkc0UGliNGp0TkNSRUt1Ym56SlY0MXVtbUQvOEZNV3orRnZ0R0JkM0MwcHZKZDA0Y3pSVFdhKzVoeEVaZEE4eGZGYzVyakl1eGRBK3g0ejdMY3k4LzJDQTZwRGdHSDhFUGxucHJEcXNPenZJY2I4VVpGWHE1bU4xd2Q1U0xqbjQrYlB4c3ZjYXFJTlVSUm8velcyVGE5cFhqZHY5ZjNGa3VOV0t6b3p3cWdxcnhTVVhhbWVRYVhwU3lNWVdXNmw3QllvWkxGbmVIN3Iwd2htNm9DS203TWlHRkdhZkg2ZjI3c0tXYVhwZVVsM1JqMUFvV1ZOR09HRnd4WWQwbEpRTEluL3JxeHRUT21Tc0pkM0I1MWhCbXpwUm9QMlZiSVZoUjltclJMVjloWDNOdG9UVEZqRVRXbkIrbkNrN2xPVTJ2czlTTFhaZUlpa1RxZmFKYWV2d0pGeGJsRHF2ZDN2cjlEZFc3Lys2SkZBUHIvdjA3cjJRNmpRZlRRZTZMeldQUEJqZyt1ZC80UWhId2ROdlVmZEtQc3RteFp0aXFyeTdLeWdhOFl4eXNvYlY5R3F0dGo0Q3RndGJPR3ZpdnJxTTdvTTZ5T3NsdDVaWmgva3NxcWh3ZkFCclU5SkV0cjNLYkZmUkZQNGMyU200UDU3ZlN1cVdWUjdOL1hSUzV1Y0ducHJ4NVR2UUNlLzhVb1JlVHFITWpMRDhZci91YUc1SHNudXg2UkFZOTJlYnhQZUwzVHpSS0pXZTczRHZzOUhZOEN3TzRPcjN2WTYybW5wZWJwYnM4ZG1zOFVzWEVZbm9DY2NnVkVqOFBRVjVDckJLclVMSUlLbHU0NmUyY0J5SU9XNnlaYkNyWmgvVDkxUTc2NlFkVHFjSldiT2lvNlgwSisxRjlkM0lHb08zUWtCMVVoSXJMTnRKVDEvZGYvNnRkOVAvbjkwNitYRmNrcEJ3UG1Pb1RPNkhVK1hHY0lqSHdPeUxSREhxV25FQzB3K3VmSjFKS2dncEV3Y2pVUmp1RWFmZGIweWY5TElsb1VYTUNEd0w4VkxuRllDOFRVN3FWVitpclJyeS94V1MrTkxkMDFSeUJDVVRHdjkyYjVYVjFKWlA1L05UdmdIVWQxUjdmRDI0V2ZEaUNwTTIzbTEzTnhKbUt4OXVrcnJsaEY3ekM2WnJ0OCsxcmZ0ZTI0VmU0aTlIYTBhTlVKK3hYTEIvV2ZaZkVyeXBjdFg3SGlIejlsNU5MbUJKN0FUSEU4ZnZJd2RqdkdkMytDWUFqYVRra2wzL3ozd0JWajh2TW16dkRBVmJhc0FnS0cxT2ZBakltSjJXRVBac0ZNMklaYjVMZHNTTCs3Qk16NXdydk42UnF4U0ZURC8rVzdBaUQvVHZPSVdKcjlrOHQ1NVhoKzFhWDJVNnFubHhNekcyYVFjTHZ6R1hhZnQwb09jRld2RVYyWnFRckJ0RFVPNERMS3ZEOGZKaVV2UCtmdGhBZmtpZ0dRaWxOQWp0QlVZcVg0LzZlRmtzK3VDMFhIenFkS1cwN3lOa0pUem51MisvUkc2REhnZWxhYm0zejliVWQ1WHpxNDJ0alpZOXBTWHhrc2QvN21sc3RtSHZHK082WFVlMklCTXpsU3o4VnhUOFVGa2gyZVF5SiszdGYvRzJKQ2xlSHNielA5MEJiUm5DYXU5QW11YzZaUEdDUlhwSFBEbE5jOVNtWXoxUEtRbjF5ZWJoMmh2TXBRdGZiSXdycHFOTFRHMU5sbDJoeHZzRzNxYVY5TGJhdzUrZGJHYXZRcE4xc0hPeXUyd0pMZjVWSytVT25wSFQyb294djRxTW9kVldnSkg3Qk5nWkhlT3Z0ZmQvc3RLSU5yY25WU3pOeEN1cFBRa0FQMzR5c1RuUU5tdDdWYlphKzNVTnBZZ2o1WkhqQnNrS0swUVF0dHp4ZFhYcHg4ZGNPRHJ0SnZCM1l0WDM5RzZmMVRaWS9iVmZaRS9vaUo3c1VETGx0OXQvS1pEYzE1ci9ka2V1TWI0dUN1VjQ5WkVReWtuMlJZTXRtOVJRTi9sM1dHQUJYa0ZMNklvSGY4bjZkdkFraEdMeWg3YmVndmhjNFVTQ29JY1BuZXFhZVhYdmdnd0FlZHd0MndJNjQ1RFhuSzEyMUhoWUJ5alZLMDZOSzQvNDhhTHZvWFV5MnQ0U3BlL2tWMnovVFlXcXFqM2JBMkdqR3M3V2pibzdIWU9tcldvQ1VTUGJOMnVDVlJzVytFU0RYclJ2eCtjaVNaR3RYNGZiNVJLcVVkOW5udFZCcCs5SXgwWW5FSmJVVWFLV1ZOSGNYVUs4eTFuWlI3aW85RExQeWZQU3lYVENWeDE3NG5xbGw0OW9rYjNhd0lMS2h1UGFMV1BYWE51enU5MnVIRU9hSjQrZWo1dmErTnFGNUR4bVEwS0h0eXhqbmowNnA1QjlhOTRmM2FwNm8vTVZVYXZmMHpXUEpBN2hKOEtZZWM1ZVdUQXZoTTZrVko4c1V6aUlETXZLWFViNUIrSkpXNXQ5SlJtZlFvVGgrdFpuMTRvb3AxdExHdGVHWjdVOU8wbWM1bHlkV2JBellYYmR4MnArcE8vQzh6U1FWR2pPL0IzdGxEN084ODNGazJOcVZXSHBwcFdwbkVrMW4vbXBab1Y2YUpkSkhtTzdPOVFWSlN2MGh0YTdDVTRKdHljYmd0L21sRHJmNFVaOEVQZ0tVZy9DY0kvZ0dESmZXTjdFa2Urd1NiOVR1WE4xa20zQ0JlQzdJNW50NENvREFsbWk0UTFETjhRWGR2QVZnNDIwN3g5ZmZCSXJpby9ycy9LMXhhVjZSczl4czdYemtvU0MzalF5bUJvQW5jMGZNR3BCaGhwclBldHZ4OXJyZFhzem1lNFFLZ3NKOFlQcjBhYWJ1bnFnQXhNUVRRRHYrTlBjd3hqMk95TTZkdS8zZm5tai9HdjExa1BRSUJmTkJjQ3dLVHczVWdTNXdGckFBZFJ4VndSZ1c4cVFJdWgxdEhLbE9rcjlyWXkxOGZhb3dpVzJzZzY3WUdMMWpKWk1KVXdvY3E0VHVWeUIyLzdRS0s3WFFib1BHd0JxTFdRRDdXUUw3WFFINnpZUTBJSTM3bzYrMmdhQUg3MTIzZDM3Yy9QRGRjSzBJQWgvdWJFWEszQ1d3SHAyRXlQT3liSDlyWW1mMEIyUHNoQVBNc1NIWm1jZXY0RnNmdXhmMzl4ZjJ6Vi8vN0Q0c1hrYmdaaHRsOHF3WU9xSUVIMUdDZis4RWZMOU5xTTUrR3pWZjJuMi8rTUVlMG1VZXRaY0JlL1NIb2NrWWNjSjc0QnJ4NmRSZ0FvRDA0QjA3MHFjaG96WUxrV29iNjVhNXY4bWVXSm1vbUFHcHdtUElmUUJnVzVPOFdhakFIdm8xZHYveWk0OGI3YmZ3VFBaM3N4QUd2L2Flb1lRQWd2bDlLRXdEczZSNjQwZnYxd2JIeFM5SCtUOTg5clNyTmJxM25OTDFmSGx3QStFUkRPSUFmaDF6a3dSVkhXZ3VQVG1FZldLLy8zWHRONzBjZXpxWGJSSC8vczZEM2IzK1FzenpzbE5Kazc3ZDlHeGxzVENIcHh6STh1Ky9UNzc4NFF0Vzhzb0gzUStqSkJIQ1I4a3I0UnlBK2Y2dURNejRNY2pZUDk3U2h2OUhDbnA4S2YzaUdVZ3ZiZy9kRHVORHhTYUlBS01ULzIxY1o4S0Q4REwzeHVUaEZjVzJpNHA5VjdoWExXMEJWSDF5SGw0dDdQTDIvbFF1b3V6aFg3NHJ3aHYwYWtiS25wODk3UE5PN0ZIempvaXVXbEZOZXMrUC9zQmJQLzJLbkhkejh1bXZyUFpTeEZiTGl3Vnh5RFVveHBSazNsKy84ek1lUGg1UjFHQWNBN3NyVis0L3BBbUpYMjVWc2k0Z3ZBd3F4V0RUYUVGSnV5RFEyRWNuV1hxbEtvcEtwdWFuUkFEVEFoWk8wN1haYktqa2JsbldwN1IzWWFBTlRQYjRwR1RkenVVT3FkWTFXaWU4bUQzam9jVDA2VXl3UUFVbEEyMFlCb0tKbFhSQUpETWxOa01aN3lTb3RaRVFqUUkvRVVjbFdsZFdPWFZSbUNsZU9ncllXVkkxQkw3bWIrNzJlMGROcnNMMEM0ZFpzM29FS2hheHVOc25CRWJGeE1rU0VSKytaakxaSFloSlZWM214b3lWUmFVVDBxam92cmVnY1ZkUnNYamttYUZGdEVlSmxqZVFGVlFwbVUwNFFjYkNIakF6MWlVSWF3dmxPWGtPNkxSNmtYZW9tWE1valpSTlYzZnFxeDM3SGg3ZlVlZ0RWQzErWnFFd2xxNjYzemN5OTNxNTc0K3F1QXIwdHRCVXFmK0p0akZpcGMwQmEreWw1YThjbTdZek5yS05BK0lRRk8zcGYxZnJWYmUxRFNwaE5XUnRvSGVKTmhmc1hSZWV4cXZzRnFTZlU3NTZFMWl5cnNuQlpXeHBZYUdZbUlSS3ZXUzd6N09nLzdpNGdkbTRKRGFSY21oanJLMU02Ti9SYWNtT0poR2hsOVkwNEhLeGtqWi9jR3ZLQ25BcnRkdXdJZEsxSVJpaFd0c3ZvYjVIWVdWYWhDTDU3aVpaUzlTVXErRFRIODkxdUFJanlsVmVuTmExdFNpR2JIU24yelhsbnA4dXFkN25xbVBtbkN3WG14MjFYOHVQSHh6Z2ZFSXRFeTU5dHQ5K3V2N0xYZGxQb3k1bDY3MWw0TUFKMW81V29LSUYyRis2WFoxVHQ2MkxONWd1eFdXV2xFdE1reFBmZHZOeEZyWWdSMTIxUmwydmFzb0Q4ZWc2M3NGNHRRN2xRZUd4YlBlTE1DVGlxcjF3REwrdlNKZlYyKzZNWGZXOWNFTVBLMEwvODdrRWk4WTJyYjlWRHQrUDlHeUx2NWNCV0oxb3U3Y0tkRXhXZXI4alA0d3ZEU3MrejZCdVBhR0tPTC9DbWxpU2E0YnlpTHVnK21SQlJSZkJBTjdHU1owMkM0WEg4ZXBkV3IvQ0I4Z2JVWlVwZVNzNXhOUURJT1lWQTFFbUllaUtYV0taUkExVkdUQ1R4b21Pb2dPalFEY2ZYK3oxcmxPeWhuVXd0RVBaaVFEU2xTUTBYSE9WNXNpOWU2WjNxNjlCbnRDMis2dlBvUHZDKzQrMFZiVHQ0LzEvOHdYSXhHNDZtRTR3bjBIaTMvWEFRcGlMZ0FGWmcwTGo1S0grMVhCckhRbnBoVFowdiszT2pJcCs2YjBnczZ1b1NFN3FWd2p1M3RlaDlKOUJPWGMvQ3dEeS8vYVVtRnFsRkxNbUg1bFUxUjloUlV3NFNhSTMwcUZIV0FubW1TbHFvK2F0dUc0WHNzUzE1emYxU3N5bDViWjNiNHBGWDg3YXlBY2RtY1orem9laHp6b1hFZGFRU1prb29Mdm1WNExtenV4NnZFd1c3UlZDRXRXdDNkQVVLM2ZGaVoxYWRpNlZPUVhjaDZtekd6ejJoempmTUtRcVRqaWoydTJhcGppVFByYVJHSjc3YU5qVHBjZDZnUEpCV0FQOVh0YXBjV1A5eCtqTDhqZFBQemEvd3FpTnVmREF3NjNiWEtrbHJtc0FlK1FVOEpmeWZBMnZxRitSUDNZbjEzZWhoNSt1NUhyYk1SSVl3OVBMdG9YOHdPWUcxa1hlQzRlYTlaMDJNM2FNYXVuejljbnlhdlhyN0xFUVBIcStxcGhpSkh5MEpnSmdBeXN6b216M1RsbFlCQ2RiSXZST2NVZUxnTlpMdExPcEZwclgwNFdLT2dWNUFsaXc5ZXgyYk0yd2ZuWStuTnZNVi9pdnUvaE96eEZIVmJsSkRXYU5KNlNSbHVWRzlzVnEweHJWRVhUZlVLQnVNcTZnUFFYZFVzMUl5VnRTd0pXeHZoZCtpblhROUlDNUtoeEhMTXQ0Zm5Kb3N1dFlNdHFYQUxCdm5RRlFCbUhPV2RsVnIrRFRQeGxJZ2QyR01xOGxoUDQ4UkRYT3VFUU1aaTg5K1lpY1NrdGdKSUxubUxoNE9oME8wZU1xemRvOWJ5b2Z3bU8zN3VoUHJKSWRjTDcyc0U1eDh6cWlvVllta3hWRkZhNS9ibGFvM0FLZ2gva0VPQW1QdXg1YkROT1FxMWJJS3dVbUpoaVlIQzNDY21aTHZrV0ZWa1E1WmVqbkU5Y0Ivc0NJaTRsVTBrWTZldFJVTmFYdW9RTHl0SjBOb3kyb01DZ3JMaUpDZFFSM0RCT2YreXhVQ2p2TGZRRmJFZWEvVGw3MlN1Tk91cGxUK25CdGFXZ3JseXpOY1JPeHNiWC9URmRKeS8yZ3hQYTNvVTJHcFliQ2hMMnY1SDJheUlOV05RTC96bUt6WXFVQ3NyVjJhc3JlWFJMNy9jbDRhVDY3U01UQXhFZkpMd2hPaE5oWE9KdS9wMHdOL3ZDVk1xQ3p4T2pmTjVlTFJMT0NLSWMrTXIxeGU2ZkF3YkZzVzRMNGMyN20rYXRvQWRBVGJwbC9OM1JKZ2JCMG5mTTI2TGZ1S2tQUnNEU0VBMFZNVGpkRFhZN0o0Zjc4K1lGL1A0K3NoVitoY2xaVEdmeVBUbTkwdVZLUFJjQmh1dEs1Q0tXWWU5cGdhOGN1Q3FSamhjTW81eE5oNFFjWTZKUjNhazVZNDFtNVNSQjRXRkZVdHNpcUFValVTTUJaNjdQY01JZEJNYTJpY0ZKN1U3ajFXc2YxT2F5R2NxekV6QzNpQVdVYTVDaldhYzNpdjA3Q1NKUkltR0ZQYmlkM09yNVdDd0xmMis0SjJMc2JVMlVGaFZTd1RyRnFEekljNENtQk5qSkRXbFZiVGFEUWE0bVlrWHBkc2t5SjNkVFVlVDF4R3RsVElKdUZNT0duaE9sSEtraE5FR2hKejlCbCtqQWxETUNvRFFtcVp6Qld5VVZTSVBIVmM2MlFEWmc5UEhOd0ZaVERFa0lrbG1nUWlZTEJRa0Q0SFk5Vm9yS3RhQW9TTEtBRnBOY1pVU2htd0lPMnNsUldUTmpXbVZsQjhmNFJSdnVGZXh3b3FRMVprQmF2amh1SmkzZ29keWZESkt3THpBRkR2b2hhV2hEUmlKOTJqVG93bjkzNnR1d1RpM0psWWxNdHdPQ3l0MTV2RjFhQmxBbVpBODJvdE9kSUdDeDBXUUpvT3g2LzNZMW5ab2ZmbmxEbG8zYi9IOXIwU0lETG13WU91SmM5ZGFmMnRXUktBTGEzRFY5cEJHTHRtYnZhM3BDNGFKNjBSNlhxYkdhN1IrL2VUL2Q1UXFuK284b2RZOVdDK3B1eVYwMWhpQ0h3Y28yNFVwVkYxSFIwU212MTRJY3FVc05CanBZcmFYb3BCRjVKYWg2Y3FPay9KYUZYbXA4bGswSmFNZ2hDa0ZCdlFEUHpyRnBRdUFPSXNhWTJ2OTJZd3AxMGdORkVwY3JkaDd0YWVNTFJ0VE1reEd5VXhTVlZnRlNtWFphTlBzeHNZK0lacDhKR2t4cE9iQUY5TmQwYVcwUFB3bnJyOEhqQ2JCQ3Q3cGNyZE55K0gyOG02UStwWGo0OCtVTUhLQzJGTmoyUTNlZiszYVJxSHVSRCttYi81U2Vmdzk0TWFNTENmR1ZaWkNTZjZTNCtKZS9QaEIrU21LMUpmT0RVNkUxWlVxNU10NnZXYzl6YU9VOVZsa2d2cTVJemhlWHFMaFkzcDlkTVA3NW8vL2NYaExHZWZIZXphSzg4ekpWMWY4LzU1aTZyNjllUWZaWEQzMWw3NHBPYmplclBaZlJrM2M0ZngvTFV4ZVlndGJNN3V3LzFxb2U5emJZbnArVHlNQjdkVzA5L0JkeXpLYnF0ZUtIa3NHbHlRVUZiS3hkN05OZHhkRWtaQUFCQThpbE1QR3p2UlNnR0JFRHpZTVhublVGelJUSFVTZ05aN1ZVVDZrZUFlMjVwcWY5UVgxZjg0c1dEaUk5UEhFYlU0Wld0TFlMUEVUNlYwUU5tOWVsOWkwTFE5SGU5NFF2Q2x1bklFR2lSY1JtcFBtWlFwRFFubUY2a2hBQVB4dng5LzMzLy85OExILzF0U05LSWZBTUJhK3c4WjVBRjhQRy85czZJbitlNXNEZ0dnWUFBQUVNQy9IOGdqdDZ2ci8wYTlVNzdYWDBCb0tCVkNlbzdnM1lTTnQ2dlZRNldkNG4vd2xlcTlRbFpOWm0xSXp5LzJ5dWNML0FvSVJ5NERwZnVNUTMyd0pNclA2Q0xQVURmaDZ1ZUJsbHJoUmZBYjhJTjVXNWVTVmNhcE8rcmFQaSt4YnpyZlhhem83T2Q4LzdMWTFRNmcvNTZsMHBlWkJBcW8vcjR0NEY4eTMraGlDR2U0bmtBajArWFdVZ2t1L215Y2ZWMnZ4RTBaRHZxN1QrYVV0aE9VelZmOU9KQVZXQW1Bcnk1dndENG56U09mZVkyZHBVdHQyK2FBZlo2cWQwTmxMc2M0KzRrNEpXRnZmOVFUcXZ0R0xlUmpaaE9DOXhaNTFjTDNzSUQ5UTVValpkdXgyd1dxa0twdEZHVUlMWmxITHdyWklUN0ZVSmNpcEJEOGZLRTl1KzgvNGkwWDh0dmJ2T1lFM0JDUGpiSGxIanRtSXRreHZpc2kyb0V1Zkp5MElRWU56RDI2bzgrSzBiRnNsNHZZL3VJSlFIWW9lTjgrV1FRNmR3SlBTMWlKd2srejJGUzJweWU2cmMwdGJUM0I4MUxmaDJTN2hoZlVtckZ5THEwRW9taUliNTMrWUtWZTc1TE1kQXdEa0pzQ2MvMFNDc1RzeFUrWVdtL0tldWZLK1dqY3NGN1paRnpiaFRFajNwbjV5eFV0RDVWV0Rzc3VlQ3RpYy9DMk1kZkk1N3pJOXIyUUh1TlNmTDI4SnlsejVkazdFbklSUDB2dFh3eHZPMkRyTXZhcnhHSkVxNVhYTEwrTEY5Unh3ZWxJZGhOeDBiVEh0Sm9SUFJLVVRpbnlsWklFNEU5WG5hVVRRRGdveEIyTUFwQW5Ta05LNUo3dTRTdkJ0bk8vc21lLzN0MDBBdWJKL01IZlIrazhaRWNGeWdNQUJOQ1FmclEyRkl3RHRUc0IraDhjZzhNQkNJekRvU1lIQUpiQnR3YkUzWHNjNjkyL05PRFVyallsR2tnN0Y5SkFrVTdYSUtCWVc0TUQzcDdkejlITU1yc0NBckFyNzBJK2ZvYWMzVmVROExYNVJJSjJSajNNR3RWcllDVkcwdEE2S05Xd29kcmVPcFZhL25qWFU2eUhXSnhadXliSjZ1NmdVNGQ0dzE3YXpFSk1vVjhyNHdEK3lrcmtvRVo5MUZacTVITHg5aVhvQXc4K0hEQUlNMnBxV1hEd3pvZlhQTndic2cyZlIrOWs2eUtGZ0xzSEprWDhRcGZtalZjZFltRlNnTnhlcjJPWllnb0VEWktCOVgxbXNtUktFbmxySURRTlFQbEFVRFl1bFNmR1dNY3hlSWVmZXFNSTZ2QkMxYXh3NDk1dkliZndCV0h3eFZVdlVJeVdqdFR3VzFUZytjWlREYjE5amFycCtmVlZFZ3A1Zlg3czQwSzhOam5xcmpuMHRZMjFGZE1iN1lvcGlVMXhWV0tWUHlheHlLY2s1bFJOaUcyRWJSdmdVaWtvVGc5MVNYU2diQkpjYlMwd2E2UUJwaVJxbVUxSXBhb2tLaTVXTVpHTmlycEdTdUdVUkNaUXBUV3FoSytLZWFxSXF3bzU4UUthUDVYaDBkRldrYWx4Y0Z2WS9QVzNRcnI2dzlkYzEzYWxKbTI3cml2dDJsd1ZoVjVGSWxwa3Bhb0JFVlo1WVZheEVGWGFCTmEvdHBqZnhkWmV6dXR3K0RjK0lQL0ovNHl5NE56Z3JnYkl3WDBFR2JWQ1phV3dsclNTY2o2Ty9FMCtJQkZoMGQwaSs0NXYzN2RtTlpYSzlUWHdHdjhNZlBiZXRDeDZYTCtBcENsRFcvSGpOaUsrN3ZycTFTczQyMTI4YmJHL012aU1jNUdvNUpjM0ttZGRaMjhvN0VVN1ZyQ0dCUFo0TnRMODkvdGxYRjBiSVltTkl3QkJBUT09KSBmb3JtYXQoXFxcIndvZmYyXFxcIik7dW5pY29kZS1yYW5nZTp1KzAwPz8sdSswMTMxLHUrMDE1Mi0wMTUzLHUrMDJiYi0wMmJjLHUrMDJjNix1KzAyZGEsdSswMmRjLHUrMjAwMC0yMDZmLHUrMjA3NCx1KzIwYWMsdSsyMTIyLHUrMjE5MSx1KzIxOTMsdSsyMjEyLHUrMjIxNSx1K2ZlZmYsdStmZmZkfUBmb250LWZhY2V7Zm9udC1kaXNwbGF5OnN3YXA7Zm9udC1mYW1pbHk6UXVpY2tzYW5kO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjMwMDtzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24veC1mb250LXdvZmYyO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdNZ0FCQUFBQUFESTBBQkFBQUFBQWRYQUFBREhUQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHbHdibkZZY2h6QUdZRDlUVkVGVUhBQ0ZBQkVJQ29HcUlJR0dWZ3VFS0FBQk5nSWtBNGhNQkNBRmhVSUhJQXdIRzJwZ1JRZGkyRGdBYVBBWkZrV3djUUFGbSs4VFJka21uVWoyL3lsQm16R2hkZWhiWlNGMFI3dW83aGtaQ1pHVDZobnBvYlpUV3h5NmNPRGgwRWcvOW8wRlIrSEE4czNKMWIzdHc1OVhvemdjQ053alptdHR3Q1Z4WDRoTG9wRWtUYVJYdDBaSVkySXQ0amY5MlhzQ3ZNUkxVd2oyUW8wSWtoY3hLa1lxNWlRdGNmbmltcnBaMGpxSHRHbmdKYmwvdERxemlpcWRxd0F6b1EwVEx4ODZNenBYNXRJNVQvenY5Njk3NXI0QW9vc1JCREpmQmJta1dnc0l0b3FOYkcyWEo5Q2tlb2JIYmYzekJCbW9HQTFJNWFneEdPMUdUYW9ORUZUTTY3SXVvbjlGWHZ6ZitpdWl3UUVLL1cvYWhtaWJ6K1ZkRWJWVlI0WU4rUGQvamN6Q1RPN0xud1dnSXFGbDVRQWwyMVlCMnA1S0pGbEw2SmY3WmVCemZ1NGNGSjNxK0FPQzhRVjY2em9iV3dZaFd3RC9WNXNtdkVYb3pFbUVUV3Z0S0cyVFBHM2hXY3BRbTluUU92UjhKRklWZ1pCZDJtYkZjK0kxZllYdndOUWtaaXZxeVAwZTkzODZ5MWJhOWQzekJxR0xxd0FYM1hwemJUSDYrdGJYekdna0EydUpmUXllbGZXZUpTdmdDMEpGVUYxYXhOZFRVMkhUcFNqN2xKbC9uZW1xNys5dlNNay82SmFkR3NzcXJnR2VldG5hTlZQTDR6K2Q3cXgvc2d4bkYyVDVlZ0hTVVd5WDdBRERWTUt4b3h6MEJjaHVYeGkyQXNDYXRUUHl2Z09PTlRPYnJPU2NjR3VDUWx6aEViS0IvdnJ0ejFpckg4aHNabmE3OW5Jbmh5MHlSRUxDSnlMZ1dmODYvM0FnVERBQUFMcGpORWczSk5OUVpMaHNaTG95cEZ3MXBrNGRjdGhoNUtpanlBa25FTUlCUXArdUovaWxraGlwdUNQSGVnK0c5bHBGb1EvYSt4T0tjNkhGQXhCMnpycDNvekFYYWlCdXhWTThWbUNrV21WN3R0ODNVcWw2aTZ4d3lhc3dDcFY5K2N6VTVPZmpyTXJIL0IxYmRzU1pLN21TVy9hL3RDbXZLb0pFaWhZalZpS1BQcnltS1ZEa1AvOXJNTU1zY3kydzBGTExyTFBSRG50ZGN4MHpLek0vRTZpQXBDajZML2svYUtBM0EyOE95VnhhQzRPbFQ1YWR1UE1QV2ZaQjB2QmtSdG5jWUFHZGhTdVdibG8yNTFyVDllQ09DS0xnZmJZR2txQko2VlF5YTRLVEdJSFVnNWZocVJTWUVqTUhSeElISStsSjNGVHp0TjBwV2g3RERERlBwdG9wdU40NEovQUlrZzFTZU9wY2k5aFAwUlRRRWlXT3d6eE4wMFpIVStVcFMxR0Y4QllQRUQzQUJMRjFucUxGZkF0U0lkczR0WlFyRUpDejlUS3RaMlRNVVZoYXhIT0xXM2lZU3QwcG9FY1lnb1N4NDdWRHFjeWhrZ2tGUFlIZHZNU3g5VjkrdDc2TkxacURCMm05WVlobXRtdjR6MGw3MWFEWC9oY3pPd1F1eHE2azFsVUM3bm1udEcvUDNTenpLR1EvZndSVUQvY09NUWlESXBUZ2p4dnZiL1Bid0U5c2xBNmlqTElUeGJrR2xwMm1YaGZVMU81QS95SGVhYlJXSXpJZFdqV1oyVzA5OFMzTkpteElVeEQwSlMySVFxaDcvRExPVkZVWTlJLzA3MWRxSkZ5NGdOOVNOeVBzQXFrbEpHWFBhZmVNK3hiRjVxSVljL0lBQnhtbG00QmNCK29QT1J6MTlDTTJvdWgyb0d0RU5OMkFKRnJDVnpPNE5vRDNleFdTRUtHNHNqTUR0T1ZKU2dZTFYzb1NhTFllZTZPckU1OUpXdEk3WHE2Rk1OQjZwQmFEem1TRzd4OVAvbmNvQVFDMFlPNjVBVi84VnFSNXBDN08wS0pSU1RpWE1IZWFqenZxOGZENlRFYXRkU2VFZEN5SnlPUDdIUzBITnNjam40RVVIN0lWdjVCOU5jSHQ2UStReHI1TmdKbEVZcEJibDdpV0ZUZzJTdnN0TkxwazF3ZDBFT0IvSEtPUDUxb0FrS0hiazBjeGdhVVNtRWR6dnZSRVhmWG5VRXF4cUdnZHgvMXBVQm42eVNVYmlMOGJrSWxDcE9DMkhGL1kweDVxcHhUTDZMbWxVUGJGT0pNallRRGVZSkljWUFodEtWcWZyRktJbmdtak9JNWV4K1diU1VBckNHTndoSURpYUtQUVYxMmV6YWRBMDRDSEc4NUxZbWgyZ2lNRW9oZ3VGQ0U3V3QyUm5wWk9QMExBbXpqSk5KTWwxRnFRMndmYlVCSmI4K2dkZmlTR1NXMWdDMXRaMHo3UVZRZGRvVFN5c2pTZWJ6b2xmeW9oU3RnZ0JlZUxDSE9EZk15bzJCT1M4YTEyaGlkcjNZVWhSRFZYVEFJeEU2eHdtczBERWcxTVJGSEFHdEdaSkxFNkN0QlpsNUoyQTd1bFRQMjBNalFYdStGR2NSaGpDb1ZYdG93Wml0aGVBaWdibG5PWklSZ0RDZ1lLZWpqQlFvUTZoUmgyTElhckdXQjd6K1lpdEtBdXFFTUFsOVFESWdIYzlSc1lpVXpBTmdNc1pHTExvVWF4YWtrVnJmRG96SzIxMFpiSzA0WnBpNkNFQlZvc01PQUFVVmdRaXdWMkhNakJEdUtVZ0pPSWd5WGhFTW5zVUNsU2FhU3h3NlRyaU9tTVJWMjRXU0cvQXIxb2I4TE45TUZhZmJGb3FOcmNjQ055NGtpanFJd0JKbE53QkM4bVdWZ2xHK3RNWit2NTVPTVY0RWlGMktDSWJWU3NsRm9aTnBtRnc4MlhXc3dvQzU2S0QrcVVyb0l6S21udTRHQVplSlovRUFCTTRRV1FScEZxaG9WWUNRZlBkcE9oSEdhV3V4NGV1RmlIbnU0MDBwbzFON0NYVk1uZktqUjJZZEZpc2NXcUZxdUJkTnZBYTlkeTh0RVRQKzcxM0x3Y0RQeHZEZDBhdys5bmV5ZmdkL1kzOENFTDVzSmlXQW5yKzMzL3daS2NRbndLanJYaU1BQnBEdUNvYVVpa0dJU2hDQUVGeUVFVjVKZWxGY0hCcDlMbmUvZS9hN2JNRXc4S3BQNlpaVm1WUjhTNW9iQW1WWkpXT001eTBqOEJBQlFZUVRVbVF5YVpHRVQxeDlIRENVa01HMk0ySEVPaHVYNUhqVHVCcFNwQUt3aVhPbXNxQnFEQVh6UVVJd1orZk9CSHZnWmhZaFBHMy9qVnlJdkpPRGRCSUMwaks1c0tuTjc2cVV4c0k1Ump0QXBpdndjbWVBUUs5RllLR3NFU3RDUVFvZzc2RzRaZW1xVEpUQVJXMUQ4eUJWSVFCVk1JaGFadS9WSDdoU09CUkZLUm1qUWtTYmtnUUhvaXJZemhLRlhYN0xJSm9MQzVhYW5pMHhnV0xnUmdUZ2xrck9hMVdNSnduUTlYemxjZm1BRHNoUTRIOUVvZW55NVNvckhyV2c5dHMwcEk3di8zc0Vld0FhenJ1QytHQ1BDZnhya1Q5Q1lBOUM5YkE1QnhTS0szZHgwQVlJL2V5aXFtdEJ1QW8wdGNOdWJyODB3bDQrbTRNUGo5bUthV1AvRkoxdGx0UGRVek80Ry9oTDlXanBUTnNsVnVJeWZJNlhKWHVWaWVFd3F0NGRibWZqOEFDQ0p6U2ZkbjRwTW80M0tza1hXeXNRVnBqRDlTd20wRjlBUEF2d09BTngydXZjYjJDOXVBQzkrRUM4OTR6enFmR2FQN0tPYmhybk03ejIwQkFZQkVRSDhuZ043SzkzWjFldVZ6TlBxbjdUUEhJdk1jZGRWMWk2MnozbjlPbVdXVCtaYWFhWWtMempsdmdXdUloaVJRc0dhMG1vdGdZR1JpWmhFbFdxdzRkZzVPaVpJa1M1Rm1qZit0OVFBSG9rSjZiLzNnYmpMMTFrZGZPYlEzZ0JoNjZtdTlzdjYzVHVkVG9GQ1JZbVZXdVdlMVMvYWI2N0RqampqaHZwc1JjVXVOTFM3YjdIYlV1T3VpMy8wUkRsZmMwQkFldjZtMTFULys5cStGQkF4SGhTZFNDeEF1Uktnd2tWclEwUXNpYTgycXBiWmFPYU9OQkM3eEZLbGlUTk5lQnJlTzJ1bWdrNjU2NmE2SG5vWVlZS0JCUEVhYllLeHhKaG52cklueTVjaVZwOFJVcFd3bVIwMkVqVGJZYVpjZENBMi9FQUJvRFFCc1A5QnlRTDhGTVA4QThKOEROd2NBQURaMkZieUVoT01VTENXcW9waElpRkZHUDYvSlNiYm5uSmdVeFYxRHpMUUFoQ0pJdUViQm8zZ3lhU1VKUlNOZEVMSFNIdElNM0hIR3NTTnhmZXdFbmNmcjZjQ2dNV2w3amFhSjAwZXhRdFFSOWlpRzRDVXc4Z1NpSm5ud1NiMnJzQWlwUkVsbnhDWU1zNmNTeUkrZTJSeDZFcWIrQ3JHRUhtT29OQU9GcEpTeU5sQVRoSFROUG9COUhRT3J4NGo1WGt6T2c0UU9DV21jUGpSeFRDM1U4WVBvdVVVN1g3ek12cmtpV283ZEpzWm5RUUFFN25uMS90NWZaMlJFUW1vMHdlaXV2SmtMbGcrd1JPa3M1eFM4TThXTGxUb0V4S1JKdU41Wmx1YzlWeG1HcDNYb2hTRlpnNjAyaDBQcGZRamdISExkVTlkWUdaR1VqRjh4R1BhZnBDaU5CcTlWNmkwNlQwNFlZcDRvSzE0b2MzZWxyQ2lWRVlEYy9qL3lRU25QT3RhSm56SEJhYWhjQTBDZkFDcThTNzVadEFrMHBUbktOQXV1TVFXUWJGaXZ0blBVeG5NTFFPdTJmRW1OYjFacTU1SU1jNVFadG1wOFZ5bFIrRkJZb3lsWHBYN1ZCREFtZG1JdEhWMkZSd3hxM2Y0ekpveDR0M0taZnBzank4dS9WV2JVZzdaMVI5TWdwYmpKNHRtNFdBRE1RazQ1d0RTa1VSZ3R5RW13Mk1LUlRXREZaZE4vRkdhUmZaSGJhN09MWU8vdVQ0aUhCNHFNY3F0SDdLVnYwYnF3T1pGL3RlWStEUTRvSFVRWWhRNE9WUW9iVFdOMVM3REI4UFhjK3p1eDZPUTN4TzFGZG1FcUEvdnlpSzN0dWFIU1JhVzQwT1kwOFpWQVBUV01Yd0s0WkVPeEJoQzhmVHdhc0doeEtTdDd5UWxCb1Q1MG9yeCtrTnFvbUcrcUlNMTRUeVhWaFNJRDEwdUVJMkNjdUZPcTU0Q2NRdk56eC9wY2Y4R29kTlkvUzN4bWFWK3pKWnN3NzlpbGU5Ri9VOHJoUFZDNG1RbGNNRHJib0RZUzZDTmI0QUt3eHArUkVGVlMxVEk2VU1adzR3WVdRTlBRVzV0TlRuRlBkTmd3MEZNK2RxZ0hnODI2SjhzaVZpM3VuUTRUbHNpOWdiN0c0NW1XTG5kL0R6Ky9SbmE4UkxFZTU5bXFwcjdTaG9xdFZ3U0l2Zm1HZFYydjh5cHFqVTd2NWo2bnJQMTExcGdzaUx4TmplMVdIQjhiTWpwV0o4MWR0UzJwYW53VGd3bk4yMzNXcXc0YkRKU1pHbEJKVFNEbEhlTVlaWFp0TzlmdWxXTS9lMEROM1p6TkZiemYvZHMydVhJTEtneGRrd045V0VUWnU3bHM1cmt3d1JLd3lWdVYyRk0yZWFsZkdWYWgzTFUwcjUxdFdmTTVXRkhDSi9XTVlZVWpoV3krY0VvOGV5V0JNWEV6V0NWTGt5YllqajF2clZKZG5PUlhleHNyZ1VETHFiYWgyb2lEODU3RVNHTGF2dGtUTEpSZm1OV0U4ZWFHMjkwV201SXNYaTVUaDdXd2xPOGMzTFNuM2V1aTdXUjVIOHhEWTEyTENiQ3lFeFYrNng0ZjN0UXdVREdyM2h0bE9mQUc2MzE4eGtyem1zamJxd1l0RVZTVzh2UjlLTGVoWjdvSjNva2E1aldMVm45cFdxY3JtRDJWdkdPYUo4ZW4rS2lPZFVia1BYSlFmVzV4WmI3VzJSZUR0T0pUYTBOYk56d3RSSlBBWjlSdHFTYXgwcUdsTGs5Mmd2MURYNU9VUSsrM1k2dTBVSzNQUHlEUmM4ZUlsbWtTY0VacDB3UzJ3NndjSzMrS3FuSjM0eWVOYWJ2RjUvUnlEUjBqNzhIdzg1SG16R1ZPUzBXSWc5SkFlbGdPNDl3Tmt0STdoQTBXOWt3SnVqOUNFbDJHYUJMNXFrSlhKbWdzc1M2YWdOVnY3b29HaUFneGFsKzNxd1RYZlRpbHJDbWxWbG84WTBMTTJEL0FOaGZ1aVNKck5YVnNCeDBXdFBia1Zrdk5hSGxrd2dBMWNPUXRJeXlFVWcwT0hIbHpkOTFRVzNybDNXMC9zM2R3bmZZSzBnQ09XendQdElDSFZuTlg3ZUJnUm5SY0dRU3JqaXVjMXdud3FXVWwxNnZSWjlWaFhTZU1JUzBrZkpDNzI4a1BrL3IyREVkVFBJOTBHS0FKbXR1UmcwcGpIYUU1Uy9sbXk3SFFDWTNnQnFrYmJrcERpdDdLTVBwOUxrUVFTWi9QNUlxRHdSQ2VQUno3ZDM2ME9nYUZUanNlTjUvRE84bWE0bEN4bDUxV2NwTzhUbnlkdUZsbWZoZnpWbXQ2ZWNoOExlbThuK2dRS0tLaGd3MkVYK3AvRGVzaTlHQVJWZ0s5a1RsT0xUa1FJYXJYTWJKWnRhRUQwNmI1YmRJNGFKK0VUWCtBaVE1SmR0dWNRMVhhRHp2REZxMXNMYUpjM3R4S1EzdFFMZXlVcXlLV1ZRM0YvcTBkRmo4WUQ4azZ5ZGRWRmE1K1ZzK0RTRzZ1Qy9uTjljZW51RU5xbGpKLzRjb3QvbjdmK3BpWWVZVXBvK0ZaT2xGR3hSdlYxV3k0VkVQR0tMSnBYN0FCM3VDdExGMmJtV2FJQmlORjZoQjkyM0cvVDJtdWR0SUUxZno2NlRVdzNBYnJRcmFsd0VGaE8zWkxMWkpHeld6d3p3TGpEcyt6OG9aazg0Z093b0hVQUhBZ0x3OFhoMmFGTXI2NmpzNVNveGt0SllCZVRyUmpYNXpuQmtkbUk5TSsvMWhyY1lqWXRkWnJnYnJWVFI2YzA2bzNtdWFDa05aY2pyZlBzWGxpcGFqTkx3YXVmTDVFVlNLRUFIZ3pvN0VNeFlKVzAvb2lKeHVOdGtvMFdtVS9PNDROZFVXekl1c05rZFpmamRmU1ZvMng4T0RISDZMelRIdXoycHdPVC9PY0JFakoxUlVqUjhiODc1TklFQkJ1bTNCdHQ2ekVvZGIxaE1kb01ockdHcVhVNDJCMG03M2t5THVSb2E1OFJ4bkdpS3htSUh3dGdOU3V2a0FxdXZSMEtOSnd2MzRZZTRZOStwdlczNUUwdHNGRjFndXVqVExVMzVmcFU4RHdsQWZQbkc3SDAzelc4WDBkSm5tdkp6eVk0NXg4bGhENmcySkFURVI1bXgvckV0M21OenEzT2thVXdKdklmR3UrZnE1WGZCT0hqYWZ2UUQ2SW93aGhiOW5RYXhUNkpEZlNiOFZreHJtVlZucXU1clhJNVJxN1JIeU1KUmlOSm5PSHQ4a212YmdnellqZ25UbjRkeWV4Y1N6TzN2UXlEb0o5bFdJanVJc1JLUjhmYkFBWG16dnNsdk11YmJvdlRhbWM3SzJiUlVmMkgweVJqTHRKcWVUdXlBamU4WVFjSkpBMWRjZHR6dVZDZTAvRXJoWU5Jd3UwWU96RXRlYitTbE1LT1VRc0U5dXVadXZ1UVhXYlhwWGxDYnV2SkFSWFB5QW16RkdoSSt1T0dNQkg3RFBPMG9EVXcxTTc4QU4zaEo2RUIrcW8wWVJoSTU4YkJYQ0lVTElteWdoV1ZzYXlzSVNRQjU2aHFCMkhJcFh6T3pPOUVsRnNkeHVCT1gwaVBoU3hOUDllVmh5U1NJcDJFelhrYWJSN2ZmUXhrZWlURDRMMEZZQ0dHaU56TURkSWpYaGhkelhQemVRNnNIVXdEeWdkVXN3eCt1bUtpcTQ5bzVRcnk0RUpQY2h2WDMybUoxRVpQdkxySjZwY2FWdW1DM3BRcVh6ajJldlg0b3BVN3ZOdTJhK09WK2VyeHZJajJVYmw2QTNuUnNreGtXdzlmTkFlalZ3TUlFNVJIRVNvNXhyMXhOS3M3Y2NOOE53MzFNZi85dFJBS05ETEhEN2NMNjVtbWVwYW9oa25QZUxZbmNiK1pHQVZzM1FtZXM1eUJHdjR4YkpSN1J1V2pLSVd3UTZsZkN0RnRIQWUwV0NvbzFEQytTQjZKc2RucEVtUGdCMmdTUTZKVWk4VkZvSUJoVjNraENoZjAyWXhqOUp2ZWcvVEtxVHdnM2VIUE81c1ZrV0RZdkdDU2FCdXFJN25hQTlvTkI4NzJOZ291SVFia0VySGI4OEoyZE5qUzZKcERyVGZWN3JoOFdyeGtyOGNCM1poMTJLbk1tS3FIbzFwT2VuaHRGNDZhekU5TGE4N3VjUnYzSlIyeXlRN21JTmxmZG5Ham5VSmV0L0YxdWplK3FPNlN3NnZZU3A2RFJzaUdnSjVCY3hYVm8zUjVMVitZVjF1dXpodmlYRCthYjFaR05EeDJQeDRucmFtYWNidHFIS29jeXYzMGV6QjI4R3JralhlMCt4QWtCd2FUTXpMZFltRk85Ty9nMkdJZUhBU1ZOclR6NFV4ckk4VHhLampWSnFydDFYcmRJN0RNKzNEZStDUTFmVzUvVjNUWEhkZnhvckV3TVBUYnhyc1JhWXBubEtITXh4WkhzK0pjZk1iN1hHcFBCV21MZnVDUS9mU3pldjJQUmF1Q3o2QWxsL0I0RUNFdnRGbzlCckdFZFpwbklPSStMZ2duNUJicU93U2JqaS8xaHFCYTM0bjlmSjlBRDNVOGlidWFtR0dkM1cxTHVSbE5vaHpuTGt1aVBlRDFqM0NERHA1VFZOR0ErRmhkWG9hWUV5TVQwcVR4MlJud3BzOEl0QjlmSEozeWE1RmVnQ2xmUDByUmxsOWQ3Q1ozMzNqL2hnM0cyTXRhdk0xZkJVTkJyTjFUZUZXRjBvYzdpd0NvUXZLbWVTcGhCUmVIdHl3MHlpdzkwbjZ4cGdDWXlrbW9OS0dobWgwSVZaWThLQmtPMFcxcHFZSWk5TWlUVkc5NEoyamgrY3ZPUzBSc2VRSzVnVUQ4RUFxUDJDYXI5SWpWaHRWM3N3UFZOelRCM3Z3WUNraVdCVTdyNzNONDJCQW42TjFHOWZsOU5YL0Q1QStKM2s5UjZOVVcvTnlicVRyVnN6dzV6Zk9EOE5vMW90WXZYMlNnWU5YMTBEYzVZb1B1SkxVajY2ZFR0Y09sL1BFYllaUGhyaTMrTysvRTkrTjlqYmVhUXJPUTVnSjE3eDBDSjJtRG9ZWW9OQmxUTldOSHV6eGEvRHVmanJ3dnJHMG9nK1lZYkZDYjBUQkQvM283aXR6TjdkelhHb2R6N2ZKMzZ4c0RPa3lPU0E0NE44ckhQdi8rVE1hREZwSm40MzROODVNL21jcStDS29pZ2h5d2Rqa2xWelM5OEhnNlFHQkdWK2tTYWExSzBseVI1VGtEY0ROL1lKVHBSL3pmYnpTa2s1ZXZGN1J1ZEZZS0pxbUloRWlSRWlyMDdGRUJOYXo0RUt6NzgwQk4zcUs5ck9iKzRZbzE4ejc1OG5ja2dTNk8rUGdMSFprK3ZYZXI3SWJ1OEJxdHJiczFmMzNteDUySGV5Wkp4M29pRzgwWHpkYkE1Uy8rRUo3THhFZnMyZFB6NFlnYXNlaHdSUmFMS0xUa1lnUUpYa1BSYkFoMWpxWG1TcmR6dmdtZkUrMlRaL2ZtNGp0eStkaisvZkc4MGlSMjZuLzY1MWorYk9kRWVWM2VaTDc0UVVpc0liUnIzU0pGNVRvbld4amZpSUdlZDN4YWN1WFlJL1hDOVh0aFlBWWtEVVkzdDFFZ1ROT1JrZ0U4UTRVRFNnVVFjT0hFQXVnUEo2Rjl2VVpRSjRuTGRRci8rOVYrR2dhNHZzUXhDRE5YNzU5NXlOWHBNL2ZXeEFucDl3K0M2ak5JbjI1VTVvc3FRR3JHSFhwQk80TmpiY3U2eTVmY3ZKb2RySHducFdhRlhXRFZHRnFYZjNaV3VOejdGOWV2dHJ5akc1aGFUb0hQN1h2eGJXemEyaUZnTmxYcHVLY0h5SzZ0SEw1SmtpeFMrMWp1dW51d2xxRDM3L1cwRjNRVGNkSUxVVzBHTmczRmMya3A2TktpNWxBVG1lbW9Ba0lUNXJaeFh6M2ZkbXArUU5tRzZSRnh4M0c2eWVYaW9wWmtWemZsZFlyVGZUWnp4WTlnbzIrZ1lYbVlJaFMzY2t0NkVFUGV6WTIzWkhoakcwd1B1SHQxenN6N1lzZEdlUHVaWWxlTU1Jc0thMG1iVEZydWxNR3kzc21KZVJDc3BmOFB1elE0SElScWRhSVhMaEU4NjdZZ1lCZG50WGtjMzZiVS9QNHcva3BaVDhVOUYwTTBCMGhvRm5vTmEwdWNXd3hGaTUwczdUMTV3TjB3cVRaZkI3ckxWOHltaGJxYmNPRi9qYWRhdlVmTjJzaFowR1ExcGI0TjQya2RHbjBjVlREOTEvV015Y241ZXFJUlQvMStkRmtiMHZUMWdPSnVWdnJDSWYyMlV1S3BwOTM2U0ZXMHFsc3FGdW1KUFdPVEN6d1U3NFhzS0ErV0J4bnFETlZrQWZBcUkzaldxc2h5bjlITWE5OVN2WkJtR3cvS2NCMWVqUXlvUEZZNXN1L09FUEQ3MFR5V29RL2lmVlIzbDhxVFNBdXZUVVg0RjRTZVkwYU5GelFBaVZRRmczWkQ3Ry8zMEVLTi9wY0VzQUJTakJYWTlkaTc0cmxYcEpjNGRWNDhqYUlCckF5NHd6THdJRFZadSszV2dmc3UwTnBPY1l3dzN2WEhaUWNyUkMzTnRRc0xQR21FTVgxQThzSDMwWVp1Z0JZdWp4Q0x3N2UrNU5EVGRkUThlYkdCK1lnNWFYMEtwcXdJdXBTTHIzeUQ1Sm5GeFR2ZmFucDZPRzArMStkbUYzNklnR3N3OUJCY1A1M25mSFA3Tm4zUVpYcHN4TStLcHhETm4xK0FxV0I0a2RqYmlhWXZ2UHFQN1dRNEsvRGpEVVo3MTMvRGJGN0JHS1NLSjA4WCtMMVRSUnl4K1ZXNzJvT3ZBMTNBUXVyWHUwNDl0M045RktZRTRXM2M2RTk2YTAxeVlkdmk3NytEQlJYdzltUkMvN0xQR0psa0ErN1I3MjIxY0dRZmNXb3k2VUtjcmZ4QXZBZkJ5RDZjTmFjdGVxSENhZStwQ2xtTEd0R0JnbUNTUDdqQkhSMXRkMFg5NHUzNjFiRCtZbDJnWXM5OXRrb0ExdWM4NjRQZkJUaWNhcHFldmhxWEJmZTJiUGxpK1AxSGpNWkZhdTRCR3VWTUdsMjZJYUtEbEo0ejY5WFI5R3h4WEhzNTBXYkxiaThBMThSVGVFcmg1MVdaWlQxaFRURmdweDhXajdTUGlxVDZzazJPS0g4NXI0QzY0VXNES3pxbkJHWGZVVW9hRjg5Nm5VSm5rU3YrbUh2UklpS01CaFVRT256ekd2SDBxOSthc21ZOWFwcVpxd1djOGFHRE9NRU1sZ2VRcUJTaDBVYVFEMjJJN3NlZlRhcmtGZ0xObk9wQTBlSCtxd2Q2Zy9vZFgrVnlXdzBCMWExbS95TFBjNVZRWjl6MVpKTzhMWGI0WW9yYmQxL1dMbWU3VUVCN0JyMTJGY0ZnL1pWbzI2WElzQTlKdGlCS2RhemxveEZQMFFRd09KcFFVb0VqZ3c5M1ZzUTNwdDByQ0tOb2g2bkp5WFZHY093d2ZNYWRjWFErVVJ2SC81MzUrMDBlWTRFZzUvWkwrd2ZVeTFwR0pVa25aT2puYmpFbUhFWWh1d1kwcCt4bTR4Wk0xSzAydzFEV2NjOGJzaW5NdG1pWldOeXVDQlovdG5oSFlqei9nWk9xTHVzZ3dCelFWZHRQRlFYZVlEdkhsUnhjd3RzUjJJMWpSOVNLaWR2T2IycGs3RDAva2lLdU9YeDNwbUR3NUZBSFJibVhWbForYWxTeGUrNEhTdWRpeGZhL1BKWVk2RWVtbzBrdEpyNjhoNTJZY0dLdnNIOUQ3eDlGVjdMOVM3d2RLd0tCdVhtQlc3ZmJNdFowQklSekZsUGNiMW1ZOG50cHNYMllnQXVzMGNNMHF4UkxQV3QxMUt4dmZjanFyZ0M5YXJFM204SjdmZUpSY1FWSkFlczg0cjZ1L21nYlVucWR6L2cwQzJ1Sm9WN2trOS9LV0NWTG93VzVPUlM3bHZaMmovNnFDT2tldytmNTJJMnJ5cWp4NCtxMjUvLzF5VDl0RG8vbXkrU2xabHo5bHI4T2RkanVDSEdsZHJEQm5FR0V3bkpYQlhtZEo3WHErSkt0QlBtUFJlcGV3bVc5NFJPR1ZFWTlLNDgrcjhpRWhBem5UeGdWR2RFOU9LMEVYblNDRmR4dkY4YTRLVEMxTnk4WnEyNzdCTkxpRmNDSE1ENUhlaFl0Y2hEK2haNzhGV0JvQkFOK2toTHlteXlBSUdXY2xhN0xXODFsZ2ljQ1FkdGRpYThNUEFIZGtIeUhxRzNwSXVodWV2TS9iaXhnUHlzWmU0UndyNHM0TGN2SDNXNUJFOGdWLzZ3MStSd2VqTXpDUitKdjgvRzlFVzhReitRd2VJeFpLQ2pBK25YNGM2dG45WWFmVU5mbDhVK2MxV01kd3ZYQThkYTZaM1JSdURzWGFnQVZ2VDBaeDlRNnBrL3FzQ0tTQXo4MXpYdGZ0RmZFRE5Udy9uTWJoNlFXUlpUWTRLbjUvT0ZYZmZTQWovNzZiQkFkaVlvUkZwN2MyTXJ3WEJUWnQ1cEQxc20yR0lWY0Vmd3RwMjBhZGYyaVpVWEkzd0RXbENBVlpJNVZMZjY2bU13R1lBeHpDdmxpR28rN3ZpTDE5WWo0SUt6MDdab3NNUFcvUHFmMC9ySXpwK21QL083Snh4SDBMelRaOHpHdEdzTzNFSVQ1eDZWVHJYVytMOWxnZTlVTUxQNVpiZkN2T1lsR25PaWVCcEVuUlNCeE4rL2VCTmYwamJ0d0VFNkJhb3pWeFY0cVdPTFE3KzZpa2ZkRytCS3d1eEN5SStyMmIrZzJOTXRrWDdSN2NmVkRLV2kvZ0NFa0QxYzFLeThzTFhodmdlT1B2aDRxSlo2RThHcjdOVGJFRlBjMnZEc1cyVzhtbGp0RnA2Y0NaV29zcnlSSEszUTlEdlI4OG0yOU5rVm5YdXJpUUlPaVNzYURwK3YyMU00ZmxVY0x6WWV2QkFDOXIrTVZxTnZvRFJDZ1ZGamN5Z05YSzdDeFlGamIvbG8wN1Z2WlF0bDBtem4vT3R2K2RKMTFkdHJ3SGsxVUE2dGRDd2VzM2swblUyTFN4c3g3Tk1TUFpldHNtYU11a0pIb1BYZENSOUg2b3pveEdtcjJXWXlKWkxPWkZBZGd3Mms5QkN6M1g2OTNPTHlHVHN5M3ErZWVKSnNlOTJ5YUlnNjcxL2Y4ZWduNFBBTXhRSzJYdzBMdmZkSjlCN2MrUWRTVFBTdmxDclo0TGgvMmhxbTd0YmFYRGJ6QWxodWRTRW83QWV1V21xcHp5MVhLVjF5MVZCcnBLUkxxVlM1bFpxZU45cTlCc1RtTlVvUU1XUk5JSUdHSTBYa3lzRVNjZ1ZabzdIaFlyQTBhQWxTb3dvOEZWZnV5K1hGbW9yaE9FRW9uOHU1eHNGNVlJdzVjaW9ub01JRmgyMVhSMHNIaXV1bUR0SmZ3K25uNWhTVkZXTCtWOVJVM0ZZeUlGSnZTR3cycE5VeWlnWDhLdWNEbWphT08zQnZuMDZYc1FoYmZPYVVkUGJudVNEV21qSWtrNTJUWVYxYU5JM2hsa2hXcktFWlBpd0RHcnlQY1BiNy9JeGx6N2FwSGtUaC9ZV3ZmbXNzRjZTNGtoYnZEM3FKa1FVV1hCWG5maUNVVWtpSmpRSmw4TFh0RThxZEk2akZiZEYySjdtdTI3eVhsNDN6OTdDOWcxU04yV3dFbytERGtPYlBlbHBFSFhrZDBtM0ROSWt1alZOS05GOVRJZXpmMXF4cHBkQ0ltaGY4TnduYXJ2NFAvVk9NTS8zd1FjdzY0RElKdTNCbmp4RHdJRFVqTjNuYU1tb2plem02UEREY0Z4K09sOE81UXV3MThHUW00QzhhNWgvUlN6NlBjRlc2Z0JURjJUR1Z4VlFxT25HWklhS0dZeWFkT0JVd1dod3BGTTRZMU1wWUFnSFhxL0J0ZU8rYUtiY0dJVVdnTUtLeU5TUjZOaDl1dWdZczdDQ3FIQ3owd3FncDNZZlliSG5FbEVaaGdXZkpQNTQzZmQrT1M0MUlNcXN6R2pNNkpHbVV2dmc5dEh5RWd2Q0laVEszV0VIQVJDTG1jaWRpUjhUQjNpUUJxejFCcVJxV0ovREFSRThTMUovVTRJeEwwRVdCZ2I2SStRTHg1eGVQeHJkVjVTZnJaK0YyR0Vqc1VaWFZOSGdhRE1kTldrc1FOWi9IQUtjTkdtVTBudkVFQkkrek9tRTFpeHhYUG00bTFiQkpIVCtrVkhrd284cFhFQWthc1p3VFdDMkFGZlJWWXcwL1VZNHRMcTFZcUxTalp5dWFSNmo1d0piNEFtK3lUM0dXVlh1YzNZZ05VODNnYmJsYzhKS3NmVWpRMEw1ajNwVUZjWElHY29BVjBDN3crYjVxUmlKV3hCRXJrbjhadVhleVdBb1dmZW1sQXhkcHZMZHcvcmhxWGJ2YXNFWFk4c0MxaGZ5S2NwQjhiN2xieVAxWEFlNFdzY0x6eFVOYmQzWDIxTlkzUEVGendYdUx0dDVSZjVpS1BTV1FJanNJdnIvVnJZYncvT0M3Q0w4dk0vQlRISFo1NVlhSk1wRE90N1J0YXRwWk9kdzJuMTVEaCt0TGpTOEFmdVhqUFJ6ZXViOVFCelZ2ZHJZSmhRRVVIMm1rdjB5NDk4Qkd3bmZ2aWp0b0ZiVTNTZHEyWC9kMFMzdEx5elNMOTFOejgyT2dCUGdzYXUreWdUK3RPQWc1MUhDZlhkR2Z5bkdxRVJUdmE4QTJxUEw3UGEyTjNMcy9uWmRBSzk5eTZDazI1NjVETFczVXhMSlJZKzJ0OS94dXZyUFowdHBTV2I2dDByZlYwclNQMDlIV3VxNjFkYnkxVFF1aUVyeE1wSmZjcHJkREZUVVBWYk5GTnp0WWFqMWwrZFc4bjVwYlh1UTBxMXVhRDRNbm9GQ2kzOTBudWhqZjl5RFl2eHl5STNTYUYxMFh4MHJsSml3NjNhM2tVNnAxSzJkd2t2eXhXeHlyMWM4VE9rRk9YV0tLcWozYml2SUVYMkhHYmJwQVl1WERqcXBEMXNFK24xWnRuY1JKcm1tZ2NuaVZET3V3dlBXU0N1eXdubjlhWTdVdjAxRE42eERUdDFxbFE5ZTdoVXRiaE1LV3BjSkVCU0ZiOWVVWVhBSkg1bnEwa3ZzaERtMUZyV1czOG83QjI5Qmx6ODU5V3lQUEExK2Jqd2FwK1B4a2h0ZDFJS0l3OWZ6bHlrN1YyazVNbm11VlhzbXR0VU56ckgzeHR0WUg2SnFqT0tLMlErZW12MTc1UHFRMzhUKzltNlM3eWZVOHE4RCtCeGhUUmVIQ3ZqVG5Xa0FNOTFKWTJRa2I1QUdQUXFXSnFBNzZubHcrdy9lOU9ZQmlwaTRkMmt0SWVPUk92MUJGY1crYWdDaEEzZXNsRVhVR2JjSUdBUlRjNG5oVDExQlo2NlhYelRGTEZOeVpJVDVNTFcrcnlCbW9kVzJWckVYRFJNWnFSRC8ycXlNTDcyWGdRcEdFTGZOb3o3MGd2bzdCa0J6eFdwNmVoQVZhY25wZXRYa042eEpHZGdpSnlocEpoN2FDTUlnRE1jcFJUOHFpYUx2TDdHYU5VK1puNHVpbHJnYTNZb00raUtzSEhxajlHdTRuZ3JwRkhvV3J2bEZRUHNQY3B4bGpxT0xzdmRtbWpicmVtc0hyYTkrdVNzR0Qrb1Z1cGJzT2I3RnhaWVU2c3F4UmJkeDBuV094a2traXVzNHZudy9LMFdDSlI1dUk3NVhYVDMxNEJzKzlEVG5CeGJ5Um1ORzV3dzVCZ1dQVUpoblpzbDJXVzNONSszVXJkaVUwTGlxeElDOWZKaHVmTmwrV1RKcXUwTGNTa2t4WDR6RkFlNVJXUkxWY1BqNVRNMU5GUnRQNWJiZmtjL1liTk5VSWlMbnBUQkxUc3JzcGdDTVp4Mm5GYWtNdkp1Y29pandhVU1hS2VMN1FRdWVqNktPMjNKRmxRSXRVdWpZek8vU1l1RTA3ZmJ2SVJORzhNbmNwbzVkM2w1bEswaklqbWR1NDlZOWJYNm8yNllsWmM3UGZIZjkwdk1kbUhsd1pRVHlIRE5YMUdsNWsxajdjUDQvNU1ORXA0MFFKelRNM0dMaXYwSnJmQlI0dUFmZjBxQkJNVzBLVTRWbXEyT01xY0xNZFREZXZhUGlDbWJZNHdZeVZMMWdaTm5WUnNqNEhMcGFBdWVhbnE0TGNDcGxYcFJLaWt5bVU2WWFjNGV1K0VJbysxL041K3M5RndpOTBRUDJOcmdDS0dwVERMREtXTGFSVzZrYlBhbU4zRVptS1JJUVF5ZFVlYkVTMCtYR3FkcWhiZ01TbTR1SDloYjd3QWFxT0lWMkM0S1BVdm1JRUwxQVBmQTM0SzVsbWl4VjM2RzgwS0xzYlVvMUNudXJDeUJSRjdrY0ZTKzlFc1lYL3pRZmY4Qi9iZmRQa3l6c3BNSTRxanBuc1hyckFvNy8xcWRmblMwVE0zQWFTMlVUdlI4ZUxWdUxlanV3TGxIZGJ3blVXWFpGVm1veGhuYUxMampDYk5maVoyUUpKTGdpSzI4cU91a3lseXhaeWV1SlAzQy9wSWJRNlRGMnVoWGdhY0taV0Zidmd6M0d2d2g1Z2FHZHRJQ0haZEFQd1BhQ3pJdWphZTFmTWRPRjkyZDRRd1dIdk9YMkxLREpsajJpNk5qZm9ocXNnaEZ1dUc5aEtyYVhOMG9oVjBFT2tHYUxMTHpPTXZ1aFhFOHZVNWRib2NzWm9ETWxNSVROeStUV2kwSktJTDVEVSswL3BkMGYwUTRtNkNYV3A4TUhRSStWOW5obmN3U0RLTWNvUS9jaHpWNzliS2MrL3Z2ZzUvU0Z3Tzc5MDdQRDV1L2RVeXZldjlEMmpYMFpaZEFlU1JpL3ZmNnE4M1dPekp4aVlXaGpLSDlwNkRtS1VkdHczNWY0U3hxdGJIN29qU2NXSEZyblcrRDdsWW0xTmsrSG1heXJ3ZFBSQ3ZmWW04TXNsanhvZkVjMk11RFgzMncvTU0raWx1dnpyRFp3VGNlbHR1cDl1aHQwR2w0OGQrUW5IVzA1VXNqelhhL25uMmJOczgzVDlFSFpvdThudDQ4c0ZPUHMxNzg5M0NiWGIyc05MV1RHTmpwVTRBTU9UckxoV3k0NVBYcXVWUnF4T1ZRVFdTR05XaHlyOHlCNTQ4b0pXWUFQWlhjRGh6Y0tPOTMrOEIrTzVSOHhLcU41Y21veWtGQ28xcmhZRllLMm9oR2V6UnRRVmpHNnA4am5BT2xVcGorUHFiY1MvbmxJQ05XUTRDN0JFY1AxT2I5L1luYzZ0YTRJM0xuSklWa2I3Tm1IZFdLajJ3cjlaektUaTc1c1hLMU5EZTV4ZFk0b3B6OHJFL1FlbkgvY3NXWFlxRmRtYmNRalgyQWZpdHBCRUdwRzdmUEl1dmZDckt4VmF2OVlRWW1Xa2pnNDNxQUxUZkpkdHpLb1V4bnhFLzNmUk9tL1JqS2k3dXpBbk9hZ2dTRm5YbnBicklIQzJMTmVXb3ZGbDJwWnFyZ24vNUtMa3NqRWlJTU5pL0loRW8vUkZaWmcvYXhZREtTL1lKVXpyVTd0Z2g5dURtN2p0cENGSVdiODkyeDJJMnlxeU1TcmVicjlJcTJQV3NKMk1YcndyTlNJaDNRQTVBMi9aVUlLMDFmYnd2bVlFRjhxR3FwQmlMR1hxWFM4ZXV3WmlMSTdWOXFhUExoajIwVUpQOTJxVkY2VjR2VVFkWXMzOGw5QlZnU25jWU9HN1pWa3RpdHJmZnZ0QjJiN1FKK0tHbW5OZXZKVWpXZXZoaUJDdlVpR05QZHlHZUFYTHQwSjRmcENjMkdrRjk5WFRVa0c0Vi90cXBLWEg5ZW1wQnhWbnYydURYWHBmRThtc21tTldsT01ZMkYrd3lWRE1HU2RDWWVQbVltNlRvZE95Q3puVDVuRElORkhRSWlYNFluVTZvVjNxOVVnd25jeWxPR2FTWm8rWFNhUW1WanV6QmszR2FLUVhSeFp4dWcxSnZzLzB3MkQ0ZjF2eHlVUWVHQlo1dlRJRCs0ZGM4c2Q0VCszUXZsZkFYQithSTcrVXpjN3pGQStMT1p4ZjVLQzhRbTF2Zjh4SUFkQm9VemwxTktQK1JIZEY0ZmlwNWxjYW1uWTNkMVMxdjFiL3RXUElZaThSaEwyazVRNW5hVUdnOFRvYTEyaVRtRm1iVUEwVVRXaDBDVE9tUytwaWdIY2xwRGh4OEdhb3ZTV2pMWFFyMFZJRW9oL3oxS1VUdG4zWGVPZzc5REMrNUNTVTZScmRQZW1UWC8xc2lkdjZENWdWYVZac0pUUG5VenNsVjZ2RlV2WFZFdW5WSElsRWM3VlhacE5MYmJLdk1iQnNiNi9rczMrTG9lWFRWOUlRc2dNTjlsMGIyZ0pablBOcE9NN3V2WjR1V2JZZDU5UlRPVHczSkdYcG52cXFoYlgrRzBES1ZDdGdFbDFVTFJQZjNlcmdrTjlQRjY0RUVIV1pSdDNFMjYyMWZQU0hhait4U0wySGhsendkVDJ6cXZoL3daZHNDRWpObzRvdUlMZDdJY2UxYlJId2ZwVldCWmhqZlppWlRBdEZOVk1MZzZnV01oaHFtV2hLMFIzRXBvS3R4eXVXelMxcTVtcnBPd3E4ZVZ5M0MvRlJlUk1JSEtlWktFSStlWWl1b21sMkNQb01Galg2cThCbHYwY0UzVnVvUWs4SzV5ZU1wZE5ISUlrczN4aExDU1hsZkU4cXYzeCtqdzlRWXBoUzR6TEhOZjN6dHJFbU1KMDRHMDEyVXNQWDUrdHF1a1hiVjJoS2JVa1JUSTZjK0R4RGZsTWh4b3NDSWMvemdKaEhGVXRkanlsdldDa3B1TDQyZFdEZnBPbHVhcWxaMWhOQnROc0xmQkdScVVKbUlTdjlaNEZFZWt2Z2pXdHNiR3I4UWU1Mkk3aTlKZmdSWGdPUXZWN2JKTmF0K090dFkvUXd5a3VOd0g0akMxYjVaVXZacDcrdXEyRmt1cnM0bWdPaGRyVy9kOWpnVFE2N3BnS0RyOGhtL2s3bzlvN3M1MDZ5MkNlZVkzUHVPOEZtbmJ6dmJ0WVBMYTMvVy9yWkZKWjdHZ0lNMzY3WHdQWWpnTXByL0VNZzRYb0RtNUd1bDFnSHM3L0NJU2FiM3p1Z2swNE1hQTBJVkVVdnJtM3VwV0RSOERjS2hsdFFNRnlOZ2lFVEkvZ25lNjJrVGQ2YzJkYms1V0hEcng3WkpJc3FjS1l2U3VKUmxJYWlvQnRGd1Rzb0N2NlVvZ1RBZGNnSkxjZ0p6eUluUElLYzhLR1VvaTkwd2ZTYVJ1d0FvbytvcWJxUjJ1Y1JwZzQvY2ozQlRKajlLZVp4NEdmam1tQVg1VG1XWUNsVE1OeW16d1FseFdtRFI5VisvaU9jSlBaZm1CNkhsK0FHalkwbzR0UnQxdmNIdTRiRmFuMnl6K0FiUmpOYjhvMVNUamRHR3FOT3hYNFNJVFZweUNQWEk4eWhpVDNCQWlZZTN6SVYrS2hrNWlSQ1BtalQrM1NsZXArdUJ2bmc1REdMUWZFWEE4RUE5bmJyblhvQXNYd3hlNyt1SXRBSWZvMzY4VWczUW1CcSt3am9iZlF4K2dSOWlqNURuNk12d0pmZ1Bla3JVdndhcVNLK1ZkN0Q3K0QzekE4ZTJ2aDJJekQ5dGVueFZENkpDNDUxMnh0OGxqNUhmVDlQZnhwK29zNEh0QVZkd1l6S25LcStRc3p4ZXhvM3JHd0xjcmQyVmRRUU4xbVh4MVBjd0MxdTRzUGJ6Qk5FTHYyTGFMRGRVdFAyb2JReEs4YXpIb080VzNpRDNUNDlmV2VVMmVmUjNmNy95TEZZWm1EUVh2YzlLOWxhZ1VVQU1lTGVmeGFzQWpDSGZWZ0FaQjZJZFlzNTBYdTEzYnFMRjliMjRJOVpEMnNEYmkxNC96OGd5MWl4bHRqZ3ZPVUI1TG9BZ0JYWXphbEpnc2FNclIxdFhZZFJSbEdIOVJRZHNFKzZ4bVJnOHlJZW84b3hSdU1RQlNvUHVNT01ZTUxkczR4R0NKK0gyU01pNWFidXMvd0NWWTV0TkEwWG0weTl4R00wSnRBT3ExcGdLMEJkS0FmN0RLR3YwTWZveTlGL1pHbGFsTnZsd25sQ2NoZ3RSTDlsVzZBcjRLTitvU2RnSXhYcElKeUYyN2dPMk8vTkFsaDFWWGVOT3lQZDkvM1NJS0EvVkNrMzlZNEVQWWl1SGVNQkhKcFdrbTNRZUpFTFBFWUwwVzlnZ1pLYTl6R0h6djhiSTdESGUvNFliaGZlMkU5aW9POUpNMzIzYnVic1NrUXZpTXcrbjNRTkpVZTh0T3Ryenk1djJFYTY3QTJ4VlpUczR1OHkxampudTUzTkMza0ViaUUvWmpzaXVsT2oyMFE2OFU2WUVpbXR4a3V1QzN2TDhZWkxvMnNGRWFkUXh1dkc5bEUwZXQ2K2xrKzdNUUhvTjBQWWxzYVhiK3ZhTjN0cjF5NDJkVm1rZlNiVjV4aTNCYlYxdTExTTl3RDBsT3pMWG5ZQ1I5MHQ0d3Qrcml1b0tBMTl5dXdEMnBMQUp3UTdaM3krY0luaThrZzYxOG5VU0FUMk82VksvM1dCSWExaFQyZXc3RW9GU3JhTUlqK1RXRTArOTRyYUhBSndFVDkrWjdwbFhFanEzeERIM1FEZzVJR08rNUw4TDIrSi8raXd6eFBNeGdFaUJnQUkvaXlab0hBbU1QMC9lRTVrOXk2aU5lMWs2dzdXejR1Y3JxVHB4eVozQmVVSnYyUnlwM1hGVFBZZHlMN0pJd1I0Umtqek43YXpYaTJDSU1FMHBUWG9kWmM3SVNqZCtyTDRGSHhHRXkzQVJIVUF4MVYvTFp2aWpsOHdXVjJtMWZTQ2Yrc3djMFcwNk9xYTVtNlNLenl0Um5oUVZhZ002TWNoUmdrSk1YWUU4WWhCOXVtS29vVHBHUnFOa0s0Zng0T1crdSs0Q3JjR1lyZ1RaNXZtRzlUVWp0Zm5pcVlaVVdUNlVnMGVFM2hraVVHNW5CcGdqRjE0RFhibytEUVJiZnBWMTN6TXBsSUpDdWMrVkxKeEdnYXp4RndXSTNaTG5qNjVYNTAweEIwM29aME1MNGFTUDZHdlFYS2J1UE1yVXF2bWFRaDNVR1pyUlVaTmlZbzl0WFRSVTd4R2xkU3lwWTQ1YkFyTFVMTXp0QWI2NWltZElPYVJEWXBJVUY1QnNJbzdLUTYvVXpTd3RJMlNlZFMxazdRb0lYUFNjMEdURjR1eldoeEx4dndOeEY3aDlyMTJMTFlYSWQ5RkQ1c3JPL1MzMmJLZVd6WlBKcVgvQU0zUWgxcHVmU3Q3NmppUXZZRWwxbU0wZU03VE1rd0FBM3Q5U0RtNzZaYVhLTFo1NjV2cE8waXh2ZlF5Q0kyajVCT2hWL2syUGlWM3NSdDRLcUZsL21EdURuVXo2bTdWdjc4UlBiM0kxalBNWFZDcVZZaWYrRVRGSG5XM3JjaE1iNTFlMXV1VnB6TDBsZ0dUSUFVTWFSVUZjS0FEc0lFRTBRSVptS2Z5RFVsRlpZY28yYTYvNDNRRENhWHNrY01HT0syczVLRnpxUHlpN3NqZko5UzhOVm9qajhvWDFNanV5ZkVFUUlDUGNXaW1BV2dqTEJ3a0pxME9KamlkSFp6MmlZM09aenNFa2RuckVObHluU05ZWWw1eWhES1hZZzhqMWJxVENBaHNuQzd5NUt0UUtKdFhsbUl5aFV1OE5MTEJCWml5dVFPVXlEYkpkRVVteURXWnJMOUNlYWFaWWhJSDdVUzB1SlhtZWJUSWlqWkJjckY4MDI4Nkp5ZXY3RXkxeEVRT3FzbVR3N25LdGRBVVplenlUZURsa3kzWEJHVVo0M0xLcGg3UUhLN3hxZUFRZXZ0b2NXUmxFdEpsQTAxUlpNcFJLVFZGWGVycHhWeEZ4YjY4bkY3anNxN0diZFUyMEJ1ZUlWSk93c2ZGcTRUUEJJVVNPTGk0Sk1yUVZ6OTlkWk1oYVBDNFdUc1l5Z0VuWnFzNG1yd1lLZHhldVBsWUtUTEpxRFMvVjRvNGhDbytEdk5RYi9RSSt2SG9yZWZnTVRQTW00WTV1MDc1UDZKSVhoSC9lMS95bndFQSkgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpO3VuaWNvZGUtcmFuZ2U6dSswMD8/LHUrMDEzMSx1KzAxNTItMDE1Myx1KzAyYmItMDJiYyx1KzAyYzYsdSswMmRhLHUrMDJkYyx1KzIwMDAtMjA2Zix1KzIwNzQsdSsyMGFjLHUrMjEyMix1KzIxOTEsdSsyMTkzLHUrMjIxMix1KzIyMTUsdStmZWZmLHUrZmZmZH1ib2R5LGh0bWx7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNH1odG1se2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1wYXJhZ3JhcGgscHtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS42O3RleHQtYWxpZ246anVzdGlmeX0ubW9uc3Rlci1oMSxoMXtmb250LXNpemU6M3JlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xNTttYXJnaW46NHJlbSAwIDEuNXJlbX0ubW9uc3Rlci1oMixoMntmb250LXNpemU6Mi41cmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjI7bWFyZ2luOjRyZW0gMCAxLjVyZW19Lm1vbnN0ZXItaDMsaDN7Zm9udC1zaXplOjJyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMjU7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfS5tb25zdGVyLWg0LGg0e2ZvbnQtc2l6ZToxLjVyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMzttYXJnaW46NHJlbSAwIDEuMjVyZW19Lm1vbnN0ZXItaDUsaDV7Zm9udC1zaXplOjEuNHJlbTtmb250LXdlaWdodDpib2xkZXI7bGluZS1oZWlnaHQ6MS4zO21hcmdpbjo0cmVtIDAgMS4yNXJlbX0ubW9uc3Rlci1oNixoNntmb250LXNpemU6MS4zcmVtO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxLjM7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfXAraDF7bWFyZ2luLXRvcDozLjc1cmVtfXAraDJ7bWFyZ2luLXRvcDozcmVtfXAraDN7bWFyZ2luLXRvcDoyLjI1cmVtfXAraDR7bWFyZ2luLXRvcDoxLjVyZW19cCtoNXttYXJnaW4tdG9wOi43NXJlbX1kaXYraDEsZGl2K2gyLGRpditoMyxkaXYraDQsZGl2K2g1LGRpditoNixwK2g2e21hcmdpbi10b3A6MH0uZGVjb3tiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTEpIDAsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0yKSA1MCUsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0zKSAxMDAlKTstd2Via2l0LWJhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtc2l6ZTpjb3Zlcjtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKTt0ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnR9OjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfTo6c2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9a2Jke2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2JvcmRlci1yYWRpdXM6MTByZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7cGFkZGluZzouMjVlbSAuNmVtO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH1kZXRhaWxze21hcmdpbi1ib3R0b206MXJlbX1zdW1tYXJ5e2N1cnNvcjpwb2ludGVyO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczpcXFwidG51bVxcXCI7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4xZW07cGFkZGluZzouNnJlbSAxcmVtfWRldGFpbHNbb3Blbl17cGFkZGluZzouNnJlbSAxcmVtIC43NXJlbX1kZXRhaWxzW29wZW5dIHN1bW1hcnl7bWFyZ2luLWJvdHRvbTouNXJlbTtwYWRkaW5nOjB9Lm1vbnN0ZXItbm8tdXNlci1zZWxlY3R7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfUBrZXlmcmFtZXMgZGV0YWlscy1zaG93ezAle29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtLjVlbSl9fWRldGFpbHNbb3Blbl0+Om5vdChzdW1tYXJ5KXthbmltYXRpb246ZGV0YWlscy1zaG93IC4xNXMgZWFzZS1pbi1vdXR9ZGV0YWlsc1tvcGVuXT46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9Lm1vbm9zcGFjZXtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5LW1vbm9zcGFjZSl9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdXRsaW5lOm5vbmU7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0uZmxleHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd30uaW52YWxpZHtiYWNrZ3JvdW5kLWNvbG9yOnJlZH06aG9zdHtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpibG9jazttYXJnaW46MDtvdXRsaW5lOm5vbmU7cGFkZGluZzowO3dpZHRoOjEwMCV9IFxufWAsXG5cdFx0MCxcblx0KTtcbn0gY2F0Y2ggKGUpIHtcblx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0ZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKSxcblx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdGUgKyBcIlwiLFxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IERhdGFzb3VyY2UgfSBmcm9tIFwiLi4vLi4vZGF0YS9kYXRhc291cmNlLm1qc1wiO1xuaW1wb3J0IHsgRGVhZE1hbnNTd2l0Y2ggfSBmcm9tIFwiLi4vLi4vdXRpbC9kZWFkbWFuc3N3aXRjaC5tanNcIjtcbmltcG9ydCB7IERhdGFTZXQgfSBmcm9tIFwiLi4vZGF0YXRhYmxlL2RhdGFzZXQubWpzXCI7XG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxuXHRnZXRTbG90dGVkRWxlbWVudHMsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IGRhdGFzb3VyY2VMaW5rZWRFbGVtZW50U3ltYm9sIH0gZnJvbSBcIi4uL2RhdGF0YWJsZS91dGlsLm1qc1wiO1xuaW1wb3J0IHsgRm9ybVN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L2Zvcm0ubWpzXCI7XG5cbmV4cG9ydCB7IEZvcm0gfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgZGVib3VuY2VXcml0ZUJhY2tTeW1ib2wgPSBTeW1ib2woXCJkZWJvdW5jZVdyaXRlQmFja1wiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgZGVib3VuY2VCaW5kU3ltYm9sID0gU3ltYm9sKFwiZGVib3VuY2VCaW5kXCIpO1xuXG4vKipcbiAqIEEgZm9ybSBjb250cm9sIHRoYXQgY2FuIGJlIHVzZWQgdG8gZ3JvdXAgZm9ybSBlbGVtZW50cy5cbiAqXG4gKiBAZnJhZ21lbnRzIC9mcmFnbWVudHMvY29tcG9uZW50cy9mb3JtL2Zvcm0vXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvZm9ybS9mb3JtLXNpbXBsZVxuICpcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgZm9ybSBjb250cm9sXG4gKiBAZmlyZXMgbW9uc3Rlci1vcHRpb25zLXNldFxuICogQGZpcmVzIG1vbnN0ZXItc2VsZWN0ZWRcbiAqIEBmaXJlcyBtb25zdGVyLWNoYW5nZVxuICogQGZpcmVzIG1vbnN0ZXItY2hhbmdlZFxuICovXG5jbGFzcyBGb3JtIGV4dGVuZHMgRGF0YVNldCB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIFRlbXBsYXRlIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbiBNYWluIHRlbXBsYXRlXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBjbGFzc2VzIENsYXNzIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjbGFzc2VzLmZvcm0gRm9ybSBjbGFzc1xuXHQgKiBAcHJvcGVydHkge09iamVjdH0gd3JpdGVCYWNrIFdyaXRlIGJhY2sgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmdbXX0gd3JpdGVCYWNrLmV2ZW50cyBXcml0ZSBiYWNrIGV2ZW50c1xuXHQgKiBAcHJvcGVydHkge09iamVjdH0gYmluZCBCaW5kIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSByZXBvcnRWYWxpZGl0eSBSZXBvcnQgdmFsaWRpdHkgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHJlcG9ydFZhbGlkaXR5LnNlbGVjdG9yIFJlcG9ydCB2YWxpZGl0eSBzZWxlY3RvclxuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IGZlYXR1cmVzLm11dGF0aW9uT2JzZXJ2ZXIgTXV0YXRpb24gb2JzZXJ2ZXIgZmVhdHVyZVxuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IGZlYXR1cmVzLndyaXRlQmFjayBXcml0ZSBiYWNrIGZlYXR1cmVcblx0ICogQHByb3BlcnR5IHtib29sZWFufSBmZWF0dXJlcy5iaW5kIEJpbmQgZmVhdHVyZVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdGNvbnN0IG9iaiA9IE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdH0sXG5cblx0XHRcdGNsYXNzZXM6IHtcblx0XHRcdFx0Zm9ybTogXCJcIixcblx0XHRcdH0sXG5cblx0XHRcdHdyaXRlQmFjazoge1xuXHRcdFx0XHRldmVudHM6IFtcImtleXVwXCIsIFwiY2xpY2tcIiwgXCJjaGFuZ2VcIiwgXCJkcm9wXCIsIFwidG91Y2hlbmRcIiwgXCJpbnB1dFwiXSxcblx0XHRcdH0sXG5cblx0XHRcdHJlcG9ydFZhbGlkaXR5OiB7XG5cdFx0XHRcdHNlbGVjdG9yOiBcImlucHV0LHNlbGVjdCx0ZXh0YXJlYVwiLFxuXHRcdFx0fSxcblxuXHRcdFx0ZXZlbnRQcm9jZXNzaW5nOiB0cnVlLFxuXHRcdH0pO1xuXG5cdFx0b2JqW1wiZmVhdHVyZXNcIl1bXCJtdXRhdGlvbk9ic2VydmVyXCJdID0gZmFsc2U7XG5cdFx0b2JqW1wiZmVhdHVyZXNcIl1bXCJ3cml0ZUJhY2tcIl0gPSB0cnVlO1xuXG5cdFx0cmV0dXJuIG9iajtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItZm9ybVwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge0NTU1N0eWxlU2hlZXRbXX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiBbRm9ybVN0eWxlU2hlZXRdO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdGNvbnN0IHNlbGVjdG9yID0gdGhpcy5nZXRPcHRpb24oXCJkYXRhc291cmNlLnNlbGVjdG9yXCIpO1xuXG5cdFx0aWYgKCFzZWxlY3Rvcikge1xuXHRcdFx0dGhpc1tkYXRhc291cmNlTGlua2VkRWxlbWVudFN5bWJvbF0gPSBuZXcgRGF0YXNvdXJjZSh0aGlzKTtcblx0XHR9XG5cblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblxuXHRcdGluaXRDb250cm9sUmVmZXJlbmNlcy5jYWxsKHRoaXMpO1xuXHRcdGluaXRFdmVudEhhbmRsZXIuY2FsbCh0aGlzKTtcblx0XHRpbml0RGF0YVNvdXJjZUhhbmRsZXIuY2FsbCh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIGNyZWF0ZWQuXG5cdCAqIEBzaW5jZSAzLjcwLjBcblx0ICogQHJldHVybiB7RGF0YVNldH1cblx0ICovXG5cdHJlZnJlc2goKSB7XG5cdFx0dGhpcy53cml0ZSgpO1xuXHRcdHN1cGVyLnJlZnJlc2goKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBSdW4gcmVwb3J0VmFsaWRhdGlvbiBvbiBhbGwgY2hpbGQgaHRtbCBmb3JtIGNvbnRyb2xzLlxuXHQgKlxuXHQgKiBAc2luY2UgMi4xMC4wXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRyZXBvcnRWYWxpZGl0eSgpIHtcblx0XHRsZXQgdmFsaWQgPSB0cnVlO1xuXG5cdFx0Y29uc3Qgc2VsZWN0b3IgPSB0aGlzLmdldE9wdGlvbihcInJlcG9ydFZhbGlkaXR5LnNlbGVjdG9yXCIpO1xuXHRcdGNvbnN0IG5vZGVzID0gZ2V0U2xvdHRlZEVsZW1lbnRzLmNhbGwodGhpcywgc2VsZWN0b3IpO1xuXG5cdFx0bm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuXHRcdFx0aWYgKHR5cGVvZiBub2RlLnJlcG9ydFZhbGlkaXR5ID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdFx0aWYgKG5vZGUucmVwb3J0VmFsaWRpdHkoKSA9PT0gZmFsc2UpIHtcblx0XHRcdFx0XHR2YWxpZCA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gdmFsaWQ7XG5cdH1cbn1cblxuZnVuY3Rpb24gaW5pdERhdGFTb3VyY2VIYW5kbGVyKCkge31cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7aW5pdEV2ZW50SGFuZGxlcn1cbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50SGFuZGxlcigpIHtcblx0dGhpc1tkZWJvdW5jZUJpbmRTeW1ib2xdID0ge307XG5cblx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMud3JpdGVCYWNrXCIpID09PSB0cnVlKSB7XG5cdFx0Y29uc3QgZXZlbnRzID0gdGhpcy5nZXRPcHRpb24oXCJ3cml0ZUJhY2suZXZlbnRzXCIpO1xuXHRcdGZvciAoY29uc3QgZXZlbnQgb2YgZXZlbnRzKSB7XG5cdFx0XHR0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIChlKSA9PiB7XG5cdFx0XHRcdGlmICghdGhpcy5yZXBvcnRWYWxpZGl0eSgpKSB7XG5cdFx0XHRcdFx0dGhpcy5jbGFzc0xpc3QuYWRkKFwiaW52YWxpZFwiKTtcblx0XHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMuY2xhc3NMaXN0LnJlbW92ZShcImludmFsaWRcIik7XG5cdFx0XHRcdFx0fSwgMTAwMCk7XG5cblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodGhpc1tkZWJvdW5jZVdyaXRlQmFja1N5bWJvbF0gaW5zdGFuY2VvZiBEZWFkTWFuc1N3aXRjaCkge1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHR0aGlzW2RlYm91bmNlV3JpdGVCYWNrU3ltYm9sXS50b3VjaCgpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdGlmIChlLm1lc3NhZ2UgIT09IFwiaGFzIGFscmVhZHkgcnVuXCIpIHtcblx0XHRcdFx0XHRcdFx0dGhyb3cgZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGRlbGV0ZSB0aGlzW2RlYm91bmNlV3JpdGVCYWNrU3ltYm9sXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzW2RlYm91bmNlV3JpdGVCYWNrU3ltYm9sXSA9IG5ldyBEZWFkTWFuc1N3aXRjaCgyMDAsICgpID0+IHtcblx0XHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMud3JpdGUoKTtcblx0XHRcdFx0XHR9LCAwKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7RmlsdGVyQnV0dG9ufVxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udHJvbFwiIHBhcnQ9XCJjb250cm9sXCI+XG4gICAgICAgICAgICA8Zm9ybSBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImRpc2FibGVkIHBhdGg6ZGlzYWJsZWQgfCBpZjp0cnVlLCBjbGFzcyBwYXRoOmNsYXNzZXMuZm9ybVwiXG4gICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cImZvcm1cIlxuICAgICAgICAgICAgICAgICAgcGFydD1cImZvcm1cIj5cbiAgICAgICAgICAgICAgICA8c2xvdCBkYXRhLW1vbnN0ZXItcm9sZT1cInNsb3RcIj48L3Nsb3Q+XG4gICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgIDwvZGl2PlxuICAgIGA7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChGb3JtKTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpc0FycmF5LCBpc0luc3RhbmNlIH0gZnJvbSBcIi4vaXMubWpzXCI7XG5pbXBvcnQgeyBOb2RlIH0gZnJvbSBcIi4vbm9kZS5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlSW5zdGFuY2UgfSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IE5vZGVMaXN0IH07XG5cbi8qKlxuICogWW91IGNhbiBjcmVhdGUgdGhlIGluc3RhbmNlIHZpYSB0aGUgbW9uc3RlciBuYW1lc3BhY2UgYG5ldyBNb25zdGVyLlR5cGVzLk5vZGVMaXN0KClgLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjYuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgTm9kZUxpc3QgY2xhc3NcbiAqL1xuY2xhc3MgTm9kZUxpc3QgZXh0ZW5kcyBTZXQge1xuXHQvKipcblx0ICogQHRocm93cyB7RXJyb3J9IGludmFsaWQgdmFsdWUgdHlwZVxuXHQgKiBAcGFyYW0ge05vZGVMaXN0fE5vZGV8QXJyYXk8Tm9kZT59dmFsdWVzXG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcih2YWx1ZXMpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0aWYgKHZhbHVlcyA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG5cblx0XHRpZiAoaXNBcnJheSh2YWx1ZXMpKSB7XG5cdFx0XHR2YWx1ZXMuZm9yRWFjaCgodmFsdWUpID0+IHRoaXMuYWRkKHZhbHVlKSk7XG5cdFx0fSBlbHNlIGlmIChpc0luc3RhbmNlKHZhbHVlcywgTm9kZUxpc3QpKSB7XG5cdFx0XHR2YWx1ZXMuZm9yRWFjaCgodmFsdWUpID0+IHRoaXMuYWRkKHZhbHVlKSk7XG5cdFx0fSBlbHNlIGlmIChpc0luc3RhbmNlKHZhbHVlcywgTm9kZSkpIHtcblx0XHRcdHRoaXMuYWRkKHZhbHVlcyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImludmFsaWQgdmFsdWUgdHlwZVwiKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL3R5cGVzL25vZGUtbGlzdFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge05vZGV9IG5vZGVcblx0ICogQHJldHVybiB7TW9uc3Rlci5UeXBlcy5Ob2RlTGlzdH1cblx0ICovXG5cdGFkZChub2RlKSB7XG5cdFx0c3VwZXIuYWRkKHZhbGlkYXRlSW5zdGFuY2Uobm9kZSwgTm9kZSkpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuXHQgKiBAcmV0dXJuIHtOb2RlTGlzdH1cblx0ICovXG5cdHJlbW92ZShub2RlKSB7XG5cdFx0c3VwZXIuZGVsZXRlKHZhbGlkYXRlSW5zdGFuY2Uobm9kZSwgTm9kZSkpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0aGFzKG5vZGUpIHtcblx0XHRyZXR1cm4gc3VwZXIuaGFzKHZhbGlkYXRlSW5zdGFuY2Uobm9kZSwgTm9kZSkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge05vZGVMaXN0fVxuXHQgKi9cblx0Y2xlYXIoKSB7XG5cdFx0c3VwZXIuY2xlYXIoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtOb2RlTGlzdH1cblx0ICovXG5cdHRvQXJyYXkoKSB7XG5cdFx0cmV0dXJuIEFycmF5LmZyb20odGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7Tm9kZUxpc3R9XG5cdCAqL1xuXHR0b0pTT04oKSB7XG5cdFx0cmV0dXJuIHRoaXMudG9BcnJheSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge05vZGVMaXN0fVxuXHQgKi9cblx0dG9TdHJpbmcoKSB7XG5cdFx0Y29uc3QgcGFydHMgPSBbXTtcblxuXHRcdGZvciAoY29uc3Qgbm9kZSBvZiB0aGlzLnRvQXJyYXkoKSkge1xuXHRcdFx0cGFydHMucHVzaChub2RlLnRvU3RyaW5nKCkpO1xuXHRcdH1cblxuXHRcdHJldHVybiBwYXJ0cy5qb2luKFwiXFxuXCIpO1xuXHR9XG5cblx0Z2V0IGxlbmd0aCgpIHtcblx0XHRyZXR1cm4gc3VwZXIuc2l6ZTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgaXNQcmltaXRpdmUgfSBmcm9tIFwiLi9pcy5tanNcIjtcbmltcG9ydCB7IE5vZGVMaXN0IH0gZnJvbSBcIi4vbm9kZWxpc3QubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlIH0gZnJvbSBcIi4vdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IE5vZGUgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgaW50ZXJuYWxWYWx1ZVN5bWJvbCA9IFN5bWJvbChcImludGVybmFsRGF0YVwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgdHJlZVN0cnVjdHVyZVN5bWJvbCA9IFN5bWJvbChcInRyZWVTdHJ1Y3R1cmVcIik7XG5cbi8qKlxuICogWW91IGNhbiBjcmVhdGUgdGhlIGluc3RhbmNlIHZpYSB0aGUgbW9uc3RlciBuYW1lc3BhY2UgYG5ldyBNb25zdGVyLlR5cGVzLk5vZGUoKWAuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBOb2RlIENsYXNzXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RlL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0l0ZXJhdGlvbl9wcm90b2NvbHNcbiAqL1xuY2xhc3MgTm9kZSBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICogQHBhcmFtIHsqfSBbdmFsdWVdXG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcih2YWx1ZSkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpc1tpbnRlcm5hbFZhbHVlU3ltYm9sXSA9IHZhbHVlO1xuXG5cdFx0dGhpc1t0cmVlU3RydWN0dXJlU3ltYm9sXSA9IHtcblx0XHRcdHBhcmVudDogbnVsbCxcblx0XHRcdGNoaWxkTm9kZXM6IG5ldyBOb2RlTGlzdCgpLFxuXHRcdFx0bGV2ZWw6IDAsXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvdHlwZXMvbm9kZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJvcGVydHkgeyp9XG5cdCAqL1xuXHRnZXQgdmFsdWUoKSB7XG5cdFx0cmV0dXJuIHRoaXNbaW50ZXJuYWxWYWx1ZVN5bWJvbF07XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHsqfVxuXHQgKi9cblx0c2V0IHZhbHVlKHZhbHVlKSB7XG5cdFx0dGhpc1tpbnRlcm5hbFZhbHVlU3ltYm9sXSA9IHZhbHVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7TW9uc3Rlci5UeXBlcy5Ob2RlfG51bGx9XG5cdCAqL1xuXHRnZXQgcGFyZW50KCkge1xuXHRcdHJldHVybiB0aGlzW3RyZWVTdHJ1Y3R1cmVTeW1ib2xdLnBhcmVudDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge2ludGVnZXJ9XG5cdCAqL1xuXHRnZXQgbGV2ZWwoKSB7XG5cdFx0cmV0dXJuIHRoaXNbdHJlZVN0cnVjdHVyZVN5bWJvbF0ubGV2ZWw7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHByb3BlcnR5IHtOb2RlTGlzdH1cblx0ICovXG5cdGdldCBjaGlsZE5vZGVzKCkge1xuXHRcdHJldHVybiB0aGlzW3RyZWVTdHJ1Y3R1cmVTeW1ib2xdLmNoaWxkTm9kZXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHByb3BlcnR5IHtOb2RlTGlzdH1cblx0ICovXG5cdHNldCBjaGlsZE5vZGVzKGNoaWxkTm9kZXMpIHtcblx0XHR0aGlzW3RyZWVTdHJ1Y3R1cmVTeW1ib2xdLmNoaWxkTm9kZXMgPSB2YWxpZGF0ZUluc3RhbmNlKFxuXHRcdFx0Y2hpbGROb2Rlcyxcblx0XHRcdE5vZGVMaXN0LFxuXHRcdCk7XG5cdFx0c2V0Q2hpbGRMZXZlbEFuZFBhcmVudC5jYWxsKHRoaXMsIHRoaXMsIDEsIG5ldyBTZXQoKSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7TW9uc3Rlci5UeXBlcy5Ob2RlfVxuXHQgKiBAcGFyYW0ge05vZGV9IG5vZGVcblx0ICovXG5cdGFwcGVuZENoaWxkKG5vZGUpIHtcblx0XHR0aGlzW3RyZWVTdHJ1Y3R1cmVTeW1ib2xdLmNoaWxkTm9kZXMuYWRkKHZhbGlkYXRlSW5zdGFuY2Uobm9kZSwgTm9kZSkpO1xuXHRcdG5vZGVbdHJlZVN0cnVjdHVyZVN5bWJvbF0ucGFyZW50ID0gdGhpcztcblxuXHRcdG5vZGVbdHJlZVN0cnVjdHVyZVN5bWJvbF0ubGV2ZWwgPSB0aGlzLmxldmVsICsgMTtcblx0XHRzZXRDaGlsZExldmVsQW5kUGFyZW50LmNhbGwodGhpcywgbm9kZSwgMSwgbmV3IFNldCgpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLlR5cGVzLk5vZGV9XG5cdCAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuXHQgKi9cblx0cmVtb3ZlQ2hpbGQobm9kZSkge1xuXHRcdHRoaXNbdHJlZVN0cnVjdHVyZVN5bWJvbF0uY2hpbGROb2Rlcy5yZW1vdmUodmFsaWRhdGVJbnN0YW5jZShub2RlLCBOb2RlKSk7XG5cdFx0bm9kZVt0cmVlU3RydWN0dXJlU3ltYm9sXS5wYXJlbnQgPSBudWxsO1xuXG5cdFx0bm9kZVt0cmVlU3RydWN0dXJlU3ltYm9sXS5sZXZlbCA9IDA7XG5cdFx0c2V0Q2hpbGRMZXZlbEFuZFBhcmVudC5jYWxsKHRoaXMsIG5vZGUsIC0xLCBuZXcgU2V0KCkpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRoYXNDaGlsZE5vZGVzKCkge1xuXHRcdHJldHVybiB0aGlzW3RyZWVTdHJ1Y3R1cmVTeW1ib2xdLmNoaWxkTm9kZXMubGVuZ3RoID4gMDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLlR5cGVzLk5vZGV9XG5cdCAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuXHQgKi9cblx0aGFzQ2hpbGQobm9kZSkge1xuXHRcdHJldHVybiB0aGlzW3RyZWVTdHJ1Y3R1cmVTeW1ib2xdLmNoaWxkTm9kZXMuaGFzKFxuXHRcdFx0dmFsaWRhdGVJbnN0YW5jZShub2RlLCBOb2RlKSxcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBzaW5jZSAxLjI4LjBcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0dG9TdHJpbmcoKSB7XG5cdFx0Y29uc3QgcGFydHMgPSBbXTtcblx0XHRpZiAodGhpc1tpbnRlcm5hbFZhbHVlU3ltYm9sXSkge1xuXHRcdFx0bGV0IGxhYmVsID0gdGhpc1tpbnRlcm5hbFZhbHVlU3ltYm9sXTtcblx0XHRcdGlmICghaXNQcmltaXRpdmUobGFiZWwpKVxuXHRcdFx0XHRsYWJlbCA9IEpTT04uc3RyaW5naWZ5KHRoaXNbaW50ZXJuYWxWYWx1ZVN5bWJvbF0pO1xuXG5cdFx0XHRwYXJ0cy5wdXNoKGxhYmVsKTtcblx0XHR9XG5cblx0XHRpZiAoIXRoaXMuaGFzQ2hpbGROb2RlcygpKSB7XG5cdFx0XHRyZXR1cm4gcGFydHMuam9pbihcIlxcblwiKTtcblx0XHR9XG5cblx0XHRjb25zdCBjb3VudCA9IHRoaXMuY2hpbGROb2Rlcy5sZW5ndGg7XG5cdFx0bGV0IGNvdW50ZXIgPSAwO1xuXG5cdFx0Zm9yIChjb25zdCBub2RlIG9mIHRoaXMuY2hpbGROb2Rlcykge1xuXHRcdFx0Y291bnRlcisrO1xuXHRcdFx0Y29uc3QgcHJlZml4ID0gKGNvdW50ID09PSBjb3VudGVyID8gXCJcdTI1MTRcIiA6IFwiXHUyNTFDXCIpLnBhZFN0YXJ0KFxuXHRcdFx0XHQyICogbm9kZS5sZXZlbCxcblx0XHRcdFx0XCIgfFwiLFxuXHRcdFx0KTtcblx0XHRcdHBhcnRzLnB1c2gocHJlZml4ICsgbm9kZS50b1N0cmluZygpKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcGFydHMuam9pbihcIlxcblwiKTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAqIEBwYXJhbSB7aW50fSBvcGVyYW5kXG4gKiBAcGFyYW0ge1NldH0gdmlzaXRlZE5vZGVzXG4gKiBAcmV0dXJuIHtzZXRDaGlsZExldmVsQW5kUGFyZW50fVxuICovXG5mdW5jdGlvbiBzZXRDaGlsZExldmVsQW5kUGFyZW50KG5vZGUsIG9wZXJhbmQsIHZpc2l0ZWROb2Rlcykge1xuXHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRpZiAodmlzaXRlZE5vZGVzLmhhcyhub2RlKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFwidGhlIG5vZGUgaGFzIGFscmVhZHkgYmVlbiB2aXNpdGVkIGFuZCBjYW5ub3QgYmUgdHJhdmVyc2VkIGFnYWluXCIsXG5cdFx0KTtcblx0fVxuXG5cdHZpc2l0ZWROb2Rlcy5hZGQobm9kZSk7XG5cblx0aWYgKG5vZGUgIT09IHRoaXMpIHtcblx0XHRub2RlW3RyZWVTdHJ1Y3R1cmVTeW1ib2xdLnBhcmVudCA9IHRoaXM7XG5cdH1cblxuXHRub2RlW3RyZWVTdHJ1Y3R1cmVTeW1ib2xdLmNoaWxkTm9kZXMuZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcblx0XHRjaGlsZFt0cmVlU3RydWN0dXJlU3ltYm9sXS5wYXJlbnQgPSBub2RlO1xuXHRcdGNoaWxkW3RyZWVTdHJ1Y3R1cmVTeW1ib2xdLmxldmVsID1cblx0XHRcdG5vZGVbdHJlZVN0cnVjdHVyZVN5bWJvbF0ubGV2ZWwgKyBvcGVyYW5kO1xuXHRcdHNldENoaWxkTGV2ZWxBbmRQYXJlbnQuY2FsbChzZWxmLCBjaGlsZCwgb3BlcmFuZCwgdmlzaXRlZE5vZGVzKTtcblx0fSk7XG5cdHJldHVybiB0aGlzO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGlzQXJyYXksIGlzT2JqZWN0IH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgTm9kZSB9IGZyb20gXCIuLi90eXBlcy9ub2RlLm1qc1wiO1xuaW1wb3J0IHsgTm9kZUxpc3QgfSBmcm9tIFwiLi4vdHlwZXMvbm9kZWxpc3QubWpzXCI7XG5pbXBvcnQgeyBjbG9uZSB9IGZyb20gXCIuLi91dGlsL2Nsb25lLm1qc1wiO1xuaW1wb3J0IHsgYXNzZW1ibGVQYXJ0cyB9IGZyb20gXCIuL2J1aWxkbWFwLm1qc1wiO1xuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSBcIi4vZXh0ZW5kLm1qc1wiO1xuXG5leHBvcnQgeyBidWlsZFRyZWUgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcGFyZW50U3ltYm9sID0gU3ltYm9sKFwicGFyZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCByb290U3ltYm9sID0gU3ltYm9sKFwicm9vdFwiKTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBidWlsZFRyZWVPcHRpb25zXG4gKiBAcHJvcGVydHkge2FycmF5fSBvcHRpb25zLnJvb3RSZWZlcmVuY2VzPVtudWxsLCB1bmRlZmluZWRdIGRlZmluZXMgdGhlIHZhbHVlcyBmb3IgZWxlbWVudHMgd2l0aG91dCBwYXJlbnRzXG4gKiBAcHJvcGVydHkge01vbnN0ZXIuRGF0YX5leGFtcGxlRmlsdGVyQ2FsbGJhY2t9IG9wdGlvbnMuZmlsdGVyIGZpbHRlcmluZyBvZiB0aGUgdmFsdWVzXG4gKi9cblxuLyoqXG4gKiBDcmVhdGVzIGEgdHJlZSBzdHJ1Y3R1cmUgZnJvbSBhIGdpdmVuIHN1YmplY3QgdXNpbmcgYSBzZWxlY3RvciBhbmQgc3BlY2lmaWVkIElEIGFuZCBwYXJlbnQgSUQga2V5cy5cbiAqXG4gKiBUaGUgYnVpbGRUcmVlIGZ1bmN0aW9uIGlzIGEgcG93ZXJmdWwgdG9vbCBmb3IgY3JlYXRpbmcgdHJlZS1saWtlIGRhdGEgc3RydWN0dXJlcyBmcm9tIHBsYWluIEphdmFTY3JpcHRcbiAqIG9iamVjdHMuIEl0IHRha2VzIGluIGZvdXIgcmVxdWlyZWQgcGFyYW1ldGVyczogdGhlIHN1YmplY3Qgb2JqZWN0IHRoYXQgeW91IHdhbnQgdG8gdHVybiBpbnRvIGEgdHJlZSwgYVxuICogc2VsZWN0b3IgdGhhdCBpZGVudGlmaWVzIHdoaWNoIHBhcnRzIG9mIHRoZSBzdWJqZWN0IHRvIHVzZSB3aGVuIGJ1aWxkaW5nIHRoZSB0cmVlLCBhbmQgdHdvIGtleXNcbiAqIChpZEtleSBhbmQgcGFyZW50SURLZXkpIHRoYXQgc3BlY2lmeSB3aGljaCBwcm9wZXJ0aWVzIGluIHRoZSBzdWJqZWN0IHJlcHJlc2VudCB0aGUgdW5pcXVlIGlkZW50aWZpZXJzXG4gKiBhbmQgcGFyZW50LWNoaWxkIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBub2RlcyBpbiB0aGUgdHJlZS5cbiAqXG4gKiBPcHRpb25hbGx5LCB5b3UgY2FuIGFsc28gcGFzcyBpbiBhbiBvcHRpb25zIG9iamVjdCB0byBmdXJ0aGVyIGNvbmZpZ3VyZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGZ1bmN0aW9uLFxuICogc3VjaCBhcyBzcGVjaWZ5aW5nIHdoaWNoIHZhbHVlcyBzaG91bGQgYmUgdHJlYXRlZCBhcyByb290cyBvZiB0aGUgdHJlZSwgb3IgcHJvdmlkaW5nIGEgY3VzdG9tIGZpbHRlclxuICogZnVuY3Rpb24gdG8gb25seSBpbmNsdWRlIGNlcnRhaW4gbm9kZXMgaW4gdGhlIGZpbmFsIG91dHB1dC5cbiAqXG4gKiBUaGUgYnVpbGRUcmVlIGZ1bmN0aW9uIHdvcmtzIGJ5IGZpcnN0IHVzaW5nIHRoZSBhc3NlbWJsZVBhcnRzIGhlbHBlciBmdW5jdGlvbiB0byBleHRyYWN0IHRoZSByZWxldmFudFxuICogcGFydHMgb2YgdGhlIHN1YmplY3QgYmFzZWQgb24gdGhlIHNlbGVjdG9yLCBhbmQgdGhlbiBpdGVyYXRlcyBvdmVyIHRoZSByZXN1bHRpbmcgbWFwIHRvIGNyZWF0ZSBOb2RlXG4gKiBvYmplY3RzIGFuZCBvcmdhbml6ZSB0aGVtIGludG8gcGFyZW50LWNoaWxkIHJlbGF0aW9uc2hpcHMgYmFzZWQgb24gdGhlIHZhbHVlcyBvZiB0aGUgaWRLZXkgYW5kIHBhcmVudElES2V5IHByb3BlcnRpZXMuXG4gKlxuICogVGhlIHJlc3VsdGluZyBOb2RlTGlzdCByZXByZXNlbnRzIHRoZSB0cmVlIHN0cnVjdHVyZSwgd2l0aCBlYWNoIE5vZGUgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIG9yaWdpbmFsXG4gKiBvYmplY3QgZGF0YSBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgbWV0YWRhdGEgYWJvdXQgaXRzIHBvc2l0aW9uIGluIHRoZSB0cmVlLiBZb3UgY2FuIHRoZW4gdXNlIHRoZSBjaGlsZE5vZGVzXG4gKiBwcm9wZXJ0eSBvZiBlYWNoIE5vZGUgdG8gYWNjZXNzIGl0cyBjaGlsZHJlbiwgb3IgdGhlIHBhcmVudCBwcm9wZXJ0eSB0byBhY2Nlc3MgaXRzIHBhcmVudC5cbiAqXG4gKiBPdmVyYWxsLCB0aGUgYnVpbGRUcmVlIGZ1bmN0aW9uIGlzIGEgZmxleGlibGUgYW5kIHBvd2VyZnVsIHdheSB0byB0cmFuc2Zvcm0gZmxhdCBkYXRhIGludG8gaGllcmFyY2hpY2FsXG4gKiBzdHJ1Y3R1cmVzLCBhbmQgY2FuIGJlIGVzcGVjaWFsbHkgdXNlZnVsIGluIHNjZW5hcmlvcyBzdWNoIGFzIGRpc3BsYXlpbmcgZm9sZGVyIHN0cnVjdHVyZXMgb3JcbiAqIHZpc3VhbGl6aW5nIGNvbXBsZXggZGF0YSByZWxhdGlvbnNoaXBzLlxuICpcbiAqIExldCdzIHNheSB5b3UgaGF2ZSBhbiBhcnJheSBvZiBkYXRhIG9iamVjdHMgcmVwcmVzZW50aW5nIGEgZmlsZSBzeXN0ZW0gZGlyZWN0b3J5IHN0cnVjdHVyZSwgYW5kIHlvdSB3YW50XG4gKiB0byB0dXJuIGl0IGludG8gYSB0cmVlLWxpa2Ugc3RydWN0dXJlIHdoZXJlIGVhY2ggbm9kZSByZXByZXNlbnRzIGEgZm9sZGVyIG9yIGZpbGUsIGFuZCBjaGlsZCBub2Rlc1xuICogcmVwcmVzZW50IHRoZSBjb250ZW50cyBvZiB0aGUgZm9sZGVyOlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGNvbnN0IGZpbGVTeXN0ZW0gPSBbXG4gKiAgIHsgaWQ6ICdmb2xkZXIxJywgbmFtZTogJ0ZvbGRlciAxJywgdHlwZTogJ2ZvbGRlcicsIHBhcmVudDogbnVsbCB9LFxuICogICB7IGlkOiAnZmlsZTEnLCBuYW1lOiAnRmlsZSAxJywgdHlwZTogJ2ZpbGUnLCBwYXJlbnQ6ICdmb2xkZXIxJyB9LFxuICogICB7IGlkOiAnZmlsZTInLCBuYW1lOiAnRmlsZSAyJywgdHlwZTogJ2ZpbGUnLCBwYXJlbnQ6ICdmb2xkZXIxJyB9LFxuICogICB7IGlkOiAnc3ViZm9sZGVyMScsIG5hbWU6ICdTdWJmb2xkZXIgMScsIHR5cGU6ICdmb2xkZXInLCBwYXJlbnQ6ICdmb2xkZXIxJyB9LFxuICogICB7IGlkOiAnZmlsZTMnLCBuYW1lOiAnRmlsZSAzJywgdHlwZTogJ2ZpbGUnLCBwYXJlbnQ6ICdzdWJmb2xkZXIxJyB9LFxuICogICB7IGlkOiAnZmlsZTQnLCBuYW1lOiAnRmlsZSA0JywgdHlwZTogJ2ZpbGUnLCBwYXJlbnQ6ICdzdWJmb2xkZXIxJyB9LFxuICogICB7IGlkOiAnc3ViZm9sZGVyMicsIG5hbWU6ICdTdWJmb2xkZXIgMicsIHR5cGU6ICdmb2xkZXInLCBwYXJlbnQ6ICdmb2xkZXIxJyB9LFxuICogICB7IGlkOiAnZmlsZTUnLCBuYW1lOiAnRmlsZSA1JywgdHlwZTogJ2ZpbGUnLCBwYXJlbnQ6ICdzdWJmb2xkZXIyJyB9LFxuICogICB7IGlkOiAnZmlsZTYnLCBuYW1lOiAnRmlsZSA2JywgdHlwZTogJ2ZpbGUnLCBwYXJlbnQ6ICdzdWJmb2xkZXIyJyB9LFxuICogICB7IGlkOiAnZm9sZGVyMicsIG5hbWU6ICdGb2xkZXIgMicsIHR5cGU6ICdmb2xkZXInLCBwYXJlbnQ6IG51bGwgfSxcbiAqICAgeyBpZDogJ2ZpbGU3JywgbmFtZTogJ0ZpbGUgNycsIHR5cGU6ICdmaWxlJywgcGFyZW50OiAnZm9sZGVyMicgfSxcbiAqICAgeyBpZDogJ2ZpbGU4JywgbmFtZTogJ0ZpbGUgOCcsIHR5cGU6ICdmaWxlJywgcGFyZW50OiAnZm9sZGVyMicgfSxcbiAqICAgeyBpZDogJ3N1YmZvbGRlcjMnLCBuYW1lOiAnU3ViZm9sZGVyIDMnLCB0eXBlOiAnZm9sZGVyJywgcGFyZW50OiAnZm9sZGVyMicgfSxcbiAqICAgeyBpZDogJ2ZpbGU5JywgbmFtZTogJ0ZpbGUgOScsIHR5cGU6ICdmaWxlJywgcGFyZW50OiAnc3ViZm9sZGVyMycgfSxcbiAqICAgeyBpZDogJ2ZpbGUxMCcsIG5hbWU6ICdGaWxlIDEwJywgdHlwZTogJ2ZpbGUnLCBwYXJlbnQ6ICdzdWJmb2xkZXIzJyB9LFxuICogXTtcbiAqXG4gKiBjb25zdCB0cmVlID0gYnVpbGRUcmVlKGZpbGVTeXN0ZW0sICdpZCcsICdpZCcsICdwYXJlbnQnLCB7IHJvb3RSZWZlcmVuY2VzOiBbbnVsbF0gfSk7XG4gKlxuICogY29uc29sZS5sb2codHJlZS50b1N0cmluZygpKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBidWlsZFRyZWUgZnVuY3Rpb24gdGFrZXMgaW4gdGhlIGFycmF5IG9mIGRhdGEgb2JqZWN0cywgYXMgd2VsbCBhcyBzb21lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBzcGVjaWZ5aW5nXG4gKiB0aGUga2V5cyB0byB1c2UgZm9yIGlkZW50aWZ5aW5nIG5vZGVzIGFuZCB0aGVpciBwYXJlbnQtY2hpbGQgcmVsYXRpb25zaGlwcy4gSW4gdGhpcyBleGFtcGxlLCB3ZSB1c2UgdGhlIGlkXG4gKiBrZXkgdG8gaWRlbnRpZnkgbm9kZXMsIGFuZCB0aGUgcGFyZW50IGtleSB0byBzcGVjaWZ5IHRoZSBwYXJlbnQgb2YgZWFjaCBub2RlLlxuICpcbiAqIFRoZSByZXN1bHRpbmcgdHJlZSBvYmplY3QgaXMgYSBuZXN0ZWQgdHJlZSBzdHJ1Y3R1cmUsIHdoZXJlIGVhY2ggbm9kZSBpcyBhbiBvYmplY3QgcmVwcmVzZW50aW5nIGEgZmlsZSBvclxuICogZm9sZGVyLCBhbmQgaGFzIGNoaWxkIG5vZGVzIHJlcHJlc2VudGluZyBpdHMgY29udGVudHMuIFRoZSB0b1N0cmluZyBtZXRob2Qgb2YgdGhlIHRyZWUgb2JqZWN0XG4gKiBjYW4gYmUgdXNlZCB0byBwcmludCBvdXQgdGhlIHRyZWUgaW4gYSByZWFkYWJsZSBmb3JtYXQ6XG4gKlxuICogYGBgbWFya2Rvd25cbiAqIC0gRm9sZGVyIDFcbiAqICAgLSBGaWxlIDFcbiAqICAgLSBGaWxlIDJcbiAqICAgLSBTdWJmb2xkZXIgMVxuICogICAgIC0gRmlsZSAzXG4gKiAgICAgLSBGaWxlIDRcbiAqICAgLSBTdWJmb2xkZXIgMlxuICogICAgIC0gRmlsZSA1XG4gKiAgICAgLSBGaWxlIDZcbiAqIC0gRm9sZGVyIDJcbiAqICAgLSBGaWxlIDdcbiAqICAgLSBGaWxlIDhcbiAqICAgLSBTdWJmb2xkZXIgM1xuICogICAgIC0gRmlsZSA5XG4gKiAgICAgLSBGaWxlIDEwXG4gKiBgYGBcbiAqXG4gKiBAbWVtYmVyb2YgTW9uc3Rlci5EYXRhXG4gKlxuICogQHBhcmFtIHsqfSBzdWJqZWN0IC0gVGhlIG9iamVjdCBvciBhcnJheSB0byBidWlsZCB0aGUgdHJlZSBmcm9tLlxuICogQHBhcmFtIHtzdHJpbmd8TW9uc3Rlci5EYXRhfmV4YW1wbGVTZWxlY3RvckNhbGxiYWNrfSBzZWxlY3RvciAtIEVpdGhlciBhIHN0cmluZyB0byBzcGVjaWZ5IGEgcHJvcGVydHkgb2YgZWFjaCBvYmplY3QgdG8gdXNlIGFzIGEgc2VsZWN0b3IsIG9yIGEgc2VsZWN0b3IgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgYSBtYXAgb2Ygb2JqZWN0cy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpZEtleSAtIFRoZSBwcm9wZXJ0eSBrZXkgdG8gdXNlIGFzIHRoZSB1bmlxdWUgSUQgb2YgZWFjaCBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IHBhcmVudElES2V5IC0gVGhlIHByb3BlcnR5IGtleSB0byB1c2UgYXMgdGhlIHBhcmVudCBJRCBvZiBlYWNoIG5vZGUuXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnNdIC0gQWRkaXRpb25hbCBvcHRpb25zIHRvIG1vZGlmeSB0aGUgZnVuY3Rpb24gYmVoYXZpb3IuXG4gKiBAcGFyYW0ge0FycmF5PCo+fSBbb3B0aW9ucy5yb290UmVmZXJlbmNlcz1bbnVsbCwgdW5kZWZpbmVkXV0gLSBBbiBhcnJheSBvZiB2YWx1ZXMgdG8gdHJlYXQgYXMgcm9vdCByZWZlcmVuY2VzIHdoZW4gY3JlYXRpbmcgdGhlIHRyZWUuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbb3B0aW9ucy5maWx0ZXJdIC0gQSBmaWx0ZXIgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaCBub2RlLlxuICpcbiAqIEByZXR1cm4geyp9IFRoZSByZXN1bHRpbmcgdHJlZSBzdHJ1Y3R1cmUgYXMgYSBOb2RlTGlzdC5cbiAqXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHNlbGVjdG9yIGlzIG5laXRoZXIgYSBzdHJpbmcgbm9yIGEgZnVuY3Rpb24uXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHRoZSBzZWxlY3RvciBjYWxsYmFjayBtdXN0IHJldHVybiBhIG1hcC5cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgb2JqZWN0IGhhcyBubyB2YWx1ZSBmb3IgdGhlIHNwZWNpZmllZCBpZC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqXG4gKiBAc2luY2UgMS4yNi4wXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkVHJlZShzdWJqZWN0LCBzZWxlY3RvciwgaWRLZXksIHBhcmVudElES2V5LCBvcHRpb25zKSB7XG5cdGNvbnN0IG5vZGVzID0gbmV3IE1hcCgpO1xuXG5cdGNvbnN0IG1heERlcHRoID0gMTAwO1xuXG5cdGlmICghaXNPYmplY3Qob3B0aW9ucykpIHtcblx0XHRvcHRpb25zID0ge307XG5cdH1cblxuXHRvcHRpb25zID0gZXh0ZW5kKFxuXHRcdHt9LFxuXHRcdHtcblx0XHRcdHJvb3RSZWZlcmVuY2VzOiBbbnVsbCwgdW5kZWZpbmVkXSxcblx0XHRcdGZpbHRlcjogdW5kZWZpbmVkLFxuXHRcdH0sXG5cdFx0b3B0aW9ucyxcblx0KTtcblxuXHRjb25zdCBmaWx0ZXIgPSBvcHRpb25zPy5maWx0ZXI7XG5cdGxldCByb290UmVmZXJlbmNlcyA9IG9wdGlvbnMucm9vdFJlZmVyZW5jZXM7XG5cdGlmICghaXNBcnJheShyb290UmVmZXJlbmNlcykpIHtcblx0XHRyb290UmVmZXJlbmNlcyA9IFtyb290UmVmZXJlbmNlc107XG5cdH1cblxuXHRjb25zdCBjaGlsZE1hcCA9IGFzc2VtYmxlUGFydHMoc3ViamVjdCwgc2VsZWN0b3IsIGZpbHRlciwgZnVuY3Rpb24gKG8sIGssIG0pIHtcblx0XHRjb25zdCBrZXkgPSBvPy5baWRLZXldO1xuXHRcdGxldCByZWYgPSBvPy5bcGFyZW50SURLZXldO1xuXHRcdGlmIChyb290UmVmZXJlbmNlcy5pbmRleE9mKHJlZikgIT09IC0xKSByZWYgPSByb290U3ltYm9sO1xuXG5cdFx0aWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgb2JqZWN0IGhhcyBubyB2YWx1ZSBmb3IgdGhlIHNwZWNpZmllZCBpZFwiKTtcblx0XHR9XG5cblx0XHRvW3BhcmVudFN5bWJvbF0gPSByZWY7XG5cblx0XHRjb25zdCBub2RlID0gbmV3IE5vZGUobyk7XG5cdFx0dGhpcy5oYXMocmVmKVxuXHRcdFx0PyB0aGlzLmdldChyZWYpLmFkZChub2RlKVxuXHRcdFx0OiB0aGlzLnNldChyZWYsIG5ldyBOb2RlTGlzdCgpLmFkZChub2RlKSk7XG5cdFx0bm9kZXMuc2V0KGtleSwgbm9kZSk7XG5cdH0pO1xuXG5cdG5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcblx0XHRjb25zdCBpZCA9IG5vZGU/LltcInZhbHVlXCJdPy5baWRLZXldO1xuXG5cdFx0aWYgKGlkID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBvYmplY3QgaGFzIG5vIHZhbHVlIGZvciB0aGUgc3BlY2lmaWVkIGlkXCIpO1xuXHRcdH1cblxuXHRcdGlmIChjaGlsZE1hcC5oYXMoaWQpKSB7XG5cdFx0XHRub2RlLmNoaWxkTm9kZXMgPSBjaGlsZE1hcC5nZXQoaWQpO1xuXHRcdFx0Y2hpbGRNYXAuZGVsZXRlKGlkKTtcblx0XHR9XG5cdH0pO1xuXG5cdGNvbnN0IGxpc3QgPSBuZXcgTm9kZUxpc3QoKTtcblxuXHRjaGlsZE1hcC5mb3JFYWNoKChzKSA9PiB7XG5cdFx0aWYgKHMgaW5zdGFuY2VvZiBTZXQpIHtcblx0XHRcdHMuZm9yRWFjaCgobikgPT4ge1xuXHRcdFx0XHRsaXN0LmFkZChuKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fSk7XG5cblx0cmV0dXJuIGxpc3Q7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZS5tanNcIjtcbmltcG9ydCB7IGlzSW5zdGFuY2UgfSBmcm9tIFwiLi9pcy5tanNcIjtcbmltcG9ydCB7IE5vZGUgfSBmcm9tIFwiLi9ub2RlLm1qc1wiO1xuaW1wb3J0IHsgTm9kZUxpc3QgfSBmcm9tIFwiLi9ub2RlbGlzdC5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlSW5zdGFuY2UgfSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgTm9kZVJlY3Vyc2l2ZUl0ZXJhdG9yIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGlzTm9kZUxpc3RTeW1ib2wgPSBTeW1ib2woXCJpc05vZGVMaXN0XCIpO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSByZWN1cnNpdmUgaXRlcmF0b3IgZm9yIHRyYXZlcnNpbmcgbm9kZXMgaW4gYSBET00gdHJlZS5cbiAqXG4gKiBAc2luY2UgMS4yNi4wXG4gKiBAc3VtbWFyeSBBbiBpdGVyYXRvciB0byBydW4gcmVjdXJzaXZlbHkgdGhyb3VnaCBhIHRyZWUgb2Ygbm9kZXNcbiAqIEBleHRlbmRzIEJhc2VcbiAqL1xuY2xhc3MgTm9kZVJlY3Vyc2l2ZUl0ZXJhdG9yIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKiBAcGFyYW0gbm9kZVxuXHQgKi9cblx0Y29uc3RydWN0b3Iobm9kZSkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzW2lzTm9kZUxpc3RTeW1ib2xdID0gZmFsc2U7XG5cblx0XHQvLyBpdGVyYXRvciBpcyBhIE5vZGVMaXN0XG5cdFx0aWYgKGlzSW5zdGFuY2Uobm9kZSwgTm9kZUxpc3QpKSB7XG5cdFx0XHRjb25zdCBjaGlsZHJlbiA9IG5vZGU7XG5cdFx0XHRjb25zdCBuID0gbmV3IE5vZGUoKTtcblx0XHRcdG4uY2hpbGROb2RlcyA9IGNoaWxkcmVuO1xuXHRcdFx0dGhpc1tpc05vZGVMaXN0U3ltYm9sXSA9IHRydWU7XG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IG47XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSB2YWxpZGF0ZUluc3RhbmNlKG5vZGUsIE5vZGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvT3BlcmF0b3JzL3lpZWxkXG5cdCAqL1xuXHRbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKiAoKSB7XG5cdFx0LyoqXG5cdFx0ICogVGhlIGVuZCBvZiB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uIGlzIHJlYWNoZWQuIEluIHRoaXMgY2FzZSwgZXhlY3V0aW9uIG9mIHRoZSBnZW5lcmF0b3Jcblx0XHQgKiBlbmRzIGFuZCBhbiBJdGVyYXRvclJlc3VsdCBpcyByZXR1cm5lZCB0byB0aGUgY2FsbGVyIGluIHdoaWNoIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQgYW5kIGRvbmUgaXMgdHJ1ZS5cblx0XHQgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL09wZXJhdG9ycy95aWVsZFxuXHRcdCAqL1xuXHRcdGlmICh0aGlzW2ludGVybmFsU3ltYm9sXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gaXRlcmF0b3IgaXMgYSBub2RlbGlzdCBhbmQgdGhlIG1haW4gbm9kZSBpcyBvbmx5IGEgcGxhY2Vob2xkZXJcblx0XHRpZiAodGhpc1tpc05vZGVMaXN0U3ltYm9sXSAhPT0gdHJ1ZSkge1xuXHRcdFx0eWllbGQgdGhpc1tpbnRlcm5hbFN5bWJvbF07XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXNbaW50ZXJuYWxTeW1ib2xdLmhhc0NoaWxkTm9kZXMoKSkge1xuXHRcdFx0Y29uc3QgY2hpbGROb2RlcyA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdLmNoaWxkTm9kZXM7XG5cblx0XHRcdGZvciAoY29uc3Qgbm9kZSBvZiBjaGlsZE5vZGVzKSB7XG5cdFx0XHRcdHlpZWxkKiBuZXcgTm9kZVJlY3Vyc2l2ZUl0ZXJhdG9yKG5vZGUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHQvKipcblx0ICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcblx0ICogQHJldHVybiB7Tm9kZVJlY3Vyc2l2ZUl0ZXJhdG9yfVxuXHQgKi9cblx0Zm9yRWFjaChjYWxsYmFjaykge1xuXHRcdGZvciAoY29uc3Qgbm9kZSBvZiB0aGlzKSB7XG5cdFx0XHRjYWxsYmFjayhub2RlKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIDIwMjQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICovXG5cbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0VSUk9STUVTU0FHRSB9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBUcmVlU2VsZWN0U3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgVHJlZVNlbGVjdFN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRUcmVlU2VsZWN0U3R5bGVTaGVldC5pbnNlcnRSdWxlKFxuXHRcdGBcbkBsYXllciB0cmVlc2VsZWN0IHsgXG5bZGF0YS1tb25zdGVyLXJvbGU9YmFkZ2Vde2Rpc3BsYXk6aW5saW5lLWZsZXh9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl17ZGlzcGxheTpmbGV4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci1zdGF0ZT1vcGVuXVtkYXRhLW1vbnN0ZXItaGFzLWNoaWxkcmVuPXRydWVdIFtkYXRhLW1vbnN0ZXItcm9sZT1mb2xkZXItaGFuZGxlcl17Y29udGVudDp1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDsgdXRmOCwgPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHdpZHRoPVxcXCIxNlxcXCIgaGVpZ2h0PVxcXCIxNlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIiB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiPjxwYXRoIGQ9XFxcIk0yLjUgMGMtLjE2NiAwLS4zMy4wMTYtLjQ4Ny4wNDhsLjE5NC45OEExLjUxIDEuNTEgMCAwIDEgMi41IDFoLjQ1OFYwSDIuNXptMi4yOTIgMGgtLjkxN3YxaC45MTdWMHptMS44MzMgMGgtLjkxN3YxaC45MTdWMHptMS44MzMgMGgtLjkxNnYxaC45MTZWMHptMS44MzQgMGgtLjkxN3YxaC45MTdWMHptMS44MzMgMGgtLjkxN3YxaC45MTdWMHpNMTMuNSAwaC0uNDU4djFoLjQ1OGMuMSAwIC4xOTkuMDEuMjkzLjAyOWwuMTk0LS45ODFBMi41MSAyLjUxIDAgMCAwIDEzLjUgMHptMi4wNzkgMS4xMWEyLjUxMSAyLjUxMSAwIDAgMC0uNjktLjY4OWwtLjU1Ni44MzFjLjE2NC4xMS4zMDUuMjUxLjQxNS40MTVsLjgzLS41NTZ6TTEuMTEuNDIxYTIuNTExIDIuNTExIDAgMCAwLS42ODkuNjlsLjgzMS41NTZjLjExLS4xNjQuMjUxLS4zMDUuNDE1LS40MTVMMS4xMS40MjJ6TTE2IDIuNWMwLS4xNjYtLjAxNi0uMzMtLjA0OC0uNDg3bC0uOTguMTk0Yy4wMTguMDk0LjAyOC4xOTIuMDI4LjI5M3YuNDU4aDFWMi41ek0uMDQ4IDIuMDEzQTIuNTEgMi41MSAwIDAgMCAwIDIuNXYuNDU4aDFWMi41YzAtLjEuMDEtLjE5OS4wMjktLjI5M2wtLjk4MS0uMTk0ek0wIDMuODc1di45MTdoMXYtLjkxN0gwem0xNiAuOTE3di0uOTE3aC0xdi45MTdoMXpNMCA1LjcwOHYuOTE3aDF2LS45MTdIMHptMTYgLjkxN3YtLjkxN2gtMXYuOTE3aDF6TTAgNy41NDJ2LjkxNmgxdi0uOTE2SDB6bTE1IC45MTZoMXYtLjkxNmgtMXYuOTE2ek0wIDkuMzc1di45MTdoMXYtLjkxN0gwem0xNiAuOTE3di0uOTE3aC0xdi45MTdoMXptLTE2IC45MTZ2LjkxN2gxdi0uOTE3SDB6bTE2IC45MTd2LS45MTdoLTF2LjkxN2gxem0tMTYgLjkxN3YuNDU4YzAgLjE2Ni4wMTYuMzMuMDQ4LjQ4N2wuOTgtLjE5NEExLjUxIDEuNTEgMCAwIDEgMSAxMy41di0uNDU4SDB6bTE2IC40NTh2LS40NThoLTF2LjQ1OGMwIC4xLS4wMS4xOTktLjAyOS4yOTNsLjk4MS4xOTRjLjAzMi0uMTU4LjA0OC0uMzIuMDQ4LS40ODd6TS40MjEgMTQuODljLjE4My4yNzIuNDE3LjUwNi42OS42ODlsLjU1Ni0uODMxYTEuNTEgMS41MSAwIDAgMS0uNDE1LS40MTVsLS44My41NTZ6bTE0LjQ2OS42ODljLjI3Mi0uMTgzLjUwNi0uNDE3LjY4OS0uNjlsLS44MzEtLjU1NmMtLjExLjE2NC0uMjUxLjMwNS0uNDE1LjQxNWwuNTU2Ljgzem0tMTIuODc3LjM3M2MuMTU4LjAzMi4zMi4wNDguNDg3LjA0OGguNDU4di0xSDIuNWMtLjEgMC0uMTk5LS4wMS0uMjkzLS4wMjlsLS4xOTQuOTgxek0xMy41IDE2Yy4xNjYgMCAuMzMtLjAxNi40ODctLjA0OGwtLjE5NC0uOThBMS41MSAxLjUxIDAgMCAxIDEzLjUgMTVoLS40NTh2MWguNDU4em0tOS42MjUgMGguOTE3di0xaC0uOTE3djF6bTEuODMzIDBoLjkxN3YtMWgtLjkxN3Yxem0xLjgzNCAwaC45MTZ2LTFoLS45MTZ2MXptMS44MzMgMGguOTE3di0xaC0uOTE3djF6bTEuODMzIDBoLjkxN3YtMWgtLjkxN3Yxek00LjUgNy41YS41LjUgMCAwIDAgMCAxaDdhLjUuNSAwIDAgMCAwLTFoLTd6XFxcIi8+PC9zdmc+Jyk7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTNweDttYXJnaW4tcmlnaHQ6OHB4O3dpZHRoOjEzcHh9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLXN0YXRlPWNsb3NlXVtkYXRhLW1vbnN0ZXItaGFzLWNoaWxkcmVuPXRydWVdIFtkYXRhLW1vbnN0ZXItcm9sZT1mb2xkZXItaGFuZGxlcl17Y29udGVudDp1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDsgdXRmOCwgPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHdpZHRoPVxcXCIxNlxcXCIgaGVpZ2h0PVxcXCIxNlxcXCIgZmlsbD1cXFwiY3VycmVudENvbG9yXFxcIiB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiPjxwYXRoIGQ9XFxcIk0yLjUgMGMtLjE2NiAwLS4zMy4wMTYtLjQ4Ny4wNDhsLjE5NC45OEExLjUxIDEuNTEgMCAwIDEgMi41IDFoLjQ1OFYwSDIuNXptMi4yOTIgMGgtLjkxN3YxaC45MTdWMHptMS44MzMgMGgtLjkxN3YxaC45MTdWMHptMS44MzMgMGgtLjkxNnYxaC45MTZWMHptMS44MzQgMGgtLjkxN3YxaC45MTdWMHptMS44MzMgMGgtLjkxN3YxaC45MTdWMHpNMTMuNSAwaC0uNDU4djFoLjQ1OGMuMSAwIC4xOTkuMDEuMjkzLjAyOWwuMTk0LS45ODFBMi41MSAyLjUxIDAgMCAwIDEzLjUgMHptMi4wNzkgMS4xMWEyLjUxMSAyLjUxMSAwIDAgMC0uNjktLjY4OWwtLjU1Ni44MzFjLjE2NC4xMS4zMDUuMjUxLjQxNS40MTVsLjgzLS41NTZ6TTEuMTEuNDIxYTIuNTExIDIuNTExIDAgMCAwLS42ODkuNjlsLjgzMS41NTZjLjExLS4xNjQuMjUxLS4zMDUuNDE1LS40MTVMMS4xMS40MjJ6TTE2IDIuNWMwLS4xNjYtLjAxNi0uMzMtLjA0OC0uNDg3bC0uOTguMTk0Yy4wMTguMDk0LjAyOC4xOTIuMDI4LjI5M3YuNDU4aDFWMi41ek0uMDQ4IDIuMDEzQTIuNTEgMi41MSAwIDAgMCAwIDIuNXYuNDU4aDFWMi41YzAtLjEuMDEtLjE5OS4wMjktLjI5M2wtLjk4MS0uMTk0ek0wIDMuODc1di45MTdoMXYtLjkxN0gwem0xNiAuOTE3di0uOTE3aC0xdi45MTdoMXpNMCA1LjcwOHYuOTE3aDF2LS45MTdIMHptMTYgLjkxN3YtLjkxN2gtMXYuOTE3aDF6TTAgNy41NDJ2LjkxNmgxdi0uOTE2SDB6bTE1IC45MTZoMXYtLjkxNmgtMXYuOTE2ek0wIDkuMzc1di45MTdoMXYtLjkxN0gwem0xNiAuOTE3di0uOTE3aC0xdi45MTdoMXptLTE2IC45MTZ2LjkxN2gxdi0uOTE3SDB6bTE2IC45MTd2LS45MTdoLTF2LjkxN2gxem0tMTYgLjkxN3YuNDU4YzAgLjE2Ni4wMTYuMzMuMDQ4LjQ4N2wuOTgtLjE5NEExLjUxIDEuNTEgMCAwIDEgMSAxMy41di0uNDU4SDB6bTE2IC40NTh2LS40NThoLTF2LjQ1OGMwIC4xLS4wMS4xOTktLjAyOS4yOTNsLjk4MS4xOTRjLjAzMi0uMTU4LjA0OC0uMzIuMDQ4LS40ODd6TS40MjEgMTQuODljLjE4My4yNzIuNDE3LjUwNi42OS42ODlsLjU1Ni0uODMxYTEuNTEgMS41MSAwIDAgMS0uNDE1LS40MTVsLS44My41NTZ6bTE0LjQ2OS42ODljLjI3Mi0uMTgzLjUwNi0uNDE3LjY4OS0uNjlsLS44MzEtLjU1NmMtLjExLjE2NC0uMjUxLjMwNS0uNDE1LjQxNWwuNTU2Ljgzem0tMTIuODc3LjM3M2MuMTU4LjAzMi4zMi4wNDguNDg3LjA0OGguNDU4di0xSDIuNWMtLjEgMC0uMTk5LS4wMS0uMjkzLS4wMjlsLS4xOTQuOTgxek0xMy41IDE2Yy4xNjYgMCAuMzMtLjAxNi40ODctLjA0OGwtLjE5NC0uOThBMS41MSAxLjUxIDAgMCAxIDEzLjUgMTVoLS40NTh2MWguNDU4em0tOS42MjUgMGguOTE3di0xaC0uOTE3djF6bTEuODMzIDBoLjkxN3YtMWgtLjkxN3Yxem0xLjgzNC0xdjFoLjkxNnYtMWgtLjkxNnptMS44MzMgMWguOTE3di0xaC0uOTE3djF6bTEuODMzIDBoLjkxN3YtMWgtLjkxN3Yxek04LjUgNC41YS41LjUgMCAwIDAtMSAwdjNoLTNhLjUuNSAwIDAgMCAwIDFoM3YzYS41LjUgMCAwIDAgMSAwdi0zaDNhLjUuNSAwIDAgMCAwLTFoLTN2LTN6XFxcIi8+PC9zdmc+Jyk7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTNweDttYXJnaW4tcmlnaHQ6OHB4O3dpZHRoOjEzcHh9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLXZpc2liaWxpdHk9aGlkZGVuXXtkaXNwbGF5Om5vbmV9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLXZpc2liaWxpdHk9dmlzaWJsZV17ZGlzcGxheTpmbGV4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci1oYXMtY2hpbGRyZW49ZmFsc2VdIFtkYXRhLW1vbnN0ZXItcm9sZT1mb2xkZXItaGFuZGxlcl17Y29udGVudDpcXFwiIFxcXCI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTNweDttYXJnaW4tcmlnaHQ6OHB4O3dpZHRoOjEzcHh9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLWludGVuZD1cXFwiMFxcXCJde2Rpc3BsYXk6ZmxleDttYXJnaW46MH1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXVtkYXRhLW1vbnN0ZXItaW50ZW5kPVxcXCIxXFxcIl17bWFyZ2luOjAgMCAwIDIwcHh9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLWludGVuZD1cXFwiMlxcXCJde21hcmdpbjowIDAgMCA0MHB4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci1pbnRlbmQ9XFxcIjNcXFwiXXttYXJnaW46MCAwIDAgNjBweH1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXVtkYXRhLW1vbnN0ZXItaW50ZW5kPVxcXCI0XFxcIl17bWFyZ2luOjAgMCAwIDgwcHh9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLWludGVuZD1cXFwiNVxcXCJde21hcmdpbjowIDAgMCAxMDBweH1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXVtkYXRhLW1vbnN0ZXItaW50ZW5kPVxcXCI2XFxcIl17bWFyZ2luOjAgMCAwIDExMHB4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci1pbnRlbmQ9XFxcIjdcXFwiXXttYXJnaW46MCAwIDAgMTIwcHh9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLWludGVuZD1cXFwiOFxcXCJde21hcmdpbjowIDAgMCAxMzBweH1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXVtkYXRhLW1vbnN0ZXItZmlsdGVyZWQ9dHJ1ZV17ZGlzcGxheTpub25lfSBcbn1gLFxuXHRcdDAsXG5cdCk7XG59IGNhdGNoIChlKSB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcihcImh0bWxcIiksXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRlICsgXCJcIixcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBidWlsZFRyZWUgfSBmcm9tIFwiLi4vLi4vZGF0YS9idWlsZHRyZWUubWpzXCI7XG5pbXBvcnQgeyBmaW5kQ2xvc2VzdEJ5QXR0cmlidXRlIH0gZnJvbSBcIi4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtcblx0QVRUUklCVVRFX1JPTEUsXG5cdEFUVFJJQlVURV9VUERBVEVSX0lOU0VSVF9SRUZFUkVOQ0UsXG59IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHtcblx0ZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQsXG5cdGZpcmVDdXN0b21FdmVudCxcblx0ZmlyZUV2ZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2V2ZW50cy5tanNcIjtcbmltcG9ydCB7IEZvcm1hdHRlciB9IGZyb20gXCIuLi8uLi90ZXh0L2Zvcm1hdHRlci5tanNcIjtcbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgTm9kZSB9IGZyb20gXCIuLi8uLi90eXBlcy9ub2RlLm1qc1wiO1xuaW1wb3J0IHsgTm9kZVJlY3Vyc2l2ZUl0ZXJhdG9yIH0gZnJvbSBcIi4uLy4uL3R5cGVzL25vZGVyZWN1cnNpdmVpdGVyYXRvci5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlSW5zdGFuY2UgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRk9STV9VUkwsIEFUVFJJQlVURV9JTlRFTkQgfSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBTZWxlY3QgfSBmcm9tIFwiLi9zZWxlY3QubWpzXCI7XG5pbXBvcnQgeyBTZWxlY3RTdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9zZWxlY3QubWpzXCI7XG5pbXBvcnQgeyBUcmVlU2VsZWN0U3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvdHJlZS1zZWxlY3QubWpzXCI7XG5cbmV4cG9ydCB7IFRyZWVTZWxlY3QsIGZvcm1hdEhpZXJhcmNoaWNhbFNlbGVjdGlvbiB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpbnRlcm5hbE5vZGVzU3ltYm9sID0gU3ltYm9sKFwiaW50ZXJuYWxOb2Rlc1wiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qga2V5RXZlbnRIYW5kbGVyID0gU3ltYm9sKFwia2V5RXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIEEgdHJlZSBzZWxlY3QgY29udHJvbCBpcyBhIHNlbGVjdCBjb250cm9sIHRoYXQgY2FuIGJlIHVzZWQgdG8gc2VsZWN0IGEgdmFsdWUgZnJvbSBhIHRyZWUgc3RydWN0dXJlLlxuICpcbiAqIEBmcmFnbWVudHMgL2ZyYWdtZW50cy9jb21wb25lbnRzL2Zvcm0vdHJlZS1zZWxlY3RcbiAqXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9mb3JtL3RyZWUtc2VsZWN0XG4gKlxuICogQHNpbmNlIDEuOS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBiZWF1dGlmdWwgdHJlZSBzZWxlY3QgY29udHJvbCB3aXRoIGEgbG90IG9mIG9wdGlvbnNcbiAqIEBmaXJlcyBtb25zdGVyLW9wdGlvbnMtc2V0XG4gKiBAZmlyZXMgbW9uc3Rlci1zZWxlY3RlZFxuICogQGZpcmVzIG1vbnN0ZXItY2hhbmdlXG4gKiBAZmlyZXMgbW9uc3Rlci1jaGFuZ2VkXG4gKi9cbmNsYXNzIFRyZWVTZWxlY3QgZXh0ZW5kcyBTZWxlY3Qge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2NvbXBvbmVudHMvZm9ybS90cmVlLXNlbGVjdEBAaW5zdGFuY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgSFRNTCB0YWcsIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1vcHRpb25zYCBtdXN0IGJlIHVzZWQuXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZy9lbi9kb2MvI2NvbmZpZ3VyYXRlLWEtbW9uc3Rlci1jb250cm9sfVxuXHQgKlxuXHQgKiBUaGUgaW5kaXZpZHVhbCBjb25maWd1cmF0aW9uIHZhbHVlcyBjYW4gYmUgZm91bmQgaW4gdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAZXh0ZW5kcyBTZWxlY3Rcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IG1hcHBpbmcucm9vdFJlZmVyZW5jZXM9WycwJywgdW5kZWZpbmVkLCBudWxsXVxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gbWFwcGluZy5pZFRlbXBsYXRlPWlkXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBtYXBwaW5nLnBhcmVudFRlbXBsYXRlPXBhcmVudFxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gbWFwcGluZy5zZWxlY3Rpb25cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZvcm1hdHRlclxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZm9ybWF0dGVyLnNlcGFyYXRvcj1cIiAvIFwiXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oXG5cdFx0XHR7fSxcblx0XHRcdHN1cGVyLmRlZmF1bHRzLFxuXHRcdFx0e1xuXHRcdFx0XHRtYXBwaW5nOiB7XG5cdFx0XHRcdFx0cm9vdFJlZmVyZW5jZXM6IFtcIjBcIiwgdW5kZWZpbmVkLCBudWxsXSxcblx0XHRcdFx0XHRpZFRlbXBsYXRlOiBcImlkXCIsXG5cdFx0XHRcdFx0cGFyZW50VGVtcGxhdGU6IFwicGFyZW50XCIsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGZvcm1hdHRlcjoge1xuXHRcdFx0XHRcdHNlbGVjdGlvbjogZm9ybWF0SGllcmFyY2hpY2FsU2VsZWN0aW9uLFxuXHRcdFx0XHRcdHNlcGFyYXRvcjogXCIgLyBcIixcblx0XHRcdFx0fSxcblx0XHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0XHRpbml0T3B0aW9uc0Zyb21Bcmd1bWVudHMuY2FsbCh0aGlzKSxcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci10cmVlLXNlbGVjdFwiO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge0NTU1N0eWxlU2hlZXRbXX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiBbU2VsZWN0U3R5bGVTaGVldCwgVHJlZVNlbGVjdFN0eWxlU2hlZXRdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEltcG9ydCBTZWxlY3QgT3B0aW9ucyBmcm9tIGRhdGFzZXRcblx0ICogTm90IHRvIGJlIGNvbmZ1c2VkIHdpdGggdGhlIGNvbnRyb2wgZGVmYXVsdHMvb3B0aW9uc1xuXHQgKlxuXHQgKiBAcGFyYW0ge2FycmF5fG9iamVjdHxNYXB8U2V0fSBkYXRhXG5cdCAqIEByZXR1cm4ge1NlbGVjdH1cblx0ICogQHRocm93cyB7RXJyb3J9IG1hcCBpcyBub3QgaXRlcmFibGVcblx0ICovXG5cdGltcG9ydE9wdGlvbnMoZGF0YSkge1xuXHRcdHRoaXNbaW50ZXJuYWxOb2Rlc1N5bWJvbF0gPSBuZXcgTWFwKCk7XG5cblx0XHRjb25zdCBtYXBwaW5nT3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwibWFwcGluZ1wiLCB7fSk7XG5cblx0XHRjb25zdCBmaWx0ZXIgPSBtYXBwaW5nT3B0aW9ucz8uW1wiZmlsdGVyXCJdO1xuXHRcdGNvbnN0IHJvb3RSZWZlcmVuY2VzID0gbWFwcGluZ09wdGlvbnM/LltcInJvb3RSZWZlcmVuY2VzXCJdO1xuXG5cdFx0Y29uc3QgaWQgPSB0aGlzLmdldE9wdGlvbihcIm1hcHBpbmcuaWRUZW1wbGF0ZVwiLCBcImlkXCIpO1xuXHRcdGNvbnN0IHBhcmVudElEID0gdGhpcy5nZXRPcHRpb24oXCJtYXBwaW5nLnBhcmVudFRlbXBsYXRlXCIsIFwicGFyZW50XCIpO1xuXG5cdFx0Y29uc3Qgc2VsZWN0b3IgPSBtYXBwaW5nT3B0aW9ucz8uW1wic2VsZWN0b3JcIl07XG5cblx0XHRjb25zdCBub2RlcyA9IGJ1aWxkVHJlZShkYXRhLCBzZWxlY3RvciwgaWQsIHBhcmVudElELCB7XG5cdFx0XHRmaWx0ZXIsXG5cdFx0XHRyb290UmVmZXJlbmNlcyxcblx0XHR9KTtcblxuXHRcdGNvbnN0IG9wdGlvbnMgPSBbXTtcblx0XHRmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcblx0XHRcdGNvbnN0IGl0ZXJhdG9yID0gbmV3IE5vZGVSZWN1cnNpdmVJdGVyYXRvcihub2RlKTtcblx0XHRcdGZvciAoY29uc3QgbiBvZiBpdGVyYXRvcikge1xuXHRcdFx0XHRjb25zdCBmb3JtYXR0ZWRWYWx1ZXMgPSBmb3JtYXRLZXlMYWJlbC5jYWxsKHRoaXMsIG4pO1xuXG5cdFx0XHRcdGNvbnN0IGxhYmVsID0gZm9ybWF0dGVkVmFsdWVzLmxhYmVsO1xuXHRcdFx0XHRjb25zdCB2YWx1ZSA9IGZvcm1hdHRlZFZhbHVlcy52YWx1ZTtcblx0XHRcdFx0Y29uc3QgaW50ZW5kID0gbi5sZXZlbDtcblxuXHRcdFx0XHRjb25zdCB2aXNpYmlsaXR5ID0gaW50ZW5kID4gMCA/IFwiaGlkZGVuXCIgOiBcInZpc2libGVcIjtcblx0XHRcdFx0Y29uc3Qgc3RhdGUgPSBcImNsb3NlXCI7XG5cblx0XHRcdFx0dGhpc1tpbnRlcm5hbE5vZGVzU3ltYm9sXS5zZXQodmFsdWUsIG4pO1xuXG5cdFx0XHRcdG9wdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0dmFsdWUsXG5cdFx0XHRcdFx0bGFiZWwsXG5cdFx0XHRcdFx0aW50ZW5kLFxuXHRcdFx0XHRcdHN0YXRlLFxuXHRcdFx0XHRcdHZpc2liaWxpdHksXG5cdFx0XHRcdFx0W1wiaGFzLWNoaWxkcmVuXCJdOiBuLmhhc0NoaWxkTm9kZXMoKSxcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy5zZXRPcHRpb24oXCJvcHRpb25zXCIsIG9wdGlvbnMpO1xuXG5cdFx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci1vcHRpb25zLXNldFwiLCB7XG5cdFx0XHRvcHRpb25zLFxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uU2VsZWN0fVxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblx0XHRpbml0RXZlbnRIYW5kbGVyLmNhbGwodGhpcyk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGV2ZW50XG4gKi9cbmZ1bmN0aW9uIGhhbmRsZU9wdGlvbktleWJvYXJkRXZlbnRzKGV2ZW50KSB7XG5cdHN3aXRjaCAoZXZlbnQ/LltcImNvZGVcIl0pIHtcblx0XHRjYXNlIFwiQXJyb3dMZWZ0XCI6XG5cdFx0XHRjbG9zZU9yT3BlbkN1cnJlbnRPcHRpb24uY2FsbCh0aGlzLCBldmVudCwgXCJjbG9zZVwiKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiQXJyb3dSaWdodFwiOlxuXHRcdFx0Y2xvc2VPck9wZW5DdXJyZW50T3B0aW9uLmNhbGwodGhpcywgZXZlbnQsIFwib3BlblwiKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRicmVhaztcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge2V2ZW50fSBldmVudFxuICovXG5mdW5jdGlvbiBjbG9zZU9yT3BlbkN1cnJlbnRPcHRpb24oZXZlbnQsIG1vZGUpIHtcblx0dmFsaWRhdGVJbnN0YW5jZShldmVudCwgRXZlbnQpO1xuXG5cdGlmICh0eXBlb2YgZXZlbnQuY29tcG9zZWRQYXRoICE9PSBcImZ1bmN0aW9uXCIpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCBldmVudFwiKTtcblx0fVxuXG5cdGNvbnN0IHBhdGggPSBldmVudC5jb21wb3NlZFBhdGgoKTtcblx0Y29uc3Qgb3B0aW9uTm9kZSA9IHBhdGguc2hpZnQoKTtcblxuXHRjb25zdCBzdGF0ZSA9IG9wdGlvbk5vZGUuZ2V0QXR0cmlidXRlKFwiZGF0YS1tb25zdGVyLXN0YXRlXCIpO1xuXHRpZiAoc3RhdGUgIT09IG1vZGUpIHtcblx0XHRjb25zdCBoYW5kbGVyID0gb3B0aW9uTm9kZS5xdWVyeVNlbGVjdG9yKFxuXHRcdFx0XCJbZGF0YS1tb25zdGVyLXJvbGU9Zm9sZGVyLWhhbmRsZXJdXCIsXG5cdFx0KTtcblx0XHRpZiAoaGFuZGxlciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRmaXJlRXZlbnQoaGFuZGxlciwgXCJjbGlja1wiKTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtOb2RlfSBub2RlXG4gKiBAcmV0dXJuIHthcnJheTxsYWJlbCwgdmFsdWU+fVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZm9ybWF0S2V5TGFiZWwobm9kZSkge1xuXHR2YWxpZGF0ZUluc3RhbmNlKG5vZGUsIE5vZGUpO1xuXG5cdGNvbnN0IGxhYmVsID0gbmV3IEZvcm1hdHRlcihub2RlLnZhbHVlKS5mb3JtYXQoXG5cdFx0dGhpcy5nZXRPcHRpb24oXCJtYXBwaW5nLmxhYmVsVGVtcGxhdGVcIiwgXCJcIiksXG5cdCk7XG5cdGNvbnN0IHZhbHVlID0gbmV3IEZvcm1hdHRlcihub2RlLnZhbHVlKS5mb3JtYXQoXG5cdFx0dGhpcy5nZXRPcHRpb24oXCJtYXBwaW5nLnZhbHVlVGVtcGxhdGVcIiwgXCJcIiksXG5cdCk7XG5cblx0cmV0dXJuIHtcblx0XHR2YWx1ZSxcblx0XHRsYWJlbCxcblx0fTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqL1xuZnVuY3Rpb24gYnVpbGRUcmVlTGFiZWxzKHZhbHVlKSB7XG5cdGxldCBub2RlID0gdGhpc1tpbnRlcm5hbE5vZGVzU3ltYm9sXS5nZXQodmFsdWUpO1xuXHRpZiAobm9kZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0bm9kZSA9IHRoaXNbaW50ZXJuYWxOb2Rlc1N5bWJvbF0uZ2V0KHBhcnNlSW50KHZhbHVlKSk7XG5cdH1cblxuXHRjb25zdCBwYXJ0cyA9IFtdO1xuXG5cdGlmIChub2RlIGluc3RhbmNlb2YgTm9kZSkge1xuXHRcdGxldCBwdHIgPSBub2RlO1xuXHRcdHdoaWxlIChwdHIpIHtcblx0XHRcdGNvbnN0IGZvcm1hdHRlZFZhbHVlcyA9IGZvcm1hdEtleUxhYmVsLmNhbGwodGhpcywgcHRyKTtcblx0XHRcdHBhcnRzLnVuc2hpZnQoZm9ybWF0dGVkVmFsdWVzLmxhYmVsKTtcblx0XHRcdHB0ciA9IHB0ci5wYXJlbnQ7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHBhcnRzO1xufVxuXG4vKipcbiAqIFRoaXMgZm9ybWF0dGVyIGNhbiBmb3JtYXQgYSBsYWJlbCBoaWVyYXJjaGljYWxseS5cbiAqIFRoZSBvcHRpb24gYGZvcm1hdHRlci5zZXBhcmF0b3JgIGRldGVybWluZXMgdGhlIHNlcGFyYXRvci5cbiAqXG4gKiBgYGBcbiAqIGEgLyBiIC8gY1xuICogYGBgXG4gKlxuICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgcGFzc2VkIGFzIGFyZ3VtZW50IG9mIHRoZSBvcHRpb24gYGZvcm1hdHRlci5zZWxlY3Rpb246YC5cbiAqXG4gKiBAc2luY2UgMS45LjBcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZm9ybWF0SGllcmFyY2hpY2FsU2VsZWN0aW9uKHZhbHVlKSB7XG5cdHJldHVybiBidWlsZFRyZWVMYWJlbHNcblx0XHQuY2FsbCh0aGlzLCB2YWx1ZSlcblx0XHQuam9pbih0aGlzLmdldE9wdGlvbihcImZvcm1hdHRlci5zZXBhcmF0b3JcIiwgXCIgLyBcIikpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBvcGVuT3B0aW9uRXZlbnRIYW5kbGVyID0gU3ltYm9sKFwib3Blbk9wdGlvbkV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50SGFuZGxlcigpIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0dGhpc1tvcGVuT3B0aW9uRXZlbnRIYW5kbGVyXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChcblx0XHRcdGV2ZW50LFxuXHRcdFx0QVRUUklCVVRFX1JPTEUsXG5cdFx0XHRcImZvbGRlci1oYW5kbGVyXCIsXG5cdFx0KTtcblx0XHRpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgY29udGFpbmVyID0gZmluZENsb3Nlc3RCeUF0dHJpYnV0ZShlbGVtZW50LCBBVFRSSUJVVEVfUk9MRSwgXCJvcHRpb25cIik7XG5cdFx0Y29uc3QgaW5kZXggPSBjb250YWluZXJcblx0XHRcdC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1VQREFURVJfSU5TRVJUX1JFRkVSRU5DRSlcblx0XHRcdC5zcGxpdChcIi1cIilcblx0XHRcdC5wb3AoKTtcblxuXHRcdGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHRoaXMuZ2V0T3B0aW9uKGBvcHRpb25zLiR7aW5kZXh9LnN0YXRlYCk7XG5cblx0XHRjb25zdCBuZXdTdGF0ZSA9IGN1cnJlbnRTdGF0ZSA9PT0gXCJjbG9zZVwiID8gXCJvcGVuXCIgOiBcImNsb3NlXCI7XG5cdFx0dGhpcy5zZXRPcHRpb24oYG9wdGlvbnMuJHtpbmRleH0uc3RhdGVgLCBuZXdTdGF0ZSk7XG5cblx0XHRjb25zdCBuZXdWaXNpYmlsaXR5ID0gbmV3U3RhdGUgPT09IFwib3BlblwiID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiO1xuXG5cdFx0aWYgKGNvbnRhaW5lci5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX0lOVEVORCkpIHtcblx0XHRcdGNvbnN0IGludGVuZCA9IGNvbnRhaW5lci5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0lOVEVORCk7XG5cblx0XHRcdGxldCByZWYgPSBjb250YWluZXIubmV4dEVsZW1lbnRTaWJsaW5nO1xuXHRcdFx0Y29uc3QgY2hpbGRJbnRlbmQgPSBwYXJzZUludChpbnRlbmQpICsgMTtcblxuXHRcdFx0Y29uc3QgY21wID0gKGEsIGIpID0+IHtcblx0XHRcdFx0aWYgKG5ld1N0YXRlID09PSBcIm9wZW5cIikge1xuXHRcdFx0XHRcdHJldHVybiBhID09PSBiO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGEgPj0gYjtcblx0XHRcdH07XG5cblx0XHRcdHdoaWxlIChcblx0XHRcdFx0cmVmPy5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX0lOVEVORCkgJiZcblx0XHRcdFx0Y21wKHBhcnNlSW50KHJlZi5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0lOVEVORCkpLCBjaGlsZEludGVuZClcblx0XHRcdCkge1xuXHRcdFx0XHRjb25zdCByZWZJbmRleCA9IHJlZlxuXHRcdFx0XHRcdC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1VQREFURVJfSU5TRVJUX1JFRkVSRU5DRSlcblx0XHRcdFx0XHQuc3BsaXQoXCItXCIpXG5cdFx0XHRcdFx0LnBvcCgpO1xuXHRcdFx0XHR0aGlzLnNldE9wdGlvbihgb3B0aW9ucy4ke3JlZkluZGV4fS52aXNpYmlsaXR5YCwgbmV3VmlzaWJpbGl0eSk7XG5cblx0XHRcdFx0aWYgKG5ld1N0YXRlID09PSBcImNsb3NlXCIpIHtcblx0XHRcdFx0XHR0aGlzLnNldE9wdGlvbihgb3B0aW9ucy4ke3JlZkluZGV4fS5zdGF0ZWAsIFwiY2xvc2VcIik7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZWYgPSByZWYubmV4dEVsZW1lbnRTaWJsaW5nO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHR0aGlzW2tleUV2ZW50SGFuZGxlcl0gPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBwYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG5cdFx0Y29uc3QgZWxlbWVudCA9IHBhdGg/LlswXTtcblxuXHRcdGxldCByb2xlO1xuXG5cdFx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0aWYgKGVsZW1lbnQuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9ST0xFKSkge1xuXHRcdFx0XHRyb2xlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUpO1xuXHRcdFx0fSBlbHNlIGlmIChlbGVtZW50ID09PSB0aGlzKSB7XG5cdFx0XHRcdHNob3cuY2FsbCh0aGlzKTtcblx0XHRcdFx0Zm9jdXNGaWx0ZXIuY2FsbCh0aGlzKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGUgPSBlbGVtZW50LmNsb3Nlc3QoYFske0FUVFJJQlVURV9ST0xFfV1gKTtcblx0XHRcdFx0aWYgKGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBlLmhhc0F0dHJpYnV0ZSgpKSB7XG5cdFx0XHRcdFx0cm9sZSA9IGUuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9ST0xFKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0c3dpdGNoIChyb2xlKSB7XG5cdFx0XHRjYXNlIFwib3B0aW9uLWxhYmVsXCI6XG5cdFx0XHRjYXNlIFwib3B0aW9uLWNvbnRyb2xcIjpcblx0XHRcdGNhc2UgXCJvcHRpb25cIjpcblx0XHRcdFx0aGFuZGxlT3B0aW9uS2V5Ym9hcmRFdmVudHMuY2FsbCh0aGlzLCBldmVudCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fTtcblxuXHR0aGlzLnNoYWRvd1Jvb3QuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpc1trZXlFdmVudEhhbmRsZXJdKTtcblx0dGhpcy5zaGFkb3dSb290LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzW29wZW5PcHRpb25FdmVudEhhbmRsZXJdKTtcbn1cblxuLyoqXG4gKiBUaGlzIGF0dHJpYnV0ZSBjYW4gYmUgdXNlZCB0byBwYXNzIGEgVVJMIHRvIHRoaXMgc2VsZWN0LlxuICpcbiAqIGBgYGh0bWxcbiAqIDxtb25zdGVyLXNlbGVjdCBkYXRhLW1vbnN0ZXItdXJsPVwiaHR0cHM6Ly9leGFtcGxlLmNvbS9cIj48L21vbnN0ZXItc2VsZWN0PlxuICogYGBgXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gaW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzKCkge1xuXHRjb25zdCBvcHRpb25zID0ge307XG5cblx0Y29uc3QgdXJsID0gdGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fVVJMKTtcblx0aWYgKGlzU3RyaW5nKHVybCkpIHtcblx0XHRvcHRpb25zW1widXJsXCJdID0gbmV3IFVSTCh1cmwpLnRvU3RyaW5nKCk7XG5cdH1cblxuXHRyZXR1cm4gb3B0aW9ucztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuICAgICAgICA8dGVtcGxhdGUgaWQ9XCJvcHRpb25zXCI+XG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwib3B0aW9uXCJcbiAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1pbnRlbmQgcGF0aDpvcHRpb25zLmludGVuZCwgXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1zdGF0ZSBwYXRoOm9wdGlvbnMuc3RhdGUsIFxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItdmlzaWJpbGl0eSBwYXRoOm9wdGlvbnMudmlzaWJpbGl0eSwgXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1maWx0ZXJlZCBwYXRoOm9wdGlvbnMuZmlsdGVyZWQsXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1oYXMtY2hpbGRyZW4gcGF0aDpvcHRpb25zLmhhcy1jaGlsZHJlblwiPlxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJmb2xkZXItaGFuZGxlclwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxsYWJlbCBwYXJ0PVwib3B0aW9uXCIgcm9sZT1cIm9wdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZGF0YS1tb25zdGVyLXJvbGU9XCJvcHRpb24tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cIlxuICAgICAgICAgICAgdHlwZSBwYXRoOnR5cGUsXG4gICAgICAgICAgICByb2xlIHBhdGg6cm9sZSxcbiAgICAgICAgICAgIHZhbHVlIHBhdGg6b3B0aW9ucy52YWx1ZSwgXG4gICAgICAgICAgICBuYW1lIHBhdGg6bmFtZSwgXG4gICAgICAgICAgICBwYXJ0IHBhdGg6dHlwZSB8IHByZWZpeDpvcHRpb24tIHwgc3VmZml4OiBmb3JtXG4gICAgICAgICAgICBcIiB0YWJpbmRleD1cIi0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpvcHRpb25zIHwgaW5kZXg6bGFiZWxcIiBwYXJ0PVwib3B0aW9uLWxhYmVsXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90ZW1wbGF0ZT5cblxuICAgICAgICA8dGVtcGxhdGUgaWQ9XCJzZWxlY3Rpb25cIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJiYWRnZVwiXG4gICAgICAgICAgICAgICAgIHBhcnQ9XCJiYWRnZVwiXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci12YWx1ZSBwYXRoOnNlbGVjdGlvbiB8IGluZGV4OnZhbHVlLCBcbiAgICAgICAgICAgICAgICAgY2xhc3MgcGF0aDpjbGFzc2VzIHwgaW5kZXg6YmFkZ2UsIFxuICAgICAgICBwYXJ0IHBhdGg6dHlwZSB8IHN1ZmZpeDotb3B0aW9uIHwgcHJlZml4OiBmb3JtLVwiIHRhYmluZGV4PVwiLTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpzZWxlY3Rpb24gfCBpbmRleDpsYWJlbFwiIHBhcnQ9XCJiYWRnZS1sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cImJhZGdlLWxhYmVsXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBwYXJ0PVwicmVtb3ZlLWJhZGdlXCIgZGF0YS1tb25zdGVyLXNlbGVjdC10aGlzXG4gICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNsYXNzIHBhdGg6ZmVhdHVyZXMuY2xlYXIgfCA/OjpoaWRkZW4gXCJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwicmVtb3ZlLWJhZGdlXCIgdGFiaW5kZXg9XCItMVwiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGVtcGxhdGU+XG5cbiAgICAgICAgPHNsb3QgY2xhc3M9XCJoaWRkZW5cIj48L3Nsb3Q+XG5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiIHRhYmluZGV4PVwiMFwiPlxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIFxcJHtzZWxlY3RlZH1cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwicG9wcGVyXCIgcGFydD1cInBvcHBlclwiIHRhYmluZGV4PVwiLTFcIiBjbGFzcz1cIm1vbnN0ZXItY29sb3ItcHJpbWFyeS0xXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvbi1maWx0ZXItY29udHJvbFwiIHJvbGU9XCJzZWFyY2hcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcm9sZT1cInNlYXJjaGJveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0PVwicG9wcGVyLWZpbHRlclwiIG5hbWU9XCJwb3BwZXItZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IHBhcnQ9XCJjb250ZW50XCIgY2xhc3M9XCJmbGV4XCIgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBwYXJ0PVwib3B0aW9uc1wiIGRhdGEtbW9uc3Rlci1yb2xlPVwib3B0aW9uc1wiIGRhdGEtbW9uc3Rlci1pbnNlcnQ9XCJvcHRpb25zIHBhdGg6b3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgcGFydD1cIm5vLW9wdGlvbnNcIiBkYXRhLW1vbnN0ZXItcm9sZT1cIm5vLW9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOm1lc3NhZ2VzLmVtcHR5T3B0aW9uc1wiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHBhcnQ9XCJzdGF0dXMtb3ItcmVtb3ZlLWJhZGdlc1wiIGRhdGEtbW9uc3Rlci1yb2xlPVwic3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNcIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNsYXNzIHBhdGg6Y2xhc3Nlcy5zdGF0dXNPclJlbW92ZUJhZGdlIHwgc3VmZml4OlxcXFwgc3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgYDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KFRyZWVTZWxlY3QpO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywgMjAyNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IFRvZ2dsZVN3aXRjaFN0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IFRvZ2dsZVN3aXRjaFN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRUb2dnbGVTd2l0Y2hTdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIHRvZ2dsZXN3aXRjaCB7IFxuOmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWdyYXktMTojZjZmNmY2Oy0tbW9uc3Rlci1jb2xvci1ncmF5LTI6I2UyZTJlMjstLW1vbnN0ZXItY29sb3ItZ3JheS0zOiM4YjhiOGI7LS1tb25zdGVyLWNvbG9yLWdyYXktNDojNmY2ZjZmOy0tbW9uc3Rlci1jb2xvci1ncmF5LTU6IzNlM2UzZTstLW1vbnN0ZXItY29sb3ItZ3JheS02OiMyMjI7LS1tb25zdGVyLWNvbG9yLXJvc2UtMTojZmZmN2Y5Oy0tbW9uc3Rlci1jb2xvci1yb3NlLTI6I2ZmZGNlNTstLW1vbnN0ZXItY29sb3Itcm9zZS0zOiNmZjNiOGQ7LS1tb25zdGVyLWNvbG9yLXJvc2UtNDojZGIwMDcyOy0tbW9uc3Rlci1jb2xvci1yb3NlLTU6IzgwMDA0MDstLW1vbnN0ZXItY29sb3Itcm9zZS02OiM0YzAwMjM7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS0xOiNmZmY4Zjg7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS0yOiNmZmRkZGY7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS0zOiNmZjQyNmM7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS00OiNkZTAwNTE7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS01OiM4MjAwMmM7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS02OiM1MTAwMTg7LS1tb25zdGVyLWNvbG9yLXJlZC0xOiNmZmY4ZjY7LS1tb25zdGVyLWNvbG9yLXJlZC0yOiNmZmRkZDg7LS1tb25zdGVyLWNvbG9yLXJlZC0zOiNmZjQ2NDc7LS1tb25zdGVyLWNvbG9yLXJlZC00OiNlMDAwMmI7LS1tb25zdGVyLWNvbG9yLXJlZC01OiM4MzAwMTQ7LS1tb25zdGVyLWNvbG9yLXJlZC02OiM1MzAwMDM7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xOiNmZmY4ZjU7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS0yOiNmZmRlZDE7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zOiNmZDRkMDA7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS00OiNjZDNjMDA7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS01OiM3NTIxMDA7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS02OiM0MDE2MDA7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTE6I2ZmZjhmMzstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMjojZmZkZmM2Oy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0zOiNkNTczMDA7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTQ6I2FjNWMwMDstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tNTojNjMzMzAwOy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi02OiMzNzFkMDA7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTE6I2ZmZjhlZjstLW1vbnN0ZXItY29sb3ItYW1iZXItMjojZmZlMGIyOy0tbW9uc3Rlci1jb2xvci1hbWJlci0zOiNiOTgzMDA7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTQ6IzkyNjcwMDstLW1vbnN0ZXItY29sb3ItYW1iZXItNTojNTIzODAwOy0tbW9uc3Rlci1jb2xvci1hbWJlci02OiMzMDIxMDA7LS1tb25zdGVyLWNvbG9yLXllbGxvdy0xOiNmZmY5ZTU7LS1tb25zdGVyLWNvbG9yLXllbGxvdy0yOiNmZmU1M2U7LS1tb25zdGVyLWNvbG9yLXllbGxvdy0zOiM5YzhiMDA7LS1tb25zdGVyLWNvbG9yLXllbGxvdy00OiM3ZDZmMDA7LS1tb25zdGVyLWNvbG9yLXllbGxvdy01OiM0NjNkMDA7LS1tb25zdGVyLWNvbG9yLXllbGxvdy02OiMyOTIzMDA7LS1tb25zdGVyLWNvbG9yLWxpbWUtMTojZjdmZmFjOy0tbW9uc3Rlci1jb2xvci1saW1lLTI6I2Q1ZjIwMDstLW1vbnN0ZXItY29sb3ItbGltZS0zOiM4MTkzMDA7LS1tb25zdGVyLWNvbG9yLWxpbWUtNDojNjc3NjAwOy0tbW9uc3Rlci1jb2xvci1saW1lLTU6IzM5NDEwMDstLW1vbnN0ZXItY29sb3ItbGltZS02OiMyMjI2MDA7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtMTojZTVmZmMzOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTI6Izk4ZmIwMDstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS0zOiM1YzliMDA7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtNDojNDk3YzAwOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTU6IzI2NDUwMDstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS02OiMxODI2MDA7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTE6I2UwZmZkOTstLW1vbnN0ZXItY29sb3ItZ3JlZW4tMjojNzJmZjZjOy0tbW9uc3Rlci1jb2xvci1ncmVlbi0zOiMwMGEyMWY7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTQ6IzAwODIxNzstLW1vbnN0ZXItY29sb3ItZ3JlZW4tNTojMDA0OTA4Oy0tbW9uc3Rlci1jb2xvci1ncmVlbi02OiMwNjI4MDA7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtMTojZGNmZmU2Oy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTI6IzVkZmZhMjstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC0zOiMwMGEwNWE7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtNDojMDA4MTQ3Oy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTU6IzAwNDgyNTstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC02OiMwMDI4MTI7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtMTojZGFmZmVmOy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTI6IzQyZmZjNjstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS0zOiMwMDlmNzg7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtNDojMDA3ZjVmOy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTU6IzAwNDczNDstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS02OiMwMDI4MWI7LS1tb25zdGVyLWNvbG9yLXRlYWwtMTojZDdmZmY3Oy0tbW9uc3Rlci1jb2xvci10ZWFsLTI6IzAwZmZlNDstLW1vbnN0ZXItY29sb3ItdGVhbC0zOiMwMDllOGM7LS1tb25zdGVyLWNvbG9yLXRlYWwtNDojMDA3YzZlOy0tbW9uc3Rlci1jb2xvci10ZWFsLTU6IzAwNDQzYzstLW1vbnN0ZXItY29sb3ItdGVhbC02OiMwMDI3MjI7LS1tb25zdGVyLWNvbG9yLWN5YW4tMTojYzRmZmZlOy0tbW9uc3Rlci1jb2xvci1jeWFuLTI6IzAwZmFmYjstLW1vbnN0ZXItY29sb3ItY3lhbi0zOiMwMDk5OWE7LS1tb25zdGVyLWNvbG9yLWN5YW4tNDojMDA3YTdiOy0tbW9uc3Rlci1jb2xvci1jeWFuLTU6IzAwNDM0NDstLW1vbnN0ZXItY29sb3ItY3lhbi02OiMwMDI1MjU7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci0xOiNkYWZhZmY7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci0yOiM4ZGYwZmY7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci0zOiMwMDk4YTk7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci00OiMwMDc5ODc7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci01OiMwMDQwNDg7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci02OiMwMDIyMjc7LS1tb25zdGVyLWNvbG9yLXNreS0xOiNlM2Y3ZmY7LS1tb25zdGVyLWNvbG9yLXNreS0yOiNhZWU5ZmY7LS1tb25zdGVyLWNvbG9yLXNreS0zOiMwMDk0YjQ7LS1tb25zdGVyLWNvbG9yLXNreS00OiMwMDc1OTA7LS1tb25zdGVyLWNvbG9yLXNreS01OiMwMDQwNGY7LS1tb25zdGVyLWNvbG9yLXNreS02OiMwMDFmMjg7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTE6I2U4ZjZmZjstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tMjojYjllM2ZmOy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi0zOiMwMDkyYzU7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTQ6IzAwNzQ5ZDstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tNTojMDAzYzU0Oy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi02OiMwMDFkMmE7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTE6I2U4ZjJmZjstLW1vbnN0ZXItY29sb3ItYXp1cmUtMjojYzZlMGZmOy0tbW9uc3Rlci1jb2xvci1henVyZS0zOiMwMDhmZGI7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTQ6IzAwNzFhZjstLW1vbnN0ZXItY29sb3ItYXp1cmUtNTojMDAzYjVlOy0tbW9uc3Rlci1jb2xvci1henVyZS02OiMwMDFjMzA7LS1tb25zdGVyLWNvbG9yLWJsdWUtMTojZjBmNGZmOy0tbW9uc3Rlci1jb2xvci1ibHVlLTI6I2Q0ZTBmZjstLW1vbnN0ZXItY29sb3ItYmx1ZS0zOiMwMDg5ZmM7LS1tb25zdGVyLWNvbG9yLWJsdWUtNDojMDA2ZGNhOy0tbW9uc3Rlci1jb2xvci1ibHVlLTU6IzAwMzg2ZDstLW1vbnN0ZXItY29sb3ItYmx1ZS02OiMwMDFhMzk7LS1tb25zdGVyLWNvbG9yLWluZGlnby0xOiNmM2YzZmY7LS1tb25zdGVyLWNvbG9yLWluZGlnby0yOiNkZWRkZmY7LS1tb25zdGVyLWNvbG9yLWluZGlnby0zOiM2NTdlZmY7LS1tb25zdGVyLWNvbG9yLWluZGlnby00OiMwMDYxZmM7LS1tb25zdGVyLWNvbG9yLWluZGlnby01OiMwMDMyOGE7LS1tb25zdGVyLWNvbG9yLWluZGlnby02OiMwMDE2NDk7LS1tb25zdGVyLWNvbG9yLXZpb2xldC0xOiNmN2YxZmY7LS1tb25zdGVyLWNvbG9yLXZpb2xldC0yOiNlOGRhZmY7LS1tb25zdGVyLWNvbG9yLXZpb2xldC0zOiM5YjcwZmY7LS1tb25zdGVyLWNvbG9yLXZpb2xldC00OiM3OTRhZmY7LS1tb25zdGVyLWNvbG9yLXZpb2xldC01OiMyZDBmYmY7LS1tb25zdGVyLWNvbG9yLXZpb2xldC02OiMwYjAwNzQ7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS0xOiNmZGY0ZmY7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS0yOiNmN2Q5ZmY7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS0zOiNkMTUwZmY7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS00OiNiMDFmZTM7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS01OiM2NjAwODc7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS02OiMzYTAwNGY7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMTojZmZmM2ZjOy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTI6I2ZmZDdmNjstLW1vbnN0ZXItY29sb3ItbWFnZW50YS0zOiNmOTExZTA7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNDojY2EwMGI2Oy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTU6Izc0MDA2ODstLW1vbnN0ZXItY29sb3ItbWFnZW50YS02OiM0NDAwM2M7LS1tb25zdGVyLWNvbG9yLXBpbmstMTojZmZmN2ZiOy0tbW9uc3Rlci1jb2xvci1waW5rLTI6I2ZmZGNlYzstLW1vbnN0ZXItY29sb3ItcGluay0zOiNmZjJmYjI7LS1tb25zdGVyLWNvbG9yLXBpbmstNDojZDIwMDhmOy0tbW9uc3Rlci1jb2xvci1waW5rLTU6Izc5MDA1MTstLW1vbnN0ZXItY29sb3ItcGluay02OiM0YjAwMzA7LS1tb25zdGVyLWdyYWRpZW50LXRhbmdlcmluZS0xOiNlNWI4NzU7LS1tb25zdGVyLWdyYWRpZW50LXRhbmdlcmluZS0yOiNkOWEzNjI7LS1tb25zdGVyLWdyYWRpZW50LXRhbmdlcmluZS0zOiNjMDhhNGU7LS1tb25zdGVyLWdyYWRpZW50LXRhbmdlcmluZS00OiNhNzcxM2I7LS1tb25zdGVyLWdyYWRpZW50LXRhbmdlcmluZS01OiM4ZjVhMjg7LS1tb25zdGVyLWdyYWRpZW50LXRhbmdlcmluZS02OiMzNjA1MDU7LS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTE6I2Y3ZjVlZjstLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtMjojZTVlMmQ5Oy0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC0zOiNjYmM2YjM7LS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTQ6I2ExOWQ4YTstLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtNTojN2E3NTY2Oy0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC02OiM1MTRkM2Z9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTEpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTEpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMSl9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0xKX0ubW9uc3Rlci10aGVtZS1lcnJvci0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTEpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTEpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtMXtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xKX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTEpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMSl9Lm1vbnN0ZXItY29sb3ItZXJyb3ItMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0xKX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS1kaXNhYmxlZC0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yKX0ubW9uc3Rlci10aGVtZS1zZWNvbmRhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLXRoZW1lLXRlcnRpYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItdGhlbWUtZGVzdHJ1Y3RpdmUtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yKX0ubW9uc3Rlci10aGVtZS1zdWNjZXNzLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTIpfS5tb25zdGVyLXRoZW1lLXdhcm5pbmctMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMil9Lm1vbnN0ZXItdGhlbWUtZXJyb3ItMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0yKX0ubW9uc3Rlci10aGVtZS1zZWxlY3Rpb24tMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTIpfS5tb25zdGVyLWJvcmRlci1jb2xvci0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWJvcmRlci0yKX0ubW9uc3Rlci1jb2xvci1uZXV0cmFsLTJ7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWNvbG9yLXByaW1hcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMil9Lm1vbnN0ZXItY29sb3Itc3VjY2Vzcy0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yKX0ubW9uc3Rlci1jb2xvci13YXJuaW5nLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTIpfS5tb25zdGVyLWNvbG9yLWVycm9yLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMil9Lm1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktZGlzYWJsZWQtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMyl9Lm1vbnN0ZXItdGhlbWUtc2Vjb25kYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci10aGVtZS10ZXJ0aWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLXRoZW1lLWRlc3RydWN0aXZlLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMyl9Lm1vbnN0ZXItdGhlbWUtc3VjY2Vzcy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zKX0ubW9uc3Rlci10aGVtZS13YXJuaW5nLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTMpfS5tb25zdGVyLXRoZW1lLWVycm9yLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMyl9Lm1vbnN0ZXItdGhlbWUtc2VsZWN0aW9uLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKX0ubW9uc3Rlci1ib3JkZXItY29sb3ItM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ib3JkZXItMyl9Lm1vbnN0ZXItY29sb3ItbmV1dHJhbC0ze2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1jb2xvci1wcmltYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItY29sb3ItdGVydGlhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTMpfS5tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMyl9Lm1vbnN0ZXItY29sb3Itd2FybmluZy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0zKX0ubW9uc3Rlci1jb2xvci1lcnJvci0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTMpfS5tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNCl9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy00KX0ubW9uc3Rlci10aGVtZS1lcnJvci00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTQpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNCl9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTQpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtNHtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00KX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNCl9Lm1vbnN0ZXItY29sb3ItZXJyb3ItNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci00KX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQpfS5tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29udGFpbmVyLTEsLm1vbnN0ZXItdGhlbWUtY29udHJvbC1yb3ctMXtib3JkZXI6MXB4IHNvbGlkIHZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItY29sb3IpfS5tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29udGFpbmVyLTEsLm1vbnN0ZXItdGhlbWUtY29udHJvbC1lbGVtZW50LC5tb25zdGVyLXRoZW1lLWNvbnRyb2wtcm93LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmctY29sb3IpO2NvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1jb2xvcil9Lm1vbnN0ZXItdGhlbWUtY29udHJvbC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJnLWNvbG9yKX0ubW9uc3Rlci10aGVtZS1iYWNrZ3JvdW5kLWluaGVyaXR7YmFja2dyb3VuZC1jb2xvcjppbmhlcml0IWltcG9ydGFudH0ubW9uc3Rlci10aGVtZS1vbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtb24tYmctY29sb3IpO2NvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtb24tY29sb3IpfS5tb25zdGVyLXRoZW1lLW9mZntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtb2ZmLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLW9mZi1jb2xvcil9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMSwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0yLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci0we2JvcmRlci1yYWRpdXM6MDtib3JkZXItc3R5bGU6bm9uZTtib3JkZXItd2lkdGg6MH0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMiwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMSwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMiwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMywubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDttYXJnaW46MDtvdXRsaW5lOm5vbmV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKTtvdXRsaW5lLW9mZnNldDoycHh9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIC5zd2l0Y2h7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmlubGluZS1ncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyO3Bvc2l0aW9uOnJlbGF0aXZlO3RyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAuMnM7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gLmxhYmVse2Rpc3BsYXk6YmxvY2s7bWF4LXdpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MCAuMmVtO3RleHQtYWxpZ246Y2VudGVyO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3doaXRlLXNwYWNlOm5vd3JhcH1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gLnN3aXRjaC1zbGlkZXJ7Ym90dG9tOjRweDtsZWZ0OjRweDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDo0cHg7dG9wOjRweDt0cmFuc2l0aW9uOi4yczt3aWR0aDpjYWxjKDUwJSAtIDRweCl9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIC5zd2l0Y2hbZGF0YS1tb25zdGVyLXN0YXRlPW9uXSAubGFiZWwub2Zme3Zpc2liaWxpdHk6aGlkZGVufVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSAuc3dpdGNoW2RhdGEtbW9uc3Rlci1zdGF0ZT1vZmZdIC5sYWJlbC5vZmYsW2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIC5zd2l0Y2hbZGF0YS1tb25zdGVyLXN0YXRlPW9uXSAubGFiZWwub257dmlzaWJpbGl0eTp2aXNpYmxlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSAuc3dpdGNoW2RhdGEtbW9uc3Rlci1zdGF0ZT1vZmZdIC5sYWJlbC5vbnt2aXNpYmlsaXR5OmhpZGRlbn1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gLnN3aXRjaFtkYXRhLW1vbnN0ZXItc3RhdGU9b25dIC5zd2l0Y2gtc2xpZGVye3RyYW5zZm9ybTp0cmFuc2xhdGVYKDEwMCUpfSBcbn1gLFxuXHRcdDAsXG5cdCk7XG59IGNhdGNoIChlKSB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcihcImh0bWxcIiksXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRlICsgXCJcIixcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBDdXN0b21Db250cm9sIH0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21jb250cm9sLm1qc1wiO1xuaW1wb3J0IHsgT2JzZXJ2ZXIgfSBmcm9tIFwiLi4vLi4vdHlwZXMvb2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQgeyBQcm94eU9ic2VydmVyIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3Byb3h5b2JzZXJ2ZXIubWpzXCI7XG5cbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcblx0dXBkYXRlclRyYW5zZm9ybWVyTWV0aG9kc1N5bWJvbCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHsgaXNPYmplY3QsIGlzRnVuY3Rpb24gfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBUb2dnbGVTd2l0Y2hTdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC90b2dnbGUtc3dpdGNoLm1qc1wiO1xuaW1wb3J0IHtcblx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0QVRUUklCVVRFX1JPTEUsXG59IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBUb2dnbGVTd2l0Y2ggfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgc3dpdGNoRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcInN3aXRjaEVsZW1lbnRcIik7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IFNUQVRFX09OID0gXCJvblwiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBTVEFURV9PRkYgPSBcIm9mZlwiO1xuXG4vKipcbiAqIEEgc2ltcGxlIHRvZ2dsZSBzd2l0Y2hcbiAqXG4gKiBAZnJhZ21lbnRzIC9mcmFnbWVudHMvY29tcG9uZW50cy9mb3JtL3RvZ2dsZS1zd2l0Y2hcbiAqXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9mb3JtL3RvZ2dsZS1zd2l0Y2gtc2ltcGxlXG4gKlxuICogQHNpbmNlIDMuNTcuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgYmVhdXRpZnVsIHN3aXRjaCBlbGVtZW50XG4gKiBAZmlyZXMgbW9uc3Rlci1vcHRpb25zLXNldFxuICogQGZpcmVzIG1vbnN0ZXItc2VsZWN0ZWRcbiAqIEBmaXJlcyBtb25zdGVyLWNoYW5nZVxuICogQGZpcmVzIG1vbnN0ZXItY2hhbmdlZFxuICovXG5jbGFzcyBUb2dnbGVTd2l0Y2ggZXh0ZW5kcyBDdXN0b21Db250cm9sIHtcblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIEhUTUwgdGFnLCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHZhbHVlPWN1cnJlbnQgdmFsdWUgb2YgdGhlIGVsZW1lbnRcblx0ICogQHByb3BlcnR5IHtCb29sZWFufSBkaXNhYmxlZD1kaXNhYmxlZD1mYWxzZSBEaXNhYmxlZCBzdGF0ZVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gY2xhc3Nlc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gY2xhc3Nlcy5vbj1zcGVjaWZpZXMgdGhlIGNsYXNzIGZvciB0aGUgb24gc3RhdGUuXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjbGFzc2VzLm9mZj1zcGVjaWZpZXMgdGhlIGNsYXNzIGZvciB0aGUgb2ZmIHN0YXRlLlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdmFsdWVzXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2YWx1ZXMub2ZmPXNwZWNpZmllcyB0aGUgdmFsdWUgb2YgdGhlIGVsZW1lbnQgaWYgaXQgaXMgbm90IHNlbGVjdGVkXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBsYWJlbHNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5vbj1zcGVjaWZpZXMgdGhlIGxhYmVsIGZvciB0aGUgb24gc3RhdGUuXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYWJlbHMub2ZmPXNwZWNpZmllcyB0aGUgbGFiZWwgZm9yIHRoZSBvZmYgc3RhdGUuXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhY3Rpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhY3Rpb25zLm9uPXNwZWNpZmllcyB0aGUgYWN0aW9uIGZvciB0aGUgb24gc3RhdGUuXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhY3Rpb25zLm9mZj1zcGVjaWZpZXMgdGhlIGFjdGlvbiBmb3IgdGhlIG9mZiBzdGF0ZS5cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW49c3BlY2lmaWVzIHRoZSBtYWluIHRlbXBsYXRlIHVzZWQgYnkgdGhlIGNvbnRyb2wuXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR2YWx1ZTogbnVsbCxcblx0XHRcdGRpc2FibGVkOiBmYWxzZSxcblx0XHRcdGNsYXNzZXM6IHtcblx0XHRcdFx0b246IFwibW9uc3Rlci10aGVtZS1vblwiLFxuXHRcdFx0XHRvZmY6IFwibW9uc3Rlci10aGVtZS1vZmZcIixcblx0XHRcdFx0aGFuZGxlOiBcIm1vbnN0ZXItdGhlbWUtcHJpbWFyeS0xXCIsXG5cdFx0XHR9LFxuXHRcdFx0dmFsdWVzOiB7XG5cdFx0XHRcdG9uOiBcIm9uXCIsXG5cdFx0XHRcdG9mZjogXCJvZmZcIixcblx0XHRcdH0sXG5cdFx0XHRsYWJlbHM6IHtcblx0XHRcdFx0dG9nZ2xlU3dpdGNoT246IFwiXHUyNzE0XCIsXG5cdFx0XHRcdHRvZ2dsZVN3aXRjaE9mZjogXCJcdTI3MTZcIixcblx0XHRcdH0sXG5cdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdH0sXG5cdFx0XHRhY3Rpb25zOiB7XG5cdFx0XHRcdG9uOiAoKSA9PiB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIG9uIGFjdGlvbiBpcyBub3QgZGVmaW5lZFwiKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0b2ZmOiAoKSA9PiB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIG9mZiBhY3Rpb24gaXMgbm90IGRlZmluZWRcIik7XG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge1RvZ2dsZVN3aXRjaH1cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cdFx0aW5pdENvbnRyb2xSZWZlcmVuY2VzLmNhbGwodGhpcyk7XG5cdFx0aW5pdEV2ZW50SGFuZGxlci5jYWxsKHRoaXMpO1xuXG5cdFx0LyoqXG5cdFx0ICogaW5pdCB2YWx1ZSB0byBvZmZcblx0XHQgKiBpZiB0aGUgdmFsdWUgd2FzIG5vdCBkZWZpbmVkIGJlZm9yZSBpbnNlcnRpbmcgaXQgaW50byB0aGUgSFRNTFxuXHRcdCAqL1xuXHRcdGlmIChzZWxmLmdldE9wdGlvbihcInZhbHVlXCIpID09PSBudWxsKSB7XG5cdFx0XHRzZWxmLnNldE9wdGlvbihcInZhbHVlXCIsIHNlbGYuZ2V0T3B0aW9uKFwidmFsdWVzLm9mZlwiKSk7XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogdmFsdWUgZnJvbSBhdHRyaWJ1dGVcblx0XHQgKi9cblx0XHRpZiAoc2VsZi5oYXNBdHRyaWJ1dGUoXCJ2YWx1ZVwiKSkge1xuXHRcdFx0c2VsZi5zZXRPcHRpb24oXCJ2YWx1ZVwiLCBzZWxmLmdldEF0dHJpYnV0ZShcInZhbHVlXCIpKTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiB2YWxpZGF0ZSB2YWx1ZVxuXHRcdCAqL1xuXHRcdHZhbGlkYXRlQW5kU2V0VmFsdWUuY2FsbChzZWxmKTtcblxuXHRcdGlmICh0aGlzLnN0YXRlID09PSBTVEFURV9PTikge1xuXHRcdFx0dG9nZ2xlQ2xhc3NPbi5jYWxsKHNlbGYpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0b2dnbGVDbGFzc09mZi5jYWxsKHNlbGYpO1xuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIGlzIGNhbGxlZCB3aGVuIG9wdGlvbnMgY2hhbmdlZFxuXHRcdCAqL1xuXHRcdHNlbGZbaW50ZXJuYWxTeW1ib2xdLmF0dGFjaE9ic2VydmVyKFxuXHRcdFx0bmV3IE9ic2VydmVyKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0aWYgKGlzT2JqZWN0KHRoaXMpICYmIHRoaXMgaW5zdGFuY2VvZiBQcm94eU9ic2VydmVyKSB7XG5cdFx0XHRcdFx0dmFsaWRhdGVBbmRTZXRWYWx1ZS5jYWxsKHNlbGYpO1xuXHRcdFx0XHRcdHRvZ2dsZUNsYXNzLmNhbGwoc2VsZik7XG5cdFx0XHRcdH1cblx0XHRcdH0pLFxuXHRcdCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiB1cGRhdGVyIHRyYW5zZm9ybWVyIG1ldGhvZHMgZm9yIHBpcGVcblx0ICpcblx0ICogQHJldHVybiB7ZnVuY3Rpb259XG5cdCAqL1xuXHRbdXBkYXRlclRyYW5zZm9ybWVyTWV0aG9kc1N5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwic3RhdGUtY2FsbGJhY2tcIjogKFdlcnQpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuc3RhdGU7XG5cdFx0XHR9LFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiBbQ1NTU3R5bGVTaGVldF1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiBbVG9nZ2xlU3dpdGNoU3R5bGVTaGVldF07XG5cdH1cblxuXHQvKipcblx0ICogdG9nZ2xlIHN3aXRjaFxuXHQgKlxuXHQgKiBgYGBcblx0ICogZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21vbnN0ZXItdG9nZ2xlLXN3aXRjaCcpO1xuXHQgKiBlLmNsaWNrKClcblx0ICogYGBgXG5cdCAqL1xuXHRjbGljaygpIHtcblx0XHR0b2dnbGVWYWx1ZXMuY2FsbCh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiB0b2dnbGUgc3dpdGNoIG9uL29mZlxuXHQgKlxuXHQgKiBgYGBcblx0ICogZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21vbnN0ZXItdG9nZ2xlLXN3aXRjaCcpO1xuXHQgKiBlLnRvZ2dsZSgpXG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcmV0dXJuIHtUb2dnbGVTd2l0Y2h9XG5cdCAqL1xuXHR0b2dnbGUoKSB7XG5cdFx0dGhpcy5jbGljaygpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIHRvZ2dsZSBzd2l0Y2ggb25cblx0ICpcblx0ICogYGBgXG5cdCAqIGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLXRvZ2dsZS1zd2l0Y2gnKTtcblx0ICogZS50b2dnbGVPbigpXG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcmV0dXJuIHtUb2dnbGVTd2l0Y2h9XG5cdCAqL1xuXHR0b2dnbGVPbigpIHtcblx0XHR0aGlzLnNldE9wdGlvbihcInZhbHVlXCIsIHRoaXMuZ2V0T3B0aW9uKFwidmFsdWVzLm9uXCIpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiB0b2dnbGUgc3dpdGNoIG9mZlxuXHQgKlxuXHQgKiBgYGBcblx0ICogZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21vbnN0ZXItdG9nZ2xlLXN3aXRjaCcpO1xuXHQgKiBlLnRvZ2dsZU9mZigpXG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcmV0dXJuIHtUb2dnbGVTd2l0Y2h9XG5cdCAqL1xuXHR0b2dnbGVPZmYoKSB7XG5cdFx0dGhpcy5zZXRPcHRpb24oXCJ2YWx1ZVwiLCB0aGlzLmdldE9wdGlvbihcInZhbHVlcy5vZmZcIikpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIHJldHVybnMgdGhlIHN0YXR1cyBvZiB0aGUgZWxlbWVudFxuXHQgKlxuXHQgKiBgYGBcblx0ICogZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21vbnN0ZXItdG9nZ2xlLXN3aXRjaCcpO1xuXHQgKiBjb25zb2xlLmxvZyhlLnN0YXRlKVxuXHQgKiAvLyBcdTIxQTYgb2ZmXG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRnZXQgc3RhdGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0T3B0aW9uKFwidmFsdWVcIikgPT09IHRoaXMuZ2V0T3B0aW9uKFwidmFsdWVzLm9uXCIpXG5cdFx0XHQ/IFNUQVRFX09OXG5cdFx0XHQ6IFNUQVRFX09GRjtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgU3dpdGNoXG5cdCAqXG5cdCAqIGBgYFxuXHQgKiBlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbW9uc3Rlci10b2dnbGUtc3dpdGNoJyk7XG5cdCAqIGNvbnNvbGUubG9nKGUudmFsdWUpXG5cdCAqIC8vIFx1MjFBNiBvblxuXHQgKiBgYGBcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0Z2V0IHZhbHVlKCkge1xuXHRcdHJldHVybiB0aGlzLnN0YXRlID09PSBTVEFURV9PTlxuXHRcdFx0PyB0aGlzLmdldE9wdGlvbihcInZhbHVlcy5vblwiKVxuXHRcdFx0OiB0aGlzLmdldE9wdGlvbihcInZhbHVlcy5vZmZcIik7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IHZhbHVlXG5cdCAqXG5cdCAqIGBgYFxuXHQgKiBlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbW9uc3Rlci10b2dnbGUtc3dpdGNoJyk7XG5cdCAqIGUudmFsdWU9XCJvblwiXG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdmFsdWVcblx0ICovXG5cdHNldCB2YWx1ZSh2YWx1ZSkge1xuXHRcdHRoaXMuc2V0T3B0aW9uKFwidmFsdWVcIiwgdmFsdWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXG5cdFx0XHRcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9mb3JtL3RvZ2dsZS1zd2l0Y2hAQGluc3RhbmNlXCIsXG5cdFx0KTtcblx0fVxuXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci10b2dnbGUtc3dpdGNoXCI7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdHRoaXNbc3dpdGNoRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PXN3aXRjaF1gLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHRvZ2dsZUNsYXNzT24oKSB7XG5cdHRoaXNbc3dpdGNoRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LnJlbW92ZSh0aGlzLmdldE9wdGlvbihcImNsYXNzZXMub2ZmXCIpKTsgLy8gY2hhbmdlIGNvbG9yXG5cdHRoaXNbc3dpdGNoRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZCh0aGlzLmdldE9wdGlvbihcImNsYXNzZXMub25cIikpOyAvLyBjaGFuZ2UgY29sb3Jcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB0b2dnbGVDbGFzc09mZigpIHtcblx0dGhpc1tzd2l0Y2hFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuZ2V0T3B0aW9uKFwiY2xhc3Nlcy5vblwiKSk7IC8vIGNoYW5nZSBjb2xvclxuXHR0aGlzW3N3aXRjaEVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5hZGQodGhpcy5nZXRPcHRpb24oXCJjbGFzc2VzLm9mZlwiKSk7IC8vIGNoYW5nZSBjb2xvclxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHRvZ2dsZUNsYXNzKCkge1xuXHRpZiAodGhpcy5nZXRPcHRpb24oXCJ2YWx1ZVwiKSA9PT0gdGhpcy5nZXRPcHRpb24oXCJ2YWx1ZXMub25cIikpIHtcblx0XHR0b2dnbGVDbGFzc09uLmNhbGwodGhpcyk7XG5cdH0gZWxzZSB7XG5cdFx0dG9nZ2xlQ2xhc3NPZmYuY2FsbCh0aGlzKTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHRvZ2dsZVZhbHVlcygpIHtcblx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZGlzYWJsZWRcIikgPT09IHRydWUpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRsZXQgY2FsbGJhY2ssIHZhbHVlO1xuXG5cdGlmICh0aGlzLmdldE9wdGlvbihcInZhbHVlXCIpID09PSB0aGlzLmdldE9wdGlvbihcInZhbHVlcy5vblwiKSkge1xuXHRcdHZhbHVlID0gdGhpcy5nZXRPcHRpb24oXCJ2YWx1ZXMub2ZmXCIpO1xuXHRcdGNhbGxiYWNrID0gdGhpcy5nZXRPcHRpb24oXCJhY3Rpb25zLm9mZlwiKTtcblx0fSBlbHNlIHtcblx0XHR2YWx1ZSA9IHRoaXMuZ2V0T3B0aW9uKFwidmFsdWVzLm9uXCIpO1xuXHRcdGNhbGxiYWNrID0gdGhpcy5nZXRPcHRpb24oXCJhY3Rpb25zLm9uXCIpO1xuXHR9XG5cblx0dGhpcy5zZXRPcHRpb24oXCJ2YWx1ZVwiLCB2YWx1ZSk7XG5cdHRoaXM/LnNldEZvcm1WYWx1ZSh2YWx1ZSk7XG5cblx0aWYgKGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG5cdFx0Y2FsbGJhY2suY2FsbCh0aGlzKTtcblx0fVxuXG5cdHRoaXMuc2V0T3B0aW9uKFwic3RhdGVcIiwgdGhpcy5zdGF0ZSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVBbmRTZXRWYWx1ZSgpIHtcblx0Y29uc3QgdmFsdWUgPSB0aGlzLmdldE9wdGlvbihcInZhbHVlXCIpO1xuXG5cdGNvbnN0IHZhbGlkYXRlZFZhbHVlcyA9IFtdO1xuXHR2YWxpZGF0ZWRWYWx1ZXMucHVzaCh0aGlzLmdldE9wdGlvbihcInZhbHVlcy5vblwiKSk7XG5cdHZhbGlkYXRlZFZhbHVlcy5wdXNoKHRoaXMuZ2V0T3B0aW9uKFwidmFsdWVzLm9mZlwiKSk7XG5cblx0aWYgKHZhbGlkYXRlZFZhbHVlcy5pbmNsdWRlcyh2YWx1ZSkgPT09IGZhbHNlKSB7XG5cdFx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0XHR0aGlzLFxuXHRcdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRcdCdUaGUgdmFsdWUgXCInICtcblx0XHRcdFx0dmFsdWUgK1xuXHRcdFx0XHQnXCIgbXVzdCBiZSBcIicgK1xuXHRcdFx0XHR0aGlzLmdldE9wdGlvbihcInZhbHVlcy5vblwiKSArXG5cdFx0XHRcdCdcIiBvciBcIicgK1xuXHRcdFx0XHR0aGlzLmdldE9wdGlvbihcInZhbHVlcy5vZmZcIiksXG5cdFx0KTtcblx0XHR0aGlzLnNldE9wdGlvbihcImRpc2FibGVkXCIsIHRydWUpO1xuXHRcdHRoaXMuZm9ybURpc2FibGVkQ2FsbGJhY2sodHJ1ZSk7XG5cdH0gZWxzZSB7XG5cdFx0dGhpcy5zZXRPcHRpb24oXCJkaXNhYmxlZFwiLCBmYWxzZSk7XG5cdFx0dGhpcy5mb3JtRGlzYWJsZWRDYWxsYmFjayhmYWxzZSk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7aW5pdEV2ZW50SGFuZGxlcn1cbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50SGFuZGxlcigpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cdHNlbGYuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsIGZ1bmN0aW9uIChldmVudCkge1xuXHRcdGlmIChldmVudC5jb2RlID09PSBcIlNwYWNlXCIpIHtcblx0XHRcdHNlbGZbc3dpdGNoRWxlbWVudFN5bWJvbF0uY2xpY2soKTtcblx0XHR9XG5cdH0pO1xuXHRzZWxmLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0XHR0b2dnbGVWYWx1ZXMuY2FsbChzZWxmKTtcblx0fSk7XG5cdHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250cm9sXCIgcGFydD1cImNvbnRyb2xcIiB0YWJpbmRleD1cIjBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzd2l0Y2hcIiBkYXRhLW1vbnN0ZXItcm9sZT1cInN3aXRjaFwiXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiZGF0YS1tb25zdGVyLXN0YXRlIHBhdGg6dmFsdWUgfCBjYWxsOnN0YXRlLWNhbGxiYWNrXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsIG9uXCIgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmxhYmVscy50b2dnbGVTd2l0Y2hPblwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbCBvZmZcIiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6bGFiZWxzLnRvZ2dsZVN3aXRjaE9mZlwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJjbGFzcyBwYXRoOmNsYXNzZXMuaGFuZGxlIHwgc3VmZml4OlxcXFwgc3dpdGNoLXNsaWRlclwiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PmA7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChUb2dnbGVTd2l0Y2gpO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtcblx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0QVRUUklCVVRFX1JPTEUsXG59IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdGF0dHJpYnV0ZU9ic2VydmVyU3ltYm9sLFxuXHRDdXN0b21FbGVtZW50LFxuXHRpbml0TWV0aG9kU3ltYm9sLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IGlzQXJyYXksIGlzU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0ZPUk1fUkVMT0FELCBBVFRSSUJVVEVfRk9STV9VUkwgfSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBsb2FkQW5kQXNzaWduQ29udGVudCB9IGZyb20gXCIuL3V0aWwvZmV0Y2gubWpzXCI7XG5cbmV4cG9ydCB7IFRlbXBsYXRlIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGludGVyc2VjdGlvbk9ic2VydmVyV2FzSW5pdGlhbGl6ZWQgPSBTeW1ib2woXCJ3YXNJbml0aWFsaXplZFwiKTtcblxuLyoqXG4gKiBBIFRlbXBsYXRlIGNvbnRyb2wgaXMgYSBjb250cm9sIHRoYXQgY2FuIGJlIHVzZWQgdG8gbG9hZCBjb250ZW50IGZyb20gYSBVUkwgYW5kIGRpc3BsYXkgaXQgaW4gdGhlIFNoYWRvd1Jvb3QuXG4gKlxuICogQGZyYWdtZW50cyAvZnJhZ21lbnRzL2NvbXBvbmVudHMvZm9ybS90ZW1wbGF0ZS9cbiAqXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9mb3JtL3RlbXBsYXRlLXNpbXBsZVxuICpcbiAqIEBzaW5jZSAxLjExLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIHRlbXBsYXRlIGNvbnRyb2xcbiAqIEBmaXJlcyBtb25zdGVyLWZldGNoZWRcbiAqL1xuY2xhc3MgVGVtcGxhdGUgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2Zvcm0vdGVtcGxhdGVcIik7XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgSFRNTCB0YWcsIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1vcHRpb25zYCBtdXN0IGJlIHVzZWQuXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZy9lbi9kb2MvI2NvbmZpZ3VyYXRlLWEtbW9uc3Rlci1jb250cm9sfVxuXHQgKlxuXHQgKiBUaGUgaW5kaXZpZHVhbCBjb25maWd1cmF0aW9uIHZhbHVlcyBjYW4gYmUgZm91bmQgaW4gdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIFRlbXBsYXRlIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbiBNYWluIHRlbXBsYXRlXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB1cmw9dW5kZWZpbmVkXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByZWxvYWQ9dW5kZWZpbmVkICBjdXJyZW50bHkgdGhlIG9ubHkgdmFsdWUgZGVmaW5lZCBpcyBgb25zaG93YC4gQ3VycmVudGx5IHRoZSBvbmx5IHZhbHVlIGRlZmluZWQgaXMgb25zaG93LiB0aGlzIHJlbW92ZXMgdGhlIEludGVyc2VjdGlvbk9ic2VydmVyLiB0aGlzIG1lYW5zIHRoYXQgdGhlIGNvbnRlbnQgaXMgb25seSBsb2FkZWQgb25jZS4gcmVsb2FkaW5nIG9mIHRoZSBjb250ZW50IGRvZXMgbm90IG9jY3VyLlxuXHQgKiBAcHJvcGVydHkge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlByb2Nlc3NvcltdfSBwcm9jZXNzb3JzXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmZXRjaCBGZXRjaCBbc2VlIFVzaW5nIEZldGNoIG1vemlsbGEub3JnXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmV0Y2hfQVBJL1VzaW5nX0ZldGNoKVxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2gucmVkaXJlY3Q9ZXJyb3Jcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLm1ldGhvZD1HRVRcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLm1vZGU9c2FtZS1vcmlnaW5cblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLmNyZWRlbnRpYWxzPXNhbWUtb3JpZ2luXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmZXRjaC5oZWFkZXJzPXtcImFjY2VwdFwiOlwidGV4dC9odG1sXCJ9fVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKFxuXHRcdFx0e30sXG5cdFx0XHRzdXBlci5kZWZhdWx0cyxcblx0XHRcdHtcblx0XHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdFx0fSxcblx0XHRcdFx0dXJsOiB1bmRlZmluZWQsXG5cdFx0XHRcdHJlbG9hZDogdW5kZWZpbmVkLFxuXHRcdFx0XHRwcm9jZXNzb3JzOiBbXSxcblx0XHRcdFx0ZmV0Y2g6IHtcblx0XHRcdFx0XHRyZWRpcmVjdDogXCJlcnJvclwiLFxuXHRcdFx0XHRcdG1ldGhvZDogXCJHRVRcIixcblx0XHRcdFx0XHRtb2RlOiBcInNhbWUtb3JpZ2luXCIsXG5cdFx0XHRcdFx0Y3JlZGVudGlhbHM6IFwic2FtZS1vcmlnaW5cIixcblx0XHRcdFx0XHRoZWFkZXJzOiB7XG5cdFx0XHRcdFx0XHRhY2NlcHQ6IFwidGV4dC9odG1sXCIsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0XHRpbml0T3B0aW9uc0Zyb21Bcmd1bWVudHMuY2FsbCh0aGlzKSxcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGRldGVybWluZXMgd2hpY2ggYXR0cmlidXRlcyBhcmUgdG8gYmUgbW9uaXRvcmVkIGJ5IGBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKWAuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ1tdfVxuXHQgKi9cblx0c3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG5cdFx0Y29uc3QgbGlzdCA9IHN1cGVyLm9ic2VydmVkQXR0cmlidXRlcztcblx0XHRsaXN0LnB1c2goQVRUUklCVVRFX0ZPUk1fVVJMKTtcblx0XHRyZXR1cm4gbGlzdDtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0W2luaXRNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2luaXRNZXRob2RTeW1ib2xdKCk7XG5cblx0XHQvLyBkYXRhLW1vbnN0ZXItb3B0aW9uc1xuXHRcdHRoaXNbYXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2xdW0FUVFJJQlVURV9GT1JNX1VSTF0gPSAodXJsKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fVVJMKSkge1xuXHRcdFx0XHR0aGlzLnNldE9wdGlvbihcInVybFwiLCBuZXcgVVJMKHVybCwgZG9jdW1lbnQubG9jYXRpb24pLnRvU3RyaW5nKCkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5zZXRPcHRpb24oXCJ1cmxcIiwgdW5kZWZpbmVkKTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBpbnRlcm5hbCBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBtaXNzaW5nIGRlZmF1bHQgc2xvdFxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gbWlzc2luZyB1cmxcblx0ICogQHRocm93cyB7RXJyb3J9IHdlIHdvbid0IGJlIGFibGUgdG8gcmVhZCB0aGUgZGF0YVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gcmVxdWVzdCBmYWlsZWRcblx0ICogQHRocm93cyB7RXJyb3J9IG5vdCBmb3VuZFxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdW5kZWZpbmVkIHN0YXR1cyBvciB0eXBlXG5cdCAqIEBmaXJlcyBtb25zdGVyLWZldGNoZWRcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uRm9ybX1cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cdFx0aW5pdEludGVyc2VjdGlvbk9ic2VydmVyLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGludGVybmFsIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICpcblx0ICogQHJldHVybiB7Q1NTU3R5bGVTaGVldFtdfVxuXHQgKi9cblx0c3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBpbnRlcm5hbCBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci10ZW1wbGF0ZVwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIGxvYWQgY29udGVudCBmcm9tIHVybFxuXHQgKlxuXHQgKiBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyB0aGF0IHdpdGggdGhpcyBmdW5jdGlvbiB0aGUgbG9hZGluZyBpcyBleGVjdXRlZFxuXHQgKiBkaXJlY3RseS4gaXQgaXMgbG9hZGVkIGFzIHdlbGwgd2hlbiB0aGUgZWxlbWVudCBpcyBub3QgdmlzaWJsZS5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSB1cmxcblx0ICovXG5cdGZldGNoKHVybCkge1xuXHRcdGlmIChpc1N0cmluZyh1cmwpIHx8IHVybCBpbnN0YW5jZW9mIFVSTCkge1xuXHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fVVJMLCBgJHt1cmx9YCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGxvYWRDb250ZW50LmNhbGwodGhpcyk7XG5cdH1cbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBQcm9jZXNzb3JcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBkZXN0aW5hdGlvblxuICogQHByb3BlcnR5IHtTdHJpbmd9IHNvdXJjZVxuICogQHNpbmNlIDEuMTEuOFxuICovXG5cbi8qKlxuICogVGhpcyBhdHRyaWJ1dGUgY2FuIGJlIHVzZWQgdG8gcGFzcyBhIFVSTCB0byB0aGlzIHNlbGVjdC5cbiAqXG4gKiBgYGBcbiAqIDxtb25zdGVyLXNlbGVjdCBkYXRhLW1vbnN0ZXItdXJsPVwiaHR0cHM6Ly9leGFtcGxlLmNvbS9cIj48L21vbnN0ZXItc2VsZWN0PlxuICogYGBgXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gaW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzKCkge1xuXHRjb25zdCBvcHRpb25zID0ge307XG5cblx0Y29uc3QgdXJsID0gdGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fVVJMKTtcblxuXHRpZiAoaXNTdHJpbmcodXJsKSkge1xuXHRcdG9wdGlvbnNbXCJ1cmxcIl0gPSBuZXcgVVJMKHVybCwgZG9jdW1lbnQubG9jYXRpb24pLnRvU3RyaW5nKCk7XG5cdH1cblxuXHRpZiAodGhpcy5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fUkVMT0FEKSkge1xuXHRcdG9wdGlvbnNbXCJyZWxvYWRcIl0gPSB0aGlzLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfRk9STV9SRUxPQUQpLnRvTG93ZXJDYXNlKCk7XG5cdH1cblxuXHRyZXR1cm4gb3B0aW9ucztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHRocm93cyB7RXJyb3J9IG1pc3NpbmcgZGVmYXVsdCBzbG90XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICogQHRocm93cyB7RXJyb3J9IG1pc3NpbmcgdXJsXG4gKiBAdGhyb3dzIHtFcnJvcn0gd2Ugd29uJ3QgYmUgYWJsZSB0byByZWFkIHRoZSBkYXRhXG4gKiBAdGhyb3dzIHtFcnJvcn0gcmVxdWVzdCBmYWlsZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSBub3QgZm91bmRcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bmRlZmluZWQgc3RhdHVzIG9yIHR5cGVcbiAqIEBmaXJlcyBtb25zdGVyLWZldGNoZWRcbiAqL1xuZnVuY3Rpb24gaW5pdEludGVyc2VjdGlvbk9ic2VydmVyKCkge1xuXHRpZiAodGhpc1tpbnRlcnNlY3Rpb25PYnNlcnZlcldhc0luaXRpYWxpemVkXSA9PT0gdHJ1ZSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXNbaW50ZXJzZWN0aW9uT2JzZXJ2ZXJXYXNJbml0aWFsaXplZF0gPSB0cnVlO1xuXG5cdGNvbnN0IG9wdGlvbnMgPSB7XG5cdFx0dGhyZXNob2xkOiBbMC41XSxcblx0fTtcblxuXHRjb25zdCBjYWxsYmFjayA9IChlbnRyaWVzLCBvYnNlcnZlcikgPT4ge1xuXHRcdGZvciAoY29uc3QgWywgZW50cnldIG9mIGVudHJpZXMuZW50cmllcygpKSB7XG5cdFx0XHRpZiAoZW50cnkuaXNJbnRlcnNlY3RpbmcgPT09IHRydWUpIHtcblx0XHRcdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwicmVsb2FkXCIpID09PSBcIm9uc2hvd1wiKSB7XG5cdFx0XHRcdFx0b2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRsb2FkQ29udGVudC5jYWxsKHRoaXMpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS50b1N0cmluZygpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHRjb25zdCBvYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihjYWxsYmFjaywgb3B0aW9ucyk7XG5cdG9ic2VydmVyLm9ic2VydmUodGhpcyk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBtaXNzaW5nIGRlZmF1bHQgc2xvdFxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSBtaXNzaW5nIHVybFxuICogQHRocm93cyB7RXJyb3J9IHdlIHdvbid0IGJlIGFibGUgdG8gcmVhZCB0aGUgZGF0YVxuICogQHRocm93cyB7RXJyb3J9IHJlcXVlc3QgZmFpbGVkXG4gKiBAdGhyb3dzIHtFcnJvcn0gbm90IGZvdW5kXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5kZWZpbmVkIHN0YXR1cyBvciB0eXBlXG4gKiBAdGhyb3dzIHtFcnJvcn0gY2xpZW50IGVycm9yXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5kZWZpbmVkIHN0YXR1cyBvciB0eXBlXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZlxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqIEBmaXJlcyBtb25zdGVyLWZldGNoZWRcbiAqL1xuZnVuY3Rpb24gbG9hZENvbnRlbnQoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdGNvbnN0IHVybCA9IHRoaXMuZ2V0T3B0aW9uKFwidXJsXCIsIHVuZGVmaW5lZCk7XG5cdGlmICghaXNTdHJpbmcodXJsKSB8fCB1cmwgPT09IFwiXCIpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nIHVybFwiKTtcblx0fVxuXG5cdGNvbnN0IG9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbihcImZldGNoXCIsIHt9KTtcblxuXHRjb25zdCBkZWZhdWx0U2xvdCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFwic2xvdFtuYW1lPWRlZmF1bHRdXCIpO1xuXHRpZiAoIShkZWZhdWx0U2xvdCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm1pc3NpbmcgZGVmYXVsdCBzbG90XCIpO1xuXHR9XG5cblx0ZGVmYXVsdFNsb3Quc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcblxuXHRsZXQgY29udGFpbmVyID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1jb250YWluZXJdYCxcblx0KTtcblx0aWYgKCEoY29udGFpbmVyIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0Y29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0XHRjb250YWluZXIuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuXHRcdGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUsIFwiY29udGFpbmVyXCIpO1xuXHRcdHRoaXMuc2hhZG93Um9vdC5hcHBlbmRDaGlsZChjb250YWluZXIpO1xuXHR9XG5cblx0bG9hZEFuZEFzc2lnbkNvbnRlbnQoY29udGFpbmVyLCB1cmwsIG9wdGlvbnMpXG5cdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0ZGVmYXVsdFNsb3Quc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuXHRcdFx0cnVuUHJvY2Vzc29ycy5jYWxsKHRoaXMpO1xuXHRcdH0pXG5cdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHR0aHJvdyBlO1xuXHRcdH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtydW5Qcm9jZXNzb3JzfVxuICovXG5mdW5jdGlvbiBydW5Qcm9jZXNzb3JzKCkge1xuXHRjb25zdCBwcm9jZXNzb3JzID0gdGhpcy5nZXRPcHRpb24oXCJwcm9jZXNzb3JzXCIpO1xuXHRpZiAoIWlzQXJyYXkocHJvY2Vzc29ycykpIHJldHVybjtcblxuXHRmb3IgKGNvbnN0IFssIHByb2Nlc3Nvcl0gb2YgcHJvY2Vzc29ycy5lbnRyaWVzKCkpIHtcblx0XHRjb25zdCBzb3VyY2UgPSBwcm9jZXNzb3I/LnNvdXJjZTtcblx0XHRjb25zdCBkZXN0aW5hdGlvbiA9IHByb2Nlc3Nvcj8uZGVzdGluYXRpb247XG5cblx0XHRpZiAoaXNTdHJpbmcoc291cmNlKSAmJiBpc1N0cmluZyhkZXN0aW5hdGlvbikpIHtcblx0XHRcdGNvbnN0IHNvdXJjZU5vZGUgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihzb3VyY2UpO1xuXHRcdFx0Y29uc3QgZGVzdGluYXRpb25Ob2RlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihkZXN0aW5hdGlvbik7XG5cblx0XHRcdGlmIChcblx0XHRcdFx0c291cmNlTm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmXG5cdFx0XHRcdGRlc3RpbmF0aW9uTm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50XG5cdFx0XHQpIHtcblx0XHRcdFx0ZGVzdGluYXRpb25Ob2RlLmlubmVySFRNTCA9IHNvdXJjZU5vZGUuY2xvbmVOb2RlKHRydWUpLmlubmVySFRNTDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuICAgICAgICA8c2xvdCBuYW1lPVwiZGVmYXVsdFwiPjwvc2xvdD5cbiAgICBgO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoVGVtcGxhdGUpO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywgMjAyNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IEhvc3RTdHlsZVNoZWV0IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBIb3N0U3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG5cdEhvc3RTdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIGhvc3QgeyBcbi5ibG9ja3tkaXNwbGF5OmJsb2NrfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uZ3JpZHtkaXNwbGF5OmdyaWR9LmlubGluZS1ncmlke2Rpc3BsYXk6aW5saW5lLWdyaWR9LmZsZXh7ZGlzcGxheTpmbGV4fS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS5oaWRkZW4sLmhpZGUsLm5vbmV7ZGlzcGxheTpub25lfS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufTp3aGVyZShodG1sKXtsaW5lLWhlaWdodDoxLjE1Oy13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlOy1tb3otdGV4dC1zaXplLWFkanVzdDoxMDAlO3RleHQtc2l6ZS1hZGp1c3Q6MTAwJX06d2hlcmUoaDEpe2ZvbnQtc2l6ZToyZW07bWFyZ2luLWJsb2NrLWVuZDouNjdlbTttYXJnaW4tYmxvY2stc3RhcnQ6LjY3ZW19OndoZXJlKGRsLG9sLHVsKSA6d2hlcmUoZGwsb2wsdWwpe21hcmdpbi1ibG9jay1lbmQ6MDttYXJnaW4tYmxvY2stc3RhcnQ6MH06d2hlcmUoaHIpe2JveC1zaXppbmc6Y29udGVudC1ib3g7Y29sb3I6aW5oZXJpdDtoZWlnaHQ6MH06d2hlcmUoYWJiclt0aXRsZV0pe3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7LXdlYmtpdC10ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZH06d2hlcmUoYixzdHJvbmcpe2ZvbnQtd2VpZ2h0OmJvbGRlcn06d2hlcmUoY29kZSxrYmQscHJlLHNhbXApe2ZvbnQtZmFtaWx5Om1vbm9zcGFjZSxtb25vc3BhY2U7Zm9udC1zaXplOjFlbX06d2hlcmUoc21hbGwpe2ZvbnQtc2l6ZTo4MCV9OndoZXJlKHRhYmxlKXtib3JkZXItY29sb3I6Y3VycmVudENvbG9yO3RleHQtaW5kZW50OjB9OndoZXJlKGJ1dHRvbixpbnB1dCxzZWxlY3Qpe21hcmdpbjowfTp3aGVyZShidXR0b24pe3RleHQtdHJhbnNmb3JtOm5vbmV9OndoZXJlKGJ1dHRvbixpbnB1dDppcyhbdHlwZT1idXR0b24gaV0sW3R5cGU9cmVzZXQgaV0sW3R5cGU9c3VibWl0IGldKSl7LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbn06d2hlcmUocHJvZ3Jlc3Mpe3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfTp3aGVyZShzZWxlY3Qpe3RleHQtdHJhbnNmb3JtOm5vbmV9OndoZXJlKHRleHRhcmVhKXttYXJnaW46MH06d2hlcmUoaW5wdXRbdHlwZT1zZWFyY2ggaV0pey13ZWJraXQtYXBwZWFyYW5jZTp0ZXh0ZmllbGQ7b3V0bGluZS1vZmZzZXQ6LTJweH06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfTo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjppbmhlcml0O29wYWNpdHk6LjU0fTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b247Zm9udDppbmhlcml0fTp3aGVyZShidXR0b24saW5wdXQ6aXMoW3R5cGU9YnV0dG9uIGldLFt0eXBlPWNvbG9yIGldLFt0eXBlPXJlc2V0IGldLFt0eXBlPXN1Ym1pdCBpXSkpOjotbW96LWZvY3VzLWlubmVye2JvcmRlci1zdHlsZTpub25lO3BhZGRpbmc6MH06d2hlcmUoYnV0dG9uLGlucHV0OmlzKFt0eXBlPWJ1dHRvbiBpXSxbdHlwZT1jb2xvciBpXSxbdHlwZT1yZXNldCBpXSxbdHlwZT1zdWJtaXQgaV0pKTo6LW1vei1mb2N1c3Jpbmd7b3V0bGluZToxcHggZG90dGVkIEJ1dHRvblRleHR9OndoZXJlKDotbW96LXVpLWludmFsaWQpe2JveC1zaGFkb3c6bm9uZX06d2hlcmUoZGlhbG9nKXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOnNvbGlkO2NvbG9yOiMwMDA7aGVpZ2h0Oi1tb3otZml0LWNvbnRlbnQ7aGVpZ2h0OmZpdC1jb250ZW50O2xlZnQ6MDttYXJnaW46YXV0bztwYWRkaW5nOjFlbTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3dpZHRoOi1tb3otZml0LWNvbnRlbnQ7d2lkdGg6Zml0LWNvbnRlbnR9OndoZXJlKGRpYWxvZzpub3QoW29wZW5dKSl7ZGlzcGxheTpub25lfTp3aGVyZShzdW1tYXJ5KXtkaXNwbGF5Omxpc3QtaXRlbX1odG1se2hlaWdodDoxMDAlfWJvZHksaHRtbHttaW4taGVpZ2h0OmNhbGMoMTAwdmggLSA0MHB4KX1ib2R5e2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXJnaW46MDtwYWRkaW5nOjA7d29yZC1icmVhazpicmVhay13b3JkfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMiwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0zLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItMHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXdpZHRoOjB9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMSwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0zLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX1pbnB1dCxtZXRlcixwcm9ncmVzcyxzZWxlY3QsdGV4dGFyZWF7YWNjZW50LWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItd2lkdGgpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6MTAwJTttYXJnaW46MDtvdXRsaW5lOm5vbmV9aW5wdXQsc2VsZWN0LHRleHRhcmVhe2hlaWdodDotbW96LWZpdC1jb250ZW50O2hlaWdodDpmaXQtY29udGVudDtwYWRkaW5nOi40cmVtIC42cmVtfXRleHRhcmVhe21pbi1oZWlnaHQ6NnJlbTtyZXNpemU6dmVydGljYWx9aW5wdXRbdHlwZT1jb2xvcl17aGVpZ2h0OjJyZW07bWFyZ2luOjA7cGFkZGluZzouMXJlbTt3aWR0aDoycmVtfWlucHV0OmhvdmVyOm5vdChbdHlwZT1yYWRpb10pOm5vdChbdHlwZT1jaGVja2JveF0pOm5vdChbdHlwZT1yYW5nZV0pLHNlbGVjdDpob3Zlcix0ZXh0YXJlYTpob3Zlcntib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0yKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjhzLGNvbG9yIC4yNXMgLjA4MzMzMzMzMzNzfWlucHV0OmZvY3VzLHNlbGVjdDpmb2N1cyx0ZXh0YXJlYTpmb2N1c3tvdXRsaW5lOjFweCBkYXNoZWQgdmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyk7b3V0bGluZS1vZmZzZXQ6M3B4fUBmb250LWZhY2V7Zm9udC1kaXNwbGF5OnN3YXA7Zm9udC1mYW1pbHk6UmFsZXdheTtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDozMDA7c3JjOnVybChkYXRhOmFwcGxpY2F0aW9uL3gtZm9udC13b2ZmMjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxkMDlHTWdBQkFBQUFBRko0QUJJQUFBQUF0M0FBQUZJUUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR29FOEcrNDZISVU4Qm1BL1UxUkJWRVFBaFFnSWdRb0pueFFSQ0FxQnVneUJtbkFMaENJQUFUWUNKQU9JUUFRZ0JZVVVCeUFNZ3h3YmZhUVhhSmVmbU56MFpvbDN2NjBjUGVaTXBHNEhKU2prNXFJSU5nNkNHTWdsWmYvL24zRjBqT0dHRFJBMXJYZUluY0pJVWtOSEduNjlxTVJEVThaYWpqczlVYnNtdG5xbkUzdjN2cWlRbWZSUXBMa0tXNlFad2FsNnM1SVVpSk5VU1VHL093b0RZNkI2NzVPalNqa0RTU011MnBlZHB1OXZKSUxVbEpkNzA3RCtlTEhwallESTRlMXVEbkxqSEh2eHBEWEdNeWR1TExuMXF0MEZDUU95RnNKWkUxK2tKcTNUK0llN0JKRklOT0FOYmk5dlRVemhJN1c0R21VTDBsV2pUL0ZRUWkvbSsreHVQUDAyb21SSGU1cG40RGdmTlpmbitSOXo5Nzl0bUVlTmFxMVJ4UnFIVGpUUE5BMkpGRWdySGRvL250L1cvNXpiZ0dDeGlhNkVrVmlBMkZoWUdJdFJtRTFadlZVdnF0U3RiN012cmQzVzcrdDIrMFhkb1RuenpqWWJwN21TSExBQ2toTVdnQ1RMNnMwV3YwQVVvaEpmRXFFM29wUGQ1OGlrSm5LbG8rM3VhZVNIWUo2ZmNJY1hqZCtyS1VFc2FFbFRxbFVsVlJtL04rZS84aVAwTDVBS296TmxKMy85aUJ3c2hNNnY1SklVSnlrZ1QzZmRyT21xNkxjcytaK3EvWHNBWEZ4RUVpUUlVYUtvc0ZuN2N0VCs3QkJTNWRxRG9sSlh1bmJsN3J0dHpEL3YzODRMZnRKYWdGRkFMWVBFNUE3Z25NclpCaHQ0bFhxc2JaS21iZHEwVHRPbXBtZ05pdWdNMlBZQmM3M01yanE3R0xzb1hIY1RwdDl1UHZGRHo4ZU4zZytzeHJQUUF3NkRURk5wL09aSTlpaW5OaXRaaFJtcFFPQ2tkb0JkQU5qVldsYXZNaXR3RE5KWC9wWUlBa1Z3bk9QL3ZXNXh6b013N1NBRkFLVStaei9rblAvWjlqK09kZnJMOEtlMnZkS2JtcGh1eEpTdUw4RVVBZ2dISWlCSFArNDQ0RUR6djFQVFEzWWtPY09TbFRIbWo2VXNkZm8yTCsvanBZZTdJSFdjUVVnY2drcExGUjFZVFc4Q0dLUVg5YjhHRkFBQUg5dG80UkhRNkdMdkZScmk0RGl3VHpBQURETUtEUHIvZlozVi9xZGdQbWtHektURW1XRVhiN1EzdHRnVFlxbzJuUDYvKzk3WGYrRi85SkhBVnNJSWNBQ0Jad1J5a0dUN2dDUjhWb2hKY1VPT1NEamlTYkFwaE1vem0ySlJwdEJ0VVc2OVhiTkZHM0lWeTJLTG9rNDgvTGZzbTUyN0lhcUJMTXVCYk9GSXdlRlVkMDF2ZUwrWTh4V2h0emNxVG0yQ0lUYzVlTEp3U0k0ZllsTFlGSVZIQXMvL1Q1M040L1l4MWhLR1UrSFNxRXJkcFBQbnM2ZnFxV0pzTmJaYUNsUXRqbE9MVU1zaGNkb0E1VFFzczRKTGM5MFN4Q09NTVVLNEtQOU5zaHB6cFg0dnd4S0NoQ0FTUkVSRS9MS3NXUmxKd05LQWNUblhBaEV5M3IxS0hjWmEvWWRYNTg0MjAvaWFYbXRHaG9DQWlJaUFSMjN2L1A5K0tUQUNBTjVoZGtDM3hVQzRFTHNnZ3ZrUjJrckVqWVNFdjBCS1NtSENoSXZZT0NBSmtLUWd5WU1NMlFvVU16Q28xNkJKODVxQVdDQ2RIZWszQUIwT0RMMUxxMFBnVGUzaFN3MmZoaTRYaFB1ZXVRV0VINnh0SUVRQWJHMk5tNW9WNTRRRlAreUtnTzJENFQ1dC93ejJYVzkyL3JwcXBMVFNJUDhxVjl2THZPZHMwTkxXeVg1MUs2b2ZidlBaRTFwYWY3dzMxOEM5WnRocTdmMzJiZnVMNjRWWkh3NTE0WXNtNWxnZk5iZkc3Vzlsc1VBNEVHejcyM3Z4d0d6cDRmUlIrbVA4THM1QjdLQjJlREpYYzZ4d2xHNjkwMnVnN0F6TEE4TlkyMUIyZEIvUDVxZk9WOHQxb255TDVqWkREZlFJNVJnOEQ5OEZ2SHN2Y2xIdUpzcmR2c0pycGMvVHIvZ3UvRWZaSnpYVXpwV2FEajdNNytVUDgvOEVrQUFWYUFTL0NSK1hzL0pONFlhSWNPMXhIWmNVYU1NYmtscnBLeTdOZlFKS1FjVVJhZ29HbUNXK0hBNkVOdmJnMzNzbDJwSVlSbUU5YklIYjBtQTZrazZsTjVHZHlNTjVFYm1RaHhIS2x3TWdUNThjZ3c3cGRVUno3bmZNY1FmY1UzdkljelZrZHJoWDhYSHE0MDEydEZPZDdrVC9hN3A3bTgzV0E3MUY3YU85TStkanZkZDZqN2Z4bStEMVB1M3ozdWlydm11eXphNTN0cnY5M2xUYjgyUlQyS2FGVlVLTU5QMzZCdlFNQ28wR3NFZGtMOHMrekxnMUV4Yk0wTmdDV0F4Z3pmODJERzFLWE1mYzRyak5jUWZIS3hTQ3VSdUJJNUFvZERERGtHZFY4Q25WVkVtRU1haW40U2EwQVhUSTBSQk5wT1lBTFZxMWFWOXZ4SmlVekhLV0NpczZtcDBCdWt4MDY5R3I3NHNuVk5ic29DbWtWTW9wNStwREdhV3oyc0xEcjJpTnQrb1pPMGIzNllTSWpXY3h2bmxOMHgwVmhsWW9XNFVSalhYS3lMRzNZM3FvTGRFYXpIQUVFb1Z1TWwzRERlRVJWcEcvamVURVIwQ1VaRVUxbW90cUZvaXdKRktVYURGaWFjU2xCSnJFalNRS0ovQ1NGU21TS2sxNjFRbGtkS2V5U1hZenNkWEtpNkk5aWtOSk10Q1VLbE91UXFVcTFWSFQxenE2K2x6ZlFOQUlhNUpwUm92V2FFUDdaeHVObVRqTUxCWXVxM1hVVGdOZFJEZDZVcTlBMzNjYnhBenhERE9OMEl4YU5WYXhkLy9zL2FqeEFFNkpuUGJGR1prdUMzdWFOVThFc0RTTFpWbXhPajFQZDhIUXhYU3BlZGtYYXdiVzZ3Wm84KzZEcml1UUZGdzVJcHZuSmg2L1pnRkpLOTMwYUVNMlhKM3lKQjBESG9waGJxZzB1cmt2TUlnWWx0YkdSUGNka2Q3VmovTlY0cGJBYmErL0U0QmpDZzlwNVplcmkvcGRNMENHLzd0WFpOeFZFKzZiWWF2UW42dW1Xd3kzRlhmNmdnK1huQXRIRGdqa1BOaVVicXBvd3ZEVXZiUmxjajVYWkhZelY4Smk0TmwxdmpzT2hyTWF4T0h4ZUR3ZWp6L1ZJSEpYbjZIMHdoZzZxRk9FVXFRbzBXTEUwb2hMQ1RLSjB5UTVMVTl5UlFwU3BVbGZabkFTQmtXcGxDbFhvVktWNnFpYlRCdE1tUUtZWVdIVlVVZnRHSXQ2Mmxkbk1IM0VwaVUwcVZRcUhiQ0x4T1UrRTQvMVhMZkJFaHpLaGdVY2dVU2hmeHdtRHo5RzVFUkFBSEw3RkhSS1F5cm53dXhRZjVyaEhCRUJSSW9TTFVZc3pVYmM0cnRNZHBsMjZGZ2Q1NXRnUUc4eC9mQVoySnpJdkdibWxyY1hBbTN3WEthN0VsZlBjUzJ0eGZxK2VnZmlIR29ETXh5QlJLSHZ5M1NKMzBRNlY4KzZtZGZac2FGVjNlT1VLc1dNeW5raHlMMXU0VkkwTDFTSkxJeFh5WXpwTHlOcWlXejBYVHBrYVR5bjFaRHRpOTBtWTAydjB0VXF0elNDbCtxcks3ckl1djF2OVJEMHNneHFHYkpvR0dmRWtsRTFZenIyOE8xbDJLZXdYOU40QURhTjFiN0wwSWFSVFhPdXk5eWl1ODJwT3dIUUJDK3BsZENyT21LME1nL3IxdlJZRW0zREJFY2dVZWdtVXgwM0c0K3dpdFFnT2ZFUkVDVlpVWTNtNHRtRUl2d1VLVXEwR0xFMDRsSUNUdUkweVRxdEZjbEVDbEtsU2E4NldFWjNKSnZzRldpN0l4S0pPQndPaDhQaGNFVHJSTjN0RHBsTUpwTmhSSWFpcUFpR1lSZ21jYmtzeTROb3ovcm9mUUw3S2NhbE5EMEZPVzNSR1p1T0JSMnhtVk14a1Vna0RsMFg3dUppdXRTOGJOR2FFK3YvWlFPd3FlODZHSUllRXNDdW92V1lmQ3EydHZwTU9CTjdNek82OEdXWExodG1nVzJmZmVIcDFNdTdxd1g1TkR3VGtwQ1NjZWZCa3hkdmZpbkFSSVJJVWFMRmlLVVJseElBaVpFMHJWcTY1SW9VU1pVbXZlcVVNcnBzL3oxWldFWjVZQmdHQUFBQUFBQ0EwV1pzZDFDcCtIdytuMi9jT2xrNHJEcFNsMUszSHIzNmpnMUNUdHd6T2NOdUNYWU5naURZaG90SDFvZ09MUlN1eDhuaWw0cjJpWWF2MG5vcnpYdloyblpqWkxmYUtEK1ZSZ0gvZmdObXBrRmJoZ2lHaVVhY0dmWE5tSzQ5RlB2WTl0dmJjVG03NSszZmRhbVc2WVN0d2tkemFDSFpjdnEwQ1M0aVU1Wm1OeExYR0JlL3JRb0hqTVAxL1FFR1ZNWkZKZ2JEREovNVQzZXlCY3ZHUFNxVGltSmNDK1lRVWpxR3YybkM3cTNuQjBET3F2MkczVnZsSWhLSVc4TVJTQlM2eVpUaU5HRlgrUkdDREhzOFBZSWRUamRBVUF5dlFrd1NDcHBoTmQyMG1wdU1qUVhLQlFrV0lqUXBtSlJVS1l4S1hjTERjNmtJZkhhVEthT01TYzRNc1ZSWVEwZXpVNkZMcFZ1UDN0TEh1d3ByWWZ0aGl3aUhGQVdrU3BtV1J0KzZuSjZVMThDdXlKODVqMngwYjBkN045cGlicTBsYjROblUrcE83dEVVTGloZFVPMmhycHRnWVhDc3hCRkEzbFEybm1GYzNGYlJqR0JnQ2Q2QlVIN3FuWEJiYWNqc0s5OVJmSURNQUZrQnNvTytuWmc4UDBCQmdNSUF0UUVhbjlXUUVzOU1BSE5HODU1NHdhK0FybnF2VFRqcEdTN2UvaWxQbWpBUlBtbnN4V2tkQUFSeU9MOXlBaHlteDdTR0tsazdHaDQ4dkR2TmZkZytJVEJacEQ5Z3pnTUlCd3dCazV0bWtFWElxcU1NYUVUZy9IVWUyNm9MVFRwNHc0ZzlVa1o1YmdieEVIdEN5VExZUEhtSlVxM3VKcHF6dlNOY3VtYkJkWFlRc2t1MUM5Mk44alR2REZFVTBydjgxN2dtcXNHalBmUnVOanZlclREbUhDRTRxK3Fiek9qdUlJdlJhRGh6WjEvVkpVcGhoaU9RS0hRd3NaNVRqZ3VBQjhDdUtyK1lJTUtld0lvTU81eHg5ZTRBRUJURFNZcG0yT1R5OG9Jb3lZb2FqZWpVUWI4SndEL1hCNWlTc3dVaWdoQXNSR2hTMENnekp6WE1DVFUxWEVaSGFUQVhUQ1FTaWNYYlk0VkNvUmdMRXhzdGxkQ3R4WjFhVW5sdXRHaHRPUXQxOC9SVWRWcGtEQnZiUzRuRW9ORm9OQnFORmlkWG4wV0pMSkNyVThDVWJxcU1oWkdwbStGOEViQklVYUxGaUtVUmx4S0VFaVZWTFZOeVJncFNwVW12dWdBWmhBR2x5cFNyVUtsS3RicG1BNndyUUxjZXZmcWFFN0RUV3M2WUhtMEUyZGNsaVdXc1dFM25tUzdHNWI2dUdWblBuTnV5eVdiSHd4RGpwV2s2TStqMjBlWU1MUS8wM1ZNbUttNFpuZ2xKU01tNDgrREppemUvS3JkQ2tWTWxLc3lJbW1lWmYwR1F5d0pCRUZ4Qy9yZ2dDSUlnQ0lJejkwYkRFd01UajhmakFVQXhkUzZWc0RjczFnOHdmWUNYck5kOThTSDhnYWprNXZ1VVBxZzRYRFA5Sm03b0dXdkdYeFNkRUxMZnJzRVNFc21XWFRjTTNjTHRIRlNHYlNIQkFqY0NpVUlYSnFIbk1sT0xSQkxhc25VSzJTdXgxenFuTUIvWk1HT3gvelB1OG9oREFEQUFPQUFDQUFtQUFrQURZSGdsQ2tDdUxWQWlTSUtGQ1Awa2hXTktQRlV3YmR5TCtzREJ5ZWdrYUoyV0VNdFdyRTYvNHZwVzdHNmU0bUR3MEJmeFpoRnQ5R3ZmaFBFQW15ZDRjTXRVcXNQbDRheTdHdWFrNXQwTjUyT093SmFCZ1NOSHNrMk5oN3FFV1pZVnE4ZStrc3hqajNFS1NYZzhMTmlsUXFGUXpFMWZ2NXR2cFFRRnRGSW15THRpdlRlV2tRQ2s1WlJlMlFpSjJackxZRFY4Nk1CWVdYNXhBUHVuazF5bnRaMng2YWJOcmlYQXNoV3JjZmtVNjN5L2ovbStnbnpOOEkzWXR4emZDZU9pQVBpN1loMXdCQktGenM3MldybGlmV2IzbitzT21rU2l6WEhUWHBtdkFuT2dlYSs3UzhGMUVIUDhuVTRJbkZZNFE1bVdwM0JBTGxlc2E3Qno0RnVPYkU0RVhSbml5azhodENPaWs4dmxjc1dZSUtyNC9jSE0zWFhJY2N5T0RzQlhIOVIzTklCalVzZDFmaWRqMGlpbkg1cmlaZlVPRFRpRlF1bHplYXg3K2pIWlZ5eGYzOFUzeExkcitVN3U0M0g1OUtlZ0s5NUp2d3Z5cW4zSWd4THlVRzJZNFFna0N2MUJURCtJdkNNUE1nMGxWWVJCblNJUWthSkVpeEZMSXk0bENDVDJobTBzRUFnRUpURHJxYjRnSjJKWW96U1VLVmVoVXBYcWJOclorWmhlamIrNXJIckd6Y2NMUWhKU011NDhlUExpemEvS3pRbk1DRUt3RUtGSllZR3lOeUsxbHRKVS9KNldtRnhVcUxzSW5YU3MzNHM0QUpuVE5QOUpWODFaVzA4YndveHdqTW9HZysxZ1BQeHdBTWVaa0JFRStWc3Vwc3hvOWNXUzVpdm5hU1VwRkpRMVRFYnRleUtqTUFMbFNRaDZSSzNnQ0NRSzNlUVU0amJFQzd1cS9BeUNESHVDQlFUc2NNYlZ1d01VQkJURFE5eVFGTTJ3eVJueUVTeEtzcUpHVTNSaUVEUFhMOURaNUY0SXBBdVNZQ0ZDazhJR1pWTUZDZE9rTHVFMUlLVkZsR2d4WW1uRU5lTkJDVlNKa25KRWorU01GRW1WSnIzcW1ES0l6R2xrU2JiZDlITGsxZngrM2UrVkNwbUtvaGdseVVCVnFreTVDcFdxVktjYVVHM1VsZnBva01iYXhOQXNMVnExYVU5R0lsT2Z2SmxNcHBqSlpESmJSanRhTldrL3J6V29NSUlhTldlc2F1dDAzeU1PMlB4SUk2TUJFOTFxZm9EeXhDU3dnQ09RS0hTVDZRVnVEaDVoRlhscHRyZ01qeUJLc3FJYUwxN0djZGtBNThBOGdDWS8zMlBMYndrbkNRQkFObXRDdzZOb0JyVklxemJ0T1VzV1U0MDVsQ3daMXREeDVwMW83VEVkSkJnU0dMNzc3QkVqbzk0YW85b2p0SzlidjUvaEFNOFJhNDZTamdtZGVMek5ETWhpVUhudTdRbUREQlorSVVGaVRjSm9IY2xJa1NwTittWkdjVGNINUljQnBjcVVSMFdvVktVNjZxWjN1c2VnRjNtbitiRmxyaXE5Qm1tblY3UGI3RzBSdENhc093S1FaRWdoNDg2REp5L2UvSjZKcnoycnZ6MTE4UGs4UHAvUDV5LzlOUEppcjlnSnd5bEtyVXk1Q3BXcVZFZmRWRk50aHJXZ1ZadjJaSVNZZXJlQm9KZEhLZWFlZzBKN1VCZXFSOFNPMWFuM3BGQU1LTHdJdFZTSisrRm1uaUhFc0ZFUVcrcGVrb001SHFmNTBseEJMTHY5ekNNQVpUUFExN245WDVrSEZYN2M2UTJKdmIrS1NJc1NMVVlzamJobXZKRUVXeExISkRYTVNLNUlrVlJwMHF1T0lLT0x6R2xrU2JiZDlITGt5VmVnTUJXNVVLd2tHV3dwVmFaY2hVcFZxcU9tajlwNXFsTlQzLy8xeHNpQVJDS1JTQUJBQlFEQWdFQWdFRjRrY0hQQTR5L2YybTdZR281QW90Q1ZTU0lhVGVWR0ZBQWx4MVJJWlJ2R2M1ajBKSWVvY3h6enBLdGNheWN4STFoU3lWKzYxL0dDd3V6QU1mUU13NkxUS2Q4b3NGQWNyTlZEUEllRnM2TEhGeGxOeXRpZURqYjhHT1FRYmhTSXRqMDJnSWc4T1ZiVWZnRi9HdGthQ3NNTVJ5QlI2RDU1bWNQakxiWWtJOEowd0p3WGYvTTFubzlkalRWZFdocGlENE1qa0NqMEdZWTZrWTFONVE0RUtnVWhXSWpRcE5DamJLb1NDTk9pWG9aYlZGOS96c0xkR1lHZ1ZiTXp3Snd6OCttcVUyc2pZMUJyY2psM2ZHL3NmejZxN29nMlkzNHZmcGRVaGUvQ1oySEg4eUFBL3hROEQzbXlBSUROQVZzQ0FKYlpueGkyY0g1czJjUkp3VmFPbTJXV3N0UEdaeFlaQTFLSVI3bXQzQXpBbXRrRlVJNWlsRGNBbTJRd29qRlhCNnIzSXNCeVZxNWwrdE5hYmN0ckYrUXJBUStsa2lVV3ppSEdLV2M1dTFGVWRNS01obnhpeG5BVTRsa2FBbm8vbmh1U2NFbkhyUTZRRWRvUjJGSVE0R0ZuWUhrZkJnSlR3Tmw0MnJRSDdkVjZJQkt4NEdESVBUU1BBdFlIY3VhL1V6ZVAxZXBaSk5hdE9BU3FGRVFrWUNXU2pLb21jdko0US9sWW1SNmJXaUVXV1ZJRkFOYUlUT1Z3MlpWSHpyNU16Qy8waS9EMWt3RVdWRC96VDliNkRHNjMyaUs0VXFDN1RQMlVOYm5rRVk4NjRYWWlLbFcrQlMzRlVLeEhEUVlvKzhCOXl6MXc0aDA3QmE0UWtrekwwTEdKR0lyclorY05YdUIzUHc2Y2VkcEFNVTZHelJRcURXN250QitjV2lzRnlvM1dDbVFqTDBNbVhvQnFOV1JGSVpJN2dEWGh0U2N0OExwQmZrSHNSUTZYcFZmSVJ2WkJVOHA4NUY0aEg4RUtueG1FWW11K0s2Y1lZM2dRZTErL1R6SkFJUkYxY0t2Tm1uMlEwTThhT1dzWGpUOWp2QkNyNTIxeHF0V1ZJNmFwTHBlaEtjeFp1VzlCV0xKM1FHcWY5SlRpdXZ2VTB3ZGdody84SUJSSVgxVnVOUXlzQnFTdFZOUFhaRHRMK05pdmN3aTFQZ0QvNU8wb3ltMkorNzhvbjByeGdBOU9DbGEwZ04wSkVQSFkvWVA0bmhJYXdiRUoySGxVblI5RGJ6ZldNUEF2eGtydEExNHg2anJBbVlVY2dSZlJsWm5uWXhzMnkrb3dMRHdrUzJWazNkZmpBQVVWSUpld0QwNnR6K0F1dzZwSXF4VGw0ZG1qb0dsWVFYRE1iMzFGSlBzKzY3ajlSTmdzSFlnd3dPY1l0dWZLNlZoQ0xNdWM0TkZUYnY5cEVRakZOak5yMExXQUpCM1hHSG00eDduQlJmWG1IUWhRMGJ6cW1PdFZUbnllUzZ4MUhiQy9hcmovWGUvN3FNT2w3TTBlVW5EUGdoeWlzRjhxSW9GYmhmRWdxeUQ0bzNvMks1UkxyTUpZQ2FDNWdySHd1cEROc1ZvWEZJMys5V1lQYTFsd3ZPcDkxZnZhbkdob21KaXA5N3VwTkhtT0greWIxK2hMSXBkZHIyMVJpQTEzSmliNzlrNnBUQjNkRkFvNzE0cFExeVJaYlRYTXlkQTdtUUU5UkZHaEwvT3hySGpkUm5vMFhkZjl5RWUwblhGZk9lcnpZK0RPM2ZpQldCRk1BbXFGYk9lZ2tBcVhUVm81ZlM2NnlPSVZsTENTZGNwNjh1ZTR5SmVsaFVQdFU2Vm0yam5OQVBxd1dhTm5udjF3N0pQNnhRWmF3U0lQbE9GTUVVR3V6UENCYjJkSlV5Z1k2UTl3cjZKVWpKcjZOWmNiRVl3TC9jeFpmZWM4MkxPc01LNDl4WDYyOFA4TnEzVERFY0lBUFp3d2hMdzU4aFBLazVKU29EQkpnaVRMRVN0UEE1MG03U3FZbU5TeDZGTnYwaVNqVTA0em1UYk5ZczRDcXpmSmZsbUMvWVpKZ05Cd0RBYUJpOGVCSFQ1SEFrNElRa0t1UkVSMmNlSENqU3RYWWhKZU1ONjhFZno0d2Zqekp4RWdnSlNjbkV5Z1VBd2xKWGRoMUp5RUMrY2hnZ1lwVGh4S3ZIaDJFaVJ5bGlTSnAyVHBLRG82VzJUSXNGV21URjZ5NUVEeTVFTUtGUEJXcUJCZmtSSUNCbFZvMWFwUmF0U3lVNmZPVnZYcStXalF3RmVUSm42YXRlTXdNZkZuMGNGZXAwNEJ1blRab2xzM3BFY1B2bDY5a0Q1OStDWk4ydWFVVTRST080MXIyalN1T2ZOMldyQkE2RTB5Wk1rTTRidzVod3NXbkM1YWNyaGt4ZW15Tlpzck50eXUydks0WnNkdHpaN0hPc3dHRXd1aGtSaU03VGc0RUM0ZW5CMW5pSkFRYm91ZEVCR1JIVnlJSVJMZWNENThJWDc4NFB6NVF3SUUyRWxPVHFRUlhIQVExNlU0aEM3Z2dDRUFnMFlBQndvS0RydUVsNitHcWJGTlBMV0dBeERBMisybVVTTk9pQmc3dDBTa1MzMW94ZU1ranJGbjJJSWpKempNU1VoT3Vra29FSlNpanlHZ3gySWEvOVpjMDNiK244K2dxa2dTMjhzNzU2Y2pVcDN6d1RyK1JQZTZTZXJsVWRUNWFldWdlL0FIZ0J6OUY0aW53RThxK0g0T3ZJVzM5RmJlV3J5L0JxTXZ2L0tTdXBpOUhrclZlZkc1WjRJYXZmanlXeStwNHNWWHloZVZUNW54SXEvemJ2YmpvcVhYMVplMGhqMEFZRk1RWnMyQmtBZ0ZJR0Z3eEhZTkI5WGRhbXdyM3M3L0NJZmdZWmlmaFQ5Z2ExMHl3dHpkWlkvaGNuZVRZYS9raXo4S0NCb3JoRlo0ZzFsWEJHR1dLQTc1MkVsSWQ5YUxLNFNGTmRWMzI5Ykc3UklJS1U0R0V2aGpyOExVMXdqQTIzczlCbWdiR2pROTdvVUt3cWlPdnlQWkVSSUNLSXpBNldUcFdRd1Y2b0psZTNWVGxqNVR5UEtPam00TmJ2T2cvVDlHVmZ4TkE5aEZoUURTdy9mUmpwQ0YyVzhPQTY4aUN5VCtmMkgvREc4QzZlK20xeC9JSTg3OU5BMzVyd0FBNjhRV0FZZ2xUVEFzWUFDRXFlTis2bXkzd1lvQTRGK2pOb1djTlM4T2lhalFRUDd5TUZhd0lqUVJnU1VNTEkwUTduMVJBWDZSRjhZS0lJSlVvWjN5Z0MrUTJRb3NDa3RPNWx1TUhHVWFFM2VMZThWajBocXBXQXBJRWFsT2FwRzZyZFcrN3FSQUZjQ2VZaWtBNEJQVHNMaC93VVdmT2J4OVI2VThxZkE0U0tuNWc3WUNYQVNRQ1FCWU4za0EvLzFOMWYvazZTLzBZLzFvQnI3NEdYeHgrMk5mMHUrLzdndnFDL0x6ejBFZjlPUkJxam4xUGdMb1pROGIrMVowYzhnTi9sLzJEV2ZObWZLcFgxMDM3ejJMeG4zbHRCWFRiRTVaOElQdmZHL0dKb1NEeTQ2QU14WTJEZ0VoRVRFSkdTVU1Ub1dncGtjeE1ESjcyNFIzL2VIMThTQ0NTNElreVhReVpNcVNyMENoSXNVTWF0U3AxNkJKTXlNVE00dE9iL25OVzM3eXZ2LzUyT2MrOFlYZi9Uc3UzTExNZVQ5YmRYdDJjTmV2WHZMeWFQakZEVStOZ1JjTnVPQjFyM25ETEJJR1J5TlFHRHhPeWptb1ZJT0xoNitVR0F3QWtvUDh3Sk9PaGhiSkJOVXZocFVOTFpxRFU2SjBLVktseWJPYlhnNnRFaFZLbGFsUzdsdVYyclZvMWNhcVZnZHZuYU1RQ2N1V1hISFY1Y2k0V1VRbVVtVTBNTUFtdGdRc0JTenRGM1JiQkJld0ZJQXc1bDQxaWpjYkJtUXA2eTNBRU50ODJkQWt3anhuejdQNzhWVVVEQi9WbXVBZCt4NTZjUCsrdlh2R1JrZUdoMVlzWDdaMHllakk4T0tiRnkxY01EUTRNSC9lM0RteisvdDZlN3E3T2p2YTIzS3RMZGxNT3BWc2JtcmNnV0EwN1BjZWZlVGhoN3FkZHF2WnVQK3VkRzIxbHNUQVArZno2ZHIxbW9wKzBMSjFURWdnUzZDdXZDNW95QWl1YjAxM1lQTUxiWXpUYk9EQVRYNVlFaVl5Y3BVNUlWY1BmSkRsSitvT3Vkc3ZMT1V5Q0hBMGVwU2hSZDRkdUg0S2dFcE1FT1daR2I1RUZjTWpWSmtCVUJVQlJaa0EyWktOUnNBTjErMTB4Szh0aTVMdnU5Q1FPY1p3eG9idFZKWVNOWVNGSTMvZXp3aUxKZFFFbFZBVnFiRmZWajdHRllLVXdpTDJNOWNTZGdObThMSGNzQUlsdjN0K3BUemlrZ2pTOExobnBSQTR5RHBiTzdCY2VraExJUnR5cnNvM2hPRmJpVTI5RmdtS1k1SjgyeFJkOHF5bHNGV2tFSC9iYW44bG5EdjNaeTVlNERWR2laM09RUkRCRDQ2NFhuV1Rtb0ZEUjUydVhKa3psZnlDUk4wakZVTGVxWlZMTlFFWG1WRWxEb3RaTk9maXpRNFJMYmkwSzNWZlFpdU9LT0VTTUZUdjEzVHZpNkNWeVU3V3hNbUtXM1VidERtbkkxN3lYM0hjbndqZ29mb1U0bWFTVWxMbklQb2Qwdzh5djY2b1dJTWRTaUdQVXYydGdtQTRFZGExMEZybnRRbS9lbHRoZnd1aEFIV0tzK0pzLzN6cXRUeFNmY1pkV3ZNQmtFa28yT1dkNWg4VnhrbDF3UTB0V3FmWHhqbmJYVHdEdzVvbVdaNXFkdkhJRGJLWXh5Zzk3MHBKdnpBejhuMzVPTFJrZlNiZERUcFpnTk05bFFKbTJpVTMvSDBuZ3h2SDI5ZEFlWTJRRFF2eFo0elNocFFiaEFqQm13VmJJN0Y3SXZKN2tpTjFGSkdXTnVBbjB6TUV5UmwwaDJOMTdKQ0tpZ0NQS2Z5OW5ITk90enduSXp3bWd1dlpaL1RNQmNRbEhBZnc1RXhIRHNYR3VGdVNlbzN5Q0puWlJiM1c3VWYzYU5aNzNFWUs3a09TbFZKc3dZWXlKQ3RjR00xR3JqOThjbkhoa0ZtdTdQZE93bjFXelIwaHhUblJVOGFCSm14cUg5d1FJSWMvZlVXQkhqOHFySVNqYk8yaFBXN2xSSWFvREpwS3A2V3JWSGIwb2w1TG5LTHlGajJUSGdteTk2QXBaNi9scTFpTlBZOHZ3REt6NWdzK0UvQ1pJQ1B3Y2FjcWNuUmlyMVJ6UHNuQ2dRVmFnNVVNcktHSjZ5NCt5UFlaSTd5aktUSktTVU40b1VUN0dUZGl4TzBEa2ZjVFVkbWthQnpxUGJpNVNpS2ZKYUpEREtZMVpsMTJ1MVJBT2t3U3A3ekhuNlFrYWlwTkxyNkUwcEhnbUlRME8zeEJuV1N5WTIwY3VIMnpXWXhOUTN3Mm1Gd1A4eGs1Y0tlRHNkVWFrS2xMSE5KRzhzNXh6eWhOdHRFQmlSRE5Rc2NDbDJ2MlpBbjFDaXR4TUVqTE13RzlwMWREdGRxaXdKVE5DZkxTcVJTMEF0VnVxUVBJc1FDUlpJbTh4NjZJTndwVENNSkMydllIck5NV013NVR4SjRWaTRIZ1JSb2tpZ0ZLUFRwbjQ1SllneHFoMGJvcWd1SFA2SWdrUVRLVlBwOUJtQ3R5U09KZDZieUUwbFExZG5rdGxjaUdVbXBRTzl0Qm42QUJSQnZZYmgvb1hhcG5DQzc1R0dJeGw4VytaWk9qb0hVaHU3TkMyNVVKb0xkb3ZDMVZvQWkyRkFYcCtNNE4xRHlBelVVamVTdjV3RzdaYmY5RWNUNmpNYnNKMUJwWS9KdG9sN04wanBRaGdMaGNZZlllVVoyQlhxR1VIODVROFJSdHoyZlFkbnpubGxCMThkQ0RNM0JNMFJWbUxYR1BGVlJqRWRRaExQOURpSnZwTnpvVUF2ZWc5WkFMZklqVFZiNGV0NXZQTTlBVVZDMTFKWUJNeUVwSm9MYXdIVnMzQTBDTkQwY2cyL3huWEpOK0lKVzRBS2YxR1NVYTNWQmN1TXJYbFVZVHVnWm9PelBmV0tSdWM4cVlNbWxPTUt3bDd4MGtLdHN3bGYyWlJzcmoxaGcyeXpxQmFQbEFhTWxrUkM3ekc0V2FIYzhBQnJseTBtRFZnUGhLZzYwS0lHc2xuMUZGUUdvQkhZMVRHdjlLZ0pwM1ZvbzNPQkl1QTQ4NW9yaDBjME5HMkxYNnlTQTlzR2NCYW4yUWhvYmduaUo2RmV0dUtTSFhMcDVlY04xRmkxbzNNZ01tS2R3MElyRmhqODFLaVVMRHZSSkRJNUtTVWxLQUZJS3hWekN1Z1V4WHBHZ1pmQWdQRUU5ME5lekt6cHh2SGJQVFZxMmRPYXE4NDJFTjl1eVR6SzJGWXQrV2RRWkRlNFViZUIxOHN3dmxRVUNpRnJiTCt5QzdXcWx6Wk9VYjJWcFlRWnUxbVBVa1QyWHk3MjZOajBncFVtb0VXSWVyL0ZKa2drZ2JBQUw0RGgvMGxvNUpEQk1DN2tnMER0elBvZ0YwSzdMV0xYUjA2UEVOMG9vSEgxbHVlSmtRRFBJV1U2TVpPNkxhMnNndW5GNTA4QzJsWUdaUGxjeDJYSjF0dVhGYnJlNTFDSVVXU2hiNGZvajZMZ0djbWxnK1VDaVNpeGNIOXJKNlRUSmRBQzI0QXBHYnNhNWhhL05JcitoOUllYVhJQ2ladThDNEpMeldUN2dLWVQ3NjM5K0FBakxscHBkWEFMYm10L3pjZFo4bmZJL3N3WE5iWmR3OW1SMVNPN0lmZ1pLQy80TUN3cEN3NXNEMWo0MHdJdWJkdHBCTmNzVkhtdVVQdmhha3N4TTlGOEJMa3NRMzZNL0JPSkFRdDhUQkJTVWJTb2p3SzMyRVliZVFyenVZR2E5bldGaE9LVGxRQnc5Q0ZqOWpURzRKM05nRHZldUFnMVVPaGI0S0FwOXBIZ2FNSktiMFNsb0w3RG9kSHNManB0WGhrdk9hYW9lMENIakRVNnRrS0NCNDJnWkp6UkRjUG8yeE5lSnJaRHhjWGVWM1YyOEp3azBISmhVMDhMdEdEUU1xS09QM1RHb0FJNlluYkVrUndEUmszTzRraTYxSW5xVDgxMnhLYmlpb0JNR0U1RExwTUtyaU9wb3ZGTHRiSWU5eHFNcS9TVFlzeTBaUUY1eWFaYXZwL2ErSDd1YkRucFNzaUJ3SkZhZ0JNaTd3VldjN1VIcWxtdzNmY0x2dm1uVlJTRllSUUVuZ3huSHZ1eDhRMUNWN0FJQXVBSURkQUgxQStMd2crZ0hnUDRDOVFMZ0JBTmFldk9Ud29xTUhVb05nbVZtRXlESTdMcnhMSERYWEVrN1pBTUk5ek9iR3lDR0RiazZHNVVnblRwUGMzK2paUU1qWUdVeXVOWGcrTS9UaWJJMmNCeGdKd2tiMGJnaTRmWmY1QUJDV1Q3QkRTTThZZVMvSjhubzRJc3hRWWs1MXdaS200NENqdzZwVGZRalhqVUx2OWVqUE9WS0ozUGhTMmlJZnVsQUs2c01MdXpZNU9uL2JIemhaRE4yR2FQaDQ2NlpMVVVaRW1XSjNYUkcrOEErdjVZT09sRklNUkZCNCtMald5dVN1U09lcDNxclBXck5Cb1J2R0RXYmdxY3U5NzE1a1h6MkJFTUZVWlhmaHZMOVVEL091bTY0d3o4MUlrc1NYdlp1SU9xY1lSQ3B0K0RVaWdzdUUzUTdidmc4ejlxRXpmOG1mZUhGbjU1c0pSVXVMWXhRM2ZNSFp1Tzd2aGs4TTA5MVF4TEJaMVNlMmlRTlYwZGpFdUNGVGJueWplYXFOV3REVU9icUplSnNCdW5JUTdQS1dxdkhQUEZ4RVhUTUtSamZBRGMrTTliNzVXaXRLZU4yVFR3UE1iMFBBOXEyRlVVR1NhTGhzbGpEQVVBTU1MZEtZUUhWamN3cGdZS293YVVRQzE2cnJoeEJEUlUvYVpnYkVvVXMrQTEwVHhrc25rU0xqWmF5eVJhK1BoS0tOakJUOExvU3FycUJHaXFHU1JpRjVUQkM3aDUzQ2lvZUY0V0ZNVjF6SzVqRFBvYmpIZ1A1YTlzQkREMWlPODRXY0w5NENvNUVkY0lrSGxOZkp0Zm1tQUV0K0FwMUphdHc3djVMeGJTVTNtZUtDV3MxM2NvZFFVWWxKVnYrOHRtdXJBR29FMW5wTWhaZXhUTG9QTDBrZzdVZXkyTUxFdXZNMHk0NUtsd0dsV3hBaG5IZk5qWmFXTmNNNnJKYk1pbWkwK3N6djlCQnFPdXRmUFZFakhqSWJOZDVwYWFObWJIM0ZMSnZpMXRsT3hOc290ZGlPd1Q5bmVQTzcrZVNHRkZUejBUYWQ5WWRtQS9wSjhxRmE1Z3NmYW9pc3c2MUFudDhPdmorMjQyV0szUlZyK2N5T0NHVFhUWjdacTN5SEpRTFIrcWZ1U2JnUGw0VW9Vbm5GTXFsdUg5QVA4UmlPMWthbHN4ZWVIWG5rdU5JZTkrNjA2emloMXM4T0s4NmVrTXI2cXNCczhydVVxNnhGSDBnVWZWc09ZYW4zV1N0QVJmN0Y1MHY2d2R1S2IwWXYyYnNwMnZDd1NxRmFNQXJySUx2WVYwcXgvVHM2Y0Q5L1Iwdm1iN3ErVWo0UUpESGZMd3FhMUwyWVNhS2U2b2NXWFQ2RWgrVnd1YVJ5SHNwTHRpVU1lZnBKUlVZSXZkT3A1WUYrL01oZ0JCMnBmd0dqa0tjY2Yrd1NJK0JWek9YTEdnMWN4VzREVmY5SE9hYUhpU3MwL1IzZGZTaThoZEZ4WWg3TXdsRi9qeWh3RGFnRi9DZTJ6MGh3d0Y0WDVKYkRzRkp1QXdNME5xdGpzR01EQ1Y2R0sxOWhqVUFEYlJON3lHZGhPaDh1d0hMMzBHenF5bG1jdjdhSWc3UW9selBuTHdyYmpjTnYzNlhLYUZaejRpOFBWSGhlUTNvUXBhcUxKREkzU0RrRVhMSE1DSlRaYVBLeWZRVFVXcjg2cUhjVzZaVGU1b003dmF0TkRYa0ZsY2tVUDZHU1VRaFZXaXRGMlc3MTlmUE9aSGU3ZzhXcjdGbTI0eThoSGtUbVJnVjd2alBSWFBxNGREODBhMGFaZzQzZkJWNXRXdnZJNkFCWU9nZkd1dGk4aS9rcXhRdUxFR29HMW81ZlRtbTZuc1dacmRsdUUyYnIwTGdrZFNoN0YxTVM1cEQwRFpEdzhVaXRXS0ZtdXN4MkgyMXhEL2JtN3h4czhPSDFsaVlKU1Z3NFl1andoeFMzMEJ3MjVCN2FDYkd0Z0haVUxJbTZ1ZWF0eGV5cHJWa3ErbEZuQm1SVkFkMm9VVDVDVjZQTGtYWDRrYUtiZGdUbUZoamVzby9LakM4SW1sZ2JMeXJHSzM4UzdKanF0MUU1YUNNaVhvd2ErVVBneTNiSjU2ZG9ISWd4UFBnYndKcmRXdGxPR0o3TUNOKzA1aTZWN1VtamlqaFNtSS9lb2RYakkyV3hRSGphbWZWT1NQeW5XRHQ1OGJveTh5dkxONHE5M0pocEw1cFdCblJHNmxhYTFwRVY1bS91SUFwUk43UlhuVGpJcm1uQTJzSGtacEdjRzZ5czZaZVdYejZkOG5UVGZ0WmhRT2JhQlhtTFZNVnFaa2dOREZnRGk2WGxUWW05Y1UyV1lqcHpTU0ZBU0J0cXFzU29saVVQS1VmYkFEMStwaWJXWjV5YVl6aS9mbVdzSFJYaWNqLzlOcDBaemZpWnRKMzExMWVkZ2ZBdFg4VyttbXYyNTFkZkV3RkF0cUc4dHoyeUR6TGlEdHZhYmVyVytKcU5iaEN4dFNnck02cTRzbFRKUzQxeGFDcEJHaHBwRHJyaVFRV1Y3TmdkajRGNmhTVWptb0xTQnN0WlRkdmRmaEFZbnJCalVpem0rZ3dWdTh6cWhzV2IzeC9GKzVYRVVEVVRRWFFDeHdkSHh5NXZpNllIbnMyOFVpSmgwbjd4SVdDMzVsMnNHVlFxU0xIZjFDTjdnQ1FLa2VHZ1I4YVRXcVcvQmxmNUtDQVFnVG11TEN4TXpSampMSXNSNFFnM1ZqbzYrYXZYdG1zQ0pvWk1Pa2NiekYxS09IR0Q3Wkd5a2xjV014c2VpRHNTbVV3Q1NSYnhNK09NVllneEtnd3ZSNVpOTUNSNDFPUXVIc3p1UTErYTcrdWYzZ01lUDNHUkdYSE0wR09kYkdoZmY3eklhUkVCK094dlRoMDk4QnMzZi9EQVkzcG9EeXJRVXU2VEVIeVVoNWR0Y2ljK09DaFFGamVGK1JEejR0dnFkRDlGdE9DaUEya2ZJSHZlazJQTFJmdEFPOGR4WXU0ZTBMaXo3V0J5eSt3RHhYNlpHdXJaYWJydXpHeldvTyttQytaRmtuR3NLVHVMek5IQ0pDNUg4Z1V6RnM1M1dyQlZNZ0szSWxPQkZML0JFUVdtOWpUbWNSOFVFazBMSi9RRU1EZmdQSFRaQ3FxV0Yvb0tlZXY0VVI0cUdWVVM1enhCME5meXJRZG5UOHdmZEVhTHRwY2ozSmg0RmEvR1Q2WWM1WnVBaTJEanV3YytJYituT0k3dzZNYXFPK0N2S2EwanphZWY0RHFRb2VVSUFrZGttNXU1blBPN1ptd1R6QUE1VlVmeG91UzJHRkFJTUFoQTFTK2ZZWVZJcFBjWGlGTEZDam1nZU9Fd0FVZERJSHc2MFBncEpORDJPRlJGYndJTUVheGhwS1dXNzJYN2xtdzhPWVdPRncyZFpzbjJkTnY4SnArZkZJNFpobVQ5d1pjWmE5Z1N1QUJUcnU4aHc1azBtZUNqN1NzZTlkS2dnSlBSUmdVc2VVVkhhayt4eDhNUTFGR0RoTXFhdWxtblBMbkF0RFlBQ1M5T1c2SmV4ZTFGKzR3OXZKa3o1VXgrcWdXODVqa3h3enc1d1dBVzVtSFp5ZnpPUmJOTXpDT2M1amRWcGhac1Vwc2UrcEdnUnB4bVo0K1o4OWk5cE8zeHhoZzVSaCsvNGJVQ2pFcGg2ME9QMS9HV1pyV29yaTdhWld1UWkrTFpKd1lwMGJOTWVmWmh3eDQ5OWluNkZKY0FLNERtQUdUSWlGV0p4RFR6d2xIZnpmemF2UVlkNHlZTXlEU1lQQ0xObUpDenVGRmJwbzVFdWlpUVpKbVFsckl6a0V4QkdtS3AyTFRqaWtpUHNLZlB2RjJKZEQ0djFFL3MyZTI2c3hnQ3J1Q0I2TXlaTGJzSVAyVGQ5dW5NN3Jzc3RQMkg2RkJnVWxPQjYwQy96WTRxM1F5MHBybmNBUzdKWk04MTJ5WWRKWkw0NGdJRE51NDYyWVJhVHp5NUhLcTdManhqRk9jYnhhWFpwQjByYlpiVVBUT2IvN3F4a2ZUUE9nWi9kS0tSZ0d6N2JmSXNvUTBEeHYzejk4M0xONFlvdm9hYm1OWjJuak9LSG5aOXNSZFRHakpxeElPWU1pZG5Kd1JaRHBrVDIycHBrZElVTlhGU0JoWEtIR3VCaCtobDMrajViU3IyWE1PN1NCM1ZLYVgyQmpyT01tMTRxK1JzT0dCSHN3WUZOcitrWUx6cUFNMDNuakI5OUdqcWprYUR4TWZPYU5yVzZFOVZNbEJpbFRWeGNXUmlBSmV2L1ArVDRhNE5iWXFFc2tkc1M0YTRyVktMS1FKTkJKUUZiU3JmanRCbU1vRVVLU3ZqZkFsQWxZVGpTMFJoMU5IVXRNV0hXNEZuMzBZVTBJNEk5QVBVOXJ3dHVOK2JlbmxTY3RpRVRSWW00ZzRqN3Q0QUpKR29jZW9rT1JnUU04ejBmSDlOTExhU1FSRThXY0M0RmZrYXNDYlpoWDZrNHNTYkdYTk5MZEl2bVFIT0JHb0dWNHRnTkswczkzeGZBdnJpN2VtTUFoYVVnY0dJeXlmZmVYU3BiSGc5L2Q4bTk1dTgvdCtUdTcvdCs3YTRUeC9zby9lNU5Qd3pzcHZLUnJOVGoxenAvay9iL3pYMm9FLy8vMlNXZStOcXZnbVJkVTBhS2p3Ukl2MTZwRTVGVWVuemIzbzc1QWpnSEVPa0lGOStHWEk5ZkVOWUtIOWNSa1B5cVExR2hQWFMrTExHbm1YMmVHNTlrNVRadXlyRlhNOURtVDdLbDRMbW1SellZTGk1UjJmRGtzS0liZkM1cmt4Z0FEYjZSMnVUZmVvMS9KYUpQNFoydFFidjc1aWJ1Rzl2UWErb00rWGF1aUthSFpzOTFySXlRVytyQm1Jb2d2NFlFemgzMTlmZHQ2ZWdyODY1ZFdWNTY0ckorSlNLK0c3aVUrSWViai9lTHhmSTloRlhPdkV4Y1ZkTkM5NVN4eDBwOUkvYVV6MmFWWXhYdmFxNWE5amltNzJtU2Nic0F6MkxhME9PYnIwdkNROVlIZGhBcExsWGEvV011b3crYy8rcVZ2MER5cU1wWExKbWZFTFg4RWFEYnUxeHYrRVd0SkJ2b29UMGEra1cyT2xtNDJZM0FrUm1EUVlYNlByalpXdjkycEprVUJOaVg2Z28yZExoZThZakVRTzF3eXFjdi9QMmoydWk1SDJQeXl0T2QzSk9BTTd1MUUyMi9GcW5mVVJyZHZiMDRpN29YNE5EcnlmSkxSb3VESTdhbXJ2VnE5dys3YXAwMTRqRkZ4cXhOL2VxVjdyODJhbWFjNzEyNVVDd3VVZFg2K2lsQWlsa3ZzV3VHQWhWcW8yTytWT0srZFdDZlFjWjdTcUMrT3E5L3JyTVBJTXp1TVNhN0tHMkZqTmdpTGNrMy8rbzVWdEROMUZ4RGpScHNpeE0zalp3eXdTa0NzSXJ4QkdsbWV4S091eVhTcXdYMUl3V2pLblVhTlNyeHY3bXpxTnVUbFVVVlpxMDNjbGErdy9MZEJPNlc4NXNVYnRJS0lZVktMNkg3SGhXVXJPcjRDRnFaUER4bSsvV2g1UlBIcVg0TFJOeUlnalBGMGVVbERJVHRIT2VxcmJ1bi9WVGlmVUt3V2lobUlwQW8xNE4vcC9nU3F6ZzdsdWowcjdXS0tONk9DUHhsNFhMQjFCYndLRUd2WXdxeXpVYk83bk5xdnJIbTd0b2ZxQk0wZExuZHF1dmRFTEI4bUI1bjF6UFdPamE1SkFxU0VRclhkQ0gzUERld24yaCt3b0phL1dTd3NZaEs5TWpXc2wwNjdvdDNBRkRzbFhuODdkU2hpUm52dm1hNkJPdjhuUU9tSFVRVFJ3dlhXOS9ENnJRY1MwMlhqMzNEYkkvdnorZlhJYnVTcFZ2VnF2SDFYZk52WHV1bWhnM1ZteStyUWh5alY5eVhuUmEyYjJsTGRhL2pIOGJiYVV0N042YTRQaWxUWmMzbWJsakpib3l6b3Zjb3U4dXovdVBJTkR6ODg0Uk9qNndXMjEwdHlPMG9yRlVvUFhYTlFiazlaSlhHVmtyb0c2Wk15OVhVUExhMHo2clNncWxnWEtsYlZCYnE0MHFjWDkzL3QwUGNadnNrVkpsdE0xT3liaHZLa3l0S09ZTS91VjBzVmdUVWVJQkZXRmcydVVPMERmekY5YldCWHRqRGp2U0lIbFYyODJrbkJsTC9iLzlOanE0d00rTUJndG5FUmVENWx6V1lEUzJHcTB2LzBDYm02UmExM3dINUEvcmt0eWZMZTNZMnM4cTlyeGIvS3VyR0lqbUhIcFEvc2E5RiszRzFqUmxObVlvUXc1WDA4WDJmdnJUUG1LU1pEeGRqTXZVcExKSHBEa2RCYmN4d1JUNkJ4R0NCc1F4MUtydFNUbXNlQUNaQngyd2tWM2pmTFRZMElKNmdraTdLZVFjWHVnTCt1YlFqNVhQYnREb3pCbXpvY3RSYSt6TjJreVF1d1liS1gzbmNvTzBXbGtRc0kvT0NYcmNmYjdQR0hKZnlmNFRQdjhPVmkydHNKeWJZemNiTXJnckJPWEdKUHUvT2htQkVKVWZqZ25pR0M2Sjd3Z0N1R0M4eHlWUkZOa1VuZDVBVnFIM0xIQXk4MXdrMHVSeUpXR2RiOGo3MklDMGxjN05iMnNnZk0yNmVVTzJZZmJ3KzFtS1NtWDBKbFBXWkd3MVVZYjZER2t5WlNsRGVzTnQxYlVYbDBaNW82RWZlNTBBV214c1FkMUJwTU1ZZEE0djlQdURRd0hYaUg5NkNiNXNNZWZTQm9NaFo4U2FNL3EvOUM2YkxDNU5HWTBwS2doWk8vMzJxVDBWVUFZcUhXREdxVmFKaDhUVkg5N04wUm5pa2FwZHlsMm5CSklaVkJxancxQ3JqZ0xhNldBelpuQjNlWUVob3NyTDVBWUlaMmEyY3hybmJML1dSaVVSZmRpMDRNeHMyNlRzRzFPbFl2L1BINGNBaFRvZ0orbWF1RUlsaWUwSUFySkxKTkRtYkhNb0UwcXIvNmlMbkNTajE0ZDhOSDVxYVZXOVFSQXRJb3UweTdOa3R1eEVYT0xVR2M2azIyRDkvVGMycy9qZm5SQWhKSVNoakF1KzZXMjE0RDFRTWZFQmU4bmdJK1FrZWNPbU5ILzcrU21kTVBHZGJpRTB5YXRndjdOdkdyOEtCYkN5SUFsMDJsb2NkRWU2MnV2Y2E3dXMyZGN1eWZLNXlDTDFzdkplZDYyekxyd1M4blI3bmRpaDJSV05CdmhTdDdvcFc0czNLR3Y5SjRJNG44ZlNLQ1B1WHFOQWVhTlJVQ1F2Tm1hVlRCQnVOeGpoTm5jd2l4b01HZFJ6cm04ekd1RDJ6U256WjBZYnVqSldreWxyTS9UWWQ5WWRFb3ltak4zWWJiM3JWcmJ3WEJ6cG9QV0p2QjNVZWM4NzE1KzVzYlhDS1pOcGtDSzQyRGZrYzQyRXdxN1JSWDZmUG8yNW91ZjVpZEdXZXQ4OHAydGtXcUt3aEZnSldITXRSck01WjV5MS82N1QzQ1JSNjFzeFg0elV1Nk1wRkRkbnJJYnVXZ2ZWemFuZjJGdEpLY3NuLzZyTXJTbkthRXphMCtjK0hDcG0rcnovZWNnVFJOKy8vYlZXWXdwM2hhR2MzbTlkTWp0UWh4TisyQ0dJb1NwSmZIc1F3Z1hqdmFSbFAzdEhDQUswK2RPODJwaFFHamVZYzlaOXVPNHVuYXcwVSt1d3BOU09xTFJOYmRYME5EdXNtQThPVlQwbmtEVjlKVkFGNEFGUm5NOHROalRodFNGWlRtOUEybDJCTkthMzVxbjJFeWRJVDJKMExvNzdvVG5Ra3phZC8yc3hFVVNLL3hwQXJicnVsQjFnSmozNWZWR1cyME1XYVZZOVd1Um0zVkl4cmViZjR0cCs1WktPeDVzaFBWTm5KSUV1UDhjVzhZc2NTaDNwYXBKUzlyUjg4UERPTExFR09qY1hFYis1YS8rbFpzbC9oRzlPZ3Z1YnZDZC9jWDJkVGhWS0tBMlY2Z3I1Snh3SThaeEFDRm9wOVd1dWF2TnQybFF6YWFMcUZHcXZHaFRTZ2t1UjhvYitzQllPZS9WZG91OUZGTTk1NnJoUThNT1llRk5BR1hpR2ZHWlVPYnBNbU9WTHZpVDUvbU00Q2JmVHJTNDhqdGk5Zi9uSkNkY3g2UzJ6TlBuSi9MeEh0TmpycWF0ZktES1M1TTF2WjFDdmZmNzY1MlNJVnArZVFib0F2cUFNR1Y2UHI1MzRkUGFOcHM5VTNpYzlUeEtWdG4rOFNBTXpIdGxZdnZ6aHJ5M3ZGNzVYWUhub3EyWExIdjdLL0c3QmU0VTFnNGYvV1ZXL1JpSHhDNzAvejZDT2Z2N2E1enJoL3B6L0pMMUs4d2FyYU9idDFsZjY1QTlDYzErWkkzK1U3d0dtVllUSm9oNlNrajFnMTVjYzJTNTVkOC9Md3VMWVBPQWVFSUFJQk00Z0w3b1dxMkwveVRjT3JQTGU1WUxVOE03Tzd0cytmQnNtVnZKOWNOVlVFWG5xNkNuU2dEc3JFUFdSUnNEWk1Kc24rK2FGVzZLWWhyR1U1Mm9TNVJnYTV2bVZGUXVWQzhzaGVZVlpGakFaMUZ2ajlRbkhIOUxYZUt5KzlpY1RFeXk2aTVXemVodWgrK3E3MXh4N0ZsSHRYTVNFSjZaaGhlU1E1RDV6L1VVVmk1U0xYSWxkdU95K3hFZk1DNUQwc1F6cHJpWFU5UmFuL1RPSnFrRXRXSGUyektOeWVpSis1bzdpMFZWWTI2enBYd0NseGNmU1pEOUM3NTEvcGN5WU12QzE0ekxKVmV4VVJoL1g0blZxVXBVSVhMZHJzQXVwVnRWdGZ1d1pyOWdMTVBJaVJNc1ZqcTlnYUp6R3JWSkNTY2Vtd1lqZlB4QUJubFRxUUZRZGpJNUhOb2UxQzVPMDFaS2lnWVdCTFlCZExOWWsvWmRleFJvVjRTQjJmTHcxYzBYQ0l2bXpxMHFyeUZLQlNqaVRrZm9ZWnZUbzd3c3JBTUhaZnpSQTU5WWpCWlc2UDEwK3ZzcGVqK0VlQlpyWjh1ZWQwODU2eXNDNUJEZncrMWN1RW9wb3JhWlVsOVlWR25Mc2pSQlpFeFBOSmdLQjFzWm1IbDZUYUF6WThHMWVHV0ZORzZLQ2MrUDFJbzB0cTlMSEtZWFVmWncvZjhXUk5ONzNCZmg1a2tnZXFmOFpXUzJZdmtzM0VqN3BmcWk3MW01b0pNZ0dJNlZOMU9GNk1vMi9yNGx1YmxBVFJ0NnBCa0JOOTVudFhZekgyVC9Qek1WK1llaTU4NXh1VFQxWVMvODJWN2VuTlZacmEzVlM2T0dCZ0MreXNJVitZM2VLWHIzQUUvQU8wczc1bDlZWTBwU0xHcWxVQmtpb0RSL3hWRHF0NTcvQTNhaysxVGR1THVHOWFXZlNBeHFYYjQ3UmxqV3E4WUNiREFtM1lCQUdPNitIT1FwNW1ITWRwakVZdTFONEQ2TlhCUGdJdG9saEErb21oY21uUmRCUk53c2dtdVVtZis4eUZJMklFSGxZYkcxWk1RekIwTERrTndIa0U3VFc0Znp1M0MweGh6VjNiMmw2MVpBbjZCbVNLZUZhS1NNSUdLbGtlQTl4NjRxOStYTmR2bjVvbVkyV3J3ejE5ZGN5L3RtTWZ3NjAzT0tVcndqMXpxNVY5M0FrODZ5WlJxUEZsclJZY3FJNXBQRzhqejNUYkRUVldDMnR2KzhxRnFzSUk3R2haeXMrK1QxTFhUUDN5NC96eUxjYWJUN043ZEFFM2RUdGliak1venlrVm9LZUFHWTJ4cUc2czJLSWU3UkphZzNrVE9vTVpjRDhiblZFSnFZRjRWckhhNkw3aVRKcGtiTVhjMFRxT0d6S25WR2FEVTJJMW9XcHpVd2Y1QU5WWU0rZ215RTA3Z1JNTWgwV0lzWnlVVW1oaHVuWFdaTW01ZisvSGJ2czA4bURLck9yY2E1YXNHNWlEajdhSmJZNDBYbk9zRVpjVXF3YkR2L2xmckRiVWRXcHlYcUhhdGN4YlhUVFRnYmVKNzhlWEY1bjN6eUxaUEZ2ck9EZ25oT0JwL3ZIVGFXTFdoSDZUZG44M2ZSN3N0RXkvWDV2N3NyUUsxWFh2RjJOYVlQUk5xUnFEQmk0MGYvbjZ4UWwrTDVRN1laKzQzcGtFTjlUekFDWW1vR3VjVHhTaU9jdFlvQTNKaEJaeUtYVndqdWN2Qm81R0hScTFjaUtPTC9zdWdUNENHaG0rZ3c3SzhFS3h6dlN2UDR4QjlZSm1XVTdKeTgrSXBVNkRFQTEvNjRSUGMwSU5UNjNTeU1aR3dQdjM4ZVBzNjRDN0ZjTGF4dTBxYzZxNnQwUTZWRUNjRUxKY0tWYzJndUNJSTJxbFo5K3Uvbloxd2NsR0NOb2t3REh4cjRlUnFTSHZYenUxT3lmcEgvL3o3OWhCc3l6VDI5OWJWVTRkaGwxaVljUjVFbXZCTk5FbE5JMUFsb3ExekVVSmxGNlJOTE4wd0Q4OExmdjdwMCtDYjRPYkplcTJYTld3MXU5b0FvTklwL21KWHdwSy96bWg5MzVQZ1FQWlJhTlJOSk5QcFVmdk9mZU9ObGRoRkFvMmdxQVc4VkNRZGxXRjI3M0RaRDZhWk55Vm02TzdGbGZEYXJ5aXJ2RThtZlEzeTVMcEhmUkhBQzRlSmRFOHV2TXJUWGFHcVpESk9yVTgyc2FGd2pFWGZEcGp6Z2xVNGcvZFFNNEo2YTA0anovMVVMY2orVGYvTkZUaU5XWHl1djlIVUF3M0F2ZUJTTUgvQ0R1eXpTSFI5TUxmUStCVzhzRVF0RTJFRmdtRkFxSnBkWGZoL1N5ODNXT2V5ZTVMRmlIZ0tFcEozaGwvN1dCYjRGMXJsNU9Xd1hJUGpLWkJ4MXhvWEMxODl3ZHZ4L2l6dUZkWGpxQ1BJMVBWRjhDT0s5Nmo0ZE1kamtCZEtyaXRTSFU3bmdKM2QvM2Y3ei9KMWs4RXpUM3p4U05CYXBoK2I2eTFUVzByRnFNS29kYysxUzFGSDB5THFEQ0F2RHB2TGcvYlVFcXRmRmZwNnB4cHRsTCtLQ0RUc0IxMXgySmw0bzRMMXl2S2NtOVV1TVZZTWN2NlpRY2t1OVdPdXVPc2t1cmIrNGNQcFZQbnQvMTRac2JTQ2RPQmVVWTVnTzNBVWU2MFNMdncrQlNzYXBheXJlRUowcHNaZi8zV2hPZkZIem83b04renp6di8zbDhqTVZwcnN5OHdFbFdaU3FPNklSTWR1WGtUNDlJcFdvS3FDNitxMEd2Y1FrMUhzYWxrVHd4ZHNONzZ2aEhySXZBUDJZUlhaTGlOTDhySHNYZkxKbFMzTVd3dHpIY3ZEY2czK2ZtYm05VDl2NWJIMzljM0RqK3pMamwyZkVTMTZWdXZMdW9vSkRYMDhQajlDem1jVy91NWZCNnU0dGNoeHV4UnZSenl4VnQ4YkpvVmJPdW1SVXRZeHJ4eG5ETXcyRXp2TngzNTNUbnlPOTZkRDNzVy84bCs1eldiSjNzS1YzODJYTHl5dzNLVzNSZjRQb3ZQazIzTXFSY292dHl2WHluNWlOYys5R25pOERDeVdzQzlpa2pITlRlU3pNZmZGTmY3Y3djQ3ZFZWZOWkxlOGdsaG1GRzRQaWI0anROQ1JFS3VibnpKVjQxdW1tRC84Rk1XeitGdnRHQmQzQzBwdkpkMDRjelJUV2ErNWh4RVpkQTh4ZkZjNXJqSXV4ZEEreDR6N0xjeTgvMkNBNnBEZ0dIOEVQbG5wckRxc096dkljYjhVWkZYcTVtTjF3ZDVTTGpuNCtiUHhzdmNhcUlOVVJSby96VzJUYTlwWGpkdjlmM0ZrdU5XS3pvendxZ3FyeFNVWGFtZVFhWHBTeU1ZV1c2bDdCWW9aTEZuZUg3cjB3aG02b0NLbTdNaUdGR2FmSDZmMjdzS1dhWHBlVWwzUmoxQW9XVk5HT0dGd3hZZDBsSlFMSW4vcnF4dFRPbVNzSmQzQjUxaEJtenBSb1AyVmJJVmhSOW1yUkxWOWhYM050b1RURmpFVFduQituQ2s3bE9VMnZzOVNMWFplSWlrVHFmYUphZXZ3SkZ4YmxEcXZkM3ZyOURkVzcvKzZKRkFQci92MDdyMlE2alFmVFFlNkx6V1BQQmpnK3VkLzRRaEh3ZE52VWZkS1BzdG14WnRpcXJ5N0t5Z2E4WXh5c29iVjlHcXR0ajRDdGd0Yk9Hdml2cnFNN29NNnlPc2x0NVpaaC9rc3FxaHdmQUJyVTlKRXRyM0tiRmZSRlA0YzJTbTRQNTdmU3VxV1ZSN04vWFJTNXVjR25wcng1VHZRQ2UvOFVvUmVUcUhNakxEOFlyL3VhRzVIc251eDZSQVk5MmVieFBlTDNUelJLSldlNzNEdnM5SFk4Q3dPNE9yM3ZZNjJtbnBlYnBiczhkbXM4VXNYRVlub0NjY2dWRWo4UFFWNUNyQktyVUxJSUtsdTQ2ZTJjQnlJT1c2eVpiQ3JaaC9UOTFRNzY2UWRUcWNKV2JPaW82WDBKKzFGOWQzSUdvTzNRa0IxVWhJckxOdEpUMS9kZi82dGQ5UC9uOTA2K1hGY2twQndQbU9vVE82SFUrWEdjSWpId095TFJESHFXbkVDMHcrdWZKMUpLZ2dwRXdjalVSanVFYWZkYjB5ZjlMSWxvVVhNQ0R3TDhWTG5GWUM4VFU3cVZWK2lyUnJ5L3hXUytOTGQwMVJ5QkNVVEd2OTJiNVhWMUpaUDUvTlR2Z0hVZDFSN2ZEMjRXZkRpQ3BNMjNtMTNOeEptS3g5dWtycmxoRjd6QzZacnQ4KzFyZnRlMjRWZTRpOUhhMGFOVUoreFhMQi9XZlpmRXJ5cGN0WDdIaUh6OWw1TkxtQko3QVRIRThmdkl3ZGp2R2QzK0NZQWphVGtrbDMvejN3QlZqOHZNbXp2REFWYmFzQWdLRzFPZkFqSW1KMldFUFpzRk0ySVpiNUxkc1NMKzdCTXo1d3J2TjZScXhTRlRELytXN0FpRC9Udk9JV0pyOWs4dDU1WGgrMWFYMlU2cW5seE16RzJhUWNMdnpHWGFmdDBvT2NGV3ZFVjJacVFyQnREVU80RExLdkQ4ZkppVXZQK2Z0aEFma2lnR1FpbE5BanRCVVlxWDQvNmVGa3MrdUMwWEh6cWRLVzA3eU5rSlR6bnUyKy9SRzZESGdlbGFibTN6OWJVZDVYenE0MnRqWlk5cFNYeGtzZC83bWxzdG1IdkcrTzZYVWUySUJNemxTejhWeFQ4VUZraDJlUXlKKzN0Zi9HMkpDbGVIc2J6UDkwQmJSbkNhdTlBbXVjNlpQR0NSWHBIUERsTmM5U21ZejFQS1FuMXllYmgyaHZNcFF0ZmJJd3JwcU5MVEcxTmxsMmh4dnNHM3FhVjlMYmF3NStkYkdhdlFwTjFzSE95dTJ3SkxmNVZLK1VPbnBIVDJvb3h2NHFNb2RWV2dKSDdCTmdaSGVPdnRmZC9zdEtJTnJjblZTek54Q3VwUFFrQVAzNHlzVG5RTm10N1ZiWmErM1VOcFlnajVaSGpCc2tLSzBRUXR0enhkWFhweDhkY09EcnRKdkIzWXRYMzlHNmYxVFpZL2JWZlpFL29pSjdzVURMbHQ5dC9LWkRjMTVyL2RrZXVNYjR1Q3VWNDlaRVF5a24yUllNdG05UlFOL2wzV0dBQlhrRkw2SW9IZjhuNmR2QWtoR0x5aDdiZWd2aGM0VVNDb0ljUG5lcWFlWFh2Z2d3QWVkd3Qyd0k2NDVEWG5LMTIxSGhZQnlqVkswNk5LNC80OGFMdm9YVXkydDRTcGUva1Yyei9UWVdxcWozYkEyR2pHczdXamJvN0hZT21yV29DVVNQYk4ydUNWUnNXK0VTRFhyUnZ4K2NpU1pHdFg0ZmI1UktxVWQ5bm50VkJwKzlJeDBZbkVKYlVVYUtXVk5IY1hVSzh5MW5aUjdpbzlETFB5ZlBTeVhUQ1Z4MTc0bnFsbDQ5b2tiM2F3SUxLaHVQYUxXUFhYTnV6dTkydUhFT2FKNCtlajV2YStOcUY1RHhtUTBLSHR5eGpuajA2cDVCOWE5NGYzYXA2by9NVlVhdmYweldQSkE3aEo4S1llYzVlV1RBdmhNNmtWSjhzVXppSURNdktYVWI1QitKSlc1dDlKUm1mUW9UaCt0Wm4xNG9vcDF0TEd0ZUdaN1U5TzBtYzVseWRXYkF6WVhiZHgycCtwTy9DOHpTUVZHak8vQjN0bEQ3Tzg4M0ZrMk5xVldIcHBwV3BuRWsxbi9tcFpvVjZhSmRKSG1PN085UVZKU3YwaHRhN0NVNEp0eWNiZ3QvbWxEcmY0VVo4RVBnS1VnL0NjSS9nR0RKZldON0VrZSt3U2I5VHVYTjFrbTNDQmVDN0k1bnQ0Q29EQWxtaTRRMUROOFFYZHZBVmc0MjA3eDlmZkJJcmlvL3JzL0sxeGFWNlJzOXhzN1h6a29TQzNqUXltQm9BbmMwZk1HcEJoaHByUGV0dng5cnJkWHN6bWU0UUtnc0o4WVByMGFhYnVucWdBeE1RVFFEditOUGN3eGoyT3lNNmR1LzNmbm1qL0d2MTFrUFFJQmZOQmNDd0tUdzNVZ1M1d0ZyQUFkUnhWd1JnVzhxUUl1aDF0SEtsT2tyOXJZeTE4ZmFvd2lXMnNnNjdZR0wxakpaTUpVd29jcTRUdVZ5QjIvN1FLSzdYUWJvUEd3QnFMV1FEN1dRTDdYUUg2ellRMElJMzdvNisyZ2FBSDcxMjNkMzdjL1BEZGNLMElBaC91YkVYSzNDV3dIcDJFeVBPeWJIOXJZbWYwQjJQc2hBUE1zU0habWNldjRGc2Z1eGYzOXhmMnpWLy83RDRzWGtiZ1podGw4cXdZT3FJRUgxR0NmKzhFZkw5TnFNNStHelZmMm4yLytNRWUwbVVldFpjQmUvU0hvY2tZY2NKNzRCcng2ZFJnQW9EMDRCMDcwcWNob3pZTGtXb2I2NWE1djhtZVdKbW9tQUdwd21QSWZRQmdXNU84V2FqQUh2bzFkdi95aTQ4YjdiZndUUFozc3hBR3YvYWVvWVFBZ3ZsOUtFd0RzNlI2NDBmdjF3Ykh4UzlIK1Q5ODlyU3JOYnEzbk5MMWZIbHdBK0VSRE9JQWZoMXprd1JWSFdndVBUbUVmV0svLzNYdE43MGNlenFYYlJILy9zNkQzYjMrUXN6enNsTkprNzdkOUd4bHNUQ0hweHpJOHUrL1Q3Nzg0UXRXOHNvSDNRK2pKQkhDUjhrcjRSeUErZjZ1RE16NE1jallQOTdTaHY5SENucDhLZjNpR1VndmJnL2REdU5EeFNhSUFLTVQvMjFjWjhLRDhETDN4dVRoRmNXMmk0cDlWN2hYTFcwQlZIMXlIbDR0N1BMMi9sUXVvdXpoWDc0cndodjBha2JLbnA4OTdQTk83Rkh6am9pdVdsRk5lcytQL3NCYlAvMktuSGR6OHVtdnJQWlN4RmJMaXdWeHlEVW94cFJrM2wrLzh6TWVQaDVSMUdBY0E3c3JWKzQvcEFtSlgyNVZzaTRndkF3cXhXRFRhRUZKdXlEUTJFY25XWHFsS29wS3B1YW5SQURUQWhaTzA3WFpiS2prYmxuV3A3UjNZYUFOVFBiNHBHVGR6dVVPcWRZMVdpZThtRDNqb2NUMDZVeXdRQVVsQTIwWUJvS0psWFJBSkRNbE5rTVo3eVNvdFpFUWpRSS9FVWNsV2xkV09YVlJtQ2xlT2dyWVdWSTFCTDdtYis3MmUwZE5yc0wwQzRkWnMzb0VLaGF4dU5zbkJFYkZ4TWtTRVIrK1pqTFpIWWhKVlYzbXhveVZSYVVUMHFqb3ZyZWdjVmRSc1hqa21hRkZ0RWVKbGplUUZWUXBtVTA0UWNiQ0hqQXoxaVVJYXd2bE9Ya082TFI2a1hlb21YTW9qWlJOVjNmcXF4MzdIaDdmVWVnRFZDMStacUV3bHE2NjN6Y3k5M3E1NzQrcXVBcjB0dEJVcWYrSnRqRmlwYzBCYSt5bDVhOGNtN1l6TnJLTkErSVFGTzNwZjFmclZiZTFEU3BoTldSdG9IZUpOaGZzWFJlZXhxdnNGcVNmVTc1NkUxaXlyc25CWld4cFlhR1ltSVJLdldTN3o3T2cvN2k0Z2RtNEpEYVJjbWhqcksxTTZOL1JhY21PSmhHaGw5WTA0SEt4a2paL2NHdktDbkFydGR1d0lkSzFJUmloV3Rzdm9iNUhZV1ZhaENMNTdpWlpTOVNVcStEVEg4OTF1QUlqeWxWZW5OYTF0U2lHYkhTbjJ6WGxucDh1cWQ3bnFtUG1uQ3dYbXgyMVg4dVBIeHpnZkVJdEV5NTl0dDkrdXY3TFhkbFBveTVsNjcxbDRNQUoxbzVXb0tJRjJGKzZYWjFUdDYyTE41Z3V4V1dXbEV0TWt4UGZkdk54RnJZZ1IxMjFSbDJ2YXNvRDhlZzYzc0Y0dFE3bFFlR3hiUGVMTUNUaXFyMXdETCt2U0pmVjIrNk1YZlc5Y0VNUEswTC84N2tFaThZMnJiOVZEdCtQOUd5THY1Y0JXSjFvdTdjS2RFeFdlcjhqUDR3dkRTcyt6NkJ1UGFHS09ML0NtbGlTYTRieWlMdWcrbVJCUlJmQkFON0dTWjAyQzRYSDhlcGRXci9DQjhnYlVaVXBlU3M1eE5RRElPWVZBMUVtSWVpS1hXS1pSQTFWR1RDVHhvbU9vZ09qUURjZlgrejFybE95aG5Vd3RFUFppUURTbFNRMFhIT1Y1c2k5ZTZaM3E2OUJudEMyKzZ2UG9QdkMrNCswVmJUdDQvMS84d1hJeEc0Nm1FNHduMEhpMy9YQVFwaUxnQUZaZzBMajVLSCsxWEJySFFucGhUWjB2KzNPaklwKzZiMGdzNnVvU0U3cVZ3anUzdGVoOUo5Qk9YYy9Dd0R5Ly9hVW1GcWxGTE1tSDVsVTFSOWhSVXc0U2FJMzBxRkhXQW5tbVNscW8rYXR1RzRYc3NTMTV6ZjFTc3lsNWJaM2I0cEZYODdheUFjZG1jWit6b2VoenpvWEVkYVFTWmtvb0x2bVY0TG16dXg2dkV3VzdSVkNFdFd0M2RBVUszZkZpWjFhZGk2Vk9RWGNoNm16R3p6Mmh6amZNS1FxVGppajJ1MmFwamlUUHJhUkdKNzdhTmpUcGNkNmdQSkJXQVA5WHRhcGNXUDl4K2pMOGpkUFB6YS93cWlOdWZEQXc2M2JYS2tscm1zQWUrUVU4SmZ5ZkEydnFGK1JQM1luMTNlaGg1K3U1SHJiTVJJWXc5UEx0b1g4d09ZRzFrWGVDNGVhOVowMk0zYU1hdW56OWNueWF2WHI3TEVRUEhxK3FwaGlKSHkwSmdKZ0F5c3pvbXozVGxsWUJDZGJJdlJPY1VlTGdOWkx0TE9wRnByWDA0V0tPZ1Y1QWxpdzlleDJiTTJ3Zm5ZK25Odk1WL2l2dS9oT3p4RkhWYmxKRFdhTko2U1JsdVZHOXNWcTB4clZFWFRmVUtCdU1xNmdQUVhkVXMxSXlWdFN3Sld4dmhkK2luWFE5SUM1S2h4SExNdDRmbkpvc3V0WU10cVhBTEJ2blFGUUJtSE9XZGxWcitEVFB4bElnZDJHTXE4bGhQNDhSRFhPdUVRTVppODkrWWljU2t0Z0pJTG5tTGg0T2gwTzBlTXF6ZG85YnlvZndtTzM3dWhQckpJZGNMNzJzRTV4OHpxaW9WWW1reFZGRmE1L2JsYW8zQUtnaC9rRU9BbVB1eDViRE5PUXExYklLd1VtSmhpWUhDM0NjbVpMdmtXRlZrUTVaZWpuRTljQi9zQ0lpNGxVMGtZNmV0UlVOYVh1b1FMeXRKME5veTJvTUNnckxpSkNkUVIzREJPZit5eFVDanZMZlFGYkVlYS9UbDcyU3VOT3VwbFQrbkJ0YVdncmx5ek5jUk94c2JYL1RGZEp5LzJneFBhM29VMkdwWWJDaEwydjVIMmF5SU5XTlFML3ptS3pZcVVDc3JWMmFzcmVYUkw3L2NsNGFUNjdTTVRBeEVmSkx3aE9oTmhYT0p1L3Awd04vdkNWTXFDenhPamZONWVMUkxPQ0tJYytNcjF4ZTZmQXdiRnNXNEw0YzI3bSthdG9BZEFUYnBsL04zUkpnYkIwbmZNMjZMZnVLa1BSc0RTRUEwVk1UamREWFk3SjRmNzgrWUYvUDQrc2hWK2hjbFpUR2Z5UFRtOTB1VktQUmNCaHV0SzVDS1dZZTlwZ2E4Y3VDcVJqaGNNbzV4Tmg0UWNZNkpSM2FrNVk0MW01U1JCNFdGRlV0c2lxQVVqVVNNQlo2N1BjTUlkQk1hMmljRko3VTdqMVdzZjFPYXlHY3F6RXpDM2lBV1VhNUNqV2FjM2l2MDdDU0pSSW1HRlBiaWQzT3I1V0N3TGYyKzRKMkxzYlUyVUZoVlN3VHJGcUR6SWM0Q21CTmpKRFdsVmJUYURRYTRtWWtYcGRza3lKM2RUVWVUMXhHdGxUSUp1Rk1PR25oT2xIS2toTkVHaEp6OUJsK2pBbERNQ29EUW1xWnpCV3lVVlNJUEhWYzYyUURaZzlQSE53RlpUREVrSWtsbWdRaVlMQlFrRDRIWTlWb3JLdGFBb1NMS0FGcE5jWlVTaG13SU8yc2xSV1ROaldtVmxCOGY0UlJ2dUZleHdvcVExWmtCYXZqaHVKaTNnb2R5ZkRKS3dMekFGRHZvaGFXaERSaUo5MmpUb3duOTM2dHV3VGkzSmxZbE10d09DeXQxNXZGMWFCbEFtWkE4Mm90T2RJR0N4MFdRSm9PeDYvM1kxblpvZmZubERsbzNiL0g5cjBTSURMbXdZT3VKYzlkYWYydFdSS0FMYTNEVjlwQkdMdG1idmEzcEM0YUo2MFI2WHFiR2E3UisvZVQvZDVRcW4rbzhvZFk5V0MrcHV5VjAxaGlDSHdjbzI0VXBWRjFIUjBTbXYxNEljcVVzTkJqcFlyYVhvcEJGNUphaDZjcU9rL0phRlhtcDhsazBKYU1naENrRkJ2UURQenJGcFF1QU9Jc2FZMnY5Mll3cDEwZ05GRXBjcmRoN3RhZU1MUnRUTWt4R3lVeFNWVmdGU21YWmFOUHN4c1krSVpwOEpHa3hwT2JBRjlOZDBhVzBQUHducnI4SGpDYkJDdDdwY3JkTnkrSDI4bTZRK3BYajQ4K1VNSEtDMkZOajJRM2VmKzNhUnFIdVJEK21iLzVTZWZ3OTRNYU1MQ2ZHVlpaQ1NmNlM0K0plL1BoQitTbUsxSmZPRFU2RTFaVXE1TXQ2dldjOXphT1U5VmxrZ3ZxNUl6aGVYcUxoWTNwOWRNUDc1by8vY1hoTEdlZkhlemFLODh6SlYxZjgvNTVpNnI2OWVRZlpYRDMxbDc0cE9iamVyUFpmUmszYzRmeC9MVXhlWWd0Yk03dXcvMXFvZTl6YllucCtUeU1CN2RXMDkvQmR5ekticXRlS0hrc0dseVFVRmJLeGQ3Tk5keGRFa1pBQUJBOGlsTVBHenZSU2dHQkVEellNWG5uVUZ6UlRIVVNnTlo3VlVUNmtlQWUyNXBxZjlRWDFmODRzV0RpSTlQSEViVTRaV3RMWUxQRVQ2VjBRTm05ZWw5aTBMUTlIZTk0UXZDbHVuSUVHaVJjUm1wUG1aUXBEUW5tRjZraEFBUHh2eDkvMzMvLzk4TEgvMXRTTktJZkFNQmErdzhaNUFGOFBHLzlzNkluK2U1c0RnR2dZQUFBRU1DL0g4Z2p0NnZyLzBhOVU3N1hYMEJvS0JWQ2VvN2czWVNOdDZ2VlE2V2Q0bi93bGVxOVFsWk5abTFJenkvMnl1Y0wvQW9JUnk0RHBmdU1RMzJ3Sk1yUDZDTFBVRGZoNnVlQmxscmhSZkFiOElONVc1ZVNWY2FwTytyYVBpK3hienJmWGF6bzdPZDgvN0xZMVE2Zy81NmwwcGVaQkFxby9yNHQ0Rjh5MytoaUNHZTRua0FqMCtYV1Vna3UvbXljZlYydnhFMFpEdnE3VCthVXRoT1V6VmY5T0pBVldBbUFyeTV2d0Q0bnpTT2ZlWTJkcFV0dDIrYUFmWjZxZDBObExzYzQrNGs0SldGdmY5UVRxdnRHTGVSalpoT0M5eFo1MWNMM3NJRDlRNVVqWmR1eDJ3V3FrS3B0RkdVSUxabEhMd3JaSVQ3RlVKY2lwQkQ4ZktFOXUrOC80aTBYOHR2YnZPWUUzQkNQamJIbEhqdG1JdGt4dmlzaTJvRXVmSnkwSVFZTnpEMjZvOCtLMGJGc2w0dlkvdUlKUUhZb2VOOCtXUVE2ZHdKUFMxaUp3ayt6MkZTMnB5ZTZyYzB0YlQzQjgxTGZoMlM3aGhmVW1yRnlMcTBFb21pSWI1MytZS1ZlNzVMTWRBd0RrSnNDYy8wU0NzVHN4VStZV20vS2V1ZksrV2pjc0Y3WlpGemJoVEVqM3BuNXl4VXRENVZXRHNzdWVDdGljL0MyTWRmSTU3ekk5cjJRSHVOU2ZMMjhKeWx6NWRrN0VuSVJQMHZ0WHd4dk8yRHJNdmFyeEdKRXE1WFhMTCtMRjlSeHdlbElkaE54MGJUSHRKb1JQUktVVGlueWxaSUU0RTlYbmFVVFFEZ294QjJNQXBBblNrTks1Sjd1NFN2QnRuTy9zbWUvM3QwMEF1YkovTUhmUitrOFpFY0Z5Z01BQk5DUWZyUTJGSXdEdFRzQitoOGNnOE1CQ0l6RG9TWUhBSmJCdHdiRTNYc2M2OTIvTk9EVXJqWWxHa2c3RjlKQWtVN1hJS0JZVzRNRDNwN2R6OUhNTXJzQ0FyQXI3MEkrZm9hYzNWZVE4TFg1UklKMlJqM01HdFZyWUNWRzB0QTZLTld3b2RyZU9wVmEvbmpYVTZ5SFdKeFp1eWJKNnU2Z1U0ZDR3MTdhekVKTW9WOHI0d0QreWtya29FWjkxRlpxNUhMeDlpWG9BdzgrSERBSU0ycHFXWER3em9mWFBOd2JzZzJmUis5azZ5S0ZnTHNISmtYOFFwZm1qVmNkWW1GU2dOeGVyMk9aWWdvRURaS0I5WDFtc21SS0VubHJJRFFOUVBsQVVEWXVsU2ZHV01jeGVJZWZlcU1JNnZCQzFheHc0OTV2SWJmd0JXSHd4VlV2VUl5V2p0VHdXMVRnK2NaVERiMTlqYXJwK2ZWVkVncDVmWDdzNDBLOE5qbnFyam4wdFkyMUZkTWI3WW9waVUxeFZXS1ZQeWF4eUtjazVsUk5pRzJFYlJ2Z1Vpa29UZzkxU1hTZ2JCSmNiUzB3YTZRQnBpUnFtVTFJcGFva0tpNVdNWkdOaXJwR1N1R1VSQ1pRcFRXcWhLK0tlYXFJcXdvNThRS2FQNVhoMGRGV2thbHhjRnZZL1BXM1FycjZ3OWRjMTNhbEptMjdyaXZ0Mmx3VmhWNUZJbHBrcGFvQkVWWjVZVmF4RUZYYUJOYS90cGpmeGRaZXp1dHcrRGMrSVAvSi80eXk0TnpncmdiSXdYMEVHYlZDWmFXd2xyU1NjajZPL0UwK0lCRmgwZDBpKzQ1djM3ZG1OWlhLOVRYd0d2OE1mUGJldEN4NlhMK0FwQ2xEVy9Iak5pSys3dnJxMVNzNDIxMjhiYkcvTXZpTWM1R281SmMzS21kZFoyOG83RVU3VnJDR0JQWjROdEw4OS90bFhGMGJJWW1OSXdCQkFRPT0pIGZvcm1hdChcXFwid29mZjJcXFwiKTt1bmljb2RlLXJhbmdlOnUrMDA/Pyx1KzAxMzEsdSswMTUyLTAxNTMsdSswMmJiLTAyYmMsdSswMmM2LHUrMDJkYSx1KzAyZGMsdSsyMDAwLTIwNmYsdSsyMDc0LHUrMjBhYyx1KzIxMjIsdSsyMTkxLHUrMjE5Myx1KzIyMTIsdSsyMjE1LHUrZmVmZix1K2ZmZmR9QGZvbnQtZmFjZXtmb250LWRpc3BsYXk6c3dhcDtmb250LWZhbWlseTpRdWlja3NhbmQ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6MzAwO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi94LWZvbnQtd29mZjI7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R01nQUJBQUFBQURJMEFCQUFBQUFBZFhBQUFESFRBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdsd2JuRlljaHpBR1lEOVRWRUZVSEFDRkFCRUlDb0dxSUlHR1ZndUVLQUFCTmdJa0E0aE1CQ0FGaFVJSElBd0hHMnBnUlFkaTJEZ0FhUEFaRmtXd2NRQUZtKzhUUmRrbW5VajIveWxCbXpHaGRlaGJaU0YwUjd1bzdoa1pDWkdUNmhucG9iWlRXeHk2Y09EaDBFZy85bzBGUitIQThzM0oxYjN0dzU5WG96Z2NDTndqWm10dHdDVnhYNGhMb3BFa1RhUlh0MFpJWTJJdDRqZjkyWHNDdk1STFV3ajJRbzBJa2hjeEtrWXE1aVF0Y2ZuaW1ycFowanFIdEduZ0pibC90RHF6aWlxZHF3QXpvUTBUTHg4Nk16cFg1dEk1VC96djk2OTc1cjRBb29zUkJESmZCYm1rV2dzSXRvcU5iRzJYSjlDa2VvYkhiZjN6QkJtb0dBMUk1YWd4R08xR1Rhb05FRlRNNjdJdW9uOUZYdnpmK2l1aXdRRUsvVy9haG1pYnorVmRFYlZWUjRZTitQZC9qY3pDVE83TG53V2dJcUZsNVFBbDIxWUIycDVLSkZsTDZKZjdaZUJ6ZnU0Y0ZKM3ErQU9DOFFWNjZ6b2JXd1loV3dEL1Y1c212RVhvekVtRVRXdnRLRzJUUEczaFdjcFFtOW5RT3ZSOEpGSVZnWkJkMm1iRmMrSTFmWVh2d05Ra1ppdnF5UDBlOTM4NnkxYmE5ZDN6QnFHTHF3QVgzWHB6YlRINit0Ylh6R2drQTJ1SmZReWVsZldlSlN2Z0MwSkZVRjFheE5kVFUySFRwU2o3bEpsL25lbXE3Kzl2U01rLzZKYWRHc3NxcmdHZWV0bmFOVlBMNHorZDdxeC9zZ3huRjJUNWVnSFNVV3lYN0FERFZNS3hveHowQmNodVh4aTJBc0NhdFRQeXZnT09OVE9ick9TY2NHdUNRbHpoRWJLQi92cnR6MWlySDhoc1puYTc5bkluaHkweVJFTENKeUxnV2Y4Ni8zQWdUREFBQUxwak5FZzNKTk5RWkxoc1pMb3lwRncxcGs0ZGN0aGg1S2lqeUFrbkVNSUJRcCt1Si9pbGtoaXB1Q1BIZWcrRzlscEZvUS9hK3hPS2M2SEZBeEIyenJwM296QVhhaUJ1eFZNOFZtQ2tXbVY3dHQ4M1VxbDZpNnh3eWFzd0NwVjkrY3pVNU9manJNckgvQjFiZHNTWks3bVNXL2EvdENtdktvSkVpaFlqVmlLUFByeW1LVkRrUC85ck1NTXNjeTJ3MEZMTHJMUFJEbnRkY3gwekt6TS9FNmlBcENqNkwvay9hS0EzQTI4T3lWeGFDNE9sVDVhZHVQTVBXZlpCMHZCa1J0bmNZQUdkaFN1V2JsbzI1MXJUOWVDT0NLTGdmYllHa3FCSjZWUXlhNEtUR0lIVWc1ZmhxUlNZRWpNSFJ4SUhJK2xKM0ZUenROMHBXaDdERERGUHB0b3B1TjQ0Si9BSWtnMVNlT3BjaTloUDBSVFFFaVdPd3p4TjAwWkhVK1VwUzFHRjhCWVBFRDNBQkxGMW5xTEZmQXRTSWRzNHRaUXJFSkN6OVRLdFoyVE1VVmhheEhPTFczaVlTdDBwb0VjWWdvU3g0N1ZEcWN5aGtna0ZQWUhkdk1TeDlWOSt0NzZOTFpxREIybTlZWWhtdG12NHowbDcxYURYL2hjek93UXV4cTZrMWxVQzdubW50Ry9QM1N6ektHUS9md1JVRC9jT01RaURJcFRnanh2dmIvUGJ3RTlzbEE2aWpMSVR4YmtHbHAybVhoZlUxTzVBL3lIZWFiUldJeklkV2pXWjJXMDk4UzNOSm14SVV4RDBKUzJJUXFoNy9ETE9WRlVZOUkvMDcxZHFKRnk0Z045U055UHNBcWtsSkdYUGFmZU0reGJGNXFJWWMvSUFCeG1sbTRCY0Irb1BPUnoxOUNNMm91aDJvR3RFTk4yQUpGckNWek80Tm9EM2V4V1NFS0c0c2pNRHRPVkpTZ1lMVjNvU2FMWWVlNk9yRTU5Sld0STdYcTZGTU5CNnBCYUR6bVNHN3g5UC9uY29BUUMwWU82NUFWLzhWcVI1cEM3TzBLSlJTVGlYTUhlYWp6dnE4ZkQ2VEVhdGRTZUVkQ3lKeU9QN0hTMEhOc2NqbjRFVUg3SVZ2NUI5TmNIdDZRK1F4cjVOZ0psRVlwQmJsN2lXRlRnMlN2c3ROTHBrMXdkMEVPQi9IS09QNTFvQWtLSGJrMGN4Z2FVU21FZHp2dlJFWGZYblVFcXhxR2dkeC8xcFVCbjZ5U1ViaUw4YmtJbENwT0MySEYvWTB4NXFweFRMNkxtbFVQYkZPSk1qWVFEZVlKSWNZQWh0S1ZxZnJGS0luZ21qT0k1ZXgrV2JTVUFyQ0dOd2hJRGlhS1BRVjEyZXphZEEwNENIRzg1TFltaDJnaU1Fb2hndUZDRTdXdDJSbnBaT1AwTEFtempKTkpNbDFGcVEyd2ZiVUJKYjgrZ2RmaVNHU1cxZ0MxdFowejdRVlFkZG9UU3lzalNlYnpvbGZ5b2hTdGdnQmVlTENIT0RmTXlvMkJPUzhhMTJoaWRyM1lVaFJEVlhUQUl4RTZ4d21zMERFZzFNUkZIQUd0R1pKTEU2Q3RCWmw1SjJBN3VsVFAyME1qUVh1K0ZHY1JoakNvVlh0b3daaXRoZUFpZ2Jsbk9aSVJnRENnWUtlampCUW9RNmhSaDJMSWFyR1dCN3orWWl0S0F1cUVNQWw5UURJZ0hjOVJzWWlVekFOZ01zWkdMTG9VYXhha2tWcmZEb3pLMjEwWmJLMDRacGk2Q0VCVm9zTU9BQVVWZ1Fpd1YySE1qQkR1S1VnSk9JZ3lYaEVNbnNVQ2xTYWFTeHc2VHJpT21NUlYyNFdTRy9BcjFvYjhMTjlNRmFmYkZvcU5yY2NDTnk0a2lqcUl3QkpsTndCQzhtV1ZnbEcrdE1aK3Y1NU9NVjRFaUYyS0NJYlZTc2xGb1pOcG1GdzgyWFdzd29DNTZLRCtxVXJvSXpLbW51NEdBWmVKWi9FQUJNNFFXUVJwRnFob1ZZQ1FmUGRwT2hIR2FXdXg0ZXVGaUhudTQwMHBvMU43Q1hWTW5mS2pSMllkRmlzY1dxRnF1QmROdkFhOWR5OHRFVFArNzEzTHdjRFB4dkRkMGF3KzluZXlmZ2QvWTM4Q0VMNXNKaVdBbnIrMzMvd1pLY1Fud0tqclhpTUFCcER1Q29hVWlrR0lTaENBRUZ5RUVWNUplbEZjSEJwOUxuZS9lL2E3Yk1FdzhLcFA2WlpWbVZSOFM1b2JBbVZaSldPTTV5MGo4QkFCUVlRVFVtUXlhWkdFVDF4OUhEQ1VrTUcyTTJIRU9odVg1SGpUdUJwU3BBS3dpWE9tc3FCcURBWHpRVUl3WitmT0JIdmdaaFloUEczL2pWeUl2Sk9EZEJJQzBqSzVzS25ONzZxVXhzSTVSanRBcGl2d2NtZUFRSzlGWUtHc0VTdENRUW9nNzZHNFplbXFUSlRBUlcxRDh5QlZJUUJWTUloYVp1L1ZIN2hTT0JSRktSbWpRa1Nia2dRSG9pcll6aEtGWFg3TElKb0xDNWFhbmkweGdXTGdSZ1RnbGtyT2ExV01Kd25ROVh6bGNmbUFEc2hRNEg5RW9lbnk1U29ySHJXZzl0czBwSTd2LzNzRWV3QWF6cnVDK0dDUENmeHJrVDlDWUE5QzliQTVCeFNLSzNkeDBBWUkvZXlpcW10QnVBbzB0Y051YnI4MHdsNCttNE1QajltS2FXUC9GSjF0bHRQZFV6TzRHL2hMOVdqcFROc2xWdUl5Zkk2WEpYdVZpZUV3cXQ0ZGJtZmo4QUNDSnpTZmRuNHBNbzQzS3NrWFd5c1FWcGpEOVN3bTBGOUFQQXZ3T0FOeDJ1dmNiMkM5dUFDOStFQzg5NHp6cWZHYVA3S09iaHJuTTd6MjBCQVlCRVFIOG5nTjdLOTNaMWV1VnpOUHFuN1RQSEl2TWNkZFYxaTYyejNuOU9tV1dUK1phYWFZa0x6amx2Z1d1SWhpUlFzR2EwbW90Z1lHUmlaaEVsV3F3NGRnNU9pWklrUzVGbWpmK3Q5UUFIb2tKNmIvM2diakwxMWtkZk9iUTNnQmg2Nm11OXN2NjNUdWRUb0ZDUlltVld1V2UxUy9hYjY3RGpqampodnBzUmNVdU5MUzdiN0hiVXVPdWkzLzBSRGxmYzBCQWV2Nm0xMVQvKzlxK0ZCQXhIaFNkU0N4QXVSS2d3a1ZyUTBRc2lhODJxcGJaYU9hT05CQzd4RktsaVROTmVCcmVPMnVtZ2s2NTY2YTZIbm9ZWVlLQkJQRWFiWUt4eEpobnZySW55NWNpVnA4UlVwV3dtUjAyRWpUYllhWmNkQ0EyL0VBQm9EUUJzUDlCeVFMOEZNUDhBOEo4RE53Y0FBRFoyRmJ5RWhPTVVMQ1dxb3BoSWlGRkdQNi9KU2Jibm5KZ1V4VjFEekxRQWhDSkl1RWJCbzNneWFTVUpSU05kRUxIU0h0SU0zSEhHc1NOeGZld0VuY2ZyNmNDZ01XbDdqYWFKMDBleFF0UVI5aWlHNENVdzhnU2lKbm53U2IycnNBaXBSRWxueENZTXM2Y1N5SStlMlJ4NkVxYitDckdFSG1Pb05BT0ZwSlN5TmxBVGhIVE5Qb0I5SFFPcng0ajVYa3pPZzRRT0NXbWNQalJ4VEMzVThZUG91VVU3WDd6TXZya2lXbzdkSnNablFRQUU3bm4xL3Q1ZloyUkVRbW8wd2VpdXZKa0xsZyt3Uk9rczV4UzhNOFdMbFRvRXhLUkp1TjVabHVjOVZ4bUdwM1hvaFNGWmc2MDJoMFBwZlFqZ0hITGRVOWRZR1pHVWpGOHhHUGFmcENpTkJxOVY2aTA2VDA0WVlwNG9LMTRvYzNlbHJDaVZFWURjL2oveVFTblBPdGFKbnpIQmFhaGNBMENmQUNxOFM3NVp0QWswcFRuS05BdXVNUVdRYkZpdnRuUFV4bk1MUU91MmZFbU5iMVpxNTVJTWM1UVp0bXA4VnlsUitGQllveWxYcFg3VkJEQW1kbUl0SFYyRlJ3eHEzZjR6Sm94NHQzS1pmcHNqeTh1L1ZXYlVnN1oxUjlNZ3Biako0dG00V0FETVFrNDV3RFNrVVJndHlFbXcyTUtSVFdERlpkTi9GR2FSZlpIYmE3T0xZTy91VDRpSEI0cU1jcXRIN0tWdjBicXdPWkYvdGVZK0RRNG9IVVFZaFE0T1ZRb2JUV04xUzdEQjhQWGMrenV4Nk9RM3hPMUZkbUVxQS92eWlLM3R1YUhTUmFXNDBPWTA4WlZBUFRXTVh3SzRaRU94QmhDOGZUd2FzR2h4S1N0N3lRbEJvVDUwb3J4K2tOcW9tRytxSU0xNFR5WFZoU0lEMTB1RUkyQ2N1Rk9xNTRDY1F2Tnp4L3BjZjhHb2ROWS9TM3htYVYrekpac3c3OWlsZTlGL1U4cmhQVkM0bVFsY01EcmJvRFlTNkNOYjRBS3d4cCtSRUZWUzFUSTZVTVp3NHdZV1FOUFFXNXROVG5GUGROZ3cwRk0rZHFnSGc4MjZKOHNpVmkzdW5RNFRsc2k5Z2I3RzQ1bVdMbmQvRHorL1JuYThSTEVlNTltcXByN1Nob3F0VndTSXZmbUdkVjJ2OHlwcWpVN3Y1ajZuclAxMTFwZ3NpTHhOamUxV0hCOGJNanBXSjgxZHRTMnBhbndUZ3duTjIzM1dxdzRiREpTWkdsQkpUU0RsSGVNWVpYWnRPOWZ1bFdNL2UwRE4zWnpORmJ6Zi9kczJ1WElMS2d4ZGt3TjlXRVRadTdsczVya3d3Ukt3eVZ1VjJGTTJlYWxmR1ZhaDNMVTByNTF0V2ZNNVdGSENKL1dNWVlVamhXeStjRW84ZXlXQk1YRXpXQ1ZMa3liWWpqMXZyVkpkbk9SWGV4c3JnVURMcWJhaDJvaUQ4NTdFU0dMYXZ0a1RMSlJmbU5XRThlYUcyOTBXbTVJc1hpNVRoN1d3bE84YzNMU24zZXVpN1dSNUg4eERZMTJMQ2JDeUV4Vis2eDRmM3RRd1VER3IzaHRsT2ZBRzYzMTh4a3J6bXNqYnF3WXRFVlNXOHZSOUtMZWhaN29KM29rYTVqV0xWbjlwV3Fjcm1EMlZ2R09hSjhlbitLaU9kVWJrUFhKUWZXNXhaYjdXMlJlRHRPSlRhME5iTnp3dFJKUEFaOVJ0cVNheDBxR2xMazkyZ3YxRFg1T1VRKyszWTZ1MFVLM1BQeURSYzhlSWxta1NjRVpwMHdTMnc2d2NLMytLcW5KMzR5ZU5hYnZGNS9SeURSMGo3OEh3ODVIbXpHVk9TMFdJZzlKQWVsZ080OXdOa3RJN2hBMFc5a3dKdWo5Q0VsMkdhQkw1cWtKWEptZ3NzUzZhZ05Wdjdvb0dpQWd4YWwrM3F3VFhmVGlsckNtbFZsbzhZMExNMkQvQU5oZnVpU0pyTlhWc0J4MFd0UGJrVmt2TmFIbGt3Z0ExY09RdEl5eUVVZzBPSEhsemQ5MVFXM3JsM1cwL3MzZHduZllLMGdDT1d6d1B0SUNIVm5OWDdlQmdSblJjR1FTcmppdWMxd253cVdVbDE2dlJaOVZoWFNlTUlTMGtmSkM3MjhrUGsvcjJERWRUUEk5MEdLQUptdHVSZzBwakhhRTVTL2xteTdIUUNZM2dCcWtiYmtwRGl0N0tNUHA5TGtRUVNaL1A1SXFEd1JDZVBSejdkMzYwT2dhRlRqc2VONS9ETzhtYTRsQ3hsNTFXY3BPOFRueWR1RmxtZmhmelZtdDZlY2g4TGVtOG4rZ1FLS0toZ3cyRVgrcC9EZXNpOUdBUlZnSzlrVGxPTFRrUUlhclhNYkpadGFFRDA2YjViZEk0YUorRVRYK0FpUTVKZHR1Y1ExWGFEenZERnExc0xhSmMzdHhLUTN0UUxleVVxeUtXVlEzRi9xMGRGajhZRDhrNnlkZFZGYTUrVnMrRFNHNnVDL25OOWNlbnVFTnFsakovNGNvdC9uN2YrcGlZZVlVcG8rRlpPbEZHeFJ2VjFXeTRWRVBHS0xKcFg3QUIzdUN0TEYyYm1XYUlCaU5GNmhCOTIzRy9UMm11ZHRJRTFmejY2VFV3M0FiclFyYWx3RUZoTzNaTExaSkd6V3p3endMakRzK3o4b1prODRnT3dvSFVBSEFnTHc4WGgyYUZNcjY2anM1U294a3RKWUJlVHJSalg1em5Ca2RtSTlNKy8xaHJjWWpZdGRacmdiclZUUjZjMDZvM211YUNrTlpjanJmUHNYbGlwYWpOTHdhdWZMNUVWU0tFQUhnem83RU14WUpXMC9vaUp4dU50a28wV21VL080NE5kVVd6SXVzTmtkWmZqZGZTVm8yeDhPREhINkx6VEh1ejJwd09UL09jQkVqSjFSVWpSOGI4NzVOSUVCQnVtM0J0dDZ6RW9kYjFoTWRvTWhyR0dxWFU0MkIwbTcza3lMdVJvYTU4UnhuR2lLeG1JSHd0Z05TdXZrQXF1dlIwS05Kd3YzNFllNFk5K3B2VzM1RTB0c0ZGMWd1dWpUTFUzNWZwVThEd2xBZlBuRzdIMDN6VzhYMGRKbm12Snp5WTQ1eDhsaEQ2ZzJKQVRFUjVteC9yRXQzbU56cTNPa2FVd0p2SWZHdStmcTVYZkJPSGphZnZRRDZJb3doaGI5blFheFQ2SkRmU2I4Vmt4cm1WVm5xdTVyWEk1UnE3Ukh5TUpSaU5Kbk9IdDhrbXZiZ2d6WWpnblRuNGR5ZXhjU3pPM3ZReURvSjlsV0lqdUlzUktSOGZiQUFYbXp2c2x2TXViYm92VGFtYzdLMmJSVWYySDB5UmpMdEpxZVR1eUFqZThZUWNKSkExZGNkdHp1VkNlMC9FcmhZTkl3dTBZT3pFdGViK1NsTUtPVVFzRTl1dVp1dnVRWFdiWHBYbENidXZKQVJYUHlBbXpGR2hJK3VPR01CSDdEUE8wb0RVdzFNNzhBTjNoSjZFQitxbzBZUmhJNThiQlhDSVVMSW15Z2hXVnNheXNJU1FCNTZocUIySElwWHpPek85RWxGc2R4dUJPWDBpUGhTeE5QOWVWaHlTU0lwMkV6WGthYlI3ZmZReGtlaVRENEwwRllDR0dpTnpNRGRJalhoaGR6WFB6ZVE2c0hVd0R5Z2RVc3d4K3VtS2lxNDlvNVFyeTRFSlBjaHZYMzJtSjFFWlB2THJKNnBjYVZ1bUMzcFFxWHpqMmV2WDRvcFU3dk51MmErT1YrZXJ4dklqMlVibDZBM25Sc2t4a1d3OWZOQWVqVndNSUU1UkhFU281eHIxeE5LczdjY044TnczMU1mLzl0UkFLTkRMSEQ3Y0w2NW1tZXBhb2hrblBlTFluY2IrWkdBVnMzUW1lczV5Qkd2NHhiSlI3UnVXaktJV3dRNmxmQ3RGdEhBZTBXQ29vMURDK1NCNkpzZG5wRW1QZ0IyZ1NRNkpVaThWRm9JQmhWM2toQ2hmMDJZeGo5SnZlZy9US3FUd2czZUhQTzVzVmtXRFl2R0NTYUJ1cUk3bmFBOW9OQjg3Mk5nb3VJUWJrRXJIYjg4SjJkTmpTNkpwRHJUZlY3cmg4V3J4a3I4Y0IzWmgxMktuTW1LcUhvMXBPZW5odEY0NmF6RTlMYTg3dWNSdjNKUjJ5eVE3bUlObGZkbkdqblVKZXQvRjF1amUrcU82U3c2dllTcDZEUnNpR2dKNUJjeFhWbzNSNUxWK1lWMXV1emh2aVhEK2FiMVpHTkR4MlB4NG5yYW1hY2J0cUhLb2N5djMwZXpCMjhHcmtqWGUwK3hBa0J3YVRNekxkWW1GTzlPL2cyR0llSEFTVk5yVHo0VXhySThUeEtqalZKcXJ0MVhyZEk3RE0rM0RlK0NRMWZXNS9WM1RYSGRmeG9yRXdNUFRieHJzUmFZcG5sS0hNeHhaSHMrSmNmTWI3WEdwUEJXbUxmdUNRL2ZTemV2MlBSYXVDejZBbGwvQjRFQ0V2dEZvOUJyR0VkWnBuSU9JK0xnZ241QmJxT3dTYmppLzFocUJhMzRuOWZKOUFEM1U4aWJ1YW1HR2QzVzFMdVJsTm9oem5Ma3VpUGVEMWozQ0REcDVUVk5HQStGaGRYb2FZRXlNVDBxVHgyUm53cHM4SXRCOWZISjN5YTVGZWdDbGZQMHJSbGw5ZDdDWjMzM2ovaGczRzJNdGF2TTFmQlVOQnJOMVRlRldGMG9jN2l3Q29RdkttZVNwaEJSZUh0eXcweWl3OTBuNnhwZ0NZeWttb05LR2htaDBJVlpZOEtCa08wVzFwcVlJaTlNaVRWRzk0SjJqaCtjdk9TMFJzZVFLNWdVRDhFQXFQMkNhcjlJalZodFYzc3dQVk56VEIzdndZQ2tpV0JVN3I3M040MkJBbjZOMUc5Zmw5TlgvRDVBK0ozazlSNk5VVy9OeWJxVHJWc3p3NXpmT0Q4Tm8xb3RZdlgyU2dZTlgxMERjNVlvUHVKTFVqNjZkVHRjT2wvUEViWVpQaHJpMytPKy9FOStOOWpiZWFRck9RNWdKMTd4MENKMm1Eb1lZb05CbFROV05IdXp4YS9EdWZqcnd2ckcwb2crWVliRkNiMFRCRC8zbzdpdHpON2R6WEdvZHo3ZkozNnhzRE9reU9TQTQ0TjhySFB2LytUTWFERnBKbjQzNE44NU0vbWNxK0NLb2lnaHl3ZGprbFZ6Uzk4SGc2UUdCR1Yra1NhYTFLMGx5UjVUa0RjRE4vWUpUcFIvemZielNrazVldkY3UnVkRllLSnFtSWhFaVJFaXIwN0ZFQk5hejRFS3o3ODBCTjNxSzlyT2IrNFlvMTh6NzU4bmNrZ1M2TytQZ0xIWmsrdlhlcjdJYnU4QnF0cmJzMWYzM214NTJIZXlaSngzb2lHODBYemRiQTVTLytFSjdMeEVmczJkUHo0WWdhc2Vod1JSYUxLTFRrWWdRSlhrUFJiQWgxanFYbVNyZHp2Z21mRSsyVFovZm00anR5K2RqKy9mRzgwaVIyNm4vNjUxaitiT2RFZVYzZVpMNzRRVWlzSWJScjNTSkY1VG9uV3hqZmlJR2VkM3hhY3VYWUkvWEM5WHRoWUFZa0RVWTN0MUVnVE5PUmtnRThRNFVEU2dVUWNPSEVBdWdQSjZGOXZVWlFKNG5MZFFyLys5VitHZ2E0dnNReENETlg3NTk1eU5YcE0vZld4QW5wOXcrQzZqTkluMjVVNW9zcVFHckdIWHBCTzROamJjdTZ5NWZjdkpvZHJId25wV2FGWFdEVkdGcVhmM1pXdU56N0Y5ZXZ0cnlqRzVoYVRvSFA3WHZ4Yld6YTJpRmdObFhwdUtjSHlLNnRITDVKa2l4UysxanV1bnV3bHFEMzcvVzBGM1FUY2RJTFVXMEdOZzNGYzJrcDZOS2k1bEFUbWVtb0FrSVQ1clp4WHozZmRtcCtRTm1HNlJGeHgzRzZ5ZVhpb3Baa1Z6ZmxkWXJUZlRaenhZOWdvMitnWVhtWUloUzNja3Q2RUVQZXpZMjNaSGhqRzB3UHVIdDF6c3o3WXNkR2VQdVpZbGVNTUlzS2EwbWJURnJ1bE1HeTNzbUplUkNzcGY4UHV6UTRISVJxZGFJWExoRTg2N1lnWUJkbnRYa2MzNmJVL1A0dy9rcFpUOFU5RjBNMEIwaG9Gbm9OYTB1Y1d3eEZpNTBzN1QxNXdOMHdxVFpmQjdyTFY4eW1oYnFiY09GL2phZGF2VWZOMnNoWjBHUTFwYjRONDJrZEduMGNWVEQ5MS9XTXljbjVlcUlSVC8xK2RGa2IwdlQxZ09KdVZ2ckNJZjIyVXVLcHA5MzZTRlcwcWxzcUZ1bUpQV09UQ3p3VTc0WHNLQStXQnhucUROVmtBZkFxSTNqV3FzaHluOUhNYTk5U3ZaQm1Hdy9LY0IxZWpReW9QRlk1c3UvT0VQRDcwVHlXb1EvaWZWUjNsOHFUU0F1dlRVWDRGNFNlWTBhTkZ6UUFpVlFGZzNaRDdHLzMwRUtOL3BjRXNBQlNqQlhZOWRpNzRybFhwSmM0ZFY0OGphSUJyQXk0d3pMd0lEVlp1KzNXZ2ZzdTBOcE9jWXd3M3ZYSFpRY3JSQzNOdFFzTFBHbUVNWDFBOHNIMzBZWnVnQll1anhDTHc3ZSs1TkRUZGRROGViR0IrWWc1YVgwS3Bxd0l1cFNMcjN5RDVKbkZ4VHZmYW5wNk9HMCsxK2RtRjM2SWdHc3c5QkJjUDUzbmZIUDdObjNRWlhwc3hNK0tweERObjErQXFXQjRrZGpiaWFZdnZQcVA3V1E0Sy9EakRVWjcxMy9EYkY3QkdLU0tKMDhYK0wxVFJSeXgrVlc3Mm9PdkExM0FRdXJYdTA0OXQzTjlGS1lFNFczYzZFOTZhMDF5WWR2aTc3K0RCUlh3OW1SQy83TFBHSmxrQSs3UjcyMjFjR1FmY1dveTZVS2NyZnhBdkFmQnlENmNOYWN0ZXFIQ2FlK3BDbG1MR3RHQmdtQ1NQN2pCSFIxdGQwWDk0dTM2MWJEK1lsMmdZczk5dGtvQTF1Yzg2NFBmQlRpY2FwcWV2aHFYQmZlMmJQbGkrUDFIak1aRmF1NEJHdVZNR2wyNklhS0RsSjR6NjlYUjlHeHhYSHM1MFdiTGJpOEExOFJUZUVyaDUxV1paVDFoVFRGZ3B4OFdqN1NQaXFUNnNrMk9LSDg1cjRDNjRVc0RLenFuQkdYZlVVb2FGODk2blVKbmtTdittSHZSSWlLTUJoVVFPbnp6R3ZIMHE5K2FzbVk5YXBxWnF3V2M4YUdET01FTWxnZVFxQlNoMFVhUUQyMkk3c2VmVGFya0ZnTE5uT3BBMGVIK3F3ZDZnL29kWCtWeVd3MEIxYTFtL3lMUGM1VlFaOXoxWkpPOExYYjRZb3JiZDEvV0xtZTdVRUI3QnIxMkZjRmcvWlZvMjZYSXNBOUp0aUJLZGF6bG94RlAwUVF3T0pwUVVvRWpndzkzVnNRM3B0MHJDS05vaDZuSnlYVkdjT3d3Zk1hZGNYUStVUnZILzUzNSswMGVZNEVnNS9aTCt3ZlV5MXBHSlVrblpPam5iakVtSEVZaHV3WTBwK3htNHhaTTFLMDJ3MURXY2M4YnNpbk10bWlaV055dUNCWi90bmhIWWp6L2daT3FMdXNnd0J6UVZkdFBGUVhlWUR2SGxSeGN3dHNSMkkxalI5U0tpZHZPYjJwazdEMC9raUt1T1h4M3BtRHc1RkFIUmJtWFZsWithbFN4ZSs0SFN1ZGl4ZmEvUEpZWTZFZW1vMGt0SnI2OGg1MlljR0t2c0g5RDd4OUZWN0w5Uzd3ZEt3S0J1WG1CVzdmYk10WjBCSVJ6RmxQY2IxbVk4bnRwc1gyWWdBdXMwY00wcXhSTFBXdDExS3h2ZmNqcXJnQzlhckUzbThKN2ZlSlJjUVZKQWVzODRyNnUvbWdiVW5xZHovZzBDMnVKb1Y3a2s5L0tXQ1ZMb3dXNU9SUzdsdloyai82cUNPa2V3K2Y1Mkkycnlxang0K3EyNS8vMXlUOXREby9teStTbFpsejlscjhPZGRqdUNIR2xkckRCbkVHRXduSlhCWG1kSjdYcStKS3RCUG1QUmVwZXdtVzk0Uk9HVkVZOUs0OCtyOGlFaEF6blR4Z1ZHZEU5T0swRVhuU0NGZHh2RjhhNEtUQzFOeThacTI3N0JOTGlGY0NITUQ1SGVoWXRjaEQraFo3OEZXQm9CQU4ra2hMeW15eUFJR1djbGE3TFc4MWxnaWNDUWR0ZGlhOE1QQUhka0h5SHFHM3BJdWh1ZXZNL2JpeGdQeXNaZTRSd3I0czRMY3ZIM1c1QkU4Z1YvNncxK1J3ZWpNekNSK0p2OC9HOUVXOFF6K1F3ZUl4WktDakErblg0YzZ0bjlZYWZVTmZsOFUrYzFXTWR3dlhBOGRhNlozUlJ1RHNYYWdBVnZUMFp4OVE2cGsvcXNDS1NBejgxelh0ZnRGZkVETlR3L25NYmg2UVdSWlRZNEtuNS9PRlhmZlNBai83NmJCQWRpWW9SRnA3YzJNcndYQlRadDVwRDFzbTJHSVZjRWZ3dHAyMGFkZjJpWlVYSTN3RFdsQ0FWWkk1VkxmNjZtTXdHWUF4ekN2bGlHbys3dmlMMTlZajRJS3owN1pvc01QVy9QcWYwL3JJenArbVAvTzdKeHhIMEx6VFo4ekd0R3NPM0VJVDV4NlZUclhXK0w5bGdlOVVNTFA1WmJmQ3ZPWWxHbk9pZUJwRW5SU0J4TisvZUJOZjBqYnR3RUU2QmFvelZ4VjRxV09MUTcrNmlrZmRHK0JLd3V4Q3lJK3IyYitnMk5NdGtYN1I3Y2ZWREtXaS9nQ0VrRDFjMUt5OHNMWGh2Z2VPUHZoNHFKWjZFOEdyN05UYkVGUGMydkRzVzJXOG1sanRGcDZjQ1pXb3NyeVJISzNROUR2Ujg4bTI5TmtWblh1cmlRSU9pU3NhRHArdjIxTTRmbFVjTHpZZXZCQUM5citNVnFOdm9EUkNnVkZqY3lnTlhLN0N4WUZqYi9sbzA3VnZaUXRsMG16bi9PdHYrZEoxMWR0cndIazFVQTZ0ZEN3ZXMzazBuVTJMU3hzeDdOTVNQWmV0c21hTXVrSkhvUFhkQ1I5SDZvem94R21yMldZeUpaTE9aRkFkZ3cyazlCQ3ozWDY5M09MeUdUc3kzcStlZUpKc2U5MnlhSWc2NzEvZjhlZ240UEFNeFFLMlh3MEx2ZmRKOUI3YytRZFNUUFN2bENyWjRMaC8yaHFtN3RiYVhEYnpBbGh1ZFNFbzdBZXVXbXFwenkxWEtWMXkxVkJycEtSTHFWUzVsWnFlTjlxOUJzVG1OVW9RTVdSTklJR0dJMFhreXNFU2NnVlpvN0hoWXJBMGFBbFNvd284RlZmdXkrWEZtb3JoT0VFb244dTV4c0Y1WUl3NWNpb25vTUlGaDIxWFIwc0hpdXVtRHRKZncrbm41aFNWRldMK1Y5UlUzRll5SUZKdlNHdzJwTlV5aWdYOEt1Y0RtamFPTzNCdm4wNlhzUWhiZk9hVWRQYm51U0RXbWpJa2s1MlRZVjFhTkkzaGxraFdyS0VaUGl3REdyeVBjUGI3L0l4bHo3YXBIa1RoL1lXdmZtc3NGNlM0a2hidkQzcUprUVVXWEJYbmZpQ1VVa2lKalFKbDhMWHRFOHFkSTZqRmJkRjJKN211Mjd5WGw0M3o5N0M5ZzFTTjJXd0VvK0REa09iUGVscEVIWGtkMG0zRE5Ja3VqVk5LTkY5VEllemYxcXhwcGRDSW1oZjhOd25hcnY0UC9WT01NLzN3UWN3NjRESUp1M0JuanhEd0lEVWpOM25hTW1vamV6bTZQRERjRngrT2w4TzVRdXcxOEdRbTRDOGE1aC9SU3o2UGNGVzZnQlRGMlRHVnhWUXFPbkdaSWFLR1l5YWRPQlV3V2h3cEZNNFkxTXBZQWdIWHEvQnRlTythS2JjR0lVV2dNS0t5TlNSNk5oOXV1Z1lzN0NDcUhDejB3cWdwM1lmWWJIbkVsRVpoZ1dmSlA1NDNmZCtPUzQxSU1xc3pHak02SkdtVXZ2Zzl0SHlFZ3ZDSVpUSzNXRUhBUkNMbWNpZGlSOFRCM2lRQnF6MUJxUnFXSi9EQVJFOFMxSi9VNEl4TDBFV0JnYjZJK1FMeDV4ZVB4cmRWNVNmclorRjJHRWpzVVpYVk5IZ2FETWROV2tzUU5aL0hBS2NOR21VMG52RUVCSSt6T21FMWl4eFhQbTRtMWJCSkhUK2tWSGt3bzhwWEVBa2FzWndUV0MyQUZmUlZZdzAvVVk0dExxMVlxTFNqWnl1YVI2ajV3SmI0QW0reVQzR1dWWHVjM1lnTlU4M2diYmxjOEpLc2ZValEwTDVqM3BVRmNYSUdjb0FWMEM3dytiNXFSaUpXeEJFcmtuOFp1WGV5V0FvV2ZlbWxBeGRwdkxkdy9yaHFYYnZhc0VYWThzQzFoZnlLY3BCOGI3bGJ5UDFYQWU0V3NjTHp4VU5iZDNYMjFOWTNQRUZ6d1h1THR0NVJmNWlLUFNXUUlqc0l2ci9Wcllidy9PQzdDTDh2TS9CVEhIWjU1WWFKTXBET3Q3UnRhdHBaT2R3Mm4xNURoK3RMalM4QWZ1WGpQUnpldWI5UUJ6VnZkcllKaFFFVUgybWt2MHk0OThCR3duZnZpanRvRmJVM1NkcTJYL2QwUzN0THl6U0w5MU56ODJPZ0JQZ3NhdSt5Z1QrdE9BZzUxSENmWGRHZnluR3FFUlR2YThBMnFQTDdQYTJOM0xzL25aZEFLOTl5NkNrMjU2NURMVzNVeExKUlkrMnQ5L3h1dnJQWjB0cFNXYjZ0MHJmVjByU1AwOUhXdXE2MWRieTFUUXVpRXJ4TXBKZmNwcmRERlRVUFZiTkZOenRZYWoxbCtkVzhuNXBiWHVRMHExdWFENE1ub0ZDaTM5MG51aGpmOXlEWXZ4eXlJM1NhRjEwWHgwcmxKaXc2M2Eza1U2cDFLMmR3a3Z5eFd4eXIxYzhUT2tGT1hXS0txajNiaXZJRVgySEdiYnBBWXVYRGpxcEQxc0UrbjFadG5jUkpybW1nY25pVkRPdXd2UFdTQ3V5d25uOWFZN1V2MDFETjZ4RFR0MXFsUTllN2hVdGJoTUtXcGNKRUJTRmI5ZVVZWEFKSDVucTBrdnNoRG0xRnJXVzM4bzdCMjlCbHo4NTlXeVBQQTErYmp3YXArUHhraHRkMUlLSXc5ZnpseWs3VjJrNU1ubXVWWHNtdHRVTnpySDN4dHRZSDZKcWpPS0syUStlbXYxNzVQcVEzOFQrOW02Uzd5ZlU4cThEK0J4aFRSZUhDdmpUbldrQU05MUpZMlFrYjVBR1BRcVdKcUE3Nm5sdyt3L2U5T1lCaXBpNGQya3RJZU9ST3YxQkZjVythZ0NoQTNlc2xFWFVHYmNJR0FSVGM0bmhUMTFCWjY2WFh6VEZMRk55WklUNU1MVytyeUJtb2RXMlZyRVhEUk1acVJELzJxeU1MNzJYZ1FwR0VMZk5vejcwZ3ZvN0JrQnp4V3A2ZWhBVmFjbnBldFhrTjZ4SkdkZ2lKeWhwSmg3YUNNSWdETWNwUlQ4cWlhTHZMN0dhTlUrWm40dWlscmdhM1lvTStpS3NISHFqOUd1NG5ncnBGSG9XcnZsRlFQc1BjcHhsanFPTHN2ZG1tamJyZW1zSHJhOSt1U3NHRCtvVnVwYnNPYjdGeFpZVTZzcXhSYmR4MG5XT3hra2tpdXM0dm53L0swV0NKUjV1STc1WFhUMzE0QnMrOURUbkJ4YnlSbU5HNXd3NUJnV1BVSmhuWnNsMldXM041KzNVcmRpVTBMaXF4SUM5ZkpodWZObCtXVEpxdTBMY1Nra3hYNHpGQWU1UldSTFZjUGo1VE0xTkZSdFA1YmJma2MvWWJOTlVJaUxucFRCTFRzcnNwZ0NNWngybkZha012SnVjb2lqd2FVTWFLZUw3UVF1ZWo2S08yM0pGbFFJdFV1all6Ty9TWXVFMDdmYnZJUk5HOE1uY3BvNWQzbDVsSzBqSWptZHU0OVk5Ylg2bzI2WWxaYzdQZkhmOTB2TWRtSGx3WlFUeUhETlgxR2w1azFqN2NQNC81TU5FcDQwUUp6VE0zR0xpdjBKcmZCUjR1QWZmMHFCQk1XMEtVNFZtcTJPTXFjTE1kVERldmFQaUNtYlk0d1l5VkwxZ1pOblZSc2o0SExwYUF1ZWFucTRMY0NwbFhwUktpa3ltVTZZYWM0ZXUrRUlvKzEvTjUrczlGd2k5MFFQMk5yZ0NLR3BURExES1dMYVJXNmtiUGFtTjNFWm1LUklRUXlkVWViRVMwK1hHcWRxaGJnTVNtNHVIOWhiN3dBYXFPSVYyQzRLUFV2bUlFTDFBUGZBMzRLNWxtaXhWMzZHODBLTHNiVW8xQ251ckN5QlJGN2tjRlMrOUVzWVgvelFmZjhCL2JmZFBreXpzcE1JNHFqcG5zWHJyQW83LzFxZGZuUzBUTTNBYVMyVVR2UjhlTFZ1TGVqdXdMbEhkYnduVVdYWkZWbW94aG5hTExqakNiTmZpWjJRSkpMZ2lLMjhxT3VreWx5eFp5ZXVKUDNDL3BJYlE2VEYydWhYZ2FjS1pXRmJ2Z3ozR3Z3aDVnYUdkdElDSFpkQVB3UGFDekl1amFlMWZNZE9GOTJkNFF3V0h2T1gyTEtESmxqMmk2Tmpmb2hxc2doRnV1RzloS3JhWE4wb2hWMEVPa0dhTExMek9NdnVoWEU4dlU1ZGJvY3Nab0RNbE1JVE55K1RXaTBKS0lMNURVKzAvcGQwZjBRNG02Q1hXcDhNSFFJK1Y5bmhuY3dTREtNY29RL2NoelY3OWJLYysvdnZnNS9TRndPNzkwN1BENXUvZFV5dmV2OUQyalgwWlpkQWVTUmkvdmY2cTgzV096SnhpWVdoaktIOXA2RG1LVWR0dzM1ZjRTeHF0Ykg3b2pTY1dIRnJuVytEN2xZbTFOaytIbWF5cndkUFJDdmZZbThNc2xqeG9mRWMyTXVEWDMydy9NTStpbHV2enJEWndUY2VsdHVwOXVodDBHbDQ4ZCtRbkhXMDVVc2p6WGEvbm4yYk5zODNUOUVIWm91OG50NDhzRk9QczE3ODkzQ2JYYjJzTkxXVEdOanBVNEFNT1RyTGhXeTQ1UFhxdVZScXhPVlFUV1NHTldoeXI4eUI1NDhvSldZQVBaWGNEaHpjS085Mys4QitPNVI4eEtxTjVjbW95a0ZDbzFyaFlGWUsyb2hHZXpSdFFWakc2cDhqbkFPbFVwaitQcWJjUy9ubElDTldRNEM3QkVjUDFPYjkvWW5jNnRhNEkzTG5KSVZrYjdObUhkV0tqMndyOVp6S1RpNzVzWEsxTkRlNXhkWTRvcHo4ckUvUWVuSC9jc1dYWXFGZG1iY1FqWDJBZml0cEJFR3BHN2ZQSXV2ZkNyS3hWYXY5WVFZbVdramc0M3FBTFRmSmR0ektvVXhueEUvM2ZST20vUmpLaTd1ekFuT2FnZ1NGblhucGJySUhDMkxOZVdvdkZsMnBacXJnbi81S0xrc2pFaUlNTmkvSWhFby9SRlpaZy9heFlES1MvWUpVenJVN3RnaDl1RG03anRwQ0ZJV2I4OTJ4MkkyeXF5TVNyZWJyOUlxMlBXc0oyTVhyd3JOU0loM1FBNUEyL1pVSUswMWZid3ZtWUVGOHFHcXBCaUxHWHFYUzhldXdaaUxJN1Y5cWFQTGhqMjBVSlA5MnFWRjZWNHZVUWRZczM4bDlCVmdTbmNZT0c3WlZrdGl0cmZmdnRCMmI3UUorS0dtbk5ldkpValdldmhpQkN2VWlHTlBkeUdlQVhMdDBKNGZwQ2MyR2tGOTlYVFVrRzRWL3RxcEtYSDllbXBCeFZudjJ1RFhYcGZFOG1zbW1OV2xPTVkyRit3eVZETUdTZENZZVBtWW02VG9kT3lDem5UNW5ESU5GSFFJaVg0WW5VNm9WM3E5VWd3bmN5bE9HYVNabytYU2FRbVZqdXpCazNHYUtRWFJ4Wnh1ZzFKdnMvMHcyRDRmMXZ4eVVRZUdCWjV2VElEKzRkYzhzZDRUKzNRdmxmQVhCK2FJNytVemM3ekZBK0xPWnhmNUtDOFFtMXZmOHhJQWRCb1V6bDFOS1ArUkhkRjRmaXA1bGNhbW5ZM2QxUzF2MWIvdFdQSVlpOFJoTDJrNVE1bmFVR2c4VG9hMTJpVG1GbWJVQTBVVFdoMENUT21TK3BpZ0hjbHBEaHg4R2FvdlNXakxYUXIwVklFb2gvejFLVVR0bjNYZU9nNzlEQys1Q1NVNlJyZFBlbVRYLzFzaWR2NkQ1Z1ZhVlpzSlRQblV6c2xWNnZGVXZYVkV1blZISWxFYzdWWFpwTkxiYkt2TWJCc2I2L2tzMytMb2VYVFY5SVFzZ01OOWwwYjJnSlpuUE5wT003dXZaNHVXYllkNTlSVE9UdzNKR1hwbnZxcWhiWCtHMERLVkN0Z0VsMVVMUlBmM2VyZ2tOOVBGNjRFRUhXWlJ0M0UyNjIxZlBTSGFqK3hTTDJIaGx6d2RUMnpxdmgvd1pkc0NFak5vNG91SUxkN0ljZTFiUkh3ZnBWV0JaaGpmWmlaVEF0Rk5WTUxnNmdXTWhocW1XaEswUjNFcG9LdHh5dVd6UzFxNW1ycE93cThlVnkzQy9GUmVSTUlIS2VaS0VJK2VZaXVvbWwyQ1BvTUZqWDZxOEJsdjBjRTNWdW9RazhLNXllTXBkTkhJSWtzM3hoTENTWGxmRThxdjN4K2p3OVFZcGhTNHpMSE5mM3p0ckVtTUowNEcwMTJVc1BYNSt0cXVrWGJWMmhLYlVrUlRJNmMrRHhEZmxNaHhvc0NJYy96Z0poSEZVdGRqeWx2V0NrcHVMNDJkV0RmcE9sdWFxbFoxaE5CdE5zTGZCR1JxVUptSVN2OVo0RkVla3Znald0c2JHcjhRZTUySTdpOUpmZ1JYZ09RdlY3YkpOYXQrT3R0WS9Rd3lrdU53SDRqQzFiNVpVdlpwNyt1cTJGa3VyczRtZ09oZHJXL2Q5amdUUTY3cGdLRHI4aG0vazdvOW83czUwNnkyQ2VlWTNQdU84Rm1uYnp2YnRZUExhMy9XL3JaRkpaN0dnSU0zNjdYd1BZamdNcHIvRU1nNFhvRG01R3VsMWdIczcvQ0lTYWIzenVnazA0TWFBMElWRVV2cm0zdXBXRFI4RGNLaGx0UU1GeU5naUVUSS9nbmU2MmtUZDZjMmRiazVXSERyeDdaSklzcWNLWXZTdUpSbElhaW9CdEZ3VHNvQ3Y2VW9nVEFkY2dKTGNnSnp5SW5QSUtjOEtHVW9pOTB3ZlNhUnV3QW9vK29xYnFSMnVjUnBnNC9jajNCVEpqOUtlWng0R2ZqbW1BWDVUbVdZQ2xUTU55bXp3UWx4V21EUjlWKy9pT2NKUFpmbUI2SGwrQUdqWTBvNHRSdDF2Y0h1NGJGYW4yeXorQWJSak5iOG8xU1RqZEdHcU5PeFg0U0lUVnB5Q1BYSTh5aGlUM0JBaVllM3pJVitLaGs1aVJDUG1qVCszU2xlcCt1QnZuZzVER0xRZkVYQThFQTluYnJuWG9Bc1h3eGU3K3VJdEFJZm8zNjhVZzNRbUJxK3dqb2JmUXgrZ1I5aWo1RG42TXZ3SmZnUGVrclV2d2FxU0srVmQ3RDcrRDN6QThlMnZoMkl6RDl0ZW54VkQ2SkM0NTEyeHQ4bGo1SGZUOVBmeHArb3M0SHRBVmR3WXpLbktxK1FzenhleG8zckd3TGNyZDJWZFFRTjFtWHgxUGN3QzF1NHNQYnpCTkVMdjJMYUxEZFV0UDJvYlF4SzhhekhvTzRXM2lEM1Q0OWZXZVUyZWZSM2Y3L3lMRllabURRWHZjOUs5bGFnVVVBTWVMZWZ4YXNBakNIZlZnQVpCNklkWXM1MFh1MTNicUxGOWIyNEk5WkQyc0RiaTE0L3o4Z3kxaXhsdGpndk9VQjVMb0FnQlhZemFsSmdzYU1yUjF0WFlkUlJsR0g5UlFkc0UrNnhtUmc4eUllbzhveFJ1TVFCU29QdU1PTVlNTGRzNHhHQ0orSDJTTWk1YWJ1cy93Q1ZZNXROQTBYbTB5OXhHTTBKdEFPcTFwZ0swQmRLQWY3REtHdjBNZm95OUYvWkdsYWxOdmx3bmxDY2hndFJMOWxXNkFyNEtOK29TZGdJeFhwSUp5RjI3Z08yTy9OQWxoMVZYZU5PeVBkOS8zU0lLQS9WQ2szOVk0RVBZaXVIZU1CSEpwV2ttM1FlSkVMUEVZTDBXOWdnWkthOXpHSHp2OGJJN0RIZS80WWJoZmUyRTlpb085Sk0zMjNidWJzU2tRdmlNdytuM1FOSlVlOHRPdHJ6eTV2MkVhNjdBMnhWWlRzNHU4eTFqam51NTNOQzNrRWJpRS9aanNpdWxPajIwUTY4VTZZRWltdHhrdXVDM3ZMOFlaTG8yc0ZFYWRReHV2RzlsRTBldDYrbGsrN01RSG9OMFBZbHNhWGIrdmFOM3RyMXk0MmRWbWtmU2JWNXhpM0JiVjF1MTFNOXdEMGxPekxYbllDUjkwdDR3dCtyaXVvS0ExOXl1d0QycExBSndRN1ozeStjSW5pOGtnNjE4blVTQVQyTzZWSy8zV0JJYTFoVDJldzdFb0ZTcmFNSWorVFdFMCs5NHJhSEFKd0VUOStaN3BsWEVqcTN4REgzUURnNUlHTys1TDhMMitKLytpd3p4UE14Z0VpQmdBSS9peVpvSEFtTVAwL2VFNWs5eTZpTmUxazZ3N1d6NHVjcnFUcHh5WjNCZVVKdjJSeXAzWEZUUFlkeUw3Skl3UjRSa2p6TjdhelhpMkNJTUUwcFRYb2RaYzdJU2pkK3JMNEZIeEdFeTNBUkhVQXgxVi9MWnZpamw4d1dWMm0xZlNDZitzd2MwVzA2T3FhNW02U0t6eXRSbmhRVmFnTTZNY2hSZ2tKTVhZRThZaEI5dW1Lb29UcEdScU5rSzRmeDRPVyt1KzRDcmNHWXJnVFo1dm1HOVRVanRmbmlxWVpVV1Q2VWcwZUUzaGtpVUc1bkJwZ2pGMTREWGJvK0RRUmJmcFYxM3pNcGxJSkN1YytWTEp4R2dhenhGd1dJM1pMbmo2NVg1MDB4QjAzb1owTUw0YVNQNkd2UVhLYnVQTXJVcXZtYVFoM1VHWnJSVVpOaVlvOXRYVFJVN3hHbGRTeXBZNDViQXJMVUxNenRBYjY1aW1kSU9hUkRZcElVRjVCc0lvN0tRNi9VelN3dEkyU2VkUzFrN1FvSVhQU2MwR1RGNHV6V2h4THh2d054RjdoOXIxMkxMWVhJZDlGRDVzck8vUzMyYktlV3paUEpxWC9BTTNRaDFwdWZTdDc2amlRdllFbDFtTTBlTTdUTWt3QUEzdDlTRG03NlphWEtMWjU2NXZwTzBpeHZmUXlDSTJqNUJPaFYvazJQaVYzc1J0NEtxRmwvbUR1RG5VejZtN1Z2NzhSUGIzSTFqUE1YVkNxVllpZitFVEZIblczcmNoTWI1MWUxdXVWcHpMMGxnR1RJQVVNYVJVRmNLQURzSUVFMFFJWm1LZnlEVWxGWlljbzJhNi80M1FEQ2FYc2tjTUdPSzJzNUtGenFQeWk3c2pmSjlTOE5Wb2pqOG9YMU1qdXlmRUVRSUNQY1dpbUFXZ2pMQndrSnEwT0pqaWRIWnoyaVkzT1p6c0VrZG5yRU5seW5TTllZbDV5aERLWFlnOGoxYnFUQ0Foc25DN3k1S3RRS0p0WGxtSXloVXU4TkxMQkJaaXl1UU9VeURiSmRFVW15RFdackw5Q2VhYVpZaElIN1VTMHVKWG1lYlRJaWpaQmNyRjgwMjg2SnlldjdFeTF4RVFPcXNtVHc3bkt0ZEFVWmV6eVRlRGxreTNYQkdVWjQzTEtwaDdRSEs3eHFlQVFldnRvY1dSbEV0SmxBMDFSWk1wUktUVkZYZXJweFZ4RnhiNjhuRjdqc3E3R2JkVTIwQnVlSVZKT3dzZkZxNFRQQklVU09MaTRKTXJRVno5OWRaTWhhUEM0V1RzWXlnRW5acXM0bXJ3WUtkeGV1UGxZS1RMSnFEUy9WNG80aENvK0R2TlFiL1FJK3ZIb3JlZmdNVFBNbTRZNXUwNzVQNkpJWGhIL2UxL3lud0VBKSBmb3JtYXQoXFxcIndvZmYyXFxcIik7dW5pY29kZS1yYW5nZTp1KzAwPz8sdSswMTMxLHUrMDE1Mi0wMTUzLHUrMDJiYi0wMmJjLHUrMDJjNix1KzAyZGEsdSswMmRjLHUrMjAwMC0yMDZmLHUrMjA3NCx1KzIwYWMsdSsyMTIyLHUrMjE5MSx1KzIxOTMsdSsyMjEyLHUrMjIxNSx1K2ZlZmYsdStmZmZkfWJvZHksaHRtbHtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS40fWh0bWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLXBhcmFncmFwaCxwe2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjY7dGV4dC1hbGlnbjpqdXN0aWZ5fS5tb25zdGVyLWgxLGgxe2ZvbnQtc2l6ZTozcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjE1O21hcmdpbjo0cmVtIDAgMS41cmVtfS5tb25zdGVyLWgyLGgye2ZvbnQtc2l6ZToyLjVyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMjttYXJnaW46NHJlbSAwIDEuNXJlbX0ubW9uc3Rlci1oMyxoM3tmb250LXNpemU6MnJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4yNTttYXJnaW46NHJlbSAwIDEuMjVyZW19Lm1vbnN0ZXItaDQsaDR7Zm9udC1zaXplOjEuNXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4zO21hcmdpbjo0cmVtIDAgMS4yNXJlbX0ubW9uc3Rlci1oNSxoNXtmb250LXNpemU6MS40cmVtO2ZvbnQtd2VpZ2h0OmJvbGRlcjtsaW5lLWhlaWdodDoxLjM7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfS5tb25zdGVyLWg2LGg2e2ZvbnQtc2l6ZToxLjNyZW07Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjEuMzttYXJnaW46NHJlbSAwIDEuMjVyZW19cCtoMXttYXJnaW4tdG9wOjMuNzVyZW19cCtoMnttYXJnaW4tdG9wOjNyZW19cCtoM3ttYXJnaW4tdG9wOjIuMjVyZW19cCtoNHttYXJnaW4tdG9wOjEuNXJlbX1wK2g1e21hcmdpbi10b3A6Ljc1cmVtfWRpditoMSxkaXYraDIsZGl2K2gzLGRpditoNCxkaXYraDUsZGl2K2g2LHAraDZ7bWFyZ2luLXRvcDowfS5kZWNve2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMSkgMCx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTIpIDUwJSx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTMpIDEwMCUpOy13ZWJraXQtYmFja2dyb3VuZC1jbGlwOnRleHQ7YmFja2dyb3VuZC1jbGlwOnRleHQ7YmFja2dyb3VuZC1zaXplOmNvdmVyO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpO3RleHQtZmlsbC1jb2xvcjp0cmFuc3BhcmVudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjp0cmFuc3BhcmVudH06Oi1tb3otc2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9OjpzZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX1rYmR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czouMjVyZW07Ym9yZGVyLXJhZGl1czoxMHJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTtwYWRkaW5nOi4yNWVtIC42ZW07dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfWRldGFpbHN7bWFyZ2luLWJvdHRvbToxcmVtfXN1bW1hcnl7Y3Vyc29yOnBvaW50ZXI7Zm9udC1mZWF0dXJlLXNldHRpbmdzOlxcXCJ0bnVtXFxcIjtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjFlbTtwYWRkaW5nOi42cmVtIDFyZW19ZGV0YWlsc1tvcGVuXXtwYWRkaW5nOi42cmVtIDFyZW0gLjc1cmVtfWRldGFpbHNbb3Blbl0gc3VtbWFyeXttYXJnaW4tYm90dG9tOi41cmVtO3BhZGRpbmc6MH0ubW9uc3Rlci1uby11c2VyLXNlbGVjdHstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9QGtleWZyYW1lcyBkZXRhaWxzLXNob3d7MCV7b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0uNWVtKX19ZGV0YWlsc1tvcGVuXT46bm90KHN1bW1hcnkpe2FuaW1hdGlvbjpkZXRhaWxzLXNob3cgLjE1cyBlYXNlLWluLW91dH1kZXRhaWxzW29wZW5dPjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0ubW9ub3NwYWNle2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHktbW9ub3NwYWNlKX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17b3V0bGluZTpub25lO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXh7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9Omhvc3R7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6YmxvY2t9OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LFxcXCJRdWlja3NhbmRcXFwiLFxcXCJTZWdvZSBVSVxcXCIsXFxcIlJvYm90b1xcXCIsXFxcIk94eWdlblxcXCIsXFxcIlVidW50dVxcXCIsXFxcIkNhbnRhcmVsbFxcXCIsXFxcIkZpcmEgU2Fuc1xcXCIsXFxcIkRyb2lkIFNhbnNcXFwiLFxcXCJIZWx2ZXRpY2EgTmV1ZVxcXCIsQXJpYWwsc2Fucy1zZXJpZixcXFwiQXBwbGUgQ29sb3IgRW1vamlcXFwiLFxcXCJTZWdvZSBVSSBFbW9qaVxcXCIsXFxcIlNlZ29lIFVJIFN5bWJvbFxcXCI7LS1tb25zdGVyLWZvbnQtZmFtaWx5LW1vbm9zcGFjZTpcXFwiQ29uc29sYXNcXFwiLFxcXCJDb3VyaWVyIE5ld1xcXCIsXFxcIlJvYm90byBNb25vXFxcIixcXFwiU291cmNlIENvZGUgUHJvXFxcIixcXFwiRmlyYSBNb25vXFxcIixtb25vc3BhY2U7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTYpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTQpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi02KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0yKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTIpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi00KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMyl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS00KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTYpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTIpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMyk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS00KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTYpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNil9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0xOiM4MzNhYjQ7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTI6I2ZkMWQxZDstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMzojZmNiMDQ1Oy0tbW9uc3Rlci1ib3gtc2hhZG93LTE6bm9uZTstLW1vbnN0ZXItYm94LXNoYWRvdy0yOi0xcHggMXB4IDEwcHggMXB4IGhzbGEoMCwwJSw3NiUsLjYxKTstLW1vbnN0ZXItdGV4dC1zaGFkb3c6bm9uZTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTEpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtNik7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC02KTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTIpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci13aWR0aDoycHg7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXN0eWxlOnNvbGlkOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1yYWRpdXM6MDstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTUpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWhvdmVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNil9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci10aGVtZS1vbi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci10aGVtZS1vbi1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpOy0tbW9uc3Rlci10aGVtZS1vZmYtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1vZmYtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLXRoZW1lLW9uLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItdGhlbWUtb24tYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1vZmYtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1vZmYtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTUpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItYm9yZGVyLXN0eWxlOnNvbGlkOy0tbW9uc3Rlci1ib3JkZXItd2lkdGg6M3B4Oy0tbW9uc3Rlci1ib3JkZXItcmFkaXVzOjA7LS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlOi00cHg7LS1tb25zdGVyLXotaW5kZXgtZGVmYXVsdDowOy0tbW9uc3Rlci16LWluZGV4LW91dGxpbmU6MTA7LS1tb25zdGVyLXotaW5kZXgtZHJvcGRvd246MjAwOy0tbW9uc3Rlci16LWluZGV4LWRyb3Bkb3duLW92ZXJsYXk6MjEwOy0tbW9uc3Rlci16LWluZGV4LXN0aWNreTozMDA7LS1tb25zdGVyLXotaW5kZXgtc3RpY2t5LW92ZXJsYXk6MzEwOy0tbW9uc3Rlci16LWluZGV4LWZpeGVkOjQwMDstLW1vbnN0ZXItei1pbmRleC1maXhlZC1vdmVybGF5OjQxMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1iYWNrZHJvcDo1MDA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtYmFja2Ryb3Atb3ZlcmxheTo1MTA7LS1tb25zdGVyLXotaW5kZXgtb2ZmY2FudmFzOjYwMDstLW1vbnN0ZXItei1pbmRleC1vZmZjYW52YXMtb3ZlcmxheTo2MTA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWw6NzAwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLW92ZXJsYXk6NzEwOy0tbW9uc3Rlci16LWluZGV4LXBvcG92ZXI6ODAwOy0tbW9uc3Rlci16LWluZGV4LXBvcG92ZXItb3ZlcmxheTo4MTA7LS1tb25zdGVyLXotaW5kZXgtdG9vbHRpcDo4MDA7LS1tb25zdGVyLXotaW5kZXgtdG9vbHRpcC1vdmVybGF5OjkxMDstLW1vbnN0ZXItc3BhY2UtMDowOy0tbW9uc3Rlci1zcGFjZS0xOjJweDstLW1vbnN0ZXItc3BhY2UtMjo0cHg7LS1tb25zdGVyLXNwYWNlLTM6NnB4Oy0tbW9uc3Rlci1zcGFjZS00OjEwcHg7LS1tb25zdGVyLXNwYWNlLTU6MTZweDstLW1vbnN0ZXItc3BhY2UtNjoyNnB4Oy0tbW9uc3Rlci1zcGFjZS03OjQycHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtMDo0ODBweDstLW1vbnN0ZXItYnJlYWtwb2ludC00OjQ4MHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTc6NzY4cHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtOTo5OTJweDstLW1vbnN0ZXItYnJlYWtwb2ludC0xMjoxMjAwcHg7LS1tb25zdGVyLWRyYWdnZXItd2lkdGg6MnB4Oy0tbW9uc3Rlci1kcmFnZ2VyLWhhbmRsZS13aWR0aDo0cHg7LS1tb25zdGVyLWRyYWdnZXItaGFuZGxlLWhlaWdodDo1MHB4fVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXthbGlnbi1jb250ZW50OnN0cmV0Y2g7Ym9yZGVyOjA7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC13cmFwOm5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydDttYXJnaW46MDttaW4taGVpZ2h0OjEwMHZoO3BhZGRpbmc6MH1bZGF0YS1tb25zdGVyLXJvbGU9aGVhZGVyXXtoZWlnaHQ6NjRweDttYXJnaW46MCAwIDAgNjBweH1bZGF0YS1tb25zdGVyLXJvbGU9Y29udGVudF0sW2RhdGEtbW9uc3Rlci1yb2xlPWZvb3Rlcl0sW2RhdGEtbW9uc3Rlci1yb2xlPWhlYWRlcl17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0gXG59YCxcblx0XHQwLFxuXHQpO1xufSBjYXRjaCAoZSkge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpLFxuXHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0ZSArIFwiXCIsXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSBcIi4uLy4uL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnQgfSBmcm9tIFwiLi4vLi4vZG9tL3V0aWwubWpzXCI7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlT2JqZWN0LCB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IHBhcnNlTG9jYWxlIH0gZnJvbSBcIi4uL2xvY2FsZS5tanNcIjtcbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSBcIi4uL3Byb3ZpZGVyLm1qc1wiO1xuaW1wb3J0IHsgVHJhbnNsYXRpb25zIH0gZnJvbSBcIi4uL3RyYW5zbGF0aW9ucy5tanNcIjtcblxuZXhwb3J0IHsgRW1iZWQgfTtcblxuLyoqXG4gKiBUaGUgRW1iZWQgcHJvdmlkZXIgcmV0cmlldmVzIGEgSlNPTiBmaWxlIGZyb20gdGhlIGdpdmVuIFNjcmlwdCBUYWcuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi8uLi9leGFtcGxlL2kxOG4vcHJvdmlkZXJzL2VtYmVkLm1qc1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmMzMDY2fVxuICovXG5jbGFzcyBFbWJlZCBleHRlbmRzIFByb3ZpZGVyIHtcblx0LyoqXG5cdCAqIGBgYGh0bWxcblx0ICogPHNjcmlwdCBpZD1cInRyYW5zbGF0aW9uc1wiIHR5cGU9XCJhcHBsaWNhdGlvbi9qc29uXCI+XG5cdCAqIHtcblx0ICogICAgIFwiaGVsbG9cIjogXCJIYWxsb1wiXG5cdCAqIH1cblx0ICogPC9zY3JpcHQ+XG5cdCAqIGBgYFxuXHQgKlxuXHQgKlxuXHQgKiBgYGBqYXZhc2NyaXB0XG5cdCAqIG5ldyBFbWJlZCgndHJhbnNsYXRpb25zJylcblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR8c3RyaW5nfSBlbGVtZW50T3JJZFxuXHQgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuXHQgKi9cblx0Y29uc3RydWN0b3IoZWxlbWVudE9ySWQsIG9wdGlvbnMpIHtcblx0XHRzdXBlcihvcHRpb25zKTtcblxuXHRcdGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpIHtcblx0XHRcdG9wdGlvbnMgPSB7fTtcblx0XHR9XG5cblx0XHRpZiAoZWxlbWVudE9ySWQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBAcHJvcGVydHkge0hUTUxFbGVtZW50fHN0cmluZ31cblx0XHRcdCAqL1xuXHRcdFx0dGhpcy50cmFuc2xhdGVFbGVtZW50ID0gZWxlbWVudE9ySWQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8qKlxuXHRcdFx0ICogQHByb3BlcnR5IHtIVE1MRWxlbWVudHxzdHJpbmd9XG5cdFx0XHQgKi9cblx0XHRcdHRoaXMudHJhbnNsYXRlRWxlbWVudCA9IGdldERvY3VtZW50KCkuZ2V0RWxlbWVudEJ5SWQoXG5cdFx0XHRcdHZhbGlkYXRlU3RyaW5nKGVsZW1lbnRPcklkKSxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAcHJvcGVydHkge09iamVjdH0gb3B0aW9uc1xuXHRcdCAqL1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0gZXh0ZW5kKFxuXHRcdFx0e30sXG5cdFx0XHRzdXBlci5kZWZhdWx0cyxcblx0XHRcdHRoaXMuZGVmYXVsdHMsXG5cdFx0XHR2YWxpZGF0ZU9iamVjdChvcHRpb25zKSxcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlZmF1bHRzXG5cdCAqXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GZXRjaF9BUEl9XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIGV4dGVuZCh7fSwgc3VwZXIuZGVmYXVsdHMpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7TG9jYWxlfHN0cmluZ30gbG9jYWxlXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRnZXRUcmFuc2xhdGlvbnMobG9jYWxlKSB7XG5cdFx0aWYgKGlzU3RyaW5nKGxvY2FsZSkpIHtcblx0XHRcdGxvY2FsZSA9IHBhcnNlTG9jYWxlKGxvY2FsZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGlmICh0aGlzLnRyYW5zbGF0ZUVsZW1lbnQgPT09IG51bGwpIHtcblx0XHRcdFx0cmVqZWN0KG5ldyBFcnJvcihcIlRleHQgbm90IGZvdW5kXCIpKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoISh0aGlzLnRyYW5zbGF0ZUVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MU2NyaXB0RWxlbWVudCkpIHtcblx0XHRcdFx0cmVqZWN0KG5ldyBFcnJvcihcIkVsZW1lbnQgaXMgbm90IGEgc2NyaXB0IHRhZ1wiKSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMudHJhbnNsYXRlRWxlbWVudC50eXBlICE9PSBcImFwcGxpY2F0aW9uL2pzb25cIikge1xuXHRcdFx0XHRyZWplY3QoXG5cdFx0XHRcdFx0bmV3IEVycm9yKFwiRWxlbWVudCBpcyBub3QgYSBzY3JpcHQgdGFnIHdpdGggdHlwZSBhcHBsaWNhdGlvbi9qc29uXCIpLFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGxldCB0cmFuc2xhdGlvbnMgPSBudWxsO1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dHJhbnNsYXRpb25zID0gSlNPTi5wYXJzZSh0aGlzLnRyYW5zbGF0ZUVsZW1lbnQuaW5uZXJIVE1MLnRyaW0oKSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHJlamVjdChlKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodHJhbnNsYXRpb25zID09PSBudWxsKSB7XG5cdFx0XHRcdHJlamVjdChuZXcgRXJyb3IoXCJUcmFuc2xhdGlvbnMgbm90IGZvdW5kIG9yIGludmFsaWRcIikpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHQgPSBuZXcgVHJhbnNsYXRpb25zKGxvY2FsZSk7XG5cdFx0XHR0LmFzc2lnblRyYW5zbGF0aW9ucyh0cmFuc2xhdGlvbnMpO1xuXG5cdFx0XHRyZXNvbHZlKHQpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEluaXRpYWxpemVzIHRoZSB0cmFuc2xhdGlvbnMgZm9yIHRoZSBjdXJyZW50IGRvY3VtZW50LlxuXHQgKlxuXHQgKiBgc2NyaXB0W2RhdGEtbW9uc3Rlci1yb2xlPXRyYW5zbGF0aW9uc11gIGlzIHNlYXJjaGVkIGZvciBhbmQgdGhlIHRyYW5zbGF0aW9ucyBhcmUgYXNzaWduZWQgdG8gdGhlIGVsZW1lbnQuXG5cdCAqXG5cdCAqIEBwYXJhbSBlbGVtZW50XG5cdCAqIEByZXR1cm5zIHtQcm9taXNlPEF3YWl0ZWQ8KltdPj58UHJvbWlzZTxBd2FpdGVkPHVua25vd24+W10+fVxuXHQgKi9cblx0c3RhdGljIGFzc2lnblRyYW5zbGF0aW9uc1RvRWxlbWVudChlbGVtZW50KSB7XG5cdFx0Y29uc3QgZCA9IGdldERvY3VtZW50KCk7XG5cblx0XHRpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0XHRlbGVtZW50ID0gZC5xdWVyeVNlbGVjdG9yKFwiYm9keVwiKTtcblx0XHR9XG5cblx0XHRjb25zdCBsaXN0ID0gZC5xdWVyeVNlbGVjdG9yQWxsKFwic2NyaXB0W2RhdGEtbW9uc3Rlci1yb2xlPXRyYW5zbGF0aW9uc11cIik7XG5cdFx0aWYgKGxpc3QgPT09IG51bGwpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuXHRcdH1cblxuXHRcdGNvbnN0IHByb21pc2VzID0gW107XG5cblx0XHRsaXN0LmZvckVhY2goKHRyYW5zbGF0aW9uRWxlbWVudCkgPT4ge1xuXHRcdFx0Y29uc3QgcCA9IG5ldyBFbWJlZCh0cmFuc2xhdGlvbkVsZW1lbnQsIHt9KTtcblx0XHRcdHByb21pc2VzLnB1c2gocC5hc3NpZ25Ub0VsZW1lbnQodW5kZWZpbmVkLCBlbGVtZW50KSk7XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgZ2V0RG9jdW1lbnQsIGdldFdpbmRvdyB9IGZyb20gXCIuL3V0aWwubWpzXCI7XG5cbmV4cG9ydCB7IGRvbVJlYWR5LCB3aW5kb3dSZWFkeSB9O1xuXG4vKipcbiAqIFRoaXMgdmFyaWFibGUgaXMgYSBwcm9taXNlIGZ1bGZpbGxlZCBhcyBzb29uIGFzIHRoZSBkb20gaXMgYXZhaWxhYmxlLlxuICpcbiAqIFRoZSBET01Db250ZW50TG9hZGVkIGV2ZW50IGlzIGZpcmVkIHdoZW4gdGhlIG9yaWdpbmFsIEhUTUwgZG9jdW1lbnQgaXMgZnVsbHkgbG9hZGVkIGFuZCBwYXJzZWRcbiAqIHdpdGhvdXQgd2FpdGluZyBmb3Igc3R5bGVzaGVldHMsIGltYWdlcywgYW5kIHN1YmZyYW1lcyB0byBmaW5pc2ggbG9hZGluZy5cbiAqXG4gKiBkb2N1bWVudC5yZWFkeVN0YXRlIGNoYW5nZXMgdG8gaW50ZXJhY3RpdmVcbiAqIHdpbmRvdydzIERPTUNvbnRlbnRMb2FkZWQgZXZlbnQgZ2V0cyBmaXJlZFxuICogZG9jdW1lbnQucmVhZHlTdGF0ZSBjaGFuZ2VzIHRvIGNvbXBsZXRlXG4gKiB3aW5kb3cncyBsb2FkIGV2ZW50IGdldHMgZmlyZWQgbG9hZFxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMzEuMFxuICogQHN1bW1hcnkgdmFyaWFibGUgdG8gY2hlY2sgaWYgZG9tIGlzIHJlYWR5XG4gKiBAdHlwZSB7UHJvbWlzZX1cbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RvY3VtZW50L0RPTUNvbnRlbnRMb2FkZWRfZXZlbnRcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RvY3VtZW50L3JlYWR5U3RhdGVcbiAqL1xuY29uc3QgZG9tUmVhZHkgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cblx0aWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09IFwibG9hZGluZ1wiKSB7XG5cdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIiwgcmVzb2x2ZSk7XG5cdH0gZWxzZSB7XG5cdFx0cmVzb2x2ZSgpO1xuXHR9XG59KTtcblxuLyoqXG4gKiBUaGlzIHZhcmlhYmxlIGlzIGEgcHJvbWlzZSBpcyBmdWxmaWxsZWQgYXMgc29vbiBhcyB0aGUgd2luZG93cyBpcyBhdmFpbGFibGUuXG4gKlxuICogVGhlIGxvYWQgZXZlbnQgZmlyZXMgd2hlbiB0aGUgZW50aXJlIHBhZ2UgaXMgbG9hZGVkLCBpbmNsdWRpbmcgYWxsIGRlcGVuZGVudCByZXNvdXJjZXMgc3VjaCBhcyBzdHlsZXNoZWV0cyxcbiAqIGFzc2V0cywgYW5kIGltYWdlcy4gVW5saWtlIERPTUNvbnRlbnRMb2FkZWQsIHdoaWNoIGZpcmVzIGFzIHNvb24gYXMgdGhlIERPTSBvZiB0aGUgcGFnZSBpcyBsb2FkZWQsXG4gKiB3aXRob3V0IHdhaXRpbmcgZm9yIHRoZSByZXNvdXJjZXMgdG8gZmluaXNoIGxvYWRpbmcuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4zMS4wXG4gKiBAc3VtbWFyeSB2YXJpYWJsZSB0byBjaGVjayBpZiB3aW5kb3cgaXMgcmVhZHlcbiAqIEB0eXBlIHtQcm9taXNlfVxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvV2luZG93L2xvYWRfZXZlbnRcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RvY3VtZW50L3JlYWR5U3RhdGVcbiAqL1xuY29uc3Qgd2luZG93UmVhZHkgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cdGNvbnN0IHdpbmRvdyA9IGdldFdpbmRvdygpO1xuXG5cdGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSBcImNvbXBsZXRlXCIpIHtcblx0XHRyZXNvbHZlKCk7XG5cdH0gZWxzZSB7XG5cdFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIHJlc29sdmUpO1xuXHR9XG59KTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQgeyBCYXNlV2l0aE9wdGlvbnMgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZXdpdGhvcHRpb25zLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsT2JqZWN0IH0gZnJvbSBcIi4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBTdGFjayB9IGZyb20gXCIuLi90eXBlcy9zdGFjay5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlSW5zdGFuY2UsIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuZXhwb3J0IHsgRm9jdXNNYW5hZ2VyIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEtFWV9ET0NVTUVOVCA9IFwiZG9jdW1lbnRcIjtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgS0VZX0NPTlRFWFQgPSBcImNvbnRleHRcIjtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuY29uc3Qgc3RhY2tTeW1ib2wgPSBTeW1ib2woXCJzdGFja1wiKTtcblxuLyoqXG4gKiBXaXRoIHRoZSBmb2N1cyBtYW5hZ2VyIHRoZSBmb2N1cyBjYW4gYmUgc3RvcmVkIGluIGEgZG9jdW1lbnQsIHJlY2FsbGVkIGFuZCBtb3ZlZC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgbG9jYWxlXG4gKiBAc3VtbWFyeSBIYW5kbGUgdGhlIGZvY3VzXG4gKi9cbmNsYXNzIEZvY3VzTWFuYWdlciBleHRlbmRzIEJhc2VXaXRoT3B0aW9ucyB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdHx1bmRlZmluZWR9IG9wdGlvbnNcblx0ICovXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcblx0XHRzdXBlcihvcHRpb25zKTtcblx0XHR2YWxpZGF0ZUluc3RhbmNlKHRoaXMuZ2V0T3B0aW9uKEtFWV9ET0NVTUVOVCksIEhUTUxEb2N1bWVudCk7XG5cblx0XHR0aGlzW3N0YWNrU3ltYm9sXSA9IG5ldyBTdGFjaygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vZm9jdXNtYW5hZ2VyXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7SFRNTERvY3VtZW50fSBkb2N1bWVudCB0aGUgZG9jdW1lbnQgb2JqZWN0IGludG8gd2hpY2ggdGhlIG5vZGUgaXMgdG8gYmUgYXBwZW5kZWRcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gZXh0ZW5kKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0W0tFWV9ET0NVTUVOVF06IGdldEdsb2JhbE9iamVjdChcImRvY3VtZW50XCIpLFxuXHRcdFx0W0tFWV9DT05URVhUXTogdW5kZWZpbmVkLFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbWVtYmVycyB0aGUgY3VycmVudCBmb2N1cyBvbiBhIHN0YWNrLlxuXHQgKiBTZXZlcmFsIGZvY3VzIGNhbiBiZSBzdG9yZWQuXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLkZvY3VzTWFuYWdlcn1cblx0ICovXG5cdHN0b3JlRm9jdXMoKSB7XG5cdFx0Y29uc3QgYWN0aXZlID0gdGhpcy5nZXRBY3RpdmUoKTtcblx0XHRpZiAoYWN0aXZlIGluc3RhbmNlb2YgTm9kZSkge1xuXHRcdFx0dGhpc1tzdGFja1N5bWJvbF0ucHVzaChhY3RpdmUpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgbGFzdCBmb2N1cyBvbiB0aGUgc3RhY2sgaXMgc2V0IGFnYWluXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLkZvY3VzTWFuYWdlcn1cblx0ICovXG5cdHJlc3RvcmVGb2N1cygpIHtcblx0XHRjb25zdCBsYXN0ID0gdGhpc1tzdGFja1N5bWJvbF0ucG9wKCk7XG5cdFx0aWYgKGxhc3QgaW5zdGFuY2VvZiBOb2RlKSB7XG5cdFx0XHR0aGlzLmZvY3VzKGxhc3QpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7Tm9kZX0gZWxlbWVudFxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IHByZXZlbnRTY3JvbGxcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2Zcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uRm9jdXNNYW5hZ2VyfVxuXHQgKi9cblx0Zm9jdXMoZWxlbWVudCwgcHJldmVudFNjcm9sbCkge1xuXHRcdHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgTm9kZSk7XG5cblx0XHRlbGVtZW50LmZvY3VzKHtcblx0XHRcdHByZXZlbnRTY3JvbGw6IHByZXZlbnRTY3JvbGwgPz8gZmFsc2UsXG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtFbGVtZW50fVxuXHQgKi9cblx0Z2V0QWN0aXZlKCkge1xuXHRcdHJldHVybiB0aGlzLmdldE9wdGlvbihLRVlfRE9DVU1FTlQpLmFjdGl2ZUVsZW1lbnQ7XG5cdH1cblxuXHQvKipcblx0ICogU2VsZWN0IGFsbCBlbGVtZW50cyB0aGF0IGNhbiBiZSBmb2N1c2VkXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gcXVlcnlcblx0ICogQHJldHVybiB7YXJyYXl9XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mXG5cdCAqL1xuXHRnZXRGb2N1c2FibGUocXVlcnkpIHtcblx0XHRsZXQgY29udGV4dEVsZW1lbnQgPSB0aGlzLmdldE9wdGlvbihLRVlfQ09OVEVYVCk7XG5cdFx0aWYgKGNvbnRleHRFbGVtZW50ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnRleHRFbGVtZW50ID0gdGhpcy5nZXRPcHRpb24oS0VZX0RPQ1VNRU5UKTtcblx0XHR9XG5cblx0XHR2YWxpZGF0ZUluc3RhbmNlKGNvbnRleHRFbGVtZW50LCBOb2RlKTtcblxuXHRcdGlmIChxdWVyeSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR2YWxpZGF0ZVN0cmluZyhxdWVyeSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFtcblx0XHRcdC4uLmNvbnRleHRFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXG5cdFx0XHRcdCdkZXRhaWxzLCBidXR0b24sIGlucHV0LCBbdGFiaW5kZXhdOm5vdChbdGFiaW5kZXg9XCItMVwiXSksIHNlbGVjdCwgdGV4dGFyZWEsIGFbaHJlZl0sIGJvZHknLFxuXHRcdFx0KSxcblx0XHRdLmZpbHRlcigoZWxlbWVudCkgPT4ge1xuXHRcdFx0aWYgKHF1ZXJ5ICE9PSB1bmRlZmluZWQgJiYgIWVsZW1lbnQubWF0Y2hlcyhxdWVyeSkpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0aWYgKGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiYXJpYS1oaWRkZW5cIikgPT09IFwidHJ1ZVwiKSByZXR1cm4gZmFsc2U7XG5cblx0XHRcdGNvbnN0IHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRcdFx0aWYgKHJlY3Qud2lkdGggPT09IDApIHJldHVybiBmYWxzZTtcblx0XHRcdGlmIChyZWN0LmhlaWdodCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcXVlcnlcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uRm9jdXNNYW5hZ2VyfVxuXHQgKi9cblx0Zm9jdXNOZXh0KHF1ZXJ5KSB7XG5cdFx0Y29uc3QgY3VycmVudCA9IHRoaXMuZ2V0QWN0aXZlKCk7XG5cdFx0Y29uc3QgZm9jdXNhYmxlID0gdGhpcy5nZXRGb2N1c2FibGUocXVlcnkpO1xuXG5cdFx0aWYgKCFpc0FycmF5KGZvY3VzYWJsZSkgfHwgZm9jdXNhYmxlLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0aWYgKGN1cnJlbnQgaW5zdGFuY2VvZiBOb2RlKSB7XG5cdFx0XHRjb25zdCBpbmRleCA9IGZvY3VzYWJsZS5pbmRleE9mKGN1cnJlbnQpO1xuXG5cdFx0XHRpZiAoaW5kZXggPiAtMSkge1xuXHRcdFx0XHR0aGlzLmZvY3VzKGZvY3VzYWJsZVtpbmRleCArIDFdIHx8IGZvY3VzYWJsZVswXSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLmZvY3VzKGZvY3VzYWJsZVswXSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZm9jdXMoZm9jdXNhYmxlWzBdKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcXVlcnlcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uRm9jdXNNYW5hZ2VyfVxuXHQgKi9cblx0Zm9jdXNQcmV2KHF1ZXJ5KSB7XG5cdFx0Y29uc3QgY3VycmVudCA9IHRoaXMuZ2V0QWN0aXZlKCk7XG5cdFx0Y29uc3QgZm9jdXNhYmxlID0gdGhpcy5nZXRGb2N1c2FibGUocXVlcnkpO1xuXG5cdFx0aWYgKCFpc0FycmF5KGZvY3VzYWJsZSkgfHwgZm9jdXNhYmxlLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0aWYgKGN1cnJlbnQgaW5zdGFuY2VvZiBOb2RlKSB7XG5cdFx0XHRjb25zdCBpbmRleCA9IGZvY3VzYWJsZS5pbmRleE9mKGN1cnJlbnQpO1xuXG5cdFx0XHRpZiAoaW5kZXggPiAtMSkge1xuXHRcdFx0XHR0aGlzLmZvY3VzKGZvY3VzYWJsZVtpbmRleCAtIDFdIHx8IGZvY3VzYWJsZVtmb2N1c2FibGUubGVuZ3RoIC0gMV0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5mb2N1cyhmb2N1c2FibGVbZm9jdXNhYmxlLmxlbmd0aCAtIDFdKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5mb2N1cyhmb2N1c2FibGVbZm9jdXNhYmxlLmxlbmd0aCAtIDFdKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IFBhdGhmaW5kZXIgfSBmcm9tIFwiLi4vZGF0YS9wYXRoZmluZGVyLm1qc1wiO1xuaW1wb3J0IHsgcGFyc2VEYXRhVVJMIH0gZnJvbSBcIi4vZGF0YXVybC5tanNcIjtcbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSBcIi4vaXMubWpzXCI7XG5pbXBvcnQgeyBPYnNlcnZlciB9IGZyb20gXCIuL29ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHsgUHJveHlPYnNlcnZlciB9IGZyb20gXCIuL3Byb3h5b2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZU9iamVjdCB9IGZyb20gXCIuL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tIFwiLi9pcy5tanNcIjtcblxuZXhwb3J0IHsgZXF1aXBXaXRoSW50ZXJuYWwgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgcHJvcGVydHlOYW1lID0gXCJpbnRlcm5hbERlZmF1bHRzXCI7XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBleHRlbmRzIHRoZSBnaXZlbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIG1ldGhvZHM6XG4gKlxuICogLSBhdHRhY2hJbnRlcm5hbE9ic2VydmVyXG4gKiAtIGRldGFjaEludGVybmFsT2JzZXJ2ZXJcbiAqIC0gY29udGFpbnNJbnRlcm5hbE9ic2VydmVyXG4gKiAtIHNldEludGVybmFsXG4gKiAtIHNldEludGVybmFsc1xuICogLSBnZXRJbnRlcm5hbFxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDMuMTUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuZnVuY3Rpb24gZXF1aXBXaXRoSW50ZXJuYWwoKSB7XG5cdHZhbGlkYXRlT2JqZWN0KHRoaXMpO1xuXG5cdGlmICghaGFzR2V0dGVyKHRoaXMsIHByb3BlcnR5TmFtZSkpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcGVydHlOYW1lLCB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0cmV0dXJuIHt9O1xuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdGNvbnN0IGRlZmF1bHRzID0gZXh0ZW5kKHt9LCB0aGlzW3Byb3BlcnR5TmFtZV0gfHwge30pO1xuXHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IG5ldyBQcm94eU9ic2VydmVyKGRlZmF1bHRzKTtcblxuXHQvKipcblx0ICogQXR0YWNoIGEgbmV3IG9ic2VydmVyXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm4ge1Byb3h5T2JzZXJ2ZXJ9XG5cdCAqL1xuXHR0aGlzW1wiYXR0YWNoSW50ZXJuYWxPYnNlcnZlclwiXSA9IChvYnNlcnZlcikgPT4ge1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmF0dGFjaE9ic2VydmVyKG9ic2VydmVyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblxuXHQvKipcblx0ICogRGV0YWNoIGEgb2JzZXJ2ZXJcblx0ICpcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybiB7UHJveHlPYnNlcnZlcn1cblx0ICovXG5cdHRoaXNbXCJkZXRhY2hJbnRlcm5hbE9ic2VydmVyXCJdID0gKG9ic2VydmVyKSA9PiB7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBDaGVjayBpZiBhIG9ic2VydmVyIGlzIGF0dGFjaGVkXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHR0aGlzW1wiY29udGFpbnNJbnRlcm5hbE9ic2VydmVyXCJdID0gKG9ic2VydmVyKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXNbaW50ZXJuYWxTeW1ib2xdLmNvbnRhaW5zT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBTZXQgYW4gaW50ZXJuYWwgdmFsdWUsIG5lc3RlZCBpbnRlcm5hbHMgY2FuIGJlIHNwZWNpZmllZCBieSBwYXRoIGBhLmIuY2Bcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHtEYXRhc291cmNlfVxuXHQgKi9cblx0dGhpc1tcInNldEludGVybmFsXCJdID0gKHBhdGgsIHZhbHVlKSA9PiB7XG5cdFx0bmV3IFBhdGhmaW5kZXIodGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpKS5zZXRWaWEocGF0aCwgdmFsdWUpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBzZXQgbXVsdGlwbGUgaW50ZXJuYWxzIGF0IG9uY2Vcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd8b2JqZWN0fSBvcHRpb25zXG5cdCAqIEByZXR1cm4ge0RhdGFzb3VyY2V9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgb3B0aW9ucyBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQganNvbiBkZWZpbml0aW9uXG5cdCAqL1xuXHR0aGlzW1wic2V0SW50ZXJuYWxzXCJdID0gKG9wdGlvbnMpID0+IHtcblx0XHRpZiAoaXNTdHJpbmcob3B0aW9ucykpIHtcblx0XHRcdG9wdGlvbnMgPSBwYXJzZU9wdGlvbnNKU09OKG9wdGlvbnMpO1xuXHRcdH1cblxuXHRcdGV4dGVuZCh0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRTdWJqZWN0KCksIGRlZmF1bHRzLCBvcHRpb25zKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblxuXHQvKipcblx0ICogbmVzdGVkIGludGVybmFscyBjYW4gYmUgc3BlY2lmaWVkIGJ5IHBhdGggYGEuYi5jYFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuXHQgKiBAcGFyYW0geyp9IGRlZmF1bHRWYWx1ZVxuXHQgKiBAcmV0dXJuIHsqfVxuXHQgKi9cblx0dGhpc1tcImdldEludGVybmFsXCJdID0gKHBhdGgsIGRlZmF1bHRWYWx1ZSkgPT4ge1xuXHRcdGxldCB2YWx1ZTtcblxuXHRcdHRyeSB7XG5cdFx0XHR2YWx1ZSA9IG5ldyBQYXRoZmluZGVyKHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFJlYWxTdWJqZWN0KCkpLmdldFZpYShcblx0XHRcdFx0cGF0aCxcblx0XHRcdCk7XG5cdFx0fSBjYXRjaCAoZSkge31cblxuXHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZGVmYXVsdFZhbHVlO1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIG9ialxuICogQHBhcmFtIHByb3BcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGhhc0dldHRlcihvYmosIHByb3ApIHtcblx0d2hpbGUgKGlzT2JqZWN0KG9iaikpIHtcblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIHByb3ApPy5bXCJnZXRcIl0pIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRvYmogPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKTtcblx0fVxuXG5cdHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGRhdGFcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gcGFyc2VPcHRpb25zSlNPTihkYXRhKSB7XG5cdGxldCBvYmogPSB7fTtcblxuXHRpZiAoIWlzU3RyaW5nKGRhdGEpKSB7XG5cdFx0cmV0dXJuIG9iajtcblx0fVxuXG5cdC8vIHRoZSBjb25maWd1cmF0aW9uIGNhbiBiZSBzcGVjaWZpZWQgYXMgYSBkYXRhIHVybC5cblx0dHJ5IHtcblx0XHRjb25zdCBkYXRhVXJsID0gcGFyc2VEYXRhVVJMKGRhdGEpO1xuXHRcdGRhdGEgPSBkYXRhVXJsLmNvbnRlbnQ7XG5cdH0gY2F0Y2ggKGUpIHt9XG5cblx0dHJ5IHtcblx0XHRvYmogPSBKU09OLnBhcnNlKGRhdGEpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0dGhyb3cgZTtcblx0fVxuXG5cdHJldHVybiB2YWxpZGF0ZU9iamVjdChvYmopO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3RhdGVTeW1ib2wsIGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IEJhc2VXaXRoT3B0aW9ucyB9IGZyb20gXCIuLi90eXBlcy9iYXNld2l0aG9wdGlvbnMubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWxPYmplY3QgfSBmcm9tIFwiLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgSUQgfSBmcm9tIFwiLi4vdHlwZXMvaWQubWpzXCI7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IE9ic2VydmVyIH0gZnJvbSBcIi4uL3R5cGVzL29ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHsgUHJveHlPYnNlcnZlciB9IGZyb20gXCIuLi90eXBlcy9wcm94eW9ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHtcblx0QVRUUklCVVRFX0NMQVNTLFxuXHRBVFRSSUJVVEVfSUQsXG5cdEFUVFJJQlVURV9USVRMRSxcbn0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBSZXNvdXJjZSwgS0VZX0RPQ1VNRU5ULCBLRVlfUVVFUlksIHJlZmVyZW5jZVN5bWJvbCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBLRVlfRE9DVU1FTlQgPSBcImRvY3VtZW50XCI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEtFWV9RVUVSWSA9IFwicXVlcnlcIjtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgS0VZX1RJTUVPVVQgPSBcInRpbWVvdXRcIjtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcmVmZXJlbmNlU3ltYm9sID0gU3ltYm9sKFwicmVmZXJlbmNlXCIpO1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgaXMgdGhlIGJhc2UgY2xhc3MgZm9yIGFsbCByZXNvdXJjZXMgdG8gYmUgbG9hZGVkLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgUmVzb3VyY2UgY2xhc3NcbiAqL1xuY2xhc3MgUmVzb3VyY2UgZXh0ZW5kcyBCYXNlV2l0aE9wdGlvbnMge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R8dW5kZWZpbmVkfSBvcHRpb25zXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG5cdFx0c3VwZXIob3B0aW9ucyk7XG5cblx0XHRsZXQgdXJpID0gdGhpcy5nZXRPcHRpb24odGhpcy5jb25zdHJ1Y3Rvci5nZXRVUkxBdHRyaWJ1dGUoKSk7XG5cblx0XHRpZiAodXJpID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIm1pc3Npbmcgc291cmNlXCIpO1xuXHRcdH0gZWxzZSBpZiAodXJpIGluc3RhbmNlb2YgVVJMKSB7XG5cdFx0XHR1cmkgPSB1cmkudG9TdHJpbmcoKTtcblx0XHR9IGVsc2UgaWYgKCFpc1N0cmluZyh1cmkpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCB1cmwgdHlwZVwiKTtcblx0XHR9XG5cblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXVt0aGlzLmNvbnN0cnVjdG9yLmdldFVSTEF0dHJpYnV0ZSgpXSA9IHVyaTtcblx0XHR0aGlzW2ludGVybmFsU3RhdGVTeW1ib2xdID0gbmV3IFByb3h5T2JzZXJ2ZXIoe1xuXHRcdFx0bG9hZGVkOiBmYWxzZSxcblx0XHRcdGVycm9yOiB1bmRlZmluZWQsXG5cdFx0fSk7XG5cblx0XHR0aGlzW3JlZmVyZW5jZVN5bWJvbF0gPSB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGlzQ29ubmVjdGVkKCkge1xuXHRcdGlmICh0aGlzW3JlZmVyZW5jZVN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0cmV0dXJuIHRoaXNbcmVmZXJlbmNlU3ltYm9sXS5pc0Nvbm5lY3RlZDtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgb3ZlcnJpZGRlbiBieSB0aGUgc3BlY2lhbCBjbGFzc2VzIGFuZCBjcmVhdGVzIHRoZSBET00gb2JqZWN0LlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBhbHNvIGNhbGxlZCBpbXBsaWNpdGx5LCBpZiBub3QgeWV0IGRvbmUgZXhwbGljaXRseSwgYnkgY2FsbGluZyBgY29ubmVjdCgpYC5cblx0ICpcblx0ICogQHRocm93cyB7RXJyb3J9IHRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZGVyaXZlZCBjbGFzc2VzXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLlJlc291cmNlfVxuXHQgKi9cblx0Y3JlYXRlKCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZGVyaXZlZCBjbGFzc2VzXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGFwcGVuZHMgdGhlIEhUTUxFbGVtZW50IHRvIHRoZSBzcGVjaWZpZWQgZG9jdW1lbnQuXG5cdCAqIElmIHRoZSBlbGVtZW50IGhhcyBub3QgeWV0IGJlZW4gY3JlYXRlZCwgYGNyZWF0ZSgpYCBpcyBjYWxsZWQgaW1wbGljaXRseS5cblx0ICpcblx0ICogdGhyb3dzIHtFcnJvcn0gdGFyZ2V0IG5vdCBmb3VuZFxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5SZXNvdXJjZX1cblx0ICovXG5cdGNvbm5lY3QoKSB7XG5cdFx0aWYgKCEodGhpc1tyZWZlcmVuY2VTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0XHR0aGlzLmNyZWF0ZSgpO1xuXHRcdH1cblxuXHRcdGFwcGVuZFRvRG9jdW1lbnQuY2FsbCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge0RvY3VtZW50fSBkb2N1bWVudCB0aGUgZG9jdW1lbnQgb2JqZWN0IGludG8gd2hpY2ggdGhlIG5vZGUgaXMgdG8gYmUgYXBwZW5kZWRcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHNyYy9ocmVmIHVybCB0byB0aGUgY29ycmVzcG9uZGluZyByZXNvdXJjZVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcXVlcnkgZGVmaW5lcyB0aGUgbG9jYXRpb24gd2hlcmUgdGhlIHJlc291cmNlIGlzIHRvIGJlIGhvb2tlZCBpbnRvIHRoZSBkb20uXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpZCBlbGVtZW50IGF0dHJpYnV0ZSBpZFxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGl0bGUgZWxlbWVudCBhdHRyaWJ1dGUgdGl0bGVcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGNsYXNzIGVsZW1lbnQgYXR0cmlidXRlIGNsYXNzXG5cdCAqIEBwcm9wZXJ0eSB7aW50fSB0aW1lb3V0IHRpbWVvdXRcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gZXh0ZW5kKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0W3RoaXMuY29uc3RydWN0b3IuZ2V0VVJMQXR0cmlidXRlKCldOiB1bmRlZmluZWQsXG5cdFx0XHRbS0VZX0RPQ1VNRU5UXTogZ2V0R2xvYmFsT2JqZWN0KFwiZG9jdW1lbnRcIiksXG5cdFx0XHRbS0VZX1FVRVJZXTogXCJoZWFkXCIsXG5cdFx0XHRbS0VZX1RJTUVPVVRdOiAxMDAwMCxcblx0XHRcdFtBVFRSSUJVVEVfSURdOiBuZXcgSUQoXCJyZXNvdXJjZVwiKS50b1N0cmluZygpLFxuXHRcdFx0W0FUVFJJQlVURV9DTEFTU106IHVuZGVmaW5lZCxcblx0XHRcdFtBVFRSSUJVVEVfVElUTEVdOiB1bmRlZmluZWQsXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogV2l0aCBgYXZhaWxhYmxlKClgIHlvdSBjYW4gY2hlY2sgaWYgYSByZXNvdXJjZSBpcyBhdmFpbGFibGUuXG5cdCAqIFRoaXMgaXMgdGhlIGNhc2Ugd2hlbiB0aGUgdGFnIGlzIGluY2x1ZGVkIGFuZCB0aGUgcmVzb3VyY2UgaXMgbG9hZGVkLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0YXZhaWxhYmxlKCkge1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXHRcdGlmICghKHNlbGZbcmVmZXJlbmNlU3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KFwibm8gZWxlbWVudFwiKTtcblx0XHR9XG5cblx0XHRpZiAoIXNlbGYuaXNDb25uZWN0ZWQoKSkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KFwiZWxlbWVudCBub3QgY29ubmVjdGVkXCIpO1xuXHRcdH1cblxuXHRcdGlmIChzZWxmW2ludGVybmFsU3RhdGVTeW1ib2xdLmdldFN1YmplY3QoKVtcImxvYWRlZFwiXSA9PT0gdHJ1ZSkge1xuXHRcdFx0aWYgKHNlbGZbaW50ZXJuYWxTdGF0ZVN5bWJvbF0uZ2V0U3ViamVjdCgpW1wiZXJyb3JcIl0gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3Qoc2VsZltpbnRlcm5hbFN0YXRlU3ltYm9sXS5nZXRTdWJqZWN0KClbXCJlcnJvclwiXSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuXHRcdFx0Y29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRyZWplY3QoXCJ0aW1lb3V0XCIpO1xuXHRcdFx0fSwgc2VsZi5nZXRPcHRpb24oXCJ0aW1lb3V0XCIpKTtcblxuXHRcdFx0Y29uc3Qgb2JzZXJ2ZXIgPSBuZXcgT2JzZXJ2ZXIoKCkgPT4ge1xuXHRcdFx0XHRjbGVhclRpbWVvdXQodGltZW91dCk7XG5cdFx0XHRcdHNlbGZbaW50ZXJuYWxTdGF0ZVN5bWJvbF0uZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuXHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHR9KTtcblxuXHRcdFx0c2VsZltpbnRlcm5hbFN0YXRlU3ltYm9sXS5hdHRhY2hPYnNlcnZlcihvYnNlcnZlcik7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFVSTEF0dHJpYnV0ZSgpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGlzIG1ldGhvZCBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGRlcml2ZWQgY2xhc3Nlc1wiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RvbS9yZXNvdXJjZVwiKTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtQcm9taXNlfVxuICogdGhyb3dzIHtFcnJvcn0gdGFyZ2V0IG5vdCBmb3VuZFxuICovXG5mdW5jdGlvbiBhcHBlbmRUb0RvY3VtZW50KCkge1xuXHRjb25zdCB0YXJnZXROb2RlID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmdldE9wdGlvbihLRVlfUVVFUlksIFwiaGVhZFwiKSk7XG5cdGlmICghKHRhcmdldE5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0YXJnZXQgbm90IGZvdW5kXCIpO1xuXHR9XG5cblx0YWRkRXZlbnRzLmNhbGwodGhpcyk7XG5cdHRhcmdldE5vZGUuYXBwZW5kQ2hpbGQodGhpc1tyZWZlcmVuY2VTeW1ib2xdKTtcblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7YWRkRXZlbnRzfVxuICovXG5mdW5jdGlvbiBhZGRFdmVudHMoKSB7XG5cdGNvbnN0IG9uRXJyb3IgPSAoKSA9PiB7XG5cdFx0dGhpc1tyZWZlcmVuY2VTeW1ib2xdLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBvbkVycm9yKTtcblx0XHR0aGlzW3JlZmVyZW5jZVN5bWJvbF0ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgb25Mb2FkKTtcblxuXHRcdHRoaXNbaW50ZXJuYWxTdGF0ZVN5bWJvbF0uc2V0U3ViamVjdCh7XG5cdFx0XHRsb2FkZWQ6IHRydWUsXG5cdFx0XHRlcnJvcjogYCR7XG5cdFx0XHRcdHRoaXNbcmVmZXJlbmNlU3ltYm9sXVt0aGlzLmNvbnN0cnVjdG9yLmdldFVSTEF0dHJpYnV0ZSgpXVxuXHRcdFx0fSBpcyBub3QgYXZhaWxhYmxlYCxcblx0XHR9KTtcblxuXHRcdHJldHVybjtcblx0fTtcblxuXHRjb25zdCBvbkxvYWQgPSAoKSA9PiB7XG5cdFx0dGhpc1tyZWZlcmVuY2VTeW1ib2xdLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBvbkVycm9yKTtcblx0XHR0aGlzW3JlZmVyZW5jZVN5bWJvbF0ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgb25Mb2FkKTtcblx0XHR0aGlzW2ludGVybmFsU3RhdGVTeW1ib2xdLmdldFN1YmplY3QoKVtcImxvYWRlZFwiXSA9IHRydWU7XG5cdH07XG5cblx0dGhpc1tyZWZlcmVuY2VTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIG9uTG9hZCwgZmFsc2UpO1xuXHR0aGlzW3JlZmVyZW5jZVN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIG9uRXJyb3IsIGZhbHNlKTtcblxuXHRyZXR1cm4gdGhpcztcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN0YXRlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi8uLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbEZ1bmN0aW9uIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge1xuXHRBVFRSSUJVVEVfQ0xBU1MsXG5cdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdEFUVFJJQlVURV9JRCxcblx0QVRUUklCVVRFX1NSQyxcblx0QVRUUklCVVRFX1RJVExFLFxuXHRBVFRSSUJVVEVfVFlQRSxcblx0VEFHX1NDUklQVCxcbn0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG5cdEtFWV9ET0NVTUVOVCxcblx0S0VZX1FVRVJZLFxuXHRyZWZlcmVuY2VTeW1ib2wsXG5cdFJlc291cmNlLFxufSBmcm9tIFwiLi4vcmVzb3VyY2UubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IERhdGEgfTtcblxuLyoqXG4gKiBUaGlzIGNsYXNzIGlzIHVzZWQgYnkgdGhlIHJlc291cmNlIG1hbmFnZXIgdG8gZW1iZWQgZGF0YS5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIERhdGEgUmVzb3VyY2UgY2xhc3NcbiAqL1xuY2xhc3MgRGF0YSBleHRlbmRzIFJlc291cmNlIHtcblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtb2RlPWNvcnMgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL2ZldGNoXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjcmVkZW50aWFscz1zYW1lLW9yaWdpbiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvZmV0Y2hcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHR5cGU9YXBwbGljYXRpb24vanNvbiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3NjcmlwdCNhdHRyLXR5cGV9XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIGV4dGVuZCh7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdG1vZGU6IFwiY29yc1wiLFxuXHRcdFx0Y3JlZGVudGlhbHM6IFwic2FtZS1vcmlnaW5cIixcblx0XHRcdHR5cGU6IFwiYXBwbGljYXRpb24vanNvblwiLFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLlJlc291cmNlLkRhdGF9XG5cdCAqL1xuXHRjcmVhdGUoKSB7XG5cdFx0Y3JlYXRlRWxlbWVudC5jYWxsKHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGFwcGVuZHMgdGhlIEhUTUxFbGVtZW50IHRvIHRoZSBzcGVjaWZpZWQgZG9jdW1lbnRcblx0ICpcblx0ICogdGhyb3dzIHtFcnJvcn0gdGFyZ2V0IG5vdCBmb3VuZFxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5SZXNvdXJjZX1cblx0ICovXG5cdGNvbm5lY3QoKSB7XG5cdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cdFx0aWYgKCEodGhpc1tyZWZlcmVuY2VTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0XHR0aGlzLmNyZWF0ZSgpO1xuXHRcdH1cblxuXHRcdGFwcGVuZFRvRG9jdW1lbnQuY2FsbCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL3Jlc291cmNlL2RhdGFcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFVSTEF0dHJpYnV0ZSgpIHtcblx0XHRyZXR1cm4gQVRUUklCVVRFX1NSQztcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5SZXNvdXJjZS5EYXRhfVxuICovXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50KCkge1xuXHRjb25zdCBkb2N1bWVudCA9IHRoaXMuZ2V0T3B0aW9uKEtFWV9ET0NVTUVOVCk7XG5cdHRoaXNbcmVmZXJlbmNlU3ltYm9sXSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoVEFHX1NDUklQVCk7XG5cblx0Zm9yIChjb25zdCBrZXkgb2YgW1xuXHRcdEFUVFJJQlVURV9UWVBFLFxuXHRcdEFUVFJJQlVURV9JRCxcblx0XHRBVFRSSUJVVEVfQ0xBU1MsXG5cdFx0QVRUUklCVVRFX1RJVExFLFxuXHRdKSB7XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKGtleSkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpc1tyZWZlcmVuY2VTeW1ib2xdW2tleV0gPSB0aGlzLmdldE9wdGlvbihrZXkpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtQcm9taXNlfVxuICogdGhyb3dzIHtFcnJvcn0gdGFyZ2V0IG5vdCBmb3VuZFxuICovXG5mdW5jdGlvbiBhcHBlbmRUb0RvY3VtZW50KCkge1xuXHRjb25zdCB0YXJnZXROb2RlID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmdldE9wdGlvbihLRVlfUVVFUlksIFwiaGVhZFwiKSk7XG5cdGlmICghKHRhcmdldE5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0YXJnZXQgbm90IGZvdW5kXCIpO1xuXHR9XG5cblx0dGFyZ2V0Tm9kZS5hcHBlbmRDaGlsZCh0aGlzW3JlZmVyZW5jZVN5bWJvbF0pO1xuXG5cdGdldEdsb2JhbEZ1bmN0aW9uKFwiZmV0Y2hcIikodGhpcy5nZXRPcHRpb24oQVRUUklCVVRFX1NSQyksIHtcblx0XHRtZXRob2Q6IFwiR0VUXCIsIC8vICpHRVQsIFBPU1QsIFBVVCwgREVMRVRFLCBldGMuXG5cdFx0bW9kZTogdGhpcy5nZXRPcHRpb24oXCJtb2RlXCIsIFwiY29yc1wiKSwgLy8gbm8tY29ycywgKmNvcnMsIHNhbWUtb3JpZ2luXG5cdFx0Y2FjaGU6IFwibm8tY2FjaGVcIiwgLy8gKmRlZmF1bHQsIG5vLWNhY2hlLCByZWxvYWQsIGZvcmNlLWNhY2hlLCBvbmx5LWlmLWNhY2hlZFxuXHRcdGNyZWRlbnRpYWxzOiB0aGlzLmdldE9wdGlvbihcImNyZWRlbnRpYWxzXCIsIFwic2FtZS1vcmlnaW5cIiksIC8vIGluY2x1ZGUsICpzYW1lLW9yaWdpbiwgb21pdFxuXHRcdGhlYWRlcnM6IHtcblx0XHRcdEFjY2VwdDogdGhpcy5nZXRPcHRpb24oXCJ0eXBlXCIsIFwiYXBwbGljYXRpb24vanNvblwiKSxcblx0XHR9LFxuXHRcdHJlZGlyZWN0OiBcImZvbGxvd1wiLCAvLyBtYW51YWwsICpmb2xsb3csIGVycm9yXG5cdFx0cmVmZXJyZXJQb2xpY3k6IFwibm8tcmVmZXJyZXJcIiwgLy8gbm8tcmVmZXJyZXIsXG5cdH0pXG5cdFx0LnRoZW4oKHJlc3BvbnNlKSA9PiB7XG5cdFx0XHRyZXR1cm4gcmVzcG9uc2UudGV4dCgpO1xuXHRcdH0pXG5cdFx0LnRoZW4oKHRleHQpID0+IHtcblx0XHRcdGNvbnN0IHRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCk7XG5cdFx0XHR0aGlzW3JlZmVyZW5jZVN5bWJvbF0uYXBwZW5kQ2hpbGQodGV4dE5vZGUpO1xuXG5cdFx0XHR0aGlzW2ludGVybmFsU3RhdGVTeW1ib2xdLmdldFN1YmplY3QoKVtcImxvYWRlZFwiXSA9IHRydWU7XG5cdFx0fSlcblx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdHRoaXNbaW50ZXJuYWxTdGF0ZVN5bWJvbF0uc2V0U3ViamVjdCh7XG5cdFx0XHRcdGxvYWRlZDogdHJ1ZSxcblx0XHRcdFx0ZXJyb3I6IGUudG9TdHJpbmcoKSxcblx0XHRcdH0pO1xuXG5cdFx0XHR0YXJnZXROb2RlLnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLnRvU3RyaW5nKCkpO1xuXHRcdH0pO1xuXG5cdHJldHVybiB0aGlzO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi8uLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7XG5cdEFUVFJJQlVURV9DTEFTUyxcblx0QVRUUklCVVRFX0hSRUYsXG5cdEFUVFJJQlVURV9JRCxcblx0QVRUUklCVVRFX05PTkNFLFxuXHRBVFRSSUJVVEVfU1JDLFxuXHRBVFRSSUJVVEVfVElUTEUsXG5cdEFUVFJJQlVURV9UWVBFLFxuXHRUQUdfTElOSyxcbn0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IEtFWV9ET0NVTUVOVCwgcmVmZXJlbmNlU3ltYm9sLCBSZXNvdXJjZSB9IGZyb20gXCIuLi9yZXNvdXJjZS5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IExpbmsgfTtcblxuLyoqXG4gKiBUaGlzIGNsYXNzIGlzIHVzZWQgYnkgdGhlIHJlc291cmNlIG1hbmFnZXIgdG8gZW1iZWQgZXh0ZXJuYWwgcmVzb3VyY2VzLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgUmVzb3VyY2UgY2xhc3NcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmtcbiAqL1xuY2xhc3MgTGluayBleHRlbmRzIFJlc291cmNlIHtcblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhcyB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmsjYXR0ci1hc31cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGNyb3NzT3JpZ2luPWFub255bW91cyB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3NjcmlwdCNhdHRyLWNyb3Nzb3JpZ2lufVxuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IGRpc2FibGVkXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBocmVmIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGluayNhdHRyLWhyZWZ9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBocmVmbGFuZyB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmsjYXR0ci1ocmVmbGFuZ31cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGltYWdlc2l6ZXMge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9saW5rI2F0dHItaW1hZ2VzaXplc31cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGltYWdlc3Jjc2V0IHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGluayNhdHRyLWltYWdlc3Jjc2V0fVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gaW50ZWdyaXR5IHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGluayNhdHRyLWludGVncml0eX1cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IG1lZGlhIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGluayNhdHRyLW1lZGlhfVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcHJlZmV0Y2gge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9saW5rI2F0dHItcHJlZmV0Y2h9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByZWZlcnJlcnBvbGljeSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmsjYXR0ci1yZWZlcnJlcnBvbGljeX1cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHJlbCB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmsjYXR0ci1yZWx9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGluayNhdHRyLXR5cGV9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzaXplcyB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmsjYXR0ci1zaXplc31cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IG5vbmNlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc2NyaXB0I2F0dHItbm9uY2V9XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIGV4dGVuZCh7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdGFzOiB1bmRlZmluZWQsXG5cdFx0XHRjcm9zc09yaWdpbjogXCJhbm9ueW1vdXNcIixcblx0XHRcdGRpc2FibGVkOiB1bmRlZmluZWQsXG5cdFx0XHRocmVmOiB1bmRlZmluZWQsXG5cdFx0XHRocmVmbGFuZzogdW5kZWZpbmVkLFxuXHRcdFx0aW1hZ2VzaXplczogdW5kZWZpbmVkLFxuXHRcdFx0aW1hZ2VzcmNzZXQ6IHVuZGVmaW5lZCxcblx0XHRcdGludGVncml0eTogdW5kZWZpbmVkLFxuXHRcdFx0bWVkaWE6IHVuZGVmaW5lZCxcblx0XHRcdHByZWZldGNoOiB1bmRlZmluZWQsXG5cdFx0XHRyZWZlcnJlcnBvbGljeTogdW5kZWZpbmVkLFxuXHRcdFx0cmVsOiB1bmRlZmluZWQsXG5cdFx0XHRzaXplczogdW5kZWZpbmVkLFxuXHRcdFx0dHlwZTogdW5kZWZpbmVkLFxuXHRcdFx0bm9uY2U6IHVuZGVmaW5lZCxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL3Jlc291cmNlL2xpbmtcIik7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uUmVzb3VyY2UuTGlua31cblx0ICovXG5cdGNyZWF0ZSgpIHtcblx0XHRjcmVhdGVFbGVtZW50LmNhbGwodGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFVSTEF0dHJpYnV0ZSgpIHtcblx0XHRyZXR1cm4gQVRUUklCVVRFX0hSRUY7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7TW9uc3Rlci5ET00uUmVzb3VyY2UuTGlua31cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRWxlbWVudCgpIHtcblx0Y29uc3QgZG9jdW1lbnQgPSB0aGlzLmdldE9wdGlvbihLRVlfRE9DVU1FTlQpO1xuXHR0aGlzW3JlZmVyZW5jZVN5bWJvbF0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFRBR19MSU5LKTtcblxuXHRmb3IgKGNvbnN0IGtleSBvZiBbXG5cdFx0XCJhc1wiLFxuXHRcdFwiY3Jvc3NPcmlnaW5cIixcblx0XHRcImRpc2FibGVkXCIsXG5cdFx0XCJocmVmXCIsXG5cdFx0XCJocmVmbGFuZ1wiLFxuXHRcdFwiaW1hZ2VzaXplc1wiLFxuXHRcdFwiaW1hZ2VzcmNzZXRcIixcblx0XHRcImludGVncml0eVwiLFxuXHRcdFwibWVkaWFcIixcblx0XHRcInByZWZldGNoXCIsXG5cdFx0XCJyZWZlcnJlcnBvbGljeVwiLFxuXHRcdFwic2l6ZXNcIixcblx0XHRcInJlbFwiLFxuXHRcdFwidHlwZVwiLFxuXHRcdEFUVFJJQlVURV9IUkVGLFxuXHRcdEFUVFJJQlVURV9JRCxcblx0XHRBVFRSSUJVVEVfQ0xBU1MsXG5cdFx0QVRUUklCVVRFX1RJVExFLFxuXHRcdEFUVFJJQlVURV9OT05DRSxcblx0XSkge1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihrZXkpICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXNbcmVmZXJlbmNlU3ltYm9sXVtrZXldID0gdGhpcy5nZXRPcHRpb24oa2V5KTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vLi4vLi4vZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQgeyBMaW5rIH0gZnJvbSBcIi4uL2xpbmsubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi8uLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBTdHlsZXNoZWV0IH07XG5cbi8qKlxuICogVGhpcyBjbGFzcyBpcyB1c2VkIGJ5IHRoZSByZXNvdXJjZSBtYW5hZ2VyIHRvIGVtYmVkIGV4dGVybmFsIHJlc291cmNlcy5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIFJlc291cmNlIGNsYXNzXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9saW5rXG4gKi9cbmNsYXNzIFN0eWxlc2hlZXQgZXh0ZW5kcyBMaW5rIHtcblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByZWwge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9saW5rI2F0dHItcmVsfVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBleHRlbmQoe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHRyZWw6IFwic3R5bGVzaGVldFwiLFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vcmVzb3VyY2UvbGluay9zdHlsZXNoZWV0XCIpO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSBcIi4uLy4uL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHtcblx0QVRUUklCVVRFX0NMQVNTLFxuXHRBVFRSSUJVVEVfSUQsXG5cdEFUVFJJQlVURV9OT05DRSxcblx0QVRUUklCVVRFX1NSQyxcblx0QVRUUklCVVRFX1RJVExFLFxuXHRBVFRSSUJVVEVfVFlQRSxcblx0VEFHX1NDUklQVCxcbn0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IEtFWV9ET0NVTUVOVCwgcmVmZXJlbmNlU3ltYm9sLCBSZXNvdXJjZSB9IGZyb20gXCIuLi9yZXNvdXJjZS5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IFNjcmlwdCB9O1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgaXMgdXNlZCBieSB0aGUgcmVzb3VyY2UgbWFuYWdlciB0byBlbWJlZCBzY3JpcHRzLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgUmVzb3VyY2UgY2xhc3NcbiAqL1xuY2xhc3MgU2NyaXB0IGV4dGVuZHMgUmVzb3VyY2Uge1xuXHQvKipcblx0ICogQHByb3BlcnR5IHtib29sZWFufSBhc3luYz10cnVlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc2NyaXB0I2F0dHItYXN5bmN9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjcm9zc09yaWdpbj1hbm9ueW1vdXMge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zY3JpcHQjYXR0ci1jcm9zc29yaWdpbn1cblx0ICogQHByb3BlcnR5IHtib29sZWFufSBkZWZlcj1mYWxzZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3NjcmlwdCNhdHRyLWRlZmVyfVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gaW50ZWdyaXR5IHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc2NyaXB0I2F0dHItaW50ZWdyaXR5fVxuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IG5vbW9kdWxlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc2NyaXB0I2F0dHItbm9tb2R1bGV9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBub25jZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3NjcmlwdCNhdHRyLW5vbmNlfVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcmVmZXJyZXJwb2xpY3kge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zY3JpcHQjYXR0ci1yZWZlcnJlcnBvbGljeX1cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHR5cGUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zY3JpcHQjYXR0ci10eXBlfVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBleHRlbmQoe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHRhc3luYzogdHJ1ZSxcblx0XHRcdGNyb3NzT3JpZ2luOiBcImFub255bW91c1wiLFxuXHRcdFx0ZGVmZXI6IGZhbHNlLFxuXHRcdFx0aW50ZWdyaXR5OiB1bmRlZmluZWQsXG5cdFx0XHRub21vZHVsZTogZmFsc2UsXG5cdFx0XHRub25jZTogdW5kZWZpbmVkLFxuXHRcdFx0cmVmZXJyZXJwb2xpY3k6IHVuZGVmaW5lZCxcblx0XHRcdHR5cGU6IFwidGV4dC9qYXZhc2NyaXB0XCIsXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RvbS9yZXNvdXJjZS9zY3JpcHRcIik7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uUmVzb3VyY2UuU2NyaXB0fVxuXHQgKi9cblx0Y3JlYXRlKCkge1xuXHRcdGNyZWF0ZUVsZW1lbnQuY2FsbCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VVJMQXR0cmlidXRlKCkge1xuXHRcdHJldHVybiBBVFRSSUJVVEVfU1JDO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLlJlc291cmNlLlNjcmlwdH1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRWxlbWVudCgpIHtcblx0Y29uc3QgZG9jdW1lbnQgPSB0aGlzLmdldE9wdGlvbihLRVlfRE9DVU1FTlQpO1xuXHR0aGlzW3JlZmVyZW5jZVN5bWJvbF0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFRBR19TQ1JJUFQpO1xuXG5cdGZvciAoY29uc3Qga2V5IG9mIFtcblx0XHRcImNyb3NzT3JpZ2luXCIsXG5cdFx0XCJkZWZlclwiLFxuXHRcdFwiYXN5bmNcIixcblx0XHRcImludGVncml0eVwiLFxuXHRcdFwibm9tb2R1bGVcIixcblx0XHRBVFRSSUJVVEVfTk9OQ0UsXG5cdFx0XCJyZWZlcnJlcnBvbGljeVwiLFxuXHRcdEFUVFJJQlVURV9UWVBFLFxuXHRcdEFUVFJJQlVURV9TUkMsXG5cdFx0QVRUUklCVVRFX0lELFxuXHRcdEFUVFJJQlVURV9DTEFTUyxcblx0XHRBVFRSSUJVVEVfVElUTEUsXG5cdF0pIHtcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oa2V5KSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzW3JlZmVyZW5jZVN5bWJvbF1ba2V5XSA9IHRoaXMuZ2V0T3B0aW9uKGtleSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSBcIi4uL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsT2JqZWN0IH0gZnJvbSBcIi4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IGVxdWlwV2l0aEludGVybmFsIH0gZnJvbSBcIi4uL3R5cGVzL2ludGVybmFsLm1qc1wiO1xuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9IUkVGLCBBVFRSSUJVVEVfU1JDIH0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgUmVzb3VyY2UgfSBmcm9tIFwiLi9yZXNvdXJjZS5tanNcIjtcbmltcG9ydCB7IERhdGEgfSBmcm9tIFwiLi9yZXNvdXJjZS9kYXRhLm1qc1wiO1xuaW1wb3J0IHsgU3R5bGVzaGVldCB9IGZyb20gXCIuL3Jlc291cmNlL2xpbmsvc3R5bGVzaGVldC5tanNcIjtcbmltcG9ydCB7IFNjcmlwdCB9IGZyb20gXCIuL3Jlc291cmNlL3NjcmlwdC5tanNcIjtcblxuZXhwb3J0IHsgUmVzb3VyY2VNYW5hZ2VyIH07XG5cbi8qKlxuICogVGhlIFJlc291cmNlTWFuYWdlciBpcyBhIHNpbmdsZXRvbiB0aGF0IG1hbmFnZXMgYWxsIHJlc291cmNlcy5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIFJlc291cmNlIGNsYXNzXG4gKi9cbmNsYXNzIFJlc291cmNlTWFuYWdlciBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcblx0ICogdGhyb3cge0Vycm9yfSB1bnN1cHBvcnRlZCBkb2N1bWVudCB0eXBlXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG5cdFx0c3VwZXIob3B0aW9ucyk7XG5cdFx0ZXF1aXBXaXRoSW50ZXJuYWwuY2FsbCh0aGlzKTtcblxuXHRcdGlmICghKHRoaXMuZ2V0T3B0aW9uKFwiZG9jdW1lbnRcIikgaW5zdGFuY2VvZiBEb2N1bWVudCkpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIGRvY3VtZW50IHR5cGVcIik7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBkZXByZWNhdGVkIHNpbmNlIDMuMTUuMCB1c2UgZ2V0SW50ZXJuYWwgaW5zdGVhZFxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gYmFzZXVybFxuXHQgKi9cblx0Z2V0T3B0aW9uKGtleSkge1xuXHRcdHJldHVybiB0aGlzLmdldEludGVybmFsKGtleSk7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGJhc2V1cmxcblx0ICovXG5cdGdldEJhc2VVUkwoKSB7XG5cdFx0dGhpcy5nZXRPcHRpb24oXCJkb2N1bWVudFwiKT8uYmFzZVVSTDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gYmFzZXVybFxuXHQgKiBAZGVwcmVjYXRlZCBzaW5jZSAzLjE1LjAgdXNlIGludGVybmFsRGVmYXVsdHMgaW5zdGVhZFxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiB0aGlzLmludGVybmFsRGVmYXVsdHM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHByb3BlcnR5IHtIVE1MRG9jdW1lbnR9IGRvY3VtZW50PWRvY3VtZW50IERvY3VtZW50XG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSByZXNvdXJjZXNcblx0ICogQHByb3BlcnR5IHtBcnJheX0gcmVzb3VyY2VzLnNjcmlwdHM9W10gYXJyYXkgd2l0aCB7QGxpbmsgTW9uc3Rlci5ET00uUmVzb3VyY2UuU2NyaXB0fSBvYmplY3RzXG5cdCAqIEBwcm9wZXJ0eSB7QXJyYXl9IHJlc291cmNlcy5zdHlsZXNoZWV0cz1bXSBhcnJheSB3aXRoIHtAbGluayBNb25zdGVyLkRPTS5SZXNvdXJjZS5MaW5rLlN0eWxlc2hlZXR9IG9iamVjdHNcblx0ICogQHByb3BlcnR5IHtBcnJheX0gcmVzb3VyY2VzLmRhdGE9W10gYXJyYXkgd2l0aCB7QGxpbmsgTW9uc3Rlci5ET00uUmVzb3VyY2UuRGF0YX0gb2JqZWN0c1xuXHQgKi9cblx0Z2V0IGludGVybmFsRGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oXG5cdFx0XHR7fSxcblx0XHRcdHtcblx0XHRcdFx0ZG9jdW1lbnQ6IGdldEdsb2JhbE9iamVjdChcImRvY3VtZW50XCIpLFxuXHRcdFx0XHRyZXNvdXJjZXM6IHtcblx0XHRcdFx0XHRzY3JpcHRzOiBbXSxcblx0XHRcdFx0XHRzdHlsZXNoZWV0czogW10sXG5cdFx0XHRcdFx0ZGF0YTogW10sXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQXBwZW5kIFRhZ3MgdG8gRE9NXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLlJlc291cmNlTWFuYWdlcn1cblx0ICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIHJlc291cmNlIGRlZmluaXRpb25cblx0ICovXG5cdGNvbm5lY3QoKSB7XG5cdFx0cnVuUmVzb3VyY2VNZXRob2QuY2FsbCh0aGlzLCBcImNvbm5lY3RcIik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2sgaWYgYXZhaWxhYmxlXG5cdCAqXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCByZXNvdXJjZSBkZWZpbml0aW9uXG5cdCAqL1xuXHRhdmFpbGFibGUoKSB7XG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKHJ1blJlc291cmNlTWV0aG9kLmNhbGwodGhpcywgXCJhdmFpbGFibGVcIikpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBhIHNjcmlwdFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3xVUkx9IHVybFxuXHQgKiBAcGFyYW0gW09iamVjdHx1bmRlZmluZWR9IG9wdGlvbnNcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uUmVzb3VyY2VNYW5hZ2VyfVxuXHQgKiBAc2VlIE1vbnN0ZXIuRE9NLlJlc291cmNlLlNjcmlwdFxuXHQgKi9cblx0YWRkU2NyaXB0KHVybCwgb3B0aW9ucykge1xuXHRcdHJldHVybiBhZGRSZXNvdXJjZS5jYWxsKHRoaXMsIFwic2NyaXB0c1wiLCB1cmwsIG9wdGlvbnMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBTdHlsZXNoZWV0XG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gdXJsXG5cdCAqIEBwYXJhbSBbT2JqZWN0fHVuZGVmaW5lZH0gb3B0aW9uc1xuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5SZXNvdXJjZU1hbmFnZXJ9XG5cdCAqIEBzZWUgTW9uc3Rlci5ET00uUmVzb3VyY2UuTGluay5TdHlsZXNoZWV0XG5cdCAqL1xuXHRhZGRTdHlsZXNoZWV0KHVybCwgb3B0aW9ucykge1xuXHRcdHJldHVybiBhZGRSZXNvdXJjZS5jYWxsKHRoaXMsIFwic3R5bGVzaGVldHNcIiwgdXJsLCBvcHRpb25zKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgRGF0YSBUYWdcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd8VVJMfSB1cmxcblx0ICogQHBhcmFtIFtPYmplY3R8dW5kZWZpbmVkfSBvcHRpb25zXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLlJlc291cmNlTWFuYWdlcn1cblx0ICogQHNlZSBNb25zdGVyLkRPTS5SZXNvdXJjZS5EYXRhXG5cdCAqL1xuXHRhZGREYXRhKHVybCwgb3B0aW9ucykge1xuXHRcdHJldHVybiBhZGRSZXNvdXJjZS5jYWxsKHRoaXMsIFwiZGF0YVwiLCB1cmwsIG9wdGlvbnMpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2RcbiAqIEByZXR1cm4ge0FycmF5fVxuICovXG5mdW5jdGlvbiBydW5SZXNvdXJjZU1ldGhvZChtZXRob2QpIHtcblx0Y29uc3QgcmVzdWx0ID0gW107XG5cblx0Zm9yIChjb25zdCB0eXBlIG9mIFtcInNjcmlwdHNcIiwgXCJzdHlsZXNoZWV0c1wiLCBcImRhdGFcIl0pIHtcblx0XHRjb25zdCByZXNvdXJjZXMgPSB0aGlzLmdldE9wdGlvbihgcmVzb3VyY2VzLiR7dHlwZX1gKTtcblx0XHRpZiAoIWlzQXJyYXkocmVzb3VyY2VzKSkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCByZXNvdXJjZSBvZiByZXNvdXJjZXMpIHtcblx0XHRcdGlmICghKHJlc291cmNlIGluc3RhbmNlb2YgUmVzb3VyY2UpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIHJlc291cmNlIGRlZmluaXRpb25cIik7XG5cdFx0XHR9XG5cblx0XHRcdHJlc3VsdC5wdXNoKHJlc291cmNlW21ldGhvZF0oKSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gdXJsXG4gKiBAcGFyYW0gW09iamVjdHx1bmRlZmluZWR9IG9wdGlvbnNcbiAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLlJlc291cmNlTWFuYWdlcn1cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGFkZFJlc291cmNlKHR5cGUsIHVybCwgb3B0aW9ucykge1xuXHRpZiAodXJsIGluc3RhbmNlb2YgVVJMKSB7XG5cdFx0dXJsID0gdXJsLnRvU3RyaW5nKCk7XG5cdH1cblxuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHRsZXQgcmVzb3VyY2U7XG5cdHN3aXRjaCAodHlwZSkge1xuXHRcdGNhc2UgXCJzY3JpcHRzXCI6XG5cdFx0XHRyZXNvdXJjZSA9IG5ldyBTY3JpcHQoZXh0ZW5kKHt9LCBvcHRpb25zLCB7IFtBVFRSSUJVVEVfU1JDXTogdXJsIH0pKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJzdHlsZXNoZWV0c1wiOlxuXHRcdFx0cmVzb3VyY2UgPSBuZXcgU3R5bGVzaGVldChleHRlbmQoe30sIG9wdGlvbnMsIHsgW0FUVFJJQlVURV9IUkVGXTogdXJsIH0pKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJkYXRhXCI6XG5cdFx0XHRyZXNvdXJjZSA9IG5ldyBEYXRhKGV4dGVuZCh7fSwgb3B0aW9ucywgeyBbQVRUUklCVVRFX1NSQ106IHVybCB9KSk7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCB0eXBlICR7dHlwZX1gKTtcblx0fVxuXG5cdHRoaXMuZ2V0T3B0aW9uKFwicmVzb3VyY2VzXCIpPy5bdHlwZV0ucHVzaChyZXNvdXJjZSk7XG5cdHJldHVybiB0aGlzO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywgMjAyNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IENvbmZpZ01hbmFnZXJTdHlsZVNoZWV0IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBDb25maWdNYW5hZ2VyU3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG5cdENvbmZpZ01hbmFnZXJTdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIGNvbmZpZ21hbmFnZXIgeyBcbltkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtkaXNwbGF5Om5vbmV9IFxufWAsXG5cdFx0MCxcblx0KTtcbn0gY2F0Y2ggKGUpIHtcblx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0ZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKSxcblx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdGUgKyBcIlwiLFxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRDdXN0b21FbGVtZW50LFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IENvbmZpZ01hbmFnZXJTdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9jb25maWctbWFuYWdlci5tanNcIjtcbmltcG9ydCB7IGdldFdpbmRvdyB9IGZyb20gXCIuLi8uLi9kb20vdXRpbC5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgQ29uZmlnTWFuYWdlciB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpbmRleERCSW5zdGFuY2VTeW1ib2wgPSBTeW1ib2woXCJpbmRleERCSW5zdGFuY2VcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGluaXRpYWxpemVkUHJvbWlzZVN5bWJvbCA9IFN5bWJvbChcImluaXRpYWxpemVkUHJvbWlzZVN5bWJvbFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgTU9ERV9SRUFET05MWSA9IFwicmVhZG9ubHlcIjtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgTU9ERV9SRUFEX1dSSVRFID0gXCJyZWFkd3JpdGVcIjtcblxuLyoqXG4gKiBUaGUgQ29uZmlnIE1hbmFnZXIgY29tcG9uZW50IGlzIHVzZWQgdG8gZW5jYXBzdWxhdGUgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGFwcGxpY2F0aW9uLlxuICpcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIGNvbmZpZyBtYW5hZ2VyIGNvbXBvbmVudFxuICovXG5jbGFzcyBDb25maWdNYW5hZ2VyIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvY29tcG9uZW50LWhvc3QvY29uZmlnLW1hbmFnZXJAQGluc3RhbmNlXCIpO1xuXHR9XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdC8qKlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICogQHR5cGUge3N5bWJvbH1cblx0XHQgKi9cblx0XHR0aGlzW2luaXRpYWxpemVkUHJvbWlzZVN5bWJvbF0gPSBbXTtcblx0XHR0aGlzW2luZGV4REJJbnN0YW5jZVN5bWJvbF0gPSBudWxsO1xuXHRcdHRoaXNbaW5pdGlhbGl6ZWRQcm9taXNlU3ltYm9sXS5wdXNoKG9wZW5EYXRhYmFzZS5jYWxsKHRoaXMpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0cmVhZHkoKSB7XG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKHRoaXNbaW5pdGlhbGl6ZWRQcm9taXNlU3ltYm9sXSk7XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgSFRNTCB0YWcsIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1vcHRpb25zYCBtdXN0IGJlIHVzZWQuXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZy9lbi9kb2MvI2NvbmZpZ3VyYXRlLWEtbW9uc3Rlci1jb250cm9sfVxuXHQgKlxuXHQgKiBUaGUgaW5kaXZpZHVhbCBjb25maWd1cmF0aW9uIHZhbHVlcyBjYW4gYmUgZm91bmQgaW4gdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIFRlbXBsYXRlIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbiBNYWluIHRlbXBsYXRlXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdH0sXG5cdFx0XHRpbmRleERCOiB7XG5cdFx0XHRcdG5hbWU6IFwibW9uc3RlclwiLFxuXHRcdFx0XHR2ZXJzaW9uOiAyLFxuXHRcdFx0XHRvYmplY3RTdG9yZToge1xuXHRcdFx0XHRcdG5hbWU6IFwiY29uZmlnXCIsXG5cdFx0XHRcdFx0a2V5UGF0aDogXCJrZXlcIixcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IGtleVxuXHQgKiBAcmV0dXJuIHtQcm9taXNlPHVua25vd24+fVxuXHQgKi9cblx0Z2V0Q29uZmlnKGtleSkge1xuXHRcdHJldHVybiB0aGlzLnJlYWR5KCkudGhlbigoKSA9PiB7XG5cdFx0XHRyZXR1cm4gZ2V0QmxvYi5jYWxsKHRoaXMsIGtleSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IGtleVxuXHQgKiBAcmV0dXJuIHtQcm9taXNlPGJvb2xlYW4+fVxuXHQgKi9cblx0aGFzQ29uZmlnKGtleSkge1xuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIGdldEJsb2IuY2FsbCh0aGlzLCBrZXkpO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IGtleVxuXHQgKiBAcGFyYW0geyp9IHZhbHVlXG5cdCAqIEByZXR1cm4ge1Byb21pc2U8dW5rbm93bj59XG5cdCAqL1xuXHRzZXRDb25maWcoa2V5LCB2YWx1ZSkge1xuXHRcdHJldHVybiB0aGlzLnJlYWR5KCkudGhlbigoKSA9PiB7XG5cdFx0XHRyZXR1cm4gc2V0QmxvYi5jYWxsKHRoaXMsIGtleSwgdmFsdWUpO1xuXHRcdH0pO1xuXHR9XG5cblx0ZGVsZXRlQ29uZmlnKGtleSkge1xuXHRcdHJldHVybiB0aGlzLnJlYWR5KCkudGhlbigoKSA9PiB7XG5cdFx0XHRyZXR1cm4gZGVsZXRlQmxvYi5jYWxsKHRoaXMsIGtleSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLWNvbmZpZy1tYW5hZ2VyXCI7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7Q1NTU3R5bGVTaGVldFtdfVxuXHQgKi9cblx0c3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG5cdFx0cmV0dXJuIFtDb25maWdNYW5hZ2VyU3R5bGVTaGVldF07XG5cdH1cblxuXHQvKipcblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gb3BlbkRhdGFiYXNlKCkge1xuXHRjb25zdCB3aW5kb3cgPSBnZXRXaW5kb3coKTtcblxuXHRjb25zdCBuYW1lID0gdGhpcy5nZXRPcHRpb24oXCJpbmRleERCLm5hbWVcIik7XG5cdGNvbnN0IHZlcnNpb24gPSB0aGlzLmdldE9wdGlvbihcImluZGV4REIudmVyc2lvblwiKTtcblx0Y29uc3Qgc3RvcmFnZU5hbWUgPSB0aGlzLmdldE9wdGlvbihcImluZGV4REIub2JqZWN0U3RvcmUubmFtZVwiKTtcblx0Y29uc3QgS2V5UGF0aCA9IHRoaXMuZ2V0T3B0aW9uKFwiaW5kZXhEQi5vYmplY3RTdG9yZS5rZXlQYXRoXCIpO1xuXG5cdGlmICghbmFtZSB8fCAhdmVyc2lvbikge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIlRoZSBkYXRhYmFzZSBuYW1lIGFuZCB2ZXJzaW9uIG11c3QgYmUgc2V0LlwiKTtcblx0fVxuXG5cdGNvbnN0IHJlcXVlc3QgPSB3aW5kb3cuaW5kZXhlZERCLm9wZW4obmFtZSwgdmVyc2lvbik7XG5cblx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRyZXF1ZXN0Lm9uZXJyb3IgPSAoZXZlbnQpID0+IHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXCJFcnJvciBvcGVuaW5nIGRhdGFiYXNlXCIsIGV2ZW50KTtcblx0XHRcdHJlamVjdChyZXF1ZXN0LmVycm9yKTtcblx0XHR9O1xuXG5cdFx0cmVxdWVzdC5vbnN1Y2Nlc3MgPSAoZXZlbnQpID0+IHtcblx0XHRcdHRoaXNbaW5kZXhEQkluc3RhbmNlU3ltYm9sXSA9IGV2ZW50Py50YXJnZXQ/LnJlc3VsdDtcblx0XHRcdHJlc29sdmUocmVxdWVzdC5yZXN1bHQpO1xuXHRcdH07XG5cblx0XHRyZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9IChldmVudCkgPT4ge1xuXHRcdFx0Y29uc3QgZGIgPSBldmVudC50YXJnZXQucmVzdWx0O1xuXG5cdFx0XHRsZXQgb2JqZWN0U3RvcmU7XG5cdFx0XHRpZiAoIWRiLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoc3RvcmFnZU5hbWUpKSB7XG5cdFx0XHRcdG9iamVjdFN0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoc3RvcmFnZU5hbWUsIHsga2V5UGF0aDogS2V5UGF0aCB9KTtcblx0XHRcdH1cblxuXHRcdFx0b2JqZWN0U3RvcmUudHJhbnNhY3Rpb24ub25jb21wbGV0ZSA9IChldmVudCkgPT4ge1xuXHRcdFx0XHRjb25zb2xlLmxvZyhcIkRhdGFiYXNlIHVwZ3JhZGUgY29tcGxldGVcIik7XG5cdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdH07XG5cdFx0fTtcblx0fSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGUgZWl0aGVyIFwicmVhZG9ubHlcIiBvciBcInJlYWR3cml0ZVwiXG4gKi9cbmZ1bmN0aW9uIGdldE9iamVjdFN0b3JlKG1vZGUpIHtcblx0Y29uc3Qgc3RvcmFnZU5hbWUgPSB0aGlzLmdldE9wdGlvbihcImluZGV4REIub2JqZWN0U3RvcmUubmFtZVwiKTtcblxuXHRpZiAoIXRoaXNbaW5kZXhEQkluc3RhbmNlU3ltYm9sXSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIlRoZSBkYXRhYmFzZSBpcyBub3Qgb3Blbi5cIik7XG5cdH1cblxuXHQvLyBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9JREJEYXRhYmFzZS90cmFuc2FjdGlvblxuXHQvLyB0cmFuc2FjdGlvbihzdG9yZU5hbWVzLCBtb2RlLCBvcHRpb25zKVxuXHRjb25zdCB0eCA9IHRoaXNbaW5kZXhEQkluc3RhbmNlU3ltYm9sXS50cmFuc2FjdGlvbihzdG9yYWdlTmFtZSwgbW9kZSk7XG5cdHJldHVybiB0eC5vYmplY3RTdG9yZShzdG9yYWdlTmFtZSk7XG59XG5cbi8qKlxuICogQHJldHVybiB7UHJvbWlzZTx1bmtub3duPn1cbiAqL1xuZnVuY3Rpb24gY2xlYXJPYmplY3RTdG9yZSgpIHtcblx0Y29uc3Qgc3RvcmUgPSBnZXRPYmplY3RTdG9yZS5jYWxsKHRoaXMsIFwicmVhZHdyaXRlXCIpO1xuXG5cdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0Y29uc3QgcmVxID0gc3RvcmUuY2xlYXIoKTtcblx0XHRyZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKGV2dCkge1xuXHRcdFx0Y29uc29sZS5sb2coXCJjbGVhck9iamVjdFN0b3JlIGNvbXBsZXRlZFwiKTtcblx0XHRcdHJlc29sdmUoKTtcblx0XHR9O1xuXHRcdHJlcS5vbmVycm9yID0gZnVuY3Rpb24gKGV2dCkge1xuXHRcdFx0Y29uc29sZS5lcnJvcihcImNsZWFyT2JqZWN0U3RvcmU6XCIsIGV2dC50YXJnZXQuZXJyb3JDb2RlKTtcblx0XHRcdHJlamVjdChldnQudGFyZ2V0LmVycm9yQ29kZSk7XG5cdFx0fTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGdldEJsb2Ioa2V5KSB7XG5cdGNvbnN0IHN0b3JlID0gZ2V0T2JqZWN0U3RvcmUuY2FsbCh0aGlzLCBNT0RFX1JFQURPTkxZKTtcblxuXHRjb25zdCByZXEgPSBzdG9yZS5nZXQoa2V5KTtcblxuXHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZXZ0KSB7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IGV2dC50YXJnZXQucmVzdWx0O1xuXHRcdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRcdHJlc29sdmUodmFsdWUuYmxvYik7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHJlamVjdChuZXcgRXJyb3IoXCJUaGUgdmFsdWUgb2YgdGhlIGtleSAnXCIgKyBrZXkgKyBcIicgaXMgbm90IGRlZmluZWQuXCIpKTtcblx0XHR9O1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gZGVsZXRlQmxvYihrZXkpIHtcblx0Y29uc3Qgc3RvcmUgPSBnZXRPYmplY3RTdG9yZS5jYWxsKHRoaXMsIE1PREVfUkVBRF9XUklURSk7XG5cblx0Y29uc3QgcmVxID0gc3RvcmUuZGVsZXRlKGtleSk7XG5cblx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRyZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKGV2dCkge1xuXHRcdFx0cmVzb2x2ZSgpO1xuXHRcdH07XG5cblx0XHRyZXEub25lcnJvciA9IGZ1bmN0aW9uIChldnQpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXCJkZWxldGVCbG9iOlwiLCBldnQudGFyZ2V0LmVycm9yQ29kZSk7XG5cdFx0XHRyZWplY3QoZXZ0LnRhcmdldC5lcnJvckNvZGUpO1xuXHRcdH07XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBzZXRCbG9iKGtleSwgYmxvYikge1xuXHRjb25zdCBzdG9yZSA9IGdldE9iamVjdFN0b3JlLmNhbGwodGhpcywgTU9ERV9SRUFEX1dSSVRFKTtcblxuXHRjb25zdCBLZXlQYXRoID0gdGhpcy5nZXRPcHRpb24oXCJpbmRleERCLm9iamVjdFN0b3JlLmtleVBhdGhcIik7XG5cdGNvbnN0IG9iaiA9IHt9O1xuXHRvYmpbS2V5UGF0aF0gPSBrZXk7XG5cdG9iai5ibG9iID0gYmxvYjtcblx0Y29uc3QgcmVxID0gc3RvcmUucHV0KG9iaik7XG5cblx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRyZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKGV2dCkge1xuXHRcdFx0cmVzb2x2ZSgpO1xuXHRcdH07XG5cblx0XHRyZXEub25lcnJvciA9IGZ1bmN0aW9uIChldnQpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXCJzZXRCbG9iOlwiLCBldnQudGFyZ2V0LmVycm9yQ29kZSk7XG5cdFx0XHRyZWplY3QoZXZ0LnRhcmdldC5lcnJvckNvZGUpO1xuXHRcdH07XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udHJvbFwiIHBhcnQ9XCJjb250cm9sXCI+XG4gICAgICAgICAgICA8c2xvdD48L3Nsb3Q+XG4gICAgICAgIDwvZGl2PmA7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChDb25maWdNYW5hZ2VyKTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0Q3VzdG9tRWxlbWVudCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgXCIuLi9ub3RpZnkvbm90aWZ5Lm1qc1wiO1xuaW1wb3J0IHsgSG9zdFN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L2hvc3QubWpzXCI7XG5pbXBvcnQgeyBnZXRMb2NhbGVPZkRvY3VtZW50IH0gZnJvbSBcIi4uLy4uL2RvbS9sb2NhbGUubWpzXCI7XG5pbXBvcnQgeyBFbWJlZCB9IGZyb20gXCIuLi8uLi9pMThuL3Byb3ZpZGVycy9lbWJlZC5tanNcIjtcbmltcG9ydCB7IGdldERvY3VtZW50VHJhbnNsYXRpb25zIH0gZnJvbSBcIi4uLy4uL2kxOG4vdHJhbnNsYXRpb25zLm1qc1wiO1xuaW1wb3J0IHsgd2luZG93UmVhZHkgfSBmcm9tIFwiLi4vLi4vZG9tL3JlYWR5Lm1qc1wiO1xuaW1wb3J0IHsgRm9jdXNNYW5hZ2VyIH0gZnJvbSBcIi4uLy4uL2RvbS9mb2N1c21hbmFnZXIubWpzXCI7XG5pbXBvcnQgeyBSZXNvdXJjZU1hbmFnZXIgfSBmcm9tIFwiLi4vLi4vZG9tL3Jlc291cmNlbWFuYWdlci5tanNcIjtcbmltcG9ydCB7IGZpcmVDdXN0b21FdmVudCB9IGZyb20gXCIuLi8uLi9kb20vZXZlbnRzLm1qc1wiO1xuaW1wb3J0IHsgaXNJdGVyYWJsZSB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCBcIi4vY29uZmlnLW1hbmFnZXIubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IEhvc3QgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcHJvbWlzZXNTeW1ib2wgPSBTeW1ib2woXCJwcm9taXNlc1N5bWJvbFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgbm90aWZ5RWxlbWVudFN5bWJvbCA9IFN5bWJvbChcIm5vdGlmeUVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IG92ZXJsYXlFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwib3ZlcmxheUVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNvbmZpZ01hbmFnZXJFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiY29uZmlnTWFuYWdlckVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGZvY3VzTWFuYWdlclN5bWJvbCA9IFN5bWJvbChcImZvY3VzTWFuYWdlclwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcmVzb3VyY2VNYW5hZ2VyU3ltYm9sID0gU3ltYm9sKFwicmVzb3VyY2VNYW5hZ2VyXCIpO1xuXG4vKipcbiAqIFRoZSBIb3N0IGNvbXBvbmVudCBpcyB1c2VkIHRvIGVuY2Fwc3VsYXRlIHRoZSBjb250ZW50IG9mIGEgd2ViIGFwcC5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1hZ2VzL2hvc3QucG5nXCI+XG4gKlxuICogRGVwZW5kZW5jaWVzOiB0aGUgc3lzdGVtIHVzZXMgZnVuY3Rpb25zIG9mIHRoZSBbbW9uc3RlcmpzXShodHRwczovL21vbnN0ZXJqcy5vcmcvKSBsaWJyYXJ5XG4gKlxuICogWW91IGNhbiBjcmVhdGUgdGhpcyBjb250cm9sIGVpdGhlciBieSBzcGVjaWZ5aW5nIHRoZSBIVE1MIHRhZyA8bW9uc3Rlci1ob3N0IC8+YCBkaXJlY3RseSBpbiB0aGUgSFRNTCBvciB1c2luZ1xuICogSmF2YXNjcmlwdCB2aWEgdGhlIGBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWhvc3QnKTtgIG1ldGhvZC5cbiAqXG4gKiBgYGBodG1sXG4gKiA8bW9uc3Rlci1ob3N0PjwvbW9uc3Rlci1ob3N0PlxuICogYGBgXG4gKlxuICogT3IgeW91IGNhbiBjcmVhdGUgdGhpcyBDdXN0b21Db250cm9sIGRpcmVjdGx5IGluIEphdmFzY3JpcHQ6XG4gKlxuICogYGBganNcbiAqIGltcG9ydCAnQHNjaHVrYWkvY29tcG9uZW50LXN0YXRlL3NvdXJjZS9ob3N0Lm1qcyc7XG4gKiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWhvc3QnKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBCb2R5IHNob3VsZCBoYXZlIGEgY2xhc3MgXCJoaWRkZW5cIiB0byBlbnN1cmUgdGhhdCB0aGUgc3R5bGVzIGFyZSBhcHBsaWVkIGNvcnJlY3RseS5cbiAqXG4gKiBgYGBjc3NcbiAqIGJvZHkuaGlkZGVuIHtcbiAqICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBzdGFydHVtbCBob3N0LnBuZ1xuICogc2tpbnBhcmFtIG1vbm9jaHJvbWUgdHJ1ZVxuICogc2tpbnBhcmFtIHNoYWRvd2luZyBmYWxzZVxuICogSFRNTEVsZW1lbnQgPHwtLSBDdXN0b21FbGVtZW50XG4gKiBDdXN0b21FbGVtZW50IDx8LS0gSG9zdFxuICogQGVuZHVtbFxuICpcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIHNpbXBsZSBob3N0IGNvbXBvbmVudFxuICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0Lkhvc3QjbW9uc3Rlci1ob3N0LWNvbm5lY3RlZFxuICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0Lkhvc3QjbW9uc3Rlci1ob3N0LWRpc2Nvbm5lY3RlZFxuICovXG5jbGFzcyBIb3N0IGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvY29tcG9uZW50LWhvc3QvSG9zdEBAaW5zdGFuY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgSFRNTCB0YWcsIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1vcHRpb25zYCBtdXN0IGJlIHVzZWQuXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZy9lbi9kb2MvI2NvbmZpZ3VyYXRlLWEtbW9uc3Rlci1jb250cm9sfVxuXHQgKlxuXHQgKiBUaGUgaW5kaXZpZHVhbCBjb25maWd1cmF0aW9uIHZhbHVlcyBjYW4gYmUgZm91bmQgaW4gdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIFRlbXBsYXRlIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbiBNYWluIHRlbXBsYXRlXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmZWF0dXJlcyBGZWF0dXJlIGRlZmluaXRpb25zXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIGtleVxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0Z2V0Q29uZmlnKGtleSkge1xuXHRcdGlmICh0aGlzW2NvbmZpZ01hbmFnZXJFbGVtZW50U3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID09PSBmYWxzZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhlcmUgaXMgbm8gY29uZmlnIG1hbmFnZXIgZWxlbWVudFwiKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXNbY29uZmlnTWFuYWdlckVsZW1lbnRTeW1ib2xdLmdldENvbmZpZyhrZXkpO1xuXHR9XG5cblx0aGFzQ29uZmlnKGtleSkge1xuXHRcdGlmICh0aGlzW2NvbmZpZ01hbmFnZXJFbGVtZW50U3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID09PSBmYWxzZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhlcmUgaXMgbm8gY29uZmlnIG1hbmFnZXIgZWxlbWVudFwiKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXNbY29uZmlnTWFuYWdlckVsZW1lbnRTeW1ib2xdLmhhc0NvbmZpZyhrZXkpO1xuXHR9XG5cblx0ZGVsZXRlQ29uZmlnKGtleSkge1xuXHRcdGlmICh0aGlzW2NvbmZpZ01hbmFnZXJFbGVtZW50U3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID09PSBmYWxzZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhlcmUgaXMgbm8gY29uZmlnIG1hbmFnZXIgZWxlbWVudFwiKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXNbY29uZmlnTWFuYWdlckVsZW1lbnRTeW1ib2xdLmRlbGV0ZUNvbmZpZyhrZXkpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0c2V0Q29uZmlnKGtleSwgdmFsdWUpIHtcblx0XHRpZiAodGhpc1tjb25maWdNYW5hZ2VyRWxlbWVudFN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA9PT0gZmFsc2UpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlRoZXJlIGlzIG5vIGNvbmZpZyBtYW5hZ2VyIGVsZW1lbnRcIik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXNbY29uZmlnTWFuYWdlckVsZW1lbnRTeW1ib2xdLnNldENvbmZpZyhrZXksIHZhbHVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAZmlyZXMgTW9uc3Rlci5Db21wb25lbnRzLkhvc3QuSG9zdCNtb25zdGVyLWhvc3QtY29ubmVjdGVkXG5cdCAqL1xuXHRjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHRzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG5cdFx0LyoqXG5cdFx0ICogc2hvdyB0aGUgc2Nyb2xsIGJhciBhbHdheXNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqL1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5vdmVyZmxvd1kgPSBcInNjcm9sbFwiO1xuXG5cdFx0Y29uc3QgY2xhc3NOYW1lcyA9IHRoaXMuZ2V0T3B0aW9uKFwiY2xhc3Nlcy5ib2R5XCIpO1xuXG5cdFx0aWYgKGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZXMpKSB7XG5cdFx0XHRkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lcyk7XG5cdFx0fVxuXG5cdFx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci1ob3N0LWNvbm5lY3RlZFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAZmlyZXMgTW9uc3Rlci5Db21wb25lbnRzLkhvc3QuSG9zdCNtb25zdGVyLWhvc3QtZGlzY29ubmVjdGVkXG5cdCAqL1xuXHRkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHRzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5vdmVyZmxvd1kgPSBcIlwiO1xuXG5cdFx0Y29uc3QgY2xhc3NOYW1lcyA9IHRoaXMuZ2V0T3B0aW9uKFwiY2xhc3Nlcy5ib2R5XCIpO1xuXHRcdGlmICghZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lcykpIHtcblx0XHRcdGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZChjbGFzc05hbWVzKTtcblx0XHR9XG5cblx0XHRpZiAoaXNJdGVyYWJsZSh0aGlzW3Byb21pc2VzU3ltYm9sXSkgPT09IGZhbHNlKSB7XG5cdFx0XHR0aGlzW3Byb21pc2VzU3ltYm9sXSA9IFtdO1xuXHRcdH1cblxuXHRcdHRoaXNbcHJvbWlzZXNTeW1ib2xdLnB1c2goXG5cdFx0XHRuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRcdHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihcblx0XHRcdFx0XHRcIm1vbnN0ZXItaG9zdC1jb25uZWN0ZWRcIixcblx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7IG9uY2U6IHRydWUgfSxcblx0XHRcdFx0KTtcblx0XHRcdH0pLFxuXHRcdCk7XG5cblx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLWhvc3QtZGlzY29ubmVjdGVkXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0Lkhvc3R9XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHRoaXNbcHJvbWlzZXNTeW1ib2xdID0gW107XG5cdFx0dGhpc1twcm9taXNlc1N5bWJvbF0ucHVzaCh3aW5kb3dSZWFkeSk7XG5cblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblxuXHRcdGluaXRDb250cm9sUmVmZXJlbmNlcy5jYWxsKHRoaXMpO1xuXHRcdGluaXRFdmVudEhhbmRsZXIuY2FsbCh0aGlzKTtcblx0XHRpbml0VHJhbnNsYXRpb25zLmNhbGwodGhpcyk7XG5cblx0XHR0aGlzW2ZvY3VzTWFuYWdlclN5bWJvbF0gPSBuZXcgRm9jdXNNYW5hZ2VyKHRoaXMpO1xuXHRcdHRoaXNbcmVzb3VyY2VNYW5hZ2VyU3ltYm9sXSA9IG5ldyBSZXNvdXJjZU1hbmFnZXIodGhpcyk7XG5cblx0XHR0cnkge1xuXHRcdFx0dGhpc1twcm9taXNlc1N5bWJvbF0ucHVzaCh0aGlzW3Jlc291cmNlTWFuYWdlclN5bWJvbF0uYXZhaWxhYmxlKCkpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChlKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5pc0Nvbm5lY3RlZCA9PT0gZmFsc2UpIHtcblx0XHRcdHRoaXNbcHJvbWlzZXNTeW1ib2xdLnB1c2goXG5cdFx0XHRcdG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdFx0XHR0aGlzLmFkZEV2ZW50TGlzdGVuZXIoXG5cdFx0XHRcdFx0XHRcIm1vbnN0ZXItaG9zdC1jb25uZWN0ZWRcIixcblx0XHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHsgb25jZTogdHJ1ZSB9LFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pLFxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhlIFByb21pc2UgaXMgcmVzb2x2ZWQgd2hlbiB0aGUgZWxlbWVudCBpcyBjb25uZWN0ZWQgdG8gdGhlIERPTSBhbmQgYWxsIHJlc291cmNlcyBhcmUgYXZhaWxhYmxlLlxuXHQgKiBJZiB0aGUgZWxlbWVudCBpcyBub3QgY29ubmVjdGVkIHRvIHRoZSBET00sIHRoZSBQcm9taXNlIGlzIHJlamVjdGVkLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0b25SZWFkeSgpIHtcblx0XHRpZiAoaXNJdGVyYWJsZSh0aGlzW3Byb21pc2VzU3ltYm9sXSkgPT09IGZhbHNlKSB7XG5cdFx0XHR0aGlzW3Byb21pc2VzU3ltYm9sXSA9IFtdO1xuXHRcdH1cblxuXHRcdHJldHVybiBQcm9taXNlLmFsbCh0aGlzW3Byb21pc2VzU3ltYm9sXSkudGhlbigoKSA9PiB7XG5cdFx0XHR0aGlzW3Byb21pc2VzU3ltYm9sXSA9IFtdO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy9tb25zdGVyL01vbnN0ZXIuRE9NLkZvY3VzTWFuYWdlci5odG1sfE1vbnN0ZXIuRE9NLkZvY3VzTWFuYWdlcn1cblx0ICogQHJldHVybiB7Kn1cblx0ICovXG5cdGdldCBmb2N1c01hbmFnZXIoKSB7XG5cdFx0cmV0dXJuIHRoaXNbZm9jdXNNYW5hZ2VyU3ltYm9sXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jL21vbnN0ZXIvTW9uc3Rlci5ET00uUmVzb3VyY2VNYW5hZ2VyLmh0bWx8TW9uc3Rlci5ET00uUmVzb3VyY2VNYW5hZ2VyfVxuXHQgKiBAcmV0dXJuIHsqfVxuXHQgKi9cblx0Z2V0IHJlc291cmNlTWFuYWdlcigpIHtcblx0XHRyZXR1cm4gdGhpc1tyZXNvdXJjZU1hbmFnZXJTeW1ib2xdO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0Lkhvc3R9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBUaGVyZSBpcyBubyBvdmVybGF5IGVsZW1lbnQgZGVmaW5lZC5cblx0ICovXG5cdHRvZ2dsZU92ZXJsYXkoKSB7XG5cdFx0aWYgKHRoaXNbb3ZlcmxheUVsZW1lbnRTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgPT09IGZhbHNlKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGVyZSBpcyBubyBvdmVybGF5IGVsZW1lbnQgZGVmaW5lZC5cIik7XG5cdFx0fVxuXG5cdFx0dGhpc1tvdmVybGF5RWxlbWVudFN5bWJvbF0udG9nZ2xlKCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7SG9zdH1cblx0ICogQHRocm93cyB7RXJyb3J9IFRoZXJlIGlzIG5vIG92ZXJsYXkgZWxlbWVudCBkZWZpbmVkLlxuXHQgKi9cblx0b3Blbk92ZXJsYXkoKSB7XG5cdFx0aWYgKHRoaXNbb3ZlcmxheUVsZW1lbnRTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgPT09IGZhbHNlKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGVyZSBpcyBubyBvdmVybGF5IGVsZW1lbnQgZGVmaW5lZC5cIik7XG5cdFx0fVxuXG5cdFx0dGhpc1tvdmVybGF5RWxlbWVudFN5bWJvbF0ub3BlbigpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge0hvc3R9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBUaGVyZSBpcyBubyBvdmVybGF5IGVsZW1lbnQgZGVmaW5lZC5cblx0ICovXG5cdGNsb3NlT3ZlcmxheSgpIHtcblx0XHRpZiAodGhpc1tvdmVybGF5RWxlbWVudFN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA9PT0gZmFsc2UpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlRoZXJlIGlzIG5vIG92ZXJsYXkgZWxlbWVudCBkZWZpbmVkLlwiKTtcblx0XHR9XG5cblx0XHR0aGlzW292ZXJsYXlFbGVtZW50U3ltYm9sXS5jbG9zZSgpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1ob3N0XCI7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7Q1NTU3R5bGVTaGVldFtdfVxuXHQgKi9cblx0c3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG5cdFx0cmV0dXJuIFtIb3N0U3R5bGVTaGVldF07XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5JMThuLkxvY2FsZX1cblx0ICovXG5cdGdldCBsb2NhbGUoKSB7XG5cdFx0cmV0dXJuIGdldExvY2FsZU9mRG9jdW1lbnQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtUcmFuc2xhdGlvbnN9XG5cdCAqL1xuXHRnZXQgdHJhbnNsYXRpb25zKCkge1xuXHRcdHJldHVybiBnZXREb2N1bWVudFRyYW5zbGF0aW9ucygpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfE1lc3NhZ2V9IG1lc3NhZ2Vcblx0ICovXG5cdHB1c2hOb3RpZmljYXRpb24obWVzc2FnZSkge1xuXHRcdGlmICh0aGlzW25vdGlmeUVsZW1lbnRTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgPT09IGZhbHNlKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGVyZSBpcyBubyBub3RpZnkgZWxlbWVudCBkZWZpbmVkLlwiKTtcblx0XHR9XG5cblx0XHR0aGlzW25vdGlmeUVsZW1lbnRTeW1ib2xdLnB1c2gobWVzc2FnZSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7U2VsZWN0fVxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqL1xuZnVuY3Rpb24gaW5pdENvbnRyb2xSZWZlcmVuY2VzKCkge1xuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHR0aGlzW292ZXJsYXlFbGVtZW50U3ltYm9sXSA9IHRoaXMucXVlcnlTZWxlY3RvcihcIm1vbnN0ZXItb3ZlcmxheVwiKTtcblx0dGhpc1tub3RpZnlFbGVtZW50U3ltYm9sXSA9IHRoaXMucXVlcnlTZWxlY3RvcihcIm1vbnN0ZXItbm90aWZ5XCIpO1xuXHR0aGlzW2NvbmZpZ01hbmFnZXJFbGVtZW50U3ltYm9sXSA9IHRoaXMucXVlcnlTZWxlY3Rvcihcblx0XHRcIm1vbnN0ZXItY29uZmlnLW1hbmFnZXJcIixcblx0KTtcbn1cblxuZnVuY3Rpb24gaW5pdFRyYW5zbGF0aW9ucygpIHtcblx0aWYgKGlzSXRlcmFibGUodGhpc1twcm9taXNlc1N5bWJvbF0pID09PSBmYWxzZSkge1xuXHRcdHRoaXNbcHJvbWlzZXNTeW1ib2xdID0gW107XG5cdH1cblxuXHR0aGlzW3Byb21pc2VzU3ltYm9sXS5wdXNoKEVtYmVkLmFzc2lnblRyYW5zbGF0aW9uc1RvRWxlbWVudCgpKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpbml0RXZlbnRIYW5kbGVyKCkge1xuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuICAgICAgICA8dGVtcGxhdGUgaWQ9XCJob3N0LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6aG9zdC1jb250YWluZXIuY29udGVudFwiXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwicGFydCBwYXRoOmhvc3QtY29udGFpbmVyLm5hbWUsIGRhdGEtbW9uc3Rlci1yb2xlIHBhdGg6aG9zdC1jb250YWluZXIubmFtZVwiPjwvZGl2PlxuICAgICAgICA8L3RlbXBsYXRlPlxuXG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJob3N0LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPHNsb3Q+PC9zbG90PlxuICAgICAgICA8L2Rpdj5gO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoSG9zdCk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCAyMDI0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqL1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgT3ZlcmxheVN0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IE92ZXJsYXlTdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcblx0T3ZlcmxheVN0eWxlU2hlZXQuaW5zZXJ0UnVsZShcblx0XHRgXG5AbGF5ZXIgb3ZlcmxheSB7IFxuOndoZXJlKGh0bWwpe2xpbmUtaGVpZ2h0OjEuMTU7LXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OjEwMCU7LW1vei10ZXh0LXNpemUtYWRqdXN0OjEwMCU7dGV4dC1zaXplLWFkanVzdDoxMDAlfTp3aGVyZShoMSl7Zm9udC1zaXplOjJlbTttYXJnaW4tYmxvY2stZW5kOi42N2VtO21hcmdpbi1ibG9jay1zdGFydDouNjdlbX06d2hlcmUoZGwsb2wsdWwpIDp3aGVyZShkbCxvbCx1bCl7bWFyZ2luLWJsb2NrLWVuZDowO21hcmdpbi1ibG9jay1zdGFydDowfTp3aGVyZShocil7Ym94LXNpemluZzpjb250ZW50LWJveDtjb2xvcjppbmhlcml0O2hlaWdodDowfTp3aGVyZShhYmJyW3RpdGxlXSl7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTstd2Via2l0LXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkfTp3aGVyZShiLHN0cm9uZyl7Zm9udC13ZWlnaHQ6Ym9sZGVyfTp3aGVyZShjb2RlLGtiZCxwcmUsc2FtcCl7Zm9udC1mYW1pbHk6bW9ub3NwYWNlLG1vbm9zcGFjZTtmb250LXNpemU6MWVtfTp3aGVyZShzbWFsbCl7Zm9udC1zaXplOjgwJX06d2hlcmUodGFibGUpe2JvcmRlci1jb2xvcjpjdXJyZW50Q29sb3I7dGV4dC1pbmRlbnQ6MH06d2hlcmUoYnV0dG9uLGlucHV0LHNlbGVjdCl7bWFyZ2luOjB9OndoZXJlKGJ1dHRvbil7dGV4dC10cmFuc2Zvcm06bm9uZX06d2hlcmUoYnV0dG9uLGlucHV0OmlzKFt0eXBlPWJ1dHRvbiBpXSxbdHlwZT1yZXNldCBpXSxbdHlwZT1zdWJtaXQgaV0pKXstd2Via2l0LWFwcGVhcmFuY2U6YnV0dG9ufTp3aGVyZShwcm9ncmVzcyl7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9OndoZXJlKHNlbGVjdCl7dGV4dC10cmFuc2Zvcm06bm9uZX06d2hlcmUodGV4dGFyZWEpe21hcmdpbjowfTp3aGVyZShpbnB1dFt0eXBlPXNlYXJjaCBpXSl7LXdlYmtpdC1hcHBlYXJhbmNlOnRleHRmaWVsZDtvdXRsaW5lLW9mZnNldDotMnB4fTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiw6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b257aGVpZ2h0OmF1dG99Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOmluaGVyaXQ7b3BhY2l0eTouNTR9Ojotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lfTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbjtmb250OmluaGVyaXR9OndoZXJlKGJ1dHRvbixpbnB1dDppcyhbdHlwZT1idXR0b24gaV0sW3R5cGU9Y29sb3IgaV0sW3R5cGU9cmVzZXQgaV0sW3R5cGU9c3VibWl0IGldKSk6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyLXN0eWxlOm5vbmU7cGFkZGluZzowfTp3aGVyZShidXR0b24saW5wdXQ6aXMoW3R5cGU9YnV0dG9uIGldLFt0eXBlPWNvbG9yIGldLFt0eXBlPXJlc2V0IGldLFt0eXBlPXN1Ym1pdCBpXSkpOjotbW96LWZvY3VzcmluZ3tvdXRsaW5lOjFweCBkb3R0ZWQgQnV0dG9uVGV4dH06d2hlcmUoOi1tb3otdWktaW52YWxpZCl7Ym94LXNoYWRvdzpub25lfTp3aGVyZShkaWFsb2cpe2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6c29saWQ7Y29sb3I6IzAwMDtoZWlnaHQ6LW1vei1maXQtY29udGVudDtoZWlnaHQ6Zml0LWNvbnRlbnQ7bGVmdDowO21hcmdpbjphdXRvO3BhZGRpbmc6MWVtO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7d2lkdGg6LW1vei1maXQtY29udGVudDt3aWR0aDpmaXQtY29udGVudH06d2hlcmUoZGlhbG9nOm5vdChbb3Blbl0pKXtkaXNwbGF5Om5vbmV9OndoZXJlKHN1bW1hcnkpe2Rpc3BsYXk6bGlzdC1pdGVtfWh0bWx7aGVpZ2h0OjEwMCV9Ym9keSxodG1se21pbi1oZWlnaHQ6Y2FsYygxMDB2aCAtIDQwcHgpfWJvZHl7Ym94LXNpemluZzpib3JkZXItYm94O21hcmdpbjowO3BhZGRpbmc6MDt3b3JkLWJyZWFrOmJyZWFrLXdvcmR9LmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmlubGluZXtkaXNwbGF5OmlubGluZX0uaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5ncmlke2Rpc3BsYXk6Z3JpZH0uaW5saW5lLWdyaWR7ZGlzcGxheTppbmxpbmUtZ3JpZH0uZmxleHtkaXNwbGF5OmZsZXh9LmlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXh9LmhpZGRlbiwuaGlkZSwubm9uZXtkaXNwbGF5Om5vbmV9LnZpc2libGV7dmlzaWJpbGl0eTp2aXNpYmxlfS5pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW59Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMSwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0yLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci0we2JvcmRlci1yYWRpdXM6MDtib3JkZXItc3R5bGU6bm9uZTtib3JkZXItd2lkdGg6MH0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMiwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMSwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMiwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMywubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfWlucHV0LG1ldGVyLHByb2dyZXNzLHNlbGVjdCx0ZXh0YXJlYXthY2NlbnQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci13aWR0aCk7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZToxMDAlO21hcmdpbjowO291dGxpbmU6bm9uZX1pbnB1dCxzZWxlY3QsdGV4dGFyZWF7aGVpZ2h0Oi1tb3otZml0LWNvbnRlbnQ7aGVpZ2h0OmZpdC1jb250ZW50O3BhZGRpbmc6LjRyZW0gLjZyZW19dGV4dGFyZWF7bWluLWhlaWdodDo2cmVtO3Jlc2l6ZTp2ZXJ0aWNhbH1pbnB1dFt0eXBlPWNvbG9yXXtoZWlnaHQ6MnJlbTttYXJnaW46MDtwYWRkaW5nOi4xcmVtO3dpZHRoOjJyZW19aW5wdXQ6aG92ZXI6bm90KFt0eXBlPXJhZGlvXSk6bm90KFt0eXBlPWNoZWNrYm94XSk6bm90KFt0eXBlPXJhbmdlXSksc2VsZWN0OmhvdmVyLHRleHRhcmVhOmhvdmVye2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTIpO3RyYW5zaXRpb246YmFja2dyb3VuZCAuOHMsY29sb3IgLjI1cyAuMDgzMzMzMzMzM3N9aW5wdXQ6Zm9jdXMsc2VsZWN0OmZvY3VzLHRleHRhcmVhOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKTtvdXRsaW5lLW9mZnNldDozcHh9QGZvbnQtZmFjZXtmb250LWRpc3BsYXk6c3dhcDtmb250LWZhbWlseTpSYWxld2F5O2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjMwMDtzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24veC1mb250LXdvZmYyO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdNZ0FCQUFBQUFGSjRBQklBQUFBQXQzQUFBRklRQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHb0U4Rys0NkhJVThCbUEvVTFSQlZFUUFoUWdJZ1FvSm54UVJDQXFCdWd5Qm1uQUxoQ0lBQVRZQ0pBT0lRQVFnQllVVUJ5QU1neHdiZmFRWGFKZWZtTnowWm9sM3Y2MGNQZVpNcEc0SEpTams1cUlJTmc2Q0dNZ2xaZi8vbjNGMGpPR0dEUkExclhlSW5jSklVa05IR242OXFNUkRVOFphampzOVVic210bnFuRTN2M3ZxaVFtZlJRcExrS1c2UVp3YWw2czVJVWlKTlVTVUcvT3dvRFk2QjY3NU9qU2prRFNTTXUycGVkcHU5dkpJTFVsSmQ3MDdEK2VMSHBqWURJNGUxdURuTGpISHZ4cERYR015ZHVMTG4xcXQwRkNRT3lGc0paRTEra0pxM1QrSWU3QkpGSU5PQU5iaTl2VFV6aEk3VzRHbVVMMGxXalQvRlFRaS9tKyt4dVBQMDJvbVJIZTVwbjREZ2ZOWmZuK1I5ejk3OXRtRWVOYXExUnhScUhUalRQTkEySkZFZ3JIZG8vbnQvVy81emJnR0N4aWE2RWtWaUEyRmhZR0l0Um1FMVp2VlV2cXRTdGI3TXZyZDNXNyt0MiswWGRvVG56empZYnA3bVNITEFDa2hNV2dDVEw2czBXdjBBVW9oSmZFcUUzb3BQZDU4aWtKbktsbyszdWFlU0hZSjZmY0ljWGpkK3JLVUVzYUVsVHFsVWxWUm0vTitlLzhpUDBMNUFLb3pObEozLzlpQndzaE02djVKSVVKeWtnVDNmZHJPbXE2TGNzK1orcS9Yc0FYRnhFRWlRSVVhS29zRm43Y3RUKzdCQlM1ZHFEb2xKWHVuYmw3cnR0ekQvdjM4NExmdEphZ0ZGQUxZUEU1QTdnbk1yWkJodDRsWHFzYlpLbWJkcTBUdE9tcG1nTml1Z00yUFlCYzczTXJqcTdHTHNvWEhjVHB0OXVQdkZEejhlTjNnK3N4clBRQXc2RFRGTnAvT1pJOWlpbk5pdFpoUm1wUU9Da2RvQmRBTmpWV2xhdk1pdHdETkpYL3BZSUFrVnduT1Avdlc1eHpvTXc3U0FGQUtVK1p6L2tuUC9aOWorT2Rmckw4S2UydmRLYm1waHV4SlN1TDhFVUFnZ0hJaUJIUCs0NDRFRHp2MVBUUTNZa09jT1NsVEhtajZVc2RmbzJMKy9qcFllN0lIV2NRVWdjZ2twTEZSMVlUVzhDR0tRWDliOEdGQUFBSDl0bzRSSFE2R0x2RlJyaTREaXdUekFBRERNS0RQci9mWjNWL3FkZ1Bta0d6S1RFbVdFWGI3UTN0dGdUWXFvMm5QNi8rOTdYZitGLzlKSEFWc0lJY0FDQlp3UnlrR1Q3Z0NSOFZvaEpjVU9PU0RqaVNiQXBoTW96bTJKUnB0QnRVVzY5WGJORkczSVZ5MktMb2s0OC9MZnNtNTI3SWFxQkxNdUJiT0ZJd2VGVWQwMXZlTCtZOHhXaHR6Y3FUbTJDSVRjNWVMSndTSTRmWWxMWUZJVkhBcy8vVDUzTjQvWXgxaEtHVStIU3FFcmRwUFBuczZmcXFXSnNOYlphQ2xRdGpsT0xVTXNoY2RvQTVUUXNzNEpMYzkwU3hDT01NVUs0S1A5TnNocHpwWDR2d3hLQ2hDQVNSRVJFL0xLc1dSbEp3TktBY1RuWEFoRXkzcjFLSGNaYS9ZZFg1ODQyMC9pYVhtdEdob0NBaUlpQVIyM3YvUDkrS1RBQ0FONWhka0MzeFVDNEVMc2dndmtSMmtyRWpZU0V2MEJLU21IQ2hJdllPQ0FKa0tRZ3lZTU0yUW9VTXpDbzE2Qko4NXFBV0NDZEhlazNBQjBPREwxTHEwUGdUZTNoU3cyZmhpNFhoUHVldVFXRUg2eHRJRVFBYkcyTm01b1Y1NFFGUCt5S2dPMkQ0VDV0L3d6MlhXOTIvcnBxcExUU0lQOHFWOXZMdk9kczBOTFd5WDUxSzZvZmJ2UFpFMXBhZjd3MzE4QzladGhxN2YzMmJmdUw2NFZaSHc1MTRZc201bGdmTmJmRzdXOWxzVUE0RUd6NzIzdnh3R3pwNGZSUittUDhMczVCN0tCMmVESlhjNnh3bEc2OTAydWc3QXpMQThOWTIxQjJkQi9QNXFmT1Y4dDFvbnlMNWpaRERmUUk1Umc4RDk4RnZIc3ZjbEh1SnNyZHZzSnJwYy9Uci9ndS9FZlpKelhVenBXYURqN003K1VQOC84RWtBQVZhQVMvQ1IrWHMvSk40WWFJY08xeEhaY1VhTU1ia2xycEt5N05mUUpLUWNVUmFnb0dtQ1crSEE2RU52YmczM3NsMnBJWVJtRTliSUhiMG1BNmtrNmxONUdkeU1ONUVibVFoeEhLbHdNZ1Q1OGNndzdwZFVSejduZk1jUWZjVTN2SWN6VmtkcmhYOFhIcTQwMTJ0Rk9kN2tUL2E3cDdtODNXQTcxRjdhTzlNK2RqdmRkNmo3ZnhtK0QxUHUzejN1aXJ2bXV5emE1M3RydjkzbFRiODJSVDJLYUZWVUtNTlAzNkJ2UU1DbzBHc0Vka0w4cyt6TGcxRXhiTTBOZ0NXQXhnemY4MkRHMUtYTWZjNHJqTmNRZkhLeFNDdVJ1Qkk1QW9kREREa0dkVjhDblZWRW1FTWFpbjRTYTBBWFRJMFJCTnBPWUFMVnExYVY5dnhKaVV6SEtXQ2lzNm1wMEJ1a3gwNjlHcjc0c25WTmJzb0Nta1ZNb3A1K3BER2FXejJzTERyMmlOdCtvWk8wYjM2WVNJaldjeHZubE4weDBWaGxZb1c0VVJqWFhLeUxHM1kzcW9MZEVhekhBRUVvVnVNbDNERGVFUlZwRy9qZVRFUjBDVVpFVTFtb3RxRm9pd0pGS1VhREZpYWNTbEJKckVqU1FLSi9DU0ZTbVNLazE2MVFsa2RLZXlTWFl6c2RYS2k2STlpa05KTXRDVUtsT3VRcVVxMVZIVDF6cTYrbHpmUU5BSWE1SnBSb3ZXYUVQN1p4dU5tVGpNTEJZdXEzWFVUZ05kUkRkNlVxOUEzM2NieEF6eERET04wSXhhTlZheGQvL3MvYWp4QUU2Sm5QYkZHWmt1QzN1YU5VOEVzRFNMWlZteE9qMVBkOEhReFhTcGVka1hhd2JXNndabzgrNkRyaXVRRkZ3NUlwdm5KaDYvWmdGSks5MzBhRU0yWEozeUpCMERIb3BoYnFnMHVya3ZNSWdZbHRiR1JQY2RrZDdWai9OVjRwYkFiYSsvRTRCakNnOXA1WmVyaS9wZE0wQ0cvN3RYWk54VkUrNmJZYXZRbjZ1bVd3eTNGWGY2Z2crWG5BdEhEZ2prUE5pVWJxcG93dkRVdmJSbGNqNVhaSFl6VjhKaTRObDF2anNPaHJNYXhPSHhlRHdlanovVklISlhuNkgwd2hnNnFGT0VVcVFvMFdMRTBvaExDVEtKMHlRNUxVOXlSUXBTcFVsZlpuQVNCa1dwbENsWG9WS1Y2cWliVEJ0TW1RS1lZV0hWVVVmdEdJdDYybGRuTUgzRXBpVTBxVlFxSGJDTHhPVStFNC8xWExmQkVoektoZ1VjZ1VTaGZ4d21EejlHNUVSQUFITDdGSFJLUXlybnd1eFFmNXJoSEJFQlJJb1NMVVlzelViYzRydE1kcGwyNkZnZDU1dGdRRzh4L2ZBWjJKekl2R2JtbHJjWEFtM3dYS2E3RWxmUGNTMnR4ZnErZWdmaUhHb0RNeHlCUktIdnkzU0ozMFE2VjgrNm1kZlpzYUZWM2VPVUtzV015bmtoeUwxdTRWSTBMMVNKTEl4WHlZenBMeU5xaVd6MFhUcGthVHluMVpEdGk5MG1ZMDJ2MHRVcXR6U0NsK3FySzdySXV2MXY5UkQwc2d4cUdiSm9HR2ZFa2xFMVl6cjI4TzFsMktld1g5TjRBRGFOMWI3TDBJYVJUWE91eTl5aXU4MnBPd0hRQkMrcGxkQ3JPbUswTWcvcjF2UllFbTNEQkVjZ1VlZ21VeDAzRzQrd2l0UWdPZkVSRUNWWlVZM200dG1FSXZ3VUtVcTBHTEUwNGxJQ1R1STB5VHF0RmNsRUNsS2xTYTg2V0VaM0pKdnNGV2k3SXhLSk9Cd09oOFBoY0VUclJOM3REcGxNSnBOaFJJYWlxQWlHWVJnbWNia3N5NE5vei9yb2ZRTDdLY2FsTkQwRk9XM1JHWnVPQlIyeG1WTXhrVWdrRGwwWDd1Sml1dFM4Yk5HYUUrdi9aUU93cWU4NkdJSWVFc0N1b3ZXWWZDcTJ0dnBNT0JON016TzY4R1dYTGh0bWdXMmZmZUhwMU11N3F3WDVORHdUa3BDU2NlZkJreGR2ZmluQVJJUklVYUxGaUtVUmx4SUFpWkUwclZxNjVJb1VTWlVtdmVxVU1ycHMvejFaV0VaNVlCZ0dBQUFBQUFDQTBXWnNkMUNwK0h3K24yL2NPbGs0ckRwU2wxSzNIcjM2amcxQ1R0d3pPY051Q1hZTmdpRFlob3RIMW9nT0xSU3V4OG5pbDRyMmlZYXYwbm9yelh2WjJuWmpaTGZhS0QrVlJnSC9mZ05tcGtGYmhnaUdpVWFjR2ZYTm1LNDlGUHZZOXR2YmNUbTc1KzNmZGFtVzZZU3R3a2R6YUNIWmN2cTBDUzRpVTVabU54TFhHQmUvclFvSGpNUDEvUUVHVk1aRkpnYkRESi81VDNleUJjdkdQU3FUaW1KY0MrWVFVanFHdjJuQzdxM25CMERPcXYyRzNWdmxJaEtJVzhNUlNCUzZ5WlRpTkdGWCtSR0NESHM4UFlJZFRqZEFVQXl2UWt3U0NwcGhOZDIwbXB1TWpRWEtCUWtXSWpRcG1KUlVLWXhLWGNMRGM2a0lmSGFUS2FPTVNjNE1zVlJZUTBlelU2RkxwVnVQM3RMSHV3cHJZZnRoaXdpSEZBV2tTcG1XUnQrNm5KNlUxOEN1eUo4NWoyeDBiMGQ3TjlwaWJxMGxiNE5uVStwTzd0RVVMaWhkVU8yaHJwdGdZWENzeEJGQTNsUTJubUZjM0ZiUmpHQmdDZDZCVUg3cW5YQmJhY2pzSzk5UmZJRE1BRmtCc29PK25aZzhQMEJCZ01JQXRRRWFuOVdRRXM5TUFITkc4NTU0d2ErQXJucXZUVGpwR1M3ZS9pbFBtakFSUG1uc3hXa2RBQVJ5T0w5eUFoeW14N1NHS2xrN0doNDh2RHZOZmRnK0lUQlpwRDlnemdNSUJ3d0JrNXRta0VYSXFxTU1hRVRnL0hVZTI2b0xUVHA0dzRnOVVrWjViZ2J4RUh0Q3lUTFlQSG1KVXEzdUpwcXp2U05jdW1iQmRYWVFza3UxQzkyTjhqVHZERkVVMHJ2ODE3Z21xc0dqUGZSdU5qdmVyVERtSENFNHErcWJ6T2p1SUl2UmFEaHpaMS9WSlVwaGhpT1FLSFF3c1o1VGpndUFCOEN1S3IrWUlNS2V3SW9NTzV4eDllNEFFQlREU1lwbTJPVHk4b0lveVlvYWplalVRYjhKd0QvWEI1aVNzd1VpZ2hBc1JHaFMwQ2d6SnpYTUNUVTFYRVpIYVRBWFRDUVNpY1hiWTRWQ29SZ0xFeHN0bGRDdHhaMWFVbmx1dEdodE9RdDE4L1JVZFZwa0RCdmJTNG5Fb05Gb05CcU5GaWRYbjBXSkxKQ3JVOENVYnFxTWhaR3BtK0Y4RWJCSVVhTEZpS1VSbHhLRUVpVlZMVk55UmdwU3BVbXZ1Z0FaaEFHbHlwU3JVS2xLdGJwbUE2d3JRTGNldmZxYUU3RFRXczZZSG0wRTJkY2xpV1dzV0Uzbm1TN0c1YjZ1R1ZuUG5OdXl5V2JId3hEanBXazZNK2oyMGVZTUxRLzAzVk1tS200Wm5nbEpTTW00OCtESml6ZS9LcmRDa1ZNbEtzeUltbWVaZjBHUXl3SkJFRnhDL3JnZ0NJSWdDSUl6OTBiREV3TVRqOGZqQVVBeGRTNlZzRGNzMWc4d2ZZQ1hyTmQ5OFNIOGdhams1dnVVUHFnNFhEUDlKbTdvR1d2R1h4U2RFTExmcnNFU0VzbVdYVGNNM2NMdEhGU0diU0hCQWpjQ2lVSVhKcUhuTWxPTFJCTGFzblVLMlN1eDF6cW5NQi9aTUdPeC96UHU4b2hEQURBQU9BQUNBQW1BQWtBRFlIZ2xDa0N1TFZBaVNJS0ZDUDBraFdOS1BGVXdiZHlMK3NEQnllZ2thSjJXRU10V3JFNi80dnBXN0c2ZTRtRHcwQmZ4WmhGdDlHdmZoUEVBbXlkNGNNdFVxc1BsNGF5N0d1YWs1dDBONTJPT3dKYUJnU05Ic2syTmg3cUVXWllWcThlK2tzeGpqM0VLU1hnOExOaWxRcUZRekUxZnY1dHZwUVFGdEZJbXlMdGl2VGVXa1FDazVaUmUyUWlKMlpyTFlEVjg2TUJZV1g1eEFQdW5rMXludFoyeDZhYk5yaVhBc2hXcmNma1U2M3kvai9tK2duek44STNZdHh6ZkNlT2lBUGk3WWgxd0JCS0Z6czcyV3JsaWZXYjNuK3NPbWtTaXpYSFRYcG12QW5PZ2VhKzdTOEYxRUhQOG5VNEluRlk0UTVtV3AzQkFMbGVzYTdCejRGdU9iRTRFWFJuaXlrOGh0Q09pazh2bGNzV1lJS3I0L2NITTNYWEljY3lPRHNCWEg5UjNOSUJqVXNkMWZpZGowaWluSDVyaVpmVU9EVGlGUXVsemVheDcrakhaVnl4ZjM4VTN4TGRyK1U3dTQzSDU5S2VnSzk1SnZ3dnlxbjNJZ3hMeVVHMlk0UWdrQ3YxQlREK0l2Q01QTWcwbFZZUkJuU0lRa2FKRWl4RkxJeTRsQ0NUMmhtMHNFQWdFSlREcnFiNGdKMkpZb3pTVUtWZWhVcFhxYk5yWitaaGVqYis1ckhyR3pjY0xRaEpTTXU0OGVQTGl6YS9LelFuTUNFS3dFS0ZKWVlHeU55SzFsdEpVL0o2V21GeFVxTHNJblhTczM0czRBSm5UTlA5SlY4MVpXMDhid294d2pNb0dnKzFnUFB4d0FNZVprQkVFK1ZzdXBzeG85Y1dTNWl2bmFTVXBGSlExVEVidGV5S2pNQUxsU1FoNlJLM2dDQ1FLM2VRVTRqYkVDN3VxL0F5Q0RIdUNCUVRzY01iVnV3TVVCQlREUTl5UUZNMnd5Um55RVN4S3NxSkdVM1JpRURQWEw5RFo1RjRJcEF1U1lDRkNrOElHWlZNRkNkT2tMdUUxSUtWRmxHZ3hZbW5FTmVOQkNWU0prbkpFaitTTUZFbVZKcjNxbURLSXpHbGtTYmJkOUhMazFmeCszZStWQ3BtS29oZ2x5VUJWcWt5NUNwV3FWS2NhVUczVWxmcG9rTWJheE5Bc0xWcTFhVTlHSWxPZnZKbE1wcGpKWkRKYlJqdGFOV2svcnpXb01JSWFOV2VzYXV0MDN5TU8yUHhJSTZNQkU5MXFmb0R5eENTd2dDT1FLSFNUNlFWdURoNWhGWGxwdHJnTWp5QktzcUlhTDE3R2Nka0E1OEE4Z0NZLzMyUExid2tuQ1FCQU5tdEN3Nk5vQnJWSXF6YnRPVXNXVTQwNWxDd1oxdER4NXAxbzdURWRKQmdTR0w3NzdCRWpvOTRhbzlvanRLOWJ2NS9oQU04UmE0NlNqZ21kZUx6TkRNaGlVSG51N1FtRERCWitJVUZpVGNKb0hjbElrU3BOK21aR2NUY0g1SWNCcGNxVVIwV29WS1U2NnFaM3VzZWdGM21uK2JGbHJpcTlCbW1uVjdQYjdHMFJ0Q2FzT3dLUVpFZ2g0ODZESnkvZS9KNkpyejJydnoxMThQazhQcC9QNXkvOU5QSmlyOWdKd3lsS3JVeTVDcFdxVkVmZFZGTnRocldnVlp2MlpJU1llcmVCb0pkSEtlYWVnMEo3VUJlcVI4U08xYW4zcEZBTUtMd0l0VlNKKytGbW5pSEVzRkVRVytwZWtvTTVIcWY1MGx4QkxMdjl6Q01BWlRQUTE3bjlYNWtIRlg3YzZRMkp2YitLU0lzU0xVWXNqYmhtdkpFRVd4TEhKRFhNU0s1SWtWUnAwcXVPSUtPTHpHbGtTYmJkOUhMa3lWZWdNQlc1VUt3a0dXd3BWYVpjaFVwVnFxT21qOXA1cWxOVDMvLzF4c2lBUkNLUlNBQkFCUURBZ0VBZ0VGNGtjSFBBNHkvZjJtN1lHbzVBb3RDVlNTSWFUZVZHRkFBbHgxUklaUnZHYzVqMEpJZW9jeHp6cEt0Y2F5Y3hJMWhTeVYrNjEvR0N3dXpBTWZRTXc2TFRLZDhvc0ZBY3JOVkRQSWVGczZMSEZ4bE55dGllRGpiOEdPUVFiaFNJdGowMmdJZzhPVmJVZmdGL0d0a2FDc01NUnlCUjZENTVtY1BqTGJZa0k4SjB3SndYZi9NMW5vOWRqVFZkV2hwaUQ0TWprQ2owR1lZNmtZMU41UTRFS2dVaFdJalFwTkNqYktvU0NOT2lYb1piVkY5L3pzTGRHWUdnVmJNendKd3o4K21xVTJzalkxQnJjamwzZkcvc2Z6NnE3b2cyWTM0dmZwZFVoZS9DWjJISDh5QUEveFE4RDNteUFJRE5BVnNDQUpiWm54aTJjSDVzMmNSSndWYU9tMldXc3RQR1p4WVpBMUtJUjdtdDNBekFtdGtGVUk1aWxEY0FtMlF3b2pGWEI2cjNJc0J5VnE1bCt0TmFiY3RyRitRckFRK2xraVVXemlIR0tXYzV1MUZVZE1LTWhueGl4bkFVNGxrYUFuby9uaHVTY0VuSHJRNlFFZG9SMkZJUTRHRm5ZSGtmQmdKVHdObDQyclFIN2RWNklCS3g0R0RJUFRTUEF0WUhjdWEvVXplUDFlcFpKTmF0T0FTcUZFUWtZQ1dTaktvbWN2SjRRL2xZbVI2YldpRVdXVklGQU5hSVRPVncyWlZIenI1TXpDLzBpL0Qxa3dFV1ZEL3pUOWI2REc2MzJpSzRVcUM3VFAyVU5ibmtFWTg2NFhZaUtsVytCUzNGVUt4SERRWW8rOEI5eXoxdzRoMDdCYTRRa2t6TDBMR0pHSXJyWitjTlh1QjNQdzZjZWRwQU1VNkd6UlFxRFc3bnRCK2NXaXNGeW8zV0NtUWpMME1tWG9CcU5XUkZJWkk3Z0RYaHRTY3Q4THBCZmtIc1JRNlhwVmZJUnZaQlU4cDg1RjRoSDhFS254bUVZbXUrSzZjWVkzZ1FlMSsvVHpKQUlSRjFjS3ZObW4yUTBNOGFPV3NYalQ5anZCQ3I1MjF4cXRXVkk2YXBMcGVoS2N4WnVXOUJXTEozUUdxZjlKVGl1dnZVMHdkZ2h3LzhJQlJJWDFWdU5ReXNCcVN0Vk5QWFpEdEwrTml2Y3dpMVBnRC81TzBveW0ySis3OG9uMHJ4Z0E5T0NsYTBnTjBKRVBIWS9ZUDRuaElhd2JFSjJIbFVuUjlEYnpmV01QQXZ4a3J0QTE0eDZqckFtWVVjZ1JmUmxabm5ZeHMyeStvd0xEd2tTMlZrM2RmakFBVVZJSmV3RDA2dHorQXV3NnBJcXhUbDRkbWpvR2xZUVhETWIzMUZKUHMrNjdqOVJOZ3NIWWd3d09jWXR1Zks2VmhDTE11YzRORlRidjlwRVFqRk5qTnIwTFdBSkIzWEdIbTR4N25CUmZYbUhRaFEwYnpxbU90VlRueWVTNngxSGJDL2Fyai9YZS83cU1PbDdNMGVVbkRQZ2h5aXNGOHFJb0ZiaGZFZ3F5RDRvM28ySzVSTHJNSllDYUM1Z3JId3VwRE5zVm9YRkkzKzlXWVBhMWx3dk9wOTFmdmFuR2hvbUppcDk3dXBOSG1PSCt5YjEraExJcGRkcjIxUmlBMTNKaWI3OWs2cFRCM2RGQW83MTRwUTF5UlpiVFhNeWRBN21RRTlSRkdoTC9PeHJIamRSbm8wWGRmOXlFZTBuWEZmT2VyelkrRE8zZmlCV0JGTUFtcUZiT2Vna0FxWFRWbzVmUzY2eU9JVmxMQ1NkY3A2OHVlNHlKZWxoVVB0VTZWbTJqbk5BUHF3V2FObm52MXc3SlA2eFFaYXdTSVBsT0ZNRVVHdXpQQ0JiMmRKVXlnWTZROXdyNkpVakpyNk5aY2JFWXdML2N4WmZlYzgyTE9zTUs0OXhYNjI4UDhOcTNUREVjSUFQWnd3aEx3NThoUEtrNUpTb0RCSmdpVExFU3RQQTUwbTdTcVltTlN4NkZOdjBpU2pVMDR6bVRiTllzNENxemZKZmxtQy9ZWkpnTkJ3REFhQmk4ZUJIVDVIQWs0SVFrS3VSRVIyY2VIQ2pTdFhZaEplTU42OEVmejR3Zmp6SnhFZ2dKU2NuRXlnVUF3bEpYZGgxSnlFQytjaGdnWXBUaHhLdkhoMkVpUnlsaVNKcDJUcEtEbzZXMlRJc0ZXbVRGNnk1RUR5NUVNS0ZQQldxQkJma1JJQ0JsVm8xYXBSYXRTeVU2Zk9WdlhxK1dqUXdGZVRKbjZhdGVNd01mRm4wY0ZlcDA0QnVuVFpvbHMzcEVjUHZsNjlrRDU5K0NaTjJ1YVVVNFJPTzQxcjJqU3VPZk4yV3JCQTZFMHlaTWtNNGJ3NWh3c1duQzVhY3Joa3hlbXlOWnNyTnR5dTJ2SzRac2R0elo3SE9zd0dFd3Voa1JpTTdUZzRFQzRlbkIxbmlKQVFib3VkRUJHUkhWeUlJUkxlY0Q1OElYNzg0UHo1UXdJRTJFbE9UcVFSWEhBUTE2VTRoQzdnZ0NFQWcwWUFCd29LRHJ1RWw2K0dxYkZOUExXR0F4REEyKzJtVVNOT2lCZzd0MFNrUzMxb3hlTWtqckZuMklJakp6ak1TVWhPdWtrb0VKU2lqeUdneDJJYS85WmMwM2IrbjgrZ3FrZ1MyOHM3NTZjalVwM3p3VHIrUlBlNlNlcmxVZFQ1YWV1Z2UvQUhnQno5RjRpbndFOHErSDRPdklXMzlGYmVXcnkvQnFNdnYvS1N1cGk5SGtyVmVmRzVaNElhdmZqeVd5K3A0c1ZYeWhlVlQ1bnhJcS96YnZiam9xWFgxWmUwaGowQVlGTVFaczJCa0FnRklHRnd4SFlOQjlYZGFtd3IzczcvQ0lmZ1laaWZoVDlnYTEweXd0emRaWS9oY25lVFlhL2tpejhLQ0JvcmhGWjRnMWxYQkdHV0tBNzUyRWxJZDlhTEs0U0ZOZFYzMjliRzdSSUlLVTRHRXZoanI4TFUxd2pBMjNzOUJtZ2JHalE5N29VS3dxaU92eVBaRVJJQ0tJekE2V1RwV1F3VjZvSmxlM1ZUbGo1VHlQS09qbTROYnZPZy9UOUdWZnhOQTloRmhRRFN3L2ZSanBDRjJXOE9BNjhpQ3lUK2YySC9ERzhDNmUrbTF4L0lJODc5TkEzNXJ3QUE2OFFXQVlnbFRUQXNZQUNFcWVOKzZteTN3WW9BNEYrak5vV2NOUzhPaWFqUVFQN3lNRmF3SWpRUmdTVU1MSTBRN24xUkFYNlJGOFlLSUlKVW9aM3lnQytRMlFvc0NrdE81bHVNSEdVYUUzZUxlOFZqMGhxcFdBcElFYWxPYXBHNnJkVys3cVJBRmNDZVlpa0E0QlBUc0xoL3dVV2ZPYng5UjZVOHFmQTRTS241ZzdZQ1hBU1FDUUJZTjNrQS8vMU4xZi9rNlMvMFkvMW9Ccjc0R1h4eCsyTmYwdSsvN2d2cUMvTHp6MEVmOU9SQnFqbjFQZ0xvWlE4YisxWjBjOGdOL2wvMkRXZk5tZktwWDEwMzd6Mkx4bjNsdEJYVGJFNVo4SVB2ZkcvR0pvU0R5NDZBTXhZMkRnRWhFVEVKR1NVTVRvV2dwa2N4TURKNzI0UjMvZUgxOFNDQ1M0SWt5WFF5Wk1xU3IwQ2hJc1VNYXRTcDE2QkpNeU1UTTR0T2Ivbk5XMzd5dnYvNTJPYys4WVhmL1RzdTNMTE1lVDliZFh0MmNOZXZYdkx5YVBqRkRVK05nUmNOdU9CMXIzbkRMQklHUnlOUUdEeE95am1vVklPTGg2K1VHQXdBa29QOHdKT09oaGJKQk5VdmhwVU5MWnFEVTZKMEtWS2x5Yk9iWGc2dEVoVktsYWxTN2x1VjJyVm8xY2FxVmdkdm5hTVFDY3VXWEhIVjVjaTRXVVFtVW1VME1NQW10Z1FzQlN6dEYzUmJCQmV3RklBdzVsNDFpamNiQm1RcDZ5M0FFTnQ4MmRBa3dqeG56N1A3OFZVVURCL1ZtdUFkK3g1NmNQKyt2WHZHUmtlR2gxWXNYN1oweWVqSThPS2JGeTFjTURRNE1IL2UzRG16Ky90NmU3cTdPanZhMjNLdExkbE1PcFZzYm1yY2dXQTA3UGNlZmVUaGg3cWRkcXZadVArdWRHMjFsc1RBUCtmejZkcjFtb3ArMExKMVRFZ2dTNkN1dkM1b3lBaXViMDEzWVBNTGJZelRiT0RBVFg1WUVpWXljcFU1SVZjUGZKRGxKK29PdWRzdkxPVXlDSEEwZXBTaFJkNGR1SDRLZ0VwTUVPV1pHYjVFRmNNalZKa0JVQlVCUlprQTJaS05Sc0FOMSsxMHhLOHRpNUx2dTlDUU9jWnd4b2J0VkpZU05ZU0ZJMy9lendpTEpkUUVsVkFWcWJGZlZqN0dGWUtVd2lMMk05Y1NkZ05tOExIY3NBSWx2M3QrcFR6aWtnalM4TGhucFJBNHlEcGJPN0JjZWtoTElSdHlyc28zaE9GYmlVMjlGZ21LWTVKODJ4UmQ4cXlsc0ZXa0VIL2JhbjhsbkR2M1p5NWU0RFZHaVozT1FSREJENDY0WG5XVG1vRkRSNTJ1WEpremxmeUNSTjBqRlVMZXFaVkxOUUVYbVZFbERvdFpOT2ZpelE0UkxiaTBLM1ZmUWl1T0tPRVNNRlR2MTNUdmk2Q1Z5VTdXeE1tS1czVWJ0RG1uSTE3eVgzSGNud2pnb2ZvVTRtYVNVbExuSVBvZDB3OHl2NjZvV0lNZFNpR1BVdjJ0Z21BNEVkYTEwRnJudFFtL2VsdGhmd3VoQUhXS3MrSnMvM3pxdFR4U2ZjWmRXdk1Ca0VrbzJPV2Q1aDhWeGtsMXdRMHRXcWZYeGpuYlhUd0R3NW9tV1o1cWR2SElEYktZeHlnOTcwcEp2ekF6OG4zNU9MUmtmU2JkRFRwWmdOTTlsUUptMmlVMy9IMG5neHZIMjlkQWVZMlFEUXZ4WjR6U2hwUWJoQWpCbXdWYkk3RjdJdko3a2lOMUZKR1dOdUFuMHpNRXlSbDBoMk4xN0pDS2lnQ1BLZnk5bkhOT3R6d25JendtZ3V2WlovVE1CY1FsSEFmdzVFeEhEc1hHdUZ1U2VvM3lDSm5aUmIzVzdVZjNhTlo3M0VZSzdrT1NsVkpzd1lZeUpDdGNHTTFHcmo5OGNuSGhrRm11N1BkT3duMVd6UjBoeFRuUlU4YUJKbXhxSDl3UUlJYy9mVVdCSGo4cXJJU2piTzJoUFc3bFJJYW9ESnBLcDZXclZIYjBvbDVMbktMeUZqMlRIZ215OTZBcFo2L2xxMWlOUFk4dndES3o1Z3MrRS9DWklDUHdjYWNxY25SaXIxUnpQc25DZ1FWYWc1VU1yS0dKNnk0K3lQWVpJN3lqS1RKS1NVTjRvVVQ3R1RkaXhPMERrZmNUVWRta2FCenFQYmk1U2lLZkphSkRES1kxWmwxMnUxUkFPa3dTcDd6SG42UWthaXBOTHI2RTBwSGdtSVEwTzN4Qm5XU3lZMjBjdUgyeldZeE5RM3cybUZ3UDh4azVjS2VEc2RVYWtLbExITkpHOHM1eHp5aE50dEVCaVJETlFzY0NsMnYyWkFuMUNpdHhNRWpMTXdHOXAxZER0ZHFpd0pUTkNmTFNxUlMwQXRWdXFRUElzUUNSWkltOHg2NklOd3BUQ01KQzJ2WUhyTk1XTXc1VHhKNFZpNEhnUlJva2lnRktQVHBuNDVKWWd4cWgwYm9xZ3VIUDZJZ2tRVEtWUHA5Qm1DdHlTT0pkNmJ5RTBsUTFkbmt0bGNpR1VtcFFPOXRCbjZBQlJCdlliaC9vWGFwbkNDNzVHR0l4bDhXK1paT2pvSFVodTdOQzI1VUpvTGRvdkMxVm9BaTJGQVhwK000TjFEeUF6VVVqZVN2NXdHN1piZjlFY1Q2ak1ic0oxQnBZL0p0b2w3TjBqcFFoZ0xoY1lmWWVVWjJCWHFHVUg4NVE4UlJ0ejJmUWRuem5sbEIxOGRDRE0zQk0wUlZtTFhHUEZWUmpFZFFoTFA5RGlKdnBOem9VQXZlZzlaQUxmSWpUVmI0ZXQ1dlBNOUFVVkMxMUpZQk15RXBKb0xhd0hWczNBMENORDBjZzIveG5YSk4rSUpXNEFLZjFHU1VhM1ZCY3VNclhsVVlUdWdab096UGZXS1J1YzhxWU1tbE9NS3dsN3gwa0t0c3dsZjJaUnNyajFoZzJ5enFCYVBsQWFNbGtSQzd6RzRXYUhjOEFCcmx5MG1EVmdQaEtnNjBLSUdzbG4xRkZRR29CSFkxVEd2OUtnSnAzVm9vM09CSXVBNDg1b3JoMGMwTkcyTFg2eVNBOXNHY0JhbjJRaG9iZ25pSjZGZXR1S1NIWExwNWVjTjFGaTFvM01nTW1LZHcwSXJGaGo4MUtpVUxEdlJKREk1S1NVbEtBRklLeFZ6Q3VnVXhYcEdnWmZBZ1BFRTkwTmV6S3pweHZIYlBUVnEyZE9hcTg0MkVOOXV5VHpLMkZZdCtXZFFaRGU0VWJlQjE4c3d2bFFVQ2lGcmJMK3lDN1dxbHpaT1ViMlZwWVFadTFtUFVrVDJYeTcyNk5qMGdwVW1vRVdJZXIvRkprZ2tnYkFBTDREaC8wbG81SkRCTUM3a2cwRHR6UG9nRjBLN0xXTFhSMDZQRU4wb29ISDFsdWVKa1FEUElXVTZNWk82TGEyc2d1bkY1MDhDMmxZR1pQbGN4MlhKMXR1WEZicmU1MUNJVVdTaGI0Zm9qNkxnR2NtbGcrVUNpU2l4Y0g5cko2VFRKZEFDMjRBcEdic2E1aGEvTklyK2g5SWVhWElDaVp1OEM0Skx6V1Q3Z0tZVDc2MzkrQUFqTGxwcGRYQUxibXQvemNkWjhuZkkvc3dYTmJaZHc5bVIxU083SWZnWktDLzRNQ3dwQ3c1c0QxajQwd0l1YmR0cEJOY3NWSG11VVB2aGFrc3hNOUY4Qkxrc1EzNk0vQk9KQVF0OFRCQlNVYlNvandLMzJFWWJlUXJ6dVlHYTluV0ZoT0tUbFFCdzlDRmo5alRHNEozTmdEdmV1QWcxVU9oYjRLQXA5cEhnYU1KS2IwU2xvTDdEb2RIc0xqcHRYaGt2T2Fhb2UwQ0hqRFU2dGtLQ0I0MmdaSnpSRGNQbzJ4TmVKclpEeGNYZVYzVjI4SndrMEhKaFUwOEx0R0RRTXFLT1AzVEdvQUk2WW5iRWtSd0RSazNPNGtpNjFJbnFUODEyeEtiaWlvQk1HRTVETHBNS3JpT3BvdkZMdGJJZTl4cU1xL1NUWXN5MFpRRjV5YVphdnAvYStIN3ViRG5wU3NpQndKRmFnQk1pN3dWV2M3VUhxbG13M2ZjTHZ2bW5WUlNGWVJRRW5neG5IdnV4OFExQ1Y3QUlBdUFJRGRBSDFBK0x3ZytnSGdQNEM5UUxnQkFOYWV2T1R3b3FNSFVvTmdtVm1FeURJN0xyeExIRFhYRWs3WkFNSTl6T2JHeUNHRGJrNkc1VWduVHBQYzMralpRTWpZR1V5dU5YZytNL1RpYkkyY0J4Z0p3a2IwYmdpNGZaZjVBQkNXVDdCRFNNOFllUy9KOG5vNElzeFFZazUxd1pLbTQ0Q2p3NnBUZlFqWGpVTHY5ZWpQT1ZLSjNQaFMyaUlmdWxBSzZzTUx1elk1T24vYkh6aFpETjJHYVBoNDY2WkxVVVpFbVdKM1hSRys4QSt2NVlPT2xGSU1SRkI0K0xqV3l1U3VTT2VwM3FyUFdyTkJvUnZHRFdiZ3FjdTk3MTVrWHoyQkVNRlVaWGZodkw5VUQvT3VtNjR3ejgxSWtzU1h2WnVJT3FjWVJDcHQrRFVpZ3N1RTNRN2J2Zzh6OXFFemY4bWZlSEZuNTVzSlJVdUxZeFEzZk1IWnVPN3ZoazhNMDkxUXhMQloxU2UyaVFOVjBkakV1Q0ZUYm55amVhcU5XdERVT2JxSmVKc0J1bklRN1BLV3F2SFBQRnhFWFRNS1JqZkFEYytNOWI3NVdpdEtlTjJUVHdQTWIwUEE5cTJGVVVHU2FMaHNsakRBVUFNTUxkS1lRSFZqY3dwZ1lLb3dhVVFDMTZycmh4QkRSVS9hWmdiRW9VcytBMTBUeGtzbmtTTGpaYXl5UmErUGhLS05qQlQ4TG9TcXJxQkdpcUdTUmlGNVRCQzdoNTNDaW9lRjRXRk1WMXpLNWpEUG9iakhnUDVhOXNCREQxaU84NFdjTDk0Q281RWRjSWtIbE5mSnRmbW1BRXQrQXAxSmF0dzd2NUx4YlNVM21lS0NXczEzY29kUVVZbEpWdis4dG11ckFHb0UxbnBNaFpleFRMb1BMMGtnN1VleTJNTEV1dk0weTQ1S2x3R2xXeEFobkhmTmpaYVdOY002ckpiTWltaTArc3p2OUJCcU91dGZQVkVqSGpJYk5kNXBhYU5tYkgzRkxKdmkxdGxPeE5zb3RkaU93VDluZVBPNytlU0dGRlR6MFRhZDlZZG1BL3BKOHFGYTVnc2Zhb2lzdzYxQW50OE92aisyNDJXSzNSVnIrY3lPQ0dUWFRaN1pxM3lISlFMUitxZnVTYmdQbDRVb1VubkZNcWx1SDlBUDhSaU8xa2Fsc3hlZUhYbmt1TkllOSs2MDZ6aWgxczhPSzg2ZWtNcjZxc0JzOHJ1VXE2eEZIMGdVZlZzT1lhbjNXU3RBUmY3RjUwdjZ3ZHVLYjBZdjJic3AydkN3U3FGYU1BcnJJTHZZVjBxeC9UczZjRDkvUjB2bWI3cStVajRRSkRIZkx3cWExTDJZU2FLZTZvY1dYVDZFaCtWd3VhUnlIc3BMdGlVTWVmcEpSVVlJdmRPcDVZRisvTWhnQkIycGZ3R2prS2NjZit3U0krQlZ6T1hMR2cxY3hXNERWZjlIT2FhSGlTczAvUjNkZlNpOGhkRnhZaDdNd2xGL2p5aHdEYWdGL0NlMnowaHd3RjRYNUpiRHNGSnVBd00wTnF0anNHTURDVjZHSzE5aGpVQURiUk43eUdkaE9oOHV3SEwzMEd6cXlsbWN2N2FJZzdRb2x6UG5Md3JiamNOdjM2WEthRlp6NGk4UFZIaGVRM29RcGFxTEpESTNTRGtFWExITUNKVFphUEt5ZlFUVVdyODZxSGNXNlpUZTVvTTd2YXRORFhrRmxja1VQNkdTVVFoVldpdEYyVzcxOWZQT1pIZTdnOFdyN0ZtMjR5OGhIa1RtUmdWN3ZqUFJYUHE0ZEQ4MGEwYVpnNDNmQlY1dFd2dkk2QUJZT2dmR3V0aThpL2txeFF1TEVHb0cxbzVmVG1tNm5zV1pyZGx1RTJicjBMZ2tkU2g3RjFNUzVwRDBEWkR3OFVpdFdLRm11c3gySDIxeEQvYm03eHhzOE9IMWxpWUpTVnc0WXVqd2h4UzMwQncyNUI3YUNiR3RnSFpVTEltNnVlYXR4ZXlwclZrcStsRm5CbVJWQWQyb1VUNUNWNlBMa1hYNGthS2JkZ1RtRmhqZXNvL0tqQzhJbWxnYkx5ckdLMzhTN0pqcXQxRTVhQ01pWG93YStVUGd5M2JKNTZkb0hJZ3hQUGdid0pyZFd0bE9HSjdNQ04rMDVpNlY3VW1qaWpoU21JL2VvZFhqSTJXeFFIamFtZlZPU1B5bldEdDU4Ym95OHl2TE40cTkzSmhwTDVwV0JuUkc2bGFhMXBFVjVtL3VJQXBSTjdSWG5UaklybW5BMnNIa1pwR2NHNnlzNlplV1h6NmQ4blRUZnRaaFFPYmFCWG1MVk1WcVprZ05ERmdEaTZYbFRZbTljVTJXWWpwelNTRkFTQnRxcXNTb2xpVVBLVWZiQUQxK3BpYldaNXlhWXppL2ZtV3NIUlhpY2ovOU5wMFp6ZmladEozMTExZWRnZkF0WDhXK21tdjI1MWRmRXdGQXRxRzh0ejJ5RHpMaUR0dmFiZXJXK0pxTmJoQ3h0U2dyTTZxNHNsVEpTNDF4YUNwQkdocHBEcnJpUVFXVjdOZ2RqNEY2aFNVam1vTFNCc3RaVGR2ZGZoQVluckJqVWl6bStnd1Z1OHpxaHNXYjN4L0YrNVhFVURVVFFYUUN4d2RIeHk1dmk2WUhuczI4VWlKaDBuN3hJV0MzNWwyc0dWUXFTTEhmMUNON2dDUUtrZUdnUjhhVFdxVy9CbGY1S0NBUWdUbXVMQ3hNelJqakxJc1I0UWczVmpvNithdlh0bXNDSm9aTU9rY2J6RjFLT0hHRDdaR3lrbGNXTXhzZWlEc1NtVXdDU1JieE0rT01WWWd4S2d3dlI1Wk5NQ1I0MU9RdUhzenVRMSthNyt1ZjNnTWVQM0dSR1hITTBHT2RiR2hmZjd6SWFSRUIrT3h2VGgwOThCczNmL0RBWTNwb0R5clFVdTZURUh5VWg1ZHRjaWMrT0NoUUZqZUYrUkR6NHR2cWREOUZ0T0NpQTJrZklIdmVrMlBMUmZ0QU84ZHhZdTRlMExpejdXQnl5K3dEeFg2Wkd1clphYnJ1ekd6V29PK21DK1pGa25Hc0tUdUx6TkhDSkM1SDhnVXpGczUzV3JCVk1nSzNJbE9CRkwvQkVRV205alRtY1I4VUVrMExKL1FFTURmZ1BIVFpDcXFXRi9vS2VldjRVUjRxR1ZVUzV6eEIwTmZ5clFkblQ4d2ZkRWFMdHBjajNKaDRGYS9HVDZZYzVadUFpMkRqdXdjK0liK25PSTd3Nk1hcU8rQ3ZLYTBqemFlZjREcVFvZVVJQWtka201dTVuUE83Wm13VHpBQTVWVWZ4b3VTMkdGQUlNQWhBMVMrZllZVklwUGNYaUZMRkNqbWdlT0V3QVVkRElIdzYwUGdwSk5EMk9GUkZid0lNRWF4aHBLV1c3Mlg3bG13OE9ZV09GdzJkWnNuMmROdjhKcCtmRkk0WmhtVDl3WmNaYTlnU3VBQlRydThodzVrMG1lQ2o3U3NlOWRLZ2dKUFJSZ1VzZVVWSGFrK3h4OE1RMUZHRGhNcWF1bG1uUExuQXREWUFDUzlPVzZKZXhlMUYrNHc5dkprejVVeCtxZ1c4NWpreHd6dzV3V0FXNW1IWnlmek9SYk5NekNPYzVqZFZwaFpzVXBzZStwR2dScHhtWjQrWjg5aTlwTzN4eGhnNVJoKy80YlVDakVwaDYwT1AxL0dXWnJXb3JpN2FaV3VRaStMWkp3WXAwYk5NZWZaaHd4NDk5aW42RkpjQUs0RG1BR1RJaUZXSnhEVHp3bEhmemZ6YXZRWWQ0eVlNeURTWVBDTE5tSkN6dUZGYnBvNUV1aWlRWkptUWxySXprRXhCR21LcDJMVGppa2lQc0tmUHZGMkpkRDR2MUUvczJlMjZzeGdDcnVDQjZNeVpMYnNJUDJUZDl1bk03cnNzdFAySDZGQmdVbE9CNjBDL3pZNHEzUXkwcHJuY0FTN0paTTgxMnlZZEpaTDQ0Z0lETnU0NjJZUmFUenk1SEtxN0xqeGpGT2NieGFYWnBCMHJiWmJVUFRPYi83cXhrZlRQT2daL2RLS1JnR3o3YmZJc29RMER4djN6OTgzTE40WW92b2FibU5aMm5qT0tIblo5c1JkVEdqSnF4SU9ZTWlkbkp3UlpEcGtUMjJwcGtkSVVOWEZTQmhYS0hHdUJoK2hsMytqNWJTcjJYTU83U0IzVkthWDJCanJPTW0xNHErUnNPR0JIc3dZRk5yK2tZTHpxQU0wM25qQjk5R2pxamthRHhNZk9hTnJXNkU5Vk1sQmlsVFZ4Y1dSaUFKZXYvUCtUNGE0TmJZcUVza2RzUzRhNHJWS0xLUUpOQkpRRmJTcmZqdEJtTW9FVUtTdmpmQWxBbFlUalMwUmgxTkhVdE1XSFc0Rm4zMFlVMEk0STlBUFU5cnd0dU4rYmVubFNjdGlFVFJZbTRnNGo3dDRBSkpHb2Nlb2tPUmdRTTh6MGZIOU5MTGFTUVJFOFdjQzRGZmthc0NiWmhYNms0c1NiR1hOTkxkSXZtUUhPQkdvR1Y0dGdOSzBzOTN4ZkF2cmk3ZW1NQWhhVWdjR0l5eWZmZVhTcGJIZzkvZDhtOTV1OC90K1R1Ny90KzdhNFR4L3NvL2U1TlB3enNwdktSck5UajF6cC9rL2Ivelgyb0UvLy8yU1dlK05xdmdtUmRVMGFLandSSXYxNnBFNUZVZW56YjNvNzVBamdIRU9rSUY5K0dYSTlmRU5ZS0g5Y1JrUHlxUTFHaFBYUytMTEdubVgyZUc1OWs1VFp1eXJGWE05RG1UN0tsNExtbVJ6WVlMaTVSMmZEa3NLSWJmQzVya3hnQURiNlIydVRmZW8xL0phSlA0WjJ0UWJ2NzVpYnVHOXZRYStvTStYYXVpS2FIWnM5MXJJeVFXK3JCbUlvZ3Y0WUV6aDMxOWZkdDZlZ3I4NjVkV1Y1NjRySitKU0srRzdpVStJZWJqL2VMeGZJOWhGWE92RXhjVmROQzk1U3h4MHA5SS9hVXoyYVZZeFh2YXE1YTlqaW03Mm1TY2JzQXoyTGEwT09icjB2Q1E5WUhkaEFwTGxYYS9XTXVvdytjLytxVnYwRHlxTXBYTEptZkVMWDhFYURidTF4ditFV3RKQnZvb1QwYStrVzJPbG00MlkzQWtSbURRWVg2UHJqWld2OTJwSmtVQk5pWDZnbzJkTGhlOFlqRVFPMXd5cWN2L1AyajJ1aTVIMlB5eXRPZDNKT0FNN3UxRTIyL0ZxbmZVUnJkdmIwNGk3b1g0TkRyeWZKTFJvdURJN2FtcnZWcTl3KzdhcDAxNGpGRnhxeE4vZXFWN3I4MmFtYWM3MTI1VUN3dVVkWDYraWxBaWxrdnNXdUdBaFZxbzJPK1ZPSytkV0NmUWNaN1NxQytPcTkvcnJNUElNenVNU2E3S0cyRmpOZ2lMY2szLytvNVZ0RE4xRnhEalJwc2l4TTNqWnd5d1NrQ3NJcnhCR2xtZXhLT3V5WFNxd1gxSXdXaktuVWFOU3J4djdtenFOdVRsVVVWWnEwM2NsYSt3L0xkQk82Vzg1c1VidElLSVlWS0w2SDdIaFdVck9yNENGcVpQRHhtKy9XaDVSUEhxWDRMUk55SWdqUEYwZVVsRElUdEhPZXFyYnVuL1ZUaWZVS3dXaWhtSXBBbzE0Ti9wL2dTcXpnN2x1ajByN1dLS042T0NQeGw0WExCMUJid0tFR3ZZd3F5elViTzduTnF2ckhtN3RvZnFCTTBkTG5kcXV2ZEVMQjhtQjVuMXpQV09qYTVKQXFTRVFyWGRDSDNQRGV3bjJoK3dvSmEvV1N3c1loSzlNaldzbDA2N290M0FGRHNsWG44N2RTaGlSbnZ2bWE2Qk92OG5RT21IVVFUUnd2WFc5L0Q2clFjUzAyWGozM0RiSS92eitmWElidVNwVnZWcXZIMVhmTnZYdXVtaGczVm15K3JRaHlqVjl5WG5SYTJiMmxMZGEvakg4YmJhVXQ3TjZhNFBpbFRaYzNtYmxqSmJveXpvdmNvdTh1ei91UElORHo4ODRST2o2d1cyMTB0eU8wb3JGVW9QWFhOUWJrOVpKWEdWa3JvRzZaTXk5WFVQTGEwejZyU2dxbGdYS2xiVkJicTQwcWNYOTMvdDBQY1p2c2tWSmx0TTFPeWJodktreXRLT1lNL3VWMHNWZ1RVZUlCRldGZzJ1VU8wRGZ6RjliV0JYdGpEanZTSUhsVjI4MmtuQmxML2IvOU5qcTR3TStNQmd0bkVSZUQ1bHpXWURTMkdxMHYvMENibTZSYTEzd0g1QS9ya3R5ZkxlM1kyczhxOXJ4Yi9LdXJHSWptSEhwUS9zYTlGKzNHMWpSbE5tWW9RdzVYMDhYMmZ2clRQbUtTWkR4ZGpNdlVwTEpIcERrZEJiY3h3UlQ2QnhHQ0JzUXgxS3J0U1Rtc2VBQ1pCeDJ3a1YzamZMVFkwSUo2Z2tpN0tlUWNYdWdMK3ViUWo1WFBidERvekJtem9jdFJhK3pOMmt5UXV3WWJLWDNuY29PMFdsa1FzSS9PQ1hyY2ZiN1BHSEpmeWY0VFB2OE9WaTJ0c0p5Yll6Y2JNcmdyQk9YR0pQdS9PaG1CRUpVZmpnbmlHQzZKN3dnQ3VHQzh4eVZSRk5rVW5kNUFWcUgzTEhBeTgxd2swdVJ5SldHZGI4ajcySUMwbGM3TmIyc2dmTTI2ZVVPMllmYncrMW1LU21YMEpsUFdaR3cxVVliNkRHa3laU2xEZXNOdDFiVVhsMFo1bzZFZmU1MEFXbXhzUWQxQnBNTVlkQTR2OVB1RFF3SFhpSDk2Q2I1c01lZlNCb01oWjhTYU0vcS85QzZiTEM1TkdZMHBLZ2haTy8zMnFUMFZVQVlxSFdER3FWYUpoOFRWSDk3TjBSbmlrYXBkeWwybkJKSVpWQnFqdzFDcmpnTGE2V0F6Wm5CM2VZRWhvc3JMNUFZSVoyYTJjeHJuYkwvV1JpVVJmZGkwNE14czI2VHNHMU9sWXYvUEg0Y0FoVG9nSittYXVFSWxpZTBJQXJKTEpORG1iSE1vRTBxci82aUxuQ1NqMTRkOE5INXFhVlc5UVJBdElvdTB5N05rdHV4RVhPTFVHYzZrMjJEOS9UYzJzL2pmblJBaEpJU2hqQXUrNlcyMTREMVFNZkVCZThuZ0krUWtlY09tTkgvNytTbWRNUEdkYmlFMHlhdGd2N052R3I4S0JiQ3lJQWwwMmxvY2RFZTYydXZjYTd1czJkY3V5Zks1eUNMMXN2SmVkNjJ6THJ3UzhuUjduZGloMlJXTkJ2aFN0N29wVzRzM0tHdjlKNEk0bjhmU0tDUHVYcU5BZWFOUlVDUXZObWFWVEJCdU54amhObmN3aXhvTUdkUnpybTh6R3VEMnpTbnpaMFlidWpKV2t5bHJNL1RZZDlZZEVveW1qTjNZYmIzclZyYndYQnpwb1BXSnZCM1VlYzg3MTUrNXNiWENLWk5wa0NLNDJEZmtjNDJFd3E3UlJYNmZQbzI1b3VmNWlkR1dldDg4cDJ0a1dxS3doRmdKV0hNdFJyTTVaNXkxLzY3VDNDUlI2MXN4WDR6VXU2TXBGRGRucklidVdnZlZ6YW5mMkZ0Sktjc24vNnJNclNuS2FFemEwK2MrSENwbStyei9lY2dUUk4rLy9iVldZd3AzaGFHYzNtOWRNanRRaHhOKzJDR0lvU3BKZkhzUXdnWGp2YVJsUDN0SENBSzArZE84MnBoUUdqZVljOVo5dU80dW5hdzBVK3V3cE5TT3FMUk5iZFgwTkR1c21BOE9WVDBua0RWOUpWQUY0QUZSbk04dE5qVGh0U0ZaVG05QTJsMkJOS2EzNXFuMkV5ZElUMkowTG83N29UblFremFkLzJzeEVVU0sveHBBcmJydWxCMWdKajM1ZlZHVzIwTVdhVlk5V3VSbTNWSXhyZWJmNHRwKzVaS094NXNoUFZObkpJRXVQOGNXOFlzY1NoM3BhcEpTOXJSODhQRE9MTEVHT2pjWEViKzVhLytsWnNsL2hHOU9ndnVidkNkL2NYMmRUaFZLS0EyVjZncjVKeHdJOFp4QUNGb3A5V3V1YXZOdDJsUXphYUxxRkdxdkdoVFNna3VSOG9iK3NCWU9lL1Zkb3U5RkZNOTU2cmhROE1PWWVGTkFHWGlHZkdaVU9icE1tT1ZMdmlUNS9tTTRDYmZUclM0OGp0aTlmL25KQ2RjeDZTMnpOUG5KL0x4SHROanJxYXRmS0RLUzVNMXZaMUN2ZmY3NjUyU0lWcCtlUWJvQXZxQU1HVjZQcjUzNGRQYU5wczlVM2ljOVR4S1Z0bis4U0FNekh0bFl2dnpocnkzdkY3NVhZSG5vcTJYTEh2N0svRzdCZTRVMWc0Zi9XVlcvUmlIeEM3MC96NkNPZnY3YTV6cmgvcHovSkwxSzh3YXJhT2J0MWxmNjVBOUNjMStaSTMrVTd3R21WWVRKb2g2U2tqMWcxNWNjMlM1NWQ4L0x3dUxZUE9BZUVJQUlCTTRnTDdvV3EyTC95VGNPclBMZTVZTFU4TTdPN3RzK2ZCc21Wdko5Y05WVUVYbnE2Q25TZ0RzckVQV1JSc0RaTUpzbisrYUZXNktZaHJHVTUyb1M1UmdhNXZtVkZRdVZDOHNoZVlWWkZqQVoxRnZqOVFuSEg5TFhlS3krOWljVEV5eTZpNVd6ZWh1aCsrcTcxeHg3RmxIdFhNU0VKNlpoaGVTUTVENXovVVVWaTVTTFhJbGR1T3kreEVmTUM1RDBzUXpwcmlYVTlSYW4vVE9KcWtFdFdIZTJ6S055ZWlKKzVvN2kwVlZZMjZ6cFh3Q2x4Y2ZTWkQ5Qzc1MS9wY3lZTXZDMTR6TEpWZXhVUmgvWDRuVnFVcFVJWExkcnNBdXBWdFZ0ZnV3WnI5Z0xNUElpUk1zVmpxOWdhSnpHclZKQ1NjZW13WWpmUHhBQm5sVHFRRlFkakk1SE5vZTFDNU8wMVpLaWdZV0JMWUJkTE5Zay9aZGV4Um9WNFNCMmZMdzFjMFhDSXZtenEwcXJ5RktCU2ppVGtmb1ladlRvN3dzckFNSFpmelJBNTlZakJaVzZQMTArdnNwZWorRWVCWnJaOHVlZDA4NTZ5c0M1QkRmdysxY3VFb3BvcmFaVWw5WVZHbkxzalJCWkV4UE5KZ0tCMXNabUhsNlRhQXpZOEcxZUdXRk5HNktDYytQMUlvMHRxOUxIS1lYVWZady9mOFdSTk43M0JmaDVra2dlcWY4WldTMll2a3MzRWo3cGZxaTcxbTVvSk1nR0k2Vk4xT0Y2TW8yL3I0bHVibEFUUnQ2cEJrQk45NW50WFl6SDJUL1B6TVYrWWVpNTg1eHVUVDFZUy84MlY3ZW5OVlpyYTNWUzZPR0JnQyt5c0lWK1kzZUtYcjNBRS9BTzBzNzVsOVlZMHBTTEdxbFVCa2lvRFIveFZEcXQ1Ny9BM2FrKzFUZHVMdUc5YVdmU0F4cVhiNDdSbGpXcThZQ2JEQW0zWUJBR082K0hPUXA1bUhNZHBqRVl1MU40RDZOWEJQZ0l0b2xoQStvbWhjbW5SZEJSTndzZ211VW1mKzh5RkkySUVIbFliRzFaTVF6QjBMRGtOd0hrRTdUVzRmenUzQzB4aHpWM2IybDYxWkFuNkJtU0tlRmFLU01JR0tsa2VBOXg2NHE5K1hOZHZuNW9tWTJXcnd6MTlkY3kvdG1NZnc2MDNPS1Vyd2oxenE1VjkzQWs4NnlaUnFQRmxyUlljcUk1cFBHOGp6M1RiRFRWV0MydHYrOHFGcXNJSTdHaFp5cysrVDFMWFRQM3k0L3p5TGNhYlQ3TjdkQUUzZFR0aWJqTW96eWtWb0tlQUdZMnhxRzZzMktJZTdSSmFnM2tUT29NWmNEOGJuVkVKcVlGNFZySGE2TDdpVEpwa2JNWGMwVHFPR3pLblZHYURVMkkxb1dwelV3ZjVBTlZZTStnbXlFMDdnUk1NaDBXSXNaeVVVbWhodW5YV1pNbTVmKy9IYnZzMDhtREtyT3JjYTVhc0c1aURqN2FKYlk0MFhuT3NFWmNVcXdiRHYvbGZyRGJVZFdweVhxSGF0Y3hiWFRUVGdiZUo3OGVYRjVuM3p5TFpQRnZyT0RnbmhPQnAvdkhUYVdMV2hINlRkbjgzZlI3c3RFeS9YNXY3c3JRSzFYWHZGMk5hWVBSTnFScURCaTQwZi9uNnhRbCtMNVE3WVorNDNwa0VOOVR6QUNZbW9HdWNUeFNpT2N0WW9BM0poQlp5S1hWd2p1Y3ZCbzVHSFJxMWNpS09ML3N1Z1Q0Q0dobStndzdLOEVLeHp2U3ZQNHhCOVlKbVdVN0p5OCtJcFU2REVBMS82NFJQYzBJTlQ2M1N5TVpHd1B2MzhlUHM2NEM3RmNMYXh1MHFjNnE2dDBRNlZFQ2NFTEpjS1ZjMmd1Q0lJMnFsWjkrdS9uWjF3Y2xHQ05va3dESHhyNGVScVNIdlh6dTFPeWZwSC8vejc5aEJzeXpUMjk5YlZVNGRobDFpWWNSNUVtdkJOTkVsTkkxQWxvcTF6RVVKbEY2Uk5MTjB3RDg4TGZ2N3AwK0NiNE9iSmVxMlhOV3cxdTlvQW9OSXAvbUpYd3BLL3ptaDkzNVBnUVBaUmFOUk5KTlBwVWZ2T2ZlT05sZGhGQW8yZ3FBVzhWQ1FkbFdGMjczRFpENmFaTnlWbTZPN0ZsZkRhcnlpcnZFOG1mUTN5NUxwSGZSSEFDNGVKZEU4dXZNclRYYUdxWkRKT3JVODJzYUZ3akVYZkRwanpnbFU0Zy9kUU00SjZhMDRqei8xVUxjaitUZi9ORlRpTldYeXV2OUhVQXczQXZlQlNNSC9DRHV5elNIUjlNTGZRK0JXOHNFUXRFMkVGZ21GQXFKcGRYZmgvU3k4M1dPZXllNUxGaUhnS0VwSjNobC83V0JiNEYxcmw1T1d3WElQaktaQngxeG9YQzE4OXdkdngvaXp1RmRYanFDUEkxUFZGOENPSzk2ajRkTWRqa0JkS3JpdFNIVTduZ0ozZC8zZjd6L0oxazhFelQzenhTTkJhcGgrYjZ5MVRXMHJGcU1Lb2RjKzFTMUZIMHlMcURDQXZEcHZMZy9iVUVxdGZGZnA2cHhwdGxMK0tDRFRzQjExeDJKbDRvNEwxeXZLY205VXVNVllNY3Y2WlFja3U5V091dU9za3VyYis0Y1BwVlBudC8xNFpzYlNDZE9CZVVZNWdPM0FVZTYwU0x2dytCU3NhcGF5cmVFSjBwc1pmLzNXaE9mRkh6bzdvTit6enp2LzNsOGpNVnByc3k4d0VsV1pTcU82SVJNZHVYa1Q0OUlwV29LcUM2K3EwR3ZjUWsxSHNhbGtUd3hkc043NnZoSHJJdkFQMllSWFpMaU5MOHJIc1hmTEpsUzNNV3d0ekhjdkRjZzMrZm1ibTlUOXY1YkgzOWMzRGorekxqbDJmRVMxNlZ1dkx1b29KRFgwOFBqOUN6bWNXL3U1ZkI2dTR0Y2h4dXhSdlJ6eXhWdDhiSm9WYk91bVJVdFl4cnh4bkRNdzJFenZOeDM1M1RueU85NmREM3NXLzhsKzV6V2JKM3NLVjM4MlhMeXl3M0tXM1JmNFBvdlBrMjNNcVJjb3Z0eXZYeW41aU5jKzlHbmk4REN5V3NDOWlrakhOVGVTek1mZkZOZjdjd2NDdkVlZk5aTGU4Z2xobUZHNFBpYjRqdE5DUkVLdWJuekpWNDF1bW1ELzhGTVd6K0Z2dEdCZDNDMHB2SmQwNGN6UlRXYSs1aHhFWmRBOHhmRmM1cmpJdXhkQSt4NHo3TGN5OC8yQ0E2cERnR0g4RVBsbnByRHFzT3p2SWNiOFVaRlhxNW1OMXdkNVNMam40K2JQeHN2Y2FxSU5VUlJvL3pXMlRhOXBYamR2OWYzRmt1TldLem96d3FncXJ4U1VYYW1lUWFYcFN5TVlXVzZsN0JZb1pMRm5lSDdyMHdobTZvQ0ttN01pR0ZHYWZINmYyN3NLV2FYcGVVbDNSajFBb1dWTkdPR0Z3eFlkMGxKUUxJbi9ycXh0VE9tU3NKZDNCNTFoQm16cFJvUDJWYklWaFI5bXJSTFY5aFgzTnRvVFRGakVUV25CK25DazdsT1UydnM5U0xYWmVJaWtUcWZhSmFldndKRnhibERxdmQzdnI5RGRXNy8rNkpGQVByL3YwN3IyUTZqUWZUUWU2THpXUFBCamcrdWQvNFFoSHdkTnZVZmRLUHN0bXhadGlxcnk3S3lnYThZeHlzb2JWOUdxdHRqNEN0Z3RiT0d2aXZycU03b002eU9zbHQ1WlpoL2tzcXFod2ZBQnJVOUpFdHIzS2JGZlJGUDRjMlNtNFA1N2ZTdXFXVlI3Ti9YUlM1dWNHbnByeDVUdlFDZS84VW9SZVRxSE1qTEQ4WXIvdWFHNUhzbnV4NlJBWTkyZWJ4UGVMM1R6UktKV2U3M0R2czlIWThDd080T3Izdlk2Mm1ucGVicGJzOGRtczhVc1hFWW5vQ2NjZ1ZFajhQUVY1Q3JCS3JVTElJS2x1NDZlMmNCeUlPVzZ5WmJDclpoL1Q5MVE3NjZRZFRxY0pXYk9pbzZYMEorMUY5ZDNJR29PM1FrQjFVaElyTE50SlQxL2RmLzZ0ZDlQL245MDYrWEZja3BCd1BtT29UTzZIVStYR2NJakh3T3lMUkRIcVduRUMwdyt1ZkoxSktnZ3BFd2NqVVJqdUVhZmRiMHlmOUxJbG9VWE1DRHdMOFZMbkZZQzhUVTdxVlYraXJScnkveFdTK05MZDAxUnlCQ1VUR3Y5MmI1WFYxSlpQNS9OVHZnSFVkMVI3ZkQyNFdmRGlDcE0yM20xM054Sm1LeDl1a3JybGhGN3pDNlpydDgrMXJmdGUyNFZlNGk5SGEwYU5VSit4WExCL1dmWmZFcnlwY3RYN0hpSHo5bDVOTG1CSjdBVEhFOGZ2SXdkanZHZDMrQ1lBamFUa2tsMy96M3dCVmo4dk1tenZEQVZiYXNBZ0tHMU9mQWpJbUoyV0VQWnNGTTJJWmI1TGRzU0wrN0JNejV3cnZONlJxeFNGVEQvK1c3QWlEL1R2T0lXSnI5azh0NTVYaCsxYVgyVTZxbmx4TXpHMmFRY0x2ekdYYWZ0MG9PY0ZXdkVWMlpxUXJCdERVTzRETEt2RDhmSmlVdlArZnRoQWZraWdHUWlsTkFqdEJVWXFYNC82ZUZrcyt1QzBYSHpxZEtXMDd5TmtKVHpudTIrL1JHNkRIZ2VsYWJtM3o5YlVkNVh6cTQydGpaWTlwU1h4a3NkLzdtbHN0bUh2RytPNlhVZTJJQk16bFN6OFZ4VDhVRmtoMmVReUorM3RmL0cySkNsZUhzYnpQOTBCYlJuQ2F1OUFtdWM2WlBHQ1JYcEhQRGxOYzlTbVl6MVBLUW4xeWViaDJodk1wUXRmYkl3cnBxTkxURzFObGwyaHh2c0czcWFWOUxiYXc1K2RiR2F2UXBOMXNIT3l1MndKTGY1VksrVU9ucEhUMm9veHY0cU1vZFZXZ0pIN0JOZ1pIZU92dGZkL3N0S0lOcmNuVlN6TnhDdXBQUWtBUDM0eXNUblFObXQ3VmJaYSszVU5wWWdqNVpIakJza0tLMFFRdHR6eGRYWHB4OGRjT0RydEp2QjNZdFgzOUc2ZjFUWlkvYlZmWkUvb2lKN3NVRExsdDl0L0taRGMxNXIvZGtldU1iNHVDdVY0OVpFUXlrbjJSWU10bTlSUU4vbDNXR0FCWGtGTDZJb0hmOG42ZHZBa2hHTHloN2JlZ3ZoYzRVU0NvSWNQbmVxYWVYWHZnZ3dBZWR3dDJ3STY0NURYbksxMjFIaFlCeWpWSzA2Tks0LzQ4YUx2b1hVeTJ0NFNwZS9rVjJ6L1RZV3FxajNiQTJHakdzN1dqYm83SFlPbXJXb0NVU1BiTjJ1Q1ZSc1crRVNEWHJSdngrY2lTWkd0WDRmYjVSS3FVZDlubnRWQnArOUl4MFluRUpiVVVhS1dWTkhjWFVLOHkxblpSN2lvOURMUHlmUFN5WFRDVngxNzRucWxsNDlva2IzYXdJTEtodVBhTFdQWFhOdXp1OTJ1SEVPYUo0K2VqNXZhK05xRjVEeG1RMEtIdHl4am5qMDZwNUI5YTk0ZjNhcDZvL01WVWF2ZjB6V1BKQTdoSjhLWWVjNWVXVEF2aE02a1ZKOHNVemlJRE12S1hVYjVCK0pKVzV0OUpSbWZRb1RoK3RabjE0b29wMXRMR3RlR1o3VTlPMG1jNWx5ZFdiQXpZWGJkeDJwK3BPL0M4elNRVkdqTy9CM3RsRDdPODgzRmsyTnFWV0hwcHBXcG5FazFuL21wWm9WNmFKZEpIbU83TzlRVkpTdjBodGE3Q1U0SnR5Y2JndC9tbERyZjRVWjhFUGdLVWcvQ2NJL2dHREpmV043RWtlK3dTYjlUdVhOMWttM0NCZUM3STVudDRDb0RBbG1pNFExRE44UVhkdkFWZzQyMDd4OWZmQklyaW8vcnMvSzF4YVY2UnM5eHM3WHprb1NDM2pReW1Cb0FuYzBmTUdwQmhocHJQZXR2eDlycmRYc3ptZTRRS2dzSjhZUHIwYWFidW5xZ0F4TVFUUUR2K05QY3d4ajJPeU02ZHUvM2ZubWovR3YxMWtQUUlCZk5CY0N3S1R3M1VnUzV3RnJBQWRSeFZ3UmdXOHFRSXVoMXRIS2xPa3I5cll5MThmYW93aVcyc2c2N1lHTDFqSlpNSlV3b2NxNFR1VnlCMi83UUtLN1hRYm9QR3dCcUxXUUQ3V1FMN1hRSDZ6WVEwSUkzN282KzJnYUFINzEyM2QzN2MvUERkY0swSUFoL3ViRVhLM0NXd0hwMkV5UE95Ykg5clltZjBCMlBzaEFQTXNTSFptY2V2NEZzZnV4ZjM5eGYyelYvLzdENHNYa2JnWmh0bDhxd1lPcUlFSDFHQ2YrOEVmTDlOcU01K0d6VmYybjIvK01FZTBtVWV0WmNCZS9TSG9ja1ljY0o3NEJyeDZkUmdBb0QwNEIwNzBxY2hvellMa1dvYjY1YTV2OG1lV0ptb21BR3B3bVBJZlFCZ1c1TzhXYWpBSHZvMWR2L3lpNDhiN2Jmd1RQWjNzeEFHdi9hZW9ZUUFndmw5S0V3RHM2UjY0MGZ2MXdiSHhTOUgrVDk4OXJTck5icTNuTkwxZkhsd0ErRVJET0lBZmgxemt3UlZIV2d1UFRtRWZXSy8vM1h0TjcwY2V6cVhiUkgvL3M2RDNiMytRc3p6c2xOSms3N2Q5R3hsc1RDSHB4ekk4dSsvVDc3ODRRdFc4c29IM1ErakpCSENSOGtyNFJ5QStmNnVETXo0TWNqWVA5N1NodjlIQ25wOEtmM2lHVWd2YmcvZER1TkR4U2FJQUtNVC8yMWNaOEtEOERMM3h1VGhGY1cyaTRwOVY3aFhMVzBCVkgxeUhsNHQ3UEwyL2xRdW91emhYNzRyd2h2MGFrYktucDg5N1BOTzdGSHpqb2l1V2xGTmVzK1Avc0JiUC8yS25IZHo4dW12clBaU3hGYkxpd1Z4eURVb3hwUmszbCsvOHpNZVBoNVIxR0FjQTdzclYrNC9wQW1KWDI1VnNpNGd2QXdxeFdEVGFFRkp1eURRMkVjbldYcWxLb3BLcHVhblJBRFRBaFpPMDdYWmJLamtibG5XcDdSM1lhQU5UUGI0cEdUZHp1VU9xZFkxV2llOG1EM2pvY1QwNlV5d1FBVWxBMjBZQm9LSmxYUkFKRE1sTmtNWjd5U290WkVRalFJL0VVY2xXbGRXT1hWUm1DbGVPZ3JZV1ZJMUJMN21iKzcyZTBkTnJzTDBDNGRaczNvRUtoYXh1TnNuQkViRnhNa1NFUisrWmpMWkhZaEpWVjNteG95VlJhVVQwcWpvdnJlZ2NWZFJzWGprbWFGRnRFZUpsamVRRlZRcG1VMDRRY2JDSGpBejFpVUlhd3ZsT1hrTzZMUjZrWGVvbVhNb2paUk5WM2ZxcXgzN0hoN2ZVZWdEVkMxK1pxRXdscTY2M3pjeTkzcTU3NCtxdUFyMHR0QlVxZitKdGpGaXBjMEJhK3lsNWE4Y203WXpOcktOQStJUUZPM3BmMWZyVmJlMURTcGhOV1J0b0hlSk5oZnNYUmVleHF2c0ZxU2ZVNzU2RTFpeXJzbkJaV3hwWWFHWW1JUkt2V1M3ejdPZy83aTRnZG00SkRhUmNtaGpySzFNNk4vUmFjbU9KaEdobDlZMDRIS3hralovY0d2S0NuQXJ0ZHV3SWRLMUlSaWhXdHN2b2I1SFlXVmFoQ0w1N2laWlM5U1VxK0RUSDg5MXVBSWp5bFZlbk5hMXRTaUdiSFNuMnpYbG5wOHVxZDducW1QbW5Dd1hteDIxWDh1UEh4emdmRUl0RXk1OXR0OSt1djdMWGRsUG95NWw2NzFsNE1BSjFvNVdvS0lGMkYrNlhaMVR0NjJMTjVndXhXV1dsRXRNa3hQZmR2TnhGcllnUjEyMVJsMnZhc29EOGVnNjNzRjR0UTdsUWVHeGJQZUxNQ1RpcXIxd0RMK3ZTSmZWMis2TVhmVzljRU1QSzBMLzg3a0VpOFkycmI5VkR0K1A5R3lMdjVjQldKMW91N2NLZEV4V2VyOGpQNHd2RFNzK3o2QnVQYUdLT0wvQ21saVNhNGJ5aUx1ZyttUkJSUmZCQU43R1NaMDJDNFhIOGVwZFdyL0NCOGdiVVpVcGVTczV4TlFESU9ZVkExRW1JZWlLWFdLWlJBMVZHVENUeG9tT29nT2pRRGNmWCt6MXJsT3loblV3dEVQWmlRRFNsU1EwWEhPVjVzaTllNlozcTY5Qm50QzIrNnZQb1B2Qys0KzBWYlR0NC8xLzh3WEl4RzQ2bUU0d24wSGkzL1hBUXBpTGdBRlpnMExqNUtIKzFYQnJIUW5waFRaMHYrM09qSXArNmIwZ3M2dW9TRTdxVndqdTN0ZWg5SjlCT1hjL0N3RHkvL2FVbUZxbEZMTW1INWxVMVI5aFJVdzRTYUkzMHFGSFdBbm1tU2xxbythdHVHNFhzc1MxNXpmMVNzeWw1YlozYjRwRlg4N2F5QWNkbWNaK3pvZWh6em9YRWRhUVNaa29vTHZtVjRMbXp1eDZ2RXdXN1JWQ0V0V3QzZEFVSzNmRmlaMWFkaTZWT1FYY2g2bXpHenoyaHpqZk1LUXFUamlqMnUyYXBqaVRQcmFSR0o3N2FOalRwY2Q2Z1BKQldBUDlYdGFwY1dQOXgrakw4amRQUHphL3dxaU51ZkRBdzYzYlhLa2xybXNBZStRVThKZnlmQTJ2cUYrUlAzWW4xM2VoaDUrdTVIcmJNUklZdzlQTHRvWDh3T1lHMWtYZUM0ZWE5WjAyTTNhTWF1bno5Y255YXZYcjdMRVFQSHErcXBoaUpIeTBKZ0pnQXlzem9tejNUbGxZQkNkYkl2Uk9jVWVMZ05aTHRMT3BGcHJYMDRXS09nVjVBbGl3OWV4MmJNMndmblkrbk52TVYvaXZ1L2hPenhGSFZibEpEV2FOSjZTUmx1Vkc5c1ZxMHhyVkVYVGZVS0J1TXE2Z1BRWGRVczFJeVZ0U3dKV3h2aGQraW5YUTlJQzVLaHhITE10NGZuSm9zdXRZTXRxWEFMQnZuUUZRQm1IT1dkbFZyK0RUUHhsSWdkMkdNcThsaFA0OFJEWE91RVFNWmk4OStZaWNTa3RnSklMbm1MaDRPaDBPMGVNcXpkbzlieW9md21PMzd1aFBySklkY0w3MnNFNXg4enFpb1ZZbWt4VkZGYTUvYmxhbzNBS2doL2tFT0FtUHV4NWJETk9RcTFiSUt3VW1KaGlZSEMzQ2NtWkx2a1dGVmtRNVplam5FOWNCL3NDSWk0bFUwa1k2ZXRSVU5hWHVvUUx5dEowTm95Mm9NQ2dyTGlKQ2RRUjNEQk9mK3l4VUNqdkxmUUZiRWVhL1RsNzJTdU5PdXBsVCtuQnRhV2dybHl6TmNST3hzYlgvVEZkSnkvMmd4UGEzb1UyR3BZYkNoTDJ2NUgyYXlJTldOUUwvem1LellxVUNzclYyYXNyZVhSTDcvY2w0YVQ2N1NNVEF4RWZKTHdoT2hOaFhPSnUvcDB3Ti92Q1ZNcUN6eE9qZk41ZUxSTE9DS0ljK01yMXhlNmZBd2JGc1c0TDRjMjdtK2F0b0FkQVRicGwvTjNSSmdiQjBuZk0yNkxmdUtrUFJzRFNFQTBWTVRqZERYWTdKNGY3OCtZRi9QNCtzaFYraGNsWlRHZnlQVG05MHVWS1BSY0JodXRLNUNLV1llOXBnYThjdUNxUmpoY01vNXhOaDRRY1k2SlIzYWs1WTQxbTVTUkI0V0ZGVXRzaXFBVWpVU01CWjY3UGNNSWRCTWEyaWNGSjdVN2oxV3NmMU9heUdjcXpFekMzaUFXVWE1Q2pXYWMzaXYwN0NTSlJJbUdGUGJpZDNPcjVXQ3dMZjIrNEoyTHNiVTJVRmhWU3dUckZxRHpJYzRDbUJOakpEV2xWYlRhRFFhNG1Za1hwZHNreUozZFRVZVQxeEd0bFRJSnVGTU9HbmhPbEhLa2hORUdoSno5QmwrakFsRE1Db0RRbXFaekJXeVVWU0lQSFZjNjJRRFpnOVBITndGWlRERWtJa2xtZ1FpWUxCUWtENEhZOVZvckt0YUFvU0xLQUZwTmNaVVNobXdJTzJzbFJXVE5qV21WbEI4ZjRSUnZ1RmV4d29xUTFaa0JhdmpodUppM2dvZHlmREpLd0x6QUZEdm9oYVdoRFJpSjkyalRvd245MzZ0dXdUaTNKbFlsTXR3T0N5dDE1dkYxYUJsQW1aQTgyb3RPZElHQ3gwV1FKb094Ni8zWTFuWm9mZm5sRGxvM2IvSDlyMFNJRExtd1lPdUpjOWRhZjJ0V1JLQUxhM0RWOXBCR0x0bWJ2YTNwQzRhSjYwUjZYcWJHYTdSKy9lVC9kNVFxbitvOG9kWTlXQytwdXlWMDFoaUNId2NvMjRVcFZGMUhSMFNtdjE0SWNxVXNOQmpwWXJhWG9wQkY1SmFoNmNxT2svSmFGWG1wOGxrMEphTWdoQ2tGQnZRRFB6ckZwUXVBT0lzYVkydjkyWXdwMTBnTkZFcGNyZGg3dGFlTUxSdFRNa3hHeVV4U1ZWZ0ZTbVhaYU5Qc3hzWStJWnA4SkdreHBPYkFGOU5kMGFXMFBQd25ycjhIakNiQkN0N3BjcmROeStIMjhtNlErcFhqNDgrVU1IS0MyRk5qMlEzZWYrM2FScUh1UkQrbWIvNVNlZnc5NE1hTUxDZkdWWlpDU2Y2UzQrSmUvUGhCK1NtSzFKZk9EVTZFMVpVcTVNdDZ2V2M5emFPVTlWbGtndnE1SXpoZVhxTGhZM3A5ZE1QNzVvLy9jWGhMR2VmSGV6YUs4OHpKVjFmOC81NWk2cjY5ZVFmWlhEMzFsNzRwT2JqZXJQWmZSazNjNGZ4L0xVeGVZZ3RiTTd1dy8xcW9lOXpiWW5wK1R5TUI3ZFcwOS9CZHl6S2JxdGVLSGtzR2x5UVVGYkt4ZDdOTmR4ZEVrWkFBQkE4aWxNUEd6dlJTZ0dCRUR6WU1Ybm5VRnpSVEhVU2dOWjdWVVQ2a2VBZTI1cHFmOVFYMWY4NHNXRGlJOVBIRWJVNFpXdExZTFBFVDZWMFFObTllbDlpMExROUhlOTRRdkNsdW5JRUdpUmNSbXBQbVpRcERRbm1GNmtoQUFQeHZ4OS8zMy8vOThMSC8xdFNOS0lmQU1CYSt3OFo1QUY4UEcvOXM2SW4rZTVzRGdHZ1lBQUFFTUMvSDhnanQ2dnIvMGE5VTc3WFgwQm9LQlZDZW83ZzNZU050NnZWUTZXZDRuL3dsZXE5UWxaTlptMUl6eS8yeXVjTC9Bb0lSeTREcGZ1TVEzMndKTXJQNkNMUFVEZmg2dWVCbGxyaFJmQWI4SU41VzVlU1ZjYXBPK3JhUGkreGJ6cmZYYXpvN09kOC83TFkxUTZnLzU2bDBwZVpCQXFvL3I0dDRGOHkzK2hpQ0dlNG5rQWowK1hXVWdrdS9teWNmVjJ2eEUwWkR2cTdUK2FVdGhPVXpWZjlPSkFWV0FtQXJ5NXZ3RDRuelNPZmVZMmRwVXR0MithQWZaNnFkME5sTHNjNCs0azRKV0Z2ZjlRVHF2dEdMZVJqWmhPQzl4WjUxY0wzc0lEOVE1VWpaZHV4MndXcWtLcHRGR1VJTFpsSEx3clpJVDdGVUpjaXBCRDhmS0U5dSs4LzRpMFg4dHZidk9ZRTNCQ1BqYkhsSGp0bUl0a3h2aXNpMm9FdWZKeTBJUVlOekQyNm84K0swYkZzbDR2WS91SUpRSFlvZU44K1dRUTZkd0pQUzFpSndrK3oyRlMycHllNnJjMHRiVDNCODFMZmgyUzdoaGZVbXJGeUxxMEVvbWlJYjUzK1lLVmU3NUxNZEF3RGtKc0NjLzBTQ3NUc3hVK1lXbS9LZXVmSytXamNzRjdaWkZ6YmhURWozcG41eXhVdEQ1VldEc3N1ZUN0aWMvQzJNZGZJNTd6STlyMlFIdU5TZkwyOEp5bHo1ZGs3RW5JUlAwdnRYd3h2TzJEck12YXJ4R0pFcTVYWExMK0xGOVJ4d2VsSWRoTngwYlRIdEpvUlBSS1VUaW55bFpJRTRFOVhuYVVUUURnb3hCMk1BcEFuU2tOSzVKN3U0U3ZCdG5PL3NtZS8zdDAwQXViSi9NSGZSK2s4WkVjRnlnTUFCTkNRZnJRMkZJd0R0VHNCK2g4Y2c4TUJDSXpEb1NZSEFKYkJ0d2JFM1hzYzY5Mi9OT0RVcmpZbEdrZzdGOUpBa1U3WElLQllXNE1EM3A3ZHo5SE1NcnNDQXJBcjcwSStmb2FjM1ZlUThMWDVSSUoyUmozTUd0VnJZQ1ZHMHRBNktOV3dvZHJlT3BWYS9ualhVNnlIV0p4WnV5Yko2dTZnVTRkNHcxN2F6RUpNb1Y4cjR3RCt5a3Jrb0VaOTFGWnE1SEx4OWlYb0F3OCtIREFJTTJwcVdYRHd6b2ZYUE53YnNnMmZSKzlrNnlLRmdMc0hKa1g4UXBmbWpWY2RZbUZTZ054ZXIyT1pZZ29FRFpLQjlYMW1zbVJLRW5scklEUU5RUGxBVURZdWxTZkdXTWN4ZUllZmVxTUk2dkJDMWF4dzQ5NXZJYmZ3QldId3hWVXZVSXlXanRUd1cxVGcrY1pURGIxOWphcnArZlZWRWdwNWZYN3M0MEs4TmpucXJqbjB0WTIxRmRNYjdZb3BpVTF4VldLVlB5YXh5S2NrNWxSTmlHMkViUnZnVWlrb1RnOTFTWFNnYkJKY2JTMHdhNlFCcGlScW1VMUlwYW9rS2k1V01aR05pcnBHU3VHVVJDWlFwVFdxaEsrS2VhcUlxd281OFFLYVA1WGgwZEZXa2FseGNGdlkvUFczUXJyNnc5ZGMxM2FsSm0yN3JpdnQybHdWaFY1RklscGtwYW9CRVZaNVlWYXhFRlhhQk5hL3RwamZ4ZFplenV0dytEYytJUC9KLzR5eTROemdyZ2JJd1gwRUdiVkNaYVd3bHJTU2NqNk8vRTArSUJGaDBkMGkrNDV2MzdkbU5aWEs5VFh3R3Y4TWZQYmV0Q3g2WEwrQXBDbERXL0hqTmlLKzd2cnExU3M0MjEyOGJiRy9NdmlNYzVHbzVKYzNLbWRkWjI4bzdFVTdWckNHQlBaNE50TDg5L3RsWEYwYklZbU5Jd0JCQVE9PSkgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpO3VuaWNvZGUtcmFuZ2U6dSswMD8/LHUrMDEzMSx1KzAxNTItMDE1Myx1KzAyYmItMDJiYyx1KzAyYzYsdSswMmRhLHUrMDJkYyx1KzIwMDAtMjA2Zix1KzIwNzQsdSsyMGFjLHUrMjEyMix1KzIxOTEsdSsyMTkzLHUrMjIxMix1KzIyMTUsdStmZWZmLHUrZmZmZH1AZm9udC1mYWNle2ZvbnQtZGlzcGxheTpzd2FwO2ZvbnQtZmFtaWx5OlF1aWNrc2FuZDtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDozMDA7c3JjOnVybChkYXRhOmFwcGxpY2F0aW9uL3gtZm9udC13b2ZmMjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxkMDlHTWdBQkFBQUFBREkwQUJBQUFBQUFkWEFBQURIVEFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR2x3Ym5GWWNoekFHWUQ5VFZFRlVIQUNGQUJFSUNvR3FJSUdHVmd1RUtBQUJOZ0lrQTRoTUJDQUZoVUlISUF3SEcycGdSUWRpMkRnQWFQQVpGa1d3Y1FBRm0rOFRSZGttblVqMi95bEJtekdoZGVoYlpTRjBSN3VvN2hrWkNaR1Q2aG5wb2JaVFd4eTZjT0RoMEVnLzlvMEZSK0hBOHMzSjFiM3R3NTlYb3pnY0NOd2pabXR0d0NWeFg0aExvcEVrVGFSWHQwWklZMkl0NGpmOTJYc0N2TVJMVXdqMlFvMElraGN4S2tZcTVpUXRjZm5pbXJwWjBqcUh0R25nSmJsL3REcXppaXFkcXdBem9RMFRMeDg2TXpwWDV0STVUL3p2OTY5NzVyNEFvb3NSQkRKZkJibWtXZ3NJdG9xTmJHMlhKOUNrZW9iSGJmM3pCQm1vR0ExSTVhZ3hHTzFHVGFvTkVGVE02N0l1b245Rlh2emYraXVpd1FFSy9XL2FobWlieitWZEViVlZSNFlOK1BkL2pjekNUTzdMbndXZ0lxRmw1UUFsMjFZQjJwNUtKRmxMNkpmN1plQnpmdTRjRkozcStBT0M4UVY2NnpvYld3WWhXd0QvVjVzbXZFWG96RW1FVFd2dEtHMlRQRzNoV2NwUW05blFPdlI4SkZJVmdaQmQybWJGYytJMWZZWHZ3TlFrWml2cXlQMGU5Mzg2eTFiYTlkM3pCcUdMcXdBWDNYcHpiVEg2K3RiWHpHZ2tBMnVKZlF5ZWxmV2VKU3ZnQzBKRlVGMWF4TmRUVTJIVHBTajdsSmwvbmVtcTcrOXZTTWsvNkphZEdzc3FyZ0dlZXRuYU5WUEw0eitkN3F4L3NneG5GMlQ1ZWdIU1VXeVg3QUREVk1LeG94ejBCY2h1WHhpMkFzQ2F0VFB5dmdPT05UT2JyT1NjY0d1Q1FsemhFYktCL3ZydHoxaXJIOGhzWm5hNzluSW5oeTB5UkVMQ0p5TGdXZjg2LzNBZ1REQUFBTHBqTkVnM0pOTlFaTGhzWkxveXBGdzFwazRkY3RoaDVLaWp5QWtuRU1JQlFwK3VKL2lsa2hpcHVDUEhlZytHOWxwRm9RL2EreE9LYzZIRkF4QjJ6cnAzb3pBWGFpQnV4Vk04Vm1Da1dtVjd0dDgzVXFsNmk2eHd5YXN3Q3BWOStjelU1T2Zqck1ySC9CMWJkc1NaSzdtU1cvYS90Q212S29KRWloWWpWaUtQUHJ5bUtWRGtQLzlyTU1Nc2N5MncwRkxMckxQUkRudGRjeDB6S3pNL0U2aUFwQ2o2TC9rL2FLQTNBMjhPeVZ4YUM0T2xUNWFkdVBNUFdmWkIwdkJrUnRuY1lBR2RoU3VXYmxvMjUxclQ5ZUNPQ0tMZ2ZiWUdrcUJKNlZReWE0S1RHSUhVZzVmaHFSU1lFak1IUnhJSEkrbEozRlR6dE4wcFdoN0REREZQcHRvcHVONDRKL0FJa2cxU2VPcGNpOWhQMFJUUUVpV093enhOMDBaSFUrVXBTMUdGOEJZUEVEM0FCTEYxbnFMRmZBdFNJZHM0dFpRckVKQ3o5VEt0WjJUTVVWaGF4SE9MVzNpWVN0MHBvRWNZZ29TeDQ3VkRxY3loa2drRlBZSGR2TVN4OVY5K3Q3Nk5MWnFEQjJtOVlZaG10bXY0ejBsNzFhRFgvaGN6T3dRdXhxNmsxbFVDN25tbnRHL1AzU3p6S0dRL2Z3UlVEL2NPTVFpRElwVGdqeHZ2Yi9QYndFOXNsQTZpakxJVHhia0dscDJtWGhmVTFPNUEveUhlYWJSV0l6SWRXaldaMlcwOThTM05KbXhJVXhEMEpTMklRcWg3L0RMT1ZGVVk5SS8wNzFkcUpGeTRnTjlTTnlQc0Fxa2xKR1hQYWZlTSt4YkY1cUlZYy9JQUJ4bWxtNEJjQitvUE9SejE5Q00yb3VoMm9HdEVOTjJBSkZyQ1Z6TzROb0QzZXhXU0VLRzRzak1EdE9WSlNnWUxWM29TYUxZZWU2T3JFNTlKV3RJN1hxNkZNTkI2cEJhRHptU0c3eDlQL25jb0FRQzBZTzY1QVYvOFZxUjVwQzdPMEtKUlNUaVhNSGVhanp2cThmRDZURWF0ZFNlRWRDeUp5T1A3SFMwSE5zY2puNEVVSDdJVnY1QjlOY0h0NlErUXhyNU5nSmxFWXBCYmw3aVdGVGcyU3ZzdE5McGsxd2QwRU9CL0hLT1A1MW9Ba0tIYmswY3hnYVVTbUVkenZ2UkVYZlhuVUVxeHFHZ2R4LzFwVUJuNnlTVWJpTDhia0lsQ3BPQzJIRi9ZMHg1cXB4VEw2TG1sVVBiRk9KTWpZUURlWUpJY1lBaHRLVnFmckZLSW5nbWpPSTVleCtXYlNVQXJDR053aElEaWFLUFFWMTJlemFkQTA0Q0hHODVMWW1oMmdpTUVvaGd1RkNFN1d0MlJucFpPUDBMQW16akpOSk1sMUZxUTJ3ZmJVQkpiOCtnZGZpU0dTVzFnQzF0WjB6N1FWUWRkb1RTeXNqU2Viem9sZnlvaFN0Z2dCZWVMQ0hPRGZNeW8yQk9TOGExMmhpZHIzWVVoUkRWWFRBSXhFNnh3bXMwREVnMU1SRkhBR3RHWkpMRTZDdEJabDVKMkE3dWxUUDIwTWpRWHUrRkdjUmhqQ29WWHRvd1ppdGhlQWlnYmxuT1pJUmdEQ2dZS2VqakJRb1E2aFJoMkxJYXJHV0I3eitZaXRLQXVxRU1BbDlRRElnSGM5UnNZaVV6QU5nTXNaR0xMb1VheGFra1ZyZkRveksyMTBaYkswNFpwaTZDRUJWb3NNT0FBVVZnUWl3VjJITWpCRHVLVWdKT0lneVhoRU1uc1VDbFNhYVN4dzZUcmlPbU1SVjI0V1NHL0FyMW9iOExOOU1GYWZiRm9xTnJjY0NOeTRraWpxSXdCSmxOd0JDOG1XVmdsRyt0TVordjU1T01WNEVpRjJLQ0liVlNzbEZvWk5wbUZ3ODJYV3N3b0M1NktEK3FVcm9JekttbnU0R0FaZUpaL0VBQk00UVdRUnBGcWhvVllDUWZQZHBPaEhHYVd1eDRldUZpSG51NDAwcG8xTjdDWFZNbmZLalIyWWRGaXNjV3FGcXVCZE52QWE5ZHk4dEVUUCs3MTNMd2NEUHh2RGQwYXcrOW5leWZnZC9ZMzhDRUw1c0ppV0FuciszMy93WktjUW53S2pyWGlNQUJwRHVDb2FVaWtHSVNoQ0FFRnlFRVY1SmVsRmNIQnA5TG5lL2UvYTdiTUV3OEtwUDZaWlZtVlI4UzVvYkFtVlpKV09NNXkwajhCQUJRWVFUVW1ReWFaR0VUMXg5SERDVWtNRzJNMkhFT2h1WDVIalR1QnBTcEFLd2lYT21zcUJxREFYelFVSXdaK2ZPQkh2Z1poWWhQRzMvalZ5SXZKT0RkQklDMGpLNXNLbk43NnFVeHNJNVJqdEFwaXZ3Y21lQVFLOUZZS0dzRVN0Q1FRb2c3Nkc0WmVtcVRKVEFSVzFEOHlCVklRQlZNSWhhWnUvVkg3aFNPQlJGS1JtalFrU2JrZ1FIb2lyWXpoS0ZYWDdMSUpvTEM1YWFuaTB4Z1dMZ1JnVGdsa3JPYTFXTUp3blE5WHpsY2ZtQURzaFE0SDlFb2VueTVTb3JIcldnOXRzMHBJN3YvM3NFZXdBYXpydUMrR0NQQ2Z4cmtUOUNZQTlDOWJBNUJ4U0tLM2R4MEFZSS9leWlxbXRCdUFvMHRjTnVicjgwd2w0K200TVBqOW1LYVdQL0ZKMXRsdFBkVXpPNEcvaEw5V2pwVE5zbFZ1SXlmSTZYSlh1VmllRXdxdDRkYm1majhBQ0NKelNmZG40cE1vNDNLc2tYV3lzUVZwakQ5U3dtMEY5QVBBdndPQU54MnV2Y2IyQzl1QUM5K0VDODk0enpxZkdhUDdLT2Jocm5NN3oyMEJBWUJFUUg4bmdON0s5M1oxZXVWek5QcW43VFBISXZNY2RkVjFpNjJ6M245T21XV1QrWmFhYVlrTHpqbHZnV3VJaGlSUXNHYTBtb3RnWUdSaVpoRWxXcXc0ZGc1T2laSWtTNUZtamYrdDlRQUhva0o2Yi8zZ2JqTDExa2RmT2JRM2dCaDY2bXU5c3Y2M1R1ZFRvRkNSWW1WV3VXZTFTL2FiNjdEampqamh2cHNSY1V1TkxTN2I3SGJVdU91aTMvMFJEbGZjMEJBZXY2bTExVC8rOXErRkJBeEhoU2RTQ3hBdVJLZ3drVnJRMFFzaWE4MnFwYlphT2FPTkJDN3hGS2xpVE5OZUJyZU8ydW1nazY1NjZhNkhub1lZWUtCQlBFYWJZS3h4SmhudnJJbnk1Y2lWcDhSVXBXd21SMDJFalRiWWFaY2RDQTIvRUFCb0RRQnNQOUJ5UUw4Rk1QOEE4SjhETndjQUFEWjJGYnlFaE9NVUxDV3FvcGhJaUZGR1A2L0pTYmJubkpnVXhWMUR6TFFBaENKSXVFYkJvM2d5YVNVSlJTTmRFTEhTSHRJTTNISEdzU054ZmV3RW5jZnI2Y0NnTVdsN2phYUowMGV4UXRRUjlpaUc0Q1V3OGdTaUpubndTYjJyc0FpcFJFbG54Q1lNczZjU3lJK2UyUng2RXFiK0NyR0VIbU9vTkFPRnBKU3lObEFUaEhUTlBvQjlIUU9yeDRqNVhrek9nNFFPQ1dtY1BqUnhUQzNVOFlQb3VVVTdYN3pNdnJraVdvN2RKc1puUVFBRTdubjEvdDVmWjJSRVFtbzB3ZWl1dkprTGxnK3dST2tzNXhTOE04V0xsVG9FeEtSSnVONVpsdWM5VnhtR3AzWG9oU0ZaZzYwMmgwUHBmUWpnSEhMZFU5ZFlHWkdVakY4eEdQYWZwQ2lOQnE5VjZpMDZUMDRZWXA0b0sxNG9jM2VsckNpVkVZRGMvai95UVNuUE90YUpuekhCYWFoY0EwQ2ZBQ3E4Uzc1WnRBazBwVG5LTkF1dU1RV1FiRml2dG5QVXhuTUxRT3UyZkVtTmIxWnE1NUlNYzVRWnRtcDhWeWxSK0ZCWW95bFhwWDdWQkRBbWRtSXRIVjJGUnd4cTNmNHpKb3g0dDNLWmZwc2p5OHUvVldiVWc3WjFSOU1ncGJqSjR0bTRXQURNUWs0NXdEU2tVUmd0eUVtdzJNS1JUV0RGWmROL0ZHYVJmWkhiYTdPTFlPL3VUNGlIQjRxTWNxdEg3S1Z2MGJxd09aRi90ZVkrRFE0b0hVUVloUTRPVlFvYlRXTjFTN0RCOFBYYyt6dXg2T1EzeE8xRmRtRXFBL3Z5aUszdHVhSFNSYVc0ME9ZMDhaVkFQVFdNWHdLNFpFT3hCaEM4ZlR3YXNHaHhLU3Q3eVFsQm9UNTBvcngra05xb21HK3FJTTE0VHlYVmhTSUQxMHVFSTJDY3VGT3E1NENjUXZOengvcGNmOEdvZE5ZL1MzeG1hVit6Slpzdzc5aWxlOUYvVThyaFBWQzRtUWxjTURyYm9EWVM2Q05iNEFLd3hwK1JFRlZTMVRJNlVNWnc0d1lXUU5QUVc1dE5UbkZQZE5ndzBGTStkcWdIZzgyNko4c2lWaTN1blE0VGxzaTlnYjdHNDVtV0xuZC9EeisvUm5hOFJMRWU1OW1xcHI3U2hvcXRWd1NJdmZtR2RWMnY4eXBxalU3djVqNm5yUDExMXBnc2lMeE5qZTFXSEI4Yk1qcFdKODFkdFMycGFud1Rnd25OMjMzV3F3NGJESlNaR2xCSlRTRGxIZU1ZWlhadE85ZnVsV00vZTBETjNaek5GYnpmL2RzMnVYSUxLZ3hka3dOOVdFVFp1N2xzNXJrd3dSS3d5VnVWMkZNMmVhbGZHVmFoM0xVMHI1MXRXZk01V0ZIQ0ovV01ZWVVqaFd5K2NFbzhleVdCTVhFeldDVkxreWJZamoxdnJWSmRuT1JYZXhzcmdVRExxYmFoMm9pRDg1N0VTR0xhdnRrVExKUmZtTldFOGVhRzI5MFdtNUlzWGk1VGg3V3dsTzhjM0xTbjNldWk3V1I1SDh4RFkxMkxDYkN5RXhWKzZ4NGYzdFF3VURHcjNodGxPZkFHNjMxOHhrcnptc2picXdZdEVWU1c4dlI5S0xlaFo3b0ozb2thNWpXTFZuOXBXcWNybUQyVnZHT2FKOGVuK0tpT2RVYmtQWEpRZlc1eFpiN1cyUmVEdE9KVGEwTmJOend0UkpQQVo5UnRxU2F4MHFHbExrOTJndjFEWDVPVVErKzNZNnUwVUszUFB5RFJjOGVJbG1rU2NFWnAwd1MydzZ3Y0szK0txbkozNHllTmFidkY1L1J5RFIwajc4SHc4NUhtekdWT1MwV0lnOUpBZWxnTzQ5d05rdEk3aEEwVzlrd0p1ajlDRWwyR2FCTDVxa0pYSm1nc3NTNmFnTlZ2N29vR2lBZ3hhbCszcXdUWGZUaWxyQ21sVmxvOFkwTE0yRC9BTmhmdWlTSnJOWFZzQngwV3RQYmtWa3ZOYUhsa3dnQTFjT1F0SXl5RVVnME9ISGx6ZDkxUVczcmwzVzAvczNkd25mWUswZ0NPV3p3UHRJQ0hWbk5YN2VCZ1JuUmNHUVNyaml1YzF3bndxV1VsMTZ2Ulo5VmhYU2VNSVMwa2ZKQzcyOGtQay9yMkRFZFRQSTkwR0tBSm10dVJnMHBqSGFFNVMvbG15N0hRQ1kzZ0Jxa2Jia3BEaXQ3S01QcDlMa1FRU1ovUDVJcUR3UkNlUFJ6N2QzNjBPZ2FGVGpzZU41L0RPOG1hNGxDeGw1MVdjcE84VG55ZHVGbG1maGZ6Vm10NmVjaDhMZW04bitnUUtLS2hndzJFWCtwL0Rlc2k5R0FSVmdLOWtUbE9MVGtRSWFyWE1iSlp0YUVEMDZiNWJkSTRhSitFVFgrQWlRNUpkdHVjUTFYYUR6dkRGcTFzTGFKYzN0eEtRM3RRTGV5VXF5S1dWUTNGL3EwZEZqOFlEOGs2eWRkVkZhNStWcytEU0c2dUMvbk45Y2VudUVOcWxqSi80Y290L243ZitwaVllWVVwbytGWk9sRkd4UnZWMVd5NFZFUEdLTEpwWDdBQjN1Q3RMRjJibVdhSUJpTkY2aEI5MjNHL1QybXVkdElFMWZ6NjZUVXczQWJyUXJhbHdFRmhPM1pMTFpKR3pXend6d0xqRHMrejhvWms4NGdPd29IVUFIQWdMdzhYaDJhRk1yNjZqczVTb3hrdEpZQmVUclJqWDV6bkJrZG1JOU0rLzFocmNZall0ZFpyZ2JyVlRSNmMwNm8zbXVhQ2tOWmNqcmZQc1hsaXBhak5Md2F1Zkw1RVZTS0VBSGd6bzdFTXhZSlcwL29pSnh1TnRrbzBXbVUvTzQ0TmRVV3pJdXNOa2RaZmpkZlNWbzJ4OE9ESEg2THpUSHV6MnB3T1QvT2NCRWpKMVJValI4Yjg3NU5JRUJCdW0zQnR0NnpFb2RiMWhNZG9NaHJHR3FYVTQyQjBtNzNreUx1Um9hNThSeG5HaUt4bUlId3RnTlN1dmtBcXV2UjBLTkp3djM0WWU0WTkrcHZXMzVFMHRzRkYxZ3V1alRMVTM1ZnBVOER3bEFmUG5HN0gwM3pXOFgwZEpubXZKenlZNDV4OGxoRDZnMkpBVEVSNW14L3JFdDNtTnpxM09rYVV3SnZJZkd1K2ZxNVhmQk9IamFmdlFENklvd2hoYjluUWF4VDZKRGZTYjhWa3hybVZWbnF1NXJYSTVScTdSSHlNSlJpTkpuT0h0OGttdmJnZ3pZamduVG40ZHlleGNTek8zdlF5RG9KOWxXSWp1SXNSS1I4ZmJBQVhtenZzbHZNdWJib3ZUYW1jN0syYlJVZjJIMHlSakx0SnFlVHV5QWplOFlRY0pKQTFkY2R0enVWQ2UwL0VyaFlOSXd1MFlPekV0ZWIrU2xNS09VUXNFOXV1WnV2dVFYV2JYcFhsQ2J1dkpBUlhQeUFtekZHaEkrdU9HTUJIN0RQTzBvRFV3MU03OEFOM2hKNkVCK3FvMFlSaEk1OGJCWENJVUxJbXlnaFdWc2F5c0lTUUI1NmhxQjJISXBYek96TzlFbEZzZHh1Qk9YMGlQaFN4TlA5ZVZoeVNTSXAyRXpYa2FiUjdmZlF4a2VpVEQ0TDBGWUNHR2lOek1EZElqWGhoZHpYUHplUTZzSFV3RHlnZFVzd3grdW1LaXE0OW81UXJ5NEVKUGNodlgzMm1KMUVaUHZMcko2cGNhVnVtQzNwUXFYemoyZXZYNG9wVTd2TnUyYStPVitlcnh2SWoyVWJsNkEzblJza3hrV3c5Zk5BZWpWd01JRTVSSEVTbzV4cjF4TktzN2NjTjhOdzMxTWYvOXRSQUtORExIRDdjTDY1bW1lcGFvaGtuUGVMWW5jYitaR0FWczNRbWVzNXlCR3Y0eGJKUjdSdVdqS0lXd1E2bGZDdEZ0SEFlMFdDb28xREMrU0I2SnNkbnBFbVBnQjJnU1E2SlVpOFZGb0lCaFYza2hDaGYwMll4ajlKdmVnL1RLcVR3ZzNlSFBPNXNWa1dEWXZHQ1NhQnVxSTduYUE5b05CODcyTmdvdUlRYmtFckhiODhKMmROalM2SnBEclRmVjdyaDhXcnhrcjhjQjNaaDEyS25NbUtxSG8xcE9lbmh0RjQ2YXpFOUxhODd1Y1J2M0pSMnl5UTdtSU5sZmRuR2puVUpldC9GMXVqZStxTzZTdzZ2WVNwNkRSc2lHZ0o1QmN4WFZvM1I1TFYrWVYxdXV6aHZpWEQrYWIxWkdORHgyUHg0bnJhbWFjYnRxSEtvY3l2MzBlekIyOEdya2pYZTAreEFrQndhVE16TGRZbUZPOU8vZzJHSWVIQVNWTnJUejRVeHJJOFR4S2pqVkpxcnQxWHJkSTdETSszRGUrQ1ExZlc1L1YzVFhIZGZ4b3JFd01QVGJ4cnNSYVlwbmxLSE14eFpIcytKY2ZNYjdYR3BQQldtTGZ1Q1EvZlN6ZXYyUFJhdUN6NkFsbC9CNEVDRXZ0Rm85QnJHRWRacG5JT0krTGdnbjVCYnFPd1NiamkvMWhxQmEzNG45Zko5QUQzVThpYnVhbUdHZDNXMUx1UmxOb2h6bkxrdWlQZUQxajNDRERwNVRWTkdBK0ZoZFhvYVlFeU1UMHFUeDJSbndwczhJdEI5ZkhKM3lhNUZlZ0NsZlAwclJsbDlkN0NaMzMzai9oZzNHMk10YXZNMWZCVU5Cck4xVGVGV0Ywb2M3aXdDb1F2S21lU3BoQlJlSHR5dzB5aXc5MG42eHBnQ1l5a21vTktHaG1oMElWWlk4S0JrTzBXMXBxWUlpOU1pVFZHOTRKMmpoK2N2T1MwUnNlUUs1Z1VEOEVBcVAyQ2FyOUlqVmh0VjNzd1BWTnpUQjN2d1lDa2lXQlU3cjczTjQyQkFuNk4xRzlmbDlOWC9ENUErSjNrOVI2TlVXL055YnFUclZzenc1emZPRDhObzFvdFl2WDJTZ1lOWDEwRGM1WW9QdUpMVWo2NmRUdGNPbC9QRWJZWlBocmkzK08rL0U5K045amJlYVFyT1E1Z0oxN3gwQ0oybURvWVlvTkJsVE5XTkh1enhhL0R1Zmpyd3ZyRzBvZytZWWJGQ2IwVEJELzNvN2l0ek43ZHpYR29kejdmSjM2eHNET2t5T1NBNDROOHJIUHYvK1RNYURGcEpuNDM0Tjg1TS9tY3ErQ0tvaWdoeXdkamtsVnpTOThIZzZRR0JHVitrU2FhMUswbHlSNVRrRGNETi9ZSlRwUi96ZmJ6U2trNWV2RjdSdWRGWUtKcW1JaEVpUkVpcjA3RkVCTmF6NEVLejc4MEJOM3FLOXJPYis0WW8xOHo3NThuY2tnUzZPK1BnTEhaayt2WGVyN0lidThCcXRyYnMxZjMzbXg1MkhleVpKeDNvaUc4MFh6ZGJBNVMvK0VKN0x4RWZzMmRQejRZZ2FzZWh3UlJhTEtMVGtZZ1FKWGtQUmJBaDFqcVhtU3JkenZnbWZFKzJUWi9mbTRqdHkrZGorL2ZHODBpUjI2bi82NTFqK2JPZEVlVjNlWkw3NFFVaXNJYlJyM1NKRjVUb25XeGpmaUlHZWQzeGFjdVhZSS9YQzlYdGhZQVlrRFVZM3QxRWdUTk9Sa2dFOFE0VURTZ1VRY09IRUF1Z1BKNkY5dlVaUUo0bkxkUXIvKzlWK0dnYTR2c1F4Q0ROWDc1OTV5TlhwTS9mV3hBbnA5dytDNmpOSW4yNVU1b3NxUUdyR0hYcEJPNE5qYmN1Nnk1ZmN2Sm9kckh3bnBXYUZYV0RWR0ZxWGYzWld1Tno3RjlldnRyeWpHNWhhVG9IUDdYdnhiV3phMmlGZ05sWHB1S2NIeUs2dEhMNUpraXhTKzFqdXVudXdscUQzNy9XMEYzUVRjZElMVVcwR05nM0ZjMmtwNk5LaTVsQVRtZW1vQWtJVDVyWnhYejNmZG1wK1FObUc2UkZ4eDNHNnllWGlvcFprVnpmbGRZclRmVFp6eFk5Z28yK2dZWG1ZSWhTM2NrdDZFRVBlelkyM1pIaGpHMHdQdUh0MXpzejdZc2RHZVB1WllsZU1NSXNLYTBtYlRGcnVsTUd5M3NtSmVSQ3NwZjhQdXpRNEhJUnFkYUlYTGhFODY3WWdZQmRudFhrYzM2YlUvUDR3L2twWlQ4VTlGME0wQjBob0Zub05hMHVjV3d4Rmk1MHM3VDE1d04wd3FUWmZCN3JMVjh5bWhicWJjT0YvamFkYXZVZk4yc2haMEdRMXBiNE40MmtkR24wY1ZURDkxL1dNeWNuNWVxSVJULzErZEZrYjB2VDFnT0p1VnZyQ0lmMjJVdUtwcDkzNlNGVzBxbHNxRnVtSlBXT1RDendVNzRYc0tBK1dCeG5xRE5Wa0FmQXFJM2pXcXNoeW45SE1hOTlTdlpCbUd3L0tjQjFlalF5b1BGWTVzdS9PRVBENzBUeVdvUS9pZlZSM2w4cVRTQXV2VFVYNEY0U2VZMGFORnpRQWlWUUZnM1pEN0cvMzBFS04vcGNFc0FCU2pCWFk5ZGk3NHJsWHBKYzRkVjQ4amFJQnJBeTR3ekx3SURWWnUrM1dnZnN1ME5wT2NZd3czdlhIWlFjclJDM050UXNMUEdtRU1YMUE4c0gzMFladWdCWXVqeENMdzdlKzVORFRkZFE4ZWJHQitZZzVhWDBLcHF3SXVwU0xyM3lENUpuRnhUdmZhbnA2T0cwKzErZG1GMzZJZ0dzdzlCQmNQNTNuZkhQN05uM1FaWHBzeE0rS3B4RE5uMStBcVdCNGtkamJpYVl2dlBxUDdXUTRLL0RqRFVaNzEzL0RiRjdCR0tTS0owOFgrTDFUUlJ5eCtWVzcyb092QTEzQVF1clh1MDQ5dDNOOUZLWUU0VzNjNkU5NmEwMXlZZHZpNzcrREJSWHc5bVJDLzdMUEdKbGtBKzdSNzIyMWNHUWZjV295NlVLY3JmeEF2QWZCeUQ2Y05hY3RlcUhDYWUrcENsbUxHdEdCZ21DU1A3akJIUjF0ZDBYOTR1MzYxYkQrWWwyZ1lzOTl0a29BMXVjODY0UGZCVGljYXBxZXZocVhCZmUyYlBsaStQMUhqTVpGYXU0Qkd1Vk1HbDI2SWFLRGxKNHo2OVhSOUd4eFhIczUwV2JMYmk4QTE4UlRlRXJoNTFXWlpUMWhUVEZncHg4V2o3U1BpcVQ2c2syT0tIODVyNEM2NFVzREt6cW5CR1hmVVVvYUY4OTZuVUpua1N2K21IdlJJaUtNQmhVUU9uenpHdkgwcTkrYXNtWTlhcHFacXdXYzhhR0RPTUVNbGdlUXFCU2gwVWFRRDIySTdzZWZUYXJrRmdMTm5PcEEwZUgrcXdkNmcvb2RYK1Z5V3cwQjFhMW0veUxQYzVWUVo5ejFaSk84TFhiNFlvcmJkMS9XTG1lN1VFQjdCcjEyRmNGZy9aVm8yNlhJc0E5SnRpQktkYXpsb3hGUDBRUXdPSnBRVW9Famd3OTNWc1EzcHQwckNLTm9oNm5KeVhWR2NPd3dmTWFkY1hRK1VSdkgvNTM1KzAwZVk0RWc1L1pMK3dmVXkxcEdKVWtuWk9qbmJqRW1IRVlodXdZMHAreG00eFpNMUswMncxRFdjYzhic2luTXRtaVpXTnl1Q0JaL3RuaEhZanovZ1pPcUx1c2d3QnpRVmR0UEZRWGVZRHZIbFJ4Y3d0c1IySTFqUjlTS2lkdk9iMnBrN0QwL2tpS3VPWHgzcG1EdzVGQUhSYm1YVmxaK2FsU3hlKzRIU3VkaXhmYS9QSllZNkVlbW8wa3RKcjY4aDUyWWNHS3ZzSDlEN3g5RlY3TDlTN3dkS3dLQnVYbUJXN2ZiTXRaMEJJUnpGbFBjYjFtWThudHBzWDJZZ0F1czBjTTBxeFJMUFd0MTFLeHZmY2pxcmdDOWFyRTNtOEo3ZmVKUmNRVkpBZXM4NHI2dS9tZ2JVbnFkei9nMEMydUpvVjdrazkvS1dDVkxvd1c1T1JTN2x2WjJqLzZxQ09rZXcrZjUySTJyeXFqeDQrcTI1Ly8xeVQ5dERvL215K1NsWmx6OWxyOE9kZGp1Q0hHbGRyREJuRUdFd25KWEJYbWRKN1hxK0pLdEJQbVBSZXBld21XOTRST0dWRVk5SzQ4K3I4aUVoQXpuVHhnVkdkRTlPSzBFWG5TQ0ZkeHZGOGE0S1RDMU55OFpxMjc3Qk5MaUZjQ0hNRDVIZWhZdGNoRCtoWjc4RldCb0JBTitraEx5bXl5QUlHV2NsYTdMVzgxbGdpY0NRZHRkaWE4TVBBSGRrSHlIcUczcEl1aHVldk0vYml4Z1B5c1plNFJ3cjRzNExjdkgzVzVCRThnVi82dzErUndlak16Q1IrSnY4L0c5RVc4UXorUXdlSXhaS0NqQStuWDRjNnRuOVlhZlVOZmw4VStjMVdNZHd2WEE4ZGE2WjNSUnVEc1hhZ0FWdlQwWng5UTZway9xc0NLU0F6ODF6WHRmdEZmRUROVHcvbk1iaDZRV1JaVFk0S241L09GWGZmU0FqLzc2YkJBZGlZb1JGcDdjMk1yd1hCVFp0NXBEMXNtMkdJVmNFZnd0cDIwYWRmMmlaVVhJM3dEV2xDQVZaSTVWTGY2Nm1Nd0dZQXh6Q3ZsaUdvKzd2aUwxOVlqNElLejA3Wm9zTVBXL1BxZjAvckl6cCttUC9PN0p4eEgwTHpUWjh6R3RHc08zRUlUNXg2VlRyWFcrTDlsZ2U5VU1MUDVaYmZDdk9ZbEduT2llQnBFblJTQnhOKy9lQk5mMGpidHdFRTZCYW96VnhWNHFXT0xRNys2aWtmZEcrQkt3dXhDeUkrcjJiK2cyTk10a1g3UjdjZlZES1dpL2dDRWtEMWMxS3k4c0xYaHZnZU9Qdmg0cUpaNkU4R3I3TlRiRUZQYzJ2RHNXMlc4bWxqdEZwNmNDWldvc3J5UkhLM1E5RHZSODhtMjlOa1ZuWHVyaVFJT2lTc2FEcCt2MjFNNGZsVWNMellldkJBQzlyK01WcU52b0RSQ2dWRmpjeWdOWEs3Q3hZRmpiL2xvMDdWdlpRdGwwbXpuL090ditkSjExZHRyd0hrMVVBNnRkQ3dlczNrMG5VMkxTeHN4N05NU1BaZXRzbWFNdWtKSG9QWGRDUjlINm96b3hHbXIyV1l5SlpMT1pGQWRndzJrOUJDejNYNjkzT0x5R1RzeTNxK2VlSkpzZTkyeWFJZzY3MS9mOGVnbjRQQU14UUsyWHcwTHZmZEo5QjdjK1FkU1RQU3ZsQ3JaNExoLzJocW03dGJhWERiekFsaHVkU0VvN0FldVdtcXB6eTFYS1YxeTFWQnJwS1JMcVZTNWxacWVOOXE5QnNUbU5Vb1FNV1JOSUlHR0kwWGt5c0VTY2dWWm83SGhZckEwYUFsU293bzhGVmZ1eStYRm1vcmhPRUVvbjh1NXhzRjVZSXc1Y2lvbm9NSUZoMjFYUjBzSGl1dW1EdEpmdytubjVoU1ZGV0wrVjlSVTNGWXlJRkp2U0d3MnBOVXlpZ1g4S3VjRG1qYU9PM0J2bjA2WHNRaGJmT2FVZFBibnVTRFdtaklrazUyVFlWMWFOSTNobGtoV3JLRVpQaXdER3J5UGNQYjcvSXhsejdhcEhrVGgvWVd2Zm1zc0Y2UzRraGJ2RDNxSmtRVVdYQlhuZmlDVVVraUpqUUpsOExYdEU4cWRJNmpGYmRGMko3bXUyN3lYbDQzejk3QzlnMVNOMld3RW8rRERrT2JQZWxwRUhYa2QwbTNETklrdWpWTktORjlUSWV6ZjFxeHBwZENJbWhmOE53bmFydjRQL1ZPTU0vM3dRY3c2NERJSnUzQm5qeER3SURVak4zbmFNbW9qZXptNlBERGNGeCtPbDhPNVF1dzE4R1FtNEM4YTVoL1JTejZQY0ZXNmdCVEYyVEdWeFZRcU9uR1pJYUtHWXlhZE9CVXdXaHdwRk00WTFNcFlBZ0hYcS9CdGVPK2FLYmNHSVVXZ01LS3lOU1I2Tmg5dXVnWXM3Q0NxSEN6MHdxZ3AzWWZZYkhuRWxFWmhnV2ZKUDU0M2ZkK09TNDFJTXFzekdqTTZKR21VdnZnOXRIeUVndkNJWlRLM1dFSEFSQ0xtY2lkaVI4VEIzaVFCcXoxQnFScVdKL0RBUkU4UzFKL1U0SXhMMEVXQmdiNkkrUUx4NXhlUHhyZFY1U2ZyWitGMkdFanNVWlhWTkhnYURNZE5Xa3NRTlovSEFLY05HbVUwbnZFRUJJK3pPbUUxaXh4WFBtNG0xYkJKSFQra1ZIa3dvOHBYRUFrYXNad1RXQzJBRmZSVll3MC9VWTR0THExWXFMU2paeXVhUjZqNXdKYjRBbSt5VDNHV1ZYdWMzWWdOVTgzZ2JibGM4SktzZlVqUTBMNWozcFVGY1hJR2NvQVYwQzd3K2I1cVJpSld4QkVya244WnVYZXlXQW9XZmVtbEF4ZHB2TGR3L3JocVhidmFzRVhZOHNDMWhmeUtjcEI4YjdsYnlQMVhBZTRXc2NMenhVTmJkM1gyMU5ZM1BFRnp3WHVMdHQ1UmY1aUtQU1dRSWpzSXZyL1ZyWWJ3L09DN0NMOHZNL0JUSEhaNTVZYUpNcERPdDdSdGF0cFpPZHcybjE1RGgrdExqUzhBZnVYalBSemV1YjlRQnpWdmRyWUpoUUVVSDJta3YweTQ5OEJHd25mdmlqdG9GYlUzU2RxMlgvZDBTM3RMeXpTTDkxTno4Mk9nQlBnc2F1K3lnVCt0T0FnNTFIQ2ZYZEdmeW5HcUVSVHZhOEEycVBMN1BhMk4zTHMvblpkQUs5OXk2Q2syNTY1RExXM1V4TEpSWSsydDkveHV2clBaMHRwU1diNnQwcmZWMHJTUDA5SFd1cTYxZGJ5MVRRdWlFcnhNcEpmY3ByZERGVFVQVmJORk56dFlhajFsK2RXOG41cGJYdVEwcTF1YUQ0TW5vRkNpMzkwbnVoamY5eURZdnh5eUkzU2FGMTBYeDBybEppdzYzYTNrVTZwMUsyZHdrdnl4V3h5cjFjOFRPa0ZPWFdLS3FqM2JpdklFWDJIR2JicEFZdVhEanFwRDFzRStuMVp0bmNSSnJtbWdjbmlWRE91d3ZQV1NDdXl3bm45YVk3VXYwMURONnhEVHQxcWxROWU3aFV0YmhNS1dwY0pFQlNGYjllVVlYQUpINW5xMGt2c2hEbTFGcldXMzhvN0IyOUJsejg1OVd5UFBBMStiandhcCtQeGtodGQxSUtJdzlmemx5azdWMms1TW5tdVZYc210dFVOenJIM3h0dFlINkpxak9LSzJRK2VtdjE3NVBxUTM4VCs5bTZTN3lmVThxOEQrQnhoVFJlSEN2alRuV2tBTTkxSlkyUWtiNUFHUFFxV0pxQTc2bmx3K3cvZTlPWUJpcGk0ZDJrdEllT1JPdjFCRmNXK2FnQ2hBM2VzbEVYVUdiY0lHQVJUYzRuaFQxMUJaNjZYWHpURkxGTnlaSVQ1TUxXK3J5Qm1vZFcyVnJFWERSTVpxUkQvMnF5TUw3MlhnUXBHRUxmTm96NzBndm83QmtCenhXcDZlaEFWYWNucGV0WGtONnhKR2RnaUp5aHBKaDdhQ01JZ0RNY3BSVDhxaWFMdkw3R2FOVStabjR1aWxyZ2EzWW9NK2lLc0hIcWo5R3U0bmdycEZIb1dydmxGUVBzUGNweGxqcU9Mc3ZkbW1qYnJlbXNIcmE5K3VTc0dEK29WdXBic09iN0Z4WllVNnNxeFJiZHgwbldPeGtra2l1czR2bncvSzBXQ0pSNXVJNzVYWFQzMTRCcys5RFRuQnhieVJtTkc1d3c1QmdXUFVKaG5ac2wyV1czTjUrM1VyZGlVMExpcXhJQzlmSmh1Zk5sK1dUSnF1MExjU2treFg0ekZBZTVSV1JMVmNQajVUTTFORlJ0UDViYmZrYy9ZYk5OVUlpTG5wVEJMVHNyc3BnQ01aeDJuRmFrTXZKdWNvaWp3YVVNYUtlTDdRUXVlajZLTzIzSkZsUUl0VXVqWXpPL1NZdUUwN2ZidklSTkc4TW5jcG81ZDNsNWxLMGpJam1kdTQ5WTliWDZvMjZZbFpjN1BmSGY5MHZNZG1IbHdaUVR5SEROWDFHbDVrMWo3Y1A0LzVNTkVwNDBRSnpUTTNHTGl2MEpyZkJSNHVBZmYwcUJCTVcwS1U0Vm1xMk9NcWNMTWRURGV2YVBpQ21iWTR3WXlWTDFnWk5uVlJzajRITHBhQXVlYW5xNExjQ3BsWHBSS2lreW1VNllhYzRldStFSW8rMS9ONStzOUZ3aTkwUVAyTnJnQ0tHcFRETERLV0xhUlc2a2JQYW1OM0VabUtSSVFReWRVZWJFUzArWEdxZHFoYmdNU200dUg5aGI3d0FhcU9JVjJDNEtQVXZtSUVMMUFQZkEzNEs1bG1peFYzNkc4MEtMc2JVbzFDbnVyQ3lCUkY3a2NGUys5RXNZWC96UWZmOEIvYmZkUGt5enNwTUk0cWpwbnNYcnJBbzcvMXFkZm5TMFRNM0FhUzJVVHZSOGVMVnVMZWp1d0xsSGRid25VV1haRlZtb3hobmFMTGpqQ2JOZmlaMlFKSkxnaUsyOHFPdWt5bHl4WnlldUpQM0MvcEliUTZURjJ1aFhnYWNLWldGYnZnejNHdndoNWdhR2R0SUNIWmRBUHdQYUN6SXVqYWUxZk1kT0Y5MmQ0UXdXSHZPWDJMS0RKbGoyaTZOamZvaHFzZ2hGdXVHOWhLcmFYTjBvaFYwRU9rR2FMTEx6T012dWhYRTh2VTVkYm9jc1pvRE1sTUlUTnkrVFdpMEpLSUw1RFUrMC9wZDBmMFE0bTZDWFdwOE1IUUkrVjluaG5jd1NES01jb1EvY2h6Vjc5YktjKy92dmc1L1NGd083OTA3UEQ1dS9kVXl2ZXY5RDJqWDBaWmRBZVNSaS92ZjZxODNXT3pKeGlZV2hqS0g5cDZEbUtVZHR3MzVmNFN4cXRiSDdvalNjV0hGcm5XK0Q3bFltMU5rK0htYXlyd2RQUkN2ZlltOE1zbGp4b2ZFYzJNdURYMzJ3L01NK2lsdXZ6ckRad1RjZWx0dXA5dWh0MEdsNDhkK1FuSFcwNVVzanpYYS9ubjJiTnM4M1Q5RUhab3U4bnQ0OHNGT1BzMTc4OTNDYlhiMnNOTFdUR05qcFU0QU1PVHJMaFd5NDVQWHF1VlJxeE9WUVRXU0dOV2h5cjh5QjU0OG9KV1lBUFpYY0RoemNLTzkzKzhCK081Ujh4S3FONWNtb3lrRkNvMXJoWUZZSzJvaEdlelJ0UVZqRzZwOGpuQU9sVXBqK1BxYmNTL25sSUNOV1E0QzdCRWNQMU9iOS9ZbmM2dGE0STNMbkpJVmtiN05tSGRXS2oyd3I5WnpLVGk3NXNYSzFORGU1eGRZNG9wejhyRS9RZW5IL2NzV1hZcUZkbWJjUWpYMkFmaXRwQkVHcEc3ZlBJdXZmQ3JLeFZhdjlZUVltV2tqZzQzcUFMVGZKZHR6S29VeG54RS8zZlJPbS9SaktpN3V6QW5PYWdnU0ZuWG5wYnJJSEMyTE5lV292RmwycFpxcmduLzVLTGtzakVpSU1OaS9JaEVvL1JGWlpnL2F4WURLUy9ZSlV6clU3dGdoOXVEbTdqdHBDRklXYjg5MngySTJ5cXlNU3JlYnI5SXEyUFdzSjJNWHJ3ck5TSWgzUUE1QTIvWlVJSzAxZmJ3dm1ZRUY4cUdxcEJpTEdYcVhTOGV1d1ppTEk3VjlxYVBMaGoyMFVKUDkycVZGNlY0dlVRZFlzMzhsOUJWZ1NuY1lPRzdaVmt0aXRyZmZ2dEIyYjdRSitLR21uTmV2SlVqV2V2aGlCQ3ZVaUdOUGR5R2VBWEx0MEo0ZnBDYzJHa0Y5OVhUVWtHNFYvdHFwS1hIOWVtcEJ4Vm52MnVEWFhwZkU4bXNtbU5XbE9NWTJGK3d5VkRNR1NkQ1llUG1ZbTZUb2RPeUN6blQ1bkRJTkZIUUlpWDRZblU2b1YzcTlVZ3duY3lsT0dhU1pvK1hTYVFtVmp1ekJrM0dhS1FYUnhaeHVnMUp2cy8wdzJENGYxdnh5VVFlR0JaNXZUSUQrNGRjOHNkNFQrM1F2bGZBWEIrYUk3K1V6Yzd6RkErTE9aeGY1S0M4UW0xdmY4eElBZEJvVXpsMU5LUCtSSGRGNGZpcDVsY2FtblkzZDFTMXYxYi90V1BJWWk4UmhMMms1UTVuYVVHZzhUb2ExMmlUbUZtYlVBMFVUV2gwQ1RPbVMrcGlnSGNscERoeDhHYW92U1dqTFhRcjBWSUVvaC96MUtVVHRuM1hlT2c3OURDKzVDU1U2UnJkUGVtVFgvMXNpZHY2RDVnVmFWWnNKVFBuVXpzbFY2dkZVdlhWRXVuVkhJbEVjN1ZYWnBOTGJiS3ZNYkJzYjYva3MzK0xvZVhUVjlJUXNnTU45bDBiMmdKWm5QTnBPTTd1dlo0dVdiWWQ1OVJUT1R3M0pHWHBudnFxaGJYK0cwREtWQ3RnRWwxVUxSUGYzZXJna045UEY2NEVFSFdaUnQzRTI2MjFmUFNIYWoreFNMMkhobHp3ZFQyenF2aC93WmRzQ0VqTm80b3VJTGQ3SWNlMWJSSHdmcFZXQlpoamZaaVpUQXRGTlZNTGc2Z1dNaGhxbVdoSzBSM0Vwb0t0eHl1V3pTMXE1bXJwT3dxOGVWeTNDL0ZSZVJNSUhLZVpLRUkrZVlpdW9tbDJDUG9NRmpYNnE4Qmx2MGNFM1Z1b1FrOEs1eWVNcGROSElJa3MzeGhMQ1NYbGZFOHF2M3granc5UVlwaFM0ekxITmYzenRyRW1NSjA0RzAxMlVzUFg1K3RxdWtYYlYyaEtiVWtSVEk2YytEeERmbE1oeG9zQ0ljL3pnSmhIRlV0ZGp5bHZXQ2twdUw0MmRXRGZwT2x1YXFsWjFoTkJ0TnNMZkJHUnFVSm1JU3Y5WjRGRWVrdmdqV3RzYkdyOFFlNTJJN2k5SmZnUlhnT1F2VjdiSk5hdCtPdHRZL1F3eWt1TndINGpDMWI1WlV2WnA3K3VxMkZrdXJzNG1nT2hkclcvZDlqZ1RRNjdwZ0tEcjhobS9rN285bzdzNTA2eTJDZWVZM1B1TzhGbW5ienZidFlQTGEzL1cvclpGSlo3R2dJTTM2N1h3UFlqZ01wci9FTWc0WG9EbTVHdWwxZ0hzNy9DSVNhYjN6dWdrMDRNYUEwSVZFVXZybTN1cFdEUjhEY0tobHRRTUZ5TmdpRVRJL2duZTYya1RkNmMyZGJrNVdIRHJ4N1pKSXNxY0tZdlN1SlJsSWFpb0J0RndUc29DdjZVb2dUQWRjZ0pMY2dKenlJblBJS2M4S0dVb2k5MHdmU2FSdXdBb28rb3FicVIydWNScGc0L2NqM0JUSmo5S2VaeDRHZmptbUFYNVRtV1lDbFRNTnltendRbHhXbURSOVYrL2lPY0pQWmZtQjZIbCtBR2pZMG80dFJ0MXZjSHU0YkZhbjJ5eitBYlJqTmI4bzFTVGpkR0dxTk94WDRTSVRWcHlDUFhJOHloaVQzQkFpWWUzeklWK0toazVpUkNQbWpUKzNTbGVwK3VCdm5nNURHTFFmRVhBOEVBOW5icm5Yb0FzWHd4ZTcrdUl0QUlmbzM2OFVnM1FtQnErd2pvYmZReCtnUjlpajVEbjZNdndKZmdQZWtyVXZ3YXFTSytWZDdENytEM3pBOGUydmgySXpEOXRlbnhWRDZKQzQ1MTJ4dDhsajVIZlQ5UGZ4cCtvczRIdEFWZHdZektuS3ErUXN6eGV4bzNyR3dMY3JkMlZkUVFOMW1YeDFQY3dDMXU0c1BiekJORUx2MkxhTERkVXRQMm9iUXhLOGF6SG9PNFczaUQzVDQ5ZldlVTJlZlIzZjcveUxGWVptRFFYdmM5SzlsYWdVVUFNZUxlZnhhc0FqQ0hmVmdBWkI2SWRZczUwWHUxM2JxTEY5YjI0STlaRDJzRGJpMTQvejhneTFpeGx0amd2T1VCNUxvQWdCWFl6YWxKZ3NhTXJSMXRYWWRSUmxHSDlSUWRzRSs2eG1SZzh5SWVvOG94UnVNUUJTb1B1TU9NWU1MZHM0eEdDSitIMlNNaTVhYnVzL3dDVlk1dE5BMFhtMHk5eEdNMEp0QU9xMXBnSzBCZEtBZjdES0d2ME1mb3k5Ri9aR2xhbE52bHdubENjaGd0Ukw5bFc2QXI0S04rb1NkZ0l4WHBJSnlGMjdnTzJPL05BbGgxVlhlTk95UGQ5LzNTSUtBL1ZDazM5WTRFUFlpdUhlTUJISnBXa20zUWVKRUxQRVlMMFc5Z2daS2E5ekdIenY4Ykk3REhlLzRZYmhmZTJFOWlvTzlKTTMyM2J1YnNTa1F2aU13K24zUU5KVWU4dE90cnp5NXYyRWE2N0EyeFZaVHM0dTh5MWpqbnU1M05DM2tFYmlFL1pqc2l1bE9qMjBRNjhVNllFaW10eGt1dUMzdkw4WVpMbzJzRkVhZFF4dXZHOWxFMGV0Nitsays3TVFIb04wUFlsc2FYYit2YU4zdHIxeTQyZFZta2ZTYlY1eGkzQmJWMXUxMU05d0QwbE96TFhuWUNSOTB0NHd0K3JpdW9LQTE5eXV3RDJwTEFKd1E3WjN5K2NJbmk4a2c2MThuVVNBVDJPNlZLLzNXQklhMWhUMmV3N0VvRlNyYU1JaitUV0UwKzk0cmFIQUp3RVQ5K1o3cGxYRWpxM3hESDNRRGc1SUdPKzVMOEwyK0ovK2l3enhQTXhnRWlCZ0FJL2l5Wm9IQW1NUDAvZUU1azl5NmlOZTFrNnc3V3o0dWNycVRweHlaM0JlVUp2MlJ5cDNYRlRQWWR5TDdKSXdSNFJranpON2F6WGkyQ0lNRTBwVFhvZFpjN0lTamQrckw0Rkh4R0V5M0FSSFVBeDFWL0xadmlqbDh3V1YybTFmU0NmK3N3YzBXMDZPcWE1bTZTS3p5dFJuaFFWYWdNNk1jaFJna0pNWFlFOFloQjl1bUtvb1RwR1JxTmtLNGZ4NE9XK3UrNENyY0dZcmdUWjV2bUc5VFVqdGZuaXFZWlVXVDZVZzBlRTNoa2lVRzVuQnBnakYxNERYYm8rRFFSYmZwVjEzek1wbElKQ3VjK1ZMSnhHZ2F6eEZ3V0kzWkxuajY1WDUwMHhCMDNvWjBNTDRhU1A2R3ZRWEtidVBNclVxdm1hUWgzVUdaclJVWk5pWW85dFhUUlU3eEdsZFN5cFk0NWJBckxVTE16dEFiNjVpbWRJT2FSRFlwSVVGNUJzSW83S1E2L1V6U3d0STJTZWRTMWs3UW9JWFBTYzBHVEY0dXpXaHhMeHZ3TnhGN2g5cjEyTExZWElkOUZENXNyTy9TMzJiS2VXelpQSnFYL0FNM1FoMXB1ZlN0NzZqaVF2WUVsMW1NMGVNN1RNa3dBQTN0OVNEbTc2WmFYS0xaNTY1dnBPMGl4dmZReUNJMmo1Qk9oVi9rMlBpVjNzUnQ0S3FGbC9tRHVEblV6Nm03VnY3OFJQYjNJMWpQTVhWQ3FWWWlmK0VURkhuVzNyY2hNYjUxZTF1dVZwekwwbGdHVElBVU1hUlVGY0tBRHNJRUUwUUlabUtmeURVbEZaWWNvMmE2LzQzUURDYVhza2NNR09LMnM1S0Z6cVB5aTdzamZKOVM4TlZvamo4b1gxTWp1eWZFRVFJQ1BjV2ltQVdnakxCd2tKcTBPSmppZEhaejJpWTNPWnpzRWtkbnJFTmx5blNOWVlsNXloREtYWWc4ajFicVRDQWhzbkM3eTVLdFFLSnRYbG1JeWhVdThOTExCQlppeXVRT1V5RGJKZEVVbXlEV1pyTDlDZWFhWlloSUg3VVMwdUpYbWViVElpalpCY3JGODAyODZKeWV2N0V5MXhFUU9xc21UdzduS3RkQVVaZXp5VGVEbGt5M1hCR1VaNDNMS3BoN1FISzd4cWVBUWV2dG9jV1JsRXRKbEEwMVJaTXBSS1RWRlhlcnB4VnhGeGI2OG5GN2pzcTdHYmRVMjBCdWVJVkpPd3NmRnE0VFBCSVVTT0xpNEpNclFWejk5ZFpNaGFQQzRXVHNZeWdFblpxczRtcndZS2R4ZXVQbFlLVExKcURTL1Y0bzRoQ28rRHZOUWIvUUkrdkhvcmVmZ01UUE1tNFk1dTA3NVA2SklYaEgvZTEveW53RUEpIGZvcm1hdChcXFwid29mZjJcXFwiKTt1bmljb2RlLXJhbmdlOnUrMDA/Pyx1KzAxMzEsdSswMTUyLTAxNTMsdSswMmJiLTAyYmMsdSswMmM2LHUrMDJkYSx1KzAyZGMsdSsyMDAwLTIwNmYsdSsyMDc0LHUrMjBhYyx1KzIxMjIsdSsyMTkxLHUrMjE5Myx1KzIyMTIsdSsyMjE1LHUrZmVmZix1K2ZmZmR9Ym9keSxodG1se2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjR9aHRtbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItcGFyYWdyYXBoLHB7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNjt0ZXh0LWFsaWduOmp1c3RpZnl9Lm1vbnN0ZXItaDEsaDF7Zm9udC1zaXplOjNyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTU7bWFyZ2luOjRyZW0gMCAxLjVyZW19Lm1vbnN0ZXItaDIsaDJ7Zm9udC1zaXplOjIuNXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4yO21hcmdpbjo0cmVtIDAgMS41cmVtfS5tb25zdGVyLWgzLGgze2ZvbnQtc2l6ZToycmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjI1O21hcmdpbjo0cmVtIDAgMS4yNXJlbX0ubW9uc3Rlci1oNCxoNHtmb250LXNpemU6MS41cmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjM7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfS5tb25zdGVyLWg1LGg1e2ZvbnQtc2l6ZToxLjRyZW07Zm9udC13ZWlnaHQ6Ym9sZGVyO2xpbmUtaGVpZ2h0OjEuMzttYXJnaW46NHJlbSAwIDEuMjVyZW19Lm1vbnN0ZXItaDYsaDZ7Zm9udC1zaXplOjEuM3JlbTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MS4zO21hcmdpbjo0cmVtIDAgMS4yNXJlbX1wK2gxe21hcmdpbi10b3A6My43NXJlbX1wK2gye21hcmdpbi10b3A6M3JlbX1wK2gze21hcmdpbi10b3A6Mi4yNXJlbX1wK2g0e21hcmdpbi10b3A6MS41cmVtfXAraDV7bWFyZ2luLXRvcDouNzVyZW19ZGl2K2gxLGRpditoMixkaXYraDMsZGl2K2g0LGRpditoNSxkaXYraDYscCtoNnttYXJnaW4tdG9wOjB9LmRlY297YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0xKSAwLHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMikgNTAlLHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMykgMTAwJSk7LXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6dGV4dDtiYWNrZ3JvdW5kLWNsaXA6dGV4dDtiYWNrZ3JvdW5kLXNpemU6Y292ZXI7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSk7dGV4dC1maWxsLWNvbG9yOnRyYW5zcGFyZW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOnRyYW5zcGFyZW50fTo6LW1vei1zZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX06OnNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfWtiZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOi4yNXJlbTtib3JkZXItcmFkaXVzOjEwcmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3BhZGRpbmc6LjI1ZW0gLjZlbTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9ZGV0YWlsc3ttYXJnaW4tYm90dG9tOjFyZW19c3VtbWFyeXtjdXJzb3I6cG9pbnRlcjtmb250LWZlYXR1cmUtc2V0dGluZ3M6XFxcInRudW1cXFwiO2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMWVtO3BhZGRpbmc6LjZyZW0gMXJlbX1kZXRhaWxzW29wZW5de3BhZGRpbmc6LjZyZW0gMXJlbSAuNzVyZW19ZGV0YWlsc1tvcGVuXSBzdW1tYXJ5e21hcmdpbi1ib3R0b206LjVyZW07cGFkZGluZzowfS5tb25zdGVyLW5vLXVzZXItc2VsZWN0ey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX1Aa2V5ZnJhbWVzIGRldGFpbHMtc2hvd3swJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLS41ZW0pfX1kZXRhaWxzW29wZW5dPjpub3Qoc3VtbWFyeSl7YW5pbWF0aW9uOmRldGFpbHMtc2hvdyAuMTVzIGVhc2UtaW4tb3V0fWRldGFpbHNbb3Blbl0+Omxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS5tb25vc3BhY2V7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseS1tb25vc3BhY2UpfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3V0bGluZTpub25lO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXh7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9Omhvc3R7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6YmxvY2t9OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LFxcXCJRdWlja3NhbmRcXFwiLFxcXCJTZWdvZSBVSVxcXCIsXFxcIlJvYm90b1xcXCIsXFxcIk94eWdlblxcXCIsXFxcIlVidW50dVxcXCIsXFxcIkNhbnRhcmVsbFxcXCIsXFxcIkZpcmEgU2Fuc1xcXCIsXFxcIkRyb2lkIFNhbnNcXFwiLFxcXCJIZWx2ZXRpY2EgTmV1ZVxcXCIsQXJpYWwsc2Fucy1zZXJpZixcXFwiQXBwbGUgQ29sb3IgRW1vamlcXFwiLFxcXCJTZWdvZSBVSSBFbW9qaVxcXCIsXFxcIlNlZ29lIFVJIFN5bWJvbFxcXCI7LS1tb25zdGVyLWZvbnQtZmFtaWx5LW1vbm9zcGFjZTpcXFwiQ29uc29sYXNcXFwiLFxcXCJDb3VyaWVyIE5ld1xcXCIsXFxcIlJvYm90byBNb25vXFxcIixcXFwiU291cmNlIENvZGUgUHJvXFxcIixcXFwiRmlyYSBNb25vXFxcIixtb25vc3BhY2U7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTYpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTQpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi02KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0yKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTIpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi00KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMyl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS00KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTYpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTIpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMyk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS00KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTYpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNil9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0xOiM4MzNhYjQ7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTI6I2ZkMWQxZDstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMzojZmNiMDQ1Oy0tbW9uc3Rlci1ib3gtc2hhZG93LTE6bm9uZTstLW1vbnN0ZXItYm94LXNoYWRvdy0yOi0xcHggMXB4IDEwcHggMXB4IGhzbGEoMCwwJSw3NiUsLjYxKTstLW1vbnN0ZXItdGV4dC1zaGFkb3c6bm9uZTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTEpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtNik7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC02KTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTIpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci13aWR0aDoycHg7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXN0eWxlOnNvbGlkOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1yYWRpdXM6MDstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTUpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWhvdmVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNil9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci10aGVtZS1vbi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci10aGVtZS1vbi1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpOy0tbW9uc3Rlci10aGVtZS1vZmYtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1vZmYtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLXRoZW1lLW9uLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItdGhlbWUtb24tYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1vZmYtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1vZmYtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTUpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItYm9yZGVyLXN0eWxlOnNvbGlkOy0tbW9uc3Rlci1ib3JkZXItd2lkdGg6M3B4Oy0tbW9uc3Rlci1ib3JkZXItcmFkaXVzOjA7LS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlOi00cHg7LS1tb25zdGVyLXotaW5kZXgtZGVmYXVsdDowOy0tbW9uc3Rlci16LWluZGV4LW91dGxpbmU6MTA7LS1tb25zdGVyLXotaW5kZXgtZHJvcGRvd246MjAwOy0tbW9uc3Rlci16LWluZGV4LWRyb3Bkb3duLW92ZXJsYXk6MjEwOy0tbW9uc3Rlci16LWluZGV4LXN0aWNreTozMDA7LS1tb25zdGVyLXotaW5kZXgtc3RpY2t5LW92ZXJsYXk6MzEwOy0tbW9uc3Rlci16LWluZGV4LWZpeGVkOjQwMDstLW1vbnN0ZXItei1pbmRleC1maXhlZC1vdmVybGF5OjQxMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1iYWNrZHJvcDo1MDA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtYmFja2Ryb3Atb3ZlcmxheTo1MTA7LS1tb25zdGVyLXotaW5kZXgtb2ZmY2FudmFzOjYwMDstLW1vbnN0ZXItei1pbmRleC1vZmZjYW52YXMtb3ZlcmxheTo2MTA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWw6NzAwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLW92ZXJsYXk6NzEwOy0tbW9uc3Rlci16LWluZGV4LXBvcG92ZXI6ODAwOy0tbW9uc3Rlci16LWluZGV4LXBvcG92ZXItb3ZlcmxheTo4MTA7LS1tb25zdGVyLXotaW5kZXgtdG9vbHRpcDo4MDA7LS1tb25zdGVyLXotaW5kZXgtdG9vbHRpcC1vdmVybGF5OjkxMDstLW1vbnN0ZXItc3BhY2UtMDowOy0tbW9uc3Rlci1zcGFjZS0xOjJweDstLW1vbnN0ZXItc3BhY2UtMjo0cHg7LS1tb25zdGVyLXNwYWNlLTM6NnB4Oy0tbW9uc3Rlci1zcGFjZS00OjEwcHg7LS1tb25zdGVyLXNwYWNlLTU6MTZweDstLW1vbnN0ZXItc3BhY2UtNjoyNnB4Oy0tbW9uc3Rlci1zcGFjZS03OjQycHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtMDo0ODBweDstLW1vbnN0ZXItYnJlYWtwb2ludC00OjQ4MHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTc6NzY4cHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtOTo5OTJweDstLW1vbnN0ZXItYnJlYWtwb2ludC0xMjoxMjAwcHg7LS1tb25zdGVyLWRyYWdnZXItd2lkdGg6MnB4Oy0tbW9uc3Rlci1kcmFnZ2VyLWhhbmRsZS13aWR0aDo0cHg7LS1tb25zdGVyLWRyYWdnZXItaGFuZGxlLWhlaWdodDo1MHB4fVtkYXRhLW1vbnN0ZXItcm9sZT1vdmVybGF5XS5oaWRlLWVtcHR5e2Rpc3BsYXk6bm9uZX1bZGF0YS1tb25zdGVyLXJvbGU9b3ZlcmxheV17YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpO2hlaWdodDoxMDAlO2xlZnQ6MDtvdmVyZmxvdy14OmhpZGRlbjtwb3NpdGlvbjpmaXhlZDt0b3A6MDt0cmFuc2l0aW9uOi41czt3aWR0aDowO3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW9mZmNhbnZhcyl9W2RhdGEtbW9uc3Rlci1yb2xlPW92ZXJsYXldIFtkYXRhLW1vbnN0ZXItcm9sZT1vdmVybGF5LWNsb3NlXXtjdXJzb3I6cG9pbnRlcjtoZWlnaHQ6NDBweDtsZWZ0OjEwcHg7cG9zaXRpb246YWJzb2x1dGU7dG9wOjEwcHg7d2lkdGg6NDBweH1bZGF0YS1tb25zdGVyLXJvbGU9b3ZlcmxheV0gW2RhdGEtbW9uc3Rlci1yb2xlPW92ZXJsYXktY2xvc2VdOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEwMCU7LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J00yLjE0NiAyLjg1NGEuNS41IDAgMSAxIC43MDgtLjcwOEw4IDcuMjkzbDUuMTQ2LTUuMTQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC43MDcgOGw1LjE0NyA1LjE0NmEuNS41IDAgMCAxLS43MDguNzA4TDggOC43MDdsLTUuMTQ2IDUuMTQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4TDcuMjkzIDh6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNMi4xNDYgMi44NTRhLjUuNSAwIDEgMSAuNzA4LS43MDhMOCA3LjI5M2w1LjE0Ni01LjE0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsNS4xNDcgNS4xNDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC01LjE0NiA1LjE0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4eicvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9b3ZlcmxheS1vcGVuXXtjdXJzb3I6cG9pbnRlcjtoZWlnaHQ6NDBweDtsZWZ0OjEwcHg7cG9zaXRpb246YWJzb2x1dGU7dG9wOjEwcHg7d2lkdGg6NDBweH1bZGF0YS1tb25zdGVyLXJvbGU9b3ZlcmxheS1vcGVuXTpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmJsb2NrO2hlaWdodDoxMDAlOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNMSAyYTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMUgyYTEgMSAwIDAgMS0xLTF6bTUgMGExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFIN2ExIDEgMCAwIDEtMS0xem01IDBhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxaC0yYTEgMSAwIDAgMS0xLTF6TTEgN2ExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFIMmExIDEgMCAwIDEtMS0xem01IDBhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxSDdhMSAxIDAgMCAxLTEtMXptNSAwYTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMWgtMmExIDEgMCAwIDEtMS0xek0xIDEyYTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMUgyYTEgMSAwIDAgMS0xLTF6bTUgMGExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFIN2ExIDEgMCAwIDEtMS0xem01IDBhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxaC0yYTEgMSAwIDAgMS0xLTF6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNMSAyYTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMUgyYTEgMSAwIDAgMS0xLTF6bTUgMGExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFIN2ExIDEgMCAwIDEtMS0xem01IDBhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxaC0yYTEgMSAwIDAgMS0xLTF6TTEgN2ExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFIMmExIDEgMCAwIDEtMS0xem01IDBhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxSDdhMSAxIDAgMCAxLTEtMXptNSAwYTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMWgtMmExIDEgMCAwIDEtMS0xek0xIDEyYTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMUgyYTEgMSAwIDAgMS0xLTF6bTUgMGExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFIN2ExIDEgMCAwIDEtMS0xem01IDBhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxaC0yYTEgMSAwIDAgMS0xLTF6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1vdmVybGF5XS5vcGVue3dpZHRoOjEwMCV9IFxufWAsXG5cdFx0MCxcblx0KTtcbn0gY2F0Y2ggKGUpIHtcblx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0ZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKSxcblx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdGUgKyBcIlwiLFxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRDdXN0b21FbGVtZW50LFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCBcIi4uL25vdGlmeS9ub3RpZnkubWpzXCI7XG5pbXBvcnQgeyBPdmVybGF5U3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvb3ZlcmxheS5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9ST0xFIH0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge1xuXHRmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudCxcblx0ZmlyZUN1c3RvbUV2ZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2V2ZW50cy5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgT3ZlcmxheSB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBvdmVybGF5RWxlbWVudFN5bWJvbCA9IFN5bWJvbChcIm92ZXJsYXlFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBvdmVybGF5Q2xvc2VFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwib3ZlcmxheUNsb3NlckVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IG92ZXJsYXlPcGVuRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcIm92ZXJsYXlPcGVuRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgY2xvc2VFdmVudEhhbmRsZXJTeW1ib2wgPSBTeW1ib2woXCJjbG9zZUV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgb3BlbkV2ZW50SGFuZGxlclN5bWJvbCA9IFN5bWJvbChcIm9wZW5FdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9WQUxVRV9PVkVSTEFZX09QRU4gPSBcIm92ZXJsYXktb3BlblwiO1xuXG4vKipcbiAqIFRoZSBPdmVybGF5IGNvbXBvbmVudCBpcyB1c2VkIHRvIHNob3cgYW4gb3ZlcmxheSBhbmQgYSBidXR0b24gdG8gb3BlbiB0aGUgb3ZlcmxheS5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1hZ2VzL292ZXJsYXkucG5nXCI+XG4gKlxuICogRGVwZW5kZW5jaWVzOiB0aGUgc3lzdGVtIHVzZXMgZnVuY3Rpb25zIG9mIHRoZSBbbW9uc3RlcmpzXShodHRwczovL21vbnN0ZXJqcy5vcmcvKSBsaWJyYXJ5XG4gKlxuICogWW91IGNhbiBjcmVhdGUgdGhpcyBjb250cm9sIGVpdGhlciBieSBzcGVjaWZ5aW5nIHRoZSBIVE1MIHRhZyA8bW9uc3Rlci1vdmVybGF5IC8+YCBkaXJlY3RseSBpbiB0aGUgSFRNTCBvciB1c2luZ1xuICogSmF2YXNjcmlwdCB2aWEgdGhlIGBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLW92ZXJsYXknKTtgIG1ldGhvZC5cbiAqXG4gKiBgYGBodG1sXG4gKiA8bW9uc3Rlci1vdmVybGF5PjwvbW9uc3Rlci1vdmVybGF5PlxuICogYGBgXG4gKlxuICogT3IgeW91IGNhbiBjcmVhdGUgdGhpcyBDdXN0b21Db250cm9sIGRpcmVjdGx5IGluIEphdmFzY3JpcHQ6XG4gKlxuICogYGBganNcbiAqIGltcG9ydCAnQHNjaHVrYWkvY29tcG9uZW50LXN0YXRlL3NvdXJjZS9vdmVybGF5Lm1qcyc7XG4gKiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLW92ZXJsYXknKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBCb2R5IHNob3VsZCBoYXZlIGEgY2xhc3MgXCJoaWRkZW5cIiB0byBlbnN1cmUgdGhhdCB0aGUgc3R5bGVzIGFyZSBhcHBsaWVkIGNvcnJlY3RseS5cbiAqXG4gKiBgYGBjc3NcbiAqIGJvZHkuaGlkZGVuIHtcbiAqICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBzdGFydHVtbCBvdmVybGF5LnBuZ1xuICogc2tpbnBhcmFtIG1vbm9jaHJvbWUgdHJ1ZVxuICogc2tpbnBhcmFtIHNoYWRvd2luZyBmYWxzZVxuICogSFRNTEVsZW1lbnQgPHwtLSBDdXN0b21FbGVtZW50XG4gKiBDdXN0b21FbGVtZW50IDx8LS0gQ3VzdG9tQ29udHJvbFxuICogQ3VzdG9tQ29udHJvbCA8fC0tIE92ZXJsYXlcbiAqIEBlbmR1bWxcbiAqXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBzaW1wbGUgb3ZlcmxheSBjb21wb25lbnRcbiAqIEBmaXJlcyBtb25zdGVyLW92ZXJsYXktYmVmb3JlLW9wZW5cbiAqIEBmaXJlcyBtb25zdGVyLW92ZXJsYXktb3BlblxuICogQGZpcmVzIG1vbnN0ZXItb3ZlcmxheS1iZWZvcmUtY2xvc2VcbiAqIEBmaXJlcyBtb25zdGVyLW92ZXJsYXktY2xvc2VkXG4gKi9cbmNsYXNzIE92ZXJsYXkgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2NvbXBvbmVudHMvaG9zdC9vdmVybGF5QEBpbnN0YW5jZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBIVE1MIHRhZywgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGNvbnRhaW5lciBDb250YWluZXIgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHthcnJheX0gY29udGFpbmVyIENvbnRhaW5lciBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gY29udGFpbmVyW10ubmFtZSBOYW1lIG9mIHRoZSBjb250YWluZXJcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGNvbnRhaW5lcltdLmNvbnRlbnQgQ29udGVudCBvZiB0aGUgY29udGFpbmVyXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjb250YWluZXJbXS5jbGFzcyBDc3MgY2xhc3Mgb2YgdGhlIGNvbnRhaW5lclxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gY2xhc3NlcyBDc3MgY2xhc3Nlc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gY2xhc3Nlcy5ib2R5IENzcyBjbGFzcyB0byBoaWRlIHRoZSBib2R5LiBUaGlzIGNsYXNzIGlzIHJlbW92ZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIHJlYWR5LlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gY2xhc3Nlcy5vdmVybGF5IENzcyBjbGFzcyB0byBoaWRlIHRoZSBvdmVybGF5LiBUaGlzIGNsYXNzIGlzIHJlbW92ZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIHJlYWR5LlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZmVhdHVyZXMgRmVhdHVyZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IGZlYXR1cmVzLmVzY2FwZUtleSBJZiB0cnVlIHRoZSBvdmVybGF5IGNhbiBiZSBjbG9zZWQgd2l0aCB0aGUgZXNjYXBlIGtleVxuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IGZlYXR1cmVzLm9wZW5CdXR0b24gSWYgdHJ1ZSB0aGUgb3ZlcmxheSBjYW4gYmUgb3BlbmVkIHdpdGggYSBidXR0b25cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0fSxcblx0XHRcdG92ZXJsYXk6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG5hbWU6IFwiY29udGVudFwiLFxuXHRcdFx0XHRcdGNvbnRlbnQ6IFwiPHNsb3Q+PC9zbG90PlwiLFxuXHRcdFx0XHRcdGNsYXNzOiBcIlwiLFxuXHRcdFx0XHR9LFxuXHRcdFx0XSxcblx0XHRcdGNsYXNzZXM6IHtcblx0XHRcdFx0Ym9keTogXCJoaWRkZW5cIixcblx0XHRcdFx0b3ZlcmxheTogXCJoaWRlLWVtcHR5XCIsXG5cdFx0XHR9LFxuXHRcdFx0ZmVhdHVyZXM6IHtcblx0XHRcdFx0ZXNjYXBlS2V5OiB0cnVlLFxuXHRcdFx0XHRvcGVuQnV0dG9uOiB0cnVlLFxuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0Y29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuXHRcdC8qKlxuXHRcdCAqIHNob3cgdGhlIHNjcm9sbCBiYXIgYWx3YXlzXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKi9cblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUub3ZlcmZsb3dZID0gXCJzY3JvbGxcIjtcblxuXHRcdGNvbnN0IGNsYXNzTmFtZXMgPSB0aGlzLmdldE9wdGlvbihcImNsYXNzZXMuYm9keVwiKTtcblxuXHRcdGlmIChkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWVzKSkge1xuXHRcdFx0ZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZXMpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5PdmVybGF5fVxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblxuXHRcdGluaXRDb250cm9sUmVmZXJlbmNlcy5jYWxsKHRoaXMpO1xuXHRcdGluaXRFdmVudEhhbmRsZXIuY2FsbCh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5PdmVybGF5fVxuXHQgKi9cblx0dG9nZ2xlKCkge1xuXHRcdGlmICh0aGlzW292ZXJsYXlFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuY29udGFpbnMoXCJvcGVuXCIpKSB7XG5cdFx0XHR0aGlzLmNsb3NlKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMub3BlbigpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5PdmVybGF5fVxuXHQgKiBAZmlyZXMgbW9uc3Rlci1vdmVybGF5LWJlZm9yZS1vcGVuXG5cdCAqIEBmaXJlcyBtb25zdGVyLW92ZXJsYXktb3BlblxuXHQgKiBAZmlyZXMgbW9uc3Rlci1vdmVybGF5LWJlZm9yZS1jbG9zZVxuXHQgKiBAZmlyZXMgbW9uc3Rlci1vdmVybGF5LWNsb3NlZFxuXHQgKi9cblx0b3BlbigpIHtcblx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLW92ZXJsYXktYmVmb3JlLW9wZW5cIiwge30pO1xuXG5cdFx0dGhpc1tvdmVybGF5RWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LnJlbW92ZShcImhpZGUtZW1wdHlcIik7XG5cblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdHRoaXNbb3ZlcmxheUVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5hZGQoXCJvcGVuXCIpO1xuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItb3ZlcmxheS1vcGVuXCIsIHt9KTtcblx0XHRcdH0sIDApO1xuXHRcdH0sIDApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkhvc3QuT3ZlcmxheX1cblx0ICovXG5cdGNsb3NlKCkge1xuXHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItb3ZlcmxheS1iZWZvcmUtY2xvc2VcIiwge30pO1xuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0dGhpc1tvdmVybGF5RWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LnJlbW92ZShcIm9wZW5cIik7XG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci1vdmVybGF5LWNsb3NlZFwiLCB7fSk7XG5cdFx0XHR9LCAwKTtcblx0XHR9LCAwKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItb3ZlcmxheVwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge0NTU1N0eWxlU2hlZXRbXX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiBbT3ZlcmxheVN0eWxlU2hlZXRdO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1NlbGVjdH1cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGluaXRDb250cm9sUmVmZXJlbmNlcygpIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0dGhpc1tvdmVybGF5RWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QuZ2V0RWxlbWVudEJ5SWQoXCJvdmVybGF5XCIpO1xuXHR0aGlzW292ZXJsYXlDbG9zZUVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XCJbZGF0YS1tb25zdGVyLXJvbGU9b3ZlcmxheS1jbG9zZV1cIixcblx0KTtcblx0dGhpc1tvdmVybGF5T3BlbkVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XCJbZGF0YS1tb25zdGVyLXJvbGU9b3ZlcmxheS1vcGVuXVwiLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudEhhbmRsZXIoKSB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKi9cblx0dGhpc1tjbG9zZUV2ZW50SGFuZGxlclN5bWJvbF0gPSAoZXZlbnQpID0+IHtcblx0XHR0aGlzLmNsb3NlKCk7XG5cdH07XG5cblx0dGhpc1tvdmVybGF5Q2xvc2VFbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFxuXHRcdFwiY2xpY2tcIixcblx0XHR0aGlzW2Nsb3NlRXZlbnRIYW5kbGVyU3ltYm9sXSxcblx0KTtcblxuXHQvKipcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICovXG5cdHRoaXNbb3BlbkV2ZW50SGFuZGxlclN5bWJvbF0gPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBlbGVtZW50ID0gZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoXG5cdFx0XHRldmVudCxcblx0XHRcdEFUVFJJQlVURV9ST0xFLFxuXHRcdFx0QVRUUklCVVRFX1ZBTFVFX09WRVJMQVlfT1BFTixcblx0XHQpO1xuXHRcdGlmIChlbGVtZW50KSB7XG5cdFx0XHR0aGlzLm9wZW4oKTtcblx0XHR9XG5cdH07XG5cblx0dGhpcy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpc1tvcGVuRXZlbnRIYW5kbGVyU3ltYm9sXSk7XG5cblx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMuZXNjYXBlS2V5XCIpID09PSB0cnVlKSB7XG5cdFx0dGhpcy5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCAoZXZlbnQpID0+IHtcblx0XHRcdGlmIChldmVudC5rZXkgPT09IFwiRXNjYXBlXCIpIHtcblx0XHRcdFx0Y29uc3QgaXNOb3RDb21iaW5lZEtleSA9ICEoXG5cdFx0XHRcdFx0ZXZlbnQuY3RybEtleSB8fFxuXHRcdFx0XHRcdGV2ZW50LmFsdEtleSB8fFxuXHRcdFx0XHRcdGV2ZW50LnNoaWZ0S2V5XG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmIChpc05vdENvbWJpbmVkS2V5KSB7XG5cdFx0XHRcdFx0dGhpcy50b2dnbGVPdmVybGF5KCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG4gICAgICAgIDx0ZW1wbGF0ZSBpZD1cImhvc3Qtb3ZlcmxheVwiPlxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6aG9zdC1vdmVybGF5LmNvbnRlbnRcIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cInBhcnQgcGF0aDpob3N0LW92ZXJsYXkubmFtZSwgZGF0YS1tb25zdGVyLXJvbGUgcGF0aDpob3N0LWNvbnRhaW5lci5vdmVybGF5XCI+PC9kaXY+XG4gICAgICAgIDwvdGVtcGxhdGU+XG5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cIm92ZXJsYXktb3BlblwiIHBhcnQ9XCJvcGVuXCJcblx0XHRcdCBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNsYXNzIHBhdGg6ZmVhdHVyZXMub3BlbkJ1dHRvbiB8IGlmOnZpc2libGU6aGlkZGVuXCI+PC9kaXY+XG5cbiAgICAgICAgPGRpdiBpZD1cIm92ZXJsYXlcIiBkYXRhLW1vbnN0ZXItcm9sZT1cIm92ZXJsYXlcIiBwYXJ0PVwib3ZlcmxheVwiIGRhdGEtbW9uc3Rlci1pbnNlcnQ9XCJob3N0LW92ZXJsYXkgcGF0aDpvdmVybGF5XCJcbiAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNsYXNzIHBhdGg6Y2xhc3Nlcy5vdmVybGF5XCI+XG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwib3ZlcmxheS1jbG9zZVwiIHBhcnQ9XCJjbG9zZVwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5gO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoT3ZlcmxheSk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgZ2V0V2luZG93IH0gZnJvbSBcIi4uLy4uL2RvbS91dGlsLm1qc1wiO1xuXG5leHBvcnQgeyBnZW5lcmF0ZVVuaXF1ZUNvbmZpZ0tleSB9O1xuXG4vKipcbiAqIEdlbmVyYXRlIGEgdW5pcXVlIGNvbmZpZ3VyYXRpb24ga2V5IGJhc2VkIG9uIHRoZSBjdXJyZW50IGJyb3dzZXIgbG9jYXRpb24sXG4gKiBjb21wb25lbnQgbmFtZSwgaWQsIGFuZCBhIHByZWZpeC5cbiAqXG4gKiBAc2luY2UgMy41NS4wIHRoZSBmdW5jdGlvbiByZW1vdmUgdGhlIGhhc2ggZnJvbSB0aGUga2V5XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbXBvbmVudE5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgY29tcG9uZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGlkIC0gQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGNvbXBvbmVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwcmVmaXggLSBBIHByZWZpeCB0byB1c2UgaW4gdGhlIHVuaXF1ZSBrZXkuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBnZW5lcmF0ZWQgdW5pcXVlIGNvbmZpZ3VyYXRpb24ga2V5LlxuICovXG5mdW5jdGlvbiBnZW5lcmF0ZVVuaXF1ZUNvbmZpZ0tleShjb21wb25lbnROYW1lLCBpZCwgcHJlZml4KSB7XG5cdC8vIEdldCB0aGUgYnJvd3NlciBsb2NhdGlvbiB3aXRob3V0IHBhcmFtZXRlcnNcblx0Y29uc3QgdXJsV2l0aG91dFBhcmFtcyA9IGdldFdpbmRvdygpLmxvY2F0aW9uLmhyZWYuc3BsaXQoXCI/XCIpWzBdO1xuXG5cdC8vIFdpdGhvdXQgaGFzaCAoc2luY2UgMy41NS4wKVxuXHRjb25zdCB1cmxXaXRob3V0UGFyYW1zQW5kSGFzaCA9IHVybFdpdGhvdXRQYXJhbXMuc3BsaXQoXCIjXCIpWzBdO1xuXG5cdC8vIENvbWJpbmUgdGhlIHBhcnRzIHRvIGNyZWF0ZSBhIHVuaXF1ZSBrZXlcblx0Y29uc3QgdW5pcXVlS2V5ID0gYCR7cHJlZml4fV8ke3VybFdpdGhvdXRQYXJhbXNBbmRIYXNofV8ke2NvbXBvbmVudE5hbWV9XyR7aWR9YDtcblxuXHQvLyBSZXBsYWNlIGFueSBzcGVjaWFsIGNoYXJhY3RlcnMgYW5kIHNwYWNlcyB3aXRoIHVuZGVyc2NvcmVzXG5cdHJldHVybiB1bmlxdWVLZXkucmVwbGFjZSgvW15cXHdcXHNdL2dpLCBcIl9cIikucmVwbGFjZSgvXFxzKy9nLCBcIl9cIik7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCAyMDI0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqL1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgRGV0YWlsc1N0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IERldGFpbHNTdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcblx0RGV0YWlsc1N0eWxlU2hlZXQuaW5zZXJ0UnVsZShcblx0XHRgXG5AbGF5ZXIgZGV0YWlscyB7IFxuOndoZXJlKGh0bWwpe2xpbmUtaGVpZ2h0OjEuMTU7LXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OjEwMCU7LW1vei10ZXh0LXNpemUtYWRqdXN0OjEwMCU7dGV4dC1zaXplLWFkanVzdDoxMDAlfTp3aGVyZShoMSl7Zm9udC1zaXplOjJlbTttYXJnaW4tYmxvY2stZW5kOi42N2VtO21hcmdpbi1ibG9jay1zdGFydDouNjdlbX06d2hlcmUoZGwsb2wsdWwpIDp3aGVyZShkbCxvbCx1bCl7bWFyZ2luLWJsb2NrLWVuZDowO21hcmdpbi1ibG9jay1zdGFydDowfTp3aGVyZShocil7Ym94LXNpemluZzpjb250ZW50LWJveDtjb2xvcjppbmhlcml0O2hlaWdodDowfTp3aGVyZShhYmJyW3RpdGxlXSl7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTstd2Via2l0LXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkfTp3aGVyZShiLHN0cm9uZyl7Zm9udC13ZWlnaHQ6Ym9sZGVyfTp3aGVyZShjb2RlLGtiZCxwcmUsc2FtcCl7Zm9udC1mYW1pbHk6bW9ub3NwYWNlLG1vbm9zcGFjZTtmb250LXNpemU6MWVtfTp3aGVyZShzbWFsbCl7Zm9udC1zaXplOjgwJX06d2hlcmUodGFibGUpe2JvcmRlci1jb2xvcjpjdXJyZW50Q29sb3I7dGV4dC1pbmRlbnQ6MH06d2hlcmUoYnV0dG9uLGlucHV0LHNlbGVjdCl7bWFyZ2luOjB9OndoZXJlKGJ1dHRvbil7dGV4dC10cmFuc2Zvcm06bm9uZX06d2hlcmUoYnV0dG9uLGlucHV0OmlzKFt0eXBlPWJ1dHRvbiBpXSxbdHlwZT1yZXNldCBpXSxbdHlwZT1zdWJtaXQgaV0pKXstd2Via2l0LWFwcGVhcmFuY2U6YnV0dG9ufTp3aGVyZShwcm9ncmVzcyl7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9OndoZXJlKHNlbGVjdCl7dGV4dC10cmFuc2Zvcm06bm9uZX06d2hlcmUodGV4dGFyZWEpe21hcmdpbjowfTp3aGVyZShpbnB1dFt0eXBlPXNlYXJjaCBpXSl7LXdlYmtpdC1hcHBlYXJhbmNlOnRleHRmaWVsZDtvdXRsaW5lLW9mZnNldDotMnB4fTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiw6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b257aGVpZ2h0OmF1dG99Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOmluaGVyaXQ7b3BhY2l0eTouNTR9Ojotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lfTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbjtmb250OmluaGVyaXR9OndoZXJlKGJ1dHRvbixpbnB1dDppcyhbdHlwZT1idXR0b24gaV0sW3R5cGU9Y29sb3IgaV0sW3R5cGU9cmVzZXQgaV0sW3R5cGU9c3VibWl0IGldKSk6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyLXN0eWxlOm5vbmU7cGFkZGluZzowfTp3aGVyZShidXR0b24saW5wdXQ6aXMoW3R5cGU9YnV0dG9uIGldLFt0eXBlPWNvbG9yIGldLFt0eXBlPXJlc2V0IGldLFt0eXBlPXN1Ym1pdCBpXSkpOjotbW96LWZvY3VzcmluZ3tvdXRsaW5lOjFweCBkb3R0ZWQgQnV0dG9uVGV4dH06d2hlcmUoOi1tb3otdWktaW52YWxpZCl7Ym94LXNoYWRvdzpub25lfTp3aGVyZShkaWFsb2cpe2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6c29saWQ7Y29sb3I6IzAwMDtoZWlnaHQ6LW1vei1maXQtY29udGVudDtoZWlnaHQ6Zml0LWNvbnRlbnQ7bGVmdDowO21hcmdpbjphdXRvO3BhZGRpbmc6MWVtO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7d2lkdGg6LW1vei1maXQtY29udGVudDt3aWR0aDpmaXQtY29udGVudH06d2hlcmUoZGlhbG9nOm5vdChbb3Blbl0pKXtkaXNwbGF5Om5vbmV9OndoZXJlKHN1bW1hcnkpe2Rpc3BsYXk6bGlzdC1pdGVtfWh0bWx7aGVpZ2h0OjEwMCV9Ym9keSxodG1se21pbi1oZWlnaHQ6Y2FsYygxMDB2aCAtIDQwcHgpfWJvZHl7Ym94LXNpemluZzpib3JkZXItYm94O21hcmdpbjowO3BhZGRpbmc6MDt3b3JkLWJyZWFrOmJyZWFrLXdvcmR9LmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmlubGluZXtkaXNwbGF5OmlubGluZX0uaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5ncmlke2Rpc3BsYXk6Z3JpZH0uaW5saW5lLWdyaWR7ZGlzcGxheTppbmxpbmUtZ3JpZH0uZmxleHtkaXNwbGF5OmZsZXh9LmlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXh9LmhpZGRlbiwuaGlkZSwubm9uZXtkaXNwbGF5Om5vbmV9LnZpc2libGV7dmlzaWJpbGl0eTp2aXNpYmxlfS5pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW59Lm1vbnN0ZXItYnV0dG9uLXByaW1hcnksYnV0dG9ue2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYnV0dG9uLXNlY29uZGFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1idXR0b24tc2Vjb25kYXJ5LC5tb25zdGVyLWJ1dHRvbi10ZXJ0aWFyeXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofS5tb25zdGVyLWJ1dHRvbi10ZXJ0aWFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci1idXR0b24tb3V0bGluZS1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXByaW1hcnksLm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtc2Vjb25kYXJ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtc2Vjb25kYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXRlcnRpYXJ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCk7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9YnV0dG9uOmFjdGl2ZSxidXR0b246aG92ZXJ7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMik7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC44cyxjb2xvciAuMjVzIC4wODMzMzMzMzMzc31idXR0b246YWN0aXZle3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW91dGxpbmUpfS5tb25zdGVyLWJ1dHRvbi1iYXIsLm1vbnN0ZXItYnV0dG9uLWdyb3Vwe2FsaWduLWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOnN0cmV0Y2g7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LXdyYXA6bm93cmFwO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5tb25zdGVyLWJ1dHRvbi1ncm91cHtib3gtc2l6aW5nOmJvcmRlci1ib3g7Z2FwOjA7bWFyZ2luOjFyZW0gMH0ubW9uc3Rlci1idXR0b24tZ3JvdXA+Om5vdCg6bGFzdC1jaGlsZCl7bWFyZ2luLXJpZ2h0OmNhbGModmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpKi0xKX0ubW9uc3Rlci1idXR0b24tZ3JvdXAgOmhvdmVye2JveC1zaGFkb3c6bm9uZX1idXR0b246Zm9jdXN7b3V0bGluZToxcHggZGFzaGVkIHZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQpO291dGxpbmUtb2Zmc2V0OjJweDt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lKX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmxpZ2h0KXtidXR0b246Zm9jdXN7b3V0bGluZToxcHggZGFzaGVkIHZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTMpO291dGxpbmUtb2Zmc2V0OjJweDt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lKX19W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdXRsaW5lOm5vbmU7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0uZmxleHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd306aG9zdHtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpibG9ja306YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItZm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsXFxcIlF1aWNrc2FuZFxcXCIsXFxcIlNlZ29lIFVJXFxcIixcXFwiUm9ib3RvXFxcIixcXFwiT3h5Z2VuXFxcIixcXFwiVWJ1bnR1XFxcIixcXFwiQ2FudGFyZWxsXFxcIixcXFwiRmlyYSBTYW5zXFxcIixcXFwiRHJvaWQgU2Fuc1xcXCIsXFxcIkhlbHZldGljYSBOZXVlXFxcIixBcmlhbCxzYW5zLXNlcmlmLFxcXCJBcHBsZSBDb2xvciBFbW9qaVxcXCIsXFxcIlNlZ29lIFVJIEVtb2ppXFxcIixcXFwiU2Vnb2UgVUkgU3ltYm9sXFxcIjstLW1vbnN0ZXItZm9udC1mYW1pbHktbW9ub3NwYWNlOlxcXCJDb25zb2xhc1xcXCIsXFxcIkNvdXJpZXIgTmV3XFxcIixcXFwiUm9ib3RvIE1vbm9cXFwiLFxcXCJTb3VyY2UgQ29kZSBQcm9cXFwiLFxcXCJGaXJhIE1vbm9cXFwiLG1vbm9zcGFjZTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMSk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTYpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0yKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNil9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTYpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0yKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNCk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTYpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMyk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi01KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMik7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTQpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0zKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTQpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNik7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMik7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS01KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTQpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS01KTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMyl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNil9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy02KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNil9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTE6IzgzM2FiNDstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMjojZmQxZDFkOy0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0zOiNmY2IwNDU7LS1tb25zdGVyLWJveC1zaGFkb3ctMTpub25lOy0tbW9uc3Rlci1ib3gtc2hhZG93LTI6LTFweCAxcHggMTBweCAxcHggaHNsYSgwLDAlLDc2JSwuNjEpOy0tbW9uc3Rlci10ZXh0LXNoYWRvdzpub25lOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtMSk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC02KTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTYpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWhvdmVyLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtMik7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXdpZHRoOjJweDstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItc3R5bGU6c29saWQ7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXJhZGl1czowOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNSk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWhvdmVyLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLXRoZW1lLW9uLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLXRoZW1lLW9uLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNSk7LS1tb25zdGVyLXRoZW1lLW9mZi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLW9mZi1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItdGhlbWUtb24tY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci10aGVtZS1vbi1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLW9mZi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLW9mZi1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1ib3JkZXItc3R5bGU6c29saWQ7LS1tb25zdGVyLWJvcmRlci13aWR0aDozcHg7LS1tb25zdGVyLWJvcmRlci1yYWRpdXM6MDstLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2U6LTRweDstLW1vbnN0ZXItei1pbmRleC1kZWZhdWx0OjA7LS1tb25zdGVyLXotaW5kZXgtb3V0bGluZToxMDstLW1vbnN0ZXItei1pbmRleC1kcm9wZG93bjoyMDA7LS1tb25zdGVyLXotaW5kZXgtZHJvcGRvd24tb3ZlcmxheToyMTA7LS1tb25zdGVyLXotaW5kZXgtc3RpY2t5OjMwMDstLW1vbnN0ZXItei1pbmRleC1zdGlja3ktb3ZlcmxheTozMTA7LS1tb25zdGVyLXotaW5kZXgtZml4ZWQ6NDAwOy0tbW9uc3Rlci16LWluZGV4LWZpeGVkLW92ZXJsYXk6NDEwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLWJhY2tkcm9wOjUwMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1iYWNrZHJvcC1vdmVybGF5OjUxMDstLW1vbnN0ZXItei1pbmRleC1vZmZjYW52YXM6NjAwOy0tbW9uc3Rlci16LWluZGV4LW9mZmNhbnZhcy1vdmVybGF5OjYxMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbDo3MDA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtb3ZlcmxheTo3MTA7LS1tb25zdGVyLXotaW5kZXgtcG9wb3Zlcjo4MDA7LS1tb25zdGVyLXotaW5kZXgtcG9wb3Zlci1vdmVybGF5OjgxMDstLW1vbnN0ZXItei1pbmRleC10b29sdGlwOjgwMDstLW1vbnN0ZXItei1pbmRleC10b29sdGlwLW92ZXJsYXk6OTEwOy0tbW9uc3Rlci1zcGFjZS0wOjA7LS1tb25zdGVyLXNwYWNlLTE6MnB4Oy0tbW9uc3Rlci1zcGFjZS0yOjRweDstLW1vbnN0ZXItc3BhY2UtMzo2cHg7LS1tb25zdGVyLXNwYWNlLTQ6MTBweDstLW1vbnN0ZXItc3BhY2UtNToxNnB4Oy0tbW9uc3Rlci1zcGFjZS02OjI2cHg7LS1tb25zdGVyLXNwYWNlLTc6NDJweDstLW1vbnN0ZXItYnJlYWtwb2ludC0wOjQ4MHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTQ6NDgwcHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtNzo3NjhweDstLW1vbnN0ZXItYnJlYWtwb2ludC05Ojk5MnB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTEyOjEyMDBweDstLW1vbnN0ZXItZHJhZ2dlci13aWR0aDoycHg7LS1tb25zdGVyLWRyYWdnZXItaGFuZGxlLXdpZHRoOjRweDstLW1vbnN0ZXItZHJhZ2dlci1oYW5kbGUtaGVpZ2h0OjUwcHh9c3Bhbi5tb25zdGVyLWZ4LXJpcHBsZXthbmltYXRpb246bW9uc3Rlci1meC1yaXBwbGUgLjZzIGxpbmVhcjtiYWNrZ3JvdW5kLWNvbG9yOmhzbGEoMCwwJSwxMDAlLC43KTtib3JkZXItcmFkaXVzOjUwJTtwb3NpdGlvbjphYnNvbHV0ZTt0cmFuc2Zvcm06c2NhbGUoMCl9QGtleWZyYW1lcyBtb25zdGVyLWZ4LXJpcHBsZXt0b3tvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKDQpfX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17ZmxleC1kaXJlY3Rpb246Y29sdW1ufSBcbn1gLFxuXHRcdDAsXG5cdCk7XG59IGNhdGNoIChlKSB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcihcImh0bWxcIiksXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRlICsgXCJcIixcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBBVFRSSUJVVEVfUFJFRklYIH0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbi8qKlxuICogVGhpcyBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1idXR0b24tbGFiZWxgIGNhbiBiZSB1c2VkIHRvIHBhc3MgbGFiZWxzLlxuICpcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9CVVRUT05fTEFCRUwgPSBgJHtBVFRSSUJVVEVfUFJFRklYfWJ1dHRvbi1sYWJlbGA7XG5cbmV4cG9ydCB7IEFUVFJJQlVURV9CVVRUT05fTEFCRUwgfTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIDIwMjQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICovXG5cbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0VSUk9STUVTU0FHRSB9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBDb2xsYXBzZVN0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IENvbGxhcHNlU3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG5cdENvbGxhcHNlU3R5bGVTaGVldC5pbnNlcnRSdWxlKFxuXHRcdGBcbkBsYXllciBjb2xsYXBzZSB7IFxuOndoZXJlKGh0bWwpe2xpbmUtaGVpZ2h0OjEuMTU7LXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OjEwMCU7LW1vei10ZXh0LXNpemUtYWRqdXN0OjEwMCU7dGV4dC1zaXplLWFkanVzdDoxMDAlfTp3aGVyZShoMSl7Zm9udC1zaXplOjJlbTttYXJnaW4tYmxvY2stZW5kOi42N2VtO21hcmdpbi1ibG9jay1zdGFydDouNjdlbX06d2hlcmUoZGwsb2wsdWwpIDp3aGVyZShkbCxvbCx1bCl7bWFyZ2luLWJsb2NrLWVuZDowO21hcmdpbi1ibG9jay1zdGFydDowfTp3aGVyZShocil7Ym94LXNpemluZzpjb250ZW50LWJveDtjb2xvcjppbmhlcml0O2hlaWdodDowfTp3aGVyZShhYmJyW3RpdGxlXSl7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTstd2Via2l0LXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkfTp3aGVyZShiLHN0cm9uZyl7Zm9udC13ZWlnaHQ6Ym9sZGVyfTp3aGVyZShjb2RlLGtiZCxwcmUsc2FtcCl7Zm9udC1mYW1pbHk6bW9ub3NwYWNlLG1vbm9zcGFjZTtmb250LXNpemU6MWVtfTp3aGVyZShzbWFsbCl7Zm9udC1zaXplOjgwJX06d2hlcmUodGFibGUpe2JvcmRlci1jb2xvcjpjdXJyZW50Q29sb3I7dGV4dC1pbmRlbnQ6MH06d2hlcmUoYnV0dG9uLGlucHV0LHNlbGVjdCl7bWFyZ2luOjB9OndoZXJlKGJ1dHRvbil7dGV4dC10cmFuc2Zvcm06bm9uZX06d2hlcmUoYnV0dG9uLGlucHV0OmlzKFt0eXBlPWJ1dHRvbiBpXSxbdHlwZT1yZXNldCBpXSxbdHlwZT1zdWJtaXQgaV0pKXstd2Via2l0LWFwcGVhcmFuY2U6YnV0dG9ufTp3aGVyZShwcm9ncmVzcyl7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9OndoZXJlKHNlbGVjdCl7dGV4dC10cmFuc2Zvcm06bm9uZX06d2hlcmUodGV4dGFyZWEpe21hcmdpbjowfTp3aGVyZShpbnB1dFt0eXBlPXNlYXJjaCBpXSl7LXdlYmtpdC1hcHBlYXJhbmNlOnRleHRmaWVsZDtvdXRsaW5lLW9mZnNldDotMnB4fTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiw6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b257aGVpZ2h0OmF1dG99Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOmluaGVyaXQ7b3BhY2l0eTouNTR9Ojotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lfTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbjtmb250OmluaGVyaXR9OndoZXJlKGJ1dHRvbixpbnB1dDppcyhbdHlwZT1idXR0b24gaV0sW3R5cGU9Y29sb3IgaV0sW3R5cGU9cmVzZXQgaV0sW3R5cGU9c3VibWl0IGldKSk6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyLXN0eWxlOm5vbmU7cGFkZGluZzowfTp3aGVyZShidXR0b24saW5wdXQ6aXMoW3R5cGU9YnV0dG9uIGldLFt0eXBlPWNvbG9yIGldLFt0eXBlPXJlc2V0IGldLFt0eXBlPXN1Ym1pdCBpXSkpOjotbW96LWZvY3VzcmluZ3tvdXRsaW5lOjFweCBkb3R0ZWQgQnV0dG9uVGV4dH06d2hlcmUoOi1tb3otdWktaW52YWxpZCl7Ym94LXNoYWRvdzpub25lfTp3aGVyZShkaWFsb2cpe2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6c29saWQ7Y29sb3I6IzAwMDtoZWlnaHQ6LW1vei1maXQtY29udGVudDtoZWlnaHQ6Zml0LWNvbnRlbnQ7bGVmdDowO21hcmdpbjphdXRvO3BhZGRpbmc6MWVtO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7d2lkdGg6LW1vei1maXQtY29udGVudDt3aWR0aDpmaXQtY29udGVudH06d2hlcmUoZGlhbG9nOm5vdChbb3Blbl0pKXtkaXNwbGF5Om5vbmV9OndoZXJlKHN1bW1hcnkpe2Rpc3BsYXk6bGlzdC1pdGVtfWh0bWx7aGVpZ2h0OjEwMCV9Ym9keSxodG1se21pbi1oZWlnaHQ6Y2FsYygxMDB2aCAtIDQwcHgpfWJvZHl7Ym94LXNpemluZzpib3JkZXItYm94O21hcmdpbjowO3BhZGRpbmc6MDt3b3JkLWJyZWFrOmJyZWFrLXdvcmR9LmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmlubGluZXtkaXNwbGF5OmlubGluZX0uaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5ncmlke2Rpc3BsYXk6Z3JpZH0uaW5saW5lLWdyaWR7ZGlzcGxheTppbmxpbmUtZ3JpZH0uZmxleHtkaXNwbGF5OmZsZXh9LmlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXh9LmhpZGRlbiwuaGlkZSwubm9uZXtkaXNwbGF5Om5vbmV9LnZpc2libGV7dmlzaWJpbGl0eTp2aXNpYmxlfS5pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW59Lm1vbnN0ZXItYnV0dG9uLXByaW1hcnksYnV0dG9ue2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYnV0dG9uLXNlY29uZGFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1idXR0b24tc2Vjb25kYXJ5LC5tb25zdGVyLWJ1dHRvbi10ZXJ0aWFyeXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofS5tb25zdGVyLWJ1dHRvbi10ZXJ0aWFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci1idXR0b24tb3V0bGluZS1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXByaW1hcnksLm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtc2Vjb25kYXJ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtc2Vjb25kYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXRlcnRpYXJ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCk7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9YnV0dG9uOmFjdGl2ZSxidXR0b246aG92ZXJ7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMik7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC44cyxjb2xvciAuMjVzIC4wODMzMzMzMzMzc31idXR0b246YWN0aXZle3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW91dGxpbmUpfS5tb25zdGVyLWJ1dHRvbi1iYXIsLm1vbnN0ZXItYnV0dG9uLWdyb3Vwe2FsaWduLWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOnN0cmV0Y2g7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LXdyYXA6bm93cmFwO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5tb25zdGVyLWJ1dHRvbi1ncm91cHtib3gtc2l6aW5nOmJvcmRlci1ib3g7Z2FwOjA7bWFyZ2luOjFyZW0gMH0ubW9uc3Rlci1idXR0b24tZ3JvdXA+Om5vdCg6bGFzdC1jaGlsZCl7bWFyZ2luLXJpZ2h0OmNhbGModmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpKi0xKX0ubW9uc3Rlci1idXR0b24tZ3JvdXAgOmhvdmVye2JveC1zaGFkb3c6bm9uZX1idXR0b246Zm9jdXN7b3V0bGluZToxcHggZGFzaGVkIHZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQpO291dGxpbmUtb2Zmc2V0OjJweDt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lKX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmxpZ2h0KXtidXR0b246Zm9jdXN7b3V0bGluZToxcHggZGFzaGVkIHZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTMpO291dGxpbmUtb2Zmc2V0OjJweDt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lKX19W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdXRsaW5lOm5vbmU7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0uZmxleHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd306aG9zdHtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpibG9ja306YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItZm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsXFxcIlF1aWNrc2FuZFxcXCIsXFxcIlNlZ29lIFVJXFxcIixcXFwiUm9ib3RvXFxcIixcXFwiT3h5Z2VuXFxcIixcXFwiVWJ1bnR1XFxcIixcXFwiQ2FudGFyZWxsXFxcIixcXFwiRmlyYSBTYW5zXFxcIixcXFwiRHJvaWQgU2Fuc1xcXCIsXFxcIkhlbHZldGljYSBOZXVlXFxcIixBcmlhbCxzYW5zLXNlcmlmLFxcXCJBcHBsZSBDb2xvciBFbW9qaVxcXCIsXFxcIlNlZ29lIFVJIEVtb2ppXFxcIixcXFwiU2Vnb2UgVUkgU3ltYm9sXFxcIjstLW1vbnN0ZXItZm9udC1mYW1pbHktbW9ub3NwYWNlOlxcXCJDb25zb2xhc1xcXCIsXFxcIkNvdXJpZXIgTmV3XFxcIixcXFwiUm9ib3RvIE1vbm9cXFwiLFxcXCJTb3VyY2UgQ29kZSBQcm9cXFwiLFxcXCJGaXJhIE1vbm9cXFwiLG1vbm9zcGFjZTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMSk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTYpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0yKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNil9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTYpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0yKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNCk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTYpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMyk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi01KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMik7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTQpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0zKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTQpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNik7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMik7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS01KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTQpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS01KTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMyl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNil9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy02KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNil9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTE6IzgzM2FiNDstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMjojZmQxZDFkOy0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0zOiNmY2IwNDU7LS1tb25zdGVyLWJveC1zaGFkb3ctMTpub25lOy0tbW9uc3Rlci1ib3gtc2hhZG93LTI6LTFweCAxcHggMTBweCAxcHggaHNsYSgwLDAlLDc2JSwuNjEpOy0tbW9uc3Rlci10ZXh0LXNoYWRvdzpub25lOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtMSk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC02KTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTYpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWhvdmVyLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtMik7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXdpZHRoOjJweDstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItc3R5bGU6c29saWQ7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXJhZGl1czowOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNSk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWhvdmVyLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLXRoZW1lLW9uLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLXRoZW1lLW9uLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNSk7LS1tb25zdGVyLXRoZW1lLW9mZi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLW9mZi1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItdGhlbWUtb24tY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci10aGVtZS1vbi1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLW9mZi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLW9mZi1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1ib3JkZXItc3R5bGU6c29saWQ7LS1tb25zdGVyLWJvcmRlci13aWR0aDozcHg7LS1tb25zdGVyLWJvcmRlci1yYWRpdXM6MDstLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2U6LTRweDstLW1vbnN0ZXItei1pbmRleC1kZWZhdWx0OjA7LS1tb25zdGVyLXotaW5kZXgtb3V0bGluZToxMDstLW1vbnN0ZXItei1pbmRleC1kcm9wZG93bjoyMDA7LS1tb25zdGVyLXotaW5kZXgtZHJvcGRvd24tb3ZlcmxheToyMTA7LS1tb25zdGVyLXotaW5kZXgtc3RpY2t5OjMwMDstLW1vbnN0ZXItei1pbmRleC1zdGlja3ktb3ZlcmxheTozMTA7LS1tb25zdGVyLXotaW5kZXgtZml4ZWQ6NDAwOy0tbW9uc3Rlci16LWluZGV4LWZpeGVkLW92ZXJsYXk6NDEwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLWJhY2tkcm9wOjUwMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1iYWNrZHJvcC1vdmVybGF5OjUxMDstLW1vbnN0ZXItei1pbmRleC1vZmZjYW52YXM6NjAwOy0tbW9uc3Rlci16LWluZGV4LW9mZmNhbnZhcy1vdmVybGF5OjYxMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbDo3MDA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtb3ZlcmxheTo3MTA7LS1tb25zdGVyLXotaW5kZXgtcG9wb3Zlcjo4MDA7LS1tb25zdGVyLXotaW5kZXgtcG9wb3Zlci1vdmVybGF5OjgxMDstLW1vbnN0ZXItei1pbmRleC10b29sdGlwOjgwMDstLW1vbnN0ZXItei1pbmRleC10b29sdGlwLW92ZXJsYXk6OTEwOy0tbW9uc3Rlci1zcGFjZS0wOjA7LS1tb25zdGVyLXNwYWNlLTE6MnB4Oy0tbW9uc3Rlci1zcGFjZS0yOjRweDstLW1vbnN0ZXItc3BhY2UtMzo2cHg7LS1tb25zdGVyLXNwYWNlLTQ6MTBweDstLW1vbnN0ZXItc3BhY2UtNToxNnB4Oy0tbW9uc3Rlci1zcGFjZS02OjI2cHg7LS1tb25zdGVyLXNwYWNlLTc6NDJweDstLW1vbnN0ZXItYnJlYWtwb2ludC0wOjQ4MHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTQ6NDgwcHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtNzo3NjhweDstLW1vbnN0ZXItYnJlYWtwb2ludC05Ojk5MnB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTEyOjEyMDBweDstLW1vbnN0ZXItZHJhZ2dlci13aWR0aDoycHg7LS1tb25zdGVyLWRyYWdnZXItaGFuZGxlLXdpZHRoOjRweDstLW1vbnN0ZXItZHJhZ2dlci1oYW5kbGUtaGVpZ2h0OjUwcHh9c3Bhbi5tb25zdGVyLWZ4LXJpcHBsZXthbmltYXRpb246bW9uc3Rlci1meC1yaXBwbGUgLjZzIGxpbmVhcjtiYWNrZ3JvdW5kLWNvbG9yOmhzbGEoMCwwJSwxMDAlLC43KTtib3JkZXItcmFkaXVzOjUwJTtwb3NpdGlvbjphYnNvbHV0ZTt0cmFuc2Zvcm06c2NhbGUoMCl9QGtleWZyYW1lcyBtb25zdGVyLWZ4LXJpcHBsZXt0b3tvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKDQpfX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNn0ub3ZlcmZsb3ctaGlkZGVuW2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde292ZXJmbG93OmhpZGRlbn1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gYnV0dG9ue2JvcmRlci1sZWZ0OjA7Ym9yZGVyLXJpZ2h0OjA7Ym9yZGVyLXRvcDowfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSAuYnV0dG9uOmhvdmVye2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTIpO3RyYW5zaXRpb246YmFja2dyb3VuZCAuOHMsY29sb3IgLjI1cyAuMDgzMzMzMzMzM3N9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIFtkYXRhLW1vbnN0ZXItcm9sZT1kZXRhaWxde2JveC1zaXppbmc6Ym9yZGVyLWJveDtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7aGVpZ2h0OjA7bGluZS1oZWlnaHQ6MS42O3RyYW5zaXRpb246aGVpZ2h0IC40cyBlYXNlLWluLW91dDt3aWR0aDoxMDAlfTppcyhbZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gW2RhdGEtbW9uc3Rlci1yb2xlPWRldGFpbF0pIC5wYWRkaW5ne3BhZGRpbmc6MXJlbX06aXMoW2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIFtkYXRhLW1vbnN0ZXItcm9sZT1kZXRhaWxdKSAuZGVjby1saW5le2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMSkgMCx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTIpIDUwJSx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTMpIDEwMCUpO2JvcmRlcjowO2hlaWdodDoycHg7bWFyZ2luOjA7cGFkZGluZzowfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmlzKFtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSBbZGF0YS1tb25zdGVyLXJvbGU9ZGV0YWlsXSkgLmRlY28tbGluZXtiYWNrZ3JvdW5kOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX19OmlzKFtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSBbZGF0YS1tb25zdGVyLXJvbGU9ZGV0YWlsXSkgLmRlY28tbGluZXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjRzIGVhc2UtaW4tb3V0fVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSAuYWN0aXZlW2RhdGEtbW9uc3Rlci1yb2xlPWRldGFpbF17aGVpZ2h0OnZhcigtLW1vbnN0ZXItaGVpZ2h0KTt0cmFuc2l0aW9uOmhlaWdodCAuNHMgZWFzZS1pbi1vdXR9IFxufWAsXG5cdFx0MCxcblx0KTtcbn0gY2F0Y2ggKGUpIHtcblx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0ZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKSxcblx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdGUgKyBcIlwiLFxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRDdXN0b21FbGVtZW50LFxuXHRnZXRTbG90dGVkRWxlbWVudHMsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHsgQ29sbGFwc2VTdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9jb2xsYXBzZS5tanNcIjtcbmltcG9ydCB7IGZpcmVDdXN0b21FdmVudCB9IGZyb20gXCIuLi8uLi9kb20vZXZlbnRzLm1qc1wiO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnQgfSBmcm9tIFwiLi4vLi4vZG9tL3V0aWwubWpzXCI7XG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IEhvc3QgfSBmcm9tIFwiLi4vaG9zdC9ob3N0Lm1qc1wiO1xuaW1wb3J0IHsgZ2VuZXJhdGVVbmlxdWVDb25maWdLZXkgfSBmcm9tIFwiLi4vaG9zdC91dGlsLm1qc1wiO1xuaW1wb3J0IHsgRGVhZE1hbnNTd2l0Y2ggfSBmcm9tIFwiLi4vLi4vdXRpbC9kZWFkbWFuc3N3aXRjaC5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgQ29sbGFwc2UsIG5hbWVTeW1ib2wgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgdGltZXJDYWxsYmFja1N5bWJvbCA9IFN5bWJvbChcInRpbWVyQ2FsbGJhY2tcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGRldGFpbHNFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiZGV0YWlsc0VsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNvbnRyb2xFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiY29udHJvbEVsZW1lbnRcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcmVzaXplT2JzZXJ2ZXJTeW1ib2wgPSBTeW1ib2woXCJyZXNpemVPYnNlcnZlclwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgZGV0YWlsc1Nsb3RFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiZGV0YWlsc1Nsb3RFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBkZXRhaWxzQ29udGFpbmVyRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImRldGFpbHNDb250YWluZXJFbGVtZW50XCIpO1xuLyoqXG5cbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBkZXRhaWxzRGVjb0VsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJkZXRhaWxzRGVjb0VsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IG5hbWVTeW1ib2wgPSBTeW1ib2woXCJuYW1lXCIpO1xuXG4vKipcbiAqIEEgQ29sbGFwc2UgY29tcG9uZW50XG4gKlxuICogQGZyYWdtZW50cyAvZnJhZ21lbnRzL2NvbXBvbmVudHMvbGF5b3V0L2NvbGxhcHNlL1xuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2xheW91dC9jb2xsYXBzZS1zaW1wbGVcbiAqXG4gKiBAc2luY2UgMy43NC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgIEEgc2ltcGxlIGNvbGxhcHNlIGNvbXBvbmVudC5cbiAqL1xuY2xhc3MgQ29sbGFwc2UgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2NvbXBvbmVudHMvbGF5b3V0L2NvbGxhcHNlQEBpbnN0YW5jZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHQvLyB0aGUgbmFtZSBpcyBvbmx5IHVzZWQgZm9yIHRoZSBob3N0IGNvbmZpZyBhbmQgdGhlIGV2ZW50IG5hbWVcblx0XHR0aGlzW25hbWVTeW1ib2xdID0gXCJjb2xsYXBzZVwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIEhUTUwgdGFnLCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gY2xhc3NlcyBDU1MgY2xhc3Nlc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gY2xhc3Nlcy5jb250YWluZXIgQ1NTIGNsYXNzIGZvciB0aGUgY29udGFpbmVyXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmZWF0dXJlcyBGZWF0dXJlIGNvbmZpZ3VyYXRpb25cblx0ICogQHByb3BlcnR5IHtib29sZWFufSBmZWF0dXJlcy5hY2NvcmRpb24gRW5hYmxlIGFjY29yZGlvbiBtb2RlXG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZmVhdHVyZXMucGVyc2lzdFN0YXRlIEVuYWJsZSBwZXJzaXN0IHN0YXRlIChIb3N0IGFuZCBDb25maWctTWFuYWdlciByZXF1aXJlZClcblx0ICogQHByb3BlcnR5IHtib29sZWFufSBmZWF0dXJlcy51c2VTY3JvbGxWYWx1ZXMgVXNlIHNjcm9sbCB2YWx1ZXMgKHNjcm9sbEhlaWdodCkgaW5zdGVhZCBvZiBjbGllbnRIZWlnaHQgZm9yIHRoZSBoZWlnaHQgY2FsY3VsYXRpb25cblx0ICogQHByb3BlcnR5IHtib29sZWFufSBvcGVuQnlEZWZhdWx0IE9wZW4gdGhlIGRldGFpbHMgYnkgZGVmYXVsdFxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHR9LFxuXHRcdFx0Y2xhc3Nlczoge1xuXHRcdFx0XHRjb250YWluZXI6IFwicGFkZGluZ1wiLFxuXHRcdFx0fSxcblx0XHRcdGZlYXR1cmVzOiB7XG5cdFx0XHRcdGFjY29yZGlvbjogdHJ1ZSxcblx0XHRcdFx0cGVyc2lzdFN0YXRlOiB0cnVlLFxuXHRcdFx0XHR1c2VTY3JvbGxWYWx1ZXM6IGZhbHNlLFxuXHRcdFx0fSxcblx0XHRcdG9wZW5CeURlZmF1bHQ6IGZhbHNlLFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXHRcdGluaXRDb250cm9sUmVmZXJlbmNlcy5jYWxsKHRoaXMpO1xuXHRcdGluaXRTdGF0ZUZyb21Ib3N0Q29uZmlnLmNhbGwodGhpcyk7XG5cdFx0aW5pdFJlc2l6ZU9ic2VydmVyLmNhbGwodGhpcyk7XG5cdFx0aW5pdEV2ZW50SGFuZGxlci5jYWxsKHRoaXMpO1xuXG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwib3BlbkJ5RGVmYXVsdFwiKSkge1xuXHRcdFx0dGhpcy5vcGVuKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqL1xuXHRjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHRzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXHRcdHVwZGF0ZVJlc2l6ZU9ic2VydmVyT2JzZXJ2YXRpb24uY2FsbCh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKi9cblx0ZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtDb2xsYXBzZX1cblx0ICovXG5cdHRvZ2dsZSgpIHtcblx0XHRpZiAodGhpc1tkZXRhaWxzRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmNvbnRhaW5zKFwiYWN0aXZlXCIpKSB7XG5cdFx0XHR0aGlzLmNsb3NlKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMub3BlbigpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0aXNDbG9zZWQoKSB7XG5cdFx0cmV0dXJuICF0aGlzW2RldGFpbHNFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuY29udGFpbnMoXCJhY3RpdmVcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGlzT3BlbigpIHtcblx0XHRyZXR1cm4gIXRoaXMuaXNDbG9zZWQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBPcGVuIHRoZSBjb2xsYXBzZVxuXHQgKiBAcmV0dXJuIHtDb2xsYXBzZX1cblx0ICogQGZpcmVzIG1vbnN0ZXItY29sbGFwc2UtYmVmb3JlLW9wZW4gVGhpcyBldmVudCBpcyBmaXJlZCBiZWZvcmUgdGhlIGNvbGxhcHNlIGlzIG9wZW5lZC5cblx0ICogQGZpcmVzIG1vbnN0ZXItY29sbGFwc2Utb3BlbiBUaGlzIGV2ZW50IGlzIGZpcmVkIGFmdGVyIHRoZSBjb2xsYXBzZSBpcyBvcGVuZWQuXG5cdCAqL1xuXHRvcGVuKCkge1xuXHRcdGxldCBub2RlO1xuXHRcdGlmICh0aGlzW2RldGFpbHNFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuY29udGFpbnMoXCJhY3RpdmVcIikpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItXCIgKyB0aGlzW25hbWVTeW1ib2xdICsgXCItYmVmb3JlLW9wZW5cIiwge30pO1xuXG5cdFx0YWRqdXN0SGVpZ2h0LmNhbGwodGhpcyk7XG5cdFx0dGhpc1tkZXRhaWxzRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKTtcblxuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLmFjY29yZGlvblwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0bm9kZSA9IHRoaXM7XG5cdFx0XHR3aGlsZSAobm9kZS5uZXh0RWxlbWVudFNpYmxpbmcgaW5zdGFuY2VvZiBDb2xsYXBzZSkge1xuXHRcdFx0XHRub2RlID0gbm9kZS5uZXh0RWxlbWVudFNpYmxpbmc7XG5cdFx0XHRcdG5vZGUuY2xvc2UoKTtcblx0XHRcdH1cblxuXHRcdFx0bm9kZSA9IHRoaXM7XG5cdFx0XHR3aGlsZSAobm9kZS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nIGluc3RhbmNlb2YgQ29sbGFwc2UpIHtcblx0XHRcdFx0bm9kZSA9IG5vZGUucHJldmlvdXNFbGVtZW50U2libGluZztcblx0XHRcdFx0bm9kZS5jbG9zZSgpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHVwZGF0ZVN0YXRlQ29uZmlnLmNhbGwodGhpcyk7XG5cdFx0XHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItXCIgKyB0aGlzW25hbWVTeW1ib2xdICsgXCItb3BlblwiLCB7fSk7XG5cdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXNbY29udHJvbEVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5yZW1vdmUoXCJvdmVyZmxvdy1oaWRkZW5cIik7XG5cdFx0XHRcdH0sIDUwMCk7XG5cdFx0XHR9LCAwKTtcblx0XHR9LCAwKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIENsb3NlIHRoZSBjb2xsYXBzZVxuXHQgKiBAcmV0dXJuIHtDb2xsYXBzZX1cblx0ICogQGZpcmVzIG1vbnN0ZXItY29sbGFwc2UtYmVmb3JlLWNsb3NlIFRoaXMgZXZlbnQgaXMgZmlyZWQgYmVmb3JlIHRoZSBjb2xsYXBzZSBpcyBjbG9zZWQuXG5cdCAqIEBmaXJlcyBtb25zdGVyLWNvbGxhcHNlLWNsb3NlZCBUaGlzIGV2ZW50IGlzIGZpcmVkIGFmdGVyIHRoZSBjb2xsYXBzZSBpcyBjbG9zZWQuXG5cdCAqL1xuXHRjbG9zZSgpIHtcblx0XHRpZiAoIXRoaXNbZGV0YWlsc0VsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5jb250YWlucyhcImFjdGl2ZVwiKSkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci1cIiArIHRoaXNbbmFtZVN5bWJvbF0gKyBcIi1iZWZvcmUtY2xvc2VcIiwge30pO1xuXHRcdHRoaXNbY29udHJvbEVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5hZGQoXCJvdmVyZmxvdy1oaWRkZW5cIik7XG5cblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdHRoaXNbZGV0YWlsc0VsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIik7XG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0dXBkYXRlU3RhdGVDb25maWcuY2FsbCh0aGlzKTtcblx0XHRcdFx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci1cIiArIHRoaXNbbmFtZVN5bWJvbF0gKyBcIi1jbG9zZWRcIiwge30pO1xuXHRcdFx0fSwgMCk7XG5cdFx0fSwgMCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItY29sbGFwc2VcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtBcnJheTxDU1NTdHlsZVNoZWV0Pn1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiBbQ29sbGFwc2VTdHlsZVNoZWV0XTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgZWxlbWVudCBpcyBpbnNlcnRlZCBpbnRvIGEgZG9jdW1lbnQsIGluY2x1ZGluZyBpbnRvIGEgc2hhZG93IHRyZWUuXG5cdCAqIEByZXR1cm4ge0NvbGxhcHNlfVxuXHQgKiBAZmlyZXMgbW9uc3Rlci1jb2xsYXBzZS1hZGp1c3QtaGVpZ2h0IFRoaXMgZXZlbnQgaXMgZmlyZWQgd2hlbiB0aGUgaGVpZ2h0IGlzIGFkanVzdGVkLiBBcyBhIGRldGFpbCwgdGhlIGhlaWdodCBpcyBwYXNzZWQuXG5cdCAqL1xuXHRhZGp1c3RIZWlnaHQoKSB7XG5cdFx0YWRqdXN0SGVpZ2h0LmNhbGwodGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gYWRqdXN0SGVpZ2h0KCkge1xuXHRsZXQgaGVpZ2h0ID0gMDtcblxuXHRpZiAodGhpc1tkZXRhaWxzQ29udGFpbmVyRWxlbWVudFN5bWJvbF0pIHtcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy51c2VTY3JvbGxWYWx1ZXNcIikpIHtcblx0XHRcdGhlaWdodCArPSB0aGlzW2RldGFpbHNDb250YWluZXJFbGVtZW50U3ltYm9sXS5zY3JvbGxIZWlnaHQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGhlaWdodCArPSB0aGlzW2RldGFpbHNDb250YWluZXJFbGVtZW50U3ltYm9sXS5jbGllbnRIZWlnaHQ7XG5cdFx0fVxuXHR9XG5cblx0aWYgKHRoaXNbZGV0YWlsc0RlY29FbGVtZW50U3ltYm9sXSkge1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLnVzZVNjcm9sbFZhbHVlc1wiKSkge1xuXHRcdFx0aGVpZ2h0ICs9IHRoaXNbZGV0YWlsc0RlY29FbGVtZW50U3ltYm9sXS5zY3JvbGxIZWlnaHQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGhlaWdodCArPSB0aGlzW2RldGFpbHNEZWNvRWxlbWVudFN5bWJvbF0uY2xpZW50SGVpZ2h0ICsgMTtcblx0XHR9XG5cdH1cblxuXHRpZiAoaGVpZ2h0ID09PSAwKSB7XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMudXNlU2Nyb2xsVmFsdWVzXCIpKSB7XG5cdFx0XHRoZWlnaHQgPSB0aGlzW2RldGFpbHNFbGVtZW50U3ltYm9sXS5zY3JvbGxIZWlnaHQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGhlaWdodCA9IHRoaXNbZGV0YWlsc0VsZW1lbnRTeW1ib2xdLmNsaWVudEhlaWdodDtcblx0XHR9XG5cblx0XHRpZiAoaGVpZ2h0ID09PSAwKSB7XG5cdFx0XHRoZWlnaHQgPSBcImF1dG9cIjtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0aGVpZ2h0ICs9IFwicHhcIjtcblx0fVxuXG5cdHRoaXNbZGV0YWlsc0VsZW1lbnRTeW1ib2xdLnN0eWxlLnNldFByb3BlcnR5KFxuXHRcdFwiLS1tb25zdGVyLWhlaWdodFwiLFxuXHRcdGhlaWdodCxcblx0XHRcImltcG9ydGFudFwiLFxuXHQpO1xuXG5cdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItXCIgKyB0aGlzW25hbWVTeW1ib2xdICsgXCItYWRqdXN0LWhlaWdodFwiLCB7XG5cdFx0aGVpZ2h0LFxuXHR9KTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlUmVzaXplT2JzZXJ2ZXJPYnNlcnZhdGlvbigpIHtcblx0dGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0uZGlzY29ubmVjdCgpO1xuXG5cdGNvbnN0IHNsb3R0ZWROb2RlcyA9IGdldFNsb3R0ZWRFbGVtZW50cy5jYWxsKHRoaXMpO1xuXHRzbG90dGVkTm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuXHRcdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdLm9ic2VydmUobm9kZSk7XG5cdH0pO1xuXG5cdGlmICh0aGlzW2RldGFpbHNDb250YWluZXJFbGVtZW50U3ltYm9sXSkge1xuXHRcdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdLm9ic2VydmUodGhpc1tkZXRhaWxzQ29udGFpbmVyRWxlbWVudFN5bWJvbF0pO1xuXHR9XG5cblx0dGhpcy5hZGp1c3RIZWlnaHQoKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpbml0RXZlbnRIYW5kbGVyKCkge1xuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHRpbml0U2xvdENoYW5nZWRIYW5kbGVyLmNhbGwodGhpcyk7XG5cdHJldHVybiB0aGlzO1xufVxuXG5mdW5jdGlvbiBpbml0U2xvdENoYW5nZWRIYW5kbGVyKCkge1xuXHR0aGlzW2RldGFpbHNTbG90RWxlbWVudFN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcInNsb3RjaGFuZ2VcIiwgKCkgPT4ge1xuXHRcdHVwZGF0ZVJlc2l6ZU9ic2VydmVyT2JzZXJ2YXRpb24uY2FsbCh0aGlzKTtcblx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1NlbGVjdH1cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGluaXRDb250cm9sUmVmZXJlbmNlcygpIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0dGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRcIltkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXVwiLFxuXHQpO1xuXHR0aGlzW2RldGFpbHNFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdFwiW2RhdGEtbW9uc3Rlci1yb2xlPWRldGFpbF1cIixcblx0KTtcblx0dGhpc1tkZXRhaWxzU2xvdEVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXCJzbG90XCIpO1xuXHR0aGlzW2RldGFpbHNDb250YWluZXJFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdFwiW2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRhaW5lcl1cIixcblx0KTtcblx0dGhpc1tkZXRhaWxzRGVjb0VsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XCJbZGF0YS1tb25zdGVyLXJvbGU9ZGVjb11cIixcblx0KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRDb25maWdLZXkoKSB7XG5cdHJldHVybiBnZW5lcmF0ZVVuaXF1ZUNvbmZpZ0tleSh0aGlzW25hbWVTeW1ib2xdLCB0aGlzLmlkLCBcInN0YXRlXCIpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZVN0YXRlQ29uZmlnKCkge1xuXHRpZiAoIXRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMucGVyc2lzdFN0YXRlXCIpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKCF0aGlzW2RldGFpbHNFbGVtZW50U3ltYm9sXSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGNvbnN0IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcblx0Y29uc3QgaG9zdCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJtb25zdGVyLWhvc3RcIik7XG5cdGlmICghKGhvc3QgJiYgdGhpcy5pZCkpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRjb25zdCBjb25maWdLZXkgPSBnZXRDb25maWdLZXkuY2FsbCh0aGlzKTtcblxuXHR0cnkge1xuXHRcdGhvc3Quc2V0Q29uZmlnKGNvbmZpZ0tleSwgdGhpcy5pc09wZW4oKSk7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgU3RyaW5nKGVycm9yKSk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7UHJvbWlzZX1cbiAqL1xuZnVuY3Rpb24gaW5pdFN0YXRlRnJvbUhvc3RDb25maWcoKSB7XG5cdGlmICghdGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5wZXJzaXN0U3RhdGVcIikpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcblx0fVxuXG5cdGNvbnN0IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcblx0Y29uc3QgaG9zdCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJtb25zdGVyLWhvc3RcIik7XG5cblx0aWYgKCEoaG9zdCAmJiB0aGlzLmlkKSkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuXHR9XG5cblx0Y29uc3QgY29uZmlnS2V5ID0gZ2V0Q29uZmlnS2V5LmNhbGwodGhpcyk7XG5cdHJldHVybiBob3N0XG5cdFx0LmdldENvbmZpZyhjb25maWdLZXkpXG5cdFx0LnRoZW4oKHN0YXRlKSA9PiB7XG5cdFx0XHRpZiAoc3RhdGUgPT09IHRydWUpIHtcblx0XHRcdFx0dGhpcy5vcGVuKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLmNsb3NlKCk7XG5cdFx0XHR9XG5cdFx0fSlcblx0XHQuY2F0Y2goKGVycm9yKSA9PiB7XG5cdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlcnJvci50b1N0cmluZygpKTtcblx0XHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpbml0UmVzaXplT2JzZXJ2ZXIoKSB7XG5cdC8vIGFnYWluc3QgZmxpY2tlcmluZ1xuXHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXSA9IG5ldyBSZXNpemVPYnNlcnZlcigoZW50cmllcykgPT4ge1xuXHRcdGlmICh0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdIGluc3RhbmNlb2YgRGVhZE1hbnNTd2l0Y2gpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF0udG91Y2goKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRkZWxldGUgdGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdID0gbmV3IERlYWRNYW5zU3dpdGNoKDIwMCwgKCkgPT4ge1xuXHRcdFx0Y2hlY2tBbmRSZWFycmFuZ2VDb250ZW50LmNhbGwodGhpcyk7XG5cdFx0fSk7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBjaGVja0FuZFJlYXJyYW5nZUNvbnRlbnQoKSB7XG5cdHRoaXMuYWRqdXN0SGVpZ2h0KCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiIGNsYXNzPVwib3ZlcmZsb3ctaGlkZGVuXCI+XG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiZGV0YWlsXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNsYXNzIHBhdGg6Y2xhc3Nlcy5jb250YWluZXJcIiBwYXJ0PVwiY29udGFpbmVyXCJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzbG90Pjwvc2xvdD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVjby1saW5lXCIgZGF0YS1tb25zdGVyLXJvbGU9XCJkZWNvXCIgcGFydD1cImRlY29cIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5gO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoQ29sbGFwc2UpO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IERldGFpbHNTdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9kZXRhaWxzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0JVVFRPTl9MQUJFTCB9IGZyb20gXCIuLi9ob3N0L2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgZ2VuZXJhdGVVbmlxdWVDb25maWdLZXkgfSBmcm9tIFwiLi4vaG9zdC91dGlsLm1qc1wiO1xuaW1wb3J0IHsgQ29sbGFwc2UsIG5hbWVTeW1ib2wgfSBmcm9tIFwiLi9jb2xsYXBzZS5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgRGV0YWlscyB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBidXR0b25FbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiYnV0dG9uRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgYnV0dG9uRXZlbnRIYW5kbGVyU3ltYm9sID0gU3ltYm9sKFwiYnV0dG9uRXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIEEgRGV0YWlscyBjb21wb25lbnRcbiAqXG4gKiBAZnJhZ21lbnRzIC9mcmFnbWVudHMvY29tcG9uZW50cy9sYXlvdXQvZGV0YWlscy9cbiAqXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9sYXlvdXQvZGV0YWlscy1zaW1wbGVcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2xheW91dC9kZXRhaWxzLXdpdGgtbGFiZWxcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2xheW91dC9kZXRhaWxzLWFzLWFjY29yZGlvblxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvbGF5b3V0L2RldGFpbHMtd2l0aC15b3VyLW93bi1kZXNpZ25cbiAqXG4gKiBAc2luY2UgMy43NC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBzaW1wbGUgYnV0IGNvb2wgZGV0YWlsIGNvbXBvbmVudC4gVGhpcyBpcyBiYXNlZCBvbiB0aGUgY29sbGFwc2UgY29tcG9uZW50IGFuZCBleHRlbmRzIGl0IHdpdGggYSBidXR0b24uXG4gKiBAc3VtbWFyeSBZb3UgY2FuIGFsc28gZWFzaWx5IGJ1aWxkIGFuIGFjY29yZGlvbiBmcm9tIHRoZSBjb21wb25lbnQuXG4gKi9cbmNsYXNzIERldGFpbHMgZXh0ZW5kcyBDb2xsYXBzZSB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2xheW91dC9kZXRhaWxzQEBpbnN0YW5jZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHQvLyB0aGUgbmFtZSBpcyBvbmx5IHVzZWQgZm9yIHRoZSBob3N0IGNvbmZpZyBhbmQgdGhlIGV2ZW50IG5hbWVcblx0XHR0aGlzW25hbWVTeW1ib2xdID0gXCJkZXRhaWxzXCI7XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgSFRNTCBUYWcsIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1vcHRpb25zYCBtdXN0IGJlIHVzZWQuXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZy9lbi9kb2MvI2NvbmZpZ3VyYXRlLWEtbW9uc3Rlci1jb250cm9sfVxuXHQgKlxuXHQgKiBUaGUgaW5kaXZpZHVhbCBjb25maWd1cmF0aW9uIHZhbHVlcyBjYW4gYmUgZm91bmQgaW4gdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIFRlbXBsYXRlIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbiBNYWluIHRlbXBsYXRlXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBidXR0b24gQnV0dG9uIGNvbmZpZ3VyYXRpb25cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGJ1dHRvbi5sYWJlbCBCdXR0b24gbGFiZWxcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0fSxcblx0XHRcdGxhYmVsczoge1xuXHRcdFx0XHRidXR0b246IFwiRGV0YWlsc1wiLFxuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblxuXHRcdGluaXRCdXR0b25MYWJlbC5jYWxsKHRoaXMpO1xuXHRcdGluaXRDb250cm9sUmVmZXJlbmNlcy5jYWxsKHRoaXMpO1xuXHRcdGluaXRFdmVudEhhbmRsZXIuY2FsbCh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKi9cblx0Y29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuXHRcdGNvbnN0IGNvbnRhaW5Eb2N1bWVudCA9IHRoaXMuc2hhZG93Um9vdDtcblxuXHRcdGlmIChjb250YWluRG9jdW1lbnQgIT09IG51bGwpIHtcblx0XHRcdGNvbnN0IHByZXZpb3VzRWxlbWVudCA9IHRoaXMucHJldmlvdXNFbGVtZW50U2libGluZztcblx0XHRcdGlmIChwcmV2aW91c0VsZW1lbnQgJiYgcHJldmlvdXNFbGVtZW50LnRhZ05hbWUgPT09IFwiTU9OU1RFUi1ERVRBSUxTXCIpIHtcblx0XHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5zdHlsZS5ib3JkZXJUb3AgPSBcIjBcIjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLWRldGFpbHNcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtBcnJheTxDU1NTdHlsZVNoZWV0Pn1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdGNvbnN0IGNzcyA9IHN1cGVyLmdldENTU1N0eWxlU2hlZXQoKTtcblx0XHRjc3MucHVzaChEZXRhaWxzU3R5bGVTaGVldCk7XG5cdFx0cmV0dXJuIGNzcztcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtTZWxlY3R9XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRcIltkYXRhLW1vbnN0ZXItcm9sZT1idXR0b25dXCIsXG5cdCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50SGFuZGxlcigpIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0dGhpc1tidXR0b25FdmVudEhhbmRsZXJTeW1ib2xdID0gKGV2ZW50KSA9PiB7XG5cdFx0dGhpcy50b2dnbGUoKTtcblx0fTtcblxuXHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXG5cdFx0XCJjbGlja1wiLFxuXHRcdHRoaXNbYnV0dG9uRXZlbnRIYW5kbGVyU3ltYm9sXSxcblx0KTtcblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBpbml0QnV0dG9uTGFiZWwoKSB7XG5cdGxldCBsYWJlbDtcblx0Y29uc3Qgc2V0TGFiZWwgPSBmYWxzZTtcblx0aWYgKHRoaXMuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9CVVRUT05fTEFCRUwpKSB7XG5cdFx0bGFiZWwgPSB0aGlzLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfQlVUVE9OX0xBQkVMKTtcblx0fSBlbHNlIHtcblx0XHRsYWJlbCA9IHRoaXMuZ2V0T3B0aW9uKFwibGFiZWxzLmJ1dHRvblwiLCBcIkRldGFpbHNcIik7XG5cdH1cblxuXHRpZiAoIWlzU3RyaW5nKGxhYmVsKSkge1xuXHRcdGxhYmVsID0gXCJcIjtcblx0fVxuXG5cdGlmIChsYWJlbCA9PT0gXCJcIikge1xuXHRcdGxhYmVsID0gdGhpcy5pbm5lclRleHQ7XG5cdH1cblxuXHRsYWJlbCA9IGxhYmVsLnRyaW0oKTtcblxuXHRpZiAobGFiZWwgPT09IFwiXCIpIHtcblx0XHRsYWJlbCA9IHRoaXMuZ2V0T3B0aW9uKFwibGFiZWxzLmJ1dHRvblwiLCBcIkRldGFpbHNcIik7XG5cdH1cblxuXHRpZiAobGFiZWwubGVuZ3RoID4gMTAwKSB7XG5cdFx0bGFiZWwgPSBgJHtsYWJlbC5zdWJzdHJpbmcoMCwgOTkpfVx1MjAyNmA7XG5cdH1cblxuXHR0aGlzLnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfQlVUVE9OX0xBQkVMLCBsYWJlbCk7XG5cdHRoaXMuc2V0T3B0aW9uKFwibGFiZWxzLmJ1dHRvblwiLCBsYWJlbCk7XG5cblx0cmV0dXJuIGxhYmVsO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldENvbmZpZ0tleSgpIHtcblx0cmV0dXJuIGdlbmVyYXRlVW5pcXVlQ29uZmlnS2V5KFwiZGV0YWlsc1wiLCB0aGlzLmlkLCBcInN0YXRlXCIpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250cm9sXCIgcGFydD1cImNvbnRyb2xcIiBjbGFzcz1cIm92ZXJmbG93LWhpZGRlblwiPlxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInN1bW1hcnlcIiBwYXJ0PVwic3VtbWFyeVwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gcGFydD1cImJ1dHRvblwiIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2xhc3MgcGF0aDpjbGFzc2VzLmJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6bGFiZWxzLmJ1dHRvbiB8IGRlZmF1bHQ6Y2xpY2sgbWVcIj5jbGljayBtZVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiZGV0YWlsXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNsYXNzIHBhdGg6Y2xhc3Nlcy5jb250YWluZXJcIiBwYXJ0PVwiY29udGFpbmVyXCJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzbG90IHBhcnQ9XCJzbG90XCI+PC9zbG90PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgcGFydD1cImRlY28tbGluZVwiIGNsYXNzPVwiZGVjby1saW5lXCIgZGF0YS1tb25zdGVyLXJvbGU9XCJkZWNvXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+YDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KERldGFpbHMpO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IERldGFpbHMgYXMgTmV3RGV0YWlscyB9IGZyb20gXCIuLi9sYXlvdXQvZGV0YWlscy5tanNcIjtcbmV4cG9ydCB7IERldGFpbHMgfTtcblxuLyoqXG4gKiBAc2luY2UgMS4xMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQGRlcHJlY2F0ZWQgc2luY2UgMy42NC4wIHVzZSB7QGxpbmsgTW9uc3Rlci5Db21wb25lbnRzLkxheW91dC5EZXRhaWxzfVxuICovXG5jbGFzcyBEZXRhaWxzIGV4dGVuZHMgTmV3RGV0YWlscyB7fVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IHJhbmRvbSB9IGZyb20gXCIuLi9tYXRoL3JhbmRvbS5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbCB9IGZyb20gXCIuL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IElEIH0gZnJvbSBcIi4vaWQubWpzXCI7XG5cbmV4cG9ydCB7IFJhbmRvbUlEIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cbmxldCBpbnRlcm5hbENvdW50ZXIgPSAwO1xuXG4vKipcbiAqIFRoZSBgUmFuZG9tSURgIGNsYXNzIHByb3ZpZGVzIGEgdW5pcXVlIElEIGZvciBhbiBpdGVtLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgY2xhc3MgdG8gZ2VuZXJhdGUgcmFuZG9tIG51bWJlcnNcbiAqL1xuY2xhc3MgUmFuZG9tSUQgZXh0ZW5kcyBJRCB7XG5cdC8qKlxuXHQgKiBjcmVhdGUgbmV3IG9iamVjdFxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGludGVybmFsQ291bnRlciArPSAxO1xuXG5cdFx0dGhpcy5pZCA9XG5cdFx0XHRnZXRHbG9iYWwoKVxuXHRcdFx0XHQuYnRvYShyYW5kb20oMSwgMTAwMDApKVxuXHRcdFx0XHQucmVwbGFjZSgvPS9nLCBcIlwiKVxuXHRcdFx0XHQvKiogTm8gbnVtYmVycyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBJRCwgYmVjYXVzZSBvZiBwb3NzaWJsZSBwcm9ibGVtcyB3aXRoIERPTSAqL1xuXHRcdFx0XHQucmVwbGFjZSgvXlswLTldKy8sIFwiWFwiKSArIGludGVybmFsQ291bnRlcjtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IHJhbmRvbSB9IGZyb20gXCIuLi9tYXRoL3JhbmRvbS5tanNcIjtcbmltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSBcIi4vaXMubWpzXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZS5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbE9iamVjdCB9IGZyb20gXCIuL2dsb2JhbC5tanNcIjtcblxuZXhwb3J0IHsgVVVJRCB9O1xuXG4vKipcbiAqIFRoZSBVVUlEIGNsYXNzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGdldCBhIHVuaXF1ZSBVVUlEIGZvciBhbiBvYmplY3QuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkXG4gKi9cbmNsYXNzIFVVSUQgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0bGV0IHV1aWQgPSBjcmVhdGVXaXRoQ3J5cHRvKCk7XG5cblx0XHRpZiAodXVpZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR1dWlkID0gY3JlYXRlV2l0aFJhbmRvbSgpO1xuXHRcdH1cblxuXHRcdGlmICh1dWlkID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkXCIpO1xuXHRcdH1cblxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0ge1xuXHRcdFx0dmFsdWU6IHV1aWQsXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHR0b1N0cmluZygpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJ2YWx1ZVwiXTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd8dW5kZWZpbmVkfVxuICovXG5mdW5jdGlvbiBjcmVhdGVXaXRoUmFuZG9tKCkge1xuXHRyZXR1cm4gXCJ4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHhcIi5yZXBsYWNlKC9beHldL2csIGZ1bmN0aW9uIChjKSB7XG5cdFx0Y29uc3QgciA9IChyYW5kb20oMCwgNjUwMDApICogMTYpIHwgMDtcblx0XHRjb25zdCB2ID0gYyA9PT0gXCJ4XCIgPyByIDogKHIgJiAweDMpIHwgMHg4O1xuXHRcdHJldHVybiB2LnRvU3RyaW5nKDE2KVswXTtcblx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ3x1bmRlZmluZWR9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVdpdGhDcnlwdG8oKSB7XG5cdGNvbnN0IGNyeXB0ID0gZ2V0R2xvYmFsT2JqZWN0KFwiY3J5cHRvXCIpO1xuXHRpZiAoIWlzT2JqZWN0KGNyeXB0KSkgcmV0dXJuO1xuXHRpZiAodHlwZW9mIGNyeXB0Py5bXCJyYW5kb21VVUlEXCJdKSByZXR1cm47XG5cdHJldHVybiBjcnlwdC5yYW5kb21VVUlEKCk7XG59XG4iLCAiaWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSB7XG5cbiAgICAoZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBzYXlzd2hvID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB1YSA9IG5hdmlnYXRvci51c2VyQWdlbnQsIHRlbSxcbiAgICAgICAgICAgICAgICBNID0gdWEubWF0Y2goLyhvcGVyYXxjaHJvbWV8c2FmYXJpfGZpcmVmb3h8bXNpZXx0cmlkZW50KD89XFwvKSlcXC8/XFxzKihcXGQrKS9pKSB8fCBbXTtcbiAgICAgICAgICAgIGlmICgvdHJpZGVudC9pLnRlc3QoTVsxXSkpIHtcbiAgICAgICAgICAgICAgICB0ZW0gPSAvXFxicnZbIDpdKyhcXGQrKS9nLmV4ZWModWEpIHx8IFtdO1xuICAgICAgICAgICAgICAgIHJldHVybiAnSUUgJyArICh0ZW1bMV0gfHwgJycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKE1bMV0gPT09ICdDaHJvbWUnKSB7XG4gICAgICAgICAgICAgICAgdGVtID0gdWEubWF0Y2goL1xcYihPUFJ8RWRnZSlcXC8oXFxkKykvKTtcbiAgICAgICAgICAgICAgICBpZiAodGVtICE9IG51bGwpIHJldHVybiB0ZW0uc2xpY2UoMSkuam9pbignICcpLnJlcGxhY2UoJ09QUicsICdPcGVyYScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgTSA9IE1bMl0gPyBbTVsxXSwgTVsyXV0gOiBbbmF2aWdhdG9yLmFwcE5hbWUsIG5hdmlnYXRvci5hcHBWZXJzaW9uLCAnLT8nXTtcbiAgICAgICAgICAgIGlmICgodGVtID0gdWEubWF0Y2goL3ZlcnNpb25cXC8oXFxkKykvaSkpICE9IG51bGwpIE0uc3BsaWNlKDEsIDEsIHRlbVsxXSk7XG4gICAgICAgICAgICByZXR1cm4gTS5qb2luKCcgJyk7XG4gICAgICAgIH0pKCk7XG5cblxuICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2gxJylcbiAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgKz0gXCIgXCIgKyBzYXlzd2hvO1xuXG4gICAgfSkoKTtcblxuXG59XG4iLCAiaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0ICogYXMgY2hhaSBmcm9tICdjaGFpJztcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcbmNoYWkudXNlKGNoYWlEb20pO1xuXG5jb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcblxuXG4vLyBsYW5ndWFnZT1odG1sXG5sZXQgaHRtbDEgPSBgXG4gICAgPG1vbnN0ZXItdGFicyBpZD1cIm15dGFic1wiPlxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1idXR0b24tbGFiZWw9XCJUQUIxXCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIERhcyBpc3QgdGFiIDFcbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1idXR0b24tbGFiZWw9XCJUQUIyXCI+XG4gICAgICAgICAgICBEYXMgaXN0IHRhYiAyXG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgRGFzIGlzdCB0YWIgMyBvaG5lIGJ1dHRvblxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdj48L2Rpdj5cbiAgICA8L21vbnN0ZXItdGFicz5cbmA7XG5cbmxldCBUYWJzO1xuXG5kZXNjcmliZSgnVGFicycsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgaW1wb3J0KFwiZWxlbWVudC1pbnRlcm5hbHMtcG9seWZpbGxcIikuY2F0Y2goZSA9PiBkb25lKGUpKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgbGV0IHByb21pc2VzID0gW11cblxuICAgICAgICAgICAgaWYgKCFnbG9iYWxbJ2NyeXB0byddKSB7XG4gICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaChpbXBvcnQoXCJAcGVjdWxpYXIvd2ViY3J5cHRvXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgQ3J5cHRvID0gbVsnQ3J5cHRvJ107XG4gICAgICAgICAgICAgICAgICAgIGdsb2JhbFsnY3J5cHRvJ10gPSBuZXcgQ3J5cHRvKCk7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2xheW91dC90YWJzLm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgVGFicyA9IG1bJ1RhYnMnXTtcbiAgICAgICAgICAgIH0pKVxuXG4gICAgICAgICAgICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigoKT0+e1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSlcblxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdzaG91bGQgaGF2ZSBidXR0b25zIGFuZCB0YWJzJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcblxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFicyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteXRhYnMnKVxuICAgICAgICAgICAgICAgICAgICBleHBlY3QodGFicykuaXMuaW5zdGFuY2VvZihUYWJzKTtcblxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuYXYgPSB0YWJzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignbmF2Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBidXR0b25zID0gdGFicy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ2J1dHRvbltwYXJ0PWJ1dHRvbl0nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChidXR0b25zWzBdKS5pcy5pbnN0YW5jZW9mKEhUTUxCdXR0b25FbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChuYXYuaGFzQ2hpbGROb2RlcygpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGJ1dHRvbnMubGVuZ3RoKS50by5iZS5lcXVhbCg0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgMTAwKVxuXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0sIDApXG5cblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pOyIsICJ2YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcE5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG52YXIgX19uYW1lID0gKHRhcmdldCwgdmFsdWUpID0+IF9fZGVmUHJvcCh0YXJnZXQsIFwibmFtZVwiLCB7IHZhbHVlLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG52YXIgX19jb21tb25KUyA9IChjYiwgbW9kKSA9PiBmdW5jdGlvbiBfX3JlcXVpcmUoKSB7XG4gIHJldHVybiBtb2QgfHwgKDAsIGNiW19fZ2V0T3duUHJvcE5hbWVzKGNiKVswXV0pKChtb2QgPSB7IGV4cG9ydHM6IHt9IH0pLmV4cG9ydHMsIG1vZCksIG1vZC5leHBvcnRzO1xufTtcbnZhciBfX2V4cG9ydCA9ICh0YXJnZXQsIGFsbCkgPT4ge1xuICBmb3IgKHZhciBuYW1lIGluIGFsbClcbiAgICBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCB7IGdldDogYWxsW25hbWVdLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xufTtcblxuLy8gKGRpc2FibGVkKTp1dGlsXG52YXIgcmVxdWlyZV91dGlsID0gX19jb21tb25KUyh7XG4gIFwiKGRpc2FibGVkKTp1dGlsXCIoKSB7XG4gIH1cbn0pO1xuXG4vLyBsaWIvY2hhaS91dGlscy9pbmRleC5qc1xudmFyIHV0aWxzX2V4cG9ydHMgPSB7fTtcbl9fZXhwb3J0KHV0aWxzX2V4cG9ydHMsIHtcbiAgYWRkQ2hhaW5hYmxlTWV0aG9kOiAoKSA9PiBhZGRDaGFpbmFibGVNZXRob2QsXG4gIGFkZExlbmd0aEd1YXJkOiAoKSA9PiBhZGRMZW5ndGhHdWFyZCxcbiAgYWRkTWV0aG9kOiAoKSA9PiBhZGRNZXRob2QsXG4gIGFkZFByb3BlcnR5OiAoKSA9PiBhZGRQcm9wZXJ0eSxcbiAgY2hlY2tFcnJvcjogKCkgPT4gY2hlY2tfZXJyb3JfZXhwb3J0cyxcbiAgY29tcGFyZUJ5SW5zcGVjdDogKCkgPT4gY29tcGFyZUJ5SW5zcGVjdCxcbiAgZXFsOiAoKSA9PiBkZWVwX2VxbF9kZWZhdWx0LFxuICBleHBlY3RUeXBlczogKCkgPT4gZXhwZWN0VHlwZXMsXG4gIGZsYWc6ICgpID0+IGZsYWcsXG4gIGdldEFjdHVhbDogKCkgPT4gZ2V0QWN0dWFsLFxuICBnZXRNZXNzYWdlOiAoKSA9PiBnZXRNZXNzYWdlMixcbiAgZ2V0TmFtZTogKCkgPT4gZ2V0TmFtZSxcbiAgZ2V0T3BlcmF0b3I6ICgpID0+IGdldE9wZXJhdG9yLFxuICBnZXRPd25FbnVtZXJhYmxlUHJvcGVydGllczogKCkgPT4gZ2V0T3duRW51bWVyYWJsZVByb3BlcnRpZXMsXG4gIGdldE93bkVudW1lcmFibGVQcm9wZXJ0eVN5bWJvbHM6ICgpID0+IGdldE93bkVudW1lcmFibGVQcm9wZXJ0eVN5bWJvbHMsXG4gIGdldFBhdGhJbmZvOiAoKSA9PiBnZXRQYXRoSW5mbyxcbiAgaGFzUHJvcGVydHk6ICgpID0+IGhhc1Byb3BlcnR5LFxuICBpbnNwZWN0OiAoKSA9PiBpbnNwZWN0MixcbiAgaXNOYU46ICgpID0+IGlzTmFOMixcbiAgaXNOdW1lcmljOiAoKSA9PiBpc051bWVyaWMsXG4gIGlzUHJveHlFbmFibGVkOiAoKSA9PiBpc1Byb3h5RW5hYmxlZCxcbiAgaXNSZWdFeHA6ICgpID0+IGlzUmVnRXhwMixcbiAgb2JqRGlzcGxheTogKCkgPT4gb2JqRGlzcGxheSxcbiAgb3ZlcndyaXRlQ2hhaW5hYmxlTWV0aG9kOiAoKSA9PiBvdmVyd3JpdGVDaGFpbmFibGVNZXRob2QsXG4gIG92ZXJ3cml0ZU1ldGhvZDogKCkgPT4gb3ZlcndyaXRlTWV0aG9kLFxuICBvdmVyd3JpdGVQcm9wZXJ0eTogKCkgPT4gb3ZlcndyaXRlUHJvcGVydHksXG4gIHByb3hpZnk6ICgpID0+IHByb3hpZnksXG4gIHRlc3Q6ICgpID0+IHRlc3QsXG4gIHRyYW5zZmVyRmxhZ3M6ICgpID0+IHRyYW5zZmVyRmxhZ3MsXG4gIHR5cGU6ICgpID0+IHR5cGVcbn0pO1xuXG4vLyBub2RlX21vZHVsZXMvY2hlY2stZXJyb3IvaW5kZXguanNcbnZhciBjaGVja19lcnJvcl9leHBvcnRzID0ge307XG5fX2V4cG9ydChjaGVja19lcnJvcl9leHBvcnRzLCB7XG4gIGNvbXBhdGlibGVDb25zdHJ1Y3RvcjogKCkgPT4gY29tcGF0aWJsZUNvbnN0cnVjdG9yLFxuICBjb21wYXRpYmxlSW5zdGFuY2U6ICgpID0+IGNvbXBhdGlibGVJbnN0YW5jZSxcbiAgY29tcGF0aWJsZU1lc3NhZ2U6ICgpID0+IGNvbXBhdGlibGVNZXNzYWdlLFxuICBnZXRDb25zdHJ1Y3Rvck5hbWU6ICgpID0+IGdldENvbnN0cnVjdG9yTmFtZSxcbiAgZ2V0TWVzc2FnZTogKCkgPT4gZ2V0TWVzc2FnZVxufSk7XG5mdW5jdGlvbiBpc0Vycm9ySW5zdGFuY2Uob2JqKSB7XG4gIHJldHVybiBvYmogaW5zdGFuY2VvZiBFcnJvciB8fCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gXCJbb2JqZWN0IEVycm9yXVwiO1xufVxuX19uYW1lKGlzRXJyb3JJbnN0YW5jZSwgXCJpc0Vycm9ySW5zdGFuY2VcIik7XG5mdW5jdGlvbiBpc1JlZ0V4cChvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSBcIltvYmplY3QgUmVnRXhwXVwiO1xufVxuX19uYW1lKGlzUmVnRXhwLCBcImlzUmVnRXhwXCIpO1xuZnVuY3Rpb24gY29tcGF0aWJsZUluc3RhbmNlKHRocm93biwgZXJyb3JMaWtlKSB7XG4gIHJldHVybiBpc0Vycm9ySW5zdGFuY2UoZXJyb3JMaWtlKSAmJiB0aHJvd24gPT09IGVycm9yTGlrZTtcbn1cbl9fbmFtZShjb21wYXRpYmxlSW5zdGFuY2UsIFwiY29tcGF0aWJsZUluc3RhbmNlXCIpO1xuZnVuY3Rpb24gY29tcGF0aWJsZUNvbnN0cnVjdG9yKHRocm93biwgZXJyb3JMaWtlKSB7XG4gIGlmIChpc0Vycm9ySW5zdGFuY2UoZXJyb3JMaWtlKSkge1xuICAgIHJldHVybiB0aHJvd24uY29uc3RydWN0b3IgPT09IGVycm9yTGlrZS5jb25zdHJ1Y3RvciB8fCB0aHJvd24gaW5zdGFuY2VvZiBlcnJvckxpa2UuY29uc3RydWN0b3I7XG4gIH0gZWxzZSBpZiAoKHR5cGVvZiBlcnJvckxpa2UgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGVycm9yTGlrZSA9PT0gXCJmdW5jdGlvblwiKSAmJiBlcnJvckxpa2UucHJvdG90eXBlKSB7XG4gICAgcmV0dXJuIHRocm93bi5jb25zdHJ1Y3RvciA9PT0gZXJyb3JMaWtlIHx8IHRocm93biBpbnN0YW5jZW9mIGVycm9yTGlrZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5fX25hbWUoY29tcGF0aWJsZUNvbnN0cnVjdG9yLCBcImNvbXBhdGlibGVDb25zdHJ1Y3RvclwiKTtcbmZ1bmN0aW9uIGNvbXBhdGlibGVNZXNzYWdlKHRocm93biwgZXJyTWF0Y2hlcikge1xuICBjb25zdCBjb21wYXJpc29uU3RyaW5nID0gdHlwZW9mIHRocm93biA9PT0gXCJzdHJpbmdcIiA/IHRocm93biA6IHRocm93bi5tZXNzYWdlO1xuICBpZiAoaXNSZWdFeHAoZXJyTWF0Y2hlcikpIHtcbiAgICByZXR1cm4gZXJyTWF0Y2hlci50ZXN0KGNvbXBhcmlzb25TdHJpbmcpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBlcnJNYXRjaGVyID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIGNvbXBhcmlzb25TdHJpbmcuaW5kZXhPZihlcnJNYXRjaGVyKSAhPT0gLTE7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuX19uYW1lKGNvbXBhdGlibGVNZXNzYWdlLCBcImNvbXBhdGlibGVNZXNzYWdlXCIpO1xuZnVuY3Rpb24gZ2V0Q29uc3RydWN0b3JOYW1lKGVycm9yTGlrZSkge1xuICBsZXQgY29uc3RydWN0b3JOYW1lID0gZXJyb3JMaWtlO1xuICBpZiAoaXNFcnJvckluc3RhbmNlKGVycm9yTGlrZSkpIHtcbiAgICBjb25zdHJ1Y3Rvck5hbWUgPSBlcnJvckxpa2UuY29uc3RydWN0b3IubmFtZTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZXJyb3JMaWtlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBjb25zdHJ1Y3Rvck5hbWUgPSBlcnJvckxpa2UubmFtZTtcbiAgICBpZiAoY29uc3RydWN0b3JOYW1lID09PSBcIlwiKSB7XG4gICAgICBjb25zdCBuZXdDb25zdHJ1Y3Rvck5hbWUgPSBuZXcgZXJyb3JMaWtlKCkubmFtZTtcbiAgICAgIGNvbnN0cnVjdG9yTmFtZSA9IG5ld0NvbnN0cnVjdG9yTmFtZSB8fCBjb25zdHJ1Y3Rvck5hbWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBjb25zdHJ1Y3Rvck5hbWU7XG59XG5fX25hbWUoZ2V0Q29uc3RydWN0b3JOYW1lLCBcImdldENvbnN0cnVjdG9yTmFtZVwiKTtcbmZ1bmN0aW9uIGdldE1lc3NhZ2UoZXJyb3JMaWtlKSB7XG4gIGxldCBtc2cgPSBcIlwiO1xuICBpZiAoZXJyb3JMaWtlICYmIGVycm9yTGlrZS5tZXNzYWdlKSB7XG4gICAgbXNnID0gZXJyb3JMaWtlLm1lc3NhZ2U7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGVycm9yTGlrZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIG1zZyA9IGVycm9yTGlrZTtcbiAgfVxuICByZXR1cm4gbXNnO1xufVxuX19uYW1lKGdldE1lc3NhZ2UsIFwiZ2V0TWVzc2FnZVwiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvZmxhZy5qc1xuZnVuY3Rpb24gZmxhZyhvYmosIGtleSwgdmFsdWUpIHtcbiAgdmFyIGZsYWdzID0gb2JqLl9fZmxhZ3MgfHwgKG9iai5fX2ZsYWdzID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCkpO1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMykge1xuICAgIGZsYWdzW2tleV0gPSB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmxhZ3Nba2V5XTtcbiAgfVxufVxuX19uYW1lKGZsYWcsIFwiZmxhZ1wiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvdGVzdC5qc1xuZnVuY3Rpb24gdGVzdChvYmosIGFyZ3MpIHtcbiAgdmFyIG5lZ2F0ZSA9IGZsYWcob2JqLCBcIm5lZ2F0ZVwiKSwgZXhwciA9IGFyZ3NbMF07XG4gIHJldHVybiBuZWdhdGUgPyAhZXhwciA6IGV4cHI7XG59XG5fX25hbWUodGVzdCwgXCJ0ZXN0XCIpO1xuXG4vLyBsaWIvY2hhaS91dGlscy90eXBlLWRldGVjdC5qc1xuZnVuY3Rpb24gdHlwZShvYmopIHtcbiAgaWYgKHR5cGVvZiBvYmogPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4gXCJ1bmRlZmluZWRcIjtcbiAgfVxuICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgcmV0dXJuIFwibnVsbFwiO1xuICB9XG4gIGNvbnN0IHN0cmluZ1RhZyA9IG9ialtTeW1ib2wudG9TdHJpbmdUYWddO1xuICBpZiAodHlwZW9mIHN0cmluZ1RhZyA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBzdHJpbmdUYWc7XG4gIH1cbiAgY29uc3QgdHlwZTMgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKS5zbGljZSg4LCAtMSk7XG4gIHJldHVybiB0eXBlMztcbn1cbl9fbmFtZSh0eXBlLCBcInR5cGVcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9hc3NlcnRpb24tZXJyb3IvaW5kZXguanNcbnZhciBjYW5FbGlkZUZyYW1lcyA9IFwiY2FwdHVyZVN0YWNrVHJhY2VcIiBpbiBFcnJvcjtcbnZhciBBc3NlcnRpb25FcnJvciA9IGNsYXNzIF9Bc3NlcnRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgc3RhdGljIHtcbiAgICBfX25hbWUodGhpcywgXCJBc3NlcnRpb25FcnJvclwiKTtcbiAgfVxuICBtZXNzYWdlO1xuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gXCJBc3NlcnRpb25FcnJvclwiO1xuICB9XG4gIGdldCBvaygpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3RydWN0b3IobWVzc2FnZSA9IFwiVW5zcGVjaWZpZWQgQXNzZXJ0aW9uRXJyb3JcIiwgcHJvcHMsIHNzZikge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgaWYgKGNhbkVsaWRlRnJhbWVzKSB7XG4gICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBzc2YgfHwgX0Fzc2VydGlvbkVycm9yKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgaW4gcHJvcHMpIHtcbiAgICAgIGlmICghKGtleSBpbiB0aGlzKSkge1xuICAgICAgICB0aGlzW2tleV0gPSBwcm9wc1trZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICB0b0pTT04oc3RhY2spIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcyxcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIG1lc3NhZ2U6IHRoaXMubWVzc2FnZSxcbiAgICAgIG9rOiBmYWxzZSxcbiAgICAgIHN0YWNrOiBzdGFjayAhPT0gZmFsc2UgPyB0aGlzLnN0YWNrIDogdm9pZCAwXG4gICAgfTtcbiAgfVxufTtcblxuLy8gbGliL2NoYWkvdXRpbHMvZXhwZWN0VHlwZXMuanNcbmZ1bmN0aW9uIGV4cGVjdFR5cGVzKG9iaiwgdHlwZXMpIHtcbiAgdmFyIGZsYWdNc2cgPSBmbGFnKG9iaiwgXCJtZXNzYWdlXCIpO1xuICB2YXIgc3NmaSA9IGZsYWcob2JqLCBcInNzZmlcIik7XG4gIGZsYWdNc2cgPSBmbGFnTXNnID8gZmxhZ01zZyArIFwiOiBcIiA6IFwiXCI7XG4gIG9iaiA9IGZsYWcob2JqLCBcIm9iamVjdFwiKTtcbiAgdHlwZXMgPSB0eXBlcy5tYXAoZnVuY3Rpb24odCkge1xuICAgIHJldHVybiB0LnRvTG93ZXJDYXNlKCk7XG4gIH0pO1xuICB0eXBlcy5zb3J0KCk7XG4gIHZhciBzdHIgPSB0eXBlcy5tYXAoZnVuY3Rpb24odCwgaW5kZXgpIHtcbiAgICB2YXIgYXJ0ID0gfltcImFcIiwgXCJlXCIsIFwiaVwiLCBcIm9cIiwgXCJ1XCJdLmluZGV4T2YodC5jaGFyQXQoMCkpID8gXCJhblwiIDogXCJhXCI7XG4gICAgdmFyIG9yID0gdHlwZXMubGVuZ3RoID4gMSAmJiBpbmRleCA9PT0gdHlwZXMubGVuZ3RoIC0gMSA/IFwib3IgXCIgOiBcIlwiO1xuICAgIHJldHVybiBvciArIGFydCArIFwiIFwiICsgdDtcbiAgfSkuam9pbihcIiwgXCIpO1xuICB2YXIgb2JqVHlwZSA9IHR5cGUob2JqKS50b0xvd2VyQ2FzZSgpO1xuICBpZiAoIXR5cGVzLnNvbWUoZnVuY3Rpb24oZXhwZWN0ZWQpIHtcbiAgICByZXR1cm4gb2JqVHlwZSA9PT0gZXhwZWN0ZWQ7XG4gIH0pKSB7XG4gICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgICAgZmxhZ01zZyArIFwib2JqZWN0IHRlc3RlZCBtdXN0IGJlIFwiICsgc3RyICsgXCIsIGJ1dCBcIiArIG9ialR5cGUgKyBcIiBnaXZlblwiLFxuICAgICAgdm9pZCAwLFxuICAgICAgc3NmaVxuICAgICk7XG4gIH1cbn1cbl9fbmFtZShleHBlY3RUeXBlcywgXCJleHBlY3RUeXBlc1wiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvZ2V0QWN0dWFsLmpzXG5mdW5jdGlvbiBnZXRBY3R1YWwob2JqLCBhcmdzKSB7XG4gIHJldHVybiBhcmdzLmxlbmd0aCA+IDQgPyBhcmdzWzRdIDogb2JqLl9vYmo7XG59XG5fX25hbWUoZ2V0QWN0dWFsLCBcImdldEFjdHVhbFwiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2xvdXBlL2xpYi9oZWxwZXJzLmpzXG52YXIgYW5zaUNvbG9ycyA9IHtcbiAgYm9sZDogW1wiMVwiLCBcIjIyXCJdLFxuICBkaW06IFtcIjJcIiwgXCIyMlwiXSxcbiAgaXRhbGljOiBbXCIzXCIsIFwiMjNcIl0sXG4gIHVuZGVybGluZTogW1wiNFwiLCBcIjI0XCJdLFxuICAvLyA1ICYgNiBhcmUgYmxpbmtpbmdcbiAgaW52ZXJzZTogW1wiN1wiLCBcIjI3XCJdLFxuICBoaWRkZW46IFtcIjhcIiwgXCIyOFwiXSxcbiAgc3RyaWtlOiBbXCI5XCIsIFwiMjlcIl0sXG4gIC8vIDEwLTIwIGFyZSBmb250c1xuICAvLyAyMS0yOSBhcmUgcmVzZXRzIGZvciAxLTlcbiAgYmxhY2s6IFtcIjMwXCIsIFwiMzlcIl0sXG4gIHJlZDogW1wiMzFcIiwgXCIzOVwiXSxcbiAgZ3JlZW46IFtcIjMyXCIsIFwiMzlcIl0sXG4gIHllbGxvdzogW1wiMzNcIiwgXCIzOVwiXSxcbiAgYmx1ZTogW1wiMzRcIiwgXCIzOVwiXSxcbiAgbWFnZW50YTogW1wiMzVcIiwgXCIzOVwiXSxcbiAgY3lhbjogW1wiMzZcIiwgXCIzOVwiXSxcbiAgd2hpdGU6IFtcIjM3XCIsIFwiMzlcIl0sXG4gIGJyaWdodGJsYWNrOiBbXCIzMDsxXCIsIFwiMzlcIl0sXG4gIGJyaWdodHJlZDogW1wiMzE7MVwiLCBcIjM5XCJdLFxuICBicmlnaHRncmVlbjogW1wiMzI7MVwiLCBcIjM5XCJdLFxuICBicmlnaHR5ZWxsb3c6IFtcIjMzOzFcIiwgXCIzOVwiXSxcbiAgYnJpZ2h0Ymx1ZTogW1wiMzQ7MVwiLCBcIjM5XCJdLFxuICBicmlnaHRtYWdlbnRhOiBbXCIzNTsxXCIsIFwiMzlcIl0sXG4gIGJyaWdodGN5YW46IFtcIjM2OzFcIiwgXCIzOVwiXSxcbiAgYnJpZ2h0d2hpdGU6IFtcIjM3OzFcIiwgXCIzOVwiXSxcbiAgZ3JleTogW1wiOTBcIiwgXCIzOVwiXVxufTtcbnZhciBzdHlsZXMgPSB7XG4gIHNwZWNpYWw6IFwiY3lhblwiLFxuICBudW1iZXI6IFwieWVsbG93XCIsXG4gIGJpZ2ludDogXCJ5ZWxsb3dcIixcbiAgYm9vbGVhbjogXCJ5ZWxsb3dcIixcbiAgdW5kZWZpbmVkOiBcImdyZXlcIixcbiAgbnVsbDogXCJib2xkXCIsXG4gIHN0cmluZzogXCJncmVlblwiLFxuICBzeW1ib2w6IFwiZ3JlZW5cIixcbiAgZGF0ZTogXCJtYWdlbnRhXCIsXG4gIHJlZ2V4cDogXCJyZWRcIlxufTtcbnZhciB0cnVuY2F0b3IgPSBcIlxcdTIwMjZcIjtcbmZ1bmN0aW9uIGNvbG9yaXNlKHZhbHVlLCBzdHlsZVR5cGUpIHtcbiAgY29uc3QgY29sb3IgPSBhbnNpQ29sb3JzW3N0eWxlc1tzdHlsZVR5cGVdXSB8fCBhbnNpQ29sb3JzW3N0eWxlVHlwZV0gfHwgXCJcIjtcbiAgaWYgKCFjb2xvcikge1xuICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICB9XG4gIHJldHVybiBgXFx4MUJbJHtjb2xvclswXX1tJHtTdHJpbmcodmFsdWUpfVxceDFCWyR7Y29sb3JbMV19bWA7XG59XG5fX25hbWUoY29sb3Jpc2UsIFwiY29sb3Jpc2VcIik7XG5mdW5jdGlvbiBub3JtYWxpc2VPcHRpb25zKHtcbiAgc2hvd0hpZGRlbiA9IGZhbHNlLFxuICBkZXB0aCA9IDIsXG4gIGNvbG9ycyA9IGZhbHNlLFxuICBjdXN0b21JbnNwZWN0ID0gdHJ1ZSxcbiAgc2hvd1Byb3h5ID0gZmFsc2UsXG4gIG1heEFycmF5TGVuZ3RoID0gSW5maW5pdHksXG4gIGJyZWFrTGVuZ3RoID0gSW5maW5pdHksXG4gIHNlZW4gPSBbXSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNoYWRvd1xuICB0cnVuY2F0ZTogdHJ1bmNhdGUyID0gSW5maW5pdHksXG4gIHN0eWxpemUgPSBTdHJpbmdcbn0gPSB7fSwgaW5zcGVjdDMpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICBzaG93SGlkZGVuOiBCb29sZWFuKHNob3dIaWRkZW4pLFxuICAgIGRlcHRoOiBOdW1iZXIoZGVwdGgpLFxuICAgIGNvbG9yczogQm9vbGVhbihjb2xvcnMpLFxuICAgIGN1c3RvbUluc3BlY3Q6IEJvb2xlYW4oY3VzdG9tSW5zcGVjdCksXG4gICAgc2hvd1Byb3h5OiBCb29sZWFuKHNob3dQcm94eSksXG4gICAgbWF4QXJyYXlMZW5ndGg6IE51bWJlcihtYXhBcnJheUxlbmd0aCksXG4gICAgYnJlYWtMZW5ndGg6IE51bWJlcihicmVha0xlbmd0aCksXG4gICAgdHJ1bmNhdGU6IE51bWJlcih0cnVuY2F0ZTIpLFxuICAgIHNlZW4sXG4gICAgaW5zcGVjdDogaW5zcGVjdDMsXG4gICAgc3R5bGl6ZVxuICB9O1xuICBpZiAob3B0aW9ucy5jb2xvcnMpIHtcbiAgICBvcHRpb25zLnN0eWxpemUgPSBjb2xvcmlzZTtcbiAgfVxuICByZXR1cm4gb3B0aW9ucztcbn1cbl9fbmFtZShub3JtYWxpc2VPcHRpb25zLCBcIm5vcm1hbGlzZU9wdGlvbnNcIik7XG5mdW5jdGlvbiBpc0hpZ2hTdXJyb2dhdGUoY2hhcikge1xuICByZXR1cm4gY2hhciA+PSBcIlxcdUQ4MDBcIiAmJiBjaGFyIDw9IFwiXFx1REJGRlwiO1xufVxuX19uYW1lKGlzSGlnaFN1cnJvZ2F0ZSwgXCJpc0hpZ2hTdXJyb2dhdGVcIik7XG5mdW5jdGlvbiB0cnVuY2F0ZShzdHJpbmcsIGxlbmd0aCwgdGFpbCA9IHRydW5jYXRvcikge1xuICBzdHJpbmcgPSBTdHJpbmcoc3RyaW5nKTtcbiAgY29uc3QgdGFpbExlbmd0aCA9IHRhaWwubGVuZ3RoO1xuICBjb25zdCBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoO1xuICBpZiAodGFpbExlbmd0aCA+IGxlbmd0aCAmJiBzdHJpbmdMZW5ndGggPiB0YWlsTGVuZ3RoKSB7XG4gICAgcmV0dXJuIHRhaWw7XG4gIH1cbiAgaWYgKHN0cmluZ0xlbmd0aCA+IGxlbmd0aCAmJiBzdHJpbmdMZW5ndGggPiB0YWlsTGVuZ3RoKSB7XG4gICAgbGV0IGVuZCA9IGxlbmd0aCAtIHRhaWxMZW5ndGg7XG4gICAgaWYgKGVuZCA+IDAgJiYgaXNIaWdoU3Vycm9nYXRlKHN0cmluZ1tlbmQgLSAxXSkpIHtcbiAgICAgIGVuZCA9IGVuZCAtIDE7XG4gICAgfVxuICAgIHJldHVybiBgJHtzdHJpbmcuc2xpY2UoMCwgZW5kKX0ke3RhaWx9YDtcbiAgfVxuICByZXR1cm4gc3RyaW5nO1xufVxuX19uYW1lKHRydW5jYXRlLCBcInRydW5jYXRlXCIpO1xuZnVuY3Rpb24gaW5zcGVjdExpc3QobGlzdCwgb3B0aW9ucywgaW5zcGVjdEl0ZW0sIHNlcGFyYXRvciA9IFwiLCBcIikge1xuICBpbnNwZWN0SXRlbSA9IGluc3BlY3RJdGVtIHx8IG9wdGlvbnMuaW5zcGVjdDtcbiAgY29uc3Qgc2l6ZSA9IGxpc3QubGVuZ3RoO1xuICBpZiAoc2l6ZSA9PT0gMClcbiAgICByZXR1cm4gXCJcIjtcbiAgY29uc3Qgb3JpZ2luYWxMZW5ndGggPSBvcHRpb25zLnRydW5jYXRlO1xuICBsZXQgb3V0cHV0ID0gXCJcIjtcbiAgbGV0IHBlZWsgPSBcIlwiO1xuICBsZXQgdHJ1bmNhdGVkID0gXCJcIjtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaXplOyBpICs9IDEpIHtcbiAgICBjb25zdCBsYXN0ID0gaSArIDEgPT09IGxpc3QubGVuZ3RoO1xuICAgIGNvbnN0IHNlY29uZFRvTGFzdCA9IGkgKyAyID09PSBsaXN0Lmxlbmd0aDtcbiAgICB0cnVuY2F0ZWQgPSBgJHt0cnVuY2F0b3J9KCR7bGlzdC5sZW5ndGggLSBpfSlgO1xuICAgIGNvbnN0IHZhbHVlID0gbGlzdFtpXTtcbiAgICBvcHRpb25zLnRydW5jYXRlID0gb3JpZ2luYWxMZW5ndGggLSBvdXRwdXQubGVuZ3RoIC0gKGxhc3QgPyAwIDogc2VwYXJhdG9yLmxlbmd0aCk7XG4gICAgY29uc3Qgc3RyaW5nID0gcGVlayB8fCBpbnNwZWN0SXRlbSh2YWx1ZSwgb3B0aW9ucykgKyAobGFzdCA/IFwiXCIgOiBzZXBhcmF0b3IpO1xuICAgIGNvbnN0IG5leHRMZW5ndGggPSBvdXRwdXQubGVuZ3RoICsgc3RyaW5nLmxlbmd0aDtcbiAgICBjb25zdCB0cnVuY2F0ZWRMZW5ndGggPSBuZXh0TGVuZ3RoICsgdHJ1bmNhdGVkLmxlbmd0aDtcbiAgICBpZiAobGFzdCAmJiBuZXh0TGVuZ3RoID4gb3JpZ2luYWxMZW5ndGggJiYgb3V0cHV0Lmxlbmd0aCArIHRydW5jYXRlZC5sZW5ndGggPD0gb3JpZ2luYWxMZW5ndGgpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBpZiAoIWxhc3QgJiYgIXNlY29uZFRvTGFzdCAmJiB0cnVuY2F0ZWRMZW5ndGggPiBvcmlnaW5hbExlbmd0aCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHBlZWsgPSBsYXN0ID8gXCJcIiA6IGluc3BlY3RJdGVtKGxpc3RbaSArIDFdLCBvcHRpb25zKSArIChzZWNvbmRUb0xhc3QgPyBcIlwiIDogc2VwYXJhdG9yKTtcbiAgICBpZiAoIWxhc3QgJiYgc2Vjb25kVG9MYXN0ICYmIHRydW5jYXRlZExlbmd0aCA+IG9yaWdpbmFsTGVuZ3RoICYmIG5leHRMZW5ndGggKyBwZWVrLmxlbmd0aCA+IG9yaWdpbmFsTGVuZ3RoKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgb3V0cHV0ICs9IHN0cmluZztcbiAgICBpZiAoIWxhc3QgJiYgIXNlY29uZFRvTGFzdCAmJiBuZXh0TGVuZ3RoICsgcGVlay5sZW5ndGggPj0gb3JpZ2luYWxMZW5ndGgpIHtcbiAgICAgIHRydW5jYXRlZCA9IGAke3RydW5jYXRvcn0oJHtsaXN0Lmxlbmd0aCAtIGkgLSAxfSlgO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHRydW5jYXRlZCA9IFwiXCI7XG4gIH1cbiAgcmV0dXJuIGAke291dHB1dH0ke3RydW5jYXRlZH1gO1xufVxuX19uYW1lKGluc3BlY3RMaXN0LCBcImluc3BlY3RMaXN0XCIpO1xuZnVuY3Rpb24gcXVvdGVDb21wbGV4S2V5KGtleSkge1xuICBpZiAoa2V5Lm1hdGNoKC9eW2EtekEtWl9dW2EtekEtWl8wLTldKiQvKSkge1xuICAgIHJldHVybiBrZXk7XG4gIH1cbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGtleSkucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpLnJlcGxhY2UoL1xcXFxcIi9nLCAnXCInKS5yZXBsYWNlKC8oXlwifFwiJCkvZywgXCInXCIpO1xufVxuX19uYW1lKHF1b3RlQ29tcGxleEtleSwgXCJxdW90ZUNvbXBsZXhLZXlcIik7XG5mdW5jdGlvbiBpbnNwZWN0UHJvcGVydHkoW2tleSwgdmFsdWVdLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMudHJ1bmNhdGUgLT0gMjtcbiAgaWYgKHR5cGVvZiBrZXkgPT09IFwic3RyaW5nXCIpIHtcbiAgICBrZXkgPSBxdW90ZUNvbXBsZXhLZXkoa2V5KTtcbiAgfSBlbHNlIGlmICh0eXBlb2Yga2V5ICE9PSBcIm51bWJlclwiKSB7XG4gICAga2V5ID0gYFske29wdGlvbnMuaW5zcGVjdChrZXksIG9wdGlvbnMpfV1gO1xuICB9XG4gIG9wdGlvbnMudHJ1bmNhdGUgLT0ga2V5Lmxlbmd0aDtcbiAgdmFsdWUgPSBvcHRpb25zLmluc3BlY3QodmFsdWUsIG9wdGlvbnMpO1xuICByZXR1cm4gYCR7a2V5fTogJHt2YWx1ZX1gO1xufVxuX19uYW1lKGluc3BlY3RQcm9wZXJ0eSwgXCJpbnNwZWN0UHJvcGVydHlcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9sb3VwZS9saWIvYXJyYXkuanNcbmZ1bmN0aW9uIGluc3BlY3RBcnJheShhcnJheSwgb3B0aW9ucykge1xuICBjb25zdCBub25JbmRleFByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhhcnJheSkuc2xpY2UoYXJyYXkubGVuZ3RoKTtcbiAgaWYgKCFhcnJheS5sZW5ndGggJiYgIW5vbkluZGV4UHJvcGVydGllcy5sZW5ndGgpXG4gICAgcmV0dXJuIFwiW11cIjtcbiAgb3B0aW9ucy50cnVuY2F0ZSAtPSA0O1xuICBjb25zdCBsaXN0Q29udGVudHMgPSBpbnNwZWN0TGlzdChhcnJheSwgb3B0aW9ucyk7XG4gIG9wdGlvbnMudHJ1bmNhdGUgLT0gbGlzdENvbnRlbnRzLmxlbmd0aDtcbiAgbGV0IHByb3BlcnR5Q29udGVudHMgPSBcIlwiO1xuICBpZiAobm9uSW5kZXhQcm9wZXJ0aWVzLmxlbmd0aCkge1xuICAgIHByb3BlcnR5Q29udGVudHMgPSBpbnNwZWN0TGlzdChub25JbmRleFByb3BlcnRpZXMubWFwKChrZXkpID0+IFtrZXksIGFycmF5W2tleV1dKSwgb3B0aW9ucywgaW5zcGVjdFByb3BlcnR5KTtcbiAgfVxuICByZXR1cm4gYFsgJHtsaXN0Q29udGVudHN9JHtwcm9wZXJ0eUNvbnRlbnRzID8gYCwgJHtwcm9wZXJ0eUNvbnRlbnRzfWAgOiBcIlwifSBdYDtcbn1cbl9fbmFtZShpbnNwZWN0QXJyYXksIFwiaW5zcGVjdEFycmF5XCIpO1xuXG4vLyBub2RlX21vZHVsZXMvbG91cGUvbGliL3R5cGVkYXJyYXkuanNcbnZhciBnZXRBcnJheU5hbWUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKChhcnJheSkgPT4ge1xuICBpZiAodHlwZW9mIEJ1ZmZlciA9PT0gXCJmdW5jdGlvblwiICYmIGFycmF5IGluc3RhbmNlb2YgQnVmZmVyKSB7XG4gICAgcmV0dXJuIFwiQnVmZmVyXCI7XG4gIH1cbiAgaWYgKGFycmF5W1N5bWJvbC50b1N0cmluZ1RhZ10pIHtcbiAgICByZXR1cm4gYXJyYXlbU3ltYm9sLnRvU3RyaW5nVGFnXTtcbiAgfVxuICByZXR1cm4gYXJyYXkuY29uc3RydWN0b3IubmFtZTtcbn0sIFwiZ2V0QXJyYXlOYW1lXCIpO1xuZnVuY3Rpb24gaW5zcGVjdFR5cGVkQXJyYXkoYXJyYXksIG9wdGlvbnMpIHtcbiAgY29uc3QgbmFtZSA9IGdldEFycmF5TmFtZShhcnJheSk7XG4gIG9wdGlvbnMudHJ1bmNhdGUgLT0gbmFtZS5sZW5ndGggKyA0O1xuICBjb25zdCBub25JbmRleFByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhhcnJheSkuc2xpY2UoYXJyYXkubGVuZ3RoKTtcbiAgaWYgKCFhcnJheS5sZW5ndGggJiYgIW5vbkluZGV4UHJvcGVydGllcy5sZW5ndGgpXG4gICAgcmV0dXJuIGAke25hbWV9W11gO1xuICBsZXQgb3V0cHV0ID0gXCJcIjtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHN0cmluZyA9IGAke29wdGlvbnMuc3R5bGl6ZSh0cnVuY2F0ZShhcnJheVtpXSwgb3B0aW9ucy50cnVuY2F0ZSksIFwibnVtYmVyXCIpfSR7aSA9PT0gYXJyYXkubGVuZ3RoIC0gMSA/IFwiXCIgOiBcIiwgXCJ9YDtcbiAgICBvcHRpb25zLnRydW5jYXRlIC09IHN0cmluZy5sZW5ndGg7XG4gICAgaWYgKGFycmF5W2ldICE9PSBhcnJheS5sZW5ndGggJiYgb3B0aW9ucy50cnVuY2F0ZSA8PSAzKSB7XG4gICAgICBvdXRwdXQgKz0gYCR7dHJ1bmNhdG9yfSgke2FycmF5Lmxlbmd0aCAtIGFycmF5W2ldICsgMX0pYDtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBvdXRwdXQgKz0gc3RyaW5nO1xuICB9XG4gIGxldCBwcm9wZXJ0eUNvbnRlbnRzID0gXCJcIjtcbiAgaWYgKG5vbkluZGV4UHJvcGVydGllcy5sZW5ndGgpIHtcbiAgICBwcm9wZXJ0eUNvbnRlbnRzID0gaW5zcGVjdExpc3Qobm9uSW5kZXhQcm9wZXJ0aWVzLm1hcCgoa2V5KSA9PiBba2V5LCBhcnJheVtrZXldXSksIG9wdGlvbnMsIGluc3BlY3RQcm9wZXJ0eSk7XG4gIH1cbiAgcmV0dXJuIGAke25hbWV9WyAke291dHB1dH0ke3Byb3BlcnR5Q29udGVudHMgPyBgLCAke3Byb3BlcnR5Q29udGVudHN9YCA6IFwiXCJ9IF1gO1xufVxuX19uYW1lKGluc3BlY3RUeXBlZEFycmF5LCBcImluc3BlY3RUeXBlZEFycmF5XCIpO1xuXG4vLyBub2RlX21vZHVsZXMvbG91cGUvbGliL2RhdGUuanNcbmZ1bmN0aW9uIGluc3BlY3REYXRlKGRhdGVPYmplY3QsIG9wdGlvbnMpIHtcbiAgY29uc3Qgc3RyaW5nUmVwcmVzZW50YXRpb24gPSBkYXRlT2JqZWN0LnRvSlNPTigpO1xuICBpZiAoc3RyaW5nUmVwcmVzZW50YXRpb24gPT09IG51bGwpIHtcbiAgICByZXR1cm4gXCJJbnZhbGlkIERhdGVcIjtcbiAgfVxuICBjb25zdCBzcGxpdCA9IHN0cmluZ1JlcHJlc2VudGF0aW9uLnNwbGl0KFwiVFwiKTtcbiAgY29uc3QgZGF0ZSA9IHNwbGl0WzBdO1xuICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKGAke2RhdGV9VCR7dHJ1bmNhdGUoc3BsaXRbMV0sIG9wdGlvbnMudHJ1bmNhdGUgLSBkYXRlLmxlbmd0aCAtIDEpfWAsIFwiZGF0ZVwiKTtcbn1cbl9fbmFtZShpbnNwZWN0RGF0ZSwgXCJpbnNwZWN0RGF0ZVwiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2xvdXBlL2xpYi9mdW5jdGlvbi5qc1xuZnVuY3Rpb24gaW5zcGVjdEZ1bmN0aW9uKGZ1bmMsIG9wdGlvbnMpIHtcbiAgY29uc3QgZnVuY3Rpb25UeXBlID0gZnVuY1tTeW1ib2wudG9TdHJpbmdUYWddIHx8IFwiRnVuY3Rpb25cIjtcbiAgY29uc3QgbmFtZSA9IGZ1bmMubmFtZTtcbiAgaWYgKCFuYW1lKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMuc3R5bGl6ZShgWyR7ZnVuY3Rpb25UeXBlfV1gLCBcInNwZWNpYWxcIik7XG4gIH1cbiAgcmV0dXJuIG9wdGlvbnMuc3R5bGl6ZShgWyR7ZnVuY3Rpb25UeXBlfSAke3RydW5jYXRlKG5hbWUsIG9wdGlvbnMudHJ1bmNhdGUgLSAxMSl9XWAsIFwic3BlY2lhbFwiKTtcbn1cbl9fbmFtZShpbnNwZWN0RnVuY3Rpb24sIFwiaW5zcGVjdEZ1bmN0aW9uXCIpO1xuXG4vLyBub2RlX21vZHVsZXMvbG91cGUvbGliL21hcC5qc1xuZnVuY3Rpb24gaW5zcGVjdE1hcEVudHJ5KFtrZXksIHZhbHVlXSwgb3B0aW9ucykge1xuICBvcHRpb25zLnRydW5jYXRlIC09IDQ7XG4gIGtleSA9IG9wdGlvbnMuaW5zcGVjdChrZXksIG9wdGlvbnMpO1xuICBvcHRpb25zLnRydW5jYXRlIC09IGtleS5sZW5ndGg7XG4gIHZhbHVlID0gb3B0aW9ucy5pbnNwZWN0KHZhbHVlLCBvcHRpb25zKTtcbiAgcmV0dXJuIGAke2tleX0gPT4gJHt2YWx1ZX1gO1xufVxuX19uYW1lKGluc3BlY3RNYXBFbnRyeSwgXCJpbnNwZWN0TWFwRW50cnlcIik7XG5mdW5jdGlvbiBtYXBUb0VudHJpZXMobWFwKSB7XG4gIGNvbnN0IGVudHJpZXMgPSBbXTtcbiAgbWFwLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICBlbnRyaWVzLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgfSk7XG4gIHJldHVybiBlbnRyaWVzO1xufVxuX19uYW1lKG1hcFRvRW50cmllcywgXCJtYXBUb0VudHJpZXNcIik7XG5mdW5jdGlvbiBpbnNwZWN0TWFwKG1hcCwgb3B0aW9ucykge1xuICBjb25zdCBzaXplID0gbWFwLnNpemUgLSAxO1xuICBpZiAoc2l6ZSA8PSAwKSB7XG4gICAgcmV0dXJuIFwiTWFwe31cIjtcbiAgfVxuICBvcHRpb25zLnRydW5jYXRlIC09IDc7XG4gIHJldHVybiBgTWFweyAke2luc3BlY3RMaXN0KG1hcFRvRW50cmllcyhtYXApLCBvcHRpb25zLCBpbnNwZWN0TWFwRW50cnkpfSB9YDtcbn1cbl9fbmFtZShpbnNwZWN0TWFwLCBcImluc3BlY3RNYXBcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9sb3VwZS9saWIvbnVtYmVyLmpzXG52YXIgaXNOYU4gPSBOdW1iZXIuaXNOYU4gfHwgKChpKSA9PiBpICE9PSBpKTtcbmZ1bmN0aW9uIGluc3BlY3ROdW1iZXIobnVtYmVyLCBvcHRpb25zKSB7XG4gIGlmIChpc05hTihudW1iZXIpKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMuc3R5bGl6ZShcIk5hTlwiLCBcIm51bWJlclwiKTtcbiAgfVxuICBpZiAobnVtYmVyID09PSBJbmZpbml0eSkge1xuICAgIHJldHVybiBvcHRpb25zLnN0eWxpemUoXCJJbmZpbml0eVwiLCBcIm51bWJlclwiKTtcbiAgfVxuICBpZiAobnVtYmVyID09PSAtSW5maW5pdHkpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKFwiLUluZmluaXR5XCIsIFwibnVtYmVyXCIpO1xuICB9XG4gIGlmIChudW1iZXIgPT09IDApIHtcbiAgICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKDEgLyBudW1iZXIgPT09IEluZmluaXR5ID8gXCIrMFwiIDogXCItMFwiLCBcIm51bWJlclwiKTtcbiAgfVxuICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKHRydW5jYXRlKFN0cmluZyhudW1iZXIpLCBvcHRpb25zLnRydW5jYXRlKSwgXCJudW1iZXJcIik7XG59XG5fX25hbWUoaW5zcGVjdE51bWJlciwgXCJpbnNwZWN0TnVtYmVyXCIpO1xuXG4vLyBub2RlX21vZHVsZXMvbG91cGUvbGliL2JpZ2ludC5qc1xuZnVuY3Rpb24gaW5zcGVjdEJpZ0ludChudW1iZXIsIG9wdGlvbnMpIHtcbiAgbGV0IG51bXMgPSB0cnVuY2F0ZShudW1iZXIudG9TdHJpbmcoKSwgb3B0aW9ucy50cnVuY2F0ZSAtIDEpO1xuICBpZiAobnVtcyAhPT0gdHJ1bmNhdG9yKVxuICAgIG51bXMgKz0gXCJuXCI7XG4gIHJldHVybiBvcHRpb25zLnN0eWxpemUobnVtcywgXCJiaWdpbnRcIik7XG59XG5fX25hbWUoaW5zcGVjdEJpZ0ludCwgXCJpbnNwZWN0QmlnSW50XCIpO1xuXG4vLyBub2RlX21vZHVsZXMvbG91cGUvbGliL3JlZ2V4cC5qc1xuZnVuY3Rpb24gaW5zcGVjdFJlZ0V4cCh2YWx1ZSwgb3B0aW9ucykge1xuICBjb25zdCBmbGFncyA9IHZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoXCIvXCIpWzJdO1xuICBjb25zdCBzb3VyY2VMZW5ndGggPSBvcHRpb25zLnRydW5jYXRlIC0gKDIgKyBmbGFncy5sZW5ndGgpO1xuICBjb25zdCBzb3VyY2UgPSB2YWx1ZS5zb3VyY2U7XG4gIHJldHVybiBvcHRpb25zLnN0eWxpemUoYC8ke3RydW5jYXRlKHNvdXJjZSwgc291cmNlTGVuZ3RoKX0vJHtmbGFnc31gLCBcInJlZ2V4cFwiKTtcbn1cbl9fbmFtZShpbnNwZWN0UmVnRXhwLCBcImluc3BlY3RSZWdFeHBcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9sb3VwZS9saWIvc2V0LmpzXG5mdW5jdGlvbiBhcnJheUZyb21TZXQoc2V0Mikge1xuICBjb25zdCB2YWx1ZXMgPSBbXTtcbiAgc2V0Mi5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgIHZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgfSk7XG4gIHJldHVybiB2YWx1ZXM7XG59XG5fX25hbWUoYXJyYXlGcm9tU2V0LCBcImFycmF5RnJvbVNldFwiKTtcbmZ1bmN0aW9uIGluc3BlY3RTZXQoc2V0Miwgb3B0aW9ucykge1xuICBpZiAoc2V0Mi5zaXplID09PSAwKVxuICAgIHJldHVybiBcIlNldHt9XCI7XG4gIG9wdGlvbnMudHJ1bmNhdGUgLT0gNztcbiAgcmV0dXJuIGBTZXR7ICR7aW5zcGVjdExpc3QoYXJyYXlGcm9tU2V0KHNldDIpLCBvcHRpb25zKX0gfWA7XG59XG5fX25hbWUoaW5zcGVjdFNldCwgXCJpbnNwZWN0U2V0XCIpO1xuXG4vLyBub2RlX21vZHVsZXMvbG91cGUvbGliL3N0cmluZy5qc1xudmFyIHN0cmluZ0VzY2FwZUNoYXJzID0gbmV3IFJlZ0V4cChcIlsnXFxcXHUwMDAwLVxcXFx1MDAxZlxcXFx1MDA3Zi1cXFxcdTAwOWZcXFxcdTAwYWRcXFxcdTA2MDAtXFxcXHUwNjA0XFxcXHUwNzBmXFxcXHUxN2I0XFxcXHUxN2I1XFxcXHUyMDBjLVxcXFx1MjAwZlxcXFx1MjAyOC1cXFxcdTIwMmZcXFxcdTIwNjAtXFxcXHUyMDZmXFxcXHVmZWZmXFxcXHVmZmYwLVxcXFx1ZmZmZl1cIiwgXCJnXCIpO1xudmFyIGVzY2FwZUNoYXJhY3RlcnMgPSB7XG4gIFwiXFxiXCI6IFwiXFxcXGJcIixcbiAgXCJcdFwiOiBcIlxcXFx0XCIsXG4gIFwiXFxuXCI6IFwiXFxcXG5cIixcbiAgXCJcXGZcIjogXCJcXFxcZlwiLFxuICBcIlxcclwiOiBcIlxcXFxyXCIsXG4gIFwiJ1wiOiBcIlxcXFwnXCIsXG4gIFwiXFxcXFwiOiBcIlxcXFxcXFxcXCJcbn07XG52YXIgaGV4ID0gMTY7XG52YXIgdW5pY29kZUxlbmd0aCA9IDQ7XG5mdW5jdGlvbiBlc2NhcGUoY2hhcikge1xuICByZXR1cm4gZXNjYXBlQ2hhcmFjdGVyc1tjaGFyXSB8fCBgXFxcXHUke2AwMDAwJHtjaGFyLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoaGV4KX1gLnNsaWNlKC11bmljb2RlTGVuZ3RoKX1gO1xufVxuX19uYW1lKGVzY2FwZSwgXCJlc2NhcGVcIik7XG5mdW5jdGlvbiBpbnNwZWN0U3RyaW5nKHN0cmluZywgb3B0aW9ucykge1xuICBpZiAoc3RyaW5nRXNjYXBlQ2hhcnMudGVzdChzdHJpbmcpKSB7XG4gICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2Uoc3RyaW5nRXNjYXBlQ2hhcnMsIGVzY2FwZSk7XG4gIH1cbiAgcmV0dXJuIG9wdGlvbnMuc3R5bGl6ZShgJyR7dHJ1bmNhdGUoc3RyaW5nLCBvcHRpb25zLnRydW5jYXRlIC0gMil9J2AsIFwic3RyaW5nXCIpO1xufVxuX19uYW1lKGluc3BlY3RTdHJpbmcsIFwiaW5zcGVjdFN0cmluZ1wiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2xvdXBlL2xpYi9zeW1ib2wuanNcbmZ1bmN0aW9uIGluc3BlY3RTeW1ib2wodmFsdWUpIHtcbiAgaWYgKFwiZGVzY3JpcHRpb25cIiBpbiBTeW1ib2wucHJvdG90eXBlKSB7XG4gICAgcmV0dXJuIHZhbHVlLmRlc2NyaXB0aW9uID8gYFN5bWJvbCgke3ZhbHVlLmRlc2NyaXB0aW9ufSlgIDogXCJTeW1ib2woKVwiO1xuICB9XG4gIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xufVxuX19uYW1lKGluc3BlY3RTeW1ib2wsIFwiaW5zcGVjdFN5bWJvbFwiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2xvdXBlL2xpYi9wcm9taXNlLmpzXG52YXIgZ2V0UHJvbWlzZVZhbHVlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoKSA9PiBcIlByb21pc2V7XFx1MjAyNn1cIiwgXCJnZXRQcm9taXNlVmFsdWVcIik7XG50cnkge1xuICBjb25zdCB7IGdldFByb21pc2VEZXRhaWxzLCBrUGVuZGluZywga1JlamVjdGVkIH0gPSBwcm9jZXNzLmJpbmRpbmcoXCJ1dGlsXCIpO1xuICBpZiAoQXJyYXkuaXNBcnJheShnZXRQcm9taXNlRGV0YWlscyhQcm9taXNlLnJlc29sdmUoKSkpKSB7XG4gICAgZ2V0UHJvbWlzZVZhbHVlID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodmFsdWUsIG9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IFtzdGF0ZSwgaW5uZXJWYWx1ZV0gPSBnZXRQcm9taXNlRGV0YWlscyh2YWx1ZSk7XG4gICAgICBpZiAoc3RhdGUgPT09IGtQZW5kaW5nKSB7XG4gICAgICAgIHJldHVybiBcIlByb21pc2V7PHBlbmRpbmc+fVwiO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGBQcm9taXNlJHtzdGF0ZSA9PT0ga1JlamVjdGVkID8gXCIhXCIgOiBcIlwifXske29wdGlvbnMuaW5zcGVjdChpbm5lclZhbHVlLCBvcHRpb25zKX19YDtcbiAgICB9LCBcImdldFByb21pc2VWYWx1ZVwiKTtcbiAgfVxufSBjYXRjaCAobm90Tm9kZSkge1xufVxudmFyIHByb21pc2VfZGVmYXVsdCA9IGdldFByb21pc2VWYWx1ZTtcblxuLy8gbm9kZV9tb2R1bGVzL2xvdXBlL2xpYi9vYmplY3QuanNcbmZ1bmN0aW9uIGluc3BlY3RPYmplY3Qob2JqZWN0LCBvcHRpb25zKSB7XG4gIGNvbnN0IHByb3BlcnRpZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QpO1xuICBjb25zdCBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KSA6IFtdO1xuICBpZiAocHJvcGVydGllcy5sZW5ndGggPT09IDAgJiYgc3ltYm9scy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gXCJ7fVwiO1xuICB9XG4gIG9wdGlvbnMudHJ1bmNhdGUgLT0gNDtcbiAgb3B0aW9ucy5zZWVuID0gb3B0aW9ucy5zZWVuIHx8IFtdO1xuICBpZiAob3B0aW9ucy5zZWVuLmluY2x1ZGVzKG9iamVjdCkpIHtcbiAgICByZXR1cm4gXCJbQ2lyY3VsYXJdXCI7XG4gIH1cbiAgb3B0aW9ucy5zZWVuLnB1c2gob2JqZWN0KTtcbiAgY29uc3QgcHJvcGVydHlDb250ZW50cyA9IGluc3BlY3RMaXN0KHByb3BlcnRpZXMubWFwKChrZXkpID0+IFtrZXksIG9iamVjdFtrZXldXSksIG9wdGlvbnMsIGluc3BlY3RQcm9wZXJ0eSk7XG4gIGNvbnN0IHN5bWJvbENvbnRlbnRzID0gaW5zcGVjdExpc3Qoc3ltYm9scy5tYXAoKGtleSkgPT4gW2tleSwgb2JqZWN0W2tleV1dKSwgb3B0aW9ucywgaW5zcGVjdFByb3BlcnR5KTtcbiAgb3B0aW9ucy5zZWVuLnBvcCgpO1xuICBsZXQgc2VwID0gXCJcIjtcbiAgaWYgKHByb3BlcnR5Q29udGVudHMgJiYgc3ltYm9sQ29udGVudHMpIHtcbiAgICBzZXAgPSBcIiwgXCI7XG4gIH1cbiAgcmV0dXJuIGB7ICR7cHJvcGVydHlDb250ZW50c30ke3NlcH0ke3N5bWJvbENvbnRlbnRzfSB9YDtcbn1cbl9fbmFtZShpbnNwZWN0T2JqZWN0LCBcImluc3BlY3RPYmplY3RcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9sb3VwZS9saWIvY2xhc3MuanNcbnZhciB0b1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgU3ltYm9sLnRvU3RyaW5nVGFnID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogZmFsc2U7XG5mdW5jdGlvbiBpbnNwZWN0Q2xhc3ModmFsdWUsIG9wdGlvbnMpIHtcbiAgbGV0IG5hbWUgPSBcIlwiO1xuICBpZiAodG9TdHJpbmdUYWcgJiYgdG9TdHJpbmdUYWcgaW4gdmFsdWUpIHtcbiAgICBuYW1lID0gdmFsdWVbdG9TdHJpbmdUYWddO1xuICB9XG4gIG5hbWUgPSBuYW1lIHx8IHZhbHVlLmNvbnN0cnVjdG9yLm5hbWU7XG4gIGlmICghbmFtZSB8fCBuYW1lID09PSBcIl9jbGFzc1wiKSB7XG4gICAgbmFtZSA9IFwiPEFub255bW91cyBDbGFzcz5cIjtcbiAgfVxuICBvcHRpb25zLnRydW5jYXRlIC09IG5hbWUubGVuZ3RoO1xuICByZXR1cm4gYCR7bmFtZX0ke2luc3BlY3RPYmplY3QodmFsdWUsIG9wdGlvbnMpfWA7XG59XG5fX25hbWUoaW5zcGVjdENsYXNzLCBcImluc3BlY3RDbGFzc1wiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2xvdXBlL2xpYi9hcmd1bWVudHMuanNcbmZ1bmN0aW9uIGluc3BlY3RBcmd1bWVudHMoYXJncywgb3B0aW9ucykge1xuICBpZiAoYXJncy5sZW5ndGggPT09IDApXG4gICAgcmV0dXJuIFwiQXJndW1lbnRzW11cIjtcbiAgb3B0aW9ucy50cnVuY2F0ZSAtPSAxMztcbiAgcmV0dXJuIGBBcmd1bWVudHNbICR7aW5zcGVjdExpc3QoYXJncywgb3B0aW9ucyl9IF1gO1xufVxuX19uYW1lKGluc3BlY3RBcmd1bWVudHMsIFwiaW5zcGVjdEFyZ3VtZW50c1wiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2xvdXBlL2xpYi9lcnJvci5qc1xudmFyIGVycm9yS2V5cyA9IFtcbiAgXCJzdGFja1wiLFxuICBcImxpbmVcIixcbiAgXCJjb2x1bW5cIixcbiAgXCJuYW1lXCIsXG4gIFwibWVzc2FnZVwiLFxuICBcImZpbGVOYW1lXCIsXG4gIFwibGluZU51bWJlclwiLFxuICBcImNvbHVtbk51bWJlclwiLFxuICBcIm51bWJlclwiLFxuICBcImRlc2NyaXB0aW9uXCIsXG4gIFwiY2F1c2VcIlxuXTtcbmZ1bmN0aW9uIGluc3BlY3RPYmplY3QyKGVycm9yLCBvcHRpb25zKSB7XG4gIGNvbnN0IHByb3BlcnRpZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlcnJvcikuZmlsdGVyKChrZXkpID0+IGVycm9yS2V5cy5pbmRleE9mKGtleSkgPT09IC0xKTtcbiAgY29uc3QgbmFtZSA9IGVycm9yLm5hbWU7XG4gIG9wdGlvbnMudHJ1bmNhdGUgLT0gbmFtZS5sZW5ndGg7XG4gIGxldCBtZXNzYWdlID0gXCJcIjtcbiAgaWYgKHR5cGVvZiBlcnJvci5tZXNzYWdlID09PSBcInN0cmluZ1wiKSB7XG4gICAgbWVzc2FnZSA9IHRydW5jYXRlKGVycm9yLm1lc3NhZ2UsIG9wdGlvbnMudHJ1bmNhdGUpO1xuICB9IGVsc2Uge1xuICAgIHByb3BlcnRpZXMudW5zaGlmdChcIm1lc3NhZ2VcIik7XG4gIH1cbiAgbWVzc2FnZSA9IG1lc3NhZ2UgPyBgOiAke21lc3NhZ2V9YCA6IFwiXCI7XG4gIG9wdGlvbnMudHJ1bmNhdGUgLT0gbWVzc2FnZS5sZW5ndGggKyA1O1xuICBvcHRpb25zLnNlZW4gPSBvcHRpb25zLnNlZW4gfHwgW107XG4gIGlmIChvcHRpb25zLnNlZW4uaW5jbHVkZXMoZXJyb3IpKSB7XG4gICAgcmV0dXJuIFwiW0NpcmN1bGFyXVwiO1xuICB9XG4gIG9wdGlvbnMuc2Vlbi5wdXNoKGVycm9yKTtcbiAgY29uc3QgcHJvcGVydHlDb250ZW50cyA9IGluc3BlY3RMaXN0KHByb3BlcnRpZXMubWFwKChrZXkpID0+IFtrZXksIGVycm9yW2tleV1dKSwgb3B0aW9ucywgaW5zcGVjdFByb3BlcnR5KTtcbiAgcmV0dXJuIGAke25hbWV9JHttZXNzYWdlfSR7cHJvcGVydHlDb250ZW50cyA/IGAgeyAke3Byb3BlcnR5Q29udGVudHN9IH1gIDogXCJcIn1gO1xufVxuX19uYW1lKGluc3BlY3RPYmplY3QyLCBcImluc3BlY3RPYmplY3RcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9sb3VwZS9saWIvaHRtbC5qc1xuZnVuY3Rpb24gaW5zcGVjdEF0dHJpYnV0ZShba2V5LCB2YWx1ZV0sIG9wdGlvbnMpIHtcbiAgb3B0aW9ucy50cnVuY2F0ZSAtPSAzO1xuICBpZiAoIXZhbHVlKSB7XG4gICAgcmV0dXJuIGAke29wdGlvbnMuc3R5bGl6ZShTdHJpbmcoa2V5KSwgXCJ5ZWxsb3dcIil9YDtcbiAgfVxuICByZXR1cm4gYCR7b3B0aW9ucy5zdHlsaXplKFN0cmluZyhrZXkpLCBcInllbGxvd1wiKX09JHtvcHRpb25zLnN0eWxpemUoYFwiJHt2YWx1ZX1cImAsIFwic3RyaW5nXCIpfWA7XG59XG5fX25hbWUoaW5zcGVjdEF0dHJpYnV0ZSwgXCJpbnNwZWN0QXR0cmlidXRlXCIpO1xuZnVuY3Rpb24gaW5zcGVjdEhUTUxDb2xsZWN0aW9uKGNvbGxlY3Rpb24sIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGluc3BlY3RMaXN0KGNvbGxlY3Rpb24sIG9wdGlvbnMsIGluc3BlY3RIVE1MLCBcIlxcblwiKTtcbn1cbl9fbmFtZShpbnNwZWN0SFRNTENvbGxlY3Rpb24sIFwiaW5zcGVjdEhUTUxDb2xsZWN0aW9uXCIpO1xuZnVuY3Rpb24gaW5zcGVjdEhUTUwoZWxlbWVudCwgb3B0aW9ucykge1xuICBjb25zdCBwcm9wZXJ0aWVzID0gZWxlbWVudC5nZXRBdHRyaWJ1dGVOYW1lcygpO1xuICBjb25zdCBuYW1lID0gZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IGhlYWQgPSBvcHRpb25zLnN0eWxpemUoYDwke25hbWV9YCwgXCJzcGVjaWFsXCIpO1xuICBjb25zdCBoZWFkQ2xvc2UgPSBvcHRpb25zLnN0eWxpemUoYD5gLCBcInNwZWNpYWxcIik7XG4gIGNvbnN0IHRhaWwgPSBvcHRpb25zLnN0eWxpemUoYDwvJHtuYW1lfT5gLCBcInNwZWNpYWxcIik7XG4gIG9wdGlvbnMudHJ1bmNhdGUgLT0gbmFtZS5sZW5ndGggKiAyICsgNTtcbiAgbGV0IHByb3BlcnR5Q29udGVudHMgPSBcIlwiO1xuICBpZiAocHJvcGVydGllcy5sZW5ndGggPiAwKSB7XG4gICAgcHJvcGVydHlDb250ZW50cyArPSBcIiBcIjtcbiAgICBwcm9wZXJ0eUNvbnRlbnRzICs9IGluc3BlY3RMaXN0KHByb3BlcnRpZXMubWFwKChrZXkpID0+IFtrZXksIGVsZW1lbnQuZ2V0QXR0cmlidXRlKGtleSldKSwgb3B0aW9ucywgaW5zcGVjdEF0dHJpYnV0ZSwgXCIgXCIpO1xuICB9XG4gIG9wdGlvbnMudHJ1bmNhdGUgLT0gcHJvcGVydHlDb250ZW50cy5sZW5ndGg7XG4gIGNvbnN0IHRydW5jYXRlMiA9IG9wdGlvbnMudHJ1bmNhdGU7XG4gIGxldCBjaGlsZHJlbiA9IGluc3BlY3RIVE1MQ29sbGVjdGlvbihlbGVtZW50LmNoaWxkcmVuLCBvcHRpb25zKTtcbiAgaWYgKGNoaWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0aCA+IHRydW5jYXRlMikge1xuICAgIGNoaWxkcmVuID0gYCR7dHJ1bmNhdG9yfSgke2VsZW1lbnQuY2hpbGRyZW4ubGVuZ3RofSlgO1xuICB9XG4gIHJldHVybiBgJHtoZWFkfSR7cHJvcGVydHlDb250ZW50c30ke2hlYWRDbG9zZX0ke2NoaWxkcmVufSR7dGFpbH1gO1xufVxuX19uYW1lKGluc3BlY3RIVE1MLCBcImluc3BlY3RIVE1MXCIpO1xuXG4vLyBub2RlX21vZHVsZXMvbG91cGUvbGliL2luZGV4LmpzXG52YXIgc3ltYm9sc1N1cHBvcnRlZCA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLmZvciA9PT0gXCJmdW5jdGlvblwiO1xudmFyIGNoYWlJbnNwZWN0ID0gc3ltYm9sc1N1cHBvcnRlZCA/IFN5bWJvbC5mb3IoXCJjaGFpL2luc3BlY3RcIikgOiBcIkBAY2hhaS9pbnNwZWN0XCI7XG52YXIgbm9kZUluc3BlY3QgPSBmYWxzZTtcbnRyeSB7XG4gIGNvbnN0IG5vZGVVdGlsID0gcmVxdWlyZV91dGlsKCk7XG4gIG5vZGVJbnNwZWN0ID0gbm9kZVV0aWwuaW5zcGVjdCA/IG5vZGVVdGlsLmluc3BlY3QuY3VzdG9tIDogZmFsc2U7XG59IGNhdGNoIChub05vZGVJbnNwZWN0KSB7XG4gIG5vZGVJbnNwZWN0ID0gZmFsc2U7XG59XG52YXIgY29uc3RydWN0b3JNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbnZhciBzdHJpbmdUYWdNYXAgPSB7fTtcbnZhciBiYXNlVHlwZXNNYXAgPSB7XG4gIHVuZGVmaW5lZDogKHZhbHVlLCBvcHRpb25zKSA9PiBvcHRpb25zLnN0eWxpemUoXCJ1bmRlZmluZWRcIiwgXCJ1bmRlZmluZWRcIiksXG4gIG51bGw6ICh2YWx1ZSwgb3B0aW9ucykgPT4gb3B0aW9ucy5zdHlsaXplKFwibnVsbFwiLCBcIm51bGxcIiksXG4gIGJvb2xlYW46ICh2YWx1ZSwgb3B0aW9ucykgPT4gb3B0aW9ucy5zdHlsaXplKFN0cmluZyh2YWx1ZSksIFwiYm9vbGVhblwiKSxcbiAgQm9vbGVhbjogKHZhbHVlLCBvcHRpb25zKSA9PiBvcHRpb25zLnN0eWxpemUoU3RyaW5nKHZhbHVlKSwgXCJib29sZWFuXCIpLFxuICBudW1iZXI6IGluc3BlY3ROdW1iZXIsXG4gIE51bWJlcjogaW5zcGVjdE51bWJlcixcbiAgYmlnaW50OiBpbnNwZWN0QmlnSW50LFxuICBCaWdJbnQ6IGluc3BlY3RCaWdJbnQsXG4gIHN0cmluZzogaW5zcGVjdFN0cmluZyxcbiAgU3RyaW5nOiBpbnNwZWN0U3RyaW5nLFxuICBmdW5jdGlvbjogaW5zcGVjdEZ1bmN0aW9uLFxuICBGdW5jdGlvbjogaW5zcGVjdEZ1bmN0aW9uLFxuICBzeW1ib2w6IGluc3BlY3RTeW1ib2wsXG4gIC8vIEEgU3ltYm9sIHBvbHlmaWxsIHdpbGwgcmV0dXJuIGBTeW1ib2xgIG5vdCBgc3ltYm9sYCBmcm9tIHR5cGVkZXRlY3RcbiAgU3ltYm9sOiBpbnNwZWN0U3ltYm9sLFxuICBBcnJheTogaW5zcGVjdEFycmF5LFxuICBEYXRlOiBpbnNwZWN0RGF0ZSxcbiAgTWFwOiBpbnNwZWN0TWFwLFxuICBTZXQ6IGluc3BlY3RTZXQsXG4gIFJlZ0V4cDogaW5zcGVjdFJlZ0V4cCxcbiAgUHJvbWlzZTogcHJvbWlzZV9kZWZhdWx0LFxuICAvLyBXZWFrU2V0LCBXZWFrTWFwIGFyZSB0b3RhbGx5IG9wYXF1ZSB0byB1c1xuICBXZWFrU2V0OiAodmFsdWUsIG9wdGlvbnMpID0+IG9wdGlvbnMuc3R5bGl6ZShcIldlYWtTZXR7XFx1MjAyNn1cIiwgXCJzcGVjaWFsXCIpLFxuICBXZWFrTWFwOiAodmFsdWUsIG9wdGlvbnMpID0+IG9wdGlvbnMuc3R5bGl6ZShcIldlYWtNYXB7XFx1MjAyNn1cIiwgXCJzcGVjaWFsXCIpLFxuICBBcmd1bWVudHM6IGluc3BlY3RBcmd1bWVudHMsXG4gIEludDhBcnJheTogaW5zcGVjdFR5cGVkQXJyYXksXG4gIFVpbnQ4QXJyYXk6IGluc3BlY3RUeXBlZEFycmF5LFxuICBVaW50OENsYW1wZWRBcnJheTogaW5zcGVjdFR5cGVkQXJyYXksXG4gIEludDE2QXJyYXk6IGluc3BlY3RUeXBlZEFycmF5LFxuICBVaW50MTZBcnJheTogaW5zcGVjdFR5cGVkQXJyYXksXG4gIEludDMyQXJyYXk6IGluc3BlY3RUeXBlZEFycmF5LFxuICBVaW50MzJBcnJheTogaW5zcGVjdFR5cGVkQXJyYXksXG4gIEZsb2F0MzJBcnJheTogaW5zcGVjdFR5cGVkQXJyYXksXG4gIEZsb2F0NjRBcnJheTogaW5zcGVjdFR5cGVkQXJyYXksXG4gIEdlbmVyYXRvcjogKCkgPT4gXCJcIixcbiAgRGF0YVZpZXc6ICgpID0+IFwiXCIsXG4gIEFycmF5QnVmZmVyOiAoKSA9PiBcIlwiLFxuICBFcnJvcjogaW5zcGVjdE9iamVjdDIsXG4gIEhUTUxDb2xsZWN0aW9uOiBpbnNwZWN0SFRNTENvbGxlY3Rpb24sXG4gIE5vZGVMaXN0OiBpbnNwZWN0SFRNTENvbGxlY3Rpb25cbn07XG52YXIgaW5zcGVjdEN1c3RvbSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHZhbHVlLCBvcHRpb25zLCB0eXBlMykgPT4ge1xuICBpZiAoY2hhaUluc3BlY3QgaW4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlW2NoYWlJbnNwZWN0XSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcmV0dXJuIHZhbHVlW2NoYWlJbnNwZWN0XShvcHRpb25zKTtcbiAgfVxuICBpZiAobm9kZUluc3BlY3QgJiYgbm9kZUluc3BlY3QgaW4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlW25vZGVJbnNwZWN0XSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcmV0dXJuIHZhbHVlW25vZGVJbnNwZWN0XShvcHRpb25zLmRlcHRoLCBvcHRpb25zKTtcbiAgfVxuICBpZiAoXCJpbnNwZWN0XCIgaW4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlLmluc3BlY3QgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHJldHVybiB2YWx1ZS5pbnNwZWN0KG9wdGlvbnMuZGVwdGgsIG9wdGlvbnMpO1xuICB9XG4gIGlmIChcImNvbnN0cnVjdG9yXCIgaW4gdmFsdWUgJiYgY29uc3RydWN0b3JNYXAuaGFzKHZhbHVlLmNvbnN0cnVjdG9yKSkge1xuICAgIHJldHVybiBjb25zdHJ1Y3Rvck1hcC5nZXQodmFsdWUuY29uc3RydWN0b3IpKHZhbHVlLCBvcHRpb25zKTtcbiAgfVxuICBpZiAoc3RyaW5nVGFnTWFwW3R5cGUzXSkge1xuICAgIHJldHVybiBzdHJpbmdUYWdNYXBbdHlwZTNdKHZhbHVlLCBvcHRpb25zKTtcbiAgfVxuICByZXR1cm4gXCJcIjtcbn0sIFwiaW5zcGVjdEN1c3RvbVwiKTtcbnZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5mdW5jdGlvbiBpbnNwZWN0KHZhbHVlLCBvcHRzID0ge30pIHtcbiAgY29uc3Qgb3B0aW9ucyA9IG5vcm1hbGlzZU9wdGlvbnMob3B0cywgaW5zcGVjdCk7XG4gIGNvbnN0IHsgY3VzdG9tSW5zcGVjdCB9ID0gb3B0aW9ucztcbiAgbGV0IHR5cGUzID0gdmFsdWUgPT09IG51bGwgPyBcIm51bGxcIiA6IHR5cGVvZiB2YWx1ZTtcbiAgaWYgKHR5cGUzID09PSBcIm9iamVjdFwiKSB7XG4gICAgdHlwZTMgPSB0b1N0cmluZy5jYWxsKHZhbHVlKS5zbGljZSg4LCAtMSk7XG4gIH1cbiAgaWYgKHR5cGUzIGluIGJhc2VUeXBlc01hcCkge1xuICAgIHJldHVybiBiYXNlVHlwZXNNYXBbdHlwZTNdKHZhbHVlLCBvcHRpb25zKTtcbiAgfVxuICBpZiAoY3VzdG9tSW5zcGVjdCAmJiB2YWx1ZSkge1xuICAgIGNvbnN0IG91dHB1dCA9IGluc3BlY3RDdXN0b20odmFsdWUsIG9wdGlvbnMsIHR5cGUzKTtcbiAgICBpZiAob3V0cHV0KSB7XG4gICAgICBpZiAodHlwZW9mIG91dHB1dCA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICAgIHJldHVybiBpbnNwZWN0KG91dHB1dCwgb3B0aW9ucyk7XG4gICAgfVxuICB9XG4gIGNvbnN0IHByb3RvID0gdmFsdWUgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpIDogZmFsc2U7XG4gIGlmIChwcm90byA9PT0gT2JqZWN0LnByb3RvdHlwZSB8fCBwcm90byA9PT0gbnVsbCkge1xuICAgIHJldHVybiBpbnNwZWN0T2JqZWN0KHZhbHVlLCBvcHRpb25zKTtcbiAgfVxuICBpZiAodmFsdWUgJiYgdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcImZ1bmN0aW9uXCIgJiYgdmFsdWUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgIHJldHVybiBpbnNwZWN0SFRNTCh2YWx1ZSwgb3B0aW9ucyk7XG4gIH1cbiAgaWYgKFwiY29uc3RydWN0b3JcIiBpbiB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZS5jb25zdHJ1Y3RvciAhPT0gT2JqZWN0KSB7XG4gICAgICByZXR1cm4gaW5zcGVjdENsYXNzKHZhbHVlLCBvcHRpb25zKTtcbiAgICB9XG4gICAgcmV0dXJuIGluc3BlY3RPYmplY3QodmFsdWUsIG9wdGlvbnMpO1xuICB9XG4gIGlmICh2YWx1ZSA9PT0gT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiBpbnNwZWN0T2JqZWN0KHZhbHVlLCBvcHRpb25zKTtcbiAgfVxuICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKFN0cmluZyh2YWx1ZSksIHR5cGUzKTtcbn1cbl9fbmFtZShpbnNwZWN0LCBcImluc3BlY3RcIik7XG5cbi8vIGxpYi9jaGFpL2NvbmZpZy5qc1xudmFyIGNvbmZpZyA9IHtcbiAgLyoqXG4gICAqICMjIyBjb25maWcuaW5jbHVkZVN0YWNrXG4gICAqXG4gICAqIFVzZXIgY29uZmlndXJhYmxlIHByb3BlcnR5LCBpbmZsdWVuY2VzIHdoZXRoZXIgc3RhY2sgdHJhY2VcbiAgICogaXMgaW5jbHVkZWQgaW4gQXNzZXJ0aW9uIGVycm9yIG1lc3NhZ2UuIERlZmF1bHQgb2YgZmFsc2VcbiAgICogc3VwcHJlc3NlcyBzdGFjayB0cmFjZSBpbiB0aGUgZXJyb3IgbWVzc2FnZS5cbiAgICpcbiAgICogICAgIGNoYWkuY29uZmlnLmluY2x1ZGVTdGFjayA9IHRydWU7ICAvLyBlbmFibGUgc3RhY2sgb24gZXJyb3JcbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufVxuICAgKiBAcHVibGljXG4gICAqL1xuICBpbmNsdWRlU3RhY2s6IGZhbHNlLFxuICAvKipcbiAgICogIyMjIGNvbmZpZy5zaG93RGlmZlxuICAgKlxuICAgKiBVc2VyIGNvbmZpZ3VyYWJsZSBwcm9wZXJ0eSwgaW5mbHVlbmNlcyB3aGV0aGVyIG9yIG5vdFxuICAgKiB0aGUgYHNob3dEaWZmYCBmbGFnIHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgdGhyb3duXG4gICAqIEFzc2VydGlvbkVycm9ycy4gYGZhbHNlYCB3aWxsIGFsd2F5cyBiZSBgZmFsc2VgOyBgdHJ1ZWBcbiAgICogd2lsbCBiZSB0cnVlIHdoZW4gdGhlIGFzc2VydGlvbiBoYXMgcmVxdWVzdGVkIGEgZGlmZlxuICAgKiBiZSBzaG93bi5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufVxuICAgKiBAcHVibGljXG4gICAqL1xuICBzaG93RGlmZjogdHJ1ZSxcbiAgLyoqXG4gICAqICMjIyBjb25maWcudHJ1bmNhdGVUaHJlc2hvbGRcbiAgICpcbiAgICogVXNlciBjb25maWd1cmFibGUgcHJvcGVydHksIHNldHMgbGVuZ3RoIHRocmVzaG9sZCBmb3IgYWN0dWFsIGFuZFxuICAgKiBleHBlY3RlZCB2YWx1ZXMgaW4gYXNzZXJ0aW9uIGVycm9ycy4gSWYgdGhpcyB0aHJlc2hvbGQgaXMgZXhjZWVkZWQsIGZvclxuICAgKiBleGFtcGxlIGZvciBsYXJnZSBkYXRhIHN0cnVjdHVyZXMsIHRoZSB2YWx1ZSBpcyByZXBsYWNlZCB3aXRoIHNvbWV0aGluZ1xuICAgKiBsaWtlIGBbIEFycmF5KDMpIF1gIG9yIGB7IE9iamVjdCAocHJvcDEsIHByb3AyKSB9YC5cbiAgICpcbiAgICogU2V0IGl0IHRvIHplcm8gaWYgeW91IHdhbnQgdG8gZGlzYWJsZSB0cnVuY2F0aW5nIGFsdG9nZXRoZXIuXG4gICAqXG4gICAqIFRoaXMgaXMgZXNwZWNpYWxseSB1c2VyZnVsIHdoZW4gZG9pbmcgYXNzZXJ0aW9ucyBvbiBhcnJheXM6IGhhdmluZyB0aGlzXG4gICAqIHNldCB0byBhIHJlYXNvbmFibGUgbGFyZ2UgdmFsdWUgbWFrZXMgdGhlIGZhaWx1cmUgbWVzc2FnZXMgcmVhZGlseVxuICAgKiBpbnNwZWN0YWJsZS5cbiAgICpcbiAgICogICAgIGNoYWkuY29uZmlnLnRydW5jYXRlVGhyZXNob2xkID0gMDsgIC8vIGRpc2FibGUgdHJ1bmNhdGluZ1xuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn1cbiAgICogQHB1YmxpY1xuICAgKi9cbiAgdHJ1bmNhdGVUaHJlc2hvbGQ6IDQwLFxuICAvKipcbiAgICogIyMjIGNvbmZpZy51c2VQcm94eVxuICAgKlxuICAgKiBVc2VyIGNvbmZpZ3VyYWJsZSBwcm9wZXJ0eSwgZGVmaW5lcyBpZiBjaGFpIHdpbGwgdXNlIGEgUHJveHkgdG8gdGhyb3dcbiAgICogYW4gZXJyb3Igd2hlbiBhIG5vbi1leGlzdGVudCBwcm9wZXJ0eSBpcyByZWFkLCB3aGljaCBwcm90ZWN0cyB1c2Vyc1xuICAgKiBmcm9tIHR5cG9zIHdoZW4gdXNpbmcgcHJvcGVydHktYmFzZWQgYXNzZXJ0aW9ucy5cbiAgICpcbiAgICogU2V0IGl0IHRvIGZhbHNlIGlmIHlvdSB3YW50IHRvIGRpc2FibGUgdGhpcyBmZWF0dXJlLlxuICAgKlxuICAgKiAgICAgY2hhaS5jb25maWcudXNlUHJveHkgPSBmYWxzZTsgIC8vIGRpc2FibGUgdXNlIG9mIFByb3h5XG4gICAqXG4gICAqIFRoaXMgZmVhdHVyZSBpcyBhdXRvbWF0aWNhbGx5IGRpc2FibGVkIHJlZ2FyZGxlc3Mgb2YgdGhpcyBjb25maWcgdmFsdWVcbiAgICogaW4gZW52aXJvbm1lbnRzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBwcm94aWVzLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59XG4gICAqIEBwdWJsaWNcbiAgICovXG4gIHVzZVByb3h5OiB0cnVlLFxuICAvKipcbiAgICogIyMjIGNvbmZpZy5wcm94eUV4Y2x1ZGVkS2V5c1xuICAgKlxuICAgKiBVc2VyIGNvbmZpZ3VyYWJsZSBwcm9wZXJ0eSwgZGVmaW5lcyB3aGljaCBwcm9wZXJ0aWVzIHNob3VsZCBiZSBpZ25vcmVkXG4gICAqIGluc3RlYWQgb2YgdGhyb3dpbmcgYW4gZXJyb3IgaWYgdGhleSBkbyBub3QgZXhpc3Qgb24gdGhlIGFzc2VydGlvbi5cbiAgICogVGhpcyBpcyBvbmx5IGFwcGxpZWQgaWYgdGhlIGVudmlyb25tZW50IENoYWkgaXMgcnVubmluZyBpbiBzdXBwb3J0cyBwcm94aWVzIGFuZFxuICAgKiBpZiB0aGUgYHVzZVByb3h5YCBjb25maWd1cmF0aW9uIHNldHRpbmcgaXMgZW5hYmxlZC5cbiAgICogQnkgZGVmYXVsdCwgYHRoZW5gIGFuZCBgaW5zcGVjdGAgd2lsbCBub3QgdGhyb3cgYW4gZXJyb3IgaWYgdGhleSBkbyBub3QgZXhpc3Qgb24gdGhlXG4gICAqIGFzc2VydGlvbiBvYmplY3QgYmVjYXVzZSB0aGUgYC5pbnNwZWN0YCBwcm9wZXJ0eSBpcyByZWFkIGJ5IGB1dGlsLmluc3BlY3RgIChmb3IgZXhhbXBsZSwgd2hlblxuICAgKiB1c2luZyBgY29uc29sZS5sb2dgIG9uIHRoZSBhc3NlcnRpb24gb2JqZWN0KSBhbmQgYC50aGVuYCBpcyBuZWNlc3NhcnkgZm9yIHByb21pc2UgdHlwZS1jaGVja2luZy5cbiAgICpcbiAgICogICAgIC8vIEJ5IGRlZmF1bHQgdGhlc2Uga2V5cyB3aWxsIG5vdCB0aHJvdyBhbiBlcnJvciBpZiB0aGV5IGRvIG5vdCBleGlzdCBvbiB0aGUgYXNzZXJ0aW9uIG9iamVjdFxuICAgKiAgICAgY2hhaS5jb25maWcucHJveHlFeGNsdWRlZEtleXMgPSBbJ3RoZW4nLCAnaW5zcGVjdCddO1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fVxuICAgKiBAcHVibGljXG4gICAqL1xuICBwcm94eUV4Y2x1ZGVkS2V5czogW1widGhlblwiLCBcImNhdGNoXCIsIFwiaW5zcGVjdFwiLCBcInRvSlNPTlwiXSxcbiAgLyoqXG4gICAqICMjIyBjb25maWcuZGVlcEVxdWFsXG4gICAqXG4gICAqIFVzZXIgY29uZmlndXJhYmxlIHByb3BlcnR5LCBkZWZpbmVzIHdoaWNoIGEgY3VzdG9tIGZ1bmN0aW9uIHRvIHVzZSBmb3IgZGVlcEVxdWFsXG4gICAqIGNvbXBhcmlzb25zLlxuICAgKiBCeSBkZWZhdWx0LCB0aGUgZnVuY3Rpb24gdXNlZCBpcyB0aGUgb25lIGZyb20gdGhlIGBkZWVwLWVxbGAgcGFja2FnZSB3aXRob3V0IGN1c3RvbSBjb21wYXJhdG9yLlxuICAgKlxuICAgKiAgICAgLy8gdXNlIGEgY3VzdG9tIGNvbXBhcmF0b3JcbiAgICogICAgIGNoYWkuY29uZmlnLmRlZXBFcXVhbCA9IChleHBlY3RlZCwgYWN0dWFsKSA9PiB7XG4gICAqICAgICAgICAgcmV0dXJuIGNoYWkudXRpbC5lcWwoZXhwZWN0ZWQsIGFjdHVhbCwge1xuICAgKiAgICAgICAgICAgICBjb21wYXJhdG9yOiAoZXhwZWN0ZWQsIGFjdHVhbCkgPT4ge1xuICAgKiAgICAgICAgICAgICAgICAgLy8gZm9yIG5vbiBudW1iZXIgY29tcGFyaXNvbiwgdXNlIHRoZSBkZWZhdWx0IGJlaGF2aW9yXG4gICAqICAgICAgICAgICAgICAgICBpZih0eXBlb2YgZXhwZWN0ZWQgIT09ICdudW1iZXInKSByZXR1cm4gbnVsbDtcbiAgICogICAgICAgICAgICAgICAgIC8vIGFsbG93IGEgZGlmZmVyZW5jZSBvZiAxMCBiZXR3ZWVuIGNvbXBhcmVkIG51bWJlcnNcbiAgICogICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgYWN0dWFsID09PSAnbnVtYmVyJyAmJiBNYXRoLmFicyhhY3R1YWwgLSBleHBlY3RlZCkgPCAxMFxuICAgKiAgICAgICAgICAgICB9XG4gICAqICAgICAgICAgfSlcbiAgICogICAgIH07XG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259XG4gICAqIEBwdWJsaWNcbiAgICovXG4gIGRlZXBFcXVhbDogbnVsbFxufTtcblxuLy8gbGliL2NoYWkvdXRpbHMvaW5zcGVjdC5qc1xuZnVuY3Rpb24gaW5zcGVjdDIob2JqLCBzaG93SGlkZGVuLCBkZXB0aCwgY29sb3JzKSB7XG4gIHZhciBvcHRpb25zID0ge1xuICAgIGNvbG9ycyxcbiAgICBkZXB0aDogdHlwZW9mIGRlcHRoID09PSBcInVuZGVmaW5lZFwiID8gMiA6IGRlcHRoLFxuICAgIHNob3dIaWRkZW4sXG4gICAgdHJ1bmNhdGU6IGNvbmZpZy50cnVuY2F0ZVRocmVzaG9sZCA/IGNvbmZpZy50cnVuY2F0ZVRocmVzaG9sZCA6IEluZmluaXR5XG4gIH07XG4gIHJldHVybiBpbnNwZWN0KG9iaiwgb3B0aW9ucyk7XG59XG5fX25hbWUoaW5zcGVjdDIsIFwiaW5zcGVjdFwiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvb2JqRGlzcGxheS5qc1xuZnVuY3Rpb24gb2JqRGlzcGxheShvYmopIHtcbiAgdmFyIHN0ciA9IGluc3BlY3QyKG9iaiksIHR5cGUzID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaik7XG4gIGlmIChjb25maWcudHJ1bmNhdGVUaHJlc2hvbGQgJiYgc3RyLmxlbmd0aCA+PSBjb25maWcudHJ1bmNhdGVUaHJlc2hvbGQpIHtcbiAgICBpZiAodHlwZTMgPT09IFwiW29iamVjdCBGdW5jdGlvbl1cIikge1xuICAgICAgcmV0dXJuICFvYmoubmFtZSB8fCBvYmoubmFtZSA9PT0gXCJcIiA/IFwiW0Z1bmN0aW9uXVwiIDogXCJbRnVuY3Rpb246IFwiICsgb2JqLm5hbWUgKyBcIl1cIjtcbiAgICB9IGVsc2UgaWYgKHR5cGUzID09PSBcIltvYmplY3QgQXJyYXldXCIpIHtcbiAgICAgIHJldHVybiBcIlsgQXJyYXkoXCIgKyBvYmoubGVuZ3RoICsgXCIpIF1cIjtcbiAgICB9IGVsc2UgaWYgKHR5cGUzID09PSBcIltvYmplY3QgT2JqZWN0XVwiKSB7XG4gICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iaiksIGtzdHIgPSBrZXlzLmxlbmd0aCA+IDIgPyBrZXlzLnNwbGljZSgwLCAyKS5qb2luKFwiLCBcIikgKyBcIiwgLi4uXCIgOiBrZXlzLmpvaW4oXCIsIFwiKTtcbiAgICAgIHJldHVybiBcInsgT2JqZWN0IChcIiArIGtzdHIgKyBcIikgfVwiO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG59XG5fX25hbWUob2JqRGlzcGxheSwgXCJvYmpEaXNwbGF5XCIpO1xuXG4vLyBsaWIvY2hhaS91dGlscy9nZXRNZXNzYWdlLmpzXG5mdW5jdGlvbiBnZXRNZXNzYWdlMihvYmosIGFyZ3MpIHtcbiAgdmFyIG5lZ2F0ZSA9IGZsYWcob2JqLCBcIm5lZ2F0ZVwiKSwgdmFsID0gZmxhZyhvYmosIFwib2JqZWN0XCIpLCBleHBlY3RlZCA9IGFyZ3NbM10sIGFjdHVhbCA9IGdldEFjdHVhbChvYmosIGFyZ3MpLCBtc2cgPSBuZWdhdGUgPyBhcmdzWzJdIDogYXJnc1sxXSwgZmxhZ01zZyA9IGZsYWcob2JqLCBcIm1lc3NhZ2VcIik7XG4gIGlmICh0eXBlb2YgbXNnID09PSBcImZ1bmN0aW9uXCIpXG4gICAgbXNnID0gbXNnKCk7XG4gIG1zZyA9IG1zZyB8fCBcIlwiO1xuICBtc2cgPSBtc2cucmVwbGFjZSgvI1xce3RoaXNcXH0vZywgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG9iakRpc3BsYXkodmFsKTtcbiAgfSkucmVwbGFjZSgvI1xce2FjdFxcfS9nLCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gb2JqRGlzcGxheShhY3R1YWwpO1xuICB9KS5yZXBsYWNlKC8jXFx7ZXhwXFx9L2csIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBvYmpEaXNwbGF5KGV4cGVjdGVkKTtcbiAgfSk7XG4gIHJldHVybiBmbGFnTXNnID8gZmxhZ01zZyArIFwiOiBcIiArIG1zZyA6IG1zZztcbn1cbl9fbmFtZShnZXRNZXNzYWdlMiwgXCJnZXRNZXNzYWdlXCIpO1xuXG4vLyBsaWIvY2hhaS91dGlscy90cmFuc2ZlckZsYWdzLmpzXG5mdW5jdGlvbiB0cmFuc2ZlckZsYWdzKGFzc2VydGlvbiwgb2JqZWN0LCBpbmNsdWRlQWxsKSB7XG4gIHZhciBmbGFncyA9IGFzc2VydGlvbi5fX2ZsYWdzIHx8IChhc3NlcnRpb24uX19mbGFncyA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpKTtcbiAgaWYgKCFvYmplY3QuX19mbGFncykge1xuICAgIG9iamVjdC5fX2ZsYWdzID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIH1cbiAgaW5jbHVkZUFsbCA9IGFyZ3VtZW50cy5sZW5ndGggPT09IDMgPyBpbmNsdWRlQWxsIDogdHJ1ZTtcbiAgZm9yICh2YXIgZmxhZzMgaW4gZmxhZ3MpIHtcbiAgICBpZiAoaW5jbHVkZUFsbCB8fCBmbGFnMyAhPT0gXCJvYmplY3RcIiAmJiBmbGFnMyAhPT0gXCJzc2ZpXCIgJiYgZmxhZzMgIT09IFwibG9ja1NzZmlcIiAmJiBmbGFnMyAhPSBcIm1lc3NhZ2VcIikge1xuICAgICAgb2JqZWN0Ll9fZmxhZ3NbZmxhZzNdID0gZmxhZ3NbZmxhZzNdO1xuICAgIH1cbiAgfVxufVxuX19uYW1lKHRyYW5zZmVyRmxhZ3MsIFwidHJhbnNmZXJGbGFnc1wiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2RlZXAtZXFsL2luZGV4LmpzXG5mdW5jdGlvbiB0eXBlMihvYmopIHtcbiAgaWYgKHR5cGVvZiBvYmogPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4gXCJ1bmRlZmluZWRcIjtcbiAgfVxuICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgcmV0dXJuIFwibnVsbFwiO1xuICB9XG4gIGNvbnN0IHN0cmluZ1RhZyA9IG9ialtTeW1ib2wudG9TdHJpbmdUYWddO1xuICBpZiAodHlwZW9mIHN0cmluZ1RhZyA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBzdHJpbmdUYWc7XG4gIH1cbiAgY29uc3Qgc2xpY2VTdGFydCA9IDg7XG4gIGNvbnN0IHNsaWNlRW5kID0gLTE7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKS5zbGljZShzbGljZVN0YXJ0LCBzbGljZUVuZCk7XG59XG5fX25hbWUodHlwZTIsIFwidHlwZVwiKTtcbmZ1bmN0aW9uIEZha2VNYXAoKSB7XG4gIHRoaXMuX2tleSA9IFwiY2hhaS9kZWVwLWVxbF9fXCIgKyBNYXRoLnJhbmRvbSgpICsgRGF0ZS5ub3coKTtcbn1cbl9fbmFtZShGYWtlTWFwLCBcIkZha2VNYXBcIik7XG5GYWtlTWFwLnByb3RvdHlwZSA9IHtcbiAgZ2V0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICByZXR1cm4ga2V5W3RoaXMuX2tleV07XG4gIH0sIFwiZ2V0XCIpLFxuICBzZXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICBpZiAoT2JqZWN0LmlzRXh0ZW5zaWJsZShrZXkpKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoa2V5LCB0aGlzLl9rZXksIHtcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgfVxuICB9LCBcInNldFwiKVxufTtcbnZhciBNZW1vaXplTWFwID0gdHlwZW9mIFdlYWtNYXAgPT09IFwiZnVuY3Rpb25cIiA/IFdlYWtNYXAgOiBGYWtlTWFwO1xuZnVuY3Rpb24gbWVtb2l6ZUNvbXBhcmUobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBtZW1vaXplTWFwKSB7XG4gIGlmICghbWVtb2l6ZU1hcCB8fCBpc1ByaW1pdGl2ZShsZWZ0SGFuZE9wZXJhbmQpIHx8IGlzUHJpbWl0aXZlKHJpZ2h0SGFuZE9wZXJhbmQpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgdmFyIGxlZnRIYW5kTWFwID0gbWVtb2l6ZU1hcC5nZXQobGVmdEhhbmRPcGVyYW5kKTtcbiAgaWYgKGxlZnRIYW5kTWFwKSB7XG4gICAgdmFyIHJlc3VsdCA9IGxlZnRIYW5kTWFwLmdldChyaWdodEhhbmRPcGVyYW5kKTtcbiAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuX19uYW1lKG1lbW9pemVDb21wYXJlLCBcIm1lbW9pemVDb21wYXJlXCIpO1xuZnVuY3Rpb24gbWVtb2l6ZVNldChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG1lbW9pemVNYXAsIHJlc3VsdCkge1xuICBpZiAoIW1lbW9pemVNYXAgfHwgaXNQcmltaXRpdmUobGVmdEhhbmRPcGVyYW5kKSB8fCBpc1ByaW1pdGl2ZShyaWdodEhhbmRPcGVyYW5kKSkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgbGVmdEhhbmRNYXAgPSBtZW1vaXplTWFwLmdldChsZWZ0SGFuZE9wZXJhbmQpO1xuICBpZiAobGVmdEhhbmRNYXApIHtcbiAgICBsZWZ0SGFuZE1hcC5zZXQocmlnaHRIYW5kT3BlcmFuZCwgcmVzdWx0KTtcbiAgfSBlbHNlIHtcbiAgICBsZWZ0SGFuZE1hcCA9IG5ldyBNZW1vaXplTWFwKCk7XG4gICAgbGVmdEhhbmRNYXAuc2V0KHJpZ2h0SGFuZE9wZXJhbmQsIHJlc3VsdCk7XG4gICAgbWVtb2l6ZU1hcC5zZXQobGVmdEhhbmRPcGVyYW5kLCBsZWZ0SGFuZE1hcCk7XG4gIH1cbn1cbl9fbmFtZShtZW1vaXplU2V0LCBcIm1lbW9pemVTZXRcIik7XG52YXIgZGVlcF9lcWxfZGVmYXVsdCA9IGRlZXBFcXVhbDtcbmZ1bmN0aW9uIGRlZXBFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5jb21wYXJhdG9yKSB7XG4gICAgcmV0dXJuIGV4dGVuc2l2ZURlZXBFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMpO1xuICB9XG4gIHZhciBzaW1wbGVSZXN1bHQgPSBzaW1wbGVFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQpO1xuICBpZiAoc2ltcGxlUmVzdWx0ICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIHNpbXBsZVJlc3VsdDtcbiAgfVxuICByZXR1cm4gZXh0ZW5zaXZlRGVlcEVxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucyk7XG59XG5fX25hbWUoZGVlcEVxdWFsLCBcImRlZXBFcXVhbFwiKTtcbmZ1bmN0aW9uIHNpbXBsZUVxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCkge1xuICBpZiAobGVmdEhhbmRPcGVyYW5kID09PSByaWdodEhhbmRPcGVyYW5kKSB7XG4gICAgcmV0dXJuIGxlZnRIYW5kT3BlcmFuZCAhPT0gMCB8fCAxIC8gbGVmdEhhbmRPcGVyYW5kID09PSAxIC8gcmlnaHRIYW5kT3BlcmFuZDtcbiAgfVxuICBpZiAobGVmdEhhbmRPcGVyYW5kICE9PSBsZWZ0SGFuZE9wZXJhbmQgJiYgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgcmlnaHRIYW5kT3BlcmFuZCAhPT0gcmlnaHRIYW5kT3BlcmFuZCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChpc1ByaW1pdGl2ZShsZWZ0SGFuZE9wZXJhbmQpIHx8IGlzUHJpbWl0aXZlKHJpZ2h0SGFuZE9wZXJhbmQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuX19uYW1lKHNpbXBsZUVxdWFsLCBcInNpbXBsZUVxdWFsXCIpO1xuZnVuY3Rpb24gZXh0ZW5zaXZlRGVlcEVxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgb3B0aW9ucy5tZW1vaXplID0gb3B0aW9ucy5tZW1vaXplID09PSBmYWxzZSA/IGZhbHNlIDogb3B0aW9ucy5tZW1vaXplIHx8IG5ldyBNZW1vaXplTWFwKCk7XG4gIHZhciBjb21wYXJhdG9yID0gb3B0aW9ucyAmJiBvcHRpb25zLmNvbXBhcmF0b3I7XG4gIHZhciBtZW1vaXplUmVzdWx0TGVmdCA9IG1lbW9pemVDb21wYXJlKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucy5tZW1vaXplKTtcbiAgaWYgKG1lbW9pemVSZXN1bHRMZWZ0ICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIG1lbW9pemVSZXN1bHRMZWZ0O1xuICB9XG4gIHZhciBtZW1vaXplUmVzdWx0UmlnaHQgPSBtZW1vaXplQ29tcGFyZShyaWdodEhhbmRPcGVyYW5kLCBsZWZ0SGFuZE9wZXJhbmQsIG9wdGlvbnMubWVtb2l6ZSk7XG4gIGlmIChtZW1vaXplUmVzdWx0UmlnaHQgIT09IG51bGwpIHtcbiAgICByZXR1cm4gbWVtb2l6ZVJlc3VsdFJpZ2h0O1xuICB9XG4gIGlmIChjb21wYXJhdG9yKSB7XG4gICAgdmFyIGNvbXBhcmF0b3JSZXN1bHQgPSBjb21wYXJhdG9yKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCk7XG4gICAgaWYgKGNvbXBhcmF0b3JSZXN1bHQgPT09IGZhbHNlIHx8IGNvbXBhcmF0b3JSZXN1bHQgPT09IHRydWUpIHtcbiAgICAgIG1lbW9pemVTZXQobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zLm1lbW9pemUsIGNvbXBhcmF0b3JSZXN1bHQpO1xuICAgICAgcmV0dXJuIGNvbXBhcmF0b3JSZXN1bHQ7XG4gICAgfVxuICAgIHZhciBzaW1wbGVSZXN1bHQgPSBzaW1wbGVFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQpO1xuICAgIGlmIChzaW1wbGVSZXN1bHQgIT09IG51bGwpIHtcbiAgICAgIHJldHVybiBzaW1wbGVSZXN1bHQ7XG4gICAgfVxuICB9XG4gIHZhciBsZWZ0SGFuZFR5cGUgPSB0eXBlMihsZWZ0SGFuZE9wZXJhbmQpO1xuICBpZiAobGVmdEhhbmRUeXBlICE9PSB0eXBlMihyaWdodEhhbmRPcGVyYW5kKSkge1xuICAgIG1lbW9pemVTZXQobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zLm1lbW9pemUsIGZhbHNlKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgbWVtb2l6ZVNldChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMubWVtb2l6ZSwgdHJ1ZSk7XG4gIHZhciByZXN1bHQgPSBleHRlbnNpdmVEZWVwRXF1YWxCeVR5cGUobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBsZWZ0SGFuZFR5cGUsIG9wdGlvbnMpO1xuICBtZW1vaXplU2V0KGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucy5tZW1vaXplLCByZXN1bHQpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuX19uYW1lKGV4dGVuc2l2ZURlZXBFcXVhbCwgXCJleHRlbnNpdmVEZWVwRXF1YWxcIik7XG5mdW5jdGlvbiBleHRlbnNpdmVEZWVwRXF1YWxCeVR5cGUobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBsZWZ0SGFuZFR5cGUsIG9wdGlvbnMpIHtcbiAgc3dpdGNoIChsZWZ0SGFuZFR5cGUpIHtcbiAgICBjYXNlIFwiU3RyaW5nXCI6XG4gICAgY2FzZSBcIk51bWJlclwiOlxuICAgIGNhc2UgXCJCb29sZWFuXCI6XG4gICAgY2FzZSBcIkRhdGVcIjpcbiAgICAgIHJldHVybiBkZWVwRXF1YWwobGVmdEhhbmRPcGVyYW5kLnZhbHVlT2YoKSwgcmlnaHRIYW5kT3BlcmFuZC52YWx1ZU9mKCkpO1xuICAgIGNhc2UgXCJQcm9taXNlXCI6XG4gICAgY2FzZSBcIlN5bWJvbFwiOlxuICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgIGNhc2UgXCJXZWFrTWFwXCI6XG4gICAgY2FzZSBcIldlYWtTZXRcIjpcbiAgICAgIHJldHVybiBsZWZ0SGFuZE9wZXJhbmQgPT09IHJpZ2h0SGFuZE9wZXJhbmQ7XG4gICAgY2FzZSBcIkVycm9yXCI6XG4gICAgICByZXR1cm4ga2V5c0VxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgW1wibmFtZVwiLCBcIm1lc3NhZ2VcIiwgXCJjb2RlXCJdLCBvcHRpb25zKTtcbiAgICBjYXNlIFwiQXJndW1lbnRzXCI6XG4gICAgY2FzZSBcIkludDhBcnJheVwiOlxuICAgIGNhc2UgXCJVaW50OEFycmF5XCI6XG4gICAgY2FzZSBcIlVpbnQ4Q2xhbXBlZEFycmF5XCI6XG4gICAgY2FzZSBcIkludDE2QXJyYXlcIjpcbiAgICBjYXNlIFwiVWludDE2QXJyYXlcIjpcbiAgICBjYXNlIFwiSW50MzJBcnJheVwiOlxuICAgIGNhc2UgXCJVaW50MzJBcnJheVwiOlxuICAgIGNhc2UgXCJGbG9hdDMyQXJyYXlcIjpcbiAgICBjYXNlIFwiRmxvYXQ2NEFycmF5XCI6XG4gICAgY2FzZSBcIkFycmF5XCI6XG4gICAgICByZXR1cm4gaXRlcmFibGVFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMpO1xuICAgIGNhc2UgXCJSZWdFeHBcIjpcbiAgICAgIHJldHVybiByZWdleHBFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQpO1xuICAgIGNhc2UgXCJHZW5lcmF0b3JcIjpcbiAgICAgIHJldHVybiBnZW5lcmF0b3JFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMpO1xuICAgIGNhc2UgXCJEYXRhVmlld1wiOlxuICAgICAgcmV0dXJuIGl0ZXJhYmxlRXF1YWwobmV3IFVpbnQ4QXJyYXkobGVmdEhhbmRPcGVyYW5kLmJ1ZmZlciksIG5ldyBVaW50OEFycmF5KHJpZ2h0SGFuZE9wZXJhbmQuYnVmZmVyKSwgb3B0aW9ucyk7XG4gICAgY2FzZSBcIkFycmF5QnVmZmVyXCI6XG4gICAgICByZXR1cm4gaXRlcmFibGVFcXVhbChuZXcgVWludDhBcnJheShsZWZ0SGFuZE9wZXJhbmQpLCBuZXcgVWludDhBcnJheShyaWdodEhhbmRPcGVyYW5kKSwgb3B0aW9ucyk7XG4gICAgY2FzZSBcIlNldFwiOlxuICAgICAgcmV0dXJuIGVudHJpZXNFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMpO1xuICAgIGNhc2UgXCJNYXBcIjpcbiAgICAgIHJldHVybiBlbnRyaWVzRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKTtcbiAgICBjYXNlIFwiVGVtcG9yYWwuUGxhaW5EYXRlXCI6XG4gICAgY2FzZSBcIlRlbXBvcmFsLlBsYWluVGltZVwiOlxuICAgIGNhc2UgXCJUZW1wb3JhbC5QbGFpbkRhdGVUaW1lXCI6XG4gICAgY2FzZSBcIlRlbXBvcmFsLkluc3RhbnRcIjpcbiAgICBjYXNlIFwiVGVtcG9yYWwuWm9uZWREYXRlVGltZVwiOlxuICAgIGNhc2UgXCJUZW1wb3JhbC5QbGFpblllYXJNb250aFwiOlxuICAgIGNhc2UgXCJUZW1wb3JhbC5QbGFpbk1vbnRoRGF5XCI6XG4gICAgICByZXR1cm4gbGVmdEhhbmRPcGVyYW5kLmVxdWFscyhyaWdodEhhbmRPcGVyYW5kKTtcbiAgICBjYXNlIFwiVGVtcG9yYWwuRHVyYXRpb25cIjpcbiAgICAgIHJldHVybiBsZWZ0SGFuZE9wZXJhbmQudG90YWwoXCJuYW5vc2Vjb25kc1wiKSA9PT0gcmlnaHRIYW5kT3BlcmFuZC50b3RhbChcIm5hbm9zZWNvbmRzXCIpO1xuICAgIGNhc2UgXCJUZW1wb3JhbC5UaW1lWm9uZVwiOlxuICAgIGNhc2UgXCJUZW1wb3JhbC5DYWxlbmRhclwiOlxuICAgICAgcmV0dXJuIGxlZnRIYW5kT3BlcmFuZC50b1N0cmluZygpID09PSByaWdodEhhbmRPcGVyYW5kLnRvU3RyaW5nKCk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBvYmplY3RFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMpO1xuICB9XG59XG5fX25hbWUoZXh0ZW5zaXZlRGVlcEVxdWFsQnlUeXBlLCBcImV4dGVuc2l2ZURlZXBFcXVhbEJ5VHlwZVwiKTtcbmZ1bmN0aW9uIHJlZ2V4cEVxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCkge1xuICByZXR1cm4gbGVmdEhhbmRPcGVyYW5kLnRvU3RyaW5nKCkgPT09IHJpZ2h0SGFuZE9wZXJhbmQudG9TdHJpbmcoKTtcbn1cbl9fbmFtZShyZWdleHBFcXVhbCwgXCJyZWdleHBFcXVhbFwiKTtcbmZ1bmN0aW9uIGVudHJpZXNFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMpIHtcbiAgdHJ5IHtcbiAgICBpZiAobGVmdEhhbmRPcGVyYW5kLnNpemUgIT09IHJpZ2h0SGFuZE9wZXJhbmQuc2l6ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAobGVmdEhhbmRPcGVyYW5kLnNpemUgPT09IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSBjYXRjaCAoc2l6ZUVycm9yKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBsZWZ0SGFuZEl0ZW1zID0gW107XG4gIHZhciByaWdodEhhbmRJdGVtcyA9IFtdO1xuICBsZWZ0SGFuZE9wZXJhbmQuZm9yRWFjaCgvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIGdhdGhlckVudHJpZXMoa2V5LCB2YWx1ZSkge1xuICAgIGxlZnRIYW5kSXRlbXMucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9LCBcImdhdGhlckVudHJpZXNcIikpO1xuICByaWdodEhhbmRPcGVyYW5kLmZvckVhY2goLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBnYXRoZXJFbnRyaWVzKGtleSwgdmFsdWUpIHtcbiAgICByaWdodEhhbmRJdGVtcy5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0sIFwiZ2F0aGVyRW50cmllc1wiKSk7XG4gIHJldHVybiBpdGVyYWJsZUVxdWFsKGxlZnRIYW5kSXRlbXMuc29ydCgpLCByaWdodEhhbmRJdGVtcy5zb3J0KCksIG9wdGlvbnMpO1xufVxuX19uYW1lKGVudHJpZXNFcXVhbCwgXCJlbnRyaWVzRXF1YWxcIik7XG5mdW5jdGlvbiBpdGVyYWJsZUVxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucykge1xuICB2YXIgbGVuZ3RoID0gbGVmdEhhbmRPcGVyYW5kLmxlbmd0aDtcbiAgaWYgKGxlbmd0aCAhPT0gcmlnaHRIYW5kT3BlcmFuZC5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHZhciBpbmRleCA9IC0xO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGlmIChkZWVwRXF1YWwobGVmdEhhbmRPcGVyYW5kW2luZGV4XSwgcmlnaHRIYW5kT3BlcmFuZFtpbmRleF0sIG9wdGlvbnMpID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cbl9fbmFtZShpdGVyYWJsZUVxdWFsLCBcIml0ZXJhYmxlRXF1YWxcIik7XG5mdW5jdGlvbiBnZW5lcmF0b3JFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGl0ZXJhYmxlRXF1YWwoZ2V0R2VuZXJhdG9yRW50cmllcyhsZWZ0SGFuZE9wZXJhbmQpLCBnZXRHZW5lcmF0b3JFbnRyaWVzKHJpZ2h0SGFuZE9wZXJhbmQpLCBvcHRpb25zKTtcbn1cbl9fbmFtZShnZW5lcmF0b3JFcXVhbCwgXCJnZW5lcmF0b3JFcXVhbFwiKTtcbmZ1bmN0aW9uIGhhc0l0ZXJhdG9yRnVuY3Rpb24odGFyZ2V0KSB7XG4gIHJldHVybiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB0YXJnZXQgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgdGFyZ2V0W1N5bWJvbC5pdGVyYXRvcl0gPT09IFwiZnVuY3Rpb25cIjtcbn1cbl9fbmFtZShoYXNJdGVyYXRvckZ1bmN0aW9uLCBcImhhc0l0ZXJhdG9yRnVuY3Rpb25cIik7XG5mdW5jdGlvbiBnZXRJdGVyYXRvckVudHJpZXModGFyZ2V0KSB7XG4gIGlmIChoYXNJdGVyYXRvckZ1bmN0aW9uKHRhcmdldCkpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGdldEdlbmVyYXRvckVudHJpZXModGFyZ2V0W1N5bWJvbC5pdGVyYXRvcl0oKSk7XG4gICAgfSBjYXRjaCAoaXRlcmF0b3JFcnJvcikge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gW107XG59XG5fX25hbWUoZ2V0SXRlcmF0b3JFbnRyaWVzLCBcImdldEl0ZXJhdG9yRW50cmllc1wiKTtcbmZ1bmN0aW9uIGdldEdlbmVyYXRvckVudHJpZXMoZ2VuZXJhdG9yKSB7XG4gIHZhciBnZW5lcmF0b3JSZXN1bHQgPSBnZW5lcmF0b3IubmV4dCgpO1xuICB2YXIgYWNjdW11bGF0b3IgPSBbZ2VuZXJhdG9yUmVzdWx0LnZhbHVlXTtcbiAgd2hpbGUgKGdlbmVyYXRvclJlc3VsdC5kb25lID09PSBmYWxzZSkge1xuICAgIGdlbmVyYXRvclJlc3VsdCA9IGdlbmVyYXRvci5uZXh0KCk7XG4gICAgYWNjdW11bGF0b3IucHVzaChnZW5lcmF0b3JSZXN1bHQudmFsdWUpO1xuICB9XG4gIHJldHVybiBhY2N1bXVsYXRvcjtcbn1cbl9fbmFtZShnZXRHZW5lcmF0b3JFbnRyaWVzLCBcImdldEdlbmVyYXRvckVudHJpZXNcIik7XG5mdW5jdGlvbiBnZXRFbnVtZXJhYmxlS2V5cyh0YXJnZXQpIHtcbiAgdmFyIGtleXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIHRhcmdldCkge1xuICAgIGtleXMucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiBrZXlzO1xufVxuX19uYW1lKGdldEVudW1lcmFibGVLZXlzLCBcImdldEVudW1lcmFibGVLZXlzXCIpO1xuZnVuY3Rpb24gZ2V0RW51bWVyYWJsZVN5bWJvbHModGFyZ2V0KSB7XG4gIHZhciBrZXlzID0gW107XG4gIHZhciBhbGxLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0YXJnZXQpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbEtleXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICB2YXIga2V5ID0gYWxsS2V5c1tpXTtcbiAgICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkuZW51bWVyYWJsZSkge1xuICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBrZXlzO1xufVxuX19uYW1lKGdldEVudW1lcmFibGVTeW1ib2xzLCBcImdldEVudW1lcmFibGVTeW1ib2xzXCIpO1xuZnVuY3Rpb24ga2V5c0VxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwga2V5cywgb3B0aW9ucykge1xuICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gIGlmIChsZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgaWYgKGRlZXBFcXVhbChsZWZ0SGFuZE9wZXJhbmRba2V5c1tpXV0sIHJpZ2h0SGFuZE9wZXJhbmRba2V5c1tpXV0sIG9wdGlvbnMpID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cbl9fbmFtZShrZXlzRXF1YWwsIFwia2V5c0VxdWFsXCIpO1xuZnVuY3Rpb24gb2JqZWN0RXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKSB7XG4gIHZhciBsZWZ0SGFuZEtleXMgPSBnZXRFbnVtZXJhYmxlS2V5cyhsZWZ0SGFuZE9wZXJhbmQpO1xuICB2YXIgcmlnaHRIYW5kS2V5cyA9IGdldEVudW1lcmFibGVLZXlzKHJpZ2h0SGFuZE9wZXJhbmQpO1xuICB2YXIgbGVmdEhhbmRTeW1ib2xzID0gZ2V0RW51bWVyYWJsZVN5bWJvbHMobGVmdEhhbmRPcGVyYW5kKTtcbiAgdmFyIHJpZ2h0SGFuZFN5bWJvbHMgPSBnZXRFbnVtZXJhYmxlU3ltYm9scyhyaWdodEhhbmRPcGVyYW5kKTtcbiAgbGVmdEhhbmRLZXlzID0gbGVmdEhhbmRLZXlzLmNvbmNhdChsZWZ0SGFuZFN5bWJvbHMpO1xuICByaWdodEhhbmRLZXlzID0gcmlnaHRIYW5kS2V5cy5jb25jYXQocmlnaHRIYW5kU3ltYm9scyk7XG4gIGlmIChsZWZ0SGFuZEtleXMubGVuZ3RoICYmIGxlZnRIYW5kS2V5cy5sZW5ndGggPT09IHJpZ2h0SGFuZEtleXMubGVuZ3RoKSB7XG4gICAgaWYgKGl0ZXJhYmxlRXF1YWwobWFwU3ltYm9scyhsZWZ0SGFuZEtleXMpLnNvcnQoKSwgbWFwU3ltYm9scyhyaWdodEhhbmRLZXlzKS5zb3J0KCkpID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4ga2V5c0VxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgbGVmdEhhbmRLZXlzLCBvcHRpb25zKTtcbiAgfVxuICB2YXIgbGVmdEhhbmRFbnRyaWVzID0gZ2V0SXRlcmF0b3JFbnRyaWVzKGxlZnRIYW5kT3BlcmFuZCk7XG4gIHZhciByaWdodEhhbmRFbnRyaWVzID0gZ2V0SXRlcmF0b3JFbnRyaWVzKHJpZ2h0SGFuZE9wZXJhbmQpO1xuICBpZiAobGVmdEhhbmRFbnRyaWVzLmxlbmd0aCAmJiBsZWZ0SGFuZEVudHJpZXMubGVuZ3RoID09PSByaWdodEhhbmRFbnRyaWVzLmxlbmd0aCkge1xuICAgIGxlZnRIYW5kRW50cmllcy5zb3J0KCk7XG4gICAgcmlnaHRIYW5kRW50cmllcy5zb3J0KCk7XG4gICAgcmV0dXJuIGl0ZXJhYmxlRXF1YWwobGVmdEhhbmRFbnRyaWVzLCByaWdodEhhbmRFbnRyaWVzLCBvcHRpb25zKTtcbiAgfVxuICBpZiAobGVmdEhhbmRLZXlzLmxlbmd0aCA9PT0gMCAmJiBsZWZ0SGFuZEVudHJpZXMubGVuZ3RoID09PSAwICYmIHJpZ2h0SGFuZEtleXMubGVuZ3RoID09PSAwICYmIHJpZ2h0SGFuZEVudHJpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuX19uYW1lKG9iamVjdEVxdWFsLCBcIm9iamVjdEVxdWFsXCIpO1xuZnVuY3Rpb24gaXNQcmltaXRpdmUodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIjtcbn1cbl9fbmFtZShpc1ByaW1pdGl2ZSwgXCJpc1ByaW1pdGl2ZVwiKTtcbmZ1bmN0aW9uIG1hcFN5bWJvbHMoYXJyKSB7XG4gIHJldHVybiBhcnIubWFwKC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gbWFwU3ltYm9sKGVudHJ5KSB7XG4gICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gXCJzeW1ib2xcIikge1xuICAgICAgcmV0dXJuIGVudHJ5LnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIHJldHVybiBlbnRyeTtcbiAgfSwgXCJtYXBTeW1ib2xcIikpO1xufVxuX19uYW1lKG1hcFN5bWJvbHMsIFwibWFwU3ltYm9sc1wiKTtcblxuLy8gbm9kZV9tb2R1bGVzL3BhdGh2YWwvaW5kZXguanNcbmZ1bmN0aW9uIGhhc1Byb3BlcnR5KG9iaiwgbmFtZSkge1xuICBpZiAodHlwZW9mIG9iaiA9PT0gXCJ1bmRlZmluZWRcIiB8fCBvYmogPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIG5hbWUgaW4gT2JqZWN0KG9iaik7XG59XG5fX25hbWUoaGFzUHJvcGVydHksIFwiaGFzUHJvcGVydHlcIik7XG5mdW5jdGlvbiBwYXJzZVBhdGgocGF0aCkge1xuICBjb25zdCBzdHIgPSBwYXRoLnJlcGxhY2UoLyhbXlxcXFxdKVxcWy9nLCBcIiQxLltcIik7XG4gIGNvbnN0IHBhcnRzID0gc3RyLm1hdGNoKC8oXFxcXFxcLnxbXi5dKz8pKy9nKTtcbiAgcmV0dXJuIHBhcnRzLm1hcCgodmFsdWUpID0+IHtcbiAgICBpZiAodmFsdWUgPT09IFwiY29uc3RydWN0b3JcIiB8fCB2YWx1ZSA9PT0gXCJfX3Byb3RvX19cIiB8fCB2YWx1ZSA9PT0gXCJwcm90b3R5cGVcIikge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBjb25zdCByZWdleHAgPSAvXlxcWyhcXGQrKVxcXSQvO1xuICAgIGNvbnN0IG1BcnIgPSByZWdleHAuZXhlYyh2YWx1ZSk7XG4gICAgbGV0IHBhcnNlZCA9IG51bGw7XG4gICAgaWYgKG1BcnIpIHtcbiAgICAgIHBhcnNlZCA9IHsgaTogcGFyc2VGbG9hdChtQXJyWzFdKSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJzZWQgPSB7IHA6IHZhbHVlLnJlcGxhY2UoL1xcXFwoWy5bXFxdXSkvZywgXCIkMVwiKSB9O1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9KTtcbn1cbl9fbmFtZShwYXJzZVBhdGgsIFwicGFyc2VQYXRoXCIpO1xuZnVuY3Rpb24gaW50ZXJuYWxHZXRQYXRoVmFsdWUob2JqLCBwYXJzZWQsIHBhdGhEZXB0aCkge1xuICBsZXQgdGVtcG9yYXJ5VmFsdWUgPSBvYmo7XG4gIGxldCByZXMgPSBudWxsO1xuICBwYXRoRGVwdGggPSB0eXBlb2YgcGF0aERlcHRoID09PSBcInVuZGVmaW5lZFwiID8gcGFyc2VkLmxlbmd0aCA6IHBhdGhEZXB0aDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXRoRGVwdGg7IGkrKykge1xuICAgIGNvbnN0IHBhcnQgPSBwYXJzZWRbaV07XG4gICAgaWYgKHRlbXBvcmFyeVZhbHVlKSB7XG4gICAgICBpZiAodHlwZW9mIHBhcnQucCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICB0ZW1wb3JhcnlWYWx1ZSA9IHRlbXBvcmFyeVZhbHVlW3BhcnQuaV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0ZW1wb3JhcnlWYWx1ZSA9IHRlbXBvcmFyeVZhbHVlW3BhcnQucF07XG4gICAgICB9XG4gICAgICBpZiAoaSA9PT0gcGF0aERlcHRoIC0gMSkge1xuICAgICAgICByZXMgPSB0ZW1wb3JhcnlWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbl9fbmFtZShpbnRlcm5hbEdldFBhdGhWYWx1ZSwgXCJpbnRlcm5hbEdldFBhdGhWYWx1ZVwiKTtcbmZ1bmN0aW9uIGdldFBhdGhJbmZvKG9iaiwgcGF0aCkge1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZVBhdGgocGF0aCk7XG4gIGNvbnN0IGxhc3QgPSBwYXJzZWRbcGFyc2VkLmxlbmd0aCAtIDFdO1xuICBjb25zdCBpbmZvID0ge1xuICAgIHBhcmVudDogcGFyc2VkLmxlbmd0aCA+IDEgPyBpbnRlcm5hbEdldFBhdGhWYWx1ZShvYmosIHBhcnNlZCwgcGFyc2VkLmxlbmd0aCAtIDEpIDogb2JqLFxuICAgIG5hbWU6IGxhc3QucCB8fCBsYXN0LmksXG4gICAgdmFsdWU6IGludGVybmFsR2V0UGF0aFZhbHVlKG9iaiwgcGFyc2VkKVxuICB9O1xuICBpbmZvLmV4aXN0cyA9IGhhc1Byb3BlcnR5KGluZm8ucGFyZW50LCBpbmZvLm5hbWUpO1xuICByZXR1cm4gaW5mbztcbn1cbl9fbmFtZShnZXRQYXRoSW5mbywgXCJnZXRQYXRoSW5mb1wiKTtcblxuLy8gbGliL2NoYWkvYXNzZXJ0aW9uLmpzXG5mdW5jdGlvbiBBc3NlcnRpb24ob2JqLCBtc2csIHNzZmksIGxvY2tTc2ZpKSB7XG4gIGZsYWcodGhpcywgXCJzc2ZpXCIsIHNzZmkgfHwgQXNzZXJ0aW9uKTtcbiAgZmxhZyh0aGlzLCBcImxvY2tTc2ZpXCIsIGxvY2tTc2ZpKTtcbiAgZmxhZyh0aGlzLCBcIm9iamVjdFwiLCBvYmopO1xuICBmbGFnKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICBmbGFnKHRoaXMsIFwiZXFsXCIsIGNvbmZpZy5kZWVwRXF1YWwgfHwgZGVlcF9lcWxfZGVmYXVsdCk7XG4gIHJldHVybiBwcm94aWZ5KHRoaXMpO1xufVxuX19uYW1lKEFzc2VydGlvbiwgXCJBc3NlcnRpb25cIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQXNzZXJ0aW9uLCBcImluY2x1ZGVTdGFja1wiLCB7XG4gIGdldDogZnVuY3Rpb24oKSB7XG4gICAgY29uc29sZS53YXJuKFwiQXNzZXJ0aW9uLmluY2x1ZGVTdGFjayBpcyBkZXByZWNhdGVkLCB1c2UgY2hhaS5jb25maWcuaW5jbHVkZVN0YWNrIGluc3RlYWQuXCIpO1xuICAgIHJldHVybiBjb25maWcuaW5jbHVkZVN0YWNrO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgY29uc29sZS53YXJuKFwiQXNzZXJ0aW9uLmluY2x1ZGVTdGFjayBpcyBkZXByZWNhdGVkLCB1c2UgY2hhaS5jb25maWcuaW5jbHVkZVN0YWNrIGluc3RlYWQuXCIpO1xuICAgIGNvbmZpZy5pbmNsdWRlU3RhY2sgPSB2YWx1ZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQXNzZXJ0aW9uLCBcInNob3dEaWZmXCIsIHtcbiAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICBjb25zb2xlLndhcm4oXCJBc3NlcnRpb24uc2hvd0RpZmYgaXMgZGVwcmVjYXRlZCwgdXNlIGNoYWkuY29uZmlnLnNob3dEaWZmIGluc3RlYWQuXCIpO1xuICAgIHJldHVybiBjb25maWcuc2hvd0RpZmY7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24odmFsdWUpIHtcbiAgICBjb25zb2xlLndhcm4oXCJBc3NlcnRpb24uc2hvd0RpZmYgaXMgZGVwcmVjYXRlZCwgdXNlIGNoYWkuY29uZmlnLnNob3dEaWZmIGluc3RlYWQuXCIpO1xuICAgIGNvbmZpZy5zaG93RGlmZiA9IHZhbHVlO1xuICB9XG59KTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eSA9IGZ1bmN0aW9uKG5hbWUsIGZuKSB7XG4gIGFkZFByb3BlcnR5KHRoaXMucHJvdG90eXBlLCBuYW1lLCBmbik7XG59O1xuQXNzZXJ0aW9uLmFkZE1ldGhvZCA9IGZ1bmN0aW9uKG5hbWUsIGZuKSB7XG4gIGFkZE1ldGhvZCh0aGlzLnByb3RvdHlwZSwgbmFtZSwgZm4pO1xufTtcbkFzc2VydGlvbi5hZGRDaGFpbmFibGVNZXRob2QgPSBmdW5jdGlvbihuYW1lLCBmbiwgY2hhaW5pbmdCZWhhdmlvcikge1xuICBhZGRDaGFpbmFibGVNZXRob2QodGhpcy5wcm90b3R5cGUsIG5hbWUsIGZuLCBjaGFpbmluZ0JlaGF2aW9yKTtcbn07XG5Bc3NlcnRpb24ub3ZlcndyaXRlUHJvcGVydHkgPSBmdW5jdGlvbihuYW1lLCBmbikge1xuICBvdmVyd3JpdGVQcm9wZXJ0eSh0aGlzLnByb3RvdHlwZSwgbmFtZSwgZm4pO1xufTtcbkFzc2VydGlvbi5vdmVyd3JpdGVNZXRob2QgPSBmdW5jdGlvbihuYW1lLCBmbikge1xuICBvdmVyd3JpdGVNZXRob2QodGhpcy5wcm90b3R5cGUsIG5hbWUsIGZuKTtcbn07XG5Bc3NlcnRpb24ub3ZlcndyaXRlQ2hhaW5hYmxlTWV0aG9kID0gZnVuY3Rpb24obmFtZSwgZm4sIGNoYWluaW5nQmVoYXZpb3IpIHtcbiAgb3ZlcndyaXRlQ2hhaW5hYmxlTWV0aG9kKHRoaXMucHJvdG90eXBlLCBuYW1lLCBmbiwgY2hhaW5pbmdCZWhhdmlvcik7XG59O1xuQXNzZXJ0aW9uLnByb3RvdHlwZS5hc3NlcnQgPSBmdW5jdGlvbihleHByLCBtc2csIG5lZ2F0ZU1zZywgZXhwZWN0ZWQsIF9hY3R1YWwsIHNob3dEaWZmKSB7XG4gIHZhciBvayA9IHRlc3QodGhpcywgYXJndW1lbnRzKTtcbiAgaWYgKGZhbHNlICE9PSBzaG93RGlmZilcbiAgICBzaG93RGlmZiA9IHRydWU7XG4gIGlmICh2b2lkIDAgPT09IGV4cGVjdGVkICYmIHZvaWQgMCA9PT0gX2FjdHVhbClcbiAgICBzaG93RGlmZiA9IGZhbHNlO1xuICBpZiAodHJ1ZSAhPT0gY29uZmlnLnNob3dEaWZmKVxuICAgIHNob3dEaWZmID0gZmFsc2U7XG4gIGlmICghb2spIHtcbiAgICBtc2cgPSBnZXRNZXNzYWdlMih0aGlzLCBhcmd1bWVudHMpO1xuICAgIHZhciBhY3R1YWwgPSBnZXRBY3R1YWwodGhpcywgYXJndW1lbnRzKTtcbiAgICB2YXIgYXNzZXJ0aW9uRXJyb3JPYmplY3RQcm9wZXJ0aWVzID0ge1xuICAgICAgYWN0dWFsLFxuICAgICAgZXhwZWN0ZWQsXG4gICAgICBzaG93RGlmZlxuICAgIH07XG4gICAgdmFyIG9wZXJhdG9yID0gZ2V0T3BlcmF0b3IodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAob3BlcmF0b3IpIHtcbiAgICAgIGFzc2VydGlvbkVycm9yT2JqZWN0UHJvcGVydGllcy5vcGVyYXRvciA9IG9wZXJhdG9yO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICBtc2csXG4gICAgICBhc3NlcnRpb25FcnJvck9iamVjdFByb3BlcnRpZXMsXG4gICAgICBjb25maWcuaW5jbHVkZVN0YWNrID8gdGhpcy5hc3NlcnQgOiBmbGFnKHRoaXMsIFwic3NmaVwiKVxuICAgICk7XG4gIH1cbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gIEFzc2VydGlvbi5wcm90b3R5cGUsXG4gIFwiX29ialwiLFxuICB7XG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBmbGFnKHRoaXMsIFwib2JqZWN0XCIpO1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbih2YWwpIHtcbiAgICAgIGZsYWcodGhpcywgXCJvYmplY3RcIiwgdmFsKTtcbiAgICB9XG4gIH1cbik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL2lzUHJveHlFbmFibGVkLmpzXG5mdW5jdGlvbiBpc1Byb3h5RW5hYmxlZCgpIHtcbiAgcmV0dXJuIGNvbmZpZy51c2VQcm94eSAmJiB0eXBlb2YgUHJveHkgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIFJlZmxlY3QgIT09IFwidW5kZWZpbmVkXCI7XG59XG5fX25hbWUoaXNQcm94eUVuYWJsZWQsIFwiaXNQcm94eUVuYWJsZWRcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL2FkZFByb3BlcnR5LmpzXG5mdW5jdGlvbiBhZGRQcm9wZXJ0eShjdHgsIG5hbWUsIGdldHRlcikge1xuICBnZXR0ZXIgPSBnZXR0ZXIgPT09IHZvaWQgMCA/IGZ1bmN0aW9uKCkge1xuICB9IDogZ2V0dGVyO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgY3R4LFxuICAgIG5hbWUsXG4gICAge1xuICAgICAgZ2V0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHByb3BlcnR5R2V0dGVyKCkge1xuICAgICAgICBpZiAoIWlzUHJveHlFbmFibGVkKCkgJiYgIWZsYWcodGhpcywgXCJsb2NrU3NmaVwiKSkge1xuICAgICAgICAgIGZsYWcodGhpcywgXCJzc2ZpXCIsIHByb3BlcnR5R2V0dGVyKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVzdWx0ID0gZ2V0dGVyLmNhbGwodGhpcyk7XG4gICAgICAgIGlmIChyZXN1bHQgIT09IHZvaWQgMClcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB2YXIgbmV3QXNzZXJ0aW9uID0gbmV3IEFzc2VydGlvbigpO1xuICAgICAgICB0cmFuc2ZlckZsYWdzKHRoaXMsIG5ld0Fzc2VydGlvbik7XG4gICAgICAgIHJldHVybiBuZXdBc3NlcnRpb247XG4gICAgICB9LCBcInByb3BlcnR5R2V0dGVyXCIpLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICApO1xufVxuX19uYW1lKGFkZFByb3BlcnR5LCBcImFkZFByb3BlcnR5XCIpO1xuXG4vLyBsaWIvY2hhaS91dGlscy9hZGRMZW5ndGhHdWFyZC5qc1xudmFyIGZuTGVuZ3RoRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZnVuY3Rpb24oKSB7XG59LCBcImxlbmd0aFwiKTtcbmZ1bmN0aW9uIGFkZExlbmd0aEd1YXJkKGZuLCBhc3NlcnRpb25OYW1lLCBpc0NoYWluYWJsZSkge1xuICBpZiAoIWZuTGVuZ3RoRGVzYy5jb25maWd1cmFibGUpXG4gICAgcmV0dXJuIGZuO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sIFwibGVuZ3RoXCIsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKGlzQ2hhaW5hYmxlKSB7XG4gICAgICAgIHRocm93IEVycm9yKFwiSW52YWxpZCBDaGFpIHByb3BlcnR5OiBcIiArIGFzc2VydGlvbk5hbWUgKyAnLmxlbmd0aC4gRHVlIHRvIGEgY29tcGF0aWJpbGl0eSBpc3N1ZSwgXCJsZW5ndGhcIiBjYW5ub3QgZGlyZWN0bHkgZm9sbG93IFwiJyArIGFzc2VydGlvbk5hbWUgKyAnXCIuIFVzZSBcIicgKyBhc3NlcnRpb25OYW1lICsgJy5sZW5ndGhPZlwiIGluc3RlYWQuJyk7XG4gICAgICB9XG4gICAgICB0aHJvdyBFcnJvcihcIkludmFsaWQgQ2hhaSBwcm9wZXJ0eTogXCIgKyBhc3NlcnRpb25OYW1lICsgJy5sZW5ndGguIFNlZSBkb2NzIGZvciBwcm9wZXIgdXNhZ2Ugb2YgXCInICsgYXNzZXJ0aW9uTmFtZSArICdcIi4nKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZm47XG59XG5fX25hbWUoYWRkTGVuZ3RoR3VhcmQsIFwiYWRkTGVuZ3RoR3VhcmRcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL2dldFByb3BlcnRpZXMuanNcbmZ1bmN0aW9uIGdldFByb3BlcnRpZXMob2JqZWN0KSB7XG4gIHZhciByZXN1bHQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QpO1xuICBmdW5jdGlvbiBhZGRQcm9wZXJ0eTIocHJvcGVydHkpIHtcbiAgICBpZiAocmVzdWx0LmluZGV4T2YocHJvcGVydHkpID09PSAtMSkge1xuICAgICAgcmVzdWx0LnB1c2gocHJvcGVydHkpO1xuICAgIH1cbiAgfVxuICBfX25hbWUoYWRkUHJvcGVydHkyLCBcImFkZFByb3BlcnR5XCIpO1xuICB2YXIgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTtcbiAgd2hpbGUgKHByb3RvICE9PSBudWxsKSB7XG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocHJvdG8pLmZvckVhY2goYWRkUHJvcGVydHkyKTtcbiAgICBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90byk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbl9fbmFtZShnZXRQcm9wZXJ0aWVzLCBcImdldFByb3BlcnRpZXNcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL3Byb3hpZnkuanNcbnZhciBidWlsdGlucyA9IFtcIl9fZmxhZ3NcIiwgXCJfX21ldGhvZHNcIiwgXCJfb2JqXCIsIFwiYXNzZXJ0XCJdO1xuZnVuY3Rpb24gcHJveGlmeShvYmosIG5vbkNoYWluYWJsZU1ldGhvZE5hbWUpIHtcbiAgaWYgKCFpc1Byb3h5RW5hYmxlZCgpKVxuICAgIHJldHVybiBvYmo7XG4gIHJldHVybiBuZXcgUHJveHkob2JqLCB7XG4gICAgZ2V0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHByb3h5R2V0dGVyKHRhcmdldCwgcHJvcGVydHkpIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvcGVydHkgPT09IFwic3RyaW5nXCIgJiYgY29uZmlnLnByb3h5RXhjbHVkZWRLZXlzLmluZGV4T2YocHJvcGVydHkpID09PSAtMSAmJiAhUmVmbGVjdC5oYXModGFyZ2V0LCBwcm9wZXJ0eSkpIHtcbiAgICAgICAgaWYgKG5vbkNoYWluYWJsZU1ldGhvZE5hbWUpIHtcbiAgICAgICAgICB0aHJvdyBFcnJvcihcIkludmFsaWQgQ2hhaSBwcm9wZXJ0eTogXCIgKyBub25DaGFpbmFibGVNZXRob2ROYW1lICsgXCIuXCIgKyBwcm9wZXJ0eSArICcuIFNlZSBkb2NzIGZvciBwcm9wZXIgdXNhZ2Ugb2YgXCInICsgbm9uQ2hhaW5hYmxlTWV0aG9kTmFtZSArICdcIi4nKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgc3VnZ2VzdGlvbiA9IG51bGw7XG4gICAgICAgIHZhciBzdWdnZXN0aW9uRGlzdGFuY2UgPSA0O1xuICAgICAgICBnZXRQcm9wZXJ0aWVzKHRhcmdldCkuZm9yRWFjaChmdW5jdGlvbihwcm9wKSB7XG4gICAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KHByb3ApICYmIGJ1aWx0aW5zLmluZGV4T2YocHJvcCkgPT09IC0xKSB7XG4gICAgICAgICAgICB2YXIgZGlzdCA9IHN0cmluZ0Rpc3RhbmNlQ2FwcGVkKFxuICAgICAgICAgICAgICBwcm9wZXJ0eSxcbiAgICAgICAgICAgICAgcHJvcCxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbkRpc3RhbmNlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGRpc3QgPCBzdWdnZXN0aW9uRGlzdGFuY2UpIHtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbiA9IHByb3A7XG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb25EaXN0YW5jZSA9IGRpc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHN1Z2dlc3Rpb24gIT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBFcnJvcihcIkludmFsaWQgQ2hhaSBwcm9wZXJ0eTogXCIgKyBwcm9wZXJ0eSArICcuIERpZCB5b3UgbWVhbiBcIicgKyBzdWdnZXN0aW9uICsgJ1wiPycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IEVycm9yKFwiSW52YWxpZCBDaGFpIHByb3BlcnR5OiBcIiArIHByb3BlcnR5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGJ1aWx0aW5zLmluZGV4T2YocHJvcGVydHkpID09PSAtMSAmJiAhZmxhZyh0YXJnZXQsIFwibG9ja1NzZmlcIikpIHtcbiAgICAgICAgZmxhZyh0YXJnZXQsIFwic3NmaVwiLCBwcm94eUdldHRlcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gUmVmbGVjdC5nZXQodGFyZ2V0LCBwcm9wZXJ0eSk7XG4gICAgfSwgXCJwcm94eUdldHRlclwiKVxuICB9KTtcbn1cbl9fbmFtZShwcm94aWZ5LCBcInByb3hpZnlcIik7XG5mdW5jdGlvbiBzdHJpbmdEaXN0YW5jZUNhcHBlZChzdHJBLCBzdHJCLCBjYXApIHtcbiAgaWYgKE1hdGguYWJzKHN0ckEubGVuZ3RoIC0gc3RyQi5sZW5ndGgpID49IGNhcCkge1xuICAgIHJldHVybiBjYXA7XG4gIH1cbiAgdmFyIG1lbW8gPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPD0gc3RyQS5sZW5ndGg7IGkrKykge1xuICAgIG1lbW9baV0gPSBBcnJheShzdHJCLmxlbmd0aCArIDEpLmZpbGwoMCk7XG4gICAgbWVtb1tpXVswXSA9IGk7XG4gIH1cbiAgZm9yICh2YXIgaiA9IDA7IGogPCBzdHJCLmxlbmd0aDsgaisrKSB7XG4gICAgbWVtb1swXVtqXSA9IGo7XG4gIH1cbiAgZm9yICh2YXIgaSA9IDE7IGkgPD0gc3RyQS5sZW5ndGg7IGkrKykge1xuICAgIHZhciBjaCA9IHN0ckEuY2hhckNvZGVBdChpIC0gMSk7XG4gICAgZm9yICh2YXIgaiA9IDE7IGogPD0gc3RyQi5sZW5ndGg7IGorKykge1xuICAgICAgaWYgKE1hdGguYWJzKGkgLSBqKSA+PSBjYXApIHtcbiAgICAgICAgbWVtb1tpXVtqXSA9IGNhcDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBtZW1vW2ldW2pdID0gTWF0aC5taW4oXG4gICAgICAgIG1lbW9baSAtIDFdW2pdICsgMSxcbiAgICAgICAgbWVtb1tpXVtqIC0gMV0gKyAxLFxuICAgICAgICBtZW1vW2kgLSAxXVtqIC0gMV0gKyAoY2ggPT09IHN0ckIuY2hhckNvZGVBdChqIC0gMSkgPyAwIDogMSlcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHJldHVybiBtZW1vW3N0ckEubGVuZ3RoXVtzdHJCLmxlbmd0aF07XG59XG5fX25hbWUoc3RyaW5nRGlzdGFuY2VDYXBwZWQsIFwic3RyaW5nRGlzdGFuY2VDYXBwZWRcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL2FkZE1ldGhvZC5qc1xuZnVuY3Rpb24gYWRkTWV0aG9kKGN0eCwgbmFtZSwgbWV0aG9kKSB7XG4gIHZhciBtZXRob2RXcmFwcGVyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICBpZiAoIWZsYWcodGhpcywgXCJsb2NrU3NmaVwiKSkge1xuICAgICAgZmxhZyh0aGlzLCBcInNzZmlcIiwgbWV0aG9kV3JhcHBlcik7XG4gICAgfVxuICAgIHZhciByZXN1bHQgPSBtZXRob2QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAocmVzdWx0ICE9PSB2b2lkIDApXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIHZhciBuZXdBc3NlcnRpb24gPSBuZXcgQXNzZXJ0aW9uKCk7XG4gICAgdHJhbnNmZXJGbGFncyh0aGlzLCBuZXdBc3NlcnRpb24pO1xuICAgIHJldHVybiBuZXdBc3NlcnRpb247XG4gIH0sIFwibWV0aG9kV3JhcHBlclwiKTtcbiAgYWRkTGVuZ3RoR3VhcmQobWV0aG9kV3JhcHBlciwgbmFtZSwgZmFsc2UpO1xuICBjdHhbbmFtZV0gPSBwcm94aWZ5KG1ldGhvZFdyYXBwZXIsIG5hbWUpO1xufVxuX19uYW1lKGFkZE1ldGhvZCwgXCJhZGRNZXRob2RcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL292ZXJ3cml0ZVByb3BlcnR5LmpzXG5mdW5jdGlvbiBvdmVyd3JpdGVQcm9wZXJ0eShjdHgsIG5hbWUsIGdldHRlcikge1xuICB2YXIgX2dldCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY3R4LCBuYW1lKSwgX3N1cGVyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgfSwgXCJfc3VwZXJcIik7XG4gIGlmIChfZ2V0ICYmIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9nZXQuZ2V0KVxuICAgIF9zdXBlciA9IF9nZXQuZ2V0O1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgY3R4LFxuICAgIG5hbWUsXG4gICAge1xuICAgICAgZ2V0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIG92ZXJ3cml0aW5nUHJvcGVydHlHZXR0ZXIoKSB7XG4gICAgICAgIGlmICghaXNQcm94eUVuYWJsZWQoKSAmJiAhZmxhZyh0aGlzLCBcImxvY2tTc2ZpXCIpKSB7XG4gICAgICAgICAgZmxhZyh0aGlzLCBcInNzZmlcIiwgb3ZlcndyaXRpbmdQcm9wZXJ0eUdldHRlcik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG9yaWdMb2NrU3NmaSA9IGZsYWcodGhpcywgXCJsb2NrU3NmaVwiKTtcbiAgICAgICAgZmxhZyh0aGlzLCBcImxvY2tTc2ZpXCIsIHRydWUpO1xuICAgICAgICB2YXIgcmVzdWx0ID0gZ2V0dGVyKF9zdXBlcikuY2FsbCh0aGlzKTtcbiAgICAgICAgZmxhZyh0aGlzLCBcImxvY2tTc2ZpXCIsIG9yaWdMb2NrU3NmaSk7XG4gICAgICAgIGlmIChyZXN1bHQgIT09IHZvaWQgMCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG5ld0Fzc2VydGlvbiA9IG5ldyBBc3NlcnRpb24oKTtcbiAgICAgICAgdHJhbnNmZXJGbGFncyh0aGlzLCBuZXdBc3NlcnRpb24pO1xuICAgICAgICByZXR1cm4gbmV3QXNzZXJ0aW9uO1xuICAgICAgfSwgXCJvdmVyd3JpdGluZ1Byb3BlcnR5R2V0dGVyXCIpLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICApO1xufVxuX19uYW1lKG92ZXJ3cml0ZVByb3BlcnR5LCBcIm92ZXJ3cml0ZVByb3BlcnR5XCIpO1xuXG4vLyBsaWIvY2hhaS91dGlscy9vdmVyd3JpdGVNZXRob2QuanNcbmZ1bmN0aW9uIG92ZXJ3cml0ZU1ldGhvZChjdHgsIG5hbWUsIG1ldGhvZCkge1xuICB2YXIgX21ldGhvZCA9IGN0eFtuYW1lXSwgX3N1cGVyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IobmFtZSArIFwiIGlzIG5vdCBhIGZ1bmN0aW9uXCIpO1xuICB9LCBcIl9zdXBlclwiKTtcbiAgaWYgKF9tZXRob2QgJiYgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX21ldGhvZClcbiAgICBfc3VwZXIgPSBfbWV0aG9kO1xuICB2YXIgb3ZlcndyaXRpbmdNZXRob2RXcmFwcGVyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICBpZiAoIWZsYWcodGhpcywgXCJsb2NrU3NmaVwiKSkge1xuICAgICAgZmxhZyh0aGlzLCBcInNzZmlcIiwgb3ZlcndyaXRpbmdNZXRob2RXcmFwcGVyKTtcbiAgICB9XG4gICAgdmFyIG9yaWdMb2NrU3NmaSA9IGZsYWcodGhpcywgXCJsb2NrU3NmaVwiKTtcbiAgICBmbGFnKHRoaXMsIFwibG9ja1NzZmlcIiwgdHJ1ZSk7XG4gICAgdmFyIHJlc3VsdCA9IG1ldGhvZChfc3VwZXIpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgZmxhZyh0aGlzLCBcImxvY2tTc2ZpXCIsIG9yaWdMb2NrU3NmaSk7XG4gICAgaWYgKHJlc3VsdCAhPT0gdm9pZCAwKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICB2YXIgbmV3QXNzZXJ0aW9uID0gbmV3IEFzc2VydGlvbigpO1xuICAgIHRyYW5zZmVyRmxhZ3ModGhpcywgbmV3QXNzZXJ0aW9uKTtcbiAgICByZXR1cm4gbmV3QXNzZXJ0aW9uO1xuICB9LCBcIm92ZXJ3cml0aW5nTWV0aG9kV3JhcHBlclwiKTtcbiAgYWRkTGVuZ3RoR3VhcmQob3ZlcndyaXRpbmdNZXRob2RXcmFwcGVyLCBuYW1lLCBmYWxzZSk7XG4gIGN0eFtuYW1lXSA9IHByb3hpZnkob3ZlcndyaXRpbmdNZXRob2RXcmFwcGVyLCBuYW1lKTtcbn1cbl9fbmFtZShvdmVyd3JpdGVNZXRob2QsIFwib3ZlcndyaXRlTWV0aG9kXCIpO1xuXG4vLyBsaWIvY2hhaS91dGlscy9hZGRDaGFpbmFibGVNZXRob2QuanNcbnZhciBjYW5TZXRQcm90b3R5cGUgPSB0eXBlb2YgT2JqZWN0LnNldFByb3RvdHlwZU9mID09PSBcImZ1bmN0aW9uXCI7XG52YXIgdGVzdEZuID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbn0sIFwidGVzdEZuXCIpO1xudmFyIGV4Y2x1ZGVOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3RGbikuZmlsdGVyKGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIHByb3BEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0ZXN0Rm4sIG5hbWUpO1xuICBpZiAodHlwZW9mIHByb3BEZXNjICE9PSBcIm9iamVjdFwiKVxuICAgIHJldHVybiB0cnVlO1xuICByZXR1cm4gIXByb3BEZXNjLmNvbmZpZ3VyYWJsZTtcbn0pO1xudmFyIGNhbGwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtcbnZhciBhcHBseSA9IEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseTtcbmZ1bmN0aW9uIGFkZENoYWluYWJsZU1ldGhvZChjdHgsIG5hbWUsIG1ldGhvZCwgY2hhaW5pbmdCZWhhdmlvcikge1xuICBpZiAodHlwZW9mIGNoYWluaW5nQmVoYXZpb3IgIT09IFwiZnVuY3Rpb25cIikge1xuICAgIGNoYWluaW5nQmVoYXZpb3IgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgIH0sIFwiY2hhaW5pbmdCZWhhdmlvclwiKTtcbiAgfVxuICB2YXIgY2hhaW5hYmxlQmVoYXZpb3IgPSB7XG4gICAgbWV0aG9kLFxuICAgIGNoYWluaW5nQmVoYXZpb3JcbiAgfTtcbiAgaWYgKCFjdHguX19tZXRob2RzKSB7XG4gICAgY3R4Ll9fbWV0aG9kcyA9IHt9O1xuICB9XG4gIGN0eC5fX21ldGhvZHNbbmFtZV0gPSBjaGFpbmFibGVCZWhhdmlvcjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgIGN0eCxcbiAgICBuYW1lLFxuICAgIHtcbiAgICAgIGdldDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBjaGFpbmFibGVNZXRob2RHZXR0ZXIoKSB7XG4gICAgICAgIGNoYWluYWJsZUJlaGF2aW9yLmNoYWluaW5nQmVoYXZpb3IuY2FsbCh0aGlzKTtcbiAgICAgICAgdmFyIGNoYWluYWJsZU1ldGhvZFdyYXBwZXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGlmICghZmxhZyh0aGlzLCBcImxvY2tTc2ZpXCIpKSB7XG4gICAgICAgICAgICBmbGFnKHRoaXMsIFwic3NmaVwiLCBjaGFpbmFibGVNZXRob2RXcmFwcGVyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIHJlc3VsdCA9IGNoYWluYWJsZUJlaGF2aW9yLm1ldGhvZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgIGlmIChyZXN1bHQgIT09IHZvaWQgMCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIG5ld0Fzc2VydGlvbiA9IG5ldyBBc3NlcnRpb24oKTtcbiAgICAgICAgICB0cmFuc2ZlckZsYWdzKHRoaXMsIG5ld0Fzc2VydGlvbik7XG4gICAgICAgICAgcmV0dXJuIG5ld0Fzc2VydGlvbjtcbiAgICAgICAgfSwgXCJjaGFpbmFibGVNZXRob2RXcmFwcGVyXCIpO1xuICAgICAgICBhZGRMZW5ndGhHdWFyZChjaGFpbmFibGVNZXRob2RXcmFwcGVyLCBuYW1lLCB0cnVlKTtcbiAgICAgICAgaWYgKGNhblNldFByb3RvdHlwZSkge1xuICAgICAgICAgIHZhciBwcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHRoaXMpO1xuICAgICAgICAgIHByb3RvdHlwZS5jYWxsID0gY2FsbDtcbiAgICAgICAgICBwcm90b3R5cGUuYXBwbHkgPSBhcHBseTtcbiAgICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoY2hhaW5hYmxlTWV0aG9kV3JhcHBlciwgcHJvdG90eXBlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgYXNzZXJ0ZXJOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGN0eCk7XG4gICAgICAgICAgYXNzZXJ0ZXJOYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKGFzc2VydGVyTmFtZSkge1xuICAgICAgICAgICAgaWYgKGV4Y2x1ZGVOYW1lcy5pbmRleE9mKGFzc2VydGVyTmFtZSkgIT09IC0xKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBwZCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY3R4LCBhc3NlcnRlck5hbWUpO1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNoYWluYWJsZU1ldGhvZFdyYXBwZXIsIGFzc2VydGVyTmFtZSwgcGQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRyYW5zZmVyRmxhZ3ModGhpcywgY2hhaW5hYmxlTWV0aG9kV3JhcHBlcik7XG4gICAgICAgIHJldHVybiBwcm94aWZ5KGNoYWluYWJsZU1ldGhvZFdyYXBwZXIpO1xuICAgICAgfSwgXCJjaGFpbmFibGVNZXRob2RHZXR0ZXJcIiksXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gICk7XG59XG5fX25hbWUoYWRkQ2hhaW5hYmxlTWV0aG9kLCBcImFkZENoYWluYWJsZU1ldGhvZFwiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvb3ZlcndyaXRlQ2hhaW5hYmxlTWV0aG9kLmpzXG5mdW5jdGlvbiBvdmVyd3JpdGVDaGFpbmFibGVNZXRob2QoY3R4LCBuYW1lLCBtZXRob2QsIGNoYWluaW5nQmVoYXZpb3IpIHtcbiAgdmFyIGNoYWluYWJsZUJlaGF2aW9yID0gY3R4Ll9fbWV0aG9kc1tuYW1lXTtcbiAgdmFyIF9jaGFpbmluZ0JlaGF2aW9yID0gY2hhaW5hYmxlQmVoYXZpb3IuY2hhaW5pbmdCZWhhdmlvcjtcbiAgY2hhaW5hYmxlQmVoYXZpb3IuY2hhaW5pbmdCZWhhdmlvciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gb3ZlcndyaXRpbmdDaGFpbmFibGVNZXRob2RHZXR0ZXIoKSB7XG4gICAgdmFyIHJlc3VsdCA9IGNoYWluaW5nQmVoYXZpb3IoX2NoYWluaW5nQmVoYXZpb3IpLmNhbGwodGhpcyk7XG4gICAgaWYgKHJlc3VsdCAhPT0gdm9pZCAwKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICB2YXIgbmV3QXNzZXJ0aW9uID0gbmV3IEFzc2VydGlvbigpO1xuICAgIHRyYW5zZmVyRmxhZ3ModGhpcywgbmV3QXNzZXJ0aW9uKTtcbiAgICByZXR1cm4gbmV3QXNzZXJ0aW9uO1xuICB9LCBcIm92ZXJ3cml0aW5nQ2hhaW5hYmxlTWV0aG9kR2V0dGVyXCIpO1xuICB2YXIgX21ldGhvZCA9IGNoYWluYWJsZUJlaGF2aW9yLm1ldGhvZDtcbiAgY2hhaW5hYmxlQmVoYXZpb3IubWV0aG9kID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBvdmVyd3JpdGluZ0NoYWluYWJsZU1ldGhvZFdyYXBwZXIoKSB7XG4gICAgdmFyIHJlc3VsdCA9IG1ldGhvZChfbWV0aG9kKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmIChyZXN1bHQgIT09IHZvaWQgMCkge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgdmFyIG5ld0Fzc2VydGlvbiA9IG5ldyBBc3NlcnRpb24oKTtcbiAgICB0cmFuc2ZlckZsYWdzKHRoaXMsIG5ld0Fzc2VydGlvbik7XG4gICAgcmV0dXJuIG5ld0Fzc2VydGlvbjtcbiAgfSwgXCJvdmVyd3JpdGluZ0NoYWluYWJsZU1ldGhvZFdyYXBwZXJcIik7XG59XG5fX25hbWUob3ZlcndyaXRlQ2hhaW5hYmxlTWV0aG9kLCBcIm92ZXJ3cml0ZUNoYWluYWJsZU1ldGhvZFwiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvY29tcGFyZUJ5SW5zcGVjdC5qc1xuZnVuY3Rpb24gY29tcGFyZUJ5SW5zcGVjdChhLCBiKSB7XG4gIHJldHVybiBpbnNwZWN0MihhKSA8IGluc3BlY3QyKGIpID8gLTEgOiAxO1xufVxuX19uYW1lKGNvbXBhcmVCeUluc3BlY3QsIFwiY29tcGFyZUJ5SW5zcGVjdFwiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvZ2V0T3duRW51bWVyYWJsZVByb3BlcnR5U3ltYm9scy5qc1xuZnVuY3Rpb24gZ2V0T3duRW51bWVyYWJsZVByb3BlcnR5U3ltYm9scyhvYmopIHtcbiAgaWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICE9PSBcImZ1bmN0aW9uXCIpXG4gICAgcmV0dXJuIFtdO1xuICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmopLmZpbHRlcihmdW5jdGlvbihzeW0pIHtcbiAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIHN5bSkuZW51bWVyYWJsZTtcbiAgfSk7XG59XG5fX25hbWUoZ2V0T3duRW51bWVyYWJsZVByb3BlcnR5U3ltYm9scywgXCJnZXRPd25FbnVtZXJhYmxlUHJvcGVydHlTeW1ib2xzXCIpO1xuXG4vLyBsaWIvY2hhaS91dGlscy9nZXRPd25FbnVtZXJhYmxlUHJvcGVydGllcy5qc1xuZnVuY3Rpb24gZ2V0T3duRW51bWVyYWJsZVByb3BlcnRpZXMob2JqKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmNvbmNhdChnZXRPd25FbnVtZXJhYmxlUHJvcGVydHlTeW1ib2xzKG9iaikpO1xufVxuX19uYW1lKGdldE93bkVudW1lcmFibGVQcm9wZXJ0aWVzLCBcImdldE93bkVudW1lcmFibGVQcm9wZXJ0aWVzXCIpO1xuXG4vLyBsaWIvY2hhaS91dGlscy9pc05hTi5qc1xuZnVuY3Rpb24gX2lzTmFOKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdmFsdWU7XG59XG5fX25hbWUoX2lzTmFOLCBcIl9pc05hTlwiKTtcbnZhciBpc05hTjIgPSBOdW1iZXIuaXNOYU4gfHwgX2lzTmFOO1xuXG4vLyBsaWIvY2hhaS91dGlscy9nZXRPcGVyYXRvci5qc1xuZnVuY3Rpb24gaXNPYmplY3RUeXBlKG9iaikge1xuICB2YXIgb2JqZWN0VHlwZSA9IHR5cGUob2JqKTtcbiAgdmFyIG9iamVjdFR5cGVzID0gW1wiQXJyYXlcIiwgXCJPYmplY3RcIiwgXCJGdW5jdGlvblwiXTtcbiAgcmV0dXJuIG9iamVjdFR5cGVzLmluZGV4T2Yob2JqZWN0VHlwZSkgIT09IC0xO1xufVxuX19uYW1lKGlzT2JqZWN0VHlwZSwgXCJpc09iamVjdFR5cGVcIik7XG5mdW5jdGlvbiBnZXRPcGVyYXRvcihvYmosIGFyZ3MpIHtcbiAgdmFyIG9wZXJhdG9yID0gZmxhZyhvYmosIFwib3BlcmF0b3JcIik7XG4gIHZhciBuZWdhdGUgPSBmbGFnKG9iaiwgXCJuZWdhdGVcIik7XG4gIHZhciBleHBlY3RlZCA9IGFyZ3NbM107XG4gIHZhciBtc2cgPSBuZWdhdGUgPyBhcmdzWzJdIDogYXJnc1sxXTtcbiAgaWYgKG9wZXJhdG9yKSB7XG4gICAgcmV0dXJuIG9wZXJhdG9yO1xuICB9XG4gIGlmICh0eXBlb2YgbXNnID09PSBcImZ1bmN0aW9uXCIpXG4gICAgbXNnID0gbXNnKCk7XG4gIG1zZyA9IG1zZyB8fCBcIlwiO1xuICBpZiAoIW1zZykge1xuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cbiAgaWYgKC9cXHNoYXZlXFxzLy50ZXN0KG1zZykpIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG4gIHZhciBpc09iamVjdCA9IGlzT2JqZWN0VHlwZShleHBlY3RlZCk7XG4gIGlmICgvXFxzbm90XFxzLy50ZXN0KG1zZykpIHtcbiAgICByZXR1cm4gaXNPYmplY3QgPyBcIm5vdERlZXBTdHJpY3RFcXVhbFwiIDogXCJub3RTdHJpY3RFcXVhbFwiO1xuICB9XG4gIHJldHVybiBpc09iamVjdCA/IFwiZGVlcFN0cmljdEVxdWFsXCIgOiBcInN0cmljdEVxdWFsXCI7XG59XG5fX25hbWUoZ2V0T3BlcmF0b3IsIFwiZ2V0T3BlcmF0b3JcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL2luZGV4LmpzXG5mdW5jdGlvbiBnZXROYW1lKGZuKSB7XG4gIHJldHVybiBmbi5uYW1lO1xufVxuX19uYW1lKGdldE5hbWUsIFwiZ2V0TmFtZVwiKTtcbmZ1bmN0aW9uIGlzUmVnRXhwMihvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSBcIltvYmplY3QgUmVnRXhwXVwiO1xufVxuX19uYW1lKGlzUmVnRXhwMiwgXCJpc1JlZ0V4cFwiKTtcbmZ1bmN0aW9uIGlzTnVtZXJpYyhvYmopIHtcbiAgcmV0dXJuIFtcIk51bWJlclwiLCBcIkJpZ0ludFwiXS5pbmNsdWRlcyh0eXBlKG9iaikpO1xufVxuX19uYW1lKGlzTnVtZXJpYywgXCJpc051bWVyaWNcIik7XG5cbi8vIGxpYi9jaGFpL2NvcmUvYXNzZXJ0aW9ucy5qc1xudmFyIHsgZmxhZzogZmxhZzIgfSA9IHV0aWxzX2V4cG9ydHM7XG5bXG4gIFwidG9cIixcbiAgXCJiZVwiLFxuICBcImJlZW5cIixcbiAgXCJpc1wiLFxuICBcImFuZFwiLFxuICBcImhhc1wiLFxuICBcImhhdmVcIixcbiAgXCJ3aXRoXCIsXG4gIFwidGhhdFwiLFxuICBcIndoaWNoXCIsXG4gIFwiYXRcIixcbiAgXCJvZlwiLFxuICBcInNhbWVcIixcbiAgXCJidXRcIixcbiAgXCJkb2VzXCIsXG4gIFwic3RpbGxcIixcbiAgXCJhbHNvXCJcbl0uZm9yRWFjaChmdW5jdGlvbihjaGFpbikge1xuICBBc3NlcnRpb24uYWRkUHJvcGVydHkoY2hhaW4pO1xufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJub3RcIiwgZnVuY3Rpb24oKSB7XG4gIGZsYWcyKHRoaXMsIFwibmVnYXRlXCIsIHRydWUpO1xufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJkZWVwXCIsIGZ1bmN0aW9uKCkge1xuICBmbGFnMih0aGlzLCBcImRlZXBcIiwgdHJ1ZSk7XG59KTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcIm5lc3RlZFwiLCBmdW5jdGlvbigpIHtcbiAgZmxhZzIodGhpcywgXCJuZXN0ZWRcIiwgdHJ1ZSk7XG59KTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcIm93blwiLCBmdW5jdGlvbigpIHtcbiAgZmxhZzIodGhpcywgXCJvd25cIiwgdHJ1ZSk7XG59KTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcIm9yZGVyZWRcIiwgZnVuY3Rpb24oKSB7XG4gIGZsYWcyKHRoaXMsIFwib3JkZXJlZFwiLCB0cnVlKTtcbn0pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwiYW55XCIsIGZ1bmN0aW9uKCkge1xuICBmbGFnMih0aGlzLCBcImFueVwiLCB0cnVlKTtcbiAgZmxhZzIodGhpcywgXCJhbGxcIiwgZmFsc2UpO1xufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJhbGxcIiwgZnVuY3Rpb24oKSB7XG4gIGZsYWcyKHRoaXMsIFwiYWxsXCIsIHRydWUpO1xuICBmbGFnMih0aGlzLCBcImFueVwiLCBmYWxzZSk7XG59KTtcbnZhciBmdW5jdGlvblR5cGVzID0ge1xuICBcImZ1bmN0aW9uXCI6IFtcImZ1bmN0aW9uXCIsIFwiYXN5bmNmdW5jdGlvblwiLCBcImdlbmVyYXRvcmZ1bmN0aW9uXCIsIFwiYXN5bmNnZW5lcmF0b3JmdW5jdGlvblwiXSxcbiAgXCJhc3luY2Z1bmN0aW9uXCI6IFtcImFzeW5jZnVuY3Rpb25cIiwgXCJhc3luY2dlbmVyYXRvcmZ1bmN0aW9uXCJdLFxuICBcImdlbmVyYXRvcmZ1bmN0aW9uXCI6IFtcImdlbmVyYXRvcmZ1bmN0aW9uXCIsIFwiYXN5bmNnZW5lcmF0b3JmdW5jdGlvblwiXSxcbiAgXCJhc3luY2dlbmVyYXRvcmZ1bmN0aW9uXCI6IFtcImFzeW5jZ2VuZXJhdG9yZnVuY3Rpb25cIl1cbn07XG5mdW5jdGlvbiBhbih0eXBlMywgbXNnKSB7XG4gIGlmIChtc2cpXG4gICAgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIHR5cGUzID0gdHlwZTMudG9Mb3dlckNhc2UoKTtcbiAgdmFyIG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBhcnRpY2xlID0gfltcImFcIiwgXCJlXCIsIFwiaVwiLCBcIm9cIiwgXCJ1XCJdLmluZGV4T2YodHlwZTMuY2hhckF0KDApKSA/IFwiYW4gXCIgOiBcImEgXCI7XG4gIGNvbnN0IGRldGVjdGVkVHlwZSA9IHR5cGUob2JqKS50b0xvd2VyQ2FzZSgpO1xuICBpZiAoZnVuY3Rpb25UeXBlc1tcImZ1bmN0aW9uXCJdLmluY2x1ZGVzKHR5cGUzKSkge1xuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgZnVuY3Rpb25UeXBlc1t0eXBlM10uaW5jbHVkZXMoZGV0ZWN0ZWRUeXBlKSxcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBcIiArIGFydGljbGUgKyB0eXBlMyxcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSBub3QgdG8gYmUgXCIgKyBhcnRpY2xlICsgdHlwZTNcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgdHlwZTMgPT09IGRldGVjdGVkVHlwZSxcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBcIiArIGFydGljbGUgKyB0eXBlMyxcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSBub3QgdG8gYmUgXCIgKyBhcnRpY2xlICsgdHlwZTNcbiAgICApO1xuICB9XG59XG5fX25hbWUoYW4sIFwiYW5cIik7XG5Bc3NlcnRpb24uYWRkQ2hhaW5hYmxlTWV0aG9kKFwiYW5cIiwgYW4pO1xuQXNzZXJ0aW9uLmFkZENoYWluYWJsZU1ldGhvZChcImFcIiwgYW4pO1xuZnVuY3Rpb24gU2FtZVZhbHVlWmVybyhhLCBiKSB7XG4gIHJldHVybiBpc05hTjIoYSkgJiYgaXNOYU4yKGIpIHx8IGEgPT09IGI7XG59XG5fX25hbWUoU2FtZVZhbHVlWmVybywgXCJTYW1lVmFsdWVaZXJvXCIpO1xuZnVuY3Rpb24gaW5jbHVkZUNoYWluaW5nQmVoYXZpb3IoKSB7XG4gIGZsYWcyKHRoaXMsIFwiY29udGFpbnNcIiwgdHJ1ZSk7XG59XG5fX25hbWUoaW5jbHVkZUNoYWluaW5nQmVoYXZpb3IsIFwiaW5jbHVkZUNoYWluaW5nQmVoYXZpb3JcIik7XG5mdW5jdGlvbiBpbmNsdWRlKHZhbCwgbXNnKSB7XG4gIGlmIChtc2cpXG4gICAgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIHZhciBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgb2JqVHlwZSA9IHR5cGUob2JqKS50b0xvd2VyQ2FzZSgpLCBmbGFnTXNnID0gZmxhZzIodGhpcywgXCJtZXNzYWdlXCIpLCBuZWdhdGUgPSBmbGFnMih0aGlzLCBcIm5lZ2F0ZVwiKSwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKSwgaXNEZWVwID0gZmxhZzIodGhpcywgXCJkZWVwXCIpLCBkZXNjcmlwdG9yID0gaXNEZWVwID8gXCJkZWVwIFwiIDogXCJcIiwgaXNFcWwgPSBpc0RlZXAgPyBmbGFnMih0aGlzLCBcImVxbFwiKSA6IFNhbWVWYWx1ZVplcm87XG4gIGZsYWdNc2cgPSBmbGFnTXNnID8gZmxhZ01zZyArIFwiOiBcIiA6IFwiXCI7XG4gIHZhciBpbmNsdWRlZCA9IGZhbHNlO1xuICBzd2l0Y2ggKG9ialR5cGUpIHtcbiAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICBpbmNsdWRlZCA9IG9iai5pbmRleE9mKHZhbCkgIT09IC0xO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIndlYWtzZXRcIjpcbiAgICAgIGlmIChpc0RlZXApIHtcbiAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgICAgICAgIGZsYWdNc2cgKyBcInVuYWJsZSB0byB1c2UgLmRlZXAuaW5jbHVkZSB3aXRoIFdlYWtTZXRcIixcbiAgICAgICAgICB2b2lkIDAsXG4gICAgICAgICAgc3NmaVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaW5jbHVkZWQgPSBvYmouaGFzKHZhbCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwibWFwXCI6XG4gICAgICBvYmouZm9yRWFjaChmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgIGluY2x1ZGVkID0gaW5jbHVkZWQgfHwgaXNFcWwoaXRlbSwgdmFsKTtcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInNldFwiOlxuICAgICAgaWYgKGlzRGVlcCkge1xuICAgICAgICBvYmouZm9yRWFjaChmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgICAgaW5jbHVkZWQgPSBpbmNsdWRlZCB8fCBpc0VxbChpdGVtLCB2YWwpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluY2x1ZGVkID0gb2JqLmhhcyh2YWwpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImFycmF5XCI6XG4gICAgICBpZiAoaXNEZWVwKSB7XG4gICAgICAgIGluY2x1ZGVkID0gb2JqLnNvbWUoZnVuY3Rpb24oaXRlbSkge1xuICAgICAgICAgIHJldHVybiBpc0VxbChpdGVtLCB2YWwpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluY2x1ZGVkID0gb2JqLmluZGV4T2YodmFsKSAhPT0gLTE7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgaWYgKHZhbCAhPT0gT2JqZWN0KHZhbCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgICAgICAgIGZsYWdNc2cgKyBcInRoZSBnaXZlbiBjb21iaW5hdGlvbiBvZiBhcmd1bWVudHMgKFwiICsgb2JqVHlwZSArIFwiIGFuZCBcIiArIHR5cGUodmFsKS50b0xvd2VyQ2FzZSgpICsgXCIpIGlzIGludmFsaWQgZm9yIHRoaXMgYXNzZXJ0aW9uLiBZb3UgY2FuIHVzZSBhbiBhcnJheSwgYSBtYXAsIGFuIG9iamVjdCwgYSBzZXQsIGEgc3RyaW5nLCBvciBhIHdlYWtzZXQgaW5zdGVhZCBvZiBhIFwiICsgdHlwZSh2YWwpLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgdm9pZCAwLFxuICAgICAgICAgIHNzZmlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHZhciBwcm9wcyA9IE9iamVjdC5rZXlzKHZhbCksIGZpcnN0RXJyID0gbnVsbCwgbnVtRXJycyA9IDA7XG4gICAgICBwcm9wcy5mb3JFYWNoKGZ1bmN0aW9uKHByb3ApIHtcbiAgICAgICAgdmFyIHByb3BBc3NlcnRpb24gPSBuZXcgQXNzZXJ0aW9uKG9iaik7XG4gICAgICAgIHRyYW5zZmVyRmxhZ3ModGhpcywgcHJvcEFzc2VydGlvbiwgdHJ1ZSk7XG4gICAgICAgIGZsYWcyKHByb3BBc3NlcnRpb24sIFwibG9ja1NzZmlcIiwgdHJ1ZSk7XG4gICAgICAgIGlmICghbmVnYXRlIHx8IHByb3BzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIHByb3BBc3NlcnRpb24ucHJvcGVydHkocHJvcCwgdmFsW3Byb3BdKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBwcm9wQXNzZXJ0aW9uLnByb3BlcnR5KHByb3AsIHZhbFtwcm9wXSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGlmICghY2hlY2tfZXJyb3JfZXhwb3J0cy5jb21wYXRpYmxlQ29uc3RydWN0b3IoZXJyLCBBc3NlcnRpb25FcnJvcikpIHtcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGZpcnN0RXJyID09PSBudWxsKVxuICAgICAgICAgICAgZmlyc3RFcnIgPSBlcnI7XG4gICAgICAgICAgbnVtRXJycysrO1xuICAgICAgICB9XG4gICAgICB9LCB0aGlzKTtcbiAgICAgIGlmIChuZWdhdGUgJiYgcHJvcHMubGVuZ3RoID4gMSAmJiBudW1FcnJzID09PSBwcm9wcy5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgZmlyc3RFcnI7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gIH1cbiAgdGhpcy5hc3NlcnQoXG4gICAgaW5jbHVkZWQsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIFwiICsgZGVzY3JpcHRvciArIFwiaW5jbHVkZSBcIiArIGluc3BlY3QyKHZhbCksXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBcIiArIGRlc2NyaXB0b3IgKyBcImluY2x1ZGUgXCIgKyBpbnNwZWN0Mih2YWwpXG4gICk7XG59XG5fX25hbWUoaW5jbHVkZSwgXCJpbmNsdWRlXCIpO1xuQXNzZXJ0aW9uLmFkZENoYWluYWJsZU1ldGhvZChcImluY2x1ZGVcIiwgaW5jbHVkZSwgaW5jbHVkZUNoYWluaW5nQmVoYXZpb3IpO1xuQXNzZXJ0aW9uLmFkZENoYWluYWJsZU1ldGhvZChcImNvbnRhaW5cIiwgaW5jbHVkZSwgaW5jbHVkZUNoYWluaW5nQmVoYXZpb3IpO1xuQXNzZXJ0aW9uLmFkZENoYWluYWJsZU1ldGhvZChcImNvbnRhaW5zXCIsIGluY2x1ZGUsIGluY2x1ZGVDaGFpbmluZ0JlaGF2aW9yKTtcbkFzc2VydGlvbi5hZGRDaGFpbmFibGVNZXRob2QoXCJpbmNsdWRlc1wiLCBpbmNsdWRlLCBpbmNsdWRlQ2hhaW5pbmdCZWhhdmlvcik7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJva1wiLCBmdW5jdGlvbigpIHtcbiAgdGhpcy5hc3NlcnQoXG4gICAgZmxhZzIodGhpcywgXCJvYmplY3RcIiksXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIHRydXRoeVwiLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBmYWxzeVwiXG4gICk7XG59KTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcInRydWVcIiwgZnVuY3Rpb24oKSB7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIHRydWUgPT09IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSB0cnVlXCIsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIGZhbHNlXCIsXG4gICAgZmxhZzIodGhpcywgXCJuZWdhdGVcIikgPyBmYWxzZSA6IHRydWVcbiAgKTtcbn0pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwibnVtZXJpY1wiLCBmdW5jdGlvbigpIHtcbiAgY29uc3Qgb2JqZWN0ID0gZmxhZzIodGhpcywgXCJvYmplY3RcIik7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIFtcIk51bWJlclwiLCBcIkJpZ0ludFwiXS5pbmNsdWRlcyh0eXBlKG9iamVjdCkpLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBudW1lcmljXCIsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBiZSBudW1lcmljXCIsXG4gICAgZmxhZzIodGhpcywgXCJuZWdhdGVcIikgPyBmYWxzZSA6IHRydWVcbiAgKTtcbn0pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwiY2FsbGFibGVcIiwgZnVuY3Rpb24oKSB7XG4gIGNvbnN0IHZhbCA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpO1xuICBjb25zdCBzc2ZpID0gZmxhZzIodGhpcywgXCJzc2ZpXCIpO1xuICBjb25zdCBtZXNzYWdlID0gZmxhZzIodGhpcywgXCJtZXNzYWdlXCIpO1xuICBjb25zdCBtc2cgPSBtZXNzYWdlID8gYCR7bWVzc2FnZX06IGAgOiBcIlwiO1xuICBjb25zdCBuZWdhdGUgPSBmbGFnMih0aGlzLCBcIm5lZ2F0ZVwiKTtcbiAgY29uc3QgYXNzZXJ0aW9uTWVzc2FnZSA9IG5lZ2F0ZSA/IGAke21zZ31leHBlY3RlZCAke2luc3BlY3QyKHZhbCl9IG5vdCB0byBiZSBhIGNhbGxhYmxlIGZ1bmN0aW9uYCA6IGAke21zZ31leHBlY3RlZCAke2luc3BlY3QyKHZhbCl9IHRvIGJlIGEgY2FsbGFibGUgZnVuY3Rpb25gO1xuICBjb25zdCBpc0NhbGxhYmxlID0gW1wiRnVuY3Rpb25cIiwgXCJBc3luY0Z1bmN0aW9uXCIsIFwiR2VuZXJhdG9yRnVuY3Rpb25cIiwgXCJBc3luY0dlbmVyYXRvckZ1bmN0aW9uXCJdLmluY2x1ZGVzKHR5cGUodmFsKSk7XG4gIGlmIChpc0NhbGxhYmxlICYmIG5lZ2F0ZSB8fCAhaXNDYWxsYWJsZSAmJiAhbmVnYXRlKSB7XG4gICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgICAgYXNzZXJ0aW9uTWVzc2FnZSxcbiAgICAgIHZvaWQgMCxcbiAgICAgIHNzZmlcbiAgICApO1xuICB9XG59KTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcImZhbHNlXCIsIGZ1bmN0aW9uKCkge1xuICB0aGlzLmFzc2VydChcbiAgICBmYWxzZSA9PT0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIGZhbHNlXCIsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIHRydWVcIixcbiAgICBmbGFnMih0aGlzLCBcIm5lZ2F0ZVwiKSA/IHRydWUgOiBmYWxzZVxuICApO1xufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJudWxsXCIsIGZ1bmN0aW9uKCkge1xuICB0aGlzLmFzc2VydChcbiAgICBudWxsID09PSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgbnVsbFwiLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSBub3QgdG8gYmUgbnVsbFwiXG4gICk7XG59KTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcInVuZGVmaW5lZFwiLCBmdW5jdGlvbigpIHtcbiAgdGhpcy5hc3NlcnQoXG4gICAgdm9pZCAwID09PSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgdW5kZWZpbmVkXCIsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IG5vdCB0byBiZSB1bmRlZmluZWRcIlxuICApO1xufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJOYU5cIiwgZnVuY3Rpb24oKSB7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIGlzTmFOMihmbGFnMih0aGlzLCBcIm9iamVjdFwiKSksXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIE5hTlwiLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSBub3QgdG8gYmUgTmFOXCJcbiAgKTtcbn0pO1xuZnVuY3Rpb24gYXNzZXJ0RXhpc3QoKSB7XG4gIHZhciB2YWwgPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKTtcbiAgdGhpcy5hc3NlcnQoXG4gICAgdmFsICE9PSBudWxsICYmIHZhbCAhPT0gdm9pZCAwLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBleGlzdFwiLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgZXhpc3RcIlxuICApO1xufVxuX19uYW1lKGFzc2VydEV4aXN0LCBcImFzc2VydEV4aXN0XCIpO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwiZXhpc3RcIiwgYXNzZXJ0RXhpc3QpO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwiZXhpc3RzXCIsIGFzc2VydEV4aXN0KTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcImVtcHR5XCIsIGZ1bmN0aW9uKCkge1xuICB2YXIgdmFsID0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksIHNzZmkgPSBmbGFnMih0aGlzLCBcInNzZmlcIiksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIGl0ZW1zQ291bnQ7XG4gIGZsYWdNc2cgPSBmbGFnTXNnID8gZmxhZ01zZyArIFwiOiBcIiA6IFwiXCI7XG4gIHN3aXRjaCAodHlwZSh2YWwpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlIFwiYXJyYXlcIjpcbiAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICBpdGVtc0NvdW50ID0gdmFsLmxlbmd0aDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJtYXBcIjpcbiAgICBjYXNlIFwic2V0XCI6XG4gICAgICBpdGVtc0NvdW50ID0gdmFsLnNpemU7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwid2Vha21hcFwiOlxuICAgIGNhc2UgXCJ3ZWFrc2V0XCI6XG4gICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICAgIGZsYWdNc2cgKyBcIi5lbXB0eSB3YXMgcGFzc2VkIGEgd2VhayBjb2xsZWN0aW9uXCIsXG4gICAgICAgIHZvaWQgMCxcbiAgICAgICAgc3NmaVxuICAgICAgKTtcbiAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgIHZhciBtc2cgPSBmbGFnTXNnICsgXCIuZW1wdHkgd2FzIHBhc3NlZCBhIGZ1bmN0aW9uIFwiICsgZ2V0TmFtZSh2YWwpO1xuICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKG1zZy50cmltKCksIHZvaWQgMCwgc3NmaSk7XG4gICAgZGVmYXVsdDpcbiAgICAgIGlmICh2YWwgIT09IE9iamVjdCh2YWwpKSB7XG4gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgICAgICBmbGFnTXNnICsgXCIuZW1wdHkgd2FzIHBhc3NlZCBub24tc3RyaW5nIHByaW1pdGl2ZSBcIiArIGluc3BlY3QyKHZhbCksXG4gICAgICAgICAgdm9pZCAwLFxuICAgICAgICAgIHNzZmlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGl0ZW1zQ291bnQgPSBPYmplY3Qua2V5cyh2YWwpLmxlbmd0aDtcbiAgfVxuICB0aGlzLmFzc2VydChcbiAgICAwID09PSBpdGVtc0NvdW50LFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBlbXB0eVwiLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSBub3QgdG8gYmUgZW1wdHlcIlxuICApO1xufSk7XG5mdW5jdGlvbiBjaGVja0FyZ3VtZW50cygpIHtcbiAgdmFyIG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCB0eXBlMyA9IHR5cGUob2JqKTtcbiAgdGhpcy5hc3NlcnQoXG4gICAgXCJBcmd1bWVudHNcIiA9PT0gdHlwZTMsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIGFyZ3VtZW50cyBidXQgZ290IFwiICsgdHlwZTMsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBiZSBhcmd1bWVudHNcIlxuICApO1xufVxuX19uYW1lKGNoZWNrQXJndW1lbnRzLCBcImNoZWNrQXJndW1lbnRzXCIpO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwiYXJndW1lbnRzXCIsIGNoZWNrQXJndW1lbnRzKTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcIkFyZ3VtZW50c1wiLCBjaGVja0FyZ3VtZW50cyk7XG5mdW5jdGlvbiBhc3NlcnRFcXVhbCh2YWwsIG1zZykge1xuICBpZiAobXNnKVxuICAgIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB2YXIgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIik7XG4gIGlmIChmbGFnMih0aGlzLCBcImRlZXBcIikpIHtcbiAgICB2YXIgcHJldkxvY2tTc2ZpID0gZmxhZzIodGhpcywgXCJsb2NrU3NmaVwiKTtcbiAgICBmbGFnMih0aGlzLCBcImxvY2tTc2ZpXCIsIHRydWUpO1xuICAgIHRoaXMuZXFsKHZhbCk7XG4gICAgZmxhZzIodGhpcywgXCJsb2NrU3NmaVwiLCBwcmV2TG9ja1NzZmkpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgdmFsID09PSBvYmosXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gZXF1YWwgI3tleHB9XCIsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGVxdWFsICN7ZXhwfVwiLFxuICAgICAgdmFsLFxuICAgICAgdGhpcy5fb2JqLFxuICAgICAgdHJ1ZVxuICAgICk7XG4gIH1cbn1cbl9fbmFtZShhc3NlcnRFcXVhbCwgXCJhc3NlcnRFcXVhbFwiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJlcXVhbFwiLCBhc3NlcnRFcXVhbCk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiZXF1YWxzXCIsIGFzc2VydEVxdWFsKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJlcVwiLCBhc3NlcnRFcXVhbCk7XG5mdW5jdGlvbiBhc3NlcnRFcWwob2JqLCBtc2cpIHtcbiAgaWYgKG1zZylcbiAgICBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgdmFyIGVxbCA9IGZsYWcyKHRoaXMsIFwiZXFsXCIpO1xuICB0aGlzLmFzc2VydChcbiAgICBlcWwob2JqLCBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSksXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGRlZXBseSBlcXVhbCAje2V4cH1cIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGRlZXBseSBlcXVhbCAje2V4cH1cIixcbiAgICBvYmosXG4gICAgdGhpcy5fb2JqLFxuICAgIHRydWVcbiAgKTtcbn1cbl9fbmFtZShhc3NlcnRFcWwsIFwiYXNzZXJ0RXFsXCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImVxbFwiLCBhc3NlcnRFcWwpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImVxbHNcIiwgYXNzZXJ0RXFsKTtcbmZ1bmN0aW9uIGFzc2VydEFib3ZlKG4sIG1zZykge1xuICBpZiAobXNnKVxuICAgIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB2YXIgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksIGRvTGVuZ3RoID0gZmxhZzIodGhpcywgXCJkb0xlbmd0aFwiKSwgZmxhZ01zZyA9IGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiKSwgbXNnUHJlZml4ID0gZmxhZ01zZyA/IGZsYWdNc2cgKyBcIjogXCIgOiBcIlwiLCBzc2ZpID0gZmxhZzIodGhpcywgXCJzc2ZpXCIpLCBvYmpUeXBlID0gdHlwZShvYmopLnRvTG93ZXJDYXNlKCksIG5UeXBlID0gdHlwZShuKS50b0xvd2VyQ2FzZSgpO1xuICBpZiAoZG9MZW5ndGggJiYgb2JqVHlwZSAhPT0gXCJtYXBcIiAmJiBvYmpUeXBlICE9PSBcInNldFwiKSB7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIGZsYWdNc2csIHNzZmksIHRydWUpLnRvLmhhdmUucHJvcGVydHkoXCJsZW5ndGhcIik7XG4gIH1cbiAgaWYgKCFkb0xlbmd0aCAmJiAob2JqVHlwZSA9PT0gXCJkYXRlXCIgJiYgblR5cGUgIT09IFwiZGF0ZVwiKSkge1xuICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihtc2dQcmVmaXggKyBcInRoZSBhcmd1bWVudCB0byBhYm92ZSBtdXN0IGJlIGEgZGF0ZVwiLCB2b2lkIDAsIHNzZmkpO1xuICB9IGVsc2UgaWYgKCFpc051bWVyaWMobikgJiYgKGRvTGVuZ3RoIHx8IGlzTnVtZXJpYyhvYmopKSkge1xuICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihtc2dQcmVmaXggKyBcInRoZSBhcmd1bWVudCB0byBhYm92ZSBtdXN0IGJlIGEgbnVtYmVyXCIsIHZvaWQgMCwgc3NmaSk7XG4gIH0gZWxzZSBpZiAoIWRvTGVuZ3RoICYmIChvYmpUeXBlICE9PSBcImRhdGVcIiAmJiAhaXNOdW1lcmljKG9iaikpKSB7XG4gICAgdmFyIHByaW50T2JqID0gb2JqVHlwZSA9PT0gXCJzdHJpbmdcIiA/IFwiJ1wiICsgb2JqICsgXCInXCIgOiBvYmo7XG4gICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKG1zZ1ByZWZpeCArIFwiZXhwZWN0ZWQgXCIgKyBwcmludE9iaiArIFwiIHRvIGJlIGEgbnVtYmVyIG9yIGEgZGF0ZVwiLCB2b2lkIDAsIHNzZmkpO1xuICB9XG4gIGlmIChkb0xlbmd0aCkge1xuICAgIHZhciBkZXNjcmlwdG9yID0gXCJsZW5ndGhcIiwgaXRlbXNDb3VudDtcbiAgICBpZiAob2JqVHlwZSA9PT0gXCJtYXBcIiB8fCBvYmpUeXBlID09PSBcInNldFwiKSB7XG4gICAgICBkZXNjcmlwdG9yID0gXCJzaXplXCI7XG4gICAgICBpdGVtc0NvdW50ID0gb2JqLnNpemU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW1zQ291bnQgPSBvYmoubGVuZ3RoO1xuICAgIH1cbiAgICB0aGlzLmFzc2VydChcbiAgICAgIGl0ZW1zQ291bnQgPiBuLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgYSBcIiArIGRlc2NyaXB0b3IgKyBcIiBhYm92ZSAje2V4cH0gYnV0IGdvdCAje2FjdH1cIixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgaGF2ZSBhIFwiICsgZGVzY3JpcHRvciArIFwiIGFib3ZlICN7ZXhwfVwiLFxuICAgICAgbixcbiAgICAgIGl0ZW1zQ291bnRcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgb2JqID4gbixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBhYm92ZSAje2V4cH1cIixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBhdCBtb3N0ICN7ZXhwfVwiLFxuICAgICAgblxuICAgICk7XG4gIH1cbn1cbl9fbmFtZShhc3NlcnRBYm92ZSwgXCJhc3NlcnRBYm92ZVwiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJhYm92ZVwiLCBhc3NlcnRBYm92ZSk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiZ3RcIiwgYXNzZXJ0QWJvdmUpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImdyZWF0ZXJUaGFuXCIsIGFzc2VydEFib3ZlKTtcbmZ1bmN0aW9uIGFzc2VydExlYXN0KG4sIG1zZykge1xuICBpZiAobXNnKVxuICAgIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB2YXIgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksIGRvTGVuZ3RoID0gZmxhZzIodGhpcywgXCJkb0xlbmd0aFwiKSwgZmxhZ01zZyA9IGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiKSwgbXNnUHJlZml4ID0gZmxhZ01zZyA/IGZsYWdNc2cgKyBcIjogXCIgOiBcIlwiLCBzc2ZpID0gZmxhZzIodGhpcywgXCJzc2ZpXCIpLCBvYmpUeXBlID0gdHlwZShvYmopLnRvTG93ZXJDYXNlKCksIG5UeXBlID0gdHlwZShuKS50b0xvd2VyQ2FzZSgpLCBlcnJvck1lc3NhZ2UsIHNob3VsZFRocm93ID0gdHJ1ZTtcbiAgaWYgKGRvTGVuZ3RoICYmIG9ialR5cGUgIT09IFwibWFwXCIgJiYgb2JqVHlwZSAhPT0gXCJzZXRcIikge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5oYXZlLnByb3BlcnR5KFwibGVuZ3RoXCIpO1xuICB9XG4gIGlmICghZG9MZW5ndGggJiYgKG9ialR5cGUgPT09IFwiZGF0ZVwiICYmIG5UeXBlICE9PSBcImRhdGVcIikpIHtcbiAgICBlcnJvck1lc3NhZ2UgPSBtc2dQcmVmaXggKyBcInRoZSBhcmd1bWVudCB0byBsZWFzdCBtdXN0IGJlIGEgZGF0ZVwiO1xuICB9IGVsc2UgaWYgKCFpc051bWVyaWMobikgJiYgKGRvTGVuZ3RoIHx8IGlzTnVtZXJpYyhvYmopKSkge1xuICAgIGVycm9yTWVzc2FnZSA9IG1zZ1ByZWZpeCArIFwidGhlIGFyZ3VtZW50IHRvIGxlYXN0IG11c3QgYmUgYSBudW1iZXJcIjtcbiAgfSBlbHNlIGlmICghZG9MZW5ndGggJiYgKG9ialR5cGUgIT09IFwiZGF0ZVwiICYmICFpc051bWVyaWMob2JqKSkpIHtcbiAgICB2YXIgcHJpbnRPYmogPSBvYmpUeXBlID09PSBcInN0cmluZ1wiID8gXCInXCIgKyBvYmogKyBcIidcIiA6IG9iajtcbiAgICBlcnJvck1lc3NhZ2UgPSBtc2dQcmVmaXggKyBcImV4cGVjdGVkIFwiICsgcHJpbnRPYmogKyBcIiB0byBiZSBhIG51bWJlciBvciBhIGRhdGVcIjtcbiAgfSBlbHNlIHtcbiAgICBzaG91bGRUaHJvdyA9IGZhbHNlO1xuICB9XG4gIGlmIChzaG91bGRUaHJvdykge1xuICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihlcnJvck1lc3NhZ2UsIHZvaWQgMCwgc3NmaSk7XG4gIH1cbiAgaWYgKGRvTGVuZ3RoKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBcImxlbmd0aFwiLCBpdGVtc0NvdW50O1xuICAgIGlmIChvYmpUeXBlID09PSBcIm1hcFwiIHx8IG9ialR5cGUgPT09IFwic2V0XCIpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBcInNpemVcIjtcbiAgICAgIGl0ZW1zQ291bnQgPSBvYmouc2l6ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXRlbXNDb3VudCA9IG9iai5sZW5ndGg7XG4gICAgfVxuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgaXRlbXNDb3VudCA+PSBuLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgYSBcIiArIGRlc2NyaXB0b3IgKyBcIiBhdCBsZWFzdCAje2V4cH0gYnV0IGdvdCAje2FjdH1cIixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBoYXZlIGEgXCIgKyBkZXNjcmlwdG9yICsgXCIgYmVsb3cgI3tleHB9XCIsXG4gICAgICBuLFxuICAgICAgaXRlbXNDb3VudFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBvYmogPj0gbixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBhdCBsZWFzdCAje2V4cH1cIixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBiZWxvdyAje2V4cH1cIixcbiAgICAgIG5cbiAgICApO1xuICB9XG59XG5fX25hbWUoYXNzZXJ0TGVhc3QsIFwiYXNzZXJ0TGVhc3RcIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwibGVhc3RcIiwgYXNzZXJ0TGVhc3QpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImd0ZVwiLCBhc3NlcnRMZWFzdCk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiZ3JlYXRlclRoYW5PckVxdWFsXCIsIGFzc2VydExlYXN0KTtcbmZ1bmN0aW9uIGFzc2VydEJlbG93KG4sIG1zZykge1xuICBpZiAobXNnKVxuICAgIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB2YXIgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksIGRvTGVuZ3RoID0gZmxhZzIodGhpcywgXCJkb0xlbmd0aFwiKSwgZmxhZ01zZyA9IGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiKSwgbXNnUHJlZml4ID0gZmxhZ01zZyA/IGZsYWdNc2cgKyBcIjogXCIgOiBcIlwiLCBzc2ZpID0gZmxhZzIodGhpcywgXCJzc2ZpXCIpLCBvYmpUeXBlID0gdHlwZShvYmopLnRvTG93ZXJDYXNlKCksIG5UeXBlID0gdHlwZShuKS50b0xvd2VyQ2FzZSgpLCBlcnJvck1lc3NhZ2UsIHNob3VsZFRocm93ID0gdHJ1ZTtcbiAgaWYgKGRvTGVuZ3RoICYmIG9ialR5cGUgIT09IFwibWFwXCIgJiYgb2JqVHlwZSAhPT0gXCJzZXRcIikge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5oYXZlLnByb3BlcnR5KFwibGVuZ3RoXCIpO1xuICB9XG4gIGlmICghZG9MZW5ndGggJiYgKG9ialR5cGUgPT09IFwiZGF0ZVwiICYmIG5UeXBlICE9PSBcImRhdGVcIikpIHtcbiAgICBlcnJvck1lc3NhZ2UgPSBtc2dQcmVmaXggKyBcInRoZSBhcmd1bWVudCB0byBiZWxvdyBtdXN0IGJlIGEgZGF0ZVwiO1xuICB9IGVsc2UgaWYgKCFpc051bWVyaWMobikgJiYgKGRvTGVuZ3RoIHx8IGlzTnVtZXJpYyhvYmopKSkge1xuICAgIGVycm9yTWVzc2FnZSA9IG1zZ1ByZWZpeCArIFwidGhlIGFyZ3VtZW50IHRvIGJlbG93IG11c3QgYmUgYSBudW1iZXJcIjtcbiAgfSBlbHNlIGlmICghZG9MZW5ndGggJiYgKG9ialR5cGUgIT09IFwiZGF0ZVwiICYmICFpc051bWVyaWMob2JqKSkpIHtcbiAgICB2YXIgcHJpbnRPYmogPSBvYmpUeXBlID09PSBcInN0cmluZ1wiID8gXCInXCIgKyBvYmogKyBcIidcIiA6IG9iajtcbiAgICBlcnJvck1lc3NhZ2UgPSBtc2dQcmVmaXggKyBcImV4cGVjdGVkIFwiICsgcHJpbnRPYmogKyBcIiB0byBiZSBhIG51bWJlciBvciBhIGRhdGVcIjtcbiAgfSBlbHNlIHtcbiAgICBzaG91bGRUaHJvdyA9IGZhbHNlO1xuICB9XG4gIGlmIChzaG91bGRUaHJvdykge1xuICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihlcnJvck1lc3NhZ2UsIHZvaWQgMCwgc3NmaSk7XG4gIH1cbiAgaWYgKGRvTGVuZ3RoKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBcImxlbmd0aFwiLCBpdGVtc0NvdW50O1xuICAgIGlmIChvYmpUeXBlID09PSBcIm1hcFwiIHx8IG9ialR5cGUgPT09IFwic2V0XCIpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBcInNpemVcIjtcbiAgICAgIGl0ZW1zQ291bnQgPSBvYmouc2l6ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXRlbXNDb3VudCA9IG9iai5sZW5ndGg7XG4gICAgfVxuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgaXRlbXNDb3VudCA8IG4sXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gaGF2ZSBhIFwiICsgZGVzY3JpcHRvciArIFwiIGJlbG93ICN7ZXhwfSBidXQgZ290ICN7YWN0fVwiLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBoYXZlIGEgXCIgKyBkZXNjcmlwdG9yICsgXCIgYmVsb3cgI3tleHB9XCIsXG4gICAgICBuLFxuICAgICAgaXRlbXNDb3VudFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBvYmogPCBuLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIGJlbG93ICN7ZXhwfVwiLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIGF0IGxlYXN0ICN7ZXhwfVwiLFxuICAgICAgblxuICAgICk7XG4gIH1cbn1cbl9fbmFtZShhc3NlcnRCZWxvdywgXCJhc3NlcnRCZWxvd1wiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJiZWxvd1wiLCBhc3NlcnRCZWxvdyk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwibHRcIiwgYXNzZXJ0QmVsb3cpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImxlc3NUaGFuXCIsIGFzc2VydEJlbG93KTtcbmZ1bmN0aW9uIGFzc2VydE1vc3QobiwgbXNnKSB7XG4gIGlmIChtc2cpXG4gICAgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIHZhciBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgZG9MZW5ndGggPSBmbGFnMih0aGlzLCBcImRvTGVuZ3RoXCIpLCBmbGFnTXNnID0gZmxhZzIodGhpcywgXCJtZXNzYWdlXCIpLCBtc2dQcmVmaXggPSBmbGFnTXNnID8gZmxhZ01zZyArIFwiOiBcIiA6IFwiXCIsIHNzZmkgPSBmbGFnMih0aGlzLCBcInNzZmlcIiksIG9ialR5cGUgPSB0eXBlKG9iaikudG9Mb3dlckNhc2UoKSwgblR5cGUgPSB0eXBlKG4pLnRvTG93ZXJDYXNlKCksIGVycm9yTWVzc2FnZSwgc2hvdWxkVGhyb3cgPSB0cnVlO1xuICBpZiAoZG9MZW5ndGggJiYgb2JqVHlwZSAhPT0gXCJtYXBcIiAmJiBvYmpUeXBlICE9PSBcInNldFwiKSB7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIGZsYWdNc2csIHNzZmksIHRydWUpLnRvLmhhdmUucHJvcGVydHkoXCJsZW5ndGhcIik7XG4gIH1cbiAgaWYgKCFkb0xlbmd0aCAmJiAob2JqVHlwZSA9PT0gXCJkYXRlXCIgJiYgblR5cGUgIT09IFwiZGF0ZVwiKSkge1xuICAgIGVycm9yTWVzc2FnZSA9IG1zZ1ByZWZpeCArIFwidGhlIGFyZ3VtZW50IHRvIG1vc3QgbXVzdCBiZSBhIGRhdGVcIjtcbiAgfSBlbHNlIGlmICghaXNOdW1lcmljKG4pICYmIChkb0xlbmd0aCB8fCBpc051bWVyaWMob2JqKSkpIHtcbiAgICBlcnJvck1lc3NhZ2UgPSBtc2dQcmVmaXggKyBcInRoZSBhcmd1bWVudCB0byBtb3N0IG11c3QgYmUgYSBudW1iZXJcIjtcbiAgfSBlbHNlIGlmICghZG9MZW5ndGggJiYgKG9ialR5cGUgIT09IFwiZGF0ZVwiICYmICFpc051bWVyaWMob2JqKSkpIHtcbiAgICB2YXIgcHJpbnRPYmogPSBvYmpUeXBlID09PSBcInN0cmluZ1wiID8gXCInXCIgKyBvYmogKyBcIidcIiA6IG9iajtcbiAgICBlcnJvck1lc3NhZ2UgPSBtc2dQcmVmaXggKyBcImV4cGVjdGVkIFwiICsgcHJpbnRPYmogKyBcIiB0byBiZSBhIG51bWJlciBvciBhIGRhdGVcIjtcbiAgfSBlbHNlIHtcbiAgICBzaG91bGRUaHJvdyA9IGZhbHNlO1xuICB9XG4gIGlmIChzaG91bGRUaHJvdykge1xuICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihlcnJvck1lc3NhZ2UsIHZvaWQgMCwgc3NmaSk7XG4gIH1cbiAgaWYgKGRvTGVuZ3RoKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBcImxlbmd0aFwiLCBpdGVtc0NvdW50O1xuICAgIGlmIChvYmpUeXBlID09PSBcIm1hcFwiIHx8IG9ialR5cGUgPT09IFwic2V0XCIpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBcInNpemVcIjtcbiAgICAgIGl0ZW1zQ291bnQgPSBvYmouc2l6ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXRlbXNDb3VudCA9IG9iai5sZW5ndGg7XG4gICAgfVxuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgaXRlbXNDb3VudCA8PSBuLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgYSBcIiArIGRlc2NyaXB0b3IgKyBcIiBhdCBtb3N0ICN7ZXhwfSBidXQgZ290ICN7YWN0fVwiLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgYSBcIiArIGRlc2NyaXB0b3IgKyBcIiBhYm92ZSAje2V4cH1cIixcbiAgICAgIG4sXG4gICAgICBpdGVtc0NvdW50XG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgIG9iaiA8PSBuLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIGF0IG1vc3QgI3tleHB9XCIsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgYWJvdmUgI3tleHB9XCIsXG4gICAgICBuXG4gICAgKTtcbiAgfVxufVxuX19uYW1lKGFzc2VydE1vc3QsIFwiYXNzZXJ0TW9zdFwiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJtb3N0XCIsIGFzc2VydE1vc3QpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImx0ZVwiLCBhc3NlcnRNb3N0KTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJsZXNzVGhhbk9yRXF1YWxcIiwgYXNzZXJ0TW9zdCk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwid2l0aGluXCIsIGZ1bmN0aW9uKHN0YXJ0LCBmaW5pc2gsIG1zZykge1xuICBpZiAobXNnKVxuICAgIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB2YXIgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksIGRvTGVuZ3RoID0gZmxhZzIodGhpcywgXCJkb0xlbmd0aFwiKSwgZmxhZ01zZyA9IGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiKSwgbXNnUHJlZml4ID0gZmxhZ01zZyA/IGZsYWdNc2cgKyBcIjogXCIgOiBcIlwiLCBzc2ZpID0gZmxhZzIodGhpcywgXCJzc2ZpXCIpLCBvYmpUeXBlID0gdHlwZShvYmopLnRvTG93ZXJDYXNlKCksIHN0YXJ0VHlwZSA9IHR5cGUoc3RhcnQpLnRvTG93ZXJDYXNlKCksIGZpbmlzaFR5cGUgPSB0eXBlKGZpbmlzaCkudG9Mb3dlckNhc2UoKSwgZXJyb3JNZXNzYWdlLCBzaG91bGRUaHJvdyA9IHRydWUsIHJhbmdlID0gc3RhcnRUeXBlID09PSBcImRhdGVcIiAmJiBmaW5pc2hUeXBlID09PSBcImRhdGVcIiA/IHN0YXJ0LnRvSVNPU3RyaW5nKCkgKyBcIi4uXCIgKyBmaW5pc2gudG9JU09TdHJpbmcoKSA6IHN0YXJ0ICsgXCIuLlwiICsgZmluaXNoO1xuICBpZiAoZG9MZW5ndGggJiYgb2JqVHlwZSAhPT0gXCJtYXBcIiAmJiBvYmpUeXBlICE9PSBcInNldFwiKSB7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIGZsYWdNc2csIHNzZmksIHRydWUpLnRvLmhhdmUucHJvcGVydHkoXCJsZW5ndGhcIik7XG4gIH1cbiAgaWYgKCFkb0xlbmd0aCAmJiAob2JqVHlwZSA9PT0gXCJkYXRlXCIgJiYgKHN0YXJ0VHlwZSAhPT0gXCJkYXRlXCIgfHwgZmluaXNoVHlwZSAhPT0gXCJkYXRlXCIpKSkge1xuICAgIGVycm9yTWVzc2FnZSA9IG1zZ1ByZWZpeCArIFwidGhlIGFyZ3VtZW50cyB0byB3aXRoaW4gbXVzdCBiZSBkYXRlc1wiO1xuICB9IGVsc2UgaWYgKCghaXNOdW1lcmljKHN0YXJ0KSB8fCAhaXNOdW1lcmljKGZpbmlzaCkpICYmIChkb0xlbmd0aCB8fCBpc051bWVyaWMob2JqKSkpIHtcbiAgICBlcnJvck1lc3NhZ2UgPSBtc2dQcmVmaXggKyBcInRoZSBhcmd1bWVudHMgdG8gd2l0aGluIG11c3QgYmUgbnVtYmVyc1wiO1xuICB9IGVsc2UgaWYgKCFkb0xlbmd0aCAmJiAob2JqVHlwZSAhPT0gXCJkYXRlXCIgJiYgIWlzTnVtZXJpYyhvYmopKSkge1xuICAgIHZhciBwcmludE9iaiA9IG9ialR5cGUgPT09IFwic3RyaW5nXCIgPyBcIidcIiArIG9iaiArIFwiJ1wiIDogb2JqO1xuICAgIGVycm9yTWVzc2FnZSA9IG1zZ1ByZWZpeCArIFwiZXhwZWN0ZWQgXCIgKyBwcmludE9iaiArIFwiIHRvIGJlIGEgbnVtYmVyIG9yIGEgZGF0ZVwiO1xuICB9IGVsc2Uge1xuICAgIHNob3VsZFRocm93ID0gZmFsc2U7XG4gIH1cbiAgaWYgKHNob3VsZFRocm93KSB7XG4gICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKGVycm9yTWVzc2FnZSwgdm9pZCAwLCBzc2ZpKTtcbiAgfVxuICBpZiAoZG9MZW5ndGgpIHtcbiAgICB2YXIgZGVzY3JpcHRvciA9IFwibGVuZ3RoXCIsIGl0ZW1zQ291bnQ7XG4gICAgaWYgKG9ialR5cGUgPT09IFwibWFwXCIgfHwgb2JqVHlwZSA9PT0gXCJzZXRcIikge1xuICAgICAgZGVzY3JpcHRvciA9IFwic2l6ZVwiO1xuICAgICAgaXRlbXNDb3VudCA9IG9iai5zaXplO1xuICAgIH0gZWxzZSB7XG4gICAgICBpdGVtc0NvdW50ID0gb2JqLmxlbmd0aDtcbiAgICB9XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBpdGVtc0NvdW50ID49IHN0YXJ0ICYmIGl0ZW1zQ291bnQgPD0gZmluaXNoLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgYSBcIiArIGRlc2NyaXB0b3IgKyBcIiB3aXRoaW4gXCIgKyByYW5nZSxcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgaGF2ZSBhIFwiICsgZGVzY3JpcHRvciArIFwiIHdpdGhpbiBcIiArIHJhbmdlXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgIG9iaiA+PSBzdGFydCAmJiBvYmogPD0gZmluaXNoLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIHdpdGhpbiBcIiArIHJhbmdlLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBiZSB3aXRoaW4gXCIgKyByYW5nZVxuICAgICk7XG4gIH1cbn0pO1xuZnVuY3Rpb24gYXNzZXJ0SW5zdGFuY2VPZihjb25zdHJ1Y3RvciwgbXNnKSB7XG4gIGlmIChtc2cpXG4gICAgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIHZhciB0YXJnZXQgPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKTtcbiAgdmFyIHNzZmkgPSBmbGFnMih0aGlzLCBcInNzZmlcIik7XG4gIHZhciBmbGFnTXNnID0gZmxhZzIodGhpcywgXCJtZXNzYWdlXCIpO1xuICB0cnkge1xuICAgIHZhciBpc0luc3RhbmNlT2YgPSB0YXJnZXQgaW5zdGFuY2VvZiBjb25zdHJ1Y3RvcjtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKGVyciBpbnN0YW5jZW9mIFR5cGVFcnJvcikge1xuICAgICAgZmxhZ01zZyA9IGZsYWdNc2cgPyBmbGFnTXNnICsgXCI6IFwiIDogXCJcIjtcbiAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgICAgZmxhZ01zZyArIFwiVGhlIGluc3RhbmNlb2YgYXNzZXJ0aW9uIG5lZWRzIGEgY29uc3RydWN0b3IgYnV0IFwiICsgdHlwZShjb25zdHJ1Y3RvcikgKyBcIiB3YXMgZ2l2ZW4uXCIsXG4gICAgICAgIHZvaWQgMCxcbiAgICAgICAgc3NmaVxuICAgICAgKTtcbiAgICB9XG4gICAgdGhyb3cgZXJyO1xuICB9XG4gIHZhciBuYW1lID0gZ2V0TmFtZShjb25zdHJ1Y3Rvcik7XG4gIGlmIChuYW1lID09IG51bGwpIHtcbiAgICBuYW1lID0gXCJhbiB1bm5hbWVkIGNvbnN0cnVjdG9yXCI7XG4gIH1cbiAgdGhpcy5hc3NlcnQoXG4gICAgaXNJbnN0YW5jZU9mLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBhbiBpbnN0YW5jZSBvZiBcIiArIG5hbWUsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBiZSBhbiBpbnN0YW5jZSBvZiBcIiArIG5hbWVcbiAgKTtcbn1cbl9fbmFtZShhc3NlcnRJbnN0YW5jZU9mLCBcImFzc2VydEluc3RhbmNlT2ZcIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiaW5zdGFuY2VvZlwiLCBhc3NlcnRJbnN0YW5jZU9mKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJpbnN0YW5jZU9mXCIsIGFzc2VydEluc3RhbmNlT2YpO1xuZnVuY3Rpb24gYXNzZXJ0UHJvcGVydHkobmFtZSwgdmFsLCBtc2cpIHtcbiAgaWYgKG1zZylcbiAgICBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgdmFyIGlzTmVzdGVkID0gZmxhZzIodGhpcywgXCJuZXN0ZWRcIiksIGlzT3duID0gZmxhZzIodGhpcywgXCJvd25cIiksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBzc2ZpID0gZmxhZzIodGhpcywgXCJzc2ZpXCIpLCBuYW1lVHlwZSA9IHR5cGVvZiBuYW1lO1xuICBmbGFnTXNnID0gZmxhZ01zZyA/IGZsYWdNc2cgKyBcIjogXCIgOiBcIlwiO1xuICBpZiAoaXNOZXN0ZWQpIHtcbiAgICBpZiAobmFtZVR5cGUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgICAgZmxhZ01zZyArIFwidGhlIGFyZ3VtZW50IHRvIHByb3BlcnR5IG11c3QgYmUgYSBzdHJpbmcgd2hlbiB1c2luZyBuZXN0ZWQgc3ludGF4XCIsXG4gICAgICAgIHZvaWQgMCxcbiAgICAgICAgc3NmaVxuICAgICAgKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKG5hbWVUeXBlICE9PSBcInN0cmluZ1wiICYmIG5hbWVUeXBlICE9PSBcIm51bWJlclwiICYmIG5hbWVUeXBlICE9PSBcInN5bWJvbFwiKSB7XG4gICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICAgIGZsYWdNc2cgKyBcInRoZSBhcmd1bWVudCB0byBwcm9wZXJ0eSBtdXN0IGJlIGEgc3RyaW5nLCBudW1iZXIsIG9yIHN5bWJvbFwiLFxuICAgICAgICB2b2lkIDAsXG4gICAgICAgIHNzZmlcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIGlmIChpc05lc3RlZCAmJiBpc093bikge1xuICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgIGZsYWdNc2cgKyAnVGhlIFwibmVzdGVkXCIgYW5kIFwib3duXCIgZmxhZ3MgY2Fubm90IGJlIGNvbWJpbmVkLicsXG4gICAgICB2b2lkIDAsXG4gICAgICBzc2ZpXG4gICAgKTtcbiAgfVxuICBpZiAob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgICAgZmxhZ01zZyArIFwiVGFyZ2V0IGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC5cIixcbiAgICAgIHZvaWQgMCxcbiAgICAgIHNzZmlcbiAgICApO1xuICB9XG4gIHZhciBpc0RlZXAgPSBmbGFnMih0aGlzLCBcImRlZXBcIiksIG5lZ2F0ZSA9IGZsYWcyKHRoaXMsIFwibmVnYXRlXCIpLCBwYXRoSW5mbyA9IGlzTmVzdGVkID8gZ2V0UGF0aEluZm8ob2JqLCBuYW1lKSA6IG51bGwsIHZhbHVlID0gaXNOZXN0ZWQgPyBwYXRoSW5mby52YWx1ZSA6IG9ialtuYW1lXSwgaXNFcWwgPSBpc0RlZXAgPyBmbGFnMih0aGlzLCBcImVxbFwiKSA6ICh2YWwxLCB2YWwyKSA9PiB2YWwxID09PSB2YWwyO1xuICB2YXIgZGVzY3JpcHRvciA9IFwiXCI7XG4gIGlmIChpc0RlZXApXG4gICAgZGVzY3JpcHRvciArPSBcImRlZXAgXCI7XG4gIGlmIChpc093bilcbiAgICBkZXNjcmlwdG9yICs9IFwib3duIFwiO1xuICBpZiAoaXNOZXN0ZWQpXG4gICAgZGVzY3JpcHRvciArPSBcIm5lc3RlZCBcIjtcbiAgZGVzY3JpcHRvciArPSBcInByb3BlcnR5IFwiO1xuICB2YXIgaGFzUHJvcGVydHkyO1xuICBpZiAoaXNPd24pXG4gICAgaGFzUHJvcGVydHkyID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgbmFtZSk7XG4gIGVsc2UgaWYgKGlzTmVzdGVkKVxuICAgIGhhc1Byb3BlcnR5MiA9IHBhdGhJbmZvLmV4aXN0cztcbiAgZWxzZVxuICAgIGhhc1Byb3BlcnR5MiA9IGhhc1Byb3BlcnR5KG9iaiwgbmFtZSk7XG4gIGlmICghbmVnYXRlIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgIGhhc1Byb3BlcnR5MixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBoYXZlIFwiICsgZGVzY3JpcHRvciArIGluc3BlY3QyKG5hbWUpLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBoYXZlIFwiICsgZGVzY3JpcHRvciArIGluc3BlY3QyKG5hbWUpXG4gICAgKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgIGhhc1Byb3BlcnR5MiAmJiBpc0VxbCh2YWwsIHZhbHVlKSxcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBoYXZlIFwiICsgZGVzY3JpcHRvciArIGluc3BlY3QyKG5hbWUpICsgXCIgb2YgI3tleHB9LCBidXQgZ290ICN7YWN0fVwiLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBoYXZlIFwiICsgZGVzY3JpcHRvciArIGluc3BlY3QyKG5hbWUpICsgXCIgb2YgI3thY3R9XCIsXG4gICAgICB2YWwsXG4gICAgICB2YWx1ZVxuICAgICk7XG4gIH1cbiAgZmxhZzIodGhpcywgXCJvYmplY3RcIiwgdmFsdWUpO1xufVxuX19uYW1lKGFzc2VydFByb3BlcnR5LCBcImFzc2VydFByb3BlcnR5XCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcInByb3BlcnR5XCIsIGFzc2VydFByb3BlcnR5KTtcbmZ1bmN0aW9uIGFzc2VydE93blByb3BlcnR5KG5hbWUsIHZhbHVlLCBtc2cpIHtcbiAgZmxhZzIodGhpcywgXCJvd25cIiwgdHJ1ZSk7XG4gIGFzc2VydFByb3BlcnR5LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5fX25hbWUoYXNzZXJ0T3duUHJvcGVydHksIFwiYXNzZXJ0T3duUHJvcGVydHlcIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwib3duUHJvcGVydHlcIiwgYXNzZXJ0T3duUHJvcGVydHkpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImhhdmVPd25Qcm9wZXJ0eVwiLCBhc3NlcnRPd25Qcm9wZXJ0eSk7XG5mdW5jdGlvbiBhc3NlcnRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobmFtZSwgZGVzY3JpcHRvciwgbXNnKSB7XG4gIGlmICh0eXBlb2YgZGVzY3JpcHRvciA9PT0gXCJzdHJpbmdcIikge1xuICAgIG1zZyA9IGRlc2NyaXB0b3I7XG4gICAgZGVzY3JpcHRvciA9IG51bGw7XG4gIH1cbiAgaWYgKG1zZylcbiAgICBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgdmFyIG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpO1xuICB2YXIgYWN0dWFsRGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0KG9iaiksIG5hbWUpO1xuICB2YXIgZXFsID0gZmxhZzIodGhpcywgXCJlcWxcIik7XG4gIGlmIChhY3R1YWxEZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IpIHtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgIGVxbChkZXNjcmlwdG9yLCBhY3R1YWxEZXNjcmlwdG9yKSxcbiAgICAgIFwiZXhwZWN0ZWQgdGhlIG93biBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciBcIiArIGluc3BlY3QyKG5hbWUpICsgXCIgb24gI3t0aGlzfSB0byBtYXRjaCBcIiArIGluc3BlY3QyKGRlc2NyaXB0b3IpICsgXCIsIGdvdCBcIiArIGluc3BlY3QyKGFjdHVhbERlc2NyaXB0b3IpLFxuICAgICAgXCJleHBlY3RlZCB0aGUgb3duIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIFwiICsgaW5zcGVjdDIobmFtZSkgKyBcIiBvbiAje3RoaXN9IHRvIG5vdCBtYXRjaCBcIiArIGluc3BlY3QyKGRlc2NyaXB0b3IpLFxuICAgICAgZGVzY3JpcHRvcixcbiAgICAgIGFjdHVhbERlc2NyaXB0b3IsXG4gICAgICB0cnVlXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgIGFjdHVhbERlc2NyaXB0b3IsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gaGF2ZSBhbiBvd24gcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgXCIgKyBpbnNwZWN0MihuYW1lKSxcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgaGF2ZSBhbiBvd24gcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgXCIgKyBpbnNwZWN0MihuYW1lKVxuICAgICk7XG4gIH1cbiAgZmxhZzIodGhpcywgXCJvYmplY3RcIiwgYWN0dWFsRGVzY3JpcHRvcik7XG59XG5fX25hbWUoYXNzZXJ0T3duUHJvcGVydHlEZXNjcmlwdG9yLCBcImFzc2VydE93blByb3BlcnR5RGVzY3JpcHRvclwiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJvd25Qcm9wZXJ0eURlc2NyaXB0b3JcIiwgYXNzZXJ0T3duUHJvcGVydHlEZXNjcmlwdG9yKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJoYXZlT3duUHJvcGVydHlEZXNjcmlwdG9yXCIsIGFzc2VydE93blByb3BlcnR5RGVzY3JpcHRvcik7XG5mdW5jdGlvbiBhc3NlcnRMZW5ndGhDaGFpbigpIHtcbiAgZmxhZzIodGhpcywgXCJkb0xlbmd0aFwiLCB0cnVlKTtcbn1cbl9fbmFtZShhc3NlcnRMZW5ndGhDaGFpbiwgXCJhc3NlcnRMZW5ndGhDaGFpblwiKTtcbmZ1bmN0aW9uIGFzc2VydExlbmd0aChuLCBtc2cpIHtcbiAgaWYgKG1zZylcbiAgICBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgdmFyIG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBvYmpUeXBlID0gdHlwZShvYmopLnRvTG93ZXJDYXNlKCksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIHNzZmkgPSBmbGFnMih0aGlzLCBcInNzZmlcIiksIGRlc2NyaXB0b3IgPSBcImxlbmd0aFwiLCBpdGVtc0NvdW50O1xuICBzd2l0Y2ggKG9ialR5cGUpIHtcbiAgICBjYXNlIFwibWFwXCI6XG4gICAgY2FzZSBcInNldFwiOlxuICAgICAgZGVzY3JpcHRvciA9IFwic2l6ZVwiO1xuICAgICAgaXRlbXNDb3VudCA9IG9iai5zaXplO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIG5ldyBBc3NlcnRpb24ob2JqLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5oYXZlLnByb3BlcnR5KFwibGVuZ3RoXCIpO1xuICAgICAgaXRlbXNDb3VudCA9IG9iai5sZW5ndGg7XG4gIH1cbiAgdGhpcy5hc3NlcnQoXG4gICAgaXRlbXNDb3VudCA9PSBuLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBoYXZlIGEgXCIgKyBkZXNjcmlwdG9yICsgXCIgb2YgI3tleHB9IGJ1dCBnb3QgI3thY3R9XCIsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBoYXZlIGEgXCIgKyBkZXNjcmlwdG9yICsgXCIgb2YgI3thY3R9XCIsXG4gICAgbixcbiAgICBpdGVtc0NvdW50XG4gICk7XG59XG5fX25hbWUoYXNzZXJ0TGVuZ3RoLCBcImFzc2VydExlbmd0aFwiKTtcbkFzc2VydGlvbi5hZGRDaGFpbmFibGVNZXRob2QoXCJsZW5ndGhcIiwgYXNzZXJ0TGVuZ3RoLCBhc3NlcnRMZW5ndGhDaGFpbik7XG5Bc3NlcnRpb24uYWRkQ2hhaW5hYmxlTWV0aG9kKFwibGVuZ3RoT2ZcIiwgYXNzZXJ0TGVuZ3RoLCBhc3NlcnRMZW5ndGhDaGFpbik7XG5mdW5jdGlvbiBhc3NlcnRNYXRjaChyZSwgbXNnKSB7XG4gIGlmIChtc2cpXG4gICAgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIHZhciBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKTtcbiAgdGhpcy5hc3NlcnQoXG4gICAgcmUuZXhlYyhvYmopLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBtYXRjaCBcIiArIHJlLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSBub3QgdG8gbWF0Y2ggXCIgKyByZVxuICApO1xufVxuX19uYW1lKGFzc2VydE1hdGNoLCBcImFzc2VydE1hdGNoXCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcIm1hdGNoXCIsIGFzc2VydE1hdGNoKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJtYXRjaGVzXCIsIGFzc2VydE1hdGNoKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJzdHJpbmdcIiwgZnVuY3Rpb24oc3RyLCBtc2cpIHtcbiAgaWYgKG1zZylcbiAgICBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgdmFyIG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBmbGFnTXNnID0gZmxhZzIodGhpcywgXCJtZXNzYWdlXCIpLCBzc2ZpID0gZmxhZzIodGhpcywgXCJzc2ZpXCIpO1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkuaXMuYShcInN0cmluZ1wiKTtcbiAgdGhpcy5hc3NlcnQoXG4gICAgfm9iai5pbmRleE9mKHN0ciksXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGNvbnRhaW4gXCIgKyBpbnNwZWN0MihzdHIpLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgY29udGFpbiBcIiArIGluc3BlY3QyKHN0cilcbiAgKTtcbn0pO1xuZnVuY3Rpb24gYXNzZXJ0S2V5cyhrZXlzKSB7XG4gIHZhciBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgb2JqVHlwZSA9IHR5cGUob2JqKSwga2V5c1R5cGUgPSB0eXBlKGtleXMpLCBzc2ZpID0gZmxhZzIodGhpcywgXCJzc2ZpXCIpLCBpc0RlZXAgPSBmbGFnMih0aGlzLCBcImRlZXBcIiksIHN0ciwgZGVlcFN0ciA9IFwiXCIsIGFjdHVhbCwgb2sgPSB0cnVlLCBmbGFnTXNnID0gZmxhZzIodGhpcywgXCJtZXNzYWdlXCIpO1xuICBmbGFnTXNnID0gZmxhZ01zZyA/IGZsYWdNc2cgKyBcIjogXCIgOiBcIlwiO1xuICB2YXIgbWl4ZWRBcmdzTXNnID0gZmxhZ01zZyArIFwid2hlbiB0ZXN0aW5nIGtleXMgYWdhaW5zdCBhbiBvYmplY3Qgb3IgYW4gYXJyYXkgeW91IG11c3QgZ2l2ZSBhIHNpbmdsZSBBcnJheXxPYmplY3R8U3RyaW5nIGFyZ3VtZW50IG9yIG11bHRpcGxlIFN0cmluZyBhcmd1bWVudHNcIjtcbiAgaWYgKG9ialR5cGUgPT09IFwiTWFwXCIgfHwgb2JqVHlwZSA9PT0gXCJTZXRcIikge1xuICAgIGRlZXBTdHIgPSBpc0RlZXAgPyBcImRlZXBseSBcIiA6IFwiXCI7XG4gICAgYWN0dWFsID0gW107XG4gICAgb2JqLmZvckVhY2goZnVuY3Rpb24odmFsLCBrZXkpIHtcbiAgICAgIGFjdHVhbC5wdXNoKGtleSk7XG4gICAgfSk7XG4gICAgaWYgKGtleXNUeXBlICE9PSBcIkFycmF5XCIpIHtcbiAgICAgIGtleXMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBhY3R1YWwgPSBnZXRPd25FbnVtZXJhYmxlUHJvcGVydGllcyhvYmopO1xuICAgIHN3aXRjaCAoa2V5c1R5cGUpIHtcbiAgICAgIGNhc2UgXCJBcnJheVwiOlxuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IobWl4ZWRBcmdzTXNnLCB2b2lkIDAsIHNzZmkpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIk9iamVjdFwiOlxuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IobWl4ZWRBcmdzTXNnLCB2b2lkIDAsIHNzZmkpO1xuICAgICAgICB9XG4gICAgICAgIGtleXMgPSBPYmplY3Qua2V5cyhrZXlzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBrZXlzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICB9XG4gICAga2V5cyA9IGtleXMubWFwKGZ1bmN0aW9uKHZhbCkge1xuICAgICAgcmV0dXJuIHR5cGVvZiB2YWwgPT09IFwic3ltYm9sXCIgPyB2YWwgOiBTdHJpbmcodmFsKTtcbiAgICB9KTtcbiAgfVxuICBpZiAoIWtleXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKGZsYWdNc2cgKyBcImtleXMgcmVxdWlyZWRcIiwgdm9pZCAwLCBzc2ZpKTtcbiAgfVxuICB2YXIgbGVuID0ga2V5cy5sZW5ndGgsIGFueSA9IGZsYWcyKHRoaXMsIFwiYW55XCIpLCBhbGwgPSBmbGFnMih0aGlzLCBcImFsbFwiKSwgZXhwZWN0ZWQgPSBrZXlzLCBpc0VxbCA9IGlzRGVlcCA/IGZsYWcyKHRoaXMsIFwiZXFsXCIpIDogKHZhbDEsIHZhbDIpID0+IHZhbDEgPT09IHZhbDI7XG4gIGlmICghYW55ICYmICFhbGwpIHtcbiAgICBhbGwgPSB0cnVlO1xuICB9XG4gIGlmIChhbnkpIHtcbiAgICBvayA9IGV4cGVjdGVkLnNvbWUoZnVuY3Rpb24oZXhwZWN0ZWRLZXkpIHtcbiAgICAgIHJldHVybiBhY3R1YWwuc29tZShmdW5jdGlvbihhY3R1YWxLZXkpIHtcbiAgICAgICAgcmV0dXJuIGlzRXFsKGV4cGVjdGVkS2V5LCBhY3R1YWxLZXkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgaWYgKGFsbCkge1xuICAgIG9rID0gZXhwZWN0ZWQuZXZlcnkoZnVuY3Rpb24oZXhwZWN0ZWRLZXkpIHtcbiAgICAgIHJldHVybiBhY3R1YWwuc29tZShmdW5jdGlvbihhY3R1YWxLZXkpIHtcbiAgICAgICAgcmV0dXJuIGlzRXFsKGV4cGVjdGVkS2V5LCBhY3R1YWxLZXkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaWYgKCFmbGFnMih0aGlzLCBcImNvbnRhaW5zXCIpKSB7XG4gICAgICBvayA9IG9rICYmIGtleXMubGVuZ3RoID09IGFjdHVhbC5sZW5ndGg7XG4gICAgfVxuICB9XG4gIGlmIChsZW4gPiAxKSB7XG4gICAga2V5cyA9IGtleXMubWFwKGZ1bmN0aW9uKGtleSkge1xuICAgICAgcmV0dXJuIGluc3BlY3QyKGtleSk7XG4gICAgfSk7XG4gICAgdmFyIGxhc3QgPSBrZXlzLnBvcCgpO1xuICAgIGlmIChhbGwpIHtcbiAgICAgIHN0ciA9IGtleXMuam9pbihcIiwgXCIpICsgXCIsIGFuZCBcIiArIGxhc3Q7XG4gICAgfVxuICAgIGlmIChhbnkpIHtcbiAgICAgIHN0ciA9IGtleXMuam9pbihcIiwgXCIpICsgXCIsIG9yIFwiICsgbGFzdDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgc3RyID0gaW5zcGVjdDIoa2V5c1swXSk7XG4gIH1cbiAgc3RyID0gKGxlbiA+IDEgPyBcImtleXMgXCIgOiBcImtleSBcIikgKyBzdHI7XG4gIHN0ciA9IChmbGFnMih0aGlzLCBcImNvbnRhaW5zXCIpID8gXCJjb250YWluIFwiIDogXCJoYXZlIFwiKSArIHN0cjtcbiAgdGhpcy5hc3NlcnQoXG4gICAgb2ssXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIFwiICsgZGVlcFN0ciArIHN0cixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IFwiICsgZGVlcFN0ciArIHN0cixcbiAgICBleHBlY3RlZC5zbGljZSgwKS5zb3J0KGNvbXBhcmVCeUluc3BlY3QpLFxuICAgIGFjdHVhbC5zb3J0KGNvbXBhcmVCeUluc3BlY3QpLFxuICAgIHRydWVcbiAgKTtcbn1cbl9fbmFtZShhc3NlcnRLZXlzLCBcImFzc2VydEtleXNcIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwia2V5c1wiLCBhc3NlcnRLZXlzKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJrZXlcIiwgYXNzZXJ0S2V5cyk7XG5mdW5jdGlvbiBhc3NlcnRUaHJvd3MoZXJyb3JMaWtlLCBlcnJNc2dNYXRjaGVyLCBtc2cpIHtcbiAgaWYgKG1zZylcbiAgICBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgdmFyIG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBzc2ZpID0gZmxhZzIodGhpcywgXCJzc2ZpXCIpLCBmbGFnTXNnID0gZmxhZzIodGhpcywgXCJtZXNzYWdlXCIpLCBuZWdhdGUgPSBmbGFnMih0aGlzLCBcIm5lZ2F0ZVwiKSB8fCBmYWxzZTtcbiAgbmV3IEFzc2VydGlvbihvYmosIGZsYWdNc2csIHNzZmksIHRydWUpLmlzLmEoXCJmdW5jdGlvblwiKTtcbiAgaWYgKGlzUmVnRXhwMihlcnJvckxpa2UpIHx8IHR5cGVvZiBlcnJvckxpa2UgPT09IFwic3RyaW5nXCIpIHtcbiAgICBlcnJNc2dNYXRjaGVyID0gZXJyb3JMaWtlO1xuICAgIGVycm9yTGlrZSA9IG51bGw7XG4gIH1cbiAgbGV0IGNhdWdodEVycjtcbiAgbGV0IGVycm9yV2FzVGhyb3duID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgb2JqKCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGVycm9yV2FzVGhyb3duID0gdHJ1ZTtcbiAgICBjYXVnaHRFcnIgPSBlcnI7XG4gIH1cbiAgdmFyIGV2ZXJ5QXJnSXNVbmRlZmluZWQgPSBlcnJvckxpa2UgPT09IHZvaWQgMCAmJiBlcnJNc2dNYXRjaGVyID09PSB2b2lkIDA7XG4gIHZhciBldmVyeUFyZ0lzRGVmaW5lZCA9IEJvb2xlYW4oZXJyb3JMaWtlICYmIGVyck1zZ01hdGNoZXIpO1xuICB2YXIgZXJyb3JMaWtlRmFpbCA9IGZhbHNlO1xuICB2YXIgZXJyTXNnTWF0Y2hlckZhaWwgPSBmYWxzZTtcbiAgaWYgKGV2ZXJ5QXJnSXNVbmRlZmluZWQgfHwgIWV2ZXJ5QXJnSXNVbmRlZmluZWQgJiYgIW5lZ2F0ZSkge1xuICAgIHZhciBlcnJvckxpa2VTdHJpbmcgPSBcImFuIGVycm9yXCI7XG4gICAgaWYgKGVycm9yTGlrZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICBlcnJvckxpa2VTdHJpbmcgPSBcIiN7ZXhwfVwiO1xuICAgIH0gZWxzZSBpZiAoZXJyb3JMaWtlKSB7XG4gICAgICBlcnJvckxpa2VTdHJpbmcgPSBjaGVja19lcnJvcl9leHBvcnRzLmdldENvbnN0cnVjdG9yTmFtZShlcnJvckxpa2UpO1xuICAgIH1cbiAgICBsZXQgYWN0dWFsID0gY2F1Z2h0RXJyO1xuICAgIGlmIChjYXVnaHRFcnIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgYWN0dWFsID0gY2F1Z2h0RXJyLnRvU3RyaW5nKCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgY2F1Z2h0RXJyID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBhY3R1YWwgPSBjYXVnaHRFcnI7XG4gICAgfSBlbHNlIGlmIChjYXVnaHRFcnIgJiYgKHR5cGVvZiBjYXVnaHRFcnIgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhdWdodEVyciA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYWN0dWFsID0gY2hlY2tfZXJyb3JfZXhwb3J0cy5nZXRDb25zdHJ1Y3Rvck5hbWUoY2F1Z2h0RXJyKTtcbiAgICAgIH0gY2F0Y2ggKF9lcnIpIHtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBlcnJvcldhc1Rocm93bixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byB0aHJvdyBcIiArIGVycm9yTGlrZVN0cmluZyxcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgdGhyb3cgYW4gZXJyb3IgYnV0ICN7YWN0fSB3YXMgdGhyb3duXCIsXG4gICAgICBlcnJvckxpa2UgJiYgZXJyb3JMaWtlLnRvU3RyaW5nKCksXG4gICAgICBhY3R1YWxcbiAgICApO1xuICB9XG4gIGlmIChlcnJvckxpa2UgJiYgY2F1Z2h0RXJyKSB7XG4gICAgaWYgKGVycm9yTGlrZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICB2YXIgaXNDb21wYXRpYmxlSW5zdGFuY2UgPSBjaGVja19lcnJvcl9leHBvcnRzLmNvbXBhdGlibGVJbnN0YW5jZShjYXVnaHRFcnIsIGVycm9yTGlrZSk7XG4gICAgICBpZiAoaXNDb21wYXRpYmxlSW5zdGFuY2UgPT09IG5lZ2F0ZSkge1xuICAgICAgICBpZiAoZXZlcnlBcmdJc0RlZmluZWQgJiYgbmVnYXRlKSB7XG4gICAgICAgICAgZXJyb3JMaWtlRmFpbCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICBuZWdhdGUsXG4gICAgICAgICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gdGhyb3cgI3tleHB9IGJ1dCAje2FjdH0gd2FzIHRocm93blwiLFxuICAgICAgICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCB0aHJvdyAje2V4cH1cIiArIChjYXVnaHRFcnIgJiYgIW5lZ2F0ZSA/IFwiIGJ1dCAje2FjdH0gd2FzIHRocm93blwiIDogXCJcIiksXG4gICAgICAgICAgICBlcnJvckxpa2UudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIGNhdWdodEVyci50b1N0cmluZygpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB2YXIgaXNDb21wYXRpYmxlQ29uc3RydWN0b3IgPSBjaGVja19lcnJvcl9leHBvcnRzLmNvbXBhdGlibGVDb25zdHJ1Y3RvcihjYXVnaHRFcnIsIGVycm9yTGlrZSk7XG4gICAgaWYgKGlzQ29tcGF0aWJsZUNvbnN0cnVjdG9yID09PSBuZWdhdGUpIHtcbiAgICAgIGlmIChldmVyeUFyZ0lzRGVmaW5lZCAmJiBuZWdhdGUpIHtcbiAgICAgICAgZXJyb3JMaWtlRmFpbCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICBuZWdhdGUsXG4gICAgICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIHRocm93ICN7ZXhwfSBidXQgI3thY3R9IHdhcyB0aHJvd25cIixcbiAgICAgICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IHRocm93ICN7ZXhwfVwiICsgKGNhdWdodEVyciA/IFwiIGJ1dCAje2FjdH0gd2FzIHRocm93blwiIDogXCJcIiksXG4gICAgICAgICAgZXJyb3JMaWtlIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvckxpa2UudG9TdHJpbmcoKSA6IGVycm9yTGlrZSAmJiBjaGVja19lcnJvcl9leHBvcnRzLmdldENvbnN0cnVjdG9yTmFtZShlcnJvckxpa2UpLFxuICAgICAgICAgIGNhdWdodEVyciBpbnN0YW5jZW9mIEVycm9yID8gY2F1Z2h0RXJyLnRvU3RyaW5nKCkgOiBjYXVnaHRFcnIgJiYgY2hlY2tfZXJyb3JfZXhwb3J0cy5nZXRDb25zdHJ1Y3Rvck5hbWUoY2F1Z2h0RXJyKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoY2F1Z2h0RXJyICYmIGVyck1zZ01hdGNoZXIgIT09IHZvaWQgMCAmJiBlcnJNc2dNYXRjaGVyICE9PSBudWxsKSB7XG4gICAgdmFyIHBsYWNlaG9sZGVyID0gXCJpbmNsdWRpbmdcIjtcbiAgICBpZiAoaXNSZWdFeHAyKGVyck1zZ01hdGNoZXIpKSB7XG4gICAgICBwbGFjZWhvbGRlciA9IFwibWF0Y2hpbmdcIjtcbiAgICB9XG4gICAgdmFyIGlzQ29tcGF0aWJsZU1lc3NhZ2UgPSBjaGVja19lcnJvcl9leHBvcnRzLmNvbXBhdGlibGVNZXNzYWdlKGNhdWdodEVyciwgZXJyTXNnTWF0Y2hlcik7XG4gICAgaWYgKGlzQ29tcGF0aWJsZU1lc3NhZ2UgPT09IG5lZ2F0ZSkge1xuICAgICAgaWYgKGV2ZXJ5QXJnSXNEZWZpbmVkICYmIG5lZ2F0ZSkge1xuICAgICAgICBlcnJNc2dNYXRjaGVyRmFpbCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICBuZWdhdGUsXG4gICAgICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIHRocm93IGVycm9yIFwiICsgcGxhY2Vob2xkZXIgKyBcIiAje2V4cH0gYnV0IGdvdCAje2FjdH1cIixcbiAgICAgICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gdGhyb3cgZXJyb3Igbm90IFwiICsgcGxhY2Vob2xkZXIgKyBcIiAje2V4cH1cIixcbiAgICAgICAgICBlcnJNc2dNYXRjaGVyLFxuICAgICAgICAgIGNoZWNrX2Vycm9yX2V4cG9ydHMuZ2V0TWVzc2FnZShjYXVnaHRFcnIpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChlcnJvckxpa2VGYWlsICYmIGVyck1zZ01hdGNoZXJGYWlsKSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBuZWdhdGUsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gdGhyb3cgI3tleHB9IGJ1dCAje2FjdH0gd2FzIHRocm93blwiLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCB0aHJvdyAje2V4cH1cIiArIChjYXVnaHRFcnIgPyBcIiBidXQgI3thY3R9IHdhcyB0aHJvd25cIiA6IFwiXCIpLFxuICAgICAgZXJyb3JMaWtlIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvckxpa2UudG9TdHJpbmcoKSA6IGVycm9yTGlrZSAmJiBjaGVja19lcnJvcl9leHBvcnRzLmdldENvbnN0cnVjdG9yTmFtZShlcnJvckxpa2UpLFxuICAgICAgY2F1Z2h0RXJyIGluc3RhbmNlb2YgRXJyb3IgPyBjYXVnaHRFcnIudG9TdHJpbmcoKSA6IGNhdWdodEVyciAmJiBjaGVja19lcnJvcl9leHBvcnRzLmdldENvbnN0cnVjdG9yTmFtZShjYXVnaHRFcnIpXG4gICAgKTtcbiAgfVxuICBmbGFnMih0aGlzLCBcIm9iamVjdFwiLCBjYXVnaHRFcnIpO1xufVxuX19uYW1lKGFzc2VydFRocm93cywgXCJhc3NlcnRUaHJvd3NcIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwidGhyb3dcIiwgYXNzZXJ0VGhyb3dzKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJ0aHJvd3NcIiwgYXNzZXJ0VGhyb3dzKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJUaHJvd1wiLCBhc3NlcnRUaHJvd3MpO1xuZnVuY3Rpb24gcmVzcG9uZFRvKG1ldGhvZCwgbXNnKSB7XG4gIGlmIChtc2cpXG4gICAgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIHZhciBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgaXRzZWxmID0gZmxhZzIodGhpcywgXCJpdHNlbGZcIiksIGNvbnRleHQgPSBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBvYmogJiYgIWl0c2VsZiA/IG9iai5wcm90b3R5cGVbbWV0aG9kXSA6IG9ialttZXRob2RdO1xuICB0aGlzLmFzc2VydChcbiAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBjb250ZXh0LFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byByZXNwb25kIHRvIFwiICsgaW5zcGVjdDIobWV0aG9kKSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IHJlc3BvbmQgdG8gXCIgKyBpbnNwZWN0MihtZXRob2QpXG4gICk7XG59XG5fX25hbWUocmVzcG9uZFRvLCBcInJlc3BvbmRUb1wiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJyZXNwb25kVG9cIiwgcmVzcG9uZFRvKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJyZXNwb25kc1RvXCIsIHJlc3BvbmRUbyk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJpdHNlbGZcIiwgZnVuY3Rpb24oKSB7XG4gIGZsYWcyKHRoaXMsIFwiaXRzZWxmXCIsIHRydWUpO1xufSk7XG5mdW5jdGlvbiBzYXRpc2Z5KG1hdGNoZXIsIG1zZykge1xuICBpZiAobXNnKVxuICAgIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB2YXIgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIik7XG4gIHZhciByZXN1bHQgPSBtYXRjaGVyKG9iaik7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIHJlc3VsdCxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gc2F0aXNmeSBcIiArIG9iakRpc3BsYXkobWF0Y2hlciksXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBzYXRpc2Z5XCIgKyBvYmpEaXNwbGF5KG1hdGNoZXIpLFxuICAgIGZsYWcyKHRoaXMsIFwibmVnYXRlXCIpID8gZmFsc2UgOiB0cnVlLFxuICAgIHJlc3VsdFxuICApO1xufVxuX19uYW1lKHNhdGlzZnksIFwic2F0aXNmeVwiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJzYXRpc2Z5XCIsIHNhdGlzZnkpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcInNhdGlzZmllc1wiLCBzYXRpc2Z5KTtcbmZ1bmN0aW9uIGNsb3NlVG8oZXhwZWN0ZWQsIGRlbHRhLCBtc2cpIHtcbiAgaWYgKG1zZylcbiAgICBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgdmFyIG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBmbGFnTXNnID0gZmxhZzIodGhpcywgXCJtZXNzYWdlXCIpLCBzc2ZpID0gZmxhZzIodGhpcywgXCJzc2ZpXCIpO1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkuaXMubnVtZXJpYztcbiAgbGV0IG1lc3NhZ2UgPSBcIkEgYGRlbHRhYCB2YWx1ZSBpcyByZXF1aXJlZCBmb3IgYGNsb3NlVG9gXCI7XG4gIGlmIChkZWx0YSA9PSB2b2lkIDApXG4gICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKGZsYWdNc2cgPyBgJHtmbGFnTXNnfTogJHttZXNzYWdlfWAgOiBtZXNzYWdlLCB2b2lkIDAsIHNzZmkpO1xuICBuZXcgQXNzZXJ0aW9uKGRlbHRhLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5udW1lcmljO1xuICBtZXNzYWdlID0gXCJBIGBleHBlY3RlZGAgdmFsdWUgaXMgcmVxdWlyZWQgZm9yIGBjbG9zZVRvYFwiO1xuICBpZiAoZXhwZWN0ZWQgPT0gdm9pZCAwKVxuICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihmbGFnTXNnID8gYCR7ZmxhZ01zZ306ICR7bWVzc2FnZX1gIDogbWVzc2FnZSwgdm9pZCAwLCBzc2ZpKTtcbiAgbmV3IEFzc2VydGlvbihleHBlY3RlZCwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkuaXMubnVtZXJpYztcbiAgY29uc3QgYWJzID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoeCkgPT4geCA8IDBuID8gLXggOiB4LCBcImFic1wiKTtcbiAgdGhpcy5hc3NlcnQoXG4gICAgYWJzKG9iaiAtIGV4cGVjdGVkKSA8PSBkZWx0YSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgY2xvc2UgdG8gXCIgKyBleHBlY3RlZCArIFwiICsvLSBcIiArIGRlbHRhLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSBub3QgdG8gYmUgY2xvc2UgdG8gXCIgKyBleHBlY3RlZCArIFwiICsvLSBcIiArIGRlbHRhXG4gICk7XG59XG5fX25hbWUoY2xvc2VUbywgXCJjbG9zZVRvXCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImNsb3NlVG9cIiwgY2xvc2VUbyk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiYXBwcm94aW1hdGVseVwiLCBjbG9zZVRvKTtcbmZ1bmN0aW9uIGlzU3Vic2V0T2YoX3N1YnNldCwgX3N1cGVyc2V0LCBjbXAsIGNvbnRhaW5zLCBvcmRlcmVkKSB7XG4gIGxldCBzdXBlcnNldCA9IEFycmF5LmZyb20oX3N1cGVyc2V0KTtcbiAgbGV0IHN1YnNldCA9IEFycmF5LmZyb20oX3N1YnNldCk7XG4gIGlmICghY29udGFpbnMpIHtcbiAgICBpZiAoc3Vic2V0Lmxlbmd0aCAhPT0gc3VwZXJzZXQubGVuZ3RoKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHN1cGVyc2V0ID0gc3VwZXJzZXQuc2xpY2UoKTtcbiAgfVxuICByZXR1cm4gc3Vic2V0LmV2ZXJ5KGZ1bmN0aW9uKGVsZW0sIGlkeCkge1xuICAgIGlmIChvcmRlcmVkKVxuICAgICAgcmV0dXJuIGNtcCA/IGNtcChlbGVtLCBzdXBlcnNldFtpZHhdKSA6IGVsZW0gPT09IHN1cGVyc2V0W2lkeF07XG4gICAgaWYgKCFjbXApIHtcbiAgICAgIHZhciBtYXRjaElkeCA9IHN1cGVyc2V0LmluZGV4T2YoZWxlbSk7XG4gICAgICBpZiAobWF0Y2hJZHggPT09IC0xKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoIWNvbnRhaW5zKVxuICAgICAgICBzdXBlcnNldC5zcGxpY2UobWF0Y2hJZHgsIDEpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBzdXBlcnNldC5zb21lKGZ1bmN0aW9uKGVsZW0yLCBtYXRjaElkeDIpIHtcbiAgICAgIGlmICghY21wKGVsZW0sIGVsZW0yKSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKCFjb250YWlucylcbiAgICAgICAgc3VwZXJzZXQuc3BsaWNlKG1hdGNoSWR4MiwgMSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgfSk7XG59XG5fX25hbWUoaXNTdWJzZXRPZiwgXCJpc1N1YnNldE9mXCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcIm1lbWJlcnNcIiwgZnVuY3Rpb24oc3Vic2V0LCBtc2cpIHtcbiAgaWYgKG1zZylcbiAgICBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgdmFyIG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBmbGFnTXNnID0gZmxhZzIodGhpcywgXCJtZXNzYWdlXCIpLCBzc2ZpID0gZmxhZzIodGhpcywgXCJzc2ZpXCIpO1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkudG8uYmUuaXRlcmFibGU7XG4gIG5ldyBBc3NlcnRpb24oc3Vic2V0LCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5iZS5pdGVyYWJsZTtcbiAgdmFyIGNvbnRhaW5zID0gZmxhZzIodGhpcywgXCJjb250YWluc1wiKTtcbiAgdmFyIG9yZGVyZWQgPSBmbGFnMih0aGlzLCBcIm9yZGVyZWRcIik7XG4gIHZhciBzdWJqZWN0LCBmYWlsTXNnLCBmYWlsTmVnYXRlTXNnO1xuICBpZiAoY29udGFpbnMpIHtcbiAgICBzdWJqZWN0ID0gb3JkZXJlZCA/IFwiYW4gb3JkZXJlZCBzdXBlcnNldFwiIDogXCJhIHN1cGVyc2V0XCI7XG4gICAgZmFpbE1zZyA9IFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBcIiArIHN1YmplY3QgKyBcIiBvZiAje2V4cH1cIjtcbiAgICBmYWlsTmVnYXRlTXNnID0gXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBiZSBcIiArIHN1YmplY3QgKyBcIiBvZiAje2V4cH1cIjtcbiAgfSBlbHNlIHtcbiAgICBzdWJqZWN0ID0gb3JkZXJlZCA/IFwib3JkZXJlZCBtZW1iZXJzXCIgOiBcIm1lbWJlcnNcIjtcbiAgICBmYWlsTXNnID0gXCJleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgdGhlIHNhbWUgXCIgKyBzdWJqZWN0ICsgXCIgYXMgI3tleHB9XCI7XG4gICAgZmFpbE5lZ2F0ZU1zZyA9IFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgaGF2ZSB0aGUgc2FtZSBcIiArIHN1YmplY3QgKyBcIiBhcyAje2V4cH1cIjtcbiAgfVxuICB2YXIgY21wID0gZmxhZzIodGhpcywgXCJkZWVwXCIpID8gZmxhZzIodGhpcywgXCJlcWxcIikgOiB2b2lkIDA7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIGlzU3Vic2V0T2Yoc3Vic2V0LCBvYmosIGNtcCwgY29udGFpbnMsIG9yZGVyZWQpLFxuICAgIGZhaWxNc2csXG4gICAgZmFpbE5lZ2F0ZU1zZyxcbiAgICBzdWJzZXQsXG4gICAgb2JqLFxuICAgIHRydWVcbiAgKTtcbn0pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwiaXRlcmFibGVcIiwgZnVuY3Rpb24obXNnKSB7XG4gIGlmIChtc2cpXG4gICAgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIHZhciBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKTtcbiAgdGhpcy5hc3NlcnQoXG4gICAgb2JqICE9IHZvaWQgMCAmJiBvYmpbU3ltYm9sLml0ZXJhdG9yXSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgYW4gaXRlcmFibGVcIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGJlIGFuIGl0ZXJhYmxlXCIsXG4gICAgb2JqXG4gICk7XG59KTtcbmZ1bmN0aW9uIG9uZU9mKGxpc3QsIG1zZykge1xuICBpZiAobXNnKVxuICAgIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB2YXIgZXhwZWN0ZWQgPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgZmxhZ01zZyA9IGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiKSwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKSwgY29udGFpbnMgPSBmbGFnMih0aGlzLCBcImNvbnRhaW5zXCIpLCBpc0RlZXAgPSBmbGFnMih0aGlzLCBcImRlZXBcIiksIGVxbCA9IGZsYWcyKHRoaXMsIFwiZXFsXCIpO1xuICBuZXcgQXNzZXJ0aW9uKGxpc3QsIGZsYWdNc2csIHNzZmksIHRydWUpLnRvLmJlLmFuKFwiYXJyYXlcIik7XG4gIGlmIChjb250YWlucykge1xuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgbGlzdC5zb21lKGZ1bmN0aW9uKHBvc3NpYmlsaXR5KSB7XG4gICAgICAgIHJldHVybiBleHBlY3RlZC5pbmRleE9mKHBvc3NpYmlsaXR5KSA+IC0xO1xuICAgICAgfSksXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gY29udGFpbiBvbmUgb2YgI3tleHB9XCIsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGNvbnRhaW4gb25lIG9mICN7ZXhwfVwiLFxuICAgICAgbGlzdCxcbiAgICAgIGV4cGVjdGVkXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoaXNEZWVwKSB7XG4gICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgbGlzdC5zb21lKGZ1bmN0aW9uKHBvc3NpYmlsaXR5KSB7XG4gICAgICAgICAgcmV0dXJuIGVxbChleHBlY3RlZCwgcG9zc2liaWxpdHkpO1xuICAgICAgICB9KSxcbiAgICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGRlZXBseSBlcXVhbCBvbmUgb2YgI3tleHB9XCIsXG4gICAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBkZWVwbHkgZXF1YWwgb25lIG9mICN7ZXhwfVwiLFxuICAgICAgICBsaXN0LFxuICAgICAgICBleHBlY3RlZFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgIGxpc3QuaW5kZXhPZihleHBlY3RlZCkgPiAtMSxcbiAgICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIG9uZSBvZiAje2V4cH1cIixcbiAgICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBiZSBvbmUgb2YgI3tleHB9XCIsXG4gICAgICAgIGxpc3QsXG4gICAgICAgIGV4cGVjdGVkXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuX19uYW1lKG9uZU9mLCBcIm9uZU9mXCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcIm9uZU9mXCIsIG9uZU9mKTtcbmZ1bmN0aW9uIGFzc2VydENoYW5nZXMoc3ViamVjdCwgcHJvcCwgbXNnKSB7XG4gIGlmIChtc2cpXG4gICAgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIHZhciBmbiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBmbGFnTXNnID0gZmxhZzIodGhpcywgXCJtZXNzYWdlXCIpLCBzc2ZpID0gZmxhZzIodGhpcywgXCJzc2ZpXCIpO1xuICBuZXcgQXNzZXJ0aW9uKGZuLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5hKFwiZnVuY3Rpb25cIik7XG4gIHZhciBpbml0aWFsO1xuICBpZiAoIXByb3ApIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHN1YmplY3QsIGZsYWdNc2csIHNzZmksIHRydWUpLmlzLmEoXCJmdW5jdGlvblwiKTtcbiAgICBpbml0aWFsID0gc3ViamVjdCgpO1xuICB9IGVsc2Uge1xuICAgIG5ldyBBc3NlcnRpb24oc3ViamVjdCwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkudG8uaGF2ZS5wcm9wZXJ0eShwcm9wKTtcbiAgICBpbml0aWFsID0gc3ViamVjdFtwcm9wXTtcbiAgfVxuICBmbigpO1xuICB2YXIgZmluYWwgPSBwcm9wID09PSB2b2lkIDAgfHwgcHJvcCA9PT0gbnVsbCA/IHN1YmplY3QoKSA6IHN1YmplY3RbcHJvcF07XG4gIHZhciBtc2dPYmogPSBwcm9wID09PSB2b2lkIDAgfHwgcHJvcCA9PT0gbnVsbCA/IGluaXRpYWwgOiBcIi5cIiArIHByb3A7XG4gIGZsYWcyKHRoaXMsIFwiZGVsdGFNc2dPYmpcIiwgbXNnT2JqKTtcbiAgZmxhZzIodGhpcywgXCJpbml0aWFsRGVsdGFWYWx1ZVwiLCBpbml0aWFsKTtcbiAgZmxhZzIodGhpcywgXCJmaW5hbERlbHRhVmFsdWVcIiwgZmluYWwpO1xuICBmbGFnMih0aGlzLCBcImRlbHRhQmVoYXZpb3JcIiwgXCJjaGFuZ2VcIik7XG4gIGZsYWcyKHRoaXMsIFwicmVhbERlbHRhXCIsIGZpbmFsICE9PSBpbml0aWFsKTtcbiAgdGhpcy5hc3NlcnQoXG4gICAgaW5pdGlhbCAhPT0gZmluYWwsXG4gICAgXCJleHBlY3RlZCBcIiArIG1zZ09iaiArIFwiIHRvIGNoYW5nZVwiLFxuICAgIFwiZXhwZWN0ZWQgXCIgKyBtc2dPYmogKyBcIiB0byBub3QgY2hhbmdlXCJcbiAgKTtcbn1cbl9fbmFtZShhc3NlcnRDaGFuZ2VzLCBcImFzc2VydENoYW5nZXNcIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiY2hhbmdlXCIsIGFzc2VydENoYW5nZXMpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImNoYW5nZXNcIiwgYXNzZXJ0Q2hhbmdlcyk7XG5mdW5jdGlvbiBhc3NlcnRJbmNyZWFzZXMoc3ViamVjdCwgcHJvcCwgbXNnKSB7XG4gIGlmIChtc2cpXG4gICAgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIHZhciBmbiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBmbGFnTXNnID0gZmxhZzIodGhpcywgXCJtZXNzYWdlXCIpLCBzc2ZpID0gZmxhZzIodGhpcywgXCJzc2ZpXCIpO1xuICBuZXcgQXNzZXJ0aW9uKGZuLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5hKFwiZnVuY3Rpb25cIik7XG4gIHZhciBpbml0aWFsO1xuICBpZiAoIXByb3ApIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHN1YmplY3QsIGZsYWdNc2csIHNzZmksIHRydWUpLmlzLmEoXCJmdW5jdGlvblwiKTtcbiAgICBpbml0aWFsID0gc3ViamVjdCgpO1xuICB9IGVsc2Uge1xuICAgIG5ldyBBc3NlcnRpb24oc3ViamVjdCwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkudG8uaGF2ZS5wcm9wZXJ0eShwcm9wKTtcbiAgICBpbml0aWFsID0gc3ViamVjdFtwcm9wXTtcbiAgfVxuICBuZXcgQXNzZXJ0aW9uKGluaXRpYWwsIGZsYWdNc2csIHNzZmksIHRydWUpLmlzLmEoXCJudW1iZXJcIik7XG4gIGZuKCk7XG4gIHZhciBmaW5hbCA9IHByb3AgPT09IHZvaWQgMCB8fCBwcm9wID09PSBudWxsID8gc3ViamVjdCgpIDogc3ViamVjdFtwcm9wXTtcbiAgdmFyIG1zZ09iaiA9IHByb3AgPT09IHZvaWQgMCB8fCBwcm9wID09PSBudWxsID8gaW5pdGlhbCA6IFwiLlwiICsgcHJvcDtcbiAgZmxhZzIodGhpcywgXCJkZWx0YU1zZ09ialwiLCBtc2dPYmopO1xuICBmbGFnMih0aGlzLCBcImluaXRpYWxEZWx0YVZhbHVlXCIsIGluaXRpYWwpO1xuICBmbGFnMih0aGlzLCBcImZpbmFsRGVsdGFWYWx1ZVwiLCBmaW5hbCk7XG4gIGZsYWcyKHRoaXMsIFwiZGVsdGFCZWhhdmlvclwiLCBcImluY3JlYXNlXCIpO1xuICBmbGFnMih0aGlzLCBcInJlYWxEZWx0YVwiLCBmaW5hbCAtIGluaXRpYWwpO1xuICB0aGlzLmFzc2VydChcbiAgICBmaW5hbCAtIGluaXRpYWwgPiAwLFxuICAgIFwiZXhwZWN0ZWQgXCIgKyBtc2dPYmogKyBcIiB0byBpbmNyZWFzZVwiLFxuICAgIFwiZXhwZWN0ZWQgXCIgKyBtc2dPYmogKyBcIiB0byBub3QgaW5jcmVhc2VcIlxuICApO1xufVxuX19uYW1lKGFzc2VydEluY3JlYXNlcywgXCJhc3NlcnRJbmNyZWFzZXNcIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiaW5jcmVhc2VcIiwgYXNzZXJ0SW5jcmVhc2VzKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJpbmNyZWFzZXNcIiwgYXNzZXJ0SW5jcmVhc2VzKTtcbmZ1bmN0aW9uIGFzc2VydERlY3JlYXNlcyhzdWJqZWN0LCBwcm9wLCBtc2cpIHtcbiAgaWYgKG1zZylcbiAgICBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgdmFyIGZuID0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIHNzZmkgPSBmbGFnMih0aGlzLCBcInNzZmlcIik7XG4gIG5ldyBBc3NlcnRpb24oZm4sIGZsYWdNc2csIHNzZmksIHRydWUpLmlzLmEoXCJmdW5jdGlvblwiKTtcbiAgdmFyIGluaXRpYWw7XG4gIGlmICghcHJvcCkge1xuICAgIG5ldyBBc3NlcnRpb24oc3ViamVjdCwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkuaXMuYShcImZ1bmN0aW9uXCIpO1xuICAgIGluaXRpYWwgPSBzdWJqZWN0KCk7XG4gIH0gZWxzZSB7XG4gICAgbmV3IEFzc2VydGlvbihzdWJqZWN0LCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5oYXZlLnByb3BlcnR5KHByb3ApO1xuICAgIGluaXRpYWwgPSBzdWJqZWN0W3Byb3BdO1xuICB9XG4gIG5ldyBBc3NlcnRpb24oaW5pdGlhbCwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkuaXMuYShcIm51bWJlclwiKTtcbiAgZm4oKTtcbiAgdmFyIGZpbmFsID0gcHJvcCA9PT0gdm9pZCAwIHx8IHByb3AgPT09IG51bGwgPyBzdWJqZWN0KCkgOiBzdWJqZWN0W3Byb3BdO1xuICB2YXIgbXNnT2JqID0gcHJvcCA9PT0gdm9pZCAwIHx8IHByb3AgPT09IG51bGwgPyBpbml0aWFsIDogXCIuXCIgKyBwcm9wO1xuICBmbGFnMih0aGlzLCBcImRlbHRhTXNnT2JqXCIsIG1zZ09iaik7XG4gIGZsYWcyKHRoaXMsIFwiaW5pdGlhbERlbHRhVmFsdWVcIiwgaW5pdGlhbCk7XG4gIGZsYWcyKHRoaXMsIFwiZmluYWxEZWx0YVZhbHVlXCIsIGZpbmFsKTtcbiAgZmxhZzIodGhpcywgXCJkZWx0YUJlaGF2aW9yXCIsIFwiZGVjcmVhc2VcIik7XG4gIGZsYWcyKHRoaXMsIFwicmVhbERlbHRhXCIsIGluaXRpYWwgLSBmaW5hbCk7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIGZpbmFsIC0gaW5pdGlhbCA8IDAsXG4gICAgXCJleHBlY3RlZCBcIiArIG1zZ09iaiArIFwiIHRvIGRlY3JlYXNlXCIsXG4gICAgXCJleHBlY3RlZCBcIiArIG1zZ09iaiArIFwiIHRvIG5vdCBkZWNyZWFzZVwiXG4gICk7XG59XG5fX25hbWUoYXNzZXJ0RGVjcmVhc2VzLCBcImFzc2VydERlY3JlYXNlc1wiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJkZWNyZWFzZVwiLCBhc3NlcnREZWNyZWFzZXMpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImRlY3JlYXNlc1wiLCBhc3NlcnREZWNyZWFzZXMpO1xuZnVuY3Rpb24gYXNzZXJ0RGVsdGEoZGVsdGEsIG1zZykge1xuICBpZiAobXNnKVxuICAgIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB2YXIgbXNnT2JqID0gZmxhZzIodGhpcywgXCJkZWx0YU1zZ09ialwiKTtcbiAgdmFyIGluaXRpYWwgPSBmbGFnMih0aGlzLCBcImluaXRpYWxEZWx0YVZhbHVlXCIpO1xuICB2YXIgZmluYWwgPSBmbGFnMih0aGlzLCBcImZpbmFsRGVsdGFWYWx1ZVwiKTtcbiAgdmFyIGJlaGF2aW9yID0gZmxhZzIodGhpcywgXCJkZWx0YUJlaGF2aW9yXCIpO1xuICB2YXIgcmVhbERlbHRhID0gZmxhZzIodGhpcywgXCJyZWFsRGVsdGFcIik7XG4gIHZhciBleHByZXNzaW9uO1xuICBpZiAoYmVoYXZpb3IgPT09IFwiY2hhbmdlXCIpIHtcbiAgICBleHByZXNzaW9uID0gTWF0aC5hYnMoZmluYWwgLSBpbml0aWFsKSA9PT0gTWF0aC5hYnMoZGVsdGEpO1xuICB9IGVsc2Uge1xuICAgIGV4cHJlc3Npb24gPSByZWFsRGVsdGEgPT09IE1hdGguYWJzKGRlbHRhKTtcbiAgfVxuICB0aGlzLmFzc2VydChcbiAgICBleHByZXNzaW9uLFxuICAgIFwiZXhwZWN0ZWQgXCIgKyBtc2dPYmogKyBcIiB0byBcIiArIGJlaGF2aW9yICsgXCIgYnkgXCIgKyBkZWx0YSxcbiAgICBcImV4cGVjdGVkIFwiICsgbXNnT2JqICsgXCIgdG8gbm90IFwiICsgYmVoYXZpb3IgKyBcIiBieSBcIiArIGRlbHRhXG4gICk7XG59XG5fX25hbWUoYXNzZXJ0RGVsdGEsIFwiYXNzZXJ0RGVsdGFcIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiYnlcIiwgYXNzZXJ0RGVsdGEpO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwiZXh0ZW5zaWJsZVwiLCBmdW5jdGlvbigpIHtcbiAgdmFyIG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpO1xuICB2YXIgaXNFeHRlbnNpYmxlID0gb2JqID09PSBPYmplY3Qob2JqKSAmJiBPYmplY3QuaXNFeHRlbnNpYmxlKG9iaik7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIGlzRXh0ZW5zaWJsZSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgZXh0ZW5zaWJsZVwiLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgYmUgZXh0ZW5zaWJsZVwiXG4gICk7XG59KTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcInNlYWxlZFwiLCBmdW5jdGlvbigpIHtcbiAgdmFyIG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpO1xuICB2YXIgaXNTZWFsZWQgPSBvYmogPT09IE9iamVjdChvYmopID8gT2JqZWN0LmlzU2VhbGVkKG9iaikgOiB0cnVlO1xuICB0aGlzLmFzc2VydChcbiAgICBpc1NlYWxlZCxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgc2VhbGVkXCIsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBiZSBzZWFsZWRcIlxuICApO1xufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJmcm96ZW5cIiwgZnVuY3Rpb24oKSB7XG4gIHZhciBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKTtcbiAgdmFyIGlzRnJvemVuID0gb2JqID09PSBPYmplY3Qob2JqKSA/IE9iamVjdC5pc0Zyb3plbihvYmopIDogdHJ1ZTtcbiAgdGhpcy5hc3NlcnQoXG4gICAgaXNGcm96ZW4sXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIGZyb3plblwiLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgYmUgZnJvemVuXCJcbiAgKTtcbn0pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwiZmluaXRlXCIsIGZ1bmN0aW9uKG1zZykge1xuICB2YXIgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIik7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIHR5cGVvZiBvYmogPT09IFwibnVtYmVyXCIgJiYgaXNGaW5pdGUob2JqKSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgYSBmaW5pdGUgbnVtYmVyXCIsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBiZSBhIGZpbml0ZSBudW1iZXJcIlxuICApO1xufSk7XG5cbi8vIGxpYi9jaGFpL2ludGVyZmFjZS9leHBlY3QuanNcbmZ1bmN0aW9uIGV4cGVjdCh2YWwsIG1lc3NhZ2UpIHtcbiAgcmV0dXJuIG5ldyBBc3NlcnRpb24odmFsLCBtZXNzYWdlKTtcbn1cbl9fbmFtZShleHBlY3QsIFwiZXhwZWN0XCIpO1xuZXhwZWN0LmZhaWwgPSBmdW5jdGlvbihhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCBvcGVyYXRvcikge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICBtZXNzYWdlID0gYWN0dWFsO1xuICAgIGFjdHVhbCA9IHZvaWQgMDtcbiAgfVxuICBtZXNzYWdlID0gbWVzc2FnZSB8fCBcImV4cGVjdC5mYWlsKClcIjtcbiAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKG1lc3NhZ2UsIHtcbiAgICBhY3R1YWwsXG4gICAgZXhwZWN0ZWQsXG4gICAgb3BlcmF0b3JcbiAgfSwgZXhwZWN0LmZhaWwpO1xufTtcblxuLy8gbGliL2NoYWkvaW50ZXJmYWNlL3Nob3VsZC5qc1xudmFyIHNob3VsZF9leHBvcnRzID0ge307XG5fX2V4cG9ydChzaG91bGRfZXhwb3J0cywge1xuICBTaG91bGQ6ICgpID0+IFNob3VsZCxcbiAgc2hvdWxkOiAoKSA9PiBzaG91bGRcbn0pO1xuZnVuY3Rpb24gbG9hZFNob3VsZCgpIHtcbiAgZnVuY3Rpb24gc2hvdWxkR2V0dGVyKCkge1xuICAgIGlmICh0aGlzIGluc3RhbmNlb2YgU3RyaW5nIHx8IHRoaXMgaW5zdGFuY2VvZiBOdW1iZXIgfHwgdGhpcyBpbnN0YW5jZW9mIEJvb2xlYW4gfHwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHRoaXMgaW5zdGFuY2VvZiBTeW1ib2wgfHwgdHlwZW9mIEJpZ0ludCA9PT0gXCJmdW5jdGlvblwiICYmIHRoaXMgaW5zdGFuY2VvZiBCaWdJbnQpIHtcbiAgICAgIHJldHVybiBuZXcgQXNzZXJ0aW9uKHRoaXMudmFsdWVPZigpLCBudWxsLCBzaG91bGRHZXR0ZXIpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEFzc2VydGlvbih0aGlzLCBudWxsLCBzaG91bGRHZXR0ZXIpO1xuICB9XG4gIF9fbmFtZShzaG91bGRHZXR0ZXIsIFwic2hvdWxkR2V0dGVyXCIpO1xuICBmdW5jdGlvbiBzaG91bGRTZXR0ZXIodmFsdWUpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJzaG91bGRcIiwge1xuICAgICAgdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfVxuICBfX25hbWUoc2hvdWxkU2V0dGVyLCBcInNob3VsZFNldHRlclwiKTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE9iamVjdC5wcm90b3R5cGUsIFwic2hvdWxkXCIsIHtcbiAgICBzZXQ6IHNob3VsZFNldHRlcixcbiAgICBnZXQ6IHNob3VsZEdldHRlcixcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7XG4gIHZhciBzaG91bGQyID0ge307XG4gIHNob3VsZDIuZmFpbCA9IGZ1bmN0aW9uKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsIG9wZXJhdG9yKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgICBtZXNzYWdlID0gYWN0dWFsO1xuICAgICAgYWN0dWFsID0gdm9pZCAwO1xuICAgIH1cbiAgICBtZXNzYWdlID0gbWVzc2FnZSB8fCBcInNob3VsZC5mYWlsKClcIjtcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IobWVzc2FnZSwge1xuICAgICAgYWN0dWFsLFxuICAgICAgZXhwZWN0ZWQsXG4gICAgICBvcGVyYXRvclxuICAgIH0sIHNob3VsZDIuZmFpbCk7XG4gIH07XG4gIHNob3VsZDIuZXF1YWwgPSBmdW5jdGlvbihhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gICAgbmV3IEFzc2VydGlvbihhY3R1YWwsIG1lc3NhZ2UpLnRvLmVxdWFsKGV4cGVjdGVkKTtcbiAgfTtcbiAgc2hvdWxkMi5UaHJvdyA9IGZ1bmN0aW9uKGZuLCBlcnJ0LCBlcnJzLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKGZuLCBtc2cpLnRvLlRocm93KGVycnQsIGVycnMpO1xuICB9O1xuICBzaG91bGQyLmV4aXN0ID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnKS50by5leGlzdDtcbiAgfTtcbiAgc2hvdWxkMi5ub3QgPSB7fTtcbiAgc2hvdWxkMi5ub3QuZXF1YWwgPSBmdW5jdGlvbihhY3R1YWwsIGV4cGVjdGVkLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKGFjdHVhbCwgbXNnKS50by5ub3QuZXF1YWwoZXhwZWN0ZWQpO1xuICB9O1xuICBzaG91bGQyLm5vdC5UaHJvdyA9IGZ1bmN0aW9uKGZuLCBlcnJ0LCBlcnJzLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKGZuLCBtc2cpLnRvLm5vdC5UaHJvdyhlcnJ0LCBlcnJzKTtcbiAgfTtcbiAgc2hvdWxkMi5ub3QuZXhpc3QgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2cpLnRvLm5vdC5leGlzdDtcbiAgfTtcbiAgc2hvdWxkMltcInRocm93XCJdID0gc2hvdWxkMltcIlRocm93XCJdO1xuICBzaG91bGQyLm5vdFtcInRocm93XCJdID0gc2hvdWxkMi5ub3RbXCJUaHJvd1wiXTtcbiAgcmV0dXJuIHNob3VsZDI7XG59XG5fX25hbWUobG9hZFNob3VsZCwgXCJsb2FkU2hvdWxkXCIpO1xudmFyIHNob3VsZCA9IGxvYWRTaG91bGQ7XG52YXIgU2hvdWxkID0gbG9hZFNob3VsZDtcblxuLy8gbGliL2NoYWkvaW50ZXJmYWNlL2Fzc2VydC5qc1xuZnVuY3Rpb24gYXNzZXJ0KGV4cHJlc3MsIGVycm1zZykge1xuICB2YXIgdGVzdDIgPSBuZXcgQXNzZXJ0aW9uKG51bGwsIG51bGwsIGFzc2VydCwgdHJ1ZSk7XG4gIHRlc3QyLmFzc2VydChcbiAgICBleHByZXNzLFxuICAgIGVycm1zZyxcbiAgICBcIlsgbmVnYXRpb24gbWVzc2FnZSB1bmF2YWlsYWJsZSBdXCJcbiAgKTtcbn1cbl9fbmFtZShhc3NlcnQsIFwiYXNzZXJ0XCIpO1xuYXNzZXJ0LmZhaWwgPSBmdW5jdGlvbihhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCBvcGVyYXRvcikge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICBtZXNzYWdlID0gYWN0dWFsO1xuICAgIGFjdHVhbCA9IHZvaWQgMDtcbiAgfVxuICBtZXNzYWdlID0gbWVzc2FnZSB8fCBcImFzc2VydC5mYWlsKClcIjtcbiAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKG1lc3NhZ2UsIHtcbiAgICBhY3R1YWwsXG4gICAgZXhwZWN0ZWQsXG4gICAgb3BlcmF0b3JcbiAgfSwgYXNzZXJ0LmZhaWwpO1xufTtcbmFzc2VydC5pc09rID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzT2ssIHRydWUpLmlzLm9rO1xufTtcbmFzc2VydC5pc05vdE9rID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTm90T2ssIHRydWUpLmlzLm5vdC5vaztcbn07XG5hc3NlcnQuZXF1YWwgPSBmdW5jdGlvbihhY3QsIGV4cCwgbXNnKSB7XG4gIHZhciB0ZXN0MiA9IG5ldyBBc3NlcnRpb24oYWN0LCBtc2csIGFzc2VydC5lcXVhbCwgdHJ1ZSk7XG4gIHRlc3QyLmFzc2VydChcbiAgICBleHAgPT0gZmxhZyh0ZXN0MiwgXCJvYmplY3RcIiksXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGVxdWFsICN7ZXhwfVwiLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgZXF1YWwgI3thY3R9XCIsXG4gICAgZXhwLFxuICAgIGFjdCxcbiAgICB0cnVlXG4gICk7XG59O1xuYXNzZXJ0Lm5vdEVxdWFsID0gZnVuY3Rpb24oYWN0LCBleHAsIG1zZykge1xuICB2YXIgdGVzdDIgPSBuZXcgQXNzZXJ0aW9uKGFjdCwgbXNnLCBhc3NlcnQubm90RXF1YWwsIHRydWUpO1xuICB0ZXN0Mi5hc3NlcnQoXG4gICAgZXhwICE9IGZsYWcodGVzdDIsIFwib2JqZWN0XCIpLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgZXF1YWwgI3tleHB9XCIsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGVxdWFsICN7YWN0fVwiLFxuICAgIGV4cCxcbiAgICBhY3QsXG4gICAgdHJ1ZVxuICApO1xufTtcbmFzc2VydC5zdHJpY3RFcXVhbCA9IGZ1bmN0aW9uKGFjdCwgZXhwLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihhY3QsIG1zZywgYXNzZXJ0LnN0cmljdEVxdWFsLCB0cnVlKS50by5lcXVhbChleHApO1xufTtcbmFzc2VydC5ub3RTdHJpY3RFcXVhbCA9IGZ1bmN0aW9uKGFjdCwgZXhwLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihhY3QsIG1zZywgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsLCB0cnVlKS50by5ub3QuZXF1YWwoZXhwKTtcbn07XG5hc3NlcnQuZGVlcEVxdWFsID0gYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCA9IGZ1bmN0aW9uKGFjdCwgZXhwLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihhY3QsIG1zZywgYXNzZXJ0LmRlZXBFcXVhbCwgdHJ1ZSkudG8uZXFsKGV4cCk7XG59O1xuYXNzZXJ0Lm5vdERlZXBFcXVhbCA9IGZ1bmN0aW9uKGFjdCwgZXhwLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihhY3QsIG1zZywgYXNzZXJ0Lm5vdERlZXBFcXVhbCwgdHJ1ZSkudG8ubm90LmVxbChleHApO1xufTtcbmFzc2VydC5pc0Fib3ZlID0gZnVuY3Rpb24odmFsLCBhYnYsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNBYm92ZSwgdHJ1ZSkudG8uYmUuYWJvdmUoYWJ2KTtcbn07XG5hc3NlcnQuaXNBdExlYXN0ID0gZnVuY3Rpb24odmFsLCBhdGxzdCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc0F0TGVhc3QsIHRydWUpLnRvLmJlLmxlYXN0KGF0bHN0KTtcbn07XG5hc3NlcnQuaXNCZWxvdyA9IGZ1bmN0aW9uKHZhbCwgYmx3LCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzQmVsb3csIHRydWUpLnRvLmJlLmJlbG93KGJsdyk7XG59O1xuYXNzZXJ0LmlzQXRNb3N0ID0gZnVuY3Rpb24odmFsLCBhdG1zdCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc0F0TW9zdCwgdHJ1ZSkudG8uYmUubW9zdChhdG1zdCk7XG59O1xuYXNzZXJ0LmlzVHJ1ZSA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc1RydWUsIHRydWUpLmlzW1widHJ1ZVwiXTtcbn07XG5hc3NlcnQuaXNOb3RUcnVlID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTm90VHJ1ZSwgdHJ1ZSkudG8ubm90LmVxdWFsKHRydWUpO1xufTtcbmFzc2VydC5pc0ZhbHNlID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzRmFsc2UsIHRydWUpLmlzW1wiZmFsc2VcIl07XG59O1xuYXNzZXJ0LmlzTm90RmFsc2UgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOb3RGYWxzZSwgdHJ1ZSkudG8ubm90LmVxdWFsKGZhbHNlKTtcbn07XG5hc3NlcnQuaXNOdWxsID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTnVsbCwgdHJ1ZSkudG8uZXF1YWwobnVsbCk7XG59O1xuYXNzZXJ0LmlzTm90TnVsbCA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc05vdE51bGwsIHRydWUpLnRvLm5vdC5lcXVhbChudWxsKTtcbn07XG5hc3NlcnQuaXNOYU4gPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOYU4sIHRydWUpLnRvLmJlLk5hTjtcbn07XG5hc3NlcnQuaXNOb3ROYU4gPSBmdW5jdGlvbih2YWx1ZSwgbWVzc2FnZSkge1xuICBuZXcgQXNzZXJ0aW9uKHZhbHVlLCBtZXNzYWdlLCBhc3NlcnQuaXNOb3ROYU4sIHRydWUpLm5vdC50by5iZS5OYU47XG59O1xuYXNzZXJ0LmV4aXN0cyA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5leGlzdHMsIHRydWUpLnRvLmV4aXN0O1xufTtcbmFzc2VydC5ub3RFeGlzdHMgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQubm90RXhpc3RzLCB0cnVlKS50by5ub3QuZXhpc3Q7XG59O1xuYXNzZXJ0LmlzVW5kZWZpbmVkID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzVW5kZWZpbmVkLCB0cnVlKS50by5lcXVhbCh2b2lkIDApO1xufTtcbmFzc2VydC5pc0RlZmluZWQgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNEZWZpbmVkLCB0cnVlKS50by5ub3QuZXF1YWwodm9pZCAwKTtcbn07XG5hc3NlcnQuaXNDYWxsYWJsZSA9IGZ1bmN0aW9uKHZhbHVlLCBtZXNzYWdlKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsdWUsIG1lc3NhZ2UsIGFzc2VydC5pc0NhbGxhYmxlLCB0cnVlKS5pcy5jYWxsYWJsZTtcbn07XG5hc3NlcnQuaXNOb3RDYWxsYWJsZSA9IGZ1bmN0aW9uKHZhbHVlLCBtZXNzYWdlKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsdWUsIG1lc3NhZ2UsIGFzc2VydC5pc05vdENhbGxhYmxlLCB0cnVlKS5pcy5ub3QuY2FsbGFibGU7XG59O1xuYXNzZXJ0LmlzT2JqZWN0ID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzT2JqZWN0LCB0cnVlKS50by5iZS5hKFwib2JqZWN0XCIpO1xufTtcbmFzc2VydC5pc05vdE9iamVjdCA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc05vdE9iamVjdCwgdHJ1ZSkudG8ubm90LmJlLmEoXCJvYmplY3RcIik7XG59O1xuYXNzZXJ0LmlzQXJyYXkgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNBcnJheSwgdHJ1ZSkudG8uYmUuYW4oXCJhcnJheVwiKTtcbn07XG5hc3NlcnQuaXNOb3RBcnJheSA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc05vdEFycmF5LCB0cnVlKS50by5ub3QuYmUuYW4oXCJhcnJheVwiKTtcbn07XG5hc3NlcnQuaXNTdHJpbmcgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNTdHJpbmcsIHRydWUpLnRvLmJlLmEoXCJzdHJpbmdcIik7XG59O1xuYXNzZXJ0LmlzTm90U3RyaW5nID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTm90U3RyaW5nLCB0cnVlKS50by5ub3QuYmUuYShcInN0cmluZ1wiKTtcbn07XG5hc3NlcnQuaXNOdW1iZXIgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOdW1iZXIsIHRydWUpLnRvLmJlLmEoXCJudW1iZXJcIik7XG59O1xuYXNzZXJ0LmlzTm90TnVtYmVyID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTm90TnVtYmVyLCB0cnVlKS50by5ub3QuYmUuYShcIm51bWJlclwiKTtcbn07XG5hc3NlcnQuaXNOdW1lcmljID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTnVtZXJpYywgdHJ1ZSkuaXMubnVtZXJpYztcbn07XG5hc3NlcnQuaXNOb3ROdW1lcmljID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTm90TnVtZXJpYywgdHJ1ZSkuaXMubm90Lm51bWVyaWM7XG59O1xuYXNzZXJ0LmlzRmluaXRlID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzRmluaXRlLCB0cnVlKS50by5iZS5maW5pdGU7XG59O1xuYXNzZXJ0LmlzQm9vbGVhbiA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc0Jvb2xlYW4sIHRydWUpLnRvLmJlLmEoXCJib29sZWFuXCIpO1xufTtcbmFzc2VydC5pc05vdEJvb2xlYW4gPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOb3RCb29sZWFuLCB0cnVlKS50by5ub3QuYmUuYShcImJvb2xlYW5cIik7XG59O1xuYXNzZXJ0LnR5cGVPZiA9IGZ1bmN0aW9uKHZhbCwgdHlwZTMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQudHlwZU9mLCB0cnVlKS50by5iZS5hKHR5cGUzKTtcbn07XG5hc3NlcnQubm90VHlwZU9mID0gZnVuY3Rpb24odmFsdWUsIHR5cGUzLCBtZXNzYWdlKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsdWUsIG1lc3NhZ2UsIGFzc2VydC5ub3RUeXBlT2YsIHRydWUpLnRvLm5vdC5iZS5hKHR5cGUzKTtcbn07XG5hc3NlcnQuaW5zdGFuY2VPZiA9IGZ1bmN0aW9uKHZhbCwgdHlwZTMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaW5zdGFuY2VPZiwgdHJ1ZSkudG8uYmUuaW5zdGFuY2VPZih0eXBlMyk7XG59O1xuYXNzZXJ0Lm5vdEluc3RhbmNlT2YgPSBmdW5jdGlvbih2YWwsIHR5cGUzLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0Lm5vdEluc3RhbmNlT2YsIHRydWUpLnRvLm5vdC5iZS5pbnN0YW5jZU9mKHR5cGUzKTtcbn07XG5hc3NlcnQuaW5jbHVkZSA9IGZ1bmN0aW9uKGV4cCwgaW5jLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0LmluY2x1ZGUsIHRydWUpLmluY2x1ZGUoaW5jKTtcbn07XG5hc3NlcnQubm90SW5jbHVkZSA9IGZ1bmN0aW9uKGV4cCwgaW5jLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0Lm5vdEluY2x1ZGUsIHRydWUpLm5vdC5pbmNsdWRlKGluYyk7XG59O1xuYXNzZXJ0LmRlZXBJbmNsdWRlID0gZnVuY3Rpb24oZXhwLCBpbmMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQuZGVlcEluY2x1ZGUsIHRydWUpLmRlZXAuaW5jbHVkZShpbmMpO1xufTtcbmFzc2VydC5ub3REZWVwSW5jbHVkZSA9IGZ1bmN0aW9uKGV4cCwgaW5jLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0Lm5vdERlZXBJbmNsdWRlLCB0cnVlKS5ub3QuZGVlcC5pbmNsdWRlKGluYyk7XG59O1xuYXNzZXJ0Lm5lc3RlZEluY2x1ZGUgPSBmdW5jdGlvbihleHAsIGluYywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5uZXN0ZWRJbmNsdWRlLCB0cnVlKS5uZXN0ZWQuaW5jbHVkZShpbmMpO1xufTtcbmFzc2VydC5ub3ROZXN0ZWRJbmNsdWRlID0gZnVuY3Rpb24oZXhwLCBpbmMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQubm90TmVzdGVkSW5jbHVkZSwgdHJ1ZSkubm90Lm5lc3RlZC5pbmNsdWRlKGluYyk7XG59O1xuYXNzZXJ0LmRlZXBOZXN0ZWRJbmNsdWRlID0gZnVuY3Rpb24oZXhwLCBpbmMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQuZGVlcE5lc3RlZEluY2x1ZGUsIHRydWUpLmRlZXAubmVzdGVkLmluY2x1ZGUoaW5jKTtcbn07XG5hc3NlcnQubm90RGVlcE5lc3RlZEluY2x1ZGUgPSBmdW5jdGlvbihleHAsIGluYywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5ub3REZWVwTmVzdGVkSW5jbHVkZSwgdHJ1ZSkubm90LmRlZXAubmVzdGVkLmluY2x1ZGUoaW5jKTtcbn07XG5hc3NlcnQub3duSW5jbHVkZSA9IGZ1bmN0aW9uKGV4cCwgaW5jLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0Lm93bkluY2x1ZGUsIHRydWUpLm93bi5pbmNsdWRlKGluYyk7XG59O1xuYXNzZXJ0Lm5vdE93bkluY2x1ZGUgPSBmdW5jdGlvbihleHAsIGluYywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5ub3RPd25JbmNsdWRlLCB0cnVlKS5ub3Qub3duLmluY2x1ZGUoaW5jKTtcbn07XG5hc3NlcnQuZGVlcE93bkluY2x1ZGUgPSBmdW5jdGlvbihleHAsIGluYywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5kZWVwT3duSW5jbHVkZSwgdHJ1ZSkuZGVlcC5vd24uaW5jbHVkZShpbmMpO1xufTtcbmFzc2VydC5ub3REZWVwT3duSW5jbHVkZSA9IGZ1bmN0aW9uKGV4cCwgaW5jLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0Lm5vdERlZXBPd25JbmNsdWRlLCB0cnVlKS5ub3QuZGVlcC5vd24uaW5jbHVkZShpbmMpO1xufTtcbmFzc2VydC5tYXRjaCA9IGZ1bmN0aW9uKGV4cCwgcmUsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQubWF0Y2gsIHRydWUpLnRvLm1hdGNoKHJlKTtcbn07XG5hc3NlcnQubm90TWF0Y2ggPSBmdW5jdGlvbihleHAsIHJlLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0Lm5vdE1hdGNoLCB0cnVlKS50by5ub3QubWF0Y2gocmUpO1xufTtcbmFzc2VydC5wcm9wZXJ0eSA9IGZ1bmN0aW9uKG9iaiwgcHJvcCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5wcm9wZXJ0eSwgdHJ1ZSkudG8uaGF2ZS5wcm9wZXJ0eShwcm9wKTtcbn07XG5hc3NlcnQubm90UHJvcGVydHkgPSBmdW5jdGlvbihvYmosIHByb3AsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQubm90UHJvcGVydHksIHRydWUpLnRvLm5vdC5oYXZlLnByb3BlcnR5KHByb3ApO1xufTtcbmFzc2VydC5wcm9wZXJ0eVZhbCA9IGZ1bmN0aW9uKG9iaiwgcHJvcCwgdmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LnByb3BlcnR5VmFsLCB0cnVlKS50by5oYXZlLnByb3BlcnR5KHByb3AsIHZhbCk7XG59O1xuYXNzZXJ0Lm5vdFByb3BlcnR5VmFsID0gZnVuY3Rpb24ob2JqLCBwcm9wLCB2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQubm90UHJvcGVydHlWYWwsIHRydWUpLnRvLm5vdC5oYXZlLnByb3BlcnR5KHByb3AsIHZhbCk7XG59O1xuYXNzZXJ0LmRlZXBQcm9wZXJ0eVZhbCA9IGZ1bmN0aW9uKG9iaiwgcHJvcCwgdmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmRlZXBQcm9wZXJ0eVZhbCwgdHJ1ZSkudG8uaGF2ZS5kZWVwLnByb3BlcnR5KHByb3AsIHZhbCk7XG59O1xuYXNzZXJ0Lm5vdERlZXBQcm9wZXJ0eVZhbCA9IGZ1bmN0aW9uKG9iaiwgcHJvcCwgdmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0Lm5vdERlZXBQcm9wZXJ0eVZhbCwgdHJ1ZSkudG8ubm90LmhhdmUuZGVlcC5wcm9wZXJ0eShwcm9wLCB2YWwpO1xufTtcbmFzc2VydC5vd25Qcm9wZXJ0eSA9IGZ1bmN0aW9uKG9iaiwgcHJvcCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5vd25Qcm9wZXJ0eSwgdHJ1ZSkudG8uaGF2ZS5vd24ucHJvcGVydHkocHJvcCk7XG59O1xuYXNzZXJ0Lm5vdE93blByb3BlcnR5ID0gZnVuY3Rpb24ob2JqLCBwcm9wLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0Lm5vdE93blByb3BlcnR5LCB0cnVlKS50by5ub3QuaGF2ZS5vd24ucHJvcGVydHkocHJvcCk7XG59O1xuYXNzZXJ0Lm93blByb3BlcnR5VmFsID0gZnVuY3Rpb24ob2JqLCBwcm9wLCB2YWx1ZSwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5vd25Qcm9wZXJ0eVZhbCwgdHJ1ZSkudG8uaGF2ZS5vd24ucHJvcGVydHkocHJvcCwgdmFsdWUpO1xufTtcbmFzc2VydC5ub3RPd25Qcm9wZXJ0eVZhbCA9IGZ1bmN0aW9uKG9iaiwgcHJvcCwgdmFsdWUsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQubm90T3duUHJvcGVydHlWYWwsIHRydWUpLnRvLm5vdC5oYXZlLm93bi5wcm9wZXJ0eShwcm9wLCB2YWx1ZSk7XG59O1xuYXNzZXJ0LmRlZXBPd25Qcm9wZXJ0eVZhbCA9IGZ1bmN0aW9uKG9iaiwgcHJvcCwgdmFsdWUsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuZGVlcE93blByb3BlcnR5VmFsLCB0cnVlKS50by5oYXZlLmRlZXAub3duLnByb3BlcnR5KHByb3AsIHZhbHVlKTtcbn07XG5hc3NlcnQubm90RGVlcE93blByb3BlcnR5VmFsID0gZnVuY3Rpb24ob2JqLCBwcm9wLCB2YWx1ZSwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5ub3REZWVwT3duUHJvcGVydHlWYWwsIHRydWUpLnRvLm5vdC5oYXZlLmRlZXAub3duLnByb3BlcnR5KHByb3AsIHZhbHVlKTtcbn07XG5hc3NlcnQubmVzdGVkUHJvcGVydHkgPSBmdW5jdGlvbihvYmosIHByb3AsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQubmVzdGVkUHJvcGVydHksIHRydWUpLnRvLmhhdmUubmVzdGVkLnByb3BlcnR5KHByb3ApO1xufTtcbmFzc2VydC5ub3ROZXN0ZWRQcm9wZXJ0eSA9IGZ1bmN0aW9uKG9iaiwgcHJvcCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5ub3ROZXN0ZWRQcm9wZXJ0eSwgdHJ1ZSkudG8ubm90LmhhdmUubmVzdGVkLnByb3BlcnR5KHByb3ApO1xufTtcbmFzc2VydC5uZXN0ZWRQcm9wZXJ0eVZhbCA9IGZ1bmN0aW9uKG9iaiwgcHJvcCwgdmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0Lm5lc3RlZFByb3BlcnR5VmFsLCB0cnVlKS50by5oYXZlLm5lc3RlZC5wcm9wZXJ0eShwcm9wLCB2YWwpO1xufTtcbmFzc2VydC5ub3ROZXN0ZWRQcm9wZXJ0eVZhbCA9IGZ1bmN0aW9uKG9iaiwgcHJvcCwgdmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0Lm5vdE5lc3RlZFByb3BlcnR5VmFsLCB0cnVlKS50by5ub3QuaGF2ZS5uZXN0ZWQucHJvcGVydHkocHJvcCwgdmFsKTtcbn07XG5hc3NlcnQuZGVlcE5lc3RlZFByb3BlcnR5VmFsID0gZnVuY3Rpb24ob2JqLCBwcm9wLCB2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuZGVlcE5lc3RlZFByb3BlcnR5VmFsLCB0cnVlKS50by5oYXZlLmRlZXAubmVzdGVkLnByb3BlcnR5KHByb3AsIHZhbCk7XG59O1xuYXNzZXJ0Lm5vdERlZXBOZXN0ZWRQcm9wZXJ0eVZhbCA9IGZ1bmN0aW9uKG9iaiwgcHJvcCwgdmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0Lm5vdERlZXBOZXN0ZWRQcm9wZXJ0eVZhbCwgdHJ1ZSkudG8ubm90LmhhdmUuZGVlcC5uZXN0ZWQucHJvcGVydHkocHJvcCwgdmFsKTtcbn07XG5hc3NlcnQubGVuZ3RoT2YgPSBmdW5jdGlvbihleHAsIGxlbiwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5sZW5ndGhPZiwgdHJ1ZSkudG8uaGF2ZS5sZW5ndGhPZihsZW4pO1xufTtcbmFzc2VydC5oYXNBbnlLZXlzID0gZnVuY3Rpb24ob2JqLCBrZXlzLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0Lmhhc0FueUtleXMsIHRydWUpLnRvLmhhdmUuYW55LmtleXMoa2V5cyk7XG59O1xuYXNzZXJ0Lmhhc0FsbEtleXMgPSBmdW5jdGlvbihvYmosIGtleXMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuaGFzQWxsS2V5cywgdHJ1ZSkudG8uaGF2ZS5hbGwua2V5cyhrZXlzKTtcbn07XG5hc3NlcnQuY29udGFpbnNBbGxLZXlzID0gZnVuY3Rpb24ob2JqLCBrZXlzLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmNvbnRhaW5zQWxsS2V5cywgdHJ1ZSkudG8uY29udGFpbi5hbGwua2V5cyhrZXlzKTtcbn07XG5hc3NlcnQuZG9lc05vdEhhdmVBbnlLZXlzID0gZnVuY3Rpb24ob2JqLCBrZXlzLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmRvZXNOb3RIYXZlQW55S2V5cywgdHJ1ZSkudG8ubm90LmhhdmUuYW55LmtleXMoa2V5cyk7XG59O1xuYXNzZXJ0LmRvZXNOb3RIYXZlQWxsS2V5cyA9IGZ1bmN0aW9uKG9iaiwga2V5cywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5kb2VzTm90SGF2ZUFsbEtleXMsIHRydWUpLnRvLm5vdC5oYXZlLmFsbC5rZXlzKGtleXMpO1xufTtcbmFzc2VydC5oYXNBbnlEZWVwS2V5cyA9IGZ1bmN0aW9uKG9iaiwga2V5cywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5oYXNBbnlEZWVwS2V5cywgdHJ1ZSkudG8uaGF2ZS5hbnkuZGVlcC5rZXlzKGtleXMpO1xufTtcbmFzc2VydC5oYXNBbGxEZWVwS2V5cyA9IGZ1bmN0aW9uKG9iaiwga2V5cywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5oYXNBbGxEZWVwS2V5cywgdHJ1ZSkudG8uaGF2ZS5hbGwuZGVlcC5rZXlzKGtleXMpO1xufTtcbmFzc2VydC5jb250YWluc0FsbERlZXBLZXlzID0gZnVuY3Rpb24ob2JqLCBrZXlzLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmNvbnRhaW5zQWxsRGVlcEtleXMsIHRydWUpLnRvLmNvbnRhaW4uYWxsLmRlZXAua2V5cyhrZXlzKTtcbn07XG5hc3NlcnQuZG9lc05vdEhhdmVBbnlEZWVwS2V5cyA9IGZ1bmN0aW9uKG9iaiwga2V5cywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5kb2VzTm90SGF2ZUFueURlZXBLZXlzLCB0cnVlKS50by5ub3QuaGF2ZS5hbnkuZGVlcC5rZXlzKGtleXMpO1xufTtcbmFzc2VydC5kb2VzTm90SGF2ZUFsbERlZXBLZXlzID0gZnVuY3Rpb24ob2JqLCBrZXlzLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmRvZXNOb3RIYXZlQWxsRGVlcEtleXMsIHRydWUpLnRvLm5vdC5oYXZlLmFsbC5kZWVwLmtleXMoa2V5cyk7XG59O1xuYXNzZXJ0LnRocm93cyA9IGZ1bmN0aW9uKGZuLCBlcnJvckxpa2UsIGVyck1zZ01hdGNoZXIsIG1zZykge1xuICBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGVycm9yTGlrZSB8fCBlcnJvckxpa2UgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICBlcnJNc2dNYXRjaGVyID0gZXJyb3JMaWtlO1xuICAgIGVycm9yTGlrZSA9IG51bGw7XG4gIH1cbiAgdmFyIGFzc2VydEVyciA9IG5ldyBBc3NlcnRpb24oZm4sIG1zZywgYXNzZXJ0LnRocm93cywgdHJ1ZSkudG8udGhyb3coZXJyb3JMaWtlLCBlcnJNc2dNYXRjaGVyKTtcbiAgcmV0dXJuIGZsYWcoYXNzZXJ0RXJyLCBcIm9iamVjdFwiKTtcbn07XG5hc3NlcnQuZG9lc05vdFRocm93ID0gZnVuY3Rpb24oZm4sIGVycm9yTGlrZSwgZXJyTXNnTWF0Y2hlciwgbWVzc2FnZSkge1xuICBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGVycm9yTGlrZSB8fCBlcnJvckxpa2UgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICBlcnJNc2dNYXRjaGVyID0gZXJyb3JMaWtlO1xuICAgIGVycm9yTGlrZSA9IG51bGw7XG4gIH1cbiAgbmV3IEFzc2VydGlvbihmbiwgbWVzc2FnZSwgYXNzZXJ0LmRvZXNOb3RUaHJvdywgdHJ1ZSkudG8ubm90LnRocm93KGVycm9yTGlrZSwgZXJyTXNnTWF0Y2hlcik7XG59O1xuYXNzZXJ0Lm9wZXJhdG9yID0gZnVuY3Rpb24odmFsLCBvcGVyYXRvciwgdmFsMiwgbXNnKSB7XG4gIHZhciBvaztcbiAgc3dpdGNoIChvcGVyYXRvcikge1xuICAgIGNhc2UgXCI9PVwiOlxuICAgICAgb2sgPSB2YWwgPT0gdmFsMjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCI9PT1cIjpcbiAgICAgIG9rID0gdmFsID09PSB2YWwyO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIj5cIjpcbiAgICAgIG9rID0gdmFsID4gdmFsMjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCI+PVwiOlxuICAgICAgb2sgPSB2YWwgPj0gdmFsMjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCI8XCI6XG4gICAgICBvayA9IHZhbCA8IHZhbDI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiPD1cIjpcbiAgICAgIG9rID0gdmFsIDw9IHZhbDI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiIT1cIjpcbiAgICAgIG9rID0gdmFsICE9IHZhbDI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiIT09XCI6XG4gICAgICBvayA9IHZhbCAhPT0gdmFsMjtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBtc2cgPSBtc2cgPyBtc2cgKyBcIjogXCIgOiBtc2c7XG4gICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICAgIG1zZyArICdJbnZhbGlkIG9wZXJhdG9yIFwiJyArIG9wZXJhdG9yICsgJ1wiJyxcbiAgICAgICAgdm9pZCAwLFxuICAgICAgICBhc3NlcnQub3BlcmF0b3JcbiAgICAgICk7XG4gIH1cbiAgdmFyIHRlc3QyID0gbmV3IEFzc2VydGlvbihvaywgbXNnLCBhc3NlcnQub3BlcmF0b3IsIHRydWUpO1xuICB0ZXN0Mi5hc3NlcnQoXG4gICAgdHJ1ZSA9PT0gZmxhZyh0ZXN0MiwgXCJvYmplY3RcIiksXG4gICAgXCJleHBlY3RlZCBcIiArIGluc3BlY3QyKHZhbCkgKyBcIiB0byBiZSBcIiArIG9wZXJhdG9yICsgXCIgXCIgKyBpbnNwZWN0Mih2YWwyKSxcbiAgICBcImV4cGVjdGVkIFwiICsgaW5zcGVjdDIodmFsKSArIFwiIHRvIG5vdCBiZSBcIiArIG9wZXJhdG9yICsgXCIgXCIgKyBpbnNwZWN0Mih2YWwyKVxuICApO1xufTtcbmFzc2VydC5jbG9zZVRvID0gZnVuY3Rpb24oYWN0LCBleHAsIGRlbHRhLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihhY3QsIG1zZywgYXNzZXJ0LmNsb3NlVG8sIHRydWUpLnRvLmJlLmNsb3NlVG8oZXhwLCBkZWx0YSk7XG59O1xuYXNzZXJ0LmFwcHJveGltYXRlbHkgPSBmdW5jdGlvbihhY3QsIGV4cCwgZGVsdGEsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGFjdCwgbXNnLCBhc3NlcnQuYXBwcm94aW1hdGVseSwgdHJ1ZSkudG8uYmUuYXBwcm94aW1hdGVseShleHAsIGRlbHRhKTtcbn07XG5hc3NlcnQuc2FtZU1lbWJlcnMgPSBmdW5jdGlvbihzZXQxLCBzZXQyLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihzZXQxLCBtc2csIGFzc2VydC5zYW1lTWVtYmVycywgdHJ1ZSkudG8uaGF2ZS5zYW1lLm1lbWJlcnMoc2V0Mik7XG59O1xuYXNzZXJ0Lm5vdFNhbWVNZW1iZXJzID0gZnVuY3Rpb24oc2V0MSwgc2V0MiwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oc2V0MSwgbXNnLCBhc3NlcnQubm90U2FtZU1lbWJlcnMsIHRydWUpLnRvLm5vdC5oYXZlLnNhbWUubWVtYmVycyhzZXQyKTtcbn07XG5hc3NlcnQuc2FtZURlZXBNZW1iZXJzID0gZnVuY3Rpb24oc2V0MSwgc2V0MiwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oc2V0MSwgbXNnLCBhc3NlcnQuc2FtZURlZXBNZW1iZXJzLCB0cnVlKS50by5oYXZlLnNhbWUuZGVlcC5tZW1iZXJzKHNldDIpO1xufTtcbmFzc2VydC5ub3RTYW1lRGVlcE1lbWJlcnMgPSBmdW5jdGlvbihzZXQxLCBzZXQyLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihzZXQxLCBtc2csIGFzc2VydC5ub3RTYW1lRGVlcE1lbWJlcnMsIHRydWUpLnRvLm5vdC5oYXZlLnNhbWUuZGVlcC5tZW1iZXJzKHNldDIpO1xufTtcbmFzc2VydC5zYW1lT3JkZXJlZE1lbWJlcnMgPSBmdW5jdGlvbihzZXQxLCBzZXQyLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihzZXQxLCBtc2csIGFzc2VydC5zYW1lT3JkZXJlZE1lbWJlcnMsIHRydWUpLnRvLmhhdmUuc2FtZS5vcmRlcmVkLm1lbWJlcnMoc2V0Mik7XG59O1xuYXNzZXJ0Lm5vdFNhbWVPcmRlcmVkTWVtYmVycyA9IGZ1bmN0aW9uKHNldDEsIHNldDIsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHNldDEsIG1zZywgYXNzZXJ0Lm5vdFNhbWVPcmRlcmVkTWVtYmVycywgdHJ1ZSkudG8ubm90LmhhdmUuc2FtZS5vcmRlcmVkLm1lbWJlcnMoc2V0Mik7XG59O1xuYXNzZXJ0LnNhbWVEZWVwT3JkZXJlZE1lbWJlcnMgPSBmdW5jdGlvbihzZXQxLCBzZXQyLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihzZXQxLCBtc2csIGFzc2VydC5zYW1lRGVlcE9yZGVyZWRNZW1iZXJzLCB0cnVlKS50by5oYXZlLnNhbWUuZGVlcC5vcmRlcmVkLm1lbWJlcnMoc2V0Mik7XG59O1xuYXNzZXJ0Lm5vdFNhbWVEZWVwT3JkZXJlZE1lbWJlcnMgPSBmdW5jdGlvbihzZXQxLCBzZXQyLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihzZXQxLCBtc2csIGFzc2VydC5ub3RTYW1lRGVlcE9yZGVyZWRNZW1iZXJzLCB0cnVlKS50by5ub3QuaGF2ZS5zYW1lLmRlZXAub3JkZXJlZC5tZW1iZXJzKHNldDIpO1xufTtcbmFzc2VydC5pbmNsdWRlTWVtYmVycyA9IGZ1bmN0aW9uKHN1cGVyc2V0LCBzdWJzZXQsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHN1cGVyc2V0LCBtc2csIGFzc2VydC5pbmNsdWRlTWVtYmVycywgdHJ1ZSkudG8uaW5jbHVkZS5tZW1iZXJzKHN1YnNldCk7XG59O1xuYXNzZXJ0Lm5vdEluY2x1ZGVNZW1iZXJzID0gZnVuY3Rpb24oc3VwZXJzZXQsIHN1YnNldCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oc3VwZXJzZXQsIG1zZywgYXNzZXJ0Lm5vdEluY2x1ZGVNZW1iZXJzLCB0cnVlKS50by5ub3QuaW5jbHVkZS5tZW1iZXJzKHN1YnNldCk7XG59O1xuYXNzZXJ0LmluY2x1ZGVEZWVwTWVtYmVycyA9IGZ1bmN0aW9uKHN1cGVyc2V0LCBzdWJzZXQsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHN1cGVyc2V0LCBtc2csIGFzc2VydC5pbmNsdWRlRGVlcE1lbWJlcnMsIHRydWUpLnRvLmluY2x1ZGUuZGVlcC5tZW1iZXJzKHN1YnNldCk7XG59O1xuYXNzZXJ0Lm5vdEluY2x1ZGVEZWVwTWVtYmVycyA9IGZ1bmN0aW9uKHN1cGVyc2V0LCBzdWJzZXQsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHN1cGVyc2V0LCBtc2csIGFzc2VydC5ub3RJbmNsdWRlRGVlcE1lbWJlcnMsIHRydWUpLnRvLm5vdC5pbmNsdWRlLmRlZXAubWVtYmVycyhzdWJzZXQpO1xufTtcbmFzc2VydC5pbmNsdWRlT3JkZXJlZE1lbWJlcnMgPSBmdW5jdGlvbihzdXBlcnNldCwgc3Vic2V0LCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihzdXBlcnNldCwgbXNnLCBhc3NlcnQuaW5jbHVkZU9yZGVyZWRNZW1iZXJzLCB0cnVlKS50by5pbmNsdWRlLm9yZGVyZWQubWVtYmVycyhzdWJzZXQpO1xufTtcbmFzc2VydC5ub3RJbmNsdWRlT3JkZXJlZE1lbWJlcnMgPSBmdW5jdGlvbihzdXBlcnNldCwgc3Vic2V0LCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihzdXBlcnNldCwgbXNnLCBhc3NlcnQubm90SW5jbHVkZU9yZGVyZWRNZW1iZXJzLCB0cnVlKS50by5ub3QuaW5jbHVkZS5vcmRlcmVkLm1lbWJlcnMoc3Vic2V0KTtcbn07XG5hc3NlcnQuaW5jbHVkZURlZXBPcmRlcmVkTWVtYmVycyA9IGZ1bmN0aW9uKHN1cGVyc2V0LCBzdWJzZXQsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHN1cGVyc2V0LCBtc2csIGFzc2VydC5pbmNsdWRlRGVlcE9yZGVyZWRNZW1iZXJzLCB0cnVlKS50by5pbmNsdWRlLmRlZXAub3JkZXJlZC5tZW1iZXJzKHN1YnNldCk7XG59O1xuYXNzZXJ0Lm5vdEluY2x1ZGVEZWVwT3JkZXJlZE1lbWJlcnMgPSBmdW5jdGlvbihzdXBlcnNldCwgc3Vic2V0LCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihzdXBlcnNldCwgbXNnLCBhc3NlcnQubm90SW5jbHVkZURlZXBPcmRlcmVkTWVtYmVycywgdHJ1ZSkudG8ubm90LmluY2x1ZGUuZGVlcC5vcmRlcmVkLm1lbWJlcnMoc3Vic2V0KTtcbn07XG5hc3NlcnQub25lT2YgPSBmdW5jdGlvbihpbkxpc3QsIGxpc3QsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGluTGlzdCwgbXNnLCBhc3NlcnQub25lT2YsIHRydWUpLnRvLmJlLm9uZU9mKGxpc3QpO1xufTtcbmFzc2VydC5pc0l0ZXJhYmxlID0gZnVuY3Rpb24ob2JqLCBtc2cpIHtcbiAgaWYgKG9iaiA9PSB2b2lkIDAgfHwgIW9ialtTeW1ib2wuaXRlcmF0b3JdKSB7XG4gICAgbXNnID0gbXNnID8gYCR7bXNnfSBleHBlY3RlZCAke2luc3BlY3QyKG9iail9IHRvIGJlIGFuIGl0ZXJhYmxlYCA6IGBleHBlY3RlZCAke2luc3BlY3QyKG9iail9IHRvIGJlIGFuIGl0ZXJhYmxlYDtcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICBtc2csXG4gICAgICB2b2lkIDAsXG4gICAgICBhc3NlcnQuaXNJdGVyYWJsZVxuICAgICk7XG4gIH1cbn07XG5hc3NlcnQuY2hhbmdlcyA9IGZ1bmN0aW9uKGZuLCBvYmosIHByb3AsIG1zZykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMyAmJiB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBtc2cgPSBwcm9wO1xuICAgIHByb3AgPSBudWxsO1xuICB9XG4gIG5ldyBBc3NlcnRpb24oZm4sIG1zZywgYXNzZXJ0LmNoYW5nZXMsIHRydWUpLnRvLmNoYW5nZShvYmosIHByb3ApO1xufTtcbmFzc2VydC5jaGFuZ2VzQnkgPSBmdW5jdGlvbihmbiwgb2JqLCBwcm9wLCBkZWx0YSwgbXNnKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSA0ICYmIHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHZhciB0bXBNc2cgPSBkZWx0YTtcbiAgICBkZWx0YSA9IHByb3A7XG4gICAgbXNnID0gdG1wTXNnO1xuICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICBkZWx0YSA9IHByb3A7XG4gICAgcHJvcCA9IG51bGw7XG4gIH1cbiAgbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQuY2hhbmdlc0J5LCB0cnVlKS50by5jaGFuZ2Uob2JqLCBwcm9wKS5ieShkZWx0YSk7XG59O1xuYXNzZXJ0LmRvZXNOb3RDaGFuZ2UgPSBmdW5jdGlvbihmbiwgb2JqLCBwcm9wLCBtc2cpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgbXNnID0gcHJvcDtcbiAgICBwcm9wID0gbnVsbDtcbiAgfVxuICByZXR1cm4gbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQuZG9lc05vdENoYW5nZSwgdHJ1ZSkudG8ubm90LmNoYW5nZShvYmosIHByb3ApO1xufTtcbmFzc2VydC5jaGFuZ2VzQnV0Tm90QnkgPSBmdW5jdGlvbihmbiwgb2JqLCBwcm9wLCBkZWx0YSwgbXNnKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSA0ICYmIHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHZhciB0bXBNc2cgPSBkZWx0YTtcbiAgICBkZWx0YSA9IHByb3A7XG4gICAgbXNnID0gdG1wTXNnO1xuICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICBkZWx0YSA9IHByb3A7XG4gICAgcHJvcCA9IG51bGw7XG4gIH1cbiAgbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQuY2hhbmdlc0J1dE5vdEJ5LCB0cnVlKS50by5jaGFuZ2Uob2JqLCBwcm9wKS5idXQubm90LmJ5KGRlbHRhKTtcbn07XG5hc3NlcnQuaW5jcmVhc2VzID0gZnVuY3Rpb24oZm4sIG9iaiwgcHJvcCwgbXNnKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzICYmIHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIikge1xuICAgIG1zZyA9IHByb3A7XG4gICAgcHJvcCA9IG51bGw7XG4gIH1cbiAgcmV0dXJuIG5ldyBBc3NlcnRpb24oZm4sIG1zZywgYXNzZXJ0LmluY3JlYXNlcywgdHJ1ZSkudG8uaW5jcmVhc2Uob2JqLCBwcm9wKTtcbn07XG5hc3NlcnQuaW5jcmVhc2VzQnkgPSBmdW5jdGlvbihmbiwgb2JqLCBwcm9wLCBkZWx0YSwgbXNnKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSA0ICYmIHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHZhciB0bXBNc2cgPSBkZWx0YTtcbiAgICBkZWx0YSA9IHByb3A7XG4gICAgbXNnID0gdG1wTXNnO1xuICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICBkZWx0YSA9IHByb3A7XG4gICAgcHJvcCA9IG51bGw7XG4gIH1cbiAgbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQuaW5jcmVhc2VzQnksIHRydWUpLnRvLmluY3JlYXNlKG9iaiwgcHJvcCkuYnkoZGVsdGEpO1xufTtcbmFzc2VydC5kb2VzTm90SW5jcmVhc2UgPSBmdW5jdGlvbihmbiwgb2JqLCBwcm9wLCBtc2cpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgbXNnID0gcHJvcDtcbiAgICBwcm9wID0gbnVsbDtcbiAgfVxuICByZXR1cm4gbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQuZG9lc05vdEluY3JlYXNlLCB0cnVlKS50by5ub3QuaW5jcmVhc2Uob2JqLCBwcm9wKTtcbn07XG5hc3NlcnQuaW5jcmVhc2VzQnV0Tm90QnkgPSBmdW5jdGlvbihmbiwgb2JqLCBwcm9wLCBkZWx0YSwgbXNnKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSA0ICYmIHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHZhciB0bXBNc2cgPSBkZWx0YTtcbiAgICBkZWx0YSA9IHByb3A7XG4gICAgbXNnID0gdG1wTXNnO1xuICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICBkZWx0YSA9IHByb3A7XG4gICAgcHJvcCA9IG51bGw7XG4gIH1cbiAgbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQuaW5jcmVhc2VzQnV0Tm90QnksIHRydWUpLnRvLmluY3JlYXNlKG9iaiwgcHJvcCkuYnV0Lm5vdC5ieShkZWx0YSk7XG59O1xuYXNzZXJ0LmRlY3JlYXNlcyA9IGZ1bmN0aW9uKGZuLCBvYmosIHByb3AsIG1zZykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMyAmJiB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBtc2cgPSBwcm9wO1xuICAgIHByb3AgPSBudWxsO1xuICB9XG4gIHJldHVybiBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5kZWNyZWFzZXMsIHRydWUpLnRvLmRlY3JlYXNlKG9iaiwgcHJvcCk7XG59O1xuYXNzZXJ0LmRlY3JlYXNlc0J5ID0gZnVuY3Rpb24oZm4sIG9iaiwgcHJvcCwgZGVsdGEsIG1zZykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNCAmJiB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB2YXIgdG1wTXNnID0gZGVsdGE7XG4gICAgZGVsdGEgPSBwcm9wO1xuICAgIG1zZyA9IHRtcE1zZztcbiAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgZGVsdGEgPSBwcm9wO1xuICAgIHByb3AgPSBudWxsO1xuICB9XG4gIG5ldyBBc3NlcnRpb24oZm4sIG1zZywgYXNzZXJ0LmRlY3JlYXNlc0J5LCB0cnVlKS50by5kZWNyZWFzZShvYmosIHByb3ApLmJ5KGRlbHRhKTtcbn07XG5hc3NlcnQuZG9lc05vdERlY3JlYXNlID0gZnVuY3Rpb24oZm4sIG9iaiwgcHJvcCwgbXNnKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzICYmIHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIikge1xuICAgIG1zZyA9IHByb3A7XG4gICAgcHJvcCA9IG51bGw7XG4gIH1cbiAgcmV0dXJuIG5ldyBBc3NlcnRpb24oZm4sIG1zZywgYXNzZXJ0LmRvZXNOb3REZWNyZWFzZSwgdHJ1ZSkudG8ubm90LmRlY3JlYXNlKG9iaiwgcHJvcCk7XG59O1xuYXNzZXJ0LmRvZXNOb3REZWNyZWFzZUJ5ID0gZnVuY3Rpb24oZm4sIG9iaiwgcHJvcCwgZGVsdGEsIG1zZykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNCAmJiB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB2YXIgdG1wTXNnID0gZGVsdGE7XG4gICAgZGVsdGEgPSBwcm9wO1xuICAgIG1zZyA9IHRtcE1zZztcbiAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgZGVsdGEgPSBwcm9wO1xuICAgIHByb3AgPSBudWxsO1xuICB9XG4gIHJldHVybiBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5kb2VzTm90RGVjcmVhc2VCeSwgdHJ1ZSkudG8ubm90LmRlY3JlYXNlKG9iaiwgcHJvcCkuYnkoZGVsdGEpO1xufTtcbmFzc2VydC5kZWNyZWFzZXNCdXROb3RCeSA9IGZ1bmN0aW9uKGZuLCBvYmosIHByb3AsIGRlbHRhLCBtc2cpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDQgJiYgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdmFyIHRtcE1zZyA9IGRlbHRhO1xuICAgIGRlbHRhID0gcHJvcDtcbiAgICBtc2cgPSB0bXBNc2c7XG4gIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMykge1xuICAgIGRlbHRhID0gcHJvcDtcbiAgICBwcm9wID0gbnVsbDtcbiAgfVxuICBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5kZWNyZWFzZXNCdXROb3RCeSwgdHJ1ZSkudG8uZGVjcmVhc2Uob2JqLCBwcm9wKS5idXQubm90LmJ5KGRlbHRhKTtcbn07XG5hc3NlcnQuaWZFcnJvciA9IGZ1bmN0aW9uKHZhbCkge1xuICBpZiAodmFsKSB7XG4gICAgdGhyb3cgdmFsO1xuICB9XG59O1xuYXNzZXJ0LmlzRXh0ZW5zaWJsZSA9IGZ1bmN0aW9uKG9iaiwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5pc0V4dGVuc2libGUsIHRydWUpLnRvLmJlLmV4dGVuc2libGU7XG59O1xuYXNzZXJ0LmlzTm90RXh0ZW5zaWJsZSA9IGZ1bmN0aW9uKG9iaiwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5pc05vdEV4dGVuc2libGUsIHRydWUpLnRvLm5vdC5iZS5leHRlbnNpYmxlO1xufTtcbmFzc2VydC5pc1NlYWxlZCA9IGZ1bmN0aW9uKG9iaiwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5pc1NlYWxlZCwgdHJ1ZSkudG8uYmUuc2VhbGVkO1xufTtcbmFzc2VydC5pc05vdFNlYWxlZCA9IGZ1bmN0aW9uKG9iaiwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5pc05vdFNlYWxlZCwgdHJ1ZSkudG8ubm90LmJlLnNlYWxlZDtcbn07XG5hc3NlcnQuaXNGcm96ZW4gPSBmdW5jdGlvbihvYmosIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuaXNGcm96ZW4sIHRydWUpLnRvLmJlLmZyb3plbjtcbn07XG5hc3NlcnQuaXNOb3RGcm96ZW4gPSBmdW5jdGlvbihvYmosIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuaXNOb3RGcm96ZW4sIHRydWUpLnRvLm5vdC5iZS5mcm96ZW47XG59O1xuYXNzZXJ0LmlzRW1wdHkgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNFbXB0eSwgdHJ1ZSkudG8uYmUuZW1wdHk7XG59O1xuYXNzZXJ0LmlzTm90RW1wdHkgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOb3RFbXB0eSwgdHJ1ZSkudG8ubm90LmJlLmVtcHR5O1xufTtcbigvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIGFsaWFzKG5hbWUsIGFzKSB7XG4gIGFzc2VydFthc10gPSBhc3NlcnRbbmFtZV07XG4gIHJldHVybiBhbGlhcztcbn0sIFwiYWxpYXNcIikpKFwiaXNPa1wiLCBcIm9rXCIpKFwiaXNOb3RPa1wiLCBcIm5vdE9rXCIpKFwidGhyb3dzXCIsIFwidGhyb3dcIikoXCJ0aHJvd3NcIiwgXCJUaHJvd1wiKShcImlzRXh0ZW5zaWJsZVwiLCBcImV4dGVuc2libGVcIikoXCJpc05vdEV4dGVuc2libGVcIiwgXCJub3RFeHRlbnNpYmxlXCIpKFwiaXNTZWFsZWRcIiwgXCJzZWFsZWRcIikoXCJpc05vdFNlYWxlZFwiLCBcIm5vdFNlYWxlZFwiKShcImlzRnJvemVuXCIsIFwiZnJvemVuXCIpKFwiaXNOb3RGcm96ZW5cIiwgXCJub3RGcm96ZW5cIikoXCJpc0VtcHR5XCIsIFwiZW1wdHlcIikoXCJpc05vdEVtcHR5XCIsIFwibm90RW1wdHlcIikoXCJpc0NhbGxhYmxlXCIsIFwiaXNGdW5jdGlvblwiKShcImlzTm90Q2FsbGFibGVcIiwgXCJpc05vdEZ1bmN0aW9uXCIpO1xuXG4vLyBsaWIvY2hhaS5qc1xudmFyIHVzZWQgPSBbXTtcbmZ1bmN0aW9uIHVzZShmbikge1xuICBjb25zdCBleHBvcnRzID0ge1xuICAgIEFzc2VydGlvbkVycm9yLFxuICAgIHV0aWw6IHV0aWxzX2V4cG9ydHMsXG4gICAgY29uZmlnLFxuICAgIGV4cGVjdCxcbiAgICBhc3NlcnQsXG4gICAgQXNzZXJ0aW9uLFxuICAgIC4uLnNob3VsZF9leHBvcnRzXG4gIH07XG4gIGlmICghfnVzZWQuaW5kZXhPZihmbikpIHtcbiAgICBmbihleHBvcnRzLCB1dGlsc19leHBvcnRzKTtcbiAgICB1c2VkLnB1c2goZm4pO1xuICB9XG4gIHJldHVybiBleHBvcnRzO1xufVxuX19uYW1lKHVzZSwgXCJ1c2VcIik7XG5leHBvcnQge1xuICBBc3NlcnRpb24sXG4gIEFzc2VydGlvbkVycm9yLFxuICBTaG91bGQsXG4gIGFzc2VydCxcbiAgY29uZmlnLFxuICBleHBlY3QsXG4gIHNob3VsZCxcbiAgdXNlLFxuICB1dGlsc19leHBvcnRzIGFzIHV0aWxcbn07XG4vKiFcbiAqIENoYWkgLSBmbGFnIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuLyohXG4gKiBDaGFpIC0gdGVzdCB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cbi8qIVxuICogQ2hhaSAtIGV4cGVjdFR5cGVzIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuLyohXG4gKiBDaGFpIC0gZ2V0QWN0dWFsIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuLyohXG4gKiBDaGFpIC0gbWVzc2FnZSBjb21wb3NpdGlvbiB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cbi8qIVxuICogQ2hhaSAtIHRyYW5zZmVyRmxhZ3MgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG4vKiFcbiAqIGNoYWlcbiAqIGh0dHA6Ly9jaGFpanMuY29tXG4gKiBDb3B5cmlnaHQoYykgMjAxMS0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cbi8qIVxuICogQ2hhaSAtIGlzUHJveHlFbmFibGVkIGhlbHBlclxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG4vKiFcbiAqIENoYWkgLSBhZGRQcm9wZXJ0eSB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cbi8qIVxuICogQ2hhaSAtIGFkZExlbmd0aEd1YXJkIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuLyohXG4gKiBDaGFpIC0gZ2V0UHJvcGVydGllcyB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cbi8qIVxuICogQ2hhaSAtIHByb3hpZnkgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG4vKiFcbiAqIENoYWkgLSBhZGRNZXRob2QgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG4vKiFcbiAqIENoYWkgLSBvdmVyd3JpdGVQcm9wZXJ0eSB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cbi8qIVxuICogQ2hhaSAtIG92ZXJ3cml0ZU1ldGhvZCB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cbi8qIVxuICogQ2hhaSAtIGFkZENoYWluaW5nTWV0aG9kIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuLyohXG4gKiBDaGFpIC0gb3ZlcndyaXRlQ2hhaW5hYmxlTWV0aG9kIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuLyohXG4gKiBDaGFpIC0gY29tcGFyZUJ5SW5zcGVjdCB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMS0yMDE2IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cbi8qIVxuICogQ2hhaSAtIGdldE93bkVudW1lcmFibGVQcm9wZXJ0eVN5bWJvbHMgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTEtMjAxNiBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG4vKiFcbiAqIENoYWkgLSBnZXRPd25FbnVtZXJhYmxlUHJvcGVydGllcyB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMS0yMDE2IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cbi8qIVxuICogQ2hhaSAtIGlzTmFOIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTUgU2FrdGhpcHJpeWFuIFZhaXJhbWFuaSA8dGhlY2hhcmdpbmd2b2xjYW5vQGdtYWlsLmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG4vKiFcbiAqIGNoYWlcbiAqIENvcHlyaWdodChjKSAyMDExIEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cbi8qIVxuICogY2hhaVxuICogQ29weXJpZ2h0KGMpIDIwMTEtMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG4vKiEgQnVuZGxlZCBsaWNlbnNlIGluZm9ybWF0aW9uOlxuXG5kZWVwLWVxbC9pbmRleC5qczpcbiAgKCohXG4gICAqIGRlZXAtZXFsXG4gICAqIENvcHlyaWdodChjKSAyMDEzIEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICAgKiBNSVQgTGljZW5zZWRcbiAgICopXG4gICgqIVxuICAgKiBDaGVjayB0byBzZWUgaWYgdGhlIE1lbW9pemVNYXAgaGFzIHJlY29yZGVkIGEgcmVzdWx0IG9mIHRoZSB0d28gb3BlcmFuZHNcbiAgICpcbiAgICogQHBhcmFtIHtNaXhlZH0gbGVmdEhhbmRPcGVyYW5kXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHJpZ2h0SGFuZE9wZXJhbmRcbiAgICogQHBhcmFtIHtNZW1vaXplTWFwfSBtZW1vaXplTWFwXG4gICAqIEByZXR1cm5zIHtCb29sZWFufG51bGx9IHJlc3VsdFxuICAqKVxuICAoKiFcbiAgICogU2V0IHRoZSByZXN1bHQgb2YgdGhlIGVxdWFsaXR5IGludG8gdGhlIE1lbW9pemVNYXBcbiAgICpcbiAgICogQHBhcmFtIHtNaXhlZH0gbGVmdEhhbmRPcGVyYW5kXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHJpZ2h0SGFuZE9wZXJhbmRcbiAgICogQHBhcmFtIHtNZW1vaXplTWFwfSBtZW1vaXplTWFwXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gcmVzdWx0XG4gICopXG4gICgqIVxuICAgKiBQcmltYXJ5IEV4cG9ydFxuICAgKilcbiAgKCohXG4gICAqIFRoZSBtYWluIGxvZ2ljIG9mIHRoZSBgZGVlcEVxdWFsYCBmdW5jdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtNaXhlZH0gbGVmdEhhbmRPcGVyYW5kXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHJpZ2h0SGFuZE9wZXJhbmRcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAob3B0aW9uYWwpIEFkZGl0aW9uYWwgb3B0aW9uc1xuICAgKiBAcGFyYW0ge0FycmF5fSBbb3B0aW9ucy5jb21wYXJhdG9yXSAob3B0aW9uYWwpIE92ZXJyaWRlIGRlZmF1bHQgYWxnb3JpdGhtLCBkZXRlcm1pbmluZyBjdXN0b20gZXF1YWxpdHkuXG4gICAqIEBwYXJhbSB7QXJyYXl9IFtvcHRpb25zLm1lbW9pemVdIChvcHRpb25hbCkgUHJvdmlkZSBhIGN1c3RvbSBtZW1vaXphdGlvbiBvYmplY3Qgd2hpY2ggd2lsbCBjYWNoZSB0aGUgcmVzdWx0cyBvZlxuICAgICAgY29tcGxleCBvYmplY3RzIGZvciBhIHNwZWVkIGJvb3N0LiBCeSBwYXNzaW5nIGBmYWxzZWAgeW91IGNhbiBkaXNhYmxlIG1lbW9pemF0aW9uLCBidXQgdGhpcyB3aWxsIGNhdXNlIGNpcmN1bGFyXG4gICAgICByZWZlcmVuY2VzIHRvIGJsb3cgdGhlIHN0YWNrLlxuICAgKiBAcmV0dXJuIHtCb29sZWFufSBlcXVhbCBtYXRjaFxuICAqKVxuICAoKiFcbiAgICogQ29tcGFyZSB0d28gUmVndWxhciBFeHByZXNzaW9ucyBmb3IgZXF1YWxpdHkuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVnRXhwfSBsZWZ0SGFuZE9wZXJhbmRcbiAgICogQHBhcmFtIHtSZWdFeHB9IHJpZ2h0SGFuZE9wZXJhbmRcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gcmVzdWx0XG4gICAqKVxuICAoKiFcbiAgICogQ29tcGFyZSB0d28gU2V0cy9NYXBzIGZvciBlcXVhbGl0eS4gRmFzdGVyIHRoYW4gb3RoZXIgZXF1YWxpdHkgZnVuY3Rpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge1NldH0gbGVmdEhhbmRPcGVyYW5kXG4gICAqIEBwYXJhbSB7U2V0fSByaWdodEhhbmRPcGVyYW5kXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gKE9wdGlvbmFsKVxuICAgKiBAcmV0dXJuIHtCb29sZWFufSByZXN1bHRcbiAgICopXG4gICgqIVxuICAgKiBTaW1wbGUgZXF1YWxpdHkgZm9yIGZsYXQgaXRlcmFibGUgb2JqZWN0cyBzdWNoIGFzIEFycmF5cywgVHlwZWRBcnJheXMgb3IgTm9kZS5qcyBidWZmZXJzLlxuICAgKlxuICAgKiBAcGFyYW0ge0l0ZXJhYmxlfSBsZWZ0SGFuZE9wZXJhbmRcbiAgICogQHBhcmFtIHtJdGVyYWJsZX0gcmlnaHRIYW5kT3BlcmFuZFxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIChPcHRpb25hbClcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gcmVzdWx0XG4gICAqKVxuICAoKiFcbiAgICogU2ltcGxlIGVxdWFsaXR5IGZvciBnZW5lcmF0b3Igb2JqZWN0cyBzdWNoIGFzIHRob3NlIHJldHVybmVkIGJ5IGdlbmVyYXRvciBmdW5jdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7SXRlcmFibGV9IGxlZnRIYW5kT3BlcmFuZFxuICAgKiBAcGFyYW0ge0l0ZXJhYmxlfSByaWdodEhhbmRPcGVyYW5kXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gKE9wdGlvbmFsKVxuICAgKiBAcmV0dXJuIHtCb29sZWFufSByZXN1bHRcbiAgICopXG4gICgqIVxuICAgKiBEZXRlcm1pbmUgaWYgdGhlIGdpdmVuIG9iamVjdCBoYXMgYW4gQEBpdGVyYXRvciBmdW5jdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHRhcmdldFxuICAgKiBAcmV0dXJuIHtCb29sZWFufSBgdHJ1ZWAgaWYgdGhlIG9iamVjdCBoYXMgYW4gQEBpdGVyYXRvciBmdW5jdGlvbi5cbiAgICopXG4gICgqIVxuICAgKiBHZXRzIGFsbCBpdGVyYXRvciBlbnRyaWVzIGZyb20gdGhlIGdpdmVuIE9iamVjdC4gSWYgdGhlIE9iamVjdCBoYXMgbm8gQEBpdGVyYXRvciBmdW5jdGlvbiwgcmV0dXJucyBhbiBlbXB0eSBhcnJheS5cbiAgICogVGhpcyB3aWxsIGNvbnN1bWUgdGhlIGl0ZXJhdG9yIC0gd2hpY2ggY291bGQgaGF2ZSBzaWRlIGVmZmVjdHMgZGVwZW5kaW5nIG9uIHRoZSBAQGl0ZXJhdG9yIGltcGxlbWVudGF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gdGFyZ2V0XG4gICAqIEByZXR1cm5zIHtBcnJheX0gYW4gYXJyYXkgb2YgZW50cmllcyBmcm9tIHRoZSBAQGl0ZXJhdG9yIGZ1bmN0aW9uXG4gICAqKVxuICAoKiFcbiAgICogR2V0cyBhbGwgZW50cmllcyBmcm9tIGEgR2VuZXJhdG9yLiBUaGlzIHdpbGwgY29uc3VtZSB0aGUgZ2VuZXJhdG9yIC0gd2hpY2ggY291bGQgaGF2ZSBzaWRlIGVmZmVjdHMuXG4gICAqXG4gICAqIEBwYXJhbSB7R2VuZXJhdG9yfSB0YXJnZXRcbiAgICogQHJldHVybnMge0FycmF5fSBhbiBhcnJheSBvZiBlbnRyaWVzIGZyb20gdGhlIEdlbmVyYXRvci5cbiAgICopXG4gICgqIVxuICAgKiBHZXRzIGFsbCBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIGtleXMgZnJvbSBhIHRhcmdldC5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHRhcmdldFxuICAgKiBAcmV0dXJucyB7QXJyYXl9IGFuIGFycmF5IG9mIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUga2V5cyBmcm9tIHRoZSB0YXJnZXQuXG4gICAqKVxuICAoKiFcbiAgICogRGV0ZXJtaW5lcyBpZiB0d28gb2JqZWN0cyBoYXZlIG1hdGNoaW5nIHZhbHVlcywgZ2l2ZW4gYSBzZXQgb2Yga2V5cy4gRGVmZXJzIHRvIGRlZXBFcXVhbCBmb3IgdGhlIGVxdWFsaXR5IGNoZWNrIG9mXG4gICAqIGVhY2gga2V5LiBJZiBhbnkgdmFsdWUgb2YgdGhlIGdpdmVuIGtleSBpcyBub3QgZXF1YWwsIHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiBmYWxzZSAoZWFybHkpLlxuICAgKlxuICAgKiBAcGFyYW0ge01peGVkfSBsZWZ0SGFuZE9wZXJhbmRcbiAgICogQHBhcmFtIHtNaXhlZH0gcmlnaHRIYW5kT3BlcmFuZFxuICAgKiBAcGFyYW0ge0FycmF5fSBrZXlzIEFuIGFycmF5IG9mIGtleXMgdG8gY29tcGFyZSB0aGUgdmFsdWVzIG9mIGxlZnRIYW5kT3BlcmFuZCBhbmQgcmlnaHRIYW5kT3BlcmFuZCBhZ2FpbnN0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gKE9wdGlvbmFsKVxuICAgKiBAcmV0dXJuIHtCb29sZWFufSByZXN1bHRcbiAgICopXG4gICgqIVxuICAgKiBSZWN1cnNpdmVseSBjaGVjayB0aGUgZXF1YWxpdHkgb2YgdHdvIE9iamVjdHMuIE9uY2UgYmFzaWMgc2FtZW5lc3MgaGFzIGJlZW4gZXN0YWJsaXNoZWQgaXQgd2lsbCBkZWZlciB0byBgZGVlcEVxdWFsYFxuICAgKiBmb3IgZWFjaCBlbnVtZXJhYmxlIGtleSBpbiB0aGUgb2JqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0ge01peGVkfSBsZWZ0SGFuZE9wZXJhbmRcbiAgICogQHBhcmFtIHtNaXhlZH0gcmlnaHRIYW5kT3BlcmFuZFxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIChPcHRpb25hbClcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gcmVzdWx0XG4gICAqKVxuICAoKiFcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBhcmd1bWVudCBpcyBhIHByaW1pdGl2ZS5cbiAgICpcbiAgICogVGhpcyBpbnRlbnRpb25hbGx5IHJldHVybnMgdHJ1ZSBmb3IgYWxsIG9iamVjdHMgdGhhdCBjYW4gYmUgY29tcGFyZWQgYnkgcmVmZXJlbmNlLFxuICAgKiBpbmNsdWRpbmcgZnVuY3Rpb25zIGFuZCBzeW1ib2xzLlxuICAgKlxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZVxuICAgKiBAcmV0dXJuIHtCb29sZWFufSByZXN1bHRcbiAgICopXG4qL1xuIiwgIi8qKioqKioqKlxuXG4gQ29udmVydCBjaGFpLWRvbSAxLjguMSB0byBlcyBtb2R1bGUsIHdpdGhvdXQgYW55IG90aGVyIG1vZGlmaWNhdGlvbi5cbiBGcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9uYXRoYW5ib2t0YWUvY2hhaS1kb20vYmxvYi84NmMzNDIzL2NoYWktZG9tLmpzXG4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9uYXRoYW5ib2t0YWUvY2hhaS1kb20vaXNzdWVzLzM4XG5cbiBVc2FnZTpcbiBpbXBvcnQgeyBjaGFpRG9tIH0gZnJvbSAnPHBhdGgtdG8+L2NoYWktZG9tJztcbiBjaGFpLnVzZShjaGFpRG9tKTtcblxuIENvcHlyaWdodCAoYykgMjAxNSBOYXRoYW4gQmxhY2sgYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuXG4gVGhpcyB3b3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTUlUIGxpY2Vuc2UuIEZvciBhIGNvcHksIHNlZSA8aHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQ+LlxuXG4gKioqKioqKioqKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNoYWlEb20oY2hhaSwgdXRpbHMpIHtcbiAgICB2YXIgZmxhZyA9IHV0aWxzLmZsYWcsXG5cbiAgICAgICAgZWxUb1N0cmluZyA9IGZ1bmN0aW9uKGVsKSB7XG4gICAgICAgICAgICBsZXQgZGVzY1xuICAgICAgICAgICAgaWYgKGlzTm9kZUxpc3QoZWwpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVsLmxlbmd0aCA9PT0gMCkgcmV0dXJuICdlbXB0eSBOb2RlTGlzdCdcbiAgICAgICAgICAgICAgICBkZXNjID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZWwsIDAsIDUpLm1hcChlbFRvU3RyaW5nKS5qb2luKCcsICcpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsLmxlbmd0aCA+IDUgPyBkZXNjICsgJy4uLiAoKycgKyAoZWwubGVuZ3RoIC0gNSkgKyAnIG1vcmUpJyA6IGRlc2NcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaXNIVE1MRWxlbWVudChlbCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGVsKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkZXNjID0gZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICBpZiAoZWwuaWQpIHtcbiAgICAgICAgICAgICAgICBkZXNjICs9ICcjJyArIGVsLmlkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZWwuY2xhc3NOYW1lKSB7XG4gICAgICAgICAgICAgICAgZGVzYyArPSAnLicgKyBTdHJpbmcoZWwuY2xhc3NOYW1lKS5yZXBsYWNlKC9cXHMrL2csICcuJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoZWwuYXR0cmlidXRlcywgZnVuY3Rpb24oYXR0cikge1xuICAgICAgICAgICAgICAgIGlmIChhdHRyLm5hbWUgIT09ICdjbGFzcycgJiYgYXR0ci5uYW1lICE9PSAnaWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2MgKz0gJ1snICsgYXR0ci5uYW1lICsgKGF0dHIudmFsdWUgPyAnPVwiJyArIGF0dHIudmFsdWUgKyAnXCJdJyA6ICddJylcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgcmV0dXJuIGRlc2NcbiAgICAgICAgfSxcblxuICAgICAgICBhdHRyQXNzZXJ0ID0gZnVuY3Rpb24obmFtZSwgdmFsKSB7XG4gICAgICAgICAgICBsZXQgZWwgPSBmbGFnKHRoaXMsICdvYmplY3QnKSwgYWN0dWFsID0gZWwuZ2V0QXR0cmlidXRlKG5hbWUpXG5cbiAgICAgICAgICAgIGlmICghZmxhZyh0aGlzLCAnbmVnYXRlJykgfHwgdW5kZWZpbmVkID09PSB2YWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgICAgICAgICAgISFlbC5hdHRyaWJ1dGVzW25hbWVdXG4gICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKGVsKSArICcgdG8gaGF2ZSBhbiBhdHRyaWJ1dGUgI3tleHB9J1xuICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhlbCkgKyAnIG5vdCB0byBoYXZlIGFuIGF0dHJpYnV0ZSAje2V4cH0nXG4gICAgICAgICAgICAgICAgICAgICwgbmFtZVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHVuZGVmaW5lZCAhPT0gdmFsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAgICAgICAgIHZhbCA9PT0gYWN0dWFsXG4gICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKGVsKSArICcgdG8gaGF2ZSBhbiBhdHRyaWJ1dGUgJyArIHV0aWxzLmluc3BlY3QobmFtZSkgKyAnIHdpdGggdGhlIHZhbHVlICN7ZXhwfSwgYnV0IHRoZSB2YWx1ZSB3YXMgI3thY3R9J1xuICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhlbCkgKyAnIG5vdCB0byBoYXZlIGFuIGF0dHJpYnV0ZSAnICsgdXRpbHMuaW5zcGVjdChuYW1lKSArICcgd2l0aCB0aGUgdmFsdWUgI3thY3R9J1xuICAgICAgICAgICAgICAgICAgICAsIHZhbFxuICAgICAgICAgICAgICAgICAgICAsIGFjdHVhbFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZmxhZyh0aGlzLCAnb2JqZWN0JywgYWN0dWFsKVxuICAgICAgICB9LFxuXG4gICAgICAgIGlzSFRNTEVsZW1lbnQgPSBmdW5jdGlvbihlbCkge1xuICAgICAgICAgICAgcmV0dXJuIGVsLm5vZGVUeXBlID09PSAxIC8vIHdpbmRvdy5Ob2RlLkVMRU1FTlRfTk9ERVxuICAgICAgICB9LFxuXG4gICAgICAgIGlzTm9kZUxpc3QgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgTm9kZUxpc3RdJ1xuICAgICAgICB9XG5cbiAgICB1dGlscy5lbFRvU3RyaW5nID0gZWxUb1N0cmluZ1xuICAgIGNoYWkuQXNzZXJ0aW9uLmFkZE1ldGhvZCgnYXR0cicsIGF0dHJBc3NlcnQpXG4gICAgY2hhaS5Bc3NlcnRpb24uYWRkTWV0aG9kKCdhdHRyaWJ1dGUnLCBhdHRyQXNzZXJ0KVxuXG4gICAgY2hhaS5Bc3NlcnRpb24uYWRkTWV0aG9kKCdjbGFzcycsIGZ1bmN0aW9uKGNsYXNzTmFtZSkge1xuICAgICAgICB2YXIgZWwgPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgIGVsLmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpXG4gICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhlbCkgKyAnIHRvIGhhdmUgY2xhc3MgI3tleHB9J1xuICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcoZWwpICsgJyBub3QgdG8gaGF2ZSBjbGFzcyAje2V4cH0nXG4gICAgICAgICAgICAsIGNsYXNzTmFtZVxuICAgICAgICApXG4gICAgfSlcblxuICAgIGNoYWkuQXNzZXJ0aW9uLmFkZE1ldGhvZCgnaWQnLCBmdW5jdGlvbihpZCkge1xuICAgICAgICB2YXIgZWwgPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgIGVsLmlkID09IGlkXG4gICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhlbCkgKyAnIHRvIGhhdmUgaWQgI3tleHB9J1xuICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcoZWwpICsgJyBub3QgdG8gaGF2ZSBpZCAje2V4cH0nXG4gICAgICAgICAgICAsIGlkXG4gICAgICAgIClcbiAgICB9KVxuXG4gICAgY2hhaS5Bc3NlcnRpb24uYWRkTWV0aG9kKCdodG1sJywgZnVuY3Rpb24oaHRtbCkge1xuICAgICAgICB2YXIgZWwgPSBmbGFnKHRoaXMsICdvYmplY3QnKSwgYWN0dWFsID0gZmxhZyh0aGlzLCAnb2JqZWN0JykuaW5uZXJIVE1MXG5cbiAgICAgICAgaWYgKGZsYWcodGhpcywgJ2NvbnRhaW5zJykpIHtcbiAgICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgICAgIGFjdHVhbC5pbmRleE9mKGh0bWwpID49IDBcbiAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAje2FjdH0gdG8gY29udGFpbiBIVE1MICN7ZXhwfSdcbiAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAje2FjdH0gbm90IHRvIGNvbnRhaW4gSFRNTCAje2V4cH0nXG4gICAgICAgICAgICAgICAgLCBodG1sXG4gICAgICAgICAgICAgICAgLCBhY3R1YWxcbiAgICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgICAgIGFjdHVhbCA9PT0gaHRtbFxuICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKGVsKSArICcgdG8gaGF2ZSBIVE1MICN7ZXhwfSwgYnV0IHRoZSBIVE1MIHdhcyAje2FjdH0nXG4gICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcoZWwpICsgJyBub3QgdG8gaGF2ZSBIVE1MICN7ZXhwfSdcbiAgICAgICAgICAgICAgICAsIGh0bWxcbiAgICAgICAgICAgICAgICAsIGFjdHVhbFxuICAgICAgICAgICAgKVxuICAgICAgICB9XG4gICAgfSlcblxuICAgIGNoYWkuQXNzZXJ0aW9uLmFkZENoYWluYWJsZU1ldGhvZCgndHJpbW1lZCcsIG51bGwsIGZ1bmN0aW9uKCkge1xuICAgICAgICBmbGFnKHRoaXMsICd0cmltLXRleHQnLCB0cnVlKVxuICAgIH0pXG5cbiAgICBjaGFpLkFzc2VydGlvbi5hZGRNZXRob2QoJ3RleHQnLCBmdW5jdGlvbih0ZXh0KSB7XG4gICAgICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKSwgY29udGFpbnMgPSBmbGFnKHRoaXMsICdjb250YWlucycpLFxuICAgICAgICAgICAgdHJpbSA9IGZsYWcodGhpcywgJ3RyaW0tdGV4dCcpLCBhY3R1YWwsIHJlc3VsdFxuXG4gICAgICAgIGlmIChpc05vZGVMaXN0KG9iaikpIHtcbiAgICAgICAgICAgIGFjdHVhbCA9IEFycmF5LnByb3RvdHlwZS5tYXAuY2FsbChvYmosIGZ1bmN0aW9uKGVsKSB7IHJldHVybiB0cmltID8gZWwudGV4dENvbnRlbnQudHJpbSgpIDogZWwudGV4dENvbnRlbnQgfSlcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRleHQpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gY29udGFpbnMgP1xuICAgICAgICAgICAgICAgICAgICB0ZXh0W2ZsYWcodGhpcywgJ25lZ2F0ZScpID8gJ3NvbWUnIDogJ2V2ZXJ5J10oZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zb21lLmNhbGwob2JqLCBmdW5jdGlvbihlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAodHJpbSA/IGVsLnRleHRDb250ZW50LnRyaW0oKSA6IGVsLnRleHRDb250ZW50KSA9PT0gdFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgICAgICB1dGlscy5lcWwoYWN0dWFsLCB0ZXh0KVxuXG4gICAgICAgICAgICAgICAgYWN0dWFsID0gYWN0dWFsLmpvaW4oKVxuICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0LmpvaW4oKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhY3R1YWwgPSBhY3R1YWwuam9pbignJylcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBjb250YWlucyA/IGFjdHVhbC5pbmRleE9mKHRleHQpID49IDAgOiBhY3R1YWwgPT09IHRleHRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFjdHVhbCA9IHRyaW0gPyBvYmoudGV4dENvbnRlbnQudHJpbSgpIDogb2JqLnRleHRDb250ZW50XG4gICAgICAgICAgICByZXN1bHQgPSBjb250YWlucyA/IGFjdHVhbC5pbmRleE9mKHRleHQpID49IDAgOiBhY3R1YWwgPT09IHRleHRcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBvYmpEZXNjID0gZWxUb1N0cmluZyhvYmopLCB0ZXh0TXNnID0gdHJpbSA/ICd0cmltbWVkIHRleHQnIDogJ3RleHQnXG4gICAgICAgIGlmIChjb250YWlucykge1xuICAgICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAgICAgcmVzdWx0XG4gICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIG9iakRlc2MgKyAnIHRvIGNvbnRhaW4gI3tleHB9LCBidXQgdGhlICcgKyB0ZXh0TXNnICsgJyB3YXMgI3thY3R9J1xuICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBvYmpEZXNjICsgJyBub3QgdG8gY29udGFpbiAje2V4cH0sIGJ1dCB0aGUgJyArIHRleHRNc2cgKyAnIHdhcyAje2FjdH0nXG4gICAgICAgICAgICAgICAgLCB0ZXh0XG4gICAgICAgICAgICAgICAgLCBhY3R1YWxcbiAgICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgICAgIHJlc3VsdFxuICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBvYmpEZXNjICsgJyB0byBoYXZlICcgKyB0ZXh0TXNnICsgJyAje2V4cH0sIGJ1dCB0aGUgJyArIHRleHRNc2cgKyAnIHdhcyAje2FjdH0nXG4gICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIG9iakRlc2MgKyAnIG5vdCB0byBoYXZlICcgKyB0ZXh0TXNnICsgJyAje2V4cH0nXG4gICAgICAgICAgICAgICAgLCB0ZXh0XG4gICAgICAgICAgICAgICAgLCBhY3R1YWxcbiAgICAgICAgICAgIClcbiAgICAgICAgfVxuICAgIH0pXG5cbiAgICBjaGFpLkFzc2VydGlvbi5hZGRNZXRob2QoJ3ZhbHVlJywgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgdmFyIGVsID0gZmxhZyh0aGlzLCAnb2JqZWN0JyksIGFjdHVhbCA9IGZsYWcodGhpcywgJ29iamVjdCcpLnZhbHVlXG4gICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgZmxhZyh0aGlzLCAnb2JqZWN0JykudmFsdWUgPT09IHZhbHVlXG4gICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhlbCkgKyAnIHRvIGhhdmUgdmFsdWUgI3tleHB9LCBidXQgdGhlIHZhbHVlIHdhcyAje2FjdH0nXG4gICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhlbCkgKyAnIG5vdCB0byBoYXZlIHZhbHVlICN7ZXhwfSdcbiAgICAgICAgICAgICwgdmFsdWVcbiAgICAgICAgICAgICwgYWN0dWFsXG4gICAgICAgIClcbiAgICB9KVxuXG4gICAgY2hhaS5Bc3NlcnRpb24ub3ZlcndyaXRlUHJvcGVydHkoJ2V4aXN0JywgZnVuY3Rpb24oX3N1cGVyKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgICAgICAgaWYgKGlzTm9kZUxpc3Qob2JqKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgICAgICAgICBvYmoubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCBhbiBlbXB0eSBOb2RlTGlzdCB0byBoYXZlIG5vZGVzJ1xuICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBub3QgZXhpc3QnKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSlcblxuICAgIGNoYWkuQXNzZXJ0aW9uLm92ZXJ3cml0ZVByb3BlcnR5KCdlbXB0eScsIGZ1bmN0aW9uKF9zdXBlcikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICAgICAgIGlmIChpc0hUTUxFbGVtZW50KG9iaikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgICAgICAgICAgb2JqLmNoaWxkcmVuLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBiZSBlbXB0eSdcbiAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gbm90IGJlIGVtcHR5JylcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOb2RlTGlzdChvYmopKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAgICAgICAgIG9iai5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gYmUgZW1wdHknXG4gICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIG5vdCBiZSBlbXB0eScpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KVxuXG4gICAgY2hhaS5Bc3NlcnRpb24ub3ZlcndyaXRlQ2hhaW5hYmxlTWV0aG9kKCdsZW5ndGgnLFxuICAgICAgICBmdW5jdGlvbihfc3VwZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICAgICAgICAgICBpZiAoaXNOb2RlTGlzdChvYmopIHx8IGlzSFRNTEVsZW1lbnQob2JqKSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYWN0dWFsTGVuZ3RoID0gb2JqLmNoaWxkcmVuID8gb2JqLmNoaWxkcmVuLmxlbmd0aCA6IG9iai5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWxMZW5ndGggPT09IGxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gaGF2ZSAje2V4cH0gY2hpbGRyZW4gYnV0IGl0IGhhZCAje2FjdH0gY2hpbGRyZW4nXG4gICAgICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBub3QgaGF2ZSAje2V4cH0gY2hpbGRyZW4nXG4gICAgICAgICAgICAgICAgICAgICAgICAsIGxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgLCBhY3R1YWxMZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBmdW5jdGlvbihfc3VwZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBfc3VwZXIuY2FsbCh0aGlzKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgKVxuXG5cbiAgICBjaGFpLkFzc2VydGlvbi5vdmVyd3JpdGVNZXRob2QoJ21hdGNoJywgZnVuY3Rpb24oX3N1cGVyKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihzZWxlY3Rvcikge1xuICAgICAgICAgICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAgICAgICBpZiAoaXNIVE1MRWxlbWVudChvYmopKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAgICAgICAgIG9iai5tYXRjaGVzKHNlbGVjdG9yKVxuICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBtYXRjaCAje2V4cH0nXG4gICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIG5vdCBtYXRjaCAje2V4cH0nXG4gICAgICAgICAgICAgICAgICAgICwgc2VsZWN0b3JcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzTm9kZUxpc3Qob2JqKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgICAgICAgICAoISFvYmoubGVuZ3RoICYmIEFycmF5LnByb3RvdHlwZS5ldmVyeS5jYWxsKG9iaiwgZnVuY3Rpb24oZWwpIHsgcmV0dXJuIGVsLm1hdGNoZXMoc2VsZWN0b3IpIH0pKVxuICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBtYXRjaCAje2V4cH0nXG4gICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIG5vdCBtYXRjaCAje2V4cH0nXG4gICAgICAgICAgICAgICAgICAgICwgc2VsZWN0b3JcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KVxuXG4gICAgY2hhaS5Bc3NlcnRpb24ub3ZlcndyaXRlQ2hhaW5hYmxlTWV0aG9kKCdjb250YWluJyxcbiAgICAgICAgZnVuY3Rpb24oX3N1cGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oc3ViaXRlbSkge1xuICAgICAgICAgICAgICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgICAgICAgICAgIGlmIChpc0hUTUxFbGVtZW50KG9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzdWJpdGVtID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgISFvYmoucXVlcnlTZWxlY3RvcihzdWJpdGVtKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIGNvbnRhaW4gI3tleHB9J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIG5vdCBjb250YWluICN7ZXhwfSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIHN1Yml0ZW0pXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmouY29udGFpbnMoc3ViaXRlbSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBjb250YWluICcgKyBlbFRvU3RyaW5nKHN1Yml0ZW0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gbm90IGNvbnRhaW4gJyArIGVsVG9TdHJpbmcoc3ViaXRlbSkpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZnVuY3Rpb24oX3N1cGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgX3N1cGVyLmNhbGwodGhpcylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIClcblxuICAgIGNoYWkuQXNzZXJ0aW9uLmFkZE1ldGhvZCgnZGVzY2VuZGFudCcsIGZ1bmN0aW9uKHN1Yml0ZW0pIHtcbiAgICAgICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpLCBhY3R1YWwgPSBzdWJpdGVtXG5cbiAgICAgICAgaWYgKHR5cGVvZiBzdWJpdGVtID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgYWN0dWFsID0gb2JqLnF1ZXJ5U2VsZWN0b3Ioc3ViaXRlbSlcbiAgICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgICAgICEhYWN0dWFsXG4gICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gaGF2ZSBkZXNjZW5kYW50ICN7ZXhwfSdcbiAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBub3QgaGF2ZSBkZXNjZW5kYW50ICN7ZXhwfSdcbiAgICAgICAgICAgICAgICAsIHN1Yml0ZW0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgICAgICBvYmouY29udGFpbnMoc3ViaXRlbSlcbiAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBjb250YWluICcgKyBlbFRvU3RyaW5nKHN1Yml0ZW0pXG4gICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gbm90IGNvbnRhaW4gJyArIGVsVG9TdHJpbmcoc3ViaXRlbSkpXG4gICAgICAgIH1cblxuICAgICAgICBmbGFnKHRoaXMsICdvYmplY3QnLCBhY3R1YWwpXG4gICAgfSlcblxuICAgIGNoYWkuQXNzZXJ0aW9uLmFkZE1ldGhvZCgnZGVzY2VuZGFudHMnLCBmdW5jdGlvbihzZWxlY3Rvcikge1xuICAgICAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0JyksXG4gICAgICAgICAgICBhY3R1YWwgPSBvYmoucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcilcbiAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAhIWFjdHVhbC5sZW5ndGhcbiAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIGhhdmUgZGVzY2VuZGFudHMgI3tleHB9J1xuICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gbm90IGhhdmUgZGVzY2VuZGFudHMgI3tleHB9J1xuICAgICAgICAgICAgLCBzZWxlY3RvcilcbiAgICAgICAgZmxhZyh0aGlzLCAnb2JqZWN0JywgYWN0dWFsKVxuICAgIH0pXG5cbiAgICBjaGFpLkFzc2VydGlvbi5hZGRQcm9wZXJ0eSgnZGlzcGxheWVkJywgZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBlbCA9IGZsYWcodGhpcywgJ29iamVjdCcpLFxuICAgICAgICAgICAgYWN0dWFsID0gZG9jdW1lbnQuYm9keS5jb250YWlucyhlbCkgPyB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCkuZGlzcGxheSA6IGVsLnN0eWxlLmRpc3BsYXlcblxuICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgIGFjdHVhbCAhPT0gJ25vbmUnXG4gICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhlbCkgKyAnIHRvIGJlIGRpc3BsYXllZCwgYnV0IGl0IHdhcyBub3QnXG4gICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhlbCkgKyAnIHRvIG5vdCBiZSBkaXNwbGF5ZWQsIGJ1dCBpdCB3YXMgYXMgJyArIGFjdHVhbFxuICAgICAgICAgICAgLCBhY3R1YWxcbiAgICAgICAgKVxuICAgIH0pXG5cbiAgICBjaGFpLkFzc2VydGlvbi5hZGRQcm9wZXJ0eSgndmlzaWJsZScsIGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZWwgPSBmbGFnKHRoaXMsICdvYmplY3QnKSxcbiAgICAgICAgICAgIGFjdHVhbCA9IGRvY3VtZW50LmJvZHkuY29udGFpbnMoZWwpID8gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwpLnZpc2liaWxpdHkgOiBlbC5zdHlsZS52aXNpYmlsaXR5XG5cbiAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICBhY3R1YWwgIT09ICdoaWRkZW4nICYmIGFjdHVhbCAhPT0gJ2NvbGxhcHNlJ1xuICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcoZWwpICsgJyB0byBiZSB2aXNpYmxlLCBidXQgaXQgd2FzICcgKyAoYWN0dWFsID09PSAnaGlkZGVuJyA/ICdoaWRkZW4nIDogJ2NvbGxhcHNlZCcpXG4gICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhlbCkgKyAnIHRvIG5vdCBiZSB2aXNpYmxlLCBidXQgaXQgd2FzJ1xuICAgICAgICAgICAgLCBhY3R1YWxcbiAgICAgICAgKVxuICAgIH0pXG59IiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHtleHRlbmR9IGZyb20gXCIuLi8uLi9zb3VyY2UvZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5cbmV4cG9ydCBjb25zdCBpc0Jyb3dzZXIgPSBuZXcgRnVuY3Rpb24oXCJ0cnkge3JldHVybiB0aGlzPT09d2luZG93O31jYXRjaChlKXsgcmV0dXJuIGZhbHNlO31cIik7XG5leHBvcnQgY29uc3QgaXNOb2RlID0gbmV3IEZ1bmN0aW9uKFwidHJ5IHtyZXR1cm4gdGhpcz09PWdsb2JhbDt9Y2F0Y2goZSl7cmV0dXJuIGZhbHNlO31cIik7XG5cbmxldCBKU0RPTUV4cG9ydCA9IG51bGw7XG5cbi8qKlxuICogdGhpcyBoZWxwZXIgZnVuY3Rpb24gY3JlYXRlcyB0aGUgZG9tIHN0YWNrIGluIHRoZSBub2RlIGVudmlyb25tZW50XG4gKlxuICogQHJldHVybiB7UHJvbWlzZTx1bmtub3duPnxQcm9taXNlPHZvaWQ+fVxuICovXG5mdW5jdGlvbiBpbml0SlNET00ob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiICYmIHdpbmRvd1snRE9NUGFyc2VyJ10pIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblxuICAgIGNvbnN0IGcgPSBnZXRHbG9iYWwoKTtcblxuICAgIG9wdGlvbnMgPSBleHRlbmQoe30sIHtcbiAgICAgICAgcHJldGVuZFRvQmVWaXN1YWw6IHRydWUsXG4gICAgICAgIGNvbnRlbnRUeXBlOiBcInRleHQvaHRtbFwiLFxuICAgICAgICBpbmNsdWRlTm9kZUxvY2F0aW9uczogdHJ1ZSxcbiAgICAgICAgc3RvcmFnZVF1b3RhOiAxMDAwMDAwMCxcbiAgICAgICAgcnVuU2NyaXB0czogXCJkYW5nZXJvdXNseVwiLFxuICAgICAgICByZXNvdXJjZXM6IFwidXNhYmxlXCJcbiAgICB9LCBvcHRpb25zIHx8IHt9KVxuXG4gICAgcmV0dXJuIGltcG9ydChcImpzZG9tXCIpLnRoZW4oKHtKU0RPTX0pID0+IHtcbiAgICAgICAgSlNET01FeHBvcnQgPSBKU0RPTTtcbiAgICAgICAgY29uc3Qge3dpbmRvd30gPSBuZXcgSlNET00oYDwhRE9DVFlQRSBodG1sPjxodG1sIGxhbmc9XCJlblwiPjxoZWFkPjx0aXRsZT5UZXN0PC90aXRsZT48L2hlYWQ+PGJvZHk+PGRpdiBpZD1cIm1vY2tzXCI+PC9kaXY+PC9ib2R5PjwvaHRtbD5gLCBvcHRpb25zKTtcblxuICAgICAgICBnWyd3aW5kb3cnXSA9IHdpbmRvdztcbiAgICAgICAgXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PlxuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsICgpID0+IHtcblxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgJ0Jsb2InLFxuICAgICAgICAgICAgICAgICAgICAnQ1NTU3R5bGVTaGVldCcsXG4gICAgICAgICAgICAgICAgICAgICdjdXN0b21FbGVtZW50cycsXG4gICAgICAgICAgICAgICAgICAgICdDdXN0b21FdmVudCcsXG4gICAgICAgICAgICAgICAgICAgICdkb2N1bWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdET01FeGNlcHRpb24nLFxuICAgICAgICAgICAgICAgICAgICAnRE9NSW1wbGVtZW50YXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAnRG9jdW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnRG9jdW1lbnRGcmFnbWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdET01QYXJzZXInLFxuICAgICAgICAgICAgICAgICAgICAnRWxlbWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdFbGVtZW50SW50ZXJuYWxzJyxcbiAgICAgICAgICAgICAgICAgICAgJ0V2ZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ0V2ZW50VGFyZ2V0JyxcbiAgICAgICAgICAgICAgICAgICAgJ2dldENvbXB1dGVkU3R5bGUnLFxuICAgICAgICAgICAgICAgICAgICAnSFRNTEJ1dHRvbkVsZW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnSFRNTENvbGxlY3Rpb24nLFxuICAgICAgICAgICAgICAgICAgICAnSFRNTERpdkVsZW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnSFRNTERvY3VtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ0hUTUxFbGVtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ0hUTUxGb3JtRWxlbWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdIVE1MSW5wdXRFbGVtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ0hUTUxTY3JpcHRFbGVtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ3JlcXVlc3RBbmltYXRpb25GcmFtZScsXG4gICAgICAgICAgICAgICAgICAgICdIVE1MU2VsZWN0RWxlbWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdIVE1MVGVtcGxhdGVFbGVtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ0hUTUxUZXh0QXJlYUVsZW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnSW5wdXRFdmVudCcsXG4gICAgICAgICAgICAgICAgICAgICdLZXlib2FyZEV2ZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ011dGF0aW9uT2JzZXJ2ZXInLFxuICAgICAgICAgICAgICAgICAgICAnbmF2aWdhdG9yJyxcbiAgICAgICAgICAgICAgICAgICAgJ05vZGUnLFxuICAgICAgICAgICAgICAgICAgICAnTm9kZUZpbHRlcicsXG4gICAgICAgICAgICAgICAgICAgICdOb2RlTGlzdCcsXG4gICAgICAgICAgICAgICAgICAgICdzZWxmJyxcbiAgICAgICAgICAgICAgICAgICAgJ1NoYWRvd1Jvb3QnLFxuICAgICAgICAgICAgICAgICAgICAnWE1MU2VyaWFsaXplcicsXG4gICAgICAgICAgICAgICAgXS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnW2tleV0gPSB3aW5kb3dba2V5XSAgICBcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3Igc2V0dGluZyBrZXlcIiwga2V5LCBlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaW1wb3J0KFwiZG9tLXN0b3JhZ2VcIikudGhlbigoe2RlZmF1bHQ6IFN0b3JhZ2V9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBnLmxvY2FsU3RvcmFnZSA9IG5ldyBTdG9yYWdlKG51bGwsIHtzdHJpY3Q6IHRydWV9KTtcbiAgICAgICAgICAgICAgICAgICAgZy5zZXNzaW9uU3RvcmFnZSA9IG5ldyBTdG9yYWdlKG51bGwsIHtzdHJpY3Q6IHRydWV9KTtcblxuICAgICAgICAgICAgICAgICAgICB3aW5kb3dbJ2xvY2FsU3RvcmFnZSddID0gZy5sb2NhbFN0b3JhZ2U7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvd1snc2Vzc2lvblN0b3JhZ2UnXSA9IGcuc2Vzc2lvblN0b3JhZ2U7XG5cbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShnKTtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBsb2FkaW5nIGRvbS1zdG9yYWdlXCIsIGUpO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cblxuICAgIH0pO1xufVxuXG5leHBvcnQge2luaXRKU0RPTSwgSlNET01FeHBvcnR9IFxuXG4iLCAiaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0ICogYXMgY2hhaSBmcm9tICdjaGFpJztcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcbmNoYWkudXNlKGNoYWlEb20pO1xuXG5jb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcblxuXG4vLyBsYW5ndWFnZT1odG1sXG5sZXQgaHRtbDEgPSBgXG4gICAgPG1vbnN0ZXItc3BsaXQtcGFuZWwgaWQ9XCJteS1zcGxpdC1wYW5lbFwiPlxuICAgICAgIFxuICAgIDwvbW9uc3Rlci1zcGxpdC1wYW5lbD5cbmA7XG5cbmxldCBTcGxpdFNjcmVlbjtcblxuZGVzY3JpYmUoJ1NwbGl0U2NyZWVuJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuXG4gICAgICAgICAgICBpbXBvcnQoXCJlbGVtZW50LWludGVybmFscy1wb2x5ZmlsbFwiKS5jYXRjaChlID0+IGRvbmUoZSkpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBsZXQgcHJvbWlzZXMgPSBbXVxuXG4gICAgICAgICAgICBpZiAoIWdsb2JhbFsnY3J5cHRvJ10pIHtcbiAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKGltcG9ydChcIkBwZWN1bGlhci93ZWJjcnlwdG9cIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBDcnlwdG8gPSBtWydDcnlwdG8nXTtcbiAgICAgICAgICAgICAgICAgICAgZ2xvYmFsWydjcnlwdG8nXSA9IG5ldyBDcnlwdG8oKTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByb21pc2VzLnB1c2goaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvbGF5b3V0L3NwbGl0LXBhbmVsLm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgU3BsaXRTY3JlZW4gPSBtWydTcGxpdFBhbmVsJ107XG4gICAgICAgICAgICB9KSlcblxuICAgICAgICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCk9PntcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpXG5cbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIGhhdmUgYnV0dG9ucyBhbmQgU3BsaXRTY3JlZW4nLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBTcGxpdFNjcmVlbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteS1zcGxpdC1wYW5lbCcpXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChTcGxpdFNjcmVlbikuaXMuaW5zdGFuY2VvZihIVE1MRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGl2ID0gU3BsaXRTY3JlZW4uc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdkaXYnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChkaXYuaGFzQ2hpbGROb2RlcygpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICB9LCAxMDApXG5cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSwgMClcblxuXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxufSk7IiwgImltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCAqIGFzIGNoYWkgZnJvbSAnY2hhaSc7XG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5cblxuLy8gbGFuZ3VhZ2U9aHRtbFxubGV0IGh0bWwxID0gYFxuICAgIDxtb25zdGVyLXBhbmVsIGlkPVwibXktcGFuZWxcIj5cbiAgICAgICBcbiAgICA8L21vbnN0ZXItcGFuZWw+XG5gO1xuXG5sZXQgU3BsaXRTY3JlZW47XG5cbmRlc2NyaWJlKCdTcGxpdFNjcmVlbicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgaW1wb3J0KFwiZWxlbWVudC1pbnRlcm5hbHMtcG9seWZpbGxcIikuY2F0Y2goZSA9PiBkb25lKGUpKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgbGV0IHByb21pc2VzID0gW11cblxuICAgICAgICAgICAgaWYgKCFnbG9iYWxbJ2NyeXB0byddKSB7XG4gICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaChpbXBvcnQoXCJAcGVjdWxpYXIvd2ViY3J5cHRvXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgQ3J5cHRvID0gbVsnQ3J5cHRvJ107XG4gICAgICAgICAgICAgICAgICAgIGdsb2JhbFsnY3J5cHRvJ10gPSBuZXcgQ3J5cHRvKCk7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2xheW91dC9wYW5lbC5tanNcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIFNwbGl0U2NyZWVuID0gbVsnUGFuZWwnXTtcbiAgICAgICAgICAgIH0pKVxuXG4gICAgICAgICAgICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigoKT0+e1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSlcblxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdzaG91bGQgaGF2ZSBidXR0b25zIGFuZCBTcGxpdFNjcmVlbicsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IFNwbGl0U2NyZWVuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215LXBhbmVsJylcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KFNwbGl0U2NyZWVuKS5pcy5pbnN0YW5jZW9mKEhUTUxFbGVtZW50KTtcblxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkaXYgPSBTcGxpdFNjcmVlbi5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ2RpdicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRpdi5oYXNDaGlsZE5vZGVzKCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIDEwMClcblxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9LCAwKVxuXG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG59KTsiLCAiaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0ICogYXMgY2hhaSBmcm9tICdjaGFpJztcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge3NldHVwSW50ZXJzZWN0aW9uT2JzZXJ2ZXJNb2NrfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9pbnRlcnNlY3Rpb24tbW9jay5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xubGV0IG1vY2tpbnRlcnNlY3Rpb25vYnNlcnZlcjtcblxubGV0IGh0bWwxID0gYFxuICAgIDxkaXYgaWQ9XCJ0ZXN0MVwiPlxuICAgIDwvZGl2PlxuYDtcblxuZGVzY3JpYmUoJ1JlbG9hZCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIC8vIGpzZG9tLXRlc3RpbmctbW9ja3MgbmVlZCBqZXN0XG4gICAgbGV0IFJlbG9hZCwgdmlld3BvcnQsIG1vY2tWaWV3cG9ydDtcblxuICAgIGFmdGVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbW9ja2ludGVyc2VjdGlvbm9ic2VydmVyLnJlc3RvcmUoKTtcbiAgICB9KVxuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgXG4gICAgICAgIFxuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgaW1wb3J0KFwiZWxlbWVudC1pbnRlcm5hbHMtcG9seWZpbGxcIikuY2F0Y2goZSA9PiBkb25lKGUpKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgbW9ja2ludGVyc2VjdGlvbm9ic2VydmVyID0gc2V0dXBJbnRlcnNlY3Rpb25PYnNlcnZlck1vY2soKTtcblxuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9yZWxvYWQubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBSZWxvYWQgPSBtWydSZWxvYWQnXTtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSlcblxuXG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnbmV3IFJlbG9hZCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG5cblxuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJ2NyZWF0ZSBmcm9tIHRlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgLy8gbGFuZ3VhZ2U9SFRNTFxuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGBcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cInRlc3QyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bW9uc3Rlci1yZWxvYWQ+PC9tb25zdGVyLXJlbG9hZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgYDtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgZnJvbSB0ZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdCgnc2hvdWxkIGNvbnRhaW5zIG1vbnN0ZXItcmVsb2FkJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QyJykpLmNvbnRhaW4uaHRtbCgnPG1vbnN0ZXItcmVsb2FkJyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdzaG91bGQgaW5zdGFuY2Ugb2YgcmVsb2FkJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXJlbG9hZCcpKS5pcy5pbnN0YW5jZW9mKFJlbG9hZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IG1vY2tzO1xuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3Nob3VsZCBoYXZlIG5vIG9wdGlvbnMnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBjb25zdCByZWxvYWQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXJlbG9hZCcpO1xuICAgICAgICAgICAgbW9ja3MuYXBwZW5kQ2hpbGQocmVsb2FkKTtcblxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcblxuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJykpLmNvbnRhaW4uaHRtbCgnPG1vbnN0ZXItcmVsb2FkJyk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9LCAwKVxuXG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxuICAgIGRlc2NyaWJlKCdsb2FkIGNvbnRlbnQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IG1vY2tzLCBmZXRjaFJlZmVyZW5jZSwgaW50ZXJzZWN0aW9uT2JzZXJ2ZXI7XG4gICAgICAgIGJlZm9yZUVhY2goKGRvbmUpID0+IHtcbiAgICAgICAgICAgIG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAvLyBsYW5ndWFnZT1IVE1MXG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBgXG4gICAgICAgICAgICAgICAgPGRpdiBpZD1cInRoaXMtY29udGVudFwiPlxuXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBgO1xuXG4gICAgICAgICAgICBmZXRjaFJlZmVyZW5jZSA9IGdsb2JhbFsnZmV0Y2gnXTtcblxuICAgICAgICAgICAgZ2xvYmFsWydmZXRjaCddID0gZnVuY3Rpb24gKHVybCwgb3B0aW9ucykge1xuXG4gICAgICAgICAgICAgICAgbGV0IGhlYWRlcnMgPSBuZXcgTWFwO1xuICAgICAgICAgICAgICAgIGhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCAndGV4dC9odG1sJyk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9rOnRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6MjAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUyLCByZWplY3QyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUyKCdoZWxsbyB3b3JsZCEnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgICAgICBnbG9iYWxbJ2ZldGNoJ10gPSBmZXRjaFJlZmVyZW5jZTtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIGxvYWQgY29udGVudCBmcm9tIHVybCcsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlbG9hZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItcmVsb2FkJyk7XG4gICAgICAgICAgICByZWxvYWQuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItdXJsJywgJ2h0dHA6Ly9sb2NhbGhvc3QvJylcblxuICAgICAgICAgICAgcmVsb2FkLmFkZEV2ZW50TGlzdGVuZXIoJ21vbnN0ZXItZmV0Y2hlZCcsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLXJlbG9hZCcpO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZWxlbWVudCkuY29udGFpbi5odG1sKCdoZWxsbyB3b3JsZCcpO1xuICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIG1vY2tzLmFwcGVuZENoaWxkKHJlbG9hZCk7XG4gICAgICAgICAgICBtb2NraW50ZXJzZWN0aW9ub2JzZXJ2ZXIuZ2V0SW5zdGFuY2UoKS5lbnRlck5vZGUoKTtcblxuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG59KTsiLCAiaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuXG5jb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHNldHVwSW50ZXJzZWN0aW9uT2JzZXJ2ZXJNb2NrKFxuICAgIHtcbiAgICAgICAgcm9vdCA9IG51bGwsXG4gICAgICAgIHJvb3RNYXJnaW4gPSAnJyxcbiAgICAgICAgdGhyZXNob2xkcyA9IFtdLFxuICAgICAgICBkaXNjb25uZWN0ID0gKCkgPT4gbnVsbCxcbiAgICAgICAgb2JzZXJ2ZSA9ICgpID0+IG51bGwsXG4gICAgICAgIHRha2VSZWNvcmRzID0gKCkgPT4gW10sXG4gICAgICAgIHVub2JzZXJ2ZSA9ICgpID0+IG51bGwsXG4gICAgfSA9IHt9KSB7XG5cbiAgICBjb25zdCBzYXZlZEltcGxlbWVudGF0aW9uID0gd2luZG93LkludGVyc2VjdGlvbk9ic2VydmVyO1xuXG4gICAgbGV0IGxhc3RPYmplY3Q7XG5cbiAgICBjbGFzcyBNb2NrSW50ZXJzZWN0aW9uT2JzZXJ2ZXIge1xuICAgICAgICBjb25zdHJ1Y3RvcihjYWxsYmFjaywgb3B0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5yb290ID0gcm9vdDtcbiAgICAgICAgICAgIHRoaXMucm9vdE1hcmdpbiA9IHJvb3RNYXJnaW47XG4gICAgICAgICAgICB0aGlzLnRocmVzaG9sZHMgPSB0aHJlc2hvbGRzO1xuICAgICAgICAgICAgdGhpcy5kaXNjb25uZWN0ID0gZGlzY29ubmVjdDtcbiAgICAgICAgICAgIHRoaXMub2JzZXJ2ZSA9IG9ic2VydmU7XG4gICAgICAgICAgICB0aGlzLnRha2VSZWNvcmRzID0gdGFrZVJlY29yZHM7XG4gICAgICAgICAgICB0aGlzLnVub2JzZXJ2ZSA9IHVub2JzZXJ2ZTtcbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICAgICAgICAgIGxhc3RPYmplY3QgPSB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgZW50ZXJOb2RlKCkge1xuXG4gICAgICAgICAgICBjb25zdCBlbnRyaWVzID0gW107XG4gICAgICAgICAgICBlbnRyaWVzLnB1c2goe1xuICAgICAgICAgICAgICAgIGlzSW50ZXJzZWN0aW5nOiB0cnVlXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICB0aGlzWydjYWxsYmFjayddKGVudHJpZXMsIHRoaXMpO1xuICAgICAgICB9XG5cblxuICAgIH1cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3csICdJbnRlcnNlY3Rpb25PYnNlcnZlcicsIHtcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IE1vY2tJbnRlcnNlY3Rpb25PYnNlcnZlclxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGdsb2JhbCwgJ0ludGVyc2VjdGlvbk9ic2VydmVyJywge1xuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogTW9ja0ludGVyc2VjdGlvbk9ic2VydmVyXG4gICAgfSk7XG5cblxuICAgIHJldHVybiB7XG4gICAgICAgIHJlc3RvcmU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHdpbmRvdy5JbnRlcnNlY3Rpb25PYnNlcnZlciA9IHNhdmVkSW1wbGVtZW50YXRpb247XG4gICAgICAgIH0sXG4gICAgICAgIGdldEluc3RhbmNlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gbGFzdE9iamVjdDtcbiAgICAgICAgfVxuICAgIH1cbn0iLCAiaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0ICogYXMgY2hhaSBmcm9tICdjaGFpJztcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5pbXBvcnQge1Jlc2l6ZU9ic2VydmVyTW9ja30gZnJvbSBcIi4uLy4uLy4uL3V0aWwvcmVzaXplLW9ic2VydmVyLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5cbmxldCBodG1sMSA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDFcIj5cbiAgICA8L2Rpdj5cbmA7XG5cbmxldCBodG1sMiA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDJcIj5cbiAgICA8bW9uc3Rlci1zdGF0ZS1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYmluZD1cInBhdGg6dmFsdWVzLmNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1vcHRpb25zPSd7XG4gIFwidXJsXCI6IFwibW9jay1kYXRhLmpzb25cIixcbiAgXCJtYXBwaW5nXCI6IHtcbiAgICBcInZhbHVlUGF0aFwiOiBcIlxcJHtmaXJzdF9uYW1lfSBcXCR7bGFzdF9uYW1lfVwiLFxuICAgIFwia2V5UGF0aFwiOiBcImlkXCJcbiAgfSxcbiAgICAgIFwidHlwZVwiOlwiY2hlY2tib3hcIlxuXG59Jz48L21vbnN0ZXItc3RhdGUtYnV0dG9uPlxuICAgIDwvZGl2PlxuYDtcblxubGV0IFN0YXRlQnV0dG9uO1xuXG5kZXNjcmliZSgnU3RhdGVCdXR0b24nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBhZnRlcihmdW5jdGlvbiAoKSB7XG4gICAgfSlcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgaW1wb3J0KFwiZWxlbWVudC1pbnRlcm5hbHMtcG9seWZpbGxcIikuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuICAgICAgICAgICAgaWYoIWdsb2JhbC5SZXNpemVPYnNlcnZlcikge1xuICAgICAgICAgICAgICAgIGdsb2JhbC5SZXNpemVPYnNlcnZlciA9IFJlc2l6ZU9ic2VydmVyTW9jaztcbiAgICAgICAgICAgIH0gICAgICAgICAgICBcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9zdGF0ZS1idXR0b24ubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBTdGF0ZUJ1dHRvbiA9IG1bJ1N0YXRlQnV0dG9uJ107XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpXG5cblxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ25ldyBTdGF0ZUJ1dHRvbicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMjtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgZnJvbSB0ZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdCgnc2hvdWxkIGNvbnRhaW5zIG1vbnN0ZXItc3RhdGUtYnV0dG9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QyJykpLmNvbnRhaW4uaHRtbCgnPG1vbnN0ZXItc3RhdGUtYnV0dG9uJyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdzaG91bGQgaW5zdGFuY2Ugb2Ygc3RhdGUtYnV0dG9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXN0YXRlLWJ1dHRvbicpKS5pcy5pbnN0YW5jZW9mKFN0YXRlQnV0dG9uKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdzaG91bGQgaGF2ZSBubyBvcHRpb25zJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBjb25zdCBidXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXN0YXRlLWJ1dHRvbicpO1xuICAgICAgICAgICAgbW9ja3MuYXBwZW5kQ2hpbGQoYnV0dG9uKTtcblxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGJ1dHRvbi5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvbicpO1xuXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25zKS5pcy5pbnN0YW5jZW9mKEhUTUxCdXR0b25FbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG9wdGlvbnMuaGFzQ2hpbGROb2RlcygpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSwgMClcblxuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbn0pOyIsICJcblxuXG5leHBvcnQge1Jlc2l6ZU9ic2VydmVyTW9ja31cblxuXG5jbGFzcyBSZXNpemVPYnNlcnZlck1vY2sge1xuICAgIGNvbnN0cnVjdG9yKGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgICAgdGhpcy5lbGVtZW50cyA9IFtdO1xuICAgIH1cblxuICAgIG9ic2VydmUoZWxlbWVudCkge1xuICAgICAgICB0aGlzLmVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gICAgfVxuXG4gICAgdW5vYnNlcnZlKGVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50cyA9IHRoaXMuZWxlbWVudHMuZmlsdGVyKChlbCkgPT4gZWwgIT09IGVsZW1lbnQpO1xuICAgIH1cblxuICAgIGRpc2Nvbm5lY3QoKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudHMgPSBbXTtcbiAgICB9XG5cbiAgICB0cmlnZ2VyUmVzaXplKGVudHJpZXMpIHtcbiAgICAgICAgdGhpcy5jYWxsYmFjayhlbnRyaWVzLCB0aGlzKTtcbiAgICB9XG59XG5cbiIsICJpbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgKiBhcyBjaGFpIGZyb20gJ2NoYWknO1xuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcbmltcG9ydCB7UmVzaXplT2JzZXJ2ZXJNb2NrfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9yZXNpemUtb2JzZXJ2ZXIubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcbmNoYWkudXNlKGNoYWlEb20pO1xuXG5jb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcblxubGV0IGh0bWwxID0gYFxuICAgIDxkaXYgaWQ9XCJ0ZXN0MVwiPlxuICAgIDwvZGl2PlxuYDtcblxubGV0IGh0bWwyID0gYFxuICAgIDxkaXYgaWQ9XCJ0ZXN0MlwiPlxuICAgIDxtb25zdGVyLXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1iaW5kPVwicGF0aDp2YWx1ZXMuY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLW9wdGlvbnM9J3tcbiAgXCJ1cmxcIjogXCJtb2NrLWRhdGEuanNvblwiLFxuICBcIm1hcHBpbmdcIjoge1xuICAgIFwic2VsZWN0b3JcIjogXCIqXCIsXG4gICAgXCJ2YWx1ZVRlbXBsYXRlXCI6IFwiXFwke2ZpcnN0X25hbWV9IFxcJHtsYXN0X25hbWV9XCIsXG4gICAgXCJsYWJlbFRlbXBsYXRlXCI6IFwiaWRcIlxuICB9LFxuICAgICAgXCJ0eXBlXCI6XCJjaGVja2JveFwiXG5cbn0nPjwvbW9uc3Rlci1zZWxlY3Q+XG4gICAgPC9kaXY+XG5gO1xuXG5sZXQgU2VsZWN0LCBmZXRjaFJlZmVyZW5jZTtcblxuZGVzY3JpYmUoJ1NlbGVjdCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgaW1wb3J0KFwiZWxlbWVudC1pbnRlcm5hbHMtcG9seWZpbGxcIikuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuICAgICAgICAgICAgZmV0Y2hSZWZlcmVuY2UgPSBnbG9iYWxbJ2ZldGNoJ107XG5cbiAgICAgICAgICAgIGlmICghZ2xvYmFsLlJlc2l6ZU9ic2VydmVyKSB7XG4gICAgICAgICAgICAgICAgZ2xvYmFsLlJlc2l6ZU9ic2VydmVyID0gUmVzaXplT2JzZXJ2ZXJNb2NrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpbXBvcnQoXCIuLi8uLi8uLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3NlbGVjdC5tanNcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIFNlbGVjdCA9IG1bJ1NlbGVjdCddO1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKVxuXG5cbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdXaXRoIGZldGNoJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcblxuICAgICAgICAgICAgZ2xvYmFsWydmZXRjaCddID0gZnVuY3Rpb24gKHVybCwgb3B0aW9ucykge1xuXG4gICAgICAgICAgICAgICAgbGV0IGhlYWRlcnMgPSBuZXcgTWFwO1xuICAgICAgICAgICAgICAgIGhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTIsIHJlamVjdDIpID0+IHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQganNvbiA9IEpTT04ucGFyc2UoYFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImZpcnN0X25hbWVcIjogXCJBbGV4aWFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsYXN0X25hbWVcIjogXCJPdWdodHJpZ2h0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZW1haWxcIjogXCJhb3VnaHRyaWdodDBAZXhibG9nLmpwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2VuZGVyXCI6IFwiQWdlbmRlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvdW50cnlcIjogXCJtblwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImZpcnN0X25hbWVcIjogXCJCZXRoXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGFzdF9uYW1lXCI6IFwiQm9kZGluZ3RvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImVtYWlsXCI6IFwiYmJvZGRpbmd0b24xQHN0YXRjb3VudGVyLmNvbVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImdlbmRlclwiOiBcIk5vbi1iaW5hcnlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb3VudHJ5XCI6IFwic3lcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImZpcnN0X25hbWVcIjogXCJTaGVsbGlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsYXN0X25hbWVcIjogXCJBJ0JhcnJvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImVtYWlsXCI6IFwic2FiYXJyb3cyQGdvb2dsZS5jby51a1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImdlbmRlclwiOiBcIlBvbHlnZW5kZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb3VudHJ5XCI6IFwibm9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdYCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZTIoSlNPTi5zdHJpbmdpZnkoanNvbikpXG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICB9O1xuXG5cbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICAgICAgZ2xvYmFsWydmZXRjaCddID0gZmV0Y2hSZWZlcmVuY2U7XG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJ2NyZWF0ZSBmcm9tIHRlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDI7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICAgICAgICAgIGdsb2JhbFsnZmV0Y2gnXSA9IGZldGNoUmVmZXJlbmNlO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgZGVzY3JpYmUoJ2NyZWF0ZSBmcm9tIHRlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGl0KCdzaG91bGQgY29udGFpbnMgbW9uc3Rlci1zZWxlY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDInKSkuY29udGFpbi5odG1sKCc8bW9uc3Rlci1zZWxlY3QnKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXQoJ3Nob3VsZCBpbnN0YW5jZSBvZiBzZWxlY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1zZWxlY3QnKTtcbiAgICAgICAgICAgICAgICBleHBlY3Qoc2VsZWN0KS5pcy5pbnN0YW5jZW9mKFNlbGVjdCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBoYXZlIG9wdGlvbnMnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1zZWxlY3QnKTtcbiAgICAgICAgICAgICAgICBzZWxlY3Quc2V0T3B0aW9uKCd1cmwnLCAnaHR0cHM6Ly9leGFtcGxlLmNvbScpXG4gICAgICAgICAgICAgICAgc2VsZWN0LnNldE9wdGlvbignbWFwcGluZy5zZWxlY3RvcicsICcqJylcbiAgICAgICAgICAgICAgICBzZWxlY3Quc2V0T3B0aW9uKCdtYXBwaW5nLmxhYmVsVGVtcGxhdGUnLCAnJHtpZH0nKVxuICAgICAgICAgICAgICAgIHNlbGVjdC5zZXRPcHRpb24oJ21hcHBpbmcudmFsdWVUZW1wbGF0ZScsICcke2lkfScpXG5cbiAgICAgICAgICAgICAgICBzZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcignbW9uc3Rlci1vcHRpb25zLXNldCcsIChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSBzZWxlY3Quc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25zLmxlbmd0aCkuaXMuZXF1YWwoMyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25IdG1sID0gc2VsZWN0LnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignW2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbnNdJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG9wdGlvbkh0bWwpLmNvbnRhaW4uaHRtbCgnZGF0YS1tb25zdGVyLWluc2VydC1yZWZlcmVuY2U9XCJvcHRpb25zLTBcIicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25IdG1sKS5jb250YWluLmh0bWwoJ2RhdGEtbW9uc3Rlci1pbnNlcnQtcmVmZXJlbmNlPVwib3B0aW9ucy0xXCInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9uSHRtbCkuY29udGFpbi5odG1sKCdkYXRhLW1vbnN0ZXItaW5zZXJ0LXJlZmVyZW5jZT1cIm9wdGlvbnMtMlwiJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG9wdGlvbkh0bWwpLmNvbnRhaW4ubm90Lmh0bWwoJ2RhdGEtbW9uc3Rlci1pbnNlcnQtcmVmZXJlbmNlPVwib3B0aW9ucy0zXCInKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcblxuICAgICAgICAgICAgICAgICAgICB9LCAxMDApXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBtb2Nrcy5hcHBlbmRDaGlsZChzZWxlY3QpO1xuXG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3Nob3VsZCBoYXZlIG5vIG9wdGlvbnMnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItc2VsZWN0Jyk7XG4gICAgICAgICAgICBtb2Nrcy5hcHBlbmRDaGlsZChzZWxlY3QpO1xuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zID0gc2VsZWN0LnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignW2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbnNdJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG9wdGlvbnMpLmlzLmluc3RhbmNlb2YoSFRNTERpdkVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGEgPSBvcHRpb25zLnBhcmVudE5vZGUub3V0ZXJIVE1MO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBiID0gb3B0aW9ucy5jaGlsZE5vZGVzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG9wdGlvbnMuaGFzQ2hpbGROb2RlcygpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0sIDApXG5cblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pOyIsICJpbXBvcnQge0RhdGFVcmx9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZGF0YXVybC5tanNcIjtcblxuaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0ICogYXMgY2hhaSBmcm9tICdjaGFpJztcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5pbXBvcnQge1Jlc2l6ZU9ic2VydmVyTW9ja30gZnJvbSBcIi4uLy4uLy4uL3V0aWwvcmVzaXplLW9ic2VydmVyLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5cbmxldCBodG1sMSwgb3B0aW9ucywgaHRtbDIsIENvbmZpcm1CdXR0b247XG5cbmRlc2NyaWJlKCdDb25maXJtQnV0dG9uJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgaW1wb3J0KFwiZWxlbWVudC1pbnRlcm5hbHMtcG9seWZpbGxcIikuY2F0Y2goZSA9PiBkb25lKGUpKTsgICAgXG4gICAgICAgIFxuICAgICAgICBpZighZ2xvYmFsLlJlc2l6ZU9ic2VydmVyKSB7XG4gICAgICAgICAgICBnbG9iYWwuUmVzaXplT2JzZXJ2ZXIgPSBSZXNpemVPYnNlcnZlck1vY2s7XG4gICAgICAgIH1cblxuICAgICAgICBvcHRpb25zID0gbmV3IERhdGFVcmwoYnRvYShKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBwb3BwZXI6IHtcbiAgICAgICAgICAgICAgICBwbGFjZW1lbnQ6IFwidG9wXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pKSwgJ2FwcGxpY2F0aW9uL2pzb24nLCB0cnVlKS50b1N0cmluZygpXG5cbiAgICAgICAgaHRtbDIgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QyXCI+XG4gICAgPG1vbnN0ZXItY29uZmlybS1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYmluZD1cInBhdGg6dmFsdWVzLmNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1vcHRpb25zPVwiYCArIG9wdGlvbnMgKyBgXCI+PC9tb25zdGVyLWNvbmZpcm0tYnV0dG9uPlxuICAgIDwvZGl2PlxuYDtcblxuICAgICAgICBodG1sMSA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDFcIj5cbiAgICA8L2Rpdj5cbmBcblxuXG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuXG4gICAgICAgICAgICBpbXBvcnQoXCIuLi8uLi8uLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL2NvbmZpcm0tYnV0dG9uLm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgQ29uZmlybUJ1dHRvbiA9IG1bJ0NvbmZpcm1CdXR0b24nXTtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSlcblxuXG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnbmV3IENvbmZpcm1CdXR0b24nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJ2NyZWF0ZSBmcm9tIHRlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDI7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXQoJ3Nob3VsZCBjb250YWlucyBtb25zdGVyLWNvbmZpcm0tYnV0dG9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QyJykpLmNvbnRhaW4uaHRtbCgnPG1vbnN0ZXItY29uZmlybS1idXR0b24nKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXQoJ3Nob3VsZCBpbnN0YW5jZSBvZiBidXR0b24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItY29uZmlybS1idXR0b24nKSkuaXMuaW5zdGFuY2VvZihDb25maXJtQnV0dG9uKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdzaG91bGQgaGF2ZSBjaGlsZHMnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItY29uZmlybS1idXR0b24nKTtcbiAgICAgICAgICAgIG1vY2tzLmFwcGVuZENoaWxkKGJ1dHRvbik7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBidXR0b24uc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLWJ1dHRvbicpO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoY29udGVudC5oYXNDaGlsZE5vZGVzKCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9LCAwKVxuXG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxufSk7IiwgImltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCAqIGFzIGNoYWkgZnJvbSAnY2hhaSc7XG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuaW1wb3J0IHtEYXRhc291cmNlfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS5tanNcIjtcbmltcG9ydCB7UHJvY2Vzc2luZ30gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS91dGlsL3Byb2Nlc3NpbmcubWpzXCI7XG5cbmltcG9ydCB7c3RvcmFnZU9iamVjdFN5bWJvbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2Uvc3RvcmFnZS5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbmxldCBodG1sMSA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDFcIj5cbiAgICA8bW9uc3Rlci1mb3JtIGlkPVwiZm9ybTFcIj48L21vbnN0ZXItZm9ybT5cbiAgICA8L2Rpdj5cbmA7XG5cbmxldCBodG1sMiA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDJcIj5cbiAgICAgICAgPG1vbnN0ZXItZm9ybSBpZD1cImZvcm0yXCJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItZGF0YXNvdXJjZT1cImxvY2Fsc3RvcmFnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWRhdGFzb3VyY2UtYXJndW1lbnRzPSdcInRlc3Qta2V5XCInPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cImNvbnRyb2wxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiY29udHJvbDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWJpbmQ9XCJwYXRoOmFcIj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cImNvbnRyb2wyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWJpbmQ9XCJwYXRoOmJcIj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwvbW9uc3Rlci1mb3JtPlxuICAgIDwvZGl2PlxuYDtcblxuZGVzY3JpYmUoJ0Zvcm0nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBsZXQgZm9ybTtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgIGltcG9ydChcImVsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsXCIpLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgICAgIFxuICAgICAgICBpbml0SlNET00oKS50aGVuKCh4KSA9PiB7XG4gICAgICAgICAgICBpbXBvcnQoXCIuLi8uLi8uLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL2Zvcm0ubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBmb3JtID0gbVsnRm9ybSddO1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKVxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCd0ZXN0LWtleScpXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdIVE1MLVRlbXBsYXRlcycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUgaHRtbDEnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndGVzdC1rZXknLCAne30nKVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgY29udGFpbnMgbW9uc3Rlci1mb3JtJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKSkuY29udGFpbi5odG1sKCc8bW9uc3Rlci1mb3JtJyk7XG4gICAgICAgICAgICB9KTtcblxuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgZnJvbSB0ZW1wbGF0ZSBodG1sMicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgYmVmb3JlRWFjaCgoZG9uZSkgPT4ge1xuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd0ZXN0LWtleScsIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgYTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgYjogNyxcbiAgICAgICAgICAgICAgICAgICAgYzogWzEsIDUsIDZdLFxuICAgICAgICAgICAgICAgICAgICBkOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwyO1xuICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgY29udGFpbnMgbW9uc3Rlci1mb3JtJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDI7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QyJykpLmNvbnRhaW4uaHRtbCgnPG1vbnN0ZXItZm9ybScpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgY2xpY2snLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDI7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QyJykpLmNvbnRhaW4uaHRtbCgnPG1vbnN0ZXItZm9ybScpO1xuXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmb3JtMicpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWZvcm0uc2hhZG93Um9vdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUobmV3IEVycm9yKCdubyBzaGFkb3dSb290JykpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udHJvbDEgPSBmb3JtLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcignc2xvdCcpLmFzc2lnbmVkRWxlbWVudHMoKVswXS5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2wxLmNsaWNrKCk7XG5cblxuICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgfSwgMSlcblxuICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICB9KTtcblxuXG4gICAgfSlcblxufSlcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCwgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBEYXRhc291cmNlIH0gZnJvbSBcIi4uL2RhdGFzb3VyY2UubWpzXCI7XG5cbmV4cG9ydCB7IFN0b3JhZ2UsIHN0b3JhZ2VPYmplY3RTeW1ib2wgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgc3RvcmFnZU9iamVjdFN5bWJvbCA9IFN5bWJvbC5mb3IoXG5cdFwiQHNjaHVrYWkvbW9uc3Rlci9kYXRhL2RhdGFzb3VyY2Uvc3RvcmFnZS9AQHN0b3JhZ2VPYmplY3RcIixcbik7XG5cbi8qKlxuICogVGhlIGNsYXNzIHJlcHJlc2VudHMgYSByZWNvcmQuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yMi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgVGhlIFN0b3JhZ2UgY2xhc3MgZW5jYXBzdWxhdGVzIHRoZSBhY2Nlc3MgdG8gZGF0YSBvYmplY3RzIG92ZXIgV2ViU3RvcmFnZUFQSS5cbiAqL1xuY2xhc3MgU3RvcmFnZSBleHRlbmRzIERhdGFzb3VyY2Uge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGtleSBMb2NhbFN0b3JhZ2UgS2V5XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihrZXkpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuc2V0T3B0aW9uKFwia2V5XCIsIHZhbGlkYXRlU3RyaW5nKGtleSkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9kYXRhL2RhdGFzb3VyY2Uvc3RvcmFnZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30ga2V5PXVuZGVmaW5lZCBMb2NhbFN0b3JhZ2UgS2V5XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHRrZXk6IHVuZGVmaW5lZCxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhpcyBtZXRob2QgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBkZXJpdmVkIGNsYXNzZXMuXG5cdCAqIEByZXR1cm4ge2V4dGVybmFsOlN0b3JhZ2V9XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRbc3RvcmFnZU9iamVjdFN5bWJvbF0oKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidGhpcyBtZXRob2QgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBkZXJpdmVkIGNsYXNzZXNcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBvcHRpb25zIGRvZXMgbm90IGNvbnRhaW4gYSB2YWxpZCBqc29uIGRlZmluaXRpb25cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBvYmplY3Rcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBkYXRhIGNhbm5vdCBiZSByZWFkXG5cdCAqL1xuXHRyZWFkKCkge1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdFx0Y29uc3Qgc3RvcmFnZSA9IHNlbGZbc3RvcmFnZU9iamVjdFN5bWJvbF0oKTtcblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuXHRcdFx0Y29uc3QgZGF0YSA9IEpTT04ucGFyc2Uoc3RvcmFnZS5nZXRJdGVtKHNlbGYuZ2V0T3B0aW9uKFwia2V5XCIpKSk7XG5cdFx0XHRzZWxmLnNldChkYXRhID8/IHt9KTtcblx0XHRcdHJlc29sdmUoKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtTdG9yYWdlfVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIGRhdGEgY2Fubm90IGJlIHdyaXR0ZW5cblx0ICovXG5cdHdyaXRlKCkge1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdFx0Y29uc3Qgc3RvcmFnZSA9IHNlbGZbc3RvcmFnZU9iamVjdFN5bWJvbF0oKTtcblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuXHRcdFx0Y29uc3QgZGF0YSA9IHNlbGYuZ2V0KCk7XG5cdFx0XHRpZiAoZGF0YSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHN0b3JhZ2UucmVtb3ZlSXRlbShzZWxmLmdldE9wdGlvbihcImtleVwiKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzdG9yYWdlLnNldEl0ZW0oc2VsZi5nZXRPcHRpb24oXCJrZXlcIiksIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcblx0XHRcdH1cblxuXHRcdFx0cmVzb2x2ZSgpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge1N0b3JhZ2V9XG5cdCAqL1xuXHRnZXRDbG9uZSgpIHtcblx0XHRyZXR1cm4gbmV3IFN0b3JhZ2UodGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0UmVhbFN1YmplY3QoKVtcIm9wdGlvbnNcIl0ua2V5KTtcblx0fVxufVxuIiwgImltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCAqIGFzIGNoYWkgZnJvbSAnY2hhaSc7XG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5cbmxldCBodG1sMSA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDFcIj5cbiAgICA8L2Rpdj5cbmA7XG5cbmxldCBodG1sMiA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDJcIj5cbiAgICA8bW9uc3Rlci10cmVlLXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1iaW5kPVwicGF0aDp2YWx1ZXMuY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLW9wdGlvbnM9J3tcbiAgXCJ1cmxcIjogXCJtb2NrLWRhdGEuanNvblwiLFxuICBcIm1hcHBpbmdcIjoge1xuICAgIFwidmFsdWVUZW1wbGF0ZVwiOiBcIlxcJHtmaXJzdF9uYW1lfSBcXCR7bGFzdF9uYW1lfVwiLFxuICAgIFwibGFiZWxUZW1wbGF0ZVwiOiBcImlkXCIsXG4gICAgXCJzZWxlY3RvclwiOiBcIipcIlxuICB9LFxuICAgICAgXCJ0eXBlXCI6XCJjaGVja2JveFwiXG5cbn0nPjwvbW9uc3Rlci10cmVlLXNlbGVjdD5cbiAgICA8L2Rpdj5cbmA7XG5cbmxldCBUcmVlU2VsZWN0LCBmZXRjaFJlZmVyZW5jZTtcblxuZGVzY3JpYmUoJ1RyZWVzZWxlY3QnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBpbXBvcnQoXCJlbGVtZW50LWludGVybmFscy1wb2x5ZmlsbFwiKS5jYXRjaChlID0+IGRvbmUoZSkpO1xuICAgICAgICAgICAgZmV0Y2hSZWZlcmVuY2UgPSBnbG9iYWxbJ2ZldGNoJ107XG5cbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vdHJlZS1zZWxlY3QubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBUcmVlU2VsZWN0ID0gbVsnVHJlZVNlbGVjdCddO1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKVxuXG5cbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdXaXRoIGZldGNoJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcblxuICAgICAgICAgICAgZ2xvYmFsWydmZXRjaCddID0gZnVuY3Rpb24gKHVybCwgb3B0aW9ucykge1xuXG4gICAgICAgICAgICAgICAgbGV0IGhlYWRlcnMgPSBuZXcgTWFwO1xuICAgICAgICAgICAgICAgIGhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTIsIHJlamVjdDIpID0+IHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQganNvbiA9IEpTT04ucGFyc2UoYFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImZpcnN0X25hbWVcIjogXCJBbGV4aWFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsYXN0X25hbWVcIjogXCJPdWdodHJpZ2h0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZW1haWxcIjogXCJhb3VnaHRyaWdodDBAZXhibG9nLmpwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2VuZGVyXCI6IFwiQWdlbmRlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvdW50cnlcIjogXCJtblwiICxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwYXJlbnRcIjogXCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmaXJzdF9uYW1lXCI6IFwiQmV0aFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxhc3RfbmFtZVwiOiBcIkJvZGRpbmd0b25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbWFpbFwiOiBcImJib2RkaW5ndG9uMUBzdGF0Y291bnRlci5jb21cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJnZW5kZXJcIjogXCJOb24tYmluYXJ5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY291bnRyeVwiOiBcInN5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGFyZW50XCI6IFwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZmlyc3RfbmFtZVwiOiBcIlNoZWxsaVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxhc3RfbmFtZVwiOiBcIkEnQmFycm93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZW1haWxcIjogXCJzYWJhcnJvdzJAZ29vZ2xlLmNvLnVrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2VuZGVyXCI6IFwiUG9seWdlbmRlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvdW50cnlcIjogXCJub1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInBhcmVudFwiOiBcIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdYCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZTIoSlNPTi5zdHJpbmdpZnkoanNvbikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgICAgIGdsb2JhbFsnZmV0Y2gnXSA9IGZldGNoUmVmZXJlbmNlO1xuICAgICAgICB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgZnJvbSB0ZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwyO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgICAgICAgICBnbG9iYWxbJ2ZldGNoJ10gPSBmZXRjaFJlZmVyZW5jZTtcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgZnJvbSB0ZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdCgnc2hvdWxkIGNvbnRhaW5zIG1vbnN0ZXItdHJlZS1zZWxlY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDInKSkuY29udGFpbi5odG1sKCc8bW9uc3Rlci10cmVlLXNlbGVjdCcpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIHNlbGVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10cmVlLXNlbGVjdCcpKS5pcy5pbnN0YW5jZW9mKFRyZWVTZWxlY3QpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgaGF2ZSBvcHRpb25zJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRyZWVzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRyZWUtc2VsZWN0Jyk7XG4gICAgICAgICAgICAgICAgdHJlZXNlbGVjdC5zZXRPcHRpb24oJ3VybCcsICdodHRwczovL2V4YW1wbGUuY29tJylcblxuICAgICAgICAgICAgICAgIHRyZWVzZWxlY3Quc2V0T3B0aW9uKCdtYXBwaW5nLnNlbGVjdG9yJywgJyonKTtcbiAgICAgICAgICAgICAgICB0cmVlc2VsZWN0LnNldE9wdGlvbignbWFwcGluZy5sYWJlbFRlbXBsYXRlJywgJyR7bGFzdF9uYW1lfScpO1xuICAgICAgICAgICAgICAgIHRyZWVzZWxlY3Quc2V0T3B0aW9uKCdtYXBwaW5nLnZhbHVlVGVtcGxhdGUnLCAnJHtpZCB8IHRvc3RyaW5nIH0nKTtcblxuICAgICAgICAgICAgICAgIHRyZWVzZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcignbW9uc3Rlci1vcHRpb25zLXNldCcsIChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0cmVlc2VsZWN0LnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl0nKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDMgb3B0aW9ucyAoc2VlIGZldGNoIGFib3ZlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25zLmxlbmd0aCkuaXMuZXF1YWwoMyk7XG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbkh0bWwgPSB0cmVlc2VsZWN0LnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignW2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbnNdJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG9wdGlvbkh0bWwpLmNvbnRhaW4uaHRtbCgnZGF0YS1tb25zdGVyLWluc2VydC1yZWZlcmVuY2U9XCJvcHRpb25zLTBcIicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25IdG1sKS5jb250YWluLmh0bWwoJ2RhdGEtbW9uc3Rlci1pbnNlcnQtcmVmZXJlbmNlPVwib3B0aW9ucy0xXCInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9uSHRtbCkuY29udGFpbi5odG1sKCdkYXRhLW1vbnN0ZXItaW5zZXJ0LXJlZmVyZW5jZT1cIm9wdGlvbnMtMlwiJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG9wdGlvbkh0bWwpLmNvbnRhaW4ubm90Lmh0bWwoJ2RhdGEtbW9uc3Rlci1pbnNlcnQtcmVmZXJlbmNlPVwib3B0aW9ucy0zXCInKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcblxuICAgICAgICAgICAgICAgICAgICB9LCAxMDApXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBtb2Nrcy5hcHBlbmRDaGlsZCh0cmVlc2VsZWN0KTtcblxuICAgICAgICAgICAgXG5cblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIGhhdmUgbm8gb3B0aW9ucycsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10cmVlLXNlbGVjdCcpO1xuICAgICAgICAgICAgbW9ja3MuYXBwZW5kQ2hpbGQoc2VsZWN0KTtcblxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHNlbGVjdC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25zXScpO1xuXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25zKS5pcy5pbnN0YW5jZW9mKEhUTUxEaXZFbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG9wdGlvbnMuaGFzQ2hpbGROb2RlcygpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0sIDApXG5cblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pOyIsICJpbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5cbmltcG9ydCAqIGFzIGNoYWkgZnJvbSAnY2hhaSc7XG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5cbmxldCBodG1sMSA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDFcIj5cbiAgICA8L2Rpdj5cbmA7XG5cbmxldCBodG1sMiA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDJcIj5cbiAgICA8bW9uc3Rlci1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYmluZD1cInBhdGg6dmFsdWVzLmNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1vcHRpb25zPSd7XG4gIFwidXJsXCI6IFwibW9jay1kYXRhLmpzb25cIixcbiAgXCJtYXBwaW5nXCI6IHtcbiAgICBcInZhbHVlUGF0aFwiOiBcIlxcJHtmaXJzdF9uYW1lfSBcXCR7bGFzdF9uYW1lfVwiLFxuICAgIFwia2V5UGF0aFwiOiBcImlkXCJcbiAgfSxcbiAgICAgIFwidHlwZVwiOlwiY2hlY2tib3hcIlxuXG59Jz48L21vbnN0ZXItYnV0dG9uPlxuICAgIDwvZGl2PlxuYDtcblxubGV0IEJ1dHRvbjtcblxuZGVzY3JpYmUoJ0J1dHRvbicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgaW1wb3J0KFwiZWxlbWVudC1pbnRlcm5hbHMtcG9seWZpbGxcIikuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9idXR0b24ubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBCdXR0b24gPSBtWydCdXR0b24nXTtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSlcblxuXG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnbmV3IEJ1dHRvbicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMjtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgZnJvbSB0ZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdCgnc2hvdWxkIGNvbnRhaW5zIG1vbnN0ZXItYnV0dG9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QyJykpLmNvbnRhaW4uaHRtbCgnPG1vbnN0ZXItYnV0dG9uJyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdzaG91bGQgaW5zdGFuY2Ugb2YgYnV0dG9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWJ1dHRvbicpKS5pcy5pbnN0YW5jZW9mKEJ1dHRvbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIGhhdmUgbm8gb3B0aW9ucycsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1idXR0b24nKTtcbiAgICAgICAgICAgIG1vY2tzLmFwcGVuZENoaWxkKGJ1dHRvbik7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zID0gYnV0dG9uLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignYnV0dG9uJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG9wdGlvbnMpLmlzLmluc3RhbmNlb2YoSFRNTEJ1dHRvbkVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9ucy5oYXNDaGlsZE5vZGVzKCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9LCAxMDApXG5cblxuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG59KTsiLCAiaW1wb3J0IHsgZ2V0R2xvYmFsIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgKiBhcyBjaGFpIGZyb20gJ2NoYWknO1xuaW1wb3J0IHsgY2hhaURvbSB9IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHsgaW5pdEpTRE9NIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcbmNoYWkudXNlKGNoYWlEb20pO1xuXG5jb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcblxubGV0IGh0bWwxID0gYFxuICAgIDxkaXYgaWQ9XCJ0ZXN0MVwiPlxuICAgIDwvZGl2PlxuYDtcblxubGV0IGh0bWwyID0gYFxuICAgIDxkaXYgaWQ9XCJ0ZXN0MlwiPlxuICAgICAgICAgPG1vbnN0ZXItdG9nZ2xlLXN3aXRjaD48L21vbnN0ZXItdG9nZ2xlLXN3aXRjaD5cbiAgICA8L2Rpdj5cbmA7XG5cbmxldCBUb2dnbGVTd2l0Y2g7XG5cbmRlc2NyaWJlKCdUb2dnbGVTd2l0Y2gnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgIGltcG9ydChcImVsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsXCIpLmNhdGNoKGUgPT4gZG9uZShlKSk7XG5cbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vdG9nZ2xlLXN3aXRjaC5tanNcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIFRvZ2dsZVN3aXRjaCA9IG1bJ1RvZ2dsZVN3aXRjaCddO1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKVxuXG5cbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCduZXcgVG9nZ2xlU3dpdGNoJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgZnJvbSB0ZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwyO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcblxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgZGVzY3JpYmUoJ2NyZWF0ZSBmcm9tIHRlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGl0KCdzaG91bGQgY29udGFpbnMgbW9uc3Rlci10b2dnbGUtc3dpdGNoJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QyJykpLmNvbnRhaW4uaHRtbCgnPG1vbnN0ZXItdG9nZ2xlLXN3aXRjaCcpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIG1vbnN0ZXItdG9nZ2xlLXN3aXRjaCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10b2dnbGUtc3dpdGNoJykpLmlzLmluc3RhbmNlb2YoVG9nZ2xlU3dpdGNoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3RvZ2dsZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuICAgICAgICB9KTtcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCd0b2dnbGUgdG8gb24nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IHRvZ2dsZVN3aXRjaCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItdG9nZ2xlLXN3aXRjaCcpO1xuICAgICAgICAgICAgdG9nZ2xlU3dpdGNoLnNldE9wdGlvbignYWN0aW9ucy5vbicsICd0cnVlJyk7XG4gICAgICAgICAgICB0b2dnbGVTd2l0Y2guc2V0T3B0aW9uKCdhY3Rpb25zLm9mZicsICdmYWxzZScpO1xuXG4gICAgICAgICAgICBleHBlY3QodG9nZ2xlU3dpdGNoLnZhbHVlKS5pcy5lcXVhbCgnb2ZmJyk7XG4gICAgICAgICAgICBleHBlY3QodG9nZ2xlU3dpdGNoLnN0YXRlKS5pcy5lcXVhbCgnb2ZmJyk7XG5cbiAgICAgICAgICAgIHRvZ2dsZVN3aXRjaC50b2dnbGUoKTtcblxuICAgICAgICAgICAgZXhwZWN0KHRvZ2dsZVN3aXRjaC52YWx1ZSkuaXMuZXF1YWwoJ29uJyk7XG4gICAgICAgICAgICBleHBlY3QodG9nZ2xlU3dpdGNoLnN0YXRlKS5pcy5lcXVhbCgnb24nKTtcblxuICAgICAgICAgICAgdG9nZ2xlU3dpdGNoLnRvZ2dsZSgpO1xuXG4gICAgICAgICAgICBleHBlY3QodG9nZ2xlU3dpdGNoLnZhbHVlKS5pcy5lcXVhbCgnb2ZmJyk7XG4gICAgICAgICAgICBleHBlY3QodG9nZ2xlU3dpdGNoLnN0YXRlKS5pcy5lcXVhbCgnb2ZmJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCd0b2dnbGUgb24gdG8gb2ZmJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBjb25zdCB0b2dnbGVTd2l0Y2ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRvZ2dsZS1zd2l0Y2gnKTtcblxuICAgICAgICAgICAgdG9nZ2xlU3dpdGNoLnRvZ2dsZU9uKCk7XG5cbiAgICAgICAgICAgIGV4cGVjdCh0b2dnbGVTd2l0Y2gudmFsdWUpLmlzLmVxdWFsKCdvbicpO1xuICAgICAgICAgICAgZXhwZWN0KHRvZ2dsZVN3aXRjaC5zdGF0ZSkuaXMuZXF1YWwoJ29uJyk7XG5cbiAgICAgICAgICAgIHRvZ2dsZVN3aXRjaC50b2dnbGVPZmYoKTtcblxuICAgICAgICAgICAgZXhwZWN0KHRvZ2dsZVN3aXRjaC52YWx1ZSkuaXMuZXF1YWwoJ29mZicpO1xuICAgICAgICAgICAgZXhwZWN0KHRvZ2dsZVN3aXRjaC5zdGF0ZSkuaXMuZXF1YWwoJ29mZicpO1xuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdkZXNjcmliZSBjc3MnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuICAgICAgICB9KTtcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdjc3MgdG9nZ2xlJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBuZXcgQ29udHJvbFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBjb25zdCB0b2dnbGVTd2l0Y2ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRvZ2dsZS1zd2l0Y2gnKTtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBzZXQgaW5pdCB2YWx1ZSB0byBvblxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB0b2dnbGVTd2l0Y2gudmFsdWUgPSBcIm9uXCI7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogaW5zZXJ0IERPTVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKS5hcHBlbmRDaGlsZCh0b2dnbGVTd2l0Y2gpO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIGV4cGVjdCB0aGF0IGNsYXNzZXMub24gaXMgc2V0IHRvIEVsZW1lbnQgU3dpdGNoXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGxldCBoYXNDbGFzc0EgPSB0b2dnbGVTd2l0Y2guc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1tb25zdGVyLXJvbGU9XCJzd2l0Y2hcIl0nKVswXS5jbGFzc0xpc3QuY29udGFpbnModG9nZ2xlU3dpdGNoLmdldE9wdGlvbignY2xhc3Nlcy5vbicpKTtcbiAgICAgICAgICAgIGV4cGVjdChoYXNDbGFzc0EpLmlzLnRydWU7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgKiBzd2l0Y2ggb2ZmXG4gICAgICAgICAgICAqL1xuICAgICAgICAgICAgdG9nZ2xlU3dpdGNoLnZhbHVlID0gXCJvZmZcIjtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBVcGRhdGVyIHByb3plc3MgcnVucyBpbiBzZXRUaW1lb3V0XG4gICAgICAgICAgICAgKiBzZWxmW2ludGVybmFsU3ltYm9sXS5hdHRhY2hPYnNlcnZlcigpO1xuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAqIGV4cGVjdCB0aGF0IGNsYXNzZXMub24gaXMgcmVtb3ZlZCBmcm9tIEVsZW1lbnQgU3dpdGNoXG4gICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBsZXQgaGFzQ2xhc3NCICA9IHRvZ2dsZVN3aXRjaC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLW1vbnN0ZXItcm9sZT1cInN3aXRjaFwiXScpWzBdLmNsYXNzTGlzdC5jb250YWlucyh0b2dnbGVTd2l0Y2guZ2V0T3B0aW9uKCdjbGFzc2VzLm9uJykpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChoYXNDbGFzc0IpLmlzLmZhbHNlO1xuXG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgKiBleHBlY3QgdGhhdCBjbGFzc2VzLm9mZiBpcyBzZXQgdG8gRWxlbWVudCBTd2l0Y2hcbiAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIGxldCBoYXNDbGFzc0MgID0gdG9nZ2xlU3dpdGNoLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtbW9uc3Rlci1yb2xlPVwic3dpdGNoXCJdJylbMF0uY2xhc3NMaXN0LmNvbnRhaW5zKHRvZ2dsZVN3aXRjaC5nZXRPcHRpb24oJ2NsYXNzZXMub2ZmJykpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChoYXNDbGFzc0MpLmlzLnRydWU7ICAgIFxuXG5cbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9LCAwKTtcblxuICAgICAgICB9KVxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZGVzY3JpYmUgdmFsdWUnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuICAgICAgICB9KTtcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuXG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3RoZSBkZWZhdWx0IHZhbHVlIGlzIG9mZicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBuZXcgQ29udHJvbFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBsZXQgdG9nZ2xlU3dpdGNoID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10b2dnbGUtc3dpdGNoJyk7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogdGhlIHN3aXRjaCBpcyBvZmYgYW5kIHByb3ZpZGVzIHRoZSB2YWx1ZSBmb3Igb2ZmXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGV4cGVjdCh0b2dnbGVTd2l0Y2gudmFsdWUpLmlzLmVxdWFsKCdvZmYnKTtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiB0aGUgc3dpdGNoIGlzIG9mZlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBleHBlY3QodG9nZ2xlU3dpdGNoLnN0YXRlKS5pcy5lcXVhbCgnb2ZmJyk7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ2luY29ycmVjdCB2YWx1ZXMgYXJlIG5vdCBhY2NlcHRlZCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0IHRvZ2dsZVN3aXRjaCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItdG9nZ2xlLXN3aXRjaCcpO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIGRlZmluZSB0aGUgdmFsdWVzIGZvciBvbiBhbmQgb2ZmXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRvZ2dsZVN3aXRjaC5zZXRPcHRpb24oJ3ZhbHVlcy5vbicsICd0cnVlJyk7XG4gICAgICAgICAgICB0b2dnbGVTd2l0Y2guc2V0T3B0aW9uKCd2YWx1ZXMub2ZmJywgJ2ZhbHNlJyk7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVGhpcyB2YWx1ZSBpcyBub3QgXCJ0cnVlXCIgYW5kIG5vdCBcImZhbHNlXCJcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdG9nZ2xlU3dpdGNoLnZhbHVlID0gXCJ0ZXN0XCI7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogdGhlIHN3aXRjaCBpcyBvZmYgYW5kIHByb3ZpZGVzIHRoZSB2YWx1ZSBmb3Igb2ZmXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGV4cGVjdCh0b2dnbGVTd2l0Y2gudmFsdWUpLmlzLmVxdWFsKCdmYWxzZScpO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIHRoZSBzd2l0Y2ggaXMgb2ZmXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGV4cGVjdCh0b2dnbGVTd2l0Y2guc3RhdGUpLmlzLmVxdWFsKCdvZmYnKTtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAqIGRpc2FibGVkIGF0dHJpYnV0ZSBpcyBvbmx5IHNldCB3aGVuIHRoZSBlbGVtZW50IGhhcyBiZWVuIG1vdW50ZWQgaW4gdGhlIERPTVxuICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGV4cGVjdCh0b2dnbGVTd2l0Y2guaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpKS5pcy5mYWxzZTtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBpbnNlcnQgRE9NXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpLmFwcGVuZENoaWxkKHRvZ2dsZVN3aXRjaCk7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgKiBub3cgdGhlIGVsZW1lbnQgaXMgZGlzYWJsZWRcbiAgICAgICAgICAgICovXG4gICAgICAgICAgICBleHBlY3QodG9nZ2xlU3dpdGNoLmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSkuaXMudHJ1ZTtcblxuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdjb3JyZWN0IHZhbHVlcyBhcmUgYWNjZXB0ZWQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IHRvZ2dsZVN3aXRjaCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItdG9nZ2xlLXN3aXRjaCcpO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIGRlZmluZSB0aGUgdmFsdWVzIGZvciBvbiBhbmQgb2ZmXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRvZ2dsZVN3aXRjaC5zZXRPcHRpb24oJ3ZhbHVlcy5vbicsICd0cnVlJyk7XG4gICAgICAgICAgICB0b2dnbGVTd2l0Y2guc2V0T3B0aW9uKCd2YWx1ZXMub2ZmJywgJ2ZhbHNlJyk7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVGhpcyB2YWx1ZSBpcyBjb3JyZWN0XG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRvZ2dsZVN3aXRjaC52YWx1ZSA9IFwidHJ1ZVwiO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIHRoZSBzd2l0Y2ggaXMgb24gYW5kIHByb3ZpZGVzIHRoZSB2YWx1ZSBmb3Igb25cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZXhwZWN0KHRvZ2dsZVN3aXRjaC52YWx1ZSkuaXMuZXF1YWwoJ3RydWUnKTtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiB0aGUgc3dpdGNoIGlzIG9uXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGV4cGVjdCh0b2dnbGVTd2l0Y2guc3RhdGUpLmlzLmVxdWFsKCdvbicpO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICogaW5zZXJ0IERPTVxuICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpLmFwcGVuZENoaWxkKHRvZ2dsZVN3aXRjaCk7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogZGlzYWJsZWQgYXR0cmlidXRlIGlzIG5vdCBzZXRcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZXhwZWN0KHRvZ2dsZVN3aXRjaC5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykpLmlzLmZhbHNlO1xuXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxuXG59KTsiLCAiaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0ICogYXMgY2hhaSBmcm9tICdjaGFpJztcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge3NldHVwSW50ZXJzZWN0aW9uT2JzZXJ2ZXJNb2NrfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9pbnRlcnNlY3Rpb24tbW9jay5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xubGV0IG1vY2tpbnRlcnNlY3Rpb25vYnNlcnZlcjtcblxubGV0IGh0bWwxID0gYFxuICAgIDxkaXYgaWQ9XCJ0ZXN0MVwiPlxuICAgIDwvZGl2PlxuYDtcblxuZGVzY3JpYmUoJ1RlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgLy8ganNkb20tdGVzdGluZy1tb2NrcyBuZWVkIGplc3RcbiAgICBsZXQgVGVtcGxhdGUsIHZpZXdwb3J0LCBtb2NrVmlld3BvcnQ7XG5cbiAgICBhZnRlcihmdW5jdGlvbiAoKSB7XG4gICAgICAgIG1vY2tpbnRlcnNlY3Rpb25vYnNlcnZlci5yZXN0b3JlKCk7XG4gICAgfSlcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgaW1wb3J0KFwiZWxlbWVudC1pbnRlcm5hbHMtcG9seWZpbGxcIikuY2F0Y2goZSA9PiBkb25lKGUpKTtcbiAgICAgICAgICAgIG1vY2tpbnRlcnNlY3Rpb25vYnNlcnZlciA9IHNldHVwSW50ZXJzZWN0aW9uT2JzZXJ2ZXJNb2NrKCk7XG5cbiAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS90ZW1wbGF0ZS5tanNcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIFRlbXBsYXRlID0gbVsnVGVtcGxhdGUnXTtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSlcblxuXG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnbmV3IFRlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcblxuXG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+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+IDApIHx8XG5cdFx0XHRcdHBhcnNlSW50KGFbaV0pID4gcGFyc2VJbnQoYltpXSlcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gMTtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdChiW2ldICYmICFhW2ldICYmIHBhcnNlSW50KGJbaV0pID4gMCkgfHxcblx0XHRcdFx0cGFyc2VJbnQoYVtpXSkgPCBwYXJzZUludChiW2ldKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gMDtcblx0fVxufVxuXG5sZXQgbW9uc3RlclZlcnNpb247XG5cbi8qKlxuICogVmVyc2lvbiBvZiBtb25zdGVyXG4gKlxuICogQHJldHVybiB7VmVyc2lvbn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQGF1dGhvciBzY2h1a2FpIEdtYkhcbiAqL1xuZnVuY3Rpb24gZ2V0TW9uc3RlclZlcnNpb24oKSB7XG5cdGlmIChtb25zdGVyVmVyc2lvbiBpbnN0YW5jZW9mIFZlcnNpb24pIHtcblx0XHRyZXR1cm4gbW9uc3RlclZlcnNpb247XG5cdH1cblxuXHQvKiogZG9uJ3QgdG91Y2gsIHJlcGxhY2VkIGJ5IG1ha2Ugd2l0aCBwYWNrYWdlLmpzb24gdmVyc2lvbiAqL1xuXHRtb25zdGVyVmVyc2lvbiA9IG5ldyBWZXJzaW9uKFwiMy44OS4wXCIpO1xuXG5cdHJldHVybiBtb25zdGVyVmVyc2lvbjtcbn1cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtWZXJzaW9uLCBnZXRNb25zdGVyVmVyc2lvbn0gZnJvbSBcIi4uLy4uL3NvdXJjZS90eXBlcy92ZXJzaW9uLm1qc1wiO1xuXG5kZXNjcmliZSgnTW9uc3RlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCcuZ2V0TW9uc3RlclZlcnNpb24oKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IG1vbnN0ZXJWZXJzaW9uXG5cbiAgICAgICAgLyoqIGRvblx1MDBCNHQgdG91Y2gsIHJlcGxhY2VkIGJ5IG1ha2Ugd2l0aCBwYWNrYWdlLmpzb24gdmVyc2lvbiAqL1xuICAgICAgICBtb25zdGVyVmVyc2lvbiA9IG5ldyBWZXJzaW9uKFwiMy44OS4wXCIpXG5cbiAgICAgICAgbGV0IG0gPSBnZXRNb25zdGVyVmVyc2lvbigpO1xuXG4gICAgICAgIGl0KCdzaG91bGQgJyArIG1vbnN0ZXJWZXJzaW9uICsgJyBpcyAnICsgbSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG0uY29tcGFyZVRvKG1vbnN0ZXJWZXJzaW9uKSkuaXMuZXF1YWwoMCk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbn0pO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGdldFdpbmRvdyB9IGZyb20gXCIuL3V0aWwubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgY29udmVydFRvUGl4ZWxzLCBnZXREZXZpY2VEUEkgfTtcblxuLyoqXG4gKiBTdG9yZXMgdGhlIERQSSBvZiB0aGUgZGV2aWNlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKiBAc2luY2UgMy4zNC4wXG4gKiBAdHlwZSB7bnVtYmVyfGZ1bmN0aW9ufVxuICovXG5sZXQgQ1VSUkVOVF9ERVZJQ0VfRFBJID0gZnVuY3Rpb24gKCkge1xuXHRsZXQgaSA9IDA7XG5cdGZvciAoaSA9IDU2OyBpIDwgMjAwMDsgaSsrKSB7XG5cdFx0aWYgKGdldFdpbmRvdygpLm1hdGNoTWVkaWEoYChtYXgtcmVzb2x1dGlvbjogJHtpfWRwaSlgKS5tYXRjaGVzID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm4gaTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIERQSSBvZiB0aGUgZGV2aWNlLlxuICpcbiAqIEBzaW5jZSAzLjM0LjBcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZnVuY3Rpb24gZ2V0RGV2aWNlRFBJKCkge1xuXHQvLyBvbmx5IGNhbGwgdGhlIGZ1bmN0aW9uIG9uY2Vcblx0aWYgKHR5cGVvZiBDVVJSRU5UX0RFVklDRV9EUEkgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdENVUlJFTlRfREVWSUNFX0RQSSA9IENVUlJFTlRfREVWSUNFX0RQSSgpO1xuXHR9XG5cblx0cmV0dXJuIGdldFdpbmRvdygpLmRldmljZVBpeGVsUmF0aW8gKiBDVVJSRU5UX0RFVklDRV9EUEk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBDU1MgdmFsdWUgdG8gcGl4ZWxzLlxuICpcbiAqIEFzIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIGNvbnZlcnRUb1BpeGVscygnMWVtJykgLy8gcmV0dXJucyB0aGUgY3VycmVudCBmb250IHNpemUgaW4gcGl4ZWxzXG4gKiBjb252ZXJ0VG9QaXhlbHMoJzFyZW0nKSAvLyByZXR1cm5zIHRoZSBjdXJyZW50IHJvb3QgZm9udCBzaXplIGluIHBpeGVsc1xuICogY29udmVydFRvUGl4ZWxzKCcxcHgnKSAvLyByZXR1cm5zIDFcbiAqIGNvbnZlcnRUb1BpeGVscygnMTAwJScpIC8vIHJldHVybnMgdGhlIGN1cnJlbnQgd2lkdGggb2YgdGhlIHBhcmVudCBlbGVtZW50IGluIHBpeGVsc1xuICogYGBgXG4gKlxuICogRm9sbG93aW5nIHVuaXRzIGFyZSBzdXBwb3J0ZWQ6XG4gKiAtIHB4XG4gKiAtIGVtXG4gKiAtIHJlbVxuICogLSAlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBbcGFyZW50RWxlbWVudD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBbZm9udFNpemVFbGVtZW50PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudF1cbiAqIEByZXR1cm4ge251bWJlcn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDMuMzQuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEB0aHJvd3Mge0Vycm9yfSBVbnN1cHBvcnRlZCB1bml0XG4gKiBAdGhyb3dzIHtFcnJvcn0gSW52YWxpZCB2YWx1ZSBmb3JtYXRcbiAqL1xuXG5mdW5jdGlvbiBjb252ZXJ0VG9QaXhlbHMoXG5cdHZhbHVlLFxuXHRwYXJlbnRFbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LFxuXHRmb250U2l6ZUVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsXG4pIHtcblx0dmFsaWRhdGVTdHJpbmcodmFsdWUpO1xuXG5cdGNvbnN0IHJlZ2V4ID0gL14oLT9bXFxkLl0rKSguKikkLztcblx0Y29uc3QgbWF0Y2hSZXN1bHQgPSB2YWx1ZS5tYXRjaChyZWdleCk7XG5cblx0aWYgKCFtYXRjaFJlc3VsdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB2YWx1ZSBmb3JtYXQ6ICR7dmFsdWV9YCk7XG5cdH1cblxuXHRjb25zdCBbLCBudW0sIHVuaXRdID0gbWF0Y2hSZXN1bHQ7XG5cdGNvbnN0IG51bWJlciA9IHBhcnNlRmxvYXQobnVtKTtcblx0Y29uc3QgZHBpID0gZ2V0RGV2aWNlRFBJKCk7XG5cblx0aWYgKHVuaXQgPT09IFwicHhcIikge1xuXHRcdHJldHVybiBudW1iZXI7XG5cdH0gZWxzZSBpZiAodW5pdCA9PT0gXCJlbVwiKSB7XG5cdFx0Y29uc3QgZm9udFNpemUgPSBwYXJzZUZsb2F0KFxuXHRcdFx0d2luZG93LmdldENvbXB1dGVkU3R5bGUoZm9udFNpemVFbGVtZW50KS5mb250U2l6ZSxcblx0XHQpO1xuXHRcdHJldHVybiBudW1iZXIgKiBmb250U2l6ZTtcblx0fSBlbHNlIGlmICh1bml0ID09PSBcInJlbVwiKSB7XG5cdFx0Y29uc3Qgcm9vdEZvbnRTaXplID0gcGFyc2VGbG9hdChcblx0XHRcdHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHBhcmVudEVsZW1lbnQpLmZvbnRTaXplLFxuXHRcdCk7XG5cdFx0cmV0dXJuIG51bWJlciAqIHJvb3RGb250U2l6ZTtcblx0fSBlbHNlIGlmICh1bml0ID09PSBcIiVcIikge1xuXHRcdGNvbnN0IHBhcmVudFdpZHRoID0gcGFyc2VGbG9hdChcblx0XHRcdHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHBhcmVudEVsZW1lbnQpLndpZHRoLFxuXHRcdCk7XG5cdFx0cmV0dXJuIChudW1iZXIgKiBwYXJlbnRXaWR0aCkgLyAxMDA7XG5cdH0gZWxzZSBpZiAodW5pdCA9PT0gXCJpblwiKSB7XG5cdFx0cmV0dXJuIG51bWJlciAqIGRwaTtcblx0fSBlbHNlIGlmICh1bml0ID09PSBcImNtXCIpIHtcblx0XHRyZXR1cm4gKG51bWJlciAqIGRwaSkgLyAyLjU0O1xuXHR9IGVsc2UgaWYgKHVuaXQgPT09IFwibW1cIikge1xuXHRcdHJldHVybiAobnVtYmVyICogZHBpKSAvIDI1LjQ7XG5cdH0gZWxzZSBpZiAodW5pdCA9PT0gXCJwdFwiKSB7XG5cdFx0cmV0dXJuIChudW1iZXIgKiBkcGkpIC8gNzI7XG5cdH0gZWxzZSBpZiAodW5pdCA9PT0gXCJwY1wiKSB7XG5cdFx0cmV0dXJuIChudW1iZXIgKiBkcGkpIC8gNjtcblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHVuaXQ6ICR7dW5pdH1gKTtcblx0fVxufVxuIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tICdjaGFpJztcbmltcG9ydCB7Y29udmVydFRvUGl4ZWxzLCBnZXREZXZpY2VEUEl9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZG9tL2RpbWVuc2lvbi5tanNcIjtcbmltcG9ydCB7Z2V0V2luZG93fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS91dGlsLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET00sIGlzQnJvd3NlciwgSlNET01FeHBvcnQgYXMgSlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHtkZXRlY3RSdW50aW1lRW52aXJvbm1lbnR9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdXRpbC9ydW50aW1lLm1qc1wiO1xuXG5cbmZ1bmN0aW9uIGdldE1vY2tXaW5kb3coZHBpKSB7XG5cbiAgICBpZihkZXRlY3RSdW50aW1lRW52aXJvbm1lbnQoKSA9PT0gJ2Jyb3dzZXInKSB7XG4gICAgICAgIHJldHVybiBnZXRXaW5kb3coKTtcbiAgICB9XG4gICAgXG4gICAgXG4gICAgY29uc3QgZG9tID0gbmV3IEpTRE9NKCcnLCB7XG4gICAgICAgIHByZXRlbmRUb0JlVmlzdWFsOiB0cnVlLFxuICAgICAgICByZXNvdXJjZXM6ICd1c2FibGUnLFxuICAgIH0pO1xuXG4gICAgZG9tLndpbmRvdy5tYXRjaE1lZGlhID0gKHF1ZXJ5KSA9PiB7XG4gICAgICAgIGNvbnN0IGRwaVJlZ2V4ID0gL1xcKG1heC1yZXNvbHV0aW9uOiAoXFxkKylkcGlcXCkvO1xuICAgICAgICBjb25zdCBtYXRjaCA9IHF1ZXJ5Lm1hdGNoKGRwaVJlZ2V4KTtcblxuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgIGNvbnN0IG1heERwaSA9IHBhcnNlSW50KG1hdGNoWzFdLCAxMCk7XG4gICAgICAgICAgICByZXR1cm4ge21hdGNoZXM6IGRwaSA8PSBtYXhEcGl9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHttYXRjaGVzOiBmYWxzZX07XG4gICAgfTtcblxuICAgIHJldHVybiBkb20ud2luZG93O1xufVxuXG5kZXNjcmliZSgnZGltZW5zaW9uJywgKCkgPT4ge1xuICAgIGxldCBjdXJyZW50RW52aXJvbm1lbnQ7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAvL2NoYWlEb20oZ2V0RG9jdW1lbnQoKSk7XG4gICAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBiZWZvcmVFYWNoKCgpID0+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+IGRvbmUoZSkpO1xuICAgICAgICB9KTtcblxuXG4gICAgfSlcblxuXG59KSIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBpc0FycmF5LCBpc0Z1bmN0aW9uLCBpc09iamVjdCB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IERhdGFzb3VyY2UgfSBmcm9tIFwiLi4vZGF0YXNvdXJjZS5tanNcIjtcbmltcG9ydCB7IGRpZmYgfSBmcm9tIFwiLi4vZGlmZi5tanNcIjtcbmltcG9ydCB7IFBhdGhmaW5kZXIgfSBmcm9tIFwiLi4vcGF0aGZpbmRlci5tanNcIjtcbmltcG9ydCB7IFBpcGUgfSBmcm9tIFwiLi4vcGlwZS5tanNcIjtcblxuZXhwb3J0IHsgU2VydmVyIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHNlcnZlclZlcnNpb25TeW1ib2wgPSBTeW1ib2woXCJzZXJ2ZXJWZXJzaW9uXCIpO1xuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIGFsbCBzZXJ2ZXIgZGF0YSBzb3VyY2VzXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMy40LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBUaGUgU2VydmVyIGNsYXNzIGVuY2Fwc3VsYXRlcyB0aGUgYWNjZXNzIHRvIGEgc2VydmVyIGRhdGFzb3VyY2VcbiAqL1xuY2xhc3MgU2VydmVyIGV4dGVuZHMgRGF0YXNvdXJjZSB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9kYXRhL2RhdGFzb3VyY2Uvc2VydmVyXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgcHJlcGFyZXMgdGhlIGRhdGEgdGhhdCBjb21lcyBmcm9tIHRoZSBzZXJ2ZXIuXG5cdCAqIFNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge09iamVjdH0gcGF5bG9hZFxuXHQgKiBAcmV0dXJuIHtPYmplY3R9XG5cdCAqL1xuXHR0cmFuc2Zvcm1TZXJ2ZXJQYXlsb2FkKHBheWxvYWQpIHtcblx0XHRwYXlsb2FkID0gZG9UcmFuc2Zvcm0uY2FsbCh0aGlzLCBcInJlYWRcIiwgcGF5bG9hZCk7XG5cdFx0dGhpc1tzZXJ2ZXJWZXJzaW9uU3ltYm9sXSA9IHBheWxvYWQ7XG5cblx0XHRjb25zdCBkYXRhUGF0aCA9IHRoaXMuZ2V0T3B0aW9uKFwicmVhZC5wYXRoXCIpO1xuXHRcdGlmIChkYXRhUGF0aCkge1xuXHRcdFx0cGF5bG9hZCA9IG5ldyBQYXRoZmluZGVyKHBheWxvYWQpLmdldFZpYShkYXRhUGF0aCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHBheWxvYWQ7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBwcmVwYXJlcyB0aGUgZGF0YSBmb3Igd3JpdGluZyBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBwYXlsb2FkXG5cdCAqIEByZXR1cm4ge09iamVjdH1cblx0ICovXG5cdHByZXBhcmVTZXJ2ZXJQYXlsb2FkKHBheWxvYWQpIHtcblx0XHRwYXlsb2FkID0gZG9UcmFuc2Zvcm0uY2FsbCh0aGlzLCBcIndyaXRlXCIsIHBheWxvYWQpO1xuXHRcdHBheWxvYWQgPSBkb0RpZmYuY2FsbCh0aGlzLCBwYXlsb2FkKTtcblxuXHRcdGNvbnN0IHNoZWF0aGluZ09iamVjdCA9IHRoaXMuZ2V0T3B0aW9uKFwid3JpdGUuc2hlYXRoaW5nLm9iamVjdFwiKTtcblx0XHRjb25zdCBzaGVhdGhpbmdQYXRoID0gdGhpcy5nZXRPcHRpb24oXCJ3cml0ZS5zaGVhdGhpbmcucGF0aFwiKTtcblxuXHRcdGlmIChzaGVhdGhpbmdPYmplY3QgJiYgc2hlYXRoaW5nUGF0aCkge1xuXHRcdFx0Y29uc3Qgc3ViID0gcGF5bG9hZDtcblx0XHRcdHBheWxvYWQgPSBzaGVhdGhpbmdPYmplY3Q7XG5cdFx0XHRuZXcgUGF0aGZpbmRlcihwYXlsb2FkKS5zZXRWaWEoc2hlYXRoaW5nUGF0aCwgc3ViKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcGF5bG9hZDtcblx0fVxufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0gb2JqXG4gKiBAcmV0dXJuIHsqfVxuICovXG5mdW5jdGlvbiBkb0RpZmYob2JqKSB7XG5cdGlmIChcblx0XHR0aGlzW3NlcnZlclZlcnNpb25TeW1ib2xdID09PSBudWxsIHx8XG5cdFx0dGhpc1tzZXJ2ZXJWZXJzaW9uU3ltYm9sXSA9PT0gdW5kZWZpbmVkXG5cdCkge1xuXHRcdHJldHVybiBvYmo7XG5cdH1cblxuXHRjb25zdCBjYWxsYmFjayA9IHRoaXMuZ2V0T3B0aW9uKFwid3JpdGUucGFydGlhbC5jYWxsYmFja1wiKTtcblx0aWYgKCFpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuXHRcdHJldHVybiBvYmo7XG5cdH1cblxuXHRjb25zdCByZXN1bHRzID0gZGlmZih0aGlzW3NlcnZlclZlcnNpb25TeW1ib2xdLCBvYmopO1xuXHRpZiAoIXJlc3VsdHMpIHtcblx0XHRyZXR1cm4gb2JqO1xuXHR9XG5cblx0b2JqID0gY2FsbGJhY2sob2JqLCByZXN1bHRzKTtcblx0dGhpc1tzZXJ2ZXJWZXJzaW9uU3ltYm9sXSA9IG9iajtcblxuXHRyZXR1cm4gb2JqO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5mdW5jdGlvbiBkb1RyYW5zZm9ybSh0eXBlLCBvYmopIHtcblx0Y29uc3QgdHJhbnNmb3JtYXRpb24gPSB0aGlzLmdldE9wdGlvbihgJHt0eXBlfS5tYXBwaW5nLnRyYW5zZm9ybWVyYCk7XG5cdGlmICh0cmFuc2Zvcm1hdGlvbiAhPT0gdW5kZWZpbmVkICYmIHRyYW5zZm9ybWF0aW9uICE9PSBudWxsKSB7XG5cdFx0Y29uc3QgcGlwZSA9IG5ldyBQaXBlKHRyYW5zZm9ybWF0aW9uKTtcblx0XHRjb25zdCBjYWxsYmFja3MgPSB0aGlzLmdldE9wdGlvbihgJHt0eXBlfS5tYXBwaW5nLmNhbGxiYWNrc2ApO1xuXG5cdFx0aWYgKGlzQXJyYXkoY2FsbGJhY2tzKSkge1xuXHRcdFx0Zm9yIChjb25zdCBjYWxsYmFjayBvZiBjYWxsYmFja3MpIHtcblx0XHRcdFx0aWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRcdFx0cGlwZS5zZXRDYWxsYmFjayhjYWxsYmFjayk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoaXNPYmplY3QoY2FsbGJhY2tzKSkge1xuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gY2FsbGJhY2tzKSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRjYWxsYmFja3MuaGFzT3duUHJvcGVydHkoa2V5KSAmJlxuXHRcdFx0XHRcdHR5cGVvZiBjYWxsYmFja3Nba2V5XSA9PT0gXCJmdW5jdGlvblwiXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHBpcGUuc2V0Q2FsbGJhY2soa2V5LCBjYWxsYmFja3Nba2V5XSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRvYmogPSBwaXBlLnJ1bihvYmopO1xuXHR9XG5cblx0cmV0dXJuIG9iajtcbn1cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtTZXJ2ZXJ9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvZGF0YS9kYXRhc291cmNlL3NlcnZlci5tanNcIjtcblxuXG5kZXNjcmliZSgnU2VydmVyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgaXQoJ3Nob3VsZCB0cmFuc2Zvcm0gZGF0YScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgd3JpdGVDYWxsYmFja0NhbGxlZCA9IGZhbHNlXG4gICAgICAgIGxldCByZWFkQ2FsbGJhY2tDYWxsZWQgPSBmYWxzZVxuXG4gICAgICAgIGNvbnN0IHNlcnZlciA9IG5ldyBTZXJ2ZXIoe1xuICAgICAgICAgICAgd3JpdGU6IHtcbiAgICAgICAgICAgICAgICBtYXBwaW5nOiB7XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVyOiBcImNhbGw6b25Xcml0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uV3JpdGU6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVDYWxsYmFja0NhbGxlZCA9IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzaGVhdGhpbmc6IHtcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZW1vOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHh5ejogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IFwiZGF0YS54eXpcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlYWQ6IHtcbiAgICAgICAgICAgICAgICBtYXBwaW5nOiB7XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVyOiBcImNhbGw6b25SZWFkXCIsXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgb25SZWFkOiAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRDYWxsYmFja0NhbGxlZCA9IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBwYXRoOiAnZGF0YS54eXonLFxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIGV4cGVjdChzZXJ2ZXIudHJhbnNmb3JtU2VydmVyUGF5bG9hZCh7ZGVtbzogMSwgZGF0YToge3h5ejogMn19KSkudG8uZGVlcC5lcXVhbCh7ZGVtbzogMSwgZGF0YToge3h5ejogMn19KVxuICAgICAgICBleHBlY3Qoc2VydmVyLnByZXBhcmVTZXJ2ZXJQYXlsb2FkKHtkZW1vOiAxLCBkYXRhOiB7eHl6OiAyfX0pKS50by5kZWVwLmVxdWFsKHtkZW1vOiAxLCBkYXRhOiB7eHl6OiAyfX0pXG5cblxuICAgIH0pXG5cbn0pO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sLCBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBpc1N0cmluZywgaXNPYmplY3QgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBXZWJDb25uZWN0IGFzIE5ldFdlYkNvbm5lY3QgfSBmcm9tIFwiLi4vLi4vLi4vbmV0L3dlYmNvbm5lY3QubWpzXCI7XG5pbXBvcnQgeyBNZXNzYWdlIH0gZnJvbSBcIi4uLy4uLy4uL25ldC93ZWJjb25uZWN0L21lc3NhZ2UubWpzXCI7XG5pbXBvcnQgeyBTZXJ2ZXIgfSBmcm9tIFwiLi4vc2VydmVyLm1qc1wiO1xuXG5leHBvcnQgeyBXZWJDb25uZWN0IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKlxuICogaGludDogdGhpcyBuYW1lIGlzIHVzZWQgaW4gdGhlIHRlc3RzLiBpZiB5b3Ugd2FudCB0byBjaGFuZ2UgaXQsIHBsZWFzZSBjaGFuZ2UgaXQgaW4gdGhlIHRlc3RzIGFzIHdlbGwuXG4gKi9cbmNvbnN0IHdlYkNvbm5lY3RTeW1ib2wgPSBTeW1ib2woXCJjb25uZWN0aW9uXCIpO1xuXG4vKipcbiAqIFRoZSBSZXN0QVBJIGlzIGEgY2xhc3MgdGhhdCBlbmFibGVzIGEgUkVTVCBBUEkgc2VydmVyLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vLi4vLi4vZXhhbXBsZS9kYXRhL2RhdGFzb3VyY2Uvc2VydmVyL3dlYmNvbm5lY3QubWpzXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAzLjEuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IFRoZSBMb2NhbFN0b3JhZ2UgY2xhc3MgZW5jYXBzdWxhdGVzIHRoZSBhY2Nlc3MgdG8gZGF0YSBvYmplY3RzLlxuICovXG5jbGFzcyBXZWJDb25uZWN0IGV4dGVuZHMgU2VydmVyIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gb3B0aW9ucyBjb250YWlucyBkZWZpbml0aW9ucyBmb3IgdGhlIGRhdGFzb3VyY2UuXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmIChpc1N0cmluZyhvcHRpb25zKSkge1xuXHRcdFx0b3B0aW9ucyA9IHsgdXJsOiBvcHRpb25zIH07XG5cdFx0fVxuXG5cdFx0aWYgKCFpc09iamVjdChvcHRpb25zKSkgb3B0aW9ucyA9IHt9O1xuXHRcdHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHR0aGlzW3dlYkNvbm5lY3RTeW1ib2xdID0gbmV3IE5ldFdlYkNvbm5lY3Qoe1xuXHRcdFx0dXJsOiB0aGlzLmdldE9wdGlvbihcInVybFwiKSxcblx0XHRcdGNvbm5lY3Rpb246IHtcblx0XHRcdFx0dGltZW91dDogdGhpcy5nZXRPcHRpb24oXCJjb25uZWN0aW9uLnRpbWVvdXRcIiksXG5cdFx0XHRcdHJlY29ubmVjdDoge1xuXHRcdFx0XHRcdHRpbWVvdXQ6IHRoaXMuZ2V0T3B0aW9uKFwiY29ubmVjdGlvbi5yZWNvbm5lY3QudGltZW91dFwiKSxcblx0XHRcdFx0XHRhdHRlbXB0czogdGhpcy5nZXRPcHRpb24oXCJjb25uZWN0aW9uLnJlY29ubmVjdC5hdHRlbXB0c1wiKSxcblx0XHRcdFx0XHRlbmFibGVkOiB0aGlzLmdldE9wdGlvbihcImNvbm5lY3Rpb24ucmVjb25uZWN0LmVuYWJsZWRcIiksXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRjb25uZWN0KCkge1xuXHRcdHJldHVybiB0aGlzW3dlYkNvbm5lY3RTeW1ib2xdLmNvbm5lY3QoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0aXNDb25uZWN0ZWQoKSB7XG5cdFx0cmV0dXJuIHRoaXNbd2ViQ29ubmVjdFN5bWJvbF0uaXNDb25uZWN0ZWQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9kYXRhL2RhdGFzb3VyY2Uvc2VydmVyL3dlYmNvbm5lY3RcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHVybD11bmRlZmluZWQgRGVmaW5lcyB0aGUgcmVzb3VyY2UgdGhhdCB5b3Ugd2lzaCB0byBmZXRjaC5cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGNvbm5lY3Rpb25cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGNvbm5lY3Rpb24udGltZW91dD01MDAwIERlZmluZXMgdGhlIHRpbWVvdXQgZm9yIHRoZSBjb25uZWN0aW9uLlxuXHQgKiBAcHJvcGVydHkge051bWJlcn0gY29ubmVjdGlvbi5yZWNvbm5lY3QudGltZW91dCBUaGUgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgZm9yIHRoZSByZWNvbm5lY3QuXG5cdCAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBjb25uZWN0aW9uLnJlY29ubmVjdC5hdHRlbXB0cyBUaGUgbWF4aW11bSBudW1iZXIgb2YgcmVjb25uZWN0cy5cblx0ICogQHByb3BlcnR5IHtCb29sfSBjb25uZWN0aW9uLnJlY29ubmVjdC5lbmFibGVkIElmIHRoZSByZWNvbm5lY3QgaXMgZW5hYmxlZC5cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHdyaXRlPXt9IE9wdGlvbnNcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHdyaXRlLm1hcHBpbmcgdGhlIG1hcHBpbmcgaXMgYXBwbGllZCBiZWZvcmUgd3JpdGluZy5cblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IHdyaXRlLm1hcHBpbmcudHJhbnNmb3JtZXIgVHJhbnNmb3JtZXIgdG8gc2VsZWN0IHRoZSBhcHByb3ByaWF0ZSBlbnRyaWVzXG5cdCAqIEBwcm9wZXJ0eSB7TW9uc3Rlci5EYXRhLkRhdGFzb3VyY2V+ZXhhbXBsZUNhbGxiYWNrW119IHdyaXRlLm1hcHBpbmcuY2FsbGJhY2sgd2l0aCB0aGUgaGVscCBvZiB0aGUgY2FsbGJhY2ssIHRoZSBzdHJ1Y3R1cmVzIGNhbiBiZSBhZGp1c3RlZCBiZWZvcmUgd3JpdGluZy5cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHdyaXRlLnNoZWF0aGluZ1xuXHQgKiBAcHJvcGVydHkge09iamVjdH0gd3JpdGUuc2hlYXRoaW5nLm9iamVjdCBPYmplY3QgdG8gYmUgd3JhcHBlZFxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gd3JpdGUuc2hlYXRoaW5nLnBhdGggUGF0aCB0byB0aGUgZGF0YVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gcmVhZD17fSBPcHRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSByZWFkLnBhdGggUGF0aCB0byBkYXRhXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSByZWFkLm1hcHBpbmcgdGhlIG1hcHBpbmcgaXMgYXBwbGllZCBhZnRlciByZWFkaW5nLlxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gcmVhZC5tYXBwaW5nLnRyYW5zZm9ybWVyIFRyYW5zZm9ybWVyIHRvIHNlbGVjdCB0aGUgYXBwcm9wcmlhdGUgZW50cmllc1xuXHQgKiBAcHJvcGVydHkge01vbnN0ZXIuRGF0YS5EYXRhc291cmNlfmV4YW1wbGVDYWxsYmFja1tdfSByZWFkLm1hcHBpbmcuY2FsbGJhY2sgd2l0aCB0aGUgaGVscCBvZiB0aGUgY2FsbGJhY2ssIHRoZSBzdHJ1Y3R1cmVzIGNhbiBiZSBhZGp1c3RlZCBhZnRlciByZWFkaW5nLlxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dXJsOiB1bmRlZmluZWQsXG5cdFx0XHR3cml0ZToge1xuXHRcdFx0XHRtYXBwaW5nOiB7XG5cdFx0XHRcdFx0dHJhbnNmb3JtZXI6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRjYWxsYmFja3M6IHt9LFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRzaGVhdGhpbmc6IHtcblx0XHRcdFx0XHRvYmplY3Q6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRwYXRoOiB1bmRlZmluZWQsXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdFx0cmVhZDoge1xuXHRcdFx0XHRtYXBwaW5nOiB7XG5cdFx0XHRcdFx0dHJhbnNmb3JtZXI6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRjYWxsYmFja3M6IHt9LFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRwYXRoOiB1bmRlZmluZWQsXG5cdFx0XHR9LFxuXHRcdFx0Y29ubmVjdGlvbjoge1xuXHRcdFx0XHR0aW1lb3V0OiA1MDAwLFxuXHRcdFx0XHRyZWNvbm5lY3Q6IHtcblx0XHRcdFx0XHR0aW1lb3V0OiAxMDAwLFxuXHRcdFx0XHRcdGF0dGVtcHRzOiAxLFxuXHRcdFx0XHRcdGVuYWJsZWQ6IGZhbHNlLFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBjbG9zZXMgdGhlIGNvbm5lY3Rpb24uXG5cdCAqXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRjbG9zZSgpIHtcblx0XHRyZXR1cm4gdGhpc1t3ZWJDb25uZWN0U3ltYm9sXS5jbG9zZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRyZWFkKCkge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHR3aGlsZSAodGhpc1t3ZWJDb25uZWN0U3ltYm9sXS5kYXRhUmVjZWl2ZWQoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRsZXQgb2JqID0gdGhpc1t3ZWJDb25uZWN0U3ltYm9sXS5wb2xsKCk7XG5cdFx0XHRcdGlmICghaXNPYmplY3Qob2JqKSkge1xuXHRcdFx0XHRcdHJlamVjdChuZXcgRXJyb3IoXCJUaGUgcmVjZWl2ZWQgZGF0YSBpcyBub3QgYW4gb2JqZWN0LlwiKSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCEob2JqIGluc3RhbmNlb2YgTWVzc2FnZSkpIHtcblx0XHRcdFx0XHRyZWplY3QobmV3IEVycm9yKFwiVGhlIHJlY2VpdmVkIGRhdGEgaXMgbm90IGEgTWVzc2FnZS5cIikpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdG9iaiA9IG9iai5nZXREYXRhKCk7XG5cdFx0XHRcdG9iaiA9IHRoaXMudHJhbnNmb3JtU2VydmVyUGF5bG9hZC5jYWxsKHRoaXMsIG9iaik7XG5cdFx0XHRcdHRoaXMuc2V0KG9iaik7XG5cdFx0XHR9XG5cblx0XHRcdHJlc29sdmUodGhpcy5nZXQoKSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdHdyaXRlKCkge1xuXHRcdGNvbnN0IG9iaiA9IHRoaXMucHJlcGFyZVNlcnZlclBheWxvYWQodGhpcy5nZXQoKSk7XG5cdFx0cmV0dXJuIHRoaXNbd2ViQ29ubmVjdFN5bWJvbF0uc2VuZChvYmopO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge1Jlc3RBUEl9XG5cdCAqL1xuXHRnZXRDbG9uZSgpIHtcblx0XHRyZXR1cm4gbmV3IFdlYkNvbm5lY3QodGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0UmVhbFN1YmplY3QoKVtcIm9wdGlvbnNcIl0pO1xuXHR9XG59XG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7V2ViQ29ubmVjdH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2Uvc2VydmVyL3dlYmNvbm5lY3QubWpzXCI7XG5pbXBvcnQge2luaXRXZWJTb2NrZXR9IGZyb20gXCIuLi8uLi8uLi8uLi91dGlsL3dlYnNvY2tldC5tanNcIjtcblxuY29uc3QgdGVzdFVybCA9IFwid3NzOi8vd3MucG9zdG1hbi1lY2hvLmNvbS9yYXdcIlxuXG5kZXNjcmliZSgnV2Vic29ja2V0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgbGV0IGRzID0gdW5kZWZpbmVkXG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdFdlYlNvY2tldCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICBkb25lKGUpXG4gICAgICAgIH0pXG4gICAgfSk7XG5cbiAgICBhZnRlckVhY2goZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaWYgKGRzKSB7XG4gICAgICAgICAgICBkcy5jbG9zZSgpXG4gICAgICAgIH1cblxuICAgICAgICAvLyB3b3JrYXJvdW5kOiB3aXRob3V0IHRoaXMsIHRoZSBub2RlIHRlc3Qgd2lsbCBub3QgZXhpdCBcbiAgICAgICAgZm9yIChjb25zdCBzeW0gb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhkcykpIHtcbiAgICAgICAgICAgIGlmIChzeW0udG9TdHJpbmcoKSA9PT0gJ1N5bWJvbChjb25uZWN0aW9uKScpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb25uZWN0aW9uID0gZHNbc3ltXVxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc3ltMiBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGNvbm5lY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzeW0yLnRvU3RyaW5nKCkgPT09ICdTeW1ib2woY29ubmVjdGlvbiknKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzb2NrZXQgPSBjb25uZWN0aW9uW3N5bTJdPy5zb2NrZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc29ja2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzb2NrZXQ/LnRlcm1pbmF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQ/LlsndGVybWluYXRlJ10oKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGRvbmUoKVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZXQgY2xvbmUnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgZHMgPSBuZXcgV2ViQ29ubmVjdCh0ZXN0VXJsKVxuICAgICAgICBjb25zdCBjbG9uZSA9IGRzLmdldENsb25lKClcbiAgICAgICAgZXhwZWN0KGNsb25lKS50by5iZS5hbi5pbnN0YW5jZW9mKFdlYkNvbm5lY3QpXG5cbiAgICB9KVxuXG4gICAgaXQoJ3Nob3VsZCB0cmFuc2Zvcm0gZGF0YScsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgbGV0IHdyaXRlQ2FsbGJhY2tDYWxsZWQgPSBmYWxzZVxuICAgICAgICBsZXQgcmVhZENhbGxiYWNrQ2FsbGVkID0gZmFsc2VcblxuICAgICAgICBkcyA9IG5ldyBXZWJDb25uZWN0KHtcbiAgICAgICAgICAgIHVybDogdGVzdFVybCxcbiAgICAgICAgICAgIHdyaXRlOiB7XG4gICAgICAgICAgICAgICAgbWFwcGluZzoge1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lcjogXCJjYWxsOm9uV3JpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvbldyaXRlOiAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlQ2FsbGJhY2tDYWxsZWQgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2hlYXRoaW5nOiB7XG4gICAgICAgICAgICAgICAgICAgIG9iamVjdDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVtbzogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4eXo6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBwYXRoOiBcImRhdGEueHl6XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZWFkOiB7XG4gICAgICAgICAgICAgICAgbWFwcGluZzoge1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lcjogXCJjYWxsOm9uUmVhZFwiLFxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uUmVhZDogKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkQ2FsbGJhY2tDYWxsZWQgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcGF0aDogJ2RhdGEueHl6JyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICBkcy5jb25uZWN0KCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkcy5zZXQoe1xuICAgICAgICAgICAgICAgIGVudmVsb3A6IHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogXCJIZWxsbyBXb3JsZFwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgZHMud3JpdGUoKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgICAgIGRzLnNldCh7fSlcbiAgICAgICAgICAgICAgICBleHBlY3QoZHMuZ2V0KCkpLnRvLmJlLmRlZXAuZXF1YWwoe30pO1xuXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG5cblxuICAgICAgICAgICAgICAgICAgICBkcy5yZWFkKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoZHMuZ2V0KCkpLnRvLmJlLmRlZXAuZXF1YWwoe2VudmVsb3A6e21lc3NhZ2U6IFwiSGVsbG8gV29ybGRcIn19KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdCh3cml0ZUNhbGxiYWNrQ2FsbGVkKS50by5iZS50cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QocmVhZENhbGxiYWNrQ2FsbGVkKS50by5iZS50cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoZSlcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9LCAyMDApXG5cbiAgICAgICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKG5ldyBFcnJvcihlcnIpKTtcbiAgICAgICAgICAgIH0pXG5cblxuICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgZG9uZShlKVxuICAgICAgICB9KVxuXG5cbiAgICB9KVxuXG4gICAgaXQoJ3Nob3VsZCBjb25uZWN0JywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgZHMgPSBuZXcgV2ViQ29ubmVjdCh7XG4gICAgICAgICAgICB1cmw6IHRlc3RVcmwsXG4gICAgICAgICAgICByZWNvbm5lY3Q6IHtcbiAgICAgICAgICAgICAgICBlbmFibGVkOiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgZHMuY29ubmVjdCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICBkb25lKGUpXG4gICAgICAgIH0pXG5cblxuICAgIH0pXG5cbiAgICBpdCgnc2hvdWxkIHNlbmQgYSBtZXNzYWdlJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgXG4gICAgICAgIHRoaXMudGltZW91dCgxMDAwMClcbiAgICAgICAgXG4gICAgICAgIGRzID0gbmV3IFdlYkNvbm5lY3Qoe1xuICAgICAgICAgICAgdXJsOiB0ZXN0VXJsLFxuICAgICAgICAgICAgcmVjb25uZWN0OiB7XG4gICAgICAgICAgICAgICAgZW5hYmxlZDogZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICBkcy5jb25uZWN0KCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkcy5zZXQoe1xuICAgICAgICAgICAgICAgIGVudmVsb3A6IHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogXCJIZWxsbyBXb3JsZFwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgZHMud3JpdGUoKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgICAgIGRzLnNldCh7fSlcbiAgICAgICAgICAgICAgICBleHBlY3QoZHMuZ2V0KCkpLnRvLmJlLmRlZXAuZXF1YWwoe30pO1xuXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgZHMucmVhZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZHMuZ2V0KCkpLnRvLmJlLmRlZXAuZXF1YWwoe2VudmVsb3A6e21lc3NhZ2U6IFwiSGVsbG8gV29ybGRcIn19KTtcbiAgICAgICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZShlKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSw1MDApXG4gICAgICAgICAgICAgICAgXG5cbiAgICAgICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKG5ldyBFcnJvcihlcnIpKTtcbiAgICAgICAgICAgIH0pXG5cblxuICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgZG9uZShlKVxuICAgICAgICB9KVxuXG5cbiAgICB9KTtcblxufSk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wsIGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGlzT2JqZWN0LCBpc0Z1bmN0aW9uLCBpc0FycmF5IH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgZGlmZiB9IGZyb20gXCIuLi8uLi9kaWZmLm1qc1wiO1xuaW1wb3J0IHsgU2VydmVyIH0gZnJvbSBcIi4uL3NlcnZlci5tanNcIjtcbmltcG9ydCB7IFdyaXRlRXJyb3IgfSBmcm9tIFwiLi9yZXN0YXBpL3dyaXRlZXJyb3IubWpzXCI7XG5pbXBvcnQgeyBEYXRhRmV0Y2hFcnJvciB9IGZyb20gXCIuL3Jlc3RhcGkvZGF0YS1mZXRjaC1lcnJvci5tanNcIjtcblxuZXhwb3J0IHsgUmVzdEFQSSB9O1xuXG4vKipcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAzLjEyLjBcbiAqL1xuY29uc3QgcmF3RGF0YVN5bWJvbCA9IFN5bWJvbC5mb3IoXG5cdFwiQHNjaHVrYWkvbW9uc3Rlci9kYXRhL2RhdGFzb3VyY2Uvc2VydmVyL3Jlc3RhcGkvcmF3ZGF0YVwiLFxuKTtcblxuLyoqXG4gKiBUaGUgUmVzdEFQSSBpcyBhIGNsYXNzIHRoYXQgZW5hYmxlcyBhIFJFU1QgQVBJIHNlcnZlci5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uLy4uLy4uL2V4YW1wbGUvZGF0YS9kYXRhc291cmNlL3NlcnZlci9yZXN0YXBpLm1qc1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yMi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgVGhlIFJlc3RBUEkgaXMgYSBjbGFzcyB0aGF0IGJpbmRzIGEgUkVTVCBBUEkgc2VydmVyLlxuICovXG5jbGFzcyBSZXN0QVBJIGV4dGVuZHMgU2VydmVyIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gb3B0aW9ucyBjb250YWlucyBkZWZpbml0aW9ucyBmb3IgdGhlIGRhdGFzb3VyY2UuXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmIChpc09iamVjdChvcHRpb25zKSkge1xuXHRcdFx0dGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL3NlcnZlci9yZXN0YXBpXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB3cml0ZT17fSBPcHRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB3cml0ZS5pbml0PXt9IEFuIG9wdGlvbnMgb2JqZWN0IGNvbnRhaW5pbmcgYW55IGN1c3RvbSBzZXR0aW5ncyB0aGF0IHlvdSB3YW50IHRvIGFwcGx5IHRvIHRoZSByZXF1ZXN0LiBUaGUgcGFyYW1ldGVycyBhcmUgaWRlbnRpY2FsIHRvIHRob3NlIG9mIHRoZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1JlcXVlc3QvUmVxdWVzdHxSZXF1ZXN0IGNvbnN0cnVjdG9yfVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gd3JpdGUuaW5pdC5tZXRob2Q9UE9TVFxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gd3JpdGUuaW5pdC5oZWFkZXJzIE9iamVjdCBjb250YWluaW5nIGFueSBjdXN0b20gaGVhZGVycyB0aGF0IHlvdSB3YW50IHRvIGFwcGx5IHRvIHRoZSByZXF1ZXN0LlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gd3JpdGUucmVzcG9uc2VDYWxsYmFjayBDYWxsYmFjayBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBhZnRlciB0aGUgcmVxdWVzdCBoYXMgYmVlbiBjb21wbGV0ZWQuXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB3cml0ZS5hY2NlcHRlZFN0YXR1cz1bMjAwLDIwMV1cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHdyaXRlLnVybCBVUkxcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHdyaXRlLm1hcHBpbmcgdGhlIG1hcHBpbmcgaXMgYXBwbGllZCBiZWZvcmUgd3JpdGluZy5cblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IHdyaXRlLm1hcHBpbmcudHJhbnNmb3JtZXIgVHJhbnNmb3JtZXIgdG8gc2VsZWN0IHRoZSBhcHByb3ByaWF0ZSBlbnRyaWVzXG5cdCAqIEBwcm9wZXJ0eSB7TW9uc3Rlci5EYXRhLkRhdGFzb3VyY2V+ZXhhbXBsZUNhbGxiYWNrW119IHdyaXRlLm1hcHBpbmcuY2FsbGJhY2sgd2l0aCB0aGUgaGVscCBvZiB0aGUgY2FsbGJhY2ssIHRoZSBzdHJ1Y3R1cmVzIGNhbiBiZSBhZGp1c3RlZCBiZWZvcmUgd3JpdGluZy5cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHdyaXRlLnJlcG9ydFxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gd3JpdGUucmVwb3J0LnBhdGggUGF0aCB0byB2YWxpZGF0aW9uc1xuXHQgKiBAcHJvcGVydHkge09iamVjdH0gd3JpdGUucGFydGlhbFxuXHQgKiBAcHJvcGVydHkge0Z1bmN0aW9ufSB3cml0ZS5wYXJ0aWFsLmNhbGxiYWNrIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGFmdGVyIHRoZSByZXF1ZXN0IGhhcyBiZWVuIGNvbXBsZXRlZC4gKG9iaiwgZGlmZlJlc3VsdCkgPT4gb2JqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB3cml0ZS5zaGVhdGhpbmdcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHdyaXRlLnNoZWF0aGluZy5vYmplY3QgT2JqZWN0IHRvIGJlIHdyYXBwZWRcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHdyaXRlLnNoZWF0aGluZy5wYXRoIFBhdGggdG8gdGhlIGRhdGFcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHJlYWQ9e30gT3B0aW9uc1xuXHQgKiBAcHJvcGVydHkge09iamVjdH0gcmVhZC5pbml0PXt9IEFuIG9wdGlvbnMgb2JqZWN0IGNvbnRhaW5pbmcgYW55IGN1c3RvbSBzZXR0aW5ncyB0aGF0IHlvdSB3YW50IHRvIGFwcGx5IHRvIHRoZSByZXF1ZXN0LiBUaGUgcGFyYW1ldGVycyBhcmUgaWRlbnRpY2FsIHRvIHRob3NlIG9mIHRoZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1JlcXVlc3QvUmVxdWVzdHxSZXF1ZXN0IGNvbnN0cnVjdG9yfVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcmVhZC5pbml0Lm1ldGhvZD1HRVRcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHJlYWQuYWNjZXB0ZWRTdGF0dXM9WzIwMF1cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHJlYWQudXJsIFVSTFxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gcmVhZC5tYXBwaW5nIHRoZSBtYXBwaW5nIGlzIGFwcGxpZWQgYWZ0ZXIgcmVhZGluZy5cblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IHJlYWQubWFwcGluZy50cmFuc2Zvcm1lciBUcmFuc2Zvcm1lciB0byBzZWxlY3QgdGhlIGFwcHJvcHJpYXRlIGVudHJpZXNcblx0ICogQHByb3BlcnR5IHtNb25zdGVyLkRhdGEuRGF0YXNvdXJjZX5leGFtcGxlQ2FsbGJhY2tbXX0gcmVhZC5tYXBwaW5nLmNhbGxiYWNrIHdpdGggdGhlIGhlbHAgb2YgdGhlIGNhbGxiYWNrLCB0aGUgc3RydWN0dXJlcyBjYW4gYmUgYWRqdXN0ZWQgYWZ0ZXIgcmVhZGluZy5cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHdyaXRlOiB7XG5cdFx0XHRcdGluaXQ6IHtcblx0XHRcdFx0XHRtZXRob2Q6IFwiUE9TVFwiLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRyZXNwb25zZUNhbGxiYWNrOiB1bmRlZmluZWQsXG5cdFx0XHRcdGFjY2VwdGVkU3RhdHVzOiBbMjAwLCAyMDFdLFxuXHRcdFx0XHR1cmw6IG51bGwsXG5cdFx0XHRcdG1hcHBpbmc6IHtcblx0XHRcdFx0XHR0cmFuc2Zvcm1lcjogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdGNhbGxiYWNrczogW10sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNoZWF0aGluZzoge1xuXHRcdFx0XHRcdG9iamVjdDogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdHBhdGg6IHVuZGVmaW5lZCxcblx0XHRcdFx0fSxcblx0XHRcdFx0cmVwb3J0OiB7XG5cdFx0XHRcdFx0cGF0aDogdW5kZWZpbmVkLFxuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdHBhcnRpYWw6IHtcblx0XHRcdFx0XHRjYWxsYmFjazogbnVsbCxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0XHRyZWFkOiB7XG5cdFx0XHRcdGluaXQ6IHtcblx0XHRcdFx0XHRtZXRob2Q6IFwiR0VUXCIsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHBhdGg6IG51bGwsXG5cdFx0XHRcdHJlc3BvbnNlQ2FsbGJhY2s6IHVuZGVmaW5lZCxcblx0XHRcdFx0YWNjZXB0ZWRTdGF0dXM6IFsyMDBdLFxuXHRcdFx0XHR1cmw6IG51bGwsXG5cdFx0XHRcdG1hcHBpbmc6IHtcblx0XHRcdFx0XHR0cmFuc2Zvcm1lcjogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdGNhbGxiYWNrczogW10sXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgb3B0aW9ucyBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQganNvbiBkZWZpbml0aW9uXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgb2JqZWN0XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgZGF0YSBjYW5ub3QgYmUgcmVhZFxuXHQgKi9cblx0cmVhZCgpIHtcblx0XHRsZXQgaW5pdCA9IHRoaXMuZ2V0T3B0aW9uKFwicmVhZC5pbml0XCIpO1xuXHRcdGlmICghaXNPYmplY3QoaW5pdCkpIGluaXQgPSB7fTtcblx0XHRpZiAoIWluaXRbXCJtZXRob2RcIl0pIGluaXRbXCJtZXRob2RcIl0gPSBcIkdFVFwiO1xuXG5cdFx0bGV0IGNhbGxiYWNrID0gdGhpcy5nZXRPcHRpb24oXCJyZWFkLnJlc3BvbnNlQ2FsbGJhY2tcIik7XG5cdFx0aWYgKCFjYWxsYmFjaykge1xuXHRcdFx0Y2FsbGJhY2sgPSAob2JqKSA9PiB7XG5cdFx0XHRcdHRoaXMuc2V0KHRoaXMudHJhbnNmb3JtU2VydmVyUGF5bG9hZC5jYWxsKHRoaXMsIG9iaikpO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmV0Y2hEYXRhLmNhbGwodGhpcywgaW5pdCwgXCJyZWFkXCIsIGNhbGxiYWNrKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKiBAdGhyb3dzIHtXcml0ZUVycm9yfSB0aGUgZGF0YSBjYW5ub3QgYmUgd3JpdHRlblxuXHQgKi9cblx0d3JpdGUoKSB7XG5cdFx0bGV0IGluaXQgPSB0aGlzLmdldE9wdGlvbihcIndyaXRlLmluaXRcIik7XG5cdFx0aWYgKCFpc09iamVjdChpbml0KSkgaW5pdCA9IHt9O1xuXHRcdGlmICh0eXBlb2YgaW5pdFtcImhlYWRlcnNcIl0gIT09IFwib2JqZWN0XCIpIHtcblx0XHRcdGluaXRbXCJoZWFkZXJzXCJdID0ge1xuXHRcdFx0XHRcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcblx0XHRcdH07XG5cdFx0fVxuXHRcdGlmICghaW5pdFtcIm1ldGhvZFwiXSkgaW5pdFtcIm1ldGhvZFwiXSA9IFwiUE9TVFwiO1xuXG5cdFx0Y29uc3Qgb2JqID0gdGhpcy5wcmVwYXJlU2VydmVyUGF5bG9hZCh0aGlzLmdldCgpKTtcblx0XHRpbml0W1wiYm9keVwiXSA9IEpTT04uc3RyaW5naWZ5KG9iaik7XG5cblx0XHRjb25zdCBjYWxsYmFjayA9IHRoaXMuZ2V0T3B0aW9uKFwid3JpdGUucmVzcG9uc2VDYWxsYmFja1wiKTtcblx0XHRyZXR1cm4gZmV0Y2hEYXRhLmNhbGwodGhpcywgaW5pdCwgXCJ3cml0ZVwiLCBjYWxsYmFjayk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7UmVzdEFQSX1cblx0ICovXG5cdGdldENsb25lKCkge1xuXHRcdHJldHVybiBuZXcgUmVzdEFQSShcblx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFJlYWxTdWJqZWN0KClbXCJvcHRpb25zXCJdLnJlYWQsXG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRSZWFsU3ViamVjdCgpW1wib3B0aW9uc1wiXS53cml0ZSxcblx0XHQpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBpbml0XG4gKiBAcGFyYW0ga2V5XG4gKiBAcGFyYW0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn1cbiAqL1xuZnVuY3Rpb24gZmV0Y2hEYXRhKGluaXQsIGtleSwgY2FsbGJhY2spIHtcblx0bGV0IHJlc3BvbnNlO1xuXG5cdHJldHVybiBmZXRjaCh0aGlzLmdldE9wdGlvbihgJHtrZXl9LnVybGApLCBpbml0KVxuXHRcdC50aGVuKChyZXNwKSA9PiB7XG5cdFx0XHRyZXNwb25zZSA9IHJlc3A7XG5cblx0XHRcdGNvbnN0IGFjY2VwdGVkU3RhdHVzID0gdGhpcy5nZXRPcHRpb24oYCR7a2V5fS5hY2NlcHRlZFN0YXR1c2AsIFsyMDBdKS5tYXAoXG5cdFx0XHRcdE51bWJlcixcblx0XHRcdCk7XG5cblx0XHRcdGlmIChhY2NlcHRlZFN0YXR1cy5pbmRleE9mKHJlc3Auc3RhdHVzKSA9PT0gLTEpIHtcblx0XHRcdFx0dGhyb3cgbmV3IERhdGFGZXRjaEVycm9yKFxuXHRcdFx0XHRcdGB0aGUgcmVzcG9uc2UgZG9lcyBub3QgY29udGFpbiBhbiBhY2NlcHRlZCBzdGF0dXMgKGFjdHVhbDogJHtyZXNwLnN0YXR1c30pLmAsXG5cdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiByZXNwLnRleHQoKTtcblx0XHR9KVxuXHRcdC50aGVuKChib2R5KSA9PiB7XG5cdFx0XHRsZXQgb2JqO1xuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRvYmogPSBKU09OLnBhcnNlKGJvZHkpO1xuXG5cdFx0XHRcdHJlc3BvbnNlW3Jhd0RhdGFTeW1ib2xdID0gb2JqO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRpZiAoYm9keS5sZW5ndGggPiAxMDApIHtcblx0XHRcdFx0XHRib2R5ID0gYCR7Ym9keS5zdWJzdHJpbmcoMCwgOTcpfS4uLmA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aHJvdyBuZXcgRGF0YUZldGNoRXJyb3IoXG5cdFx0XHRcdFx0YHRoZSByZXNwb25zZSBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQganNvbiAoYWN0dWFsOiAke2JvZHl9KS5gLFxuXHRcdFx0XHRcdHJlc3BvbnNlLFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoY2FsbGJhY2sgJiYgaXNGdW5jdGlvbihjYWxsYmFjaykpIHtcblx0XHRcdFx0Y2FsbGJhY2sob2JqKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXNwb25zZTtcblx0XHR9KVxuXHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0dGhyb3cgZTtcblx0XHR9KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCwgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBXcml0ZUVycm9yIH07XG5cbi8qKlxuICogRXJyb3IgbWVzc2FnZSBmb3IgQVBJIHJlcXVlc3RzIHdpdGggZXh0ZW5zaW9uIG9mIHJlcXVlc3QgYW5kIHZhbGlkYXRpb24uXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgdGhlIGVycm9yIGlzIHRocm93biBieSB0aGUgcmVzdCBhcGkgaW4gY2FzZSBvZiBlcnJvclxuICovXG5jbGFzcyBXcml0ZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2Vcblx0ICogQHBhcmFtIHtSZXNwb25zZX0gcmVzcG9uc2Vcblx0ICogQHBhcmFtIHtPYmplY3R9IHZhbGlkYXRpb25cblx0ICovXG5cdGNvbnN0cnVjdG9yKG1lc3NhZ2UsIHJlc3BvbnNlLCB2YWxpZGF0aW9uKSB7XG5cdFx0c3VwZXIobWVzc2FnZSk7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSB7XG5cdFx0XHRyZXNwb25zZTogcmVzcG9uc2UsXG5cdFx0XHR2YWxpZGF0aW9uOiB2YWxpZGF0aW9uLFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXG5cdFx0XHRcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL3NlcnZlci9yZXN0YXBpL3dyaXRlLWVycm9yXCIsXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtSZXNwb25zZX1cblx0ICovXG5cdGdldFJlc3BvbnNlKCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsU3ltYm9sXVtcInJlc3BvbnNlXCJdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge09iamVjdH1cblx0ICovXG5cdGdldFZhbGlkYXRpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXNbaW50ZXJuYWxTeW1ib2xdW1widmFsaWRhdGlvblwiXTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sLCBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IERhdGFGZXRjaEVycm9yIH07XG5cbi8qKlxuICogRXJyb3IgbWVzc2FnZSBmb3IgQVBJIHJlcXVlc3RzXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMy40My4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgdGhlIGVycm9yIGlzIHRocm93biBieSB0aGUgcmVzdCBhcGkgaW4gY2FzZSBvZiBlcnJvclxuICovXG5jbGFzcyBEYXRhRmV0Y2hFcnJvciBleHRlbmRzIEVycm9yIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXG5cdCAqIEBwYXJhbSB7UmVzcG9uc2V9IHJlc3BvbnNlXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihtZXNzYWdlLCByZXNwb25zZSkge1xuXHRcdHN1cGVyKG1lc3NhZ2UpO1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0ge1xuXHRcdFx0cmVzcG9uc2U6IHJlc3BvbnNlLFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcblx0XHRcdFwiQHNjaHVrYWkvbW9uc3Rlci9kYXRhL2RhdGFzb3VyY2Uvc2VydmVyL3Jlc3RhcGkvZGF0YWZldGNoZXJyb3JAQGluc3RhbmNlXCIsXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtSZXNwb25zZX1cblx0ICovXG5cdGdldFJlc3BvbnNlKCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsU3ltYm9sXVtcInJlc3BvbnNlXCJdO1xuXHR9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge1Jlc3RBUEl9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9zb3VyY2UvZGF0YS9kYXRhc291cmNlL3NlcnZlci9yZXN0YXBpLm1qc1wiO1xuaW1wb3J0IHt2YWxpZGF0ZU9iamVjdH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZGVzY3JpYmUoJ1Jlc3RBUEknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBsZXQgZmV0Y2hSZWZlcmVuY2U7XG4gICAgbGV0IHJldHVyblN0YXR1cztcblxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgIGdsb2JhbFRoaXNbJ2ZldGNoJ10gPSBmZXRjaFJlZmVyZW5jZTtcbiAgICB9KTtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuXG4gICAgICAgIHJldHVyblN0YXR1cyA9IDIwMDtcbiAgICAgICAgZmV0Y2hSZWZlcmVuY2UgPSBnbG9iYWxUaGlzWydmZXRjaCddO1xuICAgICAgICBnbG9iYWxUaGlzWydmZXRjaCddID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+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+IG5ldyBOb2RlTGlzdCgpLmFkZCgxKSkudG8udGhyb3coRXJyb3IpO1xuICAgIH0pXG5cbiAgICBpdCgnY2hlY2sgbGV2ZWwnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgY29uc3Qgcm9vdCA9IG5ldyBOb2RlKCdyb290Jyk7XG5cbiAgICAgICAgY29uc3QgbjEgPSBuZXcgTm9kZSgnbjEnKTtcbiAgICAgICAgY29uc3QgbjIgPSBuZXcgTm9kZSgnbjInKTtcbiAgICAgICAgY29uc3QgbjMgPSBuZXcgTm9kZSgnbjMnKTtcbiAgICAgICAgY29uc3QgbjQgPSBuZXcgTm9kZSgnbjQnKTtcblxuICAgICAgICBjb25zdCBuMTEgPSBuZXcgTm9kZSgnbjExJyk7XG4gICAgICAgIGNvbnN0IG4xMiA9IG5ldyBOb2RlKCduMTInKTtcbiAgICAgICAgY29uc3QgbjEzID0gbmV3IE5vZGUoJ24xMycpO1xuXG4gICAgICAgIGNvbnN0IG4yMSA9IG5ldyBOb2RlKCduMjEnKTtcbiAgICAgICAgY29uc3QgbjIyID0gbmV3IE5vZGUoJ24yMicpO1xuICAgICAgICBjb25zdCBuMjMgPSBuZXcgTm9kZSgnbjIzJyk7XG5cbiAgICAgICAgY29uc3QgbjQxID0gbmV3IE5vZGUoJ240MScpO1xuICAgICAgICBjb25zdCBuNDIgPSBuZXcgTm9kZSgnbjQyJyk7XG5cbiAgICAgICAgY29uc3QgbjQxMSA9IG5ldyBOb2RlKCduNDExJyk7XG4gICAgICAgIGNvbnN0IG40MTIgPSBuZXcgTm9kZSgnbjQxMicpO1xuICAgICAgICBjb25zdCBuNDEzID0gbmV3IE5vZGUoJ240MTMnKTtcblxuICAgICAgICBjb25zdCBuNDEyMSA9IG5ldyBOb2RlKCduNDEyMScpO1xuXG4gICAgICAgIHJvb3QuYXBwZW5kQ2hpbGQobjEpLmFwcGVuZENoaWxkKG4yKS5hcHBlbmRDaGlsZChuMykuYXBwZW5kQ2hpbGQobjQpO1xuICAgICAgICBuMS5hcHBlbmRDaGlsZChuMTEpLmFwcGVuZENoaWxkKG4xMikuYXBwZW5kQ2hpbGQobjEzKTtcbiAgICAgICAgbjIuYXBwZW5kQ2hpbGQobjIxKS5hcHBlbmRDaGlsZChuMjIpLmFwcGVuZENoaWxkKG4yMyk7XG4gICAgICAgIG40LmFwcGVuZENoaWxkKG40MSkuYXBwZW5kQ2hpbGQobjQyKTtcbiAgICAgICAgbjQxLmFwcGVuZENoaWxkKG40MTEpLmFwcGVuZENoaWxkKG40MTIpLmFwcGVuZENoaWxkKG40MTMpO1xuICAgICAgICBuNDEyLmFwcGVuZENoaWxkKG40MTIxKTtcblxuICAgICAgICBsZXQgaXRlcmF0b3IgPSBuZXcgTm9kZVJlY3Vyc2l2ZUl0ZXJhdG9yKHJvb3QpO1xuXG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBuIG9mIGl0ZXJhdG9yKSB7XG4gICAgICAgICAgICBleHBlY3QobikudG8uYmUuYW4uaW5zdGFuY2VvZihOb2RlKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKG4udmFsdWUgKyBcIjpcIiArIG4ubGV2ZWwpO1xuICAgICAgICB9XG5cblxuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKFtcbiAgICAgICAgICAgICdyb290OjAnLFxuICAgICAgICAgICAgJ24xOjEnLFxuICAgICAgICAgICAgJ24xMToyJyxcbiAgICAgICAgICAgICduMTI6MicsXG4gICAgICAgICAgICAnbjEzOjInLFxuICAgICAgICAgICAgJ24yOjEnLFxuICAgICAgICAgICAgJ24yMToyJyxcbiAgICAgICAgICAgICduMjI6MicsXG4gICAgICAgICAgICAnbjIzOjInLFxuICAgICAgICAgICAgJ24zOjEnLFxuICAgICAgICAgICAgJ240OjEnLFxuICAgICAgICAgICAgJ240MToyJyxcbiAgICAgICAgICAgICduNDExOjMnLFxuICAgICAgICAgICAgJ240MTI6MycsXG4gICAgICAgICAgICAnbjQxMjE6NCcsXG4gICAgICAgICAgICAnbjQxMzozJyxcbiAgICAgICAgICAgICduNDI6MidcblxuICAgICAgICBdKTtcblxuICAgICAgICBuNDEyMS5hcHBlbmRDaGlsZChuZXcgTm9kZSgnbjQxMjExJykpO1xuXG4gICAgICAgIGl0ZXJhdG9yID0gbmV3IE5vZGVSZWN1cnNpdmVJdGVyYXRvcihyb290KTtcbiAgICAgICAgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgbiBvZiBpdGVyYXRvcikge1xuICAgICAgICAgICAgZXhwZWN0KG4pLnRvLmJlLmFuLmluc3RhbmNlb2YoTm9kZSk7XG4gICAgICAgICAgICByZXN1bHQucHVzaChuLnZhbHVlICsgXCI6XCIgKyBuLmxldmVsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoW1xuICAgICAgICAgICAgJ3Jvb3Q6MCcsXG4gICAgICAgICAgICAnbjE6MScsXG4gICAgICAgICAgICAnbjExOjInLFxuICAgICAgICAgICAgJ24xMjoyJyxcbiAgICAgICAgICAgICduMTM6MicsXG4gICAgICAgICAgICAnbjI6MScsXG4gICAgICAgICAgICAnbjIxOjInLFxuICAgICAgICAgICAgJ24yMjoyJyxcbiAgICAgICAgICAgICduMjM6MicsXG4gICAgICAgICAgICAnbjM6MScsXG4gICAgICAgICAgICAnbjQ6MScsXG4gICAgICAgICAgICAnbjQxOjInLFxuICAgICAgICAgICAgJ240MTE6MycsXG4gICAgICAgICAgICAnbjQxMjozJyxcbiAgICAgICAgICAgICduNDEyMTo0JyxcbiAgICAgICAgICAgICduNDEyMTE6NScsXG4gICAgICAgICAgICAnbjQxMzozJyxcbiAgICAgICAgICAgICduNDI6MidcblxuICAgICAgICBdKTtcblxuXG4gICAgICAgIGNvbnN0IGJiID0gbmV3IE5vZGUoJ2JiJykgLy8gYmlnIGJhbmdcblxuICAgICAgICBiYi5hcHBlbmRDaGlsZChyb290KTtcbiAgICAgICAgaXRlcmF0b3IgPSBuZXcgTm9kZVJlY3Vyc2l2ZUl0ZXJhdG9yKGJiKTtcblxuICAgICAgICByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBuIG9mIGl0ZXJhdG9yKSB7XG4gICAgICAgICAgICBleHBlY3QobikudG8uYmUuYW4uaW5zdGFuY2VvZihOb2RlKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKG4udmFsdWUgKyBcIjpcIiArIG4ubGV2ZWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbChbXG4gICAgICAgICAgICAnYmI6MCcsXG4gICAgICAgICAgICAncm9vdDoxJyxcbiAgICAgICAgICAgICduMToyJyxcbiAgICAgICAgICAgICduMTE6MycsXG4gICAgICAgICAgICAnbjEyOjMnLFxuICAgICAgICAgICAgJ24xMzozJyxcbiAgICAgICAgICAgICduMjoyJyxcbiAgICAgICAgICAgICduMjE6MycsXG4gICAgICAgICAgICAnbjIyOjMnLFxuICAgICAgICAgICAgJ24yMzozJyxcbiAgICAgICAgICAgICduMzoyJyxcbiAgICAgICAgICAgICduNDoyJyxcbiAgICAgICAgICAgICduNDE6MycsXG4gICAgICAgICAgICAnbjQxMTo0JyxcbiAgICAgICAgICAgICduNDEyOjQnLFxuICAgICAgICAgICAgJ240MTIxOjUnLFxuICAgICAgICAgICAgJ240MTIxMTo2JyxcbiAgICAgICAgICAgICduNDEzOjQnLFxuICAgICAgICAgICAgJ240MjozJ1xuXG4gICAgICAgIF0pO1xuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdMZXZlbHMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ24yIHNob3VsZCBsZXZlbCAyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBjb25zdCBuMCA9IG5ldyBOb2RlKCdhYmMnKTtcblxuICAgICAgICAgICAgY29uc3QgbjEgPSBuZXcgTm9kZSgnZGVmJyk7XG4gICAgICAgICAgICBuMC5hcHBlbmRDaGlsZChuMSlcblxuICAgICAgICAgICAgY29uc3QgbjIgPSBuZXcgTm9kZSgnZ2hpJyk7XG4gICAgICAgICAgICBuMS5hcHBlbmRDaGlsZChuMik7XG5cbiAgICAgICAgICAgIGNvbnN0IG4zID0gbmV3IE5vZGUoJ2prbCcpO1xuICAgICAgICAgICAgbjIuYXBwZW5kQ2hpbGQobjMpO1xuXG4gICAgICAgICAgICBleHBlY3QobjAubGV2ZWwpLnRvLmJlLmVxdWFsKDApO1xuICAgICAgICAgICAgZXhwZWN0KG4xLmxldmVsKS50by5iZS5lcXVhbCgxKTtcbiAgICAgICAgICAgIGV4cGVjdChuMi5sZXZlbCkudG8uYmUuZXF1YWwoMik7XG4gICAgICAgICAgICBleHBlY3QobjMubGV2ZWwpLnRvLmJlLmVxdWFsKDMpO1xuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbiAgICBkZXNjcmliZSgndG9TdHJpbmcoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIG91dHB1dCBlbXB0eSBzdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gbmV3IE5vZGUoKTtcbiAgICAgICAgICAgIGV4cGVjdChub2RlLnRvU3RyaW5nKCkpLmlzLmVxdWFsKCcnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBvdXRwdXQgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgbjAgPSBuZXcgTm9kZSgnYWJjJyk7XG5cbiAgICAgICAgICAgIGNvbnN0IG4xID0gbmV3IE5vZGUoJ2RlZicpO1xuICAgICAgICAgICAgbjAuYXBwZW5kQ2hpbGQobjEpXG5cbiAgICAgICAgICAgIGNvbnN0IG4xMSA9IG5ldyBOb2RlKCdnaGknKTtcbiAgICAgICAgICAgIG4wLmFwcGVuZENoaWxkKG4xMSlcblxuICAgICAgICAgICAgY29uc3QgbjIgPSBuZXcgTm9kZSgnamtsJyk7XG4gICAgICAgICAgICBuMS5hcHBlbmRDaGlsZChuMik7XG5cbiAgICAgICAgICAgIGNvbnN0IG4zID0gbmV3IE5vZGUoJ21ubycpO1xuICAgICAgICAgICAgbjEuYXBwZW5kQ2hpbGQobjMpO1xuXG4gICAgICAgICAgICBjb25zdCBuNCA9IG5ldyBOb2RlKCdwcXInKTtcbiAgICAgICAgICAgIG4yLmFwcGVuZENoaWxkKG40KTtcblxuICAgICAgICAgICAgZXhwZWN0KG4yLmxldmVsKS50by5iZS5lcXVhbCgyKVxuXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKG4wLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgLy8gZXhwZWN0KG4wLnRvU3RyaW5nKCkpLmlzLmVxdWFsKCcnKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxufSk7IiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge1F1ZXVlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL3F1ZXVlLm1qc1wiO1xuXG5kZXNjcmliZSgnUXVldWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IHF1ZXVlO1xuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBxdWV1ZSA9IG5ldyBRdWV1ZTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2lzRW1wdHkoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnZmlyc3QgaXQgc2hvdWxkIGVtcHR5JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmlzRW1wdHkoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2FkZCBzZXF1ZW5jZSBwZWVrIGFuZCBwb2xsJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdyZXN1bHQgYSxhLGEsYicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5hZGQoJ2EnKSkudG8uYmUuaW5zdGFuY2VPZihRdWV1ZSk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuaXNFbXB0eSgpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5hZGQoJ2InKSkudG8uYmUuaW5zdGFuY2VPZihRdWV1ZSk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuYWRkKCdjJykpLnRvLmJlLmluc3RhbmNlT2YoUXVldWUpO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLnBlZWsoKSkudG8uYmUuZXF1YWwoJ2EnKTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5wZWVrKCkpLnRvLmJlLmVxdWFsKCdhJyk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUucG9sbCgpKS50by5iZS5lcXVhbCgnYScpO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLnBlZWsoKSkudG8uYmUuZXF1YWwoJ2InKTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5pc0VtcHR5KCkpLnRvLmJlLmZhbHNlO1xuICAgICAgICB9KTtcblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnYWRkIGFuZCBjbGVhcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIGVtcHR5JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmlzRW1wdHkoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5hZGQoJ2EnKSkudG8uYmUuaW5zdGFuY2VPZihRdWV1ZSk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuaXNFbXB0eSgpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5jbGVhcigpKS50by5iZS5pbnN0YW5jZU9mKFF1ZXVlKTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5pc0VtcHR5KCkpLnRvLmJlLnRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgfSlcblxuXG4gICAgXG59KSIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge05vZGV9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvbm9kZS5tanNcIjtcbmltcG9ydCB7Tm9kZUxpc3R9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvbm9kZWxpc3QubWpzXCI7XG5pbXBvcnQge05vZGVSZWN1cnNpdmVJdGVyYXRvcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9ub2RlcmVjdXJzaXZlaXRlcmF0b3IubWpzXCI7XG5cbmRlc2NyaWJlKCdOb2RlUmVjdXJzaXZlSXRlcmF0b3InLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGV4ZXB0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3QoKCkgPT4gbmV3IE5vZGVSZWN1cnNpdmVJdGVyYXRvcigpKS50by50aHJvdyhFcnJvcilcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIGJlIGEgZnVuY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdChOb2RlUmVjdXJzaXZlSXRlcmF0b3IpLnRvLmJlLmEoJ2Z1bmN0aW9uJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJlIGEgY29uc3RydWN0b3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdChuZXcgTm9kZVJlY3Vyc2l2ZUl0ZXJhdG9yKG5ldyBOb2RlKSkudG8uYmUuYW4uaW5zdGFuY2VvZihOb2RlUmVjdXJzaXZlSXRlcmF0b3IpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9PcGVyYXRvcnMveWllbGRcbiAgICAgKi9cbiAgICBpdCgndW5kZWZpbmVkIHNob3VsZCBub3QgcmVzdWx0IGluIHVuZGVmaW5lZCBub2RlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBpdGVyYXRvciA9IG5ldyBOb2RlUmVjdXJzaXZlSXRlcmF0b3IobmV3IE5vZGUpO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IG4gb2YgaXRlcmF0b3IpIHtcbiAgICAgICAgICAgIGV4cGVjdChuKS50by5iZS5hbi5pbnN0YW5jZW9mKE5vZGUpO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2gobi52YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKFt1bmRlZmluZWRdKTtcblxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBpdGVyYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBub2RlID1cbiAgICAgICAgICAgIG5ldyBOb2RlKCcxJylcbiAgICAgICAgbm9kZS5hcHBlbmRDaGlsZChcbiAgICAgICAgICAgIChuZXcgTm9kZSgnMicpKS5hcHBlbmRDaGlsZChuZXcgTm9kZSgnMi4xJykpLmFwcGVuZENoaWxkKG5ldyBOb2RlKCcyLjInKSkuYXBwZW5kQ2hpbGQobmV3IE5vZGUoJzIuMycpKSkuYXBwZW5kQ2hpbGQobmV3IE5vZGUoJzMnKSkuYXBwZW5kQ2hpbGQobmV3IE5vZGUoJzQnKS5hcHBlbmRDaGlsZChuZXcgTm9kZSgnNC4xJykpLmFwcGVuZENoaWxkKG5ldyBOb2RlKCc0LjInKSkpO1xuXG4gICAgICAgIGNvbnN0IGl0ZXJhdG9yID0gbmV3IE5vZGVSZWN1cnNpdmVJdGVyYXRvcihub2RlKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBuIG9mIGl0ZXJhdG9yKSB7XG4gICAgICAgICAgICBleHBlY3QobikudG8uYmUuYW4uaW5zdGFuY2VvZihOb2RlKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKG4udmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbChbJzEnLCAnMicsICcyLjEnLCAnMi4yJywgJzIuMycsICczJywgJzQnLCAnNC4xJywgJzQuMiddKTtcblxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBpdGVyYXRlIG5vZGVsaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBub2RlTGlzdCA9IG5ldyBOb2RlTGlzdCgpO1xuXG4gICAgICAgIG5vZGVMaXN0LmFkZChcbiAgICAgICAgICAgIChuZXcgTm9kZSgnMicpKS5hcHBlbmRDaGlsZChuZXcgTm9kZSgnMi4xJykpLmFwcGVuZENoaWxkKG5ldyBOb2RlKCcyLjInKSkuYXBwZW5kQ2hpbGQobmV3IE5vZGUoJzIuMycpKS5hcHBlbmRDaGlsZChuZXcgTm9kZSgnMycpKS5hcHBlbmRDaGlsZChuZXcgTm9kZSgnNCcpLmFwcGVuZENoaWxkKG5ldyBOb2RlKCc0LjEnKSkuYXBwZW5kQ2hpbGQobmV3IE5vZGUoJzQuMicpKSkpO1xuXG4gICAgICAgIG5vZGVMaXN0LmFkZChuZXcgTm9kZSgneCcpKTtcblxuICAgICAgICBjb25zdCBpdGVyYXRvciA9IG5ldyBOb2RlUmVjdXJzaXZlSXRlcmF0b3Iobm9kZUxpc3QpO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IG4gb2YgaXRlcmF0b3IpIHtcbiAgICAgICAgICAgIGV4cGVjdChuKS50by5iZS5hbi5pbnN0YW5jZW9mKE5vZGUpO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2gobi52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoWycyJywgJzIuMScsICcyLjInLCAnMi4zJywgJzMnLCAnNCcsICc0LjEnLCAnNC4yJywgJ3gnXSk7XG5cbiAgICB9KTtcblxufSk7IiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sLCBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vZGF0YS9leHRlbmQubWpzXCI7XG5cbmltcG9ydCB7IEZvcm1hdHRlciBhcyBUZXh0Rm9ybWF0dGVyIH0gZnJvbSBcIi4uL3RleHQvZm9ybWF0dGVyLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVJbnN0YW5jZSwgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGlvbnMgfSBmcm9tIFwiLi90cmFuc2xhdGlvbnMubWpzXCI7XG5cbmV4cG9ydCB7IEZvcm1hdHRlciB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpbnRlcm5hbFRyYW5zbGF0aW9uU3ltYm9sID0gU3ltYm9sKFwiaW50ZXJuYWxUcmFuc2xhdGlvblwiKTtcblxuLyoqXG4gKiBUaGUgRm9ybWF0dGVyIGV4dGVuZHMgdGhlIFRleHQuRm9ybWF0dGVyIHdpdGggdGhlIHBvc3NpYmlsaXR5IHRvIHJlcGxhY2UgdGhlIGtleSBieSBhIHRyYW5zbGF0aW9uLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjYuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuY2xhc3MgRm9ybWF0dGVyIGV4dGVuZHMgVGV4dEZvcm1hdHRlciB7XG5cdC8qKlxuXHQgKiBEZWZhdWx0IHZhbHVlcyBmb3IgdGhlIG1hcmtlcnMgYXJlIGAke2AgYW5kIGB9YFxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gb2JqZWN0XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgb2JqZWN0XG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihvYmplY3QsIHRyYW5zbGF0aW9uLCBvcHRpb25zKSB7XG5cdFx0c3VwZXIob2JqZWN0LCBvcHRpb25zKTtcblx0XHR0aGlzW2ludGVybmFsVHJhbnNsYXRpb25TeW1ib2xdID0gdmFsaWRhdGVJbnN0YW5jZShcblx0XHRcdHRyYW5zbGF0aW9uLFxuXHRcdFx0VHJhbnNsYXRpb25zLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDMuMjcuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9pMThuL2Zvcm1hdHRlckBAaW5zdGFuY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHtvYmplY3R9IG1hcmtlclxuXHQgKiBAcHJvcGVydHkge2FycmF5fSBtYXJrZXIub3Blbj1bXCJpMThue1wiLFwiJHtcIl1cblx0ICogQHByb3BlcnR5IHthcnJheX0gbWFya2VyLmNsb3NlPVtcIiR7XCJdXG5cdCAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBwYXJhbWV0ZXJcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHBhcmFtZXRlci5kZWxpbWl0ZXI9XCI6OlwiXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwYXJhbWV0ZXIuYXNzaWdubWVudD1cIj1cIlxuXHQgKiBAcHJvcGVydHkge29iamVjdH0gY2FsbGJhY2tzXG5cdCAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IGNhbGxiYWNrcy5pMThuPSgpPT57fVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBleHRlbmQoe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHRjYWxsYmFja3M6IHtcblx0XHRcdFx0aTE4bjogKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXNbaW50ZXJuYWxUcmFuc2xhdGlvblN5bWJvbF0uZ2V0VGV4dCh2YWxpZGF0ZVN0cmluZyh2YWx1ZSkpO1xuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdG1hcmtlcjoge1xuXHRcdFx0XHRvcGVuOiBbXCJpMThue1wiLCBcIiR7XCJdLFxuXHRcdFx0XHRjbG9zZTogW1wifVwiXSxcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRleHRcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdG9vIGRlZXAgbmVzdGluZ1xuXHQgKiBAdGhyb3dzIHtFcnJvcn0ga2V5IG5vdCBmb3VuZFxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIGNsb3NpbmcgbWFya2VyIGlzIG1pc3Npbmdcblx0ICovXG5cdGZvcm1hdCh0ZXh0KSB7XG5cdFx0dmFsaWRhdGVTdHJpbmcodGV4dCk7XG5cblx0XHRjb25zdCBvcGVuTWFya2VyID0gdGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJtYXJrZXJcIl1bXCJvcGVuXCJdPy5bMF07XG5cdFx0Y29uc3QgY2xvc2VNYXJrZXIgPSB0aGlzW2ludGVybmFsU3ltYm9sXVtcIm1hcmtlclwiXVtcImNsb3NlXCJdPy5bMF07XG5cblx0XHRpZiAodGV4dC5pbmRleE9mKG9wZW5NYXJrZXIpID09PSAwKSB7XG5cdFx0XHR0ZXh0ID0gdGV4dC5zdWJzdHJpbmcob3Blbk1hcmtlci5sZW5ndGgpO1xuXG5cdFx0XHRpZiAodGV4dC5pbmRleE9mKGNsb3NlTWFya2VyKSA9PT0gdGV4dC5sZW5ndGggLSBjbG9zZU1hcmtlci5sZW5ndGgpIHtcblx0XHRcdFx0dGV4dCA9IHRleHQuc3Vic3RyaW5nKDAsIHRleHQubGVuZ3RoIC0gY2xvc2VNYXJrZXIubGVuZ3RoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBjbG9zaW5nIG1hcmtlciBpcyBtaXNzaW5nXCIpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IHBhcnRzID0gdmFsaWRhdGVTdHJpbmcodGV4dCkuc3BsaXQoXCI6OlwiKTtcblx0XHRjb25zdCB0cmFuc2xhdGlvbktleSA9IHBhcnRzLnNoaWZ0KCkudHJpbSgpOyAvLyBrZXkgdmFsdWUgZGVsaW1pdGVyXG5cdFx0Y29uc3QgcGFyYW1ldGVyID0gcGFydHMuam9pbihcIjo6XCIpLnRyaW0oKTtcblxuXHRcdGxldCBhc3NlbWJsZWRUZXh0ID0gYCR7b3Blbk1hcmtlcn1zdGF0aWM6JHt0cmFuc2xhdGlvbktleX0gfCBjYWxsOmkxOG5gO1xuXHRcdGlmIChwYXJhbWV0ZXIubGVuZ3RoID4gMCkge1xuXHRcdFx0YXNzZW1ibGVkVGV4dCArPSBgOjoke3BhcmFtZXRlcn1gO1xuXHRcdH1cblx0XHRhc3NlbWJsZWRUZXh0ICs9IGNsb3NlTWFya2VyO1xuXHRcdHJldHVybiBzdXBlci5mb3JtYXQoYXNzZW1ibGVkVGV4dCk7XG5cdH1cbn1cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtGb3JtYXR0ZXJ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvaTE4bi9mb3JtYXR0ZXIubWpzXCI7XG5pbXBvcnQge1RyYW5zbGF0aW9uc30gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9pMThuL3RyYW5zbGF0aW9ucy5tanNcIjtcblxuXG5kZXNjcmliZSgnRm9ybWF0dGVyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJ2V4YW1wbGUnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBydW4gd2l0aCBtYXJrZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IHRyYW5zbGF0aW9ucyA9IG5ldyBUcmFuc2xhdGlvbnMoJ2VuJylcbiAgICAgICAgICAgICAgICAuYXNzaWduVHJhbnNsYXRpb25zKHtcbiAgICAgICAgICAgICAgICAgICAgdGhla2V5OiBcIiR7YW5pbWFsfSBoYXMgZWF0ZW4gdGhlICR7Zm9vZH0hXCJcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgZiA9IG5ldyBGb3JtYXR0ZXIoe30sIHRyYW5zbGF0aW9ucyk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGV4cGVjdChmLmZvcm1hdChcImkxOG57dGhla2V5OjphbmltYWw9ZG9nOjpmb29kPWNha2V9XCIpKS50by5iZS5lcXVhbCgnZG9nIGhhcyBlYXRlbiB0aGUgY2FrZSEnKTtcbiAgICAgICAgICAgIC8vIFx1MjFBNiBkb2cgaGFzIGVhdGVuIHRoZSBjYWtlISAgICAgICAgICAgICAgICBcblxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIGl0KCdzaG91bGQgcnVuIHdpdGhvdXQgbWFya2VyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBjb25zdCB0cmFuc2xhdGlvbnMgPSBuZXcgVHJhbnNsYXRpb25zKCdlbicpXG4gICAgICAgICAgICAgICAgLmFzc2lnblRyYW5zbGF0aW9ucyh7XG4gICAgICAgICAgICAgICAgICAgIHRoZWtleTogXCIke2FuaW1hbH0gaGFzIGVhdGVuIHRoZSAke2Zvb2R9IVwiXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIG1pc3NpbmcgbWFya2VyXG4gICAgICAgICAgICBleHBlY3QobmV3IEZvcm1hdHRlcih7fSwgdHJhbnNsYXRpb25zKS5mb3JtYXQoXCJ0aGVrZXk6OmFuaW1hbD1kb2c6OmZvb2Q9Y2FrZVwiKSkudG8uYmUuZXF1YWwoJ2RvZyBoYXMgZWF0ZW4gdGhlIGNha2UhJyk7XG4gICAgICAgICAgICAvLyBcdTIxQTYgZG9nIGhhcyBlYXRlbiB0aGUgY2FrZSEgICAgICAgICAgICAgICAgXG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxuICAgIGRlc2NyaWJlKCdmb3JtYXQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWydpMThue3RyYW5zbGF0aW9ua2V5OjphPTM6OmI9NX0nLCAndGVzdCBpcyAzIGFuZCA1J10sXG5cbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnZm9ybWF0ICcgKyBhICsgJyBzaG91bGQgJyArIGIsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zbGF0aW9ucyA9IG5ldyBUcmFuc2xhdGlvbnMoJ2RlJykuYXNzaWduVHJhbnNsYXRpb25zKHtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb25rZXk6IFwidGVzdCBpcyAke2F9IGFuZCAke2J9XCJcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgZXhwZWN0KFxuICAgICAgICAgICAgICAgICAgICBuZXcgRm9ybWF0dGVyKHt9LCB0cmFuc2xhdGlvbnMpLmZvcm1hdChhKVxuICAgICAgICAgICAgICAgICkudG8uZXF1YWwoYilcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuXG4gICAgfSlcblxuXG59KVxuOyIsICJcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7cGFyc2VMb2NhbGUsIExvY2FsZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9pMThuL2xvY2FsZS5tanNcIjtcblxuXG5kZXNjcmliZSgnTG9jYWxlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJ25ldyBpbnN0YW5jZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICAvLyBsYW5ndWFnZSwgcmVnaW9uLCBzY3JpcHQsIHZhcmlhbnRzLCBleHRsYW5nLCBwcml2YXRlVXNlXG4gICAgICAgICAgICAvLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNTY0Ni5odG1sXG4gICAgICAgICAgICBbJ3poJywgdW5kZWZpbmVkLCAnSGFudCcsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsICd6aC1IYW50J10sIC8vIHpoLUhhbnQgKENoaW5lc2Ugd3JpdHRlbiB1c2luZyB0aGUgVHJhZGl0aW9uYWwgQ2hpbmVzZSBzY3JpcHQpXG4gICAgICAgICAgICBbJ2RlJywgJ0NIJywgdW5kZWZpbmVkLCAnMTkwMScsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnZGUtQ0gtMTkwMSddLCAgLy8gZGUtQ0gtMTkwMSAoR2VybWFuIGFzIHVzZWQgaW4gU3dpdHplcmxhbmQgdXNpbmcgdGhlIDE5MDEgdmFyaWFudCBbb3J0aG9ncmFwaHldKVxuICAgICAgICAgICAgWydzbCcsICdJVCcsIHVuZGVmaW5lZCwgJ25lZGlzJywgdW5kZWZpbmVkLCB1bmRlZmluZWQsICdzbC1JVC1uZWRpcyddLCAgLy8gc2wtSVQtbmVkaXMgKFNsb3ZlbmlhbiBhcyB1c2VkIGluIEl0YWx5LCBOYWRpemEgZGlhbGVjdClcbiAgICAgICAgICAgIFsnaHknLCAnSVQnLCAnTGF0bicsICdhcmV2ZWxhJywgdW5kZWZpbmVkLCB1bmRlZmluZWQsICdoeS1MYXRuLUlULWFyZXZlbGEnXSwgLy8gaHktTGF0bi1JVC1hcmV2ZWxhIChFYXN0ZXJuIEFybWVuaWFuIHdyaXR0ZW4gaW4gTGF0aW4gc2NyaXB0LCBhcyB1c2VkIGluIEl0YWx5KVxuICAgICAgICAgICAgWyd6aCcsICdDTicsICdIYW5zJywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgJ3poLUhhbnMtQ04nXSwgLy8gemgtSGFucy1DTiAoQ2hpbmVzZSB3cml0dGVuIHVzaW5nIHRoZSBTaW1wbGlmaWVkIHNjcmlwdCBhcyB1c2VkIGluICBtYWlubGFuZCBDaGluYSlcbiAgICAgICAgICAgIFsnc3InLCAnUlMnLCAnTGF0bicsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsICdzci1MYXRuLVJTJ10sIC8vIHNyLUxhdG4tUlMgKFNlcmJpYW4gd3JpdHRlbiB1c2luZyB0aGUgTGF0aW4gc2NyaXB0IGFzIHVzZWQgaW4gU2VyYmlhKVxuXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgZCA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGUgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBmID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgZyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnbmV3IExvY2FsZSgnICsgYSArICcsJyArIGIgKyAnLCcgKyBjICsgJywnICsgZCArICcsJyArIGUgKyAnLCcgKyBmICsgJykgc2hvdWxkIHJldHVybiAnICsgZywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBMb2NhbGUoYSwgYiwgYywgZCwgZSwgZikudG9TdHJpbmcoKSkuaXMuZXF1YWwoZylcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3BhcnNlTG9jYWxlKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuXG4gICAgICAgICAgICAvLyBsYW5ndWFnZSwgcmVnaW9uLCBzY3JpcHQsIHZhcmlhbnRzLCBleHRsYW5nLCBwcml2YXRlVXNlXG4gICAgICAgICAgICAvLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNTY0Ni5odG1sXG4gICAgICAgICAgICBbJ3poJywgdW5kZWZpbmVkLCAnSGFudCcsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsICd6aC1IYW50J10sIC8vIHpoLUhhbnQgKENoaW5lc2Ugd3JpdHRlbiB1c2luZyB0aGUgVHJhZGl0aW9uYWwgQ2hpbmVzZSBzY3JpcHQpXG4gICAgICAgICAgICBbJ2RlJywgJ0NIJywgdW5kZWZpbmVkLCAnMTkwMScsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnZGUtQ0gtMTkwMSddLCAgLy8gZGUtQ0gtMTkwMSAoR2VybWFuIGFzIHVzZWQgaW4gU3dpdHplcmxhbmQgdXNpbmcgdGhlIDE5MDEgdmFyaWFudCBbb3J0aG9ncmFwaHldKVxuICAgICAgICAgICAgWydzbCcsICdJVCcsIHVuZGVmaW5lZCwgJ25lZGlzJywgdW5kZWZpbmVkLCB1bmRlZmluZWQsICdzbC1JVC1uZWRpcyddLCAgLy8gc2wtSVQtbmVkaXMgKFNsb3ZlbmlhbiBhcyB1c2VkIGluIEl0YWx5LCBOYWRpemEgZGlhbGVjdClcbiAgICAgICAgICAgIFsnaHknLCAnSVQnLCAnTGF0bicsICdhcmV2ZWxhJywgdW5kZWZpbmVkLCB1bmRlZmluZWQsICdoeS1MYXRuLUlULWFyZXZlbGEnXSwgLy8gaHktTGF0bi1JVC1hcmV2ZWxhIChFYXN0ZXJuIEFybWVuaWFuIHdyaXR0ZW4gaW4gTGF0aW4gc2NyaXB0LCBhcyB1c2VkIGluIEl0YWx5KVxuICAgICAgICAgICAgWyd6aCcsICdDTicsICdIYW5zJywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgJ3poLUhhbnMtQ04nXSwgLy8gemgtSGFucy1DTiAoQ2hpbmVzZSB3cml0dGVuIHVzaW5nIHRoZSBTaW1wbGlmaWVkIHNjcmlwdCBhcyB1c2VkIGluICBtYWlubGFuZCBDaGluYSlcbiAgICAgICAgICAgIFsnc3InLCAnUlMnLCAnTGF0bicsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsICdzci1MYXRuLVJTJ10sIC8vIHNyLUxhdG4tUlMgKFNlcmJpYW4gd3JpdHRlbiB1c2luZyB0aGUgTGF0aW4gc2NyaXB0IGFzIHVzZWQgaW4gU2VyYmlhKVxuXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgZCA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGUgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBmID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgZyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnbmV3IExvY2FsZSgnICsgYSArICcsJyArIGIgKyAnLCcgKyBjICsgJywnICsgZCArICcsJyArIGUgKyAnLCcgKyBmICsgJykgc2hvdWxkIHJldHVybiAnICsgZywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgY29uc3QgbG9jYWxlID0gcGFyc2VMb2NhbGUoZylcbiAgICAgICAgICAgICAgICBleHBlY3QobG9jYWxlLmxvY2FsZVN0cmluZykudG8uYmUuZXF1YWwoZyk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGxvY2FsZS5sYW5ndWFnZSkudG8uYmUuZXF1YWwoYSk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGxvY2FsZS5yZWdpb24pLnRvLmJlLmVxdWFsKGIpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChsb2NhbGUuc2NyaXB0KS50by5iZS5lcXVhbChjKTtcbiAgICAgICAgICAgICAgICBleHBlY3QobG9jYWxlLnZhcmlhbnRzKS50by5iZS5lcXVhbChkKTtcbiAgICAgICAgICAgICAgICBleHBlY3QobG9jYWxlLmV4dGxhbmcpLnRvLmJlLmVxdWFsKGUpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChsb2NhbGUucHJpdmF0ZVVzZSkudG8uYmUuZXF1YWwoZik7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QobmV3IExvY2FsZShhLCBiLCBjLCBkLCBlLCBmKS50b1N0cmluZygpKS5pcy5lcXVhbChnKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxufSk7IiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge0FUVFJJQlVURV9PQkpFQ1RMSU5LfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge2dldExpbmtlZE9iamVjdHN9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge1Byb3ZpZGVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2kxOG4vcHJvdmlkZXIubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5pbXBvcnQge2dldERvY3VtZW50VHJhbnNsYXRpb25zLCBUcmFuc2xhdGlvbnN9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvaTE4bi90cmFuc2xhdGlvbnMubWpzXCI7XG5cbmRlc2NyaWJlKCdQcm92aWRlcicsIGZ1bmN0aW9uICgpIHtcblxuXG4gICAgbGV0IGh0bWwxID0gYFxuICAgIDxkaXYgaWQ9XCJ0ZXN0MVwiPlxuICAgIDwvZGl2PlxuYDtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG5cblxuICAgIH0pXG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICB9KVxuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ1Byb3ZpZGVyIGFuZCBEb20nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgY29uc3QgdHJhbnNsYXRpb25zTGlua1N5bWJvbCA9IFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2kxOG4vdHJhbnNsYXRpb25zQEBsaW5rXCIpO1xuXG4gICAgICAgIGl0KCdhc3NpZ25Ub0VsZW1lbnQnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpO1xuICAgICAgICAgICAgY29uc3QgcCA9IG5ldyBQcm92aWRlcigpO1xuICAgICAgICAgICAgY29uc3QgciA9IHAuYXNzaWduVG9FbGVtZW50KHVuZGVmaW5lZCwgZWxlbWVudCk7XG5cbiAgICAgICAgICAgIHIudGhlbigoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHMgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfT0JKRUNUTElOSyk7XG4gICAgICAgICAgICAgICAgaWYgKHMgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoXCJBdHRyaWJ1dGUgbm90IHNldFwiKSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBpID0gZ2V0TGlua2VkT2JqZWN0cyhlbGVtZW50LCB0cmFuc2xhdGlvbnNMaW5rU3ltYm9sKVxuICAgICAgICAgICAgICAgIGlmIChpID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUobmV3IEVycm9yKFwiTm8gbGlua2VkIG9iamVjdCBmb3VuZFwiKSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IGNvdW50ZXIgPSAwO1xuXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgdiBvZiBpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50ZXIrKztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoY291bnRlciAhPT0gMSkge1xuICAgICAgICAgICAgICAgICAgICBkb25lKG5ldyBFcnJvcihcIk5vIGxpbmtlZCBvYmplY3QgZm91bmRcIikpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgZG9jVHJhbnMgPSBnZXREb2N1bWVudFRyYW5zbGF0aW9ucyhlbGVtZW50KVxuICAgICAgICAgICAgICAgIGV4cGVjdChkb2NUcmFucykuaXMuaW5zdGFuY2VvZihUcmFuc2xhdGlvbnMpO1xuXG5cbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxufSk7IiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi8uLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IEZvcm1hdHRlciB9IGZyb20gXCIuLi8uLi90ZXh0L2Zvcm1hdHRlci5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbEZ1bmN0aW9uIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IGlzSW5zdGFuY2UsIGlzU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVPYmplY3QsIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgcGFyc2VMb2NhbGUgfSBmcm9tIFwiLi4vbG9jYWxlLm1qc1wiO1xuaW1wb3J0IHsgUHJvdmlkZXIgfSBmcm9tIFwiLi4vcHJvdmlkZXIubWpzXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGlvbnMgfSBmcm9tIFwiLi4vdHJhbnNsYXRpb25zLm1qc1wiO1xuXG5leHBvcnQgeyBGZXRjaCB9O1xuXG4vKipcbiAqIFRoZSBmZXRjaCBwcm92aWRlciByZXRyaWV2ZXMgYSBKU09OIGZpbGUgZnJvbSB0aGUgZ2l2ZW4gVVJMIGFuZCByZXR1cm5zIGEgdHJhbnNsYXRpb24gb2JqZWN0LlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vLi4vZXhhbXBsZS9pMThuL3Byb3ZpZGVycy9mZXRjaC5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMzA2Nn1cbiAqIEB0dXRvcmlhbCBpMThuLWxvY2FsZS1hbmQtZm9ybWF0dGVyXG4gKi9cbmNsYXNzIEZldGNoIGV4dGVuZHMgUHJvdmlkZXIge1xuXHQvKipcblx0ICogQXMgb3B0aW9ucyB0aGUga2V5IGBmZXRjaGAgY2FuIGJlIHBhc3NlZC4gVGhpcyBjb25maWcgb2JqZWN0IGlzIHBhc3NlZCB0byB0aGUgZmV0Y2ggbWV0aG9kIGFzIGluaXQuXG5cdCAqXG5cdCAqIFRoZSB1cmwgbWF5IGNvbnRhaW4gcGxhY2Vob2xkZXJzIChsYW5ndWFnZSwgc2NyaXB0LCByZWdpb24sIHZhcmlhbnRzLCBleHRsYW5nLCBwcml2YXRlVXNlKSwgc28geW91IGNhbiBzcGVjaWZ5IG9uZSB1cmwgZm9yIGFsbCB0cmFuc2xhdGlvbnMuXG5cdCAqXG5cdCAqIGBgYFxuXHQgKiBuZXcgRmV0Y2goJ2h0dHBzOi8vd3d3LmV4YW1wbGUuY29tL2Fzc2V0cy8ke2xhbmd1YWdlfS5qc29uJylcblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gdXJsXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIHNlZSB7QGxpbmsgTW9uc3Rlci5JMThuLlByb3ZpZGVycy5GZXRjaCNkZWZhdWx0c31cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL2ZldGNofVxuXHQgKi9cblx0Y29uc3RydWN0b3IodXJsLCBvcHRpb25zKSB7XG5cdFx0c3VwZXIob3B0aW9ucyk7XG5cblx0XHRpZiAoaXNJbnN0YW5jZSh1cmwsIFVSTCkpIHtcblx0XHRcdHVybCA9IHVybC50b1N0cmluZygpO1xuXHRcdH1cblxuXHRcdGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpIHtcblx0XHRcdG9wdGlvbnMgPSB7fTtcblx0XHR9XG5cblx0XHR2YWxpZGF0ZVN0cmluZyh1cmwpO1xuXG5cdFx0LyoqXG5cdFx0ICogQHByb3BlcnR5IHtzdHJpbmd9XG5cdFx0ICovXG5cdFx0dGhpcy51cmwgPSB1cmw7XG5cblx0XHQvKipcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBvcHRpb25zXG5cdFx0ICovXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSBleHRlbmQoXG5cdFx0XHR7fSxcblx0XHRcdHN1cGVyLmRlZmF1bHRzLFxuXHRcdFx0dGhpcy5kZWZhdWx0cyxcblx0XHRcdHZhbGlkYXRlT2JqZWN0KG9wdGlvbnMpLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogRGVmYXVsdHNcblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZldGNoXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5tZXRob2Q9R0VUXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5tb2RlPWNvcnNcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLmNhY2hlPW5vLWNhY2hlXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5jcmVkZW50aWFscz1vbWl0XG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5yZWRpcmVjdD1mb2xsb3dcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLnJlZmVycmVyUG9saWN5PW5vLXJlZmVycmVyXG5cdCAqXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GZXRjaF9BUEl9XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIGV4dGVuZChcblx0XHRcdHtcblx0XHRcdFx0ZmV0Y2g6IHtcblx0XHRcdFx0XHRtZXRob2Q6IFwiR0VUXCIsIC8vICpHRVQsIFBPU1QsIFBVVCwgREVMRVRFLCBldGMuXG5cdFx0XHRcdFx0bW9kZTogXCJjb3JzXCIsIC8vIG5vLWNvcnMsICpjb3JzLCBzYW1lLW9yaWdpblxuXHRcdFx0XHRcdGNhY2hlOiBcIm5vLWNhY2hlXCIsIC8vICpkZWZhdWx0LCBuby1jYWNoZSwgcmVsb2FkLCBmb3JjZS1jYWNoZSwgb25seS1pZi1jYWNoZWRcblx0XHRcdFx0XHRjcmVkZW50aWFsczogXCJvbWl0XCIsIC8vIGluY2x1ZGUsICpzYW1lLW9yaWdpbiwgb21pdFxuXHRcdFx0XHRcdHJlZGlyZWN0OiBcImZvbGxvd1wiLCAvLyBtYW51YWwsICpmb2xsb3csIGVycm9yXG5cdFx0XHRcdFx0cmVmZXJyZXJQb2xpY3k6IFwibm8tcmVmZXJyZXJcIiwgLy8gbm8tcmVmZXJyZXIsICpuby1yZWZlcnJlci13aGVuLWRvd25ncmFkZSwgb3JpZ2luLCBvcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4sIHNhbWUtb3JpZ2luLCBzdHJpY3Qtb3JpZ2luLCBzdHJpY3Qtb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luLCB1bnNhZmUtdXJsXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdFx0c3VwZXIuZGVmYXVsdHMsXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge0xvY2FsZXxzdHJpbmd9IGxvY2FsZVxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0Z2V0VHJhbnNsYXRpb25zKGxvY2FsZSkge1xuXHRcdGlmIChpc1N0cmluZyhsb2NhbGUpKSB7XG5cdFx0XHRsb2NhbGUgPSBwYXJzZUxvY2FsZShsb2NhbGUpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGZvcm1hdHRlciA9IG5ldyBGb3JtYXR0ZXIobG9jYWxlLmdldE1hcCgpKTtcblxuXHRcdHJldHVybiBnZXRHbG9iYWxGdW5jdGlvbihcImZldGNoXCIpKFxuXHRcdFx0Zm9ybWF0dGVyLmZvcm1hdCh0aGlzLnVybCksXG5cdFx0XHR0aGlzLmdldE9wdGlvbihcImZldGNoXCIsIHt9KSxcblx0XHQpXG5cdFx0XHQudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmpzb24oKSlcblx0XHRcdC50aGVuKChkYXRhKSA9PiB7XG5cdFx0XHRcdHJldHVybiBuZXcgVHJhbnNsYXRpb25zKGxvY2FsZSkuYXNzaWduVHJhbnNsYXRpb25zKGRhdGEpO1xuXHRcdFx0fSk7XG5cdH1cbn1cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5cbmltcG9ydCB7RmV0Y2h9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvaTE4bi9wcm92aWRlcnMvZmV0Y2gubWpzXCI7XG5pbXBvcnQge1RyYW5zbGF0aW9uc30gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS9pMThuL3RyYW5zbGF0aW9ucy5tanNcIjtcbmltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcblxuXG5jb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcbmxldCBmZXRjaFJlZmVyZW5jZTtcblxuXG5kZXNjcmliZSgnVHJhbnNsYXRpb24gUHJvdmlkZXIgRmV0Y2gnLCBmdW5jdGlvbiAoKSB7XG5cblxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgIGdsb2JhbFsnZmV0Y2gnXSA9IGZldGNoUmVmZXJlbmNlO1xuICAgIH0pO1xuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgZmV0Y2hSZWZlcmVuY2UgPSBnbG9iYWxbJ2ZldGNoJ107XG4gICAgICAgIGdsb2JhbFsnZmV0Y2gnXSA9IGZ1bmN0aW9uICh1cmwsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgIGpzb246IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYTogXCJ0ZXN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICB9O1xuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdmZXRjaCBtb2NrIGRhdGEgYW5kIGNyZWF0ZSB0cmFuc2xhdGlvbicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnZmV0Y2gnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBsZXQgcCA9IChuZXcgRmV0Y2gobmV3IFVSTCgnaHR0cDovL2V4YW1wbGUuY29tJykpKS5nZXRUcmFuc2xhdGlvbnMoJ2VuJyk7XG5cbiAgICAgICAgICAgIGV4cGVjdChwKS5pcy5pbnN0YW5jZW9mKFByb21pc2UpO1xuXG4gICAgICAgICAgICBwLnRoZW4ociA9PiB7XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QocikuaXMuaW5zdGFuY2VvZihUcmFuc2xhdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pOyIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5cbmltcG9ydCB7RW1iZWR9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvaTE4bi9wcm92aWRlcnMvZW1iZWQubWpzXCI7XG5pbXBvcnQge1RyYW5zbGF0aW9uc30gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS9pMThuL3RyYW5zbGF0aW9ucy5tanNcIjtcbmltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxuXG5jb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcblxuY29uc3QgaHRtbDEgPSBgXG48c2NyaXB0IGlkPVwidGVtcGxvY2FsZVwiIHR5cGU9XCJhcHBsaWNhdGlvbi9qc29uXCI+XG57XG4gICAgICAgIFwia2V5XCI6IFwidHJhbnNsYXRpb25cIlxufVxuPC9zY3JpcHQ+XG5gO1xuXG5kZXNjcmliZSgnVHJhbnNsYXRpb24gUHJvdmlkZXIgRW1iZWQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKClcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgIH0pO1xuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnZ2V0IG1vY2sgZGF0YSBhbmQgY3JlYXRlIHRyYW5zbGF0aW9uJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdlbWJlZCcsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IGUgPSBuZXcgRW1iZWQoJ3RlbXBsb2NhbGUnKTtcbiAgICAgICAgICAgIGxldCBwID0gZS5nZXRUcmFuc2xhdGlvbnMoJ2VuJyk7XG4gICAgICAgICAgICBleHBlY3QocCkuaXMuaW5zdGFuY2VvZihQcm9taXNlKTtcblxuICAgICAgICAgICAgcC50aGVuKHIgPT4ge1xuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHIpLmlzLmluc3RhbmNlb2YoVHJhbnNsYXRpb25zKTtcbiBcbiAgICAgICAgICAgICAgICAgICAgbGV0IHQgPSByLmdldFRleHQoJ2tleScpXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCh0KS5pcy5lcXVhbCgndHJhbnNsYXRpb24nKTtcblxuXG4gICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoZSk7XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxufSk7IiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge3BhcnNlTG9jYWxlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2kxOG4vbG9jYWxlLm1qc1wiO1xuaW1wb3J0IHtFbWJlZH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9pMThuL3Byb3ZpZGVycy9lbWJlZC5tanNcIjtcbmltcG9ydCB7XG4gICAgVHJhbnNsYXRpb25zLFxuICAgIGdldERvY3VtZW50VHJhbnNsYXRpb25zXG4gICAgXG59IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvaTE4bi90cmFuc2xhdGlvbnMubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmRlc2NyaWJlKCdUcmFuc2xhdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnSW5zdGFuY2UgYW5kIEluaXQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IHRyYW5zbGF0aW9uO1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgdHJhbnNsYXRpb24gPSBuZXcgVHJhbnNsYXRpb25zKHBhcnNlTG9jYWxlKCdlbi1HQicpKTtcblxuICAgICAgICAgICAgdHJhbnNsYXRpb24uYXNzaWduVHJhbnNsYXRpb25zKHtcbiAgICAgICAgICAgICAgICB0ZXN0MTogXCJhYmNcIixcbiAgICAgICAgICAgICAgICB0ZXN0MjogeydvdGhlcic6ICd4eXonfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ2NyZWF0ZSBpbnN0YW5jZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgVHJhbnNsYXRpb25zKHBhcnNlTG9jYWxlKCdlbi1HQicpKSkuaXMuaW5zdGFuY2VvZihUcmFuc2xhdGlvbnMpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnaW5pdCB0cmFuc2xhdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QodHJhbnNsYXRpb24uYXNzaWduVHJhbnNsYXRpb25zKHtcbiAgICAgICAgICAgICAgICB0ZXN0MTogXCJhYmNcIixcbiAgICAgICAgICAgICAgICB0ZXN0MjogeydvdGhlcic6ICd4eXonfVxuICAgICAgICAgICAgfSkpLmlzLmluc3RhbmNlb2YoVHJhbnNsYXRpb25zKTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdnZXRUZXh0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCB0cmFuc2xhdGlvbjtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uID0gbmV3IFRyYW5zbGF0aW9ucyhwYXJzZUxvY2FsZSgnZW4tR0InKSk7XG5cbiAgICAgICAgICAgIHRyYW5zbGF0aW9uLmFzc2lnblRyYW5zbGF0aW9ucyh7XG4gICAgICAgICAgICAgICAgdGVzdDE6IFwiYWJjXCIsXG4gICAgICAgICAgICAgICAgdGVzdDI6IHsnb3RoZXInOiAneHl6J31cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdjcmVhdGUsIHNldCBhbmQgZ2V0IGVuLUdCJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHRyYW5zbGF0aW9uLmdldFRleHQoJ3Rlc3QxJykpLmlzLmVxdWFsKCdhYmMnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ2NyZWF0ZSwgc2V0IGFuZCBnZXQgIGVuLUdCIHdpdGggcGx1cmFscnVsZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QodHJhbnNsYXRpb24uZ2V0VGV4dCgndGVzdDInKSkuaXMuZXF1YWwoJ3h5eicpXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBpbml0RG9jdW1lbnRUcmFuc2xhdGlvblxuICAgICAqL1xuXG4gICAgZGVzY3JpYmUoXCJ0ZXN0IGluaXREb2N1bWVudFRyYW5zbGF0aW9uIFwiLCBmdW5jdGlvbiAoKSB7XG5cblxuICAgICAgICBsZXQgaHRtbDEgPSBgPGRpdiBpZD1cIm1vY2stdHJhbnNsYXRpb25zXCI+PC9kaXY+XG4gICAgXG48c2NyaXB0IHR5cGU9XCJhcHBsaWNhdGlvbi9qc29uXCIgZGF0YS1tb25zdGVyLXJvbGU9XCJ0cmFuc2xhdGlvbnNcIj5cbiAgICB7XG4gICAgICAgIFwidGVzdDFcIjogXCJhYmNcIixcbiAgICAgICAgXCJ0ZXN0MlwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwieHl6XCJcbiAgICAgICAgfVxuICAgIH1cbjwvc2NyaXB0PlxuXG48c2NyaXB0IHR5cGU9XCJhcHBsaWNhdGlvbi9qc29uXCIgZGF0YS1tb25zdGVyLXJvbGU9XCJ0cmFuc2xhdGlvbnNcIj5cbiAgICB7XG4gICAgICAgIFwidGVzdDFcIjogXCJ4eXpcIixcbiAgICAgICAgXCJ0ZXN0M1wiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwieHl6XCJcbiAgICAgICAgfVxuICAgIH1cbjwvc2NyaXB0PiAgICBcbiAgICBcbmA7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuXG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICAgICAgaXQoJ0luaXQgdHJhbnNsYXRpb25zJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgbGV0IGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9jay10cmFuc2xhdGlvbnMnKTtcbiAgICAgICAgICAgIEVtYmVkLmFzc2lnblRyYW5zbGF0aW9uc1RvRWxlbWVudChlbGVtKS50aGVuKChvKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBubyBleGNlcHRpb24gYmVjYXVzZSBvZiBkZWZhdWx0XG4gICAgICAgICAgICAgICAgZXhwZWN0KGdldERvY3VtZW50VHJhbnNsYXRpb25zKGVsZW0pLmdldFRleHQoJ25vLWtleScsJ3dpdGgtZGVmYXVsdCcpKVxuICAgICAgICAgICAgICAgICAgICAuaXMuZXF1YWwoJ3dpdGgtZGVmYXVsdCcpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGV4cGVjdChnZXREb2N1bWVudFRyYW5zbGF0aW9ucyhlbGVtKS5nZXRUZXh0KCd0ZXN0MScpKVxuICAgICAgICAgICAgICAgICAgICAuaXMuZXF1YWwoJ3h5eicpO1xuXG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuXG4gICAgICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICAgICAgfSlcblxuXG4gICAgICAgIH0pO1xuICAgIH0pXG5cblxufSk7Il0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF5Q0EsV0FBUyxXQUFXLE9BQU87QUFDMUIsUUFBSSxVQUFVLE9BQVcsUUFBTztBQUNoQyxRQUFJLFVBQVUsS0FBTSxRQUFPO0FBQzNCLFdBQU8sT0FBTyxRQUFRLE9BQU8sUUFBUSxNQUFNO0FBQUEsRUFDNUM7QUFjQSxXQUFTLFlBQVksT0FBTztBQUMzQixRQUFJQTtBQUVKLFFBQUksVUFBVSxVQUFhLFVBQVUsTUFBTTtBQUMxQyxhQUFPO0FBQUEsSUFDUjtBQUVBLElBQUFBLFFBQU8sT0FBTztBQUVkLFFBQ0NBLFVBQVMsWUFDVEEsVUFBUyxZQUNUQSxVQUFTLGFBQ1RBLFVBQVMsVUFDUjtBQUNELGFBQU87QUFBQSxJQUNSO0FBRUEsV0FBTztBQUFBLEVBQ1I7QUFjQSxXQUFTLFNBQVMsT0FBTztBQUN4QixXQUFPLGFBQWEsT0FBTyxRQUFRLE9BQU87QUFBQSxFQUMzQztBQWNBLFdBQVMsVUFBVSxPQUFPO0FBQ3pCLFFBQUksVUFBVSxRQUFRLFVBQVUsT0FBTztBQUN0QyxhQUFPO0FBQUEsSUFDUjtBQUVBLFdBQU87QUFBQSxFQUNSO0FBY0EsV0FBUyxTQUFTLE9BQU87QUFDeEIsUUFBSSxVQUFVLFVBQWEsT0FBTyxVQUFVLFVBQVU7QUFDckQsYUFBTztBQUFBLElBQ1I7QUFDQSxXQUFPO0FBQUEsRUFDUjtBQWNBLFdBQVMsU0FBUyxPQUFPO0FBQ3hCLFFBQUksUUFBUSxLQUFLLEVBQUcsUUFBTztBQUMzQixRQUFJLFlBQVksS0FBSyxFQUFHLFFBQU87QUFFL0IsUUFBSSxPQUFPLFVBQVUsVUFBVTtBQUM5QixhQUFPO0FBQUEsSUFDUjtBQUVBLFdBQU87QUFBQSxFQUNSO0FBZUEsV0FBUyxXQUFXLE9BQU8sVUFBVTtB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QUc7QUFBQSxVQUNILEdBQUc7QUFBQSxRQUNQO0FBQUEsUUFDQTtBQUFBLFVBQ0ksR0FBRztBQUFBLFVBQ0gsR0FBRztBQUFBLFFBQ1A7QUFBQSxRQUNBLDBEQUEwRCxNQUFNLFlBQVksSUFBSTtBQUFBLE1BQ3BGO0FBQUEsTUFFQTtBQUFBLFFBQ0k7QUFBQSxVQUNJLEdBQUc7QUFBQSxRQUNQO0FBQUEsUUFDQTtBQUFBLFVBQ0ksR0FBRztBQUFBLFFBQ1A7QUFBQSxRQUNBO0FBQUEsTUFDSjtBQUFBLE1BQ0E7QUFBQSxRQUNJO0FBQUEsVUFDSSxHQUFHO0FBQUEsUUFDUDtBQUFBLFFBQ0E7QUFBQSxVQUNJLEdBQUc7QUFBQSxRQUNQO0FBQUEsUUFDQTtBQUFBLE1BQ0o7QUFBQSxNQUNBO0FBQUEsUUFDSSxDQUFDO0FBQUEsUUFDRDtBQUFBLFVBQ0ksR0FBRztBQUFBLFFBQ1A7QUFBQSxRQUNBO0FBQUEsTUFDSjtBQUFBLE1BRUE7QUFBQSxRQUNJO0FBQUEsVUFDSSxHQUFHO0FBQUEsUUFDUDtBQUFBLFFBQ0E7QUFBQSxVQUNJLEdBQUc7QUFBQSxRQUNQO0FBQUEsUUFDQTtBQUFBLE1BQ0o7QUFBQSxNQUVBO0FBQUEsUUFDSTtBQUFBLFVBQ0ksR0FBRztBQUFBLFFBQ1A7QUFBQSxRQUNBO0FBQUEsVUFDSSxHQUFHO0FBQUEsUUFDUDtBQUFBLFFBQ0E7QUFBQSxNQUNKO0FBQUEsTUFFQTtBQUFBLFFBQ0k7QUFBQSxVQUNJLEdBQUc7QUFBQSxRQUNQO0FBQUEsUUFDQTtBQUFBLFVBQ0ksR0FBRztBQUFBLFFBQ1A7QUFBQSxRQUNBO0FBQUEsTUFDSjtBQUFBLE1BRUE7QUFBQSxRQUNJO0FBQUEsVUFDSSxHQUFHO0FBQUEsUUFDUDtBQUFBLFFBQ0E7QUFBQSxVQUNJLEdBQUc7QUFBQSxVQUNILEdBQUc7QUFBQSxRQUNQO0FBQUEsUUFDQTtBQUFBLE1BQ0o7QUFBQSxNQUNBO0FBQUEsUUFDSTtBQUFBLFVBQ0ksR0FBRztBQUFBLFFBQ1A7QUFBQSxRQUNBLENBQUM7QUFBQSxRQUNEO0FBQUEsTUFDSjtBQUFB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QUFDM0MsY0FBTSxZQUFZQTtBQUFBLE1BRXRCLENBQUM7QUFFRCxnQkFBVSxNQUFNO0FBQ1osWUFBSSxRQUFRLFNBQVMsZUFBZSxPQUFPO0FBQzNDLGNBQU0sWUFBWTtBQUFBLE1BQ3RCLENBQUM7QUFFRCxhQUFPLFNBQVUsTUFBTTtBQUNuQixrQkFBVSxFQUFFLEtBQUssTUFBTTtBQUNuQixlQUFLO0FBQUEsUUFDVCxDQUFDO0FBQUEsTUFDTCxDQUFDO0FBR0QsU0FBRyxxQkFBcUIsU0FBVSxNQUFNO0FBRXBDLFlBQUksT0FBTyxTQUFTLGVBQWUsbUJBQW1CO0FBQ3RELGNBQU0sNEJBQTRCLElBQUksRUFBRSxLQUFLLENBQUMsTUFBTTtBQUVoRCxjQUFJLFFBQVEsU0FBUyxlQUFlLE9BQU87QUFHM0MsaUJBQU8sd0JBQXdCLElBQUksRUFBRSxRQUFRLFVBQVMsY0FBYyxDQUFDLEVBQ2hFLEdBQUcsTUFBTSxjQUFjO0FBRTVCLGlCQUFPLHdCQUF3QixJQUFJLEVBQUUsUUFBUSxPQUFPLENBQUMsRUFDaEQsR0FBRyxNQUFNLEtBQUs7QUFFbkIsZUFBSztBQUFBLFFBRVQsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNO0FBQ2QsZUFBSyxDQUFDO0FBQUEsUUFDUixDQUFDO0FBQUEsTUFHTCxDQUFDO0FBQUEsSUFDTCxDQUFDO0FBQUEsRUFHTCxDQUFDOyIsCiAgIm5hbWVzIjogWyJ0eXBlIiwgInR5cGUiLCAiYSIsICJTdG9yYWdlIiwgInNlbGYiLCAibm9kZSIsICJhZGRlZE5vZGVzIiwgIl9hIiwgImdldCIsICJhIiwgIm9wdGlvbnMiLCAiQnVmZmVyU291cmNlQ29udmVydGVyIiwgInR5cGUiLCAiYSIsICJzaXplIiwgIm9mZnNldCIsICJDb252ZXJ0IiwgImNvbWJpbmUiLCAicmV0QnVmIiwgInJldFZpZXciLCAiQm9vbGVhbiIsICJTZXQiLCAiX2EiLCAibWF4IiwgInJldFZpZXciLCAic2l6ZSIsICJ0ZW1wQnVmZmVyVmlldyIsICJvZmZzZXQiLCAiZmxhZyIsICJoZXgiLCAiQXNuVHlwZVR5cGVzIiwgIkFzblByb3BUeXBlcyIsICJpbXBvcnRfcHZ0c3V0aWxzIiwgInR5cGUiLCAiQm9vbGVhbiIsICJfYSIsICJTZXQiLCAib3B0aW9ucyIsICJkZWZhdWx0Q29udmVydGVyIiwgIl9hIiwgIlNldCIsICJTZXQiLCAiaW1wb3J0X3B2dHN1dGlscyIsICJ0eXBlIiwgImlzQ29udmVydGlibGUiLCAic2NoZW1hU3RvcmFnZSIsICJpbml0X2luZGV4X2VzIiwgIkpzb25Qcm9wVHlwZXMiLCAibWluIiwgIm1heCIsICJvcHRpb25zIiwgImltcG9ydF9wdnRzdXRpbHMiLCAiT2JqZWN0SWRlbnRpZmllciIsICJpbml0X2luZGV4X2VzIiwgIm9mZnNldCIsICJvcHRpb25zIiwgImZvcm1hdCIsICJfYSIsICJ0eXBlIiwgIkVjUHVibGljS2V5IiwgInNpemUiLCAiRWRQcml2YXRlS2V5IiwgIkVkUHVibGljS2V5IiwgIkN1cnZlUHJpdmF0ZUtleSIsICJsZW4iLCAiaSIsICJzdGFydCIsICJlbmQiLCAibGVuMiIsICJvZmZzZXQiLCAiQnVmZmVyIiwgImlzSW5zdGFuY2UiLCAic2l6ZSIsICJhIiwgImNvbmNhdCIsICJzdGFydCIsICJlbmQiLCAidG9TdHJpbmciLCAiaW5zcGVjdCIsICJtYXgiLCAicmVhZCIsICJpIiwgIm9mZnNldCIsICJ3cml0ZSIsICJieXRlTGVuZ3RoIiwgIm1pbiIsICJ0eXBlIiwgIkNyeXB0byIsICJCdWZmZXIkMSIsICJhIiwgImNyeXB0byIsICJzdGFydCIsICJlbmQiLCAicHJvY2VzcyIsICJpbXBvcnRfcHZ0c3V0aWxzIiwgIkNyeXB0b0tleSIsICJBZXNDYmNQcm92aWRlciIsICJBZXNDbWFjUHJvdmlkZXIiLCAiQWVzQ3RyUHJvdmlkZXIiLCAiQWVzR2NtUHJvdmlkZXIiLCAiQWVzS3dQcm92aWRlciIsICJBZXNFY2JQcm92aWRlciIsICJSc2FQcml2YXRlS2V5IiwgIlJzYVB1YmxpY0tleSIsICJSc2FTc2FQcm92aWRlciIsICJSc2FQc3NQcm92aWRlciIsICJSc2FPYWVwUHJvdmlkZXIiLCAiRWNQcml2YXRlS2V5IiwgIkVjUHVibGljS2V5IiwgIkVjZHNhUHJvdmlkZXIiLCAiRWNkaFByb3ZpZGVyIiwgIkVkUHJpdmF0ZUtleSIsICJFZFB1YmxpY0tleSIsICJFZERzYVByb3ZpZGVyIiwgIkVjZGhFc1Byb3ZpZGVyIiwgIkVkMjU1MTlQcm92aWRlciIsICJYMjU1MTlQcm92aWRlciIsICJQYmtkZjJQcm92aWRlciIsICJIbWFjUHJvdmlkZXIiLCAiSGtkZlByb3ZpZGVyIiwgIlNoYWtlMTI4UHJvdmlkZXIiLCAiU2hha2UyNTZQcm92aWRlciIsICJTdWJ0bGVDcnlwdG8iLCAiaW5pdF9pbmRleF9lcyIsICJmb3JtYXQiLCAib3B0aW9ucyIsICJoYXNoIiwgInR5cGUiLCAiX2EiLCAiaW5pdF9lbnVtcyIsICJuYW1lIiwgInN0eWxlIiwgImdldENvbXB1dGVkU3R5bGUiLCAiZ2V0Q29tcHV0ZWRTdHlsZSIsICJ3aW5kb3ciLCAibWluIiwgIm1heCIsICJvcHRpb25zIiwgInBvcHBlck9mZnNldHMiLCAibWluIiwgIm1heCIsICJvZmZzZXQiLCAiZWZmZWN0IiwgImluaXRfZW51bXMiLCAidG9QYWRkaW5nT2JqZWN0IiwgInBvcHBlciIsICJnZXRDb21wdXRlZFN0eWxlIiwgIm9wdGlvbnMiLCAiaW5pdF9lbnVtcyIsICJlZmZlY3QiLCAib3B0aW9ucyIsICJ3aW5kb3ciLCAiaGFzaCIsICJnZXRDb21wdXRlZFN0eWxlIiwgImdldENvbXB1dGVkU3R5bGUiLCAiY2xpcHBpbmdQYXJlbnRzIiwgImdldENvbXB1dGVkU3R5bGUiLCAiaW5pdF9lbnVtcyIsICJyZWZlcmVuY2UiLCAiaW5pdF9lbnVtcyIsICJvcHRpb25zIiwgInBvcHBlck9mZnNldHMiLCAib2Zmc2V0IiwgImluaXRfZW51bXMiLCAib3B0aW9ucyIsICJwbGFjZW1lbnRzIiwgInBsYWNlbWVudCIsICJhIiwgImluaXRfZW51bXMiLCAib3B0aW9ucyIsICJwbGFjZW1lbnRzIiwgInBsYWNlbWVudCIsICJfbG9vcCIsICJfaSIsICJjaGVja3MiLCAiaW5pdF9lbnVtcyIsICJoaWRlIiwgImluaXRfZW51bXMiLCAib2Zmc2V0IiwgIm9wdGlvbnMiLCAiaW5pdF9lbnVtcyIsICJvcHRpb25zIiwgInBvcHBlck9mZnNldHMiLCAib2Zmc2V0IiwgIm1pbiIsICJtYXgiLCAiaW5pdF9lbnVtcyIsICJpbml0X2VudW1zIiwgImZuIiwgIm1lcmdlZCIsICJkZWZhdWx0TW9kaWZpZXJzIiwgImNyZWF0ZVBvcHBlciIsICJyZWZlcmVuY2UiLCAicG9wcGVyIiwgIm9wdGlvbnMiLCAiZm4iLCAic3RhdGUiLCAiZWZmZWN0IiwgIm5vb3BGbiIsICJpbml0X2VudW1zIiwgInN5bWJvbCIsICJpbml0IiwgImEiLCAiaW5pdF9jb25zdGFudHMiLCAic3ltYm9sIiwgImluaXRfY29uc3RhbnRzIiwgImRvY3VtZW50IiwgImdldFdpbmRvdyIsICJ3aW5kb3ciLCAiZG9jdW1lbnQiLCAiaW5pdF9sb2NhbGUiLCAibmF2aWdhdG9yIiwgIm9wdGlvbnMiLCAiaW5pdF9sb2NhbGUiLCAiaW5pdF9jb25zdGFudHMiLCAiY29uc29sZSIsICJjb25jYXQiLCAic3RhcnQiLCAiZW5kIiwgIm9wdGlvbnMiLCAic2V0IiwgInRvZ2dsZSIsICJpbml0X2xvY2FsZSIsICJERUxJTUlURVIiLCAib3B0aW9ucyIsICJ0eXBlIiwgImEiLCAiaW50ZXJuYWwiLCAic2VsZiIsICJkb2N1bWVudCIsICJpbml0X2NvbnN0YW50cyIsICJkb2N1bWVudCIsICJIVE1MVGVtcGxhdGVFbGVtZW50IiwgIkRvY3VtZW50RnJhZ21lbnQiLCAiRG9jdW1lbnQiLCAiaW5pdF9jb25zdGFudHMiLCAiYSIsICJ0eXBlIiwgImRpZmYiLCAiZ2V0T3BlcmF0b3IiLCAidHlwZSIsICJkb2N1bWVudCIsICJvcHRpb25zIiwgInZhbHVlIiwgInR5cGUiLCAiZSIsICJpIiwgInN5bWJvbCIsICJjb25maWciLCAiaW5pdF9jb25zdGFudHMiLCAiZ2V0V2luZG93IiwgIm9wdGlvbnMiLCAib3B0aW9ucyIsICJzZWxmIiwgImZsYWciLCAib3B0aW9ucyIsICJjdXN0b21FbGVtZW50cyIsICJpbml0X2NvbnN0YW50cyIsICJtaW4iLCAibWF4IiwgImdsb2JhbFJlZmVyZW5jZSIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X2NvbnN0YW50cyIsICJvcHRpb25zIiwgInQiLCAiaW5pdF90aGVtZSIsICJpbml0X2NvbnN0YW50cyIsICJvcHRpb25zIiwgImluaXRfcG9wcGVyIiwgInR5cGUiLCAic2VsZiIsICJvcHRpb25zIiwgInNob3ciLCAicmVmZXJlbmNlIiwgImluaXRfdGFicyIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X3RoZW1lIiwgImluaXRfcG9wcGVyIiwgImRvY3VtZW50IiwgImluaXRfY29uc3RhbnRzIiwgIm9wdGlvbnMiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgImNvbnRyb2xFbGVtZW50U3ltYm9sIiwgImdldFRlbXBsYXRlIiwgImluaXRfbWVzc2FnZSIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X2NvbnN0YW50cyIsICJpbml0T3B0aW9uc0Zyb21Bcmd1bWVudHMiLCAib3B0aW9ucyIsICJpbml0Q29udHJvbFJlZmVyZW5jZXMiLCAiY29udHJvbEVsZW1lbnRTeW1ib2wiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9ub3RpZnkiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9tZXNzYWdlIiwgImluaXRfY29uc3RhbnRzIiwgImluaXRDb250cm9sUmVmZXJlbmNlcyIsICJpbml0RXZlbnRIYW5kbGVyIiwgInNlbGYiLCAibWluIiwgIm1heCIsICJhcHBseSIsICJnZXRUZW1wbGF0ZSIsICJpbml0X3NwbGl0X3BhbmVsIiwgImluaXRfbm90aWZ5IiwgImluaXRfY29uc3RhbnRzIiwgImF0dGFjaFJlc2l6ZU9ic2VydmVyIiwgInJlc2l6ZU9ic2VydmVyU3ltYm9sIiwgInRpbWVyQ2FsbGJhY2tTeW1ib2wiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgImluaXRFdmVudEhhbmRsZXIiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9wYW5lbCIsICJpbml0T3B0aW9uc0Zyb21Bcmd1bWVudHMiLCAib3B0aW9ucyIsICJvYnNlcnZlciIsICJsb2FkQ29udGVudCIsICJnZXRUZW1wbGF0ZSIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X2NvbnN0YW50cyIsICJpbml0RXZlbnRIYW5kbGVyIiwgInNlbGYiLCAidHlwZSIsICJpbml0Q29udHJvbFJlZmVyZW5jZXMiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9idXR0b24iLCAiaW5pdF9jb25zdGFudHMiLCAib3B0aW9ucyIsICJpbml0X2NvbnN0YW50cyIsICJpbnRlcm5hbFN5bWJvbCIsICJnZXRUZW1wbGF0ZSIsICJpbml0X3N0YXRlX2J1dHRvbiIsICJpbml0X2J1dHRvbiIsICJzdHlsZXMiLCAiYSIsICJzdGFydCIsICJlbmQiLCAibWF4IiwgIm1pbiIsICJnZXRPcHBvc2l0ZVBsYWNlbWVudCIsICJyZWN0VG9DbGllbnRSZWN0IiwgInBsYWNlbWVudHMiLCAicm91bmQiLCAicmVmZXJlbmNlIiwgImRldGVjdE92ZXJmbG93IiwgIm9wdGlvbnMiLCAicGxhdGZvcm0iLCAicmVjdFRvQ2xpZW50UmVjdCIsICJhcnJvdyIsICJmbGlwIiwgIm9mZnNldCIsICJjb25maWciLCAiZm4iLCAibWluIiwgIm1heCIsICJwbGFjZW1lbnRzIiwgImFsaWdubWVudCIsICJhIiwgImdldE9wcG9zaXRlUGxhY2VtZW50IiwgInNpZGVzIiwgInNpZGUiLCAicGxhY2VtZW50IiwgIm92ZXJmbG93IiwgIngiLCAieSIsICJhcHBseSIsICJnZXROb2RlTmFtZSIsICJpc05vZGUiLCAiZ2V0V2luZG93IiwgImdldERvY3VtZW50RWxlbWVudCIsICJpc0VsZW1lbnQiLCAiaXNIVE1MRWxlbWVudCIsICJpc1NoYWRvd1Jvb3QiLCAiZ2V0Q29tcHV0ZWRTdHlsZSIsICJpc1RhYmxlRWxlbWVudCIsICJnZXRDb250YWluaW5nQmxvY2siLCAiZ2V0UGFyZW50Tm9kZSIsICJnZXROb2RlU2Nyb2xsIiwgImdldENvbXB1dGVkU3R5bGUiLCAiaXNIVE1MRWxlbWVudCIsICJyb3VuZCIsICJpc0VsZW1lbnQiLCAiZ2V0V2luZG93IiwgImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsICJsZWZ0IiwgInRvcCIsICJyZWN0VG9DbGllbnRSZWN0IiwgImdldFdpbmRvd1Njcm9sbEJhclgiLCAiZ2V0Tm9kZVNjcm9sbCIsICJnZXREb2N1bWVudEVsZW1lbnQiLCAiZ2V0Tm9kZU5hbWUiLCAiZ2V0RG9jdW1lbnRSZWN0IiwgIm1heCIsICJnZXRWaWV3cG9ydFJlY3QiLCAiZ2V0SW5uZXJCb3VuZGluZ0NsaWVudFJlY3QiLCAiZ2V0UGFyZW50Tm9kZSIsICJnZXRDbGlwcGluZ1JlY3QiLCAibWluIiwgImdldFRydWVPZmZzZXRQYXJlbnQiLCAiZ2V0T2Zmc2V0UGFyZW50IiwgImlzVGFibGVFbGVtZW50IiwgImdldENvbnRhaW5pbmdCbG9jayIsICJvcHRpb25zIiwgInJlZmVyZW5jZSIsICJkZXRlY3RPdmVyZmxvdyIsICJvZmZzZXQiLCAiYXV0b1BsYWNlbWVudCIsICJzaGlmdCIsICJmbGlwIiwgInNpemUiLCAiYXJyb3ciLCAiY29tcHV0ZVBvc2l0aW9uIiwgIm9wdGlvbnMiLCAiY29uZmlnIiwgImZuIiwgImZsaXAiLCAic2hpZnQiLCAibGluZSIsICJhdXRvUGxhY2VtZW50IiwgImRldGVjdE92ZXJmbG93IiwgImFycm93IiwgInNpemUiLCAib2Zmc2V0IiwgImNvbXB1dGVQb3NpdGlvbiIsICJ4IiwgInkiLCAiaW5pdF9jb25zdGFudHMiLCAicG9wcGVyRWxlbWVudFN5bWJvbCIsICJzZWxmIiwgImluaXRPcHRpb25zRnJvbUFyZ3VtZW50cyIsICJvcHRpb25zIiwgImF0dGFjaFJlc2l6ZU9ic2VydmVyIiwgInJlc2l6ZU9ic2VydmVyU3ltYm9sIiwgInRpbWVyQ2FsbGJhY2tTeW1ib2wiLCAiZGlzY29ubmVjdFJlc2l6ZU9ic2VydmVyIiwgIm9ic2VydmVyIiwgInJ1biIsICJzaG93IiwgImhpZGUiLCAiaW5pdE9wdGlvbk9ic2VydmVyIiwgIm1heCIsICJzdHlsZXMiLCAiY29udHJvbEVsZW1lbnRTeW1ib2wiLCAiZm9jdXNGaWx0ZXIiLCAidHlwZSIsICJhIiwgImdsb2JhbCIsICJpbml0RXZlbnRIYW5kbGVyIiwgImNsb3NlRXZlbnRIYW5kbGVyIiwgImVsZW1lbnQiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgImNvbnRhaW5lckVsZW1lbnRTeW1ib2wiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9zZWxlY3QiLCAiaW5pdF9jb25zdGFudHMiLCAiZG9jdW1lbnQiLCAiZmxhZyIsICJpbml0X3BvcHBlciIsICJpbml0X2NvbnN0YW50cyIsICJpbml0RXZlbnRIYW5kbGVyIiwgImNsb3NlRXZlbnRIYW5kbGVyIiwgImhpZGUiLCAiYnV0dG9uRWxlbWVudFN5bWJvbCIsICJhdHRhY2hSZXNpemVPYnNlcnZlciIsICJyZXNpemVPYnNlcnZlclN5bWJvbCIsICJ0aW1lckNhbGxiYWNrU3ltYm9sIiwgInVwZGF0ZVBvcHBlciIsICJkaXNjb25uZWN0UmVzaXplT2JzZXJ2ZXIiLCAic2VsZiIsICJwb3BwZXJFbGVtZW50U3ltYm9sIiwgImNvbnRyb2xFbGVtZW50U3ltYm9sIiwgInNob3ciLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgImdldFRlbXBsYXRlIiwgImluaXRfcG9wcGVyIiwgImluaXRfY29uc3RhbnRzIiwgImRvY3VtZW50IiwgInR5cGUiLCAiUG9wcGVyIiwgImluaXRfcG9wcGVyIiwgImluaXRfY29uc3RhbnRzIiwgImluaXRFdmVudEhhbmRsZXIiLCAiY2xvc2VFdmVudEhhbmRsZXIiLCAiYXR0YWNoUmVzaXplT2JzZXJ2ZXIiLCAicmVzaXplT2JzZXJ2ZXJTeW1ib2wiLCAidGltZXJDYWxsYmFja1N5bWJvbCIsICJ1cGRhdGVQb3BwZXIiLCAiZGlzY29ubmVjdFJlc2l6ZU9ic2VydmVyIiwgInBvcHBlckVsZW1lbnRTeW1ib2wiLCAiY29udHJvbEVsZW1lbnRTeW1ib2wiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgImJ1dHRvbkVsZW1lbnRTeW1ib2wiLCAiYXJyb3dFbGVtZW50U3ltYm9sIiwgImdldFRlbXBsYXRlIiwgImluaXRfcG9wcGVyX2J1dHRvbiIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X3BvcHBlciIsICJpbml0X2J1dHRvbiIsICJQb3BwZXIiLCAic3R5bGVzIiwgImRvY3VtZW50IiwgInR5cGUiLCAib3B0aW9ucyIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X2NvbnN0YW50cyIsICJpbml0RXZlbnRIYW5kbGVyQnlNb2RlIiwgImJ1dHRvbkVsZW1lbnRTeW1ib2wiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgImdldFRlbXBsYXRlIiwgImluaXRfbWVzc2FnZV9zdGF0ZV9idXR0b24iLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9wb3BwZXIiLCAiaW5pdF9zdGF0ZV9idXR0b24iLCAiUG9wcGVyIiwgInN0eWxlcyIsICJvcHRpb25zIiwgInR5cGUiLCAic2VsZiIsICJpbml0RXZlbnRoYW5kbGVyIiwgImluaXRDb250cm9sUmVmZXJlbmNlcyIsICJnZXRUZW1wbGF0ZSIsICJpbml0X2NvbmZpcm1fYnV0dG9uIiwgImluaXRfY29uc3RhbnRzIiwgImluaXRfYnV0dG9uIiwgImluaXRfcG9wcGVyX2J1dHRvbiIsICJpbml0X21lc3NhZ2Vfc3RhdGVfYnV0dG9uIiwgInN0eWxlcyIsICJwYXJzZU9wdGlvbnNKU09OIiwgIm9wdGlvbnMiLCAiaW5pdF9jb25zdGFudHMiLCAiRGF0YXNvdXJjZSIsICJpbml0X2RhdGFzb3VyY2UiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF91dGlsIiwgImluaXRfY29uc3RhbnRzIiwgImluaXRFdmVudEhhbmRsZXIiLCAib3B0aW9ucyIsICJjb25maWciLCAib2JzZXJ2ZXIiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9kYXRhc2V0IiwgImluaXRfY29uc3RhbnRzIiwgImluaXRfZGF0YXNvdXJjZSIsICJpbml0X3V0aWwiLCAiRGF0YXNvdXJjZSIsICJGb3JtU3R5bGVTaGVldCIsICJpbml0X2Zvcm0iLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdEV2ZW50SGFuZGxlciIsICJlIiwgImluaXRDb250cm9sUmVmZXJlbmNlcyIsICJnZXRUZW1wbGF0ZSIsICJpbml0X2Zvcm0iLCAiaW5pdF9kYXRhc2V0IiwgImluaXRfdXRpbCIsICJGb3JtU3R5bGVTaGVldCIsICJOb2RlTGlzdCIsICJOb2RlIiwgInNlbGYiLCAiTm9kZSIsICJOb2RlTGlzdCIsICJvcHRpb25zIiwgIk5vZGUiLCAiTm9kZUxpc3QiLCAiTm9kZUxpc3QiLCAiTm9kZSIsICJpbml0X2NvbnN0YW50cyIsICJoYW5kbGVPcHRpb25LZXlib2FyZEV2ZW50cyIsICJOb2RlIiwgImluaXRFdmVudEhhbmRsZXIiLCAiYSIsICJrZXlFdmVudEhhbmRsZXIiLCAiaW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzIiwgIm9wdGlvbnMiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF90cmVlX3NlbGVjdCIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X3NlbGVjdCIsICJpbml0X2NvbnN0YW50cyIsICJpbml0Q29udHJvbFJlZmVyZW5jZXMiLCAic3dpdGNoRWxlbWVudFN5bWJvbCIsICJpbml0RXZlbnRIYW5kbGVyIiwgInNlbGYiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF90b2dnbGVfc3dpdGNoIiwgImluaXRfY29uc3RhbnRzIiwgIlRlbXBsYXRlIiwgImluaXRPcHRpb25zRnJvbUFyZ3VtZW50cyIsICJvcHRpb25zIiwgImluaXRJbnRlcnNlY3Rpb25PYnNlcnZlciIsICJpbnRlcnNlY3Rpb25PYnNlcnZlcldhc0luaXRpYWxpemVkIiwgIm9ic2VydmVyIiwgImxvYWRDb250ZW50IiwgImdldFRlbXBsYXRlIiwgImluaXRfdGVtcGxhdGUiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9jb25zdGFudHMiLCAib3B0aW9ucyIsICJkb2N1bWVudCIsICJ3aW5kb3ciLCAiZ2V0V2luZG93IiwgIm9wdGlvbnMiLCAib3B0aW9ucyIsICJwYXJzZU9wdGlvbnNKU09OIiwgIktFWV9ET0NVTUVOVCIsICJpbml0X2NvbnN0YW50cyIsICJvcHRpb25zIiwgInNlbGYiLCAiZG9jdW1lbnQiLCAiS0VZX0RPQ1VNRU5UIiwgImFwcGVuZFRvRG9jdW1lbnQiLCAiaW5pdF9jb25zdGFudHMiLCAic2VsZiIsICJjcmVhdGVFbGVtZW50IiwgImRvY3VtZW50IiwgIktFWV9ET0NVTUVOVCIsICJpbml0X2NvbnN0YW50cyIsICJjcmVhdGVFbGVtZW50IiwgImRvY3VtZW50IiwgIktFWV9ET0NVTUVOVCIsICJpbml0X2NvbnN0YW50cyIsICJ0eXBlIiwgIm9wdGlvbnMiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9jb25zdGFudHMiLCAid2luZG93IiwgImdldFdpbmRvdyIsICJ2ZXJzaW9uIiwgImV2ZW50IiwgImdldFRlbXBsYXRlIiwgImluaXRfY29uZmlnX21hbmFnZXIiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgImluaXRFdmVudEhhbmRsZXIiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9ob3N0IiwgImluaXRfbm90aWZ5IiwgImluaXRfbG9jYWxlIiwgImluaXRfY29uZmlnX21hbmFnZXIiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgIm92ZXJsYXlFbGVtZW50U3ltYm9sIiwgImluaXRFdmVudEhhbmRsZXIiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9vdmVybGF5IiwgImluaXRfbm90aWZ5IiwgImluaXRfY29uc3RhbnRzIiwgImdldFdpbmRvdyIsICJpbml0X3V0aWwiLCAiaW5pdF9jb25zdGFudHMiLCAiQVRUUklCVVRFX0JVVFRPTl9MQUJFTCIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X2NvbnN0YW50cyIsICJyZXNpemVPYnNlcnZlclN5bWJvbCIsICJpbml0RXZlbnRIYW5kbGVyIiwgImluaXRDb250cm9sUmVmZXJlbmNlcyIsICJjb250cm9sRWxlbWVudFN5bWJvbCIsICJkb2N1bWVudCIsICJ0aW1lckNhbGxiYWNrU3ltYm9sIiwgImdldFRlbXBsYXRlIiwgImluaXRfY29sbGFwc2UiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9ob3N0IiwgImluaXRfdXRpbCIsICJpbml0Q29udHJvbFJlZmVyZW5jZXMiLCAiYnV0dG9uRWxlbWVudFN5bWJvbCIsICJpbml0RXZlbnRIYW5kbGVyIiwgIkFUVFJJQlVURV9CVVRUT05fTEFCRUwiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9kZXRhaWxzIiwgImluaXRfY29uc3RhbnRzIiwgImluaXRfdXRpbCIsICJpbml0X2NvbGxhcHNlIiwgIkRldGFpbHMiLCAiaW5pdF9kZXRhaWxzIiwgImludGVybmFsQ291bnRlciIsICJfX2RlZlByb3AiLCAiX19nZXRPd25Qcm9wTmFtZXMiLCAiX19jb21tb25KUyIsICJfX3JlcXVpcmUiLCAiX19leHBvcnQiLCAiaXNOYU4yIiwgIm9wdGlvbnMiLCAiZW5kIiwgInNpemUiLCAiaXNOYU4iLCAiZXNjYXBlIiwgImlzUHJpbWl0aXZlIiwgImZuIiwgImEiLCAiaXNPYmplY3QiLCAic3RhcnQiLCAiY29udGFpbnMiLCAiZmxhZyIsICJpc0hUTUxFbGVtZW50IiwgImNvbnRhaW5zIiwgIm9wdGlvbnMiLCAid2luZG93IiwgIlN0b3JhZ2UiLCAiZXhwZWN0IiwgImdsb2JhbCIsICJUYWJzIiwgIkNyeXB0byIsICJleHBlY3QiLCAiZ2xvYmFsIiwgImh0bWwxIiwgIkNyeXB0byIsICJTcGxpdFNjcmVlbiIsICJleHBlY3QiLCAiZ2xvYmFsIiwgImh0bWwxIiwgIlNwbGl0U2NyZWVuIiwgIkNyeXB0byIsICJnbG9iYWwiLCAib3B0aW9ucyIsICJleHBlY3QiLCAiZ2xvYmFsIiwgImh0bWwxIiwgIlJlbG9hZCIsICJ2aWV3cG9ydCIsICJmZXRjaFJlZmVyZW5jZSIsICJvcHRpb25zIiwgImV4cGVjdCIsICJnbG9iYWwiLCAiaHRtbDEiLCAiU3RhdGVCdXR0b24iLCAib3B0aW9ucyIsICJleHBlY3QiLCAiZ2xvYmFsIiwgImh0bWwxIiwgImh0bWwyIiwgIlNlbGVjdCIsICJvcHRpb25zIiwgImUiLCAiYSIsICJleHBlY3QiLCAiZ2xvYmFsIiwgImh0bWwxIiwgImh0bWwyIiwgIkNvbmZpcm1CdXR0b24iLCAic2VsZiIsICJleHBlY3QiLCAiaHRtbDEiLCAiaHRtbDIiLCAiZm9ybSIsICJleHBlY3QiLCAiZ2xvYmFsIiwgImh0bWwxIiwgImh0bWwyIiwgIlRyZWVTZWxlY3QiLCAiZmV0Y2hSZWZlcmVuY2UiLCAib3B0aW9ucyIsICJlIiwgImV4cGVjdCIsICJnbG9iYWwiLCAiaHRtbDEiLCAiaHRtbDIiLCAiQnV0dG9uIiwgIm9wdGlvbnMiLCAiZXhwZWN0IiwgImdsb2JhbCIsICJodG1sMSIsICJodG1sMiIsICJUb2dnbGVTd2l0Y2giLCAiZXhwZWN0IiwgImdsb2JhbCIsICJtb2NraW50ZXJzZWN0aW9ub2JzZXJ2ZXIiLCAiaHRtbDEiLCAiVGVtcGxhdGUiLCAidmlld3BvcnQiLCAiZmV0Y2hSZWZlcmVuY2UiLCAib3B0aW9ucyIsICJleHBlY3QiLCAiTWVzc2FnZSIsICJleHBlY3QiLCAiTm90aWZ5IiwgIk5vdGlmeSIsICJleHBlY3QiLCAibXV0YXRpb25vYnNlcnZlciIsICJleHBlY3QiLCAiZ2xvYmFsIiwgImh0bWwxIiwgImV4cGVjdCIsICJnbG9iYWwiLCAiaHRtbDEiLCAiaW5pdF91dGlsIiwgImV4cGVjdCIsICJnbG9iYWwiLCAiaHRtbDEiLCAiYSIsICJvcHRpb25zIiwgInN0YXJ0IiwgImVuZCIsICJvcHRpb25zIiwgInJhbmRvbSIsICJhIiwgIm1heCIsICJhIiwgImRpZmYiLCAiYSIsICJhIiwgImEiLCAiY29uc29sZSIsICJhIiwgImEiLCAiaGFuZGxlciIsICJNZXNzYWdlIiwgInNlbGYiLCAiTWVzc2FnZSIsICJvcHRpb25zIiwgImlzTm9kZSIsICJNZXNzYWdlIiwgIk1lc3NhZ2UiLCAidmVyc2lvbiIsICJhIiwgIm1vbnN0ZXJWZXJzaW9uIiwgImdldFdpbmRvdyIsICJnZXRXaW5kb3ciLCAiaW5pdCIsICJleHBlY3QiLCAiZXhwZWN0IiwgImV4cGVjdCIsICJleHBlY3QiLCAiZXhwZWN0IiwgImV4cGVjdCIsICJmZXRjaFJlZmVyZW5jZSIsICJtdXRhdGlvbm9ic2VydmVyIiwgImFkZGVkTm9kZXMiLCAib3B0aW9ucyIsICJleHBlY3QiLCAiZSIsICJvcHRpb25zIiwgImluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMiLCAiZ2xvYmFsIiwgImEiLCAiZXhwZWN0IiwgImh0bWwxIiwgImh0bWwyIiwgIlVwZGF0ZXIiLCAib3B0aW9ucyIsICJ2IiwgImEiLCAiaW5pdF9sb2NhbGUiLCAiYSIsICJleHBlY3QiLCAiaHRtbDEiLCAiaHRtbDIiLCAiQ3VzdG9tRWxlbWVudCIsICJyZWdpc3RlckN1c3RvbUVsZW1lbnQiLCAiZG9jdW1lbnQiLCAiYWRkT2JqZWN0V2l0aFVwZGF0ZXJUb0VsZW1lbnQiLCAib3B0aW9ucyIsICJhIiwgInNldCIsICJ2IiwgIndpbmRvd1JlYWR5IiwgImRvbVJlYWR5IiwgImdldFdpbmRvdyIsICJhIiwgImV4cGVjdCIsICJDdXN0b21FbGVtZW50IiwgInJlZ2lzdGVyQ3VzdG9tRWxlbWVudCIsICJkb2N1bWVudCIsICJjb250cm9sIiwgImh0bWwxIiwgImh0bWwyIiwgImh0bWwzIiwgInN5bWJvbCIsICJhIiwgIlJlc291cmNlIiwgImZldGNoUmVmZXJlbmNlIiwgIm9wdGlvbnMiLCAiZXhwZWN0IiwgImh0bWwxIiwgIkN1c3RvbUNvbnRyb2wiLCAicmVnaXN0ZXJDdXN0b21FbGVtZW50IiwgImRvY3VtZW50IiwgIm0iLCAiaW5pdF9jb25zdGFudHMiLCAiYSIsICJvcHRpb25zIiwgImRvRGlmZiIsICJ0eXBlIiwgIldlYkNvbm5lY3QiLCAib3B0aW9ucyIsICJNZXNzYWdlIiwgInRlc3RVcmwiLCAiV2ViQ29ubmVjdCIsICJjbG9uZSIsICJvcHRpb25zIiwgImluaXQiLCAiZmV0Y2hEYXRhIiwgImZldGNoUmVmZXJlbmNlIiwgIm9wdGlvbnMiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiaSIsICJhIiwgImluaXRfbG9jYWxlIiwgImlzTm9kZSIsICJhIiwgImIiLCAiYyIsICJodG1sMSIsICJhIiwgIk5vZGVMaXN0IiwgImEiLCAiYSIsICJhIiwgImh0bWwxIiwgImEiLCAic2VsZiIsICJhIiwgImEiLCAiYSIsICJOb2RlTGlzdCIsICJOb2RlIiwgImEiLCAiYSIsICJhIiwgImEiLCAiYSIsICJhIiwgImEiLCAibWF4IiwgImEiLCAiUmFuZG9tSUQiLCAiVVVJRCIsICJhIiwgIkJhc2UiLCAiYSIsICJhIiwgIk5vZGVMaXN0IiwgIk5vZGUiLCAiTm9kZSIsICJOb2RlTGlzdCIsICJGb3JtYXR0ZXIiLCAib3B0aW9ucyIsICJGb3JtYXR0ZXIiLCAiYSIsICJhIiwgImluaXRfY29uc3RhbnRzIiwgImh0bWwxIiwgInRyYW5zbGF0aW9uc0xpbmtTeW1ib2wiLCAib3B0aW9ucyIsICJnbG9iYWwiLCAiZmV0Y2hSZWZlcmVuY2UiLCAib3B0aW9ucyIsICJnbG9iYWwiLCAiaHRtbDEiLCAiZSIsICJodG1sMSJdCn0K
+//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc291cmNlL3R5cGVzL2lzLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvdmFsaWRhdGUubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy90eXBlb2YubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL2V4dGVuZC5tanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RvbS1zdG9yYWdlQDIuMS4wL25vZGVfbW9kdWxlcy9kb20tc3RvcmFnZS9saWIvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2VsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsQDEuMy4xMi9ub2RlX21vZHVsZXMvZWxlbWVudC1pbnRlcm5hbHMtcG9seWZpbGwvZGlzdC9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vcHZ0c3V0aWxzQDEuMy42L25vZGVfbW9kdWxlcy9wdnRzdXRpbHMvYnVpbGQvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3B2dXRpbHNAMS4xLjMvbm9kZV9tb2R1bGVzL3B2dXRpbHMvYnVpbGQvdXRpbHMuZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2FzbjFqc0AzLjAuNS9ub2RlX21vZHVsZXMvYXNuMWpzL2J1aWxkL2luZGV4LmVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjEzL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L2VudW1zLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjEzL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L3R5cGVzL2JpdF9zdHJpbmcuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwZWN1bGlhcithc24xLXNjaGVtYUAyLjMuMTMvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvdHlwZXMvb2N0ZXRfc3RyaW5nLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjEzL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L3R5cGVzL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjEzL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L2NvbnZlcnRlcnMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwZWN1bGlhcithc24xLXNjaGVtYUAyLjMuMTMvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvaGVscGVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjEzL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L3NjaGVtYS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBlY3VsaWFyK2FzbjEtc2NoZW1hQDIuMy4xMy9ub2RlX21vZHVsZXMvQHBlY3VsaWFyL2FzbjEtc2NoZW1hL2J1aWxkL2VzMjAxNS9zdG9yYWdlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjEzL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L2RlY29yYXRvcnMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwZWN1bGlhcithc24xLXNjaGVtYUAyLjMuMTMvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvZXJyb3JzL3NjaGVtYV92YWxpZGF0aW9uLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjEzL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L2Vycm9ycy9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBlY3VsaWFyK2FzbjEtc2NoZW1hQDIuMy4xMy9ub2RlX21vZHVsZXMvQHBlY3VsaWFyL2FzbjEtc2NoZW1hL2J1aWxkL2VzMjAxNS9wYXJzZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwZWN1bGlhcithc24xLXNjaGVtYUAyLjMuMTMvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvc2VyaWFsaXplci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBlY3VsaWFyK2FzbjEtc2NoZW1hQDIuMy4xMy9ub2RlX21vZHVsZXMvQHBlY3VsaWFyL2FzbjEtc2NoZW1hL2J1aWxkL2VzMjAxNS9vYmplY3RzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjEzL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L2NvbnZlcnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwZWN1bGlhcithc24xLXNjaGVtYUAyLjMuMTMvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3RzbGliQDIuOC4xL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYubWpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIranNvbi1zY2hlbWFAMS4xLjEyL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvanNvbi1zY2hlbWEvYnVpbGQvaW5kZXguZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3dlYmNyeXB0by1jb3JlQDEuOC4xL25vZGVfbW9kdWxlcy93ZWJjcnlwdG8tY29yZS9idWlsZC93ZWJjcnlwdG8tY29yZS5lcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYmFzZTY0LWpzQDEuNS4xL25vZGVfbW9kdWxlcy9iYXNlNjQtanMvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2llZWU3NTRAMS4yLjEvbm9kZV9tb2R1bGVzL2llZWU3NTQvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2J1ZmZlckA1LjcuMS9ub2RlX21vZHVsZXMvYnVmZmVyL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrd2ViY3J5cHRvQDEuNS4wL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvd2ViY3J5cHRvL2J1aWxkL3dlYmNyeXB0by5lcy5qcyIsICIuLi8uLi9zb3VyY2UvY29uc3RhbnRzLm1qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZW51bXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXROb2RlTmFtZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFdpbmRvdy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2luc3RhbmNlT2YuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9hcHBseVN0eWxlcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvbWF0aC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvdXNlckFnZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvaXNMYXlvdXRWaWV3cG9ydC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldExheW91dFJlY3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9jb250YWlucy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldENvbXB1dGVkU3R5bGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pc1RhYmxlRWxlbWVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldERvY3VtZW50RWxlbWVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFBhcmVudE5vZGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvd2l0aGluLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRGcmVzaFNpZGVPYmplY3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL21lcmdlUGFkZGluZ09iamVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZXhwYW5kVG9IYXNoTWFwLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvYXJyb3cuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldFZhcmlhdGlvbi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2NvbXB1dGVTdHlsZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9ldmVudExpc3RlbmVycy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0T3Bwb3NpdGVQbGFjZW1lbnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0V2luZG93U2Nyb2xsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0V2luZG93U2Nyb2xsQmFyWC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFZpZXdwb3J0UmVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldERvY3VtZW50UmVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2lzU2Nyb2xsUGFyZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0U2Nyb2xsUGFyZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvbGlzdFNjcm9sbFBhcmVudHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3JlY3RUb0NsaWVudFJlY3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDbGlwcGluZ1JlY3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2NvbXB1dGVPZmZzZXRzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9kZXRlY3RPdmVyZmxvdy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvY29tcHV0ZUF1dG9QbGFjZW1lbnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9mbGlwLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvaGlkZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL29mZnNldC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL3BvcHBlck9mZnNldHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldEFsdEF4aXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9wcmV2ZW50T3ZlcmZsb3cuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldEhUTUxFbGVtZW50U2Nyb2xsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Tm9kZVNjcm9sbC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldENvbXBvc2l0ZVJlY3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL29yZGVyTW9kaWZpZXJzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9kZWJvdW5jZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvbWVyZ2VCeU5hbWUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2NyZWF0ZVBvcHBlci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvcG9wcGVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9pbmRleC5qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvYmFzZS5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL3N0YWNrLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9wYXRoZmluZGVyLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvdG9rZW5saXN0Lm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL2NvbnN0YW50cy5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9hdHRyaWJ1dGVzLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL3V0aWwubWpzIiwgIi4uLy4uL3NvdXJjZS91dGlsL2Nsb25lLm1qcyIsICIuLi8uLi9zb3VyY2UvaTE4bi9sb2NhbGUubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vbG9jYWxlLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvaWQubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9iYXNld2l0aG9wdGlvbnMubWpzIiwgIi4uLy4uL3NvdXJjZS9pMThuL3Byb3ZpZGVyLm1qcyIsICIuLi8uLi9zb3VyY2UvaTE4bi90cmFuc2xhdGlvbnMubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL3RyYW5zZm9ybWVyLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9waXBlLm1qcyIsICIuLi8uLi9zb3VyY2UvdGV4dC9mb3JtYXR0ZXIubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9tZWRpYXR5cGUubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9kYXRhdXJsLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvcXVldWUubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy91bmlxdWVxdWV1ZS5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL29ic2VydmVyLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvb2JzZXJ2ZXJsaXN0Lm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvcHJveHlvYnNlcnZlci5tanMiLCAiLi4vLi4vc291cmNlL2RvbS90aGVtZS5tanMiLCAiLi4vLi4vc291cmNlL2RvbS90ZW1wbGF0ZS5tanMiLCAiLi4vLi4vc291cmNlL2RhdGEvZGlmZi5tanMiLCAiLi4vLi4vc291cmNlL3V0aWwvdHJpbXNwYWNlcy5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9ldmVudHMubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vdXBkYXRlci5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9zbG90dGVkLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL3V0aWwvZXh0cmFjdC1rZXlzLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL3V0aWwvaW5pdC1vcHRpb25zLWZyb20tYXR0cmlidXRlcy5tanMiLCAiLi4vLi4vc291cmNlL2RvbS91dGlsL3NldC1vcHRpb24tZnJvbS1hdHRyaWJ1dGUubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vY3VzdG9tZWxlbWVudC5tanMiLCAiLi4vLi4vc291cmNlL21hdGgvcmFuZG9tLm1qcyIsICIuLi8uLi9zb3VyY2UvdXRpbC9kZWFkbWFuc3N3aXRjaC5tanMiLCAiLi4vLi4vc291cmNlL3V0aWwvcHJvY2Vzc2luZy9jYWxsYmFjay5tanMiLCAiLi4vLi4vc291cmNlL3V0aWwvcHJvY2Vzc2luZy5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9jb25zdGFudHMubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2xheW91dC9zdHlsZXNoZWV0L3RhYnMubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vdXRpbC9mZXRjaC5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvc3R5bGVzaGVldC90aGVtZS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS91dGlsL3BvcHBlci5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvbGF5b3V0L3RhYnMubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL25vdGlmeS9zdHlsZXNoZWV0L21lc3NhZ2UubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL25vdGlmeS9tZXNzYWdlLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ub3RpZnkvc3R5bGVzaGVldC9ub3RpZnkubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL25vdGlmeS9ub3RpZnkubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2xheW91dC9zdHlsZXNoZWV0L3NwbGl0LXBhbmVsLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9sYXlvdXQvc3BsaXQtcGFuZWwubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2xheW91dC9zdHlsZXNoZWV0L3BhbmVsLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9sYXlvdXQvcGFuZWwubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vcmVsb2FkLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL2N1c3RvbWNvbnRyb2wubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vc3R5bGVzaGVldC9idXR0b24ubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL3N0eWxlc2hlZXQvcmlwcGxlLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL2J1dHRvbi5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9zdHlsZXNoZWV0L3N0YXRlLWJ1dHRvbi5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS90eXBlcy9zdGF0ZS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9zdGF0ZS1idXR0b24ubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL2J1aWxkbWFwLm1qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQGZsb2F0aW5nLXVpK3V0aWxzQDAuMi44L25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvdXRpbHMvZGlzdC9mbG9hdGluZy11aS51dGlscy5tanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BmbG9hdGluZy11aStjb3JlQDEuNi44L25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvY29yZS9kaXN0L2Zsb2F0aW5nLXVpLmNvcmUubWpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZmxvYXRpbmctdWkrdXRpbHNAMC4yLjgvbm9kZV9tb2R1bGVzL0BmbG9hdGluZy11aS91dGlscy9kaXN0L2Zsb2F0aW5nLXVpLnV0aWxzLmRvbS5tanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BmbG9hdGluZy11aStkb21AMS42LjEyL25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvZG9tL2Rpc3QvZmxvYXRpbmctdWkuZG9tLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3V0aWwvZmxvYXRpbmctdWkubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vc3R5bGVzaGVldC9zZWxlY3QubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vc2VsZWN0Lm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9sYXlvdXQvc3R5bGVzaGVldC9wb3BwZXIubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2xheW91dC9wb3BwZXIubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vcG9wcGVyLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3N0eWxlc2hlZXQvcG9wcGVyLWJ1dHRvbi5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9wb3BwZXItYnV0dG9uLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3N0eWxlc2hlZXQvY29uZmlybS1idXR0b24ubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vc3R5bGVzaGVldC9tZXNzYWdlLXN0YXRlLWJ1dHRvbi5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9tZXNzYWdlLXN0YXRlLWJ1dHRvbi5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9jb25maXJtLWJ1dHRvbi5tanMiLCAiLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZGF0YXRhYmxlL2NvbnN0YW50cy5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZGF0YXRhYmxlL2RhdGFzb3VyY2UubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2RhdGF0YWJsZS9zdHlsZXNoZWV0L2RhdGFzZXQubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2RhdGF0YWJsZS91dGlsLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9zdHlsZXNoZWV0L2Zvcm0ubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2RhdGF0YWJsZS9kYXRhc2V0Lm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3N0eWxlc2hlZXQvZm9ybS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9mb3JtLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvbm9kZWxpc3QubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9ub2RlLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9idWlsZHRyZWUubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9ub2RlcmVjdXJzaXZlaXRlcmF0b3IubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vc3R5bGVzaGVldC90cmVlLXNlbGVjdC5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS90cmVlLXNlbGVjdC5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9zdHlsZXNoZWV0L3RvZ2dsZS1zd2l0Y2gubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vdG9nZ2xlLXN3aXRjaC5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS90ZW1wbGF0ZS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC9zdHlsZXNoZWV0L2hvc3QubWpzIiwgIi4uLy4uL3NvdXJjZS9pMThuL3Byb3ZpZGVycy9lbWJlZC5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9yZWFkeS5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9mb2N1c21hbmFnZXIubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9pbnRlcm5hbC5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9yZXNvdXJjZS5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9yZXNvdXJjZS9kYXRhLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL3Jlc291cmNlL2xpbmsubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vcmVzb3VyY2UvbGluay9zdHlsZXNoZWV0Lm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL3Jlc291cmNlL3NjcmlwdC5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9yZXNvdXJjZW1hbmFnZXIubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2hvc3Qvc3R5bGVzaGVldC9jb25maWctbWFuYWdlci5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC9jb25maWctbWFuYWdlci5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC9ob3N0Lm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ob3N0L3N0eWxlc2hlZXQvb3ZlcmxheS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC9vdmVybGF5Lm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ob3N0L3V0aWwubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2xheW91dC9zdHlsZXNoZWV0L2RldGFpbHMubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2hvc3QvY29uc3RhbnRzLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9sYXlvdXQvc3R5bGVzaGVldC9jb2xsYXBzZS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvbGF5b3V0L2NvbGxhcHNlLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9sYXlvdXQvZGV0YWlscy5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC9kZXRhaWxzLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvcmFuZG9taWQubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy91dWlkLm1qcyIsICJwcmVwYXJlLmpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvbGF5b3V0L3RhYnMubWpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFpQDUuMS4yL25vZGVfbW9kdWxlcy9jaGFpL2NoYWkuanMiLCAiLi4vdXRpbC9jaGFpLWRvbS5tanMiLCAiLi4vdXRpbC9qc2RvbS5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9sYXlvdXQvc2xpdC1wYW5lbC5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9sYXlvdXQvcGFuZWwubWpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvZm9ybS9yZWxvYWQubWpzIiwgIi4uL3V0aWwvaW50ZXJzZWN0aW9uLW1vY2subWpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvZm9ybS9zdGF0ZS1idXR0b24ubWpzIiwgIi4uL3V0aWwvcmVzaXplLW9ic2VydmVyLm1qcyIsICIuLi9jYXNlcy9jb21wb25lbnRzL2Zvcm0vc2VsZWN0Lm1qcyIsICIuLi9jYXNlcy9jb21wb25lbnRzL2Zvcm0vY29uZmlybS1idXR0b24ubWpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvZm9ybS9mb3JtLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9kYXRhc291cmNlL3N0b3JhZ2UubWpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvZm9ybS90cmVlLXNlbGVjdC5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9mb3JtL2J1dHRvbi5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9mb3JtL3RvZ2dsZS1zd2l0Y2gubWpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvZm9ybS90ZW1wbGF0ZS5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9ub3RpZnkvbWVzc2FnZS5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9ub3RpZnkvbm90aWZ5Lm1qcyIsICIuLi9jYXNlcy9jb21wb25lbnRzL2hvc3QvaG9zdC5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9ob3N0L292ZXJsYXkubWpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvaG9zdC91dGlsLm1qcyIsICIuLi9jYXNlcy9jb21wb25lbnRzL2hvc3QvZGV0YWlscy5tanMiLCAiLi4vY2FzZXMvdGV4dC9mb3JtYXR0ZXIubWpzIiwgIi4uLy4uL3NvdXJjZS90ZXh0L2dlbmVyYXRlLXJhbmdlLWNvbXBhcmlzb24tZXhwcmVzc2lvbi5tanMiLCAiLi4vY2FzZXMvdGV4dC91dGlsLm1qcyIsICIuLi8uLi9zb3VyY2UvdGV4dC9icmFja2V0ZWQta2V5LXZhbHVlLWhhc2gubWpzIiwgIi4uL2Nhc2VzL3RleHQvYnJhY2tldGVkLWtleS12YWx1ZS1oYXNoLm1qcyIsICIuLi9jYXNlcy9tYXRoL3JhbmRvbS5tanMiLCAiLi4vY2FzZXMvdXRpbC90cmltc3BhY2VzLm1qcyIsICIuLi9jYXNlcy91dGlsL3Byb2Nlc3NpbmcubWpzIiwgIi4uL2Nhc2VzL3V0aWwvZGVhZG1hbnNzd2l0Y2gubWpzIiwgIi4uLy4uL3NvdXJjZS91dGlsL2NvbXBhcmF0b3IubWpzIiwgIi4uL2Nhc2VzL3V0aWwvY29tcGFyYXRvci5tanMiLCAiLi4vLi4vc291cmNlL3V0aWwvZnJlZXplLm1qcyIsICIuLi9jYXNlcy91dGlsL2ZyZWV6ZS5tanMiLCAiLi4vY2FzZXMvdXRpbC9jbG9uZS5tanMiLCAiLi4vLi4vc291cmNlL2xvZ2dpbmcvaGFuZGxlci9jb25zb2xlLm1qcyIsICIuLi8uLi9zb3VyY2UvbG9nZ2luZy9oYW5kbGVyLm1qcyIsICIuLi8uLi9zb3VyY2UvbG9nZ2luZy9sb2dlbnRyeS5tanMiLCAiLi4vLi4vc291cmNlL2xvZ2dpbmcvbG9nZ2VyLm1qcyIsICIuLi9jYXNlcy9sb2dnaW5nL2hhbmRsZXIvY29uc29sZS5tanMiLCAiLi4vY2FzZXMvbG9nZ2luZy9sb2dnZXIubWpzIiwgIi4uL2Nhc2VzL2xvZ2dpbmcvaGFuZGxlci5tanMiLCAiLi4vY2FzZXMvbG9nZ2luZy9sb2dlbnRyeS5tanMiLCAiLi4vLi4vc291cmNlL25ldC93ZWJjb25uZWN0Lm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvb2JzZXJ2YWJsZXF1ZXVlLm1qcyIsICIuLi8uLi9zb3VyY2UvbmV0L3dlYmNvbm5lY3QvbWVzc2FnZS5tanMiLCAiLi4vY2FzZXMvbmV0L3dlYmNvbm5lY3QubWpzIiwgIi4uL3V0aWwvd2Vic29ja2V0Lm1qcyIsICIuLi9jYXNlcy9uZXQvd2ViY29ubmVjdC9tZXNzYWdlLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvdmVyc2lvbi5tanMiLCAiLi4vY2FzZXMvbW9uc3Rlci5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9kaW1lbnNpb24ubWpzIiwgIi4uL2Nhc2VzL2RvbS9kaW1lbnNpb24ubWpzIiwgIi4uLy4uL3NvdXJjZS91dGlsL3J1bnRpbWUubWpzIiwgIi4uL2Nhc2VzL2RvbS9yZXNvdXJjZS9saW5rL3N0eWxlc2hlZXQubWpzIiwgIi4uL3V0aWwvY2xlYW51cGRvbS5tanMiLCAiLi4vY2FzZXMvZG9tL3Jlc291cmNlL2xpbmsubWpzIiwgIi4uL2Nhc2VzL2RvbS9yZXNvdXJjZS9zY3JpcHQubWpzIiwgIi4uL2Nhc2VzL2RvbS9yZXNvdXJjZS9kYXRhLm1qcyIsICIuLi9jYXNlcy9kb20vdXRpbC9pbml0LW9wdGlvbnMtZnJvbS1hdHRyaWJ1dGVzLm1qcyIsICIuLi9jYXNlcy9kb20vdXRpbC9leHRyYWN0LWtleXMubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vd29ya2VyL2ZhY3RvcnkubWpzIiwgIi4uL2Nhc2VzL2RvbS93b3JrZXIvZmFjdG9yeS5tanMiLCAiLi4vY2FzZXMvZG9tL3VwZGF0ZXIubWpzIiwgIi4uL2Nhc2VzL2RvbS9sb2NhbGUubWpzIiwgIi4uL2Nhc2VzL2RvbS90aGVtZS5tanMiLCAiLi4vY2FzZXMvZG9tL2N1c3RvbWVsZW1lbnQubWpzIiwgIi4uL2Nhc2VzL2RvbS9mb2N1c21hbmFnZXIubWpzIiwgIi4uL2Nhc2VzL2RvbS9maW5kLm1qcyIsICIuLi9jYXNlcy9kb20vcmVhZHkubWpzIiwgIi4uL2Nhc2VzL2RvbS91dGlsLm1qcyIsICIuLi9jYXNlcy9kb20vY3VzdG9tZWxlbWVudC1pbml0ZnJvbXNjcmlwdGhvc3QubWpzIiwgIi4uL2Nhc2VzL2RvbS9zbG90dGVkLW5vZGVzLm1qcyIsICIuLi9jYXNlcy9kb20vYXR0cmlidXRlcy5tanMiLCAiLi4vY2FzZXMvZG9tL3Jlc291cmNlLm1qcyIsICIuLi9jYXNlcy9kb20vcmVzb3VyY2VtYW5hZ2VyLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL2Fzc2VtYmxlci5tanMiLCAiLi4vY2FzZXMvZG9tL2Fzc2VtYmxlci5tanMiLCAiLi4vY2FzZXMvZG9tL2N1c3RvbWNvbnRyb2wubWpzIiwgIi4uL2Nhc2VzL2RvbS90ZW1wbGF0ZS5tanMiLCAiLi4vY2FzZXMvZG9tL2V2ZW50cy5tanMiLCAiLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9kb20ubWpzIiwgIi4uL2Nhc2VzL2RhdGEvZGF0YXNvdXJjZS9kb20ubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2Uvc3RvcmFnZS9sb2NhbHN0b3JhZ2UubWpzIiwgIi4uL3V0aWwvbG9jYWxzdG9yYWdlLm1qcyIsICIuLi9jYXNlcy9kYXRhL2RhdGFzb3VyY2Uvc3RvcmFnZS9sb2NhbHN0b3JhZ2UubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2Uvc3RvcmFnZS9zZXNzaW9uc3RvcmFnZS5tanMiLCAiLi4vY2FzZXMvZGF0YS9kYXRhc291cmNlL3N0b3JhZ2Uvc2Vzc2lvbnN0b3JhZ2UubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2Uvc2VydmVyLm1qcyIsICIuLi9jYXNlcy9kYXRhL2RhdGFzb3VyY2Uvc2VydmVyLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9kYXRhc291cmNlL3NlcnZlci93ZWJjb25uZWN0Lm1qcyIsICIuLi9jYXNlcy9kYXRhL2RhdGFzb3VyY2Uvc2VydmVyL3dlYnNvY2tldC5tanMiLCAiLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvcmVzdGFwaS5tanMiLCAiLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvcmVzdGFwaS93cml0ZWVycm9yLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9kYXRhc291cmNlL3NlcnZlci9yZXN0YXBpL2RhdGEtZmV0Y2gtZXJyb3IubWpzIiwgIi4uL2Nhc2VzL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvcmVzdGFwaS5tanMiLCAiLi4vY2FzZXMvZGF0YS9kYXRhc291cmNlLm1qcyIsICIuLi9jYXNlcy9kYXRhL2J1aWxkbWFwLm1qcyIsICIuLi9jYXNlcy9kYXRhL3RyYW5zZm9ybWVyLm1qcyIsICIuLi9jYXNlcy9kYXRhL2RpZmYubWpzIiwgIi4uL2Nhc2VzL2RhdGEvYnVpbGR0cmVlLm1qcyIsICIuLi9jYXNlcy9kYXRhL3BhdGhmaW5kZXIubWpzIiwgIi4uL2Nhc2VzL2RhdGEvcGlwZS5tanMiLCAiLi4vY2FzZXMvZGF0YS9leHRlbmQubWpzIiwgIi4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy9hYnN0cmFjdC5tanMiLCAiLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL2ludmFsaWQubWpzIiwgIi4uL2Nhc2VzL2NvbnN0cmFpbnQvaW52YWxpZC5tanMiLCAiLi4vY2FzZXMvY29uc3RyYWludC9hYnN0cmFjdG9wZXJhdG9yLm1qcyIsICIuLi8uLi9zb3VyY2UvY29uc3RyYWludHMvYWJzdHJhY3RvcGVyYXRvci5tanMiLCAiLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL3ZhbGlkLm1qcyIsICIuLi8uLi9zb3VyY2UvY29uc3RyYWludHMvb3JvcGVyYXRvci5tanMiLCAiLi4vY2FzZXMvY29uc3RyYWludC9vcm9wZXJhdG9yLm1qcyIsICIuLi8uLi9zb3VyY2UvY29uc3RyYWludHMvaXNvYmplY3QubWpzIiwgIi4uL2Nhc2VzL2NvbnN0cmFpbnQvaXNvYmplY3QubWpzIiwgIi4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy9hbmRvcGVyYXRvci5tanMiLCAiLi4vY2FzZXMvY29uc3RyYWludC9hbmRvcGVyYXRvci5tanMiLCAiLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL2lzYXJyYXkubWpzIiwgIi4uL2Nhc2VzL2NvbnN0cmFpbnQvaXNhcnJheS5tanMiLCAiLi4vY2FzZXMvY29uc3RyYWludC92YWxpZC5tanMiLCAiLi4vY2FzZXMvdHlwZXMvbm9kZWxpc3QubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL2Jhc2UubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL21lZGlhdHlwZS5tanMiLCAiLi4vY2FzZXMvdHlwZXMvdG9rZW5saXN0Lm1qcyIsICIuLi9jYXNlcy90eXBlcy9wcm94eW9ic2VydmVyLm1qcyIsICIuLi9jYXNlcy90eXBlcy92ZXJzaW9uLm1qcyIsICIuLi9jYXNlcy90eXBlcy9nbG9iYWwubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL29ic2VydmVybGlzdC5tanMiLCAiLi4vY2FzZXMvdHlwZXMvaW50ZXJuYWwubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL29ic2VydmFibGVxdWV1ZS5tanMiLCAiLi4vY2FzZXMvdHlwZXMvZGF0YXVybC5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL2JpbmFyeS5tanMiLCAiLi4vY2FzZXMvdHlwZXMvYmluYXJ5Lm1qcyIsICIuLi9jYXNlcy90eXBlcy9vYnNlcnZlci5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL3JlZ2V4Lm1qcyIsICIuLi9jYXNlcy90eXBlcy9yZWdleC5tanMiLCAiLi4vY2FzZXMvdHlwZXMvcmFuZG9taWQubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL2lkLm1qcyIsICIuLi9jYXNlcy90eXBlcy91dWlkLm1qcyIsICIuLi9jYXNlcy90eXBlcy9pcy5tanMiLCAiLi4vY2FzZXMvdHlwZXMvdmFsaWRhdGUubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL3R5cGVvZi5tanMiLCAiLi4vY2FzZXMvdHlwZXMvdW5pcXVlcXVldWUubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL3N0YWNrLm1qcyIsICIuLi9jYXNlcy90eXBlcy9iYXNld2l0aG9wdGlvbnMubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL25vZGUubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL3F1ZXVlLm1qcyIsICIuLi9jYXNlcy90eXBlcy9ub2RlcmVjdXJzaXZlaXRlcmF0b3IubWpzIiwgIi4uLy4uL3NvdXJjZS9pMThuL2Zvcm1hdHRlci5tanMiLCAiLi4vY2FzZXMvaTE4bi9mb3JtYXR0ZXIubWpzIiwgIi4uL2Nhc2VzL2kxOG4vbG9jYWxlLm1qcyIsICIuLi9jYXNlcy9pMThuL3Byb3ZpZGVyLm1qcyIsICIuLi8uLi9zb3VyY2UvaTE4bi9wcm92aWRlcnMvZmV0Y2gubWpzIiwgIi4uL2Nhc2VzL2kxOG4vcHJvdmlkZXJzL2ZldGNoLm1qcyIsICIuLi9jYXNlcy9pMThuL3Byb3ZpZGVycy9lbWJlZC5tanMiLCAiLi4vY2FzZXMvaTE4bi90cmFuc2xhdGlvbnMubWpzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5leHBvcnQge1xuXHRpc0l0ZXJhYmxlLFxuXHRpc1ByaW1pdGl2ZSxcblx0aXNTeW1ib2wsXG5cdGlzQm9vbGVhbixcblx0aXNTdHJpbmcsXG5cdGlzT2JqZWN0LFxuXHRpc0luc3RhbmNlLFxuXHRpc0FycmF5LFxuXHRpc0Z1bmN0aW9uLFxuXHRpc0ludGVnZXIsXG59O1xuXG4vKipcbiAqIFdpdGggdGhpcyBmdW5jdGlvbiB5b3UgY2FuIGNoZWNrIGlmIGEgdmFsdWUgaXMgaXRlcmFibGUuXG4gKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCBpbiB0aGUgbGlicmFyeSB0byBoYXZlIGNvbnNpc3RlbnQgbmFtZXMuXG4gKlxuICogWW91IGNhbiBjYWxsIHRoZSBtZXRob2QgdmlhIHRoZSBtb25zdGVyIG5hbWVzcGFjZSBgTW9uc3Rlci5UeXBlcy5pc1ByaW1pdGl2ZSgpYC5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvaXMtMS5tanNcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjIuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuZnVuY3Rpb24gaXNJdGVyYWJsZSh2YWx1ZSkge1xuXHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZhbHNlO1xuXHRpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiBmYWxzZTtcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZT8uW1N5bWJvbC5pdGVyYXRvcl0gPT09IFwiZnVuY3Rpb25cIjtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgdmFsdWUgcGFzc2VkIGlzIGEgcHJpbWl0aXZlIChzdHJpbmcsIG51bWJlciwgYm9vbGVhbiwgTmFOLCB1bmRlZmluZWQsIG51bGwgb3Igc3ltYm9sKVxuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgaW4gdGhlIGxpYnJhcnkgdG8gaGF2ZSBjb25zaXN0ZW50IG5hbWVzLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy9pcy0yLm1qc1xuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICovXG5mdW5jdGlvbiBpc1ByaW1pdGl2ZSh2YWx1ZSkge1xuXHR2YXIgdHlwZTtcblxuXHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0dHlwZSA9IHR5cGVvZiB2YWx1ZTtcblxuXHRpZiAoXG5cdFx0dHlwZSA9PT0gXCJzdHJpbmdcIiB8fFxuXHRcdHR5cGUgPT09IFwibnVtYmVyXCIgfHxcblx0XHR0eXBlID09PSBcImJvb2xlYW5cIiB8fFxuXHRcdHR5cGUgPT09IFwic3ltYm9sXCJcblx0KSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHZhbHVlIHBhc3NlZCBpcyBhIHN5bWJvbFxuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgaW4gdGhlIGxpYnJhcnkgdG8gaGF2ZSBjb25zaXN0ZW50IG5hbWVzLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy9pcy0zLm1qc1xuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICovXG5mdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuXHRyZXR1cm4gXCJzeW1ib2xcIiA9PT0gdHlwZW9mIHZhbHVlID8gdHJ1ZSA6IGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB2YWx1ZSBwYXNzZWQgaXMgYSBib29sZWFuLlxuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgaW4gdGhlIGxpYnJhcnkgdG8gaGF2ZSBjb25zaXN0ZW50IG5hbWVzLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy9pcy00Lm1qc1xuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICovXG5mdW5jdGlvbiBpc0Jvb2xlYW4odmFsdWUpIHtcblx0aWYgKHZhbHVlID09PSB0cnVlIHx8IHZhbHVlID09PSBmYWxzZSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB2YWx1ZSBwYXNzZWQgaXMgYSBzdHJpbmdcbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGluIHRoZSBsaWJyYXJ5IHRvIGhhdmUgY29uc2lzdGVudCBuYW1lcy5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvaXMtNS5tanNcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuZnVuY3Rpb24gaXNTdHJpbmcodmFsdWUpIHtcblx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB2YWx1ZSBwYXNzZWQgaXMgYSBvYmplY3RcbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGluIHRoZSBsaWJyYXJ5IHRvIGhhdmUgY29uc2lzdGVudCBuYW1lcy5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvaXMtNi5tanNcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcblx0aWYgKGlzQXJyYXkodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmIChpc1ByaW1pdGl2ZSh2YWx1ZSkpIHJldHVybiBmYWxzZTtcblxuXHRpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHZhbHVlIHBhc3NlZCBpcyBhIG9iamVjdCBhbmQgaW5zdGFuY2Ugb2YgaW5zdGFuY2UuXG4gKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCBpbiB0aGUgbGlicmFyeSB0byBoYXZlIGNvbnNpc3RlbnQgbmFtZXMuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3R5cGVzL2lzLTcubWpzXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcGFyYW0geyp9IGluc3RhbmNlXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS41LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKi9cbmZ1bmN0aW9uIGlzSW5zdGFuY2UodmFsdWUsIGluc3RhbmNlKSB7XG5cdGlmICghaXNPYmplY3QodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghaXNGdW5jdGlvbihpbnN0YW5jZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCFpbnN0YW5jZS5oYXNPd25Qcm9wZXJ0eShcInByb3RvdHlwZVwiKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAodmFsdWUgaW5zdGFuY2VvZiBpbnN0YW5jZSkgcmV0dXJuIHRydWU7XG5cblx0bGV0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKTtcblx0d2hpbGUgKHByb3RvICE9IG51bGwpIHtcblx0XHRpZiAocHJvdG8gPT09IGluc3RhbmNlLnByb3RvdHlwZSkgcmV0dXJuIHRydWU7XG5cdFx0cHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8pO1xuXHR9XG5cblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB2YWx1ZSBwYXNzZWQgaXMgYSBhcnJheVxuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgaW4gdGhlIGxpYnJhcnkgdG8gaGF2ZSBjb25zaXN0ZW50IG5hbWVzLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy9pcy04Lm1qc1xuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kZS9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9pc0FycmF5XG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXkodmFsdWUpIHtcblx0cmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB2YWx1ZSBwYXNzZWQgaXMgYSBmdW5jdGlvblxuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgaW4gdGhlIGxpYnJhcnkgdG8gaGF2ZSBjb25zaXN0ZW50IG5hbWVzLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy9pcy05Lm1qc1xuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG5cdGlmIChpc0FycmF5KHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoaXNQcmltaXRpdmUodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHZhbHVlIHBhc3NlZCBpcyBhbiBpbnRlZ2VyLlxuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgaW4gdGhlIGxpYnJhcnkgdG8gaGF2ZSBjb25zaXN0ZW50IG5hbWVzLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy9pcy0xMC5tanNcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjQuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuZnVuY3Rpb24gaXNJbnRlZ2VyKHZhbHVlKSB7XG5cdHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQge1xuXHRpc0FycmF5LFxuXHRpc0Jvb2xlYW4sXG5cdGlzRnVuY3Rpb24sXG5cdGlzSW5zdGFuY2UsXG5cdGlzSW50ZWdlcixcblx0aXNJdGVyYWJsZSxcblx0aXNPYmplY3QsXG5cdGlzUHJpbWl0aXZlLFxuXHRpc1N0cmluZyxcblx0aXNTeW1ib2wsXG59IGZyb20gXCIuL2lzLm1qc1wiO1xuXG5leHBvcnQge1xuXHR2YWxpZGF0ZUl0ZXJhYmxlLFxuXHR2YWxpZGF0ZVByaW1pdGl2ZSxcblx0dmFsaWRhdGVCb29sZWFuLFxuXHR2YWxpZGF0ZVN0cmluZyxcblx0dmFsaWRhdGVPYmplY3QsXG5cdHZhbGlkYXRlSW5zdGFuY2UsXG5cdHZhbGlkYXRlQXJyYXksXG5cdHZhbGlkYXRlU3ltYm9sLFxuXHR2YWxpZGF0ZUZ1bmN0aW9uLFxuXHR2YWxpZGF0ZUludGVnZXIsXG59O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiB0aGUgdHlwZSBtYXRjaGVzIHRoZSBwcmltaXRpdmUgdHlwZS4gdGhpcyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8gaXNQcmltaXRpdmUoKSBleGNlcHQgdGhhdCBhIFR5cGVFcnJvciBpcyB0aHJvd24uXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7dmFsaWRhdGVJdGVyYWJsZX0gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvdHlwZXMvdmFsaWRhdGUubWpzJztcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlSXRlcmFibGUoJzInKSkgIC8vIFx1MjFBNiBUeXBlRXJyb3JcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlSXRlcmFibGUoW10pKSAgLy8gXHUyMUE2IHZhbHVlXG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4geyp9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjIuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgcHJpbWl0aXZlXG4gKiBAc2VlIHtAbGluayBpc1ByaW1pdGl2ZX1cbiAqIEBzZWUge0BsaW5rIE1vbnN0ZXIuVHlwZXMuaXNQcmltaXRpdmV9XG4gKiBAc2VlIHtAbGluayBNb25zdGVyLlR5cGVzI2lzUHJpbWl0aXZlfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUl0ZXJhYmxlKHZhbHVlKSB7XG5cdGlmICghaXNJdGVyYWJsZSh2YWx1ZSkpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsdWUgaXMgbm90IGl0ZXJhYmxlXCIpO1xuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIHR5cGUgbWF0Y2hlcyB0aGUgcHJpbWl0aXZlIHR5cGUuIHRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIGlzUHJpbWl0aXZlKCkgZXhjZXB0IHRoYXQgYSBUeXBlRXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge3ZhbGlkYXRlUHJpbWl0aXZlfSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS90eXBlcy92YWxpZGF0ZS5tanMnO1xuICogY29uc29sZS5sb2codmFsaWRhdGVQcmltaXRpdmUoJzInKSkgIC8vIFx1MjFBNiB2YWx1ZVxuICogY29uc29sZS5sb2codmFsaWRhdGVQcmltaXRpdmUoW10pKSAgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHsqfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHByaW1pdGl2ZVxuICogQHNlZSB7QGxpbmsgaXNQcmltaXRpdmV9XG4gKiBAc2VlIHtAbGluayBNb25zdGVyLlR5cGVzLmlzUHJpbWl0aXZlfVxuICogQHNlZSB7QGxpbmsgTW9uc3Rlci5UeXBlcyNpc1ByaW1pdGl2ZX1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVQcmltaXRpdmUodmFsdWUpIHtcblx0aWYgKCFpc1ByaW1pdGl2ZSh2YWx1ZSkpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsdWUgaXMgbm90IGEgcHJpbWl0aXZlXCIpO1xuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIHR5cGUgbWF0Y2hlcyB0aGUgYm9vbGVhbiB0eXBlLiB0aGlzIGZ1bmN0aW9uIGlzIGlkZW50aWNhbCB0byBpc0Jvb2xlYW4oKSBleGNlcHQgdGhhdCBhIFR5cGVFcnJvciBpcyB0aHJvd24uXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7dmFsaWRhdGVCb29sZWFufSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS90eXBlcy92YWxpZGF0ZS5tanMnO1xuICogY29uc29sZS5sb2codmFsaWRhdGVCb29sZWFuKGZhbHNlKSkgIC8vIFx1MjFBNiB2YWx1ZVxuICogY29uc29sZS5sb2codmFsaWRhdGVCb29sZWFuKCcyJykpICAvLyBcdTIxQTYgVHlwZUVycm9yXG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZUJvb2xlYW4oW10pKSAgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHsqfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG5cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gIHZhbHVlIGlzIG5vdCBwcmltaXRpdmVcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVCb29sZWFuKHZhbHVlKSB7XG5cdGlmICghaXNCb29sZWFuKHZhbHVlKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ2YWx1ZSBpcyBub3QgYSBib29sZWFuXCIpO1xuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIHR5cGUgbWF0Y2hlcyB0aGUgc3RyaW5nIHR5cGUuIHRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIGlzU3RyaW5nKCkgZXhjZXB0IHRoYXQgYSBUeXBlRXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge3ZhbGlkYXRlU3RyaW5nfSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS90eXBlcy92YWxpZGF0ZS5tanMnO1xuICogY29uc29sZS5sb2codmFsaWRhdGVTdHJpbmcoJzInKSkgIC8vIFx1MjFBNiB2YWx1ZVxuICogY29uc29sZS5sb2codmFsaWRhdGVTdHJpbmcoW10pKSAgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHsqfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVN0cmluZyh2YWx1ZSkge1xuXHRpZiAoIWlzU3RyaW5nKHZhbHVlKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ2YWx1ZSBpcyBub3QgYSBzdHJpbmdcIik7XG5cdH1cblx0cmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiB0aGUgdHlwZSBtYXRjaGVzIHRoZSBvYmplY3QgdHlwZS4gdGhpcyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8gaXNPYmplY3QoKSBleGNlcHQgdGhhdCBhIFR5cGVFcnJvciBpcyB0aHJvd24uXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7dmFsaWRhdGVPYmplY3R9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL3R5cGVzL3ZhbGlkYXRlLm1qcyc7XG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZU9iamVjdCh7fSkpICAvLyBcdTIxQTYgdmFsdWVcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlT2JqZWN0KCcyJykpICAvLyBcdTIxQTYgVHlwZUVycm9yXG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZU9iamVjdChbXSkpICAvLyBcdTIxQTYgVHlwZUVycm9yXG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4geyp9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlT2JqZWN0KHZhbHVlKSB7XG5cdGlmICghaXNPYmplY3QodmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInZhbHVlIGlzIG5vdCBhIG9iamVjdFwiKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIHRoZSB0eXBlIG1hdGNoZXMgdGhlIG9iamVjdCBpbnN0YW5jZS5cbiAqXG4gKiBgYGBcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHt2YWxpZGF0ZUluc3RhbmNlfSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS90eXBlcy92YWxpZGF0ZS5tanMnO1xuICogY29uc29sZS5sb2codmFsaWRhdGVJbnN0YW5jZSh7fSwgT2JqZWN0KSkgLy8gXHUyMUE2IHZhbHVlXG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZUluc3RhbmNlKCcyJywgT2JqZWN0KSkgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogY29uc29sZS5sb2codmFsaWRhdGVJbnN0YW5jZShbXSwgT2JqZWN0KSkgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHsqfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS41LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZlxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUluc3RhbmNlKHZhbHVlLCBpbnN0YW5jZSkge1xuXHRpZiAoIWlzSW5zdGFuY2UodmFsdWUsIGluc3RhbmNlKSkge1xuXHRcdGxldCBuID0gXCJcIjtcblx0XHRpZiAoaXNPYmplY3QoaW5zdGFuY2UpIHx8IGlzRnVuY3Rpb24oaW5zdGFuY2UpKSB7XG5cdFx0XHRuID0gaW5zdGFuY2U/LltcIm5hbWVcIl07XG5cdFx0fVxuXG5cdFx0aWYgKG4pIHtcblx0XHRcdG4gPSBgICR7bn1gO1xuXHRcdH1cblxuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoYHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiR7bn1gKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIHRoZSB0eXBlIG1hdGNoZXMgdGhlIGFycmF5IHR5cGUuIHRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIGlzQXJyYXkoKSBleGNlcHQgdGhhdCBhIFR5cGVFcnJvciBpcyB0aHJvd24uXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7dmFsaWRhdGVBcnJheX0gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvdHlwZXMvdmFsaWRhdGUubWpzJztcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlQXJyYXkoJzInKSkgIC8vIFx1MjFBNiBUeXBlRXJyb3JcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlQXJyYXkoW10pKSAgLy8gXHUyMUE2IHZhbHVlXG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4geyp9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGFycmF5XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQXJyYXkodmFsdWUpIHtcblx0aWYgKCFpc0FycmF5KHZhbHVlKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ2YWx1ZSBpcyBub3QgYW4gYXJyYXlcIik7XG5cdH1cblx0cmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiB0aGUgdHlwZSBtYXRjaGVzIHRoZSBzeW1ib2wgdHlwZS4gdGhpcyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8gaXNTeW1ib2woKSBleGNlcHQgdGhhdCBhIFR5cGVFcnJvciBpcyB0aHJvd24uXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7dmFsaWRhdGVTeW1ib2x9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL3R5cGVzL3ZhbGlkYXRlLm1qcyc7XG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZVN5bWJvbCgnMicpKSAgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogY29uc29sZS5sb2codmFsaWRhdGVTeW1ib2woKSkgIC8vIFx1MjFBNiB2YWx1ZVxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHsqfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS45LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBzeW1ib2xcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVTeW1ib2wodmFsdWUpIHtcblx0aWYgKCFpc1N5bWJvbCh2YWx1ZSkpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsdWUgaXMgbm90IGFuIHN5bWJvbFwiKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIHRoZSB0eXBlIG1hdGNoZXMgdGhlIGZ1bmN0aW9uIHR5cGUuIHRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIGlzRnVuY3Rpb24oKSBleGNlcHQgdGhhdCBhIFR5cGVFcnJvciBpcyB0aHJvd24uXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7dmFsaWRhdGVGdW5jdGlvbn0gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvdHlwZXMvdmFsaWRhdGUubWpzJztcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlRnVuY3Rpb24oKCk9Pnt9KSkgLy8gXHUyMUE2IHZhbHVlXG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZUZ1bmN0aW9uKCcyJykpICAvLyBcdTIxQTYgVHlwZUVycm9yXG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZUZ1bmN0aW9uKFtdKSkgIC8vIFx1MjFBNiBUeXBlRXJyb3JcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Kn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBmdW5jdGlvblxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUZ1bmN0aW9uKHZhbHVlKSB7XG5cdGlmICghaXNGdW5jdGlvbih2YWx1ZSkpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsdWUgaXMgbm90IGEgZnVuY3Rpb25cIik7XG5cdH1cblx0cmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiB0aGUgdHlwZSBpcyBhbiBpbnRlZ2VyLiB0aGlzIGZ1bmN0aW9uIGlzIGlkZW50aWNhbCB0byBpc0ludGVnZXIoKSBleGNlcHQgdGhhdCBhIFR5cGVFcnJvciBpcyB0aHJvd24uXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7dmFsaWRhdGVGdW5jdGlvbn0gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvdHlwZXMvdmFsaWRhdGUubWpzJztcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlSW50ZWdlcih0cnVlKSkgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogY29uc29sZS5sb2codmFsaWRhdGVJbnRlZ2VyKCcyJykpICAvLyBcdTIxQTYgVHlwZUVycm9yXG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZUludGVnZXIoMikpICAvLyBcdTIxQTYgdmFsdWVcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Kn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW50ZWdlclxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUludGVnZXIodmFsdWUpIHtcblx0aWYgKCFpc0ludGVnZXIodmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInZhbHVlIGlzIG5vdCBhbiBpbnRlZ2VyXCIpO1xuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQge1xuXHR2YWxpZGF0ZUZ1bmN0aW9uLFxuXHR2YWxpZGF0ZU9iamVjdCxcblx0dmFsaWRhdGVTdHJpbmcsXG59IGZyb20gXCIuL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBnZXRHbG9iYWwsIGdldEdsb2JhbE9iamVjdCwgZ2V0R2xvYmFsRnVuY3Rpb24gfTtcblxuLyoqXG4gKiBAdHlwZSB7b2JqZWN0fVxuICogQHByaXZhdGVcbiAqL1xubGV0IGdsb2JhbFJlZmVyZW5jZTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGVudmlyb25tZW50LlxuICovXG4oZnVuY3Rpb24gKCkge1xuXHRpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09IFwib2JqZWN0XCIpIHtcblx0XHRnbG9iYWxSZWZlcmVuY2UgPSBnbG9iYWxUaGlzO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdGdsb2JhbFJlZmVyZW5jZSA9IHNlbGY7XG5cdFx0cmV0dXJuO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRnbG9iYWxSZWZlcmVuY2UgPSB3aW5kb3c7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KE9iamVjdC5wcm90b3R5cGUsIFwiX19tb25zdGVyX19cIiwge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdH0pO1xuXG5cdGlmICh0eXBlb2YgX19tb25zdGVyX18gPT09IFwib2JqZWN0XCIpIHtcblx0XHRfX21vbnN0ZXJfXy5nbG9iYWxUaGlzID0gX19tb25zdGVyX187XG5cdFx0ZGVsZXRlIE9iamVjdC5wcm90b3R5cGUuX19tb25zdGVyX187XG5cblx0XHRnbG9iYWxSZWZlcmVuY2UgPSBnbG9iYWxUaGlzO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRyeSB7XG5cdFx0Z2xvYmFsUmVmZXJlbmNlID0gRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1xuXHR9IGNhdGNoIChlKSB7fVxuXG5cdHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIGVudmlyb25tZW50LlwiKTtcbn0pKCk7XG5cbi8qKlxuICogUmV0dXJuIGdsb2JhbFRoaXNcbiAqXG4gKiBJZiBnbG9iYWxUaGlzIGlzIG5vdCBhdmFpbGFibGUsIGl0IHdpbGwgYmUgcG9seWZpbGxlZFxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNi4wXG4gKiBAcmV0dXJuIHtvYmplY3R9IGdsb2JhbFRoaXNcbiAqL1xuZnVuY3Rpb24gZ2V0R2xvYmFsKCkge1xuXHRyZXR1cm4gZ2xvYmFsUmVmZXJlbmNlO1xufVxuXG4vKipcbiAqIFJldHVybiBnbG9iYWwgb2JqZWN0IG9yIHRocm93IEVycm9yXG4gKlxuICogWW91IGNhbiBjYWxsIHRoZSBtZXRob2QgdmlhIHRoZSBtb25zdGVyIG5hbWVzcGFjZSBgTW9uc3Rlci5UeXBlcy5nZXRHbG9iYWxPYmplY3QoKWAuXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7TW9uc3Rlcn0gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvbW9uc3Rlci5tanMnO1xuICogTW9uc3Rlci5UeXBlcy5nZXRHbG9iYWxPYmplY3QoJ2RvY3VtZW50JylcbiAqIC8vIFx1MjFBNiB7IH1cbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBhbHNvIGludGVncmF0ZSB0aGlzIGZ1bmN0aW9uIGluZGl2aWR1YWxseS5cbiAqXG4gKiBgYGBcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHtnZXRHbG9iYWxPYmplY3R9IGZyb20gJ2h0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vQHNjaHVrYWkvbW9uc3RlckAxLjMwLjAvZGlzdC9tb2R1bGVzL3R5cGVzL2dsb2JhbC5tanMnO1xuICogZ2V0R2xvYmFsT2JqZWN0KCdkb2N1bWVudCcpXG4gKiAvLyBcdTIxQTYgeyB9XG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNi4wXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybiB7b2JqZWN0fVxuICogQHRocm93cyB7RXJyb3J9IHRoZSBvYmplY3QgaXMgbm90IGRlZmluZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgb2JqZWN0XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuICovXG5mdW5jdGlvbiBnZXRHbG9iYWxPYmplY3QobmFtZSkge1xuXHR2YWxpZGF0ZVN0cmluZyhuYW1lKTtcblx0Y29uc3QgbyA9IGdsb2JhbFJlZmVyZW5jZT8uW25hbWVdO1xuXHRpZiAodHlwZW9mIG8gPT09IFwidW5kZWZpbmVkXCIpXG5cdFx0dGhyb3cgbmV3IEVycm9yKGB0aGUgb2JqZWN0ICR7bmFtZX0gaXMgbm90IGRlZmluZWRgKTtcblx0dmFsaWRhdGVPYmplY3Qobyk7XG5cdHJldHVybiBvO1xufVxuXG4vKipcbiAqIFJldHVybiBnbG9iYWwgZnVuY3Rpb24gb3IgdGhyb3cgRXJyb3JcbiAqXG4gKiBZb3UgY2FuIGNhbGwgdGhlIG1ldGhvZCB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBNb25zdGVyLlR5cGVzLmdldEdsb2JhbEZ1bmN0aW9uKClgLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge01vbnN0ZXJ9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL21vbnN0ZXIubWpzJztcbiAqIGNvbnNvbGUubG9nKE1vbnN0ZXIuVHlwZXMuZ2V0R2xvYmFsRnVuY3Rpb24oJ3BhcnNlSW50JykpIC8vIFx1MjFBNiBmIHBhcnNlSW50KCkgeyB9XG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gYWxzbyBpbnRlZ3JhdGUgdGhpcyBmdW5jdGlvbiBpbmRpdmlkdWFsbHkuXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7Z2V0R2xvYmFsRnVuY3Rpb259IGZyb20gJ2h0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vQHNjaHVrYWkvbW9uc3RlckAxLjMwLjAvZGlzdC9tb2R1bGVzL3R5cGVzL2dsb2JhbC5tanMnO1xuICogY29uc29sZS5sb2coZ2V0R2xvYmFsRnVuY3Rpb24oJ3BhcnNlSW50JykpIC8vIFx1MjFBNiBmIHBhcnNlSW50KCkgeyB9XG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNi4wXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybiB7b2JqZWN0fVxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBmdW5jdGlvblxuICogQHRocm93cyB7RXJyb3J9IHRoZSBmdW5jdGlvbiBpcyBub3QgZGVmaW5lZFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZ2V0R2xvYmFsRnVuY3Rpb24obmFtZSkge1xuXHR2YWxpZGF0ZVN0cmluZyhuYW1lKTtcblx0Y29uc3QgZiA9IGdsb2JhbFJlZmVyZW5jZT8uW25hbWVdO1xuXHRpZiAodHlwZW9mIGYgPT09IFwidW5kZWZpbmVkXCIpXG5cdFx0dGhyb3cgbmV3IEVycm9yKGB0aGUgZnVuY3Rpb24gJHtuYW1lfSBpcyBub3QgZGVmaW5lZGApO1xuXHR2YWxpZGF0ZUZ1bmN0aW9uKGYpO1xuXHRyZXR1cm4gZjtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5leHBvcnQgeyB0eXBlT2YgfTtcblxuLyoqXG4gKiBUaGUgYnVpbHQtaW4gdHlwZW9mIG1ldGhvZCBpcyBrbm93biB0byBoYXZlIHNvbWUgaGlzdG9yaWNhbCB3ZWFrbmVzc2VzLiBUaGlzIGZ1bmN0aW9uIHRyaWVzIHRvIHByb3ZpZGUgYSBiZXR0ZXIgYW5kIG1vcmUgYWNjdXJhdGUgcmVzdWx0LlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBwcmltaXRpdmVcbiAqL1xuZnVuY3Rpb24gdHlwZU9mKHZhbHVlKSB7XG5cdGxldCB0eXBlID0ge30udG9TdHJpbmcuY2FsbCh2YWx1ZSkubWF0Y2goL1xccyhbYS16QS1aXSspLylbMV07XG5cdGlmIChcIk9iamVjdFwiID09PSB0eXBlKSB7XG5cdFx0Y29uc3QgbmFtZSA9IHZhbHVlLmNvbnN0cnVjdG9yLm5hbWU7XG5cdFx0aWYgKG5hbWUpIHtcblx0XHRcdHJldHVybiBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcmVzdWx0cyA9IC9eKGNsYXNzfGZ1bmN0aW9uKVxccysoXFx3KykvLmV4ZWMoXG5cdFx0XHR2YWx1ZS5jb25zdHJ1Y3Rvci50b1N0cmluZygpLFxuXHRcdCk7XG5cdFx0dHlwZSA9IHJlc3VsdHMgJiYgcmVzdWx0cy5sZW5ndGggPiAyID8gcmVzdWx0c1syXSA6IFwiXCI7XG5cdH1cblxuXHRyZXR1cm4gdHlwZS50b0xvd2VyQ2FzZSgpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGlzQXJyYXksIGlzT2JqZWN0IH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgdHlwZU9mIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVvZi5tanNcIjtcblxuZXhwb3J0IHsgZXh0ZW5kIH07XG5cbi8qKlxuICogRXh0ZW5kIGNvcGllcyBhbGwgZW51bWVyYWJsZSBvd24gcHJvcGVydGllcyBmcm9tIG9uZSBvclxuICogbW9yZSBzb3VyY2Ugb2JqZWN0cyB0byBhIHRhcmdldCBvYmplY3QuIEl0IHJldHVybnMgdGhlIG1vZGlmaWVkIHRhcmdldCBvYmplY3QuXG4gKlxuICogQHJldHVybiB7b2JqZWN0fVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGFyZ3VtZW50XG4gKiBAdGhyb3dzIHtFcnJvcn0gdHlwZSBtaXNtYXRjaFxuICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGFyZ3VtZW50XG4gKiBAcGFyYW0gYXJnc1xuICovXG5mdW5jdGlvbiBleHRlbmQoLi4uYXJncykge1xuXHRsZXQgbztcblx0bGV0IGk7XG5cblx0aWYgKHR5cGVvZiBhcmdzICE9PSBcIm9iamVjdFwiIHx8IGFyZ3NbMF0gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGFyZ3VtZW50ICR7SlNPTi5zdHJpbmdpZnkoYXJnc1swXSl9YCk7XG5cdH1cblxuXHRmb3IgKGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuXHRcdGNvbnN0IGEgPSBhcmdzW2ldO1xuXG5cdFx0aWYgKCEoaXNPYmplY3QoYSkgfHwgaXNBcnJheShhKSkpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgYXJndW1lbnQgJHtKU09OLnN0cmluZ2lmeShhKX1gKTtcblx0XHR9XG5cblx0XHRpZiAobyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRvID0gYTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgayBpbiBhKSB7XG5cdFx0XHRjb25zdCB2ID0gYT8uW2tdO1xuXG5cdFx0XHRpZiAodiA9PT0gbz8uW2tdKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoKGlzT2JqZWN0KHYpICYmIHR5cGVPZih2KSA9PT0gXCJvYmplY3RcIikgfHwgaXNBcnJheSh2KSkge1xuXHRcdFx0XHRpZiAob1trXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0aWYgKGlzQXJyYXkodikpIHtcblx0XHRcdFx0XHRcdG9ba10gPSBbXTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0b1trXSA9IHt9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZiAodHlwZU9mKG9ba10pICE9PSB0eXBlT2YodikpIHtcblx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0XHRcdFx0YHR5cGUgbWlzbWF0Y2g6ICR7SlNPTi5zdHJpbmdpZnkob1trXSl9KCR7dHlwZU9mKFxuXHRcdFx0XHRcdFx0XHRcdG9ba10sXG5cdFx0XHRcdFx0XHRcdCl9KSAhPSAke0pTT04uc3RyaW5naWZ5KHYpfSgke3R5cGVPZih2KX0pYCxcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGlzQXJyYXkob1trXSkpIHtcblx0XHRcdFx0XHRvW2tdID0gW107XG5cdFx0XHRcdFx0b1trXS5wdXNoKC4uLnYpO1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0b1trXSA9IGV4dGVuZChvW2tdLCB2KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmIChpc0FycmF5KG8pKSB7XG5cdFx0XHRcdFx0by5wdXNoKHYpO1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG9ba10gPSB2O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBvO1xufVxuIiwgIi8vIGh0dHA6Ly93d3cucmFqZGVlcGQuY29tL2FydGljbGVzL2Nocm9tZS9sb2NhbHN0cmcvTG9jYWxTdG9yYWdlU2FtcGxlLmh0bVxuXG4vLyBOT1RFOlxuLy8gdGhpcyB2YXJpZXMgZnJvbSBhY3R1YWwgbG9jYWxTdG9yYWdlIGluIHNvbWUgc3VidGxlIHdheXNcblxuLy8gYWxzbywgdGhlcmUgaXMgbm8gcGVyc2lzdGVuY2Vcbi8vIFRPRE8gcGVyc2lzdFxuKGZ1bmN0aW9uICgpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgdmFyIGZzID0gcmVxdWlyZSgnZnMnKTtcblxuICBmdW5jdGlvbiBTdG9yYWdlKHBhdGgsIG9wdHMpIHtcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgICB2YXIgZGI7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ19fX3ByaXZfYmtfX18nLCB7XG4gICAgICB2YWx1ZToge1xuICAgICAgICBwYXRoOiBwYXRoXG4gICAgICB9XG4gICAgLCB3cml0YWJsZTogZmFsc2VcbiAgICAsIGVudW1lcmFibGU6IGZhbHNlXG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ19fX3ByaXZfc3RyaWN0X19fJywge1xuICAgICAgdmFsdWU6ICEhb3B0cy5zdHJpY3RcbiAgICAsIHdyaXRhYmxlOiBmYWxzZVxuICAgICwgZW51bWVyYWJsZTogZmFsc2VcbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnX19fcHJpdl93c19fXycsIHtcbiAgICAgIHZhbHVlOiBvcHRzLndzIHx8ICcgICdcbiAgICAsIHdyaXRhYmxlOiBmYWxzZVxuICAgICwgZW51bWVyYWJsZTogZmFsc2VcbiAgICB9KTtcblxuICAgIHRyeSB7XG4gICAgICBkYiA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHBhdGgpKTtcbiAgICB9IGNhdGNoKGUpIHtcbiAgICAgIGRiID0ge307XG4gICAgfVxuXG4gICAgT2JqZWN0LmtleXMoZGIpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgdGhpc1trZXldID0gZGJba2V5XTtcbiAgICB9LCB0aGlzKTtcbiAgfVxuXG4gIFN0b3JhZ2UucHJvdG90eXBlLmdldEl0ZW0gPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgaWYgKHRoaXMuX19fcHJpdl9zdHJpY3RfX18pIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZyh0aGlzW2tleV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXNba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgU3RvcmFnZS5wcm90b3R5cGUuc2V0SXRlbSA9IGZ1bmN0aW9uIChrZXksIHZhbCkge1xuICAgIGlmICh2YWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpc1trZXldID0gbnVsbDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX19fcHJpdl9zdHJpY3RfX18pIHtcbiAgICAgIHRoaXNba2V5XSA9IFN0cmluZyh2YWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tleV0gPSB2YWw7XG4gICAgfVxuICAgIHRoaXMuX19fc2F2ZV9fXygpO1xuICB9O1xuXG4gIFN0b3JhZ2UucHJvdG90eXBlLnJlbW92ZUl0ZW0gPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgZGVsZXRlIHRoaXNba2V5XTtcbiAgICB0aGlzLl9fX3NhdmVfX18oKTtcbiAgfTtcblxuICBTdG9yYWdlLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgLy8gZmlsdGVycyBvdXQgcHJvdG90eXBlIGtleXNcbiAgICBPYmplY3Qua2V5cyhzZWxmKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHNlbGZba2V5XSA9IHVuZGVmaW5lZDtcbiAgICAgIGRlbGV0ZSBzZWxmW2tleV07XG4gICAgfSk7XG4gIH07XG5cbiAgU3RvcmFnZS5wcm90b3R5cGUua2V5ID0gZnVuY3Rpb24gKGkpIHtcbiAgICBpID0gaSB8fCAwO1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzKVtpXTtcbiAgfTtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3RvcmFnZS5wcm90b3R5cGUsICdsZW5ndGgnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzKS5sZW5ndGg7XG4gICAgfVxuICB9KTtcblxuICBTdG9yYWdlLnByb3RvdHlwZS5fX19zYXZlX19fID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIGlmICghdGhpcy5fX19wcml2X2JrX19fLnBhdGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fX19wcml2X2JrX19fLmxvY2spIHtcbiAgICAgIHRoaXMuX19fcHJpdl9ia19fXy53YWl0ID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9fX3ByaXZfYmtfX18ubG9jayA9IHRydWU7XG4gICAgZnMud3JpdGVGaWxlKFxuICAgICAgdGhpcy5fX19wcml2X2JrX19fLnBhdGhcbiAgICAsIEpTT04uc3RyaW5naWZ5KHRoaXMsIG51bGwsIHRoaXMuX19fcHJpdl93c19fXylcbiAgICAsICd1dGY4J1xuICAgICwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIHNlbGYuX19fcHJpdl9ia19fXy5sb2NrID0gZmFsc2U7XG4gICAgICBpZiAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdDb3VsZCBub3Qgd3JpdGUgdG8gZGF0YWJhc2UnLCBzZWxmLl9fX3ByaXZfYmtfX18ucGF0aCk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChzZWxmLl9fX3ByaXZfYmtfX18ud2FpdCkge1xuICAgICAgICBzZWxmLl9fX3ByaXZfYmtfX18ud2FpdCA9IGZhbHNlO1xuICAgICAgICBzZWxmLl9fX3NhdmVfX18oKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3RvcmFnZSwgJ2NyZWF0ZScsIHtcbiAgICB2YWx1ZTogZnVuY3Rpb24gKHBhdGgsIG9wdHMpIHtcbiAgICAgIHJldHVybiBuZXcgU3RvcmFnZShwYXRoLCBvcHRzKTtcbiAgICB9XG4gICwgd3JpdGFibGU6IGZhbHNlXG4gICwgZW51bWVyYWJsZTogZmFsc2VcbiAgfSk7XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBTdG9yYWdlO1xufSgpKTtcbiIsICIoZnVuY3Rpb24gKGV4cG9ydHMpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICBjb25zdCByZWZNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgIGNvbnN0IHZhbGlkaXR5TWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBjb25zdCBoaWRkZW5JbnB1dE1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgY29uc3QgaW50ZXJuYWxzTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBjb25zdCB2YWxpZGF0aW9uTWVzc2FnZU1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgY29uc3QgZm9ybXNNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgIGNvbnN0IHNoYWRvd0hvc3RzTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBjb25zdCBmb3JtRWxlbWVudHNNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgIGNvbnN0IHJlZlZhbHVlTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBjb25zdCB1cGdyYWRlTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBjb25zdCBzaGFkb3dSb290TWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBjb25zdCB2YWxpZGF0aW9uQW5jaG9yTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBjb25zdCBkb2N1bWVudEZyYWdtZW50TWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBjb25zdCBjb25uZWN0ZWRDYWxsYmFja01hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgY29uc3QgdmFsaWRpdHlVcGdyYWRlTWFwID0gbmV3IFdlYWtNYXAoKTtcblxuICAgIGNvbnN0IGFvbSA9IHtcbiAgICAgICAgYXJpYUF0b21pYzogJ2FyaWEtYXRvbWljJyxcbiAgICAgICAgYXJpYUF1dG9Db21wbGV0ZTogJ2FyaWEtYXV0b2NvbXBsZXRlJyxcbiAgICAgICAgYXJpYUJ1c3k6ICdhcmlhLWJ1c3knLFxuICAgICAgICBhcmlhQ2hlY2tlZDogJ2FyaWEtY2hlY2tlZCcsXG4gICAgICAgIGFyaWFDb2xDb3VudDogJ2FyaWEtY29sY291bnQnLFxuICAgICAgICBhcmlhQ29sSW5kZXg6ICdhcmlhLWNvbGluZGV4JyxcbiAgICAgICAgYXJpYUNvbEluZGV4VGV4dDogJ2FyaWEtY29saW5kZXh0ZXh0JyxcbiAgICAgICAgYXJpYUNvbFNwYW46ICdhcmlhLWNvbHNwYW4nLFxuICAgICAgICBhcmlhQ3VycmVudDogJ2FyaWEtY3VycmVudCcsXG4gICAgICAgIGFyaWFEZXNjcmlwdGlvbjogJ2FyaWEtZGVzY3JpcHRpb24nLFxuICAgICAgICBhcmlhRGlzYWJsZWQ6ICdhcmlhLWRpc2FibGVkJyxcbiAgICAgICAgYXJpYUV4cGFuZGVkOiAnYXJpYS1leHBhbmRlZCcsXG4gICAgICAgIGFyaWFIYXNQb3B1cDogJ2FyaWEtaGFzcG9wdXAnLFxuICAgICAgICBhcmlhSGlkZGVuOiAnYXJpYS1oaWRkZW4nLFxuICAgICAgICBhcmlhSW52YWxpZDogJ2FyaWEtaW52YWxpZCcsXG4gICAgICAgIGFyaWFLZXlTaG9ydGN1dHM6ICdhcmlhLWtleXNob3J0Y3V0cycsXG4gICAgICAgIGFyaWFMYWJlbDogJ2FyaWEtbGFiZWwnLFxuICAgICAgICBhcmlhTGV2ZWw6ICdhcmlhLWxldmVsJyxcbiAgICAgICAgYXJpYUxpdmU6ICdhcmlhLWxpdmUnLFxuICAgICAgICBhcmlhTW9kYWw6ICdhcmlhLW1vZGFsJyxcbiAgICAgICAgYXJpYU11bHRpTGluZTogJ2FyaWEtbXVsdGlsaW5lJyxcbiAgICAgICAgYXJpYU11bHRpU2VsZWN0YWJsZTogJ2FyaWEtbXVsdGlzZWxlY3RhYmxlJyxcbiAgICAgICAgYXJpYU9yaWVudGF0aW9uOiAnYXJpYS1vcmllbnRhdGlvbicsXG4gICAgICAgIGFyaWFQbGFjZWhvbGRlcjogJ2FyaWEtcGxhY2Vob2xkZXInLFxuICAgICAgICBhcmlhUG9zSW5TZXQ6ICdhcmlhLXBvc2luc2V0JyxcbiAgICAgICAgYXJpYVByZXNzZWQ6ICdhcmlhLXByZXNzZWQnLFxuICAgICAgICBhcmlhUmVhZE9ubHk6ICdhcmlhLXJlYWRvbmx5JyxcbiAgICAgICAgYXJpYVJlbGV2YW50OiAnYXJpYS1yZWxldmFudCcsXG4gICAgICAgIGFyaWFSZXF1aXJlZDogJ2FyaWEtcmVxdWlyZWQnLFxuICAgICAgICBhcmlhUm9sZURlc2NyaXB0aW9uOiAnYXJpYS1yb2xlZGVzY3JpcHRpb24nLFxuICAgICAgICBhcmlhUm93Q291bnQ6ICdhcmlhLXJvd2NvdW50JyxcbiAgICAgICAgYXJpYVJvd0luZGV4OiAnYXJpYS1yb3dpbmRleCcsXG4gICAgICAgIGFyaWFSb3dJbmRleFRleHQ6ICdhcmlhLXJvd2luZGV4dGV4dCcsXG4gICAgICAgIGFyaWFSb3dTcGFuOiAnYXJpYS1yb3dzcGFuJyxcbiAgICAgICAgYXJpYVNlbGVjdGVkOiAnYXJpYS1zZWxlY3RlZCcsXG4gICAgICAgIGFyaWFTZXRTaXplOiAnYXJpYS1zZXRzaXplJyxcbiAgICAgICAgYXJpYVNvcnQ6ICdhcmlhLXNvcnQnLFxuICAgICAgICBhcmlhVmFsdWVNYXg6ICdhcmlhLXZhbHVlbWF4JyxcbiAgICAgICAgYXJpYVZhbHVlTWluOiAnYXJpYS12YWx1ZW1pbicsXG4gICAgICAgIGFyaWFWYWx1ZU5vdzogJ2FyaWEtdmFsdWVub3cnLFxuICAgICAgICBhcmlhVmFsdWVUZXh0OiAnYXJpYS12YWx1ZXRleHQnLFxuICAgICAgICByb2xlOiAncm9sZSdcbiAgICB9O1xuICAgIGNvbnN0IGluaXRBb20gPSAocmVmLCBpbnRlcm5hbHMpID0+IHtcbiAgICAgICAgZm9yIChsZXQga2V5IGluIGFvbSkge1xuICAgICAgICAgICAgaW50ZXJuYWxzW2tleV0gPSBudWxsO1xuICAgICAgICAgICAgbGV0IGNsb3N1cmVWYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVOYW1lID0gYW9tW2tleV07XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoaW50ZXJuYWxzLCBrZXksIHtcbiAgICAgICAgICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjbG9zdXJlVmFsdWU7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xvc3VyZVZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWYuaXNDb25uZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXBncmFkZU1hcC5zZXQocmVmLCBpbnRlcm5hbHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gaW5pdE5vZGUobm9kZSkge1xuICAgICAgICBjb25zdCBpbnRlcm5hbHMgPSBpbnRlcm5hbHNNYXAuZ2V0KG5vZGUpO1xuICAgICAgICBjb25zdCB7IGZvcm0gfSA9IGludGVybmFscztcbiAgICAgICAgaW5pdEZvcm0obm9kZSwgZm9ybSwgaW50ZXJuYWxzKTtcbiAgICAgICAgaW5pdExhYmVscyhub2RlLCBpbnRlcm5hbHMubGFiZWxzKTtcbiAgICB9XG4gICAgY29uc3Qgd2Fsa0ZpZWxkc2V0ID0gKG5vZGUsIGZpcnN0UmVuZGVyID0gZmFsc2UpID0+IHtcbiAgICAgICAgY29uc3Qgd2Fsa2VyID0gZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihub2RlLCBOb2RlRmlsdGVyLlNIT1dfRUxFTUVOVCwge1xuICAgICAgICAgICAgYWNjZXB0Tm9kZShub2RlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsc01hcC5oYXMobm9kZSkgP1xuICAgICAgICAgICAgICAgICAgICBOb2RlRmlsdGVyLkZJTFRFUl9BQ0NFUFQgOiBOb2RlRmlsdGVyLkZJTFRFUl9TS0lQO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IGN1cnJlbnQgPSB3YWxrZXIubmV4dE5vZGUoKTtcbiAgICAgICAgY29uc3QgaXNDYWxsTmVjZXNzYXJ5ID0gKCFmaXJzdFJlbmRlciB8fCBub2RlLmRpc2FibGVkKTtcbiAgICAgICAgd2hpbGUgKGN1cnJlbnQpIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50LmZvcm1EaXNhYmxlZENhbGxiYWNrICYmIGlzQ2FsbE5lY2Vzc2FyeSkge1xuICAgICAgICAgICAgICAgIHNldERpc2FibGVkKGN1cnJlbnQsIG5vZGUuZGlzYWJsZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3VycmVudCA9IHdhbGtlci5uZXh0Tm9kZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBkaXNhYmxlZE9yTmFtZU9ic2VydmVyQ29uZmlnID0geyBhdHRyaWJ1dGVzOiB0cnVlLCBhdHRyaWJ1dGVGaWx0ZXI6IFsnZGlzYWJsZWQnLCAnbmFtZSddIH07XG4gICAgY29uc3QgZGlzYWJsZWRPck5hbWVPYnNlcnZlciA9IG11dGF0aW9uT2JzZXJ2ZXJFeGlzdHMoKSA/IG5ldyBNdXRhdGlvbk9ic2VydmVyKChtdXRhdGlvbnNMaXN0KSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgbXV0YXRpb24gb2YgbXV0YXRpb25zTGlzdCkge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gbXV0YXRpb24udGFyZ2V0O1xuICAgICAgICAgICAgaWYgKG11dGF0aW9uLmF0dHJpYnV0ZU5hbWUgPT09ICdkaXNhYmxlZCcpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0LmNvbnN0cnVjdG9yWydmb3JtQXNzb2NpYXRlZCddKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldERpc2FibGVkKHRhcmdldCwgdGFyZ2V0Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRhcmdldC5sb2NhbE5hbWUgPT09ICdmaWVsZHNldCcpIHtcbiAgICAgICAgICAgICAgICAgICAgd2Fsa0ZpZWxkc2V0KHRhcmdldCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG11dGF0aW9uLmF0dHJpYnV0ZU5hbWUgPT09ICduYW1lJykge1xuICAgICAgICAgICAgICAgIGlmICh0YXJnZXQuY29uc3RydWN0b3JbJ2Zvcm1Bc3NvY2lhdGVkJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50ZXJuYWxzID0gaW50ZXJuYWxzTWFwLmdldCh0YXJnZXQpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHJlZlZhbHVlTWFwLmdldCh0YXJnZXQpO1xuICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbHMuc2V0Rm9ybVZhbHVlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KSA6IHt9O1xuICAgIGZ1bmN0aW9uIG9ic2VydmVyQ2FsbGJhY2sobXV0YXRpb25MaXN0KSB7XG4gICAgICAgIG11dGF0aW9uTGlzdC5mb3JFYWNoKG11dGF0aW9uUmVjb3JkID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgYWRkZWROb2RlcywgcmVtb3ZlZE5vZGVzIH0gPSBtdXRhdGlvblJlY29yZDtcbiAgICAgICAgICAgIGNvbnN0IGFkZGVkID0gQXJyYXkuZnJvbShhZGRlZE5vZGVzKTtcbiAgICAgICAgICAgIGNvbnN0IHJlbW92ZWQgPSBBcnJheS5mcm9tKHJlbW92ZWROb2Rlcyk7XG4gICAgICAgICAgICBhZGRlZC5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICBpZiAoaW50ZXJuYWxzTWFwLmhhcyhub2RlKSAmJiBub2RlLmNvbnN0cnVjdG9yWydmb3JtQXNzb2NpYXRlZCddKSB7XG4gICAgICAgICAgICAgICAgICAgIGluaXROb2RlKG5vZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodXBncmFkZU1hcC5oYXMobm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50ZXJuYWxzID0gdXBncmFkZU1hcC5nZXQobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFvbUtleXMgPSBPYmplY3Qua2V5cyhhb20pO1xuICAgICAgICAgICAgICAgICAgICBhb21LZXlzXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGtleSA9PiBpbnRlcm5hbHNba2V5XSAhPT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShhb21ba2V5XSwgaW50ZXJuYWxzW2tleV0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdXBncmFkZU1hcC5kZWxldGUobm9kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh2YWxpZGl0eVVwZ3JhZGVNYXAuaGFzKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGludGVybmFscyA9IHZhbGlkaXR5VXBncmFkZU1hcC5nZXQobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdpbnRlcm5hbHMtdmFsaWQnLCBpbnRlcm5hbHMudmFsaWRpdHkudmFsaWQudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdpbnRlcm5hbHMtaW52YWxpZCcsICghaW50ZXJuYWxzLnZhbGlkaXR5LnZhbGlkKS50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ2FyaWEtaW52YWxpZCcsICghaW50ZXJuYWxzLnZhbGlkaXR5LnZhbGlkKS50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRpdHlVcGdyYWRlTWFwLmRlbGV0ZShub2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUubG9jYWxOYW1lID09PSAnZm9ybScpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybUVsZW1lbnRzID0gZm9ybUVsZW1lbnRzTWFwLmdldChub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2Fsa2VyID0gZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihub2RlLCBOb2RlRmlsdGVyLlNIT1dfRUxFTUVOVCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXB0Tm9kZShub2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChpbnRlcm5hbHNNYXAuaGFzKG5vZGUpICYmIG5vZGUuY29uc3RydWN0b3JbJ2Zvcm1Bc3NvY2lhdGVkJ10gJiYgIShmb3JtRWxlbWVudHMgJiYgZm9ybUVsZW1lbnRzLmhhcyhub2RlKSkpID8gTm9kZUZpbHRlci5GSUxURVJfQUNDRVBUIDogTm9kZUZpbHRlci5GSUxURVJfU0tJUDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjdXJyZW50ID0gd2Fsa2VyLm5leHROb2RlKCk7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChjdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbml0Tm9kZShjdXJyZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSB3YWxrZXIubmV4dE5vZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobm9kZS5sb2NhbE5hbWUgPT09ICdmaWVsZHNldCcpIHtcbiAgICAgICAgICAgICAgICAgICAgKF9hID0gZGlzYWJsZWRPck5hbWVPYnNlcnZlci5vYnNlcnZlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChkaXNhYmxlZE9yTmFtZU9ic2VydmVyLCBub2RlLCBkaXNhYmxlZE9yTmFtZU9ic2VydmVyQ29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgd2Fsa0ZpZWxkc2V0KG5vZGUsIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmVtb3ZlZC5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGludGVybmFscyA9IGludGVybmFsc01hcC5nZXQobm9kZSk7XG4gICAgICAgICAgICAgICAgaWYgKGludGVybmFscyAmJiBoaWRkZW5JbnB1dE1hcC5nZXQoaW50ZXJuYWxzKSkge1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVIaWRkZW5JbnB1dHMoaW50ZXJuYWxzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNoYWRvd0hvc3RzTWFwLmhhcyhub2RlKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvYnNlcnZlciA9IHNoYWRvd0hvc3RzTWFwLmdldChub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZnJhZ21lbnRPYnNlcnZlckNhbGxiYWNrKG11dGF0aW9uTGlzdCkge1xuICAgICAgICBtdXRhdGlvbkxpc3QuZm9yRWFjaChtdXRhdGlvbiA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IHJlbW92ZWROb2RlcyB9ID0gbXV0YXRpb247XG4gICAgICAgICAgICByZW1vdmVkTm9kZXMuZm9yRWFjaChub2RlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBvYnNlcnZlciA9IGRvY3VtZW50RnJhZ21lbnRNYXAuZ2V0KG11dGF0aW9uLnRhcmdldCk7XG4gICAgICAgICAgICAgICAgaWYgKGludGVybmFsc01hcC5oYXMobm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdXBncmFkZUludGVybmFscyhub2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBkZWZlclVwZ3JhZGUgPSAoZnJhZ21lbnQpID0+IHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihmcmFnbWVudE9ic2VydmVyQ2FsbGJhY2spO1xuICAgICAgICBpZiAoKChfYSA9IHdpbmRvdyA9PT0gbnVsbCB8fCB3aW5kb3cgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHdpbmRvdy5TaGFkeURPTSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmluVXNlKSAmJlxuICAgICAgICAgICAgZnJhZ21lbnQubW9kZSAmJlxuICAgICAgICAgICAgZnJhZ21lbnQuaG9zdCkge1xuICAgICAgICAgICAgZnJhZ21lbnQgPSBmcmFnbWVudC5ob3N0O1xuICAgICAgICB9XG4gICAgICAgIChfYiA9IG9ic2VydmVyLm9ic2VydmUpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKG9ic2VydmVyLCBmcmFnbWVudCwgeyBjaGlsZExpc3Q6IHRydWUgfSk7XG4gICAgICAgIGRvY3VtZW50RnJhZ21lbnRNYXAuc2V0KGZyYWdtZW50LCBvYnNlcnZlcik7XG4gICAgfTtcbiAgICBtdXRhdGlvbk9ic2VydmVyRXhpc3RzKCkgPyBuZXcgTXV0YXRpb25PYnNlcnZlcihvYnNlcnZlckNhbGxiYWNrKSA6IHt9O1xuICAgIGNvbnN0IG9ic2VydmVyQ29uZmlnID0ge1xuICAgICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICAgIHN1YnRyZWU6IHRydWVcbiAgICB9O1xuXG4gICAgY29uc3Qgc2V0RGlzYWJsZWQgPSAocmVmLCBkaXNhYmxlZCkgPT4ge1xuICAgICAgICByZWYudG9nZ2xlQXR0cmlidXRlKCdpbnRlcm5hbHMtZGlzYWJsZWQnLCBkaXNhYmxlZCk7XG4gICAgICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgICAgICAgcmVmLnNldEF0dHJpYnV0ZSgnYXJpYS1kaXNhYmxlZCcsICd0cnVlJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZWYucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWRpc2FibGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlZi5mb3JtRGlzYWJsZWRDYWxsYmFjaykge1xuICAgICAgICAgICAgcmVmLmZvcm1EaXNhYmxlZENhbGxiYWNrLmFwcGx5KHJlZiwgW2Rpc2FibGVkXSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZUhpZGRlbklucHV0cyA9IChpbnRlcm5hbHMpID0+IHtcbiAgICAgICAgY29uc3QgaGlkZGVuSW5wdXRzID0gaGlkZGVuSW5wdXRNYXAuZ2V0KGludGVybmFscyk7XG4gICAgICAgIGhpZGRlbklucHV0cy5mb3JFYWNoKGhpZGRlbklucHV0ID0+IHtcbiAgICAgICAgICAgIGhpZGRlbklucHV0LnJlbW92ZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgaGlkZGVuSW5wdXRNYXAuc2V0KGludGVybmFscywgW10pO1xuICAgIH07XG4gICAgY29uc3QgY3JlYXRlSGlkZGVuSW5wdXQgPSAocmVmLCBpbnRlcm5hbHMpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgICAgICBpbnB1dC50eXBlID0gJ2hpZGRlbic7XG4gICAgICAgIGlucHV0Lm5hbWUgPSByZWYuZ2V0QXR0cmlidXRlKCduYW1lJyk7XG4gICAgICAgIHJlZi5hZnRlcihpbnB1dCk7XG4gICAgICAgIGhpZGRlbklucHV0TWFwLmdldChpbnRlcm5hbHMpLnB1c2goaW5wdXQpO1xuICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgfTtcbiAgICBjb25zdCBpbml0UmVmID0gKHJlZiwgaW50ZXJuYWxzKSA9PiB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaGlkZGVuSW5wdXRNYXAuc2V0KGludGVybmFscywgW10pO1xuICAgICAgICAoX2EgPSBkaXNhYmxlZE9yTmFtZU9ic2VydmVyLm9ic2VydmUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKGRpc2FibGVkT3JOYW1lT2JzZXJ2ZXIsIHJlZiwgZGlzYWJsZWRPck5hbWVPYnNlcnZlckNvbmZpZyk7XG4gICAgfTtcbiAgICBjb25zdCBpbml0TGFiZWxzID0gKHJlZiwgbGFiZWxzKSA9PiB7XG4gICAgICAgIGlmIChsYWJlbHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBBcnJheS5mcm9tKGxhYmVscykuZm9yRWFjaChsYWJlbCA9PiBsYWJlbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHJlZi5jbGljay5iaW5kKHJlZikpKTtcbiAgICAgICAgICAgIGxldCBmaXJzdExhYmVsSWQgPSBsYWJlbHNbMF0uaWQ7XG4gICAgICAgICAgICBpZiAoIWxhYmVsc1swXS5pZCkge1xuICAgICAgICAgICAgICAgIGZpcnN0TGFiZWxJZCA9IGAke2xhYmVsc1swXS5odG1sRm9yfV9MYWJlbGA7XG4gICAgICAgICAgICAgICAgbGFiZWxzWzBdLmlkID0gZmlyc3RMYWJlbElkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVmLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbGxlZGJ5JywgZmlyc3RMYWJlbElkKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgc2V0Rm9ybVZhbGlkaXR5ID0gKGZvcm0pID0+IHtcbiAgICAgICAgY29uc3QgbmF0aXZlQ29udHJvbFZhbGlkaXR5ID0gQXJyYXkuZnJvbShmb3JtLmVsZW1lbnRzKVxuICAgICAgICAgICAgLmZpbHRlcigoZWxlbWVudCkgPT4gIWVsZW1lbnQudGFnTmFtZS5pbmNsdWRlcygnLScpICYmIGVsZW1lbnQudmFsaWRpdHkpXG4gICAgICAgICAgICAubWFwKChlbGVtZW50KSA9PiBlbGVtZW50LnZhbGlkaXR5LnZhbGlkKTtcbiAgICAgICAgY29uc3QgcG9seWZpbGxlZEVsZW1lbnRzID0gZm9ybUVsZW1lbnRzTWFwLmdldChmb3JtKSB8fCBbXTtcbiAgICAgICAgY29uc3QgcG9seWZpbGxlZFZhbGlkaXR5ID0gQXJyYXkuZnJvbShwb2x5ZmlsbGVkRWxlbWVudHMpXG4gICAgICAgICAgICAuZmlsdGVyKGNvbnRyb2wgPT4gY29udHJvbC5pc0Nvbm5lY3RlZClcbiAgICAgICAgICAgIC5tYXAoKGNvbnRyb2wpID0+IGludGVybmFsc01hcC5nZXQoY29udHJvbCkudmFsaWRpdHkudmFsaWQpO1xuICAgICAgICBjb25zdCBoYXNJbnZhbGlkID0gWy4uLm5hdGl2ZUNvbnRyb2xWYWxpZGl0eSwgLi4ucG9seWZpbGxlZFZhbGlkaXR5XS5pbmNsdWRlcyhmYWxzZSk7XG4gICAgICAgIGZvcm0udG9nZ2xlQXR0cmlidXRlKCdpbnRlcm5hbHMtaW52YWxpZCcsIGhhc0ludmFsaWQpO1xuICAgICAgICBmb3JtLnRvZ2dsZUF0dHJpYnV0ZSgnaW50ZXJuYWxzLXZhbGlkJywgIWhhc0ludmFsaWQpO1xuICAgIH07XG4gICAgY29uc3QgZm9ybUlucHV0Q2FsbGJhY2sgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgc2V0Rm9ybVZhbGlkaXR5KGZpbmRQYXJlbnRGb3JtKGV2ZW50LnRhcmdldCkpO1xuICAgIH07XG4gICAgY29uc3QgZm9ybUNoYW5nZUNhbGxiYWNrID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIHNldEZvcm1WYWxpZGl0eShmaW5kUGFyZW50Rm9ybShldmVudC50YXJnZXQpKTtcbiAgICB9O1xuICAgIGNvbnN0IHdpcmVTdWJtaXRMb2dpYyA9IChmb3JtKSA9PiB7XG4gICAgICAgIGNvbnN0IHN1Ym1pdEJ1dHRvblNlbGVjdG9yID0gWydidXR0b25bdHlwZT1zdWJtaXRdJywgJ2lucHV0W3R5cGU9c3VibWl0XScsICdidXR0b246bm90KFt0eXBlXSknXVxuICAgICAgICAgICAgLm1hcChzZWwgPT4gYCR7c2VsfTpub3QoW2Rpc2FibGVkXSlgKVxuICAgICAgICAgICAgLm1hcChzZWwgPT4gYCR7c2VsfTpub3QoW2Zvcm1dKSR7Zm9ybS5pZCA/IGAsJHtzZWx9W2Zvcm09JyR7Zm9ybS5pZH0nXWAgOiAnJ31gKVxuICAgICAgICAgICAgLmpvaW4oJywnKTtcbiAgICAgICAgZm9ybS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgICAgICAgICAgIGlmICh0YXJnZXQuY2xvc2VzdChzdWJtaXRCdXR0b25TZWxlY3RvcikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50cyA9IGZvcm1FbGVtZW50c01hcC5nZXQoZm9ybSk7XG4gICAgICAgICAgICAgICAgaWYgKGZvcm0ubm9WYWxpZGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50cy5zaXplKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVzID0gQXJyYXkuZnJvbShlbGVtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkaXR5TGlzdCA9IG5vZGVzXG4gICAgICAgICAgICAgICAgICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAubWFwKG5vZGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50ZXJuYWxzID0gaW50ZXJuYWxzTWFwLmdldChub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbHMucmVwb3J0VmFsaWRpdHkoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWxpZGl0eUxpc3QuaW5jbHVkZXMoZmFsc2UpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGZvcm1SZXNldENhbGxiYWNrID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRzID0gZm9ybUVsZW1lbnRzTWFwLmdldChldmVudC50YXJnZXQpO1xuICAgICAgICBpZiAoZWxlbWVudHMgJiYgZWxlbWVudHMuc2l6ZSkge1xuICAgICAgICAgICAgZWxlbWVudHMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5jb25zdHJ1Y3Rvci5mb3JtQXNzb2NpYXRlZCAmJiBlbGVtZW50LmZvcm1SZXNldENhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZm9ybVJlc2V0Q2FsbGJhY2suYXBwbHkoZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGluaXRGb3JtID0gKHJlZiwgZm9ybSwgaW50ZXJuYWxzKSA9PiB7XG4gICAgICAgIGlmIChmb3JtKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtRWxlbWVudHMgPSBmb3JtRWxlbWVudHNNYXAuZ2V0KGZvcm0pO1xuICAgICAgICAgICAgaWYgKGZvcm1FbGVtZW50cykge1xuICAgICAgICAgICAgICAgIGZvcm1FbGVtZW50cy5hZGQocmVmKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluaXRTZXQgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICAgICAgaW5pdFNldC5hZGQocmVmKTtcbiAgICAgICAgICAgICAgICBmb3JtRWxlbWVudHNNYXAuc2V0KGZvcm0sIGluaXRTZXQpO1xuICAgICAgICAgICAgICAgIHdpcmVTdWJtaXRMb2dpYyhmb3JtKTtcbiAgICAgICAgICAgICAgICBmb3JtLmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2V0JywgZm9ybVJlc2V0Q2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIGZvcm0uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBmb3JtSW5wdXRDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgZm9ybS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmb3JtQ2hhbmdlQ2FsbGJhY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9ybXNNYXAuc2V0KGZvcm0sIHsgcmVmLCBpbnRlcm5hbHMgfSk7XG4gICAgICAgICAgICBpZiAocmVmLmNvbnN0cnVjdG9yWydmb3JtQXNzb2NpYXRlZCddICYmIHJlZi5mb3JtQXNzb2NpYXRlZENhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlZi5mb3JtQXNzb2NpYXRlZENhbGxiYWNrLmFwcGx5KHJlZiwgW2Zvcm1dKTtcbiAgICAgICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldEZvcm1WYWxpZGl0eShmb3JtKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZmluZFBhcmVudEZvcm0gPSAoZWxlbSkgPT4ge1xuICAgICAgICBsZXQgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlO1xuICAgICAgICBpZiAocGFyZW50ICYmIHBhcmVudC50YWdOYW1lICE9PSAnRk9STScpIHtcbiAgICAgICAgICAgIHBhcmVudCA9IGZpbmRQYXJlbnRGb3JtKHBhcmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICB9O1xuICAgIGNvbnN0IHRocm93SWZOb3RGb3JtQXNzb2NpYXRlZCA9IChyZWYsIG1lc3NhZ2UsIEVycm9yVHlwZSA9IERPTUV4Y2VwdGlvbikgPT4ge1xuICAgICAgICBpZiAoIXJlZi5jb25zdHJ1Y3RvclsnZm9ybUFzc29jaWF0ZWQnXSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yVHlwZShtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgb3ZlcnJpZGVGb3JtTWV0aG9kID0gKGZvcm0sIHJldHVyblZhbHVlLCBtZXRob2QpID0+IHtcbiAgICAgICAgY29uc3QgZWxlbWVudHMgPSBmb3JtRWxlbWVudHNNYXAuZ2V0KGZvcm0pO1xuICAgICAgICBpZiAoZWxlbWVudHMgJiYgZWxlbWVudHMuc2l6ZSkge1xuICAgICAgICAgICAgZWxlbWVudHMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnRlcm5hbHMgPSBpbnRlcm5hbHNNYXAuZ2V0KGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkID0gaW50ZXJuYWxzW21ldGhvZF0oKTtcbiAgICAgICAgICAgICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICAgIH07XG4gICAgY29uc3QgdXBncmFkZUludGVybmFscyA9IChyZWYpID0+IHtcbiAgICAgICAgaWYgKHJlZi5jb25zdHJ1Y3RvclsnZm9ybUFzc29jaWF0ZWQnXSkge1xuICAgICAgICAgICAgY29uc3QgaW50ZXJuYWxzID0gaW50ZXJuYWxzTWFwLmdldChyZWYpO1xuICAgICAgICAgICAgY29uc3QgeyBsYWJlbHMsIGZvcm0gfSA9IGludGVybmFscztcbiAgICAgICAgICAgIGluaXRMYWJlbHMocmVmLCBsYWJlbHMpO1xuICAgICAgICAgICAgaW5pdEZvcm0ocmVmLCBmb3JtLCBpbnRlcm5hbHMpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBmdW5jdGlvbiBtdXRhdGlvbk9ic2VydmVyRXhpc3RzKCkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXIgIT09ICd1bmRlZmluZWQnO1xuICAgIH1cblxuICAgIGNsYXNzIFZhbGlkaXR5U3RhdGUge1xuICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICAgIHRoaXMuYmFkSW5wdXQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMucGF0dGVybk1pc21hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnJhbmdlT3ZlcmZsb3cgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMucmFuZ2VVbmRlcmZsb3cgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc3RlcE1pc21hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnRvb0xvbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMudG9vU2hvcnQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMudHlwZU1pc21hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMudmFsdWVNaXNzaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBPYmplY3Quc2VhbCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBzZXRWYWxpZCA9ICh2YWxpZGl0eU9iamVjdCkgPT4ge1xuICAgICAgICB2YWxpZGl0eU9iamVjdC5iYWRJbnB1dCA9IGZhbHNlO1xuICAgICAgICB2YWxpZGl0eU9iamVjdC5jdXN0b21FcnJvciA9IGZhbHNlO1xuICAgICAgICB2YWxpZGl0eU9iamVjdC5wYXR0ZXJuTWlzbWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgdmFsaWRpdHlPYmplY3QucmFuZ2VPdmVyZmxvdyA9IGZhbHNlO1xuICAgICAgICB2YWxpZGl0eU9iamVjdC5yYW5nZVVuZGVyZmxvdyA9IGZhbHNlO1xuICAgICAgICB2YWxpZGl0eU9iamVjdC5zdGVwTWlzbWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgdmFsaWRpdHlPYmplY3QudG9vTG9uZyA9IGZhbHNlO1xuICAgICAgICB2YWxpZGl0eU9iamVjdC50b29TaG9ydCA9IGZhbHNlO1xuICAgICAgICB2YWxpZGl0eU9iamVjdC50eXBlTWlzbWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgdmFsaWRpdHlPYmplY3QudmFsaWQgPSB0cnVlO1xuICAgICAgICB2YWxpZGl0eU9iamVjdC52YWx1ZU1pc3NpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHZhbGlkaXR5T2JqZWN0O1xuICAgIH07XG4gICAgY29uc3QgcmVjb25jaWxlVmFsaWRpdHkgPSAodmFsaWRpdHlPYmplY3QsIG5ld1N0YXRlLCBmb3JtKSA9PiB7XG4gICAgICAgIHZhbGlkaXR5T2JqZWN0LnZhbGlkID0gaXNWYWxpZChuZXdTdGF0ZSk7XG4gICAgICAgIE9iamVjdC5rZXlzKG5ld1N0YXRlKS5mb3JFYWNoKGtleSA9PiB2YWxpZGl0eU9iamVjdFtrZXldID0gbmV3U3RhdGVba2V5XSk7XG4gICAgICAgIGlmIChmb3JtKSB7XG4gICAgICAgICAgICBzZXRGb3JtVmFsaWRpdHkoZm9ybSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbGlkaXR5T2JqZWN0O1xuICAgIH07XG4gICAgY29uc3QgaXNWYWxpZCA9ICh2YWxpZGl0eVN0YXRlKSA9PiB7XG4gICAgICAgIGxldCB2YWxpZCA9IHRydWU7XG4gICAgICAgIGZvciAobGV0IGtleSBpbiB2YWxpZGl0eVN0YXRlKSB7XG4gICAgICAgICAgICBpZiAoa2V5ICE9PSAndmFsaWQnICYmIHZhbGlkaXR5U3RhdGVba2V5XSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWxpZDtcbiAgICB9O1xuXG4gICAgY29uc3QgY3VzdG9tU3RhdGVNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgIGZ1bmN0aW9uIGFkZFN0YXRlKHJlZiwgc3RhdGVOYW1lKSB7XG4gICAgICAgIHJlZi50b2dnbGVBdHRyaWJ1dGUoc3RhdGVOYW1lLCB0cnVlKTtcbiAgICAgICAgaWYgKHJlZi5wYXJ0KSB7XG4gICAgICAgICAgICByZWYucGFydC5hZGQoc3RhdGVOYW1lKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjbGFzcyBDdXN0b21TdGF0ZVNldCBleHRlbmRzIFNldCB7XG4gICAgICAgIHN0YXRpYyBnZXQgaXNQb2x5ZmlsbGVkKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3RydWN0b3IocmVmKSB7XG4gICAgICAgICAgICBzdXBlcigpO1xuICAgICAgICAgICAgaWYgKCFyZWYgfHwgIXJlZi50YWdOYW1lIHx8IHJlZi50YWdOYW1lLmluZGV4T2YoJy0nKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbGxlZ2FsIGNvbnN0cnVjdG9yJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjdXN0b21TdGF0ZU1hcC5zZXQodGhpcywgcmVmKTtcbiAgICAgICAgfVxuICAgICAgICBhZGQoc3RhdGUpIHtcbiAgICAgICAgICAgIGlmICghL14tLS8udGVzdChzdGF0ZSkgfHwgdHlwZW9mIHN0YXRlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oYEZhaWxlZCB0byBleGVjdXRlICdhZGQnIG9uICdDdXN0b21TdGF0ZVNldCc6IFRoZSBzcGVjaWZpZWQgdmFsdWUgJHtzdGF0ZX0gbXVzdCBzdGFydCB3aXRoICctLScuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBzdXBlci5hZGQoc3RhdGUpO1xuICAgICAgICAgICAgY29uc3QgcmVmID0gY3VzdG9tU3RhdGVNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgY29uc3Qgc3RhdGVOYW1lID0gYHN0YXRlJHtzdGF0ZX1gO1xuICAgICAgICAgICAgaWYgKHJlZi5pc0Nvbm5lY3RlZCkge1xuICAgICAgICAgICAgICAgIGFkZFN0YXRlKHJlZiwgc3RhdGVOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBhZGRTdGF0ZShyZWYsIHN0YXRlTmFtZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGNsZWFyKCkge1xuICAgICAgICAgICAgZm9yIChsZXQgW2VudHJ5XSBvZiB0aGlzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlKGVudHJ5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN1cGVyLmNsZWFyKCk7XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlKHN0YXRlKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBzdXBlci5kZWxldGUoc3RhdGUpO1xuICAgICAgICAgICAgY29uc3QgcmVmID0gY3VzdG9tU3RhdGVNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgaWYgKHJlZi5pc0Nvbm5lY3RlZCkge1xuICAgICAgICAgICAgICAgIHJlZi50b2dnbGVBdHRyaWJ1dGUoYHN0YXRlJHtzdGF0ZX1gLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlZi5wYXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZi5wYXJ0LnJlbW92ZShgc3RhdGUke3N0YXRlfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZWYudG9nZ2xlQXR0cmlidXRlKGBzdGF0ZSR7c3RhdGV9YCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVmLnBhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZi5wYXJ0LnJlbW92ZShgc3RhdGUke3N0YXRlfWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcbiAgICAgICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xuICAgICAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgICAgICAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZFNldChyZWNlaXZlciwgc3RhdGUsIHZhbHVlLCBraW5kLCBmKSB7XG4gICAgICAgIGlmIChraW5kID09PSBcIm1cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtcbiAgICAgICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xuICAgICAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xuICAgICAgICByZXR1cm4gKGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyLCB2YWx1ZSkgOiBmID8gZi52YWx1ZSA9IHZhbHVlIDogc3RhdGUuc2V0KHJlY2VpdmVyLCB2YWx1ZSkpLCB2YWx1ZTtcbiAgICB9XG5cbiAgICB2YXIgX0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uX2VsZW1lbnRzO1xuICAgIGNsYXNzIEhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uIHtcbiAgICAgICAgY29uc3RydWN0b3IoZWxlbWVudHMpIHtcbiAgICAgICAgICAgIF9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbl9lbGVtZW50cy5zZXQodGhpcywgdm9pZCAwKTtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uX2VsZW1lbnRzLCBlbGVtZW50cywgXCJmXCIpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZWxlbWVudHNbaV07XG4gICAgICAgICAgICAgICAgdGhpc1tpXSA9IGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuaGFzQXR0cmlidXRlKCduYW1lJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc1tlbGVtZW50LmdldEF0dHJpYnV0ZSgnbmFtZScpXSA9IGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgT2JqZWN0LmZyZWV6ZSh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgbGVuZ3RoKCkge1xuICAgICAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uX2VsZW1lbnRzLCBcImZcIikubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIFsoX0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uX2VsZW1lbnRzID0gbmV3IFdlYWtNYXAoKSwgU3ltYm9sLml0ZXJhdG9yKV0oKSB7XG4gICAgICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb25fZWxlbWVudHMsIFwiZlwiKVtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgICAgIH1cbiAgICAgICAgaXRlbShpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpc1tpXSA9PSBudWxsID8gbnVsbCA6IHRoaXNbaV07XG4gICAgICAgIH1cbiAgICAgICAgbmFtZWRJdGVtKG5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzW25hbWVdID09IG51bGwgPyBudWxsIDogdGhpc1tuYW1lXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhdGNoRm9ybVByb3RvdHlwZSgpIHtcbiAgICAgICAgY29uc3QgY2hlY2tWYWxpZGl0eSA9IEhUTUxGb3JtRWxlbWVudC5wcm90b3R5cGUuY2hlY2tWYWxpZGl0eTtcbiAgICAgICAgSFRNTEZvcm1FbGVtZW50LnByb3RvdHlwZS5jaGVja1ZhbGlkaXR5ID0gY2hlY2tWYWxpZGl0eU92ZXJyaWRlO1xuICAgICAgICBjb25zdCByZXBvcnRWYWxpZGl0eSA9IEhUTUxGb3JtRWxlbWVudC5wcm90b3R5cGUucmVwb3J0VmFsaWRpdHk7XG4gICAgICAgIEhUTUxGb3JtRWxlbWVudC5wcm90b3R5cGUucmVwb3J0VmFsaWRpdHkgPSByZXBvcnRWYWxpZGl0eU92ZXJyaWRlO1xuICAgICAgICBmdW5jdGlvbiBjaGVja1ZhbGlkaXR5T3ZlcnJpZGUoLi4uYXJncykge1xuICAgICAgICAgICAgbGV0IHJldHVyblZhbHVlID0gY2hlY2tWYWxpZGl0eS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIHJldHVybiBvdmVycmlkZUZvcm1NZXRob2QodGhpcywgcmV0dXJuVmFsdWUsICdjaGVja1ZhbGlkaXR5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gcmVwb3J0VmFsaWRpdHlPdmVycmlkZSguLi5hcmdzKSB7XG4gICAgICAgICAgICBsZXQgcmV0dXJuVmFsdWUgPSByZXBvcnRWYWxpZGl0eS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIHJldHVybiBvdmVycmlkZUZvcm1NZXRob2QodGhpcywgcmV0dXJuVmFsdWUsICdyZXBvcnRWYWxpZGl0eScpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgZ2V0IH0gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEhUTUxGb3JtRWxlbWVudC5wcm90b3R5cGUsICdlbGVtZW50cycpO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEZvcm1FbGVtZW50LnByb3RvdHlwZSwgJ2VsZW1lbnRzJywge1xuICAgICAgICAgICAgZ2V0KC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50cyA9IGdldC5jYWxsKHRoaXMsIC4uLmFyZ3MpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvbHlmaWxsZWRFbGVtZW50cyA9IEFycmF5LmZyb20oZm9ybUVsZW1lbnRzTWFwLmdldCh0aGlzKSB8fCBbXSk7XG4gICAgICAgICAgICAgICAgaWYgKHBvbHlmaWxsZWRFbGVtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBvcmRlcmVkRWxlbWVudHMgPSBBcnJheS5mcm9tKGVsZW1lbnRzKS5jb25jYXQocG9seWZpbGxlZEVsZW1lbnRzKS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKSAmIDIgPyAxIDogLTE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbihvcmRlcmVkRWxlbWVudHMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2xhc3MgRWxlbWVudEludGVybmFscyB7XG4gICAgICAgIHN0YXRpYyBnZXQgaXNQb2x5ZmlsbGVkKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3RydWN0b3IocmVmKSB7XG4gICAgICAgICAgICBpZiAoIXJlZiB8fCAhcmVmLnRhZ05hbWUgfHwgcmVmLnRhZ05hbWUuaW5kZXhPZignLScpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0lsbGVnYWwgY29uc3RydWN0b3InKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJvb3ROb2RlID0gcmVmLmdldFJvb3ROb2RlKCk7XG4gICAgICAgICAgICBjb25zdCB2YWxpZGl0eSA9IG5ldyBWYWxpZGl0eVN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlcyA9IG5ldyBDdXN0b21TdGF0ZVNldChyZWYpO1xuICAgICAgICAgICAgcmVmTWFwLnNldCh0aGlzLCByZWYpO1xuICAgICAgICAgICAgdmFsaWRpdHlNYXAuc2V0KHRoaXMsIHZhbGlkaXR5KTtcbiAgICAgICAgICAgIGludGVybmFsc01hcC5zZXQocmVmLCB0aGlzKTtcbiAgICAgICAgICAgIGluaXRBb20ocmVmLCB0aGlzKTtcbiAgICAgICAgICAgIGluaXRSZWYocmVmLCB0aGlzKTtcbiAgICAgICAgICAgIE9iamVjdC5zZWFsKHRoaXMpO1xuICAgICAgICAgICAgaWYgKHJvb3ROb2RlIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudCkge1xuICAgICAgICAgICAgICAgIGRlZmVyVXBncmFkZShyb290Tm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2hlY2tWYWxpZGl0eSgpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IHJlZk1hcC5nZXQodGhpcyk7XG4gICAgICAgICAgICB0aHJvd0lmTm90Rm9ybUFzc29jaWF0ZWQocmVmLCBgRmFpbGVkIHRvIGV4ZWN1dGUgJ2NoZWNrVmFsaWRpdHknIG9uICdFbGVtZW50SW50ZXJuYWxzJzogVGhlIHRhcmdldCBlbGVtZW50IGlzIG5vdCBhIGZvcm0tYXNzb2NpYXRlZCBjdXN0b20gZWxlbWVudC5gKTtcbiAgICAgICAgICAgIGlmICghdGhpcy53aWxsVmFsaWRhdGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHZhbGlkaXR5ID0gdmFsaWRpdHlNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgaWYgKCF2YWxpZGl0eS52YWxpZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkaXR5RXZlbnQgPSBuZXcgRXZlbnQoJ2ludmFsaWQnLCB7XG4gICAgICAgICAgICAgICAgICAgIGJ1YmJsZXM6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBjYW5jZWxhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBjb21wb3NlZDogZmFsc2VcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZWYuZGlzcGF0Y2hFdmVudCh2YWxpZGl0eUV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWxpZGl0eS52YWxpZDtcbiAgICAgICAgfVxuICAgICAgICBnZXQgZm9ybSgpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IHJlZk1hcC5nZXQodGhpcyk7XG4gICAgICAgICAgICB0aHJvd0lmTm90Rm9ybUFzc29jaWF0ZWQocmVmLCBgRmFpbGVkIHRvIHJlYWQgdGhlICdmb3JtJyBwcm9wZXJ0eSBmcm9tICdFbGVtZW50SW50ZXJuYWxzJzogVGhlIHRhcmdldCBlbGVtZW50IGlzIG5vdCBhIGZvcm0tYXNzb2NpYXRlZCBjdXN0b20gZWxlbWVudC5gKTtcbiAgICAgICAgICAgIGxldCBmb3JtO1xuICAgICAgICAgICAgaWYgKHJlZi5jb25zdHJ1Y3RvclsnZm9ybUFzc29jaWF0ZWQnXSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIGZvcm0gPSBmaW5kUGFyZW50Rm9ybShyZWYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZvcm07XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGxhYmVscygpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IHJlZk1hcC5nZXQodGhpcyk7XG4gICAgICAgICAgICB0aHJvd0lmTm90Rm9ybUFzc29jaWF0ZWQocmVmLCBgRmFpbGVkIHRvIHJlYWQgdGhlICdsYWJlbHMnIHByb3BlcnR5IGZyb20gJ0VsZW1lbnRJbnRlcm5hbHMnOiBUaGUgdGFyZ2V0IGVsZW1lbnQgaXMgbm90IGEgZm9ybS1hc3NvY2lhdGVkIGN1c3RvbSBlbGVtZW50LmApO1xuICAgICAgICAgICAgY29uc3QgaWQgPSByZWYuZ2V0QXR0cmlidXRlKCdpZCcpO1xuICAgICAgICAgICAgY29uc3QgaG9zdFJvb3QgPSByZWYuZ2V0Um9vdE5vZGUoKTtcbiAgICAgICAgICAgIGlmIChob3N0Um9vdCAmJiBpZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3N0Um9vdC5xdWVyeVNlbGVjdG9yQWxsKGBbZm9yPVwiJHtpZH1cIl1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICByZXBvcnRWYWxpZGl0eSgpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IHJlZk1hcC5nZXQodGhpcyk7XG4gICAgICAgICAgICB0aHJvd0lmTm90Rm9ybUFzc29jaWF0ZWQocmVmLCBgRmFpbGVkIHRvIGV4ZWN1dGUgJ3JlcG9ydFZhbGlkaXR5JyBvbiAnRWxlbWVudEludGVybmFscyc6IFRoZSB0YXJnZXQgZWxlbWVudCBpcyBub3QgYSBmb3JtLWFzc29jaWF0ZWQgY3VzdG9tIGVsZW1lbnQuYCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMud2lsbFZhbGlkYXRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB2YWxpZCA9IHRoaXMuY2hlY2tWYWxpZGl0eSgpO1xuICAgICAgICAgICAgY29uc3QgYW5jaG9yID0gdmFsaWRhdGlvbkFuY2hvck1hcC5nZXQodGhpcyk7XG4gICAgICAgICAgICBpZiAoYW5jaG9yICYmICFyZWYuY29uc3RydWN0b3JbJ2Zvcm1Bc3NvY2lhdGVkJ10pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKGBGYWlsZWQgdG8gZXhlY3V0ZSAncmVwb3J0VmFsaWRpdHknIG9uICdFbGVtZW50SW50ZXJuYWxzJzogVGhlIHRhcmdldCBlbGVtZW50IGlzIG5vdCBhIGZvcm0tYXNzb2NpYXRlZCBjdXN0b20gZWxlbWVudC5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdmFsaWQgJiYgYW5jaG9yKSB7XG4gICAgICAgICAgICAgICAgcmVmLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgYW5jaG9yLmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmFsaWQ7XG4gICAgICAgIH1cbiAgICAgICAgc2V0Rm9ybVZhbHVlKHZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCByZWYgPSByZWZNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgdGhyb3dJZk5vdEZvcm1Bc3NvY2lhdGVkKHJlZiwgYEZhaWxlZCB0byBleGVjdXRlICdzZXRGb3JtVmFsdWUnIG9uICdFbGVtZW50SW50ZXJuYWxzJzogVGhlIHRhcmdldCBlbGVtZW50IGlzIG5vdCBhIGZvcm0tYXNzb2NpYXRlZCBjdXN0b20gZWxlbWVudC5gKTtcbiAgICAgICAgICAgIHJlbW92ZUhpZGRlbklucHV0cyh0aGlzKTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmICEodmFsdWUgaW5zdGFuY2VvZiBGb3JtRGF0YSkpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVmLmdldEF0dHJpYnV0ZSgnbmFtZScpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhpZGRlbklucHV0ID0gY3JlYXRlSGlkZGVuSW5wdXQocmVmLCB0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgaGlkZGVuSW5wdXQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlIGluc3RhbmNlb2YgRm9ybURhdGEpIHtcbiAgICAgICAgICAgICAgICBBcnJheS5mcm9tKHZhbHVlKS5yZXZlcnNlKCkuZm9yRWFjaCgoW2Zvcm1EYXRhS2V5LCBmb3JtRGF0YVZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZvcm1EYXRhVmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoaWRkZW5JbnB1dCA9IGNyZWF0ZUhpZGRlbklucHV0KHJlZiwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBoaWRkZW5JbnB1dC5uYW1lID0gZm9ybURhdGFLZXk7XG4gICAgICAgICAgICAgICAgICAgICAgICBoaWRkZW5JbnB1dC52YWx1ZSA9IGZvcm1EYXRhVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlZlZhbHVlTWFwLnNldChyZWYsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBzZXRWYWxpZGl0eSh2YWxpZGl0eUNoYW5nZXMsIHZhbGlkYXRpb25NZXNzYWdlLCBhbmNob3IpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IHJlZk1hcC5nZXQodGhpcyk7XG4gICAgICAgICAgICB0aHJvd0lmTm90Rm9ybUFzc29jaWF0ZWQocmVmLCBgRmFpbGVkIHRvIGV4ZWN1dGUgJ3NldFZhbGlkaXR5JyBvbiAnRWxlbWVudEludGVybmFscyc6IFRoZSB0YXJnZXQgZWxlbWVudCBpcyBub3QgYSBmb3JtLWFzc29jaWF0ZWQgY3VzdG9tIGVsZW1lbnQuYCk7XG4gICAgICAgICAgICBpZiAoIXZhbGlkaXR5Q2hhbmdlcykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ZhaWxlZCB0byBleGVjdXRlIFxcJ3NldFZhbGlkaXR5XFwnIG9uIFxcJ0VsZW1lbnRJbnRlcm5hbHNcXCc6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IDAgcHJlc2VudC4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhbGlkYXRpb25BbmNob3JNYXAuc2V0KHRoaXMsIGFuY2hvcik7XG4gICAgICAgICAgICBjb25zdCB2YWxpZGl0eSA9IHZhbGlkaXR5TWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkaXR5Q2hhbmdlc09iaiA9IHt9O1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdmFsaWRpdHlDaGFuZ2VzKSB7XG4gICAgICAgICAgICAgICAgdmFsaWRpdHlDaGFuZ2VzT2JqW2tleV0gPSB2YWxpZGl0eUNoYW5nZXNba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyh2YWxpZGl0eUNoYW5nZXNPYmopLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHNldFZhbGlkKHZhbGlkaXR5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNoZWNrID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB2YWxpZGl0eSksIHZhbGlkaXR5Q2hhbmdlc09iaik7XG4gICAgICAgICAgICBkZWxldGUgY2hlY2sudmFsaWQ7XG4gICAgICAgICAgICBjb25zdCB7IHZhbGlkIH0gPSByZWNvbmNpbGVWYWxpZGl0eSh2YWxpZGl0eSwgY2hlY2ssIHRoaXMuZm9ybSk7XG4gICAgICAgICAgICBpZiAoIXZhbGlkICYmICF2YWxpZGF0aW9uTWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oYEZhaWxlZCB0byBleGVjdXRlICdzZXRWYWxpZGl0eScgb24gJ0VsZW1lbnRJbnRlcm5hbHMnOiBUaGUgc2Vjb25kIGFyZ3VtZW50IHNob3VsZCBub3QgYmUgZW1wdHkgaWYgb25lIG9yIG1vcmUgZmxhZ3MgaW4gdGhlIGZpcnN0IGFyZ3VtZW50IGFyZSB0cnVlLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFsaWRhdGlvbk1lc3NhZ2VNYXAuc2V0KHRoaXMsIHZhbGlkID8gJycgOiB2YWxpZGF0aW9uTWVzc2FnZSk7XG4gICAgICAgICAgICBpZiAocmVmLmlzQ29ubmVjdGVkKSB7XG4gICAgICAgICAgICAgICAgcmVmLnRvZ2dsZUF0dHJpYnV0ZSgnaW50ZXJuYWxzLWludmFsaWQnLCAhdmFsaWQpO1xuICAgICAgICAgICAgICAgIHJlZi50b2dnbGVBdHRyaWJ1dGUoJ2ludGVybmFscy12YWxpZCcsIHZhbGlkKTtcbiAgICAgICAgICAgICAgICByZWYuc2V0QXR0cmlidXRlKCdhcmlhLWludmFsaWQnLCBgJHshdmFsaWR9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YWxpZGl0eVVwZ3JhZGVNYXAuc2V0KHJlZiwgdGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHNoYWRvd1Jvb3QoKSB7XG4gICAgICAgICAgICBjb25zdCByZWYgPSByZWZNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgY29uc3Qgc2hhZG93Um9vdCA9IHNoYWRvd1Jvb3RNYXAuZ2V0KHJlZik7XG4gICAgICAgICAgICBpZiAoc2hhZG93Um9vdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzaGFkb3dSb290O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHZhbGlkYXRpb25NZXNzYWdlKCkge1xuICAgICAgICAgICAgY29uc3QgcmVmID0gcmVmTWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIHRocm93SWZOb3RGb3JtQXNzb2NpYXRlZChyZWYsIGBGYWlsZWQgdG8gcmVhZCB0aGUgJ3ZhbGlkYXRpb25NZXNzYWdlJyBwcm9wZXJ0eSBmcm9tICdFbGVtZW50SW50ZXJuYWxzJzogVGhlIHRhcmdldCBlbGVtZW50IGlzIG5vdCBhIGZvcm0tYXNzb2NpYXRlZCBjdXN0b20gZWxlbWVudC5gKTtcbiAgICAgICAgICAgIHJldHVybiB2YWxpZGF0aW9uTWVzc2FnZU1hcC5nZXQodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHZhbGlkaXR5KCkge1xuICAgICAgICAgICAgY29uc3QgcmVmID0gcmVmTWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIHRocm93SWZOb3RGb3JtQXNzb2NpYXRlZChyZWYsIGBGYWlsZWQgdG8gcmVhZCB0aGUgJ3ZhbGlkaXR5JyBwcm9wZXJ0eSBmcm9tICdFbGVtZW50SW50ZXJuYWxzJzogVGhlIHRhcmdldCBlbGVtZW50IGlzIG5vdCBhIGZvcm0tYXNzb2NpYXRlZCBjdXN0b20gZWxlbWVudC5gKTtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkaXR5ID0gdmFsaWRpdHlNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgcmV0dXJuIHZhbGlkaXR5O1xuICAgICAgICB9XG4gICAgICAgIGdldCB3aWxsVmFsaWRhdGUoKSB7XG4gICAgICAgICAgICBjb25zdCByZWYgPSByZWZNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgdGhyb3dJZk5vdEZvcm1Bc3NvY2lhdGVkKHJlZiwgYEZhaWxlZCB0byByZWFkIHRoZSAnd2lsbFZhbGlkYXRlJyBwcm9wZXJ0eSBmcm9tICdFbGVtZW50SW50ZXJuYWxzJzogVGhlIHRhcmdldCBlbGVtZW50IGlzIG5vdCBhIGZvcm0tYXNzb2NpYXRlZCBjdXN0b20gZWxlbWVudC5gKTtcbiAgICAgICAgICAgIGlmICgocmVmLmRpc2FibGVkIHx8IHJlZi5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykpIHx8XG4gICAgICAgICAgICAgICAgcmVmLmhhc0F0dHJpYnV0ZSgncmVhZG9ubHknKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzRWxlbWVudEludGVybmFsc1N1cHBvcnRlZCgpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8ICF3aW5kb3cuRWxlbWVudEludGVybmFscyB8fCAhSFRNTEVsZW1lbnQucHJvdG90eXBlLmF0dGFjaEludGVybmFscykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNsYXNzIEVsZW1lbnRJbnRlcm5hbHNGZWF0dXJlRGV0ZWN0aW9uIGV4dGVuZHMgSFRNTEVsZW1lbnQge1xuICAgICAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmludGVybmFscyA9IHRoaXMuYXR0YWNoSW50ZXJuYWxzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmFuZG9tTmFtZSA9IGBlbGVtZW50LWludGVybmFscy1mZWF0dXJlLWRldGVjdGlvbi0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnJlcGxhY2UoL1teYS16XSsvZywgJycpfWA7XG4gICAgICAgIGN1c3RvbUVsZW1lbnRzLmRlZmluZShyYW5kb21OYW1lLCBFbGVtZW50SW50ZXJuYWxzRmVhdHVyZURldGVjdGlvbik7XG4gICAgICAgIGNvbnN0IGZlYXR1cmVEZXRlY3Rpb25FbGVtZW50ID0gbmV3IEVsZW1lbnRJbnRlcm5hbHNGZWF0dXJlRGV0ZWN0aW9uKCk7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAnc2hhZG93Um9vdCcsXG4gICAgICAgICAgICAnZm9ybScsXG4gICAgICAgICAgICAnd2lsbFZhbGlkYXRlJyxcbiAgICAgICAgICAgICd2YWxpZGl0eScsXG4gICAgICAgICAgICAndmFsaWRhdGlvbk1lc3NhZ2UnLFxuICAgICAgICAgICAgJ2xhYmVscycsXG4gICAgICAgICAgICAnc2V0Rm9ybVZhbHVlJyxcbiAgICAgICAgICAgICdzZXRWYWxpZGl0eScsXG4gICAgICAgICAgICAnY2hlY2tWYWxpZGl0eScsXG4gICAgICAgICAgICAncmVwb3J0VmFsaWRpdHknXG4gICAgICAgIF0uZXZlcnkocHJvcCA9PiBwcm9wIGluIGZlYXR1cmVEZXRlY3Rpb25FbGVtZW50LmludGVybmFscyk7XG4gICAgfVxuICAgIGxldCBoYXNFbGVtZW50SW50ZXJuYWxzUG9seWZpbGxCZWVuQXBwbGllZCA9IGZhbHNlO1xuICAgIGxldCBoYXNDdXN0b21TdGF0ZVNldFBvbHlmaWxsQmVlbkFwcGxpZWQgPSBmYWxzZTtcbiAgICBmdW5jdGlvbiBmb3JjZUN1c3RvbVN0YXRlU2V0UG9seWZpbGwoYXR0YWNoSW50ZXJuYWxzKSB7XG4gICAgICAgIGlmIChoYXNDdXN0b21TdGF0ZVNldFBvbHlmaWxsQmVlbkFwcGxpZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBoYXNDdXN0b21TdGF0ZVNldFBvbHlmaWxsQmVlbkFwcGxpZWQgPSB0cnVlO1xuICAgICAgICB3aW5kb3cuQ3VzdG9tU3RhdGVTZXQgPSBDdXN0b21TdGF0ZVNldDtcbiAgICAgICAgaWYgKGF0dGFjaEludGVybmFscykge1xuICAgICAgICAgICAgSFRNTEVsZW1lbnQucHJvdG90eXBlLmF0dGFjaEludGVybmFscyA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW50ZXJuYWxzID0gYXR0YWNoSW50ZXJuYWxzLmNhbGwodGhpcywgYXJncyk7XG4gICAgICAgICAgICAgICAgaW50ZXJuYWxzLnN0YXRlcyA9IG5ldyBDdXN0b21TdGF0ZVNldCh0aGlzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxzO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBmb3JjZUVsZW1lbnRJbnRlcm5hbHNQb2x5ZmlsbChmb3JjZUN1c3RvbVN0YXRlU2V0ID0gdHJ1ZSkge1xuICAgICAgICBpZiAoaGFzRWxlbWVudEludGVybmFsc1BvbHlmaWxsQmVlbkFwcGxpZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBoYXNFbGVtZW50SW50ZXJuYWxzUG9seWZpbGxCZWVuQXBwbGllZCA9IHRydWU7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgd2luZG93LkVsZW1lbnRJbnRlcm5hbHMgPSBFbGVtZW50SW50ZXJuYWxzO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc3QgZGVmaW5lID0gQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LnByb3RvdHlwZS5kZWZpbmU7XG4gICAgICAgICAgICBDdXN0b21FbGVtZW50UmVnaXN0cnkucHJvdG90eXBlLmRlZmluZSA9IGZ1bmN0aW9uIChuYW1lLCBjb25zdHJ1Y3Rvciwgb3B0aW9ucykge1xuICAgICAgICAgICAgICAgIGlmIChjb25zdHJ1Y3Rvci5mb3JtQXNzb2NpYXRlZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb25uZWN0ZWRDYWxsYmFjayA9IGNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25uZWN0ZWRDYWxsYmFjaztcbiAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3IucHJvdG90eXBlLmNvbm5lY3RlZENhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25uZWN0ZWRDYWxsYmFja01hcC5oYXModGhpcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0ZWRDYWxsYmFja01hcC5zZXQodGhpcywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldERpc2FibGVkKHRoaXMsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25uZWN0ZWRDYWxsYmFjayAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGVkQ2FsbGJhY2suYXBwbHkodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGdyYWRlSW50ZXJuYWxzKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWZpbmUuY2FsbCh0aGlzLCBuYW1lLCBjb25zdHJ1Y3Rvciwgb3B0aW9ucyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgSFRNTEVsZW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBIVE1MRWxlbWVudC5wcm90b3R5cGUuYXR0YWNoSW50ZXJuYWxzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy50YWdOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy50YWdOYW1lLmluZGV4T2YoJy0nKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZXhlY3V0ZSAnYXR0YWNoSW50ZXJuYWxzJyBvbiAnSFRNTEVsZW1lbnQnOiBVbmFibGUgdG8gYXR0YWNoIEVsZW1lbnRJbnRlcm5hbHMgdG8gbm9uLWN1c3RvbSBlbGVtZW50cy5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGludGVybmFsc01hcC5oYXModGhpcykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihgRE9NRXhjZXB0aW9uOiBGYWlsZWQgdG8gZXhlY3V0ZSAnYXR0YWNoSW50ZXJuYWxzJyBvbiAnSFRNTEVsZW1lbnQnOiBFbGVtZW50SW50ZXJuYWxzIGZvciB0aGUgc3BlY2lmaWVkIGVsZW1lbnQgd2FzIGFscmVhZHkgYXR0YWNoZWQuYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRWxlbWVudEludGVybmFscyh0aGlzKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBFbGVtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgZnVuY3Rpb24gYXR0YWNoU2hhZG93T2JzZXJ2ZXIoLi4uYXJncykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNoYWRvd1Jvb3QgPSBhdHRhY2hTaGFkb3cuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICAgICAgc2hhZG93Um9vdE1hcC5zZXQodGhpcywgc2hhZG93Um9vdCk7XG4gICAgICAgICAgICAgICAgaWYgKG11dGF0aW9uT2JzZXJ2ZXJFeGlzdHMoKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKG9ic2VydmVyQ2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICBpZiAod2luZG93LlNoYWR5RE9NKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5vYnNlcnZlKHRoaXMsIG9ic2VydmVyQ29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm9ic2VydmUoc2hhZG93Um9vdCwgb2JzZXJ2ZXJDb25maWcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHNoYWRvd0hvc3RzTWFwLnNldCh0aGlzLCBvYnNlcnZlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBzaGFkb3dSb290O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYXR0YWNoU2hhZG93ID0gRWxlbWVudC5wcm90b3R5cGUuYXR0YWNoU2hhZG93O1xuICAgICAgICAgICAgRWxlbWVudC5wcm90b3R5cGUuYXR0YWNoU2hhZG93ID0gYXR0YWNoU2hhZG93T2JzZXJ2ZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG11dGF0aW9uT2JzZXJ2ZXJFeGlzdHMoKSAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjb25zdCBkb2N1bWVudE9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIob2JzZXJ2ZXJDYWxsYmFjayk7XG4gICAgICAgICAgICBkb2N1bWVudE9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBvYnNlcnZlckNvbmZpZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBIVE1MRm9ybUVsZW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBwYXRjaEZvcm1Qcm90b3R5cGUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9yY2VDdXN0b21TdGF0ZVNldCB8fFxuICAgICAgICAgICAgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgIXdpbmRvdy5DdXN0b21TdGF0ZVNldCkpIHtcbiAgICAgICAgICAgIGZvcmNlQ3VzdG9tU3RhdGVTZXRQb2x5ZmlsbCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaXNDZVBvbHlmaWxsID0gISFjdXN0b21FbGVtZW50cy5wb2x5ZmlsbFdyYXBGbHVzaENhbGxiYWNrO1xuICAgIGlmICghaXNDZVBvbHlmaWxsKSB7XG4gICAgICAgIGlmICghaXNFbGVtZW50SW50ZXJuYWxzU3VwcG9ydGVkKCkpIHtcbiAgICAgICAgICAgIGZvcmNlRWxlbWVudEludGVybmFsc1BvbHlmaWxsKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmICF3aW5kb3cuQ3VzdG9tU3RhdGVTZXQpIHtcbiAgICAgICAgICAgIGZvcmNlQ3VzdG9tU3RhdGVTZXRQb2x5ZmlsbChIVE1MRWxlbWVudC5wcm90b3R5cGUuYXR0YWNoSW50ZXJuYWxzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGV4cG9ydHMuZm9yY2VDdXN0b21TdGF0ZVNldFBvbHlmaWxsID0gZm9yY2VDdXN0b21TdGF0ZVNldFBvbHlmaWxsO1xuICAgIGV4cG9ydHMuZm9yY2VFbGVtZW50SW50ZXJuYWxzUG9seWZpbGwgPSBmb3JjZUVsZW1lbnRJbnRlcm5hbHNQb2x5ZmlsbDtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbiAgICByZXR1cm4gZXhwb3J0cztcblxufSkoe30pO1xuIiwgIi8qIVxuICogTUlUIExpY2Vuc2VcbiAqIFxuICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjQgUGVjdWxpYXIgVmVudHVyZXMsIExMQ1xuICogXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKiBcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqIFxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKiBcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IEFSUkFZX0JVRkZFUl9OQU1FID0gXCJbb2JqZWN0IEFycmF5QnVmZmVyXVwiO1xuY2xhc3MgQnVmZmVyU291cmNlQ29udmVydGVyIHtcbiAgICBzdGF0aWMgaXNBcnJheUJ1ZmZlcihkYXRhKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZGF0YSkgPT09IEFSUkFZX0JVRkZFUl9OQU1FO1xuICAgIH1cbiAgICBzdGF0aWMgdG9BcnJheUJ1ZmZlcihkYXRhKSB7XG4gICAgICAgIGlmICh0aGlzLmlzQXJyYXlCdWZmZXIoZGF0YSkpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhLmJ5dGVMZW5ndGggPT09IGRhdGEuYnVmZmVyLmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhLmJ1ZmZlcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0YS5ieXRlT2Zmc2V0ID09PSAwICYmIGRhdGEuYnl0ZUxlbmd0aCA9PT0gZGF0YS5idWZmZXIuYnl0ZUxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGEuYnVmZmVyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnRvVWludDhBcnJheShkYXRhLmJ1ZmZlcilcbiAgICAgICAgICAgIC5zbGljZShkYXRhLmJ5dGVPZmZzZXQsIGRhdGEuYnl0ZU9mZnNldCArIGRhdGEuYnl0ZUxlbmd0aClcbiAgICAgICAgICAgIC5idWZmZXI7XG4gICAgfVxuICAgIHN0YXRpYyB0b1VpbnQ4QXJyYXkoZGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy50b1ZpZXcoZGF0YSwgVWludDhBcnJheSk7XG4gICAgfVxuICAgIHN0YXRpYyB0b1ZpZXcoZGF0YSwgdHlwZSkge1xuICAgICAgICBpZiAoZGF0YS5jb25zdHJ1Y3RvciA9PT0gdHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNBcnJheUJ1ZmZlcihkYXRhKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyB0eXBlKGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzQXJyYXlCdWZmZXJWaWV3KGRhdGEpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IHR5cGUoZGF0YS5idWZmZXIsIGRhdGEuYnl0ZU9mZnNldCwgZGF0YS5ieXRlTGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVGhlIHByb3ZpZGVkIHZhbHVlIGlzIG5vdCBvZiB0eXBlICcoQXJyYXlCdWZmZXIgb3IgQXJyYXlCdWZmZXJWaWV3KSdcIik7XG4gICAgfVxuICAgIHN0YXRpYyBpc0J1ZmZlclNvdXJjZShkYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzQXJyYXlCdWZmZXJWaWV3KGRhdGEpXG4gICAgICAgICAgICB8fCB0aGlzLmlzQXJyYXlCdWZmZXIoZGF0YSk7XG4gICAgfVxuICAgIHN0YXRpYyBpc0FycmF5QnVmZmVyVmlldyhkYXRhKSB7XG4gICAgICAgIHJldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcoZGF0YSlcbiAgICAgICAgICAgIHx8IChkYXRhICYmIHRoaXMuaXNBcnJheUJ1ZmZlcihkYXRhLmJ1ZmZlcikpO1xuICAgIH1cbiAgICBzdGF0aWMgaXNFcXVhbChhLCBiKSB7XG4gICAgICAgIGNvbnN0IGFWaWV3ID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShhKTtcbiAgICAgICAgY29uc3QgYlZpZXcgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGIpO1xuICAgICAgICBpZiAoYVZpZXcubGVuZ3RoICE9PSBiVmlldy5ieXRlTGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhVmlldy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGFWaWV3W2ldICE9PSBiVmlld1tpXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgc3RhdGljIGNvbmNhdCguLi5hcmdzKSB7XG4gICAgICAgIGxldCBidWZmZXJzO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhcmdzWzBdKSAmJiAhKGFyZ3NbMV0gaW5zdGFuY2VvZiBGdW5jdGlvbikpIHtcbiAgICAgICAgICAgIGJ1ZmZlcnMgPSBhcmdzWzBdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYXJnc1swXSkgJiYgYXJnc1sxXSBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICAgICAgICBidWZmZXJzID0gYXJnc1swXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICAgICAgICAgIGJ1ZmZlcnMgPSBhcmdzLnNsaWNlKDAsIGFyZ3MubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBidWZmZXJzID0gYXJncztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgc2l6ZSA9IDA7XG4gICAgICAgIGZvciAoY29uc3QgYnVmZmVyIG9mIGJ1ZmZlcnMpIHtcbiAgICAgICAgICAgIHNpemUgKz0gYnVmZmVyLmJ5dGVMZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoc2l6ZSk7XG4gICAgICAgIGxldCBvZmZzZXQgPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IGJ1ZmZlciBvZiBidWZmZXJzKSB7XG4gICAgICAgICAgICBjb25zdCB2aWV3ID0gdGhpcy50b1VpbnQ4QXJyYXkoYnVmZmVyKTtcbiAgICAgICAgICAgIHJlcy5zZXQodmlldywgb2Zmc2V0KTtcbiAgICAgICAgICAgIG9mZnNldCArPSB2aWV3Lmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJnc1thcmdzLmxlbmd0aCAtIDFdIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRvVmlldyhyZXMsIGFyZ3NbYXJncy5sZW5ndGggLSAxXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcy5idWZmZXI7XG4gICAgfVxufVxuXG5jb25zdCBTVFJJTkdfVFlQRSA9IFwic3RyaW5nXCI7XG5jb25zdCBIRVhfUkVHRVggPSAvXlswLTlhLWZcXHNdKyQvaTtcbmNvbnN0IEJBU0U2NF9SRUdFWCA9IC9eKD86W0EtWmEtejAtOSsvXXs0fSkqKD86W0EtWmEtejAtOSsvXXsyfT09fFtBLVphLXowLTkrL117M309KT8kLztcbmNvbnN0IEJBU0U2NFVSTF9SRUdFWCA9IC9eW2EtekEtWjAtOS1fXSskLztcbmNsYXNzIFV0ZjhDb252ZXJ0ZXIge1xuICAgIHN0YXRpYyBmcm9tU3RyaW5nKHRleHQpIHtcbiAgICAgICAgY29uc3QgcyA9IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudCh0ZXh0KSk7XG4gICAgICAgIGNvbnN0IHVpbnRBcnJheSA9IG5ldyBVaW50OEFycmF5KHMubGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB1aW50QXJyYXlbaV0gPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVpbnRBcnJheS5idWZmZXI7XG4gICAgfVxuICAgIHN0YXRpYyB0b1N0cmluZyhidWZmZXIpIHtcbiAgICAgICAgY29uc3QgYnVmID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShidWZmZXIpO1xuICAgICAgICBsZXQgZW5jb2RlZFN0cmluZyA9IFwiXCI7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnVmLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBlbmNvZGVkU3RyaW5nICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkZWNvZGVkU3RyaW5nID0gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShlbmNvZGVkU3RyaW5nKSk7XG4gICAgICAgIHJldHVybiBkZWNvZGVkU3RyaW5nO1xuICAgIH1cbn1cbmNsYXNzIFV0ZjE2Q29udmVydGVyIHtcbiAgICBzdGF0aWMgdG9TdHJpbmcoYnVmZmVyLCBsaXR0bGVFbmRpYW4gPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBhcnJheUJ1ZmZlciA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKGJ1ZmZlcik7XG4gICAgICAgIGNvbnN0IGRhdGFWaWV3ID0gbmV3IERhdGFWaWV3KGFycmF5QnVmZmVyKTtcbiAgICAgICAgbGV0IHJlcyA9IFwiXCI7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXlCdWZmZXIuYnl0ZUxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgICAgICBjb25zdCBjb2RlID0gZGF0YVZpZXcuZ2V0VWludDE2KGksIGxpdHRsZUVuZGlhbik7XG4gICAgICAgICAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBzdGF0aWMgZnJvbVN0cmluZyh0ZXh0LCBsaXR0bGVFbmRpYW4gPSBmYWxzZSkge1xuICAgICAgICBjb25zdCByZXMgPSBuZXcgQXJyYXlCdWZmZXIodGV4dC5sZW5ndGggKiAyKTtcbiAgICAgICAgY29uc3QgZGF0YVZpZXcgPSBuZXcgRGF0YVZpZXcocmVzKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBkYXRhVmlldy5zZXRVaW50MTYoaSAqIDIsIHRleHQuY2hhckNvZGVBdChpKSwgbGl0dGxlRW5kaWFuKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbn1cbmNsYXNzIENvbnZlcnQge1xuICAgIHN0YXRpYyBpc0hleChkYXRhKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgZGF0YSA9PT0gU1RSSU5HX1RZUEVcbiAgICAgICAgICAgICYmIEhFWF9SRUdFWC50ZXN0KGRhdGEpO1xuICAgIH1cbiAgICBzdGF0aWMgaXNCYXNlNjQoZGF0YSkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGRhdGEgPT09IFNUUklOR19UWVBFXG4gICAgICAgICAgICAmJiBCQVNFNjRfUkVHRVgudGVzdChkYXRhKTtcbiAgICB9XG4gICAgc3RhdGljIGlzQmFzZTY0VXJsKGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBkYXRhID09PSBTVFJJTkdfVFlQRVxuICAgICAgICAgICAgJiYgQkFTRTY0VVJMX1JFR0VYLnRlc3QoZGF0YSk7XG4gICAgfVxuICAgIHN0YXRpYyBUb1N0cmluZyhidWZmZXIsIGVuYyA9IFwidXRmOFwiKSB7XG4gICAgICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoYnVmZmVyKTtcbiAgICAgICAgc3dpdGNoIChlbmMudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcInV0ZjhcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5Ub1V0ZjhTdHJpbmcoYnVmKTtcbiAgICAgICAgICAgIGNhc2UgXCJiaW5hcnlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5Ub0JpbmFyeShidWYpO1xuICAgICAgICAgICAgY2FzZSBcImhleFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLlRvSGV4KGJ1Zik7XG4gICAgICAgICAgICBjYXNlIFwiYmFzZTY0XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuVG9CYXNlNjQoYnVmKTtcbiAgICAgICAgICAgIGNhc2UgXCJiYXNlNjR1cmxcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5Ub0Jhc2U2NFVybChidWYpO1xuICAgICAgICAgICAgY2FzZSBcInV0ZjE2bGVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gVXRmMTZDb252ZXJ0ZXIudG9TdHJpbmcoYnVmLCB0cnVlKTtcbiAgICAgICAgICAgIGNhc2UgXCJ1dGYxNlwiOlxuICAgICAgICAgICAgY2FzZSBcInV0ZjE2YmVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gVXRmMTZDb252ZXJ0ZXIudG9TdHJpbmcoYnVmKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHR5cGUgb2YgZW5jb2RpbmcgJyR7ZW5jfSdgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgRnJvbVN0cmluZyhzdHIsIGVuYyA9IFwidXRmOFwiKSB7XG4gICAgICAgIGlmICghc3RyKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoZW5jLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJ1dGY4XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuRnJvbVV0ZjhTdHJpbmcoc3RyKTtcbiAgICAgICAgICAgIGNhc2UgXCJiaW5hcnlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5Gcm9tQmluYXJ5KHN0cik7XG4gICAgICAgICAgICBjYXNlIFwiaGV4XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuRnJvbUhleChzdHIpO1xuICAgICAgICAgICAgY2FzZSBcImJhc2U2NFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkZyb21CYXNlNjQoc3RyKTtcbiAgICAgICAgICAgIGNhc2UgXCJiYXNlNjR1cmxcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5Gcm9tQmFzZTY0VXJsKHN0cik7XG4gICAgICAgICAgICBjYXNlIFwidXRmMTZsZVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBVdGYxNkNvbnZlcnRlci5mcm9tU3RyaW5nKHN0ciwgdHJ1ZSk7XG4gICAgICAgICAgICBjYXNlIFwidXRmMTZcIjpcbiAgICAgICAgICAgIGNhc2UgXCJ1dGYxNmJlXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFV0ZjE2Q29udmVydGVyLmZyb21TdHJpbmcoc3RyKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHR5cGUgb2YgZW5jb2RpbmcgJyR7ZW5jfSdgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgVG9CYXNlNjQoYnVmZmVyKSB7XG4gICAgICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoYnVmZmVyKTtcbiAgICAgICAgaWYgKHR5cGVvZiBidG9hICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBjb25zdCBiaW5hcnkgPSB0aGlzLlRvU3RyaW5nKGJ1ZiwgXCJiaW5hcnlcIik7XG4gICAgICAgICAgICByZXR1cm4gYnRvYShiaW5hcnkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGJ1ZikudG9TdHJpbmcoXCJiYXNlNjRcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIEZyb21CYXNlNjQoYmFzZTY0KSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZCA9IHRoaXMuZm9ybWF0U3RyaW5nKGJhc2U2NCk7XG4gICAgICAgIGlmICghZm9ybWF0dGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgICAgICB9XG4gICAgICAgIGlmICghQ29udmVydC5pc0Jhc2U2NChmb3JtYXR0ZWQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgJ2Jhc2U2NFRleHQnIGlzIG5vdCBCYXNlNjQgZW5jb2RlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGF0b2IgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLkZyb21CaW5hcnkoYXRvYihmb3JtYXR0ZWQpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShCdWZmZXIuZnJvbShmb3JtYXR0ZWQsIFwiYmFzZTY0XCIpKS5idWZmZXI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIEZyb21CYXNlNjRVcmwoYmFzZTY0dXJsKSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZCA9IHRoaXMuZm9ybWF0U3RyaW5nKGJhc2U2NHVybCk7XG4gICAgICAgIGlmICghZm9ybWF0dGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgICAgICB9XG4gICAgICAgIGlmICghQ29udmVydC5pc0Jhc2U2NFVybChmb3JtYXR0ZWQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgJ2Jhc2U2NHVybCcgaXMgbm90IEJhc2U2NFVybCBlbmNvZGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLkZyb21CYXNlNjQodGhpcy5CYXNlNjRQYWRkaW5nKGZvcm1hdHRlZC5yZXBsYWNlKC9cXC0vZywgXCIrXCIpLnJlcGxhY2UoL1xcXy9nLCBcIi9cIikpKTtcbiAgICB9XG4gICAgc3RhdGljIFRvQmFzZTY0VXJsKGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuVG9CYXNlNjQoZGF0YSkucmVwbGFjZSgvXFwrL2csIFwiLVwiKS5yZXBsYWNlKC9cXC8vZywgXCJfXCIpLnJlcGxhY2UoL1xcPS9nLCBcIlwiKTtcbiAgICB9XG4gICAgc3RhdGljIEZyb21VdGY4U3RyaW5nKHRleHQsIGVuY29kaW5nID0gQ29udmVydC5ERUZBVUxUX1VURjhfRU5DT0RJTkcpIHtcbiAgICAgICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgICAgICAgY2FzZSBcImFzY2lpXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuRnJvbUJpbmFyeSh0ZXh0KTtcbiAgICAgICAgICAgIGNhc2UgXCJ1dGY4XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFV0ZjhDb252ZXJ0ZXIuZnJvbVN0cmluZyh0ZXh0KTtcbiAgICAgICAgICAgIGNhc2UgXCJ1dGYxNlwiOlxuICAgICAgICAgICAgY2FzZSBcInV0ZjE2YmVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gVXRmMTZDb252ZXJ0ZXIuZnJvbVN0cmluZyh0ZXh0KTtcbiAgICAgICAgICAgIGNhc2UgXCJ1dGYxNmxlXCI6XG4gICAgICAgICAgICBjYXNlIFwidXNjMlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBVdGYxNkNvbnZlcnRlci5mcm9tU3RyaW5nKHRleHQsIHRydWUpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdHlwZSBvZiBlbmNvZGluZyAnJHtlbmNvZGluZ30nYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIFRvVXRmOFN0cmluZyhidWZmZXIsIGVuY29kaW5nID0gQ29udmVydC5ERUZBVUxUX1VURjhfRU5DT0RJTkcpIHtcbiAgICAgICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgICAgICAgY2FzZSBcImFzY2lpXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuVG9CaW5hcnkoYnVmZmVyKTtcbiAgICAgICAgICAgIGNhc2UgXCJ1dGY4XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFV0ZjhDb252ZXJ0ZXIudG9TdHJpbmcoYnVmZmVyKTtcbiAgICAgICAgICAgIGNhc2UgXCJ1dGYxNlwiOlxuICAgICAgICAgICAgY2FzZSBcInV0ZjE2YmVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gVXRmMTZDb252ZXJ0ZXIudG9TdHJpbmcoYnVmZmVyKTtcbiAgICAgICAgICAgIGNhc2UgXCJ1dGYxNmxlXCI6XG4gICAgICAgICAgICBjYXNlIFwidXNjMlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBVdGYxNkNvbnZlcnRlci50b1N0cmluZyhidWZmZXIsIHRydWUpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdHlwZSBvZiBlbmNvZGluZyAnJHtlbmNvZGluZ30nYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIEZyb21CaW5hcnkodGV4dCkge1xuICAgICAgICBjb25zdCBzdHJpbmdMZW5ndGggPSB0ZXh0Lmxlbmd0aDtcbiAgICAgICAgY29uc3QgcmVzdWx0VmlldyA9IG5ldyBVaW50OEFycmF5KHN0cmluZ0xlbmd0aCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyaW5nTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHJlc3VsdFZpZXdbaV0gPSB0ZXh0LmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdFZpZXcuYnVmZmVyO1xuICAgIH1cbiAgICBzdGF0aWMgVG9CaW5hcnkoYnVmZmVyKSB7XG4gICAgICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoYnVmZmVyKTtcbiAgICAgICAgbGV0IHJlcyA9IFwiXCI7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnVmLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHN0YXRpYyBUb0hleChidWZmZXIpIHtcbiAgICAgICAgY29uc3QgYnVmID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShidWZmZXIpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gXCJcIjtcbiAgICAgICAgY29uc3QgbGVuID0gYnVmLmxlbmd0aDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgY29uc3QgYnl0ZSA9IGJ1ZltpXTtcbiAgICAgICAgICAgIGlmIChieXRlIDwgMTYpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gXCIwXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQgKz0gYnl0ZS50b1N0cmluZygxNik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgc3RhdGljIEZyb21IZXgoaGV4U3RyaW5nKSB7XG4gICAgICAgIGxldCBmb3JtYXR0ZWQgPSB0aGlzLmZvcm1hdFN0cmluZyhoZXhTdHJpbmcpO1xuICAgICAgICBpZiAoIWZvcm1hdHRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIUNvbnZlcnQuaXNIZXgoZm9ybWF0dGVkKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50ICdoZXhTdHJpbmcnIGlzIG5vdCBIRVggZW5jb2RlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9ybWF0dGVkLmxlbmd0aCAlIDIpIHtcbiAgICAgICAgICAgIGZvcm1hdHRlZCA9IGAwJHtmb3JtYXR0ZWR9YDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXMgPSBuZXcgVWludDhBcnJheShmb3JtYXR0ZWQubGVuZ3RoIC8gMik7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZm9ybWF0dGVkLmxlbmd0aDsgaSA9IGkgKyAyKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gZm9ybWF0dGVkLnNsaWNlKGksIGkgKyAyKTtcbiAgICAgICAgICAgIHJlc1tpIC8gMl0gPSBwYXJzZUludChjLCAxNik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcy5idWZmZXI7XG4gICAgfVxuICAgIHN0YXRpYyBUb1V0ZjE2U3RyaW5nKGJ1ZmZlciwgbGl0dGxlRW5kaWFuID0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIFV0ZjE2Q29udmVydGVyLnRvU3RyaW5nKGJ1ZmZlciwgbGl0dGxlRW5kaWFuKTtcbiAgICB9XG4gICAgc3RhdGljIEZyb21VdGYxNlN0cmluZyh0ZXh0LCBsaXR0bGVFbmRpYW4gPSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gVXRmMTZDb252ZXJ0ZXIuZnJvbVN0cmluZyh0ZXh0LCBsaXR0bGVFbmRpYW4pO1xuICAgIH1cbiAgICBzdGF0aWMgQmFzZTY0UGFkZGluZyhiYXNlNjQpIHtcbiAgICAgICAgY29uc3QgcGFkQ291bnQgPSA0IC0gKGJhc2U2NC5sZW5ndGggJSA0KTtcbiAgICAgICAgaWYgKHBhZENvdW50IDwgNCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYWRDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgYmFzZTY0ICs9IFwiPVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBiYXNlNjQ7XG4gICAgfVxuICAgIHN0YXRpYyBmb3JtYXRTdHJpbmcoZGF0YSkge1xuICAgICAgICByZXR1cm4gKGRhdGEgPT09IG51bGwgfHwgZGF0YSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGF0YS5yZXBsYWNlKC9bXFxuXFxyXFx0IF0vZywgXCJcIikpIHx8IFwiXCI7XG4gICAgfVxufVxuQ29udmVydC5ERUZBVUxUX1VURjhfRU5DT0RJTkcgPSBcInV0ZjhcIjtcblxuZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgLi4uc291cmNlcykge1xuICAgIGNvbnN0IHJlcyA9IGFyZ3VtZW50c1swXTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBvYmogPSBhcmd1bWVudHNbaV07XG4gICAgICAgIGZvciAoY29uc3QgcHJvcCBpbiBvYmopIHtcbiAgICAgICAgICAgIHJlc1twcm9wXSA9IG9ialtwcm9wXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuZnVuY3Rpb24gY29tYmluZSguLi5idWYpIHtcbiAgICBjb25zdCB0b3RhbEJ5dGVMZW5ndGggPSBidWYubWFwKChpdGVtKSA9PiBpdGVtLmJ5dGVMZW5ndGgpLnJlZHVjZSgocHJldiwgY3VyKSA9PiBwcmV2ICsgY3VyKTtcbiAgICBjb25zdCByZXMgPSBuZXcgVWludDhBcnJheSh0b3RhbEJ5dGVMZW5ndGgpO1xuICAgIGxldCBjdXJyZW50UG9zID0gMDtcbiAgICBidWYubWFwKChpdGVtKSA9PiBuZXcgVWludDhBcnJheShpdGVtKSkuZm9yRWFjaCgoYXJyKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbTIgb2YgYXJyKSB7XG4gICAgICAgICAgICByZXNbY3VycmVudFBvcysrXSA9IGl0ZW0yO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlcy5idWZmZXI7XG59XG5mdW5jdGlvbiBpc0VxdWFsKGJ5dGVzMSwgYnl0ZXMyKSB7XG4gICAgaWYgKCEoYnl0ZXMxICYmIGJ5dGVzMikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoYnl0ZXMxLmJ5dGVMZW5ndGggIT09IGJ5dGVzMi5ieXRlTGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgYjEgPSBuZXcgVWludDhBcnJheShieXRlczEpO1xuICAgIGNvbnN0IGIyID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMyKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVzMS5ieXRlTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGIxW2ldICE9PSBiMltpXSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnRzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlciA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlcjtcbmV4cG9ydHMuQ29udmVydCA9IENvbnZlcnQ7XG5leHBvcnRzLmFzc2lnbiA9IGFzc2lnbjtcbmV4cG9ydHMuY29tYmluZSA9IGNvbWJpbmU7XG5leHBvcnRzLmlzRXF1YWwgPSBpc0VxdWFsO1xuIiwgIi8qIVxuIENvcHlyaWdodCAoYykgUGVjdWxpYXIgVmVudHVyZXMsIExMQ1xuKi9cblxuZnVuY3Rpb24gZ2V0VVRDRGF0ZShkYXRlKSB7XHJcbiAgICByZXR1cm4gbmV3IERhdGUoZGF0ZS5nZXRUaW1lKCkgKyAoZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpICogNjAwMDApKTtcclxufVxyXG5mdW5jdGlvbiBnZXRQYXJhbWV0ZXJzVmFsdWUocGFyYW1ldGVycywgbmFtZSwgZGVmYXVsdFZhbHVlKSB7XHJcbiAgICB2YXIgX2E7XHJcbiAgICBpZiAoKHBhcmFtZXRlcnMgaW5zdGFuY2VvZiBPYmplY3QpID09PSBmYWxzZSkge1xyXG4gICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gKF9hID0gcGFyYW1ldGVyc1tuYW1lXSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZGVmYXVsdFZhbHVlO1xyXG59XHJcbmZ1bmN0aW9uIGJ1ZmZlclRvSGV4Q29kZXMoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0ID0gMCwgaW5wdXRMZW5ndGggPSAoaW5wdXRCdWZmZXIuYnl0ZUxlbmd0aCAtIGlucHV0T2Zmc2V0KSwgaW5zZXJ0U3BhY2UgPSBmYWxzZSkge1xyXG4gICAgbGV0IHJlc3VsdCA9IFwiXCI7XHJcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgKG5ldyBVaW50OEFycmF5KGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpKSkge1xyXG4gICAgICAgIGNvbnN0IHN0ciA9IGl0ZW0udG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKHN0ci5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgcmVzdWx0ICs9IFwiMFwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXN1bHQgKz0gc3RyO1xyXG4gICAgICAgIGlmIChpbnNlcnRTcGFjZSkge1xyXG4gICAgICAgICAgICByZXN1bHQgKz0gXCIgXCI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdC50cmltKCk7XHJcbn1cclxuZnVuY3Rpb24gY2hlY2tCdWZmZXJQYXJhbXMoYmFzZUJsb2NrLCBpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICBpZiAoIShpbnB1dEJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSkge1xyXG4gICAgICAgIGJhc2VCbG9jay5lcnJvciA9IFwiV3JvbmcgcGFyYW1ldGVyOiBpbnB1dEJ1ZmZlciBtdXN0IGJlIFxcXCJBcnJheUJ1ZmZlclxcXCJcIjtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoIWlucHV0QnVmZmVyLmJ5dGVMZW5ndGgpIHtcclxuICAgICAgICBiYXNlQmxvY2suZXJyb3IgPSBcIldyb25nIHBhcmFtZXRlcjogaW5wdXRCdWZmZXIgaGFzIHplcm8gbGVuZ3RoXCI7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0T2Zmc2V0IDwgMCkge1xyXG4gICAgICAgIGJhc2VCbG9jay5lcnJvciA9IFwiV3JvbmcgcGFyYW1ldGVyOiBpbnB1dE9mZnNldCBsZXNzIHRoYW4gemVyb1wiO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmIChpbnB1dExlbmd0aCA8IDApIHtcclxuICAgICAgICBiYXNlQmxvY2suZXJyb3IgPSBcIldyb25nIHBhcmFtZXRlcjogaW5wdXRMZW5ndGggbGVzcyB0aGFuIHplcm9cIjtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoKGlucHV0QnVmZmVyLmJ5dGVMZW5ndGggLSBpbnB1dE9mZnNldCAtIGlucHV0TGVuZ3RoKSA8IDApIHtcclxuICAgICAgICBiYXNlQmxvY2suZXJyb3IgPSBcIkVuZCBvZiBpbnB1dCByZWFjaGVkIGJlZm9yZSBtZXNzYWdlIHdhcyBmdWxseSBkZWNvZGVkIChpbmNvbnNpc3RlbnQgb2Zmc2V0IGFuZCBsZW5ndGggdmFsdWVzKVwiO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcbmZ1bmN0aW9uIHV0aWxGcm9tQmFzZShpbnB1dEJ1ZmZlciwgaW5wdXRCYXNlKSB7XHJcbiAgICBsZXQgcmVzdWx0ID0gMDtcclxuICAgIGlmIChpbnB1dEJ1ZmZlci5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICByZXR1cm4gaW5wdXRCdWZmZXJbMF07XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBpID0gKGlucHV0QnVmZmVyLmxlbmd0aCAtIDEpOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHJlc3VsdCArPSBpbnB1dEJ1ZmZlclsoaW5wdXRCdWZmZXIubGVuZ3RoIC0gMSkgLSBpXSAqIE1hdGgucG93KDIsIGlucHV0QmFzZSAqIGkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5mdW5jdGlvbiB1dGlsVG9CYXNlKHZhbHVlLCBiYXNlLCByZXNlcnZlZCA9ICgtMSkpIHtcclxuICAgIGNvbnN0IGludGVybmFsUmVzZXJ2ZWQgPSByZXNlcnZlZDtcclxuICAgIGxldCBpbnRlcm5hbFZhbHVlID0gdmFsdWU7XHJcbiAgICBsZXQgcmVzdWx0ID0gMDtcclxuICAgIGxldCBiaWdnZXN0ID0gTWF0aC5wb3coMiwgYmFzZSk7XHJcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IDg7IGkrKykge1xyXG4gICAgICAgIGlmICh2YWx1ZSA8IGJpZ2dlc3QpIHtcclxuICAgICAgICAgICAgbGV0IHJldEJ1ZjtcclxuICAgICAgICAgICAgaWYgKGludGVybmFsUmVzZXJ2ZWQgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXRCdWYgPSBuZXcgQXJyYXlCdWZmZXIoaSk7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKGludGVybmFsUmVzZXJ2ZWQgPCBpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChuZXcgQXJyYXlCdWZmZXIoMCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0QnVmID0gbmV3IEFycmF5QnVmZmVyKGludGVybmFsUmVzZXJ2ZWQpO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gaW50ZXJuYWxSZXNlcnZlZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkocmV0QnVmKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IChpIC0gMSk7IGogPj0gMDsgai0tKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBiYXNpcyA9IE1hdGgucG93KDIsIGogKiBiYXNlKTtcclxuICAgICAgICAgICAgICAgIHJldFZpZXdbcmVzdWx0IC0gaiAtIDFdID0gTWF0aC5mbG9vcihpbnRlcm5hbFZhbHVlIC8gYmFzaXMpO1xyXG4gICAgICAgICAgICAgICAgaW50ZXJuYWxWYWx1ZSAtPSAocmV0Vmlld1tyZXN1bHQgLSBqIC0gMV0pICogYmFzaXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJldEJ1ZjtcclxuICAgICAgICB9XHJcbiAgICAgICAgYmlnZ2VzdCAqPSBNYXRoLnBvdygyLCBiYXNlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZXcgQXJyYXlCdWZmZXIoMCk7XHJcbn1cclxuZnVuY3Rpb24gdXRpbENvbmNhdEJ1ZiguLi5idWZmZXJzKSB7XHJcbiAgICBsZXQgb3V0cHV0TGVuZ3RoID0gMDtcclxuICAgIGxldCBwcmV2TGVuZ3RoID0gMDtcclxuICAgIGZvciAoY29uc3QgYnVmZmVyIG9mIGJ1ZmZlcnMpIHtcclxuICAgICAgICBvdXRwdXRMZW5ndGggKz0gYnVmZmVyLmJ5dGVMZW5ndGg7XHJcbiAgICB9XHJcbiAgICBjb25zdCByZXRCdWYgPSBuZXcgQXJyYXlCdWZmZXIob3V0cHV0TGVuZ3RoKTtcclxuICAgIGNvbnN0IHJldFZpZXcgPSBuZXcgVWludDhBcnJheShyZXRCdWYpO1xyXG4gICAgZm9yIChjb25zdCBidWZmZXIgb2YgYnVmZmVycykge1xyXG4gICAgICAgIHJldFZpZXcuc2V0KG5ldyBVaW50OEFycmF5KGJ1ZmZlciksIHByZXZMZW5ndGgpO1xyXG4gICAgICAgIHByZXZMZW5ndGggKz0gYnVmZmVyLmJ5dGVMZW5ndGg7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmV0QnVmO1xyXG59XHJcbmZ1bmN0aW9uIHV0aWxDb25jYXRWaWV3KC4uLnZpZXdzKSB7XHJcbiAgICBsZXQgb3V0cHV0TGVuZ3RoID0gMDtcclxuICAgIGxldCBwcmV2TGVuZ3RoID0gMDtcclxuICAgIGZvciAoY29uc3QgdmlldyBvZiB2aWV3cykge1xyXG4gICAgICAgIG91dHB1dExlbmd0aCArPSB2aWV3Lmxlbmd0aDtcclxuICAgIH1cclxuICAgIGNvbnN0IHJldEJ1ZiA9IG5ldyBBcnJheUJ1ZmZlcihvdXRwdXRMZW5ndGgpO1xyXG4gICAgY29uc3QgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KHJldEJ1Zik7XHJcbiAgICBmb3IgKGNvbnN0IHZpZXcgb2Ygdmlld3MpIHtcclxuICAgICAgICByZXRWaWV3LnNldCh2aWV3LCBwcmV2TGVuZ3RoKTtcclxuICAgICAgICBwcmV2TGVuZ3RoICs9IHZpZXcubGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJldFZpZXc7XHJcbn1cclxuZnVuY3Rpb24gdXRpbERlY29kZVRDKCkge1xyXG4gICAgY29uc3QgYnVmID0gbmV3IFVpbnQ4QXJyYXkodGhpcy52YWx1ZUhleCk7XHJcbiAgICBpZiAodGhpcy52YWx1ZUhleC5ieXRlTGVuZ3RoID49IDIpIHtcclxuICAgICAgICBjb25zdCBjb25kaXRpb24xID0gKGJ1ZlswXSA9PT0gMHhGRikgJiYgKGJ1ZlsxXSAmIDB4ODApO1xyXG4gICAgICAgIGNvbnN0IGNvbmRpdGlvbjIgPSAoYnVmWzBdID09PSAweDAwKSAmJiAoKGJ1ZlsxXSAmIDB4ODApID09PSAweDAwKTtcclxuICAgICAgICBpZiAoY29uZGl0aW9uMSB8fCBjb25kaXRpb24yKSB7XHJcbiAgICAgICAgICAgIHRoaXMud2FybmluZ3MucHVzaChcIk5lZWRsZXNzbHkgbG9uZyBmb3JtYXRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgYmlnSW50QnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKHRoaXMudmFsdWVIZXguYnl0ZUxlbmd0aCk7XHJcbiAgICBjb25zdCBiaWdJbnRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoYmlnSW50QnVmZmVyKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy52YWx1ZUhleC5ieXRlTGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBiaWdJbnRWaWV3W2ldID0gMDtcclxuICAgIH1cclxuICAgIGJpZ0ludFZpZXdbMF0gPSAoYnVmWzBdICYgMHg4MCk7XHJcbiAgICBjb25zdCBiaWdJbnQgPSB1dGlsRnJvbUJhc2UoYmlnSW50VmlldywgOCk7XHJcbiAgICBjb25zdCBzbWFsbEludEJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcih0aGlzLnZhbHVlSGV4LmJ5dGVMZW5ndGgpO1xyXG4gICAgY29uc3Qgc21hbGxJbnRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoc21hbGxJbnRCdWZmZXIpO1xyXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLnZhbHVlSGV4LmJ5dGVMZW5ndGg7IGorKykge1xyXG4gICAgICAgIHNtYWxsSW50Vmlld1tqXSA9IGJ1ZltqXTtcclxuICAgIH1cclxuICAgIHNtYWxsSW50Vmlld1swXSAmPSAweDdGO1xyXG4gICAgY29uc3Qgc21hbGxJbnQgPSB1dGlsRnJvbUJhc2Uoc21hbGxJbnRWaWV3LCA4KTtcclxuICAgIHJldHVybiAoc21hbGxJbnQgLSBiaWdJbnQpO1xyXG59XHJcbmZ1bmN0aW9uIHV0aWxFbmNvZGVUQyh2YWx1ZSkge1xyXG4gICAgY29uc3QgbW9kVmFsdWUgPSAodmFsdWUgPCAwKSA/ICh2YWx1ZSAqICgtMSkpIDogdmFsdWU7XHJcbiAgICBsZXQgYmlnSW50ID0gMTI4O1xyXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCA4OyBpKyspIHtcclxuICAgICAgICBpZiAobW9kVmFsdWUgPD0gYmlnSW50KSB7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSA8IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNtYWxsSW50ID0gYmlnSW50IC0gbW9kVmFsdWU7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXRCdWYgPSB1dGlsVG9CYXNlKHNtYWxsSW50LCA4LCBpKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJldFZpZXcgPSBuZXcgVWludDhBcnJheShyZXRCdWYpO1xyXG4gICAgICAgICAgICAgICAgcmV0Vmlld1swXSB8PSAweDgwO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldEJ1ZjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgcmV0QnVmID0gdXRpbFRvQmFzZShtb2RWYWx1ZSwgOCwgaSk7XHJcbiAgICAgICAgICAgIGxldCByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkocmV0QnVmKTtcclxuICAgICAgICAgICAgaWYgKHJldFZpZXdbMF0gJiAweDgwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0ZW1wQnVmID0gcmV0QnVmLnNsaWNlKDApO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGVtcFZpZXcgPSBuZXcgVWludDhBcnJheSh0ZW1wQnVmKTtcclxuICAgICAgICAgICAgICAgIHJldEJ1ZiA9IG5ldyBBcnJheUJ1ZmZlcihyZXRCdWYuYnl0ZUxlbmd0aCArIDEpO1xyXG4gICAgICAgICAgICAgICAgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KHJldEJ1Zik7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IHRlbXBCdWYuYnl0ZUxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0Vmlld1trICsgMV0gPSB0ZW1wVmlld1trXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldFZpZXdbMF0gPSAweDAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXRCdWY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJpZ0ludCAqPSBNYXRoLnBvdygyLCA4KTtcclxuICAgIH1cclxuICAgIHJldHVybiAobmV3IEFycmF5QnVmZmVyKDApKTtcclxufVxyXG5mdW5jdGlvbiBpc0VxdWFsQnVmZmVyKGlucHV0QnVmZmVyMSwgaW5wdXRCdWZmZXIyKSB7XHJcbiAgICBpZiAoaW5wdXRCdWZmZXIxLmJ5dGVMZW5ndGggIT09IGlucHV0QnVmZmVyMi5ieXRlTGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdmlldzEgPSBuZXcgVWludDhBcnJheShpbnB1dEJ1ZmZlcjEpO1xyXG4gICAgY29uc3QgdmlldzIgPSBuZXcgVWludDhBcnJheShpbnB1dEJ1ZmZlcjIpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2aWV3MS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmICh2aWV3MVtpXSAhPT0gdmlldzJbaV0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcbmZ1bmN0aW9uIHBhZE51bWJlcihpbnB1dE51bWJlciwgZnVsbExlbmd0aCkge1xyXG4gICAgY29uc3Qgc3RyID0gaW5wdXROdW1iZXIudG9TdHJpbmcoMTApO1xyXG4gICAgaWYgKGZ1bGxMZW5ndGggPCBzdHIubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcbiAgICBjb25zdCBkaWYgPSBmdWxsTGVuZ3RoIC0gc3RyLmxlbmd0aDtcclxuICAgIGNvbnN0IHBhZGRpbmcgPSBuZXcgQXJyYXkoZGlmKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGlmOyBpKyspIHtcclxuICAgICAgICBwYWRkaW5nW2ldID0gXCIwXCI7XHJcbiAgICB9XHJcbiAgICBjb25zdCBwYWRkaW5nU3RyaW5nID0gcGFkZGluZy5qb2luKFwiXCIpO1xyXG4gICAgcmV0dXJuIHBhZGRpbmdTdHJpbmcuY29uY2F0KHN0cik7XHJcbn1cclxuY29uc3QgYmFzZTY0VGVtcGxhdGUgPSBcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89XCI7XHJcbmNvbnN0IGJhc2U2NFVybFRlbXBsYXRlID0gXCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OS1fPVwiO1xyXG5mdW5jdGlvbiB0b0Jhc2U2NChpbnB1dCwgdXNlVXJsVGVtcGxhdGUgPSBmYWxzZSwgc2tpcFBhZGRpbmcgPSBmYWxzZSwgc2tpcExlYWRpbmdaZXJvcyA9IGZhbHNlKSB7XHJcbiAgICBsZXQgaSA9IDA7XHJcbiAgICBsZXQgZmxhZzEgPSAwO1xyXG4gICAgbGV0IGZsYWcyID0gMDtcclxuICAgIGxldCBvdXRwdXQgPSBcIlwiO1xyXG4gICAgY29uc3QgdGVtcGxhdGUgPSAodXNlVXJsVGVtcGxhdGUpID8gYmFzZTY0VXJsVGVtcGxhdGUgOiBiYXNlNjRUZW1wbGF0ZTtcclxuICAgIGlmIChza2lwTGVhZGluZ1plcm9zKSB7XHJcbiAgICAgICAgbGV0IG5vblplcm9Qb3NpdGlvbiA9IDA7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChpKSAhPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgbm9uWmVyb1Bvc2l0aW9uID0gaTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlucHV0ID0gaW5wdXQuc2xpY2Uobm9uWmVyb1Bvc2l0aW9uKTtcclxuICAgIH1cclxuICAgIHdoaWxlIChpIDwgaW5wdXQubGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgY2hyMSA9IGlucHV0LmNoYXJDb2RlQXQoaSsrKTtcclxuICAgICAgICBpZiAoaSA+PSBpbnB1dC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgZmxhZzEgPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjaHIyID0gaW5wdXQuY2hhckNvZGVBdChpKyspO1xyXG4gICAgICAgIGlmIChpID49IGlucHV0Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICBmbGFnMiA9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGNocjMgPSBpbnB1dC5jaGFyQ29kZUF0KGkrKyk7XHJcbiAgICAgICAgY29uc3QgZW5jMSA9IGNocjEgPj4gMjtcclxuICAgICAgICBjb25zdCBlbmMyID0gKChjaHIxICYgMHgwMykgPDwgNCkgfCAoY2hyMiA+PiA0KTtcclxuICAgICAgICBsZXQgZW5jMyA9ICgoY2hyMiAmIDB4MEYpIDw8IDIpIHwgKGNocjMgPj4gNik7XHJcbiAgICAgICAgbGV0IGVuYzQgPSBjaHIzICYgMHgzRjtcclxuICAgICAgICBpZiAoZmxhZzEgPT09IDEpIHtcclxuICAgICAgICAgICAgZW5jMyA9IGVuYzQgPSA2NDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChmbGFnMiA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgZW5jNCA9IDY0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChza2lwUGFkZGluZykge1xyXG4gICAgICAgICAgICBpZiAoZW5jMyA9PT0gNjQpIHtcclxuICAgICAgICAgICAgICAgIG91dHB1dCArPSBgJHt0ZW1wbGF0ZS5jaGFyQXQoZW5jMSl9JHt0ZW1wbGF0ZS5jaGFyQXQoZW5jMil9YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChlbmM0ID09PSA2NCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCArPSBgJHt0ZW1wbGF0ZS5jaGFyQXQoZW5jMSl9JHt0ZW1wbGF0ZS5jaGFyQXQoZW5jMil9JHt0ZW1wbGF0ZS5jaGFyQXQoZW5jMyl9YDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCArPSBgJHt0ZW1wbGF0ZS5jaGFyQXQoZW5jMSl9JHt0ZW1wbGF0ZS5jaGFyQXQoZW5jMil9JHt0ZW1wbGF0ZS5jaGFyQXQoZW5jMyl9JHt0ZW1wbGF0ZS5jaGFyQXQoZW5jNCl9YDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgb3V0cHV0ICs9IGAke3RlbXBsYXRlLmNoYXJBdChlbmMxKX0ke3RlbXBsYXRlLmNoYXJBdChlbmMyKX0ke3RlbXBsYXRlLmNoYXJBdChlbmMzKX0ke3RlbXBsYXRlLmNoYXJBdChlbmM0KX1gO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBvdXRwdXQ7XHJcbn1cclxuZnVuY3Rpb24gZnJvbUJhc2U2NChpbnB1dCwgdXNlVXJsVGVtcGxhdGUgPSBmYWxzZSwgY3V0VGFpbFplcm9zID0gZmFsc2UpIHtcclxuICAgIGNvbnN0IHRlbXBsYXRlID0gKHVzZVVybFRlbXBsYXRlKSA/IGJhc2U2NFVybFRlbXBsYXRlIDogYmFzZTY0VGVtcGxhdGU7XHJcbiAgICBmdW5jdGlvbiBpbmRleE9mKHRvU2VhcmNoKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA2NDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0ZW1wbGF0ZS5jaGFyQXQoaSkgPT09IHRvU2VhcmNoKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiA2NDtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHRlc3QoaW5jb21pbmcpIHtcclxuICAgICAgICByZXR1cm4gKChpbmNvbWluZyA9PT0gNjQpID8gMHgwMCA6IGluY29taW5nKTtcclxuICAgIH1cclxuICAgIGxldCBpID0gMDtcclxuICAgIGxldCBvdXRwdXQgPSBcIlwiO1xyXG4gICAgd2hpbGUgKGkgPCBpbnB1dC5sZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBlbmMxID0gaW5kZXhPZihpbnB1dC5jaGFyQXQoaSsrKSk7XHJcbiAgICAgICAgY29uc3QgZW5jMiA9IChpID49IGlucHV0Lmxlbmd0aCkgPyAweDAwIDogaW5kZXhPZihpbnB1dC5jaGFyQXQoaSsrKSk7XHJcbiAgICAgICAgY29uc3QgZW5jMyA9IChpID49IGlucHV0Lmxlbmd0aCkgPyAweDAwIDogaW5kZXhPZihpbnB1dC5jaGFyQXQoaSsrKSk7XHJcbiAgICAgICAgY29uc3QgZW5jNCA9IChpID49IGlucHV0Lmxlbmd0aCkgPyAweDAwIDogaW5kZXhPZihpbnB1dC5jaGFyQXQoaSsrKSk7XHJcbiAgICAgICAgY29uc3QgY2hyMSA9ICh0ZXN0KGVuYzEpIDw8IDIpIHwgKHRlc3QoZW5jMikgPj4gNCk7XHJcbiAgICAgICAgY29uc3QgY2hyMiA9ICgodGVzdChlbmMyKSAmIDB4MEYpIDw8IDQpIHwgKHRlc3QoZW5jMykgPj4gMik7XHJcbiAgICAgICAgY29uc3QgY2hyMyA9ICgodGVzdChlbmMzKSAmIDB4MDMpIDw8IDYpIHwgdGVzdChlbmM0KTtcclxuICAgICAgICBvdXRwdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjaHIxKTtcclxuICAgICAgICBpZiAoZW5jMyAhPT0gNjQpIHtcclxuICAgICAgICAgICAgb3V0cHV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hyMik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbmM0ICE9PSA2NCkge1xyXG4gICAgICAgICAgICBvdXRwdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjaHIzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoY3V0VGFpbFplcm9zKSB7XHJcbiAgICAgICAgY29uc3Qgb3V0cHV0TGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDtcclxuICAgICAgICBsZXQgbm9uWmVyb1N0YXJ0ID0gKC0xKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gKG91dHB1dExlbmd0aCAtIDEpOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgICBpZiAob3V0cHV0LmNoYXJDb2RlQXQoaSkgIT09IDApIHtcclxuICAgICAgICAgICAgICAgIG5vblplcm9TdGFydCA9IGk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobm9uWmVyb1N0YXJ0ICE9PSAoLTEpKSB7XHJcbiAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dC5zbGljZSgwLCBub25aZXJvU3RhcnQgKyAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG91dHB1dCA9IFwiXCI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG91dHB1dDtcclxufVxyXG5mdW5jdGlvbiBhcnJheUJ1ZmZlclRvU3RyaW5nKGJ1ZmZlcikge1xyXG4gICAgbGV0IHJlc3VsdFN0cmluZyA9IFwiXCI7XHJcbiAgICBjb25zdCB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTtcclxuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB2aWV3KSB7XHJcbiAgICAgICAgcmVzdWx0U3RyaW5nICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoZWxlbWVudCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0U3RyaW5nO1xyXG59XHJcbmZ1bmN0aW9uIHN0cmluZ1RvQXJyYXlCdWZmZXIoc3RyKSB7XHJcbiAgICBjb25zdCBzdHJpbmdMZW5ndGggPSBzdHIubGVuZ3RoO1xyXG4gICAgY29uc3QgcmVzdWx0QnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKHN0cmluZ0xlbmd0aCk7XHJcbiAgICBjb25zdCByZXN1bHRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkocmVzdWx0QnVmZmVyKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyaW5nTGVuZ3RoOyBpKyspIHtcclxuICAgICAgICByZXN1bHRWaWV3W2ldID0gc3RyLmNoYXJDb2RlQXQoaSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0QnVmZmVyO1xyXG59XHJcbmNvbnN0IGxvZzIgPSBNYXRoLmxvZygyKTtcclxuZnVuY3Rpb24gbmVhcmVzdFBvd2VyT2YyKGxlbmd0aCkge1xyXG4gICAgY29uc3QgYmFzZSA9IChNYXRoLmxvZyhsZW5ndGgpIC8gbG9nMik7XHJcbiAgICBjb25zdCBmbG9vciA9IE1hdGguZmxvb3IoYmFzZSk7XHJcbiAgICBjb25zdCByb3VuZCA9IE1hdGgucm91bmQoYmFzZSk7XHJcbiAgICByZXR1cm4gKChmbG9vciA9PT0gcm91bmQpID8gZmxvb3IgOiByb3VuZCk7XHJcbn1cclxuZnVuY3Rpb24gY2xlYXJQcm9wcyhvYmplY3QsIHByb3BzQXJyYXkpIHtcclxuICAgIGZvciAoY29uc3QgcHJvcCBvZiBwcm9wc0FycmF5KSB7XHJcbiAgICAgICAgZGVsZXRlIG9iamVjdFtwcm9wXTtcclxuICAgIH1cclxufVxuXG5leHBvcnQgeyBhcnJheUJ1ZmZlclRvU3RyaW5nLCBidWZmZXJUb0hleENvZGVzLCBjaGVja0J1ZmZlclBhcmFtcywgY2xlYXJQcm9wcywgZnJvbUJhc2U2NCwgZ2V0UGFyYW1ldGVyc1ZhbHVlLCBnZXRVVENEYXRlLCBpc0VxdWFsQnVmZmVyLCBuZWFyZXN0UG93ZXJPZjIsIHBhZE51bWJlciwgc3RyaW5nVG9BcnJheUJ1ZmZlciwgdG9CYXNlNjQsIHV0aWxDb25jYXRCdWYsIHV0aWxDb25jYXRWaWV3LCB1dGlsRGVjb2RlVEMsIHV0aWxFbmNvZGVUQywgdXRpbEZyb21CYXNlLCB1dGlsVG9CYXNlIH07XG4iLCAiLyohXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQsIEdNTyBHbG9iYWxTaWduXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUtMjAyMiwgUGVjdWxpYXIgVmVudHVyZXNcbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBcbiAqIEF1dGhvciAyMDE0LTIwMTksIFl1cnkgU3Ryb3poZXZza3lcbiAqIFxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbiAqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAqIFxuICogKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAqICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gKiBcbiAqICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vclxuICogICBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICogXG4gKiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHNcbiAqICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb21cbiAqICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cbiAqIFxuICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXG4gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxuICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcbiAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXG4gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcbiAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICogXG4gKi9cblxuaW1wb3J0ICogYXMgcHZ0c3V0aWxzIGZyb20gJ3B2dHN1dGlscyc7XG5pbXBvcnQgKiBhcyBwdnV0aWxzIGZyb20gJ3B2dXRpbHMnO1xuXG5mdW5jdGlvbiBhc3NlcnRCaWdJbnQoKSB7XHJcbiAgICBpZiAodHlwZW9mIEJpZ0ludCA9PT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJpZ0ludCBpcyBub3QgZGVmaW5lZC4gWW91ciBlbnZpcm9ubWVudCBkb2Vzbid0IGltcGxlbWVudCBCaWdJbnQuXCIpO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGNvbmNhdChidWZmZXJzKSB7XHJcbiAgICBsZXQgb3V0cHV0TGVuZ3RoID0gMDtcclxuICAgIGxldCBwcmV2TGVuZ3RoID0gMDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnVmZmVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IGJ1ZmZlcnNbaV07XHJcbiAgICAgICAgb3V0cHV0TGVuZ3RoICs9IGJ1ZmZlci5ieXRlTGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KG91dHB1dExlbmd0aCk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1ZmZlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBidWZmZXIgPSBidWZmZXJzW2ldO1xyXG4gICAgICAgIHJldFZpZXcuc2V0KG5ldyBVaW50OEFycmF5KGJ1ZmZlciksIHByZXZMZW5ndGgpO1xyXG4gICAgICAgIHByZXZMZW5ndGggKz0gYnVmZmVyLmJ5dGVMZW5ndGg7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmV0Vmlldy5idWZmZXI7XHJcbn1cclxuZnVuY3Rpb24gY2hlY2tCdWZmZXJQYXJhbXMoYmFzZUJsb2NrLCBpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICBpZiAoIShpbnB1dEJ1ZmZlciBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKSB7XHJcbiAgICAgICAgYmFzZUJsb2NrLmVycm9yID0gXCJXcm9uZyBwYXJhbWV0ZXI6IGlucHV0QnVmZmVyIG11c3QgYmUgJ1VpbnQ4QXJyYXknXCI7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKCFpbnB1dEJ1ZmZlci5ieXRlTGVuZ3RoKSB7XHJcbiAgICAgICAgYmFzZUJsb2NrLmVycm9yID0gXCJXcm9uZyBwYXJhbWV0ZXI6IGlucHV0QnVmZmVyIGhhcyB6ZXJvIGxlbmd0aFwiO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmIChpbnB1dE9mZnNldCA8IDApIHtcclxuICAgICAgICBiYXNlQmxvY2suZXJyb3IgPSBcIldyb25nIHBhcmFtZXRlcjogaW5wdXRPZmZzZXQgbGVzcyB0aGFuIHplcm9cIjtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoaW5wdXRMZW5ndGggPCAwKSB7XHJcbiAgICAgICAgYmFzZUJsb2NrLmVycm9yID0gXCJXcm9uZyBwYXJhbWV0ZXI6IGlucHV0TGVuZ3RoIGxlc3MgdGhhbiB6ZXJvXCI7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKChpbnB1dEJ1ZmZlci5ieXRlTGVuZ3RoIC0gaW5wdXRPZmZzZXQgLSBpbnB1dExlbmd0aCkgPCAwKSB7XHJcbiAgICAgICAgYmFzZUJsb2NrLmVycm9yID0gXCJFbmQgb2YgaW5wdXQgcmVhY2hlZCBiZWZvcmUgbWVzc2FnZSB3YXMgZnVsbHkgZGVjb2RlZCAoaW5jb25zaXN0ZW50IG9mZnNldCBhbmQgbGVuZ3RoIHZhbHVlcylcIjtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxuXG5jbGFzcyBWaWV3V3JpdGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuaXRlbXMgPSBbXTtcclxuICAgIH1cclxuICAgIHdyaXRlKGJ1Zikge1xyXG4gICAgICAgIHRoaXMuaXRlbXMucHVzaChidWYpO1xyXG4gICAgfVxyXG4gICAgZmluYWwoKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbmNhdCh0aGlzLml0ZW1zKTtcclxuICAgIH1cclxufVxuXG5jb25zdCBwb3dlcnMyID0gW25ldyBVaW50OEFycmF5KFsxXSldO1xyXG5jb25zdCBkaWdpdHNTdHJpbmcgPSBcIjAxMjM0NTY3ODlcIjtcclxuY29uc3QgTkFNRSA9IFwibmFtZVwiO1xyXG5jb25zdCBWQUxVRV9IRVhfVklFVyA9IFwidmFsdWVIZXhWaWV3XCI7XHJcbmNvbnN0IElTX0hFWF9PTkxZID0gXCJpc0hleE9ubHlcIjtcclxuY29uc3QgSURfQkxPQ0sgPSBcImlkQmxvY2tcIjtcclxuY29uc3QgVEFHX0NMQVNTID0gXCJ0YWdDbGFzc1wiO1xyXG5jb25zdCBUQUdfTlVNQkVSID0gXCJ0YWdOdW1iZXJcIjtcclxuY29uc3QgSVNfQ09OU1RSVUNURUQgPSBcImlzQ29uc3RydWN0ZWRcIjtcclxuY29uc3QgRlJPTV9CRVIgPSBcImZyb21CRVJcIjtcclxuY29uc3QgVE9fQkVSID0gXCJ0b0JFUlwiO1xyXG5jb25zdCBMT0NBTCA9IFwibG9jYWxcIjtcclxuY29uc3QgRU1QVFlfU1RSSU5HID0gXCJcIjtcclxuY29uc3QgRU1QVFlfQlVGRkVSID0gbmV3IEFycmF5QnVmZmVyKDApO1xyXG5jb25zdCBFTVBUWV9WSUVXID0gbmV3IFVpbnQ4QXJyYXkoMCk7XHJcbmNvbnN0IEVORF9PRl9DT05URU5UX05BTUUgPSBcIkVuZE9mQ29udGVudFwiO1xyXG5jb25zdCBPQ1RFVF9TVFJJTkdfTkFNRSA9IFwiT0NURVQgU1RSSU5HXCI7XHJcbmNvbnN0IEJJVF9TVFJJTkdfTkFNRSA9IFwiQklUIFNUUklOR1wiO1xuXG5mdW5jdGlvbiBIZXhCbG9jayhCYXNlQ2xhc3MpIHtcclxuICAgIHZhciBfYTtcclxuICAgIHJldHVybiBfYSA9IGNsYXNzIFNvbWUgZXh0ZW5kcyBCYXNlQ2xhc3Mge1xyXG4gICAgICAgICAgICBjb25zdHJ1Y3RvciguLi5hcmdzKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX2E7XHJcbiAgICAgICAgICAgICAgICBzdXBlciguLi5hcmdzKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IGFyZ3NbMF0gfHwge307XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzSGV4T25seSA9IChfYSA9IHBhcmFtcy5pc0hleE9ubHkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSBwYXJhbXMudmFsdWVIZXggPyBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShwYXJhbXMudmFsdWVIZXgpIDogRU1QVFlfVklFVztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBnZXQgdmFsdWVIZXgoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUhleFZpZXcuc2xpY2UoKS5idWZmZXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2V0IHZhbHVlSGV4KHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IG5ldyBVaW50OEFycmF5KHZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZpZXcgPSBpbnB1dEJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyID8gbmV3IFVpbnQ4QXJyYXkoaW5wdXRCdWZmZXIpIDogaW5wdXRCdWZmZXI7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWNoZWNrQnVmZmVyUGFyYW1zKHRoaXMsIHZpZXcsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbmRMZW5ndGggPSBpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSB2aWV3LnN1YmFycmF5KGlucHV0T2Zmc2V0LCBlbmRMZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnZhbHVlSGV4Vmlldy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1c2goXCJaZXJvIGJ1ZmZlciBsZW5ndGhcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0T2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCA9IGlucHV0TGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuZExlbmd0aDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0b0JFUihzaXplT25seSA9IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNIZXhPbmx5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiRmxhZyAnaXNIZXhPbmx5JyBpcyBub3Qgc2V0LCBhYm9ydFwiO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWV9CVUZGRVI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoc2l6ZU9ubHkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFycmF5QnVmZmVyKHRoaXMudmFsdWVIZXhWaWV3LmJ5dGVMZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICh0aGlzLnZhbHVlSGV4Vmlldy5ieXRlTGVuZ3RoID09PSB0aGlzLnZhbHVlSGV4Vmlldy5idWZmZXIuYnl0ZUxlbmd0aClcclxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMudmFsdWVIZXhWaWV3LmJ1ZmZlclxyXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy52YWx1ZUhleFZpZXcuc2xpY2UoKS5idWZmZXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdG9KU09OKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgICAgICAgICBpc0hleE9ubHk6IHRoaXMuaXNIZXhPbmx5LFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlSGV4OiBwdnRzdXRpbHMuQ29udmVydC5Ub0hleCh0aGlzLnZhbHVlSGV4VmlldyksXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBfYS5OQU1FID0gXCJoZXhCbG9ja1wiLFxyXG4gICAgICAgIF9hO1xyXG59XG5cbmNsYXNzIExvY2FsQmFzZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgYmxvY2tMZW5ndGggPSAwLCBlcnJvciA9IEVNUFRZX1NUUklORywgd2FybmluZ3MgPSBbXSwgdmFsdWVCZWZvcmVEZWNvZGUgPSBFTVBUWV9WSUVXLCB9ID0ge30pIHtcclxuICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoID0gYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgdGhpcy5lcnJvciA9IGVycm9yO1xyXG4gICAgICAgIHRoaXMud2FybmluZ3MgPSB3YXJuaW5ncztcclxuICAgICAgICB0aGlzLnZhbHVlQmVmb3JlRGVjb2RlVmlldyA9IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KHZhbHVlQmVmb3JlRGVjb2RlKTtcclxuICAgIH1cclxuICAgIHN0YXRpYyBibG9ja05hbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuTkFNRTtcclxuICAgIH1cclxuICAgIGdldCB2YWx1ZUJlZm9yZURlY29kZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUJlZm9yZURlY29kZVZpZXcuc2xpY2UoKS5idWZmZXI7XHJcbiAgICB9XHJcbiAgICBzZXQgdmFsdWVCZWZvcmVEZWNvZGUodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlQmVmb3JlRGVjb2RlVmlldyA9IG5ldyBVaW50OEFycmF5KHZhbHVlKTtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBibG9ja05hbWU6IHRoaXMuY29uc3RydWN0b3IuTkFNRSxcclxuICAgICAgICAgICAgYmxvY2tMZW5ndGg6IHRoaXMuYmxvY2tMZW5ndGgsXHJcbiAgICAgICAgICAgIGVycm9yOiB0aGlzLmVycm9yLFxyXG4gICAgICAgICAgICB3YXJuaW5nczogdGhpcy53YXJuaW5ncyxcclxuICAgICAgICAgICAgdmFsdWVCZWZvcmVEZWNvZGU6IHB2dHN1dGlscy5Db252ZXJ0LlRvSGV4KHRoaXMudmFsdWVCZWZvcmVEZWNvZGVWaWV3KSxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbkxvY2FsQmFzZUJsb2NrLk5BTUUgPSBcImJhc2VCbG9ja1wiO1xuXG5jbGFzcyBWYWx1ZUJsb2NrIGV4dGVuZHMgTG9jYWxCYXNlQmxvY2sge1xyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwiVXNlciBuZWVkIHRvIG1ha2UgYSBzcGVjaWZpYyBmdW5jdGlvbiBpbiBhIGNsYXNzIHdoaWNoIGV4dGVuZHMgJ1ZhbHVlQmxvY2snXCIpO1xyXG4gICAgfVxyXG4gICAgdG9CRVIoc2l6ZU9ubHksIHdyaXRlcikge1xyXG4gICAgICAgIHRocm93IFR5cGVFcnJvcihcIlVzZXIgbmVlZCB0byBtYWtlIGEgc3BlY2lmaWMgZnVuY3Rpb24gaW4gYSBjbGFzcyB3aGljaCBleHRlbmRzICdWYWx1ZUJsb2NrJ1wiKTtcclxuICAgIH1cclxufVxyXG5WYWx1ZUJsb2NrLk5BTUUgPSBcInZhbHVlQmxvY2tcIjtcblxuY2xhc3MgTG9jYWxJZGVudGlmaWNhdGlvbkJsb2NrIGV4dGVuZHMgSGV4QmxvY2soTG9jYWxCYXNlQmxvY2spIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgaWRCbG9jayA9IHt9LCB9ID0ge30pIHtcclxuICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2Q7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICBpZiAoaWRCbG9jaykge1xyXG4gICAgICAgICAgICB0aGlzLmlzSGV4T25seSA9IChfYSA9IGlkQmxvY2suaXNIZXhPbmx5KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSBpZEJsb2NrLnZhbHVlSGV4ID8gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoaWRCbG9jay52YWx1ZUhleCkgOiBFTVBUWV9WSUVXO1xyXG4gICAgICAgICAgICB0aGlzLnRhZ0NsYXNzID0gKF9iID0gaWRCbG9jay50YWdDbGFzcykgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogLTE7XHJcbiAgICAgICAgICAgIHRoaXMudGFnTnVtYmVyID0gKF9jID0gaWRCbG9jay50YWdOdW1iZXIpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IC0xO1xyXG4gICAgICAgICAgICB0aGlzLmlzQ29uc3RydWN0ZWQgPSAoX2QgPSBpZEJsb2NrLmlzQ29uc3RydWN0ZWQpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy50YWdDbGFzcyA9IC0xO1xyXG4gICAgICAgICAgICB0aGlzLnRhZ051bWJlciA9IC0xO1xyXG4gICAgICAgICAgICB0aGlzLmlzQ29uc3RydWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB0b0JFUihzaXplT25seSA9IGZhbHNlKSB7XHJcbiAgICAgICAgbGV0IGZpcnN0T2N0ZXQgPSAwO1xyXG4gICAgICAgIHN3aXRjaCAodGhpcy50YWdDbGFzcykge1xyXG4gICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICBmaXJzdE9jdGV0IHw9IDB4MDA7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgZmlyc3RPY3RldCB8PSAweDQwO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICAgIGZpcnN0T2N0ZXQgfD0gMHg4MDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgICAgICBmaXJzdE9jdGV0IHw9IDB4QzA7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIlVua25vd24gdGFnIGNsYXNzXCI7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gRU1QVFlfQlVGRkVSO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5pc0NvbnN0cnVjdGVkKVxyXG4gICAgICAgICAgICBmaXJzdE9jdGV0IHw9IDB4MjA7XHJcbiAgICAgICAgaWYgKHRoaXMudGFnTnVtYmVyIDwgMzEgJiYgIXRoaXMuaXNIZXhPbmx5KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJldFZpZXcgPSBuZXcgVWludDhBcnJheSgxKTtcclxuICAgICAgICAgICAgaWYgKCFzaXplT25seSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IG51bWJlciA9IHRoaXMudGFnTnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgbnVtYmVyICY9IDB4MUY7XHJcbiAgICAgICAgICAgICAgICBmaXJzdE9jdGV0IHw9IG51bWJlcjtcclxuICAgICAgICAgICAgICAgIHJldFZpZXdbMF0gPSBmaXJzdE9jdGV0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXRWaWV3LmJ1ZmZlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzSGV4T25seSkge1xyXG4gICAgICAgICAgICBjb25zdCBlbmNvZGVkQnVmID0gcHZ1dGlscy51dGlsVG9CYXNlKHRoaXMudGFnTnVtYmVyLCA3KTtcclxuICAgICAgICAgICAgY29uc3QgZW5jb2RlZFZpZXcgPSBuZXcgVWludDhBcnJheShlbmNvZGVkQnVmKTtcclxuICAgICAgICAgICAgY29uc3Qgc2l6ZSA9IGVuY29kZWRCdWYuYnl0ZUxlbmd0aDtcclxuICAgICAgICAgICAgY29uc3QgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KHNpemUgKyAxKTtcclxuICAgICAgICAgICAgcmV0Vmlld1swXSA9IChmaXJzdE9jdGV0IHwgMHgxRik7XHJcbiAgICAgICAgICAgIGlmICghc2l6ZU9ubHkpIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgKHNpemUgLSAxKTsgaSsrKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldFZpZXdbaSArIDFdID0gZW5jb2RlZFZpZXdbaV0gfCAweDgwO1xyXG4gICAgICAgICAgICAgICAgcmV0Vmlld1tzaXplXSA9IGVuY29kZWRWaWV3W3NpemUgLSAxXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmV0Vmlldy5idWZmZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJldFZpZXcgPSBuZXcgVWludDhBcnJheSh0aGlzLnZhbHVlSGV4Vmlldy5ieXRlTGVuZ3RoICsgMSk7XHJcbiAgICAgICAgcmV0Vmlld1swXSA9IChmaXJzdE9jdGV0IHwgMHgxRik7XHJcbiAgICAgICAgaWYgKCFzaXplT25seSkge1xyXG4gICAgICAgICAgICBjb25zdCBjdXJWaWV3ID0gdGhpcy52YWx1ZUhleFZpZXc7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgKGN1clZpZXcubGVuZ3RoIC0gMSk7IGkrKylcclxuICAgICAgICAgICAgICAgIHJldFZpZXdbaSArIDFdID0gY3VyVmlld1tpXSB8IDB4ODA7XHJcbiAgICAgICAgICAgIHJldFZpZXdbdGhpcy52YWx1ZUhleFZpZXcuYnl0ZUxlbmd0aF0gPSBjdXJWaWV3W2N1clZpZXcubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXRWaWV3LmJ1ZmZlcjtcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IGlucHV0VmlldyA9IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGlucHV0QnVmZmVyKTtcclxuICAgICAgICBpZiAoIWNoZWNrQnVmZmVyUGFyYW1zKHRoaXMsIGlucHV0VmlldywgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGludEJ1ZmZlciA9IGlucHV0Vmlldy5zdWJhcnJheShpbnB1dE9mZnNldCwgaW5wdXRPZmZzZXQgKyBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgaWYgKGludEJ1ZmZlci5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiWmVybyBidWZmZXIgbGVuZ3RoXCI7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdGFnQ2xhc3NNYXNrID0gaW50QnVmZmVyWzBdICYgMHhDMDtcclxuICAgICAgICBzd2l0Y2ggKHRhZ0NsYXNzTWFzaykge1xyXG4gICAgICAgICAgICBjYXNlIDB4MDA6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRhZ0NsYXNzID0gKDEpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMHg0MDpcclxuICAgICAgICAgICAgICAgIHRoaXMudGFnQ2xhc3MgPSAoMik7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAweDgwOlxyXG4gICAgICAgICAgICAgICAgdGhpcy50YWdDbGFzcyA9ICgzKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDB4QzA6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRhZ0NsYXNzID0gKDQpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gXCJVbmtub3duIHRhZyBjbGFzc1wiO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzQ29uc3RydWN0ZWQgPSAoaW50QnVmZmVyWzBdICYgMHgyMCkgPT09IDB4MjA7XHJcbiAgICAgICAgdGhpcy5pc0hleE9ubHkgPSBmYWxzZTtcclxuICAgICAgICBjb25zdCB0YWdOdW1iZXJNYXNrID0gaW50QnVmZmVyWzBdICYgMHgxRjtcclxuICAgICAgICBpZiAodGFnTnVtYmVyTWFzayAhPT0gMHgxRikge1xyXG4gICAgICAgICAgICB0aGlzLnRhZ051bWJlciA9ICh0YWdOdW1iZXJNYXNrKTtcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCA9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgY291bnQgPSAxO1xyXG4gICAgICAgICAgICBsZXQgaW50VGFnTnVtYmVyQnVmZmVyID0gdGhpcy52YWx1ZUhleFZpZXcgPSBuZXcgVWludDhBcnJheSgyNTUpO1xyXG4gICAgICAgICAgICBsZXQgdGFnTnVtYmVyQnVmZmVyTWF4TGVuZ3RoID0gMjU1O1xyXG4gICAgICAgICAgICB3aGlsZSAoaW50QnVmZmVyW2NvdW50XSAmIDB4ODApIHtcclxuICAgICAgICAgICAgICAgIGludFRhZ051bWJlckJ1ZmZlcltjb3VudCAtIDFdID0gaW50QnVmZmVyW2NvdW50XSAmIDB4N0Y7XHJcbiAgICAgICAgICAgICAgICBjb3VudCsrO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvdW50ID49IGludEJ1ZmZlci5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gXCJFbmQgb2YgaW5wdXQgcmVhY2hlZCBiZWZvcmUgbWVzc2FnZSB3YXMgZnVsbHkgZGVjb2RlZFwiO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChjb3VudCA9PT0gdGFnTnVtYmVyQnVmZmVyTWF4TGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFnTnVtYmVyQnVmZmVyTWF4TGVuZ3RoICs9IDI1NTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZW1wQnVmZmVyVmlldyA9IG5ldyBVaW50OEFycmF5KHRhZ051bWJlckJ1ZmZlck1heExlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnRUYWdOdW1iZXJCdWZmZXIubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBCdWZmZXJWaWV3W2ldID0gaW50VGFnTnVtYmVyQnVmZmVyW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIGludFRhZ051bWJlckJ1ZmZlciA9IHRoaXMudmFsdWVIZXhWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodGFnTnVtYmVyQnVmZmVyTWF4TGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoID0gKGNvdW50ICsgMSk7XHJcbiAgICAgICAgICAgIGludFRhZ051bWJlckJ1ZmZlcltjb3VudCAtIDFdID0gaW50QnVmZmVyW2NvdW50XSAmIDB4N0Y7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXBCdWZmZXJWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoY291bnQpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspXHJcbiAgICAgICAgICAgICAgICB0ZW1wQnVmZmVyVmlld1tpXSA9IGludFRhZ051bWJlckJ1ZmZlcltpXTtcclxuICAgICAgICAgICAgaW50VGFnTnVtYmVyQnVmZmVyID0gdGhpcy52YWx1ZUhleFZpZXcgPSBuZXcgVWludDhBcnJheShjb3VudCk7XHJcbiAgICAgICAgICAgIGludFRhZ051bWJlckJ1ZmZlci5zZXQodGVtcEJ1ZmZlclZpZXcpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5ibG9ja0xlbmd0aCA8PSA5KVxyXG4gICAgICAgICAgICAgICAgdGhpcy50YWdOdW1iZXIgPSBwdnV0aWxzLnV0aWxGcm9tQmFzZShpbnRUYWdOdW1iZXJCdWZmZXIsIDcpO1xyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNIZXhPbmx5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMud2FybmluZ3MucHVzaChcIlRhZyB0b28gbG9uZywgcmVwcmVzZW50ZWQgYXMgaGV4LWNvZGVkXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgoKHRoaXMudGFnQ2xhc3MgPT09IDEpKSAmJlxyXG4gICAgICAgICAgICAodGhpcy5pc0NvbnN0cnVjdGVkKSkge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMudGFnTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICBjYXNlIDU6XHJcbiAgICAgICAgICAgICAgICBjYXNlIDY6XHJcbiAgICAgICAgICAgICAgICBjYXNlIDk6XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEzOlxyXG4gICAgICAgICAgICAgICAgY2FzZSAxNDpcclxuICAgICAgICAgICAgICAgIGNhc2UgMjM6XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI0OlxyXG4gICAgICAgICAgICAgICAgY2FzZSAzMTpcclxuICAgICAgICAgICAgICAgIGNhc2UgMzI6XHJcbiAgICAgICAgICAgICAgICBjYXNlIDMzOlxyXG4gICAgICAgICAgICAgICAgY2FzZSAzNDpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gXCJDb25zdHJ1Y3RlZCBlbmNvZGluZyB1c2VkIGZvciBwcmltaXRpdmUgdHlwZVwiO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKGlucHV0T2Zmc2V0ICsgdGhpcy5ibG9ja0xlbmd0aCk7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIHRhZ0NsYXNzOiB0aGlzLnRhZ0NsYXNzLFxyXG4gICAgICAgICAgICB0YWdOdW1iZXI6IHRoaXMudGFnTnVtYmVyLFxyXG4gICAgICAgICAgICBpc0NvbnN0cnVjdGVkOiB0aGlzLmlzQ29uc3RydWN0ZWQsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5Mb2NhbElkZW50aWZpY2F0aW9uQmxvY2suTkFNRSA9IFwiaWRlbnRpZmljYXRpb25CbG9ja1wiO1xuXG5jbGFzcyBMb2NhbExlbmd0aEJsb2NrIGV4dGVuZHMgTG9jYWxCYXNlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IoeyBsZW5CbG9jayA9IHt9LCB9ID0ge30pIHtcclxuICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuaXNJbmRlZmluaXRlRm9ybSA9IChfYSA9IGxlbkJsb2NrLmlzSW5kZWZpbml0ZUZvcm0pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubG9uZ0Zvcm1Vc2VkID0gKF9iID0gbGVuQmxvY2subG9uZ0Zvcm1Vc2VkKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBmYWxzZTtcclxuICAgICAgICB0aGlzLmxlbmd0aCA9IChfYyA9IGxlbkJsb2NrLmxlbmd0aCkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogMDtcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IHZpZXcgPSBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShpbnB1dEJ1ZmZlcik7XHJcbiAgICAgICAgaWYgKCFjaGVja0J1ZmZlclBhcmFtcyh0aGlzLCB2aWV3LCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaW50QnVmZmVyID0gdmlldy5zdWJhcnJheShpbnB1dE9mZnNldCwgaW5wdXRPZmZzZXQgKyBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgaWYgKGludEJ1ZmZlci5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiWmVybyBidWZmZXIgbGVuZ3RoXCI7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGludEJ1ZmZlclswXSA9PT0gMHhGRikge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gXCJMZW5ndGggYmxvY2sgMHhGRiBpcyByZXNlcnZlZCBieSBzdGFuZGFyZFwiO1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNJbmRlZmluaXRlRm9ybSA9IGludEJ1ZmZlclswXSA9PT0gMHg4MDtcclxuICAgICAgICBpZiAodGhpcy5pc0luZGVmaW5pdGVGb3JtKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggPSAxO1xyXG4gICAgICAgICAgICByZXR1cm4gKGlucHV0T2Zmc2V0ICsgdGhpcy5ibG9ja0xlbmd0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubG9uZ0Zvcm1Vc2VkID0gISEoaW50QnVmZmVyWzBdICYgMHg4MCk7XHJcbiAgICAgICAgaWYgKHRoaXMubG9uZ0Zvcm1Vc2VkID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICB0aGlzLmxlbmd0aCA9IChpbnRCdWZmZXJbMF0pO1xyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoID0gMTtcclxuICAgICAgICAgICAgcmV0dXJuIChpbnB1dE9mZnNldCArIHRoaXMuYmxvY2tMZW5ndGgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjb3VudCA9IGludEJ1ZmZlclswXSAmIDB4N0Y7XHJcbiAgICAgICAgaWYgKGNvdW50ID4gOCkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gXCJUb28gYmlnIGludGVnZXJcIjtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoKGNvdW50ICsgMSkgPiBpbnRCdWZmZXIubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIkVuZCBvZiBpbnB1dCByZWFjaGVkIGJlZm9yZSBtZXNzYWdlIHdhcyBmdWxseSBkZWNvZGVkXCI7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbGVuT2Zmc2V0ID0gaW5wdXRPZmZzZXQgKyAxO1xyXG4gICAgICAgIGNvbnN0IGxlbmd0aEJ1ZmZlclZpZXcgPSB2aWV3LnN1YmFycmF5KGxlbk9mZnNldCwgbGVuT2Zmc2V0ICsgY291bnQpO1xyXG4gICAgICAgIGlmIChsZW5ndGhCdWZmZXJWaWV3W2NvdW50IC0gMV0gPT09IDB4MDApXHJcbiAgICAgICAgICAgIHRoaXMud2FybmluZ3MucHVzaChcIk5lZWRsZXNzbHkgbG9uZyBlbmNvZGVkIGxlbmd0aFwiKTtcclxuICAgICAgICB0aGlzLmxlbmd0aCA9IHB2dXRpbHMudXRpbEZyb21CYXNlKGxlbmd0aEJ1ZmZlclZpZXcsIDgpO1xyXG4gICAgICAgIGlmICh0aGlzLmxvbmdGb3JtVXNlZCAmJiAodGhpcy5sZW5ndGggPD0gMTI3KSlcclxuICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKFwiVW5uZWNlc3NhcnkgdXNhZ2Ugb2YgbG9uZyBsZW5ndGggZm9ybVwiKTtcclxuICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoID0gY291bnQgKyAxO1xyXG4gICAgICAgIHJldHVybiAoaW5wdXRPZmZzZXQgKyB0aGlzLmJsb2NrTGVuZ3RoKTtcclxuICAgIH1cclxuICAgIHRvQkVSKHNpemVPbmx5ID0gZmFsc2UpIHtcclxuICAgICAgICBsZXQgcmV0QnVmO1xyXG4gICAgICAgIGxldCByZXRWaWV3O1xyXG4gICAgICAgIGlmICh0aGlzLmxlbmd0aCA+IDEyNylcclxuICAgICAgICAgICAgdGhpcy5sb25nRm9ybVVzZWQgPSB0cnVlO1xyXG4gICAgICAgIGlmICh0aGlzLmlzSW5kZWZpbml0ZUZvcm0pIHtcclxuICAgICAgICAgICAgcmV0QnVmID0gbmV3IEFycmF5QnVmZmVyKDEpO1xyXG4gICAgICAgICAgICBpZiAoc2l6ZU9ubHkgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkocmV0QnVmKTtcclxuICAgICAgICAgICAgICAgIHJldFZpZXdbMF0gPSAweDgwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXRCdWY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmxvbmdGb3JtVXNlZCkge1xyXG4gICAgICAgICAgICBjb25zdCBlbmNvZGVkQnVmID0gcHZ1dGlscy51dGlsVG9CYXNlKHRoaXMubGVuZ3RoLCA4KTtcclxuICAgICAgICAgICAgaWYgKGVuY29kZWRCdWYuYnl0ZUxlbmd0aCA+IDEyNykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiVG9vIGJpZyBsZW5ndGhcIjtcclxuICAgICAgICAgICAgICAgIHJldHVybiAoRU1QVFlfQlVGRkVSKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXRCdWYgPSBuZXcgQXJyYXlCdWZmZXIoZW5jb2RlZEJ1Zi5ieXRlTGVuZ3RoICsgMSk7XHJcbiAgICAgICAgICAgIGlmIChzaXplT25seSlcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXRCdWY7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuY29kZWRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoZW5jb2RlZEJ1Zik7XHJcbiAgICAgICAgICAgIHJldFZpZXcgPSBuZXcgVWludDhBcnJheShyZXRCdWYpO1xyXG4gICAgICAgICAgICByZXRWaWV3WzBdID0gZW5jb2RlZEJ1Zi5ieXRlTGVuZ3RoIHwgMHg4MDtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbmNvZGVkQnVmLmJ5dGVMZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgICAgIHJldFZpZXdbaSArIDFdID0gZW5jb2RlZFZpZXdbaV07XHJcbiAgICAgICAgICAgIHJldHVybiByZXRCdWY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldEJ1ZiA9IG5ldyBBcnJheUJ1ZmZlcigxKTtcclxuICAgICAgICBpZiAoc2l6ZU9ubHkgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIHJldFZpZXcgPSBuZXcgVWludDhBcnJheShyZXRCdWYpO1xyXG4gICAgICAgICAgICByZXRWaWV3WzBdID0gdGhpcy5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXRCdWY7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIGlzSW5kZWZpbml0ZUZvcm06IHRoaXMuaXNJbmRlZmluaXRlRm9ybSxcclxuICAgICAgICAgICAgbG9uZ0Zvcm1Vc2VkOiB0aGlzLmxvbmdGb3JtVXNlZCxcclxuICAgICAgICAgICAgbGVuZ3RoOiB0aGlzLmxlbmd0aCxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbkxvY2FsTGVuZ3RoQmxvY2suTkFNRSA9IFwibGVuZ3RoQmxvY2tcIjtcblxuY29uc3QgdHlwZVN0b3JlID0ge307XG5cbmNsYXNzIEJhc2VCbG9jayBleHRlbmRzIExvY2FsQmFzZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgbmFtZSA9IEVNUFRZX1NUUklORywgb3B0aW9uYWwgPSBmYWxzZSwgcHJpbWl0aXZlU2NoZW1hLCAuLi5wYXJhbWV0ZXJzIH0gPSB7fSwgdmFsdWVCbG9ja1R5cGUpIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xyXG4gICAgICAgIHRoaXMub3B0aW9uYWwgPSBvcHRpb25hbDtcclxuICAgICAgICBpZiAocHJpbWl0aXZlU2NoZW1hKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJpbWl0aXZlU2NoZW1hID0gcHJpbWl0aXZlU2NoZW1hO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlkQmxvY2sgPSBuZXcgTG9jYWxJZGVudGlmaWNhdGlvbkJsb2NrKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMubGVuQmxvY2sgPSBuZXcgTG9jYWxMZW5ndGhCbG9jayhwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2sgPSB2YWx1ZUJsb2NrVHlwZSA/IG5ldyB2YWx1ZUJsb2NrVHlwZShwYXJhbWV0ZXJzKSA6IG5ldyBWYWx1ZUJsb2NrKHBhcmFtZXRlcnMpO1xyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0T2Zmc2V0ID0gdGhpcy52YWx1ZUJsb2NrLmZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCAodGhpcy5sZW5CbG9jay5pc0luZGVmaW5pdGVGb3JtKSA/IGlucHV0TGVuZ3RoIDogdGhpcy5sZW5CbG9jay5sZW5ndGgpO1xyXG4gICAgICAgIGlmIChyZXN1bHRPZmZzZXQgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSB0aGlzLnZhbHVlQmxvY2suZXJyb3I7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5pZEJsb2NrLmVycm9yLmxlbmd0aClcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCArPSB0aGlzLmlkQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgaWYgKCF0aGlzLmxlbkJsb2NrLmVycm9yLmxlbmd0aClcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCArPSB0aGlzLmxlbkJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgIGlmICghdGhpcy52YWx1ZUJsb2NrLmVycm9yLmxlbmd0aClcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCArPSB0aGlzLnZhbHVlQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdE9mZnNldDtcclxuICAgIH1cclxuICAgIHRvQkVSKHNpemVPbmx5LCB3cml0ZXIpIHtcclxuICAgICAgICBjb25zdCBfd3JpdGVyID0gd3JpdGVyIHx8IG5ldyBWaWV3V3JpdGVyKCk7XHJcbiAgICAgICAgaWYgKCF3cml0ZXIpIHtcclxuICAgICAgICAgICAgcHJlcGFyZUluZGVmaW5pdGVGb3JtKHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpZEJsb2NrQnVmID0gdGhpcy5pZEJsb2NrLnRvQkVSKHNpemVPbmx5KTtcclxuICAgICAgICBfd3JpdGVyLndyaXRlKGlkQmxvY2tCdWYpO1xyXG4gICAgICAgIGlmICh0aGlzLmxlbkJsb2NrLmlzSW5kZWZpbml0ZUZvcm0pIHtcclxuICAgICAgICAgICAgX3dyaXRlci53cml0ZShuZXcgVWludDhBcnJheShbMHg4MF0pLmJ1ZmZlcik7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVCbG9jay50b0JFUihzaXplT25seSwgX3dyaXRlcik7XHJcbiAgICAgICAgICAgIF93cml0ZXIud3JpdGUobmV3IEFycmF5QnVmZmVyKDIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlQmxvY2tCdWYgPSB0aGlzLnZhbHVlQmxvY2sudG9CRVIoc2l6ZU9ubHkpO1xyXG4gICAgICAgICAgICB0aGlzLmxlbkJsb2NrLmxlbmd0aCA9IHZhbHVlQmxvY2tCdWYuYnl0ZUxlbmd0aDtcclxuICAgICAgICAgICAgY29uc3QgbGVuQmxvY2tCdWYgPSB0aGlzLmxlbkJsb2NrLnRvQkVSKHNpemVPbmx5KTtcclxuICAgICAgICAgICAgX3dyaXRlci53cml0ZShsZW5CbG9ja0J1Zik7XHJcbiAgICAgICAgICAgIF93cml0ZXIud3JpdGUodmFsdWVCbG9ja0J1Zik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghd3JpdGVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBfd3JpdGVyLmZpbmFsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBFTVBUWV9CVUZGRVI7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgY29uc3Qgb2JqZWN0ID0ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgaWRCbG9jazogdGhpcy5pZEJsb2NrLnRvSlNPTigpLFxyXG4gICAgICAgICAgICBsZW5CbG9jazogdGhpcy5sZW5CbG9jay50b0pTT04oKSxcclxuICAgICAgICAgICAgdmFsdWVCbG9jazogdGhpcy52YWx1ZUJsb2NrLnRvSlNPTigpLFxyXG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXHJcbiAgICAgICAgICAgIG9wdGlvbmFsOiB0aGlzLm9wdGlvbmFsLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKHRoaXMucHJpbWl0aXZlU2NoZW1hKVxyXG4gICAgICAgICAgICBvYmplY3QucHJpbWl0aXZlU2NoZW1hID0gdGhpcy5wcmltaXRpdmVTY2hlbWEudG9KU09OKCk7XHJcbiAgICAgICAgcmV0dXJuIG9iamVjdDtcclxuICAgIH1cclxuICAgIHRvU3RyaW5nKGVuY29kaW5nID0gXCJhc2NpaVwiKSB7XHJcbiAgICAgICAgaWYgKGVuY29kaW5nID09PSBcImFzY2lpXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMub25Bc2NpaUVuY29kaW5nKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwdnRzdXRpbHMuQ29udmVydC5Ub0hleCh0aGlzLnRvQkVSKCkpO1xyXG4gICAgfVxyXG4gICAgb25Bc2NpaUVuY29kaW5nKCkge1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNvbnN0cnVjdG9yLk5BTUV9IDogJHtwdnRzdXRpbHMuQ29udmVydC5Ub0hleCh0aGlzLnZhbHVlQmxvY2sudmFsdWVCZWZvcmVEZWNvZGVWaWV3KX1gO1xyXG4gICAgfVxyXG4gICAgaXNFcXVhbChvdGhlcikge1xyXG4gICAgICAgIGlmICh0aGlzID09PSBvdGhlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRoaXNSYXcgPSB0aGlzLnRvQkVSKCk7XHJcbiAgICAgICAgY29uc3Qgb3RoZXJSYXcgPSBvdGhlci50b0JFUigpO1xyXG4gICAgICAgIHJldHVybiBwdnV0aWxzLmlzRXF1YWxCdWZmZXIodGhpc1Jhdywgb3RoZXJSYXcpO1xyXG4gICAgfVxyXG59XHJcbkJhc2VCbG9jay5OQU1FID0gXCJCYXNlQmxvY2tcIjtcclxuZnVuY3Rpb24gcHJlcGFyZUluZGVmaW5pdGVGb3JtKGJhc2VCbG9jaykge1xyXG4gICAgaWYgKGJhc2VCbG9jayBpbnN0YW5jZW9mIHR5cGVTdG9yZS5Db25zdHJ1Y3RlZCkge1xyXG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgYmFzZUJsb2NrLnZhbHVlQmxvY2sudmFsdWUpIHtcclxuICAgICAgICAgICAgaWYgKHByZXBhcmVJbmRlZmluaXRlRm9ybSh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIGJhc2VCbG9jay5sZW5CbG9jay5pc0luZGVmaW5pdGVGb3JtID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiAhIWJhc2VCbG9jay5sZW5CbG9jay5pc0luZGVmaW5pdGVGb3JtO1xyXG59XG5cbmNsYXNzIEJhc2VTdHJpbmdCbG9jayBleHRlbmRzIEJhc2VCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IHZhbHVlID0gRU1QVFlfU1RSSU5HLCAuLi5wYXJhbWV0ZXJzIH0gPSB7fSwgc3RyaW5nVmFsdWVCbG9ja1R5cGUpIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzLCBzdHJpbmdWYWx1ZUJsb2NrVHlwZSk7XHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJvbVN0cmluZyh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZ2V0VmFsdWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVCbG9jay52YWx1ZTtcclxuICAgIH1cclxuICAgIHNldFZhbHVlKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBjb25zdCByZXN1bHRPZmZzZXQgPSB0aGlzLnZhbHVlQmxvY2suZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsICh0aGlzLmxlbkJsb2NrLmlzSW5kZWZpbml0ZUZvcm0pID8gaW5wdXRMZW5ndGggOiB0aGlzLmxlbkJsb2NrLmxlbmd0aCk7XHJcbiAgICAgICAgaWYgKHJlc3VsdE9mZnNldCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvciA9IHRoaXMudmFsdWVCbG9jay5lcnJvcjtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdE9mZnNldDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5mcm9tQnVmZmVyKHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXcpO1xyXG4gICAgICAgIGlmICghdGhpcy5pZEJsb2NrLmVycm9yLmxlbmd0aClcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCArPSB0aGlzLmlkQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgaWYgKCF0aGlzLmxlbkJsb2NrLmVycm9yLmxlbmd0aClcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCArPSB0aGlzLmxlbkJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgIGlmICghdGhpcy52YWx1ZUJsb2NrLmVycm9yLmxlbmd0aClcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCArPSB0aGlzLnZhbHVlQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdE9mZnNldDtcclxuICAgIH1cclxuICAgIG9uQXNjaWlFbmNvZGluZygpIHtcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FfSA6ICcke3RoaXMudmFsdWVCbG9jay52YWx1ZX0nYDtcclxuICAgIH1cclxufVxyXG5CYXNlU3RyaW5nQmxvY2suTkFNRSA9IFwiQmFzZVN0cmluZ0Jsb2NrXCI7XG5cbmNsYXNzIExvY2FsUHJpbWl0aXZlVmFsdWVCbG9jayBleHRlbmRzIEhleEJsb2NrKFZhbHVlQmxvY2spIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgaXNIZXhPbmx5ID0gdHJ1ZSwgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlzSGV4T25seSA9IGlzSGV4T25seTtcclxuICAgIH1cclxufVxyXG5Mb2NhbFByaW1pdGl2ZVZhbHVlQmxvY2suTkFNRSA9IFwiUHJpbWl0aXZlVmFsdWVCbG9ja1wiO1xuXG52YXIgX2EkdztcclxuY2xhc3MgUHJpbWl0aXZlIGV4dGVuZHMgQmFzZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMsIExvY2FsUHJpbWl0aXZlVmFsdWVCbG9jayk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLmlzQ29uc3RydWN0ZWQgPSBmYWxzZTtcclxuICAgIH1cclxufVxyXG5fYSR3ID0gUHJpbWl0aXZlO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLlByaW1pdGl2ZSA9IF9hJHc7XHJcbn0pKCk7XHJcblByaW1pdGl2ZS5OQU1FID0gXCJQUklNSVRJVkVcIjtcblxuZnVuY3Rpb24gbG9jYWxDaGFuZ2VUeXBlKGlucHV0T2JqZWN0LCBuZXdUeXBlKSB7XHJcbiAgICBpZiAoaW5wdXRPYmplY3QgaW5zdGFuY2VvZiBuZXdUeXBlKSB7XHJcbiAgICAgICAgcmV0dXJuIGlucHV0T2JqZWN0O1xyXG4gICAgfVxyXG4gICAgY29uc3QgbmV3T2JqZWN0ID0gbmV3IG5ld1R5cGUoKTtcclxuICAgIG5ld09iamVjdC5pZEJsb2NrID0gaW5wdXRPYmplY3QuaWRCbG9jaztcclxuICAgIG5ld09iamVjdC5sZW5CbG9jayA9IGlucHV0T2JqZWN0LmxlbkJsb2NrO1xyXG4gICAgbmV3T2JqZWN0Lndhcm5pbmdzID0gaW5wdXRPYmplY3Qud2FybmluZ3M7XHJcbiAgICBuZXdPYmplY3QudmFsdWVCZWZvcmVEZWNvZGVWaWV3ID0gaW5wdXRPYmplY3QudmFsdWVCZWZvcmVEZWNvZGVWaWV3O1xyXG4gICAgcmV0dXJuIG5ld09iamVjdDtcclxufVxyXG5mdW5jdGlvbiBsb2NhbEZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0ID0gMCwgaW5wdXRMZW5ndGggPSBpbnB1dEJ1ZmZlci5sZW5ndGgpIHtcclxuICAgIGNvbnN0IGluY29taW5nT2Zmc2V0ID0gaW5wdXRPZmZzZXQ7XHJcbiAgICBsZXQgcmV0dXJuT2JqZWN0ID0gbmV3IEJhc2VCbG9jayh7fSwgVmFsdWVCbG9jayk7XHJcbiAgICBjb25zdCBiYXNlQmxvY2sgPSBuZXcgTG9jYWxCYXNlQmxvY2soKTtcclxuICAgIGlmICghY2hlY2tCdWZmZXJQYXJhbXMoYmFzZUJsb2NrLCBpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSkge1xyXG4gICAgICAgIHJldHVybk9iamVjdC5lcnJvciA9IGJhc2VCbG9jay5lcnJvcjtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBvZmZzZXQ6IC0xLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHJldHVybk9iamVjdFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBjb25zdCBpbnRCdWZmZXIgPSBpbnB1dEJ1ZmZlci5zdWJhcnJheShpbnB1dE9mZnNldCwgaW5wdXRPZmZzZXQgKyBpbnB1dExlbmd0aCk7XHJcbiAgICBpZiAoIWludEJ1ZmZlci5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm5PYmplY3QuZXJyb3IgPSBcIlplcm8gYnVmZmVyIGxlbmd0aFwiO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG9mZnNldDogLTEsXHJcbiAgICAgICAgICAgIHJlc3VsdDogcmV0dXJuT2JqZWN0XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGxldCByZXN1bHRPZmZzZXQgPSByZXR1cm5PYmplY3QuaWRCbG9jay5mcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpO1xyXG4gICAgaWYgKHJldHVybk9iamVjdC5pZEJsb2NrLndhcm5pbmdzLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybk9iamVjdC53YXJuaW5ncy5jb25jYXQocmV0dXJuT2JqZWN0LmlkQmxvY2sud2FybmluZ3MpO1xyXG4gICAgfVxyXG4gICAgaWYgKHJlc3VsdE9mZnNldCA9PT0gLTEpIHtcclxuICAgICAgICByZXR1cm5PYmplY3QuZXJyb3IgPSByZXR1cm5PYmplY3QuaWRCbG9jay5lcnJvcjtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBvZmZzZXQ6IC0xLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHJldHVybk9iamVjdFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpbnB1dE9mZnNldCA9IHJlc3VsdE9mZnNldDtcclxuICAgIGlucHV0TGVuZ3RoIC09IHJldHVybk9iamVjdC5pZEJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgcmVzdWx0T2Zmc2V0ID0gcmV0dXJuT2JqZWN0LmxlbkJsb2NrLmZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCk7XHJcbiAgICBpZiAocmV0dXJuT2JqZWN0LmxlbkJsb2NrLndhcm5pbmdzLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybk9iamVjdC53YXJuaW5ncy5jb25jYXQocmV0dXJuT2JqZWN0LmxlbkJsb2NrLndhcm5pbmdzKTtcclxuICAgIH1cclxuICAgIGlmIChyZXN1bHRPZmZzZXQgPT09IC0xKSB7XHJcbiAgICAgICAgcmV0dXJuT2JqZWN0LmVycm9yID0gcmV0dXJuT2JqZWN0LmxlbkJsb2NrLmVycm9yO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG9mZnNldDogLTEsXHJcbiAgICAgICAgICAgIHJlc3VsdDogcmV0dXJuT2JqZWN0XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlucHV0T2Zmc2V0ID0gcmVzdWx0T2Zmc2V0O1xyXG4gICAgaW5wdXRMZW5ndGggLT0gcmV0dXJuT2JqZWN0LmxlbkJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgaWYgKCFyZXR1cm5PYmplY3QuaWRCbG9jay5pc0NvbnN0cnVjdGVkICYmXHJcbiAgICAgICAgcmV0dXJuT2JqZWN0LmxlbkJsb2NrLmlzSW5kZWZpbml0ZUZvcm0pIHtcclxuICAgICAgICByZXR1cm5PYmplY3QuZXJyb3IgPSBcIkluZGVmaW5pdGUgbGVuZ3RoIGZvcm0gdXNlZCBmb3IgcHJpbWl0aXZlIGVuY29kaW5nIGZvcm1cIjtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBvZmZzZXQ6IC0xLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHJldHVybk9iamVjdFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBsZXQgbmV3QVNOMVR5cGUgPSBCYXNlQmxvY2s7XHJcbiAgICBzd2l0Y2ggKHJldHVybk9iamVjdC5pZEJsb2NrLnRhZ0NsYXNzKSB7XHJcbiAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICBpZiAoKHJldHVybk9iamVjdC5pZEJsb2NrLnRhZ051bWJlciA+PSAzNykgJiZcclxuICAgICAgICAgICAgICAgIChyZXR1cm5PYmplY3QuaWRCbG9jay5pc0hleE9ubHkgPT09IGZhbHNlKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuT2JqZWN0LmVycm9yID0gXCJVTklWRVJTQUwgMzcgYW5kIHVwcGVyIHRhZ3MgYXJlIHJlc2VydmVkIGJ5IEFTTi4xIHN0YW5kYXJkXCI7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldDogLTEsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0OiByZXR1cm5PYmplY3RcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc3dpdGNoIChyZXR1cm5PYmplY3QuaWRCbG9jay50YWdOdW1iZXIpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoKHJldHVybk9iamVjdC5pZEJsb2NrLmlzQ29uc3RydWN0ZWQpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChyZXR1cm5PYmplY3QubGVuQmxvY2subGVuZ3RoID4gMCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuT2JqZWN0LmVycm9yID0gXCJUeXBlIFtVTklWRVJTQUwgMF0gaXMgcmVzZXJ2ZWRcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogLTEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IHJldHVybk9iamVjdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5FbmRPZkNvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuQm9vbGVhbjtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5JbnRlZ2VyO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLkJpdFN0cmluZztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5PY3RldFN0cmluZztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNTpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5OdWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA2OlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLk9iamVjdElkZW50aWZpZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEwOlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLkVudW1lcmF0ZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEyOlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLlV0ZjhTdHJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDEzOlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLlJlbGF0aXZlT2JqZWN0SWRlbnRpZmllcjtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTQ6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuVElNRTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTU6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuT2JqZWN0LmVycm9yID0gXCJbVU5JVkVSU0FMIDE1XSBpcyByZXNlcnZlZCBieSBBU04uMSBzdGFuZGFyZFwiO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogLTEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdDogcmV0dXJuT2JqZWN0XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgMTY6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuU2VxdWVuY2U7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE3OlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLlNldDtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTg6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuTnVtZXJpY1N0cmluZztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMTk6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuUHJpbnRhYmxlU3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyMDpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5UZWxldGV4U3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyMTpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5WaWRlb3RleFN0cmluZztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjI6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuSUE1U3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyMzpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5VVENUaW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyNDpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5HZW5lcmFsaXplZFRpbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI1OlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLkdyYXBoaWNTdHJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI2OlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLlZpc2libGVTdHJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI3OlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLkdlbmVyYWxTdHJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI4OlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLlVuaXZlcnNhbFN0cmluZztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjk6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuQ2hhcmFjdGVyU3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzMDpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5CbXBTdHJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDMxOlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLkRBVEU7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDMyOlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLlRpbWVPZkRheTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMzM6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuRGF0ZVRpbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM0OlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLkR1cmF0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld09iamVjdCA9IHJldHVybk9iamVjdC5pZEJsb2NrLmlzQ29uc3RydWN0ZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBuZXcgdHlwZVN0b3JlLkNvbnN0cnVjdGVkKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBuZXcgdHlwZVN0b3JlLlByaW1pdGl2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld09iamVjdC5pZEJsb2NrID0gcmV0dXJuT2JqZWN0LmlkQmxvY2s7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3T2JqZWN0LmxlbkJsb2NrID0gcmV0dXJuT2JqZWN0LmxlbkJsb2NrO1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld09iamVjdC53YXJuaW5ncyA9IHJldHVybk9iamVjdC53YXJuaW5ncztcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5PYmplY3QgPSBuZXdPYmplY3Q7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgIGNhc2UgMzpcclxuICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgICAgICBuZXdBU04xVHlwZSA9IHJldHVybk9iamVjdC5pZEJsb2NrLmlzQ29uc3RydWN0ZWRcclxuICAgICAgICAgICAgICAgID8gdHlwZVN0b3JlLkNvbnN0cnVjdGVkXHJcbiAgICAgICAgICAgICAgICA6IHR5cGVTdG9yZS5QcmltaXRpdmU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuT2JqZWN0ID0gbG9jYWxDaGFuZ2VUeXBlKHJldHVybk9iamVjdCwgbmV3QVNOMVR5cGUpO1xyXG4gICAgcmVzdWx0T2Zmc2V0ID0gcmV0dXJuT2JqZWN0LmZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCByZXR1cm5PYmplY3QubGVuQmxvY2suaXNJbmRlZmluaXRlRm9ybSA/IGlucHV0TGVuZ3RoIDogcmV0dXJuT2JqZWN0LmxlbkJsb2NrLmxlbmd0aCk7XHJcbiAgICByZXR1cm5PYmplY3QudmFsdWVCZWZvcmVEZWNvZGVWaWV3ID0gaW5wdXRCdWZmZXIuc3ViYXJyYXkoaW5jb21pbmdPZmZzZXQsIGluY29taW5nT2Zmc2V0ICsgcmV0dXJuT2JqZWN0LmJsb2NrTGVuZ3RoKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgb2Zmc2V0OiByZXN1bHRPZmZzZXQsXHJcbiAgICAgICAgcmVzdWx0OiByZXR1cm5PYmplY3RcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gZnJvbUJFUihpbnB1dEJ1ZmZlcikge1xyXG4gICAgaWYgKCFpbnB1dEJ1ZmZlci5ieXRlTGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IEJhc2VCbG9jayh7fSwgVmFsdWVCbG9jayk7XHJcbiAgICAgICAgcmVzdWx0LmVycm9yID0gXCJJbnB1dCBidWZmZXIgaGFzIHplcm8gbGVuZ3RoXCI7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgb2Zmc2V0OiAtMSxcclxuICAgICAgICAgICAgcmVzdWx0XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIHJldHVybiBsb2NhbEZyb21CRVIocHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoaW5wdXRCdWZmZXIpLnNsaWNlKCksIDAsIGlucHV0QnVmZmVyLmJ5dGVMZW5ndGgpO1xyXG59XG5cbmZ1bmN0aW9uIGNoZWNrTGVuKGluZGVmaW5pdGVMZW5ndGgsIGxlbmd0aCkge1xyXG4gICAgaWYgKGluZGVmaW5pdGVMZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgIH1cclxuICAgIHJldHVybiBsZW5ndGg7XHJcbn1cclxuY2xhc3MgTG9jYWxDb25zdHJ1Y3RlZFZhbHVlQmxvY2sgZXh0ZW5kcyBWYWx1ZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgdmFsdWUgPSBbXSwgaXNJbmRlZmluaXRlRm9ybSA9IGZhbHNlLCAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLmlzSW5kZWZpbml0ZUZvcm0gPSBpc0luZGVmaW5pdGVGb3JtO1xyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgdmlldyA9IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGlucHV0QnVmZmVyKTtcclxuICAgICAgICBpZiAoIWNoZWNrQnVmZmVyUGFyYW1zKHRoaXMsIHZpZXcsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnZhbHVlQmVmb3JlRGVjb2RlVmlldyA9IHZpZXcuc3ViYXJyYXkoaW5wdXRPZmZzZXQsIGlucHV0T2Zmc2V0ICsgaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgIGlmICh0aGlzLnZhbHVlQmVmb3JlRGVjb2RlVmlldy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKFwiWmVybyBidWZmZXIgbGVuZ3RoXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gaW5wdXRPZmZzZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBjdXJyZW50T2Zmc2V0ID0gaW5wdXRPZmZzZXQ7XHJcbiAgICAgICAgd2hpbGUgKGNoZWNrTGVuKHRoaXMuaXNJbmRlZmluaXRlRm9ybSwgaW5wdXRMZW5ndGgpID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCByZXR1cm5PYmplY3QgPSBsb2NhbEZyb21CRVIodmlldywgY3VycmVudE9mZnNldCwgaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgICAgICBpZiAocmV0dXJuT2JqZWN0Lm9mZnNldCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSByZXR1cm5PYmplY3QucmVzdWx0LmVycm9yO1xyXG4gICAgICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5jb25jYXQocmV0dXJuT2JqZWN0LnJlc3VsdC53YXJuaW5ncyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY3VycmVudE9mZnNldCA9IHJldHVybk9iamVjdC5vZmZzZXQ7XHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gcmV0dXJuT2JqZWN0LnJlc3VsdC5ibG9ja0xlbmd0aDtcclxuICAgICAgICAgICAgaW5wdXRMZW5ndGggLT0gcmV0dXJuT2JqZWN0LnJlc3VsdC5ibG9ja0xlbmd0aDtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZS5wdXNoKHJldHVybk9iamVjdC5yZXN1bHQpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0luZGVmaW5pdGVGb3JtICYmIHJldHVybk9iamVjdC5yZXN1bHQuY29uc3RydWN0b3IuTkFNRSA9PT0gRU5EX09GX0NPTlRFTlRfTkFNRSkge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuaXNJbmRlZmluaXRlRm9ybSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZVt0aGlzLnZhbHVlLmxlbmd0aCAtIDFdLmNvbnN0cnVjdG9yLk5BTUUgPT09IEVORF9PRl9DT05URU5UX05BTUUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUucG9wKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1c2goXCJObyBFbmRPZkNvbnRlbnQgYmxvY2sgZW5jb2RlZFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY3VycmVudE9mZnNldDtcclxuICAgIH1cclxuICAgIHRvQkVSKHNpemVPbmx5LCB3cml0ZXIpIHtcclxuICAgICAgICBjb25zdCBfd3JpdGVyID0gd3JpdGVyIHx8IG5ldyBWaWV3V3JpdGVyKCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVbaV0udG9CRVIoc2l6ZU9ubHksIF93cml0ZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXdyaXRlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gX3dyaXRlci5maW5hbCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gRU1QVFlfQlVGRkVSO1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIGNvbnN0IG9iamVjdCA9IHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIGlzSW5kZWZpbml0ZUZvcm06IHRoaXMuaXNJbmRlZmluaXRlRm9ybSxcclxuICAgICAgICAgICAgdmFsdWU6IFtdLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB0aGlzLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIG9iamVjdC52YWx1ZS5wdXNoKHZhbHVlLnRvSlNPTigpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9iamVjdDtcclxuICAgIH1cclxufVxyXG5Mb2NhbENvbnN0cnVjdGVkVmFsdWVCbG9jay5OQU1FID0gXCJDb25zdHJ1Y3RlZFZhbHVlQmxvY2tcIjtcblxudmFyIF9hJHY7XHJcbmNsYXNzIENvbnN0cnVjdGVkIGV4dGVuZHMgQmFzZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMsIExvY2FsQ29uc3RydWN0ZWRWYWx1ZUJsb2NrKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2suaXNDb25zdHJ1Y3RlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2suaXNJbmRlZmluaXRlRm9ybSA9IHRoaXMubGVuQmxvY2suaXNJbmRlZmluaXRlRm9ybTtcclxuICAgICAgICBjb25zdCByZXN1bHRPZmZzZXQgPSB0aGlzLnZhbHVlQmxvY2suZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsICh0aGlzLmxlbkJsb2NrLmlzSW5kZWZpbml0ZUZvcm0pID8gaW5wdXRMZW5ndGggOiB0aGlzLmxlbkJsb2NrLmxlbmd0aCk7XHJcbiAgICAgICAgaWYgKHJlc3VsdE9mZnNldCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvciA9IHRoaXMudmFsdWVCbG9jay5lcnJvcjtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdE9mZnNldDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLmlkQmxvY2suZXJyb3IubGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoICs9IHRoaXMuaWRCbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICBpZiAoIXRoaXMubGVuQmxvY2suZXJyb3IubGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoICs9IHRoaXMubGVuQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgaWYgKCF0aGlzLnZhbHVlQmxvY2suZXJyb3IubGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoICs9IHRoaXMudmFsdWVCbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgfVxyXG4gICAgb25Bc2NpaUVuY29kaW5nKCkge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IFtdO1xyXG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdGhpcy52YWx1ZUJsb2NrLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIHZhbHVlcy5wdXNoKHZhbHVlLnRvU3RyaW5nKFwiYXNjaWlcIikuc3BsaXQoXCJcXG5cIikubWFwKG8gPT4gYCAgJHtvfWApLmpvaW4oXCJcXG5cIikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBibG9ja05hbWUgPSB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPT09IDNcclxuICAgICAgICAgICAgPyBgWyR7dGhpcy5pZEJsb2NrLnRhZ051bWJlcn1dYFxyXG4gICAgICAgICAgICA6IHRoaXMuY29uc3RydWN0b3IuTkFNRTtcclxuICAgICAgICByZXR1cm4gdmFsdWVzLmxlbmd0aFxyXG4gICAgICAgICAgICA/IGAke2Jsb2NrTmFtZX0gOlxcbiR7dmFsdWVzLmpvaW4oXCJcXG5cIil9YFxyXG4gICAgICAgICAgICA6IGAke2Jsb2NrTmFtZX0gOmA7XHJcbiAgICB9XHJcbn1cclxuX2EkdiA9IENvbnN0cnVjdGVkO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLkNvbnN0cnVjdGVkID0gX2EkdjtcclxufSkoKTtcclxuQ29uc3RydWN0ZWQuTkFNRSA9IFwiQ09OU1RSVUNURURcIjtcblxuY2xhc3MgTG9jYWxFbmRPZkNvbnRlbnRWYWx1ZUJsb2NrIGV4dGVuZHMgVmFsdWVCbG9jayB7XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gaW5wdXRPZmZzZXQ7XHJcbiAgICB9XHJcbiAgICB0b0JFUihzaXplT25seSkge1xyXG4gICAgICAgIHJldHVybiBFTVBUWV9CVUZGRVI7XHJcbiAgICB9XHJcbn1cclxuTG9jYWxFbmRPZkNvbnRlbnRWYWx1ZUJsb2NrLm92ZXJyaWRlID0gXCJFbmRPZkNvbnRlbnRWYWx1ZUJsb2NrXCI7XG5cbnZhciBfYSR1O1xyXG5jbGFzcyBFbmRPZkNvbnRlbnQgZXh0ZW5kcyBCYXNlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycywgTG9jYWxFbmRPZkNvbnRlbnRWYWx1ZUJsb2NrKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAwO1xyXG4gICAgfVxyXG59XHJcbl9hJHUgPSBFbmRPZkNvbnRlbnQ7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuRW5kT2ZDb250ZW50ID0gX2EkdTtcclxufSkoKTtcclxuRW5kT2ZDb250ZW50Lk5BTUUgPSBFTkRfT0ZfQ09OVEVOVF9OQU1FO1xuXG52YXIgX2EkdDtcclxuY2xhc3MgTnVsbCBleHRlbmRzIEJhc2VCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzLCBWYWx1ZUJsb2NrKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSA1O1xyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubGVuQmxvY2subGVuZ3RoID4gMClcclxuICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKFwiTm9uLXplcm8gbGVuZ3RoIG9mIHZhbHVlIGJsb2NrIGZvciBOdWxsIHR5cGVcIik7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlkQmxvY2suZXJyb3IubGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoICs9IHRoaXMuaWRCbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICBpZiAoIXRoaXMubGVuQmxvY2suZXJyb3IubGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoICs9IHRoaXMubGVuQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCArPSBpbnB1dExlbmd0aDtcclxuICAgICAgICBpZiAoKGlucHV0T2Zmc2V0ICsgaW5wdXRMZW5ndGgpID4gaW5wdXRCdWZmZXIuYnl0ZUxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gXCJFbmQgb2YgaW5wdXQgcmVhY2hlZCBiZWZvcmUgbWVzc2FnZSB3YXMgZnVsbHkgZGVjb2RlZCAoaW5jb25zaXN0ZW50IG9mZnNldCBhbmQgbGVuZ3RoIHZhbHVlcylcIjtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKGlucHV0T2Zmc2V0ICsgaW5wdXRMZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgdG9CRVIoc2l6ZU9ubHksIHdyaXRlcikge1xyXG4gICAgICAgIGNvbnN0IHJldEJ1ZiA9IG5ldyBBcnJheUJ1ZmZlcigyKTtcclxuICAgICAgICBpZiAoIXNpemVPbmx5KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJldFZpZXcgPSBuZXcgVWludDhBcnJheShyZXRCdWYpO1xyXG4gICAgICAgICAgICByZXRWaWV3WzBdID0gMHgwNTtcclxuICAgICAgICAgICAgcmV0Vmlld1sxXSA9IDB4MDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh3cml0ZXIpIHtcclxuICAgICAgICAgICAgd3JpdGVyLndyaXRlKHJldEJ1Zik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXRCdWY7XHJcbiAgICB9XHJcbiAgICBvbkFzY2lpRW5jb2RpbmcoKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY29uc3RydWN0b3IuTkFNRX1gO1xyXG4gICAgfVxyXG59XHJcbl9hJHQgPSBOdWxsO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLk51bGwgPSBfYSR0O1xyXG59KSgpO1xyXG5OdWxsLk5BTUUgPSBcIk5VTExcIjtcblxuY2xhc3MgTG9jYWxCb29sZWFuVmFsdWVCbG9jayBleHRlbmRzIEhleEJsb2NrKFZhbHVlQmxvY2spIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgdmFsdWUsIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgaWYgKHBhcmFtZXRlcnMudmFsdWVIZXgpIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShwYXJhbWV0ZXJzLnZhbHVlSGV4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZ2V0IHZhbHVlKCkge1xyXG4gICAgICAgIGZvciAoY29uc3Qgb2N0ZXQgb2YgdGhpcy52YWx1ZUhleFZpZXcpIHtcclxuICAgICAgICAgICAgaWYgKG9jdGV0ID4gMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgc2V0IHZhbHVlKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZUhleFZpZXdbMF0gPSB2YWx1ZSA/IDB4RkYgOiAweDAwO1xyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgaW5wdXRWaWV3ID0gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoaW5wdXRCdWZmZXIpO1xyXG4gICAgICAgIGlmICghY2hlY2tCdWZmZXJQYXJhbXModGhpcywgaW5wdXRWaWV3LCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSBpbnB1dFZpZXcuc3ViYXJyYXkoaW5wdXRPZmZzZXQsIGlucHV0T2Zmc2V0ICsgaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgIGlmIChpbnB1dExlbmd0aCA+IDEpXHJcbiAgICAgICAgICAgIHRoaXMud2FybmluZ3MucHVzaChcIkJvb2xlYW4gdmFsdWUgZW5jb2RlZCBpbiBtb3JlIHRoZW4gMSBvY3RldFwiKTtcclxuICAgICAgICB0aGlzLmlzSGV4T25seSA9IHRydWU7XHJcbiAgICAgICAgcHZ1dGlscy51dGlsRGVjb2RlVEMuY2FsbCh0aGlzKTtcclxuICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoID0gaW5wdXRMZW5ndGg7XHJcbiAgICAgICAgcmV0dXJuIChpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoKTtcclxuICAgIH1cclxuICAgIHRvQkVSKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlSGV4Vmlldy5zbGljZSgpO1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbkxvY2FsQm9vbGVhblZhbHVlQmxvY2suTkFNRSA9IFwiQm9vbGVhblZhbHVlQmxvY2tcIjtcblxudmFyIF9hJHM7XHJcbmNsYXNzIEJvb2xlYW4gZXh0ZW5kcyBCYXNlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycywgTG9jYWxCb29sZWFuVmFsdWVCbG9jayk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMTtcclxuICAgIH1cclxuICAgIGdldFZhbHVlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlQmxvY2sudmFsdWU7XHJcbiAgICB9XHJcbiAgICBzZXRWYWx1ZSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgb25Bc2NpaUVuY29kaW5nKCkge1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNvbnN0cnVjdG9yLk5BTUV9IDogJHt0aGlzLmdldFZhbHVlfWA7XHJcbiAgICB9XHJcbn1cclxuX2EkcyA9IEJvb2xlYW47XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuQm9vbGVhbiA9IF9hJHM7XHJcbn0pKCk7XHJcbkJvb2xlYW4uTkFNRSA9IFwiQk9PTEVBTlwiO1xuXG5jbGFzcyBMb2NhbE9jdGV0U3RyaW5nVmFsdWVCbG9jayBleHRlbmRzIEhleEJsb2NrKExvY2FsQ29uc3RydWN0ZWRWYWx1ZUJsb2NrKSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IGlzQ29uc3RydWN0ZWQgPSBmYWxzZSwgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlzQ29uc3RydWN0ZWQgPSBpc0NvbnN0cnVjdGVkO1xyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdE9mZnNldCA9IDA7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNDb25zdHJ1Y3RlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmlzSGV4T25seSA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXN1bHRPZmZzZXQgPSBMb2NhbENvbnN0cnVjdGVkVmFsdWVCbG9jay5wcm90b3R5cGUuZnJvbUJFUi5jYWxsKHRoaXMsIGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0T2Zmc2V0ID09PSAtMSlcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy52YWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudEJsb2NrTmFtZSA9IHRoaXMudmFsdWVbaV0uY29uc3RydWN0b3IuTkFNRTtcclxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50QmxvY2tOYW1lID09PSBFTkRfT0ZfQ09OVEVOVF9OQU1FKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNJbmRlZmluaXRlRm9ybSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIkVuZE9mQ29udGVudCBpcyB1bmV4cGVjdGVkLCBPQ1RFVCBTVFJJTkcgbWF5IGNvbnNpc3RzIG9mIE9DVEVUIFNUUklOR3Mgb25seVwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRCbG9ja05hbWUgIT09IE9DVEVUX1NUUklOR19OQU1FKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiT0NURVQgU1RSSU5HIG1heSBjb25zaXN0cyBvZiBPQ1RFVCBTVFJJTkdzIG9ubHlcIjtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNIZXhPbmx5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmVzdWx0T2Zmc2V0ID0gc3VwZXIuZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCA9IGlucHV0TGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgfVxyXG4gICAgdG9CRVIoc2l6ZU9ubHksIHdyaXRlcikge1xyXG4gICAgICAgIGlmICh0aGlzLmlzQ29uc3RydWN0ZWQpXHJcbiAgICAgICAgICAgIHJldHVybiBMb2NhbENvbnN0cnVjdGVkVmFsdWVCbG9jay5wcm90b3R5cGUudG9CRVIuY2FsbCh0aGlzLCBzaXplT25seSwgd3JpdGVyKTtcclxuICAgICAgICByZXR1cm4gc2l6ZU9ubHlcclxuICAgICAgICAgICAgPyBuZXcgQXJyYXlCdWZmZXIodGhpcy52YWx1ZUhleFZpZXcuYnl0ZUxlbmd0aClcclxuICAgICAgICAgICAgOiB0aGlzLnZhbHVlSGV4Vmlldy5zbGljZSgpLmJ1ZmZlcjtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgaXNDb25zdHJ1Y3RlZDogdGhpcy5pc0NvbnN0cnVjdGVkLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuTG9jYWxPY3RldFN0cmluZ1ZhbHVlQmxvY2suTkFNRSA9IFwiT2N0ZXRTdHJpbmdWYWx1ZUJsb2NrXCI7XG5cbnZhciBfYSRyO1xyXG5jbGFzcyBPY3RldFN0cmluZyBleHRlbmRzIEJhc2VCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IGlkQmxvY2sgPSB7fSwgbGVuQmxvY2sgPSB7fSwgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICB2YXIgX2IsIF9jO1xyXG4gICAgICAgIChfYiA9IHBhcmFtZXRlcnMuaXNDb25zdHJ1Y3RlZCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogKHBhcmFtZXRlcnMuaXNDb25zdHJ1Y3RlZCA9ICEhKChfYyA9IHBhcmFtZXRlcnMudmFsdWUpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5sZW5ndGgpKTtcclxuICAgICAgICBzdXBlcih7XHJcbiAgICAgICAgICAgIGlkQmxvY2s6IHtcclxuICAgICAgICAgICAgICAgIGlzQ29uc3RydWN0ZWQ6IHBhcmFtZXRlcnMuaXNDb25zdHJ1Y3RlZCxcclxuICAgICAgICAgICAgICAgIC4uLmlkQmxvY2ssXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGxlbkJsb2NrOiB7XHJcbiAgICAgICAgICAgICAgICAuLi5sZW5CbG9jayxcclxuICAgICAgICAgICAgICAgIGlzSW5kZWZpbml0ZUZvcm06ICEhcGFyYW1ldGVycy5pc0luZGVmaW5pdGVGb3JtLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAuLi5wYXJhbWV0ZXJzLFxyXG4gICAgICAgIH0sIExvY2FsT2N0ZXRTdHJpbmdWYWx1ZUJsb2NrKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSA0O1xyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLmlzQ29uc3RydWN0ZWQgPSB0aGlzLmlkQmxvY2suaXNDb25zdHJ1Y3RlZDtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2suaXNJbmRlZmluaXRlRm9ybSA9IHRoaXMubGVuQmxvY2suaXNJbmRlZmluaXRlRm9ybTtcclxuICAgICAgICBpZiAoaW5wdXRMZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaWRCbG9jay5lcnJvci5sZW5ndGggPT09IDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoICs9IHRoaXMuaWRCbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICAgICAgaWYgKHRoaXMubGVuQmxvY2suZXJyb3IubGVuZ3RoID09PSAwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCArPSB0aGlzLmxlbkJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgICAgICByZXR1cm4gaW5wdXRPZmZzZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy52YWx1ZUJsb2NrLmlzQ29uc3RydWN0ZWQpIHtcclxuICAgICAgICAgICAgY29uc3QgdmlldyA9IGlucHV0QnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgPyBuZXcgVWludDhBcnJheShpbnB1dEJ1ZmZlcikgOiBpbnB1dEJ1ZmZlcjtcclxuICAgICAgICAgICAgY29uc3QgYnVmID0gdmlldy5zdWJhcnJheShpbnB1dE9mZnNldCwgaW5wdXRPZmZzZXQgKyBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYnVmLmJ5dGVMZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhc24gPSBsb2NhbEZyb21CRVIoYnVmLCAwLCBidWYuYnl0ZUxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFzbi5vZmZzZXQgIT09IC0xICYmIGFzbi5vZmZzZXQgPT09IGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZSA9IFthc24ucmVzdWx0XTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3VwZXIuZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKTtcclxuICAgIH1cclxuICAgIG9uQXNjaWlFbmNvZGluZygpIHtcclxuICAgICAgICBpZiAodGhpcy52YWx1ZUJsb2NrLmlzQ29uc3RydWN0ZWQgfHwgKHRoaXMudmFsdWVCbG9jay52YWx1ZSAmJiB0aGlzLnZhbHVlQmxvY2sudmFsdWUubGVuZ3RoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gQ29uc3RydWN0ZWQucHJvdG90eXBlLm9uQXNjaWlFbmNvZGluZy5jYWxsKHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FfSA6ICR7cHZ0c3V0aWxzLkNvbnZlcnQuVG9IZXgodGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4Vmlldyl9YDtcclxuICAgIH1cclxuICAgIGdldFZhbHVlKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5pZEJsb2NrLmlzQ29uc3RydWN0ZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXcuc2xpY2UoKS5idWZmZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGFycmF5ID0gW107XHJcbiAgICAgICAgZm9yIChjb25zdCBjb250ZW50IG9mIHRoaXMudmFsdWVCbG9jay52YWx1ZSkge1xyXG4gICAgICAgICAgICBpZiAoY29udGVudCBpbnN0YW5jZW9mIE9jdGV0U3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICBhcnJheS5wdXNoKGNvbnRlbnQudmFsdWVCbG9jay52YWx1ZUhleFZpZXcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLmNvbmNhdChhcnJheSk7XHJcbiAgICB9XHJcbn1cclxuX2EkciA9IE9jdGV0U3RyaW5nO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLk9jdGV0U3RyaW5nID0gX2EkcjtcclxufSkoKTtcclxuT2N0ZXRTdHJpbmcuTkFNRSA9IE9DVEVUX1NUUklOR19OQU1FO1xuXG5jbGFzcyBMb2NhbEJpdFN0cmluZ1ZhbHVlQmxvY2sgZXh0ZW5kcyBIZXhCbG9jayhMb2NhbENvbnN0cnVjdGVkVmFsdWVCbG9jaykge1xyXG4gICAgY29uc3RydWN0b3IoeyB1bnVzZWRCaXRzID0gMCwgaXNDb25zdHJ1Y3RlZCA9IGZhbHNlLCAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMudW51c2VkQml0cyA9IHVudXNlZEJpdHM7XHJcbiAgICAgICAgdGhpcy5pc0NvbnN0cnVjdGVkID0gaXNDb25zdHJ1Y3RlZDtcclxuICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoID0gdGhpcy52YWx1ZUhleFZpZXcuYnl0ZUxlbmd0aDtcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIGlmICghaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGlucHV0T2Zmc2V0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgcmVzdWx0T2Zmc2V0ID0gLTE7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNDb25zdHJ1Y3RlZCkge1xyXG4gICAgICAgICAgICByZXN1bHRPZmZzZXQgPSBMb2NhbENvbnN0cnVjdGVkVmFsdWVCbG9jay5wcm90b3R5cGUuZnJvbUJFUi5jYWxsKHRoaXMsIGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0T2Zmc2V0ID09PSAtMSlcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdGhpcy52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudEJsb2NrTmFtZSA9IHZhbHVlLmNvbnN0cnVjdG9yLk5BTUU7XHJcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudEJsb2NrTmFtZSA9PT0gRU5EX09GX0NPTlRFTlRfTkFNRSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzSW5kZWZpbml0ZUZvcm0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gXCJFbmRPZkNvbnRlbnQgaXMgdW5leHBlY3RlZCwgQklUIFNUUklORyBtYXkgY29uc2lzdHMgb2YgQklUIFNUUklOR3Mgb25seVwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRCbG9ja05hbWUgIT09IEJJVF9TVFJJTkdfTkFNRSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIkJJVCBTVFJJTkcgbWF5IGNvbnNpc3RzIG9mIEJJVCBTVFJJTkdzIG9ubHlcIjtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZUJsb2NrID0gdmFsdWUudmFsdWVCbG9jaztcclxuICAgICAgICAgICAgICAgIGlmICgodGhpcy51bnVzZWRCaXRzID4gMCkgJiYgKHZhbHVlQmxvY2sudW51c2VkQml0cyA+IDApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiVXNpbmcgb2YgXFxcInVudXNlZCBiaXRzXFxcIiBpbnNpZGUgY29uc3RydWN0aXZlIEJJVCBTVFJJTkcgYWxsb3dlZCBmb3IgbGVhc3Qgb25lIG9ubHlcIjtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVudXNlZEJpdHMgPSB2YWx1ZUJsb2NrLnVudXNlZEJpdHM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdE9mZnNldDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaW5wdXRWaWV3ID0gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoaW5wdXRCdWZmZXIpO1xyXG4gICAgICAgIGlmICghY2hlY2tCdWZmZXJQYXJhbXModGhpcywgaW5wdXRWaWV3LCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaW50QnVmZmVyID0gaW5wdXRWaWV3LnN1YmFycmF5KGlucHV0T2Zmc2V0LCBpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICB0aGlzLnVudXNlZEJpdHMgPSBpbnRCdWZmZXJbMF07XHJcbiAgICAgICAgaWYgKHRoaXMudW51c2VkQml0cyA+IDcpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiVW51c2VkIGJpdHMgZm9yIEJpdFN0cmluZyBtdXN0IGJlIGluIHJhbmdlIDAtN1wiO1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy51bnVzZWRCaXRzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJ1ZiA9IGludEJ1ZmZlci5zdWJhcnJheSgxKTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChidWYuYnl0ZUxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFzbiA9IGxvY2FsRnJvbUJFUihidWYsIDAsIGJ1Zi5ieXRlTGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYXNuLm9mZnNldCAhPT0gLTEgJiYgYXNuLm9mZnNldCA9PT0gKGlucHV0TGVuZ3RoIC0gMSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFthc24ucmVzdWx0XTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IGludEJ1ZmZlci5zdWJhcnJheSgxKTtcclxuICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoID0gaW50QnVmZmVyLmxlbmd0aDtcclxuICAgICAgICByZXR1cm4gKGlucHV0T2Zmc2V0ICsgaW5wdXRMZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgdG9CRVIoc2l6ZU9ubHksIHdyaXRlcikge1xyXG4gICAgICAgIGlmICh0aGlzLmlzQ29uc3RydWN0ZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIExvY2FsQ29uc3RydWN0ZWRWYWx1ZUJsb2NrLnByb3RvdHlwZS50b0JFUi5jYWxsKHRoaXMsIHNpemVPbmx5LCB3cml0ZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2l6ZU9ubHkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBBcnJheUJ1ZmZlcih0aGlzLnZhbHVlSGV4Vmlldy5ieXRlTGVuZ3RoICsgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy52YWx1ZUhleFZpZXcuYnl0ZUxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gRU1QVFlfQlVGRkVSO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy52YWx1ZUhleFZpZXcubGVuZ3RoICsgMSk7XHJcbiAgICAgICAgcmV0Vmlld1swXSA9IHRoaXMudW51c2VkQml0cztcclxuICAgICAgICByZXRWaWV3LnNldCh0aGlzLnZhbHVlSGV4VmlldywgMSk7XHJcbiAgICAgICAgcmV0dXJuIHJldFZpZXcuYnVmZmVyO1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICB1bnVzZWRCaXRzOiB0aGlzLnVudXNlZEJpdHMsXHJcbiAgICAgICAgICAgIGlzQ29uc3RydWN0ZWQ6IHRoaXMuaXNDb25zdHJ1Y3RlZCxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbkxvY2FsQml0U3RyaW5nVmFsdWVCbG9jay5OQU1FID0gXCJCaXRTdHJpbmdWYWx1ZUJsb2NrXCI7XG5cbnZhciBfYSRxO1xyXG5jbGFzcyBCaXRTdHJpbmcgZXh0ZW5kcyBCYXNlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IoeyBpZEJsb2NrID0ge30sIGxlbkJsb2NrID0ge30sIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgdmFyIF9iLCBfYztcclxuICAgICAgICAoX2IgPSBwYXJhbWV0ZXJzLmlzQ29uc3RydWN0ZWQpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IChwYXJhbWV0ZXJzLmlzQ29uc3RydWN0ZWQgPSAhISgoX2MgPSBwYXJhbWV0ZXJzLnZhbHVlKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSk7XHJcbiAgICAgICAgc3VwZXIoe1xyXG4gICAgICAgICAgICBpZEJsb2NrOiB7XHJcbiAgICAgICAgICAgICAgICBpc0NvbnN0cnVjdGVkOiBwYXJhbWV0ZXJzLmlzQ29uc3RydWN0ZWQsXHJcbiAgICAgICAgICAgICAgICAuLi5pZEJsb2NrLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBsZW5CbG9jazoge1xyXG4gICAgICAgICAgICAgICAgLi4ubGVuQmxvY2ssXHJcbiAgICAgICAgICAgICAgICBpc0luZGVmaW5pdGVGb3JtOiAhIXBhcmFtZXRlcnMuaXNJbmRlZmluaXRlRm9ybSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgLi4ucGFyYW1ldGVycyxcclxuICAgICAgICB9LCBMb2NhbEJpdFN0cmluZ1ZhbHVlQmxvY2spO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDM7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2suaXNDb25zdHJ1Y3RlZCA9IHRoaXMuaWRCbG9jay5pc0NvbnN0cnVjdGVkO1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay5pc0luZGVmaW5pdGVGb3JtID0gdGhpcy5sZW5CbG9jay5pc0luZGVmaW5pdGVGb3JtO1xyXG4gICAgICAgIHJldHVybiBzdXBlci5mcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgb25Bc2NpaUVuY29kaW5nKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnZhbHVlQmxvY2suaXNDb25zdHJ1Y3RlZCB8fCAodGhpcy52YWx1ZUJsb2NrLnZhbHVlICYmIHRoaXMudmFsdWVCbG9jay52YWx1ZS5sZW5ndGgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBDb25zdHJ1Y3RlZC5wcm90b3R5cGUub25Bc2NpaUVuY29kaW5nLmNhbGwodGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBiaXRzID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlSGV4ID0gdGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4VmlldztcclxuICAgICAgICAgICAgZm9yIChjb25zdCBieXRlIG9mIHZhbHVlSGV4KSB7XHJcbiAgICAgICAgICAgICAgICBiaXRzLnB1c2goYnl0ZS50b1N0cmluZygyKS5wYWRTdGFydCg4LCBcIjBcIikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGJpdHNTdHIgPSBiaXRzLmpvaW4oXCJcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBgJHt0aGlzLmNvbnN0cnVjdG9yLk5BTUV9IDogJHtiaXRzU3RyLnN1YnN0cmluZygwLCBiaXRzU3RyLmxlbmd0aCAtIHRoaXMudmFsdWVCbG9jay51bnVzZWRCaXRzKX1gO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5fYSRxID0gQml0U3RyaW5nO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLkJpdFN0cmluZyA9IF9hJHE7XHJcbn0pKCk7XHJcbkJpdFN0cmluZy5OQU1FID0gQklUX1NUUklOR19OQU1FO1xuXG52YXIgX2EkcDtcclxuZnVuY3Rpb24gdmlld0FkZChmaXJzdCwgc2Vjb25kKSB7XHJcbiAgICBjb25zdCBjID0gbmV3IFVpbnQ4QXJyYXkoWzBdKTtcclxuICAgIGNvbnN0IGZpcnN0VmlldyA9IG5ldyBVaW50OEFycmF5KGZpcnN0KTtcclxuICAgIGNvbnN0IHNlY29uZFZpZXcgPSBuZXcgVWludDhBcnJheShzZWNvbmQpO1xyXG4gICAgbGV0IGZpcnN0Vmlld0NvcHkgPSBmaXJzdFZpZXcuc2xpY2UoMCk7XHJcbiAgICBjb25zdCBmaXJzdFZpZXdDb3B5TGVuZ3RoID0gZmlyc3RWaWV3Q29weS5sZW5ndGggLSAxO1xyXG4gICAgY29uc3Qgc2Vjb25kVmlld0NvcHkgPSBzZWNvbmRWaWV3LnNsaWNlKDApO1xyXG4gICAgY29uc3Qgc2Vjb25kVmlld0NvcHlMZW5ndGggPSBzZWNvbmRWaWV3Q29weS5sZW5ndGggLSAxO1xyXG4gICAgbGV0IHZhbHVlID0gMDtcclxuICAgIGNvbnN0IG1heCA9IChzZWNvbmRWaWV3Q29weUxlbmd0aCA8IGZpcnN0Vmlld0NvcHlMZW5ndGgpID8gZmlyc3RWaWV3Q29weUxlbmd0aCA6IHNlY29uZFZpZXdDb3B5TGVuZ3RoO1xyXG4gICAgbGV0IGNvdW50ZXIgPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IG1heDsgaSA+PSAwOyBpLS0sIGNvdW50ZXIrKykge1xyXG4gICAgICAgIHN3aXRjaCAodHJ1ZSkge1xyXG4gICAgICAgICAgICBjYXNlIChjb3VudGVyIDwgc2Vjb25kVmlld0NvcHkubGVuZ3RoKTpcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gZmlyc3RWaWV3Q29weVtmaXJzdFZpZXdDb3B5TGVuZ3RoIC0gY291bnRlcl0gKyBzZWNvbmRWaWV3Q29weVtzZWNvbmRWaWV3Q29weUxlbmd0aCAtIGNvdW50ZXJdICsgY1swXTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBmaXJzdFZpZXdDb3B5W2ZpcnN0Vmlld0NvcHlMZW5ndGggLSBjb3VudGVyXSArIGNbMF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNbMF0gPSB2YWx1ZSAvIDEwO1xyXG4gICAgICAgIHN3aXRjaCAodHJ1ZSkge1xyXG4gICAgICAgICAgICBjYXNlIChjb3VudGVyID49IGZpcnN0Vmlld0NvcHkubGVuZ3RoKTpcclxuICAgICAgICAgICAgICAgIGZpcnN0Vmlld0NvcHkgPSBwdnV0aWxzLnV0aWxDb25jYXRWaWV3KG5ldyBVaW50OEFycmF5KFt2YWx1ZSAlIDEwXSksIGZpcnN0Vmlld0NvcHkpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICBmaXJzdFZpZXdDb3B5W2ZpcnN0Vmlld0NvcHlMZW5ndGggLSBjb3VudGVyXSA9IHZhbHVlICUgMTA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGNbMF0gPiAwKVxyXG4gICAgICAgIGZpcnN0Vmlld0NvcHkgPSBwdnV0aWxzLnV0aWxDb25jYXRWaWV3KGMsIGZpcnN0Vmlld0NvcHkpO1xyXG4gICAgcmV0dXJuIGZpcnN0Vmlld0NvcHk7XHJcbn1cclxuZnVuY3Rpb24gcG93ZXIyKG4pIHtcclxuICAgIGlmIChuID49IHBvd2VyczIubGVuZ3RoKSB7XHJcbiAgICAgICAgZm9yIChsZXQgcCA9IHBvd2VyczIubGVuZ3RoOyBwIDw9IG47IHArKykge1xyXG4gICAgICAgICAgICBjb25zdCBjID0gbmV3IFVpbnQ4QXJyYXkoWzBdKTtcclxuICAgICAgICAgICAgbGV0IGRpZ2l0cyA9IChwb3dlcnMyW3AgLSAxXSkuc2xpY2UoMCk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAoZGlnaXRzLmxlbmd0aCAtIDEpOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBuZXcgVWludDhBcnJheShbKGRpZ2l0c1tpXSA8PCAxKSArIGNbMF1dKTtcclxuICAgICAgICAgICAgICAgIGNbMF0gPSBuZXdWYWx1ZVswXSAvIDEwO1xyXG4gICAgICAgICAgICAgICAgZGlnaXRzW2ldID0gbmV3VmFsdWVbMF0gJSAxMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoY1swXSA+IDApXHJcbiAgICAgICAgICAgICAgICBkaWdpdHMgPSBwdnV0aWxzLnV0aWxDb25jYXRWaWV3KGMsIGRpZ2l0cyk7XHJcbiAgICAgICAgICAgIHBvd2VyczIucHVzaChkaWdpdHMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBwb3dlcnMyW25dO1xyXG59XHJcbmZ1bmN0aW9uIHZpZXdTdWIoZmlyc3QsIHNlY29uZCkge1xyXG4gICAgbGV0IGIgPSAwO1xyXG4gICAgY29uc3QgZmlyc3RWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoZmlyc3QpO1xyXG4gICAgY29uc3Qgc2Vjb25kVmlldyA9IG5ldyBVaW50OEFycmF5KHNlY29uZCk7XHJcbiAgICBjb25zdCBmaXJzdFZpZXdDb3B5ID0gZmlyc3RWaWV3LnNsaWNlKDApO1xyXG4gICAgY29uc3QgZmlyc3RWaWV3Q29weUxlbmd0aCA9IGZpcnN0Vmlld0NvcHkubGVuZ3RoIC0gMTtcclxuICAgIGNvbnN0IHNlY29uZFZpZXdDb3B5ID0gc2Vjb25kVmlldy5zbGljZSgwKTtcclxuICAgIGNvbnN0IHNlY29uZFZpZXdDb3B5TGVuZ3RoID0gc2Vjb25kVmlld0NvcHkubGVuZ3RoIC0gMTtcclxuICAgIGxldCB2YWx1ZTtcclxuICAgIGxldCBjb3VudGVyID0gMDtcclxuICAgIGZvciAobGV0IGkgPSBzZWNvbmRWaWV3Q29weUxlbmd0aDsgaSA+PSAwOyBpLS0sIGNvdW50ZXIrKykge1xyXG4gICAgICAgIHZhbHVlID0gZmlyc3RWaWV3Q29weVtmaXJzdFZpZXdDb3B5TGVuZ3RoIC0gY291bnRlcl0gLSBzZWNvbmRWaWV3Q29weVtzZWNvbmRWaWV3Q29weUxlbmd0aCAtIGNvdW50ZXJdIC0gYjtcclxuICAgICAgICBzd2l0Y2ggKHRydWUpIHtcclxuICAgICAgICAgICAgY2FzZSAodmFsdWUgPCAwKTpcclxuICAgICAgICAgICAgICAgIGIgPSAxO1xyXG4gICAgICAgICAgICAgICAgZmlyc3RWaWV3Q29weVtmaXJzdFZpZXdDb3B5TGVuZ3RoIC0gY291bnRlcl0gPSB2YWx1ZSArIDEwO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICBiID0gMDtcclxuICAgICAgICAgICAgICAgIGZpcnN0Vmlld0NvcHlbZmlyc3RWaWV3Q29weUxlbmd0aCAtIGNvdW50ZXJdID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGIgPiAwKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IChmaXJzdFZpZXdDb3B5TGVuZ3RoIC0gc2Vjb25kVmlld0NvcHlMZW5ndGggKyAxKTsgaSA+PSAwOyBpLS0sIGNvdW50ZXIrKykge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IGZpcnN0Vmlld0NvcHlbZmlyc3RWaWV3Q29weUxlbmd0aCAtIGNvdW50ZXJdIC0gYjtcclxuICAgICAgICAgICAgaWYgKHZhbHVlIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgYiA9IDE7XHJcbiAgICAgICAgICAgICAgICBmaXJzdFZpZXdDb3B5W2ZpcnN0Vmlld0NvcHlMZW5ndGggLSBjb3VudGVyXSA9IHZhbHVlICsgMTA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBiID0gMDtcclxuICAgICAgICAgICAgICAgIGZpcnN0Vmlld0NvcHlbZmlyc3RWaWV3Q29weUxlbmd0aCAtIGNvdW50ZXJdID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmaXJzdFZpZXdDb3B5LnNsaWNlKCk7XHJcbn1cclxuY2xhc3MgTG9jYWxJbnRlZ2VyVmFsdWVCbG9jayBleHRlbmRzIEhleEJsb2NrKFZhbHVlQmxvY2spIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgdmFsdWUsIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5fdmFsdWVEZWMgPSAwO1xyXG4gICAgICAgIGlmIChwYXJhbWV0ZXJzLnZhbHVlSGV4KSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWVIZXgoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZURlYyA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHNldFZhbHVlSGV4KCkge1xyXG4gICAgICAgIGlmICh0aGlzLnZhbHVlSGV4Vmlldy5sZW5ndGggPj0gNCkge1xyXG4gICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1c2goXCJUb28gYmlnIEludGVnZXIgZm9yIGRlY29kaW5nLCBoZXggb25seVwiKTtcclxuICAgICAgICAgICAgdGhpcy5pc0hleE9ubHkgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLl92YWx1ZURlYyA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmlzSGV4T25seSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZUhleFZpZXcubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdmFsdWVEZWMgPSBwdnV0aWxzLnV0aWxEZWNvZGVUQy5jYWxsKHRoaXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgc2V0IHZhbHVlRGVjKHYpIHtcclxuICAgICAgICB0aGlzLl92YWx1ZURlYyA9IHY7XHJcbiAgICAgICAgdGhpcy5pc0hleE9ubHkgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IG5ldyBVaW50OEFycmF5KHB2dXRpbHMudXRpbEVuY29kZVRDKHYpKTtcclxuICAgIH1cclxuICAgIGdldCB2YWx1ZURlYygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWVEZWM7XHJcbiAgICB9XHJcbiAgICBmcm9tREVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgsIGV4cGVjdGVkTGVuZ3RoID0gMCkge1xyXG4gICAgICAgIGNvbnN0IG9mZnNldCA9IHRoaXMuZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICBpZiAob2Zmc2V0ID09PSAtMSlcclxuICAgICAgICAgICAgcmV0dXJuIG9mZnNldDtcclxuICAgICAgICBjb25zdCB2aWV3ID0gdGhpcy52YWx1ZUhleFZpZXc7XHJcbiAgICAgICAgaWYgKCh2aWV3WzBdID09PSAweDAwKSAmJiAoKHZpZXdbMV0gJiAweDgwKSAhPT0gMCkpIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSB2aWV3LnN1YmFycmF5KDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGV4cGVjdGVkTGVuZ3RoICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodmlldy5sZW5ndGggPCBleHBlY3RlZExlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgoZXhwZWN0ZWRMZW5ndGggLSB2aWV3Lmxlbmd0aCkgPiAxKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZExlbmd0aCA9IHZpZXcubGVuZ3RoICsgMTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IHZpZXcuc3ViYXJyYXkoZXhwZWN0ZWRMZW5ndGggLSB2aWV3Lmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9mZnNldDtcclxuICAgIH1cclxuICAgIHRvREVSKHNpemVPbmx5ID0gZmFsc2UpIHtcclxuICAgICAgICBjb25zdCB2aWV3ID0gdGhpcy52YWx1ZUhleFZpZXc7XHJcbiAgICAgICAgc3dpdGNoICh0cnVlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgKCh2aWV3WzBdICYgMHg4MCkgIT09IDApOlxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy52YWx1ZUhleFZpZXcubGVuZ3RoICsgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlZFZpZXdbMF0gPSAweDAwO1xyXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRWaWV3LnNldCh2aWV3LCAxKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IHVwZGF0ZWRWaWV3O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgKCh2aWV3WzBdID09PSAweDAwKSAmJiAoKHZpZXdbMV0gJiAweDgwKSA9PT0gMCkpOlxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gdGhpcy52YWx1ZUhleFZpZXcuc3ViYXJyYXkoMSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudG9CRVIoc2l6ZU9ubHkpO1xyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0T2Zmc2V0ID0gc3VwZXIuZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICBpZiAocmVzdWx0T2Zmc2V0ID09PSAtMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNldFZhbHVlSGV4KCk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdE9mZnNldDtcclxuICAgIH1cclxuICAgIHRvQkVSKHNpemVPbmx5KSB7XHJcbiAgICAgICAgcmV0dXJuIHNpemVPbmx5XHJcbiAgICAgICAgICAgID8gbmV3IEFycmF5QnVmZmVyKHRoaXMudmFsdWVIZXhWaWV3Lmxlbmd0aClcclxuICAgICAgICAgICAgOiB0aGlzLnZhbHVlSGV4Vmlldy5zbGljZSgpLmJ1ZmZlcjtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgdmFsdWVEZWM6IHRoaXMudmFsdWVEZWMsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIHRvU3RyaW5nKCkge1xyXG4gICAgICAgIGNvbnN0IGZpcnN0Qml0ID0gKHRoaXMudmFsdWVIZXhWaWV3Lmxlbmd0aCAqIDgpIC0gMTtcclxuICAgICAgICBsZXQgZGlnaXRzID0gbmV3IFVpbnQ4QXJyYXkoKHRoaXMudmFsdWVIZXhWaWV3Lmxlbmd0aCAqIDgpIC8gMyk7XHJcbiAgICAgICAgbGV0IGJpdE51bWJlciA9IDA7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRCeXRlO1xyXG4gICAgICAgIGNvbnN0IGFzbjFWaWV3ID0gdGhpcy52YWx1ZUhleFZpZXc7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IFwiXCI7XHJcbiAgICAgICAgbGV0IGZsYWcgPSBmYWxzZTtcclxuICAgICAgICBmb3IgKGxldCBieXRlTnVtYmVyID0gKGFzbjFWaWV3LmJ5dGVMZW5ndGggLSAxKTsgYnl0ZU51bWJlciA+PSAwOyBieXRlTnVtYmVyLS0pIHtcclxuICAgICAgICAgICAgY3VycmVudEJ5dGUgPSBhc24xVmlld1tieXRlTnVtYmVyXTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA4OyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmICgoY3VycmVudEJ5dGUgJiAxKSA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYml0TnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgZmlyc3RCaXQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWdpdHMgPSB2aWV3U3ViKHBvd2VyMihiaXROdW1iZXIpLCBkaWdpdHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gXCItXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZ2l0cyA9IHZpZXdBZGQoZGlnaXRzLCBwb3dlcjIoYml0TnVtYmVyKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYml0TnVtYmVyKys7XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50Qnl0ZSA+Pj0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRpZ2l0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZGlnaXRzW2ldKVxyXG4gICAgICAgICAgICAgICAgZmxhZyA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmIChmbGFnKVxyXG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IGRpZ2l0c1N0cmluZy5jaGFyQXQoZGlnaXRzW2ldKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZsYWcgPT09IGZhbHNlKVxyXG4gICAgICAgICAgICByZXN1bHQgKz0gZGlnaXRzU3RyaW5nLmNoYXJBdCgwKTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG59XHJcbl9hJHAgPSBMb2NhbEludGVnZXJWYWx1ZUJsb2NrO1xyXG5Mb2NhbEludGVnZXJWYWx1ZUJsb2NrLk5BTUUgPSBcIkludGVnZXJWYWx1ZUJsb2NrXCI7XHJcbigoKSA9PiB7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2EkcC5wcm90b3R5cGUsIFwidmFsdWVIZXhcIiwge1xyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHYpIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSBuZXcgVWludDhBcnJheSh2KTtcclxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZUhleCgpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlSGV4Vmlldy5zbGljZSgpLmJ1ZmZlcjtcclxuICAgICAgICB9LFxyXG4gICAgfSk7XHJcbn0pKCk7XG5cbnZhciBfYSRvO1xyXG5jbGFzcyBJbnRlZ2VyIGV4dGVuZHMgQmFzZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMsIExvY2FsSW50ZWdlclZhbHVlQmxvY2spO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDI7XHJcbiAgICB9XHJcbiAgICB0b0JpZ0ludCgpIHtcclxuICAgICAgICBhc3NlcnRCaWdJbnQoKTtcclxuICAgICAgICByZXR1cm4gQmlnSW50KHRoaXMudmFsdWVCbG9jay50b1N0cmluZygpKTtcclxuICAgIH1cclxuICAgIHN0YXRpYyBmcm9tQmlnSW50KHZhbHVlKSB7XHJcbiAgICAgICAgYXNzZXJ0QmlnSW50KCk7XHJcbiAgICAgICAgY29uc3QgYmlnSW50VmFsdWUgPSBCaWdJbnQodmFsdWUpO1xyXG4gICAgICAgIGNvbnN0IHdyaXRlciA9IG5ldyBWaWV3V3JpdGVyKCk7XHJcbiAgICAgICAgY29uc3QgaGV4ID0gYmlnSW50VmFsdWUudG9TdHJpbmcoMTYpLnJlcGxhY2UoL14tLywgXCJcIik7XHJcbiAgICAgICAgY29uc3QgdmlldyA9IG5ldyBVaW50OEFycmF5KHB2dHN1dGlscy5Db252ZXJ0LkZyb21IZXgoaGV4KSk7XHJcbiAgICAgICAgaWYgKGJpZ0ludFZhbHVlIDwgMCkge1xyXG4gICAgICAgICAgICBjb25zdCBmaXJzdCA9IG5ldyBVaW50OEFycmF5KHZpZXcubGVuZ3RoICsgKHZpZXdbMF0gJiAweDgwID8gMSA6IDApKTtcclxuICAgICAgICAgICAgZmlyc3RbMF0gfD0gMHg4MDtcclxuICAgICAgICAgICAgY29uc3QgZmlyc3RJbnQgPSBCaWdJbnQoYDB4JHtwdnRzdXRpbHMuQ29udmVydC5Ub0hleChmaXJzdCl9YCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlY29uZEludCA9IGZpcnN0SW50ICsgYmlnSW50VmFsdWU7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlY29uZCA9IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KHB2dHN1dGlscy5Db252ZXJ0LkZyb21IZXgoc2Vjb25kSW50LnRvU3RyaW5nKDE2KSkpO1xyXG4gICAgICAgICAgICBzZWNvbmRbMF0gfD0gMHg4MDtcclxuICAgICAgICAgICAgd3JpdGVyLndyaXRlKHNlY29uZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodmlld1swXSAmIDB4ODApIHtcclxuICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZShuZXcgVWludDhBcnJheShbMF0pKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB3cml0ZXIud3JpdGUodmlldyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJlcyA9IG5ldyBJbnRlZ2VyKHtcclxuICAgICAgICAgICAgdmFsdWVIZXg6IHdyaXRlci5maW5hbCgpLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICB9XHJcbiAgICBjb252ZXJ0VG9ERVIoKSB7XHJcbiAgICAgICAgY29uc3QgaW50ZWdlciA9IG5ldyBJbnRlZ2VyKHsgdmFsdWVIZXg6IHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXcgfSk7XHJcbiAgICAgICAgaW50ZWdlci52YWx1ZUJsb2NrLnRvREVSKCk7XHJcbiAgICAgICAgcmV0dXJuIGludGVnZXI7XHJcbiAgICB9XHJcbiAgICBjb252ZXJ0RnJvbURFUigpIHtcclxuICAgICAgICByZXR1cm4gbmV3IEludGVnZXIoe1xyXG4gICAgICAgICAgICB2YWx1ZUhleDogdGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4Vmlld1swXSA9PT0gMFxyXG4gICAgICAgICAgICAgICAgPyB0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3LnN1YmFycmF5KDEpXHJcbiAgICAgICAgICAgICAgICA6IHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXcsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBvbkFzY2lpRW5jb2RpbmcoKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY29uc3RydWN0b3IuTkFNRX0gOiAke3RoaXMudmFsdWVCbG9jay50b1N0cmluZygpfWA7XHJcbiAgICB9XHJcbn1cclxuX2EkbyA9IEludGVnZXI7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuSW50ZWdlciA9IF9hJG87XHJcbn0pKCk7XHJcbkludGVnZXIuTkFNRSA9IFwiSU5URUdFUlwiO1xuXG52YXIgX2EkbjtcclxuY2xhc3MgRW51bWVyYXRlZCBleHRlbmRzIEludGVnZXIge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMTA7XHJcbiAgICB9XHJcbn1cclxuX2EkbiA9IEVudW1lcmF0ZWQ7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuRW51bWVyYXRlZCA9IF9hJG47XHJcbn0pKCk7XHJcbkVudW1lcmF0ZWQuTkFNRSA9IFwiRU5VTUVSQVRFRFwiO1xuXG5jbGFzcyBMb2NhbFNpZFZhbHVlQmxvY2sgZXh0ZW5kcyBIZXhCbG9jayhWYWx1ZUJsb2NrKSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IHZhbHVlRGVjID0gLTEsIGlzRmlyc3RTaWQgPSBmYWxzZSwgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLnZhbHVlRGVjID0gdmFsdWVEZWM7XHJcbiAgICAgICAgdGhpcy5pc0ZpcnN0U2lkID0gaXNGaXJzdFNpZDtcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIGlmICghaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGlucHV0T2Zmc2V0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpbnB1dFZpZXcgPSBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShpbnB1dEJ1ZmZlcik7XHJcbiAgICAgICAgaWYgKCFjaGVja0J1ZmZlclBhcmFtcyh0aGlzLCBpbnB1dFZpZXcsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpbnRCdWZmZXIgPSBpbnB1dFZpZXcuc3ViYXJyYXkoaW5wdXRPZmZzZXQsIGlucHV0T2Zmc2V0ICsgaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXRMZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlSGV4Vmlld1tpXSA9IGludEJ1ZmZlcltpXSAmIDB4N0Y7XHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGgrKztcclxuICAgICAgICAgICAgaWYgKChpbnRCdWZmZXJbaV0gJiAweDgwKSA9PT0gMHgwMClcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB0ZW1wVmlldyA9IG5ldyBVaW50OEFycmF5KHRoaXMuYmxvY2tMZW5ndGgpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5ibG9ja0xlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRlbXBWaWV3W2ldID0gdGhpcy52YWx1ZUhleFZpZXdbaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gdGVtcFZpZXc7XHJcbiAgICAgICAgaWYgKChpbnRCdWZmZXJbdGhpcy5ibG9ja0xlbmd0aCAtIDFdICYgMHg4MCkgIT09IDB4MDApIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiRW5kIG9mIGlucHV0IHJlYWNoZWQgYmVmb3JlIG1lc3NhZ2Ugd2FzIGZ1bGx5IGRlY29kZWRcIjtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy52YWx1ZUhleFZpZXdbMF0gPT09IDB4MDApXHJcbiAgICAgICAgICAgIHRoaXMud2FybmluZ3MucHVzaChcIk5lZWRsZXNzbHkgbG9uZyBmb3JtYXQgb2YgU0lEIGVuY29kaW5nXCIpO1xyXG4gICAgICAgIGlmICh0aGlzLmJsb2NrTGVuZ3RoIDw9IDgpXHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVEZWMgPSBwdnV0aWxzLnV0aWxGcm9tQmFzZSh0aGlzLnZhbHVlSGV4VmlldywgNyk7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNIZXhPbmx5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKFwiVG9vIGJpZyBTSUQgZm9yIGRlY29kaW5nLCBoZXggb25seVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIChpbnB1dE9mZnNldCArIHRoaXMuYmxvY2tMZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgc2V0IHZhbHVlQmlnSW50KHZhbHVlKSB7XHJcbiAgICAgICAgYXNzZXJ0QmlnSW50KCk7XHJcbiAgICAgICAgbGV0IGJpdHMgPSBCaWdJbnQodmFsdWUpLnRvU3RyaW5nKDIpO1xyXG4gICAgICAgIHdoaWxlIChiaXRzLmxlbmd0aCAlIDcpIHtcclxuICAgICAgICAgICAgYml0cyA9IFwiMFwiICsgYml0cztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShiaXRzLmxlbmd0aCAvIDcpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgYnl0ZXNbaV0gPSBwYXJzZUludChiaXRzLnNsaWNlKGkgKiA3LCBpICogNyArIDcpLCAyKSArIChpICsgMSA8IGJ5dGVzLmxlbmd0aCA/IDB4ODAgOiAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5mcm9tQkVSKGJ5dGVzLmJ1ZmZlciwgMCwgYnl0ZXMubGVuZ3RoKTtcclxuICAgIH1cclxuICAgIHRvQkVSKHNpemVPbmx5KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNIZXhPbmx5KSB7XHJcbiAgICAgICAgICAgIGlmIChzaXplT25seSlcclxuICAgICAgICAgICAgICAgIHJldHVybiAobmV3IEFycmF5QnVmZmVyKHRoaXMudmFsdWVIZXhWaWV3LmJ5dGVMZW5ndGgpKTtcclxuICAgICAgICAgICAgY29uc3QgY3VyVmlldyA9IHRoaXMudmFsdWVIZXhWaWV3O1xyXG4gICAgICAgICAgICBjb25zdCByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5ibG9ja0xlbmd0aCk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgKHRoaXMuYmxvY2tMZW5ndGggLSAxKTsgaSsrKVxyXG4gICAgICAgICAgICAgICAgcmV0Vmlld1tpXSA9IGN1clZpZXdbaV0gfCAweDgwO1xyXG4gICAgICAgICAgICByZXRWaWV3W3RoaXMuYmxvY2tMZW5ndGggLSAxXSA9IGN1clZpZXdbdGhpcy5ibG9ja0xlbmd0aCAtIDFdO1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0Vmlldy5idWZmZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGVuY29kZWRCdWYgPSBwdnV0aWxzLnV0aWxUb0Jhc2UodGhpcy52YWx1ZURlYywgNyk7XHJcbiAgICAgICAgaWYgKGVuY29kZWRCdWYuYnl0ZUxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gXCJFcnJvciBkdXJpbmcgZW5jb2RpbmcgU0lEIHZhbHVlXCI7XHJcbiAgICAgICAgICAgIHJldHVybiBFTVBUWV9CVUZGRVI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJldFZpZXcgPSBuZXcgVWludDhBcnJheShlbmNvZGVkQnVmLmJ5dGVMZW5ndGgpO1xyXG4gICAgICAgIGlmICghc2l6ZU9ubHkpIHtcclxuICAgICAgICAgICAgY29uc3QgZW5jb2RlZFZpZXcgPSBuZXcgVWludDhBcnJheShlbmNvZGVkQnVmKTtcclxuICAgICAgICAgICAgY29uc3QgbGVuID0gZW5jb2RlZEJ1Zi5ieXRlTGVuZ3RoIC0gMTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKylcclxuICAgICAgICAgICAgICAgIHJldFZpZXdbaV0gPSBlbmNvZGVkVmlld1tpXSB8IDB4ODA7XHJcbiAgICAgICAgICAgIHJldFZpZXdbbGVuXSA9IGVuY29kZWRWaWV3W2xlbl07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXRWaWV3O1xyXG4gICAgfVxyXG4gICAgdG9TdHJpbmcoKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IFwiXCI7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNIZXhPbmx5KVxyXG4gICAgICAgICAgICByZXN1bHQgPSBwdnRzdXRpbHMuQ29udmVydC5Ub0hleCh0aGlzLnZhbHVlSGV4Vmlldyk7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRmlyc3RTaWQpIHtcclxuICAgICAgICAgICAgICAgIGxldCBzaWRWYWx1ZSA9IHRoaXMudmFsdWVEZWM7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy52YWx1ZURlYyA8PSAzOSlcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBcIjAuXCI7XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52YWx1ZURlYyA8PSA3OSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBcIjEuXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpZFZhbHVlIC09IDQwO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gXCIyLlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaWRWYWx1ZSAtPSA4MDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gc2lkVmFsdWUudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB0aGlzLnZhbHVlRGVjLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIHZhbHVlRGVjOiB0aGlzLnZhbHVlRGVjLFxyXG4gICAgICAgICAgICBpc0ZpcnN0U2lkOiB0aGlzLmlzRmlyc3RTaWQsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5Mb2NhbFNpZFZhbHVlQmxvY2suTkFNRSA9IFwic2lkQmxvY2tcIjtcblxuY2xhc3MgTG9jYWxPYmplY3RJZGVudGlmaWVyVmFsdWVCbG9jayBleHRlbmRzIFZhbHVlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IoeyB2YWx1ZSA9IEVNUFRZX1NUUklORywgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLnZhbHVlID0gW107XHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJvbVN0cmluZyh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdE9mZnNldCA9IGlucHV0T2Zmc2V0O1xyXG4gICAgICAgIHdoaWxlIChpbnB1dExlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3Qgc2lkQmxvY2sgPSBuZXcgTG9jYWxTaWRWYWx1ZUJsb2NrKCk7XHJcbiAgICAgICAgICAgIHJlc3VsdE9mZnNldCA9IHNpZEJsb2NrLmZyb21CRVIoaW5wdXRCdWZmZXIsIHJlc3VsdE9mZnNldCwgaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0T2Zmc2V0ID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gc2lkQmxvY2suZXJyb3I7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlLmxlbmd0aCA9PT0gMClcclxuICAgICAgICAgICAgICAgIHNpZEJsb2NrLmlzRmlyc3RTaWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoICs9IHNpZEJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgICAgICBpbnB1dExlbmd0aCAtPSBzaWRCbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZS5wdXNoKHNpZEJsb2NrKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdE9mZnNldDtcclxuICAgIH1cclxuICAgIHRvQkVSKHNpemVPbmx5KSB7XHJcbiAgICAgICAgY29uc3QgcmV0QnVmZmVycyA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy52YWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZUJ1ZiA9IHRoaXMudmFsdWVbaV0udG9CRVIoc2l6ZU9ubHkpO1xyXG4gICAgICAgICAgICBpZiAodmFsdWVCdWYuYnl0ZUxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IHRoaXMudmFsdWVbaV0uZXJyb3I7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gRU1QVFlfQlVGRkVSO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldEJ1ZmZlcnMucHVzaCh2YWx1ZUJ1Zik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb25jYXQocmV0QnVmZmVycyk7XHJcbiAgICB9XHJcbiAgICBmcm9tU3RyaW5nKHN0cmluZykge1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSBbXTtcclxuICAgICAgICBsZXQgcG9zMSA9IDA7XHJcbiAgICAgICAgbGV0IHBvczIgPSAwO1xyXG4gICAgICAgIGxldCBzaWQgPSBcIlwiO1xyXG4gICAgICAgIGxldCBmbGFnID0gZmFsc2U7XHJcbiAgICAgICAgZG8ge1xyXG4gICAgICAgICAgICBwb3MyID0gc3RyaW5nLmluZGV4T2YoXCIuXCIsIHBvczEpO1xyXG4gICAgICAgICAgICBpZiAocG9zMiA9PT0gLTEpXHJcbiAgICAgICAgICAgICAgICBzaWQgPSBzdHJpbmcuc3Vic3RyaW5nKHBvczEpO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBzaWQgPSBzdHJpbmcuc3Vic3RyaW5nKHBvczEsIHBvczIpO1xyXG4gICAgICAgICAgICBwb3MxID0gcG9zMiArIDE7XHJcbiAgICAgICAgICAgIGlmIChmbGFnKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzaWRCbG9jayA9IHRoaXMudmFsdWVbMF07XHJcbiAgICAgICAgICAgICAgICBsZXQgcGx1cyA9IDA7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHNpZEJsb2NrLnZhbHVlRGVjKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsdXMgPSA0MDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwbHVzID0gODA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkU0lEID0gcGFyc2VJbnQoc2lkLCAxMCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNOYU4ocGFyc2VkU0lEKSlcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBzaWRCbG9jay52YWx1ZURlYyA9IHBhcnNlZFNJRCArIHBsdXM7XHJcbiAgICAgICAgICAgICAgICBmbGFnID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzaWRCbG9jayA9IG5ldyBMb2NhbFNpZFZhbHVlQmxvY2soKTtcclxuICAgICAgICAgICAgICAgIGlmIChzaWQgPiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikge1xyXG4gICAgICAgICAgICAgICAgICAgIGFzc2VydEJpZ0ludCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpZFZhbHVlID0gQmlnSW50KHNpZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgc2lkQmxvY2sudmFsdWVCaWdJbnQgPSBzaWRWYWx1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHNpZEJsb2NrLnZhbHVlRGVjID0gcGFyc2VJbnQoc2lkLCAxMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTmFOKHNpZEJsb2NrLnZhbHVlRGVjKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnZhbHVlLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNpZEJsb2NrLmlzRmlyc3RTaWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGZsYWcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZS5wdXNoKHNpZEJsb2NrKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gd2hpbGUgKHBvczIgIT09IC0xKTtcclxuICAgIH1cclxuICAgIHRvU3RyaW5nKCkge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBcIlwiO1xyXG4gICAgICAgIGxldCBpc0hleE9ubHkgPSBmYWxzZTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaXNIZXhPbmx5ID0gdGhpcy52YWx1ZVtpXS5pc0hleE9ubHk7XHJcbiAgICAgICAgICAgIGxldCBzaWRTdHIgPSB0aGlzLnZhbHVlW2ldLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIGlmIChpICE9PSAwKVxyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gYCR7cmVzdWx0fS5gO1xyXG4gICAgICAgICAgICBpZiAoaXNIZXhPbmx5KSB7XHJcbiAgICAgICAgICAgICAgICBzaWRTdHIgPSBgeyR7c2lkU3RyfX1gO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVbaV0uaXNGaXJzdFNpZClcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBgMi57JHtzaWRTdHJ9IC0gODB9YDtcclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gc2lkU3RyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzaWRTdHI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgY29uc3Qgb2JqZWN0ID0ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgdmFsdWU6IHRoaXMudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgc2lkQXJyYXk6IFtdLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIG9iamVjdC5zaWRBcnJheS5wdXNoKHRoaXMudmFsdWVbaV0udG9KU09OKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb2JqZWN0O1xyXG4gICAgfVxyXG59XHJcbkxvY2FsT2JqZWN0SWRlbnRpZmllclZhbHVlQmxvY2suTkFNRSA9IFwiT2JqZWN0SWRlbnRpZmllclZhbHVlQmxvY2tcIjtcblxudmFyIF9hJG07XHJcbmNsYXNzIE9iamVjdElkZW50aWZpZXIgZXh0ZW5kcyBCYXNlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycywgTG9jYWxPYmplY3RJZGVudGlmaWVyVmFsdWVCbG9jayk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gNjtcclxuICAgIH1cclxuICAgIGdldFZhbHVlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlQmxvY2sudG9TdHJpbmcoKTtcclxuICAgIH1cclxuICAgIHNldFZhbHVlKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLmZyb21TdHJpbmcodmFsdWUpO1xyXG4gICAgfVxyXG4gICAgb25Bc2NpaUVuY29kaW5nKCkge1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNvbnN0cnVjdG9yLk5BTUV9IDogJHt0aGlzLnZhbHVlQmxvY2sudG9TdHJpbmcoKSB8fCBcImVtcHR5XCJ9YDtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuZ2V0VmFsdWUoKSxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbl9hJG0gPSBPYmplY3RJZGVudGlmaWVyO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLk9iamVjdElkZW50aWZpZXIgPSBfYSRtO1xyXG59KSgpO1xyXG5PYmplY3RJZGVudGlmaWVyLk5BTUUgPSBcIk9CSkVDVCBJREVOVElGSUVSXCI7XG5cbmNsYXNzIExvY2FsUmVsYXRpdmVTaWRWYWx1ZUJsb2NrIGV4dGVuZHMgSGV4QmxvY2soTG9jYWxCYXNlQmxvY2spIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgdmFsdWVEZWMgPSAwLCAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMudmFsdWVEZWMgPSB2YWx1ZURlYztcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIGlmIChpbnB1dExlbmd0aCA9PT0gMClcclxuICAgICAgICAgICAgcmV0dXJuIGlucHV0T2Zmc2V0O1xyXG4gICAgICAgIGNvbnN0IGlucHV0VmlldyA9IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGlucHV0QnVmZmVyKTtcclxuICAgICAgICBpZiAoIWNoZWNrQnVmZmVyUGFyYW1zKHRoaXMsIGlucHV0VmlldywgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSlcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIGNvbnN0IGludEJ1ZmZlciA9IGlucHV0Vmlldy5zdWJhcnJheShpbnB1dE9mZnNldCwgaW5wdXRPZmZzZXQgKyBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSBuZXcgVWludDhBcnJheShpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dExlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVIZXhWaWV3W2ldID0gaW50QnVmZmVyW2ldICYgMHg3RjtcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCsrO1xyXG4gICAgICAgICAgICBpZiAoKGludEJ1ZmZlcltpXSAmIDB4ODApID09PSAweDAwKVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRlbXBWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5ibG9ja0xlbmd0aCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmJsb2NrTGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIHRlbXBWaWV3W2ldID0gdGhpcy52YWx1ZUhleFZpZXdbaV07XHJcbiAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSB0ZW1wVmlldztcclxuICAgICAgICBpZiAoKGludEJ1ZmZlclt0aGlzLmJsb2NrTGVuZ3RoIC0gMV0gJiAweDgwKSAhPT0gMHgwMCkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gXCJFbmQgb2YgaW5wdXQgcmVhY2hlZCBiZWZvcmUgbWVzc2FnZSB3YXMgZnVsbHkgZGVjb2RlZFwiO1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnZhbHVlSGV4Vmlld1swXSA9PT0gMHgwMClcclxuICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKFwiTmVlZGxlc3NseSBsb25nIGZvcm1hdCBvZiBTSUQgZW5jb2RpbmdcIik7XHJcbiAgICAgICAgaWYgKHRoaXMuYmxvY2tMZW5ndGggPD0gOClcclxuICAgICAgICAgICAgdGhpcy52YWx1ZURlYyA9IHB2dXRpbHMudXRpbEZyb21CYXNlKHRoaXMudmFsdWVIZXhWaWV3LCA3KTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pc0hleE9ubHkgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1c2goXCJUb28gYmlnIFNJRCBmb3IgZGVjb2RpbmcsIGhleCBvbmx5XCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKGlucHV0T2Zmc2V0ICsgdGhpcy5ibG9ja0xlbmd0aCk7XHJcbiAgICB9XHJcbiAgICB0b0JFUihzaXplT25seSkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzSGV4T25seSkge1xyXG4gICAgICAgICAgICBpZiAoc2l6ZU9ubHkpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKG5ldyBBcnJheUJ1ZmZlcih0aGlzLnZhbHVlSGV4Vmlldy5ieXRlTGVuZ3RoKSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1clZpZXcgPSB0aGlzLnZhbHVlSGV4VmlldztcclxuICAgICAgICAgICAgY29uc3QgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KHRoaXMuYmxvY2tMZW5ndGgpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8ICh0aGlzLmJsb2NrTGVuZ3RoIC0gMSk7IGkrKylcclxuICAgICAgICAgICAgICAgIHJldFZpZXdbaV0gPSBjdXJWaWV3W2ldIHwgMHg4MDtcclxuICAgICAgICAgICAgcmV0Vmlld1t0aGlzLmJsb2NrTGVuZ3RoIC0gMV0gPSBjdXJWaWV3W3RoaXMuYmxvY2tMZW5ndGggLSAxXTtcclxuICAgICAgICAgICAgcmV0dXJuIHJldFZpZXcuYnVmZmVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBlbmNvZGVkQnVmID0gcHZ1dGlscy51dGlsVG9CYXNlKHRoaXMudmFsdWVEZWMsIDcpO1xyXG4gICAgICAgIGlmIChlbmNvZGVkQnVmLmJ5dGVMZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiRXJyb3IgZHVyaW5nIGVuY29kaW5nIFNJRCB2YWx1ZVwiO1xyXG4gICAgICAgICAgICByZXR1cm4gRU1QVFlfQlVGRkVSO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoZW5jb2RlZEJ1Zi5ieXRlTGVuZ3RoKTtcclxuICAgICAgICBpZiAoIXNpemVPbmx5KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuY29kZWRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoZW5jb2RlZEJ1Zik7XHJcbiAgICAgICAgICAgIGNvbnN0IGxlbiA9IGVuY29kZWRCdWYuYnl0ZUxlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspXHJcbiAgICAgICAgICAgICAgICByZXRWaWV3W2ldID0gZW5jb2RlZFZpZXdbaV0gfCAweDgwO1xyXG4gICAgICAgICAgICByZXRWaWV3W2xlbl0gPSBlbmNvZGVkVmlld1tsZW5dO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmV0Vmlldy5idWZmZXI7XHJcbiAgICB9XHJcbiAgICB0b1N0cmluZygpIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gXCJcIjtcclxuICAgICAgICBpZiAodGhpcy5pc0hleE9ubHkpXHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHB2dHN1dGlscy5Db252ZXJ0LlRvSGV4KHRoaXMudmFsdWVIZXhWaWV3KTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy52YWx1ZURlYy50b1N0cmluZygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICB2YWx1ZURlYzogdGhpcy52YWx1ZURlYyxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbkxvY2FsUmVsYXRpdmVTaWRWYWx1ZUJsb2NrLk5BTUUgPSBcInJlbGF0aXZlU2lkQmxvY2tcIjtcblxuY2xhc3MgTG9jYWxSZWxhdGl2ZU9iamVjdElkZW50aWZpZXJWYWx1ZUJsb2NrIGV4dGVuZHMgVmFsdWVCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IHZhbHVlID0gRU1QVFlfU1RSSU5HLCAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSBbXTtcclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5mcm9tU3RyaW5nKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBsZXQgcmVzdWx0T2Zmc2V0ID0gaW5wdXRPZmZzZXQ7XHJcbiAgICAgICAgd2hpbGUgKGlucHV0TGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBzaWRCbG9jayA9IG5ldyBMb2NhbFJlbGF0aXZlU2lkVmFsdWVCbG9jaygpO1xyXG4gICAgICAgICAgICByZXN1bHRPZmZzZXQgPSBzaWRCbG9jay5mcm9tQkVSKGlucHV0QnVmZmVyLCByZXN1bHRPZmZzZXQsIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdE9mZnNldCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggPSAwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IHNpZEJsb2NrLmVycm9yO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdE9mZnNldDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoICs9IHNpZEJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgICAgICBpbnB1dExlbmd0aCAtPSBzaWRCbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZS5wdXNoKHNpZEJsb2NrKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdE9mZnNldDtcclxuICAgIH1cclxuICAgIHRvQkVSKHNpemVPbmx5LCB3cml0ZXIpIHtcclxuICAgICAgICBjb25zdCByZXRCdWZmZXJzID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlQnVmID0gdGhpcy52YWx1ZVtpXS50b0JFUihzaXplT25seSk7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZUJ1Zi5ieXRlTGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gdGhpcy52YWx1ZVtpXS5lcnJvcjtcclxuICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWV9CVUZGRVI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0QnVmZmVycy5wdXNoKHZhbHVlQnVmKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvbmNhdChyZXRCdWZmZXJzKTtcclxuICAgIH1cclxuICAgIGZyb21TdHJpbmcoc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFtdO1xyXG4gICAgICAgIGxldCBwb3MxID0gMDtcclxuICAgICAgICBsZXQgcG9zMiA9IDA7XHJcbiAgICAgICAgbGV0IHNpZCA9IFwiXCI7XHJcbiAgICAgICAgZG8ge1xyXG4gICAgICAgICAgICBwb3MyID0gc3RyaW5nLmluZGV4T2YoXCIuXCIsIHBvczEpO1xyXG4gICAgICAgICAgICBpZiAocG9zMiA9PT0gLTEpXHJcbiAgICAgICAgICAgICAgICBzaWQgPSBzdHJpbmcuc3Vic3RyaW5nKHBvczEpO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBzaWQgPSBzdHJpbmcuc3Vic3RyaW5nKHBvczEsIHBvczIpO1xyXG4gICAgICAgICAgICBwb3MxID0gcG9zMiArIDE7XHJcbiAgICAgICAgICAgIGNvbnN0IHNpZEJsb2NrID0gbmV3IExvY2FsUmVsYXRpdmVTaWRWYWx1ZUJsb2NrKCk7XHJcbiAgICAgICAgICAgIHNpZEJsb2NrLnZhbHVlRGVjID0gcGFyc2VJbnQoc2lkLCAxMCk7XHJcbiAgICAgICAgICAgIGlmIChpc05hTihzaWRCbG9jay52YWx1ZURlYykpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZS5wdXNoKHNpZEJsb2NrKTtcclxuICAgICAgICB9IHdoaWxlIChwb3MyICE9PSAtMSk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICB0b1N0cmluZygpIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gXCJcIjtcclxuICAgICAgICBsZXQgaXNIZXhPbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlzSGV4T25seSA9IHRoaXMudmFsdWVbaV0uaXNIZXhPbmx5O1xyXG4gICAgICAgICAgICBsZXQgc2lkU3RyID0gdGhpcy52YWx1ZVtpXS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICBpZiAoaSAhPT0gMClcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGAke3Jlc3VsdH0uYDtcclxuICAgICAgICAgICAgaWYgKGlzSGV4T25seSkge1xyXG4gICAgICAgICAgICAgICAgc2lkU3RyID0gYHske3NpZFN0cn19YDtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzaWRTdHI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHNpZFN0cjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICBjb25zdCBvYmplY3QgPSB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy50b1N0cmluZygpLFxyXG4gICAgICAgICAgICBzaWRBcnJheTogW10sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmFsdWUubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIG9iamVjdC5zaWRBcnJheS5wdXNoKHRoaXMudmFsdWVbaV0udG9KU09OKCkpO1xyXG4gICAgICAgIHJldHVybiBvYmplY3Q7XHJcbiAgICB9XHJcbn1cclxuTG9jYWxSZWxhdGl2ZU9iamVjdElkZW50aWZpZXJWYWx1ZUJsb2NrLk5BTUUgPSBcIlJlbGF0aXZlT2JqZWN0SWRlbnRpZmllclZhbHVlQmxvY2tcIjtcblxudmFyIF9hJGw7XHJcbmNsYXNzIFJlbGF0aXZlT2JqZWN0SWRlbnRpZmllciBleHRlbmRzIEJhc2VCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzLCBMb2NhbFJlbGF0aXZlT2JqZWN0SWRlbnRpZmllclZhbHVlQmxvY2spO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDEzO1xyXG4gICAgfVxyXG4gICAgZ2V0VmFsdWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVCbG9jay50b1N0cmluZygpO1xyXG4gICAgfVxyXG4gICAgc2V0VmFsdWUodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2suZnJvbVN0cmluZyh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBvbkFzY2lpRW5jb2RpbmcoKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY29uc3RydWN0b3IuTkFNRX0gOiAke3RoaXMudmFsdWVCbG9jay50b1N0cmluZygpIHx8IFwiZW1wdHlcIn1gO1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5nZXRWYWx1ZSgpLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuX2EkbCA9IFJlbGF0aXZlT2JqZWN0SWRlbnRpZmllcjtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5SZWxhdGl2ZU9iamVjdElkZW50aWZpZXIgPSBfYSRsO1xyXG59KSgpO1xyXG5SZWxhdGl2ZU9iamVjdElkZW50aWZpZXIuTkFNRSA9IFwiUmVsYXRpdmVPYmplY3RJZGVudGlmaWVyXCI7XG5cbnZhciBfYSRrO1xyXG5jbGFzcyBTZXF1ZW5jZSBleHRlbmRzIENvbnN0cnVjdGVkIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDE2O1xyXG4gICAgfVxyXG59XHJcbl9hJGsgPSBTZXF1ZW5jZTtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5TZXF1ZW5jZSA9IF9hJGs7XHJcbn0pKCk7XHJcblNlcXVlbmNlLk5BTUUgPSBcIlNFUVVFTkNFXCI7XG5cbnZhciBfYSRqO1xyXG5jbGFzcyBTZXQgZXh0ZW5kcyBDb25zdHJ1Y3RlZCB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAxNztcclxuICAgIH1cclxufVxyXG5fYSRqID0gU2V0O1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLlNldCA9IF9hJGo7XHJcbn0pKCk7XHJcblNldC5OQU1FID0gXCJTRVRcIjtcblxuY2xhc3MgTG9jYWxTdHJpbmdWYWx1ZUJsb2NrIGV4dGVuZHMgSGV4QmxvY2soVmFsdWVCbG9jaykge1xyXG4gICAgY29uc3RydWN0b3IoeyAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaXNIZXhPbmx5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnZhbHVlID0gRU1QVFlfU1RSSU5HO1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbkxvY2FsU3RyaW5nVmFsdWVCbG9jay5OQU1FID0gXCJTdHJpbmdWYWx1ZUJsb2NrXCI7XG5cbmNsYXNzIExvY2FsU2ltcGxlU3RyaW5nVmFsdWVCbG9jayBleHRlbmRzIExvY2FsU3RyaW5nVmFsdWVCbG9jayB7XHJcbn1cclxuTG9jYWxTaW1wbGVTdHJpbmdWYWx1ZUJsb2NrLk5BTUUgPSBcIlNpbXBsZVN0cmluZ1ZhbHVlQmxvY2tcIjtcblxuY2xhc3MgTG9jYWxTaW1wbGVTdHJpbmdCbG9jayBleHRlbmRzIEJhc2VTdHJpbmdCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycywgTG9jYWxTaW1wbGVTdHJpbmdWYWx1ZUJsb2NrKTtcclxuICAgIH1cclxuICAgIGZyb21CdWZmZXIoaW5wdXRCdWZmZXIpIHtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGlucHV0QnVmZmVyKSk7XHJcbiAgICB9XHJcbiAgICBmcm9tU3RyaW5nKGlucHV0U3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3Qgc3RyTGVuID0gaW5wdXRTdHJpbmcubGVuZ3RoO1xyXG4gICAgICAgIGNvbnN0IHZpZXcgPSB0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoc3RyTGVuKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ckxlbjsgaSsrKVxyXG4gICAgICAgICAgICB2aWV3W2ldID0gaW5wdXRTdHJpbmcuY2hhckNvZGVBdChpKTtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWUgPSBpbnB1dFN0cmluZztcclxuICAgIH1cclxufVxyXG5Mb2NhbFNpbXBsZVN0cmluZ0Jsb2NrLk5BTUUgPSBcIlNJTVBMRSBTVFJJTkdcIjtcblxuY2xhc3MgTG9jYWxVdGY4U3RyaW5nVmFsdWVCbG9jayBleHRlbmRzIExvY2FsU2ltcGxlU3RyaW5nQmxvY2sge1xyXG4gICAgZnJvbUJ1ZmZlcihpbnB1dEJ1ZmZlcikge1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXcgPSBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShpbnB1dEJ1ZmZlcik7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlID0gcHZ0c3V0aWxzLkNvbnZlcnQuVG9VdGY4U3RyaW5nKGlucHV0QnVmZmVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGV4KSB7XHJcbiAgICAgICAgICAgIHRoaXMud2FybmluZ3MucHVzaChgRXJyb3IgZHVyaW5nIFwiZGVjb2RlVVJJQ29tcG9uZW50XCI6ICR7ZXh9LCB1c2luZyByYXcgc3RyaW5nYCk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZSA9IHB2dHN1dGlscy5Db252ZXJ0LlRvQmluYXJ5KGlucHV0QnVmZmVyKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmcm9tU3RyaW5nKGlucHV0U3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4VmlldyA9IG5ldyBVaW50OEFycmF5KHB2dHN1dGlscy5Db252ZXJ0LkZyb21VdGY4U3RyaW5nKGlucHV0U3RyaW5nKSk7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlID0gaW5wdXRTdHJpbmc7XHJcbiAgICB9XHJcbn1cclxuTG9jYWxVdGY4U3RyaW5nVmFsdWVCbG9jay5OQU1FID0gXCJVdGY4U3RyaW5nVmFsdWVCbG9ja1wiO1xuXG52YXIgX2EkaTtcclxuY2xhc3MgVXRmOFN0cmluZyBleHRlbmRzIExvY2FsVXRmOFN0cmluZ1ZhbHVlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMTI7XHJcbiAgICB9XHJcbn1cclxuX2EkaSA9IFV0ZjhTdHJpbmc7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuVXRmOFN0cmluZyA9IF9hJGk7XHJcbn0pKCk7XHJcblV0ZjhTdHJpbmcuTkFNRSA9IFwiVVRGOFN0cmluZ1wiO1xuXG5jbGFzcyBMb2NhbEJtcFN0cmluZ1ZhbHVlQmxvY2sgZXh0ZW5kcyBMb2NhbFNpbXBsZVN0cmluZ0Jsb2NrIHtcclxuICAgIGZyb21CdWZmZXIoaW5wdXRCdWZmZXIpIHtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWUgPSBwdnRzdXRpbHMuQ29udmVydC5Ub1V0ZjE2U3RyaW5nKGlucHV0QnVmZmVyKTtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3ID0gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoaW5wdXRCdWZmZXIpO1xyXG4gICAgfVxyXG4gICAgZnJvbVN0cmluZyhpbnB1dFN0cmluZykge1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZSA9IGlucHV0U3RyaW5nO1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXcgPSBuZXcgVWludDhBcnJheShwdnRzdXRpbHMuQ29udmVydC5Gcm9tVXRmMTZTdHJpbmcoaW5wdXRTdHJpbmcpKTtcclxuICAgIH1cclxufVxyXG5Mb2NhbEJtcFN0cmluZ1ZhbHVlQmxvY2suTkFNRSA9IFwiQm1wU3RyaW5nVmFsdWVCbG9ja1wiO1xuXG52YXIgX2EkaDtcclxuY2xhc3MgQm1wU3RyaW5nIGV4dGVuZHMgTG9jYWxCbXBTdHJpbmdWYWx1ZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAzMDtcclxuICAgIH1cclxufVxyXG5fYSRoID0gQm1wU3RyaW5nO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLkJtcFN0cmluZyA9IF9hJGg7XHJcbn0pKCk7XHJcbkJtcFN0cmluZy5OQU1FID0gXCJCTVBTdHJpbmdcIjtcblxuY2xhc3MgTG9jYWxVbml2ZXJzYWxTdHJpbmdWYWx1ZUJsb2NrIGV4dGVuZHMgTG9jYWxTaW1wbGVTdHJpbmdCbG9jayB7XHJcbiAgICBmcm9tQnVmZmVyKGlucHV0QnVmZmVyKSB7XHJcbiAgICAgICAgY29uc3QgY29weUJ1ZmZlciA9IEFycmF5QnVmZmVyLmlzVmlldyhpbnB1dEJ1ZmZlcikgPyBpbnB1dEJ1ZmZlci5zbGljZSgpLmJ1ZmZlciA6IGlucHV0QnVmZmVyLnNsaWNlKDApO1xyXG4gICAgICAgIGNvbnN0IHZhbHVlVmlldyA9IG5ldyBVaW50OEFycmF5KGNvcHlCdWZmZXIpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWVWaWV3Lmxlbmd0aDsgaSArPSA0KSB7XHJcbiAgICAgICAgICAgIHZhbHVlVmlld1tpXSA9IHZhbHVlVmlld1tpICsgM107XHJcbiAgICAgICAgICAgIHZhbHVlVmlld1tpICsgMV0gPSB2YWx1ZVZpZXdbaSArIDJdO1xyXG4gICAgICAgICAgICB2YWx1ZVZpZXdbaSArIDJdID0gMHgwMDtcclxuICAgICAgICAgICAgdmFsdWVWaWV3W2kgKyAzXSA9IDB4MDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZSA9IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgbmV3IFVpbnQzMkFycmF5KGNvcHlCdWZmZXIpKTtcclxuICAgIH1cclxuICAgIGZyb21TdHJpbmcoaW5wdXRTdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBzdHJMZW5ndGggPSBpbnB1dFN0cmluZy5sZW5ndGg7XHJcbiAgICAgICAgY29uc3QgdmFsdWVIZXhWaWV3ID0gdGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4VmlldyA9IG5ldyBVaW50OEFycmF5KHN0ckxlbmd0aCAqIDQpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyTGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgY29kZUJ1ZiA9IHB2dXRpbHMudXRpbFRvQmFzZShpbnB1dFN0cmluZy5jaGFyQ29kZUF0KGkpLCA4KTtcclxuICAgICAgICAgICAgY29uc3QgY29kZVZpZXcgPSBuZXcgVWludDhBcnJheShjb2RlQnVmKTtcclxuICAgICAgICAgICAgaWYgKGNvZGVWaWV3Lmxlbmd0aCA+IDQpXHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgY29uc3QgZGlmID0gNCAtIGNvZGVWaWV3Lmxlbmd0aDtcclxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IChjb2RlVmlldy5sZW5ndGggLSAxKTsgaiA+PSAwOyBqLS0pXHJcbiAgICAgICAgICAgICAgICB2YWx1ZUhleFZpZXdbaSAqIDQgKyBqICsgZGlmXSA9IGNvZGVWaWV3W2pdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWUgPSBpbnB1dFN0cmluZztcclxuICAgIH1cclxufVxyXG5Mb2NhbFVuaXZlcnNhbFN0cmluZ1ZhbHVlQmxvY2suTkFNRSA9IFwiVW5pdmVyc2FsU3RyaW5nVmFsdWVCbG9ja1wiO1xuXG52YXIgX2EkZztcclxuY2xhc3MgVW5pdmVyc2FsU3RyaW5nIGV4dGVuZHMgTG9jYWxVbml2ZXJzYWxTdHJpbmdWYWx1ZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAyODtcclxuICAgIH1cclxufVxyXG5fYSRnID0gVW5pdmVyc2FsU3RyaW5nO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLlVuaXZlcnNhbFN0cmluZyA9IF9hJGc7XHJcbn0pKCk7XHJcblVuaXZlcnNhbFN0cmluZy5OQU1FID0gXCJVbml2ZXJzYWxTdHJpbmdcIjtcblxudmFyIF9hJGY7XHJcbmNsYXNzIE51bWVyaWNTdHJpbmcgZXh0ZW5kcyBMb2NhbFNpbXBsZVN0cmluZ0Jsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDE4O1xyXG4gICAgfVxyXG59XHJcbl9hJGYgPSBOdW1lcmljU3RyaW5nO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLk51bWVyaWNTdHJpbmcgPSBfYSRmO1xyXG59KSgpO1xyXG5OdW1lcmljU3RyaW5nLk5BTUUgPSBcIk51bWVyaWNTdHJpbmdcIjtcblxudmFyIF9hJGU7XHJcbmNsYXNzIFByaW50YWJsZVN0cmluZyBleHRlbmRzIExvY2FsU2ltcGxlU3RyaW5nQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMTk7XHJcbiAgICB9XHJcbn1cclxuX2EkZSA9IFByaW50YWJsZVN0cmluZztcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5QcmludGFibGVTdHJpbmcgPSBfYSRlO1xyXG59KSgpO1xyXG5QcmludGFibGVTdHJpbmcuTkFNRSA9IFwiUHJpbnRhYmxlU3RyaW5nXCI7XG5cbnZhciBfYSRkO1xyXG5jbGFzcyBUZWxldGV4U3RyaW5nIGV4dGVuZHMgTG9jYWxTaW1wbGVTdHJpbmdCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAyMDtcclxuICAgIH1cclxufVxyXG5fYSRkID0gVGVsZXRleFN0cmluZztcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5UZWxldGV4U3RyaW5nID0gX2EkZDtcclxufSkoKTtcclxuVGVsZXRleFN0cmluZy5OQU1FID0gXCJUZWxldGV4U3RyaW5nXCI7XG5cbnZhciBfYSRjO1xyXG5jbGFzcyBWaWRlb3RleFN0cmluZyBleHRlbmRzIExvY2FsU2ltcGxlU3RyaW5nQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMjE7XHJcbiAgICB9XHJcbn1cclxuX2EkYyA9IFZpZGVvdGV4U3RyaW5nO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLlZpZGVvdGV4U3RyaW5nID0gX2EkYztcclxufSkoKTtcclxuVmlkZW90ZXhTdHJpbmcuTkFNRSA9IFwiVmlkZW90ZXhTdHJpbmdcIjtcblxudmFyIF9hJGI7XHJcbmNsYXNzIElBNVN0cmluZyBleHRlbmRzIExvY2FsU2ltcGxlU3RyaW5nQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMjI7XHJcbiAgICB9XHJcbn1cclxuX2EkYiA9IElBNVN0cmluZztcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5JQTVTdHJpbmcgPSBfYSRiO1xyXG59KSgpO1xyXG5JQTVTdHJpbmcuTkFNRSA9IFwiSUE1U3RyaW5nXCI7XG5cbnZhciBfYSRhO1xyXG5jbGFzcyBHcmFwaGljU3RyaW5nIGV4dGVuZHMgTG9jYWxTaW1wbGVTdHJpbmdCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAyNTtcclxuICAgIH1cclxufVxyXG5fYSRhID0gR3JhcGhpY1N0cmluZztcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5HcmFwaGljU3RyaW5nID0gX2EkYTtcclxufSkoKTtcclxuR3JhcGhpY1N0cmluZy5OQU1FID0gXCJHcmFwaGljU3RyaW5nXCI7XG5cbnZhciBfYSQ5O1xyXG5jbGFzcyBWaXNpYmxlU3RyaW5nIGV4dGVuZHMgTG9jYWxTaW1wbGVTdHJpbmdCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAyNjtcclxuICAgIH1cclxufVxyXG5fYSQ5ID0gVmlzaWJsZVN0cmluZztcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5WaXNpYmxlU3RyaW5nID0gX2EkOTtcclxufSkoKTtcclxuVmlzaWJsZVN0cmluZy5OQU1FID0gXCJWaXNpYmxlU3RyaW5nXCI7XG5cbnZhciBfYSQ4O1xyXG5jbGFzcyBHZW5lcmFsU3RyaW5nIGV4dGVuZHMgTG9jYWxTaW1wbGVTdHJpbmdCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAyNztcclxuICAgIH1cclxufVxyXG5fYSQ4ID0gR2VuZXJhbFN0cmluZztcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5HZW5lcmFsU3RyaW5nID0gX2EkODtcclxufSkoKTtcclxuR2VuZXJhbFN0cmluZy5OQU1FID0gXCJHZW5lcmFsU3RyaW5nXCI7XG5cbnZhciBfYSQ3O1xyXG5jbGFzcyBDaGFyYWN0ZXJTdHJpbmcgZXh0ZW5kcyBMb2NhbFNpbXBsZVN0cmluZ0Jsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDI5O1xyXG4gICAgfVxyXG59XHJcbl9hJDcgPSBDaGFyYWN0ZXJTdHJpbmc7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuQ2hhcmFjdGVyU3RyaW5nID0gX2EkNztcclxufSkoKTtcclxuQ2hhcmFjdGVyU3RyaW5nLk5BTUUgPSBcIkNoYXJhY3RlclN0cmluZ1wiO1xuXG52YXIgX2EkNjtcclxuY2xhc3MgVVRDVGltZSBleHRlbmRzIFZpc2libGVTdHJpbmcge1xyXG4gICAgY29uc3RydWN0b3IoeyB2YWx1ZSwgdmFsdWVEYXRlLCAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMueWVhciA9IDA7XHJcbiAgICAgICAgdGhpcy5tb250aCA9IDA7XHJcbiAgICAgICAgdGhpcy5kYXkgPSAwO1xyXG4gICAgICAgIHRoaXMuaG91ciA9IDA7XHJcbiAgICAgICAgdGhpcy5taW51dGUgPSAwO1xyXG4gICAgICAgIHRoaXMuc2Vjb25kID0gMDtcclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5mcm9tU3RyaW5nKHZhbHVlKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4VmlldyA9IG5ldyBVaW50OEFycmF5KHZhbHVlLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3W2ldID0gdmFsdWUuY2hhckNvZGVBdChpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZhbHVlRGF0ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZyb21EYXRlKHZhbHVlRGF0ZSk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXcgPSBuZXcgVWludDhBcnJheSh0aGlzLnRvQnVmZmVyKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAyMztcclxuICAgIH1cclxuICAgIGZyb21CdWZmZXIoaW5wdXRCdWZmZXIpIHtcclxuICAgICAgICB0aGlzLmZyb21TdHJpbmcoU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShpbnB1dEJ1ZmZlcikpKTtcclxuICAgIH1cclxuICAgIHRvQnVmZmVyKCkge1xyXG4gICAgICAgIGNvbnN0IHN0ciA9IHRoaXMudG9TdHJpbmcoKTtcclxuICAgICAgICBjb25zdCBidWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoc3RyLmxlbmd0aCk7XHJcbiAgICAgICAgY29uc3QgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIHZpZXdbaV0gPSBzdHIuY2hhckNvZGVBdChpKTtcclxuICAgICAgICByZXR1cm4gYnVmZmVyO1xyXG4gICAgfVxyXG4gICAgZnJvbURhdGUoaW5wdXREYXRlKSB7XHJcbiAgICAgICAgdGhpcy55ZWFyID0gaW5wdXREYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XHJcbiAgICAgICAgdGhpcy5tb250aCA9IGlucHV0RGF0ZS5nZXRVVENNb250aCgpICsgMTtcclxuICAgICAgICB0aGlzLmRheSA9IGlucHV0RGF0ZS5nZXRVVENEYXRlKCk7XHJcbiAgICAgICAgdGhpcy5ob3VyID0gaW5wdXREYXRlLmdldFVUQ0hvdXJzKCk7XHJcbiAgICAgICAgdGhpcy5taW51dGUgPSBpbnB1dERhdGUuZ2V0VVRDTWludXRlcygpO1xyXG4gICAgICAgIHRoaXMuc2Vjb25kID0gaW5wdXREYXRlLmdldFVUQ1NlY29uZHMoKTtcclxuICAgIH1cclxuICAgIHRvRGF0ZSgpIHtcclxuICAgICAgICByZXR1cm4gKG5ldyBEYXRlKERhdGUuVVRDKHRoaXMueWVhciwgdGhpcy5tb250aCAtIDEsIHRoaXMuZGF5LCB0aGlzLmhvdXIsIHRoaXMubWludXRlLCB0aGlzLnNlY29uZCkpKTtcclxuICAgIH1cclxuICAgIGZyb21TdHJpbmcoaW5wdXRTdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBwYXJzZXIgPSAvKFxcZHsyfSkoXFxkezJ9KShcXGR7Mn0pKFxcZHsyfSkoXFxkezJ9KShcXGR7Mn0pWi9pZztcclxuICAgICAgICBjb25zdCBwYXJzZXJBcnJheSA9IHBhcnNlci5leGVjKGlucHV0U3RyaW5nKTtcclxuICAgICAgICBpZiAocGFyc2VyQXJyYXkgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiV3JvbmcgaW5wdXQgc3RyaW5nIGZvciBjb252ZXJzaW9uXCI7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgeWVhciA9IHBhcnNlSW50KHBhcnNlckFycmF5WzFdLCAxMCk7XHJcbiAgICAgICAgaWYgKHllYXIgPj0gNTApXHJcbiAgICAgICAgICAgIHRoaXMueWVhciA9IDE5MDAgKyB5ZWFyO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy55ZWFyID0gMjAwMCArIHllYXI7XHJcbiAgICAgICAgdGhpcy5tb250aCA9IHBhcnNlSW50KHBhcnNlckFycmF5WzJdLCAxMCk7XHJcbiAgICAgICAgdGhpcy5kYXkgPSBwYXJzZUludChwYXJzZXJBcnJheVszXSwgMTApO1xyXG4gICAgICAgIHRoaXMuaG91ciA9IHBhcnNlSW50KHBhcnNlckFycmF5WzRdLCAxMCk7XHJcbiAgICAgICAgdGhpcy5taW51dGUgPSBwYXJzZUludChwYXJzZXJBcnJheVs1XSwgMTApO1xyXG4gICAgICAgIHRoaXMuc2Vjb25kID0gcGFyc2VJbnQocGFyc2VyQXJyYXlbNl0sIDEwKTtcclxuICAgIH1cclxuICAgIHRvU3RyaW5nKGVuY29kaW5nID0gXCJpc29cIikge1xyXG4gICAgICAgIGlmIChlbmNvZGluZyA9PT0gXCJpc29cIikge1xyXG4gICAgICAgICAgICBjb25zdCBvdXRwdXRBcnJheSA9IG5ldyBBcnJheSg3KTtcclxuICAgICAgICAgICAgb3V0cHV0QXJyYXlbMF0gPSBwdnV0aWxzLnBhZE51bWJlcigoKHRoaXMueWVhciA8IDIwMDApID8gKHRoaXMueWVhciAtIDE5MDApIDogKHRoaXMueWVhciAtIDIwMDApKSwgMik7XHJcbiAgICAgICAgICAgIG91dHB1dEFycmF5WzFdID0gcHZ1dGlscy5wYWROdW1iZXIodGhpcy5tb250aCwgMik7XHJcbiAgICAgICAgICAgIG91dHB1dEFycmF5WzJdID0gcHZ1dGlscy5wYWROdW1iZXIodGhpcy5kYXksIDIpO1xyXG4gICAgICAgICAgICBvdXRwdXRBcnJheVszXSA9IHB2dXRpbHMucGFkTnVtYmVyKHRoaXMuaG91ciwgMik7XHJcbiAgICAgICAgICAgIG91dHB1dEFycmF5WzRdID0gcHZ1dGlscy5wYWROdW1iZXIodGhpcy5taW51dGUsIDIpO1xyXG4gICAgICAgICAgICBvdXRwdXRBcnJheVs1XSA9IHB2dXRpbHMucGFkTnVtYmVyKHRoaXMuc2Vjb25kLCAyKTtcclxuICAgICAgICAgICAgb3V0cHV0QXJyYXlbNl0gPSBcIlpcIjtcclxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dEFycmF5LmpvaW4oXCJcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzdXBlci50b1N0cmluZyhlbmNvZGluZyk7XHJcbiAgICB9XHJcbiAgICBvbkFzY2lpRW5jb2RpbmcoKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY29uc3RydWN0b3IuTkFNRX0gOiAke3RoaXMudG9EYXRlKCkudG9JU09TdHJpbmcoKX1gO1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICB5ZWFyOiB0aGlzLnllYXIsXHJcbiAgICAgICAgICAgIG1vbnRoOiB0aGlzLm1vbnRoLFxyXG4gICAgICAgICAgICBkYXk6IHRoaXMuZGF5LFxyXG4gICAgICAgICAgICBob3VyOiB0aGlzLmhvdXIsXHJcbiAgICAgICAgICAgIG1pbnV0ZTogdGhpcy5taW51dGUsXHJcbiAgICAgICAgICAgIHNlY29uZDogdGhpcy5zZWNvbmQsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5fYSQ2ID0gVVRDVGltZTtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5VVENUaW1lID0gX2EkNjtcclxufSkoKTtcclxuVVRDVGltZS5OQU1FID0gXCJVVENUaW1lXCI7XG5cbnZhciBfYSQ1O1xyXG5jbGFzcyBHZW5lcmFsaXplZFRpbWUgZXh0ZW5kcyBVVENUaW1lIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHZhciBfYjtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICAoX2IgPSB0aGlzLm1pbGxpc2Vjb25kKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAodGhpcy5taWxsaXNlY29uZCA9IDApO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDI0O1xyXG4gICAgfVxyXG4gICAgZnJvbURhdGUoaW5wdXREYXRlKSB7XHJcbiAgICAgICAgc3VwZXIuZnJvbURhdGUoaW5wdXREYXRlKTtcclxuICAgICAgICB0aGlzLm1pbGxpc2Vjb25kID0gaW5wdXREYXRlLmdldFVUQ01pbGxpc2Vjb25kcygpO1xyXG4gICAgfVxyXG4gICAgdG9EYXRlKCkge1xyXG4gICAgICAgIHJldHVybiAobmV3IERhdGUoRGF0ZS5VVEModGhpcy55ZWFyLCB0aGlzLm1vbnRoIC0gMSwgdGhpcy5kYXksIHRoaXMuaG91ciwgdGhpcy5taW51dGUsIHRoaXMuc2Vjb25kLCB0aGlzLm1pbGxpc2Vjb25kKSkpO1xyXG4gICAgfVxyXG4gICAgZnJvbVN0cmluZyhpbnB1dFN0cmluZykge1xyXG4gICAgICAgIGxldCBpc1VUQyA9IGZhbHNlO1xyXG4gICAgICAgIGxldCB0aW1lU3RyaW5nID0gXCJcIjtcclxuICAgICAgICBsZXQgZGF0ZVRpbWVTdHJpbmcgPSBcIlwiO1xyXG4gICAgICAgIGxldCBmcmFjdGlvblBhcnQgPSAwO1xyXG4gICAgICAgIGxldCBwYXJzZXI7XHJcbiAgICAgICAgbGV0IGhvdXJEaWZmZXJlbmNlID0gMDtcclxuICAgICAgICBsZXQgbWludXRlRGlmZmVyZW5jZSA9IDA7XHJcbiAgICAgICAgaWYgKGlucHV0U3RyaW5nW2lucHV0U3RyaW5nLmxlbmd0aCAtIDFdID09PSBcIlpcIikge1xyXG4gICAgICAgICAgICB0aW1lU3RyaW5nID0gaW5wdXRTdHJpbmcuc3Vic3RyaW5nKDAsIGlucHV0U3RyaW5nLmxlbmd0aCAtIDEpO1xyXG4gICAgICAgICAgICBpc1VUQyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBudW1iZXIgPSBuZXcgTnVtYmVyKGlucHV0U3RyaW5nW2lucHV0U3RyaW5nLmxlbmd0aCAtIDFdKTtcclxuICAgICAgICAgICAgaWYgKGlzTmFOKG51bWJlci52YWx1ZU9mKCkpKVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV3JvbmcgaW5wdXQgc3RyaW5nIGZvciBjb252ZXJzaW9uXCIpO1xyXG4gICAgICAgICAgICB0aW1lU3RyaW5nID0gaW5wdXRTdHJpbmc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc1VUQykge1xyXG4gICAgICAgICAgICBpZiAodGltZVN0cmluZy5pbmRleE9mKFwiK1wiKSAhPT0gLTEpXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXcm9uZyBpbnB1dCBzdHJpbmcgZm9yIGNvbnZlcnNpb25cIik7XHJcbiAgICAgICAgICAgIGlmICh0aW1lU3RyaW5nLmluZGV4T2YoXCItXCIpICE9PSAtMSlcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIldyb25nIGlucHV0IHN0cmluZyBmb3IgY29udmVyc2lvblwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBtdWx0aXBsaWVyID0gMTtcclxuICAgICAgICAgICAgbGV0IGRpZmZlcmVuY2VQb3NpdGlvbiA9IHRpbWVTdHJpbmcuaW5kZXhPZihcIitcIik7XHJcbiAgICAgICAgICAgIGxldCBkaWZmZXJlbmNlU3RyaW5nID0gXCJcIjtcclxuICAgICAgICAgICAgaWYgKGRpZmZlcmVuY2VQb3NpdGlvbiA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VQb3NpdGlvbiA9IHRpbWVTdHJpbmcuaW5kZXhPZihcIi1cIik7XHJcbiAgICAgICAgICAgICAgICBtdWx0aXBsaWVyID0gLTE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGRpZmZlcmVuY2VQb3NpdGlvbiAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VTdHJpbmcgPSB0aW1lU3RyaW5nLnN1YnN0cmluZyhkaWZmZXJlbmNlUG9zaXRpb24gKyAxKTtcclxuICAgICAgICAgICAgICAgIHRpbWVTdHJpbmcgPSB0aW1lU3RyaW5nLnN1YnN0cmluZygwLCBkaWZmZXJlbmNlUG9zaXRpb24pO1xyXG4gICAgICAgICAgICAgICAgaWYgKChkaWZmZXJlbmNlU3RyaW5nLmxlbmd0aCAhPT0gMikgJiYgKGRpZmZlcmVuY2VTdHJpbmcubGVuZ3RoICE9PSA0KSlcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXcm9uZyBpbnB1dCBzdHJpbmcgZm9yIGNvbnZlcnNpb25cIik7XHJcbiAgICAgICAgICAgICAgICBsZXQgbnVtYmVyID0gcGFyc2VJbnQoZGlmZmVyZW5jZVN0cmluZy5zdWJzdHJpbmcoMCwgMiksIDEwKTtcclxuICAgICAgICAgICAgICAgIGlmIChpc05hTihudW1iZXIudmFsdWVPZigpKSlcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXcm9uZyBpbnB1dCBzdHJpbmcgZm9yIGNvbnZlcnNpb25cIik7XHJcbiAgICAgICAgICAgICAgICBob3VyRGlmZmVyZW5jZSA9IG11bHRpcGxpZXIgKiBudW1iZXI7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGlmZmVyZW5jZVN0cmluZy5sZW5ndGggPT09IDQpIHtcclxuICAgICAgICAgICAgICAgICAgICBudW1iZXIgPSBwYXJzZUludChkaWZmZXJlbmNlU3RyaW5nLnN1YnN0cmluZygyLCA0KSwgMTApO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc05hTihudW1iZXIudmFsdWVPZigpKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV3JvbmcgaW5wdXQgc3RyaW5nIGZvciBjb252ZXJzaW9uXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIG1pbnV0ZURpZmZlcmVuY2UgPSBtdWx0aXBsaWVyICogbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBmcmFjdGlvblBvaW50UG9zaXRpb24gPSB0aW1lU3RyaW5nLmluZGV4T2YoXCIuXCIpO1xyXG4gICAgICAgIGlmIChmcmFjdGlvblBvaW50UG9zaXRpb24gPT09IC0xKVxyXG4gICAgICAgICAgICBmcmFjdGlvblBvaW50UG9zaXRpb24gPSB0aW1lU3RyaW5nLmluZGV4T2YoXCIsXCIpO1xyXG4gICAgICAgIGlmIChmcmFjdGlvblBvaW50UG9zaXRpb24gIT09IC0xKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZyYWN0aW9uUGFydENoZWNrID0gbmV3IE51bWJlcihgMCR7dGltZVN0cmluZy5zdWJzdHJpbmcoZnJhY3Rpb25Qb2ludFBvc2l0aW9uKX1gKTtcclxuICAgICAgICAgICAgaWYgKGlzTmFOKGZyYWN0aW9uUGFydENoZWNrLnZhbHVlT2YoKSkpXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXcm9uZyBpbnB1dCBzdHJpbmcgZm9yIGNvbnZlcnNpb25cIik7XHJcbiAgICAgICAgICAgIGZyYWN0aW9uUGFydCA9IGZyYWN0aW9uUGFydENoZWNrLnZhbHVlT2YoKTtcclxuICAgICAgICAgICAgZGF0ZVRpbWVTdHJpbmcgPSB0aW1lU3RyaW5nLnN1YnN0cmluZygwLCBmcmFjdGlvblBvaW50UG9zaXRpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIGRhdGVUaW1lU3RyaW5nID0gdGltZVN0cmluZztcclxuICAgICAgICBzd2l0Y2ggKHRydWUpIHtcclxuICAgICAgICAgICAgY2FzZSAoZGF0ZVRpbWVTdHJpbmcubGVuZ3RoID09PSA4KTpcclxuICAgICAgICAgICAgICAgIHBhcnNlciA9IC8oXFxkezR9KShcXGR7Mn0pKFxcZHsyfSkvaWc7XHJcbiAgICAgICAgICAgICAgICBpZiAoZnJhY3Rpb25Qb2ludFBvc2l0aW9uICE9PSAtMSlcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXcm9uZyBpbnB1dCBzdHJpbmcgZm9yIGNvbnZlcnNpb25cIik7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAoZGF0ZVRpbWVTdHJpbmcubGVuZ3RoID09PSAxMCk6XHJcbiAgICAgICAgICAgICAgICBwYXJzZXIgPSAvKFxcZHs0fSkoXFxkezJ9KShcXGR7Mn0pKFxcZHsyfSkvaWc7XHJcbiAgICAgICAgICAgICAgICBpZiAoZnJhY3Rpb25Qb2ludFBvc2l0aW9uICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBmcmFjdGlvblJlc3VsdCA9IDYwICogZnJhY3Rpb25QYXJ0O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWludXRlID0gTWF0aC5mbG9vcihmcmFjdGlvblJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZnJhY3Rpb25SZXN1bHQgPSA2MCAqIChmcmFjdGlvblJlc3VsdCAtIHRoaXMubWludXRlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlY29uZCA9IE1hdGguZmxvb3IoZnJhY3Rpb25SZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZyYWN0aW9uUmVzdWx0ID0gMTAwMCAqIChmcmFjdGlvblJlc3VsdCAtIHRoaXMuc2Vjb25kKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1pbGxpc2Vjb25kID0gTWF0aC5mbG9vcihmcmFjdGlvblJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAoZGF0ZVRpbWVTdHJpbmcubGVuZ3RoID09PSAxMik6XHJcbiAgICAgICAgICAgICAgICBwYXJzZXIgPSAvKFxcZHs0fSkoXFxkezJ9KShcXGR7Mn0pKFxcZHsyfSkoXFxkezJ9KS9pZztcclxuICAgICAgICAgICAgICAgIGlmIChmcmFjdGlvblBvaW50UG9zaXRpb24gIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZyYWN0aW9uUmVzdWx0ID0gNjAgKiBmcmFjdGlvblBhcnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWNvbmQgPSBNYXRoLmZsb29yKGZyYWN0aW9uUmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICBmcmFjdGlvblJlc3VsdCA9IDEwMDAgKiAoZnJhY3Rpb25SZXN1bHQgLSB0aGlzLnNlY29uZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5taWxsaXNlY29uZCA9IE1hdGguZmxvb3IoZnJhY3Rpb25SZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgKGRhdGVUaW1lU3RyaW5nLmxlbmd0aCA9PT0gMTQpOlxyXG4gICAgICAgICAgICAgICAgcGFyc2VyID0gLyhcXGR7NH0pKFxcZHsyfSkoXFxkezJ9KShcXGR7Mn0pKFxcZHsyfSkoXFxkezJ9KS9pZztcclxuICAgICAgICAgICAgICAgIGlmIChmcmFjdGlvblBvaW50UG9zaXRpb24gIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZnJhY3Rpb25SZXN1bHQgPSAxMDAwICogZnJhY3Rpb25QYXJ0O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWlsbGlzZWNvbmQgPSBNYXRoLmZsb29yKGZyYWN0aW9uUmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV3JvbmcgaW5wdXQgc3RyaW5nIGZvciBjb252ZXJzaW9uXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBwYXJzZXJBcnJheSA9IHBhcnNlci5leGVjKGRhdGVUaW1lU3RyaW5nKTtcclxuICAgICAgICBpZiAocGFyc2VyQXJyYXkgPT09IG51bGwpXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIldyb25nIGlucHV0IHN0cmluZyBmb3IgY29udmVyc2lvblwiKTtcclxuICAgICAgICBmb3IgKGxldCBqID0gMTsgaiA8IHBhcnNlckFycmF5Lmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAoaikge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMueWVhciA9IHBhcnNlSW50KHBhcnNlckFycmF5W2pdLCAxMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCA9IHBhcnNlSW50KHBhcnNlckFycmF5W2pdLCAxMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXkgPSBwYXJzZUludChwYXJzZXJBcnJheVtqXSwgMTApO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaG91ciA9IHBhcnNlSW50KHBhcnNlckFycmF5W2pdLCAxMCkgKyBob3VyRGlmZmVyZW5jZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNTpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1pbnV0ZSA9IHBhcnNlSW50KHBhcnNlckFycmF5W2pdLCAxMCkgKyBtaW51dGVEaWZmZXJlbmNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA2OlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vjb25kID0gcGFyc2VJbnQocGFyc2VyQXJyYXlbal0sIDEwKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV3JvbmcgaW5wdXQgc3RyaW5nIGZvciBjb252ZXJzaW9uXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc1VUQyA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgY29uc3QgdGVtcERhdGUgPSBuZXcgRGF0ZSh0aGlzLnllYXIsIHRoaXMubW9udGgsIHRoaXMuZGF5LCB0aGlzLmhvdXIsIHRoaXMubWludXRlLCB0aGlzLnNlY29uZCwgdGhpcy5taWxsaXNlY29uZCk7XHJcbiAgICAgICAgICAgIHRoaXMueWVhciA9IHRlbXBEYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XHJcbiAgICAgICAgICAgIHRoaXMubW9udGggPSB0ZW1wRGF0ZS5nZXRVVENNb250aCgpO1xyXG4gICAgICAgICAgICB0aGlzLmRheSA9IHRlbXBEYXRlLmdldFVUQ0RheSgpO1xyXG4gICAgICAgICAgICB0aGlzLmhvdXIgPSB0ZW1wRGF0ZS5nZXRVVENIb3VycygpO1xyXG4gICAgICAgICAgICB0aGlzLm1pbnV0ZSA9IHRlbXBEYXRlLmdldFVUQ01pbnV0ZXMoKTtcclxuICAgICAgICAgICAgdGhpcy5zZWNvbmQgPSB0ZW1wRGF0ZS5nZXRVVENTZWNvbmRzKCk7XHJcbiAgICAgICAgICAgIHRoaXMubWlsbGlzZWNvbmQgPSB0ZW1wRGF0ZS5nZXRVVENNaWxsaXNlY29uZHMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB0b1N0cmluZyhlbmNvZGluZyA9IFwiaXNvXCIpIHtcclxuICAgICAgICBpZiAoZW5jb2RpbmcgPT09IFwiaXNvXCIpIHtcclxuICAgICAgICAgICAgY29uc3Qgb3V0cHV0QXJyYXkgPSBbXTtcclxuICAgICAgICAgICAgb3V0cHV0QXJyYXkucHVzaChwdnV0aWxzLnBhZE51bWJlcih0aGlzLnllYXIsIDQpKTtcclxuICAgICAgICAgICAgb3V0cHV0QXJyYXkucHVzaChwdnV0aWxzLnBhZE51bWJlcih0aGlzLm1vbnRoLCAyKSk7XHJcbiAgICAgICAgICAgIG91dHB1dEFycmF5LnB1c2gocHZ1dGlscy5wYWROdW1iZXIodGhpcy5kYXksIDIpKTtcclxuICAgICAgICAgICAgb3V0cHV0QXJyYXkucHVzaChwdnV0aWxzLnBhZE51bWJlcih0aGlzLmhvdXIsIDIpKTtcclxuICAgICAgICAgICAgb3V0cHV0QXJyYXkucHVzaChwdnV0aWxzLnBhZE51bWJlcih0aGlzLm1pbnV0ZSwgMikpO1xyXG4gICAgICAgICAgICBvdXRwdXRBcnJheS5wdXNoKHB2dXRpbHMucGFkTnVtYmVyKHRoaXMuc2Vjb25kLCAyKSk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm1pbGxpc2Vjb25kICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXRBcnJheS5wdXNoKFwiLlwiKTtcclxuICAgICAgICAgICAgICAgIG91dHB1dEFycmF5LnB1c2gocHZ1dGlscy5wYWROdW1iZXIodGhpcy5taWxsaXNlY29uZCwgMykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG91dHB1dEFycmF5LnB1c2goXCJaXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0QXJyYXkuam9pbihcIlwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKGVuY29kaW5nKTtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgbWlsbGlzZWNvbmQ6IHRoaXMubWlsbGlzZWNvbmQsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5fYSQ1ID0gR2VuZXJhbGl6ZWRUaW1lO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLkdlbmVyYWxpemVkVGltZSA9IF9hJDU7XHJcbn0pKCk7XHJcbkdlbmVyYWxpemVkVGltZS5OQU1FID0gXCJHZW5lcmFsaXplZFRpbWVcIjtcblxudmFyIF9hJDQ7XHJcbmNsYXNzIERBVEUgZXh0ZW5kcyBVdGY4U3RyaW5nIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDMxO1xyXG4gICAgfVxyXG59XHJcbl9hJDQgPSBEQVRFO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLkRBVEUgPSBfYSQ0O1xyXG59KSgpO1xyXG5EQVRFLk5BTUUgPSBcIkRBVEVcIjtcblxudmFyIF9hJDM7XHJcbmNsYXNzIFRpbWVPZkRheSBleHRlbmRzIFV0ZjhTdHJpbmcge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMzI7XHJcbiAgICB9XHJcbn1cclxuX2EkMyA9IFRpbWVPZkRheTtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5UaW1lT2ZEYXkgPSBfYSQzO1xyXG59KSgpO1xyXG5UaW1lT2ZEYXkuTkFNRSA9IFwiVGltZU9mRGF5XCI7XG5cbnZhciBfYSQyO1xyXG5jbGFzcyBEYXRlVGltZSBleHRlbmRzIFV0ZjhTdHJpbmcge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMzM7XHJcbiAgICB9XHJcbn1cclxuX2EkMiA9IERhdGVUaW1lO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLkRhdGVUaW1lID0gX2EkMjtcclxufSkoKTtcclxuRGF0ZVRpbWUuTkFNRSA9IFwiRGF0ZVRpbWVcIjtcblxudmFyIF9hJDE7XHJcbmNsYXNzIER1cmF0aW9uIGV4dGVuZHMgVXRmOFN0cmluZyB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAzNDtcclxuICAgIH1cclxufVxyXG5fYSQxID0gRHVyYXRpb247XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuRHVyYXRpb24gPSBfYSQxO1xyXG59KSgpO1xyXG5EdXJhdGlvbi5OQU1FID0gXCJEdXJhdGlvblwiO1xuXG52YXIgX2E7XHJcbmNsYXNzIFRJTUUgZXh0ZW5kcyBVdGY4U3RyaW5nIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDE0O1xyXG4gICAgfVxyXG59XHJcbl9hID0gVElNRTtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5USU1FID0gX2E7XHJcbn0pKCk7XHJcblRJTUUuTkFNRSA9IFwiVElNRVwiO1xuXG5jbGFzcyBBbnkge1xyXG4gICAgY29uc3RydWN0b3IoeyBuYW1lID0gRU1QVFlfU1RSSU5HLCBvcHRpb25hbCA9IGZhbHNlLCB9ID0ge30pIHtcclxuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xyXG4gICAgICAgIHRoaXMub3B0aW9uYWwgPSBvcHRpb25hbDtcclxuICAgIH1cclxufVxuXG5jbGFzcyBDaG9pY2UgZXh0ZW5kcyBBbnkge1xyXG4gICAgY29uc3RydWN0b3IoeyB2YWx1ZSA9IFtdLCAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICAgIH1cclxufVxuXG5jbGFzcyBSZXBlYXRlZCBleHRlbmRzIEFueSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IHZhbHVlID0gbmV3IEFueSgpLCBsb2NhbCA9IGZhbHNlLCAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLmxvY2FsID0gbG9jYWw7XHJcbiAgICB9XHJcbn1cblxuY2xhc3MgUmF3RGF0YSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IGRhdGEgPSBFTVBUWV9WSUVXIH0gPSB7fSkge1xyXG4gICAgICAgIHRoaXMuZGF0YVZpZXcgPSBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShkYXRhKTtcclxuICAgIH1cclxuICAgIGdldCBkYXRhKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFWaWV3LnNsaWNlKCkuYnVmZmVyO1xyXG4gICAgfVxyXG4gICAgc2V0IGRhdGEodmFsdWUpIHtcclxuICAgICAgICB0aGlzLmRhdGFWaWV3ID0gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkodmFsdWUpO1xyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgZW5kTGVuZ3RoID0gaW5wdXRPZmZzZXQgKyBpbnB1dExlbmd0aDtcclxuICAgICAgICB0aGlzLmRhdGFWaWV3ID0gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoaW5wdXRCdWZmZXIpLnN1YmFycmF5KGlucHV0T2Zmc2V0LCBlbmRMZW5ndGgpO1xyXG4gICAgICAgIHJldHVybiBlbmRMZW5ndGg7XHJcbiAgICB9XHJcbiAgICB0b0JFUihzaXplT25seSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFWaWV3LnNsaWNlKCkuYnVmZmVyO1xyXG4gICAgfVxyXG59XG5cbmZ1bmN0aW9uIGNvbXBhcmVTY2hlbWEocm9vdCwgaW5wdXREYXRhLCBpbnB1dFNjaGVtYSkge1xyXG4gICAgaWYgKGlucHV0U2NoZW1hIGluc3RhbmNlb2YgQ2hvaWNlKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBpbnB1dFNjaGVtYS52YWx1ZS5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjb21wYXJlU2NoZW1hKHJvb3QsIGlucHV0RGF0YSwgaW5wdXRTY2hlbWEudmFsdWVbal0pO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0LnZlcmlmaWVkKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHZlcmlmaWVkOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdDogcm9vdFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvbnN0IF9yZXN1bHQgPSB7XHJcbiAgICAgICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICByZXN1bHQ6IHtcclxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogXCJXcm9uZyB2YWx1ZXMgZm9yIENob2ljZSB0eXBlXCJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS5oYXNPd25Qcm9wZXJ0eShOQU1FKSlcclxuICAgICAgICAgICAgICAgIF9yZXN1bHQubmFtZSA9IGlucHV0U2NoZW1hLm5hbWU7XHJcbiAgICAgICAgICAgIHJldHVybiBfcmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChpbnB1dFNjaGVtYSBpbnN0YW5jZW9mIEFueSkge1xyXG4gICAgICAgIGlmIChpbnB1dFNjaGVtYS5oYXNPd25Qcm9wZXJ0eShOQU1FKSlcclxuICAgICAgICAgICAgcm9vdFtpbnB1dFNjaGVtYS5uYW1lXSA9IGlucHV0RGF0YTtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogdHJ1ZSxcclxuICAgICAgICAgICAgcmVzdWx0OiByb290XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmICgocm9vdCBpbnN0YW5jZW9mIE9iamVjdCkgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHsgZXJyb3I6IFwiV3Jvbmcgcm9vdCBvYmplY3RcIiB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmICgoaW5wdXREYXRhIGluc3RhbmNlb2YgT2JqZWN0KSA9PT0gZmFsc2UpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogeyBlcnJvcjogXCJXcm9uZyBBU04uMSBkYXRhXCIgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoKGlucHV0U2NoZW1hIGluc3RhbmNlb2YgT2JqZWN0KSA9PT0gZmFsc2UpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogeyBlcnJvcjogXCJXcm9uZyBBU04uMSBzY2hlbWFcIiB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmICgoSURfQkxPQ0sgaW4gaW5wdXRTY2hlbWEpID09PSBmYWxzZSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiB7IGVycm9yOiBcIldyb25nIEFTTi4xIHNjaGVtYVwiIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKChGUk9NX0JFUiBpbiBpbnB1dFNjaGVtYS5pZEJsb2NrKSA9PT0gZmFsc2UpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogeyBlcnJvcjogXCJXcm9uZyBBU04uMSBzY2hlbWFcIiB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmICgoVE9fQkVSIGluIGlucHV0U2NoZW1hLmlkQmxvY2spID09PSBmYWxzZSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiB7IGVycm9yOiBcIldyb25nIEFTTi4xIHNjaGVtYVwiIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgY29uc3QgZW5jb2RlZElkID0gaW5wdXRTY2hlbWEuaWRCbG9jay50b0JFUihmYWxzZSk7XHJcbiAgICBpZiAoZW5jb2RlZElkLmJ5dGVMZW5ndGggPT09IDApIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogeyBlcnJvcjogXCJFcnJvciBlbmNvZGluZyBpZEJsb2NrIGZvciBBU04uMSBzY2hlbWFcIiB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGNvbnN0IGRlY29kZWRPZmZzZXQgPSBpbnB1dFNjaGVtYS5pZEJsb2NrLmZyb21CRVIoZW5jb2RlZElkLCAwLCBlbmNvZGVkSWQuYnl0ZUxlbmd0aCk7XHJcbiAgICBpZiAoZGVjb2RlZE9mZnNldCA9PT0gLTEpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogeyBlcnJvcjogXCJFcnJvciBkZWNvZGluZyBpZEJsb2NrIGZvciBBU04uMSBzY2hlbWFcIiB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmIChpbnB1dFNjaGVtYS5pZEJsb2NrLmhhc093blByb3BlcnR5KFRBR19DTEFTUykgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHsgZXJyb3I6IFwiV3JvbmcgQVNOLjEgc2NoZW1hXCIgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoaW5wdXRTY2hlbWEuaWRCbG9jay50YWdDbGFzcyAhPT0gaW5wdXREYXRhLmlkQmxvY2sudGFnQ2xhc3MpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogcm9vdFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoaW5wdXRTY2hlbWEuaWRCbG9jay5oYXNPd25Qcm9wZXJ0eShUQUdfTlVNQkVSKSA9PT0gZmFsc2UpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogeyBlcnJvcjogXCJXcm9uZyBBU04uMSBzY2hlbWFcIiB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmIChpbnB1dFNjaGVtYS5pZEJsb2NrLnRhZ051bWJlciAhPT0gaW5wdXREYXRhLmlkQmxvY2sudGFnTnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHJvb3RcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0U2NoZW1hLmlkQmxvY2suaGFzT3duUHJvcGVydHkoSVNfQ09OU1RSVUNURUQpID09PSBmYWxzZSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiB7IGVycm9yOiBcIldyb25nIEFTTi4xIHNjaGVtYVwiIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0U2NoZW1hLmlkQmxvY2suaXNDb25zdHJ1Y3RlZCAhPT0gaW5wdXREYXRhLmlkQmxvY2suaXNDb25zdHJ1Y3RlZCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiByb290XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmICghKElTX0hFWF9PTkxZIGluIGlucHV0U2NoZW1hLmlkQmxvY2spKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHsgZXJyb3I6IFwiV3JvbmcgQVNOLjEgc2NoZW1hXCIgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoaW5wdXRTY2hlbWEuaWRCbG9jay5pc0hleE9ubHkgIT09IGlucHV0RGF0YS5pZEJsb2NrLmlzSGV4T25seSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiByb290XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmIChpbnB1dFNjaGVtYS5pZEJsb2NrLmlzSGV4T25seSkge1xyXG4gICAgICAgIGlmICgoVkFMVUVfSEVYX1ZJRVcgaW4gaW5wdXRTY2hlbWEuaWRCbG9jaykgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICByZXN1bHQ6IHsgZXJyb3I6IFwiV3JvbmcgQVNOLjEgc2NoZW1hXCIgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzY2hlbWFWaWV3ID0gaW5wdXRTY2hlbWEuaWRCbG9jay52YWx1ZUhleFZpZXc7XHJcbiAgICAgICAgY29uc3QgYXNuMVZpZXcgPSBpbnB1dERhdGEuaWRCbG9jay52YWx1ZUhleFZpZXc7XHJcbiAgICAgICAgaWYgKHNjaGVtYVZpZXcubGVuZ3RoICE9PSBhc24xVmlldy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHJlc3VsdDogcm9vdFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNjaGVtYVZpZXcubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHNjaGVtYVZpZXdbaV0gIT09IGFzbjFWaWV3WzFdKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IHJvb3RcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoaW5wdXRTY2hlbWEubmFtZSkge1xyXG4gICAgICAgIGlucHV0U2NoZW1hLm5hbWUgPSBpbnB1dFNjaGVtYS5uYW1lLnJlcGxhY2UoL15cXHMrfFxccyskL2csIEVNUFRZX1NUUklORyk7XHJcbiAgICAgICAgaWYgKGlucHV0U2NoZW1hLm5hbWUpXHJcbiAgICAgICAgICAgIHJvb3RbaW5wdXRTY2hlbWEubmFtZV0gPSBpbnB1dERhdGE7XHJcbiAgICB9XHJcbiAgICBpZiAoaW5wdXRTY2hlbWEgaW5zdGFuY2VvZiB0eXBlU3RvcmUuQ29uc3RydWN0ZWQpIHtcclxuICAgICAgICBsZXQgYWRtaXNzaW9uID0gMDtcclxuICAgICAgICBsZXQgcmVzdWx0ID0ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDoge1xyXG4gICAgICAgICAgICAgICAgZXJyb3I6IFwiVW5rbm93biBlcnJvclwiLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBsZXQgbWF4TGVuZ3RoID0gaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgaWYgKG1heExlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWVbMF0gaW5zdGFuY2VvZiBSZXBlYXRlZCkge1xyXG4gICAgICAgICAgICAgICAgbWF4TGVuZ3RoID0gaW5wdXREYXRhLnZhbHVlQmxvY2sudmFsdWUubGVuZ3RoO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtYXhMZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHZlcmlmaWVkOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0OiByb290XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgoaW5wdXREYXRhLnZhbHVlQmxvY2sudmFsdWUubGVuZ3RoID09PSAwKSAmJlxyXG4gICAgICAgICAgICAoaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZS5sZW5ndGggIT09IDApKSB7XHJcbiAgICAgICAgICAgIGxldCBfb3B0aW9uYWwgPSB0cnVlO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWUubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgICAgICBfb3B0aW9uYWwgPSBfb3B0aW9uYWwgJiYgKGlucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWVbaV0ub3B0aW9uYWwgfHwgZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAoX29wdGlvbmFsKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHZlcmlmaWVkOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdDogcm9vdFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgaW5wdXRTY2hlbWEubmFtZSA9IGlucHV0U2NoZW1hLm5hbWUucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgRU1QVFlfU1RSSU5HKTtcclxuICAgICAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS5uYW1lKVxyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByb290W2lucHV0U2NoZW1hLm5hbWVdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJvb3QuZXJyb3IgPSBcIkluY29uc2lzdGVudCBvYmplY3QgbGVuZ3RoXCI7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICByZXN1bHQ6IHJvb3RcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhMZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoKGkgLSBhZG1pc3Npb24pID49IGlucHV0RGF0YS52YWx1ZUJsb2NrLnZhbHVlLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWVbaV0ub3B0aW9uYWwgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgX3Jlc3VsdCA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IHJvb3RcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIHJvb3QuZXJyb3IgPSBcIkluY29uc2lzdGVudCBsZW5ndGggYmV0d2VlbiBBU04uMSBkYXRhIGFuZCBzY2hlbWFcIjtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFNjaGVtYS5uYW1lID0gaW5wdXRTY2hlbWEubmFtZS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCBFTVBUWV9TVFJJTkcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJvb3RbaW5wdXRTY2hlbWEubmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVzdWx0Lm5hbWUgPSBpbnB1dFNjaGVtYS5uYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWVbMF0gaW5zdGFuY2VvZiBSZXBlYXRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvbXBhcmVTY2hlbWEocm9vdCwgaW5wdXREYXRhLnZhbHVlQmxvY2sudmFsdWVbaV0sIGlucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWVbMF0udmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQudmVyaWZpZWQgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlWzBdLm9wdGlvbmFsKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRtaXNzaW9uKys7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFNjaGVtYS5uYW1lID0gaW5wdXRTY2hlbWEubmFtZS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCBFTVBUWV9TVFJJTkcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS5uYW1lKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcm9vdFtpbnB1dFNjaGVtYS5uYW1lXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKChOQU1FIGluIGlucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWVbMF0pICYmIChpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlWzBdLm5hbWUubGVuZ3RoID4gMCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFycmF5Um9vdCA9IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKExPQ0FMIGluIGlucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWVbMF0pICYmIChpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlWzBdLmxvY2FsKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5Um9vdCA9IGlucHV0RGF0YTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlSb290ID0gcm9vdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhcnJheVJvb3RbaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVswXS5uYW1lXSA9PT0gXCJ1bmRlZmluZWRcIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5Um9vdFtpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlWzBdLm5hbWVdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5Um9vdFtpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlWzBdLm5hbWVdLnB1c2goaW5wdXREYXRhLnZhbHVlQmxvY2sudmFsdWVbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvbXBhcmVTY2hlbWEocm9vdCwgaW5wdXREYXRhLnZhbHVlQmxvY2sudmFsdWVbaSAtIGFkbWlzc2lvbl0sIGlucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWVbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQudmVyaWZpZWQgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlW2ldLm9wdGlvbmFsKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRtaXNzaW9uKys7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFNjaGVtYS5uYW1lID0gaW5wdXRTY2hlbWEubmFtZS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCBFTVBUWV9TVFJJTkcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS5uYW1lKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcm9vdFtpbnB1dFNjaGVtYS5uYW1lXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlc3VsdC52ZXJpZmllZCA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgY29uc3QgX3Jlc3VsdCA9IHtcclxuICAgICAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHJlc3VsdDogcm9vdFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgaW5wdXRTY2hlbWEubmFtZSA9IGlucHV0U2NoZW1hLm5hbWUucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgRU1QVFlfU1RSSU5HKTtcclxuICAgICAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJvb3RbaW5wdXRTY2hlbWEubmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgX3Jlc3VsdC5uYW1lID0gaW5wdXRTY2hlbWEubmFtZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gX3Jlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IHRydWUsXHJcbiAgICAgICAgICAgIHJlc3VsdDogcm9vdFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoaW5wdXRTY2hlbWEucHJpbWl0aXZlU2NoZW1hICYmXHJcbiAgICAgICAgKFZBTFVFX0hFWF9WSUVXIGluIGlucHV0RGF0YS52YWx1ZUJsb2NrKSkge1xyXG4gICAgICAgIGNvbnN0IGFzbjEgPSBsb2NhbEZyb21CRVIoaW5wdXREYXRhLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3KTtcclxuICAgICAgICBpZiAoYXNuMS5vZmZzZXQgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IF9yZXN1bHQgPSB7XHJcbiAgICAgICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICByZXN1bHQ6IGFzbjEucmVzdWx0XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBpbnB1dFNjaGVtYS5uYW1lID0gaW5wdXRTY2hlbWEubmFtZS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCBFTVBUWV9TVFJJTkcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcm9vdFtpbnB1dFNjaGVtYS5uYW1lXTtcclxuICAgICAgICAgICAgICAgICAgICBfcmVzdWx0Lm5hbWUgPSBpbnB1dFNjaGVtYS5uYW1lO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBfcmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY29tcGFyZVNjaGVtYShyb290LCBhc24xLnJlc3VsdCwgaW5wdXRTY2hlbWEucHJpbWl0aXZlU2NoZW1hKTtcclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgdmVyaWZpZWQ6IHRydWUsXHJcbiAgICAgICAgcmVzdWx0OiByb290XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIHZlcmlmeVNjaGVtYShpbnB1dEJ1ZmZlciwgaW5wdXRTY2hlbWEpIHtcclxuICAgIGlmICgoaW5wdXRTY2hlbWEgaW5zdGFuY2VvZiBPYmplY3QpID09PSBmYWxzZSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiB7IGVycm9yOiBcIldyb25nIEFTTi4xIHNjaGVtYSB0eXBlXCIgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBjb25zdCBhc24xID0gbG9jYWxGcm9tQkVSKHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGlucHV0QnVmZmVyKSk7XHJcbiAgICBpZiAoYXNuMS5vZmZzZXQgPT09IC0xKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IGFzbjEucmVzdWx0XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIHJldHVybiBjb21wYXJlU2NoZW1hKGFzbjEucmVzdWx0LCBhc24xLnJlc3VsdCwgaW5wdXRTY2hlbWEpO1xyXG59XG5cbmV4cG9ydCB7IEFueSwgQmFzZUJsb2NrLCBCYXNlU3RyaW5nQmxvY2ssIEJpdFN0cmluZywgQm1wU3RyaW5nLCBCb29sZWFuLCBDaGFyYWN0ZXJTdHJpbmcsIENob2ljZSwgQ29uc3RydWN0ZWQsIERBVEUsIERhdGVUaW1lLCBEdXJhdGlvbiwgRW5kT2ZDb250ZW50LCBFbnVtZXJhdGVkLCBHZW5lcmFsU3RyaW5nLCBHZW5lcmFsaXplZFRpbWUsIEdyYXBoaWNTdHJpbmcsIEhleEJsb2NrLCBJQTVTdHJpbmcsIEludGVnZXIsIE51bGwsIE51bWVyaWNTdHJpbmcsIE9iamVjdElkZW50aWZpZXIsIE9jdGV0U3RyaW5nLCBQcmltaXRpdmUsIFByaW50YWJsZVN0cmluZywgUmF3RGF0YSwgUmVsYXRpdmVPYmplY3RJZGVudGlmaWVyLCBSZXBlYXRlZCwgU2VxdWVuY2UsIFNldCwgVElNRSwgVGVsZXRleFN0cmluZywgVGltZU9mRGF5LCBVVENUaW1lLCBVbml2ZXJzYWxTdHJpbmcsIFV0ZjhTdHJpbmcsIFZhbHVlQmxvY2ssIFZpZGVvdGV4U3RyaW5nLCBWaWV3V3JpdGVyLCBWaXNpYmxlU3RyaW5nLCBjb21wYXJlU2NoZW1hLCBmcm9tQkVSLCB2ZXJpZnlTY2hlbWEgfTtcbiIsICJleHBvcnQgdmFyIEFzblR5cGVUeXBlcztcbihmdW5jdGlvbiAoQXNuVHlwZVR5cGVzKSB7XG4gICAgQXNuVHlwZVR5cGVzW0FzblR5cGVUeXBlc1tcIlNlcXVlbmNlXCJdID0gMF0gPSBcIlNlcXVlbmNlXCI7XG4gICAgQXNuVHlwZVR5cGVzW0FzblR5cGVUeXBlc1tcIlNldFwiXSA9IDFdID0gXCJTZXRcIjtcbiAgICBBc25UeXBlVHlwZXNbQXNuVHlwZVR5cGVzW1wiQ2hvaWNlXCJdID0gMl0gPSBcIkNob2ljZVwiO1xufSkoQXNuVHlwZVR5cGVzIHx8IChBc25UeXBlVHlwZXMgPSB7fSkpO1xuZXhwb3J0IHZhciBBc25Qcm9wVHlwZXM7XG4oZnVuY3Rpb24gKEFzblByb3BUeXBlcykge1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJBbnlcIl0gPSAxXSA9IFwiQW55XCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIkJvb2xlYW5cIl0gPSAyXSA9IFwiQm9vbGVhblwiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJPY3RldFN0cmluZ1wiXSA9IDNdID0gXCJPY3RldFN0cmluZ1wiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJCaXRTdHJpbmdcIl0gPSA0XSA9IFwiQml0U3RyaW5nXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIkludGVnZXJcIl0gPSA1XSA9IFwiSW50ZWdlclwiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJFbnVtZXJhdGVkXCJdID0gNl0gPSBcIkVudW1lcmF0ZWRcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiT2JqZWN0SWRlbnRpZmllclwiXSA9IDddID0gXCJPYmplY3RJZGVudGlmaWVyXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIlV0ZjhTdHJpbmdcIl0gPSA4XSA9IFwiVXRmOFN0cmluZ1wiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJCbXBTdHJpbmdcIl0gPSA5XSA9IFwiQm1wU3RyaW5nXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIlVuaXZlcnNhbFN0cmluZ1wiXSA9IDEwXSA9IFwiVW5pdmVyc2FsU3RyaW5nXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIk51bWVyaWNTdHJpbmdcIl0gPSAxMV0gPSBcIk51bWVyaWNTdHJpbmdcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiUHJpbnRhYmxlU3RyaW5nXCJdID0gMTJdID0gXCJQcmludGFibGVTdHJpbmdcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiVGVsZXRleFN0cmluZ1wiXSA9IDEzXSA9IFwiVGVsZXRleFN0cmluZ1wiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJWaWRlb3RleFN0cmluZ1wiXSA9IDE0XSA9IFwiVmlkZW90ZXhTdHJpbmdcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiSUE1U3RyaW5nXCJdID0gMTVdID0gXCJJQTVTdHJpbmdcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiR3JhcGhpY1N0cmluZ1wiXSA9IDE2XSA9IFwiR3JhcGhpY1N0cmluZ1wiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJWaXNpYmxlU3RyaW5nXCJdID0gMTddID0gXCJWaXNpYmxlU3RyaW5nXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIkdlbmVyYWxTdHJpbmdcIl0gPSAxOF0gPSBcIkdlbmVyYWxTdHJpbmdcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiQ2hhcmFjdGVyU3RyaW5nXCJdID0gMTldID0gXCJDaGFyYWN0ZXJTdHJpbmdcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiVVRDVGltZVwiXSA9IDIwXSA9IFwiVVRDVGltZVwiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJHZW5lcmFsaXplZFRpbWVcIl0gPSAyMV0gPSBcIkdlbmVyYWxpemVkVGltZVwiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJEQVRFXCJdID0gMjJdID0gXCJEQVRFXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIlRpbWVPZkRheVwiXSA9IDIzXSA9IFwiVGltZU9mRGF5XCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIkRhdGVUaW1lXCJdID0gMjRdID0gXCJEYXRlVGltZVwiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJEdXJhdGlvblwiXSA9IDI1XSA9IFwiRHVyYXRpb25cIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiVElNRVwiXSA9IDI2XSA9IFwiVElNRVwiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJOdWxsXCJdID0gMjddID0gXCJOdWxsXCI7XG59KShBc25Qcm9wVHlwZXMgfHwgKEFzblByb3BUeXBlcyA9IHt9KSk7XG4iLCAiaW1wb3J0ICogYXMgYXNuMWpzIGZyb20gXCJhc24xanNcIjtcbmltcG9ydCB7IEJ1ZmZlclNvdXJjZUNvbnZlcnRlciB9IGZyb20gXCJwdnRzdXRpbHNcIjtcbmV4cG9ydCBjbGFzcyBCaXRTdHJpbmcge1xuICAgIGNvbnN0cnVjdG9yKHBhcmFtcywgdW51c2VkQml0cyA9IDApIHtcbiAgICAgICAgdGhpcy51bnVzZWRCaXRzID0gMDtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgaWYgKHBhcmFtcykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXJhbXMgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZyb21OdW1iZXIocGFyYW1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKEJ1ZmZlclNvdXJjZUNvbnZlcnRlci5pc0J1ZmZlclNvdXJjZShwYXJhbXMpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51bnVzZWRCaXRzID0gdW51c2VkQml0cztcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIocGFyYW1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIlVuc3VwcG9ydGVkIHR5cGUgb2YgJ3BhcmFtcycgYXJndW1lbnQgZm9yIEJpdFN0cmluZ1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBmcm9tQVNOKGFzbikge1xuICAgICAgICBpZiAoIShhc24gaW5zdGFuY2VvZiBhc24xanMuQml0U3RyaW5nKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50ICdhc24nIGlzIG5vdCBpbnN0YW5jZSBvZiBBU04uMSBCaXRTdHJpbmdcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51bnVzZWRCaXRzID0gYXNuLnZhbHVlQmxvY2sudW51c2VkQml0cztcbiAgICAgICAgdGhpcy52YWx1ZSA9IGFzbi52YWx1ZUJsb2NrLnZhbHVlSGV4O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgdG9BU04oKSB7XG4gICAgICAgIHJldHVybiBuZXcgYXNuMWpzLkJpdFN0cmluZyh7IHVudXNlZEJpdHM6IHRoaXMudW51c2VkQml0cywgdmFsdWVIZXg6IHRoaXMudmFsdWUgfSk7XG4gICAgfVxuICAgIHRvU2NoZW1hKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBhc24xanMuQml0U3RyaW5nKHsgbmFtZSB9KTtcbiAgICB9XG4gICAgdG9OdW1iZXIoKSB7XG4gICAgICAgIGxldCByZXMgPSBcIlwiO1xuICAgICAgICBjb25zdCB1aW50QXJyYXkgPSBuZXcgVWludDhBcnJheSh0aGlzLnZhbHVlKTtcbiAgICAgICAgZm9yIChjb25zdCBvY3RldCBvZiB1aW50QXJyYXkpIHtcbiAgICAgICAgICAgIHJlcyArPSBvY3RldC50b1N0cmluZygyKS5wYWRTdGFydCg4LCBcIjBcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmVzID0gcmVzLnNwbGl0KFwiXCIpLnJldmVyc2UoKS5qb2luKFwiXCIpO1xuICAgICAgICBpZiAodGhpcy51bnVzZWRCaXRzKSB7XG4gICAgICAgICAgICByZXMgPSByZXMuc2xpY2UodGhpcy51bnVzZWRCaXRzKS5wYWRTdGFydCh0aGlzLnVudXNlZEJpdHMsIFwiMFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFyc2VJbnQocmVzLCAyKTtcbiAgICB9XG4gICAgZnJvbU51bWJlcih2YWx1ZSkge1xuICAgICAgICBsZXQgYml0cyA9IHZhbHVlLnRvU3RyaW5nKDIpO1xuICAgICAgICBjb25zdCBvY3RldFNpemUgPSAoYml0cy5sZW5ndGggKyA3KSA+PiAzO1xuICAgICAgICB0aGlzLnVudXNlZEJpdHMgPSAob2N0ZXRTaXplIDw8IDMpIC0gYml0cy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IG9jdGV0cyA9IG5ldyBVaW50OEFycmF5KG9jdGV0U2l6ZSk7XG4gICAgICAgIGJpdHMgPSBiaXRzLnBhZFN0YXJ0KG9jdGV0U2l6ZSA8PCAzLCBcIjBcIikuc3BsaXQoXCJcIikucmV2ZXJzZSgpLmpvaW4oXCJcIik7XG4gICAgICAgIGxldCBpbmRleCA9IDA7XG4gICAgICAgIHdoaWxlIChpbmRleCA8IG9jdGV0U2l6ZSkge1xuICAgICAgICAgICAgb2N0ZXRzW2luZGV4XSA9IHBhcnNlSW50KGJpdHMuc2xpY2UoaW5kZXggPDwgMywgKGluZGV4IDw8IDMpICsgOCksIDIpO1xuICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhbHVlID0gb2N0ZXRzLmJ1ZmZlcjtcbiAgICB9XG59XG4iLCAiaW1wb3J0ICogYXMgYXNuMWpzIGZyb20gXCJhc24xanNcIjtcbmltcG9ydCB7IEJ1ZmZlclNvdXJjZUNvbnZlcnRlciB9IGZyb20gXCJwdnRzdXRpbHNcIjtcbmV4cG9ydCBjbGFzcyBPY3RldFN0cmluZyB7XG4gICAgZ2V0IGJ5dGVMZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJ1ZmZlci5ieXRlTGVuZ3RoO1xuICAgIH1cbiAgICBnZXQgYnl0ZU9mZnNldCgpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKHBhcmFtKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcGFyYW0gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHRoaXMuYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKHBhcmFtKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChCdWZmZXJTb3VyY2VDb252ZXJ0ZXIuaXNCdWZmZXJTb3VyY2UocGFyYW0pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5idWZmZXIgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihwYXJhbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHBhcmFtKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkocGFyYW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5idWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnJvbUFTTihhc24pIHtcbiAgICAgICAgaWYgKCEoYXNuIGluc3RhbmNlb2YgYXNuMWpzLk9jdGV0U3RyaW5nKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50ICdhc24nIGlzIG5vdCBpbnN0YW5jZSBvZiBBU04uMSBPY3RldFN0cmluZ1wiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJ1ZmZlciA9IGFzbi52YWx1ZUJsb2NrLnZhbHVlSGV4O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgdG9BU04oKSB7XG4gICAgICAgIHJldHVybiBuZXcgYXNuMWpzLk9jdGV0U3RyaW5nKHsgdmFsdWVIZXg6IHRoaXMuYnVmZmVyIH0pO1xuICAgIH1cbiAgICB0b1NjaGVtYShuYW1lKSB7XG4gICAgICAgIHJldHVybiBuZXcgYXNuMWpzLk9jdGV0U3RyaW5nKHsgbmFtZSB9KTtcbiAgICB9XG59XG4iLCAiZXhwb3J0ICogZnJvbSBcIi4vYml0X3N0cmluZ1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vb2N0ZXRfc3RyaW5nXCI7XG4iLCAiaW1wb3J0ICogYXMgYXNuMWpzIGZyb20gXCJhc24xanNcIjtcbmltcG9ydCB7IEFzblByb3BUeXBlcyB9IGZyb20gXCIuL2VudW1zXCI7XG5pbXBvcnQgeyBPY3RldFN0cmluZyB9IGZyb20gXCIuL3R5cGVzL2luZGV4XCI7XG5leHBvcnQgY29uc3QgQXNuQW55Q29udmVydGVyID0ge1xuICAgIGZyb21BU046ICh2YWx1ZSkgPT4gdmFsdWUgaW5zdGFuY2VvZiBhc24xanMuTnVsbCA/IG51bGwgOiB2YWx1ZS52YWx1ZUJlZm9yZURlY29kZVZpZXcsXG4gICAgdG9BU046ICh2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgYXNuMWpzLk51bGwoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzY2hlbWEgPSBhc24xanMuZnJvbUJFUih2YWx1ZSk7XG4gICAgICAgIGlmIChzY2hlbWEucmVzdWx0LmVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Ioc2NoZW1hLnJlc3VsdC5lcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNjaGVtYS5yZXN1bHQ7XG4gICAgfSxcbn07XG5leHBvcnQgY29uc3QgQXNuSW50ZWdlckNvbnZlcnRlciA9IHtcbiAgICBmcm9tQVNOOiAodmFsdWUpID0+IHZhbHVlLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3LmJ5dGVMZW5ndGggPj0gNFxuICAgICAgICA/IHZhbHVlLnZhbHVlQmxvY2sudG9TdHJpbmcoKVxuICAgICAgICA6IHZhbHVlLnZhbHVlQmxvY2sudmFsdWVEZWMsXG4gICAgdG9BU046ICh2YWx1ZSkgPT4gbmV3IGFzbjFqcy5JbnRlZ2VyKHsgdmFsdWU6ICt2YWx1ZSB9KSxcbn07XG5leHBvcnQgY29uc3QgQXNuRW51bWVyYXRlZENvbnZlcnRlciA9IHtcbiAgICBmcm9tQVNOOiAodmFsdWUpID0+IHZhbHVlLnZhbHVlQmxvY2sudmFsdWVEZWMsXG4gICAgdG9BU046ICh2YWx1ZSkgPT4gbmV3IGFzbjFqcy5FbnVtZXJhdGVkKHsgdmFsdWUgfSksXG59O1xuZXhwb3J0IGNvbnN0IEFzbkludGVnZXJBcnJheUJ1ZmZlckNvbnZlcnRlciA9IHtcbiAgICBmcm9tQVNOOiAodmFsdWUpID0+IHZhbHVlLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3LFxuICAgIHRvQVNOOiAodmFsdWUpID0+IG5ldyBhc24xanMuSW50ZWdlcih7IHZhbHVlSGV4OiB2YWx1ZSB9KSxcbn07XG5leHBvcnQgY29uc3QgQXNuSW50ZWdlckJpZ0ludENvbnZlcnRlciA9IHtcbiAgICBmcm9tQVNOOiAodmFsdWUpID0+IHZhbHVlLnRvQmlnSW50KCksXG4gICAgdG9BU046ICh2YWx1ZSkgPT4gYXNuMWpzLkludGVnZXIuZnJvbUJpZ0ludCh2YWx1ZSksXG59O1xuZXhwb3J0IGNvbnN0IEFzbkJpdFN0cmluZ0NvbnZlcnRlciA9IHtcbiAgICBmcm9tQVNOOiAodmFsdWUpID0+IHZhbHVlLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3LFxuICAgIHRvQVNOOiAodmFsdWUpID0+IG5ldyBhc24xanMuQml0U3RyaW5nKHsgdmFsdWVIZXg6IHZhbHVlIH0pLFxufTtcbmV4cG9ydCBjb25zdCBBc25PYmplY3RJZGVudGlmaWVyQ29udmVydGVyID0ge1xuICAgIGZyb21BU046ICh2YWx1ZSkgPT4gdmFsdWUudmFsdWVCbG9jay50b1N0cmluZygpLFxuICAgIHRvQVNOOiAodmFsdWUpID0+IG5ldyBhc24xanMuT2JqZWN0SWRlbnRpZmllcih7IHZhbHVlIH0pLFxufTtcbmV4cG9ydCBjb25zdCBBc25Cb29sZWFuQ29udmVydGVyID0ge1xuICAgIGZyb21BU046ICh2YWx1ZSkgPT4gdmFsdWUudmFsdWVCbG9jay52YWx1ZSxcbiAgICB0b0FTTjogKHZhbHVlKSA9PiBuZXcgYXNuMWpzLkJvb2xlYW4oeyB2YWx1ZSB9KSxcbn07XG5leHBvcnQgY29uc3QgQXNuT2N0ZXRTdHJpbmdDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKHZhbHVlKSA9PiB2YWx1ZS52YWx1ZUJsb2NrLnZhbHVlSGV4VmlldyxcbiAgICB0b0FTTjogKHZhbHVlKSA9PiBuZXcgYXNuMWpzLk9jdGV0U3RyaW5nKHsgdmFsdWVIZXg6IHZhbHVlIH0pLFxufTtcbmV4cG9ydCBjb25zdCBBc25Db25zdHJ1Y3RlZE9jdGV0U3RyaW5nQ29udmVydGVyID0ge1xuICAgIGZyb21BU046ICh2YWx1ZSkgPT4gbmV3IE9jdGV0U3RyaW5nKHZhbHVlLmdldFZhbHVlKCkpLFxuICAgIHRvQVNOOiAodmFsdWUpID0+IHZhbHVlLnRvQVNOKCksXG59O1xuZnVuY3Rpb24gY3JlYXRlU3RyaW5nQ29udmVydGVyKEFzbjFUeXBlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZnJvbUFTTjogKHZhbHVlKSA9PiB2YWx1ZS52YWx1ZUJsb2NrLnZhbHVlLFxuICAgICAgICB0b0FTTjogKHZhbHVlKSA9PiBuZXcgQXNuMVR5cGUoeyB2YWx1ZSB9KSxcbiAgICB9O1xufVxuZXhwb3J0IGNvbnN0IEFzblV0ZjhTdHJpbmdDb252ZXJ0ZXIgPSBjcmVhdGVTdHJpbmdDb252ZXJ0ZXIoYXNuMWpzLlV0ZjhTdHJpbmcpO1xuZXhwb3J0IGNvbnN0IEFzbkJtcFN0cmluZ0NvbnZlcnRlciA9IGNyZWF0ZVN0cmluZ0NvbnZlcnRlcihhc24xanMuQm1wU3RyaW5nKTtcbmV4cG9ydCBjb25zdCBBc25Vbml2ZXJzYWxTdHJpbmdDb252ZXJ0ZXIgPSBjcmVhdGVTdHJpbmdDb252ZXJ0ZXIoYXNuMWpzLlVuaXZlcnNhbFN0cmluZyk7XG5leHBvcnQgY29uc3QgQXNuTnVtZXJpY1N0cmluZ0NvbnZlcnRlciA9IGNyZWF0ZVN0cmluZ0NvbnZlcnRlcihhc24xanMuTnVtZXJpY1N0cmluZyk7XG5leHBvcnQgY29uc3QgQXNuUHJpbnRhYmxlU3RyaW5nQ29udmVydGVyID0gY3JlYXRlU3RyaW5nQ29udmVydGVyKGFzbjFqcy5QcmludGFibGVTdHJpbmcpO1xuZXhwb3J0IGNvbnN0IEFzblRlbGV0ZXhTdHJpbmdDb252ZXJ0ZXIgPSBjcmVhdGVTdHJpbmdDb252ZXJ0ZXIoYXNuMWpzLlRlbGV0ZXhTdHJpbmcpO1xuZXhwb3J0IGNvbnN0IEFzblZpZGVvdGV4U3RyaW5nQ29udmVydGVyID0gY3JlYXRlU3RyaW5nQ29udmVydGVyKGFzbjFqcy5WaWRlb3RleFN0cmluZyk7XG5leHBvcnQgY29uc3QgQXNuSUE1U3RyaW5nQ29udmVydGVyID0gY3JlYXRlU3RyaW5nQ29udmVydGVyKGFzbjFqcy5JQTVTdHJpbmcpO1xuZXhwb3J0IGNvbnN0IEFzbkdyYXBoaWNTdHJpbmdDb252ZXJ0ZXIgPSBjcmVhdGVTdHJpbmdDb252ZXJ0ZXIoYXNuMWpzLkdyYXBoaWNTdHJpbmcpO1xuZXhwb3J0IGNvbnN0IEFzblZpc2libGVTdHJpbmdDb252ZXJ0ZXIgPSBjcmVhdGVTdHJpbmdDb252ZXJ0ZXIoYXNuMWpzLlZpc2libGVTdHJpbmcpO1xuZXhwb3J0IGNvbnN0IEFzbkdlbmVyYWxTdHJpbmdDb252ZXJ0ZXIgPSBjcmVhdGVTdHJpbmdDb252ZXJ0ZXIoYXNuMWpzLkdlbmVyYWxTdHJpbmcpO1xuZXhwb3J0IGNvbnN0IEFzbkNoYXJhY3RlclN0cmluZ0NvbnZlcnRlciA9IGNyZWF0ZVN0cmluZ0NvbnZlcnRlcihhc24xanMuQ2hhcmFjdGVyU3RyaW5nKTtcbmV4cG9ydCBjb25zdCBBc25VVENUaW1lQ29udmVydGVyID0ge1xuICAgIGZyb21BU046ICh2YWx1ZSkgPT4gdmFsdWUudG9EYXRlKCksXG4gICAgdG9BU046ICh2YWx1ZSkgPT4gbmV3IGFzbjFqcy5VVENUaW1lKHsgdmFsdWVEYXRlOiB2YWx1ZSB9KSxcbn07XG5leHBvcnQgY29uc3QgQXNuR2VuZXJhbGl6ZWRUaW1lQ29udmVydGVyID0ge1xuICAgIGZyb21BU046ICh2YWx1ZSkgPT4gdmFsdWUudG9EYXRlKCksXG4gICAgdG9BU046ICh2YWx1ZSkgPT4gbmV3IGFzbjFqcy5HZW5lcmFsaXplZFRpbWUoeyB2YWx1ZURhdGU6IHZhbHVlIH0pLFxufTtcbmV4cG9ydCBjb25zdCBBc25OdWxsQ29udmVydGVyID0ge1xuICAgIGZyb21BU046ICgpID0+IG51bGwsXG4gICAgdG9BU046ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBhc24xanMuTnVsbCgpO1xuICAgIH0sXG59O1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRDb252ZXJ0ZXIodHlwZSkge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5Bbnk6XG4gICAgICAgICAgICByZXR1cm4gQXNuQW55Q29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5CaXRTdHJpbmc6XG4gICAgICAgICAgICByZXR1cm4gQXNuQml0U3RyaW5nQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5CbXBTdHJpbmc6XG4gICAgICAgICAgICByZXR1cm4gQXNuQm1wU3RyaW5nQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5Cb29sZWFuOlxuICAgICAgICAgICAgcmV0dXJuIEFzbkJvb2xlYW5Db252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLkNoYXJhY3RlclN0cmluZzpcbiAgICAgICAgICAgIHJldHVybiBBc25DaGFyYWN0ZXJTdHJpbmdDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLkVudW1lcmF0ZWQ6XG4gICAgICAgICAgICByZXR1cm4gQXNuRW51bWVyYXRlZENvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuR2VuZXJhbFN0cmluZzpcbiAgICAgICAgICAgIHJldHVybiBBc25HZW5lcmFsU3RyaW5nQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5HZW5lcmFsaXplZFRpbWU6XG4gICAgICAgICAgICByZXR1cm4gQXNuR2VuZXJhbGl6ZWRUaW1lQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5HcmFwaGljU3RyaW5nOlxuICAgICAgICAgICAgcmV0dXJuIEFzbkdyYXBoaWNTdHJpbmdDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLklBNVN0cmluZzpcbiAgICAgICAgICAgIHJldHVybiBBc25JQTVTdHJpbmdDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLkludGVnZXI6XG4gICAgICAgICAgICByZXR1cm4gQXNuSW50ZWdlckNvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuTnVsbDpcbiAgICAgICAgICAgIHJldHVybiBBc25OdWxsQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5OdW1lcmljU3RyaW5nOlxuICAgICAgICAgICAgcmV0dXJuIEFzbk51bWVyaWNTdHJpbmdDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLk9iamVjdElkZW50aWZpZXI6XG4gICAgICAgICAgICByZXR1cm4gQXNuT2JqZWN0SWRlbnRpZmllckNvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuT2N0ZXRTdHJpbmc6XG4gICAgICAgICAgICByZXR1cm4gQXNuT2N0ZXRTdHJpbmdDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLlByaW50YWJsZVN0cmluZzpcbiAgICAgICAgICAgIHJldHVybiBBc25QcmludGFibGVTdHJpbmdDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLlRlbGV0ZXhTdHJpbmc6XG4gICAgICAgICAgICByZXR1cm4gQXNuVGVsZXRleFN0cmluZ0NvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuVVRDVGltZTpcbiAgICAgICAgICAgIHJldHVybiBBc25VVENUaW1lQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5Vbml2ZXJzYWxTdHJpbmc6XG4gICAgICAgICAgICByZXR1cm4gQXNuVW5pdmVyc2FsU3RyaW5nQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5VdGY4U3RyaW5nOlxuICAgICAgICAgICAgcmV0dXJuIEFzblV0ZjhTdHJpbmdDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLlZpZGVvdGV4U3RyaW5nOlxuICAgICAgICAgICAgcmV0dXJuIEFzblZpZGVvdGV4U3RyaW5nQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5WaXNpYmxlU3RyaW5nOlxuICAgICAgICAgICAgcmV0dXJuIEFzblZpc2libGVTdHJpbmdDb252ZXJ0ZXI7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIGlzQ29udmVydGlibGUodGFyZ2V0KSB7XG4gICAgaWYgKHR5cGVvZiB0YXJnZXQgPT09IFwiZnVuY3Rpb25cIiAmJiB0YXJnZXQucHJvdG90eXBlKSB7XG4gICAgICAgIGlmICh0YXJnZXQucHJvdG90eXBlLnRvQVNOICYmIHRhcmdldC5wcm90b3R5cGUuZnJvbUFTTikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaXNDb252ZXJ0aWJsZSh0YXJnZXQucHJvdG90eXBlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuICEhKHRhcmdldCAmJiB0eXBlb2YgdGFyZ2V0ID09PSBcIm9iamVjdFwiICYmIFwidG9BU05cIiBpbiB0YXJnZXQgJiYgXCJmcm9tQVNOXCIgaW4gdGFyZ2V0KTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gaXNUeXBlT2ZBcnJheSh0YXJnZXQpIHtcbiAgICB2YXIgX2E7XG4gICAgaWYgKHRhcmdldCkge1xuICAgICAgICBjb25zdCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0YXJnZXQpO1xuICAgICAgICBpZiAoKChfYSA9IHByb3RvID09PSBudWxsIHx8IHByb3RvID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwcm90by5wcm90b3R5cGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jb25zdHJ1Y3RvcikgPT09IEFycmF5KSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNUeXBlT2ZBcnJheShwcm90byk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0FycmF5RXF1YWwoYnl0ZXMxLCBieXRlczIpIHtcbiAgICBpZiAoIShieXRlczEgJiYgYnl0ZXMyKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChieXRlczEuYnl0ZUxlbmd0aCAhPT0gYnl0ZXMyLmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBiMSA9IG5ldyBVaW50OEFycmF5KGJ5dGVzMSk7XG4gICAgY29uc3QgYjIgPSBuZXcgVWludDhBcnJheShieXRlczIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZXMxLmJ5dGVMZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoYjFbaV0gIT09IGIyW2ldKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG4iLCAiaW1wb3J0ICogYXMgYXNuMWpzIGZyb20gXCJhc24xanNcIjtcbmltcG9ydCB7IEFzblByb3BUeXBlcywgQXNuVHlwZVR5cGVzIH0gZnJvbSBcIi4vZW51bXNcIjtcbmltcG9ydCB7IGlzQ29udmVydGlibGUgfSBmcm9tIFwiLi9oZWxwZXJcIjtcbmV4cG9ydCBjbGFzcyBBc25TY2hlbWFTdG9yYWdlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5pdGVtcyA9IG5ldyBXZWFrTWFwKCk7XG4gICAgfVxuICAgIGhhcyh0YXJnZXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXMuaGFzKHRhcmdldCk7XG4gICAgfVxuICAgIGdldCh0YXJnZXQsIGNoZWNrU2NoZW1hID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gdGhpcy5pdGVtcy5nZXQodGFyZ2V0KTtcbiAgICAgICAgaWYgKCFzY2hlbWEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGdldCBzY2hlbWEgZm9yICcke3RhcmdldC5wcm90b3R5cGUuY29uc3RydWN0b3IubmFtZX0nIHRhcmdldGApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGVja1NjaGVtYSAmJiAhc2NoZW1hLnNjaGVtYSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTY2hlbWEgJyR7dGFyZ2V0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5uYW1lfScgZG9lc24ndCBjb250YWluIEFTTi4xIHNjaGVtYS4gQ2FsbCAnQXNuU2NoZW1hU3RvcmFnZS5jYWNoZScuYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNjaGVtYTtcbiAgICB9XG4gICAgY2FjaGUodGFyZ2V0KSB7XG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IHRoaXMuZ2V0KHRhcmdldCk7XG4gICAgICAgIGlmICghc2NoZW1hLnNjaGVtYSkge1xuICAgICAgICAgICAgc2NoZW1hLnNjaGVtYSA9IHRoaXMuY3JlYXRlKHRhcmdldCwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY3JlYXRlRGVmYXVsdCh0YXJnZXQpIHtcbiAgICAgICAgY29uc3Qgc2NoZW1hID0ge1xuICAgICAgICAgICAgdHlwZTogQXNuVHlwZVR5cGVzLlNlcXVlbmNlLFxuICAgICAgICAgICAgaXRlbXM6IHt9LFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBwYXJlbnRTY2hlbWEgPSB0aGlzLmZpbmRQYXJlbnRTY2hlbWEodGFyZ2V0KTtcbiAgICAgICAgaWYgKHBhcmVudFNjaGVtYSkge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihzY2hlbWEsIHBhcmVudFNjaGVtYSk7XG4gICAgICAgICAgICBzY2hlbWEuaXRlbXMgPSBPYmplY3QuYXNzaWduKHt9LCBzY2hlbWEuaXRlbXMsIHBhcmVudFNjaGVtYS5pdGVtcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNjaGVtYTtcbiAgICB9XG4gICAgY3JlYXRlKHRhcmdldCwgdXNlTmFtZXMpIHtcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gdGhpcy5pdGVtcy5nZXQodGFyZ2V0KSB8fCB0aGlzLmNyZWF0ZURlZmF1bHQodGFyZ2V0KTtcbiAgICAgICAgY29uc3QgYXNuMVZhbHVlID0gW107XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHNjaGVtYS5pdGVtcykge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHNjaGVtYS5pdGVtc1trZXldO1xuICAgICAgICAgICAgY29uc3QgbmFtZSA9IHVzZU5hbWVzID8ga2V5IDogXCJcIjtcbiAgICAgICAgICAgIGxldCBhc24xSXRlbTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgKGl0ZW0udHlwZSkgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBBc24xVHlwZU5hbWUgPSBBc25Qcm9wVHlwZXNbaXRlbS50eXBlXTtcbiAgICAgICAgICAgICAgICBjb25zdCBBc24xVHlwZSA9IGFzbjFqc1tBc24xVHlwZU5hbWVdO1xuICAgICAgICAgICAgICAgIGlmICghQXNuMVR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZ2V0IEFTTjEgY2xhc3MgYnkgbmFtZSAnJHtBc24xVHlwZU5hbWV9J2ApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhc24xSXRlbSA9IG5ldyBBc24xVHlwZSh7IG5hbWUgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpc0NvbnZlcnRpYmxlKGl0ZW0udHlwZSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBpdGVtLnR5cGUoKTtcbiAgICAgICAgICAgICAgICBhc24xSXRlbSA9IGluc3RhbmNlLnRvU2NoZW1hKG5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXRlbS5vcHRpb25hbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1TY2hlbWEgPSB0aGlzLmdldChpdGVtLnR5cGUpO1xuICAgICAgICAgICAgICAgIGlmIChpdGVtU2NoZW1hLnR5cGUgPT09IEFzblR5cGVUeXBlcy5DaG9pY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgYXNuMUl0ZW0gPSBuZXcgYXNuMWpzLkFueSh7IG5hbWUgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhc24xSXRlbSA9IHRoaXMuY3JlYXRlKGl0ZW0udHlwZSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBhc24xSXRlbS5uYW1lID0gbmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhc24xSXRlbSA9IG5ldyBhc24xanMuQW55KHsgbmFtZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbmFsID0gISFpdGVtLm9wdGlvbmFsIHx8IGl0ZW0uZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoaXRlbS5yZXBlYXRlZCkge1xuICAgICAgICAgICAgICAgIGFzbjFJdGVtLm5hbWUgPSBcIlwiO1xuICAgICAgICAgICAgICAgIGNvbnN0IENvbnRhaW5lciA9IGl0ZW0ucmVwZWF0ZWQgPT09IFwic2V0XCJcbiAgICAgICAgICAgICAgICAgICAgPyBhc24xanMuU2V0XG4gICAgICAgICAgICAgICAgICAgIDogYXNuMWpzLlNlcXVlbmNlO1xuICAgICAgICAgICAgICAgIGFzbjFJdGVtID0gbmV3IENvbnRhaW5lcih7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgYXNuMWpzLlJlcGVhdGVkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBhc24xSXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGl0ZW0uY29udGV4dCAhPT0gbnVsbCAmJiBpdGVtLmNvbnRleHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLmltcGxpY2l0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaXRlbS50eXBlID09PSBcIm51bWJlclwiIHx8IGlzQ29udmVydGlibGUoaXRlbS50eXBlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ29udGFpbmVyID0gaXRlbS5yZXBlYXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gYXNuMWpzLkNvbnN0cnVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhc24xanMuUHJpbWl0aXZlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNuMVZhbHVlLnB1c2gobmV3IENvbnRhaW5lcih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZEJsb2NrOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ0NsYXNzOiAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdOdW1iZXI6IGl0ZW0uY29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWNoZShpdGVtLnR5cGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNSZXBlYXRlZCA9ICEhaXRlbS5yZXBlYXRlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9ICFpc1JlcGVhdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmdldChpdGVtLnR5cGUsIHRydWUpLnNjaGVtYVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYXNuMUl0ZW07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IFwidmFsdWVCbG9ja1wiIGluIHZhbHVlID8gdmFsdWUudmFsdWVCbG9jay52YWx1ZSA6IHZhbHVlLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNuMVZhbHVlLnB1c2gobmV3IGFzbjFqcy5Db25zdHJ1Y3RlZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogIWlzUmVwZWF0ZWQgPyBuYW1lIDogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZEJsb2NrOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ0NsYXNzOiAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdOdW1iZXI6IGl0ZW0uY29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYXNuMVZhbHVlLnB1c2gobmV3IGFzbjFqcy5Db25zdHJ1Y3RlZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkQmxvY2s6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdDbGFzczogMyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdOdW1iZXI6IGl0ZW0uY29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogW2FzbjFJdGVtXSxcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFzbjFJdGVtLm9wdGlvbmFsID0gb3B0aW9uYWw7XG4gICAgICAgICAgICAgICAgYXNuMVZhbHVlLnB1c2goYXNuMUl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoc2NoZW1hLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgQXNuVHlwZVR5cGVzLlNlcXVlbmNlOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgYXNuMWpzLlNlcXVlbmNlKHsgdmFsdWU6IGFzbjFWYWx1ZSwgbmFtZTogXCJcIiB9KTtcbiAgICAgICAgICAgIGNhc2UgQXNuVHlwZVR5cGVzLlNldDpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGFzbjFqcy5TZXQoeyB2YWx1ZTogYXNuMVZhbHVlLCBuYW1lOiBcIlwiIH0pO1xuICAgICAgICAgICAgY2FzZSBBc25UeXBlVHlwZXMuQ2hvaWNlOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgYXNuMWpzLkNob2ljZSh7IHZhbHVlOiBhc24xVmFsdWUsIG5hbWU6IFwiXCIgfSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgQVNOMSB0eXBlIGluIHVzZWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNldCh0YXJnZXQsIHNjaGVtYSkge1xuICAgICAgICB0aGlzLml0ZW1zLnNldCh0YXJnZXQsIHNjaGVtYSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBmaW5kUGFyZW50U2NoZW1hKHRhcmdldCkge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGFyZ2V0KTtcbiAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgY29uc3Qgc2NoZW1hID0gdGhpcy5pdGVtcy5nZXQocGFyZW50KTtcbiAgICAgICAgICAgIHJldHVybiBzY2hlbWEgfHwgdGhpcy5maW5kUGFyZW50U2NoZW1hKHBhcmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IEFzblNjaGVtYVN0b3JhZ2UgfSBmcm9tIFwiLi9zY2hlbWFcIjtcbmV4cG9ydCBjb25zdCBzY2hlbWFTdG9yYWdlID0gbmV3IEFzblNjaGVtYVN0b3JhZ2UoKTtcbiIsICJpbXBvcnQgKiBhcyBjb252ZXJ0ZXJzIGZyb20gXCIuL2NvbnZlcnRlcnNcIjtcbmltcG9ydCB7IEFzblR5cGVUeXBlcyB9IGZyb20gXCIuL2VudW1zXCI7XG5pbXBvcnQgeyBzY2hlbWFTdG9yYWdlIH0gZnJvbSBcIi4vc3RvcmFnZVwiO1xuZXhwb3J0IGNvbnN0IEFzblR5cGUgPSAob3B0aW9ucykgPT4gKHRhcmdldCkgPT4ge1xuICAgIGxldCBzY2hlbWE7XG4gICAgaWYgKCFzY2hlbWFTdG9yYWdlLmhhcyh0YXJnZXQpKSB7XG4gICAgICAgIHNjaGVtYSA9IHNjaGVtYVN0b3JhZ2UuY3JlYXRlRGVmYXVsdCh0YXJnZXQpO1xuICAgICAgICBzY2hlbWFTdG9yYWdlLnNldCh0YXJnZXQsIHNjaGVtYSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBzY2hlbWEgPSBzY2hlbWFTdG9yYWdlLmdldCh0YXJnZXQpO1xuICAgIH1cbiAgICBPYmplY3QuYXNzaWduKHNjaGVtYSwgb3B0aW9ucyk7XG59O1xuZXhwb3J0IGNvbnN0IEFzbkNob2ljZVR5cGUgPSAoKSA9PiBBc25UeXBlKHsgdHlwZTogQXNuVHlwZVR5cGVzLkNob2ljZSB9KTtcbmV4cG9ydCBjb25zdCBBc25TZXRUeXBlID0gKG9wdGlvbnMpID0+IEFzblR5cGUoeyB0eXBlOiBBc25UeXBlVHlwZXMuU2V0LCAuLi5vcHRpb25zIH0pO1xuZXhwb3J0IGNvbnN0IEFzblNlcXVlbmNlVHlwZSA9IChvcHRpb25zKSA9PiBBc25UeXBlKHsgdHlwZTogQXNuVHlwZVR5cGVzLlNlcXVlbmNlLCAuLi5vcHRpb25zIH0pO1xuZXhwb3J0IGNvbnN0IEFzblByb3AgPSAob3B0aW9ucykgPT4gKHRhcmdldCwgcHJvcGVydHlLZXkpID0+IHtcbiAgICBsZXQgc2NoZW1hO1xuICAgIGlmICghc2NoZW1hU3RvcmFnZS5oYXModGFyZ2V0LmNvbnN0cnVjdG9yKSkge1xuICAgICAgICBzY2hlbWEgPSBzY2hlbWFTdG9yYWdlLmNyZWF0ZURlZmF1bHQodGFyZ2V0LmNvbnN0cnVjdG9yKTtcbiAgICAgICAgc2NoZW1hU3RvcmFnZS5zZXQodGFyZ2V0LmNvbnN0cnVjdG9yLCBzY2hlbWEpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgc2NoZW1hID0gc2NoZW1hU3RvcmFnZS5nZXQodGFyZ2V0LmNvbnN0cnVjdG9yKTtcbiAgICB9XG4gICAgY29uc3QgY29weU9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKTtcbiAgICBpZiAodHlwZW9mIGNvcHlPcHRpb25zLnR5cGUgPT09IFwibnVtYmVyXCIgJiYgIWNvcHlPcHRpb25zLmNvbnZlcnRlcikge1xuICAgICAgICBjb25zdCBkZWZhdWx0Q29udmVydGVyID0gY29udmVydGVycy5kZWZhdWx0Q29udmVydGVyKG9wdGlvbnMudHlwZSk7XG4gICAgICAgIGlmICghZGVmYXVsdENvbnZlcnRlcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZ2V0IGRlZmF1bHQgY29udmVydGVyIGZvciBwcm9wZXJ0eSAnJHtwcm9wZXJ0eUtleX0nIG9mICR7dGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29weU9wdGlvbnMuY29udmVydGVyID0gZGVmYXVsdENvbnZlcnRlcjtcbiAgICB9XG4gICAgc2NoZW1hLml0ZW1zW3Byb3BlcnR5S2V5XSA9IGNvcHlPcHRpb25zO1xufTtcbiIsICJleHBvcnQgY2xhc3MgQXNuU2NoZW1hVmFsaWRhdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnNjaGVtYXMgPSBbXTtcbiAgICB9XG59XG4iLCAiZXhwb3J0ICogZnJvbSBcIi4vc2NoZW1hX3ZhbGlkYXRpb25cIjtcbiIsICJpbXBvcnQgKiBhcyBhc24xanMgZnJvbSBcImFzbjFqc1wiO1xuaW1wb3J0IHsgQXNuUHJvcFR5cGVzLCBBc25UeXBlVHlwZXMgfSBmcm9tIFwiLi9lbnVtc1wiO1xuaW1wb3J0ICogYXMgY29udmVydGVycyBmcm9tIFwiLi9jb252ZXJ0ZXJzXCI7XG5pbXBvcnQgeyBBc25TY2hlbWFWYWxpZGF0aW9uRXJyb3IgfSBmcm9tIFwiLi9lcnJvcnNcIjtcbmltcG9ydCB7IGlzQ29udmVydGlibGUsIGlzVHlwZU9mQXJyYXkgfSBmcm9tIFwiLi9oZWxwZXJcIjtcbmltcG9ydCB7IHNjaGVtYVN0b3JhZ2UgfSBmcm9tIFwiLi9zdG9yYWdlXCI7XG5leHBvcnQgY2xhc3MgQXNuUGFyc2VyIHtcbiAgICBzdGF0aWMgcGFyc2UoZGF0YSwgdGFyZ2V0KSB7XG4gICAgICAgIGNvbnN0IGFzbjFQYXJzZWQgPSBhc24xanMuZnJvbUJFUihkYXRhKTtcbiAgICAgICAgaWYgKGFzbjFQYXJzZWQucmVzdWx0LmVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYXNuMVBhcnNlZC5yZXN1bHQuZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlcyA9IHRoaXMuZnJvbUFTTihhc24xUGFyc2VkLnJlc3VsdCwgdGFyZ2V0KTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgc3RhdGljIGZyb21BU04oYXNuMVNjaGVtYSwgdGFyZ2V0KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChpc0NvbnZlcnRpYmxlKHRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG5ldyB0YXJnZXQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuZnJvbUFTTihhc24xU2NoZW1hKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IHNjaGVtYVN0b3JhZ2UuZ2V0KHRhcmdldCk7XG4gICAgICAgICAgICBzY2hlbWFTdG9yYWdlLmNhY2hlKHRhcmdldCk7XG4gICAgICAgICAgICBsZXQgdGFyZ2V0U2NoZW1hID0gc2NoZW1hLnNjaGVtYTtcbiAgICAgICAgICAgIGlmIChhc24xU2NoZW1hLmNvbnN0cnVjdG9yID09PSBhc24xanMuQ29uc3RydWN0ZWQgJiYgc2NoZW1hLnR5cGUgIT09IEFzblR5cGVUeXBlcy5DaG9pY2UpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRTY2hlbWEgPSBuZXcgYXNuMWpzLkNvbnN0cnVjdGVkKHtcbiAgICAgICAgICAgICAgICAgICAgaWRCbG9jazoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFnQ2xhc3M6IDMsXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWdOdW1iZXI6IGFzbjFTY2hlbWEuaWRCbG9jay50YWdOdW1iZXIsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBzY2hlbWEuc2NoZW1hLnZhbHVlQmxvY2sudmFsdWUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gc2NoZW1hLml0ZW1zKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBhc24xU2NoZW1hW2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYXNuMUNvbXBhcmVkU2NoZW1hID0gYXNuMWpzLmNvbXBhcmVTY2hlbWEoe30sIGFzbjFTY2hlbWEsIHRhcmdldFNjaGVtYSk7XG4gICAgICAgICAgICBpZiAoIWFzbjFDb21wYXJlZFNjaGVtYS52ZXJpZmllZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBBc25TY2hlbWFWYWxpZGF0aW9uRXJyb3IoYERhdGEgZG9lcyBub3QgbWF0Y2ggdG8gJHt0YXJnZXQubmFtZX0gQVNOMSBzY2hlbWEuICR7YXNuMUNvbXBhcmVkU2NoZW1hLnJlc3VsdC5lcnJvcn1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IG5ldyB0YXJnZXQoKTtcbiAgICAgICAgICAgIGlmIChpc1R5cGVPZkFycmF5KHRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIShcInZhbHVlXCIgaW4gYXNuMVNjaGVtYS52YWx1ZUJsb2NrICYmIEFycmF5LmlzQXJyYXkoYXNuMVNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZ2V0IGl0ZW1zIGZyb20gdGhlIEFTTi4xIHBhcnNlZCB2YWx1ZS4gQVNOLjEgb2JqZWN0IGlzIG5vdCBjb25zdHJ1Y3RlZC5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbVR5cGUgPSBzY2hlbWEuaXRlbVR5cGU7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtVHlwZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb252ZXJ0ZXIgPSBjb252ZXJ0ZXJzLmRlZmF1bHRDb252ZXJ0ZXIoaXRlbVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbnZlcnRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZ2V0IGRlZmF1bHQgY29udmVydGVyIGZvciBhcnJheSBpdGVtIG9mICR7dGFyZ2V0Lm5hbWV9IEFTTjEgc2NoZW1hYCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5mcm9tKGFzbjFTY2hlbWEudmFsdWVCbG9jay52YWx1ZSwgKGVsZW1lbnQpID0+IGNvbnZlcnRlci5mcm9tQVNOKGVsZW1lbnQpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXQuZnJvbShhc24xU2NoZW1hLnZhbHVlQmxvY2sudmFsdWUsIChlbGVtZW50KSA9PiB0aGlzLmZyb21BU04oZWxlbWVudCwgaXRlbVR5cGUpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBzY2hlbWEuaXRlbXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhc24xU2NoZW1hVmFsdWUgPSBhc24xQ29tcGFyZWRTY2hlbWEucmVzdWx0W2tleV07XG4gICAgICAgICAgICAgICAgaWYgKCFhc24xU2NoZW1hVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHNjaGVtYUl0ZW0gPSBzY2hlbWEuaXRlbXNba2V5XTtcbiAgICAgICAgICAgICAgICBjb25zdCBzY2hlbWFJdGVtVHlwZSA9IHNjaGVtYUl0ZW0udHlwZTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNjaGVtYUl0ZW1UeXBlID09PSBcIm51bWJlclwiIHx8IGlzQ29udmVydGlibGUoc2NoZW1hSXRlbVR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnZlcnRlciA9IChfYSA9IHNjaGVtYUl0ZW0uY29udmVydGVyKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAoaXNDb252ZXJ0aWJsZShzY2hlbWFJdGVtVHlwZSlcbiAgICAgICAgICAgICAgICAgICAgICAgID8gbmV3IHNjaGVtYUl0ZW1UeXBlKClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY29udmVydGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb252ZXJ0ZXIgaXMgZW1wdHlcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYUl0ZW0ucmVwZWF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWFJdGVtLmltcGxpY2l0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ29udGFpbmVyID0gc2NoZW1hSXRlbS5yZXBlYXRlZCA9PT0gXCJzZXF1ZW5jZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gYXNuMWpzLlNlcXVlbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYXNuMWpzLlNldDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdJdGVtID0gbmV3IENvbnRhaW5lcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0l0ZW0udmFsdWVCbG9jayA9IGFzbjFTY2hlbWFWYWx1ZS52YWx1ZUJsb2NrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0l0ZW1Bc24gPSBhc24xanMuZnJvbUJFUihuZXdJdGVtLnRvQkVSKGZhbHNlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0l0ZW1Bc24ub2Zmc2V0ID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBwYXJzZSB0aGUgY2hpbGQgaXRlbS4gJHtuZXdJdGVtQXNuLnJlc3VsdC5lcnJvcn1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoXCJ2YWx1ZVwiIGluIG5ld0l0ZW1Bc24ucmVzdWx0LnZhbHVlQmxvY2sgJiYgQXJyYXkuaXNBcnJheShuZXdJdGVtQXNuLnJlc3VsdC52YWx1ZUJsb2NrLnZhbHVlKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGdldCBpdGVtcyBmcm9tIHRoZSBBU04uMSBwYXJzZWQgdmFsdWUuIEFTTi4xIG9iamVjdCBpcyBub3QgY29uc3RydWN0ZWQuXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG5ld0l0ZW1Bc24ucmVzdWx0LnZhbHVlQmxvY2sudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzW2tleV0gPSBBcnJheS5mcm9tKHZhbHVlLCAoZWxlbWVudCkgPT4gY29udmVydGVyLmZyb21BU04oZWxlbWVudCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzW2tleV0gPSBBcnJheS5mcm9tKGFzbjFTY2hlbWFWYWx1ZSwgKGVsZW1lbnQpID0+IGNvbnZlcnRlci5mcm9tQVNOKGVsZW1lbnQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IGFzbjFTY2hlbWFWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWFJdGVtLmltcGxpY2l0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld0l0ZW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ29udmVydGlibGUoc2NoZW1hSXRlbVR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0l0ZW0gPSBuZXcgc2NoZW1hSXRlbVR5cGUoKS50b1NjaGVtYShcIlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFzbjFUeXBlTmFtZSA9IEFzblByb3BUeXBlc1tzY2hlbWFJdGVtVHlwZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFzbjFUeXBlID0gYXNuMWpzW0FzbjFUeXBlTmFtZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXNuMVR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGdldCAnJHtBc24xVHlwZU5hbWV9JyBjbGFzcyBmcm9tIGFzbjFqcyBtb2R1bGVgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdJdGVtID0gbmV3IEFzbjFUeXBlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0l0ZW0udmFsdWVCbG9jayA9IHZhbHVlLnZhbHVlQmxvY2s7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBhc24xanMuZnJvbUJFUihuZXdJdGVtLnRvQkVSKGZhbHNlKSkucmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzW2tleV0gPSBjb252ZXJ0ZXIuZnJvbUFTTih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWFJdGVtLnJlcGVhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXNuMVNjaGVtYVZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBnZXQgbGlzdCBvZiBpdGVtcyBmcm9tIHRoZSBBU04uMSBwYXJzZWQgdmFsdWUuIEFTTi4xIHZhbHVlIHNob3VsZCBiZSBpdGVyYWJsZS5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNba2V5XSA9IEFycmF5LmZyb20oYXNuMVNjaGVtYVZhbHVlLCAoZWxlbWVudCkgPT4gdGhpcy5mcm9tQVNOKGVsZW1lbnQsIHNjaGVtYUl0ZW1UeXBlKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNba2V5XSA9IHRoaXMuZnJvbUFTTihhc24xU2NoZW1hVmFsdWUsIHNjaGVtYUl0ZW1UeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBBc25TY2hlbWFWYWxpZGF0aW9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBlcnJvci5zY2hlbWFzLnB1c2godGFyZ2V0Lm5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCAiaW1wb3J0ICogYXMgYXNuMWpzIGZyb20gXCJhc24xanNcIjtcbmltcG9ydCAqIGFzIGNvbnZlcnRlcnMgZnJvbSBcIi4vY29udmVydGVyc1wiO1xuaW1wb3J0IHsgQXNuUHJvcFR5cGVzLCBBc25UeXBlVHlwZXMgfSBmcm9tIFwiLi9lbnVtc1wiO1xuaW1wb3J0IHsgaXNDb252ZXJ0aWJsZSwgaXNBcnJheUVxdWFsIH0gZnJvbSBcIi4vaGVscGVyXCI7XG5pbXBvcnQgeyBzY2hlbWFTdG9yYWdlIH0gZnJvbSBcIi4vc3RvcmFnZVwiO1xuZXhwb3J0IGNsYXNzIEFzblNlcmlhbGl6ZXIge1xuICAgIHN0YXRpYyBzZXJpYWxpemUob2JqKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBhc24xanMuQmFzZUJsb2NrKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JqLnRvQkVSKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy50b0FTTihvYmopLnRvQkVSKGZhbHNlKTtcbiAgICB9XG4gICAgc3RhdGljIHRvQVNOKG9iaikge1xuICAgICAgICBpZiAob2JqICYmIHR5cGVvZiBvYmogPT09IFwib2JqZWN0XCIgJiYgaXNDb252ZXJ0aWJsZShvYmopKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JqLnRvQVNOKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEob2JqICYmIHR5cGVvZiBvYmogPT09IFwib2JqZWN0XCIpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUGFyYW1ldGVyIDEgc2hvdWxkIGJlIHR5cGUgb2YgT2JqZWN0LlwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0YXJnZXQgPSBvYmouY29uc3RydWN0b3I7XG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IHNjaGVtYVN0b3JhZ2UuZ2V0KHRhcmdldCk7XG4gICAgICAgIHNjaGVtYVN0b3JhZ2UuY2FjaGUodGFyZ2V0KTtcbiAgICAgICAgbGV0IGFzbjFWYWx1ZSA9IFtdO1xuICAgICAgICBpZiAoc2NoZW1hLml0ZW1UeXBlKSB7XG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQYXJhbWV0ZXIgMSBzaG91bGQgYmUgdHlwZSBvZiBBcnJheS5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS5pdGVtVHlwZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnZlcnRlciA9IGNvbnZlcnRlcnMuZGVmYXVsdENvbnZlcnRlcihzY2hlbWEuaXRlbVR5cGUpO1xuICAgICAgICAgICAgICAgIGlmICghY29udmVydGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGdldCBkZWZhdWx0IGNvbnZlcnRlciBmb3IgYXJyYXkgaXRlbSBvZiAke3RhcmdldC5uYW1lfSBBU04xIHNjaGVtYWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhc24xVmFsdWUgPSBvYmoubWFwKChvKSA9PiBjb252ZXJ0ZXIudG9BU04obykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYXNuMVZhbHVlID0gb2JqLm1hcCgobykgPT4gdGhpcy50b0Fzbkl0ZW0oeyB0eXBlOiBzY2hlbWEuaXRlbVR5cGUgfSwgXCJbXVwiLCB0YXJnZXQsIG8pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHNjaGVtYS5pdGVtcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNjaGVtYUl0ZW0gPSBzY2hlbWEuaXRlbXNba2V5XTtcbiAgICAgICAgICAgICAgICBjb25zdCBvYmpQcm9wID0gb2JqW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKG9ialByb3AgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICB8fCBzY2hlbWFJdGVtLmRlZmF1bHRWYWx1ZSA9PT0gb2JqUHJvcFxuICAgICAgICAgICAgICAgICAgICB8fCAodHlwZW9mIHNjaGVtYUl0ZW0uZGVmYXVsdFZhbHVlID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBvYmpQcm9wID09PSBcIm9iamVjdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiBpc0FycmF5RXF1YWwodGhpcy5zZXJpYWxpemUoc2NoZW1hSXRlbS5kZWZhdWx0VmFsdWUpLCB0aGlzLnNlcmlhbGl6ZShvYmpQcm9wKSkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBhc24xSXRlbSA9IEFzblNlcmlhbGl6ZXIudG9Bc25JdGVtKHNjaGVtYUl0ZW0sIGtleSwgdGFyZ2V0LCBvYmpQcm9wKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNjaGVtYUl0ZW0uY29udGV4dCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hSXRlbS5pbXBsaWNpdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzY2hlbWFJdGVtLnJlcGVhdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKHR5cGVvZiBzY2hlbWFJdGVtLnR5cGUgPT09IFwibnVtYmVyXCIgfHwgaXNDb252ZXJ0aWJsZShzY2hlbWFJdGVtLnR5cGUpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUudmFsdWVIZXggPSBhc24xSXRlbSBpbnN0YW5jZW9mIGFzbjFqcy5OdWxsID8gYXNuMUl0ZW0udmFsdWVCZWZvcmVEZWNvZGVWaWV3IDogYXNuMUl0ZW0udmFsdWVCbG9jay50b0JFUigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzbjFWYWx1ZS5wdXNoKG5ldyBhc24xanMuUHJpbWl0aXZlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWw6IHNjaGVtYUl0ZW0ub3B0aW9uYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkQmxvY2s6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ0NsYXNzOiAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnTnVtYmVyOiBzY2hlbWFJdGVtLmNvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzbjFWYWx1ZS5wdXNoKG5ldyBhc24xanMuQ29uc3RydWN0ZWQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbDogc2NoZW1hSXRlbS5vcHRpb25hbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRCbG9jazoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnQ2xhc3M6IDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdOdW1iZXI6IHNjaGVtYUl0ZW0uY29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGFzbjFJdGVtLnZhbHVlQmxvY2sudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNuMVZhbHVlLnB1c2gobmV3IGFzbjFqcy5Db25zdHJ1Y3RlZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWw6IHNjaGVtYUl0ZW0ub3B0aW9uYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRCbG9jazoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdDbGFzczogMyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnTnVtYmVyOiBzY2hlbWFJdGVtLmNvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogW2FzbjFJdGVtXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzY2hlbWFJdGVtLnJlcGVhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzbjFWYWx1ZSA9IGFzbjFWYWx1ZS5jb25jYXQoYXNuMUl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYXNuMVZhbHVlLnB1c2goYXNuMUl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgYXNuU2NoZW1hO1xuICAgICAgICBzd2l0Y2ggKHNjaGVtYS50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIEFzblR5cGVUeXBlcy5TZXF1ZW5jZTpcbiAgICAgICAgICAgICAgICBhc25TY2hlbWEgPSBuZXcgYXNuMWpzLlNlcXVlbmNlKHsgdmFsdWU6IGFzbjFWYWx1ZSB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQXNuVHlwZVR5cGVzLlNldDpcbiAgICAgICAgICAgICAgICBhc25TY2hlbWEgPSBuZXcgYXNuMWpzLlNldCh7IHZhbHVlOiBhc24xVmFsdWUgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEFzblR5cGVUeXBlcy5DaG9pY2U6XG4gICAgICAgICAgICAgICAgaWYgKCFhc24xVmFsdWVbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTY2hlbWEgJyR7dGFyZ2V0Lm5hbWV9JyBoYXMgd3JvbmcgZGF0YS4gQ2hvaWNlIGNhbm5vdCBiZSBlbXB0eS5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXNuU2NoZW1hID0gYXNuMVZhbHVlWzBdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhc25TY2hlbWE7XG4gICAgfVxuICAgIHN0YXRpYyB0b0Fzbkl0ZW0oc2NoZW1hSXRlbSwga2V5LCB0YXJnZXQsIG9ialByb3ApIHtcbiAgICAgICAgbGV0IGFzbjFJdGVtO1xuICAgICAgICBpZiAodHlwZW9mIChzY2hlbWFJdGVtLnR5cGUpID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICBjb25zdCBjb252ZXJ0ZXIgPSBzY2hlbWFJdGVtLmNvbnZlcnRlcjtcbiAgICAgICAgICAgIGlmICghY29udmVydGVyKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm9wZXJ0eSAnJHtrZXl9JyBkb2Vzbid0IGhhdmUgY29udmVydGVyIGZvciB0eXBlICR7QXNuUHJvcFR5cGVzW3NjaGVtYUl0ZW0udHlwZV19IGluIHNjaGVtYSAnJHt0YXJnZXQubmFtZX0nYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2NoZW1hSXRlbS5yZXBlYXRlZCkge1xuICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvYmpQcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUGFyYW1ldGVyICdvYmpQcm9wJyBzaG91bGQgYmUgdHlwZSBvZiBBcnJheS5cIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gQXJyYXkuZnJvbShvYmpQcm9wLCAoZWxlbWVudCkgPT4gY29udmVydGVyLnRvQVNOKGVsZW1lbnQpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBDb250YWluZXIgPSBzY2hlbWFJdGVtLnJlcGVhdGVkID09PSBcInNlcXVlbmNlXCJcbiAgICAgICAgICAgICAgICAgICAgPyBhc24xanMuU2VxdWVuY2VcbiAgICAgICAgICAgICAgICAgICAgOiBhc24xanMuU2V0O1xuICAgICAgICAgICAgICAgIGFzbjFJdGVtID0gbmV3IENvbnRhaW5lcih7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBpdGVtcyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFzbjFJdGVtID0gY29udmVydGVyLnRvQVNOKG9ialByb3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHNjaGVtYUl0ZW0ucmVwZWF0ZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob2JqUHJvcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlBhcmFtZXRlciAnb2JqUHJvcCcgc2hvdWxkIGJlIHR5cGUgb2YgQXJyYXkuXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtcyA9IEFycmF5LmZyb20ob2JqUHJvcCwgKGVsZW1lbnQpID0+IHRoaXMudG9BU04oZWxlbWVudCkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IENvbnRhaW5lciA9IHNjaGVtYUl0ZW0ucmVwZWF0ZWQgPT09IFwic2VxdWVuY2VcIlxuICAgICAgICAgICAgICAgICAgICA/IGFzbjFqcy5TZXF1ZW5jZVxuICAgICAgICAgICAgICAgICAgICA6IGFzbjFqcy5TZXQ7XG4gICAgICAgICAgICAgICAgYXNuMUl0ZW0gPSBuZXcgQ29udGFpbmVyKHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGl0ZW1zLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYXNuMUl0ZW0gPSB0aGlzLnRvQVNOKG9ialByb3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhc24xSXRlbTtcbiAgICB9XG59XG4iLCAiZXhwb3J0IGNsYXNzIEFzbkFycmF5IGV4dGVuZHMgQXJyYXkge1xuICAgIGNvbnN0cnVjdG9yKGl0ZW1zID0gW10pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpdGVtcyA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgc3VwZXIoaXRlbXMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgICAgICAgICAgIHRoaXMucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiIsICJpbXBvcnQgKiBhcyBhc24xanMgZnJvbSBcImFzbjFqc1wiO1xuaW1wb3J0IHsgQnVmZmVyU291cmNlQ29udmVydGVyIH0gZnJvbSBcInB2dHN1dGlsc1wiO1xuaW1wb3J0IHsgQXNuUGFyc2VyIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5pbXBvcnQgeyBBc25TZXJpYWxpemVyIH0gZnJvbSBcIi4vc2VyaWFsaXplclwiO1xuZXhwb3J0IGNsYXNzIEFzbkNvbnZlcnQge1xuICAgIHN0YXRpYyBzZXJpYWxpemUob2JqKSB7XG4gICAgICAgIHJldHVybiBBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShvYmopO1xuICAgIH1cbiAgICBzdGF0aWMgcGFyc2UoZGF0YSwgdGFyZ2V0KSB7XG4gICAgICAgIHJldHVybiBBc25QYXJzZXIucGFyc2UoZGF0YSwgdGFyZ2V0KTtcbiAgICB9XG4gICAgc3RhdGljIHRvU3RyaW5nKGRhdGEpIHtcbiAgICAgICAgY29uc3QgYnVmID0gQnVmZmVyU291cmNlQ29udmVydGVyLmlzQnVmZmVyU291cmNlKGRhdGEpXG4gICAgICAgICAgICA/IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKGRhdGEpXG4gICAgICAgICAgICA6IEFzbkNvbnZlcnQuc2VyaWFsaXplKGRhdGEpO1xuICAgICAgICBjb25zdCBhc24gPSBhc24xanMuZnJvbUJFUihidWYpO1xuICAgICAgICBpZiAoYXNuLm9mZnNldCA9PT0gLTEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGRlY29kZSBBU04uMSBkYXRhLiAke2Fzbi5yZXN1bHQuZXJyb3J9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFzbi5yZXN1bHQudG9TdHJpbmcoKTtcbiAgICB9XG59XG4iLCAiZXhwb3J0ICogZnJvbSBcIi4vY29udmVydGVyc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdHlwZXMvaW5kZXhcIjtcbmV4cG9ydCB7IEFzblByb3AsIEFzblR5cGUsIEFzbkNob2ljZVR5cGUsIEFzblNlcXVlbmNlVHlwZSwgQXNuU2V0VHlwZSB9IGZyb20gXCIuL2RlY29yYXRvcnNcIjtcbmV4cG9ydCB7IEFzblR5cGVUeXBlcywgQXNuUHJvcFR5cGVzIH0gZnJvbSBcIi4vZW51bXNcIjtcbmV4cG9ydCB7IEFzblBhcnNlciB9IGZyb20gXCIuL3BhcnNlclwiO1xuZXhwb3J0IHsgQXNuU2VyaWFsaXplciB9IGZyb20gXCIuL3NlcmlhbGl6ZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2Vycm9yc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vb2JqZWN0c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29udmVydFwiO1xuIiwgIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlLCBTdXBwcmVzc2VkRXJyb3IsIFN5bWJvbCwgSXRlcmF0b3IgKi9cblxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XG4gIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XG4gIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59XG5cbmV4cG9ydCB2YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcbiAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcbiAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0O1xuICB9XG4gIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcbiAgdmFyIHQgPSB7fTtcbiAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICB0W3BdID0gc1twXTtcbiAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XG4gICAgICB9XG4gIHJldHVybiB0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19wYXJhbShwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2VzRGVjb3JhdGUoY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHtcbiAgZnVuY3Rpb24gYWNjZXB0KGYpIHsgaWYgKGYgIT09IHZvaWQgMCAmJiB0eXBlb2YgZiAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRnVuY3Rpb24gZXhwZWN0ZWRcIik7IHJldHVybiBmOyB9XG4gIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleSA9IGtpbmQgPT09IFwiZ2V0dGVyXCIgPyBcImdldFwiIDoga2luZCA9PT0gXCJzZXR0ZXJcIiA/IFwic2V0XCIgOiBcInZhbHVlXCI7XG4gIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bXCJzdGF0aWNcIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsO1xuICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTtcbiAgdmFyIF8sIGRvbmUgPSBmYWxzZTtcbiAgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZhciBjb250ZXh0ID0ge307XG4gICAgICBmb3IgKHZhciBwIGluIGNvbnRleHRJbikgY29udGV4dFtwXSA9IHAgPT09IFwiYWNjZXNzXCIgPyB7fSA6IGNvbnRleHRJbltwXTtcbiAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dC5hY2Nlc3NbcF0gPSBjb250ZXh0SW4uYWNjZXNzW3BdO1xuICAgICAgY29udGV4dC5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uIChmKSB7IGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkXCIpOyBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmIHx8IG51bGwpKTsgfTtcbiAgICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpXSkoa2luZCA9PT0gXCJhY2Nlc3NvclwiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleV0sIGNvbnRleHQpO1xuICAgICAgaWYgKGtpbmQgPT09IFwiYWNjZXNzb3JcIikge1xuICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSBcIm9iamVjdFwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF87XG4gICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXztcbiAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF8pO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoXyA9IGFjY2VwdChyZXN1bHQpKSB7XG4gICAgICAgICAgaWYgKGtpbmQgPT09IFwiZmllbGRcIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXyk7XG4gICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleV0gPSBfO1xuICAgICAgfVxuICB9XG4gIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTtcbiAgZG9uZSA9IHRydWU7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19ydW5Jbml0aWFsaXplcnModGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZSkge1xuICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhbHVlID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnLCB2YWx1ZSkgOiBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnKTtcbiAgfVxuICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZSA6IHZvaWQgMDtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3Byb3BLZXkoeCkge1xuICByZXR1cm4gdHlwZW9mIHggPT09IFwic3ltYm9sXCIgPyB4IDogXCJcIi5jb25jYXQoeCk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19zZXRGdW5jdGlvbk5hbWUoZiwgbmFtZSwgcHJlZml4KSB7XG4gIGlmICh0eXBlb2YgbmFtZSA9PT0gXCJzeW1ib2xcIikgbmFtZSA9IG5hbWUuZGVzY3JpcHRpb24gPyBcIltcIi5jb25jYXQobmFtZS5kZXNjcmlwdGlvbiwgXCJdXCIpIDogXCJcIjtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCBcIm5hbWVcIiwgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiBwcmVmaXggPyBcIlwiLmNvbmNhdChwcmVmaXgsIFwiIFwiLCBuYW1lKSA6IG5hbWUgfSk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xuICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xuICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEl0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKTtcbiAgcmV0dXJuIGcubmV4dCA9IHZlcmIoMCksIGdbXCJ0aHJvd1wiXSA9IHZlcmIoMSksIGdbXCJyZXR1cm5cIl0gPSB2ZXJiKDIpLCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xuICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gIH1cbn1cblxuZXhwb3J0IHZhciBfX2NyZWF0ZUJpbmRpbmcgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIG9bazJdID0gbVtrXTtcbn0pO1xuXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIG8pIHtcbiAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xuICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xuICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcbiAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XG4gICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xuICAgICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xuICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghbSkgcmV0dXJuIG87XG4gIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICB0cnkge1xuICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gIH1cbiAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gIGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgIH1cbiAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICB9XG4gIHJldHVybiBhcjtcbn1cblxuLyoqIEBkZXByZWNhdGVkICovXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWQoKSB7XG4gIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxuICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xuICByZXR1cm4gYXI7XG59XG5cbi8qKiBAZGVwcmVjYXRlZCAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xuICBmb3IgKHZhciBzID0gMCwgaSA9IDAsIGlsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHMgKz0gYXJndW1lbnRzW2ldLmxlbmd0aDtcbiAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxuICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXG4gICAgICAgICAgcltrXSA9IGFbal07XG4gIHJldHVybiByO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheSh0bywgZnJvbSwgcGFjaykge1xuICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgICAgfVxuICB9XG4gIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XG4gIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcbiAgcmV0dXJuIGkgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgQXN5bmNJdGVyYXRvciA9PT0gXCJmdW5jdGlvblwiID8gQXN5bmNJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiLCBhd2FpdFJldHVybiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcbiAgZnVuY3Rpb24gYXdhaXRSZXR1cm4oZikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGYsIHJlamVjdCk7IH07IH1cbiAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlmIChnW25dKSB7IGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IGlmIChmKSBpW25dID0gZihpW25dKTsgfSB9XG4gIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cbiAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XG4gIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cbiAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcbiAgdmFyIGksIHA7XG4gIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XG4gIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IGZhbHNlIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcbiAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XG4gIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XG4gIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XG4gIHJldHVybiBjb29rZWQ7XG59O1xuXG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59O1xuXG52YXIgb3duS2V5cyA9IGZ1bmN0aW9uKG8pIHtcbiAgb3duS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIChvKSB7XG4gICAgdmFyIGFyID0gW107XG4gICAgZm9yICh2YXIgayBpbiBvKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIGspKSBhclthci5sZW5ndGhdID0gaztcbiAgICByZXR1cm4gYXI7XG4gIH07XG4gIHJldHVybiBvd25LZXlzKG8pO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0U3Rhcihtb2QpIHtcbiAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgPSBvd25LZXlzKG1vZCksIGkgPSAwOyBpIDwgay5sZW5ndGg7IGkrKykgaWYgKGtbaV0gIT09IFwiZGVmYXVsdFwiKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGtbaV0pO1xuICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnREZWZhdWx0KG1vZCkge1xuICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IGRlZmF1bHQ6IG1vZCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcbiAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xuICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xuICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XG4gIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcbiAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4oc3RhdGUsIHJlY2VpdmVyKSB7XG4gIGlmIChyZWNlaXZlciA9PT0gbnVsbCB8fCAodHlwZW9mIHJlY2VpdmVyICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiByZWNlaXZlciAhPT0gXCJmdW5jdGlvblwiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB1c2UgJ2luJyBvcGVyYXRvciBvbiBub24tb2JqZWN0XCIpO1xuICByZXR1cm4gdHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciA9PT0gc3RhdGUgOiBzdGF0ZS5oYXMocmVjZWl2ZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hZGREaXNwb3NhYmxlUmVzb3VyY2UoZW52LCB2YWx1ZSwgYXN5bmMpIHtcbiAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB2b2lkIDApIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IGV4cGVjdGVkLlwiKTtcbiAgICB2YXIgZGlzcG9zZSwgaW5uZXI7XG4gICAgaWYgKGFzeW5jKSB7XG4gICAgICBpZiAoIVN5bWJvbC5hc3luY0Rpc3Bvc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNEaXNwb3NlIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgICAgIGRpc3Bvc2UgPSB2YWx1ZVtTeW1ib2wuYXN5bmNEaXNwb3NlXTtcbiAgICB9XG4gICAgaWYgKGRpc3Bvc2UgPT09IHZvaWQgMCkge1xuICAgICAgaWYgKCFTeW1ib2wuZGlzcG9zZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5kaXNwb3NlIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgICAgIGRpc3Bvc2UgPSB2YWx1ZVtTeW1ib2wuZGlzcG9zZV07XG4gICAgICBpZiAoYXN5bmMpIGlubmVyID0gZGlzcG9zZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkaXNwb3NlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3Qgbm90IGRpc3Bvc2FibGUuXCIpO1xuICAgIGlmIChpbm5lcikgZGlzcG9zZSA9IGZ1bmN0aW9uKCkgeyB0cnkgeyBpbm5lci5jYWxsKHRoaXMpOyB9IGNhdGNoIChlKSB7IHJldHVybiBQcm9taXNlLnJlamVjdChlKTsgfSB9O1xuICAgIGVudi5zdGFjay5wdXNoKHsgdmFsdWU6IHZhbHVlLCBkaXNwb3NlOiBkaXNwb3NlLCBhc3luYzogYXN5bmMgfSk7XG4gIH1cbiAgZWxzZSBpZiAoYXN5bmMpIHtcbiAgICBlbnYuc3RhY2sucHVzaCh7IGFzeW5jOiB0cnVlIH0pO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxudmFyIF9TdXBwcmVzc2VkRXJyb3IgPSB0eXBlb2YgU3VwcHJlc3NlZEVycm9yID09PSBcImZ1bmN0aW9uXCIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IsIHN1cHByZXNzZWQsIG1lc3NhZ2UpIHtcbiAgdmFyIGUgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIHJldHVybiBlLm5hbWUgPSBcIlN1cHByZXNzZWRFcnJvclwiLCBlLmVycm9yID0gZXJyb3IsIGUuc3VwcHJlc3NlZCA9IHN1cHByZXNzZWQsIGU7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19kaXNwb3NlUmVzb3VyY2VzKGVudikge1xuICBmdW5jdGlvbiBmYWlsKGUpIHtcbiAgICBlbnYuZXJyb3IgPSBlbnYuaGFzRXJyb3IgPyBuZXcgX1N1cHByZXNzZWRFcnJvcihlLCBlbnYuZXJyb3IsIFwiQW4gZXJyb3Igd2FzIHN1cHByZXNzZWQgZHVyaW5nIGRpc3Bvc2FsLlwiKSA6IGU7XG4gICAgZW52Lmhhc0Vycm9yID0gdHJ1ZTtcbiAgfVxuICB2YXIgciwgcyA9IDA7XG4gIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgd2hpbGUgKHIgPSBlbnYuc3RhY2sucG9wKCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghci5hc3luYyAmJiBzID09PSAxKSByZXR1cm4gcyA9IDAsIGVudi5zdGFjay5wdXNoKHIpLCBQcm9taXNlLnJlc29sdmUoKS50aGVuKG5leHQpO1xuICAgICAgICBpZiAoci5kaXNwb3NlKSB7XG4gICAgICAgICAgdmFyIHJlc3VsdCA9IHIuZGlzcG9zZS5jYWxsKHIudmFsdWUpO1xuICAgICAgICAgIGlmIChyLmFzeW5jKSByZXR1cm4gcyB8PSAyLCBQcm9taXNlLnJlc29sdmUocmVzdWx0KS50aGVuKG5leHQsIGZ1bmN0aW9uKGUpIHsgZmFpbChlKTsgcmV0dXJuIG5leHQoKTsgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBzIHw9IDE7XG4gICAgICB9XG4gICAgICBjYXRjaCAoZSkge1xuICAgICAgICBmYWlsKGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocyA9PT0gMSkgcmV0dXJuIGVudi5oYXNFcnJvciA/IFByb21pc2UucmVqZWN0KGVudi5lcnJvcikgOiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICBpZiAoZW52Lmhhc0Vycm9yKSB0aHJvdyBlbnYuZXJyb3I7XG4gIH1cbiAgcmV0dXJuIG5leHQoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fcmV3cml0ZVJlbGF0aXZlSW1wb3J0RXh0ZW5zaW9uKHBhdGgsIHByZXNlcnZlSnN4KSB7XG4gIGlmICh0eXBlb2YgcGF0aCA9PT0gXCJzdHJpbmdcIiAmJiAvXlxcLlxcLj9cXC8vLnRlc3QocGF0aCkpIHtcbiAgICAgIHJldHVybiBwYXRoLnJlcGxhY2UoL1xcLih0c3gpJHwoKD86XFwuZCk/KSgoPzpcXC5bXi4vXSs/KT8pXFwuKFtjbV0/KXRzJC9pLCBmdW5jdGlvbiAobSwgdHN4LCBkLCBleHQsIGNtKSB7XG4gICAgICAgICAgcmV0dXJuIHRzeCA/IHByZXNlcnZlSnN4ID8gXCIuanN4XCIgOiBcIi5qc1wiIDogZCAmJiAoIWV4dCB8fCAhY20pID8gbSA6IChkICsgZXh0ICsgXCIuXCIgKyBjbS50b0xvd2VyQ2FzZSgpICsgXCJqc1wiKTtcbiAgICAgIH0pO1xuICB9XG4gIHJldHVybiBwYXRoO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZXh0ZW5kcyxcbiAgX19hc3NpZ24sXG4gIF9fcmVzdCxcbiAgX19kZWNvcmF0ZSxcbiAgX19wYXJhbSxcbiAgX19lc0RlY29yYXRlLFxuICBfX3J1bkluaXRpYWxpemVycyxcbiAgX19wcm9wS2V5LFxuICBfX3NldEZ1bmN0aW9uTmFtZSxcbiAgX19tZXRhZGF0YSxcbiAgX19hd2FpdGVyLFxuICBfX2dlbmVyYXRvcixcbiAgX19jcmVhdGVCaW5kaW5nLFxuICBfX2V4cG9ydFN0YXIsXG4gIF9fdmFsdWVzLFxuICBfX3JlYWQsXG4gIF9fc3ByZWFkLFxuICBfX3NwcmVhZEFycmF5cyxcbiAgX19zcHJlYWRBcnJheSxcbiAgX19hd2FpdCxcbiAgX19hc3luY0dlbmVyYXRvcixcbiAgX19hc3luY0RlbGVnYXRvcixcbiAgX19hc3luY1ZhbHVlcyxcbiAgX19tYWtlVGVtcGxhdGVPYmplY3QsXG4gIF9faW1wb3J0U3RhcixcbiAgX19pbXBvcnREZWZhdWx0LFxuICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0LFxuICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0LFxuICBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4sXG4gIF9fYWRkRGlzcG9zYWJsZVJlc291cmNlLFxuICBfX2Rpc3Bvc2VSZXNvdXJjZXMsXG4gIF9fcmV3cml0ZVJlbGF0aXZlSW1wb3J0RXh0ZW5zaW9uLFxufTtcbiIsICIvKipcbiAqIENvcHlyaWdodCAoYykgMjAyMCwgUGVjdWxpYXIgVmVudHVyZXMsIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKi9cblxuY2xhc3MgSnNvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3IobWVzc2FnZSwgaW5uZXJFcnJvcikge1xyXG4gICAgICAgIHN1cGVyKGlubmVyRXJyb3JcclxuICAgICAgICAgICAgPyBgJHttZXNzYWdlfS4gU2VlIHRoZSBpbm5lciBleGNlcHRpb24gZm9yIG1vcmUgZGV0YWlscy5gXHJcbiAgICAgICAgICAgIDogbWVzc2FnZSk7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcclxuICAgICAgICB0aGlzLmlubmVyRXJyb3IgPSBpbm5lckVycm9yO1xyXG4gICAgfVxyXG59XG5cbmNsYXNzIFRyYW5zZm9ybUVycm9yIGV4dGVuZHMgSnNvbkVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKHNjaGVtYSwgbWVzc2FnZSwgaW5uZXJFcnJvcikge1xyXG4gICAgICAgIHN1cGVyKG1lc3NhZ2UsIGlubmVyRXJyb3IpO1xyXG4gICAgICAgIHRoaXMuc2NoZW1hID0gc2NoZW1hO1xyXG4gICAgfVxyXG59XG5cbmNsYXNzIFBhcnNlckVycm9yIGV4dGVuZHMgVHJhbnNmb3JtRXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3Ioc2NoZW1hLCBtZXNzYWdlLCBpbm5lckVycm9yKSB7XHJcbiAgICAgICAgc3VwZXIoc2NoZW1hLCBgSlNPTiBkb2Vzbid0IG1hdGNoIHRvICcke3NjaGVtYS50YXJnZXQubmFtZX0nIHNjaGVtYS4gJHttZXNzYWdlfWAsIGlubmVyRXJyb3IpO1xyXG4gICAgfVxyXG59XG5cbmNsYXNzIFZhbGlkYXRpb25FcnJvciBleHRlbmRzIEpzb25FcnJvciB7XHJcbn1cblxuY2xhc3MgU2VyaWFsaXplckVycm9yIGV4dGVuZHMgSnNvbkVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKHNjaGVtYU5hbWUsIG1lc3NhZ2UsIGlubmVyRXJyb3IpIHtcclxuICAgICAgICBzdXBlcihgQ2Fubm90IHNlcmlhbGl6ZSBieSAnJHtzY2hlbWFOYW1lfScgc2NoZW1hLiAke21lc3NhZ2V9YCwgaW5uZXJFcnJvcik7XHJcbiAgICAgICAgdGhpcy5zY2hlbWFOYW1lID0gc2NoZW1hTmFtZTtcclxuICAgIH1cclxufVxuXG5jbGFzcyBLZXlFcnJvciBleHRlbmRzIFBhcnNlckVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKHNjaGVtYSwga2V5cywgZXJyb3JzID0ge30pIHtcclxuICAgICAgICBzdXBlcihzY2hlbWEsIFwiU29tZSBrZXlzIGRvZXNuJ3QgbWF0Y2ggdG8gc2NoZW1hXCIpO1xyXG4gICAgICAgIHRoaXMua2V5cyA9IGtleXM7XHJcbiAgICAgICAgdGhpcy5lcnJvcnMgPSBlcnJvcnM7XHJcbiAgICB9XHJcbn1cblxudmFyIEpzb25Qcm9wVHlwZXM7XHJcbihmdW5jdGlvbiAoSnNvblByb3BUeXBlcykge1xyXG4gICAgSnNvblByb3BUeXBlc1tKc29uUHJvcFR5cGVzW1wiQW55XCJdID0gMF0gPSBcIkFueVwiO1xyXG4gICAgSnNvblByb3BUeXBlc1tKc29uUHJvcFR5cGVzW1wiQm9vbGVhblwiXSA9IDFdID0gXCJCb29sZWFuXCI7XHJcbiAgICBKc29uUHJvcFR5cGVzW0pzb25Qcm9wVHlwZXNbXCJOdW1iZXJcIl0gPSAyXSA9IFwiTnVtYmVyXCI7XHJcbiAgICBKc29uUHJvcFR5cGVzW0pzb25Qcm9wVHlwZXNbXCJTdHJpbmdcIl0gPSAzXSA9IFwiU3RyaW5nXCI7XHJcbn0pKEpzb25Qcm9wVHlwZXMgfHwgKEpzb25Qcm9wVHlwZXMgPSB7fSkpO1xuXG5mdW5jdGlvbiBjaGVja1R5cGUodmFsdWUsIHR5cGUpIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgIGNhc2UgSnNvblByb3BUeXBlcy5Cb29sZWFuOlxyXG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIjtcclxuICAgICAgICBjYXNlIEpzb25Qcm9wVHlwZXMuTnVtYmVyOlxyXG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiO1xyXG4gICAgICAgIGNhc2UgSnNvblByb3BUeXBlcy5TdHJpbmc6XHJcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG5mdW5jdGlvbiB0aHJvd0lmVHlwZUlzV3JvbmcodmFsdWUsIHR5cGUpIHtcclxuICAgIGlmICghY2hlY2tUeXBlKHZhbHVlLCB0eXBlKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFZhbHVlIG11c3QgYmUgJHtKc29uUHJvcFR5cGVzW3R5cGVdfWApO1xyXG4gICAgfVxyXG59XHJcbmZ1bmN0aW9uIGlzQ29udmVydGlibGUodGFyZ2V0KSB7XHJcbiAgICBpZiAodGFyZ2V0ICYmIHRhcmdldC5wcm90b3R5cGUpIHtcclxuICAgICAgICBpZiAodGFyZ2V0LnByb3RvdHlwZS50b0pTT04gJiYgdGFyZ2V0LnByb3RvdHlwZS5mcm9tSlNPTikge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpc0NvbnZlcnRpYmxlKHRhcmdldC5wcm90b3R5cGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHJldHVybiAhISh0YXJnZXQgJiYgdGFyZ2V0LnRvSlNPTiAmJiB0YXJnZXQuZnJvbUpTT04pO1xyXG4gICAgfVxyXG59XG5cbmNsYXNzIEpzb25TY2hlbWFTdG9yYWdlIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuaXRlbXMgPSBuZXcgTWFwKCk7XHJcbiAgICB9XHJcbiAgICBoYXModGFyZ2V0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXMuaGFzKHRhcmdldCkgfHwgISF0aGlzLmZpbmRQYXJlbnRTY2hlbWEodGFyZ2V0KTtcclxuICAgIH1cclxuICAgIGdldCh0YXJnZXQpIHtcclxuICAgICAgICBjb25zdCBzY2hlbWEgPSB0aGlzLml0ZW1zLmdldCh0YXJnZXQpIHx8IHRoaXMuZmluZFBhcmVudFNjaGVtYSh0YXJnZXQpO1xyXG4gICAgICAgIGlmICghc2NoZW1hKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBnZXQgc2NoZW1hIGZvciBjdXJyZW50IHRhcmdldFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHNjaGVtYTtcclxuICAgIH1cclxuICAgIGNyZWF0ZSh0YXJnZXQpIHtcclxuICAgICAgICBjb25zdCBzY2hlbWEgPSB7IG5hbWVzOiB7fSB9O1xyXG4gICAgICAgIGNvbnN0IHBhcmVudFNjaGVtYSA9IHRoaXMuZmluZFBhcmVudFNjaGVtYSh0YXJnZXQpO1xyXG4gICAgICAgIGlmIChwYXJlbnRTY2hlbWEpIHtcclxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihzY2hlbWEsIHBhcmVudFNjaGVtYSk7XHJcbiAgICAgICAgICAgIHNjaGVtYS5uYW1lcyA9IHt9O1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG5hbWUgaW4gcGFyZW50U2NoZW1hLm5hbWVzKSB7XHJcbiAgICAgICAgICAgICAgICBzY2hlbWEubmFtZXNbbmFtZV0gPSBPYmplY3QuYXNzaWduKHt9LCBwYXJlbnRTY2hlbWEubmFtZXNbbmFtZV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNjaGVtYS50YXJnZXQgPSB0YXJnZXQ7XHJcbiAgICAgICAgcmV0dXJuIHNjaGVtYTtcclxuICAgIH1cclxuICAgIHNldCh0YXJnZXQsIHNjaGVtYSkge1xyXG4gICAgICAgIHRoaXMuaXRlbXMuc2V0KHRhcmdldCwgc2NoZW1hKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIGZpbmRQYXJlbnRTY2hlbWEodGFyZ2V0KSB7XHJcbiAgICAgICAgY29uc3QgcGFyZW50ID0gdGFyZ2V0Ll9fcHJvdG9fXztcclxuICAgICAgICBpZiAocGFyZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IHRoaXMuaXRlbXMuZ2V0KHBhcmVudCk7XHJcbiAgICAgICAgICAgIHJldHVybiBzY2hlbWEgfHwgdGhpcy5maW5kUGFyZW50U2NoZW1hKHBhcmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59XG5cbmNvbnN0IERFRkFVTFRfU0NIRU1BID0gXCJkZWZhdWx0XCI7XHJcbmNvbnN0IHNjaGVtYVN0b3JhZ2UgPSBuZXcgSnNvblNjaGVtYVN0b3JhZ2UoKTtcblxuY2xhc3MgUGF0dGVyblZhbGlkYXRpb24ge1xyXG4gICAgY29uc3RydWN0b3IocGF0dGVybikge1xyXG4gICAgICAgIHRoaXMucGF0dGVybiA9IG5ldyBSZWdFeHAocGF0dGVybik7XHJcbiAgICB9XHJcbiAgICB2YWxpZGF0ZSh2YWx1ZSkge1xyXG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSBuZXcgUmVnRXhwKHRoaXMucGF0dGVybi5zb3VyY2UsIHRoaXMucGF0dGVybi5mbGFncyk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFwiSW5jb21pbmcgdmFsdWUgbXVzdCBiZSBzdHJpbmdcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghcGF0dGVybi5leGVjKHZhbHVlKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBWYWx1ZSBkb2Vzbid0IG1hdGNoIHRvIHBhdHRlcm4gJyR7cGF0dGVybi50b1N0cmluZygpfSdgKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cblxuY2xhc3MgSW5jbHVzaXZlVmFsaWRhdGlvbiB7XHJcbiAgICBjb25zdHJ1Y3RvcihtaW4gPSBOdW1iZXIuTUlOX1ZBTFVFLCBtYXggPSBOdW1iZXIuTUFYX1ZBTFVFKSB7XHJcbiAgICAgICAgdGhpcy5taW4gPSBtaW47XHJcbiAgICAgICAgdGhpcy5tYXggPSBtYXg7XHJcbiAgICB9XHJcbiAgICB2YWxpZGF0ZSh2YWx1ZSkge1xyXG4gICAgICAgIHRocm93SWZUeXBlSXNXcm9uZyh2YWx1ZSwgSnNvblByb3BUeXBlcy5OdW1iZXIpO1xyXG4gICAgICAgIGlmICghKHRoaXMubWluIDw9IHZhbHVlICYmIHZhbHVlIDw9IHRoaXMubWF4KSkge1xyXG4gICAgICAgICAgICBjb25zdCBtaW4gPSB0aGlzLm1pbiA9PT0gTnVtYmVyLk1JTl9WQUxVRSA/IFwiTUlOXCIgOiB0aGlzLm1pbjtcclxuICAgICAgICAgICAgY29uc3QgbWF4ID0gdGhpcy5tYXggPT09IE51bWJlci5NQVhfVkFMVUUgPyBcIk1BWFwiIDogdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoYFZhbHVlIGRvZXNuJ3QgbWF0Y2ggdG8gZGlhcGFzb24gWyR7bWlufSwke21heH1dYCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XG5cbmNsYXNzIEV4Y2x1c2l2ZVZhbGlkYXRpb24ge1xyXG4gICAgY29uc3RydWN0b3IobWluID0gTnVtYmVyLk1JTl9WQUxVRSwgbWF4ID0gTnVtYmVyLk1BWF9WQUxVRSkge1xyXG4gICAgICAgIHRoaXMubWluID0gbWluO1xyXG4gICAgICAgIHRoaXMubWF4ID0gbWF4O1xyXG4gICAgfVxyXG4gICAgdmFsaWRhdGUodmFsdWUpIHtcclxuICAgICAgICB0aHJvd0lmVHlwZUlzV3JvbmcodmFsdWUsIEpzb25Qcm9wVHlwZXMuTnVtYmVyKTtcclxuICAgICAgICBpZiAoISh0aGlzLm1pbiA8IHZhbHVlICYmIHZhbHVlIDwgdGhpcy5tYXgpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1pbiA9IHRoaXMubWluID09PSBOdW1iZXIuTUlOX1ZBTFVFID8gXCJNSU5cIiA6IHRoaXMubWluO1xyXG4gICAgICAgICAgICBjb25zdCBtYXggPSB0aGlzLm1heCA9PT0gTnVtYmVyLk1BWF9WQUxVRSA/IFwiTUFYXCIgOiB0aGlzLm1heDtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgVmFsdWUgZG9lc24ndCBtYXRjaCB0byBkaWFwYXNvbiAoJHttaW59LCR7bWF4fSlgKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cblxuY2xhc3MgTGVuZ3RoVmFsaWRhdGlvbiB7XHJcbiAgICBjb25zdHJ1Y3RvcihsZW5ndGgsIG1pbkxlbmd0aCwgbWF4TGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5sZW5ndGggPSBsZW5ndGg7XHJcbiAgICAgICAgdGhpcy5taW5MZW5ndGggPSBtaW5MZW5ndGg7XHJcbiAgICAgICAgdGhpcy5tYXhMZW5ndGggPSBtYXhMZW5ndGg7XHJcbiAgICB9XHJcbiAgICB2YWxpZGF0ZSh2YWx1ZSkge1xyXG4gICAgICAgIGlmICh0aGlzLmxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggIT09IHRoaXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBWYWx1ZSBsZW5ndGggbXVzdCBiZSBleGFjdGx5ICR7dGhpcy5sZW5ndGh9LmApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMubWluTGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA8IHRoaXMubWluTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBWYWx1ZSBsZW5ndGggbXVzdCBiZSBtb3JlIHRoYW4gJHt0aGlzLm1pbkxlbmd0aH0uYCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMubWF4TGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IHRoaXMubWF4TGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBWYWx1ZSBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gJHt0aGlzLm1heExlbmd0aH0uYCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cblxuY2xhc3MgRW51bWVyYXRpb25WYWxpZGF0aW9uIHtcclxuICAgIGNvbnN0cnVjdG9yKGVudW1lcmF0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5lbnVtZXJhdGlvbiA9IGVudW1lcmF0aW9uO1xyXG4gICAgfVxyXG4gICAgdmFsaWRhdGUodmFsdWUpIHtcclxuICAgICAgICB0aHJvd0lmVHlwZUlzV3JvbmcodmFsdWUsIEpzb25Qcm9wVHlwZXMuU3RyaW5nKTtcclxuICAgICAgICBpZiAoIXRoaXMuZW51bWVyYXRpb24uaW5jbHVkZXModmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoYFZhbHVlIG11c3QgYmUgb25lIG9mICR7dGhpcy5lbnVtZXJhdGlvbi5tYXAoKHYpID0+IGAnJHt2fSdgKS5qb2luKFwiLCBcIil9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XG5cbmNsYXNzIEpzb25UcmFuc2Zvcm0ge1xyXG4gICAgc3RhdGljIGNoZWNrVmFsdWVzKGRhdGEsIHNjaGVtYUl0ZW0pIHtcclxuICAgICAgICBjb25zdCB2YWx1ZXMgPSBBcnJheS5pc0FycmF5KGRhdGEpID8gZGF0YSA6IFtkYXRhXTtcclxuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHZhbGlkYXRpb24gb2Ygc2NoZW1hSXRlbS52YWxpZGF0aW9ucykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRpb24gaW5zdGFuY2VvZiBMZW5ndGhWYWxpZGF0aW9uICYmIHNjaGVtYUl0ZW0ucmVwZWF0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uLnZhbGlkYXRlKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbi52YWxpZGF0ZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgY2hlY2tUeXBlcyh2YWx1ZSwgc2NoZW1hSXRlbSkge1xyXG4gICAgICAgIGlmIChzY2hlbWFJdGVtLnJlcGVhdGVkICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVmFsdWUgbXVzdCBiZSBBcnJheVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWFJdGVtLnR5cGUgPT09IFwibnVtYmVyXCIpIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV07XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgdiBvZiB2YWx1ZXMpIHtcclxuICAgICAgICAgICAgICAgIHRocm93SWZUeXBlSXNXcm9uZyh2LCBzY2hlbWFJdGVtLnR5cGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgc3RhdGljIGdldFNjaGVtYUJ5TmFtZShzY2hlbWEsIG5hbWUgPSBERUZBVUxUX1NDSEVNQSkge1xyXG4gICAgICAgIHJldHVybiB7IC4uLnNjaGVtYS5uYW1lc1tERUZBVUxUX1NDSEVNQV0sIC4uLnNjaGVtYS5uYW1lc1tuYW1lXSB9O1xyXG4gICAgfVxyXG59XG5cbmNsYXNzIEpzb25TZXJpYWxpemVyIGV4dGVuZHMgSnNvblRyYW5zZm9ybSB7XHJcbiAgICBzdGF0aWMgc2VyaWFsaXplKG9iaiwgb3B0aW9ucywgcmVwbGFjZXIsIHNwYWNlKSB7XHJcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKG9iaiwgb3B0aW9ucyk7XHJcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGpzb24sIHJlcGxhY2VyLCBzcGFjZSk7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgdG9KU09OKG9iaiwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICAgICAgbGV0IHJlcztcclxuICAgICAgICBsZXQgdGFyZ2V0U2NoZW1hID0gb3B0aW9ucy50YXJnZXRTY2hlbWE7XHJcbiAgICAgICAgY29uc3Qgc2NoZW1hTmFtZSA9IG9wdGlvbnMuc2NoZW1hTmFtZSB8fCBERUZBVUxUX1NDSEVNQTtcclxuICAgICAgICBpZiAoaXNDb252ZXJ0aWJsZShvYmopKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBvYmoudG9KU09OKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcclxuICAgICAgICAgICAgcmVzID0gW107XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBvYmopIHtcclxuICAgICAgICAgICAgICAgIHJlcy5wdXNoKHRoaXMudG9KU09OKGl0ZW0sIG9wdGlvbnMpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAgIGlmICh0YXJnZXRTY2hlbWEgJiYgIXNjaGVtYVN0b3JhZ2UuaGFzKHRhcmdldFNjaGVtYSkpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBKc29uRXJyb3IoXCJDYW5ub3QgZ2V0IHNjaGVtYSBmb3IgYHRhcmdldFNjaGVtYWAgcGFyYW1cIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGFyZ2V0U2NoZW1hID0gKHRhcmdldFNjaGVtYSB8fCBvYmouY29uc3RydWN0b3IpO1xyXG4gICAgICAgICAgICBpZiAoc2NoZW1hU3RvcmFnZS5oYXModGFyZ2V0U2NoZW1hKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2NoZW1hID0gc2NoZW1hU3RvcmFnZS5nZXQodGFyZ2V0U2NoZW1hKTtcclxuICAgICAgICAgICAgICAgIHJlcyA9IHt9O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmFtZWRTY2hlbWEgPSB0aGlzLmdldFNjaGVtYUJ5TmFtZShzY2hlbWEsIHNjaGVtYU5hbWUpO1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gbmFtZWRTY2hlbWEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gbmFtZWRTY2hlbWFba2V5XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2JqSXRlbSA9IG9ialtrZXldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoaXRlbS5vcHRpb25hbCAmJiBvYmpJdGVtID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoaXRlbS5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCAmJiBvYmpJdGVtID09PSBpdGVtLmRlZmF1bHRWYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXRlbS5vcHRpb25hbCAmJiBvYmpJdGVtID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBTZXJpYWxpemVyRXJyb3IodGFyZ2V0U2NoZW1hLm5hbWUsIGBQcm9wZXJ0eSAnJHtrZXl9JyBpcyByZXF1aXJlZC5gKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW0udHlwZSA9PT0gXCJudW1iZXJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uY29udmVydGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0ucmVwZWF0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBvYmpJdGVtLm1hcCgoZWwpID0+IGl0ZW0uY29udmVydGVyLnRvSlNPTihlbCwgb2JqKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGl0ZW0uY29udmVydGVyLnRvSlNPTihvYmpJdGVtLCBvYmopO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gb2JqSXRlbTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLnJlcGVhdGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBvYmpJdGVtLm1hcCgoZWwpID0+IHRoaXMudG9KU09OKGVsLCB7IHNjaGVtYU5hbWUgfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLnRvSlNPTihvYmpJdGVtLCB7IHNjaGVtYU5hbWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja1R5cGVzKHZhbHVlLCBpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja1ZhbHVlcyh2YWx1ZSwgaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc1tpdGVtLm5hbWUgfHwga2V5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIFNlcmlhbGl6ZXJFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBTZXJpYWxpemVyRXJyb3Ioc2NoZW1hLnRhcmdldC5uYW1lLCBgUHJvcGVydHkgJyR7a2V5fScgaXMgd3JvbmcuICR7ZS5tZXNzYWdlfWAsIGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmVzID0ge307XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcclxuICAgICAgICAgICAgICAgICAgICByZXNba2V5XSA9IHRoaXMudG9KU09OKG9ialtrZXldLCB7IHNjaGVtYU5hbWUgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJlcyA9IG9iajtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxufVxuXG5jbGFzcyBKc29uUGFyc2VyIGV4dGVuZHMgSnNvblRyYW5zZm9ybSB7XHJcbiAgICBzdGF0aWMgcGFyc2UoZGF0YSwgb3B0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IG9iaiA9IEpTT04ucGFyc2UoZGF0YSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJvbUpTT04ob2JqLCBvcHRpb25zKTtcclxuICAgIH1cclxuICAgIHN0YXRpYyBmcm9tSlNPTih0YXJnZXQsIG9wdGlvbnMpIHtcclxuICAgICAgICBjb25zdCB0YXJnZXRTY2hlbWEgPSBvcHRpb25zLnRhcmdldFNjaGVtYTtcclxuICAgICAgICBjb25zdCBzY2hlbWFOYW1lID0gb3B0aW9ucy5zY2hlbWFOYW1lIHx8IERFRkFVTFRfU0NIRU1BO1xyXG4gICAgICAgIGNvbnN0IG9iaiA9IG5ldyB0YXJnZXRTY2hlbWEoKTtcclxuICAgICAgICBpZiAoaXNDb252ZXJ0aWJsZShvYmopKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBvYmouZnJvbUpTT04odGFyZ2V0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gc2NoZW1hU3RvcmFnZS5nZXQodGFyZ2V0U2NoZW1hKTtcclxuICAgICAgICBjb25zdCBuYW1lZFNjaGVtYSA9IHRoaXMuZ2V0U2NoZW1hQnlOYW1lKHNjaGVtYSwgc2NoZW1hTmFtZSk7XHJcbiAgICAgICAgY29uc3Qga2V5RXJyb3JzID0ge307XHJcbiAgICAgICAgaWYgKG9wdGlvbnMuc3RyaWN0UHJvcGVydHkgJiYgIUFycmF5LmlzQXJyYXkodGFyZ2V0KSkge1xyXG4gICAgICAgICAgICBKc29uUGFyc2VyLmNoZWNrU3RyaWN0UHJvcGVydHkodGFyZ2V0LCBuYW1lZFNjaGVtYSwgc2NoZW1hKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gbmFtZWRTY2hlbWEpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBuYW1lZFNjaGVtYVtrZXldO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IGl0ZW0ubmFtZSB8fCBrZXk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRhcmdldFtuYW1lXTtcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIChpdGVtLm9wdGlvbmFsIHx8IGl0ZW0uZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIWl0ZW0ub3B0aW9uYWwgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZXJFcnJvcihzY2hlbWEsIGBQcm9wZXJ0eSAnJHtuYW1lfScgaXMgcmVxdWlyZWQuYCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrVHlwZXModmFsdWUsIGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja1ZhbHVlcyh2YWx1ZSwgaXRlbSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIChpdGVtLnR5cGUpID09PSBcIm51bWJlclwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uY29udmVydGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLnJlcGVhdGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmpba2V5XSA9IHZhbHVlLm1hcCgoZWwpID0+IGl0ZW0uY29udmVydGVyLmZyb21KU09OKGVsLCBvYmopKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ialtrZXldID0gaXRlbS5jb252ZXJ0ZXIuZnJvbUpTT04odmFsdWUsIG9iaik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ialtrZXldID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3T3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLi4ub3B0aW9ucyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0U2NoZW1hOiBpdGVtLnR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYU5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5yZXBlYXRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmpba2V5XSA9IHZhbHVlLm1hcCgoZWwpID0+IHRoaXMuZnJvbUpTT04oZWwsIG5ld09wdGlvbnMpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ialtrZXldID0gdGhpcy5mcm9tSlNPTih2YWx1ZSwgbmV3T3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIShlIGluc3RhbmNlb2YgUGFyc2VyRXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZSA9IG5ldyBQYXJzZXJFcnJvcihzY2hlbWEsIGBQcm9wZXJ0eSAnJHtrZXl9JyBpcyB3cm9uZy4gJHtlLm1lc3NhZ2V9YCwgZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5zdHJpY3RBbGxLZXlzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAga2V5RXJyb3JzW2tleV0gPSBlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoa2V5RXJyb3JzKTtcclxuICAgICAgICBpZiAoa2V5cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEtleUVycm9yKHNjaGVtYSwga2V5cywga2V5RXJyb3JzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9iajtcclxuICAgIH1cclxuICAgIHN0YXRpYyBjaGVja1N0cmljdFByb3BlcnR5KHRhcmdldCwgbmFtZWRTY2hlbWEsIHNjaGVtYSkge1xyXG4gICAgICAgIGNvbnN0IGpzb25Qcm9wcyA9IE9iamVjdC5rZXlzKHRhcmdldCk7XHJcbiAgICAgICAgY29uc3Qgc2NoZW1hUHJvcHMgPSBPYmplY3Qua2V5cyhuYW1lZFNjaGVtYSk7XHJcbiAgICAgICAgY29uc3Qga2V5cyA9IFtdO1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGpzb25Qcm9wcykge1xyXG4gICAgICAgICAgICBpZiAoc2NoZW1hUHJvcHMuaW5kZXhPZihrZXkpID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGtleSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGtleXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBLZXlFcnJvcihzY2hlbWEsIGtleXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxuXG5mdW5jdGlvbiBnZXRWYWxpZGF0aW9ucyhpdGVtKSB7XHJcbiAgICBjb25zdCB2YWxpZGF0aW9ucyA9IFtdO1xyXG4gICAgaWYgKGl0ZW0ucGF0dGVybikge1xyXG4gICAgICAgIHZhbGlkYXRpb25zLnB1c2gobmV3IFBhdHRlcm5WYWxpZGF0aW9uKGl0ZW0ucGF0dGVybikpO1xyXG4gICAgfVxyXG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gSnNvblByb3BUeXBlcy5OdW1iZXIgfHwgaXRlbS50eXBlID09PSBKc29uUHJvcFR5cGVzLkFueSkge1xyXG4gICAgICAgIGlmIChpdGVtLm1pbkluY2x1c2l2ZSAhPT0gdW5kZWZpbmVkIHx8IGl0ZW0ubWF4SW5jbHVzaXZlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbnMucHVzaChuZXcgSW5jbHVzaXZlVmFsaWRhdGlvbihpdGVtLm1pbkluY2x1c2l2ZSwgaXRlbS5tYXhJbmNsdXNpdmUpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGl0ZW0ubWluRXhjbHVzaXZlICE9PSB1bmRlZmluZWQgfHwgaXRlbS5tYXhFeGNsdXNpdmUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9ucy5wdXNoKG5ldyBFeGNsdXNpdmVWYWxpZGF0aW9uKGl0ZW0ubWluRXhjbHVzaXZlLCBpdGVtLm1heEV4Y2x1c2l2ZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXRlbS5lbnVtZXJhdGlvbiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb25zLnB1c2gobmV3IEVudW1lcmF0aW9uVmFsaWRhdGlvbihpdGVtLmVudW1lcmF0aW9uKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gSnNvblByb3BUeXBlcy5TdHJpbmcgfHwgaXRlbS5yZXBlYXRlZCB8fCBpdGVtLnR5cGUgPT09IEpzb25Qcm9wVHlwZXMuQW55KSB7XHJcbiAgICAgICAgaWYgKGl0ZW0ubGVuZ3RoICE9PSB1bmRlZmluZWQgfHwgaXRlbS5taW5MZW5ndGggIT09IHVuZGVmaW5lZCB8fCBpdGVtLm1heExlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb25zLnB1c2gobmV3IExlbmd0aFZhbGlkYXRpb24oaXRlbS5sZW5ndGgsIGl0ZW0ubWluTGVuZ3RoLCBpdGVtLm1heExlbmd0aCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB2YWxpZGF0aW9ucztcclxufVxyXG5jb25zdCBKc29uUHJvcCA9IChvcHRpb25zID0ge30pID0+ICh0YXJnZXQsIHByb3BlcnR5S2V5KSA9PiB7XHJcbiAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBgQ2Fubm90IHNldCB0eXBlIGZvciAke3Byb3BlcnR5S2V5fSBwcm9wZXJ0eSBvZiAke3RhcmdldC5jb25zdHJ1Y3Rvci5uYW1lfSBzY2hlbWFgO1xyXG4gICAgbGV0IHNjaGVtYTtcclxuICAgIGlmICghc2NoZW1hU3RvcmFnZS5oYXModGFyZ2V0LmNvbnN0cnVjdG9yKSkge1xyXG4gICAgICAgIHNjaGVtYSA9IHNjaGVtYVN0b3JhZ2UuY3JlYXRlKHRhcmdldC5jb25zdHJ1Y3Rvcik7XHJcbiAgICAgICAgc2NoZW1hU3RvcmFnZS5zZXQodGFyZ2V0LmNvbnN0cnVjdG9yLCBzY2hlbWEpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgc2NoZW1hID0gc2NoZW1hU3RvcmFnZS5nZXQodGFyZ2V0LmNvbnN0cnVjdG9yKTtcclxuICAgICAgICBpZiAoc2NoZW1hLnRhcmdldCAhPT0gdGFyZ2V0LmNvbnN0cnVjdG9yKSB7XHJcbiAgICAgICAgICAgIHNjaGVtYSA9IHNjaGVtYVN0b3JhZ2UuY3JlYXRlKHRhcmdldC5jb25zdHJ1Y3Rvcik7XHJcbiAgICAgICAgICAgIHNjaGVtYVN0b3JhZ2Uuc2V0KHRhcmdldC5jb25zdHJ1Y3Rvciwgc2NoZW1hKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCBkZWZhdWx0U2NoZW1hID0ge1xyXG4gICAgICAgIHR5cGU6IEpzb25Qcm9wVHlwZXMuQW55LFxyXG4gICAgICAgIHZhbGlkYXRpb25zOiBbXSxcclxuICAgIH07XHJcbiAgICBjb25zdCBjb3B5T3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oZGVmYXVsdFNjaGVtYSwgb3B0aW9ucyk7XHJcbiAgICBjb3B5T3B0aW9ucy52YWxpZGF0aW9ucyA9IGdldFZhbGlkYXRpb25zKGNvcHlPcHRpb25zKTtcclxuICAgIGlmICh0eXBlb2YgY29weU9wdGlvbnMudHlwZSAhPT0gXCJudW1iZXJcIikge1xyXG4gICAgICAgIGlmICghc2NoZW1hU3RvcmFnZS5oYXMoY29weU9wdGlvbnMudHlwZSkgJiYgIWlzQ29udmVydGlibGUoY29weU9wdGlvbnMudHlwZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2Vycm9yTWVzc2FnZX0uIEFzc2lnbmluZyB0eXBlIGRvZXNuJ3QgaGF2ZSBzY2hlbWEuYCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IHNjaGVtYU5hbWVzO1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucy5zY2hlbWEpKSB7XHJcbiAgICAgICAgc2NoZW1hTmFtZXMgPSBvcHRpb25zLnNjaGVtYTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHNjaGVtYU5hbWVzID0gW29wdGlvbnMuc2NoZW1hIHx8IERFRkFVTFRfU0NIRU1BXTtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3Qgc2NoZW1hTmFtZSBvZiBzY2hlbWFOYW1lcykge1xyXG4gICAgICAgIGlmICghc2NoZW1hLm5hbWVzW3NjaGVtYU5hbWVdKSB7XHJcbiAgICAgICAgICAgIHNjaGVtYS5uYW1lc1tzY2hlbWFOYW1lXSA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuYW1lZFNjaGVtYSA9IHNjaGVtYS5uYW1lc1tzY2hlbWFOYW1lXTtcclxuICAgICAgICBuYW1lZFNjaGVtYVtwcm9wZXJ0eUtleV0gPSBjb3B5T3B0aW9ucztcclxuICAgIH1cclxufTtcblxuZXhwb3J0IHsgSnNvbkVycm9yLCBKc29uUGFyc2VyLCBKc29uUHJvcCwgSnNvblByb3BUeXBlcywgSnNvblNlcmlhbGl6ZXIsIEtleUVycm9yLCBQYXJzZXJFcnJvciwgU2VyaWFsaXplckVycm9yLCBUcmFuc2Zvcm1FcnJvciwgVmFsaWRhdGlvbkVycm9yIH07XG4iLCAiLyohXG4gQ29weXJpZ2h0IChjKSBQZWN1bGlhciBWZW50dXJlcywgTExDXG4qL1xuXG5pbXBvcnQgeyBDb252ZXJ0LCBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIsIGNvbWJpbmUgfSBmcm9tICdwdnRzdXRpbHMnO1xuZXhwb3J0IHsgQnVmZmVyU291cmNlQ29udmVydGVyIH0gZnJvbSAncHZ0c3V0aWxzJztcbmltcG9ydCB7IEFzblByb3AsIEFzblByb3BUeXBlcywgQXNuVHlwZSwgQXNuVHlwZVR5cGVzLCBBc25JbnRlZ2VyQ29udmVydGVyLCBBc25TZXJpYWxpemVyLCBBc25Db252ZXJ0IH0gZnJvbSAnQHBlY3VsaWFyL2FzbjEtc2NoZW1hJztcbmltcG9ydCB7IF9fZGVjb3JhdGUgfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgeyBKc29uUHJvcCwgSnNvblByb3BUeXBlcyB9IGZyb20gJ0BwZWN1bGlhci9qc29uLXNjaGVtYSc7XG5pbXBvcnQgKiBhcyBhc24xIGZyb20gJ2FzbjFqcyc7XG5cbmNsYXNzIENyeXB0b0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xufVxuXG5jbGFzcyBBbGdvcml0aG1FcnJvciBleHRlbmRzIENyeXB0b0Vycm9yIHtcbn1cblxuY2xhc3MgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvciBleHRlbmRzIENyeXB0b0Vycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXRob2ROYW1lKSB7XG4gICAgICAgIHN1cGVyKGBVbnN1cHBvcnRlZCBvcGVyYXRpb246ICR7bWV0aG9kTmFtZSA/IGAke21ldGhvZE5hbWV9YCA6IFwiXCJ9YCk7XG4gICAgfVxufVxuXG5jbGFzcyBPcGVyYXRpb25FcnJvciBleHRlbmRzIENyeXB0b0Vycm9yIHtcbn1cblxuY2xhc3MgUmVxdWlyZWRQcm9wZXJ0eUVycm9yIGV4dGVuZHMgQ3J5cHRvRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKHByb3BOYW1lKSB7XG4gICAgICAgIHN1cGVyKGAke3Byb3BOYW1lfTogTWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eWApO1xuICAgIH1cbn1cblxuY2xhc3MgUGVtQ29udmVydGVyIHtcbiAgICBzdGF0aWMgdG9BcnJheUJ1ZmZlcihwZW0pIHtcbiAgICAgICAgY29uc3QgYmFzZTY0ID0gcGVtXG4gICAgICAgICAgICAucmVwbGFjZSgvLXs1fShCRUdJTnxFTkQpIC4qLXs1fS9nLCBcIlwiKVxuICAgICAgICAgICAgLnJlcGxhY2UoXCJcXHJcIiwgXCJcIilcbiAgICAgICAgICAgIC5yZXBsYWNlKFwiXFxuXCIsIFwiXCIpO1xuICAgICAgICByZXR1cm4gQ29udmVydC5Gcm9tQmFzZTY0KGJhc2U2NCk7XG4gICAgfVxuICAgIHN0YXRpYyB0b1VpbnQ4QXJyYXkocGVtKSB7XG4gICAgICAgIGNvbnN0IGJ5dGVzID0gdGhpcy50b0FycmF5QnVmZmVyKHBlbSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShieXRlcyk7XG4gICAgfVxuICAgIHN0YXRpYyBmcm9tQnVmZmVyU291cmNlKGJ1ZmZlciwgdGFnKSB7XG4gICAgICAgIGNvbnN0IGJhc2U2NCA9IENvbnZlcnQuVG9CYXNlNjQoYnVmZmVyKTtcbiAgICAgICAgbGV0IHNsaWNlZDtcbiAgICAgICAgbGV0IG9mZnNldCA9IDA7XG4gICAgICAgIGNvbnN0IHJvd3MgPSBbXTtcbiAgICAgICAgd2hpbGUgKG9mZnNldCA8IGJhc2U2NC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHNsaWNlZCA9IGJhc2U2NC5zbGljZShvZmZzZXQsIG9mZnNldCArIDY0KTtcbiAgICAgICAgICAgIGlmIChzbGljZWQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcm93cy5wdXNoKHNsaWNlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9mZnNldCArPSA2NDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cHBlckNhc2VUYWcgPSB0YWcudG9VcHBlckNhc2UoKTtcbiAgICAgICAgcmV0dXJuIGAtLS0tLUJFR0lOICR7dXBwZXJDYXNlVGFnfS0tLS0tXFxuJHtyb3dzLmpvaW4oXCJcXG5cIil9XFxuLS0tLS1FTkQgJHt1cHBlckNhc2VUYWd9LS0tLS1gO1xuICAgIH1cbiAgICBzdGF0aWMgaXNQRU0oZGF0YSkge1xuICAgICAgICByZXR1cm4gLy0tLS0tQkVHSU4gListLS0tLVtBLVphLXowLTkrLys9XFxzXFxuXSstLS0tLUVORCAuKy0tLS0tL2kudGVzdChkYXRhKTtcbiAgICB9XG4gICAgc3RhdGljIGdldFRhZ05hbWUocGVtKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1BFTShwZW0pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCYWQgcGFyYW1ldGVyLiBJbmNvbWluZyBkYXRhIGlzIG5vdCByaWdodCBQRU1cIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzID0gLy0tLS0tQkVHSU4gKC4rKS0tLS0tLy5leGVjKHBlbSk7XG4gICAgICAgIGlmICghcmVzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZ2V0IHRhZyBmcm9tIFBFTVwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzWzFdO1xuICAgIH1cbiAgICBzdGF0aWMgaGFzVGFnTmFtZShwZW0sIHRhZ05hbWUpIHtcbiAgICAgICAgY29uc3QgdGFnID0gdGhpcy5nZXRUYWdOYW1lKHBlbSk7XG4gICAgICAgIHJldHVybiB0YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09IHRhZy50b0xvd2VyQ2FzZSgpO1xuICAgIH1cbiAgICBzdGF0aWMgaXNDZXJ0aWZpY2F0ZShwZW0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzVGFnTmFtZShwZW0sIFwiY2VydGlmaWNhdGVcIik7XG4gICAgfVxuICAgIHN0YXRpYyBpc0NlcnRpZmljYXRlUmVxdWVzdChwZW0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzVGFnTmFtZShwZW0sIFwiY2VydGlmaWNhdGUgcmVxdWVzdFwiKTtcbiAgICB9XG4gICAgc3RhdGljIGlzQ1JMKHBlbSkge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNUYWdOYW1lKHBlbSwgXCJ4NTA5IGNybFwiKTtcbiAgICB9XG4gICAgc3RhdGljIGlzUHVibGljS2V5KHBlbSkge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNUYWdOYW1lKHBlbSwgXCJwdWJsaWMga2V5XCIpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gaXNKV0soZGF0YSkge1xuICAgIHJldHVybiB0eXBlb2YgZGF0YSA9PT0gXCJvYmplY3RcIiAmJiBcImt0eVwiIGluIGRhdGE7XG59XG5cbmNsYXNzIFByb3ZpZGVyQ3J5cHRvIHtcbiAgICBhc3luYyBkaWdlc3QoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrRGlnZXN0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICByZXR1cm4gdGhpcy5vbkRpZ2VzdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gICAgY2hlY2tEaWdlc3QoYWxnb3JpdGhtLCBfZGF0YSkge1xuICAgICAgICB0aGlzLmNoZWNrQWxnb3JpdGhtTmFtZShhbGdvcml0aG0pO1xuICAgIH1cbiAgICBhc3luYyBvbkRpZ2VzdChfYWxnb3JpdGhtLCBfZGF0YSkge1xuICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcihcImRpZ2VzdFwiKTtcbiAgICB9XG4gICAgYXN5bmMgZ2VuZXJhdGVLZXkoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrR2VuZXJhdGVLZXkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIHJldHVybiB0aGlzLm9uR2VuZXJhdGVLZXkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICAgIGNoZWNrR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBfZXh0cmFjdGFibGUsIGtleVVzYWdlcywgLi4uX2FyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0FsZ29yaXRobU5hbWUoYWxnb3JpdGhtKTtcbiAgICAgICAgdGhpcy5jaGVja0dlbmVyYXRlS2V5UGFyYW1zKGFsZ29yaXRobSk7XG4gICAgICAgIGlmICghKGtleVVzYWdlcyAmJiBrZXlVc2FnZXMubGVuZ3RoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgVXNhZ2VzIGNhbm5vdCBiZSBlbXB0eSB3aGVuIGNyZWF0aW5nIGEga2V5LmApO1xuICAgICAgICB9XG4gICAgICAgIGxldCBhbGxvd2VkVXNhZ2VzO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnVzYWdlcykpIHtcbiAgICAgICAgICAgIGFsbG93ZWRVc2FnZXMgPSB0aGlzLnVzYWdlcztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFsbG93ZWRVc2FnZXMgPSB0aGlzLnVzYWdlcy5wcml2YXRlS2V5LmNvbmNhdCh0aGlzLnVzYWdlcy5wdWJsaWNLZXkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hlY2tLZXlVc2FnZXMoa2V5VXNhZ2VzLCBhbGxvd2VkVXNhZ2VzKTtcbiAgICB9XG4gICAgY2hlY2tHZW5lcmF0ZUtleVBhcmFtcyhfYWxnb3JpdGhtKSB7XG4gICAgfVxuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoX2FsZ29yaXRobSwgX2V4dHJhY3RhYmxlLCBfa2V5VXNhZ2VzLCAuLi5fYXJncykge1xuICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcihcImdlbmVyYXRlS2V5XCIpO1xuICAgIH1cbiAgICBhc3luYyBzaWduKC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja1NpZ24uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIHJldHVybiB0aGlzLm9uU2lnbi5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gICAgY2hlY2tTaWduKGFsZ29yaXRobSwga2V5LCBfZGF0YSwgLi4uX2FyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0FsZ29yaXRobU5hbWUoYWxnb3JpdGhtKTtcbiAgICAgICAgdGhpcy5jaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pO1xuICAgICAgICB0aGlzLmNoZWNrQ3J5cHRvS2V5KGtleSwgXCJzaWduXCIpO1xuICAgIH1cbiAgICBhc3luYyBvblNpZ24oX2FsZ29yaXRobSwgX2tleSwgX2RhdGEsIC4uLl9hcmdzKSB7XG4gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yKFwic2lnblwiKTtcbiAgICB9XG4gICAgYXN5bmMgdmVyaWZ5KC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja1ZlcmlmeS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMub25WZXJpZnkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICAgIGNoZWNrVmVyaWZ5KGFsZ29yaXRobSwga2V5LCBfc2lnbmF0dXJlLCBfZGF0YSwgLi4uX2FyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0FsZ29yaXRobU5hbWUoYWxnb3JpdGhtKTtcbiAgICAgICAgdGhpcy5jaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pO1xuICAgICAgICB0aGlzLmNoZWNrQ3J5cHRvS2V5KGtleSwgXCJ2ZXJpZnlcIik7XG4gICAgfVxuICAgIGFzeW5jIG9uVmVyaWZ5KF9hbGdvcml0aG0sIF9rZXksIF9zaWduYXR1cmUsIF9kYXRhLCAuLi5fYXJncykge1xuICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcihcInZlcmlmeVwiKTtcbiAgICB9XG4gICAgYXN5bmMgZW5jcnlwdCguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tFbmNyeXB0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICByZXR1cm4gdGhpcy5vbkVuY3J5cHQuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICAgIGNoZWNrRW5jcnlwdChhbGdvcml0aG0sIGtleSwgX2RhdGEsIG9wdGlvbnMgPSB7fSwgLi4uX2FyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0FsZ29yaXRobU5hbWUoYWxnb3JpdGhtKTtcbiAgICAgICAgdGhpcy5jaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pO1xuICAgICAgICB0aGlzLmNoZWNrQ3J5cHRvS2V5KGtleSwgb3B0aW9ucy5rZXlVc2FnZSA/IFwiZW5jcnlwdFwiIDogdm9pZCAwKTtcbiAgICB9XG4gICAgYXN5bmMgb25FbmNyeXB0KF9hbGdvcml0aG0sIF9rZXksIF9kYXRhLCAuLi5fYXJncykge1xuICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcihcImVuY3J5cHRcIik7XG4gICAgfVxuICAgIGFzeW5jIGRlY3J5cHQoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrRGVjcnlwdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMub25EZWNyeXB0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH1cbiAgICBjaGVja0RlY3J5cHQoYWxnb3JpdGhtLCBrZXksIF9kYXRhLCBvcHRpb25zID0ge30sIC4uLl9hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1OYW1lKGFsZ29yaXRobSk7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKTtcbiAgICAgICAgdGhpcy5jaGVja0NyeXB0b0tleShrZXksIG9wdGlvbnMua2V5VXNhZ2UgPyBcImRlY3J5cHRcIiA6IHZvaWQgMCk7XG4gICAgfVxuICAgIGFzeW5jIG9uRGVjcnlwdChfYWxnb3JpdGhtLCBfa2V5LCBfZGF0YSwgLi4uX2FyZ3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IoXCJkZWNyeXB0XCIpO1xuICAgIH1cbiAgICBhc3luYyBkZXJpdmVCaXRzKC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0Rlcml2ZUJpdHMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIHJldHVybiB0aGlzLm9uRGVyaXZlQml0cy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gICAgY2hlY2tEZXJpdmVCaXRzKGFsZ29yaXRobSwgYmFzZUtleSwgbGVuZ3RoLCBvcHRpb25zID0ge30sIC4uLl9hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1OYW1lKGFsZ29yaXRobSk7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKTtcbiAgICAgICAgdGhpcy5jaGVja0NyeXB0b0tleShiYXNlS2V5LCBvcHRpb25zLmtleVVzYWdlID8gXCJkZXJpdmVCaXRzXCIgOiB2b2lkIDApO1xuICAgICAgICBpZiAobGVuZ3RoICUgOCAhPT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE9wZXJhdGlvbkVycm9yKFwibGVuZ3RoOiBJcyBub3QgbXVsdGlwbGUgb2YgOFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBvbkRlcml2ZUJpdHMoX2FsZ29yaXRobSwgX2Jhc2VLZXksIF9sZW5ndGgsIC4uLl9hcmdzKSB7XG4gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yKFwiZGVyaXZlQml0c1wiKTtcbiAgICB9XG4gICAgYXN5bmMgZXhwb3J0S2V5KC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0V4cG9ydEtleS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMub25FeHBvcnRLZXkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICAgIGNoZWNrRXhwb3J0S2V5KGZvcm1hdCwga2V5LCAuLi5fYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrS2V5Rm9ybWF0KGZvcm1hdCk7XG4gICAgICAgIHRoaXMuY2hlY2tDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgaWYgKCFrZXkuZXh0cmFjdGFibGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBDcnlwdG9FcnJvcihcImtleTogSXMgbm90IGV4dHJhY3RhYmxlXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KF9mb3JtYXQsIF9rZXksIC4uLl9hcmdzKSB7XG4gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yKFwiZXhwb3J0S2V5XCIpO1xuICAgIH1cbiAgICBhc3luYyBpbXBvcnRLZXkoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrSW1wb3J0S2V5LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICByZXR1cm4gdGhpcy5vbkltcG9ydEtleS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gICAgY2hlY2tJbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIF9leHRyYWN0YWJsZSwga2V5VXNhZ2VzLCAuLi5fYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrS2V5Rm9ybWF0KGZvcm1hdCk7XG4gICAgICAgIHRoaXMuY2hlY2tLZXlEYXRhKGZvcm1hdCwga2V5RGF0YSk7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1OYW1lKGFsZ29yaXRobSk7XG4gICAgICAgIHRoaXMuY2hlY2tJbXBvcnRQYXJhbXMoYWxnb3JpdGhtKTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy51c2FnZXMpKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrS2V5VXNhZ2VzKGtleVVzYWdlcywgdGhpcy51c2FnZXMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KF9mb3JtYXQsIF9rZXlEYXRhLCBfYWxnb3JpdGhtLCBfZXh0cmFjdGFibGUsIF9rZXlVc2FnZXMsIC4uLl9hcmdzKSB7XG4gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yKFwiaW1wb3J0S2V5XCIpO1xuICAgIH1cbiAgICBjaGVja0FsZ29yaXRobU5hbWUoYWxnb3JpdGhtKSB7XG4gICAgICAgIGlmIChhbGdvcml0aG0ubmFtZS50b0xvd2VyQ2FzZSgpICE9PSB0aGlzLm5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEFsZ29yaXRobUVycm9yKFwiVW5yZWNvZ25pemVkIG5hbWVcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tBbGdvcml0aG1QYXJhbXMoX2FsZ29yaXRobSkge1xuICAgIH1cbiAgICBjaGVja0Rlcml2ZWRLZXlQYXJhbXMoX2FsZ29yaXRobSkge1xuICAgIH1cbiAgICBjaGVja0tleVVzYWdlcyh1c2FnZXMsIGFsbG93ZWQpIHtcbiAgICAgICAgZm9yIChjb25zdCB1c2FnZSBvZiB1c2FnZXMpIHtcbiAgICAgICAgICAgIGlmIChhbGxvd2VkLmluZGV4T2YodXNhZ2UpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY3JlYXRlIGEga2V5IHVzaW5nIHRoZSBzcGVjaWZpZWQga2V5IHVzYWdlc1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1OYW1lKGtleS5hbGdvcml0aG0pO1xuICAgICAgICBpZiAoa2V5VXNhZ2UgJiYga2V5LnVzYWdlcy5pbmRleE9mKGtleVVzYWdlKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBDcnlwdG9FcnJvcihga2V5IGRvZXMgbm90IG1hdGNoIHRoYXQgb2Ygb3BlcmF0aW9uYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tSZXF1aXJlZFByb3BlcnR5KGRhdGEsIHByb3BOYW1lKSB7XG4gICAgICAgIGlmICghKHByb3BOYW1lIGluIGRhdGEpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmVxdWlyZWRQcm9wZXJ0eUVycm9yKHByb3BOYW1lKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja0hhc2hBbGdvcml0aG0oYWxnb3JpdGhtLCBoYXNoQWxnb3JpdGhtcykge1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaGFzaEFsZ29yaXRobXMpIHtcbiAgICAgICAgICAgIGlmIChpdGVtLnRvTG93ZXJDYXNlKCkgPT09IGFsZ29yaXRobS5uYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IE9wZXJhdGlvbkVycm9yKGBoYXNoOiBNdXN0IGJlIG9uZSBvZiAke2hhc2hBbGdvcml0aG1zLmpvaW4oXCIsIFwiKX1gKTtcbiAgICB9XG4gICAgY2hlY2tJbXBvcnRQYXJhbXMoX2FsZ29yaXRobSkge1xuICAgIH1cbiAgICBjaGVja0tleUZvcm1hdChmb3JtYXQpIHtcbiAgICAgICAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJyYXdcIjpcbiAgICAgICAgICAgIGNhc2UgXCJwa2NzOFwiOlxuICAgICAgICAgICAgY2FzZSBcInNwa2lcIjpcbiAgICAgICAgICAgIGNhc2UgXCJqd2tcIjpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImZvcm1hdDogSXMgaW52YWxpZCB2YWx1ZS4gTXVzdCBiZSAnandrJywgJ3JhdycsICdzcGtpJywgb3IgJ3BrY3M4J1wiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja0tleURhdGEoZm9ybWF0LCBrZXlEYXRhKSB7XG4gICAgICAgIGlmICgha2V5RGF0YSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleURhdGE6IENhbm5vdCBiZSBlbXB0eSBvbiBlbXB0eSBvbiBrZXkgaW1wb3J0aW5nXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtYXQgPT09IFwiandrXCIpIHtcbiAgICAgICAgICAgIGlmICghaXNKV0soa2V5RGF0YSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5RGF0YTogSXMgbm90IEpzb25XZWJUb2tlblwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghQnVmZmVyU291cmNlQ29udmVydGVyLmlzQnVmZmVyU291cmNlKGtleURhdGEpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5RGF0YTogSXMgbm90IEFycmF5QnVmZmVyVmlldyBvciBBcnJheUJ1ZmZlclwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcmVwYXJlRGF0YShkYXRhKSB7XG4gICAgICAgIHJldHVybiBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihkYXRhKTtcbiAgICB9XG59XG5cbmNsYXNzIEFlc1Byb3ZpZGVyIGV4dGVuZHMgUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNoZWNrR2VuZXJhdGVLZXlQYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJsZW5ndGhcIik7XG4gICAgICAgIGlmICh0eXBlb2YgYWxnb3JpdGhtLmxlbmd0aCAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImxlbmd0aDogSXMgbm90IG9mIHR5cGUgTnVtYmVyXCIpO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAxMjg6XG4gICAgICAgICAgICBjYXNlIDE5MjpcbiAgICAgICAgICAgIGNhc2UgMjU2OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwibGVuZ3RoOiBNdXN0IGJlIDEyOCwgMTkyLCBvciAyNTZcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tEZXJpdmVkS2V5UGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrR2VuZXJhdGVLZXlQYXJhbXMoYWxnb3JpdGhtKTtcbiAgICB9XG59XG5cbmNsYXNzIEFlc0NiY1Byb3ZpZGVyIGV4dGVuZHMgQWVzUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkFFUy1DQkNcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXCJlbmNyeXB0XCIsIFwiZGVjcnlwdFwiLCBcIndyYXBLZXlcIiwgXCJ1bndyYXBLZXlcIl07XG4gICAgfVxuICAgIGNoZWNrQWxnb3JpdGhtUGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwiaXZcIik7XG4gICAgICAgIGlmICghKGFsZ29yaXRobS5pdiBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8IEFycmF5QnVmZmVyLmlzVmlldyhhbGdvcml0aG0uaXYpKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIml2OiBJcyBub3Qgb2YgdHlwZSAnKEFycmF5QnVmZmVyIG9yIEFycmF5QnVmZmVyVmlldyknXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbGdvcml0aG0uaXYuYnl0ZUxlbmd0aCAhPT0gMTYpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJpdjogTXVzdCBoYXZlIGxlbmd0aCAxNiBieXRlc1wiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgQWVzQ21hY1Byb3ZpZGVyIGV4dGVuZHMgQWVzUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkFFUy1DTUFDXCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW1wic2lnblwiLCBcInZlcmlmeVwiXTtcbiAgICB9XG4gICAgY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJsZW5ndGhcIik7XG4gICAgICAgIGlmICh0eXBlb2YgYWxnb3JpdGhtLmxlbmd0aCAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImxlbmd0aDogSXMgbm90IGEgTnVtYmVyXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbGdvcml0aG0ubGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE9wZXJhdGlvbkVycm9yKFwibGVuZ3RoOiBNdXN0IGJlIG1vcmUgdGhhbiAwXCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBBZXNDdHJQcm92aWRlciBleHRlbmRzIEFlc1Byb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJBRVMtQ1RSXCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW1wiZW5jcnlwdFwiLCBcImRlY3J5cHRcIiwgXCJ3cmFwS2V5XCIsIFwidW53cmFwS2V5XCJdO1xuICAgIH1cbiAgICBjaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcImNvdW50ZXJcIik7XG4gICAgICAgIGlmICghKGFsZ29yaXRobS5jb3VudGVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgfHwgQXJyYXlCdWZmZXIuaXNWaWV3KGFsZ29yaXRobS5jb3VudGVyKSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJjb3VudGVyOiBJcyBub3Qgb2YgdHlwZSAnKEFycmF5QnVmZmVyIG9yIEFycmF5QnVmZmVyVmlldyknXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbGdvcml0aG0uY291bnRlci5ieXRlTGVuZ3RoICE9PSAxNikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIml2OiBNdXN0IGhhdmUgbGVuZ3RoIDE2IGJ5dGVzXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJsZW5ndGhcIik7XG4gICAgICAgIGlmICh0eXBlb2YgYWxnb3JpdGhtLmxlbmd0aCAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImxlbmd0aDogSXMgbm90IGEgTnVtYmVyXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbGdvcml0aG0ubGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE9wZXJhdGlvbkVycm9yKFwibGVuZ3RoOiBNdXN0IGJlIG1vcmUgdGhhbiAwXCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBBZXNFY2JQcm92aWRlciBleHRlbmRzIEFlc1Byb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJBRVMtRUNCXCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW1wiZW5jcnlwdFwiLCBcImRlY3J5cHRcIiwgXCJ3cmFwS2V5XCIsIFwidW53cmFwS2V5XCJdO1xuICAgIH1cbn1cblxuY2xhc3MgQWVzR2NtUHJvdmlkZXIgZXh0ZW5kcyBBZXNQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiQUVTLUdDTVwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtcImVuY3J5cHRcIiwgXCJkZWNyeXB0XCIsIFwid3JhcEtleVwiLCBcInVud3JhcEtleVwiXTtcbiAgICB9XG4gICAgY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcIml2XCIpO1xuICAgICAgICBpZiAoIShhbGdvcml0aG0uaXYgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciB8fCBBcnJheUJ1ZmZlci5pc1ZpZXcoYWxnb3JpdGhtLml2KSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJpdjogSXMgbm90IG9mIHR5cGUgJyhBcnJheUJ1ZmZlciBvciBBcnJheUJ1ZmZlclZpZXcpJ1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxnb3JpdGhtLml2LmJ5dGVMZW5ndGggPCAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT3BlcmF0aW9uRXJyb3IoXCJpdjogTXVzdCBoYXZlIGxlbmd0aCBtb3JlIHRoYW4gMCBhbmQgbGVzcyB0aGFuIDJeNjQgLSAxXCIpO1xuICAgICAgICB9XG4gICAgICAgIChfYSA9IGFsZ29yaXRobS50YWdMZW5ndGgpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IChhbGdvcml0aG0udGFnTGVuZ3RoID0gMTI4KTtcbiAgICAgICAgc3dpdGNoIChhbGdvcml0aG0udGFnTGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDMyOlxuICAgICAgICAgICAgY2FzZSA2NDpcbiAgICAgICAgICAgIGNhc2UgOTY6XG4gICAgICAgICAgICBjYXNlIDEwNDpcbiAgICAgICAgICAgIGNhc2UgMTEyOlxuICAgICAgICAgICAgY2FzZSAxMjA6XG4gICAgICAgICAgICBjYXNlIDEyODpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IE9wZXJhdGlvbkVycm9yKFwidGFnTGVuZ3RoOiBNdXN0IGJlIG9uZSBvZiAzMiwgNjQsIDk2LCAxMDQsIDExMiwgMTIwIG9yIDEyOFwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgQWVzS3dQcm92aWRlciBleHRlbmRzIEFlc1Byb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJBRVMtS1dcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXCJ3cmFwS2V5XCIsIFwidW53cmFwS2V5XCJdO1xuICAgIH1cbn1cblxuY2xhc3MgRGVzUHJvdmlkZXIgZXh0ZW5kcyBQcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW1wiZW5jcnlwdFwiLCBcImRlY3J5cHRcIiwgXCJ3cmFwS2V5XCIsIFwidW53cmFwS2V5XCJdO1xuICAgIH1cbiAgICBjaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgaWYgKHRoaXMuaXZTaXplKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwiaXZcIik7XG4gICAgICAgICAgICBpZiAoIShhbGdvcml0aG0uaXYgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciB8fCBBcnJheUJ1ZmZlci5pc1ZpZXcoYWxnb3JpdGhtLml2KSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiaXY6IElzIG5vdCBvZiB0eXBlICcoQXJyYXlCdWZmZXIgb3IgQXJyYXlCdWZmZXJWaWV3KSdcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWxnb3JpdGhtLml2LmJ5dGVMZW5ndGggIT09IHRoaXMuaXZTaXplKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgaXY6IE11c3QgaGF2ZSBsZW5ndGggJHt0aGlzLml2U2l6ZX0gYnl0ZXNgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja0dlbmVyYXRlS2V5UGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwibGVuZ3RoXCIpO1xuICAgICAgICBpZiAodHlwZW9mIGFsZ29yaXRobS5sZW5ndGggIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJsZW5ndGg6IElzIG5vdCBvZiB0eXBlIE51bWJlclwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxnb3JpdGhtLmxlbmd0aCAhPT0gdGhpcy5rZXlTaXplQml0cykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE9wZXJhdGlvbkVycm9yKGBhbGdvcml0aG0ubGVuZ3RoOiBNdXN0IGJlICR7dGhpcy5rZXlTaXplQml0c31gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja0Rlcml2ZWRLZXlQYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tHZW5lcmF0ZUtleVBhcmFtcyhhbGdvcml0aG0pO1xuICAgIH1cbn1cblxuY2xhc3MgUnNhUHJvdmlkZXIgZXh0ZW5kcyBQcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuaGFzaEFsZ29yaXRobXMgPSBbXCJTSEEtMVwiLCBcIlNIQS0yNTZcIiwgXCJTSEEtMzg0XCIsIFwiU0hBLTUxMlwiXTtcbiAgICB9XG4gICAgY2hlY2tHZW5lcmF0ZUtleVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcImhhc2hcIik7XG4gICAgICAgIHRoaXMuY2hlY2tIYXNoQWxnb3JpdGhtKGFsZ29yaXRobS5oYXNoLCB0aGlzLmhhc2hBbGdvcml0aG1zKTtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcInB1YmxpY0V4cG9uZW50XCIpO1xuICAgICAgICBpZiAoIShhbGdvcml0aG0ucHVibGljRXhwb25lbnQgJiYgYWxnb3JpdGhtLnB1YmxpY0V4cG9uZW50IGluc3RhbmNlb2YgVWludDhBcnJheSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJwdWJsaWNFeHBvbmVudDogTWlzc2luZyBvciBub3QgYSBVaW50OEFycmF5XCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHB1YmxpY0V4cG9uZW50ID0gQ29udmVydC5Ub0Jhc2U2NChhbGdvcml0aG0ucHVibGljRXhwb25lbnQpO1xuICAgICAgICBpZiAoIShwdWJsaWNFeHBvbmVudCA9PT0gXCJBdz09XCIgfHwgcHVibGljRXhwb25lbnQgPT09IFwiQVFBQlwiKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcInB1YmxpY0V4cG9uZW50OiBNdXN0IGJlIFszXSBvciBbMSwwLDFdXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJtb2R1bHVzTGVuZ3RoXCIpO1xuICAgICAgICBpZiAoYWxnb3JpdGhtLm1vZHVsdXNMZW5ndGggJSA4XG4gICAgICAgICAgICB8fCBhbGdvcml0aG0ubW9kdWx1c0xlbmd0aCA8IDI1NlxuICAgICAgICAgICAgfHwgYWxnb3JpdGhtLm1vZHVsdXNMZW5ndGggPiAxNjM4NCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlRoZSBtb2R1bHVzIGxlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgOCBiaXRzIGFuZCA+PSAyNTYgYW5kIDw9IDE2Mzg0XCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNoZWNrSW1wb3J0UGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwiaGFzaFwiKTtcbiAgICAgICAgdGhpcy5jaGVja0hhc2hBbGdvcml0aG0oYWxnb3JpdGhtLmhhc2gsIHRoaXMuaGFzaEFsZ29yaXRobXMpO1xuICAgIH1cbn1cblxuY2xhc3MgUnNhU3NhUHJvdmlkZXIgZXh0ZW5kcyBSc2FQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiUlNBU1NBLVBLQ1MxLXYxXzVcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSB7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBbXCJzaWduXCJdLFxuICAgICAgICAgICAgcHVibGljS2V5OiBbXCJ2ZXJpZnlcIl0sXG4gICAgICAgIH07XG4gICAgfVxufVxuXG5jbGFzcyBSc2FQc3NQcm92aWRlciBleHRlbmRzIFJzYVByb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJSU0EtUFNTXCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogW1wic2lnblwiXSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogW1widmVyaWZ5XCJdLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcInNhbHRMZW5ndGhcIik7XG4gICAgICAgIGlmICh0eXBlb2YgYWxnb3JpdGhtLnNhbHRMZW5ndGggIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJzYWx0TGVuZ3RoOiBJcyBub3QgYSBOdW1iZXJcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFsZ29yaXRobS5zYWx0TGVuZ3RoIDwgMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJzYWx0TGVuZ3RoOiBNdXN0IGJlIHBvc2l0aXZlIG51bWJlclwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgUnNhT2FlcFByb3ZpZGVyIGV4dGVuZHMgUnNhUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlJTQS1PQUVQXCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogW1wiZGVjcnlwdFwiLCBcInVud3JhcEtleVwiXSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogW1wiZW5jcnlwdFwiLCBcIndyYXBLZXlcIl0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNoZWNrQWxnb3JpdGhtUGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICBpZiAoYWxnb3JpdGhtLmxhYmVsXG4gICAgICAgICAgICAmJiAhKGFsZ29yaXRobS5sYWJlbCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8IEFycmF5QnVmZmVyLmlzVmlldyhhbGdvcml0aG0ubGFiZWwpKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImxhYmVsOiBJcyBub3Qgb2YgdHlwZSAnKEFycmF5QnVmZmVyIG9yIEFycmF5QnVmZmVyVmlldyknXCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBFbGxpcHRpY1Byb3ZpZGVyIGV4dGVuZHMgUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNoZWNrR2VuZXJhdGVLZXlQYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJuYW1lZEN1cnZlXCIpO1xuICAgICAgICB0aGlzLmNoZWNrTmFtZWRDdXJ2ZShhbGdvcml0aG0ubmFtZWRDdXJ2ZSk7XG4gICAgfVxuICAgIGNoZWNrTmFtZWRDdXJ2ZShuYW1lZEN1cnZlKSB7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLm5hbWVkQ3VydmVzKSB7XG4gICAgICAgICAgICBpZiAoaXRlbS50b0xvd2VyQ2FzZSgpID09PSBuYW1lZEN1cnZlLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IE9wZXJhdGlvbkVycm9yKGBuYW1lZEN1cnZlOiBNdXN0IGJlIG9uZSBvZiAke3RoaXMubmFtZWRDdXJ2ZXMuam9pbihcIiwgXCIpfWApO1xuICAgIH1cbn1cblxuY2xhc3MgRWNkc2FQcm92aWRlciBleHRlbmRzIEVsbGlwdGljUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkVDRFNBXCI7XG4gICAgICAgIHRoaXMuaGFzaEFsZ29yaXRobXMgPSBbXCJTSEEtMVwiLCBcIlNIQS0yNTZcIiwgXCJTSEEtMzg0XCIsIFwiU0hBLTUxMlwiXTtcbiAgICAgICAgdGhpcy51c2FnZXMgPSB7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBbXCJzaWduXCJdLFxuICAgICAgICAgICAgcHVibGljS2V5OiBbXCJ2ZXJpZnlcIl0sXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMubmFtZWRDdXJ2ZXMgPSBbXCJQLTI1NlwiLCBcIlAtMzg0XCIsIFwiUC01MjFcIiwgXCJLLTI1NlwiXTtcbiAgICB9XG4gICAgY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJoYXNoXCIpO1xuICAgICAgICB0aGlzLmNoZWNrSGFzaEFsZ29yaXRobShhbGdvcml0aG0uaGFzaCwgdGhpcy5oYXNoQWxnb3JpdGhtcyk7XG4gICAgfVxufVxuXG5jb25zdCBLRVlfVFlQRVMgPSBbXCJzZWNyZXRcIiwgXCJwcml2YXRlXCIsIFwicHVibGljXCJdO1xuY2xhc3MgQ3J5cHRvS2V5IHtcbiAgICBzdGF0aWMgY3JlYXRlKGFsZ29yaXRobSwgdHlwZSwgZXh0cmFjdGFibGUsIHVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBuZXcgdGhpcygpO1xuICAgICAgICBrZXkuYWxnb3JpdGhtID0gYWxnb3JpdGhtO1xuICAgICAgICBrZXkudHlwZSA9IHR5cGU7XG4gICAgICAgIGtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBrZXkudXNhZ2VzID0gdXNhZ2VzO1xuICAgICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgICBzdGF0aWMgaXNLZXlUeXBlKGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEtFWV9UWVBFUy5pbmRleE9mKGRhdGEpICE9PSAtMTtcbiAgICB9XG4gICAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgICAgICByZXR1cm4gXCJDcnlwdG9LZXlcIjtcbiAgICB9XG59XG5cbmNsYXNzIEVjZGhQcm92aWRlciBleHRlbmRzIEVsbGlwdGljUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkVDREhcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSB7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBbXCJkZXJpdmVCaXRzXCIsIFwiZGVyaXZlS2V5XCJdLFxuICAgICAgICAgICAgcHVibGljS2V5OiBbXSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5uYW1lZEN1cnZlcyA9IFtcIlAtMjU2XCIsIFwiUC0zODRcIiwgXCJQLTUyMVwiLCBcIkstMjU2XCJdO1xuICAgIH1cbiAgICBjaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcInB1YmxpY1wiKTtcbiAgICAgICAgaWYgKCEoYWxnb3JpdGhtLnB1YmxpYyBpbnN0YW5jZW9mIENyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJwdWJsaWM6IElzIG5vdCBhIENyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxnb3JpdGhtLnB1YmxpYy50eXBlICE9PSBcInB1YmxpY1wiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT3BlcmF0aW9uRXJyb3IoXCJwdWJsaWM6IElzIG5vdCBhIHB1YmxpYyBrZXlcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFsZ29yaXRobS5wdWJsaWMuYWxnb3JpdGhtLm5hbWUgIT09IHRoaXMubmFtZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE9wZXJhdGlvbkVycm9yKGBwdWJsaWM6IElzIG5vdCAke3RoaXMubmFtZX0ga2V5YCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIEVjZGhFc1Byb3ZpZGVyIGV4dGVuZHMgRWNkaFByb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJFQ0RILUVTXCI7XG4gICAgICAgIHRoaXMubmFtZWRDdXJ2ZXMgPSBbXCJYMjU1MTlcIiwgXCJYNDQ4XCJdO1xuICAgIH1cbn1cblxuY2xhc3MgRWREc2FQcm92aWRlciBleHRlbmRzIEVsbGlwdGljUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkVkRFNBXCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogW1wic2lnblwiXSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogW1widmVyaWZ5XCJdLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLm5hbWVkQ3VydmVzID0gW1wiRWQyNTUxOVwiLCBcIkVkNDQ4XCJdO1xuICAgIH1cbn1cblxubGV0IE9iamVjdElkZW50aWZpZXIgPSBjbGFzcyBPYmplY3RJZGVudGlmaWVyIHtcbiAgICBjb25zdHJ1Y3Rvcih2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLk9iamVjdElkZW50aWZpZXIgfSlcbl0sIE9iamVjdElkZW50aWZpZXIucHJvdG90eXBlLCBcInZhbHVlXCIsIHZvaWQgMCk7XG5PYmplY3RJZGVudGlmaWVyID0gX19kZWNvcmF0ZShbXG4gICAgQXNuVHlwZSh7IHR5cGU6IEFzblR5cGVUeXBlcy5DaG9pY2UgfSlcbl0sIE9iamVjdElkZW50aWZpZXIpO1xuXG5jbGFzcyBBbGdvcml0aG1JZGVudGlmaWVyIHtcbiAgICBjb25zdHJ1Y3RvcihwYXJhbXMpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBwYXJhbXMpO1xuICAgIH1cbn1cbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3Aoe1xuICAgICAgICB0eXBlOiBBc25Qcm9wVHlwZXMuT2JqZWN0SWRlbnRpZmllcixcbiAgICB9KVxuXSwgQWxnb3JpdGhtSWRlbnRpZmllci5wcm90b3R5cGUsIFwiYWxnb3JpdGhtXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHtcbiAgICAgICAgdHlwZTogQXNuUHJvcFR5cGVzLkFueSxcbiAgICAgICAgb3B0aW9uYWw6IHRydWUsXG4gICAgfSlcbl0sIEFsZ29yaXRobUlkZW50aWZpZXIucHJvdG90eXBlLCBcInBhcmFtZXRlcnNcIiwgdm9pZCAwKTtcblxuY2xhc3MgUHJpdmF0ZUtleUluZm8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnZlcnNpb24gPSAwO1xuICAgICAgICB0aGlzLnByaXZhdGVLZXlBbGdvcml0aG0gPSBuZXcgQWxnb3JpdGhtSWRlbnRpZmllcigpO1xuICAgICAgICB0aGlzLnByaXZhdGVLZXkgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgfVxufVxuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyIH0pXG5dLCBQcml2YXRlS2V5SW5mby5wcm90b3R5cGUsIFwidmVyc2lvblwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFsZ29yaXRobUlkZW50aWZpZXIgfSlcbl0sIFByaXZhdGVLZXlJbmZvLnByb3RvdHlwZSwgXCJwcml2YXRlS2V5QWxnb3JpdGhtXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLk9jdGV0U3RyaW5nIH0pXG5dLCBQcml2YXRlS2V5SW5mby5wcm90b3R5cGUsIFwicHJpdmF0ZUtleVwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5BbnksIG9wdGlvbmFsOiB0cnVlIH0pXG5dLCBQcml2YXRlS2V5SW5mby5wcm90b3R5cGUsIFwiYXR0cmlidXRlc1wiLCB2b2lkIDApO1xuXG5jbGFzcyBQdWJsaWNLZXlJbmZvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5wdWJsaWNLZXlBbGdvcml0aG0gPSBuZXcgQWxnb3JpdGhtSWRlbnRpZmllcigpO1xuICAgICAgICB0aGlzLnB1YmxpY0tleSA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICB9XG59XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQWxnb3JpdGhtSWRlbnRpZmllciB9KVxuXSwgUHVibGljS2V5SW5mby5wcm90b3R5cGUsIFwicHVibGljS2V5QWxnb3JpdGhtXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkJpdFN0cmluZyB9KVxuXSwgUHVibGljS2V5SW5mby5wcm90b3R5cGUsIFwicHVibGljS2V5XCIsIHZvaWQgMCk7XG5cbmNvbnN0IEpzb25CYXNlNjRVcmxBcnJheUJ1ZmZlckNvbnZlcnRlciA9IHtcbiAgICBmcm9tSlNPTjogKHZhbHVlKSA9PiBDb252ZXJ0LkZyb21CYXNlNjRVcmwodmFsdWUpLFxuICAgIHRvSlNPTjogKHZhbHVlKSA9PiBDb252ZXJ0LlRvQmFzZTY0VXJsKG5ldyBVaW50OEFycmF5KHZhbHVlKSksXG59O1xuXG5jb25zdCBBc25JbnRlZ2VyQXJyYXlCdWZmZXJDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlSGV4ID0gdmFsdWUudmFsdWVCbG9jay52YWx1ZUhleDtcbiAgICAgICAgcmV0dXJuICEobmV3IFVpbnQ4QXJyYXkodmFsdWVIZXgpWzBdKVxuICAgICAgICAgICAgPyB2YWx1ZS52YWx1ZUJsb2NrLnZhbHVlSGV4LnNsaWNlKDEpXG4gICAgICAgICAgICA6IHZhbHVlLnZhbHVlQmxvY2sudmFsdWVIZXg7XG4gICAgfSxcbiAgICB0b0FTTjogKHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlSGV4ID0gbmV3IFVpbnQ4QXJyYXkodmFsdWUpWzBdID4gMTI3XG4gICAgICAgICAgICA/IGNvbWJpbmUobmV3IFVpbnQ4QXJyYXkoWzBdKS5idWZmZXIsIHZhbHVlKVxuICAgICAgICAgICAgOiB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIG5ldyBhc24xLkludGVnZXIoeyB2YWx1ZUhleCB9KTtcbiAgICB9LFxufTtcblxudmFyIGluZGV4JDMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgQXNuSW50ZWdlckFycmF5QnVmZmVyQ29udmVydGVyOiBBc25JbnRlZ2VyQXJyYXlCdWZmZXJDb252ZXJ0ZXIsXG4gIEpzb25CYXNlNjRVcmxBcnJheUJ1ZmZlckNvbnZlcnRlcjogSnNvbkJhc2U2NFVybEFycmF5QnVmZmVyQ29udmVydGVyXG59KTtcblxuY2xhc3MgUnNhUHJpdmF0ZUtleSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMudmVyc2lvbiA9IDA7XG4gICAgICAgIHRoaXMubW9kdWx1cyA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgdGhpcy5wdWJsaWNFeHBvbmVudCA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgdGhpcy5wcml2YXRlRXhwb25lbnQgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIHRoaXMucHJpbWUxID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgICAgICB0aGlzLnByaW1lMiA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgdGhpcy5leHBvbmVudDEgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIHRoaXMuZXhwb25lbnQyID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgICAgICB0aGlzLmNvZWZmaWNpZW50ID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgIH1cbn1cbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuSW50ZWdlciwgY29udmVydGVyOiBBc25JbnRlZ2VyQ29udmVydGVyIH0pXG5dLCBSc2FQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJ2ZXJzaW9uXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkludGVnZXIsIGNvbnZlcnRlcjogQXNuSW50ZWdlckFycmF5QnVmZmVyQ29udmVydGVyIH0pLFxuICAgIEpzb25Qcm9wKHsgbmFtZTogXCJuXCIsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybEFycmF5QnVmZmVyQ29udmVydGVyIH0pXG5dLCBSc2FQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJtb2R1bHVzXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkludGVnZXIsIGNvbnZlcnRlcjogQXNuSW50ZWdlckFycmF5QnVmZmVyQ29udmVydGVyIH0pLFxuICAgIEpzb25Qcm9wKHsgbmFtZTogXCJlXCIsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybEFycmF5QnVmZmVyQ29udmVydGVyIH0pXG5dLCBSc2FQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJwdWJsaWNFeHBvbmVudFwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJBcnJheUJ1ZmZlckNvbnZlcnRlciB9KSxcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwiZFwiLCBjb252ZXJ0ZXI6IEpzb25CYXNlNjRVcmxBcnJheUJ1ZmZlckNvbnZlcnRlciB9KVxuXSwgUnNhUHJpdmF0ZUtleS5wcm90b3R5cGUsIFwicHJpdmF0ZUV4cG9uZW50XCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkludGVnZXIsIGNvbnZlcnRlcjogQXNuSW50ZWdlckFycmF5QnVmZmVyQ29udmVydGVyIH0pLFxuICAgIEpzb25Qcm9wKHsgbmFtZTogXCJwXCIsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybEFycmF5QnVmZmVyQ29udmVydGVyIH0pXG5dLCBSc2FQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJwcmltZTFcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuSW50ZWdlciwgY29udmVydGVyOiBBc25JbnRlZ2VyQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSksXG4gICAgSnNvblByb3AoeyBuYW1lOiBcInFcIiwgY29udmVydGVyOiBKc29uQmFzZTY0VXJsQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSlcbl0sIFJzYVByaXZhdGVLZXkucHJvdG90eXBlLCBcInByaW1lMlwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJBcnJheUJ1ZmZlckNvbnZlcnRlciB9KSxcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwiZHBcIiwgY29udmVydGVyOiBKc29uQmFzZTY0VXJsQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSlcbl0sIFJzYVByaXZhdGVLZXkucHJvdG90eXBlLCBcImV4cG9uZW50MVwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJBcnJheUJ1ZmZlckNvbnZlcnRlciB9KSxcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwiZHFcIiwgY29udmVydGVyOiBKc29uQmFzZTY0VXJsQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSlcbl0sIFJzYVByaXZhdGVLZXkucHJvdG90eXBlLCBcImV4cG9uZW50MlwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJBcnJheUJ1ZmZlckNvbnZlcnRlciB9KSxcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwicWlcIiwgY29udmVydGVyOiBKc29uQmFzZTY0VXJsQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSlcbl0sIFJzYVByaXZhdGVLZXkucHJvdG90eXBlLCBcImNvZWZmaWNpZW50XCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkFueSwgb3B0aW9uYWw6IHRydWUgfSlcbl0sIFJzYVByaXZhdGVLZXkucHJvdG90eXBlLCBcIm90aGVyUHJpbWVJbmZvc1wiLCB2b2lkIDApO1xuXG5jbGFzcyBSc2FQdWJsaWNLZXkge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLm1vZHVsdXMgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIHRoaXMucHVibGljRXhwb25lbnQgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgfVxufVxuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJBcnJheUJ1ZmZlckNvbnZlcnRlciB9KSxcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwiblwiLCBjb252ZXJ0ZXI6IEpzb25CYXNlNjRVcmxBcnJheUJ1ZmZlckNvbnZlcnRlciB9KVxuXSwgUnNhUHVibGljS2V5LnByb3RvdHlwZSwgXCJtb2R1bHVzXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkludGVnZXIsIGNvbnZlcnRlcjogQXNuSW50ZWdlckFycmF5QnVmZmVyQ29udmVydGVyIH0pLFxuICAgIEpzb25Qcm9wKHsgbmFtZTogXCJlXCIsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybEFycmF5QnVmZmVyQ29udmVydGVyIH0pXG5dLCBSc2FQdWJsaWNLZXkucHJvdG90eXBlLCBcInB1YmxpY0V4cG9uZW50XCIsIHZvaWQgMCk7XG5cbmxldCBFY1B1YmxpY0tleSA9IGNsYXNzIEVjUHVibGljS2V5IHtcbiAgICBjb25zdHJ1Y3Rvcih2YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIGxldCBieXRlcyA9IG5ldyBVaW50OEFycmF5KHRoaXMudmFsdWUpO1xuICAgICAgICBpZiAoYnl0ZXNbMF0gIT09IDB4MDQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBDcnlwdG9FcnJvcihcIldyb25nIEVDUG9pbnQuIEN1cnJlbnQgdmVyc2lvbiBzdXBwb3J0cyBvbmx5IFVuY29tcHJlc3NlZCAoMHgwNCkgcG9pbnRcIik7XG4gICAgICAgIH1cbiAgICAgICAgYnl0ZXMgPSBuZXcgVWludDhBcnJheSh0aGlzLnZhbHVlLnNsaWNlKDEpKTtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IGJ5dGVzLmxlbmd0aCAvIDI7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IDA7XG4gICAgICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICAgICAgICB4OiBDb252ZXJ0LlRvQmFzZTY0VXJsKGJ5dGVzLmJ1ZmZlci5zbGljZShvZmZzZXQsIG9mZnNldCArIHNpemUpKSxcbiAgICAgICAgICAgIHk6IENvbnZlcnQuVG9CYXNlNjRVcmwoYnl0ZXMuYnVmZmVyLnNsaWNlKG9mZnNldCArIHNpemUsIG9mZnNldCArIHNpemUgKyBzaXplKSksXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBqc29uO1xuICAgIH1cbiAgICBmcm9tSlNPTihqc29uKSB7XG4gICAgICAgIGlmICghKFwieFwiIGluIGpzb24pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ4OiBNaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghKFwieVwiIGluIGpzb24pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ5OiBNaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5XCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHggPSBDb252ZXJ0LkZyb21CYXNlNjRVcmwoanNvbi54KTtcbiAgICAgICAgY29uc3QgeSA9IENvbnZlcnQuRnJvbUJhc2U2NFVybChqc29uLnkpO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbWJpbmUobmV3IFVpbnQ4QXJyYXkoWzB4MDRdKS5idWZmZXIsIHgsIHkpO1xuICAgICAgICB0aGlzLnZhbHVlID0gbmV3IFVpbnQ4QXJyYXkodmFsdWUpLmJ1ZmZlcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuT2N0ZXRTdHJpbmcgfSlcbl0sIEVjUHVibGljS2V5LnByb3RvdHlwZSwgXCJ2YWx1ZVwiLCB2b2lkIDApO1xuRWNQdWJsaWNLZXkgPSBfX2RlY29yYXRlKFtcbiAgICBBc25UeXBlKHsgdHlwZTogQXNuVHlwZVR5cGVzLkNob2ljZSB9KVxuXSwgRWNQdWJsaWNLZXkpO1xuXG5jbGFzcyBFY1ByaXZhdGVLZXkge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnZlcnNpb24gPSAxO1xuICAgICAgICB0aGlzLnByaXZhdGVLZXkgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgfVxuICAgIGZyb21KU09OKGpzb24pIHtcbiAgICAgICAgaWYgKCEoXCJkXCIgaW4ganNvbikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImQ6IE1pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHlcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcml2YXRlS2V5ID0gQ29udmVydC5Gcm9tQmFzZTY0VXJsKGpzb24uZCk7XG4gICAgICAgIGlmIChcInhcIiBpbiBqc29uKSB7XG4gICAgICAgICAgICBjb25zdCBwdWJsaWNLZXkgPSBuZXcgRWNQdWJsaWNLZXkoKTtcbiAgICAgICAgICAgIHB1YmxpY0tleS5mcm9tSlNPTihqc29uKTtcbiAgICAgICAgICAgIGNvbnN0IGFzbiA9IEFzblNlcmlhbGl6ZXIudG9BU04ocHVibGljS2V5KTtcbiAgICAgICAgICAgIGlmIChcInZhbHVlSGV4XCIgaW4gYXNuLnZhbHVlQmxvY2spIHtcbiAgICAgICAgICAgICAgICB0aGlzLnB1YmxpY0tleSA9IGFzbi52YWx1ZUJsb2NrLnZhbHVlSGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIGNvbnN0IGp3ayA9IHt9O1xuICAgICAgICBqd2suZCA9IENvbnZlcnQuVG9CYXNlNjRVcmwodGhpcy5wcml2YXRlS2V5KTtcbiAgICAgICAgaWYgKHRoaXMucHVibGljS2V5KSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGp3aywgbmV3IEVjUHVibGljS2V5KHRoaXMucHVibGljS2V5KS50b0pTT04oKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGp3aztcbiAgICB9XG59XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkludGVnZXIsIGNvbnZlcnRlcjogQXNuSW50ZWdlckNvbnZlcnRlciB9KVxuXSwgRWNQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJ2ZXJzaW9uXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLk9jdGV0U3RyaW5nIH0pXG5dLCBFY1ByaXZhdGVLZXkucHJvdG90eXBlLCBcInByaXZhdGVLZXlcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyBjb250ZXh0OiAwLCB0eXBlOiBBc25Qcm9wVHlwZXMuQW55LCBvcHRpb25hbDogdHJ1ZSB9KVxuXSwgRWNQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJwYXJhbWV0ZXJzXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgY29udGV4dDogMSwgdHlwZTogQXNuUHJvcFR5cGVzLkJpdFN0cmluZywgb3B0aW9uYWw6IHRydWUgfSlcbl0sIEVjUHJpdmF0ZUtleS5wcm90b3R5cGUsIFwicHVibGljS2V5XCIsIHZvaWQgMCk7XG5cbmNvbnN0IEFzbkludGVnZXJXaXRob3V0UGFkZGluZ0NvbnZlcnRlciA9IHtcbiAgICBmcm9tQVNOOiAodmFsdWUpID0+IHtcbiAgICAgICAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheSh2YWx1ZS52YWx1ZUJsb2NrLnZhbHVlSGV4KTtcbiAgICAgICAgcmV0dXJuIChieXRlc1swXSA9PT0gMClcbiAgICAgICAgICAgID8gYnl0ZXMuYnVmZmVyLnNsaWNlKDEpXG4gICAgICAgICAgICA6IGJ5dGVzLmJ1ZmZlcjtcbiAgICB9LFxuICAgIHRvQVNOOiAodmFsdWUpID0+IHtcbiAgICAgICAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheSh2YWx1ZSk7XG4gICAgICAgIGlmIChieXRlc1swXSA+IDEyNykge1xuICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBuZXcgVWludDhBcnJheShieXRlcy5sZW5ndGggKyAxKTtcbiAgICAgICAgICAgIG5ld1ZhbHVlLnNldChieXRlcywgMSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IGFzbjEuSW50ZWdlcih7IHZhbHVlSGV4OiBuZXdWYWx1ZS5idWZmZXIgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBhc24xLkludGVnZXIoeyB2YWx1ZUhleDogdmFsdWUgfSk7XG4gICAgfSxcbn07XG5cbnZhciBpbmRleCQyID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBfX3Byb3RvX186IG51bGwsXG4gIEFzbkludGVnZXJXaXRob3V0UGFkZGluZ0NvbnZlcnRlcjogQXNuSW50ZWdlcldpdGhvdXRQYWRkaW5nQ29udmVydGVyXG59KTtcblxuY2xhc3MgRWNVdGlscyB7XG4gICAgc3RhdGljIGRlY29kZVBvaW50KGRhdGEsIHBvaW50U2l6ZSkge1xuICAgICAgICBjb25zdCB2aWV3ID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShkYXRhKTtcbiAgICAgICAgaWYgKCh2aWV3Lmxlbmd0aCA9PT0gMCkgfHwgKHZpZXdbMF0gIT09IDQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJPbmx5IHVuY29tcHJlc3NlZCBwb2ludCBmb3JtYXQgc3VwcG9ydGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG4gPSAodmlldy5sZW5ndGggLSAxKSAvIDI7XG4gICAgICAgIGlmIChuICE9PSAoTWF0aC5jZWlsKHBvaW50U2l6ZSAvIDgpKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUG9pbnQgZG9lcyBub3QgbWF0Y2ggZmllbGQgc2l6ZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB4YiA9IHZpZXcuc2xpY2UoMSwgbiArIDEpO1xuICAgICAgICBjb25zdCB5YiA9IHZpZXcuc2xpY2UobiArIDEsIG4gKyAxICsgbik7XG4gICAgICAgIHJldHVybiB7IHg6IHhiLCB5OiB5YiB9O1xuICAgIH1cbiAgICBzdGF0aWMgZW5jb2RlUG9pbnQocG9pbnQsIHBvaW50U2l6ZSkge1xuICAgICAgICBjb25zdCBzaXplID0gTWF0aC5jZWlsKHBvaW50U2l6ZSAvIDgpO1xuICAgICAgICBpZiAocG9pbnQueC5ieXRlTGVuZ3RoICE9PSBzaXplIHx8IHBvaW50LnkuYnl0ZUxlbmd0aCAhPT0gc2l6ZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiWCxZIGNvb3JkaW5hdGVzIGRvbid0IG1hdGNoIHBvaW50IHNpemUgY3JpdGVyaWFcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeCA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkocG9pbnQueCk7XG4gICAgICAgIGNvbnN0IHkgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KHBvaW50LnkpO1xuICAgICAgICBjb25zdCByZXMgPSBuZXcgVWludDhBcnJheShzaXplICogMiArIDEpO1xuICAgICAgICByZXNbMF0gPSA0O1xuICAgICAgICByZXMuc2V0KHgsIDEpO1xuICAgICAgICByZXMuc2V0KHksIHNpemUgKyAxKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgc3RhdGljIGdldFNpemUocG9pbnRTaXplKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmNlaWwocG9pbnRTaXplIC8gOCk7XG4gICAgfVxuICAgIHN0YXRpYyBlbmNvZGVTaWduYXR1cmUoc2lnbmF0dXJlLCBwb2ludFNpemUpIHtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMuZ2V0U2l6ZShwb2ludFNpemUpO1xuICAgICAgICBjb25zdCByID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShzaWduYXR1cmUucik7XG4gICAgICAgIGNvbnN0IHMgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KHNpZ25hdHVyZS5zKTtcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoc2l6ZSAqIDIpO1xuICAgICAgICByZXMuc2V0KHRoaXMucGFkU3RhcnQociwgc2l6ZSkpO1xuICAgICAgICByZXMuc2V0KHRoaXMucGFkU3RhcnQocywgc2l6ZSksIHNpemUpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBzdGF0aWMgZGVjb2RlU2lnbmF0dXJlKGRhdGEsIHBvaW50U2l6ZSkge1xuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5nZXRTaXplKHBvaW50U2l6ZSk7XG4gICAgICAgIGNvbnN0IHZpZXcgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGRhdGEpO1xuICAgICAgICBpZiAodmlldy5sZW5ndGggIT09IChzaXplICogMikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkluY29ycmVjdCBzaXplIG9mIHRoZSBzaWduYXR1cmVcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgciA9IHZpZXcuc2xpY2UoMCwgc2l6ZSk7XG4gICAgICAgIGNvbnN0IHMgPSB2aWV3LnNsaWNlKHNpemUpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcjogdGhpcy50cmltU3RhcnQociksXG4gICAgICAgICAgICBzOiB0aGlzLnRyaW1TdGFydChzKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgc3RhdGljIHRyaW1TdGFydChkYXRhKSB7XG4gICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgd2hpbGUgKChpIDwgZGF0YS5sZW5ndGggLSAxKSAmJiAoZGF0YVtpXSA9PT0gMCkpIHtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGEuc2xpY2UoaSwgZGF0YS5sZW5ndGgpO1xuICAgIH1cbiAgICBzdGF0aWMgcGFkU3RhcnQoZGF0YSwgc2l6ZSkge1xuICAgICAgICBpZiAoc2l6ZSA9PT0gZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlcyA9IG5ldyBVaW50OEFycmF5KHNpemUpO1xuICAgICAgICByZXMuc2V0KGRhdGEsIHNpemUgLSBkYXRhLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxufVxuXG5jbGFzcyBFY0RzYVNpZ25hdHVyZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuciA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgdGhpcy5zID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgIH1cbiAgICBzdGF0aWMgZnJvbVdlYkNyeXB0b1NpZ25hdHVyZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBwb2ludFNpemUgPSB2YWx1ZS5ieXRlTGVuZ3RoIC8gMjtcbiAgICAgICAgY29uc3QgcG9pbnQgPSBFY1V0aWxzLmRlY29kZVNpZ25hdHVyZSh2YWx1ZSwgcG9pbnRTaXplICogOCk7XG4gICAgICAgIGNvbnN0IGVjU2lnbmF0dXJlID0gbmV3IEVjRHNhU2lnbmF0dXJlKCk7XG4gICAgICAgIGVjU2lnbmF0dXJlLnIgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihwb2ludC5yKTtcbiAgICAgICAgZWNTaWduYXR1cmUucyA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKHBvaW50LnMpO1xuICAgICAgICByZXR1cm4gZWNTaWduYXR1cmU7XG4gICAgfVxuICAgIHRvV2ViQ3J5cHRvU2lnbmF0dXJlKHBvaW50U2l6ZSkge1xuICAgICAgICBpZiAoIXBvaW50U2l6ZSkge1xuICAgICAgICAgICAgY29uc3QgbWF4UG9pbnRMZW5ndGggPSBNYXRoLm1heCh0aGlzLnIuYnl0ZUxlbmd0aCwgdGhpcy5zLmJ5dGVMZW5ndGgpO1xuICAgICAgICAgICAgaWYgKG1heFBvaW50TGVuZ3RoIDw9IDMyKSB7XG4gICAgICAgICAgICAgICAgcG9pbnRTaXplID0gMjU2O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWF4UG9pbnRMZW5ndGggPD0gNDgpIHtcbiAgICAgICAgICAgICAgICBwb2ludFNpemUgPSAzODQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBwb2ludFNpemUgPSA1MjE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gRWNVdGlscy5lbmNvZGVTaWduYXR1cmUodGhpcywgcG9pbnRTaXplKTtcbiAgICAgICAgcmV0dXJuIHNpZ25hdHVyZS5idWZmZXI7XG4gICAgfVxufVxuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJXaXRob3V0UGFkZGluZ0NvbnZlcnRlciB9KVxuXSwgRWNEc2FTaWduYXR1cmUucHJvdG90eXBlLCBcInJcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuSW50ZWdlciwgY29udmVydGVyOiBBc25JbnRlZ2VyV2l0aG91dFBhZGRpbmdDb252ZXJ0ZXIgfSlcbl0sIEVjRHNhU2lnbmF0dXJlLnByb3RvdHlwZSwgXCJzXCIsIHZvaWQgMCk7XG5cbmNsYXNzIE9uZUFzeW1tZXRyaWNLZXkgZXh0ZW5kcyBQcml2YXRlS2V5SW5mbyB7XG59XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgY29udGV4dDogMSwgaW1wbGljaXQ6IHRydWUsIHR5cGU6IEFzblByb3BUeXBlcy5CaXRTdHJpbmcsIG9wdGlvbmFsOiB0cnVlIH0pXG5dLCBPbmVBc3ltbWV0cmljS2V5LnByb3RvdHlwZSwgXCJwdWJsaWNLZXlcIiwgdm9pZCAwKTtcblxubGV0IEVkUHJpdmF0ZUtleSA9IGNsYXNzIEVkUHJpdmF0ZUtleSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgfVxuICAgIGZyb21KU09OKGpzb24pIHtcbiAgICAgICAgaWYgKCFqc29uLmQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImQ6IE1pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHlcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWx1ZSA9IENvbnZlcnQuRnJvbUJhc2U2NFVybChqc29uLmQpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICBjb25zdCBqd2sgPSB7XG4gICAgICAgICAgICBkOiBDb252ZXJ0LlRvQmFzZTY0VXJsKHRoaXMudmFsdWUpLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gandrO1xuICAgIH1cbn07XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLk9jdGV0U3RyaW5nIH0pXG5dLCBFZFByaXZhdGVLZXkucHJvdG90eXBlLCBcInZhbHVlXCIsIHZvaWQgMCk7XG5FZFByaXZhdGVLZXkgPSBfX2RlY29yYXRlKFtcbiAgICBBc25UeXBlKHsgdHlwZTogQXNuVHlwZVR5cGVzLkNob2ljZSB9KVxuXSwgRWRQcml2YXRlS2V5KTtcblxubGV0IEVkUHVibGljS2V5ID0gY2xhc3MgRWRQdWJsaWNLZXkge1xuICAgIGNvbnN0cnVjdG9yKHZhbHVlKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgY29uc3QganNvbiA9IHtcbiAgICAgICAgICAgIHg6IENvbnZlcnQuVG9CYXNlNjRVcmwodGhpcy52YWx1ZSksXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBqc29uO1xuICAgIH1cbiAgICBmcm9tSlNPTihqc29uKSB7XG4gICAgICAgIGlmICghKFwieFwiIGluIGpzb24pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ4OiBNaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5XCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsdWUgPSBDb252ZXJ0LkZyb21CYXNlNjRVcmwoanNvbi54KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuQml0U3RyaW5nIH0pXG5dLCBFZFB1YmxpY0tleS5wcm90b3R5cGUsIFwidmFsdWVcIiwgdm9pZCAwKTtcbkVkUHVibGljS2V5ID0gX19kZWNvcmF0ZShbXG4gICAgQXNuVHlwZSh7IHR5cGU6IEFzblR5cGVUeXBlcy5DaG9pY2UgfSlcbl0sIEVkUHVibGljS2V5KTtcblxubGV0IEN1cnZlUHJpdmF0ZUtleSA9IGNsYXNzIEN1cnZlUHJpdmF0ZUtleSB7XG59O1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5PY3RldFN0cmluZyB9KSxcbiAgICBKc29uUHJvcCh7IHR5cGU6IEpzb25Qcm9wVHlwZXMuU3RyaW5nLCBjb252ZXJ0ZXI6IEpzb25CYXNlNjRVcmxBcnJheUJ1ZmZlckNvbnZlcnRlciB9KVxuXSwgQ3VydmVQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJkXCIsIHZvaWQgMCk7XG5DdXJ2ZVByaXZhdGVLZXkgPSBfX2RlY29yYXRlKFtcbiAgICBBc25UeXBlKHsgdHlwZTogQXNuVHlwZVR5cGVzLkNob2ljZSB9KVxuXSwgQ3VydmVQcml2YXRlS2V5KTtcblxuY29uc3QgaWRTZWNwMjU2cjEgPSBcIjEuMi44NDAuMTAwNDUuMy4xLjdcIjtcbmNvbnN0IGlkRWxsaXB0aWNDdXJ2ZSA9IFwiMS4zLjEzMi4wXCI7XG5jb25zdCBpZFNlY3AzODRyMSA9IGAke2lkRWxsaXB0aWNDdXJ2ZX0uMzRgO1xuY29uc3QgaWRTZWNwNTIxcjEgPSBgJHtpZEVsbGlwdGljQ3VydmV9LjM1YDtcbmNvbnN0IGlkU2VjcDI1NmsxID0gYCR7aWRFbGxpcHRpY0N1cnZlfS4xMGA7XG5jb25zdCBpZFZlcnNpb25PbmUgPSBcIjEuMy4zNi4zLjMuMi44LjEuMVwiO1xuY29uc3QgaWRCcmFpbnBvb2xQMTYwcjEgPSBgJHtpZFZlcnNpb25PbmV9LjFgO1xuY29uc3QgaWRCcmFpbnBvb2xQMTYwdDEgPSBgJHtpZFZlcnNpb25PbmV9LjJgO1xuY29uc3QgaWRCcmFpbnBvb2xQMTkycjEgPSBgJHtpZFZlcnNpb25PbmV9LjNgO1xuY29uc3QgaWRCcmFpbnBvb2xQMTkydDEgPSBgJHtpZFZlcnNpb25PbmV9LjRgO1xuY29uc3QgaWRCcmFpbnBvb2xQMjI0cjEgPSBgJHtpZFZlcnNpb25PbmV9LjVgO1xuY29uc3QgaWRCcmFpbnBvb2xQMjI0dDEgPSBgJHtpZFZlcnNpb25PbmV9LjZgO1xuY29uc3QgaWRCcmFpbnBvb2xQMjU2cjEgPSBgJHtpZFZlcnNpb25PbmV9LjdgO1xuY29uc3QgaWRCcmFpbnBvb2xQMjU2dDEgPSBgJHtpZFZlcnNpb25PbmV9LjhgO1xuY29uc3QgaWRCcmFpbnBvb2xQMzIwcjEgPSBgJHtpZFZlcnNpb25PbmV9LjlgO1xuY29uc3QgaWRCcmFpbnBvb2xQMzIwdDEgPSBgJHtpZFZlcnNpb25PbmV9LjEwYDtcbmNvbnN0IGlkQnJhaW5wb29sUDM4NHIxID0gYCR7aWRWZXJzaW9uT25lfS4xMWA7XG5jb25zdCBpZEJyYWlucG9vbFAzODR0MSA9IGAke2lkVmVyc2lvbk9uZX0uMTJgO1xuY29uc3QgaWRCcmFpbnBvb2xQNTEycjEgPSBgJHtpZFZlcnNpb25PbmV9LjEzYDtcbmNvbnN0IGlkQnJhaW5wb29sUDUxMnQxID0gYCR7aWRWZXJzaW9uT25lfS4xNGA7XG5jb25zdCBpZFgyNTUxOSA9IFwiMS4zLjEwMS4xMTBcIjtcbmNvbnN0IGlkWDQ0OCA9IFwiMS4zLjEwMS4xMTFcIjtcbmNvbnN0IGlkRWQyNTUxOSA9IFwiMS4zLjEwMS4xMTJcIjtcbmNvbnN0IGlkRWQ0NDggPSBcIjEuMy4xMDEuMTEzXCI7XG5cbnZhciBpbmRleCQxID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBfX3Byb3RvX186IG51bGwsXG4gIEFsZ29yaXRobUlkZW50aWZpZXI6IEFsZ29yaXRobUlkZW50aWZpZXIsXG4gIGdldCBDdXJ2ZVByaXZhdGVLZXkgKCkgeyByZXR1cm4gQ3VydmVQcml2YXRlS2V5OyB9LFxuICBFY0RzYVNpZ25hdHVyZTogRWNEc2FTaWduYXR1cmUsXG4gIEVjUHJpdmF0ZUtleTogRWNQcml2YXRlS2V5LFxuICBnZXQgRWNQdWJsaWNLZXkgKCkgeyByZXR1cm4gRWNQdWJsaWNLZXk7IH0sXG4gIGdldCBFZFByaXZhdGVLZXkgKCkgeyByZXR1cm4gRWRQcml2YXRlS2V5OyB9LFxuICBnZXQgRWRQdWJsaWNLZXkgKCkgeyByZXR1cm4gRWRQdWJsaWNLZXk7IH0sXG4gIGdldCBPYmplY3RJZGVudGlmaWVyICgpIHsgcmV0dXJuIE9iamVjdElkZW50aWZpZXI7IH0sXG4gIE9uZUFzeW1tZXRyaWNLZXk6IE9uZUFzeW1tZXRyaWNLZXksXG4gIFByaXZhdGVLZXlJbmZvOiBQcml2YXRlS2V5SW5mbyxcbiAgUHVibGljS2V5SW5mbzogUHVibGljS2V5SW5mbyxcbiAgUnNhUHJpdmF0ZUtleTogUnNhUHJpdmF0ZUtleSxcbiAgUnNhUHVibGljS2V5OiBSc2FQdWJsaWNLZXksXG4gIGNvbnZlcnRlcnM6IGluZGV4JDIsXG4gIGlkQnJhaW5wb29sUDE2MHIxOiBpZEJyYWlucG9vbFAxNjByMSxcbiAgaWRCcmFpbnBvb2xQMTYwdDE6IGlkQnJhaW5wb29sUDE2MHQxLFxuICBpZEJyYWlucG9vbFAxOTJyMTogaWRCcmFpbnBvb2xQMTkycjEsXG4gIGlkQnJhaW5wb29sUDE5MnQxOiBpZEJyYWlucG9vbFAxOTJ0MSxcbiAgaWRCcmFpbnBvb2xQMjI0cjE6IGlkQnJhaW5wb29sUDIyNHIxLFxuICBpZEJyYWlucG9vbFAyMjR0MTogaWRCcmFpbnBvb2xQMjI0dDEsXG4gIGlkQnJhaW5wb29sUDI1NnIxOiBpZEJyYWlucG9vbFAyNTZyMSxcbiAgaWRCcmFpbnBvb2xQMjU2dDE6IGlkQnJhaW5wb29sUDI1NnQxLFxuICBpZEJyYWlucG9vbFAzMjByMTogaWRCcmFpbnBvb2xQMzIwcjEsXG4gIGlkQnJhaW5wb29sUDMyMHQxOiBpZEJyYWlucG9vbFAzMjB0MSxcbiAgaWRCcmFpbnBvb2xQMzg0cjE6IGlkQnJhaW5wb29sUDM4NHIxLFxuICBpZEJyYWlucG9vbFAzODR0MTogaWRCcmFpbnBvb2xQMzg0dDEsXG4gIGlkQnJhaW5wb29sUDUxMnIxOiBpZEJyYWlucG9vbFA1MTJyMSxcbiAgaWRCcmFpbnBvb2xQNTEydDE6IGlkQnJhaW5wb29sUDUxMnQxLFxuICBpZEVkMjU1MTk6IGlkRWQyNTUxOSxcbiAgaWRFZDQ0ODogaWRFZDQ0OCxcbiAgaWRFbGxpcHRpY0N1cnZlOiBpZEVsbGlwdGljQ3VydmUsXG4gIGlkU2VjcDI1NmsxOiBpZFNlY3AyNTZrMSxcbiAgaWRTZWNwMjU2cjE6IGlkU2VjcDI1NnIxLFxuICBpZFNlY3AzODRyMTogaWRTZWNwMzg0cjEsXG4gIGlkU2VjcDUyMXIxOiBpZFNlY3A1MjFyMSxcbiAgaWRWZXJzaW9uT25lOiBpZFZlcnNpb25PbmUsXG4gIGlkWDI1NTE5OiBpZFgyNTUxOSxcbiAgaWRYNDQ4OiBpZFg0NDhcbn0pO1xuXG5jbGFzcyBFY0N1cnZlcyB7XG4gICAgY29uc3RydWN0b3IoKSB7IH1cbiAgICBzdGF0aWMgcmVnaXN0ZXIoaXRlbSkge1xuICAgICAgICBjb25zdCBvaWQgPSBuZXcgT2JqZWN0SWRlbnRpZmllcigpO1xuICAgICAgICBvaWQudmFsdWUgPSBpdGVtLmlkO1xuICAgICAgICBjb25zdCByYXcgPSBBc25Db252ZXJ0LnNlcmlhbGl6ZShvaWQpO1xuICAgICAgICB0aGlzLml0ZW1zLnB1c2goe1xuICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgIHJhdyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubmFtZXMucHVzaChpdGVtLm5hbWUpO1xuICAgIH1cbiAgICBzdGF0aWMgZmluZChuYW1lT3JJZCkge1xuICAgICAgICBuYW1lT3JJZCA9IG5hbWVPcklkLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLml0ZW1zKSB7XG4gICAgICAgICAgICBpZiAoaXRlbS5uYW1lLnRvVXBwZXJDYXNlKCkgPT09IG5hbWVPcklkIHx8IGl0ZW0uaWQudG9VcHBlckNhc2UoKSA9PT0gbmFtZU9ySWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgc3RhdGljIGdldChuYW1lT3JJZCkge1xuICAgICAgICBjb25zdCByZXMgPSB0aGlzLmZpbmQobmFtZU9ySWQpO1xuICAgICAgICBpZiAoIXJlcykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBFQyBuYW1lZCBjdXJ2ZSAnJHtuYW1lT3JJZH0nYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG59XG5FY0N1cnZlcy5pdGVtcyA9IFtdO1xuRWNDdXJ2ZXMubmFtZXMgPSBbXTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJQLTI1NlwiLCBpZDogaWRTZWNwMjU2cjEsIHNpemU6IDI1NiB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJQLTM4NFwiLCBpZDogaWRTZWNwMzg0cjEsIHNpemU6IDM4NCB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJQLTUyMVwiLCBpZDogaWRTZWNwNTIxcjEsIHNpemU6IDUyMSB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJLLTI1NlwiLCBpZDogaWRTZWNwMjU2azEsIHNpemU6IDI1NiB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJicmFpbnBvb2xQMTYwcjFcIiwgaWQ6IGlkQnJhaW5wb29sUDE2MHIxLCBzaXplOiAxNjAgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiYnJhaW5wb29sUDE2MHQxXCIsIGlkOiBpZEJyYWlucG9vbFAxNjB0MSwgc2l6ZTogMTYwIH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcImJyYWlucG9vbFAxOTJyMVwiLCBpZDogaWRCcmFpbnBvb2xQMTkycjEsIHNpemU6IDE5MiB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJicmFpbnBvb2xQMTkydDFcIiwgaWQ6IGlkQnJhaW5wb29sUDE5MnQxLCBzaXplOiAxOTIgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiYnJhaW5wb29sUDIyNHIxXCIsIGlkOiBpZEJyYWlucG9vbFAyMjRyMSwgc2l6ZTogMjI0IH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcImJyYWlucG9vbFAyMjR0MVwiLCBpZDogaWRCcmFpbnBvb2xQMjI0dDEsIHNpemU6IDIyNCB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJicmFpbnBvb2xQMjU2cjFcIiwgaWQ6IGlkQnJhaW5wb29sUDI1NnIxLCBzaXplOiAyNTYgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiYnJhaW5wb29sUDI1NnQxXCIsIGlkOiBpZEJyYWlucG9vbFAyNTZ0MSwgc2l6ZTogMjU2IH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcImJyYWlucG9vbFAzMjByMVwiLCBpZDogaWRCcmFpbnBvb2xQMzIwcjEsIHNpemU6IDMyMCB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJicmFpbnBvb2xQMzIwdDFcIiwgaWQ6IGlkQnJhaW5wb29sUDMyMHQxLCBzaXplOiAzMjAgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiYnJhaW5wb29sUDM4NHIxXCIsIGlkOiBpZEJyYWlucG9vbFAzODRyMSwgc2l6ZTogMzg0IH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcImJyYWlucG9vbFAzODR0MVwiLCBpZDogaWRCcmFpbnBvb2xQMzg0dDEsIHNpemU6IDM4NCB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJicmFpbnBvb2xQNTEycjFcIiwgaWQ6IGlkQnJhaW5wb29sUDUxMnIxLCBzaXplOiA1MTIgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiYnJhaW5wb29sUDUxMnQxXCIsIGlkOiBpZEJyYWlucG9vbFA1MTJ0MSwgc2l6ZTogNTEyIH0pO1xuXG5jbGFzcyBYMjU1MTlQcm92aWRlciBleHRlbmRzIFByb3ZpZGVyQ3J5cHRvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJYMjU1MTlcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSB7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBbXCJkZXJpdmVLZXlcIiwgXCJkZXJpdmVCaXRzXCJdLFxuICAgICAgICAgICAgcHVibGljS2V5OiBbXSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJwdWJsaWNcIik7XG4gICAgfVxufVxuXG5jbGFzcyBFZDI1NTE5UHJvdmlkZXIgZXh0ZW5kcyBQcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiRWQyNTUxOVwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IHtcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IFtcInNpZ25cIl0sXG4gICAgICAgICAgICBwdWJsaWNLZXk6IFtcInZlcmlmeVwiXSxcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbmNsYXNzIEhtYWNQcm92aWRlciBleHRlbmRzIFByb3ZpZGVyQ3J5cHRvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJITUFDXCI7XG4gICAgICAgIHRoaXMuaGFzaEFsZ29yaXRobXMgPSBbXCJTSEEtMVwiLCBcIlNIQS0yNTZcIiwgXCJTSEEtMzg0XCIsIFwiU0hBLTUxMlwiXTtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXCJzaWduXCIsIFwidmVyaWZ5XCJdO1xuICAgIH1cbiAgICBnZXREZWZhdWx0TGVuZ3RoKGFsZ05hbWUpIHtcbiAgICAgICAgc3dpdGNoIChhbGdOYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtMVwiOlxuICAgICAgICAgICAgY2FzZSBcIlNIQS0yNTZcIjpcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtMzg0XCI6XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTUxMlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiA1MTI7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBhbGdvcml0aG0gbmFtZSAnJHthbGdOYW1lfSdgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja0dlbmVyYXRlS2V5UGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwiaGFzaFwiKTtcbiAgICAgICAgdGhpcy5jaGVja0hhc2hBbGdvcml0aG0oYWxnb3JpdGhtLmhhc2gsIHRoaXMuaGFzaEFsZ29yaXRobXMpO1xuICAgICAgICBpZiAoXCJsZW5ndGhcIiBpbiBhbGdvcml0aG0pIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgYWxnb3JpdGhtLmxlbmd0aCAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJsZW5ndGg6IElzIG5vdCBhIE51bWJlclwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhbGdvcml0aG0ubGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwibGVuZ3RoOiBOdW1iZXIgaXMgb3V0IG9mIHJhbmdlXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGNoZWNrSW1wb3J0UGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwiaGFzaFwiKTtcbiAgICAgICAgdGhpcy5jaGVja0hhc2hBbGdvcml0aG0oYWxnb3JpdGhtLmhhc2gsIHRoaXMuaGFzaEFsZ29yaXRobXMpO1xuICAgIH1cbn1cblxuY2xhc3MgUGJrZGYyUHJvdmlkZXIgZXh0ZW5kcyBQcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiUEJLREYyXCI7XG4gICAgICAgIHRoaXMuaGFzaEFsZ29yaXRobXMgPSBbXCJTSEEtMVwiLCBcIlNIQS0yNTZcIiwgXCJTSEEtMzg0XCIsIFwiU0hBLTUxMlwiXTtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXCJkZXJpdmVCaXRzXCIsIFwiZGVyaXZlS2V5XCJdO1xuICAgIH1cbiAgICBjaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcImhhc2hcIik7XG4gICAgICAgIHRoaXMuY2hlY2tIYXNoQWxnb3JpdGhtKGFsZ29yaXRobS5oYXNoLCB0aGlzLmhhc2hBbGdvcml0aG1zKTtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcInNhbHRcIik7XG4gICAgICAgIGlmICghKGFsZ29yaXRobS5zYWx0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgfHwgQXJyYXlCdWZmZXIuaXNWaWV3KGFsZ29yaXRobS5zYWx0KSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJzYWx0OiBJcyBub3Qgb2YgdHlwZSAnKEFycmF5QnVmZmVyIG9yIEFycmF5QnVmZmVyVmlldyknXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJpdGVyYXRpb25zXCIpO1xuICAgICAgICBpZiAodHlwZW9mIGFsZ29yaXRobS5pdGVyYXRpb25zICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiaXRlcmF0aW9uczogSXMgbm90IGEgTnVtYmVyXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbGdvcml0aG0uaXRlcmF0aW9ucyA8IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRpb25zOiBJcyBsZXNzIHRoYW4gMVwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja0ltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgLi4uYXJncykge1xuICAgICAgICBzdXBlci5jaGVja0ltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgLi4uYXJncyk7XG4gICAgICAgIGlmIChleHRyYWN0YWJsZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiZXh0cmFjdGFibGU6IE11c3QgYmUgJ2ZhbHNlJ1wiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgSGtkZlByb3ZpZGVyIGV4dGVuZHMgUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkhLREZcIjtcbiAgICAgICAgdGhpcy5oYXNoQWxnb3JpdGhtcyA9IFtcIlNIQS0xXCIsIFwiU0hBLTI1NlwiLCBcIlNIQS0zODRcIiwgXCJTSEEtNTEyXCJdO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtcImRlcml2ZUtleVwiLCBcImRlcml2ZUJpdHNcIl07XG4gICAgfVxuICAgIGNoZWNrQWxnb3JpdGhtUGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwiaGFzaFwiKTtcbiAgICAgICAgdGhpcy5jaGVja0hhc2hBbGdvcml0aG0oYWxnb3JpdGhtLmhhc2gsIHRoaXMuaGFzaEFsZ29yaXRobXMpO1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwic2FsdFwiKTtcbiAgICAgICAgaWYgKCFCdWZmZXJTb3VyY2VDb252ZXJ0ZXIuaXNCdWZmZXJTb3VyY2UoYWxnb3JpdGhtLnNhbHQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwic2FsdDogSXMgbm90IG9mIHR5cGUgJyhBcnJheUJ1ZmZlciBvciBBcnJheUJ1ZmZlclZpZXcpJ1wiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwiaW5mb1wiKTtcbiAgICAgICAgaWYgKCFCdWZmZXJTb3VyY2VDb252ZXJ0ZXIuaXNCdWZmZXJTb3VyY2UoYWxnb3JpdGhtLmluZm8pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwic2FsdDogSXMgbm90IG9mIHR5cGUgJyhBcnJheUJ1ZmZlciBvciBBcnJheUJ1ZmZlclZpZXcpJ1wiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja0ltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgLi4uYXJncykge1xuICAgICAgICBzdXBlci5jaGVja0ltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgLi4uYXJncyk7XG4gICAgICAgIGlmIChleHRyYWN0YWJsZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiZXh0cmFjdGFibGU6IE11c3QgYmUgJ2ZhbHNlJ1wiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgU2hha2VQcm92aWRlciBleHRlbmRzIFByb3ZpZGVyQ3J5cHRvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXTtcbiAgICAgICAgdGhpcy5kZWZhdWx0TGVuZ3RoID0gMDtcbiAgICB9XG4gICAgZGlnZXN0KC4uLmFyZ3MpIHtcbiAgICAgICAgYXJnc1swXSA9IHsgbGVuZ3RoOiB0aGlzLmRlZmF1bHRMZW5ndGgsIC4uLmFyZ3NbMF0gfTtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmRpZ2VzdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gICAgY2hlY2tEaWdlc3QoYWxnb3JpdGhtLCBkYXRhKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrRGlnZXN0KGFsZ29yaXRobSwgZGF0YSk7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IGFsZ29yaXRobS5sZW5ndGggfHwgMDtcbiAgICAgICAgaWYgKHR5cGVvZiBsZW5ndGggIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJsZW5ndGg6IElzIG5vdCBhIE51bWJlclwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGVuZ3RoIDwgMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImxlbmd0aDogSXMgbmVnYXRpdmVcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIFNoYWtlMTI4UHJvdmlkZXIgZXh0ZW5kcyBTaGFrZVByb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJzaGFrZTEyOFwiO1xuICAgICAgICB0aGlzLmRlZmF1bHRMZW5ndGggPSAxNjtcbiAgICB9XG59XG5cbmNsYXNzIFNoYWtlMjU2UHJvdmlkZXIgZXh0ZW5kcyBTaGFrZVByb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJzaGFrZTI1NlwiO1xuICAgICAgICB0aGlzLmRlZmF1bHRMZW5ndGggPSAzMjtcbiAgICB9XG59XG5cbmNsYXNzIENyeXB0byB7XG4gICAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgICAgICByZXR1cm4gXCJDcnlwdG9cIjtcbiAgICB9XG4gICAgcmFuZG9tVVVJRCgpIHtcbiAgICAgICAgY29uc3QgYiA9IHRoaXMuZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KDE2KSk7XG4gICAgICAgIGJbNl0gPSAoYls2XSAmIDB4MGYpIHwgMHg0MDtcbiAgICAgICAgYls4XSA9IChiWzhdICYgMHgzZikgfCAweDgwO1xuICAgICAgICBjb25zdCB1dWlkID0gQ29udmVydC5Ub0hleChiKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICByZXR1cm4gYCR7dXVpZC5zdWJzdHJpbmcoMCwgOCl9LSR7dXVpZC5zdWJzdHJpbmcoOCwgMTIpfS0ke3V1aWQuc3Vic3RyaW5nKDEyLCAxNil9LSR7dXVpZC5zdWJzdHJpbmcoMTYsIDIwKX0tJHt1dWlkLnN1YnN0cmluZygyMCl9YDtcbiAgICB9XG59XG5cbmNsYXNzIFByb3ZpZGVyU3RvcmFnZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuaXRlbXMgPSB7fTtcbiAgICB9XG4gICAgZ2V0KGFsZ29yaXRobU5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXNbYWxnb3JpdGhtTmFtZS50b0xvd2VyQ2FzZSgpXSB8fCBudWxsO1xuICAgIH1cbiAgICBzZXQocHJvdmlkZXIpIHtcbiAgICAgICAgdGhpcy5pdGVtc1twcm92aWRlci5uYW1lLnRvTG93ZXJDYXNlKCldID0gcHJvdmlkZXI7XG4gICAgfVxuICAgIHJlbW92ZUF0KGFsZ29yaXRobU5hbWUpIHtcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLmdldChhbGdvcml0aG1OYW1lLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICBpZiAocHJvdmlkZXIpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLml0ZW1zW2FsZ29yaXRobU5hbWVdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm92aWRlcjtcbiAgICB9XG4gICAgaGFzKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5nZXQobmFtZSk7XG4gICAgfVxuICAgIGdldCBsZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLml0ZW1zKS5sZW5ndGg7XG4gICAgfVxuICAgIGdldCBhbGdvcml0aG1zKCkge1xuICAgICAgICBjb25zdCBhbGdvcml0aG1zID0gW107XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuaXRlbXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5pdGVtc1trZXldO1xuICAgICAgICAgICAgYWxnb3JpdGhtcy5wdXNoKHByb3ZpZGVyLm5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhbGdvcml0aG1zLnNvcnQoKTtcbiAgICB9XG59XG5cbmNvbnN0IGtleUZvcm1hdE1hcCA9IHtcbiAgICBcImp3a1wiOiBbXCJwcml2YXRlXCIsIFwicHVibGljXCIsIFwic2VjcmV0XCJdLFxuICAgIFwicGtjczhcIjogW1wicHJpdmF0ZVwiXSxcbiAgICBcInNwa2lcIjogW1wicHVibGljXCJdLFxuICAgIFwicmF3XCI6IFtcInNlY3JldFwiLCBcInB1YmxpY1wiXVxufTtcbmNvbnN0IHNvdXJjZUJ1ZmZlcktleUZvcm1hdHMgPSBbXCJwa2NzOFwiLCBcInNwa2lcIiwgXCJyYXdcIl07XG5jbGFzcyBTdWJ0bGVDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnByb3ZpZGVycyA9IG5ldyBQcm92aWRlclN0b3JhZ2UoKTtcbiAgICB9XG4gICAgc3RhdGljIGlzSGFzaGVkQWxnb3JpdGhtKGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIGRhdGFcbiAgICAgICAgICAgICYmIHR5cGVvZiBkYXRhID09PSBcIm9iamVjdFwiXG4gICAgICAgICAgICAmJiBcIm5hbWVcIiBpbiBkYXRhXG4gICAgICAgICAgICAmJiBcImhhc2hcIiBpbiBkYXRhXG4gICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgIDogZmFsc2U7XG4gICAgfVxuICAgIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICAgICAgcmV0dXJuIFwiU3VidGxlQ3J5cHRvXCI7XG4gICAgfVxuICAgIGFzeW5jIGRpZ2VzdCguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZEFyZ3VtZW50cyhhcmdzLCAyLCBcImRpZ2VzdFwiKTtcbiAgICAgICAgY29uc3QgW2FsZ29yaXRobSwgZGF0YSwgLi4ucGFyYW1zXSA9IGFyZ3M7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkQWxnb3JpdGhtID0gdGhpcy5wcmVwYXJlQWxnb3JpdGhtKGFsZ29yaXRobSk7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkRGF0YSA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKGRhdGEpO1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuZ2V0UHJvdmlkZXIocHJlcGFyZWRBbGdvcml0aG0ubmFtZSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb3ZpZGVyLmRpZ2VzdChwcmVwYXJlZEFsZ29yaXRobSwgcHJlcGFyZWREYXRhLCAuLi5wYXJhbXMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBhc3luYyBnZW5lcmF0ZUtleSguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZEFyZ3VtZW50cyhhcmdzLCAzLCBcImdlbmVyYXRlS2V5XCIpO1xuICAgICAgICBjb25zdCBbYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCAuLi5wYXJhbXNdID0gYXJncztcbiAgICAgICAgY29uc3QgcHJlcGFyZWRBbGdvcml0aG0gPSB0aGlzLnByZXBhcmVBbGdvcml0aG0oYWxnb3JpdGhtKTtcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLmdldFByb3ZpZGVyKHByZXBhcmVkQWxnb3JpdGhtLm5hbWUpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm92aWRlci5nZW5lcmF0ZUtleSh7IC4uLnByZXBhcmVkQWxnb3JpdGhtLCBuYW1lOiBwcm92aWRlci5uYW1lIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIC4uLnBhcmFtcyk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGFzeW5jIHNpZ24oLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRBcmd1bWVudHMoYXJncywgMywgXCJzaWduXCIpO1xuICAgICAgICBjb25zdCBbYWxnb3JpdGhtLCBrZXksIGRhdGEsIC4uLnBhcmFtc10gPSBhcmdzO1xuICAgICAgICB0aGlzLmNoZWNrQ3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkQWxnb3JpdGhtID0gdGhpcy5wcmVwYXJlQWxnb3JpdGhtKGFsZ29yaXRobSk7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkRGF0YSA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKGRhdGEpO1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuZ2V0UHJvdmlkZXIocHJlcGFyZWRBbGdvcml0aG0ubmFtZSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb3ZpZGVyLnNpZ24oeyAuLi5wcmVwYXJlZEFsZ29yaXRobSwgbmFtZTogcHJvdmlkZXIubmFtZSB9LCBrZXksIHByZXBhcmVkRGF0YSwgLi4ucGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgYXN5bmMgdmVyaWZ5KC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkQXJndW1lbnRzKGFyZ3MsIDQsIFwidmVyaWZ5XCIpO1xuICAgICAgICBjb25zdCBbYWxnb3JpdGhtLCBrZXksIHNpZ25hdHVyZSwgZGF0YSwgLi4ucGFyYW1zXSA9IGFyZ3M7XG4gICAgICAgIHRoaXMuY2hlY2tDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgY29uc3QgcHJlcGFyZWRBbGdvcml0aG0gPSB0aGlzLnByZXBhcmVBbGdvcml0aG0oYWxnb3JpdGhtKTtcbiAgICAgICAgY29uc3QgcHJlcGFyZWREYXRhID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoZGF0YSk7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkU2lnbmF0dXJlID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoc2lnbmF0dXJlKTtcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLmdldFByb3ZpZGVyKHByZXBhcmVkQWxnb3JpdGhtLm5hbWUpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm92aWRlci52ZXJpZnkoeyAuLi5wcmVwYXJlZEFsZ29yaXRobSwgbmFtZTogcHJvdmlkZXIubmFtZSB9LCBrZXksIHByZXBhcmVkU2lnbmF0dXJlLCBwcmVwYXJlZERhdGEsIC4uLnBhcmFtcyk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGFzeW5jIGVuY3J5cHQoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRBcmd1bWVudHMoYXJncywgMywgXCJlbmNyeXB0XCIpO1xuICAgICAgICBjb25zdCBbYWxnb3JpdGhtLCBrZXksIGRhdGEsIC4uLnBhcmFtc10gPSBhcmdzO1xuICAgICAgICB0aGlzLmNoZWNrQ3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkQWxnb3JpdGhtID0gdGhpcy5wcmVwYXJlQWxnb3JpdGhtKGFsZ29yaXRobSk7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkRGF0YSA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKGRhdGEpO1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuZ2V0UHJvdmlkZXIocHJlcGFyZWRBbGdvcml0aG0ubmFtZSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb3ZpZGVyLmVuY3J5cHQoeyAuLi5wcmVwYXJlZEFsZ29yaXRobSwgbmFtZTogcHJvdmlkZXIubmFtZSB9LCBrZXksIHByZXBhcmVkRGF0YSwgeyBrZXlVc2FnZTogdHJ1ZSB9LCAuLi5wYXJhbXMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBhc3luYyBkZWNyeXB0KC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkQXJndW1lbnRzKGFyZ3MsIDMsIFwiZGVjcnlwdFwiKTtcbiAgICAgICAgY29uc3QgW2FsZ29yaXRobSwga2V5LCBkYXRhLCAuLi5wYXJhbXNdID0gYXJncztcbiAgICAgICAgdGhpcy5jaGVja0NyeXB0b0tleShrZXkpO1xuICAgICAgICBjb25zdCBwcmVwYXJlZEFsZ29yaXRobSA9IHRoaXMucHJlcGFyZUFsZ29yaXRobShhbGdvcml0aG0pO1xuICAgICAgICBjb25zdCBwcmVwYXJlZERhdGEgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihkYXRhKTtcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLmdldFByb3ZpZGVyKHByZXBhcmVkQWxnb3JpdGhtLm5hbWUpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm92aWRlci5kZWNyeXB0KHsgLi4ucHJlcGFyZWRBbGdvcml0aG0sIG5hbWU6IHByb3ZpZGVyLm5hbWUgfSwga2V5LCBwcmVwYXJlZERhdGEsIHsga2V5VXNhZ2U6IHRydWUgfSwgLi4ucGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgYXN5bmMgZGVyaXZlQml0cyguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZEFyZ3VtZW50cyhhcmdzLCAzLCBcImRlcml2ZUJpdHNcIik7XG4gICAgICAgIGNvbnN0IFthbGdvcml0aG0sIGJhc2VLZXksIGxlbmd0aCwgLi4ucGFyYW1zXSA9IGFyZ3M7XG4gICAgICAgIHRoaXMuY2hlY2tDcnlwdG9LZXkoYmFzZUtleSk7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkQWxnb3JpdGhtID0gdGhpcy5wcmVwYXJlQWxnb3JpdGhtKGFsZ29yaXRobSk7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5nZXRQcm92aWRlcihwcmVwYXJlZEFsZ29yaXRobS5uYW1lKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJvdmlkZXIuZGVyaXZlQml0cyh7IC4uLnByZXBhcmVkQWxnb3JpdGhtLCBuYW1lOiBwcm92aWRlci5uYW1lIH0sIGJhc2VLZXksIGxlbmd0aCwgeyBrZXlVc2FnZTogdHJ1ZSB9LCAuLi5wYXJhbXMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBhc3luYyBkZXJpdmVLZXkoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRBcmd1bWVudHMoYXJncywgNSwgXCJkZXJpdmVLZXlcIik7XG4gICAgICAgIGNvbnN0IFthbGdvcml0aG0sIGJhc2VLZXksIGRlcml2ZWRLZXlUeXBlLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCAuLi5wYXJhbXNdID0gYXJncztcbiAgICAgICAgY29uc3QgcHJlcGFyZWREZXJpdmVkS2V5VHlwZSA9IHRoaXMucHJlcGFyZUFsZ29yaXRobShkZXJpdmVkS2V5VHlwZSk7XG4gICAgICAgIGNvbnN0IGltcG9ydFByb3ZpZGVyID0gdGhpcy5nZXRQcm92aWRlcihwcmVwYXJlZERlcml2ZWRLZXlUeXBlLm5hbWUpO1xuICAgICAgICBpbXBvcnRQcm92aWRlci5jaGVja0Rlcml2ZWRLZXlQYXJhbXMocHJlcGFyZWREZXJpdmVkS2V5VHlwZSk7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkQWxnb3JpdGhtID0gdGhpcy5wcmVwYXJlQWxnb3JpdGhtKGFsZ29yaXRobSk7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5nZXRQcm92aWRlcihwcmVwYXJlZEFsZ29yaXRobS5uYW1lKTtcbiAgICAgICAgcHJvdmlkZXIuY2hlY2tDcnlwdG9LZXkoYmFzZUtleSwgXCJkZXJpdmVLZXlcIik7XG4gICAgICAgIGNvbnN0IGRlcml2ZWRCaXRzID0gYXdhaXQgcHJvdmlkZXIuZGVyaXZlQml0cyh7IC4uLnByZXBhcmVkQWxnb3JpdGhtLCBuYW1lOiBwcm92aWRlci5uYW1lIH0sIGJhc2VLZXksIGRlcml2ZWRLZXlUeXBlLmxlbmd0aCB8fCA1MTIsIHsga2V5VXNhZ2U6IGZhbHNlIH0sIC4uLnBhcmFtcyk7XG4gICAgICAgIHJldHVybiB0aGlzLmltcG9ydEtleShcInJhd1wiLCBkZXJpdmVkQml0cywgZGVyaXZlZEtleVR5cGUsIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIC4uLnBhcmFtcyk7XG4gICAgfVxuICAgIGFzeW5jIGV4cG9ydEtleSguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZEFyZ3VtZW50cyhhcmdzLCAyLCBcImV4cG9ydEtleVwiKTtcbiAgICAgICAgY29uc3QgW2Zvcm1hdCwga2V5LCAuLi5wYXJhbXNdID0gYXJncztcbiAgICAgICAgdGhpcy5jaGVja0NyeXB0b0tleShrZXkpO1xuICAgICAgICBpZiAoIWtleUZvcm1hdE1hcFtmb3JtYXRdKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBrZXlGb3JtYXQgYXJndW1lbnRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFrZXlGb3JtYXRNYXBbZm9ybWF0XS5pbmNsdWRlcyhrZXkudHlwZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oXCJUaGUga2V5IGlzIG5vdCBvZiB0aGUgZXhwZWN0ZWQgdHlwZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuZ2V0UHJvdmlkZXIoa2V5LmFsZ29yaXRobS5uYW1lKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJvdmlkZXIuZXhwb3J0S2V5KGZvcm1hdCwga2V5LCAuLi5wYXJhbXMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBhc3luYyBpbXBvcnRLZXkoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRBcmd1bWVudHMoYXJncywgNSwgXCJpbXBvcnRLZXlcIik7XG4gICAgICAgIGNvbnN0IFtmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgLi4ucGFyYW1zXSA9IGFyZ3M7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkQWxnb3JpdGhtID0gdGhpcy5wcmVwYXJlQWxnb3JpdGhtKGFsZ29yaXRobSk7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5nZXRQcm92aWRlcihwcmVwYXJlZEFsZ29yaXRobS5uYW1lKTtcbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gXCJqd2tcIikge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBrZXlEYXRhICE9PSBcIm9iamVjdFwiIHx8ICFrZXlEYXRhLmt0eSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJLZXkgZGF0YSBtdXN0IGJlIGFuIG9iamVjdCBmb3IgSldLIGltcG9ydFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzb3VyY2VCdWZmZXJLZXlGb3JtYXRzLmluY2x1ZGVzKGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGlmICghQnVmZmVyU291cmNlQ29udmVydGVyLmlzQnVmZmVyU291cmNlKGtleURhdGEpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIktleSBkYXRhIG11c3QgYmUgYSBCdWZmZXJTb3VyY2UgZm9yIG5vbi1KV0sgZm9ybWF0c1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJUaGUgcHJvdmlkZWQgdmFsdWUgaXMgbm90IG9mIHR5cGUgJyhBcnJheUJ1ZmZlciBvciBBcnJheUJ1ZmZlclZpZXcgb3IgSnNvbldlYktleSknXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm92aWRlci5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB7IC4uLnByZXBhcmVkQWxnb3JpdGhtLCBuYW1lOiBwcm92aWRlci5uYW1lIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIC4uLnBhcmFtcyk7XG4gICAgfVxuICAgIGFzeW5jIHdyYXBLZXkoZm9ybWF0LCBrZXksIHdyYXBwaW5nS2V5LCB3cmFwQWxnb3JpdGhtLCAuLi5hcmdzKSB7XG4gICAgICAgIGxldCBrZXlEYXRhID0gYXdhaXQgdGhpcy5leHBvcnRLZXkoZm9ybWF0LCBrZXksIC4uLmFyZ3MpO1xuICAgICAgICBpZiAoZm9ybWF0ID09PSBcImp3a1wiKSB7XG4gICAgICAgICAgICBjb25zdCBqc29uID0gSlNPTi5zdHJpbmdpZnkoa2V5RGF0YSk7XG4gICAgICAgICAgICBrZXlEYXRhID0gQ29udmVydC5Gcm9tVXRmOFN0cmluZyhqc29uKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcmVwYXJlZEFsZ29yaXRobSA9IHRoaXMucHJlcGFyZUFsZ29yaXRobSh3cmFwQWxnb3JpdGhtKTtcbiAgICAgICAgY29uc3QgcHJlcGFyZWREYXRhID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoa2V5RGF0YSk7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5nZXRQcm92aWRlcihwcmVwYXJlZEFsZ29yaXRobS5uYW1lKTtcbiAgICAgICAgcmV0dXJuIHByb3ZpZGVyLmVuY3J5cHQoeyAuLi5wcmVwYXJlZEFsZ29yaXRobSwgbmFtZTogcHJvdmlkZXIubmFtZSB9LCB3cmFwcGluZ0tleSwgcHJlcGFyZWREYXRhLCB7IGtleVVzYWdlOiBmYWxzZSB9LCAuLi5hcmdzKTtcbiAgICB9XG4gICAgYXN5bmMgdW53cmFwS2V5KGZvcm1hdCwgd3JhcHBlZEtleSwgdW53cmFwcGluZ0tleSwgdW53cmFwQWxnb3JpdGhtLCB1bndyYXBwZWRLZXlBbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgcHJlcGFyZWRBbGdvcml0aG0gPSB0aGlzLnByZXBhcmVBbGdvcml0aG0odW53cmFwQWxnb3JpdGhtKTtcbiAgICAgICAgY29uc3QgcHJlcGFyZWREYXRhID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIod3JhcHBlZEtleSk7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5nZXRQcm92aWRlcihwcmVwYXJlZEFsZ29yaXRobS5uYW1lKTtcbiAgICAgICAgbGV0IGtleURhdGEgPSBhd2FpdCBwcm92aWRlci5kZWNyeXB0KHsgLi4ucHJlcGFyZWRBbGdvcml0aG0sIG5hbWU6IHByb3ZpZGVyLm5hbWUgfSwgdW53cmFwcGluZ0tleSwgcHJlcGFyZWREYXRhLCB7IGtleVVzYWdlOiBmYWxzZSB9LCAuLi5hcmdzKTtcbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gXCJqd2tcIikge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBrZXlEYXRhID0gSlNPTi5wYXJzZShDb252ZXJ0LlRvVXRmOFN0cmluZyhrZXlEYXRhKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IFR5cGVFcnJvcihcIndyYXBwZWRLZXk6IElzIG5vdCBhIEpTT05cIik7XG4gICAgICAgICAgICAgICAgZXJyb3IuaW50ZXJuYWwgPSBlO1xuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIHVud3JhcHBlZEtleUFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgLi4uYXJncyk7XG4gICAgfVxuICAgIGNoZWNrUmVxdWlyZWRBcmd1bWVudHMoYXJncywgc2l6ZSwgbWV0aG9kTmFtZSkge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPCBzaXplKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBGYWlsZWQgdG8gZXhlY3V0ZSAnJHttZXRob2ROYW1lfScgb24gJ1N1YnRsZUNyeXB0byc6ICR7c2l6ZX0gYXJndW1lbnRzIHJlcXVpcmVkLCBidXQgb25seSAke2FyZ3MubGVuZ3RofSBwcmVzZW50YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJlcGFyZUFsZ29yaXRobShhbGdvcml0aG0pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBhbGdvcml0aG0gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbmFtZTogYWxnb3JpdGhtLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoU3VidGxlQ3J5cHRvLmlzSGFzaGVkQWxnb3JpdGhtKGFsZ29yaXRobSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHByZXBhcmVkQWxnb3JpdGhtID0geyAuLi5hbGdvcml0aG0gfTtcbiAgICAgICAgICAgIHByZXBhcmVkQWxnb3JpdGhtLmhhc2ggPSB0aGlzLnByZXBhcmVBbGdvcml0aG0oYWxnb3JpdGhtLmhhc2gpO1xuICAgICAgICAgICAgcmV0dXJuIHByZXBhcmVkQWxnb3JpdGhtO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IC4uLmFsZ29yaXRobSB9O1xuICAgIH1cbiAgICBnZXRQcm92aWRlcihuYW1lKSB7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5wcm92aWRlcnMuZ2V0KG5hbWUpO1xuICAgICAgICBpZiAoIXByb3ZpZGVyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQWxnb3JpdGhtRXJyb3IoXCJVbnJlY29nbml6ZWQgbmFtZVwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvdmlkZXI7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSkge1xuICAgICAgICBpZiAoIShrZXkgaW5zdGFuY2VvZiBDcnlwdG9LZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBLZXkgaXMgbm90IG9mIHR5cGUgJ0NyeXB0b0tleSdgKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxudmFyIGluZGV4ID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBfX3Byb3RvX186IG51bGwsXG4gIGNvbnZlcnRlcnM6IGluZGV4JDNcbn0pO1xuXG5jb25zdCBSRVFVSVJFRF9GSUVMRFMgPSBbXCJjcnZcIiwgXCJlXCIsIFwia1wiLCBcImt0eVwiLCBcIm5cIiwgXCJ4XCIsIFwieVwiXTtcbmNsYXNzIEp3a1V0aWxzIHtcbiAgICBzdGF0aWMgYXN5bmMgdGh1bWJwcmludChoYXNoLCBqd2ssIGNyeXB0bykge1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5mb3JtYXQoandrLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIGNyeXB0by5zdWJ0bGUuZGlnZXN0KGhhc2gsIENvbnZlcnQuRnJvbUJpbmFyeShKU09OLnN0cmluZ2lmeShkYXRhKSkpO1xuICAgIH1cbiAgICBzdGF0aWMgZm9ybWF0KGp3aywgcmVtb3ZlID0gZmFsc2UpIHtcbiAgICAgICAgbGV0IHJlcyA9IE9iamVjdC5lbnRyaWVzKGp3ayk7XG4gICAgICAgIGlmIChyZW1vdmUpIHtcbiAgICAgICAgICAgIHJlcyA9IHJlcy5maWx0ZXIobyA9PiBSRVFVSVJFRF9GSUVMRFMuaW5jbHVkZXMob1swXSkpO1xuICAgICAgICB9XG4gICAgICAgIHJlcyA9IHJlcy5zb3J0KChba2V5QV0sIFtrZXlCXSkgPT4ga2V5QSA+IGtleUIgPyAxIDoga2V5QSA8IGtleUIgPyAtMSA6IDApO1xuICAgICAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKHJlcyk7XG4gICAgfVxufVxuXG5leHBvcnQgeyBBZXNDYmNQcm92aWRlciwgQWVzQ21hY1Byb3ZpZGVyLCBBZXNDdHJQcm92aWRlciwgQWVzRWNiUHJvdmlkZXIsIEFlc0djbVByb3ZpZGVyLCBBZXNLd1Byb3ZpZGVyLCBBZXNQcm92aWRlciwgQWxnb3JpdGhtRXJyb3IsIENyeXB0bywgQ3J5cHRvRXJyb3IsIENyeXB0b0tleSwgRGVzUHJvdmlkZXIsIEVjQ3VydmVzLCBFY1V0aWxzLCBFY2RoRXNQcm92aWRlciwgRWNkaFByb3ZpZGVyLCBFY2RzYVByb3ZpZGVyLCBFZDI1NTE5UHJvdmlkZXIsIEVkRHNhUHJvdmlkZXIsIEVsbGlwdGljUHJvdmlkZXIsIEhrZGZQcm92aWRlciwgSG1hY1Byb3ZpZGVyLCBKd2tVdGlscywgT3BlcmF0aW9uRXJyb3IsIFBia2RmMlByb3ZpZGVyLCBQZW1Db252ZXJ0ZXIsIFByb3ZpZGVyQ3J5cHRvLCBQcm92aWRlclN0b3JhZ2UsIFJlcXVpcmVkUHJvcGVydHlFcnJvciwgUnNhT2FlcFByb3ZpZGVyLCBSc2FQcm92aWRlciwgUnNhUHNzUHJvdmlkZXIsIFJzYVNzYVByb3ZpZGVyLCBTaGFrZTEyOFByb3ZpZGVyLCBTaGFrZTI1NlByb3ZpZGVyLCBTaGFrZVByb3ZpZGVyLCBTdWJ0bGVDcnlwdG8sIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IsIFgyNTUxOVByb3ZpZGVyLCBpbmRleCQxIGFzIGFzbjEsIGlzSldLLCBpbmRleCBhcyBqc29uIH07XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmV4cG9ydHMuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcbmV4cG9ydHMudG9CeXRlQXJyYXkgPSB0b0J5dGVBcnJheVxuZXhwb3J0cy5mcm9tQnl0ZUFycmF5ID0gZnJvbUJ5dGVBcnJheVxuXG52YXIgbG9va3VwID0gW11cbnZhciByZXZMb29rdXAgPSBbXVxudmFyIEFyciA9IHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJyA/IFVpbnQ4QXJyYXkgOiBBcnJheVxuXG52YXIgY29kZSA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJ1xuZm9yICh2YXIgaSA9IDAsIGxlbiA9IGNvZGUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgbG9va3VwW2ldID0gY29kZVtpXVxuICByZXZMb29rdXBbY29kZS5jaGFyQ29kZUF0KGkpXSA9IGlcbn1cblxuLy8gU3VwcG9ydCBkZWNvZGluZyBVUkwtc2FmZSBiYXNlNjQgc3RyaW5ncywgYXMgTm9kZS5qcyBkb2VzLlxuLy8gU2VlOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CYXNlNjQjVVJMX2FwcGxpY2F0aW9uc1xucmV2TG9va3VwWyctJy5jaGFyQ29kZUF0KDApXSA9IDYyXG5yZXZMb29rdXBbJ18nLmNoYXJDb2RlQXQoMCldID0gNjNcblxuZnVuY3Rpb24gZ2V0TGVucyAoYjY0KSB7XG4gIHZhciBsZW4gPSBiNjQubGVuZ3RoXG5cbiAgaWYgKGxlbiAlIDQgPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0JylcbiAgfVxuXG4gIC8vIFRyaW0gb2ZmIGV4dHJhIGJ5dGVzIGFmdGVyIHBsYWNlaG9sZGVyIGJ5dGVzIGFyZSBmb3VuZFxuICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9iZWF0Z2FtbWl0L2Jhc2U2NC1qcy9pc3N1ZXMvNDJcbiAgdmFyIHZhbGlkTGVuID0gYjY0LmluZGV4T2YoJz0nKVxuICBpZiAodmFsaWRMZW4gPT09IC0xKSB2YWxpZExlbiA9IGxlblxuXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSB2YWxpZExlbiA9PT0gbGVuXG4gICAgPyAwXG4gICAgOiA0IC0gKHZhbGlkTGVuICUgNClcblxuICByZXR1cm4gW3ZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW5dXG59XG5cbi8vIGJhc2U2NCBpcyA0LzMgKyB1cCB0byB0d28gY2hhcmFjdGVycyBvZiB0aGUgb3JpZ2luYWwgZGF0YVxuZnVuY3Rpb24gYnl0ZUxlbmd0aCAoYjY0KSB7XG4gIHZhciBsZW5zID0gZ2V0TGVucyhiNjQpXG4gIHZhciB2YWxpZExlbiA9IGxlbnNbMF1cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IGxlbnNbMV1cbiAgcmV0dXJuICgodmFsaWRMZW4gKyBwbGFjZUhvbGRlcnNMZW4pICogMyAvIDQpIC0gcGxhY2VIb2xkZXJzTGVuXG59XG5cbmZ1bmN0aW9uIF9ieXRlTGVuZ3RoIChiNjQsIHZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW4pIHtcbiAgcmV0dXJuICgodmFsaWRMZW4gKyBwbGFjZUhvbGRlcnNMZW4pICogMyAvIDQpIC0gcGxhY2VIb2xkZXJzTGVuXG59XG5cbmZ1bmN0aW9uIHRvQnl0ZUFycmF5IChiNjQpIHtcbiAgdmFyIHRtcFxuICB2YXIgbGVucyA9IGdldExlbnMoYjY0KVxuICB2YXIgdmFsaWRMZW4gPSBsZW5zWzBdXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSBsZW5zWzFdXG5cbiAgdmFyIGFyciA9IG5ldyBBcnIoX2J5dGVMZW5ndGgoYjY0LCB2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuKSlcblxuICB2YXIgY3VyQnl0ZSA9IDBcblxuICAvLyBpZiB0aGVyZSBhcmUgcGxhY2Vob2xkZXJzLCBvbmx5IGdldCB1cCB0byB0aGUgbGFzdCBjb21wbGV0ZSA0IGNoYXJzXG4gIHZhciBsZW4gPSBwbGFjZUhvbGRlcnNMZW4gPiAwXG4gICAgPyB2YWxpZExlbiAtIDRcbiAgICA6IHZhbGlkTGVuXG5cbiAgdmFyIGlcbiAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDE4KSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgMTIpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDIpXSA8PCA2KSB8XG4gICAgICByZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDMpXVxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiAxNikgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgaWYgKHBsYWNlSG9sZGVyc0xlbiA9PT0gMikge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAyKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPj4gNClcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIGlmIChwbGFjZUhvbGRlcnNMZW4gPT09IDEpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMTApIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA8PCA0KSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPj4gMilcbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gOCkgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICByZXR1cm4gYXJyXG59XG5cbmZ1bmN0aW9uIHRyaXBsZXRUb0Jhc2U2NCAobnVtKSB7XG4gIHJldHVybiBsb29rdXBbbnVtID4+IDE4ICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gPj4gMTIgJiAweDNGXSArXG4gICAgbG9va3VwW251bSA+PiA2ICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gJiAweDNGXVxufVxuXG5mdW5jdGlvbiBlbmNvZGVDaHVuayAodWludDgsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHRtcFxuICB2YXIgb3V0cHV0ID0gW11cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IDMpIHtcbiAgICB0bXAgPVxuICAgICAgKCh1aW50OFtpXSA8PCAxNikgJiAweEZGMDAwMCkgK1xuICAgICAgKCh1aW50OFtpICsgMV0gPDwgOCkgJiAweEZGMDApICtcbiAgICAgICh1aW50OFtpICsgMl0gJiAweEZGKVxuICAgIG91dHB1dC5wdXNoKHRyaXBsZXRUb0Jhc2U2NCh0bXApKVxuICB9XG4gIHJldHVybiBvdXRwdXQuam9pbignJylcbn1cblxuZnVuY3Rpb24gZnJvbUJ5dGVBcnJheSAodWludDgpIHtcbiAgdmFyIHRtcFxuICB2YXIgbGVuID0gdWludDgubGVuZ3RoXG4gIHZhciBleHRyYUJ5dGVzID0gbGVuICUgMyAvLyBpZiB3ZSBoYXZlIDEgYnl0ZSBsZWZ0LCBwYWQgMiBieXRlc1xuICB2YXIgcGFydHMgPSBbXVxuICB2YXIgbWF4Q2h1bmtMZW5ndGggPSAxNjM4MyAvLyBtdXN0IGJlIG11bHRpcGxlIG9mIDNcblxuICAvLyBnbyB0aHJvdWdoIHRoZSBhcnJheSBldmVyeSB0aHJlZSBieXRlcywgd2UnbGwgZGVhbCB3aXRoIHRyYWlsaW5nIHN0dWZmIGxhdGVyXG4gIGZvciAodmFyIGkgPSAwLCBsZW4yID0gbGVuIC0gZXh0cmFCeXRlczsgaSA8IGxlbjI7IGkgKz0gbWF4Q2h1bmtMZW5ndGgpIHtcbiAgICBwYXJ0cy5wdXNoKGVuY29kZUNodW5rKHVpbnQ4LCBpLCAoaSArIG1heENodW5rTGVuZ3RoKSA+IGxlbjIgPyBsZW4yIDogKGkgKyBtYXhDaHVua0xlbmd0aCkpKVxuICB9XG5cbiAgLy8gcGFkIHRoZSBlbmQgd2l0aCB6ZXJvcywgYnV0IG1ha2Ugc3VyZSB0byBub3QgZm9yZ2V0IHRoZSBleHRyYSBieXRlc1xuICBpZiAoZXh0cmFCeXRlcyA9PT0gMSkge1xuICAgIHRtcCA9IHVpbnQ4W2xlbiAtIDFdXG4gICAgcGFydHMucHVzaChcbiAgICAgIGxvb2t1cFt0bXAgPj4gMl0gK1xuICAgICAgbG9va3VwWyh0bXAgPDwgNCkgJiAweDNGXSArXG4gICAgICAnPT0nXG4gICAgKVxuICB9IGVsc2UgaWYgKGV4dHJhQnl0ZXMgPT09IDIpIHtcbiAgICB0bXAgPSAodWludDhbbGVuIC0gMl0gPDwgOCkgKyB1aW50OFtsZW4gLSAxXVxuICAgIHBhcnRzLnB1c2goXG4gICAgICBsb29rdXBbdG1wID4+IDEwXSArXG4gICAgICBsb29rdXBbKHRtcCA+PiA0KSAmIDB4M0ZdICtcbiAgICAgIGxvb2t1cFsodG1wIDw8IDIpICYgMHgzRl0gK1xuICAgICAgJz0nXG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIHBhcnRzLmpvaW4oJycpXG59XG4iLCAiLyohIGllZWU3NTQuIEJTRC0zLUNsYXVzZSBMaWNlbnNlLiBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmcvb3BlbnNvdXJjZT4gKi9cbmV4cG9ydHMucmVhZCA9IGZ1bmN0aW9uIChidWZmZXIsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtXG4gIHZhciBlTGVuID0gKG5CeXRlcyAqIDgpIC0gbUxlbiAtIDFcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDFcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxXG4gIHZhciBuQml0cyA9IC03XG4gIHZhciBpID0gaXNMRSA/IChuQnl0ZXMgLSAxKSA6IDBcbiAgdmFyIGQgPSBpc0xFID8gLTEgOiAxXG4gIHZhciBzID0gYnVmZmVyW29mZnNldCArIGldXG5cbiAgaSArPSBkXG5cbiAgZSA9IHMgJiAoKDEgPDwgKC1uQml0cykpIC0gMSlcbiAgcyA+Pj0gKC1uQml0cylcbiAgbkJpdHMgKz0gZUxlblxuICBmb3IgKDsgbkJpdHMgPiAwOyBlID0gKGUgKiAyNTYpICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHt9XG5cbiAgbSA9IGUgJiAoKDEgPDwgKC1uQml0cykpIC0gMSlcbiAgZSA+Pj0gKC1uQml0cylcbiAgbkJpdHMgKz0gbUxlblxuICBmb3IgKDsgbkJpdHMgPiAwOyBtID0gKG0gKiAyNTYpICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHt9XG5cbiAgaWYgKGUgPT09IDApIHtcbiAgICBlID0gMSAtIGVCaWFzXG4gIH0gZWxzZSBpZiAoZSA9PT0gZU1heCkge1xuICAgIHJldHVybiBtID8gTmFOIDogKChzID8gLTEgOiAxKSAqIEluZmluaXR5KVxuICB9IGVsc2Uge1xuICAgIG0gPSBtICsgTWF0aC5wb3coMiwgbUxlbilcbiAgICBlID0gZSAtIGVCaWFzXG4gIH1cbiAgcmV0dXJuIChzID8gLTEgOiAxKSAqIG0gKiBNYXRoLnBvdygyLCBlIC0gbUxlbilcbn1cblxuZXhwb3J0cy53cml0ZSA9IGZ1bmN0aW9uIChidWZmZXIsIHZhbHVlLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbSwgY1xuICB2YXIgZUxlbiA9IChuQnl0ZXMgKiA4KSAtIG1MZW4gLSAxXG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxXG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMVxuICB2YXIgcnQgPSAobUxlbiA9PT0gMjMgPyBNYXRoLnBvdygyLCAtMjQpIC0gTWF0aC5wb3coMiwgLTc3KSA6IDApXG4gIHZhciBpID0gaXNMRSA/IDAgOiAobkJ5dGVzIC0gMSlcbiAgdmFyIGQgPSBpc0xFID8gMSA6IC0xXG4gIHZhciBzID0gdmFsdWUgPCAwIHx8ICh2YWx1ZSA9PT0gMCAmJiAxIC8gdmFsdWUgPCAwKSA/IDEgOiAwXG5cbiAgdmFsdWUgPSBNYXRoLmFicyh2YWx1ZSlcblxuICBpZiAoaXNOYU4odmFsdWUpIHx8IHZhbHVlID09PSBJbmZpbml0eSkge1xuICAgIG0gPSBpc05hTih2YWx1ZSkgPyAxIDogMFxuICAgIGUgPSBlTWF4XG4gIH0gZWxzZSB7XG4gICAgZSA9IE1hdGguZmxvb3IoTWF0aC5sb2codmFsdWUpIC8gTWF0aC5MTjIpXG4gICAgaWYgKHZhbHVlICogKGMgPSBNYXRoLnBvdygyLCAtZSkpIDwgMSkge1xuICAgICAgZS0tXG4gICAgICBjICo9IDJcbiAgICB9XG4gICAgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICB2YWx1ZSArPSBydCAvIGNcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgKz0gcnQgKiBNYXRoLnBvdygyLCAxIC0gZUJpYXMpXG4gICAgfVxuICAgIGlmICh2YWx1ZSAqIGMgPj0gMikge1xuICAgICAgZSsrXG4gICAgICBjIC89IDJcbiAgICB9XG5cbiAgICBpZiAoZSArIGVCaWFzID49IGVNYXgpIHtcbiAgICAgIG0gPSAwXG4gICAgICBlID0gZU1heFxuICAgIH0gZWxzZSBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIG0gPSAoKHZhbHVlICogYykgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gZSArIGVCaWFzXG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSB2YWx1ZSAqIE1hdGgucG93KDIsIGVCaWFzIC0gMSkgKiBNYXRoLnBvdygyLCBtTGVuKVxuICAgICAgZSA9IDBcbiAgICB9XG4gIH1cblxuICBmb3IgKDsgbUxlbiA+PSA4OyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBtICYgMHhmZiwgaSArPSBkLCBtIC89IDI1NiwgbUxlbiAtPSA4KSB7fVxuXG4gIGUgPSAoZSA8PCBtTGVuKSB8IG1cbiAgZUxlbiArPSBtTGVuXG4gIGZvciAoOyBlTGVuID4gMDsgYnVmZmVyW29mZnNldCArIGldID0gZSAmIDB4ZmYsIGkgKz0gZCwgZSAvPSAyNTYsIGVMZW4gLT0gOCkge31cblxuICBidWZmZXJbb2Zmc2V0ICsgaSAtIGRdIHw9IHMgKiAxMjhcbn1cbiIsICIvKiFcbiAqIFRoZSBidWZmZXIgbW9kdWxlIGZyb20gbm9kZS5qcywgZm9yIHRoZSBicm93c2VyLlxuICpcbiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmc+XG4gKiBAbGljZW5zZSAgTUlUXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG5cbid1c2Ugc3RyaWN0J1xuXG52YXIgYmFzZTY0ID0gcmVxdWlyZSgnYmFzZTY0LWpzJylcbnZhciBpZWVlNzU0ID0gcmVxdWlyZSgnaWVlZTc1NCcpXG52YXIgY3VzdG9tSW5zcGVjdFN5bWJvbCA9XG4gICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2xbJ2ZvciddID09PSAnZnVuY3Rpb24nKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGRvdC1ub3RhdGlvblxuICAgID8gU3ltYm9sWydmb3InXSgnbm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20nKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGRvdC1ub3RhdGlvblxuICAgIDogbnVsbFxuXG5leHBvcnRzLkJ1ZmZlciA9IEJ1ZmZlclxuZXhwb3J0cy5TbG93QnVmZmVyID0gU2xvd0J1ZmZlclxuZXhwb3J0cy5JTlNQRUNUX01BWF9CWVRFUyA9IDUwXG5cbnZhciBLX01BWF9MRU5HVEggPSAweDdmZmZmZmZmXG5leHBvcnRzLmtNYXhMZW5ndGggPSBLX01BWF9MRU5HVEhcblxuLyoqXG4gKiBJZiBgQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlRgOlxuICogICA9PT0gdHJ1ZSAgICBVc2UgVWludDhBcnJheSBpbXBsZW1lbnRhdGlvbiAoZmFzdGVzdClcbiAqICAgPT09IGZhbHNlICAgUHJpbnQgd2FybmluZyBhbmQgcmVjb21tZW5kIHVzaW5nIGBidWZmZXJgIHY0Lnggd2hpY2ggaGFzIGFuIE9iamVjdFxuICogICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbiAobW9zdCBjb21wYXRpYmxlLCBldmVuIElFNilcbiAqXG4gKiBCcm93c2VycyB0aGF0IHN1cHBvcnQgdHlwZWQgYXJyYXlzIGFyZSBJRSAxMCssIEZpcmVmb3ggNCssIENocm9tZSA3KywgU2FmYXJpIDUuMSssXG4gKiBPcGVyYSAxMS42KywgaU9TIDQuMisuXG4gKlxuICogV2UgcmVwb3J0IHRoYXQgdGhlIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0eXBlZCBhcnJheXMgaWYgdGhlIGFyZSBub3Qgc3ViY2xhc3NhYmxlXG4gKiB1c2luZyBfX3Byb3RvX18uIEZpcmVmb3ggNC0yOSBsYWNrcyBzdXBwb3J0IGZvciBhZGRpbmcgbmV3IHByb3BlcnRpZXMgdG8gYFVpbnQ4QXJyYXlgXG4gKiAoU2VlOiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02OTU0MzgpLiBJRSAxMCBsYWNrcyBzdXBwb3J0XG4gKiBmb3IgX19wcm90b19fIGFuZCBoYXMgYSBidWdneSB0eXBlZCBhcnJheSBpbXBsZW1lbnRhdGlvbi5cbiAqL1xuQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgPSB0eXBlZEFycmF5U3VwcG9ydCgpXG5cbmlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgdHlwZW9mIGNvbnNvbGUuZXJyb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgY29uc29sZS5lcnJvcihcbiAgICAnVGhpcyBicm93c2VyIGxhY2tzIHR5cGVkIGFycmF5IChVaW50OEFycmF5KSBzdXBwb3J0IHdoaWNoIGlzIHJlcXVpcmVkIGJ5ICcgK1xuICAgICdgYnVmZmVyYCB2NS54LiBVc2UgYGJ1ZmZlcmAgdjQueCBpZiB5b3UgcmVxdWlyZSBvbGQgYnJvd3NlciBzdXBwb3J0LidcbiAgKVxufVxuXG5mdW5jdGlvbiB0eXBlZEFycmF5U3VwcG9ydCAoKSB7XG4gIC8vIENhbiB0eXBlZCBhcnJheSBpbnN0YW5jZXMgY2FuIGJlIGF1Z21lbnRlZD9cbiAgdHJ5IHtcbiAgICB2YXIgYXJyID0gbmV3IFVpbnQ4QXJyYXkoMSlcbiAgICB2YXIgcHJvdG8gPSB7IGZvbzogZnVuY3Rpb24gKCkgeyByZXR1cm4gNDIgfSB9XG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHByb3RvLCBVaW50OEFycmF5LnByb3RvdHlwZSlcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoYXJyLCBwcm90bylcbiAgICByZXR1cm4gYXJyLmZvbygpID09PSA0MlxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEJ1ZmZlci5wcm90b3R5cGUsICdwYXJlbnQnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKHRoaXMpKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgcmV0dXJuIHRoaXMuYnVmZmVyXG4gIH1cbn0pXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdWZmZXIucHJvdG90eXBlLCAnb2Zmc2V0Jywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0aGlzKSkgcmV0dXJuIHVuZGVmaW5lZFxuICAgIHJldHVybiB0aGlzLmJ5dGVPZmZzZXRcbiAgfVxufSlcblxuZnVuY3Rpb24gY3JlYXRlQnVmZmVyIChsZW5ndGgpIHtcbiAgaWYgKGxlbmd0aCA+IEtfTUFYX0xFTkdUSCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgXCInICsgbGVuZ3RoICsgJ1wiIGlzIGludmFsaWQgZm9yIG9wdGlvbiBcInNpemVcIicpXG4gIH1cbiAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2VcbiAgdmFyIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGxlbmd0aClcbiAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGJ1ZiwgQnVmZmVyLnByb3RvdHlwZSlcbiAgcmV0dXJuIGJ1ZlxufVxuXG4vKipcbiAqIFRoZSBCdWZmZXIgY29uc3RydWN0b3IgcmV0dXJucyBpbnN0YW5jZXMgb2YgYFVpbnQ4QXJyYXlgIHRoYXQgaGF2ZSB0aGVpclxuICogcHJvdG90eXBlIGNoYW5nZWQgdG8gYEJ1ZmZlci5wcm90b3R5cGVgLiBGdXJ0aGVybW9yZSwgYEJ1ZmZlcmAgaXMgYSBzdWJjbGFzcyBvZlxuICogYFVpbnQ4QXJyYXlgLCBzbyB0aGUgcmV0dXJuZWQgaW5zdGFuY2VzIHdpbGwgaGF2ZSBhbGwgdGhlIG5vZGUgYEJ1ZmZlcmAgbWV0aG9kc1xuICogYW5kIHRoZSBgVWludDhBcnJheWAgbWV0aG9kcy4gU3F1YXJlIGJyYWNrZXQgbm90YXRpb24gd29ya3MgYXMgZXhwZWN0ZWQgLS0gaXRcbiAqIHJldHVybnMgYSBzaW5nbGUgb2N0ZXQuXG4gKlxuICogVGhlIGBVaW50OEFycmF5YCBwcm90b3R5cGUgcmVtYWlucyB1bm1vZGlmaWVkLlxuICovXG5cbmZ1bmN0aW9uIEJ1ZmZlciAoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgLy8gQ29tbW9uIGNhc2UuXG4gIGlmICh0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuICAgIGlmICh0eXBlb2YgZW5jb2RpbmdPck9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICdUaGUgXCJzdHJpbmdcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLiBSZWNlaXZlZCB0eXBlIG51bWJlcidcbiAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIGFsbG9jVW5zYWZlKGFyZylcbiAgfVxuICByZXR1cm4gZnJvbShhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuQnVmZmVyLnBvb2xTaXplID0gODE5MiAvLyBub3QgdXNlZCBieSB0aGlzIGltcGxlbWVudGF0aW9uXG5cbmZ1bmN0aW9uIGZyb20gKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZnJvbVN0cmluZyh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldClcbiAgfVxuXG4gIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZyb21BcnJheVZpZXcodmFsdWUpXG4gIH1cblxuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAnVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgJyArXG4gICAgICAnb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgJyArICh0eXBlb2YgdmFsdWUpXG4gICAgKVxuICB9XG5cbiAgaWYgKGlzSW5zdGFuY2UodmFsdWUsIEFycmF5QnVmZmVyKSB8fFxuICAgICAgKHZhbHVlICYmIGlzSW5zdGFuY2UodmFsdWUuYnVmZmVyLCBBcnJheUJ1ZmZlcikpKSB7XG4gICAgcmV0dXJuIGZyb21BcnJheUJ1ZmZlcih2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgIChpc0luc3RhbmNlKHZhbHVlLCBTaGFyZWRBcnJheUJ1ZmZlcikgfHxcbiAgICAgICh2YWx1ZSAmJiBpc0luc3RhbmNlKHZhbHVlLmJ1ZmZlciwgU2hhcmVkQXJyYXlCdWZmZXIpKSkpIHtcbiAgICByZXR1cm4gZnJvbUFycmF5QnVmZmVyKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAnVGhlIFwidmFsdWVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSBudW1iZXInXG4gICAgKVxuICB9XG5cbiAgdmFyIHZhbHVlT2YgPSB2YWx1ZS52YWx1ZU9mICYmIHZhbHVlLnZhbHVlT2YoKVxuICBpZiAodmFsdWVPZiAhPSBudWxsICYmIHZhbHVlT2YgIT09IHZhbHVlKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHZhbHVlT2YsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIHZhciBiID0gZnJvbU9iamVjdCh2YWx1ZSlcbiAgaWYgKGIpIHJldHVybiBiXG5cbiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1ByaW1pdGl2ZSAhPSBudWxsICYmXG4gICAgICB0eXBlb2YgdmFsdWVbU3ltYm9sLnRvUHJpbWl0aXZlXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShcbiAgICAgIHZhbHVlW1N5bWJvbC50b1ByaW1pdGl2ZV0oJ3N0cmluZycpLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGhcbiAgICApXG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICdUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCAnICtcbiAgICAnb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgJyArICh0eXBlb2YgdmFsdWUpXG4gIClcbn1cblxuLyoqXG4gKiBGdW5jdGlvbmFsbHkgZXF1aXZhbGVudCB0byBCdWZmZXIoYXJnLCBlbmNvZGluZykgYnV0IHRocm93cyBhIFR5cGVFcnJvclxuICogaWYgdmFsdWUgaXMgYSBudW1iZXIuXG4gKiBCdWZmZXIuZnJvbShzdHJbLCBlbmNvZGluZ10pXG4gKiBCdWZmZXIuZnJvbShhcnJheSlcbiAqIEJ1ZmZlci5mcm9tKGJ1ZmZlcilcbiAqIEJ1ZmZlci5mcm9tKGFycmF5QnVmZmVyWywgYnl0ZU9mZnNldFssIGxlbmd0aF1dKVxuICoqL1xuQnVmZmVyLmZyb20gPSBmdW5jdGlvbiAodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gZnJvbSh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG4vLyBOb3RlOiBDaGFuZ2UgcHJvdG90eXBlICphZnRlciogQnVmZmVyLmZyb20gaXMgZGVmaW5lZCB0byB3b3JrYXJvdW5kIENocm9tZSBidWc6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9wdWxsLzE0OFxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEJ1ZmZlci5wcm90b3R5cGUsIFVpbnQ4QXJyYXkucHJvdG90eXBlKVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEJ1ZmZlciwgVWludDhBcnJheSlcblxuZnVuY3Rpb24gYXNzZXJ0U2l6ZSAoc2l6ZSkge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJzaXplXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlcicpXG4gIH0gZWxzZSBpZiAoc2l6ZSA8IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIFwiJyArIHNpemUgKyAnXCIgaXMgaW52YWxpZCBmb3Igb3B0aW9uIFwic2l6ZVwiJylcbiAgfVxufVxuXG5mdW5jdGlvbiBhbGxvYyAoc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgYXNzZXJ0U2l6ZShzaXplKVxuICBpZiAoc2l6ZSA8PSAwKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplKVxuICB9XG4gIGlmIChmaWxsICE9PSB1bmRlZmluZWQpIHtcbiAgICAvLyBPbmx5IHBheSBhdHRlbnRpb24gdG8gZW5jb2RpbmcgaWYgaXQncyBhIHN0cmluZy4gVGhpc1xuICAgIC8vIHByZXZlbnRzIGFjY2lkZW50YWxseSBzZW5kaW5nIGluIGEgbnVtYmVyIHRoYXQgd291bGRcbiAgICAvLyBiZSBpbnRlcnByZXRlZCBhcyBhIHN0YXJ0IG9mZnNldC5cbiAgICByZXR1cm4gdHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJ1xuICAgICAgPyBjcmVhdGVCdWZmZXIoc2l6ZSkuZmlsbChmaWxsLCBlbmNvZGluZylcbiAgICAgIDogY3JlYXRlQnVmZmVyKHNpemUpLmZpbGwoZmlsbClcbiAgfVxuICByZXR1cm4gY3JlYXRlQnVmZmVyKHNpemUpXG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBmaWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICogYWxsb2Moc2l6ZVssIGZpbGxbLCBlbmNvZGluZ11dKVxuICoqL1xuQnVmZmVyLmFsbG9jID0gZnVuY3Rpb24gKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIHJldHVybiBhbGxvYyhzaXplLCBmaWxsLCBlbmNvZGluZylcbn1cblxuZnVuY3Rpb24gYWxsb2NVbnNhZmUgKHNpemUpIHtcbiAgYXNzZXJ0U2l6ZShzaXplKVxuICByZXR1cm4gY3JlYXRlQnVmZmVyKHNpemUgPCAwID8gMCA6IGNoZWNrZWQoc2l6ZSkgfCAwKVxufVxuXG4vKipcbiAqIEVxdWl2YWxlbnQgdG8gQnVmZmVyKG51bSksIGJ5IGRlZmF1bHQgY3JlYXRlcyBhIG5vbi16ZXJvLWZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKiAqL1xuQnVmZmVyLmFsbG9jVW5zYWZlID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgcmV0dXJuIGFsbG9jVW5zYWZlKHNpemUpXG59XG4vKipcbiAqIEVxdWl2YWxlbnQgdG8gU2xvd0J1ZmZlcihudW0pLCBieSBkZWZhdWx0IGNyZWF0ZXMgYSBub24temVyby1maWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICovXG5CdWZmZXIuYWxsb2NVbnNhZmVTbG93ID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgcmV0dXJuIGFsbG9jVW5zYWZlKHNpemUpXG59XG5cbmZ1bmN0aW9uIGZyb21TdHJpbmcgKHN0cmluZywgZW5jb2RpbmcpIHtcbiAgaWYgKHR5cGVvZiBlbmNvZGluZyAhPT0gJ3N0cmluZycgfHwgZW5jb2RpbmcgPT09ICcnKSB7XG4gICAgZW5jb2RpbmcgPSAndXRmOCdcbiAgfVxuXG4gIGlmICghQnVmZmVyLmlzRW5jb2RpbmcoZW5jb2RpbmcpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICB9XG5cbiAgdmFyIGxlbmd0aCA9IGJ5dGVMZW5ndGgoc3RyaW5nLCBlbmNvZGluZykgfCAwXG4gIHZhciBidWYgPSBjcmVhdGVCdWZmZXIobGVuZ3RoKVxuXG4gIHZhciBhY3R1YWwgPSBidWYud3JpdGUoc3RyaW5nLCBlbmNvZGluZylcblxuICBpZiAoYWN0dWFsICE9PSBsZW5ndGgpIHtcbiAgICAvLyBXcml0aW5nIGEgaGV4IHN0cmluZywgZm9yIGV4YW1wbGUsIHRoYXQgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzIHdpbGxcbiAgICAvLyBjYXVzZSBldmVyeXRoaW5nIGFmdGVyIHRoZSBmaXJzdCBpbnZhbGlkIGNoYXJhY3RlciB0byBiZSBpZ25vcmVkLiAoZS5nLlxuICAgIC8vICdhYnh4Y2QnIHdpbGwgYmUgdHJlYXRlZCBhcyAnYWInKVxuICAgIGJ1ZiA9IGJ1Zi5zbGljZSgwLCBhY3R1YWwpXG4gIH1cblxuICByZXR1cm4gYnVmXG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUxpa2UgKGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGggPCAwID8gMCA6IGNoZWNrZWQoYXJyYXkubGVuZ3RoKSB8IDBcbiAgdmFyIGJ1ZiA9IGNyZWF0ZUJ1ZmZlcihsZW5ndGgpXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICBidWZbaV0gPSBhcnJheVtpXSAmIDI1NVxuICB9XG4gIHJldHVybiBidWZcbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5VmlldyAoYXJyYXlWaWV3KSB7XG4gIGlmIChpc0luc3RhbmNlKGFycmF5VmlldywgVWludDhBcnJheSkpIHtcbiAgICB2YXIgY29weSA9IG5ldyBVaW50OEFycmF5KGFycmF5VmlldylcbiAgICByZXR1cm4gZnJvbUFycmF5QnVmZmVyKGNvcHkuYnVmZmVyLCBjb3B5LmJ5dGVPZmZzZXQsIGNvcHkuYnl0ZUxlbmd0aClcbiAgfVxuICByZXR1cm4gZnJvbUFycmF5TGlrZShhcnJheVZpZXcpXG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUJ1ZmZlciAoYXJyYXksIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAoYnl0ZU9mZnNldCA8IDAgfHwgYXJyYXkuYnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJvZmZzZXRcIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKVxuICB9XG5cbiAgaWYgKGFycmF5LmJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0ICsgKGxlbmd0aCB8fCAwKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcImxlbmd0aFwiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpXG4gIH1cblxuICB2YXIgYnVmXG4gIGlmIChieXRlT2Zmc2V0ID09PSB1bmRlZmluZWQgJiYgbGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBidWYgPSBuZXcgVWludDhBcnJheShhcnJheSlcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0KVxuICB9IGVsc2Uge1xuICAgIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZVxuICBPYmplY3Quc2V0UHJvdG90eXBlT2YoYnVmLCBCdWZmZXIucHJvdG90eXBlKVxuXG4gIHJldHVybiBidWZcbn1cblxuZnVuY3Rpb24gZnJvbU9iamVjdCAob2JqKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIob2JqKSkge1xuICAgIHZhciBsZW4gPSBjaGVja2VkKG9iai5sZW5ndGgpIHwgMFxuICAgIHZhciBidWYgPSBjcmVhdGVCdWZmZXIobGVuKVxuXG4gICAgaWYgKGJ1Zi5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBidWZcbiAgICB9XG5cbiAgICBvYmouY29weShidWYsIDAsIDAsIGxlbilcbiAgICByZXR1cm4gYnVmXG4gIH1cblxuICBpZiAob2JqLmxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHR5cGVvZiBvYmoubGVuZ3RoICE9PSAnbnVtYmVyJyB8fCBudW1iZXJJc05hTihvYmoubGVuZ3RoKSkge1xuICAgICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcigwKVxuICAgIH1cbiAgICByZXR1cm4gZnJvbUFycmF5TGlrZShvYmopXG4gIH1cblxuICBpZiAob2JqLnR5cGUgPT09ICdCdWZmZXInICYmIEFycmF5LmlzQXJyYXkob2JqLmRhdGEpKSB7XG4gICAgcmV0dXJuIGZyb21BcnJheUxpa2Uob2JqLmRhdGEpXG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tlZCAobGVuZ3RoKSB7XG4gIC8vIE5vdGU6IGNhbm5vdCB1c2UgYGxlbmd0aCA8IEtfTUFYX0xFTkdUSGAgaGVyZSBiZWNhdXNlIHRoYXQgZmFpbHMgd2hlblxuICAvLyBsZW5ndGggaXMgTmFOICh3aGljaCBpcyBvdGhlcndpc2UgY29lcmNlZCB0byB6ZXJvLilcbiAgaWYgKGxlbmd0aCA+PSBLX01BWF9MRU5HVEgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAnc2l6ZTogMHgnICsgS19NQVhfTEVOR1RILnRvU3RyaW5nKDE2KSArICcgYnl0ZXMnKVxuICB9XG4gIHJldHVybiBsZW5ndGggfCAwXG59XG5cbmZ1bmN0aW9uIFNsb3dCdWZmZXIgKGxlbmd0aCkge1xuICBpZiAoK2xlbmd0aCAhPSBsZW5ndGgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBlcWVxZXFcbiAgICBsZW5ndGggPSAwXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5hbGxvYygrbGVuZ3RoKVxufVxuXG5CdWZmZXIuaXNCdWZmZXIgPSBmdW5jdGlvbiBpc0J1ZmZlciAoYikge1xuICByZXR1cm4gYiAhPSBudWxsICYmIGIuX2lzQnVmZmVyID09PSB0cnVlICYmXG4gICAgYiAhPT0gQnVmZmVyLnByb3RvdHlwZSAvLyBzbyBCdWZmZXIuaXNCdWZmZXIoQnVmZmVyLnByb3RvdHlwZSkgd2lsbCBiZSBmYWxzZVxufVxuXG5CdWZmZXIuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUgKGEsIGIpIHtcbiAgaWYgKGlzSW5zdGFuY2UoYSwgVWludDhBcnJheSkpIGEgPSBCdWZmZXIuZnJvbShhLCBhLm9mZnNldCwgYS5ieXRlTGVuZ3RoKVxuICBpZiAoaXNJbnN0YW5jZShiLCBVaW50OEFycmF5KSkgYiA9IEJ1ZmZlci5mcm9tKGIsIGIub2Zmc2V0LCBiLmJ5dGVMZW5ndGgpXG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGEpIHx8ICFCdWZmZXIuaXNCdWZmZXIoYikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgJ1RoZSBcImJ1ZjFcIiwgXCJidWYyXCIgYXJndW1lbnRzIG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXknXG4gICAgKVxuICB9XG5cbiAgaWYgKGEgPT09IGIpIHJldHVybiAwXG5cbiAgdmFyIHggPSBhLmxlbmd0aFxuICB2YXIgeSA9IGIubGVuZ3RoXG5cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IE1hdGgubWluKHgsIHkpOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAoYVtpXSAhPT0gYltpXSkge1xuICAgICAgeCA9IGFbaV1cbiAgICAgIHkgPSBiW2ldXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xXG4gIGlmICh5IDwgeCkgcmV0dXJuIDFcbiAgcmV0dXJuIDBcbn1cblxuQnVmZmVyLmlzRW5jb2RpbmcgPSBmdW5jdGlvbiBpc0VuY29kaW5nIChlbmNvZGluZykge1xuICBzd2l0Y2ggKFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ2hleCc6XG4gICAgY2FzZSAndXRmOCc6XG4gICAgY2FzZSAndXRmLTgnOlxuICAgIGNhc2UgJ2FzY2lpJzpcbiAgICBjYXNlICdsYXRpbjEnOlxuICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgY2FzZSAnYmFzZTY0JzpcbiAgICBjYXNlICd1Y3MyJzpcbiAgICBjYXNlICd1Y3MtMic6XG4gICAgY2FzZSAndXRmMTZsZSc6XG4gICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgcmV0dXJuIHRydWVcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuQnVmZmVyLmNvbmNhdCA9IGZ1bmN0aW9uIGNvbmNhdCAobGlzdCwgbGVuZ3RoKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShsaXN0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gIH1cblxuICBpZiAobGlzdC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gQnVmZmVyLmFsbG9jKDApXG4gIH1cblxuICB2YXIgaVxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBsZW5ndGggPSAwXG4gICAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICAgIGxlbmd0aCArPSBsaXN0W2ldLmxlbmd0aFxuICAgIH1cbiAgfVxuXG4gIHZhciBidWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUobGVuZ3RoKVxuICB2YXIgcG9zID0gMFxuICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkge1xuICAgIHZhciBidWYgPSBsaXN0W2ldXG4gICAgaWYgKGlzSW5zdGFuY2UoYnVmLCBVaW50OEFycmF5KSkge1xuICAgICAgaWYgKHBvcyArIGJ1Zi5sZW5ndGggPiBidWZmZXIubGVuZ3RoKSB7XG4gICAgICAgIEJ1ZmZlci5mcm9tKGJ1ZikuY29weShidWZmZXIsIHBvcylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKFxuICAgICAgICAgIGJ1ZmZlcixcbiAgICAgICAgICBidWYsXG4gICAgICAgICAgcG9zXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYnVmKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJylcbiAgICB9IGVsc2Uge1xuICAgICAgYnVmLmNvcHkoYnVmZmVyLCBwb3MpXG4gICAgfVxuICAgIHBvcyArPSBidWYubGVuZ3RoXG4gIH1cbiAgcmV0dXJuIGJ1ZmZlclxufVxuXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoc3RyaW5nKSkge1xuICAgIHJldHVybiBzdHJpbmcubGVuZ3RoXG4gIH1cbiAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhzdHJpbmcpIHx8IGlzSW5zdGFuY2Uoc3RyaW5nLCBBcnJheUJ1ZmZlcikpIHtcbiAgICByZXR1cm4gc3RyaW5nLmJ5dGVMZW5ndGhcbiAgfVxuICBpZiAodHlwZW9mIHN0cmluZyAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgJ1RoZSBcInN0cmluZ1wiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIG9yIEFycmF5QnVmZmVyLiAnICtcbiAgICAgICdSZWNlaXZlZCB0eXBlICcgKyB0eXBlb2Ygc3RyaW5nXG4gICAgKVxuICB9XG5cbiAgdmFyIGxlbiA9IHN0cmluZy5sZW5ndGhcbiAgdmFyIG11c3RNYXRjaCA9IChhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gPT09IHRydWUpXG4gIGlmICghbXVzdE1hdGNoICYmIGxlbiA9PT0gMCkgcmV0dXJuIDBcblxuICAvLyBVc2UgYSBmb3IgbG9vcCB0byBhdm9pZCByZWN1cnNpb25cbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcbiAgZm9yICg7Oykge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGVuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhUb0J5dGVzKHN0cmluZykubGVuZ3RoXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gbGVuICogMlxuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGxlbiA+Pj4gMVxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGJhc2U2NFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGhcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkge1xuICAgICAgICAgIHJldHVybiBtdXN0TWF0Y2ggPyAtMSA6IHV0ZjhUb0J5dGVzKHN0cmluZykubGVuZ3RoIC8vIGFzc3VtZSB1dGY4XG4gICAgICAgIH1cbiAgICAgICAgZW5jb2RpbmcgPSAoJycgKyBlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cbkJ1ZmZlci5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aFxuXG5mdW5jdGlvbiBzbG93VG9TdHJpbmcgKGVuY29kaW5nLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG5cbiAgLy8gTm8gbmVlZCB0byB2ZXJpZnkgdGhhdCBcInRoaXMubGVuZ3RoIDw9IE1BWF9VSU5UMzJcIiBzaW5jZSBpdCdzIGEgcmVhZC1vbmx5XG4gIC8vIHByb3BlcnR5IG9mIGEgdHlwZWQgYXJyYXkuXG5cbiAgLy8gVGhpcyBiZWhhdmVzIG5laXRoZXIgbGlrZSBTdHJpbmcgbm9yIFVpbnQ4QXJyYXkgaW4gdGhhdCB3ZSBzZXQgc3RhcnQvZW5kXG4gIC8vIHRvIHRoZWlyIHVwcGVyL2xvd2VyIGJvdW5kcyBpZiB0aGUgdmFsdWUgcGFzc2VkIGlzIG91dCBvZiByYW5nZS5cbiAgLy8gdW5kZWZpbmVkIGlzIGhhbmRsZWQgc3BlY2lhbGx5IGFzIHBlciBFQ01BLTI2MiA2dGggRWRpdGlvbixcbiAgLy8gU2VjdGlvbiAxMy4zLjMuNyBSdW50aW1lIFNlbWFudGljczogS2V5ZWRCaW5kaW5nSW5pdGlhbGl6YXRpb24uXG4gIGlmIChzdGFydCA9PT0gdW5kZWZpbmVkIHx8IHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ID0gMFxuICB9XG4gIC8vIFJldHVybiBlYXJseSBpZiBzdGFydCA+IHRoaXMubGVuZ3RoLiBEb25lIGhlcmUgdG8gcHJldmVudCBwb3RlbnRpYWwgdWludDMyXG4gIC8vIGNvZXJjaW9uIGZhaWwgYmVsb3cuXG4gIGlmIChzdGFydCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBpZiAoZW5kID09PSB1bmRlZmluZWQgfHwgZW5kID4gdGhpcy5sZW5ndGgpIHtcbiAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICB9XG5cbiAgaWYgKGVuZCA8PSAwKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICAvLyBGb3JjZSBjb2VyY2lvbiB0byB1aW50MzIuIFRoaXMgd2lsbCBhbHNvIGNvZXJjZSBmYWxzZXkvTmFOIHZhbHVlcyB0byAwLlxuICBlbmQgPj4+PSAwXG4gIHN0YXJ0ID4+Pj0gMFxuXG4gIGlmIChlbmQgPD0gc3RhcnQpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gJ3V0ZjgnXG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gaGV4U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgICByZXR1cm4gYXNjaWlTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxhdGluMVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBiYXNlNjRTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gdXRmMTZsZVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgICAgICBlbmNvZGluZyA9IChlbmNvZGluZyArICcnKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG4vLyBUaGlzIHByb3BlcnR5IGlzIHVzZWQgYnkgYEJ1ZmZlci5pc0J1ZmZlcmAgKGFuZCB0aGUgYGlzLWJ1ZmZlcmAgbnBtIHBhY2thZ2UpXG4vLyB0byBkZXRlY3QgYSBCdWZmZXIgaW5zdGFuY2UuIEl0J3Mgbm90IHBvc3NpYmxlIHRvIHVzZSBgaW5zdGFuY2VvZiBCdWZmZXJgXG4vLyByZWxpYWJseSBpbiBhIGJyb3dzZXJpZnkgY29udGV4dCBiZWNhdXNlIHRoZXJlIGNvdWxkIGJlIG11bHRpcGxlIGRpZmZlcmVudFxuLy8gY29waWVzIG9mIHRoZSAnYnVmZmVyJyBwYWNrYWdlIGluIHVzZS4gVGhpcyBtZXRob2Qgd29ya3MgZXZlbiBmb3IgQnVmZmVyXG4vLyBpbnN0YW5jZXMgdGhhdCB3ZXJlIGNyZWF0ZWQgZnJvbSBhbm90aGVyIGNvcHkgb2YgdGhlIGBidWZmZXJgIHBhY2thZ2UuXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL2lzc3Vlcy8xNTRcbkJ1ZmZlci5wcm90b3R5cGUuX2lzQnVmZmVyID0gdHJ1ZVxuXG5mdW5jdGlvbiBzd2FwIChiLCBuLCBtKSB7XG4gIHZhciBpID0gYltuXVxuICBiW25dID0gYlttXVxuICBiW21dID0gaVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXAxNiA9IGZ1bmN0aW9uIHN3YXAxNiAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgMiAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gMikge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDEpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwMzIgPSBmdW5jdGlvbiBzd2FwMzIgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDQgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyAzKVxuICAgIHN3YXAodGhpcywgaSArIDEsIGkgKyAyKVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDY0ID0gZnVuY3Rpb24gc3dhcDY0ICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSA4ICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSA4KSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgNylcbiAgICBzd2FwKHRoaXMsIGkgKyAxLCBpICsgNilcbiAgICBzd2FwKHRoaXMsIGkgKyAyLCBpICsgNSlcbiAgICBzd2FwKHRoaXMsIGkgKyAzLCBpICsgNClcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcgKCkge1xuICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICcnXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIDAsIGxlbmd0aClcbiAgcmV0dXJuIHNsb3dUb1N0cmluZy5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmcgPSBCdWZmZXIucHJvdG90eXBlLnRvU3RyaW5nXG5cbkJ1ZmZlci5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gZXF1YWxzIChiKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyJylcbiAgaWYgKHRoaXMgPT09IGIpIHJldHVybiB0cnVlXG4gIHJldHVybiBCdWZmZXIuY29tcGFyZSh0aGlzLCBiKSA9PT0gMFxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiBpbnNwZWN0ICgpIHtcbiAgdmFyIHN0ciA9ICcnXG4gIHZhciBtYXggPSBleHBvcnRzLklOU1BFQ1RfTUFYX0JZVEVTXG4gIHN0ciA9IHRoaXMudG9TdHJpbmcoJ2hleCcsIDAsIG1heCkucmVwbGFjZSgvKC57Mn0pL2csICckMSAnKS50cmltKClcbiAgaWYgKHRoaXMubGVuZ3RoID4gbWF4KSBzdHIgKz0gJyAuLi4gJ1xuICByZXR1cm4gJzxCdWZmZXIgJyArIHN0ciArICc+J1xufVxuaWYgKGN1c3RvbUluc3BlY3RTeW1ib2wpIHtcbiAgQnVmZmVyLnByb3RvdHlwZVtjdXN0b21JbnNwZWN0U3ltYm9sXSA9IEJ1ZmZlci5wcm90b3R5cGUuaW5zcGVjdFxufVxuXG5CdWZmZXIucHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlICh0YXJnZXQsIHN0YXJ0LCBlbmQsIHRoaXNTdGFydCwgdGhpc0VuZCkge1xuICBpZiAoaXNJbnN0YW5jZSh0YXJnZXQsIFVpbnQ4QXJyYXkpKSB7XG4gICAgdGFyZ2V0ID0gQnVmZmVyLmZyb20odGFyZ2V0LCB0YXJnZXQub2Zmc2V0LCB0YXJnZXQuYnl0ZUxlbmd0aClcbiAgfVxuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0YXJnZXQpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICdUaGUgXCJ0YXJnZXRcIiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5LiAnICtcbiAgICAgICdSZWNlaXZlZCB0eXBlICcgKyAodHlwZW9mIHRhcmdldClcbiAgICApXG4gIH1cblxuICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCkge1xuICAgIHN0YXJ0ID0gMFxuICB9XG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVuZCA9IHRhcmdldCA/IHRhcmdldC5sZW5ndGggOiAwXG4gIH1cbiAgaWYgKHRoaXNTdGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpc1N0YXJ0ID0gMFxuICB9XG4gIGlmICh0aGlzRW5kID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzRW5kID0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChzdGFydCA8IDAgfHwgZW5kID4gdGFyZ2V0Lmxlbmd0aCB8fCB0aGlzU3RhcnQgPCAwIHx8IHRoaXNFbmQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdvdXQgb2YgcmFuZ2UgaW5kZXgnKVxuICB9XG5cbiAgaWYgKHRoaXNTdGFydCA+PSB0aGlzRW5kICYmIHN0YXJ0ID49IGVuZCkge1xuICAgIHJldHVybiAwXG4gIH1cbiAgaWYgKHRoaXNTdGFydCA+PSB0aGlzRW5kKSB7XG4gICAgcmV0dXJuIC0xXG4gIH1cbiAgaWYgKHN0YXJ0ID49IGVuZCkge1xuICAgIHJldHVybiAxXG4gIH1cblxuICBzdGFydCA+Pj49IDBcbiAgZW5kID4+Pj0gMFxuICB0aGlzU3RhcnQgPj4+PSAwXG4gIHRoaXNFbmQgPj4+PSAwXG5cbiAgaWYgKHRoaXMgPT09IHRhcmdldCkgcmV0dXJuIDBcblxuICB2YXIgeCA9IHRoaXNFbmQgLSB0aGlzU3RhcnRcbiAgdmFyIHkgPSBlbmQgLSBzdGFydFxuICB2YXIgbGVuID0gTWF0aC5taW4oeCwgeSlcblxuICB2YXIgdGhpc0NvcHkgPSB0aGlzLnNsaWNlKHRoaXNTdGFydCwgdGhpc0VuZClcbiAgdmFyIHRhcmdldENvcHkgPSB0YXJnZXQuc2xpY2Uoc3RhcnQsIGVuZClcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKHRoaXNDb3B5W2ldICE9PSB0YXJnZXRDb3B5W2ldKSB7XG4gICAgICB4ID0gdGhpc0NvcHlbaV1cbiAgICAgIHkgPSB0YXJnZXRDb3B5W2ldXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xXG4gIGlmICh5IDwgeCkgcmV0dXJuIDFcbiAgcmV0dXJuIDBcbn1cblxuLy8gRmluZHMgZWl0aGVyIHRoZSBmaXJzdCBpbmRleCBvZiBgdmFsYCBpbiBgYnVmZmVyYCBhdCBvZmZzZXQgPj0gYGJ5dGVPZmZzZXRgLFxuLy8gT1IgdGhlIGxhc3QgaW5kZXggb2YgYHZhbGAgaW4gYGJ1ZmZlcmAgYXQgb2Zmc2V0IDw9IGBieXRlT2Zmc2V0YC5cbi8vXG4vLyBBcmd1bWVudHM6XG4vLyAtIGJ1ZmZlciAtIGEgQnVmZmVyIHRvIHNlYXJjaFxuLy8gLSB2YWwgLSBhIHN0cmluZywgQnVmZmVyLCBvciBudW1iZXJcbi8vIC0gYnl0ZU9mZnNldCAtIGFuIGluZGV4IGludG8gYGJ1ZmZlcmA7IHdpbGwgYmUgY2xhbXBlZCB0byBhbiBpbnQzMlxuLy8gLSBlbmNvZGluZyAtIGFuIG9wdGlvbmFsIGVuY29kaW5nLCByZWxldmFudCBpcyB2YWwgaXMgYSBzdHJpbmdcbi8vIC0gZGlyIC0gdHJ1ZSBmb3IgaW5kZXhPZiwgZmFsc2UgZm9yIGxhc3RJbmRleE9mXG5mdW5jdGlvbiBiaWRpcmVjdGlvbmFsSW5kZXhPZiAoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpIHtcbiAgLy8gRW1wdHkgYnVmZmVyIG1lYW5zIG5vIG1hdGNoXG4gIGlmIChidWZmZXIubGVuZ3RoID09PSAwKSByZXR1cm4gLTFcblxuICAvLyBOb3JtYWxpemUgYnl0ZU9mZnNldFxuICBpZiAodHlwZW9mIGJ5dGVPZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgZW5jb2RpbmcgPSBieXRlT2Zmc2V0XG4gICAgYnl0ZU9mZnNldCA9IDBcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0ID4gMHg3ZmZmZmZmZikge1xuICAgIGJ5dGVPZmZzZXQgPSAweDdmZmZmZmZmXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA8IC0weDgwMDAwMDAwKSB7XG4gICAgYnl0ZU9mZnNldCA9IC0weDgwMDAwMDAwXG4gIH1cbiAgYnl0ZU9mZnNldCA9ICtieXRlT2Zmc2V0IC8vIENvZXJjZSB0byBOdW1iZXIuXG4gIGlmIChudW1iZXJJc05hTihieXRlT2Zmc2V0KSkge1xuICAgIC8vIGJ5dGVPZmZzZXQ6IGl0IGl0J3MgdW5kZWZpbmVkLCBudWxsLCBOYU4sIFwiZm9vXCIsIGV0Yywgc2VhcmNoIHdob2xlIGJ1ZmZlclxuICAgIGJ5dGVPZmZzZXQgPSBkaXIgPyAwIDogKGJ1ZmZlci5sZW5ndGggLSAxKVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIGJ5dGVPZmZzZXQ6IG5lZ2F0aXZlIG9mZnNldHMgc3RhcnQgZnJvbSB0aGUgZW5kIG9mIHRoZSBidWZmZXJcbiAgaWYgKGJ5dGVPZmZzZXQgPCAwKSBieXRlT2Zmc2V0ID0gYnVmZmVyLmxlbmd0aCArIGJ5dGVPZmZzZXRcbiAgaWYgKGJ5dGVPZmZzZXQgPj0gYnVmZmVyLmxlbmd0aCkge1xuICAgIGlmIChkaXIpIHJldHVybiAtMVxuICAgIGVsc2UgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggLSAxXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA8IDApIHtcbiAgICBpZiAoZGlyKSBieXRlT2Zmc2V0ID0gMFxuICAgIGVsc2UgcmV0dXJuIC0xXG4gIH1cblxuICAvLyBOb3JtYWxpemUgdmFsXG4gIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgIHZhbCA9IEJ1ZmZlci5mcm9tKHZhbCwgZW5jb2RpbmcpXG4gIH1cblxuICAvLyBGaW5hbGx5LCBzZWFyY2ggZWl0aGVyIGluZGV4T2YgKGlmIGRpciBpcyB0cnVlKSBvciBsYXN0SW5kZXhPZlxuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHZhbCkpIHtcbiAgICAvLyBTcGVjaWFsIGNhc2U6IGxvb2tpbmcgZm9yIGVtcHR5IHN0cmluZy9idWZmZXIgYWx3YXlzIGZhaWxzXG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXlJbmRleE9mKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgdmFsID0gdmFsICYgMHhGRiAvLyBTZWFyY2ggZm9yIGEgYnl0ZSB2YWx1ZSBbMC0yNTVdXG4gICAgaWYgKHR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAoZGlyKSB7XG4gICAgICAgIHJldHVybiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIFt2YWxdLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcigndmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyJylcbn1cblxuZnVuY3Rpb24gYXJyYXlJbmRleE9mIChhcnIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcikge1xuICB2YXIgaW5kZXhTaXplID0gMVxuICB2YXIgYXJyTGVuZ3RoID0gYXJyLmxlbmd0aFxuICB2YXIgdmFsTGVuZ3RoID0gdmFsLmxlbmd0aFxuXG4gIGlmIChlbmNvZGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZW5jb2RpbmcgPSBTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICBpZiAoZW5jb2RpbmcgPT09ICd1Y3MyJyB8fCBlbmNvZGluZyA9PT0gJ3Vjcy0yJyB8fFxuICAgICAgICBlbmNvZGluZyA9PT0gJ3V0ZjE2bGUnIHx8IGVuY29kaW5nID09PSAndXRmLTE2bGUnKSB7XG4gICAgICBpZiAoYXJyLmxlbmd0aCA8IDIgfHwgdmFsLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgcmV0dXJuIC0xXG4gICAgICB9XG4gICAgICBpbmRleFNpemUgPSAyXG4gICAgICBhcnJMZW5ndGggLz0gMlxuICAgICAgdmFsTGVuZ3RoIC89IDJcbiAgICAgIGJ5dGVPZmZzZXQgLz0gMlxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWQgKGJ1ZiwgaSkge1xuICAgIGlmIChpbmRleFNpemUgPT09IDEpIHtcbiAgICAgIHJldHVybiBidWZbaV1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGJ1Zi5yZWFkVUludDE2QkUoaSAqIGluZGV4U2l6ZSlcbiAgICB9XG4gIH1cblxuICB2YXIgaVxuICBpZiAoZGlyKSB7XG4gICAgdmFyIGZvdW5kSW5kZXggPSAtMVxuICAgIGZvciAoaSA9IGJ5dGVPZmZzZXQ7IGkgPCBhcnJMZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHJlYWQoYXJyLCBpKSA9PT0gcmVhZCh2YWwsIGZvdW5kSW5kZXggPT09IC0xID8gMCA6IGkgLSBmb3VuZEluZGV4KSkge1xuICAgICAgICBpZiAoZm91bmRJbmRleCA9PT0gLTEpIGZvdW5kSW5kZXggPSBpXG4gICAgICAgIGlmIChpIC0gZm91bmRJbmRleCArIDEgPT09IHZhbExlbmd0aCkgcmV0dXJuIGZvdW5kSW5kZXggKiBpbmRleFNpemVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ICE9PSAtMSkgaSAtPSBpIC0gZm91bmRJbmRleFxuICAgICAgICBmb3VuZEluZGV4ID0gLTFcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGJ5dGVPZmZzZXQgKyB2YWxMZW5ndGggPiBhcnJMZW5ndGgpIGJ5dGVPZmZzZXQgPSBhcnJMZW5ndGggLSB2YWxMZW5ndGhcbiAgICBmb3IgKGkgPSBieXRlT2Zmc2V0OyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGZvdW5kID0gdHJ1ZVxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2YWxMZW5ndGg7IGorKykge1xuICAgICAgICBpZiAocmVhZChhcnIsIGkgKyBqKSAhPT0gcmVhZCh2YWwsIGopKSB7XG4gICAgICAgICAgZm91bmQgPSBmYWxzZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChmb3VuZCkgcmV0dXJuIGlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gLTFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbmNsdWRlcyA9IGZ1bmN0aW9uIGluY2x1ZGVzICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiB0aGlzLmluZGV4T2YodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykgIT09IC0xXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIGluZGV4T2YgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGJpZGlyZWN0aW9uYWxJbmRleE9mKHRoaXMsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIHRydWUpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUubGFzdEluZGV4T2YgPSBmdW5jdGlvbiBsYXN0SW5kZXhPZiAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZmFsc2UpXG59XG5cbmZ1bmN0aW9uIGhleFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgb2Zmc2V0ID0gTnVtYmVyKG9mZnNldCkgfHwgMFxuICB2YXIgcmVtYWluaW5nID0gYnVmLmxlbmd0aCAtIG9mZnNldFxuICBpZiAoIWxlbmd0aCkge1xuICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICB9IGVsc2Uge1xuICAgIGxlbmd0aCA9IE51bWJlcihsZW5ndGgpXG4gICAgaWYgKGxlbmd0aCA+IHJlbWFpbmluZykge1xuICAgICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gICAgfVxuICB9XG5cbiAgdmFyIHN0ckxlbiA9IHN0cmluZy5sZW5ndGhcblxuICBpZiAobGVuZ3RoID4gc3RyTGVuIC8gMikge1xuICAgIGxlbmd0aCA9IHN0ckxlbiAvIDJcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgdmFyIHBhcnNlZCA9IHBhcnNlSW50KHN0cmluZy5zdWJzdHIoaSAqIDIsIDIpLCAxNilcbiAgICBpZiAobnVtYmVySXNOYU4ocGFyc2VkKSkgcmV0dXJuIGlcbiAgICBidWZbb2Zmc2V0ICsgaV0gPSBwYXJzZWRcbiAgfVxuICByZXR1cm4gaVxufVxuXG5mdW5jdGlvbiB1dGY4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcih1dGY4VG9CeXRlcyhzdHJpbmcsIGJ1Zi5sZW5ndGggLSBvZmZzZXQpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBhc2NpaVdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIoYXNjaWlUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIGJhc2U2NFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIoYmFzZTY0VG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiB1Y3MyV3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcih1dGYxNmxlVG9CeXRlcyhzdHJpbmcsIGJ1Zi5sZW5ndGggLSBvZmZzZXQpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gd3JpdGUgKHN0cmluZywgb2Zmc2V0LCBsZW5ndGgsIGVuY29kaW5nKSB7XG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcpXG4gIGlmIChvZmZzZXQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVuY29kaW5nID0gJ3V0ZjgnXG4gICAgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgICBvZmZzZXQgPSAwXG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcsIGVuY29kaW5nKVxuICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgZW5jb2RpbmcgPSBvZmZzZXRcbiAgICBsZW5ndGggPSB0aGlzLmxlbmd0aFxuICAgIG9mZnNldCA9IDBcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZywgb2Zmc2V0WywgbGVuZ3RoXVssIGVuY29kaW5nXSlcbiAgfSBlbHNlIGlmIChpc0Zpbml0ZShvZmZzZXQpKSB7XG4gICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gICAgaWYgKGlzRmluaXRlKGxlbmd0aCkpIHtcbiAgICAgIGxlbmd0aCA9IGxlbmd0aCA+Pj4gMFxuICAgICAgaWYgKGVuY29kaW5nID09PSB1bmRlZmluZWQpIGVuY29kaW5nID0gJ3V0ZjgnXG4gICAgfSBlbHNlIHtcbiAgICAgIGVuY29kaW5nID0gbGVuZ3RoXG4gICAgICBsZW5ndGggPSB1bmRlZmluZWRcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0J1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkJ1xuICAgIClcbiAgfVxuXG4gIHZhciByZW1haW5pbmcgPSB0aGlzLmxlbmd0aCAtIG9mZnNldFxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQgfHwgbGVuZ3RoID4gcmVtYWluaW5nKSBsZW5ndGggPSByZW1haW5pbmdcblxuICBpZiAoKHN0cmluZy5sZW5ndGggPiAwICYmIChsZW5ndGggPCAwIHx8IG9mZnNldCA8IDApKSB8fCBvZmZzZXQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcycpXG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gaGV4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBhc2NpaVdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIC8vIFdhcm5pbmc6IG1heExlbmd0aCBub3QgdGFrZW4gaW50byBhY2NvdW50IGluIGJhc2U2NFdyaXRlXG4gICAgICAgIHJldHVybiBiYXNlNjRXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gdWNzMldyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgICAgICBlbmNvZGluZyA9ICgnJyArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTiAoKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ0J1ZmZlcicsXG4gICAgZGF0YTogQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyIHx8IHRoaXMsIDApXG4gIH1cbn1cblxuZnVuY3Rpb24gYmFzZTY0U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBpZiAoc3RhcnQgPT09IDAgJiYgZW5kID09PSBidWYubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGJhc2U2NC5mcm9tQnl0ZUFycmF5KGJ1ZilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmLnNsaWNlKHN0YXJ0LCBlbmQpKVxuICB9XG59XG5cbmZ1bmN0aW9uIHV0ZjhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcbiAgdmFyIHJlcyA9IFtdXG5cbiAgdmFyIGkgPSBzdGFydFxuICB3aGlsZSAoaSA8IGVuZCkge1xuICAgIHZhciBmaXJzdEJ5dGUgPSBidWZbaV1cbiAgICB2YXIgY29kZVBvaW50ID0gbnVsbFxuICAgIHZhciBieXRlc1BlclNlcXVlbmNlID0gKGZpcnN0Qnl0ZSA+IDB4RUYpXG4gICAgICA/IDRcbiAgICAgIDogKGZpcnN0Qnl0ZSA+IDB4REYpXG4gICAgICAgICAgPyAzXG4gICAgICAgICAgOiAoZmlyc3RCeXRlID4gMHhCRilcbiAgICAgICAgICAgICAgPyAyXG4gICAgICAgICAgICAgIDogMVxuXG4gICAgaWYgKGkgKyBieXRlc1BlclNlcXVlbmNlIDw9IGVuZCkge1xuICAgICAgdmFyIHNlY29uZEJ5dGUsIHRoaXJkQnl0ZSwgZm91cnRoQnl0ZSwgdGVtcENvZGVQb2ludFxuXG4gICAgICBzd2l0Y2ggKGJ5dGVzUGVyU2VxdWVuY2UpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmIChmaXJzdEJ5dGUgPCAweDgwKSB7XG4gICAgICAgICAgICBjb2RlUG9pbnQgPSBmaXJzdEJ5dGVcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHgxRikgPDwgMHg2IHwgKHNlY29uZEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweDdGKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgdGhpcmRCeXRlID0gYnVmW2kgKyAyXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwICYmICh0aGlyZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweEYpIDw8IDB4QyB8IChzZWNvbmRCeXRlICYgMHgzRikgPDwgMHg2IHwgKHRoaXJkQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4N0ZGICYmICh0ZW1wQ29kZVBvaW50IDwgMHhEODAwIHx8IHRlbXBDb2RlUG9pbnQgPiAweERGRkYpKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgdGhpcmRCeXRlID0gYnVmW2kgKyAyXVxuICAgICAgICAgIGZvdXJ0aEJ5dGUgPSBidWZbaSArIDNdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKHRoaXJkQnl0ZSAmIDB4QzApID09PSAweDgwICYmIChmb3VydGhCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHhGKSA8PCAweDEyIHwgKHNlY29uZEJ5dGUgJiAweDNGKSA8PCAweEMgfCAodGhpcmRCeXRlICYgMHgzRikgPDwgMHg2IHwgKGZvdXJ0aEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweEZGRkYgJiYgdGVtcENvZGVQb2ludCA8IDB4MTEwMDAwKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvZGVQb2ludCA9PT0gbnVsbCkge1xuICAgICAgLy8gd2UgZGlkIG5vdCBnZW5lcmF0ZSBhIHZhbGlkIGNvZGVQb2ludCBzbyBpbnNlcnQgYVxuICAgICAgLy8gcmVwbGFjZW1lbnQgY2hhciAoVStGRkZEKSBhbmQgYWR2YW5jZSBvbmx5IDEgYnl0ZVxuICAgICAgY29kZVBvaW50ID0gMHhGRkZEXG4gICAgICBieXRlc1BlclNlcXVlbmNlID0gMVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50ID4gMHhGRkZGKSB7XG4gICAgICAvLyBlbmNvZGUgdG8gdXRmMTYgKHN1cnJvZ2F0ZSBwYWlyIGRhbmNlKVxuICAgICAgY29kZVBvaW50IC09IDB4MTAwMDBcbiAgICAgIHJlcy5wdXNoKGNvZGVQb2ludCA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMClcbiAgICAgIGNvZGVQb2ludCA9IDB4REMwMCB8IGNvZGVQb2ludCAmIDB4M0ZGXG4gICAgfVxuXG4gICAgcmVzLnB1c2goY29kZVBvaW50KVxuICAgIGkgKz0gYnl0ZXNQZXJTZXF1ZW5jZVxuICB9XG5cbiAgcmV0dXJuIGRlY29kZUNvZGVQb2ludHNBcnJheShyZXMpXG59XG5cbi8vIEJhc2VkIG9uIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzIyNzQ3MjcyLzY4MDc0MiwgdGhlIGJyb3dzZXIgd2l0aFxuLy8gdGhlIGxvd2VzdCBsaW1pdCBpcyBDaHJvbWUsIHdpdGggMHgxMDAwMCBhcmdzLlxuLy8gV2UgZ28gMSBtYWduaXR1ZGUgbGVzcywgZm9yIHNhZmV0eVxudmFyIE1BWF9BUkdVTUVOVFNfTEVOR1RIID0gMHgxMDAwXG5cbmZ1bmN0aW9uIGRlY29kZUNvZGVQb2ludHNBcnJheSAoY29kZVBvaW50cykge1xuICB2YXIgbGVuID0gY29kZVBvaW50cy5sZW5ndGhcbiAgaWYgKGxlbiA8PSBNQVhfQVJHVU1FTlRTX0xFTkdUSCkge1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgY29kZVBvaW50cykgLy8gYXZvaWQgZXh0cmEgc2xpY2UoKVxuICB9XG5cbiAgLy8gRGVjb2RlIGluIGNodW5rcyB0byBhdm9pZCBcImNhbGwgc3RhY2sgc2l6ZSBleGNlZWRlZFwiLlxuICB2YXIgcmVzID0gJydcbiAgdmFyIGkgPSAwXG4gIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoXG4gICAgICBTdHJpbmcsXG4gICAgICBjb2RlUG9pbnRzLnNsaWNlKGksIGkgKz0gTUFYX0FSR1VNRU5UU19MRU5HVEgpXG4gICAgKVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gYXNjaWlTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciByZXQgPSAnJ1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0gJiAweDdGKVxuICB9XG4gIHJldHVybiByZXRcbn1cblxuZnVuY3Rpb24gbGF0aW4xU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgcmV0ID0gJydcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldKVxuICB9XG4gIHJldHVybiByZXRcbn1cblxuZnVuY3Rpb24gaGV4U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgbGVuID0gYnVmLmxlbmd0aFxuXG4gIGlmICghc3RhcnQgfHwgc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgaWYgKCFlbmQgfHwgZW5kIDwgMCB8fCBlbmQgPiBsZW4pIGVuZCA9IGxlblxuXG4gIHZhciBvdXQgPSAnJ1xuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIG91dCArPSBoZXhTbGljZUxvb2t1cFRhYmxlW2J1ZltpXV1cbiAgfVxuICByZXR1cm4gb3V0XG59XG5cbmZ1bmN0aW9uIHV0ZjE2bGVTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciBieXRlcyA9IGJ1Zi5zbGljZShzdGFydCwgZW5kKVxuICB2YXIgcmVzID0gJydcbiAgLy8gSWYgYnl0ZXMubGVuZ3RoIGlzIG9kZCwgdGhlIGxhc3QgOCBiaXRzIG11c3QgYmUgaWdub3JlZCAoc2FtZSBhcyBub2RlLmpzKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aCAtIDE7IGkgKz0gMikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldICsgKGJ5dGVzW2kgKyAxXSAqIDI1NikpXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24gc2xpY2UgKHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIHN0YXJ0ID0gfn5zdGFydFxuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IH5+ZW5kXG5cbiAgaWYgKHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ICs9IGxlblxuICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gMFxuICB9IGVsc2UgaWYgKHN0YXJ0ID4gbGVuKSB7XG4gICAgc3RhcnQgPSBsZW5cbiAgfVxuXG4gIGlmIChlbmQgPCAwKSB7XG4gICAgZW5kICs9IGxlblxuICAgIGlmIChlbmQgPCAwKSBlbmQgPSAwXG4gIH0gZWxzZSBpZiAoZW5kID4gbGVuKSB7XG4gICAgZW5kID0gbGVuXG4gIH1cblxuICBpZiAoZW5kIDwgc3RhcnQpIGVuZCA9IHN0YXJ0XG5cbiAgdmFyIG5ld0J1ZiA9IHRoaXMuc3ViYXJyYXkoc3RhcnQsIGVuZClcbiAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2VcbiAgT2JqZWN0LnNldFByb3RvdHlwZU9mKG5ld0J1ZiwgQnVmZmVyLnByb3RvdHlwZSlcblxuICByZXR1cm4gbmV3QnVmXG59XG5cbi8qXG4gKiBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGJ1ZmZlciBpc24ndCB0cnlpbmcgdG8gd3JpdGUgb3V0IG9mIGJvdW5kcy5cbiAqL1xuZnVuY3Rpb24gY2hlY2tPZmZzZXQgKG9mZnNldCwgZXh0LCBsZW5ndGgpIHtcbiAgaWYgKChvZmZzZXQgJSAxKSAhPT0gMCB8fCBvZmZzZXQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb2Zmc2V0IGlzIG5vdCB1aW50JylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVaW50TEUgPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludExFID0gZnVuY3Rpb24gcmVhZFVJbnRMRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIGldICogbXVsXG4gIH1cblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVpbnRCRSA9XG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50QkUgPSBmdW5jdGlvbiByZWFkVUludEJFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcbiAgfVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aF1cbiAgdmFyIG11bCA9IDFcbiAgd2hpbGUgKGJ5dGVMZW5ndGggPiAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgLS1ieXRlTGVuZ3RoXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVaW50OCA9XG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50OCA9IGZ1bmN0aW9uIHJlYWRVSW50OCAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAxLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIHRoaXNbb2Zmc2V0XVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVaW50MTZMRSA9XG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZMRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIHRoaXNbb2Zmc2V0XSB8ICh0aGlzW29mZnNldCArIDFdIDw8IDgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVpbnQxNkJFID1cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkJFID0gZnVuY3Rpb24gcmVhZFVJbnQxNkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSA8PCA4KSB8IHRoaXNbb2Zmc2V0ICsgMV1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludDMyTEUgPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyTEUgPSBmdW5jdGlvbiByZWFkVUludDMyTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICgodGhpc1tvZmZzZXRdKSB8XG4gICAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KSB8XG4gICAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCAxNikpICtcbiAgICAgICh0aGlzW29mZnNldCArIDNdICogMHgxMDAwMDAwKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVaW50MzJCRSA9XG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MzJCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MzJCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSAqIDB4MTAwMDAwMCkgK1xuICAgICgodGhpc1tvZmZzZXQgKyAxXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDgpIHxcbiAgICB0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRMRSA9IGZ1bmN0aW9uIHJlYWRJbnRMRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIGldICogbXVsXG4gIH1cbiAgbXVsICo9IDB4ODBcblxuICBpZiAodmFsID49IG11bCkgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50QkUgPSBmdW5jdGlvbiByZWFkSW50QkUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoXG4gIHZhciBtdWwgPSAxXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIC0taV1cbiAgd2hpbGUgKGkgPiAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgLS1pXSAqIG11bFxuICB9XG4gIG11bCAqPSAweDgwXG5cbiAgaWYgKHZhbCA+PSBtdWwpIHZhbCAtPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aClcblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDggPSBmdW5jdGlvbiByZWFkSW50OCAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAxLCB0aGlzLmxlbmd0aClcbiAgaWYgKCEodGhpc1tvZmZzZXRdICYgMHg4MCkpIHJldHVybiAodGhpc1tvZmZzZXRdKVxuICByZXR1cm4gKCgweGZmIC0gdGhpc1tvZmZzZXRdICsgMSkgKiAtMSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MTZMRSA9IGZ1bmN0aW9uIHJlYWRJbnQxNkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdIHwgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOClcbiAgcmV0dXJuICh2YWwgJiAweDgwMDApID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkJFID0gZnVuY3Rpb24gcmVhZEludDE2QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIDFdIHwgKHRoaXNbb2Zmc2V0XSA8PCA4KVxuICByZXR1cm4gKHZhbCAmIDB4ODAwMCkgPyB2YWwgfCAweEZGRkYwMDAwIDogdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDMyTEUgPSBmdW5jdGlvbiByZWFkSW50MzJMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDgpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDNdIDw8IDI0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkJFID0gZnVuY3Rpb24gcmVhZEludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gPDwgMjQpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDgpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRMRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdExFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgdHJ1ZSwgMjMsIDQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEZsb2F0QkUgPSBmdW5jdGlvbiByZWFkRmxvYXRCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCAyMywgNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRG91YmxlTEUgPSBmdW5jdGlvbiByZWFkRG91YmxlTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgOCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCA1MiwgOClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRG91YmxlQkUgPSBmdW5jdGlvbiByZWFkRG91YmxlQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgOCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCBmYWxzZSwgNTIsIDgpXG59XG5cbmZ1bmN0aW9uIGNoZWNrSW50IChidWYsIHZhbHVlLCBvZmZzZXQsIGV4dCwgbWF4LCBtaW4pIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYnVmKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJidWZmZXJcIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJylcbiAgaWYgKHZhbHVlID4gbWF4IHx8IHZhbHVlIDwgbWluKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJ2YWx1ZVwiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKVxuICBpZiAob2Zmc2V0ICsgZXh0ID4gYnVmLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVaW50TEUgPVxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlVUludExFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBtYXhCeXRlcyA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKSAtIDFcbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBtYXhCeXRlcywgMClcbiAgfVxuXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB0aGlzW29mZnNldF0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB0aGlzW29mZnNldCArIGldID0gKHZhbHVlIC8gbXVsKSAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVaW50QkUgPVxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlVUludEJFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBtYXhCeXRlcyA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKSAtIDFcbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBtYXhCeXRlcywgMClcbiAgfVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aCAtIDFcbiAgdmFyIG11bCA9IDFcbiAgdGhpc1tvZmZzZXQgKyBpXSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoLS1pID49IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB0aGlzW29mZnNldCArIGldID0gKHZhbHVlIC8gbXVsKSAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVaW50OCA9XG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDggPSBmdW5jdGlvbiB3cml0ZVVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHhmZiwgMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVpbnQxNkxFID1cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweGZmZmYsIDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVaW50MTZCRSA9XG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnQxNkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVWludDMyTEUgPVxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4ZmZmZmZmZmYsIDApXG4gIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgPj4+IDI0KVxuICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiAxNilcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVpbnQzMkJFID1cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweGZmZmZmZmZmLCAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDI0KVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlSW50TEUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIGxpbWl0ID0gTWF0aC5wb3coMiwgKDggKiBieXRlTGVuZ3RoKSAtIDEpXG5cbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBsaW1pdCAtIDEsIC1saW1pdClcbiAgfVxuXG4gIHZhciBpID0gMFxuICB2YXIgbXVsID0gMVxuICB2YXIgc3ViID0gMFxuICB0aGlzW29mZnNldF0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICBpZiAodmFsdWUgPCAwICYmIHN1YiA9PT0gMCAmJiB0aGlzW29mZnNldCArIGkgLSAxXSAhPT0gMCkge1xuICAgICAgc3ViID0gMVxuICAgIH1cbiAgICB0aGlzW29mZnNldCArIGldID0gKCh2YWx1ZSAvIG11bCkgPj4gMCkgLSBzdWIgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50QkUgPSBmdW5jdGlvbiB3cml0ZUludEJFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBsaW1pdCA9IE1hdGgucG93KDIsICg4ICogYnl0ZUxlbmd0aCkgLSAxKVxuXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbGltaXQgLSAxLCAtbGltaXQpXG4gIH1cblxuICB2YXIgaSA9IGJ5dGVMZW5ndGggLSAxXG4gIHZhciBtdWwgPSAxXG4gIHZhciBzdWIgPSAwXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgaWYgKHZhbHVlIDwgMCAmJiBzdWIgPT09IDAgJiYgdGhpc1tvZmZzZXQgKyBpICsgMV0gIT09IDApIHtcbiAgICAgIHN1YiA9IDFcbiAgICB9XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICgodmFsdWUgLyBtdWwpID4+IDApIC0gc3ViICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDggPSBmdW5jdGlvbiB3cml0ZUludDggKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAxLCAweDdmLCAtMHg4MClcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmICsgdmFsdWUgKyAxXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHg3ZmZmLCAtMHg4MDAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZCRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZUludDMyTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgPj4+IDI0KVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlSW50MzJCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKVxuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZmZmZmYgKyB2YWx1ZSArIDFcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5mdW5jdGlvbiBjaGVja0lFRUU3NTQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAob2Zmc2V0ICsgZXh0ID4gYnVmLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG4gIGlmIChvZmZzZXQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbn1cblxuZnVuY3Rpb24gd3JpdGVGbG9hdCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tJRUVFNzU0KGJ1ZiwgdmFsdWUsIG9mZnNldCwgNCwgMy40MDI4MjM0NjYzODUyODg2ZSszOCwgLTMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgpXG4gIH1cbiAgaWVlZTc1NC53cml0ZShidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgMjMsIDQpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVGbG9hdExFID0gZnVuY3Rpb24gd3JpdGVGbG9hdExFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlLCBub0Fzc2VydClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUZsb2F0QkUgPSBmdW5jdGlvbiB3cml0ZUZsb2F0QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZUZsb2F0KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlLCBub0Fzc2VydClcbn1cblxuZnVuY3Rpb24gd3JpdGVEb3VibGUgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDgsIDEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4LCAtMS43OTc2OTMxMzQ4NjIzMTU3RSszMDgpXG4gIH1cbiAgaWVlZTc1NC53cml0ZShidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgNTIsIDgpXG4gIHJldHVybiBvZmZzZXQgKyA4XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVMRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlLCBub0Fzc2VydClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZURvdWJsZUJFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRG91YmxlKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlLCBub0Fzc2VydClcbn1cblxuLy8gY29weSh0YXJnZXRCdWZmZXIsIHRhcmdldFN0YXJ0PTAsIHNvdXJjZVN0YXJ0PTAsIHNvdXJjZUVuZD1idWZmZXIubGVuZ3RoKVxuQnVmZmVyLnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gY29weSAodGFyZ2V0LCB0YXJnZXRTdGFydCwgc3RhcnQsIGVuZCkge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0YXJnZXQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdhcmd1bWVudCBzaG91bGQgYmUgYSBCdWZmZXInKVxuICBpZiAoIXN0YXJ0KSBzdGFydCA9IDBcbiAgaWYgKCFlbmQgJiYgZW5kICE9PSAwKSBlbmQgPSB0aGlzLmxlbmd0aFxuICBpZiAodGFyZ2V0U3RhcnQgPj0gdGFyZ2V0Lmxlbmd0aCkgdGFyZ2V0U3RhcnQgPSB0YXJnZXQubGVuZ3RoXG4gIGlmICghdGFyZ2V0U3RhcnQpIHRhcmdldFN0YXJ0ID0gMFxuICBpZiAoZW5kID4gMCAmJiBlbmQgPCBzdGFydCkgZW5kID0gc3RhcnRcblxuICAvLyBDb3B5IDAgYnl0ZXM7IHdlJ3JlIGRvbmVcbiAgaWYgKGVuZCA9PT0gc3RhcnQpIHJldHVybiAwXG4gIGlmICh0YXJnZXQubGVuZ3RoID09PSAwIHx8IHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm4gMFxuXG4gIC8vIEZhdGFsIGVycm9yIGNvbmRpdGlvbnNcbiAgaWYgKHRhcmdldFN0YXJ0IDwgMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzJylcbiAgfVxuICBpZiAoc3RhcnQgPCAwIHx8IHN0YXJ0ID49IHRoaXMubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbiAgaWYgKGVuZCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcycpXG5cbiAgLy8gQXJlIHdlIG9vYj9cbiAgaWYgKGVuZCA+IHRoaXMubGVuZ3RoKSBlbmQgPSB0aGlzLmxlbmd0aFxuICBpZiAodGFyZ2V0Lmxlbmd0aCAtIHRhcmdldFN0YXJ0IDwgZW5kIC0gc3RhcnQpIHtcbiAgICBlbmQgPSB0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgKyBzdGFydFxuICB9XG5cbiAgdmFyIGxlbiA9IGVuZCAtIHN0YXJ0XG5cbiAgaWYgKHRoaXMgPT09IHRhcmdldCAmJiB0eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIFVzZSBidWlsdC1pbiB3aGVuIGF2YWlsYWJsZSwgbWlzc2luZyBmcm9tIElFMTFcbiAgICB0aGlzLmNvcHlXaXRoaW4odGFyZ2V0U3RhcnQsIHN0YXJ0LCBlbmQpXG4gIH0gZWxzZSB7XG4gICAgVWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoXG4gICAgICB0YXJnZXQsXG4gICAgICB0aGlzLnN1YmFycmF5KHN0YXJ0LCBlbmQpLFxuICAgICAgdGFyZ2V0U3RhcnRcbiAgICApXG4gIH1cblxuICByZXR1cm4gbGVuXG59XG5cbi8vIFVzYWdlOlxuLy8gICAgYnVmZmVyLmZpbGwobnVtYmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChidWZmZXJbLCBvZmZzZXRbLCBlbmRdXSlcbi8vICAgIGJ1ZmZlci5maWxsKHN0cmluZ1ssIG9mZnNldFssIGVuZF1dWywgZW5jb2RpbmddKVxuQnVmZmVyLnByb3RvdHlwZS5maWxsID0gZnVuY3Rpb24gZmlsbCAodmFsLCBzdGFydCwgZW5kLCBlbmNvZGluZykge1xuICAvLyBIYW5kbGUgc3RyaW5nIGNhc2VzOlxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAodHlwZW9mIHN0YXJ0ID09PSAnc3RyaW5nJykge1xuICAgICAgZW5jb2RpbmcgPSBzdGFydFxuICAgICAgc3RhcnQgPSAwXG4gICAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGVuZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gZW5kXG4gICAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICAgIH1cbiAgICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZycgJiYgIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgIH1cbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdmFyIGNvZGUgPSB2YWwuY2hhckNvZGVBdCgwKVxuICAgICAgaWYgKChlbmNvZGluZyA9PT0gJ3V0ZjgnICYmIGNvZGUgPCAxMjgpIHx8XG4gICAgICAgICAgZW5jb2RpbmcgPT09ICdsYXRpbjEnKSB7XG4gICAgICAgIC8vIEZhc3QgcGF0aDogSWYgYHZhbGAgZml0cyBpbnRvIGEgc2luZ2xlIGJ5dGUsIHVzZSB0aGF0IG51bWVyaWMgdmFsdWUuXG4gICAgICAgIHZhbCA9IGNvZGVcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICB2YWwgPSB2YWwgJiAyNTVcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnYm9vbGVhbicpIHtcbiAgICB2YWwgPSBOdW1iZXIodmFsKVxuICB9XG5cbiAgLy8gSW52YWxpZCByYW5nZXMgYXJlIG5vdCBzZXQgdG8gYSBkZWZhdWx0LCBzbyBjYW4gcmFuZ2UgY2hlY2sgZWFybHkuXG4gIGlmIChzdGFydCA8IDAgfHwgdGhpcy5sZW5ndGggPCBzdGFydCB8fCB0aGlzLmxlbmd0aCA8IGVuZCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdPdXQgb2YgcmFuZ2UgaW5kZXgnKVxuICB9XG5cbiAgaWYgKGVuZCA8PSBzdGFydCkge1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBzdGFydCA9IHN0YXJ0ID4+PiAwXG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gdGhpcy5sZW5ndGggOiBlbmQgPj4+IDBcblxuICBpZiAoIXZhbCkgdmFsID0gMFxuXG4gIHZhciBpXG4gIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICAgIHRoaXNbaV0gPSB2YWxcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGJ5dGVzID0gQnVmZmVyLmlzQnVmZmVyKHZhbClcbiAgICAgID8gdmFsXG4gICAgICA6IEJ1ZmZlci5mcm9tKHZhbCwgZW5jb2RpbmcpXG4gICAgdmFyIGxlbiA9IGJ5dGVzLmxlbmd0aFxuICAgIGlmIChsZW4gPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSB2YWx1ZSBcIicgKyB2YWwgK1xuICAgICAgICAnXCIgaXMgaW52YWxpZCBmb3IgYXJndW1lbnQgXCJ2YWx1ZVwiJylcbiAgICB9XG4gICAgZm9yIChpID0gMDsgaSA8IGVuZCAtIHN0YXJ0OyArK2kpIHtcbiAgICAgIHRoaXNbaSArIHN0YXJ0XSA9IGJ5dGVzW2kgJSBsZW5dXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuLy8gSEVMUEVSIEZVTkNUSU9OU1xuLy8gPT09PT09PT09PT09PT09PVxuXG52YXIgSU5WQUxJRF9CQVNFNjRfUkUgPSAvW14rLzAtOUEtWmEtei1fXS9nXG5cbmZ1bmN0aW9uIGJhc2U2NGNsZWFuIChzdHIpIHtcbiAgLy8gTm9kZSB0YWtlcyBlcXVhbCBzaWducyBhcyBlbmQgb2YgdGhlIEJhc2U2NCBlbmNvZGluZ1xuICBzdHIgPSBzdHIuc3BsaXQoJz0nKVswXVxuICAvLyBOb2RlIHN0cmlwcyBvdXQgaW52YWxpZCBjaGFyYWN0ZXJzIGxpa2UgXFxuIGFuZCBcXHQgZnJvbSB0aGUgc3RyaW5nLCBiYXNlNjQtanMgZG9lcyBub3RcbiAgc3RyID0gc3RyLnRyaW0oKS5yZXBsYWNlKElOVkFMSURfQkFTRTY0X1JFLCAnJylcbiAgLy8gTm9kZSBjb252ZXJ0cyBzdHJpbmdzIHdpdGggbGVuZ3RoIDwgMiB0byAnJ1xuICBpZiAoc3RyLmxlbmd0aCA8IDIpIHJldHVybiAnJ1xuICAvLyBOb2RlIGFsbG93cyBmb3Igbm9uLXBhZGRlZCBiYXNlNjQgc3RyaW5ncyAobWlzc2luZyB0cmFpbGluZyA9PT0pLCBiYXNlNjQtanMgZG9lcyBub3RcbiAgd2hpbGUgKHN0ci5sZW5ndGggJSA0ICE9PSAwKSB7XG4gICAgc3RyID0gc3RyICsgJz0nXG4gIH1cbiAgcmV0dXJuIHN0clxufVxuXG5mdW5jdGlvbiB1dGY4VG9CeXRlcyAoc3RyaW5nLCB1bml0cykge1xuICB1bml0cyA9IHVuaXRzIHx8IEluZmluaXR5XG4gIHZhciBjb2RlUG9pbnRcbiAgdmFyIGxlbmd0aCA9IHN0cmluZy5sZW5ndGhcbiAgdmFyIGxlYWRTdXJyb2dhdGUgPSBudWxsXG4gIHZhciBieXRlcyA9IFtdXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGNvZGVQb2ludCA9IHN0cmluZy5jaGFyQ29kZUF0KGkpXG5cbiAgICAvLyBpcyBzdXJyb2dhdGUgY29tcG9uZW50XG4gICAgaWYgKGNvZGVQb2ludCA+IDB4RDdGRiAmJiBjb2RlUG9pbnQgPCAweEUwMDApIHtcbiAgICAgIC8vIGxhc3QgY2hhciB3YXMgYSBsZWFkXG4gICAgICBpZiAoIWxlYWRTdXJyb2dhdGUpIHtcbiAgICAgICAgLy8gbm8gbGVhZCB5ZXRcbiAgICAgICAgaWYgKGNvZGVQb2ludCA+IDB4REJGRikge1xuICAgICAgICAgIC8vIHVuZXhwZWN0ZWQgdHJhaWxcbiAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKGkgKyAxID09PSBsZW5ndGgpIHtcbiAgICAgICAgICAvLyB1bnBhaXJlZCBsZWFkXG4gICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHZhbGlkIGxlYWRcbiAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IGNvZGVQb2ludFxuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIDIgbGVhZHMgaW4gYSByb3dcbiAgICAgIGlmIChjb2RlUG9pbnQgPCAweERDMDApIHtcbiAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnRcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gdmFsaWQgc3Vycm9nYXRlIHBhaXJcbiAgICAgIGNvZGVQb2ludCA9IChsZWFkU3Vycm9nYXRlIC0gMHhEODAwIDw8IDEwIHwgY29kZVBvaW50IC0gMHhEQzAwKSArIDB4MTAwMDBcbiAgICB9IGVsc2UgaWYgKGxlYWRTdXJyb2dhdGUpIHtcbiAgICAgIC8vIHZhbGlkIGJtcCBjaGFyLCBidXQgbGFzdCBjaGFyIHdhcyBhIGxlYWRcbiAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgIH1cblxuICAgIGxlYWRTdXJyb2dhdGUgPSBudWxsXG5cbiAgICAvLyBlbmNvZGUgdXRmOFxuICAgIGlmIChjb2RlUG9pbnQgPCAweDgwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDEpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goY29kZVBvaW50KVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHg4MDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiB8IDB4QzAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDEwMDAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDMpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweEMgfCAweEUwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2ICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDExMDAwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSA0KSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHgxMiB8IDB4RjAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweEMgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29kZSBwb2ludCcpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVzXG59XG5cbmZ1bmN0aW9uIGFzY2lpVG9CeXRlcyAoc3RyKSB7XG4gIHZhciBieXRlQXJyYXkgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIC8vIE5vZGUncyBjb2RlIHNlZW1zIHRvIGJlIGRvaW5nIHRoaXMgYW5kIG5vdCAmIDB4N0YuLlxuICAgIGJ5dGVBcnJheS5wdXNoKHN0ci5jaGFyQ29kZUF0KGkpICYgMHhGRilcbiAgfVxuICByZXR1cm4gYnl0ZUFycmF5XG59XG5cbmZ1bmN0aW9uIHV0ZjE2bGVUb0J5dGVzIChzdHIsIHVuaXRzKSB7XG4gIHZhciBjLCBoaSwgbG9cbiAgdmFyIGJ5dGVBcnJheSA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKCh1bml0cyAtPSAyKSA8IDApIGJyZWFrXG5cbiAgICBjID0gc3RyLmNoYXJDb2RlQXQoaSlcbiAgICBoaSA9IGMgPj4gOFxuICAgIGxvID0gYyAlIDI1NlxuICAgIGJ5dGVBcnJheS5wdXNoKGxvKVxuICAgIGJ5dGVBcnJheS5wdXNoKGhpKVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiBiYXNlNjRUb0J5dGVzIChzdHIpIHtcbiAgcmV0dXJuIGJhc2U2NC50b0J5dGVBcnJheShiYXNlNjRjbGVhbihzdHIpKVxufVxuXG5mdW5jdGlvbiBibGl0QnVmZmVyIChzcmMsIGRzdCwgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGlmICgoaSArIG9mZnNldCA+PSBkc3QubGVuZ3RoKSB8fCAoaSA+PSBzcmMubGVuZ3RoKSkgYnJlYWtcbiAgICBkc3RbaSArIG9mZnNldF0gPSBzcmNbaV1cbiAgfVxuICByZXR1cm4gaVxufVxuXG4vLyBBcnJheUJ1ZmZlciBvciBVaW50OEFycmF5IG9iamVjdHMgZnJvbSBvdGhlciBjb250ZXh0cyAoaS5lLiBpZnJhbWVzKSBkbyBub3QgcGFzc1xuLy8gdGhlIGBpbnN0YW5jZW9mYCBjaGVjayBidXQgdGhleSBzaG91bGQgYmUgdHJlYXRlZCBhcyBvZiB0aGF0IHR5cGUuXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL2lzc3Vlcy8xNjZcbmZ1bmN0aW9uIGlzSW5zdGFuY2UgKG9iaiwgdHlwZSkge1xuICByZXR1cm4gb2JqIGluc3RhbmNlb2YgdHlwZSB8fFxuICAgIChvYmogIT0gbnVsbCAmJiBvYmouY29uc3RydWN0b3IgIT0gbnVsbCAmJiBvYmouY29uc3RydWN0b3IubmFtZSAhPSBudWxsICYmXG4gICAgICBvYmouY29uc3RydWN0b3IubmFtZSA9PT0gdHlwZS5uYW1lKVxufVxuZnVuY3Rpb24gbnVtYmVySXNOYU4gKG9iaikge1xuICAvLyBGb3IgSUUxMSBzdXBwb3J0XG4gIHJldHVybiBvYmogIT09IG9iaiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNlbGYtY29tcGFyZVxufVxuXG4vLyBDcmVhdGUgbG9va3VwIHRhYmxlIGZvciBgdG9TdHJpbmcoJ2hleCcpYFxuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9pc3N1ZXMvMjE5XG52YXIgaGV4U2xpY2VMb29rdXBUYWJsZSA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciBhbHBoYWJldCA9ICcwMTIzNDU2Nzg5YWJjZGVmJ1xuICB2YXIgdGFibGUgPSBuZXcgQXJyYXkoMjU2KVxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyArK2kpIHtcbiAgICB2YXIgaTE2ID0gaSAqIDE2XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCAxNjsgKytqKSB7XG4gICAgICB0YWJsZVtpMTYgKyBqXSA9IGFscGhhYmV0W2ldICsgYWxwaGFiZXRbal1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRhYmxlXG59KSgpXG4iLCAiLyohXG4gQ29weXJpZ2h0IChjKSBQZWN1bGlhciBWZW50dXJlcywgTExDXG4qL1xuXG5pbXBvcnQgKiBhcyBjb3JlIGZyb20gJ3dlYmNyeXB0by1jb3JlJztcbmltcG9ydCB7IEJ1ZmZlclNvdXJjZUNvbnZlcnRlciBhcyBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIkMSB9IGZyb20gJ3dlYmNyeXB0by1jb3JlJztcbmV4cG9ydCB7IENyeXB0b0tleSB9IGZyb20gJ3dlYmNyeXB0by1jb3JlJztcbmltcG9ydCB7IEJ1ZmZlciBhcyBCdWZmZXIkMSB9IGZyb20gJ2J1ZmZlcic7XG5pbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgKiBhcyBwcm9jZXNzIGZyb20gJ3Byb2Nlc3MnO1xuaW1wb3J0IHsgX19kZWNvcmF0ZSB9IGZyb20gJ3RzbGliJztcbmltcG9ydCB7IEpzb25Qcm9wLCBKc29uUHJvcFR5cGVzLCBKc29uU2VyaWFsaXplciwgSnNvblBhcnNlciB9IGZyb20gJ0BwZWN1bGlhci9qc29uLXNjaGVtYSc7XG5pbXBvcnQgeyBDb252ZXJ0LCBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIgfSBmcm9tICdwdnRzdXRpbHMnO1xuaW1wb3J0IHsgQXNuUGFyc2VyLCBBc25TZXJpYWxpemVyLCBBc25Db252ZXJ0IH0gZnJvbSAnQHBlY3VsaWFyL2FzbjEtc2NoZW1hJztcblxuY29uc3QgSnNvbkJhc2U2NFVybENvbnZlcnRlciA9IHtcbiAgICBmcm9tSlNPTjogKHZhbHVlKSA9PiBCdWZmZXIkMS5mcm9tKENvbnZlcnQuRnJvbUJhc2U2NFVybCh2YWx1ZSkpLFxuICAgIHRvSlNPTjogKHZhbHVlKSA9PiBDb252ZXJ0LlRvQmFzZTY0VXJsKHZhbHVlKSxcbn07XG5cbmNsYXNzIENyeXB0b0tleSBleHRlbmRzIGNvcmUuQ3J5cHRvS2V5IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5kYXRhID0gQnVmZmVyJDEuYWxsb2MoMCk7XG4gICAgICAgIHRoaXMuYWxnb3JpdGhtID0geyBuYW1lOiBcIlwiIH07XG4gICAgICAgIHRoaXMuZXh0cmFjdGFibGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy50eXBlID0gXCJzZWNyZXRcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXTtcbiAgICAgICAgdGhpcy5rdHkgPSBcIm9jdFwiO1xuICAgICAgICB0aGlzLmFsZyA9IFwiXCI7XG4gICAgfVxufVxuX19kZWNvcmF0ZShbXG4gICAgSnNvblByb3AoeyBuYW1lOiBcImV4dFwiLCB0eXBlOiBKc29uUHJvcFR5cGVzLkJvb2xlYW4sIG9wdGlvbmFsOiB0cnVlIH0pXG5dLCBDcnlwdG9LZXkucHJvdG90eXBlLCBcImV4dHJhY3RhYmxlXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwia2V5X29wc1wiLCB0eXBlOiBKc29uUHJvcFR5cGVzLlN0cmluZywgcmVwZWF0ZWQ6IHRydWUsIG9wdGlvbmFsOiB0cnVlIH0pXG5dLCBDcnlwdG9LZXkucHJvdG90eXBlLCBcInVzYWdlc1wiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgSnNvblByb3AoeyB0eXBlOiBKc29uUHJvcFR5cGVzLlN0cmluZyB9KVxuXSwgQ3J5cHRvS2V5LnByb3RvdHlwZSwgXCJrdHlcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEpzb25Qcm9wKHsgdHlwZTogSnNvblByb3BUeXBlcy5TdHJpbmcsIG9wdGlvbmFsOiB0cnVlIH0pXG5dLCBDcnlwdG9LZXkucHJvdG90eXBlLCBcImFsZ1wiLCB2b2lkIDApO1xuXG5jbGFzcyBTeW1tZXRyaWNLZXkgZXh0ZW5kcyBDcnlwdG9LZXkge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLmt0eSA9IFwib2N0XCI7XG4gICAgICAgIHRoaXMudHlwZSA9IFwic2VjcmV0XCI7XG4gICAgfVxufVxuXG5jbGFzcyBBc3ltbWV0cmljS2V5IGV4dGVuZHMgQ3J5cHRvS2V5IHtcbn1cblxuY2xhc3MgQWVzQ3J5cHRvS2V5IGV4dGVuZHMgU3ltbWV0cmljS2V5IHtcbiAgICBnZXQgYWxnKCkge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcIkFFUy1DQkNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYEEke3RoaXMuYWxnb3JpdGhtLmxlbmd0aH1DQkNgO1xuICAgICAgICAgICAgY2FzZSBcIkFFUy1DVFJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYEEke3RoaXMuYWxnb3JpdGhtLmxlbmd0aH1DVFJgO1xuICAgICAgICAgICAgY2FzZSBcIkFFUy1HQ01cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYEEke3RoaXMuYWxnb3JpdGhtLmxlbmd0aH1HQ01gO1xuICAgICAgICAgICAgY2FzZSBcIkFFUy1LV1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgQSR7dGhpcy5hbGdvcml0aG0ubGVuZ3RofUtXYDtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtQ01BQ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgQSR7dGhpcy5hbGdvcml0aG0ubGVuZ3RofUNNQUNgO1xuICAgICAgICAgICAgY2FzZSBcIkFFUy1FQ0JcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYEEke3RoaXMuYWxnb3JpdGhtLmxlbmd0aH1FQ0JgO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5BbGdvcml0aG1FcnJvcihcIlVuc3VwcG9ydGVkIGFsZ29yaXRobSBuYW1lXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNldCBhbGcodmFsdWUpIHtcbiAgICB9XG59XG5fX2RlY29yYXRlKFtcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwia1wiLCBjb252ZXJ0ZXI6IEpzb25CYXNlNjRVcmxDb252ZXJ0ZXIgfSlcbl0sIEFlc0NyeXB0b0tleS5wcm90b3R5cGUsIFwiZGF0YVwiLCB2b2lkIDApO1xuXG5jbGFzcyBBZXNDcnlwdG8ge1xuICAgIHN0YXRpYyBhc3luYyBnZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gbmV3IEFlc0NyeXB0b0tleSgpO1xuICAgICAgICBrZXkuYWxnb3JpdGhtID0gYWxnb3JpdGhtO1xuICAgICAgICBrZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAga2V5LnVzYWdlcyA9IGtleVVzYWdlcztcbiAgICAgICAga2V5LmRhdGEgPSBjcnlwdG8ucmFuZG9tQnl0ZXMoYWxnb3JpdGhtLmxlbmd0aCA+PiAzKTtcbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICBpZiAoIShrZXkgaW5zdGFuY2VvZiBBZXNDcnlwdG9LZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJrZXk6IElzIG5vdCBBZXNDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChmb3JtYXQudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcImp3a1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBKc29uU2VyaWFsaXplci50b0pTT04oa2V5KTtcbiAgICAgICAgICAgIGNhc2UgXCJyYXdcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoa2V5LmRhdGEpLmJ1ZmZlcjtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJmb3JtYXQ6IE11c3QgYmUgJ2p3aycgb3IgJ3JhdydcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBsZXQga2V5O1xuICAgICAgICBzd2l0Y2ggKGZvcm1hdC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiandrXCI6XG4gICAgICAgICAgICAgICAga2V5ID0gSnNvblBhcnNlci5mcm9tSlNPTihrZXlEYXRhLCB7IHRhcmdldFNjaGVtYTogQWVzQ3J5cHRvS2V5IH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInJhd1wiOlxuICAgICAgICAgICAgICAgIGtleSA9IG5ldyBBZXNDcnlwdG9LZXkoKTtcbiAgICAgICAgICAgICAgICBrZXkuZGF0YSA9IEJ1ZmZlciQxLmZyb20oa2V5RGF0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiZm9ybWF0OiBNdXN0IGJlICdqd2snIG9yICdyYXcnXCIpO1xuICAgICAgICB9XG4gICAgICAgIGtleS5hbGdvcml0aG0gPSBhbGdvcml0aG07XG4gICAgICAgIGtleS5hbGdvcml0aG0ubGVuZ3RoID0ga2V5LmRhdGEubGVuZ3RoIDw8IDM7XG4gICAgICAgIGtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBrZXkudXNhZ2VzID0ga2V5VXNhZ2VzO1xuICAgICAgICBzd2l0Y2ggKGtleS5hbGdvcml0aG0ubGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDEyODpcbiAgICAgICAgICAgIGNhc2UgMTkyOlxuICAgICAgICAgICAgY2FzZSAyNTY6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwia2V5RGF0YTogSXMgd3Jvbmcga2V5IGxlbmd0aFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZW5jcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBzd2l0Y2ggKGFsZ29yaXRobS5uYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtQ0JDXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jcnlwdEFlc0NCQyhhbGdvcml0aG0sIGtleSwgQnVmZmVyJDEuZnJvbShkYXRhKSk7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUNUUlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY3J5cHRBZXNDVFIoYWxnb3JpdGhtLCBrZXksIEJ1ZmZlciQxLmZyb20oZGF0YSkpO1xuICAgICAgICAgICAgY2FzZSBcIkFFUy1HQ01cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNyeXB0QWVzR0NNKGFsZ29yaXRobSwga2V5LCBCdWZmZXIkMS5mcm9tKGRhdGEpKTtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtS1dcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNyeXB0QWVzS1coYWxnb3JpdGhtLCBrZXksIEJ1ZmZlciQxLmZyb20oZGF0YSkpO1xuICAgICAgICAgICAgY2FzZSBcIkFFUy1FQ0JcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNyeXB0QWVzRUNCKGFsZ29yaXRobSwga2V5LCBCdWZmZXIkMS5mcm9tKGRhdGEpKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJhbGdvcml0aG06IElzIG5vdCByZWNvZ25pemVkXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBkZWNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGlmICghKGtleSBpbnN0YW5jZW9mIEFlc0NyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImtleTogSXMgbm90IEFlc0NyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKGFsZ29yaXRobS5uYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtQ0JDXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjcnlwdEFlc0NCQyhhbGdvcml0aG0sIGtleSwgQnVmZmVyJDEuZnJvbShkYXRhKSk7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUNUUlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY3J5cHRBZXNDVFIoYWxnb3JpdGhtLCBrZXksIEJ1ZmZlciQxLmZyb20oZGF0YSkpO1xuICAgICAgICAgICAgY2FzZSBcIkFFUy1HQ01cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNyeXB0QWVzR0NNKGFsZ29yaXRobSwga2V5LCBCdWZmZXIkMS5mcm9tKGRhdGEpKTtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtS1dcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNyeXB0QWVzS1coYWxnb3JpdGhtLCBrZXksIEJ1ZmZlciQxLmZyb20oZGF0YSkpO1xuICAgICAgICAgICAgY2FzZSBcIkFFUy1FQ0JcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNyeXB0QWVzRUNCKGFsZ29yaXRobSwga2V5LCBCdWZmZXIkMS5mcm9tKGRhdGEpKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJhbGdvcml0aG06IElzIG5vdCByZWNvZ25pemVkXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBlbmNyeXB0QWVzQ0JDKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGNpcGhlciA9IGNyeXB0by5jcmVhdGVDaXBoZXJpdihgYWVzLSR7a2V5LmFsZ29yaXRobS5sZW5ndGh9LWNiY2AsIGtleS5kYXRhLCBuZXcgVWludDhBcnJheShhbGdvcml0aG0uaXYpKTtcbiAgICAgICAgbGV0IGVuYyA9IGNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGVuYyA9IEJ1ZmZlciQxLmNvbmNhdChbZW5jLCBjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICBjb25zdCByZXMgPSBuZXcgVWludDhBcnJheShlbmMpLmJ1ZmZlcjtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGRlY3J5cHRBZXNDQkMoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgZGVjaXBoZXIgPSBjcnlwdG8uY3JlYXRlRGVjaXBoZXJpdihgYWVzLSR7a2V5LmFsZ29yaXRobS5sZW5ndGh9LWNiY2AsIGtleS5kYXRhLCBuZXcgVWludDhBcnJheShhbGdvcml0aG0uaXYpKTtcbiAgICAgICAgbGV0IGRlYyA9IGRlY2lwaGVyLnVwZGF0ZShkYXRhKTtcbiAgICAgICAgZGVjID0gQnVmZmVyJDEuY29uY2F0KFtkZWMsIGRlY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGRlYykuYnVmZmVyO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZW5jcnlwdEFlc0NUUihhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBjaXBoZXIgPSBjcnlwdG8uY3JlYXRlQ2lwaGVyaXYoYGFlcy0ke2tleS5hbGdvcml0aG0ubGVuZ3RofS1jdHJgLCBrZXkuZGF0YSwgQnVmZmVyJDEuZnJvbShhbGdvcml0aG0uY291bnRlcikpO1xuICAgICAgICBsZXQgZW5jID0gY2lwaGVyLnVwZGF0ZShkYXRhKTtcbiAgICAgICAgZW5jID0gQnVmZmVyJDEuY29uY2F0KFtlbmMsIGNpcGhlci5maW5hbCgpXSk7XG4gICAgICAgIGNvbnN0IHJlcyA9IG5ldyBVaW50OEFycmF5KGVuYykuYnVmZmVyO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZGVjcnlwdEFlc0NUUihhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBkZWNpcGhlciA9IGNyeXB0by5jcmVhdGVEZWNpcGhlcml2KGBhZXMtJHtrZXkuYWxnb3JpdGhtLmxlbmd0aH0tY3RyYCwga2V5LmRhdGEsIG5ldyBVaW50OEFycmF5KGFsZ29yaXRobS5jb3VudGVyKSk7XG4gICAgICAgIGxldCBkZWMgPSBkZWNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGRlYyA9IEJ1ZmZlciQxLmNvbmNhdChbZGVjLCBkZWNpcGhlci5maW5hbCgpXSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShkZWMpLmJ1ZmZlcjtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGVuY3J5cHRBZXNHQ00oYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgY2lwaGVyID0gY3J5cHRvLmNyZWF0ZUNpcGhlcml2KGBhZXMtJHtrZXkuYWxnb3JpdGhtLmxlbmd0aH0tZ2NtYCwga2V5LmRhdGEsIEJ1ZmZlciQxLmZyb20oYWxnb3JpdGhtLml2KSwge1xuICAgICAgICAgICAgYXV0aFRhZ0xlbmd0aDogKGFsZ29yaXRobS50YWdMZW5ndGggfHwgMTI4KSA+PiAzLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGFsZ29yaXRobS5hZGRpdGlvbmFsRGF0YSkge1xuICAgICAgICAgICAgY2lwaGVyLnNldEFBRChCdWZmZXIkMS5mcm9tKGFsZ29yaXRobS5hZGRpdGlvbmFsRGF0YSkpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBlbmMgPSBjaXBoZXIudXBkYXRlKGRhdGEpO1xuICAgICAgICBlbmMgPSBCdWZmZXIkMS5jb25jYXQoW2VuYywgY2lwaGVyLmZpbmFsKCksIGNpcGhlci5nZXRBdXRoVGFnKCldKTtcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoZW5jKS5idWZmZXI7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBkZWNyeXB0QWVzR0NNKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IHRhZ0xlbmd0aCA9IChhbGdvcml0aG0udGFnTGVuZ3RoIHx8IDEyOCkgPj4gMztcbiAgICAgICAgY29uc3QgZGVjaXBoZXIgPSBjcnlwdG8uY3JlYXRlRGVjaXBoZXJpdihgYWVzLSR7a2V5LmFsZ29yaXRobS5sZW5ndGh9LWdjbWAsIGtleS5kYXRhLCBuZXcgVWludDhBcnJheShhbGdvcml0aG0uaXYpLCB7XG4gICAgICAgICAgICBhdXRoVGFnTGVuZ3RoOiB0YWdMZW5ndGgsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBlbmMgPSBkYXRhLnNsaWNlKDAsIGRhdGEubGVuZ3RoIC0gdGFnTGVuZ3RoKTtcbiAgICAgICAgY29uc3QgdGFnID0gZGF0YS5zbGljZShkYXRhLmxlbmd0aCAtIHRhZ0xlbmd0aCk7XG4gICAgICAgIGlmIChhbGdvcml0aG0uYWRkaXRpb25hbERhdGEpIHtcbiAgICAgICAgICAgIGRlY2lwaGVyLnNldEFBRChCdWZmZXIkMS5mcm9tKGFsZ29yaXRobS5hZGRpdGlvbmFsRGF0YSkpO1xuICAgICAgICB9XG4gICAgICAgIGRlY2lwaGVyLnNldEF1dGhUYWcodGFnKTtcbiAgICAgICAgbGV0IGRlYyA9IGRlY2lwaGVyLnVwZGF0ZShlbmMpO1xuICAgICAgICBkZWMgPSBCdWZmZXIkMS5jb25jYXQoW2RlYywgZGVjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGVjKS5idWZmZXI7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBlbmNyeXB0QWVzS1coYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgY2lwaGVyID0gY3J5cHRvLmNyZWF0ZUNpcGhlcml2KGBpZC1hZXMke2tleS5hbGdvcml0aG0ubGVuZ3RofS13cmFwYCwga2V5LmRhdGEsIHRoaXMuQUVTX0tXX0lWKTtcbiAgICAgICAgbGV0IGVuYyA9IGNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGVuYyA9IEJ1ZmZlciQxLmNvbmNhdChbZW5jLCBjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZW5jKS5idWZmZXI7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBkZWNyeXB0QWVzS1coYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgZGVjaXBoZXIgPSBjcnlwdG8uY3JlYXRlRGVjaXBoZXJpdihgaWQtYWVzJHtrZXkuYWxnb3JpdGhtLmxlbmd0aH0td3JhcGAsIGtleS5kYXRhLCB0aGlzLkFFU19LV19JVik7XG4gICAgICAgIGxldCBkZWMgPSBkZWNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGRlYyA9IEJ1ZmZlciQxLmNvbmNhdChbZGVjLCBkZWNpcGhlci5maW5hbCgpXSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShkZWMpLmJ1ZmZlcjtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGVuY3J5cHRBZXNFQ0IoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgY2lwaGVyID0gY3J5cHRvLmNyZWF0ZUNpcGhlcml2KGBhZXMtJHtrZXkuYWxnb3JpdGhtLmxlbmd0aH0tZWNiYCwga2V5LmRhdGEsIG5ldyBVaW50OEFycmF5KDApKTtcbiAgICAgICAgbGV0IGVuYyA9IGNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGVuYyA9IEJ1ZmZlciQxLmNvbmNhdChbZW5jLCBjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICBjb25zdCByZXMgPSBuZXcgVWludDhBcnJheShlbmMpLmJ1ZmZlcjtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGRlY3J5cHRBZXNFQ0IoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgZGVjaXBoZXIgPSBjcnlwdG8uY3JlYXRlRGVjaXBoZXJpdihgYWVzLSR7a2V5LmFsZ29yaXRobS5sZW5ndGh9LWVjYmAsIGtleS5kYXRhLCBuZXcgVWludDhBcnJheSgwKSk7XG4gICAgICAgIGxldCBkZWMgPSBkZWNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGRlYyA9IEJ1ZmZlciQxLmNvbmNhdChbZGVjLCBkZWNpcGhlci5maW5hbCgpXSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShkZWMpLmJ1ZmZlcjtcbiAgICB9XG59XG5BZXNDcnlwdG8uQUVTX0tXX0lWID0gQnVmZmVyJDEuZnJvbShcIkE2QTZBNkE2QTZBNkE2QTZcIiwgXCJoZXhcIik7XG5cbmNvbnN0IGtleVN0b3JhZ2UgPSBuZXcgV2Vha01hcCgpO1xuZnVuY3Rpb24gZ2V0Q3J5cHRvS2V5KGtleSkge1xuICAgIGNvbnN0IHJlcyA9IGtleVN0b3JhZ2UuZ2V0KGtleSk7XG4gICAgaWYgKCFyZXMpIHtcbiAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJDYW5ub3QgZ2V0IENyeXB0b0tleSBmcm9tIHNlY3VyZSBzdG9yYWdlXCIpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuZnVuY3Rpb24gc2V0Q3J5cHRvS2V5KHZhbHVlKSB7XG4gICAgY29uc3Qga2V5ID0gY29yZS5DcnlwdG9LZXkuY3JlYXRlKHZhbHVlLmFsZ29yaXRobSwgdmFsdWUudHlwZSwgdmFsdWUuZXh0cmFjdGFibGUsIHZhbHVlLnVzYWdlcyk7XG4gICAgT2JqZWN0LmZyZWV6ZShrZXkpO1xuICAgIGtleVN0b3JhZ2Uuc2V0KGtleSwgdmFsdWUpO1xuICAgIHJldHVybiBrZXk7XG59XG5cbmNsYXNzIEFlc0NiY1Byb3ZpZGVyIGV4dGVuZHMgY29yZS5BZXNDYmNQcm92aWRlciB7XG4gICAgYXN5bmMgb25HZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgQWVzQ3J5cHRvLmdlbmVyYXRlS2V5KHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgIGxlbmd0aDogYWxnb3JpdGhtLmxlbmd0aCxcbiAgICAgICAgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgYXN5bmMgb25FbmNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZW5jcnlwdChhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRGVjcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gQWVzQ3J5cHRvLmRlY3J5cHQoYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICByZXR1cm4gQWVzQ3J5cHRvLmV4cG9ydEtleShmb3JtYXQsIGdldENyeXB0b0tleShrZXkpKTtcbiAgICB9XG4gICAgYXN5bmMgb25JbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgQWVzQ3J5cHRvLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIHsgbmFtZTogYWxnb3JpdGhtLm5hbWUgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgaWYgKCEoZ2V0Q3J5cHRvS2V5KGtleSkgaW5zdGFuY2VvZiBBZXNDcnlwdG9LZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgYSBBZXNDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNvbnN0IHplcm8gPSBCdWZmZXIkMS5mcm9tKFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSk7XG5jb25zdCByYiA9IEJ1ZmZlciQxLmZyb20oWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNV0pO1xuY29uc3QgYmxvY2tTaXplID0gMTY7XG5mdW5jdGlvbiBiaXRTaGlmdExlZnQoYnVmZmVyKSB7XG4gICAgY29uc3Qgc2hpZnRlZCA9IEJ1ZmZlciQxLmFsbG9jKGJ1ZmZlci5sZW5ndGgpO1xuICAgIGNvbnN0IGxhc3QgPSBidWZmZXIubGVuZ3RoIC0gMTtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbGFzdDsgaW5kZXgrKykge1xuICAgICAgICBzaGlmdGVkW2luZGV4XSA9IGJ1ZmZlcltpbmRleF0gPDwgMTtcbiAgICAgICAgaWYgKGJ1ZmZlcltpbmRleCArIDFdICYgMHg4MCkge1xuICAgICAgICAgICAgc2hpZnRlZFtpbmRleF0gKz0gMHgwMTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzaGlmdGVkW2xhc3RdID0gYnVmZmVyW2xhc3RdIDw8IDE7XG4gICAgcmV0dXJuIHNoaWZ0ZWQ7XG59XG5mdW5jdGlvbiB4b3IoYSwgYikge1xuICAgIGNvbnN0IGxlbmd0aCA9IE1hdGgubWluKGEubGVuZ3RoLCBiLmxlbmd0aCk7XG4gICAgY29uc3Qgb3V0cHV0ID0gQnVmZmVyJDEuYWxsb2MobGVuZ3RoKTtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIG91dHB1dFtpbmRleF0gPSBhW2luZGV4XSBeIGJbaW5kZXhdO1xuICAgIH1cbiAgICByZXR1cm4gb3V0cHV0O1xufVxuZnVuY3Rpb24gYWVzKGtleSwgbWVzc2FnZSkge1xuICAgIGNvbnN0IGNpcGhlciA9IGNyeXB0by5jcmVhdGVDaXBoZXJpdihgYWVzJHtrZXkubGVuZ3RoIDw8IDN9YCwga2V5LCB6ZXJvKTtcbiAgICBjb25zdCByZXN1bHQgPSBjaXBoZXIudXBkYXRlKG1lc3NhZ2UpO1xuICAgIGNpcGhlci5maW5hbCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBnZXRNZXNzYWdlQmxvY2sobWVzc2FnZSwgYmxvY2tJbmRleCkge1xuICAgIGNvbnN0IGJsb2NrID0gQnVmZmVyJDEuYWxsb2MoYmxvY2tTaXplKTtcbiAgICBjb25zdCBzdGFydCA9IGJsb2NrSW5kZXggKiBibG9ja1NpemU7XG4gICAgY29uc3QgZW5kID0gc3RhcnQgKyBibG9ja1NpemU7XG4gICAgbWVzc2FnZS5jb3B5KGJsb2NrLCAwLCBzdGFydCwgZW5kKTtcbiAgICByZXR1cm4gYmxvY2s7XG59XG5mdW5jdGlvbiBnZXRQYWRkZWRNZXNzYWdlQmxvY2sobWVzc2FnZSwgYmxvY2tJbmRleCkge1xuICAgIGNvbnN0IGJsb2NrID0gQnVmZmVyJDEuYWxsb2MoYmxvY2tTaXplKTtcbiAgICBjb25zdCBzdGFydCA9IGJsb2NrSW5kZXggKiBibG9ja1NpemU7XG4gICAgY29uc3QgZW5kID0gbWVzc2FnZS5sZW5ndGg7XG4gICAgYmxvY2suZmlsbCgwKTtcbiAgICBtZXNzYWdlLmNvcHkoYmxvY2ssIDAsIHN0YXJ0LCBlbmQpO1xuICAgIGJsb2NrW2VuZCAtIHN0YXJ0XSA9IDB4ODA7XG4gICAgcmV0dXJuIGJsb2NrO1xufVxuZnVuY3Rpb24gZ2VuZXJhdGVTdWJrZXlzKGtleSkge1xuICAgIGNvbnN0IGwgPSBhZXMoa2V5LCB6ZXJvKTtcbiAgICBsZXQgc3Via2V5MSA9IGJpdFNoaWZ0TGVmdChsKTtcbiAgICBpZiAobFswXSAmIDB4ODApIHtcbiAgICAgICAgc3Via2V5MSA9IHhvcihzdWJrZXkxLCByYik7XG4gICAgfVxuICAgIGxldCBzdWJrZXkyID0gYml0U2hpZnRMZWZ0KHN1YmtleTEpO1xuICAgIGlmIChzdWJrZXkxWzBdICYgMHg4MCkge1xuICAgICAgICBzdWJrZXkyID0geG9yKHN1YmtleTIsIHJiKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgc3Via2V5MSwgc3Via2V5MiB9O1xufVxuZnVuY3Rpb24gYWVzQ21hYyhrZXksIG1lc3NhZ2UpIHtcbiAgICBjb25zdCBzdWJrZXlzID0gZ2VuZXJhdGVTdWJrZXlzKGtleSk7XG4gICAgbGV0IGJsb2NrQ291bnQgPSBNYXRoLmNlaWwobWVzc2FnZS5sZW5ndGggLyBibG9ja1NpemUpO1xuICAgIGxldCBsYXN0QmxvY2tDb21wbGV0ZUZsYWc7XG4gICAgbGV0IGxhc3RCbG9jaztcbiAgICBpZiAoYmxvY2tDb3VudCA9PT0gMCkge1xuICAgICAgICBibG9ja0NvdW50ID0gMTtcbiAgICAgICAgbGFzdEJsb2NrQ29tcGxldGVGbGFnID0gZmFsc2U7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBsYXN0QmxvY2tDb21wbGV0ZUZsYWcgPSAobWVzc2FnZS5sZW5ndGggJSBibG9ja1NpemUgPT09IDApO1xuICAgIH1cbiAgICBjb25zdCBsYXN0QmxvY2tJbmRleCA9IGJsb2NrQ291bnQgLSAxO1xuICAgIGlmIChsYXN0QmxvY2tDb21wbGV0ZUZsYWcpIHtcbiAgICAgICAgbGFzdEJsb2NrID0geG9yKGdldE1lc3NhZ2VCbG9jayhtZXNzYWdlLCBsYXN0QmxvY2tJbmRleCksIHN1YmtleXMuc3Via2V5MSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBsYXN0QmxvY2sgPSB4b3IoZ2V0UGFkZGVkTWVzc2FnZUJsb2NrKG1lc3NhZ2UsIGxhc3RCbG9ja0luZGV4KSwgc3Via2V5cy5zdWJrZXkyKTtcbiAgICB9XG4gICAgbGV0IHggPSB6ZXJvO1xuICAgIGxldCB5O1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsYXN0QmxvY2tJbmRleDsgaW5kZXgrKykge1xuICAgICAgICB5ID0geG9yKHgsIGdldE1lc3NhZ2VCbG9jayhtZXNzYWdlLCBpbmRleCkpO1xuICAgICAgICB4ID0gYWVzKGtleSwgeSk7XG4gICAgfVxuICAgIHkgPSB4b3IobGFzdEJsb2NrLCB4KTtcbiAgICByZXR1cm4gYWVzKGtleSwgeSk7XG59XG5jbGFzcyBBZXNDbWFjUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLkFlc0NtYWNQcm92aWRlciB7XG4gICAgYXN5bmMgb25HZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgQWVzQ3J5cHRvLmdlbmVyYXRlS2V5KHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgIGxlbmd0aDogYWxnb3JpdGhtLmxlbmd0aCxcbiAgICAgICAgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgYXN5bmMgb25TaWduKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGFlc0NtYWMoZ2V0Q3J5cHRvS2V5KGtleSkuZGF0YSwgQnVmZmVyJDEuZnJvbShkYXRhKSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShyZXN1bHQpLmJ1ZmZlcjtcbiAgICB9XG4gICAgYXN5bmMgb25WZXJpZnkoYWxnb3JpdGhtLCBrZXksIHNpZ25hdHVyZSwgZGF0YSkge1xuICAgICAgICBjb25zdCBzaWduYXR1cmUyID0gYXdhaXQgdGhpcy5zaWduKGFsZ29yaXRobSwga2V5LCBkYXRhKTtcbiAgICAgICAgcmV0dXJuIEJ1ZmZlciQxLmZyb20oc2lnbmF0dXJlKS5jb21wYXJlKEJ1ZmZlciQxLmZyb20oc2lnbmF0dXJlMikpID09PSAwO1xuICAgIH1cbiAgICBhc3luYyBvbkV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICByZXR1cm4gQWVzQ3J5cHRvLmV4cG9ydEtleShmb3JtYXQsIGdldENyeXB0b0tleShrZXkpKTtcbiAgICB9XG4gICAgYXN5bmMgb25JbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgQWVzQ3J5cHRvLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIHsgbmFtZTogYWxnb3JpdGhtLm5hbWUgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkocmVzKTtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgaWYgKCEoZ2V0Q3J5cHRvS2V5KGtleSkgaW5zdGFuY2VvZiBBZXNDcnlwdG9LZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgYSBBZXNDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIEFlc0N0clByb3ZpZGVyIGV4dGVuZHMgY29yZS5BZXNDdHJQcm92aWRlciB7XG4gICAgYXN5bmMgb25HZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgQWVzQ3J5cHRvLmdlbmVyYXRlS2V5KHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgIGxlbmd0aDogYWxnb3JpdGhtLmxlbmd0aCxcbiAgICAgICAgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgYXN5bmMgb25FbmNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZW5jcnlwdChhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRGVjcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gQWVzQ3J5cHRvLmRlY3J5cHQoYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICByZXR1cm4gQWVzQ3J5cHRvLmV4cG9ydEtleShmb3JtYXQsIGdldENyeXB0b0tleShrZXkpKTtcbiAgICB9XG4gICAgYXN5bmMgb25JbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgQWVzQ3J5cHRvLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIHsgbmFtZTogYWxnb3JpdGhtLm5hbWUgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkocmVzKTtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgaWYgKCEoZ2V0Q3J5cHRvS2V5KGtleSkgaW5zdGFuY2VvZiBBZXNDcnlwdG9LZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgYSBBZXNDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIEFlc0djbVByb3ZpZGVyIGV4dGVuZHMgY29yZS5BZXNHY21Qcm92aWRlciB7XG4gICAgYXN5bmMgb25HZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgQWVzQ3J5cHRvLmdlbmVyYXRlS2V5KHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgIGxlbmd0aDogYWxnb3JpdGhtLmxlbmd0aCxcbiAgICAgICAgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgYXN5bmMgb25FbmNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZW5jcnlwdChhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRGVjcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gQWVzQ3J5cHRvLmRlY3J5cHQoYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICByZXR1cm4gQWVzQ3J5cHRvLmV4cG9ydEtleShmb3JtYXQsIGdldENyeXB0b0tleShrZXkpKTtcbiAgICB9XG4gICAgYXN5bmMgb25JbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgQWVzQ3J5cHRvLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIHsgbmFtZTogYWxnb3JpdGhtLm5hbWUgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkocmVzKTtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgaWYgKCEoZ2V0Q3J5cHRvS2V5KGtleSkgaW5zdGFuY2VvZiBBZXNDcnlwdG9LZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgYSBBZXNDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIEFlc0t3UHJvdmlkZXIgZXh0ZW5kcyBjb3JlLkFlc0t3UHJvdmlkZXIge1xuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IEFlc0NyeXB0by5nZW5lcmF0ZUtleSh7XG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICBsZW5ndGg6IGFsZ29yaXRobS5sZW5ndGgsXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KHJlcyk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBBZXNDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyBuYW1lOiBhbGdvcml0aG0ubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShyZXMpO1xuICAgIH1cbiAgICBhc3luYyBvbkVuY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5lbmNyeXB0KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25EZWNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZGVjcnlwdChhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGlmICghKGdldENyeXB0b0tleShrZXkpIGluc3RhbmNlb2YgQWVzQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleTogSXMgbm90IGEgQWVzQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBBZXNFY2JQcm92aWRlciBleHRlbmRzIGNvcmUuQWVzRWNiUHJvdmlkZXIge1xuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IEFlc0NyeXB0by5nZW5lcmF0ZUtleSh7XG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICBsZW5ndGg6IGFsZ29yaXRobS5sZW5ndGgsXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRW5jcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gQWVzQ3J5cHRvLmVuY3J5cHQoYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkRlY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5kZWNyeXB0KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IEFlc0NyeXB0by5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB7IG5hbWU6IGFsZ29yaXRobS5uYW1lIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KHJlcyk7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGlmICghKGdldENyeXB0b0tleShrZXkpIGluc3RhbmNlb2YgQWVzQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleTogSXMgbm90IGEgQWVzQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBEZXNDcnlwdG9LZXkgZXh0ZW5kcyBTeW1tZXRyaWNLZXkge1xuICAgIGdldCBhbGcoKSB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5hbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiREVTLUNCQ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgREVTLUNCQ2A7XG4gICAgICAgICAgICBjYXNlIFwiREVTLUVERTMtQ0JDXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAzREVTLUNCQ2A7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLkFsZ29yaXRobUVycm9yKFwiVW5zdXBwb3J0ZWQgYWxnb3JpdGhtIG5hbWVcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0IGFsZyh2YWx1ZSkge1xuICAgIH1cbn1cbl9fZGVjb3JhdGUoW1xuICAgIEpzb25Qcm9wKHsgbmFtZTogXCJrXCIsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybENvbnZlcnRlciB9KVxuXSwgRGVzQ3J5cHRvS2V5LnByb3RvdHlwZSwgXCJkYXRhXCIsIHZvaWQgMCk7XG5cbmNsYXNzIERlc0NyeXB0byB7XG4gICAgc3RhdGljIGFzeW5jIGdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBuZXcgRGVzQ3J5cHRvS2V5KCk7XG4gICAgICAgIGtleS5hbGdvcml0aG0gPSBhbGdvcml0aG07XG4gICAgICAgIGtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBrZXkudXNhZ2VzID0ga2V5VXNhZ2VzO1xuICAgICAgICBrZXkuZGF0YSA9IGNyeXB0by5yYW5kb21CeXRlcyhhbGdvcml0aG0ubGVuZ3RoID4+IDMpO1xuICAgICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHN3aXRjaCAoZm9ybWF0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJqd2tcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gSnNvblNlcmlhbGl6ZXIudG9KU09OKGtleSk7XG4gICAgICAgICAgICBjYXNlIFwicmF3XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGtleS5kYXRhKS5idWZmZXI7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiZm9ybWF0OiBNdXN0IGJlICdqd2snIG9yICdyYXcnXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBpbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgbGV0IGtleTtcbiAgICAgICAgc3dpdGNoIChmb3JtYXQudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcImp3a1wiOlxuICAgICAgICAgICAgICAgIGtleSA9IEpzb25QYXJzZXIuZnJvbUpTT04oa2V5RGF0YSwgeyB0YXJnZXRTY2hlbWE6IERlc0NyeXB0b0tleSB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJyYXdcIjpcbiAgICAgICAgICAgICAgICBrZXkgPSBuZXcgRGVzQ3J5cHRvS2V5KCk7XG4gICAgICAgICAgICAgICAga2V5LmRhdGEgPSBCdWZmZXIkMS5mcm9tKGtleURhdGEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImZvcm1hdDogTXVzdCBiZSAnandrJyBvciAncmF3J1wiKTtcbiAgICAgICAgfVxuICAgICAgICBrZXkuYWxnb3JpdGhtID0gYWxnb3JpdGhtO1xuICAgICAgICBrZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAga2V5LnVzYWdlcyA9IGtleVVzYWdlcztcbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGVuY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgc3dpdGNoIChhbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiREVTLUNCQ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY3J5cHREZXNDQkMoYWxnb3JpdGhtLCBrZXksIEJ1ZmZlciQxLmZyb20oZGF0YSkpO1xuICAgICAgICAgICAgY2FzZSBcIkRFUy1FREUzLUNCQ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY3J5cHREZXNFREUzQ0JDKGFsZ29yaXRobSwga2V5LCBCdWZmZXIkMS5mcm9tKGRhdGEpKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJhbGdvcml0aG06IElzIG5vdCByZWNvZ25pemVkXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBkZWNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGlmICghKGtleSBpbnN0YW5jZW9mIERlc0NyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImtleTogSXMgbm90IERlc0NyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKGFsZ29yaXRobS5uYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJERVMtQ0JDXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjcnlwdERlc0NCQyhhbGdvcml0aG0sIGtleSwgQnVmZmVyJDEuZnJvbShkYXRhKSk7XG4gICAgICAgICAgICBjYXNlIFwiREVTLUVERTMtQ0JDXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjcnlwdERlc0VERTNDQkMoYWxnb3JpdGhtLCBrZXksIEJ1ZmZlciQxLmZyb20oZGF0YSkpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImFsZ29yaXRobTogSXMgbm90IHJlY29nbml6ZWRcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGVuY3J5cHREZXNDQkMoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgY2lwaGVyID0gY3J5cHRvLmNyZWF0ZUNpcGhlcml2KGBkZXMtY2JjYCwga2V5LmRhdGEsIG5ldyBVaW50OEFycmF5KGFsZ29yaXRobS5pdikpO1xuICAgICAgICBsZXQgZW5jID0gY2lwaGVyLnVwZGF0ZShkYXRhKTtcbiAgICAgICAgZW5jID0gQnVmZmVyJDEuY29uY2F0KFtlbmMsIGNpcGhlci5maW5hbCgpXSk7XG4gICAgICAgIGNvbnN0IHJlcyA9IG5ldyBVaW50OEFycmF5KGVuYykuYnVmZmVyO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZGVjcnlwdERlc0NCQyhhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBkZWNpcGhlciA9IGNyeXB0by5jcmVhdGVEZWNpcGhlcml2KGBkZXMtY2JjYCwga2V5LmRhdGEsIG5ldyBVaW50OEFycmF5KGFsZ29yaXRobS5pdikpO1xuICAgICAgICBsZXQgZGVjID0gZGVjaXBoZXIudXBkYXRlKGRhdGEpO1xuICAgICAgICBkZWMgPSBCdWZmZXIkMS5jb25jYXQoW2RlYywgZGVjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGVjKS5idWZmZXI7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBlbmNyeXB0RGVzRURFM0NCQyhhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBjaXBoZXIgPSBjcnlwdG8uY3JlYXRlQ2lwaGVyaXYoYGRlcy1lZGUzLWNiY2AsIGtleS5kYXRhLCBCdWZmZXIkMS5mcm9tKGFsZ29yaXRobS5pdikpO1xuICAgICAgICBsZXQgZW5jID0gY2lwaGVyLnVwZGF0ZShkYXRhKTtcbiAgICAgICAgZW5jID0gQnVmZmVyJDEuY29uY2F0KFtlbmMsIGNpcGhlci5maW5hbCgpXSk7XG4gICAgICAgIGNvbnN0IHJlcyA9IG5ldyBVaW50OEFycmF5KGVuYykuYnVmZmVyO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZGVjcnlwdERlc0VERTNDQkMoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgZGVjaXBoZXIgPSBjcnlwdG8uY3JlYXRlRGVjaXBoZXJpdihgZGVzLWVkZTMtY2JjYCwga2V5LmRhdGEsIG5ldyBVaW50OEFycmF5KGFsZ29yaXRobS5pdikpO1xuICAgICAgICBsZXQgZGVjID0gZGVjaXBoZXIudXBkYXRlKGRhdGEpO1xuICAgICAgICBkZWMgPSBCdWZmZXIkMS5jb25jYXQoW2RlYywgZGVjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGVjKS5idWZmZXI7XG4gICAgfVxufVxuXG5jbGFzcyBEZXNDYmNQcm92aWRlciBleHRlbmRzIGNvcmUuRGVzUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLmtleVNpemVCaXRzID0gNjQ7XG4gICAgICAgIHRoaXMuaXZTaXplID0gODtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJERVMtQ0JDXCI7XG4gICAgfVxuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IERlc0NyeXB0by5nZW5lcmF0ZUtleSh7XG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICBsZW5ndGg6IHRoaXMua2V5U2l6ZUJpdHMsXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRW5jcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gRGVzQ3J5cHRvLmVuY3J5cHQoYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkRlY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIERlc0NyeXB0by5kZWNyeXB0KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIERlc0NyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IERlc0NyeXB0by5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB7IG5hbWU6IHRoaXMubmFtZSwgbGVuZ3RoOiB0aGlzLmtleVNpemVCaXRzIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICBpZiAoa2V5LmRhdGEubGVuZ3RoICE9PSAodGhpcy5rZXlTaXplQml0cyA+PiAzKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJrZXlEYXRhOiBXcm9uZyBrZXkgc2l6ZVwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGlmICghKGdldENyeXB0b0tleShrZXkpIGluc3RhbmNlb2YgRGVzQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleTogSXMgbm90IGEgRGVzQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBEZXNFZGUzQ2JjUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLkRlc1Byb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5rZXlTaXplQml0cyA9IDE5MjtcbiAgICAgICAgdGhpcy5pdlNpemUgPSA4O1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkRFUy1FREUzLUNCQ1wiO1xuICAgIH1cbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBEZXNDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgbGVuZ3RoOiB0aGlzLmtleVNpemVCaXRzLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBhc3luYyBvbkVuY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIERlc0NyeXB0by5lbmNyeXB0KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25EZWNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBEZXNDcnlwdG8uZGVjcnlwdChhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBEZXNDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBEZXNDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyBuYW1lOiB0aGlzLm5hbWUsIGxlbmd0aDogdGhpcy5rZXlTaXplQml0cyB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgaWYgKGtleS5kYXRhLmxlbmd0aCAhPT0gKHRoaXMua2V5U2l6ZUJpdHMgPj4gMykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwia2V5RGF0YTogV3Jvbmcga2V5IHNpemVcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBpZiAoIShnZXRDcnlwdG9LZXkoa2V5KSBpbnN0YW5jZW9mIERlc0NyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBhIERlc0NyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gZ2V0SndrQWxnb3JpdGhtKGFsZ29yaXRobSkge1xuICAgIHN3aXRjaCAoYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICBjYXNlIFwiUlNBLU9BRVBcIjoge1xuICAgICAgICAgICAgY29uc3QgbWRTaXplID0gLyhcXGQrKSQvLmV4ZWMoYWxnb3JpdGhtLmhhc2gubmFtZSlbMV07XG4gICAgICAgICAgICByZXR1cm4gYFJTQS1PQUVQJHttZFNpemUgIT09IFwiMVwiID8gYC0ke21kU2l6ZX1gIDogXCJcIn1gO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJSU0FTU0EtUEtDUzEtVjFfNVwiOlxuICAgICAgICAgICAgcmV0dXJuIGBSUyR7LyhcXGQrKSQvLmV4ZWMoYWxnb3JpdGhtLmhhc2gubmFtZSlbMV19YDtcbiAgICAgICAgY2FzZSBcIlJTQS1QU1NcIjpcbiAgICAgICAgICAgIHJldHVybiBgUFMkey8oXFxkKykkLy5leGVjKGFsZ29yaXRobS5oYXNoLm5hbWUpWzFdfWA7XG4gICAgICAgIGNhc2UgXCJSU0EtUEtDUzFcIjpcbiAgICAgICAgICAgIHJldHVybiBgUlMxYDtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiYWxnb3JpdGhtOiBJcyBub3QgcmVjb2duaXplZFwiKTtcbiAgICB9XG59XG5cbmNsYXNzIFJzYVByaXZhdGVLZXkgZXh0ZW5kcyBBc3ltbWV0cmljS2V5IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy50eXBlID0gXCJwcml2YXRlXCI7XG4gICAgfVxuICAgIGdldEtleSgpIHtcbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IEFzblBhcnNlci5wYXJzZSh0aGlzLmRhdGEsIGNvcmUuYXNuMS5Qcml2YXRlS2V5SW5mbyk7XG4gICAgICAgIHJldHVybiBBc25QYXJzZXIucGFyc2Uoa2V5SW5mby5wcml2YXRlS2V5LCBjb3JlLmFzbjEuUnNhUHJpdmF0ZUtleSk7XG4gICAgfVxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRLZXkoKTtcbiAgICAgICAgY29uc3QganNvbiA9IHtcbiAgICAgICAgICAgIGt0eTogXCJSU0FcIixcbiAgICAgICAgICAgIGFsZzogZ2V0SndrQWxnb3JpdGhtKHRoaXMuYWxnb3JpdGhtKSxcbiAgICAgICAgICAgIGtleV9vcHM6IHRoaXMudXNhZ2VzLFxuICAgICAgICAgICAgZXh0OiB0aGlzLmV4dHJhY3RhYmxlLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihqc29uLCBKc29uU2VyaWFsaXplci50b0pTT04oa2V5KSk7XG4gICAgfVxuICAgIGZyb21KU09OKGpzb24pIHtcbiAgICAgICAgY29uc3Qga2V5ID0gSnNvblBhcnNlci5mcm9tSlNPTihqc29uLCB7IHRhcmdldFNjaGVtYTogY29yZS5hc24xLlJzYVByaXZhdGVLZXkgfSk7XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBuZXcgY29yZS5hc24xLlByaXZhdGVLZXlJbmZvKCk7XG4gICAgICAgIGtleUluZm8ucHJpdmF0ZUtleUFsZ29yaXRobS5hbGdvcml0aG0gPSBcIjEuMi44NDAuMTEzNTQ5LjEuMS4xXCI7XG4gICAgICAgIGtleUluZm8ucHJpdmF0ZUtleUFsZ29yaXRobS5wYXJhbWV0ZXJzID0gbnVsbDtcbiAgICAgICAga2V5SW5mby5wcml2YXRlS2V5ID0gQXNuU2VyaWFsaXplci5zZXJpYWxpemUoa2V5KTtcbiAgICAgICAgdGhpcy5kYXRhID0gQnVmZmVyJDEuZnJvbShBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShrZXlJbmZvKSk7XG4gICAgfVxufVxuXG5jbGFzcyBSc2FQdWJsaWNLZXkgZXh0ZW5kcyBBc3ltbWV0cmljS2V5IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy50eXBlID0gXCJwdWJsaWNcIjtcbiAgICB9XG4gICAgZ2V0S2V5KCkge1xuICAgICAgICBjb25zdCBrZXlJbmZvID0gQXNuUGFyc2VyLnBhcnNlKHRoaXMuZGF0YSwgY29yZS5hc24xLlB1YmxpY0tleUluZm8pO1xuICAgICAgICByZXR1cm4gQXNuUGFyc2VyLnBhcnNlKGtleUluZm8ucHVibGljS2V5LCBjb3JlLmFzbjEuUnNhUHVibGljS2V5KTtcbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmdldEtleSgpO1xuICAgICAgICBjb25zdCBqc29uID0ge1xuICAgICAgICAgICAga3R5OiBcIlJTQVwiLFxuICAgICAgICAgICAgYWxnOiBnZXRKd2tBbGdvcml0aG0odGhpcy5hbGdvcml0aG0pLFxuICAgICAgICAgICAga2V5X29wczogdGhpcy51c2FnZXMsXG4gICAgICAgICAgICBleHQ6IHRoaXMuZXh0cmFjdGFibGUsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGpzb24sIEpzb25TZXJpYWxpemVyLnRvSlNPTihrZXkpKTtcbiAgICB9XG4gICAgZnJvbUpTT04oanNvbikge1xuICAgICAgICBjb25zdCBrZXkgPSBKc29uUGFyc2VyLmZyb21KU09OKGpzb24sIHsgdGFyZ2V0U2NoZW1hOiBjb3JlLmFzbjEuUnNhUHVibGljS2V5IH0pO1xuICAgICAgICBjb25zdCBrZXlJbmZvID0gbmV3IGNvcmUuYXNuMS5QdWJsaWNLZXlJbmZvKCk7XG4gICAgICAgIGtleUluZm8ucHVibGljS2V5QWxnb3JpdGhtLmFsZ29yaXRobSA9IFwiMS4yLjg0MC4xMTM1NDkuMS4xLjFcIjtcbiAgICAgICAga2V5SW5mby5wdWJsaWNLZXlBbGdvcml0aG0ucGFyYW1ldGVycyA9IG51bGw7XG4gICAgICAgIGtleUluZm8ucHVibGljS2V5ID0gQXNuU2VyaWFsaXplci5zZXJpYWxpemUoa2V5KTtcbiAgICAgICAgdGhpcy5kYXRhID0gQnVmZmVyJDEuZnJvbShBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShrZXlJbmZvKSk7XG4gICAgfVxufVxuXG5jbGFzcyBSc2FDcnlwdG8ge1xuICAgIHN0YXRpYyBhc3luYyBnZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3QgcHJpdmF0ZUtleSA9IG5ldyBSc2FQcml2YXRlS2V5KCk7XG4gICAgICAgIHByaXZhdGVLZXkuYWxnb3JpdGhtID0gYWxnb3JpdGhtO1xuICAgICAgICBwcml2YXRlS2V5LmV4dHJhY3RhYmxlID0gZXh0cmFjdGFibGU7XG4gICAgICAgIHByaXZhdGVLZXkudXNhZ2VzID0ga2V5VXNhZ2VzLmZpbHRlcigodXNhZ2UpID0+IHRoaXMucHJpdmF0ZUtleVVzYWdlcy5pbmRleE9mKHVzYWdlKSAhPT0gLTEpO1xuICAgICAgICBjb25zdCBwdWJsaWNLZXkgPSBuZXcgUnNhUHVibGljS2V5KCk7XG4gICAgICAgIHB1YmxpY0tleS5hbGdvcml0aG0gPSBhbGdvcml0aG07XG4gICAgICAgIHB1YmxpY0tleS5leHRyYWN0YWJsZSA9IHRydWU7XG4gICAgICAgIHB1YmxpY0tleS51c2FnZXMgPSBrZXlVc2FnZXMuZmlsdGVyKCh1c2FnZSkgPT4gdGhpcy5wdWJsaWNLZXlVc2FnZXMuaW5kZXhPZih1c2FnZSkgIT09IC0xKTtcbiAgICAgICAgY29uc3QgcHVibGljRXhwb25lbnQgPSBCdWZmZXIkMS5jb25jYXQoW1xuICAgICAgICAgICAgQnVmZmVyJDEuYWxsb2MoNCAtIGFsZ29yaXRobS5wdWJsaWNFeHBvbmVudC5ieXRlTGVuZ3RoLCAwKSxcbiAgICAgICAgICAgIEJ1ZmZlciQxLmZyb20oYWxnb3JpdGhtLnB1YmxpY0V4cG9uZW50KSxcbiAgICAgICAgXSkucmVhZEludDMyQkUoMCk7XG4gICAgICAgIGNvbnN0IGtleXMgPSBjcnlwdG8uZ2VuZXJhdGVLZXlQYWlyU3luYyhcInJzYVwiLCB7XG4gICAgICAgICAgICBtb2R1bHVzTGVuZ3RoOiBhbGdvcml0aG0ubW9kdWx1c0xlbmd0aCxcbiAgICAgICAgICAgIHB1YmxpY0V4cG9uZW50LFxuICAgICAgICAgICAgcHVibGljS2V5RW5jb2Rpbmc6IHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IFwiZGVyXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJzcGtpXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJpdmF0ZUtleUVuY29kaW5nOiB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiBcImRlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwicGtjczhcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBwcml2YXRlS2V5LmRhdGEgPSBrZXlzLnByaXZhdGVLZXk7XG4gICAgICAgIHB1YmxpY0tleS5kYXRhID0ga2V5cy5wdWJsaWNLZXk7XG4gICAgICAgIGNvbnN0IHJlcyA9IHtcbiAgICAgICAgICAgIHByaXZhdGVLZXksXG4gICAgICAgICAgICBwdWJsaWNLZXksXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBleHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgc3dpdGNoIChmb3JtYXQudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcImp3a1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBKc29uU2VyaWFsaXplci50b0pTT04oa2V5KTtcbiAgICAgICAgICAgIGNhc2UgXCJwa2NzOFwiOlxuICAgICAgICAgICAgY2FzZSBcInNwa2lcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoa2V5LmRhdGEpLmJ1ZmZlcjtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJmb3JtYXQ6IE11c3QgYmUgJ2p3aycsICdwa2NzOCcgb3IgJ3Nwa2knXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBpbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgc3dpdGNoIChmb3JtYXQudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcImp3a1wiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgandrID0ga2V5RGF0YTtcbiAgICAgICAgICAgICAgICBpZiAoandrLmQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXNuS2V5ID0gSnNvblBhcnNlci5mcm9tSlNPTihrZXlEYXRhLCB7IHRhcmdldFNjaGVtYTogY29yZS5hc24xLlJzYVByaXZhdGVLZXkgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmltcG9ydFByaXZhdGVLZXkoYXNuS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXNuS2V5ID0gSnNvblBhcnNlci5mcm9tSlNPTihrZXlEYXRhLCB7IHRhcmdldFNjaGVtYTogY29yZS5hc24xLlJzYVB1YmxpY0tleSB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0UHVibGljS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwic3BraVwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5SW5mbyA9IEFzblBhcnNlci5wYXJzZShuZXcgVWludDhBcnJheShrZXlEYXRhKSwgY29yZS5hc24xLlB1YmxpY0tleUluZm8pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFzbktleSA9IEFzblBhcnNlci5wYXJzZShrZXlJbmZvLnB1YmxpY0tleSwgY29yZS5hc24xLlJzYVB1YmxpY0tleSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0UHVibGljS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJwa2NzOFwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5SW5mbyA9IEFzblBhcnNlci5wYXJzZShuZXcgVWludDhBcnJheShrZXlEYXRhKSwgY29yZS5hc24xLlByaXZhdGVLZXlJbmZvKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhc25LZXkgPSBBc25QYXJzZXIucGFyc2Uoa2V5SW5mby5wcml2YXRlS2V5LCBjb3JlLmFzbjEuUnNhUHJpdmF0ZUtleSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0UHJpdmF0ZUtleShhc25LZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiZm9ybWF0OiBNdXN0IGJlICdqd2snLCAncGtjczgnIG9yICdzcGtpJ1wiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgc2lnbihhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBzd2l0Y2ggKGFsZ29yaXRobS5uYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJSU0EtUFNTXCI6XG4gICAgICAgICAgICBjYXNlIFwiUlNBU1NBLVBLQ1MxLVYxXzVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zaWduUnNhKGFsZ29yaXRobSwga2V5LCBkYXRhKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJhbGdvcml0aG06IElzIG5vdCByZWNvZ25pemVkXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyB2ZXJpZnkoYWxnb3JpdGhtLCBrZXksIHNpZ25hdHVyZSwgZGF0YSkge1xuICAgICAgICBzd2l0Y2ggKGFsZ29yaXRobS5uYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJSU0EtUFNTXCI6XG4gICAgICAgICAgICBjYXNlIFwiUlNBU1NBLVBLQ1MxLVYxXzVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52ZXJpZnlTU0EoYWxnb3JpdGhtLCBrZXksIGRhdGEsIHNpZ25hdHVyZSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiYWxnb3JpdGhtOiBJcyBub3QgcmVjb2duaXplZFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZW5jcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBzd2l0Y2ggKGFsZ29yaXRobS5uYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJSU0EtT0FFUFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY3J5cHRPQUVQKGFsZ29yaXRobSwga2V5LCBkYXRhKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJhbGdvcml0aG06IElzIG5vdCByZWNvZ25pemVkXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBkZWNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcIlJTQS1PQUVQXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjcnlwdE9BRVAoYWxnb3JpdGhtLCBrZXksIGRhdGEpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImFsZ29yaXRobTogSXMgbm90IHJlY29nbml6ZWRcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGltcG9ydFByaXZhdGVLZXkoYXNuS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IG5ldyBjb3JlLmFzbjEuUHJpdmF0ZUtleUluZm8oKTtcbiAgICAgICAga2V5SW5mby5wcml2YXRlS2V5QWxnb3JpdGhtLmFsZ29yaXRobSA9IFwiMS4yLjg0MC4xMTM1NDkuMS4xLjFcIjtcbiAgICAgICAga2V5SW5mby5wcml2YXRlS2V5QWxnb3JpdGhtLnBhcmFtZXRlcnMgPSBudWxsO1xuICAgICAgICBrZXlJbmZvLnByaXZhdGVLZXkgPSBBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShhc25LZXkpO1xuICAgICAgICBjb25zdCBrZXkgPSBuZXcgUnNhUHJpdmF0ZUtleSgpO1xuICAgICAgICBrZXkuZGF0YSA9IEJ1ZmZlciQxLmZyb20oQXNuU2VyaWFsaXplci5zZXJpYWxpemUoa2V5SW5mbykpO1xuICAgICAgICBrZXkuYWxnb3JpdGhtID0gT2JqZWN0LmFzc2lnbih7fSwgYWxnb3JpdGhtKTtcbiAgICAgICAga2V5LmFsZ29yaXRobS5wdWJsaWNFeHBvbmVudCA9IG5ldyBVaW50OEFycmF5KGFzbktleS5wdWJsaWNFeHBvbmVudCk7XG4gICAgICAgIGtleS5hbGdvcml0aG0ubW9kdWx1c0xlbmd0aCA9IGFzbktleS5tb2R1bHVzLmJ5dGVMZW5ndGggPDwgMztcbiAgICAgICAga2V5LmV4dHJhY3RhYmxlID0gZXh0cmFjdGFibGU7XG4gICAgICAgIGtleS51c2FnZXMgPSBrZXlVc2FnZXM7XG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICAgIHN0YXRpYyBpbXBvcnRQdWJsaWNLZXkoYXNuS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IG5ldyBjb3JlLmFzbjEuUHVibGljS2V5SW5mbygpO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleUFsZ29yaXRobS5hbGdvcml0aG0gPSBcIjEuMi44NDAuMTEzNTQ5LjEuMS4xXCI7XG4gICAgICAgIGtleUluZm8ucHVibGljS2V5QWxnb3JpdGhtLnBhcmFtZXRlcnMgPSBudWxsO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleSA9IEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGFzbktleSk7XG4gICAgICAgIGNvbnN0IGtleSA9IG5ldyBSc2FQdWJsaWNLZXkoKTtcbiAgICAgICAga2V5LmRhdGEgPSBCdWZmZXIkMS5mcm9tKEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleUluZm8pKTtcbiAgICAgICAga2V5LmFsZ29yaXRobSA9IE9iamVjdC5hc3NpZ24oe30sIGFsZ29yaXRobSk7XG4gICAgICAgIGtleS5hbGdvcml0aG0ucHVibGljRXhwb25lbnQgPSBuZXcgVWludDhBcnJheShhc25LZXkucHVibGljRXhwb25lbnQpO1xuICAgICAgICBrZXkuYWxnb3JpdGhtLm1vZHVsdXNMZW5ndGggPSBhc25LZXkubW9kdWx1cy5ieXRlTGVuZ3RoIDw8IDM7XG4gICAgICAgIGtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBrZXkudXNhZ2VzID0ga2V5VXNhZ2VzO1xuICAgICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0Q3J5cHRvQWxnb3JpdGhtKGFsZykge1xuICAgICAgICBzd2l0Y2ggKGFsZy5oYXNoLm5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcIlNIQS0xXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiUlNBLVNIQTFcIjtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtMjU2XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiUlNBLVNIQTI1NlwiO1xuICAgICAgICAgICAgY2FzZSBcIlNIQS0zODRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJSU0EtU0hBMzg0XCI7XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTUxMlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIlJTQS1TSEE1MTJcIjtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEzLTI1NlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIlJTQS1TSEEzLTI1NlwiO1xuICAgICAgICAgICAgY2FzZSBcIlNIQTMtMzg0XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiUlNBLVNIQTMtMzg0XCI7XG4gICAgICAgICAgICBjYXNlIFwiU0hBMy01MTJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJSU0EtU0hBMy01MTJcIjtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJhbGdvcml0aG0uaGFzaDogSXMgbm90IHJlY29nbml6ZWRcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIHNpZ25Sc2EoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgY3J5cHRvQWxnID0gdGhpcy5nZXRDcnlwdG9BbGdvcml0aG0oa2V5LmFsZ29yaXRobSk7XG4gICAgICAgIGNvbnN0IHNpZ25lciA9IGNyeXB0by5jcmVhdGVTaWduKGNyeXB0b0FsZyk7XG4gICAgICAgIHNpZ25lci51cGRhdGUoQnVmZmVyJDEuZnJvbShkYXRhKSk7XG4gICAgICAgIGlmICgha2V5LnBlbSkge1xuICAgICAgICAgICAga2V5LnBlbSA9IGAtLS0tLUJFR0lOIFBSSVZBVEUgS0VZLS0tLS1cXG4ke2tleS5kYXRhLnRvU3RyaW5nKFwiYmFzZTY0XCIpfVxcbi0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS1gO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBrZXk6IGtleS5wZW0sXG4gICAgICAgIH07XG4gICAgICAgIGlmIChhbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpID09PSBcIlJTQS1QU1NcIikge1xuICAgICAgICAgICAgb3B0aW9ucy5wYWRkaW5nID0gY3J5cHRvLmNvbnN0YW50cy5SU0FfUEtDUzFfUFNTX1BBRERJTkc7XG4gICAgICAgICAgICBvcHRpb25zLnNhbHRMZW5ndGggPSBhbGdvcml0aG0uc2FsdExlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzaWduYXR1cmUgPSBzaWduZXIuc2lnbihvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHNpZ25hdHVyZSkuYnVmZmVyO1xuICAgIH1cbiAgICBzdGF0aWMgdmVyaWZ5U1NBKGFsZ29yaXRobSwga2V5LCBkYXRhLCBzaWduYXR1cmUpIHtcbiAgICAgICAgY29uc3QgY3J5cHRvQWxnID0gdGhpcy5nZXRDcnlwdG9BbGdvcml0aG0oa2V5LmFsZ29yaXRobSk7XG4gICAgICAgIGNvbnN0IHNpZ25lciA9IGNyeXB0by5jcmVhdGVWZXJpZnkoY3J5cHRvQWxnKTtcbiAgICAgICAgc2lnbmVyLnVwZGF0ZShCdWZmZXIkMS5mcm9tKGRhdGEpKTtcbiAgICAgICAgaWYgKCFrZXkucGVtKSB7XG4gICAgICAgICAgICBrZXkucGVtID0gYC0tLS0tQkVHSU4gUFVCTElDIEtFWS0tLS0tXFxuJHtrZXkuZGF0YS50b1N0cmluZyhcImJhc2U2NFwiKX1cXG4tLS0tLUVORCBQVUJMSUMgS0VZLS0tLS1gO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBrZXk6IGtleS5wZW0sXG4gICAgICAgIH07XG4gICAgICAgIGlmIChhbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpID09PSBcIlJTQS1QU1NcIikge1xuICAgICAgICAgICAgb3B0aW9ucy5wYWRkaW5nID0gY3J5cHRvLmNvbnN0YW50cy5SU0FfUEtDUzFfUFNTX1BBRERJTkc7XG4gICAgICAgICAgICBvcHRpb25zLnNhbHRMZW5ndGggPSBhbGdvcml0aG0uc2FsdExlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvayA9IHNpZ25lci52ZXJpZnkob3B0aW9ucywgc2lnbmF0dXJlKTtcbiAgICAgICAgcmV0dXJuIG9rO1xuICAgIH1cbiAgICBzdGF0aWMgZW5jcnlwdE9BRVAoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGtleTogYC0tLS0tQkVHSU4gUFVCTElDIEtFWS0tLS0tXFxuJHtrZXkuZGF0YS50b1N0cmluZyhcImJhc2U2NFwiKX1cXG4tLS0tLUVORCBQVUJMSUMgS0VZLS0tLS1gLFxuICAgICAgICAgICAgcGFkZGluZzogY3J5cHRvLmNvbnN0YW50cy5SU0FfUEtDUzFfT0FFUF9QQURESU5HLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoYWxnb3JpdGhtLmxhYmVsKSA7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShjcnlwdG8ucHVibGljRW5jcnlwdChvcHRpb25zLCBkYXRhKSkuYnVmZmVyO1xuICAgIH1cbiAgICBzdGF0aWMgZGVjcnlwdE9BRVAoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGtleTogYC0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLVxcbiR7a2V5LmRhdGEudG9TdHJpbmcoXCJiYXNlNjRcIil9XFxuLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLWAsXG4gICAgICAgICAgICBwYWRkaW5nOiBjcnlwdG8uY29uc3RhbnRzLlJTQV9QS0NTMV9PQUVQX1BBRERJTkcsXG4gICAgICAgIH07XG4gICAgICAgIGlmIChhbGdvcml0aG0ubGFiZWwpIDtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGNyeXB0by5wcml2YXRlRGVjcnlwdChvcHRpb25zLCBkYXRhKSkuYnVmZmVyO1xuICAgIH1cbn1cblJzYUNyeXB0by5wdWJsaWNLZXlVc2FnZXMgPSBbXCJ2ZXJpZnlcIiwgXCJlbmNyeXB0XCIsIFwid3JhcEtleVwiXTtcblJzYUNyeXB0by5wcml2YXRlS2V5VXNhZ2VzID0gW1wic2lnblwiLCBcImRlY3J5cHRcIiwgXCJ1bndyYXBLZXlcIl07XG5cbmNsYXNzIFJzYVNzYVByb3ZpZGVyIGV4dGVuZHMgY29yZS5Sc2FTc2FQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuaGFzaEFsZ29yaXRobXMgPSBbXG4gICAgICAgICAgICBcIlNIQS0xXCIsIFwiU0hBLTI1NlwiLCBcIlNIQS0zODRcIiwgXCJTSEEtNTEyXCIsXG4gICAgICAgICAgICBcInNoYWtlMTI4XCIsIFwic2hha2UyNTZcIixcbiAgICAgICAgICAgIFwiU0hBMy0yNTZcIiwgXCJTSEEzLTM4NFwiLCBcIlNIQTMtNTEyXCJcbiAgICAgICAgXTtcbiAgICB9XG4gICAgYXN5bmMgb25HZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5cyA9IGF3YWl0IFJzYUNyeXB0by5nZW5lcmF0ZUtleSh7XG4gICAgICAgICAgICAuLi5hbGdvcml0aG0sXG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogc2V0Q3J5cHRvS2V5KGtleXMucHJpdmF0ZUtleSksXG4gICAgICAgICAgICBwdWJsaWNLZXk6IHNldENyeXB0b0tleShrZXlzLnB1YmxpY0tleSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIG9uU2lnbihhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gUnNhQ3J5cHRvLnNpZ24oYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvblZlcmlmeShhbGdvcml0aG0sIGtleSwgc2lnbmF0dXJlLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBSc2FDcnlwdG8udmVyaWZ5KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KHNpZ25hdHVyZSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIFJzYUNyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IFJzYUNyeXB0by5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB7IC4uLmFsZ29yaXRobSwgbmFtZTogdGhpcy5uYW1lIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGNvbnN0IGludGVybmFsS2V5ID0gZ2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGlmICghKGludGVybmFsS2V5IGluc3RhbmNlb2YgUnNhUHJpdmF0ZUtleSB8fCBpbnRlcm5hbEtleSBpbnN0YW5jZW9mIFJzYVB1YmxpY0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBSU0EgQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBSc2FQc3NQcm92aWRlciBleHRlbmRzIGNvcmUuUnNhUHNzUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLmhhc2hBbGdvcml0aG1zID0gW1xuICAgICAgICAgICAgXCJTSEEtMVwiLCBcIlNIQS0yNTZcIiwgXCJTSEEtMzg0XCIsIFwiU0hBLTUxMlwiLFxuICAgICAgICAgICAgXCJzaGFrZTEyOFwiLCBcInNoYWtlMjU2XCIsXG4gICAgICAgICAgICBcIlNIQTMtMjU2XCIsIFwiU0hBMy0zODRcIiwgXCJTSEEzLTUxMlwiXG4gICAgICAgIF07XG4gICAgfVxuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBhd2FpdCBSc2FDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgLi4uYWxnb3JpdGhtLFxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IHNldENyeXB0b0tleShrZXlzLnByaXZhdGVLZXkpLFxuICAgICAgICAgICAgcHVibGljS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wdWJsaWNLZXkpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBhc3luYyBvblNpZ24oYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIFJzYUNyeXB0by5zaWduKGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25WZXJpZnkoYWxnb3JpdGhtLCBrZXksIHNpZ25hdHVyZSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gUnNhQ3J5cHRvLnZlcmlmeShhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShzaWduYXR1cmUpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBSc2FDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBSc2FDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyAuLi5hbGdvcml0aG0sIG5hbWU6IHRoaXMubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBjb25zdCBpbnRlcm5hbEtleSA9IGdldENyeXB0b0tleShrZXkpO1xuICAgICAgICBpZiAoIShpbnRlcm5hbEtleSBpbnN0YW5jZW9mIFJzYVByaXZhdGVLZXkgfHwgaW50ZXJuYWxLZXkgaW5zdGFuY2VvZiBSc2FQdWJsaWNLZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgUlNBIENyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgU2hhQ3J5cHRvIHtcbiAgICBzdGF0aWMgc2l6ZShhbGdvcml0aG0pIHtcbiAgICAgICAgc3dpdGNoIChhbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTFcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gMTYwO1xuICAgICAgICAgICAgY2FzZSBcIlNIQS0yNTZcIjpcbiAgICAgICAgICAgIGNhc2UgXCJTSEEzLTI1NlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiAyNTY7XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTM4NFwiOlxuICAgICAgICAgICAgY2FzZSBcIlNIQTMtMzg0XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIDM4NDtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtNTEyXCI6XG4gICAgICAgICAgICBjYXNlIFwiU0hBMy01MTJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gNTEyO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnJlY29nbml6ZWQgbmFtZVwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgZ2V0QWxnb3JpdGhtTmFtZShhbGdvcml0aG0pIHtcbiAgICAgICAgc3dpdGNoIChhbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTFcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJzaGExXCI7XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTI1NlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcInNoYTI1NlwiO1xuICAgICAgICAgICAgY2FzZSBcIlNIQS0zODRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJzaGEzODRcIjtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtNTEyXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwic2hhNTEyXCI7XG4gICAgICAgICAgICBjYXNlIFwiU0hBMy0yNTZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJzaGEzLTI1NlwiO1xuICAgICAgICAgICAgY2FzZSBcIlNIQTMtMzg0XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwic2hhMy0zODRcIjtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEzLTUxMlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcInNoYTMtNTEyXCI7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVucmVjb2duaXplZCBuYW1lXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBkaWdlc3QoYWxnb3JpdGhtLCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGhhc2hBbGcgPSB0aGlzLmdldEFsZ29yaXRobU5hbWUoYWxnb3JpdGhtKTtcbiAgICAgICAgY29uc3QgaGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKGhhc2hBbGcpXG4gICAgICAgICAgICAudXBkYXRlKEJ1ZmZlciQxLmZyb20oZGF0YSkpLmRpZ2VzdCgpO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoaGFzaCkuYnVmZmVyO1xuICAgIH1cbn1cblxuY2xhc3MgUnNhT2FlcFByb3ZpZGVyIGV4dGVuZHMgY29yZS5Sc2FPYWVwUHJvdmlkZXIge1xuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBhd2FpdCBSc2FDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgLi4uYWxnb3JpdGhtLFxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IHNldENyeXB0b0tleShrZXlzLnByaXZhdGVLZXkpLFxuICAgICAgICAgICAgcHVibGljS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wdWJsaWNLZXkpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBhc3luYyBvbkVuY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxLZXkgPSBnZXRDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgY29uc3QgZGF0YVZpZXcgPSBuZXcgVWludDhBcnJheShkYXRhKTtcbiAgICAgICAgY29uc3Qga2V5U2l6ZSA9IE1hdGguY2VpbChpbnRlcm5hbEtleS5hbGdvcml0aG0ubW9kdWx1c0xlbmd0aCA+PiAzKTtcbiAgICAgICAgY29uc3QgaGFzaFNpemUgPSBTaGFDcnlwdG8uc2l6ZShpbnRlcm5hbEtleS5hbGdvcml0aG0uaGFzaCkgPj4gMztcbiAgICAgICAgY29uc3QgZGF0YUxlbmd0aCA9IGRhdGFWaWV3LmJ5dGVMZW5ndGg7XG4gICAgICAgIGNvbnN0IHBzTGVuZ3RoID0ga2V5U2l6ZSAtIGRhdGFMZW5ndGggLSAyICogaGFzaFNpemUgLSAyO1xuICAgICAgICBpZiAoZGF0YUxlbmd0aCA+IGtleVNpemUgLSAyICogaGFzaFNpemUgLSAyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEYXRhIHRvbyBsYXJnZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtZXNzYWdlID0gbmV3IFVpbnQ4QXJyYXkoa2V5U2l6ZSk7XG4gICAgICAgIGNvbnN0IHNlZWQgPSBtZXNzYWdlLnN1YmFycmF5KDEsIGhhc2hTaXplICsgMSk7XG4gICAgICAgIGNvbnN0IGRhdGFCbG9jayA9IG1lc3NhZ2Uuc3ViYXJyYXkoaGFzaFNpemUgKyAxKTtcbiAgICAgICAgZGF0YUJsb2NrLnNldChkYXRhVmlldywgaGFzaFNpemUgKyBwc0xlbmd0aCArIDEpO1xuICAgICAgICBjb25zdCBsYWJlbEhhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaChpbnRlcm5hbEtleS5hbGdvcml0aG0uaGFzaC5uYW1lLnJlcGxhY2UoXCItXCIsIFwiXCIpKVxuICAgICAgICAgICAgLnVwZGF0ZShjb3JlLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoYWxnb3JpdGhtLmxhYmVsIHx8IG5ldyBVaW50OEFycmF5KDApKSlcbiAgICAgICAgICAgIC5kaWdlc3QoKTtcbiAgICAgICAgZGF0YUJsb2NrLnNldChsYWJlbEhhc2gsIDApO1xuICAgICAgICBkYXRhQmxvY2tbaGFzaFNpemUgKyBwc0xlbmd0aF0gPSAxO1xuICAgICAgICBjcnlwdG8ucmFuZG9tRmlsbFN5bmMoc2VlZCk7XG4gICAgICAgIGNvbnN0IGRhdGFCbG9ja01hc2sgPSB0aGlzLm1nZjEoaW50ZXJuYWxLZXkuYWxnb3JpdGhtLmhhc2gsIHNlZWQsIGRhdGFCbG9jay5sZW5ndGgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGFCbG9jay5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZGF0YUJsb2NrW2ldIF49IGRhdGFCbG9ja01hc2tbaV07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VlZE1hc2sgPSB0aGlzLm1nZjEoaW50ZXJuYWxLZXkuYWxnb3JpdGhtLmhhc2gsIGRhdGFCbG9jaywgc2VlZC5sZW5ndGgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHNlZWRbaV0gXj0gc2VlZE1hc2tbaV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpbnRlcm5hbEtleS5wZW0pIHtcbiAgICAgICAgICAgIGludGVybmFsS2V5LnBlbSA9IGAtLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLVxcbiR7aW50ZXJuYWxLZXkuZGF0YS50b1N0cmluZyhcImJhc2U2NFwiKX1cXG4tLS0tLUVORCBQVUJMSUMgS0VZLS0tLS1gO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBrY3MwID0gY3J5cHRvLnB1YmxpY0VuY3J5cHQoe1xuICAgICAgICAgICAga2V5OiBpbnRlcm5hbEtleS5wZW0sXG4gICAgICAgICAgICBwYWRkaW5nOiBjcnlwdG8uY29uc3RhbnRzLlJTQV9OT19QQURESU5HLFxuICAgICAgICB9LCBCdWZmZXIkMS5mcm9tKG1lc3NhZ2UpKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHBrY3MwKS5idWZmZXI7XG4gICAgfVxuICAgIGFzeW5jIG9uRGVjcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBpbnRlcm5hbEtleSA9IGdldENyeXB0b0tleShrZXkpO1xuICAgICAgICBjb25zdCBrZXlTaXplID0gTWF0aC5jZWlsKGludGVybmFsS2V5LmFsZ29yaXRobS5tb2R1bHVzTGVuZ3RoID4+IDMpO1xuICAgICAgICBjb25zdCBoYXNoU2l6ZSA9IFNoYUNyeXB0by5zaXplKGludGVybmFsS2V5LmFsZ29yaXRobS5oYXNoKSA+PiAzO1xuICAgICAgICBjb25zdCBkYXRhTGVuZ3RoID0gZGF0YS5ieXRlTGVuZ3RoO1xuICAgICAgICBpZiAoZGF0YUxlbmd0aCAhPT0ga2V5U2l6ZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmFkIGRhdGFcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpbnRlcm5hbEtleS5wZW0pIHtcbiAgICAgICAgICAgIGludGVybmFsS2V5LnBlbSA9IGAtLS0tLUJFR0lOIFBSSVZBVEUgS0VZLS0tLS1cXG4ke2ludGVybmFsS2V5LmRhdGEudG9TdHJpbmcoXCJiYXNlNjRcIil9XFxuLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLWA7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHBrY3MwID0gY3J5cHRvLnByaXZhdGVEZWNyeXB0KHtcbiAgICAgICAgICAgIGtleTogaW50ZXJuYWxLZXkucGVtLFxuICAgICAgICAgICAgcGFkZGluZzogY3J5cHRvLmNvbnN0YW50cy5SU0FfTk9fUEFERElORyxcbiAgICAgICAgfSwgQnVmZmVyJDEuZnJvbShkYXRhKSk7XG4gICAgICAgIGNvbnN0IHogPSBwa2NzMFswXTtcbiAgICAgICAgY29uc3Qgc2VlZCA9IHBrY3MwLnN1YmFycmF5KDEsIGhhc2hTaXplICsgMSk7XG4gICAgICAgIGNvbnN0IGRhdGFCbG9jayA9IHBrY3MwLnN1YmFycmF5KGhhc2hTaXplICsgMSk7XG4gICAgICAgIGlmICh6ICE9PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEZWNyeXB0aW9uIGZhaWxlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZWVkTWFzayA9IHRoaXMubWdmMShpbnRlcm5hbEtleS5hbGdvcml0aG0uaGFzaCwgZGF0YUJsb2NrLCBzZWVkLmxlbmd0aCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VlZC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgc2VlZFtpXSBePSBzZWVkTWFza1tpXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRhQmxvY2tNYXNrID0gdGhpcy5tZ2YxKGludGVybmFsS2V5LmFsZ29yaXRobS5oYXNoLCBzZWVkLCBkYXRhQmxvY2subGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhQmxvY2subGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGRhdGFCbG9ja1tpXSBePSBkYXRhQmxvY2tNYXNrW2ldO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxhYmVsSGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKGludGVybmFsS2V5LmFsZ29yaXRobS5oYXNoLm5hbWUucmVwbGFjZShcIi1cIiwgXCJcIikpXG4gICAgICAgICAgICAudXBkYXRlKGNvcmUuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShhbGdvcml0aG0ubGFiZWwgfHwgbmV3IFVpbnQ4QXJyYXkoMCkpKVxuICAgICAgICAgICAgLmRpZ2VzdCgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhhc2hTaXplOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChsYWJlbEhhc2hbaV0gIT09IGRhdGFCbG9ja1tpXSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkRlY3J5cHRpb24gZmFpbGVkXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBwc0VuZCA9IGhhc2hTaXplO1xuICAgICAgICBmb3IgKDsgcHNFbmQgPCBkYXRhQmxvY2subGVuZ3RoOyBwc0VuZCsrKSB7XG4gICAgICAgICAgICBjb25zdCBwc3ogPSBkYXRhQmxvY2tbcHNFbmRdO1xuICAgICAgICAgICAgaWYgKHBzeiA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBzeiAhPT0gMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkRlY3J5cHRpb24gZmFpbGVkXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChwc0VuZCA9PT0gZGF0YUJsb2NrLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGVjcnlwdGlvbiBmYWlsZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgcGtjczAgPSBkYXRhQmxvY2suc3ViYXJyYXkocHNFbmQgKyAxKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHBrY3MwKS5idWZmZXI7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBSc2FDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBSc2FDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyAuLi5hbGdvcml0aG0sIG5hbWU6IHRoaXMubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBjb25zdCBpbnRlcm5hbEtleSA9IGdldENyeXB0b0tleShrZXkpO1xuICAgICAgICBpZiAoIShpbnRlcm5hbEtleSBpbnN0YW5jZW9mIFJzYVByaXZhdGVLZXkgfHwgaW50ZXJuYWxLZXkgaW5zdGFuY2VvZiBSc2FQdWJsaWNLZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgUlNBIENyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBtZ2YxKGFsZ29yaXRobSwgc2VlZCwgbGVuZ3RoID0gMCkge1xuICAgICAgICBjb25zdCBoYXNoU2l6ZSA9IFNoYUNyeXB0by5zaXplKGFsZ29yaXRobSkgPj4gMztcbiAgICAgICAgY29uc3QgbWFzayA9IG5ldyBVaW50OEFycmF5KGxlbmd0aCk7XG4gICAgICAgIGNvbnN0IGNvdW50ZXIgPSBuZXcgVWludDhBcnJheSg0KTtcbiAgICAgICAgY29uc3QgY2h1bmtzID0gTWF0aC5jZWlsKGxlbmd0aCAvIGhhc2hTaXplKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaHVua3M7IGkrKykge1xuICAgICAgICAgICAgY291bnRlclswXSA9IGkgPj4+IDI0O1xuICAgICAgICAgICAgY291bnRlclsxXSA9IChpID4+PiAxNikgJiAyNTU7XG4gICAgICAgICAgICBjb3VudGVyWzJdID0gKGkgPj4+IDgpICYgMjU1O1xuICAgICAgICAgICAgY291bnRlclszXSA9IGkgJiAyNTU7XG4gICAgICAgICAgICBjb25zdCBzdWJtYXNrID0gbWFzay5zdWJhcnJheShpICogaGFzaFNpemUpO1xuICAgICAgICAgICAgbGV0IGNodW5rID0gY3J5cHRvLmNyZWF0ZUhhc2goYWxnb3JpdGhtLm5hbWUucmVwbGFjZShcIi1cIiwgXCJcIikpXG4gICAgICAgICAgICAgICAgLnVwZGF0ZShzZWVkKVxuICAgICAgICAgICAgICAgIC51cGRhdGUoY291bnRlcilcbiAgICAgICAgICAgICAgICAuZGlnZXN0KCk7XG4gICAgICAgICAgICBpZiAoY2h1bmsubGVuZ3RoID4gc3VibWFzay5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjaHVuayA9IGNodW5rLnN1YmFycmF5KDAsIHN1Ym1hc2subGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN1Ym1hc2suc2V0KGNodW5rKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWFzaztcbiAgICB9XG59XG5cbmNsYXNzIFJzYUVzUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLlByb3ZpZGVyQ3J5cHRvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJSU0FFUy1QS0NTMS12MV81XCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0ge1xuICAgICAgICAgICAgcHVibGljS2V5OiBbXCJlbmNyeXB0XCIsIFwid3JhcEtleVwiXSxcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IFtcImRlY3J5cHRcIiwgXCJ1bndyYXBLZXlcIl0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBhd2FpdCBSc2FDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgLi4uYWxnb3JpdGhtLFxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IHNldENyeXB0b0tleShrZXlzLnByaXZhdGVLZXkpLFxuICAgICAgICAgICAgcHVibGljS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wdWJsaWNLZXkpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjaGVja0dlbmVyYXRlS2V5UGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwicHVibGljRXhwb25lbnRcIik7XG4gICAgICAgIGlmICghKGFsZ29yaXRobS5wdWJsaWNFeHBvbmVudCAmJiBhbGdvcml0aG0ucHVibGljRXhwb25lbnQgaW5zdGFuY2VvZiBVaW50OEFycmF5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcInB1YmxpY0V4cG9uZW50OiBNaXNzaW5nIG9yIG5vdCBhIFVpbnQ4QXJyYXlcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHVibGljRXhwb25lbnQgPSBDb252ZXJ0LlRvQmFzZTY0KGFsZ29yaXRobS5wdWJsaWNFeHBvbmVudCk7XG4gICAgICAgIGlmICghKHB1YmxpY0V4cG9uZW50ID09PSBcIkF3PT1cIiB8fCBwdWJsaWNFeHBvbmVudCA9PT0gXCJBUUFCXCIpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwicHVibGljRXhwb25lbnQ6IE11c3QgYmUgWzNdIG9yIFsxLDAsMV1cIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcIm1vZHVsdXNMZW5ndGhcIik7XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtLm1vZHVsdXNMZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgMTAyNDpcbiAgICAgICAgICAgIGNhc2UgMjA0ODpcbiAgICAgICAgICAgIGNhc2UgNDA5NjpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIm1vZHVsdXNMZW5ndGg6IE11c3QgYmUgMTAyNCwgMjA0OCwgb3IgNDA5NlwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBvbkVuY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMudG9DcnlwdG9PcHRpb25zKGtleSk7XG4gICAgICAgIGNvbnN0IGVuYyA9IGNyeXB0by5wdWJsaWNFbmNyeXB0KG9wdGlvbnMsIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGVuYykuYnVmZmVyO1xuICAgIH1cbiAgICBhc3luYyBvbkRlY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMudG9DcnlwdG9PcHRpb25zKGtleSk7XG4gICAgICAgIGNvbnN0IGRlYyA9IGNyeXB0by5wcml2YXRlRGVjcnlwdChvcHRpb25zLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShkZWMpLmJ1ZmZlcjtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIFJzYUNyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IFJzYUNyeXB0by5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB7IC4uLmFsZ29yaXRobSwgbmFtZTogdGhpcy5uYW1lIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGNvbnN0IGludGVybmFsS2V5ID0gZ2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGlmICghKGludGVybmFsS2V5IGluc3RhbmNlb2YgUnNhUHJpdmF0ZUtleSB8fCBpbnRlcm5hbEtleSBpbnN0YW5jZW9mIFJzYVB1YmxpY0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBSU0EgQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRvQ3J5cHRvT3B0aW9ucyhrZXkpIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IGtleS50eXBlLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBrZXk6IGAtLS0tLUJFR0lOICR7dHlwZX0gS0VZLS0tLS1cXG4ke2dldENyeXB0b0tleShrZXkpLmRhdGEudG9TdHJpbmcoXCJiYXNlNjRcIil9XFxuLS0tLS1FTkQgJHt0eXBlfSBLRVktLS0tLWAsXG4gICAgICAgICAgICBwYWRkaW5nOiBjcnlwdG8uY29uc3RhbnRzLlJTQV9QS0NTMV9QQURESU5HLFxuICAgICAgICB9O1xuICAgIH1cbn1cblxuY29uc3QgbmFtZWRPSURzID0ge1xuICAgIFwiMS4yLjg0MC4xMDA0NS4zLjEuN1wiOiBcIlAtMjU2XCIsXG4gICAgXCJQLTI1NlwiOiBcIjEuMi44NDAuMTAwNDUuMy4xLjdcIixcbiAgICBcIjEuMy4xMzIuMC4zNFwiOiBcIlAtMzg0XCIsXG4gICAgXCJQLTM4NFwiOiBcIjEuMy4xMzIuMC4zNFwiLFxuICAgIFwiMS4zLjEzMi4wLjM1XCI6IFwiUC01MjFcIixcbiAgICBcIlAtNTIxXCI6IFwiMS4zLjEzMi4wLjM1XCIsXG4gICAgXCIxLjMuMTMyLjAuMTBcIjogXCJLLTI1NlwiLFxuICAgIFwiSy0yNTZcIjogXCIxLjMuMTMyLjAuMTBcIixcbiAgICBcImJyYWlucG9vbFAxNjByMVwiOiBcIjEuMy4zNi4zLjMuMi44LjEuMS4xXCIsXG4gICAgXCIxLjMuMzYuMy4zLjIuOC4xLjEuMVwiOiBcImJyYWlucG9vbFAxNjByMVwiLFxuICAgIFwiYnJhaW5wb29sUDE2MHQxXCI6IFwiMS4zLjM2LjMuMy4yLjguMS4xLjJcIixcbiAgICBcIjEuMy4zNi4zLjMuMi44LjEuMS4yXCI6IFwiYnJhaW5wb29sUDE2MHQxXCIsXG4gICAgXCJicmFpbnBvb2xQMTkycjFcIjogXCIxLjMuMzYuMy4zLjIuOC4xLjEuM1wiLFxuICAgIFwiMS4zLjM2LjMuMy4yLjguMS4xLjNcIjogXCJicmFpbnBvb2xQMTkycjFcIixcbiAgICBcImJyYWlucG9vbFAxOTJ0MVwiOiBcIjEuMy4zNi4zLjMuMi44LjEuMS40XCIsXG4gICAgXCIxLjMuMzYuMy4zLjIuOC4xLjEuNFwiOiBcImJyYWlucG9vbFAxOTJ0MVwiLFxuICAgIFwiYnJhaW5wb29sUDIyNHIxXCI6IFwiMS4zLjM2LjMuMy4yLjguMS4xLjVcIixcbiAgICBcIjEuMy4zNi4zLjMuMi44LjEuMS41XCI6IFwiYnJhaW5wb29sUDIyNHIxXCIsXG4gICAgXCJicmFpbnBvb2xQMjI0dDFcIjogXCIxLjMuMzYuMy4zLjIuOC4xLjEuNlwiLFxuICAgIFwiMS4zLjM2LjMuMy4yLjguMS4xLjZcIjogXCJicmFpbnBvb2xQMjI0dDFcIixcbiAgICBcImJyYWlucG9vbFAyNTZyMVwiOiBcIjEuMy4zNi4zLjMuMi44LjEuMS43XCIsXG4gICAgXCIxLjMuMzYuMy4zLjIuOC4xLjEuN1wiOiBcImJyYWlucG9vbFAyNTZyMVwiLFxuICAgIFwiYnJhaW5wb29sUDI1NnQxXCI6IFwiMS4zLjM2LjMuMy4yLjguMS4xLjhcIixcbiAgICBcIjEuMy4zNi4zLjMuMi44LjEuMS44XCI6IFwiYnJhaW5wb29sUDI1NnQxXCIsXG4gICAgXCJicmFpbnBvb2xQMzIwcjFcIjogXCIxLjMuMzYuMy4zLjIuOC4xLjEuOVwiLFxuICAgIFwiMS4zLjM2LjMuMy4yLjguMS4xLjlcIjogXCJicmFpbnBvb2xQMzIwcjFcIixcbiAgICBcImJyYWlucG9vbFAzMjB0MVwiOiBcIjEuMy4zNi4zLjMuMi44LjEuMS4xMFwiLFxuICAgIFwiMS4zLjM2LjMuMy4yLjguMS4xLjEwXCI6IFwiYnJhaW5wb29sUDMyMHQxXCIsXG4gICAgXCJicmFpbnBvb2xQMzg0cjFcIjogXCIxLjMuMzYuMy4zLjIuOC4xLjEuMTFcIixcbiAgICBcIjEuMy4zNi4zLjMuMi44LjEuMS4xMVwiOiBcImJyYWlucG9vbFAzODRyMVwiLFxuICAgIFwiYnJhaW5wb29sUDM4NHQxXCI6IFwiMS4zLjM2LjMuMy4yLjguMS4xLjEyXCIsXG4gICAgXCIxLjMuMzYuMy4zLjIuOC4xLjEuMTJcIjogXCJicmFpbnBvb2xQMzg0dDFcIixcbiAgICBcImJyYWlucG9vbFA1MTJyMVwiOiBcIjEuMy4zNi4zLjMuMi44LjEuMS4xM1wiLFxuICAgIFwiMS4zLjM2LjMuMy4yLjguMS4xLjEzXCI6IFwiYnJhaW5wb29sUDUxMnIxXCIsXG4gICAgXCJicmFpbnBvb2xQNTEydDFcIjogXCIxLjMuMzYuMy4zLjIuOC4xLjEuMTRcIixcbiAgICBcIjEuMy4zNi4zLjMuMi44LjEuMS4xNFwiOiBcImJyYWlucG9vbFA1MTJ0MVwiLFxufTtcbmZ1bmN0aW9uIGdldE9pZEJ5TmFtZWRDdXJ2ZSQxKG5hbWVkQ3VydmUpIHtcbiAgICBjb25zdCBvaWQgPSBuYW1lZE9JRHNbbmFtZWRDdXJ2ZV07XG4gICAgaWYgKCFvaWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoYENhbm5vdCBjb252ZXJ0IFdlYkNyeXB0byBuYW1lZCBjdXJ2ZSAnJHtuYW1lZEN1cnZlfScgdG8gT0lEYCk7XG4gICAgfVxuICAgIHJldHVybiBvaWQ7XG59XG5cbmNsYXNzIEVjUHJpdmF0ZUtleSBleHRlbmRzIEFzeW1tZXRyaWNLZXkge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnR5cGUgPSBcInByaXZhdGVcIjtcbiAgICB9XG4gICAgZ2V0S2V5KCkge1xuICAgICAgICBjb25zdCBrZXlJbmZvID0gQXNuUGFyc2VyLnBhcnNlKHRoaXMuZGF0YSwgY29yZS5hc24xLlByaXZhdGVLZXlJbmZvKTtcbiAgICAgICAgcmV0dXJuIEFzblBhcnNlci5wYXJzZShrZXlJbmZvLnByaXZhdGVLZXksIGNvcmUuYXNuMS5FY1ByaXZhdGVLZXkpO1xuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0S2V5KCk7XG4gICAgICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICAgICAgICBrdHk6IFwiRUNcIixcbiAgICAgICAgICAgIGNydjogdGhpcy5hbGdvcml0aG0ubmFtZWRDdXJ2ZSxcbiAgICAgICAgICAgIGtleV9vcHM6IHRoaXMudXNhZ2VzLFxuICAgICAgICAgICAgZXh0OiB0aGlzLmV4dHJhY3RhYmxlLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihqc29uLCBKc29uU2VyaWFsaXplci50b0pTT04oa2V5KSk7XG4gICAgfVxuICAgIGZyb21KU09OKGpzb24pIHtcbiAgICAgICAgaWYgKCFqc29uLmNydikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoYENhbm5vdCBnZXQgbmFtZWQgY3VydmUgZnJvbSBKV0suIFByb3BlcnR5ICdjcnYnIGlzIHJlcXVpcmVkYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IG5ldyBjb3JlLmFzbjEuUHJpdmF0ZUtleUluZm8oKTtcbiAgICAgICAga2V5SW5mby5wcml2YXRlS2V5QWxnb3JpdGhtLmFsZ29yaXRobSA9IFwiMS4yLjg0MC4xMDA0NS4yLjFcIjtcbiAgICAgICAga2V5SW5mby5wcml2YXRlS2V5QWxnb3JpdGhtLnBhcmFtZXRlcnMgPSBBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShuZXcgY29yZS5hc24xLk9iamVjdElkZW50aWZpZXIoZ2V0T2lkQnlOYW1lZEN1cnZlJDEoanNvbi5jcnYpKSk7XG4gICAgICAgIGNvbnN0IGtleSA9IEpzb25QYXJzZXIuZnJvbUpTT04oanNvbiwgeyB0YXJnZXRTY2hlbWE6IGNvcmUuYXNuMS5FY1ByaXZhdGVLZXkgfSk7XG4gICAgICAgIGtleUluZm8ucHJpdmF0ZUtleSA9IEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleSk7XG4gICAgICAgIHRoaXMuZGF0YSA9IEJ1ZmZlciQxLmZyb20oQXNuU2VyaWFsaXplci5zZXJpYWxpemUoa2V5SW5mbykpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG5cbmNsYXNzIEVjUHVibGljS2V5IGV4dGVuZHMgQXN5bW1ldHJpY0tleSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudHlwZSA9IFwicHVibGljXCI7XG4gICAgfVxuICAgIGdldEtleSgpIHtcbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IEFzblBhcnNlci5wYXJzZSh0aGlzLmRhdGEsIGNvcmUuYXNuMS5QdWJsaWNLZXlJbmZvKTtcbiAgICAgICAgcmV0dXJuIG5ldyBjb3JlLmFzbjEuRWNQdWJsaWNLZXkoa2V5SW5mby5wdWJsaWNLZXkpO1xuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0S2V5KCk7XG4gICAgICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICAgICAgICBrdHk6IFwiRUNcIixcbiAgICAgICAgICAgIGNydjogdGhpcy5hbGdvcml0aG0ubmFtZWRDdXJ2ZSxcbiAgICAgICAgICAgIGtleV9vcHM6IHRoaXMudXNhZ2VzLFxuICAgICAgICAgICAgZXh0OiB0aGlzLmV4dHJhY3RhYmxlLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihqc29uLCBKc29uU2VyaWFsaXplci50b0pTT04oa2V5KSk7XG4gICAgfVxuICAgIGZyb21KU09OKGpzb24pIHtcbiAgICAgICAgaWYgKCFqc29uLmNydikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoYENhbm5vdCBnZXQgbmFtZWQgY3VydmUgZnJvbSBKV0suIFByb3BlcnR5ICdjcnYnIGlzIHJlcXVpcmVkYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qga2V5ID0gSnNvblBhcnNlci5mcm9tSlNPTihqc29uLCB7IHRhcmdldFNjaGVtYTogY29yZS5hc24xLkVjUHVibGljS2V5IH0pO1xuICAgICAgICBjb25zdCBrZXlJbmZvID0gbmV3IGNvcmUuYXNuMS5QdWJsaWNLZXlJbmZvKCk7XG4gICAgICAgIGtleUluZm8ucHVibGljS2V5QWxnb3JpdGhtLmFsZ29yaXRobSA9IFwiMS4yLjg0MC4xMDA0NS4yLjFcIjtcbiAgICAgICAga2V5SW5mby5wdWJsaWNLZXlBbGdvcml0aG0ucGFyYW1ldGVycyA9IEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKG5ldyBjb3JlLmFzbjEuT2JqZWN0SWRlbnRpZmllcihnZXRPaWRCeU5hbWVkQ3VydmUkMShqc29uLmNydikpKTtcbiAgICAgICAga2V5SW5mby5wdWJsaWNLZXkgPSBBc25TZXJpYWxpemVyLnRvQVNOKGtleSkudmFsdWVIZXg7XG4gICAgICAgIHRoaXMuZGF0YSA9IEJ1ZmZlciQxLmZyb20oQXNuU2VyaWFsaXplci5zZXJpYWxpemUoa2V5SW5mbykpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG5cbmNsYXNzIFNoYTFQcm92aWRlciBleHRlbmRzIGNvcmUuUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlNIQS0xXCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW107XG4gICAgfVxuICAgIGFzeW5jIG9uRGlnZXN0KGFsZ29yaXRobSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gU2hhQ3J5cHRvLmRpZ2VzdChhbGdvcml0aG0sIGRhdGEpO1xuICAgIH1cbn1cblxuY2xhc3MgU2hhMjU2UHJvdmlkZXIgZXh0ZW5kcyBjb3JlLlByb3ZpZGVyQ3J5cHRvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJTSEEtMjU2XCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW107XG4gICAgfVxuICAgIGFzeW5jIG9uRGlnZXN0KGFsZ29yaXRobSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gU2hhQ3J5cHRvLmRpZ2VzdChhbGdvcml0aG0sIGRhdGEpO1xuICAgIH1cbn1cblxuY2xhc3MgU2hhMzg0UHJvdmlkZXIgZXh0ZW5kcyBjb3JlLlByb3ZpZGVyQ3J5cHRvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJTSEEtMzg0XCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW107XG4gICAgfVxuICAgIGFzeW5jIG9uRGlnZXN0KGFsZ29yaXRobSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gU2hhQ3J5cHRvLmRpZ2VzdChhbGdvcml0aG0sIGRhdGEpO1xuICAgIH1cbn1cblxuY2xhc3MgU2hhNTEyUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLlByb3ZpZGVyQ3J5cHRvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJTSEEtNTEyXCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW107XG4gICAgfVxuICAgIGFzeW5jIG9uRGlnZXN0KGFsZ29yaXRobSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gU2hhQ3J5cHRvLmRpZ2VzdChhbGdvcml0aG0sIGRhdGEpO1xuICAgIH1cbn1cblxuY2xhc3MgU2hhMzI1NlByb3ZpZGVyIGV4dGVuZHMgY29yZS5Qcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiU0hBMy0yNTZcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXTtcbiAgICB9XG4gICAgYXN5bmMgb25EaWdlc3QoYWxnb3JpdGhtLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBTaGFDcnlwdG8uZGlnZXN0KGFsZ29yaXRobSwgZGF0YSk7XG4gICAgfVxufVxuXG5jbGFzcyBTaGEzMzg0UHJvdmlkZXIgZXh0ZW5kcyBjb3JlLlByb3ZpZGVyQ3J5cHRvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJTSEEzLTM4NFwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtdO1xuICAgIH1cbiAgICBhc3luYyBvbkRpZ2VzdChhbGdvcml0aG0sIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIFNoYUNyeXB0by5kaWdlc3QoYWxnb3JpdGhtLCBkYXRhKTtcbiAgICB9XG59XG5cbmNsYXNzIFNoYTM1MTJQcm92aWRlciBleHRlbmRzIGNvcmUuUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlNIQTMtNTEyXCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW107XG4gICAgfVxuICAgIGFzeW5jIG9uRGlnZXN0KGFsZ29yaXRobSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gU2hhQ3J5cHRvLmRpZ2VzdChhbGdvcml0aG0sIGRhdGEpO1xuICAgIH1cbn1cblxuY2xhc3MgRWNDcnlwdG8ge1xuICAgIHN0YXRpYyBhc3luYyBnZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3QgcHJpdmF0ZUtleSA9IG5ldyBFY1ByaXZhdGVLZXkoKTtcbiAgICAgICAgcHJpdmF0ZUtleS5hbGdvcml0aG0gPSBhbGdvcml0aG07XG4gICAgICAgIHByaXZhdGVLZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAgcHJpdmF0ZUtleS51c2FnZXMgPSBrZXlVc2FnZXMuZmlsdGVyKCh1c2FnZSkgPT4gdGhpcy5wcml2YXRlS2V5VXNhZ2VzLmluZGV4T2YodXNhZ2UpICE9PSAtMSk7XG4gICAgICAgIGNvbnN0IHB1YmxpY0tleSA9IG5ldyBFY1B1YmxpY0tleSgpO1xuICAgICAgICBwdWJsaWNLZXkuYWxnb3JpdGhtID0gYWxnb3JpdGhtO1xuICAgICAgICBwdWJsaWNLZXkuZXh0cmFjdGFibGUgPSB0cnVlO1xuICAgICAgICBwdWJsaWNLZXkudXNhZ2VzID0ga2V5VXNhZ2VzLmZpbHRlcigodXNhZ2UpID0+IHRoaXMucHVibGljS2V5VXNhZ2VzLmluZGV4T2YodXNhZ2UpICE9PSAtMSk7XG4gICAgICAgIGNvbnN0IGtleXMgPSBjcnlwdG8uZ2VuZXJhdGVLZXlQYWlyU3luYyhcImVjXCIsIHtcbiAgICAgICAgICAgIG5hbWVkQ3VydmU6IHRoaXMuZ2V0T3BlblNTTE5hbWVkQ3VydmUoYWxnb3JpdGhtLm5hbWVkQ3VydmUpLFxuICAgICAgICAgICAgcHVibGljS2V5RW5jb2Rpbmc6IHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IFwiZGVyXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJzcGtpXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJpdmF0ZUtleUVuY29kaW5nOiB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiBcImRlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwicGtjczhcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBwcml2YXRlS2V5LmRhdGEgPSBrZXlzLnByaXZhdGVLZXk7XG4gICAgICAgIHB1YmxpY0tleS5kYXRhID0ga2V5cy5wdWJsaWNLZXk7XG4gICAgICAgIGNvbnN0IHJlcyA9IHtcbiAgICAgICAgICAgIHByaXZhdGVLZXksXG4gICAgICAgICAgICBwdWJsaWNLZXksXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBzaWduKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGNyeXB0b0FsZyA9IFNoYUNyeXB0by5nZXRBbGdvcml0aG1OYW1lKGFsZ29yaXRobS5oYXNoKTtcbiAgICAgICAgY29uc3Qgc2lnbmVyID0gY3J5cHRvLmNyZWF0ZVNpZ24oY3J5cHRvQWxnKTtcbiAgICAgICAgc2lnbmVyLnVwZGF0ZShCdWZmZXIkMS5mcm9tKGRhdGEpKTtcbiAgICAgICAgaWYgKCFrZXkucGVtKSB7XG4gICAgICAgICAgICBrZXkucGVtID0gYC0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLVxcbiR7a2V5LmRhdGEudG9TdHJpbmcoXCJiYXNlNjRcIil9XFxuLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLWA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGtleToga2V5LnBlbSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gc2lnbmVyLnNpZ24ob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGVjU2lnbmF0dXJlID0gQXNuUGFyc2VyLnBhcnNlKHNpZ25hdHVyZSwgY29yZS5hc24xLkVjRHNhU2lnbmF0dXJlKTtcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlUmF3ID0gY29yZS5FY1V0aWxzLmVuY29kZVNpZ25hdHVyZShlY1NpZ25hdHVyZSwgY29yZS5FY0N1cnZlcy5nZXQoa2V5LmFsZ29yaXRobS5uYW1lZEN1cnZlKS5zaXplKTtcbiAgICAgICAgcmV0dXJuIHNpZ25hdHVyZVJhdy5idWZmZXI7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyB2ZXJpZnkoYWxnb3JpdGhtLCBrZXksIHNpZ25hdHVyZSwgZGF0YSkge1xuICAgICAgICBjb25zdCBjcnlwdG9BbGcgPSBTaGFDcnlwdG8uZ2V0QWxnb3JpdGhtTmFtZShhbGdvcml0aG0uaGFzaCk7XG4gICAgICAgIGNvbnN0IHNpZ25lciA9IGNyeXB0by5jcmVhdGVWZXJpZnkoY3J5cHRvQWxnKTtcbiAgICAgICAgc2lnbmVyLnVwZGF0ZShCdWZmZXIkMS5mcm9tKGRhdGEpKTtcbiAgICAgICAgaWYgKCFrZXkucGVtKSB7XG4gICAgICAgICAgICBrZXkucGVtID0gYC0tLS0tQkVHSU4gUFVCTElDIEtFWS0tLS0tXFxuJHtrZXkuZGF0YS50b1N0cmluZyhcImJhc2U2NFwiKX1cXG4tLS0tLUVORCBQVUJMSUMgS0VZLS0tLS1gO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBrZXk6IGtleS5wZW0sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGVjU2lnbmF0dXJlID0gbmV3IGNvcmUuYXNuMS5FY0RzYVNpZ25hdHVyZSgpO1xuICAgICAgICBjb25zdCBuYW1lZEN1cnZlID0gY29yZS5FY0N1cnZlcy5nZXQoa2V5LmFsZ29yaXRobS5uYW1lZEN1cnZlKTtcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlUG9pbnQgPSBjb3JlLkVjVXRpbHMuZGVjb2RlU2lnbmF0dXJlKHNpZ25hdHVyZSwgbmFtZWRDdXJ2ZS5zaXplKTtcbiAgICAgICAgZWNTaWduYXR1cmUuciA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKHNpZ25hdHVyZVBvaW50LnIpO1xuICAgICAgICBlY1NpZ25hdHVyZS5zID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoc2lnbmF0dXJlUG9pbnQucyk7XG4gICAgICAgIGNvbnN0IGVjU2lnbmF0dXJlUmF3ID0gQnVmZmVyJDEuZnJvbShBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShlY1NpZ25hdHVyZSkpO1xuICAgICAgICBjb25zdCBvayA9IHNpZ25lci52ZXJpZnkob3B0aW9ucywgZWNTaWduYXR1cmVSYXcpO1xuICAgICAgICByZXR1cm4gb2s7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBkZXJpdmVCaXRzKGFsZ29yaXRobSwgYmFzZUtleSwgbGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGNyeXB0b0FsZyA9IHRoaXMuZ2V0T3BlblNTTE5hbWVkQ3VydmUoYmFzZUtleS5hbGdvcml0aG0ubmFtZWRDdXJ2ZSk7XG4gICAgICAgIGNvbnN0IGVjZGggPSBjcnlwdG8uY3JlYXRlRUNESChjcnlwdG9BbGcpO1xuICAgICAgICBjb25zdCBhc25Qcml2YXRlS2V5ID0gQXNuUGFyc2VyLnBhcnNlKGJhc2VLZXkuZGF0YSwgY29yZS5hc24xLlByaXZhdGVLZXlJbmZvKTtcbiAgICAgICAgY29uc3QgYXNuRWNQcml2YXRlS2V5ID0gQXNuUGFyc2VyLnBhcnNlKGFzblByaXZhdGVLZXkucHJpdmF0ZUtleSwgY29yZS5hc24xLkVjUHJpdmF0ZUtleSk7XG4gICAgICAgIGVjZGguc2V0UHJpdmF0ZUtleShCdWZmZXIkMS5mcm9tKGFzbkVjUHJpdmF0ZUtleS5wcml2YXRlS2V5KSk7XG4gICAgICAgIGNvbnN0IGFzblB1YmxpY0tleSA9IEFzblBhcnNlci5wYXJzZShhbGdvcml0aG0ucHVibGljLmRhdGEsIGNvcmUuYXNuMS5QdWJsaWNLZXlJbmZvKTtcbiAgICAgICAgY29uc3QgYml0cyA9IGVjZGguY29tcHV0ZVNlY3JldChCdWZmZXIkMS5mcm9tKGFzblB1YmxpY0tleS5wdWJsaWNLZXkpKTtcbiAgICAgICAgaWYgKGxlbmd0aCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGJpdHM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGJpdHMpLmJ1ZmZlci5zbGljZSgwLCBsZW5ndGggPj4gMyk7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBleHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgc3dpdGNoIChmb3JtYXQudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcImp3a1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBKc29uU2VyaWFsaXplci50b0pTT04oa2V5KTtcbiAgICAgICAgICAgIGNhc2UgXCJwa2NzOFwiOlxuICAgICAgICAgICAgY2FzZSBcInNwa2lcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoa2V5LmRhdGEpLmJ1ZmZlcjtcbiAgICAgICAgICAgIGNhc2UgXCJyYXdcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IHB1YmxpY0tleUluZm8gPSBBc25QYXJzZXIucGFyc2Uoa2V5LmRhdGEsIGNvcmUuYXNuMS5QdWJsaWNLZXlJbmZvKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHVibGljS2V5SW5mby5wdWJsaWNLZXk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiZm9ybWF0OiBNdXN0IGJlICdqd2snLCAncmF3JywgcGtjczgnIG9yICdzcGtpJ1wiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIHN3aXRjaCAoZm9ybWF0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJqd2tcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGp3ayA9IGtleURhdGE7XG4gICAgICAgICAgICAgICAgaWYgKGp3ay5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFzbktleSA9IEpzb25QYXJzZXIuZnJvbUpTT04oa2V5RGF0YSwgeyB0YXJnZXRTY2hlbWE6IGNvcmUuYXNuMS5FY1ByaXZhdGVLZXkgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmltcG9ydFByaXZhdGVLZXkoYXNuS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXNuS2V5ID0gSnNvblBhcnNlci5mcm9tSlNPTihrZXlEYXRhLCB7IHRhcmdldFNjaGVtYTogY29yZS5hc24xLkVjUHVibGljS2V5IH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQdWJsaWNLZXkoYXNuS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJyYXdcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFzbktleSA9IG5ldyBjb3JlLmFzbjEuRWNQdWJsaWNLZXkoa2V5RGF0YSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0UHVibGljS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJzcGtpXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlJbmZvID0gQXNuUGFyc2VyLnBhcnNlKG5ldyBVaW50OEFycmF5KGtleURhdGEpLCBjb3JlLmFzbjEuUHVibGljS2V5SW5mbyk7XG4gICAgICAgICAgICAgICAgY29uc3QgYXNuS2V5ID0gbmV3IGNvcmUuYXNuMS5FY1B1YmxpY0tleShrZXlJbmZvLnB1YmxpY0tleSk7XG4gICAgICAgICAgICAgICAgdGhpcy5hc3NlcnRLZXlQYXJhbWV0ZXJzKGtleUluZm8ucHVibGljS2V5QWxnb3JpdGhtLnBhcmFtZXRlcnMsIGFsZ29yaXRobS5uYW1lZEN1cnZlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQdWJsaWNLZXkoYXNuS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInBrY3M4XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlJbmZvID0gQXNuUGFyc2VyLnBhcnNlKG5ldyBVaW50OEFycmF5KGtleURhdGEpLCBjb3JlLmFzbjEuUHJpdmF0ZUtleUluZm8pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFzbktleSA9IEFzblBhcnNlci5wYXJzZShrZXlJbmZvLnByaXZhdGVLZXksIGNvcmUuYXNuMS5FY1ByaXZhdGVLZXkpO1xuICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0S2V5UGFyYW1ldGVycyhrZXlJbmZvLnByaXZhdGVLZXlBbGdvcml0aG0ucGFyYW1ldGVycywgYWxnb3JpdGhtLm5hbWVkQ3VydmUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmltcG9ydFByaXZhdGVLZXkoYXNuS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImZvcm1hdDogTXVzdCBiZSAnandrJywgJ3JhdycsICdwa2NzOCcgb3IgJ3Nwa2knXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBhc3NlcnRLZXlQYXJhbWV0ZXJzKHBhcmFtZXRlcnMsIG5hbWVkQ3VydmUpIHtcbiAgICAgICAgaWYgKCFwYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5DcnlwdG9FcnJvcihcIktleSBpbmZvIGRvZXNuJ3QgaGF2ZSByZXF1aXJlZCBwYXJhbWV0ZXJzXCIpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBuYW1lZEN1cnZlSWRlbnRpZmllciA9IFwiXCI7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBuYW1lZEN1cnZlSWRlbnRpZmllciA9IEFzblBhcnNlci5wYXJzZShwYXJhbWV0ZXJzLCBjb3JlLmFzbjEuT2JqZWN0SWRlbnRpZmllcikudmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLkNyeXB0b0Vycm9yKFwiQ2Fubm90IHJlYWQga2V5IGluZm8gcGFyYW1ldGVyc1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZ2V0T2lkQnlOYW1lZEN1cnZlJDEobmFtZWRDdXJ2ZSkgIT09IG5hbWVkQ3VydmVJZGVudGlmaWVyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5DcnlwdG9FcnJvcihcIktleSBpbmZvIHBhcmFtZXRlciBkb2Vzbid0IG1hdGNoIHRvIG5hbWVkIGN1cnZlXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBpbXBvcnRQcml2YXRlS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBuZXcgY29yZS5hc24xLlByaXZhdGVLZXlJbmZvKCk7XG4gICAgICAgIGtleUluZm8ucHJpdmF0ZUtleUFsZ29yaXRobS5hbGdvcml0aG0gPSBcIjEuMi44NDAuMTAwNDUuMi4xXCI7XG4gICAgICAgIGtleUluZm8ucHJpdmF0ZUtleUFsZ29yaXRobS5wYXJhbWV0ZXJzID0gQXNuU2VyaWFsaXplci5zZXJpYWxpemUobmV3IGNvcmUuYXNuMS5PYmplY3RJZGVudGlmaWVyKGdldE9pZEJ5TmFtZWRDdXJ2ZSQxKGFsZ29yaXRobS5uYW1lZEN1cnZlKSkpO1xuICAgICAgICBrZXlJbmZvLnByaXZhdGVLZXkgPSBBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShhc25LZXkpO1xuICAgICAgICBjb25zdCBrZXkgPSBuZXcgRWNQcml2YXRlS2V5KCk7XG4gICAgICAgIGtleS5kYXRhID0gQnVmZmVyJDEuZnJvbShBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShrZXlJbmZvKSk7XG4gICAgICAgIGtleS5hbGdvcml0aG0gPSBPYmplY3QuYXNzaWduKHt9LCBhbGdvcml0aG0pO1xuICAgICAgICBrZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAga2V5LnVzYWdlcyA9IGtleVVzYWdlcztcbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGltcG9ydFB1YmxpY0tleShhc25LZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXlJbmZvID0gbmV3IGNvcmUuYXNuMS5QdWJsaWNLZXlJbmZvKCk7XG4gICAgICAgIGtleUluZm8ucHVibGljS2V5QWxnb3JpdGhtLmFsZ29yaXRobSA9IFwiMS4yLjg0MC4xMDA0NS4yLjFcIjtcbiAgICAgICAgY29uc3QgbmFtZWRDdXJ2ZSA9IGdldE9pZEJ5TmFtZWRDdXJ2ZSQxKGFsZ29yaXRobS5uYW1lZEN1cnZlKTtcbiAgICAgICAga2V5SW5mby5wdWJsaWNLZXlBbGdvcml0aG0ucGFyYW1ldGVycyA9IEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKG5ldyBjb3JlLmFzbjEuT2JqZWN0SWRlbnRpZmllcihuYW1lZEN1cnZlKSk7XG4gICAgICAgIGtleUluZm8ucHVibGljS2V5ID0gYXNuS2V5LnZhbHVlO1xuICAgICAgICBjb25zdCBrZXkgPSBuZXcgRWNQdWJsaWNLZXkoKTtcbiAgICAgICAga2V5LmRhdGEgPSBCdWZmZXIkMS5mcm9tKEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleUluZm8pKTtcbiAgICAgICAga2V5LmFsZ29yaXRobSA9IE9iamVjdC5hc3NpZ24oe30sIGFsZ29yaXRobSk7XG4gICAgICAgIGtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBrZXkudXNhZ2VzID0ga2V5VXNhZ2VzO1xuICAgICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0T3BlblNTTE5hbWVkQ3VydmUoY3VydmUpIHtcbiAgICAgICAgc3dpdGNoIChjdXJ2ZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiUC0yNTZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJwcmltZTI1NnYxXCI7XG4gICAgICAgICAgICBjYXNlIFwiSy0yNTZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJzZWNwMjU2azFcIjtcbiAgICAgICAgICAgIGNhc2UgXCJQLTM4NFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcInNlY3AzODRyMVwiO1xuICAgICAgICAgICAgY2FzZSBcIlAtNTIxXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwic2VjcDUyMXIxXCI7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBjdXJ2ZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbkVjQ3J5cHRvLnB1YmxpY0tleVVzYWdlcyA9IFtcInZlcmlmeVwiXTtcbkVjQ3J5cHRvLnByaXZhdGVLZXlVc2FnZXMgPSBbXCJzaWduXCIsIFwiZGVyaXZlS2V5XCIsIFwiZGVyaXZlQml0c1wiXTtcblxuY2xhc3MgRWNkc2FQcm92aWRlciBleHRlbmRzIGNvcmUuRWNkc2FQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZWRDdXJ2ZXMgPSBjb3JlLkVjQ3VydmVzLm5hbWVzO1xuICAgICAgICB0aGlzLmhhc2hBbGdvcml0aG1zID0gW1xuICAgICAgICAgICAgXCJTSEEtMVwiLCBcIlNIQS0yNTZcIiwgXCJTSEEtMzg0XCIsIFwiU0hBLTUxMlwiLFxuICAgICAgICAgICAgXCJzaGFrZTEyOFwiLCBcInNoYWtlMjU2XCIsXG4gICAgICAgICAgICBcIlNIQTMtMjU2XCIsIFwiU0hBMy0zODRcIiwgXCJTSEEzLTUxMlwiXG4gICAgICAgIF07XG4gICAgfVxuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBhd2FpdCBFY0NyeXB0by5nZW5lcmF0ZUtleSh7XG4gICAgICAgICAgICAuLi5hbGdvcml0aG0sXG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogc2V0Q3J5cHRvS2V5KGtleXMucHJpdmF0ZUtleSksXG4gICAgICAgICAgICBwdWJsaWNLZXk6IHNldENyeXB0b0tleShrZXlzLnB1YmxpY0tleSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIG9uU2lnbihhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gRWNDcnlwdG8uc2lnbihhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uVmVyaWZ5KGFsZ29yaXRobSwga2V5LCBzaWduYXR1cmUsIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEVjQ3J5cHRvLnZlcmlmeShhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShzaWduYXR1cmUpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBFY0NyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IEVjQ3J5cHRvLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIHsgLi4uYWxnb3JpdGhtLCBuYW1lOiB0aGlzLm5hbWUgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxLZXkgPSBnZXRDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgaWYgKCEoaW50ZXJuYWxLZXkgaW5zdGFuY2VvZiBFY1ByaXZhdGVLZXkgfHwgaW50ZXJuYWxLZXkgaW5zdGFuY2VvZiBFY1B1YmxpY0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBFQyBDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIEVjZGhQcm92aWRlciBleHRlbmRzIGNvcmUuRWNkaFByb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lZEN1cnZlcyA9IGNvcmUuRWNDdXJ2ZXMubmFtZXM7XG4gICAgfVxuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBhd2FpdCBFY0NyeXB0by5nZW5lcmF0ZUtleSh7XG4gICAgICAgICAgICAuLi5hbGdvcml0aG0sXG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogc2V0Q3J5cHRvS2V5KGtleXMucHJpdmF0ZUtleSksXG4gICAgICAgICAgICBwdWJsaWNLZXk6IHNldENyeXB0b0tleShrZXlzLnB1YmxpY0tleSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBFY0NyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IEVjQ3J5cHRvLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIHsgLi4uYWxnb3JpdGhtLCBuYW1lOiB0aGlzLm5hbWUgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxLZXkgPSBnZXRDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgaWYgKCEoaW50ZXJuYWxLZXkgaW5zdGFuY2VvZiBFY1ByaXZhdGVLZXkgfHwgaW50ZXJuYWxLZXkgaW5zdGFuY2VvZiBFY1B1YmxpY0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBFQyBDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgb25EZXJpdmVCaXRzKGFsZ29yaXRobSwgYmFzZUtleSwgbGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGJpdHMgPSBhd2FpdCBFY0NyeXB0by5kZXJpdmVCaXRzKHsgLi4uYWxnb3JpdGhtLCBwdWJsaWM6IGdldENyeXB0b0tleShhbGdvcml0aG0ucHVibGljKSB9LCBnZXRDcnlwdG9LZXkoYmFzZUtleSksIGxlbmd0aCk7XG4gICAgICAgIHJldHVybiBiaXRzO1xuICAgIH1cbn1cblxuY29uc3QgZWRPSURzID0ge1xuICAgIFtjb3JlLmFzbjEuaWRFZDQ0OF06IFwiRWQ0NDhcIixcbiAgICBcImVkNDQ4XCI6IGNvcmUuYXNuMS5pZEVkNDQ4LFxuICAgIFtjb3JlLmFzbjEuaWRYNDQ4XTogXCJYNDQ4XCIsXG4gICAgXCJ4NDQ4XCI6IGNvcmUuYXNuMS5pZFg0NDgsXG4gICAgW2NvcmUuYXNuMS5pZEVkMjU1MTldOiBcIkVkMjU1MTlcIixcbiAgICBcImVkMjU1MTlcIjogY29yZS5hc24xLmlkRWQyNTUxOSxcbiAgICBbY29yZS5hc24xLmlkWDI1NTE5XTogXCJYMjU1MTlcIixcbiAgICBcIngyNTUxOVwiOiBjb3JlLmFzbjEuaWRYMjU1MTksXG59O1xuZnVuY3Rpb24gZ2V0T2lkQnlOYW1lZEN1cnZlKG5hbWVkQ3VydmUpIHtcbiAgICBjb25zdCBvaWQgPSBlZE9JRHNbbmFtZWRDdXJ2ZS50b0xvd2VyQ2FzZSgpXTtcbiAgICBpZiAoIW9pZCkge1xuICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihgQ2Fubm90IGNvbnZlcnQgV2ViQ3J5cHRvIG5hbWVkIGN1cnZlICcke25hbWVkQ3VydmV9JyB0byBPSURgKTtcbiAgICB9XG4gICAgcmV0dXJuIG9pZDtcbn1cblxuY2xhc3MgRWRQcml2YXRlS2V5IGV4dGVuZHMgQXN5bW1ldHJpY0tleSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudHlwZSA9IFwicHJpdmF0ZVwiO1xuICAgIH1cbiAgICBnZXRLZXkoKSB7XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBBc25QYXJzZXIucGFyc2UodGhpcy5kYXRhLCBjb3JlLmFzbjEuUHJpdmF0ZUtleUluZm8pO1xuICAgICAgICByZXR1cm4gQXNuUGFyc2VyLnBhcnNlKGtleUluZm8ucHJpdmF0ZUtleSwgY29yZS5hc24xLkN1cnZlUHJpdmF0ZUtleSk7XG4gICAgfVxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRLZXkoKTtcbiAgICAgICAgY29uc3QganNvbiA9IHtcbiAgICAgICAgICAgIGt0eTogXCJPS1BcIixcbiAgICAgICAgICAgIGNydjogdGhpcy5hbGdvcml0aG0ubmFtZWRDdXJ2ZSxcbiAgICAgICAgICAgIGtleV9vcHM6IHRoaXMudXNhZ2VzLFxuICAgICAgICAgICAgZXh0OiB0aGlzLmV4dHJhY3RhYmxlLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihqc29uLCBKc29uU2VyaWFsaXplci50b0pTT04oa2V5KSk7XG4gICAgfVxuICAgIGZyb21KU09OKGpzb24pIHtcbiAgICAgICAgaWYgKCFqc29uLmNydikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoYENhbm5vdCBnZXQgbmFtZWQgY3VydmUgZnJvbSBKV0suIFByb3BlcnR5ICdjcnYnIGlzIHJlcXVpcmVkYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IG5ldyBjb3JlLmFzbjEuUHJpdmF0ZUtleUluZm8oKTtcbiAgICAgICAga2V5SW5mby5wcml2YXRlS2V5QWxnb3JpdGhtLmFsZ29yaXRobSA9IGdldE9pZEJ5TmFtZWRDdXJ2ZShqc29uLmNydik7XG4gICAgICAgIGNvbnN0IGtleSA9IEpzb25QYXJzZXIuZnJvbUpTT04oanNvbiwgeyB0YXJnZXRTY2hlbWE6IGNvcmUuYXNuMS5DdXJ2ZVByaXZhdGVLZXkgfSk7XG4gICAgICAgIGtleUluZm8ucHJpdmF0ZUtleSA9IEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleSk7XG4gICAgICAgIHRoaXMuZGF0YSA9IEJ1ZmZlciQxLmZyb20oQXNuU2VyaWFsaXplci5zZXJpYWxpemUoa2V5SW5mbykpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG5cbmNsYXNzIEVkUHVibGljS2V5IGV4dGVuZHMgQXN5bW1ldHJpY0tleSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudHlwZSA9IFwicHVibGljXCI7XG4gICAgfVxuICAgIGdldEtleSgpIHtcbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IEFzblBhcnNlci5wYXJzZSh0aGlzLmRhdGEsIGNvcmUuYXNuMS5QdWJsaWNLZXlJbmZvKTtcbiAgICAgICAgcmV0dXJuIGtleUluZm8ucHVibGljS2V5O1xuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0S2V5KCk7XG4gICAgICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICAgICAgICBrdHk6IFwiT0tQXCIsXG4gICAgICAgICAgICBjcnY6IHRoaXMuYWxnb3JpdGhtLm5hbWVkQ3VydmUsXG4gICAgICAgICAgICBrZXlfb3BzOiB0aGlzLnVzYWdlcyxcbiAgICAgICAgICAgIGV4dDogdGhpcy5leHRyYWN0YWJsZSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oanNvbiwge1xuICAgICAgICAgICAgeDogQ29udmVydC5Ub0Jhc2U2NFVybChrZXkpXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBmcm9tSlNPTihqc29uKSB7XG4gICAgICAgIGlmICghanNvbi5jcnYpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKGBDYW5ub3QgZ2V0IG5hbWVkIGN1cnZlIGZyb20gSldLLiBQcm9wZXJ0eSAnY3J2JyBpcyByZXF1aXJlZGApO1xuICAgICAgICB9XG4gICAgICAgIGlmICghanNvbi54KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihgQ2Fubm90IGdldCBwcm9wZXJ0eSBmcm9tIEpXSy4gUHJvcGVydHkgJ3gnIGlzIHJlcXVpcmVkYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IG5ldyBjb3JlLmFzbjEuUHVibGljS2V5SW5mbygpO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleUFsZ29yaXRobS5hbGdvcml0aG0gPSBnZXRPaWRCeU5hbWVkQ3VydmUoanNvbi5jcnYpO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleSA9IENvbnZlcnQuRnJvbUJhc2U2NFVybChqc29uLngpO1xuICAgICAgICB0aGlzLmRhdGEgPSBCdWZmZXIkMS5mcm9tKEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleUluZm8pKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuXG5jbGFzcyBFZENyeXB0byB7XG4gICAgc3RhdGljIGFzeW5jIGdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBwcml2YXRlS2V5ID0gbmV3IEVkUHJpdmF0ZUtleSgpO1xuICAgICAgICBwcml2YXRlS2V5LmFsZ29yaXRobSA9IGFsZ29yaXRobTtcbiAgICAgICAgcHJpdmF0ZUtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBwcml2YXRlS2V5LnVzYWdlcyA9IGtleVVzYWdlcy5maWx0ZXIoKHVzYWdlKSA9PiB0aGlzLnByaXZhdGVLZXlVc2FnZXMuaW5kZXhPZih1c2FnZSkgIT09IC0xKTtcbiAgICAgICAgY29uc3QgcHVibGljS2V5ID0gbmV3IEVkUHVibGljS2V5KCk7XG4gICAgICAgIHB1YmxpY0tleS5hbGdvcml0aG0gPSBhbGdvcml0aG07XG4gICAgICAgIHB1YmxpY0tleS5leHRyYWN0YWJsZSA9IHRydWU7XG4gICAgICAgIHB1YmxpY0tleS51c2FnZXMgPSBrZXlVc2FnZXMuZmlsdGVyKCh1c2FnZSkgPT4gdGhpcy5wdWJsaWNLZXlVc2FnZXMuaW5kZXhPZih1c2FnZSkgIT09IC0xKTtcbiAgICAgICAgY29uc3QgdHlwZSA9IGFsZ29yaXRobS5uYW1lZEN1cnZlLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGtleXMgPSBjcnlwdG8uZ2VuZXJhdGVLZXlQYWlyU3luYyh0eXBlLCB7XG4gICAgICAgICAgICBwdWJsaWNLZXlFbmNvZGluZzoge1xuICAgICAgICAgICAgICAgIGZvcm1hdDogXCJkZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBcInNwa2lcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcml2YXRlS2V5RW5jb2Rpbmc6IHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IFwiZGVyXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJwa2NzOFwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHByaXZhdGVLZXkuZGF0YSA9IGtleXMucHJpdmF0ZUtleTtcbiAgICAgICAgcHVibGljS2V5LmRhdGEgPSBrZXlzLnB1YmxpY0tleTtcbiAgICAgICAgY29uc3QgcmVzID0ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleSxcbiAgICAgICAgICAgIHB1YmxpY0tleSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIHNpZ24oYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgaWYgKCFrZXkucGVtKSB7XG4gICAgICAgICAgICBrZXkucGVtID0gYC0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLVxcbiR7a2V5LmRhdGEudG9TdHJpbmcoXCJiYXNlNjRcIil9XFxuLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLWA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGtleToga2V5LnBlbSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gY3J5cHRvLnNpZ24obnVsbCwgQnVmZmVyJDEuZnJvbShkYXRhKSwgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBjb3JlLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKHNpZ25hdHVyZSk7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyB2ZXJpZnkoYWxnb3JpdGhtLCBrZXksIHNpZ25hdHVyZSwgZGF0YSkge1xuICAgICAgICBpZiAoIWtleS5wZW0pIHtcbiAgICAgICAgICAgIGtleS5wZW0gPSBgLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS1cXG4ke2tleS5kYXRhLnRvU3RyaW5nKFwiYmFzZTY0XCIpfVxcbi0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLWA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGtleToga2V5LnBlbSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgb2sgPSBjcnlwdG8udmVyaWZ5KG51bGwsIEJ1ZmZlciQxLmZyb20oZGF0YSksIG9wdGlvbnMsIEJ1ZmZlciQxLmZyb20oc2lnbmF0dXJlKSk7XG4gICAgICAgIHJldHVybiBvaztcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGRlcml2ZUJpdHMoYWxnb3JpdGhtLCBiYXNlS2V5LCBsZW5ndGgpIHtcbiAgICAgICAgY29uc3QgcHVibGljS2V5ID0gY3J5cHRvLmNyZWF0ZVB1YmxpY0tleSh7XG4gICAgICAgICAgICBrZXk6IGFsZ29yaXRobS5wdWJsaWMuZGF0YSxcbiAgICAgICAgICAgIGZvcm1hdDogXCJkZXJcIixcbiAgICAgICAgICAgIHR5cGU6IFwic3BraVwiLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcHJpdmF0ZUtleSA9IGNyeXB0by5jcmVhdGVQcml2YXRlS2V5KHtcbiAgICAgICAgICAgIGtleTogYmFzZUtleS5kYXRhLFxuICAgICAgICAgICAgZm9ybWF0OiBcImRlclwiLFxuICAgICAgICAgICAgdHlwZTogXCJwa2NzOFwiLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgYml0cyA9IGNyeXB0by5kaWZmaWVIZWxsbWFuKHtcbiAgICAgICAgICAgIHB1YmxpY0tleSxcbiAgICAgICAgICAgIHByaXZhdGVLZXksXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYml0cykuYnVmZmVyLnNsaWNlKDAsIGxlbmd0aCA+PiAzKTtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICBzd2l0Y2ggKGZvcm1hdC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiandrXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEpzb25TZXJpYWxpemVyLnRvSlNPTihrZXkpO1xuICAgICAgICAgICAgY2FzZSBcInBrY3M4XCI6XG4gICAgICAgICAgICBjYXNlIFwic3BraVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShrZXkuZGF0YSkuYnVmZmVyO1xuICAgICAgICAgICAgY2FzZSBcInJhd1wiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHVibGljS2V5SW5mbyA9IEFzblBhcnNlci5wYXJzZShrZXkuZGF0YSwgY29yZS5hc24xLlB1YmxpY0tleUluZm8pO1xuICAgICAgICAgICAgICAgIHJldHVybiBwdWJsaWNLZXlJbmZvLnB1YmxpY0tleTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJmb3JtYXQ6IE11c3QgYmUgJ2p3aycsICdyYXcnLCBwa2NzOCcgb3IgJ3Nwa2knXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBpbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgc3dpdGNoIChmb3JtYXQudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcImp3a1wiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgandrID0ga2V5RGF0YTtcbiAgICAgICAgICAgICAgICBpZiAoandrLmQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXNuS2V5ID0gSnNvblBhcnNlci5mcm9tSlNPTihrZXlEYXRhLCB7IHRhcmdldFNjaGVtYTogY29yZS5hc24xLkN1cnZlUHJpdmF0ZUtleSB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0UHJpdmF0ZUtleShhc25LZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWp3ay54KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5RGF0YTogQ2Fubm90IGdldCByZXF1aXJlZCAneCcgZmlsZWRcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0UHVibGljS2V5KENvbnZlcnQuRnJvbUJhc2U2NFVybChqd2sueCksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInJhd1wiOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0UHVibGljS2V5KGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwic3BraVwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5SW5mbyA9IEFzblBhcnNlci5wYXJzZShuZXcgVWludDhBcnJheShrZXlEYXRhKSwgY29yZS5hc24xLlB1YmxpY0tleUluZm8pO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmltcG9ydFB1YmxpY0tleShrZXlJbmZvLnB1YmxpY0tleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJwa2NzOFwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5SW5mbyA9IEFzblBhcnNlci5wYXJzZShuZXcgVWludDhBcnJheShrZXlEYXRhKSwgY29yZS5hc24xLlByaXZhdGVLZXlJbmZvKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhc25LZXkgPSBBc25QYXJzZXIucGFyc2Uoa2V5SW5mby5wcml2YXRlS2V5LCBjb3JlLmFzbjEuQ3VydmVQcml2YXRlS2V5KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQcml2YXRlS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJmb3JtYXQ6IE11c3QgYmUgJ2p3aycsICdyYXcnLCAncGtjczgnIG9yICdzcGtpJ1wiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgaW1wb3J0UHJpdmF0ZUtleShhc25LZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBuZXcgRWRQcml2YXRlS2V5KCk7XG4gICAgICAgIGtleS5mcm9tSlNPTih7XG4gICAgICAgICAgICBjcnY6IGFsZ29yaXRobS5uYW1lZEN1cnZlLFxuICAgICAgICAgICAgZDogQ29udmVydC5Ub0Jhc2U2NFVybChhc25LZXkuZCksXG4gICAgICAgIH0pO1xuICAgICAgICBrZXkuYWxnb3JpdGhtID0gT2JqZWN0LmFzc2lnbih7fSwgYWxnb3JpdGhtKTtcbiAgICAgICAga2V5LmV4dHJhY3RhYmxlID0gZXh0cmFjdGFibGU7XG4gICAgICAgIGtleS51c2FnZXMgPSBrZXlVc2FnZXM7XG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBpbXBvcnRQdWJsaWNLZXkoYXNuS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gbmV3IEVkUHVibGljS2V5KCk7XG4gICAgICAgIGtleS5mcm9tSlNPTih7XG4gICAgICAgICAgICBjcnY6IGFsZ29yaXRobS5uYW1lZEN1cnZlLFxuICAgICAgICAgICAgeDogQ29udmVydC5Ub0Jhc2U2NFVybChhc25LZXkpLFxuICAgICAgICB9KTtcbiAgICAgICAga2V5LmFsZ29yaXRobSA9IE9iamVjdC5hc3NpZ24oe30sIGFsZ29yaXRobSk7XG4gICAgICAgIGtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBrZXkudXNhZ2VzID0ga2V5VXNhZ2VzO1xuICAgICAgICByZXR1cm4ga2V5O1xuICAgIH1cbn1cbkVkQ3J5cHRvLnB1YmxpY0tleVVzYWdlcyA9IFtcInZlcmlmeVwiXTtcbkVkQ3J5cHRvLnByaXZhdGVLZXlVc2FnZXMgPSBbXCJzaWduXCIsIFwiZGVyaXZlS2V5XCIsIFwiZGVyaXZlQml0c1wiXTtcblxuY2xhc3MgRWREc2FQcm92aWRlciBleHRlbmRzIGNvcmUuRWREc2FQcm92aWRlciB7XG4gICAgYXN5bmMgb25HZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5cyA9IGF3YWl0IEVkQ3J5cHRvLmdlbmVyYXRlS2V5KHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgIG5hbWVkQ3VydmU6IGFsZ29yaXRobS5uYW1lZEN1cnZlLnJlcGxhY2UoL15lZC9pLCBcIkVkXCIpLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IHNldENyeXB0b0tleShrZXlzLnByaXZhdGVLZXkpLFxuICAgICAgICAgICAgcHVibGljS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wdWJsaWNLZXkpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBhc3luYyBvblNpZ24oYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEVkQ3J5cHRvLnNpZ24oYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvblZlcmlmeShhbGdvcml0aG0sIGtleSwgc2lnbmF0dXJlLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBFZENyeXB0by52ZXJpZnkoYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoc2lnbmF0dXJlKSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICByZXR1cm4gRWRDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBFZENyeXB0by5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB7IC4uLmFsZ29yaXRobSwgbmFtZTogdGhpcy5uYW1lIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxufVxuXG5jbGFzcyBFY2RoRXNQcm92aWRlciBleHRlbmRzIGNvcmUuRWNkaEVzUHJvdmlkZXIge1xuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBhd2FpdCBFZENyeXB0by5nZW5lcmF0ZUtleSh7XG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICBuYW1lZEN1cnZlOiBhbGdvcml0aG0ubmFtZWRDdXJ2ZS50b1VwcGVyQ2FzZSgpLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IHNldENyeXB0b0tleShrZXlzLnByaXZhdGVLZXkpLFxuICAgICAgICAgICAgcHVibGljS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wdWJsaWNLZXkpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBhc3luYyBvbkRlcml2ZUJpdHMoYWxnb3JpdGhtLCBiYXNlS2V5LCBsZW5ndGgpIHtcbiAgICAgICAgY29uc3QgYml0cyA9IGF3YWl0IEVkQ3J5cHRvLmRlcml2ZUJpdHMoeyAuLi5hbGdvcml0aG0sIHB1YmxpYzogZ2V0Q3J5cHRvS2V5KGFsZ29yaXRobS5wdWJsaWMpIH0sIGdldENyeXB0b0tleShiYXNlS2V5KSwgbGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIGJpdHM7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBFZENyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IEVkQ3J5cHRvLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIHsgLi4uYWxnb3JpdGhtLCBuYW1lOiB0aGlzLm5hbWUgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG59XG5cbmNsYXNzIEVkMjU1MTlDcnlwdG9LZXkgZXh0ZW5kcyBDcnlwdG9LZXkge1xuICAgIGNvbnN0cnVjdG9yKGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIHVzYWdlcywgZGF0YSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmFsZ29yaXRobSA9IGFsZ29yaXRobTtcbiAgICAgICAgdGhpcy5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IHVzYWdlcztcbiAgICAgICAgdGhpcy5kYXRhID0gQnVmZmVyLmZyb20oZGF0YSk7XG4gICAgfVxuICAgIHRvSldLKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga3R5OiBcIk9LUFwiLFxuICAgICAgICAgICAgY3J2OiB0aGlzLmFsZ29yaXRobS5uYW1lLFxuICAgICAgICAgICAga2V5X29wczogdGhpcy51c2FnZXMsXG4gICAgICAgICAgICBleHQ6IHRoaXMuZXh0cmFjdGFibGUsXG4gICAgICAgIH07XG4gICAgfVxufVxuXG5jbGFzcyBFZDI1NTE5UHJpdmF0ZUtleSBleHRlbmRzIEVkMjU1MTlDcnlwdG9LZXkge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnR5cGUgPSBcInByaXZhdGVcIjtcbiAgICB9XG4gICAgdG9KV0soKSB7XG4gICAgICAgIGNvbnN0IHB1Ykp3ayA9IGNyeXB0by5jcmVhdGVQdWJsaWNLZXkoe1xuICAgICAgICAgICAga2V5OiB0aGlzLmRhdGEsXG4gICAgICAgICAgICBmb3JtYXQ6IFwicGVtXCIsXG4gICAgICAgIH0pLmV4cG9ydCh7IGZvcm1hdDogXCJqd2tcIiB9KTtcbiAgICAgICAgY29uc3QgcmF3ID0gY29yZS5QZW1Db252ZXJ0ZXIudG9VaW50OEFycmF5KHRoaXMuZGF0YS50b1N0cmluZygpKTtcbiAgICAgICAgY29uc3QgcGtjczggPSBBc25Db252ZXJ0LnBhcnNlKHJhdywgY29yZS5hc24xLlByaXZhdGVLZXlJbmZvKTtcbiAgICAgICAgY29uc3QgZCA9IEFzbkNvbnZlcnQucGFyc2UocGtjczgucHJpdmF0ZUtleSwgY29yZS5hc24xLkVkUHJpdmF0ZUtleSkudmFsdWU7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5zdXBlci50b0pXSygpLFxuICAgICAgICAgICAgLi4ucHViSndrLFxuICAgICAgICAgICAgZDogQnVmZmVyLmZyb20obmV3IFVpbnQ4QXJyYXkoZCkpLnRvU3RyaW5nKFwiYmFzZTY0dXJsXCIpLFxuICAgICAgICB9O1xuICAgIH1cbn1cblxuY2xhc3MgRWQyNTUxOVB1YmxpY0tleSBleHRlbmRzIEVkMjU1MTlDcnlwdG9LZXkge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnR5cGUgPSBcInB1YmxpY1wiO1xuICAgIH1cbiAgICB0b0pXSygpIHtcbiAgICAgICAgY29uc3QgandrID0gY3J5cHRvLmNyZWF0ZVB1YmxpY0tleSh7XG4gICAgICAgICAgICBrZXk6IHRoaXMuZGF0YSxcbiAgICAgICAgICAgIGZvcm1hdDogXCJwZW1cIixcbiAgICAgICAgfSkuZXhwb3J0KHsgZm9ybWF0OiBcImp3a1wiIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uc3VwZXIudG9KV0soKSxcbiAgICAgICAgICAgIC4uLmp3ayxcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbmNsYXNzIEVkMjU1MTlDcnlwdG8ge1xuICAgIHN0YXRpYyBhc3luYyBnZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IGFsZ29yaXRobS5uYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGtleXMgPSBjcnlwdG8uZ2VuZXJhdGVLZXlQYWlyU3luYyh0eXBlLCB7XG4gICAgICAgICAgICBwdWJsaWNLZXlFbmNvZGluZzoge1xuICAgICAgICAgICAgICAgIGZvcm1hdDogXCJwZW1cIixcbiAgICAgICAgICAgICAgICB0eXBlOiBcInNwa2lcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcml2YXRlS2V5RW5jb2Rpbmc6IHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IFwicGVtXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJwa2NzOFwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGtleUFsZyA9IHtcbiAgICAgICAgICAgIG5hbWU6IHR5cGUgPT09IFwiZWQyNTUxOVwiID8gXCJFZDI1NTE5XCIgOiBcIlgyNTUxOVwiLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBwcml2YXRlS2V5VXNhZ2VzID0ga2V5VXNhZ2VzLmZpbHRlcigodXNhZ2UpID0+IHRoaXMucHJpdmF0ZUtleVVzYWdlcy5pbmNsdWRlcyh1c2FnZSkpO1xuICAgICAgICBjb25zdCBwdWJsaWNLZXlVc2FnZXMgPSBrZXlVc2FnZXMuZmlsdGVyKCh1c2FnZSkgPT4gdGhpcy5wdWJsaWNLZXlVc2FnZXMuaW5jbHVkZXModXNhZ2UpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IG5ldyBFZDI1NTE5UHJpdmF0ZUtleShrZXlBbGcsIGV4dHJhY3RhYmxlLCBwcml2YXRlS2V5VXNhZ2VzLCBrZXlzLnByaXZhdGVLZXkpLFxuICAgICAgICAgICAgcHVibGljS2V5OiBuZXcgRWQyNTUxOVB1YmxpY0tleShrZXlBbGcsIHRydWUsIHB1YmxpY0tleVVzYWdlcywga2V5cy5wdWJsaWNLZXkpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgc2lnbihhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBzaWduYXR1cmUgPSBjcnlwdG8uc2lnbihudWxsLCBCdWZmZXIuZnJvbShkYXRhKSwga2V5LmRhdGEpO1xuICAgICAgICByZXR1cm4gY29yZS5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihzaWduYXR1cmUpO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgdmVyaWZ5KGFsZ29yaXRobSwga2V5LCBzaWduYXR1cmUsIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIGNyeXB0by52ZXJpZnkobnVsbCwgQnVmZmVyLmZyb20oZGF0YSksIGtleS5kYXRhLCBzaWduYXR1cmUpO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICAgICAgICBjYXNlIFwiandrXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGtleS50b0pXSygpO1xuICAgICAgICAgICAgY2FzZSBcInBrY3M4XCI6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29yZS5QZW1Db252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihrZXkuZGF0YS50b1N0cmluZygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJzcGtpXCI6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29yZS5QZW1Db252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihrZXkuZGF0YS50b1N0cmluZygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJyYXdcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGp3ayA9IGtleS50b0pXSygpO1xuICAgICAgICAgICAgICAgIHJldHVybiBDb252ZXJ0LkZyb21CYXNlNjRVcmwoandrLngpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJmb3JtYXQ6IE11c3QgYmUgJ2p3aycsICdyYXcnLCBwa2NzOCcgb3IgJ3Nwa2knXCIpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICAgICAgICBjYXNlIFwiandrXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBqd2sgPSBrZXlEYXRhO1xuICAgICAgICAgICAgICAgIGlmIChqd2suZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcml2YXRlRGF0YSA9IG5ldyBjb3JlLmFzbjEuRWRQcml2YXRlS2V5KCk7XG4gICAgICAgICAgICAgICAgICAgIHByaXZhdGVEYXRhLnZhbHVlID0gY29yZS5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihCdWZmZXIuZnJvbShqd2suZCwgXCJiYXNlNjR1cmxcIikpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwa2NzOCA9IG5ldyBjb3JlLmFzbjEuUHJpdmF0ZUtleUluZm8oKTtcbiAgICAgICAgICAgICAgICAgICAgcGtjczgucHJpdmF0ZUtleUFsZ29yaXRobS5hbGdvcml0aG0gPSBhbGdvcml0aG0ubmFtZS50b0xvd2VyQ2FzZSgpID09PSBcImVkMjU1MTlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPyBjb3JlLmFzbjEuaWRFZDI1NTE5XG4gICAgICAgICAgICAgICAgICAgICAgICA6IGNvcmUuYXNuMS5pZFgyNTUxOTtcbiAgICAgICAgICAgICAgICAgICAgcGtjczgucHJpdmF0ZUtleSA9IEFzbkNvbnZlcnQuc2VyaWFsaXplKHByaXZhdGVEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmF3ID0gQXNuQ29udmVydC5zZXJpYWxpemUocGtjczgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwZW0gPSBjb3JlLlBlbUNvbnZlcnRlci5mcm9tQnVmZmVyU291cmNlKHJhdywgXCJQUklWQVRFIEtFWVwiKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFZDI1NTE5UHJpdmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIHBlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGp3ay54KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHB1YktleSA9IGNyeXB0by5jcmVhdGVQdWJsaWNLZXkoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiBcImp3a1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBqd2ssXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwZW0gPSBwdWJLZXkuZXhwb3J0KHsgZm9ybWF0OiBcInBlbVwiLCB0eXBlOiBcInNwa2lcIiB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFZDI1NTE5UHVibGljS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgcGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwia2V5RGF0YTogQ2Fubm90IGltcG9ydCBKV0suICdkJyBvciAneCcgbXVzdCBiZSBwcmVzZW50ZWRcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInBrY3M4XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwZW0gPSBjb3JlLlBlbUNvbnZlcnRlci5mcm9tQnVmZmVyU291cmNlKGtleURhdGEsIFwiUFJJVkFURSBLRVlcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFZDI1NTE5UHJpdmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIHBlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwic3BraVwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGVtID0gY29yZS5QZW1Db252ZXJ0ZXIuZnJvbUJ1ZmZlclNvdXJjZShrZXlEYXRhLCBcIlBVQkxJQyBLRVlcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFZDI1NTE5UHVibGljS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgcGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJyYXdcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJhdyA9IGtleURhdGE7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gY3J5cHRvLmNyZWF0ZVB1YmxpY0tleSh7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdDogXCJqd2tcIixcbiAgICAgICAgICAgICAgICAgICAga2V5OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrdHk6IFwiT0tQXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjcnY6IGFsZ29yaXRobS5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwiZWQyNTUxOVwiID8gXCJFZDI1NTE5XCIgOiBcIlgyNTUxOVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgeDogQ29udmVydC5Ub0Jhc2U2NFVybChyYXcpLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBlbSA9IGtleS5leHBvcnQoeyBmb3JtYXQ6IFwicGVtXCIsIHR5cGU6IFwic3BraVwiIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRWQyNTUxOVB1YmxpY0tleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIHBlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImZvcm1hdDogTXVzdCBiZSAnandrJywgJ3JhdycsIHBrY3M4JyBvciAnc3BraSdcIikpO1xuICAgICAgICB9XG4gICAgfVxufVxuRWQyNTUxOUNyeXB0by5wcml2YXRlS2V5VXNhZ2VzID0gW1wic2lnblwiLCBcImRlcml2ZUJpdHNcIiwgXCJkZXJpdmVLZXlcIl07XG5FZDI1NTE5Q3J5cHRvLnB1YmxpY0tleVVzYWdlcyA9IFtcInZlcmlmeVwiXTtcblxuY2xhc3MgRWQyNTUxOVByb3ZpZGVyIGV4dGVuZHMgY29yZS5FZDI1NTE5UHJvdmlkZXIge1xuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBhd2FpdCBFZDI1NTE5Q3J5cHRvLmdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wcml2YXRlS2V5KSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogc2V0Q3J5cHRvS2V5KGtleXMucHVibGljS2V5KSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgYXN5bmMgb25TaWduKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGludGVybmFsS2V5ID0gZ2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IEVkMjU1MTlDcnlwdG8uc2lnbihhbGdvcml0aG0sIGludGVybmFsS2V5LCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgICAgIHJldHVybiBzaWduYXR1cmU7XG4gICAgfVxuICAgIG9uVmVyaWZ5KGFsZ29yaXRobSwga2V5LCBzaWduYXR1cmUsIGRhdGEpIHtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxLZXkgPSBnZXRDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgcmV0dXJuIEVkMjU1MTlDcnlwdG8udmVyaWZ5KGFsZ29yaXRobSwgaW50ZXJuYWxLZXksIG5ldyBVaW50OEFycmF5KHNpZ25hdHVyZSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxLZXkgPSBnZXRDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgcmV0dXJuIEVkMjU1MTlDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgaW50ZXJuYWxLZXkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBpbnRlcm5hbEtleSA9IGF3YWl0IEVkMjU1MTlDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShpbnRlcm5hbEtleSk7XG4gICAgfVxufVxuXG5jbGFzcyBYMjU1MTlQcm92aWRlciBleHRlbmRzIGNvcmUuWDI1NTE5UHJvdmlkZXIge1xuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBhd2FpdCBFZDI1NTE5Q3J5cHRvLmdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wcml2YXRlS2V5KSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogc2V0Q3J5cHRvS2V5KGtleXMucHVibGljS2V5KSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgYXN5bmMgb25EZXJpdmVCaXRzKGFsZ29yaXRobSwgYmFzZUtleSwgbGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGludGVybmFsQmFzZUtleSA9IGdldENyeXB0b0tleShiYXNlS2V5KTtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxQdWJsaWNLZXkgPSBnZXRDcnlwdG9LZXkoYWxnb3JpdGhtLnB1YmxpYyk7XG4gICAgICAgIGNvbnN0IHB1YmxpY0tleSA9IGNyeXB0by5jcmVhdGVQdWJsaWNLZXkoe1xuICAgICAgICAgICAga2V5OiBpbnRlcm5hbFB1YmxpY0tleS5kYXRhLnRvU3RyaW5nKCksXG4gICAgICAgICAgICBmb3JtYXQ6IFwicGVtXCIsXG4gICAgICAgICAgICB0eXBlOiBcInNwa2lcIixcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHByaXZhdGVLZXkgPSBjcnlwdG8uY3JlYXRlUHJpdmF0ZUtleSh7XG4gICAgICAgICAgICBrZXk6IGludGVybmFsQmFzZUtleS5kYXRhLnRvU3RyaW5nKCksXG4gICAgICAgICAgICBmb3JtYXQ6IFwicGVtXCIsXG4gICAgICAgICAgICB0eXBlOiBcInBrY3M4XCIsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBiaXRzID0gY3J5cHRvLmRpZmZpZUhlbGxtYW4oe1xuICAgICAgICAgICAgcHVibGljS2V5LFxuICAgICAgICAgICAgcHJpdmF0ZUtleSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShiaXRzKS5idWZmZXIuc2xpY2UoMCwgbGVuZ3RoID4+IDMpO1xuICAgIH1cbiAgICBhc3luYyBvbkV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICBjb25zdCBpbnRlcm5hbEtleSA9IGdldENyeXB0b0tleShrZXkpO1xuICAgICAgICByZXR1cm4gRWQyNTUxOUNyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBpbnRlcm5hbEtleSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IEVkMjU1MTlDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBpZiAoIShnZXRDcnlwdG9LZXkoa2V5KSBpbnN0YW5jZW9mIEVkMjU1MTlDcnlwdG9LZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgYSBFZDI1NTE5Q3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBQYmtkZkNyeXB0b0tleSBleHRlbmRzIENyeXB0b0tleSB7XG59XG5cbmNsYXNzIFBia2RmMlByb3ZpZGVyIGV4dGVuZHMgY29yZS5QYmtkZjJQcm92aWRlciB7XG4gICAgYXN5bmMgb25EZXJpdmVCaXRzKGFsZ29yaXRobSwgYmFzZUtleSwgbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzYWx0ID0gY29yZS5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihhbGdvcml0aG0uc2FsdCk7XG4gICAgICAgICAgICBjb25zdCBoYXNoID0gYWxnb3JpdGhtLmhhc2gubmFtZS5yZXBsYWNlKFwiLVwiLCBcIlwiKTtcbiAgICAgICAgICAgIGNyeXB0by5wYmtkZjIoZ2V0Q3J5cHRvS2V5KGJhc2VLZXkpLmRhdGEsIEJ1ZmZlciQxLmZyb20oc2FsdCksIGFsZ29yaXRobS5pdGVyYXRpb25zLCBsZW5ndGggPj4gMywgaGFzaCwgKGVyciwgZGVyaXZlZEJpdHMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShuZXcgVWludDhBcnJheShkZXJpdmVkQml0cykuYnVmZmVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGlmIChmb3JtYXQgPT09IFwicmF3XCIpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IG5ldyBQYmtkZkNyeXB0b0tleSgpO1xuICAgICAgICAgICAga2V5LmRhdGEgPSBCdWZmZXIkMS5mcm9tKGtleURhdGEpO1xuICAgICAgICAgICAga2V5LmFsZ29yaXRobSA9IHsgbmFtZTogdGhpcy5uYW1lIH07XG4gICAgICAgICAgICBrZXkuZXh0cmFjdGFibGUgPSBmYWxzZTtcbiAgICAgICAgICAgIGtleS51c2FnZXMgPSBrZXlVc2FnZXM7XG4gICAgICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJmb3JtYXQ6IE11c3QgYmUgJ3JhdydcIik7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGlmICghKGdldENyeXB0b0tleShrZXkpIGluc3RhbmNlb2YgUGJrZGZDcnlwdG9LZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgUEJLREYgQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBIbWFjQ3J5cHRvS2V5IGV4dGVuZHMgQ3J5cHRvS2V5IHtcbiAgICBnZXQgYWxnKCkge1xuICAgICAgICBjb25zdCBoYXNoID0gdGhpcy5hbGdvcml0aG0uaGFzaC5uYW1lLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIHJldHVybiBgSFMke2hhc2gucmVwbGFjZShcIlNIQS1cIiwgXCJcIil9YDtcbiAgICB9XG4gICAgc2V0IGFsZyh2YWx1ZSkge1xuICAgIH1cbn1cbl9fZGVjb3JhdGUoW1xuICAgIEpzb25Qcm9wKHsgbmFtZTogXCJrXCIsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybENvbnZlcnRlciB9KVxuXSwgSG1hY0NyeXB0b0tleS5wcm90b3R5cGUsIFwiZGF0YVwiLCB2b2lkIDApO1xuXG5jbGFzcyBIbWFjUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLkhtYWNQcm92aWRlciB7XG4gICAgYXN5bmMgb25HZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gKGFsZ29yaXRobS5sZW5ndGggfHwgdGhpcy5nZXREZWZhdWx0TGVuZ3RoKGFsZ29yaXRobS5oYXNoLm5hbWUpKSA+PiAzIDw8IDM7XG4gICAgICAgIGNvbnN0IGtleSA9IG5ldyBIbWFjQ3J5cHRvS2V5KCk7XG4gICAgICAgIGtleS5hbGdvcml0aG0gPSB7XG4gICAgICAgICAgICAuLi5hbGdvcml0aG0sXG4gICAgICAgICAgICBsZW5ndGgsXG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgIH07XG4gICAgICAgIGtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBrZXkudXNhZ2VzID0ga2V5VXNhZ2VzO1xuICAgICAgICBrZXkuZGF0YSA9IGNyeXB0by5yYW5kb21CeXRlcyhsZW5ndGggPj4gMyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgYXN5bmMgb25TaWduKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGNyeXB0b0FsZyA9IFNoYUNyeXB0by5nZXRBbGdvcml0aG1OYW1lKGtleS5hbGdvcml0aG0uaGFzaCk7XG4gICAgICAgIGNvbnN0IGhtYWMgPSBjcnlwdG8uY3JlYXRlSG1hYyhjcnlwdG9BbGcsIGdldENyeXB0b0tleShrZXkpLmRhdGEpXG4gICAgICAgICAgICAudXBkYXRlKEJ1ZmZlciQxLmZyb20oZGF0YSkpLmRpZ2VzdCgpO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoaG1hYykuYnVmZmVyO1xuICAgIH1cbiAgICBhc3luYyBvblZlcmlmeShhbGdvcml0aG0sIGtleSwgc2lnbmF0dXJlLCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGNyeXB0b0FsZyA9IFNoYUNyeXB0by5nZXRBbGdvcml0aG1OYW1lKGtleS5hbGdvcml0aG0uaGFzaCk7XG4gICAgICAgIGNvbnN0IGhtYWMgPSBjcnlwdG8uY3JlYXRlSG1hYyhjcnlwdG9BbGcsIGdldENyeXB0b0tleShrZXkpLmRhdGEpXG4gICAgICAgICAgICAudXBkYXRlKEJ1ZmZlciQxLmZyb20oZGF0YSkpLmRpZ2VzdCgpO1xuICAgICAgICByZXR1cm4gaG1hYy5jb21wYXJlKEJ1ZmZlciQxLmZyb20oc2lnbmF0dXJlKSkgPT09IDA7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGxldCBrZXk7XG4gICAgICAgIHN3aXRjaCAoZm9ybWF0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJqd2tcIjpcbiAgICAgICAgICAgICAgICBrZXkgPSBKc29uUGFyc2VyLmZyb21KU09OKGtleURhdGEsIHsgdGFyZ2V0U2NoZW1hOiBIbWFjQ3J5cHRvS2V5IH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInJhd1wiOlxuICAgICAgICAgICAgICAgIGtleSA9IG5ldyBIbWFjQ3J5cHRvS2V5KCk7XG4gICAgICAgICAgICAgICAga2V5LmRhdGEgPSBCdWZmZXIkMS5mcm9tKGtleURhdGEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImZvcm1hdDogTXVzdCBiZSAnandrJyBvciAncmF3J1wiKTtcbiAgICAgICAgfVxuICAgICAgICBrZXkuYWxnb3JpdGhtID0ge1xuICAgICAgICAgICAgaGFzaDogeyBuYW1lOiBhbGdvcml0aG0uaGFzaC5uYW1lIH0sXG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICBsZW5ndGg6IGtleS5kYXRhLmxlbmd0aCA8PCAzLFxuICAgICAgICB9O1xuICAgICAgICBrZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAga2V5LnVzYWdlcyA9IGtleVVzYWdlcztcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBhc3luYyBvbkV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICBzd2l0Y2ggKGZvcm1hdC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiandrXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEpzb25TZXJpYWxpemVyLnRvSlNPTihnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgICAgICAgICBjYXNlIFwicmF3XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGdldENyeXB0b0tleShrZXkpLmRhdGEpLmJ1ZmZlcjtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJmb3JtYXQ6IE11c3QgYmUgJ2p3aycgb3IgJ3JhdydcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgaWYgKCEoZ2V0Q3J5cHRvS2V5KGtleSkgaW5zdGFuY2VvZiBIbWFjQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleTogSXMgbm90IEhNQUMgQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBIa2RmQ3J5cHRvS2V5IGV4dGVuZHMgQ3J5cHRvS2V5IHtcbn1cblxuY2xhc3MgSGtkZlByb3ZpZGVyIGV4dGVuZHMgY29yZS5Ia2RmUHJvdmlkZXIge1xuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGlmIChmb3JtYXQudG9Mb3dlckNhc2UoKSAhPT0gXCJyYXdcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJPcGVyYXRpb24gbm90IHN1cHBvcnRlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBrZXkgPSBuZXcgSGtkZkNyeXB0b0tleSgpO1xuICAgICAgICBrZXkuZGF0YSA9IEJ1ZmZlciQxLmZyb20oa2V5RGF0YSk7XG4gICAgICAgIGtleS5hbGdvcml0aG0gPSB7IG5hbWU6IHRoaXMubmFtZSB9O1xuICAgICAgICBrZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAga2V5LnVzYWdlcyA9IGtleVVzYWdlcztcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBhc3luYyBvbkRlcml2ZUJpdHMocGFyYW1zLCBiYXNlS2V5LCBsZW5ndGgpIHtcbiAgICAgICAgY29uc3QgaGFzaCA9IHBhcmFtcy5oYXNoLm5hbWUucmVwbGFjZShcIi1cIiwgXCJcIik7XG4gICAgICAgIGNvbnN0IGhhc2hMZW5ndGggPSBjcnlwdG8uY3JlYXRlSGFzaChoYXNoKS5kaWdlc3QoKS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGJ5dGVMZW5ndGggPSBsZW5ndGggLyA4O1xuICAgICAgICBjb25zdCBpbmZvID0gQnVmZmVyU291cmNlQ29udmVydGVyJDEudG9VaW50OEFycmF5KHBhcmFtcy5pbmZvKTtcbiAgICAgICAgY29uc3QgUFJLID0gY3J5cHRvLmNyZWF0ZUhtYWMoaGFzaCwgQnVmZmVyU291cmNlQ29udmVydGVyJDEudG9VaW50OEFycmF5KHBhcmFtcy5zYWx0KSlcbiAgICAgICAgICAgIC51cGRhdGUoQnVmZmVyU291cmNlQ29udmVydGVyJDEudG9VaW50OEFycmF5KGdldENyeXB0b0tleShiYXNlS2V5KS5kYXRhKSlcbiAgICAgICAgICAgIC5kaWdlc3QoKTtcbiAgICAgICAgY29uc3QgYmxvY2tzID0gW0J1ZmZlciQxLmFsbG9jKDApXTtcbiAgICAgICAgY29uc3QgYmxvY2tDb3VudCA9IE1hdGguY2VpbChieXRlTGVuZ3RoIC8gaGFzaExlbmd0aCkgKyAxO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGJsb2NrQ291bnQ7ICsraSkge1xuICAgICAgICAgICAgYmxvY2tzLnB1c2goY3J5cHRvLmNyZWF0ZUhtYWMoaGFzaCwgUFJLKVxuICAgICAgICAgICAgICAgIC51cGRhdGUoQnVmZmVyJDEuY29uY2F0KFtibG9ja3NbaSAtIDFdLCBpbmZvLCBCdWZmZXIkMS5mcm9tKFtpXSldKSlcbiAgICAgICAgICAgICAgICAuZGlnZXN0KCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBCdWZmZXIkMS5jb25jYXQoYmxvY2tzKS5zbGljZSgwLCBieXRlTGVuZ3RoKTtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgaWYgKCEoZ2V0Q3J5cHRvS2V5KGtleSkgaW5zdGFuY2VvZiBIa2RmQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleTogSXMgbm90IEhLREYgQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBTaGFrZUNyeXB0byB7XG4gICAgc3RhdGljIGRpZ2VzdChhbGdvcml0aG0sIGRhdGEpIHtcbiAgICAgICAgY29uc3QgaGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKGFsZ29yaXRobS5uYW1lLnRvTG93ZXJDYXNlKCksIHsgb3V0cHV0TGVuZ3RoOiBhbGdvcml0aG0ubGVuZ3RoIH0pXG4gICAgICAgICAgICAudXBkYXRlKEJ1ZmZlciQxLmZyb20oZGF0YSkpLmRpZ2VzdCgpO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoaGFzaCkuYnVmZmVyO1xuICAgIH1cbn1cblxuY2xhc3MgU2hha2UxMjhQcm92aWRlciBleHRlbmRzIGNvcmUuU2hha2UxMjhQcm92aWRlciB7XG4gICAgYXN5bmMgb25EaWdlc3QoYWxnb3JpdGhtLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBTaGFrZUNyeXB0by5kaWdlc3QoYWxnb3JpdGhtLCBkYXRhKTtcbiAgICB9XG59XG5cbmNsYXNzIFNoYWtlMjU2UHJvdmlkZXIgZXh0ZW5kcyBjb3JlLlNoYWtlMjU2UHJvdmlkZXIge1xuICAgIGFzeW5jIG9uRGlnZXN0KGFsZ29yaXRobSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gU2hha2VDcnlwdG8uZGlnZXN0KGFsZ29yaXRobSwgZGF0YSk7XG4gICAgfVxufVxuXG5jbGFzcyBTdWJ0bGVDcnlwdG8gZXh0ZW5kcyBjb3JlLlN1YnRsZUNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBBZXNDYmNQcm92aWRlcigpKTtcbiAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBBZXNDdHJQcm92aWRlcigpKTtcbiAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBBZXNHY21Qcm92aWRlcigpKTtcbiAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBBZXNDbWFjUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgQWVzS3dQcm92aWRlcigpKTtcbiAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBBZXNFY2JQcm92aWRlcigpKTtcbiAgICAgICAgY29uc3QgY2lwaGVycyA9IGNyeXB0by5nZXRDaXBoZXJzKCk7XG4gICAgICAgIGlmIChjaXBoZXJzLmluY2x1ZGVzKFwiZGVzLWNiY1wiKSkge1xuICAgICAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBEZXNDYmNQcm92aWRlcigpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IERlc0VkZTNDYmNQcm92aWRlcigpKTtcbiAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBSc2FTc2FQcm92aWRlcigpKTtcbiAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBSc2FQc3NQcm92aWRlcigpKTtcbiAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBSc2FPYWVwUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgUnNhRXNQcm92aWRlcigpKTtcbiAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBFY2RzYVByb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IEVjZGhQcm92aWRlcigpKTtcbiAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBTaGExUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgU2hhMjU2UHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgU2hhMzg0UHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgU2hhNTEyUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgUGJrZGYyUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgSG1hY1Byb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IEhrZGZQcm92aWRlcigpKTtcbiAgICAgICAgY29uc3Qgbm9kZU1ham9yVmVyc2lvbiA9IChfYSA9IC9edihcXGQrKS8uZXhlYyhwcm9jZXNzLnZlcnNpb24pKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2FbMV07XG4gICAgICAgIGlmIChub2RlTWFqb3JWZXJzaW9uICYmIHBhcnNlSW50KG5vZGVNYWpvclZlcnNpb24sIDEwKSA+PSAxMikge1xuICAgICAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBTaGFrZTEyOFByb3ZpZGVyKCkpO1xuICAgICAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBTaGFrZTI1NlByb3ZpZGVyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhhc2hlcyA9IGNyeXB0by5nZXRIYXNoZXMoKTtcbiAgICAgICAgaWYgKGhhc2hlcy5pbmNsdWRlcyhcInNoYTMtMjU2XCIpKSB7XG4gICAgICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IFNoYTMyNTZQcm92aWRlcigpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaGFzaGVzLmluY2x1ZGVzKFwic2hhMy0zODRcIikpIHtcbiAgICAgICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgU2hhMzM4NFByb3ZpZGVyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChoYXNoZXMuaW5jbHVkZXMoXCJzaGEzLTUxMlwiKSkge1xuICAgICAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBTaGEzNTEyUHJvdmlkZXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGVNYWpvclZlcnNpb24gJiYgcGFyc2VJbnQobm9kZU1ham9yVmVyc2lvbiwgMTApID49IDE0KSB7XG4gICAgICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IEVkRHNhUHJvdmlkZXIoKSk7XG4gICAgICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IEVjZGhFc1Byb3ZpZGVyKCkpO1xuICAgICAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBFZDI1NTE5UHJvdmlkZXIoKSk7XG4gICAgICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IFgyNTUxOVByb3ZpZGVyKCkpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBDcnlwdG8gZXh0ZW5kcyBjb3JlLkNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuc3VidGxlID0gbmV3IFN1YnRsZUNyeXB0bygpO1xuICAgIH1cbiAgICBnZXRSYW5kb21WYWx1ZXMoYXJyYXkpIHtcbiAgICAgICAgaWYgKCFBcnJheUJ1ZmZlci5pc1ZpZXcoYXJyYXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2dldFJhbmRvbVZhbHVlcycgb24gJ0NyeXB0byc6IHBhcmFtZXRlciAxIGlzIG5vdCBvZiB0eXBlICdBcnJheUJ1ZmZlclZpZXcnXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlciQxLmZyb20oYXJyYXkuYnVmZmVyLCBhcnJheS5ieXRlT2Zmc2V0LCBhcnJheS5ieXRlTGVuZ3RoKTtcbiAgICAgICAgY3J5cHRvLnJhbmRvbUZpbGxTeW5jKGJ1ZmZlcik7XG4gICAgICAgIHJldHVybiBhcnJheTtcbiAgICB9XG59XG5cbmV4cG9ydCB7IENyeXB0byB9O1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmV4cG9ydCB7IGludGVybmFsU3ltYm9sLCBpbnRlcm5hbFN0YXRlU3ltYm9sLCBpbnN0YW5jZVN5bWJvbCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNC4wXG4gKi9cbmNvbnN0IGludGVybmFsU3ltYm9sID0gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvaW50ZXJuYWxcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgaW50ZXJuYWxTdGF0ZVN5bWJvbCA9IFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL3N0YXRlXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpbnN0YW5jZVN5bWJvbCA9IFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2luc3RhbmNlXCIpO1xuIiwgImV4cG9ydCB2YXIgdG9wID0gJ3RvcCc7XG5leHBvcnQgdmFyIGJvdHRvbSA9ICdib3R0b20nO1xuZXhwb3J0IHZhciByaWdodCA9ICdyaWdodCc7XG5leHBvcnQgdmFyIGxlZnQgPSAnbGVmdCc7XG5leHBvcnQgdmFyIGF1dG8gPSAnYXV0byc7XG5leHBvcnQgdmFyIGJhc2VQbGFjZW1lbnRzID0gW3RvcCwgYm90dG9tLCByaWdodCwgbGVmdF07XG5leHBvcnQgdmFyIHN0YXJ0ID0gJ3N0YXJ0JztcbmV4cG9ydCB2YXIgZW5kID0gJ2VuZCc7XG5leHBvcnQgdmFyIGNsaXBwaW5nUGFyZW50cyA9ICdjbGlwcGluZ1BhcmVudHMnO1xuZXhwb3J0IHZhciB2aWV3cG9ydCA9ICd2aWV3cG9ydCc7XG5leHBvcnQgdmFyIHBvcHBlciA9ICdwb3BwZXInO1xuZXhwb3J0IHZhciByZWZlcmVuY2UgPSAncmVmZXJlbmNlJztcbmV4cG9ydCB2YXIgdmFyaWF0aW9uUGxhY2VtZW50cyA9IC8qI19fUFVSRV9fKi9iYXNlUGxhY2VtZW50cy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGxhY2VtZW50KSB7XG4gIHJldHVybiBhY2MuY29uY2F0KFtwbGFjZW1lbnQgKyBcIi1cIiArIHN0YXJ0LCBwbGFjZW1lbnQgKyBcIi1cIiArIGVuZF0pO1xufSwgW10pO1xuZXhwb3J0IHZhciBwbGFjZW1lbnRzID0gLyojX19QVVJFX18qL1tdLmNvbmNhdChiYXNlUGxhY2VtZW50cywgW2F1dG9dKS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGxhY2VtZW50KSB7XG4gIHJldHVybiBhY2MuY29uY2F0KFtwbGFjZW1lbnQsIHBsYWNlbWVudCArIFwiLVwiICsgc3RhcnQsIHBsYWNlbWVudCArIFwiLVwiICsgZW5kXSk7XG59LCBbXSk7IC8vIG1vZGlmaWVycyB0aGF0IG5lZWQgdG8gcmVhZCB0aGUgRE9NXG5cbmV4cG9ydCB2YXIgYmVmb3JlUmVhZCA9ICdiZWZvcmVSZWFkJztcbmV4cG9ydCB2YXIgcmVhZCA9ICdyZWFkJztcbmV4cG9ydCB2YXIgYWZ0ZXJSZWFkID0gJ2FmdGVyUmVhZCc7IC8vIHB1cmUtbG9naWMgbW9kaWZpZXJzXG5cbmV4cG9ydCB2YXIgYmVmb3JlTWFpbiA9ICdiZWZvcmVNYWluJztcbmV4cG9ydCB2YXIgbWFpbiA9ICdtYWluJztcbmV4cG9ydCB2YXIgYWZ0ZXJNYWluID0gJ2FmdGVyTWFpbic7IC8vIG1vZGlmaWVyIHdpdGggdGhlIHB1cnBvc2UgdG8gd3JpdGUgdG8gdGhlIERPTSAob3Igd3JpdGUgaW50byBhIGZyYW1ld29yayBzdGF0ZSlcblxuZXhwb3J0IHZhciBiZWZvcmVXcml0ZSA9ICdiZWZvcmVXcml0ZSc7XG5leHBvcnQgdmFyIHdyaXRlID0gJ3dyaXRlJztcbmV4cG9ydCB2YXIgYWZ0ZXJXcml0ZSA9ICdhZnRlcldyaXRlJztcbmV4cG9ydCB2YXIgbW9kaWZpZXJQaGFzZXMgPSBbYmVmb3JlUmVhZCwgcmVhZCwgYWZ0ZXJSZWFkLCBiZWZvcmVNYWluLCBtYWluLCBhZnRlck1haW4sIGJlZm9yZVdyaXRlLCB3cml0ZSwgYWZ0ZXJXcml0ZV07IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE5vZGVOYW1lKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQgPyAoZWxlbWVudC5ub2RlTmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKSA6IG51bGw7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFdpbmRvdyhub2RlKSB7XG4gIGlmIChub2RlID09IG51bGwpIHtcbiAgICByZXR1cm4gd2luZG93O1xuICB9XG5cbiAgaWYgKG5vZGUudG9TdHJpbmcoKSAhPT0gJ1tvYmplY3QgV2luZG93XScpIHtcbiAgICB2YXIgb3duZXJEb2N1bWVudCA9IG5vZGUub3duZXJEb2N1bWVudDtcbiAgICByZXR1cm4gb3duZXJEb2N1bWVudCA/IG93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcgfHwgd2luZG93IDogd2luZG93O1xuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59IiwgImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5cbmZ1bmN0aW9uIGlzRWxlbWVudChub2RlKSB7XG4gIHZhciBPd25FbGVtZW50ID0gZ2V0V2luZG93KG5vZGUpLkVsZW1lbnQ7XG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgT3duRWxlbWVudCB8fCBub2RlIGluc3RhbmNlb2YgRWxlbWVudDtcbn1cblxuZnVuY3Rpb24gaXNIVE1MRWxlbWVudChub2RlKSB7XG4gIHZhciBPd25FbGVtZW50ID0gZ2V0V2luZG93KG5vZGUpLkhUTUxFbGVtZW50O1xuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIE93bkVsZW1lbnQgfHwgbm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50O1xufVxuXG5mdW5jdGlvbiBpc1NoYWRvd1Jvb3Qobm9kZSkge1xuICAvLyBJRSAxMSBoYXMgbm8gU2hhZG93Um9vdFxuICBpZiAodHlwZW9mIFNoYWRvd1Jvb3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIE93bkVsZW1lbnQgPSBnZXRXaW5kb3cobm9kZSkuU2hhZG93Um9vdDtcbiAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBPd25FbGVtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBTaGFkb3dSb290O1xufVxuXG5leHBvcnQgeyBpc0VsZW1lbnQsIGlzSFRNTEVsZW1lbnQsIGlzU2hhZG93Um9vdCB9OyIsICJpbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4uL2RvbS11dGlscy9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuLi9kb20tdXRpbHMvaW5zdGFuY2VPZi5qc1wiOyAvLyBUaGlzIG1vZGlmaWVyIHRha2VzIHRoZSBzdHlsZXMgcHJlcGFyZWQgYnkgdGhlIGBjb21wdXRlU3R5bGVzYCBtb2RpZmllclxuLy8gYW5kIGFwcGxpZXMgdGhlbSB0byB0aGUgSFRNTEVsZW1lbnRzIHN1Y2ggYXMgcG9wcGVyIGFuZCBhcnJvd1xuXG5mdW5jdGlvbiBhcHBseVN0eWxlcyhfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGU7XG4gIE9iamVjdC5rZXlzKHN0YXRlLmVsZW1lbnRzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdmFyIHN0eWxlID0gc3RhdGUuc3R5bGVzW25hbWVdIHx8IHt9O1xuICAgIHZhciBhdHRyaWJ1dGVzID0gc3RhdGUuYXR0cmlidXRlc1tuYW1lXSB8fCB7fTtcbiAgICB2YXIgZWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzW25hbWVdOyAvLyBhcnJvdyBpcyBvcHRpb25hbCArIHZpcnR1YWwgZWxlbWVudHNcblxuICAgIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCAhZ2V0Tm9kZU5hbWUoZWxlbWVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIEZsb3cgZG9lc24ndCBzdXBwb3J0IHRvIGV4dGVuZCB0aGlzIHByb3BlcnR5LCBidXQgaXQncyB0aGUgbW9zdFxuICAgIC8vIGVmZmVjdGl2ZSB3YXkgdG8gYXBwbHkgc3R5bGVzIHRvIGFuIEhUTUxFbGVtZW50XG4gICAgLy8gJEZsb3dGaXhNZVtjYW5ub3Qtd3JpdGVdXG5cblxuICAgIE9iamVjdC5hc3NpZ24oZWxlbWVudC5zdHlsZSwgc3R5bGUpO1xuICAgIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGF0dHJpYnV0ZXNbbmFtZV07XG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSA9PT0gdHJ1ZSA/ICcnIDogdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZWZmZWN0KF9yZWYyKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYyLnN0YXRlO1xuICB2YXIgaW5pdGlhbFN0eWxlcyA9IHtcbiAgICBwb3BwZXI6IHtcbiAgICAgIHBvc2l0aW9uOiBzdGF0ZS5vcHRpb25zLnN0cmF0ZWd5LFxuICAgICAgbGVmdDogJzAnLFxuICAgICAgdG9wOiAnMCcsXG4gICAgICBtYXJnaW46ICcwJ1xuICAgIH0sXG4gICAgYXJyb3c6IHtcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnXG4gICAgfSxcbiAgICByZWZlcmVuY2U6IHt9XG4gIH07XG4gIE9iamVjdC5hc3NpZ24oc3RhdGUuZWxlbWVudHMucG9wcGVyLnN0eWxlLCBpbml0aWFsU3R5bGVzLnBvcHBlcik7XG4gIHN0YXRlLnN0eWxlcyA9IGluaXRpYWxTdHlsZXM7XG5cbiAgaWYgKHN0YXRlLmVsZW1lbnRzLmFycm93KSB7XG4gICAgT2JqZWN0LmFzc2lnbihzdGF0ZS5lbGVtZW50cy5hcnJvdy5zdHlsZSwgaW5pdGlhbFN0eWxlcy5hcnJvdyk7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIE9iamVjdC5rZXlzKHN0YXRlLmVsZW1lbnRzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICB2YXIgZWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzW25hbWVdO1xuICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBzdGF0ZS5hdHRyaWJ1dGVzW25hbWVdIHx8IHt9O1xuICAgICAgdmFyIHN0eWxlUHJvcGVydGllcyA9IE9iamVjdC5rZXlzKHN0YXRlLnN0eWxlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSA/IHN0YXRlLnN0eWxlc1tuYW1lXSA6IGluaXRpYWxTdHlsZXNbbmFtZV0pOyAvLyBTZXQgYWxsIHZhbHVlcyB0byBhbiBlbXB0eSBzdHJpbmcgdG8gdW5zZXQgdGhlbVxuXG4gICAgICB2YXIgc3R5bGUgPSBzdHlsZVByb3BlcnRpZXMucmVkdWNlKGZ1bmN0aW9uIChzdHlsZSwgcHJvcGVydHkpIHtcbiAgICAgICAgc3R5bGVbcHJvcGVydHldID0gJyc7XG4gICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgIH0sIHt9KTsgLy8gYXJyb3cgaXMgb3B0aW9uYWwgKyB2aXJ0dWFsIGVsZW1lbnRzXG5cbiAgICAgIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCAhZ2V0Tm9kZU5hbWUoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBPYmplY3QuYXNzaWduKGVsZW1lbnQuc3R5bGUsIHN0eWxlKTtcbiAgICAgIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLmZvckVhY2goZnVuY3Rpb24gKGF0dHJpYnV0ZSkge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShhdHRyaWJ1dGUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdhcHBseVN0eWxlcycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnd3JpdGUnLFxuICBmbjogYXBwbHlTdHlsZXMsXG4gIGVmZmVjdDogZWZmZWN0LFxuICByZXF1aXJlczogWydjb21wdXRlU3R5bGVzJ11cbn07IiwgImltcG9ydCB7IGF1dG8gfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQuc3BsaXQoJy0nKVswXTtcbn0iLCAiZXhwb3J0IHZhciBtYXggPSBNYXRoLm1heDtcbmV4cG9ydCB2YXIgbWluID0gTWF0aC5taW47XG5leHBvcnQgdmFyIHJvdW5kID0gTWF0aC5yb3VuZDsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VUFTdHJpbmcoKSB7XG4gIHZhciB1YURhdGEgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YTtcblxuICBpZiAodWFEYXRhICE9IG51bGwgJiYgdWFEYXRhLmJyYW5kcyAmJiBBcnJheS5pc0FycmF5KHVhRGF0YS5icmFuZHMpKSB7XG4gICAgcmV0dXJuIHVhRGF0YS5icmFuZHMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gaXRlbS5icmFuZCArIFwiL1wiICsgaXRlbS52ZXJzaW9uO1xuICAgIH0pLmpvaW4oJyAnKTtcbiAgfVxuXG4gIHJldHVybiBuYXZpZ2F0b3IudXNlckFnZW50O1xufSIsICJpbXBvcnQgZ2V0VUFTdHJpbmcgZnJvbSBcIi4uL3V0aWxzL3VzZXJBZ2VudC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNMYXlvdXRWaWV3cG9ydCgpIHtcbiAgcmV0dXJuICEvXigoPyFjaHJvbWV8YW5kcm9pZCkuKSpzYWZhcmkvaS50ZXN0KGdldFVBU3RyaW5nKCkpO1xufSIsICJpbXBvcnQgeyBpc0VsZW1lbnQsIGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgeyByb3VuZCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGlzTGF5b3V0Vmlld3BvcnQgZnJvbSBcIi4vaXNMYXlvdXRWaWV3cG9ydC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIGluY2x1ZGVTY2FsZSwgaXNGaXhlZFN0cmF0ZWd5KSB7XG4gIGlmIChpbmNsdWRlU2NhbGUgPT09IHZvaWQgMCkge1xuICAgIGluY2x1ZGVTY2FsZSA9IGZhbHNlO1xuICB9XG5cbiAgaWYgKGlzRml4ZWRTdHJhdGVneSA9PT0gdm9pZCAwKSB7XG4gICAgaXNGaXhlZFN0cmF0ZWd5ID0gZmFsc2U7XG4gIH1cblxuICB2YXIgY2xpZW50UmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHZhciBzY2FsZVggPSAxO1xuICB2YXIgc2NhbGVZID0gMTtcblxuICBpZiAoaW5jbHVkZVNjYWxlICYmIGlzSFRNTEVsZW1lbnQoZWxlbWVudCkpIHtcbiAgICBzY2FsZVggPSBlbGVtZW50Lm9mZnNldFdpZHRoID4gMCA/IHJvdW5kKGNsaWVudFJlY3Qud2lkdGgpIC8gZWxlbWVudC5vZmZzZXRXaWR0aCB8fCAxIDogMTtcbiAgICBzY2FsZVkgPSBlbGVtZW50Lm9mZnNldEhlaWdodCA+IDAgPyByb3VuZChjbGllbnRSZWN0LmhlaWdodCkgLyBlbGVtZW50Lm9mZnNldEhlaWdodCB8fCAxIDogMTtcbiAgfVxuXG4gIHZhciBfcmVmID0gaXNFbGVtZW50KGVsZW1lbnQpID8gZ2V0V2luZG93KGVsZW1lbnQpIDogd2luZG93LFxuICAgICAgdmlzdWFsVmlld3BvcnQgPSBfcmVmLnZpc3VhbFZpZXdwb3J0O1xuXG4gIHZhciBhZGRWaXN1YWxPZmZzZXRzID0gIWlzTGF5b3V0Vmlld3BvcnQoKSAmJiBpc0ZpeGVkU3RyYXRlZ3k7XG4gIHZhciB4ID0gKGNsaWVudFJlY3QubGVmdCArIChhZGRWaXN1YWxPZmZzZXRzICYmIHZpc3VhbFZpZXdwb3J0ID8gdmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdCA6IDApKSAvIHNjYWxlWDtcbiAgdmFyIHkgPSAoY2xpZW50UmVjdC50b3AgKyAoYWRkVmlzdWFsT2Zmc2V0cyAmJiB2aXN1YWxWaWV3cG9ydCA/IHZpc3VhbFZpZXdwb3J0Lm9mZnNldFRvcCA6IDApKSAvIHNjYWxlWTtcbiAgdmFyIHdpZHRoID0gY2xpZW50UmVjdC53aWR0aCAvIHNjYWxlWDtcbiAgdmFyIGhlaWdodCA9IGNsaWVudFJlY3QuaGVpZ2h0IC8gc2NhbGVZO1xuICByZXR1cm4ge1xuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICB0b3A6IHksXG4gICAgcmlnaHQ6IHggKyB3aWR0aCxcbiAgICBib3R0b206IHkgKyBoZWlnaHQsXG4gICAgbGVmdDogeCxcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcbn0iLCAiaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjsgLy8gUmV0dXJucyB0aGUgbGF5b3V0IHJlY3Qgb2YgYW4gZWxlbWVudCByZWxhdGl2ZSB0byBpdHMgb2Zmc2V0UGFyZW50LiBMYXlvdXRcbi8vIG1lYW5zIGl0IGRvZXNuJ3QgdGFrZSBpbnRvIGFjY291bnQgdHJhbnNmb3Jtcy5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0TGF5b3V0UmVjdChlbGVtZW50KSB7XG4gIHZhciBjbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQpOyAvLyBVc2UgdGhlIGNsaWVudFJlY3Qgc2l6ZXMgaWYgaXQncyBub3QgYmVlbiB0cmFuc2Zvcm1lZC5cbiAgLy8gRml4ZXMgaHR0cHM6Ly9naXRodWIuY29tL3BvcHBlcmpzL3BvcHBlci1jb3JlL2lzc3Vlcy8xMjIzXG5cbiAgdmFyIHdpZHRoID0gZWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgdmFyIGhlaWdodCA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuXG4gIGlmIChNYXRoLmFicyhjbGllbnRSZWN0LndpZHRoIC0gd2lkdGgpIDw9IDEpIHtcbiAgICB3aWR0aCA9IGNsaWVudFJlY3Qud2lkdGg7XG4gIH1cblxuICBpZiAoTWF0aC5hYnMoY2xpZW50UmVjdC5oZWlnaHQgLSBoZWlnaHQpIDw9IDEpIHtcbiAgICBoZWlnaHQgPSBjbGllbnRSZWN0LmhlaWdodDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgeDogZWxlbWVudC5vZmZzZXRMZWZ0LFxuICAgIHk6IGVsZW1lbnQub2Zmc2V0VG9wLFxuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodFxuICB9O1xufSIsICJpbXBvcnQgeyBpc1NoYWRvd1Jvb3QgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb250YWlucyhwYXJlbnQsIGNoaWxkKSB7XG4gIHZhciByb290Tm9kZSA9IGNoaWxkLmdldFJvb3ROb2RlICYmIGNoaWxkLmdldFJvb3ROb2RlKCk7IC8vIEZpcnN0LCBhdHRlbXB0IHdpdGggZmFzdGVyIG5hdGl2ZSBtZXRob2RcblxuICBpZiAocGFyZW50LmNvbnRhaW5zKGNoaWxkKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIHRoZW4gZmFsbGJhY2sgdG8gY3VzdG9tIGltcGxlbWVudGF0aW9uIHdpdGggU2hhZG93IERPTSBzdXBwb3J0XG4gIGVsc2UgaWYgKHJvb3ROb2RlICYmIGlzU2hhZG93Um9vdChyb290Tm9kZSkpIHtcbiAgICAgIHZhciBuZXh0ID0gY2hpbGQ7XG5cbiAgICAgIGRvIHtcbiAgICAgICAgaWYgKG5leHQgJiYgcGFyZW50LmlzU2FtZU5vZGUobmV4dCkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ106IG5lZWQgYSBiZXR0ZXIgd2F5IHRvIGhhbmRsZSB0aGlzLi4uXG5cblxuICAgICAgICBuZXh0ID0gbmV4dC5wYXJlbnROb2RlIHx8IG5leHQuaG9zdDtcbiAgICAgIH0gd2hpbGUgKG5leHQpO1xuICAgIH0gLy8gR2l2ZSB1cCwgdGhlIHJlc3VsdCBpcyBmYWxzZVxuXG5cbiAgcmV0dXJuIGZhbHNlO1xufSIsICJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KSB7XG4gIHJldHVybiBnZXRXaW5kb3coZWxlbWVudCkuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbn0iLCAiaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1RhYmxlRWxlbWVudChlbGVtZW50KSB7XG4gIHJldHVybiBbJ3RhYmxlJywgJ3RkJywgJ3RoJ10uaW5kZXhPZihnZXROb2RlTmFtZShlbGVtZW50KSkgPj0gMDtcbn0iLCAiaW1wb3J0IHsgaXNFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpIHtcbiAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXTogYXNzdW1lIGJvZHkgaXMgYWx3YXlzIGF2YWlsYWJsZVxuICByZXR1cm4gKChpc0VsZW1lbnQoZWxlbWVudCkgPyBlbGVtZW50Lm93bmVyRG9jdW1lbnQgOiAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgZWxlbWVudC5kb2N1bWVudCkgfHwgd2luZG93LmRvY3VtZW50KS5kb2N1bWVudEVsZW1lbnQ7XG59IiwgImltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCB7IGlzU2hhZG93Um9vdCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFBhcmVudE5vZGUoZWxlbWVudCkge1xuICBpZiAoZ2V0Tm9kZU5hbWUoZWxlbWVudCkgPT09ICdodG1sJykge1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG5cbiAgcmV0dXJuICgvLyB0aGlzIGlzIGEgcXVpY2tlciAoYnV0IGxlc3MgdHlwZSBzYWZlKSB3YXkgdG8gc2F2ZSBxdWl0ZSBzb21lIGJ5dGVzIGZyb20gdGhlIGJ1bmRsZVxuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl1cbiAgICAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgICBlbGVtZW50LmFzc2lnbmVkU2xvdCB8fCAvLyBzdGVwIGludG8gdGhlIHNoYWRvdyBET00gb2YgdGhlIHBhcmVudCBvZiBhIHNsb3R0ZWQgbm9kZVxuICAgIGVsZW1lbnQucGFyZW50Tm9kZSB8fCAoIC8vIERPTSBFbGVtZW50IGRldGVjdGVkXG4gICAgaXNTaGFkb3dSb290KGVsZW1lbnQpID8gZWxlbWVudC5ob3N0IDogbnVsbCkgfHwgLy8gU2hhZG93Um9vdCBkZXRlY3RlZFxuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdOiBIVE1MRWxlbWVudCBpcyBhIE5vZGVcbiAgICBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkgLy8gZmFsbGJhY2tcblxuICApO1xufSIsICJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50LCBpc1NoYWRvd1Jvb3QgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgaXNUYWJsZUVsZW1lbnQgZnJvbSBcIi4vaXNUYWJsZUVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRQYXJlbnROb2RlIGZyb20gXCIuL2dldFBhcmVudE5vZGUuanNcIjtcbmltcG9ydCBnZXRVQVN0cmluZyBmcm9tIFwiLi4vdXRpbHMvdXNlckFnZW50LmpzXCI7XG5cbmZ1bmN0aW9uIGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCkge1xuICBpZiAoIWlzSFRNTEVsZW1lbnQoZWxlbWVudCkgfHwgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BvcHBlcmpzL3BvcHBlci1jb3JlL2lzc3Vlcy84MzdcbiAgZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbiA9PT0gJ2ZpeGVkJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQub2Zmc2V0UGFyZW50O1xufSAvLyBgLm9mZnNldFBhcmVudGAgcmVwb3J0cyBgbnVsbGAgZm9yIGZpeGVkIGVsZW1lbnRzLCB3aGlsZSBhYnNvbHV0ZSBlbGVtZW50c1xuLy8gcmV0dXJuIHRoZSBjb250YWluaW5nIGJsb2NrXG5cblxuZnVuY3Rpb24gZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHtcbiAgdmFyIGlzRmlyZWZveCA9IC9maXJlZm94L2kudGVzdChnZXRVQVN0cmluZygpKTtcbiAgdmFyIGlzSUUgPSAvVHJpZGVudC9pLnRlc3QoZ2V0VUFTdHJpbmcoKSk7XG5cbiAgaWYgKGlzSUUgJiYgaXNIVE1MRWxlbWVudChlbGVtZW50KSkge1xuICAgIC8vIEluIElFIDksIDEwIGFuZCAxMSBmaXhlZCBlbGVtZW50cyBjb250YWluaW5nIGJsb2NrIGlzIGFsd2F5cyBlc3RhYmxpc2hlZCBieSB0aGUgdmlld3BvcnRcbiAgICB2YXIgZWxlbWVudENzcyA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG5cbiAgICBpZiAoZWxlbWVudENzcy5wb3NpdGlvbiA9PT0gJ2ZpeGVkJykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgdmFyIGN1cnJlbnROb2RlID0gZ2V0UGFyZW50Tm9kZShlbGVtZW50KTtcblxuICBpZiAoaXNTaGFkb3dSb290KGN1cnJlbnROb2RlKSkge1xuICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUuaG9zdDtcbiAgfVxuXG4gIHdoaWxlIChpc0hUTUxFbGVtZW50KGN1cnJlbnROb2RlKSAmJiBbJ2h0bWwnLCAnYm9keSddLmluZGV4T2YoZ2V0Tm9kZU5hbWUoY3VycmVudE5vZGUpKSA8IDApIHtcbiAgICB2YXIgY3NzID0gZ2V0Q29tcHV0ZWRTdHlsZShjdXJyZW50Tm9kZSk7IC8vIFRoaXMgaXMgbm9uLWV4aGF1c3RpdmUgYnV0IGNvdmVycyB0aGUgbW9zdCBjb21tb24gQ1NTIHByb3BlcnRpZXMgdGhhdFxuICAgIC8vIGNyZWF0ZSBhIGNvbnRhaW5pbmcgYmxvY2suXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0NvbnRhaW5pbmdfYmxvY2sjaWRlbnRpZnlpbmdfdGhlX2NvbnRhaW5pbmdfYmxvY2tcblxuICAgIGlmIChjc3MudHJhbnNmb3JtICE9PSAnbm9uZScgfHwgY3NzLnBlcnNwZWN0aXZlICE9PSAnbm9uZScgfHwgY3NzLmNvbnRhaW4gPT09ICdwYWludCcgfHwgWyd0cmFuc2Zvcm0nLCAncGVyc3BlY3RpdmUnXS5pbmRleE9mKGNzcy53aWxsQ2hhbmdlKSAhPT0gLTEgfHwgaXNGaXJlZm94ICYmIGNzcy53aWxsQ2hhbmdlID09PSAnZmlsdGVyJyB8fCBpc0ZpcmVmb3ggJiYgY3NzLmZpbHRlciAmJiBjc3MuZmlsdGVyICE9PSAnbm9uZScpIHtcbiAgICAgIHJldHVybiBjdXJyZW50Tm9kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5wYXJlbnROb2RlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufSAvLyBHZXRzIHRoZSBjbG9zZXN0IGFuY2VzdG9yIHBvc2l0aW9uZWQgZWxlbWVudC4gSGFuZGxlcyBzb21lIGVkZ2UgY2FzZXMsXG4vLyBzdWNoIGFzIHRhYmxlIGFuY2VzdG9ycyBhbmQgY3Jvc3MgYnJvd3NlciBidWdzLlxuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE9mZnNldFBhcmVudChlbGVtZW50KSB7XG4gIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIHZhciBvZmZzZXRQYXJlbnQgPSBnZXRUcnVlT2Zmc2V0UGFyZW50KGVsZW1lbnQpO1xuXG4gIHdoaWxlIChvZmZzZXRQYXJlbnQgJiYgaXNUYWJsZUVsZW1lbnQob2Zmc2V0UGFyZW50KSAmJiBnZXRDb21wdXRlZFN0eWxlKG9mZnNldFBhcmVudCkucG9zaXRpb24gPT09ICdzdGF0aWMnKSB7XG4gICAgb2Zmc2V0UGFyZW50ID0gZ2V0VHJ1ZU9mZnNldFBhcmVudChvZmZzZXRQYXJlbnQpO1xuICB9XG5cbiAgaWYgKG9mZnNldFBhcmVudCAmJiAoZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSA9PT0gJ2h0bWwnIHx8IGdldE5vZGVOYW1lKG9mZnNldFBhcmVudCkgPT09ICdib2R5JyAmJiBnZXRDb21wdXRlZFN0eWxlKG9mZnNldFBhcmVudCkucG9zaXRpb24gPT09ICdzdGF0aWMnKSkge1xuICAgIHJldHVybiB3aW5kb3c7XG4gIH1cblxuICByZXR1cm4gb2Zmc2V0UGFyZW50IHx8IGdldENvbnRhaW5pbmdCbG9jayhlbGVtZW50KSB8fCB3aW5kb3c7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIFsndG9wJywgJ2JvdHRvbSddLmluZGV4T2YocGxhY2VtZW50KSA+PSAwID8gJ3gnIDogJ3knO1xufSIsICJpbXBvcnQgeyBtYXggYXMgbWF0aE1heCwgbWluIGFzIG1hdGhNaW4gfSBmcm9tIFwiLi9tYXRoLmpzXCI7XG5leHBvcnQgZnVuY3Rpb24gd2l0aGluKG1pbiwgdmFsdWUsIG1heCkge1xuICByZXR1cm4gbWF0aE1heChtaW4sIG1hdGhNaW4odmFsdWUsIG1heCkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhpbk1heENsYW1wKG1pbiwgdmFsdWUsIG1heCkge1xuICB2YXIgdiA9IHdpdGhpbihtaW4sIHZhbHVlLCBtYXgpO1xuICByZXR1cm4gdiA+IG1heCA/IG1heCA6IHY7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEZyZXNoU2lkZU9iamVjdCgpIHtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IDAsXG4gICAgcmlnaHQ6IDAsXG4gICAgYm90dG9tOiAwLFxuICAgIGxlZnQ6IDBcbiAgfTtcbn0iLCAiaW1wb3J0IGdldEZyZXNoU2lkZU9iamVjdCBmcm9tIFwiLi9nZXRGcmVzaFNpZGVPYmplY3QuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1lcmdlUGFkZGluZ09iamVjdChwYWRkaW5nT2JqZWN0KSB7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBnZXRGcmVzaFNpZGVPYmplY3QoKSwgcGFkZGluZ09iamVjdCk7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGV4cGFuZFRvSGFzaE1hcCh2YWx1ZSwga2V5cykge1xuICByZXR1cm4ga2V5cy5yZWR1Y2UoZnVuY3Rpb24gKGhhc2hNYXAsIGtleSkge1xuICAgIGhhc2hNYXBba2V5XSA9IHZhbHVlO1xuICAgIHJldHVybiBoYXNoTWFwO1xuICB9LCB7fSk7XG59IiwgImltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0TGF5b3V0UmVjdCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldExheW91dFJlY3QuanNcIjtcbmltcG9ydCBjb250YWlucyBmcm9tIFwiLi4vZG9tLXV0aWxzL2NvbnRhaW5zLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQuanNcIjtcbmltcG9ydCB7IHdpdGhpbiB9IGZyb20gXCIuLi91dGlscy93aXRoaW4uanNcIjtcbmltcG9ydCBtZXJnZVBhZGRpbmdPYmplY3QgZnJvbSBcIi4uL3V0aWxzL21lcmdlUGFkZGluZ09iamVjdC5qc1wiO1xuaW1wb3J0IGV4cGFuZFRvSGFzaE1hcCBmcm9tIFwiLi4vdXRpbHMvZXhwYW5kVG9IYXNoTWFwLmpzXCI7XG5pbXBvcnQgeyBsZWZ0LCByaWdodCwgYmFzZVBsYWNlbWVudHMsIHRvcCwgYm90dG9tIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxudmFyIHRvUGFkZGluZ09iamVjdCA9IGZ1bmN0aW9uIHRvUGFkZGluZ09iamVjdChwYWRkaW5nLCBzdGF0ZSkge1xuICBwYWRkaW5nID0gdHlwZW9mIHBhZGRpbmcgPT09ICdmdW5jdGlvbicgPyBwYWRkaW5nKE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnJlY3RzLCB7XG4gICAgcGxhY2VtZW50OiBzdGF0ZS5wbGFjZW1lbnRcbiAgfSkpIDogcGFkZGluZztcbiAgcmV0dXJuIG1lcmdlUGFkZGluZ09iamVjdCh0eXBlb2YgcGFkZGluZyAhPT0gJ251bWJlcicgPyBwYWRkaW5nIDogZXhwYW5kVG9IYXNoTWFwKHBhZGRpbmcsIGJhc2VQbGFjZW1lbnRzKSk7XG59O1xuXG5mdW5jdGlvbiBhcnJvdyhfcmVmKSB7XG4gIHZhciBfc3RhdGUkbW9kaWZpZXJzRGF0YSQ7XG5cbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWUsXG4gICAgICBvcHRpb25zID0gX3JlZi5vcHRpb25zO1xuICB2YXIgYXJyb3dFbGVtZW50ID0gc3RhdGUuZWxlbWVudHMuYXJyb3c7XG4gIHZhciBwb3BwZXJPZmZzZXRzID0gc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzO1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQoc3RhdGUucGxhY2VtZW50KTtcbiAgdmFyIGF4aXMgPSBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQoYmFzZVBsYWNlbWVudCk7XG4gIHZhciBpc1ZlcnRpY2FsID0gW2xlZnQsIHJpZ2h0XS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpID49IDA7XG4gIHZhciBsZW4gPSBpc1ZlcnRpY2FsID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuXG4gIGlmICghYXJyb3dFbGVtZW50IHx8ICFwb3BwZXJPZmZzZXRzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHBhZGRpbmdPYmplY3QgPSB0b1BhZGRpbmdPYmplY3Qob3B0aW9ucy5wYWRkaW5nLCBzdGF0ZSk7XG4gIHZhciBhcnJvd1JlY3QgPSBnZXRMYXlvdXRSZWN0KGFycm93RWxlbWVudCk7XG4gIHZhciBtaW5Qcm9wID0gYXhpcyA9PT0gJ3knID8gdG9wIDogbGVmdDtcbiAgdmFyIG1heFByb3AgPSBheGlzID09PSAneScgPyBib3R0b20gOiByaWdodDtcbiAgdmFyIGVuZERpZmYgPSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2VbbGVuXSArIHN0YXRlLnJlY3RzLnJlZmVyZW5jZVtheGlzXSAtIHBvcHBlck9mZnNldHNbYXhpc10gLSBzdGF0ZS5yZWN0cy5wb3BwZXJbbGVuXTtcbiAgdmFyIHN0YXJ0RGlmZiA9IHBvcHBlck9mZnNldHNbYXhpc10gLSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2VbYXhpc107XG4gIHZhciBhcnJvd09mZnNldFBhcmVudCA9IGdldE9mZnNldFBhcmVudChhcnJvd0VsZW1lbnQpO1xuICB2YXIgY2xpZW50U2l6ZSA9IGFycm93T2Zmc2V0UGFyZW50ID8gYXhpcyA9PT0gJ3knID8gYXJyb3dPZmZzZXRQYXJlbnQuY2xpZW50SGVpZ2h0IHx8IDAgOiBhcnJvd09mZnNldFBhcmVudC5jbGllbnRXaWR0aCB8fCAwIDogMDtcbiAgdmFyIGNlbnRlclRvUmVmZXJlbmNlID0gZW5kRGlmZiAvIDIgLSBzdGFydERpZmYgLyAyOyAvLyBNYWtlIHN1cmUgdGhlIGFycm93IGRvZXNuJ3Qgb3ZlcmZsb3cgdGhlIHBvcHBlciBpZiB0aGUgY2VudGVyIHBvaW50IGlzXG4gIC8vIG91dHNpZGUgb2YgdGhlIHBvcHBlciBib3VuZHNcblxuICB2YXIgbWluID0gcGFkZGluZ09iamVjdFttaW5Qcm9wXTtcbiAgdmFyIG1heCA9IGNsaWVudFNpemUgLSBhcnJvd1JlY3RbbGVuXSAtIHBhZGRpbmdPYmplY3RbbWF4UHJvcF07XG4gIHZhciBjZW50ZXIgPSBjbGllbnRTaXplIC8gMiAtIGFycm93UmVjdFtsZW5dIC8gMiArIGNlbnRlclRvUmVmZXJlbmNlO1xuICB2YXIgb2Zmc2V0ID0gd2l0aGluKG1pbiwgY2VudGVyLCBtYXgpOyAvLyBQcmV2ZW50cyBicmVha2luZyBzeW50YXggaGlnaGxpZ2h0aW5nLi4uXG5cbiAgdmFyIGF4aXNQcm9wID0gYXhpcztcbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IChfc3RhdGUkbW9kaWZpZXJzRGF0YSQgPSB7fSwgX3N0YXRlJG1vZGlmaWVyc0RhdGEkW2F4aXNQcm9wXSA9IG9mZnNldCwgX3N0YXRlJG1vZGlmaWVyc0RhdGEkLmNlbnRlck9mZnNldCA9IG9mZnNldCAtIGNlbnRlciwgX3N0YXRlJG1vZGlmaWVyc0RhdGEkKTtcbn1cblxuZnVuY3Rpb24gZWZmZWN0KF9yZWYyKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYyLnN0YXRlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYyLm9wdGlvbnM7XG4gIHZhciBfb3B0aW9ucyRlbGVtZW50ID0gb3B0aW9ucy5lbGVtZW50LFxuICAgICAgYXJyb3dFbGVtZW50ID0gX29wdGlvbnMkZWxlbWVudCA9PT0gdm9pZCAwID8gJ1tkYXRhLXBvcHBlci1hcnJvd10nIDogX29wdGlvbnMkZWxlbWVudDtcblxuICBpZiAoYXJyb3dFbGVtZW50ID09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH0gLy8gQ1NTIHNlbGVjdG9yXG5cblxuICBpZiAodHlwZW9mIGFycm93RWxlbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICBhcnJvd0VsZW1lbnQgPSBzdGF0ZS5lbGVtZW50cy5wb3BwZXIucXVlcnlTZWxlY3RvcihhcnJvd0VsZW1lbnQpO1xuXG4gICAgaWYgKCFhcnJvd0VsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpZiAoIWNvbnRhaW5zKHN0YXRlLmVsZW1lbnRzLnBvcHBlciwgYXJyb3dFbGVtZW50KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRlLmVsZW1lbnRzLmFycm93ID0gYXJyb3dFbGVtZW50O1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnYXJyb3cnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICBmbjogYXJyb3csXG4gIGVmZmVjdDogZWZmZWN0LFxuICByZXF1aXJlczogWydwb3BwZXJPZmZzZXRzJ10sXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFsncHJldmVudE92ZXJmbG93J11cbn07IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFZhcmlhdGlvbihwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5zcGxpdCgnLScpWzFdO1xufSIsICJpbXBvcnQgeyB0b3AsIGxlZnQsIHJpZ2h0LCBib3R0b20sIGVuZCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi4vdXRpbHMvZ2V0VmFyaWF0aW9uLmpzXCI7XG5pbXBvcnQgeyByb3VuZCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxudmFyIHVuc2V0U2lkZXMgPSB7XG4gIHRvcDogJ2F1dG8nLFxuICByaWdodDogJ2F1dG8nLFxuICBib3R0b206ICdhdXRvJyxcbiAgbGVmdDogJ2F1dG8nXG59OyAvLyBSb3VuZCB0aGUgb2Zmc2V0cyB0byB0aGUgbmVhcmVzdCBzdWl0YWJsZSBzdWJwaXhlbCBiYXNlZCBvbiB0aGUgRFBSLlxuLy8gWm9vbWluZyBjYW4gY2hhbmdlIHRoZSBEUFIsIGJ1dCBpdCBzZWVtcyB0byByZXBvcnQgYSB2YWx1ZSB0aGF0IHdpbGxcbi8vIGNsZWFubHkgZGl2aWRlIHRoZSB2YWx1ZXMgaW50byB0aGUgYXBwcm9wcmlhdGUgc3VicGl4ZWxzLlxuXG5mdW5jdGlvbiByb3VuZE9mZnNldHNCeURQUihfcmVmLCB3aW4pIHtcbiAgdmFyIHggPSBfcmVmLngsXG4gICAgICB5ID0gX3JlZi55O1xuICB2YXIgZHByID0gd2luLmRldmljZVBpeGVsUmF0aW8gfHwgMTtcbiAgcmV0dXJuIHtcbiAgICB4OiByb3VuZCh4ICogZHByKSAvIGRwciB8fCAwLFxuICAgIHk6IHJvdW5kKHkgKiBkcHIpIC8gZHByIHx8IDBcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hcFRvU3R5bGVzKF9yZWYyKSB7XG4gIHZhciBfT2JqZWN0JGFzc2lnbjI7XG5cbiAgdmFyIHBvcHBlciA9IF9yZWYyLnBvcHBlcixcbiAgICAgIHBvcHBlclJlY3QgPSBfcmVmMi5wb3BwZXJSZWN0LFxuICAgICAgcGxhY2VtZW50ID0gX3JlZjIucGxhY2VtZW50LFxuICAgICAgdmFyaWF0aW9uID0gX3JlZjIudmFyaWF0aW9uLFxuICAgICAgb2Zmc2V0cyA9IF9yZWYyLm9mZnNldHMsXG4gICAgICBwb3NpdGlvbiA9IF9yZWYyLnBvc2l0aW9uLFxuICAgICAgZ3B1QWNjZWxlcmF0aW9uID0gX3JlZjIuZ3B1QWNjZWxlcmF0aW9uLFxuICAgICAgYWRhcHRpdmUgPSBfcmVmMi5hZGFwdGl2ZSxcbiAgICAgIHJvdW5kT2Zmc2V0cyA9IF9yZWYyLnJvdW5kT2Zmc2V0cyxcbiAgICAgIGlzRml4ZWQgPSBfcmVmMi5pc0ZpeGVkO1xuICB2YXIgX29mZnNldHMkeCA9IG9mZnNldHMueCxcbiAgICAgIHggPSBfb2Zmc2V0cyR4ID09PSB2b2lkIDAgPyAwIDogX29mZnNldHMkeCxcbiAgICAgIF9vZmZzZXRzJHkgPSBvZmZzZXRzLnksXG4gICAgICB5ID0gX29mZnNldHMkeSA9PT0gdm9pZCAwID8gMCA6IF9vZmZzZXRzJHk7XG5cbiAgdmFyIF9yZWYzID0gdHlwZW9mIHJvdW5kT2Zmc2V0cyA9PT0gJ2Z1bmN0aW9uJyA/IHJvdW5kT2Zmc2V0cyh7XG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH0pIDoge1xuICAgIHg6IHgsXG4gICAgeTogeVxuICB9O1xuXG4gIHggPSBfcmVmMy54O1xuICB5ID0gX3JlZjMueTtcbiAgdmFyIGhhc1ggPSBvZmZzZXRzLmhhc093blByb3BlcnR5KCd4Jyk7XG4gIHZhciBoYXNZID0gb2Zmc2V0cy5oYXNPd25Qcm9wZXJ0eSgneScpO1xuICB2YXIgc2lkZVggPSBsZWZ0O1xuICB2YXIgc2lkZVkgPSB0b3A7XG4gIHZhciB3aW4gPSB3aW5kb3c7XG5cbiAgaWYgKGFkYXB0aXZlKSB7XG4gICAgdmFyIG9mZnNldFBhcmVudCA9IGdldE9mZnNldFBhcmVudChwb3BwZXIpO1xuICAgIHZhciBoZWlnaHRQcm9wID0gJ2NsaWVudEhlaWdodCc7XG4gICAgdmFyIHdpZHRoUHJvcCA9ICdjbGllbnRXaWR0aCc7XG5cbiAgICBpZiAob2Zmc2V0UGFyZW50ID09PSBnZXRXaW5kb3cocG9wcGVyKSkge1xuICAgICAgb2Zmc2V0UGFyZW50ID0gZ2V0RG9jdW1lbnRFbGVtZW50KHBvcHBlcik7XG5cbiAgICAgIGlmIChnZXRDb21wdXRlZFN0eWxlKG9mZnNldFBhcmVudCkucG9zaXRpb24gIT09ICdzdGF0aWMnICYmIHBvc2l0aW9uID09PSAnYWJzb2x1dGUnKSB7XG4gICAgICAgIGhlaWdodFByb3AgPSAnc2Nyb2xsSGVpZ2h0JztcbiAgICAgICAgd2lkdGhQcm9wID0gJ3Njcm9sbFdpZHRoJztcbiAgICAgIH1cbiAgICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhc3RdOiBmb3JjZSB0eXBlIHJlZmluZW1lbnQsIHdlIGNvbXBhcmUgb2Zmc2V0UGFyZW50IHdpdGggd2luZG93IGFib3ZlLCBidXQgRmxvdyBkb2Vzbid0IGRldGVjdCBpdFxuXG5cbiAgICBvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQ7XG5cbiAgICBpZiAocGxhY2VtZW50ID09PSB0b3AgfHwgKHBsYWNlbWVudCA9PT0gbGVmdCB8fCBwbGFjZW1lbnQgPT09IHJpZ2h0KSAmJiB2YXJpYXRpb24gPT09IGVuZCkge1xuICAgICAgc2lkZVkgPSBib3R0b207XG4gICAgICB2YXIgb2Zmc2V0WSA9IGlzRml4ZWQgJiYgb2Zmc2V0UGFyZW50ID09PSB3aW4gJiYgd2luLnZpc3VhbFZpZXdwb3J0ID8gd2luLnZpc3VhbFZpZXdwb3J0LmhlaWdodCA6IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgICAgb2Zmc2V0UGFyZW50W2hlaWdodFByb3BdO1xuICAgICAgeSAtPSBvZmZzZXRZIC0gcG9wcGVyUmVjdC5oZWlnaHQ7XG4gICAgICB5ICo9IGdwdUFjY2VsZXJhdGlvbiA/IDEgOiAtMTtcbiAgICB9XG5cbiAgICBpZiAocGxhY2VtZW50ID09PSBsZWZ0IHx8IChwbGFjZW1lbnQgPT09IHRvcCB8fCBwbGFjZW1lbnQgPT09IGJvdHRvbSkgJiYgdmFyaWF0aW9uID09PSBlbmQpIHtcbiAgICAgIHNpZGVYID0gcmlnaHQ7XG4gICAgICB2YXIgb2Zmc2V0WCA9IGlzRml4ZWQgJiYgb2Zmc2V0UGFyZW50ID09PSB3aW4gJiYgd2luLnZpc3VhbFZpZXdwb3J0ID8gd2luLnZpc3VhbFZpZXdwb3J0LndpZHRoIDogLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgICBvZmZzZXRQYXJlbnRbd2lkdGhQcm9wXTtcbiAgICAgIHggLT0gb2Zmc2V0WCAtIHBvcHBlclJlY3Qud2lkdGg7XG4gICAgICB4ICo9IGdwdUFjY2VsZXJhdGlvbiA/IDEgOiAtMTtcbiAgICB9XG4gIH1cblxuICB2YXIgY29tbW9uU3R5bGVzID0gT2JqZWN0LmFzc2lnbih7XG4gICAgcG9zaXRpb246IHBvc2l0aW9uXG4gIH0sIGFkYXB0aXZlICYmIHVuc2V0U2lkZXMpO1xuXG4gIHZhciBfcmVmNCA9IHJvdW5kT2Zmc2V0cyA9PT0gdHJ1ZSA/IHJvdW5kT2Zmc2V0c0J5RFBSKHtcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfSwgZ2V0V2luZG93KHBvcHBlcikpIDoge1xuICAgIHg6IHgsXG4gICAgeTogeVxuICB9O1xuXG4gIHggPSBfcmVmNC54O1xuICB5ID0gX3JlZjQueTtcblxuICBpZiAoZ3B1QWNjZWxlcmF0aW9uKSB7XG4gICAgdmFyIF9PYmplY3QkYXNzaWduO1xuXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywgKF9PYmplY3QkYXNzaWduID0ge30sIF9PYmplY3QkYXNzaWduW3NpZGVZXSA9IGhhc1kgPyAnMCcgOiAnJywgX09iamVjdCRhc3NpZ25bc2lkZVhdID0gaGFzWCA/ICcwJyA6ICcnLCBfT2JqZWN0JGFzc2lnbi50cmFuc2Zvcm0gPSAod2luLmRldmljZVBpeGVsUmF0aW8gfHwgMSkgPD0gMSA/IFwidHJhbnNsYXRlKFwiICsgeCArIFwicHgsIFwiICsgeSArIFwicHgpXCIgOiBcInRyYW5zbGF0ZTNkKFwiICsgeCArIFwicHgsIFwiICsgeSArIFwicHgsIDApXCIsIF9PYmplY3QkYXNzaWduKSk7XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgY29tbW9uU3R5bGVzLCAoX09iamVjdCRhc3NpZ24yID0ge30sIF9PYmplY3QkYXNzaWduMltzaWRlWV0gPSBoYXNZID8geSArIFwicHhcIiA6ICcnLCBfT2JqZWN0JGFzc2lnbjJbc2lkZVhdID0gaGFzWCA/IHggKyBcInB4XCIgOiAnJywgX09iamVjdCRhc3NpZ24yLnRyYW5zZm9ybSA9ICcnLCBfT2JqZWN0JGFzc2lnbjIpKTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZVN0eWxlcyhfcmVmNSkge1xuICB2YXIgc3RhdGUgPSBfcmVmNS5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmNS5vcHRpb25zO1xuICB2YXIgX29wdGlvbnMkZ3B1QWNjZWxlcmF0ID0gb3B0aW9ucy5ncHVBY2NlbGVyYXRpb24sXG4gICAgICBncHVBY2NlbGVyYXRpb24gPSBfb3B0aW9ucyRncHVBY2NlbGVyYXQgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRncHVBY2NlbGVyYXQsXG4gICAgICBfb3B0aW9ucyRhZGFwdGl2ZSA9IG9wdGlvbnMuYWRhcHRpdmUsXG4gICAgICBhZGFwdGl2ZSA9IF9vcHRpb25zJGFkYXB0aXZlID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkYWRhcHRpdmUsXG4gICAgICBfb3B0aW9ucyRyb3VuZE9mZnNldHMgPSBvcHRpb25zLnJvdW5kT2Zmc2V0cyxcbiAgICAgIHJvdW5kT2Zmc2V0cyA9IF9vcHRpb25zJHJvdW5kT2Zmc2V0cyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJHJvdW5kT2Zmc2V0cztcbiAgdmFyIGNvbW1vblN0eWxlcyA9IHtcbiAgICBwbGFjZW1lbnQ6IGdldEJhc2VQbGFjZW1lbnQoc3RhdGUucGxhY2VtZW50KSxcbiAgICB2YXJpYXRpb246IGdldFZhcmlhdGlvbihzdGF0ZS5wbGFjZW1lbnQpLFxuICAgIHBvcHBlcjogc3RhdGUuZWxlbWVudHMucG9wcGVyLFxuICAgIHBvcHBlclJlY3Q6IHN0YXRlLnJlY3RzLnBvcHBlcixcbiAgICBncHVBY2NlbGVyYXRpb246IGdwdUFjY2VsZXJhdGlvbixcbiAgICBpc0ZpeGVkOiBzdGF0ZS5vcHRpb25zLnN0cmF0ZWd5ID09PSAnZml4ZWQnXG4gIH07XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyAhPSBudWxsKSB7XG4gICAgc3RhdGUuc3R5bGVzLnBvcHBlciA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnN0eWxlcy5wb3BwZXIsIG1hcFRvU3R5bGVzKE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywge1xuICAgICAgb2Zmc2V0czogc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLFxuICAgICAgcG9zaXRpb246IHN0YXRlLm9wdGlvbnMuc3RyYXRlZ3ksXG4gICAgICBhZGFwdGl2ZTogYWRhcHRpdmUsXG4gICAgICByb3VuZE9mZnNldHM6IHJvdW5kT2Zmc2V0c1xuICAgIH0pKSk7XG4gIH1cblxuICBpZiAoc3RhdGUubW9kaWZpZXJzRGF0YS5hcnJvdyAhPSBudWxsKSB7XG4gICAgc3RhdGUuc3R5bGVzLmFycm93ID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuc3R5bGVzLmFycm93LCBtYXBUb1N0eWxlcyhPYmplY3QuYXNzaWduKHt9LCBjb21tb25TdHlsZXMsIHtcbiAgICAgIG9mZnNldHM6IHN0YXRlLm1vZGlmaWVyc0RhdGEuYXJyb3csXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIGFkYXB0aXZlOiBmYWxzZSxcbiAgICAgIHJvdW5kT2Zmc2V0czogcm91bmRPZmZzZXRzXG4gICAgfSkpKTtcbiAgfVxuXG4gIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIsIHtcbiAgICAnZGF0YS1wb3BwZXItcGxhY2VtZW50Jzogc3RhdGUucGxhY2VtZW50XG4gIH0pO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnY29tcHV0ZVN0eWxlcycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnYmVmb3JlV3JpdGUnLFxuICBmbjogY29tcHV0ZVN0eWxlcyxcbiAgZGF0YToge31cbn07IiwgImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRXaW5kb3cuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG52YXIgcGFzc2l2ZSA9IHtcbiAgcGFzc2l2ZTogdHJ1ZVxufTtcblxuZnVuY3Rpb24gZWZmZWN0KF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIGluc3RhbmNlID0gX3JlZi5pbnN0YW5jZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnM7XG4gIHZhciBfb3B0aW9ucyRzY3JvbGwgPSBvcHRpb25zLnNjcm9sbCxcbiAgICAgIHNjcm9sbCA9IF9vcHRpb25zJHNjcm9sbCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJHNjcm9sbCxcbiAgICAgIF9vcHRpb25zJHJlc2l6ZSA9IG9wdGlvbnMucmVzaXplLFxuICAgICAgcmVzaXplID0gX29wdGlvbnMkcmVzaXplID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkcmVzaXplO1xuICB2YXIgd2luZG93ID0gZ2V0V2luZG93KHN0YXRlLmVsZW1lbnRzLnBvcHBlcik7XG4gIHZhciBzY3JvbGxQYXJlbnRzID0gW10uY29uY2F0KHN0YXRlLnNjcm9sbFBhcmVudHMucmVmZXJlbmNlLCBzdGF0ZS5zY3JvbGxQYXJlbnRzLnBvcHBlcik7XG5cbiAgaWYgKHNjcm9sbCkge1xuICAgIHNjcm9sbFBhcmVudHMuZm9yRWFjaChmdW5jdGlvbiAoc2Nyb2xsUGFyZW50KSB7XG4gICAgICBzY3JvbGxQYXJlbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChyZXNpemUpIHtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHNjcm9sbCkge1xuICAgICAgc2Nyb2xsUGFyZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChzY3JvbGxQYXJlbnQpIHtcbiAgICAgICAgc2Nyb2xsUGFyZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGluc3RhbmNlLnVwZGF0ZSwgcGFzc2l2ZSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAocmVzaXplKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgICB9XG4gIH07XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdldmVudExpc3RlbmVycycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnd3JpdGUnLFxuICBmbjogZnVuY3Rpb24gZm4oKSB7fSxcbiAgZWZmZWN0OiBlZmZlY3QsXG4gIGRhdGE6IHt9XG59OyIsICJ2YXIgaGFzaCA9IHtcbiAgbGVmdDogJ3JpZ2h0JyxcbiAgcmlnaHQ6ICdsZWZ0JyxcbiAgYm90dG9tOiAndG9wJyxcbiAgdG9wOiAnYm90dG9tJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnJlcGxhY2UoL2xlZnR8cmlnaHR8Ym90dG9tfHRvcC9nLCBmdW5jdGlvbiAobWF0Y2hlZCkge1xuICAgIHJldHVybiBoYXNoW21hdGNoZWRdO1xuICB9KTtcbn0iLCAidmFyIGhhc2ggPSB7XG4gIHN0YXJ0OiAnZW5kJyxcbiAgZW5kOiAnc3RhcnQnXG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvc3RhcnR8ZW5kL2csIGZ1bmN0aW9uIChtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGhhc2hbbWF0Y2hlZF07XG4gIH0pO1xufSIsICJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0V2luZG93U2Nyb2xsKG5vZGUpIHtcbiAgdmFyIHdpbiA9IGdldFdpbmRvdyhub2RlKTtcbiAgdmFyIHNjcm9sbExlZnQgPSB3aW4ucGFnZVhPZmZzZXQ7XG4gIHZhciBzY3JvbGxUb3AgPSB3aW4ucGFnZVlPZmZzZXQ7XG4gIHJldHVybiB7XG4gICAgc2Nyb2xsTGVmdDogc2Nyb2xsTGVmdCxcbiAgICBzY3JvbGxUb3A6IHNjcm9sbFRvcFxuICB9O1xufSIsICJpbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGwgZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpIHtcbiAgLy8gSWYgPGh0bWw+IGhhcyBhIENTUyB3aWR0aCBncmVhdGVyIHRoYW4gdGhlIHZpZXdwb3J0LCB0aGVuIHRoaXMgd2lsbCBiZVxuICAvLyBpbmNvcnJlY3QgZm9yIFJUTC5cbiAgLy8gUG9wcGVyIDEgaXMgYnJva2VuIGluIHRoaXMgY2FzZSBhbmQgbmV2ZXIgaGFkIGEgYnVnIHJlcG9ydCBzbyBsZXQncyBhc3N1bWVcbiAgLy8gaXQncyBub3QgYW4gaXNzdWUuIEkgZG9uJ3QgdGhpbmsgYW55b25lIGV2ZXIgc3BlY2lmaWVzIHdpZHRoIG9uIDxodG1sPlxuICAvLyBhbnl3YXkuXG4gIC8vIEJyb3dzZXJzIHdoZXJlIHRoZSBsZWZ0IHNjcm9sbGJhciBkb2Vzbid0IGNhdXNlIGFuIGlzc3VlIHJlcG9ydCBgMGAgZm9yXG4gIC8vIHRoaXMgKGUuZy4gRWRnZSAyMDE5LCBJRTExLCBTYWZhcmkpXG4gIHJldHVybiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpKS5sZWZ0ICsgZ2V0V2luZG93U2Nyb2xsKGVsZW1lbnQpLnNjcm9sbExlZnQ7XG59IiwgImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbEJhclggZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsQmFyWC5qc1wiO1xuaW1wb3J0IGlzTGF5b3V0Vmlld3BvcnQgZnJvbSBcIi4vaXNMYXlvdXRWaWV3cG9ydC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSB7XG4gIHZhciB3aW4gPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIHZhciBodG1sID0gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpO1xuICB2YXIgdmlzdWFsVmlld3BvcnQgPSB3aW4udmlzdWFsVmlld3BvcnQ7XG4gIHZhciB3aWR0aCA9IGh0bWwuY2xpZW50V2lkdGg7XG4gIHZhciBoZWlnaHQgPSBodG1sLmNsaWVudEhlaWdodDtcbiAgdmFyIHggPSAwO1xuICB2YXIgeSA9IDA7XG5cbiAgaWYgKHZpc3VhbFZpZXdwb3J0KSB7XG4gICAgd2lkdGggPSB2aXN1YWxWaWV3cG9ydC53aWR0aDtcbiAgICBoZWlnaHQgPSB2aXN1YWxWaWV3cG9ydC5oZWlnaHQ7XG4gICAgdmFyIGxheW91dFZpZXdwb3J0ID0gaXNMYXlvdXRWaWV3cG9ydCgpO1xuXG4gICAgaWYgKGxheW91dFZpZXdwb3J0IHx8ICFsYXlvdXRWaWV3cG9ydCAmJiBzdHJhdGVneSA9PT0gJ2ZpeGVkJykge1xuICAgICAgeCA9IHZpc3VhbFZpZXdwb3J0Lm9mZnNldExlZnQ7XG4gICAgICB5ID0gdmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0LFxuICAgIHg6IHggKyBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpLFxuICAgIHk6IHlcbiAgfTtcbn0iLCAiaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGxCYXJYIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbEJhclguanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGwgZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsLmpzXCI7XG5pbXBvcnQgeyBtYXggfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiOyAvLyBHZXRzIHRoZSBlbnRpcmUgc2l6ZSBvZiB0aGUgc2Nyb2xsYWJsZSBkb2N1bWVudCBhcmVhLCBldmVuIGV4dGVuZGluZyBvdXRzaWRlXG4vLyBvZiB0aGUgYDxodG1sPmAgYW5kIGA8Ym9keT5gIHJlY3QgYm91bmRzIGlmIGhvcml6b250YWxseSBzY3JvbGxhYmxlXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldERvY3VtZW50UmVjdChlbGVtZW50KSB7XG4gIHZhciBfZWxlbWVudCRvd25lckRvY3VtZW47XG5cbiAgdmFyIGh0bWwgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIHZhciB3aW5TY3JvbGwgPSBnZXRXaW5kb3dTY3JvbGwoZWxlbWVudCk7XG4gIHZhciBib2R5ID0gKF9lbGVtZW50JG93bmVyRG9jdW1lbiA9IGVsZW1lbnQub3duZXJEb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9lbGVtZW50JG93bmVyRG9jdW1lbi5ib2R5O1xuICB2YXIgd2lkdGggPSBtYXgoaHRtbC5zY3JvbGxXaWR0aCwgaHRtbC5jbGllbnRXaWR0aCwgYm9keSA/IGJvZHkuc2Nyb2xsV2lkdGggOiAwLCBib2R5ID8gYm9keS5jbGllbnRXaWR0aCA6IDApO1xuICB2YXIgaGVpZ2h0ID0gbWF4KGh0bWwuc2Nyb2xsSGVpZ2h0LCBodG1sLmNsaWVudEhlaWdodCwgYm9keSA/IGJvZHkuc2Nyb2xsSGVpZ2h0IDogMCwgYm9keSA/IGJvZHkuY2xpZW50SGVpZ2h0IDogMCk7XG4gIHZhciB4ID0gLXdpblNjcm9sbC5zY3JvbGxMZWZ0ICsgZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KTtcbiAgdmFyIHkgPSAtd2luU2Nyb2xsLnNjcm9sbFRvcDtcblxuICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZShib2R5IHx8IGh0bWwpLmRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICB4ICs9IG1heChodG1sLmNsaWVudFdpZHRoLCBib2R5ID8gYm9keS5jbGllbnRXaWR0aCA6IDApIC0gd2lkdGg7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcbn0iLCAiaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4vZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNTY3JvbGxQYXJlbnQoZWxlbWVudCkge1xuICAvLyBGaXJlZm94IHdhbnRzIHVzIHRvIGNoZWNrIGAteGAgYW5kIGAteWAgdmFyaWF0aW9ucyBhcyB3ZWxsXG4gIHZhciBfZ2V0Q29tcHV0ZWRTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCksXG4gICAgICBvdmVyZmxvdyA9IF9nZXRDb21wdXRlZFN0eWxlLm92ZXJmbG93LFxuICAgICAgb3ZlcmZsb3dYID0gX2dldENvbXB1dGVkU3R5bGUub3ZlcmZsb3dYLFxuICAgICAgb3ZlcmZsb3dZID0gX2dldENvbXB1dGVkU3R5bGUub3ZlcmZsb3dZO1xuXG4gIHJldHVybiAvYXV0b3xzY3JvbGx8b3ZlcmxheXxoaWRkZW4vLnRlc3Qob3ZlcmZsb3cgKyBvdmVyZmxvd1kgKyBvdmVyZmxvd1gpO1xufSIsICJpbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tIFwiLi9nZXRQYXJlbnROb2RlLmpzXCI7XG5pbXBvcnQgaXNTY3JvbGxQYXJlbnQgZnJvbSBcIi4vaXNTY3JvbGxQYXJlbnQuanNcIjtcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFNjcm9sbFBhcmVudChub2RlKSB7XG4gIGlmIChbJ2h0bWwnLCAnYm9keScsICcjZG9jdW1lbnQnXS5pbmRleE9mKGdldE5vZGVOYW1lKG5vZGUpKSA+PSAwKSB7XG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXTogYXNzdW1lIGJvZHkgaXMgYWx3YXlzIGF2YWlsYWJsZVxuICAgIHJldHVybiBub2RlLm93bmVyRG9jdW1lbnQuYm9keTtcbiAgfVxuXG4gIGlmIChpc0hUTUxFbGVtZW50KG5vZGUpICYmIGlzU2Nyb2xsUGFyZW50KG5vZGUpKSB7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICByZXR1cm4gZ2V0U2Nyb2xsUGFyZW50KGdldFBhcmVudE5vZGUobm9kZSkpO1xufSIsICJpbXBvcnQgZ2V0U2Nyb2xsUGFyZW50IGZyb20gXCIuL2dldFNjcm9sbFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBpc1Njcm9sbFBhcmVudCBmcm9tIFwiLi9pc1Njcm9sbFBhcmVudC5qc1wiO1xuLypcbmdpdmVuIGEgRE9NIGVsZW1lbnQsIHJldHVybiB0aGUgbGlzdCBvZiBhbGwgc2Nyb2xsIHBhcmVudHMsIHVwIHRoZSBsaXN0IG9mIGFuY2Vzb3JzXG51bnRpbCB3ZSBnZXQgdG8gdGhlIHRvcCB3aW5kb3cgb2JqZWN0LiBUaGlzIGxpc3QgaXMgd2hhdCB3ZSBhdHRhY2ggc2Nyb2xsIGxpc3RlbmVyc1xudG8sIGJlY2F1c2UgaWYgYW55IG9mIHRoZXNlIHBhcmVudCBlbGVtZW50cyBzY3JvbGwsIHdlJ2xsIG5lZWQgdG8gcmUtY2FsY3VsYXRlIHRoZVxucmVmZXJlbmNlIGVsZW1lbnQncyBwb3NpdGlvbi5cbiovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxpc3RTY3JvbGxQYXJlbnRzKGVsZW1lbnQsIGxpc3QpIHtcbiAgdmFyIF9lbGVtZW50JG93bmVyRG9jdW1lbjtcblxuICBpZiAobGlzdCA9PT0gdm9pZCAwKSB7XG4gICAgbGlzdCA9IFtdO1xuICB9XG5cbiAgdmFyIHNjcm9sbFBhcmVudCA9IGdldFNjcm9sbFBhcmVudChlbGVtZW50KTtcbiAgdmFyIGlzQm9keSA9IHNjcm9sbFBhcmVudCA9PT0gKChfZWxlbWVudCRvd25lckRvY3VtZW4gPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfZWxlbWVudCRvd25lckRvY3VtZW4uYm9keSk7XG4gIHZhciB3aW4gPSBnZXRXaW5kb3coc2Nyb2xsUGFyZW50KTtcbiAgdmFyIHRhcmdldCA9IGlzQm9keSA/IFt3aW5dLmNvbmNhdCh3aW4udmlzdWFsVmlld3BvcnQgfHwgW10sIGlzU2Nyb2xsUGFyZW50KHNjcm9sbFBhcmVudCkgPyBzY3JvbGxQYXJlbnQgOiBbXSkgOiBzY3JvbGxQYXJlbnQ7XG4gIHZhciB1cGRhdGVkTGlzdCA9IGxpc3QuY29uY2F0KHRhcmdldCk7XG4gIHJldHVybiBpc0JvZHkgPyB1cGRhdGVkTGlzdCA6IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdOiBpc0JvZHkgdGVsbHMgdXMgdGFyZ2V0IHdpbGwgYmUgYW4gSFRNTEVsZW1lbnQgaGVyZVxuICB1cGRhdGVkTGlzdC5jb25jYXQobGlzdFNjcm9sbFBhcmVudHMoZ2V0UGFyZW50Tm9kZSh0YXJnZXQpKSk7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlY3RUb0NsaWVudFJlY3QocmVjdCkge1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgcmVjdCwge1xuICAgIGxlZnQ6IHJlY3QueCxcbiAgICB0b3A6IHJlY3QueSxcbiAgICByaWdodDogcmVjdC54ICsgcmVjdC53aWR0aCxcbiAgICBib3R0b206IHJlY3QueSArIHJlY3QuaGVpZ2h0XG4gIH0pO1xufSIsICJpbXBvcnQgeyB2aWV3cG9ydCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldFZpZXdwb3J0UmVjdCBmcm9tIFwiLi9nZXRWaWV3cG9ydFJlY3QuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudFJlY3QgZnJvbSBcIi4vZ2V0RG9jdW1lbnRSZWN0LmpzXCI7XG5pbXBvcnQgbGlzdFNjcm9sbFBhcmVudHMgZnJvbSBcIi4vbGlzdFNjcm9sbFBhcmVudHMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4vZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4vZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuaW1wb3J0IHsgaXNFbGVtZW50LCBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCBnZXRQYXJlbnROb2RlIGZyb20gXCIuL2dldFBhcmVudE5vZGUuanNcIjtcbmltcG9ydCBjb250YWlucyBmcm9tIFwiLi9jb250YWlucy5qc1wiO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgcmVjdFRvQ2xpZW50UmVjdCBmcm9tIFwiLi4vdXRpbHMvcmVjdFRvQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IHsgbWF4LCBtaW4gfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiO1xuXG5mdW5jdGlvbiBnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBzdHJhdGVneSkge1xuICB2YXIgcmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBmYWxzZSwgc3RyYXRlZ3kgPT09ICdmaXhlZCcpO1xuICByZWN0LnRvcCA9IHJlY3QudG9wICsgZWxlbWVudC5jbGllbnRUb3A7XG4gIHJlY3QubGVmdCA9IHJlY3QubGVmdCArIGVsZW1lbnQuY2xpZW50TGVmdDtcbiAgcmVjdC5ib3R0b20gPSByZWN0LnRvcCArIGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICByZWN0LnJpZ2h0ID0gcmVjdC5sZWZ0ICsgZWxlbWVudC5jbGllbnRXaWR0aDtcbiAgcmVjdC53aWR0aCA9IGVsZW1lbnQuY2xpZW50V2lkdGg7XG4gIHJlY3QuaGVpZ2h0ID0gZWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gIHJlY3QueCA9IHJlY3QubGVmdDtcbiAgcmVjdC55ID0gcmVjdC50b3A7XG4gIHJldHVybiByZWN0O1xufVxuXG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0RnJvbU1peGVkVHlwZShlbGVtZW50LCBjbGlwcGluZ1BhcmVudCwgc3RyYXRlZ3kpIHtcbiAgcmV0dXJuIGNsaXBwaW5nUGFyZW50ID09PSB2aWV3cG9ydCA/IHJlY3RUb0NsaWVudFJlY3QoZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSkgOiBpc0VsZW1lbnQoY2xpcHBpbmdQYXJlbnQpID8gZ2V0SW5uZXJCb3VuZGluZ0NsaWVudFJlY3QoY2xpcHBpbmdQYXJlbnQsIHN0cmF0ZWd5KSA6IHJlY3RUb0NsaWVudFJlY3QoZ2V0RG9jdW1lbnRSZWN0KGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSkpO1xufSAvLyBBIFwiY2xpcHBpbmcgcGFyZW50XCIgaXMgYW4gb3ZlcmZsb3dhYmxlIGNvbnRhaW5lciB3aXRoIHRoZSBjaGFyYWN0ZXJpc3RpYyBvZlxuLy8gY2xpcHBpbmcgKG9yIGhpZGluZykgb3ZlcmZsb3dpbmcgZWxlbWVudHMgd2l0aCBhIHBvc2l0aW9uIGRpZmZlcmVudCBmcm9tXG4vLyBgaW5pdGlhbGBcblxuXG5mdW5jdGlvbiBnZXRDbGlwcGluZ1BhcmVudHMoZWxlbWVudCkge1xuICB2YXIgY2xpcHBpbmdQYXJlbnRzID0gbGlzdFNjcm9sbFBhcmVudHMoZ2V0UGFyZW50Tm9kZShlbGVtZW50KSk7XG4gIHZhciBjYW5Fc2NhcGVDbGlwcGluZyA9IFsnYWJzb2x1dGUnLCAnZml4ZWQnXS5pbmRleE9mKGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkucG9zaXRpb24pID49IDA7XG4gIHZhciBjbGlwcGVyRWxlbWVudCA9IGNhbkVzY2FwZUNsaXBwaW5nICYmIGlzSFRNTEVsZW1lbnQoZWxlbWVudCkgPyBnZXRPZmZzZXRQYXJlbnQoZWxlbWVudCkgOiBlbGVtZW50O1xuXG4gIGlmICghaXNFbGVtZW50KGNsaXBwZXJFbGVtZW50KSkge1xuICAgIHJldHVybiBbXTtcbiAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvMTQxNFxuXG5cbiAgcmV0dXJuIGNsaXBwaW5nUGFyZW50cy5maWx0ZXIoZnVuY3Rpb24gKGNsaXBwaW5nUGFyZW50KSB7XG4gICAgcmV0dXJuIGlzRWxlbWVudChjbGlwcGluZ1BhcmVudCkgJiYgY29udGFpbnMoY2xpcHBpbmdQYXJlbnQsIGNsaXBwZXJFbGVtZW50KSAmJiBnZXROb2RlTmFtZShjbGlwcGluZ1BhcmVudCkgIT09ICdib2R5JztcbiAgfSk7XG59IC8vIEdldHMgdGhlIG1heGltdW0gYXJlYSB0aGF0IHRoZSBlbGVtZW50IGlzIHZpc2libGUgaW4gZHVlIHRvIGFueSBudW1iZXIgb2Zcbi8vIGNsaXBwaW5nIHBhcmVudHNcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDbGlwcGluZ1JlY3QoZWxlbWVudCwgYm91bmRhcnksIHJvb3RCb3VuZGFyeSwgc3RyYXRlZ3kpIHtcbiAgdmFyIG1haW5DbGlwcGluZ1BhcmVudHMgPSBib3VuZGFyeSA9PT0gJ2NsaXBwaW5nUGFyZW50cycgPyBnZXRDbGlwcGluZ1BhcmVudHMoZWxlbWVudCkgOiBbXS5jb25jYXQoYm91bmRhcnkpO1xuICB2YXIgY2xpcHBpbmdQYXJlbnRzID0gW10uY29uY2F0KG1haW5DbGlwcGluZ1BhcmVudHMsIFtyb290Qm91bmRhcnldKTtcbiAgdmFyIGZpcnN0Q2xpcHBpbmdQYXJlbnQgPSBjbGlwcGluZ1BhcmVudHNbMF07XG4gIHZhciBjbGlwcGluZ1JlY3QgPSBjbGlwcGluZ1BhcmVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2NSZWN0LCBjbGlwcGluZ1BhcmVudCkge1xuICAgIHZhciByZWN0ID0gZ2V0Q2xpZW50UmVjdEZyb21NaXhlZFR5cGUoZWxlbWVudCwgY2xpcHBpbmdQYXJlbnQsIHN0cmF0ZWd5KTtcbiAgICBhY2NSZWN0LnRvcCA9IG1heChyZWN0LnRvcCwgYWNjUmVjdC50b3ApO1xuICAgIGFjY1JlY3QucmlnaHQgPSBtaW4ocmVjdC5yaWdodCwgYWNjUmVjdC5yaWdodCk7XG4gICAgYWNjUmVjdC5ib3R0b20gPSBtaW4ocmVjdC5ib3R0b20sIGFjY1JlY3QuYm90dG9tKTtcbiAgICBhY2NSZWN0LmxlZnQgPSBtYXgocmVjdC5sZWZ0LCBhY2NSZWN0LmxlZnQpO1xuICAgIHJldHVybiBhY2NSZWN0O1xuICB9LCBnZXRDbGllbnRSZWN0RnJvbU1peGVkVHlwZShlbGVtZW50LCBmaXJzdENsaXBwaW5nUGFyZW50LCBzdHJhdGVneSkpO1xuICBjbGlwcGluZ1JlY3Qud2lkdGggPSBjbGlwcGluZ1JlY3QucmlnaHQgLSBjbGlwcGluZ1JlY3QubGVmdDtcbiAgY2xpcHBpbmdSZWN0LmhlaWdodCA9IGNsaXBwaW5nUmVjdC5ib3R0b20gLSBjbGlwcGluZ1JlY3QudG9wO1xuICBjbGlwcGluZ1JlY3QueCA9IGNsaXBwaW5nUmVjdC5sZWZ0O1xuICBjbGlwcGluZ1JlY3QueSA9IGNsaXBwaW5nUmVjdC50b3A7XG4gIHJldHVybiBjbGlwcGluZ1JlY3Q7XG59IiwgImltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4vZ2V0VmFyaWF0aW9uLmpzXCI7XG5pbXBvcnQgZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50IGZyb20gXCIuL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0LCBzdGFydCwgZW5kIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21wdXRlT2Zmc2V0cyhfcmVmKSB7XG4gIHZhciByZWZlcmVuY2UgPSBfcmVmLnJlZmVyZW5jZSxcbiAgICAgIGVsZW1lbnQgPSBfcmVmLmVsZW1lbnQsXG4gICAgICBwbGFjZW1lbnQgPSBfcmVmLnBsYWNlbWVudDtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBwbGFjZW1lbnQgPyBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgOiBudWxsO1xuICB2YXIgdmFyaWF0aW9uID0gcGxhY2VtZW50ID8gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkgOiBudWxsO1xuICB2YXIgY29tbW9uWCA9IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoIC8gMiAtIGVsZW1lbnQud2lkdGggLyAyO1xuICB2YXIgY29tbW9uWSA9IHJlZmVyZW5jZS55ICsgcmVmZXJlbmNlLmhlaWdodCAvIDIgLSBlbGVtZW50LmhlaWdodCAvIDI7XG4gIHZhciBvZmZzZXRzO1xuXG4gIHN3aXRjaCAoYmFzZVBsYWNlbWVudCkge1xuICAgIGNhc2UgdG9wOlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogY29tbW9uWCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnkgLSBlbGVtZW50LmhlaWdodFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBib3R0b206XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiBjb21tb25YLFxuICAgICAgICB5OiByZWZlcmVuY2UueSArIHJlZmVyZW5jZS5oZWlnaHRcbiAgICAgIH07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgcmlnaHQ6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCArIHJlZmVyZW5jZS53aWR0aCxcbiAgICAgICAgeTogY29tbW9uWVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBsZWZ0OlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLnggLSBlbGVtZW50LndpZHRoLFxuICAgICAgICB5OiBjb21tb25ZXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLngsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55XG4gICAgICB9O1xuICB9XG5cbiAgdmFyIG1haW5BeGlzID0gYmFzZVBsYWNlbWVudCA/IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChiYXNlUGxhY2VtZW50KSA6IG51bGw7XG5cbiAgaWYgKG1haW5BeGlzICE9IG51bGwpIHtcbiAgICB2YXIgbGVuID0gbWFpbkF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcblxuICAgIHN3aXRjaCAodmFyaWF0aW9uKSB7XG4gICAgICBjYXNlIHN0YXJ0OlxuICAgICAgICBvZmZzZXRzW21haW5BeGlzXSA9IG9mZnNldHNbbWFpbkF4aXNdIC0gKHJlZmVyZW5jZVtsZW5dIC8gMiAtIGVsZW1lbnRbbGVuXSAvIDIpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBlbmQ6XG4gICAgICAgIG9mZnNldHNbbWFpbkF4aXNdID0gb2Zmc2V0c1ttYWluQXhpc10gKyAocmVmZXJlbmNlW2xlbl0gLyAyIC0gZWxlbWVudFtsZW5dIC8gMik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvZmZzZXRzO1xufSIsICJpbXBvcnQgZ2V0Q2xpcHBpbmdSZWN0IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0Q2xpcHBpbmdSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgY29tcHV0ZU9mZnNldHMgZnJvbSBcIi4vY29tcHV0ZU9mZnNldHMuanNcIjtcbmltcG9ydCByZWN0VG9DbGllbnRSZWN0IGZyb20gXCIuL3JlY3RUb0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCB7IGNsaXBwaW5nUGFyZW50cywgcmVmZXJlbmNlLCBwb3BwZXIsIGJvdHRvbSwgdG9wLCByaWdodCwgYmFzZVBsYWNlbWVudHMsIHZpZXdwb3J0IH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgeyBpc0VsZW1lbnQgfSBmcm9tIFwiLi4vZG9tLXV0aWxzL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBtZXJnZVBhZGRpbmdPYmplY3QgZnJvbSBcIi4vbWVyZ2VQYWRkaW5nT2JqZWN0LmpzXCI7XG5pbXBvcnQgZXhwYW5kVG9IYXNoTWFwIGZyb20gXCIuL2V4cGFuZFRvSGFzaE1hcC5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRldGVjdE92ZXJmbG93KHN0YXRlLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICB2YXIgX29wdGlvbnMgPSBvcHRpb25zLFxuICAgICAgX29wdGlvbnMkcGxhY2VtZW50ID0gX29wdGlvbnMucGxhY2VtZW50LFxuICAgICAgcGxhY2VtZW50ID0gX29wdGlvbnMkcGxhY2VtZW50ID09PSB2b2lkIDAgPyBzdGF0ZS5wbGFjZW1lbnQgOiBfb3B0aW9ucyRwbGFjZW1lbnQsXG4gICAgICBfb3B0aW9ucyRzdHJhdGVneSA9IF9vcHRpb25zLnN0cmF0ZWd5LFxuICAgICAgc3RyYXRlZ3kgPSBfb3B0aW9ucyRzdHJhdGVneSA9PT0gdm9pZCAwID8gc3RhdGUuc3RyYXRlZ3kgOiBfb3B0aW9ucyRzdHJhdGVneSxcbiAgICAgIF9vcHRpb25zJGJvdW5kYXJ5ID0gX29wdGlvbnMuYm91bmRhcnksXG4gICAgICBib3VuZGFyeSA9IF9vcHRpb25zJGJvdW5kYXJ5ID09PSB2b2lkIDAgPyBjbGlwcGluZ1BhcmVudHMgOiBfb3B0aW9ucyRib3VuZGFyeSxcbiAgICAgIF9vcHRpb25zJHJvb3RCb3VuZGFyeSA9IF9vcHRpb25zLnJvb3RCb3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeSA9IF9vcHRpb25zJHJvb3RCb3VuZGFyeSA9PT0gdm9pZCAwID8gdmlld3BvcnQgOiBfb3B0aW9ucyRyb290Qm91bmRhcnksXG4gICAgICBfb3B0aW9ucyRlbGVtZW50Q29udGUgPSBfb3B0aW9ucy5lbGVtZW50Q29udGV4dCxcbiAgICAgIGVsZW1lbnRDb250ZXh0ID0gX29wdGlvbnMkZWxlbWVudENvbnRlID09PSB2b2lkIDAgPyBwb3BwZXIgOiBfb3B0aW9ucyRlbGVtZW50Q29udGUsXG4gICAgICBfb3B0aW9ucyRhbHRCb3VuZGFyeSA9IF9vcHRpb25zLmFsdEJvdW5kYXJ5LFxuICAgICAgYWx0Qm91bmRhcnkgPSBfb3B0aW9ucyRhbHRCb3VuZGFyeSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfb3B0aW9ucyRhbHRCb3VuZGFyeSxcbiAgICAgIF9vcHRpb25zJHBhZGRpbmcgPSBfb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgcGFkZGluZyA9IF9vcHRpb25zJHBhZGRpbmcgPT09IHZvaWQgMCA/IDAgOiBfb3B0aW9ucyRwYWRkaW5nO1xuICB2YXIgcGFkZGluZ09iamVjdCA9IG1lcmdlUGFkZGluZ09iamVjdCh0eXBlb2YgcGFkZGluZyAhPT0gJ251bWJlcicgPyBwYWRkaW5nIDogZXhwYW5kVG9IYXNoTWFwKHBhZGRpbmcsIGJhc2VQbGFjZW1lbnRzKSk7XG4gIHZhciBhbHRDb250ZXh0ID0gZWxlbWVudENvbnRleHQgPT09IHBvcHBlciA/IHJlZmVyZW5jZSA6IHBvcHBlcjtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciBlbGVtZW50ID0gc3RhdGUuZWxlbWVudHNbYWx0Qm91bmRhcnkgPyBhbHRDb250ZXh0IDogZWxlbWVudENvbnRleHRdO1xuICB2YXIgY2xpcHBpbmdDbGllbnRSZWN0ID0gZ2V0Q2xpcHBpbmdSZWN0KGlzRWxlbWVudChlbGVtZW50KSA/IGVsZW1lbnQgOiBlbGVtZW50LmNvbnRleHRFbGVtZW50IHx8IGdldERvY3VtZW50RWxlbWVudChzdGF0ZS5lbGVtZW50cy5wb3BwZXIpLCBib3VuZGFyeSwgcm9vdEJvdW5kYXJ5LCBzdHJhdGVneSk7XG4gIHZhciByZWZlcmVuY2VDbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KHN0YXRlLmVsZW1lbnRzLnJlZmVyZW5jZSk7XG4gIHZhciBwb3BwZXJPZmZzZXRzID0gY29tcHV0ZU9mZnNldHMoe1xuICAgIHJlZmVyZW5jZTogcmVmZXJlbmNlQ2xpZW50UmVjdCxcbiAgICBlbGVtZW50OiBwb3BwZXJSZWN0LFxuICAgIHN0cmF0ZWd5OiAnYWJzb2x1dGUnLFxuICAgIHBsYWNlbWVudDogcGxhY2VtZW50XG4gIH0pO1xuICB2YXIgcG9wcGVyQ2xpZW50UmVjdCA9IHJlY3RUb0NsaWVudFJlY3QoT2JqZWN0LmFzc2lnbih7fSwgcG9wcGVyUmVjdCwgcG9wcGVyT2Zmc2V0cykpO1xuICB2YXIgZWxlbWVudENsaWVudFJlY3QgPSBlbGVtZW50Q29udGV4dCA9PT0gcG9wcGVyID8gcG9wcGVyQ2xpZW50UmVjdCA6IHJlZmVyZW5jZUNsaWVudFJlY3Q7IC8vIHBvc2l0aXZlID0gb3ZlcmZsb3dpbmcgdGhlIGNsaXBwaW5nIHJlY3RcbiAgLy8gMCBvciBuZWdhdGl2ZSA9IHdpdGhpbiB0aGUgY2xpcHBpbmcgcmVjdFxuXG4gIHZhciBvdmVyZmxvd09mZnNldHMgPSB7XG4gICAgdG9wOiBjbGlwcGluZ0NsaWVudFJlY3QudG9wIC0gZWxlbWVudENsaWVudFJlY3QudG9wICsgcGFkZGluZ09iamVjdC50b3AsXG4gICAgYm90dG9tOiBlbGVtZW50Q2xpZW50UmVjdC5ib3R0b20gLSBjbGlwcGluZ0NsaWVudFJlY3QuYm90dG9tICsgcGFkZGluZ09iamVjdC5ib3R0b20sXG4gICAgbGVmdDogY2xpcHBpbmdDbGllbnRSZWN0LmxlZnQgLSBlbGVtZW50Q2xpZW50UmVjdC5sZWZ0ICsgcGFkZGluZ09iamVjdC5sZWZ0LFxuICAgIHJpZ2h0OiBlbGVtZW50Q2xpZW50UmVjdC5yaWdodCAtIGNsaXBwaW5nQ2xpZW50UmVjdC5yaWdodCArIHBhZGRpbmdPYmplY3QucmlnaHRcbiAgfTtcbiAgdmFyIG9mZnNldERhdGEgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLm9mZnNldDsgLy8gT2Zmc2V0cyBjYW4gYmUgYXBwbGllZCBvbmx5IHRvIHRoZSBwb3BwZXIgZWxlbWVudFxuXG4gIGlmIChlbGVtZW50Q29udGV4dCA9PT0gcG9wcGVyICYmIG9mZnNldERhdGEpIHtcbiAgICB2YXIgb2Zmc2V0ID0gb2Zmc2V0RGF0YVtwbGFjZW1lbnRdO1xuICAgIE9iamVjdC5rZXlzKG92ZXJmbG93T2Zmc2V0cykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICB2YXIgbXVsdGlwbHkgPSBbcmlnaHQsIGJvdHRvbV0uaW5kZXhPZihrZXkpID49IDAgPyAxIDogLTE7XG4gICAgICB2YXIgYXhpcyA9IFt0b3AsIGJvdHRvbV0uaW5kZXhPZihrZXkpID49IDAgPyAneScgOiAneCc7XG4gICAgICBvdmVyZmxvd09mZnNldHNba2V5XSArPSBvZmZzZXRbYXhpc10gKiBtdWx0aXBseTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBvdmVyZmxvd09mZnNldHM7XG59IiwgImltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4vZ2V0VmFyaWF0aW9uLmpzXCI7XG5pbXBvcnQgeyB2YXJpYXRpb25QbGFjZW1lbnRzLCBiYXNlUGxhY2VtZW50cywgcGxhY2VtZW50cyBhcyBhbGxQbGFjZW1lbnRzIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4vZGV0ZWN0T3ZlcmZsb3cuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbXB1dGVBdXRvUGxhY2VtZW50KHN0YXRlLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICB2YXIgX29wdGlvbnMgPSBvcHRpb25zLFxuICAgICAgcGxhY2VtZW50ID0gX29wdGlvbnMucGxhY2VtZW50LFxuICAgICAgYm91bmRhcnkgPSBfb3B0aW9ucy5ib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeSA9IF9vcHRpb25zLnJvb3RCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmcgPSBfb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgZmxpcFZhcmlhdGlvbnMgPSBfb3B0aW9ucy5mbGlwVmFyaWF0aW9ucyxcbiAgICAgIF9vcHRpb25zJGFsbG93ZWRBdXRvUCA9IF9vcHRpb25zLmFsbG93ZWRBdXRvUGxhY2VtZW50cyxcbiAgICAgIGFsbG93ZWRBdXRvUGxhY2VtZW50cyA9IF9vcHRpb25zJGFsbG93ZWRBdXRvUCA9PT0gdm9pZCAwID8gYWxsUGxhY2VtZW50cyA6IF9vcHRpb25zJGFsbG93ZWRBdXRvUDtcbiAgdmFyIHZhcmlhdGlvbiA9IGdldFZhcmlhdGlvbihwbGFjZW1lbnQpO1xuICB2YXIgcGxhY2VtZW50cyA9IHZhcmlhdGlvbiA/IGZsaXBWYXJpYXRpb25zID8gdmFyaWF0aW9uUGxhY2VtZW50cyA6IHZhcmlhdGlvblBsYWNlbWVudHMuZmlsdGVyKGZ1bmN0aW9uIChwbGFjZW1lbnQpIHtcbiAgICByZXR1cm4gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkgPT09IHZhcmlhdGlvbjtcbiAgfSkgOiBiYXNlUGxhY2VtZW50cztcbiAgdmFyIGFsbG93ZWRQbGFjZW1lbnRzID0gcGxhY2VtZW50cy5maWx0ZXIoZnVuY3Rpb24gKHBsYWNlbWVudCkge1xuICAgIHJldHVybiBhbGxvd2VkQXV0b1BsYWNlbWVudHMuaW5kZXhPZihwbGFjZW1lbnQpID49IDA7XG4gIH0pO1xuXG4gIGlmIChhbGxvd2VkUGxhY2VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICBhbGxvd2VkUGxhY2VtZW50cyA9IHBsYWNlbWVudHM7XG4gIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdHlwZV06IEZsb3cgc2VlbXMgdG8gaGF2ZSBwcm9ibGVtcyB3aXRoIHR3byBhcnJheSB1bmlvbnMuLi5cblxuXG4gIHZhciBvdmVyZmxvd3MgPSBhbGxvd2VkUGxhY2VtZW50cy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGxhY2VtZW50KSB7XG4gICAgYWNjW3BsYWNlbWVudF0gPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnk6IHJvb3RCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmc6IHBhZGRpbmdcbiAgICB9KVtnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCldO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG92ZXJmbG93cykuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBvdmVyZmxvd3NbYV0gLSBvdmVyZmxvd3NbYl07XG4gIH0pO1xufSIsICJpbXBvcnQgZ2V0T3Bwb3NpdGVQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE9wcG9zaXRlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGNvbXB1dGVBdXRvUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9jb21wdXRlQXV0b1BsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgYm90dG9tLCB0b3AsIHN0YXJ0LCByaWdodCwgbGVmdCwgYXV0byB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi4vdXRpbHMvZ2V0VmFyaWF0aW9uLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZnVuY3Rpb24gZ2V0RXhwYW5kZWRGYWxsYmFja1BsYWNlbWVudHMocGxhY2VtZW50KSB7XG4gIGlmIChnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgPT09IGF1dG8pIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICB2YXIgb3Bwb3NpdGVQbGFjZW1lbnQgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuICByZXR1cm4gW2dldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50KHBsYWNlbWVudCksIG9wcG9zaXRlUGxhY2VtZW50LCBnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudChvcHBvc2l0ZVBsYWNlbWVudCldO1xufVxuXG5mdW5jdGlvbiBmbGlwKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdLl9za2lwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIF9vcHRpb25zJG1haW5BeGlzID0gb3B0aW9ucy5tYWluQXhpcyxcbiAgICAgIGNoZWNrTWFpbkF4aXMgPSBfb3B0aW9ucyRtYWluQXhpcyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJG1haW5BeGlzLFxuICAgICAgX29wdGlvbnMkYWx0QXhpcyA9IG9wdGlvbnMuYWx0QXhpcyxcbiAgICAgIGNoZWNrQWx0QXhpcyA9IF9vcHRpb25zJGFsdEF4aXMgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRhbHRBeGlzLFxuICAgICAgc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzID0gb3B0aW9ucy5mYWxsYmFja1BsYWNlbWVudHMsXG4gICAgICBwYWRkaW5nID0gb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgYm91bmRhcnkgPSBvcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IG9wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBfb3B0aW9ucyRmbGlwVmFyaWF0aW8gPSBvcHRpb25zLmZsaXBWYXJpYXRpb25zLFxuICAgICAgZmxpcFZhcmlhdGlvbnMgPSBfb3B0aW9ucyRmbGlwVmFyaWF0aW8gPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRmbGlwVmFyaWF0aW8sXG4gICAgICBhbGxvd2VkQXV0b1BsYWNlbWVudHMgPSBvcHRpb25zLmFsbG93ZWRBdXRvUGxhY2VtZW50cztcbiAgdmFyIHByZWZlcnJlZFBsYWNlbWVudCA9IHN0YXRlLm9wdGlvbnMucGxhY2VtZW50O1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocHJlZmVycmVkUGxhY2VtZW50KTtcbiAgdmFyIGlzQmFzZVBsYWNlbWVudCA9IGJhc2VQbGFjZW1lbnQgPT09IHByZWZlcnJlZFBsYWNlbWVudDtcbiAgdmFyIGZhbGxiYWNrUGxhY2VtZW50cyA9IHNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyB8fCAoaXNCYXNlUGxhY2VtZW50IHx8ICFmbGlwVmFyaWF0aW9ucyA/IFtnZXRPcHBvc2l0ZVBsYWNlbWVudChwcmVmZXJyZWRQbGFjZW1lbnQpXSA6IGdldEV4cGFuZGVkRmFsbGJhY2tQbGFjZW1lbnRzKHByZWZlcnJlZFBsYWNlbWVudCkpO1xuICB2YXIgcGxhY2VtZW50cyA9IFtwcmVmZXJyZWRQbGFjZW1lbnRdLmNvbmNhdChmYWxsYmFja1BsYWNlbWVudHMpLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgICByZXR1cm4gYWNjLmNvbmNhdChnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgPT09IGF1dG8gPyBjb21wdXRlQXV0b1BsYWNlbWVudChzdGF0ZSwge1xuICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnk6IHJvb3RCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmc6IHBhZGRpbmcsXG4gICAgICBmbGlwVmFyaWF0aW9uczogZmxpcFZhcmlhdGlvbnMsXG4gICAgICBhbGxvd2VkQXV0b1BsYWNlbWVudHM6IGFsbG93ZWRBdXRvUGxhY2VtZW50c1xuICAgIH0pIDogcGxhY2VtZW50KTtcbiAgfSwgW10pO1xuICB2YXIgcmVmZXJlbmNlUmVjdCA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZTtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciBjaGVja3NNYXAgPSBuZXcgTWFwKCk7XG4gIHZhciBtYWtlRmFsbGJhY2tDaGVja3MgPSB0cnVlO1xuICB2YXIgZmlyc3RGaXR0aW5nUGxhY2VtZW50ID0gcGxhY2VtZW50c1swXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHBsYWNlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcGxhY2VtZW50ID0gcGxhY2VtZW50c1tpXTtcblxuICAgIHZhciBfYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KTtcblxuICAgIHZhciBpc1N0YXJ0VmFyaWF0aW9uID0gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkgPT09IHN0YXJ0O1xuICAgIHZhciBpc1ZlcnRpY2FsID0gW3RvcCwgYm90dG9tXS5pbmRleE9mKF9iYXNlUGxhY2VtZW50KSA+PSAwO1xuICAgIHZhciBsZW4gPSBpc1ZlcnRpY2FsID8gJ3dpZHRoJyA6ICdoZWlnaHQnO1xuICAgIHZhciBvdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgICAgYWx0Qm91bmRhcnk6IGFsdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZzogcGFkZGluZ1xuICAgIH0pO1xuICAgIHZhciBtYWluVmFyaWF0aW9uU2lkZSA9IGlzVmVydGljYWwgPyBpc1N0YXJ0VmFyaWF0aW9uID8gcmlnaHQgOiBsZWZ0IDogaXNTdGFydFZhcmlhdGlvbiA/IGJvdHRvbSA6IHRvcDtcblxuICAgIGlmIChyZWZlcmVuY2VSZWN0W2xlbl0gPiBwb3BwZXJSZWN0W2xlbl0pIHtcbiAgICAgIG1haW5WYXJpYXRpb25TaWRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpblZhcmlhdGlvblNpZGUpO1xuICAgIH1cblxuICAgIHZhciBhbHRWYXJpYXRpb25TaWRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpblZhcmlhdGlvblNpZGUpO1xuICAgIHZhciBjaGVja3MgPSBbXTtcblxuICAgIGlmIChjaGVja01haW5BeGlzKSB7XG4gICAgICBjaGVja3MucHVzaChvdmVyZmxvd1tfYmFzZVBsYWNlbWVudF0gPD0gMCk7XG4gICAgfVxuXG4gICAgaWYgKGNoZWNrQWx0QXhpcykge1xuICAgICAgY2hlY2tzLnB1c2gob3ZlcmZsb3dbbWFpblZhcmlhdGlvblNpZGVdIDw9IDAsIG92ZXJmbG93W2FsdFZhcmlhdGlvblNpZGVdIDw9IDApO1xuICAgIH1cblxuICAgIGlmIChjaGVja3MuZXZlcnkoZnVuY3Rpb24gKGNoZWNrKSB7XG4gICAgICByZXR1cm4gY2hlY2s7XG4gICAgfSkpIHtcbiAgICAgIGZpcnN0Rml0dGluZ1BsYWNlbWVudCA9IHBsYWNlbWVudDtcbiAgICAgIG1ha2VGYWxsYmFja0NoZWNrcyA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2hlY2tzTWFwLnNldChwbGFjZW1lbnQsIGNoZWNrcyk7XG4gIH1cblxuICBpZiAobWFrZUZhbGxiYWNrQ2hlY2tzKSB7XG4gICAgLy8gYDJgIG1heSBiZSBkZXNpcmVkIGluIHNvbWUgY2FzZXMgXHUyMDEzIHJlc2VhcmNoIGxhdGVyXG4gICAgdmFyIG51bWJlck9mQ2hlY2tzID0gZmxpcFZhcmlhdGlvbnMgPyAzIDogMTtcblxuICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKF9pKSB7XG4gICAgICB2YXIgZml0dGluZ1BsYWNlbWVudCA9IHBsYWNlbWVudHMuZmluZChmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgICAgIHZhciBjaGVja3MgPSBjaGVja3NNYXAuZ2V0KHBsYWNlbWVudCk7XG5cbiAgICAgICAgaWYgKGNoZWNrcykge1xuICAgICAgICAgIHJldHVybiBjaGVja3Muc2xpY2UoMCwgX2kpLmV2ZXJ5KGZ1bmN0aW9uIChjaGVjaykge1xuICAgICAgICAgICAgcmV0dXJuIGNoZWNrO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKGZpdHRpbmdQbGFjZW1lbnQpIHtcbiAgICAgICAgZmlyc3RGaXR0aW5nUGxhY2VtZW50ID0gZml0dGluZ1BsYWNlbWVudDtcbiAgICAgICAgcmV0dXJuIFwiYnJlYWtcIjtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZm9yICh2YXIgX2kgPSBudW1iZXJPZkNoZWNrczsgX2kgPiAwOyBfaS0tKSB7XG4gICAgICB2YXIgX3JldCA9IF9sb29wKF9pKTtcblxuICAgICAgaWYgKF9yZXQgPT09IFwiYnJlYWtcIikgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0YXRlLnBsYWNlbWVudCAhPT0gZmlyc3RGaXR0aW5nUGxhY2VtZW50KSB7XG4gICAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXS5fc2tpcCA9IHRydWU7XG4gICAgc3RhdGUucGxhY2VtZW50ID0gZmlyc3RGaXR0aW5nUGxhY2VtZW50O1xuICAgIHN0YXRlLnJlc2V0ID0gdHJ1ZTtcbiAgfVxufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnZmxpcCcsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIGZuOiBmbGlwLFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ29mZnNldCddLFxuICBkYXRhOiB7XG4gICAgX3NraXA6IGZhbHNlXG4gIH1cbn07IiwgImltcG9ydCB7IHRvcCwgYm90dG9tLCBsZWZ0LCByaWdodCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuXG5mdW5jdGlvbiBnZXRTaWRlT2Zmc2V0cyhvdmVyZmxvdywgcmVjdCwgcHJldmVudGVkT2Zmc2V0cykge1xuICBpZiAocHJldmVudGVkT2Zmc2V0cyA9PT0gdm9pZCAwKSB7XG4gICAgcHJldmVudGVkT2Zmc2V0cyA9IHtcbiAgICAgIHg6IDAsXG4gICAgICB5OiAwXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdG9wOiBvdmVyZmxvdy50b3AgLSByZWN0LmhlaWdodCAtIHByZXZlbnRlZE9mZnNldHMueSxcbiAgICByaWdodDogb3ZlcmZsb3cucmlnaHQgLSByZWN0LndpZHRoICsgcHJldmVudGVkT2Zmc2V0cy54LFxuICAgIGJvdHRvbTogb3ZlcmZsb3cuYm90dG9tIC0gcmVjdC5oZWlnaHQgKyBwcmV2ZW50ZWRPZmZzZXRzLnksXG4gICAgbGVmdDogb3ZlcmZsb3cubGVmdCAtIHJlY3Qud2lkdGggLSBwcmV2ZW50ZWRPZmZzZXRzLnhcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNBbnlTaWRlRnVsbHlDbGlwcGVkKG92ZXJmbG93KSB7XG4gIHJldHVybiBbdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0XS5zb21lKGZ1bmN0aW9uIChzaWRlKSB7XG4gICAgcmV0dXJuIG92ZXJmbG93W3NpZGVdID49IDA7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBoaWRlKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWU7XG4gIHZhciByZWZlcmVuY2VSZWN0ID0gc3RhdGUucmVjdHMucmVmZXJlbmNlO1xuICB2YXIgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcbiAgdmFyIHByZXZlbnRlZE9mZnNldHMgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLnByZXZlbnRPdmVyZmxvdztcbiAgdmFyIHJlZmVyZW5jZU92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICBlbGVtZW50Q29udGV4dDogJ3JlZmVyZW5jZSdcbiAgfSk7XG4gIHZhciBwb3BwZXJBbHRPdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgYWx0Qm91bmRhcnk6IHRydWVcbiAgfSk7XG4gIHZhciByZWZlcmVuY2VDbGlwcGluZ09mZnNldHMgPSBnZXRTaWRlT2Zmc2V0cyhyZWZlcmVuY2VPdmVyZmxvdywgcmVmZXJlbmNlUmVjdCk7XG4gIHZhciBwb3BwZXJFc2NhcGVPZmZzZXRzID0gZ2V0U2lkZU9mZnNldHMocG9wcGVyQWx0T3ZlcmZsb3csIHBvcHBlclJlY3QsIHByZXZlbnRlZE9mZnNldHMpO1xuICB2YXIgaXNSZWZlcmVuY2VIaWRkZW4gPSBpc0FueVNpZGVGdWxseUNsaXBwZWQocmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzKTtcbiAgdmFyIGhhc1BvcHBlckVzY2FwZWQgPSBpc0FueVNpZGVGdWxseUNsaXBwZWQocG9wcGVyRXNjYXBlT2Zmc2V0cyk7XG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSB7XG4gICAgcmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzOiByZWZlcmVuY2VDbGlwcGluZ09mZnNldHMsXG4gICAgcG9wcGVyRXNjYXBlT2Zmc2V0czogcG9wcGVyRXNjYXBlT2Zmc2V0cyxcbiAgICBpc1JlZmVyZW5jZUhpZGRlbjogaXNSZWZlcmVuY2VIaWRkZW4sXG4gICAgaGFzUG9wcGVyRXNjYXBlZDogaGFzUG9wcGVyRXNjYXBlZFxuICB9O1xuICBzdGF0ZS5hdHRyaWJ1dGVzLnBvcHBlciA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyLCB7XG4gICAgJ2RhdGEtcG9wcGVyLXJlZmVyZW5jZS1oaWRkZW4nOiBpc1JlZmVyZW5jZUhpZGRlbixcbiAgICAnZGF0YS1wb3BwZXItZXNjYXBlZCc6IGhhc1BvcHBlckVzY2FwZWRcbiAgfSk7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdoaWRlJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydwcmV2ZW50T3ZlcmZsb3cnXSxcbiAgZm46IGhpZGVcbn07IiwgImltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgeyB0b3AsIGxlZnQsIHJpZ2h0LCBwbGFjZW1lbnRzIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3RhbmNlQW5kU2tpZGRpbmdUb1hZKHBsYWNlbWVudCwgcmVjdHMsIG9mZnNldCkge1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KTtcbiAgdmFyIGludmVydERpc3RhbmNlID0gW2xlZnQsIHRvcF0uaW5kZXhPZihiYXNlUGxhY2VtZW50KSA+PSAwID8gLTEgOiAxO1xuXG4gIHZhciBfcmVmID0gdHlwZW9mIG9mZnNldCA9PT0gJ2Z1bmN0aW9uJyA/IG9mZnNldChPYmplY3QuYXNzaWduKHt9LCByZWN0cywge1xuICAgIHBsYWNlbWVudDogcGxhY2VtZW50XG4gIH0pKSA6IG9mZnNldCxcbiAgICAgIHNraWRkaW5nID0gX3JlZlswXSxcbiAgICAgIGRpc3RhbmNlID0gX3JlZlsxXTtcblxuICBza2lkZGluZyA9IHNraWRkaW5nIHx8IDA7XG4gIGRpc3RhbmNlID0gKGRpc3RhbmNlIHx8IDApICogaW52ZXJ0RGlzdGFuY2U7XG4gIHJldHVybiBbbGVmdCwgcmlnaHRdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPj0gMCA/IHtcbiAgICB4OiBkaXN0YW5jZSxcbiAgICB5OiBza2lkZGluZ1xuICB9IDoge1xuICAgIHg6IHNraWRkaW5nLFxuICAgIHk6IGRpc3RhbmNlXG4gIH07XG59XG5cbmZ1bmN0aW9uIG9mZnNldChfcmVmMikge1xuICB2YXIgc3RhdGUgPSBfcmVmMi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmMi5vcHRpb25zLFxuICAgICAgbmFtZSA9IF9yZWYyLm5hbWU7XG4gIHZhciBfb3B0aW9ucyRvZmZzZXQgPSBvcHRpb25zLm9mZnNldCxcbiAgICAgIG9mZnNldCA9IF9vcHRpb25zJG9mZnNldCA9PT0gdm9pZCAwID8gWzAsIDBdIDogX29wdGlvbnMkb2Zmc2V0O1xuICB2YXIgZGF0YSA9IHBsYWNlbWVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICAgIGFjY1twbGFjZW1lbnRdID0gZGlzdGFuY2VBbmRTa2lkZGluZ1RvWFkocGxhY2VtZW50LCBzdGF0ZS5yZWN0cywgb2Zmc2V0KTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG4gIHZhciBfZGF0YSRzdGF0ZSRwbGFjZW1lbnQgPSBkYXRhW3N0YXRlLnBsYWNlbWVudF0sXG4gICAgICB4ID0gX2RhdGEkc3RhdGUkcGxhY2VtZW50LngsXG4gICAgICB5ID0gX2RhdGEkc3RhdGUkcGxhY2VtZW50Lnk7XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyAhPSBudWxsKSB7XG4gICAgc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLnggKz0geDtcbiAgICBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMueSArPSB5O1xuICB9XG5cbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IGRhdGE7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdvZmZzZXQnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICByZXF1aXJlczogWydwb3BwZXJPZmZzZXRzJ10sXG4gIGZuOiBvZmZzZXRcbn07IiwgImltcG9ydCBjb21wdXRlT2Zmc2V0cyBmcm9tIFwiLi4vdXRpbHMvY29tcHV0ZU9mZnNldHMuanNcIjtcblxuZnVuY3Rpb24gcG9wcGVyT2Zmc2V0cyhfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuICAvLyBPZmZzZXRzIGFyZSB0aGUgYWN0dWFsIHBvc2l0aW9uIHRoZSBwb3BwZXIgbmVlZHMgdG8gaGF2ZSB0byBiZVxuICAvLyBwcm9wZXJseSBwb3NpdGlvbmVkIG5lYXIgaXRzIHJlZmVyZW5jZSBlbGVtZW50XG4gIC8vIFRoaXMgaXMgdGhlIG1vc3QgYmFzaWMgcGxhY2VtZW50LCBhbmQgd2lsbCBiZSBhZGp1c3RlZCBieVxuICAvLyB0aGUgbW9kaWZpZXJzIGluIHRoZSBuZXh0IHN0ZXBcbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IGNvbXB1dGVPZmZzZXRzKHtcbiAgICByZWZlcmVuY2U6IHN0YXRlLnJlY3RzLnJlZmVyZW5jZSxcbiAgICBlbGVtZW50OiBzdGF0ZS5yZWN0cy5wb3BwZXIsXG4gICAgc3RyYXRlZ3k6ICdhYnNvbHV0ZScsXG4gICAgcGxhY2VtZW50OiBzdGF0ZS5wbGFjZW1lbnRcbiAgfSk7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdwb3BwZXJPZmZzZXRzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdyZWFkJyxcbiAgZm46IHBvcHBlck9mZnNldHMsXG4gIGRhdGE6IHt9XG59OyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRBbHRBeGlzKGF4aXMpIHtcbiAgcmV0dXJuIGF4aXMgPT09ICd4JyA/ICd5JyA6ICd4Jztcbn0iLCAiaW1wb3J0IHsgdG9wLCBsZWZ0LCByaWdodCwgYm90dG9tLCBzdGFydCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldEFsdEF4aXMgZnJvbSBcIi4uL3V0aWxzL2dldEFsdEF4aXMuanNcIjtcbmltcG9ydCB7IHdpdGhpbiwgd2l0aGluTWF4Q2xhbXAgfSBmcm9tIFwiLi4vdXRpbHMvd2l0aGluLmpzXCI7XG5pbXBvcnQgZ2V0TGF5b3V0UmVjdCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldExheW91dFJlY3QuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi4vdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanNcIjtcbmltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4uL3V0aWxzL2dldFZhcmlhdGlvbi5qc1wiO1xuaW1wb3J0IGdldEZyZXNoU2lkZU9iamVjdCBmcm9tIFwiLi4vdXRpbHMvZ2V0RnJlc2hTaWRlT2JqZWN0LmpzXCI7XG5pbXBvcnQgeyBtaW4gYXMgbWF0aE1pbiwgbWF4IGFzIG1hdGhNYXggfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiO1xuXG5mdW5jdGlvbiBwcmV2ZW50T3ZlcmZsb3coX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYub3B0aW9ucyxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWU7XG4gIHZhciBfb3B0aW9ucyRtYWluQXhpcyA9IG9wdGlvbnMubWFpbkF4aXMsXG4gICAgICBjaGVja01haW5BeGlzID0gX29wdGlvbnMkbWFpbkF4aXMgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRtYWluQXhpcyxcbiAgICAgIF9vcHRpb25zJGFsdEF4aXMgPSBvcHRpb25zLmFsdEF4aXMsXG4gICAgICBjaGVja0FsdEF4aXMgPSBfb3B0aW9ucyRhbHRBeGlzID09PSB2b2lkIDAgPyBmYWxzZSA6IF9vcHRpb25zJGFsdEF4aXMsXG4gICAgICBib3VuZGFyeSA9IG9wdGlvbnMuYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnkgPSBvcHRpb25zLnJvb3RCb3VuZGFyeSxcbiAgICAgIGFsdEJvdW5kYXJ5ID0gb3B0aW9ucy5hbHRCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmcgPSBvcHRpb25zLnBhZGRpbmcsXG4gICAgICBfb3B0aW9ucyR0ZXRoZXIgPSBvcHRpb25zLnRldGhlcixcbiAgICAgIHRldGhlciA9IF9vcHRpb25zJHRldGhlciA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJHRldGhlcixcbiAgICAgIF9vcHRpb25zJHRldGhlck9mZnNldCA9IG9wdGlvbnMudGV0aGVyT2Zmc2V0LFxuICAgICAgdGV0aGVyT2Zmc2V0ID0gX29wdGlvbnMkdGV0aGVyT2Zmc2V0ID09PSB2b2lkIDAgPyAwIDogX29wdGlvbnMkdGV0aGVyT2Zmc2V0O1xuICB2YXIgb3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICByb290Qm91bmRhcnk6IHJvb3RCb3VuZGFyeSxcbiAgICBwYWRkaW5nOiBwYWRkaW5nLFxuICAgIGFsdEJvdW5kYXJ5OiBhbHRCb3VuZGFyeVxuICB9KTtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHN0YXRlLnBsYWNlbWVudCk7XG4gIHZhciB2YXJpYXRpb24gPSBnZXRWYXJpYXRpb24oc3RhdGUucGxhY2VtZW50KTtcbiAgdmFyIGlzQmFzZVBsYWNlbWVudCA9ICF2YXJpYXRpb247XG4gIHZhciBtYWluQXhpcyA9IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChiYXNlUGxhY2VtZW50KTtcbiAgdmFyIGFsdEF4aXMgPSBnZXRBbHRBeGlzKG1haW5BeGlzKTtcbiAgdmFyIHBvcHBlck9mZnNldHMgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHM7XG4gIHZhciByZWZlcmVuY2VSZWN0ID0gc3RhdGUucmVjdHMucmVmZXJlbmNlO1xuICB2YXIgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcbiAgdmFyIHRldGhlck9mZnNldFZhbHVlID0gdHlwZW9mIHRldGhlck9mZnNldCA9PT0gJ2Z1bmN0aW9uJyA/IHRldGhlck9mZnNldChPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5yZWN0cywge1xuICAgIHBsYWNlbWVudDogc3RhdGUucGxhY2VtZW50XG4gIH0pKSA6IHRldGhlck9mZnNldDtcbiAgdmFyIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZSA9IHR5cGVvZiB0ZXRoZXJPZmZzZXRWYWx1ZSA9PT0gJ251bWJlcicgPyB7XG4gICAgbWFpbkF4aXM6IHRldGhlck9mZnNldFZhbHVlLFxuICAgIGFsdEF4aXM6IHRldGhlck9mZnNldFZhbHVlXG4gIH0gOiBPYmplY3QuYXNzaWduKHtcbiAgICBtYWluQXhpczogMCxcbiAgICBhbHRBeGlzOiAwXG4gIH0sIHRldGhlck9mZnNldFZhbHVlKTtcbiAgdmFyIG9mZnNldE1vZGlmaWVyU3RhdGUgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLm9mZnNldCA/IHN0YXRlLm1vZGlmaWVyc0RhdGEub2Zmc2V0W3N0YXRlLnBsYWNlbWVudF0gOiBudWxsO1xuICB2YXIgZGF0YSA9IHtcbiAgICB4OiAwLFxuICAgIHk6IDBcbiAgfTtcblxuICBpZiAoIXBvcHBlck9mZnNldHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoY2hlY2tNYWluQXhpcykge1xuICAgIHZhciBfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQ7XG5cbiAgICB2YXIgbWFpblNpZGUgPSBtYWluQXhpcyA9PT0gJ3knID8gdG9wIDogbGVmdDtcbiAgICB2YXIgYWx0U2lkZSA9IG1haW5BeGlzID09PSAneScgPyBib3R0b20gOiByaWdodDtcbiAgICB2YXIgbGVuID0gbWFpbkF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcbiAgICB2YXIgb2Zmc2V0ID0gcG9wcGVyT2Zmc2V0c1ttYWluQXhpc107XG4gICAgdmFyIG1pbiA9IG9mZnNldCArIG92ZXJmbG93W21haW5TaWRlXTtcbiAgICB2YXIgbWF4ID0gb2Zmc2V0IC0gb3ZlcmZsb3dbYWx0U2lkZV07XG4gICAgdmFyIGFkZGl0aXZlID0gdGV0aGVyID8gLXBvcHBlclJlY3RbbGVuXSAvIDIgOiAwO1xuICAgIHZhciBtaW5MZW4gPSB2YXJpYXRpb24gPT09IHN0YXJ0ID8gcmVmZXJlbmNlUmVjdFtsZW5dIDogcG9wcGVyUmVjdFtsZW5dO1xuICAgIHZhciBtYXhMZW4gPSB2YXJpYXRpb24gPT09IHN0YXJ0ID8gLXBvcHBlclJlY3RbbGVuXSA6IC1yZWZlcmVuY2VSZWN0W2xlbl07IC8vIFdlIG5lZWQgdG8gaW5jbHVkZSB0aGUgYXJyb3cgaW4gdGhlIGNhbGN1bGF0aW9uIHNvIHRoZSBhcnJvdyBkb2Vzbid0IGdvXG4gICAgLy8gb3V0c2lkZSB0aGUgcmVmZXJlbmNlIGJvdW5kc1xuXG4gICAgdmFyIGFycm93RWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzLmFycm93O1xuICAgIHZhciBhcnJvd1JlY3QgPSB0ZXRoZXIgJiYgYXJyb3dFbGVtZW50ID8gZ2V0TGF5b3V0UmVjdChhcnJvd0VsZW1lbnQpIDoge1xuICAgICAgd2lkdGg6IDAsXG4gICAgICBoZWlnaHQ6IDBcbiAgICB9O1xuICAgIHZhciBhcnJvd1BhZGRpbmdPYmplY3QgPSBzdGF0ZS5tb2RpZmllcnNEYXRhWydhcnJvdyNwZXJzaXN0ZW50J10gPyBzdGF0ZS5tb2RpZmllcnNEYXRhWydhcnJvdyNwZXJzaXN0ZW50J10ucGFkZGluZyA6IGdldEZyZXNoU2lkZU9iamVjdCgpO1xuICAgIHZhciBhcnJvd1BhZGRpbmdNaW4gPSBhcnJvd1BhZGRpbmdPYmplY3RbbWFpblNpZGVdO1xuICAgIHZhciBhcnJvd1BhZGRpbmdNYXggPSBhcnJvd1BhZGRpbmdPYmplY3RbYWx0U2lkZV07IC8vIElmIHRoZSByZWZlcmVuY2UgbGVuZ3RoIGlzIHNtYWxsZXIgdGhhbiB0aGUgYXJyb3cgbGVuZ3RoLCB3ZSBkb24ndCB3YW50XG4gICAgLy8gdG8gaW5jbHVkZSBpdHMgZnVsbCBzaXplIGluIHRoZSBjYWxjdWxhdGlvbi4gSWYgdGhlIHJlZmVyZW5jZSBpcyBzbWFsbFxuICAgIC8vIGFuZCBuZWFyIHRoZSBlZGdlIG9mIGEgYm91bmRhcnksIHRoZSBwb3BwZXIgY2FuIG92ZXJmbG93IGV2ZW4gaWYgdGhlXG4gICAgLy8gcmVmZXJlbmNlIGlzIG5vdCBvdmVyZmxvd2luZyBhcyB3ZWxsIChlLmcuIHZpcnR1YWwgZWxlbWVudHMgd2l0aCBub1xuICAgIC8vIHdpZHRoIG9yIGhlaWdodClcblxuICAgIHZhciBhcnJvd0xlbiA9IHdpdGhpbigwLCByZWZlcmVuY2VSZWN0W2xlbl0sIGFycm93UmVjdFtsZW5dKTtcbiAgICB2YXIgbWluT2Zmc2V0ID0gaXNCYXNlUGxhY2VtZW50ID8gcmVmZXJlbmNlUmVjdFtsZW5dIC8gMiAtIGFkZGl0aXZlIC0gYXJyb3dMZW4gLSBhcnJvd1BhZGRpbmdNaW4gLSBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUubWFpbkF4aXMgOiBtaW5MZW4gLSBhcnJvd0xlbiAtIGFycm93UGFkZGluZ01pbiAtIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5tYWluQXhpcztcbiAgICB2YXIgbWF4T2Zmc2V0ID0gaXNCYXNlUGxhY2VtZW50ID8gLXJlZmVyZW5jZVJlY3RbbGVuXSAvIDIgKyBhZGRpdGl2ZSArIGFycm93TGVuICsgYXJyb3dQYWRkaW5nTWF4ICsgbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLm1haW5BeGlzIDogbWF4TGVuICsgYXJyb3dMZW4gKyBhcnJvd1BhZGRpbmdNYXggKyBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUubWFpbkF4aXM7XG4gICAgdmFyIGFycm93T2Zmc2V0UGFyZW50ID0gc3RhdGUuZWxlbWVudHMuYXJyb3cgJiYgZ2V0T2Zmc2V0UGFyZW50KHN0YXRlLmVsZW1lbnRzLmFycm93KTtcbiAgICB2YXIgY2xpZW50T2Zmc2V0ID0gYXJyb3dPZmZzZXRQYXJlbnQgPyBtYWluQXhpcyA9PT0gJ3knID8gYXJyb3dPZmZzZXRQYXJlbnQuY2xpZW50VG9wIHx8IDAgOiBhcnJvd09mZnNldFBhcmVudC5jbGllbnRMZWZ0IHx8IDAgOiAwO1xuICAgIHZhciBvZmZzZXRNb2RpZmllclZhbHVlID0gKF9vZmZzZXRNb2RpZmllclN0YXRlJCA9IG9mZnNldE1vZGlmaWVyU3RhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IG9mZnNldE1vZGlmaWVyU3RhdGVbbWFpbkF4aXNdKSAhPSBudWxsID8gX29mZnNldE1vZGlmaWVyU3RhdGUkIDogMDtcbiAgICB2YXIgdGV0aGVyTWluID0gb2Zmc2V0ICsgbWluT2Zmc2V0IC0gb2Zmc2V0TW9kaWZpZXJWYWx1ZSAtIGNsaWVudE9mZnNldDtcbiAgICB2YXIgdGV0aGVyTWF4ID0gb2Zmc2V0ICsgbWF4T2Zmc2V0IC0gb2Zmc2V0TW9kaWZpZXJWYWx1ZTtcbiAgICB2YXIgcHJldmVudGVkT2Zmc2V0ID0gd2l0aGluKHRldGhlciA/IG1hdGhNaW4obWluLCB0ZXRoZXJNaW4pIDogbWluLCBvZmZzZXQsIHRldGhlciA/IG1hdGhNYXgobWF4LCB0ZXRoZXJNYXgpIDogbWF4KTtcbiAgICBwb3BwZXJPZmZzZXRzW21haW5BeGlzXSA9IHByZXZlbnRlZE9mZnNldDtcbiAgICBkYXRhW21haW5BeGlzXSA9IHByZXZlbnRlZE9mZnNldCAtIG9mZnNldDtcbiAgfVxuXG4gIGlmIChjaGVja0FsdEF4aXMpIHtcbiAgICB2YXIgX29mZnNldE1vZGlmaWVyU3RhdGUkMjtcblxuICAgIHZhciBfbWFpblNpZGUgPSBtYWluQXhpcyA9PT0gJ3gnID8gdG9wIDogbGVmdDtcblxuICAgIHZhciBfYWx0U2lkZSA9IG1haW5BeGlzID09PSAneCcgPyBib3R0b20gOiByaWdodDtcblxuICAgIHZhciBfb2Zmc2V0ID0gcG9wcGVyT2Zmc2V0c1thbHRBeGlzXTtcblxuICAgIHZhciBfbGVuID0gYWx0QXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuXG4gICAgdmFyIF9taW4gPSBfb2Zmc2V0ICsgb3ZlcmZsb3dbX21haW5TaWRlXTtcblxuICAgIHZhciBfbWF4ID0gX29mZnNldCAtIG92ZXJmbG93W19hbHRTaWRlXTtcblxuICAgIHZhciBpc09yaWdpblNpZGUgPSBbdG9wLCBsZWZ0XS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpICE9PSAtMTtcblxuICAgIHZhciBfb2Zmc2V0TW9kaWZpZXJWYWx1ZSA9IChfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQyID0gb2Zmc2V0TW9kaWZpZXJTdGF0ZSA9PSBudWxsID8gdm9pZCAwIDogb2Zmc2V0TW9kaWZpZXJTdGF0ZVthbHRBeGlzXSkgIT0gbnVsbCA/IF9vZmZzZXRNb2RpZmllclN0YXRlJDIgOiAwO1xuXG4gICAgdmFyIF90ZXRoZXJNaW4gPSBpc09yaWdpblNpZGUgPyBfbWluIDogX29mZnNldCAtIHJlZmVyZW5jZVJlY3RbX2xlbl0gLSBwb3BwZXJSZWN0W19sZW5dIC0gX29mZnNldE1vZGlmaWVyVmFsdWUgKyBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUuYWx0QXhpcztcblxuICAgIHZhciBfdGV0aGVyTWF4ID0gaXNPcmlnaW5TaWRlID8gX29mZnNldCArIHJlZmVyZW5jZVJlY3RbX2xlbl0gKyBwb3BwZXJSZWN0W19sZW5dIC0gX29mZnNldE1vZGlmaWVyVmFsdWUgLSBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUuYWx0QXhpcyA6IF9tYXg7XG5cbiAgICB2YXIgX3ByZXZlbnRlZE9mZnNldCA9IHRldGhlciAmJiBpc09yaWdpblNpZGUgPyB3aXRoaW5NYXhDbGFtcChfdGV0aGVyTWluLCBfb2Zmc2V0LCBfdGV0aGVyTWF4KSA6IHdpdGhpbih0ZXRoZXIgPyBfdGV0aGVyTWluIDogX21pbiwgX29mZnNldCwgdGV0aGVyID8gX3RldGhlck1heCA6IF9tYXgpO1xuXG4gICAgcG9wcGVyT2Zmc2V0c1thbHRBeGlzXSA9IF9wcmV2ZW50ZWRPZmZzZXQ7XG4gICAgZGF0YVthbHRBeGlzXSA9IF9wcmV2ZW50ZWRPZmZzZXQgLSBfb2Zmc2V0O1xuICB9XG5cbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IGRhdGE7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdwcmV2ZW50T3ZlcmZsb3cnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICBmbjogcHJldmVudE92ZXJmbG93LFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ29mZnNldCddXG59OyIsICJleHBvcnQgeyBkZWZhdWx0IGFzIGFwcGx5U3R5bGVzIH0gZnJvbSBcIi4vYXBwbHlTdHlsZXMuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgYXJyb3cgfSBmcm9tIFwiLi9hcnJvdy5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjb21wdXRlU3R5bGVzIH0gZnJvbSBcIi4vY29tcHV0ZVN0eWxlcy5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBldmVudExpc3RlbmVycyB9IGZyb20gXCIuL2V2ZW50TGlzdGVuZXJzLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGZsaXAgfSBmcm9tIFwiLi9mbGlwLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGhpZGUgfSBmcm9tIFwiLi9oaWRlLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG9mZnNldCB9IGZyb20gXCIuL29mZnNldC5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwb3BwZXJPZmZzZXRzIH0gZnJvbSBcIi4vcG9wcGVyT2Zmc2V0cy5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwcmV2ZW50T3ZlcmZsb3cgfSBmcm9tIFwiLi9wcmV2ZW50T3ZlcmZsb3cuanNcIjsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0SFRNTEVsZW1lbnRTY3JvbGwoZWxlbWVudCkge1xuICByZXR1cm4ge1xuICAgIHNjcm9sbExlZnQ6IGVsZW1lbnQuc2Nyb2xsTGVmdCxcbiAgICBzY3JvbGxUb3A6IGVsZW1lbnQuc2Nyb2xsVG9wXG4gIH07XG59IiwgImltcG9ydCBnZXRXaW5kb3dTY3JvbGwgZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBnZXRIVE1MRWxlbWVudFNjcm9sbCBmcm9tIFwiLi9nZXRIVE1MRWxlbWVudFNjcm9sbC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Tm9kZVNjcm9sbChub2RlKSB7XG4gIGlmIChub2RlID09PSBnZXRXaW5kb3cobm9kZSkgfHwgIWlzSFRNTEVsZW1lbnQobm9kZSkpIHtcbiAgICByZXR1cm4gZ2V0V2luZG93U2Nyb2xsKG5vZGUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBnZXRIVE1MRWxlbWVudFNjcm9sbChub2RlKTtcbiAgfVxufSIsICJpbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IGdldE5vZGVTY3JvbGwgZnJvbSBcIi4vZ2V0Tm9kZVNjcm9sbC5qc1wiO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbEJhclggZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsQmFyWC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBpc1Njcm9sbFBhcmVudCBmcm9tIFwiLi9pc1Njcm9sbFBhcmVudC5qc1wiO1xuaW1wb3J0IHsgcm91bmQgfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiO1xuXG5mdW5jdGlvbiBpc0VsZW1lbnRTY2FsZWQoZWxlbWVudCkge1xuICB2YXIgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHZhciBzY2FsZVggPSByb3VuZChyZWN0LndpZHRoKSAvIGVsZW1lbnQub2Zmc2V0V2lkdGggfHwgMTtcbiAgdmFyIHNjYWxlWSA9IHJvdW5kKHJlY3QuaGVpZ2h0KSAvIGVsZW1lbnQub2Zmc2V0SGVpZ2h0IHx8IDE7XG4gIHJldHVybiBzY2FsZVggIT09IDEgfHwgc2NhbGVZICE9PSAxO1xufSAvLyBSZXR1cm5zIHRoZSBjb21wb3NpdGUgcmVjdCBvZiBhbiBlbGVtZW50IHJlbGF0aXZlIHRvIGl0cyBvZmZzZXRQYXJlbnQuXG4vLyBDb21wb3NpdGUgbWVhbnMgaXQgdGFrZXMgaW50byBhY2NvdW50IHRyYW5zZm9ybXMgYXMgd2VsbCBhcyBsYXlvdXQuXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Q29tcG9zaXRlUmVjdChlbGVtZW50T3JWaXJ0dWFsRWxlbWVudCwgb2Zmc2V0UGFyZW50LCBpc0ZpeGVkKSB7XG4gIGlmIChpc0ZpeGVkID09PSB2b2lkIDApIHtcbiAgICBpc0ZpeGVkID0gZmFsc2U7XG4gIH1cblxuICB2YXIgaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgPSBpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIHZhciBvZmZzZXRQYXJlbnRJc1NjYWxlZCA9IGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KSAmJiBpc0VsZW1lbnRTY2FsZWQob2Zmc2V0UGFyZW50KTtcbiAgdmFyIGRvY3VtZW50RWxlbWVudCA9IGdldERvY3VtZW50RWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICB2YXIgcmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50T3JWaXJ0dWFsRWxlbWVudCwgb2Zmc2V0UGFyZW50SXNTY2FsZWQsIGlzRml4ZWQpO1xuICB2YXIgc2Nyb2xsID0ge1xuICAgIHNjcm9sbExlZnQ6IDAsXG4gICAgc2Nyb2xsVG9wOiAwXG4gIH07XG4gIHZhciBvZmZzZXRzID0ge1xuICAgIHg6IDAsXG4gICAgeTogMFxuICB9O1xuXG4gIGlmIChpc09mZnNldFBhcmVudEFuRWxlbWVudCB8fCAhaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgJiYgIWlzRml4ZWQpIHtcbiAgICBpZiAoZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSAhPT0gJ2JvZHknIHx8IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wb3BwZXJqcy9wb3BwZXItY29yZS9pc3N1ZXMvMTA3OFxuICAgIGlzU2Nyb2xsUGFyZW50KGRvY3VtZW50RWxlbWVudCkpIHtcbiAgICAgIHNjcm9sbCA9IGdldE5vZGVTY3JvbGwob2Zmc2V0UGFyZW50KTtcbiAgICB9XG5cbiAgICBpZiAoaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpKSB7XG4gICAgICBvZmZzZXRzID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KG9mZnNldFBhcmVudCwgdHJ1ZSk7XG4gICAgICBvZmZzZXRzLnggKz0gb2Zmc2V0UGFyZW50LmNsaWVudExlZnQ7XG4gICAgICBvZmZzZXRzLnkgKz0gb2Zmc2V0UGFyZW50LmNsaWVudFRvcDtcbiAgICB9IGVsc2UgaWYgKGRvY3VtZW50RWxlbWVudCkge1xuICAgICAgb2Zmc2V0cy54ID0gZ2V0V2luZG93U2Nyb2xsQmFyWChkb2N1bWVudEVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgeDogcmVjdC5sZWZ0ICsgc2Nyb2xsLnNjcm9sbExlZnQgLSBvZmZzZXRzLngsXG4gICAgeTogcmVjdC50b3AgKyBzY3JvbGwuc2Nyb2xsVG9wIC0gb2Zmc2V0cy55LFxuICAgIHdpZHRoOiByZWN0LndpZHRoLFxuICAgIGhlaWdodDogcmVjdC5oZWlnaHRcbiAgfTtcbn0iLCAiaW1wb3J0IHsgbW9kaWZpZXJQaGFzZXMgfSBmcm9tIFwiLi4vZW51bXMuanNcIjsgLy8gc291cmNlOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy80OTg3NTI1NVxuXG5mdW5jdGlvbiBvcmRlcihtb2RpZmllcnMpIHtcbiAgdmFyIG1hcCA9IG5ldyBNYXAoKTtcbiAgdmFyIHZpc2l0ZWQgPSBuZXcgU2V0KCk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgbW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgbWFwLnNldChtb2RpZmllci5uYW1lLCBtb2RpZmllcik7XG4gIH0pOyAvLyBPbiB2aXNpdGluZyBvYmplY3QsIGNoZWNrIGZvciBpdHMgZGVwZW5kZW5jaWVzIGFuZCB2aXNpdCB0aGVtIHJlY3Vyc2l2ZWx5XG5cbiAgZnVuY3Rpb24gc29ydChtb2RpZmllcikge1xuICAgIHZpc2l0ZWQuYWRkKG1vZGlmaWVyLm5hbWUpO1xuICAgIHZhciByZXF1aXJlcyA9IFtdLmNvbmNhdChtb2RpZmllci5yZXF1aXJlcyB8fCBbXSwgbW9kaWZpZXIucmVxdWlyZXNJZkV4aXN0cyB8fCBbXSk7XG4gICAgcmVxdWlyZXMuZm9yRWFjaChmdW5jdGlvbiAoZGVwKSB7XG4gICAgICBpZiAoIXZpc2l0ZWQuaGFzKGRlcCkpIHtcbiAgICAgICAgdmFyIGRlcE1vZGlmaWVyID0gbWFwLmdldChkZXApO1xuXG4gICAgICAgIGlmIChkZXBNb2RpZmllcikge1xuICAgICAgICAgIHNvcnQoZGVwTW9kaWZpZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmVzdWx0LnB1c2gobW9kaWZpZXIpO1xuICB9XG5cbiAgbW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgaWYgKCF2aXNpdGVkLmhhcyhtb2RpZmllci5uYW1lKSkge1xuICAgICAgLy8gY2hlY2sgZm9yIHZpc2l0ZWQgb2JqZWN0XG4gICAgICBzb3J0KG1vZGlmaWVyKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBvcmRlck1vZGlmaWVycyhtb2RpZmllcnMpIHtcbiAgLy8gb3JkZXIgYmFzZWQgb24gZGVwZW5kZW5jaWVzXG4gIHZhciBvcmRlcmVkTW9kaWZpZXJzID0gb3JkZXIobW9kaWZpZXJzKTsgLy8gb3JkZXIgYmFzZWQgb24gcGhhc2VcblxuICByZXR1cm4gbW9kaWZpZXJQaGFzZXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBoYXNlKSB7XG4gICAgcmV0dXJuIGFjYy5jb25jYXQob3JkZXJlZE1vZGlmaWVycy5maWx0ZXIoZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgICByZXR1cm4gbW9kaWZpZXIucGhhc2UgPT09IHBoYXNlO1xuICAgIH0pKTtcbiAgfSwgW10pO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZWJvdW5jZShmbikge1xuICB2YXIgcGVuZGluZztcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXBlbmRpbmcpIHtcbiAgICAgIHBlbmRpbmcgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBwZW5kaW5nID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHJlc29sdmUoZm4oKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBlbmRpbmc7XG4gIH07XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1lcmdlQnlOYW1lKG1vZGlmaWVycykge1xuICB2YXIgbWVyZ2VkID0gbW9kaWZpZXJzLnJlZHVjZShmdW5jdGlvbiAobWVyZ2VkLCBjdXJyZW50KSB7XG4gICAgdmFyIGV4aXN0aW5nID0gbWVyZ2VkW2N1cnJlbnQubmFtZV07XG4gICAgbWVyZ2VkW2N1cnJlbnQubmFtZV0gPSBleGlzdGluZyA/IE9iamVjdC5hc3NpZ24oe30sIGV4aXN0aW5nLCBjdXJyZW50LCB7XG4gICAgICBvcHRpb25zOiBPYmplY3QuYXNzaWduKHt9LCBleGlzdGluZy5vcHRpb25zLCBjdXJyZW50Lm9wdGlvbnMpLFxuICAgICAgZGF0YTogT2JqZWN0LmFzc2lnbih7fSwgZXhpc3RpbmcuZGF0YSwgY3VycmVudC5kYXRhKVxuICAgIH0pIDogY3VycmVudDtcbiAgICByZXR1cm4gbWVyZ2VkO1xuICB9LCB7fSk7IC8vIElFMTEgZG9lcyBub3Qgc3VwcG9ydCBPYmplY3QudmFsdWVzXG5cbiAgcmV0dXJuIE9iamVjdC5rZXlzKG1lcmdlZCkubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gbWVyZ2VkW2tleV07XG4gIH0pO1xufSIsICJpbXBvcnQgZ2V0Q29tcG9zaXRlUmVjdCBmcm9tIFwiLi9kb20tdXRpbHMvZ2V0Q29tcG9zaXRlUmVjdC5qc1wiO1xuaW1wb3J0IGdldExheW91dFJlY3QgZnJvbSBcIi4vZG9tLXV0aWxzL2dldExheW91dFJlY3QuanNcIjtcbmltcG9ydCBsaXN0U2Nyb2xsUGFyZW50cyBmcm9tIFwiLi9kb20tdXRpbHMvbGlzdFNjcm9sbFBhcmVudHMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4vZG9tLXV0aWxzL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IG9yZGVyTW9kaWZpZXJzIGZyb20gXCIuL3V0aWxzL29yZGVyTW9kaWZpZXJzLmpzXCI7XG5pbXBvcnQgZGVib3VuY2UgZnJvbSBcIi4vdXRpbHMvZGVib3VuY2UuanNcIjtcbmltcG9ydCBtZXJnZUJ5TmFtZSBmcm9tIFwiLi91dGlscy9tZXJnZUJ5TmFtZS5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgeyBpc0VsZW1lbnQgfSBmcm9tIFwiLi9kb20tdXRpbHMvaW5zdGFuY2VPZi5qc1wiO1xudmFyIERFRkFVTFRfT1BUSU9OUyA9IHtcbiAgcGxhY2VtZW50OiAnYm90dG9tJyxcbiAgbW9kaWZpZXJzOiBbXSxcbiAgc3RyYXRlZ3k6ICdhYnNvbHV0ZSdcbn07XG5cbmZ1bmN0aW9uIGFyZVZhbGlkRWxlbWVudHMoKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gIWFyZ3Muc29tZShmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgIHJldHVybiAhKGVsZW1lbnQgJiYgdHlwZW9mIGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0ID09PSAnZnVuY3Rpb24nKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb3BwZXJHZW5lcmF0b3IoZ2VuZXJhdG9yT3B0aW9ucykge1xuICBpZiAoZ2VuZXJhdG9yT3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgZ2VuZXJhdG9yT3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgdmFyIF9nZW5lcmF0b3JPcHRpb25zID0gZ2VuZXJhdG9yT3B0aW9ucyxcbiAgICAgIF9nZW5lcmF0b3JPcHRpb25zJGRlZiA9IF9nZW5lcmF0b3JPcHRpb25zLmRlZmF1bHRNb2RpZmllcnMsXG4gICAgICBkZWZhdWx0TW9kaWZpZXJzID0gX2dlbmVyYXRvck9wdGlvbnMkZGVmID09PSB2b2lkIDAgPyBbXSA6IF9nZW5lcmF0b3JPcHRpb25zJGRlZixcbiAgICAgIF9nZW5lcmF0b3JPcHRpb25zJGRlZjIgPSBfZ2VuZXJhdG9yT3B0aW9ucy5kZWZhdWx0T3B0aW9ucyxcbiAgICAgIGRlZmF1bHRPcHRpb25zID0gX2dlbmVyYXRvck9wdGlvbnMkZGVmMiA9PT0gdm9pZCAwID8gREVGQVVMVF9PUFRJT05TIDogX2dlbmVyYXRvck9wdGlvbnMkZGVmMjtcbiAgcmV0dXJuIGZ1bmN0aW9uIGNyZWF0ZVBvcHBlcihyZWZlcmVuY2UsIHBvcHBlciwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSBkZWZhdWx0T3B0aW9ucztcbiAgICB9XG5cbiAgICB2YXIgc3RhdGUgPSB7XG4gICAgICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuICAgICAgb3JkZXJlZE1vZGlmaWVyczogW10sXG4gICAgICBvcHRpb25zOiBPYmplY3QuYXNzaWduKHt9LCBERUZBVUxUX09QVElPTlMsIGRlZmF1bHRPcHRpb25zKSxcbiAgICAgIG1vZGlmaWVyc0RhdGE6IHt9LFxuICAgICAgZWxlbWVudHM6IHtcbiAgICAgICAgcmVmZXJlbmNlOiByZWZlcmVuY2UsXG4gICAgICAgIHBvcHBlcjogcG9wcGVyXG4gICAgICB9LFxuICAgICAgYXR0cmlidXRlczoge30sXG4gICAgICBzdHlsZXM6IHt9XG4gICAgfTtcbiAgICB2YXIgZWZmZWN0Q2xlYW51cEZucyA9IFtdO1xuICAgIHZhciBpc0Rlc3Ryb3llZCA9IGZhbHNlO1xuICAgIHZhciBpbnN0YW5jZSA9IHtcbiAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgIHNldE9wdGlvbnM6IGZ1bmN0aW9uIHNldE9wdGlvbnMoc2V0T3B0aW9uc0FjdGlvbikge1xuICAgICAgICB2YXIgb3B0aW9ucyA9IHR5cGVvZiBzZXRPcHRpb25zQWN0aW9uID09PSAnZnVuY3Rpb24nID8gc2V0T3B0aW9uc0FjdGlvbihzdGF0ZS5vcHRpb25zKSA6IHNldE9wdGlvbnNBY3Rpb247XG4gICAgICAgIGNsZWFudXBNb2RpZmllckVmZmVjdHMoKTtcbiAgICAgICAgc3RhdGUub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRPcHRpb25zLCBzdGF0ZS5vcHRpb25zLCBvcHRpb25zKTtcbiAgICAgICAgc3RhdGUuc2Nyb2xsUGFyZW50cyA9IHtcbiAgICAgICAgICByZWZlcmVuY2U6IGlzRWxlbWVudChyZWZlcmVuY2UpID8gbGlzdFNjcm9sbFBhcmVudHMocmVmZXJlbmNlKSA6IHJlZmVyZW5jZS5jb250ZXh0RWxlbWVudCA/IGxpc3RTY3JvbGxQYXJlbnRzKHJlZmVyZW5jZS5jb250ZXh0RWxlbWVudCkgOiBbXSxcbiAgICAgICAgICBwb3BwZXI6IGxpc3RTY3JvbGxQYXJlbnRzKHBvcHBlcilcbiAgICAgICAgfTsgLy8gT3JkZXJzIHRoZSBtb2RpZmllcnMgYmFzZWQgb24gdGhlaXIgZGVwZW5kZW5jaWVzIGFuZCBgcGhhc2VgXG4gICAgICAgIC8vIHByb3BlcnRpZXNcblxuICAgICAgICB2YXIgb3JkZXJlZE1vZGlmaWVycyA9IG9yZGVyTW9kaWZpZXJzKG1lcmdlQnlOYW1lKFtdLmNvbmNhdChkZWZhdWx0TW9kaWZpZXJzLCBzdGF0ZS5vcHRpb25zLm1vZGlmaWVycykpKTsgLy8gU3RyaXAgb3V0IGRpc2FibGVkIG1vZGlmaWVyc1xuXG4gICAgICAgIHN0YXRlLm9yZGVyZWRNb2RpZmllcnMgPSBvcmRlcmVkTW9kaWZpZXJzLmZpbHRlcihmdW5jdGlvbiAobSkge1xuICAgICAgICAgIHJldHVybiBtLmVuYWJsZWQ7XG4gICAgICAgIH0pO1xuICAgICAgICBydW5Nb2RpZmllckVmZmVjdHMoKTtcbiAgICAgICAgcmV0dXJuIGluc3RhbmNlLnVwZGF0ZSgpO1xuICAgICAgfSxcbiAgICAgIC8vIFN5bmMgdXBkYXRlIFx1MjAxMyBpdCB3aWxsIGFsd2F5cyBiZSBleGVjdXRlZCwgZXZlbiBpZiBub3QgbmVjZXNzYXJ5LiBUaGlzXG4gICAgICAvLyBpcyB1c2VmdWwgZm9yIGxvdyBmcmVxdWVuY3kgdXBkYXRlcyB3aGVyZSBzeW5jIGJlaGF2aW9yIHNpbXBsaWZpZXMgdGhlXG4gICAgICAvLyBsb2dpYy5cbiAgICAgIC8vIEZvciBoaWdoIGZyZXF1ZW5jeSB1cGRhdGVzIChlLmcuIGByZXNpemVgIGFuZCBgc2Nyb2xsYCBldmVudHMpLCBhbHdheXNcbiAgICAgIC8vIHByZWZlciB0aGUgYXN5bmMgUG9wcGVyI3VwZGF0ZSBtZXRob2RcbiAgICAgIGZvcmNlVXBkYXRlOiBmdW5jdGlvbiBmb3JjZVVwZGF0ZSgpIHtcbiAgICAgICAgaWYgKGlzRGVzdHJveWVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIF9zdGF0ZSRlbGVtZW50cyA9IHN0YXRlLmVsZW1lbnRzLFxuICAgICAgICAgICAgcmVmZXJlbmNlID0gX3N0YXRlJGVsZW1lbnRzLnJlZmVyZW5jZSxcbiAgICAgICAgICAgIHBvcHBlciA9IF9zdGF0ZSRlbGVtZW50cy5wb3BwZXI7IC8vIERvbid0IHByb2NlZWQgaWYgYHJlZmVyZW5jZWAgb3IgYHBvcHBlcmAgYXJlIG5vdCB2YWxpZCBlbGVtZW50c1xuICAgICAgICAvLyBhbnltb3JlXG5cbiAgICAgICAgaWYgKCFhcmVWYWxpZEVsZW1lbnRzKHJlZmVyZW5jZSwgcG9wcGVyKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBTdG9yZSB0aGUgcmVmZXJlbmNlIGFuZCBwb3BwZXIgcmVjdHMgdG8gYmUgcmVhZCBieSBtb2RpZmllcnNcblxuXG4gICAgICAgIHN0YXRlLnJlY3RzID0ge1xuICAgICAgICAgIHJlZmVyZW5jZTogZ2V0Q29tcG9zaXRlUmVjdChyZWZlcmVuY2UsIGdldE9mZnNldFBhcmVudChwb3BwZXIpLCBzdGF0ZS5vcHRpb25zLnN0cmF0ZWd5ID09PSAnZml4ZWQnKSxcbiAgICAgICAgICBwb3BwZXI6IGdldExheW91dFJlY3QocG9wcGVyKVxuICAgICAgICB9OyAvLyBNb2RpZmllcnMgaGF2ZSB0aGUgYWJpbGl0eSB0byByZXNldCB0aGUgY3VycmVudCB1cGRhdGUgY3ljbGUuIFRoZVxuICAgICAgICAvLyBtb3N0IGNvbW1vbiB1c2UgY2FzZSBmb3IgdGhpcyBpcyB0aGUgYGZsaXBgIG1vZGlmaWVyIGNoYW5naW5nIHRoZVxuICAgICAgICAvLyBwbGFjZW1lbnQsIHdoaWNoIHRoZW4gbmVlZHMgdG8gcmUtcnVuIGFsbCB0aGUgbW9kaWZpZXJzLCBiZWNhdXNlIHRoZVxuICAgICAgICAvLyBsb2dpYyB3YXMgcHJldmlvdXNseSByYW4gZm9yIHRoZSBwcmV2aW91cyBwbGFjZW1lbnQgYW5kIGlzIHRoZXJlZm9yZVxuICAgICAgICAvLyBzdGFsZS9pbmNvcnJlY3RcblxuICAgICAgICBzdGF0ZS5yZXNldCA9IGZhbHNlO1xuICAgICAgICBzdGF0ZS5wbGFjZW1lbnQgPSBzdGF0ZS5vcHRpb25zLnBsYWNlbWVudDsgLy8gT24gZWFjaCB1cGRhdGUgY3ljbGUsIHRoZSBgbW9kaWZpZXJzRGF0YWAgcHJvcGVydHkgZm9yIGVhY2ggbW9kaWZpZXJcbiAgICAgICAgLy8gaXMgZmlsbGVkIHdpdGggdGhlIGluaXRpYWwgZGF0YSBzcGVjaWZpZWQgYnkgdGhlIG1vZGlmaWVyLiBUaGlzIG1lYW5zXG4gICAgICAgIC8vIGl0IGRvZXNuJ3QgcGVyc2lzdCBhbmQgaXMgZnJlc2ggb24gZWFjaCB1cGRhdGUuXG4gICAgICAgIC8vIFRvIGVuc3VyZSBwZXJzaXN0ZW50IGRhdGEsIHVzZSBgJHtuYW1lfSNwZXJzaXN0ZW50YFxuXG4gICAgICAgIHN0YXRlLm9yZGVyZWRNb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICAgICAgICByZXR1cm4gc3RhdGUubW9kaWZpZXJzRGF0YVttb2RpZmllci5uYW1lXSA9IE9iamVjdC5hc3NpZ24oe30sIG1vZGlmaWVyLmRhdGEpO1xuICAgICAgICB9KTtcblxuICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgc3RhdGUub3JkZXJlZE1vZGlmaWVycy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICBpZiAoc3RhdGUucmVzZXQgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHN0YXRlLnJlc2V0ID0gZmFsc2U7XG4gICAgICAgICAgICBpbmRleCA9IC0xO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIF9zdGF0ZSRvcmRlcmVkTW9kaWZpZSA9IHN0YXRlLm9yZGVyZWRNb2RpZmllcnNbaW5kZXhdLFxuICAgICAgICAgICAgICBmbiA9IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZS5mbixcbiAgICAgICAgICAgICAgX3N0YXRlJG9yZGVyZWRNb2RpZmllMiA9IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZS5vcHRpb25zLFxuICAgICAgICAgICAgICBfb3B0aW9ucyA9IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIgPT09IHZvaWQgMCA/IHt9IDogX3N0YXRlJG9yZGVyZWRNb2RpZmllMixcbiAgICAgICAgICAgICAgbmFtZSA9IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZS5uYW1lO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgc3RhdGUgPSBmbih7XG4gICAgICAgICAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgICAgICAgICAgb3B0aW9uczogX29wdGlvbnMsXG4gICAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgIGluc3RhbmNlOiBpbnN0YW5jZVxuICAgICAgICAgICAgfSkgfHwgc3RhdGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gQXN5bmMgYW5kIG9wdGltaXN0aWNhbGx5IG9wdGltaXplZCB1cGRhdGUgXHUyMDEzIGl0IHdpbGwgbm90IGJlIGV4ZWN1dGVkIGlmXG4gICAgICAvLyBub3QgbmVjZXNzYXJ5IChkZWJvdW5jZWQgdG8gcnVuIGF0IG1vc3Qgb25jZS1wZXItdGljaylcbiAgICAgIHVwZGF0ZTogZGVib3VuY2UoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICBpbnN0YW5jZS5mb3JjZVVwZGF0ZSgpO1xuICAgICAgICAgIHJlc29sdmUoc3RhdGUpO1xuICAgICAgICB9KTtcbiAgICAgIH0pLFxuICAgICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgICAgY2xlYW51cE1vZGlmaWVyRWZmZWN0cygpO1xuICAgICAgICBpc0Rlc3Ryb3llZCA9IHRydWU7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmICghYXJlVmFsaWRFbGVtZW50cyhyZWZlcmVuY2UsIHBvcHBlcikpIHtcbiAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9XG5cbiAgICBpbnN0YW5jZS5zZXRPcHRpb25zKG9wdGlvbnMpLnRoZW4oZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICBpZiAoIWlzRGVzdHJveWVkICYmIG9wdGlvbnMub25GaXJzdFVwZGF0ZSkge1xuICAgICAgICBvcHRpb25zLm9uRmlyc3RVcGRhdGUoc3RhdGUpO1xuICAgICAgfVxuICAgIH0pOyAvLyBNb2RpZmllcnMgaGF2ZSB0aGUgYWJpbGl0eSB0byBleGVjdXRlIGFyYml0cmFyeSBjb2RlIGJlZm9yZSB0aGUgZmlyc3RcbiAgICAvLyB1cGRhdGUgY3ljbGUgcnVucy4gVGhleSB3aWxsIGJlIGV4ZWN1dGVkIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSB1cGRhdGVcbiAgICAvLyBjeWNsZS4gVGhpcyBpcyB1c2VmdWwgd2hlbiBhIG1vZGlmaWVyIGFkZHMgc29tZSBwZXJzaXN0ZW50IGRhdGEgdGhhdFxuICAgIC8vIG90aGVyIG1vZGlmaWVycyBuZWVkIHRvIHVzZSwgYnV0IHRoZSBtb2RpZmllciBpcyBydW4gYWZ0ZXIgdGhlIGRlcGVuZGVudFxuICAgIC8vIG9uZS5cblxuICAgIGZ1bmN0aW9uIHJ1bk1vZGlmaWVyRWZmZWN0cygpIHtcbiAgICAgIHN0YXRlLm9yZGVyZWRNb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAoX3JlZikge1xuICAgICAgICB2YXIgbmFtZSA9IF9yZWYubmFtZSxcbiAgICAgICAgICAgIF9yZWYkb3B0aW9ucyA9IF9yZWYub3B0aW9ucyxcbiAgICAgICAgICAgIG9wdGlvbnMgPSBfcmVmJG9wdGlvbnMgPT09IHZvaWQgMCA/IHt9IDogX3JlZiRvcHRpb25zLFxuICAgICAgICAgICAgZWZmZWN0ID0gX3JlZi5lZmZlY3Q7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBlZmZlY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB2YXIgY2xlYW51cEZuID0gZWZmZWN0KHtcbiAgICAgICAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICBpbnN0YW5jZTogaW5zdGFuY2UsXG4gICAgICAgICAgICBvcHRpb25zOiBvcHRpb25zXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICB2YXIgbm9vcEZuID0gZnVuY3Rpb24gbm9vcEZuKCkge307XG5cbiAgICAgICAgICBlZmZlY3RDbGVhbnVwRm5zLnB1c2goY2xlYW51cEZuIHx8IG5vb3BGbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsZWFudXBNb2RpZmllckVmZmVjdHMoKSB7XG4gICAgICBlZmZlY3RDbGVhbnVwRm5zLmZvckVhY2goZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmbigpO1xuICAgICAgfSk7XG4gICAgICBlZmZlY3RDbGVhbnVwRm5zID0gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9O1xufVxuZXhwb3J0IHZhciBjcmVhdGVQb3BwZXIgPSAvKiNfX1BVUkVfXyovcG9wcGVyR2VuZXJhdG9yKCk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgZGV0ZWN0T3ZlcmZsb3cgfTsiLCAiaW1wb3J0IHsgcG9wcGVyR2VuZXJhdG9yLCBkZXRlY3RPdmVyZmxvdyB9IGZyb20gXCIuL2NyZWF0ZVBvcHBlci5qc1wiO1xuaW1wb3J0IGV2ZW50TGlzdGVuZXJzIGZyb20gXCIuL21vZGlmaWVycy9ldmVudExpc3RlbmVycy5qc1wiO1xuaW1wb3J0IHBvcHBlck9mZnNldHMgZnJvbSBcIi4vbW9kaWZpZXJzL3BvcHBlck9mZnNldHMuanNcIjtcbmltcG9ydCBjb21wdXRlU3R5bGVzIGZyb20gXCIuL21vZGlmaWVycy9jb21wdXRlU3R5bGVzLmpzXCI7XG5pbXBvcnQgYXBwbHlTdHlsZXMgZnJvbSBcIi4vbW9kaWZpZXJzL2FwcGx5U3R5bGVzLmpzXCI7XG5pbXBvcnQgb2Zmc2V0IGZyb20gXCIuL21vZGlmaWVycy9vZmZzZXQuanNcIjtcbmltcG9ydCBmbGlwIGZyb20gXCIuL21vZGlmaWVycy9mbGlwLmpzXCI7XG5pbXBvcnQgcHJldmVudE92ZXJmbG93IGZyb20gXCIuL21vZGlmaWVycy9wcmV2ZW50T3ZlcmZsb3cuanNcIjtcbmltcG9ydCBhcnJvdyBmcm9tIFwiLi9tb2RpZmllcnMvYXJyb3cuanNcIjtcbmltcG9ydCBoaWRlIGZyb20gXCIuL21vZGlmaWVycy9oaWRlLmpzXCI7XG52YXIgZGVmYXVsdE1vZGlmaWVycyA9IFtldmVudExpc3RlbmVycywgcG9wcGVyT2Zmc2V0cywgY29tcHV0ZVN0eWxlcywgYXBwbHlTdHlsZXMsIG9mZnNldCwgZmxpcCwgcHJldmVudE92ZXJmbG93LCBhcnJvdywgaGlkZV07XG52YXIgY3JlYXRlUG9wcGVyID0gLyojX19QVVJFX18qL3BvcHBlckdlbmVyYXRvcih7XG4gIGRlZmF1bHRNb2RpZmllcnM6IGRlZmF1bHRNb2RpZmllcnNcbn0pOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IGNyZWF0ZVBvcHBlciwgcG9wcGVyR2VuZXJhdG9yLCBkZWZhdWx0TW9kaWZpZXJzLCBkZXRlY3RPdmVyZmxvdyB9OyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IGNyZWF0ZVBvcHBlciBhcyBjcmVhdGVQb3BwZXJMaXRlIH0gZnJvbSBcIi4vcG9wcGVyLWxpdGUuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgKiBmcm9tIFwiLi9tb2RpZmllcnMvaW5kZXguanNcIjsiLCAiZXhwb3J0ICogZnJvbSBcIi4vZW51bXMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL21vZGlmaWVycy9pbmRleC5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IHBvcHBlckdlbmVyYXRvciwgZGV0ZWN0T3ZlcmZsb3csIGNyZWF0ZVBvcHBlciBhcyBjcmVhdGVQb3BwZXJCYXNlIH0gZnJvbSBcIi4vY3JlYXRlUG9wcGVyLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgY3JlYXRlUG9wcGVyIH0gZnJvbSBcIi4vcG9wcGVyLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgY3JlYXRlUG9wcGVyIGFzIGNyZWF0ZVBvcHBlckxpdGUgfSBmcm9tIFwiLi9wb3BwZXItbGl0ZS5qc1wiOyIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IEJhc2UgfTtcblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBiYXNlIGNsYXNzIGZyb20gd2hpY2ggdGhlIG1vc3QgY2xhc3NlcyBhcmUgZGVyaXZlZC5cbiAqXG4gKiBUaGlzIGNsYXNzIGhhcyBiZXNpZGVzIGEgYHRvU3RyaW5nYCB3aGljaCByZXR1cm5zIHRoZSBqc29uIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvYmplY3RcbiAqIGFsc28gYSBmdW5jdGlvbmFsaXR5IHRvIGNoZWNrIGlmIGFuIG9iamVjdCBpcyBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzLlxuICpcbiAqIFRoZXJlZm9yZSwgdGhlIGNsYXNzIGhhcyBhIHN0YXRpYyBtZXRob2QgYCBbU3ltYm9sLmhhc0luc3RhbmNlXSh0aGF0KWAgd2hpY2ggcmV0dXJucyB0cnVlIGlmIHRoZSBvYmplY3RcbiAqIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBjbGFzcy5cbiAqXG4gKiBAc2VlIFtodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9TeW1ib2wvaGFzSW5zdGFuY2VdKGRldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9TeW1ib2wvaGFzSW5zdGFuY2UpXG4gKlxuICogRGVyaXZlZCBjbGFzc2VzIHNob3VsZCBpbXBsZW1lbnQgYSBzdGF0aWMgZ2V0dGVyIGBpbnN0YW5jZVN5bWJvbGAgd2hpY2ggcmV0dXJucyBhIHVuaXF1ZSBzeW1ib2wuXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogc3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuICogICAgcmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL3R5cGVzL2Jhc2VcIik7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBUaGUgY2xhc3Mgd2FzIGZvcm1lcmx5IGNhbGxlZCBPYmplY3QuXG4gKlxuICogQHNpbmNlIDEuNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgVGhlIGJhc2UgY2xhc3MgZm9yIHRoZSBtb3N0IGNsYXNzZXMgaW4gdGhlIG1vbnN0ZXIgbGlicmFyeVxuICovXG5jbGFzcyBCYXNlIGV4dGVuZHMgT2JqZWN0IHtcblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHRvU3RyaW5nKCkge1xuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvdHlwZXMvYmFzZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHBhcmFtIHRoYXRcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgW1N5bWJvbC5oYXNJbnN0YW5jZV0odGhhdCkge1xuXHRcdGlmIChcblx0XHRcdHRoYXQgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0dGhhdCA9PT0gbnVsbCB8fFxuXHRcdFx0KHR5cGVvZiB0aGF0ICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiB0aGF0ICE9PSBcImZ1bmN0aW9uXCIpXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdGhhdENsYXNzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoYXQpO1xuXHRcdGlmIChcblx0XHRcdHRoYXRDbGFzcyA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHR0aGF0Q2xhc3MgPT09IG51bGwgfHxcblx0XHRcdCh0eXBlb2YgdGhhdENsYXNzICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiB0aGF0Q2xhc3MgIT09IFwiZnVuY3Rpb25cIilcblx0XHQpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRpZiAoY2hlY2tJbnN0YW5jZVN5bWJvbC5hcHBseSh0aGlzLCBbdGhhdENsYXNzXSkgPT09IHRydWUpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdC8vIHRoaXMgY2FsbCB0aGUgc3RhdGljIG1ldGhvZCBvZiB0aGUgc3VwZXIgY2xhc3MsIGlmIHRoZXJlIGlzIG9uZVxuXHRcdHJldHVybiBzdXBlcltTeW1ib2wuaGFzSW5zdGFuY2VdKHRoYXQpO1xuXHR9XG59XG5cbi8qKlxuICogdGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgdGhlIGNsYXNzIGhhcyBhIHN0YXRpYyBnZXR0ZXIgYGluc3RhbmNlU3ltYm9sYCBhbmQgaWYgdGhlIHZhbHVlIG9mIHRoaXMgZ2V0dGVyIGlzIGVxdWFsIHRvIHRoZVxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gb2JqXG4gKiBAcmV0dXJuIHtib29sZWFufGFueXxib29sZWFufVxuICogQHNpbmNlIDIuMS4wXG4gKi9cbmZ1bmN0aW9uIGNoZWNrSW5zdGFuY2VTeW1ib2wob2JqKSB7XG5cdGlmICh0aGlzLmhhc093blByb3BlcnR5KGluc3RhbmNlU3ltYm9sKSA9PT0gZmFsc2UpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRjb25zdCBwcm90byA9IG9iaj8uY29uc3RydWN0b3I7XG5cdGlmIChcblx0XHRwcm90byA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0cHJvdG8gPT09IG51bGwgfHxcblx0XHQodHlwZW9mIHByb3RvICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBwcm90byAhPT0gXCJmdW5jdGlvblwiKVxuXHQpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRpZiAocHJvdG8uaGFzT3duUHJvcGVydHkoaW5zdGFuY2VTeW1ib2wpICE9PSB0cnVlKSB7XG5cdFx0cmV0dXJuIGNoZWNrSW5zdGFuY2VTeW1ib2wuYXBwbHkodGhpcywgW29iai5fX3Byb3RvX19dKTtcblx0fVxuXG5cdGNvbnN0IHN5bWJvbCA9IHByb3RvW2luc3RhbmNlU3ltYm9sXTtcblx0aWYgKHN5bWJvbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0aWYgKG9iai5fX3Byb3RvX18pIHtcblx0XHRcdHJldHVybiBjaGVja0luc3RhbmNlU3ltYm9sKG9iai5fX3Byb3RvX18pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aWYgKHN5bWJvbCA9PT0gdGhpc1tpbnN0YW5jZVN5bWJvbF0pIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHJldHVybiBjaGVja0luc3RhbmNlU3ltYm9sLmFwcGx5KHRoaXMsIFtvYmouX19wcm90b19fXSk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBTdGFjayB9O1xuXG4vKipcbiAqIFlvdSBjYW4gY2FsbCB0aGUgbWV0aG9kIHZpYSB0aGUgbW9uc3RlciBuYW1lc3BhY2UgYG5ldyBRdWV1ZSgpYC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjQuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuY2xhc3MgU3RhY2sgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuZGF0YSA9IFtdO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci90eXBlcy9zdGFja1wiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0aXNFbXB0eSgpIHtcblx0XHRyZXR1cm4gdGhpcy5kYXRhLmxlbmd0aCA9PT0gMDtcblx0fVxuXG5cdC8qKlxuXHQgKiBsb29rcyBhdCB0aGUgb2JqZWN0IGF0IHRoZSB0b3Agb2YgdGhpcyBzdGFjayB3aXRob3V0IHJlbW92aW5nIGl0IGZyb20gdGhlIHN0YWNrLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHsqfVxuXHQgKi9cblx0cGVlaygpIHtcblx0XHRpZiAodGhpcy5pc0VtcHR5KCkpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZGF0YT8uW3RoaXMuZGF0YS5sZW5ndGggLSAxXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBwdXNoZXMgYW4gaXRlbSBvbnRvIHRoZSB0b3Agb2YgdGhpcyBzdGFjay5cblx0ICpcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHtRdWV1ZX1cblx0ICovXG5cdHB1c2godmFsdWUpIHtcblx0XHR0aGlzLmRhdGEucHVzaCh2YWx1ZSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogcmVtb3ZlIGFsbCBlbnRyaWVzXG5cdCAqXG5cdCAqIEByZXR1cm4ge1F1ZXVlfVxuXHQgKi9cblx0Y2xlYXIoKSB7XG5cdFx0dGhpcy5kYXRhID0gW107XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogcmVtb3ZlcyB0aGUgb2JqZWN0IGF0IHRoZSB0b3Agb2YgdGhpcyBzdGFjayBhbmQgcmV0dXJuc1xuXHQgKiB0aGF0IG9iamVjdCBhcyB0aGUgdmFsdWUgb2YgdGhpcyBmdW5jdGlvbi4gaXMgdGhlIHN0YWNrIGVtcHR5XG5cdCAqIHRoZSByZXR1cm4gdmFsdWUgaXMgdW5kZWZpbmVkLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHsqfVxuXHQgKi9cblx0cG9wKCkge1xuXHRcdGlmICh0aGlzLmlzRW1wdHkoKSkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZGF0YS5wb3AoKTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7XG5cdGlzQXJyYXksXG5cdGlzSW50ZWdlcixcblx0aXNPYmplY3QsXG5cdGlzUHJpbWl0aXZlLFxuXHRpc1N0cmluZyxcbn0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgU3RhY2sgfSBmcm9tIFwiLi4vdHlwZXMvc3RhY2subWpzXCI7XG5pbXBvcnQge1xuXHR2YWxpZGF0ZUludGVnZXIsXG5cdHZhbGlkYXRlQm9vbGVhbixcblx0dmFsaWRhdGVTdHJpbmcsXG59IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgUGF0aGZpbmRlciwgREVMSU1JVEVSLCBXSUxEQ0FSRCB9O1xuXG4vKipcbiAqIHBhdGggc2VwYXJhdG9yXG4gKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IERFTElNSVRFUiA9IFwiLlwiO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBXSUxEQ0FSRCA9IFwiKlwiO1xuXG4vKipcbiAqIFBhdGhmaW5kZXIgaXMgYSBjbGFzcyB0byBmaW5kIGEgcGF0aCB0byBhbiBvYmplY3QuXG4gKlxuICogV2l0aCB0aGUgaGVscCBvZiB0aGUgcGF0aGZpbmRlciwgdmFsdWVzIGNhbiBiZSByZWFkIGFuZCB3cml0dGVuIGZyb20gYW4gb2JqZWN0IGNvbnN0cnVjdC5cbiAqXG4gKiBgYGBcbiAqIG5ldyBQYXRoZmluZGVyKHtcbiAqIGE6IHtcbiAqICAgICBiOiB7XG4gKiAgICAgICAgIGY6IFtcbiAqICAgICAgICAgICAgIHtcbiAqICAgICAgICAgICAgICAgICBnOiBmYWxzZSxcbiAqICAgICAgICAgICAgIH1cbiAqICAgICAgICAgXSxcbiAqICAgICB9XG4gKiB9XG4gKiB9KS5nZXRWaWEoXCJhLmIuZi4wLmdcIik7IC8vIFx1MjFBNiBmYWxzZVxuICogYGBgXG4gKlxuICogaWYgYSB2YWx1ZSBpcyBub3QgcHJlc2VudCBvciBoYXMgdGhlIHdyb25nIHR5cGUsIGEgY29ycmVzcG9uZGluZyBleGNlcHRpb24gaXMgdGhyb3duLlxuICpcbiAqIGBgYFxuICogbmV3IFBhdGhmaW5kZXIoe30pLmdldFZpYShcImEuYi5mLjAuZ1wiKTsgLy8gXHUyMUE2IEVycm9yXG4gKiBgYGBcbiAqXG4gKiBUaGUgYFBhdGhmaW5kZXIuZXhpc3RzKClgIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIGFjY2VzcyB0byB0aGUgcGF0aCBpcyBwb3NzaWJsZS5cbiAqXG4gKiBgYGBcbiAqIG5ldyBQYXRoZmluZGVyKHt9KS5leGlzdHMoXCJhLmIuZi4wLmdcIik7IC8vIFx1MjFBNiBmYWxzZVxuICogYGBgXG4gKlxuICogcGF0aGZpbmRlciBjYW4gYWxzbyBiZSB1c2VkIHRvIGJ1aWxkIG9iamVjdCBzdHJ1Y3R1cmVzLiB0byBkbyB0aGlzLCB0aGUgYFBhdGhmaW5kZXIuc2V0VmlhKClgIG1ldGhvZCBtdXN0IGJlIHVzZWQuXG4gKlxuICogYGBgXG4gKiBvYmogPSB7fTtcbiAqIG5ldyBQYXRoZmluZGVyKG9iaikuc2V0VmlhKCdhLmIuMC5jJywgdHJ1ZSk7IC8vIFx1MjFBNiB7YTp7Yjpbe2M6dHJ1ZX1dfX1cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9saWJyYXJpZXMvcGF0aGZpbmRlci9leGFtcGxlLTEvIEV4YW1wbGUgMVxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2xpYnJhcmllcy9wYXRoZmluZGVyL2V4YW1wbGUtMi8gRXhhbXBsZSAyXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS40LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBQYXRoZmluZGVyIGlzIGEgY2xhc3MgdG8gZmluZCBhIHBhdGggdG8gYW4gb2JqZWN0LlxuICovXG5jbGFzcyBQYXRoZmluZGVyIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBjb25zdHJ1Y3Rvci5cblx0ICpcblx0ICogQHBhcmFtIHtvYmplY3R9IG9iamVjdCAtIFRoZSBvYmplY3QgcGFyYW1ldGVyIGZvciB0aGUgY29uc3RydWN0b3IuXG5cdCAqXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBUaHJvd3MgYW4gZXJyb3IgaWYgdGhlIHByb3ZpZGVkIG9iamVjdCBwYXJhbWV0ZXIgaXMgYSBzaW1wbGUgdHlwZS5cblx0ICovXG5cdGNvbnN0cnVjdG9yKG9iamVjdCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHRpZiAoaXNQcmltaXRpdmUob2JqZWN0KSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIHBhcmFtZXRlciBtdXN0IG5vdCBiZSBhIHNpbXBsZSB0eXBlXCIpO1xuXHRcdH1cblxuXHRcdHRoaXMub2JqZWN0ID0gb2JqZWN0O1xuXHRcdHRoaXMud2lsZENhcmQgPSBXSUxEQ0FSRDtcblx0fVxuXG5cdC8qKlxuXHQgKiBzZXQgd2lsZGNhcmRcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHdpbGRjYXJkXG5cdCAqIEByZXR1cm4ge1BhdGhmaW5kZXJ9XG5cdCAqIEBzaW5jZSAxLjcuMFxuXHQgKi9cblx0c2V0V2lsZENhcmQod2lsZGNhcmQpIHtcblx0XHR2YWxpZGF0ZVN0cmluZyh3aWxkY2FyZCk7XG5cdFx0dGhpcy53aWxkQ2FyZCA9IHdpbGRjYXJkO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfGFycmF5fSBwYXRoXG5cdCAqIEBzaW5jZSAxLjQuMFxuXHQgKiBAcmV0dXJuIHsqfVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBqb3VybmV5IGlzIG5vdCBhdCBpdHMgZW5kXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGludGVnZXJcblx0ICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGFjdGlvbiBmb3IgdGhpcyBkYXRhIHR5cGVcblx0ICovXG5cdGdldFZpYShwYXRoKSB7XG5cdFx0cmV0dXJuIGdldFZhbHVlVmlhUGF0aC5jYWxsKHRoaXMsIHRoaXMub2JqZWN0LCBwYXRoKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3xhcnJheX0gcGF0aFxuXHQgKiBAcGFyYW0geyp9IHZhbHVlXG5cdCAqIEByZXR1cm4ge1BhdGhmaW5kZXJ9XG5cdCAqIEBzaW5jZSAxLjQuMFxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW50ZWdlclxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgYWN0aW9uIGZvciB0aGlzIGRhdGEgdHlwZVxuXHQgKi9cblx0c2V0VmlhKHBhdGgsIHZhbHVlKSB7XG5cdFx0c2V0VmFsdWVWaWFQYXRoLmNhbGwodGhpcywgdGhpcy5vYmplY3QsIHBhdGgsIHZhbHVlKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBEZWxldGUgVmlhIFBhdGhcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd8YXJyYXl9IHBhdGhcblx0ICogQHJldHVybiB7UGF0aGZpbmRlcn1cblx0ICogQHNpbmNlIDEuNi4wXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnRlZ2VyXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBhY3Rpb24gZm9yIHRoaXMgZGF0YSB0eXBlXG5cdCAqL1xuXHRkZWxldGVWaWEocGF0aCkge1xuXHRcdGRlbGV0ZVZhbHVlVmlhUGF0aC5jYWxsKHRoaXMsIHRoaXMub2JqZWN0LCBwYXRoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3xhcnJheX0gcGF0aFxuXHQgKiBAcmV0dXJuIHtib29sfVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW50ZWdlclxuXHQgKiBAc2luY2UgMS40LjBcblx0ICovXG5cdGV4aXN0cyhwYXRoKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGdldFZhbHVlVmlhUGF0aC5jYWxsKHRoaXMsIHRoaXMub2JqZWN0LCBwYXRoLCB0cnVlKTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0gY2F0Y2ggKGUpIHt9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHsqfSBzdWJqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ3xhcnJheX0gcGF0aFxuICogQHBhcmFtIHtib29sZWFufSBjaGVja1xuICogQHJldHVybiB7TWFwfVxuICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhlIGpvdXJuZXkgaXMgbm90IGF0IGl0cyBlbmRcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBhY3Rpb24gZm9yIHRoaXMgZGF0YSB0eXBlXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpdGVyYXRlKHN1YmplY3QsIHBhdGgsIGNoZWNrKSB7XG5cdGlmIChjaGVjayA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0Y2hlY2sgPSBmYWxzZTtcblx0fVxuXHR2YWxpZGF0ZUJvb2xlYW4oY2hlY2spO1xuXG5cdGNvbnN0IHJlc3VsdCA9IG5ldyBNYXAoKTtcblxuXHRpZiAoaXNBcnJheShwYXRoKSkge1xuXHRcdHBhdGggPSBwYXRoLmpvaW4oREVMSU1JVEVSKTtcblx0fVxuXG5cdGlmIChpc09iamVjdChzdWJqZWN0KSB8fCBpc0FycmF5KHN1YmplY3QpKSB7XG5cdFx0Zm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoc3ViamVjdCkpIHtcblx0XHRcdHJlc3VsdC5zZXQoa2V5LCBnZXRWYWx1ZVZpYVBhdGguY2FsbCh0aGlzLCB2YWx1ZSwgcGF0aCwgY2hlY2spKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3Qga2V5ID0gcGF0aC5zcGxpdChERUxJTUlURVIpLnNoaWZ0KCk7XG5cdFx0cmVzdWx0LnNldChrZXksIGdldFZhbHVlVmlhUGF0aC5jYWxsKHRoaXMsIHN1YmplY3QsIHBhdGgsIGNoZWNrKSk7XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0gc3ViamVjdFxuICogQHBhcmFtIHBhdGhcbiAqIEBwYXJhbSBjaGVja1xuICogQHJldHVybiB7VnwqfE1hcH1cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuICogQHRocm93cyB7RXJyb3J9IHRoZSBqb3VybmV5IGlzIG5vdCBhdCBpdHMgZW5kXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgYWN0aW9uIGZvciB0aGlzIGRhdGEgdHlwZVxuICovXG5mdW5jdGlvbiBnZXRWYWx1ZVZpYVBhdGgoc3ViamVjdCwgcGF0aCwgY2hlY2spIHtcblx0aWYgKGNoZWNrID09PSB1bmRlZmluZWQpIHtcblx0XHRjaGVjayA9IGZhbHNlO1xuXHR9XG5cdHZhbGlkYXRlQm9vbGVhbihjaGVjayk7XG5cblx0aWYgKCEoaXNBcnJheShwYXRoKSB8fCBpc1N0cmluZyhwYXRoKSkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcInR5cGUgZXJyb3I6IGEgcGF0aCBtdXN0IGJlIGEgc3RyaW5nIG9yIGFuIGFycmF5IGluIGdldFZhbHVlVmlhUGF0aFwiLFxuXHRcdCk7XG5cdH1cblxuXHRsZXQgcGFydHM7XG5cdGlmIChpc1N0cmluZyhwYXRoKSkge1xuXHRcdGlmIChwYXRoID09PSBcIlwiKSB7XG5cdFx0XHRyZXR1cm4gc3ViamVjdDtcblx0XHR9XG5cblx0XHRwYXJ0cyA9IHBhdGguc3BsaXQoREVMSU1JVEVSKTtcblx0fVxuXG5cdGxldCBjdXJyZW50ID0gcGFydHMuc2hpZnQoKTtcblxuXHRpZiAoY3VycmVudCA9PT0gdGhpcy53aWxkQ2FyZCkge1xuXHRcdHJldHVybiBpdGVyYXRlLmNhbGwodGhpcywgc3ViamVjdCwgcGFydHMuam9pbihERUxJTUlURVIpLCBjaGVjayk7XG5cdH1cblxuXHRpZiAoaXNPYmplY3Qoc3ViamVjdCkgfHwgaXNBcnJheShzdWJqZWN0KSkge1xuXHRcdGxldCBhbmNob3I7XG5cdFx0aWYgKHN1YmplY3QgaW5zdGFuY2VvZiBNYXAgfHwgc3ViamVjdCBpbnN0YW5jZW9mIFdlYWtNYXApIHtcblx0XHRcdGFuY2hvciA9IHN1YmplY3QuZ2V0KGN1cnJlbnQpO1xuXHRcdH0gZWxzZSBpZiAoc3ViamVjdCBpbnN0YW5jZW9mIFNldCB8fCBzdWJqZWN0IGluc3RhbmNlb2YgV2Vha1NldCkge1xuXHRcdFx0Y3VycmVudCA9IHBhcnNlSW50KGN1cnJlbnQpO1xuXHRcdFx0dmFsaWRhdGVJbnRlZ2VyKGN1cnJlbnQpO1xuXHRcdFx0YW5jaG9yID0gWy4uLnN1YmplY3RdPy5bY3VycmVudF07XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgV2Vha1JlZiA9PT0gXCJmdW5jdGlvblwiICYmIHN1YmplY3QgaW5zdGFuY2VvZiBXZWFrUmVmKSB7XG5cdFx0XHR0aHJvdyBFcnJvcihcInVuc3VwcG9ydGVkIGFjdGlvbiBmb3IgdGhpcyBkYXRhIHR5cGUgKFdlYWtSZWYpXCIpO1xuXHRcdH0gZWxzZSBpZiAoaXNBcnJheShzdWJqZWN0KSkge1xuXHRcdFx0Y3VycmVudCA9IHBhcnNlSW50KGN1cnJlbnQpO1xuXHRcdFx0dmFsaWRhdGVJbnRlZ2VyKGN1cnJlbnQpO1xuXHRcdFx0YW5jaG9yID0gc3ViamVjdD8uW2N1cnJlbnRdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhbmNob3IgPSBzdWJqZWN0Py5bY3VycmVudF07XG5cdFx0fVxuXG5cdFx0aWYgKGlzT2JqZWN0KGFuY2hvcikgfHwgaXNBcnJheShhbmNob3IpKSB7XG5cdFx0XHRyZXR1cm4gZ2V0VmFsdWVWaWFQYXRoLmNhbGwodGhpcywgYW5jaG9yLCBwYXJ0cy5qb2luKERFTElNSVRFUiksIGNoZWNrKTtcblx0XHR9XG5cblx0XHRpZiAocGFydHMubGVuZ3RoID4gMCkge1xuXHRcdFx0dGhyb3cgRXJyb3IoYHRoZSBqb3VybmV5IGlzIG5vdCBhdCBpdHMgZW5kICgke3BhcnRzLmpvaW4oREVMSU1JVEVSKX0pYCk7XG5cdFx0fVxuXG5cdFx0aWYgKGNoZWNrID09PSB0cnVlKSB7XG5cdFx0XHRjb25zdCBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihcblx0XHRcdFx0T2JqZWN0LmdldFByb3RvdHlwZU9mKHN1YmplY3QpLFxuXHRcdFx0XHRjdXJyZW50LFxuXHRcdFx0KTtcblxuXHRcdFx0aWYgKCFzdWJqZWN0Lmhhc093blByb3BlcnR5KGN1cnJlbnQpICYmIGRlc2NyaXB0b3IgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0aHJvdyBFcnJvcihcInVua25vd24gdmFsdWUgXCIgKyBjdXJyZW50KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gYW5jaG9yO1xuXHR9XG5cblx0dGhyb3cgVHlwZUVycm9yKGB1bnN1cHBvcnRlZCB0eXBlICR7dHlwZW9mIHN1YmplY3R9IGZvciBwYXRoICR7cGF0aH1gKTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHN1YmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfGFycmF5fSBwYXRoXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHt2b2lkfVxuICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgam91cm5leSBpcyBub3QgYXQgaXRzIGVuZFxuICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGFjdGlvbiBmb3IgdGhpcyBkYXRhIHR5cGVcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNldFZhbHVlVmlhUGF0aChzdWJqZWN0LCBwYXRoLCB2YWx1ZSkge1xuXHRpZiAoIShpc0FycmF5KHBhdGgpIHx8IGlzU3RyaW5nKHBhdGgpKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInR5cGUgZXJyb3I6IGEgcGF0aCBtdXN0IGJlIGEgc3RyaW5nIG9yIGFuIGFycmF5XCIpO1xuXHR9XG5cblx0bGV0IHBhcnRzO1xuXHRpZiAoaXNBcnJheShwYXRoKSkge1xuXHRcdGlmIChwYXRoLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHBhcnRzID0gcGF0aDtcblx0fSBlbHNlIHtcblx0XHRwYXJ0cyA9IHBhdGguc3BsaXQoREVMSU1JVEVSKTtcblx0fVxuXG5cdGxldCBsYXN0ID0gcGFydHMucG9wKCk7XG5cdGNvbnN0IHN1YnBhdGggPSBwYXJ0cy5qb2luKERFTElNSVRFUik7XG5cblx0Y29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcblx0bGV0IGN1cnJlbnQgPSBzdWJwYXRoO1xuXHR3aGlsZSAodHJ1ZSkge1xuXHRcdHRyeSB7XG5cdFx0XHRnZXRWYWx1ZVZpYVBhdGguY2FsbCh0aGlzLCBzdWJqZWN0LCBjdXJyZW50LCB0cnVlKTtcblx0XHRcdGJyZWFrO1xuXHRcdH0gY2F0Y2ggKGUpIHt9XG5cblx0XHRzdGFjay5wdXNoKGN1cnJlbnQpO1xuXHRcdHBhcnRzLnBvcCgpO1xuXHRcdGN1cnJlbnQgPSBwYXJ0cy5qb2luKERFTElNSVRFUik7XG5cblx0XHRpZiAoY3VycmVudCA9PT0gXCJcIikgYnJlYWs7XG5cdH1cblxuXHR3aGlsZSAoIXN0YWNrLmlzRW1wdHkoKSkge1xuXHRcdGN1cnJlbnQgPSBzdGFjay5wb3AoKTtcblx0XHRsZXQgb2JqID0ge307XG5cblx0XHRpZiAoIXN0YWNrLmlzRW1wdHkoKSkge1xuXHRcdFx0Y29uc3QgbiA9IHN0YWNrLnBlZWsoKS5zcGxpdChERUxJTUlURVIpLnBvcCgpO1xuXHRcdFx0aWYgKGlzSW50ZWdlcihwYXJzZUludChuKSkpIHtcblx0XHRcdFx0b2JqID0gW107XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0c2V0VmFsdWVWaWFQYXRoLmNhbGwodGhpcywgc3ViamVjdCwgY3VycmVudCwgb2JqKTtcblx0fVxuXG5cdGNvbnN0IGFuY2hvciA9IGdldFZhbHVlVmlhUGF0aC5jYWxsKHRoaXMsIHN1YmplY3QsIHN1YnBhdGgpO1xuXG5cdGlmICghKGlzT2JqZWN0KHN1YmplY3QpIHx8IGlzQXJyYXkoc3ViamVjdCkpKSB7XG5cdFx0dGhyb3cgVHlwZUVycm9yKGB1bnN1cHBvcnRlZCB0eXBlOiAke3R5cGVvZiBzdWJqZWN0fSBpbiBzZXRWYWx1ZVZpYVBhdGhgKTtcblx0fVxuXG5cdGlmIChhbmNob3IgaW5zdGFuY2VvZiBNYXAgfHwgYW5jaG9yIGluc3RhbmNlb2YgV2Vha01hcCkge1xuXHRcdGFuY2hvci5zZXQobGFzdCwgdmFsdWUpO1xuXHR9IGVsc2UgaWYgKGFuY2hvciBpbnN0YW5jZW9mIFNldCB8fCBhbmNob3IgaW5zdGFuY2VvZiBXZWFrU2V0KSB7XG5cdFx0YW5jaG9yLmFwcGVuZCh2YWx1ZSk7XG5cdH0gZWxzZSBpZiAodHlwZW9mIFdlYWtSZWYgPT09IFwiZnVuY3Rpb25cIiAmJiBhbmNob3IgaW5zdGFuY2VvZiBXZWFrUmVmKSB7XG5cdFx0dGhyb3cgRXJyb3IoXCJ1bnN1cHBvcnRlZCBhY3Rpb24gZm9yIHRoaXMgZGF0YSB0eXBlIGluIHNldFZhbHVlVmlhUGF0aFwiKTtcblx0fSBlbHNlIGlmIChpc0FycmF5KGFuY2hvcikpIHtcblx0XHRsYXN0ID0gcGFyc2VJbnQobGFzdCk7XG5cdFx0dmFsaWRhdGVJbnRlZ2VyKGxhc3QpO1xuXHRcdGFzc2lnblByb3BlcnR5KGFuY2hvciwgXCJcIiArIGxhc3QsIHZhbHVlKTtcblx0fSBlbHNlIHtcblx0XHRhc3NpZ25Qcm9wZXJ0eShhbmNob3IsIGxhc3QsIHZhbHVlKTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge29iamVjdH0gb2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGFzc2lnblByb3BlcnR5KG9iamVjdCwga2V5LCB2YWx1ZSkge1xuXHRpZiAoIW9iamVjdC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG5cdFx0b2JqZWN0W2tleV0gPSB2YWx1ZTtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdGRlbGV0ZSBvYmplY3Rba2V5XTtcblx0fVxuXG5cdG9iamVjdFtrZXldID0gdmFsdWU7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBzdWJqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICogQHJldHVybiB7dm9pZH1cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhlIGpvdXJuZXkgaXMgbm90IGF0IGl0cyBlbmRcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBhY3Rpb24gZm9yIHRoaXMgZGF0YSB0eXBlXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjYuMFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZGVsZXRlVmFsdWVWaWFQYXRoKHN1YmplY3QsIHBhdGgpIHtcblx0aWYgKCEoaXNBcnJheShwYXRoKSB8fCBpc1N0cmluZyhwYXRoKSkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcInR5cGUgZXJyb3I6IGEgcGF0aCBtdXN0IGJlIGEgc3RyaW5nIG9yIGFuIGFycmF5IGluIGRlbGV0ZVZhbHVlVmlhUGF0aFwiLFxuXHRcdCk7XG5cdH1cblxuXHRsZXQgcGFydHM7XG5cdGlmIChpc0FycmF5KHBhdGgpKSB7XG5cdFx0aWYgKHBhdGgubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0cGFydHMgPSBwYXRoO1xuXHR9IGVsc2Uge1xuXHRcdHBhcnRzID0gcGF0aC5zcGxpdChERUxJTUlURVIpO1xuXHR9XG5cblx0bGV0IGxhc3QgPSBwYXJ0cy5wb3AoKTtcblx0Y29uc3Qgc3ViUGF0aCA9IHBhcnRzLmpvaW4oREVMSU1JVEVSKTtcblxuXHRjb25zdCBhbmNob3IgPSBnZXRWYWx1ZVZpYVBhdGguY2FsbCh0aGlzLCBzdWJqZWN0LCBzdWJQYXRoKTtcblxuXHRpZiAoYW5jaG9yIGluc3RhbmNlb2YgTWFwKSB7XG5cdFx0YW5jaG9yLmRlbGV0ZShsYXN0KTtcblx0fSBlbHNlIGlmIChcblx0XHRhbmNob3IgaW5zdGFuY2VvZiBTZXQgfHxcblx0XHRhbmNob3IgaW5zdGFuY2VvZiBXZWFrTWFwIHx8XG5cdFx0YW5jaG9yIGluc3RhbmNlb2YgV2Vha1NldCB8fFxuXHRcdCh0eXBlb2YgV2Vha1JlZiA9PT0gXCJmdW5jdGlvblwiICYmIGFuY2hvciBpbnN0YW5jZW9mIFdlYWtSZWYpXG5cdCkge1xuXHRcdHRocm93IEVycm9yKFwidW5zdXBwb3J0ZWQgYWN0aW9uIGZvciB0aGlzIGRhdGEgdHlwZSBpbiBkZWxldGVWYWx1ZVZpYVBhdGhcIik7XG5cdH0gZWxzZSBpZiAoaXNBcnJheShhbmNob3IpKSB7XG5cdFx0bGFzdCA9IHBhcnNlSW50KGxhc3QpO1xuXHRcdHZhbGlkYXRlSW50ZWdlcihsYXN0KTtcblx0XHRkZWxldGUgYW5jaG9yW2xhc3RdO1xuXHR9IGVsc2Uge1xuXHRcdGRlbGV0ZSBhbmNob3JbbGFzdF07XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpc0l0ZXJhYmxlLCBpc1N0cmluZyB9IGZyb20gXCIuL2lzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVGdW5jdGlvbiwgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlLm1qc1wiO1xuXG5leHBvcnQgeyBUb2tlbkxpc3QgfTtcblxuLyoqXG4gKiBBIGBUb2tlbkxpc3RgIGFsbG93cyB5b3UgdG8gbWFuYWdlIHRva2VucyAoaW5kaXZpZHVhbCBjaGFyYWN0ZXIgc3RyaW5ncyBzdWNoIGFzIGNzcyBjbGFzc2VzIGluIGFuIGF0dHJpYnV0ZSBzdHJpbmcpLlxuICpcbiAqIFRoZSBgVG9rZW5MaXN0YCBvZmZlcnMgdmFyaW91cyBmdW5jdGlvbnMgdG8gbWFuaXB1bGF0ZSB2YWx1ZXMuIEZvciBleGFtcGxlLCB5b3UgY2FuIGFkZCwgcmVtb3ZlIG9yIHJlcGxhY2UgYSBjbGFzcyBpbiBhIENTUyBsaXN0LlxuICpcbiAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgW2l0ZXJhdGlvbiBwcm90b2NvbF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvSXRlcmF0aW9uX3Byb3RvY29scykuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKi9cbmNsYXNzIFRva2VuTGlzdCBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHthcnJheXxzdHJpbmd8aXRlcmF0YWJsZX0gaW5pdFxuXHQgKi9cblx0Y29uc3RydWN0b3IoaW5pdCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy50b2tlbnMgPSBuZXcgU2V0KCk7XG5cblx0XHRpZiAodHlwZW9mIGluaXQgIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdHRoaXMuYWRkKGluaXQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBJdGVyYXRvciBwcm90b2NvbFxuXHQgKlxuXHQgKiBAcmV0dXJuIHtTeW1ib2wuaXRlcmF0b3J9XG5cdCAqL1xuXHRnZXRJdGVyYXRvcigpIHtcblx0XHRyZXR1cm4gdGhpc1tTeW1ib2wuaXRlcmF0b3JdKCk7XG5cdH1cblxuXHQvKipcblx0ICogSXRlcmF0b3Jcblx0ICpcblx0ICogQHJldHVybiB7e25leHQ6ICgoZnVuY3Rpb24oKTogKHt2YWx1ZTogKiwgZG9uZTogYm9vbGVhbn0pKXwqKX19XG5cdCAqL1xuXHRbU3ltYm9sLml0ZXJhdG9yXSgpIHtcblx0XHQvLyBVc2UgYSBuZXcgaW5kZXggZm9yIGVhY2ggaXRlcmF0b3IuIFRoaXMgbWFrZXMgbXVsdGlwbGVcblx0XHQvLyBpdGVyYXRpb25zIG92ZXIgdGhlIGl0ZXJhYmxlIHNhZmUgZm9yIG5vbi10cml2aWFsIGNhc2VzLFxuXHRcdC8vIHN1Y2ggYXMgdXNlIG9mIGJyZWFrIG9yIG5lc3RlZCBsb29waW5nIG92ZXIgdGhlIHNhbWUgaXRlcmFibGUuXG5cdFx0bGV0IGluZGV4ID0gMDtcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzKCk7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0bmV4dDogKCkgPT4ge1xuXHRcdFx0XHRpZiAoaW5kZXggPCBlbnRyaWVzLmxlbmd0aCkge1xuXHRcdFx0XHRcdHJldHVybiB7IHZhbHVlOiBlbnRyaWVzPy5baW5kZXgrK10sIGRvbmU6IGZhbHNlIH07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuIHsgZG9uZTogdHJ1ZSB9O1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0cnVlIGlmIGl0IGNvbnRhaW5zIHRva2VuLCBvdGhlcndpc2UgZmFsc2Vcblx0ICpcblx0ICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3R5cGVzL3Rva2VubGlzdC0yLm1qc1xuXHQgKiBAcGFyYW0ge2FycmF5fHN0cmluZ3xpdGVyYXRhYmxlfSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0Y29udGFpbnModmFsdWUpIHtcblx0XHRpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG5cdFx0XHR2YWx1ZSA9IHZhbHVlLnRyaW0oKTtcblx0XHRcdGxldCBjb3VudGVyID0gMDtcblx0XHRcdHZhbHVlLnNwbGl0KFwiIFwiKS5mb3JFYWNoKCh0b2tlbikgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy50b2tlbnMuaGFzKHRva2VuLnRyaW0oKSkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRcdGNvdW50ZXIrKztcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIGNvdW50ZXIgPiAwID8gdHJ1ZSA6IGZhbHNlO1xuXHRcdH1cblxuXHRcdGlmIChpc0l0ZXJhYmxlKHZhbHVlKSkge1xuXHRcdFx0bGV0IGNvdW50ZXIgPSAwO1xuXHRcdFx0Zm9yIChjb25zdCB0b2tlbiBvZiB2YWx1ZSkge1xuXHRcdFx0XHR2YWxpZGF0ZVN0cmluZyh0b2tlbik7XG5cdFx0XHRcdGlmICh0aGlzLnRva2Vucy5oYXModG9rZW4udHJpbSgpKSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcblx0XHRcdFx0Y291bnRlcisrO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGNvdW50ZXIgPiAwID8gdHJ1ZSA6IGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgdG9rZW5zXG5cdCAqXG5cdCAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy90b2tlbmxpc3QtMy5tanNcblx0ICogQHBhcmFtIHthcnJheXxzdHJpbmd8aXRlcmF0YWJsZX0gdmFsdWVcblx0ICogQHJldHVybiB7VG9rZW5MaXN0fVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHZhbHVlXG5cdCAqL1xuXHRhZGQodmFsdWUpIHtcblx0XHRpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG5cdFx0XHR2YWx1ZS5zcGxpdChcIiBcIikuZm9yRWFjaCgodG9rZW4pID0+IHtcblx0XHRcdFx0dGhpcy50b2tlbnMuYWRkKHRva2VuLnRyaW0oKSk7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2UgaWYgKGlzSXRlcmFibGUodmFsdWUpKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHRva2VuIG9mIHZhbHVlKSB7XG5cdFx0XHRcdHZhbGlkYXRlU3RyaW5nKHRva2VuKTtcblx0XHRcdFx0dGhpcy50b2tlbnMuYWRkKHRva2VuLnRyaW0oKSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ1bnN1cHBvcnRlZCB2YWx1ZVwiKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiByZW1vdmUgYWxsIHRva2Vuc1xuXHQgKlxuXHQgKiBAcmV0dXJuIHtUb2tlbkxpc3R9XG5cdCAqL1xuXHRjbGVhcigpIHtcblx0XHR0aGlzLnRva2Vucy5jbGVhcigpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgdG9rZW5cblx0ICpcblx0ICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3R5cGVzL3Rva2VubGlzdC00Lm1qc1xuXHQgKiBAcGFyYW0ge2FycmF5fHN0cmluZ3xpdGVyYXRhYmxlfSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHtUb2tlbkxpc3R9XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgdmFsdWVcblx0ICovXG5cdHJlbW92ZSh2YWx1ZSkge1xuXHRcdGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcblx0XHRcdHZhbHVlLnNwbGl0KFwiIFwiKS5mb3JFYWNoKCh0b2tlbikgPT4ge1xuXHRcdFx0XHR0aGlzLnRva2Vucy5kZWxldGUodG9rZW4udHJpbSgpKTtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSBpZiAoaXNJdGVyYWJsZSh2YWx1ZSkpIHtcblx0XHRcdGZvciAoY29uc3QgdG9rZW4gb2YgdmFsdWUpIHtcblx0XHRcdFx0dmFsaWRhdGVTdHJpbmcodG9rZW4pO1xuXHRcdFx0XHR0aGlzLnRva2Vucy5kZWxldGUodG9rZW4udHJpbSgpKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInVuc3VwcG9ydGVkIHZhbHVlXCIsIFwidHlwZXMvdG9rZW5saXN0Lm1qc1wiKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiB0aGlzIG1ldGhvZCByZXBsYWNlcyBhIHRva2VuIHdpdGggYSBuZXcgdG9rZW4uXG5cdCAqXG5cdCAqIGlmIHRoZSBwYXNzZWQgdG9rZW4gZXhpc3RzLCBpdCBpcyByZXBsYWNlZCB3aXRoIG5ld1Rva2VuIGFuZCBUb2tlbkxpc3QgaXMgcmV0dXJuZWQuXG5cdCAqIGlmIHRoZSB0b2tlbiBkb2VzIG5vdCBleGlzdCwgbmV3VG9rZW4gaXMgbm90IHNldCBhbmQgVG9rZW5MaXN0IGlzIHJldHVybmVkLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdG9rZW5cblx0ICogQHBhcmFtIHtzdHJpbmd9IG5ld1Rva2VuXG5cdCAqIEByZXR1cm4ge1Rva2VuTGlzdH1cblx0ICovXG5cdHJlcGxhY2UodG9rZW4sIG5ld1Rva2VuKSB7XG5cdFx0dmFsaWRhdGVTdHJpbmcodG9rZW4pO1xuXHRcdHZhbGlkYXRlU3RyaW5nKG5ld1Rva2VuKTtcblx0XHRpZiAoIXRoaXMuY29udGFpbnModG9rZW4pKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHRjb25zdCBhID0gQXJyYXkuZnJvbSh0aGlzLnRva2Vucyk7XG5cdFx0Y29uc3QgaSA9IGEuaW5kZXhPZih0b2tlbik7XG5cdFx0aWYgKGkgPT09IC0xKSByZXR1cm4gdGhpcztcblxuXHRcdGEuc3BsaWNlKGksIDEsIG5ld1Rva2VuKTtcblx0XHR0aGlzLnRva2VucyA9IG5ldyBTZXQoKTtcblx0XHR0aGlzLmFkZChhKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgdG9rZW4gZnJvbSBzdHJpbmcuIElmIHRva2VuIGRvZXNuJ3QgZXhpc3QgaXQncyBhZGRlZC5cblx0ICpcblx0ICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3R5cGVzL3Rva2VubGlzdC01Lm1qc1xuXHQgKiBAcGFyYW0ge2FycmF5fHN0cmluZ3xpdGVyYXRhYmxlfSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHZhbHVlXG5cdCAqL1xuXHR0b2dnbGUodmFsdWUpIHtcblx0XHRpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG5cdFx0XHR2YWx1ZS5zcGxpdChcIiBcIikuZm9yRWFjaCgodG9rZW4pID0+IHtcblx0XHRcdFx0dG9nZ2xlVmFsdWUuY2FsbCh0aGlzLCB0b2tlbik7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2UgaWYgKGlzSXRlcmFibGUodmFsdWUpKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHRva2VuIG9mIHZhbHVlKSB7XG5cdFx0XHRcdHRvZ2dsZVZhbHVlLmNhbGwodGhpcywgdG9rZW4pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlICE9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidW5zdXBwb3J0ZWQgdmFsdWVcIiwgXCJ0eXBlcy90b2tlbmxpc3QubWpzXCIpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIHJldHVybnMgYW4gYXJyYXkgd2l0aCBhbGwgdG9rZW5zXG5cdCAqXG5cdCAqIEByZXR1cm4ge2FycmF5fVxuXHQgKi9cblx0ZW50cmllcygpIHtcblx0XHRyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnRva2Vucyk7XG5cdH1cblxuXHQvKipcblx0ICogZXhlY3V0ZXMgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHdpdGggZWFjaCB2YWx1ZSBvZiB0aGUgc2V0XG5cdCAqXG5cdCAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG5cdCAqIEByZXR1cm4ge1Rva2VuTGlzdH1cblx0ICovXG5cdGZvckVhY2goY2FsbGJhY2spIHtcblx0XHR2YWxpZGF0ZUZ1bmN0aW9uKGNhbGxiYWNrKTtcblx0XHR0aGlzLnRva2Vucy5mb3JFYWNoKGNhbGxiYWNrKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiByZXR1cm5zIHRoZSBpbmRpdmlkdWFsIHRva2VucyBzZXBhcmF0ZWQgYnkgYSBibGFuayBjaGFyYWN0ZXJcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0dG9TdHJpbmcoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZW50cmllcygpLmpvaW4oXCIgXCIpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB0b2tlblxuICogQHJldHVybiB7dG9nZ2xlVmFsdWV9XG4gKiBAdGhyb3dzIHtFcnJvcn0gbXVzdCBiZSBjYWxsZWQgd2l0aCBUb2tlbkxpc3QuY2FsbFxuICovXG5mdW5jdGlvbiB0b2dnbGVWYWx1ZSh0b2tlbikge1xuXHRpZiAoISh0aGlzIGluc3RhbmNlb2YgVG9rZW5MaXN0KSlcblx0XHR0aHJvdyBFcnJvcihcIm11c3QgYmUgY2FsbGVkIHdpdGggVG9rZW5MaXN0LmNhbGxcIik7XG5cdHZhbGlkYXRlU3RyaW5nKHRva2VuKTtcblx0dG9rZW4gPSB0b2tlbi50cmltKCk7XG5cdGlmICh0aGlzLmNvbnRhaW5zKHRva2VuKSkge1xuXHRcdHRoaXMucmVtb3ZlKHRva2VuKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHR0aGlzLmFkZCh0b2tlbik7XG5cdHJldHVybiB0aGlzO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmV4cG9ydCB7XG5cdERFRkFVTFRfVEhFTUUsXG5cdEFUVFJJQlVURV9QUkVGSVgsXG5cdEFUVFJJQlVURV9PUFRJT05TLFxuXHRBVFRSSUJVVEVfT1BUSU9OU19TRUxFQ1RPUixcblx0QVRUUklCVVRFX1RIRU1FX1BSRUZJWCxcblx0QVRUUklCVVRFX1RIRU1FX05BTUUsXG5cdEFUVFJJQlVURV9VUERBVEVSX0FUVFJJQlVURVMsXG5cdEFUVFJJQlVURV9VUERBVEVSX1NFTEVDVF9USElTLFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9SRVBMQUNFLFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9JTlNFUlQsXG5cdEFUVFJJQlVURV9VUERBVEVSX0lOU0VSVF9SRUZFUkVOQ0UsXG5cdEFUVFJJQlVURV9VUERBVEVSX1JFTU9WRSxcblx0QVRUUklCVVRFX1VQREFURVJfQklORCxcblx0QVRUUklCVVRFX1VQREFURVJfQklORF9UWVBFLFxuXHRBVFRSSUJVVEVfVEVNUExBVEVfUFJFRklYLFxuXHRBVFRSSUJVVEVfUk9MRSxcblx0QVRUUklCVVRFX0RJU0FCTEVELFxuXHRBVFRSSUJVVEVfVkFMVUUsXG5cdEFUVFJJQlVURV9PQkpFQ1RMSU5LLFxuXHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRUQUdfU0NSSVBULFxuXHRUQUdfU1RZTEUsXG5cdFRBR19MSU5LLFxuXHRBVFRSSUJVVEVfSUQsXG5cdEFUVFJJQlVURV9DTEFTUyxcblx0QVRUUklCVVRFX1RJVExFLFxuXHRBVFRSSUJVVEVfU1JDLFxuXHRBVFRSSUJVVEVfSFJFRixcblx0QVRUUklCVVRFX1RZUEUsXG5cdEFUVFJJQlVURV9OT05DRSxcblx0QVRUUklCVVRFX1RSQU5TTEFURSxcblx0QVRUUklCVVRFX1RBQklOREVYLFxuXHRBVFRSSUJVVEVfU1BFTExDSEVDSyxcblx0QVRUUklCVVRFX1NMT1QsXG5cdEFUVFJJQlVURV9QQVJULFxuXHRBVFRSSUJVVEVfTEFORyxcblx0QVRUUklCVVRFX0lURU1UWVBFLFxuXHRBVFRSSUJVVEVfSVRFTVNDT1BFLFxuXHRBVFRSSUJVVEVfSVRFTVJFRixcblx0QVRUUklCVVRFX0lURU1JRCxcblx0QVRUUklCVVRFX0lURU1QUk9QLFxuXHRBVFRSSUJVVEVfSVMsXG5cdEFUVFJJQlVURV9JTlBVVE1PREUsXG5cdEFUVFJJQlVURV9BQ0NFU1NLRVksXG5cdEFUVFJJQlVURV9BVVRPQ0FQSVRBTElaRSxcblx0QVRUUklCVVRFX0FVVE9GT0NVUyxcblx0QVRUUklCVVRFX0NPTlRFTlRFRElUQUJMRSxcblx0QVRUUklCVVRFX0RJUixcblx0QVRUUklCVVRFX0RSQUdHQUJMRSxcblx0QVRUUklCVVRFX0VOVEVSS0VZSElOVCxcblx0QVRUUklCVVRFX0VYUE9SVFBBUlRTLFxuXHRBVFRSSUJVVEVfSElEREVOLFxuXHRBVFRSSUJVVEVfRk9STV9CSU5ELFxuXHRBVFRSSUJVVEVfRk9STV9CSU5EX1RZUEUsXG5cdG9iamVjdFVwZGF0ZXJMaW5rU3ltYm9sLFxuXHRjdXN0b21FbGVtZW50VXBkYXRlckxpbmtTeW1ib2wsXG5cdGluaXRDb250cm9sQ2FsbGJhY2tOYW1lLFxuXHRBVFRSSUJVVEVfU0NSSVBUX0hPU1QsXG5cdEFUVFJJQlVURV9JTklUX0NBTExCQUNLLFxufTtcblxuLyoqXG4gKiBkZWZhdWx0IHRoZW1lXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBERUZBVUxUX1RIRU1FID0gXCJtb25zdGVyXCI7XG5cbi8qKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9QUkVGSVggPSBcImRhdGEtbW9uc3Rlci1cIjtcblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgdG8gcGFzcyBvcHRpb25zIHRvIGEgY29udHJvbFxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfT1BUSU9OUyA9IGAke0FUVFJJQlVURV9QUkVGSVh9b3B0aW9uc2A7XG5cbi8qKlxuICogVGhpcyBpcyBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgdG8gcGFzcyB0aGUgc2NyaXB0IGhvc3QgdG8gYSBjb250cm9sXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMy40OC4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfU0NSSVBUX0hPU1QgPSBgJHtBVFRSSUJVVEVfUFJFRklYfXNjcmlwdC1ob3N0YDtcblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgdG8gcGFzcyBvcHRpb25zIHRvIGEgY29udHJvbFxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMzAuMFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX09QVElPTlNfU0VMRUNUT1IgPSBgJHtBVFRSSUJVVEVfUFJFRklYfW9wdGlvbnMtc2VsZWN0b3JgO1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSB0byBwYXNzIHRoZSBjYWxsYmFjayB0byBhIGNvbnRyb2xcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAzLjQ4LjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9JTklUX0NBTExCQUNLID0gYCR7QVRUUklCVVRFX1BSRUZJWH1pbml0LWNhbGxiYWNrYDtcblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBjYWxsYmFjayB0byBwYXNzIHRoZSBjYWxsYmFjayB0byBhIGNvbnRyb2xcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAzLjQ4LjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IGluaXRDb250cm9sQ2FsbGJhY2tOYW1lID0gYGluaXRDdXN0b21Db250cm9sQ2FsbGJhY2tgO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICovXG5jb25zdCBBVFRSSUJVVEVfVEhFTUVfUFJFRklYID0gYCR7QVRUUklCVVRFX1BSRUZJWH10aGVtZS1gO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9USEVNRV9OQU1FID0gYCR7QVRUUklCVVRFX1RIRU1FX1BSRUZJWH1uYW1lYDtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1VQREFURVJfQVRUUklCVVRFUyA9IGAke0FUVFJJQlVURV9QUkVGSVh9YXR0cmlidXRlc2A7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjcuMVxuICovXG5jb25zdCBBVFRSSUJVVEVfVVBEQVRFUl9TRUxFQ1RfVEhJUyA9IGAke0FUVFJJQlVURV9QUkVGSVh9c2VsZWN0LXRoaXNgO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICovXG5jb25zdCBBVFRSSUJVVEVfVVBEQVRFUl9SRVBMQUNFID0gYCR7QVRUUklCVVRFX1BSRUZJWH1yZXBsYWNlYDtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1VQREFURVJfSU5TRVJUID0gYCR7QVRUUklCVVRFX1BSRUZJWH1pbnNlcnRgO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICovXG5jb25zdCBBVFRSSUJVVEVfVVBEQVRFUl9JTlNFUlRfUkVGRVJFTkNFID0gYCR7QVRUUklCVVRFX1BSRUZJWH1pbnNlcnQtcmVmZXJlbmNlYDtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1VQREFURVJfUkVNT1ZFID0gYCR7QVRUUklCVVRFX1BSRUZJWH1yZW1vdmVgO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjkuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfVVBEQVRFUl9CSU5EID0gYCR7QVRUUklCVVRFX1BSRUZJWH1iaW5kYDtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMy43My4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9GT1JNX0JJTkQgPSBgJHtBVFRSSUJVVEVfUFJFRklYfWZvcm0tYmluZGA7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDMuNzMuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfRk9STV9CSU5EX1RZUEUgPSBgJHtBVFRSSUJVVEVfUFJFRklYfWZvcm0tYmluZC10eXBlYDtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS45LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1VQREFURVJfQklORF9UWVBFID0gYCR7QVRUUklCVVRFX1VQREFURVJfQklORH0tdHlwZWA7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjcuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfVEVNUExBVEVfUFJFRklYID0gYCR7QVRUUklCVVRFX1BSRUZJWH10ZW1wbGF0ZS1wcmVmaXhgO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjE0LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1JPTEUgPSBgJHtBVFRSSUJVVEVfUFJFRklYfXJvbGVgO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI0LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0RJU0FCTEVEID0gXCJkaXNhYmxlZFwiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI0LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1ZBTFVFID0gXCJ2YWx1ZVwiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjkuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfT0JKRUNUTElOSyA9IGAke0FUVFJJQlVURV9QUkVGSVh9b2JqZWN0bGlua2A7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjQuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFID0gYCR7QVRUUklCVVRFX1BSRUZJWH1lcnJvcmA7XG5cbi8qKlxuICogQHR5cGUge3N5bWJvbH1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjQuMFxuICovXG5jb25zdCBvYmplY3RVcGRhdGVyTGlua1N5bWJvbCA9IFN5bWJvbC5mb3IoXG5cdFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vQEBvYmplY3QtdXBkYXRlci1saW5rXCIsXG4pO1xuXG4vKipcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI0LjBcbiAqL1xuY29uc3QgY3VzdG9tRWxlbWVudFVwZGF0ZXJMaW5rU3ltYm9sID0gU3ltYm9sLmZvcihcblx0XCJAc2NodWthaS9tb25zdGVyL2RvbS9jdXN0b20tZWxlbWVudEBAb3B0aW9ucy11cGRhdGVyLWxpbmtcIixcbik7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBUQUdfU0NSSVBUID0gXCJzY3JpcHRcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IFRBR19TVFlMRSA9IFwic3R5bGVcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IFRBR19MSU5LID0gXCJsaW5rXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5cbmNvbnN0IEFUVFJJQlVURV9JRCA9IFwiaWRcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cblxuY29uc3QgQVRUUklCVVRFX0NMQVNTID0gXCJjbGFzc1wiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1RJVExFID0gXCJ0aXRsZVwiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1NSQyA9IFwic3JjXCI7XG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0hSRUYgPSBcImhyZWZcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9UWVBFID0gXCJ0eXBlXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfTk9OQ0UgPSBcIm5vbmNlXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfVFJBTlNMQVRFID0gXCJ0cmFuc2xhdGVcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9UQUJJTkRFWCA9IFwidGFiaW5kZXhcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9TUEVMTENIRUNLID0gXCJzcGVsbGNoZWNrXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfU0xPVCA9IFwic2xvdFwiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1BBUlQgPSBcInBhcnRcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9MQU5HID0gXCJsYW5nXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfSVRFTVRZUEUgPSBcIml0ZW10eXBlXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfSVRFTVNDT1BFID0gXCJpdGVtc2NvcGVcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9JVEVNUkVGID0gXCJpdGVtcmVmXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfSVRFTUlEID0gXCJpdGVtaWRcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9JVEVNUFJPUCA9IFwiaXRlbXByb3BcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9JUyA9IFwiaXNcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9JTlBVVE1PREUgPSBcImlucHV0bW9kZVwiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0FDQ0VTU0tFWSA9IFwiYWNjZXNza2V5XCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfQVVUT0NBUElUQUxJWkUgPSBcImF1dG9jYXBpdGFsaXplXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfQVVUT0ZPQ1VTID0gXCJhdXRvZm9jdXNcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9DT05URU5URURJVEFCTEUgPSBcImNvbnRlbnRlZGl0YWJsZVwiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0RJUiA9IFwiZGlyXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfRFJBR0dBQkxFID0gXCJkcmFnZ2FibGVcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9FTlRFUktFWUhJTlQgPSBcImVudGVya2V5aGludFwiO1xuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9FWFBPUlRQQVJUUyA9IFwiZXhwb3J0cGFydHNcIjtcbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfSElEREVOID0gXCJoaWRkZW5cIjtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBnZXRHbG9iYWxGdW5jdGlvbiB9IGZyb20gXCIuLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyBUb2tlbkxpc3QgfSBmcm9tIFwiLi4vdHlwZXMvdG9rZW5saXN0Lm1qc1wiO1xuaW1wb3J0IHtcblx0dmFsaWRhdGVJbnN0YW5jZSxcblx0dmFsaWRhdGVTdHJpbmcsXG5cdHZhbGlkYXRlU3ltYm9sLFxufSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfT0JKRUNUTElOSyB9IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHtcblx0ZmluZENsb3Nlc3RPYmplY3RMaW5rLFxuXHRhZGRUb09iamVjdExpbmssXG5cdHJlbW92ZU9iamVjdExpbmssXG5cdGhhc09iamVjdExpbmssXG5cdGdldExpbmtlZE9iamVjdHMsXG5cdHRvZ2dsZUF0dHJpYnV0ZVRva2VuLFxuXHRhZGRBdHRyaWJ1dGVUb2tlbixcblx0cmVtb3ZlQXR0cmlidXRlVG9rZW4sXG5cdGNvbnRhaW5zQXR0cmlidXRlVG9rZW4sXG5cdHJlcGxhY2VBdHRyaWJ1dGVUb2tlbixcblx0Y2xlYXJBdHRyaWJ1dGVUb2tlbnMsXG5cdGZpbmRDbG9zZXN0QnlBdHRyaWJ1dGUsXG5cdGZpbmRDbG9zZXN0QnlDbGFzcyxcbn07XG5cbi8qKlxuICogR2V0IHRoZSBjbG9zZXN0IG9iamVjdCBsaW5rIG9mIGEgbm9kZVxuICpcbiAqIGlmIGEgbm9kZSBpcyBzcGVjaWZpZWQgd2l0aG91dCBhIG9iamVjdCBsaW5rLCBhIHJlY3Vyc2l2ZSBzZWFyY2ggdXB3YXJkcyBpcyBwZXJmb3JtZWQgdW50aWwgdGhlIGNvcnJlc3BvbmRpbmdcbiAqIG9iamVjdCBsaW5rIGlzIGZvdW5kLCBvciB1bmRlZmluZWQgaXMgcmV0dXJuZWQuXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybiB7SFRNTEVsZW1lbnR8dW5kZWZpbmVkfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgSFRNTEVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gZmluZENsb3Nlc3RPYmplY3RMaW5rKGVsZW1lbnQpIHtcblx0cmV0dXJuIGZpbmRDbG9zZXN0QnlBdHRyaWJ1dGUoZWxlbWVudCwgQVRUUklCVVRFX09CSkVDVExJTkspO1xufVxuXG4vKipcbiAqIEFkZHMgYSBjbGFzcyBhdHRyaWJ1dGUgdG8gYW4gZWxlbWVudC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjkuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBwYXJhbSBlbGVtZW50XG4gKiBAcGFyYW0gc3ltYm9sXG4gKiBAcGFyYW0gb2JqZWN0XG4gKiBAcmV0dXJuIHsqfVxuICovXG5mdW5jdGlvbiBhZGRUb09iamVjdExpbmsoZWxlbWVudCwgc3ltYm9sLCBvYmplY3QpIHtcblx0dmFsaWRhdGVJbnN0YW5jZShlbGVtZW50LCBIVE1MRWxlbWVudCk7XG5cdHZhbGlkYXRlU3ltYm9sKHN5bWJvbCk7XG5cblx0aWYgKGVsZW1lbnQ/LltzeW1ib2xdID09PSB1bmRlZmluZWQpIHtcblx0XHRlbGVtZW50W3N5bWJvbF0gPSBuZXcgU2V0KCk7XG5cdH1cblxuXHRhZGRBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBBVFRSSUJVVEVfT0JKRUNUTElOSywgc3ltYm9sLnRvU3RyaW5nKCkpO1xuXHRlbGVtZW50W3N5bWJvbF0uYWRkKG9iamVjdCk7XG5cdHJldHVybiBlbGVtZW50O1xufVxuXG4vKipcbiAqIFJlbW92ZXMgYW4gb2JqZWN0IGZyb20gYW4gZWxlbWVudFxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtTeW1ib2x9IHN5bWJvbFxuICogQHJldHVybiB7Kn1cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlT2JqZWN0TGluayhlbGVtZW50LCBzeW1ib2wpIHtcblx0dmFsaWRhdGVJbnN0YW5jZShlbGVtZW50LCBIVE1MRWxlbWVudCk7XG5cdHZhbGlkYXRlU3ltYm9sKHN5bWJvbCk7XG5cblx0aWYgKGVsZW1lbnQ/LltzeW1ib2xdID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gZWxlbWVudDtcblx0fVxuXG5cdHJlbW92ZUF0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIEFUVFJJQlVURV9PQkpFQ1RMSU5LLCBzeW1ib2wudG9TdHJpbmcoKSk7XG5cdGRlbGV0ZSBlbGVtZW50W3N5bWJvbF07XG5cdHJldHVybiBlbGVtZW50O1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhbiBlbGVtZW50IGhhcyBhbiBvYmplY3QgbGlua1xuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtTeW1ib2x9IHN5bWJvbFxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaGFzT2JqZWN0TGluayhlbGVtZW50LCBzeW1ib2wpIHtcblx0dmFsaWRhdGVJbnN0YW5jZShlbGVtZW50LCBIVE1MRWxlbWVudCk7XG5cdHZhbGlkYXRlU3ltYm9sKHN5bWJvbCk7XG5cblx0aWYgKGVsZW1lbnQ/LltzeW1ib2xdID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gY29udGFpbnNBdHRyaWJ1dGVUb2tlbihcblx0XHRlbGVtZW50LFxuXHRcdEFUVFJJQlVURV9PQkpFQ1RMSU5LLFxuXHRcdHN5bWJvbC50b1N0cmluZygpLFxuXHQpO1xufVxuXG4vKipcbiAqIFRoZSBPYmplY3RMaW5rIGNhbiBiZSB1c2VkIHRvIGF0dGFjaCBvYmplY3RzIHRvIEhUTUxFbGVtZW50cy4gVGhlIGVsZW1lbnRzIGFyZSBrZXB0IGluIGEgc2V0IHVuZGVyIGEgdW5pcXVlXG4gKiBzeW1ib2wgYW5kIGNhbiBiZSByZWFkIHZpYSBhbiBpdGVyYXRvciB7QHNlZSB7QGxpbmsgZ2V0TGlua2VkT2JqZWN0c319LlxuICpcbiAqIEluIGFkZGl0aW9uLCBlbGVtZW50cyB3aXRoIGFuIG9iamVjdExpbmsgcmVjZWl2ZSB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb2JqZWN0bGlua2AuXG4gKlxuICogV2l0aCB0aGUgbWV0aG9kICB7QHNlZSB7QGxpbmsgYWRkVG9PYmplY3RMaW5rfX0gdGhlIG9iamVjdHMgY2FuIGJlIGFkZGVkLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtTeW1ib2x9IHN5bWJvbFxuICogQHJldHVybiB7SXRlcmF0b3J9XG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhlcmUgaXMgbm8gb2JqZWN0IGxpbmsgZm9yIHN5bWJvbFxuICovXG5mdW5jdGlvbiBnZXRMaW5rZWRPYmplY3RzKGVsZW1lbnQsIHN5bWJvbCkge1xuXHR2YWxpZGF0ZUluc3RhbmNlKGVsZW1lbnQsIEhUTUxFbGVtZW50KTtcblx0dmFsaWRhdGVTeW1ib2woc3ltYm9sKTtcblxuXHRpZiAoZWxlbWVudD8uW3N5bWJvbF0gPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihgdGhlcmUgaXMgbm8gb2JqZWN0IGxpbmsgZm9yICR7c3ltYm9sLnRvU3RyaW5nKCl9YCk7XG5cdH1cblxuXHRyZXR1cm4gZWxlbWVudD8uW3N5bWJvbF1bU3ltYm9sLml0ZXJhdG9yXSgpO1xufVxuXG4vKipcbiAqIFdpdGggdGhpcyBtZXRob2QgdG9rZW5zIGluIGFuIGF0dHJpYnV0ZSBjYW4gYmUgc3dpdGNoZWQgb24gb3Igb2ZmLiBGb3IgZXhhbXBsZSwgY2xhc3NlcyBjYW4gYmUgc3dpdGNoZWQgb24gYW5kIG9mZiBpbiB0aGUgZWxlbWVudHMgY2xhc3MgYXR0cmlidXRlLlxuICpcbiAqIFRva2VucyBhcmUgYWx3YXlzIHNlcGFyYXRlZCBieSBhIHNwYWNlLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICogQHBhcmFtIHtzdHJpbmd9IHRva2VuXG4gKiBAcmV0dXJuIHtIVE1MRWxlbWVudH1cbiAqL1xuZnVuY3Rpb24gdG9nZ2xlQXR0cmlidXRlVG9rZW4oZWxlbWVudCwga2V5LCB0b2tlbikge1xuXHR2YWxpZGF0ZUluc3RhbmNlKGVsZW1lbnQsIEhUTUxFbGVtZW50KTtcblx0dmFsaWRhdGVTdHJpbmcodG9rZW4pO1xuXHR2YWxpZGF0ZVN0cmluZyhrZXkpO1xuXG5cdGlmICghZWxlbWVudC5oYXNBdHRyaWJ1dGUoa2V5KSkge1xuXHRcdGVsZW1lbnQuc2V0QXR0cmlidXRlKGtleSwgdG9rZW4pO1xuXHRcdHJldHVybiBlbGVtZW50O1xuXHR9XG5cblx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUoXG5cdFx0a2V5LFxuXHRcdG5ldyBUb2tlbkxpc3QoZWxlbWVudC5nZXRBdHRyaWJ1dGUoa2V5KSkudG9nZ2xlKHRva2VuKS50b1N0cmluZygpLFxuXHQpO1xuXG5cdHJldHVybiBlbGVtZW50O1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIGFkZCBhIHRva2VuIHRvIGFuIGF0dHJpYnV0ZS4gVG9rZW5zIGFyZSBhbHdheXMgc2VwYXJhdGVkIGJ5IGEgc3BhY2UuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS45LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gdG9rZW5cbiAqIEByZXR1cm4ge0hUTUxFbGVtZW50fVxuICovXG5mdW5jdGlvbiBhZGRBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBrZXksIHRva2VuKSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgSFRNTEVsZW1lbnQpO1xuXHR2YWxpZGF0ZVN0cmluZyh0b2tlbik7XG5cdHZhbGlkYXRlU3RyaW5nKGtleSk7XG5cblx0aWYgKCFlbGVtZW50Lmhhc0F0dHJpYnV0ZShrZXkpKSB7XG5cdFx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUoa2V5LCB0b2tlbik7XG5cdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdH1cblxuXHRlbGVtZW50LnNldEF0dHJpYnV0ZShcblx0XHRrZXksXG5cdFx0bmV3IFRva2VuTGlzdChlbGVtZW50LmdldEF0dHJpYnV0ZShrZXkpKS5hZGQodG9rZW4pLnRvU3RyaW5nKCksXG5cdCk7XG5cblx0cmV0dXJuIGVsZW1lbnQ7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byByZW1vdmUgdG9rZW5zIGZyb20gYW4gYXR0cmlidXRlLlxuICpcbiAqIFRva2VucyBhcmUgYWx3YXlzIHNlcGFyYXRlZCBieSBhIHNwYWNlLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICogQHBhcmFtIHtzdHJpbmd9IHRva2VuXG4gKiBAcmV0dXJuIHtIVE1MRWxlbWVudH1cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQXR0cmlidXRlVG9rZW4oZWxlbWVudCwga2V5LCB0b2tlbikge1xuXHR2YWxpZGF0ZUluc3RhbmNlKGVsZW1lbnQsIEhUTUxFbGVtZW50KTtcblx0dmFsaWRhdGVTdHJpbmcodG9rZW4pO1xuXHR2YWxpZGF0ZVN0cmluZyhrZXkpO1xuXG5cdGlmICghZWxlbWVudC5oYXNBdHRyaWJ1dGUoa2V5KSkge1xuXHRcdHJldHVybiBlbGVtZW50O1xuXHR9XG5cblx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUoXG5cdFx0a2V5LFxuXHRcdG5ldyBUb2tlbkxpc3QoZWxlbWVudC5nZXRBdHRyaWJ1dGUoa2V5KSkucmVtb3ZlKHRva2VuKS50b1N0cmluZygpLFxuXHQpO1xuXG5cdHJldHVybiBlbGVtZW50O1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIGFuIGF0dHJpYnV0ZSBoYXMgYSB0b2tlbi5cbiAqXG4gKiBUb2tlbnMgYXJlIGFsd2F5cyBzZXBhcmF0ZWQgYnkgYSBzcGFjZS5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjkuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSB0b2tlblxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gY29udGFpbnNBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBrZXksIHRva2VuKSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgSFRNTEVsZW1lbnQpO1xuXHR2YWxpZGF0ZVN0cmluZyh0b2tlbik7XG5cdHZhbGlkYXRlU3RyaW5nKGtleSk7XG5cblx0aWYgKCFlbGVtZW50Lmhhc0F0dHJpYnV0ZShrZXkpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0cmV0dXJuIG5ldyBUb2tlbkxpc3QoZWxlbWVudC5nZXRBdHRyaWJ1dGUoa2V5KSkuY29udGFpbnModG9rZW4pO1xufVxuXG4vKipcbiAqIFRva2VucyBhcmUgYWx3YXlzIHNlcGFyYXRlZCBieSBhIHNwYWNlLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICogQHBhcmFtIHtzdHJpbmd9IGZyb21cbiAqIEBwYXJhbSB7c3RyaW5nfSB0b1xuICogQHJldHVybiB7SFRNTEVsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIHJlcGxhY2VBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBrZXksIGZyb20sIHRvKSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgSFRNTEVsZW1lbnQpO1xuXHR2YWxpZGF0ZVN0cmluZyhmcm9tKTtcblx0dmFsaWRhdGVTdHJpbmcodG8pO1xuXHR2YWxpZGF0ZVN0cmluZyhrZXkpO1xuXG5cdGlmICghZWxlbWVudC5oYXNBdHRyaWJ1dGUoa2V5KSkge1xuXHRcdHJldHVybiBlbGVtZW50O1xuXHR9XG5cblx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUoXG5cdFx0a2V5LFxuXHRcdG5ldyBUb2tlbkxpc3QoZWxlbWVudC5nZXRBdHRyaWJ1dGUoa2V5KSkucmVwbGFjZShmcm9tLCB0bykudG9TdHJpbmcoKSxcblx0KTtcblxuXHRyZXR1cm4gZWxlbWVudDtcbn1cblxuLyoqXG4gKiBUb2tlbnMgYXJlIGFsd2F5cyBzZXBhcmF0ZWQgYnkgYSBzcGFjZS5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjkuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqIEByZXR1cm4ge0hUTUxFbGVtZW50fVxuICovXG5mdW5jdGlvbiBjbGVhckF0dHJpYnV0ZVRva2VucyhlbGVtZW50LCBrZXkpIHtcblx0dmFsaWRhdGVJbnN0YW5jZShlbGVtZW50LCBIVE1MRWxlbWVudCk7XG5cdHZhbGlkYXRlU3RyaW5nKGtleSk7XG5cblx0aWYgKCFlbGVtZW50Lmhhc0F0dHJpYnV0ZShrZXkpKSB7XG5cdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdH1cblxuXHRlbGVtZW50LnNldEF0dHJpYnV0ZShrZXksIFwiXCIpO1xuXG5cdHJldHVybiBlbGVtZW50O1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gc2VhcmNoZXMsIHN0YXJ0aW5nIGZyb20gYW4gYEhUTUxFbGVtZW1lbnRgLCBmb3IgdGhlIG5leHQgZWxlbWVudCB0aGF0IGhhcyBhIGNlcnRhaW4gYXR0cmlidXRlLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxkaXYgZGF0YS1teS1hdHRyaWJ1dGU9XCIyXCIgaWQ9XCIyXCI+XG4gKiAgICAgPGRpdiBpZD1cIjFcIj48L2Rpdj5cbiAqIDwvZGl2PlxuICogYGBgXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogLy8gaWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkICh1bmRlZmluZWQpLCB0aGVuIG9ubHkgdGhlIGF0dHJpYnV0ZSBpcyBjaGVja2VkLlxuICogZmluZENsb3Nlc3RCeUF0dHJpYnV0ZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnMScpLCdkYXRhLW15LWF0dHJpYnV0ZScpOyAvLyBcdTIxQTYgbm9kZSB3aXRoIGlkIDJcbiAqIGZpbmRDbG9zZXN0QnlBdHRyaWJ1dGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJzInKSwnZGF0YS1teS1hdHRyaWJ1dGUnKTsgLy8gXHUyMUE2IG5vZGUgd2l0aCBpZCAyXG4gKlxuICogLy8gaWYgYSB2YWx1ZSBpcyBzcGVjaWZpZWQsIGZvciBleGFtcGxlIGFuIGVtcHR5IHN0cmluZywgdGhlbiB0aGUgbmFtZSBhbmQgdGhlIHZhbHVlIGFyZSBjaGVja2VkLlxuICogZmluZENsb3Nlc3RCeUF0dHJpYnV0ZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnMScpLCdkYXRhLW15LWF0dHJpYnV0ZScsICcnKTsgIC8vIFx1MjFBNiB1bmRlZmluZWRcbiAqIGZpbmRDbG9zZXN0QnlBdHRyaWJ1dGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJzEnKSwnZGF0YS1teS1hdHRyaWJ1dGUnLCAnMicpOyAvLyBcdTIxQTYgbm9kZSB3aXRoIGlkIDJcbiAqIGBgYFxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTQuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gdmFsdWVcbiAqIEByZXR1cm4ge0hUTUxFbGVtZW50fHVuZGVmaW5lZH1cbiAqIEBzdW1tYXJ5IGZpbmQgY2xvc2VzdCBub2RlXG4gKi9cbmZ1bmN0aW9uIGZpbmRDbG9zZXN0QnlBdHRyaWJ1dGUoZWxlbWVudCwga2V5LCB2YWx1ZSkge1xuXHR2YWxpZGF0ZUluc3RhbmNlKGVsZW1lbnQsIGdldEdsb2JhbEZ1bmN0aW9uKFwiSFRNTEVsZW1lbnRcIikpO1xuXG5cdGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZShrZXkpKSB7XG5cdFx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiBlbGVtZW50O1xuXHRcdH1cblxuXHRcdGlmIChlbGVtZW50LmdldEF0dHJpYnV0ZShrZXkpID09PSB2YWx1ZSkge1xuXHRcdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdFx0fVxuXHR9XG5cblx0bGV0IHNlbGVjdG9yID0gdmFsaWRhdGVTdHJpbmcoa2V5KTtcblx0aWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHNlbGVjdG9yICs9IGA9JHt2YWxpZGF0ZVN0cmluZyh2YWx1ZSl9YDtcblx0Y29uc3QgcmVzdWx0ID0gZWxlbWVudC5jbG9zZXN0KGBbJHtzZWxlY3Rvcn1dYCk7XG5cdGlmIChyZXN1bHQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHNlYXJjaGVzLCBzdGFydGluZyBmcm9tIGFuIGBIVE1MRWxlbWVudGAsIGZvciB0aGUgbmV4dCBlbGVtZW50IHRoYXQgaGFzIGEgY2VydGFpbiBhdHRyaWJ1dGUuXG4gKlxuICogYGBgaHRtbFxuICogPGRpdiBjbGFzcz1cIm15Y2xhc3NcIiBpZD1cIjJcIj5cbiAqICAgICA8ZGl2IGlkPVwiMVwiPjwvZGl2PlxuICogPC9kaXY+XG4gKiBgYGBcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiAvLyBpZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQgKHVuZGVmaW5lZCksIHRoZW4gb25seSB0aGUgYXR0cmlidXRlIGlzIGNoZWNrZWQuXG4gKiBmaW5kQ2xvc2VzdEJ5Q2xhc3MoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJzEnKSwnbXljbGFzcycpOyAvLyBcdTIxQTYgbm9kZSB3aXRoIGlkIDJcbiAqIGZpbmRDbG9zZXN0QnlDbGFzcyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnMicpLCdteWNsYXNzJyk7IC8vIFx1MjFBNiBub2RlIHdpdGggaWQgMlxuICogYGBgXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7ZmluZENsb3Nlc3RCeUNsYXNzfSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS9kb20vYXR0cmlidXRlcy5tanMnO1xuICogZmluZENsb3Nlc3RCeUNsYXNzKCk7XG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjcuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc05hbWVcbiAqIEByZXR1cm4ge0hUTUxFbGVtZW50fHVuZGVmaW5lZH1cbiAqIEBzdW1tYXJ5IGZpbmQgY2xvc2VzdCBub2RlXG4gKi9cbmZ1bmN0aW9uIGZpbmRDbG9zZXN0QnlDbGFzcyhlbGVtZW50LCBjbGFzc05hbWUpIHtcblx0dmFsaWRhdGVJbnN0YW5jZShlbGVtZW50LCBnZXRHbG9iYWxGdW5jdGlvbihcIkhUTUxFbGVtZW50XCIpKTtcblxuXHRpZiAoZWxlbWVudD8uY2xhc3NMaXN0Py5jb250YWlucyh2YWxpZGF0ZVN0cmluZyhjbGFzc05hbWUpKSkge1xuXHRcdHJldHVybiBlbGVtZW50O1xuXHR9XG5cblx0Y29uc3QgcmVzdWx0ID0gZWxlbWVudC5jbG9zZXN0KGAuJHtjbGFzc05hbWV9YCk7XG5cdGlmIChyZXN1bHQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGdldEdsb2JhbCB9IGZyb20gXCIuLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHtcblx0Z2V0RG9jdW1lbnQsXG5cdGdldFdpbmRvdyxcblx0Z2V0RG9jdW1lbnRGcmFnbWVudEZyb21TdHJpbmcsXG5cdGZpbmRFbGVtZW50V2l0aElkVXB3YXJkcyxcblx0Z2V0Q29udGFpbmluZ0RvY3VtZW50LFxuXHRnZXRSZWdpc3RlcmVkQ3VzdG9tRWxlbWVudHMsXG5cdGZpbmRFbGVtZW50V2l0aFNlbGVjdG9yVXB3YXJkcyxcbn07XG5cbi8qKlxuICogVGhpcyBtZXRob2QgZmV0Y2hlcyB0aGUgZG9jdW1lbnQgb2JqZWN0XG4gKlxuICogSW4gbm9kZWpzIHRoaXMgZnVuY3Rpb25hbGl0eSBjYW4gYmUgcGVyZm9ybWVkIHdpdGggW2pzZG9tXShodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9qc2RvbSkuXG4gKlxuICogYGBgXG4gKiBpbXBvcnQge0pTRE9NfSBmcm9tIFwianNkb21cIlxuICogaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwib2JqZWN0XCIpIHtcbiAqICAgIGNvbnN0IHt3aW5kb3d9ID0gbmV3IEpTRE9NKCcnLCB7XG4gKiAgICAgICAgdXJsOiAnaHR0cDovL2V4YW1wbGUuY29tLycsXG4gKiAgICAgICAgcHJldGVuZFRvQmVWaXN1YWw6IHRydWVcbiAqICAgIH0pO1xuICpcbiAqICAgIFtcbiAqICAgICAgICAnc2VsZicsXG4gKiAgICAgICAgJ2RvY3VtZW50JyxcbiAqICAgICAgICAnRG9jdW1lbnQnLFxuICogICAgICAgICdOb2RlJyxcbiAqICAgICAgICAnRWxlbWVudCcsXG4gKiAgICAgICAgJ0hUTUxFbGVtZW50JyxcbiAqICAgICAgICAnRG9jdW1lbnRGcmFnbWVudCcsXG4gKiAgICAgICAgJ0RPTVBhcnNlcicsXG4gKiAgICAgICAgJ1hNTFNlcmlhbGl6ZXInLFxuICogICAgICAgICdOb2RlRmlsdGVyJyxcbiAqICAgICAgICAnSW5wdXRFdmVudCcsXG4gKiAgICAgICAgJ0N1c3RvbUV2ZW50J1xuICogICAgXS5mb3JFYWNoKGtleSA9PiAoZ2V0R2xvYmFsKClba2V5XSA9IHdpbmRvd1trZXldKSk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjYuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEB0aHJvd3Mge0Vycm9yfSBub3Qgc3VwcG9ydGVkIGVudmlyb25tZW50XG4gKi9cbmZ1bmN0aW9uIGdldERvY3VtZW50KCkge1xuXHRjb25zdCBkb2N1bWVudCA9IGdldEdsb2JhbCgpPy5bXCJkb2N1bWVudFwiXTtcblx0aWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gXCJvYmplY3RcIikge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vdCBzdXBwb3J0ZWQgZW52aXJvbm1lbnRcIik7XG5cdH1cblxuXHRyZXR1cm4gZG9jdW1lbnQ7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgZmV0Y2hlcyB0aGUgd2luZG93IG9iamVjdFxuICpcbiAqIEluIG5vZGVqcyB0aGlzIGZ1bmN0aW9uYWxpdHkgY2FuIGJlIHBlcmZvcm1lZCB3aXRoIFtqc2RvbV0oaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvanNkb20pLlxuICpcbiAqIGBgYFxuICogaW1wb3J0IHtKU0RPTX0gZnJvbSBcImpzZG9tXCJcbiAqIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcIm9iamVjdFwiKSB7XG4gKiAgICBjb25zdCB7d2luZG93fSA9IG5ldyBKU0RPTSgnJywge1xuICogICAgICAgIHVybDogJ2h0dHA6Ly9leGFtcGxlLmNvbS8nLFxuICogICAgICAgIHByZXRlbmRUb0JlVmlzdWFsOiB0cnVlXG4gKiAgICB9KTtcbiAqXG4gKiAgICBnZXRHbG9iYWwoKVsnd2luZG93J109d2luZG93O1xuICpcbiAqICAgIFtcbiAqICAgICAgICAnc2VsZicsXG4gKiAgICAgICAgJ2RvY3VtZW50JyxcbiAqICAgICAgICAnRG9jdW1lbnQnLFxuICogICAgICAgICdOb2RlJyxcbiAqICAgICAgICAnRWxlbWVudCcsXG4gKiAgICAgICAgJ0hUTUxFbGVtZW50JyxcbiAqICAgICAgICAnRG9jdW1lbnRGcmFnbWVudCcsXG4gKiAgICAgICAgJ0RPTVBhcnNlcicsXG4gKiAgICAgICAgJ1hNTFNlcmlhbGl6ZXInLFxuICogICAgICAgICdOb2RlRmlsdGVyJyxcbiAqICAgICAgICAnSW5wdXRFdmVudCcsXG4gKiAgICAgICAgJ0N1c3RvbUV2ZW50J1xuICogICAgXS5mb3JFYWNoKGtleSA9PiAoZ2V0R2xvYmFsKClba2V5XSA9IHdpbmRvd1trZXldKSk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjYuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEB0aHJvd3Mge0Vycm9yfSBub3Qgc3VwcG9ydGVkIGVudmlyb25tZW50XG4gKi9cbmZ1bmN0aW9uIGdldFdpbmRvdygpIHtcblx0Y29uc3Qgd2luZG93ID0gZ2V0R2xvYmFsKCk/LltcIndpbmRvd1wiXTtcblx0aWYgKHR5cGVvZiB3aW5kb3cgIT09IFwib2JqZWN0XCIpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJub3Qgc3VwcG9ydGVkIGVudmlyb25tZW50XCIpO1xuXHR9XG5cblx0cmV0dXJuIHdpbmRvdztcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBmZXRjaGVzIHRoZSBkb2N1bWVudCBvYmplY3RcbiAqXG4gKiBJbiBub2RlanMgdGhpcyBmdW5jdGlvbmFsaXR5IGNhbiBiZSBwZXJmb3JtZWQgd2l0aCBbanNkb21dKGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2pzZG9tKS5cbiAqXG4gKiBgYGBcbiAqIGltcG9ydCB7SlNET019IGZyb20gXCJqc2RvbVwiXG4gKiBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJvYmplY3RcIikge1xuICogICAgY29uc3Qge3dpbmRvd30gPSBuZXcgSlNET00oJycsIHtcbiAqICAgICAgICB1cmw6ICdodHRwOi8vZXhhbXBsZS5jb20vJyxcbiAqICAgICAgICBwcmV0ZW5kVG9CZVZpc3VhbDogdHJ1ZVxuICogICAgfSk7XG4gKlxuICogICAgW1xuICogICAgICAgICdzZWxmJyxcbiAqICAgICAgICAnZG9jdW1lbnQnLFxuICogICAgICAgICdEb2N1bWVudCcsXG4gKiAgICAgICAgJ05vZGUnLFxuICogICAgICAgICdFbGVtZW50JyxcbiAqICAgICAgICAnSFRNTEVsZW1lbnQnLFxuICogICAgICAgICdEb2N1bWVudEZyYWdtZW50JyxcbiAqICAgICAgICAnRE9NUGFyc2VyJyxcbiAqICAgICAgICAnWE1MU2VyaWFsaXplcicsXG4gKiAgICAgICAgJ05vZGVGaWx0ZXInLFxuICogICAgICAgICdJbnB1dEV2ZW50JyxcbiAqICAgICAgICAnQ3VzdG9tRXZlbnQnXG4gKiAgICBdLmZvckVhY2goa2V5ID0+IChnZXRHbG9iYWwoKVtrZXldID0gd2luZG93W2tleV0pKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEByZXR1cm4ge0RvY3VtZW50RnJhZ21lbnR9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjYuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEB0aHJvd3Mge0Vycm9yfSBub3Qgc3VwcG9ydGVkIGVudmlyb25tZW50XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuICovXG5mdW5jdGlvbiBnZXREb2N1bWVudEZyYWdtZW50RnJvbVN0cmluZyhodG1sKSB7XG5cdHZhbGlkYXRlU3RyaW5nKGh0bWwpO1xuXG5cdGNvbnN0IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcblx0Y29uc3QgdGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGVtcGxhdGVcIik7XG5cdHRlbXBsYXRlLmlubmVySFRNTCA9IGh0bWw7XG5cblx0cmV0dXJuIHRlbXBsYXRlLmNvbnRlbnQ7XG59XG5cbi8qKlxuICogUmVjdXJzaXZlbHkgc2VhcmNoZXMgdXB3YXJkcyBmcm9tIGEgZ2l2ZW4gZWxlbWVudCB0byBmaW5kIGFuIGFuY2VzdG9yIGVsZW1lbnRcbiAqIHdpdGggYSBzcGVjaWZpZWQgSUQsIGNvbnNpZGVyaW5nIGJvdGggbm9ybWFsIERPTSBhbmQgc2hhZG93IERPTS5cbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fFNoYWRvd1Jvb3R9IGVsZW1lbnQgLSBUaGUgc3RhcnRpbmcgZWxlbWVudCBvciBzaGFkb3cgcm9vdCB0byBzZWFyY2ggZnJvbS5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0YXJnZXRJZCAtIFRoZSBJRCBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQgdG8gZmluZC5cbiAqIEByZXR1cm4ge0hUTUxFbGVtZW50fG51bGx9IC0gVGhlIGFuY2VzdG9yIGVsZW1lbnQgd2l0aCB0aGUgc3BlY2lmaWVkIElELCBvciBudWxsIGlmIG5vdCBmb3VuZC5cbiAqIEBzaW5jZSAzLjI5LjBcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuZnVuY3Rpb24gZmluZEVsZW1lbnRXaXRoSWRVcHdhcmRzKGVsZW1lbnQsIHRhcmdldElkKSB7XG5cdGlmICghZWxlbWVudCkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Ly8gQ2hlY2sgaWYgdGhlIGN1cnJlbnQgZWxlbWVudCBoYXMgdGhlIHRhcmdldCBJRFxuXHRpZiAoZWxlbWVudC5pZCA9PT0gdGFyZ2V0SWQpIHtcblx0XHRyZXR1cm4gZWxlbWVudDtcblx0fVxuXG5cdC8vIFNlYXJjaCB3aXRoaW4gdGhlIGN1cnJlbnQgZWxlbWVudCdzIHNoYWRvdyByb290LCBpZiBpdCBleGlzdHNcblx0aWYgKGVsZW1lbnQuc2hhZG93Um9vdCkge1xuXHRcdGNvbnN0IHRhcmdldCA9IGVsZW1lbnQuc2hhZG93Um9vdC5nZXRFbGVtZW50QnlJZCh0YXJnZXRJZCk7XG5cdFx0aWYgKHRhcmdldCkge1xuXHRcdFx0cmV0dXJuIHRhcmdldDtcblx0XHR9XG5cdH1cblxuXHQvLyBJZiB0aGUgY3VycmVudCBlbGVtZW50IGlzIHRoZSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIHNlYXJjaCB3aXRoaW4gdGhlIG1haW4gZG9jdW1lbnRcblx0aWYgKGVsZW1lbnQgPT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCB8fCBlbGVtZW50ID09PSBkb2N1bWVudCkge1xuXHRcdGNvbnN0IHRhcmdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhcmdldElkKTtcblx0XHRpZiAodGFyZ2V0KSB7XG5cdFx0XHRyZXR1cm4gdGFyZ2V0O1xuXHRcdH1cblx0fVxuXG5cdC8vIElmIHRoZSBjdXJyZW50IGVsZW1lbnQgaXMgaW5zaWRlIGEgc2hhZG93IHJvb3QsIHNlYXJjaCBpdHMgaG9zdCdzIGFuY2VzdG9yc1xuXHRjb25zdCByb290Tm9kZSA9IGVsZW1lbnQuZ2V0Um9vdE5vZGUoKTtcblx0aWYgKHJvb3ROb2RlICYmIHJvb3ROb2RlIGluc3RhbmNlb2YgU2hhZG93Um9vdCkge1xuXHRcdHJldHVybiBmaW5kRWxlbWVudFdpdGhJZFVwd2FyZHMocm9vdE5vZGUuaG9zdCwgdGFyZ2V0SWQpO1xuXHR9XG5cblx0Ly8gT3RoZXJ3aXNlLCBzZWFyY2ggdGhlIGN1cnJlbnQgZWxlbWVudCdzIHBhcmVudFxuXHRyZXR1cm4gZmluZEVsZW1lbnRXaXRoSWRVcHdhcmRzKGVsZW1lbnQucGFyZW50RWxlbWVudCwgdGFyZ2V0SWQpO1xufVxuXG4vKipcbiAqIFJlY3Vyc2l2ZWx5IHNlYXJjaGVzIHVwd2FyZHMgZnJvbSBhIGdpdmVuIGVsZW1lbnQgdG8gZmluZCBhbiBhbmNlc3RvciBlbGVtZW50XG4gKiB3aXRoIGEgc3BlY2lmaWVkIHNlbGVjdG9yLCBjb25zaWRlcmluZyBib3RoIG5vcm1hbCBET00gYW5kIHNoYWRvdyBET00uXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VmdWwgZm9yIGZpbmRpbmcgYSBwYXJlbnQgZWxlbWVudCB3aXRoIGEgc3BlY2lmaWMgY2xhc3MuXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudHxTaGFkb3dSb290fSBlbGVtZW50IC0gVGhlIHN0YXJ0aW5nIGVsZW1lbnQgb3Igc2hhZG93IHJvb3QgdG8gc2VhcmNoIGZyb20uXG4gKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBUaGUgc2VsZWN0b3Igb2YgdGhlIHRhcmdldCBlbGVtZW50IHRvIGZpbmQuXG4gKiBAcmV0dXJuIHtIVE1MRWxlbWVudHxudWxsfSAtIFRoZSBhbmNlc3RvciBlbGVtZW50IHdpdGggdGhlIHNwZWNpZmllZCBzZWxlY3Rvciwgb3IgbnVsbCBpZiBub3QgZm91bmQuXG4gKiBAc2luY2UgMy41NS4wXG4gKi9cbmZ1bmN0aW9uIGZpbmRFbGVtZW50V2l0aFNlbGVjdG9yVXB3YXJkcyhlbGVtZW50LCBzZWxlY3Rvcikge1xuXHRpZiAoIWVsZW1lbnQgfHwgIXNlbGVjdG9yKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvLyBTZWFyY2ggd2l0aGluIHRoZSBjdXJyZW50IGVsZW1lbnQncyBzaGFkb3cgcm9vdCwgaWYgaXQgZXhpc3RzXG5cdGlmIChlbGVtZW50LnNoYWRvd1Jvb3QpIHtcblx0XHRjb25zdCB0YXJnZXQgPSBlbGVtZW50LnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG5cdFx0aWYgKHRhcmdldCkge1xuXHRcdFx0cmV0dXJuIHRhcmdldDtcblx0XHR9XG5cdH1cblxuXHRpZiAoZWxlbWVudCA9PT0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG5cdFx0Y29uc3QgdGFyZ2V0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG5cdFx0aWYgKHRhcmdldCkge1xuXHRcdFx0cmV0dXJuIHRhcmdldDtcblx0XHR9XG5cdH1cblxuXHQvLyBJZiB0aGUgY3VycmVudCBlbGVtZW50IGlzIGluc2lkZSBhIHNoYWRvdyByb290LCBzZWFyY2ggaXRzIGhvc3QncyBhbmNlc3RvcnNcblx0Y29uc3Qgcm9vdE5vZGUgPSBlbGVtZW50LmdldFJvb3ROb2RlKCk7XG5cdGlmIChyb290Tm9kZSAmJiByb290Tm9kZSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpIHtcblx0XHRyZXR1cm4gZmluZEVsZW1lbnRXaXRoU2VsZWN0b3JVcHdhcmRzKHJvb3ROb2RlLmhvc3QsIHNlbGVjdG9yKTtcblx0fVxuXG5cdC8vIE90aGVyd2lzZSwgc2VhcmNoIHRoZSBjdXJyZW50IGVsZW1lbnQncyBwYXJlbnRcblx0cmV0dXJuIGZpbmRFbGVtZW50V2l0aFNlbGVjdG9yVXB3YXJkcyhlbGVtZW50LnBhcmVudEVsZW1lbnQsIHNlbGVjdG9yKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybiB7SFRNTEVsZW1lbnR8bnVsbH1cbiAqL1xuZnVuY3Rpb24gdHJhdmVyc2VTaGFkb3dSb290cyhlbGVtZW50KSB7XG5cdGxldCBjdXJyZW50Um9vdCA9IGVsZW1lbnQuc2hhZG93Um9vdDtcblx0bGV0IGN1cnJlbnRQYXJlbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XG5cblx0d2hpbGUgKFxuXHRcdGN1cnJlbnRQYXJlbnQgJiZcblx0XHRjdXJyZW50UGFyZW50Lm5vZGVUeXBlICE9PSBOb2RlLkRPQ1VNRU5UX05PREUgJiZcblx0XHRjdXJyZW50UGFyZW50Lm5vZGVUeXBlICE9PSBOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREVcblx0KSB7XG5cdFx0aWYgKGN1cnJlbnRSb290ICYmIGN1cnJlbnRSb290LnBhcmVudE5vZGUpIHtcblx0XHRcdGN1cnJlbnRQYXJlbnQgPSBjdXJyZW50Um9vdC5wYXJlbnROb2RlO1xuXHRcdFx0Y3VycmVudFJvb3QgPSBjdXJyZW50UGFyZW50LnNoYWRvd1Jvb3Q7XG5cdFx0fSBlbHNlIGlmIChjdXJyZW50UGFyZW50LnBhcmVudE5vZGUpIHtcblx0XHRcdGN1cnJlbnRQYXJlbnQgPSBjdXJyZW50UGFyZW50LnBhcmVudE5vZGU7XG5cdFx0XHRjdXJyZW50Um9vdCA9IG51bGw7XG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdGN1cnJlbnRSb290ICYmXG5cdFx0XHRjdXJyZW50Um9vdC5ob3N0ICYmXG5cdFx0XHRjdXJyZW50Um9vdC5ob3N0Lm5vZGVUeXBlID09PSBOb2RlLkRPQ1VNRU5UX05PREVcblx0XHQpIHtcblx0XHRcdGN1cnJlbnRQYXJlbnQgPSBjdXJyZW50Um9vdC5ob3N0O1xuXHRcdFx0Y3VycmVudFJvb3QgPSBudWxsO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjdXJyZW50UGFyZW50ID0gbnVsbDtcblx0XHRcdGN1cnJlbnRSb290ID0gbnVsbDtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gY3VycmVudFBhcmVudDtcbn1cblxuLyoqXG4gKiBSZWN1cnNpdmVseSBzZWFyY2hlcyB1cHdhcmRzIGZyb20gYSBnaXZlbiBlbGVtZW50IHRvIGZpbmQgYW4gYW5jZXN0b3IgZWxlbWVudFxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm4geyp9XG4gKiBAdGhyb3dzIHtFcnJvcn0gSW52YWxpZCBhcmd1bWVudC4gRXhwZWN0ZWQgYW4gSFRNTEVsZW1lbnQuXG4gKiBAc2luY2UgMy4zNi4wXG4gKi9cbmZ1bmN0aW9uIGdldENvbnRhaW5pbmdEb2N1bWVudChlbGVtZW50KSB7XG5cdGlmIChcblx0XHQhZWxlbWVudCB8fFxuXHRcdCEoXG5cdFx0XHRlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgfHxcblx0XHRcdGVsZW1lbnQgaW5zdGFuY2VvZiBlbGVtZW50Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuSFRNTEVsZW1lbnRcblx0XHQpXG5cdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYXJndW1lbnQuIEV4cGVjdGVkIGFuIEhUTUxFbGVtZW50LlwiKTtcblx0fVxuXG5cdHJldHVybiB0cmF2ZXJzZVNoYWRvd1Jvb3RzKGVsZW1lbnQpIHx8IG51bGw7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGxpc3Qgb2YgYWxsIHJlZ2lzdGVyZWQgY3VzdG9tIGVsZW1lbnRzIGluIHRoZSBjdXJyZW50IGRvY3VtZW50LlxuICpcbiAqIEByZXR1cm4ge3N0cmluZ1tdfVxuICogQHNpbmNlIDQuMC4wXG4gKiBAcmV0dXJuIHtzdHJpbmdbXX1cbiAqL1xuZnVuY3Rpb24gZ2V0UmVnaXN0ZXJlZEN1c3RvbUVsZW1lbnRzKCkge1xuXHRjb25zdCBjdXN0b21FbGVtZW50VGFncyA9IEFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIipcIikpXG5cdFx0Lm1hcCgodGFnKSA9PiB0YWcudGFnTmFtZS50b0xvd2VyQ2FzZSgpKVxuXHRcdC5maWx0ZXIoKHRhZ05hbWUpID0+IHRhZ05hbWUuaW5jbHVkZXMoXCItXCIpICYmIGN1c3RvbUVsZW1lbnRzLmdldCh0YWdOYW1lKSk7XG5cblx0cmV0dXJuIEFycmF5LmZyb20obmV3IFNldChjdXN0b21FbGVtZW50VGFncykpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGdldEdsb2JhbCB9IGZyb20gXCIuLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyBpc0FycmF5LCBpc0Z1bmN0aW9uLCBpc09iamVjdCwgaXNQcmltaXRpdmUgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyB0eXBlT2YgfSBmcm9tIFwiLi4vdHlwZXMvdHlwZW9mLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVPYmplY3QgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IGNsb25lIH07XG5cbi8qKlxuICogV2l0aCB0aGlzIGZ1bmN0aW9uLCBvYmplY3RzIGNhbiBiZSBjbG9uZWQuXG4gKiBUaGUgZW50aXJlIG9iamVjdCB0cmVlIGlzIHJ1biB0aHJvdWdoLlxuICpcbiAqIFByb3h5LCBFbGVtZW50LCBIVE1MRG9jdW1lbnQgYW5kIERvY3VtZW50RnJhZ21lbnQgaW5zdGFuY2VzIGFyZSBub3QgY2xvbmVkLlxuICogR2xvYmFsIG9iamVjdHMgc3VjaCBhcyB3aW5kb3dzIGFyZSBhbHNvIG5vdCBjbG9uZWQsXG4gKlxuICogSWYgYW4gb2JqZWN0IGhhcyBhIG1ldGhvZCBgZ2V0Q2xvbmUoKWAsIHRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gY3JlYXRlIHRoZSBjbG9uZS5cbiAqXG4gKiBAcGFyYW0geyp9IG9iaiBvYmplY3QgdG8gYmUgY2xvbmVkXG4gKiBAcmV0dXJuIHsqfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5hYmxlIHRvIGNsb25lIG9iaiEgaXRzIHR5cGUgaXNuJ3Qgc3VwcG9ydGVkLlxuICovXG5mdW5jdGlvbiBjbG9uZShvYmopIHtcblx0Ly8gdHlwZW9mIG51bGwgcmVzdWx0cyBpbiAnb2JqZWN0Jy4gIGh0dHBzOi8vMmFsaXR5LmNvbS8yMDEzLzEwL3R5cGVvZi1udWxsLmh0bWxcblx0aWYgKG51bGwgPT09IG9iaikge1xuXHRcdHJldHVybiBvYmo7XG5cdH1cblxuXHQvLyBIYW5kbGUgdGhlIHR3byBzaW1wbGUgdHlwZXMsIG51bGwgYW5kIHVuZGVmaW5lZFxuXHRpZiAoaXNQcmltaXRpdmUob2JqKSkge1xuXHRcdHJldHVybiBvYmo7XG5cdH1cblxuXHQvLyBIYW5kbGUgdGhlIHR3byBzaW1wbGUgdHlwZXMsIG51bGwgYW5kIHVuZGVmaW5lZFxuXHRpZiAoaXNGdW5jdGlvbihvYmopKSB7XG5cdFx0cmV0dXJuIG9iajtcblx0fVxuXG5cdC8vIEhhbmRsZSBBcnJheVxuXHRpZiAoaXNBcnJheShvYmopKSB7XG5cdFx0Y29uc3QgY29weSA9IFtdO1xuXHRcdGZvciAobGV0IGkgPSAwLCBsZW4gPSBvYmoubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdGNvcHlbaV0gPSBjbG9uZShvYmpbaV0pO1xuXHRcdH1cblxuXHRcdHJldHVybiBjb3B5O1xuXHR9XG5cblx0aWYgKGlzT2JqZWN0KG9iaikpIHtcblx0XHQvLyBIYW5kbGUgRGF0ZVxuXHRcdGlmIChvYmogaW5zdGFuY2VvZiBEYXRlKSB7XG5cdFx0XHRjb25zdCBjb3B5ID0gbmV3IERhdGUoKTtcblx0XHRcdGNvcHkuc2V0VGltZShvYmouZ2V0VGltZSgpKTtcblx0XHRcdHJldHVybiBjb3B5O1xuXHRcdH1cblxuXHRcdC8qKiBEbyBub3QgY2xvbmUgRE9NIG5vZGVzICovXG5cdFx0aWYgKHR5cGVvZiBFbGVtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIG9iaiBpbnN0YW5jZW9mIEVsZW1lbnQpIHJldHVybiBvYmo7XG5cdFx0aWYgKHR5cGVvZiBIVE1MRG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgb2JqIGluc3RhbmNlb2YgSFRNTERvY3VtZW50KVxuXHRcdFx0cmV0dXJuIG9iajtcblx0XHRpZiAoXG5cdFx0XHR0eXBlb2YgRG9jdW1lbnRGcmFnbWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHRcdFx0b2JqIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudFxuXHRcdClcblx0XHRcdHJldHVybiBvYmo7XG5cblx0XHQvKiogRG8gbm90IGNsb25lIGdsb2JhbCBvYmplY3RzICovXG5cdFx0aWYgKG9iaiA9PT0gZ2V0R2xvYmFsKCkpIHJldHVybiBvYmo7XG5cdFx0aWYgKHR5cGVvZiBnbG9iYWxDb250ZXh0ICE9PSBcInVuZGVmaW5lZFwiICYmIG9iaiA9PT0gZ2xvYmFsQ29udGV4dClcblx0XHRcdHJldHVybiBvYmo7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgb2JqID09PSB3aW5kb3cpIHJldHVybiBvYmo7XG5cdFx0aWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvYmogPT09IGRvY3VtZW50KSByZXR1cm4gb2JqO1xuXHRcdGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiICYmIG9iaiA9PT0gbmF2aWdhdG9yKSByZXR1cm4gb2JqO1xuXHRcdGlmICh0eXBlb2YgSlNPTiAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvYmogPT09IEpTT04pIHJldHVybiBvYmo7XG5cblx0XHQvLyBIYW5kbGUgUHJveHktT2JqZWN0XG5cdFx0dHJ5IHtcblx0XHRcdC8vIHRyeS9jYXRjaCBiZWNhdXNlIHBvc3NpYmxlOiBUeXBlRXJyb3I6IEZ1bmN0aW9uIGhhcyBub24tb2JqZWN0IHByb3RvdHlwZSAndW5kZWZpbmVkJyBpbiBpbnN0YW5jZW9mIGNoZWNrXG5cdFx0XHRpZiAob2JqIGluc3RhbmNlb2YgUHJveHkpIHtcblx0XHRcdFx0cmV0dXJuIG9iajtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlKSB7fVxuXG5cdFx0cmV0dXJuIGNsb25lT2JqZWN0KG9iaik7XG5cdH1cblxuXHR0aHJvdyBuZXcgRXJyb3IoXCJ1bmFibGUgdG8gY2xvbmUgb2JqISBpdHMgdHlwZSBpc24ndCBzdXBwb3J0ZWQuXCIpO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gb2JqXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjbG9uZU9iamVjdChvYmopIHtcblx0dmFsaWRhdGVPYmplY3Qob2JqKTtcblxuXHRjb25zdCBma3QgPSBvYmo/LltcImNvbnN0cnVjdG9yXCJdO1xuXG5cdC8qKiBPYmplY3QgaGFzIGNsb25lIG1ldGhvZCAqL1xuXHRpZiAodHlwZU9mKGZrdCkgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdGNvbnN0IHByb3RvdHlwZSA9IGZrdD8ucHJvdG90eXBlO1xuXHRcdGlmICh0eXBlb2YgcHJvdG90eXBlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdHByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eShcImdldENsb25lXCIpICYmXG5cdFx0XHRcdHR5cGVPZihvYmouZ2V0Q2xvbmUpID09PSBcImZ1bmN0aW9uXCJcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gb2JqLmdldENsb25lKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0bGV0IGNvcHkgPSB7fTtcblx0aWYgKFxuXHRcdHR5cGVvZiBvYmouY29uc3RydWN0b3IgPT09IFwiZnVuY3Rpb25cIiAmJlxuXHRcdHR5cGVvZiBvYmouY29uc3RydWN0b3IuY2FsbCA9PT0gXCJmdW5jdGlvblwiXG5cdCkge1xuXHRcdGNvcHkgPSBuZXcgb2JqLmNvbnN0cnVjdG9yKCk7XG5cdH1cblxuXHRmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcblx0XHRpZiAoIW9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRpZiAoaXNQcmltaXRpdmUob2JqW2tleV0pKSB7XG5cdFx0XHRjb3B5W2tleV0gPSBvYmpba2V5XTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGNvcHlba2V5XSA9IGNsb25lKG9ialtrZXldKTtcblx0fVxuXG5cdHJldHVybiBjb3B5O1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgY2xvbmUgfSBmcm9tIFwiLi4vdXRpbC9jbG9uZS5tanNcIjtcblxuZXhwb3J0IHsgTG9jYWxlLCBwYXJzZUxvY2FsZSB9O1xuXG4vKipcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHByb3BlcnRpZXNTeW1ib2wgPSBTeW1ib2woXCJwcm9wZXJ0aWVzXCIpO1xuXG4vKipcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGxvY2FsZVN0cmluZ1N5bWJvbCA9IFN5bWJvbChcImxvY2FsZVN0cmluZ1wiKTtcblxuLyoqXG4gKiBUaGUgTG9jYWxlIGNsYXNzIGlzIGEgYmFzZSBjbGFzcyBmb3IgdGhlIGxhbmd1YWdlIGNsYXNzZXMuXG4gKlxuICogUkZDXG4gKlxuICogYGBgXG4gKiBBIExhbmd1YWdlLVRhZyBjb25zaXN0cyBvZjpcbiAqIGxhbmd0YWcgICAgICAgICAgICAgICAgICAgICAgICAgICA7IGdlbmVyYXRlZCB0YWdcbiAqICAgICAgICAgICAtb3ItIHByaXZhdGUtdXNlICAgICAgICA7IGEgcHJpdmF0ZSB1c2UgdGFnXG4gKlxuICogbGFuZ3RhZyAgICAgICA9IChsYW5ndWFnZVxuICogICAgICAgICAgICAgICAgICAgIFtcIi1cIiBzY3JpcHRdXG4gKiAgICAgICAgICAgICAgICAgICAgW1wiLVwiIHJlZ2lvbl1cbiAqICAgICAgICAgICAgICAgICAgICAqKFwiLVwiIHZhcmlhbnQpXG4gKiAgICAgICAgICAgICAgICAgICAgKihcIi1cIiBleHRlbnNpb24pXG4gKiAgICAgICAgICAgICAgICAgICAgW1wiLVwiIHByaXZhdGV1c2VdKVxuICpcbiAqIGxhbmd1YWdlICAgICAgPSBcImVuXCIsIFwiYWxlXCIsIG9yIGEgcmVnaXN0ZXJlZCB2YWx1ZVxuICpcbiAqIHNjcmlwdCAgICAgICAgPSBcIkxhdG5cIiwgXCJDeXJsXCIsIFwiSGFudFwiIElTTyAxNTkyNCBjb2Rlc1xuICpcbiAqIHJlZ2lvbiAgICAgICAgPSBcIlVTXCIsIFwiQ1NcIiwgXCJGUlwiIElTTyAzMTY2IGNvZGVzXG4gKiAgICAgICAgICAgICAgICAgXCI0MTlcIiwgXCIwMTlcIiwgIG9yIFVOIE0uNDkgY29kZXNcbiAqXG4gKiB2YXJpYW50ICAgICAgID0gXCJyb3phalwiLCBcIm5lZGlzXCIsIFwiMTk5NlwiLCBtdWx0aXBsZSBzdWJ0YWdzIGNhbiBiZSB1c2VkIGluIGEgdGFnXG4gKlxuICogZXh0ZW5zaW9uICAgICA9IHNpbmdsZSBsZXR0ZXIgZm9sbG93ZWQgYnkgYWRkaXRpb25hbCBzdWJ0YWdzOyBtb3JlIHRoYW4gb25lIGV4dGVuc2lvblxuICogICAgICAgICAgICAgICAgIG1heSBiZSB1c2VkIGluIGEgbGFuZ3VhZ2UgdGFnXG4gKlxuICogcHJpdmF0ZS11c2UgICA9IFwieC1cIiBmb2xsb3dlZCBieSBhZGRpdGlvbmFsIHN1YnRhZ3MsIGFzIG1hbnkgYXMgYXJlIHJlcXVpcmVkXG4gKiAgICAgICAgICAgICAgICAgTm90ZSB0aGF0IHRoZXNlIGNhbiBzdGFydCBhIHRhZyBvciBhcHBlYXIgYXQgdGhlIGVuZCAoYnV0IG5vdFxuICogICAgICAgICAgICAgICAgIGluIHRoZSBtaWRkbGUpXG4gKiBgYGBcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjEzLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMzA2NlxuICovXG5jbGFzcyBMb2NhbGUgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBsYW5ndWFnZVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gW3JlZ2lvbl1cblx0ICogQHBhcmFtIHtzdHJpbmd9IFtzY3JpcHRdXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbdmFyaWFudHNdXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbZXh0bGFuZ11cblx0ICogQHBhcmFtIHtzdHJpbmd9IFtwcml2YXRlVXNlXVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgbG9jYWxlXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihsYW5ndWFnZSwgcmVnaW9uLCBzY3JpcHQsIHZhcmlhbnRzLCBleHRsYW5nLCBwcml2YXRlVXNlKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXNbcHJvcGVydGllc1N5bWJvbF0gPSB7XG5cdFx0XHRsYW5ndWFnZTogbGFuZ3VhZ2UgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHZhbGlkYXRlU3RyaW5nKGxhbmd1YWdlKSxcblx0XHRcdHNjcmlwdDogc2NyaXB0ID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB2YWxpZGF0ZVN0cmluZyhzY3JpcHQpLFxuXHRcdFx0cmVnaW9uOiByZWdpb24gPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHZhbGlkYXRlU3RyaW5nKHJlZ2lvbiksXG5cdFx0XHR2YXJpYW50czogdmFyaWFudHMgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHZhbGlkYXRlU3RyaW5nKHZhcmlhbnRzKSxcblx0XHRcdGV4dGxhbmc6IGV4dGxhbmcgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHZhbGlkYXRlU3RyaW5nKGV4dGxhbmcpLFxuXHRcdFx0cHJpdmF0ZVVzZTpcblx0XHRcdFx0cHJpdmF0ZVVzZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogdmFsaWRhdGVTdHJpbmcocHJpdmF0ZVVzZSksXG5cdFx0fTtcblxuXHRcdGNvbnN0IHMgPSBbXTtcblx0XHRpZiAobGFuZ3VhZ2UgIT09IHVuZGVmaW5lZCkgcy5wdXNoKGxhbmd1YWdlKTtcblx0XHRpZiAoc2NyaXB0ICE9PSB1bmRlZmluZWQpIHMucHVzaChzY3JpcHQpO1xuXHRcdGlmIChyZWdpb24gIT09IHVuZGVmaW5lZCkgcy5wdXNoKHJlZ2lvbik7XG5cdFx0aWYgKHZhcmlhbnRzICE9PSB1bmRlZmluZWQpIHMucHVzaCh2YXJpYW50cyk7XG5cdFx0aWYgKGV4dGxhbmcgIT09IHVuZGVmaW5lZCkgcy5wdXNoKGV4dGxhbmcpO1xuXHRcdGlmIChwcml2YXRlVXNlICE9PSB1bmRlZmluZWQpIHMucHVzaChwcml2YXRlVXNlKTtcblxuXHRcdGlmIChzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgbG9jYWxlXCIpO1xuXHRcdH1cblxuXHRcdHRoaXNbbG9jYWxlU3RyaW5nU3ltYm9sXSA9IHMuam9pbihcIi1cIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDMuMjcuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9pMThuL2xvY2FsZUBAaW5zdGFuY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0Z2V0IGxvY2FsZVN0cmluZygpIHtcblx0XHRyZXR1cm4gdGhpc1tsb2NhbGVTdHJpbmdTeW1ib2xdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ3x1bmRlZmluZWR9XG5cdCAqL1xuXHRnZXQgbGFuZ3VhZ2UoKSB7XG5cdFx0cmV0dXJuIHRoaXNbcHJvcGVydGllc1N5bWJvbF0ubGFuZ3VhZ2U7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfHVuZGVmaW5lZH1cblx0ICovXG5cdGdldCByZWdpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXNbcHJvcGVydGllc1N5bWJvbF0ucmVnaW9uO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ3x1bmRlZmluZWR9XG5cdCAqL1xuXHRnZXQgc2NyaXB0KCkge1xuXHRcdHJldHVybiB0aGlzW3Byb3BlcnRpZXNTeW1ib2xdLnNjcmlwdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd8dW5kZWZpbmVkfVxuXHQgKi9cblx0Z2V0IHZhcmlhbnRzKCkge1xuXHRcdHJldHVybiB0aGlzW3Byb3BlcnRpZXNTeW1ib2xdLnZhcmlhbnRzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ3x1bmRlZmluZWR9XG5cdCAqL1xuXHRnZXQgZXh0bGFuZygpIHtcblx0XHRyZXR1cm4gdGhpc1twcm9wZXJ0aWVzU3ltYm9sXS5leHRsYW5nO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ3x1bmRlZmluZWR9XG5cdCAqL1xuXHRnZXQgcHJpdmF0ZVVzZSgpIHtcblx0XHRyZXR1cm4gdGhpc1twcm9wZXJ0aWVzU3ltYm9sXS5wcml2YXRlVmFsdWU7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0dG9TdHJpbmcoKSB7XG5cdFx0cmV0dXJuIGAke3RoaXMubG9jYWxlU3RyaW5nfWA7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIHN0cnVjdHVyZSBoYXMgdGhlIGZvbGxvd2luZzogbGFuZ3VhZ2UsIHNjcmlwdCwgcmVnaW9uLCB2YXJpYW50cywgZXh0bGFuZywgcHJpdmF0ZVVzZVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkkxOG4uTG9jYWxlTWFwfVxuXHQgKi9cblx0Z2V0TWFwKCkge1xuXHRcdHJldHVybiBjbG9uZSh0aGlzW3Byb3BlcnRpZXNTeW1ib2xdKTtcblx0fVxufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IExvY2FsZU1hcFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGxhbmd1YWdlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc2NyaXB0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gcmVnaW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdmFyaWFudHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBleHRsYW5nXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcHJpdmF0ZVVzZVxuICovXG5cbi8qKlxuICogUGFyc2UgbG9jYWwgYWNjb3JkaW5nIHRvIHJmYzQ2NDYgc3RhbmRhcmRcbiAqXG4gKiBMaW1pdGF0aW9uczogVGhlIHJlZ2V4IGNhbm5vdCBoYW5kbGUgbXVsdGlwbGUgdmFyaWFudHMgb3IgcHJpdmF0ZS5cbiAqXG4gKiBZb3UgY2FuIGNhbGwgdGhlIG1ldGhvZCB2aWEgdGhpcyBmdW5jdGlvbiBpbmRpdmlkdWFsbHk6XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IHtjcmVhdGVMb2NhbGV9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL2kxOG4vbG9jYWxlLm1qcyc7XG4gKiBjcmVhdGVMb2NhbGUoKVxuICogYGBgXG4gKlxuICogUkZDXG4gKlxuICogYGBgXG4gKiAgIFRoZSBzeW50YXggb2YgdGhlIGxhbmd1YWdlIHRhZyBpbiBBQk5GIFtSRkM0MjM0XSBpczpcbiAqXG4gKiAgIExhbmd1YWdlLVRhZyAgPSBsYW5ndGFnXG4gKiAgICAgICAgICAgICAgICAgLyBwcml2YXRldXNlICAgICAgICAgICAgIDsgcHJpdmF0ZSB1c2UgdGFnXG4gKiAgICAgICAgICAgICAgICAgLyBncmFuZGZhdGhlcmVkICAgICAgICAgIDsgZ3JhbmRmYXRoZXJlZCByZWdpc3RyYXRpb25zXG4gKlxuICogICBsYW5ndGFnICAgICAgID0gKGxhbmd1YWdlXG4gKiAgICAgICAgICAgICAgICAgICAgW1wiLVwiIHNjcmlwdF1cbiAqICAgICAgICAgICAgICAgICAgICBbXCItXCIgcmVnaW9uXVxuICogICAgICAgICAgICAgICAgICAgICooXCItXCIgdmFyaWFudClcbiAqICAgICAgICAgICAgICAgICAgICAqKFwiLVwiIGV4dGVuc2lvbilcbiAqICAgICAgICAgICAgICAgICAgICBbXCItXCIgcHJpdmF0ZXVzZV0pXG4gKlxuICogICBsYW5ndWFnZSAgICAgID0gKDIqM0FMUEhBIFsgZXh0bGFuZyBdKSA7IHNob3J0ZXN0IElTTyA2MzkgY29kZVxuICogICAgICAgICAgICAgICAgIC8gNEFMUEhBICAgICAgICAgICAgICAgICA7IHJlc2VydmVkIGZvciBmdXR1cmUgdXNlXG4gKiAgICAgICAgICAgICAgICAgLyA1KjhBTFBIQSAgICAgICAgICAgICAgIDsgcmVnaXN0ZXJlZCBsYW5ndWFnZSBzdWJ0YWdcbiAqXG4gKiAgIGV4dGxhbmcgICAgICAgPSAqMyhcIi1cIiAzQUxQSEEpICAgICAgICAgOyByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZVxuICpcbiAqICAgc2NyaXB0ICAgICAgICA9IDRBTFBIQSAgICAgICAgICAgICAgICAgOyBJU08gMTU5MjQgY29kZVxuICpcbiAqICAgcmVnaW9uICAgICAgICA9IDJBTFBIQSAgICAgICAgICAgICAgICAgOyBJU08gMzE2NiBjb2RlXG4gKiAgICAgICAgICAgICAgICAgLyAzRElHSVQgICAgICAgICAgICAgICAgIDsgVU4gTS40OSBjb2RlXG4gKlxuICogICB2YXJpYW50ICAgICAgID0gNSo4YWxwaGFudW0gICAgICAgICAgICA7IHJlZ2lzdGVyZWQgdmFyaWFudHNcbiAqICAgICAgICAgICAgICAgICAvIChESUdJVCAzYWxwaGFudW0pXG4gKlxuICogICBleHRlbnNpb24gICAgID0gc2luZ2xldG9uIDEqKFwiLVwiICgyKjhhbHBoYW51bSkpXG4gKlxuICogICBzaW5nbGV0b24gICAgID0gJXg0MS01NyAvICV4NTktNUEgLyAleDYxLTc3IC8gJXg3OS03QSAvIERJR0lUXG4gKiAgICAgICAgICAgICAgICAgOyBcImFcIi1cIndcIiAvIFwieVwiLVwielwiIC8gXCJBXCItXCJXXCIgLyBcIllcIi1cIlpcIiAvIFwiMFwiLVwiOVwiXG4gKiAgICAgICAgICAgICAgICAgOyBTaW5nbGUgbGV0dGVyczogeC9YIGlzIHJlc2VydmVkIGZvciBwcml2YXRlIHVzZVxuICpcbiAqICAgcHJpdmF0ZXVzZSAgICA9IChcInhcIi9cIlhcIikgMSooXCItXCIgKDEqOGFscGhhbnVtKSlcbiAqXG4gKiAgIGdyYW5kZmF0aGVyZWQgPSAxKjNBTFBIQSAxKjIoXCItXCIgKDIqOGFscGhhbnVtKSlcbiAqICAgICAgICAgICAgICAgICAgIDsgZ3JhbmRmYXRoZXJlZCByZWdpc3RyYXRpb25cbiAqICAgICAgICAgICAgICAgICAgIDsgTm90ZTogaSBpcyB0aGUgb25seSBzaW5nbGV0b25cbiAqICAgICAgICAgICAgICAgICAgIDsgdGhhdCBzdGFydHMgYSBncmFuZGZhdGhlcmVkIHRhZ1xuICpcbiAqICAgYWxwaGFudW0gICAgICA9IChBTFBIQSAvIERJR0lUKSAgICAgICA7IGxldHRlcnMgYW5kIG51bWJlcnNcbiAqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIEZpZ3VyZSAxOiBMYW5ndWFnZSBUYWcgQUJORlxuICogYGBgXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGxvY2FsZVxuICogQHJldHVybiB7TG9jYWxlfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xNC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBsb2NhbGVcbiAqL1xuZnVuY3Rpb24gcGFyc2VMb2NhbGUobG9jYWxlKSB7XG5cdGxvY2FsZSA9IHZhbGlkYXRlU3RyaW5nKGxvY2FsZSkucmVwbGFjZSgvXy9nLCBcIi1cIik7XG5cblx0bGV0IGxhbmd1YWdlO1xuXHRsZXQgcmVnaW9uO1xuXHRsZXQgdmFyaWFudHM7XG5cdGxldCBwYXJ0cztcblx0bGV0IHNjcmlwdDtcblx0bGV0IGV4dGxhbmc7XG5cdGNvbnN0IHJlZ2V4UmVndWxhciA9XG5cdFx0XCIoYXJ0LWxvamJhbnxjZWwtZ2F1bGlzaHxuby1ib2t8bm8tbnlufHpoLWd1b3l1fHpoLWhha2thfHpoLW1pbnx6aC1taW4tbmFufHpoLXhpYW5nKVwiO1xuXHRjb25zdCByZWdleElycmVndWxhciA9XG5cdFx0XCIoZW4tR0Itb2VkfGktYW1pfGktYm5ufGktZGVmYXVsdHxpLWVub2NoaWFufGktaGFrfGkta2xpbmdvbnxpLWx1eHxpLW1pbmdvfGktbmF2YWpvfGktcHdufGktdGFvfGktdGF5fGktdHN1fHNnbi1CRS1GUnxzZ24tQkUtTkx8c2duLUNILURFKVwiO1xuXHRjb25zdCByZWdleEdyYW5kZmF0aGVyZWQgPSBgKCR7cmVnZXhJcnJlZ3VsYXJ9fCR7cmVnZXhSZWd1bGFyfSlgO1xuXHRjb25zdCByZWdleFByaXZhdGVVc2UgPSBcIih4KC1bQS1aYS16MC05XXsxLDh9KSspXCI7XG5cdGNvbnN0IHJlZ2V4U2luZ2xldG9uID0gXCJbMC05QS1XWS1aYS13eS16XVwiO1xuXHRjb25zdCByZWdleEV4dGVuc2lvbiA9IGAoJHtyZWdleFNpbmdsZXRvbn0oLVtBLVphLXowLTldezIsOH0pKylgO1xuXHRjb25zdCByZWdleFZhcmlhbnQgPSBcIihbQS1aYS16MC05XXs1LDh9fFswLTldW0EtWmEtejAtOV17M30pXCI7XG5cdGNvbnN0IHJlZ2V4UmVnaW9uID0gXCIoW0EtWmEtel17Mn18WzAtOV17M30pXCI7XG5cdGNvbnN0IHJlZ2V4U2NyaXB0ID0gXCIoW0EtWmEtel17NH0pXCI7XG5cdGNvbnN0IHJlZ2V4RXh0bGFuZyA9IFwiKFtBLVphLXpdezN9KC1bQS1aYS16XXszfSl7MCwyfSlcIjtcblx0Y29uc3QgcmVnZXhMYW5ndWFnZSA9IGAoKFtBLVphLXpdezIsM30oLSR7cmVnZXhFeHRsYW5nfSk/KXxbQS1aYS16XXs0fXxbQS1aYS16XXs1LDh9KWA7XG5cdGNvbnN0IHJlZ2V4TGFuZ3RhZyA9IGAoJHtyZWdleExhbmd1YWdlfSgtJHtyZWdleFNjcmlwdH0pPygtJHtyZWdleFJlZ2lvbn0pPygtJHtyZWdleFZhcmlhbnR9KSooLSR7cmVnZXhFeHRlbnNpb259KSooLSR7cmVnZXhQcml2YXRlVXNlfSk/KWA7XG5cdGNvbnN0IHJlZ2V4TGFuZ3VhZ2VUYWcgPSBgXigke3JlZ2V4R3JhbmRmYXRoZXJlZH18JHtyZWdleExhbmd0YWd9fCR7cmVnZXhQcml2YXRlVXNlfSkkYDtcblx0Y29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKHJlZ2V4TGFuZ3VhZ2VUYWcpO1xuXHRsZXQgbWF0Y2g7XG5cblx0aWYgKChtYXRjaCA9IHJlZ2V4LmV4ZWMobG9jYWxlKSkgIT09IG51bGwpIHtcblx0XHRpZiAobWF0Y2guaW5kZXggPT09IHJlZ2V4Lmxhc3RJbmRleCkge1xuXHRcdFx0cmVnZXgubGFzdEluZGV4Kys7XG5cdFx0fVxuXHR9XG5cblx0aWYgKG1hdGNoID09PSB1bmRlZmluZWQgfHwgbWF0Y2ggPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCBsb2NhbGVcIik7XG5cdH1cblxuXHRpZiAobWF0Y2hbNl0gIT09IHVuZGVmaW5lZCkge1xuXHRcdGxhbmd1YWdlID0gbWF0Y2hbNl07XG5cblx0XHRwYXJ0cyA9IGxhbmd1YWdlLnNwbGl0KFwiLVwiKTtcblx0XHRpZiAocGFydHMubGVuZ3RoID4gMSkge1xuXHRcdFx0bGFuZ3VhZ2UgPSBwYXJ0c1swXTtcblx0XHRcdGV4dGxhbmcgPSBwYXJ0c1sxXTtcblx0XHR9XG5cdH1cblxuXHRpZiAobWF0Y2hbMTRdICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZWdpb24gPSBtYXRjaFsxNF07XG5cdH1cblxuXHRpZiAobWF0Y2hbMTJdICE9PSB1bmRlZmluZWQpIHtcblx0XHRzY3JpcHQgPSBtYXRjaFsxMl07XG5cdH1cblxuXHRpZiAobWF0Y2hbMTZdICE9PSB1bmRlZmluZWQpIHtcblx0XHR2YXJpYW50cyA9IG1hdGNoWzE2XTtcblx0fVxuXG5cdHJldHVybiBuZXcgTG9jYWxlKGxhbmd1YWdlLCByZWdpb24sIHNjcmlwdCwgdmFyaWFudHMsIGV4dGxhbmcpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IHBhcnNlTG9jYWxlIH0gZnJvbSBcIi4uL2kxOG4vbG9jYWxlLm1qc1wiO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnQgfSBmcm9tIFwiLi91dGlsLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsT2JqZWN0IH0gZnJvbSBcIi4uL3R5cGVzL2dsb2JhbC5tanNcIjtcblxuZXhwb3J0IHsgZ2V0TG9jYWxlT2ZEb2N1bWVudCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBERUZBVUxUX0xBTkdVQUdFID0gXCJlblwiO1xuXG4vKipcbiAqIFdpdGggdGhpcyBmdW5jdGlvbiB5b3UgY2FuIHJlYWQgdGhlIGxhbmd1YWdlIHZlcnNpb24gc2V0IGJ5IHRoZSBkb2N1bWVudC5cbiAqIEZvciB0aGlzIHRoZSBhdHRyaWJ1dGUgYGxhbmdgIGluIHRoZSBodG1sIHRhZyBpcyByZWFkLiBJZiBubyBhdHRyaWJ1dGUgaXMgc2V0LCBgZW5gIGlzIHVzZWQgYXMgZGVmYXVsdC5cbiAqIEFsdGVybmF0aXZlbHksIHRoZSBsYW5ndWFnZSB2ZXJzaW9uIG9mIHRoZSBicm93c2VyIGlzIHVzZWQuXG4gKlxuICogYGBgaHRtbFxuICogPGh0bWwgbGFuZz1cImVuXCI+XG4gKiBgYGBcbiAqXG4gKiBZb3UgY2FuIGNhbGwgdGhlIGZ1bmN0aW9uIHZpYSBgZ2V0TG9jYWxlT2ZEb2N1bWVudCgpYC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjEzLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGxvY2FsZVxuICogQHN1bW1hcnkgVHJpZXMgdG8gZGV0ZXJtaW5lIHRoZSBsb2NhbGUgdXNlZFxuICovXG5mdW5jdGlvbiBnZXRMb2NhbGVPZkRvY3VtZW50KCkge1xuXHRjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cblx0Y29uc3QgaHRtbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpO1xuXHRpZiAoaHRtbCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIGh0bWwuaGFzQXR0cmlidXRlKFwibGFuZ1wiKSkge1xuXHRcdGNvbnN0IGxvY2FsZSA9IGh0bWwuZ2V0QXR0cmlidXRlKFwibGFuZ1wiKTtcblx0XHRpZiAobG9jYWxlKSB7XG5cdFx0XHRyZXR1cm4gbmV3IHBhcnNlTG9jYWxlKGxvY2FsZSk7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgbmF2aWdhdG9yTGFuZ3VhZ2UgPSBnZXROYXZpZ2F0b3JMYW5ndWFnZSgpO1xuXHRpZiAobmF2aWdhdG9yTGFuZ3VhZ2UpIHtcblx0XHRyZXR1cm4gcGFyc2VMb2NhbGUobmF2aWdhdG9yTGFuZ3VhZ2UpO1xuXHR9XG5cblx0cmV0dXJuIHBhcnNlTG9jYWxlKERFRkFVTFRfTEFOR1VBR0UpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd8dW5kZWZpbmVkfCp9XG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9OYXZpZ2F0b3IvbGFuZ3VhZ2VcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL05hdmlnYXRvci9sYW5ndWFnZXNcbiAqL1xuY29uc3QgZ2V0TmF2aWdhdG9yTGFuZ3VhZ2UgPSAoKSA9PiB7XG5cdGNvbnN0IG5hdmlnYXRvciA9IGdldEdsb2JhbE9iamVjdChcIm5hdmlnYXRvclwiKTtcblx0aWYgKG5hdmlnYXRvciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdGlmIChuYXZpZ2F0b3IuaGFzT3duUHJvcGVydHkoXCJsYW5ndWFnZVwiKSkge1xuXHRcdGNvbnN0IGxhbmd1YWdlID0gbmF2aWdhdG9yLmxhbmd1YWdlO1xuXHRcdGlmICh0eXBlb2YgbGFuZ3VhZ2UgPT09IFwic3RyaW5nXCIgJiYgbGFuZ3VhZ2UubGVuZ3RoID4gMCkge1xuXHRcdFx0cmV0dXJuIGxhbmd1YWdlO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IGxhbmd1YWdlcyA9IG5hdmlnYXRvcj8ubGFuZ3VhZ2VzO1xuXHRpZiAoQXJyYXkuaXNBcnJheShsYW5ndWFnZXMpICYmIGxhbmd1YWdlcy5sZW5ndGggPiAwKSB7XG5cdFx0cmV0dXJuIGxhbmd1YWdlc1swXTtcblx0fVxuXG5cdHJldHVybiB1bmRlZmluZWQ7XG59O1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgSUQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge01hcDxzdHJpbmcsIGludGVnZXI+fVxuICovXG5jb25zdCBpbnRlcm5hbENvdW50ZXIgPSBuZXcgTWFwKCk7XG5cbi8qKlxuICogV2l0aCB0aGUgaWQgY2xhc3MsIHNlcXVlbmNlcyBvZiBpZHMgY2FuIGJlIGNyZWF0ZWQuIGZvciB0aGlzIHB1cnBvc2UsIGFuIGludGVybmFsIGNvdW50ZXIgaXMgaW5jcmVtZW50ZWQgZm9yIGVhY2ggcHJlZml4LlxuICogdGh1cywgdGhlIGZpcnN0IGlkIHdpdGggdGhlIHByZWZpeCBgbXlpZGAgd2lsbCBiZSBgbXlpZDFgIGFuZCB0aGUgc2Vjb25kIGlkIGBteWlkMmAuXG4gKiBUaGUgaWRzIGFyZSB0aGUgc2FtZSBmb3IgZXZlcnkgY2FsbCwgZm9yIGV4YW1wbGUgb24gYSB3ZWIgcGFnZS5cbiAqXG4gKiBTbyB0aGUgaWRzIGNhbiBhbHNvIGJlIHVzZWQgZm9yIG5hdmlnYXRpb24uIHlvdSBoYXZlIHRvIHRha2UgY2FyZSB0aGF0IHRoZSBvcmRlciBzdGF5cyB0aGUgc2FtZS5cbiAqXG4gKiBBcyBvZiB2ZXJzaW9uIDEuNi4wIHRoZXJlIGlzIHRoZSBuZXcgUmFuZG9tSUQuIHRoaXMgSUQgY2xhc3MgaXMgY29udGludW91cyBmcm9tIG5vdyBvbi5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEF1dG9tYXRpYyBnZW5lcmF0aW9uIG9mIGlkc1xuICovXG5jbGFzcyBJRCBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICogY3JlYXRlIG5ldyBpZCB3aXRoIHByZWZpeFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4XG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihwcmVmaXgpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0aWYgKHByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRwcmVmaXggPSBcImlkXCI7XG5cdFx0fVxuXG5cdFx0dmFsaWRhdGVTdHJpbmcocHJlZml4KTtcblxuXHRcdGlmICghaW50ZXJuYWxDb3VudGVyLmhhcyhwcmVmaXgpKSB7XG5cdFx0XHRpbnRlcm5hbENvdW50ZXIuc2V0KHByZWZpeCwgMSk7XG5cdFx0fVxuXG5cdFx0bGV0IGNvdW50ID0gaW50ZXJuYWxDb3VudGVyLmdldChwcmVmaXgpO1xuXHRcdHRoaXMuaWQgPSBwcmVmaXggKyBjb3VudDtcblxuXHRcdGludGVybmFsQ291bnRlci5zZXQocHJlZml4LCArK2NvdW50KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHR0b1N0cmluZygpIHtcblx0XHRyZXR1cm4gdGhpcy5pZDtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IFBhdGhmaW5kZXIgfSBmcm9tIFwiLi4vZGF0YS9wYXRoZmluZGVyLm1qc1wiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZU9iamVjdCB9IGZyb20gXCIuL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBCYXNlV2l0aE9wdGlvbnMgfTtcblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBiYXNlIGNsYXNzIHdpdGggb3B0aW9ucyBmcm9tIHdoaWNoIHNvbWUgbW9uc3RlciBjbGFzc2VzIGFyZSBkZXJpdmVkLlxuICpcbiAqIFRoaXMgY2xhc3MgaXMgYWN0dWFsbHkgb25seSB1c2VkIGFzIGEgYmFzZSBjbGFzcy5cbiAqXG4gKiBDbGFzc2VzIHRoYXQgcmVxdWlyZSB0aGUgcG9zc2liaWxpdHkgb2Ygb3B0aW9ucyBjYW4gYmUgZGVyaXZlZCBkaXJlY3RseSBmcm9tIHRoaXMgY2xhc3MuXG4gKiBEZXJpdmVkIGNsYXNzZXMgYWxtb3N0IGFsd2F5cyBvdmVycmlkZSB0aGUgYGRlZmF1bHRgIGdldHRlciB3aXRoIHRoZWlyIG93biB2YWx1ZXMuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQGRlcHJlY2F0ZWQgc2luY2UgMy4xNS4wXG4gKi9cbmNsYXNzIEJhc2VXaXRoT3B0aW9ucyBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcblx0ICovXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0aWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0b3B0aW9ucyA9IHt9O1xuXHRcdH1cblxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0gZXh0ZW5kKHt9LCB0aGlzLmRlZmF1bHRzLCB2YWxpZGF0ZU9iamVjdChvcHRpb25zKSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBnZXR0ZXIgcHJvdmlkZXMgdGhlIG9wdGlvbnMuIERlcml2ZWQgY2xhc3NlcyBvdmVyd3JpdGVcblx0ICogdGhpcyBnZXR0ZXIgd2l0aCB0aGVpciBvd24gdmFsdWVzLiBJdCBpcyBhIGdvb2Qga2FybWEgdG8gYWx3YXlzIGluY2x1ZGVcblx0ICogdGhlIHZhbHVlcyBmcm9tIHRoZSBwYXJlbnQgY2xhc3MuXG5cdCAqXG5cdCAqIGBgYGphdmFzY3JpcHRcblx0ICogZ2V0IGRlZmF1bHRzKCkge1xuXHQgKiAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdCAqICAgICAgICAgbXlrZXk6IHRydWVcblx0ICogICAgIH0pO1xuXHQgKiB9XG5cdCAqXG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcmV0dXJuIHtvYmplY3R9XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cblx0LyoqXG5cdCAqIG5lc3RlZCBvcHRpb25zIGNhbiBiZSBzcGVjaWZpZWQgYnkgcGF0aCBgYS5iLmNgXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG5cdCAqIEBwYXJhbSB7Kn0gZGVmYXVsdFZhbHVlXG5cdCAqIEByZXR1cm4geyp9XG5cdCAqIEBzaW5jZSAxLjEwLjBcblx0ICovXG5cdGdldE9wdGlvbihwYXRoLCBkZWZhdWx0VmFsdWUpIHtcblx0XHRsZXQgdmFsdWU7XG5cblx0XHR0cnkge1xuXHRcdFx0dmFsdWUgPSBuZXcgUGF0aGZpbmRlcih0aGlzW2ludGVybmFsU3ltYm9sXSkuZ2V0VmlhKHBhdGgpO1xuXHRcdH0gY2F0Y2ggKGUpIHt9XG5cblx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge1xuXHRoYXNPYmplY3RMaW5rLFxuXHRnZXRMaW5rZWRPYmplY3RzLFxuXHRhZGRUb09iamVjdExpbmssXG59IGZyb20gXCIuLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IGdldExvY2FsZU9mRG9jdW1lbnQgfSBmcm9tIFwiLi4vZG9tL2xvY2FsZS5tanNcIjtcbmltcG9ydCB7IEJhc2VXaXRoT3B0aW9ucyB9IGZyb20gXCIuLi90eXBlcy9iYXNld2l0aG9wdGlvbnMubWpzXCI7XG5pbXBvcnQgeyBMb2NhbGUgfSBmcm9tIFwiLi9sb2NhbGUubWpzXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGlvbnMgfSBmcm9tIFwiLi90cmFuc2xhdGlvbnMubWpzXCI7XG5cbmV4cG9ydCB7IFByb3ZpZGVyLCB0cmFuc2xhdGlvbnNMaW5rU3ltYm9sIH07XG5cbi8qKlxuICogQHR5cGUge3N5bWJvbH1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDMuOS4wXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCB0cmFuc2xhdGlvbnNMaW5rU3ltYm9sID0gU3ltYm9sLmZvcihcblx0XCJAc2NodWthaS9tb25zdGVyL2kxOG4vdHJhbnNsYXRpb25zQEBsaW5rXCIsXG4pO1xuXG4vKipcbiAqIEEgcHJvdmlkZXIgbWFrZXMgYSB0cmFuc2xhdGlvbiBvYmplY3QgYXZhaWxhYmxlLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMzA2Nn1cbiAqL1xuY2xhc3MgUHJvdmlkZXIgZXh0ZW5kcyBCYXNlV2l0aE9wdGlvbnMge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDMuMjcuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9pMThuL3Byb3ZpZGVyQEBpbnN0YW5jZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0xvY2FsZXxzdHJpbmd9IGxvY2FsZVxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0Z2V0VHJhbnNsYXRpb25zKGxvY2FsZSkge1xuXHRcdGlmIChsb2NhbGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0bG9jYWxlID0gZ2V0TG9jYWxlT2ZEb2N1bWVudCgpO1xuXHRcdH1cblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRyZXNvbHZlKG5ldyBUcmFuc2xhdGlvbnMobG9jYWxlKSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHJlamVjdChlKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0xvY2FsZXxzdHJpbmd9IGxvY2FsZVxuXHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG5cdCAqIEByZXR1cm4ge1Byb3ZpZGVyfVxuXHQgKi9cblx0YXNzaWduVG9FbGVtZW50KGxvY2FsZSwgZWxlbWVudCkge1xuXHRcdGlmIChsb2NhbGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0bG9jYWxlID0gZ2V0TG9jYWxlT2ZEb2N1bWVudCgpO1xuXHRcdH1cblxuXHRcdGlmICghKGxvY2FsZSBpbnN0YW5jZW9mIExvY2FsZSkpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkxvY2FsZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgTG9jYWxlXCIpO1xuXHRcdH1cblxuXHRcdGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHRcdGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiYm9keVwiKTtcblx0XHR9XG5cblx0XHRpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJFbGVtZW50IGlzIG5vdCBhbiBIVE1MRWxlbWVudFwiKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGlvbnMobG9jYWxlKS50aGVuKChvYmopID0+IHtcblx0XHRcdGxldCB0cmFuc2xhdGlvbnMgPSBudWxsO1xuXHRcdFx0aWYgKGhhc09iamVjdExpbmsoZWxlbWVudCwgdHJhbnNsYXRpb25zTGlua1N5bWJvbCkpIHtcblx0XHRcdFx0Y29uc3Qgb2JqZWN0cyA9IGdldExpbmtlZE9iamVjdHMoZWxlbWVudCwgdHJhbnNsYXRpb25zTGlua1N5bWJvbCk7XG5cdFx0XHRcdGZvciAoY29uc3QgbyBvZiBvYmplY3RzKSB7XG5cdFx0XHRcdFx0aWYgKG8gaW5zdGFuY2VvZiBUcmFuc2xhdGlvbnMpIHtcblx0XHRcdFx0XHRcdHRyYW5zbGF0aW9ucyA9IG87XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoISh0cmFuc2xhdGlvbnMgaW5zdGFuY2VvZiBUcmFuc2xhdGlvbnMpKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiT2JqZWN0IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBUcmFuc2xhdGlvbnNcIik7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0cmFuc2xhdGlvbnMuYXNzaWduVHJhbnNsYXRpb25zKG9iaik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhZGRUb09iamVjdExpbmsoZWxlbWVudCwgdHJhbnNsYXRpb25zTGlua1N5bWJvbCwgb2JqKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG9iajtcblx0XHR9KTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGdldExpbmtlZE9iamVjdHMsIGhhc09iamVjdExpbmsgfSBmcm9tIFwiLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfT0JKRUNUTElOSyB9IGZyb20gXCIuLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnQgfSBmcm9tIFwiLi4vZG9tL3V0aWwubWpzXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQge1xuXHR2YWxpZGF0ZUludGVnZXIsXG5cdHZhbGlkYXRlT2JqZWN0LFxuXHR2YWxpZGF0ZVN0cmluZyxcbn0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgTG9jYWxlLCBwYXJzZUxvY2FsZSB9IGZyb20gXCIuL2xvY2FsZS5tanNcIjtcbmltcG9ydCB7IHRyYW5zbGF0aW9uc0xpbmtTeW1ib2wgfSBmcm9tIFwiLi9wcm92aWRlci5tanNcIjtcblxuZXhwb3J0IHsgVHJhbnNsYXRpb25zLCBnZXREb2N1bWVudFRyYW5zbGF0aW9ucyB9O1xuXG4vKipcbiAqIFdpdGggdGhpcyBjbGFzcyB5b3UgY2FuIG1hbmFnZSB0cmFuc2xhdGlvbnMgYW5kIGFjY2VzcyB0aGUga2V5cy5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvaTE4bi90cmFuc2xhdGlvbnMubWpzXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjEzLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMzA2NlxuICovXG5jbGFzcyBUcmFuc2xhdGlvbnMgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7TG9jYWxlfSBsb2NhbGVcblx0ICovXG5cdGNvbnN0cnVjdG9yKGxvY2FsZSkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHRpZiAobG9jYWxlIGluc3RhbmNlb2YgTG9jYWxlKSB7XG5cdFx0XHR0aGlzLmxvY2FsZSA9IGxvY2FsZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5sb2NhbGUgPSBwYXJzZUxvY2FsZSh2YWxpZGF0ZVN0cmluZyhsb2NhbGUpKTtcblx0XHR9XG5cblx0XHR0aGlzLnN0b3JhZ2UgPSBuZXcgTWFwKCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDMuMjcuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9pMThuL3RyYW5zbGF0aW9uc0BAaW5zdGFuY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogRmV0Y2hlcyBhIHRleHQgdXNpbmcgdGhlIHNwZWNpZmllZCBrZXkuXG5cdCAqIElmIG5vIHN1aXRhYmxlIGtleSBpcyBmb3VuZCwgYGRlZmF1bHRUZXh0YCBpcyB0YWtlbi5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGtleVxuXHQgKiBAcGFyYW0ge3N0cmluZ3x1bmRlZmluZWR9IGRlZmF1bHRUZXh0XG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICogQHRocm93cyB7RXJyb3J9IGtleSBub3QgZm91bmRcblx0ICovXG5cdGdldFRleHQoa2V5LCBkZWZhdWx0VGV4dCkge1xuXHRcdGlmICghdGhpcy5zdG9yYWdlLmhhcyhrZXkpKSB7XG5cdFx0XHRpZiAoZGVmYXVsdFRleHQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYGtleSAke2tleX0gbm90IGZvdW5kYCk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB2YWxpZGF0ZVN0cmluZyhkZWZhdWx0VGV4dCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgciA9IHRoaXMuc3RvcmFnZS5nZXQoa2V5KTtcblx0XHRpZiAoaXNPYmplY3QocikpIHtcblx0XHRcdHJldHVybiB0aGlzLmdldFBsdXJhbFJ1bGVUZXh0KGtleSwgXCJvdGhlclwiLCBkZWZhdWx0VGV4dCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuc3RvcmFnZS5nZXQoa2V5KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIG51bWJlciBgY291bnRgIGNhbiBiZSBwYXNzZWQgdG8gdGhpcyBtZXRob2QuIEluIGFkZGl0aW9uIHRvIGEgbnVtYmVyLCBvbmUgb2YgdGhlIGtleXdvcmRzIGNhbiBhbHNvIGJlIHBhc3NlZCBkaXJlY3RseS5cblx0ICogXCJ6ZXJvXCIsIFwib25lXCIsIFwidHdvXCIsIFwiZmV3XCIsIFwibWFueVwiIGFuZCBcIm90aGVyXCIuIFJlbWVtYmVyOiBub3QgZXZlcnkgbGFuZ3VhZ2UgaGFzIGFsbCBydWxlcy5cblx0ICpcblx0ICogVGhlIGFwcHJvcHJpYXRlIHRleHQgZm9yIHRoaXMgbnVtYmVyIGlzIHRoZW4gc2VsZWN0ZWQuIElmIG5vIHN1aXRhYmxlIGtleSBpcyBmb3VuZCwgYGRlZmF1bHRUZXh0YCBpcyB0YWtlbi5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGtleVxuXHQgKiBAcGFyYW0ge2ludGVnZXJ8c3RyaW5nfSBjb3VudFxuXHQgKiBAcGFyYW0ge3N0cmluZ3x1bmRlZmluZWR9IGRlZmF1bHRUZXh0XG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdGdldFBsdXJhbFJ1bGVUZXh0KGtleSwgY291bnQsIGRlZmF1bHRUZXh0KSB7XG5cdFx0aWYgKCF0aGlzLnN0b3JhZ2UuaGFzKGtleSkpIHtcblx0XHRcdHJldHVybiB2YWxpZGF0ZVN0cmluZyhkZWZhdWx0VGV4dCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgciA9IHZhbGlkYXRlT2JqZWN0KHRoaXMuc3RvcmFnZS5nZXQoa2V5KSk7XG5cblx0XHRsZXQga2V5d29yZDtcblx0XHRpZiAoaXNTdHJpbmcoY291bnQpKSB7XG5cdFx0XHRrZXl3b3JkID0gY291bnQudG9Mb2NhbGVTdHJpbmcoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y291bnQgPSB2YWxpZGF0ZUludGVnZXIoY291bnQpO1xuXHRcdFx0aWYgKGNvdW50ID09PSAwKSB7XG5cdFx0XHRcdC8vIHNwZWNpYWwgaGFuZGxpbmcgZm9yIHplcm8gY291bnRcblx0XHRcdFx0aWYgKHIuaGFzT3duUHJvcGVydHkoXCJ6ZXJvXCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHZhbGlkYXRlU3RyaW5nKHI/Lnplcm8pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGtleXdvcmQgPSBuZXcgSW50bC5QbHVyYWxSdWxlcyh0aGlzLmxvY2FsZS50b1N0cmluZygpKS5zZWxlY3QoXG5cdFx0XHRcdHZhbGlkYXRlSW50ZWdlcihjb3VudCksXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGlmIChyLmhhc093blByb3BlcnR5KGtleXdvcmQpKSB7XG5cdFx0XHRyZXR1cm4gdmFsaWRhdGVTdHJpbmcocltrZXl3b3JkXSk7XG5cdFx0fVxuXG5cdFx0Ly8gQGRlcHJlY2F0ZWQgc2luY2UgMjAyMy0wMy0xNFxuXHRcdC8vIERFRkFVTFRfS0VZIGlzIHVuZGVmaW5lZFxuXHRcdC8vIGlmIChyLmhhc093blByb3BlcnR5KERFRkFVTFRfS0VZKSkge1xuXHRcdC8vICAgICByZXR1cm4gdmFsaWRhdGVTdHJpbmcocltERUZBVUxUX0tFWV0pO1xuXHRcdC8vIH1cblxuXHRcdHJldHVybiB2YWxpZGF0ZVN0cmluZyhkZWZhdWx0VGV4dCk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IGEgdGV4dCBmb3IgYSBrZXlcblx0ICpcblx0ICogYGBgXG5cdCAqIHRyYW5zbGF0aW9ucy5zZXRUZXh0KFwidGV4dDFcIiwgXCJNYWtlIG15IGRheSFcIik7XG5cdCAqIC8vIHBsdXJhbCBydWxlc1xuXHQgKiB0cmFuc2xhdGlvbnMuc2V0VGV4dChcInRleHQ2XCIsIHtcblx0ICogICAgIFwiemVyb1wiOiBcIlRoZXJlIGFyZSBubyBmaWxlcyBvbiBEaXNrLlwiLFxuXHQgKiAgICAgXCJvbmVcIjogXCJUaGVyZSBpcyBvbmUgZmlsZSBvbiBEaXNrLlwiLFxuXHQgKiAgICAgXCJvdGhlclwiOiBcIlRoZXJlIGFyZSBmaWxlcyBvbiBEaXNrLlwiXG5cdCAqICAgICBcImRlZmF1bHRcIjogXCJUaGVyZSBhcmUgZmlsZXMgb24gRGlzay5cIlxuXHQgKiB9KTtcblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcblx0ICogQHBhcmFtIHtzdHJpbmd8b2JqZWN0fSB0ZXh0XG5cdCAqIEByZXR1cm4ge1RyYW5zbGF0aW9uc31cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmcgb3Igb2JqZWN0XG5cdCAqL1xuXHRzZXRUZXh0KGtleSwgdGV4dCkge1xuXHRcdGlmIChpc1N0cmluZyh0ZXh0KSB8fCBpc09iamVjdCh0ZXh0KSkge1xuXHRcdFx0dGhpcy5zdG9yYWdlLnNldCh2YWxpZGF0ZVN0cmluZyhrZXkpLCB0ZXh0KTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ2YWx1ZSBpcyBub3QgYSBzdHJpbmcgb3Igb2JqZWN0XCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIHRyYW5zZmVyIG92ZXJsYXlzIGZyb20gYW4gb2JqZWN0LiBUaGUga2V5cyBhcmUgdHJhbnNmZXJyZWQsIGFuZCB0aGUgdmFsdWVzIGFyZSBlbnRlcmVkXG5cdCAqIGFzIHRleHQuXG5cdCAqXG5cdCAqIFRoZSB2YWx1ZXMgY2FuIGVpdGhlciBiZSBjaGFyYWN0ZXIgc3RyaW5ncyBvciwgaW4gdGhlIGNhc2Ugb2YgdGV4dHMgd2l0aCBwbHVyYWwgZm9ybXMsIG9iamVjdHMuIFRoZSBwbHVyYWwgZm9ybXNcblx0ICogbXVzdCBiZSBzdG9yZWQgYXMgdGV4dCB2aWEgYSBzdGFuZGFyZCBrZXkgXCJ6ZXJvXCIsIFwib25lXCIsIFwidHdvXCIsIFwiZmV3XCIsIFwibWFueVwiIGFuZCBcIm90aGVyXCIuXG5cdCAqXG5cdCAqIEFkZGl0aW9uYWxseSwgdGhlIGtleSBkZWZhdWx0IGNhbiBiZSBzcGVjaWZpZWQsIHdoaWNoIHdpbGwgYmUgdXNlZCBpZiBubyBvdGhlciBrZXkgZml0cy5cblx0ICpcblx0ICogSW4gc29tZSBsYW5ndWFnZXMsIGxpa2UgZm9yIGV4YW1wbGUgaW4gR2VybWFuLCB0aGVyZSBpcyBubyBvd24gbW9yZSBudW1iZXIgYXQgdGhlIHZhbHVlIDAuIEluIHRoZXNlIGxhbmd1YWdlcyxcblx0ICogdGhlIGZ1bmN0aW9uIGFwcGxpZXMgYWRkaXRpb25hbGx5IHplcm8uXG5cdCAqXG5cdCAqIGBgYFxuXHQgKiB0cmFuc2xhdGlvbnMuYXNzaWduVHJhbnNsYXRpb25zKHtcblx0ICogICBcInRleHQxXCI6IFwiTWFrZSBteSBkYXkhXCIsXG5cdCAqICAgXCJ0ZXh0MlwiOiBcIkknbGwgYmUgYmFjayFcIixcblx0ICogICBcInRleHQ2XCI6IHtcblx0ICogICAgIFwiemVyb1wiOiBcIlRoZXJlIGFyZSBubyBmaWxlcyBvbiBEaXNrLlwiLFxuXHQgKiAgICAgXCJvbmVcIjogXCJUaGVyZSBpcyBvbmUgZmlsZSBvbiBEaXNrLlwiLFxuXHQgKiAgICAgXCJvdGhlclwiOiBcIlRoZXJlIGFyZSBmaWxlcyBvbiBEaXNrLlwiXG5cdCAqICAgICBcImRlZmF1bHRcIjogXCJUaGVyZSBhcmUgZmlsZXMgb24gRGlzay5cIlxuXHQgKiB9KTtcblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSB0cmFuc2xhdGlvbnNcblx0ICogQHJldHVybiB7VHJhbnNsYXRpb25zfVxuXHQgKi9cblx0YXNzaWduVHJhbnNsYXRpb25zKHRyYW5zbGF0aW9ucykge1xuXHRcdHZhbGlkYXRlT2JqZWN0KHRyYW5zbGF0aW9ucyk7XG5cblx0XHRpZiAodHJhbnNsYXRpb25zIGluc3RhbmNlb2YgVHJhbnNsYXRpb25zKSB7XG5cdFx0XHR0cmFuc2xhdGlvbnMuc3RvcmFnZS5mb3JFYWNoKCh2LCBrKSA9PiB7XG5cdFx0XHRcdHRoaXMuc2V0VGV4dChrLCB2KTtcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXModHJhbnNsYXRpb25zKSkge1xuXHRcdFx0dGhpcy5zZXRUZXh0KGssIHYpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgdHJhbnNsYXRpb25zIGZvciB0aGUgY3VycmVudCBkb2N1bWVudC5cbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fHVuZGVmaW5lZH0gW2VsZW1lbnRdIC0gRWxlbWVudCB0byBzZWFyY2ggZm9yIHRyYW5zbGF0aW9ucy4gRGVmYXVsdDogZWxlbWVudCB3aXRoIG9iamVjdGxpbmsgQHNjaHVrYWkvbW9uc3Rlci9pMThuL3RyYW5zbGF0aW9uc0BAbGluay5cbiAqIEByZXR1cm4ge1RyYW5zbGF0aW9uc31cbiAqIEB0aHJvd3Mge0Vycm9yfSBFbGVtZW50IGlzIG5vdCBhbiBIVE1MRWxlbWVudC5cbiAqIEB0aHJvd3Mge0Vycm9yfSBDYW5ub3QgZmluZCB0aGUgZWxlbWVudCB3aXRoIHRyYW5zbGF0aW9ucy4gQWRkIHRoZSB0cmFuc2xhdGlvbiBvYmplY3QgdG8gdGhlIGRvY3VtZW50LlxuICogQHRocm93cyB7RXJyb3J9IFRoaXMgZWxlbWVudCBoYXMgbm8gdHJhbnNsYXRpb25zLlxuICogQHRocm93cyB7RXJyb3J9IE1pc3NpbmcgdHJhbnNsYXRpb25zLlxuICovXG5mdW5jdGlvbiBnZXREb2N1bWVudFRyYW5zbGF0aW9ucyhlbGVtZW50KSB7XG5cdGNvbnN0IGQgPSBnZXREb2N1bWVudCgpO1xuXG5cdGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHRlbGVtZW50ID0gZC5xdWVyeVNlbGVjdG9yKFxuXHRcdFx0YFske0FUVFJJQlVURV9PQkpFQ1RMSU5LfX49XCIke3RyYW5zbGF0aW9uc0xpbmtTeW1ib2wudG9TdHJpbmcoKX1cIl1gLFxuXHRcdCk7XG5cdFx0aWYgKGVsZW1lbnQgPT09IG51bGwpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0XCJDYW5ub3QgZmluZCB0aGUgZWxlbWVudCB3aXRoIHRyYW5zbGF0aW9ucy4gQWRkIHRoZSB0cmFuc2xhdGlvbiBvYmplY3QgdG8gdGhlIGRvY3VtZW50LlwiLFxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHRpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiRWxlbWVudCBpcyBub3QgYW4gSFRNTEVsZW1lbnQuXCIpO1xuXHR9XG5cblx0aWYgKCFoYXNPYmplY3RMaW5rKGVsZW1lbnQsIHRyYW5zbGF0aW9uc0xpbmtTeW1ib2wpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhpcyBlbGVtZW50IGhhcyBubyB0cmFuc2xhdGlvbnMuXCIpO1xuXHR9XG5cblx0Y29uc3Qgb2JqID0gZ2V0TGlua2VkT2JqZWN0cyhlbGVtZW50LCB0cmFuc2xhdGlvbnNMaW5rU3ltYm9sKTtcblxuXHRmb3IgKGNvbnN0IHQgb2Ygb2JqKSB7XG5cdFx0aWYgKHQgaW5zdGFuY2VvZiBUcmFuc2xhdGlvbnMpIHtcblx0XHRcdHJldHVybiB0O1xuXHRcdH1cblx0fVxuXG5cdHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgdHJhbnNsYXRpb25zLlwiKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBnZXRMb2NhbGVPZkRvY3VtZW50IH0gZnJvbSBcIi4uL2RvbS9sb2NhbGUubWpzXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWwsIGdldEdsb2JhbE9iamVjdCB9IGZyb20gXCIuLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyBJRCB9IGZyb20gXCIuLi90eXBlcy9pZC5tanNcIjtcbmltcG9ydCB7IGlzQXJyYXksIGlzT2JqZWN0LCBpc1N0cmluZywgaXNQcmltaXRpdmUgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQge1xuXHRnZXREb2N1bWVudFRyYW5zbGF0aW9ucyxcblx0VHJhbnNsYXRpb25zLFxufSBmcm9tIFwiLi4vaTE4bi90cmFuc2xhdGlvbnMubWpzXCI7XG5pbXBvcnQge1xuXHR2YWxpZGF0ZUZ1bmN0aW9uLFxuXHR2YWxpZGF0ZUludGVnZXIsXG5cdHZhbGlkYXRlT2JqZWN0LFxuXHR2YWxpZGF0ZVByaW1pdGl2ZSxcblx0dmFsaWRhdGVTdHJpbmcsXG5cdHZhbGlkYXRlQm9vbGVhbixcbn0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgY2xvbmUgfSBmcm9tIFwiLi4vdXRpbC9jbG9uZS5tanNcIjtcbmltcG9ydCB7IFBhdGhmaW5kZXIgfSBmcm9tIFwiLi9wYXRoZmluZGVyLm1qc1wiO1xuXG5leHBvcnQgeyBUcmFuc2Zvcm1lciB9O1xuXG4vKipcbiAqIFRoZSB0cmFuc2Zvcm1lciBjbGFzcyBpcyBhIHN3aXNzIGFybXkga25pZmUgZm9yIG1hbmlwdWxhdGluZyB2YWx1ZXMuXG4gKlxuICogQSBzaW1wbGUgZXhhbXBsZSBpcyB0aGUgY29udmVyc2lvbiBvZiBhbGwgY2hhcmFjdGVycyB0byBsb3dlcmNhc2UuIGZvciB0aGlzIHB1cnBvc2UgdGhlIGNvbW1hbmQgYHRvbG93ZXJgIG11c3QgYmUgdXNlZC5cbiAqXG4gKiBgYGBqc1xuICogbGV0IHQgPSBuZXcgVHJhbnNmb3JtZXIoJ3RvbG93ZXInKS5ydW4oJ0FCQycpOyAvLyBcdTIxQTYgYWJjXG4gKiBgYGBcbiAqXG4gKiBAZnJhZ21lbnRzIC9mcmFnbWVudHMvbGlicmFyaWVzL3RyYW5zZm9ybWVyXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2xpYnJhcmllcy90cmFuc2Zvcm1lci9zaW1wbGVcbiAqXG4gKiBAc2luY2UgMS41LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBUaGUgdHJhbnNmb3JtZXIgY2xhc3MgaXMgYSBzd2lzcyBhcm15IGtuaWZlIGZvciBtYW5pcHVsYXRpbmcgdmFsdWVzLiBlc3BlY2lhbGx5IGluIGNvbWJpbmF0aW9uIHdpdGggdGhlIHBpcGUsIHByb2Nlc3NpbmcgY2hhaW5zIGNhbiBiZSBidWlsdCB1cC5cbiAqL1xuY2xhc3MgVHJhbnNmb3JtZXIgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBkZWZpbml0aW9uXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihkZWZpbml0aW9uKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLmFyZ3MgPSBkaXNhc3NlbWJsZShkZWZpbml0aW9uKTtcblx0XHR0aGlzLmNvbW1hbmQgPSB0aGlzLmFyZ3Muc2hpZnQoKTtcblx0XHR0aGlzLmNhbGxiYWNrcyA9IG5ldyBNYXAoKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuXHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuXHQgKiBAcGFyYW0ge29iamVjdH0gY29udGV4dFxuXHQgKiBAcmV0dXJuIHtUcmFuc2Zvcm1lcn1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBmdW5jdGlvblxuXHQgKi9cblx0c2V0Q2FsbGJhY2sobmFtZSwgY2FsbGJhY2ssIGNvbnRleHQpIHtcblx0XHR2YWxpZGF0ZVN0cmluZyhuYW1lKTtcblx0XHR2YWxpZGF0ZUZ1bmN0aW9uKGNhbGxiYWNrKTtcblxuXHRcdGlmIChjb250ZXh0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHZhbGlkYXRlT2JqZWN0KGNvbnRleHQpO1xuXHRcdH1cblxuXHRcdHRoaXMuY2FsbGJhY2tzLnNldChuYW1lLCB7XG5cdFx0XHRjYWxsYmFjazogY2FsbGJhY2ssXG5cdFx0XHRjb250ZXh0OiBjb250ZXh0LFxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHsqfVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdW5rbm93biBjb21tYW5kXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdHlwZSBub3Qgc3VwcG9ydGVkXG5cdCAqL1xuXHRydW4odmFsdWUpIHtcblx0XHRyZXR1cm4gdHJhbnNmb3JtLmFwcGx5KHRoaXMsIFt2YWx1ZV0pO1xuXHR9XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21tYW5kXG4gKiBAcmV0dXJuIHthcnJheX1cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGRpc2Fzc2VtYmxlKGNvbW1hbmQpIHtcblx0dmFsaWRhdGVTdHJpbmcoY29tbWFuZCk7XG5cblx0Y29uc3QgcGxhY2Vob2xkZXIgPSBuZXcgTWFwKCk7XG5cdGNvbnN0IHJlZ2V4ID0gLygoPzxwYXR0ZXJuPlxcXFwoPzxjaGFyPi4pKXsxfSkvZ2ltO1xuXG5cdC8vIFRoZSBzZXBhcmF0b3IgZm9yIGFyZ3MgbXVzdCBiZSBlc2NhcGVkXG5cdC8vIHVuZGVmaW5lZCBzdHJpbmcgd2hpY2ggc2hvdWxkIG5vdCBvY2N1ciBub3JtYWxseSBhbmQgaXMgYWxzbyBub3QgYSByZWdleFxuXHRjb25zdCByZXN1bHQgPSBjb21tYW5kLm1hdGNoQWxsKHJlZ2V4KTtcblxuXHRmb3IgKGNvbnN0IG0gb2YgcmVzdWx0KSB7XG5cdFx0Y29uc3QgZyA9IG0/LltcImdyb3Vwc1wiXTtcblx0XHRpZiAoIWlzT2JqZWN0KGcpKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRjb25zdCBwID0gZz8uW1wicGF0dGVyblwiXTtcblx0XHRjb25zdCBjID0gZz8uW1wiY2hhclwiXTtcblxuXHRcdGlmIChwICYmIGMpIHtcblx0XHRcdGNvbnN0IHIgPSBgX18ke25ldyBJRCgpLnRvU3RyaW5nKCl9X19gO1xuXHRcdFx0cGxhY2Vob2xkZXIuc2V0KHIsIGMpO1xuXHRcdFx0Y29tbWFuZCA9IGNvbW1hbmQucmVwbGFjZShwLCByKTtcblx0XHR9XG5cdH1cblx0bGV0IHBhcnRzID0gY29tbWFuZC5zcGxpdChcIjpcIik7XG5cblx0cGFydHMgPSBwYXJ0cy5tYXAoZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0bGV0IHYgPSB2YWx1ZS50cmltKCk7XG5cdFx0Zm9yIChjb25zdCBrIG9mIHBsYWNlaG9sZGVyKSB7XG5cdFx0XHR2ID0gdi5yZXBsYWNlKGtbMF0sIGtbMV0pO1xuXHRcdH1cblx0XHRyZXR1cm4gdjtcblx0fSk7XG5cblx0cmV0dXJuIHBhcnRzO1xufVxuXG4vKipcbiAqIHRyaWVzIHRvIG1ha2UgYSBzdHJpbmcgb3V0IG9mIHZhbHVlIGFuZCBpZiB0aGlzIHN1Y2NlZWRzIHRvIHJldHVybiBpdCBiYWNrXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY29udmVydFRvU3RyaW5nKHZhbHVlKSB7XG5cdGlmIChpc09iamVjdCh2YWx1ZSkgJiYgdmFsdWUuaGFzT3duUHJvcGVydHkoXCJ0b1N0cmluZ1wiKSkge1xuXHRcdHZhbHVlID0gdmFsdWUudG9TdHJpbmcoKTtcblx0fVxuXG5cdHZhbGlkYXRlU3RyaW5nKHZhbHVlKTtcblx0cmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHsqfVxuICogQHByaXZhdGVcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bmtub3duIGNvbW1hbmRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuICogQHRocm93cyB7RXJyb3J9IHR5cGUgbm90IHN1cHBvcnRlZFxuICogQHRocm93cyB7RXJyb3J9IG1pc3Npbmcga2V5IHBhcmFtZXRlclxuICovXG5mdW5jdGlvbiB0cmFuc2Zvcm0odmFsdWUpIHtcblx0Y29uc3QgY29uc29sZSA9IGdldEdsb2JhbE9iamVjdChcImNvbnNvbGVcIik7XG5cblx0Y29uc3QgYXJncyA9IGNsb25lKHRoaXMuYXJncyk7XG5cdGxldCBrZXk7XG5cdGxldCBkZWZhdWx0VmFsdWU7XG5cblx0bGV0IHRyYW5zbGF0aW9ucztcblx0bGV0IGRhdGU7XG5cdGxldCBsb2NhbGU7XG5cdGxldCB0aW1lc3RhbXA7XG5cdGxldCBtYXA7XG5cdGxldCBrZXlWYWx1ZTtcblxuXHRzd2l0Y2ggKHRoaXMuY29tbWFuZCkge1xuXHRcdGNhc2UgXCJzdGF0aWNcIjpcblx0XHRcdHJldHVybiB0aGlzLmFyZ3Muam9pbihcIjpcIik7XG5cblx0XHRjYXNlIFwidG9sb3dlclwiOlxuXHRcdGNhc2UgXCJzdHJ0b2xvd2VyXCI6XG5cdFx0Y2FzZSBcInRvbG93ZXJjYXNlXCI6XG5cdFx0XHR2YWxpZGF0ZVN0cmluZyh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gdmFsdWUudG9Mb3dlckNhc2UoKTtcblxuXHRcdGNhc2UgXCJjb250YWluc1wiOlxuXHRcdFx0aWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWUuaW5jbHVkZXMoYXJnc1swXSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc0FycmF5KHZhbHVlKSkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWUuaW5jbHVkZXMoYXJnc1swXSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc09iamVjdCh2YWx1ZSkpIHtcblx0XHRcdFx0cmV0dXJuIHZhbHVlLmhhc093blByb3BlcnR5KGFyZ3NbMF0pO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRjYXNlIFwiaGFzLWVudHJpZXNcIjpcblx0XHRjYXNlIFwiaGFzZW50cmllc1wiOlxuXHRcdFx0aWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuXHRcdFx0XHRyZXR1cm4gT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCA+IDA7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc0FycmF5KHZhbHVlKSkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWUubGVuZ3RoID4gMDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0Y2FzZSBcImlzdW5kZWZpbmVkXCI6XG5cdFx0Y2FzZSBcImlzLXVuZGVmaW5lZFwiOlxuXHRcdFx0cmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQ7XG5cblx0XHRjYXNlIFwiaXNudWxsXCI6XG5cdFx0Y2FzZSBcImlzLW51bGxcIjpcblx0XHRcdHJldHVybiB2YWx1ZSA9PT0gbnVsbDtcblxuXHRcdGNhc2UgXCJpc3NldFwiOlxuXHRcdGNhc2UgXCJpcy1zZXRcIjpcblx0XHRcdHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsO1xuXG5cdFx0Y2FzZSBcImlzbnVtYmVyXCI6XG5cdFx0Y2FzZSBcImlzLW51bWJlclwiOlxuXHRcdFx0cmV0dXJuIGlzUHJpbWl0aXZlKHZhbHVlKSAmJiAhaXNOYU4odmFsdWUpO1xuXG5cdFx0Y2FzZSBcImlzaW50ZWdlclwiOlxuXHRcdGNhc2UgXCJpcy1pbnRlZ2VyXCI6XG5cdFx0XHRyZXR1cm4gaXNQcmltaXRpdmUodmFsdWUpICYmICFpc05hTih2YWx1ZSkgJiYgdmFsdWUgJSAxID09PSAwO1xuXG5cdFx0Y2FzZSBcImlzZmxvYXRcIjpcblx0XHRjYXNlIFwiaXMtZmxvYXRcIjpcblx0XHRcdHJldHVybiBpc1ByaW1pdGl2ZSh2YWx1ZSkgJiYgIWlzTmFOKHZhbHVlKSAmJiB2YWx1ZSAlIDEgIT09IDA7XG5cblx0XHRjYXNlIFwiaXNvYmplY3RcIjpcblx0XHRjYXNlIFwiaXMtb2JqZWN0XCI6XG5cdFx0XHRyZXR1cm4gaXNPYmplY3QodmFsdWUpO1xuXG5cdFx0Y2FzZSBcImlzYXJyYXlcIjpcblx0XHRjYXNlIFwiaXMtYXJyYXlcIjpcblx0XHRcdHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKTtcblxuXHRcdGNhc2UgXCJub3RcIjpcblx0XHRcdHZhbGlkYXRlQm9vbGVhbih2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gIXZhbHVlO1xuXG5cdFx0Y2FzZSBcInRvdXBwZXJcIjpcblx0XHRjYXNlIFwic3RydG91cHBlclwiOlxuXHRcdGNhc2UgXCJ0b3VwcGVyY2FzZVwiOlxuXHRcdFx0dmFsaWRhdGVTdHJpbmcodmFsdWUpO1xuXHRcdFx0cmV0dXJuIHZhbHVlLnRvVXBwZXJDYXNlKCk7XG5cblx0XHRjYXNlIFwidG9zdHJpbmdcIjpcblx0XHRcdHJldHVybiBgJHt2YWx1ZX1gO1xuXG5cdFx0Y2FzZSBcInRvaW50ZWdlclwiOlxuXHRcdFx0Y29uc3QgbiA9IHBhcnNlSW50KHZhbHVlKTtcblx0XHRcdHZhbGlkYXRlSW50ZWdlcihuKTtcblx0XHRcdHJldHVybiBuO1xuXG5cdFx0Y2FzZSBcInRvLWpzb25cIjpcblx0XHRjYXNlIFwidG9qc29uXCI6XG5cdFx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuXG5cdFx0Y2FzZSBcImZyb20tanNvblwiOlxuXHRcdGNhc2UgXCJmcm9tanNvblwiOlxuXHRcdFx0cmV0dXJuIEpTT04ucGFyc2UodmFsdWUpO1xuXG5cdFx0Y2FzZSBcInRyaW1cIjpcblx0XHRcdHZhbGlkYXRlU3RyaW5nKHZhbHVlKTtcblx0XHRcdHJldHVybiB2YWx1ZS50cmltKCk7XG5cblx0XHRjYXNlIFwicmF3dXJsZW5jb2RlXCI6XG5cdFx0XHR2YWxpZGF0ZVN0cmluZyh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKVxuXHRcdFx0XHQucmVwbGFjZSgvIS9nLCBcIiUyMVwiKVxuXHRcdFx0XHQucmVwbGFjZSgvJy9nLCBcIiUyN1wiKVxuXHRcdFx0XHQucmVwbGFjZSgvXFwoL2csIFwiJTI4XCIpXG5cdFx0XHRcdC5yZXBsYWNlKC9cXCkvZywgXCIlMjlcIilcblx0XHRcdFx0LnJlcGxhY2UoL1xcKi9nLCBcIiUyQVwiKTtcblxuXHRcdGNhc2UgXCJjYWxsXCI6XG5cdFx0XHQvKipcblx0XHRcdCAqIGNhbGxiYWNrLWRlZmluaXRpb25cblx0XHRcdCAqIGZ1bmN0aW9uIGNhbGxiYWNrKHZhbHVlLCAuLi5hcmdzKSB7XG5cdFx0XHQgKiAgIHJldHVybiB2YWx1ZTtcblx0XHRcdCAqIH1cblx0XHRcdCAqL1xuXG5cdFx0XHRsZXQgY2FsbGJhY2s7XG5cdFx0XHRjb25zdCBjYWxsYmFja05hbWUgPSBhcmdzLnNoaWZ0KCk7XG5cdFx0XHRsZXQgY29udGV4dCA9IGdldEdsb2JhbCgpO1xuXG5cdFx0XHRpZiAoaXNPYmplY3QodmFsdWUpICYmIHZhbHVlLmhhc093blByb3BlcnR5KGNhbGxiYWNrTmFtZSkpIHtcblx0XHRcdFx0Y2FsbGJhY2sgPSB2YWx1ZVtjYWxsYmFja05hbWVdO1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLmNhbGxiYWNrcy5oYXMoY2FsbGJhY2tOYW1lKSkge1xuXHRcdFx0XHRjb25zdCBzID0gdGhpcy5jYWxsYmFja3MuZ2V0KGNhbGxiYWNrTmFtZSk7XG5cdFx0XHRcdGNhbGxiYWNrID0gcz8uW1wiY2FsbGJhY2tcIl07XG5cdFx0XHRcdGNvbnRleHQgPSBzPy5bXCJjb250ZXh0XCJdO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0dHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIiAmJlxuXHRcdFx0XHR3aW5kb3cuaGFzT3duUHJvcGVydHkoY2FsbGJhY2tOYW1lKVxuXHRcdFx0KSB7XG5cdFx0XHRcdGNhbGxiYWNrID0gd2luZG93W2NhbGxiYWNrTmFtZV07XG5cdFx0XHR9XG5cdFx0XHR2YWxpZGF0ZUZ1bmN0aW9uKGNhbGxiYWNrKTtcblxuXHRcdFx0YXJncy51bnNoaWZ0KHZhbHVlKTtcblx0XHRcdHJldHVybiBjYWxsYmFjay5jYWxsKGNvbnRleHQsIC4uLmFyZ3MpO1xuXG5cdFx0Y2FzZSBcInBsYWluXCI6XG5cdFx0Y2FzZSBcInBsYWludGV4dFwiOlxuXHRcdFx0dmFsaWRhdGVTdHJpbmcodmFsdWUpO1xuXHRcdFx0Y29uc3QgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyh2YWx1ZSwgXCJ0ZXh0L2h0bWxcIik7XG5cdFx0XHRyZXR1cm4gZG9jLmJvZHkudGV4dENvbnRlbnQgfHwgXCJcIjtcblxuXHRcdGNhc2UgXCJpZlwiOlxuXHRcdGNhc2UgXCI/XCI6XG5cdFx0XHR2YWxpZGF0ZVByaW1pdGl2ZSh2YWx1ZSk7XG5cblx0XHRcdGxldCB0cnVlU3RhdGVtZW50ID0gYXJncy5zaGlmdCgpIHx8IHVuZGVmaW5lZDtcblx0XHRcdGxldCBmYWxzZVN0YXRlbWVudCA9IGFyZ3Muc2hpZnQoKSB8fCB1bmRlZmluZWQ7XG5cblx0XHRcdHRydWVTdGF0ZW1lbnQgPSBjb252ZXJ0U3BlY2lhbFN0cmluZ3ModHJ1ZVN0YXRlbWVudCwgdmFsdWUpO1xuXHRcdFx0ZmFsc2VTdGF0ZW1lbnQgPSBjb252ZXJ0U3BlY2lhbFN0cmluZ3MoZmFsc2VTdGF0ZW1lbnQsIHZhbHVlKTtcblxuXHRcdFx0Y29uc3QgY29uZGl0aW9uID0gZXZhbHVhdGVDb25kaXRpb24odmFsdWUpO1xuXHRcdFx0cmV0dXJuIGNvbmRpdGlvbiA/IHRydWVTdGF0ZW1lbnQgOiBmYWxzZVN0YXRlbWVudDtcblxuXHRcdGNhc2UgXCJ1Y2ZpcnN0XCI6XG5cdFx0XHR2YWxpZGF0ZVN0cmluZyh2YWx1ZSk7XG5cblx0XHRcdGNvbnN0IGZpcnN0Y2hhciA9IHZhbHVlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuIGZpcnN0Y2hhciArIHZhbHVlLnN1YnN0cigxKTtcblx0XHRjYXNlIFwidWN3b3Jkc1wiOlxuXHRcdFx0dmFsaWRhdGVTdHJpbmcodmFsdWUpO1xuXG5cdFx0XHRyZXR1cm4gdmFsdWUucmVwbGFjZShcblx0XHRcdFx0L14oW2EtelxcdTAwRTAtXFx1MDBGQ10pfFxccysoW2EtelxcdTAwRTAtXFx1MDBGQ10pL2csXG5cdFx0XHRcdGZ1bmN0aW9uICh2KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHYudG9VcHBlckNhc2UoKTtcblx0XHRcdFx0fSxcblx0XHRcdCk7XG5cblx0XHRjYXNlIFwiY291bnRcIjpcblx0XHRjYXNlIFwibGVuZ3RoXCI6XG5cdFx0XHRpZiAoXG5cdFx0XHRcdChpc1N0cmluZyh2YWx1ZSkgfHwgaXNPYmplY3QodmFsdWUpIHx8IGlzQXJyYXkodmFsdWUpKSAmJlxuXHRcdFx0XHR2YWx1ZS5oYXNPd25Qcm9wZXJ0eShcImxlbmd0aFwiKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiB2YWx1ZS5sZW5ndGg7XG5cdFx0XHR9XG5cblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoYHVuc3VwcG9ydGVkIHR5cGUgJHt0eXBlb2YgdmFsdWV9YCk7XG5cblx0XHRjYXNlIFwidG8tYmFzZTY0XCI6XG5cdFx0Y2FzZSBcImJ0b2FcIjpcblx0XHRjYXNlIFwiYmFzZTY0XCI6XG5cdFx0XHRyZXR1cm4gYnRvYShjb252ZXJ0VG9TdHJpbmcodmFsdWUpKTtcblxuXHRcdGNhc2UgXCJhdG9iXCI6XG5cdFx0Y2FzZSBcImZyb20tYmFzZTY0XCI6XG5cdFx0XHRyZXR1cm4gYXRvYihjb252ZXJ0VG9TdHJpbmcodmFsdWUpKTtcblxuXHRcdGNhc2UgXCJlbXB0eVwiOlxuXHRcdFx0cmV0dXJuIFwiXCI7XG5cblx0XHRjYXNlIFwidW5kZWZpbmVkXCI6XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0Y2FzZSBcImRlYnVnXCI6XG5cdFx0XHRpZiAoaXNPYmplY3QoY29uc29sZSkpIHtcblx0XHRcdFx0Y29uc29sZS5sb2codmFsdWUpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cblx0XHRjYXNlIFwicHJlZml4XCI6XG5cdFx0XHR2YWxpZGF0ZVN0cmluZyh2YWx1ZSk7XG5cdFx0XHRjb25zdCBwcmVmaXggPSBhcmdzPy5bMF07XG5cdFx0XHRyZXR1cm4gcHJlZml4ICsgdmFsdWU7XG5cblx0XHRjYXNlIFwic3VmZml4XCI6XG5cdFx0XHR2YWxpZGF0ZVN0cmluZyh2YWx1ZSk7XG5cdFx0XHRjb25zdCBzdWZmaXggPSBhcmdzPy5bMF07XG5cdFx0XHRyZXR1cm4gdmFsdWUgKyBzdWZmaXg7XG5cblx0XHRjYXNlIFwidW5pcWlkXCI6XG5cdFx0XHRyZXR1cm4gbmV3IElEKCkudG9TdHJpbmcoKTtcblxuXHRcdGNhc2UgXCJmaXJzdC1rZXlcIjpcblx0XHRjYXNlIFwibGFzdC1rZXlcIjpcblx0XHRjYXNlIFwibnRoLWxhc3Qta2V5XCI6XG5cdFx0Y2FzZSBcIm50aC1rZXlcIjpcblx0XHRcdGlmICghaXNPYmplY3QodmFsdWUpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInR5cGUgbm90IHN1cHBvcnRlZFwiKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlKS5zb3J0KCk7XG5cblx0XHRcdGlmICh0aGlzLmNvbW1hbmQgPT09IFwiZmlyc3Qta2V5XCIpIHtcblx0XHRcdFx0a2V5ID0gMDtcblx0XHRcdH0gZWxzZSBpZiAodGhpcy5jb21tYW5kID09PSBcImxhc3Qta2V5XCIpIHtcblx0XHRcdFx0a2V5ID0ga2V5cy5sZW5ndGggLSAxO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0a2V5ID0gdmFsaWRhdGVJbnRlZ2VyKHBhcnNlSW50KGFyZ3Muc2hpZnQoKSkpO1xuXG5cdFx0XHRcdGlmICh0aGlzLmNvbW1hbmQgPT09IFwibnRoLWxhc3Qta2V5XCIpIHtcblx0XHRcdFx0XHRrZXkgPSBrZXlzLmxlbmd0aCAtIGtleSAtIDE7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0ZGVmYXVsdFZhbHVlID0gYXJncy5zaGlmdCgpIHx8IFwiXCI7XG5cblx0XHRcdGNvbnN0IHVzZUtleSA9IGtleXM/LltrZXldO1xuXG5cdFx0XHRpZiAodmFsdWU/Llt1c2VLZXldKSB7XG5cdFx0XHRcdHJldHVybiB2YWx1ZT8uW3VzZUtleV07XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkZWZhdWx0VmFsdWU7XG5cblx0XHRjYXNlIFwia2V5XCI6XG5cdFx0Y2FzZSBcInByb3BlcnR5XCI6XG5cdFx0Y2FzZSBcImluZGV4XCI6XG5cdFx0XHRrZXkgPSBhcmdzLnNoaWZ0KCkgfHwgdW5kZWZpbmVkO1xuXG5cdFx0XHRpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibWlzc2luZyBrZXkgcGFyYW1ldGVyXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWZhdWx0VmFsdWUgPSBhcmdzLnNoaWZ0KCkgfHwgdW5kZWZpbmVkO1xuXG5cdFx0XHRpZiAodmFsdWUgaW5zdGFuY2VvZiBNYXApIHtcblx0XHRcdFx0aWYgKCF2YWx1ZS5oYXMoa2V5KSkge1xuXHRcdFx0XHRcdHJldHVybiBkZWZhdWx0VmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHZhbHVlLmdldChrZXkpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNPYmplY3QodmFsdWUpIHx8IGlzQXJyYXkodmFsdWUpKSB7XG5cdFx0XHRcdGlmICh2YWx1ZT8uW2tleV0pIHtcblx0XHRcdFx0XHRyZXR1cm4gdmFsdWU/LltrZXldO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGRlZmF1bHRWYWx1ZTtcblx0XHRcdH1cblxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidHlwZSBub3Qgc3VwcG9ydGVkXCIpO1xuXG5cdFx0Y2FzZSBcInBhdGgtZXhpc3RzXCI6XG5cdFx0XHRrZXkgPSBhcmdzLnNoaWZ0KCk7XG5cdFx0XHRpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibWlzc2luZyBrZXkgcGFyYW1ldGVyXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbmV3IFBhdGhmaW5kZXIodmFsdWUpLmV4aXN0cyhrZXkpO1xuXG5cdFx0Y2FzZSBcImNvbmNhdFwiOlxuXHRcdFx0Y29uc3QgcGYyID0gbmV3IFBhdGhmaW5kZXIodmFsdWUpO1xuXHRcdFx0bGV0IGNvbmNhdCA9IFwiXCI7XG5cdFx0XHR3aGlsZSAoYXJncy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGtleSA9IGFyZ3Muc2hpZnQoKTtcblx0XHRcdFx0aWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibWlzc2luZyBrZXkgcGFyYW1ldGVyXCIpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gYWRkIGVtcHR5IHN0cmluZ3Ncblx0XHRcdFx0aWYgKGlzU3RyaW5nKGtleSkgJiYga2V5LnRyaW0oKSA9PT0gXCJcIikge1xuXHRcdFx0XHRcdGNvbmNhdCArPSBrZXk7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIXBmMi5leGlzdHMoa2V5KSkge1xuXHRcdFx0XHRcdGNvbmNhdCArPSBrZXk7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgdiA9IHBmMi5nZXRWaWEoa2V5KTtcblx0XHRcdFx0aWYgKCFpc1ByaW1pdGl2ZSh2KSkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInZhbHVlIGlzIG5vdCBwcmltaXRpdmVcIik7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25jYXQgKz0gdjtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGNvbmNhdDtcblx0XHRjYXNlIFwicGF0aFwiOlxuXHRcdFx0a2V5ID0gYXJncy5zaGlmdCgpO1xuXHRcdFx0aWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIm1pc3Npbmcga2V5IHBhcmFtZXRlclwiKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgcGYgPSBuZXcgUGF0aGZpbmRlcih2YWx1ZSk7XG5cblx0XHRcdGlmICghcGYuZXhpc3RzKGtleSkpIHtcblx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHBmLmdldFZpYShrZXkpO1xuXG5cdFx0Y2FzZSBcInN1YnN0cmluZ1wiOlxuXHRcdFx0dmFsaWRhdGVTdHJpbmcodmFsdWUpO1xuXG5cdFx0XHRjb25zdCBzdGFydCA9IHBhcnNlSW50KGFyZ3NbMF0pIHx8IDA7XG5cdFx0XHRjb25zdCBlbmQgPSAocGFyc2VJbnQoYXJnc1sxXSkgfHwgMCkgKyBzdGFydDtcblxuXHRcdFx0cmV0dXJuIHZhbHVlLnN1YnN0cmluZyhzdGFydCwgZW5kKTtcblxuXHRcdGNhc2UgXCJub3BcIjpcblx0XHRcdHJldHVybiB2YWx1ZTtcblxuXHRcdGNhc2UgXCI/P1wiOlxuXHRcdGNhc2UgXCJkZWZhdWx0XCI6XG5cdFx0XHRpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdGRlZmF1bHRWYWx1ZSA9IGFyZ3Muc2hpZnQoKTtcblx0XHRcdGxldCBkZWZhdWx0VHlwZSA9IGFyZ3Muc2hpZnQoKTtcblx0XHRcdGlmIChkZWZhdWx0VHlwZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGRlZmF1bHRUeXBlID0gXCJzdHJpbmdcIjtcblx0XHRcdH1cblxuXHRcdFx0c3dpdGNoIChkZWZhdWx0VHlwZSkge1xuXHRcdFx0XHRjYXNlIFwiaW50XCI6XG5cdFx0XHRcdGNhc2UgXCJpbnRlZ2VyXCI6XG5cdFx0XHRcdFx0cmV0dXJuIHBhcnNlSW50KGRlZmF1bHRWYWx1ZSk7XG5cdFx0XHRcdGNhc2UgXCJmbG9hdFwiOlxuXHRcdFx0XHRcdHJldHVybiBwYXJzZUZsb2F0KGRlZmF1bHRWYWx1ZSk7XG5cdFx0XHRcdGNhc2UgXCJ1bmRlZmluZWRcIjpcblx0XHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0XHRjYXNlIFwiYm9vbFwiOlxuXHRcdFx0XHRjYXNlIFwiYm9vbGVhblwiOlxuXHRcdFx0XHRcdGRlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQoZGVmYXVsdFZhbHVlICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdFx0XHRcdFx0XHRcdGRlZmF1bHRWYWx1ZSAhPT0gXCJcIiAmJlxuXHRcdFx0XHRcdFx0XHRkZWZhdWx0VmFsdWUgIT09IFwib2ZmXCIgJiZcblx0XHRcdFx0XHRcdFx0ZGVmYXVsdFZhbHVlICE9PSBcImZhbHNlXCIgJiZcblx0XHRcdFx0XHRcdFx0ZGVmYXVsdFZhbHVlICE9PSBcImZhbHNlXCIpIHx8XG5cdFx0XHRcdFx0XHRkZWZhdWx0VmFsdWUgPT09IFwib25cIiB8fFxuXHRcdFx0XHRcdFx0ZGVmYXVsdFZhbHVlID09PSBcInRydWVcIiB8fFxuXHRcdFx0XHRcdFx0ZGVmYXVsdFZhbHVlID09PSBcInRydWVcIlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdGNhc2UgXCJzdHJpbmdcIjpcblx0XHRcdFx0XHRyZXR1cm4gYCR7ZGVmYXVsdFZhbHVlfWA7XG5cdFx0XHRcdGNhc2UgXCJvYmplY3RcIjpcblx0XHRcdFx0XHRyZXR1cm4gSlNPTi5wYXJzZShhdG9iKGRlZmF1bHRWYWx1ZSkpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0eXBlIG5vdCBzdXBwb3J0ZWRcIik7XG5cblx0XHRjYXNlIFwibWFwXCI6XG5cdFx0XHRtYXAgPSBuZXcgTWFwKCk7XG5cdFx0XHR3aGlsZSAoYXJncy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGtleVZhbHVlID0gYXJncy5zaGlmdCgpO1xuXHRcdFx0XHRpZiAoa2V5VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIm1pc3Npbmcga2V5IHBhcmFtZXRlclwiKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGtleVZhbHVlID0ga2V5VmFsdWUuc3BsaXQoXCI9XCIpO1xuXHRcdFx0XHRtYXAuc2V0KGtleVZhbHVlWzBdLCBrZXlWYWx1ZVsxXSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBtYXAuZ2V0KHZhbHVlKTtcblxuXHRcdGNhc2UgXCJlcXVhbHNcIjpcblx0XHRcdGlmIChhcmdzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nIHZhbHVlIHBhcmFtZXRlclwiKTtcblx0XHRcdH1cblxuXHRcdFx0dmFsaWRhdGVQcmltaXRpdmUodmFsdWUpO1xuXG5cdFx0XHRjb25zdCBlcXVhbHNWYWx1ZSA9IGFyZ3Muc2hpZnQoKTtcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBUaGUgaGlzdG9yeSBvZiBcdTIwMUN0eXBlb2YgbnVsbFx1MjAxRFxuXHRcdFx0ICogaHR0cHM6Ly8yYWxpdHkuY29tLzIwMTMvMTAvdHlwZW9mLW51bGwuaHRtbFxuXHRcdFx0ICogSW4gSmF2YVNjcmlwdCwgdHlwZW9mIG51bGwgaXMgJ29iamVjdCcsIHdoaWNoIGluY29ycmVjdGx5IHN1Z2dlc3RzXG5cdFx0XHQgKiB0aGF0IG51bGwgaXMgYW4gb2JqZWN0LlxuXHRcdFx0ICovXG5cdFx0XHRpZiAodmFsdWUgPT09IG51bGwpIHtcblx0XHRcdFx0cmV0dXJuIGVxdWFsc1ZhbHVlID09PSBcIm51bGxcIjtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgdHlwZU9mVmFsdWUgPSB0eXBlb2YgdmFsdWU7XG5cblx0XHRcdHN3aXRjaCAodHlwZU9mVmFsdWUpIHtcblx0XHRcdFx0Y2FzZSBcInN0cmluZ1wiOlxuXHRcdFx0XHRcdHJldHVybiB2YWx1ZSA9PT0gZXF1YWxzVmFsdWU7XG5cdFx0XHRcdGNhc2UgXCJudW1iZXJcIjpcblx0XHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IHBhcnNlRmxvYXQoZXF1YWxzVmFsdWUpO1xuXHRcdFx0XHRjYXNlIFwiYm9vbGVhblwiOlxuXHRcdFx0XHRcdHJldHVybiB2YWx1ZSA9PT0gKGVxdWFsc1ZhbHVlID09PSBcInRydWVcIiB8fCBlcXVhbHNWYWx1ZSA9PT0gXCJvblwiKTtcblx0XHRcdFx0Y2FzZSBcInVuZGVmaW5lZFwiOlxuXHRcdFx0XHRcdHJldHVybiBlcXVhbHNWYWx1ZSA9PT0gXCJ1bmRlZmluZWRcIjtcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0eXBlIG5vdCBzdXBwb3J0ZWRcIik7XG5cdFx0XHR9XG5cblx0XHRjYXNlIFwibW9uZXlcIjpcblx0XHRjYXNlIFwiY3VycmVuY3lcIjpcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGxvY2FsZSA9IGdldExvY2FsZU9mRG9jdW1lbnQoKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCBsb2NhbGUgb3IgbWlzc2luZyBmb3JtYXQgKCR7ZS5tZXNzYWdlfSlgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVmVyd2VuZGVuIHZvbiBSZWdFeHAsIHVtIFdcdTAwRTRocnVuZyB1bmQgQmV0cmFnIHp1IGV4dHJhaGllcmVuXG5cdFx0XHRjb25zdCBtYXRjaCA9IHZhbHVlLm1hdGNoKC9eKFtBLVpdezN9KVtcXHMtXSooXFxkKyhcXC5cXGQrKT8pJC8pO1xuXHRcdFx0aWYgKCFtYXRjaCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGN1cnJlbmN5IGZvcm1hdFwiKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgY3VycmVuY3kgPSBtYXRjaFsxXTtcblx0XHRcdGNvbnN0IGFtb3VudCA9IG1hdGNoWzJdO1xuXG5cdFx0XHRjb25zdCBtYXhpbXVtRnJhY3Rpb25EaWdpdHMgPSBhcmdzPy5bMF0gfHwgMjtcblx0XHRcdGNvbnN0IHJvdW5kaW5nSW5jcmVtZW50ID0gYXJncz8uWzFdIHx8IDU7XG5cblx0XHRcdGNvbnN0IG5mID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KGxvY2FsZS50b1N0cmluZygpLCB7XG5cdFx0XHRcdHN0eWxlOiBcImN1cnJlbmN5XCIsXG5cdFx0XHRcdGN1cnJlbmN5OiBjdXJyZW5jeSxcblx0XHRcdFx0bWF4aW11bUZyYWN0aW9uRGlnaXRzOiBtYXhpbXVtRnJhY3Rpb25EaWdpdHMsXG5cdFx0XHRcdHJvdW5kaW5nSW5jcmVtZW50OiByb3VuZGluZ0luY3JlbWVudCxcblx0XHRcdH0pO1xuXG5cdFx0XHRyZXR1cm4gbmYuZm9ybWF0KGFtb3VudCk7XG5cblx0XHRjYXNlIFwidGltZXN0YW1wXCI6XG5cdFx0XHRkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuXHRcdFx0dGltZXN0YW1wID0gZGF0ZS5nZXRUaW1lKCk7XG5cdFx0XHRpZiAoaXNOYU4odGltZXN0YW1wKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGRhdGVcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGltZXN0YW1wO1xuXG5cdFx0Y2FzZSBcInRpbWVcIjpcblx0XHRcdGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG5cdFx0XHRpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZGF0ZVwiKTtcblx0XHRcdH1cblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0bG9jYWxlID0gZ2V0TG9jYWxlT2ZEb2N1bWVudCgpO1xuXHRcdFx0XHRyZXR1cm4gZGF0ZS50b0xvY2FsZVRpbWVTdHJpbmcobG9jYWxlLnRvU3RyaW5nKCksIHtcblx0XHRcdFx0XHRob3VyMTI6IGZhbHNlLFxuXHRcdFx0XHR9KTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCBsb2NhbGUgb3IgbWlzc2luZyBmb3JtYXQgKCR7ZS5tZXNzYWdlfSlgKTtcblx0XHRcdH1cblxuXHRcdGNhc2UgXCJkYXRldGltZWZvcm1hdFwiOlxuXHRcdFx0ZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcblx0XHRcdGlmIChpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBkYXRlXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBvcHRpb25zID0ge1xuXHRcdFx0XHRkYXRlU3R5bGU6IFwibWVkaXVtXCIsXG5cdFx0XHRcdHRpbWVTdHlsZTogXCJtZWRpdW1cIixcblx0XHRcdFx0aG91cjEyOiBmYWxzZSxcblx0XHRcdH07XG5cblx0XHRcdGlmIChhcmdzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0b3B0aW9ucy5kYXRlU3R5bGUgPSBhcmdzLnNoaWZ0KCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChhcmdzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0b3B0aW9ucy50aW1lU3R5bGUgPSBhcmdzLnNoaWZ0KCk7XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGxvY2FsZSA9IGdldExvY2FsZU9mRG9jdW1lbnQoKS50b1N0cmluZygpO1xuXHRcdFx0XHRyZXR1cm4gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQobG9jYWxlLCBvcHRpb25zKS5mb3JtYXQoZGF0ZSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgbG9jYWxlIG9yIG1pc3NpbmcgZm9ybWF0ICgke2UubWVzc2FnZX0pYCk7XG5cdFx0XHR9XG5cblx0XHRjYXNlIFwiZGF0ZXRpbWVcIjpcblx0XHRcdGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG5cdFx0XHRpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZGF0ZVwiKTtcblx0XHRcdH1cblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0bG9jYWxlID0gZ2V0TG9jYWxlT2ZEb2N1bWVudCgpO1xuXHRcdFx0XHRyZXR1cm4gZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUudG9TdHJpbmcoKSwge1xuXHRcdFx0XHRcdGhvdXIxMjogZmFsc2UsXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGxvY2FsZSBvciBtaXNzaW5nIGZvcm1hdCAoJHtlLm1lc3NhZ2V9KWApO1xuXHRcdFx0fVxuXG5cdFx0Y2FzZSBcImRhdGVcIjpcblx0XHRcdGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG5cdFx0XHRpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZGF0ZVwiKTtcblx0XHRcdH1cblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0bG9jYWxlID0gZ2V0TG9jYWxlT2ZEb2N1bWVudCgpO1xuXHRcdFx0XHRyZXR1cm4gZGF0ZS50b0xvY2FsZURhdGVTdHJpbmcobG9jYWxlLnRvU3RyaW5nKCksIHtcblx0XHRcdFx0XHR5ZWFyOiBcIm51bWVyaWNcIixcblx0XHRcdFx0XHRtb250aDogXCIyLWRpZ2l0XCIsXG5cdFx0XHRcdFx0ZGF5OiBcIjItZGlnaXRcIixcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgbG9jYWxlIG9yIG1pc3NpbmcgZm9ybWF0ICgke2UubWVzc2FnZX0pYCk7XG5cdFx0XHR9XG5cblx0XHRjYXNlIFwieWVhclwiOlxuXHRcdFx0ZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcblx0XHRcdGlmIChpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBkYXRlXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGF0ZS5nZXRGdWxsWWVhcigpO1xuXG5cdFx0Y2FzZSBcIm1vbnRoXCI6XG5cdFx0XHRkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuXHRcdFx0aWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGRhdGVcIik7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkYXRlLmdldE1vbnRoKCkgKyAxO1xuXG5cdFx0Y2FzZSBcImRheVwiOlxuXHRcdFx0ZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcblx0XHRcdGlmIChpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBkYXRlXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGF0ZS5nZXREYXRlKCk7XG5cblx0XHRjYXNlIFwid2Vla2RheVwiOlxuXHRcdFx0ZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcblx0XHRcdGlmIChpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBkYXRlXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGF0ZS5nZXREYXkoKTtcblxuXHRcdGNhc2UgXCJob3VyXCI6XG5cdFx0Y2FzZSBcImhvdXJzXCI6XG5cdFx0XHRkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuXHRcdFx0aWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGRhdGVcIik7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkYXRlLmdldEhvdXJzKCk7XG5cblx0XHRjYXNlIFwibWludXRlXCI6XG5cdFx0Y2FzZSBcIm1pbnV0ZXNcIjpcblx0XHRcdGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG5cdFx0XHRpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZGF0ZVwiKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRhdGUuZ2V0TWludXRlcygpO1xuXG5cdFx0Y2FzZSBcInNlY29uZFwiOlxuXHRcdGNhc2UgXCJzZWNvbmRzXCI6XG5cdFx0XHRkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuXHRcdFx0aWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGRhdGVcIik7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkYXRlLmdldFNlY29uZHMoKTtcblxuXHRcdGNhc2UgXCJpMThuXCI6XG5cdFx0Y2FzZSBcInRyYW5zbGF0aW9uXCI6XG5cdFx0XHR0cmFuc2xhdGlvbnMgPSBnZXREb2N1bWVudFRyYW5zbGF0aW9ucygpO1xuXHRcdFx0aWYgKCEodHJhbnNsYXRpb25zIGluc3RhbmNlb2YgVHJhbnNsYXRpb25zKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nIHRyYW5zbGF0aW9uc1wiKTtcblx0XHRcdH1cblxuXHRcdFx0a2V5ID0gYXJncy5zaGlmdCgpIHx8IHVuZGVmaW5lZDtcblx0XHRcdGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRrZXkgPSB2YWx1ZTtcblx0XHRcdH1cblxuXHRcdFx0ZGVmYXVsdFZhbHVlID0gYXJncy5zaGlmdCgpIHx8IHVuZGVmaW5lZDtcblxuXHRcdFx0ZGVmYXVsdFZhbHVlID0gY29udmVydFNwZWNpYWxTdHJpbmdzKGRlZmF1bHRWYWx1ZSwgdmFsdWUpO1xuXG5cdFx0XHRyZXR1cm4gdHJhbnNsYXRpb25zLmdldFRleHQoa2V5LCBkZWZhdWx0VmFsdWUpO1xuXG5cdFx0Y2FzZSBcInNldC10b2dnbGVcIjpcblx0XHRjYXNlIFwic2V0LXNldFwiOlxuXHRcdGNhc2UgXCJzZXQtcmVtb3ZlXCI6XG5cdFx0XHRjb25zdCBtb2RpZmllciA9IGFyZ3Muc2hpZnQoKTtcblx0XHRcdGxldCBkZWxpbWl0ZXIgPSBhcmdzLnNoaWZ0KCk7XG5cdFx0XHRpZiAoZGVsaW1pdGVyID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0ZGVsaW1pdGVyID0gXCIgXCI7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHNldCA9IG5ldyBTZXQodmFsdWUuc3BsaXQoZGVsaW1pdGVyKSk7XG5cdFx0XHRjb25zdCB0b2dnbGUgPSBuZXcgU2V0KG1vZGlmaWVyLnNwbGl0KGRlbGltaXRlcikpO1xuXHRcdFx0aWYgKHRoaXMuY29tbWFuZCA9PT0gXCJzZXQtdG9nZ2xlXCIpIHtcblx0XHRcdFx0Zm9yIChjb25zdCB0IG9mIHRvZ2dsZSkge1xuXHRcdFx0XHRcdGlmIChzZXQuaGFzKHQpKSB7XG5cdFx0XHRcdFx0XHRzZXQuZGVsZXRlKHQpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzZXQuYWRkKHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmICh0aGlzLmNvbW1hbmQgPT09IFwic2V0LXNldFwiKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgdCBvZiB0b2dnbGUpIHtcblx0XHRcdFx0XHRzZXQuYWRkKHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMuY29tbWFuZCA9PT0gXCJzZXQtcmVtb3ZlXCIpIHtcblx0XHRcdFx0Zm9yIChjb25zdCB0IG9mIHRvZ2dsZSkge1xuXHRcdFx0XHRcdHNldC5kZWxldGUodCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBBcnJheS5mcm9tKHNldCkuam9pbihkZWxpbWl0ZXIpO1xuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdHRocm93IG5ldyBFcnJvcihgdW5rbm93biBjb21tYW5kICR7dGhpcy5jb21tYW5kfWApO1xuXHR9XG59XG5cbi8qKlxuICogY29udmVydHMgc3BlY2lhbCBzdHJpbmdzIHRvIHRoZWlyIHZhbHVlc1xuICogQHByaXZhdGVcbiAqIEBwYXJhbSBpbnB1dFxuICogQHBhcmFtIHZhbHVlXG4gKiBAcmV0dXJuIHt1bmRlZmluZWR8KnxudWxsfHN0cmluZ31cbiAqL1xuZnVuY3Rpb24gY29udmVydFNwZWNpYWxTdHJpbmdzKGlucHV0LCB2YWx1ZSkge1xuXHRzd2l0Y2ggKGlucHV0KSB7XG5cdFx0Y2FzZSBcInZhbHVlXCI6XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0Y2FzZSBcIlxcXFx2YWx1ZVwiOlxuXHRcdFx0cmV0dXJuIFwidmFsdWVcIjtcblx0XHRjYXNlIFwiXFxcXHVuZGVmaW5lZFwiOlxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRjYXNlIFwiXFxcXG51bGxcIjpcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRyZXR1cm4gaW5wdXQ7XG5cdH1cbn1cblxuLyoqXG4gKiBjaGVja3MgaWYgYSB2YWx1ZSBpcyB0cnVlIG9yIG5vdFxuICogQHBhcmFtIHZhbHVlXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBldmFsdWF0ZUNvbmRpdGlvbih2YWx1ZSkge1xuXHRjb25zdCBsb3dlclZhbHVlID0gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiID8gdmFsdWUudG9Mb3dlckNhc2UoKSA6IHZhbHVlO1xuXG5cdHJldHVybiAoXG5cdFx0KHZhbHVlICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdHZhbHVlICE9PSBudWxsICYmXG5cdFx0XHR2YWx1ZSAhPT0gXCJcIiAmJlxuXHRcdFx0bG93ZXJWYWx1ZSAhPT0gXCJvZmZcIiAmJlxuXHRcdFx0bG93ZXJWYWx1ZSAhPT0gXCJmYWxzZVwiICYmXG5cdFx0XHR2YWx1ZSAhPT0gZmFsc2UpIHx8XG5cdFx0bG93ZXJWYWx1ZSA9PT0gXCJvblwiIHx8XG5cdFx0bG93ZXJWYWx1ZSA9PT0gXCJ0cnVlXCIgfHxcblx0XHR2YWx1ZSA9PT0gdHJ1ZVxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgVHJhbnNmb3JtZXIgfSBmcm9tIFwiLi90cmFuc2Zvcm1lci5tanNcIjtcblxuZXhwb3J0IHsgUGlwZSB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBERUxJTUlURVIgPSBcInxcIjtcblxuLyoqXG4gKiBUaGUgcGlwZSBjbGFzcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBjb21iaW5lIHNldmVyYWwgcHJvY2Vzc2luZyBzdGVwcy5cbiAqXG4gKiBBIHBpcGUgY29uc2lzdHMgb2YgY29tbWFuZHMgd2hvc2UgaW5wdXQgYW5kIG91dHB1dCBhcmUgY29ubmVjdGVkIHdpdGggdGhlIHBpcGUgc3ltYm9sIGB8YC5cbiAqXG4gKiBXaXRoIHRoZSBQaXBlLCBwcm9jZXNzaW5nIHN0ZXBzIGNhbiBiZSBjb21iaW5lZC4gSGVyZSwgdGhlIHZhbHVlIG9mIGFuIG9iamVjdCBpcyBhY2Nlc3NlZCB2aWEgdGhlIHBhdGhmaW5kZXIgKHBhdGggY29tbWFuZCkuXG4gKiB0aGUgd29yZCBpcyB0aGVuIGNvbnZlcnRlZCB0byB1cHBlcmNhc2UgbGV0dGVycyBhbmQgYSBwcmVmaXggSGVsbG8gaXMgYWRkZWQuIHRoZSB0d28gYmFja3NsYXNoIHNhZmUgdGhlIHNwYWNlIGNoYXIuXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2xpYnJhcmllcy9waXBlL2V4YW1wbGUtMS9cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IFRoZSBwaXBlIGNsYXNzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGNvbWJpbmUgc2V2ZXJhbCBwcm9jZXNzaW5nIHN0ZXBzLlxuICovXG5jbGFzcyBQaXBlIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcGlwZSBhIHBpcGUgY29uc2lzdHMgb2YgY29tbWFuZHMgd2hvc2UgaW5wdXQgYW5kIG91dHB1dCBhcmUgY29ubmVjdGVkIHdpdGggdGhlIHBpcGUgc3ltYm9sIGB8YC5cblx0ICogQHRocm93cyB7VHlwZUVycm9yfVxuXHQgKi9cblx0Y29uc3RydWN0b3IocGlwZSkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dmFsaWRhdGVTdHJpbmcocGlwZSk7XG5cblx0XHR0aGlzLnBpcGUgPSBwaXBlLnNwbGl0KERFTElNSVRFUikubWFwKCh2KSA9PiB7XG5cdFx0XHRyZXR1cm4gbmV3IFRyYW5zZm9ybWVyKHYpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG5cdCAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBjb250ZXh0XG5cdCAqIEByZXR1cm4ge1RyYW5zZm9ybWVyfVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIGZ1bmN0aW9uXG5cdCAqL1xuXHRzZXRDYWxsYmFjayhuYW1lLCBjYWxsYmFjaywgY29udGV4dCkge1xuXHRcdGZvciAoY29uc3QgWywgdF0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5waXBlKSkge1xuXHRcdFx0dC5zZXRDYWxsYmFjayhuYW1lLCBjYWxsYmFjaywgY29udGV4dCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogcnVuIGEgcGlwZVxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IHZhbHVlXG5cdCAqIEByZXR1cm4geyp9XG5cdCAqL1xuXHRydW4odmFsdWUpIHtcblx0XHRyZXR1cm4gdGhpcy5waXBlLnJlZHVjZSgoYWNjdW11bGF0b3IsIHRyYW5zZm9ybWVyLCBjdXJyZW50SW5kZXgsIGFycmF5KSA9PiB7XG5cdFx0XHRyZXR1cm4gdHJhbnNmb3JtZXIucnVuKGFjY3VtdWxhdG9yKTtcblx0XHR9LCB2YWx1ZSk7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQgeyBQaXBlIH0gZnJvbSBcIi4uL2RhdGEvcGlwZS5tanNcIjtcblxuaW1wb3J0IHsgQmFzZVdpdGhPcHRpb25zIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2V3aXRob3B0aW9ucy5tanNcIjtcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZyB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlQXJyYXksIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBGb3JtYXR0ZXIgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgaW50ZXJuYWxPYmplY3RTeW1ib2wgPSBTeW1ib2woXCJpbnRlcm5hbE9iamVjdFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgd2F0Y2hkb2dTeW1ib2wgPSBTeW1ib2woXCJ3YXRjaGRvZ1wiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgbWFya2VyT3BlbkluZGV4U3ltYm9sID0gU3ltYm9sKFwibWFya2VyT3BlbkluZGV4XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBtYXJrZXJDbG9zZUluZGV4U3ltYm9sID0gU3ltYm9sKFwibWFya2VyY2xvc2VJbmRleFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgd29ya2luZ0RhdGFTeW1ib2wgPSBTeW1ib2woXCJ3b3JraW5nRGF0YVwiKTtcblxuLyoqXG4gKiBNZXNzYWdlcyBjYW4gYmUgZm9ybWF0dGVkIHdpdGggdGhlIGZvcm1hdHRlci4gVG8gZG8gdGhpcywgYW4gb2JqZWN0IHdpdGggdGhlIHZhbHVlcyBtdXN0IGJlIHBhc3NlZCB0byB0aGUgZm9ybWF0dGVyLiBUaGUgbWVzc2FnZSBjYW4gdGhlbiBjb250YWluIHBsYWNlaG9sZGVycy5cbiAqXG4gKiBMb29rIGF0IHRoZSBleGFtcGxlIGJlbG93LiBUaGUgcGxhY2Vob2xkZXJzIHVzZSB0aGUgbG9naWMgb2YgUGlwZS5cbiAqXG4gKiAjIyBNYXJrZXIgaW4gbWFya2VyXG4gKlxuICogTWFya2VycyBjYW4gYmUgbmVzdGVkLiBIZXJlLCB0aGUgaW5uZXIgbWFya2VyIGlzIHJlc29sdmVkIGZpcnN0IGAke3N1YmtleX0gXHUyMUE2IDEgPSAke215a2V5Mn1gIGFuZCB0aGVuIHRoZSBvdXRlciBtYXJrZXIgYCR7bXlrZXkyfWAuXG4gKlxuICogYGBgXG4gKiBjb25zdCB0ZXh0ID0gJyR7bXlrZXkke3N1YmtleX19JztcbiAqIGxldCBvYmogPSB7XG4gKiAgbXlrZXkyOiBcIjFcIixcbiAqICBzdWJrZXk6IFwiMlwiXG4gKiB9O1xuICpcbiAqIG5ldyBGb3JtYXR0ZXIob2JqKS5mb3JtYXQodGV4dCk7XG4gKiAvLyBcdTIxQTYgMVxuICogYGBgXG4gKlxuICogIyMgQ2FsbGJhY2tzXG4gKlxuICogVGhlIHZhbHVlcyBpbiBhIGZvcm1hdHRlciBjYW4gYmUgYWRqdXN0ZWQgdmlhIHRoZSBjb21tYW5kcyBvZiB0aGUgYFRyYW5zZm9ybWVyYCBvciB0aGVgUGlwZWAuXG4gKiBUaGVyZSBpcyBhbHNvIHRoZSBwb3NzaWJpbGl0eSB0byB1c2UgY2FsbGJhY2tzLlxuICpcbiAqIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBGb3JtYXR0ZXIoe3g6ICcxJ30sIHtcbiAqICAgICAgICAgICAgICAgIGNhbGxiYWNrczoge1xuICogICAgICAgICAgICAgICAgICAgIHF1b3RlOiAodmFsdWUpID0+IHtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdcIicgKyB2YWx1ZSArICdcIidcbiAqICAgICAgICAgICAgICAgICAgICB9XG4gKiAgICAgICAgICAgICAgICB9XG4gKiAgICAgICAgICAgIH0pO1xuICpcbiAqIGZvcm1hdHRlci5mb3JtYXQoJyR7eCB8IGNhbGw6cXVvdGV9JykpXG4gKiAvLyBcdTIxQTYgXCIxXCJcbiAqXG4gKiAjIyBNYXJrZXIgd2l0aCBwYXJhbWV0ZXJcbiAqXG4gKiBBIHN0cmluZyBjYW4gYWxzbyBicmluZyBpdHMgb3duIHZhbHVlcy4gVGhlc2UgbXVzdCB0aGVuIGJlIHNlcGFyYXRlZCBmcm9tIHRoZSBrZXkgYnkgYSBzZXBhcmF0b3IgYDo6YC5cbiAqIFRoZSB2YWx1ZXMgdGhlbXNlbHZlcyBtdXN0IGJlIHNwZWNpZmllZCBpbiBrZXkvdmFsdWUgcGFpcnMuIFRoZSBrZXkgbXVzdCBiZSBzZXBhcmF0ZWQgZnJvbSB0aGUgdmFsdWUgYnkgYSBzZXBhcmF0b3IgYD1gLlxuICpcbiAqIFdoZW4gdXNpbmcgYSBwaXBlLCB5b3UgbXVzdCBwYXkgYXR0ZW50aW9uIHRvIHRoZSBzZXBhcmF0b3JzLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogaW1wb3J0IHtGb3JtYXR0ZXJ9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL3RleHQvZm9ybWF0dGVyLm1qcyc7XG4gKlxuICogbmV3IEZvcm1hdHRlcih7XG4gKiAgICAgICBhOiB7XG4gKiAgICAgICAgICAgYjoge1xuICogICAgICAgICAgICAgICBjOiBcIkhlbGxvXCJcbiAqICAgICAgICAgICB9LFxuICogICAgICAgICAgIGQ6IFwid29ybGRcIixcbiAqICAgICAgIH1cbiAqICAgfSkuZm9ybWF0KFwiJHthLmIuY30gJHthLmQgfCB1Y2ZpcnN0fSFcIik7IC8vIHdpdGggcGlwZVxuICpcbiAqIC8vIFx1MjFBNiBIZWxsbyBXb3JsZCFcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjEyLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKi9cbmNsYXNzIEZvcm1hdHRlciBleHRlbmRzIEJhc2VXaXRoT3B0aW9ucyB7XG5cdC8qKlxuXHQgKiBEZWZhdWx0IHZhbHVlcyBmb3IgdGhlIG1hcmtlcnMgYXJlIGAke2AgYW5kIGB9YFxuXHQgKlxuXHQgKiBAcGFyYW0gb2JqZWN0XG5cdCAqIEBwYXJhbSBvcHRpb25zXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihvYmplY3QsIG9wdGlvbnMpIHtcblx0XHRzdXBlcihvcHRpb25zKTtcblx0XHR0aGlzW2ludGVybmFsT2JqZWN0U3ltYm9sXSA9IG9iamVjdCB8fCB7fTtcblx0XHR0aGlzW21hcmtlck9wZW5JbmRleFN5bWJvbF0gPSAwO1xuXHRcdHRoaXNbbWFya2VyQ2xvc2VJbmRleFN5bWJvbF0gPSAwO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBtYXJrZXJcblx0ICogQHByb3BlcnR5IHthcnJheX0gbWFya2VyLm9wZW49W1wiJHtcIl1cblx0ICogQHByb3BlcnR5IHthcnJheX0gbWFya2VyLmNsb3NlPVtcIiR7XCJdXG5cdCAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBwYXJhbWV0ZXJcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHBhcmFtZXRlci5kZWxpbWl0ZXI9XCI6OlwiXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwYXJhbWV0ZXIuYXNzaWdubWVudD1cIj1cIlxuXHQgKiBAcHJvcGVydHkge29iamVjdH0gY2FsbGJhY2tzPXt9XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIGV4dGVuZCh7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdG1hcmtlcjoge1xuXHRcdFx0XHRvcGVuOiBbXCIke1wiXSxcblx0XHRcdFx0Y2xvc2U6IFtcIn1cIl0sXG5cdFx0XHR9LFxuXHRcdFx0cGFyYW1ldGVyOiB7XG5cdFx0XHRcdGRlbGltaXRlcjogXCI6OlwiLFxuXHRcdFx0XHRhc3NpZ25tZW50OiBcIj1cIixcblx0XHRcdH0sXG5cdFx0XHRjYWxsYmFja3M6IHt9LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBuZXcgUGFyYW1ldGVyIENoYXJhY3RlclxuXHQgKlxuXHQgKiBEZWZhdWx0IHZhbHVlcyBmb3IgdGhlIGNoYXJzIGFyZSBgOjpgIGFuZCBgPWBcblx0ICpcblx0ICogYGBgXG5cdCAqIGZvcm1hdHRlci5zZXRQYXJhbWV0ZXJDaGFycygnIycpO1xuXHQgKiBmb3JtYXR0ZXIuc2V0UGFyYW1ldGVyQ2hhcnMoJ1snLCddJyk7XG5cdCAqIGZvcm1hdHRlci5zZXRQYXJhbWV0ZXJDaGFycygnaTE4bnsnLCd9Jyk7XG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gZGVsaW1pdGVyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBhc3NpZ25tZW50XG5cdCAqIEByZXR1cm4ge0Zvcm1hdHRlcn1cblx0ICogQHNpbmNlIDEuMjQuMFxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKi9cblx0c2V0UGFyYW1ldGVyQ2hhcnMoZGVsaW1pdGVyLCBhc3NpZ25tZW50KSB7XG5cdFx0aWYgKGRlbGltaXRlciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXVtcInBhcmFtZXRlclwiXVtcImRlbGltaXRlclwiXSA9XG5cdFx0XHRcdHZhbGlkYXRlU3RyaW5nKGRlbGltaXRlcik7XG5cdFx0fVxuXG5cdFx0aWYgKGFzc2lnbm1lbnQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJwYXJhbWV0ZXJcIl1bXCJhc3NpZ25tZW50XCJdID1cblx0XHRcdFx0dmFsaWRhdGVTdHJpbmcoYXNzaWdubWVudCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IG5ldyBNYXJrZXJcblx0ICpcblx0ICogRGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBtYXJrZXJzIGFyZSBgJHtgIGFuZCBgfWBcblx0ICpcblx0ICogYGBgXG5cdCAqIGZvcm1hdHRlci5zZXRNYXJrZXIoJyMnKTsgLy8gb3BlbiBhbmQgY2xvc2UgYXJlIGJvdGggI1xuXHQgKiBmb3JtYXR0ZXIuc2V0TWFya2VyKCdbJywnXScpO1xuXHQgKiBmb3JtYXR0ZXIuc2V0TWFya2VyKCdpMThueycsJ30nKTtcblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwYXJhbSB7YXJyYXl8c3RyaW5nfSBvcGVuXG5cdCAqIEBwYXJhbSB7YXJyYXl8c3RyaW5nfHVuZGVmaW5lZH0gY2xvc2Vcblx0ICogQHJldHVybiB7Rm9ybWF0dGVyfVxuXHQgKiBAc2luY2UgMS4xMi4wXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqL1xuXHRzZXRNYXJrZXIob3BlbiwgY2xvc2UpIHtcblx0XHRpZiAoY2xvc2UgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y2xvc2UgPSBvcGVuO1xuXHRcdH1cblxuXHRcdGlmIChpc1N0cmluZyhvcGVuKSkgb3BlbiA9IFtvcGVuXTtcblx0XHRpZiAoaXNTdHJpbmcoY2xvc2UpKSBjbG9zZSA9IFtjbG9zZV07XG5cblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXVtcIm1hcmtlclwiXVtcIm9wZW5cIl0gPSB2YWxpZGF0ZUFycmF5KG9wZW4pO1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wibWFya2VyXCJdW1wiY2xvc2VcIl0gPSB2YWxpZGF0ZUFycmF5KGNsb3NlKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0b28gZGVlcCBuZXN0aW5nXG5cdCAqL1xuXHRmb3JtYXQodGV4dCkge1xuXHRcdHRoaXNbd2F0Y2hkb2dTeW1ib2xdID0gMDtcblx0XHR0aGlzW21hcmtlck9wZW5JbmRleFN5bWJvbF0gPSAwO1xuXHRcdHRoaXNbbWFya2VyQ2xvc2VJbmRleFN5bWJvbF0gPSAwO1xuXHRcdHRoaXNbd29ya2luZ0RhdGFTeW1ib2xdID0ge307XG5cdFx0cmV0dXJuIGZvcm1hdC5jYWxsKHRoaXMsIHRleHQpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZm9ybWF0KHRleHQpIHtcblx0dGhpc1t3YXRjaGRvZ1N5bWJvbF0rKztcblx0aWYgKHRoaXNbd2F0Y2hkb2dTeW1ib2xdID4gMjApIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0b28gZGVlcCBuZXN0aW5nXCIpO1xuXHR9XG5cblx0Y29uc3Qgb3Blbk1hcmtlciA9XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJtYXJrZXJcIl1bXCJvcGVuXCJdPy5bdGhpc1ttYXJrZXJPcGVuSW5kZXhTeW1ib2xdXTtcblx0Y29uc3QgY2xvc2VNYXJrZXIgPVxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wibWFya2VyXCJdW1wiY2xvc2VcIl0/Llt0aGlzW21hcmtlckNsb3NlSW5kZXhTeW1ib2xdXTtcblxuXHQvLyBjb250YWlucyBubyBwbGFjZWhvbGRlcnNcblx0aWYgKHRleHQuaW5kZXhPZihvcGVuTWFya2VyKSA9PT0gLTEgfHwgdGV4dC5pbmRleE9mKGNsb3NlTWFya2VyKSA9PT0gLTEpIHtcblx0XHRyZXR1cm4gdGV4dDtcblx0fVxuXG5cdGxldCByZXN1bHQgPSB0b2tlbml6ZS5jYWxsKFxuXHRcdHRoaXMsXG5cdFx0dmFsaWRhdGVTdHJpbmcodGV4dCksXG5cdFx0b3Blbk1hcmtlcixcblx0XHRjbG9zZU1hcmtlcixcblx0KTtcblxuXHRpZiAoXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJtYXJrZXJcIl1bXCJvcGVuXCJdPy5bdGhpc1ttYXJrZXJPcGVuSW5kZXhTeW1ib2xdICsgMV1cblx0KSB7XG5cdFx0dGhpc1ttYXJrZXJPcGVuSW5kZXhTeW1ib2xdKys7XG5cdH1cblxuXHRpZiAoXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJtYXJrZXJcIl1bXCJjbG9zZVwiXT8uW3RoaXNbbWFya2VyQ2xvc2VJbmRleFN5bWJvbF0gKyAxXVxuXHQpIHtcblx0XHR0aGlzW21hcmtlckNsb3NlSW5kZXhTeW1ib2xdKys7XG5cdH1cblxuXHRyZXN1bHQgPSBmb3JtYXQuY2FsbCh0aGlzLCByZXN1bHQpO1xuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTIuMFxuICogQHBhcmFtIHRleHRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemUodGV4dCwgb3Blbk1hcmtlciwgY2xvc2VNYXJrZXIpIHtcblx0Y29uc3QgZm9ybWF0dGVkID0gW107XG5cblx0Y29uc3QgcGFyYW1ldGVyQXNzaWdubWVudCA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wicGFyYW1ldGVyXCJdW1wiYXNzaWdubWVudFwiXTtcblx0Y29uc3QgcGFyYW1ldGVyRGVsaW1pdGVyID0gdGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJwYXJhbWV0ZXJcIl1bXCJkZWxpbWl0ZXJcIl07XG5cdGNvbnN0IGNhbGxiYWNrcyA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wiY2FsbGJhY2tzXCJdO1xuXG5cdHdoaWxlICh0cnVlKSB7XG5cdFx0Y29uc3Qgc3RhcnRJbmRleCA9IHRleHQuaW5kZXhPZihvcGVuTWFya2VyKTtcblx0XHQvLyBubyBtYXJrZXJcblx0XHRpZiAoc3RhcnRJbmRleCA9PT0gLTEpIHtcblx0XHRcdGZvcm1hdHRlZC5wdXNoKHRleHQpO1xuXHRcdFx0YnJlYWs7XG5cdFx0fSBlbHNlIGlmIChzdGFydEluZGV4ID4gMCkge1xuXHRcdFx0Zm9ybWF0dGVkLnB1c2godGV4dC5zdWJzdHJpbmcoMCwgc3RhcnRJbmRleCkpO1xuXHRcdFx0dGV4dCA9IHRleHQuc3Vic3RyaW5nKHN0YXJ0SW5kZXgpO1xuXHRcdH1cblxuXHRcdGxldCBlbmRJbmRleCA9IHRleHQuc3Vic3RyaW5nKG9wZW5NYXJrZXIubGVuZ3RoKS5pbmRleE9mKGNsb3NlTWFya2VyKTtcblx0XHRpZiAoZW5kSW5kZXggIT09IC0xKSBlbmRJbmRleCArPSBvcGVuTWFya2VyLmxlbmd0aDtcblx0XHRsZXQgaW5zaWRlU3RhcnRJbmRleCA9IHRleHRcblx0XHRcdC5zdWJzdHJpbmcob3Blbk1hcmtlci5sZW5ndGgpXG5cdFx0XHQuaW5kZXhPZihvcGVuTWFya2VyKTtcblx0XHRpZiAoaW5zaWRlU3RhcnRJbmRleCAhPT0gLTEpIHtcblx0XHRcdGluc2lkZVN0YXJ0SW5kZXggKz0gb3Blbk1hcmtlci5sZW5ndGg7XG5cdFx0XHRpZiAoaW5zaWRlU3RhcnRJbmRleCA8IGVuZEluZGV4KSB7XG5cdFx0XHRcdGNvbnN0IHJlc3VsdCA9IHRva2VuaXplLmNhbGwoXG5cdFx0XHRcdFx0dGhpcyxcblx0XHRcdFx0XHR0ZXh0LnN1YnN0cmluZyhpbnNpZGVTdGFydEluZGV4KSxcblx0XHRcdFx0XHRvcGVuTWFya2VyLFxuXHRcdFx0XHRcdGNsb3NlTWFya2VyLFxuXHRcdFx0XHQpO1xuXHRcdFx0XHR0ZXh0ID0gdGV4dC5zdWJzdHJpbmcoMCwgaW5zaWRlU3RhcnRJbmRleCkgKyByZXN1bHQ7XG5cdFx0XHRcdGVuZEluZGV4ID0gdGV4dC5zdWJzdHJpbmcob3Blbk1hcmtlci5sZW5ndGgpLmluZGV4T2YoY2xvc2VNYXJrZXIpO1xuXHRcdFx0XHRpZiAoZW5kSW5kZXggIT09IC0xKSBlbmRJbmRleCArPSBvcGVuTWFya2VyLmxlbmd0aDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZW5kSW5kZXggPT09IC0xKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJzeW50YXggZXJyb3IgaW4gZm9ybWF0dGVyIHRlbXBsYXRlXCIpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGtleSA9IHRleHQuc3Vic3RyaW5nKG9wZW5NYXJrZXIubGVuZ3RoLCBlbmRJbmRleCk7XG5cdFx0Y29uc3QgcGFydHMgPSBrZXkuc3BsaXQocGFyYW1ldGVyRGVsaW1pdGVyKTtcblx0XHRjb25zdCBjdXJyZW50UGlwZSA9IHBhcnRzLnNoaWZ0KCk7XG5cblx0XHR0aGlzW3dvcmtpbmdEYXRhU3ltYm9sXSA9IGV4dGVuZChcblx0XHRcdHt9LFxuXHRcdFx0dGhpc1tpbnRlcm5hbE9iamVjdFN5bWJvbF0sXG5cdFx0XHR0aGlzW3dvcmtpbmdEYXRhU3ltYm9sXSxcblx0XHQpO1xuXG5cdFx0Zm9yIChjb25zdCBrdiBvZiBwYXJ0cykge1xuXHRcdFx0Y29uc3QgW2ssIHZdID0ga3Yuc3BsaXQocGFyYW1ldGVyQXNzaWdubWVudCk7XG5cdFx0XHR0aGlzW3dvcmtpbmdEYXRhU3ltYm9sXVtrXSA9IHY7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdDEgPSBrZXkuc3BsaXQoXCJ8XCIpLnNoaWZ0KCkudHJpbSgpOyAvLyBwaXBlIHN5bWJvbFxuXHRcdGNvbnN0IHQyID0gdDEuc3BsaXQoXCI6OlwiKS5zaGlmdCgpLnRyaW0oKTsgLy8ga2V5IHZhbHVlIGRlbGltaXRlclxuXHRcdGNvbnN0IHQzID0gdDIuc3BsaXQoXCIuXCIpLnNoaWZ0KCkudHJpbSgpOyAvLyBwYXRoIGRlbGltaXRlclxuXHRcdGNvbnN0IHByZWZpeCA9IHRoaXNbd29ya2luZ0RhdGFTeW1ib2xdPy5bdDNdID8gXCJwYXRoOlwiIDogXCJzdGF0aWM6XCI7XG5cblx0XHRsZXQgY29tbWFuZCA9IFwiXCI7XG5cdFx0aWYgKFxuXHRcdFx0cHJlZml4ICYmXG5cdFx0XHRrZXkuaW5kZXhPZihwcmVmaXgpICE9PSAwICYmXG5cdFx0XHRrZXkuaW5kZXhPZihcInBhdGg6XCIpICE9PSAwICYmXG5cdFx0XHRrZXkuaW5kZXhPZihcInN0YXRpYzpcIikgIT09IDBcblx0XHQpIHtcblx0XHRcdGNvbW1hbmQgPSBwcmVmaXg7XG5cdFx0fVxuXG5cdFx0Y29tbWFuZCArPSBjdXJyZW50UGlwZTtcblxuXHRcdGNvbnN0IHBpcGUgPSBuZXcgUGlwZShjb21tYW5kKTtcblxuXHRcdGlmIChpc09iamVjdChjYWxsYmFja3MpKSB7XG5cdFx0XHRmb3IgKGNvbnN0IFtuYW1lLCBjYWxsYmFja10gb2YgT2JqZWN0LmVudHJpZXMoY2FsbGJhY2tzKSkge1xuXHRcdFx0XHRwaXBlLnNldENhbGxiYWNrKG5hbWUsIGNhbGxiYWNrKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmb3JtYXR0ZWQucHVzaCh2YWxpZGF0ZVN0cmluZyhwaXBlLnJ1bih0aGlzW3dvcmtpbmdEYXRhU3ltYm9sXSkpKTtcblxuXHRcdHRleHQgPSB0ZXh0LnN1YnN0cmluZyhlbmRJbmRleCArIGNsb3NlTWFya2VyLmxlbmd0aCk7XG5cdH1cblxuXHRyZXR1cm4gZm9ybWF0dGVkLmpvaW4oXCJcIik7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gXCIuL2lzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVBcnJheSwgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IE1lZGlhVHlwZSwgcGFyc2VNZWRpYVR5cGUgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgaW50ZXJuYWwgPSBTeW1ib2woXCJpbnRlcm5hbFwiKTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBQYXJhbWV0ZXJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBrZXlcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2YWx1ZVxuICovXG5cbi8qKlxuICogWW91IGNhbiBjcmVhdGUgYW4gb2JqZWN0IHZpYSB0aGUgbW9uc3RlciBuYW1lc3BhY2UgYG5ldyBNb25zdGVyLlR5cGVzLk1lZGlhVHlwZSgpYC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuY2xhc3MgTWVkaWFUeXBlIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gc3VidHlwZVxuXHQgKiBAcGFyYW0ge01vbnN0ZXIuVHlwZXMuUGFyYW1ldGVyW119IHBhcmFtZXRlclxuXHQgKi9cblx0Y29uc3RydWN0b3IodHlwZSwgc3VidHlwZSwgcGFyYW1ldGVyKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXNbaW50ZXJuYWxdID0ge1xuXHRcdFx0dHlwZTogdmFsaWRhdGVTdHJpbmcodHlwZSkudG9Mb3dlckNhc2UoKSxcblx0XHRcdHN1YnR5cGU6IHZhbGlkYXRlU3RyaW5nKHN1YnR5cGUpLnRvTG93ZXJDYXNlKCksXG5cdFx0XHRwYXJhbWV0ZXI6IFtdLFxuXHRcdH07XG5cblx0XHRpZiAocGFyYW1ldGVyICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXNbaW50ZXJuYWxdW1wicGFyYW1ldGVyXCJdID0gdmFsaWRhdGVBcnJheShwYXJhbWV0ZXIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvdHlwZXMvbWVkaWEtdHlwZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtTdHJpbmd9XG5cdCAqL1xuXHRnZXQgdHlwZSgpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbF0udHlwZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtTdHJpbmd9XG5cdCAqL1xuXHRnZXQgc3VidHlwZSgpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbF0uc3VidHlwZTtcblx0fVxuXG5cdC8vIC8qKlxuXHQvLyAgKiBAcmV0dXJuIHtNb25zdGVyLlR5cGVzLlBhcmFtZXRlcltdfVxuXHQvLyAgKi9cblx0Ly8gZ2V0IHBhcmFtZXRlcigpIHtcblx0Ly8gXHRyZXR1cm4gdGhpc1tpbnRlcm5hbF0ucGFyYW1ldGVyO1xuXHQvLyB9XG5cblx0LyoqXG5cdCAqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01hcH1cblx0ICovXG5cdGdldCBwYXJhbWV0ZXIoKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gbmV3IE1hcCgpO1xuXG5cdFx0dGhpc1tpbnRlcm5hbF1bXCJwYXJhbWV0ZXJcIl0uZm9yRWFjaCgocCkgPT4ge1xuXHRcdFx0bGV0IHZhbHVlID0gcC52YWx1ZTtcblxuXHRcdFx0Ly8gaW50ZXJuYWxseSBzcGVjaWFsIHZhbHVlcyBhcmUgcGFydGx5IHN0b3JlZCB3aXRoIHF1b3RlcywgdGhpcyBmdW5jdGlvbiByZW1vdmVzIHRoZW0uXG5cdFx0XHRpZiAodmFsdWUuc3RhcnRzV2l0aCgnXCInKSAmJiB2YWx1ZS5lbmRzV2l0aCgnXCInKSkge1xuXHRcdFx0XHR2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygxLCB2YWx1ZS5sZW5ndGggLSAxKTtcblx0XHRcdH1cblxuXHRcdFx0cmVzdWx0LnNldChwLmtleSwgdmFsdWUpO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHR0b1N0cmluZygpIHtcblx0XHRjb25zdCBwYXJhbWV0ZXIgPSBbXTtcblx0XHRmb3IgKGNvbnN0IGEgb2YgdGhpc1tpbnRlcm5hbF0ucGFyYW1ldGVyKSB7XG5cdFx0XHRwYXJhbWV0ZXIucHVzaChgJHthLmtleX09JHthLnZhbHVlfWApO1xuXHRcdH1cblxuXHRcdHJldHVybiBgJHt0aGlzW2ludGVybmFsXS50eXBlfS8ke3RoaXNbaW50ZXJuYWxdLnN1YnR5cGV9JHtcblx0XHRcdHBhcmFtZXRlci5sZW5ndGggPiAwID8gYDske3BhcmFtZXRlci5qb2luKFwiO1wiKX1gIDogXCJcIlxuXHRcdH1gO1xuXHR9XG59XG5cbi8qKlxuICogWW91IGNhbiBjYWxsIHRoZSBmdW5jdGlvbiB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBNb25zdGVyLlR5cGVzLnBhcnNlTWVkaWFUeXBlKClgLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge01vbnN0ZXJ9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL21vbnN0ZXIubWpzJztcbiAqIGNvbnNvbGUubG9nKE1vbnN0ZXIuVHlwZXMucGFyc2VNZWRpYVR5cGUoKSlcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBhbHNvIGludGVncmF0ZSB0aGlzIGZ1bmN0aW9uIGluZGl2aWR1YWxseS5cbiAqXG4gKiBgYGBcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHtwYXJzZU1lZGlhVHlwZX0gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvdHlwZXMvZGF0YXVybC5tanMnO1xuICogY29uc29sZS5sb2cocGFyc2VNZWRpYVR5cGUoKSlcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogU3BlY2lmaWNhdGlvbjpcbiAqXG4gKiBgYGBcbiAqIGRhdGF1cmwgICAgOj0gXCJkYXRhOlwiIFsgbWVkaWF0eXBlIF0gWyBcIjtiYXNlNjRcIiBdIFwiLFwiIGRhdGFcbiAqIG1lZGlhdHlwZSAgOj0gWyB0eXBlIFwiL1wiIHN1YnR5cGUgXSAqKCBcIjtcIiBwYXJhbWV0ZXIgKVxuICogZGF0YSAgICAgICA6PSAqdXJsY2hhclxuICogcGFyYW1ldGVyICA6PSBhdHRyaWJ1dGUgXCI9XCIgdmFsdWVcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBtZWRpYXR5cGVcbiAqIEByZXR1cm4ge01vbnN0ZXIuVHlwZXMuTWVkaWFUeXBlfVxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzIwNDUjc2VjdGlvbi01LjFcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdGhlIG1pbWV0eXBlIGNhbiBub3QgYmUgcGFyc2VkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IGJsYW5rIHZhbHVlIGlzIG5vdCBhbGxvd2VkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IG1hbGZvcm1lZCBkYXRhIHVybFxuICovXG5mdW5jdGlvbiBwYXJzZU1lZGlhVHlwZShtZWRpYXR5cGUpIHtcblx0Y29uc3QgcmVnZXggPVxuXHRcdC8oPzx0eXBlPltBLVphLXpdK3xcXCopXFwvKD88c3VidHlwZT4oW2EtekEtWjAtOS5cXCtfXFwtXSspfFxcKnwpKD88cGFyYW1ldGVyPlxccyo7XFxzKihbYS16QS1aMC05XSspXFxzKig9XFxzKihcIj9bQS1aYS16MC05X1xcLV0rXCI/KSk/KSovZztcblx0Y29uc3QgcmVzdWx0ID0gcmVnZXguZXhlYyh2YWxpZGF0ZVN0cmluZyhtZWRpYXR5cGUpKTtcblxuXHRjb25zdCBncm91cHMgPSByZXN1bHQ/LltcImdyb3Vwc1wiXTtcblx0aWYgKGdyb3VwcyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInRoZSBtaW1ldHlwZSBjYW4gbm90IGJlIHBhcnNlZFwiKTtcblx0fVxuXG5cdGNvbnN0IHR5cGUgPSBncm91cHM/LltcInR5cGVcIl07XG5cdGNvbnN0IHN1YnR5cGUgPSBncm91cHM/LltcInN1YnR5cGVcIl07XG5cdGNvbnN0IHBhcmFtZXRlciA9IGdyb3Vwcz8uW1wicGFyYW1ldGVyXCJdO1xuXG5cdGlmIChzdWJ0eXBlID09PSBcIlwiIHx8IHR5cGUgPT09IFwiXCIpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwiYmxhbmsgdmFsdWUgaXMgbm90IGFsbG93ZWRcIik7XG5cdH1cblxuXHRyZXR1cm4gbmV3IE1lZGlhVHlwZSh0eXBlLCBzdWJ0eXBlLCBwYXJzZVBhcmFtZXRlcihwYXJhbWV0ZXIpKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xOC4wXG4gKiBAcGFyYW0ge1N0cmluZ30gcGFyYW1ldGVyXG4gKiBAcmV0dXJuIHtNb25zdGVyLlR5cGVzLlBhcmFtZXRlcltdfHVuZGVmaW5lZH1cbiAqL1xuZnVuY3Rpb24gcGFyc2VQYXJhbWV0ZXIocGFyYW1ldGVyKSB7XG5cdGlmICghaXNTdHJpbmcocGFyYW1ldGVyKSkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRjb25zdCByZXN1bHQgPSBbXTtcblxuXHRwYXJhbWV0ZXIuc3BsaXQoXCI7XCIpLmZvckVhY2goKGVudHJ5KSA9PiB7XG5cdFx0ZW50cnkgPSBlbnRyeS50cmltKCk7XG5cdFx0aWYgKGVudHJ5ID09PSBcIlwiKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3Qga3YgPSBlbnRyeS5zcGxpdChcIj1cIik7XG5cblx0XHRjb25zdCBrZXkgPSB2YWxpZGF0ZVN0cmluZyhrdj8uWzBdKS50cmltKCk7XG5cdFx0Y29uc3QgdmFsdWUgPSB2YWxpZGF0ZVN0cmluZyhrdj8uWzFdKS50cmltKCk7XG5cblx0XHQvLyBpZiB2YWx1ZXMgYXJlIHF1b3RlZCwgdGhleSByZW1haW4gc28gaW50ZXJuYWxseVxuXHRcdHJlc3VsdC5wdXNoKHtcblx0XHRcdGtleToga2V5LFxuXHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdH0pO1xuXHR9KTtcblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tIFwiLi9pcy5tanNcIjtcbmltcG9ydCB7IE1lZGlhVHlwZSwgcGFyc2VNZWRpYVR5cGUgfSBmcm9tIFwiLi9tZWRpYXR5cGUubWpzXCI7XG5pbXBvcnQge1xuXHR2YWxpZGF0ZUJvb2xlYW4sXG5cdHZhbGlkYXRlSW5zdGFuY2UsXG5cdHZhbGlkYXRlU3RyaW5nLFxufSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IERhdGFVcmwsIHBhcnNlRGF0YVVSTCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpbnRlcm5hbCA9IFN5bWJvbChcImludGVybmFsXCIpO1xuXG4vKipcbiAqIFlvdSBjYW4gY3JlYXRlIGFuIG9iamVjdCB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBuZXcgRGF0YVVybCgpYC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9CYXNpY3Nfb2ZfSFRUUC9EYXRhX1VSSXNcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmMyMzk3XG4gKi9cbmNsYXNzIERhdGFVcmwgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBjb250ZW50XG5cdCAqIEBwYXJhbSB7U3RyaW5nfE1lZGlhVHlwZX0gbWVkaWF0eXBlXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gYmFzZTY0PXRydWVcblx0ICovXG5cdGNvbnN0cnVjdG9yKGNvbnRlbnQsIG1lZGlhdHlwZSwgYmFzZTY0KSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmIChpc1N0cmluZyhtZWRpYXR5cGUpKSB7XG5cdFx0XHRtZWRpYXR5cGUgPSBwYXJzZU1lZGlhVHlwZShtZWRpYXR5cGUpO1xuXHRcdH1cblxuXHRcdHRoaXNbaW50ZXJuYWxdID0ge1xuXHRcdFx0Y29udGVudDogdmFsaWRhdGVTdHJpbmcoY29udGVudCksXG5cdFx0XHRtZWRpYXR5cGU6IHZhbGlkYXRlSW5zdGFuY2UobWVkaWF0eXBlLCBNZWRpYVR5cGUpLFxuXHRcdFx0YmFzZTY0OiB2YWxpZGF0ZUJvb2xlYW4oYmFzZTY0ID09PSB1bmRlZmluZWQgPyB0cnVlIDogYmFzZTY0KSxcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci90eXBlcy9kYXRhLXVybFwiKTtcblx0fVxuXG5cdGdldCBjb250ZW50KCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsXS5iYXNlNjRcblx0XHRcdD8gYXRvYih0aGlzW2ludGVybmFsXS5jb250ZW50KVxuXHRcdFx0OiB0aGlzW2ludGVybmFsXS5jb250ZW50O1xuXHR9XG5cblx0Z2V0IG1lZGlhdHlwZSgpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbF0ubWVkaWF0eXBlO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzIzOTdcblx0ICovXG5cdHRvU3RyaW5nKCkge1xuXHRcdGxldCBjb250ZW50ID0gdGhpc1tpbnRlcm5hbF0uY29udGVudDtcblxuXHRcdGlmICh0aGlzW2ludGVybmFsXS5iYXNlNjQgPT09IHRydWUpIHtcblx0XHRcdGNvbnRlbnQgPSBgO2Jhc2U2NCwke2NvbnRlbnR9YDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29udGVudCA9IGAsJHtlbmNvZGVVUklDb21wb25lbnQoY29udGVudCl9YDtcblx0XHR9XG5cblx0XHRyZXR1cm4gYGRhdGE6JHt0aGlzW2ludGVybmFsXS5tZWRpYXR5cGUudG9TdHJpbmcoKX0ke2NvbnRlbnR9YDtcblx0fVxufVxuXG4vKipcbiAqIFlvdSBjYW4gY2FsbCB0aGUgZnVuY3Rpb24gdmlhIHRoZSBtb25zdGVyIG5hbWVzcGFjZSBgcGFyc2VEYXRhVVJMKClgLlxuICpcbiAqIFNwZWNpZmljYXRpb246XG4gKlxuICogYGBgXG4gKiBkYXRhdXJsICAgIDo9IFwiZGF0YTpcIiBbIG1lZGlhdHlwZSBdIFsgXCI7YmFzZTY0XCIgXSBcIixcIiBkYXRhXG4gKiBtZWRpYXR5cGUgIDo9IFsgdHlwZSBcIi9cIiBzdWJ0eXBlIF0gKiggXCI7XCIgcGFyYW1ldGVyIClcbiAqIGRhdGEgICAgICAgOj0gKnVybGNoYXJcbiAqIHBhcmFtZXRlciAgOj0gYXR0cmlidXRlIFwiPVwiIHZhbHVlXG4gKiBgYGBcbiAqXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvQmFzaWNzX29mX0hUVFAvRGF0YV9VUklzXG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMjM5N1xuICogQHRocm93cyB7VHlwZUVycm9yfSBpbmNvcnJlY3Qgb3IgbWlzc2luZyBkYXRhIHByb3RvY29sXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IG1hbGZvcm1lZCBkYXRhIHVybFxuICogQHBhcmFtIHtzdHJpbmd9IGRhdGF1cmxcbiAqIEByZXR1cm4ge0RhdGFVcmx9XG4gKi9cbmZ1bmN0aW9uIHBhcnNlRGF0YVVSTChkYXRhdXJsKSB7XG5cdHZhbGlkYXRlU3RyaW5nKGRhdGF1cmwpO1xuXG5cdGRhdGF1cmwgPSBkYXRhdXJsLnRyaW0oKTtcblxuXHRpZiAoZGF0YXVybC5zdWJzdHJpbmcoMCwgNSkgIT09IFwiZGF0YTpcIikge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJpbmNvcnJlY3Qgb3IgbWlzc2luZyBkYXRhIHByb3RvY29sXCIpO1xuXHR9XG5cblx0ZGF0YXVybCA9IGRhdGF1cmwuc3Vic3RyaW5nKDUpO1xuXG5cdGNvbnN0IHAgPSBkYXRhdXJsLmluZGV4T2YoXCIsXCIpO1xuXHRpZiAocCA9PT0gLTEpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwibWFsZm9ybWVkIGRhdGEgdXJsXCIpO1xuXHR9XG5cblx0bGV0IGNvbnRlbnQgPSBkYXRhdXJsLnN1YnN0cmluZyhwICsgMSk7XG5cdGNvbnN0IG1lZGlhdHlwZUFuZEJhc2U2NCA9IGRhdGF1cmwuc3Vic3RyaW5nKDAsIHApLnRyaW0oKTtcblx0bGV0IG1lZGlhdHlwZSA9IFwidGV4dC9wbGFpbjtjaGFyc2V0PVVTLUFTQ0lJXCI7XG5cdGxldCBiYXNlNjRGbGFnID0gZmFsc2U7XG5cblx0aWYgKG1lZGlhdHlwZUFuZEJhc2U2NCAhPT0gXCJcIikge1xuXHRcdG1lZGlhdHlwZSA9IG1lZGlhdHlwZUFuZEJhc2U2NDtcblx0XHRpZiAobWVkaWF0eXBlQW5kQmFzZTY0LmVuZHNXaXRoKFwiYmFzZTY0XCIpKSB7XG5cdFx0XHRjb25zdCBpID0gbWVkaWF0eXBlQW5kQmFzZTY0Lmxhc3RJbmRleE9mKFwiO1wiKTtcblx0XHRcdG1lZGlhdHlwZSA9IG1lZGlhdHlwZUFuZEJhc2U2NC5zdWJzdHJpbmcoMCwgaSk7XG5cdFx0XHRiYXNlNjRGbGFnID0gdHJ1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29udGVudCA9IGRlY29kZVVSSUNvbXBvbmVudChjb250ZW50KTtcblx0XHR9XG5cblx0XHRtZWRpYXR5cGUgPSBwYXJzZU1lZGlhVHlwZShtZWRpYXR5cGUpO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnRlbnQgPSBkZWNvZGVVUklDb21wb25lbnQoY29udGVudCk7XG5cdH1cblxuXHRyZXR1cm4gbmV3IERhdGFVcmwoY29udGVudCwgbWVkaWF0eXBlLCBiYXNlNjRGbGFnKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZS5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgUXVldWUgfTtcblxuLyoqXG4gKiBBIHF1ZXVlIGlzIGEgbGlzdCBvZiBpdGVtcyB0aGF0IGFyZSBwcm9jZXNzZWQgb25lIGFmdGVyIGFub3RoZXIgKGZpcnN0IGluLCBmaXJzdCBvdXQpLlxuICpcbiAqIFdpdGggYSBxdWV1ZSB5b3UgY2FuIGFkZCBpdGVtcyB0byB0aGUgZW5kIG9mIHRoZSBsaXN0IGBRdWV1ZS5hZGQoKWAgYW5kIHJlbW92ZSBpdGVtcyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpc3QgYFF1ZXVlLnBvcCgpYC5cbiAqXG4gKiBXaXRoIGBRdWV1ZS5wZWVrKClgIHlvdSBjYW4gZ2V0IHRoZSBmaXJzdCBpdGVtIHdpdGhvdXQgcmVtb3ZpbmcgaXQgZnJvbSB0aGUgbGlzdC5cbiAqXG4gKiBZb3UgY2FuIGNyZWF0ZSB0aGUgaW5zdGFuY2UgdmlhIGBuZXcgUXVldWUoKWAuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS40LjBcbiAqIEBzdW1tYXJ5IEEgUXVldWUgKEZpZm8pXG4gKi9cbmNsYXNzIFF1ZXVlIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLmRhdGEgPSBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvdHlwZXMvcXVldWVcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGlzRW1wdHkoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZGF0YS5sZW5ndGggPT09IDA7XG5cdH1cblxuXHQvKipcblx0ICogUmVhZCB0aGUgZWxlbWVudCBhdCB0aGUgZnJvbnQgb2YgdGhlIHF1ZXVlIHdpdGhvdXQgcmVtb3ZpbmcgaXQuXG5cdCAqXG5cdCAqIEByZXR1cm4geyp9XG5cdCAqL1xuXHRwZWVrKCkge1xuXHRcdGlmICh0aGlzLmlzRW1wdHkoKSkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5kYXRhWzBdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBhIG5ldyBlbGVtZW50IHRvIHRoZSBlbmQgb2YgdGhlIHF1ZXVlLlxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IHZhbHVlXG5cdCAqIEByZXR1cm4ge1F1ZXVlfVxuXHQgKi9cblx0YWRkKHZhbHVlKSB7XG5cdFx0dGhpcy5kYXRhLnB1c2godmFsdWUpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIHJlbW92ZSBhbGwgZW50cmllc1xuXHQgKlxuXHQgKiBAcmV0dXJuIHtRdWV1ZX1cblx0ICovXG5cdGNsZWFyKCkge1xuXHRcdHRoaXMuZGF0YSA9IFtdO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZSB0aGUgZWxlbWVudCBhdCB0aGUgZnJvbnQgb2YgdGhlIHF1ZXVlXG5cdCAqIElmIHRoZSBxdWV1ZSBpcyBlbXB0eSwgcmV0dXJuIHVuZGVmaW5lZC5cblx0ICpcblx0ICogQHJldHVybiB7Kn1cblx0ICovXG5cdHBvbGwoKSB7XG5cdFx0aWYgKHRoaXMuaXNFbXB0eSgpKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5kYXRhLnNoaWZ0KCk7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBRdWV1ZSB9IGZyb20gXCIuL3F1ZXVlLm1qc1wiO1xuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVPYmplY3QgfSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgVW5pcXVlUXVldWUgfTtcblxuLyoqXG4gKiBBbiBVbmlxdWVRdWV1ZSBpcyBhIHF1ZXVlIHRoYXQgY29udGFpbnMgaXRlbXMgb25seSBvbmNlLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBxdWV1ZSBmb3IgdW5pcXVlIHZhbHVlc1xuICovXG5jbGFzcyBVbmlxdWVRdWV1ZSBleHRlbmRzIFF1ZXVlIHtcblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0ge1xuXHRcdFx0dW5pcXVlOiBuZXcgV2Vha1NldCgpLFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogQWRkIGEgbmV3IGVsZW1lbnQgdG8gdGhlIGVuZCBvZiB0aGUgcXVldWUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHtRdWV1ZX1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBvYmplY3Rcblx0ICovXG5cdGFkZCh2YWx1ZSkge1xuXHRcdHZhbGlkYXRlT2JqZWN0KHZhbHVlKTtcblxuXHRcdGlmICghdGhpc1tpbnRlcm5hbFN5bWJvbF0udW5pcXVlLmhhcyh2YWx1ZSkpIHtcblx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLnVuaXF1ZS5hZGQodmFsdWUpO1xuXHRcdFx0c3VwZXIuYWRkKHZhbHVlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiByZW1vdmUgYWxsIGVudHJpZXNcblx0ICpcblx0ICogQHJldHVybiB7UXVldWV9XG5cdCAqL1xuXHRjbGVhcigpIHtcblx0XHRzdXBlci5jbGVhcigpO1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLnVuaXF1ZSA9IG5ldyBXZWFrU2V0KCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlIHRoZSBlbGVtZW50IGF0IHRoZSBmcm9udCBvZiB0aGUgcXVldWVcblx0ICogSWYgdGhlIHF1ZXVlIGlzIGVtcHR5LCByZXR1cm4gdW5kZWZpbmVkLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtvYmplY3R9XG5cdCAqL1xuXHRwb2xsKCkge1xuXHRcdGlmICh0aGlzLmlzRW1wdHkoKSkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0Y29uc3QgdmFsdWUgPSB0aGlzLmRhdGEuc2hpZnQoKTtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS51bmlxdWUuZGVsZXRlKHZhbHVlKTtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZS5tanNcIjtcbmltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSBcIi4vaXMubWpzXCI7XG5pbXBvcnQgeyBUb2tlbkxpc3QgfSBmcm9tIFwiLi90b2tlbmxpc3QubWpzXCI7XG5pbXBvcnQgeyBVbmlxdWVRdWV1ZSB9IGZyb20gXCIuL3VuaXF1ZXF1ZXVlLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuZXhwb3J0IHsgT2JzZXJ2ZXIgfTtcblxuLyoqXG4gKiBBbiBvYnNlcnZlciBtYW5hZ2VzIGEgY2FsbGJhY2sgZnVuY3Rpb25cbiAqXG4gKiBUaGUgdXBkYXRlIG1ldGhvZCBpcyBjYWxsZWQgd2l0aCB0aGUgc3ViamVjdCBvYmplY3QgYXMgdGhpcyBwb2ludGVyLiBGb3IgdGhpcyByZWFzb25cbiAqIHRoZSBjYWxsYmFjayBzaG91bGQgbm90IGJlIGFuIGFycm93IGZ1bmN0aW9uLCBiZWNhdXNlIGl0IGdldHMgdGhpcyBwb2ludGVyIG9mIGl0cyBvd24gY29udGV4dC5cbiAqXG4gKiBJbmNsdWRlIHRoaXMgY2xhc3MgaW4geW91ciBwcm9qZWN0IHdpdGggdGhlIGZvbGxvd2luZyBjb2RlOlxuICpcbiAqIGBgYGpzXG4gKiBpbXBvcnQgeyBPYnNlcnZlciB9IGZyb20gXCJAc2NodWthaS9tb25zdGVyL3NvdXJjZS90eXBlcy9vYnNlcnZlci5tanNcIjtcbiAqIGBgYFxuICpcbiAqIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBwYXNzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBgYGBqc1xuICogbmV3IE9ic2VydmVyKCgpPT57XG4gKiAgICAgLy8gdGhpcyBpcyBub3Qgc3ViamVjdFxuICogfSlcbiAqXG4gKiBuZXcgT2JzZXJ2ZXIoZnVuY3Rpb24oKSB7XG4gKiAgICAgLy8gdGhpcyBpcyBzdWJqZWN0XG4gKiB9KVxuICogYGBgXG4gKlxuICogQWRkaXRpb25hbCBhcmd1bWVudHMgY2FuIGJlIHBhc3NlZCB0byB0aGUgY2FsbGJhY2suIFRvIGRvIHRoaXMsIHNpbXBseSBzcGVjaWZ5IHRoZW0uXG4gKlxuICogYGBganNcbiAqIE9ic2VydmVyKGZ1bmN0aW9uKGEsIGIsIGMpIHtcbiAqICAgICBjb25zb2xlLmxvZyhhLCBiLCBjKTsgLy8gXHUyMUE2IFwiYVwiLCAyLCB0cnVlXG4gKiB9LCBcImFcIiwgMiwgdHJ1ZSlcbiAqIGBgYFxuICpcbiAqIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBtdXN0IGhhdmUgYXMgbWFueSBwYXJhbWV0ZXJzIGFzIGFyZ3VtZW50cyBhcmUgZ2l2ZW4uXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqL1xuY2xhc3MgT2JzZXJ2ZXIgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7Kn0gYXJnc1xuXHQgKi9cblx0Y29uc3RydWN0b3IoY2FsbGJhY2ssIC4uLmFyZ3MpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0aWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJvYnNlcnZlciBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG5cdFx0fVxuXG5cdFx0dGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuXHRcdHRoaXMuYXJndW1lbnRzID0gYXJncztcblx0XHR0aGlzLnRhZ3MgPSBuZXcgVG9rZW5MaXN0KCk7XG5cdFx0dGhpcy5xdWV1ZSA9IG5ldyBVbmlxdWVRdWV1ZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci90eXBlcy9vYnNlcnZlclwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGFnXG5cdCAqIEByZXR1cm4ge09ic2VydmVyfVxuXHQgKi9cblx0YWRkVGFnKHRhZykge1xuXHRcdHRoaXMudGFncy5hZGQodGFnKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGFnXG5cdCAqIEByZXR1cm4ge09ic2VydmVyfVxuXHQgKi9cblx0cmVtb3ZlVGFnKHRhZykge1xuXHRcdHRoaXMudGFncy5yZW1vdmUodGFnKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtBcnJheX1cblx0ICovXG5cdGdldFRhZ3MoKSB7XG5cdFx0cmV0dXJuIHRoaXMudGFncy5lbnRyaWVzKCk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRhZ1xuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0aGFzVGFnKHRhZykge1xuXHRcdHJldHVybiB0aGlzLnRhZ3MuY29udGFpbnModGFnKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gc3ViamVjdFxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0dXBkYXRlKHN1YmplY3QpIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRcdGlmICghaXNPYmplY3Qoc3ViamVjdCkpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChcInN1YmplY3QgbXVzdCBiZSBhbiBvYmplY3RcIik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcblx0XHRcdHNlbGYucXVldWUuYWRkKHN1YmplY3QpO1xuXG5cdFx0XHRxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Ly8gdGhlIHF1ZXVlIGFuZCB0aGUgYHF1ZXVlTWljcm90YXNrYCBlbnN1cmUgdGhhdCBhbiBvYmplY3QgaXMgbm90XG5cdFx0XHRcdFx0Ly8gaW5mb3JtZWQgb2YgdGhlIHNhbWUgY2hhbmdlIG1vcmUgdGhhbiBvbmNlLlxuXHRcdFx0XHRcdGlmIChzZWxmLnF1ZXVlLmlzRW1wdHkoKSkge1xuXHRcdFx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbnN0IHMgPSBzZWxmLnF1ZXVlLnBvbGwoKTtcblx0XHRcdFx0XHRjb25zdCByZXN1bHQgPSBzZWxmLmNhbGxiYWNrLmFwcGx5KHMsIHNlbGYuYXJndW1lbnRzKTtcblxuXHRcdFx0XHRcdGlmIChpc09iamVjdChyZXN1bHQpICYmIHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcblx0XHRcdFx0XHRcdHJlc3VsdC50aGVuKHJlc29sdmUpLmNhdGNoKHJlamVjdCk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmVzb2x2ZShyZXN1bHQpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0cmVqZWN0KGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgT2JzZXJ2ZXIgfSBmcm9tIFwiLi9vYnNlcnZlci5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlSW5zdGFuY2UgfSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgT2JzZXJ2ZXJMaXN0IH07XG5cbi8qKlxuICogV2l0aCB0aGUgaGVscCBvZiB0aGUgT2JzZXJ2ZXJMaXN0IGNsYXNzLCBvYnNlcnZlciBjYW4gYmUgbWFuYWdlZC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICovXG5jbGFzcyBPYnNlcnZlckxpc3QgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMub2JzZXJ2ZXJzID0gW107XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybiB7T2JzZXJ2ZXJMaXN0fVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBPYnNlcnZlclxuXHQgKi9cblx0YXR0YWNoKG9ic2VydmVyKSB7XG5cdFx0dmFsaWRhdGVJbnN0YW5jZShvYnNlcnZlciwgT2JzZXJ2ZXIpO1xuXG5cdFx0dGhpcy5vYnNlcnZlcnMucHVzaChvYnNlcnZlcik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybiB7T2JzZXJ2ZXJMaXN0fVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBPYnNlcnZlclxuXHQgKi9cblx0ZGV0YWNoKG9ic2VydmVyKSB7XG5cdFx0dmFsaWRhdGVJbnN0YW5jZShvYnNlcnZlciwgT2JzZXJ2ZXIpO1xuXG5cdFx0dmFyIGkgPSAwO1xuXHRcdHZhciBsID0gdGhpcy5vYnNlcnZlcnMubGVuZ3RoO1xuXHRcdGZvciAoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRpZiAodGhpcy5vYnNlcnZlcnNbaV0gPT09IG9ic2VydmVyKSB7XG5cdFx0XHRcdHRoaXMub2JzZXJ2ZXJzLnNwbGljZShpLCAxKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBPYnNlcnZlclxuXHQgKi9cblx0Y29udGFpbnMob2JzZXJ2ZXIpIHtcblx0XHR2YWxpZGF0ZUluc3RhbmNlKG9ic2VydmVyLCBPYnNlcnZlcik7XG5cdFx0dmFyIGkgPSAwO1xuXHRcdHZhciBsID0gdGhpcy5vYnNlcnZlcnMubGVuZ3RoO1xuXHRcdGZvciAoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRpZiAodGhpcy5vYnNlcnZlcnNbaV0gPT09IG9ic2VydmVyKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHN1YmplY3Rcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdG5vdGlmeShzdWJqZWN0KSB7XG5cdFx0Y29uc3QgcG9taXNlcyA9IFtdO1xuXG5cdFx0bGV0IGkgPSAwO1xuXHRcdGNvbnN0IGwgPSB0aGlzLm9ic2VydmVycy5sZW5ndGg7XG5cdFx0Zm9yICg7IGkgPCBsOyBpKyspIHtcblx0XHRcdHBvbWlzZXMucHVzaCh0aGlzLm9ic2VydmVyc1tpXS51cGRhdGUoc3ViamVjdCkpO1xuXHRcdH1cblxuXHRcdHJldHVybiBQcm9taXNlLmFsbChwb21pc2VzKTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgaXNBcnJheSwgaXNPYmplY3QsIGlzUHJpbWl0aXZlIH0gZnJvbSBcIi4vaXMubWpzXCI7XG5pbXBvcnQgeyBPYnNlcnZlciB9IGZyb20gXCIuL29ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHsgT2JzZXJ2ZXJMaXN0IH0gZnJvbSBcIi4vb2JzZXJ2ZXJsaXN0Lm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVPYmplY3QgfSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGNsb25lIH0gZnJvbSBcIi4uL3V0aWwvY2xvbmUubWpzXCI7XG5leHBvcnQgeyBQcm94eU9ic2VydmVyIH07XG5cbi8qKlxuICogQW4gb2JzZXJ2ZXIgbWFuYWdlcyBhIGNhbGxiYWNrIGZ1bmN0aW9uXG4gKlxuICogV2l0aCB0aGUgUHJveHlPYnNlcnZlciB5b3UgY2FuIGF0dGFjaCBvYnNlcnZlciBmb3Igb2JzZXJ2YXRpb24uXG4gKiBXaXRoIGVhY2ggY2hhbmdlIGF0IHRoZSBvYmplY3QgdG8gYmUgb2JzZXJ2ZWQsIGFuIHVwZGF0ZSB0YWtlcyBwbGFjZS5cbiAqXG4gKiBUaGlzIGFsc28gYXBwbGllcyB0byBuZXN0ZWQgb2JqZWN0cy5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuY2xhc3MgUHJveHlPYnNlcnZlciBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtvYmplY3R9IG9iamVjdFxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIG9iamVjdFxuXHQgKi9cblx0Y29uc3RydWN0b3Iob2JqZWN0KSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMucmVhbFN1YmplY3QgPSB2YWxpZGF0ZU9iamVjdChvYmplY3QpO1xuXHRcdHRoaXMuc3ViamVjdCA9IG5ldyBQcm94eShvYmplY3QsIGdldEhhbmRsZXIuY2FsbCh0aGlzKSk7XG5cblx0XHR0aGlzLm9iamVjdE1hcCA9IG5ldyBXZWFrTWFwKCk7XG5cdFx0dGhpcy5vYmplY3RNYXAuc2V0KHRoaXMucmVhbFN1YmplY3QsIHRoaXMuc3ViamVjdCk7XG5cblx0XHR0aGlzLnByb3h5TWFwID0gbmV3IFdlYWtNYXAoKTtcblx0XHR0aGlzLnByb3h5TWFwLnNldCh0aGlzLnN1YmplY3QsIHRoaXMucmVhbFN1YmplY3QpO1xuXG5cdFx0dGhpcy5vYnNlcnZlcnMgPSBuZXcgT2JzZXJ2ZXJMaXN0KCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL3R5cGVzL3Byb3h5LW9ic2VydmVyXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge29iamVjdH1cblx0ICovXG5cdGdldFN1YmplY3QoKSB7XG5cdFx0cmV0dXJuIHRoaXMuc3ViamVjdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAc2luY2UgMS4yNC4wXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcblx0ICogQHJldHVybiB7TW9uc3Rlci5UeXBlcy5Qcm94eU9ic2VydmVyfVxuXHQgKi9cblx0c2V0U3ViamVjdChvYmopIHtcblx0XHRsZXQgaTtcblx0XHRjb25zdCBjbG9uZWRPYmplY3QgPSBjbG9uZShvYmopO1xuXHRcdGNvbnN0IGsgPSBPYmplY3Qua2V5cyh0aGlzLnN1YmplY3QpO1xuXHRcdGZvciAoaSA9IDA7IGkgPCBrLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRkZWxldGUgdGhpcy5zdWJqZWN0W2tbaV1dO1xuXHRcdH1cblxuXHRcdHRoaXMuc3ViamVjdCA9IGV4dGVuZCh0aGlzLnN1YmplY3QsIGNsb25lZE9iamVjdCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSByZWFsIG9iamVjdFxuXHQgKlxuXHQgKiBDaGFuZ2VzIHRvIHRoaXMgb2JqZWN0IGFyZSBub3Qgbm90aWNlZCBieSB0aGUgb2JzZXJ2ZXJzLCBzbyB5b3UgY2FuIG1ha2UgYSBsYXJnZSBudW1iZXIgb2YgY2hhbmdlcyBhbmQgaW5mb3JtIHRoZSBvYnNlcnZlcnMgbGF0ZXIuXG5cdCAqXG5cdCAqIEByZXR1cm4ge29iamVjdH1cblx0ICovXG5cdGdldFJlYWxTdWJqZWN0KCkge1xuXHRcdHJldHVybiB0aGlzLnJlYWxTdWJqZWN0O1xuXHR9XG5cblx0LyoqXG5cdCAqIGF0dGFjaCBhIG5ldyBvYnNlcnZlclxuXHQgKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJuIHtQcm94eU9ic2VydmVyfVxuXHQgKi9cblx0YXR0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHR0aGlzLm9ic2VydmVycy5hdHRhY2gob2JzZXJ2ZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIGRldGFjaCBhIG9ic2VydmVyXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm4ge1Byb3h5T2JzZXJ2ZXJ9XG5cdCAqL1xuXHRkZXRhY2hPYnNlcnZlcihvYnNlcnZlcikge1xuXHRcdHRoaXMub2JzZXJ2ZXJzLmRldGFjaChvYnNlcnZlcik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogbm90aWZ5IGFsbCBvYnNlcnZlclxuXHQgKlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0bm90aWZ5T2JzZXJ2ZXJzKCkge1xuXHRcdHJldHVybiB0aGlzLm9ic2VydmVycy5ub3RpZnkodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGNvbnRhaW5zT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHRyZXR1cm4gdGhpcy5vYnNlcnZlcnMuY29udGFpbnMob2JzZXJ2ZXIpO1xuXHR9XG59XG5cbi8qKlxuICpcbiAqIEByZXR1cm4ge3tkZWZpbmVQcm9wZXJ0eTogKGZ1bmN0aW9uKCo9LCAqPSwgKj0pOiAqKSwgc2V0UHJvdG90eXBlT2Y6IChmdW5jdGlvbigqLCAqPSk6IGJvb2xlYW4pLCBzZXQ6IChmdW5jdGlvbigqLCAqLCAqLCAqKTogYm9vbGVhbiksIGdldDogKChmdW5jdGlvbigqPSwgKj0sICo9KTogKHVuZGVmaW5lZCkpfCopLCBkZWxldGVQcm9wZXJ0eTogKChmdW5jdGlvbigqLCAqKTogKGJvb2xlYW4pKXwqKX19XG4gKiBAcHJpdmF0ZVxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRsYWIuc2NodWthaS5jb20vLS9zbmlwcGV0cy80OX1cbiAqL1xuZnVuY3Rpb24gZ2V0SGFuZGxlcigpIHtcblx0Y29uc3QgcHJveHkgPSB0aGlzO1xuXG5cdC8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvOS4wLyNzZWMtcHJveHktb2JqZWN0LWludGVybmFsLW1ldGhvZHMtYW5kLWludGVybmFsLXNsb3RzXG5cdGNvbnN0IGhhbmRsZXIgPSB7XG5cdFx0Ly8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy85LjAvI3NlYy1wcm94eS1vYmplY3QtaW50ZXJuYWwtbWV0aG9kcy1hbmQtaW50ZXJuYWwtc2xvdHMtZ2V0LXAtcmVjZWl2ZXJcblx0XHRnZXQ6IGZ1bmN0aW9uICh0YXJnZXQsIGtleSwgcmVjZWl2ZXIpIHtcblx0XHRcdGNvbnN0IHZhbHVlID0gUmVmbGVjdC5nZXQodGFyZ2V0LCBrZXksIHJlY2VpdmVyKTtcblxuXHRcdFx0aWYgKHR5cGVvZiBrZXkgPT09IFwic3ltYm9sXCIpIHtcblx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNQcmltaXRpdmUodmFsdWUpKSB7XG5cdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gc2V0IHZhbHVlIGFzIHByb3h5IGlmIG9iamVjdCBvciBhcnJheVxuXHRcdFx0aWYgKGlzQXJyYXkodmFsdWUpIHx8IGlzT2JqZWN0KHZhbHVlKSkge1xuXHRcdFx0XHRpZiAocHJveHkub2JqZWN0TWFwLmhhcyh2YWx1ZSkpIHtcblx0XHRcdFx0XHRyZXR1cm4gcHJveHkub2JqZWN0TWFwLmdldCh2YWx1ZSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAocHJveHkucHJveHlNYXAuaGFzKHZhbHVlKSkge1xuXHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zdCBwID0gbmV3IFByb3h5KHZhbHVlLCBoYW5kbGVyKTtcblx0XHRcdFx0XHRwcm94eS5vYmplY3RNYXAuc2V0KHZhbHVlLCBwKTtcblx0XHRcdFx0XHRwcm94eS5wcm94eU1hcC5zZXQocCwgdmFsdWUpO1xuXHRcdFx0XHRcdHJldHVybiBwO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9LFxuXG5cdFx0Ly8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy85LjAvI3NlYy1wcm94eS1vYmplY3QtaW50ZXJuYWwtbWV0aG9kcy1hbmQtaW50ZXJuYWwtc2xvdHMtc2V0LXAtdi1yZWNlaXZlclxuXHRcdHNldDogZnVuY3Rpb24gKHRhcmdldCwga2V5LCB2YWx1ZSwgcmVjZWl2ZXIpIHtcblx0XHRcdGlmIChwcm94eS5wcm94eU1hcC5oYXModmFsdWUpKSB7XG5cdFx0XHRcdHZhbHVlID0gcHJveHkucHJveHlNYXAuZ2V0KHZhbHVlKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHByb3h5LnByb3h5TWFwLmhhcyh0YXJnZXQpKSB7XG5cdFx0XHRcdHRhcmdldCA9IHByb3h5LnByb3h5TWFwLmdldCh0YXJnZXQpO1xuXHRcdFx0fVxuXG5cdFx0XHRsZXQgY3VycmVudCA9IFJlZmxlY3QuZ2V0KHRhcmdldCwga2V5LCByZWNlaXZlcik7XG5cdFx0XHRpZiAocHJveHkucHJveHlNYXAuaGFzKGN1cnJlbnQpKSB7XG5cdFx0XHRcdGN1cnJlbnQgPSBwcm94eS5wcm94eU1hcC5nZXQoY3VycmVudCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChjdXJyZW50ID09PSB2YWx1ZSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0bGV0IHJlc3VsdDtcblx0XHRcdGxldCBkZXNjcmlwdG9yID0gUmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpO1xuXG5cdFx0XHRpZiAoZGVzY3JpcHRvciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGRlc2NyaXB0b3IgPSB7XG5cdFx0XHRcdFx0d3JpdGFibGU6IHRydWUsXG5cdFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdGRlc2NyaXB0b3JbXCJ2YWx1ZVwiXSA9IHZhbHVlO1xuXHRcdFx0cmVzdWx0ID0gUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZGVzY3JpcHRvcik7XG5cblx0XHRcdGlmICh0eXBlb2Yga2V5ICE9PSBcInN5bWJvbFwiKSB7XG5cdFx0XHRcdHByb3h5Lm9ic2VydmVycy5ub3RpZnkocHJveHkpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0sXG5cblx0XHQvLyBodHRwczovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzkuMC8jc2VjLXByb3h5LW9iamVjdC1pbnRlcm5hbC1tZXRob2RzLWFuZC1pbnRlcm5hbC1zbG90cy1kZWxldGUtcFxuXHRcdGRlbGV0ZVByb3BlcnR5OiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHtcblx0XHRcdGlmIChrZXkgaW4gdGFyZ2V0KSB7XG5cdFx0XHRcdGRlbGV0ZSB0YXJnZXRba2V5XTtcblxuXHRcdFx0XHRpZiAodHlwZW9mIGtleSAhPT0gXCJzeW1ib2xcIikge1xuXHRcdFx0XHRcdHByb3h5Lm9ic2VydmVycy5ub3RpZnkocHJveHkpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSxcblxuXHRcdC8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvOS4wLyNzZWMtcHJveHktb2JqZWN0LWludGVybmFsLW1ldGhvZHMtYW5kLWludGVybmFsLXNsb3RzLWRlZmluZW93bnByb3BlcnR5LXAtZGVzY1xuXHRcdGRlZmluZVByb3BlcnR5OiBmdW5jdGlvbiAodGFyZ2V0LCBrZXksIGRlc2NyaXB0b3IpIHtcblx0XHRcdGNvbnN0IHJlc3VsdCA9IFJlZmxlY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGRlc2NyaXB0b3IpO1xuXHRcdFx0aWYgKHR5cGVvZiBrZXkgIT09IFwic3ltYm9sXCIpIHtcblx0XHRcdFx0cHJveHkub2JzZXJ2ZXJzLm5vdGlmeShwcm94eSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0sXG5cblx0XHQvLyBodHRwczovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzkuMC8jc2VjLXByb3h5LW9iamVjdC1pbnRlcm5hbC1tZXRob2RzLWFuZC1pbnRlcm5hbC1zbG90cy1zZXRwcm90b3R5cGVvZi12XG5cdFx0c2V0UHJvdG90eXBlT2Y6IGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuXHRcdFx0Y29uc3QgcmVzdWx0ID0gUmVmbGVjdC5zZXRQcm90b3R5cGVPZihvYmplY3QxLCBrZXkpO1xuXG5cdFx0XHRpZiAodHlwZW9mIGtleSAhPT0gXCJzeW1ib2xcIikge1xuXHRcdFx0XHRwcm94eS5vYnNlcnZlcnMubm90aWZ5KHByb3h5KTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9LFxuXHR9O1xuXG5cdHJldHVybiBoYW5kbGVyO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbE9iamVjdCB9IGZyb20gXCIuLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9USEVNRV9OQU1FLCBERUZBVUxUX1RIRU1FIH0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuZXhwb3J0IHsgVGhlbWUsIGdldERvY3VtZW50VGhlbWUgfTtcblxuLyoqXG4gKiBUaGUgVGhlbWUgY2xhc3MgcHJvdmlkZXMgdGhlIGZ1bmN0aW9uYWxpdHkgZm9yIHRoZSB0aGVtZS5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvZG9tL3RoZW1lLm1qc1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS43LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIHRoZW1lIGNsYXNzXG4gKi9cbmNsYXNzIFRoZW1lIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0gbmFtZVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKi9cblx0Y29uc3RydWN0b3IobmFtZSkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dmFsaWRhdGVTdHJpbmcobmFtZSk7XG5cdFx0dGhpcy5uYW1lID0gbmFtZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL3RoZW1lXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdGdldE5hbWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMubmFtZTtcblx0fVxufVxuXG4vKipcbiAqIFRoZSB0aGVtaW5nIHVzZWQgaW4gdGhlIGRvY3VtZW50IGNhbiBiZSBkZWZpbmVkIHZpYSB0aGUgaHRtbC10YWcuXG4gKiBUaGUgdGhlbWluZyBpcyBzcGVjaWZpZWQgdmlhIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci10aGVtZS1uYW1lYC5cbiAqXG4gKiBBcyBuYW1lIGZvciBhIHRoZW1lIGFsbCBjaGFyYWN0ZXJzIGFyZSB2YWxpZCwgd2hpY2ggYXJlIGFsc28gYWxsb3dlZCBmb3IgYSBIVE1MRWxlbWVudC1JRC5cbiAqXG4gKiBgYGBcbiAqIDxodG1sIGRhdGEtbW9uc3Rlci10aGVtZS1uYW1lPVwibXktdGhlbWVcIj5cbiAqIGBgYFxuICpcbiAqIHRoZSBkZWZhdWx0IHRoZW1lIG5hbWUgaXMgYG1vbnN0ZXJgLlxuICpcbiAqIEByZXR1cm4ge1RoZW1lfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS43LjBcbiAqL1xuZnVuY3Rpb24gZ2V0RG9jdW1lbnRUaGVtZSgpIHtcblx0Y29uc3QgZG9jdW1lbnQgPSBnZXRHbG9iYWxPYmplY3QoXCJkb2N1bWVudFwiKTtcblx0bGV0IG5hbWUgPSBERUZBVUxUX1RIRU1FO1xuXG5cdGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKTtcblx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdGNvbnN0IHRoZW1lID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1RIRU1FX05BTUUpO1xuXHRcdGlmICh0aGVtZSkge1xuXHRcdFx0bmFtZSA9IHRoZW1lO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBuZXcgVGhlbWUobmFtZSk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsRnVuY3Rpb24sIGdldEdsb2JhbE9iamVjdCB9IGZyb20gXCIuLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlLCB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9URU1QTEFURV9QUkVGSVggfSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBnZXREb2N1bWVudFRoZW1lIH0gZnJvbSBcIi4vdGhlbWUubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBmaW5kRWxlbWVudFdpdGhJZFVwd2FyZHMgfSBmcm9tIFwiLi91dGlsLm1qc1wiO1xuXG5leHBvcnQgeyBUZW1wbGF0ZSB9O1xuXG4vKipcbiAqIFRoZSB0ZW1wbGF0ZSBjbGFzcyBwcm92aWRlcyBtZXRob2RzIGZvciBjcmVhdGluZyB0ZW1wbGF0ZXMuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS42LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIHRlbXBsYXRlIGNsYXNzXG4gKi9cbmNsYXNzIFRlbXBsYXRlIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge0hUTUxUZW1wbGF0ZUVsZW1lbnR9IHRlbXBsYXRlXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgZnVuY3Rpb25cblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBmdW5jdGlvbiBpcyBub3QgZGVmaW5lZFxuXHQgKi9cblx0Y29uc3RydWN0b3IodGVtcGxhdGUpIHtcblx0XHRzdXBlcigpO1xuXHRcdGNvbnN0IEhUTUxUZW1wbGF0ZUVsZW1lbnQgPSBnZXRHbG9iYWxGdW5jdGlvbihcIkhUTUxUZW1wbGF0ZUVsZW1lbnRcIik7XG5cdFx0dmFsaWRhdGVJbnN0YW5jZSh0ZW1wbGF0ZSwgSFRNTFRlbXBsYXRlRWxlbWVudCk7XG5cdFx0dGhpcy50ZW1wbGF0ZSA9IHRlbXBsYXRlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vcmVzb3VyY2UvdGVtcGxhdGVcIik7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7SFRNTFRlbXBsYXRlRWxlbWVudH1cblx0ICovXG5cdGdldFRlbXBsYXRlRWxlbWVudCgpIHtcblx0XHRyZXR1cm4gdGhpcy50ZW1wbGF0ZTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtEb2N1bWVudEZyYWdtZW50fVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZlxuXHQgKi9cblx0Y3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpIHtcblx0XHRyZXR1cm4gdGhpcy50ZW1wbGF0ZS5jb250ZW50LmNsb25lTm9kZSh0cnVlKTtcblx0fVxufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGxvYWRzIGEgdGVtcGxhdGUgd2l0aCB0aGUgZ2l2ZW4gSUQgYW5kIHJldHVybnMgaXQuXG4gKlxuICogVG8gZG8gdGhpcywgaXQgZmlyc3QgcmVhZHMgdGhlIHRoZW1lIG9mIHRoZSBkb2N1bWVudCBhbmQgbG9va3MgZm9yIHRoZSBgZGF0YS1tb25zdGVyLXRoZW1lLW5hbWVgIGF0dHJpYnV0ZSBpbiB0aGUgSFRNTCB0YWcuXG4gKlxuICogYGBgXG4gKiA8aHRtbCBkYXRhLW1vbnN0ZXItdGhlbWUtbmFtZT1cIm15LXRoZW1lXCI+XG4gKiBgYGBcbiAqXG4gKiBJZiBubyB0aGVtZSB3YXMgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCB0aGVtZSBpcyBgbW9uc3RlcmAuXG4gKlxuICogTm93IGl0IGlzIGxvb2tlZCBpZiB0aGVyZSBpcyBhIHRlbXBsYXRlIHdpdGggdGhlIGdpdmVuIElEIGFuZCB0aGVtZSBgaWQtdGhlbWVgIGFuZCBpZiB5ZXMgaXQgaXMgcmV0dXJuZWQuXG4gKiBJZiB0aGVyZSBpcyBubyB0ZW1wbGF0ZSBhIHNlYXJjaCBmb3IgYSB0ZW1wbGF0ZSB3aXRoIHRoZSBnaXZlbiBJRCBgaWRgIGlzIGRvbmUuIElmIHRoaXMgaXMgYWxzbyBub3QgZm91bmQsIGFuIGVycm9yIGlzIHRocm93bi5cbiAqXG4gKiBZb3UgY2FuIGNhbGwgdGhlIG1ldGhvZCB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBNb25zdGVyLkRPTS5maW5kRG9jdW1lbnRUZW1wbGF0ZSgpYC5cbiAqXG4gKiBgYGBcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHtmaW5kVGVtcGxhdGV9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL2RvbS90ZW1wbGF0ZS5tanMnO1xuICogZmluZERvY3VtZW50VGVtcGxhdGUoKVxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGltcG9ydCB7IGZpbmREb2N1bWVudFRlbXBsYXRlIH0gZnJvbSBcImh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vQHNjaHVrYWkvbW9uc3RlckBsYXRlc3Qvc291cmNlL2RvbS90ZW1wbGF0ZS5tanNcIjtcbiAqXG4gKiBjb25zdCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAqIHRlbXBsYXRlLmlkID0gXCJteVRlbXBsYXRlXCI7XG4gKiB0ZW1wbGF0ZS5pbm5lckhUTUwgPSBcIjxwPm15IGRlZmF1bHQgdGVtcGxhdGU8L3A+XCI7XG4gKiBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRlbXBsYXRlKTtcbiAqXG4gKiBjb25zdCB0aGVtZWRUZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAqIHRoZW1lZFRlbXBsYXRlLmlkID0gXCJteVRlbXBsYXRlLW15VGhlbWVcIjtcbiAqIHRoZW1lZFRlbXBsYXRlLmlubmVySFRNTCA9IFwiPHA+bXkgdGhlbWVkIHRlbXBsYXRlPC9wPlwiO1xuICogZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGVtZWRUZW1wbGF0ZSk7XG4gKlxuICogLy8gbG9hZHMgdGhlIHRlbXBsZSBhbmQgc2luY2Ugbm8gdGhlbWUgaXMgc2V0IHRoZSBkZWZhdWx0IHRlbXBsYXRlXG4gKiBjb25zdCB0ZW1wbGF0ZTEgPSBmaW5kRG9jdW1lbnRUZW1wbGF0ZShcIm15VGVtcGxhdGVcIik7XG4gKiBjb25zb2xlLmxvZyh0ZW1wbGF0ZTEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKTtcbiAqIC8vIFx1MjFBNiAnPHA+bXkgZGVmYXVsdCB0ZW1wbGF0ZTwvcD4nXG4gKlxuICogLy8gbm93IHdlIHNldCBvdXIgb3duIHRoZW1lXG4gKiBkb2N1bWVudFxuICogLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpXG4gKiAuc2V0QXR0cmlidXRlKFwiZGF0YS1tb25zdGVyLXRoZW1lLW5hbWVcIiwgXCJteVRoZW1lXCIpO1xuICpcbiAqIC8vIG5vdyB3ZSBkb24ndCBnZXQgdGhlIGRlZmF1bHQgdGVtcGxhdGUsXG4gKiAvLyBidXQgdGhlIHRlbXBsYXRlIHdpdGggdGhlIHRoZW1lIGluIHRoZSBpZFxuICogY29uc3QgdGVtcGxhdGUyID0gZmluZERvY3VtZW50VGVtcGxhdGUoXCJteVRlbXBsYXRlXCIpO1xuICogY29uc29sZS5sb2codGVtcGxhdGUyLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSk7XG4gKiAvLyBcdTIxQTYgJzxwPm15IHRoZW1lZCB0ZW1wbGF0ZTwvcD4nXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGlkXG4gKiBAcGFyYW0ge05vZGV9IGN1cnJlbnROb2RlXG4gKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5UZW1wbGF0ZX1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7RXJyb3J9IHRlbXBsYXRlIGlkIG5vdCBmb3VuZC5cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRG9jdW1lbnRUZW1wbGF0ZShpZCwgY3VycmVudE5vZGUpIHtcblx0dmFsaWRhdGVTdHJpbmcoaWQpO1xuXG5cdGNvbnN0IGRvY3VtZW50ID0gZ2V0R2xvYmFsT2JqZWN0KFwiZG9jdW1lbnRcIik7XG5cdGNvbnN0IEhUTUxUZW1wbGF0ZUVsZW1lbnQgPSBnZXRHbG9iYWxGdW5jdGlvbihcIkhUTUxUZW1wbGF0ZUVsZW1lbnRcIik7XG5cdGNvbnN0IERvY3VtZW50RnJhZ21lbnQgPSBnZXRHbG9iYWxGdW5jdGlvbihcIkRvY3VtZW50RnJhZ21lbnRcIik7XG5cdGNvbnN0IERvY3VtZW50ID0gZ2V0R2xvYmFsRnVuY3Rpb24oXCJEb2N1bWVudFwiKTtcblxuXHRsZXQgcHJlZml4SUQ7XG5cblx0aWYgKFxuXHRcdCEoXG5cdFx0XHRjdXJyZW50Tm9kZSBpbnN0YW5jZW9mIERvY3VtZW50IHx8IGN1cnJlbnROb2RlIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudFxuXHRcdClcblx0KSB7XG5cdFx0aWYgKGN1cnJlbnROb2RlIGluc3RhbmNlb2YgTm9kZSkge1xuXHRcdFx0aWYgKGN1cnJlbnROb2RlLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfVEVNUExBVEVfUFJFRklYKSkge1xuXHRcdFx0XHRwcmVmaXhJRCA9IGN1cnJlbnROb2RlLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfVEVNUExBVEVfUFJFRklYKTtcblx0XHRcdH1cblxuXHRcdFx0Y3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5nZXRSb290Tm9kZSgpO1xuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdCEoXG5cdFx0XHRcdFx0Y3VycmVudE5vZGUgaW5zdGFuY2VvZiBEb2N1bWVudCB8fFxuXHRcdFx0XHRcdGN1cnJlbnROb2RlIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudFxuXHRcdFx0XHQpXG5cdFx0XHQpIHtcblx0XHRcdFx0Y3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5vd25lckRvY3VtZW50O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdCEoXG5cdFx0XHRcdGN1cnJlbnROb2RlIGluc3RhbmNlb2YgRG9jdW1lbnQgfHxcblx0XHRcdFx0Y3VycmVudE5vZGUgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50XG5cdFx0XHQpXG5cdFx0KSB7XG5cdFx0XHRjdXJyZW50Tm9kZSA9IGRvY3VtZW50O1xuXHRcdH1cblx0fVxuXG5cdGxldCB0ZW1wbGF0ZTtcblx0Y29uc3QgdGhlbWUgPSBnZXREb2N1bWVudFRoZW1lKCk7XG5cblx0aWYgKHByZWZpeElEKSB7XG5cdFx0Y29uc3QgdGhlbWVkUHJlZml4SUQgPSBgJHtwcmVmaXhJRH0tJHtpZH0tJHt0aGVtZS5nZXROYW1lKCl9YDtcblxuXHRcdHRlbXBsYXRlID0gZmluZEVsZW1lbnRXaXRoSWRVcHdhcmRzKGN1cnJlbnROb2RlLCB0aGVtZWRQcmVmaXhJRCk7XG5cdFx0aWYgKHRlbXBsYXRlIGluc3RhbmNlb2YgSFRNTFRlbXBsYXRlRWxlbWVudCkge1xuXHRcdFx0cmV0dXJuIG5ldyBUZW1wbGF0ZSh0ZW1wbGF0ZSk7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgdGhlbWVkSUQgPSBgJHtpZH0tJHt0aGVtZS5nZXROYW1lKCl9YDtcblxuXHR0ZW1wbGF0ZSA9IGZpbmRFbGVtZW50V2l0aElkVXB3YXJkcyhjdXJyZW50Tm9kZSwgdGhlbWVkSUQpO1xuXHRpZiAodGVtcGxhdGUgaW5zdGFuY2VvZiBIVE1MVGVtcGxhdGVFbGVtZW50KSB7XG5cdFx0cmV0dXJuIG5ldyBUZW1wbGF0ZSh0ZW1wbGF0ZSk7XG5cdH1cblxuXHR0ZW1wbGF0ZSA9IGZpbmRFbGVtZW50V2l0aElkVXB3YXJkcyhjdXJyZW50Tm9kZSwgaWQpO1xuXHRpZiAodGVtcGxhdGUgaW5zdGFuY2VvZiBIVE1MVGVtcGxhdGVFbGVtZW50KSB7XG5cdFx0cmV0dXJuIG5ldyBUZW1wbGF0ZSh0ZW1wbGF0ZSk7XG5cdH1cblxuXHR0aHJvdyBuZXcgRXJyb3IoYHRlbXBsYXRlICR7aWR9IG5vdCBmb3VuZC5gKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpc0FycmF5LCBpc09iamVjdCB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IHR5cGVPZiB9IGZyb20gXCIuLi90eXBlcy90eXBlb2YubWpzXCI7XG5cbmV4cG9ydCB7IGRpZmYgfTtcblxuLyoqXG4gKiBXaXRoIHRoZSBkaWZmIGZ1bmN0aW9uIHlvdSBjYW4gcGVyZm9ybSB0aGUgY2hhbmdlIG9mIG9uZSBvYmplY3QgdG8gYW5vdGhlci4gVGhlIHJlc3VsdCBzaG93cyB0aGUgY2hhbmdlcyBvZiB0aGUgc2Vjb25kIG9iamVjdCB0byB0aGUgZmlyc3Qgb2JqZWN0LlxuICpcbiAqIFRoZSBvcGVyYXRvciBgYWRkYCBtZWFucyB0aGF0IHNvbWV0aGluZyBoYXMgYmVlbiBhZGRlZCB0byB0aGUgc2Vjb25kIG9iamVjdC4gYGRlbGV0ZWAgbWVhbnMgdGhhdCBzb21ldGhpbmcgaGFzIGJlZW4gZGVsZXRlZCBmcm9tIHRoZSBzZWNvbmQgb2JqZWN0IGNvbXBhcmVkIHRvIHRoZSBmaXJzdCBvYmplY3QuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL2RhdGEvZGlmZi5tanNcbiAqIEBwYXJhbSB7Kn0gZmlyc3RcbiAqIEBwYXJhbSB7Kn0gc2Vjb25kXG4gKiBAcmV0dXJuIHthcnJheX1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICovXG5mdW5jdGlvbiBkaWZmKGZpcnN0LCBzZWNvbmQpIHtcblx0cmV0dXJuIGRvRGlmZihmaXJzdCwgc2Vjb25kKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGFcbiAqIEBwYXJhbSBiXG4gKiBAcGFyYW0gdHlwZVxuICogQHJldHVybiB7U2V0PHN0cmluZz58U2V0PG51bWJlcj59XG4gKi9cbmZ1bmN0aW9uIGdldEtleXMoYSwgYiwgdHlwZSkge1xuXHRpZiAoaXNBcnJheSh0eXBlKSkge1xuXHRcdGNvbnN0IGtleXMgPVxuXHRcdFx0YS5sZW5ndGggPiBiLmxlbmd0aCA/IG5ldyBBcnJheShhLmxlbmd0aCkgOiBuZXcgQXJyYXkoYi5sZW5ndGgpO1xuXHRcdGtleXMuZmlsbCgwKTtcblx0XHRyZXR1cm4gbmV3IFNldChrZXlzLm1hcCgoXywgaSkgPT4gaSkpO1xuXHR9XG5cblx0cmV0dXJuIG5ldyBTZXQoT2JqZWN0LmtleXMoYSkuY29uY2F0KE9iamVjdC5rZXlzKGIpKSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBhXG4gKiBAcGFyYW0gYlxuICogQHBhcmFtIHBhdGhcbiAqIEBwYXJhbSBkaWZmXG4gKiBAcmV0dXJuIHthcnJheX1cbiAqL1xuZnVuY3Rpb24gZG9EaWZmKGEsIGIsIHBhdGgsIGRpZmYpIHtcblx0Y29uc3QgdHlwZUEgPSB0eXBlT2YoYSk7XG5cdGNvbnN0IHR5cGVCID0gdHlwZU9mKGIpO1xuXG5cdGNvbnN0IGN1cnJQYXRoID0gcGF0aCB8fCBbXTtcblx0Y29uc3QgY3VyckRpZmYgPSBkaWZmIHx8IFtdO1xuXG5cdGlmICh0eXBlQSA9PT0gdHlwZUIgJiYgKHR5cGVBID09PSBcIm9iamVjdFwiIHx8IHR5cGVBID09PSBcImFycmF5XCIpKSB7XG5cdFx0Z2V0S2V5cyhhLCBiLCB0eXBlQSkuZm9yRWFjaCgodikgPT4ge1xuXHRcdFx0aWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSwgdikpIHtcblx0XHRcdFx0Y3VyckRpZmYucHVzaChidWlsZFJlc3VsdChhW3ZdLCBiW3ZdLCBcImFkZFwiLCBjdXJyUGF0aC5jb25jYXQodikpKTtcblx0XHRcdH0gZWxzZSBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCB2KSkge1xuXHRcdFx0XHRjdXJyRGlmZi5wdXNoKGJ1aWxkUmVzdWx0KGFbdl0sIGJbdl0sIFwiZGVsZXRlXCIsIGN1cnJQYXRoLmNvbmNhdCh2KSkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZG9EaWZmKGFbdl0sIGJbdl0sIGN1cnJQYXRoLmNvbmNhdCh2KSwgY3VyckRpZmYpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IG8gPSBnZXRPcGVyYXRvcihhLCBiLCB0eXBlQSwgdHlwZUIpO1xuXHRcdGlmIChvICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGN1cnJEaWZmLnB1c2goYnVpbGRSZXN1bHQoYSwgYiwgbywgcGF0aCkpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBjdXJyRGlmZjtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHsqfSBhXG4gKiBAcGFyYW0geyp9IGJcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcGVyYXRvclxuICogQHBhcmFtIHthcnJheX0gcGF0aFxuICogQHJldHVybiB7e3BhdGg6IGFycmF5LCBvcGVyYXRvcjogc3RyaW5nfX1cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkUmVzdWx0KGEsIGIsIG9wZXJhdG9yLCBwYXRoKSB7XG5cdGNvbnN0IHJlc3VsdCA9IHtcblx0XHRvcGVyYXRvcixcblx0XHRwYXRoLFxuXHR9O1xuXG5cdGlmIChvcGVyYXRvciAhPT0gXCJhZGRcIikge1xuXHRcdHJlc3VsdC5maXJzdCA9IHtcblx0XHRcdHZhbHVlOiBhLFxuXHRcdFx0dHlwZTogdHlwZW9mIGEsXG5cdFx0fTtcblxuXHRcdGlmIChpc09iamVjdChhKSkge1xuXHRcdFx0Y29uc3QgbmFtZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihhKT8uY29uc3RydWN0b3I/Lm5hbWU7XG5cdFx0XHRpZiAobmFtZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJlc3VsdC5maXJzdC5pbnN0YW5jZSA9IG5hbWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKG9wZXJhdG9yID09PSBcImFkZFwiIHx8IG9wZXJhdG9yID09PSBcInVwZGF0ZVwiKSB7XG5cdFx0cmVzdWx0LnNlY29uZCA9IHtcblx0XHRcdHZhbHVlOiBiLFxuXHRcdFx0dHlwZTogdHlwZW9mIGIsXG5cdFx0fTtcblxuXHRcdGlmIChpc09iamVjdChiKSkge1xuXHRcdFx0Y29uc3QgbmFtZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihiKT8uY29uc3RydWN0b3I/Lm5hbWU7XG5cdFx0XHRpZiAobmFtZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJlc3VsdC5zZWNvbmQuaW5zdGFuY2UgPSBuYW1lO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gYVxuICogQHBhcmFtIHsqfSBiXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc05vdEVxdWFsKGEsIGIpIHtcblx0aWYgKHR5cGVvZiBhICE9PSB0eXBlb2YgYikge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0aWYgKGEgaW5zdGFuY2VvZiBEYXRlICYmIGIgaW5zdGFuY2VvZiBEYXRlKSB7XG5cdFx0cmV0dXJuIGEuZ2V0VGltZSgpICE9PSBiLmdldFRpbWUoKTtcblx0fVxuXG5cdHJldHVybiBhICE9PSBiO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IGFcbiAqIEBwYXJhbSB7Kn0gYlxuICogQHJldHVybiB7c3RyaW5nfHVuZGVmaW5lZH1cbiAqL1xuZnVuY3Rpb24gZ2V0T3BlcmF0b3IoYSwgYikge1xuXHQvKipcblx0ICogQHR5cGUge3N0cmluZ3x1bmRlZmluZWR9XG5cdCAqL1xuXHRsZXQgb3BlcmF0b3I7XG5cblx0LyoqXG5cdCAqIEB0eXBlIHtzdHJpbmd9XG5cdCAqL1xuXHRjb25zdCB0eXBlQSA9IHR5cGVvZiBhO1xuXG5cdC8qKlxuXHQgKiBAdHlwZSB7c3RyaW5nfVxuXHQgKi9cblx0Y29uc3QgdHlwZUIgPSB0eXBlb2YgYjtcblxuXHRpZiAodHlwZUEgPT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZUIgIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRvcGVyYXRvciA9IFwiYWRkXCI7XG5cdH0gZWxzZSBpZiAodHlwZUEgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZUIgPT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRvcGVyYXRvciA9IFwiZGVsZXRlXCI7XG5cdH0gZWxzZSBpZiAoaXNOb3RFcXVhbChhLCBiKSkge1xuXHRcdG9wZXJhdG9yID0gXCJ1cGRhdGVcIjtcblx0fVxuXG5cdHJldHVybiBvcGVyYXRvcjtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBJRCB9IGZyb20gXCIuLi90eXBlcy9pZC5tanNcIjtcbmltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IHRyaW1TcGFjZXMgfTtcblxuLyoqXG4gKiBUaGlzIHNwZWNpYWwgdHJpbSBmdW5jdGlvbiBhbGxvd3MgdG8gdHJpbSBzcGFjZXMgdGhhdCBoYXZlIGJlZW4gcHJvdGVjdGVkIGJ5IGEgc3BlY2lhbCBlc2NhcGUgY2hhcmFjdGVyLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge3RyaW1TcGFjZXN9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL3V0aWwvdHJpbXNwYWNlcy5tanMnO1xuICogdHJpbVNwYWNlcygnIGhlbGxvIFxcXFwgJylcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogSGludDogT25lIHN0cm9rZSBpcyBlc2NhcGVkIGJ5IHRoZSBqYXZhc2NyaXB0IGludGVycHJldGVyLCB0aGUgc2Vjb25kIHN0cm9rZSBlc2NhcGVzIHRoZSBzdHJva2UuXG4gKlxuICogYGBgdGV4dFxuICogYVxcIGIgIFx1MjFBNiBhIGJcbiAqIGFcXFxcIGIgXHUyMUE2IGFcXCBiXG4gKiBgYGBcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI0LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIHRyaW1TcGFjZXModmFsdWUpIHtcblx0dmFsaWRhdGVTdHJpbmcodmFsdWUpO1xuXG5cdGNvbnN0IHBsYWNlaG9sZGVyID0gbmV3IE1hcCgpO1xuXHRjb25zdCByZWdleCA9IC8oKD88cGF0dGVybj5cXFxcKD88Y2hhcj4uKSl7MX0pL2dpbTtcblxuXHQvLyBUaGUgc2VwYXJhdG9yIGZvciBhcmdzIG11c3QgYmUgZXNjYXBlZFxuXHQvLyB1bmRlZmluZWQgc3RyaW5nIHdoaWNoIHNob3VsZCBub3Qgb2NjdXIgbm9ybWFsbHkgYW5kIGlzIGFsc28gbm90IGEgcmVnZXhcblx0Y29uc3QgcmVzdWx0ID0gdmFsdWUubWF0Y2hBbGwocmVnZXgpO1xuXG5cdGZvciAoY29uc3QgbSBvZiByZXN1bHQpIHtcblx0XHRjb25zdCBnID0gbT8uW1wiZ3JvdXBzXCJdO1xuXHRcdGlmICghaXNPYmplY3QoZykpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGNvbnN0IHAgPSBnPy5bXCJwYXR0ZXJuXCJdO1xuXHRcdGNvbnN0IGMgPSBnPy5bXCJjaGFyXCJdO1xuXG5cdFx0aWYgKHAgJiYgYykge1xuXHRcdFx0Y29uc3QgciA9IGBfXyR7bmV3IElEKCkudG9TdHJpbmcoKX1fX2A7XG5cdFx0XHRwbGFjZWhvbGRlci5zZXQociwgYyk7XG5cdFx0XHR2YWx1ZSA9IHZhbHVlLnJlcGxhY2UocCwgcik7XG5cdFx0fVxuXHR9XG5cblx0dmFsdWUgPSB2YWx1ZS50cmltKCk7XG5cdHBsYWNlaG9sZGVyLmZvckVhY2goKHYsIGspID0+IHtcblx0XHR2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoaywgYFxcXFwke3Z9YCk7XG5cdH0pO1xuXG5cdHJldHVybiB2YWx1ZTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpc0FycmF5LCBpc09iamVjdCB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlSW5zdGFuY2UsIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnQgfSBmcm9tIFwiLi91dGlsLm1qc1wiO1xuXG5leHBvcnQgeyBmaXJlRXZlbnQsIGZpcmVDdXN0b21FdmVudCwgZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQgfTtcblxuLyoqXG4gKiBUaGUgZnVuY3Rpb24gc2VuZHMgYW4gZXZlbnRcbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnQgfCBOb2RlIHwgSFRNTENvbGxlY3Rpb24gfCBOb2RlTGlzdH0gZWxlbWVudFxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjEwLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBIVE1MRWxlbWVudCBvciBIVE1MQ29sbGVjdGlvblxuICogQHN1bW1hcnkgQ29uc3RydWN0IGFuZCBzZW5kIGFuZCBldmVudFxuICovXG5mdW5jdGlvbiBmaXJlRXZlbnQoZWxlbWVudCwgdHlwZSkge1xuXHRjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cblx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdGlmICh0eXBlID09PSBcImNsaWNrXCIpIHtcblx0XHRcdGVsZW1lbnQuY2xpY2soKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRXZlbnQvRXZlbnRcblx0XHRjb25zdCBldmVudCA9IG5ldyBFdmVudCh2YWxpZGF0ZVN0cmluZyh0eXBlKSwge1xuXHRcdFx0YnViYmxlczogdHJ1ZSxcblx0XHRcdGNhbmNlbGFibGU6IHRydWUsXG5cdFx0XHRjb21wb3NlZDogdHJ1ZSxcblx0XHR9KTtcblxuXHRcdGVsZW1lbnQuZGlzcGF0Y2hFdmVudChldmVudCk7XG5cdH0gZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxDb2xsZWN0aW9uIHx8IGVsZW1lbnQgaW5zdGFuY2VvZiBOb2RlTGlzdCkge1xuXHRcdGZvciAoY29uc3QgZSBvZiBlbGVtZW50KSB7XG5cdFx0XHRmaXJlRXZlbnQoZSwgdHlwZSk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXG5cdFx0XHRcInZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBIVE1MRWxlbWVudCBvciBIVE1MQ29sbGVjdGlvblwiLFxuXHRcdCk7XG5cdH1cbn1cblxuLyoqXG4gKiBZb3UgY2FuIGNhbGwgdGhlIGZ1bmN0aW9uIHZpYSB0aGUgbW9uc3RlciBuYW1lc3BhY2UgYG5ldyBNb25zdGVyLkRPTS5maXJlQ3VzdG9tRXZlbnQoKWAuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50IHwgTm9kZSB8IEhUTUxDb2xsZWN0aW9uIHwgTm9kZUxpc3R9IGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge29iamVjdH0gZGV0YWlsXG4gKiBAcmV0dXJuIHt2b2lkfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yOS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgSFRNTEVsZW1lbnQgb3IgSFRNTENvbGxlY3Rpb25cbiAqIEBzdW1tYXJ5IENvbnN0cnVjdCBhbmQgc2VuZCBhbmQgZXZlbnRcbiAqL1xuZnVuY3Rpb24gZmlyZUN1c3RvbUV2ZW50KGVsZW1lbnQsIHR5cGUsIGRldGFpbCkge1xuXHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0aWYgKCFpc09iamVjdChkZXRhaWwpKSB7XG5cdFx0XHRkZXRhaWwgPSB7IGRldGFpbCB9O1xuXHRcdH1cblxuXHRcdGNvbnN0IGV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KHZhbGlkYXRlU3RyaW5nKHR5cGUpLCB7XG5cdFx0XHRidWJibGVzOiB0cnVlLFxuXHRcdFx0Y2FuY2VsYWJsZTogdHJ1ZSxcblx0XHRcdGNvbXBvc2VkOiB0cnVlLFxuXHRcdFx0ZGV0YWlsLFxuXHRcdH0pO1xuXG5cdFx0ZWxlbWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcblx0fSBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTENvbGxlY3Rpb24gfHwgZWxlbWVudCBpbnN0YW5jZW9mIE5vZGVMaXN0KSB7XG5cdFx0Zm9yIChjb25zdCBlIG9mIGVsZW1lbnQpIHtcblx0XHRcdGZpcmVDdXN0b21FdmVudChlLCB0eXBlLCBkZXRhaWwpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFxuXHRcdFx0XCJlbGVtZW50IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBIVE1MRWxlbWVudCBvciBIVE1MQ29sbGVjdGlvblwiLFxuXHRcdCk7XG5cdH1cbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIHBhdGggYEV2ZW50LmNvbXBvc2VkUGF0aCgpYCBmcm9tIGFuIGV2ZW50IGFuZCB0cmllcyB0byBmaW5kIHRoZSBuZXh0IGVsZW1lbnRcbiAqIHVwIHRoZSB0cmVlIGBlbGVtZW50LmNsb3Nlc3QoKWAgd2l0aCB0aGUgYXR0cmlidXRlIGFuZCB2YWx1ZS4gSWYgbm8gdmFsdWUsIG9yIGEgdmFsdWUgdGhhdCBpcyB1bmRlZmluZWQgb3IgbnVsbCxcbiAqIGlzIHNwZWNpZmllZCwgb25seSB0aGUgYXR0cmlidXRlIGlzIHNlYXJjaGVkLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTQuMFxuICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ3xudWxsfHVuZGVmaW5lZH0gYXR0cmlidXRlVmFsdWVcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBldmVudFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mIEhUTUxFbGVtZW50XG4gKiBAc3VtbWFyeSBIZWxwIGZ1bmN0aW9uIHRvIGZpbmQgdGhlIGFwcHJvcHJpYXRlIGNvbnRyb2xcbiAqL1xuZnVuY3Rpb24gZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoZXZlbnQsIGF0dHJpYnV0ZU5hbWUsIGF0dHJpYnV0ZVZhbHVlKSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZXZlbnQsIEV2ZW50KTtcblxuXHRpZiAodHlwZW9mIGV2ZW50LmNvbXBvc2VkUGF0aCAhPT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgZXZlbnRcIik7XG5cdH1cblxuXHRjb25zdCBwYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG5cblx0Ly8gY2xvc2VzdCBjYW5ub3QgYmUgdXNlZCBoZXJlLCBiZWNhdXNlIGNsb3Nlc3QgaXMgbm90IGNvcnJlY3QgZm9yIHNsb3R0ZWQgZWxlbWVudHNcblx0aWYgKGlzQXJyYXkocGF0aCkpIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IG8gPSBwYXRoW2ldO1xuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdG8gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJlxuXHRcdFx0XHRvLmhhc0F0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSAmJlxuXHRcdFx0XHQoYXR0cmlidXRlVmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0XHRcdG8uZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpID09PSBhdHRyaWJ1dGVWYWx1ZSlcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gbztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGRpZmYgfSBmcm9tIFwiLi4vZGF0YS9kaWZmLm1qc1wiO1xuaW1wb3J0IHsgUGF0aGZpbmRlciB9IGZyb20gXCIuLi9kYXRhL3BhdGhmaW5kZXIubWpzXCI7XG5pbXBvcnQgeyBQaXBlIH0gZnJvbSBcIi4uL2RhdGEvcGlwZS5tanNcIjtcbmltcG9ydCB7XG5cdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdEFUVFJJQlVURV9VUERBVEVSX0FUVFJJQlVURVMsXG5cdEFUVFJJQlVURV9VUERBVEVSX0JJTkQsXG5cdEFUVFJJQlVURV9VUERBVEVSX0JJTkRfVFlQRSxcblx0QVRUUklCVVRFX1VQREFURVJfSU5TRVJULFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9JTlNFUlRfUkVGRVJFTkNFLFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9SRU1PVkUsXG5cdEFUVFJJQlVURV9VUERBVEVSX1JFUExBQ0UsXG5cdEFUVFJJQlVURV9VUERBVEVSX1NFTEVDVF9USElTLFxufSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IGlzQXJyYXksIGlzU3RyaW5nLCBpc0luc3RhbmNlLCBpc0l0ZXJhYmxlIH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgT2JzZXJ2ZXIgfSBmcm9tIFwiLi4vdHlwZXMvb2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQgeyBQcm94eU9ic2VydmVyIH0gZnJvbSBcIi4uL3R5cGVzL3Byb3h5b2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUFycmF5LCB2YWxpZGF0ZUluc3RhbmNlIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgY2xvbmUgfSBmcm9tIFwiLi4vdXRpbC9jbG9uZS5tanNcIjtcbmltcG9ydCB7IHRyaW1TcGFjZXMgfSBmcm9tIFwiLi4vdXRpbC90cmltc3BhY2VzLm1qc1wiO1xuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4sIGFkZFRvT2JqZWN0TGluayB9IGZyb20gXCIuL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyB1cGRhdGVyVHJhbnNmb3JtZXJNZXRob2RzU3ltYm9sIH0gZnJvbSBcIi4vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50IH0gZnJvbSBcIi4vZXZlbnRzLm1qc1wiO1xuaW1wb3J0IHsgZmluZERvY3VtZW50VGVtcGxhdGUgfSBmcm9tIFwiLi90ZW1wbGF0ZS5tanNcIjtcbmltcG9ydCB7IGdldFdpbmRvdyB9IGZyb20gXCIuL3V0aWwubWpzXCI7XG5cbmV4cG9ydCB7IFVwZGF0ZXIsIGFkZE9iamVjdFdpdGhVcGRhdGVyVG9FbGVtZW50IH07XG5cbi8qKlxuICogVGhlIHVwZGF0ZXIgY2xhc3MgY29ubmVjdHMgYW4gb2JqZWN0IHdpdGggdGhlIERPTS4gSW4gdGhpcyB3YXksIHN0cnVjdHVyZXMgYW5kIGNvbnRlbnRzIGluIHRoZSBET00gY2FuIGJlXG4gKiBwcm9ncmFtbWF0aWNhbGx5IGFkYXB0ZWQgdmlhIGF0dHJpYnV0ZXMuXG4gKlxuICogRm9yIGV4YW1wbGUsIHRvIGluY2x1ZGUgYSBzdHJpbmcgZnJvbSBhbiBvYmplY3QsIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1yZXBsYWNlYCBjYW4gYmUgdXNlZC5cbiAqIGEgZnVydGhlciBleHBsYW5hdGlvbiBjYW4gYmUgZm91bmQgdW5kZXIgW21vbnN0ZXJqcy5vcmddKGh0dHBzOi8vbW9uc3RlcmpzLm9yZy8pXG4gKlxuICogQ2hhbmdlcyB0byBhdHRyaWJ1dGVzIGFyZSBtYWRlIG9ubHkgd2hlbiB0aGUgZGlyZWN0IHZhbHVlcyBhcmUgY2hhbmdlZC4gSWYgeW91IHdhbnQgdG8gYXNzaWduIGNoYW5nZXNcbiAqIHRvIG90aGVyIHZhbHVlcyBhcyB3ZWxsLCB5b3UgaGF2ZSB0byBpbnNlcnQgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLXNlbGVjdC10aGlzYC4gVGhpcyBzaG91bGQgYmVcbiAqIGRvbmUgd2l0aCBjYXJlLCBhcyBpdCBjYW4gcmVkdWNlIHBlcmZvcm1hbmNlLlxuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9saWJyYXJpZXMvZG9tL3VwZGF0ZXIvc2ltcGxlLyBTaW1wbGUgZXhhbXBsZVxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7RXJyb3J9IHRoZSB2YWx1ZSBpcyBub3QgaXRlcmFibGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBwaXBlcyBhcmUgbm90IGFsbG93ZWQgd2hlbiBjbG9uaW5nIGEgbm9kZS5cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyB0ZW1wbGF0ZSB3YXMgZm91bmQgd2l0aCB0aGUgc3BlY2lmaWVkIGtleS5cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgbWF4aW11bSBkZXB0aCBmb3IgdGhlIHJlY3Vyc2lvbiBpcyByZWFjaGVkLlxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBvYmplY3RcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mIEhUTUxFbGVtZW50XG4gKiBAc3VtbWFyeSBUaGUgdXBkYXRlciBjbGFzcyBjb25uZWN0cyBhbiBvYmplY3Qgd2l0aCB0aGUgZG9tXG4gKi9cbmNsYXNzIFVwZGF0ZXIgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqIEBzaW5jZSAxLjguMFxuXHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG5cdCAqIEBwYXJhbSB7b2JqZWN0fFByb3h5T2JzZXJ2ZXJ8dW5kZWZpbmVkfSBzdWJqZWN0XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgb2JqZWN0XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mIEhUTUxFbGVtZW50XG5cdCAqIEBzZWUge0BsaW5rIE1vbnN0ZXIuRE9NLmZpbmREb2N1bWVudFRlbXBsYXRlfVxuXHQgKi9cblx0Y29uc3RydWN0b3IoZWxlbWVudCwgc3ViamVjdCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHQvKipcblx0XHQgKiBAdHlwZSB7SFRNTEVsZW1lbnR9XG5cdFx0ICovXG5cdFx0aWYgKHN1YmplY3QgPT09IHVuZGVmaW5lZCkgc3ViamVjdCA9IHt9O1xuXHRcdGlmICghaXNJbnN0YW5jZShzdWJqZWN0LCBQcm94eU9ic2VydmVyKSkge1xuXHRcdFx0c3ViamVjdCA9IG5ldyBQcm94eU9ic2VydmVyKHN1YmplY3QpO1xuXHRcdH1cblxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0ge1xuXHRcdFx0ZWxlbWVudDogdmFsaWRhdGVJbnN0YW5jZShlbGVtZW50LCBIVE1MRWxlbWVudCksXG5cdFx0XHRsYXN0OiB7fSxcblx0XHRcdGNhbGxiYWNrczogbmV3IE1hcCgpLFxuXHRcdFx0ZXZlbnRUeXBlczogW1wia2V5dXBcIiwgXCJjbGlja1wiLCBcImNoYW5nZVwiLCBcImRyb3BcIiwgXCJ0b3VjaGVuZFwiLCBcImlucHV0XCJdLFxuXHRcdFx0c3ViamVjdDogc3ViamVjdCxcblx0XHR9O1xuXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uY2FsbGJhY2tzLnNldChcblx0XHRcdFwiY2hlY2tzdGF0ZVwiLFxuXHRcdFx0Z2V0Q2hlY2tTdGF0ZUNhbGxiYWNrLmNhbGwodGhpcyksXG5cdFx0KTtcblxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLnN1YmplY3QuYXR0YWNoT2JzZXJ2ZXIoXG5cdFx0XHRuZXcgT2JzZXJ2ZXIoKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBzID0gdGhpc1tpbnRlcm5hbFN5bWJvbF0uc3ViamVjdC5nZXRSZWFsU3ViamVjdCgpO1xuXG5cdFx0XHRcdGNvbnN0IGRpZmZSZXN1bHQgPSBkaWZmKHRoaXNbaW50ZXJuYWxTeW1ib2xdLmxhc3QsIHMpO1xuXHRcdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5sYXN0ID0gY2xvbmUocyk7XG5cblx0XHRcdFx0Y29uc3QgcHJvbWlzZXMgPSBbXTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IFssIGNoYW5nZV0gb2YgT2JqZWN0LmVudHJpZXMoZGlmZlJlc3VsdCkpIHtcblx0XHRcdFx0XHRwcm9taXNlcy5wdXNoKFxuXHRcdFx0XHRcdFx0bmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRnZXRXaW5kb3coKS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZW1vdmVFbGVtZW50LmNhbGwodGhpcywgY2hhbmdlKTtcblx0XHRcdFx0XHRcdFx0XHRcdGluc2VydEVsZW1lbnQuY2FsbCh0aGlzLCBjaGFuZ2UpO1xuXHRcdFx0XHRcdFx0XHRcdFx0dXBkYXRlQ29udGVudC5jYWxsKHRoaXMsIGNoYW5nZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR1cGRhdGVBdHRyaWJ1dGVzLmNhbGwodGhpcywgY2hhbmdlKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZWplY3QoZXJyb3IpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKTtcblx0XHRcdH0pLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogRGVmYXVsdHM6ICdrZXl1cCcsICdjbGljaycsICdjaGFuZ2UnLCAnZHJvcCcsICd0b3VjaGVuZCdcblx0ICpcblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZGUvZG9jcy9XZWIvRXZlbnRzfVxuXHQgKiBAc2luY2UgMS45LjBcblx0ICogQHBhcmFtIHtBcnJheX0gdHlwZXNcblx0ICogQHJldHVybiB7VXBkYXRlcn1cblx0ICovXG5cdHNldEV2ZW50VHlwZXModHlwZXMpIHtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5ldmVudFR5cGVzID0gdmFsaWRhdGVBcnJheSh0eXBlcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogV2l0aCB0aGlzIG1ldGhvZCwgdGhlIGV2ZW50bGlzdGVuZXJzIGFyZSBob29rZWQgaW4gYW5kIHRoZSBtYWdpYyBiZWdpbnMuXG5cdCAqXG5cdCAqIGBgYGpzXG5cdCAqIHVwZGF0ZXIucnVuKCkudGhlbigoKSA9PiB7XG5cdCAqICAgdXBkYXRlci5lbmFibGVFdmVudFByb2Nlc3NpbmcoKTtcblx0ICogfSk7XG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAc2luY2UgMS45LjBcblx0ICogQHJldHVybiB7VXBkYXRlcn1cblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBiaW5kIGFyZ3VtZW50IG11c3Qgc3RhcnQgYXMgYSB2YWx1ZSB3aXRoIGEgcGF0aFxuXHQgKi9cblx0ZW5hYmxlRXZlbnRQcm9jZXNzaW5nKCkge1xuXHRcdHRoaXMuZGlzYWJsZUV2ZW50UHJvY2Vzc2luZygpO1xuXG5cdFx0Zm9yIChjb25zdCB0eXBlIG9mIHRoaXNbaW50ZXJuYWxTeW1ib2xdLmV2ZW50VHlwZXMpIHtcblx0XHRcdC8vIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0V2ZW50VGFyZ2V0L2FkZEV2ZW50TGlzdGVuZXJcblx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcblx0XHRcdFx0dHlwZSxcblx0XHRcdFx0Z2V0Q29udHJvbEV2ZW50SGFuZGxlci5jYWxsKHRoaXMpLFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Y2FwdHVyZTogdHJ1ZSxcblx0XHRcdFx0XHRwYXNzaXZlOiB0cnVlLFxuXHRcdFx0XHR9LFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCB0dXJucyBvZmYgdGhlIG1hZ2ljIG9yIHdobyBsb3ZlcyBpdCBtb3JlIHByb2ZhbmUgaXQgcmVtb3ZlcyB0aGUgZXZlbnRMaXN0ZW5lci5cblx0ICpcblx0ICogQHNpbmNlIDEuOS4wXG5cdCAqIEByZXR1cm4ge1VwZGF0ZXJ9XG5cdCAqL1xuXHRkaXNhYmxlRXZlbnRQcm9jZXNzaW5nKCkge1xuXHRcdGZvciAoY29uc3QgdHlwZSBvZiB0aGlzW2ludGVybmFsU3ltYm9sXS5ldmVudFR5cGVzKSB7XG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXG5cdFx0XHRcdHR5cGUsXG5cdFx0XHRcdGdldENvbnRyb2xFdmVudEhhbmRsZXIuY2FsbCh0aGlzKSxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIHJ1biBtZXRob2QgbXVzdCBiZSBjYWxsZWQgZm9yIHRoZSB1cGRhdGUgdG8gc3RhcnQgd29ya2luZy5cblx0ICogVGhlIG1ldGhvZCBlbnN1cmVzIHRoYXQgY2hhbmdlcyBhcmUgZGV0ZWN0ZWQuXG5cdCAqXG5cdCAqIGBgYGpzXG5cdCAqIHVwZGF0ZXIucnVuKCkudGhlbigoKSA9PiB7XG5cdCAqICAgdXBkYXRlci5lbmFibGVFdmVudFByb2Nlc3NpbmcoKTtcblx0ICogfSk7XG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAc3VtbWFyeSBMZXQgdGhlIG1hZ2ljIGJlZ2luXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRydW4oKSB7XG5cdFx0Ly8gdGhlIGtleSBfX2luaXRfX2hhcyBubyBmdXJ0aGVyIG1lYW5pbmcgYW5kIGlzIG9ubHlcblx0XHQvLyB1c2VkIHRvIGNyZWF0ZSB0aGUgZGlmZiBmb3IgZW1wdHkgb2JqZWN0cy5cblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5sYXN0ID0geyBfX2luaXRfXzogdHJ1ZSB9O1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsU3ltYm9sXS5zdWJqZWN0Lm5vdGlmeU9ic2VydmVycygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHZhbHVlcyBvZiBib3VuZCBlbGVtZW50cyBhbmQgY2hhbmdlcyB0aGVtIGluIHN1YmplY3Rcblx0ICpcblx0ICogQHNpbmNlIDEuMjcuMFxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5VcGRhdGVyfVxuXHQgKi9cblx0cmV0cmlldmUoKSB7XG5cdFx0cmV0cmlldmVGcm9tQmluZGluZ3MuY2FsbCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBJZiB5b3UgaGF2ZSBwYXNzZWQgYSBQcm94eU9ic2VydmVyIGluIHRoZSBjb25zdHJ1Y3RvciwgeW91IHdpbGwgZ2V0IHRoZSBvYmplY3QgdGhhdCB0aGUgUHJveHlPYnNlcnZlciBtYW5hZ2VzIGhlcmUuXG5cdCAqIEhvd2V2ZXIsIGlmIHlvdSBwYXNzZWQgYSBzaW1wbGUgb2JqZWN0LCBoZXJlIHlvdSB3aWxsIGdldCBhIHByb3h5IGZvciB0aGF0IG9iamVjdC5cblx0ICpcblx0ICogRm9yIGNoYW5nZXMsIHRoZSBQcm94eU9ic2VydmVyIG11c3QgYmUgdXNlZC5cblx0ICpcblx0ICogQHNpbmNlIDEuOC4wXG5cdCAqIEByZXR1cm4ge1Byb3h5fVxuXHQgKi9cblx0Z2V0U3ViamVjdCgpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbFN5bWJvbF0uc3ViamVjdC5nZXRTdWJqZWN0KCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgdG8gcmVnaXN0ZXIgY29tbWFuZHMgdGhhdCBjYW4gYmUgY2FsbGVkIHZpYSBjYWxsOiBpbnN0cnVjdGlvbi5cblx0ICogVGhpcyBjYW4gYmUgdXNlZCB0byBwcm92aWRlIGEgcGlwZSB3aXRoIGl0cyBvd24gZnVuY3Rpb25hbGl0eS5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcblx0ICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcblx0ICogQHJldHVybiB7VHJhbnNmb3JtZXJ9XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgZnVuY3Rpb25cblx0ICovXG5cdHNldENhbGxiYWNrKG5hbWUsIGNhbGxiYWNrKSB7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uY2FsbGJhY2tzLnNldChuYW1lLCBjYWxsYmFjayk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS45LjBcbiAqIEByZXR1cm4ge2Z1bmN0aW9uXG4gKiBAdGhpcyBVcGRhdGVyXG4gKi9cbmZ1bmN0aW9uIGdldENoZWNrU3RhdGVDYWxsYmFjaygpIHtcblx0cmV0dXJuIGZ1bmN0aW9uIChjdXJyZW50KSB7XG5cdFx0Ly8gdGhpcyBpcyBhIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBvYmplY3QgKHRoZXJlZm9yZSBubyBhcnJheSBmdW5jdGlvbiBoZXJlKVxuXHRcdGlmICh0aGlzIGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCkge1xuXHRcdFx0aWYgKFtcInJhZGlvXCIsIFwiY2hlY2tib3hcIl0uaW5kZXhPZih0aGlzLnR5cGUpICE9PSAtMSkge1xuXHRcdFx0XHRyZXR1cm4gYCR7dGhpcy52YWx1ZX1gID09PSBgJHtjdXJyZW50fWAgPyBcInRydWVcIiA6IHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHRoaXMgaW5zdGFuY2VvZiBIVE1MT3B0aW9uRWxlbWVudCkge1xuXHRcdFx0aWYgKGlzQXJyYXkoY3VycmVudCkgJiYgY3VycmVudC5pbmRleE9mKHRoaXMudmFsdWUpICE9PSAtMSkge1xuXHRcdFx0XHRyZXR1cm4gXCJ0cnVlXCI7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IHN5bWJvbCA9IFN5bWJvbChcIkBzY2h1a2FpL21vbnN0ZXIvdXBkYXRlckBARXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn1cbiAqIEB0aGlzIFVwZGF0ZXJcbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgYmluZCBhcmd1bWVudCBtdXN0IHN0YXJ0IGFzIGEgdmFsdWUgd2l0aCBhIHBhdGhcbiAqL1xuZnVuY3Rpb24gZ2V0Q29udHJvbEV2ZW50SGFuZGxlcigpIHtcblx0aWYgKHRoaXNbc3ltYm9sXSkge1xuXHRcdHJldHVybiB0aGlzW3N5bWJvbF07XG5cdH1cblxuXHQvKipcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBiaW5kIGFyZ3VtZW50IG11c3Qgc3RhcnQgYXMgYSB2YWx1ZSB3aXRoIGEgcGF0aC5cblx0ICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIG9iamVjdFxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKi9cblx0dGhpc1tzeW1ib2xdID0gKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgZWxlbWVudCA9IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KGV2ZW50LCBBVFRSSUJVVEVfVVBEQVRFUl9CSU5EKTtcblxuXHRcdGlmIChlbGVtZW50ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0cXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuXHRcdFx0cmV0cmlldmVBbmRTZXRWYWx1ZS5jYWxsKHRoaXMsIGVsZW1lbnQpO1xuXHRcdH0pO1xuXHR9O1xuXG5cdHJldHVybiB0aGlzW3N5bWJvbF07XG59XG5cbi8qKlxuICogQHRocm93cyB7RXJyb3J9IHRoZSBiaW5kIGFyZ3VtZW50IG11c3Qgc3RhcnQgYXMgYSB2YWx1ZSB3aXRoIGEgcGF0aFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybiB2b2lkXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiByZXRyaWV2ZUFuZFNldFZhbHVlKGVsZW1lbnQpIHtcblx0Y29uc3QgcGF0aGZpbmRlciA9IG5ldyBQYXRoZmluZGVyKHRoaXNbaW50ZXJuYWxTeW1ib2xdLnN1YmplY3QuZ2V0U3ViamVjdCgpKTtcblxuXHRsZXQgcGF0aCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9VUERBVEVSX0JJTkQpO1xuXHRpZiAocGF0aCA9PT0gbnVsbClcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgYmluZCBhcmd1bWVudCBtdXN0IHN0YXJ0IGFzIGEgdmFsdWUgd2l0aCBhIHBhdGhcIik7XG5cblx0aWYgKHBhdGguaW5kZXhPZihcInBhdGg6XCIpICE9PSAwKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIGJpbmQgYXJndW1lbnQgbXVzdCBzdGFydCBhcyBhIHZhbHVlIHdpdGggYSBwYXRoXCIpO1xuXHR9XG5cblx0cGF0aCA9IHBhdGguc3Vic3RyaW5nKDUpOyAvLyByZW1vdmUgcGF0aDogZnJvbSB0aGUgc3RyaW5nXG5cblx0bGV0IHZhbHVlO1xuXG5cdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCkge1xuXHRcdHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG5cdFx0XHRjYXNlIFwiY2hlY2tib3hcIjpcblx0XHRcdFx0dmFsdWUgPSBlbGVtZW50LmNoZWNrZWQgPyBlbGVtZW50LnZhbHVlIDogdW5kZWZpbmVkO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHZhbHVlID0gZWxlbWVudC52YWx1ZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50KSB7XG5cdFx0dmFsdWUgPSBlbGVtZW50LnZhbHVlO1xuXHR9IGVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MU2VsZWN0RWxlbWVudCkge1xuXHRcdHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG5cdFx0XHRjYXNlIFwic2VsZWN0LW9uZVwiOlxuXHRcdFx0XHR2YWx1ZSA9IGVsZW1lbnQudmFsdWU7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcInNlbGVjdC1tdWx0aXBsZVwiOlxuXHRcdFx0XHR2YWx1ZSA9IGVsZW1lbnQudmFsdWU7XG5cblx0XHRcdFx0bGV0IG9wdGlvbnMgPSBlbGVtZW50Py5zZWxlY3RlZE9wdGlvbnM7XG5cdFx0XHRcdGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0b3B0aW9ucyA9IGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcIjpzY29wZSBvcHRpb246Y2hlY2tlZFwiKTtcblx0XHRcdFx0dmFsdWUgPSBBcnJheS5mcm9tKG9wdGlvbnMpLm1hcCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSk7XG5cblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXG5cdFx0Ly8gdmFsdWVzIGZyb20gY3VzdG9tIGVsZW1lbnRzXG5cdH0gZWxzZSBpZiAoXG5cdFx0KGVsZW1lbnQ/LmNvbnN0cnVjdG9yPy5wcm90b3R5cGUgJiZcblx0XHRcdCEhT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihcblx0XHRcdFx0ZWxlbWVudC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsXG5cdFx0XHRcdFwidmFsdWVcIixcblx0XHRcdCk/LltcImdldFwiXSkgfHxcblx0XHRlbGVtZW50Lmhhc093blByb3BlcnR5KFwidmFsdWVcIilcblx0KSB7XG5cdFx0dmFsdWUgPSBlbGVtZW50Py5bXCJ2YWx1ZVwiXTtcblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCBvYmplY3RcIik7XG5cdH1cblxuXHRpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG5cdFx0Y29uc3QgdHlwZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9VUERBVEVSX0JJTkRfVFlQRSk7XG5cdFx0c3dpdGNoICh0eXBlKSB7XG5cdFx0XHRjYXNlIFwibnVtYmVyXCI6XG5cdFx0XHRjYXNlIFwiaW50XCI6XG5cdFx0XHRjYXNlIFwiZmxvYXRcIjpcblx0XHRcdGNhc2UgXCJpbnRlZ2VyXCI6XG5cdFx0XHRcdHZhbHVlID0gTnVtYmVyKHZhbHVlKTtcblx0XHRcdFx0aWYgKGlzTmFOKHZhbHVlKSkge1xuXHRcdFx0XHRcdHZhbHVlID0gMDtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJib29sZWFuXCI6XG5cdFx0XHRjYXNlIFwiYm9vbFwiOlxuXHRcdFx0Y2FzZSBcImNoZWNrYm94XCI6XG5cdFx0XHRcdHZhbHVlID0gdmFsdWUgPT09IFwidHJ1ZVwiIHx8IHZhbHVlID09PSBcIjFcIiB8fCB2YWx1ZSA9PT0gXCJvblwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJhcnJheVwiOlxuXHRcdFx0Y2FzZSBcImxpc3RcIjpcblx0XHRcdFx0dmFsdWUgPSB2YWx1ZS5zcGxpdChcIixcIik7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIm9iamVjdFwiOlxuXHRcdFx0Y2FzZSBcImpzb25cIjpcblx0XHRcdFx0dmFsdWUgPSBKU09OLnBhcnNlKHZhbHVlKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHRjb25zdCBjb3B5ID0gY2xvbmUodGhpc1tpbnRlcm5hbFN5bWJvbF0uc3ViamVjdC5nZXRSZWFsU3ViamVjdCgpKTtcblxuXHRjb25zdCBwZiA9IG5ldyBQYXRoZmluZGVyKGNvcHkpO1xuXHRwZi5zZXRWaWEocGF0aCwgdmFsdWUpO1xuXG5cdGNvbnN0IGRpZmZSZXN1bHQgPSBkaWZmKGNvcHksIHRoaXNbaW50ZXJuYWxTeW1ib2xdLnN1YmplY3QuZ2V0UmVhbFN1YmplY3QoKSk7XG5cblx0aWYgKGRpZmZSZXN1bHQubGVuZ3RoID4gMCkge1xuXHRcdHBhdGhmaW5kZXIuc2V0VmlhKHBhdGgsIHZhbHVlKTtcblx0fVxufVxuXG4vKipcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjcuMFxuICogQHJldHVybiB2b2lkXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiByZXRyaWV2ZUZyb21CaW5kaW5ncygpIHtcblx0aWYgKHRoaXNbaW50ZXJuYWxTeW1ib2xdLmVsZW1lbnQubWF0Y2hlcyhgWyR7QVRUUklCVVRFX1VQREFURVJfQklORH1dYCkpIHtcblx0XHRyZXRyaWV2ZUFuZFNldFZhbHVlLmNhbGwodGhpcywgdGhpc1tpbnRlcm5hbFN5bWJvbF0uZWxlbWVudCk7XG5cdH1cblxuXHRmb3IgKGNvbnN0IFssIGVsZW1lbnRdIG9mIHRoaXNbaW50ZXJuYWxTeW1ib2xdLmVsZW1lbnRcblx0XHQucXVlcnlTZWxlY3RvckFsbChgWyR7QVRUUklCVVRFX1VQREFURVJfQklORH1dYClcblx0XHQuZW50cmllcygpKSB7XG5cdFx0cmV0cmlldmVBbmRTZXRWYWx1ZS5jYWxsKHRoaXMsIGVsZW1lbnQpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKiBAcGFyYW0ge29iamVjdH0gY2hhbmdlXG4gKiBAcmV0dXJuIHt2b2lkfVxuICovXG5mdW5jdGlvbiByZW1vdmVFbGVtZW50KGNoYW5nZSkge1xuXHRmb3IgKGNvbnN0IFssIGVsZW1lbnRdIG9mIHRoaXNbaW50ZXJuYWxTeW1ib2xdLmVsZW1lbnRcblx0XHQucXVlcnlTZWxlY3RvckFsbChgOnNjb3BlIFske0FUVFJJQlVURV9VUERBVEVSX1JFTU9WRX1dYClcblx0XHQuZW50cmllcygpKSB7XG5cdFx0ZWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsZW1lbnQpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKiBAcGFyYW0ge29iamVjdH0gY2hhbmdlXG4gKiBAcmV0dXJuIHt2b2lkfVxuICogQHRocm93cyB7RXJyb3J9IHRoZSB2YWx1ZSBpcyBub3QgaXRlcmFibGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBwaXBlcyBhcmUgbm90IGFsbG93ZWQgd2hlbiBjbG9uaW5nIGEgbm9kZS5cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyB0ZW1wbGF0ZSB3YXMgZm91bmQgd2l0aCB0aGUgc3BlY2lmaWVkIGtleS5cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgbWF4aW11bSBkZXB0aCBmb3IgdGhlIHJlY3Vyc2lvbiBpcyByZWFjaGVkLlxuICogQHRoaXMgVXBkYXRlclxuICovXG5mdW5jdGlvbiBpbnNlcnRFbGVtZW50KGNoYW5nZSkge1xuXHRjb25zdCBzdWJqZWN0ID0gdGhpc1tpbnRlcm5hbFN5bWJvbF0uc3ViamVjdC5nZXRSZWFsU3ViamVjdCgpO1xuXG5cdGNvbnN0IG1lbSA9IG5ldyBXZWFrU2V0KCk7XG5cdGxldCB3ZCA9IDA7XG5cblx0Y29uc3QgY29udGFpbmVyID0gdGhpc1tpbnRlcm5hbFN5bWJvbF0uZWxlbWVudDtcblxuXHR3aGlsZSAodHJ1ZSkge1xuXHRcdGxldCBmb3VuZCA9IGZhbHNlO1xuXHRcdHdkKys7XG5cblx0XHRjb25zdCBwID0gY2xvbmUoY2hhbmdlPy5bXCJwYXRoXCJdKTtcblx0XHRpZiAoIWlzQXJyYXkocCkpIHJldHVybjtcblxuXHRcdHdoaWxlIChwLmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbnN0IGN1cnJlbnQgPSBwLmpvaW4oXCIuXCIpO1xuXG5cdFx0XHRsZXQgaXRlcmF0b3IgPSBuZXcgU2V0KCk7XG5cdFx0XHRjb25zdCBxdWVyeSA9IGBbJHtBVFRSSUJVVEVfVVBEQVRFUl9JTlNFUlR9Kj1cInBhdGg6JHtjdXJyZW50fVwiXWA7XG5cblx0XHRcdGNvbnN0IGUgPSBjb250YWluZXIucXVlcnlTZWxlY3RvckFsbChxdWVyeSk7XG5cblx0XHRcdGlmIChlLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0aXRlcmF0b3IgPSBuZXcgU2V0KFsuLi5lXSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChjb250YWluZXIubWF0Y2hlcyhxdWVyeSkpIHtcblx0XHRcdFx0aXRlcmF0b3IuYWRkKGNvbnRhaW5lcik7XG5cdFx0XHR9XG5cblx0XHRcdGZvciAoY29uc3QgWywgY29udGFpbmVyRWxlbWVudF0gb2YgaXRlcmF0b3IuZW50cmllcygpKSB7XG5cdFx0XHRcdGlmIChtZW0uaGFzKGNvbnRhaW5lckVsZW1lbnQpKSBjb250aW51ZTtcblx0XHRcdFx0bWVtLmFkZChjb250YWluZXJFbGVtZW50KTtcblxuXHRcdFx0XHRmb3VuZCA9IHRydWU7XG5cblx0XHRcdFx0Y29uc3QgYXR0cmlidXRlcyA9IGNvbnRhaW5lckVsZW1lbnQuZ2V0QXR0cmlidXRlKFxuXHRcdFx0XHRcdEFUVFJJQlVURV9VUERBVEVSX0lOU0VSVCxcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKGF0dHJpYnV0ZXMgPT09IG51bGwpIGNvbnRpbnVlO1xuXG5cdFx0XHRcdGNvbnN0IGRlZiA9IHRyaW1TcGFjZXMoYXR0cmlidXRlcyk7XG5cdFx0XHRcdGNvbnN0IGkgPSBkZWYuaW5kZXhPZihcIiBcIik7XG5cdFx0XHRcdGNvbnN0IGtleSA9IHRyaW1TcGFjZXMoZGVmLnN1YnN0cigwLCBpKSk7XG5cdFx0XHRcdGNvbnN0IHJlZlByZWZpeCA9IGAke2tleX0tYDtcblx0XHRcdFx0Y29uc3QgY21kID0gdHJpbVNwYWNlcyhkZWYuc3Vic3RyKGkpKTtcblxuXHRcdFx0XHQvLyB0aGlzIGNhc2UgaXMgYWN0dWFsbHkgZXhjbHVkZWQgYnkgdGhlIHF1ZXJ5IGJ1dCBpcyBuZXZlcnRoZWxlc3MgY2hlY2tlZCBhZ2FpbiBoZXJlXG5cdFx0XHRcdGlmIChjbWQuaW5kZXhPZihcInxcIikgPiAwKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwicGlwZXMgYXJlIG5vdCBhbGxvd2VkIHdoZW4gY2xvbmluZyBhIG5vZGUuXCIpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgcGlwZSA9IG5ldyBQaXBlKGNtZCk7XG5cdFx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmNhbGxiYWNrcy5mb3JFYWNoKChmLCBuKSA9PiB7XG5cdFx0XHRcdFx0cGlwZS5zZXRDYWxsYmFjayhuLCBmKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0bGV0IHZhbHVlO1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGNvbnRhaW5lckVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKEFUVFJJQlVURV9FUlJPUk1FU1NBR0UpO1xuXHRcdFx0XHRcdHZhbHVlID0gcGlwZS5ydW4oc3ViamVjdCk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRjb250YWluZXJFbGVtZW50LnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgZGF0YVBhdGggPSBjbWQuc3BsaXQoXCI6XCIpLnBvcCgpO1xuXG5cdFx0XHRcdGxldCBpbnNlcnRQb2ludDtcblx0XHRcdFx0aWYgKGNvbnRhaW5lckVsZW1lbnQuaGFzQ2hpbGROb2RlcygpKSB7XG5cdFx0XHRcdFx0aW5zZXJ0UG9pbnQgPSBjb250YWluZXJFbGVtZW50Lmxhc3RDaGlsZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghaXNJdGVyYWJsZSh2YWx1ZSkpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgdmFsdWUgaXMgbm90IGl0ZXJhYmxlXCIpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgYXZhaWxhYmxlID0gbmV3IFNldCgpO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgW2ldIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlKSkge1xuXHRcdFx0XHRcdGNvbnN0IHJlZiA9IHJlZlByZWZpeCArIGk7XG5cdFx0XHRcdFx0Y29uc3QgY3VycmVudFBhdGggPSBgJHtkYXRhUGF0aH0uJHtpfWA7XG5cblx0XHRcdFx0XHRhdmFpbGFibGUuYWRkKHJlZik7XG5cdFx0XHRcdFx0Y29uc3QgcmVmRWxlbWVudCA9IGNvbnRhaW5lckVsZW1lbnQucXVlcnlTZWxlY3Rvcihcblx0XHRcdFx0XHRcdGBbJHtBVFRSSUJVVEVfVVBEQVRFUl9JTlNFUlRfUkVGRVJFTkNFfT1cIiR7cmVmfVwiXWAsXG5cdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdGlmIChyZWZFbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdFx0XHRcdGluc2VydFBvaW50ID0gcmVmRWxlbWVudDtcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGFwcGVuZE5ld0RvY3VtZW50RnJhZ21lbnQoY29udGFpbmVyRWxlbWVudCwga2V5LCByZWYsIGN1cnJlbnRQYXRoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IG5vZGVzID0gY29udGFpbmVyRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFxuXHRcdFx0XHRcdGBbJHtBVFRSSUJVVEVfVVBEQVRFUl9JTlNFUlRfUkVGRVJFTkNFfSo9XCIke3JlZlByZWZpeH1cIl1gLFxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgWywgbm9kZV0gb2YgT2JqZWN0LmVudHJpZXMobm9kZXMpKSB7XG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0IWF2YWlsYWJsZS5oYXMoXG5cdFx0XHRcdFx0XHRcdG5vZGUuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9VUERBVEVSX0lOU0VSVF9SRUZFUkVOQ0UpLFxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0Y29udGFpbmVyRWxlbWVudC5yZW1vdmVDaGlsZChub2RlKTtcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdFx0Y29udGFpbmVyRWxlbWVudC5zZXRBdHRyaWJ1dGUoXG5cdFx0XHRcdFx0XHRcdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRcdFx0XHRcdFx0XHRgJHtjb250YWluZXJFbGVtZW50LmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfRVJST1JNRVNTQUdFKX0sICR7XG5cdFx0XHRcdFx0XHRcdFx0XHRlLm1lc3NhZ2Vcblx0XHRcdFx0XHRcdFx0XHR9YC50cmltKCksXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHAucG9wKCk7XG5cdFx0fVxuXG5cdFx0aWYgKGZvdW5kID09PSBmYWxzZSkgYnJlYWs7XG5cdFx0aWYgKHdkKysgPiAyMDApIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBtYXhpbXVtIGRlcHRoIGZvciB0aGUgcmVjdXJzaW9uIGlzIHJlYWNoZWQuXCIpO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqXG4gKiBAcHJpdmF0ZVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGNvbnRhaW5lclxuICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICogQHBhcmFtIHtzdHJpbmd9IHJlZlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAqIEB0aHJvd3Mge0Vycm9yfSBubyB0ZW1wbGF0ZSB3YXMgZm91bmQgd2l0aCB0aGUgc3BlY2lmaWVkIGtleS5cbiAqL1xuZnVuY3Rpb24gYXBwZW5kTmV3RG9jdW1lbnRGcmFnbWVudChjb250YWluZXIsIGtleSwgcmVmLCBwYXRoKSB7XG5cdGNvbnN0IHRlbXBsYXRlID0gZmluZERvY3VtZW50VGVtcGxhdGUoa2V5LCBjb250YWluZXIpO1xuXG5cdGNvbnN0IG5vZGVzID0gdGVtcGxhdGUuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuXHRmb3IgKGNvbnN0IFssIG5vZGVdIG9mIE9iamVjdC5lbnRyaWVzKG5vZGVzLmNoaWxkTm9kZXMpKSB7XG5cdFx0aWYgKG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0YXBwbHlSZWN1cnNpdmUobm9kZSwga2V5LCBwYXRoKTtcblx0XHRcdG5vZGUuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9VUERBVEVSX0lOU0VSVF9SRUZFUkVOQ0UsIHJlZik7XG5cdFx0fVxuXG5cdFx0Y29udGFpbmVyLmFwcGVuZENoaWxkKG5vZGUpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTAuMFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGFwcGx5UmVjdXJzaXZlKG5vZGUsIGtleSwgcGF0aCkge1xuXHRpZiAobm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0aWYgKG5vZGUuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9VUERBVEVSX1JFUExBQ0UpKSB7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IG5vZGUuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9VUERBVEVSX1JFUExBQ0UpO1xuXHRcdFx0bm9kZS5zZXRBdHRyaWJ1dGUoXG5cdFx0XHRcdEFUVFJJQlVURV9VUERBVEVSX1JFUExBQ0UsXG5cdFx0XHRcdHZhbHVlLnJlcGxhY2VBbGwoYHBhdGg6JHtrZXl9YCwgYHBhdGg6JHtwYXRofWApLFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRpZiAobm9kZS5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX1VQREFURVJfQVRUUklCVVRFUykpIHtcblx0XHRcdGNvbnN0IHZhbHVlID0gbm9kZS5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1VQREFURVJfQVRUUklCVVRFUyk7XG5cdFx0XHRub2RlLnNldEF0dHJpYnV0ZShcblx0XHRcdFx0QVRUUklCVVRFX1VQREFURVJfQVRUUklCVVRFUyxcblx0XHRcdFx0dmFsdWUucmVwbGFjZUFsbChgcGF0aDoke2tleX1gLCBgcGF0aDoke3BhdGh9YCksXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgWywgY2hpbGRdIG9mIE9iamVjdC5lbnRyaWVzKG5vZGUuY2hpbGROb2RlcykpIHtcblx0XHRcdGFwcGx5UmVjdXJzaXZlKGNoaWxkLCBrZXksIHBhdGgpO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICogQHBhcmFtIHtvYmplY3R9IGNoYW5nZVxuICogQHJldHVybiB7dm9pZH1cbiAqIEB0aGlzIFVwZGF0ZXJcbiAqL1xuZnVuY3Rpb24gdXBkYXRlQ29udGVudChjaGFuZ2UpIHtcblx0Y29uc3Qgc3ViamVjdCA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdLnN1YmplY3QuZ2V0UmVhbFN1YmplY3QoKTtcblxuXHRjb25zdCBwID0gY2xvbmUoY2hhbmdlPy5bXCJwYXRoXCJdKTtcblx0cnVuVXBkYXRlQ29udGVudC5jYWxsKHRoaXMsIHRoaXNbaW50ZXJuYWxTeW1ib2xdLmVsZW1lbnQsIHAsIHN1YmplY3QpO1xuXG5cdGNvbnN0IHNsb3RzID0gdGhpc1tpbnRlcm5hbFN5bWJvbF0uZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwic2xvdFwiKTtcblx0aWYgKHNsb3RzLmxlbmd0aCA+IDApIHtcblx0XHRmb3IgKGNvbnN0IFssIHNsb3RdIG9mIE9iamVjdC5lbnRyaWVzKHNsb3RzKSkge1xuXHRcdFx0Zm9yIChjb25zdCBbLCBlbGVtZW50XSBvZiBPYmplY3QuZW50cmllcyhzbG90LmFzc2lnbmVkTm9kZXMoKSkpIHtcblx0XHRcdFx0cnVuVXBkYXRlQ29udGVudC5jYWxsKHRoaXMsIGVsZW1lbnQsIHAsIHN1YmplY3QpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gY29udGFpbmVyXG4gKiBAcGFyYW0ge2FycmF5fSBwYXJ0c1xuICogQHBhcmFtIHtvYmplY3R9IHN1YmplY3RcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHJ1blVwZGF0ZUNvbnRlbnQoY29udGFpbmVyLCBwYXJ0cywgc3ViamVjdCkge1xuXHRpZiAoIWlzQXJyYXkocGFydHMpKSByZXR1cm47XG5cdGlmICghKGNvbnRhaW5lciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkgcmV0dXJuO1xuXHRwYXJ0cyA9IGNsb25lKHBhcnRzKTtcblxuXHRjb25zdCBtZW0gPSBuZXcgV2Vha1NldCgpO1xuXG5cdHdoaWxlIChwYXJ0cy5sZW5ndGggPiAwKSB7XG5cdFx0Y29uc3QgY3VycmVudCA9IHBhcnRzLmpvaW4oXCIuXCIpO1xuXHRcdHBhcnRzLnBvcCgpO1xuXG5cdFx0Ly8gVW5mb3J0dW5hdGVseSwgc3RhdGljIGRhdGEgaXMgYWx3YXlzIGNoYW5nZWQgYXMgd2VsbCwgc2luY2UgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHJlYWN0IHRvIGNoYW5nZXMgaGVyZS5cblx0XHRjb25zdCBxdWVyeSA9IGBbJHtBVFRSSUJVVEVfVVBEQVRFUl9SRVBMQUNFfV49XCJwYXRoOiR7Y3VycmVudH1cIl0sIFske0FUVFJJQlVURV9VUERBVEVSX1JFUExBQ0V9Xj1cInN0YXRpYzpcIl0sIFske0FUVFJJQlVURV9VUERBVEVSX1JFUExBQ0V9Xj1cImkxOG46XCJdYDtcblx0XHRjb25zdCBlID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoYCR7cXVlcnl9YCk7XG5cblx0XHRjb25zdCBpdGVyYXRvciA9IG5ldyBTZXQoWy4uLmVdKTtcblxuXHRcdGlmIChjb250YWluZXIubWF0Y2hlcyhxdWVyeSkpIHtcblx0XHRcdGl0ZXJhdG9yLmFkZChjb250YWluZXIpO1xuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIEB0eXBlIHtIVE1MRWxlbWVudH1cblx0XHQgKi9cblx0XHRmb3IgKGNvbnN0IFtlbGVtZW50XSBvZiBpdGVyYXRvci5lbnRyaWVzKCkpIHtcblx0XHRcdGlmIChtZW0uaGFzKGVsZW1lbnQpKSByZXR1cm47XG5cdFx0XHRtZW0uYWRkKGVsZW1lbnQpO1xuXG5cdFx0XHRjb25zdCBhdHRyaWJ1dGVzID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1VQREFURVJfUkVQTEFDRSk7XG5cdFx0XHRjb25zdCBjbWQgPSB0cmltU3BhY2VzKGF0dHJpYnV0ZXMpO1xuXG5cdFx0XHRjb25zdCBwaXBlID0gbmV3IFBpcGUoY21kKTtcblx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmNhbGxiYWNrcy5mb3JFYWNoKChmLCBuKSA9PiB7XG5cdFx0XHRcdHBpcGUuc2V0Q2FsbGJhY2sobiwgZik7XG5cdFx0XHR9KTtcblxuXHRcdFx0bGV0IHZhbHVlO1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0ZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoQVRUUklCVVRFX0VSUk9STUVTU0FHRSk7XG5cdFx0XHRcdHZhbHVlID0gcGlwZS5ydW4oc3ViamVjdCk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGVsZW1lbnQuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh2YWx1ZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRcdHdoaWxlIChlbGVtZW50LmZpcnN0Q2hpbGQpIHtcblx0XHRcdFx0XHRlbGVtZW50LnJlbW92ZUNoaWxkKGVsZW1lbnQuZmlyc3RDaGlsZCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGVsZW1lbnQuYXBwZW5kQ2hpbGQodmFsdWUpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUoXG5cdFx0XHRcdFx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdFx0XHRcdFx0YCR7ZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0VSUk9STUVTU0FHRSl9LCAke1xuXHRcdFx0XHRcdFx0XHRlLm1lc3NhZ2Vcblx0XHRcdFx0XHRcdH1gLnRyaW0oKSxcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbGVtZW50LmlubmVySFRNTCA9IHZhbHVlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAc2luY2UgMS44LjBcbiAqIEBwYXJhbSB7b2JqZWN0fSBjaGFuZ2VcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZUF0dHJpYnV0ZXMoY2hhbmdlKSB7XG5cdGNvbnN0IHN1YmplY3QgPSB0aGlzW2ludGVybmFsU3ltYm9sXS5zdWJqZWN0LmdldFJlYWxTdWJqZWN0KCk7XG5cdGNvbnN0IHAgPSBjbG9uZShjaGFuZ2U/LltcInBhdGhcIl0pO1xuXHRydW5VcGRhdGVBdHRyaWJ1dGVzLmNhbGwodGhpcywgdGhpc1tpbnRlcm5hbFN5bWJvbF0uZWxlbWVudCwgcCwgc3ViamVjdCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGNvbnRhaW5lclxuICogQHBhcmFtIHthcnJheX0gcGFydHNcbiAqIEBwYXJhbSB7b2JqZWN0fSBzdWJqZWN0XG4gKiBAcmV0dXJuIHt2b2lkfVxuICogQHRoaXMgVXBkYXRlclxuICovXG5mdW5jdGlvbiBydW5VcGRhdGVBdHRyaWJ1dGVzKGNvbnRhaW5lciwgcGFydHMsIHN1YmplY3QpIHtcblx0aWYgKCFpc0FycmF5KHBhcnRzKSkgcmV0dXJuO1xuXHRwYXJ0cyA9IGNsb25lKHBhcnRzKTtcblxuXHRjb25zdCBtZW0gPSBuZXcgV2Vha1NldCgpO1xuXG5cdHdoaWxlIChwYXJ0cy5sZW5ndGggPiAwKSB7XG5cdFx0Y29uc3QgY3VycmVudCA9IHBhcnRzLmpvaW4oXCIuXCIpO1xuXHRcdHBhcnRzLnBvcCgpO1xuXG5cdFx0bGV0IGl0ZXJhdG9yID0gbmV3IFNldCgpO1xuXG5cdFx0Y29uc3QgcXVlcnkgPSBgWyR7QVRUUklCVVRFX1VQREFURVJfU0VMRUNUX1RISVN9XVske0FUVFJJQlVURV9VUERBVEVSX0FUVFJJQlVURVN9XSwgWyR7QVRUUklCVVRFX1VQREFURVJfQVRUUklCVVRFU30qPVwicGF0aDoke2N1cnJlbnR9XCJdLCBbJHtBVFRSSUJVVEVfVVBEQVRFUl9BVFRSSUJVVEVTfV49XCJzdGF0aWM6XCJdLCBbJHtBVFRSSUJVVEVfVVBEQVRFUl9BVFRSSUJVVEVTfV49XCJpMThuOlwiXWA7XG5cblx0XHRjb25zdCBlID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwocXVlcnkpO1xuXG5cdFx0aWYgKGUubGVuZ3RoID4gMCkge1xuXHRcdFx0aXRlcmF0b3IgPSBuZXcgU2V0KFsuLi5lXSk7XG5cdFx0fVxuXG5cdFx0aWYgKGNvbnRhaW5lci5tYXRjaGVzKHF1ZXJ5KSkge1xuXHRcdFx0aXRlcmF0b3IuYWRkKGNvbnRhaW5lcik7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBbZWxlbWVudF0gb2YgaXRlcmF0b3IuZW50cmllcygpKSB7XG5cdFx0XHRpZiAobWVtLmhhcyhlbGVtZW50KSkgcmV0dXJuO1xuXHRcdFx0bWVtLmFkZChlbGVtZW50KTtcblxuXHRcdFx0Ly8gdGhpcyBjYXNlIG9jY3VycyB3aGVuIHRoZSBBVFRSSUJVVEVfVVBEQVRFUl9TRUxFQ1RfVEhJUyBhdHRyaWJ1dGUgaXMgc2V0XG5cdFx0XHRpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9VUERBVEVSX0FUVFJJQlVURVMpKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBhdHRyaWJ1dGVzID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1VQREFURVJfQVRUUklCVVRFUyk7XG5cblx0XHRcdGZvciAobGV0IFssIGRlZl0gb2YgT2JqZWN0LmVudHJpZXMoYXR0cmlidXRlcy5zcGxpdChcIixcIikpKSB7XG5cdFx0XHRcdGRlZiA9IHRyaW1TcGFjZXMoZGVmKTtcblx0XHRcdFx0Y29uc3QgaSA9IGRlZi5pbmRleE9mKFwiIFwiKTtcblx0XHRcdFx0Y29uc3QgbmFtZSA9IHRyaW1TcGFjZXMoZGVmLnN1YnN0cigwLCBpKSk7XG5cdFx0XHRcdGNvbnN0IGNtZCA9IHRyaW1TcGFjZXMoZGVmLnN1YnN0cihpKSk7XG5cblx0XHRcdFx0Y29uc3QgcGlwZSA9IG5ldyBQaXBlKGNtZCk7XG5cblx0XHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uY2FsbGJhY2tzLmZvckVhY2goKGYsIG4pID0+IHtcblx0XHRcdFx0XHRwaXBlLnNldENhbGxiYWNrKG4sIGYsIGVsZW1lbnQpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRsZXQgdmFsdWU7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0ZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoQVRUUklCVVRFX0VSUk9STUVTU0FHRSk7XG5cdFx0XHRcdFx0dmFsdWUgPSBwaXBlLnJ1bihzdWJqZWN0KTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdGVsZW1lbnQuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGVsZW1lbnQuZ2V0QXR0cmlidXRlKG5hbWUpICE9PSB2YWx1ZSkge1xuXHRcdFx0XHRcdGVsZW1lbnQuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGhhbmRsZUlucHV0Q29udHJvbEF0dHJpYnV0ZVVwZGF0ZS5jYWxsKHRoaXMsIGVsZW1lbnQsIG5hbWUsIHZhbHVlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudHwqfSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfHVuZGVmaW5lZH0gdmFsdWVcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKiBAdGhpcyBVcGRhdGVyXG4gKi9cblxuZnVuY3Rpb24gaGFuZGxlSW5wdXRDb250cm9sQXR0cmlidXRlVXBkYXRlKGVsZW1lbnQsIG5hbWUsIHZhbHVlKSB7XG5cdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTFNlbGVjdEVsZW1lbnQpIHtcblx0XHRzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuXHRcdFx0Y2FzZSBcInNlbGVjdC1tdWx0aXBsZVwiOlxuXHRcdFx0XHRmb3IgKGNvbnN0IFtpbmRleCwgb3B0XSBvZiBPYmplY3QuZW50cmllcyhlbGVtZW50Lm9wdGlvbnMpKSB7XG5cdFx0XHRcdFx0aWYgKHZhbHVlLmluZGV4T2Yob3B0LnZhbHVlKSAhPT0gLTEpIHtcblx0XHRcdFx0XHRcdG9wdC5zZWxlY3RlZCA9IHRydWU7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG9wdC5zZWxlY3RlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcInNlbGVjdC1vbmVcIjpcblx0XHRcdFx0Ly8gT25seSBvbmUgdmFsdWUgbWF5IGJlIHNlbGVjdGVkXG5cblx0XHRcdFx0Zm9yIChjb25zdCBbaW5kZXgsIG9wdF0gb2YgT2JqZWN0LmVudHJpZXMoZWxlbWVudC5vcHRpb25zKSkge1xuXHRcdFx0XHRcdGlmIChvcHQudmFsdWUgPT09IHZhbHVlKSB7XG5cdFx0XHRcdFx0XHRlbGVtZW50LnNlbGVjdGVkSW5kZXggPSBpbmRleDtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fSBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCkge1xuXHRcdHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG5cdFx0XHRjYXNlIFwicmFkaW9cIjpcblx0XHRcdFx0aWYgKG5hbWUgPT09IFwiY2hlY2tlZFwiKSB7XG5cdFx0XHRcdFx0ZWxlbWVudC5jaGVja2VkID0gdmFsdWUgIT09IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIFwiY2hlY2tib3hcIjpcblx0XHRcdFx0aWYgKG5hbWUgPT09IFwiY2hlY2tlZFwiKSB7XG5cdFx0XHRcdFx0ZWxlbWVudC5jaGVja2VkID0gdmFsdWUgIT09IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcInRleHRcIjpcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGlmIChuYW1lID09PSBcInZhbHVlXCIpIHtcblx0XHRcdFx0XHRlbGVtZW50LnZhbHVlID0gdmFsdWUgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiB2YWx1ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fSBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCkge1xuXHRcdGlmIChuYW1lID09PSBcInZhbHVlXCIpIHtcblx0XHRcdGVsZW1lbnQudmFsdWUgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IHZhbHVlO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7Tm9kZUxpc3R8SFRNTEVsZW1lbnR8U2V0PEhUTUxFbGVtZW50Pn0gZWxlbWVudHNcbiAqIEBwYXJhbSB7U3ltYm9sfSBzeW1ib2xcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmplY3RcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWdcbiAqXG4gKiBDb25maWc6IGVuYWJsZUV2ZW50UHJvY2Vzc2luZyB7Ym9vbGVhbn0gLSBkZWZhdWx0OiBmYWxzZSAtIGVuYWJsZXMgdGhlIGV2ZW50IHByb2Nlc3NpbmdcbiAqXG4gKiBAcmV0dXJuIHtQcm9taXNlW119XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjIzLjBcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gZWxlbWVudHMgaXMgbm90IGFuIGluc3RhbmNlIG9mIE5vZGVMaXN0LCBIVE1MRWxlbWVudCBvciBTZXRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBIVE1MRWxlbWVudFxuICogQHRocm93cyB7VHlwZUVycm9yfSBzeW1ib2wgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBTeW1ib2xcbiAqL1xuZnVuY3Rpb24gYWRkT2JqZWN0V2l0aFVwZGF0ZXJUb0VsZW1lbnQoZWxlbWVudHMsIHN5bWJvbCwgb2JqZWN0LCBjb25maWcgPSB7fSkge1xuXHRpZiAoISh0aGlzIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcblx0XHRcdFwidGhlIGNvbnRleHQgb2YgdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIEhUTUxFbGVtZW50XCIsXG5cdFx0KTtcblx0fVxuXG5cdGlmICghKHR5cGVvZiBzeW1ib2wgPT09IFwic3ltYm9sXCIpKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInN5bWJvbCBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFN5bWJvbFwiKTtcblx0fVxuXG5cdGNvbnN0IHVwZGF0ZXJzID0gbmV3IFNldCgpO1xuXG5cdGlmIChlbGVtZW50cyBpbnN0YW5jZW9mIE5vZGVMaXN0KSB7XG5cdFx0ZWxlbWVudHMgPSBuZXcgU2V0KFsuLi5lbGVtZW50c10pO1xuXHR9IGVsc2UgaWYgKGVsZW1lbnRzIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRlbGVtZW50cyA9IG5ldyBTZXQoW2VsZW1lbnRzXSk7XG5cdH0gZWxzZSBpZiAoZWxlbWVudHMgaW5zdGFuY2VvZiBTZXQpIHtcblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFxuXHRcdFx0YGVsZW1lbnRzIGlzIG5vdCBhIHZhbGlkIHR5cGUuIChhY3R1YWw6ICR7dHlwZW9mIGVsZW1lbnRzfSlgLFxuXHRcdCk7XG5cdH1cblxuXHRjb25zdCByZXN1bHQgPSBbXTtcblxuXHRjb25zdCB1cGRhdGVyQ2FsbGJhY2tzID0gW107XG5cdGNvbnN0IGNiID0gdGhpcz8uW3VwZGF0ZXJUcmFuc2Zvcm1lck1ldGhvZHNTeW1ib2xdO1xuXHRpZiAodGhpcyBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIHR5cGVvZiBjYiA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0Y29uc3QgY2FsbGJhY2tzID0gY2IuY2FsbCh0aGlzKTtcblx0XHRpZiAodHlwZW9mIGNhbGxiYWNrcyA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0Zm9yIChjb25zdCBbbmFtZSwgY2FsbGJhY2tdIG9mIE9iamVjdC5lbnRyaWVzKGNhbGxiYWNrcykpIHtcblx0XHRcdFx0aWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRcdFx0dXBkYXRlckNhbGxiYWNrcy5wdXNoKFtuYW1lLCBjYWxsYmFja10pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdFx0XHRcdFx0dGhpcyxcblx0XHRcdFx0XHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0XHRcdFx0XHRgb25VcGRhdGVyUGlwZUNhbGxiYWNrczogJHtuYW1lfSBpcyBub3QgYSBmdW5jdGlvbmAsXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRcdFx0dGhpcyxcblx0XHRcdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRcdFx0YG9uVXBkYXRlclBpcGVDYWxsYmFja3MgZG8gbm90IHJldHVybiBhbiBvYmplY3Qgd2l0aCBmdW5jdGlvbnNgLFxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHRlbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG5cdFx0aWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkgcmV0dXJuO1xuXHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTFRlbXBsYXRlRWxlbWVudCkgcmV0dXJuO1xuXG5cdFx0Y29uc3QgdSA9IG5ldyBVcGRhdGVyKGVsZW1lbnQsIG9iamVjdCk7XG5cdFx0dXBkYXRlcnMuYWRkKHUpO1xuXG5cdFx0aWYgKHVwZGF0ZXJDYWxsYmFja3MubGVuZ3RoID4gMCkge1xuXHRcdFx0Zm9yIChjb25zdCBbbmFtZSwgY2FsbGJhY2tdIG9mIHVwZGF0ZXJDYWxsYmFja3MpIHtcblx0XHRcdFx0dS5zZXRDYWxsYmFjayhuYW1lLCBjYWxsYmFjayk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmVzdWx0LnB1c2goXG5cdFx0XHR1LnJ1bigpLnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRpZiAoY29uZmlnLmV2ZW50UHJvY2Vzc2luZyA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdHUuZW5hYmxlRXZlbnRQcm9jZXNzaW5nKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdTtcblx0XHRcdH0pLFxuXHRcdCk7XG5cdH0pO1xuXG5cdGlmICh1cGRhdGVycy5zaXplID4gMCkge1xuXHRcdGFkZFRvT2JqZWN0TGluayh0aGlzLCBzeW1ib2wsIHVwZGF0ZXJzKTtcblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgZ2V0U2xvdHRlZEVsZW1lbnRzLCBnZXRTbG90dGVkTm9kZXMgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtTdHJpbmd8dW5kZWZpbmVkfSBxdWVyeVxuICogQHBhcmFtIHtTdHJpbmd8dW5kZWZpbmVkfG51bGx9IG5hbWUgbmFtZSBvZiB0aGUgc2xvdCAoaWYgdGhlIHBhcmFtZXRlciBpcyB1bmRlZmluZWQsIGFsbCBzbG90cyBhcmUgc2VhcmNoZWQsIGlmIHRoZSBwYXJhbWV0ZXIgaGFzIHRoZSB2YWx1ZSBudWxsLCBhbGwgc2xvdHMgd2l0aG91dCBhIG5hbWUgYXJlIHNlYXJjaGVkLiBpZiBhIHN0cmluZyBpcyBzcGVjaWZpZWQsIHRoZSBzbG90cyB3aXRoIHRoaXMgbmFtZSBhcmUgc2VhcmNoZWQuKVxuICogQHJldHVybiB7Kn1cbiAqIEB0aGlzIEN1c3RvbUVsZW1lbnRcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDMuMzMuMFxuICogQHRocm93cyB7RXJyb3J9IHF1ZXJ5IG11c3QgYmUgYSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZ2V0U2xvdHRlZE5vZGVzKHF1ZXJ5LCBuYW1lKSB7XG5cdGNvbnN0IHJlc3VsdCA9IG5ldyBTZXQoKTtcblxuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRsZXQgc2VsZWN0b3IgPSBcInNsb3RcIjtcblx0aWYgKG5hbWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdGlmIChuYW1lID09PSBudWxsKSB7XG5cdFx0XHRzZWxlY3RvciArPSBcIjpub3QoW25hbWVdKVwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzZWxlY3RvciArPSBgW25hbWU9JHt2YWxpZGF0ZVN0cmluZyhuYW1lKX1dYDtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBzbG90cyA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcblxuXHRmb3IgKGNvbnN0IFssIHNsb3RdIG9mIE9iamVjdC5lbnRyaWVzKHNsb3RzKSkge1xuXHRcdHNsb3QuYXNzaWduZWROb2RlcygpLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHtcblx0XHRcdGlmIChub2RlID09PSBudWxsIHx8IG5vZGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc1N0cmluZyhxdWVyeSkpIHtcblx0XHRcdFx0bm9kZS5xdWVyeVNlbGVjdG9yQWxsKHF1ZXJ5KS5mb3JFYWNoKGZ1bmN0aW9uIChuKSB7XG5cdFx0XHRcdFx0cmVzdWx0LmFkZChuKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0aWYgKG5vZGUubWF0Y2hlcyhxdWVyeSkpIHtcblx0XHRcdFx0XHRyZXN1bHQuYWRkKG5vZGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKHF1ZXJ5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwicXVlcnkgbXVzdCBiZSBhIHN0cmluZ1wiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlc3VsdC5hZGQobm9kZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge1N0cmluZ3x1bmRlZmluZWR9IHF1ZXJ5XG4gKiBAcGFyYW0ge1N0cmluZ3x1bmRlZmluZWR8bnVsbH0gbmFtZSBuYW1lIG9mIHRoZSBzbG90IChpZiB0aGUgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZCwgYWxsIHNsb3RzIGFyZSBzZWFyY2hlZCwgaWYgdGhlIHBhcmFtZXRlciBoYXMgdGhlIHZhbHVlIG51bGwsIGFsbCBzbG90cyB3aXRob3V0IGEgbmFtZSBhcmUgc2VhcmNoZWQuIGlmIGEgc3RyaW5nIGlzIHNwZWNpZmllZCwgdGhlIHNsb3RzIHdpdGggdGhpcyBuYW1lIGFyZSBzZWFyY2hlZC4pXG4gKiBAcmV0dXJuIHsqfVxuICogQHRoaXMgQ3VzdG9tRWxlbWVudFxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yMy4wXG4gKiBAdGhyb3dzIHtFcnJvcn0gcXVlcnkgbXVzdCBiZSBhIHN0cmluZ1xuICovXG5mdW5jdGlvbiBnZXRTbG90dGVkRWxlbWVudHMocXVlcnksIG5hbWUpIHtcblx0Y29uc3QgcmVzdWx0ID0gbmV3IFNldCgpO1xuXG5cdGlmICghKHRoaXMuc2hhZG93Um9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpKSB7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGxldCBzZWxlY3RvciA9IFwic2xvdFwiO1xuXHRpZiAobmFtZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0aWYgKG5hbWUgPT09IG51bGwpIHtcblx0XHRcdHNlbGVjdG9yICs9IFwiOm5vdChbbmFtZV0pXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNlbGVjdG9yICs9IGBbbmFtZT0ke3ZhbGlkYXRlU3RyaW5nKG5hbWUpfV1gO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IHNsb3RzID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuXG5cdGZvciAoY29uc3QgWywgc2xvdF0gb2YgT2JqZWN0LmVudHJpZXMoc2xvdHMpKSB7XG5cdFx0c2xvdC5hc3NpZ25lZEVsZW1lbnRzKCkuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQhKG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgJiZcblx0XHRcdFx0IShub2RlIGluc3RhbmNlb2YgU1ZHRWxlbWVudCkgJiZcblx0XHRcdFx0IShub2RlIGluc3RhbmNlb2YgTWF0aE1MRWxlbWVudClcblx0XHRcdClcblx0XHRcdFx0cmV0dXJuO1xuXG5cdFx0XHRpZiAoaXNTdHJpbmcocXVlcnkpKSB7XG5cdFx0XHRcdGlmIChxdWVyeS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0bm9kZS5xdWVyeVNlbGVjdG9yQWxsKHF1ZXJ5KS5mb3JFYWNoKGZ1bmN0aW9uIChuKSB7XG5cdFx0XHRcdFx0XHRyZXN1bHQuYWRkKG4pO1xuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0aWYgKG5vZGUubWF0Y2hlcyhxdWVyeSkpIHtcblx0XHRcdFx0XHRcdHJlc3VsdC5hZGQobm9kZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJlc3VsdC5hZGQobm9kZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAocXVlcnkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJxdWVyeSBtdXN0IGJlIGEgc3RyaW5nIGFuZCBub3QgZW1wdHlcIik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXN1bHQuYWRkKG5vZGUpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5leHBvcnQgeyBleHRyYWN0S2V5cyB9O1xuXG4vKipcbiAqIEV4dHJhY3RzIHRoZSBrZXlzIGZyb20gdGhlIGdpdmVuIG9iamVjdCBhbmQgcmV0dXJucyBhIG1hcCB3aXRoIHRoZSBrZXlzIGFuZCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlQcmVmaXhcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlTZXBhcmF0b3JcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVNlcGFyYXRvclxuICogQHJldHVybiB7TWFwPGFueSwgYW55Pn1cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdEtleXMoXG5cdG9iaixcblx0a2V5UHJlZml4ID0gXCJcIixcblx0a2V5U2VwYXJhdG9yID0gXCItXCIsXG5cdHZhbHVlU2VwYXJhdG9yID0gXCIuXCIsXG4pIHtcblx0Y29uc3QgcmVzdWx0TWFwID0gbmV3IE1hcCgpO1xuXG5cdGZ1bmN0aW9uIGhlbHBlcihjdXJyZW50T2JqLCBjdXJyZW50S2V5UHJlZml4LCBjdXJyZW50VmFsdWVQcmVmaXgpIHtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBjdXJyZW50T2JqKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGN1cnJlbnRPYmpba2V5XSAhPT0gbnVsbCAmJlxuXHRcdFx0XHR0eXBlb2YgY3VycmVudE9ialtrZXldID09PSBcIm9iamVjdFwiICYmXG5cdFx0XHRcdCFBcnJheS5pc0FycmF5KGN1cnJlbnRPYmpba2V5XSlcblx0XHRcdCkge1xuXHRcdFx0XHRjb25zdCBuZXdLZXlQcmVmaXggPSBjdXJyZW50S2V5UHJlZml4XG5cdFx0XHRcdFx0PyBjdXJyZW50S2V5UHJlZml4ICsga2V5U2VwYXJhdG9yICsga2V5LnRvTG93ZXJDYXNlKClcblx0XHRcdFx0XHQ6IGtleS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRjb25zdCBuZXdWYWx1ZVByZWZpeCA9IGN1cnJlbnRWYWx1ZVByZWZpeFxuXHRcdFx0XHRcdD8gY3VycmVudFZhbHVlUHJlZml4ICsgdmFsdWVTZXBhcmF0b3IgKyBrZXlcblx0XHRcdFx0XHQ6IGtleTtcblx0XHRcdFx0aGVscGVyKGN1cnJlbnRPYmpba2V5XSwgbmV3S2V5UHJlZml4LCBuZXdWYWx1ZVByZWZpeCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBmaW5hbEtleSA9IGN1cnJlbnRLZXlQcmVmaXhcblx0XHRcdFx0XHQ/IGN1cnJlbnRLZXlQcmVmaXggKyBrZXlTZXBhcmF0b3IgKyBrZXkudG9Mb3dlckNhc2UoKVxuXHRcdFx0XHRcdDoga2V5LnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdGNvbnN0IGZpbmFsVmFsdWUgPSBjdXJyZW50VmFsdWVQcmVmaXhcblx0XHRcdFx0XHQ/IGN1cnJlbnRWYWx1ZVByZWZpeCArIHZhbHVlU2VwYXJhdG9yICsga2V5XG5cdFx0XHRcdFx0OiBrZXk7XG5cdFx0XHRcdHJlc3VsdE1hcC5zZXQoZmluYWxLZXksIGZpbmFsVmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGhlbHBlcihvYmosIGtleVByZWZpeCwga2V5UHJlZml4KTtcblx0cmV0dXJuIHJlc3VsdE1hcDtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBQYXRoZmluZGVyIH0gZnJvbSBcIi4uLy4uL2RhdGEvcGF0aGZpbmRlci5tanNcIjtcbmltcG9ydCB7XG5cdGlzQm9vbGVhbixcblx0aXNTdHJpbmcsXG5cdGlzT2JqZWN0LFxuXHRpc0FycmF5LFxuXHRpc0Z1bmN0aW9uLFxuXHRpc0ludGVnZXIsXG59IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IGV4dHJhY3RLZXlzIH0gZnJvbSBcIi4vZXh0cmFjdC1rZXlzLm1qc1wiO1xuXG5leHBvcnQgeyBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzIH07XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgdGhlIGdpdmVuIG9wdGlvbnMgb2JqZWN0IGJhc2VkIG9uIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBjdXJyZW50IERPTSBlbGVtZW50LlxuICogVGhlIGZ1bmN0aW9uIGxvb2tzIGZvciBhdHRyaWJ1dGVzIHdpdGggdGhlIHByZWZpeCAnZGF0YS1tb25zdGVyLW9wdGlvbi0nLCBhbmQgbWFwcyB0aGVtIHRvXG4gKiBwcm9wZXJ0aWVzIGluIHRoZSBvcHRpb25zIG9iamVjdC4gSXQgcmVwbGFjZXMgdGhlIGRhc2hlcyB3aXRoIGRvdHMgdG8gZm9ybSB0aGUgcHJvcGVydHkgcGF0aC5cbiAqIEZvciBleGFtcGxlLCB0aGUgYXR0cmlidXRlICdkYXRhLW1vbnN0ZXItb3B0aW9uLXVybCcgbWFwcyB0byB0aGUgJ3VybCcgcHJvcGVydHkgaW4gdGhlIG9wdGlvbnMgb2JqZWN0LlxuICpcbiAqIFdpdGggdGhlIG1hcHBpbmcgcGFyYW1ldGVyLCB0aGUgYXR0cmlidXRlIHZhbHVlIGNhbiBiZSBtYXBwZWQgdG8gYSBkaWZmZXJlbnQgdmFsdWUuXG4gKiBGb3IgZXhhbXBsZSwgdGhlIGF0dHJpYnV0ZSAnZGF0YS1tb25zdGVyLW9wdGlvbi1mb28nIG1hcHMgdG8gdGhlICdiYXInIHByb3BlcnR5IGluIHRoZSBvcHRpb25zIG9iamVjdC5cbiAqXG4gKiBUaGUgbWFwcGluZyBvYmplY3Qgd291bGQgbG9vayBsaWtlIHRoaXM6XG4gKlxuICoge1xuICogICAgJ2Zvbyc6ICh2YWx1ZSkgPT4gdmFsdWUgKyAnYmFyJ1xuICogICAgLy8gdGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgJ2RhdGEtbW9uc3Rlci1vcHRpb24tZm9vJyBpcyBhcHBlbmRlZCB3aXRoICdiYXInXG4gKiAgICAvLyBhbmQgYXNzaWduZWQgdG8gdGhlICdiYXInIHByb3BlcnR5IGluIHRoZSBvcHRpb25zIG9iamVjdC5cbiAqICAgIC8vIGUuZy4gPGRpdiBkYXRhLW1vbnN0ZXItb3B0aW9uLWZvbz1cImZvb1wiPjwvZGl2PlxuICogICAgJ2Jhci5iYXonOiAodmFsdWUpID0+IHZhbHVlICsgJ2JhcidcbiAqICAgIC8vIHRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlICdkYXRhLW1vbnN0ZXItb3B0aW9uLWJhci1iYXonIGlzIGFwcGVuZGVkIHdpdGggJ2JhcidcbiAqICAgIC8vIGFuZCBhc3NpZ25lZCB0byB0aGUgJ2Jhci5iYXonIHByb3BlcnR5IGluIHRoZSBvcHRpb25zIG9iamVjdC5cbiAqICAgIC8vIGUuZy4gPGRpdiBkYXRhLW1vbnN0ZXItb3B0aW9uLWJhci1iYXo9XCJmb29cIj48L2Rpdj5cbiAqIH1cbiAqXG4gKiBBcnJheSB2YWx1ZXMgaGF2ZSB0byBiZSBzZXBhcmF0ZWQgYnkgJzo6Jy5cbiAqXG4gKiBAc2luY2UgMy4zOC4wXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50IC0gVGhlIERPTSBlbGVtZW50IHRvIGJlIHVzZWQgYXMgdGhlIHNvdXJjZSBvZiB0aGUgYXR0cmlidXRlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgb2JqZWN0IHRvIGJlIGluaXRpYWxpemVkLlxuICogQHBhcmFtIHtPYmplY3R9IG1hcHBpbmcgLSBBIG1hcHBpbmcgYmV0d2VlbiB0aGUgYXR0cmlidXRlIHZhbHVlIGFuZCB0aGUgcHJvcGVydHkgdmFsdWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4IC0gVGhlIHByZWZpeCBvZiB0aGUgYXR0cmlidXRlcyB0byBiZSBjb25zaWRlcmVkLlxuICogQHJldHVybiB7T2JqZWN0fSAtIFRoZSBpbml0aWFsaXplZCBvcHRpb25zIG9iamVjdC5cbiAqIEB0aGlzIEhUTUxFbGVtZW50IC0gVGhlIGNvbnRleHQgb2YgdGhlIERPTSBlbGVtZW50LlxuICovXG5mdW5jdGlvbiBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzKFxuXHRlbGVtZW50LFxuXHRvcHRpb25zLFxuXHRtYXBwaW5nID0ge30sXG5cdHByZWZpeCA9IFwiZGF0YS1tb25zdGVyLW9wdGlvbi1cIixcbikge1xuXHRpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSByZXR1cm4gb3B0aW9ucztcblx0aWYgKCFlbGVtZW50Lmhhc0F0dHJpYnV0ZXMoKSkgcmV0dXJuIG9wdGlvbnM7XG5cblx0Y29uc3Qga2V5TWFwID0gZXh0cmFjdEtleXMob3B0aW9ucyk7XG5cdGNvbnN0IGZpbmRlciA9IG5ldyBQYXRoZmluZGVyKG9wdGlvbnMpO1xuXG5cdGVsZW1lbnQuZ2V0QXR0cmlidXRlTmFtZXMoKS5mb3JFYWNoKChuYW1lKSA9PiB7XG5cdFx0aWYgKCFuYW1lLnN0YXJ0c1dpdGgocHJlZml4KSkgcmV0dXJuO1xuXG5cdFx0Ly8gY2hlY2sgaWYgdGhlIGF0dHJpYnV0ZSBuYW1lIGlzIGEgdmFsaWQgb3B0aW9uLlxuXHRcdC8vIHRoZSBtYXBwaW5nIGJldHdlZW4gdGhlIGF0dHJpYnV0ZSBpcyBzaW1wbGUuIFRoZSBkYXNoIGlzIHJlcGxhY2VkIGJ5IGEgZG90LlxuXHRcdC8vIGUuZy4gZGF0YS1tb25zdGVyLXVybCA9PiB1cmxcblx0XHRjb25zdCBvcHRpb25OYW1lID0ga2V5TWFwLmdldChuYW1lLnN1YnN0cmluZyhwcmVmaXgubGVuZ3RoKS50b0xvd2VyQ2FzZSgpKTtcblx0XHRpZiAoIWZpbmRlci5leGlzdHMob3B0aW9uTmFtZSkpIHJldHVybjtcblxuXHRcdGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZShuYW1lKSkge1xuXHRcdFx0bGV0IHZhbHVlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUobmFtZSk7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdG1hcHBpbmcuaGFzT3duUHJvcGVydHkob3B0aW9uTmFtZSkgJiZcblx0XHRcdFx0aXNGdW5jdGlvbihtYXBwaW5nW29wdGlvbk5hbWVdKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHZhbHVlID0gbWFwcGluZ1tvcHRpb25OYW1lXSh2YWx1ZSk7XG5cdFx0XHR9XG5cblx0XHRcdGxldCBvcHRpb25WYWx1ZSA9IGZpbmRlci5nZXRWaWEob3B0aW9uTmFtZSk7XG5cdFx0XHRpZiAob3B0aW9uVmFsdWUgPT09IG51bGwgfHwgb3B0aW9uVmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRvcHRpb25WYWx1ZSA9IHZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvL2NvbnN0IHR5cGVPZk9wdGlvblZhbHVlID0gdHlwZW9mIG9wdGlvblZhbHVlO1xuXHRcdFx0aWYgKG9wdGlvblZhbHVlID09PSBudWxsIHx8IG9wdGlvblZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dmFsdWUgPSBudWxsO1xuXHRcdFx0fSBlbHNlIGlmIChpc0Jvb2xlYW4ob3B0aW9uVmFsdWUpKSB7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWUgPT09IFwidHJ1ZVwiO1xuXHRcdFx0fSBlbHNlIGlmIChpc0ludGVnZXIob3B0aW9uVmFsdWUpKSB7XG5cdFx0XHRcdHZhbHVlID0gTnVtYmVyKHZhbHVlKTtcblx0XHRcdH0gZWxzZSBpZiAoaXNTdHJpbmcob3B0aW9uVmFsdWUpKSB7XG5cdFx0XHRcdHZhbHVlID0gU3RyaW5nKHZhbHVlKTtcblx0XHRcdH0gZWxzZSBpZiAoaXNPYmplY3Qob3B0aW9uVmFsdWUpKSB7XG5cdFx0XHRcdHZhbHVlID0gSlNPTi5wYXJzZSh2YWx1ZSk7XG5cdFx0XHR9IGVsc2UgaWYgKGlzQXJyYXkob3B0aW9uVmFsdWUpKSB7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWUuc3BsaXQoXCI6OlwiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHZhbHVlID0gb3B0aW9uVmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdGZpbmRlci5zZXRWaWEob3B0aW9uTmFtZSwgdmFsdWUpO1xuXHRcdH1cblx0fSk7XG5cblx0cmV0dXJuIG9wdGlvbnM7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgUGF0aGZpbmRlciB9IGZyb20gXCIuLi8uLi9kYXRhL3BhdGhmaW5kZXIubWpzXCI7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgYXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2wgfSBmcm9tIFwiLi4vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IGV4dHJhY3RLZXlzIH0gZnJvbSBcIi4vZXh0cmFjdC1rZXlzLm1qc1wiO1xuXG5leHBvcnQgeyBzZXRPcHRpb25Gcm9tQXR0cmlidXRlIH07XG5cbi8qKlxuICogU2V0IHRoZSBnaXZlbiBvcHRpb25zIG9iamVjdCBiYXNlZCBvbiB0aGUgYXR0cmlidXRlcyBvZiB0aGUgY3VycmVudCBET00gZWxlbWVudC5cbiAqIFRoZSBmdW5jdGlvbiBsb29rcyBmb3IgYXR0cmlidXRlcyB3aXRoIHRoZSBwcmVmaXggJ2RhdGEtbW9uc3Rlci1vcHRpb24tJywgYW5kIG1hcHMgdGhlbSB0b1xuICogcHJvcGVydGllcyBpbiB0aGUgb3B0aW9ucyBvYmplY3QuIEl0IHJlcGxhY2VzIHRoZSBkYXNoZXMgd2l0aCBkb3RzIHRvIGZvcm0gdGhlIHByb3BlcnR5IHBhdGguXG4gKiBGb3IgZXhhbXBsZSwgdGhlIGF0dHJpYnV0ZSAnZGF0YS1tb25zdGVyLW9wdGlvbi11cmwnIG1hcHMgdG8gdGhlICd1cmwnIHByb3BlcnR5IGluIHRoZSBvcHRpb25zIG9iamVjdC5cbiAqXG4gKiBXaXRoIHRoZSBtYXBwaW5nIHBhcmFtZXRlciwgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBjYW4gYmUgbWFwcGVkIHRvIGEgZGlmZmVyZW50IHZhbHVlLlxuICogRm9yIGV4YW1wbGUsIHRoZSBhdHRyaWJ1dGUgJ2RhdGEtbW9uc3Rlci1vcHRpb24tZm9vJyBtYXBzIHRvIHRoZSAnYmFyJyBwcm9wZXJ0eSBpbiB0aGUgb3B0aW9ucyBvYmplY3QuXG4gKlxuICogVGhlIG1hcHBpbmcgb2JqZWN0IHdvdWxkIGxvb2sgbGlrZSB0aGlzOlxuICoge1xuICogICAgJ2Zvbyc6ICh2YWx1ZSkgPT4gdmFsdWUgKyAnYmFyJ1xuICogICAgLy8gdGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgJ2RhdGEtbW9uc3Rlci1vcHRpb24tZm9vJyBpcyBhcHBlbmRlZCB3aXRoICdiYXInXG4gKiAgICAvLyBhbmQgYXNzaWduZWQgdG8gdGhlICdiYXInIHByb3BlcnR5IGluIHRoZSBvcHRpb25zIG9iamVjdC5cbiAqICAgIC8vIGUuZy4gPGRpdiBkYXRhLW1vbnN0ZXItb3B0aW9uLWZvbz1cImZvb1wiPjwvZGl2PlxuICogICAgJ2Jhci5iYXonOiAodmFsdWUpID0+IHZhbHVlICsgJ2JhcidcbiAqICAgIC8vIHRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlICdkYXRhLW1vbnN0ZXItb3B0aW9uLWJhci1iYXonIGlzIGFwcGVuZGVkIHdpdGggJ2JhcidcbiAqICAgIC8vIGFuZCBhc3NpZ25lZCB0byB0aGUgJ2Jhci5iYXonIHByb3BlcnR5IGluIHRoZSBvcHRpb25zIG9iamVjdC5cbiAqICAgIC8vIGUuZy4gPGRpdiBkYXRhLW1vbnN0ZXItb3B0aW9uLWJhci1iYXo9XCJmb29cIj48L2Rpdj5cbiAqIH1cbiAqXG4gKiBAc2luY2UgMy40NS4wXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50IC0gVGhlIERPTSBlbGVtZW50IHRvIGJlIHVzZWQgYXMgdGhlIHNvdXJjZSBvZiB0aGUgYXR0cmlidXRlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBuYW1lIC0gVGhlIGF0dHJpYnV0ZSBvYmplY3QgdG8gYmUgdXNlZCBhcyB0aGUgc291cmNlIG9mIHRoZSBhdHRyaWJ1dGVzLlxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3QgdG8gYmUgaW5pdGlhbGl6ZWQuXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwcGluZyAtIEEgbWFwcGluZyBiZXR3ZWVuIHRoZSBhdHRyaWJ1dGUgdmFsdWUgYW5kIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwcmVmaXggLSBUaGUgcHJlZml4IG9mIHRoZSBhdHRyaWJ1dGVzIHRvIGJlIGNvbnNpZGVyZWQuXG4gKiBAcmV0dXJuIHtPYmplY3R9IC0gVGhlIGluaXRpYWxpemVkIG9wdGlvbnMgb2JqZWN0LlxuICogQHRoaXMgSFRNTEVsZW1lbnQgLSBUaGUgY29udGV4dCBvZiB0aGUgRE9NIGVsZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIHNldE9wdGlvbkZyb21BdHRyaWJ1dGUoXG5cdGVsZW1lbnQsXG5cdG5hbWUsXG5cdG9wdGlvbnMsXG5cdG1hcHBpbmcgPSB7fSxcblx0cHJlZml4ID0gXCJkYXRhLW1vbnN0ZXItb3B0aW9uLVwiLFxuKSB7XG5cdGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHJldHVybiBvcHRpb25zO1xuXHRpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlcygpKSByZXR1cm4gb3B0aW9ucztcblxuXHRjb25zdCBrZXlNYXAgPSBleHRyYWN0S2V5cyhvcHRpb25zKTtcblx0Y29uc3QgZmluZGVyID0gbmV3IFBhdGhmaW5kZXIob3B0aW9ucyk7XG5cblx0Ly8gY2hlY2sgaWYgdGhlIGF0dHJpYnV0ZSBuYW1lIGlzIGEgdmFsaWQgb3B0aW9uLlxuXHQvLyB0aGUgbWFwcGluZyBiZXR3ZWVuIHRoZSBhdHRyaWJ1dGUgaXMgc2ltcGxlLiBUaGUgZGFzaCBpcyByZXBsYWNlZCBieSBhIGRvdC5cblx0Ly8gZS5nLiBkYXRhLW1vbnN0ZXItdXJsID0+IHVybFxuXHRjb25zdCBvcHRpb25OYW1lID0ga2V5TWFwLmdldChuYW1lLnN1YnN0cmluZyhwcmVmaXgubGVuZ3RoKS50b0xvd2VyQ2FzZSgpKTtcblx0aWYgKCFmaW5kZXIuZXhpc3RzKG9wdGlvbk5hbWUpKSByZXR1cm47XG5cblx0aWYgKCFlbGVtZW50Lmhhc0F0dHJpYnV0ZShuYW1lKSkge1xuXHRcdHJldHVybiBvcHRpb25zO1xuXHR9XG5cblx0bGV0IHZhbHVlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUobmFtZSk7XG5cdGlmIChtYXBwaW5nLmhhc093blByb3BlcnR5KG9wdGlvbk5hbWUpICYmIGlzRnVuY3Rpb24obWFwcGluZ1tvcHRpb25OYW1lXSkpIHtcblx0XHR2YWx1ZSA9IG1hcHBpbmdbb3B0aW9uTmFtZV0odmFsdWUpO1xuXHR9XG5cblx0Y29uc3QgdHlwZU9mT3B0aW9uVmFsdWUgPSB0eXBlb2YgZmluZGVyLmdldFZpYShvcHRpb25OYW1lKTtcblx0aWYgKHR5cGVPZk9wdGlvblZhbHVlID09PSBcImJvb2xlYW5cIikge1xuXHRcdHZhbHVlID0gdmFsdWUgPT09IFwidHJ1ZVwiO1xuXHR9IGVsc2UgaWYgKHR5cGVPZk9wdGlvblZhbHVlID09PSBcIm51bWJlclwiKSB7XG5cdFx0dmFsdWUgPSBOdW1iZXIodmFsdWUpO1xuXHR9IGVsc2UgaWYgKHR5cGVPZk9wdGlvblZhbHVlID09PSBcInN0cmluZ1wiKSB7XG5cdFx0dmFsdWUgPSBTdHJpbmcodmFsdWUpO1xuXHR9IGVsc2UgaWYgKHR5cGVPZk9wdGlvblZhbHVlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0dmFsdWUgPSBKU09OLnBhcnNlKHZhbHVlKTtcblx0fVxuXG5cdGZpbmRlci5zZXRWaWEob3B0aW9uTmFtZSwgdmFsdWUpO1xuXG5cdHJldHVybiBvcHRpb25zO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGZpbmRFbGVtZW50V2l0aElkVXB3YXJkcyB9IGZyb20gXCIuL3V0aWwubWpzXCI7XG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQgeyBQYXRoZmluZGVyIH0gZnJvbSBcIi4uL2RhdGEvcGF0aGZpbmRlci5tanNcIjtcbmltcG9ydCB7IEZvcm1hdHRlciB9IGZyb20gXCIuLi90ZXh0L2Zvcm1hdHRlci5tanNcIjtcblxuaW1wb3J0IHsgcGFyc2VEYXRhVVJMIH0gZnJvbSBcIi4uL3R5cGVzL2RhdGF1cmwubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWxPYmplY3QgfSBmcm9tIFwiLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHtcblx0aXNBcnJheSxcblx0aXNGdW5jdGlvbixcblx0aXNJdGVyYWJsZSxcblx0aXNPYmplY3QsXG5cdGlzU3RyaW5nLFxufSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBPYnNlcnZlciB9IGZyb20gXCIuLi90eXBlcy9vYnNlcnZlci5tanNcIjtcbmltcG9ydCB7IFByb3h5T2JzZXJ2ZXIgfSBmcm9tIFwiLi4vdHlwZXMvcHJveHlvYnNlcnZlci5tanNcIjtcbmltcG9ydCB7XG5cdHZhbGlkYXRlRnVuY3Rpb24sXG5cdHZhbGlkYXRlSW5zdGFuY2UsXG5cdHZhbGlkYXRlT2JqZWN0LFxufSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBjbG9uZSB9IGZyb20gXCIuLi91dGlsL2Nsb25lLm1qc1wiO1xuaW1wb3J0IHtcblx0YWRkQXR0cmlidXRlVG9rZW4sXG5cdGdldExpbmtlZE9iamVjdHMsXG5cdGhhc09iamVjdExpbmssXG59IGZyb20gXCIuL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge1xuXHRBVFRSSUJVVEVfRElTQUJMRUQsXG5cdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdEFUVFJJQlVURV9PUFRJT05TLFxuXHRBVFRSSUJVVEVfSU5JVF9DQUxMQkFDSyxcblx0QVRUUklCVVRFX09QVElPTlNfU0VMRUNUT1IsXG5cdEFUVFJJQlVURV9TQ1JJUFRfSE9TVCxcblx0Y3VzdG9tRWxlbWVudFVwZGF0ZXJMaW5rU3ltYm9sLFxuXHRpbml0Q29udHJvbENhbGxiYWNrTmFtZSxcbn0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZmluZERvY3VtZW50VGVtcGxhdGUsIFRlbXBsYXRlIH0gZnJvbSBcIi4vdGVtcGxhdGUubWpzXCI7XG5pbXBvcnQgeyBhZGRPYmplY3RXaXRoVXBkYXRlclRvRWxlbWVudCB9IGZyb20gXCIuL3VwZGF0ZXIubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBnZXREb2N1bWVudFRyYW5zbGF0aW9ucyB9IGZyb20gXCIuLi9pMThuL3RyYW5zbGF0aW9ucy5tanNcIjtcbmltcG9ydCB7IGdldFNsb3R0ZWRFbGVtZW50cyB9IGZyb20gXCIuL3Nsb3R0ZWQubWpzXCI7XG5pbXBvcnQgeyBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzIH0gZnJvbSBcIi4vdXRpbC9pbml0LW9wdGlvbnMtZnJvbS1hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgc2V0T3B0aW9uRnJvbUF0dHJpYnV0ZSB9IGZyb20gXCIuL3V0aWwvc2V0LW9wdGlvbi1mcm9tLWF0dHJpYnV0ZS5tanNcIjtcblxuZXhwb3J0IHtcblx0Q3VzdG9tRWxlbWVudCxcblx0aW5pdE1ldGhvZFN5bWJvbCxcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdGF0dHJpYnV0ZU9ic2VydmVyU3ltYm9sLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG5cdGdldFNsb3R0ZWRFbGVtZW50cyxcblx0dXBkYXRlclRyYW5zZm9ybWVyTWV0aG9kc1N5bWJvbCxcbn07XG5cbi8qKlxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgaW5pdE1ldGhvZFN5bWJvbCA9IFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RvbS9AQGluaXRNZXRob2RTeW1ib2xcIik7XG5cbi8qKlxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgYXNzZW1ibGVNZXRob2RTeW1ib2wgPSBTeW1ib2wuZm9yKFxuXHRcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL0BAYXNzZW1ibGVNZXRob2RTeW1ib2xcIixcbik7XG5cbi8qKlxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgdXBkYXRlclRyYW5zZm9ybWVyTWV0aG9kc1N5bWJvbCA9IFN5bWJvbC5mb3IoXG5cdFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vQEB1cGRhdGVyVHJhbnNmb3JtZXJNZXRob2RzU3ltYm9sXCIsXG4pO1xuXG4vKipcbiAqIHRoaXMgc3ltYm9sIGhvbGRzIHRoZSBhdHRyaWJ1dGUgb2JzZXJ2ZXIgY2FsbGJhY2tzLiBUaGUga2V5IGlzIHRoZSBhdHRyaWJ1dGUgbmFtZS5cbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGF0dHJpYnV0ZU9ic2VydmVyU3ltYm9sID0gU3ltYm9sLmZvcihcblx0XCJAc2NodWthaS9tb25zdGVyL2RvbS9AQGF0dHJpYnV0ZU9ic2VydmVyXCIsXG4pO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBhdHRyaWJ1dGVNdXRhdGlvbk9ic2VydmVyU3ltYm9sID0gU3ltYm9sKFxuXHRcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL0BAbXV0YXRpb25PYnNlcnZlclwiLFxuKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgdXBkYXRlQ2xvbmVEYXRhU3ltYm9sID0gU3ltYm9sKFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vQEB1cGRhdGVDbG9uZURhdGFcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHNjcmlwdEhvc3RFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwic2NyaXB0SG9zdEVsZW1lbnRcIik7XG5cbi8qKlxuICogVGhlIGBDdXN0b21FbGVtZW50YCBjbGFzcyBwcm92aWRlcyBhIHdheSB0byBkZWZpbmUgYSBuZXcgSFRNTCBlbGVtZW50IHVzaW5nIHRoZSBwb3dlciBvZiBDdXN0b20gRWxlbWVudHMuXG4gKlxuICogKipJTVBPUlRBTlQ6KiogQWZ0ZXIgZGVmaW5pbmcgYSBgQ3VzdG9tRWxlbWVudGAsIHRoZSBgcmVnaXN0ZXJDdXN0b21FbGVtZW50YCBtZXRob2QgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IGNsYXNzIG5hbWVcbiAqIHRvIG1ha2UgdGhlIHRhZyBkZWZpbmVkIHZpYSB0aGUgYGdldFRhZ2AgbWV0aG9kIGtub3duIHRvIHRoZSBET00uXG4gKlxuICogWW91IGNhbiBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhlIG9iamVjdCB2aWEgdGhlIGBkb2N1bWVudC5jcmVhdGVFbGVtZW50KClgIGZ1bmN0aW9uLlxuICpcbiAqICMjIFN0eWxpbmdcbiAqXG4gKiBUbyBkaXNwbGF5IGN1c3RvbSBlbGVtZW50cyBvcHRpbWFsbHksIHRoZSBgOmRlZmluZWRgIHBzZXVkby1jbGFzcyBjYW4gYmUgdXNlZC4gVG8gcHJldmVudCBjdXN0b20gZWxlbWVudHMgZnJvbSBiZWluZyBkaXNwbGF5ZWQgYW5kIGZsaWNrZXJpbmcgdW50aWwgdGhlIGNvbnRyb2wgaXMgcmVnaXN0ZXJlZCxcbiAqIGl0IGlzIHJlY29tbWVuZGVkIHRvIGNyZWF0ZSBhIENTUyBkaXJlY3RpdmUuXG4gKlxuICogSW4gdGhlIHNpbXBsZXN0IGNhc2UsIHlvdSBjYW4gc2ltcGx5IGhpZGUgdGhlIGNvbnRyb2w6XG4gKlxuICogYGBgaHRtbFxuICogPHN0eWxlPlxuICogbXktY3VzdG9tLWVsZW1lbnQ6bm90KDpkZWZpbmVkKSB7XG4gKiAgICAgZGlzcGxheTogbm9uZTtcbiAqIH1cbiAqXG4gKiBteS1jdXN0b20tZWxlbWVudDpkZWZpbmVkIHtcbiAqICAgICBkaXNwbGF5OiBmbGV4O1xuICogfVxuICogPC9zdHlsZT5cbiAqIGBgYFxuICpcbiAqIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gZGlzcGxheSBhIGxvYWRlcjpcbiAqXG4gKiBgYGBjc3NcbiAqIG15LWN1c3RvbS1lbGVtZW50Om5vdCg6ZGVmaW5lZCkge1xuICogICAgIGRpc3BsYXk6IGZsZXg7XG4gKiAgICAgYm94LXNoYWRvdzogMCA0cHggMTBweCAwIHJnYmEoMzMsIDMzLCAzMywgMC4xNSk7XG4gKiAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICogICAgIGhlaWdodDogMjAwcHg7XG4gKiAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICogICAgIG92ZXJmbG93OiBoaWRkZW47XG4gKiB9XG4gKlxuICogbXktY3VzdG9tLWVsZW1lbnQ6bm90KDpkZWZpbmVkKTo6YmVmb3JlIHtcbiAqICAgICBjb250ZW50OiAnJztcbiAqICAgICBkaXNwbGF5OiBibG9jaztcbiAqICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gKiAgICAgbGVmdDogLTE1MHB4O1xuICogICAgIHRvcDogMDtcbiAqICAgICBoZWlnaHQ6IDEwMCU7XG4gKiAgICAgd2lkdGg6IDE1MHB4O1xuICogICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgdHJhbnNwYXJlbnQgMCUsICNFOEU4RTggNTAlLCB0cmFuc3BhcmVudCAxMDAlKTtcbiAqICAgICBhbmltYXRpb246IGxvYWQgMXMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpIGluZmluaXRlO1xuICogfVxuICpcbiAqIEBrZXlmcmFtZXMgbG9hZCB7XG4gKiAgICAgZnJvbSB7XG4gKiAgICAgICAgIGxlZnQ6IC0xNTBweDtcbiAqICAgICB9XG4gKiAgICAgdG8ge1xuICogICAgICAgICBsZWZ0OiAxMDAlO1xuICogICAgIH1cbiAqIH1cbiAqXG4gKiBteS1jdXN0b20tZWxlbWVudDpkZWZpbmVkIHtcbiAqICAgICBkaXNwbGF5OiBmbGV4O1xuICogfVxuICogYGBgXG4gKlxuICogTW9yZSBpbmZvcm1hdGlvbiBhYm91dCBDdXN0b20gRWxlbWVudHMgY2FuIGJlIGZvdW5kIGluIHRoZSBbTUROIFdlYiBEb2NzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9XZWJfQ29tcG9uZW50cy9Vc2luZ19jdXN0b21fZWxlbWVudHMpLlxuICogQW5kIGluIHRoZSBbSFRNTCBTdGFuZGFyZF0oaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvY3VzdG9tLWVsZW1lbnRzLmh0bWwjY3VzdG9tLWVsZW1lbnRzKSBvciBpbiB0aGUgW1dIQVRXRyBXaWtpXShodHRwczovL3dpa2kud2hhdHdnLm9yZy93aWtpL0N1c3RvbV9FbGVtZW50cykuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS43LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIGJhc2UgY2xhc3MgZm9yIEhUTUw1IGN1c3RvbSBjb250cm9scy5cbiAqL1xuY2xhc3MgQ3VzdG9tRWxlbWVudCBleHRlbmRzIEhUTUxFbGVtZW50IHtcblx0LyoqXG5cdCAqIEEgbmV3IG9iamVjdCBpcyBjcmVhdGVkLiBGaXJzdCwgdGhlIGBpbml0T3B0aW9uc2AgbWV0aG9kIGlzIGNhbGxlZC4gSGVyZSB0aGVcblx0ICogb3B0aW9ucyBjYW4gYmUgZGVmaW5lZCBpbiBkZXJpdmVkIGNsYXNzZXMuIFN1YnNlcXVlbnRseSwgdGhlIHNoYWRvd1Jvb3QgaXMgaW5pdGlhbGl6ZWQuXG5cdCAqXG5cdCAqIElNUE9SVEFOVDogQ3VzdG9tQ29udHJvbHMgaW5zdGFuY2VzIGFyZSBub3QgY3JlYXRlZCB2aWEgdGhlIGNvbnN0cnVjdG9yLCBidXQgZWl0aGVyIHZpYSBhIHRhZyBpbiB0aGUgSFRNTCBvciB2aWEgPGNvZGU+ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgpPC9jb2RlPi5cblx0ICpcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBvcHRpb24gYXR0cmlidXRlIGRvZXMgbm90IGNvbnRhaW4gYSB2YWxpZCBKU09OIGRlZmluaXRpb24uXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpc1thdHRyaWJ1dGVPYnNlcnZlclN5bWJvbF0gPSB7fTtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IG5ldyBQcm94eU9ic2VydmVyKHtcblx0XHRcdG9wdGlvbnM6IGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXModGhpcywgZXh0ZW5kKHt9LCB0aGlzLmRlZmF1bHRzKSksXG5cdFx0fSk7XG5cdFx0dGhpc1tpbml0TWV0aG9kU3ltYm9sXSgpO1xuXHRcdGluaXRPcHRpb25PYnNlcnZlci5jYWxsKHRoaXMpO1xuXHRcdHRoaXNbc2NyaXB0SG9zdEVsZW1lbnRTeW1ib2xdID0gW107XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RvbS9jdXN0b20tZWxlbWVudEBAaW5zdGFuY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgZGV0ZXJtaW5lcyB3aGljaCBhdHRyaWJ1dGVzIGFyZSB0byBiZVxuXHQgKiBtb25pdG9yZWQgYnkgYGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpYC4gVW5mb3J0dW5hdGVseSwgdGhpcyBtZXRob2QgaXMgc3RhdGljLlxuXHQgKiBUaGVyZWZvcmUsIHRoZSBgb2JzZXJ2ZWRBdHRyaWJ1dGVzYCBwcm9wZXJ0eSBjYW5ub3QgYmUgY2hhbmdlZCBkdXJpbmcgcnVudGltZS5cblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nW119XG5cdCAqIEBzaW5jZSAxLjE1LjBcblx0ICovXG5cdHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuXHRcdHJldHVybiBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0gYXR0cmlidXRlXG5cdCAqIEBwYXJhbSBjYWxsYmFja1xuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5DdXN0b21FbGVtZW50fVxuXHQgKi9cblx0YWRkQXR0cmlidXRlT2JzZXJ2ZXIoYXR0cmlidXRlLCBjYWxsYmFjaykge1xuXHRcdHZhbGlkYXRlRnVuY3Rpb24oY2FsbGJhY2spO1xuXHRcdHRoaXNbYXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2xdW2F0dHJpYnV0ZV0gPSBjYWxsYmFjaztcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0gYXR0cmlidXRlXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLkN1c3RvbUVsZW1lbnR9XG5cdCAqL1xuXHRyZW1vdmVBdHRyaWJ1dGVPYnNlcnZlcihhdHRyaWJ1dGUpIHtcblx0XHRkZWxldGUgdGhpc1thdHRyaWJ1dGVPYnNlcnZlclN5bWJvbF1bYXR0cmlidXRlXTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYGRlZmF1bHRzYCBwcm9wZXJ0eSBkZWZpbmVzIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgYSBjb250cm9sLiBJZiB5b3Ugd2FudCB0byBvdmVycmlkZSB0aGVzZSxcblx0ICogeW91IGNhbiB1c2UgdmFyaW91cyBtZXRob2RzLCB3aGljaCBhcmUgZGVzY3JpYmVkIGluIHRoZSBkb2N1bWVudGF0aW9uIGF2YWlsYWJsZSBhdFxuXHQgKiB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnZW5kb2Njb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH0uXG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGFyZSBsaXN0ZWQgYmVsb3c6XG5cdCAqXG5cdCAqIE1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNoYWRvd1Jvb3QgY2FuIGJlIGZvdW5kIGluIHRoZSBbTUROIFdlYiBEb2NzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudC9hdHRhY2hTaGFkb3cpLFxuXHQgKiBpbiB0aGUgW0hUTUwgU3RhbmRhcmRdKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2N1c3RvbS1lbGVtZW50cy5odG1sI2N1c3RvbS1lbGVtZW50cykgb3IgaW4gdGhlIFtXSEFUV0cgV2lraV0oaHR0cHM6Ly93aWtpLndoYXR3Zy5vcmcvd2lraS9DdXN0b21fRWxlbWVudHMpLlxuXHQgKlxuXHQgKiBNb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0ZW1wbGF0ZSBlbGVtZW50IGNhbiBiZSBmb3VuZCBpbiB0aGUgW01ETiBXZWIgRG9jc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RlbXBsYXRlKS5cblx0ICpcblx0ICogTW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2xvdCBlbGVtZW50IGNhbiBiZSBmb3VuZCBpbiB0aGUgW01ETiBXZWIgRG9jc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3Nsb3QpLlxuXHQgKlxuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IGRpc2FibGVkPWZhbHNlIFNwZWNpZmllcyB3aGV0aGVyIHRoZSBjb250cm9sIGlzIGRpc2FibGVkLiBXaGVuIHByZXNlbnQsIGl0IG1ha2VzIHRoZSBlbGVtZW50IG5vbi1tdXRhYmxlLCBub24tZm9jdXNhYmxlLCBhbmQgbm9uLXN1Ym1pdHRhYmxlIHdpdGggdGhlIGZvcm0uXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzaGFkb3dNb2RlPW9wZW4gU3BlY2lmaWVzIHRoZSBtb2RlIG9mIHRoZSBzaGFkb3cgcm9vdC4gV2hlbiBzZXQgdG8gYG9wZW5gLCBlbGVtZW50cyBpbiB0aGUgc2hhZG93IHJvb3QgYXJlIGFjY2Vzc2libGUgZnJvbSBKYXZhU2NyaXB0IG91dHNpZGUgdGhlIHJvb3QsIHdoaWxlIHNldHRpbmcgaXQgdG8gYGNsb3NlZGAgZGVuaWVzIGFjY2VzcyB0byB0aGUgcm9vdCdzIG5vZGVzIGZyb20gSmF2YVNjcmlwdCBvdXRzaWRlIGl0LlxuXHQgKiBAcHJvcGVydHkge0Jvb2xlYW59IGRlbGVnYXRlc0ZvY3VzPXRydWUgU3BlY2lmaWVzIHRoZSBiZWhhdmlvciBvZiB0aGUgY29udHJvbCB3aXRoIHJlc3BlY3QgdG8gZm9jdXNhYmlsaXR5LiBXaGVuIHNldCB0byBgdHJ1ZWAsIGl0IG1pdGlnYXRlcyBjdXN0b20gZWxlbWVudCBpc3N1ZXMgYXJvdW5kIGZvY3VzYWJpbGl0eS4gV2hlbiBhIG5vbi1mb2N1c2FibGUgcGFydCBvZiB0aGUgc2hhZG93IERPTSBpcyBjbGlja2VkLCB0aGUgZmlyc3QgZm9jdXNhYmxlIHBhcnQgaXMgZ2l2ZW4gZm9jdXMsIGFuZCB0aGUgc2hhZG93IGhvc3QgaXMgZ2l2ZW4gYW55IGF2YWlsYWJsZSA6Zm9jdXMgc3R5bGluZy5cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBTcGVjaWZpZXMgdGhlIHRlbXBsYXRlcyB1c2VkIGJ5IHRoZSBjb250cm9sLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW49dW5kZWZpbmVkIFNwZWNpZmllcyB0aGUgbWFpbiB0ZW1wbGF0ZSB1c2VkIGJ5IHRoZSBjb250cm9sLlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVNYXBwaW5nIFNwZWNpZmllcyB0aGUgbWFwcGluZyBvZiB0ZW1wbGF0ZXMuXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZUZvcm1hdHRlciBTcGVjaWZpZXMgdGhlIGZvcm1hdHRlciBmb3IgdGhlIHRlbXBsYXRlcy5cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlRm9ybWF0dGVyLm1hcmtlciBTcGVjaWZpZXMgdGhlIG1hcmtlciBmb3IgdGhlIHRlbXBsYXRlcy5cblx0ICogQHByb3BlcnR5IHtGdW5jdGlvbn0gdGVtcGxhdGVGb3JtYXR0ZXIubWFya2VyLm9wZW49bnVsbCBTcGVjaWZpZXMgdGhlIG9wZW5pbmcgbWFya2VyIGZvciB0aGUgdGVtcGxhdGVzLlxuXHQgKiBAcHJvcGVydHkge0Z1bmN0aW9ufSB0ZW1wbGF0ZUZvcm1hdHRlci5tYXJrZXIuY2xvc2U9bnVsbCBTcGVjaWZpZXMgdGhlIGNsb3NpbmcgbWFya2VyIGZvciB0aGUgdGVtcGxhdGVzLlxuXHQgKiBAcHJvcGVydHkge0Jvb2xlYW59IGV2ZW50UHJvY2Vzc2luZz1mYWxzZSBTcGVjaWZpZXMgd2hldGhlciB0aGUgY29udHJvbCBwcm9jZXNzZXMgZXZlbnRzLlxuXHQgKiBAc2luY2UgMS44LjBcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0ZGlzYWJsZWQ6IGZhbHNlLFxuXHRcdFx0c2hhZG93TW9kZTogXCJvcGVuXCIsXG5cdFx0XHRkZWxlZ2F0ZXNGb2N1czogdHJ1ZSxcblx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRtYWluOiB1bmRlZmluZWQsXG5cdFx0XHR9LFxuXHRcdFx0dGVtcGxhdGVNYXBwaW5nOiB7fSxcblx0XHRcdHRlbXBsYXRlRm9ybWF0dGVyOiB7XG5cdFx0XHRcdG1hcmtlcjoge1xuXHRcdFx0XHRcdG9wZW46IG51bGwsXG5cdFx0XHRcdFx0Y2xvc2U6IG51bGwsXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXG5cdFx0XHRldmVudFByb2Nlc3Npbmc6IGZhbHNlLFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgdXBkYXRlcyB0aGUgbGFiZWxzIG9mIHRoZSBlbGVtZW50LlxuXHQgKiBUaGUgbGFiZWxzIGFyZSBkZWZpbmVkIGluIHRoZSBvcHRpb24gb2JqZWN0LlxuXHQgKiBUaGUga2V5IG9mIHRoZSBsYWJlbCBpcyB1c2VkIHRvIHJldHJpZXZlIHRoZSB0cmFuc2xhdGlvbiBmcm9tIHRoZSBkb2N1bWVudC5cblx0ICogSWYgdGhlIHRyYW5zbGF0aW9uIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBsYWJlbCwgdGhlIGxhYmVsIGlzIHVwZGF0ZWQuXG5cdCAqXG5cdCAqIEJlZm9yZSB5b3UgY2FuIHVzZSB0aGlzIG1ldGhvZCwgeW91IG11c3QgaGF2ZSBsb2FkZWQgdGhlIHRyYW5zbGF0aW9ucy5cblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uQ3VzdG9tRWxlbWVudH1cblx0ICogQHRocm93cyB7RXJyb3J9ICBDYW5ub3QgZmluZCBhbiBlbGVtZW50IHdpdGggdHJhbnNsYXRpb25zLiBBZGQgYSB0cmFuc2xhdGlvbiBvYmplY3QgdG8gdGhlIGRvY3VtZW50LlxuXHQgKi9cblx0dXBkYXRlSTE4bigpIHtcblx0XHRsZXQgdHJhbnNsYXRpb25zO1xuXG5cdFx0dHJ5IHtcblx0XHRcdHRyYW5zbGF0aW9ucyA9IGdldERvY3VtZW50VHJhbnNsYXRpb25zKCk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS50b1N0cmluZygpKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGlmICghdHJhbnNsYXRpb25zKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHRjb25zdCBsYWJlbHMgPSB0aGlzLmdldE9wdGlvbihcImxhYmVsc1wiKTtcblx0XHRpZiAoIShpc09iamVjdChsYWJlbHMpIHx8IGlzSXRlcmFibGUobGFiZWxzKSkpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3Qga2V5IGluIGxhYmVscykge1xuXHRcdFx0Y29uc3QgZGVmID0gbGFiZWxzW2tleV07XG5cblx0XHRcdGlmIChpc1N0cmluZyhkZWYpKSB7XG5cdFx0XHRcdGNvbnN0IHRleHQgPSB0cmFuc2xhdGlvbnMuZ2V0VGV4dChrZXksIGRlZik7XG5cdFx0XHRcdGlmICh0ZXh0ICE9PSBkZWYpIHtcblx0XHRcdFx0XHR0aGlzLnNldE9wdGlvbihgbGFiZWxzLiR7a2V5fWAsIHRleHQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fSBlbHNlIGlmIChpc09iamVjdChkZWYpKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgayBpbiBkZWYpIHtcblx0XHRcdFx0XHRjb25zdCBkID0gZGVmW2tdO1xuXG5cdFx0XHRcdFx0Y29uc3QgdGV4dCA9IHRyYW5zbGF0aW9ucy5nZXRQbHVyYWxSdWxlVGV4dChrZXksIGssIGQpO1xuXHRcdFx0XHRcdGlmICghaXNTdHJpbmcodGV4dCkpIHtcblx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgbGFiZWxzIGRlZmluaXRpb25cIik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICh0ZXh0ICE9PSBkKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnNldE9wdGlvbihgbGFiZWxzLiR7a2V5fS4ke2t9YCwgdGV4dCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGxhYmVscyBkZWZpbml0aW9uXCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYGdldFRhZygpYCBtZXRob2QgcmV0dXJucyB0aGUgdGFnIG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXN0b20gZWxlbWVudC4gVGhpcyBtZXRob2Qgc2hvdWxkIGJlIG92ZXJ3cml0dGVuXG5cdCAqIGJ5IHRoZSBkZXJpdmVkIGNsYXNzLlxuXHQgKlxuXHQgKiBOb3RlIHRoYXQgdGhlcmUgaXMgbm8gY2hlY2sgb24gdGhlIG5hbWUgb2YgdGhlIHRhZyBpbiB0aGlzIGNsYXNzLiBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2Zcblx0ICogdGhlIGRldmVsb3BlciB0byBhc3NpZ24gYW4gYXBwcm9wcmlhdGUgdGFnIG5hbWUuIElmIHRoZSBuYW1lIGlzIG5vdCB2YWxpZCwgdGhlXG5cdCAqIGByZWdpc3RlckN1c3RvbUVsZW1lbnQoKWAgbWV0aG9kIHdpbGwgaXNzdWUgYW4gZXJyb3IuXG5cdCAqXG5cdCAqIEBzZWUgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvY3VzdG9tLWVsZW1lbnRzLmh0bWwjdmFsaWQtY3VzdG9tLWVsZW1lbnQtbmFtZVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gVGhpcyBtZXRob2QgbXVzdCBiZSBvdmVycmlkZGVuIGJ5IHRoZSBkZXJpdmVkIGNsYXNzLlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSB0YWcgbmFtZSBhc3NvY2lhdGVkIHdpdGggdGhlIGN1c3RvbSBlbGVtZW50LlxuXHQgKiBAc2luY2UgMS43LjBcblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XCJUaGUgbWV0aG9kIGBnZXRUYWcoKWAgbXVzdCBiZSBvdmVycmlkZGVuIGJ5IHRoZSBkZXJpdmVkIGNsYXNzLlwiLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGBnZXRDU1NTdHlsZVNoZWV0KClgIG1ldGhvZCByZXR1cm5zIGEgYENTU1N0eWxlU2hlZXRgIG9iamVjdCB0aGF0IGRlZmluZXMgdGhlIHN0eWxlcyBmb3IgdGhlIGN1c3RvbSBlbGVtZW50LlxuXHQgKiBJZiB0aGUgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgYENTU1N0eWxlU2hlZXRgIGNvbnN0cnVjdG9yLCB0aGVuIGFuIG9iamVjdCBjYW4gYmUgYnVpbHQgdXNpbmcgdGhlIHByb3ZpZGVkIGRldG91ci5cblx0ICpcblx0ICogSWYgYHVuZGVmaW5lZGAgaXMgcmV0dXJuZWQsIHRoZW4gdGhlIHNoYWRvdyByb290IGRvZXMgbm90IHJlY2VpdmUgYSBzdHlsZXNoZWV0LlxuXHQgKlxuXHQgKiBFeGFtcGxlIHVzYWdlOlxuXHQgKlxuXHQgKiBgYGBqc1xuXHQgKiBjbGFzcyBNeUVsZW1lbnQgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcblx0ICogICBzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0ICogICAgICAgY29uc3Qgc2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXHQgKiAgICAgICBzaGVldC5yZXBsYWNlU3luYyhcInAgeyBjb2xvcjogcmVkOyB9XCIpO1xuXHQgKiAgICAgICByZXR1cm4gc2hlZXQ7XG5cdCAqICAgfVxuXHQgKiB9XG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBJZiB0aGUgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgYENTU1N0eWxlU2hlZXRgIGNvbnN0cnVjdG9yLFxuXHQgKiB5b3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIHdvcmthcm91bmQgdG8gY3JlYXRlIHRoZSBzdHlsZXNoZWV0OlxuXHQgKlxuXHQgKiBgYGBqc1xuXHQgKiBjb25zdCBkb2MgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoJ3RpdGxlJyk7XG5cdCAqIGxldCBzdHlsZSA9IGRvYy5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG5cdCAqIHN0eWxlLmlubmVySFRNTCA9IFwicCB7IGNvbG9yOiByZWQ7IH1cIjtcblx0ICogc3R5bGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJcIikpO1xuXHQgKiBkb2MuaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG5cdCAqIHJldHVybiBkb2Muc3R5bGVTaGVldHNbMF07XG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcmV0dXJuIHtDU1NTdHlsZVNoZWV0fENTU1N0eWxlU2hlZXRbXXxzdHJpbmd8dW5kZWZpbmVkfSBBIGBDU1NTdHlsZVNoZWV0YCBvYmplY3Qgb3IgYW4gYXJyYXkgb2Ygc3VjaCBvYmplY3RzIHRoYXQgZGVmaW5lIHRoZSBzdHlsZXMgZm9yIHRoZSBjdXN0b20gZWxlbWVudCwgb3IgYHVuZGVmaW5lZGAgaWYgbm8gc3R5bGVzaGVldCBzaG91bGQgYmUgYXBwbGllZC5cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogYXR0YWNoIGEgbmV3IG9ic2VydmVyXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm4ge0N1c3RvbUVsZW1lbnR9XG5cdCAqL1xuXHRhdHRhY2hPYnNlcnZlcihvYnNlcnZlcikge1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmF0dGFjaE9ic2VydmVyKG9ic2VydmVyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBkZXRhY2ggYSBvYnNlcnZlclxuXHQgKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJuIHtDdXN0b21FbGVtZW50fVxuXHQgKi9cblx0ZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5kZXRhY2hPYnNlcnZlcihvYnNlcnZlcik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybiB7UHJveHlPYnNlcnZlcn1cblx0ICovXG5cdGNvbnRhaW5zT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbFN5bWJvbF0uY29udGFpbnNPYnNlcnZlcihvYnNlcnZlcik7XG5cdH1cblxuXHQvKipcblx0ICogbmVzdGVkIG9wdGlvbnMgY2FuIGJlIHNwZWNpZmllZCBieSBwYXRoIGBhLmIuY2Bcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcblx0ICogQHBhcmFtIHsqfSBkZWZhdWx0VmFsdWVcblx0ICogQHJldHVybiB7Kn1cblx0ICogQHNpbmNlIDEuMTAuMFxuXHQgKi9cblx0Z2V0T3B0aW9uKHBhdGgsIGRlZmF1bHRWYWx1ZSA9IHVuZGVmaW5lZCkge1xuXHRcdGxldCB2YWx1ZTtcblxuXHRcdHRyeSB7XG5cdFx0XHR2YWx1ZSA9IG5ldyBQYXRoZmluZGVyKFxuXHRcdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRSZWFsU3ViamVjdCgpW1wib3B0aW9uc1wiXSxcblx0XHRcdCkuZ2V0VmlhKHBhdGgpO1xuXHRcdH0gY2F0Y2ggKGUpIHt9XG5cblx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IG9wdGlvbiBhbmQgaW5mb3JtIGVsZW1lbnRzXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybiB7Q3VzdG9tRWxlbWVudH1cblx0ICogQHNpbmNlIDEuMTQuMFxuXHQgKi9cblx0c2V0T3B0aW9uKHBhdGgsIHZhbHVlKSB7XG5cdFx0bmV3IFBhdGhmaW5kZXIodGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpW1wib3B0aW9uc1wiXSkuc2V0VmlhKFxuXHRcdFx0cGF0aCxcblx0XHRcdHZhbHVlLFxuXHRcdCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHNpbmNlIDEuMTUuMFxuXHQgKiBAcGFyYW0ge3N0cmluZ3xvYmplY3R9IG9wdGlvbnNcblx0ICogQHJldHVybiB7Q3VzdG9tRWxlbWVudH1cblx0ICovXG5cdHNldE9wdGlvbnMob3B0aW9ucykge1xuXHRcdGlmIChpc1N0cmluZyhvcHRpb25zKSkge1xuXHRcdFx0b3B0aW9ucyA9IHBhcnNlT3B0aW9uc0pTT04uY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0XHR9XG5cdFx0Ly8gMjAyNC0wMS0yMTogcmVtb3ZlIHRoaXMuZGVmYXVsdHMsIG90aGVyd2lzZSBpdCB3aWxsIG92ZXJ3cml0ZVxuXHRcdC8vIHRoZSBjdXJyZW50IHNldHRpbmdzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gbWFkZS5cblx0XHQvLyBodHRwczovL2dpdGxhYi5zY2h1a2FpLmNvbS9vc3MvbGlicmFyaWVzL2phdmFzY3JpcHQvbW9uc3Rlci8tL2lzc3Vlcy8xMzZcblx0XHRleHRlbmQodGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpW1wib3B0aW9uc1wiXSwgb3B0aW9ucyk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBJcyBjYWxsZWQgb25jZSB2aWEgdGhlIGNvbnN0cnVjdG9yXG5cdCAqXG5cdCAqIEByZXR1cm4ge0N1c3RvbUVsZW1lbnR9XG5cdCAqIEBzaW5jZSAxLjguMFxuXHQgKi9cblx0W2luaXRNZXRob2RTeW1ib2xdKCkge1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbmNlIHdoZW4gdGhlIG9iamVjdCBpcyBlcXVpcHBlZCB3aXRoIHVwZGF0ZSBmb3IgdGhlIGR5bmFtaWMgY2hhbmdlIG9mIHRoZSBkb20uXG5cdCAqIFRoZSBmdW5jdGlvbnMgcmV0dXJuZWQgaGVyZSBjYW4gYmUgdXNlZCBhcyBwaXBlIGZ1bmN0aW9ucyBpbiB0aGUgdGVtcGxhdGUuXG5cdCAqXG5cdCAqIEluIHRoZSBleGFtcGxlLCB0aGUgZnVuY3Rpb24gYG15LXRyYW5zZm9ybWVyYCBpcyBkZWZpbmVkLiBJbiB0aGUgdGVtcGxhdGUsIHlvdSBjYW4gdXNlIGl0IGFzIGZvbGxvd3M6XG5cdCAqXG5cdCAqIGBgYGh0bWxcblx0ICogPG15LWVsZW1lbnRcblx0ICogICBkYXRhLW1vbnN0ZXItb3B0aW9uLXRyYW5zZm9ybWVyPVwicGF0aDpteS12YWx1ZSB8IGNhbGw6bXktdHJhbnNmb3JtZXJcIj5cblx0ICogPC9teS1lbGVtZW50PlxuXHQgKiBgYGBcblx0ICpcblx0ICogVGhlIGZ1bmN0aW9uIGBteS10cmFuc2Zvcm1lcmAgaXMgY2FsbGVkIHdpdGggdGhlIHZhbHVlIG9mIGBteS12YWx1ZWAgYXMgYSBwYXJhbWV0ZXIuXG5cdCAqXG5cdCAqIGBgYGpzXG5cdCAqIGNsYXNzIE15RWxlbWVudCBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuXHQgKiBbdXBkYXRlclRyYW5zZm9ybWVyTWV0aG9kc1N5bWJvbF0oKSB7XG5cdCAqICAgIHJldHVybiB7XG5cdCAqICAgICAgIFwibXktdHJhbnNmb3JtZXJcIjogKHZhbHVlKSA9PiB7XG5cdCAqICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiBXZXJ0KSB7XG5cdCAqICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG5cdCAqICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlICsgXCIhXCI7XG5cdCAqICAgICAgICAgICBjYXNlIFwiWmFobFwiOlxuXHQgKiAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSArIDE7XG5cdCAqICAgICAgICAgICBkZWZhdWx0OlxuXHQgKiAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcblx0ICogICAgICAgICAgIH1cblx0ICogICAgfVxuXHQgKiAgICB9O1xuXHQgKiAgfTtcblx0ICogIH1cblx0ICogYGBgXG5cdCAqXG5cdCAqIEByZXR1cm4ge29iamVjdH1cblx0ICogQHNpbmNlIDIuNDMuMFxuXHQgKi9cblx0W3VwZGF0ZXJUcmFuc2Zvcm1lck1ldGhvZHNTeW1ib2xdKCkge1xuXHRcdHJldHVybiB7fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb25jZSB3aGVuIHRoZSBvYmplY3QgaXMgaW5jbHVkZWQgaW4gdGhlIERPTSBmb3IgdGhlIGZpcnN0IHRpbWUuIEl0IHBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgYWN0aW9uczpcblx0ICpcblx0ICogPG9sPlxuXHQgKiA8bGk+RXh0cmFjdHMgdGhlIG9wdGlvbnMgZnJvbSB0aGUgYXR0cmlidXRlcyBhbmQgdGhlIHNjcmlwdCB0YWcgb2YgdGhlIGVsZW1lbnQgYW5kIHNldHMgdGhlbS48L2xpPlxuXHQgKiA8bGk+SW5pdGlhbGl6ZXMgdGhlIHNoYWRvdyByb290IGFuZCBpdHMgQ1NTIHN0eWxlc2hlZXQgKGlmIHNwZWNpZmllZCkuPC9saT5cblx0ICogPGxpPkluaXRpYWxpemVzIHRoZSBIVE1MIGNvbnRlbnQgb2YgdGhlIGVsZW1lbnQuPC9saT5cblx0ICogPGxpPkluaXRpYWxpemVzIHRoZSBjdXN0b20gZWxlbWVudHMgaW5zaWRlIHRoZSBzaGFkb3cgcm9vdCBhbmQgdGhlIHNsb3R0ZWQgZWxlbWVudHMuPC9saT5cblx0ICogPGxpPkF0dGFjaGVzIGEgbXV0YXRpb24gb2JzZXJ2ZXIgdG8gb2JzZXJ2ZSBjaGFuZ2VzIHRvIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBlbGVtZW50LjwvbGk+XG5cdCAqXG5cdCAqIEByZXR1cm4ge0N1c3RvbUVsZW1lbnR9IC0gVGhlIHVwZGF0ZWQgY3VzdG9tIGVsZW1lbnQuXG5cdCAqIEBzaW5jZSAxLjguMFxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRsZXQgZWxlbWVudHM7XG5cdFx0bGV0IG5vZGVMaXN0O1xuXG5cdFx0Ly8gRXh0cmFjdCBvcHRpb25zIGZyb20gYXR0cmlidXRlcyBhbmQgc2V0IHRoZW1cblx0XHRjb25zdCBBdHRyaWJ1dGVPcHRpb25zID0gZ2V0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzLmNhbGwodGhpcyk7XG5cdFx0aWYgKFxuXHRcdFx0aXNPYmplY3QoQXR0cmlidXRlT3B0aW9ucykgJiZcblx0XHRcdE9iamVjdC5rZXlzKEF0dHJpYnV0ZU9wdGlvbnMpLmxlbmd0aCA+IDBcblx0XHQpIHtcblx0XHRcdHRoaXMuc2V0T3B0aW9ucyhBdHRyaWJ1dGVPcHRpb25zKTtcblx0XHR9XG5cblx0XHQvLyBFeHRyYWN0IG9wdGlvbnMgZnJvbSBzY3JpcHQgdGFnIGFuZCBzZXQgdGhlbVxuXHRcdGNvbnN0IFNjcmlwdE9wdGlvbnMgPSBnZXRPcHRpb25zRnJvbVNjcmlwdFRhZy5jYWxsKHRoaXMpO1xuXHRcdGlmIChpc09iamVjdChTY3JpcHRPcHRpb25zKSAmJiBPYmplY3Qua2V5cyhTY3JpcHRPcHRpb25zKS5sZW5ndGggPiAwKSB7XG5cdFx0XHR0aGlzLnNldE9wdGlvbnMoU2NyaXB0T3B0aW9ucyk7XG5cdFx0fVxuXG5cdFx0Ly8gSW5pdGlhbGl6ZSB0aGUgc2hhZG93IHJvb3QgYW5kIGl0cyBDU1Mgc3R5bGVzaGVldFxuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcInNoYWRvd01vZGVcIiwgZmFsc2UpICE9PSBmYWxzZSkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aW5pdFNoYWRvd1Jvb3QuY2FsbCh0aGlzKTtcblx0XHRcdFx0ZWxlbWVudHMgPSB0aGlzLnNoYWRvd1Jvb3QuY2hpbGROb2Rlcztcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS50b1N0cmluZygpKTtcblx0XHRcdH1cblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aW5pdENTU1N0eWxlc2hlZXQuY2FsbCh0aGlzKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS50b1N0cmluZygpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBJZiB0aGUgZWxlbWVudHMgYXJlIG5vdCBmb3VuZCBpbnNpZGUgdGhlIHNoYWRvdyByb290LCBpbml0aWFsaXplIHRoZSBIVE1MIGNvbnRlbnQgb2YgdGhlIGVsZW1lbnRcblx0XHRpZiAoIShlbGVtZW50cyBpbnN0YW5jZW9mIE5vZGVMaXN0KSkge1xuXHRcdFx0aW5pdEh0bWxDb250ZW50LmNhbGwodGhpcyk7XG5cdFx0XHRlbGVtZW50cyA9IHRoaXMuY2hpbGROb2Rlcztcblx0XHR9XG5cblx0XHQvLyBJbml0aWFsaXplIHRoZSBjdXN0b20gZWxlbWVudHMgaW5zaWRlIHRoZSBzaGFkb3cgcm9vdCBhbmQgdGhlIHNsb3R0ZWQgZWxlbWVudHNcblx0XHRpbml0RnJvbUNhbGxiYWNrSG9zdC5jYWxsKHRoaXMpO1xuXHRcdHRyeSB7XG5cdFx0XHRub2RlTGlzdCA9IG5ldyBTZXQoWy4uLmVsZW1lbnRzLCAuLi5nZXRTbG90dGVkRWxlbWVudHMuY2FsbCh0aGlzKV0pO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdG5vZGVMaXN0ID0gZWxlbWVudHM7XG5cdFx0fVxuXG5cdFx0dGhpc1t1cGRhdGVDbG9uZURhdGFTeW1ib2xdID0gY2xvbmUoXG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRSZWFsU3ViamVjdCgpW1wib3B0aW9uc1wiXSxcblx0XHQpO1xuXG5cdFx0Y29uc3QgY2ZnID0ge307XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZXZlbnRQcm9jZXNzaW5nXCIpID09PSB0cnVlKSB7XG5cdFx0XHRjZmcuZXZlbnRQcm9jZXNzaW5nID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRhZGRPYmplY3RXaXRoVXBkYXRlclRvRWxlbWVudC5jYWxsKFxuXHRcdFx0dGhpcyxcblx0XHRcdG5vZGVMaXN0LFxuXHRcdFx0Y3VzdG9tRWxlbWVudFVwZGF0ZXJMaW5rU3ltYm9sLFxuXHRcdFx0dGhpc1t1cGRhdGVDbG9uZURhdGFTeW1ib2xdLFxuXHRcdFx0Y2ZnLFxuXHRcdCk7XG5cblx0XHQvLyBBdHRhY2ggYSBtdXRhdGlvbiBvYnNlcnZlciB0byBvYnNlcnZlIGNoYW5nZXMgdG8gdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIGVsZW1lbnRcblx0XHRhdHRhY2hBdHRyaWJ1dGVDaGFuZ2VNdXRhdGlvbk9ic2VydmVyLmNhbGwodGhpcyk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBZb3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmc/IFRoaXMgZnVuY3Rpb24gaXMgb25seSBmb3IgYWR2YW5jZWQgdXNlcnMuXG5cdCAqIFRoZSByZXN1bHQgaXMgYSBjbG9uZSBvZiB0aGUgaW50ZXJuYWwgZGF0YS5cblx0ICpcblx0ICogQHJldHVybiB7Kn1cblx0ICovXG5cdGdldEludGVybmFsVXBkYXRlQ2xvbmVEYXRhKCkge1xuXHRcdHJldHVybiBjbG9uZSh0aGlzW3VwZGF0ZUNsb25lRGF0YVN5bWJvbF0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBldmVyeSB0aW1lIHRoZSBlbGVtZW50IGlzIGluc2VydGVkIGludG8gdGhlIERPTS4gSXQgY2hlY2tzIGlmIHRoZSBjdXN0b20gZWxlbWVudFxuXHQgKiBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkIGFuZCBpZiBub3QsIGNhbGxzIHRoZSBhc3NlbWJsZU1ldGhvZCB0byBpbml0aWFsaXplIGl0LlxuXHQgKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKiBAc2luY2UgMS43LjBcblx0ICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudC9jb25uZWN0ZWRDYWxsYmFja1xuXHQgKi9cblx0Y29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0Ly8gQ2hlY2sgaWYgdGhlIG9iamVjdCBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkXG5cdFx0aWYgKCFoYXNPYmplY3RMaW5rKHRoaXMsIGN1c3RvbUVsZW1lbnRVcGRhdGVyTGlua1N5bWJvbCkpIHtcblx0XHRcdC8vIElmIG5vdCwgY2FsbCB0aGUgYXNzZW1ibGVNZXRob2QgdG8gaW5pdGlhbGl6ZSB0aGUgb2JqZWN0XG5cdFx0XHR0aGlzW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxsZWQgZXZlcnkgdGltZSB0aGUgZWxlbWVudCBpcyByZW1vdmVkIGZyb20gdGhlIERPTS4gVXNlZnVsIGZvciBydW5uaW5nIGNsZWFuIHVwIGNvZGUuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqIEBzaW5jZSAxLjcuMFxuXHQgKi9cblx0ZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7fVxuXG5cdC8qKlxuXHQgKiBUaGUgY3VzdG9tIGVsZW1lbnQgaGFzIGJlZW4gbW92ZWQgaW50byBhIG5ldyBkb2N1bWVudCAoZS5nLiBzb21lb25lIGNhbGxlZCBkb2N1bWVudC5hZG9wdE5vZGUoZWwpKS5cblx0ICpcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICogQHNpbmNlIDEuNy4wXG5cdCAqL1xuXHRhZG9wdGVkQ2FsbGJhY2soKSB7fVxuXG5cdC8qKlxuXHQgKiBDYWxsZWQgd2hlbiBhbiBvYnNlcnZlZCBhdHRyaWJ1dGUgaGFzIGJlZW4gYWRkZWQsIHJlbW92ZWQsIHVwZGF0ZWQsIG9yIHJlcGxhY2VkLiBBbHNvIGNhbGxlZCBmb3IgaW5pdGlhbFxuXHQgKiB2YWx1ZXMgd2hlbiBhbiBlbGVtZW50IGlzIGNyZWF0ZWQgYnkgdGhlIHBhcnNlciwgb3IgdXBncmFkZWQuIE5vdGU6IG9ubHkgYXR0cmlidXRlcyBsaXN0ZWQgaW4gdGhlIG9ic2VydmVkQXR0cmlidXRlc1xuXHQgKiBwcm9wZXJ0eSB3aWxsIHJlY2VpdmUgdGhpcyBjYWxsYmFjay5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGF0dHJOYW1lXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBvbGRWYWxcblx0ICogQHBhcmFtIHtzdHJpbmd9IG5ld1ZhbFxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKiBAc2luY2UgMS4xNS4wXG5cdCAqL1xuXHRhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soYXR0ck5hbWUsIG9sZFZhbCwgbmV3VmFsKSB7XG5cdFx0aWYgKGF0dHJOYW1lLnN0YXJ0c1dpdGgoXCJkYXRhLW1vbnN0ZXItb3B0aW9uLVwiKSkge1xuXHRcdFx0c2V0T3B0aW9uRnJvbUF0dHJpYnV0ZShcblx0XHRcdFx0dGhpcyxcblx0XHRcdFx0YXR0ck5hbWUsXG5cdFx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKVtcIm9wdGlvbnNcIl0sXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGNhbGxiYWNrID0gdGhpc1thdHRyaWJ1dGVPYnNlcnZlclN5bWJvbF0/LlthdHRyTmFtZV07XG5cdFx0aWYgKGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjYWxsYmFjay5jYWxsKHRoaXMsIG5ld1ZhbCwgb2xkVmFsKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS50b1N0cmluZygpKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtOb2RlfSBub2RlXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mXG5cdCAqIEBzaW5jZSAxLjE5LjBcblx0ICovXG5cdGhhc05vZGUobm9kZSkge1xuXHRcdGlmIChjb250YWluQ2hpbGROb2RlLmNhbGwodGhpcywgdmFsaWRhdGVJbnN0YW5jZShub2RlLCBOb2RlKSkpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdGlmICghKHRoaXMuc2hhZG93Um9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbnRhaW5DaGlsZE5vZGUuY2FsbCh0aGlzLnNoYWRvd1Jvb3QsIG5vZGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENhbGxzIGEgY2FsbGJhY2sgZnVuY3Rpb24gaWYgaXQgZXhpc3RzLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuXHQgKiBAcGFyYW0geyp9IGFyZ3Ncblx0ICogQHJldHVybiB7Kn1cblx0ICovXG5cdGNhbGxDYWxsYmFjayhuYW1lLCBhcmdzKSB7XG5cdFx0cmV0dXJuIGNhbGxDb250cm9sQ2FsbGJhY2suY2FsbCh0aGlzLCBuYW1lLCAuLi5hcmdzKTtcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBjYWxsQmFja0Z1bmN0aW9uTmFtZVxuICogQHBhcmFtIHsqfSAgYXJnc1xuICogQHJldHVybiB7YW55fVxuICovXG5mdW5jdGlvbiBjYWxsQ29udHJvbENhbGxiYWNrKGNhbGxCYWNrRnVuY3Rpb25OYW1lLCAuLi5hcmdzKSB7XG5cdGlmICghaXNTdHJpbmcoY2FsbEJhY2tGdW5jdGlvbk5hbWUpIHx8IGNhbGxCYWNrRnVuY3Rpb25OYW1lID09PSBcIlwiKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKGNhbGxCYWNrRnVuY3Rpb25OYW1lIGluIHRoaXMpIHtcblx0XHRyZXR1cm4gdGhpc1tjYWxsQmFja0Z1bmN0aW9uTmFtZV0odGhpcywgLi4uYXJncyk7XG5cdH1cblxuXHRpZiAoIXRoaXMuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9TQ1JJUFRfSE9TVCkpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZiAodGhpc1tzY3JpcHRIb3N0RWxlbWVudFN5bWJvbF0ubGVuZ3RoID09PSAwKSB7XG5cdFx0Y29uc3QgdGFyZ2V0SWQgPSB0aGlzLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfU0NSSVBUX0hPU1QpO1xuXHRcdGlmICghdGFyZ2V0SWQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBsaXN0ID0gdGFyZ2V0SWQuc3BsaXQoXCIsXCIpO1xuXHRcdGZvciAoY29uc3QgaWQgb2YgbGlzdCkge1xuXHRcdFx0Y29uc3QgaG9zdCA9IGZpbmRFbGVtZW50V2l0aElkVXB3YXJkcyh0aGlzLCB0YXJnZXRJZCk7XG5cdFx0XHRpZiAoIShob3N0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzW3NjcmlwdEhvc3RFbGVtZW50U3ltYm9sXS5wdXNoKGhvc3QpO1xuXHRcdH1cblx0fVxuXG5cdGZvciAoY29uc3QgaG9zdCBvZiB0aGlzW3NjcmlwdEhvc3RFbGVtZW50U3ltYm9sXSkge1xuXHRcdGlmIChjYWxsQmFja0Z1bmN0aW9uTmFtZSBpbiBob3N0KSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRyZXR1cm4gaG9zdFtjYWxsQmFja0Z1bmN0aW9uTmFtZV0odGhpcywgLi4uYXJncyk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUudG9TdHJpbmcoKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0dGhpcyxcblx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdGBjYWxsYmFjayAke2NhbGxCYWNrRnVuY3Rpb25OYW1lfSBub3QgZm91bmRgLFxuXHQpO1xufVxuXG4vKipcbiAqIEluaXRpYWxpemVzIHRoZSBjdXN0b20gZWxlbWVudCBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKlxuICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgZWxlbWVudCBpcyBhdHRhY2hlZCB0byB0aGUgRE9NLiBJdCBjaGVja3MgaWYgdGhlXG4gKiBgZGF0YS1tb25zdGVyLW9wdGlvbi1jYWxsYmFja2AgYXR0cmlidXRlIGlzIHNldCwgYW5kIGlmIG5vdCwgdGhlIGRlZmF1bHQgY2FsbGJhY2tcbiAqIGBpbml0Q3VzdG9tQ29udHJvbENhbGxiYWNrYCBpcyBjYWxsZWQuIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBzZWFyY2hlZCBmb3IgaW4gdGhpc1xuICogZWxlbWVudCBhbmQgaW4gdGhlIGhvc3QgZWxlbWVudC4gSWYgdGhlIGNhbGxiYWNrIGlzIGZvdW5kLCBpdCBpcyBjYWxsZWQgd2l0aCB0aGUgZWxlbWVudFxuICogYXMgYSBwYXJhbWV0ZXIuXG4gKlxuICogQHRoaXMgQ3VzdG9tRWxlbWVudFxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5L2RlZmluZSNwcm92aWRpbmdfYV9jb25zdHJ1Y3Rpb25fY2FsbGJhY2tcbiAqIEBzaW5jZSAxLjguMFxuICovXG5mdW5jdGlvbiBpbml0RnJvbUNhbGxiYWNrSG9zdCgpIHtcblx0Ly8gU2V0IHRoZSBkZWZhdWx0IGNhbGxiYWNrIGZ1bmN0aW9uIG5hbWVcblx0bGV0IGNhbGxCYWNrRnVuY3Rpb25OYW1lID0gaW5pdENvbnRyb2xDYWxsYmFja05hbWU7XG5cblx0Ly8gSWYgdGhlIGBkYXRhLW1vbnN0ZXItb3B0aW9uLWNhbGxiYWNrYCBhdHRyaWJ1dGUgaXMgc2V0LCB1c2UgaXRzIHZhbHVlIGFzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBuYW1lXG5cdGlmICh0aGlzLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfSU5JVF9DQUxMQkFDSykpIHtcblx0XHRjYWxsQmFja0Z1bmN0aW9uTmFtZSA9IHRoaXMuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9JTklUX0NBTExCQUNLKTtcblx0fVxuXG5cdC8vIENhbGwgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGggdGhlIGVsZW1lbnQgYXMgYSBwYXJhbWV0ZXIgaWYgaXQgZXhpc3RzXG5cdGNhbGxDb250cm9sQ2FsbGJhY2suY2FsbCh0aGlzLCBjYWxsQmFja0Z1bmN0aW9uTmFtZSk7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIGVsZW1lbnQgaXMgZmlyc3QgY3JlYXRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHRoaXMgQ3VzdG9tRWxlbWVudFxuICovXG5mdW5jdGlvbiBhdHRhY2hBdHRyaWJ1dGVDaGFuZ2VNdXRhdGlvbk9ic2VydmVyKCkge1xuXHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRpZiAodHlwZW9mIHNlbGZbYXR0cmlidXRlTXV0YXRpb25PYnNlcnZlclN5bWJvbF0gIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRzZWxmW2F0dHJpYnV0ZU11dGF0aW9uT2JzZXJ2ZXJTeW1ib2xdID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoXG5cdFx0ZnVuY3Rpb24gKG11dGF0aW9ucywgb2JzZXJ2ZXIpIHtcblx0XHRcdGZvciAoY29uc3QgbXV0YXRpb24gb2YgbXV0YXRpb25zKSB7XG5cdFx0XHRcdGlmIChtdXRhdGlvbi50eXBlID09PSBcImF0dHJpYnV0ZXNcIikge1xuXHRcdFx0XHRcdHNlbGYuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKFxuXHRcdFx0XHRcdFx0bXV0YXRpb24uYXR0cmlidXRlTmFtZSxcblx0XHRcdFx0XHRcdG11dGF0aW9uLm9sZFZhbHVlLFxuXHRcdFx0XHRcdFx0bXV0YXRpb24udGFyZ2V0LmdldEF0dHJpYnV0ZShtdXRhdGlvbi5hdHRyaWJ1dGVOYW1lKSxcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0KTtcblxuXHR0cnkge1xuXHRcdHNlbGZbYXR0cmlidXRlTXV0YXRpb25PYnNlcnZlclN5bWJvbF0ub2JzZXJ2ZShzZWxmLCB7XG5cdFx0XHRhdHRyaWJ1dGVzOiB0cnVlLFxuXHRcdFx0YXR0cmlidXRlT2xkVmFsdWU6IHRydWUsXG5cdFx0fSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRhZGRBdHRyaWJ1dGVUb2tlbihzZWxmLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLnRvU3RyaW5nKCkpO1xuXHR9XG59XG5cbi8qKlxuICogQHRoaXMgQ3VzdG9tRWxlbWVudFxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gY29udGFpbkNoaWxkTm9kZShub2RlKSB7XG5cdGlmICh0aGlzLmNvbnRhaW5zKG5vZGUpKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRmb3IgKGNvbnN0IFssIGVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuY2hpbGROb2RlcykpIHtcblx0XHRpZiAoZS5jb250YWlucyhub2RlKSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0Y29udGFpbkNoaWxkTm9kZS5jYWxsKGUsIG5vZGUpO1xuXHR9XG5cblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTUuMFxuICogQHByaXZhdGVcbiAqIEB0aGlzIEN1c3RvbUVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gaW5pdE9wdGlvbk9ic2VydmVyKCkge1xuXHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRsZXQgbGFzdERpc2FibGVkVmFsdWUgPSB1bmRlZmluZWQ7XG5cdHNlbGYuYXR0YWNoT2JzZXJ2ZXIoXG5cdFx0bmV3IE9ic2VydmVyKGZ1bmN0aW9uICgpIHtcblx0XHRcdGNvbnN0IGZsYWcgPSBzZWxmLmdldE9wdGlvbihcImRpc2FibGVkXCIpO1xuXG5cdFx0XHRpZiAoZmxhZyA9PT0gbGFzdERpc2FibGVkVmFsdWUpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRsYXN0RGlzYWJsZWRWYWx1ZSA9IGZsYWc7XG5cblx0XHRcdGlmICghKHNlbGYuc2hhZG93Um9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgcXVlcnkgPVxuXHRcdFx0XHRcImJ1dHRvbiwgY29tbWFuZCwgZmllbGRzZXQsIGtleWdlbiwgb3B0Z3JvdXAsIG9wdGlvbiwgc2VsZWN0LCB0ZXh0YXJlYSwgaW5wdXQsIFtkYXRhLW1vbnN0ZXItb2JqZWN0bGlua11cIjtcblx0XHRcdGNvbnN0IGVsZW1lbnRzID0gc2VsZi5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwocXVlcnkpO1xuXG5cdFx0XHRsZXQgbm9kZUxpc3Q7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRub2RlTGlzdCA9IG5ldyBTZXQoW1xuXHRcdFx0XHRcdC4uLmVsZW1lbnRzLFxuXHRcdFx0XHRcdC4uLmdldFNsb3R0ZWRFbGVtZW50cy5jYWxsKHNlbGYsIHF1ZXJ5KSxcblx0XHRcdFx0XSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdG5vZGVMaXN0ID0gZWxlbWVudHM7XG5cdFx0XHR9XG5cblx0XHRcdGZvciAoY29uc3QgZWxlbWVudCBvZiBbLi4ubm9kZUxpc3RdKSB7XG5cdFx0XHRcdGlmIChmbGFnID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0RJU0FCTEVELCBcIlwiKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShBVFRSSUJVVEVfRElTQUJMRUQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSksXG5cdCk7XG5cblx0c2VsZi5hdHRhY2hPYnNlcnZlcihcblx0XHRuZXcgT2JzZXJ2ZXIoZnVuY3Rpb24gKCkge1xuXHRcdFx0Ly8gbm90IGluaXRpYWxpc2VkXG5cdFx0XHRpZiAoIWhhc09iamVjdExpbmsoc2VsZiwgY3VzdG9tRWxlbWVudFVwZGF0ZXJMaW5rU3ltYm9sKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHQvLyBpbmZvcm0gZXZlcnkgZWxlbWVudFxuXHRcdFx0Y29uc3QgdXBkYXRlcnMgPSBnZXRMaW5rZWRPYmplY3RzKHNlbGYsIGN1c3RvbUVsZW1lbnRVcGRhdGVyTGlua1N5bWJvbCk7XG5cblx0XHRcdGZvciAoY29uc3QgbGlzdCBvZiB1cGRhdGVycykge1xuXHRcdFx0XHRmb3IgKGNvbnN0IHVwZGF0ZXIgb2YgbGlzdCkge1xuXHRcdFx0XHRcdGNvbnN0IGQgPSBjbG9uZShzZWxmW2ludGVybmFsU3ltYm9sXS5nZXRSZWFsU3ViamVjdCgpW1wib3B0aW9uc1wiXSk7XG5cdFx0XHRcdFx0T2JqZWN0LmFzc2lnbih1cGRhdGVyLmdldFN1YmplY3QoKSwgZCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KSxcblx0KTtcblxuXHQvLyBkaXNhYmxlZFxuXHRzZWxmW2F0dHJpYnV0ZU9ic2VydmVyU3ltYm9sXVtBVFRSSUJVVEVfRElTQUJMRURdID0gKCkgPT4ge1xuXHRcdGlmIChzZWxmLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfRElTQUJMRUQpKSB7XG5cdFx0XHRzZWxmLnNldE9wdGlvbihBVFRSSUJVVEVfRElTQUJMRUQsIHRydWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzZWxmLnNldE9wdGlvbihBVFRSSUJVVEVfRElTQUJMRUQsIHVuZGVmaW5lZCk7XG5cdFx0fVxuXHR9O1xuXG5cdC8vIGRhdGEtbW9uc3Rlci1vcHRpb25zXG5cdHNlbGZbYXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2xdW0FUVFJJQlVURV9PUFRJT05TXSA9ICgpID0+IHtcblx0XHRjb25zdCBvcHRpb25zID0gZ2V0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzLmNhbGwoc2VsZik7XG5cdFx0aWYgKGlzT2JqZWN0KG9wdGlvbnMpICYmIE9iamVjdC5rZXlzKG9wdGlvbnMpLmxlbmd0aCA+IDApIHtcblx0XHRcdHNlbGYuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHR9XG5cdH07XG5cblx0Ly8gZGF0YS1tb25zdGVyLW9wdGlvbnMtc2VsZWN0b3Jcblx0c2VsZlthdHRyaWJ1dGVPYnNlcnZlclN5bWJvbF1bQVRUUklCVVRFX09QVElPTlNfU0VMRUNUT1JdID0gKCkgPT4ge1xuXHRcdGNvbnN0IG9wdGlvbnMgPSBnZXRPcHRpb25zRnJvbVNjcmlwdFRhZy5jYWxsKHNlbGYpO1xuXHRcdGlmIChpc09iamVjdChvcHRpb25zKSAmJiBPYmplY3Qua2V5cyhvcHRpb25zKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRzZWxmLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdFx0fVxuXHR9O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIG9iamVjdFxuICovXG5mdW5jdGlvbiBnZXRPcHRpb25zRnJvbVNjcmlwdFRhZygpIHtcblx0aWYgKCF0aGlzLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfT1BUSU9OU19TRUxFQ1RPUikpIHtcblx0XHRyZXR1cm4ge307XG5cdH1cblxuXHRjb25zdCBub2RlID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihcblx0XHR0aGlzLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfT1BUSU9OU19TRUxFQ1RPUiksXG5cdCk7XG5cdGlmICghKG5vZGUgaW5zdGFuY2VvZiBIVE1MU2NyaXB0RWxlbWVudCkpIHtcblx0XHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRcdHRoaXMsXG5cdFx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdFx0YHRoZSBzZWxlY3RvciAke0FUVFJJQlVURV9PUFRJT05TX1NFTEVDVE9SfSBmb3Igb3B0aW9ucyB3YXMgc3BlY2lmaWVkICgke3RoaXMuZ2V0QXR0cmlidXRlKFxuXHRcdFx0XHRBVFRSSUJVVEVfT1BUSU9OU19TRUxFQ1RPUixcblx0XHRcdCl9KSBidXQgbm90IGZvdW5kLmAsXG5cdFx0KTtcblx0XHRyZXR1cm4ge307XG5cdH1cblxuXHRsZXQgb2JqID0ge307XG5cblx0dHJ5IHtcblx0XHRvYmogPSBwYXJzZU9wdGlvbnNKU09OLmNhbGwodGhpcywgbm9kZS50ZXh0Q29udGVudC50cmltKCkpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0XHR0aGlzLFxuXHRcdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRcdGB3aGVuIGFuYWx5emluZyB0aGUgY29uZmlndXJhdGlvbiBmcm9tIHRoZSBzY3JpcHQgdGFnIHRoZXJlIHdhcyBhbiBlcnJvci4gJHtlfWAsXG5cdFx0KTtcblx0fVxuXG5cdHJldHVybiBvYmo7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gZ2V0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzKCkge1xuXHRpZiAodGhpcy5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX09QVElPTlMpKSB7XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBwYXJzZU9wdGlvbnNKU09OLmNhbGwodGhpcywgdGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX09QVElPTlMpKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRcdFx0dGhpcyxcblx0XHRcdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRcdFx0YHRoZSBvcHRpb25zIGF0dHJpYnV0ZSAke0FUVFJJQlVURV9PUFRJT05TfSBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQganNvbiBkZWZpbml0aW9uIChhY3R1YWw6ICR7dGhpcy5nZXRBdHRyaWJ1dGUoXG5cdFx0XHRcdFx0QVRUUklCVVRFX09QVElPTlMsXG5cdFx0XHRcdCl9KS4ke2V9YCxcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHt9O1xufVxuXG4vKipcbiAqIFBhcnNlcyB0aGUgZ2l2ZW4gSlNPTiBkYXRhIGFuZCByZXR1cm5zIHRoZSBwYXJzZWQgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gZGF0YSBUaGUgSlNPTiBkYXRhIHRvIGJlIHBhcnNlZC5cbiAqIEByZXR1cm4ge09iamVjdH0gVGhlIHBhcnNlZCBvYmplY3QuXG4gKiBAdGhyb3dzIHtlcnJvcn0gVGhyb3dzIGFuIGVycm9yIGlmIHRoZSBKU09OIGRhdGEgaXMgbm90IHZhbGlkLlxuICovXG5mdW5jdGlvbiBwYXJzZU9wdGlvbnNKU09OKGRhdGEpIHtcblx0bGV0IG9iaiA9IHt9O1xuXG5cdGlmICghaXNTdHJpbmcoZGF0YSkpIHtcblx0XHRyZXR1cm4gb2JqO1xuXHR9XG5cblx0Ly8gdGhlIGNvbmZpZ3VyYXRpb24gY2FuIGJlIHNwZWNpZmllZCBhcyBhIGRhdGEgdXJsLlxuXHR0cnkge1xuXHRcdGNvbnN0IGRhdGFVcmwgPSBwYXJzZURhdGFVUkwoZGF0YSk7XG5cdFx0ZGF0YSA9IGRhdGFVcmwuY29udGVudDtcblx0fSBjYXRjaCAoZSkge31cblxuXHR0cnkge1xuXHRcdG9iaiA9IEpTT04ucGFyc2UoZGF0YSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHR0aHJvdyBlO1xuXHR9XG5cblx0cmV0dXJuIHZhbGlkYXRlT2JqZWN0KG9iaik7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge2luaXRIdG1sQ29udGVudH1cbiAqL1xuZnVuY3Rpb24gaW5pdEh0bWxDb250ZW50KCkge1xuXHR0cnkge1xuXHRcdGNvbnN0IHRlbXBsYXRlID0gZmluZERvY3VtZW50VGVtcGxhdGUodGhpcy5jb25zdHJ1Y3Rvci5nZXRUYWcoKSk7XG5cdFx0dGhpcy5hcHBlbmRDaGlsZCh0ZW1wbGF0ZS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0bGV0IGh0bWwgPSB0aGlzLmdldE9wdGlvbihcInRlbXBsYXRlcy5tYWluXCIsIFwiXCIpO1xuXHRcdGlmIChpc1N0cmluZyhodG1sKSAmJiBodG1sLmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbnN0IG1hcHBpbmcgPSB0aGlzLmdldE9wdGlvbihcInRlbXBsYXRlTWFwcGluZ1wiLCB7fSk7XG5cdFx0XHRpZiAoaXNPYmplY3QobWFwcGluZykpIHtcblx0XHRcdFx0aHRtbCA9IG5ldyBGb3JtYXR0ZXIobWFwcGluZywge30pLmZvcm1hdChodG1sKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuaW5uZXJIVE1MID0gaHRtbDtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7Q3VzdG9tRWxlbWVudH1cbiAqIEB0aGlzIEN1c3RvbUVsZW1lbnRcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTYuMFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2ZcbiAqL1xuZnVuY3Rpb24gaW5pdENTU1N0eWxlc2hlZXQoKSB7XG5cdGlmICghKHRoaXMuc2hhZG93Um9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpKSB7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjb25zdCBzdHlsZVNoZWV0ID0gdGhpcy5jb25zdHJ1Y3Rvci5nZXRDU1NTdHlsZVNoZWV0KCk7XG5cblx0aWYgKHN0eWxlU2hlZXQgaW5zdGFuY2VvZiBDU1NTdHlsZVNoZWV0KSB7XG5cdFx0aWYgKHN0eWxlU2hlZXQuY3NzUnVsZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0dGhpcy5zaGFkb3dSb290LmFkb3B0ZWRTdHlsZVNoZWV0cyA9IFtzdHlsZVNoZWV0XTtcblx0XHR9XG5cdH0gZWxzZSBpZiAoaXNBcnJheShzdHlsZVNoZWV0KSkge1xuXHRcdGNvbnN0IGFzc2lnbiA9IFtdO1xuXHRcdGZvciAoY29uc3QgcyBvZiBzdHlsZVNoZWV0KSB7XG5cdFx0XHRpZiAoaXNTdHJpbmcocykpIHtcblx0XHRcdFx0Y29uc3QgdHJpbWVkU3R5bGVTaGVldCA9IHMudHJpbSgpO1xuXHRcdFx0XHRpZiAodHJpbWVkU3R5bGVTaGVldCAhPT0gXCJcIikge1xuXHRcdFx0XHRcdGNvbnN0IHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuXHRcdFx0XHRcdHN0eWxlLmlubmVySFRNTCA9IHRyaW1lZFN0eWxlU2hlZXQ7XG5cdFx0XHRcdFx0dGhpcy5zaGFkb3dSb290LnByZXBlbmQoc3R5bGUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHR2YWxpZGF0ZUluc3RhbmNlKHMsIENTU1N0eWxlU2hlZXQpO1xuXG5cdFx0XHRpZiAocy5jc3NSdWxlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGFzc2lnbi5wdXNoKHMpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChhc3NpZ24ubGVuZ3RoID4gMCkge1xuXHRcdFx0dGhpcy5zaGFkb3dSb290LmFkb3B0ZWRTdHlsZVNoZWV0cyA9IGFzc2lnbjtcblx0XHR9XG5cdH0gZWxzZSBpZiAoaXNTdHJpbmcoc3R5bGVTaGVldCkpIHtcblx0XHRjb25zdCB0cmltZWRTdHlsZVNoZWV0ID0gc3R5bGVTaGVldC50cmltKCk7XG5cdFx0aWYgKHRyaW1lZFN0eWxlU2hlZXQgIT09IFwiXCIpIHtcblx0XHRcdGNvbnN0IHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuXHRcdFx0c3R5bGUuaW5uZXJIVE1MID0gc3R5bGVTaGVldDtcblx0XHRcdHRoaXMuc2hhZG93Um9vdC5wcmVwZW5kKHN0eWxlKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7Q3VzdG9tRWxlbWVudH1cbiAqIEB0aHJvd3Mge0Vycm9yfSBodG1sIGlzIG5vdCBzZXQuXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50L2F0dGFjaFNoYWRvd1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqL1xuZnVuY3Rpb24gaW5pdFNoYWRvd1Jvb3QoKSB7XG5cdGxldCB0ZW1wbGF0ZTtcblx0bGV0IGh0bWw7XG5cblx0dHJ5IHtcblx0XHR0ZW1wbGF0ZSA9IGZpbmREb2N1bWVudFRlbXBsYXRlKHRoaXMuY29uc3RydWN0b3IuZ2V0VGFnKCkpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aHRtbCA9IHRoaXMuZ2V0T3B0aW9uKFwidGVtcGxhdGVzLm1haW5cIiwgXCJcIik7XG5cdFx0aWYgKCFpc1N0cmluZyhodG1sKSB8fCBodG1sID09PSB1bmRlZmluZWQgfHwgaHRtbCA9PT0gXCJcIikge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaHRtbCBpcyBub3Qgc2V0LlwiKTtcblx0XHR9XG5cdH1cblxuXHR0aGlzLmF0dGFjaFNoYWRvdyh7XG5cdFx0bW9kZTogdGhpcy5nZXRPcHRpb24oXCJzaGFkb3dNb2RlXCIsIFwib3BlblwiKSxcblx0XHRkZWxlZ2F0ZXNGb2N1czogdGhpcy5nZXRPcHRpb24oXCJkZWxlZ2F0ZXNGb2N1c1wiLCB0cnVlKSxcblx0fSk7XG5cblx0aWYgKHRlbXBsYXRlIGluc3RhbmNlb2YgVGVtcGxhdGUpIHtcblx0XHR0aGlzLnNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQodGVtcGxhdGUuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNvbnN0IG1hcHBpbmcgPSB0aGlzLmdldE9wdGlvbihcInRlbXBsYXRlTWFwcGluZ1wiLCB7fSk7XG5cdGlmIChpc09iamVjdChtYXBwaW5nKSkge1xuXHRcdGNvbnN0IGZvcm1hdHRlciA9IG5ldyBGb3JtYXR0ZXIobWFwcGluZyk7XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwidGVtcGxhdGVGb3JtYXR0ZXIubWFya2VyLm9wZW5cIikgIT09IG51bGwpIHtcblx0XHRcdGZvcm1hdHRlci5zZXRNYXJrZXIoXG5cdFx0XHRcdHRoaXMuZ2V0T3B0aW9uKFwidGVtcGxhdGVGb3JtYXR0ZXIubWFya2VyLm9wZW5cIiksXG5cdFx0XHRcdHRoaXMuZ2V0T3B0aW9uKFwidGVtcGxhdGVGb3JtYXR0ZXIubWFya2VyLmNsb3NlXCIpLFxuXHRcdFx0KTtcblx0XHR9XG5cdFx0aHRtbCA9IGZvcm1hdHRlci5mb3JtYXQoaHRtbCk7XG5cdH1cblxuXHR0aGlzLnNoYWRvd1Jvb3QuaW5uZXJIVE1MID0gaHRtbDtcblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgcmVnaXN0ZXJzIGEgbmV3IGVsZW1lbnQuIFRoZSBzdHJpbmcgcmV0dXJuZWQgYnkgYEN1c3RvbUVsZW1lbnQuZ2V0VGFnKClgIGlzIHVzZWQgYXMgdGhlIHRhZy5cbiAqXG4gKiBAcGFyYW0ge0N1c3RvbUVsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjcuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEB0aHJvd3Mge0RPTUV4Y2VwdGlvbn0gRmFpbGVkIHRvIGV4ZWN1dGUgJ2RlZmluZScgb24gJ0N1c3RvbUVsZW1lbnRSZWdpc3RyeSc6IGlzIG5vdCBhIHZhbGlkIGN1c3RvbSBlbGVtZW50IG5hbWVcbiAqL1xuZnVuY3Rpb24gcmVnaXN0ZXJDdXN0b21FbGVtZW50KGVsZW1lbnQpIHtcblx0dmFsaWRhdGVGdW5jdGlvbihlbGVtZW50KTtcblx0Y29uc3QgY3VzdG9tRWxlbWVudHMgPSBnZXRHbG9iYWxPYmplY3QoXCJjdXN0b21FbGVtZW50c1wiKTtcblx0aWYgKGN1c3RvbUVsZW1lbnRzID09PSB1bmRlZmluZWQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJjdXN0b21FbGVtZW50cyBpcyBub3Qgc3VwcG9ydGVkLlwiKTtcblx0fVxuXG5cdGNvbnN0IHRhZyA9IGVsZW1lbnQ/LmdldFRhZygpO1xuXHRpZiAoIWlzU3RyaW5nKHRhZykgfHwgdGFnID09PSBcIlwiKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidGFnIGlzIG5vdCBzZXQuXCIpO1xuXHR9XG5cblx0aWYgKGN1c3RvbUVsZW1lbnRzLmdldCh0YWcpICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRjdXN0b21FbGVtZW50cy5kZWZpbmUodGFnLCBlbGVtZW50KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBnZXRHbG9iYWwgfSBmcm9tIFwiLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuXG5leHBvcnQgeyByYW5kb20gfTtcblxuLyoqXG4gKiB0aGlzIGZ1bmN0aW9uIHVzZXMgY3J5cHQgYW5kIHJldHVybnMgYSByYW5kb20gbnVtYmVyLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBtaW4gc3RhcnRpbmcgdmFsdWUgb2YgdGhlIGRlZmluaXRpb24gc2V0IChkZWZhdWx0IGlzIDApXG4gKiBAcGFyYW0ge251bWJlcn0gbWF4IGVuZCB2YWx1ZSBvZiB0aGUgZGVmaW5pdGlvbiBzZXQgKGRlZmF1bHQgaXMgMTAwMDAwMDAwMClcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqIEB0aHJvd3Mge0Vycm9yfSBtaXNzaW5nIGNyeXB0XG4gKiBAdGhyb3dzIHtFcnJvcn0gd2UgY2Fubm90IGdlbmVyYXRlIG51bWJlcnMgbGFyZ2VyIHRoYW4gNTMgYml0cy5cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgZGlzdGFuY2UgaXMgdG9vIHNtYWxsIHRvIGNyZWF0ZSBhIHJhbmRvbSBudW1iZXIuXG5cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICovXG5mdW5jdGlvbiByYW5kb20obWluLCBtYXgpIHtcblx0aWYgKG1pbiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0bWluID0gMDtcblx0fVxuXHRpZiAobWF4ID09PSB1bmRlZmluZWQpIHtcblx0XHRtYXggPSBNQVg7XG5cdH1cblxuXHRpZiAobWF4IDwgbWluKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibWF4IG11c3QgYmUgZ3JlYXRlciB0aGFuIG1pblwiKTtcblx0fVxuXG5cdHJldHVybiBNYXRoLnJvdW5kKGNyZWF0ZShtaW4sIG1heCkpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5jb25zdCBNQVggPSAxMDAwMDAwMDAwO1xuXG5NYXRoLmxvZzIgPVxuXHRNYXRoLmxvZzIgfHxcblx0ZnVuY3Rpb24gKG4pIHtcblx0XHRyZXR1cm4gTWF0aC5sb2cobikgLyBNYXRoLmxvZygyKTtcblx0fTtcblxuLyoqXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IG1pblxuICogQHBhcmFtIHtudW1iZXJ9IG1heFxuICogQHJldHVybiB7bnVtYmVyfVxuICogQHByaXZhdGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBtaXNzaW5nIGNyeXB0XG4gKiBAdGhyb3dzIHtFcnJvcn0gd2UgY2Fubm90IGdlbmVyYXRlIG51bWJlcnMgbGFyZ2VyIHRoYW4gNTMgYml0cy5cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgZGlzdGFuY2UgaXMgdG9vIHNtYWxsIHRvIGNyZWF0ZSBhIHJhbmRvbSBudW1iZXIuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZShtaW4sIG1heCkge1xuXHRjb25zdCBnbG9iYWxSZWZlcmVuY2UgPSBnZXRHbG9iYWwoKTtcblxuXHRjb25zdCBjcnlwdCA9XG5cdFx0Z2xvYmFsUmVmZXJlbmNlPy5bXCJjcnlwdG9cIl0gfHxcblx0XHRnbG9iYWxSZWZlcmVuY2U/LltcIm1zQ3J5cHRvXCJdIHx8XG5cdFx0Z2xvYmFsUmVmZXJlbmNlPy5bXCJjcnlwdG9cIl0gfHxcblx0XHR1bmRlZmluZWQ7XG5cblx0aWYgKHR5cGVvZiBjcnlwdCA9PT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm1pc3NpbmcgY3J5cHRcIik7XG5cdH1cblxuXHRsZXQgcnZhbCA9IDA7XG5cdGNvbnN0IHJhbmdlID0gbWF4IC0gbWluO1xuXHRpZiAocmFuZ2UgPCAyKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIGRpc3RhbmNlIGlzIHRvbyBzbWFsbCB0byBjcmVhdGUgYSByYW5kb20gbnVtYmVyLlwiKTtcblx0fVxuXG5cdGNvbnN0IGJpdHNOZWVkZWQgPSBNYXRoLmNlaWwoTWF0aC5sb2cyKHJhbmdlKSk7XG5cdGlmIChiaXRzTmVlZGVkID4gNTMpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ3ZSBjYW5ub3QgZ2VuZXJhdGUgbnVtYmVycyBsYXJnZXIgdGhhbiA1MyBiaXRzLlwiKTtcblx0fVxuXHRjb25zdCBieXRlc05lZWRlZCA9IE1hdGguY2VpbChiaXRzTmVlZGVkIC8gOCk7XG5cdGNvbnN0IG1hc2sgPSBNYXRoLnBvdygyLCBiaXRzTmVlZGVkKSAtIDE7XG5cblx0Y29uc3QgYnl0ZUFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZXNOZWVkZWQpO1xuXHRjcnlwdC5nZXRSYW5kb21WYWx1ZXMoYnl0ZUFycmF5KTtcblxuXHRsZXQgcCA9IChieXRlc05lZWRlZCAtIDEpICogODtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBieXRlc05lZWRlZDsgaSsrKSB7XG5cdFx0cnZhbCArPSBieXRlQXJyYXlbaV0gKiBNYXRoLnBvdygyLCBwKTtcblx0XHRwIC09IDg7XG5cdH1cblxuXHRydmFsID0gcnZhbCAmIG1hc2s7XG5cblx0aWYgKHJ2YWwgPj0gcmFuZ2UpIHtcblx0XHRyZXR1cm4gY3JlYXRlKG1pbiwgbWF4KTtcblx0fVxuXG5cdGlmIChydmFsIDwgbWluKSB7XG5cdFx0cnZhbCArPSBtaW47XG5cdH1cblxuXHRyZXR1cm4gcnZhbDtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IGlzSW50ZWdlciB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlRnVuY3Rpb24sIHZhbGlkYXRlSW50ZWdlciB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgRGVhZE1hbnNTd2l0Y2ggfTtcblxuLyoqXG4gKiBUaGUgZGVhZCBtYW4ncyBzd2l0Y2ggYWxsb3dzIHNldHRpbmcgYSB0aW1lciB3aGljaCBjYW4gYmUgcmVzZXQgYWdhaW5cbiAqIGFuZCBhZ2FpbiB3aXRoaW4gYSBkZWZpbmVkIHBlcmlvZCBvZiB0aW1lLlxuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlL3V0aWwvZGVhZG1hbnNzd2l0Y2gvc2ltcGxlLyBTaW1wbGUgZXhhbXBsZVxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjkuMFxuICogQHN1bW1hcnkgQ2xhc3MgdG8gYmUgYWJsZSB0byBleGVjdXRlIGZ1bmN0aW9uIGNoYWluc1xuICovXG5jbGFzcyBEZWFkTWFuc1N3aXRjaCBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICogQ3JlYXRlIG5ldyBkZWFkIG1hbidzIHN3aXRjaFxuXHQgKlxuXHQgKiBAcGFyYW0ge0ludGVnZXJ9IGRlbGF5XG5cdCAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG5cdCAqIEB0aHJvdyB7VHlwZUVycm9yfSB0aGUgYXJndW1lbnRzIG11c3QgYmUgZWl0aGVyIGludGVnZXIgb3IgZnVuY3Rpb25zXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGludGVnZXJcblx0ICovXG5cdGNvbnN0cnVjdG9yKGRlbGF5LCBjYWxsYmFjaykge1xuXHRcdHN1cGVyKCk7XG5cblx0XHRpbml0LmNhbGwodGhpcywgdmFsaWRhdGVJbnRlZ2VyKGRlbGF5KSwgdmFsaWRhdGVGdW5jdGlvbihjYWxsYmFjaykpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSBkZWxheVxuXHQgKiBAcmV0dXJucyB7RGVhZE1hbnNTd2l0Y2h9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBoYXMgYWxyZWFkeSBydW5cblx0ICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGFyZ3VtZW50XG5cdCAqL1xuXHR0b3VjaChkZWxheSkge1xuXHRcdGlmICh0aGlzW2ludGVybmFsU3ltYm9sXVtcImlzQWxyZWFkeVJ1blwiXSA9PT0gdHJ1ZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaGFzIGFscmVhZHkgcnVuXCIpO1xuXHRcdH1cblxuXHRcdGlmIChpc0ludGVnZXIoZGVsYXkpKSB7XG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXVtcImRlbGF5XCJdID0gZGVsYXk7XG5cdFx0fSBlbHNlIGlmIChkZWxheSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCBhcmd1bWVudFwiKTtcblx0XHR9XG5cblx0XHRjbGVhclRpbWVvdXQodGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJ0aW1lclwiXSk7XG5cdFx0aW5pdENhbGxiYWNrLmNhbGwodGhpcyk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gaGFzIGFscmVhZHkgcnVuXG5cdCAqIEByZXR1cm5zIHtEZWFkTWFuc1N3aXRjaH1cblx0ICovXG5cdGRlZnVzZSgpIHtcblx0XHRpZiAodGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJpc0FscmVhZHlSdW5cIl0gPT09IHRydWUpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImhhcyBhbHJlYWR5IHJ1blwiKTtcblx0XHR9XG5cblx0XHRjbGVhclRpbWVvdXQodGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJ0aW1lclwiXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpbml0Q2FsbGJhY2soKSB7XG5cdHRoaXNbaW50ZXJuYWxTeW1ib2xdW1widGltZXJcIl0gPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXVtcImlzQWxyZWFkeVJ1blwiXSA9IHRydWU7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJjYWxsYmFja1wiXSgpO1xuXHR9LCB0aGlzW2ludGVybmFsU3ltYm9sXVtcImRlbGF5XCJdKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtpbnRlZ2VyfSBkZWxheVxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqL1xuZnVuY3Rpb24gaW5pdChkZWxheSwgY2FsbGJhY2spIHtcblx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSB7XG5cdFx0Y2FsbGJhY2ssXG5cdFx0ZGVsYXksXG5cdFx0aXNBbHJlYWR5UnVuOiBmYWxzZSxcblx0XHR0aW1lcjogdW5kZWZpbmVkLFxuXHR9O1xuXG5cdGluaXRDYWxsYmFjay5jYWxsKHRoaXMpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbEZ1bmN0aW9uIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlRnVuY3Rpb24sIHZhbGlkYXRlSW50ZWdlciB9IGZyb20gXCIuLi8uLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgQ2FsbGJhY2sgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBDYWxsYmFjayB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuXHQgKiBAcGFyYW0ge2ludHx1bmRlZmluZWR9IHRpbWVcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBmdW5jdGlvblxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnRlZ2VyXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihjYWxsYmFjaywgdGltZSkge1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0ge1xuXHRcdFx0Y2FsbGJhY2s6IHZhbGlkYXRlRnVuY3Rpb24oY2FsbGJhY2spLFxuXHRcdFx0dGltZTogdmFsaWRhdGVJbnRlZ2VyKHRpbWUgPz8gMCksXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0gIHsqfSBkYXRhXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRydW4oZGF0YSkge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRnZXRHbG9iYWxGdW5jdGlvbihcInNldFRpbWVvdXRcIikoKCkgPT4ge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdHJlc29sdmUodGhpc1tpbnRlcm5hbFN5bWJvbF0uY2FsbGJhY2soZGF0YSkpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0cmVqZWN0KGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LCB0aGlzW2ludGVybmFsU3ltYm9sXS50aW1lKTtcblx0XHR9KTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IGlzRnVuY3Rpb24sIGlzSW50ZWdlciB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IFF1ZXVlIH0gZnJvbSBcIi4uL3R5cGVzL3F1ZXVlLm1qc1wiO1xuaW1wb3J0IHsgQ2FsbGJhY2sgfSBmcm9tIFwiLi9wcm9jZXNzaW5nL2NhbGxiYWNrLm1qc1wiO1xuXG5leHBvcnQgeyBQcm9jZXNzaW5nIH07XG5cbi8qKlxuICogVGhpcyBjbGFzcyBhbGxvd3MgZXhlY3V0aW5nIHNldmVyYWwgZnVuY3Rpb25zIGluIG9yZGVyLlxuICpcbiAqIEZ1bmN0aW9ucyBhbmQgdGltZW91dHMgY2FuIGJlIHBhc3NlZC4gSWYgYSB0aW1lb3V0IGlzIHBhc3NlZCwgaXQgYXBwbGllcyB0byBhbGwgZnVydGhlciBmdW5jdGlvbnMuXG4gKiBJbiB0aGUgZXhhbXBsZVxuICpcbiAqIGB0aW1lb3V0MSwgZnVuY3Rpb24xLCBmdW5jdGlvbjIsIGZ1bmN0aW9uMywgdGltZW91dDIsIGZ1bmN0aW9uNGBcbiAqXG4gKiB0aGUgdGltZW91dDEgaXMgdmFsaWQgZm9yIHRoZSBmdW5jdGlvbnMgMSwgMiBhbmQgMyBhbmQgdGhlIHRpbWVvdXQyIGZvciB0aGUgZnVuY3Rpb240LlxuICpcbiAqIFNvIHRoZSBleGVjdXRpb24gdGltZSBpcyB0aW1lb3V0MSt0aW1lb3V0MSt0aW1lb3V0MSt0aW1lb3V0MlxuICpcbiAqIFRoZSByZXN1bHQgb2YgYHJ1bigpYCBpcyBhIHByb21pc2UuXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2xpYnJhcmllcy91dGlsL3Byb2Nlc3Npbmcvc2ltcGxlLyBBIHNpbXBsZSBleGFtcGxlXG4gKlxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjEuMFxuICogQHN1bW1hcnkgQ2xhc3MgdG8gYmUgYWJsZSB0byBleGVjdXRlIGZ1bmN0aW9uIGNoYWluc1xuICovXG5jbGFzcyBQcm9jZXNzaW5nIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKiBDcmVhdGUgbmV3IFByb2Nlc3Npbmdcblx0ICpcblx0ICogRnVuY3Rpb25zIGFuZCB0aW1lb3V0cyBjYW4gYmUgcGFzc2VkLiBJZiBhIHRpbWVvdXQgaXMgcGFzc2VkLCBpdCBhcHBsaWVzIHRvIGFsbCBmdXJ0aGVyIGZ1bmN0aW9ucy5cblx0ICogSW4gdGhlIGV4YW1wbGVcblx0ICpcblx0ICogYHRpbWVvdXQxLCBmdW5jdGlvbjEsIGZ1bmN0aW9uMiwgZnVuY3Rpb24zLCB0aW1lb3V0MiwgZnVuY3Rpb240YFxuXHQgKlxuXHQgKiB0aGUgdGltZW91dDEgaXMgdmFsaWQgZm9yIHRoZSBmdW5jdGlvbnMgMSwgMiBhbmQgMyBhbmQgdGhlIHRpbWVvdXQyIGZvciB0aGUgZnVuY3Rpb240LlxuXHQgKlxuXHQgKiBTbyB0aGUgZXhlY3V0aW9uIHRpbWUgaXMgdGltZW91dDErdGltZW91dDErdGltZW91dDErdGltZW91dDJcblx0ICpcblx0ICogQHRocm93IHtUeXBlRXJyb3J9IHRoZSBhcmd1bWVudHMgbXVzdCBiZSBlaXRoZXIgaW50ZWdlciBvciBmdW5jdGlvbnNcblx0ICogQHBhcmFtIHsuLi4oaW50fGZ1bmN0aW9uKX0gYXJnc1xuXHQgKi9cblx0Y29uc3RydWN0b3IoLi4uYXJncykge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IHtcblx0XHRcdHF1ZXVlOiBuZXcgUXVldWUoKSxcblx0XHR9O1xuXG5cdFx0bGV0IHRpbWUgPSAwO1xuXG5cdFx0aWYgKHR5cGVvZiBhcmdzICE9PSBcIm9iamVjdFwiIHx8IGFyZ3NbMF0gPT09IG51bGwpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ0aGUgYXJndW1lbnRzIG11c3QgYmUgZWl0aGVyIGludGVnZXIgb3IgZnVuY3Rpb25zXCIpO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgWywgYXJnXSBvZiBPYmplY3QuZW50cmllcyhhcmdzKSkge1xuXHRcdFx0aWYgKGlzSW50ZWdlcihhcmcpICYmIGFyZyA+PSAwKSB7XG5cdFx0XHRcdHRpbWUgPSBhcmc7XG5cdFx0XHR9IGVsc2UgaWYgKGlzRnVuY3Rpb24oYXJnKSkge1xuXHRcdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5xdWV1ZS5hZGQobmV3IENhbGxiYWNrKGFyZywgdGltZSkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcblx0XHRcdFx0XHRcInRoZSBhcmd1bWVudHMgbXVzdCBiZSBlaXRoZXIgaW50ZWdlciBvciBmdW5jdGlvbnNcIixcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQWRkcyBhIGZ1bmN0aW9uIHdpdGggdGhlIGRlc2lyZWQgdGltZW91dFxuXHQgKiBJZiBubyB0aW1lb3V0IGlzIHNwZWNpZmllZCwgdGhlIHRpbWVvdXQgb2YgdGhlIHByZXZpb3VzIGZ1bmN0aW9uIGlzIHVzZWQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7aW50fHVuZGVmaW5lZH0gdGltZVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIGZ1bmN0aW9uXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGludGVnZXJcblx0ICovXG5cdGFkZChjYWxsYmFjaywgdGltZSkge1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLnF1ZXVlLmFkZChuZXcgQ2FsbGJhY2soY2FsbGJhY2ssIHRpbWUpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB0aGUgZGVmaW5lZCBmdW5jdGlvbnMgaW4gb3JkZXIuXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gZGF0YVxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0cnVuKGRhdGEpIHtcblx0XHRpZiAodGhpc1tpbnRlcm5hbFN5bWJvbF0ucXVldWUuaXNFbXB0eSgpKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGRhdGEpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGNhbGxiYWNrID0gdGhpc1tpbnRlcm5hbFN5bWJvbF0ucXVldWUucG9sbCgpO1xuXG5cdFx0aWYgKGNhbGxiYWNrID09PSBudWxsIHx8IGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoZGF0YSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNhbGxiYWNrLnJ1bihkYXRhKS50aGVuKChyZXN1bHQpID0+IHtcblx0XHRcdHJldHVybiB0aGlzLnJ1bihyZXN1bHQpO1xuXHRcdH0pO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgQVRUUklCVVRFX1BSRUZJWCB9IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG4vKipcbiAqIEBzaW5jZSAxLjAuMFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgU1RZTEVfRElTUExBWV9NT0RFX0JMT0NLID0gXCJibG9ja1wiO1xuXG4vKipcbiAqIFRoaXMgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItdXJsYCBjYW4gYmUgdXNlZCB0byBwYXNzIGEgVVJMIHRvIHRoZSBjb250cm9sLlxuICpcbiAqIEBzaW5jZSAxLjAuMFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0ZPUk1fVVJMID0gYCR7QVRUUklCVVRFX1BSRUZJWH11cmxgO1xuXG4vKipcbiAqIFRoaXMgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItcmVsb2FkYCBjYW4gYmUgdXNlZCB0byBjb250cm9sIHRoZSByZWxvYWQuXG4gKlxuICogdmFsaWQgdmFsdWVzOiBvbnNob3dcbiAqXG4gKiBAc2luY2UgMS4xMS4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfRk9STV9SRUxPQUQgPSBgJHtBVFRSSUJVVEVfUFJFRklYfXJlbG9hZGA7XG5cbi8qKlxuICogYGRhdGEtbW9uc3Rlci1pbnRlbmRgXG4gKlxuICogQHNpbmNlIDEuOS4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfVklTSUJJTElUWSA9IGAke0FUVFJJQlVURV9QUkVGSVh9dmlzaWJpbGl0eWA7XG4vKipcbiAqIGBkYXRhLW1vbnN0ZXItaW50ZW5kYFxuICpcbiAqIEBzaW5jZSAxLjkuMFxuICogQGRlcHJlY2F0ZWQgc2luY2UgMy4zMi4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfQlVUVE9OX0NMQVNTID0gYCR7QVRUUklCVVRFX1BSRUZJWH1idXR0b24tY2xhc3NgO1xuXG4vKipcbiAqIGBkYXRhLW1vbnN0ZXItaW50ZW5kYFxuICpcbiAqIEBzaW5jZSAxLjguMFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0lOVEVORCA9IGAke0FUVFJJQlVURV9QUkVGSVh9aW50ZW5kYDtcblxuLyoqXG4gKiBgZGF0YS1tb25zdGVyLWhhcy1jaGlsZHJlbmBcbiAqXG4gKiBAc2luY2UgMS44LjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9IQVNfQ0hJTERSRU4gPSBgJHtBVFRSSUJVVEVfUFJFRklYfWhhcy1jaGlsZHJlbmA7XG5cbi8qKlxuICogVGhpcyBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1kYXRhc291cmNlYCBjYW4gYmUgdXNlZCB0byBwYXNzIGEgZGF0YXNvdXJjZS5cbiAqXG4gKiBAc2luY2UgMS42LjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9GT1JNX0RBVEFTT1VSQ0UgPSBgJHtBVFRSSUJVVEVfUFJFRklYfWRhdGFzb3VyY2VgO1xuXG4vKipcbiAqIFRoaXMgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItZGF0YXNvdXJjZS1hcmd1bWVudHNgIGNhbiBiZSB1c2VkIHRvIHBhc3MgYXJndW1lbnRzLlxuICpcbiAqIEBzaW5jZSAxLjYuMFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0ZPUk1fREFUQVNPVVJDRV9BUkdVTUVOVFMgPSBgJHtBVFRSSUJVVEVfUFJFRklYfWRhdGFzb3VyY2UtYXJndW1lbnRzYDtcblxuLyoqXG4gKiBUaGlzIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLWJ1dHRvbi1sYWJlbGAgY2FuIGJlIHVzZWQgdG8gcGFzcyBsYWJlbHMuXG4gKlxuICogQHNpbmNlIDEuNi4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfQlVUVE9OX0xBQkVMID0gYCR7QVRUUklCVVRFX1BSRUZJWH1idXR0b24tbGFiZWxgO1xuXG5leHBvcnQge1xuXHRBVFRSSUJVVEVfQlVUVE9OX0xBQkVMLFxuXHRTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0ssXG5cdEFUVFJJQlVURV9GT1JNX1VSTCxcblx0QVRUUklCVVRFX0ZPUk1fREFUQVNPVVJDRSxcblx0QVRUUklCVVRFX0ZPUk1fREFUQVNPVVJDRV9BUkdVTUVOVFMsXG5cdEFUVFJJQlVURV9JTlRFTkQsXG5cdEFUVFJJQlVURV9WSVNJQklMSVRZLFxuXHRBVFRSSUJVVEVfRk9STV9SRUxPQUQsXG5cdEFUVFJJQlVURV9IQVNfQ0hJTERSRU4sXG5cdEFUVFJJQlVURV9CVVRUT05fQ0xBU1MsXG59O1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywgMjAyNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IFRhYnNTdHlsZVNoZWV0IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBUYWJzU3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG5cdFRhYnNTdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIHRhYnMgeyBcbjphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1mb250LWZhbWlseTotYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCxcXFwiUXVpY2tzYW5kXFxcIixcXFwiU2Vnb2UgVUlcXFwiLFxcXCJSb2JvdG9cXFwiLFxcXCJPeHlnZW5cXFwiLFxcXCJVYnVudHVcXFwiLFxcXCJDYW50YXJlbGxcXFwiLFxcXCJGaXJhIFNhbnNcXFwiLFxcXCJEcm9pZCBTYW5zXFxcIixcXFwiSGVsdmV0aWNhIE5ldWVcXFwiLEFyaWFsLHNhbnMtc2VyaWYsXFxcIkFwcGxlIENvbG9yIEVtb2ppXFxcIixcXFwiU2Vnb2UgVUkgRW1vamlcXFwiLFxcXCJTZWdvZSBVSSBTeW1ib2xcXFwiOy0tbW9uc3Rlci1mb250LWZhbWlseS1tb25vc3BhY2U6XFxcIkNvbnNvbGFzXFxcIixcXFwiQ291cmllciBOZXdcXFwiLFxcXCJSb2JvdG8gTW9ub1xcXCIsXFxcIlNvdXJjZSBDb2RlIFByb1xcXCIsXFxcIkZpcmEgTW9ub1xcXCIsbW9ub3NwYWNlOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNil9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNik7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTIpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNik7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTIpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi00KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNik7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0zKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMik7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0yKTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNCk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi01KTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTMpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNCk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS02KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMyk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0yKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNCk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTUpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTYpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMTojODMzYWI0Oy0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0yOiNmZDFkMWQ7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTM6I2ZjYjA0NTstLW1vbnN0ZXItYm94LXNoYWRvdy0xOm5vbmU7LS1tb25zdGVyLWJveC1zaGFkb3ctMjotMXB4IDFweCAxMHB4IDFweCBoc2xhKDAsMCUsNzYlLC42MSk7LS1tb25zdGVyLXRleHQtc2hhZG93Om5vbmU7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC0xKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTYpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWhvdmVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtNik7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC0yKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItd2lkdGg6MnB4Oy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1zdHlsZTpzb2xpZDstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItcmFkaXVzOjA7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS01KTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItdGhlbWUtb24tY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItdGhlbWUtb24tYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi01KTstLW1vbnN0ZXItdGhlbWUtb2ZmLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtb2ZmLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci10aGVtZS1vbi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLXRoZW1lLW9uLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtb2ZmLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtb2ZmLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS01KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWJvcmRlci1zdHlsZTpzb2xpZDstLW1vbnN0ZXItYm9yZGVyLXdpZHRoOjNweDstLW1vbnN0ZXItYm9yZGVyLXJhZGl1czowOy0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZTotNHB4Oy0tbW9uc3Rlci16LWluZGV4LWRlZmF1bHQ6MDstLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lOjEwOy0tbW9uc3Rlci16LWluZGV4LWRyb3Bkb3duOjIwMDstLW1vbnN0ZXItei1pbmRleC1kcm9wZG93bi1vdmVybGF5OjIxMDstLW1vbnN0ZXItei1pbmRleC1zdGlja3k6MzAwOy0tbW9uc3Rlci16LWluZGV4LXN0aWNreS1vdmVybGF5OjMxMDstLW1vbnN0ZXItei1pbmRleC1maXhlZDo0MDA7LS1tb25zdGVyLXotaW5kZXgtZml4ZWQtb3ZlcmxheTo0MTA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtYmFja2Ryb3A6NTAwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLWJhY2tkcm9wLW92ZXJsYXk6NTEwOy0tbW9uc3Rlci16LWluZGV4LW9mZmNhbnZhczo2MDA7LS1tb25zdGVyLXotaW5kZXgtb2ZmY2FudmFzLW92ZXJsYXk6NjEwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsOjcwMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1vdmVybGF5OjcxMDstLW1vbnN0ZXItei1pbmRleC1wb3BvdmVyOjgwMDstLW1vbnN0ZXItei1pbmRleC1wb3BvdmVyLW92ZXJsYXk6ODEwOy0tbW9uc3Rlci16LWluZGV4LXRvb2x0aXA6ODAwOy0tbW9uc3Rlci16LWluZGV4LXRvb2x0aXAtb3ZlcmxheTo5MTA7LS1tb25zdGVyLXNwYWNlLTA6MDstLW1vbnN0ZXItc3BhY2UtMToycHg7LS1tb25zdGVyLXNwYWNlLTI6NHB4Oy0tbW9uc3Rlci1zcGFjZS0zOjZweDstLW1vbnN0ZXItc3BhY2UtNDoxMHB4Oy0tbW9uc3Rlci1zcGFjZS01OjE2cHg7LS1tb25zdGVyLXNwYWNlLTY6MjZweDstLW1vbnN0ZXItc3BhY2UtNzo0MnB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTA6NDgwcHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtNDo0ODBweDstLW1vbnN0ZXItYnJlYWtwb2ludC03Ojc2OHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTk6OTkycHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtMTI6MTIwMHB4Oy0tbW9uc3Rlci1kcmFnZ2VyLXdpZHRoOjJweDstLW1vbnN0ZXItZHJhZ2dlci1oYW5kbGUtd2lkdGg6NHB4Oy0tbW9uc3Rlci1kcmFnZ2VyLWhhbmRsZS1oZWlnaHQ6NTBweH0uYmxvY2t7ZGlzcGxheTpibG9ja30uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmdyaWR7ZGlzcGxheTpncmlkfS5pbmxpbmUtZ3JpZHtkaXNwbGF5OmlubGluZS1ncmlkfS5mbGV4e2Rpc3BsYXk6ZmxleH0uaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleH0uaGlkZGVuLC5oaWRlLC5ub25le2Rpc3BsYXk6bm9uZX0udmlzaWJsZXt2aXNpYmlsaXR5OnZpc2libGV9LmludmlzaWJsZXt2aXNpYmlsaXR5OmhpZGRlbn0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMywubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLTB7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1zdHlsZTpub25lO2JvcmRlci13aWR0aDowfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0yLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMywubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0yLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0zLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTEpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTEpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMSl9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0xKX0ubW9uc3Rlci10aGVtZS1lcnJvci0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTEpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTEpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtMXtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xKX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTEpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMSl9Lm1vbnN0ZXItY29sb3ItZXJyb3ItMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0xKX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS1kaXNhYmxlZC0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yKX0ubW9uc3Rlci10aGVtZS1zZWNvbmRhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLXRoZW1lLXRlcnRpYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItdGhlbWUtZGVzdHJ1Y3RpdmUtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yKX0ubW9uc3Rlci10aGVtZS1zdWNjZXNzLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTIpfS5tb25zdGVyLXRoZW1lLXdhcm5pbmctMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMil9Lm1vbnN0ZXItdGhlbWUtZXJyb3ItMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0yKX0ubW9uc3Rlci10aGVtZS1zZWxlY3Rpb24tMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTIpfS5tb25zdGVyLWJvcmRlci1jb2xvci0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWJvcmRlci0yKX0ubW9uc3Rlci1jb2xvci1uZXV0cmFsLTJ7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWNvbG9yLXByaW1hcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMil9Lm1vbnN0ZXItY29sb3Itc3VjY2Vzcy0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yKX0ubW9uc3Rlci1jb2xvci13YXJuaW5nLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTIpfS5tb25zdGVyLWNvbG9yLWVycm9yLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMil9Lm1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktZGlzYWJsZWQtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMyl9Lm1vbnN0ZXItdGhlbWUtc2Vjb25kYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci10aGVtZS10ZXJ0aWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLXRoZW1lLWRlc3RydWN0aXZlLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMyl9Lm1vbnN0ZXItdGhlbWUtc3VjY2Vzcy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zKX0ubW9uc3Rlci10aGVtZS13YXJuaW5nLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTMpfS5tb25zdGVyLXRoZW1lLWVycm9yLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMyl9Lm1vbnN0ZXItdGhlbWUtc2VsZWN0aW9uLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKX0ubW9uc3Rlci1ib3JkZXItY29sb3ItM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ib3JkZXItMyl9Lm1vbnN0ZXItY29sb3ItbmV1dHJhbC0ze2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1jb2xvci1wcmltYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItY29sb3ItdGVydGlhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTMpfS5tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMyl9Lm1vbnN0ZXItY29sb3Itd2FybmluZy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0zKX0ubW9uc3Rlci1jb2xvci1lcnJvci0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTMpfS5tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNCl9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy00KX0ubW9uc3Rlci10aGVtZS1lcnJvci00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTQpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNCl9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTQpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtNHtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00KX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNCl9Lm1vbnN0ZXItY29sb3ItZXJyb3ItNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci00KX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQpfS5tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29udGFpbmVyLTEsLm1vbnN0ZXItdGhlbWUtY29udHJvbC1yb3ctMXtib3JkZXI6MXB4IHNvbGlkIHZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItY29sb3IpfS5tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29udGFpbmVyLTEsLm1vbnN0ZXItdGhlbWUtY29udHJvbC1lbGVtZW50LC5tb25zdGVyLXRoZW1lLWNvbnRyb2wtcm93LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmctY29sb3IpO2NvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1jb2xvcil9Lm1vbnN0ZXItdGhlbWUtY29udHJvbC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJnLWNvbG9yKX0ubW9uc3Rlci10aGVtZS1iYWNrZ3JvdW5kLWluaGVyaXR7YmFja2dyb3VuZC1jb2xvcjppbmhlcml0IWltcG9ydGFudH0ubW9uc3Rlci10aGVtZS1vbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtb24tYmctY29sb3IpO2NvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtb24tY29sb3IpfS5tb25zdGVyLXRoZW1lLW9mZntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtb2ZmLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLW9mZi1jb2xvcil9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPXBvcHBlcl17YmFja2dyb3VuZDp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7ZGlzcGxheTpub25lO3BhZGRpbmc6MS4xZW07ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtbW9kYWwpfVtkYXRhLXBvcHBlci1hcnJvd10sW2RhdGEtcG9wcGVyLWFycm93XTpiZWZvcmV7YmFja2dyb3VuZDppbmhlcml0O2hlaWdodDpjYWxjKG1heCh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSwgLTEqdmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkpKjIpO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOmNhbGMobWF4KHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpLCAtMSp2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSkqMil9W2RhdGEtcG9wcGVyLWFycm93XXt2aXNpYmlsaXR5OmhpZGRlbn1bZGF0YS1wb3BwZXItYXJyb3ddOmJlZm9yZXtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29udGVudDpcXFwiXFxcIjt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKTt2aXNpYmlsaXR5OnZpc2libGV9ZGl2W2RhdGEtcG9wcGVyLXBsYWNlbWVudF49dG9wXT5bZGF0YS1wb3BwZXItYXJyb3dde2JvdHRvbTpjYWxjKHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpIC0gdmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpLzIpfWRpdltkYXRhLXBvcHBlci1wbGFjZW1lbnRePXRvcF0+W2RhdGEtcG9wcGVyLWFycm93XTpiZWZvcmV7Ym9yZGVyLWJvdHRvbTp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkgdmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItbGVmdDp0cmFuc3BhcmVudDtib3JkZXItcmlnaHQ6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpIHZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKSB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXRvcDp0cmFuc3BhcmVudH1kaXZbZGF0YS1wb3BwZXItcGxhY2VtZW50Xj1ib3R0b21dPltkYXRhLXBvcHBlci1hcnJvd117dG9wOmNhbGModmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkgLSB2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkpfWRpdltkYXRhLXBvcHBlci1wbGFjZW1lbnRePWJvdHRvbV0+W2RhdGEtcG9wcGVyLWFycm93XTpiZWZvcmV7Ym9yZGVyLWJvdHRvbTp0cmFuc3BhcmVudDtib3JkZXItbGVmdDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkgdmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmlnaHQ6dHJhbnNwYXJlbnQ7Ym9yZGVyLXRvcDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkgdmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX1kaXZbZGF0YS1wb3BwZXItcGxhY2VtZW50Xj1sZWZ0XT5bZGF0YS1wb3BwZXItYXJyb3dde3JpZ2h0OmNhbGModmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkgLSB2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkpfWRpdltkYXRhLXBvcHBlci1wbGFjZW1lbnRePWxlZnRdPltkYXRhLXBvcHBlci1hcnJvd106YmVmb3Jle2JvcmRlci1ib3R0b206dHJhbnNwYXJlbnQ7Ym9yZGVyLWxlZnQ6dHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0OnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSB2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci10b3A6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpIHZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKSB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9ZGl2W2RhdGEtcG9wcGVyLXBsYWNlbWVudF49cmlnaHRdPltkYXRhLXBvcHBlci1hcnJvd117bGVmdDpjYWxjKHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpIC0gdmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpLzIpfWRpdltkYXRhLXBvcHBlci1wbGFjZW1lbnRePXJpZ2h0XT5bZGF0YS1wb3BwZXItYXJyb3ddOmJlZm9yZXtib3JkZXItYm90dG9tOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSB2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1sZWZ0OnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSB2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yaWdodDp0cmFuc3BhcmVudDtib3JkZXItdG9wOnRyYW5zcGFyZW50fVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3V0bGluZTpub25lO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXh7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9Omhvc3R7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6YmxvY2t9Lm1vbnN0ZXItYmFkZ2UtcHJpbWFyeXtwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2UtcHJpbWFyeSwubW9uc3Rlci1iYWRnZS1wcmltYXJ5LXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLXByaW1hcnktcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS1zZWNvbmRhcnl7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLXNlY29uZGFyeSwubW9uc3Rlci1iYWRnZS1zZWNvbmRhcnktcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTMpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLXNlY29uZGFyeS1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLXRlcnRpYXJ5e3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS10ZXJ0aWFyeSwubW9uc3Rlci1iYWRnZS10ZXJ0aWFyeS1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTMpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLXRlcnRpYXJ5LXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2UtZGVzdHJ1Y3RpdmV7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLWRlc3RydWN0aXZlLC5tb25zdGVyLWJhZGdlLWRlc3RydWN0aXZlLXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTEpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMSk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2UtZGVzdHJ1Y3RpdmUtcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS1zdWNjZXNze3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS1zdWNjZXNzLC5tb25zdGVyLWJhZGdlLXN1Y2Nlc3MtcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMSk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2Utc3VjY2Vzcy1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLXdhcm5pbmd7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLXdhcm5pbmcsLm1vbnN0ZXItYmFkZ2Utd2FybmluZy1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTEpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0xKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS13YXJuaW5nLXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2UtZXJyb3J7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLWVycm9yLC5tb25zdGVyLWJhZGdlLWVycm9yLXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTEpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMSk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2UtZXJyb3ItcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX1bZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBidXR0b24uaGlkZGVue2Rpc3BsYXk6bm9uZX1uYXZbZGF0YS1tb25zdGVyLXJvbGU9bmF2XXthbGlnbi1pdGVtczpmbGV4LWVuZDtib3JkZXItYm90dG9tLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItYm90dG9tLXdpZHRoOnRoaW47Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOm5vd3JhcDttYXJnaW4tYm90dG9tOi43NXJlbTtvdmVyZmxvdzpoaWRkZW59W2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gYnV0dG9uIC5yZW1vdmUtdGFiey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lO2FwcGVhcmFuY2U6bm9uZTtiYWNrZ3JvdW5kLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J000LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMEw4IDcuMjkzbDIuNjQ2LTIuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC43MDcgOGwyLjY0NyAyLjY0NmEuNS41IDAgMCAxLS43MDguNzA4TDggOC43MDdsLTIuNjQ2IDIuNjQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4TDcuMjkzIDggNC42NDYgNS4zNTRhLjUuNSAwIDAgMSAwLS43MDgnLyUzRSUzQy9zdmclM0VcXFwiKTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjEwMCUgMTAwJTtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOjE2cHg7ZmxleC13cmFwOm5vd3JhcDtoZWlnaHQ6MTZweDttaW4taGVpZ2h0OjE2cHg7b3JkZXI6Mjt3aWR0aDoxNnB4fVtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIGJ1dHRvbiBzcGFue2Rpc3BsYXk6ZmxleDtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS40O3doaXRlLXNwYWNlOnByZX1bZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBidXR0b257YWxpZ24tY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLXNlbGY6c3RyZXRjaDtib3JkZXI6bm9uZTtib3JkZXItYm90dG9tOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MS41O21hcmdpbi1yaWdodDouNzVyZW07b3V0bGluZTpub25lO3BhZGRpbmc6LjM3NXJlbSAwO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3RyYW5zaXRpb246Y29sb3IgLjhzOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9W2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gYnV0dG9uOm5vdChbZGlzYWJsZWRdKTpob3Zlcntib3JkZXItYm90dG9tLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfVtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIGJ1dHRvbltkYXRhLW1vbnN0ZXItc3RhdGU9YWN0aXZlXSxbZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBidXR0b25bZGF0YS1tb25zdGVyLXN0YXRlPWFjdGl2ZV06bm90KFtkaXNhYmxlZF0pOmhvdmVye2JhY2tncm91bmQtY29sb3I6aW5oZXJpdDtib3JkZXItYm90dG9tLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpIWltcG9ydGFudH1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspe1tkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIGJ1dHRvbltkYXRhLW1vbnN0ZXItc3RhdGU9YWN0aXZlXSxbZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBidXR0b25bZGF0YS1tb25zdGVyLXN0YXRlPWFjdGl2ZV06bm90KFtkaXNhYmxlZF0pOmhvdmVye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKSFpbXBvcnRhbnR9fVtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIGJ1dHRvbltkaXNhYmxlZF17YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTEpO2N1cnNvcjpub3QtYWxsb3dlZH1bZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBidXR0b25bZGF0YS1tb25zdGVyLXJvbGU9c3dpdGNoXXthbGlnbi1zZWxmOmNlbnRlcjtib3JkZXI6MDtvcmRlcjoyO3RvdWNoLWFjdGlvbjpub25lfVtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIGJ1dHRvbltkYXRhLW1vbnN0ZXItcm9sZT1zd2l0Y2hdOm5vdChbZGlzYWJsZWRdKTpob3Zlcntib3JkZXItYm90dG9tLXdpZHRoOjB9W2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gYnV0dG9uIGltZ3toZWlnaHQ6MS4zcmVtO21hcmdpbi1sZWZ0Oi40cmVtO3dpZHRoOjEuM3JlbX06OnNsb3R0ZWQoOm5vdChbc2xvdF0pOm5vdCguYWN0aXZlKSl7ZGlzcGxheTpub25lfTo6c2xvdHRlZCgqKXthbGlnbi1zZWxmOmNlbnRlcn06OnNsb3R0ZWQoW3Nsb3RdKXtib3JkZXItYm90dG9tLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItYm90dG9tLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKX06OnNsb3R0ZWQoW3Nsb3Q9c3RhcnRdKXttYXJnaW4tcmlnaHQ6Ljc1cmVtO29yZGVyOjB9OjpzbG90dGVkKFtzbG90PWVuZF0pe21hcmdpbi1sZWZ0Oi43NXJlbTtvcmRlcjozfVtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIFtkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXItbmF2XSBidXR0b246bm90KFtkaXNhYmxlZF0pe2JvcmRlcjowO2p1c3RpZnktY29udGVudDpsZWZ0O3BhZGRpbmctbGVmdDoxNXB4O3BhZGRpbmctcmlnaHQ6MTVweDt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIFtkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXItbmF2XSBidXR0b246aG92ZXIsW2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gW2RhdGEtbW9uc3Rlci1yb2xlPXBvcHBlci1uYXZdIGJ1dHRvbltkYXRhLW1vbnN0ZXItc3RhdGU9YWN0aXZlXSxbZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyLW5hdl0gYnV0dG9uW2RhdGEtbW9uc3Rlci1zdGF0ZT1hY3RpdmVdOm5vdChbZGlzYWJsZWRdKTpob3Zlcntib3JkZXI6MH1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspe1tkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIFtkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXItbmF2XSBidXR0b25bZGF0YS1tb25zdGVyLXN0YXRlPWFjdGl2ZV0sW2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gW2RhdGEtbW9uc3Rlci1yb2xlPXBvcHBlci1uYXZdIGJ1dHRvbltkYXRhLW1vbnN0ZXItc3RhdGU9YWN0aXZlXTpub3QoW2Rpc2FibGVkXSk6aG92ZXJ7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCkhaW1wb3J0YW50fX0gXG59YCxcblx0XHQwLFxuXHQpO1xufSBjYXRjaCAoZSkge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpLFxuXHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0ZSArIFwiXCIsXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBmaXJlQ3VzdG9tRXZlbnQgfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2V2ZW50cy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlSW5zdGFuY2UsIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5mdW5jdGlvbiBmaW5kU2hhZG93Um9vdChlbGVtZW50KSB7XG5cdGlmIChlbGVtZW50IGluc3RhbmNlb2YgU2hhZG93Um9vdCkgcmV0dXJuIGVsZW1lbnQ7XG5cdGlmICghZWxlbWVudC5wYXJlbnROb2RlKSByZXR1cm4gbnVsbDtcblx0cmV0dXJuIGZpbmRTaGFkb3dSb290KGVsZW1lbnQucGFyZW50Tm9kZSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gdXJsXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBmZXRjaCBvcHRpb25zXG4gKiBAcGFyYW0ge09iamVjdH0gZmlsdGVyIGZldGNoIG9wdGlvbnNcbiAqIEByZXR1cm4ge1Byb21pc2U8T2JqZWN0Pn1cbiAqIEB0aHJvd3Mge0Vycm9yfSB3ZSB3b24ndCBiZSBhYmxlIHRvIHJlYWQgdGhlIGRhdGFcbiAqIEB0aHJvd3Mge0Vycm9yfSBjbGllbnQgZXJyb3JcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bmRlZmluZWQgc3RhdHVzIG9yIHR5cGVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuICovXG5mdW5jdGlvbiBsb2FkQW5kQXNzaWduQ29udGVudChlbGVtZW50LCB1cmwsIG9wdGlvbnMsIGZpbHRlcikge1xuXHRyZXR1cm4gbG9hZENvbnRlbnQodXJsLCBvcHRpb25zKS50aGVuKChyZXNwb25zZSkgPT4ge1xuXHRcdGxldCBjb250ZW50ID0gcmVzcG9uc2UuY29udGVudDtcblxuXHRcdGlmIChpc1N0cmluZyhmaWx0ZXIpICYmIGZpbHRlciAhPT0gXCJcIikge1xuXHRcdFx0Y29uc3QgdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdFx0XHRjb25zdCBjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0XHRcdGMuaW5uZXJIVE1MID0gY29udGVudDtcblx0XHRcdGZvciAoY29uc3QgWywgbm9kZV0gb2YgYy5xdWVyeVNlbGVjdG9yQWxsKGZpbHRlcikuZW50cmllcygpKSB7XG5cdFx0XHRcdHQuYXBwZW5kQ2hpbGQobm9kZSk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnRlbnQgPSB0LmlubmVySFRNTDtcblx0XHR9XG5cblx0XHRjb25zdCB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0XHR0LmlubmVySFRNTCA9IGNvbnRlbnQ7XG5cblx0XHRjb25zdCBzY3JpcHRzID0gdC5xdWVyeVNlbGVjdG9yQWxsKFwic2NyaXB0XCIpO1xuXHRcdGZvciAoY29uc3QgWywgc2NyaXB0XSBvZiBzY3JpcHRzLmVudHJpZXMoKSkge1xuXHRcdFx0Y29uc3QgcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG5cdFx0XHRzLmlubmVySFRNTCA9IHNjcmlwdC5pbm5lckhUTUw7XG5cdFx0XHRpZiAoc2NyaXB0LnNyYykgcy5zcmMgPSBzY3JpcHQuc3JjO1xuXHRcdFx0aWYgKHNjcmlwdC50eXBlKSBzLnR5cGUgPSBzY3JpcHQudHlwZTtcblx0XHRcdGlmIChzY3JpcHQuYXN5bmMpIHMuYXN5bmMgPSBzY3JpcHQuYXN5bmM7XG5cdFx0XHRpZiAoc2NyaXB0LmRlZmVyKSBzLmRlZmVyID0gc2NyaXB0LmRlZmVyO1xuXHRcdFx0aWYgKHNjcmlwdC5jcm9zc09yaWdpbikgcy5jcm9zc09yaWdpbiA9IHNjcmlwdC5jcm9zc09yaWdpbjtcblx0XHRcdGlmIChzY3JpcHQuaW50ZWdyaXR5KSBzLmludGVncml0eSA9IHNjcmlwdC5pbnRlZ3JpdHk7XG5cdFx0XHRpZiAoc2NyaXB0LnJlZmVycmVyUG9saWN5KSBzLnJlZmVycmVyUG9saWN5ID0gc2NyaXB0LnJlZmVycmVyUG9saWN5O1xuXHRcdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzKTtcblx0XHRcdHQucmVtb3ZlQ2hpbGQoc2NyaXB0KTtcblx0XHR9XG5cblx0XHR2YWxpZGF0ZUluc3RhbmNlKGVsZW1lbnQsIEhUTUxFbGVtZW50KS5pbm5lckhUTUwgPSB0LmlubmVySFRNTDtcblxuXHRcdGNvbnN0IHJvb3QgPSBmaW5kU2hhZG93Um9vdChlbGVtZW50KTtcblx0XHRpZiAocm9vdCAhPT0gbnVsbCkge1xuXHRcdFx0ZWxlbWVudCA9IHJvb3QuaG9zdDtcblx0XHR9XG5cblx0XHRmaXJlQ3VzdG9tRXZlbnQoZWxlbWVudCwgXCJtb25zdGVyLWZldGNoZWRcIiwge1xuXHRcdFx0dXJsLFxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHJlc3BvbnNlO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd8VVJMfSB1cmxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIGZldGNoIG9wdGlvbnNcbiAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn1cbiAqIEB0aHJvd3Mge0Vycm9yfSB3ZSB3b24ndCBiZSBhYmxlIHRvIHJlYWQgdGhlIGRhdGFcbiAqIEB0aHJvd3Mge0Vycm9yfSBjbGllbnQgZXJyb3JcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bmRlZmluZWQgc3RhdHVzIG9yIHR5cGVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGxvYWRDb250ZW50KHVybCwgb3B0aW9ucykge1xuXHRpZiAodXJsIGluc3RhbmNlb2YgVVJMKSB7XG5cdFx0dXJsID0gdXJsLnRvU3RyaW5nKCk7XG5cdH1cblxuXHRyZXR1cm4gZmV0Y2godmFsaWRhdGVTdHJpbmcodXJsKSwgb3B0aW9ucykudGhlbigocmVzcG9uc2UpID0+IHtcblx0XHQvLyBUaGUgb2sgcmVhZC1vbmx5IHByb3BlcnR5IG9mIHRoZSBSZXNwb25zZSBpbnRlcmZhY2UgY29udGFpbnMgYVxuXHRcdC8vIEJvb2xlYW4gc3RhdGluZyB3aGV0aGVyIHRoZSByZXNwb25zZSB3YXMgc3VjY2Vzc2Z1bCAoc3RhdHVzIGluIHRoZSByYW5nZSAyMDAtMjk5KSBvciBub3QuXG5cdFx0aWYgKHJlc3BvbnNlPy5vayAhPT0gdHJ1ZSkge1xuXHRcdFx0Ly8gQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvUmVzcG9uc2UvdHlwZVxuXHRcdFx0aWYgKFxuXHRcdFx0XHRbXCJlcnJvclwiLCBcIm9wYXF1ZVwiLCBcIm9wYXF1ZXJlZGlyZWN0XCJdLmluZGV4T2YocmVzcG9uc2U/LnR5cGUpICE9PSAtMVxuXHRcdFx0KSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0XHRgd2Ugd29uJ3QgYmUgYWJsZSB0byByZWFkIHRoZSBkYXRhICgke3Jlc3BvbnNlPy50eXBlfSlgLFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBzdGF0dXNDbGFzcyA9IGAke3Jlc3BvbnNlPy5zdGF0dXN9YC5zdWJzdHJpbmcoMCwgMSk7XG5cdFx0XHRzd2l0Y2ggKHN0YXR1c0NsYXNzKSB7XG5cdFx0XHRcdGNhc2UgXCI0XCI6XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBjbGllbnQgZXJyb3IgJHtyZXNwb25zZT8uc3RhdHVzVGV4dH1gKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdFx0XHRgdW5kZWZpbmVkIHN0YXR1cyAoJHtyZXNwb25zZT8uc3RhdHVzfSAvICR7cmVzcG9uc2U/LnN0YXR1c1RleHR9KSBvciB0eXBlICgke3Jlc3BvbnNlPy50eXBlfSlgLFxuXHRcdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcblx0XHRcdHJlc3BvbnNlXG5cdFx0XHRcdC50ZXh0KClcblx0XHRcdFx0LnRoZW4oKGNvbnRlbnQpID0+IHtcblx0XHRcdFx0XHRyZXNvbHZlKHtcblx0XHRcdFx0XHRcdGNvbnRlbnQsXG5cdFx0XHRcdFx0XHR0eXBlOiByZXNwb25zZS5oZWFkZXJzLmdldChcIkNvbnRlbnQtVHlwZVwiKSxcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKHJlamVjdCk7XG5cdFx0fSk7XG5cdH0pO1xufVxuXG5leHBvcnQgeyBsb2FkQW5kQXNzaWduQ29udGVudCwgbG9hZENvbnRlbnQgfTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIDIwMjQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICovXG5cbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0VSUk9STUVTU0FHRSB9IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBUaGVtZVN0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IFRoZW1lU3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG5cdFRoZW1lU3R5bGVTaGVldC5pbnNlcnRSdWxlKFxuXHRcdGBcbkBsYXllciB0aGVtZSB7IFxuLm1vbnN0ZXItdGhlbWUtcHJpbWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTEpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTEpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMSl9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0xKX0ubW9uc3Rlci10aGVtZS1lcnJvci0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTEpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTEpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtMXtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xKX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTEpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMSl9Lm1vbnN0ZXItY29sb3ItZXJyb3ItMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0xKX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS1kaXNhYmxlZC0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yKX0ubW9uc3Rlci10aGVtZS1zZWNvbmRhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLXRoZW1lLXRlcnRpYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItdGhlbWUtZGVzdHJ1Y3RpdmUtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yKX0ubW9uc3Rlci10aGVtZS1zdWNjZXNzLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTIpfS5tb25zdGVyLXRoZW1lLXdhcm5pbmctMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMil9Lm1vbnN0ZXItdGhlbWUtZXJyb3ItMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0yKX0ubW9uc3Rlci10aGVtZS1zZWxlY3Rpb24tMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTIpfS5tb25zdGVyLWJvcmRlci1jb2xvci0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWJvcmRlci0yKX0ubW9uc3Rlci1jb2xvci1uZXV0cmFsLTJ7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWNvbG9yLXByaW1hcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMil9Lm1vbnN0ZXItY29sb3Itc3VjY2Vzcy0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yKX0ubW9uc3Rlci1jb2xvci13YXJuaW5nLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTIpfS5tb25zdGVyLWNvbG9yLWVycm9yLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMil9Lm1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktZGlzYWJsZWQtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMyl9Lm1vbnN0ZXItdGhlbWUtc2Vjb25kYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci10aGVtZS10ZXJ0aWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLXRoZW1lLWRlc3RydWN0aXZlLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMyl9Lm1vbnN0ZXItdGhlbWUtc3VjY2Vzcy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zKX0ubW9uc3Rlci10aGVtZS13YXJuaW5nLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTMpfS5tb25zdGVyLXRoZW1lLWVycm9yLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMyl9Lm1vbnN0ZXItdGhlbWUtc2VsZWN0aW9uLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKX0ubW9uc3Rlci1ib3JkZXItY29sb3ItM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ib3JkZXItMyl9Lm1vbnN0ZXItY29sb3ItbmV1dHJhbC0ze2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1jb2xvci1wcmltYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItY29sb3ItdGVydGlhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTMpfS5tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMyl9Lm1vbnN0ZXItY29sb3Itd2FybmluZy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0zKX0ubW9uc3Rlci1jb2xvci1lcnJvci0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTMpfS5tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNCl9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy00KX0ubW9uc3Rlci10aGVtZS1lcnJvci00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTQpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNCl9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTQpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtNHtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00KX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNCl9Lm1vbnN0ZXItY29sb3ItZXJyb3ItNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci00KX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQpfS5tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29udGFpbmVyLTEsLm1vbnN0ZXItdGhlbWUtY29udHJvbC1yb3ctMXtib3JkZXI6MXB4IHNvbGlkIHZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItY29sb3IpfS5tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29udGFpbmVyLTEsLm1vbnN0ZXItdGhlbWUtY29udHJvbC1lbGVtZW50LC5tb25zdGVyLXRoZW1lLWNvbnRyb2wtcm93LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmctY29sb3IpO2NvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1jb2xvcil9Lm1vbnN0ZXItdGhlbWUtY29udHJvbC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJnLWNvbG9yKX0ubW9uc3Rlci10aGVtZS1iYWNrZ3JvdW5kLWluaGVyaXR7YmFja2dyb3VuZC1jb2xvcjppbmhlcml0IWltcG9ydGFudH0ubW9uc3Rlci10aGVtZS1vbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtb24tYmctY29sb3IpO2NvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtb24tY29sb3IpfS5tb25zdGVyLXRoZW1lLW9mZntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtb2ZmLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLW9mZi1jb2xvcil9IFxufWAsXG5cdFx0MCxcblx0KTtcbn0gY2F0Y2ggKGUpIHtcblx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0ZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKSxcblx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdGUgKyBcIlwiLFxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi8uLi8uLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUJvb2xlYW4gfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IHNldEV2ZW50TGlzdGVuZXJzTW9kaWZpZXJzLCBwb3BwZXJJbnN0YW5jZVN5bWJvbCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBwb3BwZXJJbnN0YW5jZVN5bWJvbCA9IFN5bWJvbChcInBvcHBlckluc3RhbmNlXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdGhpcyB7Q3VzdG9tRWxlbWVudH1cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gbW9kZVxuICovXG5mdW5jdGlvbiBzZXRFdmVudExpc3RlbmVyc01vZGlmaWVycyhtb2RlKSB7XG5cdGNvbnN0IG9wdGlvbnMgPSBleHRlbmQoe30sIHRoaXMuZ2V0T3B0aW9uKFwicG9wcGVyXCIpKTtcblx0Y29uc3QgbW9kaWZpZXJzID0gb3B0aW9ucz8uW1wibW9kaWZpZXJzXCJdO1xuXG5cdGlmICghaXNBcnJheShtb2RpZmllcnMpKSB7XG5cdFx0b3B0aW9uc1tcIm1vZGlmaWVyc1wiXSA9IFtdO1xuXHR9XG5cblx0aWYgKFxuXHRcdG9wdGlvbnNbXCJtb2RpZmllcnNcIl0uZmlsdGVyKChlbnRyeSkgPT4ge1xuXHRcdFx0aWYgKGVudHJ5Py5bXCJuYW1lXCJdID09PSBcImV2ZW50TGlzdGVuZXJzXCIpIHtcblx0XHRcdFx0Ly8gcGVyZm9ybWFuY2UgaHR0cHM6Ly9wb3BwZXIuanMub3JnL2RvY3MvdjIvdHV0b3JpYWwvI3BlcmZvcm1hbmNlXG5cdFx0XHRcdGVudHJ5W1wiZW5hYmxlZFwiXSA9IHZhbGlkYXRlQm9vbGVhbihtb2RlKTtcblx0XHRcdH1cblx0XHR9KS5sZW5ndGggPT09IDBcblx0KSB7XG5cdFx0b3B0aW9uc1tcIm1vZGlmaWVyc1wiXS5wdXNoKHtcblx0XHRcdG5hbWU6IFwiZXZlbnRMaXN0ZW5lcnNcIixcblx0XHRcdGVuYWJsZWQ6IHZhbGlkYXRlQm9vbGVhbihtb2RlKSxcblx0XHR9KTtcblx0fVxuXG5cdHRoaXNbcG9wcGVySW5zdGFuY2VTeW1ib2xdLnNldE9wdGlvbnMob3B0aW9ucyk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgY3JlYXRlUG9wcGVyIH0gZnJvbSBcIkBwb3BwZXJqcy9jb3JlXCI7XG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vLi4vZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQgeyBQYXRoZmluZGVyIH0gZnJvbSBcIi4uLy4uL2RhdGEvcGF0aGZpbmRlci5tanNcIjtcbmltcG9ydCB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuLFxuXHRhZGRUb09iamVjdExpbmssXG5cdGhhc09iamVjdExpbmssXG59IGZyb20gXCIuLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7XG5cdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdEFUVFJJQlVURV9QUkVGSVgsXG5cdEFUVFJJQlVURV9ST0xFLFxufSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRDdXN0b21FbGVtZW50LFxuXHRnZXRTbG90dGVkRWxlbWVudHMsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHtcblx0ZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQsXG5cdGZpcmVDdXN0b21FdmVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5pbXBvcnQgeyBnZXREb2N1bWVudCB9IGZyb20gXCIuLi8uLi9kb20vdXRpbC5tanNcIjtcbmltcG9ydCB7IHJhbmRvbSB9IGZyb20gXCIuLi8uLi9tYXRoL3JhbmRvbS5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbCB9IGZyb20gXCIuLi8uLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyBJRCB9IGZyb20gXCIuLi8uLi90eXBlcy9pZC5tanNcIjtcbmltcG9ydCB7IGlzQXJyYXksIGlzU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgVG9rZW5MaXN0IH0gZnJvbSBcIi4uLy4uL3R5cGVzL3Rva2VubGlzdC5tanNcIjtcbmltcG9ydCB7IGNsb25lIH0gZnJvbSBcIi4uLy4uL3V0aWwvY2xvbmUubWpzXCI7XG5pbXBvcnQgeyBEZWFkTWFuc1N3aXRjaCB9IGZyb20gXCIuLi8uLi91dGlsL2RlYWRtYW5zc3dpdGNoLm1qc1wiO1xuaW1wb3J0IHsgUHJvY2Vzc2luZyB9IGZyb20gXCIuLi8uLi91dGlsL3Byb2Nlc3NpbmcubWpzXCI7XG5pbXBvcnQge1xuXHRBVFRSSUJVVEVfQlVUVE9OX0xBQkVMLFxuXHRBVFRSSUJVVEVfRk9STV9SRUxPQUQsXG5cdEFUVFJJQlVURV9GT1JNX1VSTCxcblx0U1RZTEVfRElTUExBWV9NT0RFX0JMT0NLLFxufSBmcm9tIFwiLi4vZm9ybS9jb25zdGFudHMubWpzXCI7XG5cbmltcG9ydCB7IFRhYnNTdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC90YWJzLm1qc1wiO1xuaW1wb3J0IHsgbG9hZEFuZEFzc2lnbkNvbnRlbnQgfSBmcm9tIFwiLi4vZm9ybS91dGlsL2ZldGNoLm1qc1wiO1xuaW1wb3J0IHsgVGhlbWVTdHlsZVNoZWV0IH0gZnJvbSBcIi4uL3N0eWxlc2hlZXQvdGhlbWUubWpzXCI7XG5pbXBvcnQge1xuXHRwb3BwZXJJbnN0YW5jZVN5bWJvbCxcblx0c2V0RXZlbnRMaXN0ZW5lcnNNb2RpZmllcnMsXG59IGZyb20gXCIuLi9mb3JtL3V0aWwvcG9wcGVyLm1qc1wiO1xuXG5leHBvcnQgeyBUYWJzIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHBvcHBlckVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJwb3BwZXJFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBwb3BwZXJOYXZFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwicG9wcGVyTmF2RWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgY29udHJvbEVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJjb250cm9sRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgbmF2RWxlbWVudFN5bWJvbCA9IFN5bWJvbChcIm5hdkVsZW1lbnRcIik7XG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBzd2l0Y2hFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwic3dpdGNoRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgY2hhbmdlVGFiRXZlbnRIYW5kbGVyID0gU3ltYm9sKFwiY2hhbmdlVGFiRXZlbnRIYW5kbGVyXCIpO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcmVtb3ZlVGFiRXZlbnRIYW5kbGVyID0gU3ltYm9sKFwicmVtb3ZlVGFiRXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBwb3BwZXJTd2l0Y2hFdmVudEhhbmRsZXIgPSBTeW1ib2woXCJwb3BwZXJTd2l0Y2hFdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgY2xvc2VFdmVudEhhbmRsZXIgPSBTeW1ib2woXCJjbG9zZUV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgbXV0YXRpb25PYnNlcnZlclN5bWJvbCA9IFN5bWJvbChcIm11dGF0aW9uT2JzZXJ2ZXJcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGRpbWVuc2lvbnNTeW1ib2wgPSBTeW1ib2woXCJkaW1lbnNpb25zXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCB0aW1lckNhbGxiYWNrU3ltYm9sID0gU3ltYm9sKFwidGltZXJDYWxsYmFja1wiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCByZXNpemVPYnNlcnZlclN5bWJvbCA9IFN5bWJvbChcInJlc2l6ZU9ic2VydmVyXCIpO1xuXG4vKipcbiAqIEEgVGFicyBDb250cm9sXG4gKlxuICogQGZyYWdtZW50cyAvZnJhZ21lbnRzL2NvbXBvbmVudHMvbGF5b3V0L3RhYnMvXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvbGF5b3V0L3RhYnMtc2ltcGxlXG4gKlxuICogQHNpbmNlIDMuNzQuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IFRoaXMgQ3VzdG9tQ29udHJvbCBjcmVhdGVzIGEgdGFiIGVsZW1lbnQgd2l0aCBhIHZhcmlldHkgb2Ygb3B0aW9ucy5cbiAqL1xuY2xhc3MgVGFicyBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9sYXlvdXQvdGFic1wiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBIVE1MIHRhZywgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGxhYmVsc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbGFiZWxzLm5ldy10YWItbGFiZWw9XCJOZXcgVGFiXCJcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZlYXR1cmVzXG5cdCAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBmZWF0dXJlcy5vcGVuRGVsYXk9NTAwIE9wZW4gZGVsYXkgaW4gbWlsbGlzZWNvbmRzXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmZXRjaCBGZXRjaCBbc2VlIFVzaW5nIEZldGNoIG1vemlsbGEub3JnXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmV0Y2hfQVBJL1VzaW5nX0ZldGNoKVxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2gucmVkaXJlY3Q9ZXJyb3Jcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLm1ldGhvZD1HRVRcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLm1vZGU9c2FtZS1vcmlnaW5cblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLmNyZWRlbnRpYWxzPXNhbWUtb3JpZ2luXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmZXRjaC5oZWFkZXJzPXtcImFjY2VwdFwiOlwidGV4dC9odG1sXCJ9fVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gcG9wcGVyIFtQb3BwZXJKUyBPcHRpb25zXShodHRwczovL3BvcHBlci5qcy5vcmcvZG9jcy92Mi8pXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwb3BwZXIucGxhY2VtZW50PWJvdHRvbSBQb3BwZXJKUyBwbGFjZW1lbnRcblx0ICogQHByb3BlcnR5IHtPYmplY3RbXX0gbW9kaWZpZXJzPXtuYW1lOm9mZnNldH0gUG9wcGVySlMgcGxhY2VtZW50XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdH0sXG5cdFx0XHRsYWJlbHM6IHtcblx0XHRcdFx0XCJuZXctdGFiLWxhYmVsXCI6IFwiTmV3IFRhYlwiLFxuXHRcdFx0fSxcblx0XHRcdGJ1dHRvbnM6IHtcblx0XHRcdFx0c3RhbmRhcmQ6IFtdLFxuXHRcdFx0XHRwb3BwZXI6IFtdLFxuXHRcdFx0fSxcblx0XHRcdGZldGNoOiB7XG5cdFx0XHRcdHJlZGlyZWN0OiBcImVycm9yXCIsXG5cdFx0XHRcdG1ldGhvZDogXCJHRVRcIixcblx0XHRcdFx0bW9kZTogXCJzYW1lLW9yaWdpblwiLFxuXHRcdFx0XHRjcmVkZW50aWFsczogXCJzYW1lLW9yaWdpblwiLFxuXHRcdFx0XHRoZWFkZXJzOiB7XG5cdFx0XHRcdFx0YWNjZXB0OiBcInRleHQvaHRtbFwiLFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblxuXHRcdFx0ZmVhdHVyZXM6IHtcblx0XHRcdFx0b3BlbkRlbGF5OiBudWxsLFxuXHRcdFx0fSxcblxuXHRcdFx0Y2xhc3Nlczoge1xuXHRcdFx0XHRidXR0b246IFwibW9uc3Rlci10aGVtZS1wcmltYXJ5LTFcIixcblx0XHRcdFx0cG9wcGVyOiBcIm1vbnN0ZXItdGhlbWUtcHJpbWFyeS0xXCIsXG5cdFx0XHRcdG5hdmlnYXRpb246IFwibW9uc3Rlci10aGVtZS1wcmltYXJ5LTFcIixcblx0XHRcdH0sXG5cblx0XHRcdHBvcHBlcjoge1xuXHRcdFx0XHRwbGFjZW1lbnQ6IFwiYm90dG9tXCIsXG5cdFx0XHRcdG1vZGlmaWVyczogW1xuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdG5hbWU6IFwib2Zmc2V0XCIsXG5cdFx0XHRcdFx0XHRvcHRpb25zOiB7XG5cdFx0XHRcdFx0XHRcdG9mZnNldDogWzAsIDJdLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9LFxuXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0bmFtZTogXCJldmVudExpc3RlbmVyc1wiLFxuXHRcdFx0XHRcdFx0ZW5hYmxlZDogZmFsc2UsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XSxcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGludGVybmFsIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcblxuXHRcdHRoaXNbZGltZW5zaW9uc1N5bWJvbF0gPSBuZXcgUGF0aGZpbmRlcih7IGRhdGE6IHt9IH0pO1xuXG5cdFx0aW5pdEV2ZW50SGFuZGxlci5jYWxsKHRoaXMpO1xuXG5cdFx0Ly8gc2V0dXAgc3RydWN0dXJlXG5cdFx0aW5pdFRhYkJ1dHRvbnMuY2FsbCh0aGlzKS50aGVuKCgpID0+IHtcblx0XHRcdGluaXRQb3BwZXJTd2l0Y2guY2FsbCh0aGlzKTtcblx0XHRcdGluaXRQb3BwZXIuY2FsbCh0aGlzKTtcblx0XHRcdGF0dGFjaFJlc2l6ZU9ic2VydmVyLmNhbGwodGhpcyk7XG5cdFx0XHRhdHRhY2hUYWJDaGFuZ2VPYnNlcnZlci5jYWxsKHRoaXMpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBpbnRlcm5hbCBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqXG5cdCAqIEByZXR1cm4ge0NTU1N0eWxlU2hlZXRbXX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiBbVGFic1N0eWxlU2hlZXRdO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBpbnRlcm5hbCBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci10YWJzXCI7XG5cdH1cblxuXHQvKipcblx0ICogQSBmdW5jdGlvbiB0aGF0IGFjdGl2YXRlcyBhIHRhYiBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgbmFtZS5cblx0ICpcblx0ICogVGhlIHRhYnMgaGF2ZSB0byBiZSBuYW1lZCB3aXRoIHRoZSBgZGF0YS1tb25zdGVyLW5hbWVgIGF0dHJpYnV0ZS5cblx0ICpcblx0ICogQHBhcmFtIHt0eXBlfSBpZE9yTmFtZSAtIHRoZSBuYW1lIG9yIGlkIG9mIHRoZSB0YWIgdG8gYWN0aXZhdGVcblx0ICogQHJldHVybiB7VGFic30gLSBUaGUgY3VycmVudCBpbnN0YW5jZVxuXHQgKi9cblx0YWN0aXZlVGFiKGlkT3JOYW1lKSB7XG5cdFx0bGV0IGZvdW5kID0gZmFsc2U7XG5cblx0XHRnZXRTbG90dGVkRWxlbWVudHMuY2FsbCh0aGlzKS5mb3JFYWNoKChub2RlKSA9PiB7XG5cdFx0XHRpZiAoZm91bmQgPT09IHRydWUpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAobm9kZS5nZXRBdHRyaWJ1dGUoXCJkYXRhLW1vbnN0ZXItbmFtZVwiKSA9PT0gaWRPck5hbWUpIHtcblx0XHRcdFx0dGhpcy5zaGFkb3dSb290XG5cdFx0XHRcdFx0LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XHRcdFx0XHRgW2RhdGEtbW9uc3Rlci10YWItcmVmZXJlbmNlPVwiJHtub2RlLmdldEF0dHJpYnV0ZShcImlkXCIpfVwiXWAsXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHRcdC5jbGljaygpO1xuXHRcdFx0XHRmb3VuZCA9IHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChub2RlLmdldEF0dHJpYnV0ZShcImlkXCIpID09PSBpZE9yTmFtZSkge1xuXHRcdFx0XHR0aGlzLnNoYWRvd1Jvb3Rcblx0XHRcdFx0XHQucXVlcnlTZWxlY3Rvcihcblx0XHRcdFx0XHRcdGBbZGF0YS1tb25zdGVyLXRhYi1yZWZlcmVuY2U9XCIke25vZGUuZ2V0QXR0cmlidXRlKFwiaWRcIil9XCJdYCxcblx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0LmNsaWNrKCk7XG5cdFx0XHRcdGZvdW5kID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBuYW1lIG9yIGlkIG9mIHRoZSBjdXJyZW50bHkgYWN0aXZlIHRhYi5cblx0ICpcblx0ICogVGhlIHRhYnMgaGF2ZSB0byBiZSBuYW1lZCB3aXRoIHRoZSBgZGF0YS1tb25zdGVyLW5hbWVgIGF0dHJpYnV0ZS5cblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfG51bGx9XG5cdCAqL1xuXHRnZXRBY3RpdmVUYWIoKSB7XG5cdFx0Y29uc3Qgbm9kZXMgPSBnZXRTbG90dGVkRWxlbWVudHMuY2FsbCh0aGlzKTtcblx0XHRmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcblx0XHRcdGlmIChub2RlLm1hdGNoZXMoXCIuYWN0aXZlXCIpID09PSB0cnVlKSB7XG5cdFx0XHRcdGlmIChub2RlLmhhc0F0dHJpYnV0ZShcImRhdGEtbW9uc3Rlci1uYW1lXCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG5vZGUuZ2V0QXR0cmlidXRlKFwiZGF0YS1tb25zdGVyLW5hbWVcIik7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gbm9kZS5nZXRBdHRyaWJ1dGUoXCJpZFwiKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBkb20gYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKi9cblx0Y29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuXHRcdGNvbnN0IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcblxuXHRcdGZvciAoY29uc3QgWywgdHlwZV0gb2YgT2JqZWN0LmVudHJpZXMoW1wiY2xpY2tcIiwgXCJ0b3VjaFwiXSkpIHtcblx0XHRcdC8vIGNsb3NlIG9uIG91dHNpZGUgdWktZXZlbnRzXG5cdFx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIHRoaXNbY2xvc2VFdmVudEhhbmRsZXJdKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBkb20gYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKi9cblx0ZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuXHRcdGNvbnN0IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcblxuXHRcdC8vIGNsb3NlIG9uIG91dHNpZGUgdWktZXZlbnRzXG5cdFx0Zm9yIChjb25zdCBbLCB0eXBlXSBvZiBPYmplY3QuZW50cmllcyhbXCJjbGlja1wiLCBcInRvdWNoXCJdKSkge1xuXHRcdFx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCB0aGlzW2Nsb3NlRXZlbnRIYW5kbGVyXSk7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaW5pdFBvcHBlclN3aXRjaCgpIHtcblx0Y29uc3Qgbm9kZXMgPSBnZXRTbG90dGVkRWxlbWVudHMuY2FsbCh0aGlzLCBgWyR7QVRUUklCVVRFX1JPTEV9PVwic3dpdGNoXCJdYCk7IC8vIG51bGwgXHUyMUE2IG9ubHkgdW5uYW1lZCBzbG90c1xuXHRsZXQgc3dpdGNoQnV0dG9uO1xuXHRpZiAobm9kZXMuc2l6ZSA9PT0gMCkge1xuXHRcdHN3aXRjaEJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIik7XG5cdFx0c3dpdGNoQnV0dG9uLnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSwgXCJzd2l0Y2hcIik7XG5cdFx0c3dpdGNoQnV0dG9uLnNldEF0dHJpYnV0ZShcInBhcnRcIiwgXCJzd2l0Y2hcIik7XG5cdFx0c3dpdGNoQnV0dG9uLmNsYXNzTGlzdC5hZGQoXCJoaWRkZW5cIik7XG5cdFx0Y29uc3QgY2xhc3NMaXN0ID0gdGhpcy5nZXRPcHRpb24oXCJjbGFzc2VzLmJ1dHRvblwiKTtcblx0XHRpZiAoY2xhc3NMaXN0KSB7XG5cdFx0XHRzd2l0Y2hCdXR0b24uY2xhc3NMaXN0LmFkZChjbGFzc0xpc3QpO1xuXHRcdH1cblx0XHRzd2l0Y2hCdXR0b24uaW5uZXJIVE1MID1cblx0XHRcdCc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPjxwYXRoIGQ9XCJNOS41IDEzYTEuNSAxLjUgMCAxIDEtMyAwIDEuNSAxLjUgMCAwIDEgMyAwem0wLTVhMS41IDEuNSAwIDEgMS0zIDAgMS41IDEuNSAwIDAgMSAzIDB6bTAtNWExLjUgMS41IDAgMSAxLTMgMCAxLjUgMS41IDAgMCAxIDMgMHpcIi8+PC9zdmc+Jztcblx0XHR0aGlzW25hdkVsZW1lbnRTeW1ib2xdLnByZXBlbmQoc3dpdGNoQnV0dG9uKTtcblx0fSBlbHNlIHtcblx0XHRzd2l0Y2hCdXR0b24gPSBub2Rlcy5uZXh0KCk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICovXG5cdHRoaXNbcG9wcGVyU3dpdGNoRXZlbnRIYW5kbGVyXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChldmVudCwgQVRUUklCVVRFX1JPTEUsIFwic3dpdGNoXCIpO1xuXG5cdFx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudCkge1xuXHRcdFx0dG9nZ2xlUG9wcGVyLmNhbGwodGhpcyk7XG5cdFx0fVxuXHR9O1xuXG5cdGZvciAoY29uc3QgdHlwZSBvZiBbXCJjbGlja1wiLCBcInRvdWNoXCJdKSB7XG5cdFx0c3dpdGNoQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgdGhpc1twb3BwZXJTd2l0Y2hFdmVudEhhbmRsZXJdKTtcblx0fVxuXG5cdHRoaXNbc3dpdGNoRWxlbWVudFN5bWJvbF0gPSBzd2l0Y2hCdXR0b247XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaGlkZVBvcHBlcigpIHtcblx0aWYgKCF0aGlzW3BvcHBlckluc3RhbmNlU3ltYm9sXSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuXHQvLyBwZXJmb3JtYW5jZSBodHRwczovL3BvcHBlci5qcy5vcmcvZG9jcy92Mi90dXRvcmlhbC8jcGVyZm9ybWFuY2Vcblx0c2V0RXZlbnRMaXN0ZW5lcnNNb2RpZmllcnMuY2FsbCh0aGlzLCBmYWxzZSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc2hvd1BvcHBlcigpIHtcblx0aWYgKHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUuZGlzcGxheSA9PT0gU1RZTEVfRElTUExBWV9NT0RFX0JMT0NLKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcblx0dGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ID0gU1RZTEVfRElTUExBWV9NT0RFX0JMT0NLO1xuXHQvLyBwZXJmb3JtYW5jZSBodHRwczovL3BvcHBlci5qcy5vcmcvZG9jcy92Mi90dXRvcmlhbC8jcGVyZm9ybWFuY2Vcblx0c2V0RXZlbnRMaXN0ZW5lcnNNb2RpZmllcnMuY2FsbCh0aGlzLCB0cnVlKTtcblxuXHR0aGlzW3BvcHBlckluc3RhbmNlU3ltYm9sXS51cGRhdGUoKTtcblxuXHRuZXcgUHJvY2Vzc2luZygoKSA9PiB7XG5cdFx0dGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5yZW1vdmVQcm9wZXJ0eShcInZpc2liaWxpdHlcIik7XG5cdH0pXG5cdFx0LnJ1bih1bmRlZmluZWQpXG5cdFx0LnRoZW4oKCkgPT4ge30pXG5cdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHRvZ2dsZVBvcHBlcigpIHtcblx0aWYgKHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUuZGlzcGxheSA9PT0gU1RZTEVfRElTUExBWV9NT0RFX0JMT0NLKSB7XG5cdFx0aGlkZVBvcHBlci5jYWxsKHRoaXMpO1xuXHR9IGVsc2Uge1xuXHRcdHNob3dQb3BwZXIuY2FsbCh0aGlzKTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGF0dGFjaFJlc2l6ZU9ic2VydmVyKCkge1xuXHQvLyBhZ2FpbnN0IGZsaWNrZXJpbmdcblx0dGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0gPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKGVudHJpZXMpID0+IHtcblx0XHRpZiAodGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXSBpbnN0YW5jZW9mIERlYWRNYW5zU3dpdGNoKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdLnRvdWNoKCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0ZGVsZXRlIHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXSA9IG5ldyBEZWFkTWFuc1N3aXRjaCgyMDAsICgpID0+IHtcblx0XHRcdHRoaXNbZGltZW5zaW9uc1N5bWJvbF0uc2V0VmlhKFwiZGF0YS5jYWxjdWxhdGVkXCIsIGZhbHNlKTtcblx0XHRcdGNoZWNrQW5kUmVhcnJhbmdlQnV0dG9ucy5jYWxsKHRoaXMpO1xuXHRcdH0pO1xuXHR9KTtcblxuXHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXS5vYnNlcnZlKHRoaXNbbmF2RWxlbWVudFN5bWJvbF0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGF0dGFjaFRhYkNoYW5nZU9ic2VydmVyKCkge1xuXHQvLyBhZ2FpbnN0IGZsaWNrZXJpbmdcblx0bmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9ucykgPT4ge1xuXHRcdGxldCBydW5VcGRhdGUgPSBmYWxzZTtcblxuXHRcdGZvciAoY29uc3QgbXV0YXRpb24gb2YgbXV0YXRpb25zKSB7XG5cdFx0XHRpZiAobXV0YXRpb24udHlwZSA9PT0gXCJjaGlsZExpc3RcIikge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0bXV0YXRpb24uYWRkZWROb2Rlcy5sZW5ndGggPiAwIHx8XG5cdFx0XHRcdFx0bXV0YXRpb24ucmVtb3ZlZE5vZGVzLmxlbmd0aCA+IDBcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cnVuVXBkYXRlID0gdHJ1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChydW5VcGRhdGUgPT09IHRydWUpIHtcblx0XHRcdHRoaXNbZGltZW5zaW9uc1N5bWJvbF0uc2V0VmlhKFwiZGF0YS5jYWxjdWxhdGVkXCIsIGZhbHNlKTtcblx0XHRcdGluaXRUYWJCdXR0b25zLmNhbGwodGhpcyk7XG5cdFx0fVxuXHR9KS5vYnNlcnZlKHRoaXMsIHtcblx0XHRjaGlsZExpc3Q6IHRydWUsXG5cdH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtTZWxlY3R9XG4gKiBAZXh0ZXJuYWwgXCJleHRlcm5hbDpjcmVhdGVQb3BwZXJcIlxuICogQHNlZSB7QGxpbmsgIFBsdWdpbnN9XG4gKi9cbmZ1bmN0aW9uIGluaXRQb3BwZXIoKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdGNvbnN0IG9wdGlvbnMgPSBleHRlbmQoe30sIHNlbGYuZ2V0T3B0aW9uKFwicG9wcGVyXCIpKTtcblxuXHRzZWxmW3BvcHBlckluc3RhbmNlU3ltYm9sXSA9IGNyZWF0ZVBvcHBlcihcblx0XHRzZWxmW3N3aXRjaEVsZW1lbnRTeW1ib2xdLFxuXHRcdHNlbGZbcG9wcGVyRWxlbWVudFN5bWJvbF0sXG5cdFx0b3B0aW9ucyxcblx0KTtcblxuXHRjb25zdCBvYnNlcnZlcjEgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbiAobXV0YXRpb25zKSB7XG5cdFx0bGV0IHJ1blVwZGF0ZSA9IGZhbHNlO1xuXHRcdGZvciAoY29uc3QgbXV0YXRpb24gb2YgbXV0YXRpb25zKSB7XG5cdFx0XHRpZiAobXV0YXRpb24udHlwZSA9PT0gXCJjaGlsZExpc3RcIikge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0bXV0YXRpb24uYWRkZWROb2Rlcy5sZW5ndGggPiAwIHx8XG5cdFx0XHRcdFx0bXV0YXRpb24ucmVtb3ZlZE5vZGVzLmxlbmd0aCA+IDBcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cnVuVXBkYXRlID0gdHJ1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChydW5VcGRhdGUgPT09IHRydWUpIHtcblx0XHRcdHNlbGZbcG9wcGVySW5zdGFuY2VTeW1ib2xdLnVwZGF0ZSgpO1xuXHRcdH1cblx0fSk7XG5cblx0b2JzZXJ2ZXIxLm9ic2VydmUoc2VsZltwb3BwZXJOYXZFbGVtZW50U3ltYm9sXSwge1xuXHRcdGNoaWxkTGlzdDogdHJ1ZSxcblx0XHRzdWJ0cmVlOiB0cnVlLFxuXHR9KTtcblxuXHRyZXR1cm4gc2VsZjtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICovXG5mdW5jdGlvbiBzaG93KGVsZW1lbnQpIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0Y29uc3QgcmVmZXJlbmNlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoYCR7QVRUUklCVVRFX1BSRUZJWH10YWItcmVmZXJlbmNlYCk7XG5cblx0Y29uc3Qgbm9kZXMgPSBnZXRTbG90dGVkRWxlbWVudHMuY2FsbCh0aGlzKTtcblx0Zm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG5cdFx0Y29uc3QgaWQgPSBub2RlLmdldEF0dHJpYnV0ZShcImlkXCIpO1xuXG5cdFx0aWYgKGlkID09PSByZWZlcmVuY2UpIHtcblx0XHRcdG5vZGUuY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKTtcblxuXHRcdFx0Y29uc3Qgb3BlbkRlbGF5ID0gcGFyc2VJbnQodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5vcGVuRGVsYXlcIiksIDEwKTtcblxuXHRcdFx0aWYgKCFpc05hTihvcGVuRGVsYXkpICYmIG9wZW5EZWxheSA+IDApIHtcblx0XHRcdFx0bm9kZS5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcblxuXHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHRub2RlLnN0eWxlLnZpc2liaWxpdHkgPSBcInZpc2libGVcIjtcblx0XHRcdFx0fSwgb3BlbkRlbGF5KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gZ2V0IGFsbCBkYXRhLSBmcm9tIGJ1dHRvbiBhbmQgZmlsdGVyIG91dCBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcyBhbmQgZGF0YS1tb25zdGVyLWluc2VydFxuXHRcdFx0Y29uc3QgZGF0YSA9IHt9O1xuXHRcdFx0Y29uc3QgbWFzayA9IFtcblx0XHRcdFx0XCJkYXRhLW1vbnN0ZXItYXR0cmlidXRlc1wiLFxuXHRcdFx0XHRcImRhdGEtbW9uc3Rlci1pbnNlcnQtcmVmZXJlbmNlXCIsXG5cdFx0XHRcdFwiZGF0YS1tb25zdGVyLXN0YXRlXCIsXG5cdFx0XHRcdFwiZGF0YS1tb25zdGVyLWJ1dHRvbi1sYWJlbFwiLFxuXHRcdFx0XHRcImRhdGEtbW9uc3Rlci1vYmplY3RsaW5rXCIsXG5cdFx0XHRcdFwiZGF0YS1tb25zdGVyLXJvbGVcIixcblx0XHRcdF07XG5cblx0XHRcdGZvciAoY29uc3QgWywgYXR0cl0gb2YgT2JqZWN0LmVudHJpZXMobm9kZS5hdHRyaWJ1dGVzKSkge1xuXHRcdFx0XHRpZiAoYXR0ci5uYW1lLnN0YXJ0c1dpdGgoXCJkYXRhLVwiKSAmJiBtYXNrLmluZGV4T2YoYXR0ci5uYW1lKSA9PT0gLTEpIHtcblx0XHRcdFx0XHRkYXRhW2F0dHIubmFtZV0gPSBhdHRyLnZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChub2RlLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfRk9STV9VUkwpKSB7XG5cdFx0XHRcdGNvbnN0IHVybCA9IG5vZGUuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1VSTCk7XG5cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdCFub2RlLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfRk9STV9SRUxPQUQpIHx8XG5cdFx0XHRcdFx0bm9kZS5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fUkVMT0FEKS50b0xvd2VyQ2FzZSgpID09PSBcIm9uc2hvd1wiXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdG5vZGUucmVtb3ZlQXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1VSTCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb24oXCJmZXRjaFwiLCB7fSk7XG5cdFx0XHRcdGNvbnN0IGZpbHRlciA9IHVuZGVmaW5lZDtcblx0XHRcdFx0bG9hZEFuZEFzc2lnbkNvbnRlbnQobm9kZSwgdXJsLCBvcHRpb25zLCBmaWx0ZXIpXG5cdFx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdFx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci10YWItY2hhbmdlZFwiLCB7XG5cdFx0XHRcdFx0XHRcdHJlZmVyZW5jZSxcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci10YWItY2hhbmdlZFwiLCB7XG5cdFx0XHRcdFx0cmVmZXJlbmNlLFxuXHRcdFx0XHRcdGRhdGEsXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRub2RlLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIik7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3Qgc3RhbmRhcmRCdXR0b25zID0gdGhpcy5nZXRPcHRpb24oXCJidXR0b25zLnN0YW5kYXJkXCIpO1xuXHRmb3IgKGNvbnN0IGluZGV4IGluIHN0YW5kYXJkQnV0dG9ucykge1xuXHRcdGNvbnN0IGJ1dHRvbiA9IHN0YW5kYXJkQnV0dG9uc1tpbmRleF07XG5cdFx0Y29uc3Qgc3RhdGUgPSBidXR0b25bXCJyZWZlcmVuY2VcIl0gPT09IHJlZmVyZW5jZSA/IFwiYWN0aXZlXCIgOiBcImluYWN0aXZlXCI7XG5cdFx0dGhpcy5zZXRPcHRpb24oYGJ1dHRvbnMuc3RhbmRhcmQuJHtpbmRleH0uc3RhdGVgLCBzdGF0ZSk7XG5cdH1cblxuXHRjb25zdCBwb3BwZXJCdXR0b24gPSB0aGlzLmdldE9wdGlvbihcImJ1dHRvbnMucG9wcGVyXCIpO1xuXHRmb3IgKGNvbnN0IGluZGV4IGluIHBvcHBlckJ1dHRvbikge1xuXHRcdGNvbnN0IGJ1dHRvbiA9IHBvcHBlckJ1dHRvbltpbmRleF07XG5cdFx0Y29uc3Qgc3RhdGUgPSBidXR0b25bXCJyZWZlcmVuY2VcIl0gPT09IHJlZmVyZW5jZSA/IFwiYWN0aXZlXCIgOiBcImluYWN0aXZlXCI7XG5cdFx0dGhpcy5zZXRPcHRpb24oYGJ1dHRvbnMucG9wcGVyLiR7aW5kZXh9LnN0YXRlYCwgc3RhdGUpO1xuXHR9XG5cblx0aGlkZVBvcHBlci5jYWxsKHRoaXMpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudEhhbmRsZXIoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKi9cblx0dGhpc1tjaGFuZ2VUYWJFdmVudEhhbmRsZXJdID0gKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgZWxlbWVudCA9IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KGV2ZW50LCBBVFRSSUJVVEVfUk9MRSwgXCJidXR0b25cIik7XG5cblx0XHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxCdXR0b25FbGVtZW50ICYmIGVsZW1lbnQuZGlzYWJsZWQgIT09IHRydWUpIHtcblx0XHRcdHNob3cuY2FsbCh0aGlzLCBlbGVtZW50KTtcblx0XHR9XG5cdH07XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG5cdCAqIEBmaXJlcyBtb25zdGVyLXRhYi1yZW1vdmVcblx0ICovXG5cdHRoaXNbcmVtb3ZlVGFiRXZlbnRIYW5kbGVyXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChcblx0XHRcdGV2ZW50LFxuXHRcdFx0QVRUUklCVVRFX1JPTEUsXG5cdFx0XHRcInJlbW92ZS10YWJcIixcblx0XHQpO1xuXG5cdFx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0Y29uc3QgYnV0dG9uID0gZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoXG5cdFx0XHRcdGV2ZW50LFxuXHRcdFx0XHRBVFRSSUJVVEVfUk9MRSxcblx0XHRcdFx0XCJidXR0b25cIixcblx0XHRcdCk7XG5cblx0XHRcdGlmIChidXR0b24gaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudCAmJiBidXR0b24uZGlzYWJsZWQgIT09IHRydWUpIHtcblx0XHRcdFx0Y29uc3QgcmVmZXJlbmNlID0gYnV0dG9uLmdldEF0dHJpYnV0ZShcblx0XHRcdFx0XHRgJHtBVFRSSUJVVEVfUFJFRklYfXRhYi1yZWZlcmVuY2VgLFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAocmVmZXJlbmNlKSB7XG5cdFx0XHRcdFx0Y29uc3QgY29udGFpbmVyID0gdGhpcy5xdWVyeVNlbGVjdG9yKGBbaWQ9JHtyZWZlcmVuY2V9XWApO1xuXHRcdFx0XHRcdGlmIChjb250YWluZXIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0XHRcdFx0Y29udGFpbmVyLnJlbW92ZSgpO1xuXHRcdFx0XHRcdFx0aW5pdFRhYkJ1dHRvbnMuY2FsbCh0aGlzKTtcblx0XHRcdFx0XHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItdGFiLXJlbW92ZVwiLCB7XG5cdFx0XHRcdFx0XHRcdHJlZmVyZW5jZSxcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHR0aGlzW25hdkVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaFwiLCB0aGlzW2NoYW5nZVRhYkV2ZW50SGFuZGxlcl0pO1xuXHR0aGlzW25hdkVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzW2NoYW5nZVRhYkV2ZW50SGFuZGxlcl0pO1xuXG5cdHRoaXNbbmF2RWxlbWVudFN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoXCIsIHRoaXNbcmVtb3ZlVGFiRXZlbnRIYW5kbGVyXSk7XG5cdHRoaXNbbmF2RWxlbWVudFN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXNbcmVtb3ZlVGFiRXZlbnRIYW5kbGVyXSk7XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG5cdCAqL1xuXHR0aGlzW2Nsb3NlRXZlbnRIYW5kbGVyXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IHBhdGggPSBldmVudC5jb21wb3NlZFBhdGgoKTtcblxuXHRcdGZvciAoY29uc3QgWywgZWxlbWVudF0gb2YgT2JqZWN0LmVudHJpZXMocGF0aCkpIHtcblx0XHRcdGlmIChlbGVtZW50ID09PSB0aGlzKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRoaWRlUG9wcGVyLmNhbGwodGhpcyk7XG5cdH07XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBvYnNlcnZlZE5vZGVcbiAqL1xuZnVuY3Rpb24gYXR0YWNoVGFiTXV0YXRpb25PYnNlcnZlcihvYnNlcnZlZE5vZGUpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0aWYgKGhhc09iamVjdExpbmsob2JzZXJ2ZWROb2RlLCBtdXRhdGlvbk9ic2VydmVyU3ltYm9sKSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8qKlxuXHQgKiB0aGlzIGNvbnN0cnVjdCBtb25pdG9ycyBhIG5vZGUgd2hldGhlciBpdCBpcyBkaXNhYmxlZCBvciBtb2RpZmllZFxuXHQgKiBAdHlwZSB7TXV0YXRpb25PYnNlcnZlcn1cblx0ICovXG5cdGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKG11dGF0aW9ucykge1xuXHRcdGlmIChpc0FycmF5KG11dGF0aW9ucykpIHtcblx0XHRcdGNvbnN0IG11dGF0aW9uID0gbXV0YXRpb25zLnBvcCgpO1xuXHRcdFx0aWYgKG11dGF0aW9uIGluc3RhbmNlb2YgTXV0YXRpb25SZWNvcmQpIHtcblx0XHRcdFx0aW5pdFRhYkJ1dHRvbnMuY2FsbChzZWxmKTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdG9ic2VydmVyLm9ic2VydmUob2JzZXJ2ZWROb2RlLCB7XG5cdFx0Y2hpbGRMaXN0OiBmYWxzZSxcblx0XHRhdHRyaWJ1dGVzOiB0cnVlLFxuXHRcdHN1YnRyZWU6IGZhbHNlLFxuXHRcdGF0dHJpYnV0ZUZpbHRlcjogW1xuXHRcdFx0XCJkaXNhYmxlZFwiLFxuXHRcdFx0QVRUUklCVVRFX0JVVFRPTl9MQUJFTCxcblx0XHRcdGAke0FUVFJJQlVURV9QUkVGSVh9YnV0dG9uLWljb25gLFxuXHRcdF0sXG5cdH0pO1xuXG5cdGFkZFRvT2JqZWN0TGluayhvYnNlcnZlZE5vZGUsIG11dGF0aW9uT2JzZXJ2ZXJTeW1ib2wsIG9ic2VydmVyKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7U2VsZWN0fVxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqL1xuZnVuY3Rpb24gaW5pdENvbnRyb2xSZWZlcmVuY2VzKCkge1xuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHR0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09Y29udHJvbF1gLFxuXHQpO1xuXHR0aGlzW25hdkVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YG5hdlske0FUVFJJQlVURV9ST0xFfT1uYXZdYCxcblx0KTtcblx0dGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09cG9wcGVyXWAsXG5cdCk7XG5cdHRoaXNbcG9wcGVyTmF2RWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PXBvcHBlci1uYXZdYCxcblx0KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7UHJvbWlzZTx1bmtub3duPn1cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKlxuICovXG5mdW5jdGlvbiBpbml0VGFiQnV0dG9ucygpIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0bGV0IGFjdGl2ZVJlZmVyZW5jZTtcblxuXHRjb25zdCBkaW1lbnNpb25zQ2FsY3VsYXRlZCA9IHRoaXNbZGltZW5zaW9uc1N5bWJvbF0uZ2V0VmlhKFxuXHRcdFwiZGF0YS5jYWxjdWxhdGVkXCIsXG5cdFx0ZmFsc2UsXG5cdCk7XG5cblx0Y29uc3QgYnV0dG9ucyA9IFtdO1xuXHRjb25zdCBub2RlcyA9IGdldFNsb3R0ZWRFbGVtZW50cy5jYWxsKHRoaXMsIHVuZGVmaW5lZCwgbnVsbCk7IC8vIG51bGwgXHUyMUE2IG9ubHkgdW5uYW1lZCBzbG90c1xuXG5cdGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuXHRcdGlmICghKG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIGNvbnRpbnVlO1xuXHRcdGxldCBsYWJlbCA9IGdldEJ1dHRvbkxhYmVsLmNhbGwodGhpcywgbm9kZSk7XG5cblx0XHRsZXQgcmVmZXJlbmNlO1xuXHRcdGlmIChub2RlLmhhc0F0dHJpYnV0ZShcImlkXCIpKSB7XG5cdFx0XHRyZWZlcmVuY2UgPSBub2RlLmdldEF0dHJpYnV0ZShcImlkXCIpO1xuXHRcdH1cblxuXHRcdGxldCBkaXNhYmxlZDtcblx0XHRpZiAobm9kZS5oYXNBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKSB8fCBub2RlLmRpc2FibGVkID09PSB0cnVlKSB7XG5cdFx0XHRkaXNhYmxlZCA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKCFyZWZlcmVuY2UpIHtcblx0XHRcdHJlZmVyZW5jZSA9IG5ldyBJRChcInRhYlwiKS50b1N0cmluZygpO1xuXHRcdFx0bm9kZS5zZXRBdHRyaWJ1dGUoXCJpZFwiLCByZWZlcmVuY2UpO1xuXHRcdH1cblxuXHRcdGlmIChub2RlLmhhc0F0dHJpYnV0ZShgJHtBVFRSSUJVVEVfUFJFRklYfWJ1dHRvbi1pY29uYCkpIHtcblx0XHRcdGxhYmVsID0gYDxzcGFuIHBhcnQ9XCJsYWJlbFwiPiR7bGFiZWx9PC9zcGFuPjxpbWcgcGFydD1cImljb25cIiBzcmM9XCIke25vZGUuZ2V0QXR0cmlidXRlKFxuXHRcdFx0XHRgJHtBVFRSSUJVVEVfUFJFRklYfWJ1dHRvbi1pY29uYCxcblx0XHRcdCl9XCI+YDtcblx0XHR9XG5cblx0XHRsZXQgcmVtb3ZlID0gZmFsc2U7XG5cdFx0aWYgKG5vZGUuaGFzQXR0cmlidXRlKGAke0FUVFJJQlVURV9QUkVGSVh9cmVtb3ZhYmxlYCkpIHtcblx0XHRcdHJlbW92ZSA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKG5vZGUubWF0Y2hlcyhcIi5hY3RpdmVcIikgPT09IHRydWUgJiYgZGlzYWJsZWQgIT09IHRydWUpIHtcblx0XHRcdG5vZGUuY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKTtcblx0XHRcdGFjdGl2ZVJlZmVyZW5jZSA9IHJlZmVyZW5jZTtcblx0XHR9XG5cblx0XHRjb25zdCBzdGF0ZSA9IFwiXCI7XG5cdFx0Y29uc3QgY2xhc3NlcyA9IGRpbWVuc2lvbnNDYWxjdWxhdGVkID8gXCJcIiA6IFwiaW52aXNpYmxlXCI7XG5cblx0XHRidXR0b25zLnB1c2goe1xuXHRcdFx0cmVmZXJlbmNlLFxuXHRcdFx0bGFiZWwsXG5cdFx0XHRzdGF0ZSxcblx0XHRcdGNsYXNzOiBjbGFzc2VzLFxuXHRcdFx0ZGlzYWJsZWQsXG5cdFx0XHRyZW1vdmUsXG5cdFx0fSk7XG5cblx0XHRhdHRhY2hUYWJNdXRhdGlvbk9ic2VydmVyLmNhbGwodGhpcywgbm9kZSk7XG5cdH1cblxuXHR0aGlzLnNldE9wdGlvbihcImJ1dHRvbnMuc3RhbmRhcmRcIiwgY2xvbmUoYnV0dG9ucykpO1xuXHR0aGlzLnNldE9wdGlvbihcImJ1dHRvbnMucG9wcGVyXCIsIFtdKTtcblx0dGhpcy5zZXRPcHRpb24oXCJtYXJrZXJcIiwgcmFuZG9tKCkpO1xuXG5cdHJldHVybiBhZGp1c3RCdXR0b25WaXNpYmlsaXR5LmNhbGwodGhpcykudGhlbigoKSA9PiB7XG5cdFx0aWYgKGFjdGl2ZVJlZmVyZW5jZSkge1xuXHRcdFx0cmV0dXJuIG5ldyBQcm9jZXNzaW5nKCgpID0+IHtcblx0XHRcdFx0Y29uc3QgYnV0dG9uID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XHRcdFx0YFske0FUVFJJQlVURV9QUkVGSVh9dGFiLXJlZmVyZW5jZT1cIiR7YWN0aXZlUmVmZXJlbmNlfVwiXWAsXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmIChidXR0b24gaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudCAmJiBidXR0b24uZGlzYWJsZWQgIT09IHRydWUpIHtcblx0XHRcdFx0XHRzaG93LmNhbGwodGhpcywgYnV0dG9uKTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdFx0LnJ1bih1bmRlZmluZWQpXG5cdFx0XHRcdC50aGVuKCgpID0+IHt9KVxuXHRcdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBjaGVja0FuZFJlYXJyYW5nZUJ1dHRvbnMoKSB7XG5cdGlmICh0aGlzW2RpbWVuc2lvbnNTeW1ib2xdLmdldFZpYShcImRhdGEuY2FsY3VsYXRlZFwiLCBmYWxzZSkgIT09IHRydWUpIHtcblx0XHRjYWxjdWxhdGVOYXZpZ2F0aW9uQnV0dG9uc0RpbWVuc2lvbnMuY2FsbCh0aGlzKTtcblx0fVxuXG5cdHJlYXJyYW5nZUJ1dHRvbnMuY2FsbCh0aGlzKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7UHJvbWlzZTx1bmtub3duPn1cbiAqL1xuZnVuY3Rpb24gYWRqdXN0QnV0dG9uVmlzaWJpbGl0eSgpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0Y29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbiAobXV0YXRpb25zKSB7XG5cdFx0XHRjb25zdCBkZWZDb3VudCA9IHNlbGYuZ2V0T3B0aW9uKFwiYnV0dG9ucy5zdGFuZGFyZFwiKS5sZW5ndGg7XG5cdFx0XHRjb25zdCBkb21Db3VudCA9IHNlbGZbbmF2RWxlbWVudFN5bWJvbF0ucXVlcnlTZWxlY3RvckFsbChcblx0XHRcdFx0J2J1dHRvbltkYXRhLW1vbnN0ZXItcm9sZT1cImJ1dHRvblwiXScsXG5cdFx0XHQpLmxlbmd0aDtcblxuXHRcdFx0Ly8gaW4gZHJhd2luZ1xuXHRcdFx0aWYgKGRlZkNvdW50ICE9PSBkb21Db3VudCkgcmV0dXJuO1xuXG5cdFx0XHRvYnNlcnZlci5kaXNjb25uZWN0KCk7XG5cblx0XHRcdGNoZWNrQW5kUmVhcnJhbmdlQnV0dG9ucy5jYWxsKHNlbGYpO1xuXG5cdFx0XHRyZXNvbHZlKCk7XG5cdFx0fSk7XG5cblx0XHRvYnNlcnZlci5vYnNlcnZlKHNlbGZbbmF2RWxlbWVudFN5bWJvbF0sIHtcblx0XHRcdGF0dHJpYnV0ZXM6IHRydWUsXG5cdFx0fSk7XG5cdH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZnVuY3Rpb24gZ2V0RGltVmFsdWUodmFsdWUpIHtcblx0aWYgKFt1bmRlZmluZWQsIG51bGxdLmluZGV4T2YodmFsdWUpICE9PSAtMSkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0Y29uc3QgdmFsdWVBc0ludCA9IHBhcnNlSW50KHZhbHVlLCAxMCk7XG5cblx0aWYgKGlzTmFOKHZhbHVlQXNJbnQpKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRyZXR1cm4gdmFsdWVBc0ludDtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5mdW5jdGlvbiBjYWxjQm94V2lkdGgobm9kZSkge1xuXHRjb25zdCBkaW0gPSBnZXRHbG9iYWwoXCJ3aW5kb3dcIikuZ2V0Q29tcHV0ZWRTdHlsZShub2RlKTtcblx0Y29uc3QgYm91bmRpbmcgPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG5cdHJldHVybiAoXG5cdFx0Z2V0RGltVmFsdWUoZGltW1wiYm9yZGVyLWxlZnQtd2lkdGhcIl0pICtcblx0XHRnZXREaW1WYWx1ZShkaW1bXCJwYWRkaW5nLWxlZnRcIl0pICtcblx0XHRnZXREaW1WYWx1ZShkaW1bXCJtYXJnaW4tbGVmdFwiXSkgK1xuXHRcdGdldERpbVZhbHVlKGJvdW5kaW5nW1wid2lkdGhcIl0pICtcblx0XHRnZXREaW1WYWx1ZShkaW1bXCJib3JkZXItcmlnaHQtd2lkdGhcIl0pICtcblx0XHRnZXREaW1WYWx1ZShkaW1bXCJtYXJnaW4tcmlnaHRcIl0pICtcblx0XHRnZXREaW1WYWx1ZShkaW1bXCJwYWRkaW5nLWxlZnRcIl0pXG5cdCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gcmVhcnJhbmdlQnV0dG9ucygpIHtcblx0Y29uc3Qgc3RhbmRhcmRCdXR0b25zID0gW107XG5cdGNvbnN0IHBvcHBlckJ1dHRvbnMgPSBbXTtcblxuXHRsZXQgc3VtID0gMDtcblx0Y29uc3Qgc3BhY2UgPSB0aGlzW2RpbWVuc2lvbnNTeW1ib2xdLmdldFZpYShcImRhdGEuc3BhY2VcIik7XG5cblx0Y29uc3QgYnV0dG9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwiYnV0dG9ucy5zdGFuZGFyZFwiKTtcblx0Zm9yIChjb25zdCBbLCBidXR0b25dIG9mIGJ1dHRvbnMuZW50cmllcygpKSB7XG5cdFx0Y29uc3QgcmVmID0gYnV0dG9uPy5yZWZlcmVuY2U7XG5cblx0XHRzdW0gKz0gdGhpc1tkaW1lbnNpb25zU3ltYm9sXS5nZXRWaWEoYGRhdGEuYnV0dG9uLiR7cmVmfWApO1xuXG5cdFx0aWYgKHN1bSA+IHNwYWNlKSB7XG5cdFx0XHRwb3BwZXJCdXR0b25zLnB1c2goY2xvbmUoYnV0dG9uKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHN0YW5kYXJkQnV0dG9ucy5wdXNoKGNsb25lKGJ1dHRvbikpO1xuXHRcdH1cblx0fVxuXG5cdHRoaXMuc2V0T3B0aW9uKFwiYnV0dG9ucy5zdGFuZGFyZFwiLCBzdGFuZGFyZEJ1dHRvbnMpO1xuXHR0aGlzLnNldE9wdGlvbihcImJ1dHRvbnMucG9wcGVyXCIsIHBvcHBlckJ1dHRvbnMpO1xuXG5cdGlmICh0aGlzW3N3aXRjaEVsZW1lbnRTeW1ib2xdKSB7XG5cdFx0aWYgKHBvcHBlckJ1dHRvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0dGhpc1tzd2l0Y2hFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QucmVtb3ZlKFwiaGlkZGVuXCIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzW3N3aXRjaEVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5hZGQoXCJoaWRkZW5cIik7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gY2FsY3VsYXRlTmF2aWdhdGlvbkJ1dHRvbnNEaW1lbnNpb25zKCkge1xuXHRjb25zdCB3aWR0aCA9IHRoaXNbbmF2RWxlbWVudFN5bWJvbF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG5cblx0bGV0IHN0YXJ0RW5kV2lkdGggPSAwO1xuXG5cdGdldFNsb3R0ZWRFbGVtZW50cy5jYWxsKHRoaXMsIHVuZGVmaW5lZCwgXCJzdGFydFwiKS5mb3JFYWNoKChub2RlKSA9PiB7XG5cdFx0c3RhcnRFbmRXaWR0aCArPSBjYWxjQm94V2lkdGguY2FsbCh0aGlzLCBub2RlKTtcblx0fSk7XG5cblx0Z2V0U2xvdHRlZEVsZW1lbnRzLmNhbGwodGhpcywgdW5kZWZpbmVkLCBcImVuZFwiKS5mb3JFYWNoKChub2RlKSA9PiB7XG5cdFx0c3RhcnRFbmRXaWR0aCArPSBjYWxjQm94V2lkdGguY2FsbCh0aGlzLCBub2RlKTtcblx0fSk7XG5cblx0dGhpc1tkaW1lbnNpb25zU3ltYm9sXS5zZXRWaWEoXCJkYXRhLnNwYWNlXCIsIHdpZHRoIC0gc3RhcnRFbmRXaWR0aCAtIDIpO1xuXHR0aGlzW2RpbWVuc2lvbnNTeW1ib2xdLnNldFZpYShcImRhdGEudmlzaWJsZVwiLCAhKHdpZHRoID09PSAwKSk7XG5cblx0Y29uc3QgYnV0dG9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwiYnV0dG9ucy5zdGFuZGFyZFwiKS5jb25jYXQoXG5cdFx0dGhpcy5nZXRPcHRpb24oXCJidXR0b25zLnBvcHBlclwiKSxcblx0KTtcblxuXHRmb3IgKGNvbnN0IFtpLCBidXR0b25dIG9mIGJ1dHRvbnMuZW50cmllcygpKSB7XG5cdFx0Y29uc3QgcmVmID0gYnV0dG9uPy5yZWZlcmVuY2U7XG5cdFx0Y29uc3QgZWxlbWVudCA9IHRoaXNbbmF2RWxlbWVudFN5bWJvbF0ucXVlcnlTZWxlY3Rvcihcblx0XHRcdGA6c2NvcGUgPiBbJHtBVFRSSUJVVEVfUFJFRklYfXRhYi1yZWZlcmVuY2U9XCIke3JlZn1cIl1gLFxuXHRcdCk7XG5cdFx0aWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxCdXR0b25FbGVtZW50KSkgY29udGludWU7XG5cblx0XHR0aGlzW2RpbWVuc2lvbnNTeW1ib2xdLnNldFZpYShcblx0XHRcdGBkYXRhLmJ1dHRvbi4ke3JlZn1gLFxuXHRcdFx0Y2FsY0JveFdpZHRoLmNhbGwodGhpcywgZWxlbWVudCksXG5cdFx0KTtcblx0XHRidXR0b25bXCJjbGFzc1wiXSA9IG5ldyBUb2tlbkxpc3QoYnV0dG9uW1wiY2xhc3NcIl0pXG5cdFx0XHQucmVtb3ZlKFwiaW52aXNpYmxlXCIpXG5cdFx0XHQudG9TdHJpbmcoKTtcblx0fVxuXG5cdGNvbnN0IHNsb3RzID0gdGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0ucXVlcnlTZWxlY3RvckFsbChcblx0XHRgbmF2WyR7QVRUUklCVVRFX1BSRUZJWH1yb2xlPW5hdl0gPiBzbG90LmludmlzaWJsZSwgc2xvdFske0FUVFJJQlVURV9QUkVGSVh9cm9sZT1zbG90XS5pbnZpc2libGVgLFxuXHQpO1xuXHRmb3IgKGNvbnN0IFssIHNsb3RdIG9mIHNsb3RzLmVudHJpZXMoKSkge1xuXHRcdHNsb3QuY2xhc3NMaXN0LnJlbW92ZShcImludmlzaWJsZVwiKTtcblx0fVxuXG5cdHRoaXNbZGltZW5zaW9uc1N5bWJvbF0uc2V0VmlhKFwiZGF0YS5jYWxjdWxhdGVkXCIsIHRydWUpO1xuXHR0aGlzLnNldE9wdGlvbihcImJ1dHRvbnMuc3RhbmRhcmRcIiwgY2xvbmUoYnV0dG9ucykpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBub2RlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldEJ1dHRvbkxhYmVsKG5vZGUpIHtcblx0bGV0IGxhYmVsO1xuXHRsZXQgc2V0TGFiZWwgPSBmYWxzZTtcblx0aWYgKG5vZGUuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9CVVRUT05fTEFCRUwpKSB7XG5cdFx0bGFiZWwgPSBub2RlLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfQlVUVE9OX0xBQkVMKTtcblx0fSBlbHNlIHtcblx0XHRsYWJlbCA9IG5vZGUuaW5uZXJUZXh0O1xuXHRcdHNldExhYmVsID0gdHJ1ZTtcblx0fVxuXG5cdGlmICghaXNTdHJpbmcobGFiZWwpKSB7XG5cdFx0bGFiZWwgPSBcIlwiO1xuXHR9XG5cblx0bGFiZWwgPSBsYWJlbC50cmltKCk7XG5cblx0aWYgKGxhYmVsID09PSBcIlwiKSB7XG5cdFx0bGFiZWwgPSB0aGlzLmdldE9wdGlvbihcImxhYmVscy5uZXctdGFiLWxhYmVsXCIsIFwiTmV3IFRhYlwiKTtcblx0fVxuXG5cdGlmIChsYWJlbC5sZW5ndGggPiAxMDApIHtcblx0XHRsYWJlbCA9IGAke2xhYmVsLnN1YnN0cmluZygwLCA5OSl9XHUyMDI2YDtcblx0fVxuXG5cdGlmIChzZXRMYWJlbCA9PT0gdHJ1ZSkge1xuXHRcdG5vZGUuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9CVVRUT05fTEFCRUwsIGxhYmVsKTtcblx0fVxuXG5cdHJldHVybiBsYWJlbDtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuICAgICAgICA8dGVtcGxhdGUgaWQ9XCJidXR0b25zXCI+XG4gICAgICAgICAgICA8YnV0dG9uIHBhcnQ9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzIHBhdGg6Y2xhc3Nlcy5idXR0b24sXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1zdGF0ZSBwYXRoOmJ1dHRvbnMuc3RhdGUsXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkIHBhdGg6YnV0dG9ucy5kaXNhYmxlZCB8IGlmOnRydWUsICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXRhYi1yZWZlcmVuY2UgcGF0aDpidXR0b25zLnJlZmVyZW5jZVwiPjxzcGFuXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpidXR0b25zLmxhYmVsXCI+PC9zcGFuPjxzcGFuIHBhcnQ9XCJyZW1vdmUtdGFiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2xhc3MgcGF0aDpidXR0b25zLnJlbW92ZSB8ID86cmVtb3ZlLXRhYjpoaWRkZW4gXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwicmVtb3ZlLXRhYlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCI+PC9zcGFuPjwvYnV0dG9uPlxuICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udHJvbFwiIHBhcnQ9XCJjb250cm9sXCI+XG4gICAgICAgICAgICA8bmF2IGRhdGEtbW9uc3Rlci1yb2xlPVwibmF2XCIgcGFydD1cIm5hdlwiXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiZGF0YS1tb25zdGVyLW1hcmtlciBwYXRoOm1hcmtlciwgY2xhc3MgcGF0aDpjbGFzc2VzLm5hdmlnYXRpb25cIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItaW5zZXJ0PVwiYnV0dG9ucyBwYXRoOmJ1dHRvbnMuc3RhbmRhcmRcIj5cbiAgICAgICAgICAgICAgICA8c2xvdCBuYW1lPVwic3RhcnRcIiBjbGFzcz1cImludmlzaWJsZVwiPjwvc2xvdD5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwicG9wcGVyXCIgcGFydD1cInBvcHBlclwiIHRhYmluZGV4PVwiLTFcIlxuXHRcdFx0XHRcdCBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNsYXNzIHBhdGg6Y2xhc3Nlcy5wb3BwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLXBvcHBlci1hcnJvdz48L2Rpdj5cblxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgcGFydD1cInBvcHBlci1uYXZcIiBkYXRhLW1vbnN0ZXItcm9sZT1cInBvcHBlci1uYXZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1pbnNlcnQ9XCJidXR0b25zIHBhdGg6YnV0dG9ucy5wb3BwZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8c2xvdCBuYW1lPVwicG9wcGVyXCIgY2xhc3M9XCJpbnZpc2libGVcIj48L3Nsb3Q+XG4gICAgICAgICAgICAgICAgPHNsb3QgbmFtZT1cImVuZFwiIGNsYXNzPVwiaW52aXNpYmxlXCI+PC9zbG90PlxuICAgICAgICAgICAgPC9uYXY+XG4gICAgICAgICAgICA8c2xvdCBkYXRhLW1vbnN0ZXItcm9sZT1cInNsb3RcIiBjbGFzcz1cImludmlzaWJsZVwiPjwvc2xvdD5cbiAgICAgICAgPC9kaXY+YDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KFRhYnMpO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywgMjAyNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IE1lc3NhZ2VTdHlsZVNoZWV0IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBNZXNzYWdlU3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG5cdE1lc3NhZ2VTdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIG1lc3NhZ2UgeyBcbjp3aGVyZShodG1sKXtsaW5lLWhlaWdodDoxLjE1Oy13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlOy1tb3otdGV4dC1zaXplLWFkanVzdDoxMDAlO3RleHQtc2l6ZS1hZGp1c3Q6MTAwJX06d2hlcmUoaDEpe2ZvbnQtc2l6ZToyZW07bWFyZ2luLWJsb2NrLWVuZDouNjdlbTttYXJnaW4tYmxvY2stc3RhcnQ6LjY3ZW19OndoZXJlKGRsLG9sLHVsKSA6d2hlcmUoZGwsb2wsdWwpe21hcmdpbi1ibG9jay1lbmQ6MDttYXJnaW4tYmxvY2stc3RhcnQ6MH06d2hlcmUoaHIpe2JveC1zaXppbmc6Y29udGVudC1ib3g7Y29sb3I6aW5oZXJpdDtoZWlnaHQ6MH06d2hlcmUoYWJiclt0aXRsZV0pe3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7LXdlYmtpdC10ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZH06d2hlcmUoYixzdHJvbmcpe2ZvbnQtd2VpZ2h0OmJvbGRlcn06d2hlcmUoY29kZSxrYmQscHJlLHNhbXApe2ZvbnQtZmFtaWx5Om1vbm9zcGFjZSxtb25vc3BhY2U7Zm9udC1zaXplOjFlbX06d2hlcmUoc21hbGwpe2ZvbnQtc2l6ZTo4MCV9OndoZXJlKHRhYmxlKXtib3JkZXItY29sb3I6Y3VycmVudENvbG9yO3RleHQtaW5kZW50OjB9OndoZXJlKGJ1dHRvbixpbnB1dCxzZWxlY3Qpe21hcmdpbjowfTp3aGVyZShidXR0b24pe3RleHQtdHJhbnNmb3JtOm5vbmV9OndoZXJlKGJ1dHRvbixpbnB1dDppcyhbdHlwZT1idXR0b24gaV0sW3R5cGU9cmVzZXQgaV0sW3R5cGU9c3VibWl0IGldKSl7LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbn06d2hlcmUocHJvZ3Jlc3Mpe3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfTp3aGVyZShzZWxlY3Qpe3RleHQtdHJhbnNmb3JtOm5vbmV9OndoZXJlKHRleHRhcmVhKXttYXJnaW46MH06d2hlcmUoaW5wdXRbdHlwZT1zZWFyY2ggaV0pey13ZWJraXQtYXBwZWFyYW5jZTp0ZXh0ZmllbGQ7b3V0bGluZS1vZmZzZXQ6LTJweH06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfTo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjppbmhlcml0O29wYWNpdHk6LjU0fTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b247Zm9udDppbmhlcml0fTp3aGVyZShidXR0b24saW5wdXQ6aXMoW3R5cGU9YnV0dG9uIGldLFt0eXBlPWNvbG9yIGldLFt0eXBlPXJlc2V0IGldLFt0eXBlPXN1Ym1pdCBpXSkpOjotbW96LWZvY3VzLWlubmVye2JvcmRlci1zdHlsZTpub25lO3BhZGRpbmc6MH06d2hlcmUoYnV0dG9uLGlucHV0OmlzKFt0eXBlPWJ1dHRvbiBpXSxbdHlwZT1jb2xvciBpXSxbdHlwZT1yZXNldCBpXSxbdHlwZT1zdWJtaXQgaV0pKTo6LW1vei1mb2N1c3Jpbmd7b3V0bGluZToxcHggZG90dGVkIEJ1dHRvblRleHR9OndoZXJlKDotbW96LXVpLWludmFsaWQpe2JveC1zaGFkb3c6bm9uZX06d2hlcmUoZGlhbG9nKXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOnNvbGlkO2NvbG9yOiMwMDA7aGVpZ2h0Oi1tb3otZml0LWNvbnRlbnQ7aGVpZ2h0OmZpdC1jb250ZW50O2xlZnQ6MDttYXJnaW46YXV0bztwYWRkaW5nOjFlbTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3dpZHRoOi1tb3otZml0LWNvbnRlbnQ7d2lkdGg6Zml0LWNvbnRlbnR9OndoZXJlKGRpYWxvZzpub3QoW29wZW5dKSl7ZGlzcGxheTpub25lfTp3aGVyZShzdW1tYXJ5KXtkaXNwbGF5Omxpc3QtaXRlbX1odG1se2hlaWdodDoxMDAlfWJvZHksaHRtbHttaW4taGVpZ2h0OmNhbGMoMTAwdmggLSA0MHB4KX1ib2R5e2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXJnaW46MDtwYWRkaW5nOjA7d29yZC1icmVhazpicmVhay13b3JkfS5ibG9ja3tkaXNwbGF5OmJsb2NrfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uZ3JpZHtkaXNwbGF5OmdyaWR9LmlubGluZS1ncmlke2Rpc3BsYXk6aW5saW5lLWdyaWR9LmZsZXh7ZGlzcGxheTpmbGV4fS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS5oaWRkZW4sLmhpZGUsLm5vbmV7ZGlzcGxheTpub25lfS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMiwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0zLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItMHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXdpZHRoOjB9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMSwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0zLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZ3JheS0xOiNmNmY2ZjY7LS1tb25zdGVyLWNvbG9yLWdyYXktMjojZTJlMmUyOy0tbW9uc3Rlci1jb2xvci1ncmF5LTM6IzhiOGI4YjstLW1vbnN0ZXItY29sb3ItZ3JheS00OiM2ZjZmNmY7LS1tb25zdGVyLWNvbG9yLWdyYXktNTojM2UzZTNlOy0tbW9uc3Rlci1jb2xvci1ncmF5LTY6IzIyMjstLW1vbnN0ZXItY29sb3Itcm9zZS0xOiNmZmY3Zjk7LS1tb25zdGVyLWNvbG9yLXJvc2UtMjojZmZkY2U1Oy0tbW9uc3Rlci1jb2xvci1yb3NlLTM6I2ZmM2I4ZDstLW1vbnN0ZXItY29sb3Itcm9zZS00OiNkYjAwNzI7LS1tb25zdGVyLWNvbG9yLXJvc2UtNTojODAwMDQwOy0tbW9uc3Rlci1jb2xvci1yb3NlLTY6IzRjMDAyMzstLW1vbnN0ZXItY29sb3ItcmFzcGJlcnJ5LTE6I2ZmZjhmODstLW1vbnN0ZXItY29sb3ItcmFzcGJlcnJ5LTI6I2ZmZGRkZjstLW1vbnN0ZXItY29sb3ItcmFzcGJlcnJ5LTM6I2ZmNDI2YzstLW1vbnN0ZXItY29sb3ItcmFzcGJlcnJ5LTQ6I2RlMDA1MTstLW1vbnN0ZXItY29sb3ItcmFzcGJlcnJ5LTU6IzgyMDAyYzstLW1vbnN0ZXItY29sb3ItcmFzcGJlcnJ5LTY6IzUxMDAxODstLW1vbnN0ZXItY29sb3ItcmVkLTE6I2ZmZjhmNjstLW1vbnN0ZXItY29sb3ItcmVkLTI6I2ZmZGRkODstLW1vbnN0ZXItY29sb3ItcmVkLTM6I2ZmNDY0NzstLW1vbnN0ZXItY29sb3ItcmVkLTQ6I2UwMDAyYjstLW1vbnN0ZXItY29sb3ItcmVkLTU6IzgzMDAxNDstLW1vbnN0ZXItY29sb3ItcmVkLTY6IzUzMDAwMzstLW1vbnN0ZXItY29sb3Itb3JhbmdlLTE6I2ZmZjhmNTstLW1vbnN0ZXItY29sb3Itb3JhbmdlLTI6I2ZmZGVkMTstLW1vbnN0ZXItY29sb3Itb3JhbmdlLTM6I2ZkNGQwMDstLW1vbnN0ZXItY29sb3Itb3JhbmdlLTQ6I2NkM2MwMDstLW1vbnN0ZXItY29sb3Itb3JhbmdlLTU6Izc1MjEwMDstLW1vbnN0ZXItY29sb3Itb3JhbmdlLTY6IzQwMTYwMDstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMTojZmZmOGYzOy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0yOiNmZmRmYzY7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTM6I2Q1NzMwMDstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tNDojYWM1YzAwOy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi01OiM2MzMzMDA7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTY6IzM3MWQwMDstLW1vbnN0ZXItY29sb3ItYW1iZXItMTojZmZmOGVmOy0tbW9uc3Rlci1jb2xvci1hbWJlci0yOiNmZmUwYjI7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTM6I2I5ODMwMDstLW1vbnN0ZXItY29sb3ItYW1iZXItNDojOTI2NzAwOy0tbW9uc3Rlci1jb2xvci1hbWJlci01OiM1MjM4MDA7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTY6IzMwMjEwMDstLW1vbnN0ZXItY29sb3IteWVsbG93LTE6I2ZmZjllNTstLW1vbnN0ZXItY29sb3IteWVsbG93LTI6I2ZmZTUzZTstLW1vbnN0ZXItY29sb3IteWVsbG93LTM6IzljOGIwMDstLW1vbnN0ZXItY29sb3IteWVsbG93LTQ6IzdkNmYwMDstLW1vbnN0ZXItY29sb3IteWVsbG93LTU6IzQ2M2QwMDstLW1vbnN0ZXItY29sb3IteWVsbG93LTY6IzI5MjMwMDstLW1vbnN0ZXItY29sb3ItbGltZS0xOiNmN2ZmYWM7LS1tb25zdGVyLWNvbG9yLWxpbWUtMjojZDVmMjAwOy0tbW9uc3Rlci1jb2xvci1saW1lLTM6IzgxOTMwMDstLW1vbnN0ZXItY29sb3ItbGltZS00OiM2Nzc2MDA7LS1tb25zdGVyLWNvbG9yLWxpbWUtNTojMzk0MTAwOy0tbW9uc3Rlci1jb2xvci1saW1lLTY6IzIyMjYwMDstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS0xOiNlNWZmYzM7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtMjojOThmYjAwOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTM6IzVjOWIwMDstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS00OiM0OTdjMDA7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtNTojMjY0NTAwOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTY6IzE4MjYwMDstLW1vbnN0ZXItY29sb3ItZ3JlZW4tMTojZTBmZmQ5Oy0tbW9uc3Rlci1jb2xvci1ncmVlbi0yOiM3MmZmNmM7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTM6IzAwYTIxZjstLW1vbnN0ZXItY29sb3ItZ3JlZW4tNDojMDA4MjE3Oy0tbW9uc3Rlci1jb2xvci1ncmVlbi01OiMwMDQ5MDg7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTY6IzA2MjgwMDstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC0xOiNkY2ZmZTY7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtMjojNWRmZmEyOy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTM6IzAwYTA1YTstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC00OiMwMDgxNDc7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtNTojMDA0ODI1Oy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTY6IzAwMjgxMjstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS0xOiNkYWZmZWY7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtMjojNDJmZmM2Oy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTM6IzAwOWY3ODstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS00OiMwMDdmNWY7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtNTojMDA0NzM0Oy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTY6IzAwMjgxYjstLW1vbnN0ZXItY29sb3ItdGVhbC0xOiNkN2ZmZjc7LS1tb25zdGVyLWNvbG9yLXRlYWwtMjojMDBmZmU0Oy0tbW9uc3Rlci1jb2xvci10ZWFsLTM6IzAwOWU4YzstLW1vbnN0ZXItY29sb3ItdGVhbC00OiMwMDdjNmU7LS1tb25zdGVyLWNvbG9yLXRlYWwtNTojMDA0NDNjOy0tbW9uc3Rlci1jb2xvci10ZWFsLTY6IzAwMjcyMjstLW1vbnN0ZXItY29sb3ItY3lhbi0xOiNjNGZmZmU7LS1tb25zdGVyLWNvbG9yLWN5YW4tMjojMDBmYWZiOy0tbW9uc3Rlci1jb2xvci1jeWFuLTM6IzAwOTk5YTstLW1vbnN0ZXItY29sb3ItY3lhbi00OiMwMDdhN2I7LS1tb25zdGVyLWNvbG9yLWN5YW4tNTojMDA0MzQ0Oy0tbW9uc3Rlci1jb2xvci1jeWFuLTY6IzAwMjUyNTstLW1vbnN0ZXItY29sb3ItcG93ZGVyLTE6I2RhZmFmZjstLW1vbnN0ZXItY29sb3ItcG93ZGVyLTI6IzhkZjBmZjstLW1vbnN0ZXItY29sb3ItcG93ZGVyLTM6IzAwOThhOTstLW1vbnN0ZXItY29sb3ItcG93ZGVyLTQ6IzAwNzk4NzstLW1vbnN0ZXItY29sb3ItcG93ZGVyLTU6IzAwNDA0ODstLW1vbnN0ZXItY29sb3ItcG93ZGVyLTY6IzAwMjIyNzstLW1vbnN0ZXItY29sb3Itc2t5LTE6I2UzZjdmZjstLW1vbnN0ZXItY29sb3Itc2t5LTI6I2FlZTlmZjstLW1vbnN0ZXItY29sb3Itc2t5LTM6IzAwOTRiNDstLW1vbnN0ZXItY29sb3Itc2t5LTQ6IzAwNzU5MDstLW1vbnN0ZXItY29sb3Itc2t5LTU6IzAwNDA0ZjstLW1vbnN0ZXItY29sb3Itc2t5LTY6IzAwMWYyODstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tMTojZThmNmZmOy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi0yOiNiOWUzZmY7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTM6IzAwOTJjNTstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tNDojMDA3NDlkOy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi01OiMwMDNjNTQ7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTY6IzAwMWQyYTstLW1vbnN0ZXItY29sb3ItYXp1cmUtMTojZThmMmZmOy0tbW9uc3Rlci1jb2xvci1henVyZS0yOiNjNmUwZmY7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTM6IzAwOGZkYjstLW1vbnN0ZXItY29sb3ItYXp1cmUtNDojMDA3MWFmOy0tbW9uc3Rlci1jb2xvci1henVyZS01OiMwMDNiNWU7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTY6IzAwMWMzMDstLW1vbnN0ZXItY29sb3ItYmx1ZS0xOiNmMGY0ZmY7LS1tb25zdGVyLWNvbG9yLWJsdWUtMjojZDRlMGZmOy0tbW9uc3Rlci1jb2xvci1ibHVlLTM6IzAwODlmYzstLW1vbnN0ZXItY29sb3ItYmx1ZS00OiMwMDZkY2E7LS1tb25zdGVyLWNvbG9yLWJsdWUtNTojMDAzODZkOy0tbW9uc3Rlci1jb2xvci1ibHVlLTY6IzAwMWEzOTstLW1vbnN0ZXItY29sb3ItaW5kaWdvLTE6I2YzZjNmZjstLW1vbnN0ZXItY29sb3ItaW5kaWdvLTI6I2RlZGRmZjstLW1vbnN0ZXItY29sb3ItaW5kaWdvLTM6IzY1N2VmZjstLW1vbnN0ZXItY29sb3ItaW5kaWdvLTQ6IzAwNjFmYzstLW1vbnN0ZXItY29sb3ItaW5kaWdvLTU6IzAwMzI4YTstLW1vbnN0ZXItY29sb3ItaW5kaWdvLTY6IzAwMTY0OTstLW1vbnN0ZXItY29sb3ItdmlvbGV0LTE6I2Y3ZjFmZjstLW1vbnN0ZXItY29sb3ItdmlvbGV0LTI6I2U4ZGFmZjstLW1vbnN0ZXItY29sb3ItdmlvbGV0LTM6IzliNzBmZjstLW1vbnN0ZXItY29sb3ItdmlvbGV0LTQ6Izc5NGFmZjstLW1vbnN0ZXItY29sb3ItdmlvbGV0LTU6IzJkMGZiZjstLW1vbnN0ZXItY29sb3ItdmlvbGV0LTY6IzBiMDA3NDstLW1vbnN0ZXItY29sb3ItcHVycGxlLTE6I2ZkZjRmZjstLW1vbnN0ZXItY29sb3ItcHVycGxlLTI6I2Y3ZDlmZjstLW1vbnN0ZXItY29sb3ItcHVycGxlLTM6I2QxNTBmZjstLW1vbnN0ZXItY29sb3ItcHVycGxlLTQ6I2IwMWZlMzstLW1vbnN0ZXItY29sb3ItcHVycGxlLTU6IzY2MDA4NzstLW1vbnN0ZXItY29sb3ItcHVycGxlLTY6IzNhMDA0ZjstLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xOiNmZmYzZmM7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMjojZmZkN2Y2Oy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTM6I2Y5MTFlMDstLW1vbnN0ZXItY29sb3ItbWFnZW50YS00OiNjYTAwYjY7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNTojNzQwMDY4Oy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTY6IzQ0MDAzYzstLW1vbnN0ZXItY29sb3ItcGluay0xOiNmZmY3ZmI7LS1tb25zdGVyLWNvbG9yLXBpbmstMjojZmZkY2VjOy0tbW9uc3Rlci1jb2xvci1waW5rLTM6I2ZmMmZiMjstLW1vbnN0ZXItY29sb3ItcGluay00OiNkMjAwOGY7LS1tb25zdGVyLWNvbG9yLXBpbmstNTojNzkwMDUxOy0tbW9uc3Rlci1jb2xvci1waW5rLTY6IzRiMDAzMDstLW1vbnN0ZXItZ3JhZGllbnQtdGFuZ2VyaW5lLTE6I2U1Yjg3NTstLW1vbnN0ZXItZ3JhZGllbnQtdGFuZ2VyaW5lLTI6I2Q5YTM2MjstLW1vbnN0ZXItZ3JhZGllbnQtdGFuZ2VyaW5lLTM6I2MwOGE0ZTstLW1vbnN0ZXItZ3JhZGllbnQtdGFuZ2VyaW5lLTQ6I2E3NzEzYjstLW1vbnN0ZXItZ3JhZGllbnQtdGFuZ2VyaW5lLTU6IzhmNWEyODstLW1vbnN0ZXItZ3JhZGllbnQtdGFuZ2VyaW5lLTY6IzM2MDUwNTstLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtMTojZjdmNWVmOy0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC0yOiNlNWUyZDk7LS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTM6I2NiYzZiMzstLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtNDojYTE5ZDhhOy0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC01OiM3YTc1NjY7LS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTY6IzUxNGQzZn0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktZGlzYWJsZWQtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMSl9Lm1vbnN0ZXItdGhlbWUtc2Vjb25kYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci10aGVtZS10ZXJ0aWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLXRoZW1lLWRlc3RydWN0aXZlLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMSl9Lm1vbnN0ZXItdGhlbWUtc3VjY2Vzcy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xKX0ubW9uc3Rlci10aGVtZS13YXJuaW5nLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTEpfS5tb25zdGVyLXRoZW1lLWVycm9yLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMSl9Lm1vbnN0ZXItdGhlbWUtc2VsZWN0aW9uLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX0ubW9uc3Rlci1ib3JkZXItY29sb3ItMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ib3JkZXItMSl9Lm1vbnN0ZXItY29sb3ItbmV1dHJhbC0xe2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1jb2xvci1wcmltYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItY29sb3ItdGVydGlhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTEpfS5tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMSl9Lm1vbnN0ZXItY29sb3Itd2FybmluZy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0xKX0ubW9uc3Rlci1jb2xvci1lcnJvci0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTEpfS5tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTIpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTIpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMil9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0yKX0ubW9uc3Rlci10aGVtZS1lcnJvci0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTIpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMil9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTIpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtMntjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yKX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTIpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMil9Lm1vbnN0ZXItY29sb3ItZXJyb3ItMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0yKX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTIpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS1kaXNhYmxlZC0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zKX0ubW9uc3Rlci10aGVtZS1zZWNvbmRhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLXRoZW1lLXRlcnRpYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItdGhlbWUtZGVzdHJ1Y3RpdmUtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zKX0ubW9uc3Rlci10aGVtZS1zdWNjZXNzLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTMpfS5tb25zdGVyLXRoZW1lLXdhcm5pbmctM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMyl9Lm1vbnN0ZXItdGhlbWUtZXJyb3ItM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0zKX0ubW9uc3Rlci10aGVtZS1zZWxlY3Rpb24tM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTMpfS5tb25zdGVyLWJvcmRlci1jb2xvci0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWJvcmRlci0zKX0ubW9uc3Rlci1jb2xvci1uZXV0cmFsLTN7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWNvbG9yLXByaW1hcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMyl9Lm1vbnN0ZXItY29sb3Itc3VjY2Vzcy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zKX0ubW9uc3Rlci1jb2xvci13YXJuaW5nLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTMpfS5tb25zdGVyLWNvbG9yLWVycm9yLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMyl9Lm1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktZGlzYWJsZWQtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNCl9Lm1vbnN0ZXItdGhlbWUtc2Vjb25kYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci10aGVtZS10ZXJ0aWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLXRoZW1lLWRlc3RydWN0aXZlLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNCl9Lm1vbnN0ZXItdGhlbWUtc3VjY2Vzcy00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00KX0ubW9uc3Rlci10aGVtZS13YXJuaW5nLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQpfS5tb25zdGVyLXRoZW1lLWVycm9yLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItNCl9Lm1vbnN0ZXItdGhlbWUtc2VsZWN0aW9uLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00KX0ubW9uc3Rlci1ib3JkZXItY29sb3ItNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ib3JkZXItNCl9Lm1vbnN0ZXItY29sb3ItbmV1dHJhbC00e2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci1jb2xvci1wcmltYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItY29sb3ItdGVydGlhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQpfS5tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNCl9Lm1vbnN0ZXItY29sb3Itd2FybmluZy00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy00KX0ubW9uc3Rlci1jb2xvci1lcnJvci00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTQpfS5tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNCl9Lm1vbnN0ZXItdGhlbWUtY29udHJvbC1jb250YWluZXItMSwubW9uc3Rlci10aGVtZS1jb250cm9sLXJvdy0xe2JvcmRlcjoxcHggc29saWQgdmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1jb2xvcil9Lm1vbnN0ZXItdGhlbWUtY29udHJvbC1jb250YWluZXItMSwubW9uc3Rlci10aGVtZS1jb250cm9sLWVsZW1lbnQsLm1vbnN0ZXItdGhlbWUtY29udHJvbC1yb3ctMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWNvbG9yKX0ubW9uc3Rlci10aGVtZS1jb250cm9sLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmctY29sb3IpfS5tb25zdGVyLXRoZW1lLWJhY2tncm91bmQtaW5oZXJpdHtiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXQhaW1wb3J0YW50fS5tb25zdGVyLXRoZW1lLW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1vbi1iZy1jb2xvcik7Y29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1vbi1jb2xvcil9Lm1vbnN0ZXItdGhlbWUtb2Zme2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1vZmYtYmctY29sb3IpO2NvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtb2ZmLWNvbG9yKX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17Ym94LXNpemluZzpib3JkZXItYm94O291dGxpbmU6bm9uZX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0uZmxleHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd306aG9zdHtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpibG9ja31bZGF0YS1tb25zdGVyLXJvbGU9bWVzc2FnZV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47cGFkZGluZzo4cHg7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udGVudF17ZmxleC1ncm93OjI7QG1peGlucyBwYXJhZ3JhcGh9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIFtkYXRhLW1vbnN0ZXItcm9sZT1jbG9zZV17Y3Vyc29yOnBvaW50ZXI7aGVpZ2h0OjE2cHg7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LTEwcHg7dG9wOi01cHg7d2lkdGg6MTZweDt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1tb2RhbC1vdmVybGF5KX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gW2RhdGEtbW9uc3Rlci1yb2xlPWNsb3NlXTpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmJsb2NrO2hlaWdodDoxMDAlOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J000LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMEw4IDcuMjkzbDIuNjQ2LTIuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC43MDcgOGwyLjY0NyAyLjY0NmEuNS41IDAgMCAxLS43MDguNzA4TDggOC43MDdsLTIuNjQ2IDIuNjQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4TDcuMjkzIDggNC42NDYgNS4zNTRhLjUuNSAwIDAgMSAwLS43MDgnLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjEwMCV9IFxufWAsXG5cdFx0MCxcblx0KTtcbn0gY2F0Y2ggKGUpIHtcblx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0ZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKSxcblx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdGUgKyBcIlwiLFxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7XG5cdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdEFUVFJJQlVURV9QUkVGSVgsXG5cdEFUVFJJQlVURV9ST0xFLFxufSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRDdXN0b21FbGVtZW50LFxuXHRpbml0TWV0aG9kU3ltYm9sLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50IH0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IE1lc3NhZ2VTdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9tZXNzYWdlLm1qc1wiO1xuXG5leHBvcnQgeyBNZXNzYWdlIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNvbnRyb2xFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiY29udHJvbEVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHJlbW92ZUVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJyZW1vdmVFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCB0aW1lclN5bWJvbCA9IFN5bWJvbChcInRpbWVyXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBtb3VzZWVudGVyRXZlbnRIYW5kbGVyU3ltYm9sID0gU3ltYm9sKFwibW91c2VlbnRlckV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgbW91c2VsZWF2ZUV2ZW50SGFuZGxlclN5bWJvbCA9IFN5bWJvbChcIm1vdXNlbGVhdmVFdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHJlbW92ZUV2ZW50SGFuZGxlclN5bWJvbCA9IFN5bWJvbChcInJlbW92ZUV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBUaGlzIEN1c3RvbUNvbnRyb2wgY3JlYXRlcyBhIG5vdGlmaWNhdGlvbiBlbGVtZW50IHdpdGggYSB2YXJpZXR5IG9mIG9wdGlvbnMuXG4gKlxuICogPGltZyBzcmM9XCIuL2ltYWdlcy9tZXNzYWdlLnBuZ1wiPlxuICpcbiAqIERlcGVuZGVuY2llczogdGhlIHN5c3RlbSB1c2VzIGZ1bmN0aW9ucyBvZiB0aGUgW21vbnN0ZXJqc10oaHR0cHM6Ly9tb25zdGVyanMub3JnLykgbGlicmFyeS5cbiAqXG4gKiBZb3UgY2FuIGNyZWF0ZSB0aGlzIGNvbnRyb2wgZWl0aGVyIGJ5IHNwZWNpZnlpbmcgdGhlIEhUTUwgdGFnIGA8bW9uc3Rlci1ub3RpZnktbWVzc2FnZSAvPmAgZGlyZWN0bHkgaW4gdGhlIEhUTUxcbiAqXG4gKiBgYGBodG1sXG4gKiA8bW9uc3Rlci1ub3RpZnktbWVzc2FnZT48L21vbnN0ZXItbm90aWZ5LW1lc3NhZ2U+XG4gKiBgYGBcbiAqXG4gKiBvciB1c2luZyBKYXZhc2NyaXB0IHZpYSB0aGUgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItbm90aWZ5Jyk7YCBtZXRob2QuXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0ICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS9jb21wb25lbnRzL25vdGlmeS9tZXNzYWdlLmpzJztcbiAqIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItbm90aWZ5LW1lc3NhZ2UnKTtcbiAqIGBgYFxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vLi4vZXhhbXBsZS9jb21wb25lbnRzL25vdGlmeS9tZXNzYWdlLm1qc1xuICogQHN0YXJ0dW1sIG1lc3NhZ2UucG5nXG4gKiBza2lucGFyYW0gbW9ub2Nocm9tZSB0cnVlXG4gKiBza2lucGFyYW0gc2hhZG93aW5nIGZhbHNlXG4gKiBIVE1MRWxlbWVudCA8fC0tIEN1c3RvbUVsZW1lbnRcbiAqIEN1c3RvbUVsZW1lbnQgPHwtLSBNZXNzYWdlXG4gKiBAZW5kdW1sXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIGhpZ2hseSBjb25maWd1cmFibGUgc2VsZWN0IGNvbnRyb2xcbiAqL1xuY2xhc3MgTWVzc2FnZSBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuXHQvKipcblx0ICogVGhlIGRlZmF1bHRzIGNhbiBiZSBzZXQgZWl0aGVyIGRpcmVjdGx5IGluIHRoZSBvYmplY3Qgb3IgdmlhIGFuIGF0dHJpYnV0ZSBpbiB0aGUgSFRNTCB0YWcuXG5cdCAqIFRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgaW4gdGhlIEhUTUwgdGFnIG11c3QgYmUgYSBKU09OIHN0cmluZy5cblx0ICpcblx0ICogYGBgXG5cdCAqIDxtb25zdGVyLW1lc3NhZ2UgZGF0YS1tb25zdGVyLW9wdGlvbnM9XCJ7fVwiPjwvbW9uc3Rlci1tZXNzYWdlPlxuXHQgKiBgYGBcblx0ICpcblx0ICogU2luY2UgMS4xOC4wIHRoZSBKU09OIGNhbiBiZSBzcGVjaWZpZWQgYXMgYSBEYXRhVVJJLlxuXHQgKlxuXHQgKiBgYGBcblx0ICogbmV3IE1vbnN0ZXIuVHlwZXMuRGF0YVVybChidG9hKEpTT04uc3RyaW5naWZ5KHtcblx0ICogICAgICAgIHRpbWVvdXQ6IDMwMDAsXG5cdCAqICAgICAgICBmZWF0dXJlczoge1xuXHQgKiAgICAgICAgICBjbG9zZTogdHJ1ZSxcblx0ICogICAgICAgICAgZGlzYXBwZWFyOiB0cnVlXG5cdCAqICAgICAgICB9XG5cdCAqICAgIH0pKSwnYXBwbGljYXRpb24vanNvbicsdHJ1ZSkudG9TdHJpbmcoKVxuXHQgKiBgYGBcblx0ICpcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIFRlbXBsYXRlIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7aW50ZWdlcn0gdGltZW91dCB0aW1lIGluIG1pbGxpc2Vjb25kcyB1bnRpbCB0aGUgbWVzc2FnZSBzaG91bGQgYmUgcmVtb3ZlZC4gVGhlIHRpbWVvdXQgY2FuIGJlIGRpc2FibGVkIHZpYSB0aGUgZmVhdHVyZSBgZGlzYXBwZWFyYC5cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZlYXR1cmVzXG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZmVhdHVyZXMuY2xvc2Ugc2hvdyBjbG9zZSBidXR0b25cblx0ICogQHByb3BlcnR5IHtib29sZWFufSBmZWF0dXJlcy5kaXNhcHBlYXIgYXV0b21hdGljYWxseSByZW1vdmUgdGhlIG1lc3NhZ2UgYWZ0ZXIgdGhlIHRpbWVvdXRcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICpcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbihcblx0XHRcdHt9LFxuXHRcdFx0c3VwZXIuZGVmYXVsdHMsXG5cdFx0XHR7XG5cdFx0XHRcdHRpbWVvdXQ6IDYwMDAsXG5cdFx0XHRcdGZlYXR1cmVzOiB7XG5cdFx0XHRcdFx0Y2xvc2U6IHRydWUsXG5cdFx0XHRcdFx0ZGlzYXBwZWFyOiB0cnVlLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjb250ZW50OiBcIjxzbG90Pjwvc2xvdD5cIixcblx0XHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0XHRpbml0T3B0aW9uc0Zyb21Bcmd1bWVudHMuY2FsbCh0aGlzKSxcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Ob3RpZnkuTWVzc2FnZX1cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cdFx0aW5pdENvbnRyb2xSZWZlcmVuY2VzLmNhbGwodGhpcyk7XG5cdFx0aW5pdEV2ZW50aGFuZGxlci5jYWxsKHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1ub3RpZnktbWVzc2FnZVwiO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge0NTU1N0eWxlU2hlZXRbXX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiBbTWVzc2FnZVN0eWxlU2hlZXRdO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRbaW5pdE1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbaW5pdE1ldGhvZFN5bWJvbF0oKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKi9cblx0Y29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLmRpc2FwcGVhclwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0c3RhcnRGYWRlb3V0LmNhbGwodGhpcyk7XG5cdFx0XHR0aGlzLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWVudGVyXCIsIHRoaXNbbW91c2VlbnRlckV2ZW50SGFuZGxlclN5bWJvbF0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKi9cblx0ZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcblx0XHRzdG9wRmFkZW91dC5jYWxsKHRoaXMpO1xuXG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMuZGlzYXBwZWFyXCIpID09PSB0cnVlKSB7XG5cdFx0XHR0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoXG5cdFx0XHRcdFwibW91c2VlbnRlclwiLFxuXHRcdFx0XHR0aGlzW21vdXNlZW50ZXJFdmVudEhhbmRsZXJTeW1ib2xdLFxuXHRcdFx0KTtcblx0XHRcdHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihcblx0XHRcdFx0XCJtb3VzZWVudGVyXCIsXG5cdFx0XHRcdHRoaXNbbW91c2VsZWF2ZUV2ZW50SGFuZGxlclN5bWJvbF0sXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHN0YXJ0RmFkZW91dCgpIHtcblx0aWYgKCF0aGlzPy5bdGltZXJTeW1ib2xdKSB7XG5cdFx0dGhpc1t0aW1lclN5bWJvbF0gPSBzZXRUaW1lb3V0KFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZW1vdmVTZWxmLmNhbGwodGhpcyk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5nZXRPcHRpb24oXCJ0aW1lb3V0XCIsIDEwMDApLFxuXHRcdCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlU2VsZigpIHtcblx0c3RvcEZhZGVvdXQoKTtcblx0dGhpcy5jbGFzc0xpc3QuYWRkKFwiZmFkZW91dFwiKTtcblxuXHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHR0aGlzLnJlbW92ZSgpO1xuXHR9LCAyMDApO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHN0b3BGYWRlb3V0KCkge1xuXHRpZiAodGhpcz8uW3RpbWVyU3ltYm9sXSkge1xuXHRcdGNsZWFyVGltZW91dCh0aGlzW3RpbWVyU3ltYm9sXSk7XG5cdFx0dGhpc1t0aW1lclN5bWJvbF0gPSB1bmRlZmluZWQ7XG5cdH1cbn1cblxuLyoqXG4gKiBUaGlzIGF0dHJpYnV0ZSBjYW4gYmUgdXNlZCB0byBwYXNzIGEgVVJMIHRvIHRoaXMgc2VsZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGluaXRPcHRpb25zRnJvbUFyZ3VtZW50cygpIHtcblx0Y29uc3Qgb3B0aW9ucyA9IHt9O1xuXG5cdGNvbnN0IHRpbWVvdXQgPSB0aGlzLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfUFJFRklYICsgXCJ0aW1lb3V0XCIpO1xuXHRpZiAoaXNTdHJpbmcodGltZW91dCkpIHtcblx0XHR0cnkge1xuXHRcdFx0b3B0aW9uc1tcInRpbWVvdXRcIl0gPSBwYXJzZUludCh0aW1lb3V0LCAxMCk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUoXG5cdFx0XHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0XHRcdHRoaXMuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgKyBcIiwgXCIgKyBlLnRvU3RyaW5nKCkpLFxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gb3B0aW9ucztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7TWVzc2FnZX1cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGluaXRDb250cm9sUmVmZXJlbmNlcygpIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0dGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRcIltcIiArIEFUVFJJQlVURV9ST0xFICsgXCI9Y29udHJvbF1cIixcblx0KTtcblx0dGhpc1tyZW1vdmVFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdFwiW1wiICsgQVRUUklCVVRFX1JPTEUgKyBcIj1jbG9zZV1cIixcblx0KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpbml0RXZlbnRoYW5kbGVyKCkge1xuXHQvKipcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICovXG5cdHRoaXNbbW91c2VlbnRlckV2ZW50SGFuZGxlclN5bWJvbF0gPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBlbGVtZW50ID0gZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoXG5cdFx0XHRldmVudCxcblx0XHRcdEFUVFJJQlVURV9ST0xFLFxuXHRcdFx0XCJjb250cm9sXCIsXG5cdFx0KTtcblxuXHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihcblx0XHRcdFx0XCJtb3VzZWVudGVyXCIsXG5cdFx0XHRcdHRoaXNbbW91c2VlbnRlckV2ZW50SGFuZGxlclN5bWJvbF0sXG5cdFx0XHQpO1xuXHRcdFx0dGhpcy5hZGRFdmVudExpc3RlbmVyKFwibW91c2VsZWF2ZVwiLCB0aGlzW21vdXNlbGVhdmVFdmVudEhhbmRsZXJTeW1ib2xdKTtcblx0XHRcdHN0b3BGYWRlb3V0LmNhbGwodGhpcyk7XG5cdFx0fVxuXHR9O1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKi9cblx0dGhpc1ttb3VzZWxlYXZlRXZlbnRIYW5kbGVyU3ltYm9sXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChcblx0XHRcdGV2ZW50LFxuXHRcdFx0QVRUUklCVVRFX1JPTEUsXG5cdFx0XHRcImNvbnRyb2xcIixcblx0XHQpO1xuXHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihcblx0XHRcdFx0XCJtb3VzZWxlYXZlXCIsXG5cdFx0XHRcdHRoaXNbbW91c2VsZWF2ZUV2ZW50SGFuZGxlclN5bWJvbF0sXG5cdFx0XHQpO1xuXHRcdFx0dGhpcy5hZGRFdmVudExpc3RlbmVyKFwibW91c2VlbnRlclwiLCB0aGlzW21vdXNlZW50ZXJFdmVudEhhbmRsZXJTeW1ib2xdKTtcblx0XHRcdHN0YXJ0RmFkZW91dC5jYWxsKHRoaXMpO1xuXHRcdH1cblx0fTtcblxuXHQvKipcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICovXG5cdHRoaXNbcmVtb3ZlRXZlbnRIYW5kbGVyU3ltYm9sXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChldmVudCwgQVRUUklCVVRFX1JPTEUsIFwiY2xvc2VcIik7XG5cblx0XHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRyZW1vdmVTZWxmLmNhbGwodGhpcyk7XG5cdFx0fVxuXHR9O1xuXG5cdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLmNsb3NlXCIpID09PSB0cnVlKSB7XG5cdFx0dGhpc1tyZW1vdmVFbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFxuXHRcdFx0XCJjbGlja1wiLFxuXHRcdFx0dGhpc1tyZW1vdmVFdmVudEhhbmRsZXJTeW1ib2xdLFxuXHRcdCk7XG5cdFx0dGhpc1tyZW1vdmVFbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFxuXHRcdFx0XCJ0b3VjaFwiLFxuXHRcdFx0dGhpc1tyZW1vdmVFdmVudEhhbmRsZXJTeW1ib2xdLFxuXHRcdCk7XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udHJvbFwiIHBhcnQ9XCJjb250cm9sXCIgY2xhc3M9XCJjZW50ZXJcIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJtZXNzYWdlXCIgcGFydD1cIm1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImRhdGEtbW9uc3Rlci1vcmllbnRhdGlvbiBwYXRoOm9yaWVudGF0aW9uXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6Y29udGVudFwiIHBhcnQ9XCJjb250ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udGVudFwiPlxuXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBwYXJ0PVwicmVtb3ZlXCJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2xhc3MgcGF0aDpmZWF0dXJlcy5jbG9zZSB8ID86OmhpZGRlbiBcIlxuICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJjbG9zZVwiIHRhYmluZGV4PVwiLTFcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICBgO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoTWVzc2FnZSk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCAyMDI0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqL1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgTm90aWZ5U3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgTm90aWZ5U3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG5cdE5vdGlmeVN0eWxlU2hlZXQuaW5zZXJ0UnVsZShcblx0XHRgXG5AbGF5ZXIgbm90aWZ5IHsgXG4uYmxvY2t7ZGlzcGxheTpibG9ja30uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmdyaWR7ZGlzcGxheTpncmlkfS5pbmxpbmUtZ3JpZHtkaXNwbGF5OmlubGluZS1ncmlkfS5mbGV4e2Rpc3BsYXk6ZmxleH0uaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleH0uaGlkZGVuLC5oaWRlLC5ub25le2Rpc3BsYXk6bm9uZX0udmlzaWJsZXt2aXNpYmlsaXR5OnZpc2libGV9LmludmlzaWJsZXt2aXNpYmlsaXR5OmhpZGRlbn0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMywubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLTB7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1zdHlsZTpub25lO2JvcmRlci13aWR0aDowfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0yLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMywubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0yLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0zLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdXRsaW5lOm5vbmU7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0uZmxleHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd306aG9zdHtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpibG9ja31kaXZbZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17YWxpZ24taXRlbXM6ZmxleC1zdGFydDtib3JkZXI6MDtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjttYXJnaW46MDttYXgtaGVpZ2h0OjEwMHZIO3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MDstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7d2lkdGg6MjVyZW07ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtbW9kYWwtb3ZlcmxheSl9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdW2RhdGEtbW9uc3Rlci1vcmllbnRhdGlvbio9bGVmdF17bGVmdDowO3JpZ2h0OmF1dG99W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdW2RhdGEtbW9uc3Rlci1vcmllbnRhdGlvbio9cmlnaHRde2xlZnQ6YXV0bztyaWdodDowfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXVtkYXRhLW1vbnN0ZXItb3JpZW50YXRpb24qPWNlbnRlcl17bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlKX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF1bZGF0YS1tb25zdGVyLW9yaWVudGF0aW9uKj1ib3R0b21de2FsaWduLWl0ZW1zOmZsZXgtZW5kO2JvdHRvbTowfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXVtkYXRhLW1vbnN0ZXItb3JpZW50YXRpb24qPXRvcF17YWxpZ24taXRlbXM6ZmxleC1zdGFydDt0b3A6MH1bZGF0YS1tb25zdGVyLXJvbGU9Y29udGFpbmVyXXt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1tZXNzYWdlXXtiYWNrZ3JvdW5kLWNsaXA6cGFkZGluZy1ib3g7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItbWVzc2FnZS1ib3JkZXItY29sb3IscmdiYSgwLDAsMCwuMSkpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1tZXNzYWdlLWJvcmRlci1yYWRpdXMsLjI1cmVtKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1tZXNzYWdlLWJvcmRlci1zdHlsZSxzb2xpZCk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItbWVzc2FnZS1ib3JkZXItd2lkdGgsMXB4KTtib3gtc2hhZG93OjAgLjVyZW0gMXJlbSByZ2JhKDAsMCwwLC4xNSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2Rpc3BsYXk6ZmxleDtmb250LXNpemU6Ljg3NXJlbTttYXJnaW46dmFyKC0tbW9uc3Rlci1tZXNzYWdlLW1hcmdpbi10b3AsMTVweCkgdmFyKC0tbW9uc3Rlci1tZXNzYWdlLW1hcmdpbi1yaWdodCw1cHgpIHZhcigtLW1vbnN0ZXItbWVzc2FnZS1tYXJnaW4tYm90dG9tLDApIHZhcigtLW1vbnN0ZXItbWVzc2FnZS1tYXJnaW4tbGVmdCwwKTttYXgtaGVpZ2h0OjIwMHB4O21heC13aWR0aDoxMDAlO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOnZhcigtLW1vbnN0ZXItbWVzc2FnZS1wYWRkaW5nLXRvcCw1cHgpIHZhcigtLW1vbnN0ZXItbWVzc2FnZS1wYWRkaW5nLXJpZ2h0LDVweCkgdmFyKC0tbW9uc3Rlci1tZXNzYWdlLXBhZGRpbmctYm90dG9tLDVweCkgdmFyKC0tbW9uc3Rlci1tZXNzYWdlLXBhZGRpbmctbGVmdCw1cHgpO3BvaW50ZXItZXZlbnRzOmF1dG87cG9zaXRpb246cmVsYXRpdmU7dGV4dC1vdmVyZmxvdzplbGxpcHNpczstd2Via2l0LXVzZXItc2VsZWN0OnRleHQ7LW1vei11c2VyLXNlbGVjdDp0ZXh0O3VzZXItc2VsZWN0OnRleHQ7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9bWVzc2FnZV06Zmlyc3QtY2hpbGR7bWFyZ2luLXRvcDowfVtkYXRhLW1vbnN0ZXItcm9sZT1tZXNzYWdlXS5mYWRlb3V0e2JvcmRlcjowO21hcmdpbi1ib3R0b206MDttYXJnaW4tdG9wOjA7bWF4LWhlaWdodDowO3BhZGRpbmctYm90dG9tOjA7cGFkZGluZy10b3A6MDt0cmFuc2l0aW9uOmFsbCAuMnMgY3ViaWMtYmV6aWVyKDEsLS4wNCwwLDEuMDMpfSBcbn1gLFxuXHRcdDAsXG5cdCk7XG59IGNhdGNoIChlKSB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcihcImh0bWxcIiksXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRlICsgXCJcIixcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBBVFRSSUJVVEVfUk9MRSB9IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdEN1c3RvbUVsZW1lbnQsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVJbnN0YW5jZSwgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBNZXNzYWdlIH0gZnJvbSBcIi4vbWVzc2FnZS5tanNcIjtcbmltcG9ydCB7IE5vdGlmeVN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L25vdGlmeS5tanNcIjtcbmltcG9ydCB7IFF1ZXVlIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3F1ZXVlLm1qc1wiO1xuaW1wb3J0IHsgZmlyZUN1c3RvbUV2ZW50IH0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5cbmV4cG9ydCB7IE5vdGlmeSB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjb250cm9sRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImNvbnRyb2xFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjb250YWluZXJFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiY29udGFpbmVyRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcXVldWVTeW1ib2wgPSBTeW1ib2woXCJxdWV1ZVwiKTtcblxuLyoqXG4gKiBUaGlzIEN1c3RvbUNvbnRyb2wgY3JlYXRlcyBhIG5vdGlmaWNhdGlvbiBlbGVtZW50IHdpdGggYSB2YXJpZXR5IG9mIG9wdGlvbnMuXG4gKlxuICogPGltZyBzcmM9XCIuL2ltYWdlcy9ub3RpZnkucG5nXCI+XG4gKlxuICogRGVwZW5kZW5jaWVzOiB0aGUgc3lzdGVtIHVzZXMgZnVuY3Rpb25zIG9mIHRoZSBbbW9uc3RlcmpzXShodHRwczovL21vbnN0ZXJqcy5vcmcvKSBsaWJyYXJ5LlxuICpcbiAqIFlvdSBjYW4gY3JlYXRlIHRoaXMgY29udHJvbCBlaXRoZXIgYnkgc3BlY2lmeWluZyB0aGUgSFRNTCB0YWcgYDxtb25zdGVyLW5vdGlmeSAvPmAgZGlyZWN0bHkgaW4gdGhlIEhUTUxcbiAqXG4gKiBgYGBodG1sXG4gKiA8bW9uc3Rlci1ub3RpZnk+PC9tb25zdGVyLW5vdGlmeT5cbiAqIGBgYFxuICpcbiAqIG9yIHVzaW5nIEphdmFzY3JpcHQgdmlhIHRoZSBgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1ub3RpZnknKTtgIG1ldGhvZC5cbiAqXG4gKiBgYGBqc1xuICogaW1wb3J0ICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS9jb21wb25lbnRzL25vdGlmeS9ub3RpZnkuanMnO1xuICogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1ub3RpZnknKTtcbiAqIGBgYFxuICpcbiAqICMjIEV2ZW50c1xuICpcbiAqIFRoZSBDdXN0b21FdmVudCBoYXMgdGhlIHByb3BlcnR5IFtgZGV0YWlsYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0N1c3RvbUV2ZW50L2RldGFpbCkuXG4gKlxuICogYGBgXG4gKiBub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ21vbnN0ZXItbm90aWZ5LW1lc3NhZ2UnLChlKT0+Y29uc29sZS5sb2coZS5kZXRhaWwpKVxuICogYGBgXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi8uLi9leGFtcGxlL2NvbXBvbmVudHMvbm90aWZ5L25vdGlmeS5tanNcbiAqIEBzdGFydHVtbCBub3RpZnkucG5nXG4gKiBza2lucGFyYW0gbW9ub2Nocm9tZSB0cnVlXG4gKiBza2lucGFyYW0gc2hhZG93aW5nIGZhbHNlXG4gKiBIVE1MRWxlbWVudCA8fC0tIEN1c3RvbUVsZW1lbnRcbiAqIEN1c3RvbUVsZW1lbnQgPHwtLSBOb3RpZnlcbiAqIEBlbmR1bWxcbiAqXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIGhpZ2hseSBjb25maWd1cmFibGUgc2VsZWN0IGNvbnRyb2xcbiAqL1xuY2xhc3MgTm90aWZ5IGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpc1txdWV1ZVN5bWJvbF0gPSBuZXcgUXVldWUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgZGVmYXVsdHMgY2FuIGJlIHNldCBlaXRoZXIgZGlyZWN0bHkgaW4gdGhlIG9iamVjdCBvciB2aWEgYW4gYXR0cmlidXRlIGluIHRoZSBIVE1MIHRhZy5cblx0ICogVGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1vcHRpb25zYCBpbiB0aGUgSFRNTCB0YWcgbXVzdCBiZSBhIEpTT04gc3RyaW5nLlxuXHQgKlxuXHQgKiBgYGBodG1sXG5cdCAqIDxtb25zdGVyLW5vdGlmeSBkYXRhLW1vbnN0ZXItb3B0aW9ucz1cInt9XCI+PC9tb25zdGVyLW5vdGlmeT5cblx0ICogYGBgXG5cdCAqXG5cdCAqIFNpbmNlIDEuMTguMCB0aGUgSlNPTiBjYW4gYmUgc3BlY2lmaWVkIGFzIGEgRGF0YVVSSS5cblx0ICpcblx0ICogYGBgXG5cdCAqIG5ldyBNb25zdGVyLlR5cGVzLkRhdGFVcmwoYnRvYShKU09OLnN0cmluZ2lmeSh7XG5cdCAqICAgICAgICBvcmllbnRhdGlvbjogJ3JpZ2h0IHRvcCdcblx0ICogICAgfSkpLCdhcHBsaWNhdGlvbi9qc29uJyx0cnVlKS50b1N0cmluZygpXG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzIFRlbXBsYXRlIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbihcblx0XHRcdHt9LFxuXHRcdFx0c3VwZXIuZGVmYXVsdHMsXG5cdFx0XHR7XG5cdFx0XHRcdG9yaWVudGF0aW9uOiBcImxlZnQgdG9wXCIsXG5cdFx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdFx0aW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzLmNhbGwodGhpcyksXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtOb3RpZnl9XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXHRcdGluaXRDb250cm9sUmVmZXJlbmNlcy5jYWxsKHRoaXMpO1xuXG5cdFx0aWYgKHRoaXNbY29udGFpbmVyRWxlbWVudFN5bWJvbF0pIHtcblx0XHRcdHdoaWxlICh0aGlzW3F1ZXVlU3ltYm9sXS5pc0VtcHR5KCkgPT09IGZhbHNlKSB7XG5cdFx0XHRcdHRoaXMucHVzaCh0aGlzW3F1ZXVlU3ltYm9sXS5wb2xsKCkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1ub3RpZnlcIjtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtDU1NTdHlsZVNoZWV0W119XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW05vdGlmeVN0eWxlU2hlZXRdO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7TW9uc3Rlci5Db21wb25lbnRzLk5vdGlmeS5NYXNzYWdlfFN0cmluZ30gbWVzc2FnZVxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuTm90aWZ5Lk5vdGlmeX1cblx0ICovXG5cdHB1c2gobWVzc2FnZSkge1xuXHRcdGxldCBtZXNzYWdlRWxlbWVudCA9IG1lc3NhZ2U7XG5cdFx0aWYgKCEobWVzc2FnZSBpbnN0YW5jZW9mIE1lc3NhZ2UpKSB7XG5cdFx0XHRjb25zdCB0ZXh0ID0gdmFsaWRhdGVTdHJpbmcobWVzc2FnZSk7XG5cdFx0XHRtZXNzYWdlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJtb25zdGVyLW5vdGlmeS1tZXNzYWdlXCIpO1xuXHRcdFx0bWVzc2FnZUVsZW1lbnQuc2V0T3B0aW9uKFwiY29udGVudFwiLCB0ZXh0KTtcblx0XHR9XG5cblx0XHR2YWxpZGF0ZUluc3RhbmNlKG1lc3NhZ2VFbGVtZW50LCBNZXNzYWdlKTtcblx0XHRtZXNzYWdlRWxlbWVudC5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUsIFwibWVzc2FnZVwiKTtcblxuXHRcdC8vIGlmIG5vdCBjb25uZWN0ZWQsIGFkZCB0byBxdWV1ZVxuXHRcdGlmICghdGhpc1tjb250YWluZXJFbGVtZW50U3ltYm9sXSkge1xuXHRcdFx0dGhpc1txdWV1ZVN5bWJvbF0uYWRkKG1lc3NhZ2VFbGVtZW50KTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItbm90aWZ5LW1lc3NhZ2VcIiwge1xuXHRcdFx0bWVzc2FnZUVsZW1lbnQsXG5cdFx0fSk7XG5cblx0XHR0aGlzW2NvbnRhaW5lckVsZW1lbnRTeW1ib2xdLmFwcGVuZENoaWxkKG1lc3NhZ2VFbGVtZW50KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuXG4vKipcbiAqIFRoaXMgYXR0cmlidXRlIGNhbiBiZSB1c2VkIHRvIHBhc3MgYSBVUkwgdG8gdGhpcyBzZWxlY3QuXG4gKlxuICogYGBgXG4gKiA8bW9uc3Rlci1zZWxlY3QgZGF0YS1tb25zdGVyLXVybD1cImh0dHBzOi8vZXhhbXBsZS5jb20vXCI+PC9tb25zdGVyLXNlbGVjdD5cbiAqIGBgYFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGluaXRPcHRpb25zRnJvbUFyZ3VtZW50cygpIHtcblx0Y29uc3Qgb3B0aW9ucyA9IHt9O1xuXG5cdHJldHVybiBvcHRpb25zO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtTZWxlY3R9XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdHRoaXNbY29udHJvbEVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XCJbXCIgKyBBVFRSSUJVVEVfUk9MRSArIFwiPWNvbnRyb2xdXCIsXG5cdCk7XG5cdHRoaXNbY29udGFpbmVyRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRcIltcIiArIEFUVFJJQlVURV9ST0xFICsgXCI9Y29udGFpbmVyXVwiLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250cm9sXCIgcGFydD1cImNvbnRyb2xcIiBjbGFzcz1cImNlbnRlclwiXG4gICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJkYXRhLW1vbnN0ZXItb3JpZW50YXRpb24gcGF0aDpvcmllbnRhdGlvblwiPlxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIGA7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChOb3RpZnkpO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywgMjAyNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IFNwbGl0UGFuZWxTdHlsZVNoZWV0IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBTcGxpdFBhbmVsU3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG5cdFNwbGl0UGFuZWxTdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIHNwbGl0cGFuZWwgeyBcbltkYXRhLW1vbnN0ZXItcm9sZT1zcGxpdC1wYW5lbF17Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7aGVpZ2h0OmF1dG87bWFyZ2luOjA7cGFkZGluZzowO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPXNwbGl0LXBhbmVsXSAucGFuZWx7ZmxleC1ncm93OjE7b3ZlcmZsb3c6YXV0b31bZGF0YS1tb25zdGVyLXJvbGU9c3BsaXQtcGFuZWxdIFtkYXRhLW1vbnN0ZXItcm9sZT1kcmFnZ2VyXXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7aGVpZ2h0OmF1dG87cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6dmFyKC0tbW9uc3Rlci1kcmFnZ2VyLXdpZHRoKX06aXMoW2RhdGEtbW9uc3Rlci1yb2xlPXNwbGl0LXBhbmVsXSBbZGF0YS1tb25zdGVyLXJvbGU9ZHJhZ2dlcl0pIFtkYXRhLW1vbnN0ZXItcm9sZT1oYW5kbGVde2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKTtjdXJzb3I6cG9pbnRlcjtoZWlnaHQ6dmFyKC0tbW9uc3Rlci1kcmFnZ2VyLWhhbmRsZS1oZWlnaHQpO2xlZnQ6NTAlO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpO3dpZHRoOnZhcigtLW1vbnN0ZXItZHJhZ2dlci1oYW5kbGUtd2lkdGgpO3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW91dGxpbmUpfS5ob3Jpem9udGFsW2RhdGEtbW9uc3Rlci1yb2xlPXNwbGl0LXBhbmVsXXtmbGV4LWRpcmVjdGlvbjpjb2x1bW59Lmhvcml6b250YWxbZGF0YS1tb25zdGVyLXJvbGU9c3BsaXQtcGFuZWxdIFtkYXRhLW1vbnN0ZXItcm9sZT1kcmFnZ2VyXXtoZWlnaHQ6dmFyKC0tbW9uc3Rlci1kcmFnZ2VyLXdpZHRoKTt3aWR0aDoxMDAlfTppcyguaG9yaXpvbnRhbFtkYXRhLW1vbnN0ZXItcm9sZT1zcGxpdC1wYW5lbF0gW2RhdGEtbW9uc3Rlci1yb2xlPWRyYWdnZXJdKSBbZGF0YS1tb25zdGVyLXJvbGU9aGFuZGxlXXtoZWlnaHQ6dmFyKC0tbW9uc3Rlci1kcmFnZ2VyLWhhbmRsZS13aWR0aCk7d2lkdGg6dmFyKC0tbW9uc3Rlci1kcmFnZ2VyLWhhbmRsZS1oZWlnaHQpfSBcbn1gLFxuXHRcdDAsXG5cdCk7XG59IGNhdGNoIChlKSB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcihcImh0bWxcIiksXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRlICsgXCJcIixcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0Q3VzdG9tRWxlbWVudCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgXCIuLi9ub3RpZnkvbm90aWZ5Lm1qc1wiO1xuaW1wb3J0IHsgZmlyZUN1c3RvbUV2ZW50IH0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5pbXBvcnQgeyBPYnNlcnZlciB9IGZyb20gXCIuLi8uLi90eXBlcy9vYnNlcnZlci5tanNcIjtcbmltcG9ydCB7IFNwbGl0UGFuZWxTdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9zcGxpdC1wYW5lbC5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgU3BsaXRQYW5lbCwgVFlQRV9WRVJUSUNBTCwgVFlQRV9IT1JJWk9OVEFMIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHNwbGl0U2NyZWVuRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcInNwbGl0U2NyZWVuRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgZHJhZ2dlckVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJkcmFnZ2VyRWxlbWVudFwiKTtcbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHN0YXJ0UGFuZWxFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwic3RhcnRQYW5lbEVsZW1lbnRcIik7XG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBlbmRQYW5lbEVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJlbmRQYW5lbEVsZW1lbnRcIik7XG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBoYW5kbGVFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiaGFuZGxlRWxlbWVudFwiKTtcblxuLyoqXG4gKlxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgVFlQRV9WRVJUSUNBTCA9IFwidmVydGljYWxcIjtcbi8qKlxuICpcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IFRZUEVfSE9SSVpPTlRBTCA9IFwiaG9yaXpvbnRhbFwiO1xuXG4vKipcbiAqIEEgU3BsaXRQYW5lbCBDb250cm9sXG4gKlxuICogQGZyYWdtZW50cyAvZnJhZ21lbnRzL2NvbXBvbmVudHMvbGF5b3V0L3NwbGl0LXBhbmVsL1xuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2xheW91dC9zcGxpdC1wYW5lbC1zaW1wbGVcbiAqXG4gKiBAc2luY2UgMy41NC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgVGhlIFNwbGl0UGFuZWwgY29udHJvbCBpcyBhIHNpbXBsZSBsYXlvdXQgY29udHJvbCB0aGF0IGFsbG93cyB5b3UgdG8gc3BsaXQgdGhlIHNjcmVlblxuICogaW50byB0d28gcGFydHMuIFRoZSBzcGxpdCBjYW4gYmUgZWl0aGVyIHZlcnRpY2FsIG9yIGhvcml6b250YWwuIFRoZSBjb250cm9sIHByb3ZpZGVzIGFcbiAqIGRyYWdnYWJsZSBoYW5kbGUgdGhhdCBhbGxvd3MgeW91IHRvIGFkanVzdCB0aGUgc2l6ZSBvZiB0aGUgdHdvIHBhbmVscy5cbiAqL1xuY2xhc3MgU3BsaXRQYW5lbCBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9sYXlvdXQvc3BsaXQtcGFuZWxcIik7XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgSFRNTCB0YWcsIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1vcHRpb25zYCBtdXN0IGJlIHVzZWQuXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZy9lbi9kb2MvI2NvbmZpZ3VyYXRlLWEtbW9uc3Rlci1jb250cm9sfVxuXHQgKlxuXHQgKiBUaGUgaW5kaXZpZHVhbCBjb25maWd1cmF0aW9uIHZhbHVlcyBjYW4gYmUgZm91bmQgaW4gdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIFRlbXBsYXRlIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbiBNYWluIHRlbXBsYXRlXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzcGxpdFR5cGUgU3BsaXQgdHlwZSAodmVydGljYWwgb3IgaG9yaXpvbnRhbClcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGRpbWVuc2lvbiBEaW1lbnNpb25cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGRpbWVuc2lvbi5pbml0aWFsIEluaXRpYWwgZGltZW5zaW9uIG9mIHRoZSBzdGFydCBwYW5lbFxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gZGltZW5zaW9uLm1heCBNYXhpbXVtIGRpbWVuc2lvbiBvZiB0aGUgc3RhcnQgcGFuZWwgKGluIHBlcmNlbnRhZ2UpXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBkaW1lbnNpb24ubWluIE1pbmltdW0gZGltZW5zaW9uIG9mIHRoZSBzdGFydCBwYW5lbCAoaW4gcGVyY2VudGFnZSlcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0fSxcblx0XHRcdHNwbGl0VHlwZTogVFlQRV9WRVJUSUNBTCxcblx0XHRcdGRpbWVuc2lvbjoge1xuXHRcdFx0XHRpbml0aWFsOiBcIjYwJVwiLFxuXHRcdFx0XHRtYXg6IFwiODAlXCIsXG5cdFx0XHRcdG1pbjogXCIyMCVcIixcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHRmdWxsU3RhcnRTY3JlZW4oKSB7XG5cdFx0dGhpcy5zZXREaW1lbnNpb24oXCIxMDAlXCIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0ZnVsbEVuZFNjcmVlbigpIHtcblx0XHR0aGlzLnNldERpbWVuc2lvbihcIjAlXCIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0aXNGdWxsU3RhcnRTY3JlZW4oKSB7XG5cdFx0cmV0dXJuIHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKS5jdXJyZW50RGltZW5zaW9uID09PSBcIjEwMCVcIjtcblx0fVxuXG5cdGlzRnVsbEVuZFNjcmVlbigpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpLmN1cnJlbnREaW1lbnNpb24gPT09IFwiMCVcIjtcblx0fVxuXG5cdGlzSW5pdGlhbFNjcmVlbigpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpLmN1cnJlbnREaW1lbnNpb24gPT09XG5cdFx0XHR0aGlzLmdldE9wdGlvbihcImRpbWVuc2lvblwiKS5pbml0aWFsXG5cdFx0KTtcblx0fVxuXG5cdHJlc2V0U2NyZWVuKCkge1xuXHRcdHRoaXMuc2V0RGltZW5zaW9uKHRoaXMuZ2V0T3B0aW9uKFwiZGltZW5zaW9uXCIpLmluaXRpYWwpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0Q29udGVudChodG1sKSB7XG5cdFx0dGhpcy5zZXRPcHRpb24oXCJjb250ZW50XCIsIGh0bWwpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0LlZpZXdlcn1cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcblx0XHRpbml0RXZlbnRIYW5kbGVyLmNhbGwodGhpcyk7XG5cdFx0Ly9hcHBseVBhbmVsRGltZW5zaW9ucy5jYWxsKHRoaXMpO1xuXHRcdHRoaXMuc2V0RGltZW5zaW9uKHRoaXMuZ2V0T3B0aW9uKFwiZGltZW5zaW9uXCIpLmluaXRpYWwpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrIGlmIHRoZSBkaW1lbnNpb24gaXMgYSBwZXJjZW50YWdlIGFuZCB3aXRoaW4gYSB2YWxpZCByYW5nZSwgdGhlbiBzZXQgdGhlIGRpbWVuc2lvbiBvcHRpb24uXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBkaW1lbnNpb24gLSBUaGUgZGltZW5zaW9uIHRvIGJlIHNldCwgY2FuIGJlIGluIHBlcmNlbnRhZ2Ugb3IgYWJzb2x1dGUgdmFsdWUuXG5cdCAqIEByZXR1cm4ge09iamVjdH0gLSBSZXR1cm5zIHRoZSBjdXJyZW50IG9iamVjdCBpbnN0YW5jZSBmb3IgY2hhaW5pbmcuXG5cdCAqL1xuXHRzZXREaW1lbnNpb24oZGltZW5zaW9uKSB7XG5cdFx0Ly8gY2hlY2sgaWYgcGVyY2VudCBhbmQgZ3JlYXRlciB0aGFuMTAwXG5cdFx0aWYgKGRpbWVuc2lvbi5pbmNsdWRlcyhcIiVcIikpIHtcblx0XHRcdGlmIChwYXJzZUludChkaW1lbnNpb24pID4gMTAwKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcImRpbWVuc2lvbiBtdXN0IGJlIGxlc3MgdGhhbiAxMDAlXCIpO1xuXHRcdFx0fSBlbHNlIGlmIChwYXJzZUludChkaW1lbnNpb24pIDwgMCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJkaW1lbnNpb24gbXVzdCBiZSBncmVhdGVyIHRoYW4gMCVcIik7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpLmN1cnJlbnREaW1lbnNpb24gPSBkaW1lbnNpb247XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLXNwbGl0LXBhbmVsXCI7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7Q1NTU3R5bGVTaGVldFtdfVxuXHQgKi9cblx0c3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG5cdFx0cmV0dXJuIFtTcGxpdFBhbmVsU3R5bGVTaGVldF07XG5cdH1cbn1cblxuLyoqXG4gKiBTZXQgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIHBhbmVsIGJhc2VkIG9uIHRoZSBzcGxpdCB0eXBlLlxuICogQGZpcmVzIG1vbnN0ZXItZGltZW5zaW9uLWNoYW5nZWRcbiAqL1xuZnVuY3Rpb24gYXBwbHlQYW5lbERpbWVuc2lvbnMoKSB7XG5cdGNvbnN0IHNwbGl0VHlwZSA9IHRoaXMuZ2V0T3B0aW9uKFwic3BsaXRUeXBlXCIpO1xuXHRjb25zdCBkaW1lbnNpb24gPSB0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRTdWJqZWN0KCkuY3VycmVudERpbWVuc2lvbjtcblxuXHRpZiAoc3BsaXRUeXBlID09PSBUWVBFX1ZFUlRJQ0FMKSB7XG5cdFx0dGhpc1tzdGFydFBhbmVsRWxlbWVudFN5bWJvbF0uc3R5bGUud2lkdGggPSBkaW1lbnNpb247XG5cdFx0dGhpc1tlbmRQYW5lbEVsZW1lbnRTeW1ib2xdLnN0eWxlLndpZHRoID0gYGNhbGMoMTAwJSAtICR7ZGltZW5zaW9ufSAtIDVweClgO1xuXHRcdHRoaXNbZHJhZ2dlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmN1cnNvciA9IFwiZXctcmVzaXplXCI7XG5cdFx0dGhpc1tzcGxpdFNjcmVlbkVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5hZGQoXCJ2ZXJ0aWNhbFwiKTtcblx0XHR0aGlzW3NwbGl0U2NyZWVuRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LnJlbW92ZShcImhvcml6b250YWxcIik7XG5cdH0gZWxzZSB7XG5cdFx0dGhpc1tzdGFydFBhbmVsRWxlbWVudFN5bWJvbF0uc3R5bGUuaGVpZ2h0ID0gZGltZW5zaW9uO1xuXHRcdHRoaXNbZW5kUGFuZWxFbGVtZW50U3ltYm9sXS5zdHlsZS5oZWlnaHQgPVxuXHRcdFx0YGNhbGMoMTAwJSAtICR7ZGltZW5zaW9ufSAtIDVweClgO1xuXHRcdHRoaXNbZHJhZ2dlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmN1cnNvciA9IFwibnMtcmVzaXplXCI7XG5cdFx0dGhpc1tzcGxpdFNjcmVlbkVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5hZGQoXCJob3Jpem9udGFsXCIpO1xuXHRcdHRoaXNbc3BsaXRTY3JlZW5FbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QucmVtb3ZlKFwidmVydGljYWxcIik7XG5cdH1cblxuXHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLWRpbWVuc2lvbi1jaGFuZ2VkXCIsIHtcblx0XHRjb250cm9sbGVyOiB0aGlzLFxuXHRcdGRpbWVuc2lvbjogZGltZW5zaW9uLFxuXHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7U2VsZWN0fVxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqL1xuZnVuY3Rpb24gaW5pdENvbnRyb2xSZWZlcmVuY2VzKCkge1xuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHR0aGlzW3NwbGl0U2NyZWVuRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRcIltkYXRhLW1vbnN0ZXItcm9sZT1zcGxpdC1wYW5lbF1cIixcblx0KTtcblx0dGhpc1tkcmFnZ2VyRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRcIltkYXRhLW1vbnN0ZXItcm9sZT1kcmFnZ2VyXVwiLFxuXHQpO1xuXHR0aGlzW2hhbmRsZUVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XCJbZGF0YS1tb25zdGVyLXJvbGU9aGFuZGxlXVwiLFxuXHQpO1xuXG5cdHRoaXNbc3RhcnRQYW5lbEVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XCJbZGF0YS1tb25zdGVyLXJvbGU9c3RhcnRQYW5lbF1cIixcblx0KTtcblx0dGhpc1tlbmRQYW5lbEVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XCJbZGF0YS1tb25zdGVyLXJvbGU9ZW5kUGFuZWxdXCIsXG5cdCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50SGFuZGxlcigpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0bGV0IGxhc3REaW1lbnNpb24gPSB0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRTdWJqZWN0KCkuY3VycmVudERpbWVuc2lvbjtcblx0bGV0IGxhc3RUeXBlID0gdGhpcy5nZXRPcHRpb24oXCJzcGxpdFR5cGVcIik7XG5cblx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpLmlzRHJhZ2dpbmcgPSBmYWxzZTtcblxuXHQvLyBAdG9kbzogYWRkIGJldHRlciB0b3VjaCBzdXBwb3J0XG5cdGNvbnN0IGV2ZW50VHlwZXMgPSBbXCJkYmxjbGlja1wiLCBcInRvdWNoc3RhcnRcIl07XG5cdGZvciAoY29uc3QgZXZlbnRUeXBlIG9mIGV2ZW50VHlwZXMpIHtcblx0XHR0aGlzW2RyYWdnZXJFbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgKCkgPT4ge1xuXHRcdFx0c2VsZltpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpLmlzRHJhZ2dpbmcgPSBmYWxzZTtcblx0XHRcdGxhc3REaW1lbnNpb24gPSB1bmRlZmluZWQ7XG5cblx0XHRcdGxldCBjdXJyZW50RGltZW5zaW9uO1xuXHRcdFx0aWYgKHNlbGYuZ2V0T3B0aW9uKFwic3BsaXRUeXBlXCIpID09PSBUWVBFX1ZFUlRJQ0FMKSB7XG5cdFx0XHRcdGNvbnN0IHRvcFBhbmVsID0gc2VsZltzdGFydFBhbmVsRWxlbWVudFN5bWJvbF07XG5cdFx0XHRcdGN1cnJlbnREaW1lbnNpb24gPSB0b3BQYW5lbC5zdHlsZS53aWR0aDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHRvcFBhbmVsID0gc2VsZltzdGFydFBhbmVsRWxlbWVudFN5bWJvbF07XG5cdFx0XHRcdGN1cnJlbnREaW1lbnNpb24gPSB0b3BQYW5lbC5zdHlsZS5oZWlnaHQ7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChjdXJyZW50RGltZW5zaW9uID09PSBzZWxmLmdldE9wdGlvbihcImRpbWVuc2lvblwiKS5pbml0aWFsKSB7XG5cdFx0XHRcdHNlbGYuc2V0RGltZW5zaW9uKHNlbGYuZ2V0T3B0aW9uKFwiZGltZW5zaW9uXCIpLm1heCk7XG5cdFx0XHR9IGVsc2UgaWYgKGN1cnJlbnREaW1lbnNpb24gPT09IHNlbGYuZ2V0T3B0aW9uKFwiZGltZW5zaW9uXCIpLm1heCkge1xuXHRcdFx0XHRzZWxmLnNldERpbWVuc2lvbihzZWxmLmdldE9wdGlvbihcImRpbWVuc2lvblwiKS5taW4pO1xuXHRcdFx0fSBlbHNlIGlmIChjdXJyZW50RGltZW5zaW9uID09PSBzZWxmLmdldE9wdGlvbihcImRpbWVuc2lvblwiKS5taW4pIHtcblx0XHRcdFx0c2VsZi5zZXREaW1lbnNpb24oc2VsZi5nZXRPcHRpb24oXCJkaW1lbnNpb25cIikuaW5pdGlhbCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzZWxmLnNldERpbWVuc2lvbihzZWxmLmdldE9wdGlvbihcImRpbWVuc2lvblwiKS5pbml0aWFsKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHRoaXNbZHJhZ2dlckVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiwgKCkgPT4ge1xuXHRcdHNlbGZbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKS5pc0RyYWdnaW5nID0gdHJ1ZTtcblxuXHRcdGNvbnN0IGV2ZW50TGlzdGVuZXIgPSAoZSkgPT4ge1xuXHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG5cdFx0XHQvLyB0aGUgNXB4IGFyZSB3cm9uZyBhbmQgbXVzdCBiZSBjYWxjIGZyb20gY3NzIHByb3BlcnR5IC0tbW9uc3Rlci1kcmFnZ2VyLXdpZHRoXG5cblx0XHRcdGxldCBkcmFnZ2VyV2lkdGggPSBnZXRDb21wdXRlZFN0eWxlKFxuXHRcdFx0XHRzZWxmW2RyYWdnZXJFbGVtZW50U3ltYm9sXSxcblx0XHRcdCkuZ2V0UHJvcGVydHlWYWx1ZShcIi0tbW9uc3Rlci1kcmFnZ2VyLXdpZHRoXCIpO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRkcmFnZ2VyV2lkdGggPT09IFwiXCIgfHxcblx0XHRcdFx0ZHJhZ2dlcldpZHRoID09PSB1bmRlZmluZWQgfHxcblx0XHRcdFx0ZHJhZ2dlcldpZHRoID09PSBudWxsXG5cdFx0XHQpIHtcblx0XHRcdFx0ZHJhZ2dlcldpZHRoID0gXCIwXCI7XG5cdFx0XHR9XG5cblx0XHRcdGlmICghc2VsZltpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpLmlzRHJhZ2dpbmcpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc2VsZi5nZXRPcHRpb24oXCJzcGxpdFR5cGVcIikgPT09IFRZUEVfSE9SSVpPTlRBTCkge1xuXHRcdFx0XHRjb25zdCBjb250YWluZXJPZmZzZXRUb3AgPSBzZWxmW3NwbGl0U2NyZWVuRWxlbWVudFN5bWJvbF0ub2Zmc2V0VG9wO1xuXHRcdFx0XHRjb25zdCB0b3BQYW5lbCA9IHNlbGZbc3RhcnRQYW5lbEVsZW1lbnRTeW1ib2xdO1xuXHRcdFx0XHRjb25zdCBib3R0b21QYW5lbCA9IHNlbGZbZW5kUGFuZWxFbGVtZW50U3ltYm9sXTtcblx0XHRcdFx0bGV0IG5ld1RvcEhlaWdodCA9IGUuY2xpZW50WSAtIGNvbnRhaW5lck9mZnNldFRvcDtcblxuXHRcdFx0XHRjb25zdCBtaW4gPSB0aGlzLmdldE9wdGlvbihcImRpbWVuc2lvblwiKS5taW47XG5cdFx0XHRcdGNvbnN0IG1heCA9IHRoaXMuZ2V0T3B0aW9uKFwiZGltZW5zaW9uXCIpLm1heDtcblxuXHRcdFx0XHRjb25zdCB0b3BBc1BlcmNlbnQgPVxuXHRcdFx0XHRcdChuZXdUb3BIZWlnaHQgLyB0aGlzW3NwbGl0U2NyZWVuRWxlbWVudFN5bWJvbF0ub2Zmc2V0SGVpZ2h0KSAqIDEwMDtcblx0XHRcdFx0aWYgKHBhcnNlSW50KG1pbikgPiB0b3BBc1BlcmNlbnQpIHtcblx0XHRcdFx0XHRuZXdUb3BIZWlnaHQgPSBtaW47XG5cdFx0XHRcdH0gZWxzZSBpZiAocGFyc2VJbnQobWF4KSA8IHRvcEFzUGVyY2VudCkge1xuXHRcdFx0XHRcdG5ld1RvcEhlaWdodCA9IG1heDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRuZXdUb3BIZWlnaHQgPSB0b3BBc1BlcmNlbnQgKyBcIiVcIjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIGNhbGMgbmV3IHRvcCBoZWlnaHQgdG8gcGl4ZWxcblx0XHRcdFx0Y29uc3QgbmV3VG9wSGVpZ2h0UHggPVxuXHRcdFx0XHRcdChwYXJzZUludChuZXdUb3BIZWlnaHQpIC8gMTAwKSAqXG5cdFx0XHRcdFx0dGhpc1tzcGxpdFNjcmVlbkVsZW1lbnRTeW1ib2xdLm9mZnNldEhlaWdodDtcblxuXHRcdFx0XHR0b3BQYW5lbC5zdHlsZS5oZWlnaHQgPSBgJHtuZXdUb3BIZWlnaHRQeH1weGA7XG5cdFx0XHRcdGJvdHRvbVBhbmVsLnN0eWxlLmhlaWdodCA9IGBjYWxjKDEwMCUgLSAke25ld1RvcEhlaWdodFB4fXB4IC0gJHtkcmFnZ2VyV2lkdGh9KWA7IC8vIDVweCBpcyBkcmFnZ2VyIGhlaWdodFxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgY29udGFpbmVyT2Zmc2V0TGVmdCA9IHNlbGZbc3BsaXRTY3JlZW5FbGVtZW50U3ltYm9sXS5vZmZzZXRMZWZ0O1xuXHRcdFx0XHRjb25zdCBsZWZ0UGFuZWwgPSBzZWxmW3N0YXJ0UGFuZWxFbGVtZW50U3ltYm9sXTtcblx0XHRcdFx0Y29uc3QgcmlnaHRQYW5lbCA9IHNlbGZbZW5kUGFuZWxFbGVtZW50U3ltYm9sXTtcblx0XHRcdFx0bGV0IG5ld0xlZnRXaWR0aCA9IGUuY2xpZW50WCAtIGNvbnRhaW5lck9mZnNldExlZnQ7XG5cblx0XHRcdFx0Y29uc3QgbWluID0gdGhpcy5nZXRPcHRpb24oXCJkaW1lbnNpb25cIikubWluO1xuXHRcdFx0XHRjb25zdCBtYXggPSB0aGlzLmdldE9wdGlvbihcImRpbWVuc2lvblwiKS5tYXg7XG5cblx0XHRcdFx0Y29uc3QgbGVmdEFzUGVyY2VudCA9XG5cdFx0XHRcdFx0KG5ld0xlZnRXaWR0aCAvIHRoaXNbc3BsaXRTY3JlZW5FbGVtZW50U3ltYm9sXS5vZmZzZXRXaWR0aCkgKiAxMDA7XG5cblx0XHRcdFx0aWYgKHBhcnNlSW50KG1pbikgPiBsZWZ0QXNQZXJjZW50KSB7XG5cdFx0XHRcdFx0bmV3TGVmdFdpZHRoID0gbWluO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHBhcnNlSW50KG1heCkgPCBsZWZ0QXNQZXJjZW50KSB7XG5cdFx0XHRcdFx0bmV3TGVmdFdpZHRoID0gbWF4O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG5ld0xlZnRXaWR0aCA9IGxlZnRBc1BlcmNlbnQgKyBcIiVcIjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGxlZnRQYW5lbC5zdHlsZS53aWR0aCA9IGAke25ld0xlZnRXaWR0aH1gO1xuXHRcdFx0XHRyaWdodFBhbmVsLnN0eWxlLndpZHRoID0gYGNhbGMoMTAwJSAtICR7bmV3TGVmdFdpZHRofSAtICR7ZHJhZ2dlcldpZHRofSlgOyAvLyA1cHggaXMgZHJhZ2dlciB3aWR0aFxuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRjb25zdCBkcmFnRXZlbnRIYW5kbGVyID0gKGUpID0+IHtcblx0XHRcdHNlbGZbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKS5pc0RyYWdnaW5nID0gZmFsc2U7XG5cdFx0XHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsIGV2ZW50TGlzdGVuZXIpO1xuXHRcdFx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgZXZlbnRMaXN0ZW5lcik7XG5cdFx0fTtcblxuXHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIiwgZXZlbnRMaXN0ZW5lcik7XG5cdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgZHJhZ0V2ZW50SGFuZGxlcik7XG5cdH0pO1xuXG5cdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmF0dGFjaE9ic2VydmVyKFxuXHRcdG5ldyBPYnNlcnZlcigoKSA9PiB7XG5cdFx0XHRsZXQgYXBwbHkgPSBmYWxzZTtcblxuXHRcdFx0aWYgKFxuXHRcdFx0XHRsYXN0RGltZW5zaW9uICE9PSB0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRTdWJqZWN0KCkuY3VycmVudERpbWVuc2lvblxuXHRcdFx0KSB7XG5cdFx0XHRcdGxhc3REaW1lbnNpb24gPSB0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRTdWJqZWN0KCkuY3VycmVudERpbWVuc2lvbjtcblx0XHRcdFx0YXBwbHkgPSB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAobGFzdFR5cGUgIT09IHRoaXMuZ2V0T3B0aW9uKFwic3BsaXRUeXBlXCIpKSB7XG5cdFx0XHRcdGxhc3RUeXBlID0gdGhpcy5nZXRPcHRpb24oXCJzcGxpdFR5cGVcIik7XG5cdFx0XHRcdGFwcGx5ID0gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGFwcGx5KSB7XG5cdFx0XHRcdGFwcGx5UGFuZWxEaW1lbnNpb25zLmNhbGwodGhpcyk7XG5cdFx0XHR9XG5cdFx0fSksXG5cdCk7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInNwbGl0LXBhbmVsXCIgcGFydD1cImNvbnRyb2xcIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJzdGFydFBhbmVsXCIgY2xhc3M9XCJwYW5lbFwiIHBhcnQ9XCJzdGFydFBhbmVsXCI+XG4gICAgICAgICAgICAgICAgPHNsb3QgbmFtZT1cInN0YXJ0XCI+PC9zbG90PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiZHJhZ2dlclwiIHBhcnQ9XCJkcmFnZ2VyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImhhbmRsZVwiIHBhcnQ9XCJoYW5kbGVcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImVuZFBhbmVsXCIgY2xhc3M9XCJwYW5lbFwiIHBhcnQ9XCJlbmRQYW5lbFwiPlxuICAgICAgICAgICAgICAgIDxzbG90IG5hbWU9XCJlbmRcIj48L3Nsb3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+YDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KFNwbGl0UGFuZWwpO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywgMjAyNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IFBhbmVsU3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgUGFuZWxTdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcblx0UGFuZWxTdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIHBhbmVsIHsgXG46YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItZm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsXFxcIlF1aWNrc2FuZFxcXCIsXFxcIlNlZ29lIFVJXFxcIixcXFwiUm9ib3RvXFxcIixcXFwiT3h5Z2VuXFxcIixcXFwiVWJ1bnR1XFxcIixcXFwiQ2FudGFyZWxsXFxcIixcXFwiRmlyYSBTYW5zXFxcIixcXFwiRHJvaWQgU2Fuc1xcXCIsXFxcIkhlbHZldGljYSBOZXVlXFxcIixBcmlhbCxzYW5zLXNlcmlmLFxcXCJBcHBsZSBDb2xvciBFbW9qaVxcXCIsXFxcIlNlZ29lIFVJIEVtb2ppXFxcIixcXFwiU2Vnb2UgVUkgU3ltYm9sXFxcIjstLW1vbnN0ZXItZm9udC1mYW1pbHktbW9ub3NwYWNlOlxcXCJDb25zb2xhc1xcXCIsXFxcIkNvdXJpZXIgTmV3XFxcIixcXFwiUm9ib3RvIE1vbm9cXFwiLFxcXCJTb3VyY2UgQ29kZSBQcm9cXFwiLFxcXCJGaXJhIE1vbm9cXFwiLG1vbm9zcGFjZTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMSk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTYpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0yKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNil9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTYpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0yKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNCk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTYpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMyk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi01KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMik7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTQpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0zKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTQpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNik7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMik7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS01KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTQpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS01KTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMyl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNil9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy02KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNil9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTE6IzgzM2FiNDstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMjojZmQxZDFkOy0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0zOiNmY2IwNDU7LS1tb25zdGVyLWJveC1zaGFkb3ctMTpub25lOy0tbW9uc3Rlci1ib3gtc2hhZG93LTI6LTFweCAxcHggMTBweCAxcHggaHNsYSgwLDAlLDc2JSwuNjEpOy0tbW9uc3Rlci10ZXh0LXNoYWRvdzpub25lOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtMSk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC02KTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTYpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWhvdmVyLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtMik7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXdpZHRoOjJweDstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItc3R5bGU6c29saWQ7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXJhZGl1czowOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNSk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWhvdmVyLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLXRoZW1lLW9uLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLXRoZW1lLW9uLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNSk7LS1tb25zdGVyLXRoZW1lLW9mZi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLW9mZi1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItdGhlbWUtb24tY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci10aGVtZS1vbi1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLW9mZi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLW9mZi1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1ib3JkZXItc3R5bGU6c29saWQ7LS1tb25zdGVyLWJvcmRlci13aWR0aDozcHg7LS1tb25zdGVyLWJvcmRlci1yYWRpdXM6MDstLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2U6LTRweDstLW1vbnN0ZXItei1pbmRleC1kZWZhdWx0OjA7LS1tb25zdGVyLXotaW5kZXgtb3V0bGluZToxMDstLW1vbnN0ZXItei1pbmRleC1kcm9wZG93bjoyMDA7LS1tb25zdGVyLXotaW5kZXgtZHJvcGRvd24tb3ZlcmxheToyMTA7LS1tb25zdGVyLXotaW5kZXgtc3RpY2t5OjMwMDstLW1vbnN0ZXItei1pbmRleC1zdGlja3ktb3ZlcmxheTozMTA7LS1tb25zdGVyLXotaW5kZXgtZml4ZWQ6NDAwOy0tbW9uc3Rlci16LWluZGV4LWZpeGVkLW92ZXJsYXk6NDEwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLWJhY2tkcm9wOjUwMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1iYWNrZHJvcC1vdmVybGF5OjUxMDstLW1vbnN0ZXItei1pbmRleC1vZmZjYW52YXM6NjAwOy0tbW9uc3Rlci16LWluZGV4LW9mZmNhbnZhcy1vdmVybGF5OjYxMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbDo3MDA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtb3ZlcmxheTo3MTA7LS1tb25zdGVyLXotaW5kZXgtcG9wb3Zlcjo4MDA7LS1tb25zdGVyLXotaW5kZXgtcG9wb3Zlci1vdmVybGF5OjgxMDstLW1vbnN0ZXItei1pbmRleC10b29sdGlwOjgwMDstLW1vbnN0ZXItei1pbmRleC10b29sdGlwLW92ZXJsYXk6OTEwOy0tbW9uc3Rlci1zcGFjZS0wOjA7LS1tb25zdGVyLXNwYWNlLTE6MnB4Oy0tbW9uc3Rlci1zcGFjZS0yOjRweDstLW1vbnN0ZXItc3BhY2UtMzo2cHg7LS1tb25zdGVyLXNwYWNlLTQ6MTBweDstLW1vbnN0ZXItc3BhY2UtNToxNnB4Oy0tbW9uc3Rlci1zcGFjZS02OjI2cHg7LS1tb25zdGVyLXNwYWNlLTc6NDJweDstLW1vbnN0ZXItYnJlYWtwb2ludC0wOjQ4MHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTQ6NDgwcHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtNzo3NjhweDstLW1vbnN0ZXItYnJlYWtwb2ludC05Ojk5MnB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTEyOjEyMDBweDstLW1vbnN0ZXItZHJhZ2dlci13aWR0aDoycHg7LS1tb25zdGVyLWRyYWdnZXItaGFuZGxlLXdpZHRoOjRweDstLW1vbnN0ZXItZHJhZ2dlci1oYW5kbGUtaGVpZ2h0OjUwcHh9LmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmlubGluZXtkaXNwbGF5OmlubGluZX0uaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5ncmlke2Rpc3BsYXk6Z3JpZH0uaW5saW5lLWdyaWR7ZGlzcGxheTppbmxpbmUtZ3JpZH0uZmxleHtkaXNwbGF5OmZsZXh9LmlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXh9LmhpZGRlbiwuaGlkZSwubm9uZXtkaXNwbGF5Om5vbmV9LnZpc2libGV7dmlzaWJpbGl0eTp2aXNpYmxlfS5pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW59Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMSwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0yLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci0we2JvcmRlci1yYWRpdXM6MDtib3JkZXItc3R5bGU6bm9uZTtib3JkZXItd2lkdGg6MH0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMiwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMSwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMiwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMywubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS1kaXNhYmxlZC0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xKX0ubW9uc3Rlci10aGVtZS1zZWNvbmRhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLXRoZW1lLXRlcnRpYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItdGhlbWUtZGVzdHJ1Y3RpdmUtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xKX0ubW9uc3Rlci10aGVtZS1zdWNjZXNzLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTEpfS5tb25zdGVyLXRoZW1lLXdhcm5pbmctMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMSl9Lm1vbnN0ZXItdGhlbWUtZXJyb3ItMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0xKX0ubW9uc3Rlci10aGVtZS1zZWxlY3Rpb24tMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfS5tb25zdGVyLWJvcmRlci1jb2xvci0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWJvcmRlci0xKX0ubW9uc3Rlci1jb2xvci1uZXV0cmFsLTF7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWNvbG9yLXByaW1hcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMSl9Lm1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xKX0ubW9uc3Rlci1jb2xvci13YXJuaW5nLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTEpfS5tb25zdGVyLWNvbG9yLWVycm9yLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMSl9Lm1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktZGlzYWJsZWQtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMil9Lm1vbnN0ZXItdGhlbWUtc2Vjb25kYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci10aGVtZS10ZXJ0aWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLXRoZW1lLWRlc3RydWN0aXZlLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMil9Lm1vbnN0ZXItdGhlbWUtc3VjY2Vzcy0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yKX0ubW9uc3Rlci10aGVtZS13YXJuaW5nLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTIpfS5tb25zdGVyLXRoZW1lLWVycm9yLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMil9Lm1vbnN0ZXItdGhlbWUtc2VsZWN0aW9uLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yKX0ubW9uc3Rlci1ib3JkZXItY29sb3ItMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ib3JkZXItMil9Lm1vbnN0ZXItY29sb3ItbmV1dHJhbC0ye2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1jb2xvci1wcmltYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItY29sb3ItdGVydGlhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTIpfS5tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMil9Lm1vbnN0ZXItY29sb3Itd2FybmluZy0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0yKX0ubW9uc3Rlci1jb2xvci1lcnJvci0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTIpfS5tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMil9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTMpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTMpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMyl9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0zKX0ubW9uc3Rlci10aGVtZS1lcnJvci0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTMpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyl9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTMpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtM3tjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zKX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTMpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMyl9Lm1vbnN0ZXItY29sb3ItZXJyb3ItM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0zKX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTMpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS1kaXNhYmxlZC00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00KX0ubW9uc3Rlci10aGVtZS1zZWNvbmRhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLXRoZW1lLXRlcnRpYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItdGhlbWUtZGVzdHJ1Y3RpdmUtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00KX0ubW9uc3Rlci10aGVtZS1zdWNjZXNzLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQpfS5tb25zdGVyLXRoZW1lLXdhcm5pbmctNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNCl9Lm1vbnN0ZXItdGhlbWUtZXJyb3ItNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci00KX0ubW9uc3Rlci10aGVtZS1zZWxlY3Rpb24tNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQpfS5tb25zdGVyLWJvcmRlci1jb2xvci00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWJvcmRlci00KX0ubW9uc3Rlci1jb2xvci1uZXV0cmFsLTR7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLWNvbG9yLXByaW1hcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNCl9Lm1vbnN0ZXItY29sb3Itc3VjY2Vzcy00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00KX0ubW9uc3Rlci1jb2xvci13YXJuaW5nLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQpfS5tb25zdGVyLWNvbG9yLWVycm9yLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItNCl9Lm1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00KX0ubW9uc3Rlci10aGVtZS1jb250cm9sLWNvbnRhaW5lci0xLC5tb25zdGVyLXRoZW1lLWNvbnRyb2wtcm93LTF7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLWNvbG9yKX0ubW9uc3Rlci10aGVtZS1jb250cm9sLWNvbnRhaW5lci0xLC5tb25zdGVyLXRoZW1lLWNvbnRyb2wtZWxlbWVudCwubW9uc3Rlci10aGVtZS1jb250cm9sLXJvdy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29sb3IpfS5tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1iZy1jb2xvcil9Lm1vbnN0ZXItdGhlbWUtYmFja2dyb3VuZC1pbmhlcml0e2JhY2tncm91bmQtY29sb3I6aW5oZXJpdCFpbXBvcnRhbnR9Lm1vbnN0ZXItdGhlbWUtb257YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLW9uLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLW9uLWNvbG9yKX0ubW9uc3Rlci10aGVtZS1vZmZ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLW9mZi1iZy1jb2xvcik7Y29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1vZmYtY29sb3IpfWRpdltkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXJde2JhY2tncm91bmQ6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2Rpc3BsYXk6bm9uZTtwYWRkaW5nOjEuMWVtO3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW1vZGFsKX1bZGF0YS1wb3BwZXItYXJyb3ddLFtkYXRhLXBvcHBlci1hcnJvd106YmVmb3Jle2JhY2tncm91bmQ6aW5oZXJpdDtoZWlnaHQ6Y2FsYyhtYXgodmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSksIC0xKnZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpKSoyKTtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDpjYWxjKG1heCh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSwgLTEqdmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkpKjIpfVtkYXRhLXBvcHBlci1hcnJvd117dmlzaWJpbGl0eTpoaWRkZW59W2RhdGEtcG9wcGVyLWFycm93XTpiZWZvcmV7Ym94LXNpemluZzpib3JkZXItYm94O2NvbnRlbnQ6XFxcIlxcXCI7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyk7dmlzaWJpbGl0eTp2aXNpYmxlfWRpdltkYXRhLXBvcHBlci1wbGFjZW1lbnRePXRvcF0+W2RhdGEtcG9wcGVyLWFycm93XXtib3R0b206Y2FsYyh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSAtIHZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKS8yKX1kaXZbZGF0YS1wb3BwZXItcGxhY2VtZW50Xj10b3BdPltkYXRhLXBvcHBlci1hcnJvd106YmVmb3Jle2JvcmRlci1ib3R0b206dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpIHZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKSB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLWxlZnQ6dHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0OnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSB2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci10b3A6dHJhbnNwYXJlbnR9ZGl2W2RhdGEtcG9wcGVyLXBsYWNlbWVudF49Ym90dG9tXT5bZGF0YS1wb3BwZXItYXJyb3dde3RvcDpjYWxjKHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpIC0gdmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpKX1kaXZbZGF0YS1wb3BwZXItcGxhY2VtZW50Xj1ib3R0b21dPltkYXRhLXBvcHBlci1hcnJvd106YmVmb3Jle2JvcmRlci1ib3R0b206dHJhbnNwYXJlbnQ7Ym9yZGVyLWxlZnQ6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpIHZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKSB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJpZ2h0OnRyYW5zcGFyZW50O2JvcmRlci10b3A6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpIHZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKSB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9ZGl2W2RhdGEtcG9wcGVyLXBsYWNlbWVudF49bGVmdF0+W2RhdGEtcG9wcGVyLWFycm93XXtyaWdodDpjYWxjKHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpIC0gdmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpKX1kaXZbZGF0YS1wb3BwZXItcGxhY2VtZW50Xj1sZWZ0XT5bZGF0YS1wb3BwZXItYXJyb3ddOmJlZm9yZXtib3JkZXItYm90dG9tOnRyYW5zcGFyZW50O2JvcmRlci1sZWZ0OnRyYW5zcGFyZW50O2JvcmRlci1yaWdodDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkgdmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItdG9wOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSB2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfWRpdltkYXRhLXBvcHBlci1wbGFjZW1lbnRePXJpZ2h0XT5bZGF0YS1wb3BwZXItYXJyb3dde2xlZnQ6Y2FsYyh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSAtIHZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKS8yKX1kaXZbZGF0YS1wb3BwZXItcGxhY2VtZW50Xj1yaWdodF0+W2RhdGEtcG9wcGVyLWFycm93XTpiZWZvcmV7Ym9yZGVyLWJvdHRvbTp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkgdmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItbGVmdDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkgdmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmlnaHQ6dHJhbnNwYXJlbnQ7Ym9yZGVyLXRvcDp0cmFuc3BhcmVudH1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0uZmxleHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd30ubW9uc3Rlci1iYWRnZS1wcmltYXJ5e3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS1wcmltYXJ5LC5tb25zdGVyLWJhZGdlLXByaW1hcnktcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2UtcHJpbWFyeS1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLXNlY29uZGFyeXtwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2Utc2Vjb25kYXJ5LC5tb25zdGVyLWJhZGdlLXNlY29uZGFyeS1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2Utc2Vjb25kYXJ5LXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2UtdGVydGlhcnl7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLXRlcnRpYXJ5LC5tb25zdGVyLWJhZGdlLXRlcnRpYXJ5LXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2UtdGVydGlhcnktcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS1kZXN0cnVjdGl2ZXtwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2UtZGVzdHJ1Y3RpdmUsLm1vbnN0ZXItYmFkZ2UtZGVzdHJ1Y3RpdmUtcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMSk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1kZXN0cnVjdGl2ZS1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLXN1Y2Nlc3N7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLXN1Y2Nlc3MsLm1vbnN0ZXItYmFkZ2Utc3VjY2Vzcy1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTEpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1zdWNjZXNzLXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2Utd2FybmluZ3twYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2Utd2FybmluZywubW9uc3Rlci1iYWRnZS13YXJuaW5nLXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMSk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTEpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLXdhcm5pbmctcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS1lcnJvcntwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2UtZXJyb3IsLm1vbnN0ZXItYmFkZ2UtZXJyb3ItcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMSk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0xKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1lcnJvci1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfTpob3N0e2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmJsb2NrO2hlaWdodDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO2hlaWdodDpmaWxsLWF2YWlsYWJsZTtoZWlnaHQ6LW1vei1hdmFpbGFibGU7aGVpZ2h0OnN0cmV0Y2g7b3ZlcmZsb3c6YXV0bzt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtib3JkZXI6MDtib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0Oi13ZWJraXQtZmlsbC1hdmFpbGFibGU7aGVpZ2h0OmZpbGwtYXZhaWxhYmxlO2hlaWdodDotbW96LWF2YWlsYWJsZTtoZWlnaHQ6c3RyZXRjaDttYXJnaW46MDtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6YXV0bztwYWRkaW5nOjA7c2Nyb2xsYmFyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKSB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7c2Nyb2xsYmFyLXdpZHRoOnRoaW47Ly9wb3NpdGlvbjpmaXhlZDsvL3RvcDowOy8vbGVmdDowOy8vcmlnaHQ6MDsvL2JvdHRvbTowOy8vb3ZlcmZsb3c6YXV0bzsvL2JveC1zaXppbmc6Ym9yZGVyLWJveH0gXG59YCxcblx0XHQwLFxuXHQpO1xufSBjYXRjaCAoZSkge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpLFxuXHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0ZSArIFwiXCIsXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdEN1c3RvbUVsZW1lbnQsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHsgRGVhZE1hbnNTd2l0Y2ggfSBmcm9tIFwiLi4vLi4vdXRpbC9kZWFkbWFuc3N3aXRjaC5tanNcIjtcblxuaW1wb3J0IHsgUGFuZWxTdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9wYW5lbC5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgUGFuZWwgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgUGFuZWxFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiUGFuZWxFbGVtZW50XCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHJlc2l6ZU9ic2VydmVyU3ltYm9sID0gU3ltYm9sKFwicmVzaXplT2JzZXJ2ZXJcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHRpbWVyQ2FsbGJhY2tTeW1ib2wgPSBTeW1ib2woXCJ0aW1lckNhbGxiYWNrXCIpO1xuXG4vKipcbiAqIEEgU2xpZGVyXG4gKlxuICogQGZyYWdtZW50cyAvZnJhZ21lbnRzL2NvbXBvbmVudHMvbGF5b3V0L3BhbmVsL1xuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2xheW91dC9wYW5lbC1zaW1wbGVcbiAqXG4gKiBAc2luY2UgMy41NC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgVGhlIFBhbmVsIGNvbXBvbmVudCBpcyB1c2VkIHRvIGRpc3BsYXkgYSBwYW5lbCwgaXNuJ3QgdGhhdCBjb29sP1xuICovXG5jbGFzcyBQYW5lbCBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9sYXlvdXQvcGFuZWxcIik7XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgSFRNTCB0YWcsIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1vcHRpb25zYCBtdXN0IGJlIHVzZWQuXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZy9lbi9kb2MvI2NvbmZpZ3VyYXRlLWEtbW9uc3Rlci1jb250cm9sfVxuXHQgKlxuXHQgKiBUaGUgaW5kaXZpZHVhbCBjb25maWd1cmF0aW9uIHZhbHVlcyBjYW4gYmUgZm91bmQgaW4gdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIFRlbXBsYXRlIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbiBNYWluIHRlbXBsYXRlXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBoZWlnaHRBZGp1c3RtZW50IEhlaWdodCBhZGp1c3RtZW50XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdH0sXG5cdFx0XHRoZWlnaHRBZGp1c3RtZW50OiA0LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0LlZpZXdlcn1cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcblx0XHRpbml0RXZlbnRIYW5kbGVyLmNhbGwodGhpcyk7XG5cblx0XHRjYWxjSGVpZ2h0LmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBkb20gYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKi9cblx0Y29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblx0XHRhdHRhY2hSZXNpemVPYnNlcnZlci5jYWxsKHRoaXMpO1xuXG5cdFx0Ly8gZGlzYWJsZSBzY3JvbGxpbmcgaW4gcGFyZW50IG5vZGVcblx0XHRpZiAodGhpcy5wYXJlbnROb2RlICYmIHRoaXMucGFyZW50Tm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHR0aGlzLnBhcmVudE5vZGUuc3R5bGUub3ZlcmZsb3cgPSBcImhpZGRlblwiO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGRvbSBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqL1xuXHRkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHRzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuXHRcdGRpc2Nvbm5lY3RSZXNpemVPYnNlcnZlci5jYWxsKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1wYW5lbFwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge0NTU1N0eWxlU2hlZXRbXX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiBbUGFuZWxTdHlsZVNoZWV0XTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNhbGNIZWlnaHQoKSB7XG5cdHRoaXMuc3R5bGUuYm94U2l6aW5nID0gXCJib3JkZXItYm94XCI7XG5cblx0Y29uc3QgaGVpZ2h0ID0gY2FsY3VsYXRlTWF4aW11bUhlaWdodC5jYWxsKHRoaXMsIHRoaXMpO1xuXHRpZiAoaGVpZ2h0IDwgMCkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXMuc3R5bGUuaGVpZ2h0ID0gYCR7aGVpZ2h0fXB4YDtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIG1heGltdW0gaGVpZ2h0IG9mIGFuIGVsZW1lbnQgYmFzZWQgb24gdGhlIHdpbmRvdydzIGlubmVyIGhlaWdodFxuICogQHBhcmFtIGVsZW1lbnRcbiAqIEByZXR1cm4geyp9XG4gKi9cbmZ1bmN0aW9uIGNhbGN1bGF0ZU1heGltdW1IZWlnaHQoZWxlbWVudCkge1xuXHRsZXQgdG90YWxCb3R0b21Cb3JkZXIgPSAwO1xuXHRsZXQgdG90YWxCb3R0b21QYWRkaW5nID0gMDtcblx0bGV0IHRvdGFsQm90dG9tTWFyZ2luID0gMDtcblx0bGV0IHRvdGFsT3V0bGluZUhlaWdodCA9IDA7XG5cdGxldCB0b3RhbEJveFNoYWRvd0hlaWdodCA9IDA7XG5cdGxldCBjdXJyZW50RWxlbWVudCA9IGVsZW1lbnQ7XG5cblx0Ly8gR2V0IHRoZSBkaXN0YW5jZSBmcm9tIHRoZSB0b3Agb2YgdGhlIGVsZW1lbnQgdG8gdGhlIHRvcCBvZiB0aGUgdmlld3BvcnRcblx0Y29uc3QgZGlzdGFuY2VGcm9tVG9wID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7XG5cblx0Ly8gTG9vcCB0aHJvdWdoIHRoZSBlbGVtZW50cyB1cCB0byB0aGUgYm9keSB0byBzdW0gdXAgdGhlIGJvdHRvbSBib3JkZXJzLCBwYWRkaW5nLCBhbmQgbWFyZ2luXG5cdHdoaWxlIChjdXJyZW50RWxlbWVudCAmJiBjdXJyZW50RWxlbWVudCAhPT0gZG9jdW1lbnQuYm9keSkge1xuXHRcdGNvbnN0IHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoY3VycmVudEVsZW1lbnQpO1xuXG5cdFx0Ly8gQm94IHNpemluZ1xuXHRcdGNvbnN0IGJveFNpemluZyA9IHN0eWxlLmJveFNpemluZztcblxuXHRcdC8vIEJvcmRlcnMsIHBhZGRpbmcsIGFuZCBtYXJnaW5cblx0XHRjb25zdCBib3JkZXJCb3R0b21XaWR0aCA9IHBhcnNlRmxvYXQoc3R5bGUuYm9yZGVyQm90dG9tV2lkdGgpO1xuXHRcdGNvbnN0IHBhZGRpbmdCb3R0b20gPSBwYXJzZUZsb2F0KHN0eWxlLnBhZGRpbmdCb3R0b20pO1xuXHRcdGNvbnN0IG1hcmdpbkJvdHRvbSA9IHBhcnNlRmxvYXQoc3R5bGUubWFyZ2luQm90dG9tKTtcblxuXHRcdC8vIE91dGxpbmUgYW5kIGJveC1zaGFkb3dcblx0XHRjb25zdCBvdXRsaW5lSGVpZ2h0ID0gcGFyc2VGbG9hdChzdHlsZS5vdXRsaW5lV2lkdGgpO1xuXHRcdC8vIFRoaXMgaXMgYSBzaW1wbGlmaWNhdGlvbjsgYm94LXNoYWRvdyBpcyBtb3JlIGNvbXBsZXggdG8gcGFyc2Vcblx0XHRjb25zdCBib3hTaGFkb3dWZXJ0aWNhbCA9IHBhcnNlRmxvYXQoc3R5bGUuYm94U2hhZG93LnNwbGl0KFwiIFwiKVszXSB8fCAwKTtcblxuXHRcdC8vIEFjY3VtdWxhdGUgdmFsdWVzXG5cdFx0dG90YWxCb3R0b21Cb3JkZXIgKz0gaXNOYU4oYm9yZGVyQm90dG9tV2lkdGgpID8gMCA6IGJvcmRlckJvdHRvbVdpZHRoO1xuXHRcdHRvdGFsQm90dG9tUGFkZGluZyArPVxuXHRcdFx0aXNOYU4ocGFkZGluZ0JvdHRvbSkgfHwgYm94U2l6aW5nID09PSBcImJvcmRlci1ib3hcIiA/IDAgOiBwYWRkaW5nQm90dG9tO1xuXHRcdHRvdGFsQm90dG9tTWFyZ2luICs9IGlzTmFOKG1hcmdpbkJvdHRvbSkgPyAwIDogbWFyZ2luQm90dG9tO1xuXHRcdHRvdGFsT3V0bGluZUhlaWdodCArPSBpc05hTihvdXRsaW5lSGVpZ2h0KSA/IDAgOiBvdXRsaW5lSGVpZ2h0O1xuXHRcdHRvdGFsQm94U2hhZG93SGVpZ2h0ICs9IGlzTmFOKGJveFNoYWRvd1ZlcnRpY2FsKSA/IDAgOiBib3hTaGFkb3dWZXJ0aWNhbDtcblxuXHRcdGN1cnJlbnRFbGVtZW50ID0gY3VycmVudEVsZW1lbnQucGFyZW50Tm9kZSB8fCBjdXJyZW50RWxlbWVudC5ob3N0O1xuXHR9XG5cblx0Ly8gQ2FsY3VsYXRlIHRoZSBtYXhpbXVtIGhlaWdodCBieSBzdWJ0cmFjdGluZyB0aGUgZGlzdGFuY2UsIGJvcmRlcnMsIHBhZGRpbmcsIG1hcmdpbiwgb3V0bGluZSwgYW5kIGJveC1zaGFkb3cgZnJvbSB0aGUgd2luZG93J3MgaW5uZXIgaGVpZ2h0XG5cdGNvbnN0IG1heGltdW1IZWlnaHQgPVxuXHRcdHdpbmRvdy5pbm5lckhlaWdodCAtXG5cdFx0ZGlzdGFuY2VGcm9tVG9wIC1cblx0XHR0b3RhbEJvdHRvbUJvcmRlciAtXG5cdFx0dG90YWxCb3R0b21QYWRkaW5nIC1cblx0XHR0b3RhbEJvdHRvbU1hcmdpbiAtXG5cdFx0dG90YWxPdXRsaW5lSGVpZ2h0IC1cblx0XHR0b3RhbEJveFNoYWRvd0hlaWdodDtcblx0cmV0dXJuIG1heGltdW1IZWlnaHQgKyB0aGlzLmdldE9wdGlvbihcImhlaWdodEFkanVzdG1lbnRcIik7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYXR0YWNoUmVzaXplT2JzZXJ2ZXIoKSB7XG5cdC8vIGFnYWluc3QgZmxpY2tlcmluZ1xuXHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXSA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XG5cdFx0aWYgKHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF0gaW5zdGFuY2VvZiBEZWFkTWFuc1N3aXRjaCkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXS50b3VjaCgpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGRlbGV0ZSB0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF0gPSBuZXcgRGVhZE1hbnNTd2l0Y2goMjAwLCAoKSA9PiB7XG5cdFx0XHRjYWxjSGVpZ2h0LmNhbGwodGhpcyk7XG5cdFx0fSk7XG5cdH0pO1xuXG5cdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdLm9ic2VydmUodGhpcy5vd25lckRvY3VtZW50LmJvZHkpO1xuXHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXS5vYnNlcnZlKGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBkaXNjb25uZWN0UmVzaXplT2JzZXJ2ZXIoKSB7XG5cdGlmICh0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXSBpbnN0YW5jZW9mIFJlc2l6ZU9ic2VydmVyKSB7XG5cdFx0dGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0uZGlzY29ubmVjdCgpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1NlbGVjdH1cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGluaXRDb250cm9sUmVmZXJlbmNlcygpIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0dGhpc1tQYW5lbEVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XCJbZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF1cIixcblx0KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpbml0RXZlbnRIYW5kbGVyKCkge1xuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udHJvbFwiIHBhcnQ9XCJjb250cm9sXCI+XG4gICAgICAgICAgICA8c2xvdD48L3Nsb3Q+XG4gICAgICAgIDwvZGl2PmA7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChQYW5lbCk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge1xuXHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRBVFRSSUJVVEVfUk9MRSxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0YXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2wsXG5cdEN1c3RvbUVsZW1lbnQsXG5cdGluaXRNZXRob2RTeW1ib2wsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRk9STV9SRUxPQUQsIEFUVFJJQlVURV9GT1JNX1VSTCB9IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGxvYWRBbmRBc3NpZ25Db250ZW50IH0gZnJvbSBcIi4vdXRpbC9mZXRjaC5tanNcIjtcblxuZXhwb3J0IHsgUmVsb2FkIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGludGVyc2VjdGlvbk9ic2VydmVyV2FzSW5pdGlhbGl6ZWQgPSBTeW1ib2woXCJ3YXNJbml0aWFsaXplZFwiKTtcblxuLyoqXG4gKiBUaGlzIEN1c3RvbUNvbnRyb2wgcmVsb2FkcyB0aGUgY29udGVudCBvZiBhIHVybCBhbmQgZW1iZWRzIGl0IGludG8gdGhlIGRvbS5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1hZ2VzL3JlbG9hZC5wbmdcIj5cbiAqXG4gKiBZb3UgY2FuIGNyZWF0ZSB0aGlzIGNvbnRyb2wgZWl0aGVyIGJ5IHNwZWNpZnlpbmcgdGhlIEhUTUwgdGFnIGA8bW9uc3Rlci1yZWxvYWQgLz5gIGRpcmVjdGx5IGluIHRoZSBIVE1MIG9yIHVzaW5nXG4gKiBKYXZhc2NyaXB0IHZpYSB0aGUgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItcmVsb2FkJyk7YCBtZXRob2QuXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItcmVsb2FkPjwvbW9uc3Rlci1yZWxvYWQ+XG4gKlxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge1JlbG9hZH0gZnJvbSAnQHNjaHVrYWkvY29tcG9uZW50LWZvcm0vc291cmNlL3JlbG9hZC5qcyc7XG4gKiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXJlbG9hZCcpO1xuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBBIHNpbXBsZSBjb25maWd1cmF0aW9uIGNhbiBsb29rIGxpa2UgdGhpc1xuICpcbiAqIGBgYGh0bWxcbiAqIDxzY3JpcHQgaWQ9XCJjb25maWdcIlxuICogICAgICAgICB0eXBlPVwiYXBwbGljYXRpb24vanNvblwiPlxuICogICAgIHtcbiAqICAgICAgICAgXCJ1cmxcIjogXCIuL2NvbnRlbnQuaHRtbFwiLFxuICogICAgIH1cbiAqIDwvc2NyaXB0PlxuICpcbiAqIDxtb25zdGVyLXJlbG9hZCBkYXRhLW1vbnN0ZXItb3B0aW9ucy1zZWxlY3Rvcj1cIiNjb25maWdcIj5cbiAqIDwvbW9uc3Rlci1yZWxvYWQ+XG4gKiBgYGBcbiAqXG4gKiBJZiB5b3Ugd2FudCB0byBkaXNwbGF5IGEgbG9hZGVyLCB5b3UgY2FuIGluc2VydCBhIGRpdiB3aXRoIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udGFpbmVyXCJgLlxuICogVGhlIGNvbnRlbnQgb2YgdGhpcyBkaXYgd2lsbCBiZSByZXBsYWNlZCBieSB0aGUgbG9hZGVkIGNvZGUuXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItcmVsb2FkIGRhdGEtbW9uc3Rlci1vcHRpb25zLXNlbGVjdG9yPVwiI2NvbmZpZ1wiPlxuICogPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRhaW5lclwiPlxuICogTE9BREVSIC4uLlxuICogPC9kaXY+XG4gKiA8L21vbnN0ZXItcmVsb2FkPlxuICogYGBgXG4gKlxuICogSWYgeW91IG5lZWQgYWRkaXRpb25hbCBzdHJ1Y3R1cmUsIHlvdSBjYW4gc2ltcGx5IHNwZWNpZnkgaXQuXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItcmVsb2FkIGRhdGEtbW9uc3Rlci1vcHRpb25zLXNlbGVjdG9yPVwiI2NvbmZpZ1wiPlxuICogPGRpdiBjbGFzcz1cInJvd1wiPlxuICogICA8ZGl2IGNsYXNzPVwiY29sXCIgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250YWluZXJcIj5cbiAqICAgICAgIExPQURFUiAuLi5cbiAqICAgPC9kaXY+XG4gKiA8L2Rpdj5cbiAqIDwvbW9uc3Rlci1yZWxvYWQ+XG4gKiBgYGBcbiAqXG4gKiBAZnJhZ21lbnRzIC9mcmFnbWVudHMvY29tcG9uZW50cy9mb3JtL3JlbG9hZC9cbiAqXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9mb3JtL3JlbG9hZC1zaW1wbGVcbiAqXG4gKiBAc2luY2UgMS4xMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBiZWF1dGlmdWwgcmVsb2FkIGNvbnRyb2xcbiAqIEBmaXJlcyBtb25zdGVyLWZldGNoZWRcbiAqL1xuY2xhc3MgUmVsb2FkIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9mb3JtL3JlbG9hZFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBIVE1MIHRhZywgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHVybD11bmRlZmluZWRcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHJlbG9hZD11bmRlZmluZWQgY3VycmVudGx5IHRoZSB2YWx1ZXMgZGVmaW5lZCBhcmUgYG9uc2hvd2AgYW5kIGBhbHdheXNgLiBUaGUgZGVmYXVsdCBgb25zaG93YCByZW1vdmVzIHRoZSBJbnRlcnNlY3Rpb25PYnNlcnZlci4gVGhpcyBtZWFucyB0aGF0IHRoZSBjb250ZW50IGlzIG9ubHkgbG9hZGVkIG9uY2UuIHJlbG9hZGluZyBvZiB0aGUgY29udGVudCBkb2VzIG5vdCBvY2N1ci5cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGZpbHRlcj11bmRlZmluZWQgZG9tIHNlbGVjdG9ycyB0byBzZWFyY2ggZm9yIGVsZW1lbnRzLCBpZiB1bmRlZmluZWQgdGhlbiBldmVyeXRoaW5nIGlzIHRha2VuXG5cdCAqIEBwcm9wZXJ0eSB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uUHJvY2Vzc29yW119IHByb2Nlc3NvcnNcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZldGNoIEZldGNoIFtzZWUgVXNpbmcgRmV0Y2ggbW96aWxsYS5vcmddKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GZXRjaF9BUEkvVXNpbmdfRmV0Y2gpXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5yZWRpcmVjdD1lcnJvclxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2gubWV0aG9kPUdFVFxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2gubW9kZT1zYW1lLW9yaWdpblxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2guY3JlZGVudGlhbHM9c2FtZS1vcmlnaW5cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZldGNoLmhlYWRlcnM9e1wiYWNjZXB0XCI6XCJ0ZXh0L2h0bWxcIn19XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oXG5cdFx0XHR7fSxcblx0XHRcdHN1cGVyLmRlZmF1bHRzLFxuXHRcdFx0e1xuXHRcdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZS5jYWxsKHRoaXMpLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRzaGFkb3dNb2RlOiBudWxsLFxuXHRcdFx0XHR1cmw6IG51bGwsXG5cdFx0XHRcdHJlbG9hZDogXCJvbnNob3dcIixcblx0XHRcdFx0ZmlsdGVyOiBudWxsLFxuXHRcdFx0XHRmZXRjaDoge1xuXHRcdFx0XHRcdHJlZGlyZWN0OiBcImVycm9yXCIsXG5cdFx0XHRcdFx0bWV0aG9kOiBcIkdFVFwiLFxuXHRcdFx0XHRcdG1vZGU6IFwic2FtZS1vcmlnaW5cIixcblx0XHRcdFx0XHRjcmVkZW50aWFsczogXCJzYW1lLW9yaWdpblwiLFxuXHRcdFx0XHRcdGhlYWRlcnM6IHtcblx0XHRcdFx0XHRcdGFjY2VwdDogXCJ0ZXh0L2h0bWxcIixcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdGluaXRPcHRpb25zRnJvbUFyZ3VtZW50cy5jYWxsKHRoaXMpLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgZGV0ZXJtaW5lcyB3aGljaCBhdHRyaWJ1dGVzIGFyZSB0byBiZSBtb25pdG9yZWQgYnkgYGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpYC5cblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nW119XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcblx0XHRjb25zdCBsaXN0ID0gc3VwZXIub2JzZXJ2ZWRBdHRyaWJ1dGVzO1xuXHRcdGxpc3QucHVzaChBVFRSSUJVVEVfRk9STV9VUkwpO1xuXHRcdHJldHVybiBsaXN0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqL1xuXHRbaW5pdE1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbaW5pdE1ldGhvZFN5bWJvbF0oKTtcblxuXHRcdC8vIGRhdGEtbW9uc3Rlci1vcHRpb25zXG5cdFx0dGhpc1thdHRyaWJ1dGVPYnNlcnZlclN5bWJvbF1bQVRUUklCVVRFX0ZPUk1fVVJMXSA9ICh1cmwpID0+IHtcblx0XHRcdGlmICh0aGlzLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfRk9STV9VUkwpKSB7XG5cdFx0XHRcdHRoaXMuc2V0T3B0aW9uKFwidXJsXCIsIG5ldyBVUkwodXJsLCBkb2N1bWVudC5sb2NhdGlvbikudG9TdHJpbmcoKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnNldE9wdGlvbihcInVybFwiLCB1bmRlZmluZWQpO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGludGVybmFsIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICogQHRocm93cyB7RXJyb3J9IG1pc3NpbmcgZGVmYXVsdCBzbG90XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBtaXNzaW5nIHVybFxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gd2Ugd29uJ3QgYmUgYWJsZSB0byByZWFkIHRoZSBkYXRhXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSByZXF1ZXN0IGZhaWxlZFxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gbm90IGZvdW5kXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB1bmRlZmluZWQgc3RhdHVzIG9yIHR5cGVcblx0ICogQGZpcmVzIG1vbnN0ZXItZmV0Y2hlZFxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5Gb3JtfVxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblx0XHRpbml0SW50ZXJzZWN0aW9uT2JzZXJ2ZXIuY2FsbCh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgaW50ZXJuYWwgYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItcmVsb2FkXCI7XG5cdH1cblxuXHQvKipcblx0ICogbG9hZCBjb250ZW50IGZyb20gdXJsXG5cdCAqXG5cdCAqIEl0IGlzIGltcG9ydGFudCB0byBrbm93IHRoYXQgd2l0aCB0aGlzIGZ1bmN0aW9uIHRoZSBsb2FkaW5nIGlzIGV4ZWN1dGVkXG5cdCAqIGRpcmVjdGx5LiBpdCBpcyBsb2FkZWQgYXMgd2VsbCB3aGVuIHRoZSBlbGVtZW50IGlzIG5vdCB2aXNpYmxlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3x1bmRlZmluZWR9IHVybFxuXHQgKi9cblx0ZmV0Y2godXJsKSB7XG5cdFx0aWYgKGlzU3RyaW5nKHVybCkgfHwgdXJsIGluc3RhbmNlb2YgVVJMKSB7XG5cdFx0XHR0aGlzLnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfRk9STV9VUkwsIGAke3VybH1gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbG9hZENvbnRlbnQuY2FsbCh0aGlzKTtcblx0fVxufVxuXG4vKipcbiAqIFRoaXMgYXR0cmlidXRlIGNhbiBiZSB1c2VkIHRvIHBhc3MgYSBVUkwgdG8gdGhpcyBzZWxlY3QuXG4gKlxuICogYGBgXG4gKiA8bW9uc3Rlci1zZWxlY3QgZGF0YS1tb25zdGVyLXVybD1cImh0dHBzOi8vZXhhbXBsZS5jb20vXCI+PC9tb25zdGVyLXNlbGVjdD5cbiAqIGBgYFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGluaXRPcHRpb25zRnJvbUFyZ3VtZW50cygpIHtcblx0Y29uc3Qgb3B0aW9ucyA9IHt9O1xuXG5cdGNvbnN0IHVybCA9IHRoaXMuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1VSTCk7XG5cblx0aWYgKGlzU3RyaW5nKHVybCkpIHtcblx0XHRvcHRpb25zW1widXJsXCJdID0gbmV3IFVSTCh1cmwsIGRvY3VtZW50LmxvY2F0aW9uKS50b1N0cmluZygpO1xuXHR9XG5cblx0aWYgKHRoaXMuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1JFTE9BRCkpIHtcblx0XHRvcHRpb25zW1wicmVsb2FkXCJdID0gdGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fUkVMT0FEKS50b0xvd2VyQ2FzZSgpO1xuXHR9XG5cblx0cmV0dXJuIG9wdGlvbnM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBtaXNzaW5nIGRlZmF1bHQgc2xvdFxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSBtaXNzaW5nIHVybFxuICogQHRocm93cyB7RXJyb3J9IHdlIHdvbid0IGJlIGFibGUgdG8gcmVhZCB0aGUgZGF0YVxuICogQHRocm93cyB7RXJyb3J9IHJlcXVlc3QgZmFpbGVkXG4gKiBAdGhyb3dzIHtFcnJvcn0gbm90IGZvdW5kXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5kZWZpbmVkIHN0YXR1cyBvciB0eXBlXG4gKiBAZmlyZXMgbW9uc3Rlci1mZXRjaGVkXG4gKi9cbmZ1bmN0aW9uIGluaXRJbnRlcnNlY3Rpb25PYnNlcnZlcigpIHtcblx0aWYgKHRoaXNbaW50ZXJzZWN0aW9uT2JzZXJ2ZXJXYXNJbml0aWFsaXplZF0gPT09IHRydWUpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzW2ludGVyc2VjdGlvbk9ic2VydmVyV2FzSW5pdGlhbGl6ZWRdID0gdHJ1ZTtcblxuXHRjb25zdCBvcHRpb25zID0ge1xuXHRcdHRocmVzaG9sZDogWzAuNV0sXG5cdH07XG5cblx0Y29uc3QgY2FsbGJhY2sgPSAoZW50cmllcywgb2JzZXJ2ZXIpID0+IHtcblx0XHRmb3IgKGNvbnN0IFssIGVudHJ5XSBvZiBlbnRyaWVzLmVudHJpZXMoKSkge1xuXHRcdFx0aWYgKGVudHJ5LmlzSW50ZXJzZWN0aW5nID09PSB0cnVlKSB7XG5cdFx0XHRcdC8vIHVuZGVmaW5lZCBvciBhbHdheXMgZG8gdGhlIHNhbWVcblx0XHRcdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwicmVsb2FkXCIpID09PSBcIm9uc2hvd1wiKSB7XG5cdFx0XHRcdFx0b2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRsb2FkQ29udGVudC5jYWxsKHRoaXMpLmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLnRvU3RyaW5nKCkpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS50b1N0cmluZygpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHRjb25zdCBvYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihjYWxsYmFjaywgb3B0aW9ucyk7XG5cdG9ic2VydmVyLm9ic2VydmUodGhpcyk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBtaXNzaW5nIGRlZmF1bHQgc2xvdFxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSBtaXNzaW5nIHVybFxuICogQHRocm93cyB7RXJyb3J9IHdlIHdvbid0IGJlIGFibGUgdG8gcmVhZCB0aGUgZGF0YVxuICogQHRocm93cyB7RXJyb3J9IHJlcXVlc3QgZmFpbGVkXG4gKiBAdGhyb3dzIHtFcnJvcn0gbm90IGZvdW5kXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5kZWZpbmVkIHN0YXR1cyBvciB0eXBlXG4gKiBAdGhyb3dzIHtFcnJvcn0gY2xpZW50IGVycm9yXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5kZWZpbmVkIHN0YXR1cyBvciB0eXBlXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZlxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqIEBmaXJlcyBtb25zdGVyLWZldGNoZWRcbiAqIEByZXR1cm4ge1Byb21pc2V9XG4gKi9cbmZ1bmN0aW9uIGxvYWRDb250ZW50KCkge1xuXHRjb25zdCB1cmwgPSB0aGlzLmdldE9wdGlvbihcInVybFwiLCB1bmRlZmluZWQpO1xuXHRpZiAoIWlzU3RyaW5nKHVybCkgfHwgdXJsID09PSBcIlwiKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibWlzc2luZyB1cmxcIik7XG5cdH1cblxuXHRjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb24oXCJmZXRjaFwiLCB7fSk7XG5cblx0bGV0IHBhcmVudE5vZGUgPSB0aGlzO1xuXHRpZiAodGhpcy5zaGFkb3dSb290KSB7XG5cdFx0cGFyZW50Tm9kZSA9IHRoaXMuc2hhZG93Um9vdDtcblx0fVxuXG5cdGxldCBjb250YWluZXIgPSBwYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3IoYFske0FUVFJJQlVURV9ST0xFfT1jb250YWluZXJdYCk7XG5cdGxldCBjdXJyZW50RGlzcGxheU1vZGUgPSBjb250YWluZXI/LnN0eWxlPy5kaXNwbGF5O1xuXG5cdGlmIChjdXJyZW50RGlzcGxheU1vZGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdGN1cnJlbnREaXNwbGF5TW9kZSA9IFwiaW5oZXJpdFwiO1xuXHR9XG5cblx0aWYgKCEoY29udGFpbmVyIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0Y29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0XHRjb250YWluZXIuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuXHRcdGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUsIFwiY29udGFpbmVyXCIpO1xuXHRcdHBhcmVudE5vZGUuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTtcblx0fVxuXG5cdHJldHVybiBsb2FkQW5kQXNzaWduQ29udGVudChjb250YWluZXIsIHVybCwgb3B0aW9ucywgdGhpcy5nZXRPcHRpb24oXCJmaWx0ZXJcIikpXG5cdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0aWYgKGN1cnJlbnREaXNwbGF5TW9kZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gY3VycmVudERpc3BsYXlNb2RlO1xuXHRcdFx0fVxuXHRcdH0pXG5cdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHR0aHJvdyBlO1xuXHRcdH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHRyZXR1cm4gdGhpcy5pbm5lckhUTUw7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChSZWxvYWQpO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBDdXN0b21FbGVtZW50LCBhdHRyaWJ1dGVPYnNlcnZlclN5bWJvbCB9IGZyb20gXCIuL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IEN1c3RvbUNvbnRyb2wgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgYXR0YWNoZWRJbnRlcm5hbFN5bWJvbCA9IFN5bWJvbChcImF0dGFjaGVkSW50ZXJuYWxcIik7XG5cbi8qKlxuICogVGhpcyBpcyBhIGJhc2UgY2xhc3MgZm9yIGNyZWF0aW5nIGN1c3RvbSBjb250cm9scyB1c2luZyB0aGUgcG93ZXIgb2YgQ3VzdG9tRWxlbWVudC5cbiAqXG4gKiBBZnRlciBkZWZpbmluZyBhIGBDdXN0b21FbGVtZW50YCwgdGhlIGByZWdpc3RlckN1c3RvbUVsZW1lbnRgIG1ldGhvZCBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgY2xhc3MgbmFtZS4gT25seSB0aGVuXG4gKiB3aWxsIHRoZSB0YWcgZGVmaW5lZCB2aWEgdGhlIGBnZXRUYWdgIG1ldGhvZCBiZSBtYWRlIGtub3duIHRvIHRoZSBET00uXG4gKlxuICogVGhpcyBjb250cm9sIHVzZXMgYGF0dGFjaEludGVybmFscygpYCB0byBpbnRlZ3JhdGUgdGhlIGNvbnRyb2wgaW50byBhIGZvcm0uIElmIHRoZSB0YXJnZXQgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydFxuICogdGhpcyBtZXRob2QsIHRoZSBbcG9seWZpbGxdKGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2VsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsKSBjYW4gYmUgdXNlZC5cbiAqXG4gKiBZb3UgY2FuIGNyZWF0ZSB0aGUgb2JqZWN0IHVzaW5nIHRoZSBmdW5jdGlvbiBgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgpYC5cbiAqXG4gKiBUaGlzIGNvbnRyb2wgdXNlcyBgYXR0YWNoSW50ZXJuYWxzKClgIHRvIGludGVncmF0ZSB0aGUgY29udHJvbCBpbnRvIGEgZm9ybS4gSWYgdGhlIHRhcmdldCBlbnZpcm9ubWVudCBkb2VzIG5vdCBzdXBwb3J0XG4gKiB0aGlzIG1ldGhvZCwgdGhlIFBvbHlmaWxsIGZvciBhdHRhY2hJbnRlcm5hbHMoKSBjYW4gYmUgdXNlZDoge0BsaW5rIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2VsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsfGVsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsfS5cbiAqXG4gKiBMZWFybiBtb3JlIGFib3V0IFdJQ0cgV2ViIENvbXBvbmVudHM6IHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vV0lDRy93ZWJjb21wb25lbnRzfFdJQ0cgV2ViIENvbXBvbmVudHN9LlxuICpcbiAqIFJlYWQgdGhlIEhUTUwgc3BlY2lmaWNhdGlvbiBmb3IgQ3VzdG9tIEVsZW1lbnRzOiB7QGxpbmsgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvY3VzdG9tLWVsZW1lbnRzLmh0bWwjY3VzdG9tLWVsZW1lbnRzfEN1c3RvbSBFbGVtZW50c30uXG4gKlxuICogUmVhZCB0aGUgSFRNTCBzcGVjaWZpY2F0aW9uIGZvciBDdXN0b20gRWxlbWVudCBSZWFjdGlvbnM6IHtAbGluayBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL2Rldi9jdXN0b20tZWxlbWVudHMuaHRtbCNjdXN0b20tZWxlbWVudC1yZWFjdGlvbnN8Q3VzdG9tIEVsZW1lbnQgUmVhY3Rpb25zfS5cbiAqXG4gKiBAc3VtbWFyeSBBIGJhc2UgY2xhc3MgZm9yIGN1c3RvbSBjb250cm9scyBiYXNlZCBvbiBDdXN0b21FbGVtZW50LlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xNC4wXG4gKi9cbmNsYXNzIEN1c3RvbUNvbnRyb2wgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcblx0LyoqXG5cdCAqIFRoZSBjb25zdHJ1Y3RvciBtZXRob2Qgb2YgQ3VzdG9tQ29udHJvbCwgd2hpY2ggaXMgY2FsbGVkIHdoZW4gY3JlYXRpbmcgYSBuZXcgaW5zdGFuY2UuXG5cdCAqIEl0IGNoZWNrcyB3aGV0aGVyIHRoZSBlbGVtZW50IHN1cHBvcnRzIGBhdHRhY2hJbnRlcm5hbHMoKWAgYW5kIGluaXRpYWxpemVzIGFuIGludGVybmFsIGZvcm0tYXNzb2NpYXRlZCBlbGVtZW50XG5cdCAqIGlmIHN1cHBvcnRlZC4gQWRkaXRpb25hbGx5LCBpdCBpbml0aWFsaXplcyBhIE11dGF0aW9uT2JzZXJ2ZXIgdG8gd2F0Y2ggZm9yIGF0dHJpYnV0ZSBjaGFuZ2VzLlxuXHQgKlxuXHQgKiBTZWUgdGhlIGxpbmtzIGJlbG93IGZvciBtb3JlIGluZm9ybWF0aW9uOlxuXHQgKiB7QGxpbmsgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvY3VzdG9tLWVsZW1lbnRzLmh0bWwjZG9tLWN1c3RvbWVsZW1lbnRyZWdpc3RyeS1kZWZpbmV8Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmRlZmluZSgpfVxuXHQgKiB7QGxpbmsgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvY3VzdG9tLWVsZW1lbnRzLmh0bWwjZG9tLWN1c3RvbWVsZW1lbnRyZWdpc3RyeS1nZXR8Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5LmdldCgpfVxuXHQgKiBhbmQge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzfEVsZW1lbnRJbnRlcm5hbHN9XG5cdCAqXG5cdCAqIEBpbmhlcml0ZG9jXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgRWxlbWVudEludGVybmFscyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBhIHBvbHlmaWxsIGlzIG5lY2Vzc2FyeVxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdC8vIGNoZWNrIGlmIGVsZW1lbnQgc3VwcG9ydHMgYGF0dGFjaEludGVybmFscygpYFxuXHRcdGlmICh0eXBlb2YgdGhpc1tcImF0dGFjaEludGVybmFsc1wiXSA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHR0aGlzW2F0dGFjaGVkSW50ZXJuYWxTeW1ib2xdID0gdGhpcy5hdHRhY2hJbnRlcm5hbHMoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gYGF0dGFjaEludGVybmFscygpYCBpcyBub3Qgc3VwcG9ydGVkLCBzbyBhIHBvbHlmaWxsIGlzIG5lY2Vzc2FyeVxuXHRcdFx0dGhyb3cgRXJyb3IoXG5cdFx0XHRcdFwidGhlIEVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3NhcnlcIixcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Ly8gaW5pdGlhbGl6ZSBhIE11dGF0aW9uT2JzZXJ2ZXIgdG8gd2F0Y2ggZm9yIGF0dHJpYnV0ZSBjaGFuZ2VzXG5cdFx0aW5pdE9ic2VydmVyLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RvbS9jdXN0b20tY29udHJvbEBAaW5zdGFuY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgZGV0ZXJtaW5lcyB3aGljaCBhdHRyaWJ1dGVzIGFyZSB0byBiZSBtb25pdG9yZWQgYnkgYGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpYC5cblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nW119XG5cdCAqIEBzaW5jZSAxLjE1LjBcblx0ICovXG5cdHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuXHRcdHJldHVybiBzdXBlci5vYnNlcnZlZEF0dHJpYnV0ZXM7XG5cdH1cblxuXHQvKipcblx0ICogQWRkaW5nIGEgc3RhdGljIGBmb3JtQXNzb2NpYXRlZGAgcHJvcGVydHksIHdpdGggYSB0cnVlIHZhbHVlLCBtYWtlcyBhbiBhdXRvbm9tb3VzIGN1c3RvbSBlbGVtZW50IGEgZm9ybS1hc3NvY2lhdGVkIGN1c3RvbSBlbGVtZW50LlxuXHQgKlxuXHQgKiBAc2VlIFthdHRhY2hJbnRlcm5hbHMoKV17QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxFbGVtZW50L2F0dGFjaEludGVybmFsc31cblx0ICogQHNlZSBbQ3VzdG9tIEVsZW1lbnRzIEZhY2UgRXhhbXBsZV17QGxpbmsgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvY3VzdG9tLWVsZW1lbnRzLmh0bWwjY3VzdG9tLWVsZW1lbnRzLWZhY2UtZXhhbXBsZX1cblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdHN0YXRpYyBmb3JtQXNzb2NpYXRlZCA9IHRydWU7XG5cblx0LyoqXG5cdCAqIEBpbmhlcml0ZG9jXG5cdCAqKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBleHRlbmQoe30sIHN1cGVyLmRlZmF1bHRzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNdXN0IGJlIG92ZXJyaWRkZW4gYnkgYSBkZXJpdmVkIGNsYXNzIGFuZCByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBjb250cm9sLlxuXHQgKlxuXHQgKiBUaGlzIGlzIGEgbWV0aG9kIG9mIFtpbnRlcm5hbCBBUEldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzKSwgd2hpY2ggaXMgYSBwYXJ0IG9mIHRoZSB3ZWIgc3RhbmRhcmQgZm9yIGN1c3RvbSBlbGVtZW50cy5cblx0ICpcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSB2YWx1ZSBnZXR0ZXIgbXVzdCBiZSBvdmVyd3JpdHRlbiBieSB0aGUgZGVyaXZlZCBjbGFzc1xuXHQgKi9cblx0Z2V0IHZhbHVlKCkge1xuXHRcdHRocm93IEVycm9yKFwidGhlIHZhbHVlIGdldHRlciBtdXN0IGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBkZXJpdmVkIGNsYXNzXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE11c3QgYmUgb3ZlcnJpZGRlbiBieSBhIGRlcml2ZWQgY2xhc3MgYW5kIHNldCB0aGUgdmFsdWUgb2YgdGhlIGNvbnRyb2wuXG5cdCAqXG5cdCAqIFRoaXMgaXMgYSBtZXRob2Qgb2YgW2ludGVybmFsIEFQSV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMpLCB3aGljaCBpcyBhIHBhcnQgb2YgdGhlIHdlYiBzdGFuZGFyZCBmb3IgY3VzdG9tIGVsZW1lbnRzLlxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgdmFsdWUgc2V0dGVyIG11c3QgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIGRlcml2ZWQgY2xhc3Ncblx0ICovXG5cdHNldCB2YWx1ZSh2YWx1ZSkge1xuXHRcdHRocm93IEVycm9yKFwidGhlIHZhbHVlIHNldHRlciBtdXN0IGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBkZXJpdmVkIGNsYXNzXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgaXMgYSBtZXRob2Qgb2YgW2ludGVybmFsIGFwaV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMpXG5cdCAqXG5cdCAqIEByZXR1cm4ge05vZGVMaXN0fVxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscy9sYWJlbHN9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgRWxlbWVudEludGVybmFscyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBhIHBvbHlmaWxsIGlzIG5lY2Vzc2FyeVxuXHQgKi9cblx0Z2V0IGxhYmVscygpIHtcblx0XHRyZXR1cm4gZ2V0SW50ZXJuYWwuY2FsbCh0aGlzKT8ubGFiZWxzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgaXMgYSBtZXRob2Qgb2YgW2ludGVybmFsIGFwaV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMpXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ3xudWxsfVxuXHQgKi9cblx0Z2V0IG5hbWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlKFwibmFtZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGlzIGEgbWV0aG9kIG9mIFtpbnRlcm5hbCBhcGldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzKVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRnZXQgdHlwZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5nZXRUYWcoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGlzIGEgbWV0aG9kIG9mIFtpbnRlcm5hbCBhcGldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzKVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtWYWxpZGl0eVN0YXRlfVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIEVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3Nhcnlcblx0ICogQHNlZSBbVmFsaWRpdHlTdGF0ZV17QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1ZhbGlkaXR5U3RhdGV9XG5cdCAqIEBzZWUgW3ZhbGlkaXR5XXtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvdmFsaWRpdHl9XG5cdCAqL1xuXHRnZXQgdmFsaWRpdHkoKSB7XG5cdFx0cmV0dXJuIGdldEludGVybmFsLmNhbGwodGhpcyk/LnZhbGlkaXR5O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgaXMgYSBtZXRob2Qgb2YgW2ludGVybmFsIGFwaV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMpXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscy92YWxpZGF0aW9uTWVzc2FnZVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIEVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3Nhcnlcblx0ICovXG5cdGdldCB2YWxpZGF0aW9uTWVzc2FnZSgpIHtcblx0XHRyZXR1cm4gZ2V0SW50ZXJuYWwuY2FsbCh0aGlzKT8udmFsaWRhdGlvbk1lc3NhZ2U7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBpcyBhIG1ldGhvZCBvZiBbaW50ZXJuYWwgYXBpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscylcblx0ICpcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscy93aWxsVmFsaWRhdGVcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBFbGVtZW50SW50ZXJuYWxzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGEgcG9seWZpbGwgaXMgbmVjZXNzYXJ5XG5cdCAqL1xuXHRnZXQgd2lsbFZhbGlkYXRlKCkge1xuXHRcdHJldHVybiBnZXRJbnRlcm5hbC5jYWxsKHRoaXMpPy53aWxsVmFsaWRhdGU7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBpcyBhIG1ldGhvZCBvZiBbaW50ZXJuYWwgYXBpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscylcblx0ICpcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscy9zdGF0ZXNcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBFbGVtZW50SW50ZXJuYWxzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGEgcG9seWZpbGwgaXMgbmVjZXNzYXJ5XG5cdCAqL1xuXHRnZXQgc3RhdGVzKCkge1xuXHRcdHJldHVybiBnZXRJbnRlcm5hbC5jYWxsKHRoaXMpPy5zdGF0ZXM7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBpcyBhIG1ldGhvZCBvZiBbaW50ZXJuYWwgYXBpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscylcblx0ICpcblx0ICogQHJldHVybiB7SFRNTEZvbnRFbGVtZW50fG51bGx9XG5cdCAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMvZm9ybVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIEVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3Nhcnlcblx0ICovXG5cdGdldCBmb3JtKCkge1xuXHRcdHJldHVybiBnZXRJbnRlcm5hbC5jYWxsKHRoaXMpPy5mb3JtO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgaXMgYSBtZXRob2Qgb2YgW2ludGVybmFsIGFwaV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMpXG5cdCAqXG5cdCAqIGBgYFxuXHQgKiAvLyBVc2UgdGhlIGNvbnRyb2wncyBuYW1lIGFzIHRoZSBiYXNlIG5hbWUgZm9yIHN1Ym1pdHRlZCBkYXRhXG5cdCAqIGNvbnN0IG4gPSB0aGlzLmdldEF0dHJpYnV0ZSgnbmFtZScpO1xuXHQgKiBjb25zdCBlbnRyaWVzID0gbmV3IEZvcm1EYXRhKCk7XG5cdCAqIGVudHJpZXMuYXBwZW5kKG4gKyAnLWZpcnN0LW5hbWUnLCB0aGlzLmZpcnN0TmFtZV8pO1xuXHQgKiBlbnRyaWVzLmFwcGVuZChuICsgJy1sYXN0LW5hbWUnLCB0aGlzLmxhc3ROYW1lXyk7XG5cdCAqIHRoaXMuc2V0Rm9ybVZhbHVlKGVudHJpZXMpO1xuXHQgKiBgYGBcblx0ICpcblx0ICogQHBhcmFtIHtGaWxlfHN0cmluZ3xGb3JtRGF0YX0gdmFsdWVcblx0ICogQHBhcmFtIHtGaWxlfHN0cmluZ3xGb3JtRGF0YX0gc3RhdGVcblx0ICogQHJldHVybiB7dW5kZWZpbmVkfVxuXHQgKiBAdGhyb3dzIHtET01FeGNlcHRpb259IE5vdFN1cHBvcnRlZEVycm9yXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgRWxlbWVudEludGVybmFscyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBhIHBvbHlmaWxsIGlzIG5lY2Vzc2FyeVxuXHQgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzL3NldEZvcm1WYWx1ZVxuXHQgKi9cblx0c2V0Rm9ybVZhbHVlKHZhbHVlLCBzdGF0ZSkge1xuXHRcdGdldEludGVybmFsLmNhbGwodGhpcykuc2V0Rm9ybVZhbHVlKHZhbHVlLCBzdGF0ZSk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtvYmplY3R9IGZsYWdzXG5cdCAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gbWVzc2FnZVxuXHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBhbmNob3Jcblx0ICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscy9zZXRWYWxpZGl0eVxuXHQgKiBAcmV0dXJuIHt1bmRlZmluZWR9XG5cdCAqIEB0aHJvd3Mge0RPTUV4Y2VwdGlvbn0gTm90U3VwcG9ydGVkRXJyb3Jcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBFbGVtZW50SW50ZXJuYWxzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGEgcG9seWZpbGwgaXMgbmVjZXNzYXJ5XG5cdCAqL1xuXHRzZXRWYWxpZGl0eShmbGFncywgbWVzc2FnZSwgYW5jaG9yKSB7XG5cdFx0Z2V0SW50ZXJuYWwuY2FsbCh0aGlzKS5zZXRWYWxpZGl0eShmbGFncywgbWVzc2FnZSwgYW5jaG9yKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGlzIGEgbWV0aG9kIG9mIFtpbnRlcm5hbCBhcGldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzKVxuXHQgKlxuXHQgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzL2NoZWNrVmFsaWRpdHlcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICogQHRocm93cyB7RE9NRXhjZXB0aW9ufSBOb3RTdXBwb3J0ZWRFcnJvclxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIEVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3Nhcnlcblx0ICovXG5cdGNoZWNrVmFsaWRpdHkoKSB7XG5cdFx0cmV0dXJuIGdldEludGVybmFsLmNhbGwodGhpcyk/LmNoZWNrVmFsaWRpdHkoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGlzIGEgbWV0aG9kIG9mIFtpbnRlcm5hbCBhcGldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzKVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzL3JlcG9ydFZhbGlkaXR5XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgRWxlbWVudEludGVybmFscyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBhIHBvbHlmaWxsIGlzIG5lY2Vzc2FyeVxuXHQgKiBAdGhyb3dzIHtET01FeGNlcHRpb259IE5vdFN1cHBvcnRlZEVycm9yXG5cdCAqL1xuXHRyZXBvcnRWYWxpZGl0eSgpIHtcblx0XHRyZXR1cm4gZ2V0SW50ZXJuYWwuY2FsbCh0aGlzKT8ucmVwb3J0VmFsaWRpdHkoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBgZm9ybWAgYXR0cmlidXRlIG9mIHRoZSBjdXN0b20gY29udHJvbCB0byB0aGUgYGlkYCBvZiB0aGUgcGFzc2VkIGZvcm0gZWxlbWVudC5cblx0ICogSWYgbm8gZm9ybSBlbGVtZW50IGlzIHBhc3NlZCwgcmVtb3ZlcyB0aGUgYGZvcm1gIGF0dHJpYnV0ZS5cblx0ICpcblx0ICogQHBhcmFtIHtIVE1MRm9ybUVsZW1lbnR9IGZvcm0gLSBUaGUgZm9ybSBlbGVtZW50IHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBjb250cm9sXG5cdCAqL1xuXHRmb3JtQXNzb2NpYXRlZENhbGxiYWNrKGZvcm0pIHtcblx0XHRpZiAoZm9ybSkge1xuXHRcdFx0aWYgKGZvcm0uaWQpIHtcblx0XHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUoXCJmb3JtXCIsIGZvcm0uaWQpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnJlbW92ZUF0dHJpYnV0ZShcImZvcm1cIik7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgb3IgcmVtb3ZlcyB0aGUgYGRpc2FibGVkYCBhdHRyaWJ1dGUgb2YgdGhlIGN1c3RvbSBjb250cm9sIGJhc2VkIG9uIHRoZSBwYXNzZWQgdmFsdWUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gZGlzYWJsZWQgLSBXaGV0aGVyIG9yIG5vdCB0aGUgY29udHJvbCBzaG91bGQgYmUgZGlzYWJsZWRcblx0ICovXG5cdGZvcm1EaXNhYmxlZENhbGxiYWNrKGRpc2FibGVkKSB7XG5cdFx0aWYgKGRpc2FibGVkKSB7XG5cdFx0XHRpZiAoIXRoaXMuaGFzQXR0cmlidXRlKFwiZGlzYWJsZWRcIikpIHtcblx0XHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiLCBcIlwiKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKHRoaXMuaGFzQXR0cmlidXRlKFwiZGlzYWJsZWRcIikpIHtcblx0XHRcdFx0dGhpcy5yZW1vdmVBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHN0YXRlXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlXG5cdCAqL1xuXHRmb3JtU3RhdGVSZXN0b3JlQ2FsbGJhY2soc3RhdGUsIG1vZGUpIHt9XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRmb3JtUmVzZXRDYWxsYmFjaygpIHtcblx0XHR0aGlzLnZhbHVlID0gXCJcIjtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhlIEVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3NhcnlcbiAqIEB0aGlzIEN1c3RvbUNvbnRyb2xcbiAqL1xuZnVuY3Rpb24gZ2V0SW50ZXJuYWwoKSB7XG5cdGlmICghKGF0dGFjaGVkSW50ZXJuYWxTeW1ib2wgaW4gdGhpcykpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcIkVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3NhcnlcIixcblx0XHQpO1xuXHR9XG5cblx0cmV0dXJuIHRoaXNbYXR0YWNoZWRJbnRlcm5hbFN5bWJvbF07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqIEB0aGlzIEN1c3RvbUNvbnRyb2xcbiAqL1xuZnVuY3Rpb24gaW5pdE9ic2VydmVyKCkge1xuXHQvLyB2YWx1ZVxuXHR0aGlzW2F0dHJpYnV0ZU9ic2VydmVyU3ltYm9sXVtcInZhbHVlXCJdID0gKCkgPT4ge1xuXHRcdHRoaXMuc2V0T3B0aW9uKFwidmFsdWVcIiwgdGhpcy5nZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiKSk7XG5cdH07XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCAyMDI0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqL1xuXG5pbXBvcnQge2FkZEF0dHJpYnV0ZVRva2VufSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge0FUVFJJQlVURV9FUlJPUk1FU1NBR0V9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQge0J1dHRvblN0eWxlU2hlZXR9XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBCdXR0b25TdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcbiAgQnV0dG9uU3R5bGVTaGVldC5pbnNlcnRSdWxlKGBcbkBsYXllciBidXR0b24geyBcbltkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3V0bGluZTpub25lO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXh7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9Omhvc3R7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6YmxvY2t9Lm1vbnN0ZXItYnV0dG9uLXByaW1hcnksYnV0dG9ue2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYnV0dG9uLXNlY29uZGFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1idXR0b24tc2Vjb25kYXJ5LC5tb25zdGVyLWJ1dHRvbi10ZXJ0aWFyeXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofS5tb25zdGVyLWJ1dHRvbi10ZXJ0aWFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci1idXR0b24tb3V0bGluZS1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXByaW1hcnksLm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtc2Vjb25kYXJ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtc2Vjb25kYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXRlcnRpYXJ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCk7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9YnV0dG9uOmFjdGl2ZSxidXR0b246aG92ZXJ7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMik7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC44cyxjb2xvciAuMjVzIC4wODMzMzMzMzMzc31idXR0b246YWN0aXZle3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW91dGxpbmUpfS5tb25zdGVyLWJ1dHRvbi1iYXIsLm1vbnN0ZXItYnV0dG9uLWdyb3Vwe2FsaWduLWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOnN0cmV0Y2g7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LXdyYXA6bm93cmFwO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5tb25zdGVyLWJ1dHRvbi1ncm91cHtib3gtc2l6aW5nOmJvcmRlci1ib3g7Z2FwOjA7bWFyZ2luOjFyZW0gMH0ubW9uc3Rlci1idXR0b24tZ3JvdXA+Om5vdCg6bGFzdC1jaGlsZCl7bWFyZ2luLXJpZ2h0OmNhbGModmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpKi0xKX0ubW9uc3Rlci1idXR0b24tZ3JvdXAgOmhvdmVye2JveC1zaGFkb3c6bm9uZX1idXR0b246Zm9jdXN7b3V0bGluZToxcHggZGFzaGVkIHZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQpO291dGxpbmUtb2Zmc2V0OjJweDt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lKX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmxpZ2h0KXtidXR0b246Zm9jdXN7b3V0bGluZToxcHggZGFzaGVkIHZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTMpO291dGxpbmUtb2Zmc2V0OjJweDt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lKX19Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMSwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0yLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci0we2JvcmRlci1yYWRpdXM6MDtib3JkZXItc3R5bGU6bm9uZTtib3JkZXItd2lkdGg6MH0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMiwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMSwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMiwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMywubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfUBmb250LWZhY2V7Zm9udC1kaXNwbGF5OnN3YXA7Zm9udC1mYW1pbHk6UmFsZXdheTtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDozMDA7c3JjOnVybChkYXRhOmFwcGxpY2F0aW9uL3gtZm9udC13b2ZmMjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxkMDlHTWdBQkFBQUFBRko0QUJJQUFBQUF0M0FBQUZJUUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR29FOEcrNDZISVU4Qm1BL1UxUkJWRVFBaFFnSWdRb0pueFFSQ0FxQnVneUJtbkFMaENJQUFUWUNKQU9JUUFRZ0JZVVVCeUFNZ3h3YmZhUVhhSmVmbU56MFpvbDN2NjBjUGVaTXBHNEhKU2prNXFJSU5nNkNHTWdsWmYvL24zRjBqT0dHRFJBMXJYZUluY0pJVWtOSEduNjlxTVJEVThaYWpqczlVYnNtdG5xbkUzdjN2cWlRbWZSUXBMa0tXNlFad2FsNnM1SVVpSk5VU1VHL093b0RZNkI2NzVPalNqa0RTU011MnBlZHB1OXZKSUxVbEpkNzA3RCtlTEhwallESTRlMXVEbkxqSEh2eHBEWEdNeWR1TExuMXF0MEZDUU95RnNKWkUxK2tKcTNUK0llN0JKRklOT0FOYmk5dlRVemhJN1c0R21VTDBsV2pUL0ZRUWkvbSsreHVQUDAyb21SSGU1cG40RGdmTlpmbitSOXo5Nzl0bUVlTmFxMVJ4UnFIVGpUUE5BMkpGRWdySGRvL250L1cvNXpiZ0dDeGlhNkVrVmlBMkZoWUdJdFJtRTFadlZVdnF0U3RiN012cmQzVzcrdDIrMFhkb1RuenpqWWJwN21TSExBQ2toTVdnQ1RMNnMwV3YwQVVvaEpmRXFFM29wUGQ1OGlrSm5LbG8rM3VhZVNIWUo2ZmNJY1hqZCtyS1VFc2FFbFRxbFVsVlJtL04rZS84aVAwTDVBS296TmxKMy85aUJ3c2hNNnY1SklVSnlrZ1QzZmRyT21xNkxjcytaK3EvWHNBWEZ4RUVpUUlVYUtvc0ZuN2N0VCs3QkJTNWRxRG9sSlh1bmJsN3J0dHpEL3YzODRMZnRKYWdGRkFMWVBFNUE3Z25NclpCaHQ0bFhxc2JaS21iZHEwVHRPbXBtZ05pdWdNMlBZQmM3M01yanE3R0xzb1hIY1RwdDl1UHZGRHo4ZU4zZytzeHJQUUF3NkRURk5wL09aSTlpaW5OaXRaaFJtcFFPQ2tkb0JkQU5qVldsYXZNaXR3RE5KWC9wWUlBa1Z3bk9QL3ZXNXh6b013N1NBRkFLVStaei9rblAvWjlqK09kZnJMOEtlMnZkS2JtcGh1eEpTdUw4RVVBZ2dISWlCSFArNDQ0RUR6djFQVFEzWWtPY09TbFRIbWo2VXNkZm8yTCsvanBZZTdJSFdjUVVnY2drcExGUjFZVFc4Q0dLUVg5YjhHRkFBQUg5dG80UkhRNkdMdkZScmk0RGl3VHpBQURETUtEUHIvZlozVi9xZGdQbWtHektURW1XRVhiN1EzdHRnVFlxbzJuUDYvKzk3WGYrRi85SkhBVnNJSWNBQ0Jad1J5a0dUN2dDUjhWb2hKY1VPT1NEamlTYkFwaE1vem0ySlJwdEJ0VVc2OVhiTkZHM0lWeTJLTG9rNDgvTGZzbTUyN0lhcUJMTXVCYk9GSXdlRlVkMDF2ZUwrWTh4V2h0emNxVG0yQ0lUYzVlTEp3U0k0ZllsTFlGSVZIQXMvL1Q1M040L1l4MWhLR1UrSFNxRXJkcFBQbnM2ZnFxV0pzTmJaYUNsUXRqbE9MVU1zaGNkb0E1VFFzczRKTGM5MFN4Q09NTVVLNEtQOU5zaHB6cFg0dnd4S0NoQ0FTUkVSRS9MS3NXUmxKd05LQWNUblhBaEV5M3IxS0hjWmEvWWRYNTg0MjAvaWFYbXRHaG9DQWlJaUFSMjN2L1A5K0tUQUNBTjVoZGtDM3hVQzRFTHNnZ3ZrUjJrckVqWVNFdjBCS1NtSENoSXZZT0NBSmtLUWd5WU1NMlFvVU16Q28xNkJKODVxQVdDQ2RIZWszQUIwT0RMMUxxMFBnVGUzaFN3MmZoaTRYaFB1ZXVRV0VINnh0SUVRQWJHMk5tNW9WNTRRRlAreUtnTzJENFQ1dC93ejJYVzkyL3JwcXBMVFNJUDhxVjl2THZPZHMwTkxXeVg1MUs2b2ZidlBaRTFwYWY3dzMxOEM5WnRocTdmMzJiZnVMNjRWWkh3NTE0WXNtNWxnZk5iZkc3Vzlsc1VBNEVHejcyM3Z4d0d6cDRmUlIrbVA4THM1QjdLQjJlREpYYzZ4d2xHNjkwMnVnN0F6TEE4TlkyMUIyZEIvUDVxZk9WOHQxb255TDVqWkREZlFJNVJnOEQ5OEZ2SHN2Y2xIdUpzcmR2c0pycGMvVHIvZ3UvRWZaSnpYVXpwV2FEajdNNytVUDgvOEVrQUFWYUFTL0NSK1hzL0pONFlhSWNPMXhIWmNVYU1NYmtscnBLeTdOZlFKS1FjVVJhZ29HbUNXK0hBNkVOdmJnMzNzbDJwSVlSbUU5YklIYjBtQTZrazZsTjVHZHlNTjVFYm1RaHhIS2x3TWdUNThjZ3c3cGRVUno3bmZNY1FmY1UzdkljelZrZHJoWDhYSHE0MDEydEZPZDdrVC9hN3A3bTgzV0E3MUY3YU85TStkanZkZDZqN2Z4bStEMVB1M3ozdWlydm11eXphNTN0cnY5M2xUYjgyUlQyS2FGVlVLTU5QMzZCdlFNQ28wR3NFZGtMOHMrekxnMUV4Yk0wTmdDV0F4Z3pmODJERzFLWE1mYzRyak5jUWZIS3hTQ3VSdUJJNUFvZERERGtHZFY4Q25WVkVtRU1haW40U2EwQVhUSTBSQk5wT1lBTFZxMWFWOXZ4SmlVekhLV0NpczZtcDBCdWt4MDY5R3I3NHNuVk5ic29DbWtWTW9wNStwREdhV3oyc0xEcjJpTnQrb1pPMGIzNllTSWpXY3h2bmxOMHgwVmhsWW9XNFVSalhYS3lMRzNZM3FvTGRFYXpIQUVFb1Z1TWwzRERlRVJWcEcvamVURVIwQ1VaRVUxbW90cUZvaXdKRktVYURGaWFjU2xCSnJFalNRS0ovQ1NGU21TS2sxNjFRbGtkS2V5U1hZenNkWEtpNkk5aWtOSk10Q1VLbE91UXFVcTFWSFQxenE2K2x6ZlFOQUlhNUpwUm92V2FFUDdaeHVObVRqTUxCWXVxM1hVVGdOZFJEZDZVcTlBMzNjYnhBenhERE9OMEl4YU5WYXhkLy9zL2FqeEFFNkpuUGJGR1prdUMzdWFOVThFc0RTTFpWbXhPajFQZDhIUXhYU3BlZGtYYXdiVzZ3Wm84KzZEcml1UUZGdzVJcHZuSmg2L1pnRkpLOTMwYUVNMlhKM3lKQjBESG9waGJxZzB1cmt2TUlnWWx0YkdSUGNka2Q3VmovTlY0cGJBYmErL0U0QmpDZzlwNVplcmkvcGRNMENHLzd0WFpOeFZFKzZiWWF2UW42dW1Xd3kzRlhmNmdnK1huQXRIRGdqa1BOaVVicXBvd3ZEVXZiUmxjajVYWkhZelY4Smk0TmwxdmpzT2hyTWF4T0h4ZUR3ZWp6L1ZJSEpYbjZIMHdoZzZxRk9FVXFRbzBXTEUwb2hMQ1RLSjB5UTVMVTl5UlFwU3BVbGZabkFTQmtXcGxDbFhvVktWNnFpYlRCdE1tUUtZWVdIVlVVZnRHSXQ2Mmxkbk1IM0VwaVUwcVZRcUhiQ0x4T1UrRTQvMVhMZkJFaHpLaGdVY2dVU2hmeHdtRHo5RzVFUkFBSEw3RkhSS1F5cm53dXhRZjVyaEhCRUJSSW9TTFVZc3pVYmM0cnRNZHBsMjZGZ2Q1NXRnUUc4eC9mQVoySnpJdkdibWxyY1hBbTN3WEthN0VsZlBjUzJ0eGZxK2VnZmlIR29ETXh5QlJLSHZ5M1NKMzBRNlY4KzZtZGZac2FGVjNlT1VLc1dNeW5raHlMMXU0VkkwTDFTSkxJeFh5WXpwTHlOcWlXejBYVHBrYVR5bjFaRHRpOTBtWTAydjB0VXF0elNDbCtxcks3ckl1djF2OVJEMHNneHFHYkpvR0dmRWtsRTFZenIyOE8xbDJLZXdYOU40QURhTjFiN0wwSWFSVFhPdXk5eWl1ODJwT3dIUUJDK3BsZENyT21LME1nL3IxdlJZRW0zREJFY2dVZWdtVXgwM0c0K3dpdFFnT2ZFUkVDVlpVWTNtNHRtRUl2d1VLVXEwR0xFMDRsSUNUdUkweVRxdEZjbEVDbEtsU2E4NldFWjNKSnZzRldpN0l4S0pPQndPaDhQaGNFVHJSTjN0RHBsTUpwTmhSSWFpcUFpR1lSZ21jYmtzeTROb3ovcm9mUUw3S2NhbE5EMEZPVzNSR1p1T0JSMnhtVk14a1Vna0RsMFg3dUppdXRTOGJOR2FFK3YvWlFPd3FlODZHSUllRXNDdW92V1lmQ3EydHZwTU9CTjdNek82OEdXWExodG1nVzJmZmVIcDFNdTdxd1g1TkR3VGtwQ1NjZWZCa3hkdmZpbkFSSVJJVWFMRmlLVVJseElBaVpFMHJWcTY1SW9VU1pVbXZlcVVNcnBzL3oxWldFWjVZQmdHQUFBQUFBQ0EwV1pzZDFDcCtIdytuMi9jT2xrNHJEcFNsMUszSHIzNmpnMUNUdHd6T2NOdUNYWU5naURZaG90SDFvZ09MUlN1eDhuaWw0cjJpWWF2MG5vcnpYdloyblpqWkxmYUtEK1ZSZ0gvZmdObXBrRmJoZ2lHaVVhY0dmWE5tSzQ5RlB2WTl0dmJjVG03NSszZmRhbVc2WVN0d2tkemFDSFpjdnEwQ1M0aVU1Wm1OeExYR0JlL3JRb0hqTVAxL1FFR1ZNWkZKZ2JEREovNVQzZXlCY3ZHUFNxVGltSmNDK1lRVWpxR3YybkM3cTNuQjBET3F2MkczVnZsSWhLSVc4TVJTQlM2eVpUaU5HRlgrUkdDREhzOFBZSWRUamRBVUF5dlFrd1NDcHBoTmQyMG1wdU1qUVhLQlFrV0lqUXBtSlJVS1l4S1hjTERjNmtJZkhhVEthT01TYzRNc1ZSWVEwZXpVNkZMcFZ1UDN0TEh1d3ByWWZ0aGl3aUhGQVdrU3BtV1J0KzZuSjZVMThDdXlKODVqMngwYjBkN045cGlicTBsYjROblUrcE83dEVVTGloZFVPMmhycHRnWVhDc3hCRkEzbFEybm1GYzNGYlJqR0JnQ2Q2QlVIN3FuWEJiYWNqc0s5OVJmSURNQUZrQnNvTytuWmc4UDBCQmdNSUF0UUVhbjlXUUVzOU1BSE5HODU1NHdhK0FybnF2VFRqcEdTN2UvaWxQbWpBUlBtbnN4V2tkQUFSeU9MOXlBaHlteDdTR0tsazdHaDQ4dkR2TmZkZytJVEJacEQ5Z3pnTUlCd3dCazV0bWtFWElxcU1NYUVUZy9IVWUyNm9MVFRwNHc0ZzlVa1o1YmdieEVIdEN5VExZUEhtSlVxM3VKcHF6dlNOY3VtYkJkWFlRc2t1MUM5Mk44alR2REZFVTBydjgxN2dtcXNHalBmUnVOanZlclREbUhDRTRxK3Fiek9qdUlJdlJhRGh6WjEvVkpVcGhoaU9RS0hRd3NaNVRqZ3VBQjhDdUtyK1lJTUtld0lvTU81eHg5ZTRBRUJURFNZcG0yT1R5OG9Jb3lZb2FqZWpVUWI4SndEL1hCNWlTc3dVaWdoQXNSR2hTMENnekp6WE1DVFUxWEVaSGFUQVhUQ1FTaWNYYlk0VkNvUmdMRXhzdGxkQ3R4WjFhVW5sdXRHaHRPUXQxOC9SVWRWcGtEQnZiUzRuRW9ORm9OQnFORmlkWG4wV0pMSkNyVThDVWJxcU1oWkdwbStGOEViQklVYUxGaUtVUmx4S0VFaVZWTFZOeVJncFNwVW12dWdBWmhBR2x5cFNyVUtsS3RicG1BNndyUUxjZXZmcWFFN0RUV3M2WUhtMEUyZGNsaVdXc1dFM25tUzdHNWI2dUdWblBuTnV5eVdiSHd4RGpwV2s2TStqMjBlWU1MUS8wM1ZNbUttNFpuZ2xKU01tNDgrREppemUvS3JkQ2tWTWxLc3lJbW1lWmYwR1F5d0pCRUZ4Qy9yZ2dDSUlnQ0lJejkwYkRFd01UajhmakFVQXhkUzZWc0RjczFnOHdmWUNYck5kOThTSDhnYWprNXZ1VVBxZzRYRFA5Sm03b0dXdkdYeFNkRUxMZnJzRVNFc21XWFRjTTNjTHRIRlNHYlNIQkFqY0NpVUlYSnFIbk1sT0xSQkxhc25VSzJTdXgxenFuTUIvWk1HT3gvelB1OG9oREFEQUFPQUFDQUFtQUFrQURZSGdsQ2tDdUxWQWlTSUtGQ1Awa2hXTktQRlV3YmR5TCtzREJ5ZWdrYUoyV0VNdFdyRTYvNHZwVzdHNmU0bUR3MEJmeFpoRnQ5R3ZmaFBFQW15ZDRjTXRVcXNQbDRheTdHdWFrNXQwTjUyT093SmFCZ1NOSHNrMk5oN3FFV1pZVnE4ZStrc3hqajNFS1NYZzhMTmlsUXFGUXpFMWZ2NXR2cFFRRnRGSW15THRpdlRlV2tRQ2s1WlJlMlFpSjJackxZRFY4Nk1CWVdYNXhBUHVuazF5bnRaMng2YWJOcmlYQXNoV3JjZmtVNjN5L2ovbStnbnpOOEkzWXR4emZDZU9pQVBpN1loMXdCQktGenM3MldybGlmV2IzbitzT21rU2l6WEhUWHBtdkFuT2dlYSs3UzhGMUVIUDhuVTRJbkZZNFE1bVdwM0JBTGxlc2E3Qno0RnVPYkU0RVhSbml5azhodENPaWs4dmxjc1dZSUtyNC9jSE0zWFhJY2N5T0RzQlhIOVIzTklCalVzZDFmaWRqMGlpbkg1cmlaZlVPRFRpRlF1bHplYXg3K2pIWlZ5eGYzOFUzeExkcitVN3U0M0g1OUtlZ0s5NUp2d3Z5cW4zSWd4THlVRzJZNFFna0N2MUJURCtJdkNNUE1nMGxWWVJCblNJUWthSkVpeEZMSXk0bENDVDJobTBzRUFnRUpURHJxYjRnSjJKWW96U1VLVmVoVXBYcWJOclorWmhlamIrNXJIckd6Y2NMUWhKU011NDhlUExpemEvS3pRbk1DRUt3RUtGSllZR3lOeUsxbHRKVS9KNldtRnhVcUxzSW5YU3MzNHM0QUpuVE5QOUpWODFaVzA4YndveHdqTW9HZysxZ1BQeHdBTWVaa0JFRStWc3Vwc3hvOWNXUzVpdm5hU1VwRkpRMVRFYnRleUtqTUFMbFNRaDZSSzNnQ0NRSzNlUVU0amJFQzd1cS9BeUNESHVDQlFUc2NNYlZ1d01VQkJURFE5eVFGTTJ3eVJueUVTeEtzcUpHVTNSaUVEUFhMOURaNUY0SXBBdVNZQ0ZDazhJR1pWTUZDZE9rTHVFMUlLVkZsR2d4WW1uRU5lTkJDVlNKa25KRWorU01GRW1WSnIzcW1ES0l6R2xrU2JiZDlITGsxZngrM2UrVkNwbUtvaGdseVVCVnFreTVDcFdxVktjYVVHM1VsZnBva01iYXhOQXNMVnExYVU5R0lsT2Z2SmxNcHBqSlpESmJSanRhTldrL3J6V29NSUlhTldlc2F1dDAzeU1PMlB4SUk2TUJFOTFxZm9EeXhDU3dnQ09RS0hTVDZRVnVEaDVoRlhscHRyZ01qeUJLc3FJYUwxN0djZGtBNThBOGdDWS8zMlBMYndrbkNRQkFObXRDdzZOb0JyVklxemJ0T1VzV1U0MDVsQ3daMXREeDVwMW83VEVkSkJnU0dMNzc3QkVqbzk0YW85b2p0SzlidjUvaEFNOFJhNDZTamdtZGVMek5ETWhpVUhudTdRbUREQlorSVVGaVRjSm9IY2xJa1NwTittWkdjVGNINUljQnBjcVVSMFdvVktVNjZxWjN1c2VnRjNtbitiRmxyaXE5Qm1tblY3UGI3RzBSdENhc093S1FaRWdoNDg2REp5L2UvSjZKcnoycnZ6MTE4UGs4UHAvUDV5LzlOUEppcjlnSnd5bEtyVXk1Q3BXcVZFZmRWRk50aHJXZ1ZadjJaSVNZZXJlQm9KZEhLZWFlZzBKN1VCZXFSOFNPMWFuM3BGQU1LTHdJdFZTSisrRm1uaUhFc0ZFUVcrcGVrb001SHFmNTBseEJMTHY5ekNNQVpUUFExN245WDVrSEZYN2M2UTJKdmIrS1NJc1NMVVlzamJobXZKRUVXeExISkRYTVNLNUlrVlJwMHF1T0lLT0x6R2xrU2JiZDlITGt5VmVnTUJXNVVLd2tHV3dwVmFaY2hVcFZxcU9tajlwNXFsTlQzLy8xeHNpQVJDS1JTQUJBQlFEQWdFQWdFRjRrY0hQQTR5L2YybTdZR281QW90Q1ZTU0lhVGVWR0ZBQWx4MVJJWlJ2R2M1ajBKSWVvY3h6enBLdGNheWN4STFoU3lWKzYxL0dDd3V6QU1mUU13NkxUS2Q4b3NGQWNyTlZEUEllRnM2TEhGeGxOeXRpZURqYjhHT1FRYmhTSXRqMDJnSWc4T1ZiVWZnRi9HdGthQ3NNTVJ5QlI2RDU1bWNQakxiWWtJOEowd0p3WGYvTTFubzlkalRWZFdocGlENE1qa0NqMEdZWTZrWTFONVE0RUtnVWhXSWpRcE5DamJLb1NDTk9pWG9aYlZGOS96c0xkR1lHZ1ZiTXp3Snd6OCttcVUyc2pZMUJyY2psM2ZHL3NmejZxN29nMlkzNHZmcGRVaGUvQ1oySEg4eUFBL3hROEQzbXlBSUROQVZzQ0FKYlpueGkyY0g1czJjUkp3VmFPbTJXV3N0UEdaeFlaQTFLSVI3bXQzQXpBbXRrRlVJNWlsRGNBbTJRd29qRlhCNnIzSXNCeVZxNWwrdE5hYmN0ckYrUXJBUStsa2lVV3ppSEdLV2M1dTFGVWRNS01obnhpeG5BVTRsa2FBbm8vbmh1U2NFbkhyUTZRRWRvUjJGSVE0R0ZuWUhrZkJnSlR3Tmw0MnJRSDdkVjZJQkt4NEdESVBUU1BBdFlIY3VhL1V6ZVAxZXBaSk5hdE9BU3FGRVFrWUNXU2pLb21jdko0US9sWW1SNmJXaUVXV1ZJRkFOYUlUT1Z3MlpWSHpyNU16Qy8waS9EMWt3RVdWRC96VDliNkRHNjMyaUs0VXFDN1RQMlVOYm5rRVk4NjRYWWlLbFcrQlMzRlVLeEhEUVlvKzhCOXl6MXc0aDA3QmE0UWtrekwwTEdKR0lyclorY05YdUIzUHc2Y2VkcEFNVTZHelJRcURXN250QitjV2lzRnlvM1dDbVFqTDBNbVhvQnFOV1JGSVpJN2dEWGh0U2N0OExwQmZrSHNSUTZYcFZmSVJ2WkJVOHA4NUY0aEg4RUtueG1FWW11K0s2Y1lZM2dRZTErL1R6SkFJUkYxY0t2Tm1uMlEwTThhT1dzWGpUOWp2QkNyNTIxeHF0V1ZJNmFwTHBlaEtjeFp1VzlCV0xKM1FHcWY5SlRpdXZ2VTB3ZGdody84SUJSSVgxVnVOUXlzQnFTdFZOUFhaRHRMK05pdmN3aTFQZ0QvNU8wb3ltMkorNzhvbjByeGdBOU9DbGEwZ04wSkVQSFkvWVA0bmhJYXdiRUoySGxVblI5RGJ6ZldNUEF2eGtydEExNHg2anJBbVlVY2dSZlJsWm5uWXhzMnkrb3dMRHdrUzJWazNkZmpBQVVWSUpld0QwNnR6K0F1dzZwSXF4VGw0ZG1qb0dsWVFYRE1iMzFGSlBzKzY3ajlSTmdzSFlnd3dPY1l0dWZLNlZoQ0xNdWM0TkZUYnY5cEVRakZOak5yMExXQUpCM1hHSG00eDduQlJmWG1IUWhRMGJ6cW1PdFZUbnllUzZ4MUhiQy9hcmovWGUvN3FNT2w3TTBlVW5EUGdoeWlzRjhxSW9GYmhmRWdxeUQ0bzNvMks1UkxyTUpZQ2FDNWdySHd1cEROc1ZvWEZJMys5V1lQYTFsd3ZPcDkxZnZhbkdob21KaXA5N3VwTkhtT0greWIxK2hMSXBkZHIyMVJpQTEzSmliNzlrNnBUQjNkRkFvNzE0cFExeVJaYlRYTXlkQTdtUUU5UkZHaEwvT3hySGpkUm5vMFhkZjl5RWUwblhGZk9lcnpZK0RPM2ZpQldCRk1BbXFGYk9lZ2tBcVhUVm81ZlM2NnlPSVZsTENTZGNwNjh1ZTR5SmVsaFVQdFU2Vm0yam5OQVBxd1dhTm5udjF3N0pQNnhRWmF3U0lQbE9GTUVVR3V6UENCYjJkSlV5Z1k2UTl3cjZKVWpKcjZOWmNiRVl3TC9jeFpmZWM4MkxPc01LNDl4WDYyOFA4TnEzVERFY0lBUFp3d2hMdzU4aFBLazVKU29EQkpnaVRMRVN0UEE1MG03U3FZbU5TeDZGTnYwaVNqVTA0em1UYk5ZczRDcXpmSmZsbUMvWVpKZ05Cd0RBYUJpOGVCSFQ1SEFrNElRa0t1UkVSMmNlSENqU3RYWWhKZU1ONjhFZno0d2Zqekp4RWdnSlNjbkV5Z1VBd2xKWGRoMUp5RUMrY2hnZ1lwVGh4S3ZIaDJFaVJ5bGlTSnAyVHBLRG82VzJUSXNGV21URjZ5NUVEeTVFTUtGUEJXcUJCZmtSSUNCbFZvMWFwUmF0U3lVNmZPVnZYcStXalF3RmVUSm42YXRlTXdNZkZuMGNGZXAwNEJ1blRab2xzM3BFY1B2bDY5a0Q1OStDWk4ydWFVVTRST080MXIyalN1T2ZOMldyQkE2RTB5Wk1rTTRidzVod3NXbkM1YWNyaGt4ZW15Tlpzck50eXUydks0WnNkdHpaN0hPc3dHRXd1aGtSaU03VGc0RUM0ZW5CMW5pSkFRYm91ZEVCR1JIVnlJSVJMZWNENThJWDc4NFB6NVF3SUUyRWxPVHFRUlhIQVExNlU0aEM3Z2dDRUFnMFlBQndvS0RydUVsNitHcWJGTlBMV0dBeERBMisybVVTTk9pQmc3dDBTa1MzMW94ZU1ranJGbjJJSWpKempNU1VoT3Vra29FSlNpanlHZ3gySWEvOVpjMDNiK244K2dxa2dTMjhzNzU2Y2pVcDN6d1RyK1JQZTZTZXJsVWRUNWFldWdlL0FIZ0J6OUY0aW53RThxK0g0T3ZJVzM5RmJlV3J5L0JxTXZ2L0tTdXBpOUhrclZlZkc1WjRJYXZmanlXeStwNHNWWHloZVZUNW54SXEvemJ2YmpvcVhYMVplMGhqMEFZRk1RWnMyQmtBZ0ZJR0Z3eEhZTkI5WGRhbXdyM3M3L0NJZmdZWmlmaFQ5Z2ExMHl3dHpkWlkvaGNuZVRZYS9raXo4S0NCb3JoRlo0ZzFsWEJHR1dLQTc1MkVsSWQ5YUxLNFNGTmRWMzI5Ykc3UklJS1U0R0V2aGpyOExVMXdqQTIzczlCbWdiR2pROTdvVUt3cWlPdnlQWkVSSUNLSXpBNldUcFdRd1Y2b0psZTNWVGxqNVR5UEtPam00TmJ2T2cvVDlHVmZ4TkE5aEZoUURTdy9mUmpwQ0YyVzhPQTY4aUN5VCtmMkgvREc4QzZlK20xeC9JSTg3OU5BMzVyd0FBNjhRV0FZZ2xUVEFzWUFDRXFlTis2bXkzd1lvQTRGK2pOb1djTlM4T2lhalFRUDd5TUZhd0lqUVJnU1VNTEkwUTduMVJBWDZSRjhZS0lJSlVvWjN5Z0MrUTJRb3NDa3RPNWx1TUhHVWFFM2VMZThWajBocXBXQXBJRWFsT2FwRzZyZFcrN3FSQUZjQ2VZaWtBNEJQVHNMaC93VVdmT2J4OVI2VThxZkE0U0tuNWc3WUNYQVNRQ1FCWU4za0EvLzFOMWYvazZTLzBZLzFvQnI3NEdYeHgrMk5mMHUrLzdndnFDL0x6ejBFZjlPUkJxam4xUGdMb1pROGIrMVowYzhnTi9sLzJEV2ZObWZLcFgxMDM3ejJMeG4zbHRCWFRiRTVaOElQdmZHL0dKb1NEeTQ2QU14WTJEZ0VoRVRFSkdTVU1Ub1dncGtjeE1ESjcyNFIzL2VIMThTQ0NTNElreVhReVpNcVNyMENoSXNVTWF0U3AxNkJKTXlNVE00dE9iL25OVzM3eXZ2LzUyT2MrOFlYZi9Uc3UzTExNZVQ5YmRYdDJjTmV2WHZMeWFQakZEVStOZ1JjTnVPQjFyM25ETEJJR1J5TlFHRHhPeWptb1ZJT0xoNitVR0F3QWtvUDh3Sk9PaGhiSkJOVXZocFVOTFpxRFU2SjBLVktseWJPYlhnNnRFaFZLbGFsUzdsdVYyclZvMWNhcVZnZHZuYU1RQ2N1V1hISFY1Y2k0V1VRbVVtVTBNTUFtdGdRc0JTenRGM1JiQkJld0ZJQXc1bDQxaWpjYkJtUXA2eTNBRU50ODJkQWt3anhuejdQNzhWVVVEQi9WbXVBZCt4NTZjUCsrdlh2R1JrZUdoMVlzWDdaMHllakk4T0tiRnkxY01EUTRNSC9lM0RteisvdDZlN3E3T2p2YTIzS3RMZGxNT3BWc2JtcmNnV0EwN1BjZWZlVGhoN3FkZHF2WnVQK3VkRzIxbHNUQVArZno2ZHIxbW9wKzBMSjFURWdnUzZDdXZDNW95QWl1YjAxM1lQTUxiWXpUYk9EQVRYNVlFaVl5Y3BVNUlWY1BmSkRsSitvT3Vkc3ZMT1V5Q0hBMGVwU2hSZDRkdUg0S2dFcE1FT1daR2I1RUZjTWpWSmtCVUJVQlJaa0EyWktOUnNBTjErMTB4Szh0aTVMdnU5Q1FPY1p3eG9idFZKWVNOWVNGSTMvZXp3aUxKZFFFbFZBVnFiRmZWajdHRllLVXdpTDJNOWNTZGdObThMSGNzQUlsdjN0K3BUemlrZ2pTOExobnBSQTR5RHBiTzdCY2VraExJUnR5cnNvM2hPRmJpVTI5RmdtS1k1SjgyeFJkOHF5bHNGV2tFSC9iYW44bG5EdjNaeTVlNERWR2laM09RUkRCRDQ2NFhuV1Rtb0ZEUjUydVhKa3psZnlDUk4wakZVTGVxWlZMTlFFWG1WRWxEb3RaTk9maXpRNFJMYmkwSzNWZlFpdU9LT0VTTUZUdjEzVHZpNkNWeVU3V3hNbUtXM1VidERtbkkxN3lYM0hjbndqZ29mb1U0bWFTVWxMbklQb2Qwdzh5djY2b1dJTWRTaUdQVXYydGdtQTRFZGExMEZybnRRbS9lbHRoZnd1aEFIV0tzK0pzLzN6cXRUeFNmY1pkV3ZNQmtFa28yT1dkNWg4VnhrbDF3UTB0V3FmWHhqbmJYVHdEdzVvbVdaNXFkdkhJRGJLWXh5Zzk3MHBKdnpBejhuMzVPTFJrZlNiZERUcFpnTk05bFFKbTJpVTMvSDBuZ3h2SDI5ZEFlWTJRRFF2eFo0elNocFFiaEFqQm13VmJJN0Y3SXZKN2tpTjFGSkdXTnVBbjB6TUV5UmwwaDJOMTdKQ0tpZ0NQS2Z5OW5ITk90enduSXp3bWd1dlpaL1RNQmNRbEhBZnc1RXhIRHNYR3VGdVNlbzN5Q0puWlJiM1c3VWYzYU5aNzNFWUs3a09TbFZKc3dZWXlKQ3RjR00xR3JqOThjbkhoa0ZtdTdQZE93bjFXelIwaHhUblJVOGFCSm14cUg5d1FJSWMvZlVXQkhqOHFySVNqYk8yaFBXN2xSSWFvREpwS3A2V3JWSGIwb2w1TG5LTHlGajJUSGdteTk2QXBaNi9scTFpTlBZOHZ3REt6NWdzK0UvQ1pJQ1B3Y2FjcWNuUmlyMVJ6UHNuQ2dRVmFnNVVNcktHSjZ5NCt5UFlaSTd5aktUSktTVU40b1VUN0dUZGl4TzBEa2ZjVFVkbWthQnpxUGJpNVNpS2ZKYUpEREtZMVpsMTJ1MVJBT2t3U3A3ekhuNlFrYWlwTkxyNkUwcEhnbUlRME8zeEJuV1N5WTIwY3VIMnpXWXhOUTN3Mm1Gd1A4eGs1Y0tlRHNkVWFrS2xMSE5KRzhzNXh6eWhOdHRFQmlSRE5Rc2NDbDJ2MlpBbjFDaXR4TUVqTE13RzlwMWREdGRxaXdKVE5DZkxTcVJTMEF0VnVxUVBJc1FDUlpJbTh4NjZJTndwVENNSkMydllIck5NV013NVR4SjRWaTRIZ1JSb2tpZ0ZLUFRwbjQ1SllneHFoMGJvcWd1SFA2SWdrUVRLVlBwOUJtQ3R5U09KZDZieUUwbFExZG5rdGxjaUdVbXBRTzl0Qm42QUJSQnZZYmgvb1hhcG5DQzc1R0dJeGw4VytaWk9qb0hVaHU3TkMyNVVKb0xkb3ZDMVZvQWkyRkFYcCtNNE4xRHlBelVVamVTdjV3RzdaYmY5RWNUNmpNYnNKMUJwWS9KdG9sN04wanBRaGdMaGNZZlllVVoyQlhxR1VIODVROFJSdHoyZlFkbnpubGxCMThkQ0RNM0JNMFJWbUxYR1BGVlJqRWRRaExQOURpSnZwTnpvVUF2ZWc5WkFMZklqVFZiNGV0NXZQTTlBVVZDMTFKWUJNeUVwSm9MYXdIVnMzQTBDTkQwY2cyL3huWEpOK0lKVzRBS2YxR1NVYTNWQmN1TXJYbFVZVHVnWm9PelBmV0tSdWM4cVlNbWxPTUt3bDd4MGtLdHN3bGYyWlJzcmoxaGcyeXpxQmFQbEFhTWxrUkM3ekc0V2FIYzhBQnJseTBtRFZnUGhLZzYwS0lHc2xuMUZGUUdvQkhZMVRHdjlLZ0pwM1ZvbzNPQkl1QTQ4NW9yaDBjME5HMkxYNnlTQTlzR2NCYW4yUWhvYmduaUo2RmV0dUtTSFhMcDVlY04xRmkxbzNNZ01tS2R3MElyRmhqODFLaVVMRHZSSkRJNUtTVWxLQUZJS3hWekN1Z1V4WHBHZ1pmQWdQRUU5ME5lekt6cHh2SGJQVFZxMmRPYXE4NDJFTjl1eVR6SzJGWXQrV2RRWkRlNFViZUIxOHN3dmxRVUNpRnJiTCt5QzdXcWx6Wk9VYjJWcFlRWnUxbVBVa1QyWHk3MjZOajBncFVtb0VXSWVyL0ZKa2drZ2JBQUw0RGgvMGxvNUpEQk1DN2tnMER0elBvZ0YwSzdMV0xYUjA2UEVOMG9vSEgxbHVlSmtRRFBJV1U2TVpPNkxhMnNndW5GNTA4QzJsWUdaUGxjeDJYSjF0dVhGYnJlNTFDSVVXU2hiNGZvajZMZ0djbWxnK1VDaVNpeGNIOXJKNlRUSmRBQzI0QXBHYnNhNWhhL05JcitoOUllYVhJQ2ladThDNEpMeldUN2dLWVQ3NjM5K0FBakxscHBkWEFMYm10L3pjZFo4bmZJL3N3WE5iWmR3OW1SMVNPN0lmZ1pLQy80TUN3cEN3NXNEMWo0MHdJdWJkdHBCTmNzVkhtdVVQdmhha3N4TTlGOEJMa3NRMzZNL0JPSkFRdDhUQkJTVWJTb2p3SzMyRVliZVFyenVZR2E5bldGaE9LVGxRQnc5Q0ZqOWpURzRKM05nRHZldUFnMVVPaGI0S0FwOXBIZ2FNSktiMFNsb0w3RG9kSHNManB0WGhrdk9hYW9lMENIakRVNnRrS0NCNDJnWkp6UkRjUG8yeE5lSnJaRHhjWGVWM1YyOEp3azBISmhVMDhMdEdEUU1xS09QM1RHb0FJNlluYkVrUndEUmszTzRraTYxSW5xVDgxMnhLYmlpb0JNR0U1RExwTUtyaU9wb3ZGTHRiSWU5eHFNcS9TVFlzeTBaUUY1eWFaYXZwL2ErSDd1YkRucFNzaUJ3SkZhZ0JNaTd3VldjN1VIcWxtdzNmY0x2dm1uVlJTRllSUUVuZ3huSHZ1eDhRMUNWN0FJQXVBSURkQUgxQStMd2crZ0hnUDRDOVFMZ0JBTmFldk9Ud29xTUhVb05nbVZtRXlESTdMcnhMSERYWEVrN1pBTUk5ek9iR3lDR0RiazZHNVVnblRwUGMzK2paUU1qWUdVeXVOWGcrTS9UaWJJMmNCeGdKd2tiMGJnaTRmWmY1QUJDV1Q3QkRTTThZZVMvSjhubzRJc3hRWWs1MXdaS200NENqdzZwVGZRalhqVUx2OWVqUE9WS0ozUGhTMmlJZnVsQUs2c01MdXpZNU9uL2JIemhaRE4yR2FQaDQ2NlpMVVVaRW1XSjNYUkcrOEErdjVZT09sRklNUkZCNCtMald5dVN1U09lcDNxclBXck5Cb1J2R0RXYmdxY3U5NzE1a1h6MkJFTUZVWlhmaHZMOVVEL091bTY0d3o4MUlrc1NYdlp1SU9xY1lSQ3B0K0RVaWdzdUUzUTdidmc4ejlxRXpmOG1mZUhGbjU1c0pSVXVMWXhRM2ZNSFp1Tzd2aGs4TTA5MVF4TEJaMVNlMmlRTlYwZGpFdUNGVGJueWplYXFOV3REVU9icUplSnNCdW5JUTdQS1dxdkhQUEZ4RVhUTUtSamZBRGMrTTliNzVXaXRLZU4yVFR3UE1iMFBBOXEyRlVVR1NhTGhzbGpEQVVBTU1MZEtZUUhWamN3cGdZS293YVVRQzE2cnJoeEJEUlUvYVpnYkVvVXMrQTEwVHhrc25rU0xqWmF5eVJhK1BoS0tOakJUOExvU3FycUJHaXFHU1JpRjVUQkM3aDUzQ2lvZUY0V0ZNVjF6SzVqRFBvYmpIZ1A1YTlzQkREMWlPODRXY0w5NENvNUVkY0lrSGxOZkp0Zm1tQUV0K0FwMUphdHc3djVMeGJTVTNtZUtDV3MxM2NvZFFVWWxKVnYrOHRtdXJBR29FMW5wTWhaZXhUTG9QTDBrZzdVZXkyTUxFdXZNMHk0NUtsd0dsV3hBaG5IZk5qWmFXTmNNNnJKYk1pbWkwK3N6djlCQnFPdXRmUFZFakhqSWJOZDVwYWFObWJIM0ZMSnZpMXRsT3hOc290ZGlPd1Q5bmVQTzcrZVNHRkZUejBUYWQ5WWRtQS9wSjhxRmE1Z3NmYW9pc3c2MUFudDhPdmorMjQyV0szUlZyK2N5T0NHVFhUWjdacTN5SEpRTFIrcWZ1U2JnUGw0VW9Vbm5GTXFsdUg5QVA4UmlPMWthbHN4ZWVIWG5rdU5JZTkrNjA2emloMXM4T0s4NmVrTXI2cXNCczhydVVxNnhGSDBnVWZWc09ZYW4zV1N0QVJmN0Y1MHY2d2R1S2IwWXYyYnNwMnZDd1NxRmFNQXJySUx2WVYwcXgvVHM2Y0Q5L1Iwdm1iN3ErVWo0UUpESGZMd3FhMUwyWVNhS2U2b2NXWFQ2RWgrVnd1YVJ5SHNwTHRpVU1lZnBKUlVZSXZkT3A1WUYrL01oZ0JCMnBmd0dqa0tjY2Yrd1NJK0JWek9YTEdnMWN4VzREVmY5SE9hYUhpU3MwL1IzZGZTaThoZEZ4WWg3TXdsRi9qeWh3RGFnRi9DZTJ6MGh3d0Y0WDVKYkRzRkp1QXdNME5xdGpzR01EQ1Y2R0sxOWhqVUFEYlJON3lHZGhPaDh1d0hMMzBHenF5bG1jdjdhSWc3UW9selBuTHdyYmpjTnYzNlhLYUZaejRpOFBWSGhlUTNvUXBhcUxKREkzU0RrRVhMSE1DSlRaYVBLeWZRVFVXcjg2cUhjVzZaVGU1b003dmF0TkRYa0ZsY2tVUDZHU1VRaFZXaXRGMlc3MTlmUE9aSGU3ZzhXcjdGbTI0eThoSGtUbVJnVjd2alBSWFBxNGREODBhMGFaZzQzZkJWNXRXdnZJNkFCWU9nZkd1dGk4aS9rcXhRdUxFR29HMW81ZlRtbTZuc1dacmRsdUUyYnIwTGdrZFNoN0YxTVM1cEQwRFpEdzhVaXRXS0ZtdXN4MkgyMXhEL2JtN3h4czhPSDFsaVlKU1Z3NFl1andoeFMzMEJ3MjVCN2FDYkd0Z0haVUxJbTZ1ZWF0eGV5cHJWa3ErbEZuQm1SVkFkMm9VVDVDVjZQTGtYWDRrYUtiZGdUbUZoamVzby9LakM4SW1sZ2JMeXJHSzM4UzdKanF0MUU1YUNNaVhvd2ErVVBneTNiSjU2ZG9ISWd4UFBnYndKcmRXdGxPR0o3TUNOKzA1aTZWN1VtamlqaFNtSS9lb2RYakkyV3hRSGphbWZWT1NQeW5XRHQ1OGJveTh5dkxONHE5M0pocEw1cFdCblJHNmxhYTFwRVY1bS91SUFwUk43UlhuVGpJcm1uQTJzSGtacEdjRzZ5czZaZVdYejZkOG5UVGZ0WmhRT2JhQlhtTFZNVnFaa2dOREZnRGk2WGxUWW05Y1UyV1lqcHpTU0ZBU0J0cXFzU29saVVQS1VmYkFEMStwaWJXWjV5YVl6aS9mbVdzSFJYaWNqLzlOcDBaemZpWnRKMzExMWVkZ2ZBdFg4VyttbXYyNTFkZkV3RkF0cUc4dHoyeUR6TGlEdHZhYmVyVytKcU5iaEN4dFNnck02cTRzbFRKUzQxeGFDcEJHaHBwRHJyaVFRV1Y3TmdkajRGNmhTVWptb0xTQnN0WlRkdmRmaEFZbnJCalVpem0rZ3dWdTh6cWhzV2IzeC9GKzVYRVVEVVRRWFFDeHdkSHh5NXZpNllIbnMyOFVpSmgwbjd4SVdDMzVsMnNHVlFxU0xIZjFDTjdnQ1FLa2VHZ1I4YVRXcVcvQmxmNUtDQVFnVG11TEN4TXpSampMSXNSNFFnM1ZqbzYrYXZYdG1zQ0pvWk1Pa2NiekYxS09IR0Q3Wkd5a2xjV014c2VpRHNTbVV3Q1NSYnhNK09NVllneEtnd3ZSNVpOTUNSNDFPUXVIc3p1UTErYTcrdWYzZ01lUDNHUkdYSE0wR09kYkdoZmY3eklhUkVCK094dlRoMDk4QnMzZi9EQVkzcG9EeXJRVXU2VEVIeVVoNWR0Y2ljK09DaFFGamVGK1JEejR0dnFkRDlGdE9DaUEya2ZJSHZlazJQTFJmdEFPOGR4WXU0ZTBMaXo3V0J5eSt3RHhYNlpHdXJaYWJydXpHeldvTyttQytaRmtuR3NLVHVMek5IQ0pDNUg4Z1V6RnM1M1dyQlZNZ0szSWxPQkZML0JFUVdtOWpUbWNSOFVFazBMSi9RRU1EZmdQSFRaQ3FxV0Yvb0tlZXY0VVI0cUdWVVM1enhCME5meXJRZG5UOHdmZEVhTHRwY2ozSmg0RmEvR1Q2WWM1WnVBaTJEanV3YytJYituT0k3dzZNYXFPK0N2S2EwanphZWY0RHFRb2VVSUFrZGttNXU1blBPN1ptd1R6QUE1VlVmeG91UzJHRkFJTUFoQTFTK2ZZWVZJcFBjWGlGTEZDam1nZU9Fd0FVZERJSHc2MFBncEpORDJPRlJGYndJTUVheGhwS1dXNzJYN2xtdzhPWVdPRncyZFpzbjJkTnY4SnArZkZJNFpobVQ5d1pjWmE5Z1N1QUJUcnU4aHc1azBtZUNqN1NzZTlkS2dnSlBSUmdVc2VVVkhhayt4eDhNUTFGR0RoTXFhdWxtblBMbkF0RFlBQ1M5T1c2SmV4ZTFGKzR3OXZKa3o1VXgrcWdXODVqa3h3enc1d1dBVzVtSFp5ZnpPUmJOTXpDT2M1amRWcGhac1Vwc2UrcEdnUnB4bVo0K1o4OWk5cE8zeHhoZzVSaCsvNGJVQ2pFcGg2ME9QMS9HV1pyV29yaTdhWld1UWkrTFpKd1lwMGJOTWVmWmh3eDQ5OWluNkZKY0FLNERtQUdUSWlGV0p4RFR6d2xIZnpmemF2UVlkNHlZTXlEU1lQQ0xObUpDenVGRmJwbzVFdWlpUVpKbVFsckl6a0V4QkdtS3AyTFRqaWtpUHNLZlB2RjJKZEQ0djFFL3MyZTI2c3hnQ3J1Q0I2TXlaTGJzSVAyVGQ5dW5NN3Jzc3RQMkg2RkJnVWxPQjYwQy96WTRxM1F5MHBybmNBUzdKWk04MTJ5WWRKWkw0NGdJRE51NDYyWVJhVHp5NUhLcTdManhqRk9jYnhhWFpwQjByYlpiVVBUT2IvN3F4a2ZUUE9nWi9kS0tSZ0d6N2JmSXNvUTBEeHYzejk4M0xONFlvdm9hYm1OWjJuak9LSG5aOXNSZFRHakpxeElPWU1pZG5Kd1JaRHBrVDIycHBrZElVTlhGU0JoWEtIR3VCaCtobDMrajViU3IyWE1PN1NCM1ZLYVgyQmpyT01tMTRxK1JzT0dCSHN3WUZOcitrWUx6cUFNMDNuakI5OUdqcWprYUR4TWZPYU5yVzZFOVZNbEJpbFRWeGNXUmlBSmV2L1ArVDRhNE5iWXFFc2tkc1M0YTRyVktMS1FKTkJKUUZiU3JmanRCbU1vRVVLU3ZqZkFsQWxZVGpTMFJoMU5IVXRNV0hXNEZuMzBZVTBJNEk5QVBVOXJ3dHVOK2JlbmxTY3RpRVRSWW00ZzRqN3Q0QUpKR29jZW9rT1JnUU04ejBmSDlOTExhU1FSRThXY0M0RmZrYXNDYlpoWDZrNHNTYkdYTk5MZEl2bVFIT0JHb0dWNHRnTkswczkzeGZBdnJpN2VtTUFoYVVnY0dJeXlmZmVYU3BiSGc5L2Q4bTk1dTgvdCtUdTcvdCs3YTRUeC9zby9lNU5Qd3pzcHZLUnJOVGoxenAvay9iL3pYMm9FLy8vMlNXZStOcXZnbVJkVTBhS2p3Ukl2MTZwRTVGVWVuemIzbzc1QWpnSEVPa0lGOStHWEk5ZkVOWUtIOWNSa1B5cVExR2hQWFMrTExHbm1YMmVHNTlrNVRadXlyRlhNOURtVDdLbDRMbW1SellZTGk1UjJmRGtzS0liZkM1cmt4Z0FEYjZSMnVUZmVvMS9KYUpQNFoydFFidjc1aWJ1Rzl2UWErb00rWGF1aUthSFpzOTFySXlRVytyQm1Jb2d2NFlFemgzMTlmZHQ2ZWdyODY1ZFdWNTY0ckorSlNLK0c3aVUrSWViai9lTHhmSTloRlhPdkV4Y1ZkTkM5NVN4eDBwOUkvYVV6MmFWWXhYdmFxNWE5amltNzJtU2Nic0F6MkxhME9PYnIwdkNROVlIZGhBcExsWGEvV011b3crYy8rcVZ2MER5cU1wWExKbWZFTFg4RWFEYnUxeHYrRVd0SkJ2b29UMGEra1cyT2xtNDJZM0FrUm1EUVlYNlByalpXdjkycEprVUJOaVg2Z28yZExoZThZakVRTzF3eXFjdi9QMmoydWk1SDJQeXl0T2QzSk9BTTd1MUUyMi9GcW5mVVJyZHZiMDRpN29YNE5EcnlmSkxSb3VESTdhbXJ2VnE5dys3YXAwMTRqRkZ4cXhOL2VxVjdyODJhbWFjNzEyNVVDd3VVZFg2K2lsQWlsa3ZzV3VHQWhWcW8yTytWT0srZFdDZlFjWjdTcUMrT3E5L3JyTVBJTXp1TVNhN0tHMkZqTmdpTGNrMy8rbzVWdEROMUZ4RGpScHNpeE0zalp3eXdTa0NzSXJ4QkdsbWV4S091eVhTcXdYMUl3V2pLblVhTlNyeHY3bXpxTnVUbFVVVlpxMDNjbGErdy9MZEJPNlc4NXNVYnRJS0lZVktMNkg3SGhXVXJPcjRDRnFaUER4bSsvV2g1UlBIcVg0TFJOeUlnalBGMGVVbERJVHRIT2VxcmJ1bi9WVGlmVUt3V2lobUlwQW8xNE4vcC9nU3F6ZzdsdWowcjdXS0tONk9DUHhsNFhMQjFCYndLRUd2WXdxeXpVYk83bk5xdnJIbTd0b2ZxQk0wZExuZHF1dmRFTEI4bUI1bjF6UFdPamE1SkFxU0VRclhkQ0gzUERld24yaCt3b0phL1dTd3NZaEs5TWpXc2wwNjdvdDNBRkRzbFhuODdkU2hpUm52dm1hNkJPdjhuUU9tSFVRVFJ3dlhXOS9ENnJRY1MwMlhqMzNEYkkvdnorZlhJYnVTcFZ2VnF2SDFYZk52WHV1bWhnM1ZteStyUWh5alY5eVhuUmEyYjJsTGRhL2pIOGJiYVV0N042YTRQaWxUWmMzbWJsakpib3l6b3Zjb3U4dXovdVBJTkR6ODg0Uk9qNndXMjEwdHlPMG9yRlVvUFhYTlFiazlaSlhHVmtyb0c2Wk15OVhVUExhMHo2clNncWxnWEtsYlZCYnE0MHFjWDkzL3QwUGNadnNrVkpsdE0xT3liaHZLa3l0S09ZTS91VjBzVmdUVWVJQkZXRmcydVVPMERmekY5YldCWHRqRGp2U0lIbFYyODJrbkJsTC9iLzlOanE0d00rTUJndG5FUmVENWx6V1lEUzJHcTB2LzBDYm02UmExM3dINUEvcmt0eWZMZTNZMnM4cTlyeGIvS3VyR0lqbUhIcFEvc2E5RiszRzFqUmxObVlvUXc1WDA4WDJmdnJUUG1LU1pEeGRqTXZVcExKSHBEa2RCYmN4d1JUNkJ4R0NCc1F4MUtydFNUbXNlQUNaQngyd2tWM2pmTFRZMElKNmdraTdLZVFjWHVnTCt1YlFqNVhQYnREb3pCbXpvY3RSYSt6TjJreVF1d1liS1gzbmNvTzBXbGtRc0kvT0NYcmNmYjdQR0hKZnlmNFRQdjhPVmkydHNKeWJZemNiTXJnckJPWEdKUHUvT2htQkVKVWZqZ25pR0M2Sjd3Z0N1R0M4eHlWUkZOa1VuZDVBVnFIM0xIQXk4MXdrMHVSeUpXR2RiOGo3MklDMGxjN05iMnNnZk0yNmVVTzJZZmJ3KzFtS1NtWDBKbFBXWkd3MVVZYjZER2t5WlNsRGVzTnQxYlVYbDBaNW82RWZlNTBBV214c1FkMUJwTU1ZZEE0djlQdURRd0hYaUg5NkNiNXNNZWZTQm9NaFo4U2FNL3EvOUM2YkxDNU5HWTBwS2doWk8vMzJxVDBWVUFZcUhXREdxVmFKaDhUVkg5N04wUm5pa2FwZHlsMm5CSklaVkJxancxQ3JqZ0xhNldBelpuQjNlWUVob3NyTDVBWUlaMmEyY3hybmJML1dSaVVSZmRpMDRNeHMyNlRzRzFPbFl2L1BINGNBaFRvZ0orbWF1RUlsaWUwSUFySkxKTkRtYkhNb0UwcXIvNmlMbkNTajE0ZDhOSDVxYVZXOVFSQXRJb3UweTdOa3R1eEVYT0xVR2M2azIyRDkvVGMycy9qZm5SQWhKSVNoakF1KzZXMjE0RDFRTWZFQmU4bmdJK1FrZWNPbU5ILzcrU21kTVBHZGJpRTB5YXRndjdOdkdyOEtCYkN5SUFsMDJsb2NkRWU2MnV2Y2E3dXMyZGN1eWZLNXlDTDFzdkplZDYyekxyd1M4blI3bmRpaDJSV05CdmhTdDdvcFc0czNLR3Y5SjRJNG44ZlNLQ1B1WHFOQWVhTlJVQ1F2Tm1hVlRCQnVOeGpoTm5jd2l4b01HZFJ6cm04ekd1RDJ6U256WjBZYnVqSldreWxyTS9UWWQ5WWRFb3ltak4zWWJiM3JWcmJ3WEJ6cG9QV0p2QjNVZWM4NzE1KzVzYlhDS1pOcGtDSzQyRGZrYzQyRXdxN1JSWDZmUG8yNW91ZjVpZEdXZXQ4OHAydGtXcUt3aEZnSldITXRSck01WjV5MS82N1QzQ1JSNjFzeFg0elV1Nk1wRkRkbnJJYnVXZ2ZWemFuZjJGdEpLY3NuLzZyTXJTbkthRXphMCtjK0hDcG0rcnovZWNnVFJOKy8vYlZXWXdwM2hhR2MzbTlkTWp0UWh4TisyQ0dJb1NwSmZIc1F3Z1hqdmFSbFAzdEhDQUswK2RPODJwaFFHamVZYzlaOXVPNHVuYXcwVSt1d3BOU09xTFJOYmRYME5EdXNtQThPVlQwbmtEVjlKVkFGNEFGUm5NOHROalRodFNGWlRtOUEybDJCTkthMzVxbjJFeWRJVDJKMExvNzdvVG5Ra3phZC8yc3hFVVNLL3hwQXJicnVsQjFnSmozNWZWR1cyME1XYVZZOVd1Um0zVkl4cmViZjR0cCs1WktPeDVzaFBWTm5KSUV1UDhjVzhZc2NTaDNwYXBKUzlyUjg4UERPTExFR09qY1hFYis1YS8rbFpzbC9oRzlPZ3Z1YnZDZC9jWDJkVGhWS0tBMlY2Z3I1Snh3SThaeEFDRm9wOVd1dWF2TnQybFF6YWFMcUZHcXZHaFRTZ2t1UjhvYitzQllPZS9WZG91OUZGTTk1NnJoUThNT1llRk5BR1hpR2ZHWlVPYnBNbU9WTHZpVDUvbU00Q2JmVHJTNDhqdGk5Zi9uSkNkY3g2UzJ6TlBuSi9MeEh0TmpycWF0ZktES1M1TTF2WjFDdmZmNzY1MlNJVnArZVFib0F2cUFNR1Y2UHI1MzRkUGFOcHM5VTNpYzlUeEtWdG4rOFNBTXpIdGxZdnZ6aHJ5M3ZGNzVYWUhub3EyWExIdjdLL0c3QmU0VTFnNGYvV1ZXL1JpSHhDNzAvejZDT2Z2N2E1enJoL3B6L0pMMUs4d2FyYU9idDFsZjY1QTlDYzErWkkzK1U3d0dtVllUSm9oNlNrajFnMTVjYzJTNTVkOC9Md3VMWVBPQWVFSUFJQk00Z0w3b1dxMkwveVRjT3JQTGU1WUxVOE03Tzd0cytmQnNtVnZKOWNOVlVFWG5xNkNuU2dEc3JFUFdSUnNEWk1Kc24rK2FGVzZLWWhyR1U1Mm9TNVJnYTV2bVZGUXVWQzhzaGVZVlpGakFaMUZ2ajlRbkhIOUxYZUt5KzlpY1RFeXk2aTVXemVodWgrK3E3MXh4N0ZsSHRYTVNFSjZaaGhlU1E1RDV6L1VVVmk1U0xYSWxkdU95K3hFZk1DNUQwc1F6cHJpWFU5UmFuL1RPSnFrRXRXSGUyektOeWVpSis1bzdpMFZWWTI2enBYd0NseGNmU1pEOUM3NTEvcGN5WU12QzE0ekxKVmV4VVJoL1g0blZxVXBVSVhMZHJzQXVwVnRWdGZ1d1pyOWdMTVBJaVJNc1ZqcTlnYUp6R3JWSkNTY2Vtd1lqZlB4QUJubFRxUUZRZGpJNUhOb2UxQzVPMDFaS2lnWVdCTFlCZExOWWsvWmRleFJvVjRTQjJmTHcxYzBYQ0l2bXpxMHFyeUZLQlNqaVRrZm9ZWnZUbzd3c3JBTUhaZnpSQTU5WWpCWlc2UDEwK3ZzcGVqK0VlQlpyWjh1ZWQwODU2eXNDNUJEZncrMWN1RW9wb3JhWlVsOVlWR25Mc2pSQlpFeFBOSmdLQjFzWm1IbDZUYUF6WThHMWVHV0ZORzZLQ2MrUDFJbzB0cTlMSEtZWFVmWncvZjhXUk5ONzNCZmg1a2tnZXFmOFpXUzJZdmtzM0VqN3BmcWk3MW01b0pNZ0dJNlZOMU9GNk1vMi9yNGx1YmxBVFJ0NnBCa0JOOTVudFhZekgyVC9Qek1WK1llaTU4NXh1VFQxWVMvODJWN2VuTlZacmEzVlM2T0dCZ0MreXNJVitZM2VLWHIzQUUvQU8wczc1bDlZWTBwU0xHcWxVQmtpb0RSL3hWRHF0NTcvQTNhaysxVGR1THVHOWFXZlNBeHFYYjQ3UmxqV3E4WUNiREFtM1lCQUdPNitIT1FwNW1ITWRwakVZdTFONEQ2TlhCUGdJdG9saEErb21oY21uUmRCUk53c2dtdVVtZis4eUZJMklFSGxZYkcxWk1RekIwTERrTndIa0U3VFc0Znp1M0MweGh6VjNiMmw2MVpBbjZCbVNLZUZhS1NNSUdLbGtlQTl4NjRxOStYTmR2bjVvbVkyV3J3ejE5ZGN5L3RtTWZ3NjAzT0tVcndqMXpxNVY5M0FrODZ5WlJxUEZsclJZY3FJNXBQRzhqejNUYkRUVldDMnR2KzhxRnFzSUk3R2haeXMrK1QxTFhUUDN5NC96eUxjYWJUN043ZEFFM2RUdGliak1venlrVm9LZUFHWTJ4cUc2czJLSWU3UkphZzNrVE9vTVpjRDhiblZFSnFZRjRWckhhNkw3aVRKcGtiTVhjMFRxT0d6S25WR2FEVTJJMW9XcHpVd2Y1QU5WWU0rZ215RTA3Z1JNTWgwV0lzWnlVVW1oaHVuWFdaTW01ZisvSGJ2czA4bURLck9yY2E1YXNHNWlEajdhSmJZNDBYbk9zRVpjVXF3YkR2L2xmckRiVWRXcHlYcUhhdGN4YlhUVFRnYmVKNzhlWEY1bjN6eUxaUEZ2ck9EZ25oT0JwL3ZIVGFXTFdoSDZUZG44M2ZSN3N0RXkvWDV2N3NyUUsxWFh2RjJOYVlQUk5xUnFEQmk0MGYvbjZ4UWwrTDVRN1laKzQzcGtFTjlUekFDWW1vR3VjVHhTaU9jdFlvQTNKaEJaeUtYVndqdWN2Qm81R0hScTFjaUtPTC9zdWdUNENHaG0rZ3c3SzhFS3h6dlN2UDR4QjlZSm1XVTdKeTgrSXBVNkRFQTEvNjRSUGMwSU5UNjNTeU1aR3dQdjM4ZVBzNjRDN0ZjTGF4dTBxYzZxNnQwUTZWRUNjRUxKY0tWYzJndUNJSTJxbFo5K3Uvbloxd2NsR0NOb2t3REh4cjRlUnFTSHZYenUxT3lmcEgvL3o3OWhCc3l6VDI5OWJWVTRkaGwxaVljUjVFbXZCTk5FbE5JMUFsb3ExekVVSmxGNlJOTE4wd0Q4OExmdjdwMCtDYjRPYkplcTJYTld3MXU5b0FvTklwL21KWHdwSy96bWg5MzVQZ1FQWlJhTlJOSk5QcFVmdk9mZU9ObGRoRkFvMmdxQVc4VkNRZGxXRjI3M0RaRDZhWk55Vm02TzdGbGZEYXJ5aXJ2RThtZlEzeTVMcEhmUkhBQzRlSmRFOHV2TXJUWGFHcVpESk9yVTgyc2FGd2pFWGZEcGp6Z2xVNGcvZFFNNEo2YTA0anovMVVMY2orVGYvTkZUaU5XWHl1djlIVUF3M0F2ZUJTTUgvQ0R1eXpTSFI5TUxmUStCVzhzRVF0RTJFRmdtRkFxSnBkWGZoL1N5ODNXT2V5ZTVMRmlIZ0tFcEozaGwvN1dCYjRGMXJsNU9Xd1hJUGpLWkJ4MXhvWEMxODl3ZHZ4L2l6dUZkWGpxQ1BJMVBWRjhDT0s5Nmo0ZE1kamtCZEtyaXRTSFU3bmdKM2QvM2Y3ei9KMWs4RXpUM3p4U05CYXBoK2I2eTFUVzByRnFNS29kYysxUzFGSDB5THFEQ0F2RHB2TGcvYlVFcXRmRmZwNnB4cHRsTCtLQ0RUc0IxMXgySmw0bzRMMXl2S2NtOVV1TVZZTWN2NlpRY2t1OVdPdXVPc2t1cmIrNGNQcFZQbnQvMTRac2JTQ2RPQmVVWTVnTzNBVWU2MFNMdncrQlNzYXBheXJlRUowcHNaZi8zV2hPZkZIem83b04renp6di8zbDhqTVZwcnN5OHdFbFdaU3FPNklSTWR1WGtUNDlJcFdvS3FDNitxMEd2Y1FrMUhzYWxrVHd4ZHNONzZ2aEhySXZBUDJZUlhaTGlOTDhySHNYZkxKbFMzTVd3dHpIY3ZEY2czK2ZtYm05VDl2NWJIMzljM0RqK3pMamwyZkVTMTZWdXZMdW9vSkRYMDhQajlDem1jVy91NWZCNnU0dGNoeHV4UnZSenl4VnQ4YkpvVmJPdW1SVXRZeHJ4eG5ETXcyRXp2TngzNTNUbnlPOTZkRDNzVy84bCs1eldiSjNzS1YzODJYTHl5dzNLVzNSZjRQb3ZQazIzTXFSY292dHl2WHluNWlOYys5R25pOERDeVdzQzlpa2pITlRlU3pNZmZGTmY3Y3djQ3ZFZWZOWkxlOGdsaG1GRzRQaWI0anROQ1JFS3VibnpKVjQxdW1tRC84Rk1XeitGdnRHQmQzQzBwdkpkMDRjelJUV2ErNWh4RVpkQTh4ZkZjNXJqSXV4ZEEreDR6N0xjeTgvMkNBNnBEZ0dIOEVQbG5wckRxc096dkljYjhVWkZYcTVtTjF3ZDVTTGpuNCtiUHhzdmNhcUlOVVJSby96VzJUYTlwWGpkdjlmM0ZrdU5XS3pvendxZ3FyeFNVWGFtZVFhWHBTeU1ZV1c2bDdCWW9aTEZuZUg3cjB3aG02b0NLbTdNaUdGR2FmSDZmMjdzS1dhWHBlVWwzUmoxQW9XVk5HT0dGd3hZZDBsSlFMSW4vcnF4dFRPbVNzSmQzQjUxaEJtenBSb1AyVmJJVmhSOW1yUkxWOWhYM050b1RURmpFVFduQituQ2s3bE9VMnZzOVNMWFplSWlrVHFmYUphZXZ3SkZ4YmxEcXZkM3ZyOURkVzcvKzZKRkFQci92MDdyMlE2alFmVFFlNkx6V1BQQmpnK3VkLzRRaEh3ZE52VWZkS1BzdG14WnRpcXJ5N0t5Z2E4WXh5c29iVjlHcXR0ajRDdGd0Yk9Hdml2cnFNN29NNnlPc2x0NVpaaC9rc3FxaHdmQUJyVTlKRXRyM0tiRmZSRlA0YzJTbTRQNTdmU3VxV1ZSN04vWFJTNXVjR25wcng1VHZRQ2UvOFVvUmVUcUhNakxEOFlyL3VhRzVIc251eDZSQVk5MmVieFBlTDNUelJLSldlNzNEdnM5SFk4Q3dPNE9yM3ZZNjJtbnBlYnBiczhkbXM4VXNYRVlub0NjY2dWRWo4UFFWNUNyQktyVUxJSUtsdTQ2ZTJjQnlJT1c2eVpiQ3JaaC9UOTFRNzY2UWRUcWNKV2JPaW82WDBKKzFGOWQzSUdvTzNRa0IxVWhJckxOdEpUMS9kZi82dGQ5UC9uOTA2K1hGY2twQndQbU9vVE82SFUrWEdjSWpId095TFJESHFXbkVDMHcrdWZKMUpLZ2dwRXdjalVSanVFYWZkYjB5ZjlMSWxvVVhNQ0R3TDhWTG5GWUM4VFU3cVZWK2lyUnJ5L3hXUytOTGQwMVJ5QkNVVEd2OTJiNVhWMUpaUDUvTlR2Z0hVZDFSN2ZEMjRXZkRpQ3BNMjNtMTNOeEptS3g5dWtycmxoRjd6QzZacnQ4KzFyZnRlMjRWZTRpOUhhMGFOVUoreFhMQi9XZlpmRXJ5cGN0WDdIaUh6OWw1TkxtQko3QVRIRThmdkl3ZGp2R2QzK0NZQWphVGtrbDMvejN3QlZqOHZNbXp2REFWYmFzQWdLRzFPZkFqSW1KMldFUFpzRk0ySVpiNUxkc1NMKzdCTXo1d3J2TjZScXhTRlRELytXN0FpRC9Udk9JV0pyOWs4dDU1WGgrMWFYMlU2cW5seE16RzJhUWNMdnpHWGFmdDBvT2NGV3ZFVjJacVFyQnREVU80RExLdkQ4ZkppVXZQK2Z0aEFma2lnR1FpbE5BanRCVVlxWDQvNmVGa3MrdUMwWEh6cWRLVzA3eU5rSlR6bnUyKy9SRzZESGdlbGFibTN6OWJVZDVYenE0MnRqWlk5cFNYeGtzZC83bWxzdG1IdkcrTzZYVWUySUJNemxTejhWeFQ4VUZraDJlUXlKKzN0Zi9HMkpDbGVIc2J6UDkwQmJSbkNhdTlBbXVjNlpQR0NSWHBIUERsTmM5U21ZejFQS1FuMXllYmgyaHZNcFF0ZmJJd3JwcU5MVEcxTmxsMmh4dnNHM3FhVjlMYmF3NStkYkdhdlFwTjFzSE95dTJ3SkxmNVZLK1VPbnBIVDJvb3h2NHFNb2RWV2dKSDdCTmdaSGVPdnRmZC9zdEtJTnJjblZTek54Q3VwUFFrQVAzNHlzVG5RTm10N1ZiWmErM1VOcFlnajVaSGpCc2tLSzBRUXR0enhkWFhweDhkY09EcnRKdkIzWXRYMzlHNmYxVFpZL2JWZlpFL29pSjdzVURMbHQ5dC9LWkRjMTVyL2RrZXVNYjR1Q3VWNDlaRVF5a24yUllNdG05UlFOL2wzV0dBQlhrRkw2SW9IZjhuNmR2QWtoR0x5aDdiZWd2aGM0VVNDb0ljUG5lcWFlWFh2Z2d3QWVkd3Qyd0k2NDVEWG5LMTIxSGhZQnlqVkswNk5LNC80OGFMdm9YVXkydDRTcGUva1Yyei9UWVdxcWozYkEyR2pHczdXamJvN0hZT21yV29DVVNQYk4ydUNWUnNXK0VTRFhyUnZ4K2NpU1pHdFg0ZmI1UktxVWQ5bm50VkJwKzlJeDBZbkVKYlVVYUtXVk5IY1hVSzh5MW5aUjdpbzlETFB5ZlBTeVhUQ1Z4MTc0bnFsbDQ5b2tiM2F3SUxLaHVQYUxXUFhYTnV6dTkydUhFT2FKNCtlajV2YStOcUY1RHhtUTBLSHR5eGpuajA2cDVCOWE5NGYzYXA2by9NVlVhdmYweldQSkE3aEo4S1llYzVlV1RBdmhNNmtWSjhzVXppSURNdktYVWI1QitKSlc1dDlKUm1mUW9UaCt0Wm4xNG9vcDF0TEd0ZUdaN1U5TzBtYzVseWRXYkF6WVhiZHgycCtwTy9DOHpTUVZHak8vQjN0bEQ3Tzg4M0ZrMk5xVldIcHBwV3BuRWsxbi9tcFpvVjZhSmRKSG1PN085UVZKU3YwaHRhN0NVNEp0eWNiZ3QvbWxEcmY0VVo4RVBnS1VnL0NjSS9nR0RKZldON0VrZSt3U2I5VHVYTjFrbTNDQmVDN0k1bnQ0Q29EQWxtaTRRMUROOFFYZHZBVmc0MjA3eDlmZkJJcmlvL3JzL0sxeGFWNlJzOXhzN1h6a29TQzNqUXltQm9BbmMwZk1HcEJoaHByUGV0dng5cnJkWHN6bWU0UUtnc0o4WVByMGFhYnVucWdBeE1RVFFEditOUGN3eGoyT3lNNmR1LzNmbm1qL0d2MTFrUFFJQmZOQmNDd0tUdzNVZ1M1d0ZyQUFkUnhWd1JnVzhxUUl1aDF0SEtsT2tyOXJZeTE4ZmFvd2lXMnNnNjdZR0wxakpaTUpVd29jcTRUdVZ5QjIvN1FLSzdYUWJvUEd3QnFMV1FEN1dRTDdYUUg2ellRMElJMzdvNisyZ2FBSDcxMjNkMzdjL1BEZGNLMElBaC91YkVYSzNDV3dIcDJFeVBPeWJIOXJZbWYwQjJQc2hBUE1zU0habWNldjRGc2Z1eGYzOXhmMnpWLy83RDRzWGtiZ1podGw4cXdZT3FJRUgxR0NmKzhFZkw5TnFNNStHelZmMm4yLytNRWUwbVVldFpjQmUvU0hvY2tZY2NKNzRCcng2ZFJnQW9EMDRCMDcwcWNob3pZTGtXb2I2NWE1djhtZVdKbW9tQUdwd21QSWZRQmdXNU84V2FqQUh2bzFkdi95aTQ4YjdiZndUUFozc3hBR3YvYWVvWVFBZ3ZsOUtFd0RzNlI2NDBmdjF3Ykh4UzlIK1Q5ODlyU3JOYnEzbk5MMWZIbHdBK0VSRE9JQWZoMXprd1JWSFdndVBUbUVmV0svLzNYdE43MGNlenFYYlJILy9zNkQzYjMrUXN6enNsTkprNzdkOUd4bHNUQ0hweHpJOHUrL1Q3Nzg0UXRXOHNvSDNRK2pKQkhDUjhrcjRSeUErZjZ1RE16NE1jallQOTdTaHY5SENucDhLZjNpR1VndmJnL2REdU5EeFNhSUFLTVQvMjFjWjhLRDhETDN4dVRoRmNXMmk0cDlWN2hYTFcwQlZIMXlIbDR0N1BMMi9sUXVvdXpoWDc0cndodjBha2JLbnA4OTdQTk83Rkh6am9pdVdsRk5lcytQL3NCYlAvMktuSGR6OHVtdnJQWlN4RmJMaXdWeHlEVW94cFJrM2wrLzh6TWVQaDVSMUdBY0E3c3JWKzQvcEFtSlgyNVZzaTRndkF3cXhXRFRhRUZKdXlEUTJFY25XWHFsS29wS3B1YW5SQURUQWhaTzA3WFpiS2prYmxuV3A3UjNZYUFOVFBiNHBHVGR6dVVPcWRZMVdpZThtRDNqb2NUMDZVeXdRQVVsQTIwWUJvS0psWFJBSkRNbE5rTVo3eVNvdFpFUWpRSS9FVWNsV2xkV09YVlJtQ2xlT2dyWVdWSTFCTDdtYis3MmUwZE5yc0wwQzRkWnMzb0VLaGF4dU5zbkJFYkZ4TWtTRVIrK1pqTFpIWWhKVlYzbXhveVZSYVVUMHFqb3ZyZWdjVmRSc1hqa21hRkZ0RWVKbGplUUZWUXBtVTA0UWNiQ0hqQXoxaVVJYXd2bE9Ya082TFI2a1hlb21YTW9qWlJOVjNmcXF4MzdIaDdmVWVnRFZDMStacUV3bHE2NjN6Y3k5M3E1NzQrcXVBcjB0dEJVcWYrSnRqRmlwYzBCYSt5bDVhOGNtN1l6TnJLTkErSVFGTzNwZjFmclZiZTFEU3BoTldSdG9IZUpOaGZzWFJlZXhxdnNGcVNmVTc1NkUxaXlyc25CWld4cFlhR1ltSVJLdldTN3o3T2cvN2k0Z2RtNEpEYVJjbWhqcksxTTZOL1JhY21PSmhHaGw5WTA0SEt4a2paL2NHdktDbkFydGR1d0lkSzFJUmloV3Rzdm9iNUhZV1ZhaENMNTdpWlpTOVNVcStEVEg4OTF1QUlqeWxWZW5OYTF0U2lHYkhTbjJ6WGxucDh1cWQ3bnFtUG1uQ3dYbXgyMVg4dVBIeHpnZkVJdEV5NTl0dDkrdXY3TFhkbFBveTVsNjcxbDRNQUoxbzVXb0tJRjJGKzZYWjFUdDYyTE41Z3V4V1dXbEV0TWt4UGZkdk54RnJZZ1IxMjFSbDJ2YXNvRDhlZzYzc0Y0dFE3bFFlR3hiUGVMTUNUaXFyMXdETCt2U0pmVjIrNk1YZlc5Y0VNUEswTC84N2tFaThZMnJiOVZEdCtQOUd5THY1Y0JXSjFvdTdjS2RFeFdlcjhqUDR3dkRTcyt6NkJ1UGFHS09ML0NtbGlTYTRieWlMdWcrbVJCUlJmQkFON0dTWjAyQzRYSDhlcGRXci9DQjhnYlVaVXBlU3M1eE5RRElPWVZBMUVtSWVpS1hXS1pSQTFWR1RDVHhvbU9vZ09qUURjZlgrejFybE95aG5Vd3RFUFppUURTbFNRMFhIT1Y1c2k5ZTZaM3E2OUJudEMyKzZ2UG9QdkMrNCswVmJUdDQvMS84d1hJeEc0Nm1FNHduMEhpMy9YQVFwaUxnQUZaZzBMajVLSCsxWEJySFFucGhUWjB2KzNPaklwKzZiMGdzNnVvU0U3cVZ3anUzdGVoOUo5Qk9YYy9Dd0R5Ly9hVW1GcWxGTE1tSDVsVTFSOWhSVXc0U2FJMzBxRkhXQW5tbVNscW8rYXR1RzRYc3NTMTV6ZjFTc3lsNWJaM2I0cEZYODdheUFjZG1jWit6b2VoenpvWEVkYVFTWmtvb0x2bVY0TG16dXg2dkV3VzdSVkNFdFd0M2RBVUszZkZpWjFhZGk2Vk9RWGNoNm16R3p6Mmh6amZNS1FxVGppajJ1MmFwamlUUHJhUkdKNzdhTmpUcGNkNmdQSkJXQVA5WHRhcGNXUDl4K2pMOGpkUFB6YS93cWlOdWZEQXc2M2JYS2tscm1zQWUrUVU4SmZ5ZkEydnFGK1JQM1luMTNlaGg1K3U1SHJiTVJJWXc5UEx0b1g4d09ZRzFrWGVDNGVhOVowMk0zYU1hdW56OWNueWF2WHI3TEVRUEhxK3FwaGlKSHkwSmdKZ0F5c3pvbXozVGxsWUJDZGJJdlJPY1VlTGdOWkx0TE9wRnByWDA0V0tPZ1Y1QWxpdzlleDJiTTJ3Zm5ZK25Odk1WL2l2dS9oT3p4RkhWYmxKRFdhTko2U1JsdVZHOXNWcTB4clZFWFRmVUtCdU1xNmdQUVhkVXMxSXlWdFN3Sld4dmhkK2luWFE5SUM1S2h4SExNdDRmbkpvc3V0WU10cVhBTEJ2blFGUUJtSE9XZGxWcitEVFB4bElnZDJHTXE4bGhQNDhSRFhPdUVRTVppODkrWWljU2t0Z0pJTG5tTGg0T2gwTzBlTXF6ZG85YnlvZndtTzM3dWhQckpJZGNMNzJzRTV4OHpxaW9WWW1reFZGRmE1L2JsYW8zQUtnaC9rRU9BbVB1eDViRE5PUXExYklLd1VtSmhpWUhDM0NjbVpMdmtXRlZrUTVaZWpuRTljQi9zQ0lpNGxVMGtZNmV0UlVOYVh1b1FMeXRKME5veTJvTUNnckxpSkNkUVIzREJPZit5eFVDanZMZlFGYkVlYS9UbDcyU3VOT3VwbFQrbkJ0YVdncmx5ek5jUk94c2JYL1RGZEp5LzJneFBhM29VMkdwWWJDaEwydjVIMmF5SU5XTlFML3ptS3pZcVVDc3JWMmFzcmVYUkw3L2NsNGFUNjdTTVRBeEVmSkx3aE9oTmhYT0p1L3Awd04vdkNWTXFDenhPamZONWVMUkxPQ0tJYytNcjF4ZTZmQXdiRnNXNEw0YzI3bSthdG9BZEFUYnBsL04zUkpnYkIwbmZNMjZMZnVLa1BSc0RTRUEwVk1UamREWFk3SjRmNzgrWUYvUDQrc2hWK2hjbFpUR2Z5UFRtOTB1VktQUmNCaHV0SzVDS1dZZTlwZ2E4Y3VDcVJqaGNNbzV4Tmg0UWNZNkpSM2FrNVk0MW01U1JCNFdGRlV0c2lxQVVqVVNNQlo2N1BjTUlkQk1hMmljRko3VTdqMVdzZjFPYXlHY3F6RXpDM2lBV1VhNUNqV2FjM2l2MDdDU0pSSW1HRlBiaWQzT3I1V0N3TGYyKzRKMkxzYlUyVUZoVlN3VHJGcUR6SWM0Q21CTmpKRFdsVmJUYURRYTRtWWtYcGRza3lKM2RUVWVUMXhHdGxUSUp1Rk1PR25oT2xIS2toTkVHaEp6OUJsK2pBbERNQ29EUW1xWnpCV3lVVlNJUEhWYzYyUURaZzlQSE53RlpUREVrSWtsbWdRaVlMQlFrRDRIWTlWb3JLdGFBb1NMS0FGcE5jWlVTaG13SU8yc2xSV1ROaldtVmxCOGY0UlJ2dUZleHdvcVExWmtCYXZqaHVKaTNnb2R5ZkRKS3dMekFGRHZvaGFXaERSaUo5MmpUb3duOTM2dHV3VGkzSmxZbE10d09DeXQxNXZGMWFCbEFtWkE4Mm90T2RJR0N4MFdRSm9PeDYvM1kxblpvZmZubERsbzNiL0g5cjBTSURMbXdZT3VKYzlkYWYydFdSS0FMYTNEVjlwQkdMdG1idmEzcEM0YUo2MFI2WHFiR2E3UisvZVQvZDVRcW4rbzhvZFk5V0MrcHV5VjAxaGlDSHdjbzI0VXBWRjFIUjBTbXYxNEljcVVzTkJqcFlyYVhvcEJGNUphaDZjcU9rL0phRlhtcDhsazBKYU1naENrRkJ2UURQenJGcFF1QU9Jc2FZMnY5Mll3cDEwZ05GRXBjcmRoN3RhZU1MUnRUTWt4R3lVeFNWVmdGU21YWmFOUHN4c1krSVpwOEpHa3hwT2JBRjlOZDBhVzBQUHducnI4SGpDYkJDdDdwY3JkTnkrSDI4bTZRK3BYajQ4K1VNSEtDMkZOajJRM2VmKzNhUnFIdVJEK21iLzVTZWZ3OTRNYU1MQ2ZHVlpaQ1NmNlM0K0plL1BoQitTbUsxSmZPRFU2RTFaVXE1TXQ2dldjOXphT1U5VmxrZ3ZxNUl6aGVYcUxoWTNwOWRNUDc1by8vY1hoTEdlZkhlemFLODh6SlYxZjgvNTVpNnI2OWVRZlpYRDMxbDc0cE9iamVyUFpmUmszYzRmeC9MVXhlWWd0Yk03dXcvMXFvZTl6YllucCtUeU1CN2RXMDkvQmR5ekticXRlS0hrc0dseVFVRmJLeGQ3Tk5keGRFa1pBQUJBOGlsTVBHenZSU2dHQkVEellNWG5uVUZ6UlRIVVNnTlo3VlVUNmtlQWUyNXBxZjlRWDFmODRzV0RpSTlQSEViVTRaV3RMWUxQRVQ2VjBRTm05ZWw5aTBMUTlIZTk0UXZDbHVuSUVHaVJjUm1wUG1aUXBEUW5tRjZraEFBUHh2eDkvMzMvLzk4TEgvMXRTTktJZkFNQmErdzhaNUFGOFBHLzlzNkluK2U1c0RnR2dZQUFBRU1DL0g4Z2p0NnZyLzBhOVU3N1hYMEJvS0JWQ2VvN2czWVNOdDZ2VlE2V2Q0bi93bGVxOVFsWk5abTFJenkvMnl1Y0wvQW9JUnk0RHBmdU1RMzJ3Sk1yUDZDTFBVRGZoNnVlQmxscmhSZkFiOElONVc1ZVNWY2FwTytyYVBpK3hienJmWGF6bzdPZDgvN0xZMVE2Zy81NmwwcGVaQkFxby9yNHQ0Rjh5MytoaUNHZTRua0FqMCtYV1Vna3UvbXljZlYydnhFMFpEdnE3VCthVXRoT1V6VmY5T0pBVldBbUFyeTV2d0Q0bnpTT2ZlWTJkcFV0dDIrYUFmWjZxZDBObExzYzQrNGs0SldGdmY5UVRxdnRHTGVSalpoT0M5eFo1MWNMM3NJRDlRNVVqWmR1eDJ3V3FrS3B0RkdVSUxabEhMd3JaSVQ3RlVKY2lwQkQ4ZktFOXUrOC80aTBYOHR2YnZPWUUzQkNQamJIbEhqdG1JdGt4dmlzaTJvRXVmSnkwSVFZTnpEMjZvOCtLMGJGc2w0dlkvdUlKUUhZb2VOOCtXUVE2ZHdKUFMxaUp3ayt6MkZTMnB5ZTZyYzB0YlQzQjgxTGZoMlM3aGhmVW1yRnlMcTBFb21pSWI1MytZS1ZlNzVMTWRBd0RrSnNDYy8wU0NzVHN4VStZV20vS2V1ZksrV2pjc0Y3WlpGemJoVEVqM3BuNXl4VXRENVZXRHNzdWVDdGljL0MyTWRmSTU3ekk5cjJRSHVOU2ZMMjhKeWx6NWRrN0VuSVJQMHZ0WHd4dk8yRHJNdmFyeEdKRXE1WFhMTCtMRjlSeHdlbElkaE54MGJUSHRKb1JQUktVVGlueWxaSUU0RTlYbmFVVFFEZ294QjJNQXBBblNrTks1Sjd1NFN2QnRuTy9zbWUvM3QwMEF1YkovTUhmUitrOFpFY0Z5Z01BQk5DUWZyUTJGSXdEdFRzQitoOGNnOE1CQ0l6RG9TWUhBSmJCdHdiRTNYc2M2OTIvTk9EVXJqWWxHa2c3RjlKQWtVN1hJS0JZVzRNRDNwN2R6OUhNTXJzQ0FyQXI3MEkrZm9hYzNWZVE4TFg1UklKMlJqM01HdFZyWUNWRzB0QTZLTld3b2RyZU9wVmEvbmpYVTZ5SFdKeFp1eWJKNnU2Z1U0ZDR3MTdhekVKTW9WOHI0d0QreWtya29FWjkxRlpxNUhMeDlpWG9BdzgrSERBSU0ycHFXWER3em9mWFBOd2JzZzJmUis5azZ5S0ZnTHNISmtYOFFwZm1qVmNkWW1GU2dOeGVyMk9aWWdvRURaS0I5WDFtc21SS0VubHJJRFFOUVBsQVVEWXVsU2ZHV01jeGVJZWZlcU1JNnZCQzFheHc0OTV2SWJmd0JXSHd4VlV2VUl5V2p0VHdXMVRnK2NaVERiMTlqYXJwK2ZWVkVncDVmWDdzNDBLOE5qbnFyam4wdFkyMUZkTWI3WW9waVUxeFZXS1ZQeWF4eUtjazVsUk5pRzJFYlJ2Z1Vpa29UZzkxU1hTZ2JCSmNiUzB3YTZRQnBpUnFtVTFJcGFva0tpNVdNWkdOaXJwR1N1R1VSQ1pRcFRXcWhLK0tlYXFJcXdvNThRS2FQNVhoMGRGV2thbHhjRnZZL1BXM1FycjZ3OWRjMTNhbEptMjdyaXZ0Mmx3VmhWNUZJbHBrcGFvQkVWWjVZVmF4RUZYYUJOYS90cGpmeGRaZXp1dHcrRGMrSVAvSi80eXk0TnpncmdiSXdYMEVHYlZDWmFXd2xyU1NjajZPL0UwK0lCRmgwZDBpKzQ1djM3ZG1OWlhLOVRYd0d2OE1mUGJldEN4NlhMK0FwQ2xEVy9Iak5pSys3dnJxMVNzNDIxMjhiYkcvTXZpTWM1R281SmMzS21kZFoyOG83RVU3VnJDR0JQWjROdEw4OS90bFhGMGJJWW1OSXdCQkFRPT0pIGZvcm1hdChcXFwid29mZjJcXFwiKTt1bmljb2RlLXJhbmdlOnUrMDA/Pyx1KzAxMzEsdSswMTUyLTAxNTMsdSswMmJiLTAyYmMsdSswMmM2LHUrMDJkYSx1KzAyZGMsdSsyMDAwLTIwNmYsdSsyMDc0LHUrMjBhYyx1KzIxMjIsdSsyMTkxLHUrMjE5Myx1KzIyMTIsdSsyMjE1LHUrZmVmZix1K2ZmZmR9QGZvbnQtZmFjZXtmb250LWRpc3BsYXk6c3dhcDtmb250LWZhbWlseTpRdWlja3NhbmQ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6MzAwO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi94LWZvbnQtd29mZjI7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R01nQUJBQUFBQURJMEFCQUFBQUFBZFhBQUFESFRBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdsd2JuRlljaHpBR1lEOVRWRUZVSEFDRkFCRUlDb0dxSUlHR1ZndUVLQUFCTmdJa0E0aE1CQ0FGaFVJSElBd0hHMnBnUlFkaTJEZ0FhUEFaRmtXd2NRQUZtKzhUUmRrbW5VajIveWxCbXpHaGRlaGJaU0YwUjd1bzdoa1pDWkdUNmhucG9iWlRXeHk2Y09EaDBFZy85bzBGUitIQThzM0oxYjN0dzU5WG96Z2NDTndqWm10dHdDVnhYNGhMb3BFa1RhUlh0MFpJWTJJdDRqZjkyWHNDdk1STFV3ajJRbzBJa2hjeEtrWXE1aVF0Y2ZuaW1ycFowanFIdEduZ0pibC90RHF6aWlxZHF3QXpvUTBUTHg4Nk16cFg1dEk1VC96djk2OTc1cjRBb29zUkJESmZCYm1rV2dzSXRvcU5iRzJYSjlDa2VvYkhiZjN6QkJtb0dBMUk1YWd4R08xR1Rhb05FRlRNNjdJdW9uOUZYdnpmK2l1aXdRRUsvVy9haG1pYnorVmRFYlZWUjRZTitQZC9qY3pDVE83TG53V2dJcUZsNVFBbDIxWUIycDVLSkZsTDZKZjdaZUJ6ZnU0Y0ZKM3ErQU9DOFFWNjZ6b2JXd1loV3dEL1Y1c212RVhvekVtRVRXdnRLRzJUUEczaFdjcFFtOW5RT3ZSOEpGSVZnWkJkMm1iRmMrSTFmWVh2d05Ra1ppdnF5UDBlOTM4NnkxYmE5ZDN6QnFHTHF3QVgzWHB6YlRINit0Ylh6R2drQTJ1SmZReWVsZldlSlN2Z0MwSkZVRjFheE5kVFUySFRwU2o3bEpsL25lbXE3Kzl2U01rLzZKYWRHc3NxcmdHZWV0bmFOVlBMNHorZDdxeC9zZ3huRjJUNWVnSFNVV3lYN0FERFZNS3hveHowQmNodVh4aTJBc0NhdFRQeXZnT09OVE9ick9TY2NHdUNRbHpoRWJLQi92cnR6MWlySDhoc1puYTc5bkluaHkweVJFTENKeUxnV2Y4Ni8zQWdUREFBQUxwak5FZzNKTk5RWkxoc1pMb3lwRncxcGs0ZGN0aGg1S2lqeUFrbkVNSUJRcCt1Si9pbGtoaXB1Q1BIZWcrRzlscEZvUS9hK3hPS2M2SEZBeEIyenJwM296QVhhaUJ1eFZNOFZtQ2tXbVY3dHQ4M1VxbDZpNnh3eWFzd0NwVjkrY3pVNU9manJNckgvQjFiZHNTWks3bVNXL2EvdENtdktvSkVpaFlqVmlLUFByeW1LVkRrUC85ck1NTXNjeTJ3MEZMTHJMUFJEbnRkY3gwekt6TS9FNmlBcENqNkwvay9hS0EzQTI4T3lWeGFDNE9sVDVhZHVQTVBXZlpCMHZCa1J0bmNZQUdkaFN1V2JsbzI1MXJUOWVDT0NLTGdmYllHa3FCSjZWUXlhNEtUR0lIVWc1ZmhxUlNZRWpNSFJ4SUhJK2xKM0ZUenROMHBXaDdERERGUHB0b3B1TjQ0Si9BSWtnMVNlT3BjaTloUDBSVFFFaVdPd3p4TjAwWkhVK1VwUzFHRjhCWVBFRDNBQkxGMW5xTEZmQXRTSWRzNHRaUXJFSkN6OVRLdFoyVE1VVmhheEhPTFczaVlTdDBwb0VjWWdvU3g0N1ZEcWN5aGtna0ZQWUhkdk1TeDlWOSt0NzZOTFpxREIybTlZWWhtdG12NHowbDcxYURYL2hjek93UXV4cTZrMWxVQzdubW50Ry9QM1N6ektHUS9md1JVRC9jT01RaURJcFRnanh2dmIvUGJ3RTlzbEE2aWpMSVR4YmtHbHAybVhoZlUxTzVBL3lIZWFiUldJeklkV2pXWjJXMDk4UzNOSm14SVV4RDBKUzJJUXFoNy9ETE9WRlVZOUkvMDcxZHFKRnk0Z045U055UHNBcWtsSkdYUGFmZU0reGJGNXFJWWMvSUFCeG1sbTRCY0Irb1BPUnoxOUNNMm91aDJvR3RFTk4yQUpGckNWek80Tm9EM2V4V1NFS0c0c2pNRHRPVkpTZ1lMVjNvU2FMWWVlNk9yRTU5Sld0STdYcTZGTU5CNnBCYUR6bVNHN3g5UC9uY29BUUMwWU82NUFWLzhWcVI1cEM3TzBLSlJTVGlYTUhlYWp6dnE4ZkQ2VEVhdGRTZUVkQ3lKeU9QN0hTMEhOc2NqbjRFVUg3SVZ2NUI5TmNIdDZRK1F4cjVOZ0psRVlwQmJsN2lXRlRnMlN2c3ROTHBrMXdkMEVPQi9IS09QNTFvQWtLSGJrMGN4Z2FVU21FZHp2dlJFWGZYblVFcXhxR2dkeC8xcFVCbjZ5U1ViaUw4YmtJbENwT0MySEYvWTB4NXFweFRMNkxtbFVQYkZPSk1qWVFEZVlKSWNZQWh0S1ZxZnJGS0luZ21qT0k1ZXgrV2JTVUFyQ0dOd2hJRGlhS1BRVjEyZXphZEEwNENIRzg1TFltaDJnaU1Fb2hndUZDRTdXdDJSbnBaT1AwTEFtempKTkpNbDFGcVEyd2ZiVUJKYjgrZ2RmaVNHU1cxZ0MxdFowejdRVlFkZG9UU3lzalNlYnpvbGZ5b2hTdGdnQmVlTENIT0RmTXlvMkJPUzhhMTJoaWRyM1lVaFJEVlhUQUl4RTZ4d21zMERFZzFNUkZIQUd0R1pKTEU2Q3RCWmw1SjJBN3VsVFAyME1qUVh1K0ZHY1JoakNvVlh0b3daaXRoZUFpZ2Jsbk9aSVJnRENnWUtlampCUW9RNmhSaDJMSWFyR1dCN3orWWl0S0F1cUVNQWw5UURJZ0hjOVJzWWlVekFOZ01zWkdMTG9VYXhha2tWcmZEb3pLMjEwWmJLMDRacGk2Q0VCVm9zTU9BQVVWZ1Fpd1YySE1qQkR1S1VnSk9JZ3lYaEVNbnNVQ2xTYWFTeHc2VHJpT21NUlYyNFdTRy9BcjFvYjhMTjlNRmFmYkZvcU5yY2NDTnk0a2lqcUl3QkpsTndCQzhtV1ZnbEcrdE1aK3Y1NU9NVjRFaUYyS0NJYlZTc2xGb1pOcG1GdzgyWFdzd29DNTZLRCtxVXJvSXpLbW51NEdBWmVKWi9FQUJNNFFXUVJwRnFob1ZZQ1FmUGRwT2hIR2FXdXg0ZXVGaUhudTQwMHBvMU43Q1hWTW5mS2pSMllkRmlzY1dxRnF1QmROdkFhOWR5OHRFVFArNzEzTHdjRFB4dkRkMGF3KzluZXlmZ2QvWTM4Q0VMNXNKaVdBbnIrMzMvd1pLY1Fud0tqclhpTUFCcER1Q29hVWlrR0lTaENBRUZ5RUVWNUplbEZjSEJwOUxuZS9lL2E3Yk1FdzhLcFA2WlpWbVZSOFM1b2JBbVZaSldPTTV5MGo4QkFCUVlRVFVtUXlhWkdFVDF4OUhEQ1VrTUcyTTJIRU9odVg1SGpUdUJwU3BBS3dpWE9tc3FCcURBWHpRVUl3WitmT0JIdmdaaFloUEczL2pWeUl2Sk9EZEJJQzBqSzVzS25ONzZxVXhzSTVSanRBcGl2d2NtZUFRSzlGWUtHc0VTdENRUW9nNzZHNFplbXFUSlRBUlcxRDh5QlZJUUJWTUloYVp1L1ZIN2hTT0JSRktSbWpRa1Nia2dRSG9pcll6aEtGWFg3TElKb0xDNWFhbmkweGdXTGdSZ1RnbGtyT2ExV01Kd25ROVh6bGNmbUFEc2hRNEg5RW9lbnk1U29ySHJXZzl0czBwSTd2LzNzRWV3QWF6cnVDK0dDUENmeHJrVDlDWUE5QzliQTVCeFNLSzNkeDBBWUkvZXlpcW10QnVBbzB0Y051YnI4MHdsNCttNE1QajltS2FXUC9GSjF0bHRQZFV6TzRHL2hMOVdqcFROc2xWdUl5Zkk2WEpYdVZpZUV3cXQ0ZGJtZmo4QUNDSnpTZmRuNHBNbzQzS3NrWFd5c1FWcGpEOVN3bTBGOUFQQXZ3T0FOeDJ1dmNiMkM5dUFDOStFQzg5NHp6cWZHYVA3S09iaHJuTTd6MjBCQVlCRVFIOG5nTjdLOTNaMWV1VnpOUHFuN1RQSEl2TWNkZFYxaTYyejNuOU9tV1dUK1phYWFZa0x6amx2Z1d1SWhpUlFzR2EwbW90Z1lHUmlaaEVsV3F3NGRnNU9pWklrUzVGbWpmK3Q5UUFIb2tKNmIvM2diakwxMWtkZk9iUTNnQmg2Nm11OXN2NjNUdWRUb0ZDUlltVld1V2UxUy9hYjY3RGpqampodnBzUmNVdU5MUzdiN0hiVXVPdWkzLzBSRGxmYzBCQWV2Nm0xMVQvKzlxK0ZCQXhIaFNkU0N4QXVSS2d3a1ZyUTBRc2lhODJxcGJaYU9hT05CQzd4RktsaVROTmVCcmVPMnVtZ2s2NTY2YTZIbm9ZWVlLQkJQRWFiWUt4eEpobnZySW55NWNpVnA4UlVwV3dtUjAyRWpUYllhWmNkQ0EyL0VBQm9EUUJzUDlCeVFMOEZNUDhBOEo4RE53Y0FBRFoyRmJ5RWhPTVVMQ1dxb3BoSWlGRkdQNi9KU2Jibm5KZ1V4VjFEekxRQWhDSkl1RWJCbzNneWFTVUpSU05kRUxIU0h0SU0zSEhHc1NOeGZld0VuY2ZyNmNDZ01XbDdqYWFKMDBleFF0UVI5aWlHNENVdzhnU2lKbm53U2IycnNBaXBSRWxueENZTXM2Y1N5SStlMlJ4NkVxYitDckdFSG1Pb05BT0ZwSlN5TmxBVGhIVE5Qb0I5SFFPcng0ajVYa3pPZzRRT0NXbWNQalJ4VEMzVThZUG91VVU3WDd6TXZya2lXbzdkSnNablFRQUU3bm4xL3Q1ZloyUkVRbW8wd2VpdXZKa0xsZyt3Uk9rczV4UzhNOFdMbFRvRXhLUkp1TjVabHVjOVZ4bUdwM1hvaFNGWmc2MDJoMFBwZlFqZ0hITGRVOWRZR1pHVWpGOHhHUGFmcENpTkJxOVY2aTA2VDA0WVlwNG9LMTRvYzNlbHJDaVZFWURjL2oveVFTblBPdGFKbnpIQmFhaGNBMENmQUNxOFM3NVp0QWswcFRuS05BdXVNUVdRYkZpdnRuUFV4bk1MUU91MmZFbU5iMVpxNTVJTWM1UVp0bXA4VnlsUitGQllveWxYcFg3VkJEQW1kbUl0SFYyRlJ3eHEzZjR6Sm94NHQzS1pmcHNqeTh1L1ZXYlVnN1oxUjlNZ3Biako0dG00V0FETVFrNDV3RFNrVVJndHlFbXcyTUtSVFdERlpkTi9GR2FSZlpIYmE3T0xZTy91VDRpSEI0cU1jcXRIN0tWdjBicXdPWkYvdGVZK0RRNG9IVVFZaFE0T1ZRb2JUV04xUzdEQjhQWGMrenV4Nk9RM3hPMUZkbUVxQS92eWlLM3R1YUhTUmFXNDBPWTA4WlZBUFRXTVh3SzRaRU94QmhDOGZUd2FzR2h4S1N0N3lRbEJvVDUwb3J4K2tOcW9tRytxSU0xNFR5WFZoU0lEMTB1RUkyQ2N1Rk9xNTRDY1F2Tnp4L3BjZjhHb2ROWS9TM3htYVYrekpac3c3OWlsZTlGL1U4cmhQVkM0bVFsY01EcmJvRFlTNkNOYjRBS3d4cCtSRUZWUzFUSTZVTVp3NHdZV1FOUFFXNXROVG5GUGROZ3cwRk0rZHFnSGc4MjZKOHNpVmkzdW5RNFRsc2k5Z2I3RzQ1bVdMbmQvRHorL1JuYThSTEVlNTltcXByN1Nob3F0VndTSXZmbUdkVjJ2OHlwcWpVN3Y1ajZuclAxMTFwZ3NpTHhOamUxV0hCOGJNanBXSjgxZHRTMnBhbndUZ3duTjIzM1dxdzRiREpTWkdsQkpUU0RsSGVNWVpYWnRPOWZ1bFdNL2UwRE4zWnpORmJ6Zi9kczJ1WElMS2d4ZGt3TjlXRVRadTdsczVya3d3Ukt3eVZ1VjJGTTJlYWxmR1ZhaDNMVTByNTF0V2ZNNVdGSENKL1dNWVlVamhXeStjRW84ZXlXQk1YRXpXQ1ZMa3liWWpqMXZyVkpkbk9SWGV4c3JnVURMcWJhaDJvaUQ4NTdFU0dMYXZ0a1RMSlJmbU5XRThlYUcyOTBXbTVJc1hpNVRoN1d3bE84YzNMU24zZXVpN1dSNUg4eERZMTJMQ2JDeUV4Vis2eDRmM3RRd1VER3IzaHRsT2ZBRzYzMTh4a3J6bXNqYnF3WXRFVlNXOHZSOUtMZWhaN29KM29rYTVqV0xWbjlwV3Fjcm1EMlZ2R09hSjhlbitLaU9kVWJrUFhKUWZXNXhaYjdXMlJlRHRPSlRhME5iTnp3dFJKUEFaOVJ0cVNheDBxR2xMazkyZ3YxRFg1T1VRKyszWTZ1MFVLM1BQeURSYzhlSWxta1NjRVpwMHdTMnc2d2NLMytLcW5KMzR5ZU5hYnZGNS9SeURSMGo3OEh3ODVIbXpHVk9TMFdJZzlKQWVsZ080OXdOa3RJN2hBMFc5a3dKdWo5Q0VsMkdhQkw1cWtKWEptZ3NzUzZhZ05Wdjdvb0dpQWd4YWwrM3F3VFhmVGlsckNtbFZsbzhZMExNMkQvQU5oZnVpU0pyTlhWc0J4MFd0UGJrVmt2TmFIbGt3Z0ExY09RdEl5eUVVZzBPSEhsemQ5MVFXM3JsM1cwL3MzZHduZllLMGdDT1d6d1B0SUNIVm5OWDdlQmdSblJjR1FTcmppdWMxd253cVdVbDE2dlJaOVZoWFNlTUlTMGtmSkM3MjhrUGsvcjJERWRUUEk5MEdLQUptdHVSZzBwakhhRTVTL2xteTdIUUNZM2dCcWtiYmtwRGl0N0tNUHA5TGtRUVNaL1A1SXFEd1JDZVBSejdkMzYwT2dhRlRqc2VONS9ETzhtYTRsQ3hsNTFXY3BPOFRueWR1RmxtZmhmelZtdDZlY2g4TGVtOG4rZ1FLS0toZ3cyRVgrcC9EZXNpOUdBUlZnSzlrVGxPTFRrUUlhclhNYkpadGFFRDA2YjViZEk0YUorRVRYK0FpUTVKZHR1Y1ExWGFEenZERnExc0xhSmMzdHhLUTN0UUxleVVxeUtXVlEzRi9xMGRGajhZRDhrNnlkZFZGYTUrVnMrRFNHNnVDL25OOWNlbnVFTnFsakovNGNvdC9uN2YrcGlZZVlVcG8rRlpPbEZHeFJ2VjFXeTRWRVBHS0xKcFg3QUIzdUN0TEYyYm1XYUlCaU5GNmhCOTIzRy9UMm11ZHRJRTFmejY2VFV3M0FiclFyYWx3RUZoTzNaTExaSkd6V3p3endMakRzK3o4b1prODRnT3dvSFVBSEFnTHc4WGgyYUZNcjY2anM1U294a3RKWUJlVHJSalg1em5Ca2RtSTlNKy8xaHJjWWpZdGRacmdiclZUUjZjMDZvM211YUNrTlpjanJmUHNYbGlwYWpOTHdhdWZMNUVWU0tFQUhnem83RU14WUpXMC9vaUp4dU50a28wV21VL080NE5kVVd6SXVzTmtkWmZqZGZTVm8yeDhPREhINkx6VEh1ejJwd09UL09jQkVqSjFSVWpSOGI4NzVOSUVCQnVtM0J0dDZ6RW9kYjFoTWRvTWhyR0dxWFU0MkIwbTcza3lMdVJvYTU4UnhuR2lLeG1JSHd0Z05TdXZrQXF1dlIwS05Kd3YzNFllNFk5K3B2VzM1RTB0c0ZGMWd1dWpUTFUzNWZwVThEd2xBZlBuRzdIMDN6VzhYMGRKbm12Snp5WTQ1eDhsaEQ2ZzJKQVRFUjVteC9yRXQzbU56cTNPa2FVd0p2SWZHdStmcTVYZkJPSGphZnZRRDZJb3doaGI5blFheFQ2SkRmU2I4Vmt4cm1WVm5xdTVyWEk1UnE3Ukh5TUpSaU5Kbk9IdDhrbXZiZ2d6WWpnblRuNGR5ZXhjU3pPM3ZReURvSjlsV0lqdUlzUktSOGZiQUFYbXp2c2x2TXViYm92VGFtYzdLMmJSVWYySDB5UmpMdEpxZVR1eUFqZThZUWNKSkExZGNkdHp1VkNlMC9FcmhZTkl3dTBZT3pFdGViK1NsTUtPVVFzRTl1dVp1dnVRWFdiWHBYbENidXZKQVJYUHlBbXpGR2hJK3VPR01CSDdEUE8wb0RVdzFNNzhBTjNoSjZFQitxbzBZUmhJNThiQlhDSVVMSW15Z2hXVnNheXNJU1FCNTZocUIySElwWHpPek85RWxGc2R4dUJPWDBpUGhTeE5QOWVWaHlTU0lwMkV6WGthYlI3ZmZReGtlaVRENEwwRllDR0dpTnpNRGRJalhoaGR6WFB6ZVE2c0hVd0R5Z2RVc3d4K3VtS2lxNDlvNVFyeTRFSlBjaHZYMzJtSjFFWlB2THJKNnBjYVZ1bUMzcFFxWHpqMmV2WDRvcFU3dk51MmErT1YrZXJ4dklqMlVibDZBM25Sc2t4a1d3OWZOQWVqVndNSUU1UkhFU281eHIxeE5LczdjY044TnczMU1mLzl0UkFLTkRMSEQ3Y0w2NW1tZXBhb2hrblBlTFluY2IrWkdBVnMzUW1lczV5Qkd2NHhiSlI3UnVXaktJV3dRNmxmQ3RGdEhBZTBXQ29vMURDK1NCNkpzZG5wRW1QZ0IyZ1NRNkpVaThWRm9JQmhWM2toQ2hmMDJZeGo5SnZlZy9US3FUd2czZUhQTzVzVmtXRFl2R0NTYUJ1cUk3bmFBOW9OQjg3Mk5nb3VJUWJrRXJIYjg4SjJkTmpTNkpwRHJUZlY3cmg4V3J4a3I4Y0IzWmgxMktuTW1LcUhvMXBPZW5odEY0NmF6RTlMYTg3dWNSdjNKUjJ5eVE3bUlObGZkbkdqblVKZXQvRjF1amUrcU82U3c2dllTcDZEUnNpR2dKNUJjeFhWbzNSNUxWK1lWMXV1emh2aVhEK2FiMVpHTkR4MlB4NG5yYW1hY2J0cUhLb2N5djMwZXpCMjhHcmtqWGUwK3hBa0J3YVRNekxkWW1GTzlPL2cyR0llSEFTVk5yVHo0VXhySThUeEtqalZKcXJ0MVhyZEk3RE0rM0RlK0NRMWZXNS9WM1RYSGRmeG9yRXdNUFRieHJzUmFZcG5sS0hNeHhaSHMrSmNmTWI3WEdwUEJXbUxmdUNRL2ZTemV2MlBSYXVDejZBbGwvQjRFQ0V2dEZvOUJyR0VkWnBuSU9JK0xnZ241QmJxT3dTYmppLzFocUJhMzRuOWZKOUFEM1U4aWJ1YW1HR2QzVzFMdVJsTm9oem5Ma3VpUGVEMWozQ0REcDVUVk5HQStGaGRYb2FZRXlNVDBxVHgyUm53cHM4SXRCOWZISjN5YTVGZWdDbGZQMHJSbGw5ZDdDWjMzM2ovaGczRzJNdGF2TTFmQlVOQnJOMVRlRldGMG9jN2l3Q29RdkttZVNwaEJSZUh0eXcweWl3OTBuNnhwZ0NZeWttb05LR2htaDBJVlpZOEtCa08wVzFwcVlJaTlNaVRWRzk0SjJqaCtjdk9TMFJzZVFLNWdVRDhFQXFQMkNhcjlJalZodFYzc3dQVk56VEIzdndZQ2tpV0JVN3I3M040MkJBbjZOMUc5Zmw5TlgvRDVBK0ozazlSNk5VVy9OeWJxVHJWc3p3NXpmT0Q4Tm8xb3RZdlgyU2dZTlgxMERjNVlvUHVKTFVqNjZkVHRjT2wvUEViWVpQaHJpMytPKy9FOStOOWpiZWFRck9RNWdKMTd4MENKMm1Eb1lZb05CbFROV05IdXp4YS9EdWZqcnd2ckcwb2crWVliRkNiMFRCRC8zbzdpdHpON2R6WEdvZHo3ZkozNnhzRE9reU9TQTQ0TjhySFB2LytUTWFERnBKbjQzNE44NU0vbWNxK0NLb2lnaHl3ZGprbFZ6Uzk4SGc2UUdCR1Yra1NhYTFLMGx5UjVUa0RjRE4vWUpUcFIvemZielNrazVldkY3UnVkRllLSnFtSWhFaVJFaXIwN0ZFQk5hejRFS3o3ODBCTjNxSzlyT2IrNFlvMTh6NzU4bmNrZ1M2TytQZ0xIWmsrdlhlcjdJYnU4QnF0cmJzMWYzM214NTJIZXlaSngzb2lHODBYemRiQTVTLytFSjdMeEVmczJkUHo0WWdhc2Vod1JSYUxLTFRrWWdRSlhrUFJiQWgxanFYbVNyZHp2Z21mRSsyVFovZm00anR5K2RqKy9mRzgwaVIyNm4vNjUxaitiT2RFZVYzZVpMNzRRVWlzSWJScjNTSkY1VG9uV3hqZmlJR2VkM3hhY3VYWUkvWEM5WHRoWUFZa0RVWTN0MUVnVE5PUmtnRThRNFVEU2dVUWNPSEVBdWdQSjZGOXZVWlFKNG5MZFFyLys5VitHZ2E0dnNReENETlg3NTk1eU5YcE0vZld4QW5wOXcrQzZqTkluMjVVNW9zcVFHckdIWHBCTzROamJjdTZ5NWZjdkpvZHJId25wV2FGWFdEVkdGcVhmM1pXdU56N0Y5ZXZ0cnlqRzVoYVRvSFA3WHZ4Yld6YTJpRmdObFhwdUtjSHlLNnRITDVKa2l4UysxanV1bnV3bHFEMzcvVzBGM1FUY2RJTFVXMEdOZzNGYzJrcDZOS2k1bEFUbWVtb0FrSVQ1clp4WHozZmRtcCtRTm1HNlJGeHgzRzZ5ZVhpb3Baa1Z6ZmxkWXJUZlRaenhZOWdvMitnWVhtWUloUzNja3Q2RUVQZXpZMjNaSGhqRzB3UHVIdDF6c3o3WXNkR2VQdVpZbGVNTUlzS2EwbWJURnJ1bE1HeTNzbUplUkNzcGY4UHV6UTRISVJxZGFJWExoRTg2N1lnWUJkbnRYa2MzNmJVL1A0dy9rcFpUOFU5RjBNMEIwaG9Gbm9OYTB1Y1d3eEZpNTBzN1QxNXdOMHdxVFpmQjdyTFY4eW1oYnFiY09GL2phZGF2VWZOMnNoWjBHUTFwYjRONDJrZEduMGNWVEQ5MS9XTXljbjVlcUlSVC8xK2RGa2IwdlQxZ09KdVZ2ckNJZjIyVXVLcHA5MzZTRlcwcWxzcUZ1bUpQV09UQ3p3VTc0WHNLQStXQnhucUROVmtBZkFxSTNqV3FzaHluOUhNYTk5U3ZaQm1Hdy9LY0IxZWpReW9QRlk1c3UvT0VQRDcwVHlXb1EvaWZWUjNsOHFUU0F1dlRVWDRGNFNlWTBhTkZ6UUFpVlFGZzNaRDdHLzMwRUtOL3BjRXNBQlNqQlhZOWRpNzRybFhwSmM0ZFY0OGphSUJyQXk0d3pMd0lEVlp1KzNXZ2ZzdTBOcE9jWXd3M3ZYSFpRY3JSQzNOdFFzTFBHbUVNWDFBOHNIMzBZWnVnQll1anhDTHc3ZSs1TkRUZGRROGViR0IrWWc1YVgwS3Bxd0l1cFNMcjN5RDVKbkZ4VHZmYW5wNk9HMCsxK2RtRjM2SWdHc3c5QkJjUDUzbmZIUDdObjNRWlhwc3hNK0tweERObjErQXFXQjRrZGpiaWFZdnZQcVA3V1E0Sy9EakRVWjcxMy9EYkY3QkdLU0tKMDhYK0wxVFJSeXgrVlc3Mm9PdkExM0FRdXJYdTA0OXQzTjlGS1lFNFczYzZFOTZhMDF5WWR2aTc3K0RCUlh3OW1SQy83TFBHSmxrQSs3UjcyMjFjR1FmY1dveTZVS2NyZnhBdkFmQnlENmNOYWN0ZXFIQ2FlK3BDbG1MR3RHQmdtQ1NQN2pCSFIxdGQwWDk0dTM2MWJEK1lsMmdZczk5dGtvQTF1Yzg2NFBmQlRpY2FwcWV2aHFYQmZlMmJQbGkrUDFIak1aRmF1NEJHdVZNR2wyNklhS0RsSjR6NjlYUjlHeHhYSHM1MFdiTGJpOEExOFJUZUVyaDUxV1paVDFoVFRGZ3B4OFdqN1NQaXFUNnNrMk9LSDg1cjRDNjRVc0RLenFuQkdYZlVVb2FGODk2blVKbmtTdittSHZSSWlLTUJoVVFPbnp6R3ZIMHE5K2FzbVk5YXBxWnF3V2M4YUdET01FTWxnZVFxQlNoMFVhUUQyMkk3c2VmVGFya0ZnTE5uT3BBMGVIK3F3ZDZnL29kWCtWeVd3MEIxYTFtL3lMUGM1VlFaOXoxWkpPOExYYjRZb3JiZDEvV0xtZTdVRUI3QnIxMkZjRmcvWlZvMjZYSXNBOUp0aUJLZGF6bG94RlAwUVF3T0pwUVVvRWpndzkzVnNRM3B0MHJDS05vaDZuSnlYVkdjT3d3Zk1hZGNYUStVUnZILzUzNSswMGVZNEVnNS9aTCt3ZlV5MXBHSlVrblpPam5iakVtSEVZaHV3WTBwK3htNHhaTTFLMDJ3MURXY2M4YnNpbk10bWlaV055dUNCWi90bmhIWWp6L2daT3FMdXNnd0J6UVZkdFBGUVhlWUR2SGxSeGN3dHNSMkkxalI5U0tpZHZPYjJwazdEMC9raUt1T1h4M3BtRHc1RkFIUmJtWFZsWithbFN4ZSs0SFN1ZGl4ZmEvUEpZWTZFZW1vMGt0SnI2OGg1MlljR0t2c0g5RDd4OUZWN0w5Uzd3ZEt3S0J1WG1CVzdmYk10WjBCSVJ6RmxQY2IxbVk4bnRwc1gyWWdBdXMwY00wcXhSTFBXdDExS3h2ZmNqcXJnQzlhckUzbThKN2ZlSlJjUVZKQWVzODRyNnUvbWdiVW5xZHovZzBDMnVKb1Y3a2s5L0tXQ1ZMb3dXNU9SUzdsdloyai82cUNPa2V3K2Y1Mkkycnlxang0K3EyNS8vMXlUOXREby9teStTbFpsejlscjhPZGRqdUNIR2xkckRCbkVHRXduSlhCWG1kSjdYcStKS3RCUG1QUmVwZXdtVzk0Uk9HVkVZOUs0OCtyOGlFaEF6blR4Z1ZHZEU5T0swRVhuU0NGZHh2RjhhNEtUQzFOeThacTI3N0JOTGlGY0NITUQ1SGVoWXRjaEQraFo3OEZXQm9CQU4ra2hMeW15eUFJR1djbGE3TFc4MWxnaWNDUWR0ZGlhOE1QQUhka0h5SHFHM3BJdWh1ZXZNL2JpeGdQeXNaZTRSd3I0czRMY3ZIM1c1QkU4Z1YvNncxK1J3ZWpNekNSK0p2OC9HOUVXOFF6K1F3ZUl4WktDakErblg0YzZ0bjlZYWZVTmZsOFUrYzFXTWR3dlhBOGRhNlozUlJ1RHNYYWdBVnZUMFp4OVE2cGsvcXNDS1NBejgxelh0ZnRGZkVETlR3L25NYmg2UVdSWlRZNEtuNS9PRlhmZlNBai83NmJCQWRpWW9SRnA3YzJNcndYQlRadDVwRDFzbTJHSVZjRWZ3dHAyMGFkZjJpWlVYSTN3RFdsQ0FWWkk1VkxmNjZtTXdHWUF4ekN2bGlHbys3dmlMMTlZajRJS3owN1pvc01QVy9QcWYwL3JJenArbVAvTzdKeHhIMEx6VFo4ekd0R3NPM0VJVDV4NlZUclhXK0w5bGdlOVVNTFA1WmJmQ3ZPWWxHbk9pZUJwRW5SU0J4TisvZUJOZjBqYnR3RUU2QmFvelZ4VjRxV09MUTcrNmlrZmRHK0JLd3V4Q3lJK3IyYitnMk5NdGtYN1I3Y2ZWREtXaS9nQ0VrRDFjMUt5OHNMWGh2Z2VPUHZoNHFKWjZFOEdyN05UYkVGUGMydkRzVzJXOG1sanRGcDZjQ1pXb3NyeVJISzNROUR2Ujg4bTI5TmtWblh1cmlRSU9pU3NhRHArdjIxTTRmbFVjTHpZZXZCQUM5citNVnFOdm9EUkNnVkZqY3lnTlhLN0N4WUZqYi9sbzA3VnZaUXRsMG16bi9PdHYrZEoxMWR0cndIazFVQTZ0ZEN3ZXMzazBuVTJMU3hzeDdOTVNQWmV0c21hTXVrSkhvUFhkQ1I5SDZvem94R21yMldZeUpaTE9aRkFkZ3cyazlCQ3ozWDY5M09MeUdUc3kzcStlZUpKc2U5MnlhSWc2NzEvZjhlZ240UEFNeFFLMlh3MEx2ZmRKOUI3YytRZFNUUFN2bENyWjRMaC8yaHFtN3RiYVhEYnpBbGh1ZFNFbzdBZXVXbXFwenkxWEtWMXkxVkJycEtSTHFWUzVsWnFlTjlxOUJzVG1OVW9RTVdSTklJR0dJMFhreXNFU2NnVlpvN0hoWXJBMGFBbFNvd284RlZmdXkrWEZtb3JoT0VFb244dTV4c0Y1WUl3NWNpb25vTUlGaDIxWFIwc0hpdXVtRHRKZncrbm41aFNWRldMK1Y5UlUzRll5SUZKdlNHdzJwTlV5aWdYOEt1Y0RtamFPTzNCdm4wNlhzUWhiZk9hVWRQYm51U0RXbWpJa2s1MlRZVjFhTkkzaGxraFdyS0VaUGl3REdyeVBjUGI3L0l4bHo3YXBIa1RoL1lXdmZtc3NGNlM0a2hidkQzcUprUVVXWEJYbmZpQ1VVa2lKalFKbDhMWHRFOHFkSTZqRmJkRjJKN211Mjd5WGw0M3o5N0M5ZzFTTjJXd0VvK0REa09iUGVscEVIWGtkMG0zRE5Ja3VqVk5LTkY5VEllemYxcXhwcGRDSW1oZjhOd25hcnY0UC9WT01NLzN3UWN3NjRESUp1M0JuanhEd0lEVWpOM25hTW1vamV6bTZQRERjRngrT2w4TzVRdXcxOEdRbTRDOGE1aC9SU3o2UGNGVzZnQlRGMlRHVnhWUXFPbkdaSWFLR1l5YWRPQlV3V2h3cEZNNFkxTXBZQWdIWHEvQnRlTythS2JjR0lVV2dNS0t5TlNSNk5oOXV1Z1lzN0NDcUhDejB3cWdwM1lmWWJIbkVsRVpoZ1dmSlA1NDNmZCtPUzQxSU1xc3pHak02SkdtVXZ2Zzl0SHlFZ3ZDSVpUSzNXRUhBUkNMbWNpZGlSOFRCM2lRQnF6MUJxUnFXSi9EQVJFOFMxSi9VNEl4TDBFV0JnYjZJK1FMeDV4ZVB4cmRWNVNmclorRjJHRWpzVVpYVk5IZ2FETWROV2tzUU5aL0hBS2NOR21VMG52RUVCSSt6T21FMWl4eFhQbTRtMWJCSkhUK2tWSGt3bzhwWEVBa2FzWndUV0MyQUZmUlZZdzAvVVk0dExxMVlxTFNqWnl1YVI2ajV3SmI0QW0reVQzR1dWWHVjM1lnTlU4M2diYmxjOEpLc2ZValEwTDVqM3BVRmNYSUdjb0FWMEM3dytiNXFSaUpXeEJFcmtuOFp1WGV5V0FvV2ZlbWxBeGRwdkxkdy9yaHFYYnZhc0VYWThzQzFoZnlLY3BCOGI3bGJ5UDFYQWU0V3NjTHp4VU5iZDNYMjFOWTNQRUZ6d1h1THR0NVJmNWlLUFNXUUlqc0l2ci9Wcllidy9PQzdDTDh2TS9CVEhIWjU1WWFKTXBET3Q3UnRhdHBaT2R3Mm4xNURoK3RMalM4QWZ1WGpQUnpldWI5UUJ6VnZkcllKaFFFVUgybWt2MHk0OThCR3duZnZpanRvRmJVM1NkcTJYL2QwUzN0THl6U0w5MU56ODJPZ0JQZ3NhdSt5Z1QrdE9BZzUxSENmWGRHZnluR3FFUlR2YThBMnFQTDdQYTJOM0xzL25aZEFLOTl5NkNrMjU2NURMVzNVeExKUlkrMnQ5L3h1dnJQWjB0cFNXYjZ0MHJmVjByU1AwOUhXdXE2MWRieTFUUXVpRXJ4TXBKZmNwcmRERlRVUFZiTkZOenRZYWoxbCtkVzhuNXBiWHVRMHExdWFENE1ub0ZDaTM5MG51aGpmOXlEWXZ4eXlJM1NhRjEwWHgwcmxKaXc2M2Eza1U2cDFLMmR3a3Z5eFd4eXIxYzhUT2tGT1hXS0txajNiaXZJRVgySEdiYnBBWXVYRGpxcEQxc0UrbjFadG5jUkpybW1nY25pVkRPdXd2UFdTQ3V5d25uOWFZN1V2MDFETjZ4RFR0MXFsUTllN2hVdGJoTUtXcGNKRUJTRmI5ZVVZWEFKSDVucTBrdnNoRG0xRnJXVzM4bzdCMjlCbHo4NTlXeVBQQTErYmp3YXArUHhraHRkMUlLSXc5ZnpseWs3VjJrNU1ubXVWWHNtdHRVTnpySDN4dHRZSDZKcWpPS0syUStlbXYxNzVQcVEzOFQrOW02Uzd5ZlU4cThEK0J4aFRSZUhDdmpUbldrQU05MUpZMlFrYjVBR1BRcVdKcUE3Nm5sdyt3L2U5T1lCaXBpNGQya3RJZU9ST3YxQkZjVythZ0NoQTNlc2xFWFVHYmNJR0FSVGM0bmhUMTFCWjY2WFh6VEZMRk55WklUNU1MVytyeUJtb2RXMlZyRVhEUk1acVJELzJxeU1MNzJYZ1FwR0VMZk5vejcwZ3ZvN0JrQnp4V3A2ZWhBVmFjbnBldFhrTjZ4SkdkZ2lKeWhwSmg3YUNNSWdETWNwUlQ4cWlhTHZMN0dhTlUrWm40dWlscmdhM1lvTStpS3NISHFqOUd1NG5ncnBGSG9XcnZsRlFQc1BjcHhsanFPTHN2ZG1tamJyZW1zSHJhOSt1U3NHRCtvVnVwYnNPYjdGeFpZVTZzcXhSYmR4MG5XT3hra2tpdXM0dm53L0swV0NKUjV1STc1WFhUMzE0QnMrOURUbkJ4YnlSbU5HNXd3NUJnV1BVSmhuWnNsMldXM041KzNVcmRpVTBMaXF4SUM5ZkpodWZObCtXVEpxdTBMY1Nra3hYNHpGQWU1UldSTFZjUGo1VE0xTkZSdFA1YmJma2MvWWJOTlVJaUxucFRCTFRzcnNwZ0NNWngybkZha012SnVjb2lqd2FVTWFLZUw3UVF1ZWo2S08yM0pGbFFJdFV1all6Ty9TWXVFMDdmYnZJUk5HOE1uY3BvNWQzbDVsSzBqSWptZHU0OVk5Ylg2bzI2WWxaYzdQZkhmOTB2TWRtSGx3WlFUeUhETlgxR2w1azFqN2NQNC81TU5FcDQwUUp6VE0zR0xpdjBKcmZCUjR1QWZmMHFCQk1XMEtVNFZtcTJPTXFjTE1kVERldmFQaUNtYlk0d1l5VkwxZ1pOblZSc2o0SExwYUF1ZWFucTRMY0NwbFhwUktpa3ltVTZZYWM0ZXUrRUlvKzEvTjUrczlGd2k5MFFQMk5yZ0NLR3BURExES1dMYVJXNmtiUGFtTjNFWm1LUklRUXlkVWViRVMwK1hHcWRxaGJnTVNtNHVIOWhiN3dBYXFPSVYyQzRLUFV2bUlFTDFBUGZBMzRLNWxtaXhWMzZHODBLTHNiVW8xQ251ckN5QlJGN2tjRlMrOUVzWVgvelFmZjhCL2JmZFBreXpzcE1JNHFqcG5zWHJyQW83LzFxZGZuUzBUTTNBYVMyVVR2UjhlTFZ1TGVqdXdMbEhkYnduVVdYWkZWbW94aG5hTExqakNiTmZpWjJRSkpMZ2lLMjhxT3VreWx5eFp5ZXVKUDNDL3BJYlE2VEYydWhYZ2FjS1pXRmJ2Z3ozR3Z3aDVnYUdkdElDSFpkQVB3UGFDekl1amFlMWZNZE9GOTJkNFF3V0h2T1gyTEtESmxqMmk2Tmpmb2hxc2doRnV1RzloS3JhWE4wb2hWMEVPa0dhTExMek9NdnVoWEU4dlU1ZGJvY3Nab0RNbE1JVE55K1RXaTBKS0lMNURVKzAvcGQwZjBRNG02Q1hXcDhNSFFJK1Y5bmhuY3dTREtNY29RL2NoelY3OWJLYysvdnZnNS9TRndPNzkwN1BENXUvZFV5dmV2OUQyalgwWlpkQWVTUmkvdmY2cTgzV096SnhpWVdoaktIOXA2RG1LVWR0dzM1ZjRTeHF0Ykg3b2pTY1dIRnJuVytEN2xZbTFOaytIbWF5cndkUFJDdmZZbThNc2xqeG9mRWMyTXVEWDMydy9NTStpbHV2enJEWndUY2VsdHVwOXVodDBHbDQ4ZCtRbkhXMDVVc2p6WGEvbm4yYk5zODNUOUVIWm91OG50NDhzRk9QczE3ODkzQ2JYYjJzTkxXVEdOanBVNEFNT1RyTGhXeTQ1UFhxdVZScXhPVlFUV1NHTldoeXI4eUI1NDhvSldZQVBaWGNEaHpjS085Mys4QitPNVI4eEtxTjVjbW95a0ZDbzFyaFlGWUsyb2hHZXpSdFFWakc2cDhqbkFPbFVwaitQcWJjUy9ubElDTldRNEM3QkVjUDFPYjkvWW5jNnRhNEkzTG5KSVZrYjdObUhkV0tqMndyOVp6S1RpNzVzWEsxTkRlNXhkWTRvcHo4ckUvUWVuSC9jc1dYWXFGZG1iY1FqWDJBZml0cEJFR3BHN2ZQSXV2ZkNyS3hWYXY5WVFZbVdramc0M3FBTFRmSmR0ektvVXhueEUvM2ZST20vUmpLaTd1ekFuT2FnZ1NGblhucGJySUhDMkxOZVdvdkZsMnBacXJnbi81S0xrc2pFaUlNTmkvSWhFby9SRlpaZy9heFlES1MvWUpVenJVN3RnaDl1RG03anRwQ0ZJV2I4OTJ4MkkyeXF5TVNyZWJyOUlxMlBXc0oyTVhyd3JOU0loM1FBNUEyL1pVSUswMWZid3ZtWUVGOHFHcXBCaUxHWHFYUzhldXdaaUxJN1Y5cWFQTGhqMjBVSlA5MnFWRjZWNHZVUWRZczM4bDlCVmdTbmNZT0c3WlZrdGl0cmZmdnRCMmI3UUorS0dtbk5ldkpValdldmhpQkN2VWlHTlBkeUdlQVhMdDBKNGZwQ2MyR2tGOTlYVFVrRzRWL3RxcEtYSDllbXBCeFZudjJ1RFhYcGZFOG1zbW1OV2xPTVkyRit3eVZETUdTZENZZVBtWW02VG9kT3lDem5UNW5ESU5GSFFJaVg0WW5VNm9WM3E5VWd3bmN5bE9HYVNabytYU2FRbVZqdXpCazNHYUtRWFJ4Wnh1ZzFKdnMvMHcyRDRmMXZ4eVVRZUdCWjV2VElEKzRkYzhzZDRUKzNRdmxmQVhCK2FJNytVemM3ekZBK0xPWnhmNUtDOFFtMXZmOHhJQWRCb1V6bDFOS1ArUkhkRjRmaXA1bGNhbW5ZM2QxUzF2MWIvdFdQSVlpOFJoTDJrNVE1bmFVR2c4VG9hMTJpVG1GbWJVQTBVVFdoMENUT21TK3BpZ0hjbHBEaHg4R2FvdlNXakxYUXIwVklFb2gvejFLVVR0bjNYZU9nNzlEQys1Q1NVNlJyZFBlbVRYLzFzaWR2NkQ1Z1ZhVlpzSlRQblV6c2xWNnZGVXZYVkV1blZISWxFYzdWWFpwTkxiYkt2TWJCc2I2L2tzMytMb2VYVFY5SVFzZ01OOWwwYjJnSlpuUE5wT003dXZaNHVXYllkNTlSVE9UdzNKR1hwbnZxcWhiWCtHMERLVkN0Z0VsMVVMUlBmM2VyZ2tOOVBGNjRFRUhXWlJ0M0UyNjIxZlBTSGFqK3hTTDJIaGx6d2RUMnpxdmgvd1pkc0NFak5vNG91SUxkN0ljZTFiUkh3ZnBWV0JaaGpmWmlaVEF0Rk5WTUxnNmdXTWhocW1XaEswUjNFcG9LdHh5dVd6UzFxNW1ycE93cThlVnkzQy9GUmVSTUlIS2VaS0VJK2VZaXVvbWwyQ1BvTUZqWDZxOEJsdjBjRTNWdW9RazhLNXllTXBkTkhJSWtzM3hoTENTWGxmRThxdjN4K2p3OVFZcGhTNHpMSE5mM3p0ckVtTUowNEcwMTJVc1BYNSt0cXVrWGJWMmhLYlVrUlRJNmMrRHhEZmxNaHhvc0NJYy96Z0poSEZVdGRqeWx2V0NrcHVMNDJkV0RmcE9sdWFxbFoxaE5CdE5zTGZCR1JxVUptSVN2OVo0RkVla3Znald0c2JHcjhRZTUySTdpOUpmZ1JYZ09RdlY3YkpOYXQrT3R0WS9Rd3lrdU53SDRqQzFiNVpVdlpwNyt1cTJGa3VyczRtZ09oZHJXL2Q5amdUUTY3cGdLRHI4aG0vazdvOW83czUwNnkyQ2VlWTNQdU84Rm1uYnp2YnRZUExhMy9XL3JaRkpaN0dnSU0zNjdYd1BZamdNcHIvRU1nNFhvRG01R3VsMWdIczcvQ0lTYWIzenVnazA0TWFBMElWRVV2cm0zdXBXRFI4RGNLaGx0UU1GeU5naUVUSS9nbmU2MmtUZDZjMmRiazVXSERyeDdaSklzcWNLWXZTdUpSbElhaW9CdEZ3VHNvQ3Y2VW9nVEFkY2dKTGNnSnp5SW5QSUtjOEtHVW9pOTB3ZlNhUnV3QW9vK29xYnFSMnVjUnBnNC9jajNCVEpqOUtlWng0R2ZqbW1BWDVUbVdZQ2xUTU55bXp3UWx4V21EUjlWKy9pT2NKUFpmbUI2SGwrQUdqWTBvNHRSdDF2Y0h1NGJGYW4yeXorQWJSak5iOG8xU1RqZEdHcU5PeFg0U0lUVnB5Q1BYSTh5aGlUM0JBaVllM3pJVitLaGs1aVJDUG1qVCszU2xlcCt1QnZuZzVER0xRZkVYQThFQTluYnJuWG9Bc1h3eGU3K3VJdEFJZm8zNjhVZzNRbUJxK3dqb2JmUXgrZ1I5aWo1RG42TXZ3SmZnUGVrclV2d2FxU0srVmQ3RDcrRDN6QThlMnZoMkl6RDl0ZW54VkQ2SkM0NTEyeHQ4bGo1SGZUOVBmeHArb3M0SHRBVmR3WXpLbktxK1FzenhleG8zckd3TGNyZDJWZFFRTjFtWHgxUGN3QzF1NHNQYnpCTkVMdjJMYUxEZFV0UDJvYlF4SzhhekhvTzRXM2lEM1Q0OWZXZVUyZWZSM2Y3L3lMRllabURRWHZjOUs5bGFnVVVBTWVMZWZ4YXNBakNIZlZnQVpCNklkWXM1MFh1MTNicUxGOWIyNEk5WkQyc0RiaTE0L3o4Z3kxaXhsdGpndk9VQjVMb0FnQlhZemFsSmdzYU1yUjF0WFlkUlJsR0g5UlFkc0UrNnhtUmc4eUllbzhveFJ1TVFCU29QdU1PTVlNTGRzNHhHQ0orSDJTTWk1YWJ1cy93Q1ZZNXROQTBYbTB5OXhHTTBKdEFPcTFwZ0swQmRLQWY3REtHdjBNZm95OUYvWkdsYWxOdmx3bmxDY2hndFJMOWxXNkFyNEtOK29TZGdJeFhwSUp5RjI3Z08yTy9OQWxoMVZYZU5PeVBkOS8zU0lLQS9WQ2szOVk0RVBZaXVIZU1CSEpwV2ttM1FlSkVMUEVZTDBXOWdnWkthOXpHSHp2OGJJN0RIZS80WWJoZmUyRTlpb085Sk0zMjNidWJzU2tRdmlNdytuM1FOSlVlOHRPdHJ6eTV2MkVhNjdBMnhWWlRzNHU4eTFqam51NTNOQzNrRWJpRS9aanNpdWxPajIwUTY4VTZZRWltdHhrdXVDM3ZMOFlaTG8yc0ZFYWRReHV2RzlsRTBldDYrbGsrN01RSG9OMFBZbHNhWGIrdmFOM3RyMXk0MmRWbWtmU2JWNXhpM0JiVjF1MTFNOXdEMGxPekxYbllDUjkwdDR3dCtyaXVvS0ExOXl1d0QycExBSndRN1ozeStjSW5pOGtnNjE4blVTQVQyTzZWSy8zV0JJYTFoVDJldzdFb0ZTcmFNSWorVFdFMCs5NHJhSEFKd0VUOStaN3BsWEVqcTN4REgzUURnNUlHTys1TDhMMitKLytpd3p4UE14Z0VpQmdBSS9peVpvSEFtTVAwL2VFNWs5eTZpTmUxazZ3N1d6NHVjcnFUcHh5WjNCZVVKdjJSeXAzWEZUUFlkeUw3Skl3UjRSa2p6TjdhelhpMkNJTUUwcFRYb2RaYzdJU2pkK3JMNEZIeEdFeTNBUkhVQXgxVi9MWnZpamw4d1dWMm0xZlNDZitzd2MwVzA2T3FhNW02U0t6eXRSbmhRVmFnTTZNY2hSZ2tKTVhZRThZaEI5dW1Lb29UcEdScU5rSzRmeDRPVyt1KzRDcmNHWXJnVFo1dm1HOVRVanRmbmlxWVpVV1Q2VWcwZUUzaGtpVUc1bkJwZ2pGMTREWGJvK0RRUmJmcFYxM3pNcGxJSkN1YytWTEp4R2dhenhGd1dJM1pMbmo2NVg1MDB4QjAzb1owTUw0YVNQNkd2UVhLYnVQTXJVcXZtYVFoM1VHWnJSVVpOaVlvOXRYVFJVN3hHbGRTeXBZNDViQXJMVUxNenRBYjY1aW1kSU9hUkRZcElVRjVCc0lvN0tRNi9VelN3dEkyU2VkUzFrN1FvSVhQU2MwR1RGNHV6V2h4THh2d054RjdoOXIxMkxMWVhJZDlGRDVzck8vUzMyYktlV3paUEpxWC9BTTNRaDFwdWZTdDc2amlRdllFbDFtTTBlTTdUTWt3QUEzdDlTRG03NlphWEtMWjU2NXZwTzBpeHZmUXlDSTJqNUJPaFYvazJQaVYzc1J0NEtxRmwvbUR1RG5VejZtN1Z2NzhSUGIzSTFqUE1YVkNxVllpZitFVEZIblczcmNoTWI1MWUxdXVWcHpMMGxnR1RJQVVNYVJVRmNLQURzSUVFMFFJWm1LZnlEVWxGWlljbzJhNi80M1FEQ2FYc2tjTUdPSzJzNUtGenFQeWk3c2pmSjlTOE5Wb2pqOG9YMU1qdXlmRUVRSUNQY1dpbUFXZ2pMQndrSnEwT0pqaWRIWnoyaVkzT1p6c0VrZG5yRU5seW5TTllZbDV5aERLWFlnOGoxYnFUQ0Foc25DN3k1S3RRS0p0WGxtSXloVXU4TkxMQkJaaXl1UU9VeURiSmRFVW15RFdackw5Q2VhYVpZaElIN1VTMHVKWG1lYlRJaWpaQmNyRjgwMjg2SnlldjdFeTF4RVFPcXNtVHc3bkt0ZEFVWmV6eVRlRGxreTNYQkdVWjQzTEtwaDdRSEs3eHFlQVFldnRvY1dSbEV0SmxBMDFSWk1wUktUVkZYZXJweFZ4RnhiNjhuRjdqc3E3R2JkVTIwQnVlSVZKT3dzZkZxNFRQQklVU09MaTRKTXJRVno5OWRaTWhhUEM0V1RzWXlnRW5acXM0bXJ3WUtkeGV1UGxZS1RMSnFEUy9WNG80aENvK0R2TlFiL1FJK3ZIb3JlZmdNVFBNbTRZNXUwNzVQNkpJWGhIL2UxL3lud0VBKSBmb3JtYXQoXFxcIndvZmYyXFxcIik7dW5pY29kZS1yYW5nZTp1KzAwPz8sdSswMTMxLHUrMDE1Mi0wMTUzLHUrMDJiYi0wMmJjLHUrMDJjNix1KzAyZGEsdSswMmRjLHUrMjAwMC0yMDZmLHUrMjA3NCx1KzIwYWMsdSsyMTIyLHUrMjE5MSx1KzIxOTMsdSsyMjEyLHUrMjIxNSx1K2ZlZmYsdStmZmZkfWJvZHksaHRtbHtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS40fWh0bWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLXBhcmFncmFwaCxwe2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjY7dGV4dC1hbGlnbjpqdXN0aWZ5fS5tb25zdGVyLWgxLGgxe2ZvbnQtc2l6ZTozcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjE1O21hcmdpbjo0cmVtIDAgMS41cmVtfS5tb25zdGVyLWgyLGgye2ZvbnQtc2l6ZToyLjVyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMjttYXJnaW46NHJlbSAwIDEuNXJlbX0ubW9uc3Rlci1oMyxoM3tmb250LXNpemU6MnJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4yNTttYXJnaW46NHJlbSAwIDEuMjVyZW19Lm1vbnN0ZXItaDQsaDR7Zm9udC1zaXplOjEuNXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4zO21hcmdpbjo0cmVtIDAgMS4yNXJlbX0ubW9uc3Rlci1oNSxoNXtmb250LXNpemU6MS40cmVtO2ZvbnQtd2VpZ2h0OmJvbGRlcjtsaW5lLWhlaWdodDoxLjM7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfS5tb25zdGVyLWg2LGg2e2ZvbnQtc2l6ZToxLjNyZW07Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjEuMzttYXJnaW46NHJlbSAwIDEuMjVyZW19cCtoMXttYXJnaW4tdG9wOjMuNzVyZW19cCtoMnttYXJnaW4tdG9wOjNyZW19cCtoM3ttYXJnaW4tdG9wOjIuMjVyZW19cCtoNHttYXJnaW4tdG9wOjEuNXJlbX1wK2g1e21hcmdpbi10b3A6Ljc1cmVtfWRpditoMSxkaXYraDIsZGl2K2gzLGRpditoNCxkaXYraDUsZGl2K2g2LHAraDZ7bWFyZ2luLXRvcDowfS5kZWNve2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMSkgMCx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTIpIDUwJSx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTMpIDEwMCUpOy13ZWJraXQtYmFja2dyb3VuZC1jbGlwOnRleHQ7YmFja2dyb3VuZC1jbGlwOnRleHQ7YmFja2dyb3VuZC1zaXplOmNvdmVyO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpO3RleHQtZmlsbC1jb2xvcjp0cmFuc3BhcmVudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjp0cmFuc3BhcmVudH06Oi1tb3otc2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9OjpzZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX1rYmR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czouMjVyZW07Ym9yZGVyLXJhZGl1czoxMHJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTtwYWRkaW5nOi4yNWVtIC42ZW07dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfWRldGFpbHN7bWFyZ2luLWJvdHRvbToxcmVtfXN1bW1hcnl7Y3Vyc29yOnBvaW50ZXI7Zm9udC1mZWF0dXJlLXNldHRpbmdzOlxcXCJ0bnVtXFxcIjtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjFlbTtwYWRkaW5nOi42cmVtIDFyZW19ZGV0YWlsc1tvcGVuXXtwYWRkaW5nOi42cmVtIDFyZW0gLjc1cmVtfWRldGFpbHNbb3Blbl0gc3VtbWFyeXttYXJnaW4tYm90dG9tOi41cmVtO3BhZGRpbmc6MH0ubW9uc3Rlci1uby11c2VyLXNlbGVjdHstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9QGtleWZyYW1lcyBkZXRhaWxzLXNob3d7MCV7b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0uNWVtKX19ZGV0YWlsc1tvcGVuXT46bm90KHN1bW1hcnkpe2FuaW1hdGlvbjpkZXRhaWxzLXNob3cgLjE1cyBlYXNlLWluLW91dH1kZXRhaWxzW29wZW5dPjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0ubW9ub3NwYWNle2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHktbW9ub3NwYWNlKX06aG9zdChtb25zdGVyLWJ1dHRvbil7ZGlzcGxheTpmbGV4fVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXthbGlnbi1pdGVtczpzdHJldGNoO2Rpc3BsYXk6ZmxleH1idXR0b257bWluLXdpZHRoOi1tb3otbWF4LWNvbnRlbnQ7bWluLXdpZHRoOm1heC1jb250ZW50O3dpZHRoOjEwMCV9IFxufWAsIDApO1xufSBjYXRjaCAoZSkge1xuICBhZGRBdHRyaWJ1dGVUb2tlbihkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoJ2h0bWwnKSwgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZSArIFwiXCIpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywgMjAyNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IFJpcHBsZVN0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IFJpcHBsZVN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRSaXBwbGVTdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIHJpcHBsZSB7IFxuc3Bhbi5tb25zdGVyLWZ4LXJpcHBsZXthbmltYXRpb246bW9uc3Rlci1meC1yaXBwbGUgLjZzIGxpbmVhcjtiYWNrZ3JvdW5kLWNvbG9yOmhzbGEoMCwwJSwxMDAlLC43KTtib3JkZXItcmFkaXVzOjUwJTtwb3NpdGlvbjphYnNvbHV0ZTt0cmFuc2Zvcm06c2NhbGUoMCl9QGtleWZyYW1lcyBtb25zdGVyLWZ4LXJpcHBsZXt0b3tvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKDQpfX0gXG59YCxcblx0XHQwLFxuXHQpO1xufSBjYXRjaCAoZSkge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpLFxuXHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0ZSArIFwiXCIsXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge1xuXHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRBVFRSSUJVVEVfUk9MRSxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBDdXN0b21Db250cm9sIH0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21jb250cm9sLm1qc1wiO1xuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdGF0dHJpYnV0ZU9ic2VydmVyU3ltYm9sLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50IH0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0JVVFRPTl9DTEFTUyB9IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IEJ1dHRvblN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L2J1dHRvbi5tanNcIjtcbmltcG9ydCB7IFJpcHBsZVN0eWxlU2hlZXQgfSBmcm9tIFwiLi4vc3R5bGVzaGVldC9yaXBwbGUubWpzXCI7XG5pbXBvcnQgeyBmaXJlQ3VzdG9tRXZlbnQgfSBmcm9tIFwiLi4vLi4vZG9tL2V2ZW50cy5tanNcIjtcblxuZXhwb3J0IHsgQnV0dG9uIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmV4cG9ydCBjb25zdCBidXR0b25FbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiYnV0dG9uRWxlbWVudFwiKTtcblxuLyoqXG4gKiBBIGJ1dHRvblxuICpcbiAqIEBmcmFnbWVudHMgL2ZyYWdtZW50cy9jb21wb25lbnRzL2Zvcm0vYnV0dG9uL1xuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2Zvcm0vYnV0dG9uLXNpbXBsZVxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvZm9ybS9idXR0b24td2l0aC1jbGljay1ldmVudFxuICpcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIGJlYXV0aWZ1bCBidXR0b24gdGhhdCBjYW4gbWFrZSB5b3VyIGxpZmUgZWFzaWVyIGFuZCBhbHNvIGxvb2tzIGdvb2QuXG4gKiBAZmlyZXMgbW9uc3Rlci1idXR0b24tY2xpY2tlZCB0aGlzIGV2ZW50IGlzIHRyaWdnZXJlZCB3aGVuIHRoZSBidXR0b24gaXMgY2xpY2tlZC4gSXQgY29udGFpbnMgdGhlIGZpZWxkIHtidXR0b259IHdpdGggdGhlIGJ1dHRvbiBpbnN0YW5jZS5cbiAqL1xuY2xhc3MgQnV0dG9uIGV4dGVuZHMgQ3VzdG9tQ29udHJvbCB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIDxjb2RlPmluc3RhbmNlb2Y8L2NvZGU+IG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2Zvcm0vYnV0dG9uQEBpbnN0YW5jZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtCdXR0b259XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXHRcdGluaXRDb250cm9sUmVmZXJlbmNlcy5jYWxsKHRoaXMpO1xuXHRcdGluaXRFdmVudEhhbmRsZXIuY2FsbCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgPGNvZGU+QnV0dG9uLmNsaWNrKCk8L2NvZGU+IG1ldGhvZCBzaW11bGF0ZXMgYSBjbGljayBvbiB0aGUgaW50ZXJuYWwgYnV0dG9uIGVsZW1lbnQuXG5cdCAqXG5cdCAqIEBzaW5jZSAzLjI3LjBcblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxFbGVtZW50L2NsaWNrfVxuXHQgKi9cblx0Y2xpY2soKSB7XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZGlzYWJsZWRcIikgPT09IHRydWUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdICYmXG5cdFx0XHRpc0Z1bmN0aW9uKHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uY2xpY2spXG5cdFx0KSB7XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmNsaWNrKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBCdXR0b24uZm9jdXMoKSBtZXRob2Qgc2V0cyBmb2N1cyBvbiB0aGUgaW50ZXJuYWwgYnV0dG9uIGVsZW1lbnQuXG5cdCAqXG5cdCAqIEBzaW5jZSAzLjI3LjBcblx0ICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxFbGVtZW50L2ZvY3VzfVxuXHQgKi9cblx0Zm9jdXMob3B0aW9ucykge1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImRpc2FibGVkXCIpID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXSAmJlxuXHRcdFx0aXNGdW5jdGlvbih0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmZvY3VzKVxuXHRcdCkge1xuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5mb2N1cyhvcHRpb25zKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhlIEJ1dHRvbi5ibHVyKCkgbWV0aG9kIHJlbW92ZXMgZm9jdXMgZnJvbSB0aGUgaW50ZXJuYWwgYnV0dG9uIGVsZW1lbnQuXG5cdCAqL1xuXHRibHVyKCkge1xuXHRcdGlmIChcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0gJiZcblx0XHRcdGlzRnVuY3Rpb24odGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5ibHVyKVxuXHRcdCkge1xuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5ibHVyKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGRldGVybWluZXMgd2hpY2ggYXR0cmlidXRlcyBhcmUgdG8gYmUgbW9uaXRvcmVkIGJ5IGBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKWAuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ1tdfVxuXHQgKi9cblx0c3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG5cdFx0Y29uc3QgYXR0cmlidXRlcyA9IHN1cGVyLm9ic2VydmVkQXR0cmlidXRlcztcblx0XHRhdHRyaWJ1dGVzLnB1c2goQVRUUklCVVRFX0JVVFRPTl9DTEFTUyk7XG5cdFx0cmV0dXJuIGF0dHJpYnV0ZXM7XG5cdH1cblxuXHQvKipcblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxFbGVtZW50L2F0dGFjaEludGVybmFsc31cblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdHN0YXRpYyBnZXQgZm9ybUFzc29jaWF0ZWQoKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGJ1dHRvbi5cblx0ICpcblx0ICogYGBgamF2YXNjcmlwdFxuXHQgKiBlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbW9uc3Rlci1idXR0b24nKTtcblx0ICogY29uc29sZS5sb2coZS52YWx1ZSlcblx0ICogYGBgXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHZhbHVlIG9mIHRoZSBidXR0b25cblx0ICovXG5cdGdldCB2YWx1ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRPcHRpb24oXCJ2YWx1ZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIHZhbHVlIG9mIHRoZSBidXR0b24uXG5cdCAqXG5cdCAqIGBgYGphdmFzY3JpcHRcblx0ICogZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21vbnN0ZXItYnV0dG9uJyk7XG5cdCAqIGUudmFsdWU9MVxuXHQgKiBgYGBcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG5cdCAqL1xuXHRzZXQgdmFsdWUodmFsdWUpIHtcblx0XHR0aGlzLnNldE9wdGlvbihcInZhbHVlXCIsIHZhbHVlKTtcblx0XHR0cnkge1xuXHRcdFx0dGhpcz8uc2V0Rm9ybVZhbHVlKHRoaXMudmFsdWUpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIEhUTUwgdGFnLCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gbGFiZWxzIExhYmVsc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbGFiZWxzLmJ1dHRvbj1cIjxzbG90Pjwvc2xvdD5cIiBCdXR0b24gbGFiZWxcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGFjdGlvbnMgQ2FsbGJhY2tzXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhY3Rpb25zLmNsaWNrPVwidGhyb3cgRXJyb3JcIiBDYWxsYmFjayB3aGVuIGNsaWNrZWRcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGNsYXNzZXMgQ1NTIGNsYXNzZXNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGNsYXNzZXMuYnV0dG9uPVwibW9uc3Rlci1idXR0b24tcHJpbWFyeVwiIENTUyBjbGFzcyBmb3IgdGhlIGJ1dHRvblxuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IGRpc2FibGVkPWZhbHNlIERpc2FibGVkIHN0YXRlXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBlZmZlY3RzIEVmZmVjdHNcblx0ICogQHByb3BlcnR5IHtib29sZWFufSBlZmZlY3RzLnJpcHBsZT10cnVlIFJpcHBsZSBlZmZlY3Rcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHR5cGU9XCJidXR0b25cIiBUaGUgZGVmYXVsdCBiZWhhdmlvciBvZiB0aGUgYnV0dG9uLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOiBzdWJtaXQsIHJlc2V0LCBidXR0b25cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0fSxcblx0XHRcdGxhYmVsczoge1xuXHRcdFx0XHRidXR0b246IFwiPHNsb3Q+PC9zbG90PlwiLFxuXHRcdFx0fSxcblx0XHRcdGNsYXNzZXM6IHtcblx0XHRcdFx0YnV0dG9uOiBcIm1vbnN0ZXItYnV0dG9uLXByaW1hcnlcIixcblx0XHRcdH0sXG5cdFx0XHRkaXNhYmxlZDogZmFsc2UsXG5cdFx0XHRhY3Rpb25zOiB7XG5cdFx0XHRcdGNsaWNrOiAoKSA9PiB7XG5cblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0XHRlZmZlY3RzOiB7XG5cdFx0XHRcdHJpcHBsZTogdHJ1ZSxcblx0XHRcdH0sXG5cdFx0XHR2YWx1ZTogbnVsbCxcblx0XHRcdHR5cGU6IFwiYnV0dG9uXCIsXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLWJ1dHRvblwiO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge0NTU1N0eWxlU2hlZXRbXX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiBbUmlwcGxlU3R5bGVTaGVldCwgQnV0dG9uU3R5bGVTaGVldF07XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7aW5pdEV2ZW50SGFuZGxlcn1cbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50SGFuZGxlcigpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cdGNvbnN0IGJ1dHRvbiA9IHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF07XG5cblx0Y29uc3QgdHlwZSA9IFwiY2xpY2tcIjtcblxuXHRidXR0b24uYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0XHRjb25zdCBjYWxsYmFjayA9IHNlbGYuZ2V0T3B0aW9uKFwiYWN0aW9ucy5jbGlja1wiKTtcblxuXHRcdGZpcmVDdXN0b21FdmVudChzZWxmLCBcIm1vbnN0ZXItYnV0dG9uLWNsaWNrZWRcIiwge1xuXHRcdFx0YnV0dG9uOiBzZWxmLFxuXHRcdH0pO1xuXG5cdFx0aWYgKCFpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGVsZW1lbnQgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChcblx0XHRcdGV2ZW50LFxuXHRcdFx0QVRUUklCVVRFX1JPTEUsXG5cdFx0XHRcImNvbnRyb2xcIixcblx0XHQpO1xuXG5cdFx0aWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIE5vZGUgJiYgc2VsZi5oYXNOb2RlKGVsZW1lbnQpKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNhbGxiYWNrLmNhbGwoc2VsZiwgZXZlbnQpO1xuXHR9KTtcblxuXHRpZiAoc2VsZi5nZXRPcHRpb24oXCJlZmZlY3RzLnJpcHBsZVwiKSkge1xuXHRcdGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgY3JlYXRlUmlwcGxlLmJpbmQoc2VsZikpO1xuXHR9XG5cblx0Ly8gZGF0YS1tb25zdGVyLW9wdGlvbnNcblx0c2VsZlthdHRyaWJ1dGVPYnNlcnZlclN5bWJvbF1bQVRUUklCVVRFX0JVVFRPTl9DTEFTU10gPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRzZWxmLnNldE9wdGlvbihcImNsYXNzZXMuYnV0dG9uXCIsIHZhbHVlKTtcblx0fTtcblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWJ1dHRvbl1gLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250cm9sXCIgcGFydD1cImNvbnRyb2xcIj5cbiAgICAgICAgICAgIDxidXR0b24gZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJkaXNhYmxlZCBwYXRoOmRpc2FibGVkIHwgaWY6dHJ1ZSwgY2xhc3MgcGF0aDpjbGFzc2VzLmJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSBwYXRoOnR5cGVcIlxuICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIHBhcnQ9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6bGFiZWxzLmJ1dHRvblwiPjwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5gO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVSaXBwbGUoZXZlbnQpIHtcblx0Y29uc3QgYnV0dG9uID0gdGhpc1tidXR0b25FbGVtZW50U3ltYm9sXTtcblxuXHRjb25zdCBjaXJjbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtcblx0Y29uc3QgZGlhbWV0ZXIgPSBNYXRoLm1heChidXR0b24uY2xpZW50V2lkdGgsIGJ1dHRvbi5jbGllbnRIZWlnaHQpO1xuXHRjb25zdCByYWRpdXMgPSBkaWFtZXRlciAvIDI7XG5cblx0Y2lyY2xlLnN0eWxlLndpZHRoID0gY2lyY2xlLnN0eWxlLmhlaWdodCA9IGAke2RpYW1ldGVyfXB4YDtcblx0Y2lyY2xlLnN0eWxlLmxlZnQgPSBgJHtldmVudC5jbGllbnRYIC0gYnV0dG9uLm9mZnNldExlZnQgLSByYWRpdXN9cHhgO1xuXHRjaXJjbGUuc3R5bGUudG9wID0gYCR7ZXZlbnQuY2xpZW50WSAtIGJ1dHRvbi5vZmZzZXRUb3AgLSByYWRpdXN9cHhgO1xuXHRjaXJjbGUuY2xhc3NMaXN0LmFkZChcIm1vbnN0ZXItZngtcmlwcGxlXCIpO1xuXG5cdGNvbnN0IHJpcHBsZXMgPSBidXR0b24uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcIm1vbnN0ZXItZngtcmlwcGxlXCIpO1xuXHRmb3IgKGNvbnN0IHJpcHBsZSBvZiByaXBwbGVzKSB7XG5cdFx0cmlwcGxlLnJlbW92ZSgpO1xuXHR9XG5cblx0YnV0dG9uLmFwcGVuZENoaWxkKGNpcmNsZSk7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChCdXR0b24pO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywgMjAyNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKi9cblxuaW1wb3J0IHthZGRBdHRyaWJ1dGVUb2tlbn0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtBVFRSSUJVVEVfRVJST1JNRVNTQUdFfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHtTdGF0ZUJ1dHRvblN0eWxlU2hlZXR9XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBTdGF0ZUJ1dHRvblN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuICBTdGF0ZUJ1dHRvblN0eWxlU2hlZXQuaW5zZXJ0UnVsZShgXG5AbGF5ZXIgc3RhdGVidXR0b24geyBcbltkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3V0bGluZTpub25lO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXh7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9Omhvc3R7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6YmxvY2t9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMSwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0yLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci0we2JvcmRlci1yYWRpdXM6MDtib3JkZXItc3R5bGU6bm9uZTtib3JkZXItd2lkdGg6MH0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMiwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMSwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMiwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMywubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1ncmF5LTE6I2Y2ZjZmNjstLW1vbnN0ZXItY29sb3ItZ3JheS0yOiNlMmUyZTI7LS1tb25zdGVyLWNvbG9yLWdyYXktMzojOGI4YjhiOy0tbW9uc3Rlci1jb2xvci1ncmF5LTQ6IzZmNmY2ZjstLW1vbnN0ZXItY29sb3ItZ3JheS01OiMzZTNlM2U7LS1tb25zdGVyLWNvbG9yLWdyYXktNjojMjIyOy0tbW9uc3Rlci1jb2xvci1yb3NlLTE6I2ZmZjdmOTstLW1vbnN0ZXItY29sb3Itcm9zZS0yOiNmZmRjZTU7LS1tb25zdGVyLWNvbG9yLXJvc2UtMzojZmYzYjhkOy0tbW9uc3Rlci1jb2xvci1yb3NlLTQ6I2RiMDA3MjstLW1vbnN0ZXItY29sb3Itcm9zZS01OiM4MDAwNDA7LS1tb25zdGVyLWNvbG9yLXJvc2UtNjojNGMwMDIzOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktMTojZmZmOGY4Oy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktMjojZmZkZGRmOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktMzojZmY0MjZjOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktNDojZGUwMDUxOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktNTojODIwMDJjOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktNjojNTEwMDE4Oy0tbW9uc3Rlci1jb2xvci1yZWQtMTojZmZmOGY2Oy0tbW9uc3Rlci1jb2xvci1yZWQtMjojZmZkZGQ4Oy0tbW9uc3Rlci1jb2xvci1yZWQtMzojZmY0NjQ3Oy0tbW9uc3Rlci1jb2xvci1yZWQtNDojZTAwMDJiOy0tbW9uc3Rlci1jb2xvci1yZWQtNTojODMwMDE0Oy0tbW9uc3Rlci1jb2xvci1yZWQtNjojNTMwMDAzOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMTojZmZmOGY1Oy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMjojZmZkZWQxOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMzojZmQ0ZDAwOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNDojY2QzYzAwOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNTojNzUyMTAwOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNjojNDAxNjAwOy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0xOiNmZmY4ZjM7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTI6I2ZmZGZjNjstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMzojZDU3MzAwOy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi00OiNhYzVjMDA7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTU6IzYzMzMwMDstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tNjojMzcxZDAwOy0tbW9uc3Rlci1jb2xvci1hbWJlci0xOiNmZmY4ZWY7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTI6I2ZmZTBiMjstLW1vbnN0ZXItY29sb3ItYW1iZXItMzojYjk4MzAwOy0tbW9uc3Rlci1jb2xvci1hbWJlci00OiM5MjY3MDA7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTU6IzUyMzgwMDstLW1vbnN0ZXItY29sb3ItYW1iZXItNjojMzAyMTAwOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMTojZmZmOWU1Oy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMjojZmZlNTNlOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMzojOWM4YjAwOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNDojN2Q2ZjAwOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNTojNDYzZDAwOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNjojMjkyMzAwOy0tbW9uc3Rlci1jb2xvci1saW1lLTE6I2Y3ZmZhYzstLW1vbnN0ZXItY29sb3ItbGltZS0yOiNkNWYyMDA7LS1tb25zdGVyLWNvbG9yLWxpbWUtMzojODE5MzAwOy0tbW9uc3Rlci1jb2xvci1saW1lLTQ6IzY3NzYwMDstLW1vbnN0ZXItY29sb3ItbGltZS01OiMzOTQxMDA7LS1tb25zdGVyLWNvbG9yLWxpbWUtNjojMjIyNjAwOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTE6I2U1ZmZjMzstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS0yOiM5OGZiMDA7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtMzojNWM5YjAwOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTQ6IzQ5N2MwMDstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS01OiMyNjQ1MDA7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtNjojMTgyNjAwOy0tbW9uc3Rlci1jb2xvci1ncmVlbi0xOiNlMGZmZDk7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTI6IzcyZmY2YzstLW1vbnN0ZXItY29sb3ItZ3JlZW4tMzojMDBhMjFmOy0tbW9uc3Rlci1jb2xvci1ncmVlbi00OiMwMDgyMTc7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTU6IzAwNDkwODstLW1vbnN0ZXItY29sb3ItZ3JlZW4tNjojMDYyODAwOy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTE6I2RjZmZlNjstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC0yOiM1ZGZmYTI7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtMzojMDBhMDVhOy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTQ6IzAwODE0NzstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC01OiMwMDQ4MjU7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtNjojMDAyODEyOy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTE6I2RhZmZlZjstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS0yOiM0MmZmYzY7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtMzojMDA5Zjc4Oy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTQ6IzAwN2Y1ZjstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS01OiMwMDQ3MzQ7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtNjojMDAyODFiOy0tbW9uc3Rlci1jb2xvci10ZWFsLTE6I2Q3ZmZmNzstLW1vbnN0ZXItY29sb3ItdGVhbC0yOiMwMGZmZTQ7LS1tb25zdGVyLWNvbG9yLXRlYWwtMzojMDA5ZThjOy0tbW9uc3Rlci1jb2xvci10ZWFsLTQ6IzAwN2M2ZTstLW1vbnN0ZXItY29sb3ItdGVhbC01OiMwMDQ0M2M7LS1tb25zdGVyLWNvbG9yLXRlYWwtNjojMDAyNzIyOy0tbW9uc3Rlci1jb2xvci1jeWFuLTE6I2M0ZmZmZTstLW1vbnN0ZXItY29sb3ItY3lhbi0yOiMwMGZhZmI7LS1tb25zdGVyLWNvbG9yLWN5YW4tMzojMDA5OTlhOy0tbW9uc3Rlci1jb2xvci1jeWFuLTQ6IzAwN2E3YjstLW1vbnN0ZXItY29sb3ItY3lhbi01OiMwMDQzNDQ7LS1tb25zdGVyLWNvbG9yLWN5YW4tNjojMDAyNTI1Oy0tbW9uc3Rlci1jb2xvci1wb3dkZXItMTojZGFmYWZmOy0tbW9uc3Rlci1jb2xvci1wb3dkZXItMjojOGRmMGZmOy0tbW9uc3Rlci1jb2xvci1wb3dkZXItMzojMDA5OGE5Oy0tbW9uc3Rlci1jb2xvci1wb3dkZXItNDojMDA3OTg3Oy0tbW9uc3Rlci1jb2xvci1wb3dkZXItNTojMDA0MDQ4Oy0tbW9uc3Rlci1jb2xvci1wb3dkZXItNjojMDAyMjI3Oy0tbW9uc3Rlci1jb2xvci1za3ktMTojZTNmN2ZmOy0tbW9uc3Rlci1jb2xvci1za3ktMjojYWVlOWZmOy0tbW9uc3Rlci1jb2xvci1za3ktMzojMDA5NGI0Oy0tbW9uc3Rlci1jb2xvci1za3ktNDojMDA3NTkwOy0tbW9uc3Rlci1jb2xvci1za3ktNTojMDA0MDRmOy0tbW9uc3Rlci1jb2xvci1za3ktNjojMDAxZjI4Oy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi0xOiNlOGY2ZmY7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTI6I2I5ZTNmZjstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tMzojMDA5MmM1Oy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi00OiMwMDc0OWQ7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTU6IzAwM2M1NDstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tNjojMDAxZDJhOy0tbW9uc3Rlci1jb2xvci1henVyZS0xOiNlOGYyZmY7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTI6I2M2ZTBmZjstLW1vbnN0ZXItY29sb3ItYXp1cmUtMzojMDA4ZmRiOy0tbW9uc3Rlci1jb2xvci1henVyZS00OiMwMDcxYWY7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTU6IzAwM2I1ZTstLW1vbnN0ZXItY29sb3ItYXp1cmUtNjojMDAxYzMwOy0tbW9uc3Rlci1jb2xvci1ibHVlLTE6I2YwZjRmZjstLW1vbnN0ZXItY29sb3ItYmx1ZS0yOiNkNGUwZmY7LS1tb25zdGVyLWNvbG9yLWJsdWUtMzojMDA4OWZjOy0tbW9uc3Rlci1jb2xvci1ibHVlLTQ6IzAwNmRjYTstLW1vbnN0ZXItY29sb3ItYmx1ZS01OiMwMDM4NmQ7LS1tb25zdGVyLWNvbG9yLWJsdWUtNjojMDAxYTM5Oy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tMTojZjNmM2ZmOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tMjojZGVkZGZmOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tMzojNjU3ZWZmOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tNDojMDA2MWZjOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tNTojMDAzMjhhOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tNjojMDAxNjQ5Oy0tbW9uc3Rlci1jb2xvci12aW9sZXQtMTojZjdmMWZmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtMjojZThkYWZmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtMzojOWI3MGZmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtNDojNzk0YWZmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtNTojMmQwZmJmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtNjojMGIwMDc0Oy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtMTojZmRmNGZmOy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtMjojZjdkOWZmOy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtMzojZDE1MGZmOy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtNDojYjAxZmUzOy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtNTojNjYwMDg3Oy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtNjojM2EwMDRmOy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTE6I2ZmZjNmYzstLW1vbnN0ZXItY29sb3ItbWFnZW50YS0yOiNmZmQ3ZjY7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMzojZjkxMWUwOy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQ6I2NhMDBiNjstLW1vbnN0ZXItY29sb3ItbWFnZW50YS01OiM3NDAwNjg7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNjojNDQwMDNjOy0tbW9uc3Rlci1jb2xvci1waW5rLTE6I2ZmZjdmYjstLW1vbnN0ZXItY29sb3ItcGluay0yOiNmZmRjZWM7LS1tb25zdGVyLWNvbG9yLXBpbmstMzojZmYyZmIyOy0tbW9uc3Rlci1jb2xvci1waW5rLTQ6I2QyMDA4ZjstLW1vbnN0ZXItY29sb3ItcGluay01OiM3OTAwNTE7LS1tb25zdGVyLWNvbG9yLXBpbmstNjojNGIwMDMwOy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtMTojZTViODc1Oy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtMjojZDlhMzYyOy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtMzojYzA4YTRlOy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtNDojYTc3MTNiOy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtNTojOGY1YTI4Oy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtNjojMzYwNTA1Oy0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC0xOiNmN2Y1ZWY7LS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTI6I2U1ZTJkOTstLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtMzojY2JjNmIzOy0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC00OiNhMTlkOGE7LS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTU6IzdhNzU2NjstLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtNjojNTE0ZDNmfUBmb250LWZhY2V7Zm9udC1kaXNwbGF5OnN3YXA7Zm9udC1mYW1pbHk6UmFsZXdheTtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDozMDA7c3JjOnVybChkYXRhOmFwcGxpY2F0aW9uL3gtZm9udC13b2ZmMjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxkMDlHTWdBQkFBQUFBRko0QUJJQUFBQUF0M0FBQUZJUUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR29FOEcrNDZISVU4Qm1BL1UxUkJWRVFBaFFnSWdRb0pueFFSQ0FxQnVneUJtbkFMaENJQUFUWUNKQU9JUUFRZ0JZVVVCeUFNZ3h3YmZhUVhhSmVmbU56MFpvbDN2NjBjUGVaTXBHNEhKU2prNXFJSU5nNkNHTWdsWmYvL24zRjBqT0dHRFJBMXJYZUluY0pJVWtOSEduNjlxTVJEVThaYWpqczlVYnNtdG5xbkUzdjN2cWlRbWZSUXBMa0tXNlFad2FsNnM1SVVpSk5VU1VHL093b0RZNkI2NzVPalNqa0RTU011MnBlZHB1OXZKSUxVbEpkNzA3RCtlTEhwallESTRlMXVEbkxqSEh2eHBEWEdNeWR1TExuMXF0MEZDUU95RnNKWkUxK2tKcTNUK0llN0JKRklOT0FOYmk5dlRVemhJN1c0R21VTDBsV2pUL0ZRUWkvbSsreHVQUDAyb21SSGU1cG40RGdmTlpmbitSOXo5Nzl0bUVlTmFxMVJ4UnFIVGpUUE5BMkpGRWdySGRvL250L1cvNXpiZ0dDeGlhNkVrVmlBMkZoWUdJdFJtRTFadlZVdnF0U3RiN012cmQzVzcrdDIrMFhkb1RuenpqWWJwN21TSExBQ2toTVdnQ1RMNnMwV3YwQVVvaEpmRXFFM29wUGQ1OGlrSm5LbG8rM3VhZVNIWUo2ZmNJY1hqZCtyS1VFc2FFbFRxbFVsVlJtL04rZS84aVAwTDVBS296TmxKMy85aUJ3c2hNNnY1SklVSnlrZ1QzZmRyT21xNkxjcytaK3EvWHNBWEZ4RUVpUUlVYUtvc0ZuN2N0VCs3QkJTNWRxRG9sSlh1bmJsN3J0dHpEL3YzODRMZnRKYWdGRkFMWVBFNUE3Z25NclpCaHQ0bFhxc2JaS21iZHEwVHRPbXBtZ05pdWdNMlBZQmM3M01yanE3R0xzb1hIY1RwdDl1UHZGRHo4ZU4zZytzeHJQUUF3NkRURk5wL09aSTlpaW5OaXRaaFJtcFFPQ2tkb0JkQU5qVldsYXZNaXR3RE5KWC9wWUlBa1Z3bk9QL3ZXNXh6b013N1NBRkFLVStaei9rblAvWjlqK09kZnJMOEtlMnZkS2JtcGh1eEpTdUw4RVVBZ2dISWlCSFArNDQ0RUR6djFQVFEzWWtPY09TbFRIbWo2VXNkZm8yTCsvanBZZTdJSFdjUVVnY2drcExGUjFZVFc4Q0dLUVg5YjhHRkFBQUg5dG80UkhRNkdMdkZScmk0RGl3VHpBQURETUtEUHIvZlozVi9xZGdQbWtHektURW1XRVhiN1EzdHRnVFlxbzJuUDYvKzk3WGYrRi85SkhBVnNJSWNBQ0Jad1J5a0dUN2dDUjhWb2hKY1VPT1NEamlTYkFwaE1vem0ySlJwdEJ0VVc2OVhiTkZHM0lWeTJLTG9rNDgvTGZzbTUyN0lhcUJMTXVCYk9GSXdlRlVkMDF2ZUwrWTh4V2h0emNxVG0yQ0lUYzVlTEp3U0k0ZllsTFlGSVZIQXMvL1Q1M040L1l4MWhLR1UrSFNxRXJkcFBQbnM2ZnFxV0pzTmJaYUNsUXRqbE9MVU1zaGNkb0E1VFFzczRKTGM5MFN4Q09NTVVLNEtQOU5zaHB6cFg0dnd4S0NoQ0FTUkVSRS9MS3NXUmxKd05LQWNUblhBaEV5M3IxS0hjWmEvWWRYNTg0MjAvaWFYbXRHaG9DQWlJaUFSMjN2L1A5K0tUQUNBTjVoZGtDM3hVQzRFTHNnZ3ZrUjJrckVqWVNFdjBCS1NtSENoSXZZT0NBSmtLUWd5WU1NMlFvVU16Q28xNkJKODVxQVdDQ2RIZWszQUIwT0RMMUxxMFBnVGUzaFN3MmZoaTRYaFB1ZXVRV0VINnh0SUVRQWJHMk5tNW9WNTRRRlAreUtnTzJENFQ1dC93ejJYVzkyL3JwcXBMVFNJUDhxVjl2THZPZHMwTkxXeVg1MUs2b2ZidlBaRTFwYWY3dzMxOEM5WnRocTdmMzJiZnVMNjRWWkh3NTE0WXNtNWxnZk5iZkc3Vzlsc1VBNEVHejcyM3Z4d0d6cDRmUlIrbVA4THM1QjdLQjJlREpYYzZ4d2xHNjkwMnVnN0F6TEE4TlkyMUIyZEIvUDVxZk9WOHQxb255TDVqWkREZlFJNVJnOEQ5OEZ2SHN2Y2xIdUpzcmR2c0pycGMvVHIvZ3UvRWZaSnpYVXpwV2FEajdNNytVUDgvOEVrQUFWYUFTL0NSK1hzL0pONFlhSWNPMXhIWmNVYU1NYmtscnBLeTdOZlFKS1FjVVJhZ29HbUNXK0hBNkVOdmJnMzNzbDJwSVlSbUU5YklIYjBtQTZrazZsTjVHZHlNTjVFYm1RaHhIS2x3TWdUNThjZ3c3cGRVUno3bmZNY1FmY1UzdkljelZrZHJoWDhYSHE0MDEydEZPZDdrVC9hN3A3bTgzV0E3MUY3YU85TStkanZkZDZqN2Z4bStEMVB1M3ozdWlydm11eXphNTN0cnY5M2xUYjgyUlQyS2FGVlVLTU5QMzZCdlFNQ28wR3NFZGtMOHMrekxnMUV4Yk0wTmdDV0F4Z3pmODJERzFLWE1mYzRyak5jUWZIS3hTQ3VSdUJJNUFvZERERGtHZFY4Q25WVkVtRU1haW40U2EwQVhUSTBSQk5wT1lBTFZxMWFWOXZ4SmlVekhLV0NpczZtcDBCdWt4MDY5R3I3NHNuVk5ic29DbWtWTW9wNStwREdhV3oyc0xEcjJpTnQrb1pPMGIzNllTSWpXY3h2bmxOMHgwVmhsWW9XNFVSalhYS3lMRzNZM3FvTGRFYXpIQUVFb1Z1TWwzRERlRVJWcEcvamVURVIwQ1VaRVUxbW90cUZvaXdKRktVYURGaWFjU2xCSnJFalNRS0ovQ1NGU21TS2sxNjFRbGtkS2V5U1hZenNkWEtpNkk5aWtOSk10Q1VLbE91UXFVcTFWSFQxenE2K2x6ZlFOQUlhNUpwUm92V2FFUDdaeHVObVRqTUxCWXVxM1hVVGdOZFJEZDZVcTlBMzNjYnhBenhERE9OMEl4YU5WYXhkLy9zL2FqeEFFNkpuUGJGR1prdUMzdWFOVThFc0RTTFpWbXhPajFQZDhIUXhYU3BlZGtYYXdiVzZ3Wm84KzZEcml1UUZGdzVJcHZuSmg2L1pnRkpLOTMwYUVNMlhKM3lKQjBESG9waGJxZzB1cmt2TUlnWWx0YkdSUGNka2Q3VmovTlY0cGJBYmErL0U0QmpDZzlwNVplcmkvcGRNMENHLzd0WFpOeFZFKzZiWWF2UW42dW1Xd3kzRlhmNmdnK1huQXRIRGdqa1BOaVVicXBvd3ZEVXZiUmxjajVYWkhZelY4Smk0TmwxdmpzT2hyTWF4T0h4ZUR3ZWp6L1ZJSEpYbjZIMHdoZzZxRk9FVXFRbzBXTEUwb2hMQ1RLSjB5UTVMVTl5UlFwU3BVbGZabkFTQmtXcGxDbFhvVktWNnFpYlRCdE1tUUtZWVdIVlVVZnRHSXQ2Mmxkbk1IM0VwaVUwcVZRcUhiQ0x4T1UrRTQvMVhMZkJFaHpLaGdVY2dVU2hmeHdtRHo5RzVFUkFBSEw3RkhSS1F5cm53dXhRZjVyaEhCRUJSSW9TTFVZc3pVYmM0cnRNZHBsMjZGZ2Q1NXRnUUc4eC9mQVoySnpJdkdibWxyY1hBbTN3WEthN0VsZlBjUzJ0eGZxK2VnZmlIR29ETXh5QlJLSHZ5M1NKMzBRNlY4KzZtZGZac2FGVjNlT1VLc1dNeW5raHlMMXU0VkkwTDFTSkxJeFh5WXpwTHlOcWlXejBYVHBrYVR5bjFaRHRpOTBtWTAydjB0VXF0elNDbCtxcks3ckl1djF2OVJEMHNneHFHYkpvR0dmRWtsRTFZenIyOE8xbDJLZXdYOU40QURhTjFiN0wwSWFSVFhPdXk5eWl1ODJwT3dIUUJDK3BsZENyT21LME1nL3IxdlJZRW0zREJFY2dVZWdtVXgwM0c0K3dpdFFnT2ZFUkVDVlpVWTNtNHRtRUl2d1VLVXEwR0xFMDRsSUNUdUkweVRxdEZjbEVDbEtsU2E4NldFWjNKSnZzRldpN0l4S0pPQndPaDhQaGNFVHJSTjN0RHBsTUpwTmhSSWFpcUFpR1lSZ21jYmtzeTROb3ovcm9mUUw3S2NhbE5EMEZPVzNSR1p1T0JSMnhtVk14a1Vna0RsMFg3dUppdXRTOGJOR2FFK3YvWlFPd3FlODZHSUllRXNDdW92V1lmQ3EydHZwTU9CTjdNek82OEdXWExodG1nVzJmZmVIcDFNdTdxd1g1TkR3VGtwQ1NjZWZCa3hkdmZpbkFSSVJJVWFMRmlLVVJseElBaVpFMHJWcTY1SW9VU1pVbXZlcVVNcnBzL3oxWldFWjVZQmdHQUFBQUFBQ0EwV1pzZDFDcCtIdytuMi9jT2xrNHJEcFNsMUszSHIzNmpnMUNUdHd6T2NOdUNYWU5naURZaG90SDFvZ09MUlN1eDhuaWw0cjJpWWF2MG5vcnpYdloyblpqWkxmYUtEK1ZSZ0gvZmdObXBrRmJoZ2lHaVVhY0dmWE5tSzQ5RlB2WTl0dmJjVG03NSszZmRhbVc2WVN0d2tkemFDSFpjdnEwQ1M0aVU1Wm1OeExYR0JlL3JRb0hqTVAxL1FFR1ZNWkZKZ2JEREovNVQzZXlCY3ZHUFNxVGltSmNDK1lRVWpxR3YybkM3cTNuQjBET3F2MkczVnZsSWhLSVc4TVJTQlM2eVpUaU5HRlgrUkdDREhzOFBZSWRUamRBVUF5dlFrd1NDcHBoTmQyMG1wdU1qUVhLQlFrV0lqUXBtSlJVS1l4S1hjTERjNmtJZkhhVEthT01TYzRNc1ZSWVEwZXpVNkZMcFZ1UDN0TEh1d3ByWWZ0aGl3aUhGQVdrU3BtV1J0KzZuSjZVMThDdXlKODVqMngwYjBkN045cGlicTBsYjROblUrcE83dEVVTGloZFVPMmhycHRnWVhDc3hCRkEzbFEybm1GYzNGYlJqR0JnQ2Q2QlVIN3FuWEJiYWNqc0s5OVJmSURNQUZrQnNvTytuWmc4UDBCQmdNSUF0UUVhbjlXUUVzOU1BSE5HODU1NHdhK0FybnF2VFRqcEdTN2UvaWxQbWpBUlBtbnN4V2tkQUFSeU9MOXlBaHlteDdTR0tsazdHaDQ4dkR2TmZkZytJVEJacEQ5Z3pnTUlCd3dCazV0bWtFWElxcU1NYUVUZy9IVWUyNm9MVFRwNHc0ZzlVa1o1YmdieEVIdEN5VExZUEhtSlVxM3VKcHF6dlNOY3VtYkJkWFlRc2t1MUM5Mk44alR2REZFVTBydjgxN2dtcXNHalBmUnVOanZlclREbUhDRTRxK3Fiek9qdUlJdlJhRGh6WjEvVkpVcGhoaU9RS0hRd3NaNVRqZ3VBQjhDdUtyK1lJTUtld0lvTU81eHg5ZTRBRUJURFNZcG0yT1R5OG9Jb3lZb2FqZWpVUWI4SndEL1hCNWlTc3dVaWdoQXNSR2hTMENnekp6WE1DVFUxWEVaSGFUQVhUQ1FTaWNYYlk0VkNvUmdMRXhzdGxkQ3R4WjFhVW5sdXRHaHRPUXQxOC9SVWRWcGtEQnZiUzRuRW9ORm9OQnFORmlkWG4wV0pMSkNyVThDVWJxcU1oWkdwbStGOEViQklVYUxGaUtVUmx4S0VFaVZWTFZOeVJncFNwVW12dWdBWmhBR2x5cFNyVUtsS3RicG1BNndyUUxjZXZmcWFFN0RUV3M2WUhtMEUyZGNsaVdXc1dFM25tUzdHNWI2dUdWblBuTnV5eVdiSHd4RGpwV2s2TStqMjBlWU1MUS8wM1ZNbUttNFpuZ2xKU01tNDgrREppemUvS3JkQ2tWTWxLc3lJbW1lWmYwR1F5d0pCRUZ4Qy9yZ2dDSUlnQ0lJejkwYkRFd01UajhmakFVQXhkUzZWc0RjczFnOHdmWUNYck5kOThTSDhnYWprNXZ1VVBxZzRYRFA5Sm03b0dXdkdYeFNkRUxMZnJzRVNFc21XWFRjTTNjTHRIRlNHYlNIQkFqY0NpVUlYSnFIbk1sT0xSQkxhc25VSzJTdXgxenFuTUIvWk1HT3gvelB1OG9oREFEQUFPQUFDQUFtQUFrQURZSGdsQ2tDdUxWQWlTSUtGQ1Awa2hXTktQRlV3YmR5TCtzREJ5ZWdrYUoyV0VNdFdyRTYvNHZwVzdHNmU0bUR3MEJmeFpoRnQ5R3ZmaFBFQW15ZDRjTXRVcXNQbDRheTdHdWFrNXQwTjUyT093SmFCZ1NOSHNrMk5oN3FFV1pZVnE4ZStrc3hqajNFS1NYZzhMTmlsUXFGUXpFMWZ2NXR2cFFRRnRGSW15THRpdlRlV2tRQ2s1WlJlMlFpSjJackxZRFY4Nk1CWVdYNXhBUHVuazF5bnRaMng2YWJOcmlYQXNoV3JjZmtVNjN5L2ovbStnbnpOOEkzWXR4emZDZU9pQVBpN1loMXdCQktGenM3MldybGlmV2IzbitzT21rU2l6WEhUWHBtdkFuT2dlYSs3UzhGMUVIUDhuVTRJbkZZNFE1bVdwM0JBTGxlc2E3Qno0RnVPYkU0RVhSbml5azhodENPaWs4dmxjc1dZSUtyNC9jSE0zWFhJY2N5T0RzQlhIOVIzTklCalVzZDFmaWRqMGlpbkg1cmlaZlVPRFRpRlF1bHplYXg3K2pIWlZ5eGYzOFUzeExkcitVN3U0M0g1OUtlZ0s5NUp2d3Z5cW4zSWd4THlVRzJZNFFna0N2MUJURCtJdkNNUE1nMGxWWVJCblNJUWthSkVpeEZMSXk0bENDVDJobTBzRUFnRUpURHJxYjRnSjJKWW96U1VLVmVoVXBYcWJOclorWmhlamIrNXJIckd6Y2NMUWhKU011NDhlUExpemEvS3pRbk1DRUt3RUtGSllZR3lOeUsxbHRKVS9KNldtRnhVcUxzSW5YU3MzNHM0QUpuVE5QOUpWODFaVzA4YndveHdqTW9HZysxZ1BQeHdBTWVaa0JFRStWc3Vwc3hvOWNXUzVpdm5hU1VwRkpRMVRFYnRleUtqTUFMbFNRaDZSSzNnQ0NRSzNlUVU0amJFQzd1cS9BeUNESHVDQlFUc2NNYlZ1d01VQkJURFE5eVFGTTJ3eVJueUVTeEtzcUpHVTNSaUVEUFhMOURaNUY0SXBBdVNZQ0ZDazhJR1pWTUZDZE9rTHVFMUlLVkZsR2d4WW1uRU5lTkJDVlNKa25KRWorU01GRW1WSnIzcW1ES0l6R2xrU2JiZDlITGsxZngrM2UrVkNwbUtvaGdseVVCVnFreTVDcFdxVktjYVVHM1VsZnBva01iYXhOQXNMVnExYVU5R0lsT2Z2SmxNcHBqSlpESmJSanRhTldrL3J6V29NSUlhTldlc2F1dDAzeU1PMlB4SUk2TUJFOTFxZm9EeXhDU3dnQ09RS0hTVDZRVnVEaDVoRlhscHRyZ01qeUJLc3FJYUwxN0djZGtBNThBOGdDWS8zMlBMYndrbkNRQkFObXRDdzZOb0JyVklxemJ0T1VzV1U0MDVsQ3daMXREeDVwMW83VEVkSkJnU0dMNzc3QkVqbzk0YW85b2p0SzlidjUvaEFNOFJhNDZTamdtZGVMek5ETWhpVUhudTdRbUREQlorSVVGaVRjSm9IY2xJa1NwTittWkdjVGNINUljQnBjcVVSMFdvVktVNjZxWjN1c2VnRjNtbitiRmxyaXE5Qm1tblY3UGI3RzBSdENhc093S1FaRWdoNDg2REp5L2UvSjZKcnoycnZ6MTE4UGs4UHAvUDV5LzlOUEppcjlnSnd5bEtyVXk1Q3BXcVZFZmRWRk50aHJXZ1ZadjJaSVNZZXJlQm9KZEhLZWFlZzBKN1VCZXFSOFNPMWFuM3BGQU1LTHdJdFZTSisrRm1uaUhFc0ZFUVcrcGVrb001SHFmNTBseEJMTHY5ekNNQVpUUFExN245WDVrSEZYN2M2UTJKdmIrS1NJc1NMVVlzamJobXZKRUVXeExISkRYTVNLNUlrVlJwMHF1T0lLT0x6R2xrU2JiZDlITGt5VmVnTUJXNVVLd2tHV3dwVmFaY2hVcFZxcU9tajlwNXFsTlQzLy8xeHNpQVJDS1JTQUJBQlFEQWdFQWdFRjRrY0hQQTR5L2YybTdZR281QW90Q1ZTU0lhVGVWR0ZBQWx4MVJJWlJ2R2M1ajBKSWVvY3h6enBLdGNheWN4STFoU3lWKzYxL0dDd3V6QU1mUU13NkxUS2Q4b3NGQWNyTlZEUEllRnM2TEhGeGxOeXRpZURqYjhHT1FRYmhTSXRqMDJnSWc4T1ZiVWZnRi9HdGthQ3NNTVJ5QlI2RDU1bWNQakxiWWtJOEowd0p3WGYvTTFubzlkalRWZFdocGlENE1qa0NqMEdZWTZrWTFONVE0RUtnVWhXSWpRcE5DamJLb1NDTk9pWG9aYlZGOS96c0xkR1lHZ1ZiTXp3Snd6OCttcVUyc2pZMUJyY2psM2ZHL3NmejZxN29nMlkzNHZmcGRVaGUvQ1oySEg4eUFBL3hROEQzbXlBSUROQVZzQ0FKYlpueGkyY0g1czJjUkp3VmFPbTJXV3N0UEdaeFlaQTFLSVI3bXQzQXpBbXRrRlVJNWlsRGNBbTJRd29qRlhCNnIzSXNCeVZxNWwrdE5hYmN0ckYrUXJBUStsa2lVV3ppSEdLV2M1dTFGVWRNS01obnhpeG5BVTRsa2FBbm8vbmh1U2NFbkhyUTZRRWRvUjJGSVE0R0ZuWUhrZkJnSlR3Tmw0MnJRSDdkVjZJQkt4NEdESVBUU1BBdFlIY3VhL1V6ZVAxZXBaSk5hdE9BU3FGRVFrWUNXU2pLb21jdko0US9sWW1SNmJXaUVXV1ZJRkFOYUlUT1Z3MlpWSHpyNU16Qy8waS9EMWt3RVdWRC96VDliNkRHNjMyaUs0VXFDN1RQMlVOYm5rRVk4NjRYWWlLbFcrQlMzRlVLeEhEUVlvKzhCOXl6MXc0aDA3QmE0UWtrekwwTEdKR0lyclorY05YdUIzUHc2Y2VkcEFNVTZHelJRcURXN250QitjV2lzRnlvM1dDbVFqTDBNbVhvQnFOV1JGSVpJN2dEWGh0U2N0OExwQmZrSHNSUTZYcFZmSVJ2WkJVOHA4NUY0aEg4RUtueG1FWW11K0s2Y1lZM2dRZTErL1R6SkFJUkYxY0t2Tm1uMlEwTThhT1dzWGpUOWp2QkNyNTIxeHF0V1ZJNmFwTHBlaEtjeFp1VzlCV0xKM1FHcWY5SlRpdXZ2VTB3ZGdody84SUJSSVgxVnVOUXlzQnFTdFZOUFhaRHRMK05pdmN3aTFQZ0QvNU8wb3ltMkorNzhvbjByeGdBOU9DbGEwZ04wSkVQSFkvWVA0bmhJYXdiRUoySGxVblI5RGJ6ZldNUEF2eGtydEExNHg2anJBbVlVY2dSZlJsWm5uWXhzMnkrb3dMRHdrUzJWazNkZmpBQVVWSUpld0QwNnR6K0F1dzZwSXF4VGw0ZG1qb0dsWVFYRE1iMzFGSlBzKzY3ajlSTmdzSFlnd3dPY1l0dWZLNlZoQ0xNdWM0TkZUYnY5cEVRakZOak5yMExXQUpCM1hHSG00eDduQlJmWG1IUWhRMGJ6cW1PdFZUbnllUzZ4MUhiQy9hcmovWGUvN3FNT2w3TTBlVW5EUGdoeWlzRjhxSW9GYmhmRWdxeUQ0bzNvMks1UkxyTUpZQ2FDNWdySHd1cEROc1ZvWEZJMys5V1lQYTFsd3ZPcDkxZnZhbkdob21KaXA5N3VwTkhtT0greWIxK2hMSXBkZHIyMVJpQTEzSmliNzlrNnBUQjNkRkFvNzE0cFExeVJaYlRYTXlkQTdtUUU5UkZHaEwvT3hySGpkUm5vMFhkZjl5RWUwblhGZk9lcnpZK0RPM2ZpQldCRk1BbXFGYk9lZ2tBcVhUVm81ZlM2NnlPSVZsTENTZGNwNjh1ZTR5SmVsaFVQdFU2Vm0yam5OQVBxd1dhTm5udjF3N0pQNnhRWmF3U0lQbE9GTUVVR3V6UENCYjJkSlV5Z1k2UTl3cjZKVWpKcjZOWmNiRVl3TC9jeFpmZWM4MkxPc01LNDl4WDYyOFA4TnEzVERFY0lBUFp3d2hMdzU4aFBLazVKU29EQkpnaVRMRVN0UEE1MG03U3FZbU5TeDZGTnYwaVNqVTA0em1UYk5ZczRDcXpmSmZsbUMvWVpKZ05Cd0RBYUJpOGVCSFQ1SEFrNElRa0t1UkVSMmNlSENqU3RYWWhKZU1ONjhFZno0d2Zqekp4RWdnSlNjbkV5Z1VBd2xKWGRoMUp5RUMrY2hnZ1lwVGh4S3ZIaDJFaVJ5bGlTSnAyVHBLRG82VzJUSXNGV21URjZ5NUVEeTVFTUtGUEJXcUJCZmtSSUNCbFZvMWFwUmF0U3lVNmZPVnZYcStXalF3RmVUSm42YXRlTXdNZkZuMGNGZXAwNEJ1blRab2xzM3BFY1B2bDY5a0Q1OStDWk4ydWFVVTRST080MXIyalN1T2ZOMldyQkE2RTB5Wk1rTTRidzVod3NXbkM1YWNyaGt4ZW15Tlpzck50eXUydks0WnNkdHpaN0hPc3dHRXd1aGtSaU03VGc0RUM0ZW5CMW5pSkFRYm91ZEVCR1JIVnlJSVJMZWNENThJWDc4NFB6NVF3SUUyRWxPVHFRUlhIQVExNlU0aEM3Z2dDRUFnMFlBQndvS0RydUVsNitHcWJGTlBMV0dBeERBMisybVVTTk9pQmc3dDBTa1MzMW94ZU1ranJGbjJJSWpKempNU1VoT3Vra29FSlNpanlHZ3gySWEvOVpjMDNiK244K2dxa2dTMjhzNzU2Y2pVcDN6d1RyK1JQZTZTZXJsVWRUNWFldWdlL0FIZ0J6OUY0aW53RThxK0g0T3ZJVzM5RmJlV3J5L0JxTXZ2L0tTdXBpOUhrclZlZkc1WjRJYXZmanlXeStwNHNWWHloZVZUNW54SXEvemJ2YmpvcVhYMVplMGhqMEFZRk1RWnMyQmtBZ0ZJR0Z3eEhZTkI5WGRhbXdyM3M3L0NJZmdZWmlmaFQ5Z2ExMHl3dHpkWlkvaGNuZVRZYS9raXo4S0NCb3JoRlo0ZzFsWEJHR1dLQTc1MkVsSWQ5YUxLNFNGTmRWMzI5Ykc3UklJS1U0R0V2aGpyOExVMXdqQTIzczlCbWdiR2pROTdvVUt3cWlPdnlQWkVSSUNLSXpBNldUcFdRd1Y2b0psZTNWVGxqNVR5UEtPam00TmJ2T2cvVDlHVmZ4TkE5aEZoUURTdy9mUmpwQ0YyVzhPQTY4aUN5VCtmMkgvREc4QzZlK20xeC9JSTg3OU5BMzVyd0FBNjhRV0FZZ2xUVEFzWUFDRXFlTis2bXkzd1lvQTRGK2pOb1djTlM4T2lhalFRUDd5TUZhd0lqUVJnU1VNTEkwUTduMVJBWDZSRjhZS0lJSlVvWjN5Z0MrUTJRb3NDa3RPNWx1TUhHVWFFM2VMZThWajBocXBXQXBJRWFsT2FwRzZyZFcrN3FSQUZjQ2VZaWtBNEJQVHNMaC93VVdmT2J4OVI2VThxZkE0U0tuNWc3WUNYQVNRQ1FCWU4za0EvLzFOMWYvazZTLzBZLzFvQnI3NEdYeHgrMk5mMHUrLzdndnFDL0x6ejBFZjlPUkJxam4xUGdMb1pROGIrMVowYzhnTi9sLzJEV2ZObWZLcFgxMDM3ejJMeG4zbHRCWFRiRTVaOElQdmZHL0dKb1NEeTQ2QU14WTJEZ0VoRVRFSkdTVU1Ub1dncGtjeE1ESjcyNFIzL2VIMThTQ0NTNElreVhReVpNcVNyMENoSXNVTWF0U3AxNkJKTXlNVE00dE9iL25OVzM3eXZ2LzUyT2MrOFlYZi9Uc3UzTExNZVQ5YmRYdDJjTmV2WHZMeWFQakZEVStOZ1JjTnVPQjFyM25ETEJJR1J5TlFHRHhPeWptb1ZJT0xoNitVR0F3QWtvUDh3Sk9PaGhiSkJOVXZocFVOTFpxRFU2SjBLVktseWJPYlhnNnRFaFZLbGFsUzdsdVYyclZvMWNhcVZnZHZuYU1RQ2N1V1hISFY1Y2k0V1VRbVVtVTBNTUFtdGdRc0JTenRGM1JiQkJld0ZJQXc1bDQxaWpjYkJtUXA2eTNBRU50ODJkQWt3anhuejdQNzhWVVVEQi9WbXVBZCt4NTZjUCsrdlh2R1JrZUdoMVlzWDdaMHllakk4T0tiRnkxY01EUTRNSC9lM0RteisvdDZlN3E3T2p2YTIzS3RMZGxNT3BWc2JtcmNnV0EwN1BjZWZlVGhoN3FkZHF2WnVQK3VkRzIxbHNUQVArZno2ZHIxbW9wKzBMSjFURWdnUzZDdXZDNW95QWl1YjAxM1lQTUxiWXpUYk9EQVRYNVlFaVl5Y3BVNUlWY1BmSkRsSitvT3Vkc3ZMT1V5Q0hBMGVwU2hSZDRkdUg0S2dFcE1FT1daR2I1RUZjTWpWSmtCVUJVQlJaa0EyWktOUnNBTjErMTB4Szh0aTVMdnU5Q1FPY1p3eG9idFZKWVNOWVNGSTMvZXp3aUxKZFFFbFZBVnFiRmZWajdHRllLVXdpTDJNOWNTZGdObThMSGNzQUlsdjN0K3BUemlrZ2pTOExobnBSQTR5RHBiTzdCY2VraExJUnR5cnNvM2hPRmJpVTI5RmdtS1k1SjgyeFJkOHF5bHNGV2tFSC9iYW44bG5EdjNaeTVlNERWR2laM09RUkRCRDQ2NFhuV1Rtb0ZEUjUydVhKa3psZnlDUk4wakZVTGVxWlZMTlFFWG1WRWxEb3RaTk9maXpRNFJMYmkwSzNWZlFpdU9LT0VTTUZUdjEzVHZpNkNWeVU3V3hNbUtXM1VidERtbkkxN3lYM0hjbndqZ29mb1U0bWFTVWxMbklQb2Qwdzh5djY2b1dJTWRTaUdQVXYydGdtQTRFZGExMEZybnRRbS9lbHRoZnd1aEFIV0tzK0pzLzN6cXRUeFNmY1pkV3ZNQmtFa28yT1dkNWg4VnhrbDF3UTB0V3FmWHhqbmJYVHdEdzVvbVdaNXFkdkhJRGJLWXh5Zzk3MHBKdnpBejhuMzVPTFJrZlNiZERUcFpnTk05bFFKbTJpVTMvSDBuZ3h2SDI5ZEFlWTJRRFF2eFo0elNocFFiaEFqQm13VmJJN0Y3SXZKN2tpTjFGSkdXTnVBbjB6TUV5UmwwaDJOMTdKQ0tpZ0NQS2Z5OW5ITk90enduSXp3bWd1dlpaL1RNQmNRbEhBZnc1RXhIRHNYR3VGdVNlbzN5Q0puWlJiM1c3VWYzYU5aNzNFWUs3a09TbFZKc3dZWXlKQ3RjR00xR3JqOThjbkhoa0ZtdTdQZE93bjFXelIwaHhUblJVOGFCSm14cUg5d1FJSWMvZlVXQkhqOHFySVNqYk8yaFBXN2xSSWFvREpwS3A2V3JWSGIwb2w1TG5LTHlGajJUSGdteTk2QXBaNi9scTFpTlBZOHZ3REt6NWdzK0UvQ1pJQ1B3Y2FjcWNuUmlyMVJ6UHNuQ2dRVmFnNVVNcktHSjZ5NCt5UFlaSTd5aktUSktTVU40b1VUN0dUZGl4TzBEa2ZjVFVkbWthQnpxUGJpNVNpS2ZKYUpEREtZMVpsMTJ1MVJBT2t3U3A3ekhuNlFrYWlwTkxyNkUwcEhnbUlRME8zeEJuV1N5WTIwY3VIMnpXWXhOUTN3Mm1Gd1A4eGs1Y0tlRHNkVWFrS2xMSE5KRzhzNXh6eWhOdHRFQmlSRE5Rc2NDbDJ2MlpBbjFDaXR4TUVqTE13RzlwMWREdGRxaXdKVE5DZkxTcVJTMEF0VnVxUVBJc1FDUlpJbTh4NjZJTndwVENNSkMydllIck5NV013NVR4SjRWaTRIZ1JSb2tpZ0ZLUFRwbjQ1SllneHFoMGJvcWd1SFA2SWdrUVRLVlBwOUJtQ3R5U09KZDZieUUwbFExZG5rdGxjaUdVbXBRTzl0Qm42QUJSQnZZYmgvb1hhcG5DQzc1R0dJeGw4VytaWk9qb0hVaHU3TkMyNVVKb0xkb3ZDMVZvQWkyRkFYcCtNNE4xRHlBelVVamVTdjV3RzdaYmY5RWNUNmpNYnNKMUJwWS9KdG9sN04wanBRaGdMaGNZZlllVVoyQlhxR1VIODVROFJSdHoyZlFkbnpubGxCMThkQ0RNM0JNMFJWbUxYR1BGVlJqRWRRaExQOURpSnZwTnpvVUF2ZWc5WkFMZklqVFZiNGV0NXZQTTlBVVZDMTFKWUJNeUVwSm9MYXdIVnMzQTBDTkQwY2cyL3huWEpOK0lKVzRBS2YxR1NVYTNWQmN1TXJYbFVZVHVnWm9PelBmV0tSdWM4cVlNbWxPTUt3bDd4MGtLdHN3bGYyWlJzcmoxaGcyeXpxQmFQbEFhTWxrUkM3ekc0V2FIYzhBQnJseTBtRFZnUGhLZzYwS0lHc2xuMUZGUUdvQkhZMVRHdjlLZ0pwM1ZvbzNPQkl1QTQ4NW9yaDBjME5HMkxYNnlTQTlzR2NCYW4yUWhvYmduaUo2RmV0dUtTSFhMcDVlY04xRmkxbzNNZ01tS2R3MElyRmhqODFLaVVMRHZSSkRJNUtTVWxLQUZJS3hWekN1Z1V4WHBHZ1pmQWdQRUU5ME5lekt6cHh2SGJQVFZxMmRPYXE4NDJFTjl1eVR6SzJGWXQrV2RRWkRlNFViZUIxOHN3dmxRVUNpRnJiTCt5QzdXcWx6Wk9VYjJWcFlRWnUxbVBVa1QyWHk3MjZOajBncFVtb0VXSWVyL0ZKa2drZ2JBQUw0RGgvMGxvNUpEQk1DN2tnMER0elBvZ0YwSzdMV0xYUjA2UEVOMG9vSEgxbHVlSmtRRFBJV1U2TVpPNkxhMnNndW5GNTA4QzJsWUdaUGxjeDJYSjF0dVhGYnJlNTFDSVVXU2hiNGZvajZMZ0djbWxnK1VDaVNpeGNIOXJKNlRUSmRBQzI0QXBHYnNhNWhhL05JcitoOUllYVhJQ2ladThDNEpMeldUN2dLWVQ3NjM5K0FBakxscHBkWEFMYm10L3pjZFo4bmZJL3N3WE5iWmR3OW1SMVNPN0lmZ1pLQy80TUN3cEN3NXNEMWo0MHdJdWJkdHBCTmNzVkhtdVVQdmhha3N4TTlGOEJMa3NRMzZNL0JPSkFRdDhUQkJTVWJTb2p3SzMyRVliZVFyenVZR2E5bldGaE9LVGxRQnc5Q0ZqOWpURzRKM05nRHZldUFnMVVPaGI0S0FwOXBIZ2FNSktiMFNsb0w3RG9kSHNManB0WGhrdk9hYW9lMENIakRVNnRrS0NCNDJnWkp6UkRjUG8yeE5lSnJaRHhjWGVWM1YyOEp3azBISmhVMDhMdEdEUU1xS09QM1RHb0FJNlluYkVrUndEUmszTzRraTYxSW5xVDgxMnhLYmlpb0JNR0U1RExwTUtyaU9wb3ZGTHRiSWU5eHFNcS9TVFlzeTBaUUY1eWFaYXZwL2ErSDd1YkRucFNzaUJ3SkZhZ0JNaTd3VldjN1VIcWxtdzNmY0x2dm1uVlJTRllSUUVuZ3huSHZ1eDhRMUNWN0FJQXVBSURkQUgxQStMd2crZ0hnUDRDOVFMZ0JBTmFldk9Ud29xTUhVb05nbVZtRXlESTdMcnhMSERYWEVrN1pBTUk5ek9iR3lDR0RiazZHNVVnblRwUGMzK2paUU1qWUdVeXVOWGcrTS9UaWJJMmNCeGdKd2tiMGJnaTRmWmY1QUJDV1Q3QkRTTThZZVMvSjhubzRJc3hRWWs1MXdaS200NENqdzZwVGZRalhqVUx2OWVqUE9WS0ozUGhTMmlJZnVsQUs2c01MdXpZNU9uL2JIemhaRE4yR2FQaDQ2NlpMVVVaRW1XSjNYUkcrOEErdjVZT09sRklNUkZCNCtMald5dVN1U09lcDNxclBXck5Cb1J2R0RXYmdxY3U5NzE1a1h6MkJFTUZVWlhmaHZMOVVEL091bTY0d3o4MUlrc1NYdlp1SU9xY1lSQ3B0K0RVaWdzdUUzUTdidmc4ejlxRXpmOG1mZUhGbjU1c0pSVXVMWXhRM2ZNSFp1Tzd2aGs4TTA5MVF4TEJaMVNlMmlRTlYwZGpFdUNGVGJueWplYXFOV3REVU9icUplSnNCdW5JUTdQS1dxdkhQUEZ4RVhUTUtSamZBRGMrTTliNzVXaXRLZU4yVFR3UE1iMFBBOXEyRlVVR1NhTGhzbGpEQVVBTU1MZEtZUUhWamN3cGdZS293YVVRQzE2cnJoeEJEUlUvYVpnYkVvVXMrQTEwVHhrc25rU0xqWmF5eVJhK1BoS0tOakJUOExvU3FycUJHaXFHU1JpRjVUQkM3aDUzQ2lvZUY0V0ZNVjF6SzVqRFBvYmpIZ1A1YTlzQkREMWlPODRXY0w5NENvNUVkY0lrSGxOZkp0Zm1tQUV0K0FwMUphdHc3djVMeGJTVTNtZUtDV3MxM2NvZFFVWWxKVnYrOHRtdXJBR29FMW5wTWhaZXhUTG9QTDBrZzdVZXkyTUxFdXZNMHk0NUtsd0dsV3hBaG5IZk5qWmFXTmNNNnJKYk1pbWkwK3N6djlCQnFPdXRmUFZFakhqSWJOZDVwYWFObWJIM0ZMSnZpMXRsT3hOc290ZGlPd1Q5bmVQTzcrZVNHRkZUejBUYWQ5WWRtQS9wSjhxRmE1Z3NmYW9pc3c2MUFudDhPdmorMjQyV0szUlZyK2N5T0NHVFhUWjdacTN5SEpRTFIrcWZ1U2JnUGw0VW9Vbm5GTXFsdUg5QVA4UmlPMWthbHN4ZWVIWG5rdU5JZTkrNjA2emloMXM4T0s4NmVrTXI2cXNCczhydVVxNnhGSDBnVWZWc09ZYW4zV1N0QVJmN0Y1MHY2d2R1S2IwWXYyYnNwMnZDd1NxRmFNQXJySUx2WVYwcXgvVHM2Y0Q5L1Iwdm1iN3ErVWo0UUpESGZMd3FhMUwyWVNhS2U2b2NXWFQ2RWgrVnd1YVJ5SHNwTHRpVU1lZnBKUlVZSXZkT3A1WUYrL01oZ0JCMnBmd0dqa0tjY2Yrd1NJK0JWek9YTEdnMWN4VzREVmY5SE9hYUhpU3MwL1IzZGZTaThoZEZ4WWg3TXdsRi9qeWh3RGFnRi9DZTJ6MGh3d0Y0WDVKYkRzRkp1QXdNME5xdGpzR01EQ1Y2R0sxOWhqVUFEYlJON3lHZGhPaDh1d0hMMzBHenF5bG1jdjdhSWc3UW9selBuTHdyYmpjTnYzNlhLYUZaejRpOFBWSGhlUTNvUXBhcUxKREkzU0RrRVhMSE1DSlRaYVBLeWZRVFVXcjg2cUhjVzZaVGU1b003dmF0TkRYa0ZsY2tVUDZHU1VRaFZXaXRGMlc3MTlmUE9aSGU3ZzhXcjdGbTI0eThoSGtUbVJnVjd2alBSWFBxNGREODBhMGFaZzQzZkJWNXRXdnZJNkFCWU9nZkd1dGk4aS9rcXhRdUxFR29HMW81ZlRtbTZuc1dacmRsdUUyYnIwTGdrZFNoN0YxTVM1cEQwRFpEdzhVaXRXS0ZtdXN4MkgyMXhEL2JtN3h4czhPSDFsaVlKU1Z3NFl1andoeFMzMEJ3MjVCN2FDYkd0Z0haVUxJbTZ1ZWF0eGV5cHJWa3ErbEZuQm1SVkFkMm9VVDVDVjZQTGtYWDRrYUtiZGdUbUZoamVzby9LakM4SW1sZ2JMeXJHSzM4UzdKanF0MUU1YUNNaVhvd2ErVVBneTNiSjU2ZG9ISWd4UFBnYndKcmRXdGxPR0o3TUNOKzA1aTZWN1VtamlqaFNtSS9lb2RYakkyV3hRSGphbWZWT1NQeW5XRHQ1OGJveTh5dkxONHE5M0pocEw1cFdCblJHNmxhYTFwRVY1bS91SUFwUk43UlhuVGpJcm1uQTJzSGtacEdjRzZ5czZaZVdYejZkOG5UVGZ0WmhRT2JhQlhtTFZNVnFaa2dOREZnRGk2WGxUWW05Y1UyV1lqcHpTU0ZBU0J0cXFzU29saVVQS1VmYkFEMStwaWJXWjV5YVl6aS9mbVdzSFJYaWNqLzlOcDBaemZpWnRKMzExMWVkZ2ZBdFg4VyttbXYyNTFkZkV3RkF0cUc4dHoyeUR6TGlEdHZhYmVyVytKcU5iaEN4dFNnck02cTRzbFRKUzQxeGFDcEJHaHBwRHJyaVFRV1Y3TmdkajRGNmhTVWptb0xTQnN0WlRkdmRmaEFZbnJCalVpem0rZ3dWdTh6cWhzV2IzeC9GKzVYRVVEVVRRWFFDeHdkSHh5NXZpNllIbnMyOFVpSmgwbjd4SVdDMzVsMnNHVlFxU0xIZjFDTjdnQ1FLa2VHZ1I4YVRXcVcvQmxmNUtDQVFnVG11TEN4TXpSampMSXNSNFFnM1ZqbzYrYXZYdG1zQ0pvWk1Pa2NiekYxS09IR0Q3Wkd5a2xjV014c2VpRHNTbVV3Q1NSYnhNK09NVllneEtnd3ZSNVpOTUNSNDFPUXVIc3p1UTErYTcrdWYzZ01lUDNHUkdYSE0wR09kYkdoZmY3eklhUkVCK094dlRoMDk4QnMzZi9EQVkzcG9EeXJRVXU2VEVIeVVoNWR0Y2ljK09DaFFGamVGK1JEejR0dnFkRDlGdE9DaUEya2ZJSHZlazJQTFJmdEFPOGR4WXU0ZTBMaXo3V0J5eSt3RHhYNlpHdXJaYWJydXpHeldvTyttQytaRmtuR3NLVHVMek5IQ0pDNUg4Z1V6RnM1M1dyQlZNZ0szSWxPQkZML0JFUVdtOWpUbWNSOFVFazBMSi9RRU1EZmdQSFRaQ3FxV0Yvb0tlZXY0VVI0cUdWVVM1enhCME5meXJRZG5UOHdmZEVhTHRwY2ozSmg0RmEvR1Q2WWM1WnVBaTJEanV3YytJYituT0k3dzZNYXFPK0N2S2EwanphZWY0RHFRb2VVSUFrZGttNXU1blBPN1ptd1R6QUE1VlVmeG91UzJHRkFJTUFoQTFTK2ZZWVZJcFBjWGlGTEZDam1nZU9Fd0FVZERJSHc2MFBncEpORDJPRlJGYndJTUVheGhwS1dXNzJYN2xtdzhPWVdPRncyZFpzbjJkTnY4SnArZkZJNFpobVQ5d1pjWmE5Z1N1QUJUcnU4aHc1azBtZUNqN1NzZTlkS2dnSlBSUmdVc2VVVkhhayt4eDhNUTFGR0RoTXFhdWxtblBMbkF0RFlBQ1M5T1c2SmV4ZTFGKzR3OXZKa3o1VXgrcWdXODVqa3h3enc1d1dBVzVtSFp5ZnpPUmJOTXpDT2M1amRWcGhac1Vwc2UrcEdnUnB4bVo0K1o4OWk5cE8zeHhoZzVSaCsvNGJVQ2pFcGg2ME9QMS9HV1pyV29yaTdhWld1UWkrTFpKd1lwMGJOTWVmWmh3eDQ5OWluNkZKY0FLNERtQUdUSWlGV0p4RFR6d2xIZnpmemF2UVlkNHlZTXlEU1lQQ0xObUpDenVGRmJwbzVFdWlpUVpKbVFsckl6a0V4QkdtS3AyTFRqaWtpUHNLZlB2RjJKZEQ0djFFL3MyZTI2c3hnQ3J1Q0I2TXlaTGJzSVAyVGQ5dW5NN3Jzc3RQMkg2RkJnVWxPQjYwQy96WTRxM1F5MHBybmNBUzdKWk04MTJ5WWRKWkw0NGdJRE51NDYyWVJhVHp5NUhLcTdManhqRk9jYnhhWFpwQjByYlpiVVBUT2IvN3F4a2ZUUE9nWi9kS0tSZ0d6N2JmSXNvUTBEeHYzejk4M0xONFlvdm9hYm1OWjJuak9LSG5aOXNSZFRHakpxeElPWU1pZG5Kd1JaRHBrVDIycHBrZElVTlhGU0JoWEtIR3VCaCtobDMrajViU3IyWE1PN1NCM1ZLYVgyQmpyT01tMTRxK1JzT0dCSHN3WUZOcitrWUx6cUFNMDNuakI5OUdqcWprYUR4TWZPYU5yVzZFOVZNbEJpbFRWeGNXUmlBSmV2L1ArVDRhNE5iWXFFc2tkc1M0YTRyVktMS1FKTkJKUUZiU3JmanRCbU1vRVVLU3ZqZkFsQWxZVGpTMFJoMU5IVXRNV0hXNEZuMzBZVTBJNEk5QVBVOXJ3dHVOK2JlbmxTY3RpRVRSWW00ZzRqN3Q0QUpKR29jZW9rT1JnUU04ejBmSDlOTExhU1FSRThXY0M0RmZrYXNDYlpoWDZrNHNTYkdYTk5MZEl2bVFIT0JHb0dWNHRnTkswczkzeGZBdnJpN2VtTUFoYVVnY0dJeXlmZmVYU3BiSGc5L2Q4bTk1dTgvdCtUdTcvdCs3YTRUeC9zby9lNU5Qd3pzcHZLUnJOVGoxenAvay9iL3pYMm9FLy8vMlNXZStOcXZnbVJkVTBhS2p3Ukl2MTZwRTVGVWVuemIzbzc1QWpnSEVPa0lGOStHWEk5ZkVOWUtIOWNSa1B5cVExR2hQWFMrTExHbm1YMmVHNTlrNVRadXlyRlhNOURtVDdLbDRMbW1SellZTGk1UjJmRGtzS0liZkM1cmt4Z0FEYjZSMnVUZmVvMS9KYUpQNFoydFFidjc1aWJ1Rzl2UWErb00rWGF1aUthSFpzOTFySXlRVytyQm1Jb2d2NFlFemgzMTlmZHQ2ZWdyODY1ZFdWNTY0ckorSlNLK0c3aVUrSWViai9lTHhmSTloRlhPdkV4Y1ZkTkM5NVN4eDBwOUkvYVV6MmFWWXhYdmFxNWE5amltNzJtU2Nic0F6MkxhME9PYnIwdkNROVlIZGhBcExsWGEvV011b3crYy8rcVZ2MER5cU1wWExKbWZFTFg4RWFEYnUxeHYrRVd0SkJ2b29UMGEra1cyT2xtNDJZM0FrUm1EUVlYNlByalpXdjkycEprVUJOaVg2Z28yZExoZThZakVRTzF3eXFjdi9QMmoydWk1SDJQeXl0T2QzSk9BTTd1MUUyMi9GcW5mVVJyZHZiMDRpN29YNE5EcnlmSkxSb3VESTdhbXJ2VnE5dys3YXAwMTRqRkZ4cXhOL2VxVjdyODJhbWFjNzEyNVVDd3VVZFg2K2lsQWlsa3ZzV3VHQWhWcW8yTytWT0srZFdDZlFjWjdTcUMrT3E5L3JyTVBJTXp1TVNhN0tHMkZqTmdpTGNrMy8rbzVWdEROMUZ4RGpScHNpeE0zalp3eXdTa0NzSXJ4QkdsbWV4S091eVhTcXdYMUl3V2pLblVhTlNyeHY3bXpxTnVUbFVVVlpxMDNjbGErdy9MZEJPNlc4NXNVYnRJS0lZVktMNkg3SGhXVXJPcjRDRnFaUER4bSsvV2g1UlBIcVg0TFJOeUlnalBGMGVVbERJVHRIT2VxcmJ1bi9WVGlmVUt3V2lobUlwQW8xNE4vcC9nU3F6ZzdsdWowcjdXS0tONk9DUHhsNFhMQjFCYndLRUd2WXdxeXpVYk83bk5xdnJIbTd0b2ZxQk0wZExuZHF1dmRFTEI4bUI1bjF6UFdPamE1SkFxU0VRclhkQ0gzUERld24yaCt3b0phL1dTd3NZaEs5TWpXc2wwNjdvdDNBRkRzbFhuODdkU2hpUm52dm1hNkJPdjhuUU9tSFVRVFJ3dlhXOS9ENnJRY1MwMlhqMzNEYkkvdnorZlhJYnVTcFZ2VnF2SDFYZk52WHV1bWhnM1ZteStyUWh5alY5eVhuUmEyYjJsTGRhL2pIOGJiYVV0N042YTRQaWxUWmMzbWJsakpib3l6b3Zjb3U4dXovdVBJTkR6ODg0Uk9qNndXMjEwdHlPMG9yRlVvUFhYTlFiazlaSlhHVmtyb0c2Wk15OVhVUExhMHo2clNncWxnWEtsYlZCYnE0MHFjWDkzL3QwUGNadnNrVkpsdE0xT3liaHZLa3l0S09ZTS91VjBzVmdUVWVJQkZXRmcydVVPMERmekY5YldCWHRqRGp2U0lIbFYyODJrbkJsTC9iLzlOanE0d00rTUJndG5FUmVENWx6V1lEUzJHcTB2LzBDYm02UmExM3dINUEvcmt0eWZMZTNZMnM4cTlyeGIvS3VyR0lqbUhIcFEvc2E5RiszRzFqUmxObVlvUXc1WDA4WDJmdnJUUG1LU1pEeGRqTXZVcExKSHBEa2RCYmN4d1JUNkJ4R0NCc1F4MUtydFNUbXNlQUNaQngyd2tWM2pmTFRZMElKNmdraTdLZVFjWHVnTCt1YlFqNVhQYnREb3pCbXpvY3RSYSt6TjJreVF1d1liS1gzbmNvTzBXbGtRc0kvT0NYcmNmYjdQR0hKZnlmNFRQdjhPVmkydHNKeWJZemNiTXJnckJPWEdKUHUvT2htQkVKVWZqZ25pR0M2Sjd3Z0N1R0M4eHlWUkZOa1VuZDVBVnFIM0xIQXk4MXdrMHVSeUpXR2RiOGo3MklDMGxjN05iMnNnZk0yNmVVTzJZZmJ3KzFtS1NtWDBKbFBXWkd3MVVZYjZER2t5WlNsRGVzTnQxYlVYbDBaNW82RWZlNTBBV214c1FkMUJwTU1ZZEE0djlQdURRd0hYaUg5NkNiNXNNZWZTQm9NaFo4U2FNL3EvOUM2YkxDNU5HWTBwS2doWk8vMzJxVDBWVUFZcUhXREdxVmFKaDhUVkg5N04wUm5pa2FwZHlsMm5CSklaVkJxancxQ3JqZ0xhNldBelpuQjNlWUVob3NyTDVBWUlaMmEyY3hybmJML1dSaVVSZmRpMDRNeHMyNlRzRzFPbFl2L1BINGNBaFRvZ0orbWF1RUlsaWUwSUFySkxKTkRtYkhNb0UwcXIvNmlMbkNTajE0ZDhOSDVxYVZXOVFSQXRJb3UweTdOa3R1eEVYT0xVR2M2azIyRDkvVGMycy9qZm5SQWhKSVNoakF1KzZXMjE0RDFRTWZFQmU4bmdJK1FrZWNPbU5ILzcrU21kTVBHZGJpRTB5YXRndjdOdkdyOEtCYkN5SUFsMDJsb2NkRWU2MnV2Y2E3dXMyZGN1eWZLNXlDTDFzdkplZDYyekxyd1M4blI3bmRpaDJSV05CdmhTdDdvcFc0czNLR3Y5SjRJNG44ZlNLQ1B1WHFOQWVhTlJVQ1F2Tm1hVlRCQnVOeGpoTm5jd2l4b01HZFJ6cm04ekd1RDJ6U256WjBZYnVqSldreWxyTS9UWWQ5WWRFb3ltak4zWWJiM3JWcmJ3WEJ6cG9QV0p2QjNVZWM4NzE1KzVzYlhDS1pOcGtDSzQyRGZrYzQyRXdxN1JSWDZmUG8yNW91ZjVpZEdXZXQ4OHAydGtXcUt3aEZnSldITXRSck01WjV5MS82N1QzQ1JSNjFzeFg0elV1Nk1wRkRkbnJJYnVXZ2ZWemFuZjJGdEpLY3NuLzZyTXJTbkthRXphMCtjK0hDcG0rcnovZWNnVFJOKy8vYlZXWXdwM2hhR2MzbTlkTWp0UWh4TisyQ0dJb1NwSmZIc1F3Z1hqdmFSbFAzdEhDQUswK2RPODJwaFFHamVZYzlaOXVPNHVuYXcwVSt1d3BOU09xTFJOYmRYME5EdXNtQThPVlQwbmtEVjlKVkFGNEFGUm5NOHROalRodFNGWlRtOUEybDJCTkthMzVxbjJFeWRJVDJKMExvNzdvVG5Ra3phZC8yc3hFVVNLL3hwQXJicnVsQjFnSmozNWZWR1cyME1XYVZZOVd1Um0zVkl4cmViZjR0cCs1WktPeDVzaFBWTm5KSUV1UDhjVzhZc2NTaDNwYXBKUzlyUjg4UERPTExFR09qY1hFYis1YS8rbFpzbC9oRzlPZ3Z1YnZDZC9jWDJkVGhWS0tBMlY2Z3I1Snh3SThaeEFDRm9wOVd1dWF2TnQybFF6YWFMcUZHcXZHaFRTZ2t1UjhvYitzQllPZS9WZG91OUZGTTk1NnJoUThNT1llRk5BR1hpR2ZHWlVPYnBNbU9WTHZpVDUvbU00Q2JmVHJTNDhqdGk5Zi9uSkNkY3g2UzJ6TlBuSi9MeEh0TmpycWF0ZktES1M1TTF2WjFDdmZmNzY1MlNJVnArZVFib0F2cUFNR1Y2UHI1MzRkUGFOcHM5VTNpYzlUeEtWdG4rOFNBTXpIdGxZdnZ6aHJ5M3ZGNzVYWUhub3EyWExIdjdLL0c3QmU0VTFnNGYvV1ZXL1JpSHhDNzAvejZDT2Z2N2E1enJoL3B6L0pMMUs4d2FyYU9idDFsZjY1QTlDYzErWkkzK1U3d0dtVllUSm9oNlNrajFnMTVjYzJTNTVkOC9Md3VMWVBPQWVFSUFJQk00Z0w3b1dxMkwveVRjT3JQTGU1WUxVOE03Tzd0cytmQnNtVnZKOWNOVlVFWG5xNkNuU2dEc3JFUFdSUnNEWk1Kc24rK2FGVzZLWWhyR1U1Mm9TNVJnYTV2bVZGUXVWQzhzaGVZVlpGakFaMUZ2ajlRbkhIOUxYZUt5KzlpY1RFeXk2aTVXemVodWgrK3E3MXh4N0ZsSHRYTVNFSjZaaGhlU1E1RDV6L1VVVmk1U0xYSWxkdU95K3hFZk1DNUQwc1F6cHJpWFU5UmFuL1RPSnFrRXRXSGUyektOeWVpSis1bzdpMFZWWTI2enBYd0NseGNmU1pEOUM3NTEvcGN5WU12QzE0ekxKVmV4VVJoL1g0blZxVXBVSVhMZHJzQXVwVnRWdGZ1d1pyOWdMTVBJaVJNc1ZqcTlnYUp6R3JWSkNTY2Vtd1lqZlB4QUJubFRxUUZRZGpJNUhOb2UxQzVPMDFaS2lnWVdCTFlCZExOWWsvWmRleFJvVjRTQjJmTHcxYzBYQ0l2bXpxMHFyeUZLQlNqaVRrZm9ZWnZUbzd3c3JBTUhaZnpSQTU5WWpCWlc2UDEwK3ZzcGVqK0VlQlpyWjh1ZWQwODU2eXNDNUJEZncrMWN1RW9wb3JhWlVsOVlWR25Mc2pSQlpFeFBOSmdLQjFzWm1IbDZUYUF6WThHMWVHV0ZORzZLQ2MrUDFJbzB0cTlMSEtZWFVmWncvZjhXUk5ONzNCZmg1a2tnZXFmOFpXUzJZdmtzM0VqN3BmcWk3MW01b0pNZ0dJNlZOMU9GNk1vMi9yNGx1YmxBVFJ0NnBCa0JOOTVudFhZekgyVC9Qek1WK1llaTU4NXh1VFQxWVMvODJWN2VuTlZacmEzVlM2T0dCZ0MreXNJVitZM2VLWHIzQUUvQU8wczc1bDlZWTBwU0xHcWxVQmtpb0RSL3hWRHF0NTcvQTNhaysxVGR1THVHOWFXZlNBeHFYYjQ3UmxqV3E4WUNiREFtM1lCQUdPNitIT1FwNW1ITWRwakVZdTFONEQ2TlhCUGdJdG9saEErb21oY21uUmRCUk53c2dtdVVtZis4eUZJMklFSGxZYkcxWk1RekIwTERrTndIa0U3VFc0Znp1M0MweGh6VjNiMmw2MVpBbjZCbVNLZUZhS1NNSUdLbGtlQTl4NjRxOStYTmR2bjVvbVkyV3J3ejE5ZGN5L3RtTWZ3NjAzT0tVcndqMXpxNVY5M0FrODZ5WlJxUEZsclJZY3FJNXBQRzhqejNUYkRUVldDMnR2KzhxRnFzSUk3R2haeXMrK1QxTFhUUDN5NC96eUxjYWJUN043ZEFFM2RUdGliak1venlrVm9LZUFHWTJ4cUc2czJLSWU3UkphZzNrVE9vTVpjRDhiblZFSnFZRjRWckhhNkw3aVRKcGtiTVhjMFRxT0d6S25WR2FEVTJJMW9XcHpVd2Y1QU5WWU0rZ215RTA3Z1JNTWgwV0lzWnlVVW1oaHVuWFdaTW01ZisvSGJ2czA4bURLck9yY2E1YXNHNWlEajdhSmJZNDBYbk9zRVpjVXF3YkR2L2xmckRiVWRXcHlYcUhhdGN4YlhUVFRnYmVKNzhlWEY1bjN6eUxaUEZ2ck9EZ25oT0JwL3ZIVGFXTFdoSDZUZG44M2ZSN3N0RXkvWDV2N3NyUUsxWFh2RjJOYVlQUk5xUnFEQmk0MGYvbjZ4UWwrTDVRN1laKzQzcGtFTjlUekFDWW1vR3VjVHhTaU9jdFlvQTNKaEJaeUtYVndqdWN2Qm81R0hScTFjaUtPTC9zdWdUNENHaG0rZ3c3SzhFS3h6dlN2UDR4QjlZSm1XVTdKeTgrSXBVNkRFQTEvNjRSUGMwSU5UNjNTeU1aR3dQdjM4ZVBzNjRDN0ZjTGF4dTBxYzZxNnQwUTZWRUNjRUxKY0tWYzJndUNJSTJxbFo5K3Uvbloxd2NsR0NOb2t3REh4cjRlUnFTSHZYenUxT3lmcEgvL3o3OWhCc3l6VDI5OWJWVTRkaGwxaVljUjVFbXZCTk5FbE5JMUFsb3ExekVVSmxGNlJOTE4wd0Q4OExmdjdwMCtDYjRPYkplcTJYTld3MXU5b0FvTklwL21KWHdwSy96bWg5MzVQZ1FQWlJhTlJOSk5QcFVmdk9mZU9ObGRoRkFvMmdxQVc4VkNRZGxXRjI3M0RaRDZhWk55Vm02TzdGbGZEYXJ5aXJ2RThtZlEzeTVMcEhmUkhBQzRlSmRFOHV2TXJUWGFHcVpESk9yVTgyc2FGd2pFWGZEcGp6Z2xVNGcvZFFNNEo2YTA0anovMVVMY2orVGYvTkZUaU5XWHl1djlIVUF3M0F2ZUJTTUgvQ0R1eXpTSFI5TUxmUStCVzhzRVF0RTJFRmdtRkFxSnBkWGZoL1N5ODNXT2V5ZTVMRmlIZ0tFcEozaGwvN1dCYjRGMXJsNU9Xd1hJUGpLWkJ4MXhvWEMxODl3ZHZ4L2l6dUZkWGpxQ1BJMVBWRjhDT0s5Nmo0ZE1kamtCZEtyaXRTSFU3bmdKM2QvM2Y3ei9KMWs4RXpUM3p4U05CYXBoK2I2eTFUVzByRnFNS29kYysxUzFGSDB5THFEQ0F2RHB2TGcvYlVFcXRmRmZwNnB4cHRsTCtLQ0RUc0IxMXgySmw0bzRMMXl2S2NtOVV1TVZZTWN2NlpRY2t1OVdPdXVPc2t1cmIrNGNQcFZQbnQvMTRac2JTQ2RPQmVVWTVnTzNBVWU2MFNMdncrQlNzYXBheXJlRUowcHNaZi8zV2hPZkZIem83b04renp6di8zbDhqTVZwcnN5OHdFbFdaU3FPNklSTWR1WGtUNDlJcFdvS3FDNitxMEd2Y1FrMUhzYWxrVHd4ZHNONzZ2aEhySXZBUDJZUlhaTGlOTDhySHNYZkxKbFMzTVd3dHpIY3ZEY2czK2ZtYm05VDl2NWJIMzljM0RqK3pMamwyZkVTMTZWdXZMdW9vSkRYMDhQajlDem1jVy91NWZCNnU0dGNoeHV4UnZSenl4VnQ4YkpvVmJPdW1SVXRZeHJ4eG5ETXcyRXp2TngzNTNUbnlPOTZkRDNzVy84bCs1eldiSjNzS1YzODJYTHl5dzNLVzNSZjRQb3ZQazIzTXFSY292dHl2WHluNWlOYys5R25pOERDeVdzQzlpa2pITlRlU3pNZmZGTmY3Y3djQ3ZFZWZOWkxlOGdsaG1GRzRQaWI0anROQ1JFS3VibnpKVjQxdW1tRC84Rk1XeitGdnRHQmQzQzBwdkpkMDRjelJUV2ErNWh4RVpkQTh4ZkZjNXJqSXV4ZEEreDR6N0xjeTgvMkNBNnBEZ0dIOEVQbG5wckRxc096dkljYjhVWkZYcTVtTjF3ZDVTTGpuNCtiUHhzdmNhcUlOVVJSby96VzJUYTlwWGpkdjlmM0ZrdU5XS3pvendxZ3FyeFNVWGFtZVFhWHBTeU1ZV1c2bDdCWW9aTEZuZUg3cjB3aG02b0NLbTdNaUdGR2FmSDZmMjdzS1dhWHBlVWwzUmoxQW9XVk5HT0dGd3hZZDBsSlFMSW4vcnF4dFRPbVNzSmQzQjUxaEJtenBSb1AyVmJJVmhSOW1yUkxWOWhYM050b1RURmpFVFduQituQ2s3bE9VMnZzOVNMWFplSWlrVHFmYUphZXZ3SkZ4YmxEcXZkM3ZyOURkVzcvKzZKRkFQci92MDdyMlE2alFmVFFlNkx6V1BQQmpnK3VkLzRRaEh3ZE52VWZkS1BzdG14WnRpcXJ5N0t5Z2E4WXh5c29iVjlHcXR0ajRDdGd0Yk9Hdml2cnFNN29NNnlPc2x0NVpaaC9rc3FxaHdmQUJyVTlKRXRyM0tiRmZSRlA0YzJTbTRQNTdmU3VxV1ZSN04vWFJTNXVjR25wcng1VHZRQ2UvOFVvUmVUcUhNakxEOFlyL3VhRzVIc251eDZSQVk5MmVieFBlTDNUelJLSldlNzNEdnM5SFk4Q3dPNE9yM3ZZNjJtbnBlYnBiczhkbXM4VXNYRVlub0NjY2dWRWo4UFFWNUNyQktyVUxJSUtsdTQ2ZTJjQnlJT1c2eVpiQ3JaaC9UOTFRNzY2UWRUcWNKV2JPaW82WDBKKzFGOWQzSUdvTzNRa0IxVWhJckxOdEpUMS9kZi82dGQ5UC9uOTA2K1hGY2twQndQbU9vVE82SFUrWEdjSWpId095TFJESHFXbkVDMHcrdWZKMUpLZ2dwRXdjalVSanVFYWZkYjB5ZjlMSWxvVVhNQ0R3TDhWTG5GWUM4VFU3cVZWK2lyUnJ5L3hXUytOTGQwMVJ5QkNVVEd2OTJiNVhWMUpaUDUvTlR2Z0hVZDFSN2ZEMjRXZkRpQ3BNMjNtMTNOeEptS3g5dWtycmxoRjd6QzZacnQ4KzFyZnRlMjRWZTRpOUhhMGFOVUoreFhMQi9XZlpmRXJ5cGN0WDdIaUh6OWw1TkxtQko3QVRIRThmdkl3ZGp2R2QzK0NZQWphVGtrbDMvejN3QlZqOHZNbXp2REFWYmFzQWdLRzFPZkFqSW1KMldFUFpzRk0ySVpiNUxkc1NMKzdCTXo1d3J2TjZScXhTRlRELytXN0FpRC9Udk9JV0pyOWs4dDU1WGgrMWFYMlU2cW5seE16RzJhUWNMdnpHWGFmdDBvT2NGV3ZFVjJacVFyQnREVU80RExLdkQ4ZkppVXZQK2Z0aEFma2lnR1FpbE5BanRCVVlxWDQvNmVGa3MrdUMwWEh6cWRLVzA3eU5rSlR6bnUyKy9SRzZESGdlbGFibTN6OWJVZDVYenE0MnRqWlk5cFNYeGtzZC83bWxzdG1IdkcrTzZYVWUySUJNemxTejhWeFQ4VUZraDJlUXlKKzN0Zi9HMkpDbGVIc2J6UDkwQmJSbkNhdTlBbXVjNlpQR0NSWHBIUERsTmM5U21ZejFQS1FuMXllYmgyaHZNcFF0ZmJJd3JwcU5MVEcxTmxsMmh4dnNHM3FhVjlMYmF3NStkYkdhdlFwTjFzSE95dTJ3SkxmNVZLK1VPbnBIVDJvb3h2NHFNb2RWV2dKSDdCTmdaSGVPdnRmZC9zdEtJTnJjblZTek54Q3VwUFFrQVAzNHlzVG5RTm10N1ZiWmErM1VOcFlnajVaSGpCc2tLSzBRUXR0enhkWFhweDhkY09EcnRKdkIzWXRYMzlHNmYxVFpZL2JWZlpFL29pSjdzVURMbHQ5dC9LWkRjMTVyL2RrZXVNYjR1Q3VWNDlaRVF5a24yUllNdG05UlFOL2wzV0dBQlhrRkw2SW9IZjhuNmR2QWtoR0x5aDdiZWd2aGM0VVNDb0ljUG5lcWFlWFh2Z2d3QWVkd3Qyd0k2NDVEWG5LMTIxSGhZQnlqVkswNk5LNC80OGFMdm9YVXkydDRTcGUva1Yyei9UWVdxcWozYkEyR2pHczdXamJvN0hZT21yV29DVVNQYk4ydUNWUnNXK0VTRFhyUnZ4K2NpU1pHdFg0ZmI1UktxVWQ5bm50VkJwKzlJeDBZbkVKYlVVYUtXVk5IY1hVSzh5MW5aUjdpbzlETFB5ZlBTeVhUQ1Z4MTc0bnFsbDQ5b2tiM2F3SUxLaHVQYUxXUFhYTnV6dTkydUhFT2FKNCtlajV2YStOcUY1RHhtUTBLSHR5eGpuajA2cDVCOWE5NGYzYXA2by9NVlVhdmYweldQSkE3aEo4S1llYzVlV1RBdmhNNmtWSjhzVXppSURNdktYVWI1QitKSlc1dDlKUm1mUW9UaCt0Wm4xNG9vcDF0TEd0ZUdaN1U5TzBtYzVseWRXYkF6WVhiZHgycCtwTy9DOHpTUVZHak8vQjN0bEQ3Tzg4M0ZrMk5xVldIcHBwV3BuRWsxbi9tcFpvVjZhSmRKSG1PN085UVZKU3YwaHRhN0NVNEp0eWNiZ3QvbWxEcmY0VVo4RVBnS1VnL0NjSS9nR0RKZldON0VrZSt3U2I5VHVYTjFrbTNDQmVDN0k1bnQ0Q29EQWxtaTRRMUROOFFYZHZBVmc0MjA3eDlmZkJJcmlvL3JzL0sxeGFWNlJzOXhzN1h6a29TQzNqUXltQm9BbmMwZk1HcEJoaHByUGV0dng5cnJkWHN6bWU0UUtnc0o4WVByMGFhYnVucWdBeE1RVFFEditOUGN3eGoyT3lNNmR1LzNmbm1qL0d2MTFrUFFJQmZOQmNDd0tUdzNVZ1M1d0ZyQUFkUnhWd1JnVzhxUUl1aDF0SEtsT2tyOXJZeTE4ZmFvd2lXMnNnNjdZR0wxakpaTUpVd29jcTRUdVZ5QjIvN1FLSzdYUWJvUEd3QnFMV1FEN1dRTDdYUUg2ellRMElJMzdvNisyZ2FBSDcxMjNkMzdjL1BEZGNLMElBaC91YkVYSzNDV3dIcDJFeVBPeWJIOXJZbWYwQjJQc2hBUE1zU0habWNldjRGc2Z1eGYzOXhmMnpWLy83RDRzWGtiZ1podGw4cXdZT3FJRUgxR0NmKzhFZkw5TnFNNStHelZmMm4yLytNRWUwbVVldFpjQmUvU0hvY2tZY2NKNzRCcng2ZFJnQW9EMDRCMDcwcWNob3pZTGtXb2I2NWE1djhtZVdKbW9tQUdwd21QSWZRQmdXNU84V2FqQUh2bzFkdi95aTQ4YjdiZndUUFozc3hBR3YvYWVvWVFBZ3ZsOUtFd0RzNlI2NDBmdjF3Ykh4UzlIK1Q5ODlyU3JOYnEzbk5MMWZIbHdBK0VSRE9JQWZoMXprd1JWSFdndVBUbUVmV0svLzNYdE43MGNlenFYYlJILy9zNkQzYjMrUXN6enNsTkprNzdkOUd4bHNUQ0hweHpJOHUrL1Q3Nzg0UXRXOHNvSDNRK2pKQkhDUjhrcjRSeUErZjZ1RE16NE1jallQOTdTaHY5SENucDhLZjNpR1VndmJnL2REdU5EeFNhSUFLTVQvMjFjWjhLRDhETDN4dVRoRmNXMmk0cDlWN2hYTFcwQlZIMXlIbDR0N1BMMi9sUXVvdXpoWDc0cndodjBha2JLbnA4OTdQTk83Rkh6am9pdVdsRk5lcytQL3NCYlAvMktuSGR6OHVtdnJQWlN4RmJMaXdWeHlEVW94cFJrM2wrLzh6TWVQaDVSMUdBY0E3c3JWKzQvcEFtSlgyNVZzaTRndkF3cXhXRFRhRUZKdXlEUTJFY25XWHFsS29wS3B1YW5SQURUQWhaTzA3WFpiS2prYmxuV3A3UjNZYUFOVFBiNHBHVGR6dVVPcWRZMVdpZThtRDNqb2NUMDZVeXdRQVVsQTIwWUJvS0psWFJBSkRNbE5rTVo3eVNvdFpFUWpRSS9FVWNsV2xkV09YVlJtQ2xlT2dyWVdWSTFCTDdtYis3MmUwZE5yc0wwQzRkWnMzb0VLaGF4dU5zbkJFYkZ4TWtTRVIrK1pqTFpIWWhKVlYzbXhveVZSYVVUMHFqb3ZyZWdjVmRSc1hqa21hRkZ0RWVKbGplUUZWUXBtVTA0UWNiQ0hqQXoxaVVJYXd2bE9Ya082TFI2a1hlb21YTW9qWlJOVjNmcXF4MzdIaDdmVWVnRFZDMStacUV3bHE2NjN6Y3k5M3E1NzQrcXVBcjB0dEJVcWYrSnRqRmlwYzBCYSt5bDVhOGNtN1l6TnJLTkErSVFGTzNwZjFmclZiZTFEU3BoTldSdG9IZUpOaGZzWFJlZXhxdnNGcVNmVTc1NkUxaXlyc25CWld4cFlhR1ltSVJLdldTN3o3T2cvN2k0Z2RtNEpEYVJjbWhqcksxTTZOL1JhY21PSmhHaGw5WTA0SEt4a2paL2NHdktDbkFydGR1d0lkSzFJUmloV3Rzdm9iNUhZV1ZhaENMNTdpWlpTOVNVcStEVEg4OTF1QUlqeWxWZW5OYTF0U2lHYkhTbjJ6WGxucDh1cWQ3bnFtUG1uQ3dYbXgyMVg4dVBIeHpnZkVJdEV5NTl0dDkrdXY3TFhkbFBveTVsNjcxbDRNQUoxbzVXb0tJRjJGKzZYWjFUdDYyTE41Z3V4V1dXbEV0TWt4UGZkdk54RnJZZ1IxMjFSbDJ2YXNvRDhlZzYzc0Y0dFE3bFFlR3hiUGVMTUNUaXFyMXdETCt2U0pmVjIrNk1YZlc5Y0VNUEswTC84N2tFaThZMnJiOVZEdCtQOUd5THY1Y0JXSjFvdTdjS2RFeFdlcjhqUDR3dkRTcyt6NkJ1UGFHS09ML0NtbGlTYTRieWlMdWcrbVJCUlJmQkFON0dTWjAyQzRYSDhlcGRXci9DQjhnYlVaVXBlU3M1eE5RRElPWVZBMUVtSWVpS1hXS1pSQTFWR1RDVHhvbU9vZ09qUURjZlgrejFybE95aG5Vd3RFUFppUURTbFNRMFhIT1Y1c2k5ZTZaM3E2OUJudEMyKzZ2UG9QdkMrNCswVmJUdDQvMS84d1hJeEc0Nm1FNHduMEhpMy9YQVFwaUxnQUZaZzBMajVLSCsxWEJySFFucGhUWjB2KzNPaklwKzZiMGdzNnVvU0U3cVZ3anUzdGVoOUo5Qk9YYy9Dd0R5Ly9hVW1GcWxGTE1tSDVsVTFSOWhSVXc0U2FJMzBxRkhXQW5tbVNscW8rYXR1RzRYc3NTMTV6ZjFTc3lsNWJaM2I0cEZYODdheUFjZG1jWit6b2VoenpvWEVkYVFTWmtvb0x2bVY0TG16dXg2dkV3VzdSVkNFdFd0M2RBVUszZkZpWjFhZGk2Vk9RWGNoNm16R3p6Mmh6amZNS1FxVGppajJ1MmFwamlUUHJhUkdKNzdhTmpUcGNkNmdQSkJXQVA5WHRhcGNXUDl4K2pMOGpkUFB6YS93cWlOdWZEQXc2M2JYS2tscm1zQWUrUVU4SmZ5ZkEydnFGK1JQM1luMTNlaGg1K3U1SHJiTVJJWXc5UEx0b1g4d09ZRzFrWGVDNGVhOVowMk0zYU1hdW56OWNueWF2WHI3TEVRUEhxK3FwaGlKSHkwSmdKZ0F5c3pvbXozVGxsWUJDZGJJdlJPY1VlTGdOWkx0TE9wRnByWDA0V0tPZ1Y1QWxpdzlleDJiTTJ3Zm5ZK25Odk1WL2l2dS9oT3p4RkhWYmxKRFdhTko2U1JsdVZHOXNWcTB4clZFWFRmVUtCdU1xNmdQUVhkVXMxSXlWdFN3Sld4dmhkK2luWFE5SUM1S2h4SExNdDRmbkpvc3V0WU10cVhBTEJ2blFGUUJtSE9XZGxWcitEVFB4bElnZDJHTXE4bGhQNDhSRFhPdUVRTVppODkrWWljU2t0Z0pJTG5tTGg0T2gwTzBlTXF6ZG85YnlvZndtTzM3dWhQckpJZGNMNzJzRTV4OHpxaW9WWW1reFZGRmE1L2JsYW8zQUtnaC9rRU9BbVB1eDViRE5PUXExYklLd1VtSmhpWUhDM0NjbVpMdmtXRlZrUTVaZWpuRTljQi9zQ0lpNGxVMGtZNmV0UlVOYVh1b1FMeXRKME5veTJvTUNnckxpSkNkUVIzREJPZit5eFVDanZMZlFGYkVlYS9UbDcyU3VOT3VwbFQrbkJ0YVdncmx5ek5jUk94c2JYL1RGZEp5LzJneFBhM29VMkdwWWJDaEwydjVIMmF5SU5XTlFML3ptS3pZcVVDc3JWMmFzcmVYUkw3L2NsNGFUNjdTTVRBeEVmSkx3aE9oTmhYT0p1L3Awd04vdkNWTXFDenhPamZONWVMUkxPQ0tJYytNcjF4ZTZmQXdiRnNXNEw0YzI3bSthdG9BZEFUYnBsL04zUkpnYkIwbmZNMjZMZnVLa1BSc0RTRUEwVk1UamREWFk3SjRmNzgrWUYvUDQrc2hWK2hjbFpUR2Z5UFRtOTB1VktQUmNCaHV0SzVDS1dZZTlwZ2E4Y3VDcVJqaGNNbzV4Tmg0UWNZNkpSM2FrNVk0MW01U1JCNFdGRlV0c2lxQVVqVVNNQlo2N1BjTUlkQk1hMmljRko3VTdqMVdzZjFPYXlHY3F6RXpDM2lBV1VhNUNqV2FjM2l2MDdDU0pSSW1HRlBiaWQzT3I1V0N3TGYyKzRKMkxzYlUyVUZoVlN3VHJGcUR6SWM0Q21CTmpKRFdsVmJUYURRYTRtWWtYcGRza3lKM2RUVWVUMXhHdGxUSUp1Rk1PR25oT2xIS2toTkVHaEp6OUJsK2pBbERNQ29EUW1xWnpCV3lVVlNJUEhWYzYyUURaZzlQSE53RlpUREVrSWtsbWdRaVlMQlFrRDRIWTlWb3JLdGFBb1NMS0FGcE5jWlVTaG13SU8yc2xSV1ROaldtVmxCOGY0UlJ2dUZleHdvcVExWmtCYXZqaHVKaTNnb2R5ZkRKS3dMekFGRHZvaGFXaERSaUo5MmpUb3duOTM2dHV3VGkzSmxZbE10d09DeXQxNXZGMWFCbEFtWkE4Mm90T2RJR0N4MFdRSm9PeDYvM1kxblpvZmZubERsbzNiL0g5cjBTSURMbXdZT3VKYzlkYWYydFdSS0FMYTNEVjlwQkdMdG1idmEzcEM0YUo2MFI2WHFiR2E3UisvZVQvZDVRcW4rbzhvZFk5V0MrcHV5VjAxaGlDSHdjbzI0VXBWRjFIUjBTbXYxNEljcVVzTkJqcFlyYVhvcEJGNUphaDZjcU9rL0phRlhtcDhsazBKYU1naENrRkJ2UURQenJGcFF1QU9Jc2FZMnY5Mll3cDEwZ05GRXBjcmRoN3RhZU1MUnRUTWt4R3lVeFNWVmdGU21YWmFOUHN4c1krSVpwOEpHa3hwT2JBRjlOZDBhVzBQUHducnI4SGpDYkJDdDdwY3JkTnkrSDI4bTZRK3BYajQ4K1VNSEtDMkZOajJRM2VmKzNhUnFIdVJEK21iLzVTZWZ3OTRNYU1MQ2ZHVlpaQ1NmNlM0K0plL1BoQitTbUsxSmZPRFU2RTFaVXE1TXQ2dldjOXphT1U5VmxrZ3ZxNUl6aGVYcUxoWTNwOWRNUDc1by8vY1hoTEdlZkhlemFLODh6SlYxZjgvNTVpNnI2OWVRZlpYRDMxbDc0cE9iamVyUFpmUmszYzRmeC9MVXhlWWd0Yk03dXcvMXFvZTl6YllucCtUeU1CN2RXMDkvQmR5ekticXRlS0hrc0dseVFVRmJLeGQ3Tk5keGRFa1pBQUJBOGlsTVBHenZSU2dHQkVEellNWG5uVUZ6UlRIVVNnTlo3VlVUNmtlQWUyNXBxZjlRWDFmODRzV0RpSTlQSEViVTRaV3RMWUxQRVQ2VjBRTm05ZWw5aTBMUTlIZTk0UXZDbHVuSUVHaVJjUm1wUG1aUXBEUW5tRjZraEFBUHh2eDkvMzMvLzk4TEgvMXRTTktJZkFNQmErdzhaNUFGOFBHLzlzNkluK2U1c0RnR2dZQUFBRU1DL0g4Z2p0NnZyLzBhOVU3N1hYMEJvS0JWQ2VvN2czWVNOdDZ2VlE2V2Q0bi93bGVxOVFsWk5abTFJenkvMnl1Y0wvQW9JUnk0RHBmdU1RMzJ3Sk1yUDZDTFBVRGZoNnVlQmxscmhSZkFiOElONVc1ZVNWY2FwTytyYVBpK3hienJmWGF6bzdPZDgvN0xZMVE2Zy81NmwwcGVaQkFxby9yNHQ0Rjh5MytoaUNHZTRua0FqMCtYV1Vna3UvbXljZlYydnhFMFpEdnE3VCthVXRoT1V6VmY5T0pBVldBbUFyeTV2d0Q0bnpTT2ZlWTJkcFV0dDIrYUFmWjZxZDBObExzYzQrNGs0SldGdmY5UVRxdnRHTGVSalpoT0M5eFo1MWNMM3NJRDlRNVVqWmR1eDJ3V3FrS3B0RkdVSUxabEhMd3JaSVQ3RlVKY2lwQkQ4ZktFOXUrOC80aTBYOHR2YnZPWUUzQkNQamJIbEhqdG1JdGt4dmlzaTJvRXVmSnkwSVFZTnpEMjZvOCtLMGJGc2w0dlkvdUlKUUhZb2VOOCtXUVE2ZHdKUFMxaUp3ayt6MkZTMnB5ZTZyYzB0YlQzQjgxTGZoMlM3aGhmVW1yRnlMcTBFb21pSWI1MytZS1ZlNzVMTWRBd0RrSnNDYy8wU0NzVHN4VStZV20vS2V1ZksrV2pjc0Y3WlpGemJoVEVqM3BuNXl4VXRENVZXRHNzdWVDdGljL0MyTWRmSTU3ekk5cjJRSHVOU2ZMMjhKeWx6NWRrN0VuSVJQMHZ0WHd4dk8yRHJNdmFyeEdKRXE1WFhMTCtMRjlSeHdlbElkaE54MGJUSHRKb1JQUktVVGlueWxaSUU0RTlYbmFVVFFEZ294QjJNQXBBblNrTks1Sjd1NFN2QnRuTy9zbWUvM3QwMEF1YkovTUhmUitrOFpFY0Z5Z01BQk5DUWZyUTJGSXdEdFRzQitoOGNnOE1CQ0l6RG9TWUhBSmJCdHdiRTNYc2M2OTIvTk9EVXJqWWxHa2c3RjlKQWtVN1hJS0JZVzRNRDNwN2R6OUhNTXJzQ0FyQXI3MEkrZm9hYzNWZVE4TFg1UklKMlJqM01HdFZyWUNWRzB0QTZLTld3b2RyZU9wVmEvbmpYVTZ5SFdKeFp1eWJKNnU2Z1U0ZDR3MTdhekVKTW9WOHI0d0QreWtya29FWjkxRlpxNUhMeDlpWG9BdzgrSERBSU0ycHFXWER3em9mWFBOd2JzZzJmUis5azZ5S0ZnTHNISmtYOFFwZm1qVmNkWW1GU2dOeGVyMk9aWWdvRURaS0I5WDFtc21SS0VubHJJRFFOUVBsQVVEWXVsU2ZHV01jeGVJZWZlcU1JNnZCQzFheHc0OTV2SWJmd0JXSHd4VlV2VUl5V2p0VHdXMVRnK2NaVERiMTlqYXJwK2ZWVkVncDVmWDdzNDBLOE5qbnFyam4wdFkyMUZkTWI3WW9waVUxeFZXS1ZQeWF4eUtjazVsUk5pRzJFYlJ2Z1Vpa29UZzkxU1hTZ2JCSmNiUzB3YTZRQnBpUnFtVTFJcGFva0tpNVdNWkdOaXJwR1N1R1VSQ1pRcFRXcWhLK0tlYXFJcXdvNThRS2FQNVhoMGRGV2thbHhjRnZZL1BXM1FycjZ3OWRjMTNhbEptMjdyaXZ0Mmx3VmhWNUZJbHBrcGFvQkVWWjVZVmF4RUZYYUJOYS90cGpmeGRaZXp1dHcrRGMrSVAvSi80eXk0TnpncmdiSXdYMEVHYlZDWmFXd2xyU1NjajZPL0UwK0lCRmgwZDBpKzQ1djM3ZG1OWlhLOVRYd0d2OE1mUGJldEN4NlhMK0FwQ2xEVy9Iak5pSys3dnJxMVNzNDIxMjhiYkcvTXZpTWM1R281SmMzS21kZFoyOG83RVU3VnJDR0JQWjROdEw4OS90bFhGMGJJWW1OSXdCQkFRPT0pIGZvcm1hdChcXFwid29mZjJcXFwiKTt1bmljb2RlLXJhbmdlOnUrMDA/Pyx1KzAxMzEsdSswMTUyLTAxNTMsdSswMmJiLTAyYmMsdSswMmM2LHUrMDJkYSx1KzAyZGMsdSsyMDAwLTIwNmYsdSsyMDc0LHUrMjBhYyx1KzIxMjIsdSsyMTkxLHUrMjE5Myx1KzIyMTIsdSsyMjE1LHUrZmVmZix1K2ZmZmR9QGZvbnQtZmFjZXtmb250LWRpc3BsYXk6c3dhcDtmb250LWZhbWlseTpRdWlja3NhbmQ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6MzAwO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi94LWZvbnQtd29mZjI7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R01nQUJBQUFBQURJMEFCQUFBQUFBZFhBQUFESFRBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdsd2JuRlljaHpBR1lEOVRWRUZVSEFDRkFCRUlDb0dxSUlHR1ZndUVLQUFCTmdJa0E0aE1CQ0FGaFVJSElBd0hHMnBnUlFkaTJEZ0FhUEFaRmtXd2NRQUZtKzhUUmRrbW5VajIveWxCbXpHaGRlaGJaU0YwUjd1bzdoa1pDWkdUNmhucG9iWlRXeHk2Y09EaDBFZy85bzBGUitIQThzM0oxYjN0dzU5WG96Z2NDTndqWm10dHdDVnhYNGhMb3BFa1RhUlh0MFpJWTJJdDRqZjkyWHNDdk1STFV3ajJRbzBJa2hjeEtrWXE1aVF0Y2ZuaW1ycFowanFIdEduZ0pibC90RHF6aWlxZHF3QXpvUTBUTHg4Nk16cFg1dEk1VC96djk2OTc1cjRBb29zUkJESmZCYm1rV2dzSXRvcU5iRzJYSjlDa2VvYkhiZjN6QkJtb0dBMUk1YWd4R08xR1Rhb05FRlRNNjdJdW9uOUZYdnpmK2l1aXdRRUsvVy9haG1pYnorVmRFYlZWUjRZTitQZC9qY3pDVE83TG53V2dJcUZsNVFBbDIxWUIycDVLSkZsTDZKZjdaZUJ6ZnU0Y0ZKM3ErQU9DOFFWNjZ6b2JXd1loV3dEL1Y1c212RVhvekVtRVRXdnRLRzJUUEczaFdjcFFtOW5RT3ZSOEpGSVZnWkJkMm1iRmMrSTFmWVh2d05Ra1ppdnF5UDBlOTM4NnkxYmE5ZDN6QnFHTHF3QVgzWHB6YlRINit0Ylh6R2drQTJ1SmZReWVsZldlSlN2Z0MwSkZVRjFheE5kVFUySFRwU2o3bEpsL25lbXE3Kzl2U01rLzZKYWRHc3NxcmdHZWV0bmFOVlBMNHorZDdxeC9zZ3huRjJUNWVnSFNVV3lYN0FERFZNS3hveHowQmNodVh4aTJBc0NhdFRQeXZnT09OVE9ick9TY2NHdUNRbHpoRWJLQi92cnR6MWlySDhoc1puYTc5bkluaHkweVJFTENKeUxnV2Y4Ni8zQWdUREFBQUxwak5FZzNKTk5RWkxoc1pMb3lwRncxcGs0ZGN0aGg1S2lqeUFrbkVNSUJRcCt1Si9pbGtoaXB1Q1BIZWcrRzlscEZvUS9hK3hPS2M2SEZBeEIyenJwM296QVhhaUJ1eFZNOFZtQ2tXbVY3dHQ4M1VxbDZpNnh3eWFzd0NwVjkrY3pVNU9manJNckgvQjFiZHNTWks3bVNXL2EvdENtdktvSkVpaFlqVmlLUFByeW1LVkRrUC85ck1NTXNjeTJ3MEZMTHJMUFJEbnRkY3gwekt6TS9FNmlBcENqNkwvay9hS0EzQTI4T3lWeGFDNE9sVDVhZHVQTVBXZlpCMHZCa1J0bmNZQUdkaFN1V2JsbzI1MXJUOWVDT0NLTGdmYllHa3FCSjZWUXlhNEtUR0lIVWc1ZmhxUlNZRWpNSFJ4SUhJK2xKM0ZUenROMHBXaDdERERGUHB0b3B1TjQ0Si9BSWtnMVNlT3BjaTloUDBSVFFFaVdPd3p4TjAwWkhVK1VwUzFHRjhCWVBFRDNBQkxGMW5xTEZmQXRTSWRzNHRaUXJFSkN6OVRLdFoyVE1VVmhheEhPTFczaVlTdDBwb0VjWWdvU3g0N1ZEcWN5aGtna0ZQWUhkdk1TeDlWOSt0NzZOTFpxREIybTlZWWhtdG12NHowbDcxYURYL2hjek93UXV4cTZrMWxVQzdubW50Ry9QM1N6ektHUS9md1JVRC9jT01RaURJcFRnanh2dmIvUGJ3RTlzbEE2aWpMSVR4YmtHbHAybVhoZlUxTzVBL3lIZWFiUldJeklkV2pXWjJXMDk4UzNOSm14SVV4RDBKUzJJUXFoNy9ETE9WRlVZOUkvMDcxZHFKRnk0Z045U055UHNBcWtsSkdYUGFmZU0reGJGNXFJWWMvSUFCeG1sbTRCY0Irb1BPUnoxOUNNMm91aDJvR3RFTk4yQUpGckNWek80Tm9EM2V4V1NFS0c0c2pNRHRPVkpTZ1lMVjNvU2FMWWVlNk9yRTU5Sld0STdYcTZGTU5CNnBCYUR6bVNHN3g5UC9uY29BUUMwWU82NUFWLzhWcVI1cEM3TzBLSlJTVGlYTUhlYWp6dnE4ZkQ2VEVhdGRTZUVkQ3lKeU9QN0hTMEhOc2NqbjRFVUg3SVZ2NUI5TmNIdDZRK1F4cjVOZ0psRVlwQmJsN2lXRlRnMlN2c3ROTHBrMXdkMEVPQi9IS09QNTFvQWtLSGJrMGN4Z2FVU21FZHp2dlJFWGZYblVFcXhxR2dkeC8xcFVCbjZ5U1ViaUw4YmtJbENwT0MySEYvWTB4NXFweFRMNkxtbFVQYkZPSk1qWVFEZVlKSWNZQWh0S1ZxZnJGS0luZ21qT0k1ZXgrV2JTVUFyQ0dOd2hJRGlhS1BRVjEyZXphZEEwNENIRzg1TFltaDJnaU1Fb2hndUZDRTdXdDJSbnBaT1AwTEFtempKTkpNbDFGcVEyd2ZiVUJKYjgrZ2RmaVNHU1cxZ0MxdFowejdRVlFkZG9UU3lzalNlYnpvbGZ5b2hTdGdnQmVlTENIT0RmTXlvMkJPUzhhMTJoaWRyM1lVaFJEVlhUQUl4RTZ4d21zMERFZzFNUkZIQUd0R1pKTEU2Q3RCWmw1SjJBN3VsVFAyME1qUVh1K0ZHY1JoakNvVlh0b3daaXRoZUFpZ2Jsbk9aSVJnRENnWUtlampCUW9RNmhSaDJMSWFyR1dCN3orWWl0S0F1cUVNQWw5UURJZ0hjOVJzWWlVekFOZ01zWkdMTG9VYXhha2tWcmZEb3pLMjEwWmJLMDRacGk2Q0VCVm9zTU9BQVVWZ1Fpd1YySE1qQkR1S1VnSk9JZ3lYaEVNbnNVQ2xTYWFTeHc2VHJpT21NUlYyNFdTRy9BcjFvYjhMTjlNRmFmYkZvcU5yY2NDTnk0a2lqcUl3QkpsTndCQzhtV1ZnbEcrdE1aK3Y1NU9NVjRFaUYyS0NJYlZTc2xGb1pOcG1GdzgyWFdzd29DNTZLRCtxVXJvSXpLbW51NEdBWmVKWi9FQUJNNFFXUVJwRnFob1ZZQ1FmUGRwT2hIR2FXdXg0ZXVGaUhudTQwMHBvMU43Q1hWTW5mS2pSMllkRmlzY1dxRnF1QmROdkFhOWR5OHRFVFArNzEzTHdjRFB4dkRkMGF3KzluZXlmZ2QvWTM4Q0VMNXNKaVdBbnIrMzMvd1pLY1Fud0tqclhpTUFCcER1Q29hVWlrR0lTaENBRUZ5RUVWNUplbEZjSEJwOUxuZS9lL2E3Yk1FdzhLcFA2WlpWbVZSOFM1b2JBbVZaSldPTTV5MGo4QkFCUVlRVFVtUXlhWkdFVDF4OUhEQ1VrTUcyTTJIRU9odVg1SGpUdUJwU3BBS3dpWE9tc3FCcURBWHpRVUl3WitmT0JIdmdaaFloUEczL2pWeUl2Sk9EZEJJQzBqSzVzS25ONzZxVXhzSTVSanRBcGl2d2NtZUFRSzlGWUtHc0VTdENRUW9nNzZHNFplbXFUSlRBUlcxRDh5QlZJUUJWTUloYVp1L1ZIN2hTT0JSRktSbWpRa1Nia2dRSG9pcll6aEtGWFg3TElKb0xDNWFhbmkweGdXTGdSZ1RnbGtyT2ExV01Kd25ROVh6bGNmbUFEc2hRNEg5RW9lbnk1U29ySHJXZzl0czBwSTd2LzNzRWV3QWF6cnVDK0dDUENmeHJrVDlDWUE5QzliQTVCeFNLSzNkeDBBWUkvZXlpcW10QnVBbzB0Y051YnI4MHdsNCttNE1QajltS2FXUC9GSjF0bHRQZFV6TzRHL2hMOVdqcFROc2xWdUl5Zkk2WEpYdVZpZUV3cXQ0ZGJtZmo4QUNDSnpTZmRuNHBNbzQzS3NrWFd5c1FWcGpEOVN3bTBGOUFQQXZ3T0FOeDJ1dmNiMkM5dUFDOStFQzg5NHp6cWZHYVA3S09iaHJuTTd6MjBCQVlCRVFIOG5nTjdLOTNaMWV1VnpOUHFuN1RQSEl2TWNkZFYxaTYyejNuOU9tV1dUK1phYWFZa0x6amx2Z1d1SWhpUlFzR2EwbW90Z1lHUmlaaEVsV3F3NGRnNU9pWklrUzVGbWpmK3Q5UUFIb2tKNmIvM2diakwxMWtkZk9iUTNnQmg2Nm11OXN2NjNUdWRUb0ZDUlltVld1V2UxUy9hYjY3RGpqampodnBzUmNVdU5MUzdiN0hiVXVPdWkzLzBSRGxmYzBCQWV2Nm0xMVQvKzlxK0ZCQXhIaFNkU0N4QXVSS2d3a1ZyUTBRc2lhODJxcGJaYU9hT05CQzd4RktsaVROTmVCcmVPMnVtZ2s2NTY2YTZIbm9ZWVlLQkJQRWFiWUt4eEpobnZySW55NWNpVnA4UlVwV3dtUjAyRWpUYllhWmNkQ0EyL0VBQm9EUUJzUDlCeVFMOEZNUDhBOEo4RE53Y0FBRFoyRmJ5RWhPTVVMQ1dxb3BoSWlGRkdQNi9KU2Jibm5KZ1V4VjFEekxRQWhDSkl1RWJCbzNneWFTVUpSU05kRUxIU0h0SU0zSEhHc1NOeGZld0VuY2ZyNmNDZ01XbDdqYWFKMDBleFF0UVI5aWlHNENVdzhnU2lKbm53U2IycnNBaXBSRWxueENZTXM2Y1N5SStlMlJ4NkVxYitDckdFSG1Pb05BT0ZwSlN5TmxBVGhIVE5Qb0I5SFFPcng0ajVYa3pPZzRRT0NXbWNQalJ4VEMzVThZUG91VVU3WDd6TXZya2lXbzdkSnNablFRQUU3bm4xL3Q1ZloyUkVRbW8wd2VpdXZKa0xsZyt3Uk9rczV4UzhNOFdMbFRvRXhLUkp1TjVabHVjOVZ4bUdwM1hvaFNGWmc2MDJoMFBwZlFqZ0hITGRVOWRZR1pHVWpGOHhHUGFmcENpTkJxOVY2aTA2VDA0WVlwNG9LMTRvYzNlbHJDaVZFWURjL2oveVFTblBPdGFKbnpIQmFhaGNBMENmQUNxOFM3NVp0QWswcFRuS05BdXVNUVdRYkZpdnRuUFV4bk1MUU91MmZFbU5iMVpxNTVJTWM1UVp0bXA4VnlsUitGQllveWxYcFg3VkJEQW1kbUl0SFYyRlJ3eHEzZjR6Sm94NHQzS1pmcHNqeTh1L1ZXYlVnN1oxUjlNZ3Biako0dG00V0FETVFrNDV3RFNrVVJndHlFbXcyTUtSVFdERlpkTi9GR2FSZlpIYmE3T0xZTy91VDRpSEI0cU1jcXRIN0tWdjBicXdPWkYvdGVZK0RRNG9IVVFZaFE0T1ZRb2JUV04xUzdEQjhQWGMrenV4Nk9RM3hPMUZkbUVxQS92eWlLM3R1YUhTUmFXNDBPWTA4WlZBUFRXTVh3SzRaRU94QmhDOGZUd2FzR2h4S1N0N3lRbEJvVDUwb3J4K2tOcW9tRytxSU0xNFR5WFZoU0lEMTB1RUkyQ2N1Rk9xNTRDY1F2Tnp4L3BjZjhHb2ROWS9TM3htYVYrekpac3c3OWlsZTlGL1U4cmhQVkM0bVFsY01EcmJvRFlTNkNOYjRBS3d4cCtSRUZWUzFUSTZVTVp3NHdZV1FOUFFXNXROVG5GUGROZ3cwRk0rZHFnSGc4MjZKOHNpVmkzdW5RNFRsc2k5Z2I3RzQ1bVdMbmQvRHorL1JuYThSTEVlNTltcXByN1Nob3F0VndTSXZmbUdkVjJ2OHlwcWpVN3Y1ajZuclAxMTFwZ3NpTHhOamUxV0hCOGJNanBXSjgxZHRTMnBhbndUZ3duTjIzM1dxdzRiREpTWkdsQkpUU0RsSGVNWVpYWnRPOWZ1bFdNL2UwRE4zWnpORmJ6Zi9kczJ1WElMS2d4ZGt3TjlXRVRadTdsczVya3d3Ukt3eVZ1VjJGTTJlYWxmR1ZhaDNMVTByNTF0V2ZNNVdGSENKL1dNWVlVamhXeStjRW84ZXlXQk1YRXpXQ1ZMa3liWWpqMXZyVkpkbk9SWGV4c3JnVURMcWJhaDJvaUQ4NTdFU0dMYXZ0a1RMSlJmbU5XRThlYUcyOTBXbTVJc1hpNVRoN1d3bE84YzNMU24zZXVpN1dSNUg4eERZMTJMQ2JDeUV4Vis2eDRmM3RRd1VER3IzaHRsT2ZBRzYzMTh4a3J6bXNqYnF3WXRFVlNXOHZSOUtMZWhaN29KM29rYTVqV0xWbjlwV3Fjcm1EMlZ2R09hSjhlbitLaU9kVWJrUFhKUWZXNXhaYjdXMlJlRHRPSlRhME5iTnp3dFJKUEFaOVJ0cVNheDBxR2xMazkyZ3YxRFg1T1VRKyszWTZ1MFVLM1BQeURSYzhlSWxta1NjRVpwMHdTMnc2d2NLMytLcW5KMzR5ZU5hYnZGNS9SeURSMGo3OEh3ODVIbXpHVk9TMFdJZzlKQWVsZ080OXdOa3RJN2hBMFc5a3dKdWo5Q0VsMkdhQkw1cWtKWEptZ3NzUzZhZ05Wdjdvb0dpQWd4YWwrM3F3VFhmVGlsckNtbFZsbzhZMExNMkQvQU5oZnVpU0pyTlhWc0J4MFd0UGJrVmt2TmFIbGt3Z0ExY09RdEl5eUVVZzBPSEhsemQ5MVFXM3JsM1cwL3MzZHduZllLMGdDT1d6d1B0SUNIVm5OWDdlQmdSblJjR1FTcmppdWMxd253cVdVbDE2dlJaOVZoWFNlTUlTMGtmSkM3MjhrUGsvcjJERWRUUEk5MEdLQUptdHVSZzBwakhhRTVTL2xteTdIUUNZM2dCcWtiYmtwRGl0N0tNUHA5TGtRUVNaL1A1SXFEd1JDZVBSejdkMzYwT2dhRlRqc2VONS9ETzhtYTRsQ3hsNTFXY3BPOFRueWR1RmxtZmhmelZtdDZlY2g4TGVtOG4rZ1FLS0toZ3cyRVgrcC9EZXNpOUdBUlZnSzlrVGxPTFRrUUlhclhNYkpadGFFRDA2YjViZEk0YUorRVRYK0FpUTVKZHR1Y1ExWGFEenZERnExc0xhSmMzdHhLUTN0UUxleVVxeUtXVlEzRi9xMGRGajhZRDhrNnlkZFZGYTUrVnMrRFNHNnVDL25OOWNlbnVFTnFsakovNGNvdC9uN2YrcGlZZVlVcG8rRlpPbEZHeFJ2VjFXeTRWRVBHS0xKcFg3QUIzdUN0TEYyYm1XYUlCaU5GNmhCOTIzRy9UMm11ZHRJRTFmejY2VFV3M0FiclFyYWx3RUZoTzNaTExaSkd6V3p3endMakRzK3o4b1prODRnT3dvSFVBSEFnTHc4WGgyYUZNcjY2anM1U294a3RKWUJlVHJSalg1em5Ca2RtSTlNKy8xaHJjWWpZdGRacmdiclZUUjZjMDZvM211YUNrTlpjanJmUHNYbGlwYWpOTHdhdWZMNUVWU0tFQUhnem83RU14WUpXMC9vaUp4dU50a28wV21VL080NE5kVVd6SXVzTmtkWmZqZGZTVm8yeDhPREhINkx6VEh1ejJwd09UL09jQkVqSjFSVWpSOGI4NzVOSUVCQnVtM0J0dDZ6RW9kYjFoTWRvTWhyR0dxWFU0MkIwbTcza3lMdVJvYTU4UnhuR2lLeG1JSHd0Z05TdXZrQXF1dlIwS05Kd3YzNFllNFk5K3B2VzM1RTB0c0ZGMWd1dWpUTFUzNWZwVThEd2xBZlBuRzdIMDN6VzhYMGRKbm12Snp5WTQ1eDhsaEQ2ZzJKQVRFUjVteC9yRXQzbU56cTNPa2FVd0p2SWZHdStmcTVYZkJPSGphZnZRRDZJb3doaGI5blFheFQ2SkRmU2I4Vmt4cm1WVm5xdTVyWEk1UnE3Ukh5TUpSaU5Kbk9IdDhrbXZiZ2d6WWpnblRuNGR5ZXhjU3pPM3ZReURvSjlsV0lqdUlzUktSOGZiQUFYbXp2c2x2TXViYm92VGFtYzdLMmJSVWYySDB5UmpMdEpxZVR1eUFqZThZUWNKSkExZGNkdHp1VkNlMC9FcmhZTkl3dTBZT3pFdGViK1NsTUtPVVFzRTl1dVp1dnVRWFdiWHBYbENidXZKQVJYUHlBbXpGR2hJK3VPR01CSDdEUE8wb0RVdzFNNzhBTjNoSjZFQitxbzBZUmhJNThiQlhDSVVMSW15Z2hXVnNheXNJU1FCNTZocUIySElwWHpPek85RWxGc2R4dUJPWDBpUGhTeE5QOWVWaHlTU0lwMkV6WGthYlI3ZmZReGtlaVRENEwwRllDR0dpTnpNRGRJalhoaGR6WFB6ZVE2c0hVd0R5Z2RVc3d4K3VtS2lxNDlvNVFyeTRFSlBjaHZYMzJtSjFFWlB2THJKNnBjYVZ1bUMzcFFxWHpqMmV2WDRvcFU3dk51MmErT1YrZXJ4dklqMlVibDZBM25Sc2t4a1d3OWZOQWVqVndNSUU1UkhFU281eHIxeE5LczdjY044TnczMU1mLzl0UkFLTkRMSEQ3Y0w2NW1tZXBhb2hrblBlTFluY2IrWkdBVnMzUW1lczV5Qkd2NHhiSlI3UnVXaktJV3dRNmxmQ3RGdEhBZTBXQ29vMURDK1NCNkpzZG5wRW1QZ0IyZ1NRNkpVaThWRm9JQmhWM2toQ2hmMDJZeGo5SnZlZy9US3FUd2czZUhQTzVzVmtXRFl2R0NTYUJ1cUk3bmFBOW9OQjg3Mk5nb3VJUWJrRXJIYjg4SjJkTmpTNkpwRHJUZlY3cmg4V3J4a3I4Y0IzWmgxMktuTW1LcUhvMXBPZW5odEY0NmF6RTlMYTg3dWNSdjNKUjJ5eVE3bUlObGZkbkdqblVKZXQvRjF1amUrcU82U3c2dllTcDZEUnNpR2dKNUJjeFhWbzNSNUxWK1lWMXV1emh2aVhEK2FiMVpHTkR4MlB4NG5yYW1hY2J0cUhLb2N5djMwZXpCMjhHcmtqWGUwK3hBa0J3YVRNekxkWW1GTzlPL2cyR0llSEFTVk5yVHo0VXhySThUeEtqalZKcXJ0MVhyZEk3RE0rM0RlK0NRMWZXNS9WM1RYSGRmeG9yRXdNUFRieHJzUmFZcG5sS0hNeHhaSHMrSmNmTWI3WEdwUEJXbUxmdUNRL2ZTemV2MlBSYXVDejZBbGwvQjRFQ0V2dEZvOUJyR0VkWnBuSU9JK0xnZ241QmJxT3dTYmppLzFocUJhMzRuOWZKOUFEM1U4aWJ1YW1HR2QzVzFMdVJsTm9oem5Ma3VpUGVEMWozQ0REcDVUVk5HQStGaGRYb2FZRXlNVDBxVHgyUm53cHM4SXRCOWZISjN5YTVGZWdDbGZQMHJSbGw5ZDdDWjMzM2ovaGczRzJNdGF2TTFmQlVOQnJOMVRlRldGMG9jN2l3Q29RdkttZVNwaEJSZUh0eXcweWl3OTBuNnhwZ0NZeWttb05LR2htaDBJVlpZOEtCa08wVzFwcVlJaTlNaVRWRzk0SjJqaCtjdk9TMFJzZVFLNWdVRDhFQXFQMkNhcjlJalZodFYzc3dQVk56VEIzdndZQ2tpV0JVN3I3M040MkJBbjZOMUc5Zmw5TlgvRDVBK0ozazlSNk5VVy9OeWJxVHJWc3p3NXpmT0Q4Tm8xb3RZdlgyU2dZTlgxMERjNVlvUHVKTFVqNjZkVHRjT2wvUEViWVpQaHJpMytPKy9FOStOOWpiZWFRck9RNWdKMTd4MENKMm1Eb1lZb05CbFROV05IdXp4YS9EdWZqcnd2ckcwb2crWVliRkNiMFRCRC8zbzdpdHpON2R6WEdvZHo3ZkozNnhzRE9reU9TQTQ0TjhySFB2LytUTWFERnBKbjQzNE44NU0vbWNxK0NLb2lnaHl3ZGprbFZ6Uzk4SGc2UUdCR1Yra1NhYTFLMGx5UjVUa0RjRE4vWUpUcFIvemZielNrazVldkY3UnVkRllLSnFtSWhFaVJFaXIwN0ZFQk5hejRFS3o3ODBCTjNxSzlyT2IrNFlvMTh6NzU4bmNrZ1M2TytQZ0xIWmsrdlhlcjdJYnU4QnF0cmJzMWYzM214NTJIZXlaSngzb2lHODBYemRiQTVTLytFSjdMeEVmczJkUHo0WWdhc2Vod1JSYUxLTFRrWWdRSlhrUFJiQWgxanFYbVNyZHp2Z21mRSsyVFovZm00anR5K2RqKy9mRzgwaVIyNm4vNjUxaitiT2RFZVYzZVpMNzRRVWlzSWJScjNTSkY1VG9uV3hqZmlJR2VkM3hhY3VYWUkvWEM5WHRoWUFZa0RVWTN0MUVnVE5PUmtnRThRNFVEU2dVUWNPSEVBdWdQSjZGOXZVWlFKNG5MZFFyLys5VitHZ2E0dnNReENETlg3NTk1eU5YcE0vZld4QW5wOXcrQzZqTkluMjVVNW9zcVFHckdIWHBCTzROamJjdTZ5NWZjdkpvZHJId25wV2FGWFdEVkdGcVhmM1pXdU56N0Y5ZXZ0cnlqRzVoYVRvSFA3WHZ4Yld6YTJpRmdObFhwdUtjSHlLNnRITDVKa2l4UysxanV1bnV3bHFEMzcvVzBGM1FUY2RJTFVXMEdOZzNGYzJrcDZOS2k1bEFUbWVtb0FrSVQ1clp4WHozZmRtcCtRTm1HNlJGeHgzRzZ5ZVhpb3Baa1Z6ZmxkWXJUZlRaenhZOWdvMitnWVhtWUloUzNja3Q2RUVQZXpZMjNaSGhqRzB3UHVIdDF6c3o3WXNkR2VQdVpZbGVNTUlzS2EwbWJURnJ1bE1HeTNzbUplUkNzcGY4UHV6UTRISVJxZGFJWExoRTg2N1lnWUJkbnRYa2MzNmJVL1A0dy9rcFpUOFU5RjBNMEIwaG9Gbm9OYTB1Y1d3eEZpNTBzN1QxNXdOMHdxVFpmQjdyTFY4eW1oYnFiY09GL2phZGF2VWZOMnNoWjBHUTFwYjRONDJrZEduMGNWVEQ5MS9XTXljbjVlcUlSVC8xK2RGa2IwdlQxZ09KdVZ2ckNJZjIyVXVLcHA5MzZTRlcwcWxzcUZ1bUpQV09UQ3p3VTc0WHNLQStXQnhucUROVmtBZkFxSTNqV3FzaHluOUhNYTk5U3ZaQm1Hdy9LY0IxZWpReW9QRlk1c3UvT0VQRDcwVHlXb1EvaWZWUjNsOHFUU0F1dlRVWDRGNFNlWTBhTkZ6UUFpVlFGZzNaRDdHLzMwRUtOL3BjRXNBQlNqQlhZOWRpNzRybFhwSmM0ZFY0OGphSUJyQXk0d3pMd0lEVlp1KzNXZ2ZzdTBOcE9jWXd3M3ZYSFpRY3JSQzNOdFFzTFBHbUVNWDFBOHNIMzBZWnVnQll1anhDTHc3ZSs1TkRUZGRROGViR0IrWWc1YVgwS3Bxd0l1cFNMcjN5RDVKbkZ4VHZmYW5wNk9HMCsxK2RtRjM2SWdHc3c5QkJjUDUzbmZIUDdObjNRWlhwc3hNK0tweERObjErQXFXQjRrZGpiaWFZdnZQcVA3V1E0Sy9EakRVWjcxMy9EYkY3QkdLU0tKMDhYK0wxVFJSeXgrVlc3Mm9PdkExM0FRdXJYdTA0OXQzTjlGS1lFNFczYzZFOTZhMDF5WWR2aTc3K0RCUlh3OW1SQy83TFBHSmxrQSs3UjcyMjFjR1FmY1dveTZVS2NyZnhBdkFmQnlENmNOYWN0ZXFIQ2FlK3BDbG1MR3RHQmdtQ1NQN2pCSFIxdGQwWDk0dTM2MWJEK1lsMmdZczk5dGtvQTF1Yzg2NFBmQlRpY2FwcWV2aHFYQmZlMmJQbGkrUDFIak1aRmF1NEJHdVZNR2wyNklhS0RsSjR6NjlYUjlHeHhYSHM1MFdiTGJpOEExOFJUZUVyaDUxV1paVDFoVFRGZ3B4OFdqN1NQaXFUNnNrMk9LSDg1cjRDNjRVc0RLenFuQkdYZlVVb2FGODk2blVKbmtTdittSHZSSWlLTUJoVVFPbnp6R3ZIMHE5K2FzbVk5YXBxWnF3V2M4YUdET01FTWxnZVFxQlNoMFVhUUQyMkk3c2VmVGFya0ZnTE5uT3BBMGVIK3F3ZDZnL29kWCtWeVd3MEIxYTFtL3lMUGM1VlFaOXoxWkpPOExYYjRZb3JiZDEvV0xtZTdVRUI3QnIxMkZjRmcvWlZvMjZYSXNBOUp0aUJLZGF6bG94RlAwUVF3T0pwUVVvRWpndzkzVnNRM3B0MHJDS05vaDZuSnlYVkdjT3d3Zk1hZGNYUStVUnZILzUzNSswMGVZNEVnNS9aTCt3ZlV5MXBHSlVrblpPam5iakVtSEVZaHV3WTBwK3htNHhaTTFLMDJ3MURXY2M4YnNpbk10bWlaV055dUNCWi90bmhIWWp6L2daT3FMdXNnd0J6UVZkdFBGUVhlWUR2SGxSeGN3dHNSMkkxalI5U0tpZHZPYjJwazdEMC9raUt1T1h4M3BtRHc1RkFIUmJtWFZsWithbFN4ZSs0SFN1ZGl4ZmEvUEpZWTZFZW1vMGt0SnI2OGg1MlljR0t2c0g5RDd4OUZWN0w5Uzd3ZEt3S0J1WG1CVzdmYk10WjBCSVJ6RmxQY2IxbVk4bnRwc1gyWWdBdXMwY00wcXhSTFBXdDExS3h2ZmNqcXJnQzlhckUzbThKN2ZlSlJjUVZKQWVzODRyNnUvbWdiVW5xZHovZzBDMnVKb1Y3a2s5L0tXQ1ZMb3dXNU9SUzdsdloyai82cUNPa2V3K2Y1Mkkycnlxang0K3EyNS8vMXlUOXREby9teStTbFpsejlscjhPZGRqdUNIR2xkckRCbkVHRXduSlhCWG1kSjdYcStKS3RCUG1QUmVwZXdtVzk0Uk9HVkVZOUs0OCtyOGlFaEF6blR4Z1ZHZEU5T0swRVhuU0NGZHh2RjhhNEtUQzFOeThacTI3N0JOTGlGY0NITUQ1SGVoWXRjaEQraFo3OEZXQm9CQU4ra2hMeW15eUFJR1djbGE3TFc4MWxnaWNDUWR0ZGlhOE1QQUhka0h5SHFHM3BJdWh1ZXZNL2JpeGdQeXNaZTRSd3I0czRMY3ZIM1c1QkU4Z1YvNncxK1J3ZWpNekNSK0p2OC9HOUVXOFF6K1F3ZUl4WktDakErblg0YzZ0bjlZYWZVTmZsOFUrYzFXTWR3dlhBOGRhNlozUlJ1RHNYYWdBVnZUMFp4OVE2cGsvcXNDS1NBejgxelh0ZnRGZkVETlR3L25NYmg2UVdSWlRZNEtuNS9PRlhmZlNBai83NmJCQWRpWW9SRnA3YzJNcndYQlRadDVwRDFzbTJHSVZjRWZ3dHAyMGFkZjJpWlVYSTN3RFdsQ0FWWkk1VkxmNjZtTXdHWUF4ekN2bGlHbys3dmlMMTlZajRJS3owN1pvc01QVy9QcWYwL3JJenArbVAvTzdKeHhIMEx6VFo4ekd0R3NPM0VJVDV4NlZUclhXK0w5bGdlOVVNTFA1WmJmQ3ZPWWxHbk9pZUJwRW5SU0J4TisvZUJOZjBqYnR3RUU2QmFvelZ4VjRxV09MUTcrNmlrZmRHK0JLd3V4Q3lJK3IyYitnMk5NdGtYN1I3Y2ZWREtXaS9nQ0VrRDFjMUt5OHNMWGh2Z2VPUHZoNHFKWjZFOEdyN05UYkVGUGMydkRzVzJXOG1sanRGcDZjQ1pXb3NyeVJISzNROUR2Ujg4bTI5TmtWblh1cmlRSU9pU3NhRHArdjIxTTRmbFVjTHpZZXZCQUM5citNVnFOdm9EUkNnVkZqY3lnTlhLN0N4WUZqYi9sbzA3VnZaUXRsMG16bi9PdHYrZEoxMWR0cndIazFVQTZ0ZEN3ZXMzazBuVTJMU3hzeDdOTVNQWmV0c21hTXVrSkhvUFhkQ1I5SDZvem94R21yMldZeUpaTE9aRkFkZ3cyazlCQ3ozWDY5M09MeUdUc3kzcStlZUpKc2U5MnlhSWc2NzEvZjhlZ240UEFNeFFLMlh3MEx2ZmRKOUI3YytRZFNUUFN2bENyWjRMaC8yaHFtN3RiYVhEYnpBbGh1ZFNFbzdBZXVXbXFwenkxWEtWMXkxVkJycEtSTHFWUzVsWnFlTjlxOUJzVG1OVW9RTVdSTklJR0dJMFhreXNFU2NnVlpvN0hoWXJBMGFBbFNvd284RlZmdXkrWEZtb3JoT0VFb244dTV4c0Y1WUl3NWNpb25vTUlGaDIxWFIwc0hpdXVtRHRKZncrbm41aFNWRldMK1Y5UlUzRll5SUZKdlNHdzJwTlV5aWdYOEt1Y0RtamFPTzNCdm4wNlhzUWhiZk9hVWRQYm51U0RXbWpJa2s1MlRZVjFhTkkzaGxraFdyS0VaUGl3REdyeVBjUGI3L0l4bHo3YXBIa1RoL1lXdmZtc3NGNlM0a2hidkQzcUprUVVXWEJYbmZpQ1VVa2lKalFKbDhMWHRFOHFkSTZqRmJkRjJKN211Mjd5WGw0M3o5N0M5ZzFTTjJXd0VvK0REa09iUGVscEVIWGtkMG0zRE5Ja3VqVk5LTkY5VEllemYxcXhwcGRDSW1oZjhOd25hcnY0UC9WT01NLzN3UWN3NjRESUp1M0JuanhEd0lEVWpOM25hTW1vamV6bTZQRERjRngrT2w4TzVRdXcxOEdRbTRDOGE1aC9SU3o2UGNGVzZnQlRGMlRHVnhWUXFPbkdaSWFLR1l5YWRPQlV3V2h3cEZNNFkxTXBZQWdIWHEvQnRlTythS2JjR0lVV2dNS0t5TlNSNk5oOXV1Z1lzN0NDcUhDejB3cWdwM1lmWWJIbkVsRVpoZ1dmSlA1NDNmZCtPUzQxSU1xc3pHak02SkdtVXZ2Zzl0SHlFZ3ZDSVpUSzNXRUhBUkNMbWNpZGlSOFRCM2lRQnF6MUJxUnFXSi9EQVJFOFMxSi9VNEl4TDBFV0JnYjZJK1FMeDV4ZVB4cmRWNVNmclorRjJHRWpzVVpYVk5IZ2FETWROV2tzUU5aL0hBS2NOR21VMG52RUVCSSt6T21FMWl4eFhQbTRtMWJCSkhUK2tWSGt3bzhwWEVBa2FzWndUV0MyQUZmUlZZdzAvVVk0dExxMVlxTFNqWnl1YVI2ajV3SmI0QW0reVQzR1dWWHVjM1lnTlU4M2diYmxjOEpLc2ZValEwTDVqM3BVRmNYSUdjb0FWMEM3dytiNXFSaUpXeEJFcmtuOFp1WGV5V0FvV2ZlbWxBeGRwdkxkdy9yaHFYYnZhc0VYWThzQzFoZnlLY3BCOGI3bGJ5UDFYQWU0V3NjTHp4VU5iZDNYMjFOWTNQRUZ6d1h1THR0NVJmNWlLUFNXUUlqc0l2ci9Wcllidy9PQzdDTDh2TS9CVEhIWjU1WWFKTXBET3Q3UnRhdHBaT2R3Mm4xNURoK3RMalM4QWZ1WGpQUnpldWI5UUJ6VnZkcllKaFFFVUgybWt2MHk0OThCR3duZnZpanRvRmJVM1NkcTJYL2QwUzN0THl6U0w5MU56ODJPZ0JQZ3NhdSt5Z1QrdE9BZzUxSENmWGRHZnluR3FFUlR2YThBMnFQTDdQYTJOM0xzL25aZEFLOTl5NkNrMjU2NURMVzNVeExKUlkrMnQ5L3h1dnJQWjB0cFNXYjZ0MHJmVjByU1AwOUhXdXE2MWRieTFUUXVpRXJ4TXBKZmNwcmRERlRVUFZiTkZOenRZYWoxbCtkVzhuNXBiWHVRMHExdWFENE1ub0ZDaTM5MG51aGpmOXlEWXZ4eXlJM1NhRjEwWHgwcmxKaXc2M2Eza1U2cDFLMmR3a3Z5eFd4eXIxYzhUT2tGT1hXS0txajNiaXZJRVgySEdiYnBBWXVYRGpxcEQxc0UrbjFadG5jUkpybW1nY25pVkRPdXd2UFdTQ3V5d25uOWFZN1V2MDFETjZ4RFR0MXFsUTllN2hVdGJoTUtXcGNKRUJTRmI5ZVVZWEFKSDVucTBrdnNoRG0xRnJXVzM4bzdCMjlCbHo4NTlXeVBQQTErYmp3YXArUHhraHRkMUlLSXc5ZnpseWs3VjJrNU1ubXVWWHNtdHRVTnpySDN4dHRZSDZKcWpPS0syUStlbXYxNzVQcVEzOFQrOW02Uzd5ZlU4cThEK0J4aFRSZUhDdmpUbldrQU05MUpZMlFrYjVBR1BRcVdKcUE3Nm5sdyt3L2U5T1lCaXBpNGQya3RJZU9ST3YxQkZjVythZ0NoQTNlc2xFWFVHYmNJR0FSVGM0bmhUMTFCWjY2WFh6VEZMRk55WklUNU1MVytyeUJtb2RXMlZyRVhEUk1acVJELzJxeU1MNzJYZ1FwR0VMZk5vejcwZ3ZvN0JrQnp4V3A2ZWhBVmFjbnBldFhrTjZ4SkdkZ2lKeWhwSmg3YUNNSWdETWNwUlQ4cWlhTHZMN0dhTlUrWm40dWlscmdhM1lvTStpS3NISHFqOUd1NG5ncnBGSG9XcnZsRlFQc1BjcHhsanFPTHN2ZG1tamJyZW1zSHJhOSt1U3NHRCtvVnVwYnNPYjdGeFpZVTZzcXhSYmR4MG5XT3hra2tpdXM0dm53L0swV0NKUjV1STc1WFhUMzE0QnMrOURUbkJ4YnlSbU5HNXd3NUJnV1BVSmhuWnNsMldXM041KzNVcmRpVTBMaXF4SUM5ZkpodWZObCtXVEpxdTBMY1Nra3hYNHpGQWU1UldSTFZjUGo1VE0xTkZSdFA1YmJma2MvWWJOTlVJaUxucFRCTFRzcnNwZ0NNWngybkZha012SnVjb2lqd2FVTWFLZUw3UVF1ZWo2S08yM0pGbFFJdFV1all6Ty9TWXVFMDdmYnZJUk5HOE1uY3BvNWQzbDVsSzBqSWptZHU0OVk5Ylg2bzI2WWxaYzdQZkhmOTB2TWRtSGx3WlFUeUhETlgxR2w1azFqN2NQNC81TU5FcDQwUUp6VE0zR0xpdjBKcmZCUjR1QWZmMHFCQk1XMEtVNFZtcTJPTXFjTE1kVERldmFQaUNtYlk0d1l5VkwxZ1pOblZSc2o0SExwYUF1ZWFucTRMY0NwbFhwUktpa3ltVTZZYWM0ZXUrRUlvKzEvTjUrczlGd2k5MFFQMk5yZ0NLR3BURExES1dMYVJXNmtiUGFtTjNFWm1LUklRUXlkVWViRVMwK1hHcWRxaGJnTVNtNHVIOWhiN3dBYXFPSVYyQzRLUFV2bUlFTDFBUGZBMzRLNWxtaXhWMzZHODBLTHNiVW8xQ251ckN5QlJGN2tjRlMrOUVzWVgvelFmZjhCL2JmZFBreXpzcE1JNHFqcG5zWHJyQW83LzFxZGZuUzBUTTNBYVMyVVR2UjhlTFZ1TGVqdXdMbEhkYnduVVdYWkZWbW94aG5hTExqakNiTmZpWjJRSkpMZ2lLMjhxT3VreWx5eFp5ZXVKUDNDL3BJYlE2VEYydWhYZ2FjS1pXRmJ2Z3ozR3Z3aDVnYUdkdElDSFpkQVB3UGFDekl1amFlMWZNZE9GOTJkNFF3V0h2T1gyTEtESmxqMmk2Tmpmb2hxc2doRnV1RzloS3JhWE4wb2hWMEVPa0dhTExMek9NdnVoWEU4dlU1ZGJvY3Nab0RNbE1JVE55K1RXaTBKS0lMNURVKzAvcGQwZjBRNG02Q1hXcDhNSFFJK1Y5bmhuY3dTREtNY29RL2NoelY3OWJLYysvdnZnNS9TRndPNzkwN1BENXUvZFV5dmV2OUQyalgwWlpkQWVTUmkvdmY2cTgzV096SnhpWVdoaktIOXA2RG1LVWR0dzM1ZjRTeHF0Ykg3b2pTY1dIRnJuVytEN2xZbTFOaytIbWF5cndkUFJDdmZZbThNc2xqeG9mRWMyTXVEWDMydy9NTStpbHV2enJEWndUY2VsdHVwOXVodDBHbDQ4ZCtRbkhXMDVVc2p6WGEvbm4yYk5zODNUOUVIWm91OG50NDhzRk9QczE3ODkzQ2JYYjJzTkxXVEdOanBVNEFNT1RyTGhXeTQ1UFhxdVZScXhPVlFUV1NHTldoeXI4eUI1NDhvSldZQVBaWGNEaHpjS085Mys4QitPNVI4eEtxTjVjbW95a0ZDbzFyaFlGWUsyb2hHZXpSdFFWakc2cDhqbkFPbFVwaitQcWJjUy9ubElDTldRNEM3QkVjUDFPYjkvWW5jNnRhNEkzTG5KSVZrYjdObUhkV0tqMndyOVp6S1RpNzVzWEsxTkRlNXhkWTRvcHo4ckUvUWVuSC9jc1dYWXFGZG1iY1FqWDJBZml0cEJFR3BHN2ZQSXV2ZkNyS3hWYXY5WVFZbVdramc0M3FBTFRmSmR0ektvVXhueEUvM2ZST20vUmpLaTd1ekFuT2FnZ1NGblhucGJySUhDMkxOZVdvdkZsMnBacXJnbi81S0xrc2pFaUlNTmkvSWhFby9SRlpaZy9heFlES1MvWUpVenJVN3RnaDl1RG03anRwQ0ZJV2I4OTJ4MkkyeXF5TVNyZWJyOUlxMlBXc0oyTVhyd3JOU0loM1FBNUEyL1pVSUswMWZid3ZtWUVGOHFHcXBCaUxHWHFYUzhldXdaaUxJN1Y5cWFQTGhqMjBVSlA5MnFWRjZWNHZVUWRZczM4bDlCVmdTbmNZT0c3WlZrdGl0cmZmdnRCMmI3UUorS0dtbk5ldkpValdldmhpQkN2VWlHTlBkeUdlQVhMdDBKNGZwQ2MyR2tGOTlYVFVrRzRWL3RxcEtYSDllbXBCeFZudjJ1RFhYcGZFOG1zbW1OV2xPTVkyRit3eVZETUdTZENZZVBtWW02VG9kT3lDem5UNW5ESU5GSFFJaVg0WW5VNm9WM3E5VWd3bmN5bE9HYVNabytYU2FRbVZqdXpCazNHYUtRWFJ4Wnh1ZzFKdnMvMHcyRDRmMXZ4eVVRZUdCWjV2VElEKzRkYzhzZDRUKzNRdmxmQVhCK2FJNytVemM3ekZBK0xPWnhmNUtDOFFtMXZmOHhJQWRCb1V6bDFOS1ArUkhkRjRmaXA1bGNhbW5ZM2QxUzF2MWIvdFdQSVlpOFJoTDJrNVE1bmFVR2c4VG9hMTJpVG1GbWJVQTBVVFdoMENUT21TK3BpZ0hjbHBEaHg4R2FvdlNXakxYUXIwVklFb2gvejFLVVR0bjNYZU9nNzlEQys1Q1NVNlJyZFBlbVRYLzFzaWR2NkQ1Z1ZhVlpzSlRQblV6c2xWNnZGVXZYVkV1blZISWxFYzdWWFpwTkxiYkt2TWJCc2I2L2tzMytMb2VYVFY5SVFzZ01OOWwwYjJnSlpuUE5wT003dXZaNHVXYllkNTlSVE9UdzNKR1hwbnZxcWhiWCtHMERLVkN0Z0VsMVVMUlBmM2VyZ2tOOVBGNjRFRUhXWlJ0M0UyNjIxZlBTSGFqK3hTTDJIaGx6d2RUMnpxdmgvd1pkc0NFak5vNG91SUxkN0ljZTFiUkh3ZnBWV0JaaGpmWmlaVEF0Rk5WTUxnNmdXTWhocW1XaEswUjNFcG9LdHh5dVd6UzFxNW1ycE93cThlVnkzQy9GUmVSTUlIS2VaS0VJK2VZaXVvbWwyQ1BvTUZqWDZxOEJsdjBjRTNWdW9RazhLNXllTXBkTkhJSWtzM3hoTENTWGxmRThxdjN4K2p3OVFZcGhTNHpMSE5mM3p0ckVtTUowNEcwMTJVc1BYNSt0cXVrWGJWMmhLYlVrUlRJNmMrRHhEZmxNaHhvc0NJYy96Z0poSEZVdGRqeWx2V0NrcHVMNDJkV0RmcE9sdWFxbFoxaE5CdE5zTGZCR1JxVUptSVN2OVo0RkVla3Znald0c2JHcjhRZTUySTdpOUpmZ1JYZ09RdlY3YkpOYXQrT3R0WS9Rd3lrdU53SDRqQzFiNVpVdlpwNyt1cTJGa3VyczRtZ09oZHJXL2Q5amdUUTY3cGdLRHI4aG0vazdvOW83czUwNnkyQ2VlWTNQdU84Rm1uYnp2YnRZUExhMy9XL3JaRkpaN0dnSU0zNjdYd1BZamdNcHIvRU1nNFhvRG01R3VsMWdIczcvQ0lTYWIzenVnazA0TWFBMElWRVV2cm0zdXBXRFI4RGNLaGx0UU1GeU5naUVUSS9nbmU2MmtUZDZjMmRiazVXSERyeDdaSklzcWNLWXZTdUpSbElhaW9CdEZ3VHNvQ3Y2VW9nVEFkY2dKTGNnSnp5SW5QSUtjOEtHVW9pOTB3ZlNhUnV3QW9vK29xYnFSMnVjUnBnNC9jajNCVEpqOUtlWng0R2ZqbW1BWDVUbVdZQ2xUTU55bXp3UWx4V21EUjlWKy9pT2NKUFpmbUI2SGwrQUdqWTBvNHRSdDF2Y0h1NGJGYW4yeXorQWJSak5iOG8xU1RqZEdHcU5PeFg0U0lUVnB5Q1BYSTh5aGlUM0JBaVllM3pJVitLaGs1aVJDUG1qVCszU2xlcCt1QnZuZzVER0xRZkVYQThFQTluYnJuWG9Bc1h3eGU3K3VJdEFJZm8zNjhVZzNRbUJxK3dqb2JmUXgrZ1I5aWo1RG42TXZ3SmZnUGVrclV2d2FxU0srVmQ3RDcrRDN6QThlMnZoMkl6RDl0ZW54VkQ2SkM0NTEyeHQ4bGo1SGZUOVBmeHArb3M0SHRBVmR3WXpLbktxK1FzenhleG8zckd3TGNyZDJWZFFRTjFtWHgxUGN3QzF1NHNQYnpCTkVMdjJMYUxEZFV0UDJvYlF4SzhhekhvTzRXM2lEM1Q0OWZXZVUyZWZSM2Y3L3lMRllabURRWHZjOUs5bGFnVVVBTWVMZWZ4YXNBakNIZlZnQVpCNklkWXM1MFh1MTNicUxGOWIyNEk5WkQyc0RiaTE0L3o4Z3kxaXhsdGpndk9VQjVMb0FnQlhZemFsSmdzYU1yUjF0WFlkUlJsR0g5UlFkc0UrNnhtUmc4eUllbzhveFJ1TVFCU29QdU1PTVlNTGRzNHhHQ0orSDJTTWk1YWJ1cy93Q1ZZNXROQTBYbTB5OXhHTTBKdEFPcTFwZ0swQmRLQWY3REtHdjBNZm95OUYvWkdsYWxOdmx3bmxDY2hndFJMOWxXNkFyNEtOK29TZGdJeFhwSUp5RjI3Z08yTy9OQWxoMVZYZU5PeVBkOS8zU0lLQS9WQ2szOVk0RVBZaXVIZU1CSEpwV2ttM1FlSkVMUEVZTDBXOWdnWkthOXpHSHp2OGJJN0RIZS80WWJoZmUyRTlpb085Sk0zMjNidWJzU2tRdmlNdytuM1FOSlVlOHRPdHJ6eTV2MkVhNjdBMnhWWlRzNHU4eTFqam51NTNOQzNrRWJpRS9aanNpdWxPajIwUTY4VTZZRWltdHhrdXVDM3ZMOFlaTG8yc0ZFYWRReHV2RzlsRTBldDYrbGsrN01RSG9OMFBZbHNhWGIrdmFOM3RyMXk0MmRWbWtmU2JWNXhpM0JiVjF1MTFNOXdEMGxPekxYbllDUjkwdDR3dCtyaXVvS0ExOXl1d0QycExBSndRN1ozeStjSW5pOGtnNjE4blVTQVQyTzZWSy8zV0JJYTFoVDJldzdFb0ZTcmFNSWorVFdFMCs5NHJhSEFKd0VUOStaN3BsWEVqcTN4REgzUURnNUlHTys1TDhMMitKLytpd3p4UE14Z0VpQmdBSS9peVpvSEFtTVAwL2VFNWs5eTZpTmUxazZ3N1d6NHVjcnFUcHh5WjNCZVVKdjJSeXAzWEZUUFlkeUw3Skl3UjRSa2p6TjdhelhpMkNJTUUwcFRYb2RaYzdJU2pkK3JMNEZIeEdFeTNBUkhVQXgxVi9MWnZpamw4d1dWMm0xZlNDZitzd2MwVzA2T3FhNW02U0t6eXRSbmhRVmFnTTZNY2hSZ2tKTVhZRThZaEI5dW1Lb29UcEdScU5rSzRmeDRPVyt1KzRDcmNHWXJnVFo1dm1HOVRVanRmbmlxWVpVV1Q2VWcwZUUzaGtpVUc1bkJwZ2pGMTREWGJvK0RRUmJmcFYxM3pNcGxJSkN1YytWTEp4R2dhenhGd1dJM1pMbmo2NVg1MDB4QjAzb1owTUw0YVNQNkd2UVhLYnVQTXJVcXZtYVFoM1VHWnJSVVpOaVlvOXRYVFJVN3hHbGRTeXBZNDViQXJMVUxNenRBYjY1aW1kSU9hUkRZcElVRjVCc0lvN0tRNi9VelN3dEkyU2VkUzFrN1FvSVhQU2MwR1RGNHV6V2h4THh2d054RjdoOXIxMkxMWVhJZDlGRDVzck8vUzMyYktlV3paUEpxWC9BTTNRaDFwdWZTdDc2amlRdllFbDFtTTBlTTdUTWt3QUEzdDlTRG03NlphWEtMWjU2NXZwTzBpeHZmUXlDSTJqNUJPaFYvazJQaVYzc1J0NEtxRmwvbUR1RG5VejZtN1Z2NzhSUGIzSTFqUE1YVkNxVllpZitFVEZIblczcmNoTWI1MWUxdXVWcHpMMGxnR1RJQVVNYVJVRmNLQURzSUVFMFFJWm1LZnlEVWxGWlljbzJhNi80M1FEQ2FYc2tjTUdPSzJzNUtGenFQeWk3c2pmSjlTOE5Wb2pqOG9YMU1qdXlmRUVRSUNQY1dpbUFXZ2pMQndrSnEwT0pqaWRIWnoyaVkzT1p6c0VrZG5yRU5seW5TTllZbDV5aERLWFlnOGoxYnFUQ0Foc25DN3k1S3RRS0p0WGxtSXloVXU4TkxMQkJaaXl1UU9VeURiSmRFVW15RFdackw5Q2VhYVpZaElIN1VTMHVKWG1lYlRJaWpaQmNyRjgwMjg2SnlldjdFeTF4RVFPcXNtVHc3bkt0ZEFVWmV6eVRlRGxreTNYQkdVWjQzTEtwaDdRSEs3eHFlQVFldnRvY1dSbEV0SmxBMDFSWk1wUktUVkZYZXJweFZ4RnhiNjhuRjdqc3E3R2JkVTIwQnVlSVZKT3dzZkZxNFRQQklVU09MaTRKTXJRVno5OWRaTWhhUEM0V1RzWXlnRW5acXM0bXJ3WUtkeGV1UGxZS1RMSnFEUy9WNG80aENvK0R2TlFiL1FJK3ZIb3JlZmdNVFBNbTRZNXUwNzVQNkpJWGhIL2UxL3lud0VBKSBmb3JtYXQoXFxcIndvZmYyXFxcIik7dW5pY29kZS1yYW5nZTp1KzAwPz8sdSswMTMxLHUrMDE1Mi0wMTUzLHUrMDJiYi0wMmJjLHUrMDJjNix1KzAyZGEsdSswMmRjLHUrMjAwMC0yMDZmLHUrMjA3NCx1KzIwYWMsdSsyMTIyLHUrMjE5MSx1KzIxOTMsdSsyMjEyLHUrMjIxNSx1K2ZlZmYsdStmZmZkfWJvZHksaHRtbHtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS40fWh0bWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLXBhcmFncmFwaCxwe2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjY7dGV4dC1hbGlnbjpqdXN0aWZ5fS5tb25zdGVyLWgxLGgxe2ZvbnQtc2l6ZTozcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjE1O21hcmdpbjo0cmVtIDAgMS41cmVtfS5tb25zdGVyLWgyLGgye2ZvbnQtc2l6ZToyLjVyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMjttYXJnaW46NHJlbSAwIDEuNXJlbX0ubW9uc3Rlci1oMyxoM3tmb250LXNpemU6MnJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4yNTttYXJnaW46NHJlbSAwIDEuMjVyZW19Lm1vbnN0ZXItaDQsaDR7Zm9udC1zaXplOjEuNXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4zO21hcmdpbjo0cmVtIDAgMS4yNXJlbX0ubW9uc3Rlci1oNSxoNXtmb250LXNpemU6MS40cmVtO2ZvbnQtd2VpZ2h0OmJvbGRlcjtsaW5lLWhlaWdodDoxLjM7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfS5tb25zdGVyLWg2LGg2e2ZvbnQtc2l6ZToxLjNyZW07Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjEuMzttYXJnaW46NHJlbSAwIDEuMjVyZW19cCtoMXttYXJnaW4tdG9wOjMuNzVyZW19cCtoMnttYXJnaW4tdG9wOjNyZW19cCtoM3ttYXJnaW4tdG9wOjIuMjVyZW19cCtoNHttYXJnaW4tdG9wOjEuNXJlbX1wK2g1e21hcmdpbi10b3A6Ljc1cmVtfWRpditoMSxkaXYraDIsZGl2K2gzLGRpditoNCxkaXYraDUsZGl2K2g2LHAraDZ7bWFyZ2luLXRvcDowfS5kZWNve2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMSkgMCx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTIpIDUwJSx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTMpIDEwMCUpOy13ZWJraXQtYmFja2dyb3VuZC1jbGlwOnRleHQ7YmFja2dyb3VuZC1jbGlwOnRleHQ7YmFja2dyb3VuZC1zaXplOmNvdmVyO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpO3RleHQtZmlsbC1jb2xvcjp0cmFuc3BhcmVudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjp0cmFuc3BhcmVudH06Oi1tb3otc2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9OjpzZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX1rYmR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czouMjVyZW07Ym9yZGVyLXJhZGl1czoxMHJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTtwYWRkaW5nOi4yNWVtIC42ZW07dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfWRldGFpbHN7bWFyZ2luLWJvdHRvbToxcmVtfXN1bW1hcnl7Y3Vyc29yOnBvaW50ZXI7Zm9udC1mZWF0dXJlLXNldHRpbmdzOlxcXCJ0bnVtXFxcIjtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjFlbTtwYWRkaW5nOi42cmVtIDFyZW19ZGV0YWlsc1tvcGVuXXtwYWRkaW5nOi42cmVtIDFyZW0gLjc1cmVtfWRldGFpbHNbb3Blbl0gc3VtbWFyeXttYXJnaW4tYm90dG9tOi41cmVtO3BhZGRpbmc6MH0ubW9uc3Rlci1uby11c2VyLXNlbGVjdHstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9QGtleWZyYW1lcyBkZXRhaWxzLXNob3d7MCV7b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0uNWVtKX19ZGV0YWlsc1tvcGVuXT46bm90KHN1bW1hcnkpe2FuaW1hdGlvbjpkZXRhaWxzLXNob3cgLjE1cyBlYXNlLWluLW91dH1kZXRhaWxzW29wZW5dPjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0ubW9ub3NwYWNle2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHktbW9ub3NwYWNlKX1kaXZbZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17aGVpZ2h0OjEwMCV9YnV0dG9ue21pbi13aWR0aDotbW96LW1heC1jb250ZW50O21pbi13aWR0aDptYXgtY29udGVudDt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1idXR0b25de2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOm5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbjt0cmFuc2l0aW9uOndpZHRoIDEwcyBlYXNlLWluLW91dH1kaXZbZGF0YS1tb25zdGVyLXJvbGU9bGFiZWxde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7Z2FwOi40cmVtO2p1c3RpZnktY29udGVudDpjZW50ZXI7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9c3RhdGVde2FsaWduLWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1zZWxmOnN0cmV0Y2g7ZGlzcGxheTpmbGV4O3RyYW5zaXRpb246d2lkdGggMTJzIGVhc2UtaW4tb3V0fVtkYXRhLW1vbnN0ZXItcm9sZT1zdGF0ZV0+aW1nLFtkYXRhLW1vbnN0ZXItcm9sZT1zdGF0ZV0+c3Zne21hcmdpbi1sZWZ0Oi4zZW19W2RhdGEtbW9uc3Rlci1yb2xlPXN0YXRlXT5zdmcuc3VjY2Vzc2Z1bHthbmltYXRpb246Ym91bmN5IC41cyBsaW5lYXIgZm9yd2FyZHM7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzZnVsKX1bZGF0YS1tb25zdGVyLXJvbGU9c3RhdGVdPnN2Zy5hY3Rpdml0eXthbmltYXRpb246Ym91bmN5IC41cyBsaW5lYXIgZm9yd2FyZHM7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1hY3Rpdml0eSl9W2RhdGEtbW9uc3Rlci1yb2xlPXN0YXRlXT5zdmcuZmFpbGVke2FuaW1hdGlvbjpib3VuY3kgLjVzIGxpbmVhciBmb3J3YXJkcztjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWZhaWxlZCl9W2RhdGEtbW9uc3Rlci1yb2xlPXN0YXRlXT5zdmcuYWN0aXZpdHl7YW5pbWF0aW9uLWR1cmF0aW9uOjFzO2FuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6aW5maW5pdGU7YW5pbWF0aW9uLW5hbWU6YWN0aXZpdHk7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMCwwLC4yLDEpfVtkYXRhLW1vbnN0ZXItcm9sZT1zdGF0ZV0uc3RhdGVsZXNze2Rpc3BsYXk6bm9uZX1Aa2V5ZnJhbWVzIGFjdGl2aXR5ezAle3RyYW5zZm9ybTpzY2FsZSgxKX01MCV7dHJhbnNmb3JtOnNjYWxlKC4xKX10b3t0cmFuc2Zvcm06c2NhbGUoMSl9fUBrZXlmcmFtZXMgYm91bmN5ezAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjEpfTgwJXtvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlKDEuMTUpfTkwJXt0cmFuc2Zvcm06c2NhbGUoLjkpfXRve3RyYW5zZm9ybTpzY2FsZSgxKX19IFxufWAsIDApO1xufSBjYXRjaCAoZSkge1xuICBhZGRBdHRyaWJ1dGVUb2tlbihkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoJ2h0bWwnKSwgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZSArIFwiXCIpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBTdGF0ZSwgZ2V0U3RhdGVJbnN0YW5jZUZvciB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpbnRlcm5hbFN5bWJvbCA9IFN5bWJvbChcImludGVybmFsU3ltYm9sXCIpO1xuXG4vKipcbiAqIFRoaXMgU3RhdGUgY2xhc3MgcmVwcmVzZW50IGEgU3RhdGUgd2l0aCBwcmVzZW50YXRpb25cbiAqXG4gKiBAc2luY2UgMS41LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKi9cbmNsYXNzIFN0YXRlIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc3RhdGVcblx0ICogQHBhcmFtIHtzdHJpbmd9IHByZXNlbnRhdGlvblxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKi9cblx0Y29uc3RydWN0b3Ioc3RhdGUsIHByZXNlbnRhdGlvbikge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSB7fTtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5zdGF0ZSA9IHZhbGlkYXRlU3RyaW5nKHN0YXRlKTtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5wcmVzZW50YXRpb24gPSB2YWxpZGF0ZVN0cmluZyhwcmVzZW50YXRpb24pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBzdGF0ZVxuXHQgKi9cblx0Z2V0IHN0YXRlKCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsU3ltYm9sXS5zdGF0ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gcHJlc2VudGF0aW9uXG5cdCAqL1xuXHRnZXQgcHJlc2VudGF0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsU3ltYm9sXS5wcmVzZW50YXRpb247XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uVHlwZXMuU3RhdGV9XG5cdCAqL1xuXHRnZXRDbG9uZSgpIHtcblx0XHRyZXR1cm4gbmV3IFN0YXRlKFxuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uc3RhdGUsXG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5wcmVzZW50YXRpb24sXG5cdFx0KTtcblx0fVxufVxuXG4vKipcbiAqIEBzaW5jZSAxLjUuMFxuICogQHBhcmFtIHN0YXRlXG4gKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5UeXBlcy5TdGF0ZX1cbiAqL1xuZnVuY3Rpb24gZ2V0U3RhdGVJbnN0YW5jZUZvcihzdGF0ZSkge1xuXHRzd2l0Y2ggKHN0YXRlKSB7XG5cdFx0Y2FzZSBcInN0YXRlbGVzc1wiOlxuXHRcdFx0cmV0dXJuIG5ldyBTdGF0ZShcInN0YXRlbGVzc1wiLCBcIlwiKTtcblx0XHRjYXNlIFwic3VjY2Vzc2Z1bFwiOlxuXHRcdFx0cmV0dXJuIG5ldyBTdGF0ZShcblx0XHRcdFx0XCJzdWNjZXNzZnVsXCIsXG5cdFx0XHRcdCc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgY2xhc3M9XCJzdWNjZXNzZnVsXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPjxwYXRoIGQ9XCJNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0em0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNnpcIi8+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+IG1heFdpZHRoKSB7XG5cdFx0XHRcdFx0XHRcdFx0YXZhaWxhYmxlV2lkdGggPSBtYXhXaWR0aDtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmIChhdmFpbGFibGVIZWlnaHQgPiBtYXhIZWlnaHQpIHtcblx0XHRcdFx0XHRcdFx0XHRhdmFpbGFibGVIZWlnaHQgPSBtYXhIZWlnaHQ7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRPYmplY3QuYXNzaWduKGVsZW1lbnRzLmZsb2F0aW5nLnN0eWxlLCB7XG5cdFx0XHRcdFx0XHRcdFx0Ym94U2l6aW5nOiBcImJvcmRlci1ib3hcIixcblx0XHRcdFx0XHRcdFx0XHRtYXhXaWR0aDogYCR7YXZhaWxhYmxlV2lkdGh9cHhgLFxuXHRcdFx0XHRcdFx0XHRcdG1heEhlaWdodDogYCR7YXZhaWxhYmxlSGVpZ2h0fXB4YCxcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwib2Zmc2V0XCI6XG5cdFx0XHRcdFx0Y29uc3QgbyA9IGt2Py5zaGlmdCgpO1xuXHRcdFx0XHRcdGNvbmZpZ1tcIm1pZGRsZXdhcmVcIl1ba2V5XSA9IG9mZnNldChwYXJzZUludChvKSB8fCAxMCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJoaWRlXCI6XG5cdFx0XHRcdFx0Y29uZmlnW1wibWlkZGxld2FyZVwiXVtrZXldID0gaGlkZSgpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihgVW5rbm93biBmdW5jdGlvbjogJHtmbn1gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRwb3BwZXJFbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KFwidmlzaWJpbGl0eVwiKTtcblx0XHRwb3BwZXJFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG5cblx0XHRhdXRvVXBkYXRlKGNvbnRyb2xFbGVtZW50LCBwb3BwZXJFbGVtZW50LCAoKSA9PiB7XG5cdFx0XHRjb21wdXRlUG9zaXRpb24oY29udHJvbEVsZW1lbnQsIHBvcHBlckVsZW1lbnQsIGNvbmZpZykudGhlbihcblx0XHRcdFx0KHsgeCwgeSwgcGxhY2VtZW50LCBtaWRkbGV3YXJlRGF0YSB9KSA9PiB7XG5cdFx0XHRcdFx0T2JqZWN0LmFzc2lnbihwb3BwZXJFbGVtZW50LnN0eWxlLCB7XG5cdFx0XHRcdFx0XHR0b3A6IFwiMFwiLFxuXHRcdFx0XHRcdFx0bGVmdDogXCIwXCIsXG5cdFx0XHRcdFx0XHR0cmFuc2Zvcm06IGB0cmFuc2xhdGUoJHtyb3VuZEJ5RFBSKHgpfXB4LCR7cm91bmRCeURQUih5KX1weClgLFxuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0aWYgKG1pZGRsZXdhcmVEYXRhLmFycm93KSB7XG5cdFx0XHRcdFx0XHRjb25zdCBzaWRlID0gcGxhY2VtZW50LnNwbGl0KFwiLVwiKVswXTtcblxuXHRcdFx0XHRcdFx0Y29uc3Qgc3RhdGljU2lkZSA9IHtcblx0XHRcdFx0XHRcdFx0dG9wOiBcImJvdHRvbVwiLFxuXHRcdFx0XHRcdFx0XHRyaWdodDogXCJsZWZ0XCIsXG5cdFx0XHRcdFx0XHRcdGJvdHRvbTogXCJ0b3BcIixcblx0XHRcdFx0XHRcdFx0bGVmdDogXCJyaWdodFwiLFxuXHRcdFx0XHRcdFx0fVtzaWRlXTtcblxuXHRcdFx0XHRcdFx0Ly8gbW9uc3Rlci1ib3JkZXItd2lkdGggPSArIDQgKDIqMikgKHNob3VsZCBjb21lIGZyb20gY3NzKVxuXHRcdFx0XHRcdFx0Y29uc3QgYXJyb3dMZW4gPSBhcnJvd0VsZW1lbnQub2Zmc2V0V2lkdGggKyA0O1xuXG5cdFx0XHRcdFx0XHRjb25zdCBib3JkZXJTdHlsZSA9IHtcblx0XHRcdFx0XHRcdFx0Ym9yZGVyTGVmdDogXCJ0cmFuc3BhcmVudFwiLFxuXHRcdFx0XHRcdFx0XHRib3JkZXJSaWdodDogXCJ0cmFuc3BhcmVudFwiLFxuXHRcdFx0XHRcdFx0XHRib3JkZXJCb3R0b206IFwidHJhbnNwYXJlbnRcIixcblx0XHRcdFx0XHRcdFx0Ym9yZGVyVG9wOiBcInRyYW5zcGFyZW50XCIsXG5cdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRjb25zdCBkZWZhdWx0Qm9yZGVyID1cblx0XHRcdFx0XHRcdFx0XCJ2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkgdmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KVwiO1xuXG5cdFx0XHRcdFx0XHRzd2l0Y2ggKHNpZGUpIHtcblx0XHRcdFx0XHRcdFx0Y2FzZSBcInRvcFwiOlxuXHRcdFx0XHRcdFx0XHRcdGJvcmRlclN0eWxlLmJvcmRlclJpZ2h0ID0gZGVmYXVsdEJvcmRlcjtcblx0XHRcdFx0XHRcdFx0XHRib3JkZXJTdHlsZS5ib3JkZXJCb3R0b20gPSBkZWZhdWx0Qm9yZGVyO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJib3R0b21cIjpcblx0XHRcdFx0XHRcdFx0XHRib3JkZXJTdHlsZS5ib3JkZXJUb3AgPSBkZWZhdWx0Qm9yZGVyO1xuXHRcdFx0XHRcdFx0XHRcdGJvcmRlclN0eWxlLmJvcmRlckxlZnQgPSBkZWZhdWx0Qm9yZGVyO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJsZWZ0XCI6XG5cdFx0XHRcdFx0XHRcdFx0Ym9yZGVyU3R5bGUuYm9yZGVyUmlnaHQgPSBkZWZhdWx0Qm9yZGVyO1xuXHRcdFx0XHRcdFx0XHRcdGJvcmRlclN0eWxlLmJvcmRlclRvcCA9IGRlZmF1bHRCb3JkZXI7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRcdFx0Y2FzZSBcInJpZ2h0XCI6XG5cdFx0XHRcdFx0XHRcdFx0Ym9yZGVyU3R5bGUuYm9yZGVyQm90dG9tID0gZGVmYXVsdEJvcmRlcjtcblx0XHRcdFx0XHRcdFx0XHRib3JkZXJTdHlsZS5ib3JkZXJMZWZ0ID0gZGVmYXVsdEJvcmRlcjtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Y29uc3QgeyB4LCB5IH0gPSBtaWRkbGV3YXJlRGF0YS5hcnJvdztcblxuXHRcdFx0XHRcdFx0T2JqZWN0LmFzc2lnbihcblx0XHRcdFx0XHRcdFx0YXJyb3dFbGVtZW50LnN0eWxlLFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0bGVmdDogeCAhPSBudWxsID8gYCR7eH1weGAgOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdHRvcDogeSAhPSBudWxsID8gYCR7eX1weGAgOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdC8vIEVuc3VyZSB0aGUgc3RhdGljIHNpZGUgZ2V0cyB1bnNldCB3aGVuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gZmxpcHBpbmcgdG8gb3RoZXIgcGxhY2VtZW50cycgYXhlcy5cblx0XHRcdFx0XHRcdFx0XHRyaWdodDogXCJcIixcblx0XHRcdFx0XHRcdFx0XHRib3R0b206IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0W3N0YXRpY1NpZGVdOiBgJHstYXJyb3dMZW4gLyAyfXB4YCxcblx0XHRcdFx0XHRcdFx0XHR0cmFuc2Zvcm06IFwicm90YXRlKDQ1ZGVnKVwiLFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRib3JkZXJTdHlsZSxcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0KTtcblx0XHR9KTtcblx0fSkucnVuKCk7XG59XG5cbmZ1bmN0aW9uIHJvdW5kQnlEUFIodmFsdWUpIHtcblx0Y29uc3QgZHByID0gd2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMTtcblx0cmV0dXJuIE1hdGgucm91bmQodmFsdWUgKiBkcHIpIC8gZHByO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywgMjAyNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IFNlbGVjdFN0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IFNlbGVjdFN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRTZWxlY3RTdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIHNlbGVjdCB7IFxuLmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmlubGluZXtkaXNwbGF5OmlubGluZX0uaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5ncmlke2Rpc3BsYXk6Z3JpZH0uaW5saW5lLWdyaWR7ZGlzcGxheTppbmxpbmUtZ3JpZH0uZmxleHtkaXNwbGF5OmZsZXh9LmlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXh9LmhpZGRlbiwuaGlkZSwubm9uZXtkaXNwbGF5Om5vbmV9LnZpc2libGV7dmlzaWJpbGl0eTp2aXNpYmxlfS5pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW59Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMSwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0yLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci0we2JvcmRlci1yYWRpdXM6MDtib3JkZXItc3R5bGU6bm9uZTtib3JkZXItd2lkdGg6MH0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMiwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMSwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMiwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMywubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXS5mbGV4e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fTpob3N0e2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmJsb2NrfS5tb25zdGVyLWJhZGdlLXByaW1hcnl7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLXByaW1hcnksLm1vbnN0ZXItYmFkZ2UtcHJpbWFyeS1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1wcmltYXJ5LXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2Utc2Vjb25kYXJ5e3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS1zZWNvbmRhcnksLm1vbnN0ZXItYmFkZ2Utc2Vjb25kYXJ5LXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1zZWNvbmRhcnktcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS10ZXJ0aWFyeXtwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2UtdGVydGlhcnksLm1vbnN0ZXItYmFkZ2UtdGVydGlhcnktcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS10ZXJ0aWFyeS1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLWRlc3RydWN0aXZle3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS1kZXN0cnVjdGl2ZSwubW9uc3Rlci1iYWRnZS1kZXN0cnVjdGl2ZS1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTEpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLWRlc3RydWN0aXZlLXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2Utc3VjY2Vzc3twYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2Utc3VjY2VzcywubW9uc3Rlci1iYWRnZS1zdWNjZXNzLXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMSk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTEpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLXN1Y2Nlc3MtcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS13YXJuaW5ne3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS13YXJuaW5nLC5tb25zdGVyLWJhZGdlLXdhcm5pbmctcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMSk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2Utd2FybmluZy1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLWVycm9ye3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS1lcnJvciwubW9uc3Rlci1iYWRnZS1lcnJvci1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTEpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLWVycm9yLXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPXBvcHBlcl17YWxpZ24tY29udGVudDpjZW50ZXI7YmFja2dyb3VuZDp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7ZGlzcGxheTpub25lO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2xlZnQ6MDtwYWRkaW5nOjEuMWVtO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3dpZHRoOi1tb3otbWF4LWNvbnRlbnQ7d2lkdGg6bWF4LWNvbnRlbnQ7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtbW9kYWwpfWRpdltkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXJdIGRpdltkYXRhLW1vbnN0ZXItcm9sZT1hcnJvd117YmFja2dyb3VuZDp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7aGVpZ2h0OmNhbGMobWF4KHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpLCAtMSAqIHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpKSoyKTtwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOmNhbGMobWF4KHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpLCAtMSAqIHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpKSoyKTt6LWluZGV4Oi0xfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250YWluZXJdey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lO2FwcGVhcmFuY2U6bm9uZTtmbGV4OjQgMCA5MCU7bWluLWhlaWdodDoxLjRlbTtvdmVyZmxvdzphdXRvO3Njcm9sbGJhci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO3Njcm9sbGJhci13aWR0aDp0aGluO3dpZHRoOjEwMCV9LmQtbm9uZXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fWRpdltkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtkaXNwbGF5OmZsZXg7aGVpZ2h0OjEwMCU7cG9zaXRpb246cmVsYXRpdmV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRhaW5lcl0ub3Blbnstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBkPSdNNy42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBsNiA2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA1LjcwN2wtNS42NDYgNS42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDh6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGQ9J003LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMGw2IDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDUuNzA3bC01LjY0NiA1LjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOHonLyUzRSUzQy9zdmclM0VcXFwiKX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udGFpbmVyXS5jbGVhcixbZGF0YS1tb25zdGVyLXJvbGU9Y29udGFpbmVyXS5vcGVue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXIgY2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyIGNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6LjhlbTttYXNrLXNpemU6LjhlbX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udGFpbmVyXS5jbGVhcnstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXthY2NlbnQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItY29sb3IpOy1vLWJvcmRlci1pbWFnZTppbml0aWFsO2JvcmRlci1pbWFnZTppbml0aWFsO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci13aWR0aCk7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6MTAwJTttYXJnaW46MDtvdXRsaW5lOm5vbmU7cGFkZGluZzouNHJlbSAuNnJlbTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOmZpbGwtYXZhaWxhYmxlfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6bGlnaHQpe1tkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF06Zm9jdXN7b3V0bGluZToxcHggZGFzaGVkIHZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQpO291dGxpbmUtb2Zmc2V0OjJweH19W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdOmhvdmVye2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTIpO3RyYW5zaXRpb246YmFja2dyb3VuZCAuOHMsY29sb3IgLjI1cyAuMDgzMzMzMzMzM3N9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPXNlbGVjdGlvbl17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOndyYXA7Z2FwOjVweDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydDttYXJnaW46NXB4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb24tY29udHJvbF17bWFyZ2luLXJpZ2h0OjhweH1bZGF0YS1tb25zdGVyLXJvbGU9YmFkZ2Vde2Rpc3BsYXk6aW5saW5lLWZsZXh9W2RhdGEtbW9uc3Rlci1yb2xlPWJhZGdlLWxhYmVsXXthbGlnbi1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztnYXA6N3B4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufVtkYXRhLW1vbnN0ZXItcm9sZT1maWx0ZXJdLFtkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXItZmlsdGVyXXtkaXNwbGF5OmZsZXg7ZmxleC1ncm93OjIwMDtvcmRlcjo5OTk5OTk5OTt2aXNpYmlsaXR5OmhpZGRlbn1bZGF0YS1tb25zdGVyLXJvbGU9ZmlsdGVyXS5hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMik7Ym9yZGVyOjA7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKTtib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpO21pbi13aWR0aDo0MCU7b3V0bGluZTpub25lO3Zpc2liaWxpdHk6dmlzaWJsZX0uYWN0aXZlW2RhdGEtbW9uc3Rlci1yb2xlPWZpbHRlcl1bbmFtZT1wb3BwZXItZmlsdGVyXXtoZWlnaHQ6MS41ZW07bWFyZ2luOjIuNWVtO3BhZGRpbmc6MnB4O3dpZHRoOmNhbGMoMTAwJSAtIHZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSoyKX0ub3B0aW9uLWZpbHRlci1jb250cm9se2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTtkaXNwbGF5OmZsZXg7aGVpZ2h0OjIuNWVtO21hcmdpbjotMS4xZW0gLTEuMWVtIC4zZW19W2RhdGEtbW9uc3Rlci1yb2xlPXJlbW92ZS1iYWRnZV17YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMik7aGVpZ2h0OjE2cHg7bWFyZ2luLWxlZnQ6NXB4Oy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNNC42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCA3LjI5M2wyLjY0Ni0yLjY0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsMi42NDcgMi42NDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC0yLjY0NiAyLjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4IDQuNjQ2IDUuMzU0YS41LjUgMCAwIDEgMC0uNzA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNNC42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCA3LjI5M2wyLjY0Ni0yLjY0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsMi42NDcgMi42NDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC0yLjY0NiAyLjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4IDQuNjQ2IDUuMzU0YS41LjUgMCAwIDEgMC0uNzA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7b3JkZXI6Mn1bZGF0YS1tb25zdGVyLXJvbGU9cmVtb3ZlLWJhZGdlXSxbZGF0YS1tb25zdGVyLXJvbGU9c3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNdey13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXIgY2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyIGNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6LjhlbTttYXNrLXNpemU6LjhlbTttaW4taGVpZ2h0OjE2cHg7d2lkdGg6MTZweH1bZGF0YS1tb25zdGVyLXJvbGU9c3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNdey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lO2FwcGVhcmFuY2U6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBkPSdNMS42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCAxMC4yOTNsNS42NDYtNS42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOGwtNiA2YS41LjUgMCAwIDEtLjcwOCAwbC02LTZhLjUuNSAwIDAgMSAwLS43MDgnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgZD0nTTEuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggMTAuMjkzbDUuNjQ2LTUuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhsLTYgNmEuNS41IDAgMCAxLS43MDggMGwtNi02YS41LjUgMCAwIDEgMC0uNzA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIil9Lm9wZW5bZGF0YS1tb25zdGVyLXJvbGU9c3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNde2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGQ9J003LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMGw2IDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDUuNzA3bC01LjY0NiA1LjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOHonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgZD0nTTcuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwbDYgNmEuNS41IDAgMCAxLS43MDguNzA4TDggNS43MDdsLTUuNjQ2IDUuNjQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4eicvJTNFJTNDL3N2ZyUzRVxcXCIpfS5lbXB0eVtkYXRhLW1vbnN0ZXItcm9sZT1zdGF0dXMtb3ItcmVtb3ZlLWJhZGdlc117YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIGNsYXNzPSdiaSBiaS1kYXNoLWNpcmNsZScgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNCA4YS41LjUgMCAwIDEgLjUtLjVoN2EuNS41IDAgMCAxIDAgMWgtN0EuNS41IDAgMCAxIDQgOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2JpIGJpLWRhc2gtY2lyY2xlJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J000IDhhLjUuNSAwIDAgMSAuNS0uNWg3YS41LjUgMCAwIDEgMCAxaC03QS41LjUgMCAwIDEgNCA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIil9LmNsZWFyW2RhdGEtbW9uc3Rlci1yb2xlPXN0YXR1cy1vci1yZW1vdmUtYmFkZ2VzXXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpfS5lcnJvcltkYXRhLW1vbnN0ZXItcm9sZT1zdGF0dXMtb3ItcmVtb3ZlLWJhZGdlc117YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTEpOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J003LjAwMiAxMWExIDEgMCAxIDEgMiAwIDEgMSAwIDAgMS0yIDBNNy4xIDQuOTk1YS45MDUuOTA1IDAgMSAxIDEuOCAwbC0uMzUgMy41MDdhLjU1Mi41NTIgMCAwIDEtMS4xIDB6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J003LjAwMiAxMWExIDEgMCAxIDEgMiAwIDEgMSAwIDAgMS0yIDBNNy4xIDQuOTk1YS45MDUuOTA1IDAgMSAxIDEuOCAwbC0uMzUgMy41MDdhLjU1Mi41NTIgMCAwIDEtMS4xIDB6Jy8lM0UlM0Mvc3ZnJTNFXFxcIil9LmxvYWRpbmdbZGF0YS1tb25zdGVyLXJvbGU9c3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNde2FuaW1hdGlvbi1kdXJhdGlvbjoxczthbmltYXRpb24taXRlcmF0aW9uLWNvdW50OmluZmluaXRlO2FuaW1hdGlvbi1uYW1lOmFjdGl2aXR5O2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAsMCwuMiwxKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2FjdGl2aXR5JyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDY2lyY2xlIGN4PSc4JyBjeT0nOCcgcj0nOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2FjdGl2aXR5JyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDY2lyY2xlIGN4PSc4JyBjeT0nOCcgcj0nOCcvJTNFJTNDL3N2ZyUzRVxcXCIpfUBrZXlmcmFtZXMgYWN0aXZpdHl7MCV7dHJhbnNmb3JtOnNjYWxlKDEpfTUwJXt0cmFuc2Zvcm06c2NhbGUoLjEpfXRve3RyYW5zZm9ybTpzY2FsZSgxKX19W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbnNde2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXgtZ3JvdzoxO3Njcm9sbGJhci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO3Njcm9sbGJhci13aWR0aDp0aGlufVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25de2FsaWduLWl0ZW1zOmNlbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O3BhZGRpbmc6NnB4IDVweH1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXSBsYWJlbHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydDt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dIGxhYmVsPmRpdnthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtvdXRsaW5lOm5vbmU7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9bm8tb3B0aW9uc117YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNCk7Ym9yZGVyLXJhZGl1czouMmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy00KTttYXJnaW46MS4xZW0gMS4xZW0gMDtwYWRkaW5nOi4zZW0gLjhlbX0uc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpfVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci1maWx0ZXJlZD10cnVlXSxbZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXVtkYXRhLW1vbnN0ZXItdmlzaWJpbGl0eT1oaWRkZW5de2Rpc3BsYXk6bm9uZX1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXVtkYXRhLW1vbnN0ZXItZm9jdXNlZD10cnVlXXtvdXRsaW5lOjFweCBkYXNoZWQgdmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMik7b3V0bGluZS1vZmZzZXQ6LTJweH1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXT5pbnB1dDpmb2N1cyxbZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXT5sYWJlbDpmb2N1c3tvdXRsaW5lOm5vbmV9IFxufWAsXG5cdFx0MCxcblx0KTtcbn0gY2F0Y2ggKGUpIHtcblx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0ZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKSxcblx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdGUgKyBcIlwiLFxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGJ1aWxkTWFwIH0gZnJvbSBcIi4uLy4uL2RhdGEvYnVpbGRtYXAubWpzXCI7XG5pbXBvcnQgeyBEZWFkTWFuc1N3aXRjaCB9IGZyb20gXCIuLi8uLi91dGlsL2RlYWRtYW5zc3dpdGNoLm1qc1wiO1xuaW1wb3J0IHsgcG9zaXRpb25Qb3BwZXIgfSBmcm9tIFwiLi91dGlsL2Zsb2F0aW5nLXVpLm1qc1wiO1xuaW1wb3J0IHtcblx0YWRkQXR0cmlidXRlVG9rZW4sXG5cdGZpbmRDbG9zZXN0QnlBdHRyaWJ1dGUsXG5cdHJlbW92ZUF0dHJpYnV0ZVRva2VuLFxufSBmcm9tIFwiLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge1xuXHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRBVFRSSUJVVEVfUFJFRklYLFxuXHRBVFRSSUJVVEVfUk9MRSxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBDdXN0b21Db250cm9sIH0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21jb250cm9sLm1qc1wiO1xuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdGdldFNsb3R0ZWRFbGVtZW50cyxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQge1xuXHRmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudCxcblx0ZmlyZUN1c3RvbUV2ZW50LFxuXHRmaXJlRXZlbnQsXG59IGZyb20gXCIuLi8uLi9kb20vZXZlbnRzLm1qc1wiO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnQgfSBmcm9tIFwiLi4vLi4vZG9tL3V0aWwubWpzXCI7XG5pbXBvcnQgeyBGb3JtYXR0ZXIgfSBmcm9tIFwiLi4vLi4vdGV4dC9mb3JtYXR0ZXIubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWwgfSBmcm9tIFwiLi4vLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgSUQgfSBmcm9tIFwiLi4vLi4vdHlwZXMvaWQubWpzXCI7XG5pbXBvcnQge1xuXHRpc0FycmF5LFxuXHRpc0Z1bmN0aW9uLFxuXHRpc0ludGVnZXIsXG5cdGlzSXRlcmFibGUsXG5cdGlzT2JqZWN0LFxuXHRpc1ByaW1pdGl2ZSxcblx0aXNTdHJpbmcsXG59IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IE9ic2VydmVyIH0gZnJvbSBcIi4uLy4uL3R5cGVzL29ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHsgUHJveHlPYnNlcnZlciB9IGZyb20gXCIuLi8uLi90eXBlcy9wcm94eW9ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVBcnJheSwgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBQcm9jZXNzaW5nIH0gZnJvbSBcIi4uLy4uL3V0aWwvcHJvY2Vzc2luZy5tanNcIjtcbmltcG9ydCB7IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSyB9IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IFNlbGVjdFN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L3NlbGVjdC5tanNcIjtcbmltcG9ydCB7XG5cdGdldERvY3VtZW50VHJhbnNsYXRpb25zLFxuXHRUcmFuc2xhdGlvbnMsXG59IGZyb20gXCIuLi8uLi9pMThuL3RyYW5zbGF0aW9ucy5tanNcIjtcblxuZXhwb3J0IHtcblx0U2VsZWN0LFxuXHRwb3BwZXJFbGVtZW50U3ltYm9sLFxuXHRnZXRTdW1tYXJ5VGVtcGxhdGUsXG5cdGdldFNlbGVjdGlvblRlbXBsYXRlLFxufTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3Qgbm9PcHRpb25zQXZhaWxhYmxlTWVzc2FnZSA9IFwiTm8gb3B0aW9ucyBhdmFpbGFibGUuXCI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IGNsaWNrVG9Mb2FkT3B0aW9uc01lc3NhZ2UgPSBcIkNsaWNrIHRvIGxvYWQgb3B0aW9ucy5cIjtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuY29uc3QgdGltZXJDYWxsYmFja1N5bWJvbCA9IFN5bWJvbChcInRpbWVyQ2FsbGJhY2tcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtTeW1ib2x9XG4gKi9cbmNvbnN0IGtleUZpbHRlckV2ZW50U3ltYm9sID0gU3ltYm9sKFwia2V5RmlsdGVyRXZlbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtTeW1ib2x9XG4gKi9cbmNvbnN0IGxhenlMb2FkRG9uZVN5bWJvbCA9IFN5bWJvbChcImxhenlMb2FkRG9uZVwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuY29uc3QgaXNMb2FkaW5nU3ltYm9sID0gU3ltYm9sKFwiaXNMb2FkaW5nXCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtTeW1ib2x9XG4gKi9cbmNvbnN0IGNsb3NlRXZlbnRIYW5kbGVyID0gU3ltYm9sKFwiY2xvc2VFdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuY29uc3QgY2xlYXJPcHRpb25FdmVudEhhbmRsZXIgPSBTeW1ib2woXCJjbGVhck9wdGlvbkV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7U3ltYm9sfVxuICovXG5jb25zdCByZXNpemVPYnNlcnZlclN5bWJvbCA9IFN5bWJvbChcInJlc2l6ZU9ic2VydmVyXCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtTeW1ib2x9XG4gKi9cbmNvbnN0IGtleUV2ZW50SGFuZGxlciA9IFN5bWJvbChcImtleUV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7U3ltYm9sfVxuICovXG5jb25zdCBsYXN0RmV0Y2hlZERhdGFTeW1ib2wgPSBTeW1ib2woXCJsYXN0RmV0Y2hlZERhdGFcIik7XG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtTeW1ib2x9XG4gKi9cbmNvbnN0IGlucHV0RXZlbnRIYW5kbGVyID0gU3ltYm9sKFwiaW5wdXRFdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuY29uc3QgY2hhbmdlRXZlbnRIYW5kbGVyID0gU3ltYm9sKFwiY2hhbmdlRXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtTeW1ib2x9XG4gKi9cbmNvbnN0IGNvbnRyb2xFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiY29udHJvbEVsZW1lbnRcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuY29uc3Qgc2VsZWN0aW9uRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcInNlbGVjdGlvbkVsZW1lbnRcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuY29uc3QgY29udGFpbmVyRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImNvbnRhaW5lckVsZW1lbnRcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuY29uc3QgcG9wcGVyRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcInBvcHBlckVsZW1lbnRcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuY29uc3QgaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImlubGluZUZpbHRlckVsZW1lbnRcIik7XG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtTeW1ib2x9XG4gKi9cbmNvbnN0IHBvcHBlckZpbHRlckVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJwb3BwZXJGaWx0ZXJFbGVtZW50XCIpO1xuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7U3ltYm9sfVxuICovXG5jb25zdCBwb3BwZXJGaWx0ZXJDb250YWluZXJFbGVtZW50U3ltYm9sID0gU3ltYm9sKFxuXHRcInBvcHBlckZpbHRlckNvbnRhaW5lckVsZW1lbnRcIixcbik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuY29uc3Qgb3B0aW9uc0VsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJvcHRpb25zRWxlbWVudFwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7U3ltYm9sfVxuICovXG5jb25zdCBub09wdGlvbnNBdmFpbGFibGVFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwibm9PcHRpb25zQXZhaWxhYmxlRWxlbWVudFwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7U3ltYm9sfVxuICovXG5jb25zdCBzdGF0dXNPclJlbW92ZUJhZGdlc0VsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJzdGF0dXNPclJlbW92ZUJhZGdlc0VsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtTeW1ib2x9XG4gKi9cbmNvbnN0IGFyZU9wdGlvbnNBdmFpbGFibGVBbmRJbml0U3ltYm9sID0gU3ltYm9sKFwiQEBhcmVPcHRpb25zQXZhaWxhYmxlQW5kSW5pdFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgZGlzYWJsZWRSZXF1ZXN0TWFya2VyID0gU3ltYm9sKFwiQEBkaXNhYmxlZFJlcXVlc3RNYXJrZXJcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cbmNvbnN0IEZPQ1VTX0RJUkVDVElPTl9VUCA9IDE7XG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5jb25zdCBGT0NVU19ESVJFQ1RJT05fRE9XTiA9IDI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEZJTFRFUl9NT0RFX1JFTU9URSA9IFwicmVtb3RlXCI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEZJTFRFUl9NT0RFX09QVElPTlMgPSBcIm9wdGlvbnNcIjtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgRklMVEVSX01PREVfRElTQUJMRUQgPSBcImRpc2FibGVkXCI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEZJTFRFUl9QT1NJVElPTl9QT1BQRVIgPSBcInBvcHBlclwiO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgRklMVEVSX1BPU0lUSU9OX0lOTElORSA9IFwiaW5saW5lXCI7XG5cbi8qKlxuICogQSBzZWxlY3QgY29udHJvbCB0aGF0IGNhbiBiZSB1c2VkIHRvIHNlbGVjdCBvbmUgb3IgbW9yZSBvcHRpb25zIGZyb20gYSBsaXN0LlxuICpcbiAqIEBmcmFnbWVudHMgL2ZyYWdtZW50cy9jb21wb25lbnRzL2Zvcm0vc2VsZWN0L1xuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2Zvcm0vc2VsZWN0LXdpdGgtb3B0aW9ucyBTZWxlY3Qgd2l0aCBvcHRpb25zXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9mb3JtL3NlbGVjdC1tdWx0aXBsZSBNdWx0aXBsZSBzZWxlY3Rpb25cbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2Zvcm0vc2VsZWN0LWZpbHRlciBGaWx0ZXJcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2Zvcm0vc2VsZWN0LWZldGNoIEZldGNoIG9wdGlvbnNcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2Zvcm0vc2VsZWN0LWxhenkgTGF6eSBsb2FkXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9mb3JtL3NlbGVjdC1yZW1vdGUtZmlsdGVyIFJlbW90ZSBmaWx0ZXJcbiAqXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBiZWF1dGlmdWwgc2VsZWN0IGNvbnRyb2wgdGhhdCBjYW4gbWFrZSB5b3VyIGxpZmUgZWFzaWVyIGFuZCBhbHNvIGxvb2tzIGdvb2QuXG4gKiBAZmlyZXMgbW9uc3Rlci1jaGFuZ2VcbiAqIEBmaXJlcyBtb25zdGVyLWNoYW5nZWRcbiAqL1xuY2xhc3MgU2VsZWN0IGV4dGVuZHMgQ3VzdG9tQ29udHJvbCB7XG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHRpbml0T3B0aW9uT2JzZXJ2ZXIuY2FsbCh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7U3ltYm9sfVxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2Zvcm0vc2VsZWN0QEBpbnN0YW5jZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgY3VycmVudCBzZWxlY3Rpb24gb2YgdGhlIFNlbGVjdFxuXHQgKlxuXHQgKiBgYGBcblx0ICogZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21vbnN0ZXItc2VsZWN0Jyk7XG5cdCAqIGNvbnNvbGUubG9nKGUudmFsdWUpXG5cdCAqIC8vIFx1MjFBNiAxXG5cdCAqIC8vIFx1MjFBNiBbJzEnLCcyJ11cblx0ICogYGBgXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdGdldCB2YWx1ZSgpIHtcblx0XHRyZXR1cm4gY29udmVydFNlbGVjdGlvblRvVmFsdWUuY2FsbCh0aGlzLCB0aGlzLmdldE9wdGlvbihcInNlbGVjdGlvblwiKSk7XG5cdH1cblxuXHQvKipcblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxFbGVtZW50L2F0dGFjaEludGVybmFsc31cblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdHN0YXRpYyBnZXQgZm9ybUFzc29jaWF0ZWQoKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IHNlbGVjdGlvblxuXHQgKlxuXHQgKiBgYGBcblx0ICogZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21vbnN0ZXItc2VsZWN0Jyk7XG5cdCAqIGUudmFsdWU9MVxuXHQgKiBgYGBcblx0ICpcblx0ICogQHByb3BlcnR5IHtzdHJpbmd8YXJyYXl9IHZhbHVlXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG5cdCAqIEBmaXJlcyBtb25zdGVyLXNlbGVjdGVkIHRoaXMgZXZlbnQgaXMgZmlyZWQgd2hlbiB0aGUgc2VsZWN0aW9uIGlzIHNldFxuXHQgKi9cblx0c2V0IHZhbHVlKHZhbHVlKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gY29udmVydFZhbHVlVG9TZWxlY3Rpb24uY2FsbCh0aGlzLCB2YWx1ZSk7XG5cdFx0c2V0U2VsZWN0aW9uXG5cdFx0XHQuY2FsbCh0aGlzLCByZXN1bHQuc2VsZWN0aW9uKVxuXHRcdFx0LnRoZW4oKCkgPT4ge30pXG5cdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIEhUTUwgdGFnLCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRvZ2dsZUV2ZW50VHlwZT1jbGljayx0b3VjaCBMaXN0IG9mIGV2ZW50IHR5cGVzIHRvIGJlIG9ic2VydmVkIGZvciBvcGVuaW5nIHRoZSBkcm9wZG93blxuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IGRlbGVnYXRlc0ZvY3VzPWZhbHNlIGxvcmVtIFtzZWUgbW96aWxsYS5vcmddKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9TaGFkb3dSb290L2RlbGVnYXRlc0ZvY3VzKVxuXHQgKiBAcHJvcGVydHkge09iamVjdFtdfSBvcHRpb25zIFNlbGVjdGlvbiBvZiBrZXkgaWRlbnRpZmllciBwYWlycyBhdmFpbGFibGUgZm9yIHNlbGVjdGlvbiBhbmQgZGlzcGxheWVkIGluIHRoZSBkcm9wZG93bi5cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IG9wdGlvbnNbXS5sYWJlbFxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gb3B0aW9uc1tdLnZhbHVlXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBvcHRpb25zW10udmlzaWJpbGl0eSBoaWRkZW4gb3IgdmlzaWJsZVxuXHQgKiBAcHJvcGVydHkge0FycmF5fSBzZWxlY3Rpb24gU2VsZWN0ZWQgb3B0aW9uc1xuXHQgKiBAcHJvcGVydHkge0ludGVnZXJ9IHNob3dNYXhPcHRpb25zPTEwIE1heGltdW0gbnVtYmVyIG9mIHZpc2libGUgb3B0aW9ucyBiZWZvcmUgYSBzY3JvbGwgYmFyIHNob3VsZCBiZSBkaXNwbGF5ZWQuXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlPXJhZGlvIE11bHRpcGxlIChjaGVja2JveCkgb3Igc2luZ2xlIHNlbGVjdGlvbiAocmFkaW8pXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBuYW1lPShyYW5kb20gaWQpIE5hbWUgb2YgdGhlIGZvcm0gZmllbGRcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHVybCBMb2FkIG9wdGlvbnMgZnJvbSBzZXJ2ZXIgcGVyIHVybFxuXHQgKiBAcHJvcGVydHkge29iamVjdH0gbG9va3VwIExvYWQgb3B0aW9ucyBmcm9tIHNlcnZlciBwZXIgdXJsXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsb29rdXAudXJsPW51bGwgTG9hZCBvcHRpb25zIGZyb20gc2VydmVyIHBlciB1cmxcblx0ICogQHByb3BlcnR5IHtib29sZWFufSBsb29rdXAuZ3JvdXBpbmc9ZmFsc2UgTG9hZCBhbGwgc2VsZWN0ZWQgb3B0aW9ucyBmcm9tIHNlcnZlciBwZXIgdXJsIGF0IG9uY2UgKHRydWUpIG9yIG9uZSBieSBvbmUgKGZhbHNlKVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZmV0Y2ggRmV0Y2ggW3NlZSBVc2luZyBGZXRjaCBtb3ppbGxhLm9yZ10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0ZldGNoX0FQSS9Vc2luZ19GZXRjaClcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLnJlZGlyZWN0PWVycm9yXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5tZXRob2Q9R0VUXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5tb2RlPXNhbWUtb3JpZ2luXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5jcmVkZW50aWFscz1zYW1lLW9yaWdpblxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZmV0Y2guaGVhZGVycz17XCJhY2NlcHRcIjpcImFwcGxpY2F0aW9uL2pzb25cIn19XG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBsYWJlbHNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5jYW5ub3QtYmUtbG9hZGVkIGNhbm5vdCBiZSBsb2FkZWRcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5uby1vcHRpb25zLWF2YWlsYWJsZSBubyBvcHRpb25zIGF2YWlsYWJsZVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbGFiZWxzLnNlbGVjdC1hbi1vcHRpb24gc2VsZWN0IGFuIG9wdGlvblxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbGFiZWxzLm5vLW9wdGlvbiBubyBvcHRpb24gaW4gdGhlIGxpc3QsIG1heWJlIHlvdSBoYXZlIHRvIGNoYW5nZSB0aGUgZmlsdGVyXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmZWF0dXJlcyBMaXN0IHdpdGggZmVhdHVyZXNcblx0ICogQHByb3BlcnR5IHtCb29sZWFufSBmZWF0dXJlcy5jbGVhckFsbD10cnVlIERpc3BsYXkgb2YgYSBkZWxldGUgYnV0dG9uIHRvIGRlbGV0ZSB0aGUgZW50aXJlIHNlbGVjdGlvblxuXHQgKiBAcHJvcGVydHkge0Jvb2xlYW59IGZlYXR1cmVzLmNsZWFyPXRydWUgRGlzcGxheSBvZiBhIGRlbGV0ZSBrZXkgZm9yIGRlbGV0aW5nIHRoZSBzcGVjaWZpYyBzZWxlY3Rpb25cblx0ICogQHByb3BlcnR5IHtCb29sZWFufSBmZWF0dXJlcy5sYXp5TG9hZD1mYWxzZSBMb2FkIG9wdGlvbnMgd2hlbiBmaXJzdCBvcGVuaW5nIHRoZSBkcm9wZG93bi4gKEhpbnQ7IGxhenlsTG9hZCBpcyBub3Qgc3VwcG9ydGVkIHdpdGggcmVtb3RlIGZpbHRlcilcblx0ICogQHByb3BlcnR5IHtCb29sZWFufSBmZWF0dXJlcy5jbG9zZU9uU2VsZWN0PWZhbHNlIENsb3NlIHRoZSBkcm9wZG93biB3aGVuIGFuIG9wdGlvbiBpcyBzZWxlY3RlZCAoc2luY2UgMy41NC4wKVxuXHQgKiBAcHJvcGVydHkge0Jvb2xlYW59IGZlYXR1cmVzLmVtcHR5VmFsdWVJZk5vT3B0aW9ucz1mYWxzZSBJZiBubyBvcHRpb25zIGFyZSBhdmFpbGFibGUsIHRoZSBzZWxlY3Rpb24gaXMgc2V0IHRvIGFuIGVtcHR5IGFycmF5XG5cdCAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZmVhdHVyZXMuc3RvcmVGZXRjaGVkRGF0YT1mYWxzZSBTdG9yZSBmZXRjaGVkIGRhdGEgaW4gdGhlIG9iamVjdFxuXHQgKiBAcHJvcGVydHkge0Jvb2xlYW59IGZlYXR1cmVzLnVzZVN0cmljdFZhbHVlQ29tcGFyaXNvbj10cnVlIFVzZSBzdHJpY3QgdmFsdWUgY29tcGFyaXNvbiBmb3IgdGhlIHNlbGVjdGlvblxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gZmlsdGVyLmRlZmF1bHRWYWx1ZT1udWxsIERlZmF1bHQgZmlsdGVyIHZhbHVlLCBpZiB0aGUgZmlsdGVyIGlzIGVtcHR5LCBpZiB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBudWxsLCB0aGVuIG5vIHJlcXVlc3QgaXMgbWFkZVxuXHQgKiBAcHJvcGVydHkge0Jvb2xlYW59IGZpbHRlci5tb2RlPW9wdGlvbnMgRmlsdGVyIG1vZGUsIHZhbHVlczogb3B0aW9ucywgcmVtb3RlLCBkaXNhYmxlZCAoSGludDsgbGF6eWxMb2FkIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aCByZW1vdGUgZmlsdGVyLCBpZiB5b3UgdXNlIHJlbW90ZSBmaWx0ZXIsIHRoZSBsYXp5TG9hZCBpcyBkaXNhYmxlZClcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVNYXBwaW5nIE1hcHBpbmcgb2YgdGhlIHRlbXBsYXRlIHBsYWNlaG9sZGVyc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVNYXBwaW5nLnNlbGVjdGVkIFNlbGVjdGVkIFRlbXBsYXRlXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBwb3BwZXIgW1BvcHBlckpTIE9wdGlvbnNdKGh0dHBzOi8vcG9wcGVyLmpzLm9yZy9kb2NzL3YyLylcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHBvcHBlci5wbGFjZW1lbnQ9Ym90dG9tIFBvcHBlckpTIHBsYWNlbWVudFxuXHQgKiBAcHJvcGVydHkge09iamVjdFtdfSBtb2RpZmllcnM9e25hbWU6b2Zmc2V0fSBQb3BwZXJKUyBwbGFjZW1lbnRcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IG1hcHBpbmdcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IG1hcHBpbmcuc2VsZWN0b3I9KiBQYXRoIHRvIHNlbGVjdCB0aGUgYXBwcm9wcmlhdGUgZW50cmllc1xuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gbWFwcGluZy5sYWJlbFRlbXBsYXRlPVwiXCIgdGVtcGxhdGUgd2l0aCB0aGUgbGFiZWwgcGxhY2Vob2xkZXJzIGluIHRoZSBmb3JtICR7bmFtZX0sIHdoZXJlIG5hbWUgaXMgdGhlIGtleSAoKiopXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBtYXBwaW5nLnZhbHVlVGVtcGxhdGU9XCJcIiB0ZW1wbGF0ZSB3aXRoIHRoZSB2YWx1ZSBwbGFjZWhvbGRlcnMgaW4gdGhlIGZvcm0gJHtuYW1lfSwgd2hlcmUgbmFtZSBpcyB0aGUga2V5XG5cdCAqIEBwcm9wZXJ0eSB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm1+ZXhhbXBsZUZpbHRlckNhbGxiYWNrfHVuZGVmaW5lZH0gbWFwcGluZy5maWx0ZXIgRmlsdGVyaW5nIG9mIHZhbHVlcyB2aWEgYSBmdW5jdGlvblxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZm9ybWF0dGVyXG5cdCAqIEBwcm9wZXJ0eSB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm1+Zm9ybWF0dGVyU2VsZWN0aW9uQ2FsbGJhY2t8dW5kZWZpbmVkfSBmb3JtYXR0ZXIuc2VsZWN0aW9uIGZvcm1hdCBzZWxlY3Rpb24gbGFiZWxcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbihcblx0XHRcdHt9LFxuXHRcdFx0c3VwZXIuZGVmYXVsdHMsXG5cdFx0XHR7XG5cdFx0XHRcdHRvZ2dsZUV2ZW50VHlwZTogW1wiY2xpY2tcIiwgXCJ0b3VjaFwiXSxcblx0XHRcdFx0ZGVsZWdhdGVzRm9jdXM6IGZhbHNlLFxuXHRcdFx0XHRvcHRpb25zOiBbXSxcblx0XHRcdFx0c2VsZWN0aW9uOiBbXSxcblx0XHRcdFx0c2hvd01heE9wdGlvbnM6IDEwLFxuXHRcdFx0XHR0eXBlOiBcInJhZGlvXCIsXG5cdFx0XHRcdG5hbWU6IG5ldyBJRChcInNcIikudG9TdHJpbmcoKSxcblx0XHRcdFx0ZmVhdHVyZXM6IHtcblx0XHRcdFx0XHRjbGVhckFsbDogdHJ1ZSxcblx0XHRcdFx0XHRjbGVhcjogdHJ1ZSxcblx0XHRcdFx0XHRsYXp5TG9hZDogZmFsc2UsXG5cdFx0XHRcdFx0Y2xvc2VPblNlbGVjdDogZmFsc2UsXG5cdFx0XHRcdFx0ZW1wdHlWYWx1ZUlmTm9PcHRpb25zOiBmYWxzZSxcblx0XHRcdFx0XHRzdG9yZUZldGNoZWREYXRhOiBmYWxzZSxcblx0XHRcdFx0XHR1c2VTdHJpY3RWYWx1ZUNvbXBhcmlzb246IGZhbHNlLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR1cmw6IG51bGwsXG5cdFx0XHRcdGxvb2t1cDoge1xuXHRcdFx0XHRcdHVybDogbnVsbCxcblx0XHRcdFx0XHRncm91cGluZzogZmFsc2UsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGxhYmVsczoge1xuXHRcdFx0XHRcdFwiY2Fubm90LWJlLWxvYWRlZFwiOiBcIkNhbm5vdCBiZSBsb2FkZWRcIixcblx0XHRcdFx0XHRcIm5vLW9wdGlvbnMtYXZhaWxhYmxlXCI6IG5vT3B0aW9uc0F2YWlsYWJsZU1lc3NhZ2UsXG5cdFx0XHRcdFx0XCJjbGljay10by1sb2FkLW9wdGlvbnNcIjogY2xpY2tUb0xvYWRPcHRpb25zTWVzc2FnZSxcblx0XHRcdFx0XHRcInNlbGVjdC1hbi1vcHRpb25cIjogXCJTZWxlY3QgYW4gb3B0aW9uXCIsXG5cdFx0XHRcdFx0XCJzdW1tYXJ5LXRleHRcIjoge1xuXHRcdFx0XHRcdFx0emVybzogXCJObyBlbnRyaWVzIHdlcmUgc2VsZWN0ZWRcIixcblx0XHRcdFx0XHRcdG9uZTogJzxzcGFuIGNsYXNzPVwibW9uc3Rlci1iYWRnZS1wcmltYXJ5LXBpbGxcIj4xPC9zcGFuPiBlbnRyeSB3YXMgc2VsZWN0ZWQnLFxuXHRcdFx0XHRcdFx0b3RoZXI6XG5cdFx0XHRcdFx0XHRcdCc8c3BhbiBjbGFzcz1cIm1vbnN0ZXItYmFkZ2UtcHJpbWFyeS1waWxsXCI+JHtjb3VudH08L3NwYW4+IGVudHJpZXMgd2VyZSBzZWxlY3RlZCcsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcIm5vLW9wdGlvbnNcIjpcblx0XHRcdFx0XHRcdFwiVW5mb3J0dW5hdGVseSwgdGhlcmUgYXJlIG5vIG9wdGlvbnMgYXZhaWxhYmxlIGluIHRoZSBsaXN0LlwiLFxuXHRcdFx0XHRcdFwibm8tb3B0aW9ucy1mb3VuZFwiOlxuXHRcdFx0XHRcdFx0XCJObyBvcHRpb25zIGFyZSBhdmFpbGFibGUgaW4gdGhlIGxpc3QuIFBsZWFzZSBjb25zaWRlciBtb2RpZnlpbmcgdGhlIGZpbHRlci5cIixcblx0XHRcdFx0fSxcblx0XHRcdFx0bWVzc2FnZXM6IHtcblx0XHRcdFx0XHRjb250cm9sOiBudWxsLFxuXHRcdFx0XHRcdHNlbGVjdGVkOiBudWxsLFxuXHRcdFx0XHRcdGVtcHR5T3B0aW9uczogbnVsbCxcblx0XHRcdFx0fSxcblx0XHRcdFx0ZmV0Y2g6IHtcblx0XHRcdFx0XHRyZWRpcmVjdDogXCJlcnJvclwiLFxuXHRcdFx0XHRcdG1ldGhvZDogXCJHRVRcIixcblx0XHRcdFx0XHRtb2RlOiBcInNhbWUtb3JpZ2luXCIsXG5cdFx0XHRcdFx0Y3JlZGVudGlhbHM6IFwic2FtZS1vcmlnaW5cIixcblx0XHRcdFx0XHRoZWFkZXJzOiB7XG5cdFx0XHRcdFx0XHRhY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGZpbHRlcjoge1xuXHRcdFx0XHRcdGRlZmF1bHRWYWx1ZTogbnVsbCxcblx0XHRcdFx0XHRtb2RlOiBGSUxURVJfTU9ERV9ESVNBQkxFRCxcblx0XHRcdFx0XHRwb3NpdGlvbjogRklMVEVSX1BPU0lUSU9OX0lOTElORSxcblx0XHRcdFx0XHRtYXJrZXI6IHtcblx0XHRcdFx0XHRcdG9wZW46IFwie1wiLFxuXHRcdFx0XHRcdFx0Y2xvc2U6IFwifVwiLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNsYXNzZXM6IHtcblx0XHRcdFx0XHRiYWRnZTogXCJtb25zdGVyLWJhZGdlLXByaW1hcnlcIixcblx0XHRcdFx0XHRzdGF0dXNPclJlbW92ZUJhZGdlOiBcImVtcHR5XCIsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdG1hcHBpbmc6IHtcblx0XHRcdFx0XHRzZWxlY3RvcjogXCIqXCIsXG5cdFx0XHRcdFx0bGFiZWxUZW1wbGF0ZTogXCJcIixcblx0XHRcdFx0XHR2YWx1ZVRlbXBsYXRlOiBcIlwiLFxuXHRcdFx0XHRcdGZpbHRlcjogbnVsbCxcblx0XHRcdFx0fSxcblx0XHRcdFx0Zm9ybWF0dGVyOiB7XG5cdFx0XHRcdFx0c2VsZWN0aW9uOiBidWlsZFNlbGVjdGlvbkxhYmVsLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR0ZW1wbGF0ZU1hcHBpbmc6IHtcblx0XHRcdFx0XHQvKiogd2l0aCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItc2VsZWN0ZWQtdGVtcGxhdGVgIHRoZSB0ZW1wbGF0ZSBmb3IgdGhlIHNlbGVjdGVkIG9wdGlvbnMgY2FuIGJlIGRlZmluZWQuICovXG5cdFx0XHRcdFx0c2VsZWN0ZWQ6IGdldFNlbGVjdGlvblRlbXBsYXRlKCksXG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0cG9wcGVyOiB7XG5cdFx0XHRcdFx0cGxhY2VtZW50OiBcImJvdHRvbVwiLFxuXHRcdFx0XHRcdG1pZGRsZXdhcmU6IFtcImZsaXBcIiwgXCJvZmZzZXQ6MVwiXSxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0XHRpbml0T3B0aW9uc0Zyb21Bcmd1bWVudHMuY2FsbCh0aGlzKSxcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge1NlbGVjdH1cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbChzZWxmKTtcblx0XHRpbml0RXZlbnRIYW5kbGVyLmNhbGwoc2VsZik7XG5cblx0XHRsZXQgbGF6eUxvYWRGbGFnID0gc2VsZi5nZXRPcHRpb24oXCJmZWF0dXJlcy5sYXp5TG9hZFwiLCBmYWxzZSk7XG5cdFx0bGV0IHJlbW90ZUZpbHRlckZsYWcgPSBnZXRGaWx0ZXJNb2RlLmNhbGwodGhpcykgPT09IEZJTFRFUl9NT0RFX1JFTU9URTtcblxuXHRcdGlmIChnZXRGaWx0ZXJNb2RlLmNhbGwodGhpcykgPT09IEZJTFRFUl9NT0RFX1JFTU9URSkge1xuXHRcdFx0c2VsZi5nZXRPcHRpb24oXCJmZWF0dXJlcy5sYXp5TG9hZFwiLCBmYWxzZSk7XG5cdFx0XHRpZiAobGF6eUxvYWRGbGFnID09PSB0cnVlKSB7XG5cdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdFx0XHRcdHRoaXMsXG5cdFx0XHRcdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRcdFx0XHRcImxhenlMb2FkIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aCByZW1vdGUgZmlsdGVyXCIsXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGxhenlMb2FkRmxhZyA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChzZWxmLmhhc0F0dHJpYnV0ZShcInZhbHVlXCIpKSB7XG5cdFx0XHRuZXcgUHJvY2Vzc2luZygxMCwgKCkgPT4ge1xuXHRcdFx0XHR0aGlzLnZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiKTtcblx0XHRcdH0pXG5cdFx0XHRcdC5ydW4oKVxuXHRcdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cblx0XHRpZiAoc2VsZi5nZXRPcHRpb24oXCJ1cmxcIikgIT09IG51bGwpIHtcblx0XHRcdGlmIChsYXp5TG9hZEZsYWcgfHwgcmVtb3RlRmlsdGVyRmxhZykge1xuXHRcdFx0XHRsb29rdXBTZWxlY3Rpb24uY2FsbChzZWxmKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNlbGYuZmV0Y2goKS5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHNlbGYsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGAke2V9YCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGxldCBsYXN0VmFsdWUgPSBzZWxmLnZhbHVlO1xuXHRcdHNlbGZbaW50ZXJuYWxTeW1ib2xdLmF0dGFjaE9ic2VydmVyKFxuXHRcdFx0bmV3IE9ic2VydmVyKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0aWYgKGlzT2JqZWN0KHRoaXMpICYmIHRoaXMgaW5zdGFuY2VvZiBQcm94eU9ic2VydmVyKSB7XG5cdFx0XHRcdFx0Y29uc3QgbiA9IHRoaXMuZ2V0U3ViamVjdCgpPy5vcHRpb25zPy52YWx1ZTtcblxuXHRcdFx0XHRcdGlmIChsYXN0VmFsdWUgIT09IG4pIHtcblx0XHRcdFx0XHRcdGxhc3RWYWx1ZSA9IG47XG5cdFx0XHRcdFx0XHRzZXRTZWxlY3Rpb25cblx0XHRcdFx0XHRcdFx0LmNhbGwoc2VsZiwgbilcblx0XHRcdFx0XHRcdFx0LnRoZW4oKCkgPT4ge30pXG5cdFx0XHRcdFx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHNlbGYsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGAke2V9YCk7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSksXG5cdFx0KTtcblxuXHRcdGFyZU9wdGlvbnNBdmFpbGFibGVBbmRJbml0LmNhbGwoc2VsZik7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHsqfVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gc3RvcmVGZXRjaGVkRGF0YSBpcyBub3QgZW5hYmxlZFxuXHQgKiBAc2luY2UgMy42Ni4wXG5cdCAqL1xuXHRnZXRMYXN0RmV0Y2hlZERhdGEoKSB7XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMuc3RvcmVGZXRjaGVkRGF0YVwiKSA9PT0gZmFsc2UpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInN0b3JlRmV0Y2hlZERhdGEgaXMgbm90IGVuYWJsZWRcIik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM/LltsYXN0RmV0Y2hlZERhdGFTeW1ib2xdO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBCdXR0b24uY2xpY2soKSBtZXRob2Qgc2ltdWxhdGVzIGEgY2xpY2sgb24gdGhlIGludGVybmFsIGJ1dHRvbiBlbGVtZW50LlxuXHQgKlxuXHQgKiBAc2luY2UgMy4yNy4wXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MRWxlbWVudC9jbGlja31cblx0ICovXG5cdGNsaWNrKCkge1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImRpc2FibGVkXCIpID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dG9nZ2xlLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIEJ1dHRvbi5mb2N1cygpIG1ldGhvZCBzZXRzIGZvY3VzIG9uIHRoZSBpbnRlcm5hbCBidXR0b24gZWxlbWVudC5cblx0ICpcblx0ICogQHNpbmNlIDMuMjcuMFxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvZm9jdXN9XG5cdCAqL1xuXHRmb2N1cyhvcHRpb25zKSB7XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZGlzYWJsZWRcIikgPT09IHRydWUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRuZXcgUHJvY2Vzc2luZygoKSA9PiB7XG5cdFx0XHRnYXRoZXJTdGF0ZS5jYWxsKHRoaXMpO1xuXHRcdFx0Zm9jdXNGaWx0ZXIuY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0XHR9KVxuXHRcdFx0LnJ1bigpXG5cdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgYCR7ZX1gKTtcblx0XHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBCdXR0b24uYmx1cigpIG1ldGhvZCByZW1vdmVzIGZvY3VzIGZyb20gdGhlIGludGVybmFsIGJ1dHRvbiBlbGVtZW50LlxuXHQgKiBAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvYmx1clxuXHQgKi9cblx0Ymx1cigpIHtcblx0XHRuZXcgUHJvY2Vzc2luZygoKSA9PiB7XG5cdFx0XHRnYXRoZXJTdGF0ZS5jYWxsKHRoaXMpO1xuXHRcdFx0Ymx1ckZpbHRlci5jYWxsKHRoaXMpO1xuXHRcdH0pXG5cdFx0XHQucnVuKClcblx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBgJHtlfWApO1xuXHRcdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogSWYgbm8gdXJsIGlzIHNwZWNpZmllZCwgdGhlIG9wdGlvbnMgYXJlIHRha2VuIGZyb20gdGhlIENvbXBvbmVudCBpdHNlbGYuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gdXJsIFVSTCB0byBmZXRjaCB0aGUgb3B0aW9uc1xuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0ZmV0Y2godXJsKSB7XG5cdFx0cmV0dXJuIGZldGNoSXQuY2FsbCh0aGlzLCB1cmwpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqL1xuXHRjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHRzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXHRcdGNvbnN0IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcblxuXHRcdGZvciAoY29uc3QgWywgdHlwZV0gb2YgT2JqZWN0LmVudHJpZXMoW1wiY2xpY2tcIiwgXCJ0b3VjaFwiXSkpIHtcblx0XHRcdC8vIGNsb3NlIG9uIG91dHNpZGUgdWktZXZlbnRzXG5cdFx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIHRoaXNbY2xvc2VFdmVudEhhbmRsZXJdKTtcblx0XHR9XG5cblx0XHRwYXJzZVNsb3RzVG9PcHRpb25zLmNhbGwodGhpcyk7XG5cdFx0YXR0YWNoUmVzaXplT2JzZXJ2ZXIuY2FsbCh0aGlzKTtcblx0XHR1cGRhdGVQb3BwZXIuY2FsbCh0aGlzKTtcblxuXHRcdG5ldyBQcm9jZXNzaW5nKCgpID0+IHtcblx0XHRcdGdhdGhlclN0YXRlLmNhbGwodGhpcyk7XG5cdFx0XHRmb2N1c0ZpbHRlci5jYWxsKHRoaXMpO1xuXHRcdH0pXG5cdFx0XHQucnVuKClcblx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBgJHtlfWApO1xuXHRcdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG5cdFx0Y29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXG5cdFx0Ly8gY2xvc2Ugb24gb3V0c2lkZSB1aS1ldmVudHNcblx0XHRmb3IgKGNvbnN0IFssIHR5cGVdIG9mIE9iamVjdC5lbnRyaWVzKFtcImNsaWNrXCIsIFwidG91Y2hcIl0pKSB7XG5cdFx0XHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIHRoaXNbY2xvc2VFdmVudEhhbmRsZXJdKTtcblx0XHR9XG5cblx0XHRkaXNjb25uZWN0UmVzaXplT2JzZXJ2ZXIuY2FsbCh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbXBvcnQgU2VsZWN0IE9wdGlvbnMgZnJvbSBkYXRhc2V0XG5cdCAqIE5vdCB0byBiZSBjb25mdXNlZCB3aXRoIHRoZSBjb250cm9sIGRlZmF1bHRzL29wdGlvbnNcblx0ICpcblx0ICogQHBhcmFtIHthcnJheXxvYmplY3R8TWFwfFNldH0gZGF0YVxuXHQgKiBAcmV0dXJuIHtTZWxlY3R9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBtYXAgaXMgbm90IGl0ZXJhYmxlXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBtaXNzaW5nIGxhYmVsIGNvbmZpZ3VyYXRpb25cblx0ICogQGZpcmVzIG1vbnN0ZXItb3B0aW9ucy1zZXQgdGhpcyBldmVudCBpcyBmaXJlZCB3aGVuIHRoZSBvcHRpb25zIGFyZSBzZXRcblx0ICovXG5cdGltcG9ydE9wdGlvbnMoZGF0YSkge1xuXHRcdGNvbnN0IG1hcHBpbmdPcHRpb25zID0gdGhpcy5nZXRPcHRpb24oXCJtYXBwaW5nXCIsIHt9KTtcblx0XHRjb25zdCBzZWxlY3RvciA9IG1hcHBpbmdPcHRpb25zPy5bXCJzZWxlY3RvclwiXTtcblx0XHRjb25zdCBsYWJlbFRlbXBsYXRlID0gbWFwcGluZ09wdGlvbnM/LltcImxhYmVsVGVtcGxhdGVcIl07XG5cdFx0Y29uc3QgdmFsdWVUZW1wbGF0ZSA9IG1hcHBpbmdPcHRpb25zPy5bXCJ2YWx1ZVRlbXBsYXRlXCJdO1xuXHRcdGNvbnN0IGZpbHRlciA9IG1hcHBpbmdPcHRpb25zPy5bXCJmaWx0ZXJcIl07XG5cblx0XHRsZXQgZmxhZyA9IGZhbHNlO1xuXHRcdGlmIChsYWJlbFRlbXBsYXRlID09PSBcIlwiKSB7XG5cdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBcImVtcHR5IGxhYmVsIHRlbXBsYXRlXCIpO1xuXHRcdFx0ZmxhZyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKHZhbHVlVGVtcGxhdGUgPT09IFwiXCIpIHtcblx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIFwiZW1wdHkgdmFsdWUgdGVtcGxhdGVcIik7XG5cdFx0XHRmbGFnID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAoZmxhZyA9PT0gdHJ1ZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibWlzc2luZyBsYWJlbCBjb25maWd1cmF0aW9uXCIpO1xuXHRcdH1cblxuXHRcdGNvbnN0IG1hcCA9IGJ1aWxkTWFwKGRhdGEsIHNlbGVjdG9yLCBsYWJlbFRlbXBsYXRlLCB2YWx1ZVRlbXBsYXRlLCBmaWx0ZXIpO1xuXG5cdFx0Y29uc3Qgb3B0aW9ucyA9IFtdO1xuXG5cdFx0aWYgKCFpc0l0ZXJhYmxlKG1hcCkpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIm1hcCBpcyBub3QgaXRlcmFibGVcIik7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdmlzaWJpbGl0eSA9IFwidmlzaWJsZVwiO1xuXG5cdFx0bWFwLmZvckVhY2goKGxhYmVsLCB2YWx1ZSkgPT4ge1xuXHRcdFx0b3B0aW9ucy5wdXNoKHtcblx0XHRcdFx0dmFsdWUsXG5cdFx0XHRcdGxhYmVsLFxuXHRcdFx0XHR2aXNpYmlsaXR5LFxuXHRcdFx0XHRkYXRhOiBtYXAuZ2V0KHZhbHVlKSxcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0cnVuQXNPcHRpb25MZW5ndGhDaGFuZ2VkLmNhbGwodGhpcywgbWFwLnNpemUpO1xuXHRcdHRoaXMuc2V0T3B0aW9uKFwib3B0aW9uc1wiLCBvcHRpb25zKTtcblxuXHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItb3B0aW9ucy1zZXRcIiwge1xuXHRcdFx0b3B0aW9ucyxcblx0XHR9KTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEByZXR1cm4ge1NlbGVjdH1cblx0ICovXG5cdGNhbGNBbmRTZXRPcHRpb25zRGltZW5zaW9uKCkge1xuXHRcdGNhbGNBbmRTZXRPcHRpb25zRGltZW5zaW9uLmNhbGwodGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLXNlbGVjdFwiO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge0NTU1N0eWxlU2hlZXRbXX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiBbU2VsZWN0U3R5bGVTaGVldF07XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBsb29rdXBTZWxlY3Rpb24oKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdGNvbnN0IHNlbGVjdGlvbiA9IHNlbGYuZ2V0T3B0aW9uKFwic2VsZWN0aW9uXCIpO1xuXHRcdGlmIChzZWxlY3Rpb24ubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKHNlbGZbaXNMb2FkaW5nU3ltYm9sXSA9PT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChzZWxmW2xhenlMb2FkRG9uZVN5bWJvbF0gPT09IHRydWUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRsZXQgdXJsID0gc2VsZi5nZXRPcHRpb24oXCJ1cmxcIik7XG5cdFx0bGV0IGxvb2t1cFVybCA9IHNlbGYuZ2V0T3B0aW9uKFwibG9va3VwLnVybFwiKTtcblx0XHRpZiAobG9va3VwVXJsICE9PSBudWxsKSB7XG5cdFx0XHR1cmwgPSBsb29rdXBVcmw7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwibG9va3VwLmdyb3VwaW5nXCIpID09PSB0cnVlKSB7XG5cdFx0XHRmaWx0ZXJGcm9tUmVtb3RlQnlWYWx1ZVxuXHRcdFx0XHQuY2FsbChcblx0XHRcdFx0XHRzZWxmLFxuXHRcdFx0XHRcdHVybCxcblx0XHRcdFx0XHRzZWxlY3Rpb24ubWFwKChzKSA9PiBzPy5bXCJ2YWx1ZVwiXSksXG5cdFx0XHRcdClcblx0XHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4oc2VsZiwgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgYCR7ZX1gKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBzIG9mIHNlbGVjdGlvbikge1xuXHRcdFx0aWYgKHM/LltcInZhbHVlXCJdKSB7XG5cdFx0XHRcdGZpbHRlckZyb21SZW1vdGVCeVZhbHVlLmNhbGwoc2VsZiwgdXJsLCBzPy5bXCJ2YWx1ZVwiXSkuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbihzZWxmLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBgJHtlfWApO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdH0sIDEwMCk7XG59XG5cbmZ1bmN0aW9uIGZldGNoSXQodXJsLCBjb250cm9sT3B0aW9ucykge1xuXHRpZiAodXJsIGluc3RhbmNlb2YgVVJMKSB7XG5cdFx0dXJsID0gdXJsLnRvU3RyaW5nKCk7XG5cdH1cblxuXHRpZiAodXJsICE9PSB1bmRlZmluZWQgJiYgdXJsICE9PSBudWxsKSB7XG5cdFx0dXJsID0gdmFsaWRhdGVTdHJpbmcodXJsKTtcblx0fSBlbHNlIHtcblx0XHR1cmwgPSB0aGlzLmdldE9wdGlvbihcInVybFwiKTtcblx0XHRpZiAodXJsID09PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gdXJsIGRlZmluZWRcIikpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0c2V0U3RhdHVzT3JSZW1vdmVCYWRnZXMuY2FsbCh0aGlzLCBcImxvYWRpbmdcIik7XG5cblx0XHRuZXcgUHJvY2Vzc2luZygxMCwgKCkgPT4ge1xuXHRcdFx0ZmV0Y2hEYXRhXG5cdFx0XHRcdC5jYWxsKHRoaXMsIHVybClcblx0XHRcdFx0LnRoZW4oKG1hcCkgPT4ge1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdGlzT2JqZWN0KG1hcCkgfHxcblx0XHRcdFx0XHRcdGlzQXJyYXkobWFwKSB8fFxuXHRcdFx0XHRcdFx0bWFwIGluc3RhbmNlb2YgU2V0IHx8XG5cdFx0XHRcdFx0XHRtYXAgaW5zdGFuY2VvZiBNYXBcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuaW1wb3J0T3B0aW9ucyhtYXApO1xuXHRcdFx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdFx0XHRzZXRTdGF0dXNPclJlbW92ZUJhZGdlcy5jYWxsKHRoaXMsIFwiZXJyb3JcIik7XG5cdFx0XHRcdFx0XHRcdHJlamVjdChlKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR0aGlzW2xhc3RGZXRjaGVkRGF0YVN5bWJvbF0gPSBtYXA7XG5cblx0XHRcdFx0XHRcdGxldCByZXN1bHQ7XG5cdFx0XHRcdFx0XHRjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmdldE9wdGlvbihcInNlbGVjdGlvblwiKTtcblx0XHRcdFx0XHRcdGxldCBuZXdWYWx1ZSA9IFtdO1xuXHRcdFx0XHRcdFx0aWYgKHNlbGVjdGlvbikge1xuXHRcdFx0XHRcdFx0XHRuZXdWYWx1ZSA9IHNlbGVjdGlvbjtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAodGhpcy5oYXNBdHRyaWJ1dGUoXCJ2YWx1ZVwiKSkge1xuXHRcdFx0XHRcdFx0XHRuZXdWYWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwidmFsdWVcIik7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHJlc3VsdCA9IHNldFNlbGVjdGlvbi5jYWxsKHRoaXMsIG5ld1ZhbHVlKTtcblx0XHRcdFx0XHRcdHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGNoZWNrT3B0aW9uU3RhdGUuY2FsbCh0aGlzKTtcblx0XHRcdFx0XHRcdFx0c2V0U3RhdHVzT3JSZW1vdmVCYWRnZXMuY2FsbCh0aGlzLCBcImNsb3NlZFwiKTtcblx0XHRcdFx0XHRcdFx0dXBkYXRlUG9wcGVyLmNhbGwodGhpcyk7XG5cdFx0XHRcdFx0XHRcdHJlc29sdmUocmVzdWx0KTtcblx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0c2V0U3RhdHVzT3JSZW1vdmVCYWRnZXMuY2FsbCh0aGlzLCBcImVycm9yXCIpO1xuXHRcdFx0XHRcdHJlamVjdChuZXcgRXJyb3IoXCJpbnZhbGlkIHJlc3BvbnNlXCIpKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdFx0c2V0U3RhdHVzT3JSZW1vdmVCYWRnZXMuY2FsbCh0aGlzLCBcImVycm9yXCIpO1xuXHRcdFx0XHRcdHJlamVjdChlKTtcblx0XHRcdFx0fSk7XG5cdFx0fSlcblx0XHRcdC5ydW4oKVxuXHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwodGhpcywgXCJlcnJvclwiKTtcblx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHRcdFx0cmVqZWN0KGUpO1xuXHRcdFx0fSk7XG5cdH0pO1xufVxuXG4vKipcbiAqIFRoaXMgYXR0cmlidXRlIGNhbiBiZSB1c2VkIHRvIHBhc3MgYSBVUkwgdG8gdGhpcyBzZWxlY3QuXG4gKlxuICogYGBgXG4gKiA8bW9uc3Rlci1zZWxlY3QgZGF0YS1tb25zdGVyLXVybD1cImh0dHBzOi8vZXhhbXBsZS5jb20vXCI+PC9tb25zdGVyLXNlbGVjdD5cbiAqIGBgYFxuICpcbiAqIEBwcml2YXRlXG4gKiBAZGVwcmVjYXRlZCAyMDI0LTAxLTIxICh5b3Ugc2hvdWxkIHVzZSBkYXRhLW1vbnN0ZXItb3B0aW9uLS4uLilcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gaW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzKCkge1xuXHRjb25zdCBvcHRpb25zID0ge307XG5cblx0Y29uc3QgdGVtcGxhdGUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImRhdGEtbW9uc3Rlci1zZWxlY3RlZC10ZW1wbGF0ZVwiKTtcblx0aWYgKGlzU3RyaW5nKHRlbXBsYXRlKSkge1xuXHRcdGlmICghb3B0aW9uc1tcInRlbXBsYXRlTWFwcGluZ1wiXSkgb3B0aW9uc1tcInRlbXBsYXRlTWFwcGluZ1wiXSA9IHt9O1xuXG5cdFx0c3dpdGNoICh0ZW1wbGF0ZSkge1xuXHRcdFx0Y2FzZSBcInN1bW1hcnlcIjpcblx0XHRcdGNhc2UgXCJkZWZhdWx0XCI6XG5cdFx0XHRcdG9wdGlvbnNbXCJ0ZW1wbGF0ZU1hcHBpbmdcIl1bXCJzZWxlY3RlZFwiXSA9IGdldFN1bW1hcnlUZW1wbGF0ZSgpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJzZWxlY3RlZFwiOlxuXHRcdFx0XHRvcHRpb25zW1widGVtcGxhdGVNYXBwaW5nXCJdW1wic2VsZWN0ZWRcIl0gPSBnZXRTZWxlY3Rpb25UZW1wbGF0ZSgpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdFx0XHRcdHRoaXMsXG5cdFx0XHRcdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRcdFx0XHRcImludmFsaWQgdGVtcGxhdGUsIHVzZSBzdW1tYXJ5IG9yIHNlbGVjdGVkXCIsXG5cdFx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG9wdGlvbnM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYXR0YWNoUmVzaXplT2JzZXJ2ZXIoKSB7XG5cdC8vIGFnYWluc3QgZmxpY2tlcmluZ1xuXHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXSA9IG5ldyBSZXNpemVPYnNlcnZlcigoZW50cmllcykgPT4ge1xuXHRcdGlmICh0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdIGluc3RhbmNlb2YgRGVhZE1hbnNTd2l0Y2gpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF0udG91Y2goKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRkZWxldGUgdGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdID0gbmV3IERlYWRNYW5zU3dpdGNoKDIwMCwgKCkgPT4ge1xuXHRcdFx0dXBkYXRlUG9wcGVyLmNhbGwodGhpcyk7XG5cdFx0XHRkZWxldGUgdGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXTtcblx0XHR9KTtcblx0fSk7XG5cblx0dGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0ub2JzZXJ2ZSh0aGlzLnBhcmVudEVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBkaXNjb25uZWN0UmVzaXplT2JzZXJ2ZXIoKSB7XG5cdGlmICh0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXSBpbnN0YW5jZW9mIFJlc2l6ZU9ic2VydmVyKSB7XG5cdFx0dGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0uZGlzY29ubmVjdCgpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldFNlbGVjdGlvblRlbXBsYXRlKCkge1xuXHRyZXR1cm4gYDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJzZWxlY3Rpb25cIiBwYXJ0PVwic2VsZWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWluc2VydD1cInNlbGVjdGlvbiBwYXRoOnNlbGVjdGlvblwiIHJvbGU9XCJzZWFyY2hcIlxuICAgICAgICAgICAgPjxpbnB1dCB0eXBlPVwidGV4dFwiIHJvbGU9XCJzZWFyY2hib3hcIlxuICAgICAgICAgICAgICAgICAgICBwYXJ0PVwiaW5saW5lLWZpbHRlclwiIG5hbWU9XCJpbmxpbmUtZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJmaWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgPjxkaXYgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOm1lc3NhZ2VzLmNvbnRyb2xcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PmA7XG59XG5cbmZ1bmN0aW9uIGdldFN1bW1hcnlUZW1wbGF0ZSgpIHtcblx0cmV0dXJuIGA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwic2VsZWN0aW9uXCIgcm9sZT1cInNlYXJjaFwiIHBhcnQ9XCJzdW1tYXJ5XCI+XG4gICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcm9sZT1cInNlYXJjaGJveFwiXG4gICAgICAgICAgIHBhcnQ9XCJpbmxpbmUtZmlsdGVyXCIgbmFtZT1cImlubGluZS1maWx0ZXJcIlxuICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cImZpbHRlclwiXG4gICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgPlxuICAgIDxkaXYgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOm1lc3NhZ2VzLnNlbGVjdGVkXCI+PC9kaXY+ICAgIFxuPC9kaXY+YDtcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHt2b2lkfVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gcGFyc2VTbG90c1RvT3B0aW9ucygpIHtcblx0bGV0IG9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbihcIm9wdGlvbnNcIik7XG5cdGlmICghaXNJdGVyYWJsZShvcHRpb25zKSkge1xuXHRcdG9wdGlvbnMgPSBbXTtcblx0fVxuXG5cdGxldCBjb3VudGVyID0gMTtcblx0Z2V0U2xvdHRlZEVsZW1lbnRzLmNhbGwodGhpcywgXCJkaXZcIikuZm9yRWFjaCgobm9kZSkgPT4ge1xuXHRcdGxldCB2YWx1ZSA9IChjb3VudGVyKyspLnRvU3RyaW5nKCk7XG5cdFx0bGV0IHZpc2liaWxpdHkgPSBcInZpc2libGVcIjtcblxuXHRcdGlmIChub2RlLmhhc0F0dHJpYnV0ZShcImRhdGEtbW9uc3Rlci12YWx1ZVwiKSkge1xuXHRcdFx0dmFsdWUgPSBub2RlLmdldEF0dHJpYnV0ZShcImRhdGEtbW9uc3Rlci12YWx1ZVwiKTtcblx0XHR9XG5cblx0XHRpZiAobm9kZS5zdHlsZS5kaXNwbGF5ID09PSBcIm5vbmVcIikge1xuXHRcdFx0dmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XG5cdFx0fVxuXG5cdFx0Y29uc3QgbGFiZWwgPSBub2RlLm91dGVySFRNTDtcblxuXHRcdG9wdGlvbnMucHVzaCh7XG5cdFx0XHR2YWx1ZSxcblx0XHRcdGxhYmVsLFxuXHRcdFx0dmlzaWJpbGl0eSxcblx0XHR9KTtcblx0fSk7XG5cblx0cnVuQXNPcHRpb25MZW5ndGhDaGFuZ2VkLmNhbGwodGhpcywgb3B0aW9ucy5sZW5ndGgpO1xuXHR0aGlzLnNldE9wdGlvbihcIm9wdGlvbnNcIiwgb3B0aW9ucyk7XG59XG5cbi8qKlxuICogd2FpdCB1bnRpbCBhbGwgb3B0aW9ucyBhcmUgZmluaXNoZWQgcmVuZGVyaW5nXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7aW50fSB0YXJnZXRMZW5ndGhcbiAqL1xuZnVuY3Rpb24gcnVuQXNPcHRpb25MZW5ndGhDaGFuZ2VkKHRhcmdldExlbmd0aCkge1xuXHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRpZiAoIXNlbGZbb3B0aW9uc0VsZW1lbnRTeW1ib2xdKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3QgY2FsbGJhY2sgPSBmdW5jdGlvbiAobXV0YXRpb25zTGlzdCwgb2JzZXJ2ZXIpIHtcblx0XHRjb25zdCBydW4gPSBmYWxzZTtcblx0XHRmb3IgKGNvbnN0IG11dGF0aW9uIG9mIG11dGF0aW9uc0xpc3QpIHtcblx0XHRcdGlmIChtdXRhdGlvbi50eXBlID09PSBcImNoaWxkTGlzdFwiKSB7XG5cdFx0XHRcdGNvbnN0IHJ1biA9IHRydWU7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChydW4gPT09IHRydWUpIHtcblx0XHRcdGNvbnN0IG5vZGVzID0gc2VsZltvcHRpb25zRWxlbWVudFN5bWJvbF0ucXVlcnlTZWxlY3RvckFsbChcblx0XHRcdFx0YGRpdlske0FUVFJJQlVURV9ST0xFfT1vcHRpb25dYCxcblx0XHRcdCk7XG5cblx0XHRcdGlmIChub2Rlcy5sZW5ndGggPT09IHRhcmdldExlbmd0aCkge1xuXHRcdFx0XHRjaGVja09wdGlvblN0YXRlLmNhbGwoc2VsZik7XG5cdFx0XHRcdG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0Y29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihjYWxsYmFjayk7XG5cdG9ic2VydmVyLm9ic2VydmUoc2VsZltvcHRpb25zRWxlbWVudFN5bWJvbF0sIHtcblx0XHRhdHRyaWJ1dGVzOiBmYWxzZSxcblx0XHRjaGlsZExpc3Q6IHRydWUsXG5cdFx0c3VidHJlZTogdHJ1ZSxcblx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4geyp9XG4gKi9cbmZ1bmN0aW9uIGJ1aWxkU2VsZWN0aW9uTGFiZWwodmFsdWUpIHtcblx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwib3B0aW9uc1wiKTtcblxuXHRmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMubGVuZ3RoOyBpKyspIHtcblx0XHRsZXQgbyA9IG9wdGlvbnM/LltpXTtcblx0XHRsZXQgbCwgdiwgdjI7XG5cblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy51c2VTdHJpY3RWYWx1ZUNvbXBhcmlzb25cIikgPT09IHRydWUpIHtcblx0XHRcdHYgPSB2YWx1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0diA9IGAke3ZhbHVlfWA7XG5cdFx0fVxuXG5cdFx0aWYgKGlzUHJpbWl0aXZlKG8pICYmIG8gPT09IHZhbHVlKSB7XG5cdFx0XHRyZXR1cm4gbztcblx0XHR9IGVsc2UgaWYgKCFpc09iamVjdChvKSkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMudXNlU3RyaWN0VmFsdWVDb21wYXJpc29uXCIpID09PSB0cnVlKSB7XG5cdFx0XHRsID0gbz8uW1wibGFiZWxcIl07XG5cdFx0XHR2MiA9IG8/LltcInZhbHVlXCJdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRsID0gYCR7bz8uW1wibGFiZWxcIl19YDtcblx0XHRcdHYyID0gYCR7bz8uW1widmFsdWVcIl19YDtcblx0XHR9XG5cblx0XHRpZiAodjIgPT09IHYpIHtcblx0XHRcdHJldHVybiBsO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyB2YWx1ZSBmb3VuZFxuICovXG5mdW5jdGlvbiBnZXRTZWxlY3Rpb25MYWJlbCh2YWx1ZSkge1xuXHRjb25zdCBjYWxsYmFjayA9IHRoaXMuZ2V0T3B0aW9uKFwiZm9ybWF0dGVyLnNlbGVjdGlvblwiKTtcblx0aWYgKGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG5cdFx0Y29uc3QgbGFiZWwgPSBjYWxsYmFjay5jYWxsKHRoaXMsIHZhbHVlKTtcblx0XHRpZiAoaXNTdHJpbmcobGFiZWwpKSByZXR1cm4gbGFiZWw7XG5cdH1cblxuXHRpZiAoaXNTdHJpbmcodmFsdWUpIHx8IGlzSW50ZWdlcih2YWx1ZSkpIHtcblx0XHRyZXR1cm4gYCR7dmFsdWV9YDtcblx0fVxuXG5cdHJldHVybiB0aGlzLmdldE9wdGlvbihcImxhYmVscy5jYW5ub3QtYmUtbG9hZGVkXCIsIHZhbHVlKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAqL1xuZnVuY3Rpb24gaGFuZGxlVG9nZ2xlS2V5Ym9hcmRFdmVudHMoZXZlbnQpIHtcblx0c3dpdGNoIChldmVudD8uW1wiY29kZVwiXSkge1xuXHRcdGNhc2UgXCJFc2NhcGVcIjpcblx0XHRcdHRvZ2dsZS5jYWxsKHRoaXMpO1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJTcGFjZVwiOlxuXHRcdFx0dG9nZ2xlLmNhbGwodGhpcyk7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkFycm93RG93blwiOlxuXHRcdFx0c2hvdy5jYWxsKHRoaXMpO1xuXHRcdFx0YWN0aXZhdGVDdXJyZW50T3B0aW9uLmNhbGwodGhpcywgRk9DVVNfRElSRUNUSU9OX0RPV04pO1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJBcnJvd1VwXCI6XG5cdFx0XHRoaWRlLmNhbGwodGhpcyk7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0YnJlYWs7XG5cdH1cbn1cblxuLyoqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjE1LjBcbiAqIEBwcml2YXRlXG4gKiBAdGhpcyBDdXN0b21FbGVtZW50XG4gKi9cbmZ1bmN0aW9uIGluaXRPcHRpb25PYnNlcnZlcigpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0c2VsZi5hdHRhY2hPYnNlcnZlcihcblx0XHRuZXcgT2JzZXJ2ZXIoZnVuY3Rpb24gKCkge1xuXHRcdFx0bmV3IFByb2Nlc3NpbmcoKCkgPT4ge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdHNlbGYudXBkYXRlSTE4bigpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlKTtcblx0XHRcdFx0XHRyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuXHRcdFx0XHRcdFx0c2V0U3RhdHVzT3JSZW1vdmVCYWRnZXMuY2FsbChzZWxmLCBcImVycm9yXCIpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0YXJlT3B0aW9uc0F2YWlsYWJsZUFuZEluaXQuY2FsbChzZWxmKTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoZSk7XG5cdFx0XHRcdFx0cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcblx0XHRcdFx0XHRcdHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwoc2VsZiwgXCJlcnJvclwiKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHNldFN1bW1hcnlBbmRDb250cm9sVGV4dC5jYWxsKHNlbGYpO1xuXHRcdFx0fSkucnVuKCk7XG5cdFx0fSksXG5cdCk7XG59XG5cbmZ1bmN0aW9uIGdldERlZmF1bHRUcmFuc2xhdGlvbigpIHtcblx0Y29uc3QgdHJhbnNsYXRpb24gPSBuZXcgVHJhbnNsYXRpb25zKFwiZW5cIikuYXNzaWduVHJhbnNsYXRpb25zKFxuXHRcdHRoaXMuZ2V0T3B0aW9uKFwibGFiZWxzXCIsIHt9KSxcblx0KTtcblxuXHR0cnkge1xuXHRcdGNvbnN0IGRvYyA9IGdldERvY3VtZW50VHJhbnNsYXRpb25zKCk7XG5cdFx0dHJhbnNsYXRpb24ubG9jYWxlID0gZG9jLmxvY2FsZTtcblx0fSBjYXRjaCAoZSkge31cblxuXHRyZXR1cm4gdHJhbnNsYXRpb247XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ3wqfVxuICovXG5mdW5jdGlvbiBzZXRTdW1tYXJ5QW5kQ29udHJvbFRleHQoKSB7XG5cdGNvbnN0IHRyYW5zbGF0aW9ucyA9IGdldERlZmF1bHRUcmFuc2xhdGlvbi5jYWxsKHRoaXMpO1xuXHRjb25zdCBzZWxlY3Rpb25zID0gdGhpcy5nZXRPcHRpb24oXCJzZWxlY3Rpb25cIik7XG5cblx0Y29uc3QgdGV4dCA9IHRyYW5zbGF0aW9ucy5nZXRQbHVyYWxSdWxlVGV4dChcblx0XHRcInN1bW1hcnktdGV4dFwiLFxuXHRcdHNlbGVjdGlvbnMubGVuZ3RoLFxuXHRcdFwiXCIsXG5cdCk7XG5cblx0Y29uc3Qgc2VsZWN0ZWRUZXh0ID0gbmV3IEZvcm1hdHRlcih7XG5cdFx0Y291bnQ6IFN0cmluZyhzZWxlY3Rpb25zLmxlbmd0aCksXG5cdH0pLmZvcm1hdCh0ZXh0KTtcblxuXHR0aGlzLnNldE9wdGlvbihcIm1lc3NhZ2VzLnNlbGVjdGVkXCIsIHNlbGVjdGVkVGV4dCk7XG5cblx0Y29uc3QgY3VycmVudCA9IHRoaXMuZ2V0T3B0aW9uKFwibWVzc2FnZXMuY29udHJvbFwiKTtcblx0Y29uc3QgbXNnID0gdGhpcy5nZXRPcHRpb24oXCJsYWJlbHMuc2VsZWN0LWFuLW9wdGlvblwiKTtcblxuXHRpZiAoXG5cdFx0Y3VycmVudCA9PT0gXCJcIiB8fFxuXHRcdGN1cnJlbnQgPT09IHVuZGVmaW5lZCB8fFxuXHRcdGN1cnJlbnQgPT09IG1zZyB8fFxuXHRcdGN1cnJlbnQgPT09IG51bGxcblx0KSB7XG5cdFx0aWYgKHNlbGVjdGlvbnMgPT09IHVuZGVmaW5lZCB8fCBzZWxlY3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0dGhpcy5zZXRPcHRpb24oXCJtZXNzYWdlcy5jb250cm9sXCIsIG1zZyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0T3B0aW9uKFwibWVzc2FnZXMuY29udHJvbFwiLCBcIlwiKTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7Tm9kZUxpc3R9XG4gKi9cbmZ1bmN0aW9uIGdldE9wdGlvbkVsZW1lbnRzKCkge1xuXHRyZXR1cm4gdGhpc1tvcHRpb25zRWxlbWVudFN5bWJvbF0ucXVlcnlTZWxlY3RvckFsbChcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PW9wdGlvbl1gLFxuXHQpO1xufVxuXG4vKipcbiAqIFdpdGggdGhlIGhlbHAgb2YgdGhpcyBmaWx0ZXIgY2FsbGJhY2ssIHZhbHVlcyBjYW4gYmUgZmlsdGVyZWQgb3V0LiBPbmx5IGlmIHRoZSBmaWx0ZXIgZnVuY3Rpb24gcmV0dXJucyB0cnVlLCB0aGUgdmFsdWUgaXMgdGFrZW4gZm9yIHRoZSBtYXAuXG4gKlxuICogQGNhbGxiYWNrIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtfmV4YW1wbGVGaWx0ZXJDYWxsYmFja1xuICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAgS2V5XG4gKiBAc2VlIE1vbnN0ZXIuRGF0YS5idWlsZE1hcFxuICovXG5cbi8qKlxuICpcbiAqIEBjYWxsYmFjayBNb25zdGVyLkNvbXBvbmVudHMuRm9ybX5mb3JtYXR0ZXJTZWxlY3Rpb25DYWxsYmFja1xuICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZVxuICogQHJldHVybiB7c3RyaW5nfHVuZGVmaW5lZH1cbiAqIEBzZWUgTW9uc3Rlci5EYXRhLmJ1aWxkTWFwXG4gKi9cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjYWxjQW5kU2V0T3B0aW9uc0RpbWVuc2lvbigpIHtcblx0Y29uc3Qgb3B0aW9ucyA9IGdldE9wdGlvbkVsZW1lbnRzLmNhbGwodGhpcyk7XG5cdGNvbnN0IGNvbnRhaW5lciA9IHRoaXNbb3B0aW9uc0VsZW1lbnRTeW1ib2xdO1xuXHRpZiAoIShjb250YWluZXIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBvcHRpb25zIGluc3RhbmNlb2YgTm9kZUxpc3QpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0bGV0IHZpc2libGUgPSAwO1xuXHRsZXQgb3B0aW9uSGVpZ2h0ID0gMDtcblx0Y29uc3QgbWF4ID0gdGhpcy5nZXRPcHRpb24oXCJzaG93TWF4T3B0aW9uc1wiLCAxMCk7XG5cblx0bGV0IHNjcm9sbEZsYWcgPSBmYWxzZTtcblx0Zm9yIChjb25zdCBbLCBvcHRpb25dIG9mIE9iamVjdC5lbnRyaWVzKG9wdGlvbnMpKSB7XG5cdFx0Y29uc3QgY29tcHV0ZWRTdHlsZSA9IGdldEdsb2JhbCgpLmdldENvbXB1dGVkU3R5bGUob3B0aW9uKTtcblx0XHRpZiAoY29tcHV0ZWRTdHlsZS5kaXNwbGF5ID09PSBcIm5vbmVcIikgY29udGludWU7XG5cblx0XHRsZXQgaCA9IG9wdGlvbi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XG5cdFx0aCArPSBwYXJzZUludChjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCJtYXJnaW4tdG9wXCIpLCAxMCk7XG5cdFx0aCArPSBwYXJzZUludChjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCJtYXJnaW4tYm90dG9tXCIpLCAxMCk7XG5cdFx0b3B0aW9uSGVpZ2h0ICs9IGg7XG5cblx0XHR2aXNpYmxlKys7XG5cblx0XHRpZiAodmlzaWJsZSA+IG1heCkge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0aWYgKHZpc2libGUgPiBtYXgpIHtcblx0XHR2aXNpYmxlID0gbWF4O1xuXHRcdHNjcm9sbEZsYWcgPSB0cnVlO1xuXHR9XG5cblx0aWYgKHZpc2libGUgPT09IDApIHtcblx0XHRpZiAoZ2V0RmlsdGVyTW9kZS5jYWxsKHRoaXMpID09PSBGSUxURVJfTU9ERV9ESVNBQkxFRCkge1xuXHRcdFx0dGhpcy5zZXRPcHRpb24oXG5cdFx0XHRcdFwibWVzc2FnZXMuZW1wdHlPcHRpb25zXCIsXG5cdFx0XHRcdHRoaXMuZ2V0T3B0aW9uKFwibGFiZWxzLm5vLW9wdGlvbnMtYXZhaWxhYmxlXCIpLFxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXRPcHRpb24oXG5cdFx0XHRcdFwibWVzc2FnZXMuZW1wdHlPcHRpb25zXCIsXG5cdFx0XHRcdHRoaXMuZ2V0T3B0aW9uKFwibGFiZWxzLm5vLW9wdGlvbnMtZm91bmRcIiksXG5cdFx0XHQpO1xuXHRcdH1cblx0XHR0aGlzW25vT3B0aW9uc0F2YWlsYWJsZUVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5yZW1vdmUoXCJkLW5vbmVcIik7XG5cdH0gZWxzZSB7XG5cdFx0dGhpc1tub09wdGlvbnNBdmFpbGFibGVFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuYWRkKFwiZC1ub25lXCIpO1xuXHR9XG5cblx0Y29uc3Qgc3R5bGVzID0gZ2V0R2xvYmFsKCkuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzW29wdGlvbnNFbGVtZW50U3ltYm9sXSk7XG5cdGxldCBwYWRkaW5nID0gcGFyc2VJbnQoc3R5bGVzLmdldFByb3BlcnR5VmFsdWUoXCJwYWRkaW5nLXRvcFwiKSwgMTApO1xuXHRwYWRkaW5nICs9IHBhcnNlSW50KHN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKFwicGFkZGluZy1ib3R0b21cIiksIDEwKTtcblxuXHRsZXQgbWFyZ2luID0gcGFyc2VJbnQoc3R5bGVzLmdldFByb3BlcnR5VmFsdWUoXCJtYXJnaW4tdG9wXCIpLCAxMCk7XG5cdG1hcmdpbiArPSBwYXJzZUludChzdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZShcIm1hcmdpbi1ib3R0b21cIiksIDEwKTtcblxuXHRjb25zdCBjb250YWluZXJIZWlnaHQgPSBvcHRpb25IZWlnaHQgKyBwYWRkaW5nICsgbWFyZ2luO1xuXHRjb250YWluZXIuc3R5bGUuaGVpZ2h0ID0gYCR7Y29udGFpbmVySGVpZ2h0fXB4YDtcblxuXHRpZiAoc2Nyb2xsRmxhZyA9PT0gdHJ1ZSkge1xuXHRcdGNvbnRhaW5lci5zdHlsZS5vdmVyZmxvd1kgPSBcInNjcm9sbFwiO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnRhaW5lci5zdHlsZS5vdmVyZmxvd1kgPSBcImF1dG9cIjtcblx0fVxuXG5cdGNvbnN0IGRvbVJlY3QgPSB0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuXHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLndpZHRoID0gYCR7ZG9tUmVjdC53aWR0aH1weGA7XG5cdGNvbnRhaW5lci5zdHlsZS5vdmVyZmxvd1ggPSBcImF1dG9cIjtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IGRpcmVjdGlvblxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqL1xuZnVuY3Rpb24gYWN0aXZhdGVDdXJyZW50T3B0aW9uKGRpcmVjdGlvbikge1xuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHRsZXQgZm9jdXNlZCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKGBbJHtBVFRSSUJVVEVfUFJFRklYfWZvY3VzZWRdYCk7XG5cblx0aWYgKFxuXHRcdCEoZm9jdXNlZCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB8fFxuXHRcdGZvY3VzZWQubWF0Y2hlcyhcIltkYXRhLW1vbnN0ZXItdmlzaWJpbGl0eT1oaWRkZW5dXCIpXG5cdCkge1xuXHRcdGZvciAoY29uc3QgWywgZV0gb2YgT2JqZWN0LmVudHJpZXMoXG5cdFx0XHR0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbChgWyR7QVRUUklCVVRFX1JPTEV9PW9wdGlvbl1gKSxcblx0XHQpKSB7XG5cdFx0XHRpZiAoZS5tYXRjaGVzKFwiW2RhdGEtbW9uc3Rlci12aXNpYmlsaXR5PXZpc2libGVdXCIpKSB7XG5cdFx0XHRcdGZvY3VzZWQgPSBlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0aWYgKGRpcmVjdGlvbiA9PT0gRk9DVVNfRElSRUNUSU9OX0RPV04pIHtcblx0XHRcdHdoaWxlIChmb2N1c2VkLm5leHRTaWJsaW5nKSB7XG5cdFx0XHRcdGZvY3VzZWQgPSBmb2N1c2VkLm5leHRTaWJsaW5nO1xuXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRmb2N1c2VkIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiZcblx0XHRcdFx0XHRmb2N1c2VkLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSkgJiZcblx0XHRcdFx0XHRmb2N1c2VkLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSkgPT09IFwib3B0aW9uXCIgJiZcblx0XHRcdFx0XHRmb2N1c2VkLm1hdGNoZXMoXCJbZGF0YS1tb25zdGVyLXZpc2liaWxpdHk9dmlzaWJsZV1cIikgJiZcblx0XHRcdFx0XHRmb2N1c2VkLm1hdGNoZXMoXCI6bm90KFtkYXRhLW1vbnN0ZXItZmlsdGVyZWQ9dHJ1ZV0pXCIpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGxldCBmb3VuZCA9IGZhbHNlO1xuXHRcdFx0d2hpbGUgKGZvY3VzZWQucHJldmlvdXNTaWJsaW5nKSB7XG5cdFx0XHRcdGZvY3VzZWQgPSBmb2N1c2VkLnByZXZpb3VzU2libGluZztcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGZvY3VzZWQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJlxuXHRcdFx0XHRcdGZvY3VzZWQuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9ST0xFKSAmJlxuXHRcdFx0XHRcdGZvY3VzZWQuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9ST0xFKSA9PT0gXCJvcHRpb25cIiAmJlxuXHRcdFx0XHRcdGZvY3VzZWQubWF0Y2hlcyhcIltkYXRhLW1vbnN0ZXItdmlzaWJpbGl0eT12aXNpYmxlXVwiKSAmJlxuXHRcdFx0XHRcdGZvY3VzZWQubWF0Y2hlcyhcIjpub3QoW2RhdGEtbW9uc3Rlci1maWx0ZXJlZD10cnVlXSlcIilcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0Zm91bmQgPSB0cnVlO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoZm91bmQgPT09IGZhbHNlKSB7XG5cdFx0XHRcdGZvY3VzRmlsdGVyLmNhbGwodGhpcyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0bmV3IFByb2Nlc3NpbmcoKCkgPT4ge1xuXHRcdGlmIChmb2N1c2VkIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdHRoaXMuc2hhZG93Um9vdFxuXHRcdFx0XHQucXVlcnlTZWxlY3RvckFsbChgWyR7QVRUUklCVVRFX1BSRUZJWH1mb2N1c2VkXWApXG5cdFx0XHRcdC5mb3JFYWNoKChlKSA9PiB7XG5cdFx0XHRcdFx0ZS5yZW1vdmVBdHRyaWJ1dGUoYCR7QVRUUklCVVRFX1BSRUZJWH1mb2N1c2VkYCk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRmb2N1c2VkLmZvY3VzKCk7XG5cdFx0XHRmb2N1c2VkLnNldEF0dHJpYnV0ZShgJHtBVFRSSUJVVEVfUFJFRklYfWZvY3VzZWRgLCB0cnVlKTtcblx0XHR9XG5cdH0pXG5cdFx0LnJ1bigpXG5cdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGZpbHRlck9wdGlvbnMoKSB7XG5cdG5ldyBQcm9jZXNzaW5nKCgpID0+IHtcblx0XHRsZXQgZmlsdGVyVmFsdWU7XG5cblx0XHRzd2l0Y2ggKHRoaXMuZ2V0T3B0aW9uKFwiZmlsdGVyLnBvc2l0aW9uXCIpKSB7XG5cdFx0XHRjYXNlIEZJTFRFUl9QT1NJVElPTl9JTkxJTkU6XG5cdFx0XHRcdGlmICh0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdFx0XHRmaWx0ZXJWYWx1ZSA9IHRoaXNbaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbF0udmFsdWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgRklMVEVSX1BPU0lUSU9OX1BPUFBFUjpcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGlmICh0aGlzW3BvcHBlckZpbHRlckVsZW1lbnRTeW1ib2xdIGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCkge1xuXHRcdFx0XHRcdGZpbHRlclZhbHVlID0gdGhpc1twb3BwZXJGaWx0ZXJFbGVtZW50U3ltYm9sXS52YWx1ZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IG9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbihcIm9wdGlvbnNcIik7XG5cdFx0Zm9yIChjb25zdCBbaSwgb3B0aW9uXSBvZiBPYmplY3QuZW50cmllcyhvcHRpb25zKSkge1xuXHRcdFx0aWYgKG9wdGlvbi5sYWJlbC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoZmlsdGVyVmFsdWUpID09PSAtMSkge1xuXHRcdFx0XHR0aGlzLnNldE9wdGlvbihgb3B0aW9ucy4ke2l9LmZpbHRlcmVkYCwgXCJ0cnVlXCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5zZXRPcHRpb24oYG9wdGlvbnMuJHtpfS5maWx0ZXJlZGAsIHVuZGVmaW5lZCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KVxuXHRcdC5ydW4oKVxuXHRcdC50aGVuKCgpID0+IHtcblx0XHRcdG5ldyBQcm9jZXNzaW5nKDEwMCwgKCkgPT4ge1xuXHRcdFx0XHRjYWxjQW5kU2V0T3B0aW9uc0RpbWVuc2lvbi5jYWxsKHRoaXMpO1xuXHRcdFx0XHRmb2N1c0ZpbHRlci5jYWxsKHRoaXMpO1xuXHRcdFx0fSlcblx0XHRcdFx0LnJ1bigpXG5cdFx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0XHRcdH0pO1xuXHRcdH0pXG5cdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICovXG5mdW5jdGlvbiBoYW5kbGVGaWx0ZXJLZXlib2FyZEV2ZW50cyhldmVudCkge1xuXHRjb25zdCBzaGlmdEtleSA9IGV2ZW50Py5bXCJzaGlmdEtleVwiXTtcblxuXHRzd2l0Y2ggKGV2ZW50Py5bXCJjb2RlXCJdKSB7XG5cdFx0Y2FzZSBcIlRhYlwiOlxuXHRcdFx0YWN0aXZhdGVDdXJyZW50T3B0aW9uLmNhbGwodGhpcywgRk9DVVNfRElSRUNUSU9OX0RPV04pO1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJFc2NhcGVcIjpcblx0XHRcdHRvZ2dsZS5jYWxsKHRoaXMpO1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJUYWJcIiAmJiBzaGlmdEtleSA9PT0gdHJ1ZTpcblx0XHRjYXNlIFwiQXJyb3dVcFwiOlxuXHRcdFx0YWN0aXZhdGVDdXJyZW50T3B0aW9uLmNhbGwodGhpcywgRk9DVVNfRElSRUNUSU9OX1VQKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiVGFiXCIgJiYgIXNoaWZ0S2V5OlxuXHRcdGNhc2UgXCJBcnJvd0Rvd25cIjpcblx0XHRcdGFjdGl2YXRlQ3VycmVudE9wdGlvbi5jYWxsKHRoaXMsIEZPQ1VTX0RJUkVDVElPTl9ET1dOKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0aWYgKFxuXHRcdFx0XHR0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLmxhenlMb2FkXCIpID09PSB0cnVlICYmXG5cdFx0XHRcdHRoaXNbbGF6eUxvYWREb25lU3ltYm9sXSAhPT0gdHJ1ZVxuXHRcdFx0KSB7XG5cdFx0XHRcdHRoaXMuY2xpY2soKTtcblx0XHRcdH1cblxuXHRcdFx0aGFuZGxlRmlsdGVyS2V5RXZlbnRzLmNhbGwodGhpcyk7XG5cdH1cbn1cblxuLyoqXG4gKiBNZXRob2QgaGFuZGxlRmlsdGVyS2V5RXZlbnRzIGlzIHVzZWQgdG8gaGFuZGxlIGZpbHRlciBrZXkgZXZlbnRzLlxuICogRGVib3VuY2UgaXMgdXNlZCB0byBwcmV2ZW50IG11bHRpcGxlIGNhbGxzLlxuICpcbiAqIEBmdW5jdGlvblxuICogQG5hbWUgaGFuZGxlRmlsdGVyS2V5RXZlbnRzXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3ZvaWR9IFRoaXMgbWV0aG9kIGRvZXMgbm90IHJldHVybiBhbnl0aGluZy5cbiAqL1xuZnVuY3Rpb24gaGFuZGxlRmlsdGVyS2V5RXZlbnRzKCkge1xuXHRpZiAodGhpc1trZXlGaWx0ZXJFdmVudFN5bWJvbF0gaW5zdGFuY2VvZiBEZWFkTWFuc1N3aXRjaCkge1xuXHRcdHRyeSB7XG5cdFx0XHR0aGlzW2tleUZpbHRlckV2ZW50U3ltYm9sXS50b3VjaCgpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdGRlbGV0ZSB0aGlzW2tleUZpbHRlckV2ZW50U3ltYm9sXTtcblx0XHR9XG5cdH1cblxuXHR0aGlzW2tleUZpbHRlckV2ZW50U3ltYm9sXSA9IG5ldyBEZWFkTWFuc1N3aXRjaCgyMDAsICgpID0+IHtcblx0XHRpZiAoZ2V0RmlsdGVyTW9kZS5jYWxsKHRoaXMpICE9PSBGSUxURVJfTU9ERV9SRU1PVEUpIHtcblx0XHRcdGZpbHRlck9wdGlvbnMuY2FsbCh0aGlzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZmlsdGVyRnJvbVJlbW90ZS5jYWxsKHRoaXMpLmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRkZWxldGUgdGhpc1trZXlGaWx0ZXJFdmVudFN5bWJvbF07XG5cdH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGZpbHRlckZyb21SZW1vdGUoKSB7XG5cdGlmIChcblx0XHQhKHRoaXNbaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgJiZcblx0XHQhKHRoaXNbcG9wcGVyRmlsdGVyRWxlbWVudFN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudClcblx0KSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0c2hvdy5jYWxsKHRoaXMpO1xuXG5cdGNvbnN0IHVybCA9IHRoaXMuZ2V0T3B0aW9uKFwidXJsXCIpO1xuXHRpZiAoIXVybCkge1xuXHRcdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdFx0dGhpcyxcblx0XHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0XHRcIk1pc3NpbmcgVVJMIGZvciBSZW1vdGUgRmlsdGVyLlwiLFxuXHRcdCk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0bGV0IGZpbHRlclZhbHVlO1xuXG5cdHN3aXRjaCAodGhpcy5nZXRPcHRpb24oXCJmaWx0ZXIucG9zaXRpb25cIikpIHtcblx0XHRjYXNlIEZJTFRFUl9QT1NJVElPTl9JTkxJTkU6XG5cdFx0XHRpZiAodGhpc1tpbmxpbmVGaWx0ZXJFbGVtZW50U3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRcdGZpbHRlclZhbHVlID0gdGhpc1tpbmxpbmVGaWx0ZXJFbGVtZW50U3ltYm9sXS52YWx1ZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0fVxuXG5cdFx0XHRicmVhaztcblx0XHRjYXNlIEZJTFRFUl9QT1NJVElPTl9QT1BQRVI6XG5cdFx0ZGVmYXVsdDpcblx0XHRcdGlmICh0aGlzW3BvcHBlckZpbHRlckVsZW1lbnRTeW1ib2xdIGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCkge1xuXHRcdFx0XHRmaWx0ZXJWYWx1ZSA9IHRoaXNbcG9wcGVyRmlsdGVyRWxlbWVudFN5bWJvbF0udmFsdWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdH1cblx0fVxuXG5cdHJldHVybiBmaWx0ZXJGcm9tUmVtb3RlQnlWYWx1ZS5jYWxsKHRoaXMsIHVybCwgZmlsdGVyVmFsdWUpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVUkwodXJsLCB2YWx1ZSkge1xuXHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gXCJcIikge1xuXHRcdHZhbHVlID0gdGhpcy5nZXRPcHRpb24oXCJmaWx0ZXIuZGVmYXVsdFZhbHVlXCIpO1xuXHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSBcIlwiKSB7XG5cdFx0XHR2YWx1ZSA9IGRpc2FibGVkUmVxdWVzdE1hcmtlci50b1N0cmluZygpO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IGZvcm1hdHRlciA9IG5ldyBGb3JtYXR0ZXIoeyBmaWx0ZXI6IGVuY29kZVVSSSh2YWx1ZSkgfSk7XG5cdGNvbnN0IG9wZW5NYXJrZXIgPSB0aGlzLmdldE9wdGlvbihcImZpbHRlci5tYXJrZXIub3BlblwiKTtcblx0bGV0IGNsb3NlTWFya2VyID0gdGhpcy5nZXRPcHRpb24oXCJmaWx0ZXIubWFya2VyLmNsb3NlXCIpO1xuXHRpZiAoIWNsb3NlTWFya2VyKSB7XG5cdFx0Y2xvc2VNYXJrZXIgPSBvcGVuTWFya2VyO1xuXHR9XG5cblx0aWYgKG9wZW5NYXJrZXIgJiYgY2xvc2VNYXJrZXIpIHtcblx0XHRmb3JtYXR0ZXIuc2V0TWFya2VyKG9wZW5NYXJrZXIsIGNsb3NlTWFya2VyKTtcblx0fVxuXG5cdHJldHVybiBmb3JtYXR0ZXIuZm9ybWF0KHVybCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBvcHRpb25VcmxcbiAqIEBwYXJhbSB2YWx1ZVxuICogQHJldHVybnMge1Byb21pc2U8dW5rbm93bj59XG4gKi9cbmZ1bmN0aW9uIGZpbHRlckZyb21SZW1vdGVCeVZhbHVlKG9wdGlvblVybCwgdmFsdWUpIHtcblx0cmV0dXJuIG5ldyBQcm9jZXNzaW5nKCgpID0+IHtcblx0XHRsZXQgdXJsID0gZm9ybWF0VVJMLmNhbGwodGhpcywgb3B0aW9uVXJsLCB2YWx1ZSk7XG5cdFx0aWYgKHVybC5pbmRleE9mKGRpc2FibGVkUmVxdWVzdE1hcmtlci50b1N0cmluZygpKSAhPT0gLTEpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRmZXRjaEl0XG5cdFx0XHQuY2FsbCh0aGlzLCB1cmwsIHtcblx0XHRcdFx0ZGlzYWJsZUhpZGluZzogdHJ1ZSxcblx0XHRcdH0pXG5cdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdGNoZWNrT3B0aW9uU3RhdGUuY2FsbCh0aGlzKTtcblx0XHRcdFx0c2hvdy5jYWxsKHRoaXMpO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHR0aHJvdyBlO1xuXHRcdFx0fSk7XG5cdH0pXG5cdFx0LnJ1bigpXG5cdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHR0aHJvdyBlO1xuXHRcdH0pO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBoYW5kbGVPcHRpb25LZXlib2FyZEV2ZW50cyhldmVudCkge1xuXHRjb25zdCBzaGlmdEtleSA9IGV2ZW50Py5bXCJzaGlmdEtleVwiXTtcblxuXHRzd2l0Y2ggKGV2ZW50Py5bXCJjb2RlXCJdKSB7XG5cdFx0Y2FzZSBcIkVzY2FwZVwiOlxuXHRcdFx0dG9nZ2xlLmNhbGwodGhpcyk7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkVudGVyXCI6XG5cdFx0Y2FzZSBcIlNwYWNlXCI6XG5cdFx0XHRjb25zdCBwYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG5cdFx0XHRjb25zdCBlbGVtZW50ID0gcGF0aD8uWzBdO1xuXHRcdFx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0XHRjb25zdCBpbnB1dCA9IGVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpbnB1dFwiKTtcblx0XHRcdFx0aWYgKCFpbnB1dCkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRmaXJlRXZlbnQoaW5wdXQsIFwiY2xpY2tcIik7XG5cdFx0XHR9XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIFwiVGFiXCIgJiYgc2hpZnRLZXkgPT09IHRydWU6XG5cdFx0Y2FzZSBcIkFycm93VXBcIjpcblx0XHRcdGFjdGl2YXRlQ3VycmVudE9wdGlvbi5jYWxsKHRoaXMsIEZPQ1VTX0RJUkVDVElPTl9VUCk7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIFwiVGFiXCIgJiYgIXNoaWZ0S2V5OlxuXHRcdGNhc2UgXCJBcnJvd0xlZnRcIjpcblx0XHRjYXNlIFwiQXJyb3dSaWdodFwiOlxuXHRcdFx0Ly8gaGFuZGxlZCBieSB0cmVlIHNlbGVjdFxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkFycm93RG93blwiOlxuXHRcdFx0YWN0aXZhdGVDdXJyZW50T3B0aW9uLmNhbGwodGhpcywgRk9DVVNfRElSRUNUSU9OX0RPV04pO1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRjb25zdCBwID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG5cdFx0XHRpZiAocD8uWzBdIGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRmb2N1c0ZpbHRlci5jYWxsKHRoaXMpO1xuXHRcdFx0YnJlYWs7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRGaWx0ZXJNb2RlKCkge1xuXHRzd2l0Y2ggKHRoaXMuZ2V0T3B0aW9uKFwiZmlsdGVyLm1vZGVcIikpIHtcblx0XHRjYXNlIEZJTFRFUl9NT0RFX09QVElPTlM6XG5cdFx0XHRyZXR1cm4gRklMVEVSX01PREVfT1BUSU9OUztcblx0XHRjYXNlIEZJTFRFUl9NT0RFX1JFTU9URTpcblx0XHRcdHJldHVybiBGSUxURVJfTU9ERV9SRU1PVEU7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiBGSUxURVJfTU9ERV9ESVNBQkxFRDtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGJsdXJGaWx0ZXIoKSB7XG5cdGlmICghKHRoaXNbaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZiAoZ2V0RmlsdGVyTW9kZS5jYWxsKHRoaXMpID09PSBGSUxURVJfTU9ERV9ESVNBQkxFRCkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXNbcG9wcGVyRmlsdGVyQ29udGFpbmVyRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKTtcblx0dGhpc1twb3BwZXJGaWx0ZXJDb250YWluZXJFbGVtZW50U3ltYm9sXS5ibHVyKCk7XG5cblx0dGhpc1tpbmxpbmVGaWx0ZXJFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpO1xuXHR0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdLmJsdXIoKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGZvY3VzT3B0aW9uc1xuICovXG5mdW5jdGlvbiBmb2N1c1BvcHBlckZpbHRlcihmb2N1c09wdGlvbnMpIHtcblx0dGhpc1twb3BwZXJGaWx0ZXJDb250YWluZXJFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QucmVtb3ZlKFwiZC1ub25lXCIpO1xuXHR0aGlzW3BvcHBlckZpbHRlckVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5hZGQoXCJhY3RpdmVcIik7XG5cdHRoaXNbaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKTtcblx0dGhpc1tpbmxpbmVGaWx0ZXJFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuYWRkKFwiZC1ub25lXCIpO1xuXG5cdGlmICghKHRoaXNbcG9wcGVyRmlsdGVyRWxlbWVudFN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRcdHRoaXMsXG5cdFx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdFx0XCJNaXNzaW5nIFBvcHBlciBGaWx0ZXIgRWxlbWVudC5cIixcblx0XHQpO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIHZpc2liaWxpdHkgaXMgc2V0IHRvIHZpc2libGUsIGJlY2F1c2UgZm9jdXMoKSBkb2VzIG5vdCB3b3JrIG9uIGludmlzaWJsZSBlbGVtZW50c1xuXHQvLyBhbmQgdGhlIGNsYXNzIGRlZmluaXRpb24gaXMgYXNzaWduZWQgbGF0ZXIgaW4gdGhlIHByb2Nlc3Npbmdcblx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0aWYgKGZvY3VzT3B0aW9ucyA9PT0gdW5kZWZpbmVkIHx8IGZvY3VzT3B0aW9ucyA9PT0gbnVsbCkge1xuXHRcdFx0dGhpc1twb3BwZXJGaWx0ZXJFbGVtZW50U3ltYm9sXS5mb2N1cygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzW3BvcHBlckZpbHRlckVsZW1lbnRTeW1ib2xdLmZvY3VzKGZvY3VzT3B0aW9ucyk7XG5cdFx0fVxuXHR9LCAxMDApO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZm9jdXNPcHRpb25zXG4gKi9cbmZ1bmN0aW9uIGZvY3VzSW5saW5lRmlsdGVyKGZvY3VzT3B0aW9ucykge1xuXHRjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb24oXCJvcHRpb25zXCIpO1xuXHRpZiAoXG5cdFx0KCFpc0FycmF5KG9wdGlvbnMpIHx8IG9wdGlvbnMubGVuZ3RoID09PSAwKSAmJlxuXHRcdGdldEZpbHRlck1vZGUuY2FsbCh0aGlzKSAhPT0gRklMVEVSX01PREVfUkVNT1RFXG5cdCkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXNbcG9wcGVyRmlsdGVyQ29udGFpbmVyRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZChcImQtbm9uZVwiKTtcblx0dGhpc1tpbmxpbmVGaWx0ZXJFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuYWRkKFwiYWN0aXZlXCIpO1xuXHR0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5yZW1vdmUoXCJkLW5vbmVcIik7XG5cblx0Ly8gdmlzaWJpbGl0eSBpcyBzZXQgdG8gdmlzaWJsZSwgYmVjYXVzZSBmb2N1cygpIGRvZXMgbm90IHdvcmsgb24gaW52aXNpYmxlIGVsZW1lbnRzXG5cdC8vIGFuZCB0aGUgY2xhc3MgZGVmaW5pdGlvbiBpcyBhc3NpZ25lZCBsYXRlciBpbiB0aGUgcHJvY2Vzc2luZ1xuXHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRpZiAoZm9jdXNPcHRpb25zID09PSB1bmRlZmluZWQgfHwgZm9jdXNPcHRpb25zID09PSBudWxsKSB7XG5cdFx0XHR0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdLmZvY3VzKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXNbaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbF0uZm9jdXMoZm9jdXNPcHRpb25zKTtcblx0XHR9XG5cdH0sIDEwMCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZm9jdXNGaWx0ZXIoZm9jdXNPcHRpb25zKSB7XG5cdGlmIChnZXRGaWx0ZXJNb2RlLmNhbGwodGhpcykgPT09IEZJTFRFUl9NT0RFX0RJU0FCTEVEKSB7XG5cdFx0dGhpc1twb3BwZXJGaWx0ZXJDb250YWluZXJFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuYWRkKFwiZC1ub25lXCIpO1xuXHRcdHRoaXNbaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZChcImQtbm9uZVwiKTtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZiAodGhpcy5nZXRPcHRpb24oXCJmaWx0ZXIucG9zaXRpb25cIikgPT09IEZJTFRFUl9QT1NJVElPTl9JTkxJTkUpIHtcblx0XHRyZXR1cm4gZm9jdXNJbmxpbmVGaWx0ZXIuY2FsbCh0aGlzLCBmb2N1c09wdGlvbnMpO1xuXHR9XG5cblx0cmV0dXJuIGZvY3VzUG9wcGVyRmlsdGVyLmNhbGwodGhpcywgZm9jdXNPcHRpb25zKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7YXJyYXl9XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcbiAqL1xuZnVuY3Rpb24gZ2F0aGVyU3RhdGUoKSB7XG5cdGNvbnN0IHR5cGUgPSB0aGlzLmdldE9wdGlvbihcInR5cGVcIik7XG5cdGlmIChbXCJyYWRpb1wiLCBcImNoZWNrYm94XCJdLmluZGV4T2YodHlwZSkgPT09IC0xKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgdHlwZVwiKTtcblx0fVxuXG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdGNvbnN0IHNlbGVjdGlvbiA9IFtdO1xuXHRjb25zdCBlbGVtZW50cyA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKFxuXHRcdGBpbnB1dFt0eXBlPSR7dHlwZX1dOmNoZWNrZWRgLFxuXHQpO1xuXG5cdGZvciAoY29uc3QgZSBvZiBlbGVtZW50cykge1xuXHRcdHNlbGVjdGlvbi5wdXNoKHtcblx0XHRcdGxhYmVsOiBnZXRTZWxlY3Rpb25MYWJlbC5jYWxsKHRoaXMsIGUudmFsdWUpLFxuXHRcdFx0dmFsdWU6IGUudmFsdWUsXG5cdFx0fSk7XG5cdH1cblxuXHRzZXRTZWxlY3Rpb25cblx0XHQuY2FsbCh0aGlzLCBzZWxlY3Rpb24pXG5cdFx0LnRoZW4oKCkgPT4ge30pXG5cdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBgJHtlfWApO1xuXHRcdH0pO1xuXG5cdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLmNsb3NlT25TZWxlY3RcIikgPT09IHRydWUpIHtcblx0XHR0b2dnbGUuY2FsbCh0aGlzKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcbiAqL1xuZnVuY3Rpb24gY2xlYXJTZWxlY3Rpb24oKSB7XG5cdGNvbnN0IHR5cGUgPSB0aGlzLmdldE9wdGlvbihcInR5cGVcIik7XG5cdGlmIChbXCJyYWRpb1wiLCBcImNoZWNrYm94XCJdLmluZGV4T2YodHlwZSkgPT09IC0xKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgdHlwZVwiKTtcblx0fVxuXG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdHNldFNlbGVjdGlvblxuXHRcdC5jYWxsKHRoaXMsIFtdKVxuXHRcdC50aGVuKCgpID0+IHt9KVxuXHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgYCR7ZX1gKTtcblx0XHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBhcmVPcHRpb25zQXZhaWxhYmxlQW5kSW5pdCgpIHtcblx0Ly8gcHJldmVudCBtdWx0aXBsZSBjYWxsc1xuXHRpZiAodGhpc1thcmVPcHRpb25zQXZhaWxhYmxlQW5kSW5pdFN5bWJvbF0gPT09IHVuZGVmaW5lZCkge1xuXHRcdHRoaXNbYXJlT3B0aW9uc0F2YWlsYWJsZUFuZEluaXRTeW1ib2xdID0gMDtcblx0fVxuXG5cdGlmICh0aGlzW2FyZU9wdGlvbnNBdmFpbGFibGVBbmRJbml0U3ltYm9sXSA+IDApIHtcblx0XHR0aGlzW2FyZU9wdGlvbnNBdmFpbGFibGVBbmRJbml0U3ltYm9sXS0tO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0dGhpc1thcmVPcHRpb25zQXZhaWxhYmxlQW5kSW5pdFN5bWJvbF0rKztcblxuXHRjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb24oXCJvcHRpb25zXCIpO1xuXG5cdGlmIChcblx0XHRvcHRpb25zID09PSB1bmRlZmluZWQgfHxcblx0XHRvcHRpb25zID09PSBudWxsIHx8XG5cdFx0KGlzQXJyYXkob3B0aW9ucykgJiYgb3B0aW9ucy5sZW5ndGggPT09IDApXG5cdCkge1xuXHRcdHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwodGhpcywgXCJlbXB0eVwiKTtcblxuXHRcdC8vIGhpZGUuY2FsbCh0aGlzKTtcblxuXHRcdGxldCBtc2cgPSB0aGlzLmdldE9wdGlvbihcImxhYmVscy5uby1vcHRpb25zLWF2YWlsYWJsZVwiKTtcblxuXHRcdGlmIChcblx0XHRcdHRoaXMuZ2V0T3B0aW9uKFwidXJsXCIpICE9PSBudWxsICYmXG5cdFx0XHR0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLmxhenlMb2FkXCIpID09PSB0cnVlICYmXG5cdFx0XHR0aGlzW2xhenlMb2FkRG9uZVN5bWJvbF0gIT09IHRydWVcblx0XHQpIHtcblx0XHRcdG1zZyA9IHRoaXMuZ2V0T3B0aW9uKFwibGFiZWxzLmNsaWNrLXRvLWxvYWQtb3B0aW9uc1wiKTtcblx0XHR9XG5cblx0XHR0aGlzLnNldE9wdGlvbihcIm1lc3NhZ2VzLmNvbnRyb2xcIiwgbXNnKTtcblx0XHR0aGlzLnNldE9wdGlvbihcIm1lc3NhZ2VzLnN1bW1hcnlcIiwgXCJcIik7XG5cblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5lbXB0eVZhbHVlSWZOb09wdGlvbnNcIikgPT09IHRydWUpIHtcblx0XHRcdHRoaXMudmFsdWUgPSBcIlwiO1xuXHRcdH1cblx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBub09wdGlvbnNBdmFpbGFibGVNZXNzYWdlKTtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRjb25zdCBzZWxlY3Rpb25zID0gdGhpcy5nZXRPcHRpb24oXCJzZWxlY3Rpb25cIik7XG5cdGlmIChcblx0XHRzZWxlY3Rpb25zID09PSB1bmRlZmluZWQgfHxcblx0XHRzZWxlY3Rpb25zID09PSBudWxsIHx8XG5cdFx0c2VsZWN0aW9ucy5sZW5ndGggPT09IDBcblx0KSB7XG5cdFx0dGhpcy5zZXRPcHRpb24oXG5cdFx0XHRcIm1lc3NhZ2VzLmNvbnRyb2xcIixcblx0XHRcdHRoaXMuZ2V0T3B0aW9uKFwibGFiZWxzLnNlbGVjdC1hbi1vcHRpb25cIiksXG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHR0aGlzLnNldE9wdGlvbihcIm1lc3NhZ2VzLmNvbnRyb2xcIiwgXCJcIik7XG5cdH1cblxuXHR0aGlzLnNldE9wdGlvbihcIm1lc3NhZ2VzLnN1bW1hcnlcIiwgc2V0U3VtbWFyeUFuZENvbnRyb2xUZXh0LmNhbGwodGhpcykpO1xuXG5cdGxldCB1cGRhdGVkID0gZmFsc2U7XG5cdGxldCB2YWx1ZUNvdW50ZXIgPSAxO1xuXHRmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG5cdFx0aWYgKG9wdGlvbj8udmlzaWJpbGl0eSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRvcHRpb24udmlzaWJpbGl0eSA9IFwidmlzaWJsZVwiO1xuXHRcdFx0dXBkYXRlZCA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKG9wdGlvbj8udmFsdWUgPT09IHVuZGVmaW5lZCAmJiBvcHRpb24/LmxhYmVsID09PSB1bmRlZmluZWQpIHtcblx0XHRcdG9wdGlvbi52YWx1ZSA9IGAke3ZhbHVlQ291bnRlcisrfWA7XG5cdFx0XHRvcHRpb24ubGFiZWwgPSBvcHRpb24udmFsdWU7XG5cdFx0XHR1cGRhdGVkID0gdHJ1ZTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGlmIChvcHRpb24/LnZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdG9wdGlvbi52YWx1ZSA9IG9wdGlvbi5sYWJlbDtcblx0XHRcdHVwZGF0ZWQgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmIChvcHRpb24/LmxhYmVsID09PSB1bmRlZmluZWQpIHtcblx0XHRcdG9wdGlvbi5sYWJlbCA9IG9wdGlvbi52YWx1ZTtcblx0XHRcdHVwZGF0ZWQgPSB0cnVlO1xuXHRcdH1cblx0fVxuXG5cdGlmICh1cGRhdGVkKSB7XG5cdFx0dGhpcy5zZXRPcHRpb24oXCJvcHRpb25zXCIsIG9wdGlvbnMpO1xuXHR9XG5cblx0c2V0U3RhdHVzT3JSZW1vdmVCYWRnZXMuY2FsbCh0aGlzKTtcblxuXHRyZW1vdmVBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBub09wdGlvbnNBdmFpbGFibGVNZXNzYWdlKTtcblx0cmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGNoZWNrT3B0aW9uU3RhdGUoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdGNvbnN0IGVsZW1lbnRzID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1vcHRpb25dIGlucHV0YCxcblx0KTtcblxuXHRsZXQgc2VsZWN0aW9uID0gdGhpcy5nZXRPcHRpb24oXCJzZWxlY3Rpb25cIik7XG5cdGlmICghaXNBcnJheShzZWxlY3Rpb24pKSB7XG5cdFx0c2VsZWN0aW9uID0gW107XG5cdH1cblxuXHRjb25zdCBjaGVja2VkVmFsdWVzID0gc2VsZWN0aW9uLm1hcCgoYSkgPT4ge1xuXHRcdHJldHVybiBhLnZhbHVlO1xuXHR9KTtcblxuXHRmb3IgKGNvbnN0IGUgb2YgZWxlbWVudHMpIHtcblx0XHRpZiAoY2hlY2tlZFZhbHVlcy5pbmRleE9mKGUudmFsdWUpICE9PSAtMSkge1xuXHRcdFx0aWYgKGUuY2hlY2tlZCAhPT0gdHJ1ZSkgZS5jaGVja2VkID0gdHJ1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKGUuY2hlY2tlZCAhPT0gZmFsc2UpIGUuY2hlY2tlZCA9IGZhbHNlO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRWYWx1ZVRvU2VsZWN0aW9uKHZhbHVlKSB7XG5cdGNvbnN0IHNlbGVjdGlvbiA9IFtdO1xuXG5cdGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcblx0XHR2YWx1ZSA9IHZhbHVlXG5cdFx0XHQuc3BsaXQoXCIsXCIpXG5cdFx0XHQubWFwKChhKSA9PiB7XG5cdFx0XHRcdHJldHVybiBhLnRyaW0oKTtcblx0XHRcdH0pXG5cdFx0XHQuZmlsdGVyKChhKSA9PiB7XG5cdFx0XHRcdHJldHVybiBhICE9PSBcIlwiO1xuXHRcdFx0fSk7XG5cdH1cblxuXHRpZiAoaXNTdHJpbmcodmFsdWUpIHx8IGlzSW50ZWdlcih2YWx1ZSkpIHtcblx0XHRzZWxlY3Rpb24ucHVzaCh7XG5cdFx0XHRsYWJlbDogZ2V0U2VsZWN0aW9uTGFiZWwuY2FsbCh0aGlzLCB2YWx1ZSksXG5cdFx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcblx0XHRmb3IgKGNvbnN0IHYgb2YgdmFsdWUpIHtcblx0XHRcdHNlbGVjdGlvbi5wdXNoKHtcblx0XHRcdFx0bGFiZWw6IGdldFNlbGVjdGlvbkxhYmVsLmNhbGwodGhpcywgdiksXG5cdFx0XHRcdHZhbHVlOiB2LFxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0dmFsdWUgPSB2YWx1ZS5qb2luKFwiLFwiKTtcblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCB0eXBlXCIpO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRzZWxlY3Rpb246IHNlbGVjdGlvbixcblx0XHR2YWx1ZTogdmFsdWUsXG5cdH07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7YXJyYXl9IHNlbGVjdGlvblxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBjb252ZXJ0U2VsZWN0aW9uVG9WYWx1ZShzZWxlY3Rpb24pIHtcblx0Y29uc3QgdmFsdWUgPSBbXTtcblxuXHRpZiAoaXNBcnJheShzZWxlY3Rpb24pKSB7XG5cdFx0Zm9yIChjb25zdCBvYmogb2Ygc2VsZWN0aW9uKSB7XG5cdFx0XHRjb25zdCB2ID0gb2JqPy5bXCJ2YWx1ZVwiXTtcblx0XHRcdGlmICh2ICE9PSB1bmRlZmluZWQpIHZhbHVlLnB1c2godik7XG5cdFx0fVxuXHR9XG5cblx0aWYgKHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9IGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMSkge1xuXHRcdHJldHVybiB2YWx1ZS5wb3AoKTtcblx0fVxuXG5cdHJldHVybiB2YWx1ZS5qb2luKFwiLFwiKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHthcnJheX0gc2VsZWN0aW9uXG4gKiBAcmV0dXJuIHtQcm9taXNlfVxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqL1xuZnVuY3Rpb24gc2V0U2VsZWN0aW9uKHNlbGVjdGlvbikge1xuXHRpZiAoaXNTdHJpbmcoc2VsZWN0aW9uKSkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRWYWx1ZVRvU2VsZWN0aW9uLmNhbGwodGhpcywgc2VsZWN0aW9uKTtcblx0XHRzZWxlY3Rpb24gPSByZXN1bHQ/LnNlbGVjdGlvbjtcblx0fSBlbHNlIGlmIChzZWxlY3Rpb24gPT09IHVuZGVmaW5lZCkge1xuXHRcdHNlbGVjdGlvbiA9IFtdO1xuXHR9XG5cblx0dmFsaWRhdGVBcnJheShzZWxlY3Rpb24pO1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgc2VsZWN0aW9uLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIGwgPSBnZXRTZWxlY3Rpb25MYWJlbC5jYWxsKHRoaXMsIHNlbGVjdGlvbltpXS52YWx1ZSk7XG5cdFx0aWYgKGwgPT09IHNlbGVjdGlvbltpXS52YWx1ZSkge1xuXHRcdFx0bCA9IHNlbGVjdGlvbltpXS5sYWJlbDtcblx0XHR9XG5cblx0XHRzZWxlY3Rpb25baV0gPSB7XG5cdFx0XHRsYWJlbDogbCxcblx0XHRcdHZhbHVlOiBzZWxlY3Rpb25baV0udmFsdWUsXG5cdFx0fTtcblx0fVxuXG5cdHRoaXMuc2V0T3B0aW9uKFwic2VsZWN0aW9uXCIsIHNlbGVjdGlvbik7XG5cdGNoZWNrT3B0aW9uU3RhdGUuY2FsbCh0aGlzKTtcblxuXHR0cnkge1xuXHRcdHRoaXM/LnNldEZvcm1WYWx1ZSh0aGlzLnZhbHVlKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdH1cblxuXHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLXNlbGVjdGVkXCIsIHtcblx0XHRzZWxlY3Rpb24sXG5cdH0pO1xuXG5cdGZpcmVFdmVudCh0aGlzLCBcImNoYW5nZVwiKTtcblxuXHRyZXR1cm4gbmV3IFByb2Nlc3NpbmcoKCkgPT4ge1xuXHRcdGNvbnN0IENMQVNTTkFNRSA9IFwic2VsZWN0ZWRcIjtcblxuXHRcdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHRcdH1cblxuXHRcdGNvbnN0IG5vdFNlbGVjdGVkID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoXCI6bm90KDpjaGVja2VkKVwiKTtcblxuXHRcdGlmIChub3RTZWxlY3RlZCkge1xuXHRcdFx0bm90U2VsZWN0ZWQuZm9yRWFjaCgobm9kZSkgPT4ge1xuXHRcdFx0XHRjb25zdCBwYXJlbnQgPSBub2RlLmNsb3Nlc3QoYFske0FUVFJJQlVURV9ST0xFfT1vcHRpb25dYCk7XG5cdFx0XHRcdGlmIChwYXJlbnQpIHtcblx0XHRcdFx0XHRwYXJlbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU05BTUUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRjb25zdCBzZWxlY3RlZCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKFwiOmNoZWNrZWRcIik7XG5cdFx0aWYgKHNlbGVjdGVkKSB7XG5cdFx0XHRzZWxlY3RlZC5mb3JFYWNoKChub2RlKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHBhcmVudCA9IG5vZGUuY2xvc2VzdChgWyR7QVRUUklCVVRFX1JPTEV9PW9wdGlvbl1gKTtcblx0XHRcdFx0aWYgKHBhcmVudCkge1xuXHRcdFx0XHRcdHBhcmVudC5jbGFzc0xpc3QuYWRkKENMQVNTTkFNRSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fSlcblx0XHQucnVuKClcblx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAqIEByZXR1cm4ge1Byb21pc2V9XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHRoZSByZXN1bHQgY2Fubm90IGJlIHBhcnNlZFxuICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCByZXNwb25zZVxuICovXG5mdW5jdGlvbiBmZXRjaERhdGEodXJsKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXHRpZiAoIXVybCkgdXJsID0gdGhpcy5nZXRPcHRpb24oXCJ1cmxcIik7XG5cdGlmICghdXJsKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cblx0Y29uc3QgZmV0Y2hPcHRpb25zID0gdGhpcy5nZXRPcHRpb24oXCJmZXRjaFwiLCB7fSk7XG5cblx0bGV0IGRlbGF5V2F0Y2ggPSBmYWxzZTtcblxuXHQvLyBpZiBmZXRjaCBzaG9ydCB0aW1lLCBkbyBub3Qgc2hvdyBsb2FkaW5nIGJhZGdlLCBiZWNhdXNlIG9mIGZsaWNrZXJpbmdcblx0cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcblx0XHRpZiAoZGVsYXlXYXRjaCA9PT0gdHJ1ZSkgcmV0dXJuO1xuXHRcdHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwodGhpcywgXCJsb2FkaW5nXCIpO1xuXHRcdGRlbGF5V2F0Y2ggPSB0cnVlO1xuXHR9KTtcblxuXHR1cmwgPSBmb3JtYXRVUkwuY2FsbCh0aGlzLCB1cmwpO1xuXG5cdHNlbGZbaXNMb2FkaW5nU3ltYm9sXSA9IHRydWU7XG5cdGNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXHRyZXR1cm4gZ2xvYmFsXG5cdFx0LmZldGNoKHVybCwgZmV0Y2hPcHRpb25zKVxuXHRcdC50aGVuKChyZXNwb25zZSkgPT4ge1xuXHRcdFx0c2VsZltpc0xvYWRpbmdTeW1ib2xdID0gZmFsc2U7XG5cdFx0XHRkZWxheVdhdGNoID0gdHJ1ZTtcblx0XHRcdGNvbnN0IGNvbnRlbnRUeXBlID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoXCJjb250ZW50LXR5cGVcIik7XG5cdFx0XHRpZiAoY29udGVudFR5cGUgJiYgY29udGVudFR5cGUuaW5kZXhPZihcImFwcGxpY2F0aW9uL2pzb25cIikgIT09IC0xKSB7XG5cdFx0XHRcdHJldHVybiByZXNwb25zZS50ZXh0KCk7XG5cdFx0XHR9XG5cblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoYHVuc3VwcG9ydGVkIHJlc3BvbnNlICR7Y29udGVudFR5cGV9YCk7XG5cdFx0fSlcblx0XHQudGhlbigodGV4dCkgPT4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShKU09OLnBhcnNlKFN0cmluZyh0ZXh0KSkpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidGhlIHJlc3VsdCBjYW5ub3QgYmUgcGFyc2VkLCBjaGVjayB0aGUgVVJMXCIpO1xuXHRcdFx0fVxuXHRcdH0pXG5cdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRzZWxmW2lzTG9hZGluZ1N5bWJvbF0gPSBmYWxzZTtcblx0XHRcdGRlbGF5V2F0Y2ggPSB0cnVlO1xuXHRcdFx0dGhyb3cgZTtcblx0XHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBoaWRlKCkge1xuXHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcblx0c2V0U3RhdHVzT3JSZW1vdmVCYWRnZXMuY2FsbCh0aGlzLCBcImNsb3NlZFwiKTtcblx0cmVtb3ZlQXR0cmlidXRlVG9rZW4odGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0sIFwiY2xhc3NcIiwgXCJvcGVuXCIpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNob3coKSB7XG5cdGlmICh0aGlzLmdldE9wdGlvbihcImRpc2FibGVkXCIsIHVuZGVmaW5lZCkgPT09IHRydWUpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZiAodGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ID09PSBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0spIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRmb2N1c0ZpbHRlci5jYWxsKHRoaXMpO1xuXG5cdGNvbnN0IGxhenlMb2FkRmxhZyA9XG5cdFx0dGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5sYXp5TG9hZFwiKSAmJiB0aGlzW2xhenlMb2FkRG9uZVN5bWJvbF0gIT09IHRydWU7XG5cblx0aWYgKGxhenlMb2FkRmxhZyA9PT0gdHJ1ZSkge1xuXHRcdHRoaXNbbGF6eUxvYWREb25lU3ltYm9sXSA9IHRydWU7XG5cdFx0c2V0U3RhdHVzT3JSZW1vdmVCYWRnZXMuY2FsbCh0aGlzLCBcImxvYWRpbmdcIik7XG5cblx0XHRuZXcgUHJvY2Vzc2luZygyMDAsICgpID0+IHtcblx0XHRcdHRoaXMuZmV0Y2goKVxuXHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0Y2hlY2tPcHRpb25TdGF0ZS5jYWxsKHRoaXMpO1xuXHRcdFx0XHRcdHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG5cdFx0XHRcdFx0XHRzaG93LmNhbGwodGhpcyk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0XHRcdFx0c2V0U3RhdHVzT3JSZW1vdmVCYWRnZXMuY2FsbCh0aGlzLCBcImVycm9yXCIpO1xuXHRcdFx0XHR9KTtcblx0XHR9KVxuXHRcdFx0LnJ1bigpXG5cdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHRcdFx0c2V0U3RhdHVzT3JSZW1vdmVCYWRnZXMuY2FsbCh0aGlzLCBcImVycm9yXCIpO1xuXHRcdFx0fSk7XG5cblx0XHRyZXR1cm47XG5cdH1cblxuXHRjb25zdCBoYXNQb3BwZXJGaWx0ZXJGbGFnID1cblx0XHR0aGlzLmdldE9wdGlvbihcImZpbHRlci5wb3NpdGlvblwiKSA9PT0gRklMVEVSX1BPU0lUSU9OX1BPUFBFUiAmJlxuXHRcdGdldEZpbHRlck1vZGUuY2FsbCh0aGlzKSAhPT0gRklMVEVSX01PREVfRElTQUJMRUQ7XG5cblx0Y29uc3Qgb3B0aW9ucyA9IGdldE9wdGlvbkVsZW1lbnRzLmNhbGwodGhpcyk7XG5cdGlmIChvcHRpb25zLmxlbmd0aCA9PT0gMCAmJiBoYXNQb3BwZXJGaWx0ZXJGbGFnID09PSBmYWxzZSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XG5cdHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUuZGlzcGxheSA9IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSztcblx0c2V0U3RhdHVzT3JSZW1vdmVCYWRnZXMuY2FsbCh0aGlzLCBcIm9wZW5cIik7XG5cblx0YWRkQXR0cmlidXRlVG9rZW4odGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0sIFwiY2xhc3NcIiwgXCJvcGVuXCIpO1xuXG5cdG5ldyBQcm9jZXNzaW5nKCgpID0+IHtcblx0XHRjYWxjQW5kU2V0T3B0aW9uc0RpbWVuc2lvbi5jYWxsKHRoaXMpO1xuXHRcdGZvY3VzRmlsdGVyLmNhbGwodGhpcyk7XG5cdFx0dGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5yZW1vdmVQcm9wZXJ0eShcInZpc2liaWxpdHlcIik7XG5cdFx0dXBkYXRlUG9wcGVyLmNhbGwodGhpcyk7XG5cdH0pXG5cdFx0LnJ1bigpXG5cdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHRvZ2dsZSgpIHtcblx0aWYgKHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUuZGlzcGxheSA9PT0gU1RZTEVfRElTUExBWV9NT0RFX0JMT0NLKSB7XG5cdFx0aGlkZS5jYWxsKHRoaXMpO1xuXHR9IGVsc2Uge1xuXHRcdHNob3cuY2FsbCh0aGlzKTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAZmlyZXMgbW9uc3Rlci1zZWxlY3Rpb24tcmVtb3ZlZFxuICogQGZpcmVzIG1vbnN0ZXItc2VsZWN0aW9uLWNsZWFyZWRcbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50SGFuZGxlcigpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG5cdCAqL1xuXHRzZWxmW2NsZWFyT3B0aW9uRXZlbnRIYW5kbGVyXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChcblx0XHRcdGV2ZW50LFxuXHRcdFx0QVRUUklCVVRFX1JPTEUsXG5cdFx0XHRcInJlbW92ZS1iYWRnZVwiLFxuXHRcdCk7XG5cblx0XHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRjb25zdCBiYWRnZSA9IGZpbmRDbG9zZXN0QnlBdHRyaWJ1dGUoZWxlbWVudCwgQVRUUklCVVRFX1JPTEUsIFwiYmFkZ2VcIik7XG5cdFx0XHRpZiAoYmFkZ2UgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0XHRjb25zdCB2YWx1ZSA9IGJhZGdlLmdldEF0dHJpYnV0ZShgJHtBVFRSSUJVVEVfUFJFRklYfXZhbHVlYCk7XG5cblx0XHRcdFx0bGV0IHNlbGVjdGlvbiA9IHNlbGYuZ2V0T3B0aW9uKFwic2VsZWN0aW9uXCIpO1xuXHRcdFx0XHRzZWxlY3Rpb24gPSBzZWxlY3Rpb24uZmlsdGVyKChiKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlICE9PSBiLnZhbHVlO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRzZXRTZWxlY3Rpb25cblx0XHRcdFx0XHQuY2FsbChzZWxmLCBzZWxlY3Rpb24pXG5cdFx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdFx0ZmlyZUN1c3RvbUV2ZW50KHNlbGYsIFwibW9uc3Rlci1zZWxlY3Rpb24tcmVtb3ZlZFwiLCB7XG5cdFx0XHRcdFx0XHRcdHZhbHVlLFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHNlbGYsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKi9cblx0c2VsZltjbG9zZUV2ZW50SGFuZGxlcl0gPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBwYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG5cblx0XHRmb3IgKGNvbnN0IFssIGVsZW1lbnRdIG9mIE9iamVjdC5lbnRyaWVzKHBhdGgpKSB7XG5cdFx0XHRpZiAoZWxlbWVudCA9PT0gc2VsZikge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGhpZGUuY2FsbChzZWxmKTtcblx0fTtcblxuXHQvKipcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICovXG5cdHNlbGZbaW5wdXRFdmVudEhhbmRsZXJdID0gKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgcGF0aCA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpO1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBwYXRoPy5bMF07XG5cblx0XHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGVsZW1lbnQuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9ST0xFKSAmJlxuXHRcdFx0XHRlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSkgPT09IFwib3B0aW9uLWNvbnRyb2xcIlxuXHRcdFx0KSB7XG5cdFx0XHRcdGZpcmVDdXN0b21FdmVudChzZWxmLCBcIm1vbnN0ZXItY2hhbmdlXCIsIHtcblx0XHRcdFx0XHR0eXBlOiBldmVudC50eXBlLFxuXHRcdFx0XHRcdHZhbHVlOiBlbGVtZW50LnZhbHVlLFxuXHRcdFx0XHRcdGNoZWNrZWQ6IGVsZW1lbnQuY2hlY2tlZCxcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRlbGVtZW50Lmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSkgJiZcblx0XHRcdFx0ZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUpID09PSBcImZpbHRlclwiXG5cdFx0XHQpIHtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG5cdCAqL1xuXHRzZWxmW2NoYW5nZUV2ZW50SGFuZGxlcl0gPSAoZXZlbnQpID0+IHtcblx0XHRnYXRoZXJTdGF0ZS5jYWxsKHNlbGYpO1xuXHRcdGZpcmVDdXN0b21FdmVudChzZWxmLCBcIm1vbnN0ZXItY2hhbmdlZFwiLCBldmVudD8uZGV0YWlsKTtcblx0fTtcblxuXHRzZWxmW2tleUV2ZW50SGFuZGxlcl0gPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBwYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG5cdFx0Y29uc3QgZWxlbWVudCA9IHBhdGguc2hpZnQoKTtcblxuXHRcdGxldCByb2xlO1xuXG5cdFx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0aWYgKGVsZW1lbnQuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9ST0xFKSkge1xuXHRcdFx0XHRyb2xlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUpO1xuXHRcdFx0fSBlbHNlIGlmIChlbGVtZW50ID09PSB0aGlzKSB7XG5cdFx0XHRcdHNob3cuY2FsbCh0aGlzKTtcblx0XHRcdFx0Ly8gZm9jdXNGaWx0ZXIuY2FsbChzZWxmKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGUgPSBlbGVtZW50LmNsb3Nlc3QoYFske0FUVFJJQlVURV9ST0xFfV1gKTtcblx0XHRcdFx0aWYgKGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBlLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSkpIHtcblx0XHRcdFx0XHRyb2xlID0gZS5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRzd2l0Y2ggKHJvbGUpIHtcblx0XHRcdGNhc2UgXCJmaWx0ZXJcIjpcblx0XHRcdFx0aGFuZGxlRmlsdGVyS2V5Ym9hcmRFdmVudHMuY2FsbChzZWxmLCBldmVudCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIm9wdGlvbi1sYWJlbFwiOlxuXHRcdFx0Y2FzZSBcIm9wdGlvbi1jb250cm9sXCI6XG5cdFx0XHRjYXNlIFwib3B0aW9uXCI6XG5cdFx0XHRcdGhhbmRsZU9wdGlvbktleWJvYXJkRXZlbnRzLmNhbGwoc2VsZiwgZXZlbnQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJjb250cm9sXCI6XG5cdFx0XHRjYXNlIFwidG9nZ2xlXCI6XG5cdFx0XHRcdGhhbmRsZVRvZ2dsZUtleWJvYXJkRXZlbnRzLmNhbGwoc2VsZiwgZXZlbnQpO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH07XG5cblx0Y29uc3QgdHlwZXMgPSBzZWxmLmdldE9wdGlvbihcInRvZ2dsZUV2ZW50VHlwZVwiLCBbXCJjbGlja1wiXSk7XG5cblx0Zm9yIChjb25zdCBbLCB0eXBlXSBvZiBPYmplY3QuZW50cmllcyh0eXBlcykpIHtcblx0XHRzZWxmW2NvbnRyb2xFbGVtZW50U3ltYm9sXVxuXHRcdFx0LnF1ZXJ5U2VsZWN0b3IoYFske0FUVFJJQlVURV9ST0xFfT1cImNvbnRhaW5lclwiXWApXG5cdFx0XHQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0XHRcdFx0Y29uc3QgZWxlbWVudCA9IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KFxuXHRcdFx0XHRcdGV2ZW50LFxuXHRcdFx0XHRcdEFUVFJJQlVURV9ST0xFLFxuXHRcdFx0XHRcdFwicmVtb3ZlLWJhZGdlXCIsXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0b2dnbGUuY2FsbChzZWxmKTtcblx0XHRcdH0pO1xuXG5cdFx0c2VsZltjb250cm9sRWxlbWVudFN5bWJvbF1cblx0XHRcdC5xdWVyeVNlbGVjdG9yKGBbJHtBVFRSSUJVVEVfUk9MRX09XCJzdGF0dXMtb3ItcmVtb3ZlLWJhZGdlc1wiXWApXG5cdFx0XHQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0XHRcdFx0aWYgKHNlbGYuZ2V0T3B0aW9uKFwiZGlzYWJsZWRcIiwgdW5kZWZpbmVkKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IHBhdGggPSBldmVudC5jb21wb3NlZFBhdGgoKTtcblx0XHRcdFx0Y29uc3QgZWxlbWVudCA9IHBhdGg/LlswXTtcblx0XHRcdFx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0XHRcdGNvbnN0IGNvbnRyb2wgPSBlbGVtZW50LmNsb3Nlc3QoXG5cdFx0XHRcdFx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PVwic3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNcIl1gLFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0aWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0XHRcdFx0aWYgKGNvbnRyb2wuY2xhc3NMaXN0LmNvbnRhaW5zKFwiY2xlYXJcIikpIHtcblx0XHRcdFx0XHRcdFx0Y2xlYXJTZWxlY3Rpb24uY2FsbChzZWxmKTtcblxuXHRcdFx0XHRcdFx0XHRmaXJlQ3VzdG9tRXZlbnQoc2VsZiwgXCJtb25zdGVyLXNlbGVjdGlvbi1jbGVhcmVkXCIsIHt9KTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGVsZW1lbnQgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChcblx0XHRcdFx0XHRcdFx0XHRldmVudCxcblx0XHRcdFx0XHRcdFx0XHRBVFRSSUJVVEVfUk9MRSxcblx0XHRcdFx0XHRcdFx0XHRcInJlbW92ZS1iYWRnZVwiLFxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0dG9nZ2xlLmNhbGwoc2VsZik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdC8vIGJhZGdlLCBzZWxlY3Rpb25cblx0XHRzZWxmLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgc2VsZltjbGVhck9wdGlvbkV2ZW50SGFuZGxlcl0pO1xuXHR9XG5cblx0c2VsZi5hZGRFdmVudExpc3RlbmVyKFwibW9uc3Rlci1jaGFuZ2VcIiwgc2VsZltjaGFuZ2VFdmVudEhhbmRsZXJdKTtcblx0c2VsZi5hZGRFdmVudExpc3RlbmVyKFwiaW5wdXRcIiwgc2VsZltpbnB1dEV2ZW50SGFuZGxlcl0pO1xuXHRzZWxmLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHNlbGZba2V5RXZlbnRIYW5kbGVyXSk7XG5cblx0cmV0dXJuIHNlbGY7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1NlbGVjdH1cbiAqL1xuZnVuY3Rpb24gc2V0U3RhdHVzT3JSZW1vdmVCYWRnZXMoc3VnZ2VzdGlvbikge1xuXHRyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuXHRcdGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuZ2V0T3B0aW9uKFwic2VsZWN0aW9uXCIpO1xuXG5cdFx0Y29uc3QgY2xlYXJBbGxGbGFnID1cblx0XHRcdGlzQXJyYXkoc2VsZWN0aW9uKSAmJlxuXHRcdFx0c2VsZWN0aW9uLmxlbmd0aCA+IDAgJiZcblx0XHRcdHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMuY2xlYXJBbGxcIikgPT09IHRydWU7XG5cblx0XHRjb25zdCBjdXJyZW50ID0gdGhpcy5nZXRPcHRpb24oXCJjbGFzc2VzLnN0YXR1c09yUmVtb3ZlQmFkZ2VcIik7XG5cblx0XHRpZiAoc3VnZ2VzdGlvbiA9PT0gXCJlcnJvclwiKSB7XG5cdFx0XHRpZiAoY3VycmVudCAhPT0gXCJlcnJvclwiKSB7XG5cdFx0XHRcdHRoaXMuc2V0T3B0aW9uKFwiY2xhc3Nlcy5zdGF0dXNPclJlbW92ZUJhZGdlXCIsIFwiZXJyb3JcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXNbaXNMb2FkaW5nU3ltYm9sXSA9PT0gdHJ1ZSkge1xuXHRcdFx0aWYgKGN1cnJlbnQgIT09IFwibG9hZGluZ1wiKSB7XG5cdFx0XHRcdHRoaXMuc2V0T3B0aW9uKFwiY2xhc3Nlcy5zdGF0dXNPclJlbW92ZUJhZGdlXCIsIFwibG9hZGluZ1wiKTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoc3VnZ2VzdGlvbiA9PT0gXCJsb2FkaW5nXCIpIHtcblx0XHRcdGlmIChjdXJyZW50ICE9PSBcImxvYWRpbmdcIikge1xuXHRcdFx0XHR0aGlzLnNldE9wdGlvbihcImNsYXNzZXMuc3RhdHVzT3JSZW1vdmVCYWRnZVwiLCBcImxvYWRpbmdcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKGNsZWFyQWxsRmxhZykge1xuXHRcdFx0aWYgKGN1cnJlbnQgIT09IFwiY2xlYXJcIikge1xuXHRcdFx0XHR0aGlzLnNldE9wdGlvbihcImNsYXNzZXMuc3RhdHVzT3JSZW1vdmVCYWRnZVwiLCBcImNsZWFyXCIpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuY29udGFpbnMoXCJvcGVuXCIpKSB7XG5cdFx0XHRpZiAoY3VycmVudCAhPT0gXCJvcGVuXCIpIHtcblx0XHRcdFx0dGhpcy5zZXRPcHRpb24oXCJjbGFzc2VzLnN0YXR1c09yUmVtb3ZlQmFkZ2VcIiwgXCJvcGVuXCIpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IG9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbihcIm9wdGlvbnNcIik7XG5cdFx0aWYgKFxuXHRcdFx0b3B0aW9ucyA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHRvcHRpb25zID09PSBudWxsIHx8XG5cdFx0XHQoaXNBcnJheShvcHRpb25zKSAmJiBvcHRpb25zLmxlbmd0aCA9PT0gMClcblx0XHQpIHtcblx0XHRcdGlmIChjdXJyZW50ICE9PSBcImVtcHR5XCIpIHtcblx0XHRcdFx0dGhpcy5zZXRPcHRpb24oXCJjbGFzc2VzLnN0YXR1c09yUmVtb3ZlQmFkZ2VcIiwgXCJlbXB0eVwiKTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoc3VnZ2VzdGlvbikge1xuXHRcdFx0aWYgKGN1cnJlbnQgIT09IHN1Z2dlc3Rpb24pIHtcblx0XHRcdFx0dGhpcy5zZXRPcHRpb24oXCJjbGFzc2VzLnN0YXR1c09yUmVtb3ZlQmFkZ2VcIiwgc3VnZ2VzdGlvbik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7U2VsZWN0fVxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqL1xuZnVuY3Rpb24gaW5pdENvbnRyb2xSZWZlcmVuY2VzKCkge1xuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHR0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09Y29udHJvbF1gLFxuXHQpO1xuXHR0aGlzW3NlbGVjdGlvbkVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1zZWxlY3Rpb25dYCxcblx0KTtcblx0dGhpc1tjb250YWluZXJFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09Y29udGFpbmVyXWAsXG5cdCk7XG5cdHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PXBvcHBlcl1gLFxuXHQpO1xuXHR0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1maWx0ZXJdW25hbWU9XCJpbmxpbmUtZmlsdGVyXCJdYCxcblx0KTtcblx0dGhpc1twb3BwZXJGaWx0ZXJFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09ZmlsdGVyXVtuYW1lPVwicG9wcGVyLWZpbHRlclwiXWAsXG5cdCk7XG5cdHRoaXNbcG9wcGVyRmlsdGVyQ29udGFpbmVyRWxlbWVudFN5bWJvbF0gPVxuXHRcdHRoaXNbcG9wcGVyRmlsdGVyRWxlbWVudFN5bWJvbF0ucGFyZW50RWxlbWVudDtcblx0dGhpc1tvcHRpb25zRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PW9wdGlvbnNdYCxcblx0KTtcblx0dGhpc1tub09wdGlvbnNBdmFpbGFibGVFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09XCJuby1vcHRpb25zXCJdYCxcblx0KTtcblx0dGhpc1tzdGF0dXNPclJlbW92ZUJhZGdlc0VsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1zdGF0dXMtb3ItcmVtb3ZlLWJhZGdlc11gLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZVBvcHBlcigpIHtcblx0aWYgKHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUuZGlzcGxheSAhPT0gU1RZTEVfRElTUExBWV9NT0RFX0JMT0NLKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZGlzYWJsZWRcIiwgZmFsc2UpID09PSB0cnVlKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0bmV3IFByb2Nlc3NpbmcoKCkgPT4ge1xuXHRcdGNhbGNBbmRTZXRPcHRpb25zRGltZW5zaW9uLmNhbGwodGhpcyk7XG5cdFx0cG9zaXRpb25Qb3BwZXIuY2FsbChcblx0XHRcdHRoaXMsXG5cdFx0XHR0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXSxcblx0XHRcdHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0sXG5cdFx0XHR0aGlzLmdldE9wdGlvbihcInBvcHBlclwiLCB7fSksXG5cdFx0KTtcblx0fSlcblx0XHQucnVuKClcblx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0fSk7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPHRlbXBsYXRlIGlkPVwib3B0aW9uc1wiPlxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cIm9wdGlvblwiIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItZmlsdGVyZWQgcGF0aDpvcHRpb25zLmZpbHRlcmVkLFxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItdmlzaWJpbGl0eSBwYXRoOm9wdGlvbnMudmlzaWJpbGl0eVwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBwYXJ0PVwib3B0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBkYXRhLW1vbnN0ZXItcm9sZT1cIm9wdGlvbi1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiXG4gICAgICAgICAgICB0eXBlIHBhdGg6dHlwZSxcbiAgICAgICAgICAgIHJvbGUgcGF0aDpyb2xlLFxuICAgICAgICAgICAgdmFsdWUgcGF0aDpvcHRpb25zIHwgaW5kZXg6dmFsdWUsIFxuICAgICAgICAgICAgbmFtZSBwYXRoOm5hbWUsIFxuICAgICAgICAgICAgcGFydCBwYXRoOnR5cGUgfCBwcmVmaXg6b3B0aW9uLSB8IHN1ZmZpeDogZm9ybSxcbiAgICAgICAgICAgIGNsYXNzIHBhdGg6b3B0aW9ucy5jbGFzcyBcbiAgICAgICAgICAgIFwiIHRhYmluZGV4PVwiLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6b3B0aW9ucyB8IGluZGV4OmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0PVwib3B0aW9uLWxhYmVsXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3RlbXBsYXRlPlxuXG4gICAgICAgIDx0ZW1wbGF0ZSBpZD1cInNlbGVjdGlvblwiPlxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImJhZGdlXCJcbiAgICAgICAgICAgICAgICAgcGFydD1cImJhZGdlXCJcbiAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJcbiAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXZhbHVlIHBhdGg6c2VsZWN0aW9uIHwgaW5kZXg6dmFsdWUsIFxuICAgICAgICAgICAgICAgICBjbGFzcyBwYXRoOmNsYXNzZXMgfCBpbmRleDpiYWRnZSwgXG4gICAgICAgIHBhcnQgcGF0aDp0eXBlIHwgc3VmZml4Oi1vcHRpb24gfCBwcmVmaXg6IGZvcm0tXCIgdGFiaW5kZXg9XCItMVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOnNlbGVjdGlvbiB8IGluZGV4OmxhYmVsXCIgcGFydD1cImJhZGdlLWxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiYmFkZ2UtbGFiZWxcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IHBhcnQ9XCJyZW1vdmUtYmFkZ2VcIiBkYXRhLW1vbnN0ZXItc2VsZWN0LXRoaXNcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2xhc3MgcGF0aDpmZWF0dXJlcy5jbGVhciB8ID86OmhpZGRlbiBcIlxuICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJyZW1vdmUtYmFkZ2VcIiB0YWJpbmRleD1cIi0xXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90ZW1wbGF0ZT5cblxuICAgICAgICA8c2xvdCBjbGFzcz1cImhpZGRlblwiPjwvc2xvdD5cblxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udHJvbFwiIHBhcnQ9XCJjb250cm9sXCIgdGFiaW5kZXg9XCIwXCI+XG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgXFwke3NlbGVjdGVkfVxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJwb3BwZXJcIiBwYXJ0PVwicG9wcGVyXCIgdGFiaW5kZXg9XCItMVwiIGNsYXNzPVwibW9uc3Rlci1jb2xvci1wcmltYXJ5LTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3B0aW9uLWZpbHRlci1jb250cm9sXCIgcm9sZT1cInNlYXJjaFwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiByb2xlPVwic2VhcmNoYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQ9XCJwb3BwZXItZmlsdGVyXCIgbmFtZT1cInBvcHBlci1maWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJmaWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgcGFydD1cImNvbnRlbnRcIiBjbGFzcz1cImZsZXhcIiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6Y29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHBhcnQ9XCJvcHRpb25zXCIgZGF0YS1tb25zdGVyLXJvbGU9XCJvcHRpb25zXCIgZGF0YS1tb25zdGVyLWluc2VydD1cIm9wdGlvbnMgcGF0aDpvcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBwYXJ0PVwibm8tb3B0aW9uc1wiIGRhdGEtbW9uc3Rlci1yb2xlPVwibm8tb3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6bWVzc2FnZXMuZW1wdHlPcHRpb25zXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgcGFydD1cInN0YXR1cy1vci1yZW1vdmUtYmFkZ2VzXCIgZGF0YS1tb25zdGVyLXJvbGU9XCJzdGF0dXMtb3ItcmVtb3ZlLWJhZGdlc1wiXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2xhc3MgcGF0aDpjbGFzc2VzLnN0YXR1c09yUmVtb3ZlQmFkZ2VcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgYDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KFNlbGVjdCk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCAyMDI0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqL1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgUG9wcGVyU3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgUG9wcGVyU3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG5cdFBvcHBlclN0eWxlU2hlZXQuaW5zZXJ0UnVsZShcblx0XHRgXG5AbGF5ZXIgcG9wcGVyIHsgXG5bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17Ym94LXNpemluZzpib3JkZXItYm94O291dGxpbmU6bm9uZTt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXS5mbGV4e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fTpob3N0e2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmJsb2NrfWRpdltkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXJde2FsaWduLWNvbnRlbnQ6Y2VudGVyO2JhY2tncm91bmQ6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2Rpc3BsYXk6bm9uZTtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtsZWZ0OjA7cGFkZGluZzoxLjFlbTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDotbW96LW1heC1jb250ZW50O3dpZHRoOm1heC1jb250ZW50O3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW1vZGFsKX1kaXZbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyXSBkaXZbZGF0YS1tb25zdGVyLXJvbGU9YXJyb3dde2JhY2tncm91bmQ6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2hlaWdodDpjYWxjKG1heCh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSwgLTEgKiB2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSkqMik7cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDpjYWxjKG1heCh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSwgLTEgKiB2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSkqMik7ei1pbmRleDotMX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOnJlbGF0aXZlfSBcbn1gLFxuXHRcdDAsXG5cdCk7XG59IGNhdGNoIChlKSB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcihcImh0bWxcIiksXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRlICsgXCJcIixcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbixcblx0cmVtb3ZlQXR0cmlidXRlVG9rZW4sXG59IGZyb20gXCIuLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9ST0xFIH0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0Q3VzdG9tRWxlbWVudCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBmaXJlQ3VzdG9tRXZlbnQgfSBmcm9tIFwiLi4vLi4vZG9tL2V2ZW50cy5tanNcIjtcbmltcG9ydCB7IGdldERvY3VtZW50IH0gZnJvbSBcIi4uLy4uL2RvbS91dGlsLm1qc1wiO1xuaW1wb3J0IHsgRGVhZE1hbnNTd2l0Y2ggfSBmcm9tIFwiLi4vLi4vdXRpbC9kZWFkbWFuc3N3aXRjaC5tanNcIjtcbmltcG9ydCB7IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSyB9IGZyb20gXCIuLi9mb3JtL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IHBvc2l0aW9uUG9wcGVyIH0gZnJvbSBcIi4uL2Zvcm0vdXRpbC9mbG9hdGluZy11aS5tanNcIjtcbmltcG9ydCB7IFBvcHBlclN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L3BvcHBlci5tanNcIjtcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5cbmV4cG9ydCB7IFBvcHBlciB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCB0aW1lckNhbGxiYWNrU3ltYm9sID0gU3ltYm9sKFwidGltZXJDYWxsYmFja1wiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCByZXNpemVPYnNlcnZlclN5bWJvbCA9IFN5bWJvbChcInJlc2l6ZU9ic2VydmVyXCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNsb3NlRXZlbnRIYW5kbGVyID0gU3ltYm9sKFwiY2xvc2VFdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNvbnRyb2xFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiY29udHJvbEVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGJ1dHRvbkVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJidXR0b25FbGVtZW50XCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHBvcHBlckVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJwb3BwZXJFbGVtZW50XCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGFycm93RWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImFycm93RWxlbWVudFwiKTtcblxuLyoqXG4gKiBBIFBvcHBlciBpcyBhIGZsb2F0aW5nIFVJIGVsZW1lbnQgdGhhdCBjYW4gYmUgc2hvd24gb3IgaGlkZGVuLlxuICpcbiAqIEBmcmFnbWVudHMgL2ZyYWdtZW50cy9jb21wb25lbnRzL2xheW91dC9wb3BwZXIvXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvbGF5b3V0L3BvcHBlci1zaW1wbGVcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2xheW91dC9wb3BwZXItY2xpY2tcbiAqXG4gKiBAc2luY2UgMS42NS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBiZWF1dGlmdWwgcG9wcGVyIHRoYXQgY2FuIG1ha2UgeW91ciBsaWZlIGVhc2llciBhbmQgYWxzbyBsb29rcyBnb29kLlxuICogQGZpcmVzIG1vbnN0ZXItcG9wcGVyLWhpZGUgZmlyZWQgd2hlbiB0aGUgcG9wcGVyIGlzIGhpZGUuXG4gKiBAZmlyZXMgbW9uc3Rlci1wb3BwZXItaGlkZGVuIGZpcmVkIHdoZW4gdGhlIHBvcHBlciBpcyBoaWRkZW4uXG4gKiBAZmlyZXMgbW9uc3Rlci1wb3BwZXItb3BlbiBmaXJlZCB3aGVuIHRoZSBwb3BwZXIgaXMgb3Blbi5cbiAqIEBmaXJlcyBtb25zdGVyLXBvcHBlci1vcGVuZWQgZmlyZWQgd2hlbiB0aGUgcG9wcGVyIGlzIG9wZW5lZC5cbiAqL1xuY2xhc3MgUG9wcGVyIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2xheW91dC9wb3BwZXJAQGluc3RhbmNlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIEhUTUwgdGFnLCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUaGUgdGVtcGxhdGVzIGZvciB0aGUgY29udHJvbC5cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIFRoZSBtYWluIHRlbXBsYXRlLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbW9kZSBUaGUgbW9kZSBvZiB0aGUgcG9wcGVyLiBQb3NzaWJsZSB2YWx1ZXMgYXJlIGBjbGlja2AsIGBlbnRlcmAsIGBtYW51YWxgLCBgZm9jdXNgLCBcImF1dG9cIiBvciBhIGNvbWJpbmF0aW9uIG9mIHRoZW0uXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjb250ZW50IFRoZSBjb250ZW50IG9mIHRoZSBwb3BwZXIuXG5cdCAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBwb3BwZXIgVGhlIHBvcHBlciBvcHRpb25zLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcG9wcGVyLnBsYWNlbWVudCBUaGUgcGxhY2VtZW50IG9mIHRoZSBwb3BwZXIuIFBvc3NpYmxlIHZhbHVlcyBhcmUgYHRvcGAsIGBib3R0b21gLCBgbGVmdGAgYW5kIGByaWdodGAuXG5cdCAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb25bXX0gcG9wcGVyLm1pZGRsZXdhcmUgVGhlIG1pZGRsZXdhcmUgZnVuY3Rpb25zIG9mIHRoZSBwb3BwZXIuXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmZWF0dXJlcyBUaGUgZmVhdHVyZXMgb2YgdGhlIHBvcHBlci5cblx0ICogQHByb3BlcnR5IHtib29sZWFufSBmZWF0dXJlcy5wcmV2ZW50T3BlbkV2ZW50U2VudCBQcmV2ZW50cyB0aGUgb3BlbiBldmVudCBmcm9tIGJlaW5nIHNlbnQuXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdH0sXG5cdFx0XHRtb2RlOiBcImF1dG8gZm9jdXNcIixcblx0XHRcdGNvbnRlbnQ6IFwiPHNsb3Q+PC9zbG90PlwiLFxuXHRcdFx0cG9wcGVyOiB7XG5cdFx0XHRcdHBsYWNlbWVudDogXCJ0b3BcIixcblx0XHRcdFx0bWlkZGxld2FyZTogW1wiYXV0b1BsYWNlbWVudFwiLCBcInNoaWZ0XCIsIFwib2Zmc2V0OjE1XCIsIFwiYXJyb3dcIl0sXG5cdFx0XHR9LFxuXHRcdFx0ZmVhdHVyZXM6IHtcblx0XHRcdFx0cHJldmVudE9wZW5FdmVudFNlbnQ6IGZhbHNlLFxuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBjb25uZWN0ZWRDYWxsYmFja2AgbWV0aG9kIG9uIHRoZSBmaXJzdCBjYWxsLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtWb2lkfVxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcblx0XHRpbml0RXZlbnRIYW5kbGVyLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgdGFnIG5hbWUgb2YgdGhlIGVsZW1lbnQuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1wb3BwZXJcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBjc3Mgc3R5bGVzIG9mIHRoZSBlbGVtZW50LlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtDU1NTdHlsZVNoZWV0W119XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW1BvcHBlclN0eWxlU2hlZXRdO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSBlbGVtZW50IGlzIGNvbm5lY3RlZCB0byB0aGUgZG9tLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKi9cblx0Y29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuXHRcdGNvbnN0IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcblxuXHRcdGZvciAoY29uc3QgWywgdHlwZV0gb2YgT2JqZWN0LmVudHJpZXMoW1wiY2xpY2tcIiwgXCJ0b3VjaFwiXSkpIHtcblx0XHRcdC8vIGNsb3NlIG9uIG91dHNpZGUgdWktZXZlbnRzXG5cdFx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIHRoaXNbY2xvc2VFdmVudEhhbmRsZXJdKTtcblx0XHR9XG5cblx0XHR1cGRhdGVQb3BwZXIuY2FsbCh0aGlzKTtcblx0XHRhdHRhY2hSZXNpemVPYnNlcnZlci5jYWxsKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSBlbGVtZW50IGlzIGRpc2Nvbm5lY3RlZCBmcm9tIHRoZSBkb20uXG5cdCAqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqL1xuXHRkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHRzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuXG5cdFx0Ly8gY2xvc2Ugb24gb3V0c2lkZSB1aS1ldmVudHNcblx0XHRmb3IgKGNvbnN0IFssIHR5cGVdIG9mIE9iamVjdC5lbnRyaWVzKFtcImNsaWNrXCIsIFwidG91Y2hcIl0pKSB7XG5cdFx0XHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIHRoaXNbY2xvc2VFdmVudEhhbmRsZXJdKTtcblx0XHR9XG5cblx0XHRkaXNjb25uZWN0UmVzaXplT2JzZXJ2ZXIuY2FsbCh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaXRoIHRoaXMgbWV0aG9kIHlvdSBjYW4gc2hvdyB0aGUgcG9wcGVyLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtQb3BwZXJ9XG5cdCAqL1xuXHRzaG93RGlhbG9nKCkge1xuXHRcdHNob3cuY2FsbCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBXaXRoIHRoaXMgbWV0aG9kIHlvdSBjYW4gaGlkZSB0aGUgcG9wcGVyLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtQb3BwZXJ9XG5cdCAqL1xuXHRoaWRlRGlhbG9nKCkge1xuXHRcdGhpZGUuY2FsbCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBXaXRoIHRoaXMgbWV0aG9kIHlvdSBjYW4gdG9nZ2xlIHRoZSBwb3BwZXIuXG5cdCAqXG5cdCAqIEByZXR1cm4ge1BvcHBlcn1cblx0ICovXG5cdHRvZ2dsZURpYWxvZygpIHtcblx0XHRpZiAodGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ID09PSBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0spIHtcblx0XHRcdHRoaXMuaGlkZURpYWxvZygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNob3dEaWFsb2coKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7UG9wcGVyfVxuICovXG5mdW5jdGlvbiBpbml0RXZlbnRIYW5kbGVyKCkge1xuXHR0aGlzW2Nsb3NlRXZlbnRIYW5kbGVyXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IHBhdGggPSBldmVudC5jb21wb3NlZFBhdGgoKTtcblxuXHRcdGZvciAoY29uc3QgWywgZWxlbWVudF0gb2YgT2JqZWN0LmVudHJpZXMocGF0aCkpIHtcblx0XHRcdGlmIChlbGVtZW50ID09PSB0aGlzKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cdFx0aGlkZS5jYWxsKHRoaXMpO1xuXHR9O1xuXG5cdGxldCBtb2RlcyA9IG51bGw7XG5cdGNvbnN0IG1vZGVPcHRpb24gPSB0aGlzLmdldE9wdGlvbihcIm1vZGVcIik7XG5cblx0aWYgKHR5cGVvZiBtb2RlT3B0aW9uID09PSBcInN0cmluZ1wiKSB7XG5cdFx0bW9kZXMgPSBtb2RlT3B0aW9uLnNwbGl0KFwiIFwiKTtcblx0fVxuXG5cdGlmIChcblx0XHRtb2RlcyA9PT0gbnVsbCB8fFxuXHRcdG1vZGVzID09PSB1bmRlZmluZWQgfHxcblx0XHRpc0FycmF5KG1vZGVzKSA9PT0gZmFsc2UgfHxcblx0XHRtb2Rlcy5sZW5ndGggPT09IDBcblx0KSB7XG5cdFx0bW9kZXMgPSBbXCJtYW51YWxcIl07XG5cdH1cblxuXHRmb3IgKGNvbnN0IFssIG1vZGVdIG9mIE9iamVjdC5lbnRyaWVzKG1vZGVzKSkge1xuXHRcdGluaXRFdmVudEhhbmRsZXJCeU1vZGUuY2FsbCh0aGlzLCBtb2RlKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gbW9kZVxuICogQHJldHVybiB7UG9wcGVyfVxuICogQHRocm93cyBFcnJvclxuICovXG5mdW5jdGlvbiBpbml0RXZlbnRIYW5kbGVyQnlNb2RlKG1vZGUpIHtcblx0c3dpdGNoIChtb2RlKSB7XG5cdFx0Y2FzZSBcIm1hbnVhbFwiOlxuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIFwiZm9jdXNcIjpcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsIChldmVudCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5wcmV2ZW50T3BlbkV2ZW50U2VudFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5zaG93RGlhbG9nKCk7XG5cdFx0XHR9KTtcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcImJsdXJcIiwgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLnByZXZlbnRPcGVuRXZlbnRTZW50XCIpID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLmhpZGVEaWFsb2coKTtcblx0XHRcdH0pO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIFwiY2xpY2tcIjpcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChldmVudCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5wcmV2ZW50T3BlbkV2ZW50U2VudFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy50b2dnbGVEaWFsb2coKTtcblx0XHRcdH0pO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcImVudGVyXCI6XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWVudGVyXCIsIChldmVudCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5wcmV2ZW50T3BlbkV2ZW50U2VudFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5zaG93RGlhbG9nKCk7XG5cdFx0XHR9KTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBcImF1dG9cIjogLy8gaXMgaG92ZXJcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZW50ZXJcIiwgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLnByZXZlbnRPcGVuRXZlbnRTZW50XCIpID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLnNob3dEaWFsb2coKTtcblx0XHRcdH0pO1xuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFwibW91c2VsZWF2ZVwiLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMucHJldmVudE9wZW5FdmVudFNlbnRcIikgPT09IHRydWUpIHtcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuaGlkZURpYWxvZygpO1xuXHRcdFx0fSk7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBVbmtub3duIG1vZGUgJHttb2RlfWApO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYXR0YWNoUmVzaXplT2JzZXJ2ZXIoKSB7XG5cdC8vIGFnYWluc3QgZmxpY2tlcmluZ1xuXHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXSA9IG5ldyBSZXNpemVPYnNlcnZlcigoZW50cmllcykgPT4ge1xuXHRcdGlmICh0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdIGluc3RhbmNlb2YgRGVhZE1hbnNTd2l0Y2gpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF0udG91Y2goKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRkZWxldGUgdGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdID0gbmV3IERlYWRNYW5zU3dpdGNoKDIwMCwgKCkgPT4ge1xuXHRcdFx0dXBkYXRlUG9wcGVyLmNhbGwodGhpcyk7XG5cdFx0fSk7XG5cdH0pO1xuXG5cdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdLm9ic2VydmUodGhpcy5wYXJlbnRFbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gZGlzY29ubmVjdFJlc2l6ZU9ic2VydmVyKCkge1xuXHRpZiAodGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0gaW5zdGFuY2VvZiBSZXNpemVPYnNlcnZlcikge1xuXHRcdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdLmRpc2Nvbm5lY3QoKTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGhpZGUoKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdGZpcmVDdXN0b21FdmVudChzZWxmLCBcIm1vbnN0ZXItcG9wcGVyLWhpZGVcIiwge1xuXHRcdHNlbGYsXG5cdH0pO1xuXG5cdHNlbGZbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuXHRyZW1vdmVBdHRyaWJ1dGVUb2tlbihzZWxmW2NvbnRyb2xFbGVtZW50U3ltYm9sXSwgXCJjbGFzc1wiLCBcIm9wZW5cIik7XG5cblx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0ZmlyZUN1c3RvbUV2ZW50KHNlbGYsIFwibW9uc3Rlci1wb3BwZXItaGlkZGVuXCIsIHtcblx0XHRcdHNlbGYsXG5cdFx0fSk7XG5cdH0sIDApO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNob3coKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdGlmIChzZWxmLmdldE9wdGlvbihcImRpc2FibGVkXCIsIGZhbHNlKSA9PT0gdHJ1ZSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmIChzZWxmW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmRpc3BsYXkgPT09IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSykge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGZpcmVDdXN0b21FdmVudChzZWxmLCBcIm1vbnN0ZXItcG9wcGVyLW9wZW5cIiwge1xuXHRcdHNlbGYsXG5cdH0pO1xuXG5cdHNlbGZbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XG5cdHNlbGZbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUuZGlzcGxheSA9IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSztcblxuXHRhZGRBdHRyaWJ1dGVUb2tlbihzZWxmW2NvbnRyb2xFbGVtZW50U3ltYm9sXSwgXCJjbGFzc1wiLCBcIm9wZW5cIik7XG5cdHVwZGF0ZVBvcHBlci5jYWxsKHNlbGYpO1xuXG5cdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdGZpcmVDdXN0b21FdmVudChzZWxmLCBcIm1vbnN0ZXItcG9wcGVyLW9wZW5lZFwiLCB7XG5cdFx0XHRzZWxmLFxuXHRcdH0pO1xuXHR9LCAwKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB1cGRhdGVQb3BwZXIoKSB7XG5cdGlmICh0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmRpc3BsYXkgIT09IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSykge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmICh0aGlzLmdldE9wdGlvbihcImRpc2FibGVkXCIsIGZhbHNlKSA9PT0gdHJ1ZSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHBvc2l0aW9uUG9wcGVyLmNhbGwoXG5cdFx0dGhpcyxcblx0XHR0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXSxcblx0XHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLFxuXHRcdHRoaXMuZ2V0T3B0aW9uKFwicG9wcGVyXCIsIHt9KSxcblx0KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7UG9wcGVyfVxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdHRoaXNbY29udHJvbEVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1jb250cm9sXWAsXG5cdCk7XG5cdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWJ1dHRvbl1gLFxuXHQpO1xuXHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1wb3BwZXJdYCxcblx0KTtcblx0dGhpc1thcnJvd0VsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1hcnJvd11gLFxuXHQpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udHJvbFwiIHBhcnQ9XCJjb250cm9sXCI+XG4gICAgICAgICAgICA8c2xvdCBuYW1lPVwiYnV0dG9uXCIgZGF0YS1tb25zdGVyLXJvbGU9XCJidXR0b25cIj48L3Nsb3Q+XG5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJwb3BwZXJcIiBwYXJ0PVwicG9wcGVyXCIgdGFiaW5kZXg9XCItMVwiIGNsYXNzPVwibW9uc3Rlci1jb2xvci1wcmltYXJ5LTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiYXJyb3dcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IHBhcnQ9XCJjb250ZW50XCIgY2xhc3M9XCJmbGV4XCIgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICBgO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoUG9wcGVyKTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBQb3BwZXIgYXMgTmV3UG9wcGVyIH0gZnJvbSBcIi4uL2xheW91dC9wb3BwZXIubWpzXCI7XG5cbmV4cG9ydCB7IFBvcHBlciB9O1xuXG4vKipcbiAqIEBzaW5jZSAxLjEwLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSAzLjY1LjBcbiAqL1xuY2xhc3MgUG9wcGVyIGV4dGVuZHMgTmV3UG9wcGVyIHt9XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCAyMDI0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqL1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgUG9wcGVyQnV0dG9uU3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgUG9wcGVyQnV0dG9uU3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG5cdFBvcHBlckJ1dHRvblN0eWxlU2hlZXQuaW5zZXJ0UnVsZShcblx0XHRgXG5AbGF5ZXIgcG9wcGVyYnV0dG9uIHsgXG5bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17Ym94LXNpemluZzpib3JkZXItYm94O291dGxpbmU6bm9uZTt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXS5mbGV4e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fTpob3N0e2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmJsb2NrfWRpdltkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXJde2FsaWduLWNvbnRlbnQ6Y2VudGVyO2JhY2tncm91bmQ6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2Rpc3BsYXk6bm9uZTtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtsZWZ0OjA7cGFkZGluZzoxLjFlbTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDotbW96LW1heC1jb250ZW50O3dpZHRoOm1heC1jb250ZW50O3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW1vZGFsKX1kaXZbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyXSBkaXZbZGF0YS1tb25zdGVyLXJvbGU9YXJyb3dde2JhY2tncm91bmQ6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2hlaWdodDpjYWxjKG1heCh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSwgLTEgKiB2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSkqMik7cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDpjYWxjKG1heCh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSwgLTEgKiB2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSkqMik7ei1pbmRleDotMX0ubW9uc3Rlci1idXR0b24tcHJpbWFyeSxidXR0b257YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtcG9zaXRpb246NTAlO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7Z2FwOi40cmVtO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MS41O291dGxpbmU6bm9uZTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzouMzc1cmVtIC43NXJlbTtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3dpZHRoOi13ZWJraXQtZmlsbC1hdmFpbGFibGU7d2lkdGg6LW1vei1hdmFpbGFibGU7d2lkdGg6c3RyZXRjaH0ubW9uc3Rlci1idXR0b24tcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1idXR0b24tc2Vjb25kYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1zZWNvbmRhcnksLm1vbnN0ZXItYnV0dG9uLXRlcnRpYXJ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLXRlcnRpYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtcHJpbWFyeSwubW9uc3Rlci1idXR0b24tb3V0bGluZS1zZWNvbmRhcnl7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtcG9zaXRpb246NTAlO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7Z2FwOi40cmVtO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MS41O291dGxpbmU6bm9uZTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzouMzc1cmVtIC43NXJlbTtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3dpZHRoOi13ZWJraXQtZmlsbC1hdmFpbGFibGU7d2lkdGg6LW1vei1hdmFpbGFibGU7d2lkdGg6c3RyZXRjaH0ubW9uc3Rlci1idXR0b24tb3V0bGluZS1zZWNvbmRhcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtdGVydGlhcnl7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7Z2FwOi40cmVtO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MS41O291dGxpbmU6bm9uZTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzouMzc1cmVtIC43NXJlbTtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3dpZHRoOi13ZWJraXQtZmlsbC1hdmFpbGFibGU7d2lkdGg6LW1vei1hdmFpbGFibGU7d2lkdGg6c3RyZXRjaH1idXR0b246YWN0aXZlLGJ1dHRvbjpob3Zlcntib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0yKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjhzLGNvbG9yIC4yNXMgLjA4MzMzMzMzMzNzfWJ1dHRvbjphY3RpdmV7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtb3V0bGluZSl9Lm1vbnN0ZXItYnV0dG9uLWJhciwubW9uc3Rlci1idXR0b24tZ3JvdXB7YWxpZ24tY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6c3RyZXRjaDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDpub3dyYXA7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59Lm1vbnN0ZXItYnV0dG9uLWdyb3Vwe2JveC1zaXppbmc6Ym9yZGVyLWJveDtnYXA6MDttYXJnaW46MXJlbSAwfS5tb25zdGVyLWJ1dHRvbi1ncm91cD46bm90KDpsYXN0LWNoaWxkKXttYXJnaW4tcmlnaHQ6Y2FsYyh2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkqLTEpfS5tb25zdGVyLWJ1dHRvbi1ncm91cCA6aG92ZXJ7Ym94LXNoYWRvdzpub25lfWJ1dHRvbjpmb2N1c3tvdXRsaW5lOjFweCBkYXNoZWQgdmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNCk7b3V0bGluZS1vZmZzZXQ6MnB4O3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW91dGxpbmUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6bGlnaHQpe2J1dHRvbjpmb2N1c3tvdXRsaW5lOjFweCBkYXNoZWQgdmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyk7b3V0bGluZS1vZmZzZXQ6MnB4O3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW91dGxpbmUpfX1AZm9udC1mYWNle2ZvbnQtZGlzcGxheTpzd2FwO2ZvbnQtZmFtaWx5OlJhbGV3YXk7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6MzAwO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi94LWZvbnQtd29mZjI7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R01nQUJBQUFBQUZKNEFCSUFBQUFBdDNBQUFGSVFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdvRThHKzQ2SElVOEJtQS9VMVJCVkVRQWhRZ0lnUW9KbnhRUkNBcUJ1Z3lCbW5BTGhDSUFBVFlDSkFPSVFBUWdCWVVVQnlBTWd4d2JmYVFYYUplZm1OejBab2wzdjYwY1BlWk1wRzRISlNqazVxSUlOZzZDR01nbFpmLy9uM0Ywak9HR0RSQTFyWGVJbmNKSVVrTkhHbjY5cU1SRFU4WmFqanM5VWJzbXRucW5FM3YzdnFpUW1mUlFwTGtLVzZRWndhbDZzNUlVaUpOVVNVRy9Pd29EWTZCNjc1T2pTamtEU1NNdTJwZWRwdTl2SklMVWxKZDcwN0QrZUxIcGpZREk0ZTF1RG5MakhIdnhwRFhHTXlkdUxMbjFxdDBGQ1FPeUZzSlpFMStrSnEzVCtJZTdCSkZJTk9BTmJpOXZUVXpoSTdXNEdtVUwwbFdqVC9GUVFpL20rK3h1UFAwMm9tUkhlNXBuNERnZk5aZm4rUjl6OTc5dG1FZU5hcTFSeFJxSFRqVFBOQTJKRkVnckhkby9udC9XLzV6YmdHQ3hpYTZFa1ZpQTJGaFlHSXRSbUUxWnZWVXZxdFN0YjdNdnJkM1c3K3QyKzBYZG9Ubnp6allicDdtU0hMQUNraE1XZ0NUTDZzMFd2MEFVb2hKZkVxRTNvcFBkNThpa0puS2xvKzN1YWVTSFlKNmZjSWNYamQrcktVRXNhRWxUcWxVbFZSbS9OK2UvOGlQMEw1QUtvek5sSjMvOWlCd3NoTTZ2NUpJVUp5a2dUM2Zkck9tcTZMY3MrWitxL1hzQVhGeEVFaVFJVWFLb3NGbjdjdFQrN0JCUzVkcURvbEpYdW5ibDdydHR6RC92Mzg0TGZ0SmFnRkZBTFlQRTVBN2duTXJaQmh0NGxYcXNiWkttYmRxMFR0T21wbWdOaXVnTTJQWUJjNzNNcmpxN0dMc29YSGNUcHQ5dVB2RkR6OGVOM2crc3hyUFFBdzZEVEZOcC9PWkk5aWluTml0WmhSbXBRT0NrZG9CZEFOalZXbGF2TWl0d0ROSlgvcFlJQWtWd25PUC92VzV4em9NdzdTQUZBS1UrWnova25QL1o5aitPZGZyTDhLZTJ2ZEtibXBodXhKU3VMOEVVQWdnSElpQkhQKzQ0NEVEenYxUFRRM1lrT2NPU2xUSG1qNlVzZGZvMkwrL2pwWWU3SUhXY1FVZ2Nna3BMRlIxWVRXOENHS1FYOWI4R0ZBQUFIOXRvNFJIUTZHTHZGUnJpNERpd1R6QUFERE1LRFByL2ZaM1YvcWRnUG1rR3pLVEVtV0VYYjdRM3R0Z1RZcW8yblA2Lys5N1hmK0YvOUpIQVZzSUljQUNCWndSeWtHVDdnQ1I4Vm9oSmNVT09TRGppU2JBcGhNb3ptMkpScHRCdFVXNjlYYk5GRzNJVnkyS0xvazQ4L0xmc201MjdJYXFCTE11QmJPRkl3ZUZVZDAxdmVMK1k4eFdodHpjcVRtMkNJVGM1ZUxKd1NJNGZZbExZRklWSEFzLy9UNTNONC9ZeDFoS0dVK0hTcUVyZHBQUG5zNmZxcVdKc05iWmFDbFF0amxPTFVNc2hjZG9BNVRRc3M0SkxjOTBTeENPTU1VSzRLUDlOc2hwenBYNHZ3eEtDaENBU1JFUkUvTEtzV1JsSndOS0FjVG5YQWhFeTNyMUtIY1phL1lkWDU4NDIwL2lhWG10R2hvQ0FpSWlBUjIzdi9QOStLVEFDQU41aGRrQzN4VUM0RUxzZ2d2a1Iya3JFallTRXYwQktTbUhDaEl2WU9DQUprS1FneVlNTTJRb1VNekNvMTZCSjg1cUFXQ0NkSGVrM0FCME9ETDFMcTBQZ1RlM2hTdzJmaGk0WGhQdWV1UVdFSDZ4dElFUUFiRzJObTVvVjU0UUZQK3lLZ08yRDRUNXQvd3oyWFc5Mi9ycHFwTFRTSVA4cVY5dkx2T2RzME5MV3lYNTFLNm9mYnZQWkUxcGFmN3czMThDOVp0aHE3ZjMyYmZ1TDY0VlpIdzUxNFlzbTVsZ2ZOYmZHN1c5bHNVQTRFR3o3MjN2eHdHenA0ZlJSK21QOExzNUI3S0IyZURKWGM2eHdsRzY5MDJ1ZzdBekxBOE5ZMjFCMmRCL1A1cWZPVjh0MW9ueUw1alpERGZRSTVSZzhEOThGdkhzdmNsSHVKc3JkdnNKcnBjL1RyL2d1L0VmWkp6WFV6cFdhRGo3TTcrVVA4LzhFa0FBVmFBUy9DUitYcy9KTjRZYUljTzF4SFpjVWFNTWJrbHJwS3k3TmZRSktRY1VSYWdvR21DVytIQTZFTnZiZzMzc2wycElZUm1FOWJJSGIwbUE2a2s2bE41R2R5TU41RWJtUWh4SEtsd01nVDU4Y2d3N3BkVVJ6N25mTWNRZmNVM3ZJY3pWa2RyaFg4WEhxNDAxMnRGT2Q3a1QvYTdwN204M1dBNzFGN2FPOU0rZGp2ZGQ2ajdmeG0rRDFQdTN6M3VpcnZtdXl6YTUzdHJ2OTNsVGI4MlJUMkthRlZVS01OUDM2QnZRTUNvMEdzRWRrTDhzK3pMZzFFeGJNME5nQ1dBeGd6ZjgyREcxS1hNZmM0cmpOY1FmSEt4U0N1UnVCSTVBb2RERERrR2RWOENuVlZFbUVNYWluNFNhMEFYVEkwUkJOcE9ZQUxWcTFhVjl2eEppVXpIS1dDaXM2bXAwQnVreDA2OUdyNzRzblZOYnNvQ21rVk1vcDUrcERHYVd6MnNMRHIyaU50K29aTzBiMzZZU0lqV2N4dm5sTjB4MFZobFlvVzRVUmpYWEt5TEczWTNxb0xkRWF6SEFFRW9WdU1sM0REZUVSVnBHL2plVEVSMENVWkVVMW1vdHFGb2l3SkZLVWFERmlhY1NsQkpyRWpTUUtKL0NTRlNtU0trMTYxUWxrZEtleVNYWXpzZFhLaTZJOWlrTkpNdENVS2xPdVFxVXExVkhUMXpxNitsemZRTkFJYTVKcFJvdldhRVA3Wnh1Tm1Uak1MQll1cTNYVVRnTmRSRGQ2VXE5QTMzY2J4QXp4RERPTjBJeGFOVmF4ZC8vcy9hanhBRTZKblBiRkdaa3VDM3VhTlU4RXNEU0xaVm14T2oxUGQ4SFF4WFNwZWRrWGF3Ylc2d1pvOCs2RHJpdVFGRnc1SXB2bkpoNi9aZ0ZKSzkzMGFFTTJYSjN5SkIwREhvcGhicWcwdXJrdk1JZ1lsdGJHUlBjZGtkN1ZqL05WNHBiQWJhKy9FNEJqQ2c5cDVaZXJpL3BkTTBDRy83dFhaTnhWRSs2YllhdlFuNnVtV3d5M0ZYZjZnZytYbkF0SERnamtQTmlVYnFwb3d2RFV2YlJsY2o1WFpIWXpWOEppNE5sMXZqc09ock1heE9IeGVEd2Vqei9WSUhKWG42SDB3aGc2cUZPRVVxUW8wV0xFMG9oTENUS0oweVE1TFU5eVJRcFNwVWxmWm5BU0JrV3BsQ2xYb1ZLVjZxaWJUQnRNbVFLWVlXSFZVVWZ0R0l0NjJsZG5NSDNFcGlVMHFWUXFIYkNMeE9VK0U0LzFYTGZCRWh6S2hnVWNnVVNoZnh3bUR6OUc1RVJBQUhMN0ZIUktReXJud3V4UWY1cmhIQkVCUklvU0xVWXN6VWJjNHJ0TWRwbDI2RmdkNTV0Z1FHOHgvZkFaMkp6SXZHYm1scmNYQW0zd1hLYTdFbGZQY1MydHhmcStlZ2ZpSEdvRE14eUJSS0h2eTNTSjMwUTZWOCs2bWRmWnNhRlYzZU9VS3NXTXlua2h5TDF1NFZJMEwxU0pMSXhYeVl6cEx5TnFpV3owWFRwa2FUeW4xWkR0aTkwbVkwMnYwdFVxdHpTQ2wrcXJLN3JJdXYxdjlSRDBzZ3hxR2JKb0dHZkVrbEUxWXpyMjhPMWwyS2V3WDlONEFEYU4xYjdMMElhUlRYT3V5OXlpdTgycE93SFFCQytwbGRDck9tSzBNZy9yMXZSWUVtM0RCRWNnVWVnbVV4MDNHNCt3aXRRZ09mRVJFQ1ZaVVkzbTR0bUVJdndVS1VxMEdMRTA0bElDVHVJMHlUcXRGY2xFQ2xLbFNhODZXRVozSkp2c0ZXaTdJeEtKT0J3T2g4UGhjRVRyUk4zdERwbE1KcE5oUklhaXFBaUdZUmdtY2Jrc3k0Tm96L3JvZlFMN0tjYWxORDBGT1czUkdadU9CUjJ4bVZNeGtVZ2tEbDBYN3VKaXV0UzhiTkdhRSt2L1pRT3dxZTg2R0lJZUVzQ3VvdldZZkNxMnR2cE1PQk43TXpPNjhHV1hMaHRtZ1cyZmZlSHAxTXU3cXdYNU5Ed1RrcENTY2VmQmt4ZHZmaW5BUklSSVVhTEZpS1VSbHhJQWlaRTByVnE2NUlvVVNaVW12ZXFVTXJwcy96MVpXRVo1WUJnR0FBQUFBQUNBMFdac2QxQ3ArSHcrbjIvY09sazRyRHBTbDFLM0hyMzZqZzFDVHR3ek9jTnVDWFlOZ2lEWWhvdEgxb2dPTFJTdXg4bmlsNHIyaVlhdjBub3J6WHZaMm5aalpMZmFLRCtWUmdIL2ZnTm1wa0ZiaGdpR2lVYWNHZlhObUs0OUZQdlk5dHZiY1RtNzUrM2ZkYW1XNllTdHdrZHphQ0haY3ZxMENTNGlVNVptTnhMWEdCZS9yUW9Iak1QMS9RRUdWTVpGSmdiRERKLzVUM2V5QmN2R1BTcVRpbUpjQytZUVVqcUd2Mm5DN3EzbkIwRE9xdjJHM1Z2bEloS0lXOE1SU0JTNnlaVGlOR0ZYK1JHQ0RIczhQWUlkVGpkQVVBeXZRa3dTQ3BwaE5kMjBtcHVNalFYS0JRa1dJalFwbUpSVUtZeEtYY0xEYzZrSWZIYVRLYU9NU2M0TXNWUllRMGV6VTZGTHBWdVAzdExIdXdwcllmdGhpd2lIRkFXa1NwbVdSdCs2bko2VTE4Q3V5Sjg1ajJ4MGIwZDdOOXBpYnEwbGI0Tm5VK3BPN3RFVUxpaGRVTzJocnB0Z1lYQ3N4QkZBM2xRMm5tRmMzRmJSakdCZ0NkNkJVSDdxblhCYmFjanNLOTlSZklETUFGa0Jzb08rblpnOFAwQkJnTUlBdFFFYW45V1FFczlNQUhORzg1NTR3YStBcm5xdlRUanBHUzdlL2lsUG1qQVJQbW5zeFdrZEFBUnlPTDl5QWh5bXg3U0dLbGs3R2g0OHZEdk5mZGcrSVRCWnBEOWd6Z01JQnd3Qms1dG1rRVhJcXFNTWFFVGcvSFVlMjZvTFRUcDR3NGc5VWtaNWJnYnhFSHRDeVRMWVBIbUpVcTN1SnBxenZTTmN1bWJCZFhZUXNrdTFDOTJOOGpUdkRGRVUwcnY4MTdnbXFzR2pQZlJ1Tmp2ZXJURG1IQ0U0cStxYnpPanVJSXZSYURoeloxL1ZKVXBoaGlPUUtIUXdzWjVUamd1QUI4Q3VLcitZSU1LZXdJb01PNXh4OWU0QUVCVERTWXBtMk9UeThvSW95WW9hamVqVVFiOEp3RC9YQjVpU3N3VWlnaEFzUkdoUzBDZ3pKelhNQ1RVMVhFWkhhVEFYVENRU2ljWGJZNFZDb1JnTEV4c3RsZEN0eFoxYVVubHV0R2h0T1F0MTgvUlVkVnBrREJ2YlM0bkVvTkZvTkJxTkZpZFhuMFdKTEpDclU4Q1VicXFNaFpHcG0rRjhFYkJJVWFMRmlLVVJseEtFRWlWVkxWTnlSZ3BTcFVtdnVnQVpoQUdseXBTclVLbEt0YnBtQTZ3clFMY2V2ZnFhRTdEVFdzNllIbTBFMmRjbGlXV3NXRTNubVM3RzViNnVHVm5Qbk51eXlXYkh3eERqcFdrNk0rajIwZVlNTFEvMDNWTW1LbTRabmdsSlNNbTQ4K0RKaXplL0tyZENrVk1sS3N5SW1tZVpmMEdReXdKQkVGeEMvcmdnQ0lJZ0NJSXo5MGJERXdNVGo4ZmpBVUF4ZFM2VnNEY3MxZzh3ZllDWHJOZDk4U0g4Z2FqazV2dVVQcWc0WERQOUptN29HV3ZHWHhTZEVMTGZyc0VTRXNtV1hUY00zY0x0SEZTR2JTSEJBamNDaVVJWEpxSG5NbE9MUkJMYXNuVUsyU3V4MXpxbk1CL1pNR094L3pQdThvaERBREFBT0FBQ0FBbUFBa0FEWUhnbENrQ3VMVkFpU0lLRkNQMGtoV05LUEZVd2JkeUwrc0RCeWVna2FKMldFTXRXckU2LzR2cFc3RzZlNG1EdzBCZnhaaEZ0OUd2ZmhQRUFteWQ0Y010VXFzUGw0YXk3R3VhazV0ME41Mk9Pd0phQmdTTkhzazJOaDdxRVdaWVZxOGUra3N4amozRUtTWGc4TE5pbFFxRlF6RTFmdjV0dnBRUUZ0RklteUx0aXZUZVdrUUNrNVpSZTJRaUoyWnJMWURWODZNQllXWDV4QVB1bmsxeW50WjJ4NmFiTnJpWEFzaFdyY2ZrVTYzeS9qL20rZ256TjhJM1l0eHpmQ2VPaUFQaTdZaDF3QkJLRnpzNzJXcmxpZldiM24rc09ta1NpelhIVFhwbXZBbk9nZWErN1M4RjFFSFA4blU0SW5GWTRRNW1XcDNCQUxsZXNhN0J6NEZ1T2JFNEVYUm5peWs4aHRDT2lrOHZsY3NXWUlLcjQvY0hNM1hYSWNjeU9Ec0JYSDlSM05JQmpVc2QxZmlkajBpaW5INXJpWmZVT0RUaUZRdWx6ZWF4NytqSFpWeXhmMzhVM3hMZHIrVTd1NDNINTlLZWdLOTVKdnd2eXFuM0lneEx5VUcyWTRRZ2tDdjFCVEQrSXZDTVBNZzBsVllSQm5TSVFrYUpFaXhGTEl5NGxDQ1QyaG0wc0VBZ0VKVERycWI0Z0oySllvelNVS1ZlaFVwWHFiTnJaK1poZWpiKzVySHJHemNjTFFoSlNNdTQ4ZVBMaXphL0t6UW5NQ0VLd0VLRkpZWUd5TnlLMWx0SlUvSjZXbUZ4VXFMc0luWFNzMzRzNEFKblROUDlKVjgxWlcwOGJ3b3h3ak1vR2crMWdQUHh3QU1lWmtCRUUrVnN1cHN4bzljV1M1aXZuYVNVcEZKUTFURWJ0ZXlLak1BTGxTUWg2UkszZ0NDUUszZVFVNGpiRUM3dXEvQXlDREh1Q0JRVHNjTWJWdXdNVUJCVERROXlRRk0yd3lSbnlFU3hLc3FKR1UzUmlFRFBYTDlEWjVGNElwQXVTWUNGQ2s4SUdaVk1GQ2RPa0x1RTFJS1ZGbEdneFltbkVOZU5CQ1ZTSmtuSkVqK1NNRkVtVkpyM3FtREtJekdsa1NiYmQ5SExrMWZ4KzNlK1ZDcG1Lb2hnbHlVQlZxa3k1Q3BXcVZLY2FVRzNVbGZwb2tNYmF4TkFzTFZxMWFVOUdJbE9mdkpsTXBwakpaREpiUmp0YU5Xay9yeldvTUlJYU5XZXNhdXQwM3lNTzJQeElJNk1CRTkxcWZvRHl4Q1N3Z0NPUUtIU1Q2UVZ1RGg1aEZYbHB0cmdNanlCS3NxSWFMMTdHY2RrQTU4QThnQ1kvMzJQTGJ3a25DUUJBTm10Q3c2Tm9CclZJcXpidE9Vc1dVNDA1bEN3WjF0RHg1cDFvN1RFZEpCZ1NHTDc3N0JFam85NGFvOW9qdEs5YnY1L2hBTThSYTQ2U2pnbWRlTHpORE1oaVVIbnU3UW1EREJaK0lVRmlUY0pvSGNsSWtTcE4rbVpHY1RjSDVJY0JwY3FVUjBXb1ZLVTY2cVozdXNlZ0YzbW4rYkZscmlxOUJtbW5WN1BiN0cwUnRDYXNPd0tRWkVnaDQ4NkRKeS9lL0o2SnJ6MnJ2ejExOFBrOFBwL1A1eS85TlBKaXI5Z0p3eWxLclV5NUNwV3FWRWZkVkZOdGhyV2dWWnYyWklTWWVyZUJvSmRIS2VhZWcwSjdVQmVxUjhTTzFhbjNwRkFNS0x3SXRWU0orK0ZtbmlIRXNGRVFXK3Bla29NNUhxZjUwbHhCTEx2OXpDTUFaVFBRMTduOVg1a0hGWDdjNlEySnZiK0tTSXNTTFVZc2piaG12SkVFV3hMSEpEWE1TSzVJa1ZScDBxdU9JS09Mekdsa1NiYmQ5SExreVZlZ01CVzVVS3drR1d3cFZhWmNoVXBWcXFPbWo5cDVxbE5UMy8vMXhzaUFSQ0tSU0FCQUJRREFnRUFnRUY0a2NIUEE0eS9mMm03WUdvNUFvdENWU1NJYVRlVkdGQUFseDFSSVpSdkdjNWowSkllb2N4enpwS3RjYXljeEkxaFN5Vis2MS9HQ3d1ekFNZlFNdzZMVEtkOG9zRkFjck5WRFBJZUZzNkxIRnhsTnl0aWVEamI4R09RUWJoU0l0ajAyZ0lnOE9WYlVmZ0YvR3RrYUNzTU1SeUJSNkQ1NW1jUGpMYllrSThKMHdKd1hmL00xbm85ZGpUVmRXaHBpRDRNamtDajBHWVk2a1kxTjVRNEVLZ1VoV0lqUXBOQ2piS29TQ05PaVhvWmJWRjkvenNMZEdZR2dWYk16d0p3ejgrbXFVMnNqWTFCcmNqbDNmRy9zZno2cTdvZzJZMzR2ZnBkVWhlL0NaMkhIOHlBQS94UThEM215QUlETkFWc0NBSmJabnhpMmNINXMyY1JKd1ZhT20yV1dzdFBHWnhZWkExS0lSN210M0F6QW10a0ZVSTVpbERjQW0yUXdvakZYQjZyM0lzQnlWcTVsK3ROYWJjdHJGK1FyQVErbGtpVVd6aUhHS1djNXUxRlVkTUtNaG54aXhuQVU0bGthQW5vL25odVNjRW5IclE2UUVkb1IyRklRNEdGbllIa2ZCZ0pUd05sNDJyUUg3ZFY2SUJLeDRHRElQVFNQQXRZSGN1YS9VemVQMWVwWkpOYXRPQVNxRkVRa1lDV1NqS29tY3ZKNFEvbFltUjZiV2lFV1dWSUZBTmFJVE9WdzJaVkh6cjVNekMvMGkvRDFrd0VXVkQvelQ5YjZERzYzMmlLNFVxQzdUUDJVTmJua0VZODY0WFlpS2xXK0JTM0ZVS3hIRFFZbys4Qjl5ejF3NGgwN0JhNFFra3pMMExHSkdJcnJaK2NOWHVCM1B3NmNlZHBBTVU2R3pSUXFEVzdudEIrY1dpc0Z5bzNXQ21RakwwTW1Yb0JxTldSRklaSTdnRFhodFNjdDhMcEJma0hzUlE2WHBWZklSdlpCVThwODVGNGhIOEVLbnhtRVltdStLNmNZWTNnUWUxKy9UekpBSVJGMWNLdk5tbjJRME04YU9Xc1hqVDlqdkJDcjUyMXhxdFdWSTZhcExwZWhLY3hadVc5QldMSjNRR3FmOUpUaXV2dlUwd2RnaHcvOElCUklYMVZ1TlF5c0JxU3RWTlBYWkR0TCtOaXZjd2kxUGdELzVPMG95bTJKKzc4b24wcnhnQTlPQ2xhMGdOMEpFUEhZL1lQNG5oSWF3YkVKMkhsVW5SOURiemZXTVBBdnhrcnRBMTR4NmpyQW1ZVWNnUmZSbFpubll4czJ5K293TER3a1MyVmszZGZqQUFVVklKZXdEMDZ0eitBdXc2cElxeFRsNGRtam9HbFlRWERNYjMxRkpQcys2N2o5Uk5nc0hZZ3d3T2NZdHVmSzZWaENMTXVjNE5GVGJ2OXBFUWpGTmpOcjBMV0FKQjNYR0htNHg3bkJSZlhtSFFoUTBienFtT3RWVG55ZVM2eDFIYkMvYXJqL1hlLzdxTU9sN00wZVVuRFBnaHlpc0Y4cUlvRmJoZkVncXlENG8zbzJLNVJMck1KWUNhQzVnckh3dXBETnNWb1hGSTMrOVdZUGExbHd2T3A5MWZ2YW5HaG9tSmlwOTd1cE5IbU9IK3liMStoTElwZGRyMjFSaUExM0ppYjc5azZwVEIzZEZBbzcxNHBRMXlSWmJUWE15ZEE3bVFFOVJGR2hML094ckhqZFJubzBYZGY5eUVlMG5YRmZPZXJ6WStETzNmaUJXQkZNQW1xRmJPZWdrQXFYVFZvNWZTNjZ5T0lWbExDU2RjcDY4dWU0eUplbGhVUHRVNlZtMmpuTkFQcXdXYU5ubnYxdzdKUDZ4UVphd1NJUGxPRk1FVUd1elBDQmIyZEpVeWdZNlE5d3I2SlVqSnI2TlpjYkVZd0wvY3haZmVjODJMT3NNSzQ5eFg2MjhQOE5xM1RERWNJQVBad3doTHc1OGhQS2s1SlNvREJKZ2lUTEVTdFBBNTBtN1NxWW1OU3g2Rk52MGlTalUwNHptVGJOWXM0Q3F6ZkpmbG1DL1laSmdOQndEQWFCaThlQkhUNUhBazRJUWtLdVJFUjJjZUhDalN0WFloSmVNTjY4RWZ6NHdmanpKeEVnZ0pTY25FeWdVQXdsSlhkaDFKeUVDK2NoZ2dZcFRoeEt2SGgyRWlSeWxpU0pwMlRwS0RvNlcyVElzRldtVEY2eTVFRHk1RU1LRlBCV3FCQmZrUklDQmxWbzFhcFJhdFN5VTZmT1Z2WHErV2pRd0ZlVEpuNmF0ZU13TWZGbjBjRmVwMDRCdW5UWm9sczNwRWNQdmw2OWtENTkrQ1pOMnVhVVU0Uk9PNDFyMmpTdU9mTjJXckJBNkUweVpNa000Ync1aHdzV25DNWFjcmhreGVteU5ac3JOdHl1MnZLNFpzZHR6WjdIT3N3R0V3dWhrUmlNN1RnNEVDNGVuQjFuaUpBUWJvdWRFQkdSSFZ5SUlSTGVjRDU4SVg3ODRQejVRd0lFMkVsT1RxUVJYSEFRMTZVNGhDN2dnQ0VBZzBZQUJ3b0tEcnVFbDYrR3FiRk5QTFdHQXhEQTIrMm1VU05PaUJnN3QwU2tTMzFveGVNa2pyRm4ySUlqSnpqTVNVaE91a2tvRUpTaWp5R2d4MklhLzlaYzAzYituOCtncWtnUzI4czc1NmNqVXAzendUcitSUGU2U2VybFVkVDVhZXVnZS9BSGdCejlGNGlud0U4cStINE92SVczOUZiZVdyeS9CcU12di9LU3VwaTlIa3JWZWZHNVo0SWF2Zmp5V3krcDRzVlh5aGVWVDVueElxL3pidmJqb3FYWDFaZTBoajBBWUZNUVpzMkJrQWdGSUdGd3hIWU5COVhkYW13cjNzNy9DSWZnWVppZmhUOWdhMTB5d3R6ZFpZL2hjbmVUWWEva2l6OEtDQm9yaEZaNGcxbFhCR0dXS0E3NTJFbElkOWFMSzRTRk5kVjMyOWJHN1JJSUtVNEdFdmhqcjhMVTF3akEyM3M5Qm1nYkdqUTk3b1VLd3FpT3Z5UFpFUklDS0l6QTZXVHBXUXdWNm9KbGUzVlRsajVUeVBLT2ptNE5idk9nL1Q5R1ZmeE5BOWhGaFFEU3cvZlJqcENGMlc4T0E2OGlDeVQrZjJIL0RHOEM2ZSttMXgvSUk4NzlOQTM1cndBQTY4UVdBWWdsVFRBc1lBQ0VxZU4rNm15M3dZb0E0RitqTm9XY05TOE9pYWpRUVA3eU1GYXdJalFSZ1NVTUxJMFE3bjFSQVg2UkY4WUtJSUpVb1ozeWdDK1EyUW9zQ2t0TzVsdU1IR1VhRTNlTGU4VmowaHFwV0FwSUVhbE9hcEc2cmRXKzdxUkFGY0NlWWlrQTRCUFRzTGgvd1VXZk9ieDlSNlU4cWZBNFNLbjVnN1lDWEFTUUNRQllOM2tBLy8xTjFmL2s2Uy8wWS8xb0JyNzRHWHh4KzJOZjB1Ky83Z3ZxQy9MenowRWY5T1JCcWpuMVBnTG9aUThiKzFaMGM4Z04vbC8yRFdmTm1mS3BYMTAzN3oyTHhuM2x0QlhUYkU1WjhJUHZmRy9HSm9TRHk0NkFNeFkyRGdFaEVURUpHU1VNVG9XZ3BrY3hNREo3MjRSMy9lSDE4U0NDUzRJa3lYUXlaTXFTcjBDaElzVU1hdFNwMTZCSk15TVRNNHRPYi9uTlczN3l2di81Mk9jKzhZWGYvVHN1M0xMTWVUOWJkWHQyY05ldlh2THlhUGpGRFUrTmdSY051T0IxcjNuRExCSUdSeU5RR0R4T3lqbW9WSU9MaDYrVUdBd0Frb1A4d0pPT2hoYkpCTlV2aHBVTkxacURVNkowS1ZLbHliT2JYZzZ0RWhWS2xhbFM3bHVWMnJWbzFjYXFWZ2R2bmFNUUNjdVdYSEhWNWNpNFdVUW1VbVUwTU1BbXRnUXNCU3p0RjNSYkJCZXdGSUF3NWw0MWlqY2JCbVFwNnkzQUVOdDgyZEFrd2p4bno3UDc4VlVVREIvVm11QWQreDU2Y1ArK3ZYdkdSa2VHaDFZc1g3WjB5ZWpJOE9LYkZ5MWNNRFE0TUgvZTNEbXorL3Q2ZTdxN09qdmEyM0t0TGRsTU9wVnNibXJjZ1dBMDdQY2VmZVRoaDdxZGRxdlp1UCt1ZEcyMWxzVEFQK2Z6NmRyMW1vcCswTEoxVEVnZ1M2Q3V2QzVveUFpdWIwMTNZUE1MYll6VGJPREFUWDVZRWlZeWNwVTVJVmNQZkpEbEorb091ZHN2TE9VeUNIQTBlcFNoUmQ0ZHVINEtnRXBNRU9XWkdiNUVGY01qVkprQlVCVUJSWmtBMlpLTlJzQU4xKzEweEs4dGk1THZ1OUNRT2Nad3hvYnRWSllTTllTRkkzL2V6d2lMSmRRRWxWQVZxYkZmVmo3R0ZZS1V3aUwyTTljU2RnTm04TEhjc0FJbHYzdCtwVHppa2dqUzhMaG5wUkE0eURwYk83QmNla2hMSVJ0eXJzbzNoT0ZiaVUyOUZnbUtZNUo4MnhSZDhxeWxzRldrRUgvYmFuOGxuRHYzWnk1ZTREVkdpWjNPUVJEQkQ0NjRYbldUbW9GRFI1MnVYSmt6bGZ5Q1JOMGpGVUxlcVpWTE5RRVhtVkVsRG90Wk5PZml6UTRSTGJpMEszVmZRaXVPS09FU01GVHYxM1R2aTZDVnlVN1d4TW1LVzNVYnREbW5JMTd5WDNIY253amdvZm9VNG1hU1VsTG5JUG9kMHc4eXY2Nm9XSU1kU2lHUFV2MnRnbUE0RWRhMTBGcm50UW0vZWx0aGZ3dWhBSFdLcytKcy8zenF0VHhTZmNaZFd2TUJrRWtvMk9XZDVoOFZ4a2wxd1EwdFdxZlh4am5iWFR3RHc1b21XWjVxZHZISURiS1l4eWc5NzBwSnZ6QXo4bjM1T0xSa2ZTYmREVHBaZ05NOWxRSm0yaVUzL0gwbmd4dkgyOWRBZVkyUURRdnhaNHpTaHBRYmhBakJtd1ZiSTdGN0l2SjdraU4xRkpHV051QW4wek1FeVJsMGgyTjE3SkNLaWdDUEtmeTluSE5PdHp3bkl6d21ndXZaWi9UTUJjUWxIQWZ3NUV4SERzWEd1RnVTZW8zeUNKblpSYjNXN1VmM2FOWjczRVlLN2tPU2xWSnN3WVl5SkN0Y0dNMUdyajk4Y25IaGtGbXU3UGRPd24xV3pSMGh4VG5SVThhQkpteHFIOXdRSUljL2ZVV0JIajhxcklTamJPMmhQVzdsUklhb0RKcEtwNldyVkhiMG9sNUxuS0x5RmoyVEhnbXk5NkFwWjYvbHExaU5QWTh2d0RLejVncytFL0NaSUNQd2NhY3FjblJpcjFSelBzbkNnUVZhZzVVTXJLR0o2eTQreVBZWkk3eWpLVEpLU1VONG9VVDdHVGRpeE8wRGtmY1RVZG1rYUJ6cVBiaTVTaUtmSmFKRERLWTFabDEydTFSQU9rd1NwN3pIbjZRa2FpcE5McjZFMHBIZ21JUTBPM3hCbldTeVkyMGN1SDJ6V1l4TlEzdzJtRndQOHhrNWNLZURzZFVha0tsTEhOSkc4czV4enloTnR0RUJpUkROUXNjQ2wydjJaQW4xQ2l0eE1FakxNd0c5cDFkRHRkcWl3SlROQ2ZMU3FSUzBBdFZ1cVFQSXNRQ1JaSW04eDY2SU53cFRDTUpDMnZZSHJOTVdNdzVUeEo0Vmk0SGdSUm9raWdGS1BUcG40NUpZZ3hxaDBib3FndUhQNklna1FUS1ZQcDlCbUN0eVNPSmQ2YnlFMGxRMWRua3RsY2lHVW1wUU85dEJuNkFCUkJ2WWJoL29YYXBuQ0M3NUdHSXhsOFcrWlpPam9IVWh1N05DMjVVSm9MZG92QzFWb0FpMkZBWHArTTROMUR5QXpVVWplU3Y1d0c3WmJmOUVjVDZqTWJzSjFCcFkvSnRvbDdOMGpwUWhnTGhjWWZZZVVaMkJYcUdVSDg1UThSUnR6MmZRZG56bmxsQjE4ZENETTNCTTBSVm1MWEdQRlZSakVkUWhMUDlEaUp2cE56b1VBdmVnOVpBTGZJalRWYjRldDV2UE05QVVWQzExSllCTXlFcEpvTGF3SFZzM0EwQ05EMGNnMi94blhKTitJSlc0QUtmMUdTVWEzVkJjdU1yWGxVWVR1Z1pvT3pQZldLUnVjOHFZTW1sT01Ld2w3eDBrS3Rzd2xmMlpSc3JqMWhnMnl6cUJhUGxBYU1sa1JDN3pHNFdhSGM4QUJybHkwbURWZ1BoS2c2MEtJR3NsbjFGRlFHb0JIWTFUR3Y5S2dKcDNWb28zT0JJdUE0ODVvcmgwYzBORzJMWDZ5U0E5c0djQmFuMlFob2JnbmlKNkZldHVLU0hYTHA1ZWNOMUZpMW8zTWdNbUtkdzBJckZoajgxS2lVTER2UkpESTVLU1VsS0FGSUt4VnpDdWdVeFhwR2daZkFnUEVFOTBOZXpLenB4dkhiUFRWcTJkT2FxODQyRU45dXlUeksyRll0K1dkUVpEZTRVYmVCMThzd3ZsUVVDaUZyYkwreUM3V3FselpPVWIyVnBZUVp1MW1QVWtUMlh5NzI2TmowZ3BVbW9FV0llci9GSmtna2diQUFMNERoLzBsbzVKREJNQzdrZzBEdHpQb2dGMEs3TFdMWFIwNlBFTjBvb0hIMWx1ZUprUURQSVdVNk1aTzZMYTJzZ3VuRjUwOEMybFlHWlBsY3gyWEoxdHVYRmJyZTUxQ0lVV1NoYjRmb2o2TGdHY21sZytVQ2lTaXhjSDlySjZUVEpkQUMyNEFwR2JzYTVoYS9OSXIraDlJZWFYSUNpWnU4QzRKTHpXVDdnS1lUNzYzOStBQWpMbHBwZFhBTGJtdC96Y2RaOG5mSS9zd1hOYlpkdzltUjFTTzdJZmdaS0MvNE1Dd3BDdzVzRDFqNDB3SXViZHRwQk5jc1ZIbXVVUHZoYWtzeE05RjhCTGtzUTM2TS9CT0pBUXQ4VEJCU1ViU29qd0szMkVZYmVRcnp1WUdhOW5XRmhPS1RsUUJ3OUNGajlqVEc0SjNOZ0R2ZXVBZzFVT2hiNEtBcDlwSGdhTUpLYjBTbG9MN0RvZEhzTGpwdFhoa3ZPYWFvZTBDSGpEVTZ0a0tDQjQyZ1pKelJEY1BvMnhOZUpyWkR4Y1hlVjNWMjhKd2swSEpoVTA4THRHRFFNcUtPUDNUR29BSTZZbmJFa1J3RFJrM080a2k2MUlucVQ4MTJ4S2JpaW9CTUdFNURMcE1LcmlPcG92Rkx0YkllOXhxTXEvU1RZc3kwWlFGNXlhWmF2cC9hK0g3dWJEbnBTc2lCd0pGYWdCTWk3d1ZXYzdVSHFsbXczZmNMdnZtblZSU0ZZUlFFbmd4bkh2dXg4UTFDVjdBSUF1QUlEZEFIMUErTHdnK2dIZ1A0QzlRTGdCQU5hZXZPVHdvcU1IVW9OZ21WbUV5REk3THJ4TEhEWFhFazdaQU1JOXpPYkd5Q0dEYms2RzVVZ25UcFBjMytqWlFNallHVXl1TlhnK00vVGliSTJjQnhnSndrYjBiZ2k0ZlpmNUFCQ1dUN0JEU004WWVTL0o4bm80SXN4UVlrNTF3WkttNDRDanc2cFRmUWpYalVMdjllalBPVktKM1BoUzJpSWZ1bEFLNnNNTHV6WTVPbi9iSHpoWkROMkdhUGg0NjZaTFVVWkVtV0ozWFJHKzhBK3Y1WU9PbEZJTVJGQjQrTGpXeXVTdVNPZXAzcXJQV3JOQm9SdkdEV2JncWN1OTcxNWtYejJCRU1GVVpYZmh2TDlVRC9PdW02NHd6ODFJa3NTWHZadUlPcWNZUkNwdCtEVWlnc3VFM1E3YnZnOHo5cUV6ZjhtZmVIRm41NXNKUlV1TFl4UTNmTUhadU83dmhrOE0wOTFReExCWjFTZTJpUU5WMGRqRXVDRlRibnlqZWFxTld0RFVPYnFKZUpzQnVuSVE3UEtXcXZIUFBGeEVYVE1LUmpmQURjK005Yjc1V2l0S2VOMlRUd1BNYjBQQTlxMkZVVUdTYUxoc2xqREFVQU1NTGRLWVFIVmpjd3BnWUtvd2FVUUMxNnJyaHhCRFJVL2FaZ2JFb1VzK0ExMFR4a3Nua1NMalpheXlSYStQaEtLTmpCVDhMb1NxcnFCR2lxR1NSaUY1VEJDN2g1M0Npb2VGNFdGTVYxeks1akRQb2JqSGdQNWE5c0JERDFpTzg0V2NMOTRDbzVFZGNJa0hsTmZKdGZtbUFFdCtBcDFKYXR3N3Y1THhiU1UzbWVLQ1dzMTNjb2RRVVlsSlZ2Kzh0bXVyQUdvRTFucE1oWmV4VExvUEwwa2c3VWV5Mk1MRXV2TTB5NDVLbHdHbFd4QWhuSGZOalphV05jTTZySmJNaW1pMCtzenY5QkJxT3V0ZlBWRWpIakliTmQ1cGFhTm1iSDNGTEp2aTF0bE94TnNvdGRpT3dUOW5lUE83K2VTR0ZGVHowVGFkOVlkbUEvcEo4cUZhNWdzZmFvaXN3NjFBbnQ4T3ZqKzI0MldLM1JWcitjeU9DR1RYVFo3WnEzeUhKUUxSK3FmdVNiZ1BsNFVvVW5uRk1xbHVIOUFQOFJpTzFrYWxzeGVlSFhua3VOSWU5KzYwNnppaDFzOE9LODZla01yNnFzQnM4cnVVcTZ4RkgwZ1VmVnNPWWFuM1dTdEFSZjdGNTB2NndkdUtiMFl2MmJzcDJ2Q3dTcUZhTUFycklMdllWMHF4L1RzNmNEOS9SMHZtYjdxK1VqNFFKREhmTHdxYTFMMllTYUtlNm9jV1hUNkVoK1Z3dWFSeUhzcEx0aVVNZWZwSlJVWUl2ZE9wNVlGKy9NaGdCQjJwZndHamtLY2NmK3dTSStCVnpPWExHZzFjeFc0RFZmOUhPYWFIaVNzMC9SM2RmU2k4aGRGeFloN013bEYvanlod0RhZ0YvQ2UyejBod3dGNFg1SmJEc0ZKdUF3TTBOcXRqc0dNRENWNkdLMTloalVBRGJSTjd5R2RoT2g4dXdITDMwR3pxeWxtY3Y3YUlnN1FvbHpQbkx3cmJqY052MzZYS2FGWno0aThQVkhoZVEzb1FwYXFMSkRJM1NEa0VYTEhNQ0pUWmFQS3lmUVRVV3I4NnFIY1c2WlRlNW9NN3ZhdE5EWGtGbGNrVVA2R1NVUWhWV2l0RjJXNzE5ZlBPWkhlN2c4V3I3Rm0yNHk4aEhrVG1SZ1Y3dmpQUlhQcTRkRDgwYTBhWmc0M2ZCVjV0V3Z2STZBQllPZ2ZHdXRpOGkva3F4UXVMRUdvRzFvNWZUbW02bnNXWnJkbHVFMmJyMExna2RTaDdGMU1TNXBEMERaRHc4VWl0V0tGbXVzeDJIMjF4RC9ibTd4eHM4T0gxbGlZSlNWdzRZdWp3aHhTMzBCdzI1QjdhQ2JHdGdIWlVMSW02dWVhdHhleXByVmtxK2xGbkJtUlZBZDJvVVQ1Q1Y2UExrWFg0a2FLYmRnVG1GaGplc28vS2pDOEltbGdiTHlyR0szOFM3SmpxdDFFNWFDTWlYb3dhK1VQZ3kzYko1NmRvSElneFBQZ2J3SnJkV3RsT0dKN01DTiswNWk2VjdVbWppamhTbUkvZW9kWGpJMld4UUhqYW1mVk9TUHluV0R0NThib3k4eXZMTjRxOTNKaHBMNXBXQm5SRzZsYWExcEVWNW0vdUlBcFJON1JYblRqSXJtbkEyc0hrWnBHY0c2eXM2WmVXWHo2ZDhuVFRmdFpoUU9iYUJYbUxWTVZxWmtnTkRGZ0RpNlhsVFltOWNVMldZanB6U1NGQVNCdHFxc1NvbGlVUEtVZmJBRDErcGliV1o1eWFZemkvZm1Xc0hSWGljai85TnAwWnpmaVp0SjMxMTFlZGdmQXRYOFcrbW12MjUxZGZFd0ZBdHFHOHR6MnlEekxpRHR2YWJlclcrSnFOYmhDeHRTZ3JNNnE0c2xUSlM0MXhhQ3BCR2hwcERycmlRUVdWN05nZGo0RjZoU1VqbW9MU0JzdFpUZHZkZmhBWW5yQmpVaXptK2d3VnU4enFoc1diM3gvRis1WEVVRFVUUVhRQ3h3ZEh4eTV2aTZZSG5zMjhVaUpoMG43eElXQzM1bDJzR1ZRcVNMSGYxQ043Z0NRS2tlR2dSOGFUV3FXL0JsZjVLQ0FRZ1RtdUxDeE16UmpqTElzUjRRZzNWam82K2F2WHRtc0NKb1pNT2tjYnpGMUtPSEdEN1pHeWtsY1dNeHNlaURzU21Vd0NTUmJ4TStPTVZZZ3hLZ3d2UjVaTk1DUjQxT1F1SHN6dVExK2E3K3VmM2dNZVAzR1JHWEhNMEdPZGJHaGZmN3pJYVJFQitPeHZUaDA5OEJzM2YvREFZM3BvRHlyUVV1NlRFSHlVaDVkdGNpYytPQ2hRRmplRitSRHo0dHZxZEQ5RnRPQ2lBMmtmSUh2ZWsyUExSZnRBTzhkeFl1NGUwTGl6N1dCeXkrd0R4WDZaR3VyWmFicnV6R3pXb08rbUMrWkZrbkdzS1R1THpOSENKQzVIOGdVekZzNTNXckJWTWdLM0lsT0JGTC9CRVFXbTlqVG1jUjhVRWswTEovUUVNRGZnUEhUWkNxcVdGL29LZWV2NFVSNHFHVlVTNXp4QjBOZnlyUWRuVDh3ZmRFYUx0cGNqM0poNEZhL0dUNlljNVp1QWkyRGp1d2MrSWIrbk9JN3c2TWFxTytDdkthMGp6YWVmNERxUW9lVUlBa2RrbTV1NW5QTzdabXdUekFBNVZVZnhvdVMyR0ZBSU1BaEExUytmWVlWSXBQY1hpRkxGQ2ptZ2VPRXdBVWRESUh3NjBQZ3BKTkQyT0ZSRmJ3SU1FYXhocEtXVzcyWDdsbXc4T1lXT0Z3MmRac24yZE52OEpwK2ZGSTRaaG1UOXdaY1phOWdTdUFCVHJ1OGh3NWswbWVDajdTc2U5ZEtnZ0pQUlJnVXNlVVZIYWsreHg4TVExRkdEaE1xYXVsbW5QTG5BdERZQUNTOU9XNkpleGUxRis0dzl2Smt6NVV4K3FnVzg1amt4d3p3NXdXQVc1bUhaeWZ6T1JiTk16Q09jNWpkVnBoWnNVcHNlK3BHZ1JweG1aNCtaODlpOXBPM3h4aGc1UmgrLzRiVUNqRXBoNjBPUDEvR1dacldvcmk3YVpXdVFpK0xaSndZcDBiTk1lZlpod3g0OTlpbjZGSmNBSzREbUFHVElpRldKeERUendsSGZ6ZnphdlFZZDR5WU15RFNZUENMTm1KQ3p1RkZicG81RXVpaVFaSm1RbHJJemtFeEJHbUtwMkxUamlraVBzS2ZQdkYySmRENHYxRS9zMmUyNnN4Z0NydUNCNk15Wkxic0lQMlRkOXVuTTdyc3N0UDJINkZCZ1VsT0I2MEMvelk0cTNReTBwcm5jQVM3SlpNODEyeVlkSlpMNDRnSUROdTQ2MllSYVR6eTVIS3E3TGp4akZPY2J4YVhacEIwcmJaYlVQVE9iLzdxeGtmVFBPZ1ovZEtLUmdHejdiZklzb1EwRHh2M3o5ODNMTjRZb3ZvYWJtTloybmpPS0huWjlzUmRUR2pKcXhJT1lNaWRuSndSWkRwa1QyMnBwa2RJVU5YRlNCaFhLSEd1QmgraGwzK2o1YlNyMlhNTzdTQjNWS2FYMkJqck9NbTE0cStSc09HQkhzd1lGTnIra1lMenFBTTAzbmpCOTlHanFqa2FEeE1mT2FOclc2RTlWTWxCaWxUVnhjV1JpQUpldi9QK1Q0YTROYllxRXNrZHNTNGE0clZLTEtRSk5CSlFGYlNyZmp0Qm1Nb0VVS1N2amZBbEFsWVRqUzBSaDFOSFV0TVdIVzRGbjMwWVUwSTRJOUFQVTlyd3R1TitiZW5sU2N0aUVUUlltNGc0ajd0NEFKSkdvY2Vva09SZ1FNOHowZkg5TkxMYVNRUkU4V2NDNEZma2FzQ2JaaFg2azRzU2JHWE5OTGRJdm1RSE9CR29HVjR0Z05LMHM5M3hmQXZyaTdlbU1BaGFVZ2NHSXl5ZmZlWFNwYkhnOS9kOG05NXU4L3QrVHU3L3QrN2E0VHgvc28vZTVOUHd6c3B2S1JyTlRqMXpwL2svYi96WDJvRS8vLzJTV2UrTnF2Z21SZFUwYUtqd1JJdjE2cEU1RlVlbnpiM283NUFqZ0hFT2tJRjkrR1hJOWZFTllLSDljUmtQeXFRMUdoUFhTK0xMR25tWDJlRzU5azVUWnV5ckZYTTlEbVQ3S2w0TG1tUnpZWUxpNVIyZkRrc0tJYmZDNXJreGdBRGI2UjJ1VGZlbzEvSmFKUDRaMnRRYnY3NWlidUc5dlFhK29NK1hhdWlLYUhaczkxckl5UVcrckJtSW9ndjRZRXpoMzE5ZmR0NmVncjg2NWRXVjU2NHJKK0pTSytHN2lVK0llYmovZUx4Zkk5aEZYT3ZFeGNWZE5DOTVTeHgwcDlJL2FVejJhVll4WHZhcTVhOWppbTcybVNjYnNBejJMYTBPT2JyMHZDUTlZSGRoQXBMbFhhL1dNdW93K2MvK3FWdjBEeXFNcFhMSm1mRUxYOEVhRGJ1MXh2K0VXdEpCdm9vVDBhK2tXMk9sbTQyWTNBa1JtRFFZWDZQcmpaV3Y5MnBKa1VCTmlYNmdvMmRMaGU4WWpFUU8xd3lxY3YvUDJqMnVpNUgyUHl5dE9kM0pPQU03dTFFMjIvRnFuZlVScmR2YjA0aTdvWDRORHJ5ZkpMUm91REk3YW1ydlZxOXcrN2FwMDE0akZGeHF4Ti9lcVY3cjgyYW1hYzcxMjVVQ3d1VWRYNitpbEFpbGt2c1d1R0FoVnFvMk8rVk9LK2RXQ2ZRY1o3U3FDK09xOS9yck1QSU16dU1TYTdLRzJGak5naUxjazMvK281VnRETjFGeERqUnBzaXhNM2pad3l3U2tDc0lyeEJHbG1leEtPdXlYU3F3WDFJd1dqS25VYU5Tcnh2N216cU51VGxVVVZacTAzY2xhK3cvTGRCTzZXODVzVWJ0SUtJWVZLTDZIN0hoV1VyT3I0Q0ZxWlBEeG0rL1doNVJQSHFYNExSTnlJZ2pQRjBlVWxESVR0SE9lcXJidW4vVlRpZlVLd1dpaG1JcEFvMTROL3AvZ1Nxemc3bHVqMHI3V0tLTjZPQ1B4bDRYTEIxQmJ3S0VHdll3cXl6VWJPN25OcXZySG03dG9mcUJNMGRMbmRxdXZkRUxCOG1CNW4xelBXT2phNUpBcVNFUXJYZENIM1BEZXduMmgrd29KYS9XU3dzWWhLOU1qV3NsMDY3b3QzQUZEc2xYbjg3ZFNoaVJudnZtYTZCT3Y4blFPbUhVUVRSd3ZYVzkvRDZyUWNTMDJYajMzRGJJL3Z6K2ZYSWJ1U3BWdlZxdkgxWGZOdlh1dW1oZzNWbXkrclFoeWpWOXlYblJhMmIybExkYS9qSDhiYmFVdDdONmE0UGlsVFpjM21ibGpKYm95em92Y291OHV6L3VQSU5Eejg4NFJPajZ3VzIxMHR5TzBvckZVb1BYWE5RYms5WkpYR1Zrcm9HNlpNeTlYVVBMYTB6NnJTZ3FsZ1hLbGJWQmJxNDBxY1g5My90MFBjWnZza1ZKbHRNMU95Ymh2S2t5dEtPWU0vdVYwc1ZnVFVlSUJGV0ZnMnVVTzBEZnpGOWJXQlh0akRqdlNJSGxWMjgya25CbEwvYi85TmpxNHdNK01CZ3RuRVJlRDVseldZRFMyR3Ewdi8wQ2JtNlJhMTN3SDVBL3JrdHlmTGUzWTJzOHE5cnhiL0t1ckdJam1ISHBRL3NhOUYrM0cxalJsTm1Zb1F3NVgwOFgyZnZyVFBtS1NaRHhkak12VXBMSkhwRGtkQmJjeHdSVDZCeEdDQnNReDFLcnRTVG1zZUFDWkJ4MndrVjNqZkxUWTBJSjZna2k3S2VRY1h1Z0wrdWJRajVYUGJ0RG96Qm16b2N0UmErek4ya3lRdXdZYktYM25jb08wV2xrUXNJL09DWHJjZmI3UEdISmZ5ZjRUUHY4T1ZpMnRzSnliWXpjYk1yZ3JCT1hHSlB1L09obUJFSlVmamduaUdDNko3d2dDdUdDOHh5VlJGTmtVbmQ1QVZxSDNMSEF5ODF3azB1UnlKV0dkYjhqNzJJQzBsYzdOYjJzZ2ZNMjZlVU8yWWZidysxbUtTbVgwSmxQV1pHdzFVWWI2REdreVpTbERlc050MWJVWGwwWjVvNkVmZTUwQVdteHNRZDFCcE1NWWRBNHY5UHVEUXdIWGlIOTZDYjVzTWVmU0JvTWhaOFNhTS9xLzlDNmJMQzVOR1kwcEtnaFpPLzMycVQwVlVBWXFIV0RHcVZhSmg4VFZIOTdOMFJuaWthcGR5bDJuQkpJWlZCcWp3MUNyamdMYTZXQXpabkIzZVlFaG9zckw1QVlJWjJhMmN4cm5iTC9XUmlVUmZkaTA0TXhzMjZUc0cxT2xZdi9QSDRjQWhUb2dKK21hdUVJbGllMElBckpMSk5EbWJITW9FMHFyLzZpTG5DU2oxNGQ4Tkg1cWFWVzlRUkF0SW91MHk3Tmt0dXhFWE9MVUdjNmsyMkQ5L1RjMnMvamZuUkFoSklTaGpBdSs2VzIxNEQxUU1mRUJlOG5nSStRa2VjT21OSC83K1NtZE1QR2RiaUUweWF0Z3Y3TnZHcjhLQmJDeUlBbDAybG9jZEVlNjJ1dmNhN3VzMmRjdXlmSzV5Q0wxc3ZKZWQ2MnpMcndTOG5SN25kaWgyUldOQnZoU3Q3b3BXNHMzS0d2OUo0STRuOGZTS0NQdVhxTkFlYU5SVUNRdk5tYVZUQkJ1TnhqaE5uY3dpeG9NR2RSenJtOHpHdUQyelNuelowWWJ1akpXa3lsck0vVFlkOVlkRW95bWpOM1liYjNyVnJid1hCenBvUFdKdkIzVWVjODcxNSs1c2JYQ0taTnBrQ0s0MkRma2M0MkV3cTdSUlg2ZlBvMjVvdWY1aWRHV2V0ODhwMnRrV3FLd2hGZ0pXSE10UnJNNVo1eTEvNjdUM0NSUjYxc3hYNHpVdTZNcEZEZG5ySWJ1V2dmVnphbmYyRnRKS2Nzbi82ck1yU25LYUV6YTArYytIQ3BtK3J6L2VjZ1RSTisvL2JWV1l3cDNoYUdjM205ZE1qdFFoeE4rMkNHSW9TcEpmSHNRd2dYanZhUmxQM3RIQ0FLMCtkTzgycGhRR2plWWM5Wjl1TzR1bmF3MFUrdXdwTlNPcUxSTmJkWDBORHVzbUE4T1ZUMG5rRFY5SlZBRjRBRlJuTTh0TmpUaHRTRlpUbTlBMmwyQk5LYTM1cW4yRXlkSVQySjBMbzc3b1RuUWt6YWQvMnN4RVVTSy94cEFyYnJ1bEIxZ0pqMzVmVkdXMjBNV2FWWTlXdVJtM1ZJeHJlYmY0dHArNVpLT3g1c2hQVk5uSklFdVA4Y1c4WXNjU2gzcGFwSlM5clI4OFBET0xMRUdPamNYRWIrNWEvK2xac2wvaEc5T2d2dWJ2Q2QvY1gyZFRoVktLQTJWNmdyNUp4d0k4WnhBQ0ZvcDlXdXVhdk50MmxRemFhTHFGR3F2R2hUU2drdVI4b2Irc0JZT2UvVmRvdTlGRk05NTZyaFE4TU9ZZUZOQUdYaUdmR1pVT2JwTW1PVkx2aVQ1L21NNENiZlRyUzQ4anRpOWYvbkpDZGN4NlMyek5QbkovTHhIdE5qcnFhdGZLREtTNU0xdloxQ3ZmZjc2NTJTSVZwK2VRYm9BdnFBTUdWNlByNTM0ZFBhTnBzOVUzaWM5VHhLVnRuKzhTQU16SHRsWXZ2emhyeTN2Rjc1WFlIbm9xMlhMSHY3Sy9HN0JlNFUxZzRmL1dWVy9SaUh4QzcwL3o2Q09mdjdhNXpyaC9wei9KTDFLOHdhcmFPYnQxbGY2NUE5Q2MxK1pJMytVN3dHbVZZVEpvaDZTa2oxZzE1Y2MyUzU1ZDgvTHd1TFlQT0FlRUlBSUJNNGdMN29XcTJML3lUY09yUExlNVlMVThNN083dHMrZkJzbVZ2SjljTlZVRVhucTZDblNnRHNyRVBXUlJzRFpNSnNuKythRlc2S1lockdVNTJvUzVSZ2E1dm1WRlF1VkM4c2hlWVZaRmpBWjFGdmo5UW5ISDlMWGVLeSs5aWNURXl5Nmk1V3plaHVoKytxNzF4eDdGbEh0WE1TRUo2WmhoZVNRNUQ1ei9VVVZpNVNMWElsZHVPeSt4RWZNQzVEMHNRenByaVhVOVJhbi9UT0pxa0V0V0hlMnpLTnllaUorNW83aTBWVlkyNnpwWHdDbHhjZlNaRDlDNzUxL3BjeVlNdkMxNHpMSlZleFVSaC9YNG5WcVVwVUlYTGRyc0F1cFZ0VnRmdXdacjlnTE1QSWlSTXNWanE5Z2FKekdyVkpDU2NlbXdZamZQeEFCbmxUcVFGUWRqSTVITm9lMUM1TzAxWktpZ1lXQkxZQmRMTllrL1pkZXhSb1Y0U0IyZkx3MWMwWENJdm16cTBxcnlGS0JTamlUa2ZvWVp2VG83d3NyQU1IWmZ6UkE1OVlqQlpXNlAxMCt2c3BlaitFZUJaclo4dWVkMDg1NnlzQzVCRGZ3KzFjdUVvcG9yYVpVbDlZVkduTHNqUkJaRXhQTkpnS0Ixc1ptSGw2VGFBelk4RzFlR1dGTkc2S0NjK1AxSW8wdHE5TEhLWVhVZlp3L2Y4V1JOTjczQmZoNWtrZ2VxZjhaV1MyWXZrczNFajdwZnFpNzFtNW9KTWdHSTZWTjFPRjZNbzIvcjRsdWJsQVRSdDZwQmtCTjk1bnRYWXpIMlQvUHpNVitZZWk1ODV4dVRUMVlTLzgyVjdlbk5WWnJhM1ZTNk9HQmdDK3lzSVYrWTNlS1hyM0FFL0FPMHM3NWw5WVkwcFNMR3FsVUJraW9EUi94VkRxdDU3L0EzYWsrMVRkdUx1RzlhV2ZTQXhxWGI0N1JsaldxOFlDYkRBbTNZQkFHTzYrSE9RcDVtSE1kcGpFWXUxTjRENk5YQlBnSXRvbGhBK29taGNtblJkQlJOd3NnbXVVbWYrOHlGSTJJRUhsWWJHMVpNUXpCMExEa053SGtFN1RXNGZ6dTNDMHhoelYzYjJsNjFaQW42Qm1TS2VGYUtTTUlHS2xrZUE5eDY0cTkrWE5kdm41b21ZMldyd3oxOWRjeS90bU1mdzYwM09LVXJ3ajF6cTVWOTNBazg2eVpScVBGbHJSWWNxSTVwUEc4anozVGJEVFZXQzJ0dis4cUZxc0lJN0doWnlzKytUMUxYVFAzeTQvenlMY2FiVDdON2RBRTNkVHRpYmpNb3p5a1ZvS2VBR1kyeHFHNnMyS0llN1JKYWcza1RPb01aY0Q4Ym5WRUpxWUY0VnJIYTZMN2lUSnBrYk1YYzBUcU9HektuVkdhRFUySTFvV3B6VXdmNUFOVllNK2dteUUwN2dSTU1oMFdJc1p5VVVtaGh1blhXWk1tNWYrL0hidnMwOG1ES3JPcmNhNWFzRzVpRGo3YUpiWTQwWG5Pc0VaY1Vxd2JEdi9sZnJEYlVkV3B5WHFIYXRjeGJYVFRUZ2JlSjc4ZVhGNW4zenlMWlBGdnJPRGduaE9CcC92SFRhV0xXaEg2VGRuODNmUjdzdEV5L1g1djdzclFLMVhYdkYyTmFZUFJOcVJxREJpNDBmL242eFFsK0w1UTdZWis0M3BrRU45VHpBQ1ltb0d1Y1R4U2lPY3RZb0EzSmhCWnlLWFZ3anVjdkJvNUdIUnExY2lLT0wvc3VnVDRDR2htK2d3N0s4RUt4enZTdlA0eEI5WUptV1U3Snk4K0lwVTZERUExLzY0UlBjMElOVDYzU3lNWkd3UHYzOGVQczY0QzdGY0xheHUwcWM2cTZ0MFE2VkVDY0VMSmNLVmMyZ3VDSUkycWxaOSt1L25aMXdjbEdDTm9rd0RIeHI0ZVJxU0h2WHp1MU95ZnBILy96NzloQnN5elQyOTliVlU0ZGhsMWlZY1I1RW12Qk5ORWxOSTFBbG9xMXpFVUpsRjZSTkxOMHdEODhMZnY3cDArQ2I0T2JKZXEyWE5XdzF1OW9Bb05JcC9tSlh3cEsvem1oOTM1UGdRUFpSYU5STkpOUHBVZnZPZmVPTmxkaEZBbzJncUFXOFZDUWRsV0YyNzNEWkQ2YVpOeVZtNk83RmxmRGFyeWlydkU4bWZRM3k1THBIZlJIQUM0ZUpkRTh1dk1yVFhhR3FaREpPclU4MnNhRndqRVhmRHBqemdsVTRnL2RRTTRKNmEwNGp6LzFVTGNqK1RmL05GVGlOV1h5dXY5SFVBdzNBdmVCU01IL0NEdXl6U0hSOU1MZlErQlc4c0VRdEUyRUZnbUZBcUpwZFhmaC9TeTgzV09leWU1TEZpSGdLRXBKM2hsLzdXQmI0RjFybDVPV3dYSVBqS1pCeDF4b1hDMTg5d2R2eC9penVGZFhqcUNQSTFQVkY4Q09LOTZqNGRNZGprQmRLcml0U0hVN25nSjNkLzNmN3ovSjFrOEV6VDN6eFNOQmFwaCtiNnkxVFcwckZxTUtvZGMrMVMxRkgweUxxRENBdkRwdkxnL2JVRXF0ZkZmcDZweHB0bEwrS0NEVHNCMTF4MkpsNG80TDF5dktjbTlVdU1WWU1jdjZaUWNrdTlXT3V1T3NrdXJiKzRjUHBWUG50LzE0WnNiU0NkT0JlVVk1Z08zQVVlNjBTTHZ3K0JTc2FwYXlyZUVKMHBzWmYvM1doT2ZGSHpvN29OK3p6enYvM2w4ak1WcHJzeTh3RWxXWlNxTzZJUk1kdVhrVDQ5SXBXb0txQzYrcTBHdmNRazFIc2Fsa1R3eGRzTjc2dmhIckl2QVAyWVJYWkxpTkw4ckhzWGZMSmxTM01Xd3R6SGN2RGNnMytmbWJtOVQ5djViSDM5YzNEait6TGpsMmZFUzE2VnV2THVvb0pEWDA4UGo5Q3ptY1cvdTVmQjZ1NHRjaHh1eFJ2Unp5eFZ0OGJKb1ZiT3VtUlV0WXhyeHhuRE13MkV6dk54MzUzVG55Tzk2ZEQzc1cvOGwrNXpXYkozc0tWMzgyWEx5eXczS1czUmY0UG92UGsyM01xUmNvdnR5dlh5bjVpTmMrOUduaThEQ3lXc0M5aWtqSE5UZVN6TWZmRk5mN2N3Y0N2RWVmTlpMZThnbGhtRkc0UGliNGp0TkNSRUt1Ym56SlY0MXVtbUQvOEZNV3orRnZ0R0JkM0MwcHZKZDA0Y3pSVFdhKzVoeEVaZEE4eGZGYzVyakl1eGRBK3g0ejdMY3k4LzJDQTZwRGdHSDhFUGxucHJEcXNPenZJY2I4VVpGWHE1bU4xd2Q1U0xqbjQrYlB4c3ZjYXFJTlVSUm8velcyVGE5cFhqZHY5ZjNGa3VOV0t6b3p3cWdxcnhTVVhhbWVRYVhwU3lNWVdXNmw3QllvWkxGbmVIN3Iwd2htNm9DS203TWlHRkdhZkg2ZjI3c0tXYVhwZVVsM1JqMUFvV1ZOR09HRnd4WWQwbEpRTEluL3JxeHRUT21Tc0pkM0I1MWhCbXpwUm9QMlZiSVZoUjltclJMVjloWDNOdG9UVEZqRVRXbkIrbkNrN2xPVTJ2czlTTFhaZUlpa1RxZmFKYWV2d0pGeGJsRHF2ZDN2cjlEZFc3Lys2SkZBUHIvdjA3cjJRNmpRZlRRZTZMeldQUEJqZyt1ZC80UWhId2ROdlVmZEtQc3RteFp0aXFyeTdLeWdhOFl4eXNvYlY5R3F0dGo0Q3RndGJPR3ZpdnJxTTdvTTZ5T3NsdDVaWmgva3NxcWh3ZkFCclU5SkV0cjNLYkZmUkZQNGMyU200UDU3ZlN1cVdWUjdOL1hSUzV1Y0ducHJ4NVR2UUNlLzhVb1JlVHFITWpMRDhZci91YUc1SHNudXg2UkFZOTJlYnhQZUwzVHpSS0pXZTczRHZzOUhZOEN3TzRPcjN2WTYybW5wZWJwYnM4ZG1zOFVzWEVZbm9DY2NnVkVqOFBRVjVDckJLclVMSUlLbHU0NmUyY0J5SU9XNnlaYkNyWmgvVDkxUTc2NlFkVHFjSldiT2lvNlgwSisxRjlkM0lHb08zUWtCMVVoSXJMTnRKVDEvZGYvNnRkOVAvbjkwNitYRmNrcEJ3UG1Pb1RPNkhVK1hHY0lqSHdPeUxSREhxV25FQzB3K3VmSjFKS2dncEV3Y2pVUmp1RWFmZGIweWY5TElsb1VYTUNEd0w4VkxuRllDOFRVN3FWVitpclJyeS94V1MrTkxkMDFSeUJDVVRHdjkyYjVYVjFKWlA1L05UdmdIVWQxUjdmRDI0V2ZEaUNwTTIzbTEzTnhKbUt4OXVrcnJsaEY3ekM2WnJ0OCsxcmZ0ZTI0VmU0aTlIYTBhTlVKK3hYTEIvV2ZaZkVyeXBjdFg3SGlIejlsNU5MbUJKN0FUSEU4ZnZJd2RqdkdkMytDWUFqYVRra2wzL3ozd0JWajh2TW16dkRBVmJhc0FnS0cxT2ZBakltSjJXRVBac0ZNMklaYjVMZHNTTCs3Qk16NXdydk42UnF4U0ZURC8rVzdBaUQvVHZPSVdKcjlrOHQ1NVhoKzFhWDJVNnFubHhNekcyYVFjTHZ6R1hhZnQwb09jRld2RVYyWnFRckJ0RFVPNERMS3ZEOGZKaVV2UCtmdGhBZmtpZ0dRaWxOQWp0QlVZcVg0LzZlRmtzK3VDMFhIenFkS1cwN3lOa0pUem51MisvUkc2REhnZWxhYm0zejliVWQ1WHpxNDJ0alpZOXBTWHhrc2QvN21sc3RtSHZHK082WFVlMklCTXpsU3o4VnhUOFVGa2gyZVF5SiszdGYvRzJKQ2xlSHNielA5MEJiUm5DYXU5QW11YzZaUEdDUlhwSFBEbE5jOVNtWXoxUEtRbjF5ZWJoMmh2TXBRdGZiSXdycHFOTFRHMU5sbDJoeHZzRzNxYVY5TGJhdzUrZGJHYXZRcE4xc0hPeXUyd0pMZjVWSytVT25wSFQyb294djRxTW9kVldnSkg3Qk5nWkhlT3Z0ZmQvc3RLSU5yY25WU3pOeEN1cFBRa0FQMzR5c1RuUU5tdDdWYlphKzNVTnBZZ2o1WkhqQnNrS0swUVF0dHp4ZFhYcHg4ZGNPRHJ0SnZCM1l0WDM5RzZmMVRaWS9iVmZaRS9vaUo3c1VETGx0OXQvS1pEYzE1ci9ka2V1TWI0dUN1VjQ5WkVReWtuMlJZTXRtOVJRTi9sM1dHQUJYa0ZMNklvSGY4bjZkdkFraEdMeWg3YmVndmhjNFVTQ29JY1BuZXFhZVhYdmdnd0FlZHd0MndJNjQ1RFhuSzEyMUhoWUJ5alZLMDZOSzQvNDhhTHZvWFV5MnQ0U3BlL2tWMnovVFlXcXFqM2JBMkdqR3M3V2pibzdIWU9tcldvQ1VTUGJOMnVDVlJzVytFU0RYclJ2eCtjaVNaR3RYNGZiNVJLcVVkOW5udFZCcCs5SXgwWW5FSmJVVWFLV1ZOSGNYVUs4eTFuWlI3aW85RExQeWZQU3lYVENWeDE3NG5xbGw0OW9rYjNhd0lMS2h1UGFMV1BYWE51enU5MnVIRU9hSjQrZWo1dmErTnFGNUR4bVEwS0h0eXhqbmowNnA1QjlhOTRmM2FwNm8vTVZVYXZmMHpXUEpBN2hKOEtZZWM1ZVdUQXZoTTZrVko4c1V6aUlETXZLWFViNUIrSkpXNXQ5SlJtZlFvVGgrdFpuMTRvb3AxdExHdGVHWjdVOU8wbWM1bHlkV2JBellYYmR4MnArcE8vQzh6U1FWR2pPL0IzdGxEN084ODNGazJOcVZXSHBwcFdwbkVrMW4vbXBab1Y2YUpkSkhtTzdPOVFWSlN2MGh0YTdDVTRKdHljYmd0L21sRHJmNFVaOEVQZ0tVZy9DY0kvZ0dESmZXTjdFa2Urd1NiOVR1WE4xa20zQ0JlQzdJNW50NENvREFsbWk0UTFETjhRWGR2QVZnNDIwN3g5ZmZCSXJpby9ycy9LMXhhVjZSczl4czdYemtvU0MzalF5bUJvQW5jMGZNR3BCaGhwclBldHZ4OXJyZFhzem1lNFFLZ3NKOFlQcjBhYWJ1bnFnQXhNUVRRRHYrTlBjd3hqMk95TTZkdS8zZm5tai9HdjExa1BRSUJmTkJjQ3dLVHczVWdTNXdGckFBZFJ4VndSZ1c4cVFJdWgxdEhLbE9rcjlyWXkxOGZhb3dpVzJzZzY3WUdMMWpKWk1KVXdvY3E0VHVWeUIyLzdRS0s3WFFib1BHd0JxTFdRRDdXUUw3WFFINnpZUTBJSTM3bzYrMmdhQUg3MTIzZDM3Yy9QRGRjSzBJQWgvdWJFWEszQ1d3SHAyRXlQT3liSDlyWW1mMEIyUHNoQVBNc1NIWm1jZXY0RnNmdXhmMzl4ZjJ6Vi8vN0Q0c1hrYmdaaHRsOHF3WU9xSUVIMUdDZis4RWZMOU5xTTUrR3pWZjJuMi8rTUVlMG1VZXRaY0JlL1NIb2NrWWNjSjc0QnJ4NmRSZ0FvRDA0QjA3MHFjaG96WUxrV29iNjVhNXY4bWVXSm1vbUFHcHdtUElmUUJnVzVPOFdhakFIdm8xZHYveWk0OGI3YmZ3VFBaM3N4QUd2L2Flb1lRQWd2bDlLRXdEczZSNjQwZnYxd2JIeFM5SCtUOTg5clNyTmJxM25OTDFmSGx3QStFUkRPSUFmaDF6a3dSVkhXZ3VQVG1FZldLLy8zWHRONzBjZXpxWGJSSC8vczZEM2IzK1FzenpzbE5Kazc3ZDlHeGxzVENIcHh6STh1Ky9UNzc4NFF0Vzhzb0gzUStqSkJIQ1I4a3I0UnlBK2Y2dURNejRNY2pZUDk3U2h2OUhDbnA4S2YzaUdVZ3ZiZy9kRHVORHhTYUlBS01ULzIxY1o4S0Q4REwzeHVUaEZjVzJpNHA5VjdoWExXMEJWSDF5SGw0dDdQTDIvbFF1b3V6aFg3NHJ3aHYwYWtiS25wODk3UE5PN0ZIempvaXVXbEZOZXMrUC9zQmJQLzJLbkhkejh1bXZyUFpTeEZiTGl3Vnh5RFVveHBSazNsKy84ek1lUGg1UjFHQWNBN3NyVis0L3BBbUpYMjVWc2k0Z3ZBd3F4V0RUYUVGSnV5RFEyRWNuV1hxbEtvcEtwdWFuUkFEVEFoWk8wN1haYktqa2JsbldwN1IzWWFBTlRQYjRwR1RkenVVT3FkWTFXaWU4bUQzam9jVDA2VXl3UUFVbEEyMFlCb0tKbFhSQUpETWxOa01aN3lTb3RaRVFqUUkvRVVjbFdsZFdPWFZSbUNsZU9ncllXVkkxQkw3bWIrNzJlMGROcnNMMEM0ZFpzM29FS2hheHVOc25CRWJGeE1rU0VSKytaakxaSFloSlZWM214b3lWUmFVVDBxam92cmVnY1ZkUnNYamttYUZGdEVlSmxqZVFGVlFwbVUwNFFjYkNIakF6MWlVSWF3dmxPWGtPNkxSNmtYZW9tWE1valpSTlYzZnFxeDM3SGg3ZlVlZ0RWQzErWnFFd2xxNjYzemN5OTNxNTc0K3F1QXIwdHRCVXFmK0p0akZpcGMwQmEreWw1YThjbTdZek5yS05BK0lRRk8zcGYxZnJWYmUxRFNwaE5XUnRvSGVKTmhmc1hSZWV4cXZzRnFTZlU3NTZFMWl5cnNuQlpXeHBZYUdZbUlSS3ZXUzd6N09nLzdpNGdkbTRKRGFSY21oanJLMU02Ti9SYWNtT0poR2hsOVkwNEhLeGtqWi9jR3ZLQ25BcnRkdXdJZEsxSVJpaFd0c3ZvYjVIWVdWYWhDTDU3aVpaUzlTVXErRFRIODkxdUFJanlsVmVuTmExdFNpR2JIU24yelhsbnA4dXFkN25xbVBtbkN3WG14MjFYOHVQSHh6Z2ZFSXRFeTU5dHQ5K3V2N0xYZGxQb3k1bDY3MWw0TUFKMW81V29LSUYyRis2WFoxVHQ2MkxONWd1eFdXV2xFdE1reFBmZHZOeEZyWWdSMTIxUmwydmFzb0Q4ZWc2M3NGNHRRN2xRZUd4YlBlTE1DVGlxcjF3REwrdlNKZlYyKzZNWGZXOWNFTVBLMEwvODdrRWk4WTJyYjlWRHQrUDlHeUx2NWNCV0oxb3U3Y0tkRXhXZXI4alA0d3ZEU3MrejZCdVBhR0tPTC9DbWxpU2E0YnlpTHVnK21SQlJSZkJBTjdHU1owMkM0WEg4ZXBkV3IvQ0I4Z2JVWlVwZVNzNXhOUURJT1lWQTFFbUllaUtYV0taUkExVkdUQ1R4b21Pb2dPalFEY2ZYK3oxcmxPeWhuVXd0RVBaaVFEU2xTUTBYSE9WNXNpOWU2WjNxNjlCbnRDMis2dlBvUHZDKzQrMFZiVHQ0LzEvOHdYSXhHNDZtRTR3bjBIaTMvWEFRcGlMZ0FGWmcwTGo1S0grMVhCckhRbnBoVFowdiszT2pJcCs2YjBnczZ1b1NFN3FWd2p1M3RlaDlKOUJPWGMvQ3dEeS8vYVVtRnFsRkxNbUg1bFUxUjloUlV3NFNhSTMwcUZIV0FubW1TbHFvK2F0dUc0WHNzUzE1emYxU3N5bDViWjNiNHBGWDg3YXlBY2RtY1orem9laHp6b1hFZGFRU1prb29Mdm1WNExtenV4NnZFd1c3UlZDRXRXdDNkQVVLM2ZGaVoxYWRpNlZPUVhjaDZtekd6ejJoempmTUtRcVRqaWoydTJhcGppVFByYVJHSjc3YU5qVHBjZDZnUEpCV0FQOVh0YXBjV1A5eCtqTDhqZFBQemEvd3FpTnVmREF3NjNiWEtrbHJtc0FlK1FVOEpmeWZBMnZxRitSUDNZbjEzZWhoNSt1NUhyYk1SSVl3OVBMdG9YOHdPWUcxa1hlQzRlYTlaMDJNM2FNYXVuejljbnlhdlhyN0xFUVBIcStxcGhpSkh5MEpnSmdBeXN6b216M1RsbFlCQ2RiSXZST2NVZUxnTlpMdExPcEZwclgwNFdLT2dWNUFsaXc5ZXgyYk0yd2ZuWStuTnZNVi9pdnUvaE96eEZIVmJsSkRXYU5KNlNSbHVWRzlzVnEweHJWRVhUZlVLQnVNcTZnUFFYZFVzMUl5VnRTd0pXeHZoZCtpblhROUlDNUtoeEhMTXQ0Zm5Kb3N1dFlNdHFYQUxCdm5RRlFCbUhPV2RsVnIrRFRQeGxJZ2QyR01xOGxoUDQ4UkRYT3VFUU1aaTg5K1lpY1NrdGdKSUxubUxoNE9oME8wZU1xemRvOWJ5b2Z3bU8zN3VoUHJKSWRjTDcyc0U1eDh6cWlvVllta3hWRkZhNS9ibGFvM0FLZ2gva0VPQW1QdXg1YkROT1FxMWJJS3dVbUpoaVlIQzNDY21aTHZrV0ZWa1E1WmVqbkU5Y0Ivc0NJaTRsVTBrWTZldFJVTmFYdW9RTHl0SjBOb3kyb01DZ3JMaUpDZFFSM0RCT2YreXhVQ2p2TGZRRmJFZWEvVGw3MlN1Tk91cGxUK25CdGFXZ3JseXpOY1JPeHNiWC9URmRKeS8yZ3hQYTNvVTJHcFliQ2hMMnY1SDJheUlOV05RTC96bUt6WXFVQ3NyVjJhc3JlWFJMNy9jbDRhVDY3U01UQXhFZkpMd2hPaE5oWE9KdS9wMHdOL3ZDVk1xQ3p4T2pmTjVlTFJMT0NLSWMrTXIxeGU2ZkF3YkZzVzRMNGMyN20rYXRvQWRBVGJwbC9OM1JKZ2JCMG5mTTI2TGZ1S2tQUnNEU0VBMFZNVGpkRFhZN0o0Zjc4K1lGL1A0K3NoVitoY2xaVEdmeVBUbTkwdVZLUFJjQmh1dEs1Q0tXWWU5cGdhOGN1Q3FSamhjTW81eE5oNFFjWTZKUjNhazVZNDFtNVNSQjRXRkZVdHNpcUFValVTTUJaNjdQY01JZEJNYTJpY0ZKN1U3ajFXc2YxT2F5R2NxekV6QzNpQVdVYTVDaldhYzNpdjA3Q1NKUkltR0ZQYmlkM09yNVdDd0xmMis0SjJMc2JVMlVGaFZTd1RyRnFEekljNENtQk5qSkRXbFZiVGFEUWE0bVlrWHBkc2t5SjNkVFVlVDF4R3RsVElKdUZNT0duaE9sSEtraE5FR2hKejlCbCtqQWxETUNvRFFtcVp6Qld5VVZTSVBIVmM2MlFEWmc5UEhOd0ZaVERFa0lrbG1nUWlZTEJRa0Q0SFk5Vm9yS3RhQW9TTEtBRnBOY1pVU2htd0lPMnNsUldUTmpXbVZsQjhmNFJSdnVGZXh3b3FRMVprQmF2amh1SmkzZ29keWZESkt3THpBRkR2b2hhV2hEUmlKOTJqVG93bjkzNnR1d1RpM0psWWxNdHdPQ3l0MTV2RjFhQmxBbVpBODJvdE9kSUdDeDBXUUpvT3g2LzNZMW5ab2ZmbmxEbG8zYi9IOXIwU0lETG13WU91SmM5ZGFmMnRXUktBTGEzRFY5cEJHTHRtYnZhM3BDNGFKNjBSNlhxYkdhN1IrL2VUL2Q1UXFuK284b2RZOVdDK3B1eVYwMWhpQ0h3Y28yNFVwVkYxSFIwU212MTRJY3FVc05CanBZcmFYb3BCRjVKYWg2Y3FPay9KYUZYbXA4bGswSmFNZ2hDa0ZCdlFEUHpyRnBRdUFPSXNhWTJ2OTJZd3AxMGdORkVwY3JkaDd0YWVNTFJ0VE1reEd5VXhTVlZnRlNtWFphTlBzeHNZK0lacDhKR2t4cE9iQUY5TmQwYVcwUFB3bnJyOEhqQ2JCQ3Q3cGNyZE55K0gyOG02UStwWGo0OCtVTUhLQzJGTmoyUTNlZiszYVJxSHVSRCttYi81U2Vmdzk0TWFNTENmR1ZaWkNTZjZTNCtKZS9QaEIrU21LMUpmT0RVNkUxWlVxNU10NnZXYzl6YU9VOVZsa2d2cTVJemhlWHFMaFkzcDlkTVA3NW8vL2NYaExHZWZIZXphSzg4ekpWMWY4LzU1aTZyNjllUWZaWEQzMWw3NHBPYmplclBaZlJrM2M0ZngvTFV4ZVlndGJNN3V3LzFxb2U5emJZbnArVHlNQjdkVzA5L0JkeXpLYnF0ZUtIa3NHbHlRVUZiS3hkN05OZHhkRWtaQUFCQThpbE1QR3p2UlNnR0JFRHpZTVhublVGelJUSFVTZ05aN1ZVVDZrZUFlMjVwcWY5UVgxZjg0c1dEaUk5UEhFYlU0Wld0TFlMUEVUNlYwUU5tOWVsOWkwTFE5SGU5NFF2Q2x1bklFR2lSY1JtcFBtWlFwRFFubUY2a2hBQVB4dng5LzMzLy85OExILzF0U05LSWZBTUJhK3c4WjVBRjhQRy85czZJbitlNXNEZ0dnWUFBQUVNQy9IOGdqdDZ2ci8wYTlVNzdYWDBCb0tCVkNlbzdnM1lTTnQ2dlZRNldkNG4vd2xlcTlRbFpOWm0xSXp5LzJ5dWNML0FvSVJ5NERwZnVNUTMyd0pNclA2Q0xQVURmaDZ1ZUJsbHJoUmZBYjhJTjVXNWVTVmNhcE8rcmFQaSt4YnpyZlhhem83T2Q4LzdMWTFRNmcvNTZsMHBlWkJBcW8vcjR0NEY4eTMraGlDR2U0bmtBajArWFdVZ2t1L215Y2ZWMnZ4RTBaRHZxN1QrYVV0aE9VelZmOU9KQVZXQW1Bcnk1dndENG56U09mZVkyZHBVdHQyK2FBZlo2cWQwTmxMc2M0KzRrNEpXRnZmOVFUcXZ0R0xlUmpaaE9DOXhaNTFjTDNzSUQ5UTVValpkdXgyd1dxa0twdEZHVUlMWmxITHdyWklUN0ZVSmNpcEJEOGZLRTl1KzgvNGkwWDh0dmJ2T1lFM0JDUGpiSGxIanRtSXRreHZpc2kyb0V1Zkp5MElRWU56RDI2bzgrSzBiRnNsNHZZL3VJSlFIWW9lTjgrV1FRNmR3SlBTMWlKd2srejJGUzJweWU2cmMwdGJUM0I4MUxmaDJTN2hoZlVtckZ5THEwRW9taUliNTMrWUtWZTc1TE1kQXdEa0pzQ2MvMFNDc1RzeFUrWVdtL0tldWZLK1dqY3NGN1paRnpiaFRFajNwbjV5eFV0RDVWV0Rzc3VlQ3RpYy9DMk1kZkk1N3pJOXIyUUh1TlNmTDI4SnlsejVkazdFbklSUDB2dFh3eHZPMkRyTXZhcnhHSkVxNVhYTEwrTEY5Unh3ZWxJZGhOeDBiVEh0Sm9SUFJLVVRpbnlsWklFNEU5WG5hVVRRRGdveEIyTUFwQW5Ta05LNUo3dTRTdkJ0bk8vc21lLzN0MDBBdWJKL01IZlIrazhaRWNGeWdNQUJOQ1FmclEyRkl3RHRUc0IraDhjZzhNQkNJekRvU1lIQUpiQnR3YkUzWHNjNjkyL05PRFVyallsR2tnN0Y5SkFrVTdYSUtCWVc0TUQzcDdkejlITU1yc0NBckFyNzBJK2ZvYWMzVmVROExYNVJJSjJSajNNR3RWcllDVkcwdEE2S05Xd29kcmVPcFZhL25qWFU2eUhXSnhadXliSjZ1NmdVNGQ0dzE3YXpFSk1vVjhyNHdEK3lrcmtvRVo5MUZacTVITHg5aVhvQXc4K0hEQUlNMnBxV1hEd3pvZlhQTndic2cyZlIrOWs2eUtGZ0xzSEprWDhRcGZtalZjZFltRlNnTnhlcjJPWllnb0VEWktCOVgxbXNtUktFbmxySURRTlFQbEFVRFl1bFNmR1dNY3hlSWVmZXFNSTZ2QkMxYXh3NDk1dkliZndCV0h3eFZVdlVJeVdqdFR3VzFUZytjWlREYjE5amFycCtmVlZFZ3A1Zlg3czQwSzhOam5xcmpuMHRZMjFGZE1iN1lvcGlVMXhWV0tWUHlheHlLY2s1bFJOaUcyRWJSdmdVaWtvVGc5MVNYU2diQkpjYlMwd2E2UUJwaVJxbVUxSXBhb2tLaTVXTVpHTmlycEdTdUdVUkNaUXBUV3FoSytLZWFxSXF3bzU4UUthUDVYaDBkRldrYWx4Y0Z2WS9QVzNRcnI2dzlkYzEzYWxKbTI3cml2dDJsd1ZoVjVGSWxwa3Bhb0JFVlo1WVZheEVGWGFCTmEvdHBqZnhkWmV6dXR3K0RjK0lQL0ovNHl5NE56Z3JnYkl3WDBFR2JWQ1phV3dsclNTY2o2Ty9FMCtJQkZoMGQwaSs0NXYzN2RtTlpYSzlUWHdHdjhNZlBiZXRDeDZYTCtBcENsRFcvSGpOaUsrN3ZycTFTczQyMTI4YmJHL012aU1jNUdvNUpjM0ttZGRaMjhvN0VVN1ZyQ0dCUFo0TnRMODkvdGxYRjBiSVltTkl3QkJBUT09KSBmb3JtYXQoXFxcIndvZmYyXFxcIik7dW5pY29kZS1yYW5nZTp1KzAwPz8sdSswMTMxLHUrMDE1Mi0wMTUzLHUrMDJiYi0wMmJjLHUrMDJjNix1KzAyZGEsdSswMmRjLHUrMjAwMC0yMDZmLHUrMjA3NCx1KzIwYWMsdSsyMTIyLHUrMjE5MSx1KzIxOTMsdSsyMjEyLHUrMjIxNSx1K2ZlZmYsdStmZmZkfUBmb250LWZhY2V7Zm9udC1kaXNwbGF5OnN3YXA7Zm9udC1mYW1pbHk6UXVpY2tzYW5kO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjMwMDtzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24veC1mb250LXdvZmYyO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdNZ0FCQUFBQUFESTBBQkFBQUFBQWRYQUFBREhUQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHbHdibkZZY2h6QUdZRDlUVkVGVUhBQ0ZBQkVJQ29HcUlJR0dWZ3VFS0FBQk5nSWtBNGhNQkNBRmhVSUhJQXdIRzJwZ1JRZGkyRGdBYVBBWkZrV3djUUFGbSs4VFJka21uVWoyL3lsQm16R2hkZWhiWlNGMFI3dW83aGtaQ1pHVDZobnBvYlpUV3h5NmNPRGgwRWcvOW8wRlIrSEE4czNKMWIzdHc1OVhvemdjQ053alptdHR3Q1Z4WDRoTG9wRWtUYVJYdDBaSVkySXQ0amY5MlhzQ3ZNUkxVd2oyUW8wSWtoY3hLa1lxNWlRdGNmbmltcnBaMGpxSHRHbmdKYmwvdERxemlpcWRxd0F6b1EwVEx4ODZNenBYNXRJNVQvenY5Njk3NXI0QW9vc1JCREpmQmJta1dnc0l0b3FOYkcyWEo5Q2tlb2JIYmYzekJCbW9HQTFJNWFneEdPMUdUYW9ORUZUTTY3SXVvbjlGWHZ6ZitpdWl3UUVLL1cvYWhtaWJ6K1ZkRWJWVlI0WU4rUGQvamN6Q1RPN0xud1dnSXFGbDVRQWwyMVlCMnA1S0pGbEw2SmY3WmVCemZ1NGNGSjNxK0FPQzhRVjY2em9iV3dZaFd3RC9WNXNtdkVYb3pFbUVUV3Z0S0cyVFBHM2hXY3BRbTluUU92UjhKRklWZ1pCZDJtYkZjK0kxZllYdndOUWtaaXZxeVAwZTkzODZ5MWJhOWQzekJxR0xxd0FYM1hwemJUSDYrdGJYekdna0EydUpmUXllbGZXZUpTdmdDMEpGVUYxYXhOZFRVMkhUcFNqN2xKbC9uZW1xNys5dlNNay82SmFkR3NzcXJnR2VldG5hTlZQTDR6K2Q3cXgvc2d4bkYyVDVlZ0hTVVd5WDdBRERWTUt4b3h6MEJjaHVYeGkyQXNDYXRUUHl2Z09PTlRPYnJPU2NjR3VDUWx6aEViS0IvdnJ0ejFpckg4aHNabmE3OW5Jbmh5MHlSRUxDSnlMZ1dmODYvM0FnVERBQUFMcGpORWczSk5OUVpMaHNaTG95cEZ3MXBrNGRjdGhoNUtpanlBa25FTUlCUXArdUovaWxraGlwdUNQSGVnK0c5bHBGb1EvYSt4T0tjNkhGQXhCMnpycDNvekFYYWlCdXhWTThWbUNrV21WN3R0ODNVcWw2aTZ4d3lhc3dDcFY5K2N6VTVPZmpyTXJIL0IxYmRzU1pLN21TVy9hL3RDbXZLb0pFaWhZalZpS1BQcnltS1ZEa1AvOXJNTU1zY3kydzBGTExyTFBSRG50ZGN4MHpLek0vRTZpQXBDajZML2svYUtBM0EyOE95VnhhQzRPbFQ1YWR1UE1QV2ZaQjB2QmtSdG5jWUFHZGhTdVdibG8yNTFyVDllQ09DS0xnZmJZR2txQko2VlF5YTRLVEdJSFVnNWZocVJTWUVqTUhSeElISStsSjNGVHp0TjBwV2g3RERERlBwdG9wdU40NEovQUlrZzFTZU9wY2k5aFAwUlRRRWlXT3d6eE4wMFpIVStVcFMxR0Y4QllQRUQzQUJMRjFucUxGZkF0U0lkczR0WlFyRUpDejlUS3RaMlRNVVZoYXhIT0xXM2lZU3QwcG9FY1lnb1N4NDdWRHFjeWhrZ2tGUFlIZHZNU3g5VjkrdDc2TkxacURCMm05WVlobXRtdjR6MGw3MWFEWC9oY3pPd1F1eHE2azFsVUM3bm1udEcvUDNTenpLR1EvZndSVUQvY09NUWlESXBUZ2p4dnZiL1Bid0U5c2xBNmlqTElUeGJrR2xwMm1YaGZVMU81QS95SGVhYlJXSXpJZFdqV1oyVzA5OFMzTkpteElVeEQwSlMySVFxaDcvRExPVkZVWTlJLzA3MWRxSkZ5NGdOOVNOeVBzQXFrbEpHWFBhZmVNK3hiRjVxSVljL0lBQnhtbG00QmNCK29QT1J6MTlDTTJvdWgyb0d0RU5OMkFKRnJDVnpPNE5vRDNleFdTRUtHNHNqTUR0T1ZKU2dZTFYzb1NhTFllZTZPckU1OUpXdEk3WHE2Rk1OQjZwQmFEem1TRzd4OVAvbmNvQVFDMFlPNjVBVi84VnFSNXBDN08wS0pSU1RpWE1IZWFqenZxOGZENlRFYXRkU2VFZEN5SnlPUDdIUzBITnNjam40RVVIN0lWdjVCOU5jSHQ2UStReHI1TmdKbEVZcEJibDdpV0ZUZzJTdnN0TkxwazF3ZDBFT0IvSEtPUDUxb0FrS0hiazBjeGdhVVNtRWR6dnZSRVhmWG5VRXF4cUdnZHgvMXBVQm42eVNVYmlMOGJrSWxDcE9DMkhGL1kweDVxcHhUTDZMbWxVUGJGT0pNallRRGVZSkljWUFodEtWcWZyRktJbmdtak9JNWV4K1diU1VBckNHTndoSURpYUtQUVYxMmV6YWRBMDRDSEc4NUxZbWgyZ2lNRW9oZ3VGQ0U3V3QyUm5wWk9QMExBbXpqSk5KTWwxRnFRMndmYlVCSmI4K2dkZmlTR1NXMWdDMXRaMHo3UVZRZGRvVFN5c2pTZWJ6b2xmeW9oU3RnZ0JlZUxDSE9EZk15bzJCT1M4YTEyaGlkcjNZVWhSRFZYVEFJeEU2eHdtczBERWcxTVJGSEFHdEdaSkxFNkN0QlpsNUoyQTd1bFRQMjBNalFYdStGR2NSaGpDb1ZYdG93Wml0aGVBaWdibG5PWklSZ0RDZ1lLZWpqQlFvUTZoUmgyTElhckdXQjd6K1lpdEtBdXFFTUFsOVFESWdIYzlSc1lpVXpBTmdNc1pHTExvVWF4YWtrVnJmRG96SzIxMFpiSzA0WnBpNkNFQlZvc01PQUFVVmdRaXdWMkhNakJEdUtVZ0pPSWd5WGhFTW5zVUNsU2FhU3h3NlRyaU9tTVJWMjRXU0cvQXIxb2I4TE45TUZhZmJGb3FOcmNjQ055NGtpanFJd0JKbE53QkM4bVdWZ2xHK3RNWit2NTVPTVY0RWlGMktDSWJWU3NsRm9aTnBtRnc4MlhXc3dvQzU2S0QrcVVyb0l6S21udTRHQVplSlovRUFCTTRRV1FScEZxaG9WWUNRZlBkcE9oSEdhV3V4NGV1RmlIbnU0MDBwbzFON0NYVk1uZktqUjJZZEZpc2NXcUZxdUJkTnZBYTlkeTh0RVRQKzcxM0x3Y0RQeHZEZDBhdys5bmV5ZmdkL1kzOENFTDVzSmlXQW5yKzMzL3daS2NRbndLanJYaU1BQnBEdUNvYVVpa0dJU2hDQUVGeUVFVjVKZWxGY0hCcDlMbmUvZS9hN2JNRXc4S3BQNlpaVm1WUjhTNW9iQW1WWkpXT001eTBqOEJBQlFZUVRVbVF5YVpHRVQxeDlIRENVa01HMk0ySEVPaHVYNUhqVHVCcFNwQUt3aVhPbXNxQnFEQVh6UVVJd1orZk9CSHZnWmhZaFBHMy9qVnlJdkpPRGRCSUMwaks1c0tuTjc2cVV4c0k1Ump0QXBpdndjbWVBUUs5RllLR3NFU3RDUVFvZzc2RzRaZW1xVEpUQVJXMUQ4eUJWSVFCVk1JaGFadS9WSDdoU09CUkZLUm1qUWtTYmtnUUhvaXJZemhLRlhYN0xJSm9MQzVhYW5pMHhnV0xnUmdUZ2xrck9hMVdNSnduUTlYemxjZm1BRHNoUTRIOUVvZW55NVNvckhyV2c5dHMwcEk3di8zc0Vld0FhenJ1QytHQ1BDZnhya1Q5Q1lBOUM5YkE1QnhTS0szZHgwQVlJL2V5aXFtdEJ1QW8wdGNOdWJyODB3bDQrbTRNUGo5bUthV1AvRkoxdGx0UGRVek80Ry9oTDlXanBUTnNsVnVJeWZJNlhKWHVWaWVFd3F0NGRibWZqOEFDQ0p6U2ZkbjRwTW80M0tza1hXeXNRVnBqRDlTd20wRjlBUEF2d09BTngydXZjYjJDOXVBQzkrRUM4OTR6enFmR2FQN0tPYmhybk03ejIwQkFZQkVRSDhuZ043SzkzWjFldVZ6TlBxbjdUUEhJdk1jZGRWMWk2MnozbjlPbVdXVCtaYWFhWWtMempsdmdXdUloaVJRc0dhMG1vdGdZR1JpWmhFbFdxdzRkZzVPaVpJa1M1Rm1qZit0OVFBSG9rSjZiLzNnYmpMMTFrZGZPYlEzZ0JoNjZtdTlzdjYzVHVkVG9GQ1JZbVZXdVdlMVMvYWI2N0RqampqaHZwc1JjVXVOTFM3YjdIYlV1T3VpMy8wUkRsZmMwQkFldjZtMTFULys5cStGQkF4SGhTZFNDeEF1Uktnd2tWclEwUXNpYTgycXBiWmFPYU9OQkM3eEZLbGlUTk5lQnJlTzJ1bWdrNjU2NmE2SG5vWVlZS0JCUEVhYllLeHhKaG52cklueTVjaVZwOFJVcFd3bVIwMkVqVGJZYVpjZENBMi9FQUJvRFFCc1A5QnlRTDhGTVA4QThKOEROd2NBQURaMkZieUVoT01VTENXcW9waElpRkZHUDYvSlNiYm5uSmdVeFYxRHpMUUFoQ0pJdUViQm8zZ3lhU1VKUlNOZEVMSFNIdElNM0hIR3NTTnhmZXdFbmNmcjZjQ2dNV2w3amFhSjAwZXhRdFFSOWlpRzRDVXc4Z1NpSm5ud1NiMnJzQWlwUkVsbnhDWU1zNmNTeUkrZTJSeDZFcWIrQ3JHRUhtT29OQU9GcEpTeU5sQVRoSFROUG9COUhRT3J4NGo1WGt6T2c0UU9DV21jUGpSeFRDM1U4WVBvdVVVN1g3ek12cmtpV283ZEpzWm5RUUFFN25uMS90NWZaMlJFUW1vMHdlaXV2SmtMbGcrd1JPa3M1eFM4TThXTGxUb0V4S1JKdU41Wmx1YzlWeG1HcDNYb2hTRlpnNjAyaDBQcGZRamdISExkVTlkWUdaR1VqRjh4R1BhZnBDaU5CcTlWNmkwNlQwNFlZcDRvSzE0b2MzZWxyQ2lWRVlEYy9qL3lRU25QT3RhSm56SEJhYWhjQTBDZkFDcThTNzVadEFrMHBUbktOQXV1TVFXUWJGaXZ0blBVeG5NTFFPdTJmRW1OYjFacTU1SU1jNVFadG1wOFZ5bFIrRkJZb3lsWHBYN1ZCREFtZG1JdEhWMkZSd3hxM2Y0ekpveDR0M0taZnBzank4dS9WV2JVZzdaMVI5TWdwYmpKNHRtNFdBRE1RazQ1d0RTa1VSZ3R5RW13Mk1LUlRXREZaZE4vRkdhUmZaSGJhN09MWU8vdVQ0aUhCNHFNY3F0SDdLVnYwYnF3T1pGL3RlWStEUTRvSFVRWWhRNE9WUW9iVFdOMVM3REI4UFhjK3p1eDZPUTN4TzFGZG1FcUEvdnlpSzN0dWFIU1JhVzQwT1kwOFpWQVBUV01Yd0s0WkVPeEJoQzhmVHdhc0doeEtTdDd5UWxCb1Q1MG9yeCtrTnFvbUcrcUlNMTRUeVhWaFNJRDEwdUVJMkNjdUZPcTU0Q2NRdk56eC9wY2Y4R29kTlkvUzN4bWFWK3pKWnN3NzlpbGU5Ri9VOHJoUFZDNG1RbGNNRHJib0RZUzZDTmI0QUt3eHArUkVGVlMxVEk2VU1adzR3WVdRTlBRVzV0TlRuRlBkTmd3MEZNK2RxZ0hnODI2SjhzaVZpM3VuUTRUbHNpOWdiN0c0NW1XTG5kL0R6Ky9SbmE4UkxFZTU5bXFwcjdTaG9xdFZ3U0l2Zm1HZFYydjh5cHFqVTd2NWo2bnJQMTExcGdzaUx4TmplMVdIQjhiTWpwV0o4MWR0UzJwYW53VGd3bk4yMzNXcXc0YkRKU1pHbEJKVFNEbEhlTVlaWFp0TzlmdWxXTS9lMEROM1p6TkZiemYvZHMydVhJTEtneGRrd045V0VUWnU3bHM1cmt3d1JLd3lWdVYyRk0yZWFsZkdWYWgzTFUwcjUxdFdmTTVXRkhDSi9XTVlZVWpoV3krY0VvOGV5V0JNWEV6V0NWTGt5YllqajF2clZKZG5PUlhleHNyZ1VETHFiYWgyb2lEODU3RVNHTGF2dGtUTEpSZm1OV0U4ZWFHMjkwV201SXNYaTVUaDdXd2xPOGMzTFNuM2V1aTdXUjVIOHhEWTEyTENiQ3lFeFYrNng0ZjN0UXdVREdyM2h0bE9mQUc2MzE4eGtyem1zamJxd1l0RVZTVzh2UjlLTGVoWjdvSjNva2E1aldMVm45cFdxY3JtRDJWdkdPYUo4ZW4rS2lPZFVia1BYSlFmVzV4WmI3VzJSZUR0T0pUYTBOYk56d3RSSlBBWjlSdHFTYXgwcUdsTGs5Mmd2MURYNU9VUSsrM1k2dTBVSzNQUHlEUmM4ZUlsbWtTY0VacDB3UzJ3NndjSzMrS3FuSjM0eWVOYWJ2RjUvUnlEUjBqNzhIdzg1SG16R1ZPUzBXSWc5SkFlbGdPNDl3Tmt0STdoQTBXOWt3SnVqOUNFbDJHYUJMNXFrSlhKbWdzc1M2YWdOVnY3b29HaUFneGFsKzNxd1RYZlRpbHJDbWxWbG84WTBMTTJEL0FOaGZ1aVNKck5YVnNCeDBXdFBia1Zrdk5hSGxrd2dBMWNPUXRJeXlFVWcwT0hIbHpkOTFRVzNybDNXMC9zM2R3bmZZSzBnQ09XendQdElDSFZuTlg3ZUJnUm5SY0dRU3JqaXVjMXdud3FXVWwxNnZSWjlWaFhTZU1JUzBrZkpDNzI4a1BrL3IyREVkVFBJOTBHS0FKbXR1UmcwcGpIYUU1Uy9sbXk3SFFDWTNnQnFrYmJrcERpdDdLTVBwOUxrUVFTWi9QNUlxRHdSQ2VQUno3ZDM2ME9nYUZUanNlTjUvRE84bWE0bEN4bDUxV2NwTzhUbnlkdUZsbWZoZnpWbXQ2ZWNoOExlbThuK2dRS0tLaGd3MkVYK3AvRGVzaTlHQVJWZ0s5a1RsT0xUa1FJYXJYTWJKWnRhRUQwNmI1YmRJNGFKK0VUWCtBaVE1SmR0dWNRMVhhRHp2REZxMXNMYUpjM3R4S1EzdFFMZXlVcXlLV1ZRM0YvcTBkRmo4WUQ4azZ5ZGRWRmE1K1ZzK0RTRzZ1Qy9uTjljZW51RU5xbGpKLzRjb3QvbjdmK3BpWWVZVXBvK0ZaT2xGR3hSdlYxV3k0VkVQR0tMSnBYN0FCM3VDdExGMmJtV2FJQmlORjZoQjkyM0cvVDJtdWR0SUUxZno2NlRVdzNBYnJRcmFsd0VGaE8zWkxMWkpHeld6d3p3TGpEcyt6OG9aazg0Z093b0hVQUhBZ0x3OFhoMmFGTXI2NmpzNVNveGt0SllCZVRyUmpYNXpuQmtkbUk5TSsvMWhyY1lqWXRkWnJnYnJWVFI2YzA2bzNtdWFDa05aY2pyZlBzWGxpcGFqTkx3YXVmTDVFVlNLRUFIZ3pvN0VNeFlKVzAvb2lKeHVOdGtvMFdtVS9PNDROZFVXekl1c05rZFpmamRmU1ZvMng4T0RISDZMelRIdXoycHdPVC9PY0JFakoxUlVqUjhiODc1TklFQkJ1bTNCdHQ2ekVvZGIxaE1kb01ockdHcVhVNDJCMG03M2t5THVSb2E1OFJ4bkdpS3htSUh3dGdOU3V2a0FxdXZSMEtOSnd2MzRZZTRZOStwdlczNUUwdHNGRjFndXVqVExVMzVmcFU4RHdsQWZQbkc3SDAzelc4WDBkSm5tdkp6eVk0NXg4bGhENmcySkFURVI1bXgvckV0M21OenEzT2thVXdKdklmR3UrZnE1WGZCT0hqYWZ2UUQ2SW93aGhiOW5RYXhUNkpEZlNiOFZreHJtVlZucXU1clhJNVJxN1JIeU1KUmlOSm5PSHQ4a212YmdnellqZ25UbjRkeWV4Y1N6TzN2UXlEb0o5bFdJanVJc1JLUjhmYkFBWG16dnNsdk11YmJvdlRhbWM3SzJiUlVmMkgweVJqTHRKcWVUdXlBamU4WVFjSkpBMWRjZHR6dVZDZTAvRXJoWU5Jd3UwWU96RXRlYitTbE1LT1VRc0U5dXVadXZ1UVhXYlhwWGxDYnV2SkFSWFB5QW16RkdoSSt1T0dNQkg3RFBPMG9EVXcxTTc4QU4zaEo2RUIrcW8wWVJoSTU4YkJYQ0lVTElteWdoV1ZzYXlzSVNRQjU2aHFCMkhJcFh6T3pPOUVsRnNkeHVCT1gwaVBoU3hOUDllVmh5U1NJcDJFelhrYWJSN2ZmUXhrZWlURDRMMEZZQ0dHaU56TURkSWpYaGhkelhQemVRNnNIVXdEeWdkVXN3eCt1bUtpcTQ5bzVRcnk0RUpQY2h2WDMybUoxRVpQdkxySjZwY2FWdW1DM3BRcVh6ajJldlg0b3BVN3ZOdTJhK09WK2VyeHZJajJVYmw2QTNuUnNreGtXdzlmTkFlalZ3TUlFNVJIRVNvNXhyMXhOS3M3Y2NOOE53MzFNZi85dFJBS05ETEhEN2NMNjVtbWVwYW9oa25QZUxZbmNiK1pHQVZzM1FtZXM1eUJHdjR4YkpSN1J1V2pLSVd3UTZsZkN0RnRIQWUwV0NvbzFEQytTQjZKc2RucEVtUGdCMmdTUTZKVWk4VkZvSUJoVjNraENoZjAyWXhqOUp2ZWcvVEtxVHdnM2VIUE81c1ZrV0RZdkdDU2FCdXFJN25hQTlvTkI4NzJOZ291SVFia0VySGI4OEoyZE5qUzZKcERyVGZWN3JoOFdyeGtyOGNCM1poMTJLbk1tS3FIbzFwT2VuaHRGNDZhekU5TGE4N3VjUnYzSlIyeXlRN21JTmxmZG5Ham5VSmV0L0YxdWplK3FPNlN3NnZZU3A2RFJzaUdnSjVCY3hYVm8zUjVMVitZVjF1dXpodmlYRCthYjFaR05EeDJQeDRucmFtYWNidHFIS29jeXYzMGV6QjI4R3JralhlMCt4QWtCd2FUTXpMZFltRk85Ty9nMkdJZUhBU1ZOclR6NFV4ckk4VHhLampWSnFydDFYcmRJN0RNKzNEZStDUTFmVzUvVjNUWEhkZnhvckV3TVBUYnhyc1JhWXBubEtITXh4WkhzK0pjZk1iN1hHcFBCV21MZnVDUS9mU3pldjJQUmF1Q3o2QWxsL0I0RUNFdnRGbzlCckdFZFpwbklPSStMZ2duNUJicU93U2JqaS8xaHFCYTM0bjlmSjlBRDNVOGlidWFtR0dkM1cxTHVSbE5vaHpuTGt1aVBlRDFqM0NERHA1VFZOR0ErRmhkWG9hWUV5TVQwcVR4MlJud3BzOEl0QjlmSEozeWE1RmVnQ2xmUDByUmxsOWQ3Q1ozMzNqL2hnM0cyTXRhdk0xZkJVTkJyTjFUZUZXRjBvYzdpd0NvUXZLbWVTcGhCUmVIdHl3MHlpdzkwbjZ4cGdDWXlrbW9OS0dobWgwSVZaWThLQmtPMFcxcHFZSWk5TWlUVkc5NEoyamgrY3ZPUzBSc2VRSzVnVUQ4RUFxUDJDYXI5SWpWaHRWM3N3UFZOelRCM3Z3WUNraVdCVTdyNzNONDJCQW42TjFHOWZsOU5YL0Q1QStKM2s5UjZOVVcvTnlicVRyVnN6dzV6Zk9EOE5vMW90WXZYMlNnWU5YMTBEYzVZb1B1SkxVajY2ZFR0Y09sL1BFYllaUGhyaTMrTysvRTkrTjlqYmVhUXJPUTVnSjE3eDBDSjJtRG9ZWW9OQmxUTldOSHV6eGEvRHVmanJ3dnJHMG9nK1lZYkZDYjBUQkQvM283aXR6TjdkelhHb2R6N2ZKMzZ4c0RPa3lPU0E0NE44ckhQdi8rVE1hREZwSm40MzROODVNL21jcStDS29pZ2h5d2Rqa2xWelM5OEhnNlFHQkdWK2tTYWExSzBseVI1VGtEY0ROL1lKVHBSL3pmYnpTa2s1ZXZGN1J1ZEZZS0pxbUloRWlSRWlyMDdGRUJOYXo0RUt6NzgwQk4zcUs5ck9iKzRZbzE4ejc1OG5ja2dTNk8rUGdMSFprK3ZYZXI3SWJ1OEJxdHJiczFmMzNteDUySGV5Wkp4M29pRzgwWHpkYkE1Uy8rRUo3THhFZnMyZFB6NFlnYXNlaHdSUmFMS0xUa1lnUUpYa1BSYkFoMWpxWG1TcmR6dmdtZkUrMlRaL2ZtNGp0eStkaisvZkc4MGlSMjZuLzY1MWorYk9kRWVWM2VaTDc0UVVpc0liUnIzU0pGNVRvbld4amZpSUdlZDN4YWN1WFlJL1hDOVh0aFlBWWtEVVkzdDFFZ1ROT1JrZ0U4UTRVRFNnVVFjT0hFQXVnUEo2Rjl2VVpRSjRuTGRRci8rOVYrR2dhNHZzUXhDRE5YNzU5NXlOWHBNL2ZXeEFucDl3K0M2ak5JbjI1VTVvc3FRR3JHSFhwQk80TmpiY3U2eTVmY3ZKb2RySHducFdhRlhXRFZHRnFYZjNaV3VOejdGOWV2dHJ5akc1aGFUb0hQN1h2eGJXemEyaUZnTmxYcHVLY0h5SzZ0SEw1SmtpeFMrMWp1dW51d2xxRDM3L1cwRjNRVGNkSUxVVzBHTmczRmMya3A2TktpNWxBVG1lbW9Ba0lUNXJaeFh6M2ZkbXArUU5tRzZSRnh4M0c2eWVYaW9wWmtWemZsZFlyVGZUWnp4WTlnbzIrZ1lYbVlJaFMzY2t0NkVFUGV6WTIzWkhoakcwd1B1SHQxenN6N1lzZEdlUHVaWWxlTU1Jc0thMG1iVEZydWxNR3kzc21KZVJDc3BmOFB1elE0SElScWRhSVhMaEU4NjdZZ1lCZG50WGtjMzZiVS9QNHcva3BaVDhVOUYwTTBCMGhvRm5vTmEwdWNXd3hGaTUwczdUMTV3TjB3cVRaZkI3ckxWOHltaGJxYmNPRi9qYWRhdlVmTjJzaFowR1ExcGI0TjQya2RHbjBjVlREOTEvV015Y241ZXFJUlQvMStkRmtiMHZUMWdPSnVWdnJDSWYyMlV1S3BwOTM2U0ZXMHFsc3FGdW1KUFdPVEN6d1U3NFhzS0ErV0J4bnFETlZrQWZBcUkzaldxc2h5bjlITWE5OVN2WkJtR3cvS2NCMWVqUXlvUEZZNXN1L09FUEQ3MFR5V29RL2lmVlIzbDhxVFNBdXZUVVg0RjRTZVkwYU5GelFBaVZRRmczWkQ3Ry8zMEVLTi9wY0VzQUJTakJYWTlkaTc0cmxYcEpjNGRWNDhqYUlCckF5NHd6THdJRFZadSszV2dmc3UwTnBPY1l3dzN2WEhaUWNyUkMzTnRRc0xQR21FTVgxQThzSDMwWVp1Z0JZdWp4Q0x3N2UrNU5EVGRkUThlYkdCK1lnNWFYMEtwcXdJdXBTTHIzeUQ1Sm5GeFR2ZmFucDZPRzArMStkbUYzNklnR3N3OUJCY1A1M25mSFA3Tm4zUVpYcHN4TStLcHhETm4xK0FxV0I0a2RqYmlhWXZ2UHFQN1dRNEsvRGpEVVo3MTMvRGJGN0JHS1NLSjA4WCtMMVRSUnl4K1ZXNzJvT3ZBMTNBUXVyWHUwNDl0M045RktZRTRXM2M2RTk2YTAxeVlkdmk3NytEQlJYdzltUkMvN0xQR0psa0ErN1I3MjIxY0dRZmNXb3k2VUtjcmZ4QXZBZkJ5RDZjTmFjdGVxSENhZStwQ2xtTEd0R0JnbUNTUDdqQkhSMXRkMFg5NHUzNjFiRCtZbDJnWXM5OXRrb0ExdWM4NjRQZkJUaWNhcHFldmhxWEJmZTJiUGxpK1AxSGpNWkZhdTRCR3VWTUdsMjZJYUtEbEo0ejY5WFI5R3h4WEhzNTBXYkxiaThBMThSVGVFcmg1MVdaWlQxaFRURmdweDhXajdTUGlxVDZzazJPS0g4NXI0QzY0VXNES3pxbkJHWGZVVW9hRjg5Nm5VSm5rU3YrbUh2UklpS01CaFVRT256ekd2SDBxOSthc21ZOWFwcVpxd1djOGFHRE9NRU1sZ2VRcUJTaDBVYVFEMjJJN3NlZlRhcmtGZ0xObk9wQTBlSCtxd2Q2Zy9vZFgrVnlXdzBCMWExbS95TFBjNVZRWjl6MVpKTzhMWGI0WW9yYmQxL1dMbWU3VUVCN0JyMTJGY0ZnL1pWbzI2WElzQTlKdGlCS2RhemxveEZQMFFRd09KcFFVb0VqZ3c5M1ZzUTNwdDByQ0tOb2g2bkp5WFZHY093d2ZNYWRjWFErVVJ2SC81MzUrMDBlWTRFZzUvWkwrd2ZVeTFwR0pVa25aT2puYmpFbUhFWWh1d1kwcCt4bTR4Wk0xSzAydzFEV2NjOGJzaW5NdG1pWldOeXVDQlovdG5oSFlqei9nWk9xTHVzZ3dCelFWZHRQRlFYZVlEdkhsUnhjd3RzUjJJMWpSOVNLaWR2T2IycGs3RDAva2lLdU9YeDNwbUR3NUZBSFJibVhWbForYWxTeGUrNEhTdWRpeGZhL1BKWVk2RWVtbzBrdEpyNjhoNTJZY0dLdnNIOUQ3eDlGVjdMOVM3d2RLd0tCdVhtQlc3ZmJNdFowQklSekZsUGNiMW1ZOG50cHNYMllnQXVzMGNNMHF4UkxQV3QxMUt4dmZjanFyZ0M5YXJFM204SjdmZUpSY1FWSkFlczg0cjZ1L21nYlVucWR6L2cwQzJ1Sm9WN2trOS9LV0NWTG93VzVPUlM3bHZaMmovNnFDT2tldytmNTJJMnJ5cWp4NCtxMjUvLzF5VDl0RG8vbXkrU2xabHo5bHI4T2RkanVDSEdsZHJEQm5FR0V3bkpYQlhtZEo3WHErSkt0QlBtUFJlcGV3bVc5NFJPR1ZFWTlLNDgrcjhpRWhBem5UeGdWR2RFOU9LMEVYblNDRmR4dkY4YTRLVEMxTnk4WnEyNzdCTkxpRmNDSE1ENUhlaFl0Y2hEK2haNzhGV0JvQkFOK2toTHlteXlBSUdXY2xhN0xXODFsZ2ljQ1FkdGRpYThNUEFIZGtIeUhxRzNwSXVodWV2TS9iaXhnUHlzWmU0UndyNHM0TGN2SDNXNUJFOGdWLzZ3MStSd2VqTXpDUitKdjgvRzlFVzhReitRd2VJeFpLQ2pBK25YNGM2dG45WWFmVU5mbDhVK2MxV01kd3ZYQThkYTZaM1JSdURzWGFnQVZ2VDBaeDlRNnBrL3FzQ0tTQXo4MXpYdGZ0RmZFRE5Udy9uTWJoNlFXUlpUWTRLbjUvT0ZYZmZTQWovNzZiQkFkaVlvUkZwN2MyTXJ3WEJUWnQ1cEQxc20yR0lWY0Vmd3RwMjBhZGYyaVpVWEkzd0RXbENBVlpJNVZMZjY2bU13R1lBeHpDdmxpR28rN3ZpTDE5WWo0SUt6MDdab3NNUFcvUHFmMC9ySXpwK21QL083Snh4SDBMelRaOHpHdEdzTzNFSVQ1eDZWVHJYVytMOWxnZTlVTUxQNVpiZkN2T1lsR25PaWVCcEVuUlNCeE4rL2VCTmYwamJ0d0VFNkJhb3pWeFY0cVdPTFE3KzZpa2ZkRytCS3d1eEN5SStyMmIrZzJOTXRrWDdSN2NmVkRLV2kvZ0NFa0QxYzFLeThzTFhodmdlT1B2aDRxSlo2RThHcjdOVGJFRlBjMnZEc1cyVzhtbGp0RnA2Y0NaV29zcnlSSEszUTlEdlI4OG0yOU5rVm5YdXJpUUlPaVNzYURwK3YyMU00ZmxVY0x6WWV2QkFDOXIrTVZxTnZvRFJDZ1ZGamN5Z05YSzdDeFlGamIvbG8wN1Z2WlF0bDBtem4vT3R2K2RKMTFkdHJ3SGsxVUE2dGRDd2VzM2swblUyTFN4c3g3Tk1TUFpldHNtYU11a0pIb1BYZENSOUg2b3pveEdtcjJXWXlKWkxPWkZBZGd3Mms5QkN6M1g2OTNPTHlHVHN5M3ErZWVKSnNlOTJ5YUlnNjcxL2Y4ZWduNFBBTXhRSzJYdzBMdmZkSjlCN2MrUWRTVFBTdmxDclo0TGgvMmhxbTd0YmFYRGJ6QWxodWRTRW83QWV1V21xcHp5MVhLVjF5MVZCcnBLUkxxVlM1bFpxZU45cTlCc1RtTlVvUU1XUk5JSUdHSTBYa3lzRVNjZ1ZabzdIaFlyQTBhQWxTb3dvOEZWZnV5K1hGbW9yaE9FRW9uOHU1eHNGNVlJdzVjaW9ub01JRmgyMVhSMHNIaXV1bUR0SmZ3K25uNWhTVkZXTCtWOVJVM0ZZeUlGSnZTR3cycE5VeWlnWDhLdWNEbWphT08zQnZuMDZYc1FoYmZPYVVkUGJudVNEV21qSWtrNTJUWVYxYU5JM2hsa2hXcktFWlBpd0RHcnlQY1BiNy9JeGx6N2FwSGtUaC9ZV3ZmbXNzRjZTNGtoYnZEM3FKa1FVV1hCWG5maUNVVWtpSmpRSmw4TFh0RThxZEk2akZiZEYySjdtdTI3eVhsNDN6OTdDOWcxU04yV3dFbytERGtPYlBlbHBFSFhrZDBtM0ROSWt1alZOS05GOVRJZXpmMXF4cHBkQ0ltaGY4TnduYXJ2NFAvVk9NTS8zd1FjdzY0RElKdTNCbmp4RHdJRFVqTjNuYU1tb2plem02UEREY0Z4K09sOE81UXV3MThHUW00QzhhNWgvUlN6NlBjRlc2Z0JURjJUR1Z4VlFxT25HWklhS0dZeWFkT0JVd1dod3BGTTRZMU1wWUFnSFhxL0J0ZU8rYUtiY0dJVVdnTUtLeU5TUjZOaDl1dWdZczdDQ3FIQ3owd3FncDNZZlliSG5FbEVaaGdXZkpQNTQzZmQrT1M0MUlNcXN6R2pNNkpHbVV2dmc5dEh5RWd2Q0laVEszV0VIQVJDTG1jaWRpUjhUQjNpUUJxejFCcVJxV0ovREFSRThTMUovVTRJeEwwRVdCZ2I2SStRTHg1eGVQeHJkVjVTZnJaK0YyR0Vqc1VaWFZOSGdhRE1kTldrc1FOWi9IQUtjTkdtVTBudkVFQkkrek9tRTFpeHhYUG00bTFiQkpIVCtrVkhrd284cFhFQWthc1p3VFdDMkFGZlJWWXcwL1VZNHRMcTFZcUxTalp5dWFSNmo1d0piNEFtK3lUM0dXVlh1YzNZZ05VODNnYmJsYzhKS3NmVWpRMEw1ajNwVUZjWElHY29BVjBDN3crYjVxUmlKV3hCRXJrbjhadVhleVdBb1dmZW1sQXhkcHZMZHcvcmhxWGJ2YXNFWFk4c0MxaGZ5S2NwQjhiN2xieVAxWEFlNFdzY0x6eFVOYmQzWDIxTlkzUEVGendYdUx0dDVSZjVpS1BTV1FJanNJdnIvVnJZYncvT0M3Q0w4dk0vQlRISFo1NVlhSk1wRE90N1J0YXRwWk9kdzJuMTVEaCt0TGpTOEFmdVhqUFJ6ZXViOVFCelZ2ZHJZSmhRRVVIMm1rdjB5NDk4Qkd3bmZ2aWp0b0ZiVTNTZHEyWC9kMFMzdEx5elNMOTFOejgyT2dCUGdzYXUreWdUK3RPQWc1MUhDZlhkR2Z5bkdxRVJUdmE4QTJxUEw3UGEyTjNMcy9uWmRBSzk5eTZDazI1NjVETFczVXhMSlJZKzJ0OS94dXZyUFowdHBTV2I2dDByZlYwclNQMDlIV3VxNjFkYnkxVFF1aUVyeE1wSmZjcHJkREZUVVBWYk5GTnp0WWFqMWwrZFc4bjVwYlh1UTBxMXVhRDRNbm9GQ2kzOTBudWhqZjl5RFl2eHl5STNTYUYxMFh4MHJsSml3NjNhM2tVNnAxSzJkd2t2eXhXeHlyMWM4VE9rRk9YV0tLcWozYml2SUVYMkhHYmJwQVl1WERqcXBEMXNFK24xWnRuY1JKcm1tZ2NuaVZET3V3dlBXU0N1eXdubjlhWTdVdjAxRE42eERUdDFxbFE5ZTdoVXRiaE1LV3BjSkVCU0ZiOWVVWVhBSkg1bnEwa3ZzaERtMUZyV1czOG83QjI5Qmx6ODU5V3lQUEExK2Jqd2FwK1B4a2h0ZDFJS0l3OWZ6bHlrN1YyazVNbm11VlhzbXR0VU56ckgzeHR0WUg2SnFqT0tLMlErZW12MTc1UHFRMzhUKzltNlM3eWZVOHE4RCtCeGhUUmVIQ3ZqVG5Xa0FNOTFKWTJRa2I1QUdQUXFXSnFBNzZubHcrdy9lOU9ZQmlwaTRkMmt0SWVPUk92MUJGY1crYWdDaEEzZXNsRVhVR2JjSUdBUlRjNG5oVDExQlo2NlhYelRGTEZOeVpJVDVNTFcrcnlCbW9kVzJWckVYRFJNWnFSRC8ycXlNTDcyWGdRcEdFTGZOb3o3MGd2bzdCa0J6eFdwNmVoQVZhY25wZXRYa042eEpHZGdpSnlocEpoN2FDTUlnRE1jcFJUOHFpYUx2TDdHYU5VK1puNHVpbHJnYTNZb00raUtzSEhxajlHdTRuZ3JwRkhvV3J2bEZRUHNQY3B4bGpxT0xzdmRtbWpicmVtc0hyYTkrdVNzR0Qrb1Z1cGJzT2I3RnhaWVU2c3F4UmJkeDBuV094a2traXVzNHZudy9LMFdDSlI1dUk3NVhYVDMxNEJzKzlEVG5CeGJ5Um1ORzV3dzVCZ1dQVUpoblpzbDJXVzNONSszVXJkaVUwTGlxeElDOWZKaHVmTmwrV1RKcXUwTGNTa2t4WDR6RkFlNVJXUkxWY1BqNVRNMU5GUnRQNWJiZmtjL1liTk5VSWlMbnBUQkxUc3JzcGdDTVp4Mm5GYWtNdkp1Y29pandhVU1hS2VMN1FRdWVqNktPMjNKRmxRSXRVdWpZek8vU1l1RTA3ZmJ2SVJORzhNbmNwbzVkM2w1bEswaklqbWR1NDlZOWJYNm8yNllsWmM3UGZIZjkwdk1kbUhsd1pRVHlIRE5YMUdsNWsxajdjUDQvNU1ORXA0MFFKelRNM0dMaXYwSnJmQlI0dUFmZjBxQkJNVzBLVTRWbXEyT01xY0xNZFREZXZhUGlDbWJZNHdZeVZMMWdaTm5WUnNqNEhMcGFBdWVhbnE0TGNDcGxYcFJLaWt5bVU2WWFjNGV1K0VJbysxL041K3M5RndpOTBRUDJOcmdDS0dwVERMREtXTGFSVzZrYlBhbU4zRVptS1JJUVF5ZFVlYkVTMCtYR3FkcWhiZ01TbTR1SDloYjd3QWFxT0lWMkM0S1BVdm1JRUwxQVBmQTM0SzVsbWl4VjM2RzgwS0xzYlVvMUNudXJDeUJSRjdrY0ZTKzlFc1lYL3pRZmY4Qi9iZmRQa3l6c3BNSTRxanBuc1hyckFvNy8xcWRmblMwVE0zQWFTMlVUdlI4ZUxWdUxlanV3TGxIZGJ3blVXWFpGVm1veGhuYUxMampDYk5maVoyUUpKTGdpSzI4cU91a3lseXhaeWV1SlAzQy9wSWJRNlRGMnVoWGdhY0taV0Zidmd6M0d2d2g1Z2FHZHRJQ0haZEFQd1BhQ3pJdWphZTFmTWRPRjkyZDRRd1dIdk9YMkxLREpsajJpNk5qZm9ocXNnaEZ1dUc5aEtyYVhOMG9oVjBFT2tHYUxMTHpPTXZ1aFhFOHZVNWRib2NzWm9ETWxNSVROeStUV2kwSktJTDVEVSswL3BkMGYwUTRtNkNYV3A4TUhRSStWOW5obmN3U0RLTWNvUS9jaHpWNzliS2MrL3Z2ZzUvU0Z3Tzc5MDdQRDV1L2RVeXZldjlEMmpYMFpaZEFlU1JpL3ZmNnE4M1dPekp4aVlXaGpLSDlwNkRtS1VkdHczNWY0U3hxdGJIN29qU2NXSEZyblcrRDdsWW0xTmsrSG1heXJ3ZFBSQ3ZmWW04TXNsanhvZkVjMk11RFgzMncvTU0raWx1dnpyRFp3VGNlbHR1cDl1aHQwR2w0OGQrUW5IVzA1VXNqelhhL25uMmJOczgzVDlFSFpvdThudDQ4c0ZPUHMxNzg5M0NiWGIyc05MV1RHTmpwVTRBTU9UckxoV3k0NVBYcXVWUnF4T1ZRVFdTR05XaHlyOHlCNTQ4b0pXWUFQWlhjRGh6Y0tPOTMrOEIrTzVSOHhLcU41Y21veWtGQ28xcmhZRllLMm9oR2V6UnRRVmpHNnA4am5BT2xVcGorUHFiY1MvbmxJQ05XUTRDN0JFY1AxT2I5L1luYzZ0YTRJM0xuSklWa2I3Tm1IZFdLajJ3cjlaektUaTc1c1hLMU5EZTV4ZFk0b3B6OHJFL1FlbkgvY3NXWFlxRmRtYmNRalgyQWZpdHBCRUdwRzdmUEl1dmZDckt4VmF2OVlRWW1Xa2pnNDNxQUxUZkpkdHpLb1V4bnhFLzNmUk9tL1JqS2k3dXpBbk9hZ2dTRm5YbnBicklIQzJMTmVXb3ZGbDJwWnFyZ24vNUtMa3NqRWlJTU5pL0loRW8vUkZaWmcvYXhZREtTL1lKVXpyVTd0Z2g5dURtN2p0cENGSVdiODkyeDJJMnlxeU1TcmVicjlJcTJQV3NKMk1YcndyTlNJaDNRQTVBMi9aVUlLMDFmYnd2bVlFRjhxR3FwQmlMR1hxWFM4ZXV3WmlMSTdWOXFhUExoajIwVUpQOTJxVkY2VjR2VVFkWXMzOGw5QlZnU25jWU9HN1pWa3RpdHJmZnZ0QjJiN1FKK0tHbW5OZXZKVWpXZXZoaUJDdlVpR05QZHlHZUFYTHQwSjRmcENjMkdrRjk5WFRVa0c0Vi90cXBLWEg5ZW1wQnhWbnYydURYWHBmRThtc21tTldsT01ZMkYrd3lWRE1HU2RDWWVQbVltNlRvZE95Q3puVDVuRElORkhRSWlYNFluVTZvVjNxOVVnd25jeWxPR2FTWm8rWFNhUW1WanV6QmszR2FLUVhSeFp4dWcxSnZzLzB3MkQ0ZjF2eHlVUWVHQlo1dlRJRCs0ZGM4c2Q0VCszUXZsZkFYQithSTcrVXpjN3pGQStMT1p4ZjVLQzhRbTF2Zjh4SUFkQm9VemwxTktQK1JIZEY0ZmlwNWxjYW1uWTNkMVMxdjFiL3RXUElZaThSaEwyazVRNW5hVUdnOFRvYTEyaVRtRm1iVUEwVVRXaDBDVE9tUytwaWdIY2xwRGh4OEdhb3ZTV2pMWFFyMFZJRW9oL3oxS1VUdG4zWGVPZzc5REMrNUNTVTZScmRQZW1UWC8xc2lkdjZENWdWYVZac0pUUG5VenNsVjZ2RlV2WFZFdW5WSElsRWM3VlhacE5MYmJLdk1iQnNiNi9rczMrTG9lWFRWOUlRc2dNTjlsMGIyZ0pablBOcE9NN3V2WjR1V2JZZDU5UlRPVHczSkdYcG52cXFoYlgrRzBES1ZDdGdFbDFVTFJQZjNlcmdrTjlQRjY0RUVIV1pSdDNFMjYyMWZQU0hhait4U0wySGhsendkVDJ6cXZoL3daZHNDRWpObzRvdUlMZDdJY2UxYlJId2ZwVldCWmhqZlppWlRBdEZOVk1MZzZnV01oaHFtV2hLMFIzRXBvS3R4eXVXelMxcTVtcnBPd3E4ZVZ5M0MvRlJlUk1JSEtlWktFSStlWWl1b21sMkNQb01Galg2cThCbHYwY0UzVnVvUWs4SzV5ZU1wZE5ISUlrczN4aExDU1hsZkU4cXYzeCtqdzlRWXBoUzR6TEhOZjN6dHJFbU1KMDRHMDEyVXNQWDUrdHF1a1hiVjJoS2JVa1JUSTZjK0R4RGZsTWh4b3NDSWMvemdKaEhGVXRkanlsdldDa3B1TDQyZFdEZnBPbHVhcWxaMWhOQnROc0xmQkdScVVKbUlTdjlaNEZFZWt2Z2pXdHNiR3I4UWU1Mkk3aTlKZmdSWGdPUXZWN2JKTmF0K090dFkvUXd5a3VOd0g0akMxYjVaVXZacDcrdXEyRmt1cnM0bWdPaGRyVy9kOWpnVFE2N3BnS0RyOGhtL2s3bzlvN3M1MDZ5MkNlZVkzUHVPOEZtbmJ6dmJ0WVBMYTMvVy9yWkZKWjdHZ0lNMzY3WHdQWWpnTXByL0VNZzRYb0RtNUd1bDFnSHM3L0NJU2FiM3p1Z2swNE1hQTBJVkVVdnJtM3VwV0RSOERjS2hsdFFNRnlOZ2lFVEkvZ25lNjJrVGQ2YzJkYms1V0hEcng3WkpJc3FjS1l2U3VKUmxJYWlvQnRGd1Rzb0N2NlVvZ1RBZGNnSkxjZ0p6eUluUElLYzhLR1VvaTkwd2ZTYVJ1d0FvbytvcWJxUjJ1Y1JwZzQvY2ozQlRKajlLZVp4NEdmam1tQVg1VG1XWUNsVE1OeW16d1FseFdtRFI5VisvaU9jSlBaZm1CNkhsK0FHalkwbzR0UnQxdmNIdTRiRmFuMnl6K0FiUmpOYjhvMVNUamRHR3FOT3hYNFNJVFZweUNQWEk4eWhpVDNCQWlZZTN6SVYrS2hrNWlSQ1BtalQrM1NsZXArdUJ2bmc1REdMUWZFWEE4RUE5bmJyblhvQXNYd3hlNyt1SXRBSWZvMzY4VWczUW1CcSt3am9iZlF4K2dSOWlqNURuNk12d0pmZ1Bla3JVdndhcVNLK1ZkN0Q3K0QzekE4ZTJ2aDJJekQ5dGVueFZENkpDNDUxMnh0OGxqNUhmVDlQZnhwK29zNEh0QVZkd1l6S25LcStRc3p4ZXhvM3JHd0xjcmQyVmRRUU4xbVh4MVBjd0MxdTRzUGJ6Qk5FTHYyTGFMRGRVdFAyb2JReEs4YXpIb080VzNpRDNUNDlmV2VVMmVmUjNmNy95TEZZWm1EUVh2YzlLOWxhZ1VVQU1lTGVmeGFzQWpDSGZWZ0FaQjZJZFlzNTBYdTEzYnFMRjliMjRJOVpEMnNEYmkxNC96OGd5MWl4bHRqZ3ZPVUI1TG9BZ0JYWXphbEpnc2FNclIxdFhZZFJSbEdIOVJRZHNFKzZ4bVJnOHlJZW84b3hSdU1RQlNvUHVNT01ZTUxkczR4R0NKK0gyU01pNWFidXMvd0NWWTV0TkEwWG0weTl4R00wSnRBT3ExcGdLMEJkS0FmN0RLR3YwTWZveTlGL1pHbGFsTnZsd25sQ2NoZ3RSTDlsVzZBcjRLTitvU2RnSXhYcElKeUYyN2dPMk8vTkFsaDFWWGVOT3lQZDkvM1NJS0EvVkNrMzlZNEVQWWl1SGVNQkhKcFdrbTNRZUpFTFBFWUwwVzlnZ1pLYTl6R0h6djhiSTdESGUvNFliaGZlMkU5aW9POUpNMzIzYnVic1NrUXZpTXcrbjNRTkpVZTh0T3Ryenk1djJFYTY3QTJ4VlpUczR1OHkxampudTUzTkMza0ViaUUvWmpzaXVsT2oyMFE2OFU2WUVpbXR4a3V1QzN2TDhZWkxvMnNGRWFkUXh1dkc5bEUwZXQ2K2xrKzdNUUhvTjBQWWxzYVhiK3ZhTjN0cjF5NDJkVm1rZlNiVjV4aTNCYlYxdTExTTl3RDBsT3pMWG5ZQ1I5MHQ0d3Qrcml1b0tBMTl5dXdEMnBMQUp3UTdaM3krY0luaThrZzYxOG5VU0FUMk82VksvM1dCSWExaFQyZXc3RW9GU3JhTUlqK1RXRTArOTRyYUhBSndFVDkrWjdwbFhFanEzeERIM1FEZzVJR08rNUw4TDIrSi8raXd6eFBNeGdFaUJnQUkvaXlab0hBbU1QMC9lRTVrOXk2aU5lMWs2dzdXejR1Y3JxVHB4eVozQmVVSnYyUnlwM1hGVFBZZHlMN0pJd1I0Umtqek43YXpYaTJDSU1FMHBUWG9kWmM3SVNqZCtyTDRGSHhHRXkzQVJIVUF4MVYvTFp2aWpsOHdXVjJtMWZTQ2Yrc3djMFcwNk9xYTVtNlNLenl0Um5oUVZhZ002TWNoUmdrSk1YWUU4WWhCOXVtS29vVHBHUnFOa0s0Zng0T1crdSs0Q3JjR1lyZ1RaNXZtRzlUVWp0Zm5pcVlaVVdUNlVnMGVFM2hraVVHNW5CcGdqRjE0RFhibytEUVJiZnBWMTN6TXBsSUpDdWMrVkxKeEdnYXp4RndXSTNaTG5qNjVYNTAweEIwM29aME1MNGFTUDZHdlFYS2J1UE1yVXF2bWFRaDNVR1pyUlVaTmlZbzl0WFRSVTd4R2xkU3lwWTQ1YkFyTFVMTXp0QWI2NWltZElPYVJEWXBJVUY1QnNJbzdLUTYvVXpTd3RJMlNlZFMxazdRb0lYUFNjMEdURjR1eldoeEx4dndOeEY3aDlyMTJMTFlYSWQ5RkQ1c3JPL1MzMmJLZVd6WlBKcVgvQU0zUWgxcHVmU3Q3NmppUXZZRWwxbU0wZU03VE1rd0FBM3Q5U0RtNzZaYVhLTFo1NjV2cE8waXh2ZlF5Q0kyajVCT2hWL2syUGlWM3NSdDRLcUZsL21EdURuVXo2bTdWdjc4UlBiM0kxalBNWFZDcVZZaWYrRVRGSG5XM3JjaE1iNTFlMXV1VnB6TDBsZ0dUSUFVTWFSVUZjS0FEc0lFRTBRSVptS2Z5RFVsRlpZY28yYTYvNDNRRENhWHNrY01HT0syczVLRnpxUHlpN3NqZko5UzhOVm9qajhvWDFNanV5ZkVFUUlDUGNXaW1BV2dqTEJ3a0pxME9KamlkSFp6MmlZM09aenNFa2RuckVObHluU05ZWWw1eWhES1hZZzhqMWJxVENBaHNuQzd5NUt0UUtKdFhsbUl5aFV1OE5MTEJCWml5dVFPVXlEYkpkRVVteURXWnJMOUNlYWFaWWhJSDdVUzB1SlhtZWJUSWlqWkJjckY4MDI4Nkp5ZXY3RXkxeEVRT3FzbVR3N25LdGRBVVplenlUZURsa3kzWEJHVVo0M0xLcGg3UUhLN3hxZUFRZXZ0b2NXUmxFdEpsQTAxUlpNcFJLVFZGWGVycHhWeEZ4YjY4bkY3anNxN0diZFUyMEJ1ZUlWSk93c2ZGcTRUUEJJVVNPTGk0Sk1yUVZ6OTlkWk1oYVBDNFdUc1l5Z0VuWnFzNG1yd1lLZHhldVBsWUtUTEpxRFMvVjRvNGhDbytEdk5RYi9RSSt2SG9yZWZnTVRQTW00WTV1MDc1UDZKSVhoSC9lMS95bndFQSkgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpO3VuaWNvZGUtcmFuZ2U6dSswMD8/LHUrMDEzMSx1KzAxNTItMDE1Myx1KzAyYmItMDJiYyx1KzAyYzYsdSswMmRhLHUrMDJkYyx1KzIwMDAtMjA2Zix1KzIwNzQsdSsyMGFjLHUrMjEyMix1KzIxOTEsdSsyMTkzLHUrMjIxMix1KzIyMTUsdStmZWZmLHUrZmZmZH1ib2R5LGh0bWx7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNH1odG1se2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1wYXJhZ3JhcGgscHtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS42O3RleHQtYWxpZ246anVzdGlmeX0ubW9uc3Rlci1oMSxoMXtmb250LXNpemU6M3JlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xNTttYXJnaW46NHJlbSAwIDEuNXJlbX0ubW9uc3Rlci1oMixoMntmb250LXNpemU6Mi41cmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjI7bWFyZ2luOjRyZW0gMCAxLjVyZW19Lm1vbnN0ZXItaDMsaDN7Zm9udC1zaXplOjJyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMjU7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfS5tb25zdGVyLWg0LGg0e2ZvbnQtc2l6ZToxLjVyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMzttYXJnaW46NHJlbSAwIDEuMjVyZW19Lm1vbnN0ZXItaDUsaDV7Zm9udC1zaXplOjEuNHJlbTtmb250LXdlaWdodDpib2xkZXI7bGluZS1oZWlnaHQ6MS4zO21hcmdpbjo0cmVtIDAgMS4yNXJlbX0ubW9uc3Rlci1oNixoNntmb250LXNpemU6MS4zcmVtO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxLjM7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfXAraDF7bWFyZ2luLXRvcDozLjc1cmVtfXAraDJ7bWFyZ2luLXRvcDozcmVtfXAraDN7bWFyZ2luLXRvcDoyLjI1cmVtfXAraDR7bWFyZ2luLXRvcDoxLjVyZW19cCtoNXttYXJnaW4tdG9wOi43NXJlbX1kaXYraDEsZGl2K2gyLGRpditoMyxkaXYraDQsZGl2K2g1LGRpditoNixwK2g2e21hcmdpbi10b3A6MH0uZGVjb3tiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTEpIDAsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0yKSA1MCUsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0zKSAxMDAlKTstd2Via2l0LWJhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtc2l6ZTpjb3Zlcjtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKTt0ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnR9OjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfTo6c2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9a2Jke2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2JvcmRlci1yYWRpdXM6MTByZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7cGFkZGluZzouMjVlbSAuNmVtO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH1kZXRhaWxze21hcmdpbi1ib3R0b206MXJlbX1zdW1tYXJ5e2N1cnNvcjpwb2ludGVyO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczpcXFwidG51bVxcXCI7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4xZW07cGFkZGluZzouNnJlbSAxcmVtfWRldGFpbHNbb3Blbl17cGFkZGluZzouNnJlbSAxcmVtIC43NXJlbX1kZXRhaWxzW29wZW5dIHN1bW1hcnl7bWFyZ2luLWJvdHRvbTouNXJlbTtwYWRkaW5nOjB9Lm1vbnN0ZXItbm8tdXNlci1zZWxlY3R7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfUBrZXlmcmFtZXMgZGV0YWlscy1zaG93ezAle29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtLjVlbSl9fWRldGFpbHNbb3Blbl0+Om5vdChzdW1tYXJ5KXthbmltYXRpb246ZGV0YWlscy1zaG93IC4xNXMgZWFzZS1pbi1vdXR9ZGV0YWlsc1tvcGVuXT46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9Lm1vbm9zcGFjZXtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5LW1vbm9zcGFjZSl9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjpyZWxhdGl2ZX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gYnV0dG9ue3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWJ1dHRvbl17d2lkdGg6LW1vei1tYXgtY29udGVudDt3aWR0aDptYXgtY29udGVudH1kaXZbZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17aGVpZ2h0OjEwMCV9IFxufWAsXG5cdFx0MCxcblx0KTtcbn0gY2F0Y2ggKGUpIHtcblx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0ZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKSxcblx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdGUgKyBcIlwiLFxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtcblx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0QVRUUklCVVRFX1JPTEUsXG59IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnQgfSBmcm9tIFwiLi4vLi4vZG9tL3V0aWwubWpzXCI7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgRGVhZE1hbnNTd2l0Y2ggfSBmcm9tIFwiLi4vLi4vdXRpbC9kZWFkbWFuc3N3aXRjaC5tanNcIjtcbmltcG9ydCB7IFBvcHBlciB9IGZyb20gXCIuL3BvcHBlci5tanNcIjtcbmltcG9ydCB7IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSyB9IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IFBvcHBlckJ1dHRvblN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L3BvcHBlci1idXR0b24ubWpzXCI7XG5pbXBvcnQgeyBwb3NpdGlvblBvcHBlciB9IGZyb20gXCIuL3V0aWwvZmxvYXRpbmctdWkubWpzXCI7XG5pbXBvcnQgXCIuL2J1dHRvbi5tanNcIjtcblxuZXhwb3J0IHsgUG9wcGVyQnV0dG9uIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHRpbWVyQ2FsbGJhY2tTeW1ib2wgPSBTeW1ib2woXCJ0aW1lckNhbGxiYWNrXCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHJlc2l6ZU9ic2VydmVyU3ltYm9sID0gU3ltYm9sKFwicmVzaXplT2JzZXJ2ZXJcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgY2xvc2VFdmVudEhhbmRsZXIgPSBTeW1ib2woXCJjbG9zZUV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgY29udHJvbEVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJjb250cm9sRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgYnV0dG9uRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImJ1dHRvbkVsZW1lbnRcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcG9wcGVyRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcInBvcHBlckVsZW1lbnRcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgYXJyb3dFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiYXJyb3dFbGVtZW50XCIpO1xuXG4vKipcbiAqIFRoaXMgYWN0aW9uIGNhbGxiYWNrIGV4ZWN1dGVzIHRoZSBhY3Rpb25zIHdoZW4gYSBidXR0b24gaXMgY2xpY2tlZC5cbiAqXG4gKiBAY2FsbGJhY2sgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1+ZXhhbXBsZUFjdGlvbkNhbGxiYWNrXG4gKiBAcGFyYW0ge0V2ZW50fSBlIEV2ZW50XG4gKiBAdGhpcyB7Q3VzdG9tQ29udHJvbH1cbiAqL1xuXG4vKipcbiAqIFRoZSBQb3BwZXJCdXR0b24gaXMgYSBidXR0b24gdGhhdCBvcGVucyBhIHBvcHBlciBlbGVtZW50LlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWFnZXMvcG9wcGVyLWJ1dHRvbi5wbmdcIj5cbiAqXG4gKiBEZXBlbmRlbmNpZXM6IHRoZSBzeXN0ZW0gdXNlcyBmdW5jdGlvbnMgb2YgdGhlIFttb25zdGVyanNdKGh0dHBzOi8vbW9uc3RlcmpzLm9yZy8pIGxpYnJhcnlcbiAqIGFzIHdlbGwgYXMgW3Bvb3BlcmpzXShodHRwczovL3BvcHBlci5qcy5vcmcvZG9jcy92Mi8pLlxuICpcbiAqIFlvdSBjYW4gY3JlYXRlIHRoaXMgY29udHJvbCBlaXRoZXIgYnkgc3BlY2lmeWluZyB0aGUgSFRNTCB0YWcgPG1vbnN0ZXItcG9wcGVyLWJ1dHRvbiAvPmAgZGlyZWN0bHkgaW4gdGhlIEhUTUwgb3IgdXNpbmdcbiAqIEphdmFzY3JpcHQgdmlhIHRoZSBgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1wb3BwZXItYnV0dG9uJyk7YCBtZXRob2QuXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItcG9wcGVyLWJ1dHRvbj48L21vbnN0ZXItcG9wcGVyLWJ1dHRvbj5cbiAqIGBgYFxuICpcbiAqIE9yIHlvdSBjYW4gY3JlYXRlIHRoaXMgQ3VzdG9tQ29udHJvbCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0OlxuICpcbiAqIGBgYGpzXG4gKiBpbXBvcnQge1BvcHBlckJ1dHRvbn0gZnJvbSAnQHNjaHVrYWkvY29tcG9uZW50LWZvcm0vc291cmNlL3BvcHBlci1idXR0b24uanMnO1xuICogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1wb3BwZXItYnV0dG9uJyk7XG4gKiBgYGBcbiAqXG4gKiBUaGUgYGRhdGEtbW9uc3Rlci1vcHRpb24tY2xhc3Nlcy1idXR0b25gIGF0dHJpYnV0ZSBjYW4gYmUgdXNlZCB0byBjaGFuZ2UgdGhlIENTUyBjbGFzcyBvZiB0aGUgYnV0dG9uLlxuICpcbiAqIEBzdGFydHVtbCBwb3BwZXItYnV0dG9uLnBuZ1xuICogc2tpbnBhcmFtIG1vbm9jaHJvbWUgdHJ1ZVxuICogc2tpbnBhcmFtIHNoYWRvd2luZyBmYWxzZVxuICogSFRNTEVsZW1lbnQgPHwtLSBDdXN0b21FbGVtZW50XG4gKiBDdXN0b21FbGVtZW50IDx8LS0gQ3VzdG9tQ29udHJvbFxuICogQ3VzdG9tQ29udHJvbCA8fC0tIFBvcHBlclxuICogUG9wcGVyIDx8LS0gUG9wcGVyQnV0dG9uXG4gKiBAZW5kdW1sXG4gKlxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgcG9wcGVyIGJ1dHRvblxuICovXG5cbi8qKlxuICogQSBiZWF1dGlmdWwgcG9wcGVyIGJ1dHRvbiB0aGF0IGNhbiBtYWtlIHlvdXIgbGlmZSBlYXNpZXIgYW5kIGFsc28gbG9va3MgZ29vZC5cbiAqXG4gKiBAZnJhZ21lbnRzIC9mcmFnbWVudHMvY29tcG9uZW50cy9mb3JtL3BvcHBlci1idXR0b24vXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvZm9ybS9wb3BwZXItYnV0dG9uLXNpbXBsZVxuICpcbiAqIEBzaW5jZSAxLjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgYmVhdXRpZnVsIHBvcHBlciBidXR0b25cbiAqIEBmaXJlcyBtb25zdGVyLW9wdGlvbnMtc2V0XG4gKiBAZmlyZXMgbW9uc3Rlci1zZWxlY3RlZFxuICogQGZpcmVzIG1vbnN0ZXItY2hhbmdlXG4gKiBAZmlyZXMgbW9uc3Rlci1jaGFuZ2VkXG4gKi9cbmNsYXNzIFBvcHBlckJ1dHRvbiBleHRlbmRzIFBvcHBlciB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcblx0XHRcdFwiQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2Zvcm0vcG9wcGVyLWJ1dHRvbkBAaW5zdGFuY2VcIixcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIEhUTUwgdGFnLCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyAtIFRoZSB0ZW1wbGF0ZXMgZm9yIHRoZSBjb250cm9sLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gLSBUaGUgbWFpbiB0ZW1wbGF0ZS5cblx0ICogQHByb3BlcnR5IHtvYmplY3R9IGxhYmVscyAtIFRoZSBsYWJlbHMgZm9yIHRoZSBjb250cm9sLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbGFiZWxzLmJ1dHRvbiAtIFRoZSBsYWJlbCBmb3IgdGhlIGJ1dHRvbi5cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGNvbnRlbnQgLSBUaGUgY29udGVudCBvZiB0aGUgcG9wcGVyLlxuXHQgKiBAcHJvcGVydHkge29iamVjdH0gcG9wcGVyIC0gVGhlIHBvcHBlciBvcHRpb25zLlxuXHQgKiBAZXh0ZW5kcyB7QnV0dG9uLmRlZmF1bHRzfVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHR9LFxuXHRcdFx0YWN0aW9uczoge1xuXHRcdFx0XHRjbGljazogKGUpID0+IHtcblx0XHRcdFx0XHR0aGlzLnRvZ2dsZURpYWxvZygpO1xuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdGNsYXNzZXM6IHtcblx0XHRcdFx0YnV0dG9uOiBcIm1vbnN0ZXItYnV0dG9uXCIsXG5cdFx0XHR9LFxuXHRcdFx0bGFiZWxzOiB7XG5cdFx0XHRcdGJ1dHRvbjogJzxzbG90IG5hbWU9XCJidXR0b25cIj48L3Nsb3Q+Jyxcblx0XHRcdH0sXG5cdFx0XHRtb2RlOiBcImNsaWNrXCIsXG5cdFx0XHR2YWx1ZTogbnVsbCxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5Qb3BwZXJCdXR0b259XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXHRcdGluaXRDb250cm9sUmVmZXJlbmNlcy5jYWxsKHRoaXMpO1xuXHRcdGluaXRFdmVudEhhbmRsZXIuY2FsbCh0aGlzKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1wb3BwZXItYnV0dG9uXCI7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7Q1NTU3R5bGVTaGVldFtdfVxuXHQgKi9cblx0c3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG5cdFx0Y29uc3Qgc3R5bGVzID0gc3VwZXIuZ2V0Q1NTU3R5bGVTaGVldCgpO1xuXHRcdHN0eWxlcy5wdXNoKFBvcHBlckJ1dHRvblN0eWxlU2hlZXQpO1xuXHRcdHJldHVybiBzdHlsZXM7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdGNvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cblx0XHRjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cblx0XHRmb3IgKGNvbnN0IFssIHR5cGVdIG9mIE9iamVjdC5lbnRyaWVzKFtcImNsaWNrXCIsIFwidG91Y2hcIl0pKSB7XG5cdFx0XHQvLyBjbG9zZSBvbiBvdXRzaWRlIHVpLWV2ZW50c1xuXHRcdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCB0aGlzW2Nsb3NlRXZlbnRIYW5kbGVyXSk7XG5cdFx0fVxuXG5cdFx0dXBkYXRlUG9wcGVyLmNhbGwodGhpcyk7XG5cdFx0YXR0YWNoUmVzaXplT2JzZXJ2ZXIuY2FsbCh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKi9cblx0ZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuXHRcdC8vIGNsb3NlIG9uIG91dHNpZGUgdWktZXZlbnRzXG5cdFx0Zm9yIChjb25zdCBbLCB0eXBlXSBvZiBPYmplY3QuZW50cmllcyhbXCJjbGlja1wiLCBcInRvdWNoXCJdKSkge1xuXHRcdFx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCB0aGlzW2Nsb3NlRXZlbnRIYW5kbGVyXSk7XG5cdFx0fVxuXG5cdFx0ZGlzY29ubmVjdFJlc2l6ZU9ic2VydmVyLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIEJ1dHRvbi5jbGljaygpIG1ldGhvZCBzaW11bGF0ZXMgYSBjbGljayBvbiB0aGUgaW50ZXJuYWwgYnV0dG9uIGVsZW1lbnQuXG5cdCAqXG5cdCAqIEBzaW5jZSAzLjI3LjBcblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxFbGVtZW50L2NsaWNrfVxuXHQgKi9cblx0Y2xpY2soKSB7XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZGlzYWJsZWRcIikgPT09IHRydWUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdICYmXG5cdFx0XHRpc0Z1bmN0aW9uKHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uY2xpY2spXG5cdFx0KSB7XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmNsaWNrKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBCdXR0b24uZm9jdXMoKSBtZXRob2Qgc2V0cyBmb2N1cyBvbiB0aGUgaW50ZXJuYWwgYnV0dG9uIGVsZW1lbnQuXG5cdCAqXG5cdCAqIEBzaW5jZSAzLjI3LjBcblx0ICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxFbGVtZW50L2ZvY3VzfVxuXHQgKi9cblx0Zm9jdXMob3B0aW9ucykge1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImRpc2FibGVkXCIpID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXSAmJlxuXHRcdFx0aXNGdW5jdGlvbih0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmZvY3VzKVxuXHRcdCkge1xuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5mb2N1cyhvcHRpb25zKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhlIEJ1dHRvbi5ibHVyKCkgbWV0aG9kIHJlbW92ZXMgZm9jdXMgZnJvbSB0aGUgaW50ZXJuYWwgYnV0dG9uIGVsZW1lbnQuXG5cdCAqL1xuXHRibHVyKCkge1xuXHRcdGlmIChcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0gJiZcblx0XHRcdGlzRnVuY3Rpb24odGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5ibHVyKVxuXHRcdCkge1xuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5ibHVyKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MRWxlbWVudC9hdHRhY2hJbnRlcm5hbHN9XG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IGZvcm1Bc3NvY2lhdGVkKCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBjdXJyZW50IHNlbGVjdGlvbiBvZiB0aGUgU2VsZWN0XG5cdCAqXG5cdCAqIGBgYFxuXHQgKiBlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbW9uc3Rlci1zZWxlY3QnKTtcblx0ICogY29uc29sZS5sb2coZS52YWx1ZSlcblx0ICogLy8gXHUyMUE2IDFcblx0ICogLy8gXHUyMUE2IFsnMScsJzInXVxuXHQgKiBgYGBcblx0ICpcblx0ICogQHByb3BlcnR5IHtzdHJpbmd8YXJyYXl9XG5cdCAqL1xuXHRnZXQgdmFsdWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0T3B0aW9uKFwidmFsdWVcIik7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IHNlbGVjdGlvblxuXHQgKlxuXHQgKiBgYGBcblx0ICogZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21vbnN0ZXItc2VsZWN0Jyk7XG5cdCAqIGUudmFsdWU9MVxuXHQgKiBgYGBcblx0ICpcblx0ICogQHByb3BlcnR5IHtzdHJpbmd8YXJyYXl9IHZhbHVlXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG5cdCAqL1xuXHRzZXQgdmFsdWUodmFsdWUpIHtcblx0XHR0aGlzLnNldE9wdGlvbihcInZhbHVlXCIsIHZhbHVlKTtcblx0XHR0cnkge1xuXHRcdFx0dGhpcz8uc2V0Rm9ybVZhbHVlKHRoaXMudmFsdWUpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge2luaXRFdmVudEhhbmRsZXJ9XG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudEhhbmRsZXIoKSB7XG5cdHRoaXNbY2xvc2VFdmVudEhhbmRsZXJdID0gKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgcGF0aCA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpO1xuXG5cdFx0Zm9yIChjb25zdCBbLCBlbGVtZW50XSBvZiBPYmplY3QuZW50cmllcyhwYXRoKSkge1xuXHRcdFx0aWYgKGVsZW1lbnQgPT09IHRoaXMpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLmhpZGVEaWFsb2coKTtcblx0fTtcblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBhdHRhY2hSZXNpemVPYnNlcnZlcigpIHtcblx0Ly8gYWdhaW5zdCBmbGlja2VyaW5nXG5cdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcblx0XHRpZiAodGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXSBpbnN0YW5jZW9mIERlYWRNYW5zU3dpdGNoKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdLnRvdWNoKCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0ZGVsZXRlIHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXSA9IG5ldyBEZWFkTWFuc1N3aXRjaCgyMDAsICgpID0+IHtcblx0XHRcdHVwZGF0ZVBvcHBlci5jYWxsKHRoaXMpO1xuXHRcdH0pO1xuXHR9KTtcblxuXHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXS5vYnNlcnZlKHRoaXMucGFyZW50RWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIGRpc2Nvbm5lY3RSZXNpemVPYnNlcnZlcigpIHtcblx0aWYgKHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdIGluc3RhbmNlb2YgUmVzaXplT2JzZXJ2ZXIpIHtcblx0XHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXS5kaXNjb25uZWN0KCk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB1cGRhdGVQb3BwZXIoKSB7XG5cdGlmICh0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmRpc3BsYXkgIT09IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSykge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmICh0aGlzLmdldE9wdGlvbihcImRpc2FibGVkXCIsIGZhbHNlKSA9PT0gdHJ1ZSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHBvc2l0aW9uUG9wcGVyLmNhbGwoXG5cdFx0dGhpcyxcblx0XHR0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXSxcblx0XHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLFxuXHRcdHRoaXMuZ2V0T3B0aW9uKFwicG9wcGVyXCIsIHt9KSxcblx0KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7U2VsZWN0fVxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdHRoaXNbY29udHJvbEVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1jb250cm9sXWAsXG5cdCk7XG5cblx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09YnV0dG9uXWAsXG5cdCk7XG5cblx0dGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09cG9wcGVyXWAsXG5cdCk7XG5cblx0dGhpc1thcnJvd0VsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1hcnJvd11gLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250cm9sXCIgcGFydD1cImNvbnRyb2xcIj5cbiAgICAgICAgICAgIDxidXR0b24gZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJkaXNhYmxlZCBwYXRoOmRpc2FibGVkIHwgaWY6dHJ1ZSwgY2xhc3MgcGF0aDpjbGFzc2VzLmJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgcGFydD1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpsYWJlbHMuYnV0dG9uXCI+PC9idXR0b24+XG5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJwb3BwZXJcIiBwYXJ0PVwicG9wcGVyXCIgdGFiaW5kZXg9XCItMVwiIGNsYXNzPVwibW9uc3Rlci1jb2xvci1wcmltYXJ5LTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiYXJyb3dcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IHBhcnQ9XCJjb250ZW50XCIgY2xhc3M9XCJmbGV4XCIgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICBgO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoUG9wcGVyQnV0dG9uKTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIDIwMjQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICovXG5cbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0VSUk9STUVTU0FHRSB9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBDb25maXJtQnV0dG9uU3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgQ29uZmlybUJ1dHRvblN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRDb25maXJtQnV0dG9uU3R5bGVTaGVldC5pbnNlcnRSdWxlKFxuXHRcdGBcbkBsYXllciBjb25maXJtYnV0dG9uIHsgXG4uYmxvY2t7ZGlzcGxheTpibG9ja30uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmdyaWR7ZGlzcGxheTpncmlkfS5pbmxpbmUtZ3JpZHtkaXNwbGF5OmlubGluZS1ncmlkfS5mbGV4e2Rpc3BsYXk6ZmxleH0uaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleH0uaGlkZGVuLC5oaWRlLC5ub25le2Rpc3BsYXk6bm9uZX0udmlzaWJsZXt2aXNpYmlsaXR5OnZpc2libGV9LmludmlzaWJsZXt2aXNpYmlsaXR5OmhpZGRlbn1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17Ym94LXNpemluZzpib3JkZXItYm94O291dGxpbmU6bm9uZTt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXS5mbGV4e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fTpob3N0e2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmJsb2NrfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMiwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0zLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItMHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXdpZHRoOjB9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMSwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0zLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX1AZm9udC1mYWNle2ZvbnQtZGlzcGxheTpzd2FwO2ZvbnQtZmFtaWx5OlJhbGV3YXk7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6MzAwO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi94LWZvbnQtd29mZjI7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R01nQUJBQUFBQUZKNEFCSUFBQUFBdDNBQUFGSVFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdvRThHKzQ2SElVOEJtQS9VMVJCVkVRQWhRZ0lnUW9KbnhRUkNBcUJ1Z3lCbW5BTGhDSUFBVFlDSkFPSVFBUWdCWVVVQnlBTWd4d2JmYVFYYUplZm1OejBab2wzdjYwY1BlWk1wRzRISlNqazVxSUlOZzZDR01nbFpmLy9uM0Ywak9HR0RSQTFyWGVJbmNKSVVrTkhHbjY5cU1SRFU4WmFqanM5VWJzbXRucW5FM3YzdnFpUW1mUlFwTGtLVzZRWndhbDZzNUlVaUpOVVNVRy9Pd29EWTZCNjc1T2pTamtEU1NNdTJwZWRwdTl2SklMVWxKZDcwN0QrZUxIcGpZREk0ZTF1RG5MakhIdnhwRFhHTXlkdUxMbjFxdDBGQ1FPeUZzSlpFMStrSnEzVCtJZTdCSkZJTk9BTmJpOXZUVXpoSTdXNEdtVUwwbFdqVC9GUVFpL20rK3h1UFAwMm9tUkhlNXBuNERnZk5aZm4rUjl6OTc5dG1FZU5hcTFSeFJxSFRqVFBOQTJKRkVnckhkby9udC9XLzV6YmdHQ3hpYTZFa1ZpQTJGaFlHSXRSbUUxWnZWVXZxdFN0YjdNdnJkM1c3K3QyKzBYZG9Ubnp6allicDdtU0hMQUNraE1XZ0NUTDZzMFd2MEFVb2hKZkVxRTNvcFBkNThpa0puS2xvKzN1YWVTSFlKNmZjSWNYamQrcktVRXNhRWxUcWxVbFZSbS9OK2UvOGlQMEw1QUtvek5sSjMvOWlCd3NoTTZ2NUpJVUp5a2dUM2Zkck9tcTZMY3MrWitxL1hzQVhGeEVFaVFJVWFLb3NGbjdjdFQrN0JCUzVkcURvbEpYdW5ibDdydHR6RC92Mzg0TGZ0SmFnRkZBTFlQRTVBN2duTXJaQmh0NGxYcXNiWkttYmRxMFR0T21wbWdOaXVnTTJQWUJjNzNNcmpxN0dMc29YSGNUcHQ5dVB2RkR6OGVOM2crc3hyUFFBdzZEVEZOcC9PWkk5aWluTml0WmhSbXBRT0NrZG9CZEFOalZXbGF2TWl0d0ROSlgvcFlJQWtWd25PUC92VzV4em9NdzdTQUZBS1UrWnova25QL1o5aitPZGZyTDhLZTJ2ZEtibXBodXhKU3VMOEVVQWdnSElpQkhQKzQ0NEVEenYxUFRRM1lrT2NPU2xUSG1qNlVzZGZvMkwrL2pwWWU3SUhXY1FVZ2Nna3BMRlIxWVRXOENHS1FYOWI4R0ZBQUFIOXRvNFJIUTZHTHZGUnJpNERpd1R6QUFERE1LRFByL2ZaM1YvcWRnUG1rR3pLVEVtV0VYYjdRM3R0Z1RZcW8yblA2Lys5N1hmK0YvOUpIQVZzSUljQUNCWndSeWtHVDdnQ1I4Vm9oSmNVT09TRGppU2JBcGhNb3ptMkpScHRCdFVXNjlYYk5GRzNJVnkyS0xvazQ4L0xmc201MjdJYXFCTE11QmJPRkl3ZUZVZDAxdmVMK1k4eFdodHpjcVRtMkNJVGM1ZUxKd1NJNGZZbExZRklWSEFzLy9UNTNONC9ZeDFoS0dVK0hTcUVyZHBQUG5zNmZxcVdKc05iWmFDbFF0amxPTFVNc2hjZG9BNVRRc3M0SkxjOTBTeENPTU1VSzRLUDlOc2hwenBYNHZ3eEtDaENBU1JFUkUvTEtzV1JsSndOS0FjVG5YQWhFeTNyMUtIY1phL1lkWDU4NDIwL2lhWG10R2hvQ0FpSWlBUjIzdi9QOStLVEFDQU41aGRrQzN4VUM0RUxzZ2d2a1Iya3JFallTRXYwQktTbUhDaEl2WU9DQUprS1FneVlNTTJRb1VNekNvMTZCSjg1cUFXQ0NkSGVrM0FCME9ETDFMcTBQZ1RlM2hTdzJmaGk0WGhQdWV1UVdFSDZ4dElFUUFiRzJObTVvVjU0UUZQK3lLZ08yRDRUNXQvd3oyWFc5Mi9ycHFwTFRTSVA4cVY5dkx2T2RzME5MV3lYNTFLNm9mYnZQWkUxcGFmN3czMThDOVp0aHE3ZjMyYmZ1TDY0VlpIdzUxNFlzbTVsZ2ZOYmZHN1c5bHNVQTRFR3o3MjN2eHdHenA0ZlJSK21QOExzNUI3S0IyZURKWGM2eHdsRzY5MDJ1ZzdBekxBOE5ZMjFCMmRCL1A1cWZPVjh0MW9ueUw1alpERGZRSTVSZzhEOThGdkhzdmNsSHVKc3JkdnNKcnBjL1RyL2d1L0VmWkp6WFV6cFdhRGo3TTcrVVA4LzhFa0FBVmFBUy9DUitYcy9KTjRZYUljTzF4SFpjVWFNTWJrbHJwS3k3TmZRSktRY1VSYWdvR21DVytIQTZFTnZiZzMzc2wycElZUm1FOWJJSGIwbUE2a2s2bE41R2R5TU41RWJtUWh4SEtsd01nVDU4Y2d3N3BkVVJ6N25mTWNRZmNVM3ZJY3pWa2RyaFg4WEhxNDAxMnRGT2Q3a1QvYTdwN204M1dBNzFGN2FPOU0rZGp2ZGQ2ajdmeG0rRDFQdTN6M3VpcnZtdXl6YTUzdHJ2OTNsVGI4MlJUMkthRlZVS01OUDM2QnZRTUNvMEdzRWRrTDhzK3pMZzFFeGJNME5nQ1dBeGd6ZjgyREcxS1hNZmM0cmpOY1FmSEt4U0N1UnVCSTVBb2RERERrR2RWOENuVlZFbUVNYWluNFNhMEFYVEkwUkJOcE9ZQUxWcTFhVjl2eEppVXpIS1dDaXM2bXAwQnVreDA2OUdyNzRzblZOYnNvQ21rVk1vcDUrcERHYVd6MnNMRHIyaU50K29aTzBiMzZZU0lqV2N4dm5sTjB4MFZobFlvVzRVUmpYWEt5TEczWTNxb0xkRWF6SEFFRW9WdU1sM0REZUVSVnBHL2plVEVSMENVWkVVMW1vdHFGb2l3SkZLVWFERmlhY1NsQkpyRWpTUUtKL0NTRlNtU0trMTYxUWxrZEtleVNYWXpzZFhLaTZJOWlrTkpNdENVS2xPdVFxVXExVkhUMXpxNitsemZRTkFJYTVKcFJvdldhRVA3Wnh1Tm1Uak1MQll1cTNYVVRnTmRSRGQ2VXE5QTMzY2J4QXp4RERPTjBJeGFOVmF4ZC8vcy9hanhBRTZKblBiRkdaa3VDM3VhTlU4RXNEU0xaVm14T2oxUGQ4SFF4WFNwZWRrWGF3Ylc2d1pvOCs2RHJpdVFGRnc1SXB2bkpoNi9aZ0ZKSzkzMGFFTTJYSjN5SkIwREhvcGhicWcwdXJrdk1JZ1lsdGJHUlBjZGtkN1ZqL05WNHBiQWJhKy9FNEJqQ2c5cDVaZXJpL3BkTTBDRy83dFhaTnhWRSs2YllhdlFuNnVtV3d5M0ZYZjZnZytYbkF0SERnamtQTmlVYnFwb3d2RFV2YlJsY2o1WFpIWXpWOEppNE5sMXZqc09ock1heE9IeGVEd2Vqei9WSUhKWG42SDB3aGc2cUZPRVVxUW8wV0xFMG9oTENUS0oweVE1TFU5eVJRcFNwVWxmWm5BU0JrV3BsQ2xYb1ZLVjZxaWJUQnRNbVFLWVlXSFZVVWZ0R0l0NjJsZG5NSDNFcGlVMHFWUXFIYkNMeE9VK0U0LzFYTGZCRWh6S2hnVWNnVVNoZnh3bUR6OUc1RVJBQUhMN0ZIUktReXJud3V4UWY1cmhIQkVCUklvU0xVWXN6VWJjNHJ0TWRwbDI2RmdkNTV0Z1FHOHgvZkFaMkp6SXZHYm1scmNYQW0zd1hLYTdFbGZQY1MydHhmcStlZ2ZpSEdvRE14eUJSS0h2eTNTSjMwUTZWOCs2bWRmWnNhRlYzZU9VS3NXTXlua2h5TDF1NFZJMEwxU0pMSXhYeVl6cEx5TnFpV3owWFRwa2FUeW4xWkR0aTkwbVkwMnYwdFVxdHpTQ2wrcXJLN3JJdXYxdjlSRDBzZ3hxR2JKb0dHZkVrbEUxWXpyMjhPMWwyS2V3WDlONEFEYU4xYjdMMElhUlRYT3V5OXlpdTgycE93SFFCQytwbGRDck9tSzBNZy9yMXZSWUVtM0RCRWNnVWVnbVV4MDNHNCt3aXRRZ09mRVJFQ1ZaVVkzbTR0bUVJdndVS1VxMEdMRTA0bElDVHVJMHlUcXRGY2xFQ2xLbFNhODZXRVozSkp2c0ZXaTdJeEtKT0J3T2g4UGhjRVRyUk4zdERwbE1KcE5oUklhaXFBaUdZUmdtY2Jrc3k0Tm96L3JvZlFMN0tjYWxORDBGT1czUkdadU9CUjJ4bVZNeGtVZ2tEbDBYN3VKaXV0UzhiTkdhRSt2L1pRT3dxZTg2R0lJZUVzQ3VvdldZZkNxMnR2cE1PQk43TXpPNjhHV1hMaHRtZ1cyZmZlSHAxTXU3cXdYNU5Ed1RrcENTY2VmQmt4ZHZmaW5BUklSSVVhTEZpS1VSbHhJQWlaRTByVnE2NUlvVVNaVW12ZXFVTXJwcy96MVpXRVo1WUJnR0FBQUFBQUNBMFdac2QxQ3ArSHcrbjIvY09sazRyRHBTbDFLM0hyMzZqZzFDVHR3ek9jTnVDWFlOZ2lEWWhvdEgxb2dPTFJTdXg4bmlsNHIyaVlhdjBub3J6WHZaMm5aalpMZmFLRCtWUmdIL2ZnTm1wa0ZiaGdpR2lVYWNHZlhObUs0OUZQdlk5dHZiY1RtNzUrM2ZkYW1XNllTdHdrZHphQ0haY3ZxMENTNGlVNVptTnhMWEdCZS9yUW9Iak1QMS9RRUdWTVpGSmdiRERKLzVUM2V5QmN2R1BTcVRpbUpjQytZUVVqcUd2Mm5DN3EzbkIwRE9xdjJHM1Z2bEloS0lXOE1SU0JTNnlaVGlOR0ZYK1JHQ0RIczhQWUlkVGpkQVVBeXZRa3dTQ3BwaE5kMjBtcHVNalFYS0JRa1dJalFwbUpSVUtZeEtYY0xEYzZrSWZIYVRLYU9NU2M0TXNWUllRMGV6VTZGTHBWdVAzdExIdXdwcllmdGhpd2lIRkFXa1NwbVdSdCs2bko2VTE4Q3V5Sjg1ajJ4MGIwZDdOOXBpYnEwbGI0Tm5VK3BPN3RFVUxpaGRVTzJocnB0Z1lYQ3N4QkZBM2xRMm5tRmMzRmJSakdCZ0NkNkJVSDdxblhCYmFjanNLOTlSZklETUFGa0Jzb08rblpnOFAwQkJnTUlBdFFFYW45V1FFczlNQUhORzg1NTR3YStBcm5xdlRUanBHUzdlL2lsUG1qQVJQbW5zeFdrZEFBUnlPTDl5QWh5bXg3U0dLbGs3R2g0OHZEdk5mZGcrSVRCWnBEOWd6Z01JQnd3Qms1dG1rRVhJcXFNTWFFVGcvSFVlMjZvTFRUcDR3NGc5VWtaNWJnYnhFSHRDeVRMWVBIbUpVcTN1SnBxenZTTmN1bWJCZFhZUXNrdTFDOTJOOGpUdkRGRVUwcnY4MTdnbXFzR2pQZlJ1Tmp2ZXJURG1IQ0U0cStxYnpPanVJSXZSYURoeloxL1ZKVXBoaGlPUUtIUXdzWjVUamd1QUI4Q3VLcitZSU1LZXdJb01PNXh4OWU0QUVCVERTWXBtMk9UeThvSW95WW9hamVqVVFiOEp3RC9YQjVpU3N3VWlnaEFzUkdoUzBDZ3pKelhNQ1RVMVhFWkhhVEFYVENRU2ljWGJZNFZDb1JnTEV4c3RsZEN0eFoxYVVubHV0R2h0T1F0MTgvUlVkVnBrREJ2YlM0bkVvTkZvTkJxTkZpZFhuMFdKTEpDclU4Q1VicXFNaFpHcG0rRjhFYkJJVWFMRmlLVVJseEtFRWlWVkxWTnlSZ3BTcFVtdnVnQVpoQUdseXBTclVLbEt0YnBtQTZ3clFMY2V2ZnFhRTdEVFdzNllIbTBFMmRjbGlXV3NXRTNubVM3RzViNnVHVm5Qbk51eXlXYkh3eERqcFdrNk0rajIwZVlNTFEvMDNWTW1LbTRabmdsSlNNbTQ4K0RKaXplL0tyZENrVk1sS3N5SW1tZVpmMEdReXdKQkVGeEMvcmdnQ0lJZ0NJSXo5MGJERXdNVGo4ZmpBVUF4ZFM2VnNEY3MxZzh3ZllDWHJOZDk4U0g4Z2FqazV2dVVQcWc0WERQOUptN29HV3ZHWHhTZEVMTGZyc0VTRXNtV1hUY00zY0x0SEZTR2JTSEJBamNDaVVJWEpxSG5NbE9MUkJMYXNuVUsyU3V4MXpxbk1CL1pNR094L3pQdThvaERBREFBT0FBQ0FBbUFBa0FEWUhnbENrQ3VMVkFpU0lLRkNQMGtoV05LUEZVd2JkeUwrc0RCeWVna2FKMldFTXRXckU2LzR2cFc3RzZlNG1EdzBCZnhaaEZ0OUd2ZmhQRUFteWQ0Y010VXFzUGw0YXk3R3VhazV0ME41Mk9Pd0phQmdTTkhzazJOaDdxRVdaWVZxOGUra3N4amozRUtTWGc4TE5pbFFxRlF6RTFmdjV0dnBRUUZ0RklteUx0aXZUZVdrUUNrNVpSZTJRaUoyWnJMWURWODZNQllXWDV4QVB1bmsxeW50WjJ4NmFiTnJpWEFzaFdyY2ZrVTYzeS9qL20rZ256TjhJM1l0eHpmQ2VPaUFQaTdZaDF3QkJLRnpzNzJXcmxpZldiM24rc09ta1NpelhIVFhwbXZBbk9nZWErN1M4RjFFSFA4blU0SW5GWTRRNW1XcDNCQUxsZXNhN0J6NEZ1T2JFNEVYUm5peWs4aHRDT2lrOHZsY3NXWUlLcjQvY0hNM1hYSWNjeU9Ec0JYSDlSM05JQmpVc2QxZmlkajBpaW5INXJpWmZVT0RUaUZRdWx6ZWF4NytqSFpWeXhmMzhVM3hMZHIrVTd1NDNINTlLZWdLOTVKdnd2eXFuM0lneEx5VUcyWTRRZ2tDdjFCVEQrSXZDTVBNZzBsVllSQm5TSVFrYUpFaXhGTEl5NGxDQ1QyaG0wc0VBZ0VKVERycWI0Z0oySllvelNVS1ZlaFVwWHFiTnJaK1poZWpiKzVySHJHemNjTFFoSlNNdTQ4ZVBMaXphL0t6UW5NQ0VLd0VLRkpZWUd5TnlLMWx0SlUvSjZXbUZ4VXFMc0luWFNzMzRzNEFKblROUDlKVjgxWlcwOGJ3b3h3ak1vR2crMWdQUHh3QU1lWmtCRUUrVnN1cHN4bzljV1M1aXZuYVNVcEZKUTFURWJ0ZXlLak1BTGxTUWg2UkszZ0NDUUszZVFVNGpiRUM3dXEvQXlDREh1Q0JRVHNjTWJWdXdNVUJCVERROXlRRk0yd3lSbnlFU3hLc3FKR1UzUmlFRFBYTDlEWjVGNElwQXVTWUNGQ2s4SUdaVk1GQ2RPa0x1RTFJS1ZGbEdneFltbkVOZU5CQ1ZTSmtuSkVqK1NNRkVtVkpyM3FtREtJekdsa1NiYmQ5SExrMWZ4KzNlK1ZDcG1Lb2hnbHlVQlZxa3k1Q3BXcVZLY2FVRzNVbGZwb2tNYmF4TkFzTFZxMWFVOUdJbE9mdkpsTXBwakpaREpiUmp0YU5Xay9yeldvTUlJYU5XZXNhdXQwM3lNTzJQeElJNk1CRTkxcWZvRHl4Q1N3Z0NPUUtIU1Q2UVZ1RGg1aEZYbHB0cmdNanlCS3NxSWFMMTdHY2RrQTU4QThnQ1kvMzJQTGJ3a25DUUJBTm10Q3c2Tm9CclZJcXpidE9Vc1dVNDA1bEN3WjF0RHg1cDFvN1RFZEpCZ1NHTDc3N0JFam85NGFvOW9qdEs5YnY1L2hBTThSYTQ2U2pnbWRlTHpORE1oaVVIbnU3UW1EREJaK0lVRmlUY0pvSGNsSWtTcE4rbVpHY1RjSDVJY0JwY3FVUjBXb1ZLVTY2cVozdXNlZ0YzbW4rYkZscmlxOUJtbW5WN1BiN0cwUnRDYXNPd0tRWkVnaDQ4NkRKeS9lL0o2SnJ6MnJ2ejExOFBrOFBwL1A1eS85TlBKaXI5Z0p3eWxLclV5NUNwV3FWRWZkVkZOdGhyV2dWWnYyWklTWWVyZUJvSmRIS2VhZWcwSjdVQmVxUjhTTzFhbjNwRkFNS0x3SXRWU0orK0ZtbmlIRXNGRVFXK3Bla29NNUhxZjUwbHhCTEx2OXpDTUFaVFBRMTduOVg1a0hGWDdjNlEySnZiK0tTSXNTTFVZc2piaG12SkVFV3hMSEpEWE1TSzVJa1ZScDBxdU9JS09Mekdsa1NiYmQ5SExreVZlZ01CVzVVS3drR1d3cFZhWmNoVXBWcXFPbWo5cDVxbE5UMy8vMXhzaUFSQ0tSU0FCQUJRREFnRUFnRUY0a2NIUEE0eS9mMm03WUdvNUFvdENWU1NJYVRlVkdGQUFseDFSSVpSdkdjNWowSkllb2N4enpwS3RjYXljeEkxaFN5Vis2MS9HQ3d1ekFNZlFNdzZMVEtkOG9zRkFjck5WRFBJZUZzNkxIRnhsTnl0aWVEamI4R09RUWJoU0l0ajAyZ0lnOE9WYlVmZ0YvR3RrYUNzTU1SeUJSNkQ1NW1jUGpMYllrSThKMHdKd1hmL00xbm85ZGpUVmRXaHBpRDRNamtDajBHWVk2a1kxTjVRNEVLZ1VoV0lqUXBOQ2piS29TQ05PaVhvWmJWRjkvenNMZEdZR2dWYk16d0p3ejgrbXFVMnNqWTFCcmNqbDNmRy9zZno2cTdvZzJZMzR2ZnBkVWhlL0NaMkhIOHlBQS94UThEM215QUlETkFWc0NBSmJabnhpMmNINXMyY1JKd1ZhT20yV1dzdFBHWnhZWkExS0lSN210M0F6QW10a0ZVSTVpbERjQW0yUXdvakZYQjZyM0lzQnlWcTVsK3ROYWJjdHJGK1FyQVErbGtpVVd6aUhHS1djNXUxRlVkTUtNaG54aXhuQVU0bGthQW5vL25odVNjRW5IclE2UUVkb1IyRklRNEdGbllIa2ZCZ0pUd05sNDJyUUg3ZFY2SUJLeDRHRElQVFNQQXRZSGN1YS9VemVQMWVwWkpOYXRPQVNxRkVRa1lDV1NqS29tY3ZKNFEvbFltUjZiV2lFV1dWSUZBTmFJVE9WdzJaVkh6cjVNekMvMGkvRDFrd0VXVkQvelQ5YjZERzYzMmlLNFVxQzdUUDJVTmJua0VZODY0WFlpS2xXK0JTM0ZVS3hIRFFZbys4Qjl5ejF3NGgwN0JhNFFra3pMMExHSkdJcnJaK2NOWHVCM1B3NmNlZHBBTVU2R3pSUXFEVzdudEIrY1dpc0Z5bzNXQ21RakwwTW1Yb0JxTldSRklaSTdnRFhodFNjdDhMcEJma0hzUlE2WHBWZklSdlpCVThwODVGNGhIOEVLbnhtRVltdStLNmNZWTNnUWUxKy9UekpBSVJGMWNLdk5tbjJRME04YU9Xc1hqVDlqdkJDcjUyMXhxdFdWSTZhcExwZWhLY3hadVc5QldMSjNRR3FmOUpUaXV2dlUwd2RnaHcvOElCUklYMVZ1TlF5c0JxU3RWTlBYWkR0TCtOaXZjd2kxUGdELzVPMG95bTJKKzc4b24wcnhnQTlPQ2xhMGdOMEpFUEhZL1lQNG5oSWF3YkVKMkhsVW5SOURiemZXTVBBdnhrcnRBMTR4NmpyQW1ZVWNnUmZSbFpubll4czJ5K293TER3a1MyVmszZGZqQUFVVklKZXdEMDZ0eitBdXc2cElxeFRsNGRtam9HbFlRWERNYjMxRkpQcys2N2o5Uk5nc0hZZ3d3T2NZdHVmSzZWaENMTXVjNE5GVGJ2OXBFUWpGTmpOcjBMV0FKQjNYR0htNHg3bkJSZlhtSFFoUTBienFtT3RWVG55ZVM2eDFIYkMvYXJqL1hlLzdxTU9sN00wZVVuRFBnaHlpc0Y4cUlvRmJoZkVncXlENG8zbzJLNVJMck1KWUNhQzVnckh3dXBETnNWb1hGSTMrOVdZUGExbHd2T3A5MWZ2YW5HaG9tSmlwOTd1cE5IbU9IK3liMStoTElwZGRyMjFSaUExM0ppYjc5azZwVEIzZEZBbzcxNHBRMXlSWmJUWE15ZEE3bVFFOVJGR2hML094ckhqZFJubzBYZGY5eUVlMG5YRmZPZXJ6WStETzNmaUJXQkZNQW1xRmJPZWdrQXFYVFZvNWZTNjZ5T0lWbExDU2RjcDY4dWU0eUplbGhVUHRVNlZtMmpuTkFQcXdXYU5ubnYxdzdKUDZ4UVphd1NJUGxPRk1FVUd1elBDQmIyZEpVeWdZNlE5d3I2SlVqSnI2TlpjYkVZd0wvY3haZmVjODJMT3NNSzQ5eFg2MjhQOE5xM1RERWNJQVBad3doTHc1OGhQS2s1SlNvREJKZ2lUTEVTdFBBNTBtN1NxWW1OU3g2Rk52MGlTalUwNHptVGJOWXM0Q3F6ZkpmbG1DL1laSmdOQndEQWFCaThlQkhUNUhBazRJUWtLdVJFUjJjZUhDalN0WFloSmVNTjY4RWZ6NHdmanpKeEVnZ0pTY25FeWdVQXdsSlhkaDFKeUVDK2NoZ2dZcFRoeEt2SGgyRWlSeWxpU0pwMlRwS0RvNlcyVElzRldtVEY2eTVFRHk1RU1LRlBCV3FCQmZrUklDQmxWbzFhcFJhdFN5VTZmT1Z2WHErV2pRd0ZlVEpuNmF0ZU13TWZGbjBjRmVwMDRCdW5UWm9sczNwRWNQdmw2OWtENTkrQ1pOMnVhVVU0Uk9PNDFyMmpTdU9mTjJXckJBNkUweVpNa000Ync1aHdzV25DNWFjcmhreGVteU5ac3JOdHl1MnZLNFpzZHR6WjdIT3N3R0V3dWhrUmlNN1RnNEVDNGVuQjFuaUpBUWJvdWRFQkdSSFZ5SUlSTGVjRDU4SVg3ODRQejVRd0lFMkVsT1RxUVJYSEFRMTZVNGhDN2dnQ0VBZzBZQUJ3b0tEcnVFbDYrR3FiRk5QTFdHQXhEQTIrMm1VU05PaUJnN3QwU2tTMzFveGVNa2pyRm4ySUlqSnpqTVNVaE91a2tvRUpTaWp5R2d4MklhLzlaYzAzYituOCtncWtnUzI4czc1NmNqVXAzendUcitSUGU2U2VybFVkVDVhZXVnZS9BSGdCejlGNGlud0U4cStINE92SVczOUZiZVdyeS9CcU12di9LU3VwaTlIa3JWZWZHNVo0SWF2Zmp5V3krcDRzVlh5aGVWVDVueElxL3pidmJqb3FYWDFaZTBoajBBWUZNUVpzMkJrQWdGSUdGd3hIWU5COVhkYW13cjNzNy9DSWZnWVppZmhUOWdhMTB5d3R6ZFpZL2hjbmVUWWEva2l6OEtDQm9yaEZaNGcxbFhCR0dXS0E3NTJFbElkOWFMSzRTRk5kVjMyOWJHN1JJSUtVNEdFdmhqcjhMVTF3akEyM3M5Qm1nYkdqUTk3b1VLd3FpT3Z5UFpFUklDS0l6QTZXVHBXUXdWNm9KbGUzVlRsajVUeVBLT2ptNE5idk9nL1Q5R1ZmeE5BOWhGaFFEU3cvZlJqcENGMlc4T0E2OGlDeVQrZjJIL0RHOEM2ZSttMXgvSUk4NzlOQTM1cndBQTY4UVdBWWdsVFRBc1lBQ0VxZU4rNm15M3dZb0E0RitqTm9XY05TOE9pYWpRUVA3eU1GYXdJalFSZ1NVTUxJMFE3bjFSQVg2UkY4WUtJSUpVb1ozeWdDK1EyUW9zQ2t0TzVsdU1IR1VhRTNlTGU4VmowaHFwV0FwSUVhbE9hcEc2cmRXKzdxUkFGY0NlWWlrQTRCUFRzTGgvd1VXZk9ieDlSNlU4cWZBNFNLbjVnN1lDWEFTUUNRQllOM2tBLy8xTjFmL2s2Uy8wWS8xb0JyNzRHWHh4KzJOZjB1Ky83Z3ZxQy9MenowRWY5T1JCcWpuMVBnTG9aUThiKzFaMGM4Z04vbC8yRFdmTm1mS3BYMTAzN3oyTHhuM2x0QlhUYkU1WjhJUHZmRy9HSm9TRHk0NkFNeFkyRGdFaEVURUpHU1VNVG9XZ3BrY3hNREo3MjRSMy9lSDE4U0NDUzRJa3lYUXlaTXFTcjBDaElzVU1hdFNwMTZCSk15TVRNNHRPYi9uTlczN3l2di81Mk9jKzhZWGYvVHN1M0xMTWVUOWJkWHQyY05ldlh2THlhUGpGRFUrTmdSY051T0IxcjNuRExCSUdSeU5RR0R4T3lqbW9WSU9MaDYrVUdBd0Frb1A4d0pPT2hoYkpCTlV2aHBVTkxacURVNkowS1ZLbHliT2JYZzZ0RWhWS2xhbFM3bHVWMnJWbzFjYXFWZ2R2bmFNUUNjdVdYSEhWNWNpNFdVUW1VbVUwTU1BbXRnUXNCU3p0RjNSYkJCZXdGSUF3NWw0MWlqY2JCbVFwNnkzQUVOdDgyZEFrd2p4bno3UDc4VlVVREIvVm11QWQreDU2Y1ArK3ZYdkdSa2VHaDFZc1g3WjB5ZWpJOE9LYkZ5MWNNRFE0TUgvZTNEbXorL3Q2ZTdxN09qdmEyM0t0TGRsTU9wVnNibXJjZ1dBMDdQY2VmZVRoaDdxZGRxdlp1UCt1ZEcyMWxzVEFQK2Z6NmRyMW1vcCswTEoxVEVnZ1M2Q3V2QzVveUFpdWIwMTNZUE1MYll6VGJPREFUWDVZRWlZeWNwVTVJVmNQZkpEbEorb091ZHN2TE9VeUNIQTBlcFNoUmQ0ZHVINEtnRXBNRU9XWkdiNUVGY01qVkprQlVCVUJSWmtBMlpLTlJzQU4xKzEweEs4dGk1THZ1OUNRT2Nad3hvYnRWSllTTllTRkkzL2V6d2lMSmRRRWxWQVZxYkZmVmo3R0ZZS1V3aUwyTTljU2RnTm04TEhjc0FJbHYzdCtwVHppa2dqUzhMaG5wUkE0eURwYk83QmNla2hMSVJ0eXJzbzNoT0ZiaVUyOUZnbUtZNUo4MnhSZDhxeWxzRldrRUgvYmFuOGxuRHYzWnk1ZTREVkdpWjNPUVJEQkQ0NjRYbldUbW9GRFI1MnVYSmt6bGZ5Q1JOMGpGVUxlcVpWTE5RRVhtVkVsRG90Wk5PZml6UTRSTGJpMEszVmZRaXVPS09FU01GVHYxM1R2aTZDVnlVN1d4TW1LVzNVYnREbW5JMTd5WDNIY253amdvZm9VNG1hU1VsTG5JUG9kMHc4eXY2Nm9XSU1kU2lHUFV2MnRnbUE0RWRhMTBGcm50UW0vZWx0aGZ3dWhBSFdLcytKcy8zenF0VHhTZmNaZFd2TUJrRWtvMk9XZDVoOFZ4a2wxd1EwdFdxZlh4am5iWFR3RHc1b21XWjVxZHZISURiS1l4eWc5NzBwSnZ6QXo4bjM1T0xSa2ZTYmREVHBaZ05NOWxRSm0yaVUzL0gwbmd4dkgyOWRBZVkyUURRdnhaNHpTaHBRYmhBakJtd1ZiSTdGN0l2SjdraU4xRkpHV051QW4wek1FeVJsMGgyTjE3SkNLaWdDUEtmeTluSE5PdHp3bkl6d21ndXZaWi9UTUJjUWxIQWZ3NUV4SERzWEd1RnVTZW8zeUNKblpSYjNXN1VmM2FOWjczRVlLN2tPU2xWSnN3WVl5SkN0Y0dNMUdyajk4Y25IaGtGbXU3UGRPd24xV3pSMGh4VG5SVThhQkpteHFIOXdRSUljL2ZVV0JIajhxcklTamJPMmhQVzdsUklhb0RKcEtwNldyVkhiMG9sNUxuS0x5RmoyVEhnbXk5NkFwWjYvbHExaU5QWTh2d0RLejVncytFL0NaSUNQd2NhY3FjblJpcjFSelBzbkNnUVZhZzVVTXJLR0o2eTQreVBZWkk3eWpLVEpLU1VONG9VVDdHVGRpeE8wRGtmY1RVZG1rYUJ6cVBiaTVTaUtmSmFKRERLWTFabDEydTFSQU9rd1NwN3pIbjZRa2FpcE5McjZFMHBIZ21JUTBPM3hCbldTeVkyMGN1SDJ6V1l4TlEzdzJtRndQOHhrNWNLZURzZFVha0tsTEhOSkc4czV4enloTnR0RUJpUkROUXNjQ2wydjJaQW4xQ2l0eE1FakxNd0c5cDFkRHRkcWl3SlROQ2ZMU3FSUzBBdFZ1cVFQSXNRQ1JaSW04eDY2SU53cFRDTUpDMnZZSHJOTVdNdzVUeEo0Vmk0SGdSUm9raWdGS1BUcG40NUpZZ3hxaDBib3FndUhQNklna1FUS1ZQcDlCbUN0eVNPSmQ2YnlFMGxRMWRua3RsY2lHVW1wUU85dEJuNkFCUkJ2WWJoL29YYXBuQ0M3NUdHSXhsOFcrWlpPam9IVWh1N05DMjVVSm9MZG92QzFWb0FpMkZBWHArTTROMUR5QXpVVWplU3Y1d0c3WmJmOUVjVDZqTWJzSjFCcFkvSnRvbDdOMGpwUWhnTGhjWWZZZVVaMkJYcUdVSDg1UThSUnR6MmZRZG56bmxsQjE4ZENETTNCTTBSVm1MWEdQRlZSakVkUWhMUDlEaUp2cE56b1VBdmVnOVpBTGZJalRWYjRldDV2UE05QVVWQzExSllCTXlFcEpvTGF3SFZzM0EwQ05EMGNnMi94blhKTitJSlc0QUtmMUdTVWEzVkJjdU1yWGxVWVR1Z1pvT3pQZldLUnVjOHFZTW1sT01Ld2w3eDBrS3Rzd2xmMlpSc3JqMWhnMnl6cUJhUGxBYU1sa1JDN3pHNFdhSGM4QUJybHkwbURWZ1BoS2c2MEtJR3NsbjFGRlFHb0JIWTFUR3Y5S2dKcDNWb28zT0JJdUE0ODVvcmgwYzBORzJMWDZ5U0E5c0djQmFuMlFob2JnbmlKNkZldHVLU0hYTHA1ZWNOMUZpMW8zTWdNbUtkdzBJckZoajgxS2lVTER2UkpESTVLU1VsS0FGSUt4VnpDdWdVeFhwR2daZkFnUEVFOTBOZXpLenB4dkhiUFRWcTJkT2FxODQyRU45dXlUeksyRll0K1dkUVpEZTRVYmVCMThzd3ZsUVVDaUZyYkwreUM3V3FselpPVWIyVnBZUVp1MW1QVWtUMlh5NzI2TmowZ3BVbW9FV0llci9GSmtna2diQUFMNERoLzBsbzVKREJNQzdrZzBEdHpQb2dGMEs3TFdMWFIwNlBFTjBvb0hIMWx1ZUprUURQSVdVNk1aTzZMYTJzZ3VuRjUwOEMybFlHWlBsY3gyWEoxdHVYRmJyZTUxQ0lVV1NoYjRmb2o2TGdHY21sZytVQ2lTaXhjSDlySjZUVEpkQUMyNEFwR2JzYTVoYS9OSXIraDlJZWFYSUNpWnU4QzRKTHpXVDdnS1lUNzYzOStBQWpMbHBwZFhBTGJtdC96Y2RaOG5mSS9zd1hOYlpkdzltUjFTTzdJZmdaS0MvNE1Dd3BDdzVzRDFqNDB3SXViZHRwQk5jc1ZIbXVVUHZoYWtzeE05RjhCTGtzUTM2TS9CT0pBUXQ4VEJCU1ViU29qd0szMkVZYmVRcnp1WUdhOW5XRmhPS1RsUUJ3OUNGajlqVEc0SjNOZ0R2ZXVBZzFVT2hiNEtBcDlwSGdhTUpLYjBTbG9MN0RvZEhzTGpwdFhoa3ZPYWFvZTBDSGpEVTZ0a0tDQjQyZ1pKelJEY1BvMnhOZUpyWkR4Y1hlVjNWMjhKd2swSEpoVTA4THRHRFFNcUtPUDNUR29BSTZZbmJFa1J3RFJrM080a2k2MUlucVQ4MTJ4S2JpaW9CTUdFNURMcE1LcmlPcG92Rkx0YkllOXhxTXEvU1RZc3kwWlFGNXlhWmF2cC9hK0g3dWJEbnBTc2lCd0pGYWdCTWk3d1ZXYzdVSHFsbXczZmNMdnZtblZSU0ZZUlFFbmd4bkh2dXg4UTFDVjdBSUF1QUlEZEFIMUErTHdnK2dIZ1A0QzlRTGdCQU5hZXZPVHdvcU1IVW9OZ21WbUV5REk3THJ4TEhEWFhFazdaQU1JOXpPYkd5Q0dEYms2RzVVZ25UcFBjMytqWlFNallHVXl1TlhnK00vVGliSTJjQnhnSndrYjBiZ2k0ZlpmNUFCQ1dUN0JEU004WWVTL0o4bm80SXN4UVlrNTF3WkttNDRDanc2cFRmUWpYalVMdjllalBPVktKM1BoUzJpSWZ1bEFLNnNNTHV6WTVPbi9iSHpoWkROMkdhUGg0NjZaTFVVWkVtV0ozWFJHKzhBK3Y1WU9PbEZJTVJGQjQrTGpXeXVTdVNPZXAzcXJQV3JOQm9SdkdEV2JncWN1OTcxNWtYejJCRU1GVVpYZmh2TDlVRC9PdW02NHd6ODFJa3NTWHZadUlPcWNZUkNwdCtEVWlnc3VFM1E3YnZnOHo5cUV6ZjhtZmVIRm41NXNKUlV1TFl4UTNmTUhadU83dmhrOE0wOTFReExCWjFTZTJpUU5WMGRqRXVDRlRibnlqZWFxTld0RFVPYnFKZUpzQnVuSVE3UEtXcXZIUFBGeEVYVE1LUmpmQURjK005Yjc1V2l0S2VOMlRUd1BNYjBQQTlxMkZVVUdTYUxoc2xqREFVQU1NTGRLWVFIVmpjd3BnWUtvd2FVUUMxNnJyaHhCRFJVL2FaZ2JFb1VzK0ExMFR4a3Nua1NMalpheXlSYStQaEtLTmpCVDhMb1NxcnFCR2lxR1NSaUY1VEJDN2g1M0Npb2VGNFdGTVYxeks1akRQb2JqSGdQNWE5c0JERDFpTzg0V2NMOTRDbzVFZGNJa0hsTmZKdGZtbUFFdCtBcDFKYXR3N3Y1THhiU1UzbWVLQ1dzMTNjb2RRVVlsSlZ2Kzh0bXVyQUdvRTFucE1oWmV4VExvUEwwa2c3VWV5Mk1MRXV2TTB5NDVLbHdHbFd4QWhuSGZOalphV05jTTZySmJNaW1pMCtzenY5QkJxT3V0ZlBWRWpIakliTmQ1cGFhTm1iSDNGTEp2aTF0bE94TnNvdGRpT3dUOW5lUE83K2VTR0ZGVHowVGFkOVlkbUEvcEo4cUZhNWdzZmFvaXN3NjFBbnQ4T3ZqKzI0MldLM1JWcitjeU9DR1RYVFo3WnEzeUhKUUxSK3FmdVNiZ1BsNFVvVW5uRk1xbHVIOUFQOFJpTzFrYWxzeGVlSFhua3VOSWU5KzYwNnppaDFzOE9LODZla01yNnFzQnM4cnVVcTZ4RkgwZ1VmVnNPWWFuM1dTdEFSZjdGNTB2NndkdUtiMFl2MmJzcDJ2Q3dTcUZhTUFycklMdllWMHF4L1RzNmNEOS9SMHZtYjdxK1VqNFFKREhmTHdxYTFMMllTYUtlNm9jV1hUNkVoK1Z3dWFSeUhzcEx0aVVNZWZwSlJVWUl2ZE9wNVlGKy9NaGdCQjJwZndHamtLY2NmK3dTSStCVnpPWExHZzFjeFc0RFZmOUhPYWFIaVNzMC9SM2RmU2k4aGRGeFloN013bEYvanlod0RhZ0YvQ2UyejBod3dGNFg1SmJEc0ZKdUF3TTBOcXRqc0dNRENWNkdLMTloalVBRGJSTjd5R2RoT2g4dXdITDMwR3pxeWxtY3Y3YUlnN1FvbHpQbkx3cmJqY052MzZYS2FGWno0aThQVkhoZVEzb1FwYXFMSkRJM1NEa0VYTEhNQ0pUWmFQS3lmUVRVV3I4NnFIY1c2WlRlNW9NN3ZhdE5EWGtGbGNrVVA2R1NVUWhWV2l0RjJXNzE5ZlBPWkhlN2c4V3I3Rm0yNHk4aEhrVG1SZ1Y3dmpQUlhQcTRkRDgwYTBhWmc0M2ZCVjV0V3Z2STZBQllPZ2ZHdXRpOGkva3F4UXVMRUdvRzFvNWZUbW02bnNXWnJkbHVFMmJyMExna2RTaDdGMU1TNXBEMERaRHc4VWl0V0tGbXVzeDJIMjF4RC9ibTd4eHM4T0gxbGlZSlNWdzRZdWp3aHhTMzBCdzI1QjdhQ2JHdGdIWlVMSW02dWVhdHhleXByVmtxK2xGbkJtUlZBZDJvVVQ1Q1Y2UExrWFg0a2FLYmRnVG1GaGplc28vS2pDOEltbGdiTHlyR0szOFM3SmpxdDFFNWFDTWlYb3dhK1VQZ3kzYko1NmRvSElneFBQZ2J3SnJkV3RsT0dKN01DTiswNWk2VjdVbWppamhTbUkvZW9kWGpJMld4UUhqYW1mVk9TUHluV0R0NThib3k4eXZMTjRxOTNKaHBMNXBXQm5SRzZsYWExcEVWNW0vdUlBcFJON1JYblRqSXJtbkEyc0hrWnBHY0c2eXM2WmVXWHo2ZDhuVFRmdFpoUU9iYUJYbUxWTVZxWmtnTkRGZ0RpNlhsVFltOWNVMldZanB6U1NGQVNCdHFxc1NvbGlVUEtVZmJBRDErcGliV1o1eWFZemkvZm1Xc0hSWGljai85TnAwWnpmaVp0SjMxMTFlZGdmQXRYOFcrbW12MjUxZGZFd0ZBdHFHOHR6MnlEekxpRHR2YWJlclcrSnFOYmhDeHRTZ3JNNnE0c2xUSlM0MXhhQ3BCR2hwcERycmlRUVdWN05nZGo0RjZoU1VqbW9MU0JzdFpUZHZkZmhBWW5yQmpVaXptK2d3VnU4enFoc1diM3gvRis1WEVVRFVUUVhRQ3h3ZEh4eTV2aTZZSG5zMjhVaUpoMG43eElXQzM1bDJzR1ZRcVNMSGYxQ043Z0NRS2tlR2dSOGFUV3FXL0JsZjVLQ0FRZ1RtdUxDeE16UmpqTElzUjRRZzNWam82K2F2WHRtc0NKb1pNT2tjYnpGMUtPSEdEN1pHeWtsY1dNeHNlaURzU21Vd0NTUmJ4TStPTVZZZ3hLZ3d2UjVaTk1DUjQxT1F1SHN6dVExK2E3K3VmM2dNZVAzR1JHWEhNMEdPZGJHaGZmN3pJYVJFQitPeHZUaDA5OEJzM2YvREFZM3BvRHlyUVV1NlRFSHlVaDVkdGNpYytPQ2hRRmplRitSRHo0dHZxZEQ5RnRPQ2lBMmtmSUh2ZWsyUExSZnRBTzhkeFl1NGUwTGl6N1dCeXkrd0R4WDZaR3VyWmFicnV6R3pXb08rbUMrWkZrbkdzS1R1THpOSENKQzVIOGdVekZzNTNXckJWTWdLM0lsT0JGTC9CRVFXbTlqVG1jUjhVRWswTEovUUVNRGZnUEhUWkNxcVdGL29LZWV2NFVSNHFHVlVTNXp4QjBOZnlyUWRuVDh3ZmRFYUx0cGNqM0poNEZhL0dUNlljNVp1QWkyRGp1d2MrSWIrbk9JN3c2TWFxTytDdkthMGp6YWVmNERxUW9lVUlBa2RrbTV1NW5QTzdabXdUekFBNVZVZnhvdVMyR0ZBSU1BaEExUytmWVlWSXBQY1hpRkxGQ2ptZ2VPRXdBVWRESUh3NjBQZ3BKTkQyT0ZSRmJ3SU1FYXhocEtXVzcyWDdsbXc4T1lXT0Z3MmRac24yZE52OEpwK2ZGSTRaaG1UOXdaY1phOWdTdUFCVHJ1OGh3NWswbWVDajdTc2U5ZEtnZ0pQUlJnVXNlVVZIYWsreHg4TVExRkdEaE1xYXVsbW5QTG5BdERZQUNTOU9XNkpleGUxRis0dzl2Smt6NVV4K3FnVzg1amt4d3p3NXdXQVc1bUhaeWZ6T1JiTk16Q09jNWpkVnBoWnNVcHNlK3BHZ1JweG1aNCtaODlpOXBPM3h4aGc1UmgrLzRiVUNqRXBoNjBPUDEvR1dacldvcmk3YVpXdVFpK0xaSndZcDBiTk1lZlpod3g0OTlpbjZGSmNBSzREbUFHVElpRldKeERUendsSGZ6ZnphdlFZZDR5WU15RFNZUENMTm1KQ3p1RkZicG81RXVpaVFaSm1RbHJJemtFeEJHbUtwMkxUamlraVBzS2ZQdkYySmRENHYxRS9zMmUyNnN4Z0NydUNCNk15Wkxic0lQMlRkOXVuTTdyc3N0UDJINkZCZ1VsT0I2MEMvelk0cTNReTBwcm5jQVM3SlpNODEyeVlkSlpMNDRnSUROdTQ2MllSYVR6eTVIS3E3TGp4akZPY2J4YVhacEIwcmJaYlVQVE9iLzdxeGtmVFBPZ1ovZEtLUmdHejdiZklzb1EwRHh2M3o5ODNMTjRZb3ZvYWJtTloybmpPS0huWjlzUmRUR2pKcXhJT1lNaWRuSndSWkRwa1QyMnBwa2RJVU5YRlNCaFhLSEd1QmgraGwzK2o1YlNyMlhNTzdTQjNWS2FYMkJqck9NbTE0cStSc09HQkhzd1lGTnIra1lMenFBTTAzbmpCOTlHanFqa2FEeE1mT2FOclc2RTlWTWxCaWxUVnhjV1JpQUpldi9QK1Q0YTROYllxRXNrZHNTNGE0clZLTEtRSk5CSlFGYlNyZmp0Qm1Nb0VVS1N2amZBbEFsWVRqUzBSaDFOSFV0TVdIVzRGbjMwWVUwSTRJOUFQVTlyd3R1TitiZW5sU2N0aUVUUlltNGc0ajd0NEFKSkdvY2Vva09SZ1FNOHowZkg5TkxMYVNRUkU4V2NDNEZma2FzQ2JaaFg2azRzU2JHWE5OTGRJdm1RSE9CR29HVjR0Z05LMHM5M3hmQXZyaTdlbU1BaGFVZ2NHSXl5ZmZlWFNwYkhnOS9kOG05NXU4L3QrVHU3L3QrN2E0VHgvc28vZTVOUHd6c3B2S1JyTlRqMXpwL2svYi96WDJvRS8vLzJTV2UrTnF2Z21SZFUwYUtqd1JJdjE2cEU1RlVlbnpiM283NUFqZ0hFT2tJRjkrR1hJOWZFTllLSDljUmtQeXFRMUdoUFhTK0xMR25tWDJlRzU5azVUWnV5ckZYTTlEbVQ3S2w0TG1tUnpZWUxpNVIyZkRrc0tJYmZDNXJreGdBRGI2UjJ1VGZlbzEvSmFKUDRaMnRRYnY3NWlidUc5dlFhK29NK1hhdWlLYUhaczkxckl5UVcrckJtSW9ndjRZRXpoMzE5ZmR0NmVncjg2NWRXVjU2NHJKK0pTSytHN2lVK0llYmovZUx4Zkk5aEZYT3ZFeGNWZE5DOTVTeHgwcDlJL2FVejJhVll4WHZhcTVhOWppbTcybVNjYnNBejJMYTBPT2JyMHZDUTlZSGRoQXBMbFhhL1dNdW93K2MvK3FWdjBEeXFNcFhMSm1mRUxYOEVhRGJ1MXh2K0VXdEpCdm9vVDBhK2tXMk9sbTQyWTNBa1JtRFFZWDZQcmpaV3Y5MnBKa1VCTmlYNmdvMmRMaGU4WWpFUU8xd3lxY3YvUDJqMnVpNUgyUHl5dE9kM0pPQU03dTFFMjIvRnFuZlVScmR2YjA0aTdvWDRORHJ5ZkpMUm91REk3YW1ydlZxOXcrN2FwMDE0akZGeHF4Ti9lcVY3cjgyYW1hYzcxMjVVQ3d1VWRYNitpbEFpbGt2c1d1R0FoVnFvMk8rVk9LK2RXQ2ZRY1o3U3FDK09xOS9yck1QSU16dU1TYTdLRzJGak5naUxjazMvK281VnRETjFGeERqUnBzaXhNM2pad3l3U2tDc0lyeEJHbG1leEtPdXlYU3F3WDFJd1dqS25VYU5Tcnh2N216cU51VGxVVVZacTAzY2xhK3cvTGRCTzZXODVzVWJ0SUtJWVZLTDZIN0hoV1VyT3I0Q0ZxWlBEeG0rL1doNVJQSHFYNExSTnlJZ2pQRjBlVWxESVR0SE9lcXJidW4vVlRpZlVLd1dpaG1JcEFvMTROL3AvZ1Nxemc3bHVqMHI3V0tLTjZPQ1B4bDRYTEIxQmJ3S0VHdll3cXl6VWJPN25OcXZySG03dG9mcUJNMGRMbmRxdXZkRUxCOG1CNW4xelBXT2phNUpBcVNFUXJYZENIM1BEZXduMmgrd29KYS9XU3dzWWhLOU1qV3NsMDY3b3QzQUZEc2xYbjg3ZFNoaVJudnZtYTZCT3Y4blFPbUhVUVRSd3ZYVzkvRDZyUWNTMDJYajMzRGJJL3Z6K2ZYSWJ1U3BWdlZxdkgxWGZOdlh1dW1oZzNWbXkrclFoeWpWOXlYblJhMmIybExkYS9qSDhiYmFVdDdONmE0UGlsVFpjM21ibGpKYm95em92Y291OHV6L3VQSU5Eejg4NFJPajZ3VzIxMHR5TzBvckZVb1BYWE5RYms5WkpYR1Zrcm9HNlpNeTlYVVBMYTB6NnJTZ3FsZ1hLbGJWQmJxNDBxY1g5My90MFBjWnZza1ZKbHRNMU95Ymh2S2t5dEtPWU0vdVYwc1ZnVFVlSUJGV0ZnMnVVTzBEZnpGOWJXQlh0akRqdlNJSGxWMjgya25CbEwvYi85TmpxNHdNK01CZ3RuRVJlRDVseldZRFMyR3Ewdi8wQ2JtNlJhMTN3SDVBL3JrdHlmTGUzWTJzOHE5cnhiL0t1ckdJam1ISHBRL3NhOUYrM0cxalJsTm1Zb1F3NVgwOFgyZnZyVFBtS1NaRHhkak12VXBMSkhwRGtkQmJjeHdSVDZCeEdDQnNReDFLcnRTVG1zZUFDWkJ4MndrVjNqZkxUWTBJSjZna2k3S2VRY1h1Z0wrdWJRajVYUGJ0RG96Qm16b2N0UmErek4ya3lRdXdZYktYM25jb08wV2xrUXNJL09DWHJjZmI3UEdISmZ5ZjRUUHY4T1ZpMnRzSnliWXpjYk1yZ3JCT1hHSlB1L09obUJFSlVmamduaUdDNko3d2dDdUdDOHh5VlJGTmtVbmQ1QVZxSDNMSEF5ODF3azB1UnlKV0dkYjhqNzJJQzBsYzdOYjJzZ2ZNMjZlVU8yWWZidysxbUtTbVgwSmxQV1pHdzFVWWI2REdreVpTbERlc050MWJVWGwwWjVvNkVmZTUwQVdteHNRZDFCcE1NWWRBNHY5UHVEUXdIWGlIOTZDYjVzTWVmU0JvTWhaOFNhTS9xLzlDNmJMQzVOR1kwcEtnaFpPLzMycVQwVlVBWXFIV0RHcVZhSmg4VFZIOTdOMFJuaWthcGR5bDJuQkpJWlZCcWp3MUNyamdMYTZXQXpabkIzZVlFaG9zckw1QVlJWjJhMmN4cm5iTC9XUmlVUmZkaTA0TXhzMjZUc0cxT2xZdi9QSDRjQWhUb2dKK21hdUVJbGllMElBckpMSk5EbWJITW9FMHFyLzZpTG5DU2oxNGQ4Tkg1cWFWVzlRUkF0SW91MHk3Tmt0dXhFWE9MVUdjNmsyMkQ5L1RjMnMvamZuUkFoSklTaGpBdSs2VzIxNEQxUU1mRUJlOG5nSStRa2VjT21OSC83K1NtZE1QR2RiaUUweWF0Z3Y3TnZHcjhLQmJDeUlBbDAybG9jZEVlNjJ1dmNhN3VzMmRjdXlmSzV5Q0wxc3ZKZWQ2MnpMcndTOG5SN25kaWgyUldOQnZoU3Q3b3BXNHMzS0d2OUo0STRuOGZTS0NQdVhxTkFlYU5SVUNRdk5tYVZUQkJ1TnhqaE5uY3dpeG9NR2RSenJtOHpHdUQyelNuelowWWJ1akpXa3lsck0vVFlkOVlkRW95bWpOM1liYjNyVnJid1hCenBvUFdKdkIzVWVjODcxNSs1c2JYQ0taTnBrQ0s0MkRma2M0MkV3cTdSUlg2ZlBvMjVvdWY1aWRHV2V0ODhwMnRrV3FLd2hGZ0pXSE10UnJNNVo1eTEvNjdUM0NSUjYxc3hYNHpVdTZNcEZEZG5ySWJ1V2dmVnphbmYyRnRKS2Nzbi82ck1yU25LYUV6YTArYytIQ3BtK3J6L2VjZ1RSTisvL2JWV1l3cDNoYUdjM205ZE1qdFFoeE4rMkNHSW9TcEpmSHNRd2dYanZhUmxQM3RIQ0FLMCtkTzgycGhRR2plWWM5Wjl1TzR1bmF3MFUrdXdwTlNPcUxSTmJkWDBORHVzbUE4T1ZUMG5rRFY5SlZBRjRBRlJuTTh0TmpUaHRTRlpUbTlBMmwyQk5LYTM1cW4yRXlkSVQySjBMbzc3b1RuUWt6YWQvMnN4RVVTSy94cEFyYnJ1bEIxZ0pqMzVmVkdXMjBNV2FWWTlXdVJtM1ZJeHJlYmY0dHArNVpLT3g1c2hQVk5uSklFdVA4Y1c4WXNjU2gzcGFwSlM5clI4OFBET0xMRUdPamNYRWIrNWEvK2xac2wvaEc5T2d2dWJ2Q2QvY1gyZFRoVktLQTJWNmdyNUp4d0k4WnhBQ0ZvcDlXdXVhdk50MmxRemFhTHFGR3F2R2hUU2drdVI4b2Irc0JZT2UvVmRvdTlGRk05NTZyaFE4TU9ZZUZOQUdYaUdmR1pVT2JwTW1PVkx2aVQ1L21NNENiZlRyUzQ4anRpOWYvbkpDZGN4NlMyek5QbkovTHhIdE5qcnFhdGZLREtTNU0xdloxQ3ZmZjc2NTJTSVZwK2VRYm9BdnFBTUdWNlByNTM0ZFBhTnBzOVUzaWM5VHhLVnRuKzhTQU16SHRsWXZ2emhyeTN2Rjc1WFlIbm9xMlhMSHY3Sy9HN0JlNFUxZzRmL1dWVy9SaUh4QzcwL3o2Q09mdjdhNXpyaC9wei9KTDFLOHdhcmFPYnQxbGY2NUE5Q2MxK1pJMytVN3dHbVZZVEpvaDZTa2oxZzE1Y2MyUzU1ZDgvTHd1TFlQT0FlRUlBSUJNNGdMN29XcTJML3lUY09yUExlNVlMVThNN083dHMrZkJzbVZ2SjljTlZVRVhucTZDblNnRHNyRVBXUlJzRFpNSnNuKythRlc2S1lockdVNTJvUzVSZ2E1dm1WRlF1VkM4c2hlWVZaRmpBWjFGdmo5UW5ISDlMWGVLeSs5aWNURXl5Nmk1V3plaHVoKytxNzF4eDdGbEh0WE1TRUo2WmhoZVNRNUQ1ei9VVVZpNVNMWElsZHVPeSt4RWZNQzVEMHNRenByaVhVOVJhbi9UT0pxa0V0V0hlMnpLTnllaUorNW83aTBWVlkyNnpwWHdDbHhjZlNaRDlDNzUxL3BjeVlNdkMxNHpMSlZleFVSaC9YNG5WcVVwVUlYTGRyc0F1cFZ0VnRmdXdacjlnTE1QSWlSTXNWanE5Z2FKekdyVkpDU2NlbXdZamZQeEFCbmxUcVFGUWRqSTVITm9lMUM1TzAxWktpZ1lXQkxZQmRMTllrL1pkZXhSb1Y0U0IyZkx3MWMwWENJdm16cTBxcnlGS0JTamlUa2ZvWVp2VG83d3NyQU1IWmZ6UkE1OVlqQlpXNlAxMCt2c3BlaitFZUJaclo4dWVkMDg1NnlzQzVCRGZ3KzFjdUVvcG9yYVpVbDlZVkduTHNqUkJaRXhQTkpnS0Ixc1ptSGw2VGFBelk4RzFlR1dGTkc2S0NjK1AxSW8wdHE5TEhLWVhVZlp3L2Y4V1JOTjczQmZoNWtrZ2VxZjhaV1MyWXZrczNFajdwZnFpNzFtNW9KTWdHSTZWTjFPRjZNbzIvcjRsdWJsQVRSdDZwQmtCTjk1bnRYWXpIMlQvUHpNVitZZWk1ODV4dVRUMVlTLzgyVjdlbk5WWnJhM1ZTNk9HQmdDK3lzSVYrWTNlS1hyM0FFL0FPMHM3NWw5WVkwcFNMR3FsVUJraW9EUi94VkRxdDU3L0EzYWsrMVRkdUx1RzlhV2ZTQXhxWGI0N1JsaldxOFlDYkRBbTNZQkFHTzYrSE9RcDVtSE1kcGpFWXUxTjRENk5YQlBnSXRvbGhBK29taGNtblJkQlJOd3NnbXVVbWYrOHlGSTJJRUhsWWJHMVpNUXpCMExEa053SGtFN1RXNGZ6dTNDMHhoelYzYjJsNjFaQW42Qm1TS2VGYUtTTUlHS2xrZUE5eDY0cTkrWE5kdm41b21ZMldyd3oxOWRjeS90bU1mdzYwM09LVXJ3ajF6cTVWOTNBazg2eVpScVBGbHJSWWNxSTVwUEc4anozVGJEVFZXQzJ0dis4cUZxc0lJN0doWnlzKytUMUxYVFAzeTQvenlMY2FiVDdON2RBRTNkVHRpYmpNb3p5a1ZvS2VBR1kyeHFHNnMyS0llN1JKYWcza1RPb01aY0Q4Ym5WRUpxWUY0VnJIYTZMN2lUSnBrYk1YYzBUcU9HektuVkdhRFUySTFvV3B6VXdmNUFOVllNK2dteUUwN2dSTU1oMFdJc1p5VVVtaGh1blhXWk1tNWYrL0hidnMwOG1ES3JPcmNhNWFzRzVpRGo3YUpiWTQwWG5Pc0VaY1Vxd2JEdi9sZnJEYlVkV3B5WHFIYXRjeGJYVFRUZ2JlSjc4ZVhGNW4zenlMWlBGdnJPRGduaE9CcC92SFRhV0xXaEg2VGRuODNmUjdzdEV5L1g1djdzclFLMVhYdkYyTmFZUFJOcVJxREJpNDBmL242eFFsK0w1UTdZWis0M3BrRU45VHpBQ1ltb0d1Y1R4U2lPY3RZb0EzSmhCWnlLWFZ3anVjdkJvNUdIUnExY2lLT0wvc3VnVDRDR2htK2d3N0s4RUt4enZTdlA0eEI5WUptV1U3Snk4K0lwVTZERUExLzY0UlBjMElOVDYzU3lNWkd3UHYzOGVQczY0QzdGY0xheHUwcWM2cTZ0MFE2VkVDY0VMSmNLVmMyZ3VDSUkycWxaOSt1L25aMXdjbEdDTm9rd0RIeHI0ZVJxU0h2WHp1MU95ZnBILy96NzloQnN5elQyOTliVlU0ZGhsMWlZY1I1RW12Qk5ORWxOSTFBbG9xMXpFVUpsRjZSTkxOMHdEODhMZnY3cDArQ2I0T2JKZXEyWE5XdzF1OW9Bb05JcC9tSlh3cEsvem1oOTM1UGdRUFpSYU5STkpOUHBVZnZPZmVPTmxkaEZBbzJncUFXOFZDUWRsV0YyNzNEWkQ2YVpOeVZtNk83RmxmRGFyeWlydkU4bWZRM3k1THBIZlJIQUM0ZUpkRTh1dk1yVFhhR3FaREpPclU4MnNhRndqRVhmRHBqemdsVTRnL2RRTTRKNmEwNGp6LzFVTGNqK1RmL05GVGlOV1h5dXY5SFVBdzNBdmVCU01IL0NEdXl6U0hSOU1MZlErQlc4c0VRdEUyRUZnbUZBcUpwZFhmaC9TeTgzV09leWU1TEZpSGdLRXBKM2hsLzdXQmI0RjFybDVPV3dYSVBqS1pCeDF4b1hDMTg5d2R2eC9penVGZFhqcUNQSTFQVkY4Q09LOTZqNGRNZGprQmRLcml0U0hVN25nSjNkLzNmN3ovSjFrOEV6VDN6eFNOQmFwaCtiNnkxVFcwckZxTUtvZGMrMVMxRkgweUxxRENBdkRwdkxnL2JVRXF0ZkZmcDZweHB0bEwrS0NEVHNCMTF4MkpsNG80TDF5dktjbTlVdU1WWU1jdjZaUWNrdTlXT3V1T3NrdXJiKzRjUHBWUG50LzE0WnNiU0NkT0JlVVk1Z08zQVVlNjBTTHZ3K0JTc2FwYXlyZUVKMHBzWmYvM1doT2ZGSHpvN29OK3p6enYvM2w4ak1WcHJzeTh3RWxXWlNxTzZJUk1kdVhrVDQ5SXBXb0txQzYrcTBHdmNRazFIc2Fsa1R3eGRzTjc2dmhIckl2QVAyWVJYWkxpTkw4ckhzWGZMSmxTM01Xd3R6SGN2RGNnMytmbWJtOVQ5djViSDM5YzNEait6TGpsMmZFUzE2VnV2THVvb0pEWDA4UGo5Q3ptY1cvdTVmQjZ1NHRjaHh1eFJ2Unp5eFZ0OGJKb1ZiT3VtUlV0WXhyeHhuRE13MkV6dk54MzUzVG55Tzk2ZEQzc1cvOGwrNXpXYkozc0tWMzgyWEx5eXczS1czUmY0UG92UGsyM01xUmNvdnR5dlh5bjVpTmMrOUduaThEQ3lXc0M5aWtqSE5UZVN6TWZmRk5mN2N3Y0N2RWVmTlpMZThnbGhtRkc0UGliNGp0TkNSRUt1Ym56SlY0MXVtbUQvOEZNV3orRnZ0R0JkM0MwcHZKZDA0Y3pSVFdhKzVoeEVaZEE4eGZGYzVyakl1eGRBK3g0ejdMY3k4LzJDQTZwRGdHSDhFUGxucHJEcXNPenZJY2I4VVpGWHE1bU4xd2Q1U0xqbjQrYlB4c3ZjYXFJTlVSUm8velcyVGE5cFhqZHY5ZjNGa3VOV0t6b3p3cWdxcnhTVVhhbWVRYVhwU3lNWVdXNmw3QllvWkxGbmVIN3Iwd2htNm9DS203TWlHRkdhZkg2ZjI3c0tXYVhwZVVsM1JqMUFvV1ZOR09HRnd4WWQwbEpRTEluL3JxeHRUT21Tc0pkM0I1MWhCbXpwUm9QMlZiSVZoUjltclJMVjloWDNOdG9UVEZqRVRXbkIrbkNrN2xPVTJ2czlTTFhaZUlpa1RxZmFKYWV2d0pGeGJsRHF2ZDN2cjlEZFc3Lys2SkZBUHIvdjA3cjJRNmpRZlRRZTZMeldQUEJqZyt1ZC80UWhId2ROdlVmZEtQc3RteFp0aXFyeTdLeWdhOFl4eXNvYlY5R3F0dGo0Q3RndGJPR3ZpdnJxTTdvTTZ5T3NsdDVaWmgva3NxcWh3ZkFCclU5SkV0cjNLYkZmUkZQNGMyU200UDU3ZlN1cVdWUjdOL1hSUzV1Y0ducHJ4NVR2UUNlLzhVb1JlVHFITWpMRDhZci91YUc1SHNudXg2UkFZOTJlYnhQZUwzVHpSS0pXZTczRHZzOUhZOEN3TzRPcjN2WTYybW5wZWJwYnM4ZG1zOFVzWEVZbm9DY2NnVkVqOFBRVjVDckJLclVMSUlLbHU0NmUyY0J5SU9XNnlaYkNyWmgvVDkxUTc2NlFkVHFjSldiT2lvNlgwSisxRjlkM0lHb08zUWtCMVVoSXJMTnRKVDEvZGYvNnRkOVAvbjkwNitYRmNrcEJ3UG1Pb1RPNkhVK1hHY0lqSHdPeUxSREhxV25FQzB3K3VmSjFKS2dncEV3Y2pVUmp1RWFmZGIweWY5TElsb1VYTUNEd0w4VkxuRllDOFRVN3FWVitpclJyeS94V1MrTkxkMDFSeUJDVVRHdjkyYjVYVjFKWlA1L05UdmdIVWQxUjdmRDI0V2ZEaUNwTTIzbTEzTnhKbUt4OXVrcnJsaEY3ekM2WnJ0OCsxcmZ0ZTI0VmU0aTlIYTBhTlVKK3hYTEIvV2ZaZkVyeXBjdFg3SGlIejlsNU5MbUJKN0FUSEU4ZnZJd2RqdkdkMytDWUFqYVRra2wzL3ozd0JWajh2TW16dkRBVmJhc0FnS0cxT2ZBakltSjJXRVBac0ZNMklaYjVMZHNTTCs3Qk16NXdydk42UnF4U0ZURC8rVzdBaUQvVHZPSVdKcjlrOHQ1NVhoKzFhWDJVNnFubHhNekcyYVFjTHZ6R1hhZnQwb09jRld2RVYyWnFRckJ0RFVPNERMS3ZEOGZKaVV2UCtmdGhBZmtpZ0dRaWxOQWp0QlVZcVg0LzZlRmtzK3VDMFhIenFkS1cwN3lOa0pUem51MisvUkc2REhnZWxhYm0zejliVWQ1WHpxNDJ0alpZOXBTWHhrc2QvN21sc3RtSHZHK082WFVlMklCTXpsU3o4VnhUOFVGa2gyZVF5SiszdGYvRzJKQ2xlSHNielA5MEJiUm5DYXU5QW11YzZaUEdDUlhwSFBEbE5jOVNtWXoxUEtRbjF5ZWJoMmh2TXBRdGZiSXdycHFOTFRHMU5sbDJoeHZzRzNxYVY5TGJhdzUrZGJHYXZRcE4xc0hPeXUyd0pMZjVWSytVT25wSFQyb294djRxTW9kVldnSkg3Qk5nWkhlT3Z0ZmQvc3RLSU5yY25WU3pOeEN1cFBRa0FQMzR5c1RuUU5tdDdWYlphKzNVTnBZZ2o1WkhqQnNrS0swUVF0dHp4ZFhYcHg4ZGNPRHJ0SnZCM1l0WDM5RzZmMVRaWS9iVmZaRS9vaUo3c1VETGx0OXQvS1pEYzE1ci9ka2V1TWI0dUN1VjQ5WkVReWtuMlJZTXRtOVJRTi9sM1dHQUJYa0ZMNklvSGY4bjZkdkFraEdMeWg3YmVndmhjNFVTQ29JY1BuZXFhZVhYdmdnd0FlZHd0MndJNjQ1RFhuSzEyMUhoWUJ5alZLMDZOSzQvNDhhTHZvWFV5MnQ0U3BlL2tWMnovVFlXcXFqM2JBMkdqR3M3V2pibzdIWU9tcldvQ1VTUGJOMnVDVlJzVytFU0RYclJ2eCtjaVNaR3RYNGZiNVJLcVVkOW5udFZCcCs5SXgwWW5FSmJVVWFLV1ZOSGNYVUs4eTFuWlI3aW85RExQeWZQU3lYVENWeDE3NG5xbGw0OW9rYjNhd0lMS2h1UGFMV1BYWE51enU5MnVIRU9hSjQrZWo1dmErTnFGNUR4bVEwS0h0eXhqbmowNnA1QjlhOTRmM2FwNm8vTVZVYXZmMHpXUEpBN2hKOEtZZWM1ZVdUQXZoTTZrVko4c1V6aUlETXZLWFViNUIrSkpXNXQ5SlJtZlFvVGgrdFpuMTRvb3AxdExHdGVHWjdVOU8wbWM1bHlkV2JBellYYmR4MnArcE8vQzh6U1FWR2pPL0IzdGxEN084ODNGazJOcVZXSHBwcFdwbkVrMW4vbXBab1Y2YUpkSkhtTzdPOVFWSlN2MGh0YTdDVTRKdHljYmd0L21sRHJmNFVaOEVQZ0tVZy9DY0kvZ0dESmZXTjdFa2Urd1NiOVR1WE4xa20zQ0JlQzdJNW50NENvREFsbWk0UTFETjhRWGR2QVZnNDIwN3g5ZmZCSXJpby9ycy9LMXhhVjZSczl4czdYemtvU0MzalF5bUJvQW5jMGZNR3BCaGhwclBldHZ4OXJyZFhzem1lNFFLZ3NKOFlQcjBhYWJ1bnFnQXhNUVRRRHYrTlBjd3hqMk95TTZkdS8zZm5tai9HdjExa1BRSUJmTkJjQ3dLVHczVWdTNXdGckFBZFJ4VndSZ1c4cVFJdWgxdEhLbE9rcjlyWXkxOGZhb3dpVzJzZzY3WUdMMWpKWk1KVXdvY3E0VHVWeUIyLzdRS0s3WFFib1BHd0JxTFdRRDdXUUw3WFFINnpZUTBJSTM3bzYrMmdhQUg3MTIzZDM3Yy9QRGRjSzBJQWgvdWJFWEszQ1d3SHAyRXlQT3liSDlyWW1mMEIyUHNoQVBNc1NIWm1jZXY0RnNmdXhmMzl4ZjJ6Vi8vN0Q0c1hrYmdaaHRsOHF3WU9xSUVIMUdDZis4RWZMOU5xTTUrR3pWZjJuMi8rTUVlMG1VZXRaY0JlL1NIb2NrWWNjSjc0QnJ4NmRSZ0FvRDA0QjA3MHFjaG96WUxrV29iNjVhNXY4bWVXSm1vbUFHcHdtUElmUUJnVzVPOFdhakFIdm8xZHYveWk0OGI3YmZ3VFBaM3N4QUd2L2Flb1lRQWd2bDlLRXdEczZSNjQwZnYxd2JIeFM5SCtUOTg5clNyTmJxM25OTDFmSGx3QStFUkRPSUFmaDF6a3dSVkhXZ3VQVG1FZldLLy8zWHRONzBjZXpxWGJSSC8vczZEM2IzK1FzenpzbE5Kazc3ZDlHeGxzVENIcHh6STh1Ky9UNzc4NFF0Vzhzb0gzUStqSkJIQ1I4a3I0UnlBK2Y2dURNejRNY2pZUDk3U2h2OUhDbnA4S2YzaUdVZ3ZiZy9kRHVORHhTYUlBS01ULzIxY1o4S0Q4REwzeHVUaEZjVzJpNHA5VjdoWExXMEJWSDF5SGw0dDdQTDIvbFF1b3V6aFg3NHJ3aHYwYWtiS25wODk3UE5PN0ZIempvaXVXbEZOZXMrUC9zQmJQLzJLbkhkejh1bXZyUFpTeEZiTGl3Vnh5RFVveHBSazNsKy84ek1lUGg1UjFHQWNBN3NyVis0L3BBbUpYMjVWc2k0Z3ZBd3F4V0RUYUVGSnV5RFEyRWNuV1hxbEtvcEtwdWFuUkFEVEFoWk8wN1haYktqa2JsbldwN1IzWWFBTlRQYjRwR1RkenVVT3FkWTFXaWU4bUQzam9jVDA2VXl3UUFVbEEyMFlCb0tKbFhSQUpETWxOa01aN3lTb3RaRVFqUUkvRVVjbFdsZFdPWFZSbUNsZU9ncllXVkkxQkw3bWIrNzJlMGROcnNMMEM0ZFpzM29FS2hheHVOc25CRWJGeE1rU0VSKytaakxaSFloSlZWM214b3lWUmFVVDBxam92cmVnY1ZkUnNYamttYUZGdEVlSmxqZVFGVlFwbVUwNFFjYkNIakF6MWlVSWF3dmxPWGtPNkxSNmtYZW9tWE1valpSTlYzZnFxeDM3SGg3ZlVlZ0RWQzErWnFFd2xxNjYzemN5OTNxNTc0K3F1QXIwdHRCVXFmK0p0akZpcGMwQmEreWw1YThjbTdZek5yS05BK0lRRk8zcGYxZnJWYmUxRFNwaE5XUnRvSGVKTmhmc1hSZWV4cXZzRnFTZlU3NTZFMWl5cnNuQlpXeHBZYUdZbUlSS3ZXUzd6N09nLzdpNGdkbTRKRGFSY21oanJLMU02Ti9SYWNtT0poR2hsOVkwNEhLeGtqWi9jR3ZLQ25BcnRkdXdJZEsxSVJpaFd0c3ZvYjVIWVdWYWhDTDU3aVpaUzlTVXErRFRIODkxdUFJanlsVmVuTmExdFNpR2JIU24yelhsbnA4dXFkN25xbVBtbkN3WG14MjFYOHVQSHh6Z2ZFSXRFeTU5dHQ5K3V2N0xYZGxQb3k1bDY3MWw0TUFKMW81V29LSUYyRis2WFoxVHQ2MkxONWd1eFdXV2xFdE1reFBmZHZOeEZyWWdSMTIxUmwydmFzb0Q4ZWc2M3NGNHRRN2xRZUd4YlBlTE1DVGlxcjF3REwrdlNKZlYyKzZNWGZXOWNFTVBLMEwvODdrRWk4WTJyYjlWRHQrUDlHeUx2NWNCV0oxb3U3Y0tkRXhXZXI4alA0d3ZEU3MrejZCdVBhR0tPTC9DbWxpU2E0YnlpTHVnK21SQlJSZkJBTjdHU1owMkM0WEg4ZXBkV3IvQ0I4Z2JVWlVwZVNzNXhOUURJT1lWQTFFbUllaUtYV0taUkExVkdUQ1R4b21Pb2dPalFEY2ZYK3oxcmxPeWhuVXd0RVBaaVFEU2xTUTBYSE9WNXNpOWU2WjNxNjlCbnRDMis2dlBvUHZDKzQrMFZiVHQ0LzEvOHdYSXhHNDZtRTR3bjBIaTMvWEFRcGlMZ0FGWmcwTGo1S0grMVhCckhRbnBoVFowdiszT2pJcCs2YjBnczZ1b1NFN3FWd2p1M3RlaDlKOUJPWGMvQ3dEeS8vYVVtRnFsRkxNbUg1bFUxUjloUlV3NFNhSTMwcUZIV0FubW1TbHFvK2F0dUc0WHNzUzE1emYxU3N5bDViWjNiNHBGWDg3YXlBY2RtY1orem9laHp6b1hFZGFRU1prb29Mdm1WNExtenV4NnZFd1c3UlZDRXRXdDNkQVVLM2ZGaVoxYWRpNlZPUVhjaDZtekd6ejJoempmTUtRcVRqaWoydTJhcGppVFByYVJHSjc3YU5qVHBjZDZnUEpCV0FQOVh0YXBjV1A5eCtqTDhqZFBQemEvd3FpTnVmREF3NjNiWEtrbHJtc0FlK1FVOEpmeWZBMnZxRitSUDNZbjEzZWhoNSt1NUhyYk1SSVl3OVBMdG9YOHdPWUcxa1hlQzRlYTlaMDJNM2FNYXVuejljbnlhdlhyN0xFUVBIcStxcGhpSkh5MEpnSmdBeXN6b216M1RsbFlCQ2RiSXZST2NVZUxnTlpMdExPcEZwclgwNFdLT2dWNUFsaXc5ZXgyYk0yd2ZuWStuTnZNVi9pdnUvaE96eEZIVmJsSkRXYU5KNlNSbHVWRzlzVnEweHJWRVhUZlVLQnVNcTZnUFFYZFVzMUl5VnRTd0pXeHZoZCtpblhROUlDNUtoeEhMTXQ0Zm5Kb3N1dFlNdHFYQUxCdm5RRlFCbUhPV2RsVnIrRFRQeGxJZ2QyR01xOGxoUDQ4UkRYT3VFUU1aaTg5K1lpY1NrdGdKSUxubUxoNE9oME8wZU1xemRvOWJ5b2Z3bU8zN3VoUHJKSWRjTDcyc0U1eDh6cWlvVllta3hWRkZhNS9ibGFvM0FLZ2gva0VPQW1QdXg1YkROT1FxMWJJS3dVbUpoaVlIQzNDY21aTHZrV0ZWa1E1WmVqbkU5Y0Ivc0NJaTRsVTBrWTZldFJVTmFYdW9RTHl0SjBOb3kyb01DZ3JMaUpDZFFSM0RCT2YreXhVQ2p2TGZRRmJFZWEvVGw3MlN1Tk91cGxUK25CdGFXZ3JseXpOY1JPeHNiWC9URmRKeS8yZ3hQYTNvVTJHcFliQ2hMMnY1SDJheUlOV05RTC96bUt6WXFVQ3NyVjJhc3JlWFJMNy9jbDRhVDY3U01UQXhFZkpMd2hPaE5oWE9KdS9wMHdOL3ZDVk1xQ3p4T2pmTjVlTFJMT0NLSWMrTXIxeGU2ZkF3YkZzVzRMNGMyN20rYXRvQWRBVGJwbC9OM1JKZ2JCMG5mTTI2TGZ1S2tQUnNEU0VBMFZNVGpkRFhZN0o0Zjc4K1lGL1A0K3NoVitoY2xaVEdmeVBUbTkwdVZLUFJjQmh1dEs1Q0tXWWU5cGdhOGN1Q3FSamhjTW81eE5oNFFjWTZKUjNhazVZNDFtNVNSQjRXRkZVdHNpcUFValVTTUJaNjdQY01JZEJNYTJpY0ZKN1U3ajFXc2YxT2F5R2NxekV6QzNpQVdVYTVDaldhYzNpdjA3Q1NKUkltR0ZQYmlkM09yNVdDd0xmMis0SjJMc2JVMlVGaFZTd1RyRnFEekljNENtQk5qSkRXbFZiVGFEUWE0bVlrWHBkc2t5SjNkVFVlVDF4R3RsVElKdUZNT0duaE9sSEtraE5FR2hKejlCbCtqQWxETUNvRFFtcVp6Qld5VVZTSVBIVmM2MlFEWmc5UEhOd0ZaVERFa0lrbG1nUWlZTEJRa0Q0SFk5Vm9yS3RhQW9TTEtBRnBOY1pVU2htd0lPMnNsUldUTmpXbVZsQjhmNFJSdnVGZXh3b3FRMVprQmF2amh1SmkzZ29keWZESkt3THpBRkR2b2hhV2hEUmlKOTJqVG93bjkzNnR1d1RpM0psWWxNdHdPQ3l0MTV2RjFhQmxBbVpBODJvdE9kSUdDeDBXUUpvT3g2LzNZMW5ab2ZmbmxEbG8zYi9IOXIwU0lETG13WU91SmM5ZGFmMnRXUktBTGEzRFY5cEJHTHRtYnZhM3BDNGFKNjBSNlhxYkdhN1IrL2VUL2Q1UXFuK284b2RZOVdDK3B1eVYwMWhpQ0h3Y28yNFVwVkYxSFIwU212MTRJY3FVc05CanBZcmFYb3BCRjVKYWg2Y3FPay9KYUZYbXA4bGswSmFNZ2hDa0ZCdlFEUHpyRnBRdUFPSXNhWTJ2OTJZd3AxMGdORkVwY3JkaDd0YWVNTFJ0VE1reEd5VXhTVlZnRlNtWFphTlBzeHNZK0lacDhKR2t4cE9iQUY5TmQwYVcwUFB3bnJyOEhqQ2JCQ3Q3cGNyZE55K0gyOG02UStwWGo0OCtVTUhLQzJGTmoyUTNlZiszYVJxSHVSRCttYi81U2Vmdzk0TWFNTENmR1ZaWkNTZjZTNCtKZS9QaEIrU21LMUpmT0RVNkUxWlVxNU10NnZXYzl6YU9VOVZsa2d2cTVJemhlWHFMaFkzcDlkTVA3NW8vL2NYaExHZWZIZXphSzg4ekpWMWY4LzU1aTZyNjllUWZaWEQzMWw3NHBPYmplclBaZlJrM2M0ZngvTFV4ZVlndGJNN3V3LzFxb2U5emJZbnArVHlNQjdkVzA5L0JkeXpLYnF0ZUtIa3NHbHlRVUZiS3hkN05OZHhkRWtaQUFCQThpbE1QR3p2UlNnR0JFRHpZTVhublVGelJUSFVTZ05aN1ZVVDZrZUFlMjVwcWY5UVgxZjg0c1dEaUk5UEhFYlU0Wld0TFlMUEVUNlYwUU5tOWVsOWkwTFE5SGU5NFF2Q2x1bklFR2lSY1JtcFBtWlFwRFFubUY2a2hBQVB4dng5LzMzLy85OExILzF0U05LSWZBTUJhK3c4WjVBRjhQRy85czZJbitlNXNEZ0dnWUFBQUVNQy9IOGdqdDZ2ci8wYTlVNzdYWDBCb0tCVkNlbzdnM1lTTnQ2dlZRNldkNG4vd2xlcTlRbFpOWm0xSXp5LzJ5dWNML0FvSVJ5NERwZnVNUTMyd0pNclA2Q0xQVURmaDZ1ZUJsbHJoUmZBYjhJTjVXNWVTVmNhcE8rcmFQaSt4YnpyZlhhem83T2Q4LzdMWTFRNmcvNTZsMHBlWkJBcW8vcjR0NEY4eTMraGlDR2U0bmtBajArWFdVZ2t1L215Y2ZWMnZ4RTBaRHZxN1QrYVV0aE9VelZmOU9KQVZXQW1Bcnk1dndENG56U09mZVkyZHBVdHQyK2FBZlo2cWQwTmxMc2M0KzRrNEpXRnZmOVFUcXZ0R0xlUmpaaE9DOXhaNTFjTDNzSUQ5UTVValpkdXgyd1dxa0twdEZHVUlMWmxITHdyWklUN0ZVSmNpcEJEOGZLRTl1KzgvNGkwWDh0dmJ2T1lFM0JDUGpiSGxIanRtSXRreHZpc2kyb0V1Zkp5MElRWU56RDI2bzgrSzBiRnNsNHZZL3VJSlFIWW9lTjgrV1FRNmR3SlBTMWlKd2srejJGUzJweWU2cmMwdGJUM0I4MUxmaDJTN2hoZlVtckZ5THEwRW9taUliNTMrWUtWZTc1TE1kQXdEa0pzQ2MvMFNDc1RzeFUrWVdtL0tldWZLK1dqY3NGN1paRnpiaFRFajNwbjV5eFV0RDVWV0Rzc3VlQ3RpYy9DMk1kZkk1N3pJOXIyUUh1TlNmTDI4SnlsejVkazdFbklSUDB2dFh3eHZPMkRyTXZhcnhHSkVxNVhYTEwrTEY5Unh3ZWxJZGhOeDBiVEh0Sm9SUFJLVVRpbnlsWklFNEU5WG5hVVRRRGdveEIyTUFwQW5Ta05LNUo3dTRTdkJ0bk8vc21lLzN0MDBBdWJKL01IZlIrazhaRWNGeWdNQUJOQ1FmclEyRkl3RHRUc0IraDhjZzhNQkNJekRvU1lIQUpiQnR3YkUzWHNjNjkyL05PRFVyallsR2tnN0Y5SkFrVTdYSUtCWVc0TUQzcDdkejlITU1yc0NBckFyNzBJK2ZvYWMzVmVROExYNVJJSjJSajNNR3RWcllDVkcwdEE2S05Xd29kcmVPcFZhL25qWFU2eUhXSnhadXliSjZ1NmdVNGQ0dzE3YXpFSk1vVjhyNHdEK3lrcmtvRVo5MUZacTVITHg5aVhvQXc4K0hEQUlNMnBxV1hEd3pvZlhQTndic2cyZlIrOWs2eUtGZ0xzSEprWDhRcGZtalZjZFltRlNnTnhlcjJPWllnb0VEWktCOVgxbXNtUktFbmxySURRTlFQbEFVRFl1bFNmR1dNY3hlSWVmZXFNSTZ2QkMxYXh3NDk1dkliZndCV0h3eFZVdlVJeVdqdFR3VzFUZytjWlREYjE5amFycCtmVlZFZ3A1Zlg3czQwSzhOam5xcmpuMHRZMjFGZE1iN1lvcGlVMXhWV0tWUHlheHlLY2s1bFJOaUcyRWJSdmdVaWtvVGc5MVNYU2diQkpjYlMwd2E2UUJwaVJxbVUxSXBhb2tLaTVXTVpHTmlycEdTdUdVUkNaUXBUV3FoSytLZWFxSXF3bzU4UUthUDVYaDBkRldrYWx4Y0Z2WS9QVzNRcnI2dzlkYzEzYWxKbTI3cml2dDJsd1ZoVjVGSWxwa3Bhb0JFVlo1WVZheEVGWGFCTmEvdHBqZnhkWmV6dXR3K0RjK0lQL0ovNHl5NE56Z3JnYkl3WDBFR2JWQ1phV3dsclNTY2o2Ty9FMCtJQkZoMGQwaSs0NXYzN2RtTlpYSzlUWHdHdjhNZlBiZXRDeDZYTCtBcENsRFcvSGpOaUsrN3ZycTFTczQyMTI4YmJHL012aU1jNUdvNUpjM0ttZGRaMjhvN0VVN1ZyQ0dCUFo0TnRMODkvdGxYRjBiSVltTkl3QkJBUT09KSBmb3JtYXQoXFxcIndvZmYyXFxcIik7dW5pY29kZS1yYW5nZTp1KzAwPz8sdSswMTMxLHUrMDE1Mi0wMTUzLHUrMDJiYi0wMmJjLHUrMDJjNix1KzAyZGEsdSswMmRjLHUrMjAwMC0yMDZmLHUrMjA3NCx1KzIwYWMsdSsyMTIyLHUrMjE5MSx1KzIxOTMsdSsyMjEyLHUrMjIxNSx1K2ZlZmYsdStmZmZkfUBmb250LWZhY2V7Zm9udC1kaXNwbGF5OnN3YXA7Zm9udC1mYW1pbHk6UXVpY2tzYW5kO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjMwMDtzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24veC1mb250LXdvZmYyO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdNZ0FCQUFBQUFESTBBQkFBQUFBQWRYQUFBREhUQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHbHdibkZZY2h6QUdZRDlUVkVGVUhBQ0ZBQkVJQ29HcUlJR0dWZ3VFS0FBQk5nSWtBNGhNQkNBRmhVSUhJQXdIRzJwZ1JRZGkyRGdBYVBBWkZrV3djUUFGbSs4VFJka21uVWoyL3lsQm16R2hkZWhiWlNGMFI3dW83aGtaQ1pHVDZobnBvYlpUV3h5NmNPRGgwRWcvOW8wRlIrSEE4czNKMWIzdHc1OVhvemdjQ053alptdHR3Q1Z4WDRoTG9wRWtUYVJYdDBaSVkySXQ0amY5MlhzQ3ZNUkxVd2oyUW8wSWtoY3hLa1lxNWlRdGNmbmltcnBaMGpxSHRHbmdKYmwvdERxemlpcWRxd0F6b1EwVEx4ODZNenBYNXRJNVQvenY5Njk3NXI0QW9vc1JCREpmQmJta1dnc0l0b3FOYkcyWEo5Q2tlb2JIYmYzekJCbW9HQTFJNWFneEdPMUdUYW9ORUZUTTY3SXVvbjlGWHZ6ZitpdWl3UUVLL1cvYWhtaWJ6K1ZkRWJWVlI0WU4rUGQvamN6Q1RPN0xud1dnSXFGbDVRQWwyMVlCMnA1S0pGbEw2SmY3WmVCemZ1NGNGSjNxK0FPQzhRVjY2em9iV3dZaFd3RC9WNXNtdkVYb3pFbUVUV3Z0S0cyVFBHM2hXY3BRbTluUU92UjhKRklWZ1pCZDJtYkZjK0kxZllYdndOUWtaaXZxeVAwZTkzODZ5MWJhOWQzekJxR0xxd0FYM1hwemJUSDYrdGJYekdna0EydUpmUXllbGZXZUpTdmdDMEpGVUYxYXhOZFRVMkhUcFNqN2xKbC9uZW1xNys5dlNNay82SmFkR3NzcXJnR2VldG5hTlZQTDR6K2Q3cXgvc2d4bkYyVDVlZ0hTVVd5WDdBRERWTUt4b3h6MEJjaHVYeGkyQXNDYXRUUHl2Z09PTlRPYnJPU2NjR3VDUWx6aEViS0IvdnJ0ejFpckg4aHNabmE3OW5Jbmh5MHlSRUxDSnlMZ1dmODYvM0FnVERBQUFMcGpORWczSk5OUVpMaHNaTG95cEZ3MXBrNGRjdGhoNUtpanlBa25FTUlCUXArdUovaWxraGlwdUNQSGVnK0c5bHBGb1EvYSt4T0tjNkhGQXhCMnpycDNvekFYYWlCdXhWTThWbUNrV21WN3R0ODNVcWw2aTZ4d3lhc3dDcFY5K2N6VTVPZmpyTXJIL0IxYmRzU1pLN21TVy9hL3RDbXZLb0pFaWhZalZpS1BQcnltS1ZEa1AvOXJNTU1zY3kydzBGTExyTFBSRG50ZGN4MHpLek0vRTZpQXBDajZML2svYUtBM0EyOE95VnhhQzRPbFQ1YWR1UE1QV2ZaQjB2QmtSdG5jWUFHZGhTdVdibG8yNTFyVDllQ09DS0xnZmJZR2txQko2VlF5YTRLVEdJSFVnNWZocVJTWUVqTUhSeElISStsSjNGVHp0TjBwV2g3RERERlBwdG9wdU40NEovQUlrZzFTZU9wY2k5aFAwUlRRRWlXT3d6eE4wMFpIVStVcFMxR0Y4QllQRUQzQUJMRjFucUxGZkF0U0lkczR0WlFyRUpDejlUS3RaMlRNVVZoYXhIT0xXM2lZU3QwcG9FY1lnb1N4NDdWRHFjeWhrZ2tGUFlIZHZNU3g5VjkrdDc2TkxacURCMm05WVlobXRtdjR6MGw3MWFEWC9oY3pPd1F1eHE2azFsVUM3bm1udEcvUDNTenpLR1EvZndSVUQvY09NUWlESXBUZ2p4dnZiL1Bid0U5c2xBNmlqTElUeGJrR2xwMm1YaGZVMU81QS95SGVhYlJXSXpJZFdqV1oyVzA5OFMzTkpteElVeEQwSlMySVFxaDcvRExPVkZVWTlJLzA3MWRxSkZ5NGdOOVNOeVBzQXFrbEpHWFBhZmVNK3hiRjVxSVljL0lBQnhtbG00QmNCK29QT1J6MTlDTTJvdWgyb0d0RU5OMkFKRnJDVnpPNE5vRDNleFdTRUtHNHNqTUR0T1ZKU2dZTFYzb1NhTFllZTZPckU1OUpXdEk3WHE2Rk1OQjZwQmFEem1TRzd4OVAvbmNvQVFDMFlPNjVBVi84VnFSNXBDN08wS0pSU1RpWE1IZWFqenZxOGZENlRFYXRkU2VFZEN5SnlPUDdIUzBITnNjam40RVVIN0lWdjVCOU5jSHQ2UStReHI1TmdKbEVZcEJibDdpV0ZUZzJTdnN0TkxwazF3ZDBFT0IvSEtPUDUxb0FrS0hiazBjeGdhVVNtRWR6dnZSRVhmWG5VRXF4cUdnZHgvMXBVQm42eVNVYmlMOGJrSWxDcE9DMkhGL1kweDVxcHhUTDZMbWxVUGJGT0pNallRRGVZSkljWUFodEtWcWZyRktJbmdtak9JNWV4K1diU1VBckNHTndoSURpYUtQUVYxMmV6YWRBMDRDSEc4NUxZbWgyZ2lNRW9oZ3VGQ0U3V3QyUm5wWk9QMExBbXpqSk5KTWwxRnFRMndmYlVCSmI4K2dkZmlTR1NXMWdDMXRaMHo3UVZRZGRvVFN5c2pTZWJ6b2xmeW9oU3RnZ0JlZUxDSE9EZk15bzJCT1M4YTEyaGlkcjNZVWhSRFZYVEFJeEU2eHdtczBERWcxTVJGSEFHdEdaSkxFNkN0QlpsNUoyQTd1bFRQMjBNalFYdStGR2NSaGpDb1ZYdG93Wml0aGVBaWdibG5PWklSZ0RDZ1lLZWpqQlFvUTZoUmgyTElhckdXQjd6K1lpdEtBdXFFTUFsOVFESWdIYzlSc1lpVXpBTmdNc1pHTExvVWF4YWtrVnJmRG96SzIxMFpiSzA0WnBpNkNFQlZvc01PQUFVVmdRaXdWMkhNakJEdUtVZ0pPSWd5WGhFTW5zVUNsU2FhU3h3NlRyaU9tTVJWMjRXU0cvQXIxb2I4TE45TUZhZmJGb3FOcmNjQ055NGtpanFJd0JKbE53QkM4bVdWZ2xHK3RNWit2NTVPTVY0RWlGMktDSWJWU3NsRm9aTnBtRnc4MlhXc3dvQzU2S0QrcVVyb0l6S21udTRHQVplSlovRUFCTTRRV1FScEZxaG9WWUNRZlBkcE9oSEdhV3V4NGV1RmlIbnU0MDBwbzFON0NYVk1uZktqUjJZZEZpc2NXcUZxdUJkTnZBYTlkeTh0RVRQKzcxM0x3Y0RQeHZEZDBhdys5bmV5ZmdkL1kzOENFTDVzSmlXQW5yKzMzL3daS2NRbndLanJYaU1BQnBEdUNvYVVpa0dJU2hDQUVGeUVFVjVKZWxGY0hCcDlMbmUvZS9hN2JNRXc4S3BQNlpaVm1WUjhTNW9iQW1WWkpXT001eTBqOEJBQlFZUVRVbVF5YVpHRVQxeDlIRENVa01HMk0ySEVPaHVYNUhqVHVCcFNwQUt3aVhPbXNxQnFEQVh6UVVJd1orZk9CSHZnWmhZaFBHMy9qVnlJdkpPRGRCSUMwaks1c0tuTjc2cVV4c0k1Ump0QXBpdndjbWVBUUs5RllLR3NFU3RDUVFvZzc2RzRaZW1xVEpUQVJXMUQ4eUJWSVFCVk1JaGFadS9WSDdoU09CUkZLUm1qUWtTYmtnUUhvaXJZemhLRlhYN0xJSm9MQzVhYW5pMHhnV0xnUmdUZ2xrck9hMVdNSnduUTlYemxjZm1BRHNoUTRIOUVvZW55NVNvckhyV2c5dHMwcEk3di8zc0Vld0FhenJ1QytHQ1BDZnhya1Q5Q1lBOUM5YkE1QnhTS0szZHgwQVlJL2V5aXFtdEJ1QW8wdGNOdWJyODB3bDQrbTRNUGo5bUthV1AvRkoxdGx0UGRVek80Ry9oTDlXanBUTnNsVnVJeWZJNlhKWHVWaWVFd3F0NGRibWZqOEFDQ0p6U2ZkbjRwTW80M0tza1hXeXNRVnBqRDlTd20wRjlBUEF2d09BTngydXZjYjJDOXVBQzkrRUM4OTR6enFmR2FQN0tPYmhybk03ejIwQkFZQkVRSDhuZ043SzkzWjFldVZ6TlBxbjdUUEhJdk1jZGRWMWk2MnozbjlPbVdXVCtaYWFhWWtMempsdmdXdUloaVJRc0dhMG1vdGdZR1JpWmhFbFdxdzRkZzVPaVpJa1M1Rm1qZit0OVFBSG9rSjZiLzNnYmpMMTFrZGZPYlEzZ0JoNjZtdTlzdjYzVHVkVG9GQ1JZbVZXdVdlMVMvYWI2N0RqampqaHZwc1JjVXVOTFM3YjdIYlV1T3VpMy8wUkRsZmMwQkFldjZtMTFULys5cStGQkF4SGhTZFNDeEF1Uktnd2tWclEwUXNpYTgycXBiWmFPYU9OQkM3eEZLbGlUTk5lQnJlTzJ1bWdrNjU2NmE2SG5vWVlZS0JCUEVhYllLeHhKaG52cklueTVjaVZwOFJVcFd3bVIwMkVqVGJZYVpjZENBMi9FQUJvRFFCc1A5QnlRTDhGTVA4QThKOEROd2NBQURaMkZieUVoT01VTENXcW9waElpRkZHUDYvSlNiYm5uSmdVeFYxRHpMUUFoQ0pJdUViQm8zZ3lhU1VKUlNOZEVMSFNIdElNM0hIR3NTTnhmZXdFbmNmcjZjQ2dNV2w3amFhSjAwZXhRdFFSOWlpRzRDVXc4Z1NpSm5ud1NiMnJzQWlwUkVsbnhDWU1zNmNTeUkrZTJSeDZFcWIrQ3JHRUhtT29OQU9GcEpTeU5sQVRoSFROUG9COUhRT3J4NGo1WGt6T2c0UU9DV21jUGpSeFRDM1U4WVBvdVVVN1g3ek12cmtpV283ZEpzWm5RUUFFN25uMS90NWZaMlJFUW1vMHdlaXV2SmtMbGcrd1JPa3M1eFM4TThXTGxUb0V4S1JKdU41Wmx1YzlWeG1HcDNYb2hTRlpnNjAyaDBQcGZRamdISExkVTlkWUdaR1VqRjh4R1BhZnBDaU5CcTlWNmkwNlQwNFlZcDRvSzE0b2MzZWxyQ2lWRVlEYy9qL3lRU25QT3RhSm56SEJhYWhjQTBDZkFDcThTNzVadEFrMHBUbktOQXV1TVFXUWJGaXZ0blBVeG5NTFFPdTJmRW1OYjFacTU1SU1jNVFadG1wOFZ5bFIrRkJZb3lsWHBYN1ZCREFtZG1JdEhWMkZSd3hxM2Y0ekpveDR0M0taZnBzank4dS9WV2JVZzdaMVI5TWdwYmpKNHRtNFdBRE1RazQ1d0RTa1VSZ3R5RW13Mk1LUlRXREZaZE4vRkdhUmZaSGJhN09MWU8vdVQ0aUhCNHFNY3F0SDdLVnYwYnF3T1pGL3RlWStEUTRvSFVRWWhRNE9WUW9iVFdOMVM3REI4UFhjK3p1eDZPUTN4TzFGZG1FcUEvdnlpSzN0dWFIU1JhVzQwT1kwOFpWQVBUV01Yd0s0WkVPeEJoQzhmVHdhc0doeEtTdDd5UWxCb1Q1MG9yeCtrTnFvbUcrcUlNMTRUeVhWaFNJRDEwdUVJMkNjdUZPcTU0Q2NRdk56eC9wY2Y4R29kTlkvUzN4bWFWK3pKWnN3NzlpbGU5Ri9VOHJoUFZDNG1RbGNNRHJib0RZUzZDTmI0QUt3eHArUkVGVlMxVEk2VU1adzR3WVdRTlBRVzV0TlRuRlBkTmd3MEZNK2RxZ0hnODI2SjhzaVZpM3VuUTRUbHNpOWdiN0c0NW1XTG5kL0R6Ky9SbmE4UkxFZTU5bXFwcjdTaG9xdFZ3U0l2Zm1HZFYydjh5cHFqVTd2NWo2bnJQMTExcGdzaUx4TmplMVdIQjhiTWpwV0o4MWR0UzJwYW53VGd3bk4yMzNXcXc0YkRKU1pHbEJKVFNEbEhlTVlaWFp0TzlmdWxXTS9lMEROM1p6TkZiemYvZHMydVhJTEtneGRrd045V0VUWnU3bHM1cmt3d1JLd3lWdVYyRk0yZWFsZkdWYWgzTFUwcjUxdFdmTTVXRkhDSi9XTVlZVWpoV3krY0VvOGV5V0JNWEV6V0NWTGt5YllqajF2clZKZG5PUlhleHNyZ1VETHFiYWgyb2lEODU3RVNHTGF2dGtUTEpSZm1OV0U4ZWFHMjkwV201SXNYaTVUaDdXd2xPOGMzTFNuM2V1aTdXUjVIOHhEWTEyTENiQ3lFeFYrNng0ZjN0UXdVREdyM2h0bE9mQUc2MzE4eGtyem1zamJxd1l0RVZTVzh2UjlLTGVoWjdvSjNva2E1aldMVm45cFdxY3JtRDJWdkdPYUo4ZW4rS2lPZFVia1BYSlFmVzV4WmI3VzJSZUR0T0pUYTBOYk56d3RSSlBBWjlSdHFTYXgwcUdsTGs5Mmd2MURYNU9VUSsrM1k2dTBVSzNQUHlEUmM4ZUlsbWtTY0VacDB3UzJ3NndjSzMrS3FuSjM0eWVOYWJ2RjUvUnlEUjBqNzhIdzg1SG16R1ZPUzBXSWc5SkFlbGdPNDl3Tmt0STdoQTBXOWt3SnVqOUNFbDJHYUJMNXFrSlhKbWdzc1M2YWdOVnY3b29HaUFneGFsKzNxd1RYZlRpbHJDbWxWbG84WTBMTTJEL0FOaGZ1aVNKck5YVnNCeDBXdFBia1Zrdk5hSGxrd2dBMWNPUXRJeXlFVWcwT0hIbHpkOTFRVzNybDNXMC9zM2R3bmZZSzBnQ09XendQdElDSFZuTlg3ZUJnUm5SY0dRU3JqaXVjMXdud3FXVWwxNnZSWjlWaFhTZU1JUzBrZkpDNzI4a1BrL3IyREVkVFBJOTBHS0FKbXR1UmcwcGpIYUU1Uy9sbXk3SFFDWTNnQnFrYmJrcERpdDdLTVBwOUxrUVFTWi9QNUlxRHdSQ2VQUno3ZDM2ME9nYUZUanNlTjUvRE84bWE0bEN4bDUxV2NwTzhUbnlkdUZsbWZoZnpWbXQ2ZWNoOExlbThuK2dRS0tLaGd3MkVYK3AvRGVzaTlHQVJWZ0s5a1RsT0xUa1FJYXJYTWJKWnRhRUQwNmI1YmRJNGFKK0VUWCtBaVE1SmR0dWNRMVhhRHp2REZxMXNMYUpjM3R4S1EzdFFMZXlVcXlLV1ZRM0YvcTBkRmo4WUQ4azZ5ZGRWRmE1K1ZzK0RTRzZ1Qy9uTjljZW51RU5xbGpKLzRjb3QvbjdmK3BpWWVZVXBvK0ZaT2xGR3hSdlYxV3k0VkVQR0tMSnBYN0FCM3VDdExGMmJtV2FJQmlORjZoQjkyM0cvVDJtdWR0SUUxZno2NlRVdzNBYnJRcmFsd0VGaE8zWkxMWkpHeld6d3p3TGpEcyt6OG9aazg0Z093b0hVQUhBZ0x3OFhoMmFGTXI2NmpzNVNveGt0SllCZVRyUmpYNXpuQmtkbUk5TSsvMWhyY1lqWXRkWnJnYnJWVFI2YzA2bzNtdWFDa05aY2pyZlBzWGxpcGFqTkx3YXVmTDVFVlNLRUFIZ3pvN0VNeFlKVzAvb2lKeHVOdGtvMFdtVS9PNDROZFVXekl1c05rZFpmamRmU1ZvMng4T0RISDZMelRIdXoycHdPVC9PY0JFakoxUlVqUjhiODc1TklFQkJ1bTNCdHQ2ekVvZGIxaE1kb01ockdHcVhVNDJCMG03M2t5THVSb2E1OFJ4bkdpS3htSUh3dGdOU3V2a0FxdXZSMEtOSnd2MzRZZTRZOStwdlczNUUwdHNGRjFndXVqVExVMzVmcFU4RHdsQWZQbkc3SDAzelc4WDBkSm5tdkp6eVk0NXg4bGhENmcySkFURVI1bXgvckV0M21OenEzT2thVXdKdklmR3UrZnE1WGZCT0hqYWZ2UUQ2SW93aGhiOW5RYXhUNkpEZlNiOFZreHJtVlZucXU1clhJNVJxN1JIeU1KUmlOSm5PSHQ4a212YmdnellqZ25UbjRkeWV4Y1N6TzN2UXlEb0o5bFdJanVJc1JLUjhmYkFBWG16dnNsdk11YmJvdlRhbWM3SzJiUlVmMkgweVJqTHRKcWVUdXlBamU4WVFjSkpBMWRjZHR6dVZDZTAvRXJoWU5Jd3UwWU96RXRlYitTbE1LT1VRc0U5dXVadXZ1UVhXYlhwWGxDYnV2SkFSWFB5QW16RkdoSSt1T0dNQkg3RFBPMG9EVXcxTTc4QU4zaEo2RUIrcW8wWVJoSTU4YkJYQ0lVTElteWdoV1ZzYXlzSVNRQjU2aHFCMkhJcFh6T3pPOUVsRnNkeHVCT1gwaVBoU3hOUDllVmh5U1NJcDJFelhrYWJSN2ZmUXhrZWlURDRMMEZZQ0dHaU56TURkSWpYaGhkelhQemVRNnNIVXdEeWdkVXN3eCt1bUtpcTQ5bzVRcnk0RUpQY2h2WDMybUoxRVpQdkxySjZwY2FWdW1DM3BRcVh6ajJldlg0b3BVN3ZOdTJhK09WK2VyeHZJajJVYmw2QTNuUnNreGtXdzlmTkFlalZ3TUlFNVJIRVNvNXhyMXhOS3M3Y2NOOE53MzFNZi85dFJBS05ETEhEN2NMNjVtbWVwYW9oa25QZUxZbmNiK1pHQVZzM1FtZXM1eUJHdjR4YkpSN1J1V2pLSVd3UTZsZkN0RnRIQWUwV0NvbzFEQytTQjZKc2RucEVtUGdCMmdTUTZKVWk4VkZvSUJoVjNraENoZjAyWXhqOUp2ZWcvVEtxVHdnM2VIUE81c1ZrV0RZdkdDU2FCdXFJN25hQTlvTkI4NzJOZ291SVFia0VySGI4OEoyZE5qUzZKcERyVGZWN3JoOFdyeGtyOGNCM1poMTJLbk1tS3FIbzFwT2VuaHRGNDZhekU5TGE4N3VjUnYzSlIyeXlRN21JTmxmZG5Ham5VSmV0L0YxdWplK3FPNlN3NnZZU3A2RFJzaUdnSjVCY3hYVm8zUjVMVitZVjF1dXpodmlYRCthYjFaR05EeDJQeDRucmFtYWNidHFIS29jeXYzMGV6QjI4R3JralhlMCt4QWtCd2FUTXpMZFltRk85Ty9nMkdJZUhBU1ZOclR6NFV4ckk4VHhLampWSnFydDFYcmRJN0RNKzNEZStDUTFmVzUvVjNUWEhkZnhvckV3TVBUYnhyc1JhWXBubEtITXh4WkhzK0pjZk1iN1hHcFBCV21MZnVDUS9mU3pldjJQUmF1Q3o2QWxsL0I0RUNFdnRGbzlCckdFZFpwbklPSStMZ2duNUJicU93U2JqaS8xaHFCYTM0bjlmSjlBRDNVOGlidWFtR0dkM1cxTHVSbE5vaHpuTGt1aVBlRDFqM0NERHA1VFZOR0ErRmhkWG9hWUV5TVQwcVR4MlJud3BzOEl0QjlmSEozeWE1RmVnQ2xmUDByUmxsOWQ3Q1ozMzNqL2hnM0cyTXRhdk0xZkJVTkJyTjFUZUZXRjBvYzdpd0NvUXZLbWVTcGhCUmVIdHl3MHlpdzkwbjZ4cGdDWXlrbW9OS0dobWgwSVZaWThLQmtPMFcxcHFZSWk5TWlUVkc5NEoyamgrY3ZPUzBSc2VRSzVnVUQ4RUFxUDJDYXI5SWpWaHRWM3N3UFZOelRCM3Z3WUNraVdCVTdyNzNONDJCQW42TjFHOWZsOU5YL0Q1QStKM2s5UjZOVVcvTnlicVRyVnN6dzV6Zk9EOE5vMW90WXZYMlNnWU5YMTBEYzVZb1B1SkxVajY2ZFR0Y09sL1BFYllaUGhyaTMrTysvRTkrTjlqYmVhUXJPUTVnSjE3eDBDSjJtRG9ZWW9OQmxUTldOSHV6eGEvRHVmanJ3dnJHMG9nK1lZYkZDYjBUQkQvM283aXR6TjdkelhHb2R6N2ZKMzZ4c0RPa3lPU0E0NE44ckhQdi8rVE1hREZwSm40MzROODVNL21jcStDS29pZ2h5d2Rqa2xWelM5OEhnNlFHQkdWK2tTYWExSzBseVI1VGtEY0ROL1lKVHBSL3pmYnpTa2s1ZXZGN1J1ZEZZS0pxbUloRWlSRWlyMDdGRUJOYXo0RUt6NzgwQk4zcUs5ck9iKzRZbzE4ejc1OG5ja2dTNk8rUGdMSFprK3ZYZXI3SWJ1OEJxdHJiczFmMzNteDUySGV5Wkp4M29pRzgwWHpkYkE1Uy8rRUo3THhFZnMyZFB6NFlnYXNlaHdSUmFMS0xUa1lnUUpYa1BSYkFoMWpxWG1TcmR6dmdtZkUrMlRaL2ZtNGp0eStkaisvZkc4MGlSMjZuLzY1MWorYk9kRWVWM2VaTDc0UVVpc0liUnIzU0pGNVRvbld4amZpSUdlZDN4YWN1WFlJL1hDOVh0aFlBWWtEVVkzdDFFZ1ROT1JrZ0U4UTRVRFNnVVFjT0hFQXVnUEo2Rjl2VVpRSjRuTGRRci8rOVYrR2dhNHZzUXhDRE5YNzU5NXlOWHBNL2ZXeEFucDl3K0M2ak5JbjI1VTVvc3FRR3JHSFhwQk80TmpiY3U2eTVmY3ZKb2RySHducFdhRlhXRFZHRnFYZjNaV3VOejdGOWV2dHJ5akc1aGFUb0hQN1h2eGJXemEyaUZnTmxYcHVLY0h5SzZ0SEw1SmtpeFMrMWp1dW51d2xxRDM3L1cwRjNRVGNkSUxVVzBHTmczRmMya3A2TktpNWxBVG1lbW9Ba0lUNXJaeFh6M2ZkbXArUU5tRzZSRnh4M0c2eWVYaW9wWmtWemZsZFlyVGZUWnp4WTlnbzIrZ1lYbVlJaFMzY2t0NkVFUGV6WTIzWkhoakcwd1B1SHQxenN6N1lzZEdlUHVaWWxlTU1Jc0thMG1iVEZydWxNR3kzc21KZVJDc3BmOFB1elE0SElScWRhSVhMaEU4NjdZZ1lCZG50WGtjMzZiVS9QNHcva3BaVDhVOUYwTTBCMGhvRm5vTmEwdWNXd3hGaTUwczdUMTV3TjB3cVRaZkI3ckxWOHltaGJxYmNPRi9qYWRhdlVmTjJzaFowR1ExcGI0TjQya2RHbjBjVlREOTEvV015Y241ZXFJUlQvMStkRmtiMHZUMWdPSnVWdnJDSWYyMlV1S3BwOTM2U0ZXMHFsc3FGdW1KUFdPVEN6d1U3NFhzS0ErV0J4bnFETlZrQWZBcUkzaldxc2h5bjlITWE5OVN2WkJtR3cvS2NCMWVqUXlvUEZZNXN1L09FUEQ3MFR5V29RL2lmVlIzbDhxVFNBdXZUVVg0RjRTZVkwYU5GelFBaVZRRmczWkQ3Ry8zMEVLTi9wY0VzQUJTakJYWTlkaTc0cmxYcEpjNGRWNDhqYUlCckF5NHd6THdJRFZadSszV2dmc3UwTnBPY1l3dzN2WEhaUWNyUkMzTnRRc0xQR21FTVgxQThzSDMwWVp1Z0JZdWp4Q0x3N2UrNU5EVGRkUThlYkdCK1lnNWFYMEtwcXdJdXBTTHIzeUQ1Sm5GeFR2ZmFucDZPRzArMStkbUYzNklnR3N3OUJCY1A1M25mSFA3Tm4zUVpYcHN4TStLcHhETm4xK0FxV0I0a2RqYmlhWXZ2UHFQN1dRNEsvRGpEVVo3MTMvRGJGN0JHS1NLSjA4WCtMMVRSUnl4K1ZXNzJvT3ZBMTNBUXVyWHUwNDl0M045RktZRTRXM2M2RTk2YTAxeVlkdmk3NytEQlJYdzltUkMvN0xQR0psa0ErN1I3MjIxY0dRZmNXb3k2VUtjcmZ4QXZBZkJ5RDZjTmFjdGVxSENhZStwQ2xtTEd0R0JnbUNTUDdqQkhSMXRkMFg5NHUzNjFiRCtZbDJnWXM5OXRrb0ExdWM4NjRQZkJUaWNhcHFldmhxWEJmZTJiUGxpK1AxSGpNWkZhdTRCR3VWTUdsMjZJYUtEbEo0ejY5WFI5R3h4WEhzNTBXYkxiaThBMThSVGVFcmg1MVdaWlQxaFRURmdweDhXajdTUGlxVDZzazJPS0g4NXI0QzY0VXNES3pxbkJHWGZVVW9hRjg5Nm5VSm5rU3YrbUh2UklpS01CaFVRT256ekd2SDBxOSthc21ZOWFwcVpxd1djOGFHRE9NRU1sZ2VRcUJTaDBVYVFEMjJJN3NlZlRhcmtGZ0xObk9wQTBlSCtxd2Q2Zy9vZFgrVnlXdzBCMWExbS95TFBjNVZRWjl6MVpKTzhMWGI0WW9yYmQxL1dMbWU3VUVCN0JyMTJGY0ZnL1pWbzI2WElzQTlKdGlCS2RhemxveEZQMFFRd09KcFFVb0VqZ3c5M1ZzUTNwdDByQ0tOb2g2bkp5WFZHY093d2ZNYWRjWFErVVJ2SC81MzUrMDBlWTRFZzUvWkwrd2ZVeTFwR0pVa25aT2puYmpFbUhFWWh1d1kwcCt4bTR4Wk0xSzAydzFEV2NjOGJzaW5NdG1pWldOeXVDQlovdG5oSFlqei9nWk9xTHVzZ3dCelFWZHRQRlFYZVlEdkhsUnhjd3RzUjJJMWpSOVNLaWR2T2IycGs3RDAva2lLdU9YeDNwbUR3NUZBSFJibVhWbForYWxTeGUrNEhTdWRpeGZhL1BKWVk2RWVtbzBrdEpyNjhoNTJZY0dLdnNIOUQ3eDlGVjdMOVM3d2RLd0tCdVhtQlc3ZmJNdFowQklSekZsUGNiMW1ZOG50cHNYMllnQXVzMGNNMHF4UkxQV3QxMUt4dmZjanFyZ0M5YXJFM204SjdmZUpSY1FWSkFlczg0cjZ1L21nYlVucWR6L2cwQzJ1Sm9WN2trOS9LV0NWTG93VzVPUlM3bHZaMmovNnFDT2tldytmNTJJMnJ5cWp4NCtxMjUvLzF5VDl0RG8vbXkrU2xabHo5bHI4T2RkanVDSEdsZHJEQm5FR0V3bkpYQlhtZEo3WHErSkt0QlBtUFJlcGV3bVc5NFJPR1ZFWTlLNDgrcjhpRWhBem5UeGdWR2RFOU9LMEVYblNDRmR4dkY4YTRLVEMxTnk4WnEyNzdCTkxpRmNDSE1ENUhlaFl0Y2hEK2haNzhGV0JvQkFOK2toTHlteXlBSUdXY2xhN0xXODFsZ2ljQ1FkdGRpYThNUEFIZGtIeUhxRzNwSXVodWV2TS9iaXhnUHlzWmU0UndyNHM0TGN2SDNXNUJFOGdWLzZ3MStSd2VqTXpDUitKdjgvRzlFVzhReitRd2VJeFpLQ2pBK25YNGM2dG45WWFmVU5mbDhVK2MxV01kd3ZYQThkYTZaM1JSdURzWGFnQVZ2VDBaeDlRNnBrL3FzQ0tTQXo4MXpYdGZ0RmZFRE5Udy9uTWJoNlFXUlpUWTRLbjUvT0ZYZmZTQWovNzZiQkFkaVlvUkZwN2MyTXJ3WEJUWnQ1cEQxc20yR0lWY0Vmd3RwMjBhZGYyaVpVWEkzd0RXbENBVlpJNVZMZjY2bU13R1lBeHpDdmxpR28rN3ZpTDE5WWo0SUt6MDdab3NNUFcvUHFmMC9ySXpwK21QL083Snh4SDBMelRaOHpHdEdzTzNFSVQ1eDZWVHJYVytMOWxnZTlVTUxQNVpiZkN2T1lsR25PaWVCcEVuUlNCeE4rL2VCTmYwamJ0d0VFNkJhb3pWeFY0cVdPTFE3KzZpa2ZkRytCS3d1eEN5SStyMmIrZzJOTXRrWDdSN2NmVkRLV2kvZ0NFa0QxYzFLeThzTFhodmdlT1B2aDRxSlo2RThHcjdOVGJFRlBjMnZEc1cyVzhtbGp0RnA2Y0NaV29zcnlSSEszUTlEdlI4OG0yOU5rVm5YdXJpUUlPaVNzYURwK3YyMU00ZmxVY0x6WWV2QkFDOXIrTVZxTnZvRFJDZ1ZGamN5Z05YSzdDeFlGamIvbG8wN1Z2WlF0bDBtem4vT3R2K2RKMTFkdHJ3SGsxVUE2dGRDd2VzM2swblUyTFN4c3g3Tk1TUFpldHNtYU11a0pIb1BYZENSOUg2b3pveEdtcjJXWXlKWkxPWkZBZGd3Mms5QkN6M1g2OTNPTHlHVHN5M3ErZWVKSnNlOTJ5YUlnNjcxL2Y4ZWduNFBBTXhRSzJYdzBMdmZkSjlCN2MrUWRTVFBTdmxDclo0TGgvMmhxbTd0YmFYRGJ6QWxodWRTRW83QWV1V21xcHp5MVhLVjF5MVZCcnBLUkxxVlM1bFpxZU45cTlCc1RtTlVvUU1XUk5JSUdHSTBYa3lzRVNjZ1ZabzdIaFlyQTBhQWxTb3dvOEZWZnV5K1hGbW9yaE9FRW9uOHU1eHNGNVlJdzVjaW9ub01JRmgyMVhSMHNIaXV1bUR0SmZ3K25uNWhTVkZXTCtWOVJVM0ZZeUlGSnZTR3cycE5VeWlnWDhLdWNEbWphT08zQnZuMDZYc1FoYmZPYVVkUGJudVNEV21qSWtrNTJUWVYxYU5JM2hsa2hXcktFWlBpd0RHcnlQY1BiNy9JeGx6N2FwSGtUaC9ZV3ZmbXNzRjZTNGtoYnZEM3FKa1FVV1hCWG5maUNVVWtpSmpRSmw4TFh0RThxZEk2akZiZEYySjdtdTI3eVhsNDN6OTdDOWcxU04yV3dFbytERGtPYlBlbHBFSFhrZDBtM0ROSWt1alZOS05GOVRJZXpmMXF4cHBkQ0ltaGY4TnduYXJ2NFAvVk9NTS8zd1FjdzY0RElKdTNCbmp4RHdJRFVqTjNuYU1tb2plem02UEREY0Z4K09sOE81UXV3MThHUW00QzhhNWgvUlN6NlBjRlc2Z0JURjJUR1Z4VlFxT25HWklhS0dZeWFkT0JVd1dod3BGTTRZMU1wWUFnSFhxL0J0ZU8rYUtiY0dJVVdnTUtLeU5TUjZOaDl1dWdZczdDQ3FIQ3owd3FncDNZZlliSG5FbEVaaGdXZkpQNTQzZmQrT1M0MUlNcXN6R2pNNkpHbVV2dmc5dEh5RWd2Q0laVEszV0VIQVJDTG1jaWRpUjhUQjNpUUJxejFCcVJxV0ovREFSRThTMUovVTRJeEwwRVdCZ2I2SStRTHg1eGVQeHJkVjVTZnJaK0YyR0Vqc1VaWFZOSGdhRE1kTldrc1FOWi9IQUtjTkdtVTBudkVFQkkrek9tRTFpeHhYUG00bTFiQkpIVCtrVkhrd284cFhFQWthc1p3VFdDMkFGZlJWWXcwL1VZNHRMcTFZcUxTalp5dWFSNmo1d0piNEFtK3lUM0dXVlh1YzNZZ05VODNnYmJsYzhKS3NmVWpRMEw1ajNwVUZjWElHY29BVjBDN3crYjVxUmlKV3hCRXJrbjhadVhleVdBb1dmZW1sQXhkcHZMZHcvcmhxWGJ2YXNFWFk4c0MxaGZ5S2NwQjhiN2xieVAxWEFlNFdzY0x6eFVOYmQzWDIxTlkzUEVGendYdUx0dDVSZjVpS1BTV1FJanNJdnIvVnJZYncvT0M3Q0w4dk0vQlRISFo1NVlhSk1wRE90N1J0YXRwWk9kdzJuMTVEaCt0TGpTOEFmdVhqUFJ6ZXViOVFCelZ2ZHJZSmhRRVVIMm1rdjB5NDk4Qkd3bmZ2aWp0b0ZiVTNTZHEyWC9kMFMzdEx5elNMOTFOejgyT2dCUGdzYXUreWdUK3RPQWc1MUhDZlhkR2Z5bkdxRVJUdmE4QTJxUEw3UGEyTjNMcy9uWmRBSzk5eTZDazI1NjVETFczVXhMSlJZKzJ0OS94dXZyUFowdHBTV2I2dDByZlYwclNQMDlIV3VxNjFkYnkxVFF1aUVyeE1wSmZjcHJkREZUVVBWYk5GTnp0WWFqMWwrZFc4bjVwYlh1UTBxMXVhRDRNbm9GQ2kzOTBudWhqZjl5RFl2eHl5STNTYUYxMFh4MHJsSml3NjNhM2tVNnAxSzJkd2t2eXhXeHlyMWM4VE9rRk9YV0tLcWozYml2SUVYMkhHYmJwQVl1WERqcXBEMXNFK24xWnRuY1JKcm1tZ2NuaVZET3V3dlBXU0N1eXdubjlhWTdVdjAxRE42eERUdDFxbFE5ZTdoVXRiaE1LV3BjSkVCU0ZiOWVVWVhBSkg1bnEwa3ZzaERtMUZyV1czOG83QjI5Qmx6ODU5V3lQUEExK2Jqd2FwK1B4a2h0ZDFJS0l3OWZ6bHlrN1YyazVNbm11VlhzbXR0VU56ckgzeHR0WUg2SnFqT0tLMlErZW12MTc1UHFRMzhUKzltNlM3eWZVOHE4RCtCeGhUUmVIQ3ZqVG5Xa0FNOTFKWTJRa2I1QUdQUXFXSnFBNzZubHcrdy9lOU9ZQmlwaTRkMmt0SWVPUk92MUJGY1crYWdDaEEzZXNsRVhVR2JjSUdBUlRjNG5oVDExQlo2NlhYelRGTEZOeVpJVDVNTFcrcnlCbW9kVzJWckVYRFJNWnFSRC8ycXlNTDcyWGdRcEdFTGZOb3o3MGd2bzdCa0J6eFdwNmVoQVZhY25wZXRYa042eEpHZGdpSnlocEpoN2FDTUlnRE1jcFJUOHFpYUx2TDdHYU5VK1puNHVpbHJnYTNZb00raUtzSEhxajlHdTRuZ3JwRkhvV3J2bEZRUHNQY3B4bGpxT0xzdmRtbWpicmVtc0hyYTkrdVNzR0Qrb1Z1cGJzT2I3RnhaWVU2c3F4UmJkeDBuV094a2traXVzNHZudy9LMFdDSlI1dUk3NVhYVDMxNEJzKzlEVG5CeGJ5Um1ORzV3dzVCZ1dQVUpoblpzbDJXVzNONSszVXJkaVUwTGlxeElDOWZKaHVmTmwrV1RKcXUwTGNTa2t4WDR6RkFlNVJXUkxWY1BqNVRNMU5GUnRQNWJiZmtjL1liTk5VSWlMbnBUQkxUc3JzcGdDTVp4Mm5GYWtNdkp1Y29pandhVU1hS2VMN1FRdWVqNktPMjNKRmxRSXRVdWpZek8vU1l1RTA3ZmJ2SVJORzhNbmNwbzVkM2w1bEswaklqbWR1NDlZOWJYNm8yNllsWmM3UGZIZjkwdk1kbUhsd1pRVHlIRE5YMUdsNWsxajdjUDQvNU1ORXA0MFFKelRNM0dMaXYwSnJmQlI0dUFmZjBxQkJNVzBLVTRWbXEyT01xY0xNZFREZXZhUGlDbWJZNHdZeVZMMWdaTm5WUnNqNEhMcGFBdWVhbnE0TGNDcGxYcFJLaWt5bVU2WWFjNGV1K0VJbysxL041K3M5RndpOTBRUDJOcmdDS0dwVERMREtXTGFSVzZrYlBhbU4zRVptS1JJUVF5ZFVlYkVTMCtYR3FkcWhiZ01TbTR1SDloYjd3QWFxT0lWMkM0S1BVdm1JRUwxQVBmQTM0SzVsbWl4VjM2RzgwS0xzYlVvMUNudXJDeUJSRjdrY0ZTKzlFc1lYL3pRZmY4Qi9iZmRQa3l6c3BNSTRxanBuc1hyckFvNy8xcWRmblMwVE0zQWFTMlVUdlI4ZUxWdUxlanV3TGxIZGJ3blVXWFpGVm1veGhuYUxMampDYk5maVoyUUpKTGdpSzI4cU91a3lseXhaeWV1SlAzQy9wSWJRNlRGMnVoWGdhY0taV0Zidmd6M0d2d2g1Z2FHZHRJQ0haZEFQd1BhQ3pJdWphZTFmTWRPRjkyZDRRd1dIdk9YMkxLREpsajJpNk5qZm9ocXNnaEZ1dUc5aEtyYVhOMG9oVjBFT2tHYUxMTHpPTXZ1aFhFOHZVNWRib2NzWm9ETWxNSVROeStUV2kwSktJTDVEVSswL3BkMGYwUTRtNkNYV3A4TUhRSStWOW5obmN3U0RLTWNvUS9jaHpWNzliS2MrL3Z2ZzUvU0Z3Tzc5MDdQRDV1L2RVeXZldjlEMmpYMFpaZEFlU1JpL3ZmNnE4M1dPekp4aVlXaGpLSDlwNkRtS1VkdHczNWY0U3hxdGJIN29qU2NXSEZyblcrRDdsWW0xTmsrSG1heXJ3ZFBSQ3ZmWW04TXNsanhvZkVjMk11RFgzMncvTU0raWx1dnpyRFp3VGNlbHR1cDl1aHQwR2w0OGQrUW5IVzA1VXNqelhhL25uMmJOczgzVDlFSFpvdThudDQ4c0ZPUHMxNzg5M0NiWGIyc05MV1RHTmpwVTRBTU9UckxoV3k0NVBYcXVWUnF4T1ZRVFdTR05XaHlyOHlCNTQ4b0pXWUFQWlhjRGh6Y0tPOTMrOEIrTzVSOHhLcU41Y21veWtGQ28xcmhZRllLMm9oR2V6UnRRVmpHNnA4am5BT2xVcGorUHFiY1MvbmxJQ05XUTRDN0JFY1AxT2I5L1luYzZ0YTRJM0xuSklWa2I3Tm1IZFdLajJ3cjlaektUaTc1c1hLMU5EZTV4ZFk0b3B6OHJFL1FlbkgvY3NXWFlxRmRtYmNRalgyQWZpdHBCRUdwRzdmUEl1dmZDckt4VmF2OVlRWW1Xa2pnNDNxQUxUZkpkdHpLb1V4bnhFLzNmUk9tL1JqS2k3dXpBbk9hZ2dTRm5YbnBicklIQzJMTmVXb3ZGbDJwWnFyZ24vNUtMa3NqRWlJTU5pL0loRW8vUkZaWmcvYXhZREtTL1lKVXpyVTd0Z2g5dURtN2p0cENGSVdiODkyeDJJMnlxeU1TcmVicjlJcTJQV3NKMk1YcndyTlNJaDNRQTVBMi9aVUlLMDFmYnd2bVlFRjhxR3FwQmlMR1hxWFM4ZXV3WmlMSTdWOXFhUExoajIwVUpQOTJxVkY2VjR2VVFkWXMzOGw5QlZnU25jWU9HN1pWa3RpdHJmZnZ0QjJiN1FKK0tHbW5OZXZKVWpXZXZoaUJDdlVpR05QZHlHZUFYTHQwSjRmcENjMkdrRjk5WFRVa0c0Vi90cXBLWEg5ZW1wQnhWbnYydURYWHBmRThtc21tTldsT01ZMkYrd3lWRE1HU2RDWWVQbVltNlRvZE95Q3puVDVuRElORkhRSWlYNFluVTZvVjNxOVVnd25jeWxPR2FTWm8rWFNhUW1WanV6QmszR2FLUVhSeFp4dWcxSnZzLzB3MkQ0ZjF2eHlVUWVHQlo1dlRJRCs0ZGM4c2Q0VCszUXZsZkFYQithSTcrVXpjN3pGQStMT1p4ZjVLQzhRbTF2Zjh4SUFkQm9VemwxTktQK1JIZEY0ZmlwNWxjYW1uWTNkMVMxdjFiL3RXUElZaThSaEwyazVRNW5hVUdnOFRvYTEyaVRtRm1iVUEwVVRXaDBDVE9tUytwaWdIY2xwRGh4OEdhb3ZTV2pMWFFyMFZJRW9oL3oxS1VUdG4zWGVPZzc5REMrNUNTVTZScmRQZW1UWC8xc2lkdjZENWdWYVZac0pUUG5VenNsVjZ2RlV2WFZFdW5WSElsRWM3VlhacE5MYmJLdk1iQnNiNi9rczMrTG9lWFRWOUlRc2dNTjlsMGIyZ0pablBOcE9NN3V2WjR1V2JZZDU5UlRPVHczSkdYcG52cXFoYlgrRzBES1ZDdGdFbDFVTFJQZjNlcmdrTjlQRjY0RUVIV1pSdDNFMjYyMWZQU0hhait4U0wySGhsendkVDJ6cXZoL3daZHNDRWpObzRvdUlMZDdJY2UxYlJId2ZwVldCWmhqZlppWlRBdEZOVk1MZzZnV01oaHFtV2hLMFIzRXBvS3R4eXVXelMxcTVtcnBPd3E4ZVZ5M0MvRlJlUk1JSEtlWktFSStlWWl1b21sMkNQb01Galg2cThCbHYwY0UzVnVvUWs4SzV5ZU1wZE5ISUlrczN4aExDU1hsZkU4cXYzeCtqdzlRWXBoUzR6TEhOZjN6dHJFbU1KMDRHMDEyVXNQWDUrdHF1a1hiVjJoS2JVa1JUSTZjK0R4RGZsTWh4b3NDSWMvemdKaEhGVXRkanlsdldDa3B1TDQyZFdEZnBPbHVhcWxaMWhOQnROc0xmQkdScVVKbUlTdjlaNEZFZWt2Z2pXdHNiR3I4UWU1Mkk3aTlKZmdSWGdPUXZWN2JKTmF0K090dFkvUXd5a3VOd0g0akMxYjVaVXZacDcrdXEyRmt1cnM0bWdPaGRyVy9kOWpnVFE2N3BnS0RyOGhtL2s3bzlvN3M1MDZ5MkNlZVkzUHVPOEZtbmJ6dmJ0WVBMYTMvVy9yWkZKWjdHZ0lNMzY3WHdQWWpnTXByL0VNZzRYb0RtNUd1bDFnSHM3L0NJU2FiM3p1Z2swNE1hQTBJVkVVdnJtM3VwV0RSOERjS2hsdFFNRnlOZ2lFVEkvZ25lNjJrVGQ2YzJkYms1V0hEcng3WkpJc3FjS1l2U3VKUmxJYWlvQnRGd1Rzb0N2NlVvZ1RBZGNnSkxjZ0p6eUluUElLYzhLR1VvaTkwd2ZTYVJ1d0FvbytvcWJxUjJ1Y1JwZzQvY2ozQlRKajlLZVp4NEdmam1tQVg1VG1XWUNsVE1OeW16d1FseFdtRFI5VisvaU9jSlBaZm1CNkhsK0FHalkwbzR0UnQxdmNIdTRiRmFuMnl6K0FiUmpOYjhvMVNUamRHR3FOT3hYNFNJVFZweUNQWEk4eWhpVDNCQWlZZTN6SVYrS2hrNWlSQ1BtalQrM1NsZXArdUJ2bmc1REdMUWZFWEE4RUE5bmJyblhvQXNYd3hlNyt1SXRBSWZvMzY4VWczUW1CcSt3am9iZlF4K2dSOWlqNURuNk12d0pmZ1Bla3JVdndhcVNLK1ZkN0Q3K0QzekE4ZTJ2aDJJekQ5dGVueFZENkpDNDUxMnh0OGxqNUhmVDlQZnhwK29zNEh0QVZkd1l6S25LcStRc3p4ZXhvM3JHd0xjcmQyVmRRUU4xbVh4MVBjd0MxdTRzUGJ6Qk5FTHYyTGFMRGRVdFAyb2JReEs4YXpIb080VzNpRDNUNDlmV2VVMmVmUjNmNy95TEZZWm1EUVh2YzlLOWxhZ1VVQU1lTGVmeGFzQWpDSGZWZ0FaQjZJZFlzNTBYdTEzYnFMRjliMjRJOVpEMnNEYmkxNC96OGd5MWl4bHRqZ3ZPVUI1TG9BZ0JYWXphbEpnc2FNclIxdFhZZFJSbEdIOVJRZHNFKzZ4bVJnOHlJZW84b3hSdU1RQlNvUHVNT01ZTUxkczR4R0NKK0gyU01pNWFidXMvd0NWWTV0TkEwWG0weTl4R00wSnRBT3ExcGdLMEJkS0FmN0RLR3YwTWZveTlGL1pHbGFsTnZsd25sQ2NoZ3RSTDlsVzZBcjRLTitvU2RnSXhYcElKeUYyN2dPMk8vTkFsaDFWWGVOT3lQZDkvM1NJS0EvVkNrMzlZNEVQWWl1SGVNQkhKcFdrbTNRZUpFTFBFWUwwVzlnZ1pLYTl6R0h6djhiSTdESGUvNFliaGZlMkU5aW9POUpNMzIzYnVic1NrUXZpTXcrbjNRTkpVZTh0T3Ryenk1djJFYTY3QTJ4VlpUczR1OHkxampudTUzTkMza0ViaUUvWmpzaXVsT2oyMFE2OFU2WUVpbXR4a3V1QzN2TDhZWkxvMnNGRWFkUXh1dkc5bEUwZXQ2K2xrKzdNUUhvTjBQWWxzYVhiK3ZhTjN0cjF5NDJkVm1rZlNiVjV4aTNCYlYxdTExTTl3RDBsT3pMWG5ZQ1I5MHQ0d3Qrcml1b0tBMTl5dXdEMnBMQUp3UTdaM3krY0luaThrZzYxOG5VU0FUMk82VksvM1dCSWExaFQyZXc3RW9GU3JhTUlqK1RXRTArOTRyYUhBSndFVDkrWjdwbFhFanEzeERIM1FEZzVJR08rNUw4TDIrSi8raXd6eFBNeGdFaUJnQUkvaXlab0hBbU1QMC9lRTVrOXk2aU5lMWs2dzdXejR1Y3JxVHB4eVozQmVVSnYyUnlwM1hGVFBZZHlMN0pJd1I0Umtqek43YXpYaTJDSU1FMHBUWG9kWmM3SVNqZCtyTDRGSHhHRXkzQVJIVUF4MVYvTFp2aWpsOHdXVjJtMWZTQ2Yrc3djMFcwNk9xYTVtNlNLenl0Um5oUVZhZ002TWNoUmdrSk1YWUU4WWhCOXVtS29vVHBHUnFOa0s0Zng0T1crdSs0Q3JjR1lyZ1RaNXZtRzlUVWp0Zm5pcVlaVVdUNlVnMGVFM2hraVVHNW5CcGdqRjE0RFhibytEUVJiZnBWMTN6TXBsSUpDdWMrVkxKeEdnYXp4RndXSTNaTG5qNjVYNTAweEIwM29aME1MNGFTUDZHdlFYS2J1UE1yVXF2bWFRaDNVR1pyUlVaTmlZbzl0WFRSVTd4R2xkU3lwWTQ1YkFyTFVMTXp0QWI2NWltZElPYVJEWXBJVUY1QnNJbzdLUTYvVXpTd3RJMlNlZFMxazdRb0lYUFNjMEdURjR1eldoeEx4dndOeEY3aDlyMTJMTFlYSWQ5RkQ1c3JPL1MzMmJLZVd6WlBKcVgvQU0zUWgxcHVmU3Q3NmppUXZZRWwxbU0wZU03VE1rd0FBM3Q5U0RtNzZaYVhLTFo1NjV2cE8waXh2ZlF5Q0kyajVCT2hWL2syUGlWM3NSdDRLcUZsL21EdURuVXo2bTdWdjc4UlBiM0kxalBNWFZDcVZZaWYrRVRGSG5XM3JjaE1iNTFlMXV1VnB6TDBsZ0dUSUFVTWFSVUZjS0FEc0lFRTBRSVptS2Z5RFVsRlpZY28yYTYvNDNRRENhWHNrY01HT0syczVLRnpxUHlpN3NqZko5UzhOVm9qajhvWDFNanV5ZkVFUUlDUGNXaW1BV2dqTEJ3a0pxME9KamlkSFp6MmlZM09aenNFa2RuckVObHluU05ZWWw1eWhES1hZZzhqMWJxVENBaHNuQzd5NUt0UUtKdFhsbUl5aFV1OE5MTEJCWml5dVFPVXlEYkpkRVVteURXWnJMOUNlYWFaWWhJSDdVUzB1SlhtZWJUSWlqWkJjckY4MDI4Nkp5ZXY3RXkxeEVRT3FzbVR3N25LdGRBVVplenlUZURsa3kzWEJHVVo0M0xLcGg3UUhLN3hxZUFRZXZ0b2NXUmxFdEpsQTAxUlpNcFJLVFZGWGVycHhWeEZ4YjY4bkY3anNxN0diZFUyMEJ1ZUlWSk93c2ZGcTRUUEJJVVNPTGk0Sk1yUVZ6OTlkWk1oYVBDNFdUc1l5Z0VuWnFzNG1yd1lLZHhldVBsWUtUTEpxRFMvVjRvNGhDbytEdk5RYi9RSSt2SG9yZWZnTVRQTW00WTV1MDc1UDZKSVhoSC9lMS95bndFQSkgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpO3VuaWNvZGUtcmFuZ2U6dSswMD8/LHUrMDEzMSx1KzAxNTItMDE1Myx1KzAyYmItMDJiYyx1KzAyYzYsdSswMmRhLHUrMDJkYyx1KzIwMDAtMjA2Zix1KzIwNzQsdSsyMGFjLHUrMjEyMix1KzIxOTEsdSsyMTkzLHUrMjIxMix1KzIyMTUsdStmZWZmLHUrZmZmZH1ib2R5LGh0bWx7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNH1odG1se2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1wYXJhZ3JhcGgscHtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS42O3RleHQtYWxpZ246anVzdGlmeX0ubW9uc3Rlci1oMSxoMXtmb250LXNpemU6M3JlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xNTttYXJnaW46NHJlbSAwIDEuNXJlbX0ubW9uc3Rlci1oMixoMntmb250LXNpemU6Mi41cmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjI7bWFyZ2luOjRyZW0gMCAxLjVyZW19Lm1vbnN0ZXItaDMsaDN7Zm9udC1zaXplOjJyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMjU7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfS5tb25zdGVyLWg0LGg0e2ZvbnQtc2l6ZToxLjVyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMzttYXJnaW46NHJlbSAwIDEuMjVyZW19Lm1vbnN0ZXItaDUsaDV7Zm9udC1zaXplOjEuNHJlbTtmb250LXdlaWdodDpib2xkZXI7bGluZS1oZWlnaHQ6MS4zO21hcmdpbjo0cmVtIDAgMS4yNXJlbX0ubW9uc3Rlci1oNixoNntmb250LXNpemU6MS4zcmVtO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxLjM7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfXAraDF7bWFyZ2luLXRvcDozLjc1cmVtfXAraDJ7bWFyZ2luLXRvcDozcmVtfXAraDN7bWFyZ2luLXRvcDoyLjI1cmVtfXAraDR7bWFyZ2luLXRvcDoxLjVyZW19cCtoNXttYXJnaW4tdG9wOi43NXJlbX1kaXYraDEsZGl2K2gyLGRpditoMyxkaXYraDQsZGl2K2g1LGRpditoNixwK2g2e21hcmdpbi10b3A6MH0uZGVjb3tiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTEpIDAsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0yKSA1MCUsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0zKSAxMDAlKTstd2Via2l0LWJhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtc2l6ZTpjb3Zlcjtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKTt0ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnR9OjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfTo6c2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9a2Jke2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2JvcmRlci1yYWRpdXM6MTByZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7cGFkZGluZzouMjVlbSAuNmVtO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH1kZXRhaWxze21hcmdpbi1ib3R0b206MXJlbX1zdW1tYXJ5e2N1cnNvcjpwb2ludGVyO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczpcXFwidG51bVxcXCI7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4xZW07cGFkZGluZzouNnJlbSAxcmVtfWRldGFpbHNbb3Blbl17cGFkZGluZzouNnJlbSAxcmVtIC43NXJlbX1kZXRhaWxzW29wZW5dIHN1bW1hcnl7bWFyZ2luLWJvdHRvbTouNXJlbTtwYWRkaW5nOjB9Lm1vbnN0ZXItbm8tdXNlci1zZWxlY3R7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfUBrZXlmcmFtZXMgZGV0YWlscy1zaG93ezAle29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtLjVlbSl9fWRldGFpbHNbb3Blbl0+Om5vdChzdW1tYXJ5KXthbmltYXRpb246ZGV0YWlscy1zaG93IC4xNXMgZWFzZS1pbi1vdXR9ZGV0YWlsc1tvcGVuXT46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9Lm1vbm9zcGFjZXtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5LW1vbm9zcGFjZSl9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPXBvcHBlcl17YWxpZ24tY29udGVudDpjZW50ZXI7YmFja2dyb3VuZDp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7ZGlzcGxheTpub25lO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2xlZnQ6MDtwYWRkaW5nOjEuMWVtO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3dpZHRoOi1tb3otbWF4LWNvbnRlbnQ7d2lkdGg6bWF4LWNvbnRlbnQ7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtbW9kYWwpfWRpdltkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXJdIGRpdltkYXRhLW1vbnN0ZXItcm9sZT1hcnJvd117YmFja2dyb3VuZDp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7aGVpZ2h0OmNhbGMobWF4KHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpLCAtMSAqIHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpKSoyKTtwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOmNhbGMobWF4KHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpLCAtMSAqIHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpKSoyKTt6LWluZGV4Oi0xfWRpdltkYXRhLW1vbnN0ZXItcm9sZT1kZWNpc2lvbl17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtZXZlbmx5O21hcmdpbjoxcmVtIDAgLjRyZW07d2lkdGg6LW1vei1tYXgtY29udGVudDt3aWR0aDptYXgtY29udGVudH1kaXZbZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17aGVpZ2h0OjEwMCU7d2lkdGg6LW1vei1tYXgtY29udGVudDt3aWR0aDptYXgtY29udGVudH1idXR0b257d2lkdGg6MTAwJX0gXG59YCxcblx0XHQwLFxuXHQpO1xufSBjYXRjaCAoZSkge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpLFxuXHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0ZSArIFwiXCIsXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCAyMDI0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqL1xuXG5pbXBvcnQge2FkZEF0dHJpYnV0ZVRva2VufSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge0FUVFJJQlVURV9FUlJPUk1FU1NBR0V9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQge01lc3NhZ2VTdGF0ZUJ1dHRvblN0eWxlU2hlZXR9XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBNZXNzYWdlU3RhdGVCdXR0b25TdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcbiAgTWVzc2FnZVN0YXRlQnV0dG9uU3R5bGVTaGVldC5pbnNlcnRSdWxlKGBcbkBsYXllciBtZXNzYWdlc3RhdGVidXR0b24geyBcbkBmb250LWZhY2V7Zm9udC1kaXNwbGF5OnN3YXA7Zm9udC1mYW1pbHk6UmFsZXdheTtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDozMDA7c3JjOnVybChkYXRhOmFwcGxpY2F0aW9uL3gtZm9udC13b2ZmMjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxkMDlHTWdBQkFBQUFBRko0QUJJQUFBQUF0M0FBQUZJUUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR29FOEcrNDZISVU4Qm1BL1UxUkJWRVFBaFFnSWdRb0pueFFSQ0FxQnVneUJtbkFMaENJQUFUWUNKQU9JUUFRZ0JZVVVCeUFNZ3h3YmZhUVhhSmVmbU56MFpvbDN2NjBjUGVaTXBHNEhKU2prNXFJSU5nNkNHTWdsWmYvL24zRjBqT0dHRFJBMXJYZUluY0pJVWtOSEduNjlxTVJEVThaYWpqczlVYnNtdG5xbkUzdjN2cWlRbWZSUXBMa0tXNlFad2FsNnM1SVVpSk5VU1VHL093b0RZNkI2NzVPalNqa0RTU011MnBlZHB1OXZKSUxVbEpkNzA3RCtlTEhwallESTRlMXVEbkxqSEh2eHBEWEdNeWR1TExuMXF0MEZDUU95RnNKWkUxK2tKcTNUK0llN0JKRklOT0FOYmk5dlRVemhJN1c0R21VTDBsV2pUL0ZRUWkvbSsreHVQUDAyb21SSGU1cG40RGdmTlpmbitSOXo5Nzl0bUVlTmFxMVJ4UnFIVGpUUE5BMkpGRWdySGRvL250L1cvNXpiZ0dDeGlhNkVrVmlBMkZoWUdJdFJtRTFadlZVdnF0U3RiN012cmQzVzcrdDIrMFhkb1RuenpqWWJwN21TSExBQ2toTVdnQ1RMNnMwV3YwQVVvaEpmRXFFM29wUGQ1OGlrSm5LbG8rM3VhZVNIWUo2ZmNJY1hqZCtyS1VFc2FFbFRxbFVsVlJtL04rZS84aVAwTDVBS296TmxKMy85aUJ3c2hNNnY1SklVSnlrZ1QzZmRyT21xNkxjcytaK3EvWHNBWEZ4RUVpUUlVYUtvc0ZuN2N0VCs3QkJTNWRxRG9sSlh1bmJsN3J0dHpEL3YzODRMZnRKYWdGRkFMWVBFNUE3Z25NclpCaHQ0bFhxc2JaS21iZHEwVHRPbXBtZ05pdWdNMlBZQmM3M01yanE3R0xzb1hIY1RwdDl1UHZGRHo4ZU4zZytzeHJQUUF3NkRURk5wL09aSTlpaW5OaXRaaFJtcFFPQ2tkb0JkQU5qVldsYXZNaXR3RE5KWC9wWUlBa1Z3bk9QL3ZXNXh6b013N1NBRkFLVStaei9rblAvWjlqK09kZnJMOEtlMnZkS2JtcGh1eEpTdUw4RVVBZ2dISWlCSFArNDQ0RUR6djFQVFEzWWtPY09TbFRIbWo2VXNkZm8yTCsvanBZZTdJSFdjUVVnY2drcExGUjFZVFc4Q0dLUVg5YjhHRkFBQUg5dG80UkhRNkdMdkZScmk0RGl3VHpBQURETUtEUHIvZlozVi9xZGdQbWtHektURW1XRVhiN1EzdHRnVFlxbzJuUDYvKzk3WGYrRi85SkhBVnNJSWNBQ0Jad1J5a0dUN2dDUjhWb2hKY1VPT1NEamlTYkFwaE1vem0ySlJwdEJ0VVc2OVhiTkZHM0lWeTJLTG9rNDgvTGZzbTUyN0lhcUJMTXVCYk9GSXdlRlVkMDF2ZUwrWTh4V2h0emNxVG0yQ0lUYzVlTEp3U0k0ZllsTFlGSVZIQXMvL1Q1M040L1l4MWhLR1UrSFNxRXJkcFBQbnM2ZnFxV0pzTmJaYUNsUXRqbE9MVU1zaGNkb0E1VFFzczRKTGM5MFN4Q09NTVVLNEtQOU5zaHB6cFg0dnd4S0NoQ0FTUkVSRS9MS3NXUmxKd05LQWNUblhBaEV5M3IxS0hjWmEvWWRYNTg0MjAvaWFYbXRHaG9DQWlJaUFSMjN2L1A5K0tUQUNBTjVoZGtDM3hVQzRFTHNnZ3ZrUjJrckVqWVNFdjBCS1NtSENoSXZZT0NBSmtLUWd5WU1NMlFvVU16Q28xNkJKODVxQVdDQ2RIZWszQUIwT0RMMUxxMFBnVGUzaFN3MmZoaTRYaFB1ZXVRV0VINnh0SUVRQWJHMk5tNW9WNTRRRlAreUtnTzJENFQ1dC93ejJYVzkyL3JwcXBMVFNJUDhxVjl2THZPZHMwTkxXeVg1MUs2b2ZidlBaRTFwYWY3dzMxOEM5WnRocTdmMzJiZnVMNjRWWkh3NTE0WXNtNWxnZk5iZkc3Vzlsc1VBNEVHejcyM3Z4d0d6cDRmUlIrbVA4THM1QjdLQjJlREpYYzZ4d2xHNjkwMnVnN0F6TEE4TlkyMUIyZEIvUDVxZk9WOHQxb255TDVqWkREZlFJNVJnOEQ5OEZ2SHN2Y2xIdUpzcmR2c0pycGMvVHIvZ3UvRWZaSnpYVXpwV2FEajdNNytVUDgvOEVrQUFWYUFTL0NSK1hzL0pONFlhSWNPMXhIWmNVYU1NYmtscnBLeTdOZlFKS1FjVVJhZ29HbUNXK0hBNkVOdmJnMzNzbDJwSVlSbUU5YklIYjBtQTZrazZsTjVHZHlNTjVFYm1RaHhIS2x3TWdUNThjZ3c3cGRVUno3bmZNY1FmY1UzdkljelZrZHJoWDhYSHE0MDEydEZPZDdrVC9hN3A3bTgzV0E3MUY3YU85TStkanZkZDZqN2Z4bStEMVB1M3ozdWlydm11eXphNTN0cnY5M2xUYjgyUlQyS2FGVlVLTU5QMzZCdlFNQ28wR3NFZGtMOHMrekxnMUV4Yk0wTmdDV0F4Z3pmODJERzFLWE1mYzRyak5jUWZIS3hTQ3VSdUJJNUFvZERERGtHZFY4Q25WVkVtRU1haW40U2EwQVhUSTBSQk5wT1lBTFZxMWFWOXZ4SmlVekhLV0NpczZtcDBCdWt4MDY5R3I3NHNuVk5ic29DbWtWTW9wNStwREdhV3oyc0xEcjJpTnQrb1pPMGIzNllTSWpXY3h2bmxOMHgwVmhsWW9XNFVSalhYS3lMRzNZM3FvTGRFYXpIQUVFb1Z1TWwzRERlRVJWcEcvamVURVIwQ1VaRVUxbW90cUZvaXdKRktVYURGaWFjU2xCSnJFalNRS0ovQ1NGU21TS2sxNjFRbGtkS2V5U1hZenNkWEtpNkk5aWtOSk10Q1VLbE91UXFVcTFWSFQxenE2K2x6ZlFOQUlhNUpwUm92V2FFUDdaeHVObVRqTUxCWXVxM1hVVGdOZFJEZDZVcTlBMzNjYnhBenhERE9OMEl4YU5WYXhkLy9zL2FqeEFFNkpuUGJGR1prdUMzdWFOVThFc0RTTFpWbXhPajFQZDhIUXhYU3BlZGtYYXdiVzZ3Wm84KzZEcml1UUZGdzVJcHZuSmg2L1pnRkpLOTMwYUVNMlhKM3lKQjBESG9waGJxZzB1cmt2TUlnWWx0YkdSUGNka2Q3VmovTlY0cGJBYmErL0U0QmpDZzlwNVplcmkvcGRNMENHLzd0WFpOeFZFKzZiWWF2UW42dW1Xd3kzRlhmNmdnK1huQXRIRGdqa1BOaVVicXBvd3ZEVXZiUmxjajVYWkhZelY4Smk0TmwxdmpzT2hyTWF4T0h4ZUR3ZWp6L1ZJSEpYbjZIMHdoZzZxRk9FVXFRbzBXTEUwb2hMQ1RLSjB5UTVMVTl5UlFwU3BVbGZabkFTQmtXcGxDbFhvVktWNnFpYlRCdE1tUUtZWVdIVlVVZnRHSXQ2Mmxkbk1IM0VwaVUwcVZRcUhiQ0x4T1UrRTQvMVhMZkJFaHpLaGdVY2dVU2hmeHdtRHo5RzVFUkFBSEw3RkhSS1F5cm53dXhRZjVyaEhCRUJSSW9TTFVZc3pVYmM0cnRNZHBsMjZGZ2Q1NXRnUUc4eC9mQVoySnpJdkdibWxyY1hBbTN3WEthN0VsZlBjUzJ0eGZxK2VnZmlIR29ETXh5QlJLSHZ5M1NKMzBRNlY4KzZtZGZac2FGVjNlT1VLc1dNeW5raHlMMXU0VkkwTDFTSkxJeFh5WXpwTHlOcWlXejBYVHBrYVR5bjFaRHRpOTBtWTAydjB0VXF0elNDbCtxcks3ckl1djF2OVJEMHNneHFHYkpvR0dmRWtsRTFZenIyOE8xbDJLZXdYOU40QURhTjFiN0wwSWFSVFhPdXk5eWl1ODJwT3dIUUJDK3BsZENyT21LME1nL3IxdlJZRW0zREJFY2dVZWdtVXgwM0c0K3dpdFFnT2ZFUkVDVlpVWTNtNHRtRUl2d1VLVXEwR0xFMDRsSUNUdUkweVRxdEZjbEVDbEtsU2E4NldFWjNKSnZzRldpN0l4S0pPQndPaDhQaGNFVHJSTjN0RHBsTUpwTmhSSWFpcUFpR1lSZ21jYmtzeTROb3ovcm9mUUw3S2NhbE5EMEZPVzNSR1p1T0JSMnhtVk14a1Vna0RsMFg3dUppdXRTOGJOR2FFK3YvWlFPd3FlODZHSUllRXNDdW92V1lmQ3EydHZwTU9CTjdNek82OEdXWExodG1nVzJmZmVIcDFNdTdxd1g1TkR3VGtwQ1NjZWZCa3hkdmZpbkFSSVJJVWFMRmlLVVJseElBaVpFMHJWcTY1SW9VU1pVbXZlcVVNcnBzL3oxWldFWjVZQmdHQUFBQUFBQ0EwV1pzZDFDcCtIdytuMi9jT2xrNHJEcFNsMUszSHIzNmpnMUNUdHd6T2NOdUNYWU5naURZaG90SDFvZ09MUlN1eDhuaWw0cjJpWWF2MG5vcnpYdloyblpqWkxmYUtEK1ZSZ0gvZmdObXBrRmJoZ2lHaVVhY0dmWE5tSzQ5RlB2WTl0dmJjVG03NSszZmRhbVc2WVN0d2tkemFDSFpjdnEwQ1M0aVU1Wm1OeExYR0JlL3JRb0hqTVAxL1FFR1ZNWkZKZ2JEREovNVQzZXlCY3ZHUFNxVGltSmNDK1lRVWpxR3YybkM3cTNuQjBET3F2MkczVnZsSWhLSVc4TVJTQlM2eVpUaU5HRlgrUkdDREhzOFBZSWRUamRBVUF5dlFrd1NDcHBoTmQyMG1wdU1qUVhLQlFrV0lqUXBtSlJVS1l4S1hjTERjNmtJZkhhVEthT01TYzRNc1ZSWVEwZXpVNkZMcFZ1UDN0TEh1d3ByWWZ0aGl3aUhGQVdrU3BtV1J0KzZuSjZVMThDdXlKODVqMngwYjBkN045cGlicTBsYjROblUrcE83dEVVTGloZFVPMmhycHRnWVhDc3hCRkEzbFEybm1GYzNGYlJqR0JnQ2Q2QlVIN3FuWEJiYWNqc0s5OVJmSURNQUZrQnNvTytuWmc4UDBCQmdNSUF0UUVhbjlXUUVzOU1BSE5HODU1NHdhK0FybnF2VFRqcEdTN2UvaWxQbWpBUlBtbnN4V2tkQUFSeU9MOXlBaHlteDdTR0tsazdHaDQ4dkR2TmZkZytJVEJacEQ5Z3pnTUlCd3dCazV0bWtFWElxcU1NYUVUZy9IVWUyNm9MVFRwNHc0ZzlVa1o1YmdieEVIdEN5VExZUEhtSlVxM3VKcHF6dlNOY3VtYkJkWFlRc2t1MUM5Mk44alR2REZFVTBydjgxN2dtcXNHalBmUnVOanZlclREbUhDRTRxK3Fiek9qdUlJdlJhRGh6WjEvVkpVcGhoaU9RS0hRd3NaNVRqZ3VBQjhDdUtyK1lJTUtld0lvTU81eHg5ZTRBRUJURFNZcG0yT1R5OG9Jb3lZb2FqZWpVUWI4SndEL1hCNWlTc3dVaWdoQXNSR2hTMENnekp6WE1DVFUxWEVaSGFUQVhUQ1FTaWNYYlk0VkNvUmdMRXhzdGxkQ3R4WjFhVW5sdXRHaHRPUXQxOC9SVWRWcGtEQnZiUzRuRW9ORm9OQnFORmlkWG4wV0pMSkNyVThDVWJxcU1oWkdwbStGOEViQklVYUxGaUtVUmx4S0VFaVZWTFZOeVJncFNwVW12dWdBWmhBR2x5cFNyVUtsS3RicG1BNndyUUxjZXZmcWFFN0RUV3M2WUhtMEUyZGNsaVdXc1dFM25tUzdHNWI2dUdWblBuTnV5eVdiSHd4RGpwV2s2TStqMjBlWU1MUS8wM1ZNbUttNFpuZ2xKU01tNDgrREppemUvS3JkQ2tWTWxLc3lJbW1lWmYwR1F5d0pCRUZ4Qy9yZ2dDSUlnQ0lJejkwYkRFd01UajhmakFVQXhkUzZWc0RjczFnOHdmWUNYck5kOThTSDhnYWprNXZ1VVBxZzRYRFA5Sm03b0dXdkdYeFNkRUxMZnJzRVNFc21XWFRjTTNjTHRIRlNHYlNIQkFqY0NpVUlYSnFIbk1sT0xSQkxhc25VSzJTdXgxenFuTUIvWk1HT3gvelB1OG9oREFEQUFPQUFDQUFtQUFrQURZSGdsQ2tDdUxWQWlTSUtGQ1Awa2hXTktQRlV3YmR5TCtzREJ5ZWdrYUoyV0VNdFdyRTYvNHZwVzdHNmU0bUR3MEJmeFpoRnQ5R3ZmaFBFQW15ZDRjTXRVcXNQbDRheTdHdWFrNXQwTjUyT093SmFCZ1NOSHNrMk5oN3FFV1pZVnE4ZStrc3hqajNFS1NYZzhMTmlsUXFGUXpFMWZ2NXR2cFFRRnRGSW15THRpdlRlV2tRQ2s1WlJlMlFpSjJackxZRFY4Nk1CWVdYNXhBUHVuazF5bnRaMng2YWJOcmlYQXNoV3JjZmtVNjN5L2ovbStnbnpOOEkzWXR4emZDZU9pQVBpN1loMXdCQktGenM3MldybGlmV2IzbitzT21rU2l6WEhUWHBtdkFuT2dlYSs3UzhGMUVIUDhuVTRJbkZZNFE1bVdwM0JBTGxlc2E3Qno0RnVPYkU0RVhSbml5azhodENPaWs4dmxjc1dZSUtyNC9jSE0zWFhJY2N5T0RzQlhIOVIzTklCalVzZDFmaWRqMGlpbkg1cmlaZlVPRFRpRlF1bHplYXg3K2pIWlZ5eGYzOFUzeExkcitVN3U0M0g1OUtlZ0s5NUp2d3Z5cW4zSWd4THlVRzJZNFFna0N2MUJURCtJdkNNUE1nMGxWWVJCblNJUWthSkVpeEZMSXk0bENDVDJobTBzRUFnRUpURHJxYjRnSjJKWW96U1VLVmVoVXBYcWJOclorWmhlamIrNXJIckd6Y2NMUWhKU011NDhlUExpemEvS3pRbk1DRUt3RUtGSllZR3lOeUsxbHRKVS9KNldtRnhVcUxzSW5YU3MzNHM0QUpuVE5QOUpWODFaVzA4YndveHdqTW9HZysxZ1BQeHdBTWVaa0JFRStWc3Vwc3hvOWNXUzVpdm5hU1VwRkpRMVRFYnRleUtqTUFMbFNRaDZSSzNnQ0NRSzNlUVU0amJFQzd1cS9BeUNESHVDQlFUc2NNYlZ1d01VQkJURFE5eVFGTTJ3eVJueUVTeEtzcUpHVTNSaUVEUFhMOURaNUY0SXBBdVNZQ0ZDazhJR1pWTUZDZE9rTHVFMUlLVkZsR2d4WW1uRU5lTkJDVlNKa25KRWorU01GRW1WSnIzcW1ES0l6R2xrU2JiZDlITGsxZngrM2UrVkNwbUtvaGdseVVCVnFreTVDcFdxVktjYVVHM1VsZnBva01iYXhOQXNMVnExYVU5R0lsT2Z2SmxNcHBqSlpESmJSanRhTldrL3J6V29NSUlhTldlc2F1dDAzeU1PMlB4SUk2TUJFOTFxZm9EeXhDU3dnQ09RS0hTVDZRVnVEaDVoRlhscHRyZ01qeUJLc3FJYUwxN0djZGtBNThBOGdDWS8zMlBMYndrbkNRQkFObXRDdzZOb0JyVklxemJ0T1VzV1U0MDVsQ3daMXREeDVwMW83VEVkSkJnU0dMNzc3QkVqbzk0YW85b2p0SzlidjUvaEFNOFJhNDZTamdtZGVMek5ETWhpVUhudTdRbUREQlorSVVGaVRjSm9IY2xJa1NwTittWkdjVGNINUljQnBjcVVSMFdvVktVNjZxWjN1c2VnRjNtbitiRmxyaXE5Qm1tblY3UGI3RzBSdENhc093S1FaRWdoNDg2REp5L2UvSjZKcnoycnZ6MTE4UGs4UHAvUDV5LzlOUEppcjlnSnd5bEtyVXk1Q3BXcVZFZmRWRk50aHJXZ1ZadjJaSVNZZXJlQm9KZEhLZWFlZzBKN1VCZXFSOFNPMWFuM3BGQU1LTHdJdFZTSisrRm1uaUhFc0ZFUVcrcGVrb001SHFmNTBseEJMTHY5ekNNQVpUUFExN245WDVrSEZYN2M2UTJKdmIrS1NJc1NMVVlzamJobXZKRUVXeExISkRYTVNLNUlrVlJwMHF1T0lLT0x6R2xrU2JiZDlITGt5VmVnTUJXNVVLd2tHV3dwVmFaY2hVcFZxcU9tajlwNXFsTlQzLy8xeHNpQVJDS1JTQUJBQlFEQWdFQWdFRjRrY0hQQTR5L2YybTdZR281QW90Q1ZTU0lhVGVWR0ZBQWx4MVJJWlJ2R2M1ajBKSWVvY3h6enBLdGNheWN4STFoU3lWKzYxL0dDd3V6QU1mUU13NkxUS2Q4b3NGQWNyTlZEUEllRnM2TEhGeGxOeXRpZURqYjhHT1FRYmhTSXRqMDJnSWc4T1ZiVWZnRi9HdGthQ3NNTVJ5QlI2RDU1bWNQakxiWWtJOEowd0p3WGYvTTFubzlkalRWZFdocGlENE1qa0NqMEdZWTZrWTFONVE0RUtnVWhXSWpRcE5DamJLb1NDTk9pWG9aYlZGOS96c0xkR1lHZ1ZiTXp3Snd6OCttcVUyc2pZMUJyY2psM2ZHL3NmejZxN29nMlkzNHZmcGRVaGUvQ1oySEg4eUFBL3hROEQzbXlBSUROQVZzQ0FKYlpueGkyY0g1czJjUkp3VmFPbTJXV3N0UEdaeFlaQTFLSVI3bXQzQXpBbXRrRlVJNWlsRGNBbTJRd29qRlhCNnIzSXNCeVZxNWwrdE5hYmN0ckYrUXJBUStsa2lVV3ppSEdLV2M1dTFGVWRNS01obnhpeG5BVTRsa2FBbm8vbmh1U2NFbkhyUTZRRWRvUjJGSVE0R0ZuWUhrZkJnSlR3Tmw0MnJRSDdkVjZJQkt4NEdESVBUU1BBdFlIY3VhL1V6ZVAxZXBaSk5hdE9BU3FGRVFrWUNXU2pLb21jdko0US9sWW1SNmJXaUVXV1ZJRkFOYUlUT1Z3MlpWSHpyNU16Qy8waS9EMWt3RVdWRC96VDliNkRHNjMyaUs0VXFDN1RQMlVOYm5rRVk4NjRYWWlLbFcrQlMzRlVLeEhEUVlvKzhCOXl6MXc0aDA3QmE0UWtrekwwTEdKR0lyclorY05YdUIzUHc2Y2VkcEFNVTZHelJRcURXN250QitjV2lzRnlvM1dDbVFqTDBNbVhvQnFOV1JGSVpJN2dEWGh0U2N0OExwQmZrSHNSUTZYcFZmSVJ2WkJVOHA4NUY0aEg4RUtueG1FWW11K0s2Y1lZM2dRZTErL1R6SkFJUkYxY0t2Tm1uMlEwTThhT1dzWGpUOWp2QkNyNTIxeHF0V1ZJNmFwTHBlaEtjeFp1VzlCV0xKM1FHcWY5SlRpdXZ2VTB3ZGdody84SUJSSVgxVnVOUXlzQnFTdFZOUFhaRHRMK05pdmN3aTFQZ0QvNU8wb3ltMkorNzhvbjByeGdBOU9DbGEwZ04wSkVQSFkvWVA0bmhJYXdiRUoySGxVblI5RGJ6ZldNUEF2eGtydEExNHg2anJBbVlVY2dSZlJsWm5uWXhzMnkrb3dMRHdrUzJWazNkZmpBQVVWSUpld0QwNnR6K0F1dzZwSXF4VGw0ZG1qb0dsWVFYRE1iMzFGSlBzKzY3ajlSTmdzSFlnd3dPY1l0dWZLNlZoQ0xNdWM0TkZUYnY5cEVRakZOak5yMExXQUpCM1hHSG00eDduQlJmWG1IUWhRMGJ6cW1PdFZUbnllUzZ4MUhiQy9hcmovWGUvN3FNT2w3TTBlVW5EUGdoeWlzRjhxSW9GYmhmRWdxeUQ0bzNvMks1UkxyTUpZQ2FDNWdySHd1cEROc1ZvWEZJMys5V1lQYTFsd3ZPcDkxZnZhbkdob21KaXA5N3VwTkhtT0greWIxK2hMSXBkZHIyMVJpQTEzSmliNzlrNnBUQjNkRkFvNzE0cFExeVJaYlRYTXlkQTdtUUU5UkZHaEwvT3hySGpkUm5vMFhkZjl5RWUwblhGZk9lcnpZK0RPM2ZpQldCRk1BbXFGYk9lZ2tBcVhUVm81ZlM2NnlPSVZsTENTZGNwNjh1ZTR5SmVsaFVQdFU2Vm0yam5OQVBxd1dhTm5udjF3N0pQNnhRWmF3U0lQbE9GTUVVR3V6UENCYjJkSlV5Z1k2UTl3cjZKVWpKcjZOWmNiRVl3TC9jeFpmZWM4MkxPc01LNDl4WDYyOFA4TnEzVERFY0lBUFp3d2hMdzU4aFBLazVKU29EQkpnaVRMRVN0UEE1MG03U3FZbU5TeDZGTnYwaVNqVTA0em1UYk5ZczRDcXpmSmZsbUMvWVpKZ05Cd0RBYUJpOGVCSFQ1SEFrNElRa0t1UkVSMmNlSENqU3RYWWhKZU1ONjhFZno0d2Zqekp4RWdnSlNjbkV5Z1VBd2xKWGRoMUp5RUMrY2hnZ1lwVGh4S3ZIaDJFaVJ5bGlTSnAyVHBLRG82VzJUSXNGV21URjZ5NUVEeTVFTUtGUEJXcUJCZmtSSUNCbFZvMWFwUmF0U3lVNmZPVnZYcStXalF3RmVUSm42YXRlTXdNZkZuMGNGZXAwNEJ1blRab2xzM3BFY1B2bDY5a0Q1OStDWk4ydWFVVTRST080MXIyalN1T2ZOMldyQkE2RTB5Wk1rTTRidzVod3NXbkM1YWNyaGt4ZW15Tlpzck50eXUydks0WnNkdHpaN0hPc3dHRXd1aGtSaU03VGc0RUM0ZW5CMW5pSkFRYm91ZEVCR1JIVnlJSVJMZWNENThJWDc4NFB6NVF3SUUyRWxPVHFRUlhIQVExNlU0aEM3Z2dDRUFnMFlBQndvS0RydUVsNitHcWJGTlBMV0dBeERBMisybVVTTk9pQmc3dDBTa1MzMW94ZU1ranJGbjJJSWpKempNU1VoT3Vra29FSlNpanlHZ3gySWEvOVpjMDNiK244K2dxa2dTMjhzNzU2Y2pVcDN6d1RyK1JQZTZTZXJsVWRUNWFldWdlL0FIZ0J6OUY0aW53RThxK0g0T3ZJVzM5RmJlV3J5L0JxTXZ2L0tTdXBpOUhrclZlZkc1WjRJYXZmanlXeStwNHNWWHloZVZUNW54SXEvemJ2YmpvcVhYMVplMGhqMEFZRk1RWnMyQmtBZ0ZJR0Z3eEhZTkI5WGRhbXdyM3M3L0NJZmdZWmlmaFQ5Z2ExMHl3dHpkWlkvaGNuZVRZYS9raXo4S0NCb3JoRlo0ZzFsWEJHR1dLQTc1MkVsSWQ5YUxLNFNGTmRWMzI5Ykc3UklJS1U0R0V2aGpyOExVMXdqQTIzczlCbWdiR2pROTdvVUt3cWlPdnlQWkVSSUNLSXpBNldUcFdRd1Y2b0psZTNWVGxqNVR5UEtPam00TmJ2T2cvVDlHVmZ4TkE5aEZoUURTdy9mUmpwQ0YyVzhPQTY4aUN5VCtmMkgvREc4QzZlK20xeC9JSTg3OU5BMzVyd0FBNjhRV0FZZ2xUVEFzWUFDRXFlTis2bXkzd1lvQTRGK2pOb1djTlM4T2lhalFRUDd5TUZhd0lqUVJnU1VNTEkwUTduMVJBWDZSRjhZS0lJSlVvWjN5Z0MrUTJRb3NDa3RPNWx1TUhHVWFFM2VMZThWajBocXBXQXBJRWFsT2FwRzZyZFcrN3FSQUZjQ2VZaWtBNEJQVHNMaC93VVdmT2J4OVI2VThxZkE0U0tuNWc3WUNYQVNRQ1FCWU4za0EvLzFOMWYvazZTLzBZLzFvQnI3NEdYeHgrMk5mMHUrLzdndnFDL0x6ejBFZjlPUkJxam4xUGdMb1pROGIrMVowYzhnTi9sLzJEV2ZObWZLcFgxMDM3ejJMeG4zbHRCWFRiRTVaOElQdmZHL0dKb1NEeTQ2QU14WTJEZ0VoRVRFSkdTVU1Ub1dncGtjeE1ESjcyNFIzL2VIMThTQ0NTNElreVhReVpNcVNyMENoSXNVTWF0U3AxNkJKTXlNVE00dE9iL25OVzM3eXZ2LzUyT2MrOFlYZi9Uc3UzTExNZVQ5YmRYdDJjTmV2WHZMeWFQakZEVStOZ1JjTnVPQjFyM25ETEJJR1J5TlFHRHhPeWptb1ZJT0xoNitVR0F3QWtvUDh3Sk9PaGhiSkJOVXZocFVOTFpxRFU2SjBLVktseWJPYlhnNnRFaFZLbGFsUzdsdVYyclZvMWNhcVZnZHZuYU1RQ2N1V1hISFY1Y2k0V1VRbVVtVTBNTUFtdGdRc0JTenRGM1JiQkJld0ZJQXc1bDQxaWpjYkJtUXA2eTNBRU50ODJkQWt3anhuejdQNzhWVVVEQi9WbXVBZCt4NTZjUCsrdlh2R1JrZUdoMVlzWDdaMHllakk4T0tiRnkxY01EUTRNSC9lM0RteisvdDZlN3E3T2p2YTIzS3RMZGxNT3BWc2JtcmNnV0EwN1BjZWZlVGhoN3FkZHF2WnVQK3VkRzIxbHNUQVArZno2ZHIxbW9wKzBMSjFURWdnUzZDdXZDNW95QWl1YjAxM1lQTUxiWXpUYk9EQVRYNVlFaVl5Y3BVNUlWY1BmSkRsSitvT3Vkc3ZMT1V5Q0hBMGVwU2hSZDRkdUg0S2dFcE1FT1daR2I1RUZjTWpWSmtCVUJVQlJaa0EyWktOUnNBTjErMTB4Szh0aTVMdnU5Q1FPY1p3eG9idFZKWVNOWVNGSTMvZXp3aUxKZFFFbFZBVnFiRmZWajdHRllLVXdpTDJNOWNTZGdObThMSGNzQUlsdjN0K3BUemlrZ2pTOExobnBSQTR5RHBiTzdCY2VraExJUnR5cnNvM2hPRmJpVTI5RmdtS1k1SjgyeFJkOHF5bHNGV2tFSC9iYW44bG5EdjNaeTVlNERWR2laM09RUkRCRDQ2NFhuV1Rtb0ZEUjUydVhKa3psZnlDUk4wakZVTGVxWlZMTlFFWG1WRWxEb3RaTk9maXpRNFJMYmkwSzNWZlFpdU9LT0VTTUZUdjEzVHZpNkNWeVU3V3hNbUtXM1VidERtbkkxN3lYM0hjbndqZ29mb1U0bWFTVWxMbklQb2Qwdzh5djY2b1dJTWRTaUdQVXYydGdtQTRFZGExMEZybnRRbS9lbHRoZnd1aEFIV0tzK0pzLzN6cXRUeFNmY1pkV3ZNQmtFa28yT1dkNWg4VnhrbDF3UTB0V3FmWHhqbmJYVHdEdzVvbVdaNXFkdkhJRGJLWXh5Zzk3MHBKdnpBejhuMzVPTFJrZlNiZERUcFpnTk05bFFKbTJpVTMvSDBuZ3h2SDI5ZEFlWTJRRFF2eFo0elNocFFiaEFqQm13VmJJN0Y3SXZKN2tpTjFGSkdXTnVBbjB6TUV5UmwwaDJOMTdKQ0tpZ0NQS2Z5OW5ITk90enduSXp3bWd1dlpaL1RNQmNRbEhBZnc1RXhIRHNYR3VGdVNlbzN5Q0puWlJiM1c3VWYzYU5aNzNFWUs3a09TbFZKc3dZWXlKQ3RjR00xR3JqOThjbkhoa0ZtdTdQZE93bjFXelIwaHhUblJVOGFCSm14cUg5d1FJSWMvZlVXQkhqOHFySVNqYk8yaFBXN2xSSWFvREpwS3A2V3JWSGIwb2w1TG5LTHlGajJUSGdteTk2QXBaNi9scTFpTlBZOHZ3REt6NWdzK0UvQ1pJQ1B3Y2FjcWNuUmlyMVJ6UHNuQ2dRVmFnNVVNcktHSjZ5NCt5UFlaSTd5aktUSktTVU40b1VUN0dUZGl4TzBEa2ZjVFVkbWthQnpxUGJpNVNpS2ZKYUpEREtZMVpsMTJ1MVJBT2t3U3A3ekhuNlFrYWlwTkxyNkUwcEhnbUlRME8zeEJuV1N5WTIwY3VIMnpXWXhOUTN3Mm1Gd1A4eGs1Y0tlRHNkVWFrS2xMSE5KRzhzNXh6eWhOdHRFQmlSRE5Rc2NDbDJ2MlpBbjFDaXR4TUVqTE13RzlwMWREdGRxaXdKVE5DZkxTcVJTMEF0VnVxUVBJc1FDUlpJbTh4NjZJTndwVENNSkMydllIck5NV013NVR4SjRWaTRIZ1JSb2tpZ0ZLUFRwbjQ1SllneHFoMGJvcWd1SFA2SWdrUVRLVlBwOUJtQ3R5U09KZDZieUUwbFExZG5rdGxjaUdVbXBRTzl0Qm42QUJSQnZZYmgvb1hhcG5DQzc1R0dJeGw4VytaWk9qb0hVaHU3TkMyNVVKb0xkb3ZDMVZvQWkyRkFYcCtNNE4xRHlBelVVamVTdjV3RzdaYmY5RWNUNmpNYnNKMUJwWS9KdG9sN04wanBRaGdMaGNZZlllVVoyQlhxR1VIODVROFJSdHoyZlFkbnpubGxCMThkQ0RNM0JNMFJWbUxYR1BGVlJqRWRRaExQOURpSnZwTnpvVUF2ZWc5WkFMZklqVFZiNGV0NXZQTTlBVVZDMTFKWUJNeUVwSm9MYXdIVnMzQTBDTkQwY2cyL3huWEpOK0lKVzRBS2YxR1NVYTNWQmN1TXJYbFVZVHVnWm9PelBmV0tSdWM4cVlNbWxPTUt3bDd4MGtLdHN3bGYyWlJzcmoxaGcyeXpxQmFQbEFhTWxrUkM3ekc0V2FIYzhBQnJseTBtRFZnUGhLZzYwS0lHc2xuMUZGUUdvQkhZMVRHdjlLZ0pwM1ZvbzNPQkl1QTQ4NW9yaDBjME5HMkxYNnlTQTlzR2NCYW4yUWhvYmduaUo2RmV0dUtTSFhMcDVlY04xRmkxbzNNZ01tS2R3MElyRmhqODFLaVVMRHZSSkRJNUtTVWxLQUZJS3hWekN1Z1V4WHBHZ1pmQWdQRUU5ME5lekt6cHh2SGJQVFZxMmRPYXE4NDJFTjl1eVR6SzJGWXQrV2RRWkRlNFViZUIxOHN3dmxRVUNpRnJiTCt5QzdXcWx6Wk9VYjJWcFlRWnUxbVBVa1QyWHk3MjZOajBncFVtb0VXSWVyL0ZKa2drZ2JBQUw0RGgvMGxvNUpEQk1DN2tnMER0elBvZ0YwSzdMV0xYUjA2UEVOMG9vSEgxbHVlSmtRRFBJV1U2TVpPNkxhMnNndW5GNTA4QzJsWUdaUGxjeDJYSjF0dVhGYnJlNTFDSVVXU2hiNGZvajZMZ0djbWxnK1VDaVNpeGNIOXJKNlRUSmRBQzI0QXBHYnNhNWhhL05JcitoOUllYVhJQ2ladThDNEpMeldUN2dLWVQ3NjM5K0FBakxscHBkWEFMYm10L3pjZFo4bmZJL3N3WE5iWmR3OW1SMVNPN0lmZ1pLQy80TUN3cEN3NXNEMWo0MHdJdWJkdHBCTmNzVkhtdVVQdmhha3N4TTlGOEJMa3NRMzZNL0JPSkFRdDhUQkJTVWJTb2p3SzMyRVliZVFyenVZR2E5bldGaE9LVGxRQnc5Q0ZqOWpURzRKM05nRHZldUFnMVVPaGI0S0FwOXBIZ2FNSktiMFNsb0w3RG9kSHNManB0WGhrdk9hYW9lMENIakRVNnRrS0NCNDJnWkp6UkRjUG8yeE5lSnJaRHhjWGVWM1YyOEp3azBISmhVMDhMdEdEUU1xS09QM1RHb0FJNlluYkVrUndEUmszTzRraTYxSW5xVDgxMnhLYmlpb0JNR0U1RExwTUtyaU9wb3ZGTHRiSWU5eHFNcS9TVFlzeTBaUUY1eWFaYXZwL2ErSDd1YkRucFNzaUJ3SkZhZ0JNaTd3VldjN1VIcWxtdzNmY0x2dm1uVlJTRllSUUVuZ3huSHZ1eDhRMUNWN0FJQXVBSURkQUgxQStMd2crZ0hnUDRDOVFMZ0JBTmFldk9Ud29xTUhVb05nbVZtRXlESTdMcnhMSERYWEVrN1pBTUk5ek9iR3lDR0RiazZHNVVnblRwUGMzK2paUU1qWUdVeXVOWGcrTS9UaWJJMmNCeGdKd2tiMGJnaTRmWmY1QUJDV1Q3QkRTTThZZVMvSjhubzRJc3hRWWs1MXdaS200NENqdzZwVGZRalhqVUx2OWVqUE9WS0ozUGhTMmlJZnVsQUs2c01MdXpZNU9uL2JIemhaRE4yR2FQaDQ2NlpMVVVaRW1XSjNYUkcrOEErdjVZT09sRklNUkZCNCtMald5dVN1U09lcDNxclBXck5Cb1J2R0RXYmdxY3U5NzE1a1h6MkJFTUZVWlhmaHZMOVVEL091bTY0d3o4MUlrc1NYdlp1SU9xY1lSQ3B0K0RVaWdzdUUzUTdidmc4ejlxRXpmOG1mZUhGbjU1c0pSVXVMWXhRM2ZNSFp1Tzd2aGs4TTA5MVF4TEJaMVNlMmlRTlYwZGpFdUNGVGJueWplYXFOV3REVU9icUplSnNCdW5JUTdQS1dxdkhQUEZ4RVhUTUtSamZBRGMrTTliNzVXaXRLZU4yVFR3UE1iMFBBOXEyRlVVR1NhTGhzbGpEQVVBTU1MZEtZUUhWamN3cGdZS293YVVRQzE2cnJoeEJEUlUvYVpnYkVvVXMrQTEwVHhrc25rU0xqWmF5eVJhK1BoS0tOakJUOExvU3FycUJHaXFHU1JpRjVUQkM3aDUzQ2lvZUY0V0ZNVjF6SzVqRFBvYmpIZ1A1YTlzQkREMWlPODRXY0w5NENvNUVkY0lrSGxOZkp0Zm1tQUV0K0FwMUphdHc3djVMeGJTVTNtZUtDV3MxM2NvZFFVWWxKVnYrOHRtdXJBR29FMW5wTWhaZXhUTG9QTDBrZzdVZXkyTUxFdXZNMHk0NUtsd0dsV3hBaG5IZk5qWmFXTmNNNnJKYk1pbWkwK3N6djlCQnFPdXRmUFZFakhqSWJOZDVwYWFObWJIM0ZMSnZpMXRsT3hOc290ZGlPd1Q5bmVQTzcrZVNHRkZUejBUYWQ5WWRtQS9wSjhxRmE1Z3NmYW9pc3c2MUFudDhPdmorMjQyV0szUlZyK2N5T0NHVFhUWjdacTN5SEpRTFIrcWZ1U2JnUGw0VW9Vbm5GTXFsdUg5QVA4UmlPMWthbHN4ZWVIWG5rdU5JZTkrNjA2emloMXM4T0s4NmVrTXI2cXNCczhydVVxNnhGSDBnVWZWc09ZYW4zV1N0QVJmN0Y1MHY2d2R1S2IwWXYyYnNwMnZDd1NxRmFNQXJySUx2WVYwcXgvVHM2Y0Q5L1Iwdm1iN3ErVWo0UUpESGZMd3FhMUwyWVNhS2U2b2NXWFQ2RWgrVnd1YVJ5SHNwTHRpVU1lZnBKUlVZSXZkT3A1WUYrL01oZ0JCMnBmd0dqa0tjY2Yrd1NJK0JWek9YTEdnMWN4VzREVmY5SE9hYUhpU3MwL1IzZGZTaThoZEZ4WWg3TXdsRi9qeWh3RGFnRi9DZTJ6MGh3d0Y0WDVKYkRzRkp1QXdNME5xdGpzR01EQ1Y2R0sxOWhqVUFEYlJON3lHZGhPaDh1d0hMMzBHenF5bG1jdjdhSWc3UW9selBuTHdyYmpjTnYzNlhLYUZaejRpOFBWSGhlUTNvUXBhcUxKREkzU0RrRVhMSE1DSlRaYVBLeWZRVFVXcjg2cUhjVzZaVGU1b003dmF0TkRYa0ZsY2tVUDZHU1VRaFZXaXRGMlc3MTlmUE9aSGU3ZzhXcjdGbTI0eThoSGtUbVJnVjd2alBSWFBxNGREODBhMGFaZzQzZkJWNXRXdnZJNkFCWU9nZkd1dGk4aS9rcXhRdUxFR29HMW81ZlRtbTZuc1dacmRsdUUyYnIwTGdrZFNoN0YxTVM1cEQwRFpEdzhVaXRXS0ZtdXN4MkgyMXhEL2JtN3h4czhPSDFsaVlKU1Z3NFl1andoeFMzMEJ3MjVCN2FDYkd0Z0haVUxJbTZ1ZWF0eGV5cHJWa3ErbEZuQm1SVkFkMm9VVDVDVjZQTGtYWDRrYUtiZGdUbUZoamVzby9LakM4SW1sZ2JMeXJHSzM4UzdKanF0MUU1YUNNaVhvd2ErVVBneTNiSjU2ZG9ISWd4UFBnYndKcmRXdGxPR0o3TUNOKzA1aTZWN1VtamlqaFNtSS9lb2RYakkyV3hRSGphbWZWT1NQeW5XRHQ1OGJveTh5dkxONHE5M0pocEw1cFdCblJHNmxhYTFwRVY1bS91SUFwUk43UlhuVGpJcm1uQTJzSGtacEdjRzZ5czZaZVdYejZkOG5UVGZ0WmhRT2JhQlhtTFZNVnFaa2dOREZnRGk2WGxUWW05Y1UyV1lqcHpTU0ZBU0J0cXFzU29saVVQS1VmYkFEMStwaWJXWjV5YVl6aS9mbVdzSFJYaWNqLzlOcDBaemZpWnRKMzExMWVkZ2ZBdFg4VyttbXYyNTFkZkV3RkF0cUc4dHoyeUR6TGlEdHZhYmVyVytKcU5iaEN4dFNnck02cTRzbFRKUzQxeGFDcEJHaHBwRHJyaVFRV1Y3TmdkajRGNmhTVWptb0xTQnN0WlRkdmRmaEFZbnJCalVpem0rZ3dWdTh6cWhzV2IzeC9GKzVYRVVEVVRRWFFDeHdkSHh5NXZpNllIbnMyOFVpSmgwbjd4SVdDMzVsMnNHVlFxU0xIZjFDTjdnQ1FLa2VHZ1I4YVRXcVcvQmxmNUtDQVFnVG11TEN4TXpSampMSXNSNFFnM1ZqbzYrYXZYdG1zQ0pvWk1Pa2NiekYxS09IR0Q3Wkd5a2xjV014c2VpRHNTbVV3Q1NSYnhNK09NVllneEtnd3ZSNVpOTUNSNDFPUXVIc3p1UTErYTcrdWYzZ01lUDNHUkdYSE0wR09kYkdoZmY3eklhUkVCK094dlRoMDk4QnMzZi9EQVkzcG9EeXJRVXU2VEVIeVVoNWR0Y2ljK09DaFFGamVGK1JEejR0dnFkRDlGdE9DaUEya2ZJSHZlazJQTFJmdEFPOGR4WXU0ZTBMaXo3V0J5eSt3RHhYNlpHdXJaYWJydXpHeldvTyttQytaRmtuR3NLVHVMek5IQ0pDNUg4Z1V6RnM1M1dyQlZNZ0szSWxPQkZML0JFUVdtOWpUbWNSOFVFazBMSi9RRU1EZmdQSFRaQ3FxV0Yvb0tlZXY0VVI0cUdWVVM1enhCME5meXJRZG5UOHdmZEVhTHRwY2ozSmg0RmEvR1Q2WWM1WnVBaTJEanV3YytJYituT0k3dzZNYXFPK0N2S2EwanphZWY0RHFRb2VVSUFrZGttNXU1blBPN1ptd1R6QUE1VlVmeG91UzJHRkFJTUFoQTFTK2ZZWVZJcFBjWGlGTEZDam1nZU9Fd0FVZERJSHc2MFBncEpORDJPRlJGYndJTUVheGhwS1dXNzJYN2xtdzhPWVdPRncyZFpzbjJkTnY4SnArZkZJNFpobVQ5d1pjWmE5Z1N1QUJUcnU4aHc1azBtZUNqN1NzZTlkS2dnSlBSUmdVc2VVVkhhayt4eDhNUTFGR0RoTXFhdWxtblBMbkF0RFlBQ1M5T1c2SmV4ZTFGKzR3OXZKa3o1VXgrcWdXODVqa3h3enc1d1dBVzVtSFp5ZnpPUmJOTXpDT2M1amRWcGhac1Vwc2UrcEdnUnB4bVo0K1o4OWk5cE8zeHhoZzVSaCsvNGJVQ2pFcGg2ME9QMS9HV1pyV29yaTdhWld1UWkrTFpKd1lwMGJOTWVmWmh3eDQ5OWluNkZKY0FLNERtQUdUSWlGV0p4RFR6d2xIZnpmemF2UVlkNHlZTXlEU1lQQ0xObUpDenVGRmJwbzVFdWlpUVpKbVFsckl6a0V4QkdtS3AyTFRqaWtpUHNLZlB2RjJKZEQ0djFFL3MyZTI2c3hnQ3J1Q0I2TXlaTGJzSVAyVGQ5dW5NN3Jzc3RQMkg2RkJnVWxPQjYwQy96WTRxM1F5MHBybmNBUzdKWk04MTJ5WWRKWkw0NGdJRE51NDYyWVJhVHp5NUhLcTdManhqRk9jYnhhWFpwQjByYlpiVVBUT2IvN3F4a2ZUUE9nWi9kS0tSZ0d6N2JmSXNvUTBEeHYzejk4M0xONFlvdm9hYm1OWjJuak9LSG5aOXNSZFRHakpxeElPWU1pZG5Kd1JaRHBrVDIycHBrZElVTlhGU0JoWEtIR3VCaCtobDMrajViU3IyWE1PN1NCM1ZLYVgyQmpyT01tMTRxK1JzT0dCSHN3WUZOcitrWUx6cUFNMDNuakI5OUdqcWprYUR4TWZPYU5yVzZFOVZNbEJpbFRWeGNXUmlBSmV2L1ArVDRhNE5iWXFFc2tkc1M0YTRyVktMS1FKTkJKUUZiU3JmanRCbU1vRVVLU3ZqZkFsQWxZVGpTMFJoMU5IVXRNV0hXNEZuMzBZVTBJNEk5QVBVOXJ3dHVOK2JlbmxTY3RpRVRSWW00ZzRqN3Q0QUpKR29jZW9rT1JnUU04ejBmSDlOTExhU1FSRThXY0M0RmZrYXNDYlpoWDZrNHNTYkdYTk5MZEl2bVFIT0JHb0dWNHRnTkswczkzeGZBdnJpN2VtTUFoYVVnY0dJeXlmZmVYU3BiSGc5L2Q4bTk1dTgvdCtUdTcvdCs3YTRUeC9zby9lNU5Qd3pzcHZLUnJOVGoxenAvay9iL3pYMm9FLy8vMlNXZStOcXZnbVJkVTBhS2p3Ukl2MTZwRTVGVWVuemIzbzc1QWpnSEVPa0lGOStHWEk5ZkVOWUtIOWNSa1B5cVExR2hQWFMrTExHbm1YMmVHNTlrNVRadXlyRlhNOURtVDdLbDRMbW1SellZTGk1UjJmRGtzS0liZkM1cmt4Z0FEYjZSMnVUZmVvMS9KYUpQNFoydFFidjc1aWJ1Rzl2UWErb00rWGF1aUthSFpzOTFySXlRVytyQm1Jb2d2NFlFemgzMTlmZHQ2ZWdyODY1ZFdWNTY0ckorSlNLK0c3aVUrSWViai9lTHhmSTloRlhPdkV4Y1ZkTkM5NVN4eDBwOUkvYVV6MmFWWXhYdmFxNWE5amltNzJtU2Nic0F6MkxhME9PYnIwdkNROVlIZGhBcExsWGEvV011b3crYy8rcVZ2MER5cU1wWExKbWZFTFg4RWFEYnUxeHYrRVd0SkJ2b29UMGEra1cyT2xtNDJZM0FrUm1EUVlYNlByalpXdjkycEprVUJOaVg2Z28yZExoZThZakVRTzF3eXFjdi9QMmoydWk1SDJQeXl0T2QzSk9BTTd1MUUyMi9GcW5mVVJyZHZiMDRpN29YNE5EcnlmSkxSb3VESTdhbXJ2VnE5dys3YXAwMTRqRkZ4cXhOL2VxVjdyODJhbWFjNzEyNVVDd3VVZFg2K2lsQWlsa3ZzV3VHQWhWcW8yTytWT0srZFdDZlFjWjdTcUMrT3E5L3JyTVBJTXp1TVNhN0tHMkZqTmdpTGNrMy8rbzVWdEROMUZ4RGpScHNpeE0zalp3eXdTa0NzSXJ4QkdsbWV4S091eVhTcXdYMUl3V2pLblVhTlNyeHY3bXpxTnVUbFVVVlpxMDNjbGErdy9MZEJPNlc4NXNVYnRJS0lZVktMNkg3SGhXVXJPcjRDRnFaUER4bSsvV2g1UlBIcVg0TFJOeUlnalBGMGVVbERJVHRIT2VxcmJ1bi9WVGlmVUt3V2lobUlwQW8xNE4vcC9nU3F6ZzdsdWowcjdXS0tONk9DUHhsNFhMQjFCYndLRUd2WXdxeXpVYk83bk5xdnJIbTd0b2ZxQk0wZExuZHF1dmRFTEI4bUI1bjF6UFdPamE1SkFxU0VRclhkQ0gzUERld24yaCt3b0phL1dTd3NZaEs5TWpXc2wwNjdvdDNBRkRzbFhuODdkU2hpUm52dm1hNkJPdjhuUU9tSFVRVFJ3dlhXOS9ENnJRY1MwMlhqMzNEYkkvdnorZlhJYnVTcFZ2VnF2SDFYZk52WHV1bWhnM1ZteStyUWh5alY5eVhuUmEyYjJsTGRhL2pIOGJiYVV0N042YTRQaWxUWmMzbWJsakpib3l6b3Zjb3U4dXovdVBJTkR6ODg0Uk9qNndXMjEwdHlPMG9yRlVvUFhYTlFiazlaSlhHVmtyb0c2Wk15OVhVUExhMHo2clNncWxnWEtsYlZCYnE0MHFjWDkzL3QwUGNadnNrVkpsdE0xT3liaHZLa3l0S09ZTS91VjBzVmdUVWVJQkZXRmcydVVPMERmekY5YldCWHRqRGp2U0lIbFYyODJrbkJsTC9iLzlOanE0d00rTUJndG5FUmVENWx6V1lEUzJHcTB2LzBDYm02UmExM3dINUEvcmt0eWZMZTNZMnM4cTlyeGIvS3VyR0lqbUhIcFEvc2E5RiszRzFqUmxObVlvUXc1WDA4WDJmdnJUUG1LU1pEeGRqTXZVcExKSHBEa2RCYmN4d1JUNkJ4R0NCc1F4MUtydFNUbXNlQUNaQngyd2tWM2pmTFRZMElKNmdraTdLZVFjWHVnTCt1YlFqNVhQYnREb3pCbXpvY3RSYSt6TjJreVF1d1liS1gzbmNvTzBXbGtRc0kvT0NYcmNmYjdQR0hKZnlmNFRQdjhPVmkydHNKeWJZemNiTXJnckJPWEdKUHUvT2htQkVKVWZqZ25pR0M2Sjd3Z0N1R0M4eHlWUkZOa1VuZDVBVnFIM0xIQXk4MXdrMHVSeUpXR2RiOGo3MklDMGxjN05iMnNnZk0yNmVVTzJZZmJ3KzFtS1NtWDBKbFBXWkd3MVVZYjZER2t5WlNsRGVzTnQxYlVYbDBaNW82RWZlNTBBV214c1FkMUJwTU1ZZEE0djlQdURRd0hYaUg5NkNiNXNNZWZTQm9NaFo4U2FNL3EvOUM2YkxDNU5HWTBwS2doWk8vMzJxVDBWVUFZcUhXREdxVmFKaDhUVkg5N04wUm5pa2FwZHlsMm5CSklaVkJxancxQ3JqZ0xhNldBelpuQjNlWUVob3NyTDVBWUlaMmEyY3hybmJML1dSaVVSZmRpMDRNeHMyNlRzRzFPbFl2L1BINGNBaFRvZ0orbWF1RUlsaWUwSUFySkxKTkRtYkhNb0UwcXIvNmlMbkNTajE0ZDhOSDVxYVZXOVFSQXRJb3UweTdOa3R1eEVYT0xVR2M2azIyRDkvVGMycy9qZm5SQWhKSVNoakF1KzZXMjE0RDFRTWZFQmU4bmdJK1FrZWNPbU5ILzcrU21kTVBHZGJpRTB5YXRndjdOdkdyOEtCYkN5SUFsMDJsb2NkRWU2MnV2Y2E3dXMyZGN1eWZLNXlDTDFzdkplZDYyekxyd1M4blI3bmRpaDJSV05CdmhTdDdvcFc0czNLR3Y5SjRJNG44ZlNLQ1B1WHFOQWVhTlJVQ1F2Tm1hVlRCQnVOeGpoTm5jd2l4b01HZFJ6cm04ekd1RDJ6U256WjBZYnVqSldreWxyTS9UWWQ5WWRFb3ltak4zWWJiM3JWcmJ3WEJ6cG9QV0p2QjNVZWM4NzE1KzVzYlhDS1pOcGtDSzQyRGZrYzQyRXdxN1JSWDZmUG8yNW91ZjVpZEdXZXQ4OHAydGtXcUt3aEZnSldITXRSck01WjV5MS82N1QzQ1JSNjFzeFg0elV1Nk1wRkRkbnJJYnVXZ2ZWemFuZjJGdEpLY3NuLzZyTXJTbkthRXphMCtjK0hDcG0rcnovZWNnVFJOKy8vYlZXWXdwM2hhR2MzbTlkTWp0UWh4TisyQ0dJb1NwSmZIc1F3Z1hqdmFSbFAzdEhDQUswK2RPODJwaFFHamVZYzlaOXVPNHVuYXcwVSt1d3BOU09xTFJOYmRYME5EdXNtQThPVlQwbmtEVjlKVkFGNEFGUm5NOHROalRodFNGWlRtOUEybDJCTkthMzVxbjJFeWRJVDJKMExvNzdvVG5Ra3phZC8yc3hFVVNLL3hwQXJicnVsQjFnSmozNWZWR1cyME1XYVZZOVd1Um0zVkl4cmViZjR0cCs1WktPeDVzaFBWTm5KSUV1UDhjVzhZc2NTaDNwYXBKUzlyUjg4UERPTExFR09qY1hFYis1YS8rbFpzbC9oRzlPZ3Z1YnZDZC9jWDJkVGhWS0tBMlY2Z3I1Snh3SThaeEFDRm9wOVd1dWF2TnQybFF6YWFMcUZHcXZHaFRTZ2t1UjhvYitzQllPZS9WZG91OUZGTTk1NnJoUThNT1llRk5BR1hpR2ZHWlVPYnBNbU9WTHZpVDUvbU00Q2JmVHJTNDhqdGk5Zi9uSkNkY3g2UzJ6TlBuSi9MeEh0TmpycWF0ZktES1M1TTF2WjFDdmZmNzY1MlNJVnArZVFib0F2cUFNR1Y2UHI1MzRkUGFOcHM5VTNpYzlUeEtWdG4rOFNBTXpIdGxZdnZ6aHJ5M3ZGNzVYWUhub3EyWExIdjdLL0c3QmU0VTFnNGYvV1ZXL1JpSHhDNzAvejZDT2Z2N2E1enJoL3B6L0pMMUs4d2FyYU9idDFsZjY1QTlDYzErWkkzK1U3d0dtVllUSm9oNlNrajFnMTVjYzJTNTVkOC9Md3VMWVBPQWVFSUFJQk00Z0w3b1dxMkwveVRjT3JQTGU1WUxVOE03Tzd0cytmQnNtVnZKOWNOVlVFWG5xNkNuU2dEc3JFUFdSUnNEWk1Kc24rK2FGVzZLWWhyR1U1Mm9TNVJnYTV2bVZGUXVWQzhzaGVZVlpGakFaMUZ2ajlRbkhIOUxYZUt5KzlpY1RFeXk2aTVXemVodWgrK3E3MXh4N0ZsSHRYTVNFSjZaaGhlU1E1RDV6L1VVVmk1U0xYSWxkdU95K3hFZk1DNUQwc1F6cHJpWFU5UmFuL1RPSnFrRXRXSGUyektOeWVpSis1bzdpMFZWWTI2enBYd0NseGNmU1pEOUM3NTEvcGN5WU12QzE0ekxKVmV4VVJoL1g0blZxVXBVSVhMZHJzQXVwVnRWdGZ1d1pyOWdMTVBJaVJNc1ZqcTlnYUp6R3JWSkNTY2Vtd1lqZlB4QUJubFRxUUZRZGpJNUhOb2UxQzVPMDFaS2lnWVdCTFlCZExOWWsvWmRleFJvVjRTQjJmTHcxYzBYQ0l2bXpxMHFyeUZLQlNqaVRrZm9ZWnZUbzd3c3JBTUhaZnpSQTU5WWpCWlc2UDEwK3ZzcGVqK0VlQlpyWjh1ZWQwODU2eXNDNUJEZncrMWN1RW9wb3JhWlVsOVlWR25Mc2pSQlpFeFBOSmdLQjFzWm1IbDZUYUF6WThHMWVHV0ZORzZLQ2MrUDFJbzB0cTlMSEtZWFVmWncvZjhXUk5ONzNCZmg1a2tnZXFmOFpXUzJZdmtzM0VqN3BmcWk3MW01b0pNZ0dJNlZOMU9GNk1vMi9yNGx1YmxBVFJ0NnBCa0JOOTVudFhZekgyVC9Qek1WK1llaTU4NXh1VFQxWVMvODJWN2VuTlZacmEzVlM2T0dCZ0MreXNJVitZM2VLWHIzQUUvQU8wczc1bDlZWTBwU0xHcWxVQmtpb0RSL3hWRHF0NTcvQTNhaysxVGR1THVHOWFXZlNBeHFYYjQ3UmxqV3E4WUNiREFtM1lCQUdPNitIT1FwNW1ITWRwakVZdTFONEQ2TlhCUGdJdG9saEErb21oY21uUmRCUk53c2dtdVVtZis4eUZJMklFSGxZYkcxWk1RekIwTERrTndIa0U3VFc0Znp1M0MweGh6VjNiMmw2MVpBbjZCbVNLZUZhS1NNSUdLbGtlQTl4NjRxOStYTmR2bjVvbVkyV3J3ejE5ZGN5L3RtTWZ3NjAzT0tVcndqMXpxNVY5M0FrODZ5WlJxUEZsclJZY3FJNXBQRzhqejNUYkRUVldDMnR2KzhxRnFzSUk3R2haeXMrK1QxTFhUUDN5NC96eUxjYWJUN043ZEFFM2RUdGliak1venlrVm9LZUFHWTJ4cUc2czJLSWU3UkphZzNrVE9vTVpjRDhiblZFSnFZRjRWckhhNkw3aVRKcGtiTVhjMFRxT0d6S25WR2FEVTJJMW9XcHpVd2Y1QU5WWU0rZ215RTA3Z1JNTWgwV0lzWnlVVW1oaHVuWFdaTW01ZisvSGJ2czA4bURLck9yY2E1YXNHNWlEajdhSmJZNDBYbk9zRVpjVXF3YkR2L2xmckRiVWRXcHlYcUhhdGN4YlhUVFRnYmVKNzhlWEY1bjN6eUxaUEZ2ck9EZ25oT0JwL3ZIVGFXTFdoSDZUZG44M2ZSN3N0RXkvWDV2N3NyUUsxWFh2RjJOYVlQUk5xUnFEQmk0MGYvbjZ4UWwrTDVRN1laKzQzcGtFTjlUekFDWW1vR3VjVHhTaU9jdFlvQTNKaEJaeUtYVndqdWN2Qm81R0hScTFjaUtPTC9zdWdUNENHaG0rZ3c3SzhFS3h6dlN2UDR4QjlZSm1XVTdKeTgrSXBVNkRFQTEvNjRSUGMwSU5UNjNTeU1aR3dQdjM4ZVBzNjRDN0ZjTGF4dTBxYzZxNnQwUTZWRUNjRUxKY0tWYzJndUNJSTJxbFo5K3Uvbloxd2NsR0NOb2t3REh4cjRlUnFTSHZYenUxT3lmcEgvL3o3OWhCc3l6VDI5OWJWVTRkaGwxaVljUjVFbXZCTk5FbE5JMUFsb3ExekVVSmxGNlJOTE4wd0Q4OExmdjdwMCtDYjRPYkplcTJYTld3MXU5b0FvTklwL21KWHdwSy96bWg5MzVQZ1FQWlJhTlJOSk5QcFVmdk9mZU9ObGRoRkFvMmdxQVc4VkNRZGxXRjI3M0RaRDZhWk55Vm02TzdGbGZEYXJ5aXJ2RThtZlEzeTVMcEhmUkhBQzRlSmRFOHV2TXJUWGFHcVpESk9yVTgyc2FGd2pFWGZEcGp6Z2xVNGcvZFFNNEo2YTA0anovMVVMY2orVGYvTkZUaU5XWHl1djlIVUF3M0F2ZUJTTUgvQ0R1eXpTSFI5TUxmUStCVzhzRVF0RTJFRmdtRkFxSnBkWGZoL1N5ODNXT2V5ZTVMRmlIZ0tFcEozaGwvN1dCYjRGMXJsNU9Xd1hJUGpLWkJ4MXhvWEMxODl3ZHZ4L2l6dUZkWGpxQ1BJMVBWRjhDT0s5Nmo0ZE1kamtCZEtyaXRTSFU3bmdKM2QvM2Y3ei9KMWs4RXpUM3p4U05CYXBoK2I2eTFUVzByRnFNS29kYysxUzFGSDB5THFEQ0F2RHB2TGcvYlVFcXRmRmZwNnB4cHRsTCtLQ0RUc0IxMXgySmw0bzRMMXl2S2NtOVV1TVZZTWN2NlpRY2t1OVdPdXVPc2t1cmIrNGNQcFZQbnQvMTRac2JTQ2RPQmVVWTVnTzNBVWU2MFNMdncrQlNzYXBheXJlRUowcHNaZi8zV2hPZkZIem83b04renp6di8zbDhqTVZwcnN5OHdFbFdaU3FPNklSTWR1WGtUNDlJcFdvS3FDNitxMEd2Y1FrMUhzYWxrVHd4ZHNONzZ2aEhySXZBUDJZUlhaTGlOTDhySHNYZkxKbFMzTVd3dHpIY3ZEY2czK2ZtYm05VDl2NWJIMzljM0RqK3pMamwyZkVTMTZWdXZMdW9vSkRYMDhQajlDem1jVy91NWZCNnU0dGNoeHV4UnZSenl4VnQ4YkpvVmJPdW1SVXRZeHJ4eG5ETXcyRXp2TngzNTNUbnlPOTZkRDNzVy84bCs1eldiSjNzS1YzODJYTHl5dzNLVzNSZjRQb3ZQazIzTXFSY292dHl2WHluNWlOYys5R25pOERDeVdzQzlpa2pITlRlU3pNZmZGTmY3Y3djQ3ZFZWZOWkxlOGdsaG1GRzRQaWI0anROQ1JFS3VibnpKVjQxdW1tRC84Rk1XeitGdnRHQmQzQzBwdkpkMDRjelJUV2ErNWh4RVpkQTh4ZkZjNXJqSXV4ZEEreDR6N0xjeTgvMkNBNnBEZ0dIOEVQbG5wckRxc096dkljYjhVWkZYcTVtTjF3ZDVTTGpuNCtiUHhzdmNhcUlOVVJSby96VzJUYTlwWGpkdjlmM0ZrdU5XS3pvendxZ3FyeFNVWGFtZVFhWHBTeU1ZV1c2bDdCWW9aTEZuZUg3cjB3aG02b0NLbTdNaUdGR2FmSDZmMjdzS1dhWHBlVWwzUmoxQW9XVk5HT0dGd3hZZDBsSlFMSW4vcnF4dFRPbVNzSmQzQjUxaEJtenBSb1AyVmJJVmhSOW1yUkxWOWhYM050b1RURmpFVFduQituQ2s3bE9VMnZzOVNMWFplSWlrVHFmYUphZXZ3SkZ4YmxEcXZkM3ZyOURkVzcvKzZKRkFQci92MDdyMlE2alFmVFFlNkx6V1BQQmpnK3VkLzRRaEh3ZE52VWZkS1BzdG14WnRpcXJ5N0t5Z2E4WXh5c29iVjlHcXR0ajRDdGd0Yk9Hdml2cnFNN29NNnlPc2x0NVpaaC9rc3FxaHdmQUJyVTlKRXRyM0tiRmZSRlA0YzJTbTRQNTdmU3VxV1ZSN04vWFJTNXVjR25wcng1VHZRQ2UvOFVvUmVUcUhNakxEOFlyL3VhRzVIc251eDZSQVk5MmVieFBlTDNUelJLSldlNzNEdnM5SFk4Q3dPNE9yM3ZZNjJtbnBlYnBiczhkbXM4VXNYRVlub0NjY2dWRWo4UFFWNUNyQktyVUxJSUtsdTQ2ZTJjQnlJT1c2eVpiQ3JaaC9UOTFRNzY2UWRUcWNKV2JPaW82WDBKKzFGOWQzSUdvTzNRa0IxVWhJckxOdEpUMS9kZi82dGQ5UC9uOTA2K1hGY2twQndQbU9vVE82SFUrWEdjSWpId095TFJESHFXbkVDMHcrdWZKMUpLZ2dwRXdjalVSanVFYWZkYjB5ZjlMSWxvVVhNQ0R3TDhWTG5GWUM4VFU3cVZWK2lyUnJ5L3hXUytOTGQwMVJ5QkNVVEd2OTJiNVhWMUpaUDUvTlR2Z0hVZDFSN2ZEMjRXZkRpQ3BNMjNtMTNOeEptS3g5dWtycmxoRjd6QzZacnQ4KzFyZnRlMjRWZTRpOUhhMGFOVUoreFhMQi9XZlpmRXJ5cGN0WDdIaUh6OWw1TkxtQko3QVRIRThmdkl3ZGp2R2QzK0NZQWphVGtrbDMvejN3QlZqOHZNbXp2REFWYmFzQWdLRzFPZkFqSW1KMldFUFpzRk0ySVpiNUxkc1NMKzdCTXo1d3J2TjZScXhTRlRELytXN0FpRC9Udk9JV0pyOWs4dDU1WGgrMWFYMlU2cW5seE16RzJhUWNMdnpHWGFmdDBvT2NGV3ZFVjJacVFyQnREVU80RExLdkQ4ZkppVXZQK2Z0aEFma2lnR1FpbE5BanRCVVlxWDQvNmVGa3MrdUMwWEh6cWRLVzA3eU5rSlR6bnUyKy9SRzZESGdlbGFibTN6OWJVZDVYenE0MnRqWlk5cFNYeGtzZC83bWxzdG1IdkcrTzZYVWUySUJNemxTejhWeFQ4VUZraDJlUXlKKzN0Zi9HMkpDbGVIc2J6UDkwQmJSbkNhdTlBbXVjNlpQR0NSWHBIUERsTmM5U21ZejFQS1FuMXllYmgyaHZNcFF0ZmJJd3JwcU5MVEcxTmxsMmh4dnNHM3FhVjlMYmF3NStkYkdhdlFwTjFzSE95dTJ3SkxmNVZLK1VPbnBIVDJvb3h2NHFNb2RWV2dKSDdCTmdaSGVPdnRmZC9zdEtJTnJjblZTek54Q3VwUFFrQVAzNHlzVG5RTm10N1ZiWmErM1VOcFlnajVaSGpCc2tLSzBRUXR0enhkWFhweDhkY09EcnRKdkIzWXRYMzlHNmYxVFpZL2JWZlpFL29pSjdzVURMbHQ5dC9LWkRjMTVyL2RrZXVNYjR1Q3VWNDlaRVF5a24yUllNdG05UlFOL2wzV0dBQlhrRkw2SW9IZjhuNmR2QWtoR0x5aDdiZWd2aGM0VVNDb0ljUG5lcWFlWFh2Z2d3QWVkd3Qyd0k2NDVEWG5LMTIxSGhZQnlqVkswNk5LNC80OGFMdm9YVXkydDRTcGUva1Yyei9UWVdxcWozYkEyR2pHczdXamJvN0hZT21yV29DVVNQYk4ydUNWUnNXK0VTRFhyUnZ4K2NpU1pHdFg0ZmI1UktxVWQ5bm50VkJwKzlJeDBZbkVKYlVVYUtXVk5IY1hVSzh5MW5aUjdpbzlETFB5ZlBTeVhUQ1Z4MTc0bnFsbDQ5b2tiM2F3SUxLaHVQYUxXUFhYTnV6dTkydUhFT2FKNCtlajV2YStOcUY1RHhtUTBLSHR5eGpuajA2cDVCOWE5NGYzYXA2by9NVlVhdmYweldQSkE3aEo4S1llYzVlV1RBdmhNNmtWSjhzVXppSURNdktYVWI1QitKSlc1dDlKUm1mUW9UaCt0Wm4xNG9vcDF0TEd0ZUdaN1U5TzBtYzVseWRXYkF6WVhiZHgycCtwTy9DOHpTUVZHak8vQjN0bEQ3Tzg4M0ZrMk5xVldIcHBwV3BuRWsxbi9tcFpvVjZhSmRKSG1PN085UVZKU3YwaHRhN0NVNEp0eWNiZ3QvbWxEcmY0VVo4RVBnS1VnL0NjSS9nR0RKZldON0VrZSt3U2I5VHVYTjFrbTNDQmVDN0k1bnQ0Q29EQWxtaTRRMUROOFFYZHZBVmc0MjA3eDlmZkJJcmlvL3JzL0sxeGFWNlJzOXhzN1h6a29TQzNqUXltQm9BbmMwZk1HcEJoaHByUGV0dng5cnJkWHN6bWU0UUtnc0o4WVByMGFhYnVucWdBeE1RVFFEditOUGN3eGoyT3lNNmR1LzNmbm1qL0d2MTFrUFFJQmZOQmNDd0tUdzNVZ1M1d0ZyQUFkUnhWd1JnVzhxUUl1aDF0SEtsT2tyOXJZeTE4ZmFvd2lXMnNnNjdZR0wxakpaTUpVd29jcTRUdVZ5QjIvN1FLSzdYUWJvUEd3QnFMV1FEN1dRTDdYUUg2ellRMElJMzdvNisyZ2FBSDcxMjNkMzdjL1BEZGNLMElBaC91YkVYSzNDV3dIcDJFeVBPeWJIOXJZbWYwQjJQc2hBUE1zU0habWNldjRGc2Z1eGYzOXhmMnpWLy83RDRzWGtiZ1podGw4cXdZT3FJRUgxR0NmKzhFZkw5TnFNNStHelZmMm4yLytNRWUwbVVldFpjQmUvU0hvY2tZY2NKNzRCcng2ZFJnQW9EMDRCMDcwcWNob3pZTGtXb2I2NWE1djhtZVdKbW9tQUdwd21QSWZRQmdXNU84V2FqQUh2bzFkdi95aTQ4YjdiZndUUFozc3hBR3YvYWVvWVFBZ3ZsOUtFd0RzNlI2NDBmdjF3Ykh4UzlIK1Q5ODlyU3JOYnEzbk5MMWZIbHdBK0VSRE9JQWZoMXprd1JWSFdndVBUbUVmV0svLzNYdE43MGNlenFYYlJILy9zNkQzYjMrUXN6enNsTkprNzdkOUd4bHNUQ0hweHpJOHUrL1Q3Nzg0UXRXOHNvSDNRK2pKQkhDUjhrcjRSeUErZjZ1RE16NE1jallQOTdTaHY5SENucDhLZjNpR1VndmJnL2REdU5EeFNhSUFLTVQvMjFjWjhLRDhETDN4dVRoRmNXMmk0cDlWN2hYTFcwQlZIMXlIbDR0N1BMMi9sUXVvdXpoWDc0cndodjBha2JLbnA4OTdQTk83Rkh6am9pdVdsRk5lcytQL3NCYlAvMktuSGR6OHVtdnJQWlN4RmJMaXdWeHlEVW94cFJrM2wrLzh6TWVQaDVSMUdBY0E3c3JWKzQvcEFtSlgyNVZzaTRndkF3cXhXRFRhRUZKdXlEUTJFY25XWHFsS29wS3B1YW5SQURUQWhaTzA3WFpiS2prYmxuV3A3UjNZYUFOVFBiNHBHVGR6dVVPcWRZMVdpZThtRDNqb2NUMDZVeXdRQVVsQTIwWUJvS0psWFJBSkRNbE5rTVo3eVNvdFpFUWpRSS9FVWNsV2xkV09YVlJtQ2xlT2dyWVdWSTFCTDdtYis3MmUwZE5yc0wwQzRkWnMzb0VLaGF4dU5zbkJFYkZ4TWtTRVIrK1pqTFpIWWhKVlYzbXhveVZSYVVUMHFqb3ZyZWdjVmRSc1hqa21hRkZ0RWVKbGplUUZWUXBtVTA0UWNiQ0hqQXoxaVVJYXd2bE9Ya082TFI2a1hlb21YTW9qWlJOVjNmcXF4MzdIaDdmVWVnRFZDMStacUV3bHE2NjN6Y3k5M3E1NzQrcXVBcjB0dEJVcWYrSnRqRmlwYzBCYSt5bDVhOGNtN1l6TnJLTkErSVFGTzNwZjFmclZiZTFEU3BoTldSdG9IZUpOaGZzWFJlZXhxdnNGcVNmVTc1NkUxaXlyc25CWld4cFlhR1ltSVJLdldTN3o3T2cvN2k0Z2RtNEpEYVJjbWhqcksxTTZOL1JhY21PSmhHaGw5WTA0SEt4a2paL2NHdktDbkFydGR1d0lkSzFJUmloV3Rzdm9iNUhZV1ZhaENMNTdpWlpTOVNVcStEVEg4OTF1QUlqeWxWZW5OYTF0U2lHYkhTbjJ6WGxucDh1cWQ3bnFtUG1uQ3dYbXgyMVg4dVBIeHpnZkVJdEV5NTl0dDkrdXY3TFhkbFBveTVsNjcxbDRNQUoxbzVXb0tJRjJGKzZYWjFUdDYyTE41Z3V4V1dXbEV0TWt4UGZkdk54RnJZZ1IxMjFSbDJ2YXNvRDhlZzYzc0Y0dFE3bFFlR3hiUGVMTUNUaXFyMXdETCt2U0pmVjIrNk1YZlc5Y0VNUEswTC84N2tFaThZMnJiOVZEdCtQOUd5THY1Y0JXSjFvdTdjS2RFeFdlcjhqUDR3dkRTcyt6NkJ1UGFHS09ML0NtbGlTYTRieWlMdWcrbVJCUlJmQkFON0dTWjAyQzRYSDhlcGRXci9DQjhnYlVaVXBlU3M1eE5RRElPWVZBMUVtSWVpS1hXS1pSQTFWR1RDVHhvbU9vZ09qUURjZlgrejFybE95aG5Vd3RFUFppUURTbFNRMFhIT1Y1c2k5ZTZaM3E2OUJudEMyKzZ2UG9QdkMrNCswVmJUdDQvMS84d1hJeEc0Nm1FNHduMEhpMy9YQVFwaUxnQUZaZzBMajVLSCsxWEJySFFucGhUWjB2KzNPaklwKzZiMGdzNnVvU0U3cVZ3anUzdGVoOUo5Qk9YYy9Dd0R5Ly9hVW1GcWxGTE1tSDVsVTFSOWhSVXc0U2FJMzBxRkhXQW5tbVNscW8rYXR1RzRYc3NTMTV6ZjFTc3lsNWJaM2I0cEZYODdheUFjZG1jWit6b2VoenpvWEVkYVFTWmtvb0x2bVY0TG16dXg2dkV3VzdSVkNFdFd0M2RBVUszZkZpWjFhZGk2Vk9RWGNoNm16R3p6Mmh6amZNS1FxVGppajJ1MmFwamlUUHJhUkdKNzdhTmpUcGNkNmdQSkJXQVA5WHRhcGNXUDl4K2pMOGpkUFB6YS93cWlOdWZEQXc2M2JYS2tscm1zQWUrUVU4SmZ5ZkEydnFGK1JQM1luMTNlaGg1K3U1SHJiTVJJWXc5UEx0b1g4d09ZRzFrWGVDNGVhOVowMk0zYU1hdW56OWNueWF2WHI3TEVRUEhxK3FwaGlKSHkwSmdKZ0F5c3pvbXozVGxsWUJDZGJJdlJPY1VlTGdOWkx0TE9wRnByWDA0V0tPZ1Y1QWxpdzlleDJiTTJ3Zm5ZK25Odk1WL2l2dS9oT3p4RkhWYmxKRFdhTko2U1JsdVZHOXNWcTB4clZFWFRmVUtCdU1xNmdQUVhkVXMxSXlWdFN3Sld4dmhkK2luWFE5SUM1S2h4SExNdDRmbkpvc3V0WU10cVhBTEJ2blFGUUJtSE9XZGxWcitEVFB4bElnZDJHTXE4bGhQNDhSRFhPdUVRTVppODkrWWljU2t0Z0pJTG5tTGg0T2gwTzBlTXF6ZG85YnlvZndtTzM3dWhQckpJZGNMNzJzRTV4OHpxaW9WWW1reFZGRmE1L2JsYW8zQUtnaC9rRU9BbVB1eDViRE5PUXExYklLd1VtSmhpWUhDM0NjbVpMdmtXRlZrUTVaZWpuRTljQi9zQ0lpNGxVMGtZNmV0UlVOYVh1b1FMeXRKME5veTJvTUNnckxpSkNkUVIzREJPZit5eFVDanZMZlFGYkVlYS9UbDcyU3VOT3VwbFQrbkJ0YVdncmx5ek5jUk94c2JYL1RGZEp5LzJneFBhM29VMkdwWWJDaEwydjVIMmF5SU5XTlFML3ptS3pZcVVDc3JWMmFzcmVYUkw3L2NsNGFUNjdTTVRBeEVmSkx3aE9oTmhYT0p1L3Awd04vdkNWTXFDenhPamZONWVMUkxPQ0tJYytNcjF4ZTZmQXdiRnNXNEw0YzI3bSthdG9BZEFUYnBsL04zUkpnYkIwbmZNMjZMZnVLa1BSc0RTRUEwVk1UamREWFk3SjRmNzgrWUYvUDQrc2hWK2hjbFpUR2Z5UFRtOTB1VktQUmNCaHV0SzVDS1dZZTlwZ2E4Y3VDcVJqaGNNbzV4Tmg0UWNZNkpSM2FrNVk0MW01U1JCNFdGRlV0c2lxQVVqVVNNQlo2N1BjTUlkQk1hMmljRko3VTdqMVdzZjFPYXlHY3F6RXpDM2lBV1VhNUNqV2FjM2l2MDdDU0pSSW1HRlBiaWQzT3I1V0N3TGYyKzRKMkxzYlUyVUZoVlN3VHJGcUR6SWM0Q21CTmpKRFdsVmJUYURRYTRtWWtYcGRza3lKM2RUVWVUMXhHdGxUSUp1Rk1PR25oT2xIS2toTkVHaEp6OUJsK2pBbERNQ29EUW1xWnpCV3lVVlNJUEhWYzYyUURaZzlQSE53RlpUREVrSWtsbWdRaVlMQlFrRDRIWTlWb3JLdGFBb1NMS0FGcE5jWlVTaG13SU8yc2xSV1ROaldtVmxCOGY0UlJ2dUZleHdvcVExWmtCYXZqaHVKaTNnb2R5ZkRKS3dMekFGRHZvaGFXaERSaUo5MmpUb3duOTM2dHV3VGkzSmxZbE10d09DeXQxNXZGMWFCbEFtWkE4Mm90T2RJR0N4MFdRSm9PeDYvM1kxblpvZmZubERsbzNiL0g5cjBTSURMbXdZT3VKYzlkYWYydFdSS0FMYTNEVjlwQkdMdG1idmEzcEM0YUo2MFI2WHFiR2E3UisvZVQvZDVRcW4rbzhvZFk5V0MrcHV5VjAxaGlDSHdjbzI0VXBWRjFIUjBTbXYxNEljcVVzTkJqcFlyYVhvcEJGNUphaDZjcU9rL0phRlhtcDhsazBKYU1naENrRkJ2UURQenJGcFF1QU9Jc2FZMnY5Mll3cDEwZ05GRXBjcmRoN3RhZU1MUnRUTWt4R3lVeFNWVmdGU21YWmFOUHN4c1krSVpwOEpHa3hwT2JBRjlOZDBhVzBQUHducnI4SGpDYkJDdDdwY3JkTnkrSDI4bTZRK3BYajQ4K1VNSEtDMkZOajJRM2VmKzNhUnFIdVJEK21iLzVTZWZ3OTRNYU1MQ2ZHVlpaQ1NmNlM0K0plL1BoQitTbUsxSmZPRFU2RTFaVXE1TXQ2dldjOXphT1U5VmxrZ3ZxNUl6aGVYcUxoWTNwOWRNUDc1by8vY1hoTEdlZkhlemFLODh6SlYxZjgvNTVpNnI2OWVRZlpYRDMxbDc0cE9iamVyUFpmUmszYzRmeC9MVXhlWWd0Yk03dXcvMXFvZTl6YllucCtUeU1CN2RXMDkvQmR5ekticXRlS0hrc0dseVFVRmJLeGQ3Tk5keGRFa1pBQUJBOGlsTVBHenZSU2dHQkVEellNWG5uVUZ6UlRIVVNnTlo3VlVUNmtlQWUyNXBxZjlRWDFmODRzV0RpSTlQSEViVTRaV3RMWUxQRVQ2VjBRTm05ZWw5aTBMUTlIZTk0UXZDbHVuSUVHaVJjUm1wUG1aUXBEUW5tRjZraEFBUHh2eDkvMzMvLzk4TEgvMXRTTktJZkFNQmErdzhaNUFGOFBHLzlzNkluK2U1c0RnR2dZQUFBRU1DL0g4Z2p0NnZyLzBhOVU3N1hYMEJvS0JWQ2VvN2czWVNOdDZ2VlE2V2Q0bi93bGVxOVFsWk5abTFJenkvMnl1Y0wvQW9JUnk0RHBmdU1RMzJ3Sk1yUDZDTFBVRGZoNnVlQmxscmhSZkFiOElONVc1ZVNWY2FwTytyYVBpK3hienJmWGF6bzdPZDgvN0xZMVE2Zy81NmwwcGVaQkFxby9yNHQ0Rjh5MytoaUNHZTRua0FqMCtYV1Vna3UvbXljZlYydnhFMFpEdnE3VCthVXRoT1V6VmY5T0pBVldBbUFyeTV2d0Q0bnpTT2ZlWTJkcFV0dDIrYUFmWjZxZDBObExzYzQrNGs0SldGdmY5UVRxdnRHTGVSalpoT0M5eFo1MWNMM3NJRDlRNVVqWmR1eDJ3V3FrS3B0RkdVSUxabEhMd3JaSVQ3RlVKY2lwQkQ4ZktFOXUrOC80aTBYOHR2YnZPWUUzQkNQamJIbEhqdG1JdGt4dmlzaTJvRXVmSnkwSVFZTnpEMjZvOCtLMGJGc2w0dlkvdUlKUUhZb2VOOCtXUVE2ZHdKUFMxaUp3ayt6MkZTMnB5ZTZyYzB0YlQzQjgxTGZoMlM3aGhmVW1yRnlMcTBFb21pSWI1MytZS1ZlNzVMTWRBd0RrSnNDYy8wU0NzVHN4VStZV20vS2V1ZksrV2pjc0Y3WlpGemJoVEVqM3BuNXl4VXRENVZXRHNzdWVDdGljL0MyTWRmSTU3ekk5cjJRSHVOU2ZMMjhKeWx6NWRrN0VuSVJQMHZ0WHd4dk8yRHJNdmFyeEdKRXE1WFhMTCtMRjlSeHdlbElkaE54MGJUSHRKb1JQUktVVGlueWxaSUU0RTlYbmFVVFFEZ294QjJNQXBBblNrTks1Sjd1NFN2QnRuTy9zbWUvM3QwMEF1YkovTUhmUitrOFpFY0Z5Z01BQk5DUWZyUTJGSXdEdFRzQitoOGNnOE1CQ0l6RG9TWUhBSmJCdHdiRTNYc2M2OTIvTk9EVXJqWWxHa2c3RjlKQWtVN1hJS0JZVzRNRDNwN2R6OUhNTXJzQ0FyQXI3MEkrZm9hYzNWZVE4TFg1UklKMlJqM01HdFZyWUNWRzB0QTZLTld3b2RyZU9wVmEvbmpYVTZ5SFdKeFp1eWJKNnU2Z1U0ZDR3MTdhekVKTW9WOHI0d0QreWtya29FWjkxRlpxNUhMeDlpWG9BdzgrSERBSU0ycHFXWER3em9mWFBOd2JzZzJmUis5azZ5S0ZnTHNISmtYOFFwZm1qVmNkWW1GU2dOeGVyMk9aWWdvRURaS0I5WDFtc21SS0VubHJJRFFOUVBsQVVEWXVsU2ZHV01jeGVJZWZlcU1JNnZCQzFheHc0OTV2SWJmd0JXSHd4VlV2VUl5V2p0VHdXMVRnK2NaVERiMTlqYXJwK2ZWVkVncDVmWDdzNDBLOE5qbnFyam4wdFkyMUZkTWI3WW9waVUxeFZXS1ZQeWF4eUtjazVsUk5pRzJFYlJ2Z1Vpa29UZzkxU1hTZ2JCSmNiUzB3YTZRQnBpUnFtVTFJcGFva0tpNVdNWkdOaXJwR1N1R1VSQ1pRcFRXcWhLK0tlYXFJcXdvNThRS2FQNVhoMGRGV2thbHhjRnZZL1BXM1FycjZ3OWRjMTNhbEptMjdyaXZ0Mmx3VmhWNUZJbHBrcGFvQkVWWjVZVmF4RUZYYUJOYS90cGpmeGRaZXp1dHcrRGMrSVAvSi80eXk0TnpncmdiSXdYMEVHYlZDWmFXd2xyU1NjajZPL0UwK0lCRmgwZDBpKzQ1djM3ZG1OWlhLOVRYd0d2OE1mUGJldEN4NlhMK0FwQ2xEVy9Iak5pSys3dnJxMVNzNDIxMjhiYkcvTXZpTWM1R281SmMzS21kZFoyOG83RVU3VnJDR0JQWjROdEw4OS90bFhGMGJJWW1OSXdCQkFRPT0pIGZvcm1hdChcXFwid29mZjJcXFwiKTt1bmljb2RlLXJhbmdlOnUrMDA/Pyx1KzAxMzEsdSswMTUyLTAxNTMsdSswMmJiLTAyYmMsdSswMmM2LHUrMDJkYSx1KzAyZGMsdSsyMDAwLTIwNmYsdSsyMDc0LHUrMjBhYyx1KzIxMjIsdSsyMTkxLHUrMjE5Myx1KzIyMTIsdSsyMjE1LHUrZmVmZix1K2ZmZmR9QGZvbnQtZmFjZXtmb250LWRpc3BsYXk6c3dhcDtmb250LWZhbWlseTpRdWlja3NhbmQ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6MzAwO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi94LWZvbnQtd29mZjI7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R01nQUJBQUFBQURJMEFCQUFBQUFBZFhBQUFESFRBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdsd2JuRlljaHpBR1lEOVRWRUZVSEFDRkFCRUlDb0dxSUlHR1ZndUVLQUFCTmdJa0E0aE1CQ0FGaFVJSElBd0hHMnBnUlFkaTJEZ0FhUEFaRmtXd2NRQUZtKzhUUmRrbW5VajIveWxCbXpHaGRlaGJaU0YwUjd1bzdoa1pDWkdUNmhucG9iWlRXeHk2Y09EaDBFZy85bzBGUitIQThzM0oxYjN0dzU5WG96Z2NDTndqWm10dHdDVnhYNGhMb3BFa1RhUlh0MFpJWTJJdDRqZjkyWHNDdk1STFV3ajJRbzBJa2hjeEtrWXE1aVF0Y2ZuaW1ycFowanFIdEduZ0pibC90RHF6aWlxZHF3QXpvUTBUTHg4Nk16cFg1dEk1VC96djk2OTc1cjRBb29zUkJESmZCYm1rV2dzSXRvcU5iRzJYSjlDa2VvYkhiZjN6QkJtb0dBMUk1YWd4R08xR1Rhb05FRlRNNjdJdW9uOUZYdnpmK2l1aXdRRUsvVy9haG1pYnorVmRFYlZWUjRZTitQZC9qY3pDVE83TG53V2dJcUZsNVFBbDIxWUIycDVLSkZsTDZKZjdaZUJ6ZnU0Y0ZKM3ErQU9DOFFWNjZ6b2JXd1loV3dEL1Y1c212RVhvekVtRVRXdnRLRzJUUEczaFdjcFFtOW5RT3ZSOEpGSVZnWkJkMm1iRmMrSTFmWVh2d05Ra1ppdnF5UDBlOTM4NnkxYmE5ZDN6QnFHTHF3QVgzWHB6YlRINit0Ylh6R2drQTJ1SmZReWVsZldlSlN2Z0MwSkZVRjFheE5kVFUySFRwU2o3bEpsL25lbXE3Kzl2U01rLzZKYWRHc3NxcmdHZWV0bmFOVlBMNHorZDdxeC9zZ3huRjJUNWVnSFNVV3lYN0FERFZNS3hveHowQmNodVh4aTJBc0NhdFRQeXZnT09OVE9ick9TY2NHdUNRbHpoRWJLQi92cnR6MWlySDhoc1puYTc5bkluaHkweVJFTENKeUxnV2Y4Ni8zQWdUREFBQUxwak5FZzNKTk5RWkxoc1pMb3lwRncxcGs0ZGN0aGg1S2lqeUFrbkVNSUJRcCt1Si9pbGtoaXB1Q1BIZWcrRzlscEZvUS9hK3hPS2M2SEZBeEIyenJwM296QVhhaUJ1eFZNOFZtQ2tXbVY3dHQ4M1VxbDZpNnh3eWFzd0NwVjkrY3pVNU9manJNckgvQjFiZHNTWks3bVNXL2EvdENtdktvSkVpaFlqVmlLUFByeW1LVkRrUC85ck1NTXNjeTJ3MEZMTHJMUFJEbnRkY3gwekt6TS9FNmlBcENqNkwvay9hS0EzQTI4T3lWeGFDNE9sVDVhZHVQTVBXZlpCMHZCa1J0bmNZQUdkaFN1V2JsbzI1MXJUOWVDT0NLTGdmYllHa3FCSjZWUXlhNEtUR0lIVWc1ZmhxUlNZRWpNSFJ4SUhJK2xKM0ZUenROMHBXaDdERERGUHB0b3B1TjQ0Si9BSWtnMVNlT3BjaTloUDBSVFFFaVdPd3p4TjAwWkhVK1VwUzFHRjhCWVBFRDNBQkxGMW5xTEZmQXRTSWRzNHRaUXJFSkN6OVRLdFoyVE1VVmhheEhPTFczaVlTdDBwb0VjWWdvU3g0N1ZEcWN5aGtna0ZQWUhkdk1TeDlWOSt0NzZOTFpxREIybTlZWWhtdG12NHowbDcxYURYL2hjek93UXV4cTZrMWxVQzdubW50Ry9QM1N6ektHUS9md1JVRC9jT01RaURJcFRnanh2dmIvUGJ3RTlzbEE2aWpMSVR4YmtHbHAybVhoZlUxTzVBL3lIZWFiUldJeklkV2pXWjJXMDk4UzNOSm14SVV4RDBKUzJJUXFoNy9ETE9WRlVZOUkvMDcxZHFKRnk0Z045U055UHNBcWtsSkdYUGFmZU0reGJGNXFJWWMvSUFCeG1sbTRCY0Irb1BPUnoxOUNNMm91aDJvR3RFTk4yQUpGckNWek80Tm9EM2V4V1NFS0c0c2pNRHRPVkpTZ1lMVjNvU2FMWWVlNk9yRTU5Sld0STdYcTZGTU5CNnBCYUR6bVNHN3g5UC9uY29BUUMwWU82NUFWLzhWcVI1cEM3TzBLSlJTVGlYTUhlYWp6dnE4ZkQ2VEVhdGRTZUVkQ3lKeU9QN0hTMEhOc2NqbjRFVUg3SVZ2NUI5TmNIdDZRK1F4cjVOZ0psRVlwQmJsN2lXRlRnMlN2c3ROTHBrMXdkMEVPQi9IS09QNTFvQWtLSGJrMGN4Z2FVU21FZHp2dlJFWGZYblVFcXhxR2dkeC8xcFVCbjZ5U1ViaUw4YmtJbENwT0MySEYvWTB4NXFweFRMNkxtbFVQYkZPSk1qWVFEZVlKSWNZQWh0S1ZxZnJGS0luZ21qT0k1ZXgrV2JTVUFyQ0dOd2hJRGlhS1BRVjEyZXphZEEwNENIRzg1TFltaDJnaU1Fb2hndUZDRTdXdDJSbnBaT1AwTEFtempKTkpNbDFGcVEyd2ZiVUJKYjgrZ2RmaVNHU1cxZ0MxdFowejdRVlFkZG9UU3lzalNlYnpvbGZ5b2hTdGdnQmVlTENIT0RmTXlvMkJPUzhhMTJoaWRyM1lVaFJEVlhUQUl4RTZ4d21zMERFZzFNUkZIQUd0R1pKTEU2Q3RCWmw1SjJBN3VsVFAyME1qUVh1K0ZHY1JoakNvVlh0b3daaXRoZUFpZ2Jsbk9aSVJnRENnWUtlampCUW9RNmhSaDJMSWFyR1dCN3orWWl0S0F1cUVNQWw5UURJZ0hjOVJzWWlVekFOZ01zWkdMTG9VYXhha2tWcmZEb3pLMjEwWmJLMDRacGk2Q0VCVm9zTU9BQVVWZ1Fpd1YySE1qQkR1S1VnSk9JZ3lYaEVNbnNVQ2xTYWFTeHc2VHJpT21NUlYyNFdTRy9BcjFvYjhMTjlNRmFmYkZvcU5yY2NDTnk0a2lqcUl3QkpsTndCQzhtV1ZnbEcrdE1aK3Y1NU9NVjRFaUYyS0NJYlZTc2xGb1pOcG1GdzgyWFdzd29DNTZLRCtxVXJvSXpLbW51NEdBWmVKWi9FQUJNNFFXUVJwRnFob1ZZQ1FmUGRwT2hIR2FXdXg0ZXVGaUhudTQwMHBvMU43Q1hWTW5mS2pSMllkRmlzY1dxRnF1QmROdkFhOWR5OHRFVFArNzEzTHdjRFB4dkRkMGF3KzluZXlmZ2QvWTM4Q0VMNXNKaVdBbnIrMzMvd1pLY1Fud0tqclhpTUFCcER1Q29hVWlrR0lTaENBRUZ5RUVWNUplbEZjSEJwOUxuZS9lL2E3Yk1FdzhLcFA2WlpWbVZSOFM1b2JBbVZaSldPTTV5MGo4QkFCUVlRVFVtUXlhWkdFVDF4OUhEQ1VrTUcyTTJIRU9odVg1SGpUdUJwU3BBS3dpWE9tc3FCcURBWHpRVUl3WitmT0JIdmdaaFloUEczL2pWeUl2Sk9EZEJJQzBqSzVzS25ONzZxVXhzSTVSanRBcGl2d2NtZUFRSzlGWUtHc0VTdENRUW9nNzZHNFplbXFUSlRBUlcxRDh5QlZJUUJWTUloYVp1L1ZIN2hTT0JSRktSbWpRa1Nia2dRSG9pcll6aEtGWFg3TElKb0xDNWFhbmkweGdXTGdSZ1RnbGtyT2ExV01Kd25ROVh6bGNmbUFEc2hRNEg5RW9lbnk1U29ySHJXZzl0czBwSTd2LzNzRWV3QWF6cnVDK0dDUENmeHJrVDlDWUE5QzliQTVCeFNLSzNkeDBBWUkvZXlpcW10QnVBbzB0Y051YnI4MHdsNCttNE1QajltS2FXUC9GSjF0bHRQZFV6TzRHL2hMOVdqcFROc2xWdUl5Zkk2WEpYdVZpZUV3cXQ0ZGJtZmo4QUNDSnpTZmRuNHBNbzQzS3NrWFd5c1FWcGpEOVN3bTBGOUFQQXZ3T0FOeDJ1dmNiMkM5dUFDOStFQzg5NHp6cWZHYVA3S09iaHJuTTd6MjBCQVlCRVFIOG5nTjdLOTNaMWV1VnpOUHFuN1RQSEl2TWNkZFYxaTYyejNuOU9tV1dUK1phYWFZa0x6amx2Z1d1SWhpUlFzR2EwbW90Z1lHUmlaaEVsV3F3NGRnNU9pWklrUzVGbWpmK3Q5UUFIb2tKNmIvM2diakwxMWtkZk9iUTNnQmg2Nm11OXN2NjNUdWRUb0ZDUlltVld1V2UxUy9hYjY3RGpqampodnBzUmNVdU5MUzdiN0hiVXVPdWkzLzBSRGxmYzBCQWV2Nm0xMVQvKzlxK0ZCQXhIaFNkU0N4QXVSS2d3a1ZyUTBRc2lhODJxcGJaYU9hT05CQzd4RktsaVROTmVCcmVPMnVtZ2s2NTY2YTZIbm9ZWVlLQkJQRWFiWUt4eEpobnZySW55NWNpVnA4UlVwV3dtUjAyRWpUYllhWmNkQ0EyL0VBQm9EUUJzUDlCeVFMOEZNUDhBOEo4RE53Y0FBRFoyRmJ5RWhPTVVMQ1dxb3BoSWlGRkdQNi9KU2Jibm5KZ1V4VjFEekxRQWhDSkl1RWJCbzNneWFTVUpSU05kRUxIU0h0SU0zSEhHc1NOeGZld0VuY2ZyNmNDZ01XbDdqYWFKMDBleFF0UVI5aWlHNENVdzhnU2lKbm53U2IycnNBaXBSRWxueENZTXM2Y1N5SStlMlJ4NkVxYitDckdFSG1Pb05BT0ZwSlN5TmxBVGhIVE5Qb0I5SFFPcng0ajVYa3pPZzRRT0NXbWNQalJ4VEMzVThZUG91VVU3WDd6TXZya2lXbzdkSnNablFRQUU3bm4xL3Q1ZloyUkVRbW8wd2VpdXZKa0xsZyt3Uk9rczV4UzhNOFdMbFRvRXhLUkp1TjVabHVjOVZ4bUdwM1hvaFNGWmc2MDJoMFBwZlFqZ0hITGRVOWRZR1pHVWpGOHhHUGFmcENpTkJxOVY2aTA2VDA0WVlwNG9LMTRvYzNlbHJDaVZFWURjL2oveVFTblBPdGFKbnpIQmFhaGNBMENmQUNxOFM3NVp0QWswcFRuS05BdXVNUVdRYkZpdnRuUFV4bk1MUU91MmZFbU5iMVpxNTVJTWM1UVp0bXA4VnlsUitGQllveWxYcFg3VkJEQW1kbUl0SFYyRlJ3eHEzZjR6Sm94NHQzS1pmcHNqeTh1L1ZXYlVnN1oxUjlNZ3Biako0dG00V0FETVFrNDV3RFNrVVJndHlFbXcyTUtSVFdERlpkTi9GR2FSZlpIYmE3T0xZTy91VDRpSEI0cU1jcXRIN0tWdjBicXdPWkYvdGVZK0RRNG9IVVFZaFE0T1ZRb2JUV04xUzdEQjhQWGMrenV4Nk9RM3hPMUZkbUVxQS92eWlLM3R1YUhTUmFXNDBPWTA4WlZBUFRXTVh3SzRaRU94QmhDOGZUd2FzR2h4S1N0N3lRbEJvVDUwb3J4K2tOcW9tRytxSU0xNFR5WFZoU0lEMTB1RUkyQ2N1Rk9xNTRDY1F2Tnp4L3BjZjhHb2ROWS9TM3htYVYrekpac3c3OWlsZTlGL1U4cmhQVkM0bVFsY01EcmJvRFlTNkNOYjRBS3d4cCtSRUZWUzFUSTZVTVp3NHdZV1FOUFFXNXROVG5GUGROZ3cwRk0rZHFnSGc4MjZKOHNpVmkzdW5RNFRsc2k5Z2I3RzQ1bVdMbmQvRHorL1JuYThSTEVlNTltcXByN1Nob3F0VndTSXZmbUdkVjJ2OHlwcWpVN3Y1ajZuclAxMTFwZ3NpTHhOamUxV0hCOGJNanBXSjgxZHRTMnBhbndUZ3duTjIzM1dxdzRiREpTWkdsQkpUU0RsSGVNWVpYWnRPOWZ1bFdNL2UwRE4zWnpORmJ6Zi9kczJ1WElMS2d4ZGt3TjlXRVRadTdsczVya3d3Ukt3eVZ1VjJGTTJlYWxmR1ZhaDNMVTByNTF0V2ZNNVdGSENKL1dNWVlVamhXeStjRW84ZXlXQk1YRXpXQ1ZMa3liWWpqMXZyVkpkbk9SWGV4c3JnVURMcWJhaDJvaUQ4NTdFU0dMYXZ0a1RMSlJmbU5XRThlYUcyOTBXbTVJc1hpNVRoN1d3bE84YzNMU24zZXVpN1dSNUg4eERZMTJMQ2JDeUV4Vis2eDRmM3RRd1VER3IzaHRsT2ZBRzYzMTh4a3J6bXNqYnF3WXRFVlNXOHZSOUtMZWhaN29KM29rYTVqV0xWbjlwV3Fjcm1EMlZ2R09hSjhlbitLaU9kVWJrUFhKUWZXNXhaYjdXMlJlRHRPSlRhME5iTnp3dFJKUEFaOVJ0cVNheDBxR2xMazkyZ3YxRFg1T1VRKyszWTZ1MFVLM1BQeURSYzhlSWxta1NjRVpwMHdTMnc2d2NLMytLcW5KMzR5ZU5hYnZGNS9SeURSMGo3OEh3ODVIbXpHVk9TMFdJZzlKQWVsZ080OXdOa3RJN2hBMFc5a3dKdWo5Q0VsMkdhQkw1cWtKWEptZ3NzUzZhZ05Wdjdvb0dpQWd4YWwrM3F3VFhmVGlsckNtbFZsbzhZMExNMkQvQU5oZnVpU0pyTlhWc0J4MFd0UGJrVmt2TmFIbGt3Z0ExY09RdEl5eUVVZzBPSEhsemQ5MVFXM3JsM1cwL3MzZHduZllLMGdDT1d6d1B0SUNIVm5OWDdlQmdSblJjR1FTcmppdWMxd253cVdVbDE2dlJaOVZoWFNlTUlTMGtmSkM3MjhrUGsvcjJERWRUUEk5MEdLQUptdHVSZzBwakhhRTVTL2xteTdIUUNZM2dCcWtiYmtwRGl0N0tNUHA5TGtRUVNaL1A1SXFEd1JDZVBSejdkMzYwT2dhRlRqc2VONS9ETzhtYTRsQ3hsNTFXY3BPOFRueWR1RmxtZmhmelZtdDZlY2g4TGVtOG4rZ1FLS0toZ3cyRVgrcC9EZXNpOUdBUlZnSzlrVGxPTFRrUUlhclhNYkpadGFFRDA2YjViZEk0YUorRVRYK0FpUTVKZHR1Y1ExWGFEenZERnExc0xhSmMzdHhLUTN0UUxleVVxeUtXVlEzRi9xMGRGajhZRDhrNnlkZFZGYTUrVnMrRFNHNnVDL25OOWNlbnVFTnFsakovNGNvdC9uN2YrcGlZZVlVcG8rRlpPbEZHeFJ2VjFXeTRWRVBHS0xKcFg3QUIzdUN0TEYyYm1XYUlCaU5GNmhCOTIzRy9UMm11ZHRJRTFmejY2VFV3M0FiclFyYWx3RUZoTzNaTExaSkd6V3p3endMakRzK3o4b1prODRnT3dvSFVBSEFnTHc4WGgyYUZNcjY2anM1U294a3RKWUJlVHJSalg1em5Ca2RtSTlNKy8xaHJjWWpZdGRacmdiclZUUjZjMDZvM211YUNrTlpjanJmUHNYbGlwYWpOTHdhdWZMNUVWU0tFQUhnem83RU14WUpXMC9vaUp4dU50a28wV21VL080NE5kVVd6SXVzTmtkWmZqZGZTVm8yeDhPREhINkx6VEh1ejJwd09UL09jQkVqSjFSVWpSOGI4NzVOSUVCQnVtM0J0dDZ6RW9kYjFoTWRvTWhyR0dxWFU0MkIwbTcza3lMdVJvYTU4UnhuR2lLeG1JSHd0Z05TdXZrQXF1dlIwS05Kd3YzNFllNFk5K3B2VzM1RTB0c0ZGMWd1dWpUTFUzNWZwVThEd2xBZlBuRzdIMDN6VzhYMGRKbm12Snp5WTQ1eDhsaEQ2ZzJKQVRFUjVteC9yRXQzbU56cTNPa2FVd0p2SWZHdStmcTVYZkJPSGphZnZRRDZJb3doaGI5blFheFQ2SkRmU2I4Vmt4cm1WVm5xdTVyWEk1UnE3Ukh5TUpSaU5Kbk9IdDhrbXZiZ2d6WWpnblRuNGR5ZXhjU3pPM3ZReURvSjlsV0lqdUlzUktSOGZiQUFYbXp2c2x2TXViYm92VGFtYzdLMmJSVWYySDB5UmpMdEpxZVR1eUFqZThZUWNKSkExZGNkdHp1VkNlMC9FcmhZTkl3dTBZT3pFdGViK1NsTUtPVVFzRTl1dVp1dnVRWFdiWHBYbENidXZKQVJYUHlBbXpGR2hJK3VPR01CSDdEUE8wb0RVdzFNNzhBTjNoSjZFQitxbzBZUmhJNThiQlhDSVVMSW15Z2hXVnNheXNJU1FCNTZocUIySElwWHpPek85RWxGc2R4dUJPWDBpUGhTeE5QOWVWaHlTU0lwMkV6WGthYlI3ZmZReGtlaVRENEwwRllDR0dpTnpNRGRJalhoaGR6WFB6ZVE2c0hVd0R5Z2RVc3d4K3VtS2lxNDlvNVFyeTRFSlBjaHZYMzJtSjFFWlB2THJKNnBjYVZ1bUMzcFFxWHpqMmV2WDRvcFU3dk51MmErT1YrZXJ4dklqMlVibDZBM25Sc2t4a1d3OWZOQWVqVndNSUU1UkhFU281eHIxeE5LczdjY044TnczMU1mLzl0UkFLTkRMSEQ3Y0w2NW1tZXBhb2hrblBlTFluY2IrWkdBVnMzUW1lczV5Qkd2NHhiSlI3UnVXaktJV3dRNmxmQ3RGdEhBZTBXQ29vMURDK1NCNkpzZG5wRW1QZ0IyZ1NRNkpVaThWRm9JQmhWM2toQ2hmMDJZeGo5SnZlZy9US3FUd2czZUhQTzVzVmtXRFl2R0NTYUJ1cUk3bmFBOW9OQjg3Mk5nb3VJUWJrRXJIYjg4SjJkTmpTNkpwRHJUZlY3cmg4V3J4a3I4Y0IzWmgxMktuTW1LcUhvMXBPZW5odEY0NmF6RTlMYTg3dWNSdjNKUjJ5eVE3bUlObGZkbkdqblVKZXQvRjF1amUrcU82U3c2dllTcDZEUnNpR2dKNUJjeFhWbzNSNUxWK1lWMXV1emh2aVhEK2FiMVpHTkR4MlB4NG5yYW1hY2J0cUhLb2N5djMwZXpCMjhHcmtqWGUwK3hBa0J3YVRNekxkWW1GTzlPL2cyR0llSEFTVk5yVHo0VXhySThUeEtqalZKcXJ0MVhyZEk3RE0rM0RlK0NRMWZXNS9WM1RYSGRmeG9yRXdNUFRieHJzUmFZcG5sS0hNeHhaSHMrSmNmTWI3WEdwUEJXbUxmdUNRL2ZTemV2MlBSYXVDejZBbGwvQjRFQ0V2dEZvOUJyR0VkWnBuSU9JK0xnZ241QmJxT3dTYmppLzFocUJhMzRuOWZKOUFEM1U4aWJ1YW1HR2QzVzFMdVJsTm9oem5Ma3VpUGVEMWozQ0REcDVUVk5HQStGaGRYb2FZRXlNVDBxVHgyUm53cHM4SXRCOWZISjN5YTVGZWdDbGZQMHJSbGw5ZDdDWjMzM2ovaGczRzJNdGF2TTFmQlVOQnJOMVRlRldGMG9jN2l3Q29RdkttZVNwaEJSZUh0eXcweWl3OTBuNnhwZ0NZeWttb05LR2htaDBJVlpZOEtCa08wVzFwcVlJaTlNaVRWRzk0SjJqaCtjdk9TMFJzZVFLNWdVRDhFQXFQMkNhcjlJalZodFYzc3dQVk56VEIzdndZQ2tpV0JVN3I3M040MkJBbjZOMUc5Zmw5TlgvRDVBK0ozazlSNk5VVy9OeWJxVHJWc3p3NXpmT0Q4Tm8xb3RZdlgyU2dZTlgxMERjNVlvUHVKTFVqNjZkVHRjT2wvUEViWVpQaHJpMytPKy9FOStOOWpiZWFRck9RNWdKMTd4MENKMm1Eb1lZb05CbFROV05IdXp4YS9EdWZqcnd2ckcwb2crWVliRkNiMFRCRC8zbzdpdHpON2R6WEdvZHo3ZkozNnhzRE9reU9TQTQ0TjhySFB2LytUTWFERnBKbjQzNE44NU0vbWNxK0NLb2lnaHl3ZGprbFZ6Uzk4SGc2UUdCR1Yra1NhYTFLMGx5UjVUa0RjRE4vWUpUcFIvemZielNrazVldkY3UnVkRllLSnFtSWhFaVJFaXIwN0ZFQk5hejRFS3o3ODBCTjNxSzlyT2IrNFlvMTh6NzU4bmNrZ1M2TytQZ0xIWmsrdlhlcjdJYnU4QnF0cmJzMWYzM214NTJIZXlaSngzb2lHODBYemRiQTVTLytFSjdMeEVmczJkUHo0WWdhc2Vod1JSYUxLTFRrWWdRSlhrUFJiQWgxanFYbVNyZHp2Z21mRSsyVFovZm00anR5K2RqKy9mRzgwaVIyNm4vNjUxaitiT2RFZVYzZVpMNzRRVWlzSWJScjNTSkY1VG9uV3hqZmlJR2VkM3hhY3VYWUkvWEM5WHRoWUFZa0RVWTN0MUVnVE5PUmtnRThRNFVEU2dVUWNPSEVBdWdQSjZGOXZVWlFKNG5MZFFyLys5VitHZ2E0dnNReENETlg3NTk1eU5YcE0vZld4QW5wOXcrQzZqTkluMjVVNW9zcVFHckdIWHBCTzROamJjdTZ5NWZjdkpvZHJId25wV2FGWFdEVkdGcVhmM1pXdU56N0Y5ZXZ0cnlqRzVoYVRvSFA3WHZ4Yld6YTJpRmdObFhwdUtjSHlLNnRITDVKa2l4UysxanV1bnV3bHFEMzcvVzBGM1FUY2RJTFVXMEdOZzNGYzJrcDZOS2k1bEFUbWVtb0FrSVQ1clp4WHozZmRtcCtRTm1HNlJGeHgzRzZ5ZVhpb3Baa1Z6ZmxkWXJUZlRaenhZOWdvMitnWVhtWUloUzNja3Q2RUVQZXpZMjNaSGhqRzB3UHVIdDF6c3o3WXNkR2VQdVpZbGVNTUlzS2EwbWJURnJ1bE1HeTNzbUplUkNzcGY4UHV6UTRISVJxZGFJWExoRTg2N1lnWUJkbnRYa2MzNmJVL1A0dy9rcFpUOFU5RjBNMEIwaG9Gbm9OYTB1Y1d3eEZpNTBzN1QxNXdOMHdxVFpmQjdyTFY4eW1oYnFiY09GL2phZGF2VWZOMnNoWjBHUTFwYjRONDJrZEduMGNWVEQ5MS9XTXljbjVlcUlSVC8xK2RGa2IwdlQxZ09KdVZ2ckNJZjIyVXVLcHA5MzZTRlcwcWxzcUZ1bUpQV09UQ3p3VTc0WHNLQStXQnhucUROVmtBZkFxSTNqV3FzaHluOUhNYTk5U3ZaQm1Hdy9LY0IxZWpReW9QRlk1c3UvT0VQRDcwVHlXb1EvaWZWUjNsOHFUU0F1dlRVWDRGNFNlWTBhTkZ6UUFpVlFGZzNaRDdHLzMwRUtOL3BjRXNBQlNqQlhZOWRpNzRybFhwSmM0ZFY0OGphSUJyQXk0d3pMd0lEVlp1KzNXZ2ZzdTBOcE9jWXd3M3ZYSFpRY3JSQzNOdFFzTFBHbUVNWDFBOHNIMzBZWnVnQll1anhDTHc3ZSs1TkRUZGRROGViR0IrWWc1YVgwS3Bxd0l1cFNMcjN5RDVKbkZ4VHZmYW5wNk9HMCsxK2RtRjM2SWdHc3c5QkJjUDUzbmZIUDdObjNRWlhwc3hNK0tweERObjErQXFXQjRrZGpiaWFZdnZQcVA3V1E0Sy9EakRVWjcxMy9EYkY3QkdLU0tKMDhYK0wxVFJSeXgrVlc3Mm9PdkExM0FRdXJYdTA0OXQzTjlGS1lFNFczYzZFOTZhMDF5WWR2aTc3K0RCUlh3OW1SQy83TFBHSmxrQSs3UjcyMjFjR1FmY1dveTZVS2NyZnhBdkFmQnlENmNOYWN0ZXFIQ2FlK3BDbG1MR3RHQmdtQ1NQN2pCSFIxdGQwWDk0dTM2MWJEK1lsMmdZczk5dGtvQTF1Yzg2NFBmQlRpY2FwcWV2aHFYQmZlMmJQbGkrUDFIak1aRmF1NEJHdVZNR2wyNklhS0RsSjR6NjlYUjlHeHhYSHM1MFdiTGJpOEExOFJUZUVyaDUxV1paVDFoVFRGZ3B4OFdqN1NQaXFUNnNrMk9LSDg1cjRDNjRVc0RLenFuQkdYZlVVb2FGODk2blVKbmtTdittSHZSSWlLTUJoVVFPbnp6R3ZIMHE5K2FzbVk5YXBxWnF3V2M4YUdET01FTWxnZVFxQlNoMFVhUUQyMkk3c2VmVGFya0ZnTE5uT3BBMGVIK3F3ZDZnL29kWCtWeVd3MEIxYTFtL3lMUGM1VlFaOXoxWkpPOExYYjRZb3JiZDEvV0xtZTdVRUI3QnIxMkZjRmcvWlZvMjZYSXNBOUp0aUJLZGF6bG94RlAwUVF3T0pwUVVvRWpndzkzVnNRM3B0MHJDS05vaDZuSnlYVkdjT3d3Zk1hZGNYUStVUnZILzUzNSswMGVZNEVnNS9aTCt3ZlV5MXBHSlVrblpPam5iakVtSEVZaHV3WTBwK3htNHhaTTFLMDJ3MURXY2M4YnNpbk10bWlaV055dUNCWi90bmhIWWp6L2daT3FMdXNnd0J6UVZkdFBGUVhlWUR2SGxSeGN3dHNSMkkxalI5U0tpZHZPYjJwazdEMC9raUt1T1h4M3BtRHc1RkFIUmJtWFZsWithbFN4ZSs0SFN1ZGl4ZmEvUEpZWTZFZW1vMGt0SnI2OGg1MlljR0t2c0g5RDd4OUZWN0w5Uzd3ZEt3S0J1WG1CVzdmYk10WjBCSVJ6RmxQY2IxbVk4bnRwc1gyWWdBdXMwY00wcXhSTFBXdDExS3h2ZmNqcXJnQzlhckUzbThKN2ZlSlJjUVZKQWVzODRyNnUvbWdiVW5xZHovZzBDMnVKb1Y3a2s5L0tXQ1ZMb3dXNU9SUzdsdloyai82cUNPa2V3K2Y1Mkkycnlxang0K3EyNS8vMXlUOXREby9teStTbFpsejlscjhPZGRqdUNIR2xkckRCbkVHRXduSlhCWG1kSjdYcStKS3RCUG1QUmVwZXdtVzk0Uk9HVkVZOUs0OCtyOGlFaEF6blR4Z1ZHZEU5T0swRVhuU0NGZHh2RjhhNEtUQzFOeThacTI3N0JOTGlGY0NITUQ1SGVoWXRjaEQraFo3OEZXQm9CQU4ra2hMeW15eUFJR1djbGE3TFc4MWxnaWNDUWR0ZGlhOE1QQUhka0h5SHFHM3BJdWh1ZXZNL2JpeGdQeXNaZTRSd3I0czRMY3ZIM1c1QkU4Z1YvNncxK1J3ZWpNekNSK0p2OC9HOUVXOFF6K1F3ZUl4WktDakErblg0YzZ0bjlZYWZVTmZsOFUrYzFXTWR3dlhBOGRhNlozUlJ1RHNYYWdBVnZUMFp4OVE2cGsvcXNDS1NBejgxelh0ZnRGZkVETlR3L25NYmg2UVdSWlRZNEtuNS9PRlhmZlNBai83NmJCQWRpWW9SRnA3YzJNcndYQlRadDVwRDFzbTJHSVZjRWZ3dHAyMGFkZjJpWlVYSTN3RFdsQ0FWWkk1VkxmNjZtTXdHWUF4ekN2bGlHbys3dmlMMTlZajRJS3owN1pvc01QVy9QcWYwL3JJenArbVAvTzdKeHhIMEx6VFo4ekd0R3NPM0VJVDV4NlZUclhXK0w5bGdlOVVNTFA1WmJmQ3ZPWWxHbk9pZUJwRW5SU0J4TisvZUJOZjBqYnR3RUU2QmFvelZ4VjRxV09MUTcrNmlrZmRHK0JLd3V4Q3lJK3IyYitnMk5NdGtYN1I3Y2ZWREtXaS9nQ0VrRDFjMUt5OHNMWGh2Z2VPUHZoNHFKWjZFOEdyN05UYkVGUGMydkRzVzJXOG1sanRGcDZjQ1pXb3NyeVJISzNROUR2Ujg4bTI5TmtWblh1cmlRSU9pU3NhRHArdjIxTTRmbFVjTHpZZXZCQUM5citNVnFOdm9EUkNnVkZqY3lnTlhLN0N4WUZqYi9sbzA3VnZaUXRsMG16bi9PdHYrZEoxMWR0cndIazFVQTZ0ZEN3ZXMzazBuVTJMU3hzeDdOTVNQWmV0c21hTXVrSkhvUFhkQ1I5SDZvem94R21yMldZeUpaTE9aRkFkZ3cyazlCQ3ozWDY5M09MeUdUc3kzcStlZUpKc2U5MnlhSWc2NzEvZjhlZ240UEFNeFFLMlh3MEx2ZmRKOUI3YytRZFNUUFN2bENyWjRMaC8yaHFtN3RiYVhEYnpBbGh1ZFNFbzdBZXVXbXFwenkxWEtWMXkxVkJycEtSTHFWUzVsWnFlTjlxOUJzVG1OVW9RTVdSTklJR0dJMFhreXNFU2NnVlpvN0hoWXJBMGFBbFNvd284RlZmdXkrWEZtb3JoT0VFb244dTV4c0Y1WUl3NWNpb25vTUlGaDIxWFIwc0hpdXVtRHRKZncrbm41aFNWRldMK1Y5UlUzRll5SUZKdlNHdzJwTlV5aWdYOEt1Y0RtamFPTzNCdm4wNlhzUWhiZk9hVWRQYm51U0RXbWpJa2s1MlRZVjFhTkkzaGxraFdyS0VaUGl3REdyeVBjUGI3L0l4bHo3YXBIa1RoL1lXdmZtc3NGNlM0a2hidkQzcUprUVVXWEJYbmZpQ1VVa2lKalFKbDhMWHRFOHFkSTZqRmJkRjJKN211Mjd5WGw0M3o5N0M5ZzFTTjJXd0VvK0REa09iUGVscEVIWGtkMG0zRE5Ja3VqVk5LTkY5VEllemYxcXhwcGRDSW1oZjhOd25hcnY0UC9WT01NLzN3UWN3NjRESUp1M0JuanhEd0lEVWpOM25hTW1vamV6bTZQRERjRngrT2w4TzVRdXcxOEdRbTRDOGE1aC9SU3o2UGNGVzZnQlRGMlRHVnhWUXFPbkdaSWFLR1l5YWRPQlV3V2h3cEZNNFkxTXBZQWdIWHEvQnRlTythS2JjR0lVV2dNS0t5TlNSNk5oOXV1Z1lzN0NDcUhDejB3cWdwM1lmWWJIbkVsRVpoZ1dmSlA1NDNmZCtPUzQxSU1xc3pHak02SkdtVXZ2Zzl0SHlFZ3ZDSVpUSzNXRUhBUkNMbWNpZGlSOFRCM2lRQnF6MUJxUnFXSi9EQVJFOFMxSi9VNEl4TDBFV0JnYjZJK1FMeDV4ZVB4cmRWNVNmclorRjJHRWpzVVpYVk5IZ2FETWROV2tzUU5aL0hBS2NOR21VMG52RUVCSSt6T21FMWl4eFhQbTRtMWJCSkhUK2tWSGt3bzhwWEVBa2FzWndUV0MyQUZmUlZZdzAvVVk0dExxMVlxTFNqWnl1YVI2ajV3SmI0QW0reVQzR1dWWHVjM1lnTlU4M2diYmxjOEpLc2ZValEwTDVqM3BVRmNYSUdjb0FWMEM3dytiNXFSaUpXeEJFcmtuOFp1WGV5V0FvV2ZlbWxBeGRwdkxkdy9yaHFYYnZhc0VYWThzQzFoZnlLY3BCOGI3bGJ5UDFYQWU0V3NjTHp4VU5iZDNYMjFOWTNQRUZ6d1h1THR0NVJmNWlLUFNXUUlqc0l2ci9Wcllidy9PQzdDTDh2TS9CVEhIWjU1WWFKTXBET3Q3UnRhdHBaT2R3Mm4xNURoK3RMalM4QWZ1WGpQUnpldWI5UUJ6VnZkcllKaFFFVUgybWt2MHk0OThCR3duZnZpanRvRmJVM1NkcTJYL2QwUzN0THl6U0w5MU56ODJPZ0JQZ3NhdSt5Z1QrdE9BZzUxSENmWGRHZnluR3FFUlR2YThBMnFQTDdQYTJOM0xzL25aZEFLOTl5NkNrMjU2NURMVzNVeExKUlkrMnQ5L3h1dnJQWjB0cFNXYjZ0MHJmVjByU1AwOUhXdXE2MWRieTFUUXVpRXJ4TXBKZmNwcmRERlRVUFZiTkZOenRZYWoxbCtkVzhuNXBiWHVRMHExdWFENE1ub0ZDaTM5MG51aGpmOXlEWXZ4eXlJM1NhRjEwWHgwcmxKaXc2M2Eza1U2cDFLMmR3a3Z5eFd4eXIxYzhUT2tGT1hXS0txajNiaXZJRVgySEdiYnBBWXVYRGpxcEQxc0UrbjFadG5jUkpybW1nY25pVkRPdXd2UFdTQ3V5d25uOWFZN1V2MDFETjZ4RFR0MXFsUTllN2hVdGJoTUtXcGNKRUJTRmI5ZVVZWEFKSDVucTBrdnNoRG0xRnJXVzM4bzdCMjlCbHo4NTlXeVBQQTErYmp3YXArUHhraHRkMUlLSXc5ZnpseWs3VjJrNU1ubXVWWHNtdHRVTnpySDN4dHRZSDZKcWpPS0syUStlbXYxNzVQcVEzOFQrOW02Uzd5ZlU4cThEK0J4aFRSZUhDdmpUbldrQU05MUpZMlFrYjVBR1BRcVdKcUE3Nm5sdyt3L2U5T1lCaXBpNGQya3RJZU9ST3YxQkZjVythZ0NoQTNlc2xFWFVHYmNJR0FSVGM0bmhUMTFCWjY2WFh6VEZMRk55WklUNU1MVytyeUJtb2RXMlZyRVhEUk1acVJELzJxeU1MNzJYZ1FwR0VMZk5vejcwZ3ZvN0JrQnp4V3A2ZWhBVmFjbnBldFhrTjZ4SkdkZ2lKeWhwSmg3YUNNSWdETWNwUlQ4cWlhTHZMN0dhTlUrWm40dWlscmdhM1lvTStpS3NISHFqOUd1NG5ncnBGSG9XcnZsRlFQc1BjcHhsanFPTHN2ZG1tamJyZW1zSHJhOSt1U3NHRCtvVnVwYnNPYjdGeFpZVTZzcXhSYmR4MG5XT3hra2tpdXM0dm53L0swV0NKUjV1STc1WFhUMzE0QnMrOURUbkJ4YnlSbU5HNXd3NUJnV1BVSmhuWnNsMldXM041KzNVcmRpVTBMaXF4SUM5ZkpodWZObCtXVEpxdTBMY1Nra3hYNHpGQWU1UldSTFZjUGo1VE0xTkZSdFA1YmJma2MvWWJOTlVJaUxucFRCTFRzcnNwZ0NNWngybkZha012SnVjb2lqd2FVTWFLZUw3UVF1ZWo2S08yM0pGbFFJdFV1all6Ty9TWXVFMDdmYnZJUk5HOE1uY3BvNWQzbDVsSzBqSWptZHU0OVk5Ylg2bzI2WWxaYzdQZkhmOTB2TWRtSGx3WlFUeUhETlgxR2w1azFqN2NQNC81TU5FcDQwUUp6VE0zR0xpdjBKcmZCUjR1QWZmMHFCQk1XMEtVNFZtcTJPTXFjTE1kVERldmFQaUNtYlk0d1l5VkwxZ1pOblZSc2o0SExwYUF1ZWFucTRMY0NwbFhwUktpa3ltVTZZYWM0ZXUrRUlvKzEvTjUrczlGd2k5MFFQMk5yZ0NLR3BURExES1dMYVJXNmtiUGFtTjNFWm1LUklRUXlkVWViRVMwK1hHcWRxaGJnTVNtNHVIOWhiN3dBYXFPSVYyQzRLUFV2bUlFTDFBUGZBMzRLNWxtaXhWMzZHODBLTHNiVW8xQ251ckN5QlJGN2tjRlMrOUVzWVgvelFmZjhCL2JmZFBreXpzcE1JNHFqcG5zWHJyQW83LzFxZGZuUzBUTTNBYVMyVVR2UjhlTFZ1TGVqdXdMbEhkYnduVVdYWkZWbW94aG5hTExqakNiTmZpWjJRSkpMZ2lLMjhxT3VreWx5eFp5ZXVKUDNDL3BJYlE2VEYydWhYZ2FjS1pXRmJ2Z3ozR3Z3aDVnYUdkdElDSFpkQVB3UGFDekl1amFlMWZNZE9GOTJkNFF3V0h2T1gyTEtESmxqMmk2Tmpmb2hxc2doRnV1RzloS3JhWE4wb2hWMEVPa0dhTExMek9NdnVoWEU4dlU1ZGJvY3Nab0RNbE1JVE55K1RXaTBKS0lMNURVKzAvcGQwZjBRNG02Q1hXcDhNSFFJK1Y5bmhuY3dTREtNY29RL2NoelY3OWJLYysvdnZnNS9TRndPNzkwN1BENXUvZFV5dmV2OUQyalgwWlpkQWVTUmkvdmY2cTgzV096SnhpWVdoaktIOXA2RG1LVWR0dzM1ZjRTeHF0Ykg3b2pTY1dIRnJuVytEN2xZbTFOaytIbWF5cndkUFJDdmZZbThNc2xqeG9mRWMyTXVEWDMydy9NTStpbHV2enJEWndUY2VsdHVwOXVodDBHbDQ4ZCtRbkhXMDVVc2p6WGEvbm4yYk5zODNUOUVIWm91OG50NDhzRk9QczE3ODkzQ2JYYjJzTkxXVEdOanBVNEFNT1RyTGhXeTQ1UFhxdVZScXhPVlFUV1NHTldoeXI4eUI1NDhvSldZQVBaWGNEaHpjS085Mys4QitPNVI4eEtxTjVjbW95a0ZDbzFyaFlGWUsyb2hHZXpSdFFWakc2cDhqbkFPbFVwaitQcWJjUy9ubElDTldRNEM3QkVjUDFPYjkvWW5jNnRhNEkzTG5KSVZrYjdObUhkV0tqMndyOVp6S1RpNzVzWEsxTkRlNXhkWTRvcHo4ckUvUWVuSC9jc1dYWXFGZG1iY1FqWDJBZml0cEJFR3BHN2ZQSXV2ZkNyS3hWYXY5WVFZbVdramc0M3FBTFRmSmR0ektvVXhueEUvM2ZST20vUmpLaTd1ekFuT2FnZ1NGblhucGJySUhDMkxOZVdvdkZsMnBacXJnbi81S0xrc2pFaUlNTmkvSWhFby9SRlpaZy9heFlES1MvWUpVenJVN3RnaDl1RG03anRwQ0ZJV2I4OTJ4MkkyeXF5TVNyZWJyOUlxMlBXc0oyTVhyd3JOU0loM1FBNUEyL1pVSUswMWZid3ZtWUVGOHFHcXBCaUxHWHFYUzhldXdaaUxJN1Y5cWFQTGhqMjBVSlA5MnFWRjZWNHZVUWRZczM4bDlCVmdTbmNZT0c3WlZrdGl0cmZmdnRCMmI3UUorS0dtbk5ldkpValdldmhpQkN2VWlHTlBkeUdlQVhMdDBKNGZwQ2MyR2tGOTlYVFVrRzRWL3RxcEtYSDllbXBCeFZudjJ1RFhYcGZFOG1zbW1OV2xPTVkyRit3eVZETUdTZENZZVBtWW02VG9kT3lDem5UNW5ESU5GSFFJaVg0WW5VNm9WM3E5VWd3bmN5bE9HYVNabytYU2FRbVZqdXpCazNHYUtRWFJ4Wnh1ZzFKdnMvMHcyRDRmMXZ4eVVRZUdCWjV2VElEKzRkYzhzZDRUKzNRdmxmQVhCK2FJNytVemM3ekZBK0xPWnhmNUtDOFFtMXZmOHhJQWRCb1V6bDFOS1ArUkhkRjRmaXA1bGNhbW5ZM2QxUzF2MWIvdFdQSVlpOFJoTDJrNVE1bmFVR2c4VG9hMTJpVG1GbWJVQTBVVFdoMENUT21TK3BpZ0hjbHBEaHg4R2FvdlNXakxYUXIwVklFb2gvejFLVVR0bjNYZU9nNzlEQys1Q1NVNlJyZFBlbVRYLzFzaWR2NkQ1Z1ZhVlpzSlRQblV6c2xWNnZGVXZYVkV1blZISWxFYzdWWFpwTkxiYkt2TWJCc2I2L2tzMytMb2VYVFY5SVFzZ01OOWwwYjJnSlpuUE5wT003dXZaNHVXYllkNTlSVE9UdzNKR1hwbnZxcWhiWCtHMERLVkN0Z0VsMVVMUlBmM2VyZ2tOOVBGNjRFRUhXWlJ0M0UyNjIxZlBTSGFqK3hTTDJIaGx6d2RUMnpxdmgvd1pkc0NFak5vNG91SUxkN0ljZTFiUkh3ZnBWV0JaaGpmWmlaVEF0Rk5WTUxnNmdXTWhocW1XaEswUjNFcG9LdHh5dVd6UzFxNW1ycE93cThlVnkzQy9GUmVSTUlIS2VaS0VJK2VZaXVvbWwyQ1BvTUZqWDZxOEJsdjBjRTNWdW9RazhLNXllTXBkTkhJSWtzM3hoTENTWGxmRThxdjN4K2p3OVFZcGhTNHpMSE5mM3p0ckVtTUowNEcwMTJVc1BYNSt0cXVrWGJWMmhLYlVrUlRJNmMrRHhEZmxNaHhvc0NJYy96Z0poSEZVdGRqeWx2V0NrcHVMNDJkV0RmcE9sdWFxbFoxaE5CdE5zTGZCR1JxVUptSVN2OVo0RkVla3Znald0c2JHcjhRZTUySTdpOUpmZ1JYZ09RdlY3YkpOYXQrT3R0WS9Rd3lrdU53SDRqQzFiNVpVdlpwNyt1cTJGa3VyczRtZ09oZHJXL2Q5amdUUTY3cGdLRHI4aG0vazdvOW83czUwNnkyQ2VlWTNQdU84Rm1uYnp2YnRZUExhMy9XL3JaRkpaN0dnSU0zNjdYd1BZamdNcHIvRU1nNFhvRG01R3VsMWdIczcvQ0lTYWIzenVnazA0TWFBMElWRVV2cm0zdXBXRFI4RGNLaGx0UU1GeU5naUVUSS9nbmU2MmtUZDZjMmRiazVXSERyeDdaSklzcWNLWXZTdUpSbElhaW9CdEZ3VHNvQ3Y2VW9nVEFkY2dKTGNnSnp5SW5QSUtjOEtHVW9pOTB3ZlNhUnV3QW9vK29xYnFSMnVjUnBnNC9jajNCVEpqOUtlWng0R2ZqbW1BWDVUbVdZQ2xUTU55bXp3UWx4V21EUjlWKy9pT2NKUFpmbUI2SGwrQUdqWTBvNHRSdDF2Y0h1NGJGYW4yeXorQWJSak5iOG8xU1RqZEdHcU5PeFg0U0lUVnB5Q1BYSTh5aGlUM0JBaVllM3pJVitLaGs1aVJDUG1qVCszU2xlcCt1QnZuZzVER0xRZkVYQThFQTluYnJuWG9Bc1h3eGU3K3VJdEFJZm8zNjhVZzNRbUJxK3dqb2JmUXgrZ1I5aWo1RG42TXZ3SmZnUGVrclV2d2FxU0srVmQ3RDcrRDN6QThlMnZoMkl6RDl0ZW54VkQ2SkM0NTEyeHQ4bGo1SGZUOVBmeHArb3M0SHRBVmR3WXpLbktxK1FzenhleG8zckd3TGNyZDJWZFFRTjFtWHgxUGN3QzF1NHNQYnpCTkVMdjJMYUxEZFV0UDJvYlF4SzhhekhvTzRXM2lEM1Q0OWZXZVUyZWZSM2Y3L3lMRllabURRWHZjOUs5bGFnVVVBTWVMZWZ4YXNBakNIZlZnQVpCNklkWXM1MFh1MTNicUxGOWIyNEk5WkQyc0RiaTE0L3o4Z3kxaXhsdGpndk9VQjVMb0FnQlhZemFsSmdzYU1yUjF0WFlkUlJsR0g5UlFkc0UrNnhtUmc4eUllbzhveFJ1TVFCU29QdU1PTVlNTGRzNHhHQ0orSDJTTWk1YWJ1cy93Q1ZZNXROQTBYbTB5OXhHTTBKdEFPcTFwZ0swQmRLQWY3REtHdjBNZm95OUYvWkdsYWxOdmx3bmxDY2hndFJMOWxXNkFyNEtOK29TZGdJeFhwSUp5RjI3Z08yTy9OQWxoMVZYZU5PeVBkOS8zU0lLQS9WQ2szOVk0RVBZaXVIZU1CSEpwV2ttM1FlSkVMUEVZTDBXOWdnWkthOXpHSHp2OGJJN0RIZS80WWJoZmUyRTlpb085Sk0zMjNidWJzU2tRdmlNdytuM1FOSlVlOHRPdHJ6eTV2MkVhNjdBMnhWWlRzNHU4eTFqam51NTNOQzNrRWJpRS9aanNpdWxPajIwUTY4VTZZRWltdHhrdXVDM3ZMOFlaTG8yc0ZFYWRReHV2RzlsRTBldDYrbGsrN01RSG9OMFBZbHNhWGIrdmFOM3RyMXk0MmRWbWtmU2JWNXhpM0JiVjF1MTFNOXdEMGxPekxYbllDUjkwdDR3dCtyaXVvS0ExOXl1d0QycExBSndRN1ozeStjSW5pOGtnNjE4blVTQVQyTzZWSy8zV0JJYTFoVDJldzdFb0ZTcmFNSWorVFdFMCs5NHJhSEFKd0VUOStaN3BsWEVqcTN4REgzUURnNUlHTys1TDhMMitKLytpd3p4UE14Z0VpQmdBSS9peVpvSEFtTVAwL2VFNWs5eTZpTmUxazZ3N1d6NHVjcnFUcHh5WjNCZVVKdjJSeXAzWEZUUFlkeUw3Skl3UjRSa2p6TjdhelhpMkNJTUUwcFRYb2RaYzdJU2pkK3JMNEZIeEdFeTNBUkhVQXgxVi9MWnZpamw4d1dWMm0xZlNDZitzd2MwVzA2T3FhNW02U0t6eXRSbmhRVmFnTTZNY2hSZ2tKTVhZRThZaEI5dW1Lb29UcEdScU5rSzRmeDRPVyt1KzRDcmNHWXJnVFo1dm1HOVRVanRmbmlxWVpVV1Q2VWcwZUUzaGtpVUc1bkJwZ2pGMTREWGJvK0RRUmJmcFYxM3pNcGxJSkN1YytWTEp4R2dhenhGd1dJM1pMbmo2NVg1MDB4QjAzb1owTUw0YVNQNkd2UVhLYnVQTXJVcXZtYVFoM1VHWnJSVVpOaVlvOXRYVFJVN3hHbGRTeXBZNDViQXJMVUxNenRBYjY1aW1kSU9hUkRZcElVRjVCc0lvN0tRNi9VelN3dEkyU2VkUzFrN1FvSVhQU2MwR1RGNHV6V2h4THh2d054RjdoOXIxMkxMWVhJZDlGRDVzck8vUzMyYktlV3paUEpxWC9BTTNRaDFwdWZTdDc2amlRdllFbDFtTTBlTTdUTWt3QUEzdDlTRG03NlphWEtMWjU2NXZwTzBpeHZmUXlDSTJqNUJPaFYvazJQaVYzc1J0NEtxRmwvbUR1RG5VejZtN1Z2NzhSUGIzSTFqUE1YVkNxVllpZitFVEZIblczcmNoTWI1MWUxdXVWcHpMMGxnR1RJQVVNYVJVRmNLQURzSUVFMFFJWm1LZnlEVWxGWlljbzJhNi80M1FEQ2FYc2tjTUdPSzJzNUtGenFQeWk3c2pmSjlTOE5Wb2pqOG9YMU1qdXlmRUVRSUNQY1dpbUFXZ2pMQndrSnEwT0pqaWRIWnoyaVkzT1p6c0VrZG5yRU5seW5TTllZbDV5aERLWFlnOGoxYnFUQ0Foc25DN3k1S3RRS0p0WGxtSXloVXU4TkxMQkJaaXl1UU9VeURiSmRFVW15RFdackw5Q2VhYVpZaElIN1VTMHVKWG1lYlRJaWpaQmNyRjgwMjg2SnlldjdFeTF4RVFPcXNtVHc3bkt0ZEFVWmV6eVRlRGxreTNYQkdVWjQzTEtwaDdRSEs3eHFlQVFldnRvY1dSbEV0SmxBMDFSWk1wUktUVkZYZXJweFZ4RnhiNjhuRjdqc3E3R2JkVTIwQnVlSVZKT3dzZkZxNFRQQklVU09MaTRKTXJRVno5OWRaTWhhUEM0V1RzWXlnRW5acXM0bXJ3WUtkeGV1UGxZS1RMSnFEUy9WNG80aENvK0R2TlFiL1FJK3ZIb3JlZmdNVFBNbTRZNXUwNzVQNkpJWGhIL2UxL3lud0VBKSBmb3JtYXQoXFxcIndvZmYyXFxcIik7dW5pY29kZS1yYW5nZTp1KzAwPz8sdSswMTMxLHUrMDE1Mi0wMTUzLHUrMDJiYi0wMmJjLHUrMDJjNix1KzAyZGEsdSswMmRjLHUrMjAwMC0yMDZmLHUrMjA3NCx1KzIwYWMsdSsyMTIyLHUrMjE5MSx1KzIxOTMsdSsyMjEyLHUrMjIxNSx1K2ZlZmYsdStmZmZkfWJvZHksaHRtbHtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS40fWh0bWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLXBhcmFncmFwaCxwe2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjY7dGV4dC1hbGlnbjpqdXN0aWZ5fS5tb25zdGVyLWgxLGgxe2ZvbnQtc2l6ZTozcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjE1O21hcmdpbjo0cmVtIDAgMS41cmVtfS5tb25zdGVyLWgyLGgye2ZvbnQtc2l6ZToyLjVyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMjttYXJnaW46NHJlbSAwIDEuNXJlbX0ubW9uc3Rlci1oMyxoM3tmb250LXNpemU6MnJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4yNTttYXJnaW46NHJlbSAwIDEuMjVyZW19Lm1vbnN0ZXItaDQsaDR7Zm9udC1zaXplOjEuNXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4zO21hcmdpbjo0cmVtIDAgMS4yNXJlbX0ubW9uc3Rlci1oNSxoNXtmb250LXNpemU6MS40cmVtO2ZvbnQtd2VpZ2h0OmJvbGRlcjtsaW5lLWhlaWdodDoxLjM7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfS5tb25zdGVyLWg2LGg2e2ZvbnQtc2l6ZToxLjNyZW07Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjEuMzttYXJnaW46NHJlbSAwIDEuMjVyZW19cCtoMXttYXJnaW4tdG9wOjMuNzVyZW19cCtoMnttYXJnaW4tdG9wOjNyZW19cCtoM3ttYXJnaW4tdG9wOjIuMjVyZW19cCtoNHttYXJnaW4tdG9wOjEuNXJlbX1wK2g1e21hcmdpbi10b3A6Ljc1cmVtfWRpditoMSxkaXYraDIsZGl2K2gzLGRpditoNCxkaXYraDUsZGl2K2g2LHAraDZ7bWFyZ2luLXRvcDowfS5kZWNve2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMSkgMCx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTIpIDUwJSx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTMpIDEwMCUpOy13ZWJraXQtYmFja2dyb3VuZC1jbGlwOnRleHQ7YmFja2dyb3VuZC1jbGlwOnRleHQ7YmFja2dyb3VuZC1zaXplOmNvdmVyO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpO3RleHQtZmlsbC1jb2xvcjp0cmFuc3BhcmVudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjp0cmFuc3BhcmVudH06Oi1tb3otc2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9OjpzZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX1rYmR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czouMjVyZW07Ym9yZGVyLXJhZGl1czoxMHJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTtwYWRkaW5nOi4yNWVtIC42ZW07dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfWRldGFpbHN7bWFyZ2luLWJvdHRvbToxcmVtfXN1bW1hcnl7Y3Vyc29yOnBvaW50ZXI7Zm9udC1mZWF0dXJlLXNldHRpbmdzOlxcXCJ0bnVtXFxcIjtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjFlbTtwYWRkaW5nOi42cmVtIDFyZW19ZGV0YWlsc1tvcGVuXXtwYWRkaW5nOi42cmVtIDFyZW0gLjc1cmVtfWRldGFpbHNbb3Blbl0gc3VtbWFyeXttYXJnaW4tYm90dG9tOi41cmVtO3BhZGRpbmc6MH0ubW9uc3Rlci1uby11c2VyLXNlbGVjdHstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9QGtleWZyYW1lcyBkZXRhaWxzLXNob3d7MCV7b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0uNWVtKX19ZGV0YWlsc1tvcGVuXT46bm90KHN1bW1hcnkpe2FuaW1hdGlvbjpkZXRhaWxzLXNob3cgLjE1cyBlYXNlLWluLW91dH1kZXRhaWxzW29wZW5dPjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0ubW9ub3NwYWNle2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHktbW9ub3NwYWNlKX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gW2RhdGEtbW9uc3Rlci1yb2xlPWJ1dHRvbl17bWluLXdpZHRoOi1tb3otbWF4LWNvbnRlbnQ7bWluLXdpZHRoOm1heC1jb250ZW50O3dpZHRoOjEwMCV9YnV0dG9ue3dpZHRoOi1tb3otbWF4LWNvbnRlbnQ7d2lkdGg6bWF4LWNvbnRlbnR9IFxufWAsIDApO1xufSBjYXRjaCAoZSkge1xuICBhZGRBdHRyaWJ1dGVUb2tlbihkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoJ2h0bWwnKSwgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZSArIFwiXCIpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9ST0xFIH0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBpc0FycmF5LCBpc1N0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgUG9wcGVyIH0gZnJvbSBcIi4vcG9wcGVyLm1qc1wiO1xuaW1wb3J0IHsgTWVzc2FnZVN0YXRlQnV0dG9uU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvbWVzc2FnZS1zdGF0ZS1idXR0b24ubWpzXCI7XG5pbXBvcnQgeyBTdGF0ZUJ1dHRvblN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L3N0YXRlLWJ1dHRvbi5tanNcIjtcbmltcG9ydCBcIi4vc3RhdGUtYnV0dG9uLm1qc1wiO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcblxuZXhwb3J0IHsgTWVzc2FnZVN0YXRlQnV0dG9uIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGJ1dHRvbkVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJidXR0b25FbGVtZW50XCIpO1xuXG4vKipcbiAqIEEgc2VsZWN0IGNvbnRyb2wgdGhhdCBjYW4gYmUgdXNlZCB0byBzZWxlY3Qgb25lIG9yIG1vcmUgb3B0aW9ucyBmcm9tIGEgbGlzdC5cbiAqXG4gKiBAZnJhZ21lbnRzIC9mcmFnbWVudHMvY29tcG9uZW50cy9mb3JtL21lc3NhZ2Utc3RhdGUtYnV0dG9uL1xuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2Zvcm0vbWVzc2FnZS1zdGF0ZS1idXR0b24tc2ltcGxlXG4gKlxuICogQHNpbmNlIDIuMTEuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgYmVhdXRpZnVsIHNlbGVjdCBjb250cm9sIHRoYXQgY2FuIG1ha2UgeW91ciBsaWZlIGVhc2llciBhbmQgYWxzbyBsb29rcyBnb29kLlxuICogQGZpcmVzIG1vbnN0ZXItb3B0aW9ucy1zZXRcbiAqIEBmaXJlcyBtb25zdGVyLXNlbGVjdGVkXG4gKiBAZmlyZXMgbW9uc3Rlci1jaGFuZ2VcbiAqIEBmaXJlcyBtb25zdGVyLWNoYW5nZWRcbiAqL1xuY2xhc3MgTWVzc2FnZVN0YXRlQnV0dG9uIGV4dGVuZHMgUG9wcGVyIHtcblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXG5cdFx0XHRcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9mb3JtL21lc3NhZ2Utc3RhdGUtYnV0dG9uQEBpbnN0YW5jZVwiLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHN0YXRlXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lb3V0XG5cdCAqIEByZXR1cm4ge01lc3NhZ2VTdGF0ZUJ1dHRvbn1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Vcblx0ICovXG5cdHNldFN0YXRlKHN0YXRlLCB0aW1lb3V0KSB7XG5cdFx0cmV0dXJuIHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uc2V0U3RhdGUoc3RhdGUsIHRpbWVvdXQpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01lc3NhZ2VTdGF0ZUJ1dHRvbn1cblx0ICovXG5cdHJlbW92ZVN0YXRlKCkge1xuXHRcdHJldHVybiB0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLnJlbW92ZVN0YXRlKCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uVHlwZXMuU3RhdGV8dW5kZWZpbmVkfVxuXHQgKi9cblx0Z2V0U3RhdGUoKSB7XG5cdFx0cmV0dXJuIHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uZ2V0U3RhdGUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBIVE1MIHRhZywgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGxhYmVscyBMYWJlbCBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbGFiZWxzLmJ1dHRvbiBCdXR0b24gbGFiZWxcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IG1vZGUgTW9kZSBkZWZpbml0aW9ucyAobWFudWFsLCBzdWJtaXQpXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHRtZXNzYWdlOiB7XG5cdFx0XHRcdHRpdGxlOiB1bmRlZmluZWQsXG5cdFx0XHRcdGNvbnRlbnQ6IHVuZGVmaW5lZCxcblx0XHRcdFx0aWNvbjogdW5kZWZpbmVkLFxuXHRcdFx0fSxcblx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0fSxcblx0XHRcdG1vZGU6IFwibWFudWFsXCIsXG5cdFx0XHRsYWJlbHM6IHtcblx0XHRcdFx0YnV0dG9uOiBcIjxzbG90Pjwvc2xvdD5cIixcblx0XHRcdH0sXG5cdFx0XHRjbGFzc2VzOiB7XG5cdFx0XHRcdGJ1dHRvbjogXCJtb25zdGVyLWJ1dHRvbi1wcmltYXJ5XCIsXG5cdFx0XHR9LFxuXHRcdFx0YWN0aW9uczoge1xuXHRcdFx0XHRjbGljazogKGUpID0+IHtcblxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdGZlYXR1cmVzOiB7XG5cdFx0XHRcdGRpc2FibGVCdXR0b246IGZhbHNlLFxuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcblxuXHRcdGxldCBtb2RlcyA9IG51bGw7XG5cdFx0Y29uc3QgbW9kZU9wdGlvbiA9IHRoaXMuZ2V0T3B0aW9uKFwibW9kZVwiKTtcblx0XHRpZiAodHlwZW9mIG1vZGVPcHRpb24gPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdG1vZGVzID0gbW9kZU9wdGlvbi5zcGxpdChcIiBcIik7XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0bW9kZXMgPT09IG51bGwgfHxcblx0XHRcdG1vZGVzID09PSB1bmRlZmluZWQgfHxcblx0XHRcdGlzQXJyYXkobW9kZXMpID09PSBmYWxzZSB8fFxuXHRcdFx0bW9kZXMubGVuZ3RoID09PSAwXG5cdFx0KSB7XG5cdFx0XHRtb2RlcyA9IFtcIm1hbnVhbFwiXTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IFssIG1vZGVdIG9mIE9iamVjdC5lbnRyaWVzKG1vZGVzKSkge1xuXHRcdFx0aW5pdEV2ZW50SGFuZGxlckJ5TW9kZS5jYWxsKHRoaXMsIG1vZGUpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIG1lc3NhZ2Vcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd8SFRNTEVsZW1lbnR9bWVzc2FnZVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGl0bGVcblx0ICogQHBhcmFtIHtzdHJpbmd9IGljb25cblx0ICogQHJldHVybiB7TWVzc2FnZVN0YXRlQnV0dG9ufVxuXHQgKi9cblx0c2V0TWVzc2FnZShtZXNzYWdlLCB0aXRsZSwgaWNvbikge1xuXHRcdGlmIChpc1N0cmluZyhtZXNzYWdlKSkge1xuXHRcdFx0aWYgKG1lc3NhZ2UgPT09IFwiXCIpIHtcblx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcIm1lc3NhZ2UgbXVzdCBub3QgYmUgZW1wdHlcIik7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGNvbnRhaW5lckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdFx0XHRjb25zdCBtZXNzYWdlRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0XHRcdGNvbnN0IHRpdGxlRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0XHRcdHRpdGxlRGl2LnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSwgXCJtZXNzYWdlLXRpdGxlLWJveFwiKTtcblxuXHRcdFx0bGV0IHRpdGxlRWxlbWVudCwgaWNvbkVsZW1lbnQ7XG5cdFx0XHRpZiAodGl0bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0aXRsZSA9IHZhbGlkYXRlU3RyaW5nKHRpdGxlKTtcblx0XHRcdFx0dGl0bGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0XHRcdFx0dGl0bGVFbGVtZW50LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIFwiXCIpO1xuXHRcdFx0XHR0aXRsZUVsZW1lbnQuaW5uZXJIVE1MID0gdGl0bGU7XG5cdFx0XHRcdHRpdGxlRWxlbWVudC5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUsIFwibWVzc2FnZS10aXRsZVwiKTtcblx0XHRcdFx0dGl0bGVEaXYuYXBwZW5kQ2hpbGQodGl0bGVFbGVtZW50KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGljb24gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRpY29uID0gdmFsaWRhdGVTdHJpbmcoaWNvbik7XG5cdFx0XHRcdGljb25FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0XHRcdFx0aWNvbkVsZW1lbnQuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJcIik7XG5cdFx0XHRcdGljb25FbGVtZW50LmlubmVySFRNTCA9IGljb247XG5cdFx0XHRcdGljb25FbGVtZW50LnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSwgXCJtZXNzYWdlLWljb25cIik7XG5cdFx0XHRcdHRpdGxlRGl2LmFwcGVuZENoaWxkKGljb25FbGVtZW50KTtcblx0XHRcdH1cblxuXHRcdFx0bWVzc2FnZURpdi5pbm5lckhUTUwgPSBtZXNzYWdlO1xuXHRcdFx0Y29udGFpbmVyRGl2LmFwcGVuZENoaWxkKHRpdGxlRGl2KTtcblx0XHRcdGNvbnRhaW5lckRpdi5hcHBlbmRDaGlsZChtZXNzYWdlRGl2KTtcblxuXHRcdFx0dGhpcy5zZXRPcHRpb24oXCJtZXNzYWdlLmNvbnRlbnRcIiwgY29udGFpbmVyRGl2KTtcblx0XHR9IGVsc2UgaWYgKG1lc3NhZ2UgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0dGhpcy5zZXRPcHRpb24oXCJtZXNzYWdlLmNvbnRlbnRcIiwgbWVzc2FnZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXG5cdFx0XHRcdFwibWVzc2FnZSBtdXN0IGJlIGEgc3RyaW5nIG9yIGFuIGluc3RhbmNlIG9mIEhUTUxFbGVtZW50XCIsXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIGNsZWFycyB0aGUgTWVzc2FnZVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNZXNzYWdlU3RhdGVCdXR0b259XG5cdCAqL1xuXHRjbGVhck1lc3NhZ2UoKSB7XG5cdFx0dGhpcy5zZXRPcHRpb24oXCJtZXNzYWdlLnRpdGxlXCIsIHVuZGVmaW5lZCk7XG5cdFx0dGhpcy5zZXRPcHRpb24oXCJtZXNzYWdlLmNvbnRlbnRcIiwgdW5kZWZpbmVkKTtcblx0XHR0aGlzLnNldE9wdGlvbihcIm1lc3NhZ2UuaWNvblwiLCB1bmRlZmluZWQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpdGggdGhpcyBtZXRob2QgeW91IGNhbiBzaG93IHRoZSBwb3BwZXIgd2l0aCB0aW1lb3V0IGZlYXR1cmUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lb3V0XG5cdCAqIEByZXR1cm4ge01lc3NhZ2VTdGF0ZUJ1dHRvbn1cblx0ICovXG5cdHNob3dNZXNzYWdlKHRpbWVvdXQpIHtcblx0XHR0aGlzLnNob3dEaWFsb2cuY2FsbCh0aGlzKTtcblxuXHRcdGlmICh0aW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRzdXBlci5oaWRlRGlhbG9nKCk7XG5cdFx0XHR9LCB0aW1lb3V0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBXaXRoIHRoaXMgbWV0aG9kIHlvdSBjYW4gc2hvdyB0aGUgcG9wcGVyLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNZXNzYWdlU3RhdGVCdXR0b259XG5cdCAqL1xuXHRzaG93RGlhbG9nKCkge1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcIm1lc3NhZ2UuY29udGVudFwiKSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHN1cGVyLnNob3dEaWFsb2coKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNZXNzYWdlU3RhdGVCdXR0b259XG5cdCAqL1xuXHRoaWRlTWVzc2FnZSgpIHtcblx0XHRzdXBlci5oaWRlRGlhbG9nKCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7TWVzc2FnZVN0YXRlQnV0dG9ufVxuXHQgKi9cblx0dG9nZ2xlTWVzc2FnZSgpIHtcblx0XHRzdXBlci50b2dnbGVEaWFsb2coKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtPYmplY3R9XG5cdCAqL1xuXHRnZXRNZXNzYWdlKCkge1xuXHRcdHJldHVybiB0aGlzLmdldE9wdGlvbihcIm1lc3NhZ2VcIik7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLW1lc3NhZ2Utc3RhdGUtYnV0dG9uXCI7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7QXJyYXk8Q1NTU3R5bGVTaGVldD59XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRjb25zdCBzdHlsZXMgPSBQb3BwZXIuZ2V0Q1NTU3R5bGVTaGVldCgpO1xuXHRcdHN0eWxlcy5wdXNoKFN0YXRlQnV0dG9uU3R5bGVTaGVldCk7XG5cdFx0c3R5bGVzLnB1c2goTWVzc2FnZVN0YXRlQnV0dG9uU3R5bGVTaGVldCk7XG5cdFx0cmV0dXJuIHN0eWxlcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQnV0dG9uLmNsaWNrKCkgbWV0aG9kIHNpbXVsYXRlcyBhIGNsaWNrIG9uIHRoZSBpbnRlcm5hbCBidXR0b24gZWxlbWVudC5cblx0ICpcblx0ICogQHNpbmNlIDMuMjcuMFxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvY2xpY2t9XG5cdCAqL1xuXHRjbGljaygpIHtcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJkaXNhYmxlZFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0gJiZcblx0XHRcdGlzRnVuY3Rpb24odGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5jbGljaylcblx0XHQpIHtcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uY2xpY2soKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhlIEJ1dHRvbi5mb2N1cygpIG1ldGhvZCBzZXRzIGZvY3VzIG9uIHRoZSBpbnRlcm5hbCBidXR0b24gZWxlbWVudC5cblx0ICpcblx0ICogQHNpbmNlIDMuMjcuMFxuXHQgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvZm9jdXN9XG5cdCAqL1xuXHRmb2N1cyhvcHRpb25zKSB7XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZGlzYWJsZWRcIikgPT09IHRydWUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdICYmXG5cdFx0XHRpc0Z1bmN0aW9uKHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uZm9jdXMpXG5cdFx0KSB7XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmZvY3VzKG9wdGlvbnMpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQnV0dG9uLmJsdXIoKSBtZXRob2QgcmVtb3ZlcyBmb2N1cyBmcm9tIHRoZSBpbnRlcm5hbCBidXR0b24gZWxlbWVudC5cblx0ICovXG5cdGJsdXIoKSB7XG5cdFx0aWYgKFxuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXSAmJlxuXHRcdFx0aXNGdW5jdGlvbih0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmJsdXIpXG5cdFx0KSB7XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmJsdXIoKTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gaW5pdEV2ZW50SGFuZGxlckJ5TW9kZShtb2RlKSB7XG5cdHN3aXRjaCAobW9kZSkge1xuXHRcdGNhc2UgXCJtYW51YWxcIjpcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uc2V0T3B0aW9uKFwiYWN0aW9ucy5jbGlja1wiLCAoZSkgPT4ge1xuXHRcdFx0XHRjb25zdCBjYWxsYmFjayA9IHRoaXMuZ2V0T3B0aW9uKFwiYWN0aW9ucy5jbGlja1wiKTtcblx0XHRcdFx0aWYgKGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG5cdFx0XHRcdFx0Y2FsbGJhY2soZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwic3VibWl0XCI6XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLnNldE9wdGlvbihcImFjdGlvbnMuY2xpY2tcIiwgKGUpID0+IHtcblx0XHRcdFx0Y29uc3QgZm9ybSA9IHRoaXMuZm9ybTtcblxuXHRcdFx0XHRpZiAoZm9ybSBpbnN0YW5jZW9mIEhUTUxGb3JtRWxlbWVudCkge1xuXHRcdFx0XHRcdGZvcm0ucmVxdWVzdFN1Ym1pdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0YnJlYWs7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7U2VsZWN0fVxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWJ1dHRvbl1gLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250cm9sXCIgcGFydD1cImNvbnRyb2xcIj5cblxuICAgICAgICAgICAgPG1vbnN0ZXItc3RhdGUtYnV0dG9uIGV4cG9ydHBhcnRzPVwiYnV0dG9uOmJ1dHRvbi1idXR0b24sY29udHJvbDpidXR0b24tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJkYXRhLW1vbnN0ZXItb3B0aW9uLWNsYXNzZXMtYnV0dG9uIHBhdGg6Y2xhc3Nlcy5idXR0b24sIGRpc2FibGVkIHBhdGg6ZmVhdHVyZXMuZGlzYWJsZUJ1dHRvbiB8IGlmOnRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQ9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmxhYmVscy5idXR0b25cIj48L3NwYW4+XG4gICAgICAgICAgICA8L21vbnN0ZXItc3RhdGUtYnV0dG9uPlxuXG5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJwb3BwZXJcIiBwYXJ0PVwicG9wcGVyXCIgdGFiaW5kZXg9XCItMVwiIGNsYXNzPVwibW9uc3Rlci1jb2xvci1wcmltYXJ5LTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiYXJyb3dcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwibWVzc2FnZVwiIHBhcnQ9XCJtZXNzYWdlXCIgY2xhc3M9XCJmbGV4XCJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDptZXNzYWdlLmNvbnRlbnRcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgYDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KE1lc3NhZ2VTdGF0ZUJ1dHRvbik7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX1JPTEUgfSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IHR5cGVPZiB9IGZyb20gXCIuLi8uLi90eXBlcy90eXBlb2YubWpzXCI7XG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tIFwiLi9idXR0b24ubWpzXCI7XG5pbXBvcnQgeyBQb3BwZXJCdXR0b24gfSBmcm9tIFwiLi9wb3BwZXItYnV0dG9uLm1qc1wiO1xuaW1wb3J0IHsgQ29uZmlybUJ1dHRvblN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L2NvbmZpcm0tYnV0dG9uLm1qc1wiO1xuaW1wb3J0IHsgZmlyZUN1c3RvbUV2ZW50IH0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5cbmltcG9ydCBcIi4vYnV0dG9uLm1qc1wiO1xuaW1wb3J0IFwiLi9tZXNzYWdlLXN0YXRlLWJ1dHRvbi5tanNcIjtcbmltcG9ydCB7IFBvcHBlckJ1dHRvblN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L3BvcHBlci1idXR0b24ubWpzXCI7XG5pbXBvcnQgeyBTdGF0ZUJ1dHRvblN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L3N0YXRlLWJ1dHRvbi5tanNcIjtcblxuZXhwb3J0IHsgQ29uZmlybUJ1dHRvbiB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjb25maXJtQnV0dG9uRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImNvbmZpcm1CdXR0b25FbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjYW5jZWxCdXR0b25FbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiY2FuY2VsQnV0dG9uRWxlbWVudFwiKTtcblxuLyoqXG4gKiBUaGlzIGFjdGlvbiBjYWxsYmFjayBleGVjdXRlcyB0aGUgYWN0aW9ucyB3aGVuIGEgYnV0dG9uIGlzIGNsaWNrZWQuXG4gKlxuICogQGNhbGxiYWNrIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtfmV4YW1wbGVBY3Rpb25DYWxsYmFja1xuICogQHBhcmFtIHtFdmVudH0gZSBFdmVudFxuICogQHRoaXMge0N1c3RvbUNvbnRyb2x9XG4gKi9cblxuLyoqXG4gKiBUaGlzIEN1c3RvbUNvbnRyb2wgY3JlYXRlcyBhIGNvbmZpcm0gYnV0dG9uIGVsZW1lbnQgd2l0aCBhIHZhcmlldHkgb2Ygb3B0aW9ucy5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1hZ2VzL2NvbmZpcm0tYnV0dG9uLnBuZ1wiPlxuICpcbiAqIERlcGVuZGVuY2llczogdGhlIHN5c3RlbSB1c2VzIGZ1bmN0aW9ucyBvZiB0aGUgW21vbnN0ZXJqc10oaHR0cHM6Ly9tb25zdGVyanMub3JnLykgbGlicmFyeVxuICogYXMgd2VsbCBhcyBbcG9vcGVyanNdKGh0dHBzOi8vcG9wcGVyLmpzLm9yZy9kb2NzL3YyLykuXG4gKlxuICogWW91IGNhbiBjcmVhdGUgdGhpcyBjb250cm9sIGVpdGhlciBieSBzcGVjaWZ5aW5nIHRoZSBIVE1MIHRhZyA8bW9uc3Rlci1jb25maXJtLWJ1dHRvbiAvPmAgZGlyZWN0bHkgaW4gdGhlIEhUTUwgb3IgdXNpbmdcbiAqIEphdmFzY3JpcHQgdmlhIHRoZSBgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1jb25maXJtLWJ1dHRvbicpO2AgbWV0aG9kLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxtb25zdGVyLWNvbmZpcm0tYnV0dG9uPjwvbW9uc3Rlci1jb25maXJtLWJ1dHRvbj5cbiAqIGBgYFxuICpcbiAqIE9yIHlvdSBjYW4gY3JlYXRlIHRoaXMgQ3VzdG9tQ29udHJvbCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0OlxuICpcbiAqIGBgYGpzXG4gKiBpbXBvcnQge0NvbmZpcm1CdXR0b259IGZyb20gJ0BzY2h1a2FpL2NvbXBvbmVudC1mb3JtL3NvdXJjZS9jb25maXJtLWJ1dHRvbi5qcyc7XG4gKiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWNvbmZpcm0tYnV0dG9uJyk7XG4gKiBgYGBcbiAqIFRoZSBgZGF0YS1tb25zdGVyLWJ1dHRvbi1jbGFzc2AgYXR0cmlidXRlIGNhbiBiZSB1c2VkIHRvIGNoYW5nZSB0aGUgQ1NTIGNsYXNzIG9mIHRoZSBidXR0b24uXG4gKlxuICogQHN0YXJ0dW1sIGNvbmZpcm0tYnV0dG9uLnBuZ1xuICogc2tpbnBhcmFtIG1vbm9jaHJvbWUgdHJ1ZVxuICogc2tpbnBhcmFtIHNoYWRvd2luZyBmYWxzZVxuICogSFRNTEVsZW1lbnQgPHwtLSBDdXN0b21FbGVtZW50XG4gKiBDdXN0b21FbGVtZW50IDx8LS0gQ3VzdG9tQ29udHJvbFxuICogQ3VzdG9tQ29udHJvbCA8fC0tIEJ1dHRvblxuICogQnV0dG9uIDx8LS0gUG9wcGVyQnV0dG9uXG4gKiBQb3BwZXJCdXR0b24gPHwtLSBDb25maXJtQnV0dG9uXG4gKiBAZW5kdW1sXG4gKlxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgY29uZmlybSBidXR0b25cbiAqL1xuXG4vKipcbiAqIEEgY29uZmlybSBidXR0b24gY29udHJvbC5cbiAqXG4gKiBAZnJhZ21lbnRzIC9mcmFnbWVudHMvY29tcG9uZW50cy9mb3JtL2NvbmZpcm0tYnV0dG9uL1xuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2Zvcm0vY29uZmlybS1idXR0b24tc2ltcGxlXG4gKlxuICogQHNpbmNlIDEuNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBjb25maXJtIGJ1dHRvbiBjb250cm9sXG4gKi9cbmNsYXNzIENvbmZpcm1CdXR0b24gZXh0ZW5kcyBQb3BwZXJCdXR0b24ge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXG5cdFx0XHRcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9mb3JtL2NvbmZpcm0tYnV0dG9uQEBpbnN0YW5jZVwiLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgSFRNTCB0YWcsIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1vcHRpb25zYCBtdXN0IGJlIHVzZWQuXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZy9lbi9kb2MvI2NvbmZpZ3VyYXRlLWEtbW9uc3Rlci1jb250cm9sfVxuXHQgKlxuXHQgKiBUaGUgaW5kaXZpZHVhbCBjb25maWd1cmF0aW9uIHZhbHVlcyBjYW4gYmUgZm91bmQgaW4gdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdG9nZ2xlRXZlbnRUeXBlPWNsaWNrLHRvdWNoIExpc3Qgb2YgZXZlbnQgdHlwZXMgdG8gYmUgb2JzZXJ2ZWQgZm9yIG9wZW5pbmcgdGhlIGNvbmZpcm0gbWVzc2FnZVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIFRlbXBsYXRlIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbiBNYWluIHRlbXBsYXRlXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYWJlbHMuYnV0dG9uPSc8c2xvdCBuYW1lPVwiYnV0dG9uXCI+PC9zbG90PicgQnV0dG9uIGxhYmVsXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYWJlbHMubWVzc2FnZT0nPHNsb3Q+U2hvdWxkIEkgU3RheSBvciBTaG91bGQgSSBHbz88L3Nsb3Q+JyBNZXNzYWdlXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYWJlbHMuY29uZmlybT0nPHNsb3QgbmFtZT1cImNvbmZpcm1cIj5Db25maXJtPC9zbG90PicgQ29uZmlybSBidXR0b24gbGFiZWxcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5jYW5jZWw9JzxzbG90IG5hbWU9XCJjYW5jZWxcIj5DYW5jZWw8L3Nsb3Q+JyBDYW5jZWwgYnV0dG9uIGxhYmVsXG5cdCAqIEBwcm9wZXJ0eSB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm1+ZXhhbXBsZUFjdGlvbkNhbGxiYWNrfSBhY3Rpb25zLmNvbmZpcm1cblx0ICogQHByb3BlcnR5IHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybX5leGFtcGxlQWN0aW9uQ2FsbGJhY2t9IGFjdGlvbnMuY2FuY2VsIExpc3Qgb2YgZXZlbnQgdHlwZXMgdG8gYmUgb2JzZXJ2ZWQgZm9yIG9wZW5pbmcgdGhlIGRyb3Bkb3duXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBwb3BwZXIgW1BvcHBlckpTIE9wdGlvbnNdKGh0dHBzOi8vcG9wcGVyLmpzLm9yZy9kb2NzL3YyLylcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHBvcHBlci5wbGFjZW1lbnQ9dG9wIFBvcHBlckpTIHBsYWNlbWVudFxuXHQgKiBAZXh0ZW5kcyB7UG9wcGVyQnV0dG9ufVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdGNvbnN0IG9iaiA9IE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdH0sXG5cdFx0XHRsYWJlbHM6IHtcblx0XHRcdFx0YnV0dG9uOiAnPHNsb3QgbmFtZT1cImJ1dHRvblwiPjwvc2xvdD4nLFxuXHRcdFx0XHRtZXNzYWdlOiBcIjxzbG90PlNob3VsZCBJIFN0YXkgb3IgU2hvdWxkIEkgR28/PC9zbG90PlwiLFxuXHRcdFx0XHRjb25maXJtOiAnPHNsb3QgbmFtZT1cImNvbmZpcm1cIj5Db25maXJtPC9zbG90PicsXG5cdFx0XHRcdGNhbmNlbDogJzxzbG90IG5hbWU9XCJjYW5jZWxcIj5DYW5jZWw8L3Nsb3Q+Jyxcblx0XHRcdH0sXG5cdFx0fSk7XG5cblx0XHRvYmpbXCJjbGFzc2VzXCJdW1wiY29uZmlybUJ1dHRvblwiXSA9IFwibW9uc3Rlci1idXR0b24tcHJpbWFyeVwiO1xuXHRcdG9ialtcImNsYXNzZXNcIl1bXCJjYW5jZWxCdXR0b25cIl0gPSBcIm1vbnN0ZXItYnV0dG9uLXNlY29uZGFyeVwiO1xuXHRcdG9ialtcImFjdGlvbnNcIl1bXCJjYW5jZWxcIl0gPSAoZSkgPT4ge1xuXHRcdFx0dGhpcy5oaWRlRGlhbG9nKCk7XG5cdFx0fTtcblxuXHRcdG9ialtcImFjdGlvbnNcIl1bXCJjb25maXJtXCJdID0gKGUpID0+IHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInRoaXMgY2FsbGJhY2sgbXVzdCBiZSBpbXBsZW1lbnRlZFwiKTtcblx0XHR9O1xuXG5cdFx0cmV0dXJuIG9iajtcblx0fVxuXG5cdGhpZGVEaWFsb2coKSB7XG5cdFx0c3VwZXIuaGlkZURpYWxvZygpO1xuXHRcdHRoaXNbY29uZmlybUJ1dHRvbkVsZW1lbnRTeW1ib2xdLnJlbW92ZVN0YXRlKCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uUG9wcGVyQnV0dG9ufVxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcblx0XHRpbml0RXZlbnRoYW5kbGVyLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLWNvbmZpcm0tYnV0dG9uXCI7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7QXJyYXl9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRjb25zdCBzdHlsZXMgPSBQb3BwZXJCdXR0b24uZ2V0Q1NTU3R5bGVTaGVldCgpO1xuXHRcdHN0eWxlcy5wdXNoKENvbmZpcm1CdXR0b25TdHlsZVNoZWV0KTtcblx0XHRyZXR1cm4gc3R5bGVzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlBvcHBlckJ1dHRvbn1cblx0ICovXG5cdHNob3dEaWFsb2coKSB7XG5cdFx0Y29uc3QgY29uZmlybUJ1dHRvbkNsYXNzID0gdGhpcy5nZXRPcHRpb24oXCJjbGFzc2VzLmNvbmZpcm1CdXR0b25cIik7XG5cdFx0aWYgKGNvbmZpcm1CdXR0b25DbGFzcykge1xuXHRcdFx0dGhpc1tjb25maXJtQnV0dG9uRWxlbWVudFN5bWJvbF0uc2V0T3B0aW9uKFxuXHRcdFx0XHRcImNsYXNzZXMuYnV0dG9uXCIsXG5cdFx0XHRcdGNvbmZpcm1CdXR0b25DbGFzcyxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY2FuY2VsQnV0dG9uQ2xhc3MgPSB0aGlzLmdldE9wdGlvbihcImNsYXNzZXMuY2FuY2VsQnV0dG9uXCIpO1xuXHRcdGlmIChjYW5jZWxCdXR0b25DbGFzcykge1xuXHRcdFx0dGhpc1tjYW5jZWxCdXR0b25FbGVtZW50U3ltYm9sXS5zZXRPcHRpb24oXG5cdFx0XHRcdFwiY2xhc3Nlcy5idXR0b25cIixcblx0XHRcdFx0Y2FuY2VsQnV0dG9uQ2xhc3MsXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiBzdXBlci5zaG93RGlhbG9nKCk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IHRoZSBjb25maXJtIGJ1dHRvbiBzdGF0ZVxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc3RhdGVcblx0ICogQHBhcmFtIHtudW1iZXJ9IHRpbWVvdXRcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uQ29uZmlybUJ1dHRvbn1cblx0ICovXG5cdHNldENvbmZpcm1CdXR0b25TdGF0ZShzdGF0ZSwgdGltZW91dCkge1xuXHRcdHRoaXNbY29uZmlybUJ1dHRvbkVsZW1lbnRTeW1ib2xdLnNldFN0YXRlKHN0YXRlLCB0aW1lb3V0KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgYW5kIHNob3cgdGhlIGNvbmZpcm0gYnV0dG9uIG1lc3NhZ2Vcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2Vcblx0ICogQHBhcmFtIHtudW1iZXJ9IHRpbWVvdXRcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uQ29uZmlybUJ1dHRvbn1cblx0ICovXG5cdHNob3dDb25maXJtQnV0dG9uTWVzc2FnZShtZXNzYWdlLCB0aW1lb3V0KSB7XG5cdFx0dGhpc1tjb25maXJtQnV0dG9uRWxlbWVudFN5bWJvbF0uc2V0TWVzc2FnZShtZXNzYWdlKTtcblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdHRoaXNbY29uZmlybUJ1dHRvbkVsZW1lbnRTeW1ib2xdLnNob3dNZXNzYWdlKHRpbWVvdXQpO1xuXHRcdH0sIDApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB0eXBlXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gZ2V0QWN0aW9uKHR5cGUpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0cmV0dXJuIGZ1bmN0aW9uIChldmVudCkge1xuXHRcdGNvbnN0IGNhbGxiYWNrID0gc2VsZi5nZXRPcHRpb24oYGFjdGlvbnMuJHt0eXBlfWApO1xuXHRcdGlmICh0eXBlT2YoY2FsbGJhY2spICE9PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjYWxsYmFjay5jYWxsKHRoaXMsIGV2ZW50KTtcblx0fTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7aW5pdEV2ZW50aGFuZGxlcn1cbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5Qb3BwZXJCdXR0b24jbW9uc3Rlci1jb25maXJtXG4gKiBAZmlyZXMgTW9uc3Rlci5Db21wb25lbnRzLkZvcm0uUG9wcGVyQnV0dG9uI21vbnN0ZXItY29uZmlybWVkXG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudGhhbmRsZXIoKSB7XG5cdHRoaXNbY2FuY2VsQnV0dG9uRWxlbWVudFN5bWJvbF0uc2V0T3B0aW9uKFxuXHRcdFwiY2xpY2tFdmVudFR5cGVcIixcblx0XHR0aGlzLmdldE9wdGlvbihcImNsaWNrRXZlbnRUeXBlXCIsIFtcImNsaWNrXCJdKSxcblx0KTtcblx0dGhpc1tjYW5jZWxCdXR0b25FbGVtZW50U3ltYm9sXS5zZXRPcHRpb24oXG5cdFx0XCJhY3Rpb25zLmNsaWNrXCIsXG5cdFx0Z2V0QWN0aW9uLmNhbGwodGhpcywgXCJjYW5jZWxcIiksXG5cdCk7XG5cblx0dGhpc1tjb25maXJtQnV0dG9uRWxlbWVudFN5bWJvbF0uc2V0T3B0aW9uKFxuXHRcdFwiY2xpY2tFdmVudFR5cGVcIixcblx0XHR0aGlzLmdldE9wdGlvbihcImNsaWNrRXZlbnRUeXBlXCIsIFtcImNsaWNrXCJdKSxcblx0KTtcblx0dGhpc1tjb25maXJtQnV0dG9uRWxlbWVudFN5bWJvbF0uc2V0T3B0aW9uKFwiYWN0aW9ucy5jbGlja1wiLCAoKSA9PiB7XG5cdFx0Y29uc3QgY2FsbGJhY2sgPSBnZXRBY3Rpb24uY2FsbCh0aGlzLCBcImNvbmZpcm1cIik7XG5cdFx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci1jb25maXJtXCIsIHt9KTtcblx0XHRjYWxsYmFjay5jYWxsKHRoaXMpO1xuXHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItY29uZmlybWVkXCIsIHt9KTtcblx0fSk7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1NlbGVjdH1cbiAqL1xuZnVuY3Rpb24gaW5pdENvbnRyb2xSZWZlcmVuY2VzKCkge1xuXHR0aGlzW2NvbmZpcm1CdXR0b25FbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09Y29uZmlybV1gLFxuXHQpO1xuXHR0aGlzW2NhbmNlbEJ1dHRvbkVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1jYW5jZWxdYCxcblx0KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuXG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250cm9sXCIgcGFydD1cImNvbnRyb2xcIj5cbiAgICAgICAgICAgIDxidXR0b24gZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJkaXNhYmxlZCBwYXRoOmRpc2FibGVkIHwgaWY6dHJ1ZSwgY2xhc3MgcGF0aDpjbGFzc2VzLmJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgcGFydD1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpsYWJlbHMuYnV0dG9uXCI+PC9idXR0b24+XG5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJwb3BwZXJcIiBwYXJ0PVwicG9wcGVyXCIgdGFiaW5kZXg9XCItMVwiIGNsYXNzPVwibW9uc3Rlci1jb2xvci1wcmltYXJ5LTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiYXJyb3dcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IHBhcnQ9XCJtZXNzYWdlXCIgY2xhc3M9XCJmbGV4XCIgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmxhYmVscy5tZXNzYWdlXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImRlY2lzaW9uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtb25zdGVyLW1lc3NhZ2Utc3RhdGUtYnV0dG9uIGV4cG9ydHBhcnRzPVwibW9uc3Rlci1zdGF0ZS1idXR0b246Y29uZmlybS1idXR0b24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sOmNvbmZpcm0tY29udHJvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbi1idXR0b246Y29uZmlybS1jb250cm9sLWJ1dHRvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbi1jb250cm9sOmNvbmZpcm0tYnV0dG9uLWNvbnRyb2wsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3BwZXI6Y29uZmlybS1wb3BwZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOmNvbmZpcm0tcG9wcGVyLW1lc3NhZ2UtbWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb246Y29uZmlybS1wb3BwZXItbWVzc2FnZS1pY29uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6Y29uZmlybS1wb3BwZXItbWVzc2FnZS10aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiZGF0YS1tb25zdGVyLWJ1dHRvbi1jbGFzcyBwYXRoOmNsYXNzZXMuY29uZmlybUJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiY29uZmlybVwiIHBhcnQ9XCJjb25maXJtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6bGFiZWxzLmNvbmZpcm1cIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvbW9uc3Rlci1tZXNzYWdlLXN0YXRlLWJ1dHRvbj5cblxuICAgICAgICAgICAgICAgICAgICA8bW9uc3Rlci1idXR0b24gZXhwb3J0cGFydHM9XCJidXR0b246Y2FuY2VsLWJ1dHRvbixjb250cm9sOmNhbmNlbC1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiZGF0YS1tb25zdGVyLWJ1dHRvbi1jbGFzcyBwYXRoOmNsYXNzZXMuY2FuY2VsQnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiY2FuY2VsXCIgcGFydD1cImNhbmNlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmxhYmVscy5jYW5jZWxcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvbW9uc3Rlci1idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgYDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KENvbmZpcm1CdXR0b24pO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IHBhcnNlRGF0YVVSTCB9IGZyb20gXCIuLi90eXBlcy9kYXRhdXJsLm1qc1wiO1xuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBQcm94eU9ic2VydmVyIH0gZnJvbSBcIi4uL3R5cGVzL3Byb3h5b2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZU9iamVjdCB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IFBhdGhmaW5kZXIgfSBmcm9tIFwiLi9wYXRoZmluZGVyLm1qc1wiO1xuXG5leHBvcnQgeyBEYXRhc291cmNlIH07XG5cbi8qKlxuICogVGhpcyBjYWxsYmFjayBjYW4gYmUgcGFzc2VkIHRvIGEgZGF0YXNvdXJjZSBhbmQgaXMgdXNlZCB0byBhZGFwdCBkYXRhIHN0cnVjdHVyZXMuXG4gKlxuICogQGNhbGxiYWNrIE1vbnN0ZXIuRGF0YS5EYXRhc291cmNlfmV4YW1wbGVDYWxsYmFja1xuICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAgS2V5XG4gKiBAc2VlIE1vbnN0ZXIuRGF0YS5EYXRhc291cmNlXG4gKi9cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjQuMFxuICovXG5jb25zdCBpbnRlcm5hbERhdGFTeW1ib2wgPSBTeW1ib2wuZm9yKFxuXHRcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL0BAZGF0YVwiLFxuKTtcblxuLyoqXG4gKiBUaGUgZGF0YXNvdXJjZSBjbGFzcyBpcyB0aGUgYmFzaXMgZm9yIGRlYWxpbmcgd2l0aCBkaWZmZXJlbnQgZGF0YSBzb3VyY2VzLlxuICogSXQgcHJvdmlkZXMgYSB1bmlmaWVkIGludGVyZmFjZSBmb3IgYWNjZXNzaW5nIGRhdGFcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS9kYXRhL2RhdGFzb3VyY2UubWpzXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjIyLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBUaGUgZGF0YXNvdXJjZSBjbGFzcyBlbmNhcHN1bGF0ZXMgdGhlIGFjY2VzcyB0byBkYXRhIG9iamVjdHMuXG4gKi9cbmNsYXNzIERhdGFzb3VyY2UgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqIGNyZWF0ZXMgYSBuZXcgZGF0YXNvdXJjZVxuXHQgKlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0gbmV3IFByb3h5T2JzZXJ2ZXIoe1xuXHRcdFx0b3B0aW9uczogZXh0ZW5kKHt9LCB0aGlzLmRlZmF1bHRzKSxcblx0XHR9KTtcblxuXHRcdHRoaXNbaW50ZXJuYWxEYXRhU3ltYm9sXSA9IG5ldyBQcm94eU9ic2VydmVyKHt9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBhdHRhY2ggYSBuZXcgb2JzZXJ2ZXJcblx0ICpcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybiB7RGF0YXNvdXJjZX1cblx0ICovXG5cdGF0dGFjaE9ic2VydmVyKG9ic2VydmVyKSB7XG5cdFx0dGhpc1tpbnRlcm5hbERhdGFTeW1ib2xdLmF0dGFjaE9ic2VydmVyKG9ic2VydmVyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBkZXRhY2ggYSBvYnNlcnZlclxuXHQgKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJuIHtEYXRhc291cmNlfVxuXHQgKi9cblx0ZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHR0aGlzW2ludGVybmFsRGF0YVN5bWJvbF0uZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRjb250YWluc09ic2VydmVyKG9ic2VydmVyKSB7XG5cdFx0cmV0dXJuIHRoaXNbaW50ZXJuYWxEYXRhU3ltYm9sXS5jb250YWluc09ic2VydmVyKG9ic2VydmVyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXJpdmVkIGNsYXNzZXMgY2FuIG92ZXJyaWRlIGFuZCBleHRlbmQgdGhpcyBtZXRob2QgYXMgZm9sbG93cy5cblx0ICpcblx0ICogYGBgXG5cdCAqIGdldCBkZWZhdWx0cygpIHtcblx0ICogICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdCAqICAgICAgICBteVZhbHVlOnRydWVcblx0ICogICAgfSk7XG5cdCAqIH1cblx0ICogYGBgXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBvcHRpb25cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHtEYXRhc291cmNlfVxuXHQgKi9cblx0c2V0T3B0aW9uKHBhdGgsIHZhbHVlKSB7XG5cdFx0bmV3IFBhdGhmaW5kZXIodGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpW1wib3B0aW9uc1wiXSkuc2V0VmlhKFxuXHRcdFx0cGF0aCxcblx0XHRcdHZhbHVlLFxuXHRcdCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd8b2JqZWN0fSBvcHRpb25zXG5cdCAqIEByZXR1cm4ge0RhdGFzb3VyY2V9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgb3B0aW9ucyBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQganNvbiBkZWZpbml0aW9uXG5cdCAqL1xuXHRzZXRPcHRpb25zKG9wdGlvbnMpIHtcblx0XHRpZiAoaXNTdHJpbmcob3B0aW9ucykpIHtcblx0XHRcdG9wdGlvbnMgPSBwYXJzZU9wdGlvbnNKU09OKG9wdGlvbnMpO1xuXHRcdH1cblx0XHRleHRlbmQoXG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRTdWJqZWN0KClbXCJvcHRpb25zXCJdLFxuXHRcdFx0dGhpcy5kZWZhdWx0cyxcblx0XHRcdG9wdGlvbnMsXG5cdFx0KTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIG5lc3RlZCBvcHRpb25zIGNhbiBiZSBzcGVjaWZpZWQgYnkgcGF0aCBgYS5iLmNgXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG5cdCAqIEBwYXJhbSB7Kn0gZGVmYXVsdFZhbHVlXG5cdCAqIEByZXR1cm4geyp9XG5cdCAqL1xuXHRnZXRPcHRpb24ocGF0aCwgZGVmYXVsdFZhbHVlKSB7XG5cdFx0bGV0IHZhbHVlO1xuXG5cdFx0dHJ5IHtcblx0XHRcdHZhbHVlID0gbmV3IFBhdGhmaW5kZXIoXG5cdFx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFJlYWxTdWJqZWN0KClbXCJvcHRpb25zXCJdLFxuXHRcdFx0KS5nZXRWaWEocGF0aCk7XG5cdFx0fSBjYXRjaCAoZSkge31cblxuXHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZGVmYXVsdFZhbHVlO1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhpcyBtZXRob2QgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBkZXJpdmVkIGNsYXNzZXMuXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRyZWFkKCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZGVyaXZlZCBjbGFzc2VzXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGlzIG1ldGhvZCBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGRlcml2ZWQgY2xhc3Nlcy5cblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdHdyaXRlKCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZGVyaXZlZCBjbGFzc2VzXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgcmVhbCBvYmplY3Rcblx0ICpcblx0ICogQHJldHVybiB7T2JqZWN0fEFycmF5fVxuXHQgKi9cblx0Z2V0KCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsRGF0YVN5bWJvbF0uZ2V0UmVhbFN1YmplY3QoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdHxBcnJheX0gZGF0YVxuXHQgKiBAcmV0dXJuIHtEYXRhc291cmNlfVxuXHQgKi9cblx0c2V0KGRhdGEpIHtcblx0XHR0aGlzW2ludGVybmFsRGF0YVN5bWJvbF0uc2V0U3ViamVjdChkYXRhKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlXCIpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBkYXRhXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhlIG9wdGlvbnMgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIGpzb24gZGVmaW5pdGlvblxuICovXG5mdW5jdGlvbiBwYXJzZU9wdGlvbnNKU09OKGRhdGEpIHtcblx0aWYgKGlzU3RyaW5nKGRhdGEpKSB7XG5cdFx0Ly8gdGhlIGNvbmZpZ3VyYXRpb24gY2FuIGJlIHNwZWNpZmllZCBhcyBhIGRhdGEgdXJsLlxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBkYXRhVXJsID0gcGFyc2VEYXRhVVJMKGRhdGEpO1xuXHRcdFx0ZGF0YSA9IGRhdGFVcmwuY29udGVudDtcblx0XHR9IGNhdGNoIChlKSB7fVxuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IG9iaiA9IEpTT04ucGFyc2UoZGF0YSk7XG5cdFx0XHR2YWxpZGF0ZU9iamVjdChvYmopO1xuXHRcdFx0cmV0dXJuIG9iajtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdGB0aGUgb3B0aW9ucyBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQganNvbiBkZWZpbml0aW9uIChhY3R1YWw6ICR7ZGF0YX0pLmAsXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7fTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBBVFRSSUJVVEVfUFJFRklYIH0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbi8qKlxuICogQHNpbmNlIDEuMC4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0sgPSBcImJsb2NrXCI7XG5cbi8qKlxuICogVGhpcyBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1kYXRhc291cmNlYCBjYW4gYmUgdXNlZCB0byBwYXNzIGEgZGF0YXNvdXJjZS5cbiAqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfREFUQVNPVVJDRSA9IGAke0FUVFJJQlVURV9QUkVGSVh9ZGF0YXNvdXJjZWA7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0RBVEFTT1VSQ0VfU0VMRUNUT1IgPSBgJHtBVFRSSUJVVEVfREFUQVNPVVJDRX0tc2VsZWN0b3JgO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9EQVRBVEFCTEVfR1JJRF9URU1QTEFURSA9IGAke0FUVFJJQlVURV9QUkVGSVh9Z3JpZC10ZW1wbGF0ZWA7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0RBVEFUQUJMRV9IRUFEID0gYCR7QVRUUklCVVRFX1BSRUZJWH1oZWFkYDtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfREFUQVRBQkxFX0FMSUdOID0gYCR7QVRUUklCVVRFX1BSRUZJWH1hbGlnbmA7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0RBVEFUQUJMRV9TT1JUQUJMRSA9IGAke0FUVFJJQlVURV9QUkVGSVh9c29ydGFibGVgO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9EQVRBVEFCTEVfSU5ERVggPSBgJHtBVFRSSUJVVEVfUFJFRklYfWluZGV4YDtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfREFUQVRBQkxFX01PREUgPSBgJHtBVFRSSUJVVEVfUFJFRklYfW1vZGVgO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9EQVRBVEFCTEVfUkVTUE9OU0lWRV9CUkVBS1BPSU5UID0gYCR7QVRUUklCVVRFX1BSRUZJWH1yZXNwb25zaXZlLWJyZWFrcG9pbnRgO1xuXG4vKipcbiAqIFRoaXMgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItZGF0YXNvdXJjZS1hcmd1bWVudHNgIGNhbiBiZSB1c2VkIHRvIHBhc3MgYXJndW1lbnRzLlxuICpcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9EQVRBU09VUkNFX0FSR1VNRU5UUyA9IGAke0FUVFJJQlVURV9EQVRBU09VUkNFfS1hcmd1bWVudHNgO1xuXG4vKipcbiAqIENvbHVtbiBpcyBub3QgaGlkZWFibGUgYW5kIHZpc2libGVcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0RBVEFUQUJMRV9NT0RFX0ZJWEVEID0gXCJmaXhlZFwiO1xuXG4vKipcbiAqIENvbHVtbiBpcyBoaWRkZW5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0RBVEFUQUJMRV9NT0RFX0hJRERFTiA9IFwiaGlkZGVuXCI7XG5cbi8qKlxuICogQ29sdW1uIGlzIHZpc2libGVcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0RBVEFUQUJMRV9NT0RFX1ZJU0lCTEUgPSBcInZpc2libGVcIjtcblxuZXhwb3J0IHtcblx0QVRUUklCVVRFX0RBVEFTT1VSQ0UsXG5cdEFUVFJJQlVURV9EQVRBU09VUkNFX1NFTEVDVE9SLFxuXHRBVFRSSUJVVEVfREFUQVNPVVJDRV9BUkdVTUVOVFMsXG5cdEFUVFJJQlVURV9EQVRBVEFCTEVfR1JJRF9URU1QTEFURSxcblx0QVRUUklCVVRFX0RBVEFUQUJMRV9IRUFELFxuXHRBVFRSSUJVVEVfREFUQVRBQkxFX1NPUlRBQkxFLFxuXHRBVFRSSUJVVEVfREFUQVRBQkxFX01PREUsXG5cdEFUVFJJQlVURV9EQVRBVEFCTEVfSU5ERVgsXG5cdEFUVFJJQlVURV9EQVRBVEFCTEVfQUxJR04sXG5cdEFUVFJJQlVURV9EQVRBVEFCTEVfTU9ERV9GSVhFRCxcblx0QVRUUklCVVRFX0RBVEFUQUJMRV9SRVNQT05TSVZFX0JSRUFLUE9JTlQsXG5cdEFUVFJJQlVURV9EQVRBVEFCTEVfTU9ERV9WSVNJQkxFLFxuXHRBVFRSSUJVVEVfREFUQVRBQkxFX01PREVfSElEREVOLFxuXHRTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0ssXG59O1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7XG5cdEN1c3RvbUVsZW1lbnQsXG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBEYXRhc291cmNlIGFzIERhdGFzb3VyY2VCYXNlIH0gZnJvbSBcIi4uLy4uL2RhdGEvZGF0YXNvdXJjZS5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgRGF0YXNvdXJjZSwgZGF0YVNvdXJjZVN5bWJvbCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBkYXRhU291cmNlU3ltYm9sID0gU3ltYm9sLmZvcihcblx0XCJAc2NodWthaS9tb25zdGVyL2NvbXBvbmVudHMvZGF0YXNvdXJjZUBAZGF0YXNvdXJjZVwiLFxuKTtcblxuLyoqXG4gKiBUaGUgRGF0YXNvdXJjZSBjb21wb25lbnQgaXMgYSBiYXNpYyBjbGFzcyBmb3IgdGhlIGRhdGF0YWJsZSBjb21wb25lbnQuXG4gKlxuICogPGltZyBzcmM9XCIuL2ltYWdlcy9kYXRhc291cmNlLnBuZ1wiPlxuICpcbiAqIERlcGVuZGVuY2llczogdGhlIHN5c3RlbSB1c2VzIGZ1bmN0aW9ucyBvZiB0aGUgW21vbnN0ZXJqc10oaHR0cHM6Ly9tb25zdGVyanMub3JnLykgbGlicmFyeVxuICpcbiAqIEBzdGFydHVtbCBkYXRhc291cmNlLnBuZ1xuICogc2tpbnBhcmFtIG1vbm9jaHJvbWUgdHJ1ZVxuICogc2tpbnBhcmFtIHNoYWRvd2luZyBmYWxzZVxuICogSFRNTEVsZW1lbnQgPHwtLSBDdXN0b21FbGVtZW50XG4gKiBDdXN0b21FbGVtZW50IDx8LS0gRGF0YXNvdXJjZVxuICogQGVuZHVtbFxuICpcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIGFic3RyYWN0IGRhdGFzb3VyY2VcbiAqL1xuY2xhc3MgRGF0YXNvdXJjZSBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuXHQvKipcblx0ICogdGhlIGNvbnN0cnVjdG9yIG9mIHRoZSBjbGFzc1xuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzW2RhdGFTb3VyY2VTeW1ib2xdID0gbmV3IERhdGFzb3VyY2VCYXNlKCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9kYXRhc291cmNlQEBpbnN0YW5jZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBIVE1MIHRhZywgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHt9KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5Gb3JtfVxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGRhdGEsIHdpdGhvdXQgcHJveHlcblx0ICogQHJldHVybiB7T2JqZWN0fVxuXHQgKi9cblx0Z2V0IGRhdGEoKSB7XG5cdFx0cmV0dXJuIHRoaXNbZGF0YVNvdXJjZVN5bWJvbF0uZ2V0KCk7XG5cdH1cblxuXHQvKipcblx0ICogc2V0IHRoZSBkYXRhXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhXG5cdCAqL1xuXHRzZXQgZGF0YShkYXRhKSB7XG5cdFx0dGhpc1tkYXRhU291cmNlU3ltYm9sXS5zZXQoZGF0YSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBkYXRhc291cmNlXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRGF0YS5EYXRhc291cmNlfVxuXHQgKi9cblx0Z2V0IGRhdGFzb3VyY2UoKSB7XG5cdFx0cmV0dXJuIHRoaXNbZGF0YVNvdXJjZVN5bWJvbF07XG5cdH1cblxuXHR3cml0ZSgpIHtcblx0XHR0aGlzW2RhdGFTb3VyY2VTeW1ib2xdLndyaXRlKCk7XG5cdH1cblxuXHRyZWFkKCkge1xuXHRcdHRoaXNbZGF0YVNvdXJjZVN5bWJvbF0ucmVhZCgpO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCAyMDI0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqL1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgRGF0YXNldFN0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IERhdGFzZXRTdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcblx0RGF0YXNldFN0eWxlU2hlZXQuaW5zZXJ0UnVsZShcblx0XHRgXG5AbGF5ZXIgZGF0YXNldCB7IFxuOndoZXJlKGh0bWwpe2xpbmUtaGVpZ2h0OjEuMTU7LXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OjEwMCU7LW1vei10ZXh0LXNpemUtYWRqdXN0OjEwMCU7dGV4dC1zaXplLWFkanVzdDoxMDAlfTp3aGVyZShoMSl7Zm9udC1zaXplOjJlbTttYXJnaW4tYmxvY2stZW5kOi42N2VtO21hcmdpbi1ibG9jay1zdGFydDouNjdlbX06d2hlcmUoZGwsb2wsdWwpIDp3aGVyZShkbCxvbCx1bCl7bWFyZ2luLWJsb2NrLWVuZDowO21hcmdpbi1ibG9jay1zdGFydDowfTp3aGVyZShocil7Ym94LXNpemluZzpjb250ZW50LWJveDtjb2xvcjppbmhlcml0O2hlaWdodDowfTp3aGVyZShhYmJyW3RpdGxlXSl7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTstd2Via2l0LXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkfTp3aGVyZShiLHN0cm9uZyl7Zm9udC13ZWlnaHQ6Ym9sZGVyfTp3aGVyZShjb2RlLGtiZCxwcmUsc2FtcCl7Zm9udC1mYW1pbHk6bW9ub3NwYWNlLG1vbm9zcGFjZTtmb250LXNpemU6MWVtfTp3aGVyZShzbWFsbCl7Zm9udC1zaXplOjgwJX06d2hlcmUodGFibGUpe2JvcmRlci1jb2xvcjpjdXJyZW50Q29sb3I7dGV4dC1pbmRlbnQ6MH06d2hlcmUoYnV0dG9uLGlucHV0LHNlbGVjdCl7bWFyZ2luOjB9OndoZXJlKGJ1dHRvbil7dGV4dC10cmFuc2Zvcm06bm9uZX06d2hlcmUoYnV0dG9uLGlucHV0OmlzKFt0eXBlPWJ1dHRvbiBpXSxbdHlwZT1yZXNldCBpXSxbdHlwZT1zdWJtaXQgaV0pKXstd2Via2l0LWFwcGVhcmFuY2U6YnV0dG9ufTp3aGVyZShwcm9ncmVzcyl7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9OndoZXJlKHNlbGVjdCl7dGV4dC10cmFuc2Zvcm06bm9uZX06d2hlcmUodGV4dGFyZWEpe21hcmdpbjowfTp3aGVyZShpbnB1dFt0eXBlPXNlYXJjaCBpXSl7LXdlYmtpdC1hcHBlYXJhbmNlOnRleHRmaWVsZDtvdXRsaW5lLW9mZnNldDotMnB4fTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiw6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b257aGVpZ2h0OmF1dG99Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOmluaGVyaXQ7b3BhY2l0eTouNTR9Ojotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lfTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbjtmb250OmluaGVyaXR9OndoZXJlKGJ1dHRvbixpbnB1dDppcyhbdHlwZT1idXR0b24gaV0sW3R5cGU9Y29sb3IgaV0sW3R5cGU9cmVzZXQgaV0sW3R5cGU9c3VibWl0IGldKSk6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyLXN0eWxlOm5vbmU7cGFkZGluZzowfTp3aGVyZShidXR0b24saW5wdXQ6aXMoW3R5cGU9YnV0dG9uIGldLFt0eXBlPWNvbG9yIGldLFt0eXBlPXJlc2V0IGldLFt0eXBlPXN1Ym1pdCBpXSkpOjotbW96LWZvY3VzcmluZ3tvdXRsaW5lOjFweCBkb3R0ZWQgQnV0dG9uVGV4dH06d2hlcmUoOi1tb3otdWktaW52YWxpZCl7Ym94LXNoYWRvdzpub25lfTp3aGVyZShkaWFsb2cpe2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6c29saWQ7Y29sb3I6IzAwMDtoZWlnaHQ6LW1vei1maXQtY29udGVudDtoZWlnaHQ6Zml0LWNvbnRlbnQ7bGVmdDowO21hcmdpbjphdXRvO3BhZGRpbmc6MWVtO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7d2lkdGg6LW1vei1maXQtY29udGVudDt3aWR0aDpmaXQtY29udGVudH06d2hlcmUoZGlhbG9nOm5vdChbb3Blbl0pKXtkaXNwbGF5Om5vbmV9OndoZXJlKHN1bW1hcnkpe2Rpc3BsYXk6bGlzdC1pdGVtfWh0bWx7aGVpZ2h0OjEwMCV9Ym9keSxodG1se21pbi1oZWlnaHQ6Y2FsYygxMDB2aCAtIDQwcHgpfWJvZHl7Ym94LXNpemluZzpib3JkZXItYm94O21hcmdpbjowO3BhZGRpbmc6MDt3b3JkLWJyZWFrOmJyZWFrLXdvcmR9LmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmlubGluZXtkaXNwbGF5OmlubGluZX0uaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5ncmlke2Rpc3BsYXk6Z3JpZH0uaW5saW5lLWdyaWR7ZGlzcGxheTppbmxpbmUtZ3JpZH0uZmxleHtkaXNwbGF5OmZsZXh9LmlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXh9LmhpZGRlbiwuaGlkZSwubm9uZXtkaXNwbGF5Om5vbmV9LnZpc2libGV7dmlzaWJpbGl0eTp2aXNpYmxlfS5pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW59Lm1vbnN0ZXItYnV0dG9uLXByaW1hcnksYnV0dG9ue2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYnV0dG9uLXNlY29uZGFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1idXR0b24tc2Vjb25kYXJ5LC5tb25zdGVyLWJ1dHRvbi10ZXJ0aWFyeXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofS5tb25zdGVyLWJ1dHRvbi10ZXJ0aWFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci1idXR0b24tb3V0bGluZS1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXByaW1hcnksLm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtc2Vjb25kYXJ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtc2Vjb25kYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXRlcnRpYXJ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCk7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9YnV0dG9uOmFjdGl2ZSxidXR0b246aG92ZXJ7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMik7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC44cyxjb2xvciAuMjVzIC4wODMzMzMzMzMzc31idXR0b246YWN0aXZle3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW91dGxpbmUpfS5tb25zdGVyLWJ1dHRvbi1iYXIsLm1vbnN0ZXItYnV0dG9uLWdyb3Vwe2FsaWduLWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOnN0cmV0Y2g7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LXdyYXA6bm93cmFwO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5tb25zdGVyLWJ1dHRvbi1ncm91cHtib3gtc2l6aW5nOmJvcmRlci1ib3g7Z2FwOjA7bWFyZ2luOjFyZW0gMH0ubW9uc3Rlci1idXR0b24tZ3JvdXA+Om5vdCg6bGFzdC1jaGlsZCl7bWFyZ2luLXJpZ2h0OmNhbGModmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpKi0xKX0ubW9uc3Rlci1idXR0b24tZ3JvdXAgOmhvdmVye2JveC1zaGFkb3c6bm9uZX1idXR0b246Zm9jdXN7b3V0bGluZToxcHggZGFzaGVkIHZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQpO291dGxpbmUtb2Zmc2V0OjJweDt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lKX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmxpZ2h0KXtidXR0b246Zm9jdXN7b3V0bGluZToxcHggZGFzaGVkIHZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTMpO291dGxpbmUtb2Zmc2V0OjJweDt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lKX19W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdXRsaW5lOm5vbmU7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0uZmxleHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd306aG9zdHtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpibG9ja306YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItZm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsXFxcIlF1aWNrc2FuZFxcXCIsXFxcIlNlZ29lIFVJXFxcIixcXFwiUm9ib3RvXFxcIixcXFwiT3h5Z2VuXFxcIixcXFwiVWJ1bnR1XFxcIixcXFwiQ2FudGFyZWxsXFxcIixcXFwiRmlyYSBTYW5zXFxcIixcXFwiRHJvaWQgU2Fuc1xcXCIsXFxcIkhlbHZldGljYSBOZXVlXFxcIixBcmlhbCxzYW5zLXNlcmlmLFxcXCJBcHBsZSBDb2xvciBFbW9qaVxcXCIsXFxcIlNlZ29lIFVJIEVtb2ppXFxcIixcXFwiU2Vnb2UgVUkgU3ltYm9sXFxcIjstLW1vbnN0ZXItZm9udC1mYW1pbHktbW9ub3NwYWNlOlxcXCJDb25zb2xhc1xcXCIsXFxcIkNvdXJpZXIgTmV3XFxcIixcXFwiUm9ib3RvIE1vbm9cXFwiLFxcXCJTb3VyY2UgQ29kZSBQcm9cXFwiLFxcXCJGaXJhIE1vbm9cXFwiLG1vbm9zcGFjZTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMSk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTYpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0yKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNil9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTYpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0yKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNCk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTYpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMyk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi01KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMik7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTQpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0zKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTQpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNik7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMik7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS01KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTQpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS01KTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMyl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNil9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy02KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNil9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTE6IzgzM2FiNDstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMjojZmQxZDFkOy0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0zOiNmY2IwNDU7LS1tb25zdGVyLWJveC1zaGFkb3ctMTpub25lOy0tbW9uc3Rlci1ib3gtc2hhZG93LTI6LTFweCAxcHggMTBweCAxcHggaHNsYSgwLDAlLDc2JSwuNjEpOy0tbW9uc3Rlci10ZXh0LXNoYWRvdzpub25lOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtMSk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC02KTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTYpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWhvdmVyLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtMik7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXdpZHRoOjJweDstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItc3R5bGU6c29saWQ7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXJhZGl1czowOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNSk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWhvdmVyLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLXRoZW1lLW9uLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLXRoZW1lLW9uLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNSk7LS1tb25zdGVyLXRoZW1lLW9mZi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLW9mZi1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItdGhlbWUtb24tY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci10aGVtZS1vbi1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLW9mZi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLW9mZi1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1ib3JkZXItc3R5bGU6c29saWQ7LS1tb25zdGVyLWJvcmRlci13aWR0aDozcHg7LS1tb25zdGVyLWJvcmRlci1yYWRpdXM6MDstLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2U6LTRweDstLW1vbnN0ZXItei1pbmRleC1kZWZhdWx0OjA7LS1tb25zdGVyLXotaW5kZXgtb3V0bGluZToxMDstLW1vbnN0ZXItei1pbmRleC1kcm9wZG93bjoyMDA7LS1tb25zdGVyLXotaW5kZXgtZHJvcGRvd24tb3ZlcmxheToyMTA7LS1tb25zdGVyLXotaW5kZXgtc3RpY2t5OjMwMDstLW1vbnN0ZXItei1pbmRleC1zdGlja3ktb3ZlcmxheTozMTA7LS1tb25zdGVyLXotaW5kZXgtZml4ZWQ6NDAwOy0tbW9uc3Rlci16LWluZGV4LWZpeGVkLW92ZXJsYXk6NDEwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLWJhY2tkcm9wOjUwMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1iYWNrZHJvcC1vdmVybGF5OjUxMDstLW1vbnN0ZXItei1pbmRleC1vZmZjYW52YXM6NjAwOy0tbW9uc3Rlci16LWluZGV4LW9mZmNhbnZhcy1vdmVybGF5OjYxMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbDo3MDA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtb3ZlcmxheTo3MTA7LS1tb25zdGVyLXotaW5kZXgtcG9wb3Zlcjo4MDA7LS1tb25zdGVyLXotaW5kZXgtcG9wb3Zlci1vdmVybGF5OjgxMDstLW1vbnN0ZXItei1pbmRleC10b29sdGlwOjgwMDstLW1vbnN0ZXItei1pbmRleC10b29sdGlwLW92ZXJsYXk6OTEwOy0tbW9uc3Rlci1zcGFjZS0wOjA7LS1tb25zdGVyLXNwYWNlLTE6MnB4Oy0tbW9uc3Rlci1zcGFjZS0yOjRweDstLW1vbnN0ZXItc3BhY2UtMzo2cHg7LS1tb25zdGVyLXNwYWNlLTQ6MTBweDstLW1vbnN0ZXItc3BhY2UtNToxNnB4Oy0tbW9uc3Rlci1zcGFjZS02OjI2cHg7LS1tb25zdGVyLXNwYWNlLTc6NDJweDstLW1vbnN0ZXItYnJlYWtwb2ludC0wOjQ4MHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTQ6NDgwcHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtNzo3NjhweDstLW1vbnN0ZXItYnJlYWtwb2ludC05Ojk5MnB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTEyOjEyMDBweDstLW1vbnN0ZXItZHJhZ2dlci13aWR0aDoycHg7LS1tb25zdGVyLWRyYWdnZXItaGFuZGxlLXdpZHRoOjRweDstLW1vbnN0ZXItZHJhZ2dlci1oYW5kbGUtaGVpZ2h0OjUwcHh9c3Bhbi5tb25zdGVyLWZ4LXJpcHBsZXthbmltYXRpb246bW9uc3Rlci1meC1yaXBwbGUgLjZzIGxpbmVhcjtiYWNrZ3JvdW5kLWNvbG9yOmhzbGEoMCwwJSwxMDAlLC43KTtib3JkZXItcmFkaXVzOjUwJTtwb3NpdGlvbjphYnNvbHV0ZTt0cmFuc2Zvcm06c2NhbGUoMCl9QGtleWZyYW1lcyBtb25zdGVyLWZ4LXJpcHBsZXt0b3tvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKDQpfX0ubW9uc3Rlci1iYWRnZS1wcmltYXJ5e3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS1wcmltYXJ5LC5tb25zdGVyLWJhZGdlLXByaW1hcnktcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2UtcHJpbWFyeS1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLXNlY29uZGFyeXtwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2Utc2Vjb25kYXJ5LC5tb25zdGVyLWJhZGdlLXNlY29uZGFyeS1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2Utc2Vjb25kYXJ5LXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2UtdGVydGlhcnl7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLXRlcnRpYXJ5LC5tb25zdGVyLWJhZGdlLXRlcnRpYXJ5LXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2UtdGVydGlhcnktcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS1kZXN0cnVjdGl2ZXtwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2UtZGVzdHJ1Y3RpdmUsLm1vbnN0ZXItYmFkZ2UtZGVzdHJ1Y3RpdmUtcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMSk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1kZXN0cnVjdGl2ZS1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLXN1Y2Nlc3N7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLXN1Y2Nlc3MsLm1vbnN0ZXItYmFkZ2Utc3VjY2Vzcy1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTEpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1zdWNjZXNzLXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2Utd2FybmluZ3twYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2Utd2FybmluZywubW9uc3Rlci1iYWRnZS13YXJuaW5nLXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMSk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTEpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLXdhcm5pbmctcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS1lcnJvcntwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2UtZXJyb3IsLm1vbnN0ZXItYmFkZ2UtZXJyb3ItcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMSk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0xKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1lcnJvci1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0xLWluZm86YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTEtaW5mbzpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMS1pbmZvOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWljb24tcHJpbWFyeS0xLWluZm86YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTEtaW5mbzpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0xLWluZm86YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2JpIGJpLWluZm8tY2lyY2xlJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J204LjkzIDYuNTg4LTIuMjkuMjg3LS4wODIuMzguNDUuMDgzYy4yOTQuMDcuMzUyLjE3Ni4yODguNDY5bC0uNzM4IDMuNDY4Yy0uMTk0Ljg5Ny4xMDUgMS4zMTkuODA4IDEuMzE5LjU0NSAwIDEuMTc4LS4yNTIgMS40NjUtLjU5OGwuMDg4LS40MTZjLS4yLjE3Ni0uNDkyLjI0Ni0uNjg2LjI0Ni0uMjc1IDAtLjM3NS0uMTkzLS4zMDQtLjUzM3pNOSA0LjVhMSAxIDAgMSAxLTIgMCAxIDEgMCAwIDEgMiAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyBjbGFzcz0nYmkgYmktaW5mby1jaXJjbGUnIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nbTguOTMgNi41ODgtMi4yOS4yODctLjA4Mi4zOC40NS4wODNjLjI5NC4wNy4zNTIuMTc2LjI4OC40NjlsLS43MzggMy40NjhjLS4xOTQuODk3LjEwNSAxLjMxOS44MDggMS4zMTkuNTQ1IDAgMS4xNzgtLjI1MiAxLjQ2NS0uNTk4bC4wODgtLjQxNmMtLjIuMTc2LS40OTIuMjQ2LS42ODYuMjQ2LS4yNzUgMC0uMzc1LS4xOTMtLjMwNC0uNTMzek05IDQuNWExIDEgMCAxIDEtMiAwIDEgMSAwIDAgMSAyIDAnLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMi1pbmZvOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0yLWluZm86YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTItaW5mbzpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMi1pbmZvOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0yLWluZm86YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMi1pbmZvOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIGNsYXNzPSdiaSBiaS1pbmZvLWNpcmNsZScgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdtOC45MyA2LjU4OC0yLjI5LjI4Ny0uMDgyLjM4LjQ1LjA4M2MuMjk0LjA3LjM1Mi4xNzYuMjg4LjQ2OWwtLjczOCAzLjQ2OGMtLjE5NC44OTcuMTA1IDEuMzE5LjgwOCAxLjMxOS41NDUgMCAxLjE3OC0uMjUyIDEuNDY1LS41OThsLjA4OC0uNDE2Yy0uMi4xNzYtLjQ5Mi4yNDYtLjY4Ni4yNDYtLjI3NSAwLS4zNzUtLjE5My0uMzA0LS41MzN6TTkgNC41YTEgMSAwIDEgMS0yIDAgMSAxIDAgMCAxIDIgMCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2JpIGJpLWluZm8tY2lyY2xlJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J204LjkzIDYuNTg4LTIuMjkuMjg3LS4wODIuMzguNDUuMDgzYy4yOTQuMDcuMzUyLjE3Ni4yODguNDY5bC0uNzM4IDMuNDY4Yy0uMTk0Ljg5Ny4xMDUgMS4zMTkuODA4IDEuMzE5LjU0NSAwIDEuMTc4LS4yNTIgMS40NjUtLjU5OGwuMDg4LS40MTZjLS4yLjE3Ni0uNDkyLjI0Ni0uNjg2LjI0Ni0uMjc1IDAtLjM3NS0uMTkzLS4zMDQtLjUzM3pNOSA0LjVhMSAxIDAgMSAxLTIgMCAxIDEgMCAwIDEgMiAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTMtaW5mbzpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWljb24tdGVydGlhcnktMy1pbmZvOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS0zLWluZm86YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTMtaW5mbzpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMy1pbmZvOmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTMtaW5mbzpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyBjbGFzcz0nYmkgYmktaW5mby1jaXJjbGUnIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nbTguOTMgNi41ODgtMi4yOS4yODctLjA4Mi4zOC40NS4wODNjLjI5NC4wNy4zNTIuMTc2LjI4OC40NjlsLS43MzggMy40NjhjLS4xOTQuODk3LjEwNSAxLjMxOS44MDggMS4zMTkuNTQ1IDAgMS4xNzgtLjI1MiAxLjQ2NS0uNTk4bC4wODgtLjQxNmMtLjIuMTc2LS40OTIuMjQ2LS42ODYuMjQ2LS4yNzUgMC0uMzc1LS4xOTMtLjMwNC0uNTMzek05IDQuNWExIDEgMCAxIDEtMiAwIDEgMSAwIDAgMSAyIDAnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIGNsYXNzPSdiaSBiaS1pbmZvLWNpcmNsZScgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdtOC45MyA2LjU4OC0yLjI5LjI4Ny0uMDgyLjM4LjQ1LjA4M2MuMjk0LjA3LjM1Mi4xNzYuMjg4LjQ2OWwtLjczOCAzLjQ2OGMtLjE5NC44OTcuMTA1IDEuMzE5LjgwOCAxLjMxOS41NDUgMCAxLjE3OC0uMjUyIDEuNDY1LS41OThsLjA4OC0uNDE2Yy0uMi4xNzYtLjQ5Mi4yNDYtLjY4Ni4yNDYtLjI3NSAwLS4zNzUtLjE5My0uMzA0LS41MzN6TTkgNC41YTEgMSAwIDEgMS0yIDAgMSAxIDAgMCAxIDIgMCcvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS00LWluZm86YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTQtaW5mbzpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktNC1pbmZvOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWljb24tcHJpbWFyeS00LWluZm86YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTQtaW5mbzpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS00LWluZm86YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2JpIGJpLWluZm8tY2lyY2xlJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J204LjkzIDYuNTg4LTIuMjkuMjg3LS4wODIuMzguNDUuMDgzYy4yOTQuMDcuMzUyLjE3Ni4yODguNDY5bC0uNzM4IDMuNDY4Yy0uMTk0Ljg5Ny4xMDUgMS4zMTkuODA4IDEuMzE5LjU0NSAwIDEuMTc4LS4yNTIgMS40NjUtLjU5OGwuMDg4LS40MTZjLS4yLjE3Ni0uNDkyLjI0Ni0uNjg2LjI0Ni0uMjc1IDAtLjM3NS0uMTkzLS4zMDQtLjUzM3pNOSA0LjVhMSAxIDAgMSAxLTIgMCAxIDEgMCAwIDEgMiAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyBjbGFzcz0nYmkgYmktaW5mby1jaXJjbGUnIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nbTguOTMgNi41ODgtMi4yOS4yODctLjA4Mi4zOC40NS4wODNjLjI5NC4wNy4zNTIuMTc2LjI4OC40NjlsLS43MzggMy40NjhjLS4xOTQuODk3LjEwNSAxLjMxOS44MDggMS4zMTkuNTQ1IDAgMS4xNzgtLjI1MiAxLjQ2NS0uNTk4bC4wODgtLjQxNmMtLjIuMTc2LS40OTIuMjQ2LS42ODYuMjQ2LS4yNzUgMC0uMzc1LS4xOTMtLjMwNC0uNTMzek05IDQuNWExIDEgMCAxIDEtMiAwIDEgMSAwIDAgMSAyIDAnLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMS1vbjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWljb24tdGVydGlhcnktMS1vbjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMS1vbjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMS1vbjpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMS1vbjpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0xLW9uOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIGNsYXNzPSdiaSBiaS10b2dnbGUtb24nIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J001IDNhNSA1IDAgMCAwIDAgMTBoNmE1IDUgMCAwIDAgMC0xMHptNiA5YTQgNCAwIDEgMSAwLTggNCA0IDAgMCAxIDAgOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2JpIGJpLXRvZ2dsZS1vbicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTUgM2E1IDUgMCAwIDAgMCAxMGg2YTUgNSAwIDAgMCAwLTEwem02IDlhNCA0IDAgMSAxIDAtOCA0IDQgMCAwIDEgMCA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTItb246YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTItb246YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTItb246YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTItb246YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTItb246YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMi1vbjpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyBjbGFzcz0nYmkgYmktdG9nZ2xlLW9uJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNNSAzYTUgNSAwIDAgMCAwIDEwaDZhNSA1IDAgMCAwIDAtMTB6bTYgOWE0IDQgMCAxIDEgMC04IDQgNCAwIDAgMSAwIDgnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIGNsYXNzPSdiaSBiaS10b2dnbGUtb24nIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J001IDNhNSA1IDAgMCAwIDAgMTBoNmE1IDUgMCAwIDAgMC0xMHptNiA5YTQgNCAwIDEgMSAwLTggNCA0IDAgMCAxIDAgOCcvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0zLW9uOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0zLW9uOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS0zLW9uOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWljb24tcHJpbWFyeS0zLW9uOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0zLW9uOmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTMtb246YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2JpIGJpLXRvZ2dsZS1vbicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTUgM2E1IDUgMCAwIDAgMCAxMGg2YTUgNSAwIDAgMCAwLTEwem02IDlhNCA0IDAgMSAxIDAtOCA0IDQgMCAwIDEgMCA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyBjbGFzcz0nYmkgYmktdG9nZ2xlLW9uJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNNSAzYTUgNSAwIDAgMCAwIDEwaDZhNSA1IDAgMCAwIDAtMTB6bTYgOWE0IDQgMCAxIDEgMC04IDQgNCAwIDAgMSAwIDgnLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktNC1vbjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWljb24tdGVydGlhcnktNC1vbjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktNC1vbjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1pY29uLXByaW1hcnktNC1vbjpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktNC1vbjpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS00LW9uOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIGNsYXNzPSdiaSBiaS10b2dnbGUtb24nIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J001IDNhNSA1IDAgMCAwIDAgMTBoNmE1IDUgMCAwIDAgMC0xMHptNiA5YTQgNCAwIDEgMSAwLTggNCA0IDAgMCAxIDAgOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2JpIGJpLXRvZ2dsZS1vbicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTUgM2E1IDUgMCAwIDAgMCAxMGg2YTUgNSAwIDAgMCAwLTEwem02IDlhNCA0IDAgMSAxIDAtOCA0IDQgMCAwIDEgMCA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTEtb2ZmOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0xLW9mZjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMS1vZmY6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTEtb2ZmOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0xLW9mZjpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0xLW9mZjpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNMTEgNGE0IDQgMCAwIDEgMCA4SDhhNSA1IDAgMCAwIDItNCA1IDUgMCAwIDAtMi00em0tNiA4YTQgNCAwIDEgMSAwLTggNCA0IDAgMCAxIDAgOE0wIDhhNSA1IDAgMCAwIDUgNWg2YTUgNSAwIDAgMCAwLTEwSDVhNSA1IDAgMCAwLTUgNScvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTExIDRhNCA0IDAgMCAxIDAgOEg4YTUgNSAwIDAgMCAyLTQgNSA1IDAgMCAwLTItNHptLTYgOGE0IDQgMCAxIDEgMC04IDQgNCAwIDAgMSAwIDhNMCA4YTUgNSAwIDAgMCA1IDVoNmE1IDUgMCAwIDAgMC0xMEg1YTUgNSAwIDAgMC01IDUnLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMi1vZmY6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTItb2ZmOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS0yLW9mZjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMi1vZmY6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTItb2ZmOmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTItb2ZmOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J00xMSA0YTQgNCAwIDAgMSAwIDhIOGE1IDUgMCAwIDAgMi00IDUgNSAwIDAgMC0yLTR6bS02IDhhNCA0IDAgMSAxIDAtOCA0IDQgMCAwIDEgMCA4TTAgOGE1IDUgMCAwIDAgNSA1aDZhNSA1IDAgMCAwIDAtMTBINWE1IDUgMCAwIDAtNSA1Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNMTEgNGE0IDQgMCAwIDEgMCA4SDhhNSA1IDAgMCAwIDItNCA1IDUgMCAwIDAtMi00em0tNiA4YTQgNCAwIDEgMSAwLTggNCA0IDAgMCAxIDAgOE0wIDhhNSA1IDAgMCAwIDUgNWg2YTUgNSAwIDAgMCAwLTEwSDVhNSA1IDAgMCAwLTUgNScvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0zLW9mZjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWljb24tdGVydGlhcnktMy1vZmY6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTMtb2ZmOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWljb24tcHJpbWFyeS0zLW9mZjpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMy1vZmY6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMy1vZmY6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTExIDRhNCA0IDAgMCAxIDAgOEg4YTUgNSAwIDAgMCAyLTQgNSA1IDAgMCAwLTItNHptLTYgOGE0IDQgMCAxIDEgMC04IDQgNCAwIDAgMSAwIDhNMCA4YTUgNSAwIDAgMCA1IDVoNmE1IDUgMCAwIDAgMC0xMEg1YTUgNSAwIDAgMC01IDUnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J00xMSA0YTQgNCAwIDAgMSAwIDhIOGE1IDUgMCAwIDAgMi00IDUgNSAwIDAgMC0yLTR6bS02IDhhNCA0IDAgMSAxIDAtOCA0IDQgMCAwIDEgMCA4TTAgOGE1IDUgMCAwIDAgNSA1aDZhNSA1IDAgMCAwIDAtMTBINWE1IDUgMCAwIDAtNSA1Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTQtb2ZmOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS00LW9mZjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktNC1vZmY6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTQtb2ZmOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS00LW9mZjpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS00LW9mZjpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNMTEgNGE0IDQgMCAwIDEgMCA4SDhhNSA1IDAgMCAwIDItNCA1IDUgMCAwIDAtMi00em0tNiA4YTQgNCAwIDEgMSAwLTggNCA0IDAgMCAxIDAgOE0wIDhhNSA1IDAgMCAwIDUgNWg2YTUgNSAwIDAgMCAwLTEwSDVhNSA1IDAgMCAwLTUgNScvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTExIDRhNCA0IDAgMCAxIDAgOEg4YTUgNSAwIDAgMCAyLTQgNSA1IDAgMCAwLTItNHptLTYgOGE0IDQgMCAxIDEgMC04IDQgNCAwIDAgMSAwIDhNMCA4YTUgNSAwIDAgMCA1IDVoNmE1IDUgMCAwIDAgMC0xMEg1YTUgNSAwIDAgMC01IDUnLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMS1wb3NpdGl2OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0xLXBvc2l0aXY6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTEtcG9zaXRpdjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMS1wb3NpdGl2OmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0xLXBvc2l0aXY6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMS1wb3NpdGl2OmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nbTEwLjk3IDQuOTctLjAyLjAyMi0zLjQ3MyA0LjQyNS0yLjA5My0yLjA5NGEuNzUuNzUgMCAwIDAtMS4wNiAxLjA2TDYuOTcgMTEuMDNhLjc1Ljc1IDAgMCAwIDEuMDc5LS4wMmwzLjk5Mi00Ljk5YS43NS43NSAwIDAgMC0xLjA3MS0xLjA1Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J20xMC45NyA0Ljk3LS4wMi4wMjItMy40NzMgNC40MjUtMi4wOTMtMi4wOTRhLjc1Ljc1IDAgMCAwLTEuMDYgMS4wNkw2Ljk3IDExLjAzYS43NS43NSAwIDAgMCAxLjA3OS0uMDJsMy45OTItNC45OWEuNzUuNzUgMCAwIDAtMS4wNzEtMS4wNScvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0yLXBvc2l0aXY6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTItcG9zaXRpdjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMi1wb3NpdGl2OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWljb24tcHJpbWFyeS0yLXBvc2l0aXY6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTItcG9zaXRpdjpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0yLXBvc2l0aXY6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdtMTAuOTcgNC45Ny0uMDIuMDIyLTMuNDczIDQuNDI1LTIuMDkzLTIuMDk0YS43NS43NSAwIDAgMC0xLjA2IDEuMDZMNi45NyAxMS4wM2EuNzUuNzUgMCAwIDAgMS4wNzktLjAybDMuOTkyLTQuOTlhLjc1Ljc1IDAgMCAwLTEuMDcxLTEuMDUnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nbTEwLjk3IDQuOTctLjAyLjAyMi0zLjQ3MyA0LjQyNS0yLjA5My0yLjA5NGEuNzUuNzUgMCAwIDAtMS4wNiAxLjA2TDYuOTcgMTEuMDNhLjc1Ljc1IDAgMCAwIDEuMDc5LS4wMmwzLjk5Mi00Ljk5YS43NS43NSAwIDAgMC0xLjA3MS0xLjA1Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTMtcG9zaXRpdjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWljb24tdGVydGlhcnktMy1wb3NpdGl2OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS0zLXBvc2l0aXY6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTMtcG9zaXRpdjpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMy1wb3NpdGl2OmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTMtcG9zaXRpdjpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J20xMC45NyA0Ljk3LS4wMi4wMjItMy40NzMgNC40MjUtMi4wOTMtMi4wOTRhLjc1Ljc1IDAgMCAwLTEuMDYgMS4wNkw2Ljk3IDExLjAzYS43NS43NSAwIDAgMCAxLjA3OS0uMDJsMy45OTItNC45OWEuNzUuNzUgMCAwIDAtMS4wNzEtMS4wNScvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdtMTAuOTcgNC45Ny0uMDIuMDIyLTMuNDczIDQuNDI1LTIuMDkzLTIuMDk0YS43NS43NSAwIDAgMC0xLjA2IDEuMDZMNi45NyAxMS4wM2EuNzUuNzUgMCAwIDAgMS4wNzktLjAybDMuOTkyLTQuOTlhLjc1Ljc1IDAgMCAwLTEuMDcxLTEuMDUnLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktNC1wb3NpdGl2OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS00LXBvc2l0aXY6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTQtcG9zaXRpdjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1pY29uLXByaW1hcnktNC1wb3NpdGl2OmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS00LXBvc2l0aXY6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktNC1wb3NpdGl2OmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nbTEwLjk3IDQuOTctLjAyLjAyMi0zLjQ3MyA0LjQyNS0yLjA5My0yLjA5NGEuNzUuNzUgMCAwIDAtMS4wNiAxLjA2TDYuOTcgMTEuMDNhLjc1Ljc1IDAgMCAwIDEuMDc5LS4wMmwzLjk5Mi00Ljk5YS43NS43NSAwIDAgMC0xLjA3MS0xLjA1Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J20xMC45NyA0Ljk3LS4wMi4wMjItMy40NzMgNC40MjUtMi4wOTMtMi4wOTRhLjc1Ljc1IDAgMCAwLTEuMDYgMS4wNkw2Ljk3IDExLjAzYS43NS43NSAwIDAgMCAxLjA3OS0uMDJsMy45OTItNC45OWEuNzUuNzUgMCAwIDAtMS4wNzEtMS4wNScvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0xLW5lZ2F0aXY6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTEtbmVnYXRpdjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMS1uZWdhdGl2OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWljb24tcHJpbWFyeS0xLW5lZ2F0aXY6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTEtbmVnYXRpdjpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0xLW5lZ2F0aXY6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNC42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCA3LjI5M2wyLjY0Ni0yLjY0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsMi42NDcgMi42NDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC0yLjY0NiAyLjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4IDQuNjQ2IDUuMzU0YS41LjUgMCAwIDEgMC0uNzA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J000LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMEw4IDcuMjkzbDIuNjQ2LTIuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC43MDcgOGwyLjY0NyAyLjY0NmEuNS41IDAgMCAxLS43MDguNzA4TDggOC43MDdsLTIuNjQ2IDIuNjQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4TDcuMjkzIDggNC42NDYgNS4zNTRhLjUuNSAwIDAgMSAwLS43MDgnLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMi1uZWdhdGl2OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0yLW5lZ2F0aXY6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTItbmVnYXRpdjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMi1uZWdhdGl2OmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0yLW5lZ2F0aXY6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMi1uZWdhdGl2OmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNC42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCA3LjI5M2wyLjY0Ni0yLjY0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsMi42NDcgMi42NDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC0yLjY0NiAyLjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4IDQuNjQ2IDUuMzU0YS41LjUgMCAwIDEgMC0uNzA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTMtbmVnYXRpdjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWljb24tdGVydGlhcnktMy1uZWdhdGl2OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS0zLW5lZ2F0aXY6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTMtbmVnYXRpdjpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMy1uZWdhdGl2OmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTMtbmVnYXRpdjpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J000LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMEw4IDcuMjkzbDIuNjQ2LTIuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC43MDcgOGwyLjY0NyAyLjY0NmEuNS41IDAgMCAxLS43MDguNzA4TDggOC43MDdsLTIuNjQ2IDIuNjQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4TDcuMjkzIDggNC42NDYgNS4zNTRhLjUuNSAwIDAgMSAwLS43MDgnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS00LW5lZ2F0aXY6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTQtbmVnYXRpdjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktNC1uZWdhdGl2OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWljb24tcHJpbWFyeS00LW5lZ2F0aXY6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTQtbmVnYXRpdjpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS00LW5lZ2F0aXY6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNC42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCA3LjI5M2wyLjY0Ni0yLjY0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsMi42NDcgMi42NDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC0yLjY0NiAyLjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4IDQuNjQ2IDUuMzU0YS41LjUgMCAwIDEgMC0uNzA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J000LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMEw4IDcuMjkzbDIuNjQ2LTIuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC43MDcgOGwyLjY0NyAyLjY0NmEuNS41IDAgMCAxLS43MDguNzA4TDggOC43MDdsLTIuNjQ2IDIuNjQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4TDcuMjkzIDggNC42NDYgNS4zNTRhLjUuNSAwIDAgMSAwLS43MDgnLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMS13YXJuaW5nOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0xLXdhcm5pbmc6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTEtd2FybmluZzpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMS13YXJuaW5nOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0xLXdhcm5pbmc6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMS13YXJuaW5nOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMi13YXJuaW5nOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0yLXdhcm5pbmc6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTItd2FybmluZzpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMi13YXJuaW5nOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0yLXdhcm5pbmc6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMi13YXJuaW5nOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMy13YXJuaW5nOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0zLXdhcm5pbmc6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTMtd2FybmluZzpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMy13YXJuaW5nOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0zLXdhcm5pbmc6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMy13YXJuaW5nOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktNC13YXJuaW5nOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS00LXdhcm5pbmc6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTQtd2FybmluZzpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1pY29uLXByaW1hcnktNC13YXJuaW5nOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS00LXdhcm5pbmc6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktNC13YXJuaW5nOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMS1uZXV0cmFsOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0xLW5ldXRyYWw6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTEtbmV1dHJhbDpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMS1uZXV0cmFsOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0xLW5ldXRyYWw6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMS1uZXV0cmFsOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMi1uZXV0cmFsOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0yLW5ldXRyYWw6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTItbmV1dHJhbDpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMi1uZXV0cmFsOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0yLW5ldXRyYWw6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMi1uZXV0cmFsOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMy1uZXV0cmFsOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0zLW5ldXRyYWw6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTMtbmV1dHJhbDpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMy1uZXV0cmFsOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0zLW5ldXRyYWw6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMy1uZXV0cmFsOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktNC1uZXV0cmFsOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS00LW5ldXRyYWw6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTQtbmV1dHJhbDpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1pY29uLXByaW1hcnktNC1uZXV0cmFsOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS00LW5ldXRyYWw6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktNC1uZXV0cmFsOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMS1xdWVzdGlvbjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWljb24tdGVydGlhcnktMS1xdWVzdGlvbjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMS1xdWVzdGlvbjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMS1xdWVzdGlvbjpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMS1xdWVzdGlvbjpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0xLXF1ZXN0aW9uOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTUuMjU1IDUuNzg2YS4yMzcuMjM3IDAgMCAwIC4yNDEuMjQ3aC44MjVjLjEzOCAwIC4yNDgtLjExMy4yNjYtLjI1LjA5LS42NTYuNTQtMS4xMzQgMS4zNDItMS4xMzQuNjg2IDAgMS4zMTQuMzQzIDEuMzE0IDEuMTY4IDAgLjYzNS0uMzc0LjkyNy0uOTY1IDEuMzcxLS42NzMuNDg5LTEuMjA2IDEuMDYtMS4xNjggMS45ODdsLjAwMy4yMTdhLjI1LjI1IDAgMCAwIC4yNS4yNDZoLjgxMWEuMjUuMjUgMCAwIDAgLjI1LS4yNXYtLjEwNWMwLS43MTguMjczLS45MjcgMS4wMS0xLjQ4Ni42MDktLjQ2MyAxLjI0NC0uOTc3IDEuMjQ0LTIuMDU2IDAtMS41MTEtMS4yNzYtMi4yNDEtMi42NzMtMi4yNDEtMS4yNjcgMC0yLjY1NS41OS0yLjc1IDIuMjg2bTEuNTU3IDUuNzYzYzAgLjUzMy40MjUuOTI3IDEuMDEuOTI3LjYwOSAwIDEuMDI4LS4zOTQgMS4wMjgtLjkyNyAwLS41NTItLjQyLS45NC0xLjAyOS0uOTQtLjU4NCAwLTEuMDA5LjM4OC0xLjAwOS45NCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNS4yNTUgNS43ODZhLjIzNy4yMzcgMCAwIDAgLjI0MS4yNDdoLjgyNWMuMTM4IDAgLjI0OC0uMTEzLjI2Ni0uMjUuMDktLjY1Ni41NC0xLjEzNCAxLjM0Mi0xLjEzNC42ODYgMCAxLjMxNC4zNDMgMS4zMTQgMS4xNjggMCAuNjM1LS4zNzQuOTI3LS45NjUgMS4zNzEtLjY3My40ODktMS4yMDYgMS4wNi0xLjE2OCAxLjk4N2wuMDAzLjIxN2EuMjUuMjUgMCAwIDAgLjI1LjI0NmguODExYS4yNS4yNSAwIDAgMCAuMjUtLjI1di0uMTA1YzAtLjcxOC4yNzMtLjkyNyAxLjAxLTEuNDg2LjYwOS0uNDYzIDEuMjQ0LS45NzcgMS4yNDQtMi4wNTYgMC0xLjUxMS0xLjI3Ni0yLjI0MS0yLjY3My0yLjI0MS0xLjI2NyAwLTIuNjU1LjU5LTIuNzUgMi4yODZtMS41NTcgNS43NjNjMCAuNTMzLjQyNS45MjcgMS4wMS45MjcuNjA5IDAgMS4wMjgtLjM5NCAxLjAyOC0uOTI3IDAtLjU1Mi0uNDItLjk0LTEuMDI5LS45NC0uNTg0IDAtMS4wMDkuMzg4LTEuMDA5Ljk0Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTItcXVlc3Rpb246YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTItcXVlc3Rpb246YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTItcXVlc3Rpb246YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTItcXVlc3Rpb246YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTItcXVlc3Rpb246YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMi1xdWVzdGlvbjpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J001LjI1NSA1Ljc4NmEuMjM3LjIzNyAwIDAgMCAuMjQxLjI0N2guODI1Yy4xMzggMCAuMjQ4LS4xMTMuMjY2LS4yNS4wOS0uNjU2LjU0LTEuMTM0IDEuMzQyLTEuMTM0LjY4NiAwIDEuMzE0LjM0MyAxLjMxNCAxLjE2OCAwIC42MzUtLjM3NC45MjctLjk2NSAxLjM3MS0uNjczLjQ4OS0xLjIwNiAxLjA2LTEuMTY4IDEuOTg3bC4wMDMuMjE3YS4yNS4yNSAwIDAgMCAuMjUuMjQ2aC44MTFhLjI1LjI1IDAgMCAwIC4yNS0uMjV2LS4xMDVjMC0uNzE4LjI3My0uOTI3IDEuMDEtMS40ODYuNjA5LS40NjMgMS4yNDQtLjk3NyAxLjI0NC0yLjA1NiAwLTEuNTExLTEuMjc2LTIuMjQxLTIuNjczLTIuMjQxLTEuMjY3IDAtMi42NTUuNTktMi43NSAyLjI4Nm0xLjU1NyA1Ljc2M2MwIC41MzMuNDI1LjkyNyAxLjAxLjkyNy42MDkgMCAxLjAyOC0uMzk0IDEuMDI4LS45MjcgMC0uNTUyLS40Mi0uOTQtMS4wMjktLjk0LS41ODQgMC0xLjAwOS4zODgtMS4wMDkuOTQnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTUuMjU1IDUuNzg2YS4yMzcuMjM3IDAgMCAwIC4yNDEuMjQ3aC44MjVjLjEzOCAwIC4yNDgtLjExMy4yNjYtLjI1LjA5LS42NTYuNTQtMS4xMzQgMS4zNDItMS4xMzQuNjg2IDAgMS4zMTQuMzQzIDEuMzE0IDEuMTY4IDAgLjYzNS0uMzc0LjkyNy0uOTY1IDEuMzcxLS42NzMuNDg5LTEuMjA2IDEuMDYtMS4xNjggMS45ODdsLjAwMy4yMTdhLjI1LjI1IDAgMCAwIC4yNS4yNDZoLjgxMWEuMjUuMjUgMCAwIDAgLjI1LS4yNXYtLjEwNWMwLS43MTguMjczLS45MjcgMS4wMS0xLjQ4Ni42MDktLjQ2MyAxLjI0NC0uOTc3IDEuMjQ0LTIuMDU2IDAtMS41MTEtMS4yNzYtMi4yNDEtMi42NzMtMi4yNDEtMS4yNjcgMC0yLjY1NS41OS0yLjc1IDIuMjg2bTEuNTU3IDUuNzYzYzAgLjUzMy40MjUuOTI3IDEuMDEuOTI3LjYwOSAwIDEuMDI4LS4zOTQgMS4wMjgtLjkyNyAwLS41NTItLjQyLS45NC0xLjAyOS0uOTQtLjU4NCAwLTEuMDA5LjM4OC0xLjAwOS45NCcvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0zLXF1ZXN0aW9uOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0zLXF1ZXN0aW9uOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS0zLXF1ZXN0aW9uOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWljb24tcHJpbWFyeS0zLXF1ZXN0aW9uOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0zLXF1ZXN0aW9uOmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTMtcXVlc3Rpb246YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNS4yNTUgNS43ODZhLjIzNy4yMzcgMCAwIDAgLjI0MS4yNDdoLjgyNWMuMTM4IDAgLjI0OC0uMTEzLjI2Ni0uMjUuMDktLjY1Ni41NC0xLjEzNCAxLjM0Mi0xLjEzNC42ODYgMCAxLjMxNC4zNDMgMS4zMTQgMS4xNjggMCAuNjM1LS4zNzQuOTI3LS45NjUgMS4zNzEtLjY3My40ODktMS4yMDYgMS4wNi0xLjE2OCAxLjk4N2wuMDAzLjIxN2EuMjUuMjUgMCAwIDAgLjI1LjI0NmguODExYS4yNS4yNSAwIDAgMCAuMjUtLjI1di0uMTA1YzAtLjcxOC4yNzMtLjkyNyAxLjAxLTEuNDg2LjYwOS0uNDYzIDEuMjQ0LS45NzcgMS4yNDQtMi4wNTYgMC0xLjUxMS0xLjI3Ni0yLjI0MS0yLjY3My0yLjI0MS0xLjI2NyAwLTIuNjU1LjU5LTIuNzUgMi4yODZtMS41NTcgNS43NjNjMCAuNTMzLjQyNS45MjcgMS4wMS45MjcuNjA5IDAgMS4wMjgtLjM5NCAxLjAyOC0uOTI3IDAtLjU1Mi0uNDItLjk0LTEuMDI5LS45NC0uNTg0IDAtMS4wMDkuMzg4LTEuMDA5Ljk0Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J001LjI1NSA1Ljc4NmEuMjM3LjIzNyAwIDAgMCAuMjQxLjI0N2guODI1Yy4xMzggMCAuMjQ4LS4xMTMuMjY2LS4yNS4wOS0uNjU2LjU0LTEuMTM0IDEuMzQyLTEuMTM0LjY4NiAwIDEuMzE0LjM0MyAxLjMxNCAxLjE2OCAwIC42MzUtLjM3NC45MjctLjk2NSAxLjM3MS0uNjczLjQ4OS0xLjIwNiAxLjA2LTEuMTY4IDEuOTg3bC4wMDMuMjE3YS4yNS4yNSAwIDAgMCAuMjUuMjQ2aC44MTFhLjI1LjI1IDAgMCAwIC4yNS0uMjV2LS4xMDVjMC0uNzE4LjI3My0uOTI3IDEuMDEtMS40ODYuNjA5LS40NjMgMS4yNDQtLjk3NyAxLjI0NC0yLjA1NiAwLTEuNTExLTEuMjc2LTIuMjQxLTIuNjczLTIuMjQxLTEuMjY3IDAtMi42NTUuNTktMi43NSAyLjI4Nm0xLjU1NyA1Ljc2M2MwIC41MzMuNDI1LjkyNyAxLjAxLjkyNy42MDkgMCAxLjAyOC0uMzk0IDEuMDI4LS45MjcgMC0uNTUyLS40Mi0uOTQtMS4wMjktLjk0LS41ODQgMC0xLjAwOS4zODgtMS4wMDkuOTQnLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktNC1xdWVzdGlvbjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWljb24tdGVydGlhcnktNC1xdWVzdGlvbjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktNC1xdWVzdGlvbjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1pY29uLXByaW1hcnktNC1xdWVzdGlvbjpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktNC1xdWVzdGlvbjpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS00LXF1ZXN0aW9uOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTUuMjU1IDUuNzg2YS4yMzcuMjM3IDAgMCAwIC4yNDEuMjQ3aC44MjVjLjEzOCAwIC4yNDgtLjExMy4yNjYtLjI1LjA5LS42NTYuNTQtMS4xMzQgMS4zNDItMS4xMzQuNjg2IDAgMS4zMTQuMzQzIDEuMzE0IDEuMTY4IDAgLjYzNS0uMzc0LjkyNy0uOTY1IDEuMzcxLS42NzMuNDg5LTEuMjA2IDEuMDYtMS4xNjggMS45ODdsLjAwMy4yMTdhLjI1LjI1IDAgMCAwIC4yNS4yNDZoLjgxMWEuMjUuMjUgMCAwIDAgLjI1LS4yNXYtLjEwNWMwLS43MTguMjczLS45MjcgMS4wMS0xLjQ4Ni42MDktLjQ2MyAxLjI0NC0uOTc3IDEuMjQ0LTIuMDU2IDAtMS41MTEtMS4yNzYtMi4yNDEtMi42NzMtMi4yNDEtMS4yNjcgMC0yLjY1NS41OS0yLjc1IDIuMjg2bTEuNTU3IDUuNzYzYzAgLjUzMy40MjUuOTI3IDEuMDEuOTI3LjYwOSAwIDEuMDI4LS4zOTQgMS4wMjgtLjkyNyAwLS41NTItLjQyLS45NC0xLjAyOS0uOTQtLjU4NCAwLTEuMDA5LjM4OC0xLjAwOS45NCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNS4yNTUgNS43ODZhLjIzNy4yMzcgMCAwIDAgLjI0MS4yNDdoLjgyNWMuMTM4IDAgLjI0OC0uMTEzLjI2Ni0uMjUuMDktLjY1Ni41NC0xLjEzNCAxLjM0Mi0xLjEzNC42ODYgMCAxLjMxNC4zNDMgMS4zMTQgMS4xNjggMCAuNjM1LS4zNzQuOTI3LS45NjUgMS4zNzEtLjY3My40ODktMS4yMDYgMS4wNi0xLjE2OCAxLjk4N2wuMDAzLjIxN2EuMjUuMjUgMCAwIDAgLjI1LjI0NmguODExYS4yNS4yNSAwIDAgMCAuMjUtLjI1di0uMTA1YzAtLjcxOC4yNzMtLjkyNyAxLjAxLTEuNDg2LjYwOS0uNDYzIDEuMjQ0LS45NzcgMS4yNDQtMi4wNTYgMC0xLjUxMS0xLjI3Ni0yLjI0MS0yLjY3My0yLjI0MS0xLjI2NyAwLTIuNjU1LjU5LTIuNzUgMi4yODZtMS41NTcgNS43NjNjMCAuNTMzLjQyNS45MjcgMS4wMS45MjcuNjA5IDAgMS4wMjgtLjM5NCAxLjAyOC0uOTI3IDAtLjU1Mi0uNDItLjk0LTEuMDI5LS45NC0uNTg0IDAtMS4wMDkuMzg4LTEuMDA5Ljk0Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTEtcGx1czpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWljb24tdGVydGlhcnktMS1wbHVzOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS0xLXBsdXM6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTEtcGx1czpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMS1wbHVzOmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTEtcGx1czpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J004IDRhLjUuNSAwIDAgMSAuNS41djNoM2EuNS41IDAgMCAxIDAgMWgtM3YzYS41LjUgMCAwIDEtMSAwdi0zaC0zYS41LjUgMCAwIDEgMC0xaDN2LTNBLjUuNSAwIDAgMSA4IDQnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTggNGEuNS41IDAgMCAxIC41LjV2M2gzYS41LjUgMCAwIDEgMCAxaC0zdjNhLjUuNSAwIDAgMS0xIDB2LTNoLTNhLjUuNSAwIDAgMSAwLTFoM3YtM0EuNS41IDAgMCAxIDggNCcvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0yLXBsdXM6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTItcGx1czpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMi1wbHVzOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWljb24tcHJpbWFyeS0yLXBsdXM6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTItcGx1czpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0yLXBsdXM6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNOCA0YS41LjUgMCAwIDEgLjUuNXYzaDNhLjUuNSAwIDAgMSAwIDFoLTN2M2EuNS41IDAgMCAxLTEgMHYtM2gtM2EuNS41IDAgMCAxIDAtMWgzdi0zQS41LjUgMCAwIDEgOCA0Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J004IDRhLjUuNSAwIDAgMSAuNS41djNoM2EuNS41IDAgMCAxIDAgMWgtM3YzYS41LjUgMCAwIDEtMSAwdi0zaC0zYS41LjUgMCAwIDEgMC0xaDN2LTNBLjUuNSAwIDAgMSA4IDQnLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMy1wbHVzOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0zLXBsdXM6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTMtcGx1czpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMy1wbHVzOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0zLXBsdXM6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMy1wbHVzOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTggNGEuNS41IDAgMCAxIC41LjV2M2gzYS41LjUgMCAwIDEgMCAxaC0zdjNhLjUuNSAwIDAgMS0xIDB2LTNoLTNhLjUuNSAwIDAgMSAwLTFoM3YtM0EuNS41IDAgMCAxIDggNCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNOCA0YS41LjUgMCAwIDEgLjUuNXYzaDNhLjUuNSAwIDAgMSAwIDFoLTN2M2EuNS41IDAgMCAxLTEgMHYtM2gtM2EuNS41IDAgMCAxIDAtMWgzdi0zQS41LjUgMCAwIDEgOCA0Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTQtcGx1czpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWljb24tdGVydGlhcnktNC1wbHVzOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS00LXBsdXM6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTQtcGx1czpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktNC1wbHVzOmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTQtcGx1czpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J004IDRhLjUuNSAwIDAgMSAuNS41djNoM2EuNS41IDAgMCAxIDAgMWgtM3YzYS41LjUgMCAwIDEtMSAwdi0zaC0zYS41LjUgMCAwIDEgMC0xaDN2LTNBLjUuNSAwIDAgMSA4IDQnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTggNGEuNS41IDAgMCAxIC41LjV2M2gzYS41LjUgMCAwIDEgMCAxaC0zdjNhLjUuNSAwIDAgMS0xIDB2LTNoLTNhLjUuNSAwIDAgMSAwLTFoM3YtM0EuNS41IDAgMCAxIDggNCcvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0xLWRhc2g6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTEtZGFzaDpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMS1kYXNoOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWljb24tcHJpbWFyeS0xLWRhc2g6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTEtZGFzaDpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0xLWRhc2g6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNCA4YS41LjUgMCAwIDEgLjUtLjVoN2EuNS41IDAgMCAxIDAgMWgtN0EuNS41IDAgMCAxIDQgOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNCA4YS41LjUgMCAwIDEgLjUtLjVoN2EuNS41IDAgMCAxIDAgMWgtN0EuNS41IDAgMCAxIDQgOCcvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0yLWRhc2g6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTItZGFzaDpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMi1kYXNoOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWljb24tcHJpbWFyeS0yLWRhc2g6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTItZGFzaDpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0yLWRhc2g6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNCA4YS41LjUgMCAwIDEgLjUtLjVoN2EuNS41IDAgMCAxIDAgMWgtN0EuNS41IDAgMCAxIDQgOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNCA4YS41LjUgMCAwIDEgLjUtLjVoN2EuNS41IDAgMCAxIDAgMWgtN0EuNS41IDAgMCAxIDQgOCcvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0zLWRhc2g6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTMtZGFzaDpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMy1kYXNoOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWljb24tcHJpbWFyeS0zLWRhc2g6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTMtZGFzaDpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0zLWRhc2g6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNCA4YS41LjUgMCAwIDEgLjUtLjVoN2EuNS41IDAgMCAxIDAgMWgtN0EuNS41IDAgMCAxIDQgOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNCA4YS41LjUgMCAwIDEgLjUtLjVoN2EuNS41IDAgMCAxIDAgMWgtN0EuNS41IDAgMCAxIDQgOCcvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS00LWRhc2g6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTQtZGFzaDpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktNC1kYXNoOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWljb24tcHJpbWFyeS00LWRhc2g6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTQtZGFzaDpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS00LWRhc2g6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNCA4YS41LjUgMCAwIDEgLjUtLjVoN2EuNS41IDAgMCAxIDAgMWgtN0EuNS41IDAgMCAxIDQgOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNCA4YS41LjUgMCAwIDEgLjUtLjVoN2EuNS41IDAgMCAxIDAgMWgtN0EuNS41IDAgMCAxIDQgOCcvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0xLWdlYXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTEtZ2VhcjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMS1nZWFyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWljb24tcHJpbWFyeS0xLWdlYXI6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTEtZ2VhcjpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0xLWdlYXI6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggNC43NTRhMy4yNDYgMy4yNDYgMCAxIDAgMCA2LjQ5MiAzLjI0NiAzLjI0NiAwIDAgMCAwLTYuNDkyTTUuNzU0IDhhMi4yNDYgMi4yNDYgMCAxIDEgNC40OTIgMCAyLjI0NiAyLjI0NiAwIDAgMS00LjQ5MiAwJy8lM0UlM0NwYXRoIGQ9J005Ljc5NiAxLjM0M2MtLjUyNy0xLjc5LTMuMDY1LTEuNzktMy41OTIgMGwtLjA5NC4zMTlhLjg3My44NzMgMCAwIDEtMS4yNTUuNTJsLS4yOTItLjE2Yy0xLjY0LS44OTItMy40MzMuOTAyLTIuNTQgMi41NDFsLjE1OS4yOTJhLjg3My44NzMgMCAwIDEtLjUyIDEuMjU1bC0uMzE5LjA5NGMtMS43OS41MjctMS43OSAzLjA2NSAwIDMuNTkybC4zMTkuMDk0YS44NzMuODczIDAgMCAxIC41MiAxLjI1NWwtLjE2LjI5MmMtLjg5MiAxLjY0LjkwMSAzLjQzNCAyLjU0MSAyLjU0bC4yOTItLjE1OWEuODczLjg3MyAwIDAgMSAxLjI1NS41MmwuMDk0LjMxOWMuNTI3IDEuNzkgMy4wNjUgMS43OSAzLjU5MiAwbC4wOTQtLjMxOWEuODczLjg3MyAwIDAgMSAxLjI1NS0uNTJsLjI5Mi4xNmMxLjY0Ljg5MyAzLjQzNC0uOTAyIDIuNTQtMi41NDFsLS4xNTktLjI5MmEuODczLjg3MyAwIDAgMSAuNTItMS4yNTVsLjMxOS0uMDk0YzEuNzktLjUyNyAxLjc5LTMuMDY1IDAtMy41OTJsLS4zMTktLjA5NGEuODczLjg3MyAwIDAgMS0uNTItMS4yNTVsLjE2LS4yOTJjLjg5My0xLjY0LS45MDItMy40MzMtMi41NDEtMi41NGwtLjI5Mi4xNTlhLjg3My44NzMgMCAwIDEtMS4yNTUtLjUyem0tMi42MzMuMjgzYy4yNDYtLjgzNSAxLjQyOC0uODM1IDEuNjc0IDBsLjA5NC4zMTlhMS44NzMgMS44NzMgMCAwIDAgMi42OTMgMS4xMTVsLjI5MS0uMTZjLjc2NC0uNDE1IDEuNi40MiAxLjE4NCAxLjE4NWwtLjE1OS4yOTJhMS44NzMgMS44NzMgMCAwIDAgMS4xMTYgMi42OTJsLjMxOC4wOTRjLjgzNS4yNDYuODM1IDEuNDI4IDAgMS42NzRsLS4zMTkuMDk0YTEuODczIDEuODczIDAgMCAwLTEuMTE1IDIuNjkzbC4xNi4yOTFjLjQxNS43NjQtLjQyIDEuNi0xLjE4NSAxLjE4NGwtLjI5MS0uMTU5YTEuODczIDEuODczIDAgMCAwLTIuNjkzIDEuMTE2bC0uMDk0LjMxOGMtLjI0Ni44MzUtMS40MjguODM1LTEuNjc0IDBsLS4wOTQtLjMxOWExLjg3MyAxLjg3MyAwIDAgMC0yLjY5Mi0xLjExNWwtLjI5Mi4xNmMtLjc2NC40MTUtMS42LS40Mi0xLjE4NC0xLjE4NWwuMTU5LS4yOTFBMS44NzMgMS44NzMgMCAwIDAgMS45NDUgOC45M2wtLjMxOS0uMDk0Yy0uODM1LS4yNDYtLjgzNS0xLjQyOCAwLTEuNjc0bC4zMTktLjA5NEExLjg3MyAxLjg3MyAwIDAgMCAzLjA2IDQuMzc3bC0uMTYtLjI5MmMtLjQxNS0uNzY0LjQyLTEuNiAxLjE4NS0xLjE4NGwuMjkyLjE1OWExLjg3MyAxLjg3MyAwIDAgMCAyLjY5Mi0xLjExNXonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDQuNzU0YTMuMjQ2IDMuMjQ2IDAgMSAwIDAgNi40OTIgMy4yNDYgMy4yNDYgMCAwIDAgMC02LjQ5Mk01Ljc1NCA4YTIuMjQ2IDIuMjQ2IDAgMSAxIDQuNDkyIDAgMi4yNDYgMi4yNDYgMCAwIDEtNC40OTIgMCcvJTNFJTNDcGF0aCBkPSdNOS43OTYgMS4zNDNjLS41MjctMS43OS0zLjA2NS0xLjc5LTMuNTkyIDBsLS4wOTQuMzE5YS44NzMuODczIDAgMCAxLTEuMjU1LjUybC0uMjkyLS4xNmMtMS42NC0uODkyLTMuNDMzLjkwMi0yLjU0IDIuNTQxbC4xNTkuMjkyYS44NzMuODczIDAgMCAxLS41MiAxLjI1NWwtLjMxOS4wOTRjLTEuNzkuNTI3LTEuNzkgMy4wNjUgMCAzLjU5MmwuMzE5LjA5NGEuODczLjg3MyAwIDAgMSAuNTIgMS4yNTVsLS4xNi4yOTJjLS44OTIgMS42NC45MDEgMy40MzQgMi41NDEgMi41NGwuMjkyLS4xNTlhLjg3My44NzMgMCAwIDEgMS4yNTUuNTJsLjA5NC4zMTljLjUyNyAxLjc5IDMuMDY1IDEuNzkgMy41OTIgMGwuMDk0LS4zMTlhLjg3My44NzMgMCAwIDEgMS4yNTUtLjUybC4yOTIuMTZjMS42NC44OTMgMy40MzQtLjkwMiAyLjU0LTIuNTQxbC0uMTU5LS4yOTJhLjg3My44NzMgMCAwIDEgLjUyLTEuMjU1bC4zMTktLjA5NGMxLjc5LS41MjcgMS43OS0zLjA2NSAwLTMuNTkybC0uMzE5LS4wOTRhLjg3My44NzMgMCAwIDEtLjUyLTEuMjU1bC4xNi0uMjkyYy44OTMtMS42NC0uOTAyLTMuNDMzLTIuNTQxLTIuNTRsLS4yOTIuMTU5YS44NzMuODczIDAgMCAxLTEuMjU1LS41MnptLTIuNjMzLjI4M2MuMjQ2LS44MzUgMS40MjgtLjgzNSAxLjY3NCAwbC4wOTQuMzE5YTEuODczIDEuODczIDAgMCAwIDIuNjkzIDEuMTE1bC4yOTEtLjE2Yy43NjQtLjQxNSAxLjYuNDIgMS4xODQgMS4xODVsLS4xNTkuMjkyYTEuODczIDEuODczIDAgMCAwIDEuMTE2IDIuNjkybC4zMTguMDk0Yy44MzUuMjQ2LjgzNSAxLjQyOCAwIDEuNjc0bC0uMzE5LjA5NGExLjg3MyAxLjg3MyAwIDAgMC0xLjExNSAyLjY5M2wuMTYuMjkxYy40MTUuNzY0LS40MiAxLjYtMS4xODUgMS4xODRsLS4yOTEtLjE1OWExLjg3MyAxLjg3MyAwIDAgMC0yLjY5MyAxLjExNmwtLjA5NC4zMThjLS4yNDYuODM1LTEuNDI4LjgzNS0xLjY3NCAwbC0uMDk0LS4zMTlhMS44NzMgMS44NzMgMCAwIDAtMi42OTItMS4xMTVsLS4yOTIuMTZjLS43NjQuNDE1LTEuNi0uNDItMS4xODQtMS4xODVsLjE1OS0uMjkxQTEuODczIDEuODczIDAgMCAwIDEuOTQ1IDguOTNsLS4zMTktLjA5NGMtLjgzNS0uMjQ2LS44MzUtMS40MjggMC0xLjY3NGwuMzE5LS4wOTRBMS44NzMgMS44NzMgMCAwIDAgMy4wNiA0LjM3N2wtLjE2LS4yOTJjLS40MTUtLjc2NC40Mi0xLjYgMS4xODUtMS4xODRsLjI5Mi4xNTlhMS44NzMgMS44NzMgMCAwIDAgMi42OTItMS4xMTV6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTItZ2VhcjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWljb24tdGVydGlhcnktMi1nZWFyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS0yLWdlYXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTItZ2VhcjpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMi1nZWFyOmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTItZ2VhcjpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCA0Ljc1NGEzLjI0NiAzLjI0NiAwIDEgMCAwIDYuNDkyIDMuMjQ2IDMuMjQ2IDAgMCAwIDAtNi40OTJNNS43NTQgOGEyLjI0NiAyLjI0NiAwIDEgMSA0LjQ5MiAwIDIuMjQ2IDIuMjQ2IDAgMCAxLTQuNDkyIDAnLyUzRSUzQ3BhdGggZD0nTTkuNzk2IDEuMzQzYy0uNTI3LTEuNzktMy4wNjUtMS43OS0zLjU5MiAwbC0uMDk0LjMxOWEuODczLjg3MyAwIDAgMS0xLjI1NS41MmwtLjI5Mi0uMTZjLTEuNjQtLjg5Mi0zLjQzMy45MDItMi41NCAyLjU0MWwuMTU5LjI5MmEuODczLjg3MyAwIDAgMS0uNTIgMS4yNTVsLS4zMTkuMDk0Yy0xLjc5LjUyNy0xLjc5IDMuMDY1IDAgMy41OTJsLjMxOS4wOTRhLjg3My44NzMgMCAwIDEgLjUyIDEuMjU1bC0uMTYuMjkyYy0uODkyIDEuNjQuOTAxIDMuNDM0IDIuNTQxIDIuNTRsLjI5Mi0uMTU5YS44NzMuODczIDAgMCAxIDEuMjU1LjUybC4wOTQuMzE5Yy41MjcgMS43OSAzLjA2NSAxLjc5IDMuNTkyIDBsLjA5NC0uMzE5YS44NzMuODczIDAgMCAxIDEuMjU1LS41MmwuMjkyLjE2YzEuNjQuODkzIDMuNDM0LS45MDIgMi41NC0yLjU0MWwtLjE1OS0uMjkyYS44NzMuODczIDAgMCAxIC41Mi0xLjI1NWwuMzE5LS4wOTRjMS43OS0uNTI3IDEuNzktMy4wNjUgMC0zLjU5MmwtLjMxOS0uMDk0YS44NzMuODczIDAgMCAxLS41Mi0xLjI1NWwuMTYtLjI5MmMuODkzLTEuNjQtLjkwMi0zLjQzMy0yLjU0MS0yLjU0bC0uMjkyLjE1OWEuODczLjg3MyAwIDAgMS0xLjI1NS0uNTJ6bS0yLjYzMy4yODNjLjI0Ni0uODM1IDEuNDI4LS44MzUgMS42NzQgMGwuMDk0LjMxOWExLjg3MyAxLjg3MyAwIDAgMCAyLjY5MyAxLjExNWwuMjkxLS4xNmMuNzY0LS40MTUgMS42LjQyIDEuMTg0IDEuMTg1bC0uMTU5LjI5MmExLjg3MyAxLjg3MyAwIDAgMCAxLjExNiAyLjY5MmwuMzE4LjA5NGMuODM1LjI0Ni44MzUgMS40MjggMCAxLjY3NGwtLjMxOS4wOTRhMS44NzMgMS44NzMgMCAwIDAtMS4xMTUgMi42OTNsLjE2LjI5MWMuNDE1Ljc2NC0uNDIgMS42LTEuMTg1IDEuMTg0bC0uMjkxLS4xNTlhMS44NzMgMS44NzMgMCAwIDAtMi42OTMgMS4xMTZsLS4wOTQuMzE4Yy0uMjQ2LjgzNS0xLjQyOC44MzUtMS42NzQgMGwtLjA5NC0uMzE5YTEuODczIDEuODczIDAgMCAwLTIuNjkyLTEuMTE1bC0uMjkyLjE2Yy0uNzY0LjQxNS0xLjYtLjQyLTEuMTg0LTEuMTg1bC4xNTktLjI5MUExLjg3MyAxLjg3MyAwIDAgMCAxLjk0NSA4LjkzbC0uMzE5LS4wOTRjLS44MzUtLjI0Ni0uODM1LTEuNDI4IDAtMS42NzRsLjMxOS0uMDk0QTEuODczIDEuODczIDAgMCAwIDMuMDYgNC4zNzdsLS4xNi0uMjkyYy0uNDE1LS43NjQuNDItMS42IDEuMTg1LTEuMTg0bC4yOTIuMTU5YTEuODczIDEuODczIDAgMCAwIDIuNjkyLTEuMTE1eicvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggNC43NTRhMy4yNDYgMy4yNDYgMCAxIDAgMCA2LjQ5MiAzLjI0NiAzLjI0NiAwIDAgMCAwLTYuNDkyTTUuNzU0IDhhMi4yNDYgMi4yNDYgMCAxIDEgNC40OTIgMCAyLjI0NiAyLjI0NiAwIDAgMS00LjQ5MiAwJy8lM0UlM0NwYXRoIGQ9J005Ljc5NiAxLjM0M2MtLjUyNy0xLjc5LTMuMDY1LTEuNzktMy41OTIgMGwtLjA5NC4zMTlhLjg3My44NzMgMCAwIDEtMS4yNTUuNTJsLS4yOTItLjE2Yy0xLjY0LS44OTItMy40MzMuOTAyLTIuNTQgMi41NDFsLjE1OS4yOTJhLjg3My44NzMgMCAwIDEtLjUyIDEuMjU1bC0uMzE5LjA5NGMtMS43OS41MjctMS43OSAzLjA2NSAwIDMuNTkybC4zMTkuMDk0YS44NzMuODczIDAgMCAxIC41MiAxLjI1NWwtLjE2LjI5MmMtLjg5MiAxLjY0LjkwMSAzLjQzNCAyLjU0MSAyLjU0bC4yOTItLjE1OWEuODczLjg3MyAwIDAgMSAxLjI1NS41MmwuMDk0LjMxOWMuNTI3IDEuNzkgMy4wNjUgMS43OSAzLjU5MiAwbC4wOTQtLjMxOWEuODczLjg3MyAwIDAgMSAxLjI1NS0uNTJsLjI5Mi4xNmMxLjY0Ljg5MyAzLjQzNC0uOTAyIDIuNTQtMi41NDFsLS4xNTktLjI5MmEuODczLjg3MyAwIDAgMSAuNTItMS4yNTVsLjMxOS0uMDk0YzEuNzktLjUyNyAxLjc5LTMuMDY1IDAtMy41OTJsLS4zMTktLjA5NGEuODczLjg3MyAwIDAgMS0uNTItMS4yNTVsLjE2LS4yOTJjLjg5My0xLjY0LS45MDItMy40MzMtMi41NDEtMi41NGwtLjI5Mi4xNTlhLjg3My44NzMgMCAwIDEtMS4yNTUtLjUyem0tMi42MzMuMjgzYy4yNDYtLjgzNSAxLjQyOC0uODM1IDEuNjc0IDBsLjA5NC4zMTlhMS44NzMgMS44NzMgMCAwIDAgMi42OTMgMS4xMTVsLjI5MS0uMTZjLjc2NC0uNDE1IDEuNi40MiAxLjE4NCAxLjE4NWwtLjE1OS4yOTJhMS44NzMgMS44NzMgMCAwIDAgMS4xMTYgMi42OTJsLjMxOC4wOTRjLjgzNS4yNDYuODM1IDEuNDI4IDAgMS42NzRsLS4zMTkuMDk0YTEuODczIDEuODczIDAgMCAwLTEuMTE1IDIuNjkzbC4xNi4yOTFjLjQxNS43NjQtLjQyIDEuNi0xLjE4NSAxLjE4NGwtLjI5MS0uMTU5YTEuODczIDEuODczIDAgMCAwLTIuNjkzIDEuMTE2bC0uMDk0LjMxOGMtLjI0Ni44MzUtMS40MjguODM1LTEuNjc0IDBsLS4wOTQtLjMxOWExLjg3MyAxLjg3MyAwIDAgMC0yLjY5Mi0xLjExNWwtLjI5Mi4xNmMtLjc2NC40MTUtMS42LS40Mi0xLjE4NC0xLjE4NWwuMTU5LS4yOTFBMS44NzMgMS44NzMgMCAwIDAgMS45NDUgOC45M2wtLjMxOS0uMDk0Yy0uODM1LS4yNDYtLjgzNS0xLjQyOCAwLTEuNjc0bC4zMTktLjA5NEExLjg3MyAxLjg3MyAwIDAgMCAzLjA2IDQuMzc3bC0uMTYtLjI5MmMtLjQxNS0uNzY0LjQyLTEuNiAxLjE4NS0xLjE4NGwuMjkyLjE1OWExLjg3MyAxLjg3MyAwIDAgMCAyLjY5Mi0xLjExNXonLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMy1nZWFyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0zLWdlYXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTMtZ2VhcjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMy1nZWFyOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0zLWdlYXI6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMy1nZWFyOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDQuNzU0YTMuMjQ2IDMuMjQ2IDAgMSAwIDAgNi40OTIgMy4yNDYgMy4yNDYgMCAwIDAgMC02LjQ5Mk01Ljc1NCA4YTIuMjQ2IDIuMjQ2IDAgMSAxIDQuNDkyIDAgMi4yNDYgMi4yNDYgMCAwIDEtNC40OTIgMCcvJTNFJTNDcGF0aCBkPSdNOS43OTYgMS4zNDNjLS41MjctMS43OS0zLjA2NS0xLjc5LTMuNTkyIDBsLS4wOTQuMzE5YS44NzMuODczIDAgMCAxLTEuMjU1LjUybC0uMjkyLS4xNmMtMS42NC0uODkyLTMuNDMzLjkwMi0yLjU0IDIuNTQxbC4xNTkuMjkyYS44NzMuODczIDAgMCAxLS41MiAxLjI1NWwtLjMxOS4wOTRjLTEuNzkuNTI3LTEuNzkgMy4wNjUgMCAzLjU5MmwuMzE5LjA5NGEuODczLjg3MyAwIDAgMSAuNTIgMS4yNTVsLS4xNi4yOTJjLS44OTIgMS42NC45MDEgMy40MzQgMi41NDEgMi41NGwuMjkyLS4xNTlhLjg3My44NzMgMCAwIDEgMS4yNTUuNTJsLjA5NC4zMTljLjUyNyAxLjc5IDMuMDY1IDEuNzkgMy41OTIgMGwuMDk0LS4zMTlhLjg3My44NzMgMCAwIDEgMS4yNTUtLjUybC4yOTIuMTZjMS42NC44OTMgMy40MzQtLjkwMiAyLjU0LTIuNTQxbC0uMTU5LS4yOTJhLjg3My44NzMgMCAwIDEgLjUyLTEuMjU1bC4zMTktLjA5NGMxLjc5LS41MjcgMS43OS0zLjA2NSAwLTMuNTkybC0uMzE5LS4wOTRhLjg3My44NzMgMCAwIDEtLjUyLTEuMjU1bC4xNi0uMjkyYy44OTMtMS42NC0uOTAyLTMuNDMzLTIuNTQxLTIuNTRsLS4yOTIuMTU5YS44NzMuODczIDAgMCAxLTEuMjU1LS41MnptLTIuNjMzLjI4M2MuMjQ2LS44MzUgMS40MjgtLjgzNSAxLjY3NCAwbC4wOTQuMzE5YTEuODczIDEuODczIDAgMCAwIDIuNjkzIDEuMTE1bC4yOTEtLjE2Yy43NjQtLjQxNSAxLjYuNDIgMS4xODQgMS4xODVsLS4xNTkuMjkyYTEuODczIDEuODczIDAgMCAwIDEuMTE2IDIuNjkybC4zMTguMDk0Yy44MzUuMjQ2LjgzNSAxLjQyOCAwIDEuNjc0bC0uMzE5LjA5NGExLjg3MyAxLjg3MyAwIDAgMC0xLjExNSAyLjY5M2wuMTYuMjkxYy40MTUuNzY0LS40MiAxLjYtMS4xODUgMS4xODRsLS4yOTEtLjE1OWExLjg3MyAxLjg3MyAwIDAgMC0yLjY5MyAxLjExNmwtLjA5NC4zMThjLS4yNDYuODM1LTEuNDI4LjgzNS0xLjY3NCAwbC0uMDk0LS4zMTlhMS44NzMgMS44NzMgMCAwIDAtMi42OTItMS4xMTVsLS4yOTIuMTZjLS43NjQuNDE1LTEuNi0uNDItMS4xODQtMS4xODVsLjE1OS0uMjkxQTEuODczIDEuODczIDAgMCAwIDEuOTQ1IDguOTNsLS4zMTktLjA5NGMtLjgzNS0uMjQ2LS44MzUtMS40MjggMC0xLjY3NGwuMzE5LS4wOTRBMS44NzMgMS44NzMgMCAwIDAgMy4wNiA0LjM3N2wtLjE2LS4yOTJjLS40MTUtLjc2NC40Mi0xLjYgMS4xODUtMS4xODRsLjI5Mi4xNTlhMS44NzMgMS44NzMgMCAwIDAgMi42OTItMS4xMTV6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCA0Ljc1NGEzLjI0NiAzLjI0NiAwIDEgMCAwIDYuNDkyIDMuMjQ2IDMuMjQ2IDAgMCAwIDAtNi40OTJNNS43NTQgOGEyLjI0NiAyLjI0NiAwIDEgMSA0LjQ5MiAwIDIuMjQ2IDIuMjQ2IDAgMCAxLTQuNDkyIDAnLyUzRSUzQ3BhdGggZD0nTTkuNzk2IDEuMzQzYy0uNTI3LTEuNzktMy4wNjUtMS43OS0zLjU5MiAwbC0uMDk0LjMxOWEuODczLjg3MyAwIDAgMS0xLjI1NS41MmwtLjI5Mi0uMTZjLTEuNjQtLjg5Mi0zLjQzMy45MDItMi41NCAyLjU0MWwuMTU5LjI5MmEuODczLjg3MyAwIDAgMS0uNTIgMS4yNTVsLS4zMTkuMDk0Yy0xLjc5LjUyNy0xLjc5IDMuMDY1IDAgMy41OTJsLjMxOS4wOTRhLjg3My44NzMgMCAwIDEgLjUyIDEuMjU1bC0uMTYuMjkyYy0uODkyIDEuNjQuOTAxIDMuNDM0IDIuNTQxIDIuNTRsLjI5Mi0uMTU5YS44NzMuODczIDAgMCAxIDEuMjU1LjUybC4wOTQuMzE5Yy41MjcgMS43OSAzLjA2NSAxLjc5IDMuNTkyIDBsLjA5NC0uMzE5YS44NzMuODczIDAgMCAxIDEuMjU1LS41MmwuMjkyLjE2YzEuNjQuODkzIDMuNDM0LS45MDIgMi41NC0yLjU0MWwtLjE1OS0uMjkyYS44NzMuODczIDAgMCAxIC41Mi0xLjI1NWwuMzE5LS4wOTRjMS43OS0uNTI3IDEuNzktMy4wNjUgMC0zLjU5MmwtLjMxOS0uMDk0YS44NzMuODczIDAgMCAxLS41Mi0xLjI1NWwuMTYtLjI5MmMuODkzLTEuNjQtLjkwMi0zLjQzMy0yLjU0MS0yLjU0bC0uMjkyLjE1OWEuODczLjg3MyAwIDAgMS0xLjI1NS0uNTJ6bS0yLjYzMy4yODNjLjI0Ni0uODM1IDEuNDI4LS44MzUgMS42NzQgMGwuMDk0LjMxOWExLjg3MyAxLjg3MyAwIDAgMCAyLjY5MyAxLjExNWwuMjkxLS4xNmMuNzY0LS40MTUgMS42LjQyIDEuMTg0IDEuMTg1bC0uMTU5LjI5MmExLjg3MyAxLjg3MyAwIDAgMCAxLjExNiAyLjY5MmwuMzE4LjA5NGMuODM1LjI0Ni44MzUgMS40MjggMCAxLjY3NGwtLjMxOS4wOTRhMS44NzMgMS44NzMgMCAwIDAtMS4xMTUgMi42OTNsLjE2LjI5MWMuNDE1Ljc2NC0uNDIgMS42LTEuMTg1IDEuMTg0bC0uMjkxLS4xNTlhMS44NzMgMS44NzMgMCAwIDAtMi42OTMgMS4xMTZsLS4wOTQuMzE4Yy0uMjQ2LjgzNS0xLjQyOC44MzUtMS42NzQgMGwtLjA5NC0uMzE5YTEuODczIDEuODczIDAgMCAwLTIuNjkyLTEuMTE1bC0uMjkyLjE2Yy0uNzY0LjQxNS0xLjYtLjQyLTEuMTg0LTEuMTg1bC4xNTktLjI5MUExLjg3MyAxLjg3MyAwIDAgMCAxLjk0NSA4LjkzbC0uMzE5LS4wOTRjLS44MzUtLjI0Ni0uODM1LTEuNDI4IDAtMS42NzRsLjMxOS0uMDk0QTEuODczIDEuODczIDAgMCAwIDMuMDYgNC4zNzdsLS4xNi0uMjkyYy0uNDE1LS43NjQuNDItMS42IDEuMTg1LTEuMTg0bC4yOTIuMTU5YTEuODczIDEuODczIDAgMCAwIDIuNjkyLTEuMTE1eicvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS00LWdlYXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTQtZ2VhcjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktNC1nZWFyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWljb24tcHJpbWFyeS00LWdlYXI6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTQtZ2VhcjpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS00LWdlYXI6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggNC43NTRhMy4yNDYgMy4yNDYgMCAxIDAgMCA2LjQ5MiAzLjI0NiAzLjI0NiAwIDAgMCAwLTYuNDkyTTUuNzU0IDhhMi4yNDYgMi4yNDYgMCAxIDEgNC40OTIgMCAyLjI0NiAyLjI0NiAwIDAgMS00LjQ5MiAwJy8lM0UlM0NwYXRoIGQ9J005Ljc5NiAxLjM0M2MtLjUyNy0xLjc5LTMuMDY1LTEuNzktMy41OTIgMGwtLjA5NC4zMTlhLjg3My44NzMgMCAwIDEtMS4yNTUuNTJsLS4yOTItLjE2Yy0xLjY0LS44OTItMy40MzMuOTAyLTIuNTQgMi41NDFsLjE1OS4yOTJhLjg3My44NzMgMCAwIDEtLjUyIDEuMjU1bC0uMzE5LjA5NGMtMS43OS41MjctMS43OSAzLjA2NSAwIDMuNTkybC4zMTkuMDk0YS44NzMuODczIDAgMCAxIC41MiAxLjI1NWwtLjE2LjI5MmMtLjg5MiAxLjY0LjkwMSAzLjQzNCAyLjU0MSAyLjU0bC4yOTItLjE1OWEuODczLjg3MyAwIDAgMSAxLjI1NS41MmwuMDk0LjMxOWMuNTI3IDEuNzkgMy4wNjUgMS43OSAzLjU5MiAwbC4wOTQtLjMxOWEuODczLjg3MyAwIDAgMSAxLjI1NS0uNTJsLjI5Mi4xNmMxLjY0Ljg5MyAzLjQzNC0uOTAyIDIuNTQtMi41NDFsLS4xNTktLjI5MmEuODczLjg3MyAwIDAgMSAuNTItMS4yNTVsLjMxOS0uMDk0YzEuNzktLjUyNyAxLjc5LTMuMDY1IDAtMy41OTJsLS4zMTktLjA5NGEuODczLjg3MyAwIDAgMS0uNTItMS4yNTVsLjE2LS4yOTJjLjg5My0xLjY0LS45MDItMy40MzMtMi41NDEtMi41NGwtLjI5Mi4xNTlhLjg3My44NzMgMCAwIDEtMS4yNTUtLjUyem0tMi42MzMuMjgzYy4yNDYtLjgzNSAxLjQyOC0uODM1IDEuNjc0IDBsLjA5NC4zMTlhMS44NzMgMS44NzMgMCAwIDAgMi42OTMgMS4xMTVsLjI5MS0uMTZjLjc2NC0uNDE1IDEuNi40MiAxLjE4NCAxLjE4NWwtLjE1OS4yOTJhMS44NzMgMS44NzMgMCAwIDAgMS4xMTYgMi42OTJsLjMxOC4wOTRjLjgzNS4yNDYuODM1IDEuNDI4IDAgMS42NzRsLS4zMTkuMDk0YTEuODczIDEuODczIDAgMCAwLTEuMTE1IDIuNjkzbC4xNi4yOTFjLjQxNS43NjQtLjQyIDEuNi0xLjE4NSAxLjE4NGwtLjI5MS0uMTU5YTEuODczIDEuODczIDAgMCAwLTIuNjkzIDEuMTE2bC0uMDk0LjMxOGMtLjI0Ni44MzUtMS40MjguODM1LTEuNjc0IDBsLS4wOTQtLjMxOWExLjg3MyAxLjg3MyAwIDAgMC0yLjY5Mi0xLjExNWwtLjI5Mi4xNmMtLjc2NC40MTUtMS42LS40Mi0xLjE4NC0xLjE4NWwuMTU5LS4yOTFBMS44NzMgMS44NzMgMCAwIDAgMS45NDUgOC45M2wtLjMxOS0uMDk0Yy0uODM1LS4yNDYtLjgzNS0xLjQyOCAwLTEuNjc0bC4zMTktLjA5NEExLjg3MyAxLjg3MyAwIDAgMCAzLjA2IDQuMzc3bC0uMTYtLjI5MmMtLjQxNS0uNzY0LjQyLTEuNiAxLjE4NS0xLjE4NGwuMjkyLjE1OWExLjg3MyAxLjg3MyAwIDAgMCAyLjY5Mi0xLjExNXonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDQuNzU0YTMuMjQ2IDMuMjQ2IDAgMSAwIDAgNi40OTIgMy4yNDYgMy4yNDYgMCAwIDAgMC02LjQ5Mk01Ljc1NCA4YTIuMjQ2IDIuMjQ2IDAgMSAxIDQuNDkyIDAgMi4yNDYgMi4yNDYgMCAwIDEtNC40OTIgMCcvJTNFJTNDcGF0aCBkPSdNOS43OTYgMS4zNDNjLS41MjctMS43OS0zLjA2NS0xLjc5LTMuNTkyIDBsLS4wOTQuMzE5YS44NzMuODczIDAgMCAxLTEuMjU1LjUybC0uMjkyLS4xNmMtMS42NC0uODkyLTMuNDMzLjkwMi0yLjU0IDIuNTQxbC4xNTkuMjkyYS44NzMuODczIDAgMCAxLS41MiAxLjI1NWwtLjMxOS4wOTRjLTEuNzkuNTI3LTEuNzkgMy4wNjUgMCAzLjU5MmwuMzE5LjA5NGEuODczLjg3MyAwIDAgMSAuNTIgMS4yNTVsLS4xNi4yOTJjLS44OTIgMS42NC45MDEgMy40MzQgMi41NDEgMi41NGwuMjkyLS4xNTlhLjg3My44NzMgMCAwIDEgMS4yNTUuNTJsLjA5NC4zMTljLjUyNyAxLjc5IDMuMDY1IDEuNzkgMy41OTIgMGwuMDk0LS4zMTlhLjg3My44NzMgMCAwIDEgMS4yNTUtLjUybC4yOTIuMTZjMS42NC44OTMgMy40MzQtLjkwMiAyLjU0LTIuNTQxbC0uMTU5LS4yOTJhLjg3My44NzMgMCAwIDEgLjUyLTEuMjU1bC4zMTktLjA5NGMxLjc5LS41MjcgMS43OS0zLjA2NSAwLTMuNTkybC0uMzE5LS4wOTRhLjg3My44NzMgMCAwIDEtLjUyLTEuMjU1bC4xNi0uMjkyYy44OTMtMS42NC0uOTAyLTMuNDMzLTIuNTQxLTIuNTRsLS4yOTIuMTU5YS44NzMuODczIDAgMCAxLTEuMjU1LS41MnptLTIuNjMzLjI4M2MuMjQ2LS44MzUgMS40MjgtLjgzNSAxLjY3NCAwbC4wOTQuMzE5YTEuODczIDEuODczIDAgMCAwIDIuNjkzIDEuMTE1bC4yOTEtLjE2Yy43NjQtLjQxNSAxLjYuNDIgMS4xODQgMS4xODVsLS4xNTkuMjkyYTEuODczIDEuODczIDAgMCAwIDEuMTE2IDIuNjkybC4zMTguMDk0Yy44MzUuMjQ2LjgzNSAxLjQyOCAwIDEuNjc0bC0uMzE5LjA5NGExLjg3MyAxLjg3MyAwIDAgMC0xLjExNSAyLjY5M2wuMTYuMjkxYy40MTUuNzY0LS40MiAxLjYtMS4xODUgMS4xODRsLS4yOTEtLjE1OWExLjg3MyAxLjg3MyAwIDAgMC0yLjY5MyAxLjExNmwtLjA5NC4zMThjLS4yNDYuODM1LTEuNDI4LjgzNS0xLjY3NCAwbC0uMDk0LS4zMTlhMS44NzMgMS44NzMgMCAwIDAtMi42OTItMS4xMTVsLS4yOTIuMTZjLS43NjQuNDE1LTEuNi0uNDItMS4xODQtMS4xODVsLjE1OS0uMjkxQTEuODczIDEuODczIDAgMCAwIDEuOTQ1IDguOTNsLS4zMTktLjA5NGMtLjgzNS0uMjQ2LS44MzUtMS40MjggMC0xLjY3NGwuMzE5LS4wOTRBMS44NzMgMS44NzMgMCAwIDAgMy4wNiA0LjM3N2wtLjE2LS4yOTJjLS40MTUtLjc2NC40Mi0xLjYgMS4xODUtMS4xODRsLjI5Mi4xNTlhMS44NzMgMS44NzMgMCAwIDAgMi42OTItMS4xMTV6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTEtaG9tZTpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWljb24tdGVydGlhcnktMS1ob21lOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS0xLWhvbWU6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTEtaG9tZTpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMS1ob21lOmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTEtaG9tZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOC43MDcgMS41YTEgMSAwIDAgMC0xLjQxNCAwTC42NDYgOC4xNDZhLjUuNSAwIDAgMCAuNzA4LjcwOEwyIDguMjA3VjEzLjVBMS41IDEuNSAwIDAgMCAzLjUgMTVoOWExLjUgMS41IDAgMCAwIDEuNS0xLjVWOC4yMDdsLjY0Ni42NDdhLjUuNSAwIDAgMCAuNzA4LS43MDhMMTMgNS43OTNWMi41YS41LjUgMCAwIDAtLjUtLjVoLTFhLjUuNSAwIDAgMC0uNS41djEuMjkzek0xMyA3LjIwN1YxMy41YS41LjUgMCAwIDEtLjUuNWgtOWEuNS41IDAgMCAxLS41LS41VjcuMjA3bDUtNXonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004LjcwNyAxLjVhMSAxIDAgMCAwLTEuNDE0IDBMLjY0NiA4LjE0NmEuNS41IDAgMCAwIC43MDguNzA4TDIgOC4yMDdWMTMuNUExLjUgMS41IDAgMCAwIDMuNSAxNWg5YTEuNSAxLjUgMCAwIDAgMS41LTEuNVY4LjIwN2wuNjQ2LjY0N2EuNS41IDAgMCAwIC43MDgtLjcwOEwxMyA1Ljc5M1YyLjVhLjUuNSAwIDAgMC0uNS0uNWgtMWEuNS41IDAgMCAwLS41LjV2MS4yOTN6TTEzIDcuMjA3VjEzLjVhLjUuNSAwIDAgMS0uNS41aC05YS41LjUgMCAwIDEtLjUtLjVWNy4yMDdsNS01eicvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0yLWhvbWU6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTItaG9tZTpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMi1ob21lOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWljb24tcHJpbWFyeS0yLWhvbWU6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTItaG9tZTpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0yLWhvbWU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTguNzA3IDEuNWExIDEgMCAwIDAtMS40MTQgMEwuNjQ2IDguMTQ2YS41LjUgMCAwIDAgLjcwOC43MDhMMiA4LjIwN1YxMy41QTEuNSAxLjUgMCAwIDAgMy41IDE1aDlhMS41IDEuNSAwIDAgMCAxLjUtMS41VjguMjA3bC42NDYuNjQ3YS41LjUgMCAwIDAgLjcwOC0uNzA4TDEzIDUuNzkzVjIuNWEuNS41IDAgMCAwLS41LS41aC0xYS41LjUgMCAwIDAtLjUuNXYxLjI5M3pNMTMgNy4yMDdWMTMuNWEuNS41IDAgMCAxLS41LjVoLTlhLjUuNSAwIDAgMS0uNS0uNVY3LjIwN2w1LTV6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOC43MDcgMS41YTEgMSAwIDAgMC0xLjQxNCAwTC42NDYgOC4xNDZhLjUuNSAwIDAgMCAuNzA4LjcwOEwyIDguMjA3VjEzLjVBMS41IDEuNSAwIDAgMCAzLjUgMTVoOWExLjUgMS41IDAgMCAwIDEuNS0xLjVWOC4yMDdsLjY0Ni42NDdhLjUuNSAwIDAgMCAuNzA4LS43MDhMMTMgNS43OTNWMi41YS41LjUgMCAwIDAtLjUtLjVoLTFhLjUuNSAwIDAgMC0uNS41djEuMjkzek0xMyA3LjIwN1YxMy41YS41LjUgMCAwIDEtLjUuNWgtOWEuNS41IDAgMCAxLS41LS41VjcuMjA3bDUtNXonLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMy1ob21lOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0zLWhvbWU6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTMtaG9tZTpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMy1ob21lOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0zLWhvbWU6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMy1ob21lOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004LjcwNyAxLjVhMSAxIDAgMCAwLTEuNDE0IDBMLjY0NiA4LjE0NmEuNS41IDAgMCAwIC43MDguNzA4TDIgOC4yMDdWMTMuNUExLjUgMS41IDAgMCAwIDMuNSAxNWg5YTEuNSAxLjUgMCAwIDAgMS41LTEuNVY4LjIwN2wuNjQ2LjY0N2EuNS41IDAgMCAwIC43MDgtLjcwOEwxMyA1Ljc5M1YyLjVhLjUuNSAwIDAgMC0uNS0uNWgtMWEuNS41IDAgMCAwLS41LjV2MS4yOTN6TTEzIDcuMjA3VjEzLjVhLjUuNSAwIDAgMS0uNS41aC05YS41LjUgMCAwIDEtLjUtLjVWNy4yMDdsNS01eicvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTguNzA3IDEuNWExIDEgMCAwIDAtMS40MTQgMEwuNjQ2IDguMTQ2YS41LjUgMCAwIDAgLjcwOC43MDhMMiA4LjIwN1YxMy41QTEuNSAxLjUgMCAwIDAgMy41IDE1aDlhMS41IDEuNSAwIDAgMCAxLjUtMS41VjguMjA3bC42NDYuNjQ3YS41LjUgMCAwIDAgLjcwOC0uNzA4TDEzIDUuNzkzVjIuNWEuNS41IDAgMCAwLS41LS41aC0xYS41LjUgMCAwIDAtLjUuNXYxLjI5M3pNMTMgNy4yMDdWMTMuNWEuNS41IDAgMCAxLS41LjVoLTlhLjUuNSAwIDAgMS0uNS0uNVY3LjIwN2w1LTV6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTQtaG9tZTpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWljb24tdGVydGlhcnktNC1ob21lOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS00LWhvbWU6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTQtaG9tZTpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktNC1ob21lOmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTQtaG9tZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOC43MDcgMS41YTEgMSAwIDAgMC0xLjQxNCAwTC42NDYgOC4xNDZhLjUuNSAwIDAgMCAuNzA4LjcwOEwyIDguMjA3VjEzLjVBMS41IDEuNSAwIDAgMCAzLjUgMTVoOWExLjUgMS41IDAgMCAwIDEuNS0xLjVWOC4yMDdsLjY0Ni42NDdhLjUuNSAwIDAgMCAuNzA4LS43MDhMMTMgNS43OTNWMi41YS41LjUgMCAwIDAtLjUtLjVoLTFhLjUuNSAwIDAgMC0uNS41djEuMjkzek0xMyA3LjIwN1YxMy41YS41LjUgMCAwIDEtLjUuNWgtOWEuNS41IDAgMCAxLS41LS41VjcuMjA3bDUtNXonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004LjcwNyAxLjVhMSAxIDAgMCAwLTEuNDE0IDBMLjY0NiA4LjE0NmEuNS41IDAgMCAwIC43MDguNzA4TDIgOC4yMDdWMTMuNUExLjUgMS41IDAgMCAwIDMuNSAxNWg5YTEuNSAxLjUgMCAwIDAgMS41LTEuNVY4LjIwN2wuNjQ2LjY0N2EuNS41IDAgMCAwIC43MDgtLjcwOEwxMyA1Ljc5M1YyLjVhLjUuNSAwIDAgMC0uNS0uNWgtMWEuNS41IDAgMCAwLS41LjV2MS4yOTN6TTEzIDcuMjA3VjEzLjVhLjUuNSAwIDAgMS0uNS41aC05YS41LjUgMCAwIDEtLjUtLjVWNy4yMDdsNS01eicvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS0xLWNvdW50ZXJjbG9ja3dpc2U6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTEtY291bnRlcmNsb2Nrd2lzZTpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMS1jb3VudGVyY2xvY2t3aXNlOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWljb24tcHJpbWFyeS0xLWNvdW50ZXJjbG9ja3dpc2U6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTEtY291bnRlcmNsb2Nrd2lzZTpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0xLWNvdW50ZXJjbG9ja3dpc2U6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBkPSdNOCAzYTUgNSAwIDEgMS00LjU0NiAyLjkxNC41LjUgMCAwIDAtLjkwOC0uNDE3QTYgNiAwIDEgMCA4IDJ6Jy8lM0UlM0NwYXRoIGQ9J004IDQuNDY2Vi41MzRhLjI1LjI1IDAgMCAwLS40MS0uMTkyTDUuMjMgMi4zMDhhLjI1LjI1IDAgMCAwIDAgLjM4NGwyLjM2IDEuOTY2QS4yNS4yNSAwIDAgMCA4IDQuNDY2Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGQ9J004IDNhNSA1IDAgMSAxLTQuNTQ2IDIuOTE0LjUuNSAwIDAgMC0uOTA4LS40MTdBNiA2IDAgMSAwIDggMnonLyUzRSUzQ3BhdGggZD0nTTggNC40NjZWLjUzNGEuMjUuMjUgMCAwIDAtLjQxLS4xOTJMNS4yMyAyLjMwOGEuMjUuMjUgMCAwIDAgMCAuMzg0bDIuMzYgMS45NjZBLjI1LjI1IDAgMCAwIDggNC40NjYnLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXByaW1hcnktMi1jb3VudGVyY2xvY2t3aXNlOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS0yLWNvdW50ZXJjbG9ja3dpc2U6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTItY291bnRlcmNsb2Nrd2lzZTpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1pY29uLXByaW1hcnktMi1jb3VudGVyY2xvY2t3aXNlOmJlZm9yZSwubW9uc3Rlci1pY29uLXNlY29uZGFyeS0yLWNvdW50ZXJjbG9ja3dpc2U6YmVmb3JlLC5tb25zdGVyLWljb24tdGVydGlhcnktMi1jb3VudGVyY2xvY2t3aXNlOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgZD0nTTggM2E1IDUgMCAxIDEtNC41NDYgMi45MTQuNS41IDAgMCAwLS45MDgtLjQxN0E2IDYgMCAxIDAgOCAyeicvJTNFJTNDcGF0aCBkPSdNOCA0LjQ2NlYuNTM0YS4yNS4yNSAwIDAgMC0uNDEtLjE5Mkw1LjIzIDIuMzA4YS4yNS4yNSAwIDAgMCAwIC4zODRsMi4zNiAxLjk2NkEuMjUuMjUgMCAwIDAgOCA0LjQ2NicvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBkPSdNOCAzYTUgNSAwIDEgMS00LjU0NiAyLjkxNC41LjUgMCAwIDAtLjkwOC0uNDE3QTYgNiAwIDEgMCA4IDJ6Jy8lM0UlM0NwYXRoIGQ9J004IDQuNDY2Vi41MzRhLjI1LjI1IDAgMCAwLS40MS0uMTkyTDUuMjMgMi4zMDhhLjI1LjI1IDAgMCAwIDAgLjM4NGwyLjM2IDEuOTY2QS4yNS4yNSAwIDAgMCA4IDQuNDY2Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTMtY291bnRlcmNsb2Nrd2lzZTpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWljb24tdGVydGlhcnktMy1jb3VudGVyY2xvY2t3aXNlOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1pY29uLXNlY29uZGFyeS0zLWNvdW50ZXJjbG9ja3dpc2U6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItaWNvbi1wcmltYXJ5LTMtY291bnRlcmNsb2Nrd2lzZTpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktMy1jb3VudGVyY2xvY2t3aXNlOmJlZm9yZSwubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTMtY291bnRlcmNsb2Nrd2lzZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGQ9J004IDNhNSA1IDAgMSAxLTQuNTQ2IDIuOTE0LjUuNSAwIDAgMC0uOTA4LS40MTdBNiA2IDAgMSAwIDggMnonLyUzRSUzQ3BhdGggZD0nTTggNC40NjZWLjUzNGEuMjUuMjUgMCAwIDAtLjQxLS4xOTJMNS4yMyAyLjMwOGEuMjUuMjUgMCAwIDAgMCAuMzg0bDIuMzYgMS45NjZBLjI1LjI1IDAgMCAwIDggNC40NjYnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgZD0nTTggM2E1IDUgMCAxIDEtNC41NDYgMi45MTQuNS41IDAgMCAwLS45MDgtLjQxN0E2IDYgMCAxIDAgOCAyeicvJTNFJTNDcGF0aCBkPSdNOCA0LjQ2NlYuNTM0YS4yNS4yNSAwIDAgMC0uNDEtLjE5Mkw1LjIzIDIuMzA4YS4yNS4yNSAwIDAgMCAwIC4zODRsMi4zNiAxLjk2NkEuMjUuMjUgMCAwIDAgOCA0LjQ2NicvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tcHJpbWFyeS00LWNvdW50ZXJjbG9ja3dpc2U6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1pY29uLXRlcnRpYXJ5LTQtY291bnRlcmNsb2Nrd2lzZTpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItaWNvbi1zZWNvbmRhcnktNC1jb3VudGVyY2xvY2t3aXNlOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWljb24tcHJpbWFyeS00LWNvdW50ZXJjbG9ja3dpc2U6YmVmb3JlLC5tb25zdGVyLWljb24tc2Vjb25kYXJ5LTQtY291bnRlcmNsb2Nrd2lzZTpiZWZvcmUsLm1vbnN0ZXItaWNvbi10ZXJ0aWFyeS00LWNvdW50ZXJjbG9ja3dpc2U6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBkPSdNOCAzYTUgNSAwIDEgMS00LjU0NiAyLjkxNC41LjUgMCAwIDAtLjkwOC0uNDE3QTYgNiAwIDEgMCA4IDJ6Jy8lM0UlM0NwYXRoIGQ9J004IDQuNDY2Vi41MzRhLjI1LjI1IDAgMCAwLS40MS0uMTkyTDUuMjMgMi4zMDhhLjI1LjI1IDAgMCAwIDAgLjM4NGwyLjM2IDEuOTY2QS4yNS4yNSAwIDAgMCA4IDQuNDY2Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGQ9J004IDNhNSA1IDAgMSAxLTQuNTQ2IDIuOTE0LjUuNSAwIDAgMC0uOTA4LS40MTdBNiA2IDAgMSAwIDggMnonLyUzRSUzQ3BhdGggZD0nTTggNC40NjZWLjUzNGEuMjUuMjUgMCAwIDAtLjQxLS4xOTJMNS4yMyAyLjMwOGEuMjUuMjUgMCAwIDAgMCAuMzg0bDIuMzYgMS45NjZBLjI1LjI1IDAgMCAwIDggNC40NjYnLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjFlbX0ubW9uc3Rlci1pY29uLXN1Y2Nlc3MtMjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTIpOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J20xMC45NyA0Ljk3LS4wMi4wMjItMy40NzMgNC40MjUtMi4wOTMtMi4wOTRhLjc1Ljc1IDAgMCAwLTEuMDYgMS4wNkw2Ljk3IDExLjAzYS43NS43NSAwIDAgMCAxLjA3OS0uMDJsMy45OTItNC45OWEuNzUuNzUgMCAwIDAtMS4wNzEtMS4wNScvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdtMTAuOTcgNC45Ny0uMDIuMDIyLTMuNDczIDQuNDI1LTIuMDkzLTIuMDk0YS43NS43NSAwIDAgMC0xLjA2IDEuMDZMNi45NyAxMS4wM2EuNzUuNzUgMCAwIDAgMS4wNzktLjAybDMuOTkyLTQuOTlhLjc1Ljc1IDAgMCAwLTEuMDcxLTEuMDUnLyUzRSUzQy9zdmclM0VcXFwiKX0ubW9uc3Rlci1pY29uLXdhcm5pbmctMjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTIpOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J003LjAwMiAxMWExIDEgMCAxIDEgMiAwIDEgMSAwIDAgMS0yIDBNNy4xIDQuOTk1YS45MDUuOTA1IDAgMSAxIDEuOCAwbC0uMzUgMy41MDdhLjU1Mi41NTIgMCAwIDEtMS4xIDB6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J003LjAwMiAxMWExIDEgMCAxIDEgMiAwIDEgMSAwIDAgMS0yIDBNNy4xIDQuOTk1YS45MDUuOTA1IDAgMSAxIDEuOCAwbC0uMzUgMy41MDdhLjU1Mi41NTIgMCAwIDEtMS4xIDB6Jy8lM0UlM0Mvc3ZnJTNFXFxcIil9Lm1vbnN0ZXItaWNvbi1lcnJvci0yOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yKTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNC42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCA3LjI5M2wyLjY0Ni0yLjY0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsMi42NDcgMi42NDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC0yLjY0NiAyLjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4IDQuNjQ2IDUuMzU0YS41LjUgMCAwIDEgMC0uNzA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J000LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMEw4IDcuMjkzbDIuNjQ2LTIuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC43MDcgOGwyLjY0NyAyLjY0NmEuNS41IDAgMCAxLS43MDguNzA4TDggOC43MDdsLTIuNjQ2IDIuNjQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4TDcuMjkzIDggNC42NDYgNS4zNTRhLjUuNSAwIDAgMSAwLS43MDgnLyUzRSUzQy9zdmclM0VcXFwiKX0ubW9uc3Rlci1pY29uLWVycm9yLTI6YmVmb3JlLC5tb25zdGVyLWljb24tc3VjY2Vzcy0yOmJlZm9yZSwubW9uc3Rlci1pY29uLXdhcm5pbmctMjpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MWVtOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MWVtfS5tb25zdGVyLWljb24tc3VjY2Vzcy0zOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMyk7LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nbTEwLjk3IDQuOTctLjAyLjAyMi0zLjQ3MyA0LjQyNS0yLjA5My0yLjA5NGEuNzUuNzUgMCAwIDAtMS4wNiAxLjA2TDYuOTcgMTEuMDNhLjc1Ljc1IDAgMCAwIDEuMDc5LS4wMmwzLjk5Mi00Ljk5YS43NS43NSAwIDAgMC0xLjA3MS0xLjA1Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J20xMC45NyA0Ljk3LS4wMi4wMjItMy40NzMgNC40MjUtMi4wOTMtMi4wOTRhLjc1Ljc1IDAgMCAwLTEuMDYgMS4wNkw2Ljk3IDExLjAzYS43NS43NSAwIDAgMCAxLjA3OS0uMDJsMy45OTItNC45OWEuNzUuNzUgMCAwIDAtMS4wNzEtMS4wNScvJTNFJTNDL3N2ZyUzRVxcXCIpfS5tb25zdGVyLWljb24td2FybmluZy0zOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMyk7LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgME03LjEgNC45OTVhLjkwNS45MDUgMCAxIDEgMS44IDBsLS4zNSAzLjUwN2EuNTUyLjU1MiAwIDAgMS0xLjEgMHonLyUzRSUzQy9zdmclM0VcXFwiKX0ubW9uc3Rlci1pY29uLWVycm9yLTM6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTMpOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J000LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMEw4IDcuMjkzbDIuNjQ2LTIuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC43MDcgOGwyLjY0NyAyLjY0NmEuNS41IDAgMCAxLS43MDguNzA4TDggOC43MDdsLTIuNjQ2IDIuNjQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4TDcuMjkzIDggNC42NDYgNS4zNTRhLjUuNSAwIDAgMSAwLS43MDgnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpfS5tb25zdGVyLWljb24tZXJyb3ItMzpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zdWNjZXNzLTM6YmVmb3JlLC5tb25zdGVyLWljb24td2FybmluZy0zOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1zdWNjZXNzLTE6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xKTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2JpIGJpLWNoZWNrLWNpcmNsZScgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdtMTAuOTcgNC45Ny0uMDIuMDIyLTMuNDczIDQuNDI1LTIuMDkzLTIuMDk0YS43NS43NSAwIDAgMC0xLjA2IDEuMDZMNi45NyAxMS4wM2EuNzUuNzUgMCAwIDAgMS4wNzktLjAybDMuOTkyLTQuOTlhLjc1Ljc1IDAgMCAwLTEuMDcxLTEuMDUnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIGNsYXNzPSdiaSBiaS1jaGVjay1jaXJjbGUnIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nbTEwLjk3IDQuOTctLjAyLjAyMi0zLjQ3MyA0LjQyNS0yLjA5My0yLjA5NGEuNzUuNzUgMCAwIDAtMS4wNiAxLjA2TDYuOTcgMTEuMDNhLjc1Ljc1IDAgMCAwIDEuMDc5LS4wMmwzLjk5Mi00Ljk5YS43NS43NSAwIDAgMC0xLjA3MS0xLjA1Jy8lM0UlM0Mvc3ZnJTNFXFxcIil9Lm1vbnN0ZXItaWNvbi13YXJuaW5nLTE6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0xKTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2JpIGJpLWV4Y2xhbWF0aW9uLWNpcmNsZScgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNy4wMDIgMTFhMSAxIDAgMSAxIDIgMCAxIDEgMCAwIDEtMiAwTTcuMSA0Ljk5NWEuOTA1LjkwNSAwIDEgMSAxLjggMGwtLjM1IDMuNTA3YS41NTIuNTUyIDAgMCAxLTEuMSAweicvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2JpIGJpLWV4Y2xhbWF0aW9uLWNpcmNsZScgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNy4wMDIgMTFhMSAxIDAgMSAxIDIgMCAxIDEgMCAwIDEtMiAwTTcuMSA0Ljk5NWEuOTA1LjkwNSAwIDEgMSAxLjggMGwtLjM1IDMuNTA3YS41NTIuNTUyIDAgMCAxLTEuMSAweicvJTNFJTNDL3N2ZyUzRVxcXCIpfS5tb25zdGVyLWljb24tZXJyb3ItMTpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMSk7LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIGNsYXNzPSdiaSBiaS14LWNpcmNsZScgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNC42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCA3LjI5M2wyLjY0Ni0yLjY0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsMi42NDcgMi42NDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC0yLjY0NiAyLjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4IDQuNjQ2IDUuMzU0YS41LjUgMCAwIDEgMC0uNzA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyBjbGFzcz0nYmkgYmkteC1jaXJjbGUnIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpfS5tb25zdGVyLWljb24tZXJyb3ItMTpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zdWNjZXNzLTE6YmVmb3JlLC5tb25zdGVyLWljb24td2FybmluZy0xOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19Lm1vbnN0ZXItaWNvbi1zdWNjZXNzLTQ6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00KTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2JpIGJpLWNoZWNrLWNpcmNsZScgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdtMTAuOTcgNC45Ny0uMDIuMDIyLTMuNDczIDQuNDI1LTIuMDkzLTIuMDk0YS43NS43NSAwIDAgMC0xLjA2IDEuMDZMNi45NyAxMS4wM2EuNzUuNzUgMCAwIDAgMS4wNzktLjAybDMuOTkyLTQuOTlhLjc1Ljc1IDAgMCAwLTEuMDcxLTEuMDUnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIGNsYXNzPSdiaSBiaS1jaGVjay1jaXJjbGUnIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nbTEwLjk3IDQuOTctLjAyLjAyMi0zLjQ3MyA0LjQyNS0yLjA5My0yLjA5NGEuNzUuNzUgMCAwIDAtMS4wNiAxLjA2TDYuOTcgMTEuMDNhLjc1Ljc1IDAgMCAwIDEuMDc5LS4wMmwzLjk5Mi00Ljk5YS43NS43NSAwIDAgMC0xLjA3MS0xLjA1Jy8lM0UlM0Mvc3ZnJTNFXFxcIil9Lm1vbnN0ZXItaWNvbi13YXJuaW5nLTQ6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy00KTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2JpIGJpLWV4Y2xhbWF0aW9uLWNpcmNsZScgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNy4wMDIgMTFhMSAxIDAgMSAxIDIgMCAxIDEgMCAwIDEtMiAwTTcuMSA0Ljk5NWEuOTA1LjkwNSAwIDEgMSAxLjggMGwtLjM1IDMuNTA3YS41NTIuNTUyIDAgMCAxLTEuMSAweicvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2JpIGJpLWV4Y2xhbWF0aW9uLWNpcmNsZScgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNy4wMDIgMTFhMSAxIDAgMSAxIDIgMCAxIDEgMCAwIDEtMiAwTTcuMSA0Ljk5NWEuOTA1LjkwNSAwIDEgMSAxLjggMGwtLjM1IDMuNTA3YS41NTIuNTUyIDAgMCAxLTEuMSAweicvJTNFJTNDL3N2ZyUzRVxcXCIpfS5tb25zdGVyLWljb24tZXJyb3ItNDpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItNCk7LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIGNsYXNzPSdiaSBiaS14LWNpcmNsZScgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNC42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCA3LjI5M2wyLjY0Ni0yLjY0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsMi42NDcgMi42NDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC0yLjY0NiAyLjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4IDQuNjQ2IDUuMzU0YS41LjUgMCAwIDEgMC0uNzA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyBjbGFzcz0nYmkgYmkteC1jaXJjbGUnIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J004IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTRtMCAxQTggOCAwIDEgMCA4IDBhOCA4IDAgMCAwIDAgMTYnLyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpfS5tb25zdGVyLWljb24tZXJyb3ItNDpiZWZvcmUsLm1vbnN0ZXItaWNvbi1zdWNjZXNzLTQ6YmVmb3JlLC5tb25zdGVyLWljb24td2FybmluZy00OmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxZW07LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxZW19YSxhOmFjdGl2ZSxhOmZvY3VzLGE6aG92ZXIsYTpsaW5rLGE6dmlzaXRlZHtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKTtvdXRsaW5lOm5vbmU7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dHJhbnNpdGlvbjpjb2xvciAuM3MgZWFzZS1pbi1vdXQsdGV4dC1kZWNvcmF0aW9uLWNvbG9yIC4zcyBlYXNlLWluLW91dH1hOmFjdGl2ZSxhOmZvY3VzLGE6aG92ZXJ7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7dGV4dC1kZWNvcmF0aW9uLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEgKTt0ZXh0LWRlY29yYXRpb24tdGhpY2tuZXNzOjFweDt0ZXh0LXVuZGVybGluZS1vZmZzZXQ6MnB4fWE6Zm9jdXN7b3V0bGluZToxcHggZGFzaGVkIHZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpO291dGxpbmUtb2Zmc2V0OjJweH1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspe2EsYTphY3RpdmUsYTpmb2N1cyxhOmhvdmVyLGE6bGluayxhOnZpc2l0ZWR7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1hbWJlci0yKX1hOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00KX19Lm1vbnN0ZXItc2tlbGV0b24tY29sLTEwey0tbW9uc3Rlci1za2VsZXRvbi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLXNrZWxldG9uLWhlaWdodDoxMDAlOy0tbW9uc3Rlci1za2VsZXRvbi13aWR0aDoxMCU7LS1tb25zdGVyLXNrZWxldG9uOmxpbmVhci1ncmFkaWVudCg5MGRlZyx2YXIoLS1tb25zdGVyLXNrZWxldG9uLWNvbG9yKSAwLHRyYW5zcGFyZW50IHZhcigtLW1vbnN0ZXItc2tlbGV0b24td2lkdGgpKX0ubW9uc3Rlci1za2VsZXRvbi1jb2wtMTAsLm1vbnN0ZXItc2tlbGV0b24tY29sLTIwe2JhY2tncm91bmQtaW1hZ2U6dmFyKC0tbW9uc3Rlci1za2VsZXRvbik7YmFja2dyb3VuZC1wb3NpdGlvbjowIDA7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTp2YXIoLS1tb25zdGVyLXNrZWxldG9uLXdpZHRoKSB2YXIoLS1tb25zdGVyLXNrZWxldG9uLWhlaWdodCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1za2VsZXRvbi1jb2xvcik7bWluLWhlaWdodDoxcHh9Lm1vbnN0ZXItc2tlbGV0b24tY29sLTIwey0tbW9uc3Rlci1za2VsZXRvbi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLXNrZWxldG9uLWhlaWdodDoxMDAlOy0tbW9uc3Rlci1za2VsZXRvbi13aWR0aDoyMCU7LS1tb25zdGVyLXNrZWxldG9uOmxpbmVhci1ncmFkaWVudCg5MGRlZyx2YXIoLS1tb25zdGVyLXNrZWxldG9uLWNvbG9yKSAwLHRyYW5zcGFyZW50IHZhcigtLW1vbnN0ZXItc2tlbGV0b24td2lkdGgpKX0ubW9uc3Rlci1za2VsZXRvbi1jb2wtMzB7LS1tb25zdGVyLXNrZWxldG9uLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItc2tlbGV0b24taGVpZ2h0OjEwMCU7LS1tb25zdGVyLXNrZWxldG9uLXdpZHRoOjMwJTstLW1vbnN0ZXItc2tlbGV0b246bGluZWFyLWdyYWRpZW50KDkwZGVnLHZhcigtLW1vbnN0ZXItc2tlbGV0b24tY29sb3IpIDAsdHJhbnNwYXJlbnQgdmFyKC0tbW9uc3Rlci1za2VsZXRvbi13aWR0aCkpfS5tb25zdGVyLXNrZWxldG9uLWNvbC0zMCwubW9uc3Rlci1za2VsZXRvbi1jb2wtNDB7YmFja2dyb3VuZC1pbWFnZTp2YXIoLS1tb25zdGVyLXNrZWxldG9uKTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMDtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOnZhcigtLW1vbnN0ZXItc2tlbGV0b24td2lkdGgpIHZhcigtLW1vbnN0ZXItc2tlbGV0b24taGVpZ2h0KTtjb2xvcjp2YXIoLS1tb25zdGVyLXNrZWxldG9uLWNvbG9yKTttaW4taGVpZ2h0OjFweH0ubW9uc3Rlci1za2VsZXRvbi1jb2wtNDB7LS1tb25zdGVyLXNrZWxldG9uLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItc2tlbGV0b24taGVpZ2h0OjEwMCU7LS1tb25zdGVyLXNrZWxldG9uLXdpZHRoOjQwJTstLW1vbnN0ZXItc2tlbGV0b246bGluZWFyLWdyYWRpZW50KDkwZGVnLHZhcigtLW1vbnN0ZXItc2tlbGV0b24tY29sb3IpIDAsdHJhbnNwYXJlbnQgdmFyKC0tbW9uc3Rlci1za2VsZXRvbi13aWR0aCkpfS5tb25zdGVyLXNrZWxldG9uLWNvbC01MHstLW1vbnN0ZXItc2tlbGV0b24tY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1za2VsZXRvbi1oZWlnaHQ6MTAwJTstLW1vbnN0ZXItc2tlbGV0b24td2lkdGg6NTAlOy0tbW9uc3Rlci1za2VsZXRvbjpsaW5lYXItZ3JhZGllbnQoOTBkZWcsdmFyKC0tbW9uc3Rlci1za2VsZXRvbi1jb2xvcikgMCx0cmFuc3BhcmVudCB2YXIoLS1tb25zdGVyLXNrZWxldG9uLXdpZHRoKSl9Lm1vbnN0ZXItc2tlbGV0b24tY29sLTUwLC5tb25zdGVyLXNrZWxldG9uLWNvbC02MHtiYWNrZ3JvdW5kLWltYWdlOnZhcigtLW1vbnN0ZXItc2tlbGV0b24pO2JhY2tncm91bmQtcG9zaXRpb246MCAwO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXNpemU6dmFyKC0tbW9uc3Rlci1za2VsZXRvbi13aWR0aCkgdmFyKC0tbW9uc3Rlci1za2VsZXRvbi1oZWlnaHQpO2NvbG9yOnZhcigtLW1vbnN0ZXItc2tlbGV0b24tY29sb3IpO21pbi1oZWlnaHQ6MXB4fS5tb25zdGVyLXNrZWxldG9uLWNvbC02MHstLW1vbnN0ZXItc2tlbGV0b24tY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1za2VsZXRvbi1oZWlnaHQ6MTAwJTstLW1vbnN0ZXItc2tlbGV0b24td2lkdGg6NjAlOy0tbW9uc3Rlci1za2VsZXRvbjpsaW5lYXItZ3JhZGllbnQoOTBkZWcsdmFyKC0tbW9uc3Rlci1za2VsZXRvbi1jb2xvcikgMCx0cmFuc3BhcmVudCB2YXIoLS1tb25zdGVyLXNrZWxldG9uLXdpZHRoKSl9Lm1vbnN0ZXItc2tlbGV0b24tY29sLTcwey0tbW9uc3Rlci1za2VsZXRvbi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLXNrZWxldG9uLWhlaWdodDoxMDAlOy0tbW9uc3Rlci1za2VsZXRvbi13aWR0aDo3MCU7LS1tb25zdGVyLXNrZWxldG9uOmxpbmVhci1ncmFkaWVudCg5MGRlZyx2YXIoLS1tb25zdGVyLXNrZWxldG9uLWNvbG9yKSAwLHRyYW5zcGFyZW50IHZhcigtLW1vbnN0ZXItc2tlbGV0b24td2lkdGgpKX0ubW9uc3Rlci1za2VsZXRvbi1jb2wtNzAsLm1vbnN0ZXItc2tlbGV0b24tY29sLTgwe2JhY2tncm91bmQtaW1hZ2U6dmFyKC0tbW9uc3Rlci1za2VsZXRvbik7YmFja2dyb3VuZC1wb3NpdGlvbjowIDA7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTp2YXIoLS1tb25zdGVyLXNrZWxldG9uLXdpZHRoKSB2YXIoLS1tb25zdGVyLXNrZWxldG9uLWhlaWdodCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1za2VsZXRvbi1jb2xvcik7bWluLWhlaWdodDoxcHh9Lm1vbnN0ZXItc2tlbGV0b24tY29sLTgwey0tbW9uc3Rlci1za2VsZXRvbi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLXNrZWxldG9uLWhlaWdodDoxMDAlOy0tbW9uc3Rlci1za2VsZXRvbi13aWR0aDo4MCU7LS1tb25zdGVyLXNrZWxldG9uOmxpbmVhci1ncmFkaWVudCg5MGRlZyx2YXIoLS1tb25zdGVyLXNrZWxldG9uLWNvbG9yKSAwLHRyYW5zcGFyZW50IHZhcigtLW1vbnN0ZXItc2tlbGV0b24td2lkdGgpKX0ubW9uc3Rlci1za2VsZXRvbi1jb2wtOTB7LS1tb25zdGVyLXNrZWxldG9uLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItc2tlbGV0b24taGVpZ2h0OjEwMCU7LS1tb25zdGVyLXNrZWxldG9uLXdpZHRoOjkwJTstLW1vbnN0ZXItc2tlbGV0b246bGluZWFyLWdyYWRpZW50KDkwZGVnLHZhcigtLW1vbnN0ZXItc2tlbGV0b24tY29sb3IpIDAsdHJhbnNwYXJlbnQgdmFyKC0tbW9uc3Rlci1za2VsZXRvbi13aWR0aCkpfS5tb25zdGVyLXNrZWxldG9uLWNvbC0xMDAsLm1vbnN0ZXItc2tlbGV0b24tY29sLTkwe2JhY2tncm91bmQtaW1hZ2U6dmFyKC0tbW9uc3Rlci1za2VsZXRvbik7YmFja2dyb3VuZC1wb3NpdGlvbjowIDA7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTp2YXIoLS1tb25zdGVyLXNrZWxldG9uLXdpZHRoKSB2YXIoLS1tb25zdGVyLXNrZWxldG9uLWhlaWdodCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1za2VsZXRvbi1jb2xvcik7bWluLWhlaWdodDoxcHh9Lm1vbnN0ZXItc2tlbGV0b24tY29sLTEwMHstLW1vbnN0ZXItc2tlbGV0b24tY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1za2VsZXRvbi1oZWlnaHQ6MTAwJTstLW1vbnN0ZXItc2tlbGV0b24td2lkdGg6MTAwJTstLW1vbnN0ZXItc2tlbGV0b246bGluZWFyLWdyYWRpZW50KDkwZGVnLHZhcigtLW1vbnN0ZXItc2tlbGV0b24tY29sb3IpIDAsdHJhbnNwYXJlbnQgdmFyKC0tbW9uc3Rlci1za2VsZXRvbi13aWR0aCkpfS5tb25zdGVyLXNrZWxldG9uLWFuaW1hdGVke2FuaW1hdGlvbi1kdXJhdGlvbjoyLjI1czthbmltYXRpb24tZmlsbC1tb2RlOmZvcndhcmRzO2FuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6aW5maW5pdGU7YW5pbWF0aW9uLW5hbWU6c2hpbW1lcjthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmxpbmVhcjtib3JkZXItcmFkaXVzOjRweH1Aa2V5ZnJhbWVzIHNoaW1tZXJ7MCV7ZmlsdGVyOmJyaWdodG5lc3MoMSl9NTAle2ZpbHRlcjpicmlnaHRuZXNzKDEuNSl9dG97ZmlsdGVyOmJyaWdodG5lc3MoMSl9fSBcbn1gLFxuXHRcdDAsXG5cdCk7XG59IGNhdGNoIChlKSB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcihcImh0bWxcIiksXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRlICsgXCJcIixcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBkaWZmIH0gZnJvbSBcIi4uLy4uL2RhdGEvZGlmZi5tanNcIjtcbmltcG9ydCB7IFBhdGhmaW5kZXIgfSBmcm9tIFwiLi4vLi4vZGF0YS9wYXRoZmluZGVyLm1qc1wiO1xuaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBPYnNlcnZlciB9IGZyb20gXCIuLi8uLi90eXBlcy9vYnNlcnZlci5tanNcIjtcblxuZXhwb3J0IHsgaGFuZGxlRGF0YVNvdXJjZUNoYW5nZXMsIGRhdGFzb3VyY2VMaW5rZWRFbGVtZW50U3ltYm9sIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGRhdGFzb3VyY2VMaW5rZWRFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiZGF0YXNvdXJjZUxpbmtlZEVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaGFuZGxlRGF0YVNvdXJjZUNoYW5nZXMoKSB7XG5cdGlmICghdGhpc1tkYXRhc291cmNlTGlua2VkRWxlbWVudFN5bWJvbF0pIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRsZXQgZGF0YSA9IHRoaXNbZGF0YXNvdXJjZUxpbmtlZEVsZW1lbnRTeW1ib2xdLmRhdGE7XG5cblx0Y29uc3QgYWN0dWFsRGF0YSA9IEpTT04uc3RyaW5naWZ5KHRoaXMuZ2V0T3B0aW9uKFwiZGF0YVwiKSk7XG5cdGNvbnN0IGFjdHVhbERhdGFBc09iaiA9IEpTT04ucGFyc2UoYWN0dWFsRGF0YSk7XG5cblx0Y29uc3QgcGF0aCA9IHRoaXMuZ2V0T3B0aW9uKFwibWFwcGluZy5kYXRhXCIpO1xuXHRpZiAocGF0aCkge1xuXHRcdGRhdGEgPSBuZXcgUGF0aGZpbmRlcihkYXRhKS5nZXRWaWEocGF0aCk7XG5cdH1cblxuXHRpZiAoaXNPYmplY3QoZGF0YSkpIHtcblx0XHRjb25zdCB0bXAgPSBbXTtcblx0XHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZGF0YSk7XG5cdFx0Zm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuXHRcdFx0dG1wLnB1c2goZGF0YVtrZXldKTtcblx0XHR9XG5cdFx0ZGF0YSA9IHRtcDtcblx0fVxuXG5cdGNvbnN0IGluZGV4ID0gdGhpcy5nZXRPcHRpb24oXCJtYXBwaW5nLmluZGV4XCIpO1xuXHRpZiAoaW5kZXggIT09IHVuZGVmaW5lZCAmJiBpbmRleCAhPT0gbnVsbCkge1xuXHRcdGRhdGEgPSBkYXRhPy5baW5kZXhdO1xuXHR9XG5cblx0aWYgKGRhdGEgPT09IHVuZGVmaW5lZCB8fCBkYXRhID09PSBudWxsKSB7XG5cdFx0ZGF0YSA9IFtdO1xuXHR9XG5cblx0Y29uc3QgcmVzdWx0ID0gZGlmZihkYXRhLCBhY3R1YWxEYXRhQXNPYmopO1xuXHRpZiAocmVzdWx0Lmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHF1ZXVlTWljcm90YXNrKCgpID0+IHtcblx0XHR0aGlzLnNldE9wdGlvbihcImRhdGFcIiwgZGF0YSk7XG5cdH0pO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywgMjAyNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IEZvcm1TdHlsZVNoZWV0IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBGb3JtU3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG5cdEZvcm1TdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIGZvcm0geyBcbmlucHV0LG1ldGVyLHByb2dyZXNzLHNlbGVjdCx0ZXh0YXJlYXthY2NlbnQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci13aWR0aCk7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZToxMDAlO21hcmdpbjowO291dGxpbmU6bm9uZX1pbnB1dCxzZWxlY3QsdGV4dGFyZWF7aGVpZ2h0Oi1tb3otZml0LWNvbnRlbnQ7aGVpZ2h0OmZpdC1jb250ZW50O3BhZGRpbmc6LjRyZW0gLjZyZW19dGV4dGFyZWF7bWluLWhlaWdodDo2cmVtO3Jlc2l6ZTp2ZXJ0aWNhbH1pbnB1dFt0eXBlPWNvbG9yXXtoZWlnaHQ6MnJlbTttYXJnaW46MDtwYWRkaW5nOi4xcmVtO3dpZHRoOjJyZW19aW5wdXQ6aG92ZXI6bm90KFt0eXBlPXJhZGlvXSk6bm90KFt0eXBlPWNoZWNrYm94XSk6bm90KFt0eXBlPXJhbmdlXSksc2VsZWN0OmhvdmVyLHRleHRhcmVhOmhvdmVye2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTIpO3RyYW5zaXRpb246YmFja2dyb3VuZCAuOHMsY29sb3IgLjI1cyAuMDgzMzMzMzMzM3N9aW5wdXQ6Zm9jdXMsc2VsZWN0OmZvY3VzLHRleHRhcmVhOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKTtvdXRsaW5lLW9mZnNldDozcHh9IFxufWAsXG5cdFx0MCxcblx0KTtcbn0gY2F0Y2ggKGUpIHtcblx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0ZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKSxcblx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdGUgKyBcIlwiLFxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sLCBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBQYXRoZmluZGVyIH0gZnJvbSBcIi4uLy4uL2RhdGEvcGF0aGZpbmRlci5tanNcIjtcbmltcG9ydCB7IGdldExpbmtlZE9iamVjdHMsIGhhc09iamVjdExpbmsgfSBmcm9tIFwiLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBjdXN0b21FbGVtZW50VXBkYXRlckxpbmtTeW1ib2wgfSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRDdXN0b21FbGVtZW50LFxuXHRhdHRyaWJ1dGVPYnNlcnZlclN5bWJvbCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBmaW5kRWxlbWVudFdpdGhTZWxlY3RvclVwd2FyZHMgfSBmcm9tIFwiLi4vLi4vZG9tL3V0aWwubWpzXCI7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IE9ic2VydmVyIH0gZnJvbSBcIi4uLy4uL3R5cGVzL29ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHsgY2xvbmUgfSBmcm9tIFwiLi4vLi4vdXRpbC9jbG9uZS5tanNcIjtcbmltcG9ydCB7XG5cdEFUVFJJQlVURV9EQVRBU09VUkNFX1NFTEVDVE9SLFxuXHRBVFRSSUJVVEVfREFUQVRBQkxFX0lOREVYLFxufSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBEYXRhc291cmNlIH0gZnJvbSBcIi4vZGF0YXNvdXJjZS5tanNcIjtcbmltcG9ydCB7IERhdGFzZXRTdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9kYXRhc2V0Lm1qc1wiO1xuaW1wb3J0IHtcblx0aGFuZGxlRGF0YVNvdXJjZUNoYW5nZXMsXG5cdGRhdGFzb3VyY2VMaW5rZWRFbGVtZW50U3ltYm9sLFxufSBmcm9tIFwiLi91dGlsLm1qc1wiO1xuaW1wb3J0IHsgRm9ybVN0eWxlU2hlZXQgfSBmcm9tIFwiLi4vc3R5bGVzaGVldC9mb3JtLm1qc1wiO1xuXG5leHBvcnQgeyBEYXRhU2V0IH07XG5cbi8qKlxuICogVGhlIGRhdGEgc2V0IGNvbXBvbmVudCBpcyB1c2VkIHRvIHNob3cgdGhlIGRhdGEgb2YgYSBkYXRhIHNvdXJjZS5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1hZ2VzL2RhdGFzZXQucG5nXCI+XG4gKlxuICogWW91IGNhbiBjcmVhdGUgdGhpcyBjb250cm9sIGVpdGhlciBieSBzcGVjaWZ5aW5nIHRoZSBIVE1MIHRhZyA8bW9uc3Rlci1kYXRhc2V0IC8+YCBkaXJlY3RseSBpbiB0aGUgSFRNTCBvciB1c2luZ1xuICogSmF2YXNjcmlwdCB2aWEgdGhlIGBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWRhdGFzZXQnKTtgIG1ldGhvZC5cbiAqXG4gKiBgYGBodG1sXG4gKiA8bW9uc3Rlci1kYXRhc2V0PjwvbW9uc3Rlci1kYXRhc2V0PlxuICogYGBgXG4gKlxuICogT3IgeW91IGNhbiBjcmVhdGUgdGhpcyBDdXN0b21Db250cm9sIGRpcmVjdGx5IGluIEphdmFzY3JpcHQ6XG4gKlxuICogYGBganNcbiAqIGltcG9ydCAnQHNjaHVrYWkvY29tcG9uZW50LWRhdGF0YWJsZS9zb3VyY2UvZGF0YXNldC5tanMnO1xuICogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1kYXRhc2V0Jyk7XG4gKiBgYGBcbiAqXG4gKiBUaGUgQm9keSBzaG91bGQgaGF2ZSBhIGNsYXNzIFwiaGlkZGVuXCIgdG8gZW5zdXJlIHRoYXQgdGhlIHN0eWxlcyBhcmUgYXBwbGllZCBjb3JyZWN0bHkuXG4gKlxuICogYGBgY3NzXG4gKiBib2R5LmhpZGRlbiB7XG4gKiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAc3RhcnR1bWwgZGF0YXNldC5wbmdcbiAqIHNraW5wYXJhbSBtb25vY2hyb21lIHRydWVcbiAqIHNraW5wYXJhbSBzaGFkb3dpbmcgZmFsc2VcbiAqIEhUTUxFbGVtZW50IDx8LS0gQ3VzdG9tRWxlbWVudFxuICogQ3VzdG9tRWxlbWVudCA8fC0tIERhdGFTZXRcbiAqIEBlbmR1bWxcbiAqXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBkYXRhIHNldFxuICovXG5jbGFzcyBEYXRhU2V0IGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2RhdGFzZXRAQGluc3RhbmNlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGRldGVybWluZXMgd2hpY2ggYXR0cmlidXRlcyBhcmUgdG8gYmUgbW9uaXRvcmVkIGJ5IGBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKWAuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ1tdfVxuXHQgKiBAc2luY2UgMS4xNS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcblx0XHRjb25zdCBhdHRyaWJ1dGVzID0gc3VwZXIub2JzZXJ2ZWRBdHRyaWJ1dGVzO1xuXHRcdGF0dHJpYnV0ZXMucHVzaChBVFRSSUJVVEVfREFUQVRBQkxFX0lOREVYKTtcblx0XHRyZXR1cm4gYXR0cmlidXRlcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBIVE1MIHRhZywgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtvYmplY3R9IGRhdGFzb3VyY2UgVGhlIGRhdGFzb3VyY2Vcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGRhdGFzb3VyY2Uuc2VsZWN0b3IgVGhlIHNlbGVjdG9yIG9mIHRoZSBkYXRhc291cmNlXG5cdCAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBtYXBwaW5nIFRoZSBtYXBwaW5nXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtYXBwaW5nLmRhdGEgVGhlIGRhdGFcblx0ICogQHByb3BlcnR5IHtudW1iZXJ9IG1hcHBpbmcuaW5kZXggVGhlIGluZGV4XG5cdCAqIEBwcm9wZXJ0eSB7QXJyYXl9IGRhdGEgVGhlIGRhdGFcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRjb25zdCBvYmogPSBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHR9LFxuXG5cdFx0XHRkYXRhc291cmNlOiB7XG5cdFx0XHRcdHNlbGVjdG9yOiBudWxsLFxuXHRcdFx0fSxcblxuXHRcdFx0bWFwcGluZzoge1xuXHRcdFx0XHRkYXRhOiBcImRhdGFzZXRcIixcblx0XHRcdFx0aW5kZXg6IDAsXG5cdFx0XHR9LFxuXG5cdFx0XHRmZWF0dXJlczoge1xuXHRcdFx0XHQvKipcblx0XHRcdFx0ICogQHNpbmNlIDMuNzAuMFxuXHRcdFx0XHQgKiBAdHlwZSB7Ym9vbGVhbn1cblx0XHRcdFx0ICovXG5cdFx0XHRcdHJlZnJlc2hPbk11dGF0aW9uOiB0cnVlLFxuXHRcdFx0fSxcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBAc2luY2UgMy43MC4wXG5cdFx0XHQgKiBAdHlwZSB7Ym9vbGVhbn1cblx0XHRcdCAqL1xuXHRcdFx0cmVmcmVzaE9uTXV0YXRpb246IHtcblx0XHRcdFx0c2VsZWN0b3I6IFwiaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWFcIixcblx0XHRcdH0sXG5cblx0XHRcdGRhdGE6IHt9LFxuXHRcdH0pO1xuXG5cdFx0dXBkYXRlT3B0aW9uc0Zyb21Bcmd1bWVudHMuY2FsbCh0aGlzLCBvYmopO1xuXHRcdHJldHVybiBvYmo7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLWRhdGFzZXRcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIGNyZWF0ZWQuXG5cdCAqIEBzaW5jZSAzLjcwLjBcblx0ICogQHJldHVybiB7RGF0YVNldH1cblx0ICovXG5cdHJlZnJlc2goKSB7XG5cdFx0Ly8gbWFrZXMgc3VyZSB0aGF0IGhhbmRsZURhdGFTb3VyY2VDaGFuZ2VzIGlzIGNhbGxlZFxuXHRcdHRoaXMuc2V0T3B0aW9uKFwiZGF0YVwiLCB7fSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7UHJvbWlzZTx1bmtub3duPn1cblx0ICovXG5cdHdyaXRlKCkge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRpZiAoIXRoaXNbZGF0YXNvdXJjZUxpbmtlZEVsZW1lbnRTeW1ib2xdKSB7XG5cdFx0XHRcdHJlamVjdChuZXcgRXJyb3IoXCJObyBkYXRhc291cmNlXCIpKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBpbnRlcm5hbFVwZGF0ZUNsb25lRGF0YSA9IHRoaXMuZ2V0SW50ZXJuYWxVcGRhdGVDbG9uZURhdGEoKTtcblx0XHRcdGlmICghaW50ZXJuYWxVcGRhdGVDbG9uZURhdGEpIHtcblx0XHRcdFx0cmVqZWN0KG5ldyBFcnJvcihcIk5vIHVwZGF0ZSBkYXRhXCIpKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBpbnRlcm5hbERhdGEgPSBpbnRlcm5hbFVwZGF0ZUNsb25lRGF0YT8uW1wiZGF0YVwiXTtcblx0XHRcdGlmIChcblx0XHRcdFx0aW50ZXJuYWxEYXRhID09PSB1bmRlZmluZWQgfHxcblx0XHRcdFx0aW50ZXJuYWxEYXRhID09PSBudWxsIHx8XG5cdFx0XHRcdGludGVybmFsRGF0YSA9PT0gXCJcIlxuXHRcdFx0KSB7XG5cdFx0XHRcdHJlamVjdChuZXcgRXJyb3IoXCJObyBkYXRhXCIpKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHBhdGggPSB0aGlzLmdldE9wdGlvbihcIm1hcHBpbmcuZGF0YVwiKTtcblx0XHRcdFx0Y29uc3QgaW5kZXggPSB0aGlzLmdldE9wdGlvbihcIm1hcHBpbmcuaW5kZXhcIik7XG5cblx0XHRcdFx0bGV0IHBhdGhXaXRoSW5kZXg7XG5cblx0XHRcdFx0aWYgKGlzU3RyaW5nKHBhdGgpICYmIHBhdGggIT09IFwiXCIpIHtcblx0XHRcdFx0XHRwYXRoV2l0aEluZGV4ID0gcGF0aCArIFwiLlwiICsgaW5kZXg7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cGF0aFdpdGhJbmRleCA9IFN0cmluZyhpbmRleCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBkYXRhID0gdGhpc1tkYXRhc291cmNlTGlua2VkRWxlbWVudFN5bWJvbF0/LmRhdGE7XG5cdFx0XHRcdGlmICghZGF0YSkge1xuXHRcdFx0XHRcdHJlamVjdChuZXcgRXJyb3IoXCJObyBkYXRhXCIpKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCB1bnJlZiA9IEpTT04uc3RyaW5naWZ5KGRhdGEpO1xuXHRcdFx0XHRjb25zdCByZWYgPSBKU09OLnBhcnNlKHVucmVmKTtcblxuXHRcdFx0XHRuZXcgUGF0aGZpbmRlcihyZWYpLnNldFZpYShwYXRoV2l0aEluZGV4LCBpbnRlcm5hbERhdGEpO1xuXG5cdFx0XHRcdHRoaXNbZGF0YXNvdXJjZUxpbmtlZEVsZW1lbnRTeW1ib2xdLmRhdGEgPSByZWY7XG5cblx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgcmVzcG9uc2libGUgZm9yIGFzc2VtYmxpbmcgdGhlIGNvbXBvbmVudC5cblx0ICpcblx0ICogSXQgY2FsbHMgdGhlIHBhcmVudCdzIGFzc2VtYmxlIG1ldGhvZCBmaXJzdCwgdGhlbiBpbml0aWFsaXplcyBjb250cm9sIHJlZmVyZW5jZXMgYW5kIGV2ZW50IGhhbmRsZXJzLlxuXHQgKiBJZiB0aGUgYGRhdGFzb3VyY2Uuc2VsZWN0b3JgIG9wdGlvbiBpcyBwcm92aWRlZCBhbmQgaXMgYSBzdHJpbmcsIGl0IHNlYXJjaGVzIGZvciB0aGUgY29ycmVzcG9uZGluZ1xuXHQgKiBlbGVtZW50IGluIHRoZSBET00gdXNpbmcgdGhhdCBzZWxlY3Rvci5cblx0ICpcblx0ICogSWYgdGhlIHNlbGVjdG9yIG1hdGNoZXMgZXhhY3RseSBvbmUgZWxlbWVudCwgaXQgY2hlY2tzIGlmIHRoZSBlbGVtZW50IGlzIGFuIGluc3RhbmNlIG9mIHRoZSBgRGF0YXNvdXJjZWAgY2xhc3MuXG5cdCAqXG5cdCAqIElmIGl0IGlzLCB0aGUgY29tcG9uZW50J3MgYGRhdGFzb3VyY2VMaW5rZWRFbGVtZW50U3ltYm9sYCBwcm9wZXJ0eSBpcyBzZXQgdG8gdGhlIGVsZW1lbnQsIGFuZCB0aGUgY29tcG9uZW50XG5cdCAqIGF0dGFjaGVzIGFuIG9ic2VydmVyIHRvIHRoZSBkYXRhc291cmNlJ3MgY2hhbmdlcy5cblx0ICpcblx0ICogVGhlIG9ic2VydmVyIGlzIGEgZnVuY3Rpb24gdGhhdCBjYWxscyB0aGUgYGhhbmRsZURhdGFTb3VyY2VDaGFuZ2VzYCBtZXRob2QgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGNvbXBvbmVudC5cblx0ICogQWRkaXRpb25hbGx5LCB0aGUgY29tcG9uZW50IGF0dGFjaGVzIGFuIG9ic2VydmVyIHRvIGl0c2VsZiwgd2hpY2ggYWxzbyBjYWxscyB0aGUgYGhhbmRsZURhdGFTb3VyY2VDaGFuZ2VzYFxuXHQgKiBtZXRob2QgaW4gdGhlIGNvbXBvbmVudCdzIGNvbnRleHQuXG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXG5cdFx0aW5pdEV2ZW50SGFuZGxlci5jYWxsKHRoaXMpO1xuXG5cdFx0aWYgKCF0aGlzW2RhdGFzb3VyY2VMaW5rZWRFbGVtZW50U3ltYm9sXSkge1xuXHRcdFx0Y29uc3Qgc2VsZWN0b3IgPSB0aGlzLmdldE9wdGlvbihcImRhdGFzb3VyY2Uuc2VsZWN0b3JcIik7XG5cblx0XHRcdGlmIChpc1N0cmluZyhzZWxlY3RvcikpIHtcblx0XHRcdFx0Y29uc3QgZWxlbWVudCA9IGZpbmRFbGVtZW50V2l0aFNlbGVjdG9yVXB3YXJkcyh0aGlzLCBzZWxlY3Rvcik7XG5cdFx0XHRcdGlmIChlbGVtZW50ID09PSBudWxsKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIHNlbGVjdG9yIG11c3QgbWF0Y2ggZXhhY3RseSBvbmUgZWxlbWVudFwiKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBEYXRhc291cmNlKSkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ0aGUgZWxlbWVudCBtdXN0IGJlIGEgZGF0YXNvdXJjZVwiKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXNbZGF0YXNvdXJjZUxpbmtlZEVsZW1lbnRTeW1ib2xdID0gZWxlbWVudDtcblx0XHRcdFx0ZWxlbWVudC5kYXRhc291cmNlLmF0dGFjaE9ic2VydmVyKFxuXHRcdFx0XHRcdG5ldyBPYnNlcnZlcihoYW5kbGVEYXRhU291cmNlQ2hhbmdlcy5iaW5kKHRoaXMpKSxcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBzZWxlY3RvciBtdXN0IGJlIGEgc3RyaW5nXCIpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMucmVmcmVzaE9uTXV0YXRpb25cIikgJiZcblx0XHRcdHRoaXMuZ2V0T3B0aW9uKFwicmVmcmVzaE9uTXV0YXRpb24uc2VsZWN0b3JcIilcblx0XHQpIHtcblx0XHRcdGluaXRNdXRhdGlvbk9ic2VydmVyLmNhbGwodGhpcyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4gW0NTU1N0eWxlU2hlZXRdXG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW0Zvcm1TdHlsZVNoZWV0LCBEYXRhc2V0U3R5bGVTaGVldF07XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpbml0RXZlbnRIYW5kbGVyKCkge1xuXHR0aGlzW2F0dHJpYnV0ZU9ic2VydmVyU3ltYm9sXVtBVFRSSUJVVEVfREFUQVRBQkxFX0lOREVYXSA9ICgpID0+IHtcblx0XHRjb25zdCBpbmRleCA9IHRoaXMuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9EQVRBVEFCTEVfSU5ERVgpO1xuXHRcdGlmIChpbmRleCkge1xuXHRcdFx0dGhpcy5zZXRPcHRpb24oXCJtYXBwaW5nLmluZGV4XCIsIHBhcnNlSW50KGluZGV4LCAxMCkpO1xuXHRcdH1cblx0fTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gdXBkYXRlT3B0aW9uc0Zyb21Bcmd1bWVudHMob3B0aW9ucykge1xuXHRjb25zdCBpbmRleCA9IHRoaXMuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9EQVRBVEFCTEVfSU5ERVgpO1xuXG5cdGlmIChpbmRleCAhPT0gbnVsbCAmJiBpbmRleCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0b3B0aW9ucy5tYXBwaW5nLmluZGV4ID0gcGFyc2VJbnQoaW5kZXgsIDEwKTtcblx0fVxuXG5cdGNvbnN0IHNlbGVjdG9yID0gdGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0RBVEFTT1VSQ0VfU0VMRUNUT1IpO1xuXG5cdGlmIChzZWxlY3Rvcikge1xuXHRcdG9wdGlvbnMuZGF0YXNvdXJjZS5zZWxlY3RvciA9IHNlbGVjdG9yO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaW5pdE11dGF0aW9uT2JzZXJ2ZXIoKSB7XG5cdGNvbnN0IGNvbmZpZyA9IHsgYXR0cmlidXRlczogZmFsc2UsIGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9O1xuXG5cdGNvbnN0IGNhbGxiYWNrID0gKG11dGF0aW9uTGlzdCwgb2JzZXJ2ZXIpID0+IHtcblx0XHRpZiAobXV0YXRpb25MaXN0Lmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGxldCBkb25lRmxhZyA9IGZhbHNlO1xuXHRcdGZvciAoY29uc3QgbXV0YXRpb24gb2YgbXV0YXRpb25MaXN0KSB7XG5cdFx0XHRpZiAobXV0YXRpb24udHlwZSA9PT0gXCJjaGlsZExpc3RcIikge1xuXHRcdFx0XHRmb3IgKGNvbnN0IG5vZGUgb2YgbXV0YXRpb24uYWRkZWROb2Rlcykge1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJlxuXHRcdFx0XHRcdFx0bm9kZS5tYXRjaGVzKHRoaXMuZ2V0T3B0aW9uKFwicmVmcmVzaE9uTXV0YXRpb24uc2VsZWN0b3JcIikpXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRkb25lRmxhZyA9IHRydWU7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZG9uZUZsYWcpIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChkb25lRmxhZykge1xuXHRcdFx0dGhpcy5yZWZyZXNoKCk7XG5cdFx0fVxuXHR9O1xuXG5cdGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoY2FsbGJhY2spO1xuXHRvYnNlcnZlci5vYnNlcnZlKHRoaXMsIGNvbmZpZyk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiPlxuICAgICAgICAgICAgPHNsb3Q+PC9zbG90PlxuICAgICAgICA8L2Rpdj5cbiAgICBgO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoRGF0YVNldCk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCAyMDI0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqL1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgRm9ybVN0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IEZvcm1TdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcblx0Rm9ybVN0eWxlU2hlZXQuaW5zZXJ0UnVsZShcblx0XHRgXG5AbGF5ZXIgZm9ybSB7IFxuLmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmlubGluZXtkaXNwbGF5OmlubGluZX0uaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5ncmlke2Rpc3BsYXk6Z3JpZH0uaW5saW5lLWdyaWR7ZGlzcGxheTppbmxpbmUtZ3JpZH0uZmxleHtkaXNwbGF5OmZsZXh9LmlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXh9LmhpZGRlbiwuaGlkZSwubm9uZXtkaXNwbGF5Om5vbmV9LnZpc2libGV7dmlzaWJpbGl0eTp2aXNpYmxlfS5pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW59Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMSwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0yLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci0we2JvcmRlci1yYWRpdXM6MDtib3JkZXItc3R5bGU6bm9uZTtib3JkZXItd2lkdGg6MH0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMiwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMSwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMiwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMywubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfWlucHV0LG1ldGVyLHByb2dyZXNzLHNlbGVjdCx0ZXh0YXJlYXthY2NlbnQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci13aWR0aCk7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZToxMDAlO21hcmdpbjowO291dGxpbmU6bm9uZX1pbnB1dCxzZWxlY3QsdGV4dGFyZWF7aGVpZ2h0Oi1tb3otZml0LWNvbnRlbnQ7aGVpZ2h0OmZpdC1jb250ZW50O3BhZGRpbmc6LjRyZW0gLjZyZW19dGV4dGFyZWF7bWluLWhlaWdodDo2cmVtO3Jlc2l6ZTp2ZXJ0aWNhbH1pbnB1dFt0eXBlPWNvbG9yXXtoZWlnaHQ6MnJlbTttYXJnaW46MDtwYWRkaW5nOi4xcmVtO3dpZHRoOjJyZW19aW5wdXQ6aG92ZXI6bm90KFt0eXBlPXJhZGlvXSk6bm90KFt0eXBlPWNoZWNrYm94XSk6bm90KFt0eXBlPXJhbmdlXSksc2VsZWN0OmhvdmVyLHRleHRhcmVhOmhvdmVye2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTIpO3RyYW5zaXRpb246YmFja2dyb3VuZCAuOHMsY29sb3IgLjI1cyAuMDgzMzMzMzMzM3N9aW5wdXQ6Zm9jdXMsc2VsZWN0OmZvY3VzLHRleHRhcmVhOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKTtvdXRsaW5lLW9mZnNldDozcHh9QGZvbnQtZmFjZXtmb250LWRpc3BsYXk6c3dhcDtmb250LWZhbWlseTpSYWxld2F5O2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjMwMDtzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24veC1mb250LXdvZmYyO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdNZ0FCQUFBQUFGSjRBQklBQUFBQXQzQUFBRklRQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHb0U4Rys0NkhJVThCbUEvVTFSQlZFUUFoUWdJZ1FvSm54UVJDQXFCdWd5Qm1uQUxoQ0lBQVRZQ0pBT0lRQVFnQllVVUJ5QU1neHdiZmFRWGFKZWZtTnowWm9sM3Y2MGNQZVpNcEc0SEpTams1cUlJTmc2Q0dNZ2xaZi8vbjNGMGpPR0dEUkExclhlSW5jSklVa05IR242OXFNUkRVOFphampzOVVic210bnFuRTN2M3ZxaVFtZlJRcExrS1c2UVp3YWw2czVJVWlKTlVTVUcvT3dvRFk2QjY3NU9qU2prRFNTTXUycGVkcHU5dkpJTFVsSmQ3MDdEK2VMSHBqWURJNGUxdURuTGpISHZ4cERYR015ZHVMTG4xcXQwRkNRT3lGc0paRTEra0pxM1QrSWU3QkpGSU5PQU5iaTl2VFV6aEk3VzRHbVVMMGxXalQvRlFRaS9tKyt4dVBQMDJvbVJIZTVwbjREZ2ZOWmZuK1I5ejk3OXRtRWVOYXExUnhScUhUalRQTkEySkZFZ3JIZG8vbnQvVy81emJnR0N4aWE2RWtWaUEyRmhZR0l0Um1FMVp2VlV2cXRTdGI3TXZyZDNXNyt0MiswWGRvVG56empZYnA3bVNITEFDa2hNV2dDVEw2czBXdjBBVW9oSmZFcUUzb3BQZDU4aWtKbktsbyszdWFlU0hZSjZmY0ljWGpkK3JLVUVzYUVsVHFsVWxWUm0vTitlLzhpUDBMNUFLb3pObEozLzlpQndzaE02djVKSVVKeWtnVDNmZHJPbXE2TGNzK1orcS9Yc0FYRnhFRWlRSVVhS29zRm43Y3RUKzdCQlM1ZHFEb2xKWHVuYmw3cnR0ekQvdjM4NExmdEphZ0ZGQUxZUEU1QTdnbk1yWkJodDRsWHFzYlpLbWJkcTBUdE9tcG1nTml1Z00yUFlCYzczTXJqcTdHTHNvWEhjVHB0OXVQdkZEejhlTjNnK3N4clBRQXc2RFRGTnAvT1pJOWlpbk5pdFpoUm1wUU9Da2RvQmRBTmpWV2xhdk1pdHdETkpYL3BZSUFrVnduT1Avdlc1eHpvTXc3U0FGQUtVK1p6L2tuUC9aOWorT2Rmckw4S2UydmRLYm1waHV4SlN1TDhFVUFnZ0hJaUJIUCs0NDRFRHp2MVBUUTNZa09jT1NsVEhtajZVc2RmbzJMKy9qcFllN0lIV2NRVWdjZ2twTEZSMVlUVzhDR0tRWDliOEdGQUFBSDl0bzRSSFE2R0x2RlJyaTREaXdUekFBRERNS0RQci9mWjNWL3FkZ1Bta0d6S1RFbVdFWGI3UTN0dGdUWXFvMm5QNi8rOTdYZitGLzlKSEFWc0lJY0FDQlp3UnlrR1Q3Z0NSOFZvaEpjVU9PU0RqaVNiQXBoTW96bTJKUnB0QnRVVzY5WGJORkczSVZ5MktMb2s0OC9MZnNtNTI3SWFxQkxNdUJiT0ZJd2VGVWQwMXZlTCtZOHhXaHR6Y3FUbTJDSVRjNWVMSndTSTRmWWxMWUZJVkhBcy8vVDUzTjQvWXgxaEtHVStIU3FFcmRwUFBuczZmcXFXSnNOYlphQ2xRdGpsT0xVTXNoY2RvQTVUUXNzNEpMYzkwU3hDT01NVUs0S1A5TnNocHpwWDR2d3hLQ2hDQVNSRVJFL0xLc1dSbEp3TktBY1RuWEFoRXkzcjFLSGNaYS9ZZFg1ODQyMC9pYVhtdEdob0NBaUlpQVIyM3YvUDkrS1RBQ0FONWhka0MzeFVDNEVMc2dndmtSMmtyRWpZU0V2MEJLU21IQ2hJdllPQ0FKa0tRZ3lZTU0yUW9VTXpDbzE2Qko4NXFBV0NDZEhlazNBQjBPREwxTHEwUGdUZTNoU3cyZmhpNFhoUHVldVFXRUg2eHRJRVFBYkcyTm01b1Y1NFFGUCt5S2dPMkQ0VDV0L3d6MlhXOTIvcnBxcExUU0lQOHFWOXZMdk9kczBOTFd5WDUxSzZvZmJ2UFpFMXBhZjd3MzE4QzladGhxN2YzMmJmdUw2NFZaSHc1MTRZc201bGdmTmJmRzdXOWxzVUE0RUd6NzIzdnh3R3pwNGZSUittUDhMczVCN0tCMmVESlhjNnh3bEc2OTAydWc3QXpMQThOWTIxQjJkQi9QNXFmT1Y4dDFvbnlMNWpaRERmUUk1Umc4RDk4RnZIc3ZjbEh1SnNyZHZzSnJwYy9Uci9ndS9FZlpKelhVenBXYURqN003K1VQOC84RWtBQVZhQVMvQ1IrWHMvSk40WWFJY08xeEhaY1VhTU1ia2xycEt5N05mUUpLUWNVUmFnb0dtQ1crSEE2RU52YmczM3NsMnBJWVJtRTliSUhiMG1BNmtrNmxONUdkeU1ONUVibVFoeEhLbHdNZ1Q1OGNndzdwZFVSejduZk1jUWZjVTN2SWN6VmtkcmhYOFhIcTQwMTJ0Rk9kN2tUL2E3cDdtODNXQTcxRjdhTzlNK2RqdmRkNmo3ZnhtK0QxUHUzejN1aXJ2bXV5emE1M3RydjkzbFRiODJSVDJLYUZWVUtNTlAzNkJ2UU1DbzBHc0Vka0w4cyt6TGcxRXhiTTBOZ0NXQXhnemY4MkRHMUtYTWZjNHJqTmNRZkhLeFNDdVJ1Qkk1QW9kREREa0dkVjhDblZWRW1FTWFpbjRTYTBBWFRJMFJCTnBPWUFMVnExYVY5dnhKaVV6SEtXQ2lzNm1wMEJ1a3gwNjlHcjc0c25WTmJzb0Nta1ZNb3A1K3BER2FXejJzTERyMmlOdCtvWk8wYjM2WVNJaldjeHZubE4weDBWaGxZb1c0VVJqWFhLeUxHM1kzcW9MZEVhekhBRUVvVnVNbDNERGVFUlZwRy9qZVRFUjBDVVpFVTFtb3RxRm9pd0pGS1VhREZpYWNTbEJKckVqU1FLSi9DU0ZTbVNLazE2MVFsa2RLZXlTWFl6c2RYS2k2STlpa05KTXRDVUtsT3VRcVVxMVZIVDF6cTYrbHpmUU5BSWE1SnBSb3ZXYUVQN1p4dU5tVGpNTEJZdXEzWFVUZ05kUkRkNlVxOUEzM2NieEF6eERET04wSXhhTlZheGQvL3MvYWp4QUU2Sm5QYkZHWmt1QzN1YU5VOEVzRFNMWlZteE9qMVBkOEhReFhTcGVka1hhd2JXNndabzgrNkRyaXVRRkZ3NUlwdm5KaDYvWmdGSks5MzBhRU0yWEozeUpCMERIb3BoYnFnMHVya3ZNSWdZbHRiR1JQY2RrZDdWai9OVjRwYkFiYSsvRTRCakNnOXA1WmVyaS9wZE0wQ0cvN3RYWk54VkUrNmJZYXZRbjZ1bVd3eTNGWGY2Z2crWG5BdEhEZ2prUE5pVWJxcG93dkRVdmJSbGNqNVhaSFl6VjhKaTRObDF2anNPaHJNYXhPSHhlRHdlanovVklISlhuNkgwd2hnNnFGT0VVcVFvMFdMRTBvaExDVEtKMHlRNUxVOXlSUXBTcFVsZlpuQVNCa1dwbENsWG9WS1Y2cWliVEJ0TW1RS1lZV0hWVVVmdEdJdDYybGRuTUgzRXBpVTBxVlFxSGJDTHhPVStFNC8xWExmQkVoektoZ1VjZ1VTaGZ4d21EejlHNUVSQUFITDdGSFJLUXlybnd1eFFmNXJoSEJFQlJJb1NMVVlzelViYzRydE1kcGwyNkZnZDU1dGdRRzh4L2ZBWjJKekl2R2JtbHJjWEFtM3dYS2E3RWxmUGNTMnR4ZnErZWdmaUhHb0RNeHlCUktIdnkzU0ozMFE2VjgrNm1kZlpzYUZWM2VPVUtzV015bmtoeUwxdTRWSTBMMVNKTEl4WHlZenBMeU5xaVd6MFhUcGthVHluMVpEdGk5MG1ZMDJ2MHRVcXR6U0NsK3FySzdySXV2MXY5UkQwc2d4cUdiSm9HR2ZFa2xFMVl6cjI4TzFsMktld1g5TjRBRGFOMWI3TDBJYVJUWE91eTl5aXU4MnBPd0hRQkMrcGxkQ3JPbUswTWcvcjF2UllFbTNEQkVjZ1VlZ21VeDAzRzQrd2l0UWdPZkVSRUNWWlVZM200dG1FSXZ3VUtVcTBHTEUwNGxJQ1R1STB5VHF0RmNsRUNsS2xTYTg2V0VaM0pKdnNGV2k3SXhLSk9Cd09oOFBoY0VUclJOM3REcGxNSnBOaFJJYWlxQWlHWVJnbWNia3N5NE5vei9yb2ZRTDdLY2FsTkQwRk9XM1JHWnVPQlIyeG1WTXhrVWdrRGwwWDd1Sml1dFM4Yk5HYUUrdi9aUU93cWU4NkdJSWVFc0N1b3ZXWWZDcTJ0dnBNT0JON016TzY4R1dYTGh0bWdXMmZmZUhwMU11N3F3WDVORHdUa3BDU2NlZkJreGR2ZmluQVJJUklVYUxGaUtVUmx4SUFpWkUwclZxNjVJb1VTWlVtdmVxVU1ycHMvejFaV0VaNVlCZ0dBQUFBQUFDQTBXWnNkMUNwK0h3K24yL2NPbGs0ckRwU2wxSzNIcjM2amcxQ1R0d3pPY051Q1hZTmdpRFlob3RIMW9nT0xSU3V4OG5pbDRyMmlZYXYwbm9yelh2WjJuWmpaTGZhS0QrVlJnSC9mZ05tcGtGYmhnaUdpVWFjR2ZYTm1LNDlGUHZZOXR2YmNUbTc1KzNmZGFtVzZZU3R3a2R6YUNIWmN2cTBDUzRpVTVabU54TFhHQmUvclFvSGpNUDEvUUVHVk1aRkpnYkRESi81VDNleUJjdkdQU3FUaW1KY0MrWVFVanFHdjJuQzdxM25CMERPcXYyRzNWdmxJaEtJVzhNUlNCUzZ5WlRpTkdGWCtSR0NESHM4UFlJZFRqZEFVQXl2UWt3U0NwcGhOZDIwbXB1TWpRWEtCUWtXSWpRcG1KUlVLWXhLWGNMRGM2a0lmSGFUS2FPTVNjNE1zVlJZUTBlelU2RkxwVnVQM3RMSHV3cHJZZnRoaXdpSEZBV2tTcG1XUnQrNm5KNlUxOEN1eUo4NWoyeDBiMGQ3TjlwaWJxMGxiNE5uVStwTzd0RVVMaWhkVU8yaHJwdGdZWENzeEJGQTNsUTJubUZjM0ZiUmpHQmdDZDZCVUg3cW5YQmJhY2pzSzk5UmZJRE1BRmtCc29PK25aZzhQMEJCZ01JQXRRRWFuOVdRRXM5TUFITkc4NTU0d2ErQXJucXZUVGpwR1M3ZS9pbFBtakFSUG1uc3hXa2RBQVJ5T0w5eUFoeW14N1NHS2xrN0doNDh2RHZOZmRnK0lUQlpwRDlnemdNSUJ3d0JrNXRta0VYSXFxTU1hRVRnL0hVZTI2b0xUVHA0dzRnOVVrWjViZ2J4RUh0Q3lUTFlQSG1KVXEzdUpwcXp2U05jdW1iQmRYWVFza3UxQzkyTjhqVHZERkVVMHJ2ODE3Z21xc0dqUGZSdU5qdmVyVERtSENFNHErcWJ6T2p1SUl2UmFEaHpaMS9WSlVwaGhpT1FLSFF3c1o1VGpndUFCOEN1S3IrWUlNS2V3SW9NTzV4eDllNEFFQlREU1lwbTJPVHk4b0lveVlvYWplalVRYjhKd0QvWEI1aVNzd1VpZ2hBc1JHaFMwQ2d6SnpYTUNUVTFYRVpIYVRBWFRDUVNpY1hiWTRWQ29SZ0xFeHN0bGRDdHhaMWFVbmx1dEdodE9RdDE4L1JVZFZwa0RCdmJTNG5Fb05Gb05CcU5GaWRYbjBXSkxKQ3JVOENVYnFxTWhaR3BtK0Y4RWJCSVVhTEZpS1VSbHhLRUVpVlZMVk55UmdwU3BVbXZ1Z0FaaEFHbHlwU3JVS2xLdGJwbUE2d3JRTGNldmZxYUU3RFRXczZZSG0wRTJkY2xpV1dzV0Uzbm1TN0c1YjZ1R1ZuUG5OdXl5V2JId3hEanBXazZNK2oyMGVZTUxRLzAzVk1tS200Wm5nbEpTTW00OCtESml6ZS9LcmRDa1ZNbEtzeUltbWVaZjBHUXl3SkJFRnhDL3JnZ0NJSWdDSUl6OTBiREV3TVRqOGZqQVVBeGRTNlZzRGNzMWc4d2ZZQ1hyTmQ5OFNIOGdhams1dnVVUHFnNFhEUDlKbTdvR1d2R1h4U2RFTExmcnNFU0VzbVdYVGNNM2NMdEhGU0diU0hCQWpjQ2lVSVhKcUhuTWxPTFJCTGFzblVLMlN1eDF6cW5NQi9aTUdPeC96UHU4b2hEQURBQU9BQUNBQW1BQWtBRFlIZ2xDa0N1TFZBaVNJS0ZDUDBraFdOS1BGVXdiZHlMK3NEQnllZ2thSjJXRU10V3JFNi80dnBXN0c2ZTRtRHcwQmZ4WmhGdDlHdmZoUEVBbXlkNGNNdFVxc1BsNGF5N0d1YWs1dDBONTJPT3dKYUJnU05Ic2syTmg3cUVXWllWcThlK2tzeGpqM0VLU1hnOExOaWxRcUZRekUxZnY1dHZwUVFGdEZJbXlMdGl2VGVXa1FDazVaUmUyUWlKMlpyTFlEVjg2TUJZV1g1eEFQdW5rMXludFoyeDZhYk5yaVhBc2hXcmNma1U2M3kvai9tK2duek44STNZdHh6ZkNlT2lBUGk3WWgxd0JCS0Z6czcyV3JsaWZXYjNuK3NPbWtTaXpYSFRYcG12QW5PZ2VhKzdTOEYxRUhQOG5VNEluRlk0UTVtV3AzQkFMbGVzYTdCejRGdU9iRTRFWFJuaXlrOGh0Q09pazh2bGNzV1lJS3I0L2NITTNYWEljY3lPRHNCWEg5UjNOSUJqVXNkMWZpZGowaWluSDVyaVpmVU9EVGlGUXVsemVheDcrakhaVnl4ZjM4VTN4TGRyK1U3dTQzSDU5S2VnSzk1SnZ3dnlxbjNJZ3hMeVVHMlk0UWdrQ3YxQlREK0l2Q01QTWcwbFZZUkJuU0lRa2FKRWl4RkxJeTRsQ0NUMmhtMHNFQWdFSlREcnFiNGdKMkpZb3pTVUtWZWhVcFhxYk5yWitaaGVqYis1ckhyR3pjY0xRaEpTTXU0OGVQTGl6YS9LelFuTUNFS3dFS0ZKWVlHeU55SzFsdEpVL0o2V21GeFVxTHNJblhTczM0czRBSm5UTlA5SlY4MVpXMDhid294d2pNb0dnKzFnUFB4d0FNZVprQkVFK1ZzdXBzeG85Y1dTNWl2bmFTVXBGSlExVEVidGV5S2pNQUxsU1FoNlJLM2dDQ1FLM2VRVTRqYkVDN3VxL0F5Q0RIdUNCUVRzY01iVnV3TVVCQlREUTl5UUZNMnd5Um55RVN4S3NxSkdVM1JpRURQWEw5RFo1RjRJcEF1U1lDRkNrOElHWlZNRkNkT2tMdUUxSUtWRmxHZ3hZbW5FTmVOQkNWU0prbkpFaitTTUZFbVZKcjNxbURLSXpHbGtTYmJkOUhMazFmeCszZStWQ3BtS29oZ2x5VUJWcWt5NUNwV3FWS2NhVUczVWxmcG9rTWJheE5Bc0xWcTFhVTlHSWxPZnZKbE1wcGpKWkRKYlJqdGFOV2svcnpXb01JSWFOV2VzYXV0MDN5TU8yUHhJSTZNQkU5MXFmb0R5eENTd2dDT1FLSFNUNlFWdURoNWhGWGxwdHJnTWp5QktzcUlhTDE3R2Nka0E1OEE4Z0NZLzMyUExid2tuQ1FCQU5tdEN3Nk5vQnJWSXF6YnRPVXNXVTQwNWxDd1oxdER4NXAxbzdURWRKQmdTR0w3NzdCRWpvOTRhbzlvanRLOWJ2NS9oQU04UmE0NlNqZ21kZUx6TkRNaGlVSG51N1FtRERCWitJVUZpVGNKb0hjbElrU3BOK21aR2NUY0g1SWNCcGNxVVIwV29WS1U2NnFaM3VzZWdGM21uK2JGbHJpcTlCbW1uVjdQYjdHMFJ0Q2FzT3dLUVpFZ2g0ODZESnkvZS9KNkpyejJydnoxMThQazhQcC9QNXkvOU5QSmlyOWdKd3lsS3JVeTVDcFdxVkVmZFZGTnRocldnVlp2MlpJU1llcmVCb0pkSEtlYWVnMEo3VUJlcVI4U08xYW4zcEZBTUtMd0l0VlNKKytGbW5pSEVzRkVRVytwZWtvTTVIcWY1MGx4QkxMdjl6Q01BWlRQUTE3bjlYNWtIRlg3YzZRMkp2YitLU0lzU0xVWXNqYmhtdkpFRVd4TEhKRFhNU0s1SWtWUnAwcXVPSUtPTHpHbGtTYmJkOUhMa3lWZWdNQlc1VUt3a0dXd3BWYVpjaFVwVnFxT21qOXA1cWxOVDMvLzF4c2lBUkNLUlNBQkFCUURBZ0VBZ0VGNGtjSFBBNHkvZjJtN1lHbzVBb3RDVlNTSWFUZVZHRkFBbHgxUklaUnZHYzVqMEpJZW9jeHp6cEt0Y2F5Y3hJMWhTeVYrNjEvR0N3dXpBTWZRTXc2TFRLZDhvc0ZBY3JOVkRQSWVGczZMSEZ4bE55dGllRGpiOEdPUVFiaFNJdGowMmdJZzhPVmJVZmdGL0d0a2FDc01NUnlCUjZENTVtY1BqTGJZa0k4SjB3SndYZi9NMW5vOWRqVFZkV2hwaUQ0TWprQ2owR1lZNmtZMU41UTRFS2dVaFdJalFwTkNqYktvU0NOT2lYb1piVkY5L3pzTGRHWUdnVmJNendKd3o4K21xVTJzalkxQnJjamwzZkcvc2Z6NnE3b2cyWTM0dmZwZFVoZS9DWjJISDh5QUEveFE4RDNteUFJRE5BVnNDQUpiWm54aTJjSDVzMmNSSndWYU9tMldXc3RQR1p4WVpBMUtJUjdtdDNBekFtdGtGVUk1aWxEY0FtMlF3b2pGWEI2cjNJc0J5VnE1bCt0TmFiY3RyRitRckFRK2xraVVXemlIR0tXYzV1MUZVZE1LTWhueGl4bkFVNGxrYUFuby9uaHVTY0VuSHJRNlFFZG9SMkZJUTRHRm5ZSGtmQmdKVHdObDQyclFIN2RWNklCS3g0R0RJUFRTUEF0WUhjdWEvVXplUDFlcFpKTmF0T0FTcUZFUWtZQ1dTaktvbWN2SjRRL2xZbVI2YldpRVdXVklGQU5hSVRPVncyWlZIenI1TXpDLzBpL0Qxa3dFV1ZEL3pUOWI2REc2MzJpSzRVcUM3VFAyVU5ibmtFWTg2NFhZaUtsVytCUzNGVUt4SERRWW8rOEI5eXoxdzRoMDdCYTRRa2t6TDBMR0pHSXJyWitjTlh1QjNQdzZjZWRwQU1VNkd6UlFxRFc3bnRCK2NXaXNGeW8zV0NtUWpMME1tWG9CcU5XUkZJWkk3Z0RYaHRTY3Q4THBCZmtIc1JRNlhwVmZJUnZaQlU4cDg1RjRoSDhFS254bUVZbXUrSzZjWVkzZ1FlMSsvVHpKQUlSRjFjS3ZObW4yUTBNOGFPV3NYalQ5anZCQ3I1MjF4cXRXVkk2YXBMcGVoS2N4WnVXOUJXTEozUUdxZjlKVGl1dnZVMHdkZ2h3LzhJQlJJWDFWdU5ReXNCcVN0Vk5QWFpEdEwrTml2Y3dpMVBnRC81TzBveW0ySis3OG9uMHJ4Z0E5T0NsYTBnTjBKRVBIWS9ZUDRuaElhd2JFSjJIbFVuUjlEYnpmV01QQXZ4a3J0QTE0eDZqckFtWVVjZ1JmUmxabm5ZeHMyeStvd0xEd2tTMlZrM2RmakFBVVZJSmV3RDA2dHorQXV3NnBJcXhUbDRkbWpvR2xZUVhETWIzMUZKUHMrNjdqOVJOZ3NIWWd3d09jWXR1Zks2VmhDTE11YzRORlRidjlwRVFqRk5qTnIwTFdBSkIzWEdIbTR4N25CUmZYbUhRaFEwYnpxbU90VlRueWVTNngxSGJDL2Fyai9YZS83cU1PbDdNMGVVbkRQZ2h5aXNGOHFJb0ZiaGZFZ3F5RDRvM28ySzVSTHJNSllDYUM1Z3JId3VwRE5zVm9YRkkzKzlXWVBhMWx3dk9wOTFmdmFuR2hvbUppcDk3dXBOSG1PSCt5YjEraExJcGRkcjIxUmlBMTNKaWI3OWs2cFRCM2RGQW83MTRwUTF5UlpiVFhNeWRBN21RRTlSRkdoTC9PeHJIamRSbm8wWGRmOXlFZTBuWEZmT2VyelkrRE8zZmlCV0JGTUFtcUZiT2Vna0FxWFRWbzVmUzY2eU9JVmxMQ1NkY3A2OHVlNHlKZWxoVVB0VTZWbTJqbk5BUHF3V2FObm52MXc3SlA2eFFaYXdTSVBsT0ZNRVVHdXpQQ0JiMmRKVXlnWTZROXdyNkpVakpyNk5aY2JFWXdML2N4WmZlYzgyTE9zTUs0OXhYNjI4UDhOcTNUREVjSUFQWnd3aEx3NThoUEtrNUpTb0RCSmdpVExFU3RQQTUwbTdTcVltTlN4NkZOdjBpU2pVMDR6bVRiTllzNENxemZKZmxtQy9ZWkpnTkJ3REFhQmk4ZUJIVDVIQWs0SVFrS3VSRVIyY2VIQ2pTdFhZaEplTU42OEVmejR3Zmp6SnhFZ2dKU2NuRXlnVUF3bEpYZGgxSnlFQytjaGdnWXBUaHhLdkhoMkVpUnlsaVNKcDJUcEtEbzZXMlRJc0ZXbVRGNnk1RUR5NUVNS0ZQQldxQkJma1JJQ0JsVm8xYXBSYXRTeVU2Zk9WdlhxK1dqUXdGZVRKbjZhdGVNd01mRm4wY0ZlcDA0QnVuVFpvbHMzcEVjUHZsNjlrRDU5K0NaTjJ1YVVVNFJPTzQxcjJqU3VPZk4yV3JCQTZFMHlaTWtNNGJ3NWh3c1duQzVhY3Joa3hlbXlOWnNyTnR5dTJ2SzRac2R0elo3SE9zd0dFd3Voa1JpTTdUZzRFQzRlbkIxbmlKQVFib3VkRUJHUkhWeUlJUkxlY0Q1OElYNzg0UHo1UXdJRTJFbE9UcVFSWEhBUTE2VTRoQzdnZ0NFQWcwWUFCd29LRHJ1RWw2K0dxYkZOUExXR0F4REEyKzJtVVNOT2lCZzd0MFNrUzMxb3hlTWtqckZuMklJakp6ak1TVWhPdWtrb0VKU2lqeUdneDJJYS85WmMwM2IrbjgrZ3FrZ1MyOHM3NTZjalVwM3p3VHIrUlBlNlNlcmxVZFQ1YWV1Z2UvQUhnQno5RjRpbndFOHErSDRPdklXMzlGYmVXcnkvQnFNdnYvS1N1cGk5SGtyVmVmRzVaNElhdmZqeVd5K3A0c1ZYeWhlVlQ1bnhJcS96YnZiam9xWFgxWmUwaGowQVlGTVFaczJCa0FnRklHRnd4SFlOQjlYZGFtd3IzczcvQ0lmZ1laaWZoVDlnYTEweXd0emRaWS9oY25lVFlhL2tpejhLQ0JvcmhGWjRnMWxYQkdHV0tBNzUyRWxJZDlhTEs0U0ZOZFYzMjliRzdSSUlLVTRHRXZoanI4TFUxd2pBMjNzOUJtZ2JHalE5N29VS3dxaU92eVBaRVJJQ0tJekE2V1RwV1F3VjZvSmxlM1ZUbGo1VHlQS09qbTROYnZPZy9UOUdWZnhOQTloRmhRRFN3L2ZSanBDRjJXOE9BNjhpQ3lUK2YySC9ERzhDNmUrbTF4L0lJODc5TkEzNXJ3QUE2OFFXQVlnbFRUQXNZQUNFcWVOKzZteTN3WW9BNEYrak5vV2NOUzhPaWFqUVFQN3lNRmF3SWpRUmdTVU1MSTBRN24xUkFYNlJGOFlLSUlKVW9aM3lnQytRMlFvc0NrdE81bHVNSEdVYUUzZUxlOFZqMGhxcFdBcElFYWxPYXBHNnJkVys3cVJBRmNDZVlpa0E0QlBUc0xoL3dVV2ZPYng5UjZVOHFmQTRTS241ZzdZQ1hBU1FDUUJZTjNrQS8vMU4xZi9rNlMvMFkvMW9Ccjc0R1h4eCsyTmYwdSsvN2d2cUMvTHp6MEVmOU9SQnFqbjFQZ0xvWlE4YisxWjBjOGdOL2wvMkRXZk5tZktwWDEwMzd6Mkx4bjNsdEJYVGJFNVo4SVB2ZkcvR0pvU0R5NDZBTXhZMkRnRWhFVEVKR1NVTVRvV2dwa2N4TURKNzI0UjMvZUgxOFNDQ1M0SWt5WFF5Wk1xU3IwQ2hJc1VNYXRTcDE2QkpNeU1UTTR0T2Ivbk5XMzd5dnYvNTJPYys4WVhmL1RzdTNMTE1lVDliZFh0MmNOZXZYdkx5YVBqRkRVK05nUmNOdU9CMXIzbkRMQklHUnlOUUdEeE95am1vVklPTGg2K1VHQXdBa29QOHdKT09oaGJKQk5VdmhwVU5MWnFEVTZKMEtWS2x5Yk9iWGc2dEVoVktsYWxTN2x1VjJyVm8xY2FxVmdkdm5hTVFDY3VXWEhIVjVjaTRXVVFtVW1VME1NQW10Z1FzQlN6dEYzUmJCQmV3RklBdzVsNDFpamNiQm1RcDZ5M0FFTnQ4MmRBa3dqeG56N1A3OFZVVURCL1ZtdUFkK3g1NmNQKyt2WHZHUmtlR2gxWXNYN1oweWVqSThPS2JGeTFjTURRNE1IL2UzRG16Ky90NmU3cTdPanZhMjNLdExkbE1PcFZzYm1yY2dXQTA3UGNlZmVUaGg3cWRkcXZadVArdWRHMjFsc1RBUCtmejZkcjFtb3ArMExKMVRFZ2dTNkN1dkM1b3lBaXViMDEzWVBNTGJZelRiT0RBVFg1WUVpWXljcFU1SVZjUGZKRGxKK29PdWRzdkxPVXlDSEEwZXBTaFJkNGR1SDRLZ0VwTUVPV1pHYjVFRmNNalZKa0JVQlVCUlprQTJaS05Sc0FOMSsxMHhLOHRpNUx2dTlDUU9jWnd4b2J0VkpZU05ZU0ZJMy9lendpTEpkUUVsVkFWcWJGZlZqN0dGWUtVd2lMMk05Y1NkZ05tOExIY3NBSWx2M3QrcFR6aWtnalM4TGhucFJBNHlEcGJPN0JjZWtoTElSdHlyc28zaE9GYmlVMjlGZ21LWTVKODJ4UmQ4cXlsc0ZXa0VIL2JhbjhsbkR2M1p5NWU0RFZHaVozT1FSREJENDY0WG5XVG1vRkRSNTJ1WEpremxmeUNSTjBqRlVMZXFaVkxOUUVYbVZFbERvdFpOT2ZpelE0UkxiaTBLM1ZmUWl1T0tPRVNNRlR2MTNUdmk2Q1Z5VTdXeE1tS1czVWJ0RG1uSTE3eVgzSGNud2pnb2ZvVTRtYVNVbExuSVBvZDB3OHl2NjZvV0lNZFNpR1BVdjJ0Z21BNEVkYTEwRnJudFFtL2VsdGhmd3VoQUhXS3MrSnMvM3pxdFR4U2ZjWmRXdk1Ca0VrbzJPV2Q1aDhWeGtsMXdRMHRXcWZYeGpuYlhUd0R3NW9tV1o1cWR2SElEYktZeHlnOTcwcEp2ekF6OG4zNU9MUmtmU2JkRFRwWmdOTTlsUUptMmlVMy9IMG5neHZIMjlkQWVZMlFEUXZ4WjR6U2hwUWJoQWpCbXdWYkk3RjdJdko3a2lOMUZKR1dOdUFuMHpNRXlSbDBoMk4xN0pDS2lnQ1BLZnk5bkhOT3R6d25JendtZ3V2WlovVE1CY1FsSEFmdzVFeEhEc1hHdUZ1U2VvM3lDSm5aUmIzVzdVZjNhTlo3M0VZSzdrT1NsVkpzd1lZeUpDdGNHTTFHcmo5OGNuSGhrRm11N1BkT3duMVd6UjBoeFRuUlU4YUJKbXhxSDl3UUlJYy9mVVdCSGo4cXJJU2piTzJoUFc3bFJJYW9ESnBLcDZXclZIYjBvbDVMbktMeUZqMlRIZ215OTZBcFo2L2xxMWlOUFk4dndES3o1Z3MrRS9DWklDUHdjYWNxY25SaXIxUnpQc25DZ1FWYWc1VU1yS0dKNnk0K3lQWVpJN3lqS1RKS1NVTjRvVVQ3R1RkaXhPMERrZmNUVWRta2FCenFQYmk1U2lLZkphSkRES1kxWmwxMnUxUkFPa3dTcDd6SG42UWthaXBOTHI2RTBwSGdtSVEwTzN4Qm5XU3lZMjBjdUgyeldZeE5RM3cybUZ3UDh4azVjS2VEc2RVYWtLbExITkpHOHM1eHp5aE50dEVCaVJETlFzY0NsMnYyWkFuMUNpdHhNRWpMTXdHOXAxZER0ZHFpd0pUTkNmTFNxUlMwQXRWdXFRUElzUUNSWkltOHg2NklOd3BUQ01KQzJ2WUhyTk1XTXc1VHhKNFZpNEhnUlJva2lnRktQVHBuNDVKWWd4cWgwYm9xZ3VIUDZJZ2tRVEtWUHA5Qm1DdHlTT0pkNmJ5RTBsUTFkbmt0bGNpR1VtcFFPOXRCbjZBQlJCdlliaC9vWGFwbkNDNzVHR0l4bDhXK1paT2pvSFVodTdOQzI1VUpvTGRvdkMxVm9BaTJGQVhwK000TjFEeUF6VVVqZVN2NXdHN1piZjlFY1Q2ak1ic0oxQnBZL0p0b2w3TjBqcFFoZ0xoY1lmWWVVWjJCWHFHVUg4NVE4UlJ0ejJmUWRuem5sbEIxOGRDRE0zQk0wUlZtTFhHUEZWUmpFZFFoTFA5RGlKdnBOem9VQXZlZzlaQUxmSWpUVmI0ZXQ1dlBNOUFVVkMxMUpZQk15RXBKb0xhd0hWczNBMENORDBjZzIveG5YSk4rSUpXNEFLZjFHU1VhM1ZCY3VNclhsVVlUdWdab096UGZXS1J1YzhxWU1tbE9NS3dsN3gwa0t0c3dsZjJaUnNyajFoZzJ5enFCYVBsQWFNbGtSQzd6RzRXYUhjOEFCcmx5MG1EVmdQaEtnNjBLSUdzbG4xRkZRR29CSFkxVEd2OUtnSnAzVm9vM09CSXVBNDg1b3JoMGMwTkcyTFg2eVNBOXNHY0JhbjJRaG9iZ25pSjZGZXR1S1NIWExwNWVjTjFGaTFvM01nTW1LZHcwSXJGaGo4MUtpVUxEdlJKREk1S1NVbEtBRklLeFZ6Q3VnVXhYcEdnWmZBZ1BFRTkwTmV6S3pweHZIYlBUVnEyZE9hcTg0MkVOOXV5VHpLMkZZdCtXZFFaRGU0VWJlQjE4c3d2bFFVQ2lGcmJMK3lDN1dxbHpaT1ViMlZwWVFadTFtUFVrVDJYeTcyNk5qMGdwVW1vRVdJZXIvRkprZ2tnYkFBTDREaC8wbG81SkRCTUM3a2cwRHR6UG9nRjBLN0xXTFhSMDZQRU4wb29ISDFsdWVKa1FEUElXVTZNWk82TGEyc2d1bkY1MDhDMmxZR1pQbGN4MlhKMXR1WEZicmU1MUNJVVdTaGI0Zm9qNkxnR2NtbGcrVUNpU2l4Y0g5cko2VFRKZEFDMjRBcEdic2E1aGEvTklyK2g5SWVhWElDaVp1OEM0Skx6V1Q3Z0tZVDc2MzkrQUFqTGxwcGRYQUxibXQvemNkWjhuZkkvc3dYTmJaZHc5bVIxU083SWZnWktDLzRNQ3dwQ3c1c0QxajQwd0l1YmR0cEJOY3NWSG11VVB2aGFrc3hNOUY4Qkxrc1EzNk0vQk9KQVF0OFRCQlNVYlNvandLMzJFWWJlUXJ6dVlHYTluV0ZoT0tUbFFCdzlDRmo5alRHNEozTmdEdmV1QWcxVU9oYjRLQXA5cEhnYU1KS2IwU2xvTDdEb2RIc0xqcHRYaGt2T2Fhb2UwQ0hqRFU2dGtLQ0I0MmdaSnpSRGNQbzJ4TmVKclpEeGNYZVYzVjI4SndrMEhKaFUwOEx0R0RRTXFLT1AzVEdvQUk2WW5iRWtSd0RSazNPNGtpNjFJbnFUODEyeEtiaWlvQk1HRTVETHBNS3JpT3BvdkZMdGJJZTl4cU1xL1NUWXN5MFpRRjV5YVphdnAvYStIN3ViRG5wU3NpQndKRmFnQk1pN3dWV2M3VUhxbG13M2ZjTHZ2bW5WUlNGWVJRRW5neG5IdnV4OFExQ1Y3QUlBdUFJRGRBSDFBK0x3ZytnSGdQNEM5UUxnQkFOYWV2T1R3b3FNSFVvTmdtVm1FeURJN0xyeExIRFhYRWs3WkFNSTl6T2JHeUNHRGJrNkc1VWduVHBQYzMralpRTWpZR1V5dU5YZytNL1RpYkkyY0J4Z0p3a2IwYmdpNGZaZjVBQkNXVDdCRFNNOFllUy9KOG5vNElzeFFZazUxd1pLbTQ0Q2p3NnBUZlFqWGpVTHY5ZWpQT1ZLSjNQaFMyaUlmdWxBSzZzTUx1elk1T24vYkh6aFpETjJHYVBoNDY2WkxVVVpFbVdKM1hSRys4QSt2NVlPT2xGSU1SRkI0K0xqV3l1U3VTT2VwM3FyUFdyTkJvUnZHRFdiZ3FjdTk3MTVrWHoyQkVNRlVaWGZodkw5VUQvT3VtNjR3ejgxSWtzU1h2WnVJT3FjWVJDcHQrRFVpZ3N1RTNRN2J2Zzh6OXFFemY4bWZlSEZuNTVzSlJVdUxZeFEzZk1IWnVPN3ZoazhNMDkxUXhMQloxU2UyaVFOVjBkakV1Q0ZUYm55amVhcU5XdERVT2JxSmVKc0J1bklRN1BLV3F2SFBQRnhFWFRNS1JqZkFEYytNOWI3NVdpdEtlTjJUVHdQTWIwUEE5cTJGVVVHU2FMaHNsakRBVUFNTUxkS1lRSFZqY3dwZ1lLb3dhVVFDMTZycmh4QkRSVS9hWmdiRW9VcytBMTBUeGtzbmtTTGpaYXl5UmErUGhLS05qQlQ4TG9TcXJxQkdpcUdTUmlGNVRCQzdoNTNDaW9lRjRXRk1WMXpLNWpEUG9iakhnUDVhOXNCREQxaU84NFdjTDk0Q281RWRjSWtIbE5mSnRmbW1BRXQrQXAxSmF0dzd2NUx4YlNVM21lS0NXczEzY29kUVVZbEpWdis4dG11ckFHb0UxbnBNaFpleFRMb1BMMGtnN1VleTJNTEV1dk0weTQ1S2x3R2xXeEFobkhmTmpaYVdOY002ckpiTWltaTArc3p2OUJCcU91dGZQVkVqSGpJYk5kNXBhYU5tYkgzRkxKdmkxdGxPeE5zb3RkaU93VDluZVBPNytlU0dGRlR6MFRhZDlZZG1BL3BKOHFGYTVnc2Zhb2lzdzYxQW50OE92aisyNDJXSzNSVnIrY3lPQ0dUWFRaN1pxM3lISlFMUitxZnVTYmdQbDRVb1VubkZNcWx1SDlBUDhSaU8xa2Fsc3hlZUhYbmt1TkllOSs2MDZ6aWgxczhPSzg2ZWtNcjZxc0JzOHJ1VXE2eEZIMGdVZlZzT1lhbjNXU3RBUmY3RjUwdjZ3ZHVLYjBZdjJic3AydkN3U3FGYU1BcnJJTHZZVjBxeC9UczZjRDkvUjB2bWI3cStVajRRSkRIZkx3cWExTDJZU2FLZTZvY1dYVDZFaCtWd3VhUnlIc3BMdGlVTWVmcEpSVVlJdmRPcDVZRisvTWhnQkIycGZ3R2prS2NjZit3U0krQlZ6T1hMR2cxY3hXNERWZjlIT2FhSGlTczAvUjNkZlNpOGhkRnhZaDdNd2xGL2p5aHdEYWdGL0NlMnowaHd3RjRYNUpiRHNGSnVBd00wTnF0anNHTURDVjZHSzE5aGpVQURiUk43eUdkaE9oOHV3SEwzMEd6cXlsbWN2N2FJZzdRb2x6UG5Md3JiamNOdjM2WEthRlp6NGk4UFZIaGVRM29RcGFxTEpESTNTRGtFWExITUNKVFphUEt5ZlFUVVdyODZxSGNXNlpUZTVvTTd2YXRORFhrRmxja1VQNkdTVVFoVldpdEYyVzcxOWZQT1pIZTdnOFdyN0ZtMjR5OGhIa1RtUmdWN3ZqUFJYUHE0ZEQ4MGEwYVpnNDNmQlY1dFd2dkk2QUJZT2dmR3V0aThpL2txeFF1TEVHb0cxbzVmVG1tNm5zV1pyZGx1RTJicjBMZ2tkU2g3RjFNUzVwRDBEWkR3OFVpdFdLRm11c3gySDIxeEQvYm03eHhzOE9IMWxpWUpTVnc0WXVqd2h4UzMwQncyNUI3YUNiR3RnSFpVTEltNnVlYXR4ZXlwclZrcStsRm5CbVJWQWQyb1VUNUNWNlBMa1hYNGthS2JkZ1RtRmhqZXNvL0tqQzhJbWxnYkx5ckdLMzhTN0pqcXQxRTVhQ01pWG93YStVUGd5M2JKNTZkb0hJZ3hQUGdid0pyZFd0bE9HSjdNQ04rMDVpNlY3VW1qaWpoU21JL2VvZFhqSTJXeFFIamFtZlZPU1B5bldEdDU4Ym95OHl2TE40cTkzSmhwTDVwV0JuUkc2bGFhMXBFVjVtL3VJQXBSTjdSWG5UaklybW5BMnNIa1pwR2NHNnlzNlplV1h6NmQ4blRUZnRaaFFPYmFCWG1MVk1WcVprZ05ERmdEaTZYbFRZbTljVTJXWWpwelNTRkFTQnRxcXNTb2xpVVBLVWZiQUQxK3BpYldaNXlhWXppL2ZtV3NIUlhpY2ovOU5wMFp6ZmladEozMTExZWRnZkF0WDhXK21tdjI1MWRmRXdGQXRxRzh0ejJ5RHpMaUR0dmFiZXJXK0pxTmJoQ3h0U2dyTTZxNHNsVEpTNDF4YUNwQkdocHBEcnJpUVFXVjdOZ2RqNEY2aFNVam1vTFNCc3RaVGR2ZGZoQVluckJqVWl6bStnd1Z1OHpxaHNXYjN4L0YrNVhFVURVVFFYUUN4d2RIeHk1dmk2WUhuczI4VWlKaDBuN3hJV0MzNWwyc0dWUXFTTEhmMUNON2dDUUtrZUdnUjhhVFdxVy9CbGY1S0NBUWdUbXVMQ3hNelJqakxJc1I0UWczVmpvNithdlh0bXNDSm9aTU9rY2J6RjFLT0hHRDdaR3lrbGNXTXhzZWlEc1NtVXdDU1JieE0rT01WWWd4S2d3dlI1Wk5NQ1I0MU9RdUhzenVRMSthNyt1ZjNnTWVQM0dSR1hITTBHT2RiR2hmZjd6SWFSRUIrT3h2VGgwOThCczNmL0RBWTNwb0R5clFVdTZURUh5VWg1ZHRjaWMrT0NoUUZqZUYrUkR6NHR2cWREOUZ0T0NpQTJrZklIdmVrMlBMUmZ0QU84ZHhZdTRlMExpejdXQnl5K3dEeFg2Wkd1clphYnJ1ekd6V29PK21DK1pGa25Hc0tUdUx6TkhDSkM1SDhnVXpGczUzV3JCVk1nSzNJbE9CRkwvQkVRV205alRtY1I4VUVrMExKL1FFTURmZ1BIVFpDcXFXRi9vS2VldjRVUjRxR1ZVUzV6eEIwTmZ5clFkblQ4d2ZkRWFMdHBjajNKaDRGYS9HVDZZYzVadUFpMkRqdXdjK0liK25PSTd3Nk1hcU8rQ3ZLYTBqemFlZjREcVFvZVVJQWtka201dTVuUE83Wm13VHpBQTVWVWZ4b3VTMkdGQUlNQWhBMVMrZllZVklwUGNYaUZMRkNqbWdlT0V3QVVkRElIdzYwUGdwSk5EMk9GUkZid0lNRWF4aHBLV1c3Mlg3bG13OE9ZV09GdzJkWnNuMmROdjhKcCtmRkk0WmhtVDl3WmNaYTlnU3VBQlRydThodzVrMG1lQ2o3U3NlOWRLZ2dKUFJSZ1VzZVVWSGFrK3h4OE1RMUZHRGhNcWF1bG1uUExuQXREWUFDUzlPVzZKZXhlMUYrNHc5dkprejVVeCtxZ1c4NWpreHd6dzV3V0FXNW1IWnlmek9SYk5NekNPYzVqZFZwaFpzVXBzZStwR2dScHhtWjQrWjg5aTlwTzN4eGhnNVJoKy80YlVDakVwaDYwT1AxL0dXWnJXb3JpN2FaV3VRaStMWkp3WXAwYk5NZWZaaHd4NDk5aW42RkpjQUs0RG1BR1RJaUZXSnhEVHp3bEhmemZ6YXZRWWQ0eVlNeURTWVBDTE5tSkN6dUZGYnBvNUV1aWlRWkptUWxySXprRXhCR21LcDJMVGppa2lQc0tmUHZGMkpkRDR2MUUvczJlMjZzeGdDcnVDQjZNeVpMYnNJUDJUZDl1bk03cnNzdFAySDZGQmdVbE9CNjBDL3pZNHEzUXkwcHJuY0FTN0paTTgxMnlZZEpaTDQ0Z0lETnU0NjJZUmFUenk1SEtxN0xqeGpGT2NieGFYWnBCMHJiWmJVUFRPYi83cXhrZlRQT2daL2RLS1JnR3o3YmZJc29RMER4djN6OTgzTE40WW92b2FibU5aMm5qT0tIblo5c1JkVEdqSnF4SU9ZTWlkbkp3UlpEcGtUMjJwcGtkSVVOWEZTQmhYS0hHdUJoK2hsMytqNWJTcjJYTU83U0IzVkthWDJCanJPTW0xNHErUnNPR0JIc3dZRk5yK2tZTHpxQU0wM25qQjk5R2pxamthRHhNZk9hTnJXNkU5Vk1sQmlsVFZ4Y1dSaUFKZXYvUCtUNGE0TmJZcUVza2RzUzRhNHJWS0xLUUpOQkpRRmJTcmZqdEJtTW9FVUtTdmpmQWxBbFlUalMwUmgxTkhVdE1XSFc0Rm4zMFlVMEk0STlBUFU5cnd0dU4rYmVubFNjdGlFVFJZbTRnNGo3dDRBSkpHb2Nlb2tPUmdRTTh6MGZIOU5MTGFTUVJFOFdjQzRGZmthc0NiWmhYNms0c1NiR1hOTkxkSXZtUUhPQkdvR1Y0dGdOSzBzOTN4ZkF2cmk3ZW1NQWhhVWdjR0l5eWZmZVhTcGJIZzkvZDhtOTV1OC90K1R1Ny90KzdhNFR4L3NvL2U1TlB3enNwdktSck5UajF6cC9rL2Ivelgyb0UvLy8yU1dlK05xdmdtUmRVMGFLandSSXYxNnBFNUZVZW56YjNvNzVBamdIRU9rSUY5K0dYSTlmRU5ZS0g5Y1JrUHlxUTFHaFBYUytMTEdubVgyZUc1OWs1VFp1eXJGWE05RG1UN0tsNExtbVJ6WVlMaTVSMmZEa3NLSWJmQzVya3hnQURiNlIydVRmZW8xL0phSlA0WjJ0UWJ2NzVpYnVHOXZRYStvTStYYXVpS2FIWnM5MXJJeVFXK3JCbUlvZ3Y0WUV6aDMxOWZkdDZlZ3I4NjVkV1Y1NjRySitKU0srRzdpVStJZWJqL2VMeGZJOWhGWE92RXhjVmROQzk1U3h4MHA5SS9hVXoyYVZZeFh2YXE1YTlqaW03Mm1TY2JzQXoyTGEwT09icjB2Q1E5WUhkaEFwTGxYYS9XTXVvdytjLytxVnYwRHlxTXBYTEptZkVMWDhFYURidTF4ditFV3RKQnZvb1QwYStrVzJPbG00MlkzQWtSbURRWVg2UHJqWld2OTJwSmtVQk5pWDZnbzJkTGhlOFlqRVFPMXd5cWN2L1AyajJ1aTVIMlB5eXRPZDNKT0FNN3UxRTIyL0ZxbmZVUnJkdmIwNGk3b1g0TkRyeWZKTFJvdURJN2FtcnZWcTl3KzdhcDAxNGpGRnhxeE4vZXFWN3I4MmFtYWM3MTI1VUN3dVVkWDYraWxBaWxrdnNXdUdBaFZxbzJPK1ZPSytkV0NmUWNaN1NxQytPcTkvcnJNUElNenVNU2E3S0cyRmpOZ2lMY2szLytvNVZ0RE4xRnhEalJwc2l4TTNqWnd5d1NrQ3NJcnhCR2xtZXhLT3V5WFNxd1gxSXdXaktuVWFOU3J4djdtenFOdVRsVVVWWnEwM2NsYSt3L0xkQk82Vzg1c1VidElLSVlWS0w2SDdIaFdVck9yNENGcVpQRHhtKy9XaDVSUEhxWDRMUk55SWdqUEYwZVVsRElUdEhPZXFyYnVuL1ZUaWZVS3dXaWhtSXBBbzE0Ti9wL2dTcXpnN2x1ajByN1dLS042T0NQeGw0WExCMUJid0tFR3ZZd3F5elViTzduTnF2ckhtN3RvZnFCTTBkTG5kcXV2ZEVMQjhtQjVuMXpQV09qYTVKQXFTRVFyWGRDSDNQRGV3bjJoK3dvSmEvV1N3c1loSzlNaldzbDA2N290M0FGRHNsWG44N2RTaGlSbnZ2bWE2Qk92OG5RT21IVVFUUnd2WFc5L0Q2clFjUzAyWGozM0RiSS92eitmWElidVNwVnZWcXZIMVhmTnZYdXVtaGczVm15K3JRaHlqVjl5WG5SYTJiMmxMZGEvakg4YmJhVXQ3TjZhNFBpbFRaYzNtYmxqSmJveXpvdmNvdTh1ei91UElORHo4ODRST2o2d1cyMTB0eU8wb3JGVW9QWFhOUWJrOVpKWEdWa3JvRzZaTXk5WFVQTGEwejZyU2dxbGdYS2xiVkJicTQwcWNYOTMvdDBQY1p2c2tWSmx0TTFPeWJodktreXRLT1lNL3VWMHNWZ1RVZUlCRldGZzJ1VU8wRGZ6RjliV0JYdGpEanZTSUhsVjI4MmtuQmxML2IvOU5qcTR3TStNQmd0bkVSZUQ1bHpXWURTMkdxMHYvMENibTZSYTEzd0g1QS9ya3R5ZkxlM1kyczhxOXJ4Yi9LdXJHSWptSEhwUS9zYTlGKzNHMWpSbE5tWW9RdzVYMDhYMmZ2clRQbUtTWkR4ZGpNdlVwTEpIcERrZEJiY3h3UlQ2QnhHQ0JzUXgxS3J0U1Rtc2VBQ1pCeDJ3a1YzamZMVFkwSUo2Z2tpN0tlUWNYdWdMK3ViUWo1WFBidERvekJtem9jdFJhK3pOMmt5UXV3WWJLWDNuY29PMFdsa1FzSS9PQ1hyY2ZiN1BHSEpmeWY0VFB2OE9WaTJ0c0p5Yll6Y2JNcmdyQk9YR0pQdS9PaG1CRUpVZmpnbmlHQzZKN3dnQ3VHQzh4eVZSRk5rVW5kNUFWcUgzTEhBeTgxd2swdVJ5SldHZGI4ajcySUMwbGM3TmIyc2dmTTI2ZVVPMllmYncrMW1LU21YMEpsUFdaR3cxVVliNkRHa3laU2xEZXNOdDFiVVhsMFo1bzZFZmU1MEFXbXhzUWQxQnBNTVlkQTR2OVB1RFF3SFhpSDk2Q2I1c01lZlNCb01oWjhTYU0vcS85QzZiTEM1TkdZMHBLZ2haTy8zMnFUMFZVQVlxSFdER3FWYUpoOFRWSDk3TjBSbmlrYXBkeWwybkJKSVpWQnFqdzFDcmpnTGE2V0F6Wm5CM2VZRWhvc3JMNUFZSVoyYTJjeHJuYkwvV1JpVVJmZGkwNE14czI2VHNHMU9sWXYvUEg0Y0FoVG9nSittYXVFSWxpZTBJQXJKTEpORG1iSE1vRTBxci82aUxuQ1NqMTRkOE5INXFhVlc5UVJBdElvdTB5N05rdHV4RVhPTFVHYzZrMjJEOS9UYzJzL2pmblJBaEpJU2hqQXUrNlcyMTREMVFNZkVCZThuZ0krUWtlY09tTkgvNytTbWRNUEdkYmlFMHlhdGd2N052R3I4S0JiQ3lJQWwwMmxvY2RFZTYydXZjYTd1czJkY3V5Zks1eUNMMXN2SmVkNjJ6THJ3UzhuUjduZGloMlJXTkJ2aFN0N29wVzRzM0tHdjlKNEk0bjhmU0tDUHVYcU5BZWFOUlVDUXZObWFWVEJCdU54amhObmN3aXhvTUdkUnpybTh6R3VEMnpTbnpaMFlidWpKV2t5bHJNL1RZZDlZZEVveW1qTjNZYmIzclZyYndYQnpwb1BXSnZCM1VlYzg3MTUrNXNiWENLWk5wa0NLNDJEZmtjNDJFd3E3UlJYNmZQbzI1b3VmNWlkR1dldDg4cDJ0a1dxS3doRmdKV0hNdFJyTTVaNXkxLzY3VDNDUlI2MXN4WDR6VXU2TXBGRGRucklidVdnZlZ6YW5mMkZ0Sktjc24vNnJNclNuS2FFemEwK2MrSENwbStyei9lY2dUUk4rLy9iVldZd3AzaGFHYzNtOWRNanRRaHhOKzJDR0lvU3BKZkhzUXdnWGp2YVJsUDN0SENBSzArZE84MnBoUUdqZVljOVo5dU80dW5hdzBVK3V3cE5TT3FMUk5iZFgwTkR1c21BOE9WVDBua0RWOUpWQUY0QUZSbk04dE5qVGh0U0ZaVG05QTJsMkJOS2EzNXFuMkV5ZElUMkowTG83N29UblFremFkLzJzeEVVU0sveHBBcmJydWxCMWdKajM1ZlZHVzIwTVdhVlk5V3VSbTNWSXhyZWJmNHRwKzVaS094NXNoUFZObkpJRXVQOGNXOFlzY1NoM3BhcEpTOXJSODhQRE9MTEVHT2pjWEViKzVhLytsWnNsL2hHOU9ndnVidkNkL2NYMmRUaFZLS0EyVjZncjVKeHdJOFp4QUNGb3A5V3V1YXZOdDJsUXphYUxxRkdxdkdoVFNna3VSOG9iK3NCWU9lL1Zkb3U5RkZNOTU2cmhROE1PWWVGTkFHWGlHZkdaVU9icE1tT1ZMdmlUNS9tTTRDYmZUclM0OGp0aTlmL25KQ2RjeDZTMnpOUG5KL0x4SHROanJxYXRmS0RLUzVNMXZaMUN2ZmY3NjUyU0lWcCtlUWJvQXZxQU1HVjZQcjUzNGRQYU5wczlVM2ljOVR4S1Z0bis4U0FNekh0bFl2dnpocnkzdkY3NVhZSG5vcTJYTEh2N0svRzdCZTRVMWc0Zi9XVlcvUmlIeEM3MC96NkNPZnY3YTV6cmgvcHovSkwxSzh3YXJhT2J0MWxmNjVBOUNjMStaSTMrVTd3R21WWVRKb2g2U2tqMWcxNWNjMlM1NWQ4L0x3dUxZUE9BZUVJQUlCTTRnTDdvV3EyTC95VGNPclBMZTVZTFU4TTdPN3RzK2ZCc21Wdko5Y05WVUVYbnE2Q25TZ0RzckVQV1JSc0RaTUpzbisrYUZXNktZaHJHVTUyb1M1UmdhNXZtVkZRdVZDOHNoZVlWWkZqQVoxRnZqOVFuSEg5TFhlS3krOWljVEV5eTZpNVd6ZWh1aCsrcTcxeHg3RmxIdFhNU0VKNlpoaGVTUTVENXovVVVWaTVTTFhJbGR1T3kreEVmTUM1RDBzUXpwcmlYVTlSYW4vVE9KcWtFdFdIZTJ6S055ZWlKKzVvN2kwVlZZMjZ6cFh3Q2x4Y2ZTWkQ5Qzc1MS9wY3lZTXZDMTR6TEpWZXhVUmgvWDRuVnFVcFVJWExkcnNBdXBWdFZ0ZnV3WnI5Z0xNUElpUk1zVmpxOWdhSnpHclZKQ1NjZW13WWpmUHhBQm5sVHFRRlFkakk1SE5vZTFDNU8wMVpLaWdZV0JMWUJkTE5Zay9aZGV4Um9WNFNCMmZMdzFjMFhDSXZtenEwcXJ5RktCU2ppVGtmb1ladlRvN3dzckFNSFpmelJBNTlZakJaVzZQMTArdnNwZWorRWVCWnJaOHVlZDA4NTZ5c0M1QkRmdysxY3VFb3BvcmFaVWw5WVZHbkxzalJCWkV4UE5KZ0tCMXNabUhsNlRhQXpZOEcxZUdXRk5HNktDYytQMUlvMHRxOUxIS1lYVWZady9mOFdSTk43M0JmaDVra2dlcWY4WldTMll2a3MzRWo3cGZxaTcxbTVvSk1nR0k2Vk4xT0Y2TW8yL3I0bHVibEFUUnQ2cEJrQk45NW50WFl6SDJUL1B6TVYrWWVpNTg1eHVUVDFZUy84MlY3ZW5OVlpyYTNWUzZPR0JnQyt5c0lWK1kzZUtYcjNBRS9BTzBzNzVsOVlZMHBTTEdxbFVCa2lvRFIveFZEcXQ1Ny9BM2FrKzFUZHVMdUc5YVdmU0F4cVhiNDdSbGpXcThZQ2JEQW0zWUJBR082K0hPUXA1bUhNZHBqRVl1MU40RDZOWEJQZ0l0b2xoQStvbWhjbW5SZEJSTndzZ211VW1mKzh5RkkySUVIbFliRzFaTVF6QjBMRGtOd0hrRTdUVzRmenUzQzB4aHpWM2IybDYxWkFuNkJtU0tlRmFLU01JR0tsa2VBOXg2NHE5K1hOZHZuNW9tWTJXcnd6MTlkY3kvdG1NZnc2MDNPS1Vyd2oxenE1VjkzQWs4NnlaUnFQRmxyUlljcUk1cFBHOGp6M1RiRFRWV0MydHYrOHFGcXNJSTdHaFp5cysrVDFMWFRQM3k0L3p5TGNhYlQ3TjdkQUUzZFR0aWJqTW96eWtWb0tlQUdZMnhxRzZzMktJZTdSSmFnM2tUT29NWmNEOGJuVkVKcVlGNFZySGE2TDdpVEpwa2JNWGMwVHFPR3pLblZHYURVMkkxb1dwelV3ZjVBTlZZTStnbXlFMDdnUk1NaDBXSXNaeVVVbWhodW5YV1pNbTVmKy9IYnZzMDhtREtyT3JjYTVhc0c1aURqN2FKYlk0MFhuT3NFWmNVcXdiRHYvbGZyRGJVZFdweVhxSGF0Y3hiWFRUVGdiZUo3OGVYRjVuM3p5TFpQRnZyT0RnbmhPQnAvdkhUYVdMV2hINlRkbjgzZlI3c3RFeS9YNXY3c3JRSzFYWHZGMk5hWVBSTnFScURCaTQwZi9uNnhRbCtMNVE3WVorNDNwa0VOOVR6QUNZbW9HdWNUeFNpT2N0WW9BM0poQlp5S1hWd2p1Y3ZCbzVHSFJxMWNpS09ML3N1Z1Q0Q0dobStndzdLOEVLeHp2U3ZQNHhCOVlKbVdVN0p5OCtJcFU2REVBMS82NFJQYzBJTlQ2M1N5TVpHd1B2MzhlUHM2NEM3RmNMYXh1MHFjNnE2dDBRNlZFQ2NFTEpjS1ZjMmd1Q0lJMnFsWjkrdS9uWjF3Y2xHQ05va3dESHhyNGVScVNIdlh6dTFPeWZwSC8vejc5aEJzeXpUMjk5YlZVNGRobDFpWWNSNUVtdkJOTkVsTkkxQWxvcTF6RVVKbEY2Uk5MTjB3RDg4TGZ2N3AwK0NiNE9iSmVxMlhOV3cxdTlvQW9OSXAvbUpYd3BLL3ptaDkzNVBnUVBaUmFOUk5KTlBwVWZ2T2ZlT05sZGhGQW8yZ3FBVzhWQ1FkbFdGMjczRFpENmFaTnlWbTZPN0ZsZkRhcnlpcnZFOG1mUTN5NUxwSGZSSEFDNGVKZEU4dXZNclRYYUdxWkRKT3JVODJzYUZ3akVYZkRwanpnbFU0Zy9kUU00SjZhMDRqei8xVUxjaitUZi9ORlRpTldYeXV2OUhVQXczQXZlQlNNSC9DRHV5elNIUjlNTGZRK0JXOHNFUXRFMkVGZ21GQXFKcGRYZmgvU3k4M1dPZXllNUxGaUhnS0VwSjNobC83V0JiNEYxcmw1T1d3WElQaktaQngxeG9YQzE4OXdkdngvaXp1RmRYanFDUEkxUFZGOENPSzk2ajRkTWRqa0JkS3JpdFNIVTduZ0ozZC8zZjd6L0oxazhFelQzenhTTkJhcGgrYjZ5MVRXMHJGcU1Lb2RjKzFTMUZIMHlMcURDQXZEcHZMZy9iVUVxdGZGZnA2cHhwdGxMK0tDRFRzQjExeDJKbDRvNEwxeXZLY205VXVNVllNY3Y2WlFja3U5V091dU9za3VyYis0Y1BwVlBudC8xNFpzYlNDZE9CZVVZNWdPM0FVZTYwU0x2dytCU3NhcGF5cmVFSjBwc1pmLzNXaE9mRkh6bzdvTit6enp2LzNsOGpNVnByc3k4d0VsV1pTcU82SVJNZHVYa1Q0OUlwV29LcUM2K3EwR3ZjUWsxSHNhbGtUd3hkc043NnZoSHJJdkFQMllSWFpMaU5MOHJIc1hmTEpsUzNNV3d0ekhjdkRjZzMrZm1ibTlUOXY1YkgzOWMzRGorekxqbDJmRVMxNlZ1dkx1b29KRFgwOFBqOUN6bWNXL3U1ZkI2dTR0Y2h4dXhSdlJ6eXhWdDhiSm9WYk91bVJVdFl4cnh4bkRNdzJFenZOeDM1M1RueU85NmREM3NXLzhsKzV6V2JKM3NLVjM4MlhMeXl3M0tXM1JmNFBvdlBrMjNNcVJjb3Z0eXZYeW41aU5jKzlHbmk4REN5V3NDOWlrakhOVGVTek1mZkZOZjdjd2NDdkVlZk5aTGU4Z2xobUZHNFBpYjRqdE5DUkVLdWJuekpWNDF1bW1ELzhGTVd6K0Z2dEdCZDNDMHB2SmQwNGN6UlRXYSs1aHhFWmRBOHhmRmM1cmpJdXhkQSt4NHo3TGN5OC8yQ0E2cERnR0g4RVBsbnByRHFzT3p2SWNiOFVaRlhxNW1OMXdkNVNMam40K2JQeHN2Y2FxSU5VUlJvL3pXMlRhOXBYamR2OWYzRmt1TldLem96d3FncXJ4U1VYYW1lUWFYcFN5TVlXVzZsN0JZb1pMRm5lSDdyMHdobTZvQ0ttN01pR0ZHYWZINmYyN3NLV2FYcGVVbDNSajFBb1dWTkdPR0Z3eFlkMGxKUUxJbi9ycXh0VE9tU3NKZDNCNTFoQm16cFJvUDJWYklWaFI5bXJSTFY5aFgzTnRvVFRGakVUV25CK25DazdsT1UydnM5U0xYWmVJaWtUcWZhSmFldndKRnhibERxdmQzdnI5RGRXNy8rNkpGQVByL3YwN3IyUTZqUWZUUWU2THpXUFBCamcrdWQvNFFoSHdkTnZVZmRLUHN0bXhadGlxcnk3S3lnYThZeHlzb2JWOUdxdHRqNEN0Z3RiT0d2aXZycU03b002eU9zbHQ1WlpoL2tzcXFod2ZBQnJVOUpFdHIzS2JGZlJGUDRjMlNtNFA1N2ZTdXFXVlI3Ti9YUlM1dWNHbnByeDVUdlFDZS84VW9SZVRxSE1qTEQ4WXIvdWFHNUhzbnV4NlJBWTkyZWJ4UGVMM1R6UktKV2U3M0R2czlIWThDd080T3Izdlk2Mm1ucGVicGJzOGRtczhVc1hFWW5vQ2NjZ1ZFajhQUVY1Q3JCS3JVTElJS2x1NDZlMmNCeUlPVzZ5WmJDclpoL1Q5MVE3NjZRZFRxY0pXYk9pbzZYMEorMUY5ZDNJR29PM1FrQjFVaElyTE50SlQxL2RmLzZ0ZDlQL245MDYrWEZja3BCd1BtT29UTzZIVStYR2NJakh3T3lMUkRIcVduRUMwdyt1ZkoxSktnZ3BFd2NqVVJqdUVhZmRiMHlmOUxJbG9VWE1DRHdMOFZMbkZZQzhUVTdxVlYraXJScnkveFdTK05MZDAxUnlCQ1VUR3Y5MmI1WFYxSlpQNS9OVHZnSFVkMVI3ZkQyNFdmRGlDcE0yM20xM054Sm1LeDl1a3JybGhGN3pDNlpydDgrMXJmdGUyNFZlNGk5SGEwYU5VSit4WExCL1dmWmZFcnlwY3RYN0hpSHo5bDVOTG1CSjdBVEhFOGZ2SXdkanZHZDMrQ1lBamFUa2tsMy96M3dCVmo4dk1tenZEQVZiYXNBZ0tHMU9mQWpJbUoyV0VQWnNGTTJJWmI1TGRzU0wrN0JNejV3cnZONlJxeFNGVEQvK1c3QWlEL1R2T0lXSnI5azh0NTVYaCsxYVgyVTZxbmx4TXpHMmFRY0x2ekdYYWZ0MG9PY0ZXdkVWMlpxUXJCdERVTzRETEt2RDhmSmlVdlArZnRoQWZraWdHUWlsTkFqdEJVWXFYNC82ZUZrcyt1QzBYSHpxZEtXMDd5TmtKVHpudTIrL1JHNkRIZ2VsYWJtM3o5YlVkNVh6cTQydGpaWTlwU1h4a3NkLzdtbHN0bUh2RytPNlhVZTJJQk16bFN6OFZ4VDhVRmtoMmVReUorM3RmL0cySkNsZUhzYnpQOTBCYlJuQ2F1OUFtdWM2WlBHQ1JYcEhQRGxOYzlTbVl6MVBLUW4xeWViaDJodk1wUXRmYkl3cnBxTkxURzFObGwyaHh2c0czcWFWOUxiYXc1K2RiR2F2UXBOMXNIT3l1MndKTGY1VksrVU9ucEhUMm9veHY0cU1vZFZXZ0pIN0JOZ1pIZU92dGZkL3N0S0lOcmNuVlN6TnhDdXBQUWtBUDM0eXNUblFObXQ3VmJaYSszVU5wWWdqNVpIakJza0tLMFFRdHR6eGRYWHB4OGRjT0RydEp2QjNZdFgzOUc2ZjFUWlkvYlZmWkUvb2lKN3NVRExsdDl0L0taRGMxNXIvZGtldU1iNHVDdVY0OVpFUXlrbjJSWU10bTlSUU4vbDNXR0FCWGtGTDZJb0hmOG42ZHZBa2hHTHloN2JlZ3ZoYzRVU0NvSWNQbmVxYWVYWHZnZ3dBZWR3dDJ3STY0NURYbksxMjFIaFlCeWpWSzA2Tks0LzQ4YUx2b1hVeTJ0NFNwZS9rVjJ6L1RZV3FxajNiQTJHakdzN1dqYm83SFlPbXJXb0NVU1BiTjJ1Q1ZSc1crRVNEWHJSdngrY2lTWkd0WDRmYjVSS3FVZDlubnRWQnArOUl4MFluRUpiVVVhS1dWTkhjWFVLOHkxblpSN2lvOURMUHlmUFN5WFRDVngxNzRucWxsNDlva2IzYXdJTEtodVBhTFdQWFhOdXp1OTJ1SEVPYUo0K2VqNXZhK05xRjVEeG1RMEtIdHl4am5qMDZwNUI5YTk0ZjNhcDZvL01WVWF2ZjB6V1BKQTdoSjhLWWVjNWVXVEF2aE02a1ZKOHNVemlJRE12S1hVYjVCK0pKVzV0OUpSbWZRb1RoK3RabjE0b29wMXRMR3RlR1o3VTlPMG1jNWx5ZFdiQXpZWGJkeDJwK3BPL0M4elNRVkdqTy9CM3RsRDdPODgzRmsyTnFWV0hwcHBXcG5FazFuL21wWm9WNmFKZEpIbU83TzlRVkpTdjBodGE3Q1U0SnR5Y2JndC9tbERyZjRVWjhFUGdLVWcvQ2NJL2dHREpmV043RWtlK3dTYjlUdVhOMWttM0NCZUM3STVudDRDb0RBbG1pNFExRE44UVhkdkFWZzQyMDd4OWZmQklyaW8vcnMvSzF4YVY2UnM5eHM3WHprb1NDM2pReW1Cb0FuYzBmTUdwQmhocHJQZXR2eDlycmRYc3ptZTRRS2dzSjhZUHIwYWFidW5xZ0F4TVFUUUR2K05QY3d4ajJPeU02ZHUvM2ZubWovR3YxMWtQUUlCZk5CY0N3S1R3M1VnUzV3RnJBQWRSeFZ3UmdXOHFRSXVoMXRIS2xPa3I5cll5MThmYW93aVcyc2c2N1lHTDFqSlpNSlV3b2NxNFR1VnlCMi83UUtLN1hRYm9QR3dCcUxXUUQ3V1FMN1hRSDZ6WVEwSUkzN282KzJnYUFINzEyM2QzN2MvUERkY0swSUFoL3ViRVhLM0NXd0hwMkV5UE95Ykg5clltZjBCMlBzaEFQTXNTSFptY2V2NEZzZnV4ZjM5eGYyelYvLzdENHNYa2JnWmh0bDhxd1lPcUlFSDFHQ2YrOEVmTDlOcU01K0d6VmYybjIvK01FZTBtVWV0WmNCZS9TSG9ja1ljY0o3NEJyeDZkUmdBb0QwNEIwNzBxY2hvellMa1dvYjY1YTV2OG1lV0ptb21BR3B3bVBJZlFCZ1c1TzhXYWpBSHZvMWR2L3lpNDhiN2Jmd1RQWjNzeEFHdi9hZW9ZUUFndmw5S0V3RHM2UjY0MGZ2MXdiSHhTOUgrVDk4OXJTck5icTNuTkwxZkhsd0ErRVJET0lBZmgxemt3UlZIV2d1UFRtRWZXSy8vM1h0TjcwY2V6cVhiUkgvL3M2RDNiMytRc3p6c2xOSms3N2Q5R3hsc1RDSHB4ekk4dSsvVDc3ODRRdFc4c29IM1ErakpCSENSOGtyNFJ5QStmNnVETXo0TWNqWVA5N1NodjlIQ25wOEtmM2lHVWd2YmcvZER1TkR4U2FJQUtNVC8yMWNaOEtEOERMM3h1VGhGY1cyaTRwOVY3aFhMVzBCVkgxeUhsNHQ3UEwyL2xRdW91emhYNzRyd2h2MGFrYktucDg5N1BOTzdGSHpqb2l1V2xGTmVzK1Avc0JiUC8yS25IZHo4dW12clBaU3hGYkxpd1Z4eURVb3hwUmszbCsvOHpNZVBoNVIxR0FjQTdzclYrNC9wQW1KWDI1VnNpNGd2QXdxeFdEVGFFRkp1eURRMkVjbldYcWxLb3BLcHVhblJBRFRBaFpPMDdYWmJLamtibG5XcDdSM1lhQU5UUGI0cEdUZHp1VU9xZFkxV2llOG1EM2pvY1QwNlV5d1FBVWxBMjBZQm9LSmxYUkFKRE1sTmtNWjd5U290WkVRalFJL0VVY2xXbGRXT1hWUm1DbGVPZ3JZV1ZJMUJMN21iKzcyZTBkTnJzTDBDNGRaczNvRUtoYXh1TnNuQkViRnhNa1NFUisrWmpMWkhZaEpWVjNteG95VlJhVVQwcWpvdnJlZ2NWZFJzWGprbWFGRnRFZUpsamVRRlZRcG1VMDRRY2JDSGpBejFpVUlhd3ZsT1hrTzZMUjZrWGVvbVhNb2paUk5WM2ZxcXgzN0hoN2ZVZWdEVkMxK1pxRXdscTY2M3pjeTkzcTU3NCtxdUFyMHR0QlVxZitKdGpGaXBjMEJhK3lsNWE4Y203WXpOcktOQStJUUZPM3BmMWZyVmJlMURTcGhOV1J0b0hlSk5oZnNYUmVleHF2c0ZxU2ZVNzU2RTFpeXJzbkJaV3hwWWFHWW1JUkt2V1M3ejdPZy83aTRnZG00SkRhUmNtaGpySzFNNk4vUmFjbU9KaEdobDlZMDRIS3hralovY0d2S0NuQXJ0ZHV3SWRLMUlSaWhXdHN2b2I1SFlXVmFoQ0w1N2laWlM5U1VxK0RUSDg5MXVBSWp5bFZlbk5hMXRTaUdiSFNuMnpYbG5wOHVxZDducW1QbW5Dd1hteDIxWDh1UEh4emdmRUl0RXk1OXR0OSt1djdMWGRsUG95NWw2NzFsNE1BSjFvNVdvS0lGMkYrNlhaMVR0NjJMTjVndXhXV1dsRXRNa3hQZmR2TnhGcllnUjEyMVJsMnZhc29EOGVnNjNzRjR0UTdsUWVHeGJQZUxNQ1RpcXIxd0RMK3ZTSmZWMis2TVhmVzljRU1QSzBMLzg3a0VpOFkycmI5VkR0K1A5R3lMdjVjQldKMW91N2NLZEV4V2VyOGpQNHd2RFNzK3o2QnVQYUdLT0wvQ21saVNhNGJ5aUx1ZyttUkJSUmZCQU43R1NaMDJDNFhIOGVwZFdyL0NCOGdiVVpVcGVTczV4TlFESU9ZVkExRW1JZWlLWFdLWlJBMVZHVENUeG9tT29nT2pRRGNmWCt6MXJsT3loblV3dEVQWmlRRFNsU1EwWEhPVjVzaTllNlozcTY5Qm50QzIrNnZQb1B2Qys0KzBWYlR0NC8xLzh3WEl4RzQ2bUU0d24wSGkzL1hBUXBpTGdBRlpnMExqNUtIKzFYQnJIUW5waFRaMHYrM09qSXArNmIwZ3M2dW9TRTdxVndqdTN0ZWg5SjlCT1hjL0N3RHkvL2FVbUZxbEZMTW1INWxVMVI5aFJVdzRTYUkzMHFGSFdBbm1tU2xxbythdHVHNFhzc1MxNXpmMVNzeWw1YlozYjRwRlg4N2F5QWNkbWNaK3pvZWh6em9YRWRhUVNaa29vTHZtVjRMbXp1eDZ2RXdXN1JWQ0V0V3QzZEFVSzNmRmlaMWFkaTZWT1FYY2g2bXpHenoyaHpqZk1LUXFUamlqMnUyYXBqaVRQcmFSR0o3N2FOalRwY2Q2Z1BKQldBUDlYdGFwY1dQOXgrakw4amRQUHphL3dxaU51ZkRBdzYzYlhLa2xybXNBZStRVThKZnlmQTJ2cUYrUlAzWW4xM2VoaDUrdTVIcmJNUklZdzlQTHRvWDh3T1lHMWtYZUM0ZWE5WjAyTTNhTWF1bno5Y255YXZYcjdMRVFQSHErcXBoaUpIeTBKZ0pnQXlzem9tejNUbGxZQkNkYkl2Uk9jVWVMZ05aTHRMT3BGcHJYMDRXS09nVjVBbGl3OWV4MmJNMndmblkrbk52TVYvaXZ1L2hPenhGSFZibEpEV2FOSjZTUmx1Vkc5c1ZxMHhyVkVYVGZVS0J1TXE2Z1BRWGRVczFJeVZ0U3dKV3h2aGQraW5YUTlJQzVLaHhITE10NGZuSm9zdXRZTXRxWEFMQnZuUUZRQm1IT1dkbFZyK0RUUHhsSWdkMkdNcThsaFA0OFJEWE91RVFNWmk4OStZaWNTa3RnSklMbm1MaDRPaDBPMGVNcXpkbzlieW9md21PMzd1aFBySklkY0w3MnNFNXg4enFpb1ZZbWt4VkZGYTUvYmxhbzNBS2doL2tFT0FtUHV4NWJETk9RcTFiSUt3VW1KaGlZSEMzQ2NtWkx2a1dGVmtRNVplam5FOWNCL3NDSWk0bFUwa1k2ZXRSVU5hWHVvUUx5dEowTm95Mm9NQ2dyTGlKQ2RRUjNEQk9mK3l4VUNqdkxmUUZiRWVhL1RsNzJTdU5PdXBsVCtuQnRhV2dybHl6TmNST3hzYlgvVEZkSnkvMmd4UGEzb1UyR3BZYkNoTDJ2NUgyYXlJTldOUUwvem1LellxVUNzclYyYXNyZVhSTDcvY2w0YVQ2N1NNVEF4RWZKTHdoT2hOaFhPSnUvcDB3Ti92Q1ZNcUN6eE9qZk41ZUxSTE9DS0ljK01yMXhlNmZBd2JGc1c0TDRjMjdtK2F0b0FkQVRicGwvTjNSSmdiQjBuZk0yNkxmdUtrUFJzRFNFQTBWTVRqZERYWTdKNGY3OCtZRi9QNCtzaFYraGNsWlRHZnlQVG05MHVWS1BSY0JodXRLNUNLV1llOXBnYThjdUNxUmpoY01vNXhOaDRRY1k2SlIzYWs1WTQxbTVTUkI0V0ZGVXRzaXFBVWpVU01CWjY3UGNNSWRCTWEyaWNGSjdVN2oxV3NmMU9heUdjcXpFekMzaUFXVWE1Q2pXYWMzaXYwN0NTSlJJbUdGUGJpZDNPcjVXQ3dMZjIrNEoyTHNiVTJVRmhWU3dUckZxRHpJYzRDbUJOakpEV2xWYlRhRFFhNG1Za1hwZHNreUozZFRVZVQxeEd0bFRJSnVGTU9HbmhPbEhLa2hORUdoSno5QmwrakFsRE1Db0RRbXFaekJXeVVWU0lQSFZjNjJRRFpnOVBITndGWlRERWtJa2xtZ1FpWUxCUWtENEhZOVZvckt0YUFvU0xLQUZwTmNaVVNobXdJTzJzbFJXVE5qV21WbEI4ZjRSUnZ1RmV4d29xUTFaa0JhdmpodUppM2dvZHlmREpLd0x6QUZEdm9oYVdoRFJpSjkyalRvd245MzZ0dXdUaTNKbFlsTXR3T0N5dDE1dkYxYUJsQW1aQTgyb3RPZElHQ3gwV1FKb094Ni8zWTFuWm9mZm5sRGxvM2IvSDlyMFNJRExtd1lPdUpjOWRhZjJ0V1JLQUxhM0RWOXBCR0x0bWJ2YTNwQzRhSjYwUjZYcWJHYTdSKy9lVC9kNVFxbitvOG9kWTlXQytwdXlWMDFoaUNId2NvMjRVcFZGMUhSMFNtdjE0SWNxVXNOQmpwWXJhWG9wQkY1SmFoNmNxT2svSmFGWG1wOGxrMEphTWdoQ2tGQnZRRFB6ckZwUXVBT0lzYVkydjkyWXdwMTBnTkZFcGNyZGg3dGFlTUxSdFRNa3hHeVV4U1ZWZ0ZTbVhaYU5Qc3hzWStJWnA4SkdreHBPYkFGOU5kMGFXMFBQd25ycjhIakNiQkN0N3BjcmROeStIMjhtNlErcFhqNDgrVU1IS0MyRk5qMlEzZWYrM2FScUh1UkQrbWIvNVNlZnc5NE1hTUxDZkdWWlpDU2Y2UzQrSmUvUGhCK1NtSzFKZk9EVTZFMVpVcTVNdDZ2V2M5emFPVTlWbGtndnE1SXpoZVhxTGhZM3A5ZE1QNzVvLy9jWGhMR2VmSGV6YUs4OHpKVjFmOC81NWk2cjY5ZVFmWlhEMzFsNzRwT2JqZXJQWmZSazNjNGZ4L0xVeGVZZ3RiTTd1dy8xcW9lOXpiWW5wK1R5TUI3ZFcwOS9CZHl6S2JxdGVLSGtzR2x5UVVGYkt4ZDdOTmR4ZEVrWkFBQkE4aWxNUEd6dlJTZ0dCRUR6WU1Ybm5VRnpSVEhVU2dOWjdWVVQ2a2VBZTI1cHFmOVFYMWY4NHNXRGlJOVBIRWJVNFpXdExZTFBFVDZWMFFObTllbDlpMExROUhlOTRRdkNsdW5JRUdpUmNSbXBQbVpRcERRbm1GNmtoQUFQeHZ4OS8zMy8vOThMSC8xdFNOS0lmQU1CYSt3OFo1QUY4UEcvOXM2SW4rZTVzRGdHZ1lBQUFFTUMvSDhnanQ2dnIvMGE5VTc3WFgwQm9LQlZDZW83ZzNZU050NnZWUTZXZDRuL3dsZXE5UWxaTlptMUl6eS8yeXVjTC9Bb0lSeTREcGZ1TVEzMndKTXJQNkNMUFVEZmg2dWVCbGxyaFJmQWI4SU41VzVlU1ZjYXBPK3JhUGkreGJ6cmZYYXpvN09kOC83TFkxUTZnLzU2bDBwZVpCQXFvL3I0dDRGOHkzK2hpQ0dlNG5rQWowK1hXVWdrdS9teWNmVjJ2eEUwWkR2cTdUK2FVdGhPVXpWZjlPSkFWV0FtQXJ5NXZ3RDRuelNPZmVZMmRwVXR0MithQWZaNnFkME5sTHNjNCs0azRKV0Z2ZjlRVHF2dEdMZVJqWmhPQzl4WjUxY0wzc0lEOVE1VWpaZHV4MndXcWtLcHRGR1VJTFpsSEx3clpJVDdGVUpjaXBCRDhmS0U5dSs4LzRpMFg4dHZidk9ZRTNCQ1BqYkhsSGp0bUl0a3h2aXNpMm9FdWZKeTBJUVlOekQyNm84K0swYkZzbDR2WS91SUpRSFlvZU44K1dRUTZkd0pQUzFpSndrK3oyRlMycHllNnJjMHRiVDNCODFMZmgyUzdoaGZVbXJGeUxxMEVvbWlJYjUzK1lLVmU3NUxNZEF3RGtKc0NjLzBTQ3NUc3hVK1lXbS9LZXVmSytXamNzRjdaWkZ6YmhURWozcG41eXhVdEQ1VldEc3N1ZUN0aWMvQzJNZGZJNTd6STlyMlFIdU5TZkwyOEp5bHo1ZGs3RW5JUlAwdnRYd3h2TzJEck12YXJ4R0pFcTVYWExMK0xGOVJ4d2VsSWRoTngwYlRIdEpvUlBSS1VUaW55bFpJRTRFOVhuYVVUUURnb3hCMk1BcEFuU2tOSzVKN3U0U3ZCdG5PL3NtZS8zdDAwQXViSi9NSGZSK2s4WkVjRnlnTUFCTkNRZnJRMkZJd0R0VHNCK2g4Y2c4TUJDSXpEb1NZSEFKYkJ0d2JFM1hzYzY5Mi9OT0RVcmpZbEdrZzdGOUpBa1U3WElLQllXNE1EM3A3ZHo5SE1NcnNDQXJBcjcwSStmb2FjM1ZlUThMWDVSSUoyUmozTUd0VnJZQ1ZHMHRBNktOV3dvZHJlT3BWYS9ualhVNnlIV0p4WnV5Yko2dTZnVTRkNHcxN2F6RUpNb1Y4cjR3RCt5a3Jrb0VaOTFGWnE1SEx4OWlYb0F3OCtIREFJTTJwcVdYRHd6b2ZYUE53YnNnMmZSKzlrNnlLRmdMc0hKa1g4UXBmbWpWY2RZbUZTZ054ZXIyT1pZZ29FRFpLQjlYMW1zbVJLRW5scklEUU5RUGxBVURZdWxTZkdXTWN4ZUllZmVxTUk2dkJDMWF4dzQ5NXZJYmZ3QldId3hWVXZVSXlXanRUd1cxVGcrY1pURGIxOWphcnArZlZWRWdwNWZYN3M0MEs4TmpucXJqbjB0WTIxRmRNYjdZb3BpVTF4VldLVlB5YXh5S2NrNWxSTmlHMkViUnZnVWlrb1RnOTFTWFNnYkJKY2JTMHdhNlFCcGlScW1VMUlwYW9rS2k1V01aR05pcnBHU3VHVVJDWlFwVFdxaEsrS2VhcUlxd281OFFLYVA1WGgwZEZXa2FseGNGdlkvUFczUXJyNnc5ZGMxM2FsSm0yN3JpdnQybHdWaFY1RklscGtwYW9CRVZaNVlWYXhFRlhhQk5hL3RwamZ4ZFplenV0dytEYytJUC9KLzR5eTROemdyZ2JJd1gwRUdiVkNaYVd3bHJTU2NqNk8vRTArSUJGaDBkMGkrNDV2MzdkbU5aWEs5VFh3R3Y4TWZQYmV0Q3g2WEwrQXBDbERXL0hqTmlLKzd2cnExU3M0MjEyOGJiRy9NdmlNYzVHbzVKYzNLbWRkWjI4bzdFVTdWckNHQlBaNE50TDg5L3RsWEYwYklZbU5Jd0JCQVE9PSkgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpO3VuaWNvZGUtcmFuZ2U6dSswMD8/LHUrMDEzMSx1KzAxNTItMDE1Myx1KzAyYmItMDJiYyx1KzAyYzYsdSswMmRhLHUrMDJkYyx1KzIwMDAtMjA2Zix1KzIwNzQsdSsyMGFjLHUrMjEyMix1KzIxOTEsdSsyMTkzLHUrMjIxMix1KzIyMTUsdStmZWZmLHUrZmZmZH1AZm9udC1mYWNle2ZvbnQtZGlzcGxheTpzd2FwO2ZvbnQtZmFtaWx5OlF1aWNrc2FuZDtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDozMDA7c3JjOnVybChkYXRhOmFwcGxpY2F0aW9uL3gtZm9udC13b2ZmMjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxkMDlHTWdBQkFBQUFBREkwQUJBQUFBQUFkWEFBQURIVEFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR2x3Ym5GWWNoekFHWUQ5VFZFRlVIQUNGQUJFSUNvR3FJSUdHVmd1RUtBQUJOZ0lrQTRoTUJDQUZoVUlISUF3SEcycGdSUWRpMkRnQWFQQVpGa1d3Y1FBRm0rOFRSZGttblVqMi95bEJtekdoZGVoYlpTRjBSN3VvN2hrWkNaR1Q2aG5wb2JaVFd4eTZjT0RoMEVnLzlvMEZSK0hBOHMzSjFiM3R3NTlYb3pnY0NOd2pabXR0d0NWeFg0aExvcEVrVGFSWHQwWklZMkl0NGpmOTJYc0N2TVJMVXdqMlFvMElraGN4S2tZcTVpUXRjZm5pbXJwWjBqcUh0R25nSmJsL3REcXppaXFkcXdBem9RMFRMeDg2TXpwWDV0STVUL3p2OTY5NzVyNEFvb3NSQkRKZkJibWtXZ3NJdG9xTmJHMlhKOUNrZW9iSGJmM3pCQm1vR0ExSTVhZ3hHTzFHVGFvTkVGVE02N0l1b245Rlh2emYraXVpd1FFSy9XL2FobWlieitWZEViVlZSNFlOK1BkL2pjekNUTzdMbndXZ0lxRmw1UUFsMjFZQjJwNUtKRmxMNkpmN1plQnpmdTRjRkozcStBT0M4UVY2NnpvYld3WWhXd0QvVjVzbXZFWG96RW1FVFd2dEtHMlRQRzNoV2NwUW05blFPdlI4SkZJVmdaQmQybWJGYytJMWZZWHZ3TlFrWml2cXlQMGU5Mzg2eTFiYTlkM3pCcUdMcXdBWDNYcHpiVEg2K3RiWHpHZ2tBMnVKZlF5ZWxmV2VKU3ZnQzBKRlVGMWF4TmRUVTJIVHBTajdsSmwvbmVtcTcrOXZTTWsvNkphZEdzc3FyZ0dlZXRuYU5WUEw0eitkN3F4L3NneG5GMlQ1ZWdIU1VXeVg3QUREVk1LeG94ejBCY2h1WHhpMkFzQ2F0VFB5dmdPT05UT2JyT1NjY0d1Q1FsemhFYktCL3ZydHoxaXJIOGhzWm5hNzluSW5oeTB5UkVMQ0p5TGdXZjg2LzNBZ1REQUFBTHBqTkVnM0pOTlFaTGhzWkxveXBGdzFwazRkY3RoaDVLaWp5QWtuRU1JQlFwK3VKL2lsa2hpcHVDUEhlZytHOWxwRm9RL2EreE9LYzZIRkF4QjJ6cnAzb3pBWGFpQnV4Vk04Vm1Da1dtVjd0dDgzVXFsNmk2eHd5YXN3Q3BWOStjelU1T2Zqck1ySC9CMWJkc1NaSzdtU1cvYS90Q212S29KRWloWWpWaUtQUHJ5bUtWRGtQLzlyTU1Nc2N5MncwRkxMckxQUkRudGRjeDB6S3pNL0U2aUFwQ2o2TC9rL2FLQTNBMjhPeVZ4YUM0T2xUNWFkdVBNUFdmWkIwdkJrUnRuY1lBR2RoU3VXYmxvMjUxclQ5ZUNPQ0tMZ2ZiWUdrcUJKNlZReWE0S1RHSUhVZzVmaHFSU1lFak1IUnhJSEkrbEozRlR6dE4wcFdoN0REREZQcHRvcHVONDRKL0FJa2cxU2VPcGNpOWhQMFJUUUVpV093enhOMDBaSFUrVXBTMUdGOEJZUEVEM0FCTEYxbnFMRmZBdFNJZHM0dFpRckVKQ3o5VEt0WjJUTVVWaGF4SE9MVzNpWVN0MHBvRWNZZ29TeDQ3VkRxY3loa2drRlBZSGR2TVN4OVY5K3Q3Nk5MWnFEQjJtOVlZaG10bXY0ejBsNzFhRFgvaGN6T3dRdXhxNmsxbFVDN25tbnRHL1AzU3p6S0dRL2Z3UlVEL2NPTVFpRElwVGdqeHZ2Yi9QYndFOXNsQTZpakxJVHhia0dscDJtWGhmVTFPNUEveUhlYWJSV0l6SWRXaldaMlcwOThTM05KbXhJVXhEMEpTMklRcWg3L0RMT1ZGVVk5SS8wNzFkcUpGeTRnTjlTTnlQc0Fxa2xKR1hQYWZlTSt4YkY1cUlZYy9JQUJ4bWxtNEJjQitvUE9SejE5Q00yb3VoMm9HdEVOTjJBSkZyQ1Z6TzROb0QzZXhXU0VLRzRzak1EdE9WSlNnWUxWM29TYUxZZWU2T3JFNTlKV3RJN1hxNkZNTkI2cEJhRHptU0c3eDlQL25jb0FRQzBZTzY1QVYvOFZxUjVwQzdPMEtKUlNUaVhNSGVhanp2cThmRDZURWF0ZFNlRWRDeUp5T1A3SFMwSE5zY2puNEVVSDdJVnY1QjlOY0h0NlErUXhyNU5nSmxFWXBCYmw3aVdGVGcyU3ZzdE5McGsxd2QwRU9CL0hLT1A1MW9Ba0tIYmswY3hnYVVTbUVkenZ2UkVYZlhuVUVxeHFHZ2R4LzFwVUJuNnlTVWJpTDhia0lsQ3BPQzJIRi9ZMHg1cXB4VEw2TG1sVVBiRk9KTWpZUURlWUpJY1lBaHRLVnFmckZLSW5nbWpPSTVleCtXYlNVQXJDR053aElEaWFLUFFWMTJlemFkQTA0Q0hHODVMWW1oMmdpTUVvaGd1RkNFN1d0MlJucFpPUDBMQW16akpOSk1sMUZxUTJ3ZmJVQkpiOCtnZGZpU0dTVzFnQzF0WjB6N1FWUWRkb1RTeXNqU2Viem9sZnlvaFN0Z2dCZWVMQ0hPRGZNeW8yQk9TOGExMmhpZHIzWVVoUkRWWFRBSXhFNnh3bXMwREVnMU1SRkhBR3RHWkpMRTZDdEJabDVKMkE3dWxUUDIwTWpRWHUrRkdjUmhqQ29WWHRvd1ppdGhlQWlnYmxuT1pJUmdEQ2dZS2VqakJRb1E2aFJoMkxJYXJHV0I3eitZaXRLQXVxRU1BbDlRRElnSGM5UnNZaVV6QU5nTXNaR0xMb1VheGFra1ZyZkRveksyMTBaYkswNFpwaTZDRUJWb3NNT0FBVVZnUWl3VjJITWpCRHVLVWdKT0lneVhoRU1uc1VDbFNhYVN4dzZUcmlPbU1SVjI0V1NHL0FyMW9iOExOOU1GYWZiRm9xTnJjY0NOeTRraWpxSXdCSmxOd0JDOG1XVmdsRyt0TVordjU1T01WNEVpRjJLQ0liVlNzbEZvWk5wbUZ3ODJYV3N3b0M1NktEK3FVcm9JekttbnU0R0FaZUpaL0VBQk00UVdRUnBGcWhvVllDUWZQZHBPaEhHYVd1eDRldUZpSG51NDAwcG8xTjdDWFZNbmZLalIyWWRGaXNjV3FGcXVCZE52QWE5ZHk4dEVUUCs3MTNMd2NEUHh2RGQwYXcrOW5leWZnZC9ZMzhDRUw1c0ppV0FuciszMy93WktjUW53S2pyWGlNQUJwRHVDb2FVaWtHSVNoQ0FFRnlFRVY1SmVsRmNIQnA5TG5lL2UvYTdiTUV3OEtwUDZaWlZtVlI4UzVvYkFtVlpKV09NNXkwajhCQUJRWVFUVW1ReWFaR0VUMXg5SERDVWtNRzJNMkhFT2h1WDVIalR1QnBTcEFLd2lYT21zcUJxREFYelFVSXdaK2ZPQkh2Z1poWWhQRzMvalZ5SXZKT0RkQklDMGpLNXNLbk43NnFVeHNJNVJqdEFwaXZ3Y21lQVFLOUZZS0dzRVN0Q1FRb2c3Nkc0WmVtcVRKVEFSVzFEOHlCVklRQlZNSWhhWnUvVkg3aFNPQlJGS1JtalFrU2JrZ1FIb2lyWXpoS0ZYWDdMSUpvTEM1YWFuaTB4Z1dMZ1JnVGdsa3JPYTFXTUp3blE5WHpsY2ZtQURzaFE0SDlFb2VueTVTb3JIcldnOXRzMHBJN3YvM3NFZXdBYXpydUMrR0NQQ2Z4cmtUOUNZQTlDOWJBNUJ4U0tLM2R4MEFZSS9leWlxbXRCdUFvMHRjTnVicjgwd2w0K200TVBqOW1LYVdQL0ZKMXRsdFBkVXpPNEcvaEw5V2pwVE5zbFZ1SXlmSTZYSlh1VmllRXdxdDRkYm1majhBQ0NKelNmZG40cE1vNDNLc2tYV3lzUVZwakQ5U3dtMEY5QVBBdndPQU54MnV2Y2IyQzl1QUM5K0VDODk0enpxZkdhUDdLT2Jocm5NN3oyMEJBWUJFUUg4bmdON0s5M1oxZXVWek5QcW43VFBISXZNY2RkVjFpNjJ6M245T21XV1QrWmFhYVlrTHpqbHZnV3VJaGlSUXNHYTBtb3RnWUdSaVpoRWxXcXc0ZGc1T2laSWtTNUZtamYrdDlRQUhva0o2Yi8zZ2JqTDExa2RmT2JRM2dCaDY2bXU5c3Y2M1R1ZFRvRkNSWW1WV3VXZTFTL2FiNjdEampqamh2cHNSY1V1TkxTN2I3SGJVdU91aTMvMFJEbGZjMEJBZXY2bTExVC8rOXErRkJBeEhoU2RTQ3hBdVJLZ3drVnJRMFFzaWE4MnFwYlphT2FPTkJDN3hGS2xpVE5OZUJyZU8ydW1nazY1NjZhNkhub1lZWUtCQlBFYWJZS3h4SmhudnJJbnk1Y2lWcDhSVXBXd21SMDJFalRiWWFaY2RDQTIvRUFCb0RRQnNQOUJ5UUw4Rk1QOEE4SjhETndjQUFEWjJGYnlFaE9NVUxDV3FvcGhJaUZGR1A2L0pTYmJubkpnVXhWMUR6TFFBaENKSXVFYkJvM2d5YVNVSlJTTmRFTEhTSHRJTTNISEdzU054ZmV3RW5jZnI2Y0NnTVdsN2phYUowMGV4UXRRUjlpaUc0Q1V3OGdTaUpubndTYjJyc0FpcFJFbG54Q1lNczZjU3lJK2UyUng2RXFiK0NyR0VIbU9vTkFPRnBKU3lObEFUaEhUTlBvQjlIUU9yeDRqNVhrek9nNFFPQ1dtY1BqUnhUQzNVOFlQb3VVVTdYN3pNdnJraVdvN2RKc1puUVFBRTdubjEvdDVmWjJSRVFtbzB3ZWl1dkprTGxnK3dST2tzNXhTOE04V0xsVG9FeEtSSnVONVpsdWM5VnhtR3AzWG9oU0ZaZzYwMmgwUHBmUWpnSEhMZFU5ZFlHWkdVakY4eEdQYWZwQ2lOQnE5VjZpMDZUMDRZWXA0b0sxNG9jM2VsckNpVkVZRGMvai95UVNuUE90YUpuekhCYWFoY0EwQ2ZBQ3E4Uzc1WnRBazBwVG5LTkF1dU1RV1FiRml2dG5QVXhuTUxRT3UyZkVtTmIxWnE1NUlNYzVRWnRtcDhWeWxSK0ZCWW95bFhwWDdWQkRBbWRtSXRIVjJGUnd4cTNmNHpKb3g0dDNLWmZwc2p5OHUvVldiVWc3WjFSOU1ncGJqSjR0bTRXQURNUWs0NXdEU2tVUmd0eUVtdzJNS1JUV0RGWmROL0ZHYVJmWkhiYTdPTFlPL3VUNGlIQjRxTWNxdEg3S1Z2MGJxd09aRi90ZVkrRFE0b0hVUVloUTRPVlFvYlRXTjFTN0RCOFBYYyt6dXg2T1EzeE8xRmRtRXFBL3Z5aUszdHVhSFNSYVc0ME9ZMDhaVkFQVFdNWHdLNFpFT3hCaEM4ZlR3YXNHaHhLU3Q3eVFsQm9UNTBvcngra05xb21HK3FJTTE0VHlYVmhTSUQxMHVFSTJDY3VGT3E1NENjUXZOengvcGNmOEdvZE5ZL1MzeG1hVit6Slpzdzc5aWxlOUYvVThyaFBWQzRtUWxjTURyYm9EWVM2Q05iNEFLd3hwK1JFRlZTMVRJNlVNWnc0d1lXUU5QUVc1dE5UbkZQZE5ndzBGTStkcWdIZzgyNko4c2lWaTN1blE0VGxzaTlnYjdHNDVtV0xuZC9EeisvUm5hOFJMRWU1OW1xcHI3U2hvcXRWd1NJdmZtR2RWMnY4eXBxalU3djVqNm5yUDExMXBnc2lMeE5qZTFXSEI4Yk1qcFdKODFkdFMycGFud1Rnd25OMjMzV3F3NGJESlNaR2xCSlRTRGxIZU1ZWlhadE85ZnVsV00vZTBETjNaek5GYnpmL2RzMnVYSUxLZ3hka3dOOVdFVFp1N2xzNXJrd3dSS3d5VnVWMkZNMmVhbGZHVmFoM0xVMHI1MXRXZk01V0ZIQ0ovV01ZWVVqaFd5K2NFbzhleVdCTVhFeldDVkxreWJZamoxdnJWSmRuT1JYZXhzcmdVRExxYmFoMm9pRDg1N0VTR0xhdnRrVExKUmZtTldFOGVhRzI5MFdtNUlzWGk1VGg3V3dsTzhjM0xTbjNldWk3V1I1SDh4RFkxMkxDYkN5RXhWKzZ4NGYzdFF3VURHcjNodGxPZkFHNjMxOHhrcnptc2picXdZdEVWU1c4dlI5S0xlaFo3b0ozb2thNWpXTFZuOXBXcWNybUQyVnZHT2FKOGVuK0tpT2RVYmtQWEpRZlc1eFpiN1cyUmVEdE9KVGEwTmJOend0UkpQQVo5UnRxU2F4MHFHbExrOTJndjFEWDVPVVErKzNZNnUwVUszUFB5RFJjOGVJbG1rU2NFWnAwd1MydzZ3Y0szK0txbkozNHllTmFidkY1L1J5RFIwajc4SHc4NUhtekdWT1MwV0lnOUpBZWxnTzQ5d05rdEk3aEEwVzlrd0p1ajlDRWwyR2FCTDVxa0pYSm1nc3NTNmFnTlZ2N29vR2lBZ3hhbCszcXdUWGZUaWxyQ21sVmxvOFkwTE0yRC9BTmhmdWlTSnJOWFZzQngwV3RQYmtWa3ZOYUhsa3dnQTFjT1F0SXl5RVVnME9ISGx6ZDkxUVczcmwzVzAvczNkd25mWUswZ0NPV3p3UHRJQ0hWbk5YN2VCZ1JuUmNHUVNyaml1YzF3bndxV1VsMTZ2Ulo5VmhYU2VNSVMwa2ZKQzcyOGtQay9yMkRFZFRQSTkwR0tBSm10dVJnMHBqSGFFNVMvbG15N0hRQ1kzZ0Jxa2Jia3BEaXQ3S01QcDlMa1FRU1ovUDVJcUR3UkNlUFJ6N2QzNjBPZ2FGVGpzZU41L0RPOG1hNGxDeGw1MVdjcE84VG55ZHVGbG1maGZ6Vm10NmVjaDhMZW04bitnUUtLS2hndzJFWCtwL0Rlc2k5R0FSVmdLOWtUbE9MVGtRSWFyWE1iSlp0YUVEMDZiNWJkSTRhSitFVFgrQWlRNUpkdHVjUTFYYUR6dkRGcTFzTGFKYzN0eEtRM3RRTGV5VXF5S1dWUTNGL3EwZEZqOFlEOGs2eWRkVkZhNStWcytEU0c2dUMvbk45Y2VudUVOcWxqSi80Y290L243ZitwaVllWVVwbytGWk9sRkd4UnZWMVd5NFZFUEdLTEpwWDdBQjN1Q3RMRjJibVdhSUJpTkY2aEI5MjNHL1QybXVkdElFMWZ6NjZUVXczQWJyUXJhbHdFRmhPM1pMTFpKR3pXend6d0xqRHMrejhvWms4NGdPd29IVUFIQWdMdzhYaDJhRk1yNjZqczVTb3hrdEpZQmVUclJqWDV6bkJrZG1JOU0rLzFocmNZall0ZFpyZ2JyVlRSNmMwNm8zbXVhQ2tOWmNqcmZQc1hsaXBhak5Md2F1Zkw1RVZTS0VBSGd6bzdFTXhZSlcwL29pSnh1TnRrbzBXbVUvTzQ0TmRVV3pJdXNOa2RaZmpkZlNWbzJ4OE9ESEg2THpUSHV6MnB3T1QvT2NCRWpKMVJValI4Yjg3NU5JRUJCdW0zQnR0NnpFb2RiMWhNZG9NaHJHR3FYVTQyQjBtNzNreUx1Um9hNThSeG5HaUt4bUlId3RnTlN1dmtBcXV2UjBLTkp3djM0WWU0WTkrcHZXMzVFMHRzRkYxZ3V1alRMVTM1ZnBVOER3bEFmUG5HN0gwM3pXOFgwZEpubXZKenlZNDV4OGxoRDZnMkpBVEVSNW14L3JFdDNtTnpxM09rYVV3SnZJZkd1K2ZxNVhmQk9IamFmdlFENklvd2hoYjluUWF4VDZKRGZTYjhWa3hybVZWbnF1NXJYSTVScTdSSHlNSlJpTkpuT0h0OGttdmJnZ3pZamduVG40ZHlleGNTek8zdlF5RG9KOWxXSWp1SXNSS1I4ZmJBQVhtenZzbHZNdWJib3ZUYW1jN0syYlJVZjJIMHlSakx0SnFlVHV5QWplOFlRY0pKQTFkY2R0enVWQ2UwL0VyaFlOSXd1MFlPekV0ZWIrU2xNS09VUXNFOXV1WnV2dVFYV2JYcFhsQ2J1dkpBUlhQeUFtekZHaEkrdU9HTUJIN0RQTzBvRFV3MU03OEFOM2hKNkVCK3FvMFlSaEk1OGJCWENJVUxJbXlnaFdWc2F5c0lTUUI1NmhxQjJISXBYek96TzlFbEZzZHh1Qk9YMGlQaFN4TlA5ZVZoeVNTSXAyRXpYa2FiUjdmZlF4a2VpVEQ0TDBGWUNHR2lOek1EZElqWGhoZHpYUHplUTZzSFV3RHlnZFVzd3grdW1LaXE0OW81UXJ5NEVKUGNodlgzMm1KMUVaUHZMcko2cGNhVnVtQzNwUXFYemoyZXZYNG9wVTd2TnUyYStPVitlcnh2SWoyVWJsNkEzblJza3hrV3c5Zk5BZWpWd01JRTVSSEVTbzV4cjF4TktzN2NjTjhOdzMxTWYvOXRSQUtORExIRDdjTDY1bW1lcGFvaGtuUGVMWW5jYitaR0FWczNRbWVzNXlCR3Y0eGJKUjdSdVdqS0lXd1E2bGZDdEZ0SEFlMFdDb28xREMrU0I2SnNkbnBFbVBnQjJnU1E2SlVpOFZGb0lCaFYza2hDaGYwMll4ajlKdmVnL1RLcVR3ZzNlSFBPNXNWa1dEWXZHQ1NhQnVxSTduYUE5b05CODcyTmdvdUlRYmtFckhiODhKMmROalM2SnBEclRmVjdyaDhXcnhrcjhjQjNaaDEyS25NbUtxSG8xcE9lbmh0RjQ2YXpFOUxhODd1Y1J2M0pSMnl5UTdtSU5sZmRuR2puVUpldC9GMXVqZStxTzZTdzZ2WVNwNkRSc2lHZ0o1QmN4WFZvM1I1TFYrWVYxdXV6aHZpWEQrYWIxWkdORHgyUHg0bnJhbWFjYnRxSEtvY3l2MzBlekIyOEdya2pYZTAreEFrQndhVE16TGRZbUZPOU8vZzJHSWVIQVNWTnJUejRVeHJJOFR4S2pqVkpxcnQxWHJkSTdETSszRGUrQ1ExZlc1L1YzVFhIZGZ4b3JFd01QVGJ4cnNSYVlwbmxLSE14eFpIcytKY2ZNYjdYR3BQQldtTGZ1Q1EvZlN6ZXYyUFJhdUN6NkFsbC9CNEVDRXZ0Rm85QnJHRWRacG5JT0krTGdnbjVCYnFPd1NiamkvMWhxQmEzNG45Zko5QUQzVThpYnVhbUdHZDNXMUx1UmxOb2h6bkxrdWlQZUQxajNDRERwNVRWTkdBK0ZoZFhvYVlFeU1UMHFUeDJSbndwczhJdEI5ZkhKM3lhNUZlZ0NsZlAwclJsbDlkN0NaMzMzai9oZzNHMk10YXZNMWZCVU5Cck4xVGVGV0Ywb2M3aXdDb1F2S21lU3BoQlJlSHR5dzB5aXc5MG42eHBnQ1l5a21vTktHaG1oMElWWlk4S0JrTzBXMXBxWUlpOU1pVFZHOTRKMmpoK2N2T1MwUnNlUUs1Z1VEOEVBcVAyQ2FyOUlqVmh0VjNzd1BWTnpUQjN2d1lDa2lXQlU3cjczTjQyQkFuNk4xRzlmbDlOWC9ENUErSjNrOVI2TlVXL055YnFUclZzenc1emZPRDhObzFvdFl2WDJTZ1lOWDEwRGM1WW9QdUpMVWo2NmRUdGNPbC9QRWJZWlBocmkzK08rL0U5K045amJlYVFyT1E1Z0oxN3gwQ0oybURvWVlvTkJsVE5XTkh1enhhL0R1Zmpyd3ZyRzBvZytZWWJGQ2IwVEJELzNvN2l0ek43ZHpYR29kejdmSjM2eHNET2t5T1NBNDROOHJIUHYvK1RNYURGcEpuNDM0Tjg1TS9tY3ErQ0tvaWdoeXdkamtsVnpTOThIZzZRR0JHVitrU2FhMUswbHlSNVRrRGNETi9ZSlRwUi96ZmJ6U2trNWV2RjdSdWRGWUtKcW1JaEVpUkVpcjA3RkVCTmF6NEVLejc4MEJOM3FLOXJPYis0WW8xOHo3NThuY2tnUzZPK1BnTEhaayt2WGVyN0lidThCcXRyYnMxZjMzbXg1MkhleVpKeDNvaUc4MFh6ZGJBNVMvK0VKN0x4RWZzMmRQejRZZ2FzZWh3UlJhTEtMVGtZZ1FKWGtQUmJBaDFqcVhtU3JkenZnbWZFKzJUWi9mbTRqdHkrZGorL2ZHODBpUjI2bi82NTFqK2JPZEVlVjNlWkw3NFFVaXNJYlJyM1NKRjVUb25XeGpmaUlHZWQzeGFjdVhZSS9YQzlYdGhZQVlrRFVZM3QxRWdUTk9Sa2dFOFE0VURTZ1VRY09IRUF1Z1BKNkY5dlVaUUo0bkxkUXIvKzlWK0dnYTR2c1F4Q0ROWDc1OTV5TlhwTS9mV3hBbnA5dytDNmpOSW4yNVU1b3NxUUdyR0hYcEJPNE5qYmN1Nnk1ZmN2Sm9kckh3bnBXYUZYV0RWR0ZxWGYzWld1Tno3RjlldnRyeWpHNWhhVG9IUDdYdnhiV3phMmlGZ05sWHB1S2NIeUs2dEhMNUpraXhTKzFqdXVudXdscUQzNy9XMEYzUVRjZElMVVcwR05nM0ZjMmtwNk5LaTVsQVRtZW1vQWtJVDVyWnhYejNmZG1wK1FObUc2UkZ4eDNHNnllWGlvcFprVnpmbGRZclRmVFp6eFk5Z28yK2dZWG1ZSWhTM2NrdDZFRVBlelkyM1pIaGpHMHdQdUh0MXpzejdZc2RHZVB1WllsZU1NSXNLYTBtYlRGcnVsTUd5M3NtSmVSQ3NwZjhQdXpRNEhJUnFkYUlYTGhFODY3WWdZQmRudFhrYzM2YlUvUDR3L2twWlQ4VTlGME0wQjBob0Zub05hMHVjV3d4Rmk1MHM3VDE1d04wd3FUWmZCN3JMVjh5bWhicWJjT0YvamFkYXZVZk4yc2haMEdRMXBiNE40MmtkR24wY1ZURDkxL1dNeWNuNWVxSVJULzErZEZrYjB2VDFnT0p1VnZyQ0lmMjJVdUtwcDkzNlNGVzBxbHNxRnVtSlBXT1RDendVNzRYc0tBK1dCeG5xRE5Wa0FmQXFJM2pXcXNoeW45SE1hOTlTdlpCbUd3L0tjQjFlalF5b1BGWTVzdS9PRVBENzBUeVdvUS9pZlZSM2w4cVRTQXV2VFVYNEY0U2VZMGFORnpRQWlWUUZnM1pEN0cvMzBFS04vcGNFc0FCU2pCWFk5ZGk3NHJsWHBKYzRkVjQ4amFJQnJBeTR3ekx3SURWWnUrM1dnZnN1ME5wT2NZd3czdlhIWlFjclJDM050UXNMUEdtRU1YMUE4c0gzMFladWdCWXVqeENMdzdlKzVORFRkZFE4ZWJHQitZZzVhWDBLcHF3SXVwU0xyM3lENUpuRnhUdmZhbnA2T0cwKzErZG1GMzZJZ0dzdzlCQmNQNTNuZkhQN05uM1FaWHBzeE0rS3B4RE5uMStBcVdCNGtkamJpYVl2dlBxUDdXUTRLL0RqRFVaNzEzL0RiRjdCR0tTS0owOFgrTDFUUlJ5eCtWVzcyb092QTEzQVF1clh1MDQ5dDNOOUZLWUU0VzNjNkU5NmEwMXlZZHZpNzcrREJSWHc5bVJDLzdMUEdKbGtBKzdSNzIyMWNHUWZjV295NlVLY3JmeEF2QWZCeUQ2Y05hY3RlcUhDYWUrcENsbUxHdEdCZ21DU1A3akJIUjF0ZDBYOTR1MzYxYkQrWWwyZ1lzOTl0a29BMXVjODY0UGZCVGljYXBxZXZocVhCZmUyYlBsaStQMUhqTVpGYXU0Qkd1Vk1HbDI2SWFLRGxKNHo2OVhSOUd4eFhIczUwV2JMYmk4QTE4UlRlRXJoNTFXWlpUMWhUVEZncHg4V2o3U1BpcVQ2c2syT0tIODVyNEM2NFVzREt6cW5CR1hmVVVvYUY4OTZuVUpua1N2K21IdlJJaUtNQmhVUU9uenpHdkgwcTkrYXNtWTlhcHFacXdXYzhhR0RPTUVNbGdlUXFCU2gwVWFRRDIySTdzZWZUYXJrRmdMTm5PcEEwZUgrcXdkNmcvb2RYK1Z5V3cwQjFhMW0veUxQYzVWUVo5ejFaSk84TFhiNFlvcmJkMS9XTG1lN1VFQjdCcjEyRmNGZy9aVm8yNlhJc0E5SnRpQktkYXpsb3hGUDBRUXdPSnBRVW9Famd3OTNWc1EzcHQwckNLTm9oNm5KeVhWR2NPd3dmTWFkY1hRK1VSdkgvNTM1KzAwZVk0RWc1L1pMK3dmVXkxcEdKVWtuWk9qbmJqRW1IRVlodXdZMHAreG00eFpNMUswMncxRFdjYzhic2luTXRtaVpXTnl1Q0JaL3RuaEhZanovZ1pPcUx1c2d3QnpRVmR0UEZRWGVZRHZIbFJ4Y3d0c1IySTFqUjlTS2lkdk9iMnBrN0QwL2tpS3VPWHgzcG1EdzVGQUhSYm1YVmxaK2FsU3hlKzRIU3VkaXhmYS9QSllZNkVlbW8wa3RKcjY4aDUyWWNHS3ZzSDlEN3g5RlY3TDlTN3dkS3dLQnVYbUJXN2ZiTXRaMEJJUnpGbFBjYjFtWThudHBzWDJZZ0F1czBjTTBxeFJMUFd0MTFLeHZmY2pxcmdDOWFyRTNtOEo3ZmVKUmNRVkpBZXM4NHI2dS9tZ2JVbnFkei9nMEMydUpvVjdrazkvS1dDVkxvd1c1T1JTN2x2WjJqLzZxQ09rZXcrZjUySTJyeXFqeDQrcTI1Ly8xeVQ5dERvL215K1NsWmx6OWxyOE9kZGp1Q0hHbGRyREJuRUdFd25KWEJYbWRKN1hxK0pLdEJQbVBSZXBld21XOTRST0dWRVk5SzQ4K3I4aUVoQXpuVHhnVkdkRTlPSzBFWG5TQ0ZkeHZGOGE0S1RDMU55OFpxMjc3Qk5MaUZjQ0hNRDVIZWhZdGNoRCtoWjc4RldCb0JBTitraEx5bXl5QUlHV2NsYTdMVzgxbGdpY0NRZHRkaWE4TVBBSGRrSHlIcUczcEl1aHVldk0vYml4Z1B5c1plNFJ3cjRzNExjdkgzVzVCRThnVi82dzErUndlak16Q1IrSnY4L0c5RVc4UXorUXdlSXhaS0NqQStuWDRjNnRuOVlhZlVOZmw4VStjMVdNZHd2WEE4ZGE2WjNSUnVEc1hhZ0FWdlQwWng5UTZway9xc0NLU0F6ODF6WHRmdEZmRUROVHcvbk1iaDZRV1JaVFk0S241L09GWGZmU0FqLzc2YkJBZGlZb1JGcDdjMk1yd1hCVFp0NXBEMXNtMkdJVmNFZnd0cDIwYWRmMmlaVVhJM3dEV2xDQVZaSTVWTGY2Nm1Nd0dZQXh6Q3ZsaUdvKzd2aUwxOVlqNElLejA3Wm9zTVBXL1BxZjAvckl6cCttUC9PN0p4eEgwTHpUWjh6R3RHc08zRUlUNXg2VlRyWFcrTDlsZ2U5VU1MUDVaYmZDdk9ZbEduT2llQnBFblJTQnhOKy9lQk5mMGpidHdFRTZCYW96VnhWNHFXT0xRNys2aWtmZEcrQkt3dXhDeUkrcjJiK2cyTk10a1g3UjdjZlZES1dpL2dDRWtEMWMxS3k4c0xYaHZnZU9Qdmg0cUpaNkU4R3I3TlRiRUZQYzJ2RHNXMlc4bWxqdEZwNmNDWldvc3J5UkhLM1E5RHZSODhtMjlOa1ZuWHVyaVFJT2lTc2FEcCt2MjFNNGZsVWNMellldkJBQzlyK01WcU52b0RSQ2dWRmpjeWdOWEs3Q3hZRmpiL2xvMDdWdlpRdGwwbXpuL090ditkSjExZHRyd0hrMVVBNnRkQ3dlczNrMG5VMkxTeHN4N05NU1BaZXRzbWFNdWtKSG9QWGRDUjlINm96b3hHbXIyV1l5SlpMT1pGQWRndzJrOUJDejNYNjkzT0x5R1RzeTNxK2VlSkpzZTkyeWFJZzY3MS9mOGVnbjRQQU14UUsyWHcwTHZmZEo5QjdjK1FkU1RQU3ZsQ3JaNExoLzJocW03dGJhWERiekFsaHVkU0VvN0FldVdtcXB6eTFYS1YxeTFWQnJwS1JMcVZTNWxacWVOOXE5QnNUbU5Vb1FNV1JOSUlHR0kwWGt5c0VTY2dWWm83SGhZckEwYUFsU293bzhGVmZ1eStYRm1vcmhPRUVvbjh1NXhzRjVZSXc1Y2lvbm9NSUZoMjFYUjBzSGl1dW1EdEpmdytubjVoU1ZGV0wrVjlSVTNGWXlJRkp2U0d3MnBOVXlpZ1g4S3VjRG1qYU9PM0J2bjA2WHNRaGJmT2FVZFBibnVTRFdtaklrazUyVFlWMWFOSTNobGtoV3JLRVpQaXdER3J5UGNQYjcvSXhsejdhcEhrVGgvWVd2Zm1zc0Y2UzRraGJ2RDNxSmtRVVdYQlhuZmlDVVVraUpqUUpsOExYdEU4cWRJNmpGYmRGMko3bXUyN3lYbDQzejk3QzlnMVNOMld3RW8rRERrT2JQZWxwRUhYa2QwbTNETklrdWpWTktORjlUSWV6ZjFxeHBwZENJbWhmOE53bmFydjRQL1ZPTU0vM3dRY3c2NERJSnUzQm5qeER3SURVak4zbmFNbW9qZXptNlBERGNGeCtPbDhPNVF1dzE4R1FtNEM4YTVoL1JTejZQY0ZXNmdCVEYyVEdWeFZRcU9uR1pJYUtHWXlhZE9CVXdXaHdwRk00WTFNcFlBZ0hYcS9CdGVPK2FLYmNHSVVXZ01LS3lOU1I2Tmg5dXVnWXM3Q0NxSEN6MHdxZ3AzWWZZYkhuRWxFWmhnV2ZKUDU0M2ZkK09TNDFJTXFzekdqTTZKR21VdnZnOXRIeUVndkNJWlRLM1dFSEFSQ0xtY2lkaVI4VEIzaVFCcXoxQnFScVdKL0RBUkU4UzFKL1U0SXhMMEVXQmdiNkkrUUx4NXhlUHhyZFY1U2ZyWitGMkdFanNVWlhWTkhnYURNZE5Xa3NRTlovSEFLY05HbVUwbnZFRUJJK3pPbUUxaXh4WFBtNG0xYkJKSFQra1ZIa3dvOHBYRUFrYXNad1RXQzJBRmZSVll3MC9VWTR0THExWXFMU2paeXVhUjZqNXdKYjRBbSt5VDNHV1ZYdWMzWWdOVTgzZ2JibGM4SktzZlVqUTBMNWozcFVGY1hJR2NvQVYwQzd3K2I1cVJpSld4QkVya244WnVYZXlXQW9XZmVtbEF4ZHB2TGR3L3JocVhidmFzRVhZOHNDMWhmeUtjcEI4YjdsYnlQMVhBZTRXc2NMenhVTmJkM1gyMU5ZM1BFRnp3WHVMdHQ1UmY1aUtQU1dRSWpzSXZyL1ZyWWJ3L09DN0NMOHZNL0JUSEhaNTVZYUpNcERPdDdSdGF0cFpPZHcybjE1RGgrdExqUzhBZnVYalBSemV1YjlRQnpWdmRyWUpoUUVVSDJta3YweTQ5OEJHd25mdmlqdG9GYlUzU2RxMlgvZDBTM3RMeXpTTDkxTno4Mk9nQlBnc2F1K3lnVCt0T0FnNTFIQ2ZYZEdmeW5HcUVSVHZhOEEycVBMN1BhMk4zTHMvblpkQUs5OXk2Q2syNTY1RExXM1V4TEpSWSsydDkveHV2clBaMHRwU1diNnQwcmZWMHJTUDA5SFd1cTYxZGJ5MVRRdWlFcnhNcEpmY3ByZERGVFVQVmJORk56dFlhajFsK2RXOG41cGJYdVEwcTF1YUQ0TW5vRkNpMzkwbnVoamY5eURZdnh5eUkzU2FGMTBYeDBybEppdzYzYTNrVTZwMUsyZHdrdnl4V3h5cjFjOFRPa0ZPWFdLS3FqM2JpdklFWDJIR2JicEFZdVhEanFwRDFzRStuMVp0bmNSSnJtbWdjbmlWRE91d3ZQV1NDdXl3bm45YVk3VXYwMURONnhEVHQxcWxROWU3aFV0YmhNS1dwY0pFQlNGYjllVVlYQUpINW5xMGt2c2hEbTFGcldXMzhvN0IyOUJsejg1OVd5UFBBMStiandhcCtQeGtodGQxSUtJdzlmemx5azdWMms1TW5tdVZYc210dFVOenJIM3h0dFlINkpxak9LSzJRK2VtdjE3NVBxUTM4VCs5bTZTN3lmVThxOEQrQnhoVFJlSEN2alRuV2tBTTkxSlkyUWtiNUFHUFFxV0pxQTc2bmx3K3cvZTlPWUJpcGk0ZDJrdEllT1JPdjFCRmNXK2FnQ2hBM2VzbEVYVUdiY0lHQVJUYzRuaFQxMUJaNjZYWHpURkxGTnlaSVQ1TUxXK3J5Qm1vZFcyVnJFWERSTVpxUkQvMnF5TUw3MlhnUXBHRUxmTm96NzBndm83QmtCenhXcDZlaEFWYWNucGV0WGtONnhKR2RnaUp5aHBKaDdhQ01JZ0RNY3BSVDhxaWFMdkw3R2FOVStabjR1aWxyZ2EzWW9NK2lLc0hIcWo5R3U0bmdycEZIb1dydmxGUVBzUGNweGxqcU9Mc3ZkbW1qYnJlbXNIcmE5K3VTc0dEK29WdXBic09iN0Z4WllVNnNxeFJiZHgwbldPeGtra2l1czR2bncvSzBXQ0pSNXVJNzVYWFQzMTRCcys5RFRuQnhieVJtTkc1d3c1QmdXUFVKaG5ac2wyV1czTjUrM1VyZGlVMExpcXhJQzlmSmh1Zk5sK1dUSnF1MExjU2treFg0ekZBZTVSV1JMVmNQajVUTTFORlJ0UDViYmZrYy9ZYk5OVUlpTG5wVEJMVHNyc3BnQ01aeDJuRmFrTXZKdWNvaWp3YVVNYUtlTDdRUXVlajZLTzIzSkZsUUl0VXVqWXpPL1NZdUUwN2ZidklSTkc4TW5jcG81ZDNsNWxLMGpJam1kdTQ5WTliWDZvMjZZbFpjN1BmSGY5MHZNZG1IbHdaUVR5SEROWDFHbDVrMWo3Y1A0LzVNTkVwNDBRSnpUTTNHTGl2MEpyZkJSNHVBZmYwcUJCTVcwS1U0Vm1xMk9NcWNMTWRURGV2YVBpQ21iWTR3WXlWTDFnWk5uVlJzajRITHBhQXVlYW5xNExjQ3BsWHBSS2lreW1VNllhYzRldStFSW8rMS9ONStzOUZ3aTkwUVAyTnJnQ0tHcFRETERLV0xhUlc2a2JQYW1OM0VabUtSSVFReWRVZWJFUzArWEdxZHFoYmdNU200dUg5aGI3d0FhcU9JVjJDNEtQVXZtSUVMMUFQZkEzNEs1bG1peFYzNkc4MEtMc2JVbzFDbnVyQ3lCUkY3a2NGUys5RXNZWC96UWZmOEIvYmZkUGt5enNwTUk0cWpwbnNYcnJBbzcvMXFkZm5TMFRNM0FhUzJVVHZSOGVMVnVMZWp1d0xsSGRid25VV1haRlZtb3hobmFMTGpqQ2JOZmlaMlFKSkxnaUsyOHFPdWt5bHl4WnlldUpQM0MvcEliUTZURjJ1aFhnYWNLWldGYnZnejNHdndoNWdhR2R0SUNIWmRBUHdQYUN6SXVqYWUxZk1kT0Y5MmQ0UXdXSHZPWDJMS0RKbGoyaTZOamZvaHFzZ2hGdXVHOWhLcmFYTjBvaFYwRU9rR2FMTEx6T012dWhYRTh2VTVkYm9jc1pvRE1sTUlUTnkrVFdpMEpLSUw1RFUrMC9wZDBmMFE0bTZDWFdwOE1IUUkrVjluaG5jd1NES01jb1EvY2h6Vjc5YktjKy92dmc1L1NGd083OTA3UEQ1dS9kVXl2ZXY5RDJqWDBaWmRBZVNSaS92ZjZxODNXT3pKeGlZV2hqS0g5cDZEbUtVZHR3MzVmNFN4cXRiSDdvalNjV0hGcm5XK0Q3bFltMU5rK0htYXlyd2RQUkN2ZlltOE1zbGp4b2ZFYzJNdURYMzJ3L01NK2lsdXZ6ckRad1RjZWx0dXA5dWh0MEdsNDhkK1FuSFcwNVVzanpYYS9ubjJiTnM4M1Q5RUhab3U4bnQ0OHNGT1BzMTc4OTNDYlhiMnNOTFdUR05qcFU0QU1PVHJMaFd5NDVQWHF1VlJxeE9WUVRXU0dOV2h5cjh5QjU0OG9KV1lBUFpYY0RoemNLTzkzKzhCK081Ujh4S3FONWNtb3lrRkNvMXJoWUZZSzJvaEdlelJ0UVZqRzZwOGpuQU9sVXBqK1BxYmNTL25sSUNOV1E0QzdCRWNQMU9iOS9ZbmM2dGE0STNMbkpJVmtiN05tSGRXS2oyd3I5WnpLVGk3NXNYSzFORGU1eGRZNG9wejhyRS9RZW5IL2NzV1hZcUZkbWJjUWpYMkFmaXRwQkVHcEc3ZlBJdXZmQ3JLeFZhdjlZUVltV2tqZzQzcUFMVGZKZHR6S29VeG54RS8zZlJPbS9SaktpN3V6QW5PYWdnU0ZuWG5wYnJJSEMyTE5lV292RmwycFpxcmduLzVLTGtzakVpSU1OaS9JaEVvL1JGWlpnL2F4WURLUy9ZSlV6clU3dGdoOXVEbTdqdHBDRklXYjg5MngySTJ5cXlNU3JlYnI5SXEyUFdzSjJNWHJ3ck5TSWgzUUE1QTIvWlVJSzAxZmJ3dm1ZRUY4cUdxcEJpTEdYcVhTOGV1d1ppTEk3VjlxYVBMaGoyMFVKUDkycVZGNlY0dlVRZFlzMzhsOUJWZ1NuY1lPRzdaVmt0aXRyZmZ2dEIyYjdRSitLR21uTmV2SlVqV2V2aGlCQ3ZVaUdOUGR5R2VBWEx0MEo0ZnBDYzJHa0Y5OVhUVWtHNFYvdHFwS1hIOWVtcEJ4Vm52MnVEWFhwZkU4bXNtbU5XbE9NWTJGK3d5VkRNR1NkQ1llUG1ZbTZUb2RPeUN6blQ1bkRJTkZIUUlpWDRZblU2b1YzcTlVZ3duY3lsT0dhU1pvK1hTYVFtVmp1ekJrM0dhS1FYUnhaeHVnMUp2cy8wdzJENGYxdnh5VVFlR0JaNXZUSUQrNGRjOHNkNFQrM1F2bGZBWEIrYUk3K1V6Yzd6RkErTE9aeGY1S0M4UW0xdmY4eElBZEJvVXpsMU5LUCtSSGRGNGZpcDVsY2FtblkzZDFTMXYxYi90V1BJWWk4UmhMMms1UTVuYVVHZzhUb2ExMmlUbUZtYlVBMFVUV2gwQ1RPbVMrcGlnSGNscERoeDhHYW92U1dqTFhRcjBWSUVvaC96MUtVVHRuM1hlT2c3OURDKzVDU1U2UnJkUGVtVFgvMXNpZHY2RDVnVmFWWnNKVFBuVXpzbFY2dkZVdlhWRXVuVkhJbEVjN1ZYWnBOTGJiS3ZNYkJzYjYva3MzK0xvZVhUVjlJUXNnTU45bDBiMmdKWm5QTnBPTTd1dlo0dVdiWWQ1OVJUT1R3M0pHWHBudnFxaGJYK0cwREtWQ3RnRWwxVUxSUGYzZXJna045UEY2NEVFSFdaUnQzRTI2MjFmUFNIYWoreFNMMkhobHp3ZFQyenF2aC93WmRzQ0VqTm80b3VJTGQ3SWNlMWJSSHdmcFZXQlpoamZaaVpUQXRGTlZNTGc2Z1dNaGhxbVdoSzBSM0Vwb0t0eHl1V3pTMXE1bXJwT3dxOGVWeTNDL0ZSZVJNSUhLZVpLRUkrZVlpdW9tbDJDUG9NRmpYNnE4Qmx2MGNFM1Z1b1FrOEs1eWVNcGROSElJa3MzeGhMQ1NYbGZFOHF2M3granc5UVlwaFM0ekxITmYzenRyRW1NSjA0RzAxMlVzUFg1K3RxdWtYYlYyaEtiVWtSVEk2YytEeERmbE1oeG9zQ0ljL3pnSmhIRlV0ZGp5bHZXQ2twdUw0MmRXRGZwT2x1YXFsWjFoTkJ0TnNMZkJHUnFVSm1JU3Y5WjRGRWVrdmdqV3RzYkdyOFFlNTJJN2k5SmZnUlhnT1F2VjdiSk5hdCtPdHRZL1F3eWt1TndINGpDMWI1WlV2WnA3K3VxMkZrdXJzNG1nT2hkclcvZDlqZ1RRNjdwZ0tEcjhobS9rN285bzdzNTA2eTJDZWVZM1B1TzhGbW5ienZidFlQTGEzL1cvclpGSlo3R2dJTTM2N1h3UFlqZ01wci9FTWc0WG9EbTVHdWwxZ0hzNy9DSVNhYjN6dWdrMDRNYUEwSVZFVXZybTN1cFdEUjhEY0tobHRRTUZ5TmdpRVRJL2duZTYya1RkNmMyZGJrNVdIRHJ4N1pKSXNxY0tZdlN1SlJsSWFpb0J0RndUc29DdjZVb2dUQWRjZ0pMY2dKenlJblBJS2M4S0dVb2k5MHdmU2FSdXdBb28rb3FicVIydWNScGc0L2NqM0JUSmo5S2VaeDRHZmptbUFYNVRtV1lDbFRNTnltendRbHhXbURSOVYrL2lPY0pQWmZtQjZIbCtBR2pZMG80dFJ0MXZjSHU0YkZhbjJ5eitBYlJqTmI4bzFTVGpkR0dxTk94WDRTSVRWcHlDUFhJOHloaVQzQkFpWWUzeklWK0toazVpUkNQbWpUKzNTbGVwK3VCdm5nNURHTFFmRVhBOEVBOW5icm5Yb0FzWHd4ZTcrdUl0QUlmbzM2OFVnM1FtQnErd2pvYmZReCtnUjlpajVEbjZNdndKZmdQZWtyVXZ3YXFTSytWZDdENytEM3pBOGUydmgySXpEOXRlbnhWRDZKQzQ1MTJ4dDhsajVIZlQ5UGZ4cCtvczRIdEFWZHdZektuS3ErUXN6eGV4bzNyR3dMY3JkMlZkUVFOMW1YeDFQY3dDMXU0c1BiekJORUx2MkxhTERkVXRQMm9iUXhLOGF6SG9PNFczaUQzVDQ5ZldlVTJlZlIzZjcveUxGWVptRFFYdmM5SzlsYWdVVUFNZUxlZnhhc0FqQ0hmVmdBWkI2SWRZczUwWHUxM2JxTEY5YjI0STlaRDJzRGJpMTQvejhneTFpeGx0amd2T1VCNUxvQWdCWFl6YWxKZ3NhTXJSMXRYWWRSUmxHSDlSUWRzRSs2eG1SZzh5SWVvOG94UnVNUUJTb1B1TU9NWU1MZHM0eEdDSitIMlNNaTVhYnVzL3dDVlk1dE5BMFhtMHk5eEdNMEp0QU9xMXBnSzBCZEtBZjdES0d2ME1mb3k5Ri9aR2xhbE52bHdubENjaGd0Ukw5bFc2QXI0S04rb1NkZ0l4WHBJSnlGMjdnTzJPL05BbGgxVlhlTk95UGQ5LzNTSUtBL1ZDazM5WTRFUFlpdUhlTUJISnBXa20zUWVKRUxQRVlMMFc5Z2daS2E5ekdIenY4Ykk3REhlLzRZYmhmZTJFOWlvTzlKTTMyM2J1YnNTa1F2aU13K24zUU5KVWU4dE90cnp5NXYyRWE2N0EyeFZaVHM0dTh5MWpqbnU1M05DM2tFYmlFL1pqc2l1bE9qMjBRNjhVNllFaW10eGt1dUMzdkw4WVpMbzJzRkVhZFF4dXZHOWxFMGV0Nitsays3TVFIb04wUFlsc2FYYit2YU4zdHIxeTQyZFZta2ZTYlY1eGkzQmJWMXUxMU05d0QwbE96TFhuWUNSOTB0NHd0K3JpdW9LQTE5eXV3RDJwTEFKd1E3WjN5K2NJbmk4a2c2MThuVVNBVDJPNlZLLzNXQklhMWhUMmV3N0VvRlNyYU1JaitUV0UwKzk0cmFIQUp3RVQ5K1o3cGxYRWpxM3hESDNRRGc1SUdPKzVMOEwyK0ovK2l3enhQTXhnRWlCZ0FJL2l5Wm9IQW1NUDAvZUU1azl5NmlOZTFrNnc3V3o0dWNycVRweHlaM0JlVUp2MlJ5cDNYRlRQWWR5TDdKSXdSNFJranpON2F6WGkyQ0lNRTBwVFhvZFpjN0lTamQrckw0Rkh4R0V5M0FSSFVBeDFWL0xadmlqbDh3V1YybTFmU0NmK3N3YzBXMDZPcWE1bTZTS3p5dFJuaFFWYWdNNk1jaFJna0pNWFlFOFloQjl1bUtvb1RwR1JxTmtLNGZ4NE9XK3UrNENyY0dZcmdUWjV2bUc5VFVqdGZuaXFZWlVXVDZVZzBlRTNoa2lVRzVuQnBnakYxNERYYm8rRFFSYmZwVjEzek1wbElKQ3VjK1ZMSnhHZ2F6eEZ3V0kzWkxuajY1WDUwMHhCMDNvWjBNTDRhU1A2R3ZRWEtidVBNclVxdm1hUWgzVUdaclJVWk5pWW85dFhUUlU3eEdsZFN5cFk0NWJBckxVTE16dEFiNjVpbWRJT2FSRFlwSVVGNUJzSW83S1E2L1V6U3d0STJTZWRTMWs3UW9JWFBTYzBHVEY0dXpXaHhMeHZ3TnhGN2g5cjEyTExZWElkOUZENXNyTy9TMzJiS2VXelpQSnFYL0FNM1FoMXB1ZlN0NzZqaVF2WUVsMW1NMGVNN1RNa3dBQTN0OVNEbTc2WmFYS0xaNTY1dnBPMGl4dmZReUNJMmo1Qk9oVi9rMlBpVjNzUnQ0S3FGbC9tRHVEblV6Nm03VnY3OFJQYjNJMWpQTVhWQ3FWWWlmK0VURkhuVzNyY2hNYjUxZTF1dVZwekwwbGdHVElBVU1hUlVGY0tBRHNJRUUwUUlabUtmeURVbEZaWWNvMmE2LzQzUURDYVhza2NNR09LMnM1S0Z6cVB5aTdzamZKOVM4TlZvamo4b1gxTWp1eWZFRVFJQ1BjV2ltQVdnakxCd2tKcTBPSmppZEhaejJpWTNPWnpzRWtkbnJFTmx5blNOWVlsNXloREtYWWc4ajFicVRDQWhzbkM3eTVLdFFLSnRYbG1JeWhVdThOTExCQlppeXVRT1V5RGJKZEVVbXlEV1pyTDlDZWFhWlloSUg3VVMwdUpYbWViVElpalpCY3JGODAyODZKeWV2N0V5MXhFUU9xc21UdzduS3RkQVVaZXp5VGVEbGt5M1hCR1VaNDNMS3BoN1FISzd4cWVBUWV2dG9jV1JsRXRKbEEwMVJaTXBSS1RWRlhlcnB4VnhGeGI2OG5GN2pzcTdHYmRVMjBCdWVJVkpPd3NmRnE0VFBCSVVTT0xpNEpNclFWejk5ZFpNaGFQQzRXVHNZeWdFblpxczRtcndZS2R4ZXVQbFlLVExKcURTL1Y0bzRoQ28rRHZOUWIvUUkrdkhvcmVmZ01UUE1tNFk1dTA3NVA2SklYaEgvZTEveW53RUEpIGZvcm1hdChcXFwid29mZjJcXFwiKTt1bmljb2RlLXJhbmdlOnUrMDA/Pyx1KzAxMzEsdSswMTUyLTAxNTMsdSswMmJiLTAyYmMsdSswMmM2LHUrMDJkYSx1KzAyZGMsdSsyMDAwLTIwNmYsdSsyMDc0LHUrMjBhYyx1KzIxMjIsdSsyMTkxLHUrMjE5Myx1KzIyMTIsdSsyMjE1LHUrZmVmZix1K2ZmZmR9Ym9keSxodG1se2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjR9aHRtbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItcGFyYWdyYXBoLHB7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNjt0ZXh0LWFsaWduOmp1c3RpZnl9Lm1vbnN0ZXItaDEsaDF7Zm9udC1zaXplOjNyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTU7bWFyZ2luOjRyZW0gMCAxLjVyZW19Lm1vbnN0ZXItaDIsaDJ7Zm9udC1zaXplOjIuNXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4yO21hcmdpbjo0cmVtIDAgMS41cmVtfS5tb25zdGVyLWgzLGgze2ZvbnQtc2l6ZToycmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjI1O21hcmdpbjo0cmVtIDAgMS4yNXJlbX0ubW9uc3Rlci1oNCxoNHtmb250LXNpemU6MS41cmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjM7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfS5tb25zdGVyLWg1LGg1e2ZvbnQtc2l6ZToxLjRyZW07Zm9udC13ZWlnaHQ6Ym9sZGVyO2xpbmUtaGVpZ2h0OjEuMzttYXJnaW46NHJlbSAwIDEuMjVyZW19Lm1vbnN0ZXItaDYsaDZ7Zm9udC1zaXplOjEuM3JlbTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MS4zO21hcmdpbjo0cmVtIDAgMS4yNXJlbX1wK2gxe21hcmdpbi10b3A6My43NXJlbX1wK2gye21hcmdpbi10b3A6M3JlbX1wK2gze21hcmdpbi10b3A6Mi4yNXJlbX1wK2g0e21hcmdpbi10b3A6MS41cmVtfXAraDV7bWFyZ2luLXRvcDouNzVyZW19ZGl2K2gxLGRpditoMixkaXYraDMsZGl2K2g0LGRpditoNSxkaXYraDYscCtoNnttYXJnaW4tdG9wOjB9LmRlY297YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0xKSAwLHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMikgNTAlLHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMykgMTAwJSk7LXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6dGV4dDtiYWNrZ3JvdW5kLWNsaXA6dGV4dDtiYWNrZ3JvdW5kLXNpemU6Y292ZXI7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSk7dGV4dC1maWxsLWNvbG9yOnRyYW5zcGFyZW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOnRyYW5zcGFyZW50fTo6LW1vei1zZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX06OnNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfWtiZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOi4yNXJlbTtib3JkZXItcmFkaXVzOjEwcmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3BhZGRpbmc6LjI1ZW0gLjZlbTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9ZGV0YWlsc3ttYXJnaW4tYm90dG9tOjFyZW19c3VtbWFyeXtjdXJzb3I6cG9pbnRlcjtmb250LWZlYXR1cmUtc2V0dGluZ3M6XFxcInRudW1cXFwiO2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMWVtO3BhZGRpbmc6LjZyZW0gMXJlbX1kZXRhaWxzW29wZW5de3BhZGRpbmc6LjZyZW0gMXJlbSAuNzVyZW19ZGV0YWlsc1tvcGVuXSBzdW1tYXJ5e21hcmdpbi1ib3R0b206LjVyZW07cGFkZGluZzowfS5tb25zdGVyLW5vLXVzZXItc2VsZWN0ey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX1Aa2V5ZnJhbWVzIGRldGFpbHMtc2hvd3swJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLS41ZW0pfX1kZXRhaWxzW29wZW5dPjpub3Qoc3VtbWFyeSl7YW5pbWF0aW9uOmRldGFpbHMtc2hvdyAuMTVzIGVhc2UtaW4tb3V0fWRldGFpbHNbb3Blbl0+Omxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS5tb25vc3BhY2V7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseS1tb25vc3BhY2UpfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3V0bGluZTpub25lO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXh7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9LmludmFsaWR7YmFja2dyb3VuZC1jb2xvcjpyZWR9Omhvc3R7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjA7b3V0bGluZTpub25lO3BhZGRpbmc6MDt3aWR0aDoxMDAlfSBcbn1gLFxuXHRcdDAsXG5cdCk7XG59IGNhdGNoIChlKSB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcihcImh0bWxcIiksXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRlICsgXCJcIixcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBEYXRhc291cmNlIH0gZnJvbSBcIi4uLy4uL2RhdGEvZGF0YXNvdXJjZS5tanNcIjtcbmltcG9ydCB7IERlYWRNYW5zU3dpdGNoIH0gZnJvbSBcIi4uLy4uL3V0aWwvZGVhZG1hbnNzd2l0Y2gubWpzXCI7XG5pbXBvcnQgeyBEYXRhU2V0IH0gZnJvbSBcIi4uL2RhdGF0YWJsZS9kYXRhc2V0Lm1qc1wiO1xuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcblx0Z2V0U2xvdHRlZEVsZW1lbnRzLFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBkYXRhc291cmNlTGlua2VkRWxlbWVudFN5bWJvbCB9IGZyb20gXCIuLi9kYXRhdGFibGUvdXRpbC5tanNcIjtcbmltcG9ydCB7IEZvcm1TdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9mb3JtLm1qc1wiO1xuXG5leHBvcnQgeyBGb3JtIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGRlYm91bmNlV3JpdGVCYWNrU3ltYm9sID0gU3ltYm9sKFwiZGVib3VuY2VXcml0ZUJhY2tcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGRlYm91bmNlQmluZFN5bWJvbCA9IFN5bWJvbChcImRlYm91bmNlQmluZFwiKTtcblxuLyoqXG4gKiBBIGZvcm0gY29udHJvbCB0aGF0IGNhbiBiZSB1c2VkIHRvIGdyb3VwIGZvcm0gZWxlbWVudHMuXG4gKlxuICogQGZyYWdtZW50cyAvZnJhZ21lbnRzL2NvbXBvbmVudHMvZm9ybS9mb3JtL1xuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2Zvcm0vZm9ybS1zaW1wbGVcbiAqXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIGZvcm0gY29udHJvbFxuICogQGZpcmVzIG1vbnN0ZXItb3B0aW9ucy1zZXRcbiAqIEBmaXJlcyBtb25zdGVyLXNlbGVjdGVkXG4gKiBAZmlyZXMgbW9uc3Rlci1jaGFuZ2VcbiAqIEBmaXJlcyBtb25zdGVyLWNoYW5nZWRcbiAqL1xuY2xhc3MgRm9ybSBleHRlbmRzIERhdGFTZXQge1xuXHQvKipcblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gY2xhc3NlcyBDbGFzcyBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gY2xhc3Nlcy5mb3JtIEZvcm0gY2xhc3Ncblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHdyaXRlQmFjayBXcml0ZSBiYWNrIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IHdyaXRlQmFjay5ldmVudHMgV3JpdGUgYmFjayBldmVudHNcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGJpbmQgQmluZCBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge09iamVjdH0gcmVwb3J0VmFsaWRpdHkgUmVwb3J0IHZhbGlkaXR5IGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByZXBvcnRWYWxpZGl0eS5zZWxlY3RvciBSZXBvcnQgdmFsaWRpdHkgc2VsZWN0b3Jcblx0ICogQHByb3BlcnR5IHtib29sZWFufSBmZWF0dXJlcy5tdXRhdGlvbk9ic2VydmVyIE11dGF0aW9uIG9ic2VydmVyIGZlYXR1cmVcblx0ICogQHByb3BlcnR5IHtib29sZWFufSBmZWF0dXJlcy53cml0ZUJhY2sgV3JpdGUgYmFjayBmZWF0dXJlXG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZmVhdHVyZXMuYmluZCBCaW5kIGZlYXR1cmVcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRjb25zdCBvYmogPSBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHR9LFxuXG5cdFx0XHRjbGFzc2VzOiB7XG5cdFx0XHRcdGZvcm06IFwiXCIsXG5cdFx0XHR9LFxuXG5cdFx0XHR3cml0ZUJhY2s6IHtcblx0XHRcdFx0ZXZlbnRzOiBbXCJrZXl1cFwiLCBcImNsaWNrXCIsIFwiY2hhbmdlXCIsIFwiZHJvcFwiLCBcInRvdWNoZW5kXCIsIFwiaW5wdXRcIl0sXG5cdFx0XHR9LFxuXG5cdFx0XHRyZXBvcnRWYWxpZGl0eToge1xuXHRcdFx0XHRzZWxlY3RvcjogXCJpbnB1dCxzZWxlY3QsdGV4dGFyZWFcIixcblx0XHRcdH0sXG5cblx0XHRcdGV2ZW50UHJvY2Vzc2luZzogdHJ1ZSxcblx0XHR9KTtcblxuXHRcdG9ialtcImZlYXR1cmVzXCJdW1wibXV0YXRpb25PYnNlcnZlclwiXSA9IGZhbHNlO1xuXHRcdG9ialtcImZlYXR1cmVzXCJdW1wid3JpdGVCYWNrXCJdID0gdHJ1ZTtcblxuXHRcdHJldHVybiBvYmo7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLWZvcm1cIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtDU1NTdHlsZVNoZWV0W119XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW0Zvcm1TdHlsZVNoZWV0XTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRjb25zdCBzZWxlY3RvciA9IHRoaXMuZ2V0T3B0aW9uKFwiZGF0YXNvdXJjZS5zZWxlY3RvclwiKTtcblxuXHRcdGlmICghc2VsZWN0b3IpIHtcblx0XHRcdHRoaXNbZGF0YXNvdXJjZUxpbmtlZEVsZW1lbnRTeW1ib2xdID0gbmV3IERhdGFzb3VyY2UodGhpcyk7XG5cdFx0fVxuXG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcblx0XHRpbml0RXZlbnRIYW5kbGVyLmNhbGwodGhpcyk7XG5cdFx0aW5pdERhdGFTb3VyY2VIYW5kbGVyLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBjcmVhdGVkLlxuXHQgKiBAc2luY2UgMy43MC4wXG5cdCAqIEByZXR1cm4ge0RhdGFTZXR9XG5cdCAqL1xuXHRyZWZyZXNoKCkge1xuXHRcdHRoaXMud3JpdGUoKTtcblx0XHRzdXBlci5yZWZyZXNoKCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogUnVuIHJlcG9ydFZhbGlkYXRpb24gb24gYWxsIGNoaWxkIGh0bWwgZm9ybSBjb250cm9scy5cblx0ICpcblx0ICogQHNpbmNlIDIuMTAuMFxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0cmVwb3J0VmFsaWRpdHkoKSB7XG5cdFx0bGV0IHZhbGlkID0gdHJ1ZTtcblxuXHRcdGNvbnN0IHNlbGVjdG9yID0gdGhpcy5nZXRPcHRpb24oXCJyZXBvcnRWYWxpZGl0eS5zZWxlY3RvclwiKTtcblx0XHRjb25zdCBub2RlcyA9IGdldFNsb3R0ZWRFbGVtZW50cy5jYWxsKHRoaXMsIHNlbGVjdG9yKTtcblxuXHRcdG5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcblx0XHRcdGlmICh0eXBlb2Ygbm9kZS5yZXBvcnRWYWxpZGl0eSA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRcdGlmIChub2RlLnJlcG9ydFZhbGlkaXR5KCkgPT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0dmFsaWQgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHZhbGlkO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGluaXREYXRhU291cmNlSGFuZGxlcigpIHt9XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge2luaXRFdmVudEhhbmRsZXJ9XG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudEhhbmRsZXIoKSB7XG5cdHRoaXNbZGVib3VuY2VCaW5kU3ltYm9sXSA9IHt9O1xuXG5cdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLndyaXRlQmFja1wiKSA9PT0gdHJ1ZSkge1xuXHRcdGNvbnN0IGV2ZW50cyA9IHRoaXMuZ2V0T3B0aW9uKFwid3JpdGVCYWNrLmV2ZW50c1wiKTtcblx0XHRmb3IgKGNvbnN0IGV2ZW50IG9mIGV2ZW50cykge1xuXHRcdFx0dGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCAoZSkgPT4ge1xuXHRcdFx0XHRpZiAoIXRoaXMucmVwb3J0VmFsaWRpdHkoKSkge1xuXHRcdFx0XHRcdHRoaXMuY2xhc3NMaXN0LmFkZChcImludmFsaWRcIik7XG5cdFx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLmNsYXNzTGlzdC5yZW1vdmUoXCJpbnZhbGlkXCIpO1xuXHRcdFx0XHRcdH0sIDEwMDApO1xuXG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHRoaXNbZGVib3VuY2VXcml0ZUJhY2tTeW1ib2xdIGluc3RhbmNlb2YgRGVhZE1hbnNTd2l0Y2gpIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0dGhpc1tkZWJvdW5jZVdyaXRlQmFja1N5bWJvbF0udG91Y2goKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRpZiAoZS5tZXNzYWdlICE9PSBcImhhcyBhbHJlYWR5IHJ1blwiKSB7XG5cdFx0XHRcdFx0XHRcdHRocm93IGU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRkZWxldGUgdGhpc1tkZWJvdW5jZVdyaXRlQmFja1N5bWJvbF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpc1tkZWJvdW5jZVdyaXRlQmFja1N5bWJvbF0gPSBuZXcgRGVhZE1hbnNTd2l0Y2goMjAwLCAoKSA9PiB7XG5cdFx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLndyaXRlKCk7XG5cdFx0XHRcdFx0fSwgMCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge0ZpbHRlckJ1dHRvbn1cbiAqL1xuZnVuY3Rpb24gaW5pdENvbnRyb2xSZWZlcmVuY2VzKCkge1xuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiPlxuICAgICAgICAgICAgPGZvcm0gZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJkaXNhYmxlZCBwYXRoOmRpc2FibGVkIHwgaWY6dHJ1ZSwgY2xhc3MgcGF0aDpjbGFzc2VzLmZvcm1cIlxuICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJmb3JtXCJcbiAgICAgICAgICAgICAgICAgIHBhcnQ9XCJmb3JtXCI+XG4gICAgICAgICAgICAgICAgPHNsb3QgZGF0YS1tb25zdGVyLXJvbGU9XCJzbG90XCI+PC9zbG90PlxuICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICA8L2Rpdj5cbiAgICBgO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoRm9ybSk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaXNBcnJheSwgaXNJbnN0YW5jZSB9IGZyb20gXCIuL2lzLm1qc1wiO1xuaW1wb3J0IHsgTm9kZSB9IGZyb20gXCIuL25vZGUubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlIH0gZnJvbSBcIi4vdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBOb2RlTGlzdCB9O1xuXG4vKipcbiAqIFlvdSBjYW4gY3JlYXRlIHRoZSBpbnN0YW5jZSB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBuZXcgTW9uc3Rlci5UeXBlcy5Ob2RlTGlzdCgpYC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI2LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIE5vZGVMaXN0IGNsYXNzXG4gKi9cbmNsYXNzIE5vZGVMaXN0IGV4dGVuZHMgU2V0IHtcblx0LyoqXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBpbnZhbGlkIHZhbHVlIHR5cGVcblx0ICogQHBhcmFtIHtOb2RlTGlzdHxOb2RlfEFycmF5PE5vZGU+fXZhbHVlc1xuXHQgKi9cblx0Y29uc3RydWN0b3IodmFsdWVzKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmICh2YWx1ZXMgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuXG5cdFx0aWYgKGlzQXJyYXkodmFsdWVzKSkge1xuXHRcdFx0dmFsdWVzLmZvckVhY2goKHZhbHVlKSA9PiB0aGlzLmFkZCh2YWx1ZSkpO1xuXHRcdH0gZWxzZSBpZiAoaXNJbnN0YW5jZSh2YWx1ZXMsIE5vZGVMaXN0KSkge1xuXHRcdFx0dmFsdWVzLmZvckVhY2goKHZhbHVlKSA9PiB0aGlzLmFkZCh2YWx1ZSkpO1xuXHRcdH0gZWxzZSBpZiAoaXNJbnN0YW5jZSh2YWx1ZXMsIE5vZGUpKSB7XG5cdFx0XHR0aGlzLmFkZCh2YWx1ZXMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHZhbHVlIHR5cGVcIik7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci90eXBlcy9ub2RlLWxpc3RcIik7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtOb2RlfSBub2RlXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuVHlwZXMuTm9kZUxpc3R9XG5cdCAqL1xuXHRhZGQobm9kZSkge1xuXHRcdHN1cGVyLmFkZCh2YWxpZGF0ZUluc3RhbmNlKG5vZGUsIE5vZGUpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge05vZGV9IG5vZGVcblx0ICogQHJldHVybiB7Tm9kZUxpc3R9XG5cdCAqL1xuXHRyZW1vdmUobm9kZSkge1xuXHRcdHN1cGVyLmRlbGV0ZSh2YWxpZGF0ZUluc3RhbmNlKG5vZGUsIE5vZGUpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge05vZGV9IG5vZGVcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGhhcyhub2RlKSB7XG5cdFx0cmV0dXJuIHN1cGVyLmhhcyh2YWxpZGF0ZUluc3RhbmNlKG5vZGUsIE5vZGUpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtOb2RlTGlzdH1cblx0ICovXG5cdGNsZWFyKCkge1xuXHRcdHN1cGVyLmNsZWFyKCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7Tm9kZUxpc3R9XG5cdCAqL1xuXHR0b0FycmF5KCkge1xuXHRcdHJldHVybiBBcnJheS5mcm9tKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge05vZGVMaXN0fVxuXHQgKi9cblx0dG9KU09OKCkge1xuXHRcdHJldHVybiB0aGlzLnRvQXJyYXkoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtOb2RlTGlzdH1cblx0ICovXG5cdHRvU3RyaW5nKCkge1xuXHRcdGNvbnN0IHBhcnRzID0gW107XG5cblx0XHRmb3IgKGNvbnN0IG5vZGUgb2YgdGhpcy50b0FycmF5KCkpIHtcblx0XHRcdHBhcnRzLnB1c2gobm9kZS50b1N0cmluZygpKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcGFydHMuam9pbihcIlxcblwiKTtcblx0fVxuXG5cdGdldCBsZW5ndGgoKSB7XG5cdFx0cmV0dXJuIHN1cGVyLnNpemU7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZS5tanNcIjtcbmltcG9ydCB7IGlzUHJpbWl0aXZlIH0gZnJvbSBcIi4vaXMubWpzXCI7XG5pbXBvcnQgeyBOb2RlTGlzdCB9IGZyb20gXCIuL25vZGVsaXN0Lm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVJbnN0YW5jZSB9IGZyb20gXCIuL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBOb2RlIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGludGVybmFsVmFsdWVTeW1ib2wgPSBTeW1ib2woXCJpbnRlcm5hbERhdGFcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHRyZWVTdHJ1Y3R1cmVTeW1ib2wgPSBTeW1ib2woXCJ0cmVlU3RydWN0dXJlXCIpO1xuXG4vKipcbiAqIFlvdSBjYW4gY3JlYXRlIHRoZSBpbnN0YW5jZSB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBuZXcgTW9uc3Rlci5UeXBlcy5Ob2RlKClgLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjYuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgTm9kZSBDbGFzc1xuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kZS9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9JdGVyYXRpb25fcHJvdG9jb2xzXG4gKi9cbmNsYXNzIE5vZGUgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7Kn0gW3ZhbHVlXVxuXHQgKi9cblx0Y29uc3RydWN0b3IodmFsdWUpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXNbaW50ZXJuYWxWYWx1ZVN5bWJvbF0gPSB2YWx1ZTtcblxuXHRcdHRoaXNbdHJlZVN0cnVjdHVyZVN5bWJvbF0gPSB7XG5cdFx0XHRwYXJlbnQ6IG51bGwsXG5cdFx0XHRjaGlsZE5vZGVzOiBuZXcgTm9kZUxpc3QoKSxcblx0XHRcdGxldmVsOiAwLFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL3R5cGVzL25vZGVcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHsqfVxuXHQgKi9cblx0Z2V0IHZhbHVlKCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsVmFsdWVTeW1ib2xdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7Kn1cblx0ICovXG5cdHNldCB2YWx1ZSh2YWx1ZSkge1xuXHRcdHRoaXNbaW50ZXJuYWxWYWx1ZVN5bWJvbF0gPSB2YWx1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge01vbnN0ZXIuVHlwZXMuTm9kZXxudWxsfVxuXHQgKi9cblx0Z2V0IHBhcmVudCgpIHtcblx0XHRyZXR1cm4gdGhpc1t0cmVlU3RydWN0dXJlU3ltYm9sXS5wYXJlbnQ7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHtpbnRlZ2VyfVxuXHQgKi9cblx0Z2V0IGxldmVsKCkge1xuXHRcdHJldHVybiB0aGlzW3RyZWVTdHJ1Y3R1cmVTeW1ib2xdLmxldmVsO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7Tm9kZUxpc3R9XG5cdCAqL1xuXHRnZXQgY2hpbGROb2RlcygpIHtcblx0XHRyZXR1cm4gdGhpc1t0cmVlU3RydWN0dXJlU3ltYm9sXS5jaGlsZE5vZGVzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7Tm9kZUxpc3R9XG5cdCAqL1xuXHRzZXQgY2hpbGROb2RlcyhjaGlsZE5vZGVzKSB7XG5cdFx0dGhpc1t0cmVlU3RydWN0dXJlU3ltYm9sXS5jaGlsZE5vZGVzID0gdmFsaWRhdGVJbnN0YW5jZShcblx0XHRcdGNoaWxkTm9kZXMsXG5cdFx0XHROb2RlTGlzdCxcblx0XHQpO1xuXHRcdHNldENoaWxkTGV2ZWxBbmRQYXJlbnQuY2FsbCh0aGlzLCB0aGlzLCAxLCBuZXcgU2V0KCkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuVHlwZXMuTm9kZX1cblx0ICogQHBhcmFtIHtOb2RlfSBub2RlXG5cdCAqL1xuXHRhcHBlbmRDaGlsZChub2RlKSB7XG5cdFx0dGhpc1t0cmVlU3RydWN0dXJlU3ltYm9sXS5jaGlsZE5vZGVzLmFkZCh2YWxpZGF0ZUluc3RhbmNlKG5vZGUsIE5vZGUpKTtcblx0XHRub2RlW3RyZWVTdHJ1Y3R1cmVTeW1ib2xdLnBhcmVudCA9IHRoaXM7XG5cblx0XHRub2RlW3RyZWVTdHJ1Y3R1cmVTeW1ib2xdLmxldmVsID0gdGhpcy5sZXZlbCArIDE7XG5cdFx0c2V0Q2hpbGRMZXZlbEFuZFBhcmVudC5jYWxsKHRoaXMsIG5vZGUsIDEsIG5ldyBTZXQoKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7TW9uc3Rlci5UeXBlcy5Ob2RlfVxuXHQgKiBAcGFyYW0ge05vZGV9IG5vZGVcblx0ICovXG5cdHJlbW92ZUNoaWxkKG5vZGUpIHtcblx0XHR0aGlzW3RyZWVTdHJ1Y3R1cmVTeW1ib2xdLmNoaWxkTm9kZXMucmVtb3ZlKHZhbGlkYXRlSW5zdGFuY2Uobm9kZSwgTm9kZSkpO1xuXHRcdG5vZGVbdHJlZVN0cnVjdHVyZVN5bWJvbF0ucGFyZW50ID0gbnVsbDtcblxuXHRcdG5vZGVbdHJlZVN0cnVjdHVyZVN5bWJvbF0ubGV2ZWwgPSAwO1xuXHRcdHNldENoaWxkTGV2ZWxBbmRQYXJlbnQuY2FsbCh0aGlzLCBub2RlLCAtMSwgbmV3IFNldCgpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0aGFzQ2hpbGROb2RlcygpIHtcblx0XHRyZXR1cm4gdGhpc1t0cmVlU3RydWN0dXJlU3ltYm9sXS5jaGlsZE5vZGVzLmxlbmd0aCA+IDA7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7TW9uc3Rlci5UeXBlcy5Ob2RlfVxuXHQgKiBAcGFyYW0ge05vZGV9IG5vZGVcblx0ICovXG5cdGhhc0NoaWxkKG5vZGUpIHtcblx0XHRyZXR1cm4gdGhpc1t0cmVlU3RydWN0dXJlU3ltYm9sXS5jaGlsZE5vZGVzLmhhcyhcblx0XHRcdHZhbGlkYXRlSW5zdGFuY2Uobm9kZSwgTm9kZSksXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAc2luY2UgMS4yOC4wXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHRvU3RyaW5nKCkge1xuXHRcdGNvbnN0IHBhcnRzID0gW107XG5cdFx0aWYgKHRoaXNbaW50ZXJuYWxWYWx1ZVN5bWJvbF0pIHtcblx0XHRcdGxldCBsYWJlbCA9IHRoaXNbaW50ZXJuYWxWYWx1ZVN5bWJvbF07XG5cdFx0XHRpZiAoIWlzUHJpbWl0aXZlKGxhYmVsKSlcblx0XHRcdFx0bGFiZWwgPSBKU09OLnN0cmluZ2lmeSh0aGlzW2ludGVybmFsVmFsdWVTeW1ib2xdKTtcblxuXHRcdFx0cGFydHMucHVzaChsYWJlbCk7XG5cdFx0fVxuXG5cdFx0aWYgKCF0aGlzLmhhc0NoaWxkTm9kZXMoKSkge1xuXHRcdFx0cmV0dXJuIHBhcnRzLmpvaW4oXCJcXG5cIik7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY291bnQgPSB0aGlzLmNoaWxkTm9kZXMubGVuZ3RoO1xuXHRcdGxldCBjb3VudGVyID0gMDtcblxuXHRcdGZvciAoY29uc3Qgbm9kZSBvZiB0aGlzLmNoaWxkTm9kZXMpIHtcblx0XHRcdGNvdW50ZXIrKztcblx0XHRcdGNvbnN0IHByZWZpeCA9IChjb3VudCA9PT0gY291bnRlciA/IFwiXHUyNTE0XCIgOiBcIlx1MjUxQ1wiKS5wYWRTdGFydChcblx0XHRcdFx0MiAqIG5vZGUubGV2ZWwsXG5cdFx0XHRcdFwiIHxcIixcblx0XHRcdCk7XG5cdFx0XHRwYXJ0cy5wdXNoKHByZWZpeCArIG5vZGUudG9TdHJpbmcoKSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHBhcnRzLmpvaW4oXCJcXG5cIik7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtOb2RlfSBub2RlXG4gKiBAcGFyYW0ge2ludH0gb3BlcmFuZFxuICogQHBhcmFtIHtTZXR9IHZpc2l0ZWROb2Rlc1xuICogQHJldHVybiB7c2V0Q2hpbGRMZXZlbEFuZFBhcmVudH1cbiAqL1xuZnVuY3Rpb24gc2V0Q2hpbGRMZXZlbEFuZFBhcmVudChub2RlLCBvcGVyYW5kLCB2aXNpdGVkTm9kZXMpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0aWYgKHZpc2l0ZWROb2Rlcy5oYXMobm9kZSkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcInRoZSBub2RlIGhhcyBhbHJlYWR5IGJlZW4gdmlzaXRlZCBhbmQgY2Fubm90IGJlIHRyYXZlcnNlZCBhZ2FpblwiLFxuXHRcdCk7XG5cdH1cblxuXHR2aXNpdGVkTm9kZXMuYWRkKG5vZGUpO1xuXG5cdGlmIChub2RlICE9PSB0aGlzKSB7XG5cdFx0bm9kZVt0cmVlU3RydWN0dXJlU3ltYm9sXS5wYXJlbnQgPSB0aGlzO1xuXHR9XG5cblx0bm9kZVt0cmVlU3RydWN0dXJlU3ltYm9sXS5jaGlsZE5vZGVzLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG5cdFx0Y2hpbGRbdHJlZVN0cnVjdHVyZVN5bWJvbF0ucGFyZW50ID0gbm9kZTtcblx0XHRjaGlsZFt0cmVlU3RydWN0dXJlU3ltYm9sXS5sZXZlbCA9XG5cdFx0XHRub2RlW3RyZWVTdHJ1Y3R1cmVTeW1ib2xdLmxldmVsICsgb3BlcmFuZDtcblx0XHRzZXRDaGlsZExldmVsQW5kUGFyZW50LmNhbGwoc2VsZiwgY2hpbGQsIG9wZXJhbmQsIHZpc2l0ZWROb2Rlcyk7XG5cdH0pO1xuXHRyZXR1cm4gdGhpcztcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpc0FycmF5LCBpc09iamVjdCB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IE5vZGUgfSBmcm9tIFwiLi4vdHlwZXMvbm9kZS5tanNcIjtcbmltcG9ydCB7IE5vZGVMaXN0IH0gZnJvbSBcIi4uL3R5cGVzL25vZGVsaXN0Lm1qc1wiO1xuaW1wb3J0IHsgY2xvbmUgfSBmcm9tIFwiLi4vdXRpbC9jbG9uZS5tanNcIjtcbmltcG9ydCB7IGFzc2VtYmxlUGFydHMgfSBmcm9tIFwiLi9idWlsZG1hcC5tanNcIjtcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuL2V4dGVuZC5tanNcIjtcblxuZXhwb3J0IHsgYnVpbGRUcmVlIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHBhcmVudFN5bWJvbCA9IFN5bWJvbChcInBhcmVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgcm9vdFN5bWJvbCA9IFN5bWJvbChcInJvb3RcIik7XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gYnVpbGRUcmVlT3B0aW9uc1xuICogQHByb3BlcnR5IHthcnJheX0gb3B0aW9ucy5yb290UmVmZXJlbmNlcz1bbnVsbCwgdW5kZWZpbmVkXSBkZWZpbmVzIHRoZSB2YWx1ZXMgZm9yIGVsZW1lbnRzIHdpdGhvdXQgcGFyZW50c1xuICogQHByb3BlcnR5IHtNb25zdGVyLkRhdGF+ZXhhbXBsZUZpbHRlckNhbGxiYWNrfSBvcHRpb25zLmZpbHRlciBmaWx0ZXJpbmcgb2YgdGhlIHZhbHVlc1xuICovXG5cbi8qKlxuICogQ3JlYXRlcyBhIHRyZWUgc3RydWN0dXJlIGZyb20gYSBnaXZlbiBzdWJqZWN0IHVzaW5nIGEgc2VsZWN0b3IgYW5kIHNwZWNpZmllZCBJRCBhbmQgcGFyZW50IElEIGtleXMuXG4gKlxuICogVGhlIGJ1aWxkVHJlZSBmdW5jdGlvbiBpcyBhIHBvd2VyZnVsIHRvb2wgZm9yIGNyZWF0aW5nIHRyZWUtbGlrZSBkYXRhIHN0cnVjdHVyZXMgZnJvbSBwbGFpbiBKYXZhU2NyaXB0XG4gKiBvYmplY3RzLiBJdCB0YWtlcyBpbiBmb3VyIHJlcXVpcmVkIHBhcmFtZXRlcnM6IHRoZSBzdWJqZWN0IG9iamVjdCB0aGF0IHlvdSB3YW50IHRvIHR1cm4gaW50byBhIHRyZWUsIGFcbiAqIHNlbGVjdG9yIHRoYXQgaWRlbnRpZmllcyB3aGljaCBwYXJ0cyBvZiB0aGUgc3ViamVjdCB0byB1c2Ugd2hlbiBidWlsZGluZyB0aGUgdHJlZSwgYW5kIHR3byBrZXlzXG4gKiAoaWRLZXkgYW5kIHBhcmVudElES2V5KSB0aGF0IHNwZWNpZnkgd2hpY2ggcHJvcGVydGllcyBpbiB0aGUgc3ViamVjdCByZXByZXNlbnQgdGhlIHVuaXF1ZSBpZGVudGlmaWVyc1xuICogYW5kIHBhcmVudC1jaGlsZCByZWxhdGlvbnNoaXBzIGJldHdlZW4gbm9kZXMgaW4gdGhlIHRyZWUuXG4gKlxuICogT3B0aW9uYWxseSwgeW91IGNhbiBhbHNvIHBhc3MgaW4gYW4gb3B0aW9ucyBvYmplY3QgdG8gZnVydGhlciBjb25maWd1cmUgdGhlIGJlaGF2aW9yIG9mIHRoZSBmdW5jdGlvbixcbiAqIHN1Y2ggYXMgc3BlY2lmeWluZyB3aGljaCB2YWx1ZXMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgcm9vdHMgb2YgdGhlIHRyZWUsIG9yIHByb3ZpZGluZyBhIGN1c3RvbSBmaWx0ZXJcbiAqIGZ1bmN0aW9uIHRvIG9ubHkgaW5jbHVkZSBjZXJ0YWluIG5vZGVzIGluIHRoZSBmaW5hbCBvdXRwdXQuXG4gKlxuICogVGhlIGJ1aWxkVHJlZSBmdW5jdGlvbiB3b3JrcyBieSBmaXJzdCB1c2luZyB0aGUgYXNzZW1ibGVQYXJ0cyBoZWxwZXIgZnVuY3Rpb24gdG8gZXh0cmFjdCB0aGUgcmVsZXZhbnRcbiAqIHBhcnRzIG9mIHRoZSBzdWJqZWN0IGJhc2VkIG9uIHRoZSBzZWxlY3RvciwgYW5kIHRoZW4gaXRlcmF0ZXMgb3ZlciB0aGUgcmVzdWx0aW5nIG1hcCB0byBjcmVhdGUgTm9kZVxuICogb2JqZWN0cyBhbmQgb3JnYW5pemUgdGhlbSBpbnRvIHBhcmVudC1jaGlsZCByZWxhdGlvbnNoaXBzIGJhc2VkIG9uIHRoZSB2YWx1ZXMgb2YgdGhlIGlkS2V5IGFuZCBwYXJlbnRJREtleSBwcm9wZXJ0aWVzLlxuICpcbiAqIFRoZSByZXN1bHRpbmcgTm9kZUxpc3QgcmVwcmVzZW50cyB0aGUgdHJlZSBzdHJ1Y3R1cmUsIHdpdGggZWFjaCBOb2RlIG9iamVjdCBjb250YWluaW5nIHRoZSBvcmlnaW5hbFxuICogb2JqZWN0IGRhdGEgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIG1ldGFkYXRhIGFib3V0IGl0cyBwb3NpdGlvbiBpbiB0aGUgdHJlZS4gWW91IGNhbiB0aGVuIHVzZSB0aGUgY2hpbGROb2Rlc1xuICogcHJvcGVydHkgb2YgZWFjaCBOb2RlIHRvIGFjY2VzcyBpdHMgY2hpbGRyZW4sIG9yIHRoZSBwYXJlbnQgcHJvcGVydHkgdG8gYWNjZXNzIGl0cyBwYXJlbnQuXG4gKlxuICogT3ZlcmFsbCwgdGhlIGJ1aWxkVHJlZSBmdW5jdGlvbiBpcyBhIGZsZXhpYmxlIGFuZCBwb3dlcmZ1bCB3YXkgdG8gdHJhbnNmb3JtIGZsYXQgZGF0YSBpbnRvIGhpZXJhcmNoaWNhbFxuICogc3RydWN0dXJlcywgYW5kIGNhbiBiZSBlc3BlY2lhbGx5IHVzZWZ1bCBpbiBzY2VuYXJpb3Mgc3VjaCBhcyBkaXNwbGF5aW5nIGZvbGRlciBzdHJ1Y3R1cmVzIG9yXG4gKiB2aXN1YWxpemluZyBjb21wbGV4IGRhdGEgcmVsYXRpb25zaGlwcy5cbiAqXG4gKiBMZXQncyBzYXkgeW91IGhhdmUgYW4gYXJyYXkgb2YgZGF0YSBvYmplY3RzIHJlcHJlc2VudGluZyBhIGZpbGUgc3lzdGVtIGRpcmVjdG9yeSBzdHJ1Y3R1cmUsIGFuZCB5b3Ugd2FudFxuICogdG8gdHVybiBpdCBpbnRvIGEgdHJlZS1saWtlIHN0cnVjdHVyZSB3aGVyZSBlYWNoIG5vZGUgcmVwcmVzZW50cyBhIGZvbGRlciBvciBmaWxlLCBhbmQgY2hpbGQgbm9kZXNcbiAqIHJlcHJlc2VudCB0aGUgY29udGVudHMgb2YgdGhlIGZvbGRlcjpcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBjb25zdCBmaWxlU3lzdGVtID0gW1xuICogICB7IGlkOiAnZm9sZGVyMScsIG5hbWU6ICdGb2xkZXIgMScsIHR5cGU6ICdmb2xkZXInLCBwYXJlbnQ6IG51bGwgfSxcbiAqICAgeyBpZDogJ2ZpbGUxJywgbmFtZTogJ0ZpbGUgMScsIHR5cGU6ICdmaWxlJywgcGFyZW50OiAnZm9sZGVyMScgfSxcbiAqICAgeyBpZDogJ2ZpbGUyJywgbmFtZTogJ0ZpbGUgMicsIHR5cGU6ICdmaWxlJywgcGFyZW50OiAnZm9sZGVyMScgfSxcbiAqICAgeyBpZDogJ3N1YmZvbGRlcjEnLCBuYW1lOiAnU3ViZm9sZGVyIDEnLCB0eXBlOiAnZm9sZGVyJywgcGFyZW50OiAnZm9sZGVyMScgfSxcbiAqICAgeyBpZDogJ2ZpbGUzJywgbmFtZTogJ0ZpbGUgMycsIHR5cGU6ICdmaWxlJywgcGFyZW50OiAnc3ViZm9sZGVyMScgfSxcbiAqICAgeyBpZDogJ2ZpbGU0JywgbmFtZTogJ0ZpbGUgNCcsIHR5cGU6ICdmaWxlJywgcGFyZW50OiAnc3ViZm9sZGVyMScgfSxcbiAqICAgeyBpZDogJ3N1YmZvbGRlcjInLCBuYW1lOiAnU3ViZm9sZGVyIDInLCB0eXBlOiAnZm9sZGVyJywgcGFyZW50OiAnZm9sZGVyMScgfSxcbiAqICAgeyBpZDogJ2ZpbGU1JywgbmFtZTogJ0ZpbGUgNScsIHR5cGU6ICdmaWxlJywgcGFyZW50OiAnc3ViZm9sZGVyMicgfSxcbiAqICAgeyBpZDogJ2ZpbGU2JywgbmFtZTogJ0ZpbGUgNicsIHR5cGU6ICdmaWxlJywgcGFyZW50OiAnc3ViZm9sZGVyMicgfSxcbiAqICAgeyBpZDogJ2ZvbGRlcjInLCBuYW1lOiAnRm9sZGVyIDInLCB0eXBlOiAnZm9sZGVyJywgcGFyZW50OiBudWxsIH0sXG4gKiAgIHsgaWQ6ICdmaWxlNycsIG5hbWU6ICdGaWxlIDcnLCB0eXBlOiAnZmlsZScsIHBhcmVudDogJ2ZvbGRlcjInIH0sXG4gKiAgIHsgaWQ6ICdmaWxlOCcsIG5hbWU6ICdGaWxlIDgnLCB0eXBlOiAnZmlsZScsIHBhcmVudDogJ2ZvbGRlcjInIH0sXG4gKiAgIHsgaWQ6ICdzdWJmb2xkZXIzJywgbmFtZTogJ1N1YmZvbGRlciAzJywgdHlwZTogJ2ZvbGRlcicsIHBhcmVudDogJ2ZvbGRlcjInIH0sXG4gKiAgIHsgaWQ6ICdmaWxlOScsIG5hbWU6ICdGaWxlIDknLCB0eXBlOiAnZmlsZScsIHBhcmVudDogJ3N1YmZvbGRlcjMnIH0sXG4gKiAgIHsgaWQ6ICdmaWxlMTAnLCBuYW1lOiAnRmlsZSAxMCcsIHR5cGU6ICdmaWxlJywgcGFyZW50OiAnc3ViZm9sZGVyMycgfSxcbiAqIF07XG4gKlxuICogY29uc3QgdHJlZSA9IGJ1aWxkVHJlZShmaWxlU3lzdGVtLCAnaWQnLCAnaWQnLCAncGFyZW50JywgeyByb290UmVmZXJlbmNlczogW251bGxdIH0pO1xuICpcbiAqIGNvbnNvbGUubG9nKHRyZWUudG9TdHJpbmcoKSk7XG4gKiBgYGBcbiAqXG4gKiBUaGUgYnVpbGRUcmVlIGZ1bmN0aW9uIHRha2VzIGluIHRoZSBhcnJheSBvZiBkYXRhIG9iamVjdHMsIGFzIHdlbGwgYXMgc29tZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgc3BlY2lmeWluZ1xuICogdGhlIGtleXMgdG8gdXNlIGZvciBpZGVudGlmeWluZyBub2RlcyBhbmQgdGhlaXIgcGFyZW50LWNoaWxkIHJlbGF0aW9uc2hpcHMuIEluIHRoaXMgZXhhbXBsZSwgd2UgdXNlIHRoZSBpZFxuICoga2V5IHRvIGlkZW50aWZ5IG5vZGVzLCBhbmQgdGhlIHBhcmVudCBrZXkgdG8gc3BlY2lmeSB0aGUgcGFyZW50IG9mIGVhY2ggbm9kZS5cbiAqXG4gKiBUaGUgcmVzdWx0aW5nIHRyZWUgb2JqZWN0IGlzIGEgbmVzdGVkIHRyZWUgc3RydWN0dXJlLCB3aGVyZSBlYWNoIG5vZGUgaXMgYW4gb2JqZWN0IHJlcHJlc2VudGluZyBhIGZpbGUgb3JcbiAqIGZvbGRlciwgYW5kIGhhcyBjaGlsZCBub2RlcyByZXByZXNlbnRpbmcgaXRzIGNvbnRlbnRzLiBUaGUgdG9TdHJpbmcgbWV0aG9kIG9mIHRoZSB0cmVlIG9iamVjdFxuICogY2FuIGJlIHVzZWQgdG8gcHJpbnQgb3V0IHRoZSB0cmVlIGluIGEgcmVhZGFibGUgZm9ybWF0OlxuICpcbiAqIGBgYG1hcmtkb3duXG4gKiAtIEZvbGRlciAxXG4gKiAgIC0gRmlsZSAxXG4gKiAgIC0gRmlsZSAyXG4gKiAgIC0gU3ViZm9sZGVyIDFcbiAqICAgICAtIEZpbGUgM1xuICogICAgIC0gRmlsZSA0XG4gKiAgIC0gU3ViZm9sZGVyIDJcbiAqICAgICAtIEZpbGUgNVxuICogICAgIC0gRmlsZSA2XG4gKiAtIEZvbGRlciAyXG4gKiAgIC0gRmlsZSA3XG4gKiAgIC0gRmlsZSA4XG4gKiAgIC0gU3ViZm9sZGVyIDNcbiAqICAgICAtIEZpbGUgOVxuICogICAgIC0gRmlsZSAxMFxuICogYGBgXG4gKlxuICogQG1lbWJlcm9mIE1vbnN0ZXIuRGF0YVxuICpcbiAqIEBwYXJhbSB7Kn0gc3ViamVjdCAtIFRoZSBvYmplY3Qgb3IgYXJyYXkgdG8gYnVpbGQgdGhlIHRyZWUgZnJvbS5cbiAqIEBwYXJhbSB7c3RyaW5nfE1vbnN0ZXIuRGF0YX5leGFtcGxlU2VsZWN0b3JDYWxsYmFja30gc2VsZWN0b3IgLSBFaXRoZXIgYSBzdHJpbmcgdG8gc3BlY2lmeSBhIHByb3BlcnR5IG9mIGVhY2ggb2JqZWN0IHRvIHVzZSBhcyBhIHNlbGVjdG9yLCBvciBhIHNlbGVjdG9yIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGEgbWFwIG9mIG9iamVjdHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gaWRLZXkgLSBUaGUgcHJvcGVydHkga2V5IHRvIHVzZSBhcyB0aGUgdW5pcXVlIElEIG9mIGVhY2ggbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXJlbnRJREtleSAtIFRoZSBwcm9wZXJ0eSBrZXkgdG8gdXNlIGFzIHRoZSBwYXJlbnQgSUQgb2YgZWFjaCBub2RlLlxuICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXSAtIEFkZGl0aW9uYWwgb3B0aW9ucyB0byBtb2RpZnkgdGhlIGZ1bmN0aW9uIGJlaGF2aW9yLlxuICogQHBhcmFtIHtBcnJheTwqPn0gW29wdGlvbnMucm9vdFJlZmVyZW5jZXM9W251bGwsIHVuZGVmaW5lZF1dIC0gQW4gYXJyYXkgb2YgdmFsdWVzIHRvIHRyZWF0IGFzIHJvb3QgcmVmZXJlbmNlcyB3aGVuIGNyZWF0aW5nIHRoZSB0cmVlLlxuICogQHBhcmFtIHtmdW5jdGlvbn0gW29wdGlvbnMuZmlsdGVyXSAtIEEgZmlsdGVyIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggbm9kZS5cbiAqXG4gKiBAcmV0dXJuIHsqfSBUaGUgcmVzdWx0aW5nIHRyZWUgc3RydWN0dXJlIGFzIGEgTm9kZUxpc3QuXG4gKlxuICogQHRocm93cyB7VHlwZUVycm9yfSBzZWxlY3RvciBpcyBuZWl0aGVyIGEgc3RyaW5nIG5vciBhIGZ1bmN0aW9uLlxuICogQHRocm93cyB7VHlwZUVycm9yfSB0aGUgc2VsZWN0b3IgY2FsbGJhY2sgbXVzdCByZXR1cm4gYSBtYXAuXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhlIG9iamVjdCBoYXMgbm8gdmFsdWUgZm9yIHRoZSBzcGVjaWZpZWQgaWQuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKlxuICogQHNpbmNlIDEuMjYuMFxuICovXG5mdW5jdGlvbiBidWlsZFRyZWUoc3ViamVjdCwgc2VsZWN0b3IsIGlkS2V5LCBwYXJlbnRJREtleSwgb3B0aW9ucykge1xuXHRjb25zdCBub2RlcyA9IG5ldyBNYXAoKTtcblxuXHRjb25zdCBtYXhEZXB0aCA9IDEwMDtcblxuXHRpZiAoIWlzT2JqZWN0KG9wdGlvbnMpKSB7XG5cdFx0b3B0aW9ucyA9IHt9O1xuXHR9XG5cblx0b3B0aW9ucyA9IGV4dGVuZChcblx0XHR7fSxcblx0XHR7XG5cdFx0XHRyb290UmVmZXJlbmNlczogW251bGwsIHVuZGVmaW5lZF0sXG5cdFx0XHRmaWx0ZXI6IHVuZGVmaW5lZCxcblx0XHR9LFxuXHRcdG9wdGlvbnMsXG5cdCk7XG5cblx0Y29uc3QgZmlsdGVyID0gb3B0aW9ucz8uZmlsdGVyO1xuXHRsZXQgcm9vdFJlZmVyZW5jZXMgPSBvcHRpb25zLnJvb3RSZWZlcmVuY2VzO1xuXHRpZiAoIWlzQXJyYXkocm9vdFJlZmVyZW5jZXMpKSB7XG5cdFx0cm9vdFJlZmVyZW5jZXMgPSBbcm9vdFJlZmVyZW5jZXNdO1xuXHR9XG5cblx0Y29uc3QgY2hpbGRNYXAgPSBhc3NlbWJsZVBhcnRzKHN1YmplY3QsIHNlbGVjdG9yLCBmaWx0ZXIsIGZ1bmN0aW9uIChvLCBrLCBtKSB7XG5cdFx0Y29uc3Qga2V5ID0gbz8uW2lkS2V5XTtcblx0XHRsZXQgcmVmID0gbz8uW3BhcmVudElES2V5XTtcblx0XHRpZiAocm9vdFJlZmVyZW5jZXMuaW5kZXhPZihyZWYpICE9PSAtMSkgcmVmID0gcm9vdFN5bWJvbDtcblxuXHRcdGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIG9iamVjdCBoYXMgbm8gdmFsdWUgZm9yIHRoZSBzcGVjaWZpZWQgaWRcIik7XG5cdFx0fVxuXG5cdFx0b1twYXJlbnRTeW1ib2xdID0gcmVmO1xuXG5cdFx0Y29uc3Qgbm9kZSA9IG5ldyBOb2RlKG8pO1xuXHRcdHRoaXMuaGFzKHJlZilcblx0XHRcdD8gdGhpcy5nZXQocmVmKS5hZGQobm9kZSlcblx0XHRcdDogdGhpcy5zZXQocmVmLCBuZXcgTm9kZUxpc3QoKS5hZGQobm9kZSkpO1xuXHRcdG5vZGVzLnNldChrZXksIG5vZGUpO1xuXHR9KTtcblxuXHRub2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG5cdFx0Y29uc3QgaWQgPSBub2RlPy5bXCJ2YWx1ZVwiXT8uW2lkS2V5XTtcblxuXHRcdGlmIChpZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgb2JqZWN0IGhhcyBubyB2YWx1ZSBmb3IgdGhlIHNwZWNpZmllZCBpZFwiKTtcblx0XHR9XG5cblx0XHRpZiAoY2hpbGRNYXAuaGFzKGlkKSkge1xuXHRcdFx0bm9kZS5jaGlsZE5vZGVzID0gY2hpbGRNYXAuZ2V0KGlkKTtcblx0XHRcdGNoaWxkTWFwLmRlbGV0ZShpZCk7XG5cdFx0fVxuXHR9KTtcblxuXHRjb25zdCBsaXN0ID0gbmV3IE5vZGVMaXN0KCk7XG5cblx0Y2hpbGRNYXAuZm9yRWFjaCgocykgPT4ge1xuXHRcdGlmIChzIGluc3RhbmNlb2YgU2V0KSB7XG5cdFx0XHRzLmZvckVhY2goKG4pID0+IHtcblx0XHRcdFx0bGlzdC5hZGQobik7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xuXG5cdHJldHVybiBsaXN0O1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBpc0luc3RhbmNlIH0gZnJvbSBcIi4vaXMubWpzXCI7XG5pbXBvcnQgeyBOb2RlIH0gZnJvbSBcIi4vbm9kZS5tanNcIjtcbmltcG9ydCB7IE5vZGVMaXN0IH0gZnJvbSBcIi4vbm9kZWxpc3QubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlIH0gZnJvbSBcIi4vdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IE5vZGVSZWN1cnNpdmVJdGVyYXRvciB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpc05vZGVMaXN0U3ltYm9sID0gU3ltYm9sKFwiaXNOb2RlTGlzdFwiKTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgcmVjdXJzaXZlIGl0ZXJhdG9yIGZvciB0cmF2ZXJzaW5nIG5vZGVzIGluIGEgRE9NIHRyZWUuXG4gKlxuICogQHNpbmNlIDEuMjYuMFxuICogQHN1bW1hcnkgQW4gaXRlcmF0b3IgdG8gcnVuIHJlY3Vyc2l2ZWx5IHRocm91Z2ggYSB0cmVlIG9mIG5vZGVzXG4gKiBAZXh0ZW5kcyBCYXNlXG4gKi9cbmNsYXNzIE5vZGVSZWN1cnNpdmVJdGVyYXRvciBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICogQHBhcmFtIG5vZGVcblx0ICovXG5cdGNvbnN0cnVjdG9yKG5vZGUpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpc1tpc05vZGVMaXN0U3ltYm9sXSA9IGZhbHNlO1xuXG5cdFx0Ly8gaXRlcmF0b3IgaXMgYSBOb2RlTGlzdFxuXHRcdGlmIChpc0luc3RhbmNlKG5vZGUsIE5vZGVMaXN0KSkge1xuXHRcdFx0Y29uc3QgY2hpbGRyZW4gPSBub2RlO1xuXHRcdFx0Y29uc3QgbiA9IG5ldyBOb2RlKCk7XG5cdFx0XHRuLmNoaWxkTm9kZXMgPSBjaGlsZHJlbjtcblx0XHRcdHRoaXNbaXNOb2RlTGlzdFN5bWJvbF0gPSB0cnVlO1xuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSBuO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0gdmFsaWRhdGVJbnN0YW5jZShub2RlLCBOb2RlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL09wZXJhdG9ycy95aWVsZFxuXHQgKi9cblx0W1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiogKCkge1xuXHRcdC8qKlxuXHRcdCAqIFRoZSBlbmQgb2YgdGhlIGdlbmVyYXRvciBmdW5jdGlvbiBpcyByZWFjaGVkLiBJbiB0aGlzIGNhc2UsIGV4ZWN1dGlvbiBvZiB0aGUgZ2VuZXJhdG9yXG5cdFx0ICogZW5kcyBhbmQgYW4gSXRlcmF0b3JSZXN1bHQgaXMgcmV0dXJuZWQgdG8gdGhlIGNhbGxlciBpbiB3aGljaCB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkIGFuZCBkb25lIGlzIHRydWUuXG5cdFx0ICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9PcGVyYXRvcnMveWllbGRcblx0XHQgKi9cblx0XHRpZiAodGhpc1tpbnRlcm5hbFN5bWJvbF0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIGl0ZXJhdG9yIGlzIGEgbm9kZWxpc3QgYW5kIHRoZSBtYWluIG5vZGUgaXMgb25seSBhIHBsYWNlaG9sZGVyXG5cdFx0aWYgKHRoaXNbaXNOb2RlTGlzdFN5bWJvbF0gIT09IHRydWUpIHtcblx0XHRcdHlpZWxkIHRoaXNbaW50ZXJuYWxTeW1ib2xdO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzW2ludGVybmFsU3ltYm9sXS5oYXNDaGlsZE5vZGVzKCkpIHtcblx0XHRcdGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzW2ludGVybmFsU3ltYm9sXS5jaGlsZE5vZGVzO1xuXG5cdFx0XHRmb3IgKGNvbnN0IG5vZGUgb2YgY2hpbGROb2Rlcykge1xuXHRcdFx0XHR5aWVsZCogbmV3IE5vZGVSZWN1cnNpdmVJdGVyYXRvcihub2RlKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG5cdCAqIEByZXR1cm4ge05vZGVSZWN1cnNpdmVJdGVyYXRvcn1cblx0ICovXG5cdGZvckVhY2goY2FsbGJhY2spIHtcblx0XHRmb3IgKGNvbnN0IG5vZGUgb2YgdGhpcykge1xuXHRcdFx0Y2FsbGJhY2sobm9kZSk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCAyMDI0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqL1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgVHJlZVNlbGVjdFN0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IFRyZWVTZWxlY3RTdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcblx0VHJlZVNlbGVjdFN0eWxlU2hlZXQuaW5zZXJ0UnVsZShcblx0XHRgXG5AbGF5ZXIgdHJlZXNlbGVjdCB7IFxuW2RhdGEtbW9uc3Rlci1yb2xlPWJhZGdlXXtkaXNwbGF5OmlubGluZS1mbGV4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25de2Rpc3BsYXk6ZmxleH1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXVtkYXRhLW1vbnN0ZXItc3RhdGU9b3Blbl1bZGF0YS1tb25zdGVyLWhhcy1jaGlsZHJlbj10cnVlXSBbZGF0YS1tb25zdGVyLXJvbGU9Zm9sZGVyLWhhbmRsZXJde2NvbnRlbnQ6dXJsKCdkYXRhOmltYWdlL3N2Zyt4bWw7IHV0ZjgsIDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB3aWR0aD1cXFwiMTZcXFwiIGhlaWdodD1cXFwiMTZcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIj48cGF0aCBkPVxcXCJNMi41IDBjLS4xNjYgMC0uMzMuMDE2LS40ODcuMDQ4bC4xOTQuOThBMS41MSAxLjUxIDAgMCAxIDIuNSAxaC40NThWMEgyLjV6bTIuMjkyIDBoLS45MTd2MWguOTE3VjB6bTEuODMzIDBoLS45MTd2MWguOTE3VjB6bTEuODMzIDBoLS45MTZ2MWguOTE2VjB6bTEuODM0IDBoLS45MTd2MWguOTE3VjB6bTEuODMzIDBoLS45MTd2MWguOTE3VjB6TTEzLjUgMGgtLjQ1OHYxaC40NThjLjEgMCAuMTk5LjAxLjI5My4wMjlsLjE5NC0uOTgxQTIuNTEgMi41MSAwIDAgMCAxMy41IDB6bTIuMDc5IDEuMTFhMi41MTEgMi41MTEgMCAwIDAtLjY5LS42ODlsLS41NTYuODMxYy4xNjQuMTEuMzA1LjI1MS40MTUuNDE1bC44My0uNTU2ek0xLjExLjQyMWEyLjUxMSAyLjUxMSAwIDAgMC0uNjg5LjY5bC44MzEuNTU2Yy4xMS0uMTY0LjI1MS0uMzA1LjQxNS0uNDE1TDEuMTEuNDIyek0xNiAyLjVjMC0uMTY2LS4wMTYtLjMzLS4wNDgtLjQ4N2wtLjk4LjE5NGMuMDE4LjA5NC4wMjguMTkyLjAyOC4yOTN2LjQ1OGgxVjIuNXpNLjA0OCAyLjAxM0EyLjUxIDIuNTEgMCAwIDAgMCAyLjV2LjQ1OGgxVjIuNWMwLS4xLjAxLS4xOTkuMDI5LS4yOTNsLS45ODEtLjE5NHpNMCAzLjg3NXYuOTE3aDF2LS45MTdIMHptMTYgLjkxN3YtLjkxN2gtMXYuOTE3aDF6TTAgNS43MDh2LjkxN2gxdi0uOTE3SDB6bTE2IC45MTd2LS45MTdoLTF2LjkxN2gxek0wIDcuNTQydi45MTZoMXYtLjkxNkgwem0xNSAuOTE2aDF2LS45MTZoLTF2LjkxNnpNMCA5LjM3NXYuOTE3aDF2LS45MTdIMHptMTYgLjkxN3YtLjkxN2gtMXYuOTE3aDF6bS0xNiAuOTE2di45MTdoMXYtLjkxN0gwem0xNiAuOTE3di0uOTE3aC0xdi45MTdoMXptLTE2IC45MTd2LjQ1OGMwIC4xNjYuMDE2LjMzLjA0OC40ODdsLjk4LS4xOTRBMS41MSAxLjUxIDAgMCAxIDEgMTMuNXYtLjQ1OEgwem0xNiAuNDU4di0uNDU4aC0xdi40NThjMCAuMS0uMDEuMTk5LS4wMjkuMjkzbC45ODEuMTk0Yy4wMzItLjE1OC4wNDgtLjMyLjA0OC0uNDg3ek0uNDIxIDE0Ljg5Yy4xODMuMjcyLjQxNy41MDYuNjkuNjg5bC41NTYtLjgzMWExLjUxIDEuNTEgMCAwIDEtLjQxNS0uNDE1bC0uODMuNTU2em0xNC40NjkuNjg5Yy4yNzItLjE4My41MDYtLjQxNy42ODktLjY5bC0uODMxLS41NTZjLS4xMS4xNjQtLjI1MS4zMDUtLjQxNS40MTVsLjU1Ni44M3ptLTEyLjg3Ny4zNzNjLjE1OC4wMzIuMzIuMDQ4LjQ4Ny4wNDhoLjQ1OHYtMUgyLjVjLS4xIDAtLjE5OS0uMDEtLjI5My0uMDI5bC0uMTk0Ljk4MXpNMTMuNSAxNmMuMTY2IDAgLjMzLS4wMTYuNDg3LS4wNDhsLS4xOTQtLjk4QTEuNTEgMS41MSAwIDAgMSAxMy41IDE1aC0uNDU4djFoLjQ1OHptLTkuNjI1IDBoLjkxN3YtMWgtLjkxN3Yxem0xLjgzMyAwaC45MTd2LTFoLS45MTd2MXptMS44MzQgMGguOTE2di0xaC0uOTE2djF6bTEuODMzIDBoLjkxN3YtMWgtLjkxN3Yxem0xLjgzMyAwaC45MTd2LTFoLS45MTd2MXpNNC41IDcuNWEuNS41IDAgMCAwIDAgMWg3YS41LjUgMCAwIDAgMC0xaC03elxcXCIvPjwvc3ZnPicpO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEzcHg7bWFyZ2luLXJpZ2h0OjhweDt3aWR0aDoxM3B4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci1zdGF0ZT1jbG9zZV1bZGF0YS1tb25zdGVyLWhhcy1jaGlsZHJlbj10cnVlXSBbZGF0YS1tb25zdGVyLXJvbGU9Zm9sZGVyLWhhbmRsZXJde2NvbnRlbnQ6dXJsKCdkYXRhOmltYWdlL3N2Zyt4bWw7IHV0ZjgsIDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB3aWR0aD1cXFwiMTZcXFwiIGhlaWdodD1cXFwiMTZcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIj48cGF0aCBkPVxcXCJNMi41IDBjLS4xNjYgMC0uMzMuMDE2LS40ODcuMDQ4bC4xOTQuOThBMS41MSAxLjUxIDAgMCAxIDIuNSAxaC40NThWMEgyLjV6bTIuMjkyIDBoLS45MTd2MWguOTE3VjB6bTEuODMzIDBoLS45MTd2MWguOTE3VjB6bTEuODMzIDBoLS45MTZ2MWguOTE2VjB6bTEuODM0IDBoLS45MTd2MWguOTE3VjB6bTEuODMzIDBoLS45MTd2MWguOTE3VjB6TTEzLjUgMGgtLjQ1OHYxaC40NThjLjEgMCAuMTk5LjAxLjI5My4wMjlsLjE5NC0uOTgxQTIuNTEgMi41MSAwIDAgMCAxMy41IDB6bTIuMDc5IDEuMTFhMi41MTEgMi41MTEgMCAwIDAtLjY5LS42ODlsLS41NTYuODMxYy4xNjQuMTEuMzA1LjI1MS40MTUuNDE1bC44My0uNTU2ek0xLjExLjQyMWEyLjUxMSAyLjUxMSAwIDAgMC0uNjg5LjY5bC44MzEuNTU2Yy4xMS0uMTY0LjI1MS0uMzA1LjQxNS0uNDE1TDEuMTEuNDIyek0xNiAyLjVjMC0uMTY2LS4wMTYtLjMzLS4wNDgtLjQ4N2wtLjk4LjE5NGMuMDE4LjA5NC4wMjguMTkyLjAyOC4yOTN2LjQ1OGgxVjIuNXpNLjA0OCAyLjAxM0EyLjUxIDIuNTEgMCAwIDAgMCAyLjV2LjQ1OGgxVjIuNWMwLS4xLjAxLS4xOTkuMDI5LS4yOTNsLS45ODEtLjE5NHpNMCAzLjg3NXYuOTE3aDF2LS45MTdIMHptMTYgLjkxN3YtLjkxN2gtMXYuOTE3aDF6TTAgNS43MDh2LjkxN2gxdi0uOTE3SDB6bTE2IC45MTd2LS45MTdoLTF2LjkxN2gxek0wIDcuNTQydi45MTZoMXYtLjkxNkgwem0xNSAuOTE2aDF2LS45MTZoLTF2LjkxNnpNMCA5LjM3NXYuOTE3aDF2LS45MTdIMHptMTYgLjkxN3YtLjkxN2gtMXYuOTE3aDF6bS0xNiAuOTE2di45MTdoMXYtLjkxN0gwem0xNiAuOTE3di0uOTE3aC0xdi45MTdoMXptLTE2IC45MTd2LjQ1OGMwIC4xNjYuMDE2LjMzLjA0OC40ODdsLjk4LS4xOTRBMS41MSAxLjUxIDAgMCAxIDEgMTMuNXYtLjQ1OEgwem0xNiAuNDU4di0uNDU4aC0xdi40NThjMCAuMS0uMDEuMTk5LS4wMjkuMjkzbC45ODEuMTk0Yy4wMzItLjE1OC4wNDgtLjMyLjA0OC0uNDg3ek0uNDIxIDE0Ljg5Yy4xODMuMjcyLjQxNy41MDYuNjkuNjg5bC41NTYtLjgzMWExLjUxIDEuNTEgMCAwIDEtLjQxNS0uNDE1bC0uODMuNTU2em0xNC40NjkuNjg5Yy4yNzItLjE4My41MDYtLjQxNy42ODktLjY5bC0uODMxLS41NTZjLS4xMS4xNjQtLjI1MS4zMDUtLjQxNS40MTVsLjU1Ni44M3ptLTEyLjg3Ny4zNzNjLjE1OC4wMzIuMzIuMDQ4LjQ4Ny4wNDhoLjQ1OHYtMUgyLjVjLS4xIDAtLjE5OS0uMDEtLjI5My0uMDI5bC0uMTk0Ljk4MXpNMTMuNSAxNmMuMTY2IDAgLjMzLS4wMTYuNDg3LS4wNDhsLS4xOTQtLjk4QTEuNTEgMS41MSAwIDAgMSAxMy41IDE1aC0uNDU4djFoLjQ1OHptLTkuNjI1IDBoLjkxN3YtMWgtLjkxN3Yxem0xLjgzMyAwaC45MTd2LTFoLS45MTd2MXptMS44MzQtMXYxaC45MTZ2LTFoLS45MTZ6bTEuODMzIDFoLjkxN3YtMWgtLjkxN3Yxem0xLjgzMyAwaC45MTd2LTFoLS45MTd2MXpNOC41IDQuNWEuNS41IDAgMCAwLTEgMHYzaC0zYS41LjUgMCAwIDAgMCAxaDN2M2EuNS41IDAgMCAwIDEgMHYtM2gzYS41LjUgMCAwIDAgMC0xaC0zdi0zelxcXCIvPjwvc3ZnPicpO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEzcHg7bWFyZ2luLXJpZ2h0OjhweDt3aWR0aDoxM3B4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci12aXNpYmlsaXR5PWhpZGRlbl17ZGlzcGxheTpub25lfVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci12aXNpYmlsaXR5PXZpc2libGVde2Rpc3BsYXk6ZmxleH1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXVtkYXRhLW1vbnN0ZXItaGFzLWNoaWxkcmVuPWZhbHNlXSBbZGF0YS1tb25zdGVyLXJvbGU9Zm9sZGVyLWhhbmRsZXJde2NvbnRlbnQ6XFxcIiBcXFwiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEzcHg7bWFyZ2luLXJpZ2h0OjhweDt3aWR0aDoxM3B4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci1pbnRlbmQ9XFxcIjBcXFwiXXtkaXNwbGF5OmZsZXg7bWFyZ2luOjB9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLWludGVuZD1cXFwiMVxcXCJde21hcmdpbjowIDAgMCAyMHB4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci1pbnRlbmQ9XFxcIjJcXFwiXXttYXJnaW46MCAwIDAgNDBweH1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXVtkYXRhLW1vbnN0ZXItaW50ZW5kPVxcXCIzXFxcIl17bWFyZ2luOjAgMCAwIDYwcHh9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLWludGVuZD1cXFwiNFxcXCJde21hcmdpbjowIDAgMCA4MHB4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci1pbnRlbmQ9XFxcIjVcXFwiXXttYXJnaW46MCAwIDAgMTAwcHh9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLWludGVuZD1cXFwiNlxcXCJde21hcmdpbjowIDAgMCAxMTBweH1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXVtkYXRhLW1vbnN0ZXItaW50ZW5kPVxcXCI3XFxcIl17bWFyZ2luOjAgMCAwIDEyMHB4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci1pbnRlbmQ9XFxcIjhcXFwiXXttYXJnaW46MCAwIDAgMTMwcHh9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLWZpbHRlcmVkPXRydWVde2Rpc3BsYXk6bm9uZX0gXG59YCxcblx0XHQwLFxuXHQpO1xufSBjYXRjaCAoZSkge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpLFxuXHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0ZSArIFwiXCIsXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgYnVpbGRUcmVlIH0gZnJvbSBcIi4uLy4uL2RhdGEvYnVpbGR0cmVlLm1qc1wiO1xuaW1wb3J0IHsgZmluZENsb3Nlc3RCeUF0dHJpYnV0ZSB9IGZyb20gXCIuLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7XG5cdEFUVFJJQlVURV9ST0xFLFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9JTlNFUlRfUkVGRVJFTkNFLFxufSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7XG5cdGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50LFxuXHRmaXJlQ3VzdG9tRXZlbnQsXG5cdGZpcmVFdmVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5pbXBvcnQgeyBGb3JtYXR0ZXIgfSBmcm9tIFwiLi4vLi4vdGV4dC9mb3JtYXR0ZXIubWpzXCI7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IE5vZGUgfSBmcm9tIFwiLi4vLi4vdHlwZXMvbm9kZS5tanNcIjtcbmltcG9ydCB7IE5vZGVSZWN1cnNpdmVJdGVyYXRvciB9IGZyb20gXCIuLi8uLi90eXBlcy9ub2RlcmVjdXJzaXZlaXRlcmF0b3IubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0ZPUk1fVVJMLCBBVFRSSUJVVEVfSU5URU5EIH0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgU2VsZWN0IH0gZnJvbSBcIi4vc2VsZWN0Lm1qc1wiO1xuaW1wb3J0IHsgU2VsZWN0U3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvc2VsZWN0Lm1qc1wiO1xuaW1wb3J0IHsgVHJlZVNlbGVjdFN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L3RyZWUtc2VsZWN0Lm1qc1wiO1xuXG5leHBvcnQgeyBUcmVlU2VsZWN0LCBmb3JtYXRIaWVyYXJjaGljYWxTZWxlY3Rpb24gfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgaW50ZXJuYWxOb2Rlc1N5bWJvbCA9IFN5bWJvbChcImludGVybmFsTm9kZXNcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGtleUV2ZW50SGFuZGxlciA9IFN5bWJvbChcImtleUV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBBIHRyZWUgc2VsZWN0IGNvbnRyb2wgaXMgYSBzZWxlY3QgY29udHJvbCB0aGF0IGNhbiBiZSB1c2VkIHRvIHNlbGVjdCBhIHZhbHVlIGZyb20gYSB0cmVlIHN0cnVjdHVyZS5cbiAqXG4gKiBAZnJhZ21lbnRzIC9mcmFnbWVudHMvY29tcG9uZW50cy9mb3JtL3RyZWUtc2VsZWN0XG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvZm9ybS90cmVlLXNlbGVjdFxuICpcbiAqIEBzaW5jZSAxLjkuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgYmVhdXRpZnVsIHRyZWUgc2VsZWN0IGNvbnRyb2wgd2l0aCBhIGxvdCBvZiBvcHRpb25zXG4gKiBAZmlyZXMgbW9uc3Rlci1vcHRpb25zLXNldFxuICogQGZpcmVzIG1vbnN0ZXItc2VsZWN0ZWRcbiAqIEBmaXJlcyBtb25zdGVyLWNoYW5nZVxuICogQGZpcmVzIG1vbnN0ZXItY2hhbmdlZFxuICovXG5jbGFzcyBUcmVlU2VsZWN0IGV4dGVuZHMgU2VsZWN0IHtcblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2Zvcm0vdHJlZS1zZWxlY3RAQGluc3RhbmNlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIEhUTUwgdGFnLCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQGV4dGVuZHMgU2VsZWN0XG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBtYXBwaW5nLnJvb3RSZWZlcmVuY2VzPVsnMCcsIHVuZGVmaW5lZCwgbnVsbF1cblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IG1hcHBpbmcuaWRUZW1wbGF0ZT1pZFxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gbWFwcGluZy5wYXJlbnRUZW1wbGF0ZT1wYXJlbnRcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IG1hcHBpbmcuc2VsZWN0aW9uXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmb3JtYXR0ZXJcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZvcm1hdHRlci5zZXBhcmF0b3I9XCIgLyBcIlxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKFxuXHRcdFx0e30sXG5cdFx0XHRzdXBlci5kZWZhdWx0cyxcblx0XHRcdHtcblx0XHRcdFx0bWFwcGluZzoge1xuXHRcdFx0XHRcdHJvb3RSZWZlcmVuY2VzOiBbXCIwXCIsIHVuZGVmaW5lZCwgbnVsbF0sXG5cdFx0XHRcdFx0aWRUZW1wbGF0ZTogXCJpZFwiLFxuXHRcdFx0XHRcdHBhcmVudFRlbXBsYXRlOiBcInBhcmVudFwiLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRmb3JtYXR0ZXI6IHtcblx0XHRcdFx0XHRzZWxlY3Rpb246IGZvcm1hdEhpZXJhcmNoaWNhbFNlbGVjdGlvbixcblx0XHRcdFx0XHRzZXBhcmF0b3I6IFwiIC8gXCIsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdFx0aW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzLmNhbGwodGhpcyksXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItdHJlZS1zZWxlY3RcIjtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtDU1NTdHlsZVNoZWV0W119XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW1NlbGVjdFN0eWxlU2hlZXQsIFRyZWVTZWxlY3RTdHlsZVNoZWV0XTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbXBvcnQgU2VsZWN0IE9wdGlvbnMgZnJvbSBkYXRhc2V0XG5cdCAqIE5vdCB0byBiZSBjb25mdXNlZCB3aXRoIHRoZSBjb250cm9sIGRlZmF1bHRzL29wdGlvbnNcblx0ICpcblx0ICogQHBhcmFtIHthcnJheXxvYmplY3R8TWFwfFNldH0gZGF0YVxuXHQgKiBAcmV0dXJuIHtTZWxlY3R9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBtYXAgaXMgbm90IGl0ZXJhYmxlXG5cdCAqL1xuXHRpbXBvcnRPcHRpb25zKGRhdGEpIHtcblx0XHR0aGlzW2ludGVybmFsTm9kZXNTeW1ib2xdID0gbmV3IE1hcCgpO1xuXG5cdFx0Y29uc3QgbWFwcGluZ09wdGlvbnMgPSB0aGlzLmdldE9wdGlvbihcIm1hcHBpbmdcIiwge30pO1xuXG5cdFx0Y29uc3QgZmlsdGVyID0gbWFwcGluZ09wdGlvbnM/LltcImZpbHRlclwiXTtcblx0XHRjb25zdCByb290UmVmZXJlbmNlcyA9IG1hcHBpbmdPcHRpb25zPy5bXCJyb290UmVmZXJlbmNlc1wiXTtcblxuXHRcdGNvbnN0IGlkID0gdGhpcy5nZXRPcHRpb24oXCJtYXBwaW5nLmlkVGVtcGxhdGVcIiwgXCJpZFwiKTtcblx0XHRjb25zdCBwYXJlbnRJRCA9IHRoaXMuZ2V0T3B0aW9uKFwibWFwcGluZy5wYXJlbnRUZW1wbGF0ZVwiLCBcInBhcmVudFwiKTtcblxuXHRcdGNvbnN0IHNlbGVjdG9yID0gbWFwcGluZ09wdGlvbnM/LltcInNlbGVjdG9yXCJdO1xuXG5cdFx0Y29uc3Qgbm9kZXMgPSBidWlsZFRyZWUoZGF0YSwgc2VsZWN0b3IsIGlkLCBwYXJlbnRJRCwge1xuXHRcdFx0ZmlsdGVyLFxuXHRcdFx0cm9vdFJlZmVyZW5jZXMsXG5cdFx0fSk7XG5cblx0XHRjb25zdCBvcHRpb25zID0gW107XG5cdFx0Zm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG5cdFx0XHRjb25zdCBpdGVyYXRvciA9IG5ldyBOb2RlUmVjdXJzaXZlSXRlcmF0b3Iobm9kZSk7XG5cdFx0XHRmb3IgKGNvbnN0IG4gb2YgaXRlcmF0b3IpIHtcblx0XHRcdFx0Y29uc3QgZm9ybWF0dGVkVmFsdWVzID0gZm9ybWF0S2V5TGFiZWwuY2FsbCh0aGlzLCBuKTtcblxuXHRcdFx0XHRjb25zdCBsYWJlbCA9IGZvcm1hdHRlZFZhbHVlcy5sYWJlbDtcblx0XHRcdFx0Y29uc3QgdmFsdWUgPSBmb3JtYXR0ZWRWYWx1ZXMudmFsdWU7XG5cdFx0XHRcdGNvbnN0IGludGVuZCA9IG4ubGV2ZWw7XG5cblx0XHRcdFx0Y29uc3QgdmlzaWJpbGl0eSA9IGludGVuZCA+IDAgPyBcImhpZGRlblwiIDogXCJ2aXNpYmxlXCI7XG5cdFx0XHRcdGNvbnN0IHN0YXRlID0gXCJjbG9zZVwiO1xuXG5cdFx0XHRcdHRoaXNbaW50ZXJuYWxOb2Rlc1N5bWJvbF0uc2V0KHZhbHVlLCBuKTtcblxuXHRcdFx0XHRvcHRpb25zLnB1c2goe1xuXHRcdFx0XHRcdHZhbHVlLFxuXHRcdFx0XHRcdGxhYmVsLFxuXHRcdFx0XHRcdGludGVuZCxcblx0XHRcdFx0XHRzdGF0ZSxcblx0XHRcdFx0XHR2aXNpYmlsaXR5LFxuXHRcdFx0XHRcdFtcImhhcy1jaGlsZHJlblwiXTogbi5oYXNDaGlsZE5vZGVzKCksXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMuc2V0T3B0aW9uKFwib3B0aW9uc1wiLCBvcHRpb25zKTtcblxuXHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItb3B0aW9ucy1zZXRcIiwge1xuXHRcdFx0b3B0aW9ucyxcblx0XHR9KTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlNlbGVjdH1cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cdFx0aW5pdEV2ZW50SGFuZGxlci5jYWxsKHRoaXMpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBldmVudFxuICovXG5mdW5jdGlvbiBoYW5kbGVPcHRpb25LZXlib2FyZEV2ZW50cyhldmVudCkge1xuXHRzd2l0Y2ggKGV2ZW50Py5bXCJjb2RlXCJdKSB7XG5cdFx0Y2FzZSBcIkFycm93TGVmdFwiOlxuXHRcdFx0Y2xvc2VPck9wZW5DdXJyZW50T3B0aW9uLmNhbGwodGhpcywgZXZlbnQsIFwiY2xvc2VcIik7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkFycm93UmlnaHRcIjpcblx0XHRcdGNsb3NlT3JPcGVuQ3VycmVudE9wdGlvbi5jYWxsKHRoaXMsIGV2ZW50LCBcIm9wZW5cIik7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0YnJlYWs7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtldmVudH0gZXZlbnRcbiAqL1xuZnVuY3Rpb24gY2xvc2VPck9wZW5DdXJyZW50T3B0aW9uKGV2ZW50LCBtb2RlKSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZXZlbnQsIEV2ZW50KTtcblxuXHRpZiAodHlwZW9mIGV2ZW50LmNvbXBvc2VkUGF0aCAhPT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgZXZlbnRcIik7XG5cdH1cblxuXHRjb25zdCBwYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG5cdGNvbnN0IG9wdGlvbk5vZGUgPSBwYXRoLnNoaWZ0KCk7XG5cblx0Y29uc3Qgc3RhdGUgPSBvcHRpb25Ob2RlLmdldEF0dHJpYnV0ZShcImRhdGEtbW9uc3Rlci1zdGF0ZVwiKTtcblx0aWYgKHN0YXRlICE9PSBtb2RlKSB7XG5cdFx0Y29uc3QgaGFuZGxlciA9IG9wdGlvbk5vZGUucXVlcnlTZWxlY3Rvcihcblx0XHRcdFwiW2RhdGEtbW9uc3Rlci1yb2xlPWZvbGRlci1oYW5kbGVyXVwiLFxuXHRcdCk7XG5cdFx0aWYgKGhhbmRsZXIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0ZmlyZUV2ZW50KGhhbmRsZXIsIFwiY2xpY2tcIik7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICogQHJldHVybiB7YXJyYXk8bGFiZWwsIHZhbHVlPn1cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGZvcm1hdEtleUxhYmVsKG5vZGUpIHtcblx0dmFsaWRhdGVJbnN0YW5jZShub2RlLCBOb2RlKTtcblxuXHRjb25zdCBsYWJlbCA9IG5ldyBGb3JtYXR0ZXIobm9kZS52YWx1ZSkuZm9ybWF0KFxuXHRcdHRoaXMuZ2V0T3B0aW9uKFwibWFwcGluZy5sYWJlbFRlbXBsYXRlXCIsIFwiXCIpLFxuXHQpO1xuXHRjb25zdCB2YWx1ZSA9IG5ldyBGb3JtYXR0ZXIobm9kZS52YWx1ZSkuZm9ybWF0KFxuXHRcdHRoaXMuZ2V0T3B0aW9uKFwibWFwcGluZy52YWx1ZVRlbXBsYXRlXCIsIFwiXCIpLFxuXHQpO1xuXG5cdHJldHVybiB7XG5cdFx0dmFsdWUsXG5cdFx0bGFiZWwsXG5cdH07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7QXJyYXl9XG4gKi9cbmZ1bmN0aW9uIGJ1aWxkVHJlZUxhYmVscyh2YWx1ZSkge1xuXHRsZXQgbm9kZSA9IHRoaXNbaW50ZXJuYWxOb2Rlc1N5bWJvbF0uZ2V0KHZhbHVlKTtcblx0aWYgKG5vZGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdG5vZGUgPSB0aGlzW2ludGVybmFsTm9kZXNTeW1ib2xdLmdldChwYXJzZUludCh2YWx1ZSkpO1xuXHR9XG5cblx0Y29uc3QgcGFydHMgPSBbXTtcblxuXHRpZiAobm9kZSBpbnN0YW5jZW9mIE5vZGUpIHtcblx0XHRsZXQgcHRyID0gbm9kZTtcblx0XHR3aGlsZSAocHRyKSB7XG5cdFx0XHRjb25zdCBmb3JtYXR0ZWRWYWx1ZXMgPSBmb3JtYXRLZXlMYWJlbC5jYWxsKHRoaXMsIHB0cik7XG5cdFx0XHRwYXJ0cy51bnNoaWZ0KGZvcm1hdHRlZFZhbHVlcy5sYWJlbCk7XG5cdFx0XHRwdHIgPSBwdHIucGFyZW50O1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBwYXJ0cztcbn1cblxuLyoqXG4gKiBUaGlzIGZvcm1hdHRlciBjYW4gZm9ybWF0IGEgbGFiZWwgaGllcmFyY2hpY2FsbHkuXG4gKiBUaGUgb3B0aW9uIGBmb3JtYXR0ZXIuc2VwYXJhdG9yYCBkZXRlcm1pbmVzIHRoZSBzZXBhcmF0b3IuXG4gKlxuICogYGBgXG4gKiBhIC8gYiAvIGNcbiAqIGBgYFxuICpcbiAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHBhc3NlZCBhcyBhcmd1bWVudCBvZiB0aGUgb3B0aW9uIGBmb3JtYXR0ZXIuc2VsZWN0aW9uOmAuXG4gKlxuICogQHNpbmNlIDEuOS4wXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGZvcm1hdEhpZXJhcmNoaWNhbFNlbGVjdGlvbih2YWx1ZSkge1xuXHRyZXR1cm4gYnVpbGRUcmVlTGFiZWxzXG5cdFx0LmNhbGwodGhpcywgdmFsdWUpXG5cdFx0LmpvaW4odGhpcy5nZXRPcHRpb24oXCJmb3JtYXR0ZXIuc2VwYXJhdG9yXCIsIFwiIC8gXCIpKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgb3Blbk9wdGlvbkV2ZW50SGFuZGxlciA9IFN5bWJvbChcIm9wZW5PcHRpb25FdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudEhhbmRsZXIoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdHRoaXNbb3Blbk9wdGlvbkV2ZW50SGFuZGxlcl0gPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBlbGVtZW50ID0gZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoXG5cdFx0XHRldmVudCxcblx0XHRcdEFUVFJJQlVURV9ST0xFLFxuXHRcdFx0XCJmb2xkZXItaGFuZGxlclwiLFxuXHRcdCk7XG5cdFx0aWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGNvbnRhaW5lciA9IGZpbmRDbG9zZXN0QnlBdHRyaWJ1dGUoZWxlbWVudCwgQVRUUklCVVRFX1JPTEUsIFwib3B0aW9uXCIpO1xuXHRcdGNvbnN0IGluZGV4ID0gY29udGFpbmVyXG5cdFx0XHQuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9VUERBVEVSX0lOU0VSVF9SRUZFUkVOQ0UpXG5cdFx0XHQuc3BsaXQoXCItXCIpXG5cdFx0XHQucG9wKCk7XG5cblx0XHRjb25zdCBjdXJyZW50U3RhdGUgPSB0aGlzLmdldE9wdGlvbihgb3B0aW9ucy4ke2luZGV4fS5zdGF0ZWApO1xuXG5cdFx0Y29uc3QgbmV3U3RhdGUgPSBjdXJyZW50U3RhdGUgPT09IFwiY2xvc2VcIiA/IFwib3BlblwiIDogXCJjbG9zZVwiO1xuXHRcdHRoaXMuc2V0T3B0aW9uKGBvcHRpb25zLiR7aW5kZXh9LnN0YXRlYCwgbmV3U3RhdGUpO1xuXG5cdFx0Y29uc3QgbmV3VmlzaWJpbGl0eSA9IG5ld1N0YXRlID09PSBcIm9wZW5cIiA/IFwidmlzaWJsZVwiIDogXCJoaWRkZW5cIjtcblxuXHRcdGlmIChjb250YWluZXIuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9JTlRFTkQpKSB7XG5cdFx0XHRjb25zdCBpbnRlbmQgPSBjb250YWluZXIuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9JTlRFTkQpO1xuXG5cdFx0XHRsZXQgcmVmID0gY29udGFpbmVyLm5leHRFbGVtZW50U2libGluZztcblx0XHRcdGNvbnN0IGNoaWxkSW50ZW5kID0gcGFyc2VJbnQoaW50ZW5kKSArIDE7XG5cblx0XHRcdGNvbnN0IGNtcCA9IChhLCBiKSA9PiB7XG5cdFx0XHRcdGlmIChuZXdTdGF0ZSA9PT0gXCJvcGVuXCIpIHtcblx0XHRcdFx0XHRyZXR1cm4gYSA9PT0gYjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBhID49IGI7XG5cdFx0XHR9O1xuXG5cdFx0XHR3aGlsZSAoXG5cdFx0XHRcdHJlZj8uaGFzQXR0cmlidXRlKEFUVFJJQlVURV9JTlRFTkQpICYmXG5cdFx0XHRcdGNtcChwYXJzZUludChyZWYuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9JTlRFTkQpKSwgY2hpbGRJbnRlbmQpXG5cdFx0XHQpIHtcblx0XHRcdFx0Y29uc3QgcmVmSW5kZXggPSByZWZcblx0XHRcdFx0XHQuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9VUERBVEVSX0lOU0VSVF9SRUZFUkVOQ0UpXG5cdFx0XHRcdFx0LnNwbGl0KFwiLVwiKVxuXHRcdFx0XHRcdC5wb3AoKTtcblx0XHRcdFx0dGhpcy5zZXRPcHRpb24oYG9wdGlvbnMuJHtyZWZJbmRleH0udmlzaWJpbGl0eWAsIG5ld1Zpc2liaWxpdHkpO1xuXG5cdFx0XHRcdGlmIChuZXdTdGF0ZSA9PT0gXCJjbG9zZVwiKSB7XG5cdFx0XHRcdFx0dGhpcy5zZXRPcHRpb24oYG9wdGlvbnMuJHtyZWZJbmRleH0uc3RhdGVgLCBcImNsb3NlXCIpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmVmID0gcmVmLm5leHRFbGVtZW50U2libGluZztcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0dGhpc1trZXlFdmVudEhhbmRsZXJdID0gKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgcGF0aCA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpO1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBwYXRoPy5bMF07XG5cblx0XHRsZXQgcm9sZTtcblxuXHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSkpIHtcblx0XHRcdFx0cm9sZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9ST0xFKTtcblx0XHRcdH0gZWxzZSBpZiAoZWxlbWVudCA9PT0gdGhpcykge1xuXHRcdFx0XHRzaG93LmNhbGwodGhpcyk7XG5cdFx0XHRcdGZvY3VzRmlsdGVyLmNhbGwodGhpcyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBlID0gZWxlbWVudC5jbG9zZXN0KGBbJHtBVFRSSUJVVEVfUk9MRX1dYCk7XG5cdFx0XHRcdGlmIChlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgZS5oYXNBdHRyaWJ1dGUoKSkge1xuXHRcdFx0XHRcdHJvbGUgPSBlLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHN3aXRjaCAocm9sZSkge1xuXHRcdFx0Y2FzZSBcIm9wdGlvbi1sYWJlbFwiOlxuXHRcdFx0Y2FzZSBcIm9wdGlvbi1jb250cm9sXCI6XG5cdFx0XHRjYXNlIFwib3B0aW9uXCI6XG5cdFx0XHRcdGhhbmRsZU9wdGlvbktleWJvYXJkRXZlbnRzLmNhbGwodGhpcywgZXZlbnQpO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH07XG5cblx0dGhpcy5zaGFkb3dSb290LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXNba2V5RXZlbnRIYW5kbGVyXSk7XG5cdHRoaXMuc2hhZG93Um9vdC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpc1tvcGVuT3B0aW9uRXZlbnRIYW5kbGVyXSk7XG59XG5cbi8qKlxuICogVGhpcyBhdHRyaWJ1dGUgY2FuIGJlIHVzZWQgdG8gcGFzcyBhIFVSTCB0byB0aGlzIHNlbGVjdC5cbiAqXG4gKiBgYGBodG1sXG4gKiA8bW9uc3Rlci1zZWxlY3QgZGF0YS1tb25zdGVyLXVybD1cImh0dHBzOi8vZXhhbXBsZS5jb20vXCI+PC9tb25zdGVyLXNlbGVjdD5cbiAqIGBgYFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGluaXRPcHRpb25zRnJvbUFyZ3VtZW50cygpIHtcblx0Y29uc3Qgb3B0aW9ucyA9IHt9O1xuXG5cdGNvbnN0IHVybCA9IHRoaXMuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1VSTCk7XG5cdGlmIChpc1N0cmluZyh1cmwpKSB7XG5cdFx0b3B0aW9uc1tcInVybFwiXSA9IG5ldyBVUkwodXJsKS50b1N0cmluZygpO1xuXHR9XG5cblx0cmV0dXJuIG9wdGlvbnM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPHRlbXBsYXRlIGlkPVwib3B0aW9uc1wiPlxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cIm9wdGlvblwiXG4gICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItaW50ZW5kIHBhdGg6b3B0aW9ucy5pbnRlbmQsIFxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItc3RhdGUgcGF0aDpvcHRpb25zLnN0YXRlLCBcbiAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXZpc2liaWxpdHkgcGF0aDpvcHRpb25zLnZpc2liaWxpdHksIFxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItZmlsdGVyZWQgcGF0aDpvcHRpb25zLmZpbHRlcmVkLFxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItaGFzLWNoaWxkcmVuIHBhdGg6b3B0aW9ucy5oYXMtY2hpbGRyZW5cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiZm9sZGVyLWhhbmRsZXJcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgcGFydD1cIm9wdGlvblwiIHJvbGU9XCJvcHRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGRhdGEtbW9uc3Rlci1yb2xlPVwib3B0aW9uLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJcbiAgICAgICAgICAgIHR5cGUgcGF0aDp0eXBlLFxuICAgICAgICAgICAgcm9sZSBwYXRoOnJvbGUsXG4gICAgICAgICAgICB2YWx1ZSBwYXRoOm9wdGlvbnMudmFsdWUsIFxuICAgICAgICAgICAgbmFtZSBwYXRoOm5hbWUsIFxuICAgICAgICAgICAgcGFydCBwYXRoOnR5cGUgfCBwcmVmaXg6b3B0aW9uLSB8IHN1ZmZpeDogZm9ybVxuICAgICAgICAgICAgXCIgdGFiaW5kZXg9XCItMVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6b3B0aW9ucyB8IGluZGV4OmxhYmVsXCIgcGFydD1cIm9wdGlvbi1sYWJlbFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGVtcGxhdGU+XG5cbiAgICAgICAgPHRlbXBsYXRlIGlkPVwic2VsZWN0aW9uXCI+XG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiYmFkZ2VcIlxuICAgICAgICAgICAgICAgICBwYXJ0PVwiYmFkZ2VcIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItdmFsdWUgcGF0aDpzZWxlY3Rpb24gfCBpbmRleDp2YWx1ZSwgXG4gICAgICAgICAgICAgICAgIGNsYXNzIHBhdGg6Y2xhc3NlcyB8IGluZGV4OmJhZGdlLCBcbiAgICAgICAgcGFydCBwYXRoOnR5cGUgfCBzdWZmaXg6LW9wdGlvbiB8IHByZWZpeDogZm9ybS1cIiB0YWJpbmRleD1cIi0xXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6c2VsZWN0aW9uIHwgaW5kZXg6bGFiZWxcIiBwYXJ0PVwiYmFkZ2UtbGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJiYWRnZS1sYWJlbFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgcGFydD1cInJlbW92ZS1iYWRnZVwiIGRhdGEtbW9uc3Rlci1zZWxlY3QtdGhpc1xuICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJjbGFzcyBwYXRoOmZlYXR1cmVzLmNsZWFyIHwgPzo6aGlkZGVuIFwiXG4gICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cInJlbW92ZS1iYWRnZVwiIHRhYmluZGV4PVwiLTFcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3RlbXBsYXRlPlxuXG4gICAgICAgIDxzbG90IGNsYXNzPVwiaGlkZGVuXCI+PC9zbG90PlxuXG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250cm9sXCIgcGFydD1cImNvbnRyb2xcIiB0YWJpbmRleD1cIjBcIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICBcXCR7c2VsZWN0ZWR9XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInBvcHBlclwiIHBhcnQ9XCJwb3BwZXJcIiB0YWJpbmRleD1cIi0xXCIgY2xhc3M9XCJtb25zdGVyLWNvbG9yLXByaW1hcnktMVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcHRpb24tZmlsdGVyLWNvbnRyb2xcIiByb2xlPVwic2VhcmNoXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHJvbGU9XCJzZWFyY2hib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydD1cInBvcHBlci1maWx0ZXJcIiBuYW1lPVwicG9wcGVyLWZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cImZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBwYXJ0PVwiY29udGVudFwiIGNsYXNzPVwiZmxleFwiIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpjb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgcGFydD1cIm9wdGlvbnNcIiBkYXRhLW1vbnN0ZXItcm9sZT1cIm9wdGlvbnNcIiBkYXRhLW1vbnN0ZXItaW5zZXJ0PVwib3B0aW9ucyBwYXRoOm9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IHBhcnQ9XCJuby1vcHRpb25zXCIgZGF0YS1tb25zdGVyLXJvbGU9XCJuby1vcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDptZXNzYWdlcy5lbXB0eU9wdGlvbnNcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBwYXJ0PVwic3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNcIiBkYXRhLW1vbnN0ZXItcm9sZT1cInN0YXR1cy1vci1yZW1vdmUtYmFkZ2VzXCJcbiAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJjbGFzcyBwYXRoOmNsYXNzZXMuc3RhdHVzT3JSZW1vdmVCYWRnZSB8IHN1ZmZpeDpcXFxcIHN0YXR1cy1vci1yZW1vdmUtYmFkZ2VzXCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIGA7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChUcmVlU2VsZWN0KTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIDIwMjQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICovXG5cbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0VSUk9STUVTU0FHRSB9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBUb2dnbGVTd2l0Y2hTdHlsZVNoZWV0IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBUb2dnbGVTd2l0Y2hTdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcblx0VG9nZ2xlU3dpdGNoU3R5bGVTaGVldC5pbnNlcnRSdWxlKFxuXHRcdGBcbkBsYXllciB0b2dnbGVzd2l0Y2ggeyBcbjphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1ncmF5LTE6I2Y2ZjZmNjstLW1vbnN0ZXItY29sb3ItZ3JheS0yOiNlMmUyZTI7LS1tb25zdGVyLWNvbG9yLWdyYXktMzojOGI4YjhiOy0tbW9uc3Rlci1jb2xvci1ncmF5LTQ6IzZmNmY2ZjstLW1vbnN0ZXItY29sb3ItZ3JheS01OiMzZTNlM2U7LS1tb25zdGVyLWNvbG9yLWdyYXktNjojMjIyOy0tbW9uc3Rlci1jb2xvci1yb3NlLTE6I2ZmZjdmOTstLW1vbnN0ZXItY29sb3Itcm9zZS0yOiNmZmRjZTU7LS1tb25zdGVyLWNvbG9yLXJvc2UtMzojZmYzYjhkOy0tbW9uc3Rlci1jb2xvci1yb3NlLTQ6I2RiMDA3MjstLW1vbnN0ZXItY29sb3Itcm9zZS01OiM4MDAwNDA7LS1tb25zdGVyLWNvbG9yLXJvc2UtNjojNGMwMDIzOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktMTojZmZmOGY4Oy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktMjojZmZkZGRmOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktMzojZmY0MjZjOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktNDojZGUwMDUxOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktNTojODIwMDJjOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktNjojNTEwMDE4Oy0tbW9uc3Rlci1jb2xvci1yZWQtMTojZmZmOGY2Oy0tbW9uc3Rlci1jb2xvci1yZWQtMjojZmZkZGQ4Oy0tbW9uc3Rlci1jb2xvci1yZWQtMzojZmY0NjQ3Oy0tbW9uc3Rlci1jb2xvci1yZWQtNDojZTAwMDJiOy0tbW9uc3Rlci1jb2xvci1yZWQtNTojODMwMDE0Oy0tbW9uc3Rlci1jb2xvci1yZWQtNjojNTMwMDAzOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMTojZmZmOGY1Oy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMjojZmZkZWQxOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMzojZmQ0ZDAwOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNDojY2QzYzAwOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNTojNzUyMTAwOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNjojNDAxNjAwOy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0xOiNmZmY4ZjM7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTI6I2ZmZGZjNjstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMzojZDU3MzAwOy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi00OiNhYzVjMDA7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTU6IzYzMzMwMDstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tNjojMzcxZDAwOy0tbW9uc3Rlci1jb2xvci1hbWJlci0xOiNmZmY4ZWY7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTI6I2ZmZTBiMjstLW1vbnN0ZXItY29sb3ItYW1iZXItMzojYjk4MzAwOy0tbW9uc3Rlci1jb2xvci1hbWJlci00OiM5MjY3MDA7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTU6IzUyMzgwMDstLW1vbnN0ZXItY29sb3ItYW1iZXItNjojMzAyMTAwOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMTojZmZmOWU1Oy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMjojZmZlNTNlOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMzojOWM4YjAwOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNDojN2Q2ZjAwOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNTojNDYzZDAwOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNjojMjkyMzAwOy0tbW9uc3Rlci1jb2xvci1saW1lLTE6I2Y3ZmZhYzstLW1vbnN0ZXItY29sb3ItbGltZS0yOiNkNWYyMDA7LS1tb25zdGVyLWNvbG9yLWxpbWUtMzojODE5MzAwOy0tbW9uc3Rlci1jb2xvci1saW1lLTQ6IzY3NzYwMDstLW1vbnN0ZXItY29sb3ItbGltZS01OiMzOTQxMDA7LS1tb25zdGVyLWNvbG9yLWxpbWUtNjojMjIyNjAwOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTE6I2U1ZmZjMzstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS0yOiM5OGZiMDA7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtMzojNWM5YjAwOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTQ6IzQ5N2MwMDstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS01OiMyNjQ1MDA7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtNjojMTgyNjAwOy0tbW9uc3Rlci1jb2xvci1ncmVlbi0xOiNlMGZmZDk7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTI6IzcyZmY2YzstLW1vbnN0ZXItY29sb3ItZ3JlZW4tMzojMDBhMjFmOy0tbW9uc3Rlci1jb2xvci1ncmVlbi00OiMwMDgyMTc7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTU6IzAwNDkwODstLW1vbnN0ZXItY29sb3ItZ3JlZW4tNjojMDYyODAwOy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTE6I2RjZmZlNjstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC0yOiM1ZGZmYTI7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtMzojMDBhMDVhOy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTQ6IzAwODE0NzstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC01OiMwMDQ4MjU7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtNjojMDAyODEyOy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTE6I2RhZmZlZjstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS0yOiM0MmZmYzY7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtMzojMDA5Zjc4Oy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTQ6IzAwN2Y1ZjstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS01OiMwMDQ3MzQ7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtNjojMDAyODFiOy0tbW9uc3Rlci1jb2xvci10ZWFsLTE6I2Q3ZmZmNzstLW1vbnN0ZXItY29sb3ItdGVhbC0yOiMwMGZmZTQ7LS1tb25zdGVyLWNvbG9yLXRlYWwtMzojMDA5ZThjOy0tbW9uc3Rlci1jb2xvci10ZWFsLTQ6IzAwN2M2ZTstLW1vbnN0ZXItY29sb3ItdGVhbC01OiMwMDQ0M2M7LS1tb25zdGVyLWNvbG9yLXRlYWwtNjojMDAyNzIyOy0tbW9uc3Rlci1jb2xvci1jeWFuLTE6I2M0ZmZmZTstLW1vbnN0ZXItY29sb3ItY3lhbi0yOiMwMGZhZmI7LS1tb25zdGVyLWNvbG9yLWN5YW4tMzojMDA5OTlhOy0tbW9uc3Rlci1jb2xvci1jeWFuLTQ6IzAwN2E3YjstLW1vbnN0ZXItY29sb3ItY3lhbi01OiMwMDQzNDQ7LS1tb25zdGVyLWNvbG9yLWN5YW4tNjojMDAyNTI1Oy0tbW9uc3Rlci1jb2xvci1wb3dkZXItMTojZGFmYWZmOy0tbW9uc3Rlci1jb2xvci1wb3dkZXItMjojOGRmMGZmOy0tbW9uc3Rlci1jb2xvci1wb3dkZXItMzojMDA5OGE5Oy0tbW9uc3Rlci1jb2xvci1wb3dkZXItNDojMDA3OTg3Oy0tbW9uc3Rlci1jb2xvci1wb3dkZXItNTojMDA0MDQ4Oy0tbW9uc3Rlci1jb2xvci1wb3dkZXItNjojMDAyMjI3Oy0tbW9uc3Rlci1jb2xvci1za3ktMTojZTNmN2ZmOy0tbW9uc3Rlci1jb2xvci1za3ktMjojYWVlOWZmOy0tbW9uc3Rlci1jb2xvci1za3ktMzojMDA5NGI0Oy0tbW9uc3Rlci1jb2xvci1za3ktNDojMDA3NTkwOy0tbW9uc3Rlci1jb2xvci1za3ktNTojMDA0MDRmOy0tbW9uc3Rlci1jb2xvci1za3ktNjojMDAxZjI4Oy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi0xOiNlOGY2ZmY7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTI6I2I5ZTNmZjstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tMzojMDA5MmM1Oy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi00OiMwMDc0OWQ7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTU6IzAwM2M1NDstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tNjojMDAxZDJhOy0tbW9uc3Rlci1jb2xvci1henVyZS0xOiNlOGYyZmY7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTI6I2M2ZTBmZjstLW1vbnN0ZXItY29sb3ItYXp1cmUtMzojMDA4ZmRiOy0tbW9uc3Rlci1jb2xvci1henVyZS00OiMwMDcxYWY7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTU6IzAwM2I1ZTstLW1vbnN0ZXItY29sb3ItYXp1cmUtNjojMDAxYzMwOy0tbW9uc3Rlci1jb2xvci1ibHVlLTE6I2YwZjRmZjstLW1vbnN0ZXItY29sb3ItYmx1ZS0yOiNkNGUwZmY7LS1tb25zdGVyLWNvbG9yLWJsdWUtMzojMDA4OWZjOy0tbW9uc3Rlci1jb2xvci1ibHVlLTQ6IzAwNmRjYTstLW1vbnN0ZXItY29sb3ItYmx1ZS01OiMwMDM4NmQ7LS1tb25zdGVyLWNvbG9yLWJsdWUtNjojMDAxYTM5Oy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tMTojZjNmM2ZmOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tMjojZGVkZGZmOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tMzojNjU3ZWZmOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tNDojMDA2MWZjOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tNTojMDAzMjhhOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tNjojMDAxNjQ5Oy0tbW9uc3Rlci1jb2xvci12aW9sZXQtMTojZjdmMWZmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtMjojZThkYWZmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtMzojOWI3MGZmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtNDojNzk0YWZmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtNTojMmQwZmJmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtNjojMGIwMDc0Oy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtMTojZmRmNGZmOy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtMjojZjdkOWZmOy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtMzojZDE1MGZmOy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtNDojYjAxZmUzOy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtNTojNjYwMDg3Oy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtNjojM2EwMDRmOy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTE6I2ZmZjNmYzstLW1vbnN0ZXItY29sb3ItbWFnZW50YS0yOiNmZmQ3ZjY7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMzojZjkxMWUwOy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQ6I2NhMDBiNjstLW1vbnN0ZXItY29sb3ItbWFnZW50YS01OiM3NDAwNjg7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNjojNDQwMDNjOy0tbW9uc3Rlci1jb2xvci1waW5rLTE6I2ZmZjdmYjstLW1vbnN0ZXItY29sb3ItcGluay0yOiNmZmRjZWM7LS1tb25zdGVyLWNvbG9yLXBpbmstMzojZmYyZmIyOy0tbW9uc3Rlci1jb2xvci1waW5rLTQ6I2QyMDA4ZjstLW1vbnN0ZXItY29sb3ItcGluay01OiM3OTAwNTE7LS1tb25zdGVyLWNvbG9yLXBpbmstNjojNGIwMDMwOy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtMTojZTViODc1Oy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtMjojZDlhMzYyOy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtMzojYzA4YTRlOy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtNDojYTc3MTNiOy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtNTojOGY1YTI4Oy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtNjojMzYwNTA1Oy0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC0xOiNmN2Y1ZWY7LS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTI6I2U1ZTJkOTstLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtMzojY2JjNmIzOy0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC00OiNhMTlkOGE7LS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTU6IzdhNzU2NjstLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtNjojNTE0ZDNmfS5tb25zdGVyLXRoZW1lLXByaW1hcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS1kaXNhYmxlZC0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xKX0ubW9uc3Rlci10aGVtZS1zZWNvbmRhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLXRoZW1lLXRlcnRpYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItdGhlbWUtZGVzdHJ1Y3RpdmUtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xKX0ubW9uc3Rlci10aGVtZS1zdWNjZXNzLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTEpfS5tb25zdGVyLXRoZW1lLXdhcm5pbmctMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMSl9Lm1vbnN0ZXItdGhlbWUtZXJyb3ItMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0xKX0ubW9uc3Rlci10aGVtZS1zZWxlY3Rpb24tMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfS5tb25zdGVyLWJvcmRlci1jb2xvci0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWJvcmRlci0xKX0ubW9uc3Rlci1jb2xvci1uZXV0cmFsLTF7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWNvbG9yLXByaW1hcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMSl9Lm1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xKX0ubW9uc3Rlci1jb2xvci13YXJuaW5nLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTEpfS5tb25zdGVyLWNvbG9yLWVycm9yLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMSl9Lm1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktZGlzYWJsZWQtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMil9Lm1vbnN0ZXItdGhlbWUtc2Vjb25kYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci10aGVtZS10ZXJ0aWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLXRoZW1lLWRlc3RydWN0aXZlLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMil9Lm1vbnN0ZXItdGhlbWUtc3VjY2Vzcy0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yKX0ubW9uc3Rlci10aGVtZS13YXJuaW5nLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTIpfS5tb25zdGVyLXRoZW1lLWVycm9yLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMil9Lm1vbnN0ZXItdGhlbWUtc2VsZWN0aW9uLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yKX0ubW9uc3Rlci1ib3JkZXItY29sb3ItMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ib3JkZXItMil9Lm1vbnN0ZXItY29sb3ItbmV1dHJhbC0ye2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1jb2xvci1wcmltYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItY29sb3ItdGVydGlhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTIpfS5tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMil9Lm1vbnN0ZXItY29sb3Itd2FybmluZy0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0yKX0ubW9uc3Rlci1jb2xvci1lcnJvci0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTIpfS5tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMil9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTMpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTMpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMyl9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0zKX0ubW9uc3Rlci10aGVtZS1lcnJvci0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTMpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyl9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTMpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtM3tjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zKX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTMpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMyl9Lm1vbnN0ZXItY29sb3ItZXJyb3ItM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0zKX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTMpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS1kaXNhYmxlZC00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00KX0ubW9uc3Rlci10aGVtZS1zZWNvbmRhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLXRoZW1lLXRlcnRpYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItdGhlbWUtZGVzdHJ1Y3RpdmUtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00KX0ubW9uc3Rlci10aGVtZS1zdWNjZXNzLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQpfS5tb25zdGVyLXRoZW1lLXdhcm5pbmctNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNCl9Lm1vbnN0ZXItdGhlbWUtZXJyb3ItNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci00KX0ubW9uc3Rlci10aGVtZS1zZWxlY3Rpb24tNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQpfS5tb25zdGVyLWJvcmRlci1jb2xvci00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWJvcmRlci00KX0ubW9uc3Rlci1jb2xvci1uZXV0cmFsLTR7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLWNvbG9yLXByaW1hcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNCl9Lm1vbnN0ZXItY29sb3Itc3VjY2Vzcy00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00KX0ubW9uc3Rlci1jb2xvci13YXJuaW5nLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQpfS5tb25zdGVyLWNvbG9yLWVycm9yLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItNCl9Lm1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00KX0ubW9uc3Rlci10aGVtZS1jb250cm9sLWNvbnRhaW5lci0xLC5tb25zdGVyLXRoZW1lLWNvbnRyb2wtcm93LTF7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLWNvbG9yKX0ubW9uc3Rlci10aGVtZS1jb250cm9sLWNvbnRhaW5lci0xLC5tb25zdGVyLXRoZW1lLWNvbnRyb2wtZWxlbWVudCwubW9uc3Rlci10aGVtZS1jb250cm9sLXJvdy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29sb3IpfS5tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1iZy1jb2xvcil9Lm1vbnN0ZXItdGhlbWUtYmFja2dyb3VuZC1pbmhlcml0e2JhY2tncm91bmQtY29sb3I6aW5oZXJpdCFpbXBvcnRhbnR9Lm1vbnN0ZXItdGhlbWUtb257YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLW9uLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLW9uLWNvbG9yKX0ubW9uc3Rlci10aGVtZS1vZmZ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLW9mZi1iZy1jb2xvcik7Y29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1vZmYtY29sb3IpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMiwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0zLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItMHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXdpZHRoOjB9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMSwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0zLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17Ym94LXNpemluZzpib3JkZXItYm94O2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7bWFyZ2luOjA7b3V0bGluZTpub25lfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXTpmb2N1c3tvdXRsaW5lOjFweCBkYXNoZWQgdmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyk7b3V0bGluZS1vZmZzZXQ6MnB4fVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSAuc3dpdGNoe2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTppbmxpbmUtZ3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtwb3NpdGlvbjpyZWxhdGl2ZTt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgLjJzO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIC5sYWJlbHtkaXNwbGF5OmJsb2NrO21heC13aWR0aDoxMDAlO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjAgLjJlbTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt3aGl0ZS1zcGFjZTpub3dyYXB9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIC5zd2l0Y2gtc2xpZGVye2JvdHRvbTo0cHg7bGVmdDo0cHg7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6NHB4O3RvcDo0cHg7dHJhbnNpdGlvbjouMnM7d2lkdGg6Y2FsYyg1MCUgLSA0cHgpfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSAuc3dpdGNoW2RhdGEtbW9uc3Rlci1zdGF0ZT1vbl0gLmxhYmVsLm9mZnt2aXNpYmlsaXR5OmhpZGRlbn1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gLnN3aXRjaFtkYXRhLW1vbnN0ZXItc3RhdGU9b2ZmXSAubGFiZWwub2ZmLFtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSAuc3dpdGNoW2RhdGEtbW9uc3Rlci1zdGF0ZT1vbl0gLmxhYmVsLm9ue3Zpc2liaWxpdHk6dmlzaWJsZX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gLnN3aXRjaFtkYXRhLW1vbnN0ZXItc3RhdGU9b2ZmXSAubGFiZWwub257dmlzaWJpbGl0eTpoaWRkZW59W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIC5zd2l0Y2hbZGF0YS1tb25zdGVyLXN0YXRlPW9uXSAuc3dpdGNoLXNsaWRlcnt0cmFuc2Zvcm06dHJhbnNsYXRlWCgxMDAlKX0gXG59YCxcblx0XHQwLFxuXHQpO1xufSBjYXRjaCAoZSkge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpLFxuXHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0ZSArIFwiXCIsXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgQ3VzdG9tQ29udHJvbCB9IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tY29udHJvbC5tanNcIjtcbmltcG9ydCB7IE9ic2VydmVyIH0gZnJvbSBcIi4uLy4uL3R5cGVzL29ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHsgUHJveHlPYnNlcnZlciB9IGZyb20gXCIuLi8uLi90eXBlcy9wcm94eW9ic2VydmVyLm1qc1wiO1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG5cdHVwZGF0ZXJUcmFuc2Zvcm1lck1ldGhvZHNTeW1ib2wsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IGlzT2JqZWN0LCBpc0Z1bmN0aW9uIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgVG9nZ2xlU3dpdGNoU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvdG9nZ2xlLXN3aXRjaC5tanNcIjtcbmltcG9ydCB7XG5cdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdEFUVFJJQlVURV9ST0xFLFxufSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgVG9nZ2xlU3dpdGNoIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHN3aXRjaEVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJzd2l0Y2hFbGVtZW50XCIpO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBTVEFURV9PTiA9IFwib25cIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgU1RBVEVfT0ZGID0gXCJvZmZcIjtcblxuLyoqXG4gKiBBIHNpbXBsZSB0b2dnbGUgc3dpdGNoXG4gKlxuICogQGZyYWdtZW50cyAvZnJhZ21lbnRzL2NvbXBvbmVudHMvZm9ybS90b2dnbGUtc3dpdGNoXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvZm9ybS90b2dnbGUtc3dpdGNoLXNpbXBsZVxuICpcbiAqIEBzaW5jZSAzLjU3LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIGJlYXV0aWZ1bCBzd2l0Y2ggZWxlbWVudFxuICogQGZpcmVzIG1vbnN0ZXItb3B0aW9ucy1zZXRcbiAqIEBmaXJlcyBtb25zdGVyLXNlbGVjdGVkXG4gKiBAZmlyZXMgbW9uc3Rlci1jaGFuZ2VcbiAqIEBmaXJlcyBtb25zdGVyLWNoYW5nZWRcbiAqL1xuY2xhc3MgVG9nZ2xlU3dpdGNoIGV4dGVuZHMgQ3VzdG9tQ29udHJvbCB7XG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBIVE1MIHRhZywgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2YWx1ZT1jdXJyZW50IHZhbHVlIG9mIHRoZSBlbGVtZW50XG5cdCAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZGlzYWJsZWQ9ZGlzYWJsZWQ9ZmFsc2UgRGlzYWJsZWQgc3RhdGVcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGNsYXNzZXNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGNsYXNzZXMub249c3BlY2lmaWVzIHRoZSBjbGFzcyBmb3IgdGhlIG9uIHN0YXRlLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gY2xhc3Nlcy5vZmY9c3BlY2lmaWVzIHRoZSBjbGFzcyBmb3IgdGhlIG9mZiBzdGF0ZS5cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHZhbHVlc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdmFsdWVzLm9mZj1zcGVjaWZpZXMgdGhlIHZhbHVlIG9mIHRoZSBlbGVtZW50IGlmIGl0IGlzIG5vdCBzZWxlY3RlZFxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gbGFiZWxzXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYWJlbHMub249c3BlY2lmaWVzIHRoZSBsYWJlbCBmb3IgdGhlIG9uIHN0YXRlLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbGFiZWxzLm9mZj1zcGVjaWZpZXMgdGhlIGxhYmVsIGZvciB0aGUgb2ZmIHN0YXRlLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gYWN0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gYWN0aW9ucy5vbj1zcGVjaWZpZXMgdGhlIGFjdGlvbiBmb3IgdGhlIG9uIHN0YXRlLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gYWN0aW9ucy5vZmY9c3BlY2lmaWVzIHRoZSBhY3Rpb24gZm9yIHRoZSBvZmYgc3RhdGUuXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluPXNwZWNpZmllcyB0aGUgbWFpbiB0ZW1wbGF0ZSB1c2VkIGJ5IHRoZSBjb250cm9sLlxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dmFsdWU6IG51bGwsXG5cdFx0XHRkaXNhYmxlZDogZmFsc2UsXG5cdFx0XHRjbGFzc2VzOiB7XG5cdFx0XHRcdG9uOiBcIm1vbnN0ZXItdGhlbWUtb25cIixcblx0XHRcdFx0b2ZmOiBcIm1vbnN0ZXItdGhlbWUtb2ZmXCIsXG5cdFx0XHRcdGhhbmRsZTogXCJtb25zdGVyLXRoZW1lLXByaW1hcnktMVwiLFxuXHRcdFx0fSxcblx0XHRcdHZhbHVlczoge1xuXHRcdFx0XHRvbjogXCJvblwiLFxuXHRcdFx0XHRvZmY6IFwib2ZmXCIsXG5cdFx0XHR9LFxuXHRcdFx0bGFiZWxzOiB7XG5cdFx0XHRcdHRvZ2dsZVN3aXRjaE9uOiBcIlx1MjcxNFwiLFxuXHRcdFx0XHR0b2dnbGVTd2l0Y2hPZmY6IFwiXHUyNzE2XCIsXG5cdFx0XHR9LFxuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHR9LFxuXHRcdFx0YWN0aW9uczoge1xuXHRcdFx0XHRvbjogKCkgPT4ge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBvbiBhY3Rpb24gaXMgbm90IGRlZmluZWRcIik7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdG9mZjogKCkgPT4ge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBvZmYgYWN0aW9uIGlzIG5vdCBkZWZpbmVkXCIpO1xuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtUb2dnbGVTd2l0Y2h9XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXHRcdGluaXRDb250cm9sUmVmZXJlbmNlcy5jYWxsKHRoaXMpO1xuXHRcdGluaXRFdmVudEhhbmRsZXIuY2FsbCh0aGlzKTtcblxuXHRcdC8qKlxuXHRcdCAqIGluaXQgdmFsdWUgdG8gb2ZmXG5cdFx0ICogaWYgdGhlIHZhbHVlIHdhcyBub3QgZGVmaW5lZCBiZWZvcmUgaW5zZXJ0aW5nIGl0IGludG8gdGhlIEhUTUxcblx0XHQgKi9cblx0XHRpZiAoc2VsZi5nZXRPcHRpb24oXCJ2YWx1ZVwiKSA9PT0gbnVsbCkge1xuXHRcdFx0c2VsZi5zZXRPcHRpb24oXCJ2YWx1ZVwiLCBzZWxmLmdldE9wdGlvbihcInZhbHVlcy5vZmZcIikpO1xuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIHZhbHVlIGZyb20gYXR0cmlidXRlXG5cdFx0ICovXG5cdFx0aWYgKHNlbGYuaGFzQXR0cmlidXRlKFwidmFsdWVcIikpIHtcblx0XHRcdHNlbGYuc2V0T3B0aW9uKFwidmFsdWVcIiwgc2VsZi5nZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiKSk7XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogdmFsaWRhdGUgdmFsdWVcblx0XHQgKi9cblx0XHR2YWxpZGF0ZUFuZFNldFZhbHVlLmNhbGwoc2VsZik7XG5cblx0XHRpZiAodGhpcy5zdGF0ZSA9PT0gU1RBVEVfT04pIHtcblx0XHRcdHRvZ2dsZUNsYXNzT24uY2FsbChzZWxmKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dG9nZ2xlQ2xhc3NPZmYuY2FsbChzZWxmKTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBpcyBjYWxsZWQgd2hlbiBvcHRpb25zIGNoYW5nZWRcblx0XHQgKi9cblx0XHRzZWxmW2ludGVybmFsU3ltYm9sXS5hdHRhY2hPYnNlcnZlcihcblx0XHRcdG5ldyBPYnNlcnZlcihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdGlmIChpc09iamVjdCh0aGlzKSAmJiB0aGlzIGluc3RhbmNlb2YgUHJveHlPYnNlcnZlcikge1xuXHRcdFx0XHRcdHZhbGlkYXRlQW5kU2V0VmFsdWUuY2FsbChzZWxmKTtcblx0XHRcdFx0XHR0b2dnbGVDbGFzcy5jYWxsKHNlbGYpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KSxcblx0XHQpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogdXBkYXRlciB0cmFuc2Zvcm1lciBtZXRob2RzIGZvciBwaXBlXG5cdCAqXG5cdCAqIEByZXR1cm4ge2Z1bmN0aW9ufVxuXHQgKi9cblx0W3VwZGF0ZXJUcmFuc2Zvcm1lck1ldGhvZHNTeW1ib2xdKCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRcInN0YXRlLWNhbGxiYWNrXCI6IChXZXJ0KSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLnN0YXRlO1xuXHRcdFx0fSxcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4gW0NTU1N0eWxlU2hlZXRdXG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW1RvZ2dsZVN3aXRjaFN0eWxlU2hlZXRdO1xuXHR9XG5cblx0LyoqXG5cdCAqIHRvZ2dsZSBzd2l0Y2hcblx0ICpcblx0ICogYGBgXG5cdCAqIGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLXRvZ2dsZS1zd2l0Y2gnKTtcblx0ICogZS5jbGljaygpXG5cdCAqIGBgYFxuXHQgKi9cblx0Y2xpY2soKSB7XG5cdFx0dG9nZ2xlVmFsdWVzLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogdG9nZ2xlIHN3aXRjaCBvbi9vZmZcblx0ICpcblx0ICogYGBgXG5cdCAqIGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLXRvZ2dsZS1zd2l0Y2gnKTtcblx0ICogZS50b2dnbGUoKVxuXHQgKiBgYGBcblx0ICpcblx0ICogQHJldHVybiB7VG9nZ2xlU3dpdGNofVxuXHQgKi9cblx0dG9nZ2xlKCkge1xuXHRcdHRoaXMuY2xpY2soKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiB0b2dnbGUgc3dpdGNoIG9uXG5cdCAqXG5cdCAqIGBgYFxuXHQgKiBlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbW9uc3Rlci10b2dnbGUtc3dpdGNoJyk7XG5cdCAqIGUudG9nZ2xlT24oKVxuXHQgKiBgYGBcblx0ICpcblx0ICogQHJldHVybiB7VG9nZ2xlU3dpdGNofVxuXHQgKi9cblx0dG9nZ2xlT24oKSB7XG5cdFx0dGhpcy5zZXRPcHRpb24oXCJ2YWx1ZVwiLCB0aGlzLmdldE9wdGlvbihcInZhbHVlcy5vblwiKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogdG9nZ2xlIHN3aXRjaCBvZmZcblx0ICpcblx0ICogYGBgXG5cdCAqIGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLXRvZ2dsZS1zd2l0Y2gnKTtcblx0ICogZS50b2dnbGVPZmYoKVxuXHQgKiBgYGBcblx0ICpcblx0ICogQHJldHVybiB7VG9nZ2xlU3dpdGNofVxuXHQgKi9cblx0dG9nZ2xlT2ZmKCkge1xuXHRcdHRoaXMuc2V0T3B0aW9uKFwidmFsdWVcIiwgdGhpcy5nZXRPcHRpb24oXCJ2YWx1ZXMub2ZmXCIpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiByZXR1cm5zIHRoZSBzdGF0dXMgb2YgdGhlIGVsZW1lbnRcblx0ICpcblx0ICogYGBgXG5cdCAqIGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLXRvZ2dsZS1zd2l0Y2gnKTtcblx0ICogY29uc29sZS5sb2coZS5zdGF0ZSlcblx0ICogLy8gXHUyMUE2IG9mZlxuXHQgKiBgYGBcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0Z2V0IHN0YXRlKCkge1xuXHRcdHJldHVybiB0aGlzLmdldE9wdGlvbihcInZhbHVlXCIpID09PSB0aGlzLmdldE9wdGlvbihcInZhbHVlcy5vblwiKVxuXHRcdFx0PyBTVEFURV9PTlxuXHRcdFx0OiBTVEFURV9PRkY7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIFN3aXRjaFxuXHQgKlxuXHQgKiBgYGBcblx0ICogZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21vbnN0ZXItdG9nZ2xlLXN3aXRjaCcpO1xuXHQgKiBjb25zb2xlLmxvZyhlLnZhbHVlKVxuXHQgKiAvLyBcdTIxQTYgb25cblx0ICogYGBgXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdGdldCB2YWx1ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5zdGF0ZSA9PT0gU1RBVEVfT05cblx0XHRcdD8gdGhpcy5nZXRPcHRpb24oXCJ2YWx1ZXMub25cIilcblx0XHRcdDogdGhpcy5nZXRPcHRpb24oXCJ2YWx1ZXMub2ZmXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCB2YWx1ZVxuXHQgKlxuXHQgKiBgYGBcblx0ICogZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21vbnN0ZXItdG9nZ2xlLXN3aXRjaCcpO1xuXHQgKiBlLnZhbHVlPVwib25cIlxuXHQgKiBgYGBcblx0ICpcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHZhbHVlXG5cdCAqL1xuXHRzZXQgdmFsdWUodmFsdWUpIHtcblx0XHR0aGlzLnNldE9wdGlvbihcInZhbHVlXCIsIHZhbHVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFxuXHRcdFx0XCJAc2NodWthaS9tb25zdGVyL2NvbXBvbmVudHMvZm9ybS90b2dnbGUtc3dpdGNoQEBpbnN0YW5jZVwiLFxuXHRcdCk7XG5cdH1cblxuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItdG9nZ2xlLXN3aXRjaFwiO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaW5pdENvbnRyb2xSZWZlcmVuY2VzKCkge1xuXHR0aGlzW3N3aXRjaEVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1zd2l0Y2hdYCxcblx0KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB0b2dnbGVDbGFzc09uKCkge1xuXHR0aGlzW3N3aXRjaEVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5yZW1vdmUodGhpcy5nZXRPcHRpb24oXCJjbGFzc2VzLm9mZlwiKSk7IC8vIGNoYW5nZSBjb2xvclxuXHR0aGlzW3N3aXRjaEVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5hZGQodGhpcy5nZXRPcHRpb24oXCJjbGFzc2VzLm9uXCIpKTsgLy8gY2hhbmdlIGNvbG9yXG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gdG9nZ2xlQ2xhc3NPZmYoKSB7XG5cdHRoaXNbc3dpdGNoRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LnJlbW92ZSh0aGlzLmdldE9wdGlvbihcImNsYXNzZXMub25cIikpOyAvLyBjaGFuZ2UgY29sb3Jcblx0dGhpc1tzd2l0Y2hFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuYWRkKHRoaXMuZ2V0T3B0aW9uKFwiY2xhc3Nlcy5vZmZcIikpOyAvLyBjaGFuZ2UgY29sb3Jcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB0b2dnbGVDbGFzcygpIHtcblx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwidmFsdWVcIikgPT09IHRoaXMuZ2V0T3B0aW9uKFwidmFsdWVzLm9uXCIpKSB7XG5cdFx0dG9nZ2xlQ2xhc3NPbi5jYWxsKHRoaXMpO1xuXHR9IGVsc2Uge1xuXHRcdHRvZ2dsZUNsYXNzT2ZmLmNhbGwodGhpcyk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB0b2dnbGVWYWx1ZXMoKSB7XG5cdGlmICh0aGlzLmdldE9wdGlvbihcImRpc2FibGVkXCIpID09PSB0cnVlKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0bGV0IGNhbGxiYWNrLCB2YWx1ZTtcblxuXHRpZiAodGhpcy5nZXRPcHRpb24oXCJ2YWx1ZVwiKSA9PT0gdGhpcy5nZXRPcHRpb24oXCJ2YWx1ZXMub25cIikpIHtcblx0XHR2YWx1ZSA9IHRoaXMuZ2V0T3B0aW9uKFwidmFsdWVzLm9mZlwiKTtcblx0XHRjYWxsYmFjayA9IHRoaXMuZ2V0T3B0aW9uKFwiYWN0aW9ucy5vZmZcIik7XG5cdH0gZWxzZSB7XG5cdFx0dmFsdWUgPSB0aGlzLmdldE9wdGlvbihcInZhbHVlcy5vblwiKTtcblx0XHRjYWxsYmFjayA9IHRoaXMuZ2V0T3B0aW9uKFwiYWN0aW9ucy5vblwiKTtcblx0fVxuXG5cdHRoaXMuc2V0T3B0aW9uKFwidmFsdWVcIiwgdmFsdWUpO1xuXHR0aGlzPy5zZXRGb3JtVmFsdWUodmFsdWUpO1xuXG5cdGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuXHRcdGNhbGxiYWNrLmNhbGwodGhpcyk7XG5cdH1cblxuXHR0aGlzLnNldE9wdGlvbihcInN0YXRlXCIsIHRoaXMuc3RhdGUpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQW5kU2V0VmFsdWUoKSB7XG5cdGNvbnN0IHZhbHVlID0gdGhpcy5nZXRPcHRpb24oXCJ2YWx1ZVwiKTtcblxuXHRjb25zdCB2YWxpZGF0ZWRWYWx1ZXMgPSBbXTtcblx0dmFsaWRhdGVkVmFsdWVzLnB1c2godGhpcy5nZXRPcHRpb24oXCJ2YWx1ZXMub25cIikpO1xuXHR2YWxpZGF0ZWRWYWx1ZXMucHVzaCh0aGlzLmdldE9wdGlvbihcInZhbHVlcy5vZmZcIikpO1xuXG5cdGlmICh2YWxpZGF0ZWRWYWx1ZXMuaW5jbHVkZXModmFsdWUpID09PSBmYWxzZSkge1xuXHRcdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdFx0dGhpcyxcblx0XHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0XHQnVGhlIHZhbHVlIFwiJyArXG5cdFx0XHRcdHZhbHVlICtcblx0XHRcdFx0J1wiIG11c3QgYmUgXCInICtcblx0XHRcdFx0dGhpcy5nZXRPcHRpb24oXCJ2YWx1ZXMub25cIikgK1xuXHRcdFx0XHQnXCIgb3IgXCInICtcblx0XHRcdFx0dGhpcy5nZXRPcHRpb24oXCJ2YWx1ZXMub2ZmXCIpLFxuXHRcdCk7XG5cdFx0dGhpcy5zZXRPcHRpb24oXCJkaXNhYmxlZFwiLCB0cnVlKTtcblx0XHR0aGlzLmZvcm1EaXNhYmxlZENhbGxiYWNrKHRydWUpO1xuXHR9IGVsc2Uge1xuXHRcdHRoaXMuc2V0T3B0aW9uKFwiZGlzYWJsZWRcIiwgZmFsc2UpO1xuXHRcdHRoaXMuZm9ybURpc2FibGVkQ2FsbGJhY2soZmFsc2UpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge2luaXRFdmVudEhhbmRsZXJ9XG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudEhhbmRsZXIoKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXHRzZWxmLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0XHRpZiAoZXZlbnQuY29kZSA9PT0gXCJTcGFjZVwiKSB7XG5cdFx0XHRzZWxmW3N3aXRjaEVsZW1lbnRTeW1ib2xdLmNsaWNrKCk7XG5cdFx0fVxuXHR9KTtcblx0c2VsZi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG5cdFx0dG9nZ2xlVmFsdWVzLmNhbGwoc2VsZik7XG5cdH0pO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udHJvbFwiIHBhcnQ9XCJjb250cm9sXCIgdGFiaW5kZXg9XCIwXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3dpdGNoXCIgZGF0YS1tb25zdGVyLXJvbGU9XCJzd2l0Y2hcIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImRhdGEtbW9uc3Rlci1zdGF0ZSBwYXRoOnZhbHVlIHwgY2FsbDpzdGF0ZS1jYWxsYmFja1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbCBvblwiIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpsYWJlbHMudG9nZ2xlU3dpdGNoT25cIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWwgb2ZmXCIgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmxhYmVscy50b2dnbGVTd2l0Y2hPZmZcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2xhc3MgcGF0aDpjbGFzc2VzLmhhbmRsZSB8IHN1ZmZpeDpcXFxcIHN3aXRjaC1zbGlkZXJcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5gO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoVG9nZ2xlU3dpdGNoKTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7XG5cdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdEFUVFJJQlVURV9ST0xFLFxufSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRhdHRyaWJ1dGVPYnNlcnZlclN5bWJvbCxcblx0Q3VzdG9tRWxlbWVudCxcblx0aW5pdE1ldGhvZFN5bWJvbCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBpc0FycmF5LCBpc1N0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9GT1JNX1JFTE9BRCwgQVRUUklCVVRFX0ZPUk1fVVJMIH0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgbG9hZEFuZEFzc2lnbkNvbnRlbnQgfSBmcm9tIFwiLi91dGlsL2ZldGNoLm1qc1wiO1xuXG5leHBvcnQgeyBUZW1wbGF0ZSB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpbnRlcnNlY3Rpb25PYnNlcnZlcldhc0luaXRpYWxpemVkID0gU3ltYm9sKFwid2FzSW5pdGlhbGl6ZWRcIik7XG5cbi8qKlxuICogQSBUZW1wbGF0ZSBjb250cm9sIGlzIGEgY29udHJvbCB0aGF0IGNhbiBiZSB1c2VkIHRvIGxvYWQgY29udGVudCBmcm9tIGEgVVJMIGFuZCBkaXNwbGF5IGl0IGluIHRoZSBTaGFkb3dSb290LlxuICpcbiAqIEBmcmFnbWVudHMgL2ZyYWdtZW50cy9jb21wb25lbnRzL2Zvcm0vdGVtcGxhdGUvXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvZm9ybS90ZW1wbGF0ZS1zaW1wbGVcbiAqXG4gKiBAc2luY2UgMS4xMS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSB0ZW1wbGF0ZSBjb250cm9sXG4gKiBAZmlyZXMgbW9uc3Rlci1mZXRjaGVkXG4gKi9cbmNsYXNzIFRlbXBsYXRlIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9mb3JtL3RlbXBsYXRlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIEhUTUwgdGFnLCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdXJsPXVuZGVmaW5lZFxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcmVsb2FkPXVuZGVmaW5lZCAgY3VycmVudGx5IHRoZSBvbmx5IHZhbHVlIGRlZmluZWQgaXMgYG9uc2hvd2AuIEN1cnJlbnRseSB0aGUgb25seSB2YWx1ZSBkZWZpbmVkIGlzIG9uc2hvdy4gdGhpcyByZW1vdmVzIHRoZSBJbnRlcnNlY3Rpb25PYnNlcnZlci4gdGhpcyBtZWFucyB0aGF0IHRoZSBjb250ZW50IGlzIG9ubHkgbG9hZGVkIG9uY2UuIHJlbG9hZGluZyBvZiB0aGUgY29udGVudCBkb2VzIG5vdCBvY2N1ci5cblx0ICogQHByb3BlcnR5IHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5Qcm9jZXNzb3JbXX0gcHJvY2Vzc29yc1xuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZmV0Y2ggRmV0Y2ggW3NlZSBVc2luZyBGZXRjaCBtb3ppbGxhLm9yZ10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0ZldGNoX0FQSS9Vc2luZ19GZXRjaClcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLnJlZGlyZWN0PWVycm9yXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5tZXRob2Q9R0VUXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5tb2RlPXNhbWUtb3JpZ2luXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5jcmVkZW50aWFscz1zYW1lLW9yaWdpblxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZmV0Y2guaGVhZGVycz17XCJhY2NlcHRcIjpcInRleHQvaHRtbFwifX1cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbihcblx0XHRcdHt9LFxuXHRcdFx0c3VwZXIuZGVmYXVsdHMsXG5cdFx0XHR7XG5cdFx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHVybDogdW5kZWZpbmVkLFxuXHRcdFx0XHRyZWxvYWQ6IHVuZGVmaW5lZCxcblx0XHRcdFx0cHJvY2Vzc29yczogW10sXG5cdFx0XHRcdGZldGNoOiB7XG5cdFx0XHRcdFx0cmVkaXJlY3Q6IFwiZXJyb3JcIixcblx0XHRcdFx0XHRtZXRob2Q6IFwiR0VUXCIsXG5cdFx0XHRcdFx0bW9kZTogXCJzYW1lLW9yaWdpblwiLFxuXHRcdFx0XHRcdGNyZWRlbnRpYWxzOiBcInNhbWUtb3JpZ2luXCIsXG5cdFx0XHRcdFx0aGVhZGVyczoge1xuXHRcdFx0XHRcdFx0YWNjZXB0OiBcInRleHQvaHRtbFwiLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdFx0aW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzLmNhbGwodGhpcyksXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBkZXRlcm1pbmVzIHdoaWNoIGF0dHJpYnV0ZXMgYXJlIHRvIGJlIG1vbml0b3JlZCBieSBgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKClgLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmdbXX1cblx0ICovXG5cdHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuXHRcdGNvbnN0IGxpc3QgPSBzdXBlci5vYnNlcnZlZEF0dHJpYnV0ZXM7XG5cdFx0bGlzdC5wdXNoKEFUVFJJQlVURV9GT1JNX1VSTCk7XG5cdFx0cmV0dXJuIGxpc3Q7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICovXG5cdFtpbml0TWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlcltpbml0TWV0aG9kU3ltYm9sXSgpO1xuXG5cdFx0Ly8gZGF0YS1tb25zdGVyLW9wdGlvbnNcblx0XHR0aGlzW2F0dHJpYnV0ZU9ic2VydmVyU3ltYm9sXVtBVFRSSUJVVEVfRk9STV9VUkxdID0gKHVybCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1VSTCkpIHtcblx0XHRcdFx0dGhpcy5zZXRPcHRpb24oXCJ1cmxcIiwgbmV3IFVSTCh1cmwsIGRvY3VtZW50LmxvY2F0aW9uKS50b1N0cmluZygpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2V0T3B0aW9uKFwidXJsXCIsIHVuZGVmaW5lZCk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgaW50ZXJuYWwgYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gbWlzc2luZyBkZWZhdWx0IHNsb3Rcblx0ICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcblx0ICogQHRocm93cyB7RXJyb3J9IG1pc3NpbmcgdXJsXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB3ZSB3b24ndCBiZSBhYmxlIHRvIHJlYWQgdGhlIGRhdGFcblx0ICogQHRocm93cyB7RXJyb3J9IHJlcXVlc3QgZmFpbGVkXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBub3QgZm91bmRcblx0ICogQHRocm93cyB7RXJyb3J9IHVuZGVmaW5lZCBzdGF0dXMgb3IgdHlwZVxuXHQgKiBAZmlyZXMgbW9uc3Rlci1mZXRjaGVkXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLkZvcm19XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXHRcdGluaXRJbnRlcnNlY3Rpb25PYnNlcnZlci5jYWxsKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBpbnRlcm5hbCBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqXG5cdCAqIEByZXR1cm4ge0NTU1N0eWxlU2hlZXRbXX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgaW50ZXJuYWwgYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItdGVtcGxhdGVcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBsb2FkIGNvbnRlbnQgZnJvbSB1cmxcblx0ICpcblx0ICogSXQgaXMgaW1wb3J0YW50IHRvIGtub3cgdGhhdCB3aXRoIHRoaXMgZnVuY3Rpb24gdGhlIGxvYWRpbmcgaXMgZXhlY3V0ZWRcblx0ICogZGlyZWN0bHkuIGl0IGlzIGxvYWRlZCBhcyB3ZWxsIHdoZW4gdGhlIGVsZW1lbnQgaXMgbm90IHZpc2libGUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gdXJsXG5cdCAqL1xuXHRmZXRjaCh1cmwpIHtcblx0XHRpZiAoaXNTdHJpbmcodXJsKSB8fCB1cmwgaW5zdGFuY2VvZiBVUkwpIHtcblx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1VSTCwgYCR7dXJsfWApO1xuXHRcdH1cblxuXHRcdHJldHVybiBsb2FkQ29udGVudC5jYWxsKHRoaXMpO1xuXHR9XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gUHJvY2Vzc29yXG4gKiBAcHJvcGVydHkge1N0cmluZ30gZGVzdGluYXRpb25cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBzb3VyY2VcbiAqIEBzaW5jZSAxLjExLjhcbiAqL1xuXG4vKipcbiAqIFRoaXMgYXR0cmlidXRlIGNhbiBiZSB1c2VkIHRvIHBhc3MgYSBVUkwgdG8gdGhpcyBzZWxlY3QuXG4gKlxuICogYGBgXG4gKiA8bW9uc3Rlci1zZWxlY3QgZGF0YS1tb25zdGVyLXVybD1cImh0dHBzOi8vZXhhbXBsZS5jb20vXCI+PC9tb25zdGVyLXNlbGVjdD5cbiAqIGBgYFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGluaXRPcHRpb25zRnJvbUFyZ3VtZW50cygpIHtcblx0Y29uc3Qgb3B0aW9ucyA9IHt9O1xuXG5cdGNvbnN0IHVybCA9IHRoaXMuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1VSTCk7XG5cblx0aWYgKGlzU3RyaW5nKHVybCkpIHtcblx0XHRvcHRpb25zW1widXJsXCJdID0gbmV3IFVSTCh1cmwsIGRvY3VtZW50LmxvY2F0aW9uKS50b1N0cmluZygpO1xuXHR9XG5cblx0aWYgKHRoaXMuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1JFTE9BRCkpIHtcblx0XHRvcHRpb25zW1wicmVsb2FkXCJdID0gdGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fUkVMT0FEKS50b0xvd2VyQ2FzZSgpO1xuXHR9XG5cblx0cmV0dXJuIG9wdGlvbnM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBtaXNzaW5nIGRlZmF1bHQgc2xvdFxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSBtaXNzaW5nIHVybFxuICogQHRocm93cyB7RXJyb3J9IHdlIHdvbid0IGJlIGFibGUgdG8gcmVhZCB0aGUgZGF0YVxuICogQHRocm93cyB7RXJyb3J9IHJlcXVlc3QgZmFpbGVkXG4gKiBAdGhyb3dzIHtFcnJvcn0gbm90IGZvdW5kXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5kZWZpbmVkIHN0YXR1cyBvciB0eXBlXG4gKiBAZmlyZXMgbW9uc3Rlci1mZXRjaGVkXG4gKi9cbmZ1bmN0aW9uIGluaXRJbnRlcnNlY3Rpb25PYnNlcnZlcigpIHtcblx0aWYgKHRoaXNbaW50ZXJzZWN0aW9uT2JzZXJ2ZXJXYXNJbml0aWFsaXplZF0gPT09IHRydWUpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzW2ludGVyc2VjdGlvbk9ic2VydmVyV2FzSW5pdGlhbGl6ZWRdID0gdHJ1ZTtcblxuXHRjb25zdCBvcHRpb25zID0ge1xuXHRcdHRocmVzaG9sZDogWzAuNV0sXG5cdH07XG5cblx0Y29uc3QgY2FsbGJhY2sgPSAoZW50cmllcywgb2JzZXJ2ZXIpID0+IHtcblx0XHRmb3IgKGNvbnN0IFssIGVudHJ5XSBvZiBlbnRyaWVzLmVudHJpZXMoKSkge1xuXHRcdFx0aWYgKGVudHJ5LmlzSW50ZXJzZWN0aW5nID09PSB0cnVlKSB7XG5cdFx0XHRcdGlmICh0aGlzLmdldE9wdGlvbihcInJlbG9hZFwiKSA9PT0gXCJvbnNob3dcIikge1xuXHRcdFx0XHRcdG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0bG9hZENvbnRlbnQuY2FsbCh0aGlzKTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUudG9TdHJpbmcoKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0Y29uc3Qgb2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoY2FsbGJhY2ssIG9wdGlvbnMpO1xuXHRvYnNlcnZlci5vYnNlcnZlKHRoaXMpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdGhyb3dzIHtFcnJvcn0gbWlzc2luZyBkZWZhdWx0IHNsb3RcbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKiBAdGhyb3dzIHtFcnJvcn0gbWlzc2luZyB1cmxcbiAqIEB0aHJvd3Mge0Vycm9yfSB3ZSB3b24ndCBiZSBhYmxlIHRvIHJlYWQgdGhlIGRhdGFcbiAqIEB0aHJvd3Mge0Vycm9yfSByZXF1ZXN0IGZhaWxlZFxuICogQHRocm93cyB7RXJyb3J9IG5vdCBmb3VuZFxuICogQHRocm93cyB7RXJyb3J9IHVuZGVmaW5lZCBzdGF0dXMgb3IgdHlwZVxuICogQHRocm93cyB7RXJyb3J9IGNsaWVudCBlcnJvclxuICogQHRocm93cyB7RXJyb3J9IHVuZGVmaW5lZCBzdGF0dXMgb3IgdHlwZVxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2ZcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG4gKiBAZmlyZXMgbW9uc3Rlci1mZXRjaGVkXG4gKi9cbmZ1bmN0aW9uIGxvYWRDb250ZW50KCkge1xuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHRjb25zdCB1cmwgPSB0aGlzLmdldE9wdGlvbihcInVybFwiLCB1bmRlZmluZWQpO1xuXHRpZiAoIWlzU3RyaW5nKHVybCkgfHwgdXJsID09PSBcIlwiKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibWlzc2luZyB1cmxcIik7XG5cdH1cblxuXHRjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb24oXCJmZXRjaFwiLCB7fSk7XG5cblx0Y29uc3QgZGVmYXVsdFNsb3QgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihcInNsb3RbbmFtZT1kZWZhdWx0XVwiKTtcblx0aWYgKCEoZGVmYXVsdFNsb3QgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nIGRlZmF1bHQgc2xvdFwiKTtcblx0fVxuXG5cdGRlZmF1bHRTbG90LnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG5cblx0bGV0IGNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09Y29udGFpbmVyXWAsXG5cdCk7XG5cdGlmICghKGNvbnRhaW5lciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdFx0Y29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcblx0XHRjb250YWluZXIuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9ST0xFLCBcImNvbnRhaW5lclwiKTtcblx0XHR0aGlzLnNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTtcblx0fVxuXG5cdGxvYWRBbmRBc3NpZ25Db250ZW50KGNvbnRhaW5lciwgdXJsLCBvcHRpb25zKVxuXHRcdC50aGVuKCgpID0+IHtcblx0XHRcdGRlZmF1bHRTbG90LnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcblx0XHRcdHJ1blByb2Nlc3NvcnMuY2FsbCh0aGlzKTtcblx0XHR9KVxuXHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0dGhyb3cgZTtcblx0XHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7cnVuUHJvY2Vzc29yc31cbiAqL1xuZnVuY3Rpb24gcnVuUHJvY2Vzc29ycygpIHtcblx0Y29uc3QgcHJvY2Vzc29ycyA9IHRoaXMuZ2V0T3B0aW9uKFwicHJvY2Vzc29yc1wiKTtcblx0aWYgKCFpc0FycmF5KHByb2Nlc3NvcnMpKSByZXR1cm47XG5cblx0Zm9yIChjb25zdCBbLCBwcm9jZXNzb3JdIG9mIHByb2Nlc3NvcnMuZW50cmllcygpKSB7XG5cdFx0Y29uc3Qgc291cmNlID0gcHJvY2Vzc29yPy5zb3VyY2U7XG5cdFx0Y29uc3QgZGVzdGluYXRpb24gPSBwcm9jZXNzb3I/LmRlc3RpbmF0aW9uO1xuXG5cdFx0aWYgKGlzU3RyaW5nKHNvdXJjZSkgJiYgaXNTdHJpbmcoZGVzdGluYXRpb24pKSB7XG5cdFx0XHRjb25zdCBzb3VyY2VOb2RlID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3Ioc291cmNlKTtcblx0XHRcdGNvbnN0IGRlc3RpbmF0aW9uTm9kZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZGVzdGluYXRpb24pO1xuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdHNvdXJjZU5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJlxuXHRcdFx0XHRkZXN0aW5hdGlvbk5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudFxuXHRcdFx0KSB7XG5cdFx0XHRcdGRlc3RpbmF0aW9uTm9kZS5pbm5lckhUTUwgPSBzb3VyY2VOb2RlLmNsb25lTm9kZSh0cnVlKS5pbm5lckhUTUw7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPHNsb3QgbmFtZT1cImRlZmF1bHRcIj48L3Nsb3Q+XG4gICAgYDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KFRlbXBsYXRlKTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIDIwMjQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICovXG5cbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0VSUk9STUVTU0FHRSB9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBIb3N0U3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgSG9zdFN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRIb3N0U3R5bGVTaGVldC5pbnNlcnRSdWxlKFxuXHRcdGBcbkBsYXllciBob3N0IHsgXG4uYmxvY2t7ZGlzcGxheTpibG9ja30uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmdyaWR7ZGlzcGxheTpncmlkfS5pbmxpbmUtZ3JpZHtkaXNwbGF5OmlubGluZS1ncmlkfS5mbGV4e2Rpc3BsYXk6ZmxleH0uaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleH0uaGlkZGVuLC5oaWRlLC5ub25le2Rpc3BsYXk6bm9uZX0udmlzaWJsZXt2aXNpYmlsaXR5OnZpc2libGV9LmludmlzaWJsZXt2aXNpYmlsaXR5OmhpZGRlbn06d2hlcmUoaHRtbCl7bGluZS1oZWlnaHQ6MS4xNTstd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6MTAwJTstbW96LXRleHQtc2l6ZS1hZGp1c3Q6MTAwJTt0ZXh0LXNpemUtYWRqdXN0OjEwMCV9OndoZXJlKGgxKXtmb250LXNpemU6MmVtO21hcmdpbi1ibG9jay1lbmQ6LjY3ZW07bWFyZ2luLWJsb2NrLXN0YXJ0Oi42N2VtfTp3aGVyZShkbCxvbCx1bCkgOndoZXJlKGRsLG9sLHVsKXttYXJnaW4tYmxvY2stZW5kOjA7bWFyZ2luLWJsb2NrLXN0YXJ0OjB9OndoZXJlKGhyKXtib3gtc2l6aW5nOmNvbnRlbnQtYm94O2NvbG9yOmluaGVyaXQ7aGVpZ2h0OjB9OndoZXJlKGFiYnJbdGl0bGVdKXt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOy13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWR9OndoZXJlKGIsc3Ryb25nKXtmb250LXdlaWdodDpib2xkZXJ9OndoZXJlKGNvZGUsa2JkLHByZSxzYW1wKXtmb250LWZhbWlseTptb25vc3BhY2UsbW9ub3NwYWNlO2ZvbnQtc2l6ZToxZW19OndoZXJlKHNtYWxsKXtmb250LXNpemU6ODAlfTp3aGVyZSh0YWJsZSl7Ym9yZGVyLWNvbG9yOmN1cnJlbnRDb2xvcjt0ZXh0LWluZGVudDowfTp3aGVyZShidXR0b24saW5wdXQsc2VsZWN0KXttYXJnaW46MH06d2hlcmUoYnV0dG9uKXt0ZXh0LXRyYW5zZm9ybTpub25lfTp3aGVyZShidXR0b24saW5wdXQ6aXMoW3R5cGU9YnV0dG9uIGldLFt0eXBlPXJlc2V0IGldLFt0eXBlPXN1Ym1pdCBpXSkpey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b259OndoZXJlKHByb2dyZXNzKXt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX06d2hlcmUoc2VsZWN0KXt0ZXh0LXRyYW5zZm9ybTpub25lfTp3aGVyZSh0ZXh0YXJlYSl7bWFyZ2luOjB9OndoZXJlKGlucHV0W3R5cGU9c2VhcmNoIGldKXstd2Via2l0LWFwcGVhcmFuY2U6dGV4dGZpZWxkO291dGxpbmUtb2Zmc2V0Oi0ycHh9Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbntoZWlnaHQ6YXV0b306Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6aW5oZXJpdDtvcGFjaXR5Oi41NH06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbnstd2Via2l0LWFwcGVhcmFuY2U6YnV0dG9uO2ZvbnQ6aW5oZXJpdH06d2hlcmUoYnV0dG9uLGlucHV0OmlzKFt0eXBlPWJ1dHRvbiBpXSxbdHlwZT1jb2xvciBpXSxbdHlwZT1yZXNldCBpXSxbdHlwZT1zdWJtaXQgaV0pKTo6LW1vei1mb2N1cy1pbm5lcntib3JkZXItc3R5bGU6bm9uZTtwYWRkaW5nOjB9OndoZXJlKGJ1dHRvbixpbnB1dDppcyhbdHlwZT1idXR0b24gaV0sW3R5cGU9Y29sb3IgaV0sW3R5cGU9cmVzZXQgaV0sW3R5cGU9c3VibWl0IGldKSk6Oi1tb3otZm9jdXNyaW5ne291dGxpbmU6MXB4IGRvdHRlZCBCdXR0b25UZXh0fTp3aGVyZSg6LW1vei11aS1pbnZhbGlkKXtib3gtc2hhZG93Om5vbmV9OndoZXJlKGRpYWxvZyl7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjpzb2xpZDtjb2xvcjojMDAwO2hlaWdodDotbW96LWZpdC1jb250ZW50O2hlaWdodDpmaXQtY29udGVudDtsZWZ0OjA7bWFyZ2luOmF1dG87cGFkZGluZzoxZW07cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt3aWR0aDotbW96LWZpdC1jb250ZW50O3dpZHRoOmZpdC1jb250ZW50fTp3aGVyZShkaWFsb2c6bm90KFtvcGVuXSkpe2Rpc3BsYXk6bm9uZX06d2hlcmUoc3VtbWFyeSl7ZGlzcGxheTpsaXN0LWl0ZW19aHRtbHtoZWlnaHQ6MTAwJX1ib2R5LGh0bWx7bWluLWhlaWdodDpjYWxjKDEwMHZoIC0gNDBweCl9Ym9keXtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWFyZ2luOjA7cGFkZGluZzowO3dvcmQtYnJlYWs6YnJlYWstd29yZH0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMywubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLTB7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1zdHlsZTpub25lO2JvcmRlci13aWR0aDowfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0yLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMywubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0yLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0zLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9aW5wdXQsbWV0ZXIscHJvZ3Jlc3Msc2VsZWN0LHRleHRhcmVhe2FjY2VudC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXdpZHRoKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOjEwMCU7bWFyZ2luOjA7b3V0bGluZTpub25lfWlucHV0LHNlbGVjdCx0ZXh0YXJlYXtoZWlnaHQ6LW1vei1maXQtY29udGVudDtoZWlnaHQ6Zml0LWNvbnRlbnQ7cGFkZGluZzouNHJlbSAuNnJlbX10ZXh0YXJlYXttaW4taGVpZ2h0OjZyZW07cmVzaXplOnZlcnRpY2FsfWlucHV0W3R5cGU9Y29sb3Jde2hlaWdodDoycmVtO21hcmdpbjowO3BhZGRpbmc6LjFyZW07d2lkdGg6MnJlbX1pbnB1dDpob3Zlcjpub3QoW3R5cGU9cmFkaW9dKTpub3QoW3R5cGU9Y2hlY2tib3hdKTpub3QoW3R5cGU9cmFuZ2VdKSxzZWxlY3Q6aG92ZXIsdGV4dGFyZWE6aG92ZXJ7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMik7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC44cyxjb2xvciAuMjVzIC4wODMzMzMzMzMzc31pbnB1dDpmb2N1cyxzZWxlY3Q6Zm9jdXMsdGV4dGFyZWE6Zm9jdXN7b3V0bGluZToxcHggZGFzaGVkIHZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTMpO291dGxpbmUtb2Zmc2V0OjNweH1AZm9udC1mYWNle2ZvbnQtZGlzcGxheTpzd2FwO2ZvbnQtZmFtaWx5OlJhbGV3YXk7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6MzAwO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi94LWZvbnQtd29mZjI7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R01nQUJBQUFBQUZKNEFCSUFBQUFBdDNBQUFGSVFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdvRThHKzQ2SElVOEJtQS9VMVJCVkVRQWhRZ0lnUW9KbnhRUkNBcUJ1Z3lCbW5BTGhDSUFBVFlDSkFPSVFBUWdCWVVVQnlBTWd4d2JmYVFYYUplZm1OejBab2wzdjYwY1BlWk1wRzRISlNqazVxSUlOZzZDR01nbFpmLy9uM0Ywak9HR0RSQTFyWGVJbmNKSVVrTkhHbjY5cU1SRFU4WmFqanM5VWJzbXRucW5FM3YzdnFpUW1mUlFwTGtLVzZRWndhbDZzNUlVaUpOVVNVRy9Pd29EWTZCNjc1T2pTamtEU1NNdTJwZWRwdTl2SklMVWxKZDcwN0QrZUxIcGpZREk0ZTF1RG5MakhIdnhwRFhHTXlkdUxMbjFxdDBGQ1FPeUZzSlpFMStrSnEzVCtJZTdCSkZJTk9BTmJpOXZUVXpoSTdXNEdtVUwwbFdqVC9GUVFpL20rK3h1UFAwMm9tUkhlNXBuNERnZk5aZm4rUjl6OTc5dG1FZU5hcTFSeFJxSFRqVFBOQTJKRkVnckhkby9udC9XLzV6YmdHQ3hpYTZFa1ZpQTJGaFlHSXRSbUUxWnZWVXZxdFN0YjdNdnJkM1c3K3QyKzBYZG9Ubnp6allicDdtU0hMQUNraE1XZ0NUTDZzMFd2MEFVb2hKZkVxRTNvcFBkNThpa0puS2xvKzN1YWVTSFlKNmZjSWNYamQrcktVRXNhRWxUcWxVbFZSbS9OK2UvOGlQMEw1QUtvek5sSjMvOWlCd3NoTTZ2NUpJVUp5a2dUM2Zkck9tcTZMY3MrWitxL1hzQVhGeEVFaVFJVWFLb3NGbjdjdFQrN0JCUzVkcURvbEpYdW5ibDdydHR6RC92Mzg0TGZ0SmFnRkZBTFlQRTVBN2duTXJaQmh0NGxYcXNiWkttYmRxMFR0T21wbWdOaXVnTTJQWUJjNzNNcmpxN0dMc29YSGNUcHQ5dVB2RkR6OGVOM2crc3hyUFFBdzZEVEZOcC9PWkk5aWluTml0WmhSbXBRT0NrZG9CZEFOalZXbGF2TWl0d0ROSlgvcFlJQWtWd25PUC92VzV4em9NdzdTQUZBS1UrWnova25QL1o5aitPZGZyTDhLZTJ2ZEtibXBodXhKU3VMOEVVQWdnSElpQkhQKzQ0NEVEenYxUFRRM1lrT2NPU2xUSG1qNlVzZGZvMkwrL2pwWWU3SUhXY1FVZ2Nna3BMRlIxWVRXOENHS1FYOWI4R0ZBQUFIOXRvNFJIUTZHTHZGUnJpNERpd1R6QUFERE1LRFByL2ZaM1YvcWRnUG1rR3pLVEVtV0VYYjdRM3R0Z1RZcW8yblA2Lys5N1hmK0YvOUpIQVZzSUljQUNCWndSeWtHVDdnQ1I4Vm9oSmNVT09TRGppU2JBcGhNb3ptMkpScHRCdFVXNjlYYk5GRzNJVnkyS0xvazQ4L0xmc201MjdJYXFCTE11QmJPRkl3ZUZVZDAxdmVMK1k4eFdodHpjcVRtMkNJVGM1ZUxKd1NJNGZZbExZRklWSEFzLy9UNTNONC9ZeDFoS0dVK0hTcUVyZHBQUG5zNmZxcVdKc05iWmFDbFF0amxPTFVNc2hjZG9BNVRRc3M0SkxjOTBTeENPTU1VSzRLUDlOc2hwenBYNHZ3eEtDaENBU1JFUkUvTEtzV1JsSndOS0FjVG5YQWhFeTNyMUtIY1phL1lkWDU4NDIwL2lhWG10R2hvQ0FpSWlBUjIzdi9QOStLVEFDQU41aGRrQzN4VUM0RUxzZ2d2a1Iya3JFallTRXYwQktTbUhDaEl2WU9DQUprS1FneVlNTTJRb1VNekNvMTZCSjg1cUFXQ0NkSGVrM0FCME9ETDFMcTBQZ1RlM2hTdzJmaGk0WGhQdWV1UVdFSDZ4dElFUUFiRzJObTVvVjU0UUZQK3lLZ08yRDRUNXQvd3oyWFc5Mi9ycHFwTFRTSVA4cVY5dkx2T2RzME5MV3lYNTFLNm9mYnZQWkUxcGFmN3czMThDOVp0aHE3ZjMyYmZ1TDY0VlpIdzUxNFlzbTVsZ2ZOYmZHN1c5bHNVQTRFR3o3MjN2eHdHenA0ZlJSK21QOExzNUI3S0IyZURKWGM2eHdsRzY5MDJ1ZzdBekxBOE5ZMjFCMmRCL1A1cWZPVjh0MW9ueUw1alpERGZRSTVSZzhEOThGdkhzdmNsSHVKc3JkdnNKcnBjL1RyL2d1L0VmWkp6WFV6cFdhRGo3TTcrVVA4LzhFa0FBVmFBUy9DUitYcy9KTjRZYUljTzF4SFpjVWFNTWJrbHJwS3k3TmZRSktRY1VSYWdvR21DVytIQTZFTnZiZzMzc2wycElZUm1FOWJJSGIwbUE2a2s2bE41R2R5TU41RWJtUWh4SEtsd01nVDU4Y2d3N3BkVVJ6N25mTWNRZmNVM3ZJY3pWa2RyaFg4WEhxNDAxMnRGT2Q3a1QvYTdwN204M1dBNzFGN2FPOU0rZGp2ZGQ2ajdmeG0rRDFQdTN6M3VpcnZtdXl6YTUzdHJ2OTNsVGI4MlJUMkthRlZVS01OUDM2QnZRTUNvMEdzRWRrTDhzK3pMZzFFeGJNME5nQ1dBeGd6ZjgyREcxS1hNZmM0cmpOY1FmSEt4U0N1UnVCSTVBb2RERERrR2RWOENuVlZFbUVNYWluNFNhMEFYVEkwUkJOcE9ZQUxWcTFhVjl2eEppVXpIS1dDaXM2bXAwQnVreDA2OUdyNzRzblZOYnNvQ21rVk1vcDUrcERHYVd6MnNMRHIyaU50K29aTzBiMzZZU0lqV2N4dm5sTjB4MFZobFlvVzRVUmpYWEt5TEczWTNxb0xkRWF6SEFFRW9WdU1sM0REZUVSVnBHL2plVEVSMENVWkVVMW1vdHFGb2l3SkZLVWFERmlhY1NsQkpyRWpTUUtKL0NTRlNtU0trMTYxUWxrZEtleVNYWXpzZFhLaTZJOWlrTkpNdENVS2xPdVFxVXExVkhUMXpxNitsemZRTkFJYTVKcFJvdldhRVA3Wnh1Tm1Uak1MQll1cTNYVVRnTmRSRGQ2VXE5QTMzY2J4QXp4RERPTjBJeGFOVmF4ZC8vcy9hanhBRTZKblBiRkdaa3VDM3VhTlU4RXNEU0xaVm14T2oxUGQ4SFF4WFNwZWRrWGF3Ylc2d1pvOCs2RHJpdVFGRnc1SXB2bkpoNi9aZ0ZKSzkzMGFFTTJYSjN5SkIwREhvcGhicWcwdXJrdk1JZ1lsdGJHUlBjZGtkN1ZqL05WNHBiQWJhKy9FNEJqQ2c5cDVaZXJpL3BkTTBDRy83dFhaTnhWRSs2YllhdlFuNnVtV3d5M0ZYZjZnZytYbkF0SERnamtQTmlVYnFwb3d2RFV2YlJsY2o1WFpIWXpWOEppNE5sMXZqc09ock1heE9IeGVEd2Vqei9WSUhKWG42SDB3aGc2cUZPRVVxUW8wV0xFMG9oTENUS0oweVE1TFU5eVJRcFNwVWxmWm5BU0JrV3BsQ2xYb1ZLVjZxaWJUQnRNbVFLWVlXSFZVVWZ0R0l0NjJsZG5NSDNFcGlVMHFWUXFIYkNMeE9VK0U0LzFYTGZCRWh6S2hnVWNnVVNoZnh3bUR6OUc1RVJBQUhMN0ZIUktReXJud3V4UWY1cmhIQkVCUklvU0xVWXN6VWJjNHJ0TWRwbDI2RmdkNTV0Z1FHOHgvZkFaMkp6SXZHYm1scmNYQW0zd1hLYTdFbGZQY1MydHhmcStlZ2ZpSEdvRE14eUJSS0h2eTNTSjMwUTZWOCs2bWRmWnNhRlYzZU9VS3NXTXlua2h5TDF1NFZJMEwxU0pMSXhYeVl6cEx5TnFpV3owWFRwa2FUeW4xWkR0aTkwbVkwMnYwdFVxdHpTQ2wrcXJLN3JJdXYxdjlSRDBzZ3hxR2JKb0dHZkVrbEUxWXpyMjhPMWwyS2V3WDlONEFEYU4xYjdMMElhUlRYT3V5OXlpdTgycE93SFFCQytwbGRDck9tSzBNZy9yMXZSWUVtM0RCRWNnVWVnbVV4MDNHNCt3aXRRZ09mRVJFQ1ZaVVkzbTR0bUVJdndVS1VxMEdMRTA0bElDVHVJMHlUcXRGY2xFQ2xLbFNhODZXRVozSkp2c0ZXaTdJeEtKT0J3T2g4UGhjRVRyUk4zdERwbE1KcE5oUklhaXFBaUdZUmdtY2Jrc3k0Tm96L3JvZlFMN0tjYWxORDBGT1czUkdadU9CUjJ4bVZNeGtVZ2tEbDBYN3VKaXV0UzhiTkdhRSt2L1pRT3dxZTg2R0lJZUVzQ3VvdldZZkNxMnR2cE1PQk43TXpPNjhHV1hMaHRtZ1cyZmZlSHAxTXU3cXdYNU5Ed1RrcENTY2VmQmt4ZHZmaW5BUklSSVVhTEZpS1VSbHhJQWlaRTByVnE2NUlvVVNaVW12ZXFVTXJwcy96MVpXRVo1WUJnR0FBQUFBQUNBMFdac2QxQ3ArSHcrbjIvY09sazRyRHBTbDFLM0hyMzZqZzFDVHR3ek9jTnVDWFlOZ2lEWWhvdEgxb2dPTFJTdXg4bmlsNHIyaVlhdjBub3J6WHZaMm5aalpMZmFLRCtWUmdIL2ZnTm1wa0ZiaGdpR2lVYWNHZlhObUs0OUZQdlk5dHZiY1RtNzUrM2ZkYW1XNllTdHdrZHphQ0haY3ZxMENTNGlVNVptTnhMWEdCZS9yUW9Iak1QMS9RRUdWTVpGSmdiRERKLzVUM2V5QmN2R1BTcVRpbUpjQytZUVVqcUd2Mm5DN3EzbkIwRE9xdjJHM1Z2bEloS0lXOE1SU0JTNnlaVGlOR0ZYK1JHQ0RIczhQWUlkVGpkQVVBeXZRa3dTQ3BwaE5kMjBtcHVNalFYS0JRa1dJalFwbUpSVUtZeEtYY0xEYzZrSWZIYVRLYU9NU2M0TXNWUllRMGV6VTZGTHBWdVAzdExIdXdwcllmdGhpd2lIRkFXa1NwbVdSdCs2bko2VTE4Q3V5Sjg1ajJ4MGIwZDdOOXBpYnEwbGI0Tm5VK3BPN3RFVUxpaGRVTzJocnB0Z1lYQ3N4QkZBM2xRMm5tRmMzRmJSakdCZ0NkNkJVSDdxblhCYmFjanNLOTlSZklETUFGa0Jzb08rblpnOFAwQkJnTUlBdFFFYW45V1FFczlNQUhORzg1NTR3YStBcm5xdlRUanBHUzdlL2lsUG1qQVJQbW5zeFdrZEFBUnlPTDl5QWh5bXg3U0dLbGs3R2g0OHZEdk5mZGcrSVRCWnBEOWd6Z01JQnd3Qms1dG1rRVhJcXFNTWFFVGcvSFVlMjZvTFRUcDR3NGc5VWtaNWJnYnhFSHRDeVRMWVBIbUpVcTN1SnBxenZTTmN1bWJCZFhZUXNrdTFDOTJOOGpUdkRGRVUwcnY4MTdnbXFzR2pQZlJ1Tmp2ZXJURG1IQ0U0cStxYnpPanVJSXZSYURoeloxL1ZKVXBoaGlPUUtIUXdzWjVUamd1QUI4Q3VLcitZSU1LZXdJb01PNXh4OWU0QUVCVERTWXBtMk9UeThvSW95WW9hamVqVVFiOEp3RC9YQjVpU3N3VWlnaEFzUkdoUzBDZ3pKelhNQ1RVMVhFWkhhVEFYVENRU2ljWGJZNFZDb1JnTEV4c3RsZEN0eFoxYVVubHV0R2h0T1F0MTgvUlVkVnBrREJ2YlM0bkVvTkZvTkJxTkZpZFhuMFdKTEpDclU4Q1VicXFNaFpHcG0rRjhFYkJJVWFMRmlLVVJseEtFRWlWVkxWTnlSZ3BTcFVtdnVnQVpoQUdseXBTclVLbEt0YnBtQTZ3clFMY2V2ZnFhRTdEVFdzNllIbTBFMmRjbGlXV3NXRTNubVM3RzViNnVHVm5Qbk51eXlXYkh3eERqcFdrNk0rajIwZVlNTFEvMDNWTW1LbTRabmdsSlNNbTQ4K0RKaXplL0tyZENrVk1sS3N5SW1tZVpmMEdReXdKQkVGeEMvcmdnQ0lJZ0NJSXo5MGJERXdNVGo4ZmpBVUF4ZFM2VnNEY3MxZzh3ZllDWHJOZDk4U0g4Z2FqazV2dVVQcWc0WERQOUptN29HV3ZHWHhTZEVMTGZyc0VTRXNtV1hUY00zY0x0SEZTR2JTSEJBamNDaVVJWEpxSG5NbE9MUkJMYXNuVUsyU3V4MXpxbk1CL1pNR094L3pQdThvaERBREFBT0FBQ0FBbUFBa0FEWUhnbENrQ3VMVkFpU0lLRkNQMGtoV05LUEZVd2JkeUwrc0RCeWVna2FKMldFTXRXckU2LzR2cFc3RzZlNG1EdzBCZnhaaEZ0OUd2ZmhQRUFteWQ0Y010VXFzUGw0YXk3R3VhazV0ME41Mk9Pd0phQmdTTkhzazJOaDdxRVdaWVZxOGUra3N4amozRUtTWGc4TE5pbFFxRlF6RTFmdjV0dnBRUUZ0RklteUx0aXZUZVdrUUNrNVpSZTJRaUoyWnJMWURWODZNQllXWDV4QVB1bmsxeW50WjJ4NmFiTnJpWEFzaFdyY2ZrVTYzeS9qL20rZ256TjhJM1l0eHpmQ2VPaUFQaTdZaDF3QkJLRnpzNzJXcmxpZldiM24rc09ta1NpelhIVFhwbXZBbk9nZWErN1M4RjFFSFA4blU0SW5GWTRRNW1XcDNCQUxsZXNhN0J6NEZ1T2JFNEVYUm5peWs4aHRDT2lrOHZsY3NXWUlLcjQvY0hNM1hYSWNjeU9Ec0JYSDlSM05JQmpVc2QxZmlkajBpaW5INXJpWmZVT0RUaUZRdWx6ZWF4NytqSFpWeXhmMzhVM3hMZHIrVTd1NDNINTlLZWdLOTVKdnd2eXFuM0lneEx5VUcyWTRRZ2tDdjFCVEQrSXZDTVBNZzBsVllSQm5TSVFrYUpFaXhGTEl5NGxDQ1QyaG0wc0VBZ0VKVERycWI0Z0oySllvelNVS1ZlaFVwWHFiTnJaK1poZWpiKzVySHJHemNjTFFoSlNNdTQ4ZVBMaXphL0t6UW5NQ0VLd0VLRkpZWUd5TnlLMWx0SlUvSjZXbUZ4VXFMc0luWFNzMzRzNEFKblROUDlKVjgxWlcwOGJ3b3h3ak1vR2crMWdQUHh3QU1lWmtCRUUrVnN1cHN4bzljV1M1aXZuYVNVcEZKUTFURWJ0ZXlLak1BTGxTUWg2UkszZ0NDUUszZVFVNGpiRUM3dXEvQXlDREh1Q0JRVHNjTWJWdXdNVUJCVERROXlRRk0yd3lSbnlFU3hLc3FKR1UzUmlFRFBYTDlEWjVGNElwQXVTWUNGQ2s4SUdaVk1GQ2RPa0x1RTFJS1ZGbEdneFltbkVOZU5CQ1ZTSmtuSkVqK1NNRkVtVkpyM3FtREtJekdsa1NiYmQ5SExrMWZ4KzNlK1ZDcG1Lb2hnbHlVQlZxa3k1Q3BXcVZLY2FVRzNVbGZwb2tNYmF4TkFzTFZxMWFVOUdJbE9mdkpsTXBwakpaREpiUmp0YU5Xay9yeldvTUlJYU5XZXNhdXQwM3lNTzJQeElJNk1CRTkxcWZvRHl4Q1N3Z0NPUUtIU1Q2UVZ1RGg1aEZYbHB0cmdNanlCS3NxSWFMMTdHY2RrQTU4QThnQ1kvMzJQTGJ3a25DUUJBTm10Q3c2Tm9CclZJcXpidE9Vc1dVNDA1bEN3WjF0RHg1cDFvN1RFZEpCZ1NHTDc3N0JFam85NGFvOW9qdEs5YnY1L2hBTThSYTQ2U2pnbWRlTHpORE1oaVVIbnU3UW1EREJaK0lVRmlUY0pvSGNsSWtTcE4rbVpHY1RjSDVJY0JwY3FVUjBXb1ZLVTY2cVozdXNlZ0YzbW4rYkZscmlxOUJtbW5WN1BiN0cwUnRDYXNPd0tRWkVnaDQ4NkRKeS9lL0o2SnJ6MnJ2ejExOFBrOFBwL1A1eS85TlBKaXI5Z0p3eWxLclV5NUNwV3FWRWZkVkZOdGhyV2dWWnYyWklTWWVyZUJvSmRIS2VhZWcwSjdVQmVxUjhTTzFhbjNwRkFNS0x3SXRWU0orK0ZtbmlIRXNGRVFXK3Bla29NNUhxZjUwbHhCTEx2OXpDTUFaVFBRMTduOVg1a0hGWDdjNlEySnZiK0tTSXNTTFVZc2piaG12SkVFV3hMSEpEWE1TSzVJa1ZScDBxdU9JS09Mekdsa1NiYmQ5SExreVZlZ01CVzVVS3drR1d3cFZhWmNoVXBWcXFPbWo5cDVxbE5UMy8vMXhzaUFSQ0tSU0FCQUJRREFnRUFnRUY0a2NIUEE0eS9mMm03WUdvNUFvdENWU1NJYVRlVkdGQUFseDFSSVpSdkdjNWowSkllb2N4enpwS3RjYXljeEkxaFN5Vis2MS9HQ3d1ekFNZlFNdzZMVEtkOG9zRkFjck5WRFBJZUZzNkxIRnhsTnl0aWVEamI4R09RUWJoU0l0ajAyZ0lnOE9WYlVmZ0YvR3RrYUNzTU1SeUJSNkQ1NW1jUGpMYllrSThKMHdKd1hmL00xbm85ZGpUVmRXaHBpRDRNamtDajBHWVk2a1kxTjVRNEVLZ1VoV0lqUXBOQ2piS29TQ05PaVhvWmJWRjkvenNMZEdZR2dWYk16d0p3ejgrbXFVMnNqWTFCcmNqbDNmRy9zZno2cTdvZzJZMzR2ZnBkVWhlL0NaMkhIOHlBQS94UThEM215QUlETkFWc0NBSmJabnhpMmNINXMyY1JKd1ZhT20yV1dzdFBHWnhZWkExS0lSN210M0F6QW10a0ZVSTVpbERjQW0yUXdvakZYQjZyM0lzQnlWcTVsK3ROYWJjdHJGK1FyQVErbGtpVVd6aUhHS1djNXUxRlVkTUtNaG54aXhuQVU0bGthQW5vL25odVNjRW5IclE2UUVkb1IyRklRNEdGbllIa2ZCZ0pUd05sNDJyUUg3ZFY2SUJLeDRHRElQVFNQQXRZSGN1YS9VemVQMWVwWkpOYXRPQVNxRkVRa1lDV1NqS29tY3ZKNFEvbFltUjZiV2lFV1dWSUZBTmFJVE9WdzJaVkh6cjVNekMvMGkvRDFrd0VXVkQvelQ5YjZERzYzMmlLNFVxQzdUUDJVTmJua0VZODY0WFlpS2xXK0JTM0ZVS3hIRFFZbys4Qjl5ejF3NGgwN0JhNFFra3pMMExHSkdJcnJaK2NOWHVCM1B3NmNlZHBBTVU2R3pSUXFEVzdudEIrY1dpc0Z5bzNXQ21RakwwTW1Yb0JxTldSRklaSTdnRFhodFNjdDhMcEJma0hzUlE2WHBWZklSdlpCVThwODVGNGhIOEVLbnhtRVltdStLNmNZWTNnUWUxKy9UekpBSVJGMWNLdk5tbjJRME04YU9Xc1hqVDlqdkJDcjUyMXhxdFdWSTZhcExwZWhLY3hadVc5QldMSjNRR3FmOUpUaXV2dlUwd2RnaHcvOElCUklYMVZ1TlF5c0JxU3RWTlBYWkR0TCtOaXZjd2kxUGdELzVPMG95bTJKKzc4b24wcnhnQTlPQ2xhMGdOMEpFUEhZL1lQNG5oSWF3YkVKMkhsVW5SOURiemZXTVBBdnhrcnRBMTR4NmpyQW1ZVWNnUmZSbFpubll4czJ5K293TER3a1MyVmszZGZqQUFVVklKZXdEMDZ0eitBdXc2cElxeFRsNGRtam9HbFlRWERNYjMxRkpQcys2N2o5Uk5nc0hZZ3d3T2NZdHVmSzZWaENMTXVjNE5GVGJ2OXBFUWpGTmpOcjBMV0FKQjNYR0htNHg3bkJSZlhtSFFoUTBienFtT3RWVG55ZVM2eDFIYkMvYXJqL1hlLzdxTU9sN00wZVVuRFBnaHlpc0Y4cUlvRmJoZkVncXlENG8zbzJLNVJMck1KWUNhQzVnckh3dXBETnNWb1hGSTMrOVdZUGExbHd2T3A5MWZ2YW5HaG9tSmlwOTd1cE5IbU9IK3liMStoTElwZGRyMjFSaUExM0ppYjc5azZwVEIzZEZBbzcxNHBRMXlSWmJUWE15ZEE3bVFFOVJGR2hML094ckhqZFJubzBYZGY5eUVlMG5YRmZPZXJ6WStETzNmaUJXQkZNQW1xRmJPZWdrQXFYVFZvNWZTNjZ5T0lWbExDU2RjcDY4dWU0eUplbGhVUHRVNlZtMmpuTkFQcXdXYU5ubnYxdzdKUDZ4UVphd1NJUGxPRk1FVUd1elBDQmIyZEpVeWdZNlE5d3I2SlVqSnI2TlpjYkVZd0wvY3haZmVjODJMT3NNSzQ5eFg2MjhQOE5xM1RERWNJQVBad3doTHc1OGhQS2s1SlNvREJKZ2lUTEVTdFBBNTBtN1NxWW1OU3g2Rk52MGlTalUwNHptVGJOWXM0Q3F6ZkpmbG1DL1laSmdOQndEQWFCaThlQkhUNUhBazRJUWtLdVJFUjJjZUhDalN0WFloSmVNTjY4RWZ6NHdmanpKeEVnZ0pTY25FeWdVQXdsSlhkaDFKeUVDK2NoZ2dZcFRoeEt2SGgyRWlSeWxpU0pwMlRwS0RvNlcyVElzRldtVEY2eTVFRHk1RU1LRlBCV3FCQmZrUklDQmxWbzFhcFJhdFN5VTZmT1Z2WHErV2pRd0ZlVEpuNmF0ZU13TWZGbjBjRmVwMDRCdW5UWm9sczNwRWNQdmw2OWtENTkrQ1pOMnVhVVU0Uk9PNDFyMmpTdU9mTjJXckJBNkUweVpNa000Ync1aHdzV25DNWFjcmhreGVteU5ac3JOdHl1MnZLNFpzZHR6WjdIT3N3R0V3dWhrUmlNN1RnNEVDNGVuQjFuaUpBUWJvdWRFQkdSSFZ5SUlSTGVjRDU4SVg3ODRQejVRd0lFMkVsT1RxUVJYSEFRMTZVNGhDN2dnQ0VBZzBZQUJ3b0tEcnVFbDYrR3FiRk5QTFdHQXhEQTIrMm1VU05PaUJnN3QwU2tTMzFveGVNa2pyRm4ySUlqSnpqTVNVaE91a2tvRUpTaWp5R2d4MklhLzlaYzAzYituOCtncWtnUzI4czc1NmNqVXAzendUcitSUGU2U2VybFVkVDVhZXVnZS9BSGdCejlGNGlud0U4cStINE92SVczOUZiZVdyeS9CcU12di9LU3VwaTlIa3JWZWZHNVo0SWF2Zmp5V3krcDRzVlh5aGVWVDVueElxL3pidmJqb3FYWDFaZTBoajBBWUZNUVpzMkJrQWdGSUdGd3hIWU5COVhkYW13cjNzNy9DSWZnWVppZmhUOWdhMTB5d3R6ZFpZL2hjbmVUWWEva2l6OEtDQm9yaEZaNGcxbFhCR0dXS0E3NTJFbElkOWFMSzRTRk5kVjMyOWJHN1JJSUtVNEdFdmhqcjhMVTF3akEyM3M5Qm1nYkdqUTk3b1VLd3FpT3Z5UFpFUklDS0l6QTZXVHBXUXdWNm9KbGUzVlRsajVUeVBLT2ptNE5idk9nL1Q5R1ZmeE5BOWhGaFFEU3cvZlJqcENGMlc4T0E2OGlDeVQrZjJIL0RHOEM2ZSttMXgvSUk4NzlOQTM1cndBQTY4UVdBWWdsVFRBc1lBQ0VxZU4rNm15M3dZb0E0RitqTm9XY05TOE9pYWpRUVA3eU1GYXdJalFSZ1NVTUxJMFE3bjFSQVg2UkY4WUtJSUpVb1ozeWdDK1EyUW9zQ2t0TzVsdU1IR1VhRTNlTGU4VmowaHFwV0FwSUVhbE9hcEc2cmRXKzdxUkFGY0NlWWlrQTRCUFRzTGgvd1VXZk9ieDlSNlU4cWZBNFNLbjVnN1lDWEFTUUNRQllOM2tBLy8xTjFmL2s2Uy8wWS8xb0JyNzRHWHh4KzJOZjB1Ky83Z3ZxQy9MenowRWY5T1JCcWpuMVBnTG9aUThiKzFaMGM4Z04vbC8yRFdmTm1mS3BYMTAzN3oyTHhuM2x0QlhUYkU1WjhJUHZmRy9HSm9TRHk0NkFNeFkyRGdFaEVURUpHU1VNVG9XZ3BrY3hNREo3MjRSMy9lSDE4U0NDUzRJa3lYUXlaTXFTcjBDaElzVU1hdFNwMTZCSk15TVRNNHRPYi9uTlczN3l2di81Mk9jKzhZWGYvVHN1M0xMTWVUOWJkWHQyY05ldlh2THlhUGpGRFUrTmdSY051T0IxcjNuRExCSUdSeU5RR0R4T3lqbW9WSU9MaDYrVUdBd0Frb1A4d0pPT2hoYkpCTlV2aHBVTkxacURVNkowS1ZLbHliT2JYZzZ0RWhWS2xhbFM3bHVWMnJWbzFjYXFWZ2R2bmFNUUNjdVdYSEhWNWNpNFdVUW1VbVUwTU1BbXRnUXNCU3p0RjNSYkJCZXdGSUF3NWw0MWlqY2JCbVFwNnkzQUVOdDgyZEFrd2p4bno3UDc4VlVVREIvVm11QWQreDU2Y1ArK3ZYdkdSa2VHaDFZc1g3WjB5ZWpJOE9LYkZ5MWNNRFE0TUgvZTNEbXorL3Q2ZTdxN09qdmEyM0t0TGRsTU9wVnNibXJjZ1dBMDdQY2VmZVRoaDdxZGRxdlp1UCt1ZEcyMWxzVEFQK2Z6NmRyMW1vcCswTEoxVEVnZ1M2Q3V2QzVveUFpdWIwMTNZUE1MYll6VGJPREFUWDVZRWlZeWNwVTVJVmNQZkpEbEorb091ZHN2TE9VeUNIQTBlcFNoUmQ0ZHVINEtnRXBNRU9XWkdiNUVGY01qVkprQlVCVUJSWmtBMlpLTlJzQU4xKzEweEs4dGk1THZ1OUNRT2Nad3hvYnRWSllTTllTRkkzL2V6d2lMSmRRRWxWQVZxYkZmVmo3R0ZZS1V3aUwyTTljU2RnTm04TEhjc0FJbHYzdCtwVHppa2dqUzhMaG5wUkE0eURwYk83QmNla2hMSVJ0eXJzbzNoT0ZiaVUyOUZnbUtZNUo4MnhSZDhxeWxzRldrRUgvYmFuOGxuRHYzWnk1ZTREVkdpWjNPUVJEQkQ0NjRYbldUbW9GRFI1MnVYSmt6bGZ5Q1JOMGpGVUxlcVpWTE5RRVhtVkVsRG90Wk5PZml6UTRSTGJpMEszVmZRaXVPS09FU01GVHYxM1R2aTZDVnlVN1d4TW1LVzNVYnREbW5JMTd5WDNIY253amdvZm9VNG1hU1VsTG5JUG9kMHc4eXY2Nm9XSU1kU2lHUFV2MnRnbUE0RWRhMTBGcm50UW0vZWx0aGZ3dWhBSFdLcytKcy8zenF0VHhTZmNaZFd2TUJrRWtvMk9XZDVoOFZ4a2wxd1EwdFdxZlh4am5iWFR3RHc1b21XWjVxZHZISURiS1l4eWc5NzBwSnZ6QXo4bjM1T0xSa2ZTYmREVHBaZ05NOWxRSm0yaVUzL0gwbmd4dkgyOWRBZVkyUURRdnhaNHpTaHBRYmhBakJtd1ZiSTdGN0l2SjdraU4xRkpHV051QW4wek1FeVJsMGgyTjE3SkNLaWdDUEtmeTluSE5PdHp3bkl6d21ndXZaWi9UTUJjUWxIQWZ3NUV4SERzWEd1RnVTZW8zeUNKblpSYjNXN1VmM2FOWjczRVlLN2tPU2xWSnN3WVl5SkN0Y0dNMUdyajk4Y25IaGtGbXU3UGRPd24xV3pSMGh4VG5SVThhQkpteHFIOXdRSUljL2ZVV0JIajhxcklTamJPMmhQVzdsUklhb0RKcEtwNldyVkhiMG9sNUxuS0x5RmoyVEhnbXk5NkFwWjYvbHExaU5QWTh2d0RLejVncytFL0NaSUNQd2NhY3FjblJpcjFSelBzbkNnUVZhZzVVTXJLR0o2eTQreVBZWkk3eWpLVEpLU1VONG9VVDdHVGRpeE8wRGtmY1RVZG1rYUJ6cVBiaTVTaUtmSmFKRERLWTFabDEydTFSQU9rd1NwN3pIbjZRa2FpcE5McjZFMHBIZ21JUTBPM3hCbldTeVkyMGN1SDJ6V1l4TlEzdzJtRndQOHhrNWNLZURzZFVha0tsTEhOSkc4czV4enloTnR0RUJpUkROUXNjQ2wydjJaQW4xQ2l0eE1FakxNd0c5cDFkRHRkcWl3SlROQ2ZMU3FSUzBBdFZ1cVFQSXNRQ1JaSW04eDY2SU53cFRDTUpDMnZZSHJOTVdNdzVUeEo0Vmk0SGdSUm9raWdGS1BUcG40NUpZZ3hxaDBib3FndUhQNklna1FUS1ZQcDlCbUN0eVNPSmQ2YnlFMGxRMWRua3RsY2lHVW1wUU85dEJuNkFCUkJ2WWJoL29YYXBuQ0M3NUdHSXhsOFcrWlpPam9IVWh1N05DMjVVSm9MZG92QzFWb0FpMkZBWHArTTROMUR5QXpVVWplU3Y1d0c3WmJmOUVjVDZqTWJzSjFCcFkvSnRvbDdOMGpwUWhnTGhjWWZZZVVaMkJYcUdVSDg1UThSUnR6MmZRZG56bmxsQjE4ZENETTNCTTBSVm1MWEdQRlZSakVkUWhMUDlEaUp2cE56b1VBdmVnOVpBTGZJalRWYjRldDV2UE05QVVWQzExSllCTXlFcEpvTGF3SFZzM0EwQ05EMGNnMi94blhKTitJSlc0QUtmMUdTVWEzVkJjdU1yWGxVWVR1Z1pvT3pQZldLUnVjOHFZTW1sT01Ld2w3eDBrS3Rzd2xmMlpSc3JqMWhnMnl6cUJhUGxBYU1sa1JDN3pHNFdhSGM4QUJybHkwbURWZ1BoS2c2MEtJR3NsbjFGRlFHb0JIWTFUR3Y5S2dKcDNWb28zT0JJdUE0ODVvcmgwYzBORzJMWDZ5U0E5c0djQmFuMlFob2JnbmlKNkZldHVLU0hYTHA1ZWNOMUZpMW8zTWdNbUtkdzBJckZoajgxS2lVTER2UkpESTVLU1VsS0FGSUt4VnpDdWdVeFhwR2daZkFnUEVFOTBOZXpLenB4dkhiUFRWcTJkT2FxODQyRU45dXlUeksyRll0K1dkUVpEZTRVYmVCMThzd3ZsUVVDaUZyYkwreUM3V3FselpPVWIyVnBZUVp1MW1QVWtUMlh5NzI2TmowZ3BVbW9FV0llci9GSmtna2diQUFMNERoLzBsbzVKREJNQzdrZzBEdHpQb2dGMEs3TFdMWFIwNlBFTjBvb0hIMWx1ZUprUURQSVdVNk1aTzZMYTJzZ3VuRjUwOEMybFlHWlBsY3gyWEoxdHVYRmJyZTUxQ0lVV1NoYjRmb2o2TGdHY21sZytVQ2lTaXhjSDlySjZUVEpkQUMyNEFwR2JzYTVoYS9OSXIraDlJZWFYSUNpWnU4QzRKTHpXVDdnS1lUNzYzOStBQWpMbHBwZFhBTGJtdC96Y2RaOG5mSS9zd1hOYlpkdzltUjFTTzdJZmdaS0MvNE1Dd3BDdzVzRDFqNDB3SXViZHRwQk5jc1ZIbXVVUHZoYWtzeE05RjhCTGtzUTM2TS9CT0pBUXQ4VEJCU1ViU29qd0szMkVZYmVRcnp1WUdhOW5XRmhPS1RsUUJ3OUNGajlqVEc0SjNOZ0R2ZXVBZzFVT2hiNEtBcDlwSGdhTUpLYjBTbG9MN0RvZEhzTGpwdFhoa3ZPYWFvZTBDSGpEVTZ0a0tDQjQyZ1pKelJEY1BvMnhOZUpyWkR4Y1hlVjNWMjhKd2swSEpoVTA4THRHRFFNcUtPUDNUR29BSTZZbmJFa1J3RFJrM080a2k2MUlucVQ4MTJ4S2JpaW9CTUdFNURMcE1LcmlPcG92Rkx0YkllOXhxTXEvU1RZc3kwWlFGNXlhWmF2cC9hK0g3dWJEbnBTc2lCd0pGYWdCTWk3d1ZXYzdVSHFsbXczZmNMdnZtblZSU0ZZUlFFbmd4bkh2dXg4UTFDVjdBSUF1QUlEZEFIMUErTHdnK2dIZ1A0QzlRTGdCQU5hZXZPVHdvcU1IVW9OZ21WbUV5REk3THJ4TEhEWFhFazdaQU1JOXpPYkd5Q0dEYms2RzVVZ25UcFBjMytqWlFNallHVXl1TlhnK00vVGliSTJjQnhnSndrYjBiZ2k0ZlpmNUFCQ1dUN0JEU004WWVTL0o4bm80SXN4UVlrNTF3WkttNDRDanc2cFRmUWpYalVMdjllalBPVktKM1BoUzJpSWZ1bEFLNnNNTHV6WTVPbi9iSHpoWkROMkdhUGg0NjZaTFVVWkVtV0ozWFJHKzhBK3Y1WU9PbEZJTVJGQjQrTGpXeXVTdVNPZXAzcXJQV3JOQm9SdkdEV2JncWN1OTcxNWtYejJCRU1GVVpYZmh2TDlVRC9PdW02NHd6ODFJa3NTWHZadUlPcWNZUkNwdCtEVWlnc3VFM1E3YnZnOHo5cUV6ZjhtZmVIRm41NXNKUlV1TFl4UTNmTUhadU83dmhrOE0wOTFReExCWjFTZTJpUU5WMGRqRXVDRlRibnlqZWFxTld0RFVPYnFKZUpzQnVuSVE3UEtXcXZIUFBGeEVYVE1LUmpmQURjK005Yjc1V2l0S2VOMlRUd1BNYjBQQTlxMkZVVUdTYUxoc2xqREFVQU1NTGRLWVFIVmpjd3BnWUtvd2FVUUMxNnJyaHhCRFJVL2FaZ2JFb1VzK0ExMFR4a3Nua1NMalpheXlSYStQaEtLTmpCVDhMb1NxcnFCR2lxR1NSaUY1VEJDN2g1M0Npb2VGNFdGTVYxeks1akRQb2JqSGdQNWE5c0JERDFpTzg0V2NMOTRDbzVFZGNJa0hsTmZKdGZtbUFFdCtBcDFKYXR3N3Y1THhiU1UzbWVLQ1dzMTNjb2RRVVlsSlZ2Kzh0bXVyQUdvRTFucE1oWmV4VExvUEwwa2c3VWV5Mk1MRXV2TTB5NDVLbHdHbFd4QWhuSGZOalphV05jTTZySmJNaW1pMCtzenY5QkJxT3V0ZlBWRWpIakliTmQ1cGFhTm1iSDNGTEp2aTF0bE94TnNvdGRpT3dUOW5lUE83K2VTR0ZGVHowVGFkOVlkbUEvcEo4cUZhNWdzZmFvaXN3NjFBbnQ4T3ZqKzI0MldLM1JWcitjeU9DR1RYVFo3WnEzeUhKUUxSK3FmdVNiZ1BsNFVvVW5uRk1xbHVIOUFQOFJpTzFrYWxzeGVlSFhua3VOSWU5KzYwNnppaDFzOE9LODZla01yNnFzQnM4cnVVcTZ4RkgwZ1VmVnNPWWFuM1dTdEFSZjdGNTB2NndkdUtiMFl2MmJzcDJ2Q3dTcUZhTUFycklMdllWMHF4L1RzNmNEOS9SMHZtYjdxK1VqNFFKREhmTHdxYTFMMllTYUtlNm9jV1hUNkVoK1Z3dWFSeUhzcEx0aVVNZWZwSlJVWUl2ZE9wNVlGKy9NaGdCQjJwZndHamtLY2NmK3dTSStCVnpPWExHZzFjeFc0RFZmOUhPYWFIaVNzMC9SM2RmU2k4aGRGeFloN013bEYvanlod0RhZ0YvQ2UyejBod3dGNFg1SmJEc0ZKdUF3TTBOcXRqc0dNRENWNkdLMTloalVBRGJSTjd5R2RoT2g4dXdITDMwR3pxeWxtY3Y3YUlnN1FvbHpQbkx3cmJqY052MzZYS2FGWno0aThQVkhoZVEzb1FwYXFMSkRJM1NEa0VYTEhNQ0pUWmFQS3lmUVRVV3I4NnFIY1c2WlRlNW9NN3ZhdE5EWGtGbGNrVVA2R1NVUWhWV2l0RjJXNzE5ZlBPWkhlN2c4V3I3Rm0yNHk4aEhrVG1SZ1Y3dmpQUlhQcTRkRDgwYTBhWmc0M2ZCVjV0V3Z2STZBQllPZ2ZHdXRpOGkva3F4UXVMRUdvRzFvNWZUbW02bnNXWnJkbHVFMmJyMExna2RTaDdGMU1TNXBEMERaRHc4VWl0V0tGbXVzeDJIMjF4RC9ibTd4eHM4T0gxbGlZSlNWdzRZdWp3aHhTMzBCdzI1QjdhQ2JHdGdIWlVMSW02dWVhdHhleXByVmtxK2xGbkJtUlZBZDJvVVQ1Q1Y2UExrWFg0a2FLYmRnVG1GaGplc28vS2pDOEltbGdiTHlyR0szOFM3SmpxdDFFNWFDTWlYb3dhK1VQZ3kzYko1NmRvSElneFBQZ2J3SnJkV3RsT0dKN01DTiswNWk2VjdVbWppamhTbUkvZW9kWGpJMld4UUhqYW1mVk9TUHluV0R0NThib3k4eXZMTjRxOTNKaHBMNXBXQm5SRzZsYWExcEVWNW0vdUlBcFJON1JYblRqSXJtbkEyc0hrWnBHY0c2eXM2WmVXWHo2ZDhuVFRmdFpoUU9iYUJYbUxWTVZxWmtnTkRGZ0RpNlhsVFltOWNVMldZanB6U1NGQVNCdHFxc1NvbGlVUEtVZmJBRDErcGliV1o1eWFZemkvZm1Xc0hSWGljai85TnAwWnpmaVp0SjMxMTFlZGdmQXRYOFcrbW12MjUxZGZFd0ZBdHFHOHR6MnlEekxpRHR2YWJlclcrSnFOYmhDeHRTZ3JNNnE0c2xUSlM0MXhhQ3BCR2hwcERycmlRUVdWN05nZGo0RjZoU1VqbW9MU0JzdFpUZHZkZmhBWW5yQmpVaXptK2d3VnU4enFoc1diM3gvRis1WEVVRFVUUVhRQ3h3ZEh4eTV2aTZZSG5zMjhVaUpoMG43eElXQzM1bDJzR1ZRcVNMSGYxQ043Z0NRS2tlR2dSOGFUV3FXL0JsZjVLQ0FRZ1RtdUxDeE16UmpqTElzUjRRZzNWam82K2F2WHRtc0NKb1pNT2tjYnpGMUtPSEdEN1pHeWtsY1dNeHNlaURzU21Vd0NTUmJ4TStPTVZZZ3hLZ3d2UjVaTk1DUjQxT1F1SHN6dVExK2E3K3VmM2dNZVAzR1JHWEhNMEdPZGJHaGZmN3pJYVJFQitPeHZUaDA5OEJzM2YvREFZM3BvRHlyUVV1NlRFSHlVaDVkdGNpYytPQ2hRRmplRitSRHo0dHZxZEQ5RnRPQ2lBMmtmSUh2ZWsyUExSZnRBTzhkeFl1NGUwTGl6N1dCeXkrd0R4WDZaR3VyWmFicnV6R3pXb08rbUMrWkZrbkdzS1R1THpOSENKQzVIOGdVekZzNTNXckJWTWdLM0lsT0JGTC9CRVFXbTlqVG1jUjhVRWswTEovUUVNRGZnUEhUWkNxcVdGL29LZWV2NFVSNHFHVlVTNXp4QjBOZnlyUWRuVDh3ZmRFYUx0cGNqM0poNEZhL0dUNlljNVp1QWkyRGp1d2MrSWIrbk9JN3c2TWFxTytDdkthMGp6YWVmNERxUW9lVUlBa2RrbTV1NW5QTzdabXdUekFBNVZVZnhvdVMyR0ZBSU1BaEExUytmWVlWSXBQY1hpRkxGQ2ptZ2VPRXdBVWRESUh3NjBQZ3BKTkQyT0ZSRmJ3SU1FYXhocEtXVzcyWDdsbXc4T1lXT0Z3MmRac24yZE52OEpwK2ZGSTRaaG1UOXdaY1phOWdTdUFCVHJ1OGh3NWswbWVDajdTc2U5ZEtnZ0pQUlJnVXNlVVZIYWsreHg4TVExRkdEaE1xYXVsbW5QTG5BdERZQUNTOU9XNkpleGUxRis0dzl2Smt6NVV4K3FnVzg1amt4d3p3NXdXQVc1bUhaeWZ6T1JiTk16Q09jNWpkVnBoWnNVcHNlK3BHZ1JweG1aNCtaODlpOXBPM3h4aGc1UmgrLzRiVUNqRXBoNjBPUDEvR1dacldvcmk3YVpXdVFpK0xaSndZcDBiTk1lZlpod3g0OTlpbjZGSmNBSzREbUFHVElpRldKeERUendsSGZ6ZnphdlFZZDR5WU15RFNZUENMTm1KQ3p1RkZicG81RXVpaVFaSm1RbHJJemtFeEJHbUtwMkxUamlraVBzS2ZQdkYySmRENHYxRS9zMmUyNnN4Z0NydUNCNk15Wkxic0lQMlRkOXVuTTdyc3N0UDJINkZCZ1VsT0I2MEMvelk0cTNReTBwcm5jQVM3SlpNODEyeVlkSlpMNDRnSUROdTQ2MllSYVR6eTVIS3E3TGp4akZPY2J4YVhacEIwcmJaYlVQVE9iLzdxeGtmVFBPZ1ovZEtLUmdHejdiZklzb1EwRHh2M3o5ODNMTjRZb3ZvYWJtTloybmpPS0huWjlzUmRUR2pKcXhJT1lNaWRuSndSWkRwa1QyMnBwa2RJVU5YRlNCaFhLSEd1QmgraGwzK2o1YlNyMlhNTzdTQjNWS2FYMkJqck9NbTE0cStSc09HQkhzd1lGTnIra1lMenFBTTAzbmpCOTlHanFqa2FEeE1mT2FOclc2RTlWTWxCaWxUVnhjV1JpQUpldi9QK1Q0YTROYllxRXNrZHNTNGE0clZLTEtRSk5CSlFGYlNyZmp0Qm1Nb0VVS1N2amZBbEFsWVRqUzBSaDFOSFV0TVdIVzRGbjMwWVUwSTRJOUFQVTlyd3R1TitiZW5sU2N0aUVUUlltNGc0ajd0NEFKSkdvY2Vva09SZ1FNOHowZkg5TkxMYVNRUkU4V2NDNEZma2FzQ2JaaFg2azRzU2JHWE5OTGRJdm1RSE9CR29HVjR0Z05LMHM5M3hmQXZyaTdlbU1BaGFVZ2NHSXl5ZmZlWFNwYkhnOS9kOG05NXU4L3QrVHU3L3QrN2E0VHgvc28vZTVOUHd6c3B2S1JyTlRqMXpwL2svYi96WDJvRS8vLzJTV2UrTnF2Z21SZFUwYUtqd1JJdjE2cEU1RlVlbnpiM283NUFqZ0hFT2tJRjkrR1hJOWZFTllLSDljUmtQeXFRMUdoUFhTK0xMR25tWDJlRzU5azVUWnV5ckZYTTlEbVQ3S2w0TG1tUnpZWUxpNVIyZkRrc0tJYmZDNXJreGdBRGI2UjJ1VGZlbzEvSmFKUDRaMnRRYnY3NWlidUc5dlFhK29NK1hhdWlLYUhaczkxckl5UVcrckJtSW9ndjRZRXpoMzE5ZmR0NmVncjg2NWRXVjU2NHJKK0pTSytHN2lVK0llYmovZUx4Zkk5aEZYT3ZFeGNWZE5DOTVTeHgwcDlJL2FVejJhVll4WHZhcTVhOWppbTcybVNjYnNBejJMYTBPT2JyMHZDUTlZSGRoQXBMbFhhL1dNdW93K2MvK3FWdjBEeXFNcFhMSm1mRUxYOEVhRGJ1MXh2K0VXdEpCdm9vVDBhK2tXMk9sbTQyWTNBa1JtRFFZWDZQcmpaV3Y5MnBKa1VCTmlYNmdvMmRMaGU4WWpFUU8xd3lxY3YvUDJqMnVpNUgyUHl5dE9kM0pPQU03dTFFMjIvRnFuZlVScmR2YjA0aTdvWDRORHJ5ZkpMUm91REk3YW1ydlZxOXcrN2FwMDE0akZGeHF4Ti9lcVY3cjgyYW1hYzcxMjVVQ3d1VWRYNitpbEFpbGt2c1d1R0FoVnFvMk8rVk9LK2RXQ2ZRY1o3U3FDK09xOS9yck1QSU16dU1TYTdLRzJGak5naUxjazMvK281VnRETjFGeERqUnBzaXhNM2pad3l3U2tDc0lyeEJHbG1leEtPdXlYU3F3WDFJd1dqS25VYU5Tcnh2N216cU51VGxVVVZacTAzY2xhK3cvTGRCTzZXODVzVWJ0SUtJWVZLTDZIN0hoV1VyT3I0Q0ZxWlBEeG0rL1doNVJQSHFYNExSTnlJZ2pQRjBlVWxESVR0SE9lcXJidW4vVlRpZlVLd1dpaG1JcEFvMTROL3AvZ1Nxemc3bHVqMHI3V0tLTjZPQ1B4bDRYTEIxQmJ3S0VHdll3cXl6VWJPN25OcXZySG03dG9mcUJNMGRMbmRxdXZkRUxCOG1CNW4xelBXT2phNUpBcVNFUXJYZENIM1BEZXduMmgrd29KYS9XU3dzWWhLOU1qV3NsMDY3b3QzQUZEc2xYbjg3ZFNoaVJudnZtYTZCT3Y4blFPbUhVUVRSd3ZYVzkvRDZyUWNTMDJYajMzRGJJL3Z6K2ZYSWJ1U3BWdlZxdkgxWGZOdlh1dW1oZzNWbXkrclFoeWpWOXlYblJhMmIybExkYS9qSDhiYmFVdDdONmE0UGlsVFpjM21ibGpKYm95em92Y291OHV6L3VQSU5Eejg4NFJPajZ3VzIxMHR5TzBvckZVb1BYWE5RYms5WkpYR1Zrcm9HNlpNeTlYVVBMYTB6NnJTZ3FsZ1hLbGJWQmJxNDBxY1g5My90MFBjWnZza1ZKbHRNMU95Ymh2S2t5dEtPWU0vdVYwc1ZnVFVlSUJGV0ZnMnVVTzBEZnpGOWJXQlh0akRqdlNJSGxWMjgya25CbEwvYi85TmpxNHdNK01CZ3RuRVJlRDVseldZRFMyR3Ewdi8wQ2JtNlJhMTN3SDVBL3JrdHlmTGUzWTJzOHE5cnhiL0t1ckdJam1ISHBRL3NhOUYrM0cxalJsTm1Zb1F3NVgwOFgyZnZyVFBtS1NaRHhkak12VXBMSkhwRGtkQmJjeHdSVDZCeEdDQnNReDFLcnRTVG1zZUFDWkJ4MndrVjNqZkxUWTBJSjZna2k3S2VRY1h1Z0wrdWJRajVYUGJ0RG96Qm16b2N0UmErek4ya3lRdXdZYktYM25jb08wV2xrUXNJL09DWHJjZmI3UEdISmZ5ZjRUUHY4T1ZpMnRzSnliWXpjYk1yZ3JCT1hHSlB1L09obUJFSlVmamduaUdDNko3d2dDdUdDOHh5VlJGTmtVbmQ1QVZxSDNMSEF5ODF3azB1UnlKV0dkYjhqNzJJQzBsYzdOYjJzZ2ZNMjZlVU8yWWZidysxbUtTbVgwSmxQV1pHdzFVWWI2REdreVpTbERlc050MWJVWGwwWjVvNkVmZTUwQVdteHNRZDFCcE1NWWRBNHY5UHVEUXdIWGlIOTZDYjVzTWVmU0JvTWhaOFNhTS9xLzlDNmJMQzVOR1kwcEtnaFpPLzMycVQwVlVBWXFIV0RHcVZhSmg4VFZIOTdOMFJuaWthcGR5bDJuQkpJWlZCcWp3MUNyamdMYTZXQXpabkIzZVlFaG9zckw1QVlJWjJhMmN4cm5iTC9XUmlVUmZkaTA0TXhzMjZUc0cxT2xZdi9QSDRjQWhUb2dKK21hdUVJbGllMElBckpMSk5EbWJITW9FMHFyLzZpTG5DU2oxNGQ4Tkg1cWFWVzlRUkF0SW91MHk3Tmt0dXhFWE9MVUdjNmsyMkQ5L1RjMnMvamZuUkFoSklTaGpBdSs2VzIxNEQxUU1mRUJlOG5nSStRa2VjT21OSC83K1NtZE1QR2RiaUUweWF0Z3Y3TnZHcjhLQmJDeUlBbDAybG9jZEVlNjJ1dmNhN3VzMmRjdXlmSzV5Q0wxc3ZKZWQ2MnpMcndTOG5SN25kaWgyUldOQnZoU3Q3b3BXNHMzS0d2OUo0STRuOGZTS0NQdVhxTkFlYU5SVUNRdk5tYVZUQkJ1TnhqaE5uY3dpeG9NR2RSenJtOHpHdUQyelNuelowWWJ1akpXa3lsck0vVFlkOVlkRW95bWpOM1liYjNyVnJid1hCenBvUFdKdkIzVWVjODcxNSs1c2JYQ0taTnBrQ0s0MkRma2M0MkV3cTdSUlg2ZlBvMjVvdWY1aWRHV2V0ODhwMnRrV3FLd2hGZ0pXSE10UnJNNVo1eTEvNjdUM0NSUjYxc3hYNHpVdTZNcEZEZG5ySWJ1V2dmVnphbmYyRnRKS2Nzbi82ck1yU25LYUV6YTArYytIQ3BtK3J6L2VjZ1RSTisvL2JWV1l3cDNoYUdjM205ZE1qdFFoeE4rMkNHSW9TcEpmSHNRd2dYanZhUmxQM3RIQ0FLMCtkTzgycGhRR2plWWM5Wjl1TzR1bmF3MFUrdXdwTlNPcUxSTmJkWDBORHVzbUE4T1ZUMG5rRFY5SlZBRjRBRlJuTTh0TmpUaHRTRlpUbTlBMmwyQk5LYTM1cW4yRXlkSVQySjBMbzc3b1RuUWt6YWQvMnN4RVVTSy94cEFyYnJ1bEIxZ0pqMzVmVkdXMjBNV2FWWTlXdVJtM1ZJeHJlYmY0dHArNVpLT3g1c2hQVk5uSklFdVA4Y1c4WXNjU2gzcGFwSlM5clI4OFBET0xMRUdPamNYRWIrNWEvK2xac2wvaEc5T2d2dWJ2Q2QvY1gyZFRoVktLQTJWNmdyNUp4d0k4WnhBQ0ZvcDlXdXVhdk50MmxRemFhTHFGR3F2R2hUU2drdVI4b2Irc0JZT2UvVmRvdTlGRk05NTZyaFE4TU9ZZUZOQUdYaUdmR1pVT2JwTW1PVkx2aVQ1L21NNENiZlRyUzQ4anRpOWYvbkpDZGN4NlMyek5QbkovTHhIdE5qcnFhdGZLREtTNU0xdloxQ3ZmZjc2NTJTSVZwK2VRYm9BdnFBTUdWNlByNTM0ZFBhTnBzOVUzaWM5VHhLVnRuKzhTQU16SHRsWXZ2emhyeTN2Rjc1WFlIbm9xMlhMSHY3Sy9HN0JlNFUxZzRmL1dWVy9SaUh4QzcwL3o2Q09mdjdhNXpyaC9wei9KTDFLOHdhcmFPYnQxbGY2NUE5Q2MxK1pJMytVN3dHbVZZVEpvaDZTa2oxZzE1Y2MyUzU1ZDgvTHd1TFlQT0FlRUlBSUJNNGdMN29XcTJML3lUY09yUExlNVlMVThNN083dHMrZkJzbVZ2SjljTlZVRVhucTZDblNnRHNyRVBXUlJzRFpNSnNuKythRlc2S1lockdVNTJvUzVSZ2E1dm1WRlF1VkM4c2hlWVZaRmpBWjFGdmo5UW5ISDlMWGVLeSs5aWNURXl5Nmk1V3plaHVoKytxNzF4eDdGbEh0WE1TRUo2WmhoZVNRNUQ1ei9VVVZpNVNMWElsZHVPeSt4RWZNQzVEMHNRenByaVhVOVJhbi9UT0pxa0V0V0hlMnpLTnllaUorNW83aTBWVlkyNnpwWHdDbHhjZlNaRDlDNzUxL3BjeVlNdkMxNHpMSlZleFVSaC9YNG5WcVVwVUlYTGRyc0F1cFZ0VnRmdXdacjlnTE1QSWlSTXNWanE5Z2FKekdyVkpDU2NlbXdZamZQeEFCbmxUcVFGUWRqSTVITm9lMUM1TzAxWktpZ1lXQkxZQmRMTllrL1pkZXhSb1Y0U0IyZkx3MWMwWENJdm16cTBxcnlGS0JTamlUa2ZvWVp2VG83d3NyQU1IWmZ6UkE1OVlqQlpXNlAxMCt2c3BlaitFZUJaclo4dWVkMDg1NnlzQzVCRGZ3KzFjdUVvcG9yYVpVbDlZVkduTHNqUkJaRXhQTkpnS0Ixc1ptSGw2VGFBelk4RzFlR1dGTkc2S0NjK1AxSW8wdHE5TEhLWVhVZlp3L2Y4V1JOTjczQmZoNWtrZ2VxZjhaV1MyWXZrczNFajdwZnFpNzFtNW9KTWdHSTZWTjFPRjZNbzIvcjRsdWJsQVRSdDZwQmtCTjk1bnRYWXpIMlQvUHpNVitZZWk1ODV4dVRUMVlTLzgyVjdlbk5WWnJhM1ZTNk9HQmdDK3lzSVYrWTNlS1hyM0FFL0FPMHM3NWw5WVkwcFNMR3FsVUJraW9EUi94VkRxdDU3L0EzYWsrMVRkdUx1RzlhV2ZTQXhxWGI0N1JsaldxOFlDYkRBbTNZQkFHTzYrSE9RcDVtSE1kcGpFWXUxTjRENk5YQlBnSXRvbGhBK29taGNtblJkQlJOd3NnbXVVbWYrOHlGSTJJRUhsWWJHMVpNUXpCMExEa053SGtFN1RXNGZ6dTNDMHhoelYzYjJsNjFaQW42Qm1TS2VGYUtTTUlHS2xrZUE5eDY0cTkrWE5kdm41b21ZMldyd3oxOWRjeS90bU1mdzYwM09LVXJ3ajF6cTVWOTNBazg2eVpScVBGbHJSWWNxSTVwUEc4anozVGJEVFZXQzJ0dis4cUZxc0lJN0doWnlzKytUMUxYVFAzeTQvenlMY2FiVDdON2RBRTNkVHRpYmpNb3p5a1ZvS2VBR1kyeHFHNnMyS0llN1JKYWcza1RPb01aY0Q4Ym5WRUpxWUY0VnJIYTZMN2lUSnBrYk1YYzBUcU9HektuVkdhRFUySTFvV3B6VXdmNUFOVllNK2dteUUwN2dSTU1oMFdJc1p5VVVtaGh1blhXWk1tNWYrL0hidnMwOG1ES3JPcmNhNWFzRzVpRGo3YUpiWTQwWG5Pc0VaY1Vxd2JEdi9sZnJEYlVkV3B5WHFIYXRjeGJYVFRUZ2JlSjc4ZVhGNW4zenlMWlBGdnJPRGduaE9CcC92SFRhV0xXaEg2VGRuODNmUjdzdEV5L1g1djdzclFLMVhYdkYyTmFZUFJOcVJxREJpNDBmL242eFFsK0w1UTdZWis0M3BrRU45VHpBQ1ltb0d1Y1R4U2lPY3RZb0EzSmhCWnlLWFZ3anVjdkJvNUdIUnExY2lLT0wvc3VnVDRDR2htK2d3N0s4RUt4enZTdlA0eEI5WUptV1U3Snk4K0lwVTZERUExLzY0UlBjMElOVDYzU3lNWkd3UHYzOGVQczY0QzdGY0xheHUwcWM2cTZ0MFE2VkVDY0VMSmNLVmMyZ3VDSUkycWxaOSt1L25aMXdjbEdDTm9rd0RIeHI0ZVJxU0h2WHp1MU95ZnBILy96NzloQnN5elQyOTliVlU0ZGhsMWlZY1I1RW12Qk5ORWxOSTFBbG9xMXpFVUpsRjZSTkxOMHdEODhMZnY3cDArQ2I0T2JKZXEyWE5XdzF1OW9Bb05JcC9tSlh3cEsvem1oOTM1UGdRUFpSYU5STkpOUHBVZnZPZmVPTmxkaEZBbzJncUFXOFZDUWRsV0YyNzNEWkQ2YVpOeVZtNk83RmxmRGFyeWlydkU4bWZRM3k1THBIZlJIQUM0ZUpkRTh1dk1yVFhhR3FaREpPclU4MnNhRndqRVhmRHBqemdsVTRnL2RRTTRKNmEwNGp6LzFVTGNqK1RmL05GVGlOV1h5dXY5SFVBdzNBdmVCU01IL0NEdXl6U0hSOU1MZlErQlc4c0VRdEUyRUZnbUZBcUpwZFhmaC9TeTgzV09leWU1TEZpSGdLRXBKM2hsLzdXQmI0RjFybDVPV3dYSVBqS1pCeDF4b1hDMTg5d2R2eC9penVGZFhqcUNQSTFQVkY4Q09LOTZqNGRNZGprQmRLcml0U0hVN25nSjNkLzNmN3ovSjFrOEV6VDN6eFNOQmFwaCtiNnkxVFcwckZxTUtvZGMrMVMxRkgweUxxRENBdkRwdkxnL2JVRXF0ZkZmcDZweHB0bEwrS0NEVHNCMTF4MkpsNG80TDF5dktjbTlVdU1WWU1jdjZaUWNrdTlXT3V1T3NrdXJiKzRjUHBWUG50LzE0WnNiU0NkT0JlVVk1Z08zQVVlNjBTTHZ3K0JTc2FwYXlyZUVKMHBzWmYvM1doT2ZGSHpvN29OK3p6enYvM2w4ak1WcHJzeTh3RWxXWlNxTzZJUk1kdVhrVDQ5SXBXb0txQzYrcTBHdmNRazFIc2Fsa1R3eGRzTjc2dmhIckl2QVAyWVJYWkxpTkw4ckhzWGZMSmxTM01Xd3R6SGN2RGNnMytmbWJtOVQ5djViSDM5YzNEait6TGpsMmZFUzE2VnV2THVvb0pEWDA4UGo5Q3ptY1cvdTVmQjZ1NHRjaHh1eFJ2Unp5eFZ0OGJKb1ZiT3VtUlV0WXhyeHhuRE13MkV6dk54MzUzVG55Tzk2ZEQzc1cvOGwrNXpXYkozc0tWMzgyWEx5eXczS1czUmY0UG92UGsyM01xUmNvdnR5dlh5bjVpTmMrOUduaThEQ3lXc0M5aWtqSE5UZVN6TWZmRk5mN2N3Y0N2RWVmTlpMZThnbGhtRkc0UGliNGp0TkNSRUt1Ym56SlY0MXVtbUQvOEZNV3orRnZ0R0JkM0MwcHZKZDA0Y3pSVFdhKzVoeEVaZEE4eGZGYzVyakl1eGRBK3g0ejdMY3k4LzJDQTZwRGdHSDhFUGxucHJEcXNPenZJY2I4VVpGWHE1bU4xd2Q1U0xqbjQrYlB4c3ZjYXFJTlVSUm8velcyVGE5cFhqZHY5ZjNGa3VOV0t6b3p3cWdxcnhTVVhhbWVRYVhwU3lNWVdXNmw3QllvWkxGbmVIN3Iwd2htNm9DS203TWlHRkdhZkg2ZjI3c0tXYVhwZVVsM1JqMUFvV1ZOR09HRnd4WWQwbEpRTEluL3JxeHRUT21Tc0pkM0I1MWhCbXpwUm9QMlZiSVZoUjltclJMVjloWDNOdG9UVEZqRVRXbkIrbkNrN2xPVTJ2czlTTFhaZUlpa1RxZmFKYWV2d0pGeGJsRHF2ZDN2cjlEZFc3Lys2SkZBUHIvdjA3cjJRNmpRZlRRZTZMeldQUEJqZyt1ZC80UWhId2ROdlVmZEtQc3RteFp0aXFyeTdLeWdhOFl4eXNvYlY5R3F0dGo0Q3RndGJPR3ZpdnJxTTdvTTZ5T3NsdDVaWmgva3NxcWh3ZkFCclU5SkV0cjNLYkZmUkZQNGMyU200UDU3ZlN1cVdWUjdOL1hSUzV1Y0ducHJ4NVR2UUNlLzhVb1JlVHFITWpMRDhZci91YUc1SHNudXg2UkFZOTJlYnhQZUwzVHpSS0pXZTczRHZzOUhZOEN3TzRPcjN2WTYybW5wZWJwYnM4ZG1zOFVzWEVZbm9DY2NnVkVqOFBRVjVDckJLclVMSUlLbHU0NmUyY0J5SU9XNnlaYkNyWmgvVDkxUTc2NlFkVHFjSldiT2lvNlgwSisxRjlkM0lHb08zUWtCMVVoSXJMTnRKVDEvZGYvNnRkOVAvbjkwNitYRmNrcEJ3UG1Pb1RPNkhVK1hHY0lqSHdPeUxSREhxV25FQzB3K3VmSjFKS2dncEV3Y2pVUmp1RWFmZGIweWY5TElsb1VYTUNEd0w4VkxuRllDOFRVN3FWVitpclJyeS94V1MrTkxkMDFSeUJDVVRHdjkyYjVYVjFKWlA1L05UdmdIVWQxUjdmRDI0V2ZEaUNwTTIzbTEzTnhKbUt4OXVrcnJsaEY3ekM2WnJ0OCsxcmZ0ZTI0VmU0aTlIYTBhTlVKK3hYTEIvV2ZaZkVyeXBjdFg3SGlIejlsNU5MbUJKN0FUSEU4ZnZJd2RqdkdkMytDWUFqYVRra2wzL3ozd0JWajh2TW16dkRBVmJhc0FnS0cxT2ZBakltSjJXRVBac0ZNMklaYjVMZHNTTCs3Qk16NXdydk42UnF4U0ZURC8rVzdBaUQvVHZPSVdKcjlrOHQ1NVhoKzFhWDJVNnFubHhNekcyYVFjTHZ6R1hhZnQwb09jRld2RVYyWnFRckJ0RFVPNERMS3ZEOGZKaVV2UCtmdGhBZmtpZ0dRaWxOQWp0QlVZcVg0LzZlRmtzK3VDMFhIenFkS1cwN3lOa0pUem51MisvUkc2REhnZWxhYm0zejliVWQ1WHpxNDJ0alpZOXBTWHhrc2QvN21sc3RtSHZHK082WFVlMklCTXpsU3o4VnhUOFVGa2gyZVF5SiszdGYvRzJKQ2xlSHNielA5MEJiUm5DYXU5QW11YzZaUEdDUlhwSFBEbE5jOVNtWXoxUEtRbjF5ZWJoMmh2TXBRdGZiSXdycHFOTFRHMU5sbDJoeHZzRzNxYVY5TGJhdzUrZGJHYXZRcE4xc0hPeXUyd0pMZjVWSytVT25wSFQyb294djRxTW9kVldnSkg3Qk5nWkhlT3Z0ZmQvc3RLSU5yY25WU3pOeEN1cFBRa0FQMzR5c1RuUU5tdDdWYlphKzNVTnBZZ2o1WkhqQnNrS0swUVF0dHp4ZFhYcHg4ZGNPRHJ0SnZCM1l0WDM5RzZmMVRaWS9iVmZaRS9vaUo3c1VETGx0OXQvS1pEYzE1ci9ka2V1TWI0dUN1VjQ5WkVReWtuMlJZTXRtOVJRTi9sM1dHQUJYa0ZMNklvSGY4bjZkdkFraEdMeWg3YmVndmhjNFVTQ29JY1BuZXFhZVhYdmdnd0FlZHd0MndJNjQ1RFhuSzEyMUhoWUJ5alZLMDZOSzQvNDhhTHZvWFV5MnQ0U3BlL2tWMnovVFlXcXFqM2JBMkdqR3M3V2pibzdIWU9tcldvQ1VTUGJOMnVDVlJzVytFU0RYclJ2eCtjaVNaR3RYNGZiNVJLcVVkOW5udFZCcCs5SXgwWW5FSmJVVWFLV1ZOSGNYVUs4eTFuWlI3aW85RExQeWZQU3lYVENWeDE3NG5xbGw0OW9rYjNhd0lMS2h1UGFMV1BYWE51enU5MnVIRU9hSjQrZWo1dmErTnFGNUR4bVEwS0h0eXhqbmowNnA1QjlhOTRmM2FwNm8vTVZVYXZmMHpXUEpBN2hKOEtZZWM1ZVdUQXZoTTZrVko4c1V6aUlETXZLWFViNUIrSkpXNXQ5SlJtZlFvVGgrdFpuMTRvb3AxdExHdGVHWjdVOU8wbWM1bHlkV2JBellYYmR4MnArcE8vQzh6U1FWR2pPL0IzdGxEN084ODNGazJOcVZXSHBwcFdwbkVrMW4vbXBab1Y2YUpkSkhtTzdPOVFWSlN2MGh0YTdDVTRKdHljYmd0L21sRHJmNFVaOEVQZ0tVZy9DY0kvZ0dESmZXTjdFa2Urd1NiOVR1WE4xa20zQ0JlQzdJNW50NENvREFsbWk0UTFETjhRWGR2QVZnNDIwN3g5ZmZCSXJpby9ycy9LMXhhVjZSczl4czdYemtvU0MzalF5bUJvQW5jMGZNR3BCaGhwclBldHZ4OXJyZFhzem1lNFFLZ3NKOFlQcjBhYWJ1bnFnQXhNUVRRRHYrTlBjd3hqMk95TTZkdS8zZm5tai9HdjExa1BRSUJmTkJjQ3dLVHczVWdTNXdGckFBZFJ4VndSZ1c4cVFJdWgxdEhLbE9rcjlyWXkxOGZhb3dpVzJzZzY3WUdMMWpKWk1KVXdvY3E0VHVWeUIyLzdRS0s3WFFib1BHd0JxTFdRRDdXUUw3WFFINnpZUTBJSTM3bzYrMmdhQUg3MTIzZDM3Yy9QRGRjSzBJQWgvdWJFWEszQ1d3SHAyRXlQT3liSDlyWW1mMEIyUHNoQVBNc1NIWm1jZXY0RnNmdXhmMzl4ZjJ6Vi8vN0Q0c1hrYmdaaHRsOHF3WU9xSUVIMUdDZis4RWZMOU5xTTUrR3pWZjJuMi8rTUVlMG1VZXRaY0JlL1NIb2NrWWNjSjc0QnJ4NmRSZ0FvRDA0QjA3MHFjaG96WUxrV29iNjVhNXY4bWVXSm1vbUFHcHdtUElmUUJnVzVPOFdhakFIdm8xZHYveWk0OGI3YmZ3VFBaM3N4QUd2L2Flb1lRQWd2bDlLRXdEczZSNjQwZnYxd2JIeFM5SCtUOTg5clNyTmJxM25OTDFmSGx3QStFUkRPSUFmaDF6a3dSVkhXZ3VQVG1FZldLLy8zWHRONzBjZXpxWGJSSC8vczZEM2IzK1FzenpzbE5Kazc3ZDlHeGxzVENIcHh6STh1Ky9UNzc4NFF0Vzhzb0gzUStqSkJIQ1I4a3I0UnlBK2Y2dURNejRNY2pZUDk3U2h2OUhDbnA4S2YzaUdVZ3ZiZy9kRHVORHhTYUlBS01ULzIxY1o4S0Q4REwzeHVUaEZjVzJpNHA5VjdoWExXMEJWSDF5SGw0dDdQTDIvbFF1b3V6aFg3NHJ3aHYwYWtiS25wODk3UE5PN0ZIempvaXVXbEZOZXMrUC9zQmJQLzJLbkhkejh1bXZyUFpTeEZiTGl3Vnh5RFVveHBSazNsKy84ek1lUGg1UjFHQWNBN3NyVis0L3BBbUpYMjVWc2k0Z3ZBd3F4V0RUYUVGSnV5RFEyRWNuV1hxbEtvcEtwdWFuUkFEVEFoWk8wN1haYktqa2JsbldwN1IzWWFBTlRQYjRwR1RkenVVT3FkWTFXaWU4bUQzam9jVDA2VXl3UUFVbEEyMFlCb0tKbFhSQUpETWxOa01aN3lTb3RaRVFqUUkvRVVjbFdsZFdPWFZSbUNsZU9ncllXVkkxQkw3bWIrNzJlMGROcnNMMEM0ZFpzM29FS2hheHVOc25CRWJGeE1rU0VSKytaakxaSFloSlZWM214b3lWUmFVVDBxam92cmVnY1ZkUnNYamttYUZGdEVlSmxqZVFGVlFwbVUwNFFjYkNIakF6MWlVSWF3dmxPWGtPNkxSNmtYZW9tWE1valpSTlYzZnFxeDM3SGg3ZlVlZ0RWQzErWnFFd2xxNjYzemN5OTNxNTc0K3F1QXIwdHRCVXFmK0p0akZpcGMwQmEreWw1YThjbTdZek5yS05BK0lRRk8zcGYxZnJWYmUxRFNwaE5XUnRvSGVKTmhmc1hSZWV4cXZzRnFTZlU3NTZFMWl5cnNuQlpXeHBZYUdZbUlSS3ZXUzd6N09nLzdpNGdkbTRKRGFSY21oanJLMU02Ti9SYWNtT0poR2hsOVkwNEhLeGtqWi9jR3ZLQ25BcnRkdXdJZEsxSVJpaFd0c3ZvYjVIWVdWYWhDTDU3aVpaUzlTVXErRFRIODkxdUFJanlsVmVuTmExdFNpR2JIU24yelhsbnA4dXFkN25xbVBtbkN3WG14MjFYOHVQSHh6Z2ZFSXRFeTU5dHQ5K3V2N0xYZGxQb3k1bDY3MWw0TUFKMW81V29LSUYyRis2WFoxVHQ2MkxONWd1eFdXV2xFdE1reFBmZHZOeEZyWWdSMTIxUmwydmFzb0Q4ZWc2M3NGNHRRN2xRZUd4YlBlTE1DVGlxcjF3REwrdlNKZlYyKzZNWGZXOWNFTVBLMEwvODdrRWk4WTJyYjlWRHQrUDlHeUx2NWNCV0oxb3U3Y0tkRXhXZXI4alA0d3ZEU3MrejZCdVBhR0tPTC9DbWxpU2E0YnlpTHVnK21SQlJSZkJBTjdHU1owMkM0WEg4ZXBkV3IvQ0I4Z2JVWlVwZVNzNXhOUURJT1lWQTFFbUllaUtYV0taUkExVkdUQ1R4b21Pb2dPalFEY2ZYK3oxcmxPeWhuVXd0RVBaaVFEU2xTUTBYSE9WNXNpOWU2WjNxNjlCbnRDMis2dlBvUHZDKzQrMFZiVHQ0LzEvOHdYSXhHNDZtRTR3bjBIaTMvWEFRcGlMZ0FGWmcwTGo1S0grMVhCckhRbnBoVFowdiszT2pJcCs2YjBnczZ1b1NFN3FWd2p1M3RlaDlKOUJPWGMvQ3dEeS8vYVVtRnFsRkxNbUg1bFUxUjloUlV3NFNhSTMwcUZIV0FubW1TbHFvK2F0dUc0WHNzUzE1emYxU3N5bDViWjNiNHBGWDg3YXlBY2RtY1orem9laHp6b1hFZGFRU1prb29Mdm1WNExtenV4NnZFd1c3UlZDRXRXdDNkQVVLM2ZGaVoxYWRpNlZPUVhjaDZtekd6ejJoempmTUtRcVRqaWoydTJhcGppVFByYVJHSjc3YU5qVHBjZDZnUEpCV0FQOVh0YXBjV1A5eCtqTDhqZFBQemEvd3FpTnVmREF3NjNiWEtrbHJtc0FlK1FVOEpmeWZBMnZxRitSUDNZbjEzZWhoNSt1NUhyYk1SSVl3OVBMdG9YOHdPWUcxa1hlQzRlYTlaMDJNM2FNYXVuejljbnlhdlhyN0xFUVBIcStxcGhpSkh5MEpnSmdBeXN6b216M1RsbFlCQ2RiSXZST2NVZUxnTlpMdExPcEZwclgwNFdLT2dWNUFsaXc5ZXgyYk0yd2ZuWStuTnZNVi9pdnUvaE96eEZIVmJsSkRXYU5KNlNSbHVWRzlzVnEweHJWRVhUZlVLQnVNcTZnUFFYZFVzMUl5VnRTd0pXeHZoZCtpblhROUlDNUtoeEhMTXQ0Zm5Kb3N1dFlNdHFYQUxCdm5RRlFCbUhPV2RsVnIrRFRQeGxJZ2QyR01xOGxoUDQ4UkRYT3VFUU1aaTg5K1lpY1NrdGdKSUxubUxoNE9oME8wZU1xemRvOWJ5b2Z3bU8zN3VoUHJKSWRjTDcyc0U1eDh6cWlvVllta3hWRkZhNS9ibGFvM0FLZ2gva0VPQW1QdXg1YkROT1FxMWJJS3dVbUpoaVlIQzNDY21aTHZrV0ZWa1E1WmVqbkU5Y0Ivc0NJaTRsVTBrWTZldFJVTmFYdW9RTHl0SjBOb3kyb01DZ3JMaUpDZFFSM0RCT2YreXhVQ2p2TGZRRmJFZWEvVGw3MlN1Tk91cGxUK25CdGFXZ3JseXpOY1JPeHNiWC9URmRKeS8yZ3hQYTNvVTJHcFliQ2hMMnY1SDJheUlOV05RTC96bUt6WXFVQ3NyVjJhc3JlWFJMNy9jbDRhVDY3U01UQXhFZkpMd2hPaE5oWE9KdS9wMHdOL3ZDVk1xQ3p4T2pmTjVlTFJMT0NLSWMrTXIxeGU2ZkF3YkZzVzRMNGMyN20rYXRvQWRBVGJwbC9OM1JKZ2JCMG5mTTI2TGZ1S2tQUnNEU0VBMFZNVGpkRFhZN0o0Zjc4K1lGL1A0K3NoVitoY2xaVEdmeVBUbTkwdVZLUFJjQmh1dEs1Q0tXWWU5cGdhOGN1Q3FSamhjTW81eE5oNFFjWTZKUjNhazVZNDFtNVNSQjRXRkZVdHNpcUFValVTTUJaNjdQY01JZEJNYTJpY0ZKN1U3ajFXc2YxT2F5R2NxekV6QzNpQVdVYTVDaldhYzNpdjA3Q1NKUkltR0ZQYmlkM09yNVdDd0xmMis0SjJMc2JVMlVGaFZTd1RyRnFEekljNENtQk5qSkRXbFZiVGFEUWE0bVlrWHBkc2t5SjNkVFVlVDF4R3RsVElKdUZNT0duaE9sSEtraE5FR2hKejlCbCtqQWxETUNvRFFtcVp6Qld5VVZTSVBIVmM2MlFEWmc5UEhOd0ZaVERFa0lrbG1nUWlZTEJRa0Q0SFk5Vm9yS3RhQW9TTEtBRnBOY1pVU2htd0lPMnNsUldUTmpXbVZsQjhmNFJSdnVGZXh3b3FRMVprQmF2amh1SmkzZ29keWZESkt3THpBRkR2b2hhV2hEUmlKOTJqVG93bjkzNnR1d1RpM0psWWxNdHdPQ3l0MTV2RjFhQmxBbVpBODJvdE9kSUdDeDBXUUpvT3g2LzNZMW5ab2ZmbmxEbG8zYi9IOXIwU0lETG13WU91SmM5ZGFmMnRXUktBTGEzRFY5cEJHTHRtYnZhM3BDNGFKNjBSNlhxYkdhN1IrL2VUL2Q1UXFuK284b2RZOVdDK3B1eVYwMWhpQ0h3Y28yNFVwVkYxSFIwU212MTRJY3FVc05CanBZcmFYb3BCRjVKYWg2Y3FPay9KYUZYbXA4bGswSmFNZ2hDa0ZCdlFEUHpyRnBRdUFPSXNhWTJ2OTJZd3AxMGdORkVwY3JkaDd0YWVNTFJ0VE1reEd5VXhTVlZnRlNtWFphTlBzeHNZK0lacDhKR2t4cE9iQUY5TmQwYVcwUFB3bnJyOEhqQ2JCQ3Q3cGNyZE55K0gyOG02UStwWGo0OCtVTUhLQzJGTmoyUTNlZiszYVJxSHVSRCttYi81U2Vmdzk0TWFNTENmR1ZaWkNTZjZTNCtKZS9QaEIrU21LMUpmT0RVNkUxWlVxNU10NnZXYzl6YU9VOVZsa2d2cTVJemhlWHFMaFkzcDlkTVA3NW8vL2NYaExHZWZIZXphSzg4ekpWMWY4LzU1aTZyNjllUWZaWEQzMWw3NHBPYmplclBaZlJrM2M0ZngvTFV4ZVlndGJNN3V3LzFxb2U5emJZbnArVHlNQjdkVzA5L0JkeXpLYnF0ZUtIa3NHbHlRVUZiS3hkN05OZHhkRWtaQUFCQThpbE1QR3p2UlNnR0JFRHpZTVhublVGelJUSFVTZ05aN1ZVVDZrZUFlMjVwcWY5UVgxZjg0c1dEaUk5UEhFYlU0Wld0TFlMUEVUNlYwUU5tOWVsOWkwTFE5SGU5NFF2Q2x1bklFR2lSY1JtcFBtWlFwRFFubUY2a2hBQVB4dng5LzMzLy85OExILzF0U05LSWZBTUJhK3c4WjVBRjhQRy85czZJbitlNXNEZ0dnWUFBQUVNQy9IOGdqdDZ2ci8wYTlVNzdYWDBCb0tCVkNlbzdnM1lTTnQ2dlZRNldkNG4vd2xlcTlRbFpOWm0xSXp5LzJ5dWNML0FvSVJ5NERwZnVNUTMyd0pNclA2Q0xQVURmaDZ1ZUJsbHJoUmZBYjhJTjVXNWVTVmNhcE8rcmFQaSt4YnpyZlhhem83T2Q4LzdMWTFRNmcvNTZsMHBlWkJBcW8vcjR0NEY4eTMraGlDR2U0bmtBajArWFdVZ2t1L215Y2ZWMnZ4RTBaRHZxN1QrYVV0aE9VelZmOU9KQVZXQW1Bcnk1dndENG56U09mZVkyZHBVdHQyK2FBZlo2cWQwTmxMc2M0KzRrNEpXRnZmOVFUcXZ0R0xlUmpaaE9DOXhaNTFjTDNzSUQ5UTVValpkdXgyd1dxa0twdEZHVUlMWmxITHdyWklUN0ZVSmNpcEJEOGZLRTl1KzgvNGkwWDh0dmJ2T1lFM0JDUGpiSGxIanRtSXRreHZpc2kyb0V1Zkp5MElRWU56RDI2bzgrSzBiRnNsNHZZL3VJSlFIWW9lTjgrV1FRNmR3SlBTMWlKd2srejJGUzJweWU2cmMwdGJUM0I4MUxmaDJTN2hoZlVtckZ5THEwRW9taUliNTMrWUtWZTc1TE1kQXdEa0pzQ2MvMFNDc1RzeFUrWVdtL0tldWZLK1dqY3NGN1paRnpiaFRFajNwbjV5eFV0RDVWV0Rzc3VlQ3RpYy9DMk1kZkk1N3pJOXIyUUh1TlNmTDI4SnlsejVkazdFbklSUDB2dFh3eHZPMkRyTXZhcnhHSkVxNVhYTEwrTEY5Unh3ZWxJZGhOeDBiVEh0Sm9SUFJLVVRpbnlsWklFNEU5WG5hVVRRRGdveEIyTUFwQW5Ta05LNUo3dTRTdkJ0bk8vc21lLzN0MDBBdWJKL01IZlIrazhaRWNGeWdNQUJOQ1FmclEyRkl3RHRUc0IraDhjZzhNQkNJekRvU1lIQUpiQnR3YkUzWHNjNjkyL05PRFVyallsR2tnN0Y5SkFrVTdYSUtCWVc0TUQzcDdkejlITU1yc0NBckFyNzBJK2ZvYWMzVmVROExYNVJJSjJSajNNR3RWcllDVkcwdEE2S05Xd29kcmVPcFZhL25qWFU2eUhXSnhadXliSjZ1NmdVNGQ0dzE3YXpFSk1vVjhyNHdEK3lrcmtvRVo5MUZacTVITHg5aVhvQXc4K0hEQUlNMnBxV1hEd3pvZlhQTndic2cyZlIrOWs2eUtGZ0xzSEprWDhRcGZtalZjZFltRlNnTnhlcjJPWllnb0VEWktCOVgxbXNtUktFbmxySURRTlFQbEFVRFl1bFNmR1dNY3hlSWVmZXFNSTZ2QkMxYXh3NDk1dkliZndCV0h3eFZVdlVJeVdqdFR3VzFUZytjWlREYjE5amFycCtmVlZFZ3A1Zlg3czQwSzhOam5xcmpuMHRZMjFGZE1iN1lvcGlVMXhWV0tWUHlheHlLY2s1bFJOaUcyRWJSdmdVaWtvVGc5MVNYU2diQkpjYlMwd2E2UUJwaVJxbVUxSXBhb2tLaTVXTVpHTmlycEdTdUdVUkNaUXBUV3FoSytLZWFxSXF3bzU4UUthUDVYaDBkRldrYWx4Y0Z2WS9QVzNRcnI2dzlkYzEzYWxKbTI3cml2dDJsd1ZoVjVGSWxwa3Bhb0JFVlo1WVZheEVGWGFCTmEvdHBqZnhkWmV6dXR3K0RjK0lQL0ovNHl5NE56Z3JnYkl3WDBFR2JWQ1phV3dsclNTY2o2Ty9FMCtJQkZoMGQwaSs0NXYzN2RtTlpYSzlUWHdHdjhNZlBiZXRDeDZYTCtBcENsRFcvSGpOaUsrN3ZycTFTczQyMTI4YmJHL012aU1jNUdvNUpjM0ttZGRaMjhvN0VVN1ZyQ0dCUFo0TnRMODkvdGxYRjBiSVltTkl3QkJBUT09KSBmb3JtYXQoXFxcIndvZmYyXFxcIik7dW5pY29kZS1yYW5nZTp1KzAwPz8sdSswMTMxLHUrMDE1Mi0wMTUzLHUrMDJiYi0wMmJjLHUrMDJjNix1KzAyZGEsdSswMmRjLHUrMjAwMC0yMDZmLHUrMjA3NCx1KzIwYWMsdSsyMTIyLHUrMjE5MSx1KzIxOTMsdSsyMjEyLHUrMjIxNSx1K2ZlZmYsdStmZmZkfUBmb250LWZhY2V7Zm9udC1kaXNwbGF5OnN3YXA7Zm9udC1mYW1pbHk6UXVpY2tzYW5kO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjMwMDtzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24veC1mb250LXdvZmYyO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdNZ0FCQUFBQUFESTBBQkFBQUFBQWRYQUFBREhUQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHbHdibkZZY2h6QUdZRDlUVkVGVUhBQ0ZBQkVJQ29HcUlJR0dWZ3VFS0FBQk5nSWtBNGhNQkNBRmhVSUhJQXdIRzJwZ1JRZGkyRGdBYVBBWkZrV3djUUFGbSs4VFJka21uVWoyL3lsQm16R2hkZWhiWlNGMFI3dW83aGtaQ1pHVDZobnBvYlpUV3h5NmNPRGgwRWcvOW8wRlIrSEE4czNKMWIzdHc1OVhvemdjQ053alptdHR3Q1Z4WDRoTG9wRWtUYVJYdDBaSVkySXQ0amY5MlhzQ3ZNUkxVd2oyUW8wSWtoY3hLa1lxNWlRdGNmbmltcnBaMGpxSHRHbmdKYmwvdERxemlpcWRxd0F6b1EwVEx4ODZNenBYNXRJNVQvenY5Njk3NXI0QW9vc1JCREpmQmJta1dnc0l0b3FOYkcyWEo5Q2tlb2JIYmYzekJCbW9HQTFJNWFneEdPMUdUYW9ORUZUTTY3SXVvbjlGWHZ6ZitpdWl3UUVLL1cvYWhtaWJ6K1ZkRWJWVlI0WU4rUGQvamN6Q1RPN0xud1dnSXFGbDVRQWwyMVlCMnA1S0pGbEw2SmY3WmVCemZ1NGNGSjNxK0FPQzhRVjY2em9iV3dZaFd3RC9WNXNtdkVYb3pFbUVUV3Z0S0cyVFBHM2hXY3BRbTluUU92UjhKRklWZ1pCZDJtYkZjK0kxZllYdndOUWtaaXZxeVAwZTkzODZ5MWJhOWQzekJxR0xxd0FYM1hwemJUSDYrdGJYekdna0EydUpmUXllbGZXZUpTdmdDMEpGVUYxYXhOZFRVMkhUcFNqN2xKbC9uZW1xNys5dlNNay82SmFkR3NzcXJnR2VldG5hTlZQTDR6K2Q3cXgvc2d4bkYyVDVlZ0hTVVd5WDdBRERWTUt4b3h6MEJjaHVYeGkyQXNDYXRUUHl2Z09PTlRPYnJPU2NjR3VDUWx6aEViS0IvdnJ0ejFpckg4aHNabmE3OW5Jbmh5MHlSRUxDSnlMZ1dmODYvM0FnVERBQUFMcGpORWczSk5OUVpMaHNaTG95cEZ3MXBrNGRjdGhoNUtpanlBa25FTUlCUXArdUovaWxraGlwdUNQSGVnK0c5bHBGb1EvYSt4T0tjNkhGQXhCMnpycDNvekFYYWlCdXhWTThWbUNrV21WN3R0ODNVcWw2aTZ4d3lhc3dDcFY5K2N6VTVPZmpyTXJIL0IxYmRzU1pLN21TVy9hL3RDbXZLb0pFaWhZalZpS1BQcnltS1ZEa1AvOXJNTU1zY3kydzBGTExyTFBSRG50ZGN4MHpLek0vRTZpQXBDajZML2svYUtBM0EyOE95VnhhQzRPbFQ1YWR1UE1QV2ZaQjB2QmtSdG5jWUFHZGhTdVdibG8yNTFyVDllQ09DS0xnZmJZR2txQko2VlF5YTRLVEdJSFVnNWZocVJTWUVqTUhSeElISStsSjNGVHp0TjBwV2g3RERERlBwdG9wdU40NEovQUlrZzFTZU9wY2k5aFAwUlRRRWlXT3d6eE4wMFpIVStVcFMxR0Y4QllQRUQzQUJMRjFucUxGZkF0U0lkczR0WlFyRUpDejlUS3RaMlRNVVZoYXhIT0xXM2lZU3QwcG9FY1lnb1N4NDdWRHFjeWhrZ2tGUFlIZHZNU3g5VjkrdDc2TkxacURCMm05WVlobXRtdjR6MGw3MWFEWC9oY3pPd1F1eHE2azFsVUM3bm1udEcvUDNTenpLR1EvZndSVUQvY09NUWlESXBUZ2p4dnZiL1Bid0U5c2xBNmlqTElUeGJrR2xwMm1YaGZVMU81QS95SGVhYlJXSXpJZFdqV1oyVzA5OFMzTkpteElVeEQwSlMySVFxaDcvRExPVkZVWTlJLzA3MWRxSkZ5NGdOOVNOeVBzQXFrbEpHWFBhZmVNK3hiRjVxSVljL0lBQnhtbG00QmNCK29QT1J6MTlDTTJvdWgyb0d0RU5OMkFKRnJDVnpPNE5vRDNleFdTRUtHNHNqTUR0T1ZKU2dZTFYzb1NhTFllZTZPckU1OUpXdEk3WHE2Rk1OQjZwQmFEem1TRzd4OVAvbmNvQVFDMFlPNjVBVi84VnFSNXBDN08wS0pSU1RpWE1IZWFqenZxOGZENlRFYXRkU2VFZEN5SnlPUDdIUzBITnNjam40RVVIN0lWdjVCOU5jSHQ2UStReHI1TmdKbEVZcEJibDdpV0ZUZzJTdnN0TkxwazF3ZDBFT0IvSEtPUDUxb0FrS0hiazBjeGdhVVNtRWR6dnZSRVhmWG5VRXF4cUdnZHgvMXBVQm42eVNVYmlMOGJrSWxDcE9DMkhGL1kweDVxcHhUTDZMbWxVUGJGT0pNallRRGVZSkljWUFodEtWcWZyRktJbmdtak9JNWV4K1diU1VBckNHTndoSURpYUtQUVYxMmV6YWRBMDRDSEc4NUxZbWgyZ2lNRW9oZ3VGQ0U3V3QyUm5wWk9QMExBbXpqSk5KTWwxRnFRMndmYlVCSmI4K2dkZmlTR1NXMWdDMXRaMHo3UVZRZGRvVFN5c2pTZWJ6b2xmeW9oU3RnZ0JlZUxDSE9EZk15bzJCT1M4YTEyaGlkcjNZVWhSRFZYVEFJeEU2eHdtczBERWcxTVJGSEFHdEdaSkxFNkN0QlpsNUoyQTd1bFRQMjBNalFYdStGR2NSaGpDb1ZYdG93Wml0aGVBaWdibG5PWklSZ0RDZ1lLZWpqQlFvUTZoUmgyTElhckdXQjd6K1lpdEtBdXFFTUFsOVFESWdIYzlSc1lpVXpBTmdNc1pHTExvVWF4YWtrVnJmRG96SzIxMFpiSzA0WnBpNkNFQlZvc01PQUFVVmdRaXdWMkhNakJEdUtVZ0pPSWd5WGhFTW5zVUNsU2FhU3h3NlRyaU9tTVJWMjRXU0cvQXIxb2I4TE45TUZhZmJGb3FOcmNjQ055NGtpanFJd0JKbE53QkM4bVdWZ2xHK3RNWit2NTVPTVY0RWlGMktDSWJWU3NsRm9aTnBtRnc4MlhXc3dvQzU2S0QrcVVyb0l6S21udTRHQVplSlovRUFCTTRRV1FScEZxaG9WWUNRZlBkcE9oSEdhV3V4NGV1RmlIbnU0MDBwbzFON0NYVk1uZktqUjJZZEZpc2NXcUZxdUJkTnZBYTlkeTh0RVRQKzcxM0x3Y0RQeHZEZDBhdys5bmV5ZmdkL1kzOENFTDVzSmlXQW5yKzMzL3daS2NRbndLanJYaU1BQnBEdUNvYVVpa0dJU2hDQUVGeUVFVjVKZWxGY0hCcDlMbmUvZS9hN2JNRXc4S3BQNlpaVm1WUjhTNW9iQW1WWkpXT001eTBqOEJBQlFZUVRVbVF5YVpHRVQxeDlIRENVa01HMk0ySEVPaHVYNUhqVHVCcFNwQUt3aVhPbXNxQnFEQVh6UVVJd1orZk9CSHZnWmhZaFBHMy9qVnlJdkpPRGRCSUMwaks1c0tuTjc2cVV4c0k1Ump0QXBpdndjbWVBUUs5RllLR3NFU3RDUVFvZzc2RzRaZW1xVEpUQVJXMUQ4eUJWSVFCVk1JaGFadS9WSDdoU09CUkZLUm1qUWtTYmtnUUhvaXJZemhLRlhYN0xJSm9MQzVhYW5pMHhnV0xnUmdUZ2xrck9hMVdNSnduUTlYemxjZm1BRHNoUTRIOUVvZW55NVNvckhyV2c5dHMwcEk3di8zc0Vld0FhenJ1QytHQ1BDZnhya1Q5Q1lBOUM5YkE1QnhTS0szZHgwQVlJL2V5aXFtdEJ1QW8wdGNOdWJyODB3bDQrbTRNUGo5bUthV1AvRkoxdGx0UGRVek80Ry9oTDlXanBUTnNsVnVJeWZJNlhKWHVWaWVFd3F0NGRibWZqOEFDQ0p6U2ZkbjRwTW80M0tza1hXeXNRVnBqRDlTd20wRjlBUEF2d09BTngydXZjYjJDOXVBQzkrRUM4OTR6enFmR2FQN0tPYmhybk03ejIwQkFZQkVRSDhuZ043SzkzWjFldVZ6TlBxbjdUUEhJdk1jZGRWMWk2MnozbjlPbVdXVCtaYWFhWWtMempsdmdXdUloaVJRc0dhMG1vdGdZR1JpWmhFbFdxdzRkZzVPaVpJa1M1Rm1qZit0OVFBSG9rSjZiLzNnYmpMMTFrZGZPYlEzZ0JoNjZtdTlzdjYzVHVkVG9GQ1JZbVZXdVdlMVMvYWI2N0RqampqaHZwc1JjVXVOTFM3YjdIYlV1T3VpMy8wUkRsZmMwQkFldjZtMTFULys5cStGQkF4SGhTZFNDeEF1Uktnd2tWclEwUXNpYTgycXBiWmFPYU9OQkM3eEZLbGlUTk5lQnJlTzJ1bWdrNjU2NmE2SG5vWVlZS0JCUEVhYllLeHhKaG52cklueTVjaVZwOFJVcFd3bVIwMkVqVGJZYVpjZENBMi9FQUJvRFFCc1A5QnlRTDhGTVA4QThKOEROd2NBQURaMkZieUVoT01VTENXcW9waElpRkZHUDYvSlNiYm5uSmdVeFYxRHpMUUFoQ0pJdUViQm8zZ3lhU1VKUlNOZEVMSFNIdElNM0hIR3NTTnhmZXdFbmNmcjZjQ2dNV2w3amFhSjAwZXhRdFFSOWlpRzRDVXc4Z1NpSm5ud1NiMnJzQWlwUkVsbnhDWU1zNmNTeUkrZTJSeDZFcWIrQ3JHRUhtT29OQU9GcEpTeU5sQVRoSFROUG9COUhRT3J4NGo1WGt6T2c0UU9DV21jUGpSeFRDM1U4WVBvdVVVN1g3ek12cmtpV283ZEpzWm5RUUFFN25uMS90NWZaMlJFUW1vMHdlaXV2SmtMbGcrd1JPa3M1eFM4TThXTGxUb0V4S1JKdU41Wmx1YzlWeG1HcDNYb2hTRlpnNjAyaDBQcGZRamdISExkVTlkWUdaR1VqRjh4R1BhZnBDaU5CcTlWNmkwNlQwNFlZcDRvSzE0b2MzZWxyQ2lWRVlEYy9qL3lRU25QT3RhSm56SEJhYWhjQTBDZkFDcThTNzVadEFrMHBUbktOQXV1TVFXUWJGaXZ0blBVeG5NTFFPdTJmRW1OYjFacTU1SU1jNVFadG1wOFZ5bFIrRkJZb3lsWHBYN1ZCREFtZG1JdEhWMkZSd3hxM2Y0ekpveDR0M0taZnBzank4dS9WV2JVZzdaMVI5TWdwYmpKNHRtNFdBRE1RazQ1d0RTa1VSZ3R5RW13Mk1LUlRXREZaZE4vRkdhUmZaSGJhN09MWU8vdVQ0aUhCNHFNY3F0SDdLVnYwYnF3T1pGL3RlWStEUTRvSFVRWWhRNE9WUW9iVFdOMVM3REI4UFhjK3p1eDZPUTN4TzFGZG1FcUEvdnlpSzN0dWFIU1JhVzQwT1kwOFpWQVBUV01Yd0s0WkVPeEJoQzhmVHdhc0doeEtTdDd5UWxCb1Q1MG9yeCtrTnFvbUcrcUlNMTRUeVhWaFNJRDEwdUVJMkNjdUZPcTU0Q2NRdk56eC9wY2Y4R29kTlkvUzN4bWFWK3pKWnN3NzlpbGU5Ri9VOHJoUFZDNG1RbGNNRHJib0RZUzZDTmI0QUt3eHArUkVGVlMxVEk2VU1adzR3WVdRTlBRVzV0TlRuRlBkTmd3MEZNK2RxZ0hnODI2SjhzaVZpM3VuUTRUbHNpOWdiN0c0NW1XTG5kL0R6Ky9SbmE4UkxFZTU5bXFwcjdTaG9xdFZ3U0l2Zm1HZFYydjh5cHFqVTd2NWo2bnJQMTExcGdzaUx4TmplMVdIQjhiTWpwV0o4MWR0UzJwYW53VGd3bk4yMzNXcXc0YkRKU1pHbEJKVFNEbEhlTVlaWFp0TzlmdWxXTS9lMEROM1p6TkZiemYvZHMydVhJTEtneGRrd045V0VUWnU3bHM1cmt3d1JLd3lWdVYyRk0yZWFsZkdWYWgzTFUwcjUxdFdmTTVXRkhDSi9XTVlZVWpoV3krY0VvOGV5V0JNWEV6V0NWTGt5YllqajF2clZKZG5PUlhleHNyZ1VETHFiYWgyb2lEODU3RVNHTGF2dGtUTEpSZm1OV0U4ZWFHMjkwV201SXNYaTVUaDdXd2xPOGMzTFNuM2V1aTdXUjVIOHhEWTEyTENiQ3lFeFYrNng0ZjN0UXdVREdyM2h0bE9mQUc2MzE4eGtyem1zamJxd1l0RVZTVzh2UjlLTGVoWjdvSjNva2E1aldMVm45cFdxY3JtRDJWdkdPYUo4ZW4rS2lPZFVia1BYSlFmVzV4WmI3VzJSZUR0T0pUYTBOYk56d3RSSlBBWjlSdHFTYXgwcUdsTGs5Mmd2MURYNU9VUSsrM1k2dTBVSzNQUHlEUmM4ZUlsbWtTY0VacDB3UzJ3NndjSzMrS3FuSjM0eWVOYWJ2RjUvUnlEUjBqNzhIdzg1SG16R1ZPUzBXSWc5SkFlbGdPNDl3Tmt0STdoQTBXOWt3SnVqOUNFbDJHYUJMNXFrSlhKbWdzc1M2YWdOVnY3b29HaUFneGFsKzNxd1RYZlRpbHJDbWxWbG84WTBMTTJEL0FOaGZ1aVNKck5YVnNCeDBXdFBia1Zrdk5hSGxrd2dBMWNPUXRJeXlFVWcwT0hIbHpkOTFRVzNybDNXMC9zM2R3bmZZSzBnQ09XendQdElDSFZuTlg3ZUJnUm5SY0dRU3JqaXVjMXdud3FXVWwxNnZSWjlWaFhTZU1JUzBrZkpDNzI4a1BrL3IyREVkVFBJOTBHS0FKbXR1UmcwcGpIYUU1Uy9sbXk3SFFDWTNnQnFrYmJrcERpdDdLTVBwOUxrUVFTWi9QNUlxRHdSQ2VQUno3ZDM2ME9nYUZUanNlTjUvRE84bWE0bEN4bDUxV2NwTzhUbnlkdUZsbWZoZnpWbXQ2ZWNoOExlbThuK2dRS0tLaGd3MkVYK3AvRGVzaTlHQVJWZ0s5a1RsT0xUa1FJYXJYTWJKWnRhRUQwNmI1YmRJNGFKK0VUWCtBaVE1SmR0dWNRMVhhRHp2REZxMXNMYUpjM3R4S1EzdFFMZXlVcXlLV1ZRM0YvcTBkRmo4WUQ4azZ5ZGRWRmE1K1ZzK0RTRzZ1Qy9uTjljZW51RU5xbGpKLzRjb3QvbjdmK3BpWWVZVXBvK0ZaT2xGR3hSdlYxV3k0VkVQR0tMSnBYN0FCM3VDdExGMmJtV2FJQmlORjZoQjkyM0cvVDJtdWR0SUUxZno2NlRVdzNBYnJRcmFsd0VGaE8zWkxMWkpHeld6d3p3TGpEcyt6OG9aazg0Z093b0hVQUhBZ0x3OFhoMmFGTXI2NmpzNVNveGt0SllCZVRyUmpYNXpuQmtkbUk5TSsvMWhyY1lqWXRkWnJnYnJWVFI2YzA2bzNtdWFDa05aY2pyZlBzWGxpcGFqTkx3YXVmTDVFVlNLRUFIZ3pvN0VNeFlKVzAvb2lKeHVOdGtvMFdtVS9PNDROZFVXekl1c05rZFpmamRmU1ZvMng4T0RISDZMelRIdXoycHdPVC9PY0JFakoxUlVqUjhiODc1TklFQkJ1bTNCdHQ2ekVvZGIxaE1kb01ockdHcVhVNDJCMG03M2t5THVSb2E1OFJ4bkdpS3htSUh3dGdOU3V2a0FxdXZSMEtOSnd2MzRZZTRZOStwdlczNUUwdHNGRjFndXVqVExVMzVmcFU4RHdsQWZQbkc3SDAzelc4WDBkSm5tdkp6eVk0NXg4bGhENmcySkFURVI1bXgvckV0M21OenEzT2thVXdKdklmR3UrZnE1WGZCT0hqYWZ2UUQ2SW93aGhiOW5RYXhUNkpEZlNiOFZreHJtVlZucXU1clhJNVJxN1JIeU1KUmlOSm5PSHQ4a212YmdnellqZ25UbjRkeWV4Y1N6TzN2UXlEb0o5bFdJanVJc1JLUjhmYkFBWG16dnNsdk11YmJvdlRhbWM3SzJiUlVmMkgweVJqTHRKcWVUdXlBamU4WVFjSkpBMWRjZHR6dVZDZTAvRXJoWU5Jd3UwWU96RXRlYitTbE1LT1VRc0U5dXVadXZ1UVhXYlhwWGxDYnV2SkFSWFB5QW16RkdoSSt1T0dNQkg3RFBPMG9EVXcxTTc4QU4zaEo2RUIrcW8wWVJoSTU4YkJYQ0lVTElteWdoV1ZzYXlzSVNRQjU2aHFCMkhJcFh6T3pPOUVsRnNkeHVCT1gwaVBoU3hOUDllVmh5U1NJcDJFelhrYWJSN2ZmUXhrZWlURDRMMEZZQ0dHaU56TURkSWpYaGhkelhQemVRNnNIVXdEeWdkVXN3eCt1bUtpcTQ5bzVRcnk0RUpQY2h2WDMybUoxRVpQdkxySjZwY2FWdW1DM3BRcVh6ajJldlg0b3BVN3ZOdTJhK09WK2VyeHZJajJVYmw2QTNuUnNreGtXdzlmTkFlalZ3TUlFNVJIRVNvNXhyMXhOS3M3Y2NOOE53MzFNZi85dFJBS05ETEhEN2NMNjVtbWVwYW9oa25QZUxZbmNiK1pHQVZzM1FtZXM1eUJHdjR4YkpSN1J1V2pLSVd3UTZsZkN0RnRIQWUwV0NvbzFEQytTQjZKc2RucEVtUGdCMmdTUTZKVWk4VkZvSUJoVjNraENoZjAyWXhqOUp2ZWcvVEtxVHdnM2VIUE81c1ZrV0RZdkdDU2FCdXFJN25hQTlvTkI4NzJOZ291SVFia0VySGI4OEoyZE5qUzZKcERyVGZWN3JoOFdyeGtyOGNCM1poMTJLbk1tS3FIbzFwT2VuaHRGNDZhekU5TGE4N3VjUnYzSlIyeXlRN21JTmxmZG5Ham5VSmV0L0YxdWplK3FPNlN3NnZZU3A2RFJzaUdnSjVCY3hYVm8zUjVMVitZVjF1dXpodmlYRCthYjFaR05EeDJQeDRucmFtYWNidHFIS29jeXYzMGV6QjI4R3JralhlMCt4QWtCd2FUTXpMZFltRk85Ty9nMkdJZUhBU1ZOclR6NFV4ckk4VHhLampWSnFydDFYcmRJN0RNKzNEZStDUTFmVzUvVjNUWEhkZnhvckV3TVBUYnhyc1JhWXBubEtITXh4WkhzK0pjZk1iN1hHcFBCV21MZnVDUS9mU3pldjJQUmF1Q3o2QWxsL0I0RUNFdnRGbzlCckdFZFpwbklPSStMZ2duNUJicU93U2JqaS8xaHFCYTM0bjlmSjlBRDNVOGlidWFtR0dkM1cxTHVSbE5vaHpuTGt1aVBlRDFqM0NERHA1VFZOR0ErRmhkWG9hWUV5TVQwcVR4MlJud3BzOEl0QjlmSEozeWE1RmVnQ2xmUDByUmxsOWQ3Q1ozMzNqL2hnM0cyTXRhdk0xZkJVTkJyTjFUZUZXRjBvYzdpd0NvUXZLbWVTcGhCUmVIdHl3MHlpdzkwbjZ4cGdDWXlrbW9OS0dobWgwSVZaWThLQmtPMFcxcHFZSWk5TWlUVkc5NEoyamgrY3ZPUzBSc2VRSzVnVUQ4RUFxUDJDYXI5SWpWaHRWM3N3UFZOelRCM3Z3WUNraVdCVTdyNzNONDJCQW42TjFHOWZsOU5YL0Q1QStKM2s5UjZOVVcvTnlicVRyVnN6dzV6Zk9EOE5vMW90WXZYMlNnWU5YMTBEYzVZb1B1SkxVajY2ZFR0Y09sL1BFYllaUGhyaTMrTysvRTkrTjlqYmVhUXJPUTVnSjE3eDBDSjJtRG9ZWW9OQmxUTldOSHV6eGEvRHVmanJ3dnJHMG9nK1lZYkZDYjBUQkQvM283aXR6TjdkelhHb2R6N2ZKMzZ4c0RPa3lPU0E0NE44ckhQdi8rVE1hREZwSm40MzROODVNL21jcStDS29pZ2h5d2Rqa2xWelM5OEhnNlFHQkdWK2tTYWExSzBseVI1VGtEY0ROL1lKVHBSL3pmYnpTa2s1ZXZGN1J1ZEZZS0pxbUloRWlSRWlyMDdGRUJOYXo0RUt6NzgwQk4zcUs5ck9iKzRZbzE4ejc1OG5ja2dTNk8rUGdMSFprK3ZYZXI3SWJ1OEJxdHJiczFmMzNteDUySGV5Wkp4M29pRzgwWHpkYkE1Uy8rRUo3THhFZnMyZFB6NFlnYXNlaHdSUmFMS0xUa1lnUUpYa1BSYkFoMWpxWG1TcmR6dmdtZkUrMlRaL2ZtNGp0eStkaisvZkc4MGlSMjZuLzY1MWorYk9kRWVWM2VaTDc0UVVpc0liUnIzU0pGNVRvbld4amZpSUdlZDN4YWN1WFlJL1hDOVh0aFlBWWtEVVkzdDFFZ1ROT1JrZ0U4UTRVRFNnVVFjT0hFQXVnUEo2Rjl2VVpRSjRuTGRRci8rOVYrR2dhNHZzUXhDRE5YNzU5NXlOWHBNL2ZXeEFucDl3K0M2ak5JbjI1VTVvc3FRR3JHSFhwQk80TmpiY3U2eTVmY3ZKb2RySHducFdhRlhXRFZHRnFYZjNaV3VOejdGOWV2dHJ5akc1aGFUb0hQN1h2eGJXemEyaUZnTmxYcHVLY0h5SzZ0SEw1SmtpeFMrMWp1dW51d2xxRDM3L1cwRjNRVGNkSUxVVzBHTmczRmMya3A2TktpNWxBVG1lbW9Ba0lUNXJaeFh6M2ZkbXArUU5tRzZSRnh4M0c2eWVYaW9wWmtWemZsZFlyVGZUWnp4WTlnbzIrZ1lYbVlJaFMzY2t0NkVFUGV6WTIzWkhoakcwd1B1SHQxenN6N1lzZEdlUHVaWWxlTU1Jc0thMG1iVEZydWxNR3kzc21KZVJDc3BmOFB1elE0SElScWRhSVhMaEU4NjdZZ1lCZG50WGtjMzZiVS9QNHcva3BaVDhVOUYwTTBCMGhvRm5vTmEwdWNXd3hGaTUwczdUMTV3TjB3cVRaZkI3ckxWOHltaGJxYmNPRi9qYWRhdlVmTjJzaFowR1ExcGI0TjQya2RHbjBjVlREOTEvV015Y241ZXFJUlQvMStkRmtiMHZUMWdPSnVWdnJDSWYyMlV1S3BwOTM2U0ZXMHFsc3FGdW1KUFdPVEN6d1U3NFhzS0ErV0J4bnFETlZrQWZBcUkzaldxc2h5bjlITWE5OVN2WkJtR3cvS2NCMWVqUXlvUEZZNXN1L09FUEQ3MFR5V29RL2lmVlIzbDhxVFNBdXZUVVg0RjRTZVkwYU5GelFBaVZRRmczWkQ3Ry8zMEVLTi9wY0VzQUJTakJYWTlkaTc0cmxYcEpjNGRWNDhqYUlCckF5NHd6THdJRFZadSszV2dmc3UwTnBPY1l3dzN2WEhaUWNyUkMzTnRRc0xQR21FTVgxQThzSDMwWVp1Z0JZdWp4Q0x3N2UrNU5EVGRkUThlYkdCK1lnNWFYMEtwcXdJdXBTTHIzeUQ1Sm5GeFR2ZmFucDZPRzArMStkbUYzNklnR3N3OUJCY1A1M25mSFA3Tm4zUVpYcHN4TStLcHhETm4xK0FxV0I0a2RqYmlhWXZ2UHFQN1dRNEsvRGpEVVo3MTMvRGJGN0JHS1NLSjA4WCtMMVRSUnl4K1ZXNzJvT3ZBMTNBUXVyWHUwNDl0M045RktZRTRXM2M2RTk2YTAxeVlkdmk3NytEQlJYdzltUkMvN0xQR0psa0ErN1I3MjIxY0dRZmNXb3k2VUtjcmZ4QXZBZkJ5RDZjTmFjdGVxSENhZStwQ2xtTEd0R0JnbUNTUDdqQkhSMXRkMFg5NHUzNjFiRCtZbDJnWXM5OXRrb0ExdWM4NjRQZkJUaWNhcHFldmhxWEJmZTJiUGxpK1AxSGpNWkZhdTRCR3VWTUdsMjZJYUtEbEo0ejY5WFI5R3h4WEhzNTBXYkxiaThBMThSVGVFcmg1MVdaWlQxaFRURmdweDhXajdTUGlxVDZzazJPS0g4NXI0QzY0VXNES3pxbkJHWGZVVW9hRjg5Nm5VSm5rU3YrbUh2UklpS01CaFVRT256ekd2SDBxOSthc21ZOWFwcVpxd1djOGFHRE9NRU1sZ2VRcUJTaDBVYVFEMjJJN3NlZlRhcmtGZ0xObk9wQTBlSCtxd2Q2Zy9vZFgrVnlXdzBCMWExbS95TFBjNVZRWjl6MVpKTzhMWGI0WW9yYmQxL1dMbWU3VUVCN0JyMTJGY0ZnL1pWbzI2WElzQTlKdGlCS2RhemxveEZQMFFRd09KcFFVb0VqZ3c5M1ZzUTNwdDByQ0tOb2g2bkp5WFZHY093d2ZNYWRjWFErVVJ2SC81MzUrMDBlWTRFZzUvWkwrd2ZVeTFwR0pVa25aT2puYmpFbUhFWWh1d1kwcCt4bTR4Wk0xSzAydzFEV2NjOGJzaW5NdG1pWldOeXVDQlovdG5oSFlqei9nWk9xTHVzZ3dCelFWZHRQRlFYZVlEdkhsUnhjd3RzUjJJMWpSOVNLaWR2T2IycGs3RDAva2lLdU9YeDNwbUR3NUZBSFJibVhWbForYWxTeGUrNEhTdWRpeGZhL1BKWVk2RWVtbzBrdEpyNjhoNTJZY0dLdnNIOUQ3eDlGVjdMOVM3d2RLd0tCdVhtQlc3ZmJNdFowQklSekZsUGNiMW1ZOG50cHNYMllnQXVzMGNNMHF4UkxQV3QxMUt4dmZjanFyZ0M5YXJFM204SjdmZUpSY1FWSkFlczg0cjZ1L21nYlVucWR6L2cwQzJ1Sm9WN2trOS9LV0NWTG93VzVPUlM3bHZaMmovNnFDT2tldytmNTJJMnJ5cWp4NCtxMjUvLzF5VDl0RG8vbXkrU2xabHo5bHI4T2RkanVDSEdsZHJEQm5FR0V3bkpYQlhtZEo3WHErSkt0QlBtUFJlcGV3bVc5NFJPR1ZFWTlLNDgrcjhpRWhBem5UeGdWR2RFOU9LMEVYblNDRmR4dkY4YTRLVEMxTnk4WnEyNzdCTkxpRmNDSE1ENUhlaFl0Y2hEK2haNzhGV0JvQkFOK2toTHlteXlBSUdXY2xhN0xXODFsZ2ljQ1FkdGRpYThNUEFIZGtIeUhxRzNwSXVodWV2TS9iaXhnUHlzWmU0UndyNHM0TGN2SDNXNUJFOGdWLzZ3MStSd2VqTXpDUitKdjgvRzlFVzhReitRd2VJeFpLQ2pBK25YNGM2dG45WWFmVU5mbDhVK2MxV01kd3ZYQThkYTZaM1JSdURzWGFnQVZ2VDBaeDlRNnBrL3FzQ0tTQXo4MXpYdGZ0RmZFRE5Udy9uTWJoNlFXUlpUWTRLbjUvT0ZYZmZTQWovNzZiQkFkaVlvUkZwN2MyTXJ3WEJUWnQ1cEQxc20yR0lWY0Vmd3RwMjBhZGYyaVpVWEkzd0RXbENBVlpJNVZMZjY2bU13R1lBeHpDdmxpR28rN3ZpTDE5WWo0SUt6MDdab3NNUFcvUHFmMC9ySXpwK21QL083Snh4SDBMelRaOHpHdEdzTzNFSVQ1eDZWVHJYVytMOWxnZTlVTUxQNVpiZkN2T1lsR25PaWVCcEVuUlNCeE4rL2VCTmYwamJ0d0VFNkJhb3pWeFY0cVdPTFE3KzZpa2ZkRytCS3d1eEN5SStyMmIrZzJOTXRrWDdSN2NmVkRLV2kvZ0NFa0QxYzFLeThzTFhodmdlT1B2aDRxSlo2RThHcjdOVGJFRlBjMnZEc1cyVzhtbGp0RnA2Y0NaV29zcnlSSEszUTlEdlI4OG0yOU5rVm5YdXJpUUlPaVNzYURwK3YyMU00ZmxVY0x6WWV2QkFDOXIrTVZxTnZvRFJDZ1ZGamN5Z05YSzdDeFlGamIvbG8wN1Z2WlF0bDBtem4vT3R2K2RKMTFkdHJ3SGsxVUE2dGRDd2VzM2swblUyTFN4c3g3Tk1TUFpldHNtYU11a0pIb1BYZENSOUg2b3pveEdtcjJXWXlKWkxPWkZBZGd3Mms5QkN6M1g2OTNPTHlHVHN5M3ErZWVKSnNlOTJ5YUlnNjcxL2Y4ZWduNFBBTXhRSzJYdzBMdmZkSjlCN2MrUWRTVFBTdmxDclo0TGgvMmhxbTd0YmFYRGJ6QWxodWRTRW83QWV1V21xcHp5MVhLVjF5MVZCcnBLUkxxVlM1bFpxZU45cTlCc1RtTlVvUU1XUk5JSUdHSTBYa3lzRVNjZ1ZabzdIaFlyQTBhQWxTb3dvOEZWZnV5K1hGbW9yaE9FRW9uOHU1eHNGNVlJdzVjaW9ub01JRmgyMVhSMHNIaXV1bUR0SmZ3K25uNWhTVkZXTCtWOVJVM0ZZeUlGSnZTR3cycE5VeWlnWDhLdWNEbWphT08zQnZuMDZYc1FoYmZPYVVkUGJudVNEV21qSWtrNTJUWVYxYU5JM2hsa2hXcktFWlBpd0RHcnlQY1BiNy9JeGx6N2FwSGtUaC9ZV3ZmbXNzRjZTNGtoYnZEM3FKa1FVV1hCWG5maUNVVWtpSmpRSmw4TFh0RThxZEk2akZiZEYySjdtdTI3eVhsNDN6OTdDOWcxU04yV3dFbytERGtPYlBlbHBFSFhrZDBtM0ROSWt1alZOS05GOVRJZXpmMXF4cHBkQ0ltaGY4TnduYXJ2NFAvVk9NTS8zd1FjdzY0RElKdTNCbmp4RHdJRFVqTjNuYU1tb2plem02UEREY0Z4K09sOE81UXV3MThHUW00QzhhNWgvUlN6NlBjRlc2Z0JURjJUR1Z4VlFxT25HWklhS0dZeWFkT0JVd1dod3BGTTRZMU1wWUFnSFhxL0J0ZU8rYUtiY0dJVVdnTUtLeU5TUjZOaDl1dWdZczdDQ3FIQ3owd3FncDNZZlliSG5FbEVaaGdXZkpQNTQzZmQrT1M0MUlNcXN6R2pNNkpHbVV2dmc5dEh5RWd2Q0laVEszV0VIQVJDTG1jaWRpUjhUQjNpUUJxejFCcVJxV0ovREFSRThTMUovVTRJeEwwRVdCZ2I2SStRTHg1eGVQeHJkVjVTZnJaK0YyR0Vqc1VaWFZOSGdhRE1kTldrc1FOWi9IQUtjTkdtVTBudkVFQkkrek9tRTFpeHhYUG00bTFiQkpIVCtrVkhrd284cFhFQWthc1p3VFdDMkFGZlJWWXcwL1VZNHRMcTFZcUxTalp5dWFSNmo1d0piNEFtK3lUM0dXVlh1YzNZZ05VODNnYmJsYzhKS3NmVWpRMEw1ajNwVUZjWElHY29BVjBDN3crYjVxUmlKV3hCRXJrbjhadVhleVdBb1dmZW1sQXhkcHZMZHcvcmhxWGJ2YXNFWFk4c0MxaGZ5S2NwQjhiN2xieVAxWEFlNFdzY0x6eFVOYmQzWDIxTlkzUEVGendYdUx0dDVSZjVpS1BTV1FJanNJdnIvVnJZYncvT0M3Q0w4dk0vQlRISFo1NVlhSk1wRE90N1J0YXRwWk9kdzJuMTVEaCt0TGpTOEFmdVhqUFJ6ZXViOVFCelZ2ZHJZSmhRRVVIMm1rdjB5NDk4Qkd3bmZ2aWp0b0ZiVTNTZHEyWC9kMFMzdEx5elNMOTFOejgyT2dCUGdzYXUreWdUK3RPQWc1MUhDZlhkR2Z5bkdxRVJUdmE4QTJxUEw3UGEyTjNMcy9uWmRBSzk5eTZDazI1NjVETFczVXhMSlJZKzJ0OS94dXZyUFowdHBTV2I2dDByZlYwclNQMDlIV3VxNjFkYnkxVFF1aUVyeE1wSmZjcHJkREZUVVBWYk5GTnp0WWFqMWwrZFc4bjVwYlh1UTBxMXVhRDRNbm9GQ2kzOTBudWhqZjl5RFl2eHl5STNTYUYxMFh4MHJsSml3NjNhM2tVNnAxSzJkd2t2eXhXeHlyMWM4VE9rRk9YV0tLcWozYml2SUVYMkhHYmJwQVl1WERqcXBEMXNFK24xWnRuY1JKcm1tZ2NuaVZET3V3dlBXU0N1eXdubjlhWTdVdjAxRE42eERUdDFxbFE5ZTdoVXRiaE1LV3BjSkVCU0ZiOWVVWVhBSkg1bnEwa3ZzaERtMUZyV1czOG83QjI5Qmx6ODU5V3lQUEExK2Jqd2FwK1B4a2h0ZDFJS0l3OWZ6bHlrN1YyazVNbm11VlhzbXR0VU56ckgzeHR0WUg2SnFqT0tLMlErZW12MTc1UHFRMzhUKzltNlM3eWZVOHE4RCtCeGhUUmVIQ3ZqVG5Xa0FNOTFKWTJRa2I1QUdQUXFXSnFBNzZubHcrdy9lOU9ZQmlwaTRkMmt0SWVPUk92MUJGY1crYWdDaEEzZXNsRVhVR2JjSUdBUlRjNG5oVDExQlo2NlhYelRGTEZOeVpJVDVNTFcrcnlCbW9kVzJWckVYRFJNWnFSRC8ycXlNTDcyWGdRcEdFTGZOb3o3MGd2bzdCa0J6eFdwNmVoQVZhY25wZXRYa042eEpHZGdpSnlocEpoN2FDTUlnRE1jcFJUOHFpYUx2TDdHYU5VK1puNHVpbHJnYTNZb00raUtzSEhxajlHdTRuZ3JwRkhvV3J2bEZRUHNQY3B4bGpxT0xzdmRtbWpicmVtc0hyYTkrdVNzR0Qrb1Z1cGJzT2I3RnhaWVU2c3F4UmJkeDBuV094a2traXVzNHZudy9LMFdDSlI1dUk3NVhYVDMxNEJzKzlEVG5CeGJ5Um1ORzV3dzVCZ1dQVUpoblpzbDJXVzNONSszVXJkaVUwTGlxeElDOWZKaHVmTmwrV1RKcXUwTGNTa2t4WDR6RkFlNVJXUkxWY1BqNVRNMU5GUnRQNWJiZmtjL1liTk5VSWlMbnBUQkxUc3JzcGdDTVp4Mm5GYWtNdkp1Y29pandhVU1hS2VMN1FRdWVqNktPMjNKRmxRSXRVdWpZek8vU1l1RTA3ZmJ2SVJORzhNbmNwbzVkM2w1bEswaklqbWR1NDlZOWJYNm8yNllsWmM3UGZIZjkwdk1kbUhsd1pRVHlIRE5YMUdsNWsxajdjUDQvNU1ORXA0MFFKelRNM0dMaXYwSnJmQlI0dUFmZjBxQkJNVzBLVTRWbXEyT01xY0xNZFREZXZhUGlDbWJZNHdZeVZMMWdaTm5WUnNqNEhMcGFBdWVhbnE0TGNDcGxYcFJLaWt5bVU2WWFjNGV1K0VJbysxL041K3M5RndpOTBRUDJOcmdDS0dwVERMREtXTGFSVzZrYlBhbU4zRVptS1JJUVF5ZFVlYkVTMCtYR3FkcWhiZ01TbTR1SDloYjd3QWFxT0lWMkM0S1BVdm1JRUwxQVBmQTM0SzVsbWl4VjM2RzgwS0xzYlVvMUNudXJDeUJSRjdrY0ZTKzlFc1lYL3pRZmY4Qi9iZmRQa3l6c3BNSTRxanBuc1hyckFvNy8xcWRmblMwVE0zQWFTMlVUdlI4ZUxWdUxlanV3TGxIZGJ3blVXWFpGVm1veGhuYUxMampDYk5maVoyUUpKTGdpSzI4cU91a3lseXhaeWV1SlAzQy9wSWJRNlRGMnVoWGdhY0taV0Zidmd6M0d2d2g1Z2FHZHRJQ0haZEFQd1BhQ3pJdWphZTFmTWRPRjkyZDRRd1dIdk9YMkxLREpsajJpNk5qZm9ocXNnaEZ1dUc5aEtyYVhOMG9oVjBFT2tHYUxMTHpPTXZ1aFhFOHZVNWRib2NzWm9ETWxNSVROeStUV2kwSktJTDVEVSswL3BkMGYwUTRtNkNYV3A4TUhRSStWOW5obmN3U0RLTWNvUS9jaHpWNzliS2MrL3Z2ZzUvU0Z3Tzc5MDdQRDV1L2RVeXZldjlEMmpYMFpaZEFlU1JpL3ZmNnE4M1dPekp4aVlXaGpLSDlwNkRtS1VkdHczNWY0U3hxdGJIN29qU2NXSEZyblcrRDdsWW0xTmsrSG1heXJ3ZFBSQ3ZmWW04TXNsanhvZkVjMk11RFgzMncvTU0raWx1dnpyRFp3VGNlbHR1cDl1aHQwR2w0OGQrUW5IVzA1VXNqelhhL25uMmJOczgzVDlFSFpvdThudDQ4c0ZPUHMxNzg5M0NiWGIyc05MV1RHTmpwVTRBTU9UckxoV3k0NVBYcXVWUnF4T1ZRVFdTR05XaHlyOHlCNTQ4b0pXWUFQWlhjRGh6Y0tPOTMrOEIrTzVSOHhLcU41Y21veWtGQ28xcmhZRllLMm9oR2V6UnRRVmpHNnA4am5BT2xVcGorUHFiY1MvbmxJQ05XUTRDN0JFY1AxT2I5L1luYzZ0YTRJM0xuSklWa2I3Tm1IZFdLajJ3cjlaektUaTc1c1hLMU5EZTV4ZFk0b3B6OHJFL1FlbkgvY3NXWFlxRmRtYmNRalgyQWZpdHBCRUdwRzdmUEl1dmZDckt4VmF2OVlRWW1Xa2pnNDNxQUxUZkpkdHpLb1V4bnhFLzNmUk9tL1JqS2k3dXpBbk9hZ2dTRm5YbnBicklIQzJMTmVXb3ZGbDJwWnFyZ24vNUtMa3NqRWlJTU5pL0loRW8vUkZaWmcvYXhZREtTL1lKVXpyVTd0Z2g5dURtN2p0cENGSVdiODkyeDJJMnlxeU1TcmVicjlJcTJQV3NKMk1YcndyTlNJaDNRQTVBMi9aVUlLMDFmYnd2bVlFRjhxR3FwQmlMR1hxWFM4ZXV3WmlMSTdWOXFhUExoajIwVUpQOTJxVkY2VjR2VVFkWXMzOGw5QlZnU25jWU9HN1pWa3RpdHJmZnZ0QjJiN1FKK0tHbW5OZXZKVWpXZXZoaUJDdlVpR05QZHlHZUFYTHQwSjRmcENjMkdrRjk5WFRVa0c0Vi90cXBLWEg5ZW1wQnhWbnYydURYWHBmRThtc21tTldsT01ZMkYrd3lWRE1HU2RDWWVQbVltNlRvZE95Q3puVDVuRElORkhRSWlYNFluVTZvVjNxOVVnd25jeWxPR2FTWm8rWFNhUW1WanV6QmszR2FLUVhSeFp4dWcxSnZzLzB3MkQ0ZjF2eHlVUWVHQlo1dlRJRCs0ZGM4c2Q0VCszUXZsZkFYQithSTcrVXpjN3pGQStMT1p4ZjVLQzhRbTF2Zjh4SUFkQm9VemwxTktQK1JIZEY0ZmlwNWxjYW1uWTNkMVMxdjFiL3RXUElZaThSaEwyazVRNW5hVUdnOFRvYTEyaVRtRm1iVUEwVVRXaDBDVE9tUytwaWdIY2xwRGh4OEdhb3ZTV2pMWFFyMFZJRW9oL3oxS1VUdG4zWGVPZzc5REMrNUNTVTZScmRQZW1UWC8xc2lkdjZENWdWYVZac0pUUG5VenNsVjZ2RlV2WFZFdW5WSElsRWM3VlhacE5MYmJLdk1iQnNiNi9rczMrTG9lWFRWOUlRc2dNTjlsMGIyZ0pablBOcE9NN3V2WjR1V2JZZDU5UlRPVHczSkdYcG52cXFoYlgrRzBES1ZDdGdFbDFVTFJQZjNlcmdrTjlQRjY0RUVIV1pSdDNFMjYyMWZQU0hhait4U0wySGhsendkVDJ6cXZoL3daZHNDRWpObzRvdUlMZDdJY2UxYlJId2ZwVldCWmhqZlppWlRBdEZOVk1MZzZnV01oaHFtV2hLMFIzRXBvS3R4eXVXelMxcTVtcnBPd3E4ZVZ5M0MvRlJlUk1JSEtlWktFSStlWWl1b21sMkNQb01Galg2cThCbHYwY0UzVnVvUWs4SzV5ZU1wZE5ISUlrczN4aExDU1hsZkU4cXYzeCtqdzlRWXBoUzR6TEhOZjN6dHJFbU1KMDRHMDEyVXNQWDUrdHF1a1hiVjJoS2JVa1JUSTZjK0R4RGZsTWh4b3NDSWMvemdKaEhGVXRkanlsdldDa3B1TDQyZFdEZnBPbHVhcWxaMWhOQnROc0xmQkdScVVKbUlTdjlaNEZFZWt2Z2pXdHNiR3I4UWU1Mkk3aTlKZmdSWGdPUXZWN2JKTmF0K090dFkvUXd5a3VOd0g0akMxYjVaVXZacDcrdXEyRmt1cnM0bWdPaGRyVy9kOWpnVFE2N3BnS0RyOGhtL2s3bzlvN3M1MDZ5MkNlZVkzUHVPOEZtbmJ6dmJ0WVBMYTMvVy9yWkZKWjdHZ0lNMzY3WHdQWWpnTXByL0VNZzRYb0RtNUd1bDFnSHM3L0NJU2FiM3p1Z2swNE1hQTBJVkVVdnJtM3VwV0RSOERjS2hsdFFNRnlOZ2lFVEkvZ25lNjJrVGQ2YzJkYms1V0hEcng3WkpJc3FjS1l2U3VKUmxJYWlvQnRGd1Rzb0N2NlVvZ1RBZGNnSkxjZ0p6eUluUElLYzhLR1VvaTkwd2ZTYVJ1d0FvbytvcWJxUjJ1Y1JwZzQvY2ozQlRKajlLZVp4NEdmam1tQVg1VG1XWUNsVE1OeW16d1FseFdtRFI5VisvaU9jSlBaZm1CNkhsK0FHalkwbzR0UnQxdmNIdTRiRmFuMnl6K0FiUmpOYjhvMVNUamRHR3FOT3hYNFNJVFZweUNQWEk4eWhpVDNCQWlZZTN6SVYrS2hrNWlSQ1BtalQrM1NsZXArdUJ2bmc1REdMUWZFWEE4RUE5bmJyblhvQXNYd3hlNyt1SXRBSWZvMzY4VWczUW1CcSt3am9iZlF4K2dSOWlqNURuNk12d0pmZ1Bla3JVdndhcVNLK1ZkN0Q3K0QzekE4ZTJ2aDJJekQ5dGVueFZENkpDNDUxMnh0OGxqNUhmVDlQZnhwK29zNEh0QVZkd1l6S25LcStRc3p4ZXhvM3JHd0xjcmQyVmRRUU4xbVh4MVBjd0MxdTRzUGJ6Qk5FTHYyTGFMRGRVdFAyb2JReEs4YXpIb080VzNpRDNUNDlmV2VVMmVmUjNmNy95TEZZWm1EUVh2YzlLOWxhZ1VVQU1lTGVmeGFzQWpDSGZWZ0FaQjZJZFlzNTBYdTEzYnFMRjliMjRJOVpEMnNEYmkxNC96OGd5MWl4bHRqZ3ZPVUI1TG9BZ0JYWXphbEpnc2FNclIxdFhZZFJSbEdIOVJRZHNFKzZ4bVJnOHlJZW84b3hSdU1RQlNvUHVNT01ZTUxkczR4R0NKK0gyU01pNWFidXMvd0NWWTV0TkEwWG0weTl4R00wSnRBT3ExcGdLMEJkS0FmN0RLR3YwTWZveTlGL1pHbGFsTnZsd25sQ2NoZ3RSTDlsVzZBcjRLTitvU2RnSXhYcElKeUYyN2dPMk8vTkFsaDFWWGVOT3lQZDkvM1NJS0EvVkNrMzlZNEVQWWl1SGVNQkhKcFdrbTNRZUpFTFBFWUwwVzlnZ1pLYTl6R0h6djhiSTdESGUvNFliaGZlMkU5aW9POUpNMzIzYnVic1NrUXZpTXcrbjNRTkpVZTh0T3Ryenk1djJFYTY3QTJ4VlpUczR1OHkxampudTUzTkMza0ViaUUvWmpzaXVsT2oyMFE2OFU2WUVpbXR4a3V1QzN2TDhZWkxvMnNGRWFkUXh1dkc5bEUwZXQ2K2xrKzdNUUhvTjBQWWxzYVhiK3ZhTjN0cjF5NDJkVm1rZlNiVjV4aTNCYlYxdTExTTl3RDBsT3pMWG5ZQ1I5MHQ0d3Qrcml1b0tBMTl5dXdEMnBMQUp3UTdaM3krY0luaThrZzYxOG5VU0FUMk82VksvM1dCSWExaFQyZXc3RW9GU3JhTUlqK1RXRTArOTRyYUhBSndFVDkrWjdwbFhFanEzeERIM1FEZzVJR08rNUw4TDIrSi8raXd6eFBNeGdFaUJnQUkvaXlab0hBbU1QMC9lRTVrOXk2aU5lMWs2dzdXejR1Y3JxVHB4eVozQmVVSnYyUnlwM1hGVFBZZHlMN0pJd1I0Umtqek43YXpYaTJDSU1FMHBUWG9kWmM3SVNqZCtyTDRGSHhHRXkzQVJIVUF4MVYvTFp2aWpsOHdXVjJtMWZTQ2Yrc3djMFcwNk9xYTVtNlNLenl0Um5oUVZhZ002TWNoUmdrSk1YWUU4WWhCOXVtS29vVHBHUnFOa0s0Zng0T1crdSs0Q3JjR1lyZ1RaNXZtRzlUVWp0Zm5pcVlaVVdUNlVnMGVFM2hraVVHNW5CcGdqRjE0RFhibytEUVJiZnBWMTN6TXBsSUpDdWMrVkxKeEdnYXp4RndXSTNaTG5qNjVYNTAweEIwM29aME1MNGFTUDZHdlFYS2J1UE1yVXF2bWFRaDNVR1pyUlVaTmlZbzl0WFRSVTd4R2xkU3lwWTQ1YkFyTFVMTXp0QWI2NWltZElPYVJEWXBJVUY1QnNJbzdLUTYvVXpTd3RJMlNlZFMxazdRb0lYUFNjMEdURjR1eldoeEx4dndOeEY3aDlyMTJMTFlYSWQ5RkQ1c3JPL1MzMmJLZVd6WlBKcVgvQU0zUWgxcHVmU3Q3NmppUXZZRWwxbU0wZU03VE1rd0FBM3Q5U0RtNzZaYVhLTFo1NjV2cE8waXh2ZlF5Q0kyajVCT2hWL2syUGlWM3NSdDRLcUZsL21EdURuVXo2bTdWdjc4UlBiM0kxalBNWFZDcVZZaWYrRVRGSG5XM3JjaE1iNTFlMXV1VnB6TDBsZ0dUSUFVTWFSVUZjS0FEc0lFRTBRSVptS2Z5RFVsRlpZY28yYTYvNDNRRENhWHNrY01HT0syczVLRnpxUHlpN3NqZko5UzhOVm9qajhvWDFNanV5ZkVFUUlDUGNXaW1BV2dqTEJ3a0pxME9KamlkSFp6MmlZM09aenNFa2RuckVObHluU05ZWWw1eWhES1hZZzhqMWJxVENBaHNuQzd5NUt0UUtKdFhsbUl5aFV1OE5MTEJCWml5dVFPVXlEYkpkRVVteURXWnJMOUNlYWFaWWhJSDdVUzB1SlhtZWJUSWlqWkJjckY4MDI4Nkp5ZXY3RXkxeEVRT3FzbVR3N25LdGRBVVplenlUZURsa3kzWEJHVVo0M0xLcGg3UUhLN3hxZUFRZXZ0b2NXUmxFdEpsQTAxUlpNcFJLVFZGWGVycHhWeEZ4YjY4bkY3anNxN0diZFUyMEJ1ZUlWSk93c2ZGcTRUUEJJVVNPTGk0Sk1yUVZ6OTlkWk1oYVBDNFdUc1l5Z0VuWnFzNG1yd1lLZHhldVBsWUtUTEpxRFMvVjRvNGhDbytEdk5RYi9RSSt2SG9yZWZnTVRQTW00WTV1MDc1UDZKSVhoSC9lMS95bndFQSkgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpO3VuaWNvZGUtcmFuZ2U6dSswMD8/LHUrMDEzMSx1KzAxNTItMDE1Myx1KzAyYmItMDJiYyx1KzAyYzYsdSswMmRhLHUrMDJkYyx1KzIwMDAtMjA2Zix1KzIwNzQsdSsyMGFjLHUrMjEyMix1KzIxOTEsdSsyMTkzLHUrMjIxMix1KzIyMTUsdStmZWZmLHUrZmZmZH1ib2R5LGh0bWx7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNH1odG1se2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1wYXJhZ3JhcGgscHtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS42O3RleHQtYWxpZ246anVzdGlmeX0ubW9uc3Rlci1oMSxoMXtmb250LXNpemU6M3JlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xNTttYXJnaW46NHJlbSAwIDEuNXJlbX0ubW9uc3Rlci1oMixoMntmb250LXNpemU6Mi41cmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjI7bWFyZ2luOjRyZW0gMCAxLjVyZW19Lm1vbnN0ZXItaDMsaDN7Zm9udC1zaXplOjJyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMjU7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfS5tb25zdGVyLWg0LGg0e2ZvbnQtc2l6ZToxLjVyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMzttYXJnaW46NHJlbSAwIDEuMjVyZW19Lm1vbnN0ZXItaDUsaDV7Zm9udC1zaXplOjEuNHJlbTtmb250LXdlaWdodDpib2xkZXI7bGluZS1oZWlnaHQ6MS4zO21hcmdpbjo0cmVtIDAgMS4yNXJlbX0ubW9uc3Rlci1oNixoNntmb250LXNpemU6MS4zcmVtO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxLjM7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfXAraDF7bWFyZ2luLXRvcDozLjc1cmVtfXAraDJ7bWFyZ2luLXRvcDozcmVtfXAraDN7bWFyZ2luLXRvcDoyLjI1cmVtfXAraDR7bWFyZ2luLXRvcDoxLjVyZW19cCtoNXttYXJnaW4tdG9wOi43NXJlbX1kaXYraDEsZGl2K2gyLGRpditoMyxkaXYraDQsZGl2K2g1LGRpditoNixwK2g2e21hcmdpbi10b3A6MH0uZGVjb3tiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTEpIDAsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0yKSA1MCUsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0zKSAxMDAlKTstd2Via2l0LWJhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtc2l6ZTpjb3Zlcjtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKTt0ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnR9OjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfTo6c2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9a2Jke2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2JvcmRlci1yYWRpdXM6MTByZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7cGFkZGluZzouMjVlbSAuNmVtO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH1kZXRhaWxze21hcmdpbi1ib3R0b206MXJlbX1zdW1tYXJ5e2N1cnNvcjpwb2ludGVyO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczpcXFwidG51bVxcXCI7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4xZW07cGFkZGluZzouNnJlbSAxcmVtfWRldGFpbHNbb3Blbl17cGFkZGluZzouNnJlbSAxcmVtIC43NXJlbX1kZXRhaWxzW29wZW5dIHN1bW1hcnl7bWFyZ2luLWJvdHRvbTouNXJlbTtwYWRkaW5nOjB9Lm1vbnN0ZXItbm8tdXNlci1zZWxlY3R7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfUBrZXlmcmFtZXMgZGV0YWlscy1zaG93ezAle29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtLjVlbSl9fWRldGFpbHNbb3Blbl0+Om5vdChzdW1tYXJ5KXthbmltYXRpb246ZGV0YWlscy1zaG93IC4xNXMgZWFzZS1pbi1vdXR9ZGV0YWlsc1tvcGVuXT46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9Lm1vbm9zcGFjZXtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5LW1vbm9zcGFjZSl9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde291dGxpbmU6bm9uZTt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXS5mbGV4e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fTpob3N0e2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmJsb2NrfTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1mb250LWZhbWlseTotYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCxcXFwiUXVpY2tzYW5kXFxcIixcXFwiU2Vnb2UgVUlcXFwiLFxcXCJSb2JvdG9cXFwiLFxcXCJPeHlnZW5cXFwiLFxcXCJVYnVudHVcXFwiLFxcXCJDYW50YXJlbGxcXFwiLFxcXCJGaXJhIFNhbnNcXFwiLFxcXCJEcm9pZCBTYW5zXFxcIixcXFwiSGVsdmV0aWNhIE5ldWVcXFwiLEFyaWFsLHNhbnMtc2VyaWYsXFxcIkFwcGxlIENvbG9yIEVtb2ppXFxcIixcXFwiU2Vnb2UgVUkgRW1vamlcXFwiLFxcXCJTZWdvZSBVSSBTeW1ib2xcXFwiOy0tbW9uc3Rlci1mb250LWZhbWlseS1tb25vc3BhY2U6XFxcIkNvbnNvbGFzXFxcIixcXFwiQ291cmllciBOZXdcXFwiLFxcXCJSb2JvdG8gTW9ub1xcXCIsXFxcIlNvdXJjZSBDb2RlIFByb1xcXCIsXFxcIkZpcmEgTW9ub1xcXCIsbW9ub3NwYWNlOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNil9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNik7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTIpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNik7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTIpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi00KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNik7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0zKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMik7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0yKTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNCk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi01KTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTMpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNCk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS02KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMyk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0yKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNCk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTUpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTYpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMTojODMzYWI0Oy0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0yOiNmZDFkMWQ7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTM6I2ZjYjA0NTstLW1vbnN0ZXItYm94LXNoYWRvdy0xOm5vbmU7LS1tb25zdGVyLWJveC1zaGFkb3ctMjotMXB4IDFweCAxMHB4IDFweCBoc2xhKDAsMCUsNzYlLC42MSk7LS1tb25zdGVyLXRleHQtc2hhZG93Om5vbmU7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC0xKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTYpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWhvdmVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtNik7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC0yKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItd2lkdGg6MnB4Oy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1zdHlsZTpzb2xpZDstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItcmFkaXVzOjA7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS01KTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItdGhlbWUtb24tY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItdGhlbWUtb24tYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi01KTstLW1vbnN0ZXItdGhlbWUtb2ZmLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtb2ZmLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci10aGVtZS1vbi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLXRoZW1lLW9uLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtb2ZmLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtb2ZmLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS01KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWJvcmRlci1zdHlsZTpzb2xpZDstLW1vbnN0ZXItYm9yZGVyLXdpZHRoOjNweDstLW1vbnN0ZXItYm9yZGVyLXJhZGl1czowOy0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZTotNHB4Oy0tbW9uc3Rlci16LWluZGV4LWRlZmF1bHQ6MDstLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lOjEwOy0tbW9uc3Rlci16LWluZGV4LWRyb3Bkb3duOjIwMDstLW1vbnN0ZXItei1pbmRleC1kcm9wZG93bi1vdmVybGF5OjIxMDstLW1vbnN0ZXItei1pbmRleC1zdGlja3k6MzAwOy0tbW9uc3Rlci16LWluZGV4LXN0aWNreS1vdmVybGF5OjMxMDstLW1vbnN0ZXItei1pbmRleC1maXhlZDo0MDA7LS1tb25zdGVyLXotaW5kZXgtZml4ZWQtb3ZlcmxheTo0MTA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtYmFja2Ryb3A6NTAwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLWJhY2tkcm9wLW92ZXJsYXk6NTEwOy0tbW9uc3Rlci16LWluZGV4LW9mZmNhbnZhczo2MDA7LS1tb25zdGVyLXotaW5kZXgtb2ZmY2FudmFzLW92ZXJsYXk6NjEwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsOjcwMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1vdmVybGF5OjcxMDstLW1vbnN0ZXItei1pbmRleC1wb3BvdmVyOjgwMDstLW1vbnN0ZXItei1pbmRleC1wb3BvdmVyLW92ZXJsYXk6ODEwOy0tbW9uc3Rlci16LWluZGV4LXRvb2x0aXA6ODAwOy0tbW9uc3Rlci16LWluZGV4LXRvb2x0aXAtb3ZlcmxheTo5MTA7LS1tb25zdGVyLXNwYWNlLTA6MDstLW1vbnN0ZXItc3BhY2UtMToycHg7LS1tb25zdGVyLXNwYWNlLTI6NHB4Oy0tbW9uc3Rlci1zcGFjZS0zOjZweDstLW1vbnN0ZXItc3BhY2UtNDoxMHB4Oy0tbW9uc3Rlci1zcGFjZS01OjE2cHg7LS1tb25zdGVyLXNwYWNlLTY6MjZweDstLW1vbnN0ZXItc3BhY2UtNzo0MnB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTA6NDgwcHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtNDo0ODBweDstLW1vbnN0ZXItYnJlYWtwb2ludC03Ojc2OHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTk6OTkycHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtMTI6MTIwMHB4Oy0tbW9uc3Rlci1kcmFnZ2VyLXdpZHRoOjJweDstLW1vbnN0ZXItZHJhZ2dlci1oYW5kbGUtd2lkdGg6NHB4Oy0tbW9uc3Rlci1kcmFnZ2VyLWhhbmRsZS1oZWlnaHQ6NTBweH1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17YWxpZ24tY29udGVudDpzdHJldGNoO2JvcmRlcjowO2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXgtd3JhcDpub3dyYXA7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQ7bWFyZ2luOjA7bWluLWhlaWdodDoxMDB2aDtwYWRkaW5nOjB9W2RhdGEtbW9uc3Rlci1yb2xlPWhlYWRlcl17aGVpZ2h0OjY0cHg7bWFyZ2luOjAgMCAwIDYwcHh9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRlbnRdLFtkYXRhLW1vbnN0ZXItcm9sZT1mb290ZXJdLFtkYXRhLW1vbnN0ZXItcm9sZT1oZWFkZXJde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59IFxufWAsXG5cdFx0MCxcblx0KTtcbn0gY2F0Y2ggKGUpIHtcblx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0ZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKSxcblx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdGUgKyBcIlwiLFxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi8uLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IGdldERvY3VtZW50IH0gZnJvbSBcIi4uLy4uL2RvbS91dGlsLm1qc1wiO1xuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZU9iamVjdCwgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBwYXJzZUxvY2FsZSB9IGZyb20gXCIuLi9sb2NhbGUubWpzXCI7XG5pbXBvcnQgeyBQcm92aWRlciB9IGZyb20gXCIuLi9wcm92aWRlci5tanNcIjtcbmltcG9ydCB7IFRyYW5zbGF0aW9ucyB9IGZyb20gXCIuLi90cmFuc2xhdGlvbnMubWpzXCI7XG5cbmV4cG9ydCB7IEVtYmVkIH07XG5cbi8qKlxuICogVGhlIEVtYmVkIHByb3ZpZGVyIHJldHJpZXZlcyBhIEpTT04gZmlsZSBmcm9tIHRoZSBnaXZlbiBTY3JpcHQgVGFnLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vLi4vZXhhbXBsZS9pMThuL3Byb3ZpZGVycy9lbWJlZC5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMzA2Nn1cbiAqL1xuY2xhc3MgRW1iZWQgZXh0ZW5kcyBQcm92aWRlciB7XG5cdC8qKlxuXHQgKiBgYGBodG1sXG5cdCAqIDxzY3JpcHQgaWQ9XCJ0cmFuc2xhdGlvbnNcIiB0eXBlPVwiYXBwbGljYXRpb24vanNvblwiPlxuXHQgKiB7XG5cdCAqICAgICBcImhlbGxvXCI6IFwiSGFsbG9cIlxuXHQgKiB9XG5cdCAqIDwvc2NyaXB0PlxuXHQgKiBgYGBcblx0ICpcblx0ICpcblx0ICogYGBgamF2YXNjcmlwdFxuXHQgKiBuZXcgRW1iZWQoJ3RyYW5zbGF0aW9ucycpXG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fHN0cmluZ30gZWxlbWVudE9ySWRcblx0ICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcblx0ICovXG5cdGNvbnN0cnVjdG9yKGVsZW1lbnRPcklkLCBvcHRpb25zKSB7XG5cdFx0c3VwZXIob3B0aW9ucyk7XG5cblx0XHRpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRvcHRpb25zID0ge307XG5cdFx0fVxuXG5cdFx0aWYgKGVsZW1lbnRPcklkIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdC8qKlxuXHRcdFx0ICogQHByb3BlcnR5IHtIVE1MRWxlbWVudHxzdHJpbmd9XG5cdFx0XHQgKi9cblx0XHRcdHRoaXMudHJhbnNsYXRlRWxlbWVudCA9IGVsZW1lbnRPcklkO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvKipcblx0XHRcdCAqIEBwcm9wZXJ0eSB7SFRNTEVsZW1lbnR8c3RyaW5nfVxuXHRcdFx0ICovXG5cdFx0XHR0aGlzLnRyYW5zbGF0ZUVsZW1lbnQgPSBnZXREb2N1bWVudCgpLmdldEVsZW1lbnRCeUlkKFxuXHRcdFx0XHR2YWxpZGF0ZVN0cmluZyhlbGVtZW50T3JJZCksXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICogQHByb3BlcnR5IHtPYmplY3R9IG9wdGlvbnNcblx0XHQgKi9cblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IGV4dGVuZChcblx0XHRcdHt9LFxuXHRcdFx0c3VwZXIuZGVmYXVsdHMsXG5cdFx0XHR0aGlzLmRlZmF1bHRzLFxuXHRcdFx0dmFsaWRhdGVPYmplY3Qob3B0aW9ucyksXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZWZhdWx0c1xuXHQgKlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmV0Y2hfQVBJfVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBleHRlbmQoe30sIHN1cGVyLmRlZmF1bHRzKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge0xvY2FsZXxzdHJpbmd9IGxvY2FsZVxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0Z2V0VHJhbnNsYXRpb25zKGxvY2FsZSkge1xuXHRcdGlmIChpc1N0cmluZyhsb2NhbGUpKSB7XG5cdFx0XHRsb2NhbGUgPSBwYXJzZUxvY2FsZShsb2NhbGUpO1xuXHRcdH1cblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRpZiAodGhpcy50cmFuc2xhdGVFbGVtZW50ID09PSBudWxsKSB7XG5cdFx0XHRcdHJlamVjdChuZXcgRXJyb3IoXCJUZXh0IG5vdCBmb3VuZFwiKSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCEodGhpcy50cmFuc2xhdGVFbGVtZW50IGluc3RhbmNlb2YgSFRNTFNjcmlwdEVsZW1lbnQpKSB7XG5cdFx0XHRcdHJlamVjdChuZXcgRXJyb3IoXCJFbGVtZW50IGlzIG5vdCBhIHNjcmlwdCB0YWdcIikpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLnRyYW5zbGF0ZUVsZW1lbnQudHlwZSAhPT0gXCJhcHBsaWNhdGlvbi9qc29uXCIpIHtcblx0XHRcdFx0cmVqZWN0KFxuXHRcdFx0XHRcdG5ldyBFcnJvcihcIkVsZW1lbnQgaXMgbm90IGEgc2NyaXB0IHRhZyB3aXRoIHR5cGUgYXBwbGljYXRpb24vanNvblwiKSxcblx0XHRcdFx0KTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRsZXQgdHJhbnNsYXRpb25zID0gbnVsbDtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRyYW5zbGF0aW9ucyA9IEpTT04ucGFyc2UodGhpcy50cmFuc2xhdGVFbGVtZW50LmlubmVySFRNTC50cmltKCkpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRyZWplY3QoZSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRyYW5zbGF0aW9ucyA9PT0gbnVsbCkge1xuXHRcdFx0XHRyZWplY3QobmV3IEVycm9yKFwiVHJhbnNsYXRpb25zIG5vdCBmb3VuZCBvciBpbnZhbGlkXCIpKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCB0ID0gbmV3IFRyYW5zbGF0aW9ucyhsb2NhbGUpO1xuXHRcdFx0dC5hc3NpZ25UcmFuc2xhdGlvbnModHJhbnNsYXRpb25zKTtcblxuXHRcdFx0cmVzb2x2ZSh0KTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplcyB0aGUgdHJhbnNsYXRpb25zIGZvciB0aGUgY3VycmVudCBkb2N1bWVudC5cblx0ICpcblx0ICogYHNjcmlwdFtkYXRhLW1vbnN0ZXItcm9sZT10cmFuc2xhdGlvbnNdYCBpcyBzZWFyY2hlZCBmb3IgYW5kIHRoZSB0cmFuc2xhdGlvbnMgYXJlIGFzc2lnbmVkIHRvIHRoZSBlbGVtZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0gZWxlbWVudFxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZTxBd2FpdGVkPCpbXT4+fFByb21pc2U8QXdhaXRlZDx1bmtub3duPltdPn1cblx0ICovXG5cdHN0YXRpYyBhc3NpZ25UcmFuc2xhdGlvbnNUb0VsZW1lbnQoZWxlbWVudCkge1xuXHRcdGNvbnN0IGQgPSBnZXREb2N1bWVudCgpO1xuXG5cdFx0aWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdFx0ZWxlbWVudCA9IGQucXVlcnlTZWxlY3RvcihcImJvZHlcIik7XG5cdFx0fVxuXG5cdFx0Y29uc3QgbGlzdCA9IGQucXVlcnlTZWxlY3RvckFsbChcInNjcmlwdFtkYXRhLW1vbnN0ZXItcm9sZT10cmFuc2xhdGlvbnNdXCIpO1xuXHRcdGlmIChsaXN0ID09PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcblx0XHR9XG5cblx0XHRjb25zdCBwcm9taXNlcyA9IFtdO1xuXG5cdFx0bGlzdC5mb3JFYWNoKCh0cmFuc2xhdGlvbkVsZW1lbnQpID0+IHtcblx0XHRcdGNvbnN0IHAgPSBuZXcgRW1iZWQodHJhbnNsYXRpb25FbGVtZW50LCB7fSk7XG5cdFx0XHRwcm9taXNlcy5wdXNoKHAuYXNzaWduVG9FbGVtZW50KHVuZGVmaW5lZCwgZWxlbWVudCkpO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGdldERvY3VtZW50LCBnZXRXaW5kb3cgfSBmcm9tIFwiLi91dGlsLm1qc1wiO1xuXG5leHBvcnQgeyBkb21SZWFkeSwgd2luZG93UmVhZHkgfTtcblxuLyoqXG4gKiBUaGlzIHZhcmlhYmxlIGlzIGEgcHJvbWlzZSBmdWxmaWxsZWQgYXMgc29vbiBhcyB0aGUgZG9tIGlzIGF2YWlsYWJsZS5cbiAqXG4gKiBUaGUgRE9NQ29udGVudExvYWRlZCBldmVudCBpcyBmaXJlZCB3aGVuIHRoZSBvcmlnaW5hbCBIVE1MIGRvY3VtZW50IGlzIGZ1bGx5IGxvYWRlZCBhbmQgcGFyc2VkXG4gKiB3aXRob3V0IHdhaXRpbmcgZm9yIHN0eWxlc2hlZXRzLCBpbWFnZXMsIGFuZCBzdWJmcmFtZXMgdG8gZmluaXNoIGxvYWRpbmcuXG4gKlxuICogZG9jdW1lbnQucmVhZHlTdGF0ZSBjaGFuZ2VzIHRvIGludGVyYWN0aXZlXG4gKiB3aW5kb3cncyBET01Db250ZW50TG9hZGVkIGV2ZW50IGdldHMgZmlyZWRcbiAqIGRvY3VtZW50LnJlYWR5U3RhdGUgY2hhbmdlcyB0byBjb21wbGV0ZVxuICogd2luZG93J3MgbG9hZCBldmVudCBnZXRzIGZpcmVkIGxvYWRcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjMxLjBcbiAqIEBzdW1tYXJ5IHZhcmlhYmxlIHRvIGNoZWNrIGlmIGRvbSBpcyByZWFkeVxuICogQHR5cGUge1Byb21pc2V9XG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Eb2N1bWVudC9ET01Db250ZW50TG9hZGVkX2V2ZW50XG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Eb2N1bWVudC9yZWFkeVN0YXRlXG4gKi9cbmNvbnN0IGRvbVJlYWR5ID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblx0Y29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXG5cdGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSBcImxvYWRpbmdcIikge1xuXHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsIHJlc29sdmUpO1xuXHR9IGVsc2Uge1xuXHRcdHJlc29sdmUoKTtcblx0fVxufSk7XG5cbi8qKlxuICogVGhpcyB2YXJpYWJsZSBpcyBhIHByb21pc2UgaXMgZnVsZmlsbGVkIGFzIHNvb24gYXMgdGhlIHdpbmRvd3MgaXMgYXZhaWxhYmxlLlxuICpcbiAqIFRoZSBsb2FkIGV2ZW50IGZpcmVzIHdoZW4gdGhlIGVudGlyZSBwYWdlIGlzIGxvYWRlZCwgaW5jbHVkaW5nIGFsbCBkZXBlbmRlbnQgcmVzb3VyY2VzIHN1Y2ggYXMgc3R5bGVzaGVldHMsXG4gKiBhc3NldHMsIGFuZCBpbWFnZXMuIFVubGlrZSBET01Db250ZW50TG9hZGVkLCB3aGljaCBmaXJlcyBhcyBzb29uIGFzIHRoZSBET00gb2YgdGhlIHBhZ2UgaXMgbG9hZGVkLFxuICogd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgcmVzb3VyY2VzIHRvIGZpbmlzaCBsb2FkaW5nLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMzEuMFxuICogQHN1bW1hcnkgdmFyaWFibGUgdG8gY2hlY2sgaWYgd2luZG93IGlzIHJlYWR5XG4gKiBAdHlwZSB7UHJvbWlzZX1cbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1dpbmRvdy9sb2FkX2V2ZW50XG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Eb2N1bWVudC9yZWFkeVN0YXRlXG4gKi9cbmNvbnN0IHdpbmRvd1JlYWR5ID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblx0Y29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXHRjb25zdCB3aW5kb3cgPSBnZXRXaW5kb3coKTtcblxuXHRpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiKSB7XG5cdFx0cmVzb2x2ZSgpO1xuXHR9IGVsc2Uge1xuXHRcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCByZXNvbHZlKTtcblx0fVxufSk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSBcIi4uL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHsgQmFzZVdpdGhPcHRpb25zIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2V3aXRob3B0aW9ucy5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbE9iamVjdCB9IGZyb20gXCIuLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgU3RhY2sgfSBmcm9tIFwiLi4vdHlwZXMvc3RhY2subWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlLCB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IEZvY3VzTWFuYWdlciB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBLRVlfRE9DVU1FTlQgPSBcImRvY3VtZW50XCI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEtFWV9DT05URVhUID0gXCJjb250ZXh0XCI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtTeW1ib2x9XG4gKi9cbmNvbnN0IHN0YWNrU3ltYm9sID0gU3ltYm9sKFwic3RhY2tcIik7XG5cbi8qKlxuICogV2l0aCB0aGUgZm9jdXMgbWFuYWdlciB0aGUgZm9jdXMgY2FuIGJlIHN0b3JlZCBpbiBhIGRvY3VtZW50LCByZWNhbGxlZCBhbmQgbW92ZWQuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGxvY2FsZVxuICogQHN1bW1hcnkgSGFuZGxlIHRoZSBmb2N1c1xuICovXG5jbGFzcyBGb2N1c01hbmFnZXIgZXh0ZW5kcyBCYXNlV2l0aE9wdGlvbnMge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R8dW5kZWZpbmVkfSBvcHRpb25zXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG5cdFx0c3VwZXIob3B0aW9ucyk7XG5cdFx0dmFsaWRhdGVJbnN0YW5jZSh0aGlzLmdldE9wdGlvbihLRVlfRE9DVU1FTlQpLCBIVE1MRG9jdW1lbnQpO1xuXG5cdFx0dGhpc1tzdGFja1N5bWJvbF0gPSBuZXcgU3RhY2soKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL2ZvY3VzbWFuYWdlclwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge0hUTUxEb2N1bWVudH0gZG9jdW1lbnQgdGhlIGRvY3VtZW50IG9iamVjdCBpbnRvIHdoaWNoIHRoZSBub2RlIGlzIHRvIGJlIGFwcGVuZGVkXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIGV4dGVuZCh7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdFtLRVlfRE9DVU1FTlRdOiBnZXRHbG9iYWxPYmplY3QoXCJkb2N1bWVudFwiKSxcblx0XHRcdFtLRVlfQ09OVEVYVF06IHVuZGVmaW5lZCxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1lbWJlcnMgdGhlIGN1cnJlbnQgZm9jdXMgb24gYSBzdGFjay5cblx0ICogU2V2ZXJhbCBmb2N1cyBjYW4gYmUgc3RvcmVkLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5Gb2N1c01hbmFnZXJ9XG5cdCAqL1xuXHRzdG9yZUZvY3VzKCkge1xuXHRcdGNvbnN0IGFjdGl2ZSA9IHRoaXMuZ2V0QWN0aXZlKCk7XG5cdFx0aWYgKGFjdGl2ZSBpbnN0YW5jZW9mIE5vZGUpIHtcblx0XHRcdHRoaXNbc3RhY2tTeW1ib2xdLnB1c2goYWN0aXZlKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGxhc3QgZm9jdXMgb24gdGhlIHN0YWNrIGlzIHNldCBhZ2FpblxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5Gb2N1c01hbmFnZXJ9XG5cdCAqL1xuXHRyZXN0b3JlRm9jdXMoKSB7XG5cdFx0Y29uc3QgbGFzdCA9IHRoaXNbc3RhY2tTeW1ib2xdLnBvcCgpO1xuXHRcdGlmIChsYXN0IGluc3RhbmNlb2YgTm9kZSkge1xuXHRcdFx0dGhpcy5mb2N1cyhsYXN0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge05vZGV9IGVsZW1lbnRcblx0ICogQHBhcmFtIHtib29sZWFufSBwcmV2ZW50U2Nyb2xsXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLkZvY3VzTWFuYWdlcn1cblx0ICovXG5cdGZvY3VzKGVsZW1lbnQsIHByZXZlbnRTY3JvbGwpIHtcblx0XHR2YWxpZGF0ZUluc3RhbmNlKGVsZW1lbnQsIE5vZGUpO1xuXG5cdFx0ZWxlbWVudC5mb2N1cyh7XG5cdFx0XHRwcmV2ZW50U2Nyb2xsOiBwcmV2ZW50U2Nyb2xsID8/IGZhbHNlLFxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7RWxlbWVudH1cblx0ICovXG5cdGdldEFjdGl2ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRPcHRpb24oS0VZX0RPQ1VNRU5UKS5hY3RpdmVFbGVtZW50O1xuXHR9XG5cblx0LyoqXG5cdCAqIFNlbGVjdCBhbGwgZWxlbWVudHMgdGhhdCBjYW4gYmUgZm9jdXNlZFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3x1bmRlZmluZWR9IHF1ZXJ5XG5cdCAqIEByZXR1cm4ge2FycmF5fVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZlxuXHQgKi9cblx0Z2V0Rm9jdXNhYmxlKHF1ZXJ5KSB7XG5cdFx0bGV0IGNvbnRleHRFbGVtZW50ID0gdGhpcy5nZXRPcHRpb24oS0VZX0NPTlRFWFQpO1xuXHRcdGlmIChjb250ZXh0RWxlbWVudCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb250ZXh0RWxlbWVudCA9IHRoaXMuZ2V0T3B0aW9uKEtFWV9ET0NVTUVOVCk7XG5cdFx0fVxuXG5cdFx0dmFsaWRhdGVJbnN0YW5jZShjb250ZXh0RWxlbWVudCwgTm9kZSk7XG5cblx0XHRpZiAocXVlcnkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dmFsaWRhdGVTdHJpbmcocXVlcnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiBbXG5cdFx0XHQuLi5jb250ZXh0RWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFxuXHRcdFx0XHQnZGV0YWlscywgYnV0dG9uLCBpbnB1dCwgW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pLCBzZWxlY3QsIHRleHRhcmVhLCBhW2hyZWZdLCBib2R5Jyxcblx0XHRcdCksXG5cdFx0XS5maWx0ZXIoKGVsZW1lbnQpID0+IHtcblx0XHRcdGlmIChxdWVyeSAhPT0gdW5kZWZpbmVkICYmICFlbGVtZW50Lm1hdGNoZXMocXVlcnkpKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGVsZW1lbnQuaGFzQXR0cmlidXRlKFwiZGlzYWJsZWRcIikpIHJldHVybiBmYWxzZTtcblx0XHRcdGlmIChlbGVtZW50LmdldEF0dHJpYnV0ZShcImFyaWEtaGlkZGVuXCIpID09PSBcInRydWVcIikgcmV0dXJuIGZhbHNlO1xuXG5cdFx0XHRjb25zdCByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHRcdGlmIChyZWN0LndpZHRoID09PSAwKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRpZiAocmVjdC5oZWlnaHQgPT09IDApIHJldHVybiBmYWxzZTtcblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHF1ZXJ5XG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLkZvY3VzTWFuYWdlcn1cblx0ICovXG5cdGZvY3VzTmV4dChxdWVyeSkge1xuXHRcdGNvbnN0IGN1cnJlbnQgPSB0aGlzLmdldEFjdGl2ZSgpO1xuXHRcdGNvbnN0IGZvY3VzYWJsZSA9IHRoaXMuZ2V0Rm9jdXNhYmxlKHF1ZXJ5KTtcblxuXHRcdGlmICghaXNBcnJheShmb2N1c2FibGUpIHx8IGZvY3VzYWJsZS5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGlmIChjdXJyZW50IGluc3RhbmNlb2YgTm9kZSkge1xuXHRcdFx0Y29uc3QgaW5kZXggPSBmb2N1c2FibGUuaW5kZXhPZihjdXJyZW50KTtcblxuXHRcdFx0aWYgKGluZGV4ID4gLTEpIHtcblx0XHRcdFx0dGhpcy5mb2N1cyhmb2N1c2FibGVbaW5kZXggKyAxXSB8fCBmb2N1c2FibGVbMF0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5mb2N1cyhmb2N1c2FibGVbMF0pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmZvY3VzKGZvY3VzYWJsZVswXSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHF1ZXJ5XG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLkZvY3VzTWFuYWdlcn1cblx0ICovXG5cdGZvY3VzUHJldihxdWVyeSkge1xuXHRcdGNvbnN0IGN1cnJlbnQgPSB0aGlzLmdldEFjdGl2ZSgpO1xuXHRcdGNvbnN0IGZvY3VzYWJsZSA9IHRoaXMuZ2V0Rm9jdXNhYmxlKHF1ZXJ5KTtcblxuXHRcdGlmICghaXNBcnJheShmb2N1c2FibGUpIHx8IGZvY3VzYWJsZS5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGlmIChjdXJyZW50IGluc3RhbmNlb2YgTm9kZSkge1xuXHRcdFx0Y29uc3QgaW5kZXggPSBmb2N1c2FibGUuaW5kZXhPZihjdXJyZW50KTtcblxuXHRcdFx0aWYgKGluZGV4ID4gLTEpIHtcblx0XHRcdFx0dGhpcy5mb2N1cyhmb2N1c2FibGVbaW5kZXggLSAxXSB8fCBmb2N1c2FibGVbZm9jdXNhYmxlLmxlbmd0aCAtIDFdKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuZm9jdXMoZm9jdXNhYmxlW2ZvY3VzYWJsZS5sZW5ndGggLSAxXSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZm9jdXMoZm9jdXNhYmxlW2ZvY3VzYWJsZS5sZW5ndGggLSAxXSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQgeyBQYXRoZmluZGVyIH0gZnJvbSBcIi4uL2RhdGEvcGF0aGZpbmRlci5tanNcIjtcbmltcG9ydCB7IHBhcnNlRGF0YVVSTCB9IGZyb20gXCIuL2RhdGF1cmwubWpzXCI7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gXCIuL2lzLm1qc1wiO1xuaW1wb3J0IHsgT2JzZXJ2ZXIgfSBmcm9tIFwiLi9vYnNlcnZlci5tanNcIjtcbmltcG9ydCB7IFByb3h5T2JzZXJ2ZXIgfSBmcm9tIFwiLi9wcm94eW9ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVPYmplY3QgfSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSBcIi4vaXMubWpzXCI7XG5cbmV4cG9ydCB7IGVxdWlwV2l0aEludGVybmFsIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IHByb3BlcnR5TmFtZSA9IFwiaW50ZXJuYWxEZWZhdWx0c1wiO1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gZXh0ZW5kcyB0aGUgZ2l2ZW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBtZXRob2RzOlxuICpcbiAqIC0gYXR0YWNoSW50ZXJuYWxPYnNlcnZlclxuICogLSBkZXRhY2hJbnRlcm5hbE9ic2VydmVyXG4gKiAtIGNvbnRhaW5zSW50ZXJuYWxPYnNlcnZlclxuICogLSBzZXRJbnRlcm5hbFxuICogLSBzZXRJbnRlcm5hbHNcbiAqIC0gZ2V0SW50ZXJuYWxcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAzLjE1LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKi9cbmZ1bmN0aW9uIGVxdWlwV2l0aEludGVybmFsKCkge1xuXHR2YWxpZGF0ZU9iamVjdCh0aGlzKTtcblxuXHRpZiAoIWhhc0dldHRlcih0aGlzLCBwcm9wZXJ0eU5hbWUpKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHByb3BlcnR5TmFtZSwge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiB7fTtcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHRjb25zdCBkZWZhdWx0cyA9IGV4dGVuZCh7fSwgdGhpc1twcm9wZXJ0eU5hbWVdIHx8IHt9KTtcblx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSBuZXcgUHJveHlPYnNlcnZlcihkZWZhdWx0cyk7XG5cblx0LyoqXG5cdCAqIEF0dGFjaCBhIG5ldyBvYnNlcnZlclxuXHQgKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJuIHtQcm94eU9ic2VydmVyfVxuXHQgKi9cblx0dGhpc1tcImF0dGFjaEludGVybmFsT2JzZXJ2ZXJcIl0gPSAob2JzZXJ2ZXIpID0+IHtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5hdHRhY2hPYnNlcnZlcihvYnNlcnZlcik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG5cblx0LyoqXG5cdCAqIERldGFjaCBhIG9ic2VydmVyXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm4ge1Byb3h5T2JzZXJ2ZXJ9XG5cdCAqL1xuXHR0aGlzW1wiZGV0YWNoSW50ZXJuYWxPYnNlcnZlclwiXSA9IChvYnNlcnZlcikgPT4ge1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmRldGFjaE9ic2VydmVyKG9ic2VydmVyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblxuXHQvKipcblx0ICogQ2hlY2sgaWYgYSBvYnNlcnZlciBpcyBhdHRhY2hlZFxuXHQgKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0dGhpc1tcImNvbnRhaW5zSW50ZXJuYWxPYnNlcnZlclwiXSA9IChvYnNlcnZlcikgPT4ge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsU3ltYm9sXS5jb250YWluc09ic2VydmVyKG9ic2VydmVyKTtcblx0fTtcblxuXHQvKipcblx0ICogU2V0IGFuIGludGVybmFsIHZhbHVlLCBuZXN0ZWQgaW50ZXJuYWxzIGNhbiBiZSBzcGVjaWZpZWQgYnkgcGF0aCBgYS5iLmNgXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybiB7RGF0YXNvdXJjZX1cblx0ICovXG5cdHRoaXNbXCJzZXRJbnRlcm5hbFwiXSA9IChwYXRoLCB2YWx1ZSkgPT4ge1xuXHRcdG5ldyBQYXRoZmluZGVyKHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKSkuc2V0VmlhKHBhdGgsIHZhbHVlKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblxuXHQvKipcblx0ICogc2V0IG11bHRpcGxlIGludGVybmFscyBhdCBvbmNlXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfG9iamVjdH0gb3B0aW9uc1xuXHQgKiBAcmV0dXJuIHtEYXRhc291cmNlfVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIG9wdGlvbnMgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIGpzb24gZGVmaW5pdGlvblxuXHQgKi9cblx0dGhpc1tcInNldEludGVybmFsc1wiXSA9IChvcHRpb25zKSA9PiB7XG5cdFx0aWYgKGlzU3RyaW5nKG9wdGlvbnMpKSB7XG5cdFx0XHRvcHRpb25zID0gcGFyc2VPcHRpb25zSlNPTihvcHRpb25zKTtcblx0XHR9XG5cblx0XHRleHRlbmQodGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpLCBkZWZhdWx0cywgb3B0aW9ucyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG5cblx0LyoqXG5cdCAqIG5lc3RlZCBpbnRlcm5hbHMgY2FuIGJlIHNwZWNpZmllZCBieSBwYXRoIGBhLmIuY2Bcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcblx0ICogQHBhcmFtIHsqfSBkZWZhdWx0VmFsdWVcblx0ICogQHJldHVybiB7Kn1cblx0ICovXG5cdHRoaXNbXCJnZXRJbnRlcm5hbFwiXSA9IChwYXRoLCBkZWZhdWx0VmFsdWUpID0+IHtcblx0XHRsZXQgdmFsdWU7XG5cblx0XHR0cnkge1xuXHRcdFx0dmFsdWUgPSBuZXcgUGF0aGZpbmRlcih0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRSZWFsU3ViamVjdCgpKS5nZXRWaWEoXG5cdFx0XHRcdHBhdGgsXG5cdFx0XHQpO1xuXHRcdH0gY2F0Y2ggKGUpIHt9XG5cblx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBvYmpcbiAqIEBwYXJhbSBwcm9wXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBoYXNHZXR0ZXIob2JqLCBwcm9wKSB7XG5cdHdoaWxlIChpc09iamVjdChvYmopKSB7XG5cdFx0aWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBwcm9wKT8uW1wiZ2V0XCJdKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0b2JqID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaik7XG5cdH1cblxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBkYXRhXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIHBhcnNlT3B0aW9uc0pTT04oZGF0YSkge1xuXHRsZXQgb2JqID0ge307XG5cblx0aWYgKCFpc1N0cmluZyhkYXRhKSkge1xuXHRcdHJldHVybiBvYmo7XG5cdH1cblxuXHQvLyB0aGUgY29uZmlndXJhdGlvbiBjYW4gYmUgc3BlY2lmaWVkIGFzIGEgZGF0YSB1cmwuXG5cdHRyeSB7XG5cdFx0Y29uc3QgZGF0YVVybCA9IHBhcnNlRGF0YVVSTChkYXRhKTtcblx0XHRkYXRhID0gZGF0YVVybC5jb250ZW50O1xuXHR9IGNhdGNoIChlKSB7fVxuXG5cdHRyeSB7XG5cdFx0b2JqID0gSlNPTi5wYXJzZShkYXRhKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHRocm93IGU7XG5cdH1cblxuXHRyZXR1cm4gdmFsaWRhdGVPYmplY3Qob2JqKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN0YXRlU3ltYm9sLCBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQgeyBCYXNlV2l0aE9wdGlvbnMgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZXdpdGhvcHRpb25zLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsT2JqZWN0IH0gZnJvbSBcIi4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IElEIH0gZnJvbSBcIi4uL3R5cGVzL2lkLm1qc1wiO1xuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBPYnNlcnZlciB9IGZyb20gXCIuLi90eXBlcy9vYnNlcnZlci5tanNcIjtcbmltcG9ydCB7IFByb3h5T2JzZXJ2ZXIgfSBmcm9tIFwiLi4vdHlwZXMvcHJveHlvYnNlcnZlci5tanNcIjtcbmltcG9ydCB7XG5cdEFUVFJJQlVURV9DTEFTUyxcblx0QVRUUklCVVRFX0lELFxuXHRBVFRSSUJVVEVfVElUTEUsXG59IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgUmVzb3VyY2UsIEtFWV9ET0NVTUVOVCwgS0VZX1FVRVJZLCByZWZlcmVuY2VTeW1ib2wgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgS0VZX0RPQ1VNRU5UID0gXCJkb2N1bWVudFwiO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBLRVlfUVVFUlkgPSBcInF1ZXJ5XCI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEtFWV9USU1FT1VUID0gXCJ0aW1lb3V0XCI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHJlZmVyZW5jZVN5bWJvbCA9IFN5bWJvbChcInJlZmVyZW5jZVwiKTtcblxuLyoqXG4gKiBUaGlzIGNsYXNzIGlzIHRoZSBiYXNlIGNsYXNzIGZvciBhbGwgcmVzb3VyY2VzIHRvIGJlIGxvYWRlZC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIFJlc291cmNlIGNsYXNzXG4gKi9cbmNsYXNzIFJlc291cmNlIGV4dGVuZHMgQmFzZVdpdGhPcHRpb25zIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fHVuZGVmaW5lZH0gb3B0aW9uc1xuXHQgKi9cblx0Y29uc3RydWN0b3Iob3B0aW9ucykge1xuXHRcdHN1cGVyKG9wdGlvbnMpO1xuXG5cdFx0bGV0IHVyaSA9IHRoaXMuZ2V0T3B0aW9uKHRoaXMuY29uc3RydWN0b3IuZ2V0VVJMQXR0cmlidXRlKCkpO1xuXG5cdFx0aWYgKHVyaSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nIHNvdXJjZVwiKTtcblx0XHR9IGVsc2UgaWYgKHVyaSBpbnN0YW5jZW9mIFVSTCkge1xuXHRcdFx0dXJpID0gdXJpLnRvU3RyaW5nKCk7XG5cdFx0fSBlbHNlIGlmICghaXNTdHJpbmcodXJpKSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgdXJsIHR5cGVcIik7XG5cdFx0fVxuXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF1bdGhpcy5jb25zdHJ1Y3Rvci5nZXRVUkxBdHRyaWJ1dGUoKV0gPSB1cmk7XG5cdFx0dGhpc1tpbnRlcm5hbFN0YXRlU3ltYm9sXSA9IG5ldyBQcm94eU9ic2VydmVyKHtcblx0XHRcdGxvYWRlZDogZmFsc2UsXG5cdFx0XHRlcnJvcjogdW5kZWZpbmVkLFxuXHRcdH0pO1xuXG5cdFx0dGhpc1tyZWZlcmVuY2VTeW1ib2xdID0gdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRpc0Nvbm5lY3RlZCgpIHtcblx0XHRpZiAodGhpc1tyZWZlcmVuY2VTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdHJldHVybiB0aGlzW3JlZmVyZW5jZVN5bWJvbF0uaXNDb25uZWN0ZWQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIG92ZXJyaWRkZW4gYnkgdGhlIHNwZWNpYWwgY2xhc3NlcyBhbmQgY3JlYXRlcyB0aGUgRE9NIG9iamVjdC5cblx0ICogVGhpcyBtZXRob2QgaXMgYWxzbyBjYWxsZWQgaW1wbGljaXRseSwgaWYgbm90IHlldCBkb25lIGV4cGxpY2l0bHksIGJ5IGNhbGxpbmcgYGNvbm5lY3QoKWAuXG5cdCAqXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGlzIG1ldGhvZCBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGRlcml2ZWQgY2xhc3Nlc1xuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5SZXNvdXJjZX1cblx0ICovXG5cdGNyZWF0ZSgpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGlzIG1ldGhvZCBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGRlcml2ZWQgY2xhc3Nlc1wiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBhcHBlbmRzIHRoZSBIVE1MRWxlbWVudCB0byB0aGUgc3BlY2lmaWVkIGRvY3VtZW50LlxuXHQgKiBJZiB0aGUgZWxlbWVudCBoYXMgbm90IHlldCBiZWVuIGNyZWF0ZWQsIGBjcmVhdGUoKWAgaXMgY2FsbGVkIGltcGxpY2l0bHkuXG5cdCAqXG5cdCAqIHRocm93cyB7RXJyb3J9IHRhcmdldCBub3QgZm91bmRcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uUmVzb3VyY2V9XG5cdCAqL1xuXHRjb25uZWN0KCkge1xuXHRcdGlmICghKHRoaXNbcmVmZXJlbmNlU3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdFx0dGhpcy5jcmVhdGUoKTtcblx0XHR9XG5cblx0XHRhcHBlbmRUb0RvY3VtZW50LmNhbGwodGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHtEb2N1bWVudH0gZG9jdW1lbnQgdGhlIGRvY3VtZW50IG9iamVjdCBpbnRvIHdoaWNoIHRoZSBub2RlIGlzIHRvIGJlIGFwcGVuZGVkXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzcmMvaHJlZiB1cmwgdG8gdGhlIGNvcnJlc3BvbmRpbmcgcmVzb3VyY2Vcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHF1ZXJ5IGRlZmluZXMgdGhlIGxvY2F0aW9uIHdoZXJlIHRoZSByZXNvdXJjZSBpcyB0byBiZSBob29rZWQgaW50byB0aGUgZG9tLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gaWQgZWxlbWVudCBhdHRyaWJ1dGUgaWRcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRpdGxlIGVsZW1lbnQgYXR0cmlidXRlIHRpdGxlXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjbGFzcyBlbGVtZW50IGF0dHJpYnV0ZSBjbGFzc1xuXHQgKiBAcHJvcGVydHkge2ludH0gdGltZW91dCB0aW1lb3V0XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIGV4dGVuZCh7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdFt0aGlzLmNvbnN0cnVjdG9yLmdldFVSTEF0dHJpYnV0ZSgpXTogdW5kZWZpbmVkLFxuXHRcdFx0W0tFWV9ET0NVTUVOVF06IGdldEdsb2JhbE9iamVjdChcImRvY3VtZW50XCIpLFxuXHRcdFx0W0tFWV9RVUVSWV06IFwiaGVhZFwiLFxuXHRcdFx0W0tFWV9USU1FT1VUXTogMTAwMDAsXG5cdFx0XHRbQVRUUklCVVRFX0lEXTogbmV3IElEKFwicmVzb3VyY2VcIikudG9TdHJpbmcoKSxcblx0XHRcdFtBVFRSSUJVVEVfQ0xBU1NdOiB1bmRlZmluZWQsXG5cdFx0XHRbQVRUUklCVVRFX1RJVExFXTogdW5kZWZpbmVkLFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpdGggYGF2YWlsYWJsZSgpYCB5b3UgY2FuIGNoZWNrIGlmIGEgcmVzb3VyY2UgaXMgYXZhaWxhYmxlLlxuXHQgKiBUaGlzIGlzIHRoZSBjYXNlIHdoZW4gdGhlIHRhZyBpcyBpbmNsdWRlZCBhbmQgdGhlIHJlc291cmNlIGlzIGxvYWRlZC5cblx0ICpcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdGF2YWlsYWJsZSgpIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblx0XHRpZiAoIShzZWxmW3JlZmVyZW5jZVN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChcIm5vIGVsZW1lbnRcIik7XG5cdFx0fVxuXG5cdFx0aWYgKCFzZWxmLmlzQ29ubmVjdGVkKCkpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChcImVsZW1lbnQgbm90IGNvbm5lY3RlZFwiKTtcblx0XHR9XG5cblx0XHRpZiAoc2VsZltpbnRlcm5hbFN0YXRlU3ltYm9sXS5nZXRTdWJqZWN0KClbXCJsb2FkZWRcIl0gPT09IHRydWUpIHtcblx0XHRcdGlmIChzZWxmW2ludGVybmFsU3RhdGVTeW1ib2xdLmdldFN1YmplY3QoKVtcImVycm9yXCJdICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KHNlbGZbaW50ZXJuYWxTdGF0ZVN5bWJvbF0uZ2V0U3ViamVjdCgpW1wiZXJyb3JcIl0pO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcblx0XHRcdGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0cmVqZWN0KFwidGltZW91dFwiKTtcblx0XHRcdH0sIHNlbGYuZ2V0T3B0aW9uKFwidGltZW91dFwiKSk7XG5cblx0XHRcdGNvbnN0IG9ic2VydmVyID0gbmV3IE9ic2VydmVyKCgpID0+IHtcblx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuXHRcdFx0XHRzZWxmW2ludGVybmFsU3RhdGVTeW1ib2xdLmRldGFjaE9ic2VydmVyKG9ic2VydmVyKTtcblx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0fSk7XG5cblx0XHRcdHNlbGZbaW50ZXJuYWxTdGF0ZVN5bWJvbF0uYXR0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRVUkxBdHRyaWJ1dGUoKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidGhpcyBtZXRob2QgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBkZXJpdmVkIGNsYXNzZXNcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vcmVzb3VyY2VcIik7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7UHJvbWlzZX1cbiAqIHRocm93cyB7RXJyb3J9IHRhcmdldCBub3QgZm91bmRcbiAqL1xuZnVuY3Rpb24gYXBwZW5kVG9Eb2N1bWVudCgpIHtcblx0Y29uc3QgdGFyZ2V0Tm9kZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5nZXRPcHRpb24oS0VZX1FVRVJZLCBcImhlYWRcIikpO1xuXHRpZiAoISh0YXJnZXROb2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidGFyZ2V0IG5vdCBmb3VuZFwiKTtcblx0fVxuXG5cdGFkZEV2ZW50cy5jYWxsKHRoaXMpO1xuXHR0YXJnZXROb2RlLmFwcGVuZENoaWxkKHRoaXNbcmVmZXJlbmNlU3ltYm9sXSk7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge2FkZEV2ZW50c31cbiAqL1xuZnVuY3Rpb24gYWRkRXZlbnRzKCkge1xuXHRjb25zdCBvbkVycm9yID0gKCkgPT4ge1xuXHRcdHRoaXNbcmVmZXJlbmNlU3ltYm9sXS5yZW1vdmVFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgb25FcnJvcik7XG5cdFx0dGhpc1tyZWZlcmVuY2VTeW1ib2xdLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIG9uTG9hZCk7XG5cblx0XHR0aGlzW2ludGVybmFsU3RhdGVTeW1ib2xdLnNldFN1YmplY3Qoe1xuXHRcdFx0bG9hZGVkOiB0cnVlLFxuXHRcdFx0ZXJyb3I6IGAke1xuXHRcdFx0XHR0aGlzW3JlZmVyZW5jZVN5bWJvbF1bdGhpcy5jb25zdHJ1Y3Rvci5nZXRVUkxBdHRyaWJ1dGUoKV1cblx0XHRcdH0gaXMgbm90IGF2YWlsYWJsZWAsXG5cdFx0fSk7XG5cblx0XHRyZXR1cm47XG5cdH07XG5cblx0Y29uc3Qgb25Mb2FkID0gKCkgPT4ge1xuXHRcdHRoaXNbcmVmZXJlbmNlU3ltYm9sXS5yZW1vdmVFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgb25FcnJvcik7XG5cdFx0dGhpc1tyZWZlcmVuY2VTeW1ib2xdLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIG9uTG9hZCk7XG5cdFx0dGhpc1tpbnRlcm5hbFN0YXRlU3ltYm9sXS5nZXRTdWJqZWN0KClbXCJsb2FkZWRcIl0gPSB0cnVlO1xuXHR9O1xuXG5cdHRoaXNbcmVmZXJlbmNlU3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCBvbkxvYWQsIGZhbHNlKTtcblx0dGhpc1tyZWZlcmVuY2VTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBvbkVycm9yLCBmYWxzZSk7XG5cblx0cmV0dXJuIHRoaXM7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTdGF0ZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vLi4vZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWxGdW5jdGlvbiB9IGZyb20gXCIuLi8uLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtcblx0QVRUUklCVVRFX0NMQVNTLFxuXHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRBVFRSSUJVVEVfSUQsXG5cdEFUVFJJQlVURV9TUkMsXG5cdEFUVFJJQlVURV9USVRMRSxcblx0QVRUUklCVVRFX1RZUEUsXG5cdFRBR19TQ1JJUFQsXG59IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge1xuXHRLRVlfRE9DVU1FTlQsXG5cdEtFWV9RVUVSWSxcblx0cmVmZXJlbmNlU3ltYm9sLFxuXHRSZXNvdXJjZSxcbn0gZnJvbSBcIi4uL3Jlc291cmNlLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBEYXRhIH07XG5cbi8qKlxuICogVGhpcyBjbGFzcyBpcyB1c2VkIGJ5IHRoZSByZXNvdXJjZSBtYW5hZ2VyIHRvIGVtYmVkIGRhdGEuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBEYXRhIFJlc291cmNlIGNsYXNzXG4gKi9cbmNsYXNzIERhdGEgZXh0ZW5kcyBSZXNvdXJjZSB7XG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbW9kZT1jb3JzIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9mZXRjaFxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gY3JlZGVudGlhbHM9c2FtZS1vcmlnaW4gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL2ZldGNoXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlPWFwcGxpY2F0aW9uL2pzb24ge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zY3JpcHQjYXR0ci10eXBlfVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBleHRlbmQoe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHRtb2RlOiBcImNvcnNcIixcblx0XHRcdGNyZWRlbnRpYWxzOiBcInNhbWUtb3JpZ2luXCIsXG5cdFx0XHR0eXBlOiBcImFwcGxpY2F0aW9uL2pzb25cIixcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5SZXNvdXJjZS5EYXRhfVxuXHQgKi9cblx0Y3JlYXRlKCkge1xuXHRcdGNyZWF0ZUVsZW1lbnQuY2FsbCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBhcHBlbmRzIHRoZSBIVE1MRWxlbWVudCB0byB0aGUgc3BlY2lmaWVkIGRvY3VtZW50XG5cdCAqXG5cdCAqIHRocm93cyB7RXJyb3J9IHRhcmdldCBub3QgZm91bmRcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uUmVzb3VyY2V9XG5cdCAqL1xuXHRjb25uZWN0KCkge1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXHRcdGlmICghKHRoaXNbcmVmZXJlbmNlU3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdFx0dGhpcy5jcmVhdGUoKTtcblx0XHR9XG5cblx0XHRhcHBlbmRUb0RvY3VtZW50LmNhbGwodGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RvbS9yZXNvdXJjZS9kYXRhXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRVUkxBdHRyaWJ1dGUoKSB7XG5cdFx0cmV0dXJuIEFUVFJJQlVURV9TUkM7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7TW9uc3Rlci5ET00uUmVzb3VyY2UuRGF0YX1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRWxlbWVudCgpIHtcblx0Y29uc3QgZG9jdW1lbnQgPSB0aGlzLmdldE9wdGlvbihLRVlfRE9DVU1FTlQpO1xuXHR0aGlzW3JlZmVyZW5jZVN5bWJvbF0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFRBR19TQ1JJUFQpO1xuXG5cdGZvciAoY29uc3Qga2V5IG9mIFtcblx0XHRBVFRSSUJVVEVfVFlQRSxcblx0XHRBVFRSSUJVVEVfSUQsXG5cdFx0QVRUUklCVVRFX0NMQVNTLFxuXHRcdEFUVFJJQlVURV9USVRMRSxcblx0XSkge1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihrZXkpICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXNbcmVmZXJlbmNlU3ltYm9sXVtrZXldID0gdGhpcy5nZXRPcHRpb24oa2V5KTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7UHJvbWlzZX1cbiAqIHRocm93cyB7RXJyb3J9IHRhcmdldCBub3QgZm91bmRcbiAqL1xuZnVuY3Rpb24gYXBwZW5kVG9Eb2N1bWVudCgpIHtcblx0Y29uc3QgdGFyZ2V0Tm9kZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5nZXRPcHRpb24oS0VZX1FVRVJZLCBcImhlYWRcIikpO1xuXHRpZiAoISh0YXJnZXROb2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidGFyZ2V0IG5vdCBmb3VuZFwiKTtcblx0fVxuXG5cdHRhcmdldE5vZGUuYXBwZW5kQ2hpbGQodGhpc1tyZWZlcmVuY2VTeW1ib2xdKTtcblxuXHRnZXRHbG9iYWxGdW5jdGlvbihcImZldGNoXCIpKHRoaXMuZ2V0T3B0aW9uKEFUVFJJQlVURV9TUkMpLCB7XG5cdFx0bWV0aG9kOiBcIkdFVFwiLCAvLyAqR0VULCBQT1NULCBQVVQsIERFTEVURSwgZXRjLlxuXHRcdG1vZGU6IHRoaXMuZ2V0T3B0aW9uKFwibW9kZVwiLCBcImNvcnNcIiksIC8vIG5vLWNvcnMsICpjb3JzLCBzYW1lLW9yaWdpblxuXHRcdGNhY2hlOiBcIm5vLWNhY2hlXCIsIC8vICpkZWZhdWx0LCBuby1jYWNoZSwgcmVsb2FkLCBmb3JjZS1jYWNoZSwgb25seS1pZi1jYWNoZWRcblx0XHRjcmVkZW50aWFsczogdGhpcy5nZXRPcHRpb24oXCJjcmVkZW50aWFsc1wiLCBcInNhbWUtb3JpZ2luXCIpLCAvLyBpbmNsdWRlLCAqc2FtZS1vcmlnaW4sIG9taXRcblx0XHRoZWFkZXJzOiB7XG5cdFx0XHRBY2NlcHQ6IHRoaXMuZ2V0T3B0aW9uKFwidHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIiksXG5cdFx0fSxcblx0XHRyZWRpcmVjdDogXCJmb2xsb3dcIiwgLy8gbWFudWFsLCAqZm9sbG93LCBlcnJvclxuXHRcdHJlZmVycmVyUG9saWN5OiBcIm5vLXJlZmVycmVyXCIsIC8vIG5vLXJlZmVycmVyLFxuXHR9KVxuXHRcdC50aGVuKChyZXNwb25zZSkgPT4ge1xuXHRcdFx0cmV0dXJuIHJlc3BvbnNlLnRleHQoKTtcblx0XHR9KVxuXHRcdC50aGVuKCh0ZXh0KSA9PiB7XG5cdFx0XHRjb25zdCB0ZXh0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpO1xuXHRcdFx0dGhpc1tyZWZlcmVuY2VTeW1ib2xdLmFwcGVuZENoaWxkKHRleHROb2RlKTtcblxuXHRcdFx0dGhpc1tpbnRlcm5hbFN0YXRlU3ltYm9sXS5nZXRTdWJqZWN0KClbXCJsb2FkZWRcIl0gPSB0cnVlO1xuXHRcdH0pXG5cdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHR0aGlzW2ludGVybmFsU3RhdGVTeW1ib2xdLnNldFN1YmplY3Qoe1xuXHRcdFx0XHRsb2FkZWQ6IHRydWUsXG5cdFx0XHRcdGVycm9yOiBlLnRvU3RyaW5nKCksXG5cdFx0XHR9KTtcblxuXHRcdFx0dGFyZ2V0Tm9kZS5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS50b1N0cmluZygpKTtcblx0XHR9KTtcblxuXHRyZXR1cm4gdGhpcztcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vLi4vZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQge1xuXHRBVFRSSUJVVEVfQ0xBU1MsXG5cdEFUVFJJQlVURV9IUkVGLFxuXHRBVFRSSUJVVEVfSUQsXG5cdEFUVFJJQlVURV9OT05DRSxcblx0QVRUUklCVVRFX1NSQyxcblx0QVRUUklCVVRFX1RJVExFLFxuXHRBVFRSSUJVVEVfVFlQRSxcblx0VEFHX0xJTkssXG59IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBLRVlfRE9DVU1FTlQsIHJlZmVyZW5jZVN5bWJvbCwgUmVzb3VyY2UgfSBmcm9tIFwiLi4vcmVzb3VyY2UubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBMaW5rIH07XG5cbi8qKlxuICogVGhpcyBjbGFzcyBpcyB1c2VkIGJ5IHRoZSByZXNvdXJjZSBtYW5hZ2VyIHRvIGVtYmVkIGV4dGVybmFsIHJlc291cmNlcy5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIFJlc291cmNlIGNsYXNzXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9saW5rXG4gKi9cbmNsYXNzIExpbmsgZXh0ZW5kcyBSZXNvdXJjZSB7XG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gYXMge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9saW5rI2F0dHItYXN9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjcm9zc09yaWdpbj1hbm9ueW1vdXMge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zY3JpcHQjYXR0ci1jcm9zc29yaWdpbn1cblx0ICogQHByb3BlcnR5IHtib29sZWFufSBkaXNhYmxlZFxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gaHJlZiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmsjYXR0ci1ocmVmfVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gaHJlZmxhbmcge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9saW5rI2F0dHItaHJlZmxhbmd9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpbWFnZXNpemVzIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGluayNhdHRyLWltYWdlc2l6ZXN9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpbWFnZXNyY3NldCB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmsjYXR0ci1pbWFnZXNyY3NldH1cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGludGVncml0eSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmsjYXR0ci1pbnRlZ3JpdHl9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtZWRpYSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmsjYXR0ci1tZWRpYX1cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHByZWZldGNoIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGluayNhdHRyLXByZWZldGNofVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcmVmZXJyZXJwb2xpY3kge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9saW5rI2F0dHItcmVmZXJyZXJwb2xpY3l9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByZWwge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9saW5rI2F0dHItcmVsfVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdHlwZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmsjYXR0ci10eXBlfVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gc2l6ZXMge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9saW5rI2F0dHItc2l6ZXN9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBub25jZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3NjcmlwdCNhdHRyLW5vbmNlfVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBleHRlbmQoe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHRhczogdW5kZWZpbmVkLFxuXHRcdFx0Y3Jvc3NPcmlnaW46IFwiYW5vbnltb3VzXCIsXG5cdFx0XHRkaXNhYmxlZDogdW5kZWZpbmVkLFxuXHRcdFx0aHJlZjogdW5kZWZpbmVkLFxuXHRcdFx0aHJlZmxhbmc6IHVuZGVmaW5lZCxcblx0XHRcdGltYWdlc2l6ZXM6IHVuZGVmaW5lZCxcblx0XHRcdGltYWdlc3Jjc2V0OiB1bmRlZmluZWQsXG5cdFx0XHRpbnRlZ3JpdHk6IHVuZGVmaW5lZCxcblx0XHRcdG1lZGlhOiB1bmRlZmluZWQsXG5cdFx0XHRwcmVmZXRjaDogdW5kZWZpbmVkLFxuXHRcdFx0cmVmZXJyZXJwb2xpY3k6IHVuZGVmaW5lZCxcblx0XHRcdHJlbDogdW5kZWZpbmVkLFxuXHRcdFx0c2l6ZXM6IHVuZGVmaW5lZCxcblx0XHRcdHR5cGU6IHVuZGVmaW5lZCxcblx0XHRcdG5vbmNlOiB1bmRlZmluZWQsXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RvbS9yZXNvdXJjZS9saW5rXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLlJlc291cmNlLkxpbmt9XG5cdCAqL1xuXHRjcmVhdGUoKSB7XG5cdFx0Y3JlYXRlRWxlbWVudC5jYWxsKHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRVUkxBdHRyaWJ1dGUoKSB7XG5cdFx0cmV0dXJuIEFUVFJJQlVURV9IUkVGO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLlJlc291cmNlLkxpbmt9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQoKSB7XG5cdGNvbnN0IGRvY3VtZW50ID0gdGhpcy5nZXRPcHRpb24oS0VZX0RPQ1VNRU5UKTtcblx0dGhpc1tyZWZlcmVuY2VTeW1ib2xdID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChUQUdfTElOSyk7XG5cblx0Zm9yIChjb25zdCBrZXkgb2YgW1xuXHRcdFwiYXNcIixcblx0XHRcImNyb3NzT3JpZ2luXCIsXG5cdFx0XCJkaXNhYmxlZFwiLFxuXHRcdFwiaHJlZlwiLFxuXHRcdFwiaHJlZmxhbmdcIixcblx0XHRcImltYWdlc2l6ZXNcIixcblx0XHRcImltYWdlc3Jjc2V0XCIsXG5cdFx0XCJpbnRlZ3JpdHlcIixcblx0XHRcIm1lZGlhXCIsXG5cdFx0XCJwcmVmZXRjaFwiLFxuXHRcdFwicmVmZXJyZXJwb2xpY3lcIixcblx0XHRcInNpemVzXCIsXG5cdFx0XCJyZWxcIixcblx0XHRcInR5cGVcIixcblx0XHRBVFRSSUJVVEVfSFJFRixcblx0XHRBVFRSSUJVVEVfSUQsXG5cdFx0QVRUUklCVVRFX0NMQVNTLFxuXHRcdEFUVFJJQlVURV9USVRMRSxcblx0XHRBVFRSSUJVVEVfTk9OQ0UsXG5cdF0pIHtcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oa2V5KSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzW3JlZmVyZW5jZVN5bWJvbF1ba2V5XSA9IHRoaXMuZ2V0T3B0aW9uKGtleSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSBcIi4uLy4uLy4uL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHsgTGluayB9IGZyb20gXCIuLi9saW5rLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuZXhwb3J0IHsgU3R5bGVzaGVldCB9O1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgaXMgdXNlZCBieSB0aGUgcmVzb3VyY2UgbWFuYWdlciB0byBlbWJlZCBleHRlcm5hbCByZXNvdXJjZXMuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBSZXNvdXJjZSBjbGFzc1xuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGlua1xuICovXG5jbGFzcyBTdHlsZXNoZWV0IGV4dGVuZHMgTGluayB7XG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcmVsIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGluayNhdHRyLXJlbH1cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gZXh0ZW5kKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0cmVsOiBcInN0eWxlc2hlZXRcIixcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL3Jlc291cmNlL2xpbmsvc3R5bGVzaGVldFwiKTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi8uLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7XG5cdEFUVFJJQlVURV9DTEFTUyxcblx0QVRUUklCVVRFX0lELFxuXHRBVFRSSUJVVEVfTk9OQ0UsXG5cdEFUVFJJQlVURV9TUkMsXG5cdEFUVFJJQlVURV9USVRMRSxcblx0QVRUUklCVVRFX1RZUEUsXG5cdFRBR19TQ1JJUFQsXG59IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBLRVlfRE9DVU1FTlQsIHJlZmVyZW5jZVN5bWJvbCwgUmVzb3VyY2UgfSBmcm9tIFwiLi4vcmVzb3VyY2UubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBTY3JpcHQgfTtcblxuLyoqXG4gKiBUaGlzIGNsYXNzIGlzIHVzZWQgYnkgdGhlIHJlc291cmNlIG1hbmFnZXIgdG8gZW1iZWQgc2NyaXB0cy5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIFJlc291cmNlIGNsYXNzXG4gKi9cbmNsYXNzIFNjcmlwdCBleHRlbmRzIFJlc291cmNlIHtcblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gYXN5bmM9dHJ1ZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3NjcmlwdCNhdHRyLWFzeW5jfVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gY3Jvc3NPcmlnaW49YW5vbnltb3VzIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc2NyaXB0I2F0dHItY3Jvc3NvcmlnaW59XG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZGVmZXI9ZmFsc2Uge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zY3JpcHQjYXR0ci1kZWZlcn1cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGludGVncml0eSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3NjcmlwdCNhdHRyLWludGVncml0eX1cblx0ICogQHByb3BlcnR5IHtib29sZWFufSBub21vZHVsZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3NjcmlwdCNhdHRyLW5vbW9kdWxlfVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbm9uY2Uge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zY3JpcHQjYXR0ci1ub25jZX1cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHJlZmVycmVycG9saWN5IHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc2NyaXB0I2F0dHItcmVmZXJyZXJwb2xpY3l9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc2NyaXB0I2F0dHItdHlwZX1cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gZXh0ZW5kKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0YXN5bmM6IHRydWUsXG5cdFx0XHRjcm9zc09yaWdpbjogXCJhbm9ueW1vdXNcIixcblx0XHRcdGRlZmVyOiBmYWxzZSxcblx0XHRcdGludGVncml0eTogdW5kZWZpbmVkLFxuXHRcdFx0bm9tb2R1bGU6IGZhbHNlLFxuXHRcdFx0bm9uY2U6IHVuZGVmaW5lZCxcblx0XHRcdHJlZmVycmVycG9saWN5OiB1bmRlZmluZWQsXG5cdFx0XHR0eXBlOiBcInRleHQvamF2YXNjcmlwdFwiLFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vcmVzb3VyY2Uvc2NyaXB0XCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLlJlc291cmNlLlNjcmlwdH1cblx0ICovXG5cdGNyZWF0ZSgpIHtcblx0XHRjcmVhdGVFbGVtZW50LmNhbGwodGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFVSTEF0dHJpYnV0ZSgpIHtcblx0XHRyZXR1cm4gQVRUUklCVVRFX1NSQztcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5SZXNvdXJjZS5TY3JpcHR9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQoKSB7XG5cdGNvbnN0IGRvY3VtZW50ID0gdGhpcy5nZXRPcHRpb24oS0VZX0RPQ1VNRU5UKTtcblx0dGhpc1tyZWZlcmVuY2VTeW1ib2xdID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChUQUdfU0NSSVBUKTtcblxuXHRmb3IgKGNvbnN0IGtleSBvZiBbXG5cdFx0XCJjcm9zc09yaWdpblwiLFxuXHRcdFwiZGVmZXJcIixcblx0XHRcImFzeW5jXCIsXG5cdFx0XCJpbnRlZ3JpdHlcIixcblx0XHRcIm5vbW9kdWxlXCIsXG5cdFx0QVRUUklCVVRFX05PTkNFLFxuXHRcdFwicmVmZXJyZXJwb2xpY3lcIixcblx0XHRBVFRSSUJVVEVfVFlQRSxcblx0XHRBVFRSSUJVVEVfU1JDLFxuXHRcdEFUVFJJQlVURV9JRCxcblx0XHRBVFRSSUJVVEVfQ0xBU1MsXG5cdFx0QVRUUklCVVRFX1RJVExFLFxuXHRdKSB7XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKGtleSkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpc1tyZWZlcmVuY2VTeW1ib2xdW2tleV0gPSB0aGlzLmdldE9wdGlvbihrZXkpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbE9iamVjdCB9IGZyb20gXCIuLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyBlcXVpcFdpdGhJbnRlcm5hbCB9IGZyb20gXCIuLi90eXBlcy9pbnRlcm5hbC5tanNcIjtcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfSFJFRiwgQVRUUklCVVRFX1NSQyB9IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IFJlc291cmNlIH0gZnJvbSBcIi4vcmVzb3VyY2UubWpzXCI7XG5pbXBvcnQgeyBEYXRhIH0gZnJvbSBcIi4vcmVzb3VyY2UvZGF0YS5tanNcIjtcbmltcG9ydCB7IFN0eWxlc2hlZXQgfSBmcm9tIFwiLi9yZXNvdXJjZS9saW5rL3N0eWxlc2hlZXQubWpzXCI7XG5pbXBvcnQgeyBTY3JpcHQgfSBmcm9tIFwiLi9yZXNvdXJjZS9zY3JpcHQubWpzXCI7XG5cbmV4cG9ydCB7IFJlc291cmNlTWFuYWdlciB9O1xuXG4vKipcbiAqIFRoZSBSZXNvdXJjZU1hbmFnZXIgaXMgYSBzaW5nbGV0b24gdGhhdCBtYW5hZ2VzIGFsbCByZXNvdXJjZXMuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBSZXNvdXJjZSBjbGFzc1xuICovXG5jbGFzcyBSZXNvdXJjZU1hbmFnZXIgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG5cdCAqIHRocm93IHtFcnJvcn0gdW5zdXBwb3J0ZWQgZG9jdW1lbnQgdHlwZVxuXHQgKi9cblx0Y29uc3RydWN0b3Iob3B0aW9ucykge1xuXHRcdHN1cGVyKG9wdGlvbnMpO1xuXHRcdGVxdWlwV2l0aEludGVybmFsLmNhbGwodGhpcyk7XG5cblx0XHRpZiAoISh0aGlzLmdldE9wdGlvbihcImRvY3VtZW50XCIpIGluc3RhbmNlb2YgRG9jdW1lbnQpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCBkb2N1bWVudCB0eXBlXCIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAZGVwcmVjYXRlZCBzaW5jZSAzLjE1LjAgdXNlIGdldEludGVybmFsIGluc3RlYWRcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGJhc2V1cmxcblx0ICovXG5cdGdldE9wdGlvbihrZXkpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRJbnRlcm5hbChrZXkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBiYXNldXJsXG5cdCAqL1xuXHRnZXRCYXNlVVJMKCkge1xuXHRcdHRoaXMuZ2V0T3B0aW9uKFwiZG9jdW1lbnRcIik/LmJhc2VVUkw7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGJhc2V1cmxcblx0ICogQGRlcHJlY2F0ZWQgc2luY2UgMy4xNS4wIHVzZSBpbnRlcm5hbERlZmF1bHRzIGluc3RlYWRcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gdGhpcy5pbnRlcm5hbERlZmF1bHRzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7SFRNTERvY3VtZW50fSBkb2N1bWVudD1kb2N1bWVudCBEb2N1bWVudFxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gcmVzb3VyY2VzXG5cdCAqIEBwcm9wZXJ0eSB7QXJyYXl9IHJlc291cmNlcy5zY3JpcHRzPVtdIGFycmF5IHdpdGgge0BsaW5rIE1vbnN0ZXIuRE9NLlJlc291cmNlLlNjcmlwdH0gb2JqZWN0c1xuXHQgKiBAcHJvcGVydHkge0FycmF5fSByZXNvdXJjZXMuc3R5bGVzaGVldHM9W10gYXJyYXkgd2l0aCB7QGxpbmsgTW9uc3Rlci5ET00uUmVzb3VyY2UuTGluay5TdHlsZXNoZWV0fSBvYmplY3RzXG5cdCAqIEBwcm9wZXJ0eSB7QXJyYXl9IHJlc291cmNlcy5kYXRhPVtdIGFycmF5IHdpdGgge0BsaW5rIE1vbnN0ZXIuRE9NLlJlc291cmNlLkRhdGF9IG9iamVjdHNcblx0ICovXG5cdGdldCBpbnRlcm5hbERlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKFxuXHRcdFx0e30sXG5cdFx0XHR7XG5cdFx0XHRcdGRvY3VtZW50OiBnZXRHbG9iYWxPYmplY3QoXCJkb2N1bWVudFwiKSxcblx0XHRcdFx0cmVzb3VyY2VzOiB7XG5cdFx0XHRcdFx0c2NyaXB0czogW10sXG5cdFx0XHRcdFx0c3R5bGVzaGVldHM6IFtdLFxuXHRcdFx0XHRcdGRhdGE6IFtdLFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFwcGVuZCBUYWdzIHRvIERPTVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5SZXNvdXJjZU1hbmFnZXJ9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCByZXNvdXJjZSBkZWZpbml0aW9uXG5cdCAqL1xuXHRjb25uZWN0KCkge1xuXHRcdHJ1blJlc291cmNlTWV0aG9kLmNhbGwodGhpcywgXCJjb25uZWN0XCIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrIGlmIGF2YWlsYWJsZVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgcmVzb3VyY2UgZGVmaW5pdGlvblxuXHQgKi9cblx0YXZhaWxhYmxlKCkge1xuXHRcdHJldHVybiBQcm9taXNlLmFsbChydW5SZXNvdXJjZU1ldGhvZC5jYWxsKHRoaXMsIFwiYXZhaWxhYmxlXCIpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgYSBzY3JpcHRcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd8VVJMfSB1cmxcblx0ICogQHBhcmFtIFtPYmplY3R8dW5kZWZpbmVkfSBvcHRpb25zXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLlJlc291cmNlTWFuYWdlcn1cblx0ICogQHNlZSBNb25zdGVyLkRPTS5SZXNvdXJjZS5TY3JpcHRcblx0ICovXG5cdGFkZFNjcmlwdCh1cmwsIG9wdGlvbnMpIHtcblx0XHRyZXR1cm4gYWRkUmVzb3VyY2UuY2FsbCh0aGlzLCBcInNjcmlwdHNcIiwgdXJsLCBvcHRpb25zKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgU3R5bGVzaGVldFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3xVUkx9IHVybFxuXHQgKiBAcGFyYW0gW09iamVjdHx1bmRlZmluZWR9IG9wdGlvbnNcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uUmVzb3VyY2VNYW5hZ2VyfVxuXHQgKiBAc2VlIE1vbnN0ZXIuRE9NLlJlc291cmNlLkxpbmsuU3R5bGVzaGVldFxuXHQgKi9cblx0YWRkU3R5bGVzaGVldCh1cmwsIG9wdGlvbnMpIHtcblx0XHRyZXR1cm4gYWRkUmVzb3VyY2UuY2FsbCh0aGlzLCBcInN0eWxlc2hlZXRzXCIsIHVybCwgb3B0aW9ucyk7XG5cdH1cblxuXHQvKipcblx0ICogQWRkIERhdGEgVGFnXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gdXJsXG5cdCAqIEBwYXJhbSBbT2JqZWN0fHVuZGVmaW5lZH0gb3B0aW9uc1xuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5SZXNvdXJjZU1hbmFnZXJ9XG5cdCAqIEBzZWUgTW9uc3Rlci5ET00uUmVzb3VyY2UuRGF0YVxuXHQgKi9cblx0YWRkRGF0YSh1cmwsIG9wdGlvbnMpIHtcblx0XHRyZXR1cm4gYWRkUmVzb3VyY2UuY2FsbCh0aGlzLCBcImRhdGFcIiwgdXJsLCBvcHRpb25zKTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kXG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqL1xuZnVuY3Rpb24gcnVuUmVzb3VyY2VNZXRob2QobWV0aG9kKSB7XG5cdGNvbnN0IHJlc3VsdCA9IFtdO1xuXG5cdGZvciAoY29uc3QgdHlwZSBvZiBbXCJzY3JpcHRzXCIsIFwic3R5bGVzaGVldHNcIiwgXCJkYXRhXCJdKSB7XG5cdFx0Y29uc3QgcmVzb3VyY2VzID0gdGhpcy5nZXRPcHRpb24oYHJlc291cmNlcy4ke3R5cGV9YCk7XG5cdFx0aWYgKCFpc0FycmF5KHJlc291cmNlcykpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgcmVzb3VyY2VzKSB7XG5cdFx0XHRpZiAoIShyZXNvdXJjZSBpbnN0YW5jZW9mIFJlc291cmNlKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCByZXNvdXJjZSBkZWZpbml0aW9uXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXN1bHQucHVzaChyZXNvdXJjZVttZXRob2RdKCkpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZ3xVUkx9IHVybFxuICogQHBhcmFtIFtPYmplY3R8dW5kZWZpbmVkfSBvcHRpb25zXG4gKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5SZXNvdXJjZU1hbmFnZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBhZGRSZXNvdXJjZSh0eXBlLCB1cmwsIG9wdGlvbnMpIHtcblx0aWYgKHVybCBpbnN0YW5jZW9mIFVSTCkge1xuXHRcdHVybCA9IHVybC50b1N0cmluZygpO1xuXHR9XG5cblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0bGV0IHJlc291cmNlO1xuXHRzd2l0Y2ggKHR5cGUpIHtcblx0XHRjYXNlIFwic2NyaXB0c1wiOlxuXHRcdFx0cmVzb3VyY2UgPSBuZXcgU2NyaXB0KGV4dGVuZCh7fSwgb3B0aW9ucywgeyBbQVRUUklCVVRFX1NSQ106IHVybCB9KSk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwic3R5bGVzaGVldHNcIjpcblx0XHRcdHJlc291cmNlID0gbmV3IFN0eWxlc2hlZXQoZXh0ZW5kKHt9LCBvcHRpb25zLCB7IFtBVFRSSUJVVEVfSFJFRl06IHVybCB9KSk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiZGF0YVwiOlxuXHRcdFx0cmVzb3VyY2UgPSBuZXcgRGF0YShleHRlbmQoe30sIG9wdGlvbnMsIHsgW0FUVFJJQlVURV9TUkNdOiB1cmwgfSkpO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgdHlwZSAke3R5cGV9YCk7XG5cdH1cblxuXHR0aGlzLmdldE9wdGlvbihcInJlc291cmNlc1wiKT8uW3R5cGVdLnB1c2gocmVzb3VyY2UpO1xuXHRyZXR1cm4gdGhpcztcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIDIwMjQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICovXG5cbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0VSUk9STUVTU0FHRSB9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBDb25maWdNYW5hZ2VyU3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgQ29uZmlnTWFuYWdlclN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRDb25maWdNYW5hZ2VyU3R5bGVTaGVldC5pbnNlcnRSdWxlKFxuXHRcdGBcbkBsYXllciBjb25maWdtYW5hZ2VyIHsgXG5bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17ZGlzcGxheTpub25lfSBcbn1gLFxuXHRcdDAsXG5cdCk7XG59IGNhdGNoIChlKSB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcihcImh0bWxcIiksXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRlICsgXCJcIixcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0Q3VzdG9tRWxlbWVudCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBDb25maWdNYW5hZ2VyU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvY29uZmlnLW1hbmFnZXIubWpzXCI7XG5pbXBvcnQgeyBnZXRXaW5kb3cgfSBmcm9tIFwiLi4vLi4vZG9tL3V0aWwubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IENvbmZpZ01hbmFnZXIgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgaW5kZXhEQkluc3RhbmNlU3ltYm9sID0gU3ltYm9sKFwiaW5kZXhEQkluc3RhbmNlXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpbml0aWFsaXplZFByb21pc2VTeW1ib2wgPSBTeW1ib2woXCJpbml0aWFsaXplZFByb21pc2VTeW1ib2xcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IE1PREVfUkVBRE9OTFkgPSBcInJlYWRvbmx5XCI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IE1PREVfUkVBRF9XUklURSA9IFwicmVhZHdyaXRlXCI7XG5cbi8qKlxuICogVGhlIENvbmZpZyBNYW5hZ2VyIGNvbXBvbmVudCBpcyB1c2VkIHRvIGVuY2Fwc3VsYXRlIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBhcHBsaWNhdGlvbi5cbiAqXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBjb25maWcgbWFuYWdlciBjb21wb25lbnRcbiAqL1xuY2xhc3MgQ29uZmlnTWFuYWdlciBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL2NvbXBvbmVudC1ob3N0L2NvbmZpZy1tYW5hZ2VyQEBpbnN0YW5jZVwiKTtcblx0fVxuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHQvKipcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqIEB0eXBlIHtzeW1ib2x9XG5cdFx0ICovXG5cdFx0dGhpc1tpbml0aWFsaXplZFByb21pc2VTeW1ib2xdID0gW107XG5cdFx0dGhpc1tpbmRleERCSW5zdGFuY2VTeW1ib2xdID0gbnVsbDtcblx0XHR0aGlzW2luaXRpYWxpemVkUHJvbWlzZVN5bWJvbF0ucHVzaChvcGVuRGF0YWJhc2UuY2FsbCh0aGlzKSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdHJlYWR5KCkge1xuXHRcdHJldHVybiBQcm9taXNlLmFsbCh0aGlzW2luaXRpYWxpemVkUHJvbWlzZVN5bWJvbF0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIEhUTUwgdGFnLCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHR9LFxuXHRcdFx0aW5kZXhEQjoge1xuXHRcdFx0XHRuYW1lOiBcIm1vbnN0ZXJcIixcblx0XHRcdFx0dmVyc2lvbjogMixcblx0XHRcdFx0b2JqZWN0U3RvcmU6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNvbmZpZ1wiLFxuXHRcdFx0XHRcdGtleVBhdGg6IFwia2V5XCIsXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcblx0ICogQHJldHVybiB7UHJvbWlzZTx1bmtub3duPn1cblx0ICovXG5cdGdldENvbmZpZyhrZXkpIHtcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpLnRoZW4oKCkgPT4ge1xuXHRcdFx0cmV0dXJuIGdldEJsb2IuY2FsbCh0aGlzLCBrZXkpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcblx0ICogQHJldHVybiB7UHJvbWlzZTxib29sZWFuPn1cblx0ICovXG5cdGhhc0NvbmZpZyhrZXkpIHtcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdHJldHVybiBnZXRCbG9iLmNhbGwodGhpcywga2V5KTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaCgoKSA9PiB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHtQcm9taXNlPHVua25vd24+fVxuXHQgKi9cblx0c2V0Q29uZmlnKGtleSwgdmFsdWUpIHtcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpLnRoZW4oKCkgPT4ge1xuXHRcdFx0cmV0dXJuIHNldEJsb2IuY2FsbCh0aGlzLCBrZXksIHZhbHVlKTtcblx0XHR9KTtcblx0fVxuXG5cdGRlbGV0ZUNvbmZpZyhrZXkpIHtcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpLnRoZW4oKCkgPT4ge1xuXHRcdFx0cmV0dXJuIGRlbGV0ZUJsb2IuY2FsbCh0aGlzLCBrZXkpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1jb25maWctbWFuYWdlclwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge0NTU1N0eWxlU2hlZXRbXX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiBbQ29uZmlnTWFuYWdlclN0eWxlU2hlZXRdO1xuXHR9XG5cblx0LyoqXG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIG9wZW5EYXRhYmFzZSgpIHtcblx0Y29uc3Qgd2luZG93ID0gZ2V0V2luZG93KCk7XG5cblx0Y29uc3QgbmFtZSA9IHRoaXMuZ2V0T3B0aW9uKFwiaW5kZXhEQi5uYW1lXCIpO1xuXHRjb25zdCB2ZXJzaW9uID0gdGhpcy5nZXRPcHRpb24oXCJpbmRleERCLnZlcnNpb25cIik7XG5cdGNvbnN0IHN0b3JhZ2VOYW1lID0gdGhpcy5nZXRPcHRpb24oXCJpbmRleERCLm9iamVjdFN0b3JlLm5hbWVcIik7XG5cdGNvbnN0IEtleVBhdGggPSB0aGlzLmdldE9wdGlvbihcImluZGV4REIub2JqZWN0U3RvcmUua2V5UGF0aFwiKTtcblxuXHRpZiAoIW5hbWUgfHwgIXZlcnNpb24pIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGUgZGF0YWJhc2UgbmFtZSBhbmQgdmVyc2lvbiBtdXN0IGJlIHNldC5cIik7XG5cdH1cblxuXHRjb25zdCByZXF1ZXN0ID0gd2luZG93LmluZGV4ZWREQi5vcGVuKG5hbWUsIHZlcnNpb24pO1xuXG5cdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0cmVxdWVzdC5vbmVycm9yID0gKGV2ZW50KSA9PiB7XG5cdFx0XHRjb25zb2xlLmVycm9yKFwiRXJyb3Igb3BlbmluZyBkYXRhYmFzZVwiLCBldmVudCk7XG5cdFx0XHRyZWplY3QocmVxdWVzdC5lcnJvcik7XG5cdFx0fTtcblxuXHRcdHJlcXVlc3Qub25zdWNjZXNzID0gKGV2ZW50KSA9PiB7XG5cdFx0XHR0aGlzW2luZGV4REJJbnN0YW5jZVN5bWJvbF0gPSBldmVudD8udGFyZ2V0Py5yZXN1bHQ7XG5cdFx0XHRyZXNvbHZlKHJlcXVlc3QucmVzdWx0KTtcblx0XHR9O1xuXG5cdFx0cmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSAoZXZlbnQpID0+IHtcblx0XHRcdGNvbnN0IGRiID0gZXZlbnQudGFyZ2V0LnJlc3VsdDtcblxuXHRcdFx0bGV0IG9iamVjdFN0b3JlO1xuXHRcdFx0aWYgKCFkYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKHN0b3JhZ2VOYW1lKSkge1xuXHRcdFx0XHRvYmplY3RTdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKHN0b3JhZ2VOYW1lLCB7IGtleVBhdGg6IEtleVBhdGggfSk7XG5cdFx0XHR9XG5cblx0XHRcdG9iamVjdFN0b3JlLnRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSAoZXZlbnQpID0+IHtcblx0XHRcdFx0Y29uc29sZS5sb2coXCJEYXRhYmFzZSB1cGdyYWRlIGNvbXBsZXRlXCIpO1xuXHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHR9O1xuXHRcdH07XG5cdH0pO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlIGVpdGhlciBcInJlYWRvbmx5XCIgb3IgXCJyZWFkd3JpdGVcIlxuICovXG5mdW5jdGlvbiBnZXRPYmplY3RTdG9yZShtb2RlKSB7XG5cdGNvbnN0IHN0b3JhZ2VOYW1lID0gdGhpcy5nZXRPcHRpb24oXCJpbmRleERCLm9iamVjdFN0b3JlLm5hbWVcIik7XG5cblx0aWYgKCF0aGlzW2luZGV4REJJbnN0YW5jZVN5bWJvbF0pIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGUgZGF0YWJhc2UgaXMgbm90IG9wZW4uXCIpO1xuXHR9XG5cblx0Ly8gQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSURCRGF0YWJhc2UvdHJhbnNhY3Rpb25cblx0Ly8gdHJhbnNhY3Rpb24oc3RvcmVOYW1lcywgbW9kZSwgb3B0aW9ucylcblx0Y29uc3QgdHggPSB0aGlzW2luZGV4REJJbnN0YW5jZVN5bWJvbF0udHJhbnNhY3Rpb24oc3RvcmFnZU5hbWUsIG1vZGUpO1xuXHRyZXR1cm4gdHgub2JqZWN0U3RvcmUoc3RvcmFnZU5hbWUpO1xufVxuXG4vKipcbiAqIEByZXR1cm4ge1Byb21pc2U8dW5rbm93bj59XG4gKi9cbmZ1bmN0aW9uIGNsZWFyT2JqZWN0U3RvcmUoKSB7XG5cdGNvbnN0IHN0b3JlID0gZ2V0T2JqZWN0U3RvcmUuY2FsbCh0aGlzLCBcInJlYWR3cml0ZVwiKTtcblxuXHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdGNvbnN0IHJlcSA9IHN0b3JlLmNsZWFyKCk7XG5cdFx0cmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uIChldnQpIHtcblx0XHRcdGNvbnNvbGUubG9nKFwiY2xlYXJPYmplY3RTdG9yZSBjb21wbGV0ZWRcIik7XG5cdFx0XHRyZXNvbHZlKCk7XG5cdFx0fTtcblx0XHRyZXEub25lcnJvciA9IGZ1bmN0aW9uIChldnQpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXCJjbGVhck9iamVjdFN0b3JlOlwiLCBldnQudGFyZ2V0LmVycm9yQ29kZSk7XG5cdFx0XHRyZWplY3QoZXZ0LnRhcmdldC5lcnJvckNvZGUpO1xuXHRcdH07XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBnZXRCbG9iKGtleSkge1xuXHRjb25zdCBzdG9yZSA9IGdldE9iamVjdFN0b3JlLmNhbGwodGhpcywgTU9ERV9SRUFET05MWSk7XG5cblx0Y29uc3QgcmVxID0gc3RvcmUuZ2V0KGtleSk7XG5cblx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRyZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKGV2dCkge1xuXHRcdFx0Y29uc3QgdmFsdWUgPSBldnQudGFyZ2V0LnJlc3VsdDtcblx0XHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0XHRyZXNvbHZlKHZhbHVlLmJsb2IpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRyZWplY3QobmV3IEVycm9yKFwiVGhlIHZhbHVlIG9mIHRoZSBrZXkgJ1wiICsga2V5ICsgXCInIGlzIG5vdCBkZWZpbmVkLlwiKSk7XG5cdFx0fTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGRlbGV0ZUJsb2Ioa2V5KSB7XG5cdGNvbnN0IHN0b3JlID0gZ2V0T2JqZWN0U3RvcmUuY2FsbCh0aGlzLCBNT0RFX1JFQURfV1JJVEUpO1xuXG5cdGNvbnN0IHJlcSA9IHN0b3JlLmRlbGV0ZShrZXkpO1xuXG5cdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0cmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uIChldnQpIHtcblx0XHRcdHJlc29sdmUoKTtcblx0XHR9O1xuXG5cdFx0cmVxLm9uZXJyb3IgPSBmdW5jdGlvbiAoZXZ0KSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKFwiZGVsZXRlQmxvYjpcIiwgZXZ0LnRhcmdldC5lcnJvckNvZGUpO1xuXHRcdFx0cmVqZWN0KGV2dC50YXJnZXQuZXJyb3JDb2RlKTtcblx0XHR9O1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gc2V0QmxvYihrZXksIGJsb2IpIHtcblx0Y29uc3Qgc3RvcmUgPSBnZXRPYmplY3RTdG9yZS5jYWxsKHRoaXMsIE1PREVfUkVBRF9XUklURSk7XG5cblx0Y29uc3QgS2V5UGF0aCA9IHRoaXMuZ2V0T3B0aW9uKFwiaW5kZXhEQi5vYmplY3RTdG9yZS5rZXlQYXRoXCIpO1xuXHRjb25zdCBvYmogPSB7fTtcblx0b2JqW0tleVBhdGhdID0ga2V5O1xuXHRvYmouYmxvYiA9IGJsb2I7XG5cdGNvbnN0IHJlcSA9IHN0b3JlLnB1dChvYmopO1xuXG5cdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0cmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uIChldnQpIHtcblx0XHRcdHJlc29sdmUoKTtcblx0XHR9O1xuXG5cdFx0cmVxLm9uZXJyb3IgPSBmdW5jdGlvbiAoZXZ0KSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKFwic2V0QmxvYjpcIiwgZXZ0LnRhcmdldC5lcnJvckNvZGUpO1xuXHRcdFx0cmVqZWN0KGV2dC50YXJnZXQuZXJyb3JDb2RlKTtcblx0XHR9O1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiPlxuICAgICAgICAgICAgPHNsb3Q+PC9zbG90PlxuICAgICAgICA8L2Rpdj5gO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoQ29uZmlnTWFuYWdlcik7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdEN1c3RvbUVsZW1lbnQsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IFwiLi4vbm90aWZ5L25vdGlmeS5tanNcIjtcbmltcG9ydCB7IEhvc3RTdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9ob3N0Lm1qc1wiO1xuaW1wb3J0IHsgZ2V0TG9jYWxlT2ZEb2N1bWVudCB9IGZyb20gXCIuLi8uLi9kb20vbG9jYWxlLm1qc1wiO1xuaW1wb3J0IHsgRW1iZWQgfSBmcm9tIFwiLi4vLi4vaTE4bi9wcm92aWRlcnMvZW1iZWQubWpzXCI7XG5pbXBvcnQgeyBnZXREb2N1bWVudFRyYW5zbGF0aW9ucyB9IGZyb20gXCIuLi8uLi9pMThuL3RyYW5zbGF0aW9ucy5tanNcIjtcbmltcG9ydCB7IHdpbmRvd1JlYWR5IH0gZnJvbSBcIi4uLy4uL2RvbS9yZWFkeS5tanNcIjtcbmltcG9ydCB7IEZvY3VzTWFuYWdlciB9IGZyb20gXCIuLi8uLi9kb20vZm9jdXNtYW5hZ2VyLm1qc1wiO1xuaW1wb3J0IHsgUmVzb3VyY2VNYW5hZ2VyIH0gZnJvbSBcIi4uLy4uL2RvbS9yZXNvdXJjZW1hbmFnZXIubWpzXCI7XG5pbXBvcnQgeyBmaXJlQ3VzdG9tRXZlbnQgfSBmcm9tIFwiLi4vLi4vZG9tL2V2ZW50cy5tanNcIjtcbmltcG9ydCB7IGlzSXRlcmFibGUgfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgXCIuL2NvbmZpZy1tYW5hZ2VyLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBIb3N0IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHByb21pc2VzU3ltYm9sID0gU3ltYm9sKFwicHJvbWlzZXNTeW1ib2xcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IG5vdGlmeUVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJub3RpZnlFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBvdmVybGF5RWxlbWVudFN5bWJvbCA9IFN5bWJvbChcIm92ZXJsYXlFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjb25maWdNYW5hZ2VyRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImNvbmZpZ01hbmFnZXJFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBmb2N1c01hbmFnZXJTeW1ib2wgPSBTeW1ib2woXCJmb2N1c01hbmFnZXJcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHJlc291cmNlTWFuYWdlclN5bWJvbCA9IFN5bWJvbChcInJlc291cmNlTWFuYWdlclwiKTtcblxuLyoqXG4gKiBUaGUgSG9zdCBjb21wb25lbnQgaXMgdXNlZCB0byBlbmNhcHN1bGF0ZSB0aGUgY29udGVudCBvZiBhIHdlYiBhcHAuXG4gKlxuICogPGltZyBzcmM9XCIuL2ltYWdlcy9ob3N0LnBuZ1wiPlxuICpcbiAqIERlcGVuZGVuY2llczogdGhlIHN5c3RlbSB1c2VzIGZ1bmN0aW9ucyBvZiB0aGUgW21vbnN0ZXJqc10oaHR0cHM6Ly9tb25zdGVyanMub3JnLykgbGlicmFyeVxuICpcbiAqIFlvdSBjYW4gY3JlYXRlIHRoaXMgY29udHJvbCBlaXRoZXIgYnkgc3BlY2lmeWluZyB0aGUgSFRNTCB0YWcgPG1vbnN0ZXItaG9zdCAvPmAgZGlyZWN0bHkgaW4gdGhlIEhUTUwgb3IgdXNpbmdcbiAqIEphdmFzY3JpcHQgdmlhIHRoZSBgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1ob3N0Jyk7YCBtZXRob2QuXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItaG9zdD48L21vbnN0ZXItaG9zdD5cbiAqIGBgYFxuICpcbiAqIE9yIHlvdSBjYW4gY3JlYXRlIHRoaXMgQ3VzdG9tQ29udHJvbCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0OlxuICpcbiAqIGBgYGpzXG4gKiBpbXBvcnQgJ0BzY2h1a2FpL2NvbXBvbmVudC1zdGF0ZS9zb3VyY2UvaG9zdC5tanMnO1xuICogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1ob3N0Jyk7XG4gKiBgYGBcbiAqXG4gKiBUaGUgQm9keSBzaG91bGQgaGF2ZSBhIGNsYXNzIFwiaGlkZGVuXCIgdG8gZW5zdXJlIHRoYXQgdGhlIHN0eWxlcyBhcmUgYXBwbGllZCBjb3JyZWN0bHkuXG4gKlxuICogYGBgY3NzXG4gKiBib2R5LmhpZGRlbiB7XG4gKiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAc3RhcnR1bWwgaG9zdC5wbmdcbiAqIHNraW5wYXJhbSBtb25vY2hyb21lIHRydWVcbiAqIHNraW5wYXJhbSBzaGFkb3dpbmcgZmFsc2VcbiAqIEhUTUxFbGVtZW50IDx8LS0gQ3VzdG9tRWxlbWVudFxuICogQ3VzdG9tRWxlbWVudCA8fC0tIEhvc3RcbiAqIEBlbmR1bWxcbiAqXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBzaW1wbGUgaG9zdCBjb21wb25lbnRcbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5Ib3N0I21vbnN0ZXItaG9zdC1jb25uZWN0ZWRcbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5Ib3N0I21vbnN0ZXItaG9zdC1kaXNjb25uZWN0ZWRcbiAqL1xuY2xhc3MgSG9zdCBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL2NvbXBvbmVudC1ob3N0L0hvc3RAQGluc3RhbmNlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIEhUTUwgdGFnLCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZmVhdHVyZXMgRmVhdHVyZSBkZWZpbml0aW9uc1xuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSBrZXlcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdGdldENvbmZpZyhrZXkpIHtcblx0XHRpZiAodGhpc1tjb25maWdNYW5hZ2VyRWxlbWVudFN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA9PT0gZmFsc2UpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlRoZXJlIGlzIG5vIGNvbmZpZyBtYW5hZ2VyIGVsZW1lbnRcIik7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzW2NvbmZpZ01hbmFnZXJFbGVtZW50U3ltYm9sXS5nZXRDb25maWcoa2V5KTtcblx0fVxuXG5cdGhhc0NvbmZpZyhrZXkpIHtcblx0XHRpZiAodGhpc1tjb25maWdNYW5hZ2VyRWxlbWVudFN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA9PT0gZmFsc2UpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlRoZXJlIGlzIG5vIGNvbmZpZyBtYW5hZ2VyIGVsZW1lbnRcIik7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzW2NvbmZpZ01hbmFnZXJFbGVtZW50U3ltYm9sXS5oYXNDb25maWcoa2V5KTtcblx0fVxuXG5cdGRlbGV0ZUNvbmZpZyhrZXkpIHtcblx0XHRpZiAodGhpc1tjb25maWdNYW5hZ2VyRWxlbWVudFN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA9PT0gZmFsc2UpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlRoZXJlIGlzIG5vIGNvbmZpZyBtYW5hZ2VyIGVsZW1lbnRcIik7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzW2NvbmZpZ01hbmFnZXJFbGVtZW50U3ltYm9sXS5kZWxldGVDb25maWcoa2V5KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdHNldENvbmZpZyhrZXksIHZhbHVlKSB7XG5cdFx0aWYgKHRoaXNbY29uZmlnTWFuYWdlckVsZW1lbnRTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgPT09IGZhbHNlKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGVyZSBpcyBubyBjb25maWcgbWFuYWdlciBlbGVtZW50XCIpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzW2NvbmZpZ01hbmFnZXJFbGVtZW50U3ltYm9sXS5zZXRDb25maWcoa2V5LCB2YWx1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogQHByaXZhdGVcblx0ICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0Lkhvc3QjbW9uc3Rlci1ob3N0LWNvbm5lY3RlZFxuXHQgKi9cblx0Y29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuXHRcdC8qKlxuXHRcdCAqIHNob3cgdGhlIHNjcm9sbCBiYXIgYWx3YXlzXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKi9cblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUub3ZlcmZsb3dZID0gXCJzY3JvbGxcIjtcblxuXHRcdGNvbnN0IGNsYXNzTmFtZXMgPSB0aGlzLmdldE9wdGlvbihcImNsYXNzZXMuYm9keVwiKTtcblxuXHRcdGlmIChkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWVzKSkge1xuXHRcdFx0ZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZXMpO1xuXHRcdH1cblxuXHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItaG9zdC1jb25uZWN0ZWRcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHByaXZhdGVcblx0ICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0Lkhvc3QjbW9uc3Rlci1ob3N0LWRpc2Nvbm5lY3RlZFxuXHQgKi9cblx0ZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUub3ZlcmZsb3dZID0gXCJcIjtcblxuXHRcdGNvbnN0IGNsYXNzTmFtZXMgPSB0aGlzLmdldE9wdGlvbihcImNsYXNzZXMuYm9keVwiKTtcblx0XHRpZiAoIWRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZXMpKSB7XG5cdFx0XHRkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lcyk7XG5cdFx0fVxuXG5cdFx0aWYgKGlzSXRlcmFibGUodGhpc1twcm9taXNlc1N5bWJvbF0pID09PSBmYWxzZSkge1xuXHRcdFx0dGhpc1twcm9taXNlc1N5bWJvbF0gPSBbXTtcblx0XHR9XG5cblx0XHR0aGlzW3Byb21pc2VzU3ltYm9sXS5wdXNoKFxuXHRcdFx0bmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0XHR0aGlzLmFkZEV2ZW50TGlzdGVuZXIoXG5cdFx0XHRcdFx0XCJtb25zdGVyLWhvc3QtY29ubmVjdGVkXCIsXG5cdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0eyBvbmNlOiB0cnVlIH0sXG5cdFx0XHRcdCk7XG5cdFx0XHR9KSxcblx0XHQpO1xuXG5cdFx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci1ob3N0LWRpc2Nvbm5lY3RlZFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5Ib3N0fVxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHR0aGlzW3Byb21pc2VzU3ltYm9sXSA9IFtdO1xuXHRcdHRoaXNbcHJvbWlzZXNTeW1ib2xdLnB1c2god2luZG93UmVhZHkpO1xuXG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcblx0XHRpbml0RXZlbnRIYW5kbGVyLmNhbGwodGhpcyk7XG5cdFx0aW5pdFRyYW5zbGF0aW9ucy5jYWxsKHRoaXMpO1xuXG5cdFx0dGhpc1tmb2N1c01hbmFnZXJTeW1ib2xdID0gbmV3IEZvY3VzTWFuYWdlcih0aGlzKTtcblx0XHR0aGlzW3Jlc291cmNlTWFuYWdlclN5bWJvbF0gPSBuZXcgUmVzb3VyY2VNYW5hZ2VyKHRoaXMpO1xuXG5cdFx0dHJ5IHtcblx0XHRcdHRoaXNbcHJvbWlzZXNTeW1ib2xdLnB1c2godGhpc1tyZXNvdXJjZU1hbmFnZXJTeW1ib2xdLmF2YWlsYWJsZSgpKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuaXNDb25uZWN0ZWQgPT09IGZhbHNlKSB7XG5cdFx0XHR0aGlzW3Byb21pc2VzU3ltYm9sXS5wdXNoKFxuXHRcdFx0XHRuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5hZGRFdmVudExpc3RlbmVyKFxuXHRcdFx0XHRcdFx0XCJtb25zdGVyLWhvc3QtY29ubmVjdGVkXCIsXG5cdFx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7IG9uY2U6IHRydWUgfSxcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KSxcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBQcm9taXNlIGlzIHJlc29sdmVkIHdoZW4gdGhlIGVsZW1lbnQgaXMgY29ubmVjdGVkIHRvIHRoZSBET00gYW5kIGFsbCByZXNvdXJjZXMgYXJlIGF2YWlsYWJsZS5cblx0ICogSWYgdGhlIGVsZW1lbnQgaXMgbm90IGNvbm5lY3RlZCB0byB0aGUgRE9NLCB0aGUgUHJvbWlzZSBpcyByZWplY3RlZC5cblx0ICpcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdG9uUmVhZHkoKSB7XG5cdFx0aWYgKGlzSXRlcmFibGUodGhpc1twcm9taXNlc1N5bWJvbF0pID09PSBmYWxzZSkge1xuXHRcdFx0dGhpc1twcm9taXNlc1N5bWJvbF0gPSBbXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gUHJvbWlzZS5hbGwodGhpc1twcm9taXNlc1N5bWJvbF0pLnRoZW4oKCkgPT4ge1xuXHRcdFx0dGhpc1twcm9taXNlc1N5bWJvbF0gPSBbXTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZy9lbi9kb2MvbW9uc3Rlci9Nb25zdGVyLkRPTS5Gb2N1c01hbmFnZXIuaHRtbHxNb25zdGVyLkRPTS5Gb2N1c01hbmFnZXJ9XG5cdCAqIEByZXR1cm4geyp9XG5cdCAqL1xuXHRnZXQgZm9jdXNNYW5hZ2VyKCkge1xuXHRcdHJldHVybiB0aGlzW2ZvY3VzTWFuYWdlclN5bWJvbF07XG5cdH1cblxuXHQvKipcblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy9tb25zdGVyL01vbnN0ZXIuRE9NLlJlc291cmNlTWFuYWdlci5odG1sfE1vbnN0ZXIuRE9NLlJlc291cmNlTWFuYWdlcn1cblx0ICogQHJldHVybiB7Kn1cblx0ICovXG5cdGdldCByZXNvdXJjZU1hbmFnZXIoKSB7XG5cdFx0cmV0dXJuIHRoaXNbcmVzb3VyY2VNYW5hZ2VyU3ltYm9sXTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5Ib3N0fVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gVGhlcmUgaXMgbm8gb3ZlcmxheSBlbGVtZW50IGRlZmluZWQuXG5cdCAqL1xuXHR0b2dnbGVPdmVybGF5KCkge1xuXHRcdGlmICh0aGlzW292ZXJsYXlFbGVtZW50U3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID09PSBmYWxzZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhlcmUgaXMgbm8gb3ZlcmxheSBlbGVtZW50IGRlZmluZWQuXCIpO1xuXHRcdH1cblxuXHRcdHRoaXNbb3ZlcmxheUVsZW1lbnRTeW1ib2xdLnRvZ2dsZSgpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge0hvc3R9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBUaGVyZSBpcyBubyBvdmVybGF5IGVsZW1lbnQgZGVmaW5lZC5cblx0ICovXG5cdG9wZW5PdmVybGF5KCkge1xuXHRcdGlmICh0aGlzW292ZXJsYXlFbGVtZW50U3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID09PSBmYWxzZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhlcmUgaXMgbm8gb3ZlcmxheSBlbGVtZW50IGRlZmluZWQuXCIpO1xuXHRcdH1cblxuXHRcdHRoaXNbb3ZlcmxheUVsZW1lbnRTeW1ib2xdLm9wZW4oKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtIb3N0fVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gVGhlcmUgaXMgbm8gb3ZlcmxheSBlbGVtZW50IGRlZmluZWQuXG5cdCAqL1xuXHRjbG9zZU92ZXJsYXkoKSB7XG5cdFx0aWYgKHRoaXNbb3ZlcmxheUVsZW1lbnRTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgPT09IGZhbHNlKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGVyZSBpcyBubyBvdmVybGF5IGVsZW1lbnQgZGVmaW5lZC5cIik7XG5cdFx0fVxuXG5cdFx0dGhpc1tvdmVybGF5RWxlbWVudFN5bWJvbF0uY2xvc2UoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItaG9zdFwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge0NTU1N0eWxlU2hlZXRbXX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiBbSG9zdFN0eWxlU2hlZXRdO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuSTE4bi5Mb2NhbGV9XG5cdCAqL1xuXHRnZXQgbG9jYWxlKCkge1xuXHRcdHJldHVybiBnZXRMb2NhbGVPZkRvY3VtZW50KCk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7VHJhbnNsYXRpb25zfVxuXHQgKi9cblx0Z2V0IHRyYW5zbGF0aW9ucygpIHtcblx0XHRyZXR1cm4gZ2V0RG9jdW1lbnRUcmFuc2xhdGlvbnMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3xNZXNzYWdlfSBtZXNzYWdlXG5cdCAqL1xuXHRwdXNoTm90aWZpY2F0aW9uKG1lc3NhZ2UpIHtcblx0XHRpZiAodGhpc1tub3RpZnlFbGVtZW50U3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID09PSBmYWxzZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhlcmUgaXMgbm8gbm90aWZ5IGVsZW1lbnQgZGVmaW5lZC5cIik7XG5cdFx0fVxuXG5cdFx0dGhpc1tub3RpZnlFbGVtZW50U3ltYm9sXS5wdXNoKG1lc3NhZ2UpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1NlbGVjdH1cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGluaXRDb250cm9sUmVmZXJlbmNlcygpIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0dGhpc1tvdmVybGF5RWxlbWVudFN5bWJvbF0gPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoXCJtb25zdGVyLW92ZXJsYXlcIik7XG5cdHRoaXNbbm90aWZ5RWxlbWVudFN5bWJvbF0gPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoXCJtb25zdGVyLW5vdGlmeVwiKTtcblx0dGhpc1tjb25maWdNYW5hZ2VyRWxlbWVudFN5bWJvbF0gPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XCJtb25zdGVyLWNvbmZpZy1tYW5hZ2VyXCIsXG5cdCk7XG59XG5cbmZ1bmN0aW9uIGluaXRUcmFuc2xhdGlvbnMoKSB7XG5cdGlmIChpc0l0ZXJhYmxlKHRoaXNbcHJvbWlzZXNTeW1ib2xdKSA9PT0gZmFsc2UpIHtcblx0XHR0aGlzW3Byb21pc2VzU3ltYm9sXSA9IFtdO1xuXHR9XG5cblx0dGhpc1twcm9taXNlc1N5bWJvbF0ucHVzaChFbWJlZC5hc3NpZ25UcmFuc2xhdGlvbnNUb0VsZW1lbnQoKSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50SGFuZGxlcigpIHtcblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPHRlbXBsYXRlIGlkPVwiaG9zdC1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmhvc3QtY29udGFpbmVyLmNvbnRlbnRcIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cInBhcnQgcGF0aDpob3N0LWNvbnRhaW5lci5uYW1lLCBkYXRhLW1vbnN0ZXItcm9sZSBwYXRoOmhvc3QtY29udGFpbmVyLm5hbWVcIj48L2Rpdj5cbiAgICAgICAgPC90ZW1wbGF0ZT5cblxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiaG9zdC1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxzbG90Pjwvc2xvdD5cbiAgICAgICAgPC9kaXY+YDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KEhvc3QpO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywgMjAyNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IE92ZXJsYXlTdHlsZVNoZWV0IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBPdmVybGF5U3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG5cdE92ZXJsYXlTdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIG92ZXJsYXkgeyBcbjp3aGVyZShodG1sKXtsaW5lLWhlaWdodDoxLjE1Oy13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlOy1tb3otdGV4dC1zaXplLWFkanVzdDoxMDAlO3RleHQtc2l6ZS1hZGp1c3Q6MTAwJX06d2hlcmUoaDEpe2ZvbnQtc2l6ZToyZW07bWFyZ2luLWJsb2NrLWVuZDouNjdlbTttYXJnaW4tYmxvY2stc3RhcnQ6LjY3ZW19OndoZXJlKGRsLG9sLHVsKSA6d2hlcmUoZGwsb2wsdWwpe21hcmdpbi1ibG9jay1lbmQ6MDttYXJnaW4tYmxvY2stc3RhcnQ6MH06d2hlcmUoaHIpe2JveC1zaXppbmc6Y29udGVudC1ib3g7Y29sb3I6aW5oZXJpdDtoZWlnaHQ6MH06d2hlcmUoYWJiclt0aXRsZV0pe3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7LXdlYmtpdC10ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZH06d2hlcmUoYixzdHJvbmcpe2ZvbnQtd2VpZ2h0OmJvbGRlcn06d2hlcmUoY29kZSxrYmQscHJlLHNhbXApe2ZvbnQtZmFtaWx5Om1vbm9zcGFjZSxtb25vc3BhY2U7Zm9udC1zaXplOjFlbX06d2hlcmUoc21hbGwpe2ZvbnQtc2l6ZTo4MCV9OndoZXJlKHRhYmxlKXtib3JkZXItY29sb3I6Y3VycmVudENvbG9yO3RleHQtaW5kZW50OjB9OndoZXJlKGJ1dHRvbixpbnB1dCxzZWxlY3Qpe21hcmdpbjowfTp3aGVyZShidXR0b24pe3RleHQtdHJhbnNmb3JtOm5vbmV9OndoZXJlKGJ1dHRvbixpbnB1dDppcyhbdHlwZT1idXR0b24gaV0sW3R5cGU9cmVzZXQgaV0sW3R5cGU9c3VibWl0IGldKSl7LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbn06d2hlcmUocHJvZ3Jlc3Mpe3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfTp3aGVyZShzZWxlY3Qpe3RleHQtdHJhbnNmb3JtOm5vbmV9OndoZXJlKHRleHRhcmVhKXttYXJnaW46MH06d2hlcmUoaW5wdXRbdHlwZT1zZWFyY2ggaV0pey13ZWJraXQtYXBwZWFyYW5jZTp0ZXh0ZmllbGQ7b3V0bGluZS1vZmZzZXQ6LTJweH06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfTo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjppbmhlcml0O29wYWNpdHk6LjU0fTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b247Zm9udDppbmhlcml0fTp3aGVyZShidXR0b24saW5wdXQ6aXMoW3R5cGU9YnV0dG9uIGldLFt0eXBlPWNvbG9yIGldLFt0eXBlPXJlc2V0IGldLFt0eXBlPXN1Ym1pdCBpXSkpOjotbW96LWZvY3VzLWlubmVye2JvcmRlci1zdHlsZTpub25lO3BhZGRpbmc6MH06d2hlcmUoYnV0dG9uLGlucHV0OmlzKFt0eXBlPWJ1dHRvbiBpXSxbdHlwZT1jb2xvciBpXSxbdHlwZT1yZXNldCBpXSxbdHlwZT1zdWJtaXQgaV0pKTo6LW1vei1mb2N1c3Jpbmd7b3V0bGluZToxcHggZG90dGVkIEJ1dHRvblRleHR9OndoZXJlKDotbW96LXVpLWludmFsaWQpe2JveC1zaGFkb3c6bm9uZX06d2hlcmUoZGlhbG9nKXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOnNvbGlkO2NvbG9yOiMwMDA7aGVpZ2h0Oi1tb3otZml0LWNvbnRlbnQ7aGVpZ2h0OmZpdC1jb250ZW50O2xlZnQ6MDttYXJnaW46YXV0bztwYWRkaW5nOjFlbTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3dpZHRoOi1tb3otZml0LWNvbnRlbnQ7d2lkdGg6Zml0LWNvbnRlbnR9OndoZXJlKGRpYWxvZzpub3QoW29wZW5dKSl7ZGlzcGxheTpub25lfTp3aGVyZShzdW1tYXJ5KXtkaXNwbGF5Omxpc3QtaXRlbX1odG1se2hlaWdodDoxMDAlfWJvZHksaHRtbHttaW4taGVpZ2h0OmNhbGMoMTAwdmggLSA0MHB4KX1ib2R5e2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXJnaW46MDtwYWRkaW5nOjA7d29yZC1icmVhazpicmVhay13b3JkfS5ibG9ja3tkaXNwbGF5OmJsb2NrfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uZ3JpZHtkaXNwbGF5OmdyaWR9LmlubGluZS1ncmlke2Rpc3BsYXk6aW5saW5lLWdyaWR9LmZsZXh7ZGlzcGxheTpmbGV4fS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS5oaWRkZW4sLmhpZGUsLm5vbmV7ZGlzcGxheTpub25lfS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMiwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0zLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItMHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXdpZHRoOjB9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMSwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0zLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX1pbnB1dCxtZXRlcixwcm9ncmVzcyxzZWxlY3QsdGV4dGFyZWF7YWNjZW50LWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItd2lkdGgpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6MTAwJTttYXJnaW46MDtvdXRsaW5lOm5vbmV9aW5wdXQsc2VsZWN0LHRleHRhcmVhe2hlaWdodDotbW96LWZpdC1jb250ZW50O2hlaWdodDpmaXQtY29udGVudDtwYWRkaW5nOi40cmVtIC42cmVtfXRleHRhcmVhe21pbi1oZWlnaHQ6NnJlbTtyZXNpemU6dmVydGljYWx9aW5wdXRbdHlwZT1jb2xvcl17aGVpZ2h0OjJyZW07bWFyZ2luOjA7cGFkZGluZzouMXJlbTt3aWR0aDoycmVtfWlucHV0OmhvdmVyOm5vdChbdHlwZT1yYWRpb10pOm5vdChbdHlwZT1jaGVja2JveF0pOm5vdChbdHlwZT1yYW5nZV0pLHNlbGVjdDpob3Zlcix0ZXh0YXJlYTpob3Zlcntib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0yKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjhzLGNvbG9yIC4yNXMgLjA4MzMzMzMzMzNzfWlucHV0OmZvY3VzLHNlbGVjdDpmb2N1cyx0ZXh0YXJlYTpmb2N1c3tvdXRsaW5lOjFweCBkYXNoZWQgdmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyk7b3V0bGluZS1vZmZzZXQ6M3B4fUBmb250LWZhY2V7Zm9udC1kaXNwbGF5OnN3YXA7Zm9udC1mYW1pbHk6UmFsZXdheTtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDozMDA7c3JjOnVybChkYXRhOmFwcGxpY2F0aW9uL3gtZm9udC13b2ZmMjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxkMDlHTWdBQkFBQUFBRko0QUJJQUFBQUF0M0FBQUZJUUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR29FOEcrNDZISVU4Qm1BL1UxUkJWRVFBaFFnSWdRb0pueFFSQ0FxQnVneUJtbkFMaENJQUFUWUNKQU9JUUFRZ0JZVVVCeUFNZ3h3YmZhUVhhSmVmbU56MFpvbDN2NjBjUGVaTXBHNEhKU2prNXFJSU5nNkNHTWdsWmYvL24zRjBqT0dHRFJBMXJYZUluY0pJVWtOSEduNjlxTVJEVThaYWpqczlVYnNtdG5xbkUzdjN2cWlRbWZSUXBMa0tXNlFad2FsNnM1SVVpSk5VU1VHL093b0RZNkI2NzVPalNqa0RTU011MnBlZHB1OXZKSUxVbEpkNzA3RCtlTEhwallESTRlMXVEbkxqSEh2eHBEWEdNeWR1TExuMXF0MEZDUU95RnNKWkUxK2tKcTNUK0llN0JKRklOT0FOYmk5dlRVemhJN1c0R21VTDBsV2pUL0ZRUWkvbSsreHVQUDAyb21SSGU1cG40RGdmTlpmbitSOXo5Nzl0bUVlTmFxMVJ4UnFIVGpUUE5BMkpGRWdySGRvL250L1cvNXpiZ0dDeGlhNkVrVmlBMkZoWUdJdFJtRTFadlZVdnF0U3RiN012cmQzVzcrdDIrMFhkb1RuenpqWWJwN21TSExBQ2toTVdnQ1RMNnMwV3YwQVVvaEpmRXFFM29wUGQ1OGlrSm5LbG8rM3VhZVNIWUo2ZmNJY1hqZCtyS1VFc2FFbFRxbFVsVlJtL04rZS84aVAwTDVBS296TmxKMy85aUJ3c2hNNnY1SklVSnlrZ1QzZmRyT21xNkxjcytaK3EvWHNBWEZ4RUVpUUlVYUtvc0ZuN2N0VCs3QkJTNWRxRG9sSlh1bmJsN3J0dHpEL3YzODRMZnRKYWdGRkFMWVBFNUE3Z25NclpCaHQ0bFhxc2JaS21iZHEwVHRPbXBtZ05pdWdNMlBZQmM3M01yanE3R0xzb1hIY1RwdDl1UHZGRHo4ZU4zZytzeHJQUUF3NkRURk5wL09aSTlpaW5OaXRaaFJtcFFPQ2tkb0JkQU5qVldsYXZNaXR3RE5KWC9wWUlBa1Z3bk9QL3ZXNXh6b013N1NBRkFLVStaei9rblAvWjlqK09kZnJMOEtlMnZkS2JtcGh1eEpTdUw4RVVBZ2dISWlCSFArNDQ0RUR6djFQVFEzWWtPY09TbFRIbWo2VXNkZm8yTCsvanBZZTdJSFdjUVVnY2drcExGUjFZVFc4Q0dLUVg5YjhHRkFBQUg5dG80UkhRNkdMdkZScmk0RGl3VHpBQURETUtEUHIvZlozVi9xZGdQbWtHektURW1XRVhiN1EzdHRnVFlxbzJuUDYvKzk3WGYrRi85SkhBVnNJSWNBQ0Jad1J5a0dUN2dDUjhWb2hKY1VPT1NEamlTYkFwaE1vem0ySlJwdEJ0VVc2OVhiTkZHM0lWeTJLTG9rNDgvTGZzbTUyN0lhcUJMTXVCYk9GSXdlRlVkMDF2ZUwrWTh4V2h0emNxVG0yQ0lUYzVlTEp3U0k0ZllsTFlGSVZIQXMvL1Q1M040L1l4MWhLR1UrSFNxRXJkcFBQbnM2ZnFxV0pzTmJaYUNsUXRqbE9MVU1zaGNkb0E1VFFzczRKTGM5MFN4Q09NTVVLNEtQOU5zaHB6cFg0dnd4S0NoQ0FTUkVSRS9MS3NXUmxKd05LQWNUblhBaEV5M3IxS0hjWmEvWWRYNTg0MjAvaWFYbXRHaG9DQWlJaUFSMjN2L1A5K0tUQUNBTjVoZGtDM3hVQzRFTHNnZ3ZrUjJrckVqWVNFdjBCS1NtSENoSXZZT0NBSmtLUWd5WU1NMlFvVU16Q28xNkJKODVxQVdDQ2RIZWszQUIwT0RMMUxxMFBnVGUzaFN3MmZoaTRYaFB1ZXVRV0VINnh0SUVRQWJHMk5tNW9WNTRRRlAreUtnTzJENFQ1dC93ejJYVzkyL3JwcXBMVFNJUDhxVjl2THZPZHMwTkxXeVg1MUs2b2ZidlBaRTFwYWY3dzMxOEM5WnRocTdmMzJiZnVMNjRWWkh3NTE0WXNtNWxnZk5iZkc3Vzlsc1VBNEVHejcyM3Z4d0d6cDRmUlIrbVA4THM1QjdLQjJlREpYYzZ4d2xHNjkwMnVnN0F6TEE4TlkyMUIyZEIvUDVxZk9WOHQxb255TDVqWkREZlFJNVJnOEQ5OEZ2SHN2Y2xIdUpzcmR2c0pycGMvVHIvZ3UvRWZaSnpYVXpwV2FEajdNNytVUDgvOEVrQUFWYUFTL0NSK1hzL0pONFlhSWNPMXhIWmNVYU1NYmtscnBLeTdOZlFKS1FjVVJhZ29HbUNXK0hBNkVOdmJnMzNzbDJwSVlSbUU5YklIYjBtQTZrazZsTjVHZHlNTjVFYm1RaHhIS2x3TWdUNThjZ3c3cGRVUno3bmZNY1FmY1UzdkljelZrZHJoWDhYSHE0MDEydEZPZDdrVC9hN3A3bTgzV0E3MUY3YU85TStkanZkZDZqN2Z4bStEMVB1M3ozdWlydm11eXphNTN0cnY5M2xUYjgyUlQyS2FGVlVLTU5QMzZCdlFNQ28wR3NFZGtMOHMrekxnMUV4Yk0wTmdDV0F4Z3pmODJERzFLWE1mYzRyak5jUWZIS3hTQ3VSdUJJNUFvZERERGtHZFY4Q25WVkVtRU1haW40U2EwQVhUSTBSQk5wT1lBTFZxMWFWOXZ4SmlVekhLV0NpczZtcDBCdWt4MDY5R3I3NHNuVk5ic29DbWtWTW9wNStwREdhV3oyc0xEcjJpTnQrb1pPMGIzNllTSWpXY3h2bmxOMHgwVmhsWW9XNFVSalhYS3lMRzNZM3FvTGRFYXpIQUVFb1Z1TWwzRERlRVJWcEcvamVURVIwQ1VaRVUxbW90cUZvaXdKRktVYURGaWFjU2xCSnJFalNRS0ovQ1NGU21TS2sxNjFRbGtkS2V5U1hZenNkWEtpNkk5aWtOSk10Q1VLbE91UXFVcTFWSFQxenE2K2x6ZlFOQUlhNUpwUm92V2FFUDdaeHVObVRqTUxCWXVxM1hVVGdOZFJEZDZVcTlBMzNjYnhBenhERE9OMEl4YU5WYXhkLy9zL2FqeEFFNkpuUGJGR1prdUMzdWFOVThFc0RTTFpWbXhPajFQZDhIUXhYU3BlZGtYYXdiVzZ3Wm84KzZEcml1UUZGdzVJcHZuSmg2L1pnRkpLOTMwYUVNMlhKM3lKQjBESG9waGJxZzB1cmt2TUlnWWx0YkdSUGNka2Q3VmovTlY0cGJBYmErL0U0QmpDZzlwNVplcmkvcGRNMENHLzd0WFpOeFZFKzZiWWF2UW42dW1Xd3kzRlhmNmdnK1huQXRIRGdqa1BOaVVicXBvd3ZEVXZiUmxjajVYWkhZelY4Smk0TmwxdmpzT2hyTWF4T0h4ZUR3ZWp6L1ZJSEpYbjZIMHdoZzZxRk9FVXFRbzBXTEUwb2hMQ1RLSjB5UTVMVTl5UlFwU3BVbGZabkFTQmtXcGxDbFhvVktWNnFpYlRCdE1tUUtZWVdIVlVVZnRHSXQ2Mmxkbk1IM0VwaVUwcVZRcUhiQ0x4T1UrRTQvMVhMZkJFaHpLaGdVY2dVU2hmeHdtRHo5RzVFUkFBSEw3RkhSS1F5cm53dXhRZjVyaEhCRUJSSW9TTFVZc3pVYmM0cnRNZHBsMjZGZ2Q1NXRnUUc4eC9mQVoySnpJdkdibWxyY1hBbTN3WEthN0VsZlBjUzJ0eGZxK2VnZmlIR29ETXh5QlJLSHZ5M1NKMzBRNlY4KzZtZGZac2FGVjNlT1VLc1dNeW5raHlMMXU0VkkwTDFTSkxJeFh5WXpwTHlOcWlXejBYVHBrYVR5bjFaRHRpOTBtWTAydjB0VXF0elNDbCtxcks3ckl1djF2OVJEMHNneHFHYkpvR0dmRWtsRTFZenIyOE8xbDJLZXdYOU40QURhTjFiN0wwSWFSVFhPdXk5eWl1ODJwT3dIUUJDK3BsZENyT21LME1nL3IxdlJZRW0zREJFY2dVZWdtVXgwM0c0K3dpdFFnT2ZFUkVDVlpVWTNtNHRtRUl2d1VLVXEwR0xFMDRsSUNUdUkweVRxdEZjbEVDbEtsU2E4NldFWjNKSnZzRldpN0l4S0pPQndPaDhQaGNFVHJSTjN0RHBsTUpwTmhSSWFpcUFpR1lSZ21jYmtzeTROb3ovcm9mUUw3S2NhbE5EMEZPVzNSR1p1T0JSMnhtVk14a1Vna0RsMFg3dUppdXRTOGJOR2FFK3YvWlFPd3FlODZHSUllRXNDdW92V1lmQ3EydHZwTU9CTjdNek82OEdXWExodG1nVzJmZmVIcDFNdTdxd1g1TkR3VGtwQ1NjZWZCa3hkdmZpbkFSSVJJVWFMRmlLVVJseElBaVpFMHJWcTY1SW9VU1pVbXZlcVVNcnBzL3oxWldFWjVZQmdHQUFBQUFBQ0EwV1pzZDFDcCtIdytuMi9jT2xrNHJEcFNsMUszSHIzNmpnMUNUdHd6T2NOdUNYWU5naURZaG90SDFvZ09MUlN1eDhuaWw0cjJpWWF2MG5vcnpYdloyblpqWkxmYUtEK1ZSZ0gvZmdObXBrRmJoZ2lHaVVhY0dmWE5tSzQ5RlB2WTl0dmJjVG03NSszZmRhbVc2WVN0d2tkemFDSFpjdnEwQ1M0aVU1Wm1OeExYR0JlL3JRb0hqTVAxL1FFR1ZNWkZKZ2JEREovNVQzZXlCY3ZHUFNxVGltSmNDK1lRVWpxR3YybkM3cTNuQjBET3F2MkczVnZsSWhLSVc4TVJTQlM2eVpUaU5HRlgrUkdDREhzOFBZSWRUamRBVUF5dlFrd1NDcHBoTmQyMG1wdU1qUVhLQlFrV0lqUXBtSlJVS1l4S1hjTERjNmtJZkhhVEthT01TYzRNc1ZSWVEwZXpVNkZMcFZ1UDN0TEh1d3ByWWZ0aGl3aUhGQVdrU3BtV1J0KzZuSjZVMThDdXlKODVqMngwYjBkN045cGlicTBsYjROblUrcE83dEVVTGloZFVPMmhycHRnWVhDc3hCRkEzbFEybm1GYzNGYlJqR0JnQ2Q2QlVIN3FuWEJiYWNqc0s5OVJmSURNQUZrQnNvTytuWmc4UDBCQmdNSUF0UUVhbjlXUUVzOU1BSE5HODU1NHdhK0FybnF2VFRqcEdTN2UvaWxQbWpBUlBtbnN4V2tkQUFSeU9MOXlBaHlteDdTR0tsazdHaDQ4dkR2TmZkZytJVEJacEQ5Z3pnTUlCd3dCazV0bWtFWElxcU1NYUVUZy9IVWUyNm9MVFRwNHc0ZzlVa1o1YmdieEVIdEN5VExZUEhtSlVxM3VKcHF6dlNOY3VtYkJkWFlRc2t1MUM5Mk44alR2REZFVTBydjgxN2dtcXNHalBmUnVOanZlclREbUhDRTRxK3Fiek9qdUlJdlJhRGh6WjEvVkpVcGhoaU9RS0hRd3NaNVRqZ3VBQjhDdUtyK1lJTUtld0lvTU81eHg5ZTRBRUJURFNZcG0yT1R5OG9Jb3lZb2FqZWpVUWI4SndEL1hCNWlTc3dVaWdoQXNSR2hTMENnekp6WE1DVFUxWEVaSGFUQVhUQ1FTaWNYYlk0VkNvUmdMRXhzdGxkQ3R4WjFhVW5sdXRHaHRPUXQxOC9SVWRWcGtEQnZiUzRuRW9ORm9OQnFORmlkWG4wV0pMSkNyVThDVWJxcU1oWkdwbStGOEViQklVYUxGaUtVUmx4S0VFaVZWTFZOeVJncFNwVW12dWdBWmhBR2x5cFNyVUtsS3RicG1BNndyUUxjZXZmcWFFN0RUV3M2WUhtMEUyZGNsaVdXc1dFM25tUzdHNWI2dUdWblBuTnV5eVdiSHd4RGpwV2s2TStqMjBlWU1MUS8wM1ZNbUttNFpuZ2xKU01tNDgrREppemUvS3JkQ2tWTWxLc3lJbW1lWmYwR1F5d0pCRUZ4Qy9yZ2dDSUlnQ0lJejkwYkRFd01UajhmakFVQXhkUzZWc0RjczFnOHdmWUNYck5kOThTSDhnYWprNXZ1VVBxZzRYRFA5Sm03b0dXdkdYeFNkRUxMZnJzRVNFc21XWFRjTTNjTHRIRlNHYlNIQkFqY0NpVUlYSnFIbk1sT0xSQkxhc25VSzJTdXgxenFuTUIvWk1HT3gvelB1OG9oREFEQUFPQUFDQUFtQUFrQURZSGdsQ2tDdUxWQWlTSUtGQ1Awa2hXTktQRlV3YmR5TCtzREJ5ZWdrYUoyV0VNdFdyRTYvNHZwVzdHNmU0bUR3MEJmeFpoRnQ5R3ZmaFBFQW15ZDRjTXRVcXNQbDRheTdHdWFrNXQwTjUyT093SmFCZ1NOSHNrMk5oN3FFV1pZVnE4ZStrc3hqajNFS1NYZzhMTmlsUXFGUXpFMWZ2NXR2cFFRRnRGSW15THRpdlRlV2tRQ2s1WlJlMlFpSjJackxZRFY4Nk1CWVdYNXhBUHVuazF5bnRaMng2YWJOcmlYQXNoV3JjZmtVNjN5L2ovbStnbnpOOEkzWXR4emZDZU9pQVBpN1loMXdCQktGenM3MldybGlmV2IzbitzT21rU2l6WEhUWHBtdkFuT2dlYSs3UzhGMUVIUDhuVTRJbkZZNFE1bVdwM0JBTGxlc2E3Qno0RnVPYkU0RVhSbml5azhodENPaWs4dmxjc1dZSUtyNC9jSE0zWFhJY2N5T0RzQlhIOVIzTklCalVzZDFmaWRqMGlpbkg1cmlaZlVPRFRpRlF1bHplYXg3K2pIWlZ5eGYzOFUzeExkcitVN3U0M0g1OUtlZ0s5NUp2d3Z5cW4zSWd4THlVRzJZNFFna0N2MUJURCtJdkNNUE1nMGxWWVJCblNJUWthSkVpeEZMSXk0bENDVDJobTBzRUFnRUpURHJxYjRnSjJKWW96U1VLVmVoVXBYcWJOclorWmhlamIrNXJIckd6Y2NMUWhKU011NDhlUExpemEvS3pRbk1DRUt3RUtGSllZR3lOeUsxbHRKVS9KNldtRnhVcUxzSW5YU3MzNHM0QUpuVE5QOUpWODFaVzA4YndveHdqTW9HZysxZ1BQeHdBTWVaa0JFRStWc3Vwc3hvOWNXUzVpdm5hU1VwRkpRMVRFYnRleUtqTUFMbFNRaDZSSzNnQ0NRSzNlUVU0amJFQzd1cS9BeUNESHVDQlFUc2NNYlZ1d01VQkJURFE5eVFGTTJ3eVJueUVTeEtzcUpHVTNSaUVEUFhMOURaNUY0SXBBdVNZQ0ZDazhJR1pWTUZDZE9rTHVFMUlLVkZsR2d4WW1uRU5lTkJDVlNKa25KRWorU01GRW1WSnIzcW1ES0l6R2xrU2JiZDlITGsxZngrM2UrVkNwbUtvaGdseVVCVnFreTVDcFdxVktjYVVHM1VsZnBva01iYXhOQXNMVnExYVU5R0lsT2Z2SmxNcHBqSlpESmJSanRhTldrL3J6V29NSUlhTldlc2F1dDAzeU1PMlB4SUk2TUJFOTFxZm9EeXhDU3dnQ09RS0hTVDZRVnVEaDVoRlhscHRyZ01qeUJLc3FJYUwxN0djZGtBNThBOGdDWS8zMlBMYndrbkNRQkFObXRDdzZOb0JyVklxemJ0T1VzV1U0MDVsQ3daMXREeDVwMW83VEVkSkJnU0dMNzc3QkVqbzk0YW85b2p0SzlidjUvaEFNOFJhNDZTamdtZGVMek5ETWhpVUhudTdRbUREQlorSVVGaVRjSm9IY2xJa1NwTittWkdjVGNINUljQnBjcVVSMFdvVktVNjZxWjN1c2VnRjNtbitiRmxyaXE5Qm1tblY3UGI3RzBSdENhc093S1FaRWdoNDg2REp5L2UvSjZKcnoycnZ6MTE4UGs4UHAvUDV5LzlOUEppcjlnSnd5bEtyVXk1Q3BXcVZFZmRWRk50aHJXZ1ZadjJaSVNZZXJlQm9KZEhLZWFlZzBKN1VCZXFSOFNPMWFuM3BGQU1LTHdJdFZTSisrRm1uaUhFc0ZFUVcrcGVrb001SHFmNTBseEJMTHY5ekNNQVpUUFExN245WDVrSEZYN2M2UTJKdmIrS1NJc1NMVVlzamJobXZKRUVXeExISkRYTVNLNUlrVlJwMHF1T0lLT0x6R2xrU2JiZDlITGt5VmVnTUJXNVVLd2tHV3dwVmFaY2hVcFZxcU9tajlwNXFsTlQzLy8xeHNpQVJDS1JTQUJBQlFEQWdFQWdFRjRrY0hQQTR5L2YybTdZR281QW90Q1ZTU0lhVGVWR0ZBQWx4MVJJWlJ2R2M1ajBKSWVvY3h6enBLdGNheWN4STFoU3lWKzYxL0dDd3V6QU1mUU13NkxUS2Q4b3NGQWNyTlZEUEllRnM2TEhGeGxOeXRpZURqYjhHT1FRYmhTSXRqMDJnSWc4T1ZiVWZnRi9HdGthQ3NNTVJ5QlI2RDU1bWNQakxiWWtJOEowd0p3WGYvTTFubzlkalRWZFdocGlENE1qa0NqMEdZWTZrWTFONVE0RUtnVWhXSWpRcE5DamJLb1NDTk9pWG9aYlZGOS96c0xkR1lHZ1ZiTXp3Snd6OCttcVUyc2pZMUJyY2psM2ZHL3NmejZxN29nMlkzNHZmcGRVaGUvQ1oySEg4eUFBL3hROEQzbXlBSUROQVZzQ0FKYlpueGkyY0g1czJjUkp3VmFPbTJXV3N0UEdaeFlaQTFLSVI3bXQzQXpBbXRrRlVJNWlsRGNBbTJRd29qRlhCNnIzSXNCeVZxNWwrdE5hYmN0ckYrUXJBUStsa2lVV3ppSEdLV2M1dTFGVWRNS01obnhpeG5BVTRsa2FBbm8vbmh1U2NFbkhyUTZRRWRvUjJGSVE0R0ZuWUhrZkJnSlR3Tmw0MnJRSDdkVjZJQkt4NEdESVBUU1BBdFlIY3VhL1V6ZVAxZXBaSk5hdE9BU3FGRVFrWUNXU2pLb21jdko0US9sWW1SNmJXaUVXV1ZJRkFOYUlUT1Z3MlpWSHpyNU16Qy8waS9EMWt3RVdWRC96VDliNkRHNjMyaUs0VXFDN1RQMlVOYm5rRVk4NjRYWWlLbFcrQlMzRlVLeEhEUVlvKzhCOXl6MXc0aDA3QmE0UWtrekwwTEdKR0lyclorY05YdUIzUHc2Y2VkcEFNVTZHelJRcURXN250QitjV2lzRnlvM1dDbVFqTDBNbVhvQnFOV1JGSVpJN2dEWGh0U2N0OExwQmZrSHNSUTZYcFZmSVJ2WkJVOHA4NUY0aEg4RUtueG1FWW11K0s2Y1lZM2dRZTErL1R6SkFJUkYxY0t2Tm1uMlEwTThhT1dzWGpUOWp2QkNyNTIxeHF0V1ZJNmFwTHBlaEtjeFp1VzlCV0xKM1FHcWY5SlRpdXZ2VTB3ZGdody84SUJSSVgxVnVOUXlzQnFTdFZOUFhaRHRMK05pdmN3aTFQZ0QvNU8wb3ltMkorNzhvbjByeGdBOU9DbGEwZ04wSkVQSFkvWVA0bmhJYXdiRUoySGxVblI5RGJ6ZldNUEF2eGtydEExNHg2anJBbVlVY2dSZlJsWm5uWXhzMnkrb3dMRHdrUzJWazNkZmpBQVVWSUpld0QwNnR6K0F1dzZwSXF4VGw0ZG1qb0dsWVFYRE1iMzFGSlBzKzY3ajlSTmdzSFlnd3dPY1l0dWZLNlZoQ0xNdWM0TkZUYnY5cEVRakZOak5yMExXQUpCM1hHSG00eDduQlJmWG1IUWhRMGJ6cW1PdFZUbnllUzZ4MUhiQy9hcmovWGUvN3FNT2w3TTBlVW5EUGdoeWlzRjhxSW9GYmhmRWdxeUQ0bzNvMks1UkxyTUpZQ2FDNWdySHd1cEROc1ZvWEZJMys5V1lQYTFsd3ZPcDkxZnZhbkdob21KaXA5N3VwTkhtT0greWIxK2hMSXBkZHIyMVJpQTEzSmliNzlrNnBUQjNkRkFvNzE0cFExeVJaYlRYTXlkQTdtUUU5UkZHaEwvT3hySGpkUm5vMFhkZjl5RWUwblhGZk9lcnpZK0RPM2ZpQldCRk1BbXFGYk9lZ2tBcVhUVm81ZlM2NnlPSVZsTENTZGNwNjh1ZTR5SmVsaFVQdFU2Vm0yam5OQVBxd1dhTm5udjF3N0pQNnhRWmF3U0lQbE9GTUVVR3V6UENCYjJkSlV5Z1k2UTl3cjZKVWpKcjZOWmNiRVl3TC9jeFpmZWM4MkxPc01LNDl4WDYyOFA4TnEzVERFY0lBUFp3d2hMdzU4aFBLazVKU29EQkpnaVRMRVN0UEE1MG03U3FZbU5TeDZGTnYwaVNqVTA0em1UYk5ZczRDcXpmSmZsbUMvWVpKZ05Cd0RBYUJpOGVCSFQ1SEFrNElRa0t1UkVSMmNlSENqU3RYWWhKZU1ONjhFZno0d2Zqekp4RWdnSlNjbkV5Z1VBd2xKWGRoMUp5RUMrY2hnZ1lwVGh4S3ZIaDJFaVJ5bGlTSnAyVHBLRG82VzJUSXNGV21URjZ5NUVEeTVFTUtGUEJXcUJCZmtSSUNCbFZvMWFwUmF0U3lVNmZPVnZYcStXalF3RmVUSm42YXRlTXdNZkZuMGNGZXAwNEJ1blRab2xzM3BFY1B2bDY5a0Q1OStDWk4ydWFVVTRST080MXIyalN1T2ZOMldyQkE2RTB5Wk1rTTRidzVod3NXbkM1YWNyaGt4ZW15Tlpzck50eXUydks0WnNkdHpaN0hPc3dHRXd1aGtSaU03VGc0RUM0ZW5CMW5pSkFRYm91ZEVCR1JIVnlJSVJMZWNENThJWDc4NFB6NVF3SUUyRWxPVHFRUlhIQVExNlU0aEM3Z2dDRUFnMFlBQndvS0RydUVsNitHcWJGTlBMV0dBeERBMisybVVTTk9pQmc3dDBTa1MzMW94ZU1ranJGbjJJSWpKempNU1VoT3Vra29FSlNpanlHZ3gySWEvOVpjMDNiK244K2dxa2dTMjhzNzU2Y2pVcDN6d1RyK1JQZTZTZXJsVWRUNWFldWdlL0FIZ0J6OUY0aW53RThxK0g0T3ZJVzM5RmJlV3J5L0JxTXZ2L0tTdXBpOUhrclZlZkc1WjRJYXZmanlXeStwNHNWWHloZVZUNW54SXEvemJ2YmpvcVhYMVplMGhqMEFZRk1RWnMyQmtBZ0ZJR0Z3eEhZTkI5WGRhbXdyM3M3L0NJZmdZWmlmaFQ5Z2ExMHl3dHpkWlkvaGNuZVRZYS9raXo4S0NCb3JoRlo0ZzFsWEJHR1dLQTc1MkVsSWQ5YUxLNFNGTmRWMzI5Ykc3UklJS1U0R0V2aGpyOExVMXdqQTIzczlCbWdiR2pROTdvVUt3cWlPdnlQWkVSSUNLSXpBNldUcFdRd1Y2b0psZTNWVGxqNVR5UEtPam00TmJ2T2cvVDlHVmZ4TkE5aEZoUURTdy9mUmpwQ0YyVzhPQTY4aUN5VCtmMkgvREc4QzZlK20xeC9JSTg3OU5BMzVyd0FBNjhRV0FZZ2xUVEFzWUFDRXFlTis2bXkzd1lvQTRGK2pOb1djTlM4T2lhalFRUDd5TUZhd0lqUVJnU1VNTEkwUTduMVJBWDZSRjhZS0lJSlVvWjN5Z0MrUTJRb3NDa3RPNWx1TUhHVWFFM2VMZThWajBocXBXQXBJRWFsT2FwRzZyZFcrN3FSQUZjQ2VZaWtBNEJQVHNMaC93VVdmT2J4OVI2VThxZkE0U0tuNWc3WUNYQVNRQ1FCWU4za0EvLzFOMWYvazZTLzBZLzFvQnI3NEdYeHgrMk5mMHUrLzdndnFDL0x6ejBFZjlPUkJxam4xUGdMb1pROGIrMVowYzhnTi9sLzJEV2ZObWZLcFgxMDM3ejJMeG4zbHRCWFRiRTVaOElQdmZHL0dKb1NEeTQ2QU14WTJEZ0VoRVRFSkdTVU1Ub1dncGtjeE1ESjcyNFIzL2VIMThTQ0NTNElreVhReVpNcVNyMENoSXNVTWF0U3AxNkJKTXlNVE00dE9iL25OVzM3eXZ2LzUyT2MrOFlYZi9Uc3UzTExNZVQ5YmRYdDJjTmV2WHZMeWFQakZEVStOZ1JjTnVPQjFyM25ETEJJR1J5TlFHRHhPeWptb1ZJT0xoNitVR0F3QWtvUDh3Sk9PaGhiSkJOVXZocFVOTFpxRFU2SjBLVktseWJPYlhnNnRFaFZLbGFsUzdsdVYyclZvMWNhcVZnZHZuYU1RQ2N1V1hISFY1Y2k0V1VRbVVtVTBNTUFtdGdRc0JTenRGM1JiQkJld0ZJQXc1bDQxaWpjYkJtUXA2eTNBRU50ODJkQWt3anhuejdQNzhWVVVEQi9WbXVBZCt4NTZjUCsrdlh2R1JrZUdoMVlzWDdaMHllakk4T0tiRnkxY01EUTRNSC9lM0RteisvdDZlN3E3T2p2YTIzS3RMZGxNT3BWc2JtcmNnV0EwN1BjZWZlVGhoN3FkZHF2WnVQK3VkRzIxbHNUQVArZno2ZHIxbW9wKzBMSjFURWdnUzZDdXZDNW95QWl1YjAxM1lQTUxiWXpUYk9EQVRYNVlFaVl5Y3BVNUlWY1BmSkRsSitvT3Vkc3ZMT1V5Q0hBMGVwU2hSZDRkdUg0S2dFcE1FT1daR2I1RUZjTWpWSmtCVUJVQlJaa0EyWktOUnNBTjErMTB4Szh0aTVMdnU5Q1FPY1p3eG9idFZKWVNOWVNGSTMvZXp3aUxKZFFFbFZBVnFiRmZWajdHRllLVXdpTDJNOWNTZGdObThMSGNzQUlsdjN0K3BUemlrZ2pTOExobnBSQTR5RHBiTzdCY2VraExJUnR5cnNvM2hPRmJpVTI5RmdtS1k1SjgyeFJkOHF5bHNGV2tFSC9iYW44bG5EdjNaeTVlNERWR2laM09RUkRCRDQ2NFhuV1Rtb0ZEUjUydVhKa3psZnlDUk4wakZVTGVxWlZMTlFFWG1WRWxEb3RaTk9maXpRNFJMYmkwSzNWZlFpdU9LT0VTTUZUdjEzVHZpNkNWeVU3V3hNbUtXM1VidERtbkkxN3lYM0hjbndqZ29mb1U0bWFTVWxMbklQb2Qwdzh5djY2b1dJTWRTaUdQVXYydGdtQTRFZGExMEZybnRRbS9lbHRoZnd1aEFIV0tzK0pzLzN6cXRUeFNmY1pkV3ZNQmtFa28yT1dkNWg4VnhrbDF3UTB0V3FmWHhqbmJYVHdEdzVvbVdaNXFkdkhJRGJLWXh5Zzk3MHBKdnpBejhuMzVPTFJrZlNiZERUcFpnTk05bFFKbTJpVTMvSDBuZ3h2SDI5ZEFlWTJRRFF2eFo0elNocFFiaEFqQm13VmJJN0Y3SXZKN2tpTjFGSkdXTnVBbjB6TUV5UmwwaDJOMTdKQ0tpZ0NQS2Z5OW5ITk90enduSXp3bWd1dlpaL1RNQmNRbEhBZnc1RXhIRHNYR3VGdVNlbzN5Q0puWlJiM1c3VWYzYU5aNzNFWUs3a09TbFZKc3dZWXlKQ3RjR00xR3JqOThjbkhoa0ZtdTdQZE93bjFXelIwaHhUblJVOGFCSm14cUg5d1FJSWMvZlVXQkhqOHFySVNqYk8yaFBXN2xSSWFvREpwS3A2V3JWSGIwb2w1TG5LTHlGajJUSGdteTk2QXBaNi9scTFpTlBZOHZ3REt6NWdzK0UvQ1pJQ1B3Y2FjcWNuUmlyMVJ6UHNuQ2dRVmFnNVVNcktHSjZ5NCt5UFlaSTd5aktUSktTVU40b1VUN0dUZGl4TzBEa2ZjVFVkbWthQnpxUGJpNVNpS2ZKYUpEREtZMVpsMTJ1MVJBT2t3U3A3ekhuNlFrYWlwTkxyNkUwcEhnbUlRME8zeEJuV1N5WTIwY3VIMnpXWXhOUTN3Mm1Gd1A4eGs1Y0tlRHNkVWFrS2xMSE5KRzhzNXh6eWhOdHRFQmlSRE5Rc2NDbDJ2MlpBbjFDaXR4TUVqTE13RzlwMWREdGRxaXdKVE5DZkxTcVJTMEF0VnVxUVBJc1FDUlpJbTh4NjZJTndwVENNSkMydllIck5NV013NVR4SjRWaTRIZ1JSb2tpZ0ZLUFRwbjQ1SllneHFoMGJvcWd1SFA2SWdrUVRLVlBwOUJtQ3R5U09KZDZieUUwbFExZG5rdGxjaUdVbXBRTzl0Qm42QUJSQnZZYmgvb1hhcG5DQzc1R0dJeGw4VytaWk9qb0hVaHU3TkMyNVVKb0xkb3ZDMVZvQWkyRkFYcCtNNE4xRHlBelVVamVTdjV3RzdaYmY5RWNUNmpNYnNKMUJwWS9KdG9sN04wanBRaGdMaGNZZlllVVoyQlhxR1VIODVROFJSdHoyZlFkbnpubGxCMThkQ0RNM0JNMFJWbUxYR1BGVlJqRWRRaExQOURpSnZwTnpvVUF2ZWc5WkFMZklqVFZiNGV0NXZQTTlBVVZDMTFKWUJNeUVwSm9MYXdIVnMzQTBDTkQwY2cyL3huWEpOK0lKVzRBS2YxR1NVYTNWQmN1TXJYbFVZVHVnWm9PelBmV0tSdWM4cVlNbWxPTUt3bDd4MGtLdHN3bGYyWlJzcmoxaGcyeXpxQmFQbEFhTWxrUkM3ekc0V2FIYzhBQnJseTBtRFZnUGhLZzYwS0lHc2xuMUZGUUdvQkhZMVRHdjlLZ0pwM1ZvbzNPQkl1QTQ4NW9yaDBjME5HMkxYNnlTQTlzR2NCYW4yUWhvYmduaUo2RmV0dUtTSFhMcDVlY04xRmkxbzNNZ01tS2R3MElyRmhqODFLaVVMRHZSSkRJNUtTVWxLQUZJS3hWekN1Z1V4WHBHZ1pmQWdQRUU5ME5lekt6cHh2SGJQVFZxMmRPYXE4NDJFTjl1eVR6SzJGWXQrV2RRWkRlNFViZUIxOHN3dmxRVUNpRnJiTCt5QzdXcWx6Wk9VYjJWcFlRWnUxbVBVa1QyWHk3MjZOajBncFVtb0VXSWVyL0ZKa2drZ2JBQUw0RGgvMGxvNUpEQk1DN2tnMER0elBvZ0YwSzdMV0xYUjA2UEVOMG9vSEgxbHVlSmtRRFBJV1U2TVpPNkxhMnNndW5GNTA4QzJsWUdaUGxjeDJYSjF0dVhGYnJlNTFDSVVXU2hiNGZvajZMZ0djbWxnK1VDaVNpeGNIOXJKNlRUSmRBQzI0QXBHYnNhNWhhL05JcitoOUllYVhJQ2ladThDNEpMeldUN2dLWVQ3NjM5K0FBakxscHBkWEFMYm10L3pjZFo4bmZJL3N3WE5iWmR3OW1SMVNPN0lmZ1pLQy80TUN3cEN3NXNEMWo0MHdJdWJkdHBCTmNzVkhtdVVQdmhha3N4TTlGOEJMa3NRMzZNL0JPSkFRdDhUQkJTVWJTb2p3SzMyRVliZVFyenVZR2E5bldGaE9LVGxRQnc5Q0ZqOWpURzRKM05nRHZldUFnMVVPaGI0S0FwOXBIZ2FNSktiMFNsb0w3RG9kSHNManB0WGhrdk9hYW9lMENIakRVNnRrS0NCNDJnWkp6UkRjUG8yeE5lSnJaRHhjWGVWM1YyOEp3azBISmhVMDhMdEdEUU1xS09QM1RHb0FJNlluYkVrUndEUmszTzRraTYxSW5xVDgxMnhLYmlpb0JNR0U1RExwTUtyaU9wb3ZGTHRiSWU5eHFNcS9TVFlzeTBaUUY1eWFaYXZwL2ErSDd1YkRucFNzaUJ3SkZhZ0JNaTd3VldjN1VIcWxtdzNmY0x2dm1uVlJTRllSUUVuZ3huSHZ1eDhRMUNWN0FJQXVBSURkQUgxQStMd2crZ0hnUDRDOVFMZ0JBTmFldk9Ud29xTUhVb05nbVZtRXlESTdMcnhMSERYWEVrN1pBTUk5ek9iR3lDR0RiazZHNVVnblRwUGMzK2paUU1qWUdVeXVOWGcrTS9UaWJJMmNCeGdKd2tiMGJnaTRmWmY1QUJDV1Q3QkRTTThZZVMvSjhubzRJc3hRWWs1MXdaS200NENqdzZwVGZRalhqVUx2OWVqUE9WS0ozUGhTMmlJZnVsQUs2c01MdXpZNU9uL2JIemhaRE4yR2FQaDQ2NlpMVVVaRW1XSjNYUkcrOEErdjVZT09sRklNUkZCNCtMald5dVN1U09lcDNxclBXck5Cb1J2R0RXYmdxY3U5NzE1a1h6MkJFTUZVWlhmaHZMOVVEL091bTY0d3o4MUlrc1NYdlp1SU9xY1lSQ3B0K0RVaWdzdUUzUTdidmc4ejlxRXpmOG1mZUhGbjU1c0pSVXVMWXhRM2ZNSFp1Tzd2aGs4TTA5MVF4TEJaMVNlMmlRTlYwZGpFdUNGVGJueWplYXFOV3REVU9icUplSnNCdW5JUTdQS1dxdkhQUEZ4RVhUTUtSamZBRGMrTTliNzVXaXRLZU4yVFR3UE1iMFBBOXEyRlVVR1NhTGhzbGpEQVVBTU1MZEtZUUhWamN3cGdZS293YVVRQzE2cnJoeEJEUlUvYVpnYkVvVXMrQTEwVHhrc25rU0xqWmF5eVJhK1BoS0tOakJUOExvU3FycUJHaXFHU1JpRjVUQkM3aDUzQ2lvZUY0V0ZNVjF6SzVqRFBvYmpIZ1A1YTlzQkREMWlPODRXY0w5NENvNUVkY0lrSGxOZkp0Zm1tQUV0K0FwMUphdHc3djVMeGJTVTNtZUtDV3MxM2NvZFFVWWxKVnYrOHRtdXJBR29FMW5wTWhaZXhUTG9QTDBrZzdVZXkyTUxFdXZNMHk0NUtsd0dsV3hBaG5IZk5qWmFXTmNNNnJKYk1pbWkwK3N6djlCQnFPdXRmUFZFakhqSWJOZDVwYWFObWJIM0ZMSnZpMXRsT3hOc290ZGlPd1Q5bmVQTzcrZVNHRkZUejBUYWQ5WWRtQS9wSjhxRmE1Z3NmYW9pc3c2MUFudDhPdmorMjQyV0szUlZyK2N5T0NHVFhUWjdacTN5SEpRTFIrcWZ1U2JnUGw0VW9Vbm5GTXFsdUg5QVA4UmlPMWthbHN4ZWVIWG5rdU5JZTkrNjA2emloMXM4T0s4NmVrTXI2cXNCczhydVVxNnhGSDBnVWZWc09ZYW4zV1N0QVJmN0Y1MHY2d2R1S2IwWXYyYnNwMnZDd1NxRmFNQXJySUx2WVYwcXgvVHM2Y0Q5L1Iwdm1iN3ErVWo0UUpESGZMd3FhMUwyWVNhS2U2b2NXWFQ2RWgrVnd1YVJ5SHNwTHRpVU1lZnBKUlVZSXZkT3A1WUYrL01oZ0JCMnBmd0dqa0tjY2Yrd1NJK0JWek9YTEdnMWN4VzREVmY5SE9hYUhpU3MwL1IzZGZTaThoZEZ4WWg3TXdsRi9qeWh3RGFnRi9DZTJ6MGh3d0Y0WDVKYkRzRkp1QXdNME5xdGpzR01EQ1Y2R0sxOWhqVUFEYlJON3lHZGhPaDh1d0hMMzBHenF5bG1jdjdhSWc3UW9selBuTHdyYmpjTnYzNlhLYUZaejRpOFBWSGhlUTNvUXBhcUxKREkzU0RrRVhMSE1DSlRaYVBLeWZRVFVXcjg2cUhjVzZaVGU1b003dmF0TkRYa0ZsY2tVUDZHU1VRaFZXaXRGMlc3MTlmUE9aSGU3ZzhXcjdGbTI0eThoSGtUbVJnVjd2alBSWFBxNGREODBhMGFaZzQzZkJWNXRXdnZJNkFCWU9nZkd1dGk4aS9rcXhRdUxFR29HMW81ZlRtbTZuc1dacmRsdUUyYnIwTGdrZFNoN0YxTVM1cEQwRFpEdzhVaXRXS0ZtdXN4MkgyMXhEL2JtN3h4czhPSDFsaVlKU1Z3NFl1andoeFMzMEJ3MjVCN2FDYkd0Z0haVUxJbTZ1ZWF0eGV5cHJWa3ErbEZuQm1SVkFkMm9VVDVDVjZQTGtYWDRrYUtiZGdUbUZoamVzby9LakM4SW1sZ2JMeXJHSzM4UzdKanF0MUU1YUNNaVhvd2ErVVBneTNiSjU2ZG9ISWd4UFBnYndKcmRXdGxPR0o3TUNOKzA1aTZWN1VtamlqaFNtSS9lb2RYakkyV3hRSGphbWZWT1NQeW5XRHQ1OGJveTh5dkxONHE5M0pocEw1cFdCblJHNmxhYTFwRVY1bS91SUFwUk43UlhuVGpJcm1uQTJzSGtacEdjRzZ5czZaZVdYejZkOG5UVGZ0WmhRT2JhQlhtTFZNVnFaa2dOREZnRGk2WGxUWW05Y1UyV1lqcHpTU0ZBU0J0cXFzU29saVVQS1VmYkFEMStwaWJXWjV5YVl6aS9mbVdzSFJYaWNqLzlOcDBaemZpWnRKMzExMWVkZ2ZBdFg4VyttbXYyNTFkZkV3RkF0cUc4dHoyeUR6TGlEdHZhYmVyVytKcU5iaEN4dFNnck02cTRzbFRKUzQxeGFDcEJHaHBwRHJyaVFRV1Y3TmdkajRGNmhTVWptb0xTQnN0WlRkdmRmaEFZbnJCalVpem0rZ3dWdTh6cWhzV2IzeC9GKzVYRVVEVVRRWFFDeHdkSHh5NXZpNllIbnMyOFVpSmgwbjd4SVdDMzVsMnNHVlFxU0xIZjFDTjdnQ1FLa2VHZ1I4YVRXcVcvQmxmNUtDQVFnVG11TEN4TXpSampMSXNSNFFnM1ZqbzYrYXZYdG1zQ0pvWk1Pa2NiekYxS09IR0Q3Wkd5a2xjV014c2VpRHNTbVV3Q1NSYnhNK09NVllneEtnd3ZSNVpOTUNSNDFPUXVIc3p1UTErYTcrdWYzZ01lUDNHUkdYSE0wR09kYkdoZmY3eklhUkVCK094dlRoMDk4QnMzZi9EQVkzcG9EeXJRVXU2VEVIeVVoNWR0Y2ljK09DaFFGamVGK1JEejR0dnFkRDlGdE9DaUEya2ZJSHZlazJQTFJmdEFPOGR4WXU0ZTBMaXo3V0J5eSt3RHhYNlpHdXJaYWJydXpHeldvTyttQytaRmtuR3NLVHVMek5IQ0pDNUg4Z1V6RnM1M1dyQlZNZ0szSWxPQkZML0JFUVdtOWpUbWNSOFVFazBMSi9RRU1EZmdQSFRaQ3FxV0Yvb0tlZXY0VVI0cUdWVVM1enhCME5meXJRZG5UOHdmZEVhTHRwY2ozSmg0RmEvR1Q2WWM1WnVBaTJEanV3YytJYituT0k3dzZNYXFPK0N2S2EwanphZWY0RHFRb2VVSUFrZGttNXU1blBPN1ptd1R6QUE1VlVmeG91UzJHRkFJTUFoQTFTK2ZZWVZJcFBjWGlGTEZDam1nZU9Fd0FVZERJSHc2MFBncEpORDJPRlJGYndJTUVheGhwS1dXNzJYN2xtdzhPWVdPRncyZFpzbjJkTnY4SnArZkZJNFpobVQ5d1pjWmE5Z1N1QUJUcnU4aHc1azBtZUNqN1NzZTlkS2dnSlBSUmdVc2VVVkhhayt4eDhNUTFGR0RoTXFhdWxtblBMbkF0RFlBQ1M5T1c2SmV4ZTFGKzR3OXZKa3o1VXgrcWdXODVqa3h3enc1d1dBVzVtSFp5ZnpPUmJOTXpDT2M1amRWcGhac1Vwc2UrcEdnUnB4bVo0K1o4OWk5cE8zeHhoZzVSaCsvNGJVQ2pFcGg2ME9QMS9HV1pyV29yaTdhWld1UWkrTFpKd1lwMGJOTWVmWmh3eDQ5OWluNkZKY0FLNERtQUdUSWlGV0p4RFR6d2xIZnpmemF2UVlkNHlZTXlEU1lQQ0xObUpDenVGRmJwbzVFdWlpUVpKbVFsckl6a0V4QkdtS3AyTFRqaWtpUHNLZlB2RjJKZEQ0djFFL3MyZTI2c3hnQ3J1Q0I2TXlaTGJzSVAyVGQ5dW5NN3Jzc3RQMkg2RkJnVWxPQjYwQy96WTRxM1F5MHBybmNBUzdKWk04MTJ5WWRKWkw0NGdJRE51NDYyWVJhVHp5NUhLcTdManhqRk9jYnhhWFpwQjByYlpiVVBUT2IvN3F4a2ZUUE9nWi9kS0tSZ0d6N2JmSXNvUTBEeHYzejk4M0xONFlvdm9hYm1OWjJuak9LSG5aOXNSZFRHakpxeElPWU1pZG5Kd1JaRHBrVDIycHBrZElVTlhGU0JoWEtIR3VCaCtobDMrajViU3IyWE1PN1NCM1ZLYVgyQmpyT01tMTRxK1JzT0dCSHN3WUZOcitrWUx6cUFNMDNuakI5OUdqcWprYUR4TWZPYU5yVzZFOVZNbEJpbFRWeGNXUmlBSmV2L1ArVDRhNE5iWXFFc2tkc1M0YTRyVktMS1FKTkJKUUZiU3JmanRCbU1vRVVLU3ZqZkFsQWxZVGpTMFJoMU5IVXRNV0hXNEZuMzBZVTBJNEk5QVBVOXJ3dHVOK2JlbmxTY3RpRVRSWW00ZzRqN3Q0QUpKR29jZW9rT1JnUU04ejBmSDlOTExhU1FSRThXY0M0RmZrYXNDYlpoWDZrNHNTYkdYTk5MZEl2bVFIT0JHb0dWNHRnTkswczkzeGZBdnJpN2VtTUFoYVVnY0dJeXlmZmVYU3BiSGc5L2Q4bTk1dTgvdCtUdTcvdCs3YTRUeC9zby9lNU5Qd3pzcHZLUnJOVGoxenAvay9iL3pYMm9FLy8vMlNXZStOcXZnbVJkVTBhS2p3Ukl2MTZwRTVGVWVuemIzbzc1QWpnSEVPa0lGOStHWEk5ZkVOWUtIOWNSa1B5cVExR2hQWFMrTExHbm1YMmVHNTlrNVRadXlyRlhNOURtVDdLbDRMbW1SellZTGk1UjJmRGtzS0liZkM1cmt4Z0FEYjZSMnVUZmVvMS9KYUpQNFoydFFidjc1aWJ1Rzl2UWErb00rWGF1aUthSFpzOTFySXlRVytyQm1Jb2d2NFlFemgzMTlmZHQ2ZWdyODY1ZFdWNTY0ckorSlNLK0c3aVUrSWViai9lTHhmSTloRlhPdkV4Y1ZkTkM5NVN4eDBwOUkvYVV6MmFWWXhYdmFxNWE5amltNzJtU2Nic0F6MkxhME9PYnIwdkNROVlIZGhBcExsWGEvV011b3crYy8rcVZ2MER5cU1wWExKbWZFTFg4RWFEYnUxeHYrRVd0SkJ2b29UMGEra1cyT2xtNDJZM0FrUm1EUVlYNlByalpXdjkycEprVUJOaVg2Z28yZExoZThZakVRTzF3eXFjdi9QMmoydWk1SDJQeXl0T2QzSk9BTTd1MUUyMi9GcW5mVVJyZHZiMDRpN29YNE5EcnlmSkxSb3VESTdhbXJ2VnE5dys3YXAwMTRqRkZ4cXhOL2VxVjdyODJhbWFjNzEyNVVDd3VVZFg2K2lsQWlsa3ZzV3VHQWhWcW8yTytWT0srZFdDZlFjWjdTcUMrT3E5L3JyTVBJTXp1TVNhN0tHMkZqTmdpTGNrMy8rbzVWdEROMUZ4RGpScHNpeE0zalp3eXdTa0NzSXJ4QkdsbWV4S091eVhTcXdYMUl3V2pLblVhTlNyeHY3bXpxTnVUbFVVVlpxMDNjbGErdy9MZEJPNlc4NXNVYnRJS0lZVktMNkg3SGhXVXJPcjRDRnFaUER4bSsvV2g1UlBIcVg0TFJOeUlnalBGMGVVbERJVHRIT2VxcmJ1bi9WVGlmVUt3V2lobUlwQW8xNE4vcC9nU3F6ZzdsdWowcjdXS0tONk9DUHhsNFhMQjFCYndLRUd2WXdxeXpVYk83bk5xdnJIbTd0b2ZxQk0wZExuZHF1dmRFTEI4bUI1bjF6UFdPamE1SkFxU0VRclhkQ0gzUERld24yaCt3b0phL1dTd3NZaEs5TWpXc2wwNjdvdDNBRkRzbFhuODdkU2hpUm52dm1hNkJPdjhuUU9tSFVRVFJ3dlhXOS9ENnJRY1MwMlhqMzNEYkkvdnorZlhJYnVTcFZ2VnF2SDFYZk52WHV1bWhnM1ZteStyUWh5alY5eVhuUmEyYjJsTGRhL2pIOGJiYVV0N042YTRQaWxUWmMzbWJsakpib3l6b3Zjb3U4dXovdVBJTkR6ODg0Uk9qNndXMjEwdHlPMG9yRlVvUFhYTlFiazlaSlhHVmtyb0c2Wk15OVhVUExhMHo2clNncWxnWEtsYlZCYnE0MHFjWDkzL3QwUGNadnNrVkpsdE0xT3liaHZLa3l0S09ZTS91VjBzVmdUVWVJQkZXRmcydVVPMERmekY5YldCWHRqRGp2U0lIbFYyODJrbkJsTC9iLzlOanE0d00rTUJndG5FUmVENWx6V1lEUzJHcTB2LzBDYm02UmExM3dINUEvcmt0eWZMZTNZMnM4cTlyeGIvS3VyR0lqbUhIcFEvc2E5RiszRzFqUmxObVlvUXc1WDA4WDJmdnJUUG1LU1pEeGRqTXZVcExKSHBEa2RCYmN4d1JUNkJ4R0NCc1F4MUtydFNUbXNlQUNaQngyd2tWM2pmTFRZMElKNmdraTdLZVFjWHVnTCt1YlFqNVhQYnREb3pCbXpvY3RSYSt6TjJreVF1d1liS1gzbmNvTzBXbGtRc0kvT0NYcmNmYjdQR0hKZnlmNFRQdjhPVmkydHNKeWJZemNiTXJnckJPWEdKUHUvT2htQkVKVWZqZ25pR0M2Sjd3Z0N1R0M4eHlWUkZOa1VuZDVBVnFIM0xIQXk4MXdrMHVSeUpXR2RiOGo3MklDMGxjN05iMnNnZk0yNmVVTzJZZmJ3KzFtS1NtWDBKbFBXWkd3MVVZYjZER2t5WlNsRGVzTnQxYlVYbDBaNW82RWZlNTBBV214c1FkMUJwTU1ZZEE0djlQdURRd0hYaUg5NkNiNXNNZWZTQm9NaFo4U2FNL3EvOUM2YkxDNU5HWTBwS2doWk8vMzJxVDBWVUFZcUhXREdxVmFKaDhUVkg5N04wUm5pa2FwZHlsMm5CSklaVkJxancxQ3JqZ0xhNldBelpuQjNlWUVob3NyTDVBWUlaMmEyY3hybmJML1dSaVVSZmRpMDRNeHMyNlRzRzFPbFl2L1BINGNBaFRvZ0orbWF1RUlsaWUwSUFySkxKTkRtYkhNb0UwcXIvNmlMbkNTajE0ZDhOSDVxYVZXOVFSQXRJb3UweTdOa3R1eEVYT0xVR2M2azIyRDkvVGMycy9qZm5SQWhKSVNoakF1KzZXMjE0RDFRTWZFQmU4bmdJK1FrZWNPbU5ILzcrU21kTVBHZGJpRTB5YXRndjdOdkdyOEtCYkN5SUFsMDJsb2NkRWU2MnV2Y2E3dXMyZGN1eWZLNXlDTDFzdkplZDYyekxyd1M4blI3bmRpaDJSV05CdmhTdDdvcFc0czNLR3Y5SjRJNG44ZlNLQ1B1WHFOQWVhTlJVQ1F2Tm1hVlRCQnVOeGpoTm5jd2l4b01HZFJ6cm04ekd1RDJ6U256WjBZYnVqSldreWxyTS9UWWQ5WWRFb3ltak4zWWJiM3JWcmJ3WEJ6cG9QV0p2QjNVZWM4NzE1KzVzYlhDS1pOcGtDSzQyRGZrYzQyRXdxN1JSWDZmUG8yNW91ZjVpZEdXZXQ4OHAydGtXcUt3aEZnSldITXRSck01WjV5MS82N1QzQ1JSNjFzeFg0elV1Nk1wRkRkbnJJYnVXZ2ZWemFuZjJGdEpLY3NuLzZyTXJTbkthRXphMCtjK0hDcG0rcnovZWNnVFJOKy8vYlZXWXdwM2hhR2MzbTlkTWp0UWh4TisyQ0dJb1NwSmZIc1F3Z1hqdmFSbFAzdEhDQUswK2RPODJwaFFHamVZYzlaOXVPNHVuYXcwVSt1d3BOU09xTFJOYmRYME5EdXNtQThPVlQwbmtEVjlKVkFGNEFGUm5NOHROalRodFNGWlRtOUEybDJCTkthMzVxbjJFeWRJVDJKMExvNzdvVG5Ra3phZC8yc3hFVVNLL3hwQXJicnVsQjFnSmozNWZWR1cyME1XYVZZOVd1Um0zVkl4cmViZjR0cCs1WktPeDVzaFBWTm5KSUV1UDhjVzhZc2NTaDNwYXBKUzlyUjg4UERPTExFR09qY1hFYis1YS8rbFpzbC9oRzlPZ3Z1YnZDZC9jWDJkVGhWS0tBMlY2Z3I1Snh3SThaeEFDRm9wOVd1dWF2TnQybFF6YWFMcUZHcXZHaFRTZ2t1UjhvYitzQllPZS9WZG91OUZGTTk1NnJoUThNT1llRk5BR1hpR2ZHWlVPYnBNbU9WTHZpVDUvbU00Q2JmVHJTNDhqdGk5Zi9uSkNkY3g2UzJ6TlBuSi9MeEh0TmpycWF0ZktES1M1TTF2WjFDdmZmNzY1MlNJVnArZVFib0F2cUFNR1Y2UHI1MzRkUGFOcHM5VTNpYzlUeEtWdG4rOFNBTXpIdGxZdnZ6aHJ5M3ZGNzVYWUhub3EyWExIdjdLL0c3QmU0VTFnNGYvV1ZXL1JpSHhDNzAvejZDT2Z2N2E1enJoL3B6L0pMMUs4d2FyYU9idDFsZjY1QTlDYzErWkkzK1U3d0dtVllUSm9oNlNrajFnMTVjYzJTNTVkOC9Md3VMWVBPQWVFSUFJQk00Z0w3b1dxMkwveVRjT3JQTGU1WUxVOE03Tzd0cytmQnNtVnZKOWNOVlVFWG5xNkNuU2dEc3JFUFdSUnNEWk1Kc24rK2FGVzZLWWhyR1U1Mm9TNVJnYTV2bVZGUXVWQzhzaGVZVlpGakFaMUZ2ajlRbkhIOUxYZUt5KzlpY1RFeXk2aTVXemVodWgrK3E3MXh4N0ZsSHRYTVNFSjZaaGhlU1E1RDV6L1VVVmk1U0xYSWxkdU95K3hFZk1DNUQwc1F6cHJpWFU5UmFuL1RPSnFrRXRXSGUyektOeWVpSis1bzdpMFZWWTI2enBYd0NseGNmU1pEOUM3NTEvcGN5WU12QzE0ekxKVmV4VVJoL1g0blZxVXBVSVhMZHJzQXVwVnRWdGZ1d1pyOWdMTVBJaVJNc1ZqcTlnYUp6R3JWSkNTY2Vtd1lqZlB4QUJubFRxUUZRZGpJNUhOb2UxQzVPMDFaS2lnWVdCTFlCZExOWWsvWmRleFJvVjRTQjJmTHcxYzBYQ0l2bXpxMHFyeUZLQlNqaVRrZm9ZWnZUbzd3c3JBTUhaZnpSQTU5WWpCWlc2UDEwK3ZzcGVqK0VlQlpyWjh1ZWQwODU2eXNDNUJEZncrMWN1RW9wb3JhWlVsOVlWR25Mc2pSQlpFeFBOSmdLQjFzWm1IbDZUYUF6WThHMWVHV0ZORzZLQ2MrUDFJbzB0cTlMSEtZWFVmWncvZjhXUk5ONzNCZmg1a2tnZXFmOFpXUzJZdmtzM0VqN3BmcWk3MW01b0pNZ0dJNlZOMU9GNk1vMi9yNGx1YmxBVFJ0NnBCa0JOOTVudFhZekgyVC9Qek1WK1llaTU4NXh1VFQxWVMvODJWN2VuTlZacmEzVlM2T0dCZ0MreXNJVitZM2VLWHIzQUUvQU8wczc1bDlZWTBwU0xHcWxVQmtpb0RSL3hWRHF0NTcvQTNhaysxVGR1THVHOWFXZlNBeHFYYjQ3UmxqV3E4WUNiREFtM1lCQUdPNitIT1FwNW1ITWRwakVZdTFONEQ2TlhCUGdJdG9saEErb21oY21uUmRCUk53c2dtdVVtZis4eUZJMklFSGxZYkcxWk1RekIwTERrTndIa0U3VFc0Znp1M0MweGh6VjNiMmw2MVpBbjZCbVNLZUZhS1NNSUdLbGtlQTl4NjRxOStYTmR2bjVvbVkyV3J3ejE5ZGN5L3RtTWZ3NjAzT0tVcndqMXpxNVY5M0FrODZ5WlJxUEZsclJZY3FJNXBQRzhqejNUYkRUVldDMnR2KzhxRnFzSUk3R2haeXMrK1QxTFhUUDN5NC96eUxjYWJUN043ZEFFM2RUdGliak1venlrVm9LZUFHWTJ4cUc2czJLSWU3UkphZzNrVE9vTVpjRDhiblZFSnFZRjRWckhhNkw3aVRKcGtiTVhjMFRxT0d6S25WR2FEVTJJMW9XcHpVd2Y1QU5WWU0rZ215RTA3Z1JNTWgwV0lzWnlVVW1oaHVuWFdaTW01ZisvSGJ2czA4bURLck9yY2E1YXNHNWlEajdhSmJZNDBYbk9zRVpjVXF3YkR2L2xmckRiVWRXcHlYcUhhdGN4YlhUVFRnYmVKNzhlWEY1bjN6eUxaUEZ2ck9EZ25oT0JwL3ZIVGFXTFdoSDZUZG44M2ZSN3N0RXkvWDV2N3NyUUsxWFh2RjJOYVlQUk5xUnFEQmk0MGYvbjZ4UWwrTDVRN1laKzQzcGtFTjlUekFDWW1vR3VjVHhTaU9jdFlvQTNKaEJaeUtYVndqdWN2Qm81R0hScTFjaUtPTC9zdWdUNENHaG0rZ3c3SzhFS3h6dlN2UDR4QjlZSm1XVTdKeTgrSXBVNkRFQTEvNjRSUGMwSU5UNjNTeU1aR3dQdjM4ZVBzNjRDN0ZjTGF4dTBxYzZxNnQwUTZWRUNjRUxKY0tWYzJndUNJSTJxbFo5K3Uvbloxd2NsR0NOb2t3REh4cjRlUnFTSHZYenUxT3lmcEgvL3o3OWhCc3l6VDI5OWJWVTRkaGwxaVljUjVFbXZCTk5FbE5JMUFsb3ExekVVSmxGNlJOTE4wd0Q4OExmdjdwMCtDYjRPYkplcTJYTld3MXU5b0FvTklwL21KWHdwSy96bWg5MzVQZ1FQWlJhTlJOSk5QcFVmdk9mZU9ObGRoRkFvMmdxQVc4VkNRZGxXRjI3M0RaRDZhWk55Vm02TzdGbGZEYXJ5aXJ2RThtZlEzeTVMcEhmUkhBQzRlSmRFOHV2TXJUWGFHcVpESk9yVTgyc2FGd2pFWGZEcGp6Z2xVNGcvZFFNNEo2YTA0anovMVVMY2orVGYvTkZUaU5XWHl1djlIVUF3M0F2ZUJTTUgvQ0R1eXpTSFI5TUxmUStCVzhzRVF0RTJFRmdtRkFxSnBkWGZoL1N5ODNXT2V5ZTVMRmlIZ0tFcEozaGwvN1dCYjRGMXJsNU9Xd1hJUGpLWkJ4MXhvWEMxODl3ZHZ4L2l6dUZkWGpxQ1BJMVBWRjhDT0s5Nmo0ZE1kamtCZEtyaXRTSFU3bmdKM2QvM2Y3ei9KMWs4RXpUM3p4U05CYXBoK2I2eTFUVzByRnFNS29kYysxUzFGSDB5THFEQ0F2RHB2TGcvYlVFcXRmRmZwNnB4cHRsTCtLQ0RUc0IxMXgySmw0bzRMMXl2S2NtOVV1TVZZTWN2NlpRY2t1OVdPdXVPc2t1cmIrNGNQcFZQbnQvMTRac2JTQ2RPQmVVWTVnTzNBVWU2MFNMdncrQlNzYXBheXJlRUowcHNaZi8zV2hPZkZIem83b04renp6di8zbDhqTVZwcnN5OHdFbFdaU3FPNklSTWR1WGtUNDlJcFdvS3FDNitxMEd2Y1FrMUhzYWxrVHd4ZHNONzZ2aEhySXZBUDJZUlhaTGlOTDhySHNYZkxKbFMzTVd3dHpIY3ZEY2czK2ZtYm05VDl2NWJIMzljM0RqK3pMamwyZkVTMTZWdXZMdW9vSkRYMDhQajlDem1jVy91NWZCNnU0dGNoeHV4UnZSenl4VnQ4YkpvVmJPdW1SVXRZeHJ4eG5ETXcyRXp2TngzNTNUbnlPOTZkRDNzVy84bCs1eldiSjNzS1YzODJYTHl5dzNLVzNSZjRQb3ZQazIzTXFSY292dHl2WHluNWlOYys5R25pOERDeVdzQzlpa2pITlRlU3pNZmZGTmY3Y3djQ3ZFZWZOWkxlOGdsaG1GRzRQaWI0anROQ1JFS3VibnpKVjQxdW1tRC84Rk1XeitGdnRHQmQzQzBwdkpkMDRjelJUV2ErNWh4RVpkQTh4ZkZjNXJqSXV4ZEEreDR6N0xjeTgvMkNBNnBEZ0dIOEVQbG5wckRxc096dkljYjhVWkZYcTVtTjF3ZDVTTGpuNCtiUHhzdmNhcUlOVVJSby96VzJUYTlwWGpkdjlmM0ZrdU5XS3pvendxZ3FyeFNVWGFtZVFhWHBTeU1ZV1c2bDdCWW9aTEZuZUg3cjB3aG02b0NLbTdNaUdGR2FmSDZmMjdzS1dhWHBlVWwzUmoxQW9XVk5HT0dGd3hZZDBsSlFMSW4vcnF4dFRPbVNzSmQzQjUxaEJtenBSb1AyVmJJVmhSOW1yUkxWOWhYM050b1RURmpFVFduQituQ2s3bE9VMnZzOVNMWFplSWlrVHFmYUphZXZ3SkZ4YmxEcXZkM3ZyOURkVzcvKzZKRkFQci92MDdyMlE2alFmVFFlNkx6V1BQQmpnK3VkLzRRaEh3ZE52VWZkS1BzdG14WnRpcXJ5N0t5Z2E4WXh5c29iVjlHcXR0ajRDdGd0Yk9Hdml2cnFNN29NNnlPc2x0NVpaaC9rc3FxaHdmQUJyVTlKRXRyM0tiRmZSRlA0YzJTbTRQNTdmU3VxV1ZSN04vWFJTNXVjR25wcng1VHZRQ2UvOFVvUmVUcUhNakxEOFlyL3VhRzVIc251eDZSQVk5MmVieFBlTDNUelJLSldlNzNEdnM5SFk4Q3dPNE9yM3ZZNjJtbnBlYnBiczhkbXM4VXNYRVlub0NjY2dWRWo4UFFWNUNyQktyVUxJSUtsdTQ2ZTJjQnlJT1c2eVpiQ3JaaC9UOTFRNzY2UWRUcWNKV2JPaW82WDBKKzFGOWQzSUdvTzNRa0IxVWhJckxOdEpUMS9kZi82dGQ5UC9uOTA2K1hGY2twQndQbU9vVE82SFUrWEdjSWpId095TFJESHFXbkVDMHcrdWZKMUpLZ2dwRXdjalVSanVFYWZkYjB5ZjlMSWxvVVhNQ0R3TDhWTG5GWUM4VFU3cVZWK2lyUnJ5L3hXUytOTGQwMVJ5QkNVVEd2OTJiNVhWMUpaUDUvTlR2Z0hVZDFSN2ZEMjRXZkRpQ3BNMjNtMTNOeEptS3g5dWtycmxoRjd6QzZacnQ4KzFyZnRlMjRWZTRpOUhhMGFOVUoreFhMQi9XZlpmRXJ5cGN0WDdIaUh6OWw1TkxtQko3QVRIRThmdkl3ZGp2R2QzK0NZQWphVGtrbDMvejN3QlZqOHZNbXp2REFWYmFzQWdLRzFPZkFqSW1KMldFUFpzRk0ySVpiNUxkc1NMKzdCTXo1d3J2TjZScXhTRlRELytXN0FpRC9Udk9JV0pyOWs4dDU1WGgrMWFYMlU2cW5seE16RzJhUWNMdnpHWGFmdDBvT2NGV3ZFVjJacVFyQnREVU80RExLdkQ4ZkppVXZQK2Z0aEFma2lnR1FpbE5BanRCVVlxWDQvNmVGa3MrdUMwWEh6cWRLVzA3eU5rSlR6bnUyKy9SRzZESGdlbGFibTN6OWJVZDVYenE0MnRqWlk5cFNYeGtzZC83bWxzdG1IdkcrTzZYVWUySUJNemxTejhWeFQ4VUZraDJlUXlKKzN0Zi9HMkpDbGVIc2J6UDkwQmJSbkNhdTlBbXVjNlpQR0NSWHBIUERsTmM5U21ZejFQS1FuMXllYmgyaHZNcFF0ZmJJd3JwcU5MVEcxTmxsMmh4dnNHM3FhVjlMYmF3NStkYkdhdlFwTjFzSE95dTJ3SkxmNVZLK1VPbnBIVDJvb3h2NHFNb2RWV2dKSDdCTmdaSGVPdnRmZC9zdEtJTnJjblZTek54Q3VwUFFrQVAzNHlzVG5RTm10N1ZiWmErM1VOcFlnajVaSGpCc2tLSzBRUXR0enhkWFhweDhkY09EcnRKdkIzWXRYMzlHNmYxVFpZL2JWZlpFL29pSjdzVURMbHQ5dC9LWkRjMTVyL2RrZXVNYjR1Q3VWNDlaRVF5a24yUllNdG05UlFOL2wzV0dBQlhrRkw2SW9IZjhuNmR2QWtoR0x5aDdiZWd2aGM0VVNDb0ljUG5lcWFlWFh2Z2d3QWVkd3Qyd0k2NDVEWG5LMTIxSGhZQnlqVkswNk5LNC80OGFMdm9YVXkydDRTcGUva1Yyei9UWVdxcWozYkEyR2pHczdXamJvN0hZT21yV29DVVNQYk4ydUNWUnNXK0VTRFhyUnZ4K2NpU1pHdFg0ZmI1UktxVWQ5bm50VkJwKzlJeDBZbkVKYlVVYUtXVk5IY1hVSzh5MW5aUjdpbzlETFB5ZlBTeVhUQ1Z4MTc0bnFsbDQ5b2tiM2F3SUxLaHVQYUxXUFhYTnV6dTkydUhFT2FKNCtlajV2YStOcUY1RHhtUTBLSHR5eGpuajA2cDVCOWE5NGYzYXA2by9NVlVhdmYweldQSkE3aEo4S1llYzVlV1RBdmhNNmtWSjhzVXppSURNdktYVWI1QitKSlc1dDlKUm1mUW9UaCt0Wm4xNG9vcDF0TEd0ZUdaN1U5TzBtYzVseWRXYkF6WVhiZHgycCtwTy9DOHpTUVZHak8vQjN0bEQ3Tzg4M0ZrMk5xVldIcHBwV3BuRWsxbi9tcFpvVjZhSmRKSG1PN085UVZKU3YwaHRhN0NVNEp0eWNiZ3QvbWxEcmY0VVo4RVBnS1VnL0NjSS9nR0RKZldON0VrZSt3U2I5VHVYTjFrbTNDQmVDN0k1bnQ0Q29EQWxtaTRRMUROOFFYZHZBVmc0MjA3eDlmZkJJcmlvL3JzL0sxeGFWNlJzOXhzN1h6a29TQzNqUXltQm9BbmMwZk1HcEJoaHByUGV0dng5cnJkWHN6bWU0UUtnc0o4WVByMGFhYnVucWdBeE1RVFFEditOUGN3eGoyT3lNNmR1LzNmbm1qL0d2MTFrUFFJQmZOQmNDd0tUdzNVZ1M1d0ZyQUFkUnhWd1JnVzhxUUl1aDF0SEtsT2tyOXJZeTE4ZmFvd2lXMnNnNjdZR0wxakpaTUpVd29jcTRUdVZ5QjIvN1FLSzdYUWJvUEd3QnFMV1FEN1dRTDdYUUg2ellRMElJMzdvNisyZ2FBSDcxMjNkMzdjL1BEZGNLMElBaC91YkVYSzNDV3dIcDJFeVBPeWJIOXJZbWYwQjJQc2hBUE1zU0habWNldjRGc2Z1eGYzOXhmMnpWLy83RDRzWGtiZ1podGw4cXdZT3FJRUgxR0NmKzhFZkw5TnFNNStHelZmMm4yLytNRWUwbVVldFpjQmUvU0hvY2tZY2NKNzRCcng2ZFJnQW9EMDRCMDcwcWNob3pZTGtXb2I2NWE1djhtZVdKbW9tQUdwd21QSWZRQmdXNU84V2FqQUh2bzFkdi95aTQ4YjdiZndUUFozc3hBR3YvYWVvWVFBZ3ZsOUtFd0RzNlI2NDBmdjF3Ykh4UzlIK1Q5ODlyU3JOYnEzbk5MMWZIbHdBK0VSRE9JQWZoMXprd1JWSFdndVBUbUVmV0svLzNYdE43MGNlenFYYlJILy9zNkQzYjMrUXN6enNsTkprNzdkOUd4bHNUQ0hweHpJOHUrL1Q3Nzg0UXRXOHNvSDNRK2pKQkhDUjhrcjRSeUErZjZ1RE16NE1jallQOTdTaHY5SENucDhLZjNpR1VndmJnL2REdU5EeFNhSUFLTVQvMjFjWjhLRDhETDN4dVRoRmNXMmk0cDlWN2hYTFcwQlZIMXlIbDR0N1BMMi9sUXVvdXpoWDc0cndodjBha2JLbnA4OTdQTk83Rkh6am9pdVdsRk5lcytQL3NCYlAvMktuSGR6OHVtdnJQWlN4RmJMaXdWeHlEVW94cFJrM2wrLzh6TWVQaDVSMUdBY0E3c3JWKzQvcEFtSlgyNVZzaTRndkF3cXhXRFRhRUZKdXlEUTJFY25XWHFsS29wS3B1YW5SQURUQWhaTzA3WFpiS2prYmxuV3A3UjNZYUFOVFBiNHBHVGR6dVVPcWRZMVdpZThtRDNqb2NUMDZVeXdRQVVsQTIwWUJvS0psWFJBSkRNbE5rTVo3eVNvdFpFUWpRSS9FVWNsV2xkV09YVlJtQ2xlT2dyWVdWSTFCTDdtYis3MmUwZE5yc0wwQzRkWnMzb0VLaGF4dU5zbkJFYkZ4TWtTRVIrK1pqTFpIWWhKVlYzbXhveVZSYVVUMHFqb3ZyZWdjVmRSc1hqa21hRkZ0RWVKbGplUUZWUXBtVTA0UWNiQ0hqQXoxaVVJYXd2bE9Ya082TFI2a1hlb21YTW9qWlJOVjNmcXF4MzdIaDdmVWVnRFZDMStacUV3bHE2NjN6Y3k5M3E1NzQrcXVBcjB0dEJVcWYrSnRqRmlwYzBCYSt5bDVhOGNtN1l6TnJLTkErSVFGTzNwZjFmclZiZTFEU3BoTldSdG9IZUpOaGZzWFJlZXhxdnNGcVNmVTc1NkUxaXlyc25CWld4cFlhR1ltSVJLdldTN3o3T2cvN2k0Z2RtNEpEYVJjbWhqcksxTTZOL1JhY21PSmhHaGw5WTA0SEt4a2paL2NHdktDbkFydGR1d0lkSzFJUmloV3Rzdm9iNUhZV1ZhaENMNTdpWlpTOVNVcStEVEg4OTF1QUlqeWxWZW5OYTF0U2lHYkhTbjJ6WGxucDh1cWQ3bnFtUG1uQ3dYbXgyMVg4dVBIeHpnZkVJdEV5NTl0dDkrdXY3TFhkbFBveTVsNjcxbDRNQUoxbzVXb0tJRjJGKzZYWjFUdDYyTE41Z3V4V1dXbEV0TWt4UGZkdk54RnJZZ1IxMjFSbDJ2YXNvRDhlZzYzc0Y0dFE3bFFlR3hiUGVMTUNUaXFyMXdETCt2U0pmVjIrNk1YZlc5Y0VNUEswTC84N2tFaThZMnJiOVZEdCtQOUd5THY1Y0JXSjFvdTdjS2RFeFdlcjhqUDR3dkRTcyt6NkJ1UGFHS09ML0NtbGlTYTRieWlMdWcrbVJCUlJmQkFON0dTWjAyQzRYSDhlcGRXci9DQjhnYlVaVXBlU3M1eE5RRElPWVZBMUVtSWVpS1hXS1pSQTFWR1RDVHhvbU9vZ09qUURjZlgrejFybE95aG5Vd3RFUFppUURTbFNRMFhIT1Y1c2k5ZTZaM3E2OUJudEMyKzZ2UG9QdkMrNCswVmJUdDQvMS84d1hJeEc0Nm1FNHduMEhpMy9YQVFwaUxnQUZaZzBMajVLSCsxWEJySFFucGhUWjB2KzNPaklwKzZiMGdzNnVvU0U3cVZ3anUzdGVoOUo5Qk9YYy9Dd0R5Ly9hVW1GcWxGTE1tSDVsVTFSOWhSVXc0U2FJMzBxRkhXQW5tbVNscW8rYXR1RzRYc3NTMTV6ZjFTc3lsNWJaM2I0cEZYODdheUFjZG1jWit6b2VoenpvWEVkYVFTWmtvb0x2bVY0TG16dXg2dkV3VzdSVkNFdFd0M2RBVUszZkZpWjFhZGk2Vk9RWGNoNm16R3p6Mmh6amZNS1FxVGppajJ1MmFwamlUUHJhUkdKNzdhTmpUcGNkNmdQSkJXQVA5WHRhcGNXUDl4K2pMOGpkUFB6YS93cWlOdWZEQXc2M2JYS2tscm1zQWUrUVU4SmZ5ZkEydnFGK1JQM1luMTNlaGg1K3U1SHJiTVJJWXc5UEx0b1g4d09ZRzFrWGVDNGVhOVowMk0zYU1hdW56OWNueWF2WHI3TEVRUEhxK3FwaGlKSHkwSmdKZ0F5c3pvbXozVGxsWUJDZGJJdlJPY1VlTGdOWkx0TE9wRnByWDA0V0tPZ1Y1QWxpdzlleDJiTTJ3Zm5ZK25Odk1WL2l2dS9oT3p4RkhWYmxKRFdhTko2U1JsdVZHOXNWcTB4clZFWFRmVUtCdU1xNmdQUVhkVXMxSXlWdFN3Sld4dmhkK2luWFE5SUM1S2h4SExNdDRmbkpvc3V0WU10cVhBTEJ2blFGUUJtSE9XZGxWcitEVFB4bElnZDJHTXE4bGhQNDhSRFhPdUVRTVppODkrWWljU2t0Z0pJTG5tTGg0T2gwTzBlTXF6ZG85YnlvZndtTzM3dWhQckpJZGNMNzJzRTV4OHpxaW9WWW1reFZGRmE1L2JsYW8zQUtnaC9rRU9BbVB1eDViRE5PUXExYklLd1VtSmhpWUhDM0NjbVpMdmtXRlZrUTVaZWpuRTljQi9zQ0lpNGxVMGtZNmV0UlVOYVh1b1FMeXRKME5veTJvTUNnckxpSkNkUVIzREJPZit5eFVDanZMZlFGYkVlYS9UbDcyU3VOT3VwbFQrbkJ0YVdncmx5ek5jUk94c2JYL1RGZEp5LzJneFBhM29VMkdwWWJDaEwydjVIMmF5SU5XTlFML3ptS3pZcVVDc3JWMmFzcmVYUkw3L2NsNGFUNjdTTVRBeEVmSkx3aE9oTmhYT0p1L3Awd04vdkNWTXFDenhPamZONWVMUkxPQ0tJYytNcjF4ZTZmQXdiRnNXNEw0YzI3bSthdG9BZEFUYnBsL04zUkpnYkIwbmZNMjZMZnVLa1BSc0RTRUEwVk1UamREWFk3SjRmNzgrWUYvUDQrc2hWK2hjbFpUR2Z5UFRtOTB1VktQUmNCaHV0SzVDS1dZZTlwZ2E4Y3VDcVJqaGNNbzV4Tmg0UWNZNkpSM2FrNVk0MW01U1JCNFdGRlV0c2lxQVVqVVNNQlo2N1BjTUlkQk1hMmljRko3VTdqMVdzZjFPYXlHY3F6RXpDM2lBV1VhNUNqV2FjM2l2MDdDU0pSSW1HRlBiaWQzT3I1V0N3TGYyKzRKMkxzYlUyVUZoVlN3VHJGcUR6SWM0Q21CTmpKRFdsVmJUYURRYTRtWWtYcGRza3lKM2RUVWVUMXhHdGxUSUp1Rk1PR25oT2xIS2toTkVHaEp6OUJsK2pBbERNQ29EUW1xWnpCV3lVVlNJUEhWYzYyUURaZzlQSE53RlpUREVrSWtsbWdRaVlMQlFrRDRIWTlWb3JLdGFBb1NMS0FGcE5jWlVTaG13SU8yc2xSV1ROaldtVmxCOGY0UlJ2dUZleHdvcVExWmtCYXZqaHVKaTNnb2R5ZkRKS3dMekFGRHZvaGFXaERSaUo5MmpUb3duOTM2dHV3VGkzSmxZbE10d09DeXQxNXZGMWFCbEFtWkE4Mm90T2RJR0N4MFdRSm9PeDYvM1kxblpvZmZubERsbzNiL0g5cjBTSURMbXdZT3VKYzlkYWYydFdSS0FMYTNEVjlwQkdMdG1idmEzcEM0YUo2MFI2WHFiR2E3UisvZVQvZDVRcW4rbzhvZFk5V0MrcHV5VjAxaGlDSHdjbzI0VXBWRjFIUjBTbXYxNEljcVVzTkJqcFlyYVhvcEJGNUphaDZjcU9rL0phRlhtcDhsazBKYU1naENrRkJ2UURQenJGcFF1QU9Jc2FZMnY5Mll3cDEwZ05GRXBjcmRoN3RhZU1MUnRUTWt4R3lVeFNWVmdGU21YWmFOUHN4c1krSVpwOEpHa3hwT2JBRjlOZDBhVzBQUHducnI4SGpDYkJDdDdwY3JkTnkrSDI4bTZRK3BYajQ4K1VNSEtDMkZOajJRM2VmKzNhUnFIdVJEK21iLzVTZWZ3OTRNYU1MQ2ZHVlpaQ1NmNlM0K0plL1BoQitTbUsxSmZPRFU2RTFaVXE1TXQ2dldjOXphT1U5VmxrZ3ZxNUl6aGVYcUxoWTNwOWRNUDc1by8vY1hoTEdlZkhlemFLODh6SlYxZjgvNTVpNnI2OWVRZlpYRDMxbDc0cE9iamVyUFpmUmszYzRmeC9MVXhlWWd0Yk03dXcvMXFvZTl6YllucCtUeU1CN2RXMDkvQmR5ekticXRlS0hrc0dseVFVRmJLeGQ3Tk5keGRFa1pBQUJBOGlsTVBHenZSU2dHQkVEellNWG5uVUZ6UlRIVVNnTlo3VlVUNmtlQWUyNXBxZjlRWDFmODRzV0RpSTlQSEViVTRaV3RMWUxQRVQ2VjBRTm05ZWw5aTBMUTlIZTk0UXZDbHVuSUVHaVJjUm1wUG1aUXBEUW5tRjZraEFBUHh2eDkvMzMvLzk4TEgvMXRTTktJZkFNQmErdzhaNUFGOFBHLzlzNkluK2U1c0RnR2dZQUFBRU1DL0g4Z2p0NnZyLzBhOVU3N1hYMEJvS0JWQ2VvN2czWVNOdDZ2VlE2V2Q0bi93bGVxOVFsWk5abTFJenkvMnl1Y0wvQW9JUnk0RHBmdU1RMzJ3Sk1yUDZDTFBVRGZoNnVlQmxscmhSZkFiOElONVc1ZVNWY2FwTytyYVBpK3hienJmWGF6bzdPZDgvN0xZMVE2Zy81NmwwcGVaQkFxby9yNHQ0Rjh5MytoaUNHZTRua0FqMCtYV1Vna3UvbXljZlYydnhFMFpEdnE3VCthVXRoT1V6VmY5T0pBVldBbUFyeTV2d0Q0bnpTT2ZlWTJkcFV0dDIrYUFmWjZxZDBObExzYzQrNGs0SldGdmY5UVRxdnRHTGVSalpoT0M5eFo1MWNMM3NJRDlRNVVqWmR1eDJ3V3FrS3B0RkdVSUxabEhMd3JaSVQ3RlVKY2lwQkQ4ZktFOXUrOC80aTBYOHR2YnZPWUUzQkNQamJIbEhqdG1JdGt4dmlzaTJvRXVmSnkwSVFZTnpEMjZvOCtLMGJGc2w0dlkvdUlKUUhZb2VOOCtXUVE2ZHdKUFMxaUp3ayt6MkZTMnB5ZTZyYzB0YlQzQjgxTGZoMlM3aGhmVW1yRnlMcTBFb21pSWI1MytZS1ZlNzVMTWRBd0RrSnNDYy8wU0NzVHN4VStZV20vS2V1ZksrV2pjc0Y3WlpGemJoVEVqM3BuNXl4VXRENVZXRHNzdWVDdGljL0MyTWRmSTU3ekk5cjJRSHVOU2ZMMjhKeWx6NWRrN0VuSVJQMHZ0WHd4dk8yRHJNdmFyeEdKRXE1WFhMTCtMRjlSeHdlbElkaE54MGJUSHRKb1JQUktVVGlueWxaSUU0RTlYbmFVVFFEZ294QjJNQXBBblNrTks1Sjd1NFN2QnRuTy9zbWUvM3QwMEF1YkovTUhmUitrOFpFY0Z5Z01BQk5DUWZyUTJGSXdEdFRzQitoOGNnOE1CQ0l6RG9TWUhBSmJCdHdiRTNYc2M2OTIvTk9EVXJqWWxHa2c3RjlKQWtVN1hJS0JZVzRNRDNwN2R6OUhNTXJzQ0FyQXI3MEkrZm9hYzNWZVE4TFg1UklKMlJqM01HdFZyWUNWRzB0QTZLTld3b2RyZU9wVmEvbmpYVTZ5SFdKeFp1eWJKNnU2Z1U0ZDR3MTdhekVKTW9WOHI0d0QreWtya29FWjkxRlpxNUhMeDlpWG9BdzgrSERBSU0ycHFXWER3em9mWFBOd2JzZzJmUis5azZ5S0ZnTHNISmtYOFFwZm1qVmNkWW1GU2dOeGVyMk9aWWdvRURaS0I5WDFtc21SS0VubHJJRFFOUVBsQVVEWXVsU2ZHV01jeGVJZWZlcU1JNnZCQzFheHc0OTV2SWJmd0JXSHd4VlV2VUl5V2p0VHdXMVRnK2NaVERiMTlqYXJwK2ZWVkVncDVmWDdzNDBLOE5qbnFyam4wdFkyMUZkTWI3WW9waVUxeFZXS1ZQeWF4eUtjazVsUk5pRzJFYlJ2Z1Vpa29UZzkxU1hTZ2JCSmNiUzB3YTZRQnBpUnFtVTFJcGFva0tpNVdNWkdOaXJwR1N1R1VSQ1pRcFRXcWhLK0tlYXFJcXdvNThRS2FQNVhoMGRGV2thbHhjRnZZL1BXM1FycjZ3OWRjMTNhbEptMjdyaXZ0Mmx3VmhWNUZJbHBrcGFvQkVWWjVZVmF4RUZYYUJOYS90cGpmeGRaZXp1dHcrRGMrSVAvSi80eXk0TnpncmdiSXdYMEVHYlZDWmFXd2xyU1NjajZPL0UwK0lCRmgwZDBpKzQ1djM3ZG1OWlhLOVRYd0d2OE1mUGJldEN4NlhMK0FwQ2xEVy9Iak5pSys3dnJxMVNzNDIxMjhiYkcvTXZpTWM1R281SmMzS21kZFoyOG83RVU3VnJDR0JQWjROdEw4OS90bFhGMGJJWW1OSXdCQkFRPT0pIGZvcm1hdChcXFwid29mZjJcXFwiKTt1bmljb2RlLXJhbmdlOnUrMDA/Pyx1KzAxMzEsdSswMTUyLTAxNTMsdSswMmJiLTAyYmMsdSswMmM2LHUrMDJkYSx1KzAyZGMsdSsyMDAwLTIwNmYsdSsyMDc0LHUrMjBhYyx1KzIxMjIsdSsyMTkxLHUrMjE5Myx1KzIyMTIsdSsyMjE1LHUrZmVmZix1K2ZmZmR9QGZvbnQtZmFjZXtmb250LWRpc3BsYXk6c3dhcDtmb250LWZhbWlseTpRdWlja3NhbmQ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6MzAwO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi94LWZvbnQtd29mZjI7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R01nQUJBQUFBQURJMEFCQUFBQUFBZFhBQUFESFRBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdsd2JuRlljaHpBR1lEOVRWRUZVSEFDRkFCRUlDb0dxSUlHR1ZndUVLQUFCTmdJa0E0aE1CQ0FGaFVJSElBd0hHMnBnUlFkaTJEZ0FhUEFaRmtXd2NRQUZtKzhUUmRrbW5VajIveWxCbXpHaGRlaGJaU0YwUjd1bzdoa1pDWkdUNmhucG9iWlRXeHk2Y09EaDBFZy85bzBGUitIQThzM0oxYjN0dzU5WG96Z2NDTndqWm10dHdDVnhYNGhMb3BFa1RhUlh0MFpJWTJJdDRqZjkyWHNDdk1STFV3ajJRbzBJa2hjeEtrWXE1aVF0Y2ZuaW1ycFowanFIdEduZ0pibC90RHF6aWlxZHF3QXpvUTBUTHg4Nk16cFg1dEk1VC96djk2OTc1cjRBb29zUkJESmZCYm1rV2dzSXRvcU5iRzJYSjlDa2VvYkhiZjN6QkJtb0dBMUk1YWd4R08xR1Rhb05FRlRNNjdJdW9uOUZYdnpmK2l1aXdRRUsvVy9haG1pYnorVmRFYlZWUjRZTitQZC9qY3pDVE83TG53V2dJcUZsNVFBbDIxWUIycDVLSkZsTDZKZjdaZUJ6ZnU0Y0ZKM3ErQU9DOFFWNjZ6b2JXd1loV3dEL1Y1c212RVhvekVtRVRXdnRLRzJUUEczaFdjcFFtOW5RT3ZSOEpGSVZnWkJkMm1iRmMrSTFmWVh2d05Ra1ppdnF5UDBlOTM4NnkxYmE5ZDN6QnFHTHF3QVgzWHB6YlRINit0Ylh6R2drQTJ1SmZReWVsZldlSlN2Z0MwSkZVRjFheE5kVFUySFRwU2o3bEpsL25lbXE3Kzl2U01rLzZKYWRHc3NxcmdHZWV0bmFOVlBMNHorZDdxeC9zZ3huRjJUNWVnSFNVV3lYN0FERFZNS3hveHowQmNodVh4aTJBc0NhdFRQeXZnT09OVE9ick9TY2NHdUNRbHpoRWJLQi92cnR6MWlySDhoc1puYTc5bkluaHkweVJFTENKeUxnV2Y4Ni8zQWdUREFBQUxwak5FZzNKTk5RWkxoc1pMb3lwRncxcGs0ZGN0aGg1S2lqeUFrbkVNSUJRcCt1Si9pbGtoaXB1Q1BIZWcrRzlscEZvUS9hK3hPS2M2SEZBeEIyenJwM296QVhhaUJ1eFZNOFZtQ2tXbVY3dHQ4M1VxbDZpNnh3eWFzd0NwVjkrY3pVNU9manJNckgvQjFiZHNTWks3bVNXL2EvdENtdktvSkVpaFlqVmlLUFByeW1LVkRrUC85ck1NTXNjeTJ3MEZMTHJMUFJEbnRkY3gwekt6TS9FNmlBcENqNkwvay9hS0EzQTI4T3lWeGFDNE9sVDVhZHVQTVBXZlpCMHZCa1J0bmNZQUdkaFN1V2JsbzI1MXJUOWVDT0NLTGdmYllHa3FCSjZWUXlhNEtUR0lIVWc1ZmhxUlNZRWpNSFJ4SUhJK2xKM0ZUenROMHBXaDdERERGUHB0b3B1TjQ0Si9BSWtnMVNlT3BjaTloUDBSVFFFaVdPd3p4TjAwWkhVK1VwUzFHRjhCWVBFRDNBQkxGMW5xTEZmQXRTSWRzNHRaUXJFSkN6OVRLdFoyVE1VVmhheEhPTFczaVlTdDBwb0VjWWdvU3g0N1ZEcWN5aGtna0ZQWUhkdk1TeDlWOSt0NzZOTFpxREIybTlZWWhtdG12NHowbDcxYURYL2hjek93UXV4cTZrMWxVQzdubW50Ry9QM1N6ektHUS9md1JVRC9jT01RaURJcFRnanh2dmIvUGJ3RTlzbEE2aWpMSVR4YmtHbHAybVhoZlUxTzVBL3lIZWFiUldJeklkV2pXWjJXMDk4UzNOSm14SVV4RDBKUzJJUXFoNy9ETE9WRlVZOUkvMDcxZHFKRnk0Z045U055UHNBcWtsSkdYUGFmZU0reGJGNXFJWWMvSUFCeG1sbTRCY0Irb1BPUnoxOUNNMm91aDJvR3RFTk4yQUpGckNWek80Tm9EM2V4V1NFS0c0c2pNRHRPVkpTZ1lMVjNvU2FMWWVlNk9yRTU5Sld0STdYcTZGTU5CNnBCYUR6bVNHN3g5UC9uY29BUUMwWU82NUFWLzhWcVI1cEM3TzBLSlJTVGlYTUhlYWp6dnE4ZkQ2VEVhdGRTZUVkQ3lKeU9QN0hTMEhOc2NqbjRFVUg3SVZ2NUI5TmNIdDZRK1F4cjVOZ0psRVlwQmJsN2lXRlRnMlN2c3ROTHBrMXdkMEVPQi9IS09QNTFvQWtLSGJrMGN4Z2FVU21FZHp2dlJFWGZYblVFcXhxR2dkeC8xcFVCbjZ5U1ViaUw4YmtJbENwT0MySEYvWTB4NXFweFRMNkxtbFVQYkZPSk1qWVFEZVlKSWNZQWh0S1ZxZnJGS0luZ21qT0k1ZXgrV2JTVUFyQ0dOd2hJRGlhS1BRVjEyZXphZEEwNENIRzg1TFltaDJnaU1Fb2hndUZDRTdXdDJSbnBaT1AwTEFtempKTkpNbDFGcVEyd2ZiVUJKYjgrZ2RmaVNHU1cxZ0MxdFowejdRVlFkZG9UU3lzalNlYnpvbGZ5b2hTdGdnQmVlTENIT0RmTXlvMkJPUzhhMTJoaWRyM1lVaFJEVlhUQUl4RTZ4d21zMERFZzFNUkZIQUd0R1pKTEU2Q3RCWmw1SjJBN3VsVFAyME1qUVh1K0ZHY1JoakNvVlh0b3daaXRoZUFpZ2Jsbk9aSVJnRENnWUtlampCUW9RNmhSaDJMSWFyR1dCN3orWWl0S0F1cUVNQWw5UURJZ0hjOVJzWWlVekFOZ01zWkdMTG9VYXhha2tWcmZEb3pLMjEwWmJLMDRacGk2Q0VCVm9zTU9BQVVWZ1Fpd1YySE1qQkR1S1VnSk9JZ3lYaEVNbnNVQ2xTYWFTeHc2VHJpT21NUlYyNFdTRy9BcjFvYjhMTjlNRmFmYkZvcU5yY2NDTnk0a2lqcUl3QkpsTndCQzhtV1ZnbEcrdE1aK3Y1NU9NVjRFaUYyS0NJYlZTc2xGb1pOcG1GdzgyWFdzd29DNTZLRCtxVXJvSXpLbW51NEdBWmVKWi9FQUJNNFFXUVJwRnFob1ZZQ1FmUGRwT2hIR2FXdXg0ZXVGaUhudTQwMHBvMU43Q1hWTW5mS2pSMllkRmlzY1dxRnF1QmROdkFhOWR5OHRFVFArNzEzTHdjRFB4dkRkMGF3KzluZXlmZ2QvWTM4Q0VMNXNKaVdBbnIrMzMvd1pLY1Fud0tqclhpTUFCcER1Q29hVWlrR0lTaENBRUZ5RUVWNUplbEZjSEJwOUxuZS9lL2E3Yk1FdzhLcFA2WlpWbVZSOFM1b2JBbVZaSldPTTV5MGo4QkFCUVlRVFVtUXlhWkdFVDF4OUhEQ1VrTUcyTTJIRU9odVg1SGpUdUJwU3BBS3dpWE9tc3FCcURBWHpRVUl3WitmT0JIdmdaaFloUEczL2pWeUl2Sk9EZEJJQzBqSzVzS25ONzZxVXhzSTVSanRBcGl2d2NtZUFRSzlGWUtHc0VTdENRUW9nNzZHNFplbXFUSlRBUlcxRDh5QlZJUUJWTUloYVp1L1ZIN2hTT0JSRktSbWpRa1Nia2dRSG9pcll6aEtGWFg3TElKb0xDNWFhbmkweGdXTGdSZ1RnbGtyT2ExV01Kd25ROVh6bGNmbUFEc2hRNEg5RW9lbnk1U29ySHJXZzl0czBwSTd2LzNzRWV3QWF6cnVDK0dDUENmeHJrVDlDWUE5QzliQTVCeFNLSzNkeDBBWUkvZXlpcW10QnVBbzB0Y051YnI4MHdsNCttNE1QajltS2FXUC9GSjF0bHRQZFV6TzRHL2hMOVdqcFROc2xWdUl5Zkk2WEpYdVZpZUV3cXQ0ZGJtZmo4QUNDSnpTZmRuNHBNbzQzS3NrWFd5c1FWcGpEOVN3bTBGOUFQQXZ3T0FOeDJ1dmNiMkM5dUFDOStFQzg5NHp6cWZHYVA3S09iaHJuTTd6MjBCQVlCRVFIOG5nTjdLOTNaMWV1VnpOUHFuN1RQSEl2TWNkZFYxaTYyejNuOU9tV1dUK1phYWFZa0x6amx2Z1d1SWhpUlFzR2EwbW90Z1lHUmlaaEVsV3F3NGRnNU9pWklrUzVGbWpmK3Q5UUFIb2tKNmIvM2diakwxMWtkZk9iUTNnQmg2Nm11OXN2NjNUdWRUb0ZDUlltVld1V2UxUy9hYjY3RGpqampodnBzUmNVdU5MUzdiN0hiVXVPdWkzLzBSRGxmYzBCQWV2Nm0xMVQvKzlxK0ZCQXhIaFNkU0N4QXVSS2d3a1ZyUTBRc2lhODJxcGJaYU9hT05CQzd4RktsaVROTmVCcmVPMnVtZ2s2NTY2YTZIbm9ZWVlLQkJQRWFiWUt4eEpobnZySW55NWNpVnA4UlVwV3dtUjAyRWpUYllhWmNkQ0EyL0VBQm9EUUJzUDlCeVFMOEZNUDhBOEo4RE53Y0FBRFoyRmJ5RWhPTVVMQ1dxb3BoSWlGRkdQNi9KU2Jibm5KZ1V4VjFEekxRQWhDSkl1RWJCbzNneWFTVUpSU05kRUxIU0h0SU0zSEhHc1NOeGZld0VuY2ZyNmNDZ01XbDdqYWFKMDBleFF0UVI5aWlHNENVdzhnU2lKbm53U2IycnNBaXBSRWxueENZTXM2Y1N5SStlMlJ4NkVxYitDckdFSG1Pb05BT0ZwSlN5TmxBVGhIVE5Qb0I5SFFPcng0ajVYa3pPZzRRT0NXbWNQalJ4VEMzVThZUG91VVU3WDd6TXZya2lXbzdkSnNablFRQUU3bm4xL3Q1ZloyUkVRbW8wd2VpdXZKa0xsZyt3Uk9rczV4UzhNOFdMbFRvRXhLUkp1TjVabHVjOVZ4bUdwM1hvaFNGWmc2MDJoMFBwZlFqZ0hITGRVOWRZR1pHVWpGOHhHUGFmcENpTkJxOVY2aTA2VDA0WVlwNG9LMTRvYzNlbHJDaVZFWURjL2oveVFTblBPdGFKbnpIQmFhaGNBMENmQUNxOFM3NVp0QWswcFRuS05BdXVNUVdRYkZpdnRuUFV4bk1MUU91MmZFbU5iMVpxNTVJTWM1UVp0bXA4VnlsUitGQllveWxYcFg3VkJEQW1kbUl0SFYyRlJ3eHEzZjR6Sm94NHQzS1pmcHNqeTh1L1ZXYlVnN1oxUjlNZ3Biako0dG00V0FETVFrNDV3RFNrVVJndHlFbXcyTUtSVFdERlpkTi9GR2FSZlpIYmE3T0xZTy91VDRpSEI0cU1jcXRIN0tWdjBicXdPWkYvdGVZK0RRNG9IVVFZaFE0T1ZRb2JUV04xUzdEQjhQWGMrenV4Nk9RM3hPMUZkbUVxQS92eWlLM3R1YUhTUmFXNDBPWTA4WlZBUFRXTVh3SzRaRU94QmhDOGZUd2FzR2h4S1N0N3lRbEJvVDUwb3J4K2tOcW9tRytxSU0xNFR5WFZoU0lEMTB1RUkyQ2N1Rk9xNTRDY1F2Tnp4L3BjZjhHb2ROWS9TM3htYVYrekpac3c3OWlsZTlGL1U4cmhQVkM0bVFsY01EcmJvRFlTNkNOYjRBS3d4cCtSRUZWUzFUSTZVTVp3NHdZV1FOUFFXNXROVG5GUGROZ3cwRk0rZHFnSGc4MjZKOHNpVmkzdW5RNFRsc2k5Z2I3RzQ1bVdMbmQvRHorL1JuYThSTEVlNTltcXByN1Nob3F0VndTSXZmbUdkVjJ2OHlwcWpVN3Y1ajZuclAxMTFwZ3NpTHhOamUxV0hCOGJNanBXSjgxZHRTMnBhbndUZ3duTjIzM1dxdzRiREpTWkdsQkpUU0RsSGVNWVpYWnRPOWZ1bFdNL2UwRE4zWnpORmJ6Zi9kczJ1WElMS2d4ZGt3TjlXRVRadTdsczVya3d3Ukt3eVZ1VjJGTTJlYWxmR1ZhaDNMVTByNTF0V2ZNNVdGSENKL1dNWVlVamhXeStjRW84ZXlXQk1YRXpXQ1ZMa3liWWpqMXZyVkpkbk9SWGV4c3JnVURMcWJhaDJvaUQ4NTdFU0dMYXZ0a1RMSlJmbU5XRThlYUcyOTBXbTVJc1hpNVRoN1d3bE84YzNMU24zZXVpN1dSNUg4eERZMTJMQ2JDeUV4Vis2eDRmM3RRd1VER3IzaHRsT2ZBRzYzMTh4a3J6bXNqYnF3WXRFVlNXOHZSOUtMZWhaN29KM29rYTVqV0xWbjlwV3Fjcm1EMlZ2R09hSjhlbitLaU9kVWJrUFhKUWZXNXhaYjdXMlJlRHRPSlRhME5iTnp3dFJKUEFaOVJ0cVNheDBxR2xMazkyZ3YxRFg1T1VRKyszWTZ1MFVLM1BQeURSYzhlSWxta1NjRVpwMHdTMnc2d2NLMytLcW5KMzR5ZU5hYnZGNS9SeURSMGo3OEh3ODVIbXpHVk9TMFdJZzlKQWVsZ080OXdOa3RJN2hBMFc5a3dKdWo5Q0VsMkdhQkw1cWtKWEptZ3NzUzZhZ05Wdjdvb0dpQWd4YWwrM3F3VFhmVGlsckNtbFZsbzhZMExNMkQvQU5oZnVpU0pyTlhWc0J4MFd0UGJrVmt2TmFIbGt3Z0ExY09RdEl5eUVVZzBPSEhsemQ5MVFXM3JsM1cwL3MzZHduZllLMGdDT1d6d1B0SUNIVm5OWDdlQmdSblJjR1FTcmppdWMxd253cVdVbDE2dlJaOVZoWFNlTUlTMGtmSkM3MjhrUGsvcjJERWRUUEk5MEdLQUptdHVSZzBwakhhRTVTL2xteTdIUUNZM2dCcWtiYmtwRGl0N0tNUHA5TGtRUVNaL1A1SXFEd1JDZVBSejdkMzYwT2dhRlRqc2VONS9ETzhtYTRsQ3hsNTFXY3BPOFRueWR1RmxtZmhmelZtdDZlY2g4TGVtOG4rZ1FLS0toZ3cyRVgrcC9EZXNpOUdBUlZnSzlrVGxPTFRrUUlhclhNYkpadGFFRDA2YjViZEk0YUorRVRYK0FpUTVKZHR1Y1ExWGFEenZERnExc0xhSmMzdHhLUTN0UUxleVVxeUtXVlEzRi9xMGRGajhZRDhrNnlkZFZGYTUrVnMrRFNHNnVDL25OOWNlbnVFTnFsakovNGNvdC9uN2YrcGlZZVlVcG8rRlpPbEZHeFJ2VjFXeTRWRVBHS0xKcFg3QUIzdUN0TEYyYm1XYUlCaU5GNmhCOTIzRy9UMm11ZHRJRTFmejY2VFV3M0FiclFyYWx3RUZoTzNaTExaSkd6V3p3endMakRzK3o4b1prODRnT3dvSFVBSEFnTHc4WGgyYUZNcjY2anM1U294a3RKWUJlVHJSalg1em5Ca2RtSTlNKy8xaHJjWWpZdGRacmdiclZUUjZjMDZvM211YUNrTlpjanJmUHNYbGlwYWpOTHdhdWZMNUVWU0tFQUhnem83RU14WUpXMC9vaUp4dU50a28wV21VL080NE5kVVd6SXVzTmtkWmZqZGZTVm8yeDhPREhINkx6VEh1ejJwd09UL09jQkVqSjFSVWpSOGI4NzVOSUVCQnVtM0J0dDZ6RW9kYjFoTWRvTWhyR0dxWFU0MkIwbTcza3lMdVJvYTU4UnhuR2lLeG1JSHd0Z05TdXZrQXF1dlIwS05Kd3YzNFllNFk5K3B2VzM1RTB0c0ZGMWd1dWpUTFUzNWZwVThEd2xBZlBuRzdIMDN6VzhYMGRKbm12Snp5WTQ1eDhsaEQ2ZzJKQVRFUjVteC9yRXQzbU56cTNPa2FVd0p2SWZHdStmcTVYZkJPSGphZnZRRDZJb3doaGI5blFheFQ2SkRmU2I4Vmt4cm1WVm5xdTVyWEk1UnE3Ukh5TUpSaU5Kbk9IdDhrbXZiZ2d6WWpnblRuNGR5ZXhjU3pPM3ZReURvSjlsV0lqdUlzUktSOGZiQUFYbXp2c2x2TXViYm92VGFtYzdLMmJSVWYySDB5UmpMdEpxZVR1eUFqZThZUWNKSkExZGNkdHp1VkNlMC9FcmhZTkl3dTBZT3pFdGViK1NsTUtPVVFzRTl1dVp1dnVRWFdiWHBYbENidXZKQVJYUHlBbXpGR2hJK3VPR01CSDdEUE8wb0RVdzFNNzhBTjNoSjZFQitxbzBZUmhJNThiQlhDSVVMSW15Z2hXVnNheXNJU1FCNTZocUIySElwWHpPek85RWxGc2R4dUJPWDBpUGhTeE5QOWVWaHlTU0lwMkV6WGthYlI3ZmZReGtlaVRENEwwRllDR0dpTnpNRGRJalhoaGR6WFB6ZVE2c0hVd0R5Z2RVc3d4K3VtS2lxNDlvNVFyeTRFSlBjaHZYMzJtSjFFWlB2THJKNnBjYVZ1bUMzcFFxWHpqMmV2WDRvcFU3dk51MmErT1YrZXJ4dklqMlVibDZBM25Sc2t4a1d3OWZOQWVqVndNSUU1UkhFU281eHIxeE5LczdjY044TnczMU1mLzl0UkFLTkRMSEQ3Y0w2NW1tZXBhb2hrblBlTFluY2IrWkdBVnMzUW1lczV5Qkd2NHhiSlI3UnVXaktJV3dRNmxmQ3RGdEhBZTBXQ29vMURDK1NCNkpzZG5wRW1QZ0IyZ1NRNkpVaThWRm9JQmhWM2toQ2hmMDJZeGo5SnZlZy9US3FUd2czZUhQTzVzVmtXRFl2R0NTYUJ1cUk3bmFBOW9OQjg3Mk5nb3VJUWJrRXJIYjg4SjJkTmpTNkpwRHJUZlY3cmg4V3J4a3I4Y0IzWmgxMktuTW1LcUhvMXBPZW5odEY0NmF6RTlMYTg3dWNSdjNKUjJ5eVE3bUlObGZkbkdqblVKZXQvRjF1amUrcU82U3c2dllTcDZEUnNpR2dKNUJjeFhWbzNSNUxWK1lWMXV1emh2aVhEK2FiMVpHTkR4MlB4NG5yYW1hY2J0cUhLb2N5djMwZXpCMjhHcmtqWGUwK3hBa0J3YVRNekxkWW1GTzlPL2cyR0llSEFTVk5yVHo0VXhySThUeEtqalZKcXJ0MVhyZEk3RE0rM0RlK0NRMWZXNS9WM1RYSGRmeG9yRXdNUFRieHJzUmFZcG5sS0hNeHhaSHMrSmNmTWI3WEdwUEJXbUxmdUNRL2ZTemV2MlBSYXVDejZBbGwvQjRFQ0V2dEZvOUJyR0VkWnBuSU9JK0xnZ241QmJxT3dTYmppLzFocUJhMzRuOWZKOUFEM1U4aWJ1YW1HR2QzVzFMdVJsTm9oem5Ma3VpUGVEMWozQ0REcDVUVk5HQStGaGRYb2FZRXlNVDBxVHgyUm53cHM4SXRCOWZISjN5YTVGZWdDbGZQMHJSbGw5ZDdDWjMzM2ovaGczRzJNdGF2TTFmQlVOQnJOMVRlRldGMG9jN2l3Q29RdkttZVNwaEJSZUh0eXcweWl3OTBuNnhwZ0NZeWttb05LR2htaDBJVlpZOEtCa08wVzFwcVlJaTlNaVRWRzk0SjJqaCtjdk9TMFJzZVFLNWdVRDhFQXFQMkNhcjlJalZodFYzc3dQVk56VEIzdndZQ2tpV0JVN3I3M040MkJBbjZOMUc5Zmw5TlgvRDVBK0ozazlSNk5VVy9OeWJxVHJWc3p3NXpmT0Q4Tm8xb3RZdlgyU2dZTlgxMERjNVlvUHVKTFVqNjZkVHRjT2wvUEViWVpQaHJpMytPKy9FOStOOWpiZWFRck9RNWdKMTd4MENKMm1Eb1lZb05CbFROV05IdXp4YS9EdWZqcnd2ckcwb2crWVliRkNiMFRCRC8zbzdpdHpON2R6WEdvZHo3ZkozNnhzRE9reU9TQTQ0TjhySFB2LytUTWFERnBKbjQzNE44NU0vbWNxK0NLb2lnaHl3ZGprbFZ6Uzk4SGc2UUdCR1Yra1NhYTFLMGx5UjVUa0RjRE4vWUpUcFIvemZielNrazVldkY3UnVkRllLSnFtSWhFaVJFaXIwN0ZFQk5hejRFS3o3ODBCTjNxSzlyT2IrNFlvMTh6NzU4bmNrZ1M2TytQZ0xIWmsrdlhlcjdJYnU4QnF0cmJzMWYzM214NTJIZXlaSngzb2lHODBYemRiQTVTLytFSjdMeEVmczJkUHo0WWdhc2Vod1JSYUxLTFRrWWdRSlhrUFJiQWgxanFYbVNyZHp2Z21mRSsyVFovZm00anR5K2RqKy9mRzgwaVIyNm4vNjUxaitiT2RFZVYzZVpMNzRRVWlzSWJScjNTSkY1VG9uV3hqZmlJR2VkM3hhY3VYWUkvWEM5WHRoWUFZa0RVWTN0MUVnVE5PUmtnRThRNFVEU2dVUWNPSEVBdWdQSjZGOXZVWlFKNG5MZFFyLys5VitHZ2E0dnNReENETlg3NTk1eU5YcE0vZld4QW5wOXcrQzZqTkluMjVVNW9zcVFHckdIWHBCTzROamJjdTZ5NWZjdkpvZHJId25wV2FGWFdEVkdGcVhmM1pXdU56N0Y5ZXZ0cnlqRzVoYVRvSFA3WHZ4Yld6YTJpRmdObFhwdUtjSHlLNnRITDVKa2l4UysxanV1bnV3bHFEMzcvVzBGM1FUY2RJTFVXMEdOZzNGYzJrcDZOS2k1bEFUbWVtb0FrSVQ1clp4WHozZmRtcCtRTm1HNlJGeHgzRzZ5ZVhpb3Baa1Z6ZmxkWXJUZlRaenhZOWdvMitnWVhtWUloUzNja3Q2RUVQZXpZMjNaSGhqRzB3UHVIdDF6c3o3WXNkR2VQdVpZbGVNTUlzS2EwbWJURnJ1bE1HeTNzbUplUkNzcGY4UHV6UTRISVJxZGFJWExoRTg2N1lnWUJkbnRYa2MzNmJVL1A0dy9rcFpUOFU5RjBNMEIwaG9Gbm9OYTB1Y1d3eEZpNTBzN1QxNXdOMHdxVFpmQjdyTFY4eW1oYnFiY09GL2phZGF2VWZOMnNoWjBHUTFwYjRONDJrZEduMGNWVEQ5MS9XTXljbjVlcUlSVC8xK2RGa2IwdlQxZ09KdVZ2ckNJZjIyVXVLcHA5MzZTRlcwcWxzcUZ1bUpQV09UQ3p3VTc0WHNLQStXQnhucUROVmtBZkFxSTNqV3FzaHluOUhNYTk5U3ZaQm1Hdy9LY0IxZWpReW9QRlk1c3UvT0VQRDcwVHlXb1EvaWZWUjNsOHFUU0F1dlRVWDRGNFNlWTBhTkZ6UUFpVlFGZzNaRDdHLzMwRUtOL3BjRXNBQlNqQlhZOWRpNzRybFhwSmM0ZFY0OGphSUJyQXk0d3pMd0lEVlp1KzNXZ2ZzdTBOcE9jWXd3M3ZYSFpRY3JSQzNOdFFzTFBHbUVNWDFBOHNIMzBZWnVnQll1anhDTHc3ZSs1TkRUZGRROGViR0IrWWc1YVgwS3Bxd0l1cFNMcjN5RDVKbkZ4VHZmYW5wNk9HMCsxK2RtRjM2SWdHc3c5QkJjUDUzbmZIUDdObjNRWlhwc3hNK0tweERObjErQXFXQjRrZGpiaWFZdnZQcVA3V1E0Sy9EakRVWjcxMy9EYkY3QkdLU0tKMDhYK0wxVFJSeXgrVlc3Mm9PdkExM0FRdXJYdTA0OXQzTjlGS1lFNFczYzZFOTZhMDF5WWR2aTc3K0RCUlh3OW1SQy83TFBHSmxrQSs3UjcyMjFjR1FmY1dveTZVS2NyZnhBdkFmQnlENmNOYWN0ZXFIQ2FlK3BDbG1MR3RHQmdtQ1NQN2pCSFIxdGQwWDk0dTM2MWJEK1lsMmdZczk5dGtvQTF1Yzg2NFBmQlRpY2FwcWV2aHFYQmZlMmJQbGkrUDFIak1aRmF1NEJHdVZNR2wyNklhS0RsSjR6NjlYUjlHeHhYSHM1MFdiTGJpOEExOFJUZUVyaDUxV1paVDFoVFRGZ3B4OFdqN1NQaXFUNnNrMk9LSDg1cjRDNjRVc0RLenFuQkdYZlVVb2FGODk2blVKbmtTdittSHZSSWlLTUJoVVFPbnp6R3ZIMHE5K2FzbVk5YXBxWnF3V2M4YUdET01FTWxnZVFxQlNoMFVhUUQyMkk3c2VmVGFya0ZnTE5uT3BBMGVIK3F3ZDZnL29kWCtWeVd3MEIxYTFtL3lMUGM1VlFaOXoxWkpPOExYYjRZb3JiZDEvV0xtZTdVRUI3QnIxMkZjRmcvWlZvMjZYSXNBOUp0aUJLZGF6bG94RlAwUVF3T0pwUVVvRWpndzkzVnNRM3B0MHJDS05vaDZuSnlYVkdjT3d3Zk1hZGNYUStVUnZILzUzNSswMGVZNEVnNS9aTCt3ZlV5MXBHSlVrblpPam5iakVtSEVZaHV3WTBwK3htNHhaTTFLMDJ3MURXY2M4YnNpbk10bWlaV055dUNCWi90bmhIWWp6L2daT3FMdXNnd0J6UVZkdFBGUVhlWUR2SGxSeGN3dHNSMkkxalI5U0tpZHZPYjJwazdEMC9raUt1T1h4M3BtRHc1RkFIUmJtWFZsWithbFN4ZSs0SFN1ZGl4ZmEvUEpZWTZFZW1vMGt0SnI2OGg1MlljR0t2c0g5RDd4OUZWN0w5Uzd3ZEt3S0J1WG1CVzdmYk10WjBCSVJ6RmxQY2IxbVk4bnRwc1gyWWdBdXMwY00wcXhSTFBXdDExS3h2ZmNqcXJnQzlhckUzbThKN2ZlSlJjUVZKQWVzODRyNnUvbWdiVW5xZHovZzBDMnVKb1Y3a2s5L0tXQ1ZMb3dXNU9SUzdsdloyai82cUNPa2V3K2Y1Mkkycnlxang0K3EyNS8vMXlUOXREby9teStTbFpsejlscjhPZGRqdUNIR2xkckRCbkVHRXduSlhCWG1kSjdYcStKS3RCUG1QUmVwZXdtVzk0Uk9HVkVZOUs0OCtyOGlFaEF6blR4Z1ZHZEU5T0swRVhuU0NGZHh2RjhhNEtUQzFOeThacTI3N0JOTGlGY0NITUQ1SGVoWXRjaEQraFo3OEZXQm9CQU4ra2hMeW15eUFJR1djbGE3TFc4MWxnaWNDUWR0ZGlhOE1QQUhka0h5SHFHM3BJdWh1ZXZNL2JpeGdQeXNaZTRSd3I0czRMY3ZIM1c1QkU4Z1YvNncxK1J3ZWpNekNSK0p2OC9HOUVXOFF6K1F3ZUl4WktDakErblg0YzZ0bjlZYWZVTmZsOFUrYzFXTWR3dlhBOGRhNlozUlJ1RHNYYWdBVnZUMFp4OVE2cGsvcXNDS1NBejgxelh0ZnRGZkVETlR3L25NYmg2UVdSWlRZNEtuNS9PRlhmZlNBai83NmJCQWRpWW9SRnA3YzJNcndYQlRadDVwRDFzbTJHSVZjRWZ3dHAyMGFkZjJpWlVYSTN3RFdsQ0FWWkk1VkxmNjZtTXdHWUF4ekN2bGlHbys3dmlMMTlZajRJS3owN1pvc01QVy9QcWYwL3JJenArbVAvTzdKeHhIMEx6VFo4ekd0R3NPM0VJVDV4NlZUclhXK0w5bGdlOVVNTFA1WmJmQ3ZPWWxHbk9pZUJwRW5SU0J4TisvZUJOZjBqYnR3RUU2QmFvelZ4VjRxV09MUTcrNmlrZmRHK0JLd3V4Q3lJK3IyYitnMk5NdGtYN1I3Y2ZWREtXaS9nQ0VrRDFjMUt5OHNMWGh2Z2VPUHZoNHFKWjZFOEdyN05UYkVGUGMydkRzVzJXOG1sanRGcDZjQ1pXb3NyeVJISzNROUR2Ujg4bTI5TmtWblh1cmlRSU9pU3NhRHArdjIxTTRmbFVjTHpZZXZCQUM5citNVnFOdm9EUkNnVkZqY3lnTlhLN0N4WUZqYi9sbzA3VnZaUXRsMG16bi9PdHYrZEoxMWR0cndIazFVQTZ0ZEN3ZXMzazBuVTJMU3hzeDdOTVNQWmV0c21hTXVrSkhvUFhkQ1I5SDZvem94R21yMldZeUpaTE9aRkFkZ3cyazlCQ3ozWDY5M09MeUdUc3kzcStlZUpKc2U5MnlhSWc2NzEvZjhlZ240UEFNeFFLMlh3MEx2ZmRKOUI3YytRZFNUUFN2bENyWjRMaC8yaHFtN3RiYVhEYnpBbGh1ZFNFbzdBZXVXbXFwenkxWEtWMXkxVkJycEtSTHFWUzVsWnFlTjlxOUJzVG1OVW9RTVdSTklJR0dJMFhreXNFU2NnVlpvN0hoWXJBMGFBbFNvd284RlZmdXkrWEZtb3JoT0VFb244dTV4c0Y1WUl3NWNpb25vTUlGaDIxWFIwc0hpdXVtRHRKZncrbm41aFNWRldMK1Y5UlUzRll5SUZKdlNHdzJwTlV5aWdYOEt1Y0RtamFPTzNCdm4wNlhzUWhiZk9hVWRQYm51U0RXbWpJa2s1MlRZVjFhTkkzaGxraFdyS0VaUGl3REdyeVBjUGI3L0l4bHo3YXBIa1RoL1lXdmZtc3NGNlM0a2hidkQzcUprUVVXWEJYbmZpQ1VVa2lKalFKbDhMWHRFOHFkSTZqRmJkRjJKN211Mjd5WGw0M3o5N0M5ZzFTTjJXd0VvK0REa09iUGVscEVIWGtkMG0zRE5Ja3VqVk5LTkY5VEllemYxcXhwcGRDSW1oZjhOd25hcnY0UC9WT01NLzN3UWN3NjRESUp1M0JuanhEd0lEVWpOM25hTW1vamV6bTZQRERjRngrT2w4TzVRdXcxOEdRbTRDOGE1aC9SU3o2UGNGVzZnQlRGMlRHVnhWUXFPbkdaSWFLR1l5YWRPQlV3V2h3cEZNNFkxTXBZQWdIWHEvQnRlTythS2JjR0lVV2dNS0t5TlNSNk5oOXV1Z1lzN0NDcUhDejB3cWdwM1lmWWJIbkVsRVpoZ1dmSlA1NDNmZCtPUzQxSU1xc3pHak02SkdtVXZ2Zzl0SHlFZ3ZDSVpUSzNXRUhBUkNMbWNpZGlSOFRCM2lRQnF6MUJxUnFXSi9EQVJFOFMxSi9VNEl4TDBFV0JnYjZJK1FMeDV4ZVB4cmRWNVNmclorRjJHRWpzVVpYVk5IZ2FETWROV2tzUU5aL0hBS2NOR21VMG52RUVCSSt6T21FMWl4eFhQbTRtMWJCSkhUK2tWSGt3bzhwWEVBa2FzWndUV0MyQUZmUlZZdzAvVVk0dExxMVlxTFNqWnl1YVI2ajV3SmI0QW0reVQzR1dWWHVjM1lnTlU4M2diYmxjOEpLc2ZValEwTDVqM3BVRmNYSUdjb0FWMEM3dytiNXFSaUpXeEJFcmtuOFp1WGV5V0FvV2ZlbWxBeGRwdkxkdy9yaHFYYnZhc0VYWThzQzFoZnlLY3BCOGI3bGJ5UDFYQWU0V3NjTHp4VU5iZDNYMjFOWTNQRUZ6d1h1THR0NVJmNWlLUFNXUUlqc0l2ci9Wcllidy9PQzdDTDh2TS9CVEhIWjU1WWFKTXBET3Q3UnRhdHBaT2R3Mm4xNURoK3RMalM4QWZ1WGpQUnpldWI5UUJ6VnZkcllKaFFFVUgybWt2MHk0OThCR3duZnZpanRvRmJVM1NkcTJYL2QwUzN0THl6U0w5MU56ODJPZ0JQZ3NhdSt5Z1QrdE9BZzUxSENmWGRHZnluR3FFUlR2YThBMnFQTDdQYTJOM0xzL25aZEFLOTl5NkNrMjU2NURMVzNVeExKUlkrMnQ5L3h1dnJQWjB0cFNXYjZ0MHJmVjByU1AwOUhXdXE2MWRieTFUUXVpRXJ4TXBKZmNwcmRERlRVUFZiTkZOenRZYWoxbCtkVzhuNXBiWHVRMHExdWFENE1ub0ZDaTM5MG51aGpmOXlEWXZ4eXlJM1NhRjEwWHgwcmxKaXc2M2Eza1U2cDFLMmR3a3Z5eFd4eXIxYzhUT2tGT1hXS0txajNiaXZJRVgySEdiYnBBWXVYRGpxcEQxc0UrbjFadG5jUkpybW1nY25pVkRPdXd2UFdTQ3V5d25uOWFZN1V2MDFETjZ4RFR0MXFsUTllN2hVdGJoTUtXcGNKRUJTRmI5ZVVZWEFKSDVucTBrdnNoRG0xRnJXVzM4bzdCMjlCbHo4NTlXeVBQQTErYmp3YXArUHhraHRkMUlLSXc5ZnpseWs3VjJrNU1ubXVWWHNtdHRVTnpySDN4dHRZSDZKcWpPS0syUStlbXYxNzVQcVEzOFQrOW02Uzd5ZlU4cThEK0J4aFRSZUhDdmpUbldrQU05MUpZMlFrYjVBR1BRcVdKcUE3Nm5sdyt3L2U5T1lCaXBpNGQya3RJZU9ST3YxQkZjVythZ0NoQTNlc2xFWFVHYmNJR0FSVGM0bmhUMTFCWjY2WFh6VEZMRk55WklUNU1MVytyeUJtb2RXMlZyRVhEUk1acVJELzJxeU1MNzJYZ1FwR0VMZk5vejcwZ3ZvN0JrQnp4V3A2ZWhBVmFjbnBldFhrTjZ4SkdkZ2lKeWhwSmg3YUNNSWdETWNwUlQ4cWlhTHZMN0dhTlUrWm40dWlscmdhM1lvTStpS3NISHFqOUd1NG5ncnBGSG9XcnZsRlFQc1BjcHhsanFPTHN2ZG1tamJyZW1zSHJhOSt1U3NHRCtvVnVwYnNPYjdGeFpZVTZzcXhSYmR4MG5XT3hra2tpdXM0dm53L0swV0NKUjV1STc1WFhUMzE0QnMrOURUbkJ4YnlSbU5HNXd3NUJnV1BVSmhuWnNsMldXM041KzNVcmRpVTBMaXF4SUM5ZkpodWZObCtXVEpxdTBMY1Nra3hYNHpGQWU1UldSTFZjUGo1VE0xTkZSdFA1YmJma2MvWWJOTlVJaUxucFRCTFRzcnNwZ0NNWngybkZha012SnVjb2lqd2FVTWFLZUw3UVF1ZWo2S08yM0pGbFFJdFV1all6Ty9TWXVFMDdmYnZJUk5HOE1uY3BvNWQzbDVsSzBqSWptZHU0OVk5Ylg2bzI2WWxaYzdQZkhmOTB2TWRtSGx3WlFUeUhETlgxR2w1azFqN2NQNC81TU5FcDQwUUp6VE0zR0xpdjBKcmZCUjR1QWZmMHFCQk1XMEtVNFZtcTJPTXFjTE1kVERldmFQaUNtYlk0d1l5VkwxZ1pOblZSc2o0SExwYUF1ZWFucTRMY0NwbFhwUktpa3ltVTZZYWM0ZXUrRUlvKzEvTjUrczlGd2k5MFFQMk5yZ0NLR3BURExES1dMYVJXNmtiUGFtTjNFWm1LUklRUXlkVWViRVMwK1hHcWRxaGJnTVNtNHVIOWhiN3dBYXFPSVYyQzRLUFV2bUlFTDFBUGZBMzRLNWxtaXhWMzZHODBLTHNiVW8xQ251ckN5QlJGN2tjRlMrOUVzWVgvelFmZjhCL2JmZFBreXpzcE1JNHFqcG5zWHJyQW83LzFxZGZuUzBUTTNBYVMyVVR2UjhlTFZ1TGVqdXdMbEhkYnduVVdYWkZWbW94aG5hTExqakNiTmZpWjJRSkpMZ2lLMjhxT3VreWx5eFp5ZXVKUDNDL3BJYlE2VEYydWhYZ2FjS1pXRmJ2Z3ozR3Z3aDVnYUdkdElDSFpkQVB3UGFDekl1amFlMWZNZE9GOTJkNFF3V0h2T1gyTEtESmxqMmk2Tmpmb2hxc2doRnV1RzloS3JhWE4wb2hWMEVPa0dhTExMek9NdnVoWEU4dlU1ZGJvY3Nab0RNbE1JVE55K1RXaTBKS0lMNURVKzAvcGQwZjBRNG02Q1hXcDhNSFFJK1Y5bmhuY3dTREtNY29RL2NoelY3OWJLYysvdnZnNS9TRndPNzkwN1BENXUvZFV5dmV2OUQyalgwWlpkQWVTUmkvdmY2cTgzV096SnhpWVdoaktIOXA2RG1LVWR0dzM1ZjRTeHF0Ykg3b2pTY1dIRnJuVytEN2xZbTFOaytIbWF5cndkUFJDdmZZbThNc2xqeG9mRWMyTXVEWDMydy9NTStpbHV2enJEWndUY2VsdHVwOXVodDBHbDQ4ZCtRbkhXMDVVc2p6WGEvbm4yYk5zODNUOUVIWm91OG50NDhzRk9QczE3ODkzQ2JYYjJzTkxXVEdOanBVNEFNT1RyTGhXeTQ1UFhxdVZScXhPVlFUV1NHTldoeXI4eUI1NDhvSldZQVBaWGNEaHpjS085Mys4QitPNVI4eEtxTjVjbW95a0ZDbzFyaFlGWUsyb2hHZXpSdFFWakc2cDhqbkFPbFVwaitQcWJjUy9ubElDTldRNEM3QkVjUDFPYjkvWW5jNnRhNEkzTG5KSVZrYjdObUhkV0tqMndyOVp6S1RpNzVzWEsxTkRlNXhkWTRvcHo4ckUvUWVuSC9jc1dYWXFGZG1iY1FqWDJBZml0cEJFR3BHN2ZQSXV2ZkNyS3hWYXY5WVFZbVdramc0M3FBTFRmSmR0ektvVXhueEUvM2ZST20vUmpLaTd1ekFuT2FnZ1NGblhucGJySUhDMkxOZVdvdkZsMnBacXJnbi81S0xrc2pFaUlNTmkvSWhFby9SRlpaZy9heFlES1MvWUpVenJVN3RnaDl1RG03anRwQ0ZJV2I4OTJ4MkkyeXF5TVNyZWJyOUlxMlBXc0oyTVhyd3JOU0loM1FBNUEyL1pVSUswMWZid3ZtWUVGOHFHcXBCaUxHWHFYUzhldXdaaUxJN1Y5cWFQTGhqMjBVSlA5MnFWRjZWNHZVUWRZczM4bDlCVmdTbmNZT0c3WlZrdGl0cmZmdnRCMmI3UUorS0dtbk5ldkpValdldmhpQkN2VWlHTlBkeUdlQVhMdDBKNGZwQ2MyR2tGOTlYVFVrRzRWL3RxcEtYSDllbXBCeFZudjJ1RFhYcGZFOG1zbW1OV2xPTVkyRit3eVZETUdTZENZZVBtWW02VG9kT3lDem5UNW5ESU5GSFFJaVg0WW5VNm9WM3E5VWd3bmN5bE9HYVNabytYU2FRbVZqdXpCazNHYUtRWFJ4Wnh1ZzFKdnMvMHcyRDRmMXZ4eVVRZUdCWjV2VElEKzRkYzhzZDRUKzNRdmxmQVhCK2FJNytVemM3ekZBK0xPWnhmNUtDOFFtMXZmOHhJQWRCb1V6bDFOS1ArUkhkRjRmaXA1bGNhbW5ZM2QxUzF2MWIvdFdQSVlpOFJoTDJrNVE1bmFVR2c4VG9hMTJpVG1GbWJVQTBVVFdoMENUT21TK3BpZ0hjbHBEaHg4R2FvdlNXakxYUXIwVklFb2gvejFLVVR0bjNYZU9nNzlEQys1Q1NVNlJyZFBlbVRYLzFzaWR2NkQ1Z1ZhVlpzSlRQblV6c2xWNnZGVXZYVkV1blZISWxFYzdWWFpwTkxiYkt2TWJCc2I2L2tzMytMb2VYVFY5SVFzZ01OOWwwYjJnSlpuUE5wT003dXZaNHVXYllkNTlSVE9UdzNKR1hwbnZxcWhiWCtHMERLVkN0Z0VsMVVMUlBmM2VyZ2tOOVBGNjRFRUhXWlJ0M0UyNjIxZlBTSGFqK3hTTDJIaGx6d2RUMnpxdmgvd1pkc0NFak5vNG91SUxkN0ljZTFiUkh3ZnBWV0JaaGpmWmlaVEF0Rk5WTUxnNmdXTWhocW1XaEswUjNFcG9LdHh5dVd6UzFxNW1ycE93cThlVnkzQy9GUmVSTUlIS2VaS0VJK2VZaXVvbWwyQ1BvTUZqWDZxOEJsdjBjRTNWdW9RazhLNXllTXBkTkhJSWtzM3hoTENTWGxmRThxdjN4K2p3OVFZcGhTNHpMSE5mM3p0ckVtTUowNEcwMTJVc1BYNSt0cXVrWGJWMmhLYlVrUlRJNmMrRHhEZmxNaHhvc0NJYy96Z0poSEZVdGRqeWx2V0NrcHVMNDJkV0RmcE9sdWFxbFoxaE5CdE5zTGZCR1JxVUptSVN2OVo0RkVla3Znald0c2JHcjhRZTUySTdpOUpmZ1JYZ09RdlY3YkpOYXQrT3R0WS9Rd3lrdU53SDRqQzFiNVpVdlpwNyt1cTJGa3VyczRtZ09oZHJXL2Q5amdUUTY3cGdLRHI4aG0vazdvOW83czUwNnkyQ2VlWTNQdU84Rm1uYnp2YnRZUExhMy9XL3JaRkpaN0dnSU0zNjdYd1BZamdNcHIvRU1nNFhvRG01R3VsMWdIczcvQ0lTYWIzenVnazA0TWFBMElWRVV2cm0zdXBXRFI4RGNLaGx0UU1GeU5naUVUSS9nbmU2MmtUZDZjMmRiazVXSERyeDdaSklzcWNLWXZTdUpSbElhaW9CdEZ3VHNvQ3Y2VW9nVEFkY2dKTGNnSnp5SW5QSUtjOEtHVW9pOTB3ZlNhUnV3QW9vK29xYnFSMnVjUnBnNC9jajNCVEpqOUtlWng0R2ZqbW1BWDVUbVdZQ2xUTU55bXp3UWx4V21EUjlWKy9pT2NKUFpmbUI2SGwrQUdqWTBvNHRSdDF2Y0h1NGJGYW4yeXorQWJSak5iOG8xU1RqZEdHcU5PeFg0U0lUVnB5Q1BYSTh5aGlUM0JBaVllM3pJVitLaGs1aVJDUG1qVCszU2xlcCt1QnZuZzVER0xRZkVYQThFQTluYnJuWG9Bc1h3eGU3K3VJdEFJZm8zNjhVZzNRbUJxK3dqb2JmUXgrZ1I5aWo1RG42TXZ3SmZnUGVrclV2d2FxU0srVmQ3RDcrRDN6QThlMnZoMkl6RDl0ZW54VkQ2SkM0NTEyeHQ4bGo1SGZUOVBmeHArb3M0SHRBVmR3WXpLbktxK1FzenhleG8zckd3TGNyZDJWZFFRTjFtWHgxUGN3QzF1NHNQYnpCTkVMdjJMYUxEZFV0UDJvYlF4SzhhekhvTzRXM2lEM1Q0OWZXZVUyZWZSM2Y3L3lMRllabURRWHZjOUs5bGFnVVVBTWVMZWZ4YXNBakNIZlZnQVpCNklkWXM1MFh1MTNicUxGOWIyNEk5WkQyc0RiaTE0L3o4Z3kxaXhsdGpndk9VQjVMb0FnQlhZemFsSmdzYU1yUjF0WFlkUlJsR0g5UlFkc0UrNnhtUmc4eUllbzhveFJ1TVFCU29QdU1PTVlNTGRzNHhHQ0orSDJTTWk1YWJ1cy93Q1ZZNXROQTBYbTB5OXhHTTBKdEFPcTFwZ0swQmRLQWY3REtHdjBNZm95OUYvWkdsYWxOdmx3bmxDY2hndFJMOWxXNkFyNEtOK29TZGdJeFhwSUp5RjI3Z08yTy9OQWxoMVZYZU5PeVBkOS8zU0lLQS9WQ2szOVk0RVBZaXVIZU1CSEpwV2ttM1FlSkVMUEVZTDBXOWdnWkthOXpHSHp2OGJJN0RIZS80WWJoZmUyRTlpb085Sk0zMjNidWJzU2tRdmlNdytuM1FOSlVlOHRPdHJ6eTV2MkVhNjdBMnhWWlRzNHU4eTFqam51NTNOQzNrRWJpRS9aanNpdWxPajIwUTY4VTZZRWltdHhrdXVDM3ZMOFlaTG8yc0ZFYWRReHV2RzlsRTBldDYrbGsrN01RSG9OMFBZbHNhWGIrdmFOM3RyMXk0MmRWbWtmU2JWNXhpM0JiVjF1MTFNOXdEMGxPekxYbllDUjkwdDR3dCtyaXVvS0ExOXl1d0QycExBSndRN1ozeStjSW5pOGtnNjE4blVTQVQyTzZWSy8zV0JJYTFoVDJldzdFb0ZTcmFNSWorVFdFMCs5NHJhSEFKd0VUOStaN3BsWEVqcTN4REgzUURnNUlHTys1TDhMMitKLytpd3p4UE14Z0VpQmdBSS9peVpvSEFtTVAwL2VFNWs5eTZpTmUxazZ3N1d6NHVjcnFUcHh5WjNCZVVKdjJSeXAzWEZUUFlkeUw3Skl3UjRSa2p6TjdhelhpMkNJTUUwcFRYb2RaYzdJU2pkK3JMNEZIeEdFeTNBUkhVQXgxVi9MWnZpamw4d1dWMm0xZlNDZitzd2MwVzA2T3FhNW02U0t6eXRSbmhRVmFnTTZNY2hSZ2tKTVhZRThZaEI5dW1Lb29UcEdScU5rSzRmeDRPVyt1KzRDcmNHWXJnVFo1dm1HOVRVanRmbmlxWVpVV1Q2VWcwZUUzaGtpVUc1bkJwZ2pGMTREWGJvK0RRUmJmcFYxM3pNcGxJSkN1YytWTEp4R2dhenhGd1dJM1pMbmo2NVg1MDB4QjAzb1owTUw0YVNQNkd2UVhLYnVQTXJVcXZtYVFoM1VHWnJSVVpOaVlvOXRYVFJVN3hHbGRTeXBZNDViQXJMVUxNenRBYjY1aW1kSU9hUkRZcElVRjVCc0lvN0tRNi9VelN3dEkyU2VkUzFrN1FvSVhQU2MwR1RGNHV6V2h4THh2d054RjdoOXIxMkxMWVhJZDlGRDVzck8vUzMyYktlV3paUEpxWC9BTTNRaDFwdWZTdDc2amlRdllFbDFtTTBlTTdUTWt3QUEzdDlTRG03NlphWEtMWjU2NXZwTzBpeHZmUXlDSTJqNUJPaFYvazJQaVYzc1J0NEtxRmwvbUR1RG5VejZtN1Z2NzhSUGIzSTFqUE1YVkNxVllpZitFVEZIblczcmNoTWI1MWUxdXVWcHpMMGxnR1RJQVVNYVJVRmNLQURzSUVFMFFJWm1LZnlEVWxGWlljbzJhNi80M1FEQ2FYc2tjTUdPSzJzNUtGenFQeWk3c2pmSjlTOE5Wb2pqOG9YMU1qdXlmRUVRSUNQY1dpbUFXZ2pMQndrSnEwT0pqaWRIWnoyaVkzT1p6c0VrZG5yRU5seW5TTllZbDV5aERLWFlnOGoxYnFUQ0Foc25DN3k1S3RRS0p0WGxtSXloVXU4TkxMQkJaaXl1UU9VeURiSmRFVW15RFdackw5Q2VhYVpZaElIN1VTMHVKWG1lYlRJaWpaQmNyRjgwMjg2SnlldjdFeTF4RVFPcXNtVHc3bkt0ZEFVWmV6eVRlRGxreTNYQkdVWjQzTEtwaDdRSEs3eHFlQVFldnRvY1dSbEV0SmxBMDFSWk1wUktUVkZYZXJweFZ4RnhiNjhuRjdqc3E3R2JkVTIwQnVlSVZKT3dzZkZxNFRQQklVU09MaTRKTXJRVno5OWRaTWhhUEM0V1RzWXlnRW5acXM0bXJ3WUtkeGV1UGxZS1RMSnFEUy9WNG80aENvK0R2TlFiL1FJK3ZIb3JlZmdNVFBNbTRZNXUwNzVQNkpJWGhIL2UxL3lud0VBKSBmb3JtYXQoXFxcIndvZmYyXFxcIik7dW5pY29kZS1yYW5nZTp1KzAwPz8sdSswMTMxLHUrMDE1Mi0wMTUzLHUrMDJiYi0wMmJjLHUrMDJjNix1KzAyZGEsdSswMmRjLHUrMjAwMC0yMDZmLHUrMjA3NCx1KzIwYWMsdSsyMTIyLHUrMjE5MSx1KzIxOTMsdSsyMjEyLHUrMjIxNSx1K2ZlZmYsdStmZmZkfWJvZHksaHRtbHtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS40fWh0bWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLXBhcmFncmFwaCxwe2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjY7dGV4dC1hbGlnbjpqdXN0aWZ5fS5tb25zdGVyLWgxLGgxe2ZvbnQtc2l6ZTozcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjE1O21hcmdpbjo0cmVtIDAgMS41cmVtfS5tb25zdGVyLWgyLGgye2ZvbnQtc2l6ZToyLjVyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMjttYXJnaW46NHJlbSAwIDEuNXJlbX0ubW9uc3Rlci1oMyxoM3tmb250LXNpemU6MnJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4yNTttYXJnaW46NHJlbSAwIDEuMjVyZW19Lm1vbnN0ZXItaDQsaDR7Zm9udC1zaXplOjEuNXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4zO21hcmdpbjo0cmVtIDAgMS4yNXJlbX0ubW9uc3Rlci1oNSxoNXtmb250LXNpemU6MS40cmVtO2ZvbnQtd2VpZ2h0OmJvbGRlcjtsaW5lLWhlaWdodDoxLjM7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfS5tb25zdGVyLWg2LGg2e2ZvbnQtc2l6ZToxLjNyZW07Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjEuMzttYXJnaW46NHJlbSAwIDEuMjVyZW19cCtoMXttYXJnaW4tdG9wOjMuNzVyZW19cCtoMnttYXJnaW4tdG9wOjNyZW19cCtoM3ttYXJnaW4tdG9wOjIuMjVyZW19cCtoNHttYXJnaW4tdG9wOjEuNXJlbX1wK2g1e21hcmdpbi10b3A6Ljc1cmVtfWRpditoMSxkaXYraDIsZGl2K2gzLGRpditoNCxkaXYraDUsZGl2K2g2LHAraDZ7bWFyZ2luLXRvcDowfS5kZWNve2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMSkgMCx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTIpIDUwJSx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTMpIDEwMCUpOy13ZWJraXQtYmFja2dyb3VuZC1jbGlwOnRleHQ7YmFja2dyb3VuZC1jbGlwOnRleHQ7YmFja2dyb3VuZC1zaXplOmNvdmVyO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpO3RleHQtZmlsbC1jb2xvcjp0cmFuc3BhcmVudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjp0cmFuc3BhcmVudH06Oi1tb3otc2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9OjpzZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX1rYmR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czouMjVyZW07Ym9yZGVyLXJhZGl1czoxMHJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTtwYWRkaW5nOi4yNWVtIC42ZW07dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfWRldGFpbHN7bWFyZ2luLWJvdHRvbToxcmVtfXN1bW1hcnl7Y3Vyc29yOnBvaW50ZXI7Zm9udC1mZWF0dXJlLXNldHRpbmdzOlxcXCJ0bnVtXFxcIjtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjFlbTtwYWRkaW5nOi42cmVtIDFyZW19ZGV0YWlsc1tvcGVuXXtwYWRkaW5nOi42cmVtIDFyZW0gLjc1cmVtfWRldGFpbHNbb3Blbl0gc3VtbWFyeXttYXJnaW4tYm90dG9tOi41cmVtO3BhZGRpbmc6MH0ubW9uc3Rlci1uby11c2VyLXNlbGVjdHstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9QGtleWZyYW1lcyBkZXRhaWxzLXNob3d7MCV7b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0uNWVtKX19ZGV0YWlsc1tvcGVuXT46bm90KHN1bW1hcnkpe2FuaW1hdGlvbjpkZXRhaWxzLXNob3cgLjE1cyBlYXNlLWluLW91dH1kZXRhaWxzW29wZW5dPjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0ubW9ub3NwYWNle2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHktbW9ub3NwYWNlKX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17Ym94LXNpemluZzpib3JkZXItYm94O291dGxpbmU6bm9uZTt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXS5mbGV4e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fTpob3N0e2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmJsb2NrfTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1mb250LWZhbWlseTotYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCxcXFwiUXVpY2tzYW5kXFxcIixcXFwiU2Vnb2UgVUlcXFwiLFxcXCJSb2JvdG9cXFwiLFxcXCJPeHlnZW5cXFwiLFxcXCJVYnVudHVcXFwiLFxcXCJDYW50YXJlbGxcXFwiLFxcXCJGaXJhIFNhbnNcXFwiLFxcXCJEcm9pZCBTYW5zXFxcIixcXFwiSGVsdmV0aWNhIE5ldWVcXFwiLEFyaWFsLHNhbnMtc2VyaWYsXFxcIkFwcGxlIENvbG9yIEVtb2ppXFxcIixcXFwiU2Vnb2UgVUkgRW1vamlcXFwiLFxcXCJTZWdvZSBVSSBTeW1ib2xcXFwiOy0tbW9uc3Rlci1mb250LWZhbWlseS1tb25vc3BhY2U6XFxcIkNvbnNvbGFzXFxcIixcXFwiQ291cmllciBOZXdcXFwiLFxcXCJSb2JvdG8gTW9ub1xcXCIsXFxcIlNvdXJjZSBDb2RlIFByb1xcXCIsXFxcIkZpcmEgTW9ub1xcXCIsbW9ub3NwYWNlOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNil9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNik7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTIpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNik7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTIpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi00KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNik7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0zKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMik7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0yKTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNCk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi01KTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTMpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNCk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS02KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMyk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0yKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNCk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTUpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTYpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMTojODMzYWI0Oy0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0yOiNmZDFkMWQ7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTM6I2ZjYjA0NTstLW1vbnN0ZXItYm94LXNoYWRvdy0xOm5vbmU7LS1tb25zdGVyLWJveC1zaGFkb3ctMjotMXB4IDFweCAxMHB4IDFweCBoc2xhKDAsMCUsNzYlLC42MSk7LS1tb25zdGVyLXRleHQtc2hhZG93Om5vbmU7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC0xKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTYpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWhvdmVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtNik7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC0yKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItd2lkdGg6MnB4Oy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1zdHlsZTpzb2xpZDstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItcmFkaXVzOjA7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS01KTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItdGhlbWUtb24tY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItdGhlbWUtb24tYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi01KTstLW1vbnN0ZXItdGhlbWUtb2ZmLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtb2ZmLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci10aGVtZS1vbi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLXRoZW1lLW9uLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtb2ZmLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtb2ZmLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS01KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWJvcmRlci1zdHlsZTpzb2xpZDstLW1vbnN0ZXItYm9yZGVyLXdpZHRoOjNweDstLW1vbnN0ZXItYm9yZGVyLXJhZGl1czowOy0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZTotNHB4Oy0tbW9uc3Rlci16LWluZGV4LWRlZmF1bHQ6MDstLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lOjEwOy0tbW9uc3Rlci16LWluZGV4LWRyb3Bkb3duOjIwMDstLW1vbnN0ZXItei1pbmRleC1kcm9wZG93bi1vdmVybGF5OjIxMDstLW1vbnN0ZXItei1pbmRleC1zdGlja3k6MzAwOy0tbW9uc3Rlci16LWluZGV4LXN0aWNreS1vdmVybGF5OjMxMDstLW1vbnN0ZXItei1pbmRleC1maXhlZDo0MDA7LS1tb25zdGVyLXotaW5kZXgtZml4ZWQtb3ZlcmxheTo0MTA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtYmFja2Ryb3A6NTAwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLWJhY2tkcm9wLW92ZXJsYXk6NTEwOy0tbW9uc3Rlci16LWluZGV4LW9mZmNhbnZhczo2MDA7LS1tb25zdGVyLXotaW5kZXgtb2ZmY2FudmFzLW92ZXJsYXk6NjEwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsOjcwMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1vdmVybGF5OjcxMDstLW1vbnN0ZXItei1pbmRleC1wb3BvdmVyOjgwMDstLW1vbnN0ZXItei1pbmRleC1wb3BvdmVyLW92ZXJsYXk6ODEwOy0tbW9uc3Rlci16LWluZGV4LXRvb2x0aXA6ODAwOy0tbW9uc3Rlci16LWluZGV4LXRvb2x0aXAtb3ZlcmxheTo5MTA7LS1tb25zdGVyLXNwYWNlLTA6MDstLW1vbnN0ZXItc3BhY2UtMToycHg7LS1tb25zdGVyLXNwYWNlLTI6NHB4Oy0tbW9uc3Rlci1zcGFjZS0zOjZweDstLW1vbnN0ZXItc3BhY2UtNDoxMHB4Oy0tbW9uc3Rlci1zcGFjZS01OjE2cHg7LS1tb25zdGVyLXNwYWNlLTY6MjZweDstLW1vbnN0ZXItc3BhY2UtNzo0MnB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTA6NDgwcHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtNDo0ODBweDstLW1vbnN0ZXItYnJlYWtwb2ludC03Ojc2OHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTk6OTkycHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtMTI6MTIwMHB4Oy0tbW9uc3Rlci1kcmFnZ2VyLXdpZHRoOjJweDstLW1vbnN0ZXItZHJhZ2dlci1oYW5kbGUtd2lkdGg6NHB4Oy0tbW9uc3Rlci1kcmFnZ2VyLWhhbmRsZS1oZWlnaHQ6NTBweH1bZGF0YS1tb25zdGVyLXJvbGU9b3ZlcmxheV0uaGlkZS1lbXB0eXtkaXNwbGF5Om5vbmV9W2RhdGEtbW9uc3Rlci1yb2xlPW92ZXJsYXlde2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKTtoZWlnaHQ6MTAwJTtsZWZ0OjA7b3ZlcmZsb3cteDpoaWRkZW47cG9zaXRpb246Zml4ZWQ7dG9wOjA7dHJhbnNpdGlvbjouNXM7d2lkdGg6MDt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1vZmZjYW52YXMpfVtkYXRhLW1vbnN0ZXItcm9sZT1vdmVybGF5XSBbZGF0YS1tb25zdGVyLXJvbGU9b3ZlcmxheS1jbG9zZV17Y3Vyc29yOnBvaW50ZXI7aGVpZ2h0OjQwcHg7bGVmdDoxMHB4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxMHB4O3dpZHRoOjQwcHh9W2RhdGEtbW9uc3Rlci1yb2xlPW92ZXJsYXldIFtkYXRhLW1vbnN0ZXItcm9sZT1vdmVybGF5LWNsb3NlXTpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmJsb2NrO2hlaWdodDoxMDAlOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNMi4xNDYgMi44NTRhLjUuNSAwIDEgMSAuNzA4LS43MDhMOCA3LjI5M2w1LjE0Ni01LjE0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsNS4xNDcgNS4xNDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC01LjE0NiA1LjE0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4eicvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTIuMTQ2IDIuODU0YS41LjUgMCAxIDEgLjcwOC0uNzA4TDggNy4yOTNsNS4xNDYtNS4xNDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDUuMTQ3IDUuMTQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtNS4xNDYgNS4xNDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOHonLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPW92ZXJsYXktb3Blbl17Y3Vyc29yOnBvaW50ZXI7aGVpZ2h0OjQwcHg7bGVmdDoxMHB4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxMHB4O3dpZHRoOjQwcHh9W2RhdGEtbW9uc3Rlci1yb2xlPW92ZXJsYXktb3Blbl06YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTAwJTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTEgMmExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFIMmExIDEgMCAwIDEtMS0xem01IDBhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxSDdhMSAxIDAgMCAxLTEtMXptNSAwYTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMWgtMmExIDEgMCAwIDEtMS0xek0xIDdhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxSDJhMSAxIDAgMCAxLTEtMXptNSAwYTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMUg3YTEgMSAwIDAgMS0xLTF6bTUgMGExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFoLTJhMSAxIDAgMCAxLTEtMXpNMSAxMmExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFIMmExIDEgMCAwIDEtMS0xem01IDBhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxSDdhMSAxIDAgMCAxLTEtMXptNSAwYTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMWgtMmExIDEgMCAwIDEtMS0xeicvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTEgMmExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFIMmExIDEgMCAwIDEtMS0xem01IDBhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxSDdhMSAxIDAgMCAxLTEtMXptNSAwYTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMWgtMmExIDEgMCAwIDEtMS0xek0xIDdhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxSDJhMSAxIDAgMCAxLTEtMXptNSAwYTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMUg3YTEgMSAwIDAgMS0xLTF6bTUgMGExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFoLTJhMSAxIDAgMCAxLTEtMXpNMSAxMmExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFIMmExIDEgMCAwIDEtMS0xem01IDBhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxSDdhMSAxIDAgMCAxLTEtMXptNSAwYTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMWgtMmExIDEgMCAwIDEtMS0xeicvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9b3ZlcmxheV0ub3Blbnt3aWR0aDoxMDAlfSBcbn1gLFxuXHRcdDAsXG5cdCk7XG59IGNhdGNoIChlKSB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcihcImh0bWxcIiksXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRlICsgXCJcIixcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0Q3VzdG9tRWxlbWVudCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgXCIuLi9ub3RpZnkvbm90aWZ5Lm1qc1wiO1xuaW1wb3J0IHsgT3ZlcmxheVN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L292ZXJsYXkubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfUk9MRSB9IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtcblx0ZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQsXG5cdGZpcmVDdXN0b21FdmVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IE92ZXJsYXkgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgb3ZlcmxheUVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJvdmVybGF5RWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgb3ZlcmxheUNsb3NlRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcIm92ZXJsYXlDbG9zZXJFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBvdmVybGF5T3BlbkVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJvdmVybGF5T3BlbkVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNsb3NlRXZlbnRIYW5kbGVyU3ltYm9sID0gU3ltYm9sKFwiY2xvc2VFdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IG9wZW5FdmVudEhhbmRsZXJTeW1ib2wgPSBTeW1ib2woXCJvcGVuRXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfVkFMVUVfT1ZFUkxBWV9PUEVOID0gXCJvdmVybGF5LW9wZW5cIjtcblxuLyoqXG4gKiBUaGUgT3ZlcmxheSBjb21wb25lbnQgaXMgdXNlZCB0byBzaG93IGFuIG92ZXJsYXkgYW5kIGEgYnV0dG9uIHRvIG9wZW4gdGhlIG92ZXJsYXkuXG4gKlxuICogPGltZyBzcmM9XCIuL2ltYWdlcy9vdmVybGF5LnBuZ1wiPlxuICpcbiAqIERlcGVuZGVuY2llczogdGhlIHN5c3RlbSB1c2VzIGZ1bmN0aW9ucyBvZiB0aGUgW21vbnN0ZXJqc10oaHR0cHM6Ly9tb25zdGVyanMub3JnLykgbGlicmFyeVxuICpcbiAqIFlvdSBjYW4gY3JlYXRlIHRoaXMgY29udHJvbCBlaXRoZXIgYnkgc3BlY2lmeWluZyB0aGUgSFRNTCB0YWcgPG1vbnN0ZXItb3ZlcmxheSAvPmAgZGlyZWN0bHkgaW4gdGhlIEhUTUwgb3IgdXNpbmdcbiAqIEphdmFzY3JpcHQgdmlhIHRoZSBgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1vdmVybGF5Jyk7YCBtZXRob2QuXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItb3ZlcmxheT48L21vbnN0ZXItb3ZlcmxheT5cbiAqIGBgYFxuICpcbiAqIE9yIHlvdSBjYW4gY3JlYXRlIHRoaXMgQ3VzdG9tQ29udHJvbCBkaXJlY3RseSBpbiBKYXZhc2NyaXB0OlxuICpcbiAqIGBgYGpzXG4gKiBpbXBvcnQgJ0BzY2h1a2FpL2NvbXBvbmVudC1zdGF0ZS9zb3VyY2Uvb3ZlcmxheS5tanMnO1xuICogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1vdmVybGF5Jyk7XG4gKiBgYGBcbiAqXG4gKiBUaGUgQm9keSBzaG91bGQgaGF2ZSBhIGNsYXNzIFwiaGlkZGVuXCIgdG8gZW5zdXJlIHRoYXQgdGhlIHN0eWxlcyBhcmUgYXBwbGllZCBjb3JyZWN0bHkuXG4gKlxuICogYGBgY3NzXG4gKiBib2R5LmhpZGRlbiB7XG4gKiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAc3RhcnR1bWwgb3ZlcmxheS5wbmdcbiAqIHNraW5wYXJhbSBtb25vY2hyb21lIHRydWVcbiAqIHNraW5wYXJhbSBzaGFkb3dpbmcgZmFsc2VcbiAqIEhUTUxFbGVtZW50IDx8LS0gQ3VzdG9tRWxlbWVudFxuICogQ3VzdG9tRWxlbWVudCA8fC0tIEN1c3RvbUNvbnRyb2xcbiAqIEN1c3RvbUNvbnRyb2wgPHwtLSBPdmVybGF5XG4gKiBAZW5kdW1sXG4gKlxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgc2ltcGxlIG92ZXJsYXkgY29tcG9uZW50XG4gKiBAZmlyZXMgbW9uc3Rlci1vdmVybGF5LWJlZm9yZS1vcGVuXG4gKiBAZmlyZXMgbW9uc3Rlci1vdmVybGF5LW9wZW5cbiAqIEBmaXJlcyBtb25zdGVyLW92ZXJsYXktYmVmb3JlLWNsb3NlXG4gKiBAZmlyZXMgbW9uc3Rlci1vdmVybGF5LWNsb3NlZFxuICovXG5jbGFzcyBPdmVybGF5IGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2hvc3Qvb3ZlcmxheUBAaW5zdGFuY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgSFRNTCB0YWcsIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1vcHRpb25zYCBtdXN0IGJlIHVzZWQuXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZy9lbi9kb2MvI2NvbmZpZ3VyYXRlLWEtbW9uc3Rlci1jb250cm9sfVxuXHQgKlxuXHQgKiBUaGUgaW5kaXZpZHVhbCBjb25maWd1cmF0aW9uIHZhbHVlcyBjYW4gYmUgZm91bmQgaW4gdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIFRlbXBsYXRlIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbiBNYWluIHRlbXBsYXRlXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBjb250YWluZXIgQ29udGFpbmVyIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7YXJyYXl9IGNvbnRhaW5lciBDb250YWluZXIgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGNvbnRhaW5lcltdLm5hbWUgTmFtZSBvZiB0aGUgY29udGFpbmVyXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjb250YWluZXJbXS5jb250ZW50IENvbnRlbnQgb2YgdGhlIGNvbnRhaW5lclxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gY29udGFpbmVyW10uY2xhc3MgQ3NzIGNsYXNzIG9mIHRoZSBjb250YWluZXJcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGNsYXNzZXMgQ3NzIGNsYXNzZXNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGNsYXNzZXMuYm9keSBDc3MgY2xhc3MgdG8gaGlkZSB0aGUgYm9keS4gVGhpcyBjbGFzcyBpcyByZW1vdmVkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyByZWFkeS5cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGNsYXNzZXMub3ZlcmxheSBDc3MgY2xhc3MgdG8gaGlkZSB0aGUgb3ZlcmxheS4gVGhpcyBjbGFzcyBpcyByZW1vdmVkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyByZWFkeS5cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZlYXR1cmVzIEZlYXR1cmUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtib29sZWFufSBmZWF0dXJlcy5lc2NhcGVLZXkgSWYgdHJ1ZSB0aGUgb3ZlcmxheSBjYW4gYmUgY2xvc2VkIHdpdGggdGhlIGVzY2FwZSBrZXlcblx0ICogQHByb3BlcnR5IHtib29sZWFufSBmZWF0dXJlcy5vcGVuQnV0dG9uIElmIHRydWUgdGhlIG92ZXJsYXkgY2FuIGJlIG9wZW5lZCB3aXRoIGEgYnV0dG9uXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdH0sXG5cdFx0XHRvdmVybGF5OiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRuYW1lOiBcImNvbnRlbnRcIixcblx0XHRcdFx0XHRjb250ZW50OiBcIjxzbG90Pjwvc2xvdD5cIixcblx0XHRcdFx0XHRjbGFzczogXCJcIixcblx0XHRcdFx0fSxcblx0XHRcdF0sXG5cdFx0XHRjbGFzc2VzOiB7XG5cdFx0XHRcdGJvZHk6IFwiaGlkZGVuXCIsXG5cdFx0XHRcdG92ZXJsYXk6IFwiaGlkZS1lbXB0eVwiLFxuXHRcdFx0fSxcblx0XHRcdGZlYXR1cmVzOiB7XG5cdFx0XHRcdGVzY2FwZUtleTogdHJ1ZSxcblx0XHRcdFx0b3BlbkJ1dHRvbjogdHJ1ZSxcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGNvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cblx0XHQvKipcblx0XHQgKiBzaG93IHRoZSBzY3JvbGwgYmFyIGFsd2F5c1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICovXG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLm92ZXJmbG93WSA9IFwic2Nyb2xsXCI7XG5cblx0XHRjb25zdCBjbGFzc05hbWVzID0gdGhpcy5nZXRPcHRpb24oXCJjbGFzc2VzLmJvZHlcIik7XG5cblx0XHRpZiAoZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lcykpIHtcblx0XHRcdGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWVzKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkhvc3QuT3ZlcmxheX1cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcblx0XHRpbml0RXZlbnRIYW5kbGVyLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkhvc3QuT3ZlcmxheX1cblx0ICovXG5cdHRvZ2dsZSgpIHtcblx0XHRpZiAodGhpc1tvdmVybGF5RWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmNvbnRhaW5zKFwib3BlblwiKSkge1xuXHRcdFx0dGhpcy5jbG9zZSgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm9wZW4oKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkhvc3QuT3ZlcmxheX1cblx0ICogQGZpcmVzIG1vbnN0ZXItb3ZlcmxheS1iZWZvcmUtb3BlblxuXHQgKiBAZmlyZXMgbW9uc3Rlci1vdmVybGF5LW9wZW5cblx0ICogQGZpcmVzIG1vbnN0ZXItb3ZlcmxheS1iZWZvcmUtY2xvc2Vcblx0ICogQGZpcmVzIG1vbnN0ZXItb3ZlcmxheS1jbG9zZWRcblx0ICovXG5cdG9wZW4oKSB7XG5cdFx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci1vdmVybGF5LWJlZm9yZS1vcGVuXCIsIHt9KTtcblxuXHRcdHRoaXNbb3ZlcmxheUVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5yZW1vdmUoXCJoaWRlLWVtcHR5XCIpO1xuXG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHR0aGlzW292ZXJsYXlFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuYWRkKFwib3BlblwiKTtcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLW92ZXJsYXktb3BlblwiLCB7fSk7XG5cdFx0XHR9LCAwKTtcblx0XHR9LCAwKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0Lk92ZXJsYXl9XG5cdCAqL1xuXHRjbG9zZSgpIHtcblx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLW92ZXJsYXktYmVmb3JlLWNsb3NlXCIsIHt9KTtcblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdHRoaXNbb3ZlcmxheUVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5yZW1vdmUoXCJvcGVuXCIpO1xuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItb3ZlcmxheS1jbG9zZWRcIiwge30pO1xuXHRcdFx0fSwgMCk7XG5cdFx0fSwgMCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLW92ZXJsYXlcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtDU1NTdHlsZVNoZWV0W119XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW092ZXJsYXlTdHlsZVNoZWV0XTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtTZWxlY3R9XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdHRoaXNbb3ZlcmxheUVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LmdldEVsZW1lbnRCeUlkKFwib3ZlcmxheVwiKTtcblx0dGhpc1tvdmVybGF5Q2xvc2VFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdFwiW2RhdGEtbW9uc3Rlci1yb2xlPW92ZXJsYXktY2xvc2VdXCIsXG5cdCk7XG5cdHRoaXNbb3ZlcmxheU9wZW5FbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdFwiW2RhdGEtbW9uc3Rlci1yb2xlPW92ZXJsYXktb3Blbl1cIixcblx0KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpbml0RXZlbnRIYW5kbGVyKCkge1xuXHQvKipcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICovXG5cdHRoaXNbY2xvc2VFdmVudEhhbmRsZXJTeW1ib2xdID0gKGV2ZW50KSA9PiB7XG5cdFx0dGhpcy5jbG9zZSgpO1xuXHR9O1xuXG5cdHRoaXNbb3ZlcmxheUNsb3NlRWxlbWVudFN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcblx0XHRcImNsaWNrXCIsXG5cdFx0dGhpc1tjbG9zZUV2ZW50SGFuZGxlclN5bWJvbF0sXG5cdCk7XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG5cdCAqL1xuXHR0aGlzW29wZW5FdmVudEhhbmRsZXJTeW1ib2xdID0gKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgZWxlbWVudCA9IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KFxuXHRcdFx0ZXZlbnQsXG5cdFx0XHRBVFRSSUJVVEVfUk9MRSxcblx0XHRcdEFUVFJJQlVURV9WQUxVRV9PVkVSTEFZX09QRU4sXG5cdFx0KTtcblx0XHRpZiAoZWxlbWVudCkge1xuXHRcdFx0dGhpcy5vcGVuKCk7XG5cdFx0fVxuXHR9O1xuXG5cdHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXNbb3BlbkV2ZW50SGFuZGxlclN5bWJvbF0pO1xuXG5cdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLmVzY2FwZUtleVwiKSA9PT0gdHJ1ZSkge1xuXHRcdHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgKGV2ZW50KSA9PiB7XG5cdFx0XHRpZiAoZXZlbnQua2V5ID09PSBcIkVzY2FwZVwiKSB7XG5cdFx0XHRcdGNvbnN0IGlzTm90Q29tYmluZWRLZXkgPSAhKFxuXHRcdFx0XHRcdGV2ZW50LmN0cmxLZXkgfHxcblx0XHRcdFx0XHRldmVudC5hbHRLZXkgfHxcblx0XHRcdFx0XHRldmVudC5zaGlmdEtleVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoaXNOb3RDb21iaW5lZEtleSkge1xuXHRcdFx0XHRcdHRoaXMudG9nZ2xlT3ZlcmxheSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuICAgICAgICA8dGVtcGxhdGUgaWQ9XCJob3N0LW92ZXJsYXlcIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmhvc3Qtb3ZlcmxheS5jb250ZW50XCJcbiAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJwYXJ0IHBhdGg6aG9zdC1vdmVybGF5Lm5hbWUsIGRhdGEtbW9uc3Rlci1yb2xlIHBhdGg6aG9zdC1jb250YWluZXIub3ZlcmxheVwiPjwvZGl2PlxuICAgICAgICA8L3RlbXBsYXRlPlxuXG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJvdmVybGF5LW9wZW5cIiBwYXJ0PVwib3BlblwiXG5cdFx0XHQgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJjbGFzcyBwYXRoOmZlYXR1cmVzLm9wZW5CdXR0b24gfCBpZjp2aXNpYmxlOmhpZGRlblwiPjwvZGl2PlxuXG4gICAgICAgIDxkaXYgaWQ9XCJvdmVybGF5XCIgZGF0YS1tb25zdGVyLXJvbGU9XCJvdmVybGF5XCIgcGFydD1cIm92ZXJsYXlcIiBkYXRhLW1vbnN0ZXItaW5zZXJ0PVwiaG9zdC1vdmVybGF5IHBhdGg6b3ZlcmxheVwiXG4gICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJjbGFzcyBwYXRoOmNsYXNzZXMub3ZlcmxheVwiPlxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cIm92ZXJsYXktY2xvc2VcIiBwYXJ0PVwiY2xvc2VcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+YDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KE92ZXJsYXkpO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGdldFdpbmRvdyB9IGZyb20gXCIuLi8uLi9kb20vdXRpbC5tanNcIjtcblxuZXhwb3J0IHsgZ2VuZXJhdGVVbmlxdWVDb25maWdLZXkgfTtcblxuLyoqXG4gKiBHZW5lcmF0ZSBhIHVuaXF1ZSBjb25maWd1cmF0aW9uIGtleSBiYXNlZCBvbiB0aGUgY3VycmVudCBicm93c2VyIGxvY2F0aW9uLFxuICogY29tcG9uZW50IG5hbWUsIGlkLCBhbmQgYSBwcmVmaXguXG4gKlxuICogQHNpbmNlIDMuNTUuMCB0aGUgZnVuY3Rpb24gcmVtb3ZlIHRoZSBoYXNoIGZyb20gdGhlIGtleVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21wb25lbnROYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGNvbXBvbmVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpZCAtIEEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBjb21wb25lbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4IC0gQSBwcmVmaXggdG8gdXNlIGluIHRoZSB1bmlxdWUga2V5LlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgZ2VuZXJhdGVkIHVuaXF1ZSBjb25maWd1cmF0aW9uIGtleS5cbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVVbmlxdWVDb25maWdLZXkoY29tcG9uZW50TmFtZSwgaWQsIHByZWZpeCkge1xuXHQvLyBHZXQgdGhlIGJyb3dzZXIgbG9jYXRpb24gd2l0aG91dCBwYXJhbWV0ZXJzXG5cdGNvbnN0IHVybFdpdGhvdXRQYXJhbXMgPSBnZXRXaW5kb3coKS5sb2NhdGlvbi5ocmVmLnNwbGl0KFwiP1wiKVswXTtcblxuXHQvLyBXaXRob3V0IGhhc2ggKHNpbmNlIDMuNTUuMClcblx0Y29uc3QgdXJsV2l0aG91dFBhcmFtc0FuZEhhc2ggPSB1cmxXaXRob3V0UGFyYW1zLnNwbGl0KFwiI1wiKVswXTtcblxuXHQvLyBDb21iaW5lIHRoZSBwYXJ0cyB0byBjcmVhdGUgYSB1bmlxdWUga2V5XG5cdGNvbnN0IHVuaXF1ZUtleSA9IGAke3ByZWZpeH1fJHt1cmxXaXRob3V0UGFyYW1zQW5kSGFzaH1fJHtjb21wb25lbnROYW1lfV8ke2lkfWA7XG5cblx0Ly8gUmVwbGFjZSBhbnkgc3BlY2lhbCBjaGFyYWN0ZXJzIGFuZCBzcGFjZXMgd2l0aCB1bmRlcnNjb3Jlc1xuXHRyZXR1cm4gdW5pcXVlS2V5LnJlcGxhY2UoL1teXFx3XFxzXS9naSwgXCJfXCIpLnJlcGxhY2UoL1xccysvZywgXCJfXCIpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywgMjAyNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IERldGFpbHNTdHlsZVNoZWV0IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBEZXRhaWxzU3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG5cdERldGFpbHNTdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIGRldGFpbHMgeyBcbjp3aGVyZShodG1sKXtsaW5lLWhlaWdodDoxLjE1Oy13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlOy1tb3otdGV4dC1zaXplLWFkanVzdDoxMDAlO3RleHQtc2l6ZS1hZGp1c3Q6MTAwJX06d2hlcmUoaDEpe2ZvbnQtc2l6ZToyZW07bWFyZ2luLWJsb2NrLWVuZDouNjdlbTttYXJnaW4tYmxvY2stc3RhcnQ6LjY3ZW19OndoZXJlKGRsLG9sLHVsKSA6d2hlcmUoZGwsb2wsdWwpe21hcmdpbi1ibG9jay1lbmQ6MDttYXJnaW4tYmxvY2stc3RhcnQ6MH06d2hlcmUoaHIpe2JveC1zaXppbmc6Y29udGVudC1ib3g7Y29sb3I6aW5oZXJpdDtoZWlnaHQ6MH06d2hlcmUoYWJiclt0aXRsZV0pe3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7LXdlYmtpdC10ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZH06d2hlcmUoYixzdHJvbmcpe2ZvbnQtd2VpZ2h0OmJvbGRlcn06d2hlcmUoY29kZSxrYmQscHJlLHNhbXApe2ZvbnQtZmFtaWx5Om1vbm9zcGFjZSxtb25vc3BhY2U7Zm9udC1zaXplOjFlbX06d2hlcmUoc21hbGwpe2ZvbnQtc2l6ZTo4MCV9OndoZXJlKHRhYmxlKXtib3JkZXItY29sb3I6Y3VycmVudENvbG9yO3RleHQtaW5kZW50OjB9OndoZXJlKGJ1dHRvbixpbnB1dCxzZWxlY3Qpe21hcmdpbjowfTp3aGVyZShidXR0b24pe3RleHQtdHJhbnNmb3JtOm5vbmV9OndoZXJlKGJ1dHRvbixpbnB1dDppcyhbdHlwZT1idXR0b24gaV0sW3R5cGU9cmVzZXQgaV0sW3R5cGU9c3VibWl0IGldKSl7LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbn06d2hlcmUocHJvZ3Jlc3Mpe3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfTp3aGVyZShzZWxlY3Qpe3RleHQtdHJhbnNmb3JtOm5vbmV9OndoZXJlKHRleHRhcmVhKXttYXJnaW46MH06d2hlcmUoaW5wdXRbdHlwZT1zZWFyY2ggaV0pey13ZWJraXQtYXBwZWFyYW5jZTp0ZXh0ZmllbGQ7b3V0bGluZS1vZmZzZXQ6LTJweH06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfTo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjppbmhlcml0O29wYWNpdHk6LjU0fTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b247Zm9udDppbmhlcml0fTp3aGVyZShidXR0b24saW5wdXQ6aXMoW3R5cGU9YnV0dG9uIGldLFt0eXBlPWNvbG9yIGldLFt0eXBlPXJlc2V0IGldLFt0eXBlPXN1Ym1pdCBpXSkpOjotbW96LWZvY3VzLWlubmVye2JvcmRlci1zdHlsZTpub25lO3BhZGRpbmc6MH06d2hlcmUoYnV0dG9uLGlucHV0OmlzKFt0eXBlPWJ1dHRvbiBpXSxbdHlwZT1jb2xvciBpXSxbdHlwZT1yZXNldCBpXSxbdHlwZT1zdWJtaXQgaV0pKTo6LW1vei1mb2N1c3Jpbmd7b3V0bGluZToxcHggZG90dGVkIEJ1dHRvblRleHR9OndoZXJlKDotbW96LXVpLWludmFsaWQpe2JveC1zaGFkb3c6bm9uZX06d2hlcmUoZGlhbG9nKXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOnNvbGlkO2NvbG9yOiMwMDA7aGVpZ2h0Oi1tb3otZml0LWNvbnRlbnQ7aGVpZ2h0OmZpdC1jb250ZW50O2xlZnQ6MDttYXJnaW46YXV0bztwYWRkaW5nOjFlbTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3dpZHRoOi1tb3otZml0LWNvbnRlbnQ7d2lkdGg6Zml0LWNvbnRlbnR9OndoZXJlKGRpYWxvZzpub3QoW29wZW5dKSl7ZGlzcGxheTpub25lfTp3aGVyZShzdW1tYXJ5KXtkaXNwbGF5Omxpc3QtaXRlbX1odG1se2hlaWdodDoxMDAlfWJvZHksaHRtbHttaW4taGVpZ2h0OmNhbGMoMTAwdmggLSA0MHB4KX1ib2R5e2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXJnaW46MDtwYWRkaW5nOjA7d29yZC1icmVhazpicmVhay13b3JkfS5ibG9ja3tkaXNwbGF5OmJsb2NrfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uZ3JpZHtkaXNwbGF5OmdyaWR9LmlubGluZS1ncmlke2Rpc3BsYXk6aW5saW5lLWdyaWR9LmZsZXh7ZGlzcGxheTpmbGV4fS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS5oaWRkZW4sLmhpZGUsLm5vbmV7ZGlzcGxheTpub25lfS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS5tb25zdGVyLWJ1dHRvbi1wcmltYXJ5LGJ1dHRvbnthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofS5tb25zdGVyLWJ1dHRvbi1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1zZWNvbmRhcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYnV0dG9uLXNlY29uZGFyeSwubW9uc3Rlci1idXR0b24tdGVydGlhcnl7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtcG9zaXRpb246NTAlO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7Z2FwOi40cmVtO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MS41O291dGxpbmU6bm9uZTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzouMzc1cmVtIC43NXJlbTtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3dpZHRoOi13ZWJraXQtZmlsbC1hdmFpbGFibGU7d2lkdGg6LW1vei1hdmFpbGFibGU7d2lkdGg6c3RyZXRjaH0ubW9uc3Rlci1idXR0b24tdGVydGlhcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1idXR0b24tb3V0bGluZS1wcmltYXJ5LC5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXNlY29uZGFyeXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXNlY29uZGFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1idXR0b24tb3V0bGluZS10ZXJ0aWFyeXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpO2JhY2tncm91bmQtcG9zaXRpb246NTAlO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofWJ1dHRvbjphY3RpdmUsYnV0dG9uOmhvdmVye2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTIpO3RyYW5zaXRpb246YmFja2dyb3VuZCAuOHMsY29sb3IgLjI1cyAuMDgzMzMzMzMzM3N9YnV0dG9uOmFjdGl2ZXt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lKX0ubW9uc3Rlci1idXR0b24tYmFyLC5tb25zdGVyLWJ1dHRvbi1ncm91cHthbGlnbi1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpzdHJldGNoO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOm5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0ubW9uc3Rlci1idXR0b24tZ3JvdXB7Ym94LXNpemluZzpib3JkZXItYm94O2dhcDowO21hcmdpbjoxcmVtIDB9Lm1vbnN0ZXItYnV0dG9uLWdyb3VwPjpub3QoOmxhc3QtY2hpbGQpe21hcmdpbi1yaWdodDpjYWxjKHZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSotMSl9Lm1vbnN0ZXItYnV0dG9uLWdyb3VwIDpob3Zlcntib3gtc2hhZG93Om5vbmV9YnV0dG9uOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00KTtvdXRsaW5lLW9mZnNldDoycHg7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtb3V0bGluZSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpsaWdodCl7YnV0dG9uOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKTtvdXRsaW5lLW9mZnNldDoycHg7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtb3V0bGluZSl9fVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3V0bGluZTpub25lO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXh7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9Omhvc3R7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6YmxvY2t9OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LFxcXCJRdWlja3NhbmRcXFwiLFxcXCJTZWdvZSBVSVxcXCIsXFxcIlJvYm90b1xcXCIsXFxcIk94eWdlblxcXCIsXFxcIlVidW50dVxcXCIsXFxcIkNhbnRhcmVsbFxcXCIsXFxcIkZpcmEgU2Fuc1xcXCIsXFxcIkRyb2lkIFNhbnNcXFwiLFxcXCJIZWx2ZXRpY2EgTmV1ZVxcXCIsQXJpYWwsc2Fucy1zZXJpZixcXFwiQXBwbGUgQ29sb3IgRW1vamlcXFwiLFxcXCJTZWdvZSBVSSBFbW9qaVxcXCIsXFxcIlNlZ29lIFVJIFN5bWJvbFxcXCI7LS1tb25zdGVyLWZvbnQtZmFtaWx5LW1vbm9zcGFjZTpcXFwiQ29uc29sYXNcXFwiLFxcXCJDb3VyaWVyIE5ld1xcXCIsXFxcIlJvYm90byBNb25vXFxcIixcXFwiU291cmNlIENvZGUgUHJvXFxcIixcXFwiRmlyYSBNb25vXFxcIixtb25vc3BhY2U7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTYpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTQpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi02KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0yKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTIpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi00KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMyl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS00KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTYpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTIpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMyk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS00KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTYpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNil9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0xOiM4MzNhYjQ7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTI6I2ZkMWQxZDstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMzojZmNiMDQ1Oy0tbW9uc3Rlci1ib3gtc2hhZG93LTE6bm9uZTstLW1vbnN0ZXItYm94LXNoYWRvdy0yOi0xcHggMXB4IDEwcHggMXB4IGhzbGEoMCwwJSw3NiUsLjYxKTstLW1vbnN0ZXItdGV4dC1zaGFkb3c6bm9uZTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTEpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtNik7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC02KTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTIpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci13aWR0aDoycHg7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXN0eWxlOnNvbGlkOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1yYWRpdXM6MDstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTUpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWhvdmVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNil9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci10aGVtZS1vbi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci10aGVtZS1vbi1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpOy0tbW9uc3Rlci10aGVtZS1vZmYtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1vZmYtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLXRoZW1lLW9uLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItdGhlbWUtb24tYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1vZmYtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1vZmYtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTUpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItYm9yZGVyLXN0eWxlOnNvbGlkOy0tbW9uc3Rlci1ib3JkZXItd2lkdGg6M3B4Oy0tbW9uc3Rlci1ib3JkZXItcmFkaXVzOjA7LS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlOi00cHg7LS1tb25zdGVyLXotaW5kZXgtZGVmYXVsdDowOy0tbW9uc3Rlci16LWluZGV4LW91dGxpbmU6MTA7LS1tb25zdGVyLXotaW5kZXgtZHJvcGRvd246MjAwOy0tbW9uc3Rlci16LWluZGV4LWRyb3Bkb3duLW92ZXJsYXk6MjEwOy0tbW9uc3Rlci16LWluZGV4LXN0aWNreTozMDA7LS1tb25zdGVyLXotaW5kZXgtc3RpY2t5LW92ZXJsYXk6MzEwOy0tbW9uc3Rlci16LWluZGV4LWZpeGVkOjQwMDstLW1vbnN0ZXItei1pbmRleC1maXhlZC1vdmVybGF5OjQxMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1iYWNrZHJvcDo1MDA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtYmFja2Ryb3Atb3ZlcmxheTo1MTA7LS1tb25zdGVyLXotaW5kZXgtb2ZmY2FudmFzOjYwMDstLW1vbnN0ZXItei1pbmRleC1vZmZjYW52YXMtb3ZlcmxheTo2MTA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWw6NzAwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLW92ZXJsYXk6NzEwOy0tbW9uc3Rlci16LWluZGV4LXBvcG92ZXI6ODAwOy0tbW9uc3Rlci16LWluZGV4LXBvcG92ZXItb3ZlcmxheTo4MTA7LS1tb25zdGVyLXotaW5kZXgtdG9vbHRpcDo4MDA7LS1tb25zdGVyLXotaW5kZXgtdG9vbHRpcC1vdmVybGF5OjkxMDstLW1vbnN0ZXItc3BhY2UtMDowOy0tbW9uc3Rlci1zcGFjZS0xOjJweDstLW1vbnN0ZXItc3BhY2UtMjo0cHg7LS1tb25zdGVyLXNwYWNlLTM6NnB4Oy0tbW9uc3Rlci1zcGFjZS00OjEwcHg7LS1tb25zdGVyLXNwYWNlLTU6MTZweDstLW1vbnN0ZXItc3BhY2UtNjoyNnB4Oy0tbW9uc3Rlci1zcGFjZS03OjQycHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtMDo0ODBweDstLW1vbnN0ZXItYnJlYWtwb2ludC00OjQ4MHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTc6NzY4cHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtOTo5OTJweDstLW1vbnN0ZXItYnJlYWtwb2ludC0xMjoxMjAwcHg7LS1tb25zdGVyLWRyYWdnZXItd2lkdGg6MnB4Oy0tbW9uc3Rlci1kcmFnZ2VyLWhhbmRsZS13aWR0aDo0cHg7LS1tb25zdGVyLWRyYWdnZXItaGFuZGxlLWhlaWdodDo1MHB4fXNwYW4ubW9uc3Rlci1meC1yaXBwbGV7YW5pbWF0aW9uOm1vbnN0ZXItZngtcmlwcGxlIC42cyBsaW5lYXI7YmFja2dyb3VuZC1jb2xvcjpoc2xhKDAsMCUsMTAwJSwuNyk7Ym9yZGVyLXJhZGl1czo1MCU7cG9zaXRpb246YWJzb2x1dGU7dHJhbnNmb3JtOnNjYWxlKDApfUBrZXlmcmFtZXMgbW9uc3Rlci1meC1yaXBwbGV7dG97b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSg0KX19W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0gXG59YCxcblx0XHQwLFxuXHQpO1xufSBjYXRjaCAoZSkge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpLFxuXHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0ZSArIFwiXCIsXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgQVRUUklCVVRFX1BSRUZJWCB9IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG4vKipcbiAqIFRoaXMgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItYnV0dG9uLWxhYmVsYCBjYW4gYmUgdXNlZCB0byBwYXNzIGxhYmVscy5cbiAqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfQlVUVE9OX0xBQkVMID0gYCR7QVRUUklCVVRFX1BSRUZJWH1idXR0b24tbGFiZWxgO1xuXG5leHBvcnQgeyBBVFRSSUJVVEVfQlVUVE9OX0xBQkVMIH07XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCAyMDI0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqL1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgQ29sbGFwc2VTdHlsZVNoZWV0IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBDb2xsYXBzZVN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRDb2xsYXBzZVN0eWxlU2hlZXQuaW5zZXJ0UnVsZShcblx0XHRgXG5AbGF5ZXIgY29sbGFwc2UgeyBcbjp3aGVyZShodG1sKXtsaW5lLWhlaWdodDoxLjE1Oy13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlOy1tb3otdGV4dC1zaXplLWFkanVzdDoxMDAlO3RleHQtc2l6ZS1hZGp1c3Q6MTAwJX06d2hlcmUoaDEpe2ZvbnQtc2l6ZToyZW07bWFyZ2luLWJsb2NrLWVuZDouNjdlbTttYXJnaW4tYmxvY2stc3RhcnQ6LjY3ZW19OndoZXJlKGRsLG9sLHVsKSA6d2hlcmUoZGwsb2wsdWwpe21hcmdpbi1ibG9jay1lbmQ6MDttYXJnaW4tYmxvY2stc3RhcnQ6MH06d2hlcmUoaHIpe2JveC1zaXppbmc6Y29udGVudC1ib3g7Y29sb3I6aW5oZXJpdDtoZWlnaHQ6MH06d2hlcmUoYWJiclt0aXRsZV0pe3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7LXdlYmtpdC10ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZH06d2hlcmUoYixzdHJvbmcpe2ZvbnQtd2VpZ2h0OmJvbGRlcn06d2hlcmUoY29kZSxrYmQscHJlLHNhbXApe2ZvbnQtZmFtaWx5Om1vbm9zcGFjZSxtb25vc3BhY2U7Zm9udC1zaXplOjFlbX06d2hlcmUoc21hbGwpe2ZvbnQtc2l6ZTo4MCV9OndoZXJlKHRhYmxlKXtib3JkZXItY29sb3I6Y3VycmVudENvbG9yO3RleHQtaW5kZW50OjB9OndoZXJlKGJ1dHRvbixpbnB1dCxzZWxlY3Qpe21hcmdpbjowfTp3aGVyZShidXR0b24pe3RleHQtdHJhbnNmb3JtOm5vbmV9OndoZXJlKGJ1dHRvbixpbnB1dDppcyhbdHlwZT1idXR0b24gaV0sW3R5cGU9cmVzZXQgaV0sW3R5cGU9c3VibWl0IGldKSl7LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbn06d2hlcmUocHJvZ3Jlc3Mpe3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfTp3aGVyZShzZWxlY3Qpe3RleHQtdHJhbnNmb3JtOm5vbmV9OndoZXJlKHRleHRhcmVhKXttYXJnaW46MH06d2hlcmUoaW5wdXRbdHlwZT1zZWFyY2ggaV0pey13ZWJraXQtYXBwZWFyYW5jZTp0ZXh0ZmllbGQ7b3V0bGluZS1vZmZzZXQ6LTJweH06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfTo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjppbmhlcml0O29wYWNpdHk6LjU0fTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b247Zm9udDppbmhlcml0fTp3aGVyZShidXR0b24saW5wdXQ6aXMoW3R5cGU9YnV0dG9uIGldLFt0eXBlPWNvbG9yIGldLFt0eXBlPXJlc2V0IGldLFt0eXBlPXN1Ym1pdCBpXSkpOjotbW96LWZvY3VzLWlubmVye2JvcmRlci1zdHlsZTpub25lO3BhZGRpbmc6MH06d2hlcmUoYnV0dG9uLGlucHV0OmlzKFt0eXBlPWJ1dHRvbiBpXSxbdHlwZT1jb2xvciBpXSxbdHlwZT1yZXNldCBpXSxbdHlwZT1zdWJtaXQgaV0pKTo6LW1vei1mb2N1c3Jpbmd7b3V0bGluZToxcHggZG90dGVkIEJ1dHRvblRleHR9OndoZXJlKDotbW96LXVpLWludmFsaWQpe2JveC1zaGFkb3c6bm9uZX06d2hlcmUoZGlhbG9nKXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOnNvbGlkO2NvbG9yOiMwMDA7aGVpZ2h0Oi1tb3otZml0LWNvbnRlbnQ7aGVpZ2h0OmZpdC1jb250ZW50O2xlZnQ6MDttYXJnaW46YXV0bztwYWRkaW5nOjFlbTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3dpZHRoOi1tb3otZml0LWNvbnRlbnQ7d2lkdGg6Zml0LWNvbnRlbnR9OndoZXJlKGRpYWxvZzpub3QoW29wZW5dKSl7ZGlzcGxheTpub25lfTp3aGVyZShzdW1tYXJ5KXtkaXNwbGF5Omxpc3QtaXRlbX1odG1se2hlaWdodDoxMDAlfWJvZHksaHRtbHttaW4taGVpZ2h0OmNhbGMoMTAwdmggLSA0MHB4KX1ib2R5e2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXJnaW46MDtwYWRkaW5nOjA7d29yZC1icmVhazpicmVhay13b3JkfS5ibG9ja3tkaXNwbGF5OmJsb2NrfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uZ3JpZHtkaXNwbGF5OmdyaWR9LmlubGluZS1ncmlke2Rpc3BsYXk6aW5saW5lLWdyaWR9LmZsZXh7ZGlzcGxheTpmbGV4fS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS5oaWRkZW4sLmhpZGUsLm5vbmV7ZGlzcGxheTpub25lfS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS5tb25zdGVyLWJ1dHRvbi1wcmltYXJ5LGJ1dHRvbnthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofS5tb25zdGVyLWJ1dHRvbi1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1zZWNvbmRhcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYnV0dG9uLXNlY29uZGFyeSwubW9uc3Rlci1idXR0b24tdGVydGlhcnl7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtcG9zaXRpb246NTAlO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7Z2FwOi40cmVtO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MS41O291dGxpbmU6bm9uZTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzouMzc1cmVtIC43NXJlbTtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3dpZHRoOi13ZWJraXQtZmlsbC1hdmFpbGFibGU7d2lkdGg6LW1vei1hdmFpbGFibGU7d2lkdGg6c3RyZXRjaH0ubW9uc3Rlci1idXR0b24tdGVydGlhcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1idXR0b24tb3V0bGluZS1wcmltYXJ5LC5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXNlY29uZGFyeXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXNlY29uZGFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1idXR0b24tb3V0bGluZS10ZXJ0aWFyeXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpO2JhY2tncm91bmQtcG9zaXRpb246NTAlO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofWJ1dHRvbjphY3RpdmUsYnV0dG9uOmhvdmVye2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTIpO3RyYW5zaXRpb246YmFja2dyb3VuZCAuOHMsY29sb3IgLjI1cyAuMDgzMzMzMzMzM3N9YnV0dG9uOmFjdGl2ZXt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lKX0ubW9uc3Rlci1idXR0b24tYmFyLC5tb25zdGVyLWJ1dHRvbi1ncm91cHthbGlnbi1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpzdHJldGNoO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOm5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0ubW9uc3Rlci1idXR0b24tZ3JvdXB7Ym94LXNpemluZzpib3JkZXItYm94O2dhcDowO21hcmdpbjoxcmVtIDB9Lm1vbnN0ZXItYnV0dG9uLWdyb3VwPjpub3QoOmxhc3QtY2hpbGQpe21hcmdpbi1yaWdodDpjYWxjKHZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSotMSl9Lm1vbnN0ZXItYnV0dG9uLWdyb3VwIDpob3Zlcntib3gtc2hhZG93Om5vbmV9YnV0dG9uOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00KTtvdXRsaW5lLW9mZnNldDoycHg7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtb3V0bGluZSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpsaWdodCl7YnV0dG9uOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKTtvdXRsaW5lLW9mZnNldDoycHg7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtb3V0bGluZSl9fVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3V0bGluZTpub25lO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXh7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9Omhvc3R7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6YmxvY2t9OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LFxcXCJRdWlja3NhbmRcXFwiLFxcXCJTZWdvZSBVSVxcXCIsXFxcIlJvYm90b1xcXCIsXFxcIk94eWdlblxcXCIsXFxcIlVidW50dVxcXCIsXFxcIkNhbnRhcmVsbFxcXCIsXFxcIkZpcmEgU2Fuc1xcXCIsXFxcIkRyb2lkIFNhbnNcXFwiLFxcXCJIZWx2ZXRpY2EgTmV1ZVxcXCIsQXJpYWwsc2Fucy1zZXJpZixcXFwiQXBwbGUgQ29sb3IgRW1vamlcXFwiLFxcXCJTZWdvZSBVSSBFbW9qaVxcXCIsXFxcIlNlZ29lIFVJIFN5bWJvbFxcXCI7LS1tb25zdGVyLWZvbnQtZmFtaWx5LW1vbm9zcGFjZTpcXFwiQ29uc29sYXNcXFwiLFxcXCJDb3VyaWVyIE5ld1xcXCIsXFxcIlJvYm90byBNb25vXFxcIixcXFwiU291cmNlIENvZGUgUHJvXFxcIixcXFwiRmlyYSBNb25vXFxcIixtb25vc3BhY2U7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTYpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTQpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi02KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0yKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTIpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi00KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMyl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS00KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTYpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTIpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMyk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS00KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTYpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNil9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0xOiM4MzNhYjQ7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTI6I2ZkMWQxZDstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMzojZmNiMDQ1Oy0tbW9uc3Rlci1ib3gtc2hhZG93LTE6bm9uZTstLW1vbnN0ZXItYm94LXNoYWRvdy0yOi0xcHggMXB4IDEwcHggMXB4IGhzbGEoMCwwJSw3NiUsLjYxKTstLW1vbnN0ZXItdGV4dC1zaGFkb3c6bm9uZTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTEpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtNik7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC02KTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTIpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci13aWR0aDoycHg7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXN0eWxlOnNvbGlkOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1yYWRpdXM6MDstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTUpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWhvdmVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNil9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci10aGVtZS1vbi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci10aGVtZS1vbi1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpOy0tbW9uc3Rlci10aGVtZS1vZmYtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1vZmYtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLXRoZW1lLW9uLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItdGhlbWUtb24tYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1vZmYtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1vZmYtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTUpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItYm9yZGVyLXN0eWxlOnNvbGlkOy0tbW9uc3Rlci1ib3JkZXItd2lkdGg6M3B4Oy0tbW9uc3Rlci1ib3JkZXItcmFkaXVzOjA7LS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlOi00cHg7LS1tb25zdGVyLXotaW5kZXgtZGVmYXVsdDowOy0tbW9uc3Rlci16LWluZGV4LW91dGxpbmU6MTA7LS1tb25zdGVyLXotaW5kZXgtZHJvcGRvd246MjAwOy0tbW9uc3Rlci16LWluZGV4LWRyb3Bkb3duLW92ZXJsYXk6MjEwOy0tbW9uc3Rlci16LWluZGV4LXN0aWNreTozMDA7LS1tb25zdGVyLXotaW5kZXgtc3RpY2t5LW92ZXJsYXk6MzEwOy0tbW9uc3Rlci16LWluZGV4LWZpeGVkOjQwMDstLW1vbnN0ZXItei1pbmRleC1maXhlZC1vdmVybGF5OjQxMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1iYWNrZHJvcDo1MDA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtYmFja2Ryb3Atb3ZlcmxheTo1MTA7LS1tb25zdGVyLXotaW5kZXgtb2ZmY2FudmFzOjYwMDstLW1vbnN0ZXItei1pbmRleC1vZmZjYW52YXMtb3ZlcmxheTo2MTA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWw6NzAwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLW92ZXJsYXk6NzEwOy0tbW9uc3Rlci16LWluZGV4LXBvcG92ZXI6ODAwOy0tbW9uc3Rlci16LWluZGV4LXBvcG92ZXItb3ZlcmxheTo4MTA7LS1tb25zdGVyLXotaW5kZXgtdG9vbHRpcDo4MDA7LS1tb25zdGVyLXotaW5kZXgtdG9vbHRpcC1vdmVybGF5OjkxMDstLW1vbnN0ZXItc3BhY2UtMDowOy0tbW9uc3Rlci1zcGFjZS0xOjJweDstLW1vbnN0ZXItc3BhY2UtMjo0cHg7LS1tb25zdGVyLXNwYWNlLTM6NnB4Oy0tbW9uc3Rlci1zcGFjZS00OjEwcHg7LS1tb25zdGVyLXNwYWNlLTU6MTZweDstLW1vbnN0ZXItc3BhY2UtNjoyNnB4Oy0tbW9uc3Rlci1zcGFjZS03OjQycHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtMDo0ODBweDstLW1vbnN0ZXItYnJlYWtwb2ludC00OjQ4MHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTc6NzY4cHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtOTo5OTJweDstLW1vbnN0ZXItYnJlYWtwb2ludC0xMjoxMjAwcHg7LS1tb25zdGVyLWRyYWdnZXItd2lkdGg6MnB4Oy0tbW9uc3Rlci1kcmFnZ2VyLWhhbmRsZS13aWR0aDo0cHg7LS1tb25zdGVyLWRyYWdnZXItaGFuZGxlLWhlaWdodDo1MHB4fXNwYW4ubW9uc3Rlci1meC1yaXBwbGV7YW5pbWF0aW9uOm1vbnN0ZXItZngtcmlwcGxlIC42cyBsaW5lYXI7YmFja2dyb3VuZC1jb2xvcjpoc2xhKDAsMCUsMTAwJSwuNyk7Ym9yZGVyLXJhZGl1czo1MCU7cG9zaXRpb246YWJzb2x1dGU7dHJhbnNmb3JtOnNjYWxlKDApfUBrZXlmcmFtZXMgbW9uc3Rlci1meC1yaXBwbGV7dG97b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSg0KX19W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjZ9Lm92ZXJmbG93LWhpZGRlbltkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtvdmVyZmxvdzpoaWRkZW59W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIGJ1dHRvbntib3JkZXItbGVmdDowO2JvcmRlci1yaWdodDowO2JvcmRlci10b3A6MH1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gLmJ1dHRvbjpob3Zlcntib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0yKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjhzLGNvbG9yIC4yNXMgLjA4MzMzMzMzMzNzfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSBbZGF0YS1tb25zdGVyLXJvbGU9ZGV0YWlsXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2hlaWdodDowO2xpbmUtaGVpZ2h0OjEuNjt0cmFuc2l0aW9uOmhlaWdodCAuNHMgZWFzZS1pbi1vdXQ7d2lkdGg6MTAwJX06aXMoW2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIFtkYXRhLW1vbnN0ZXItcm9sZT1kZXRhaWxdKSAucGFkZGluZ3twYWRkaW5nOjFyZW19OmlzKFtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSBbZGF0YS1tb25zdGVyLXJvbGU9ZGV0YWlsXSkgLmRlY28tbGluZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTEpIDAsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0yKSA1MCUsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0zKSAxMDAlKTtib3JkZXI6MDtoZWlnaHQ6MnB4O21hcmdpbjowO3BhZGRpbmc6MH1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezppcyhbZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gW2RhdGEtbW9uc3Rlci1yb2xlPWRldGFpbF0pIC5kZWNvLWxpbmV7YmFja2dyb3VuZDp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9fTppcyhbZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gW2RhdGEtbW9uc3Rlci1yb2xlPWRldGFpbF0pIC5kZWNvLWxpbmV7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC40cyBlYXNlLWluLW91dH1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gLmFjdGl2ZVtkYXRhLW1vbnN0ZXItcm9sZT1kZXRhaWxde2hlaWdodDp2YXIoLS1tb25zdGVyLWhlaWdodCk7dHJhbnNpdGlvbjpoZWlnaHQgLjRzIGVhc2UtaW4tb3V0fSBcbn1gLFxuXHRcdDAsXG5cdCk7XG59IGNhdGNoIChlKSB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcihcImh0bWxcIiksXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRlICsgXCJcIixcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0Q3VzdG9tRWxlbWVudCxcblx0Z2V0U2xvdHRlZEVsZW1lbnRzLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IENvbGxhcHNlU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvY29sbGFwc2UubWpzXCI7XG5pbXBvcnQgeyBmaXJlQ3VzdG9tRXZlbnQgfSBmcm9tIFwiLi4vLi4vZG9tL2V2ZW50cy5tanNcIjtcbmltcG9ydCB7IGdldERvY3VtZW50IH0gZnJvbSBcIi4uLy4uL2RvbS91dGlsLm1qc1wiO1xuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBIb3N0IH0gZnJvbSBcIi4uL2hvc3QvaG9zdC5tanNcIjtcbmltcG9ydCB7IGdlbmVyYXRlVW5pcXVlQ29uZmlnS2V5IH0gZnJvbSBcIi4uL2hvc3QvdXRpbC5tanNcIjtcbmltcG9ydCB7IERlYWRNYW5zU3dpdGNoIH0gZnJvbSBcIi4uLy4uL3V0aWwvZGVhZG1hbnNzd2l0Y2gubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IENvbGxhcHNlLCBuYW1lU3ltYm9sIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHRpbWVyQ2FsbGJhY2tTeW1ib2wgPSBTeW1ib2woXCJ0aW1lckNhbGxiYWNrXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBkZXRhaWxzRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImRldGFpbHNFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjb250cm9sRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImNvbnRyb2xFbGVtZW50XCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHJlc2l6ZU9ic2VydmVyU3ltYm9sID0gU3ltYm9sKFwicmVzaXplT2JzZXJ2ZXJcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGRldGFpbHNTbG90RWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImRldGFpbHNTbG90RWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgZGV0YWlsc0NvbnRhaW5lckVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJkZXRhaWxzQ29udGFpbmVyRWxlbWVudFwiKTtcbi8qKlxuXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgZGV0YWlsc0RlY29FbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiZGV0YWlsc0RlY29FbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBuYW1lU3ltYm9sID0gU3ltYm9sKFwibmFtZVwiKTtcblxuLyoqXG4gKiBBIENvbGxhcHNlIGNvbXBvbmVudFxuICpcbiAqIEBmcmFnbWVudHMgL2ZyYWdtZW50cy9jb21wb25lbnRzL2xheW91dC9jb2xsYXBzZS9cbiAqXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9sYXlvdXQvY29sbGFwc2Utc2ltcGxlXG4gKlxuICogQHNpbmNlIDMuNzQuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5ICBBIHNpbXBsZSBjb2xsYXBzZSBjb21wb25lbnQuXG4gKi9cbmNsYXNzIENvbGxhcHNlIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2xheW91dC9jb2xsYXBzZUBAaW5zdGFuY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICovXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0Ly8gdGhlIG5hbWUgaXMgb25seSB1c2VkIGZvciB0aGUgaG9zdCBjb25maWcgYW5kIHRoZSBldmVudCBuYW1lXG5cdFx0dGhpc1tuYW1lU3ltYm9sXSA9IFwiY29sbGFwc2VcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBIVE1MIHRhZywgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGNsYXNzZXMgQ1NTIGNsYXNzZXNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGNsYXNzZXMuY29udGFpbmVyIENTUyBjbGFzcyBmb3IgdGhlIGNvbnRhaW5lclxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZmVhdHVyZXMgRmVhdHVyZSBjb25maWd1cmF0aW9uXG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZmVhdHVyZXMuYWNjb3JkaW9uIEVuYWJsZSBhY2NvcmRpb24gbW9kZVxuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IGZlYXR1cmVzLnBlcnNpc3RTdGF0ZSBFbmFibGUgcGVyc2lzdCBzdGF0ZSAoSG9zdCBhbmQgQ29uZmlnLU1hbmFnZXIgcmVxdWlyZWQpXG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZmVhdHVyZXMudXNlU2Nyb2xsVmFsdWVzIFVzZSBzY3JvbGwgdmFsdWVzIChzY3JvbGxIZWlnaHQpIGluc3RlYWQgb2YgY2xpZW50SGVpZ2h0IGZvciB0aGUgaGVpZ2h0IGNhbGN1bGF0aW9uXG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gb3BlbkJ5RGVmYXVsdCBPcGVuIHRoZSBkZXRhaWxzIGJ5IGRlZmF1bHRcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0fSxcblx0XHRcdGNsYXNzZXM6IHtcblx0XHRcdFx0Y29udGFpbmVyOiBcInBhZGRpbmdcIixcblx0XHRcdH0sXG5cdFx0XHRmZWF0dXJlczoge1xuXHRcdFx0XHRhY2NvcmRpb246IHRydWUsXG5cdFx0XHRcdHBlcnNpc3RTdGF0ZTogdHJ1ZSxcblx0XHRcdFx0dXNlU2Nyb2xsVmFsdWVzOiBmYWxzZSxcblx0XHRcdH0sXG5cdFx0XHRvcGVuQnlEZWZhdWx0OiBmYWxzZSxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcblx0XHRpbml0U3RhdGVGcm9tSG9zdENvbmZpZy5jYWxsKHRoaXMpO1xuXHRcdGluaXRSZXNpemVPYnNlcnZlci5jYWxsKHRoaXMpO1xuXHRcdGluaXRFdmVudEhhbmRsZXIuY2FsbCh0aGlzKTtcblxuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcIm9wZW5CeURlZmF1bHRcIikpIHtcblx0XHRcdHRoaXMub3BlbigpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKi9cblx0Y29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblx0XHR1cGRhdGVSZXNpemVPYnNlcnZlck9ic2VydmF0aW9uLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7Q29sbGFwc2V9XG5cdCAqL1xuXHR0b2dnbGUoKSB7XG5cdFx0aWYgKHRoaXNbZGV0YWlsc0VsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5jb250YWlucyhcImFjdGl2ZVwiKSkge1xuXHRcdFx0dGhpcy5jbG9zZSgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm9wZW4oKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGlzQ2xvc2VkKCkge1xuXHRcdHJldHVybiAhdGhpc1tkZXRhaWxzRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmNvbnRhaW5zKFwiYWN0aXZlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRpc09wZW4oKSB7XG5cdFx0cmV0dXJuICF0aGlzLmlzQ2xvc2VkKCk7XG5cdH1cblxuXHQvKipcblx0ICogT3BlbiB0aGUgY29sbGFwc2Vcblx0ICogQHJldHVybiB7Q29sbGFwc2V9XG5cdCAqIEBmaXJlcyBtb25zdGVyLWNvbGxhcHNlLWJlZm9yZS1vcGVuIFRoaXMgZXZlbnQgaXMgZmlyZWQgYmVmb3JlIHRoZSBjb2xsYXBzZSBpcyBvcGVuZWQuXG5cdCAqIEBmaXJlcyBtb25zdGVyLWNvbGxhcHNlLW9wZW4gVGhpcyBldmVudCBpcyBmaXJlZCBhZnRlciB0aGUgY29sbGFwc2UgaXMgb3BlbmVkLlxuXHQgKi9cblx0b3BlbigpIHtcblx0XHRsZXQgbm9kZTtcblx0XHRpZiAodGhpc1tkZXRhaWxzRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmNvbnRhaW5zKFwiYWN0aXZlXCIpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLVwiICsgdGhpc1tuYW1lU3ltYm9sXSArIFwiLWJlZm9yZS1vcGVuXCIsIHt9KTtcblxuXHRcdGFkanVzdEhlaWdodC5jYWxsKHRoaXMpO1xuXHRcdHRoaXNbZGV0YWlsc0VsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5hZGQoXCJhY3RpdmVcIik7XG5cblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5hY2NvcmRpb25cIikgPT09IHRydWUpIHtcblx0XHRcdG5vZGUgPSB0aGlzO1xuXHRcdFx0d2hpbGUgKG5vZGUubmV4dEVsZW1lbnRTaWJsaW5nIGluc3RhbmNlb2YgQ29sbGFwc2UpIHtcblx0XHRcdFx0bm9kZSA9IG5vZGUubmV4dEVsZW1lbnRTaWJsaW5nO1xuXHRcdFx0XHRub2RlLmNsb3NlKCk7XG5cdFx0XHR9XG5cblx0XHRcdG5vZGUgPSB0aGlzO1xuXHRcdFx0d2hpbGUgKG5vZGUucHJldmlvdXNFbGVtZW50U2libGluZyBpbnN0YW5jZW9mIENvbGxhcHNlKSB7XG5cdFx0XHRcdG5vZGUgPSBub2RlLnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XG5cdFx0XHRcdG5vZGUuY2xvc2UoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR1cGRhdGVTdGF0ZUNvbmZpZy5jYWxsKHRoaXMpO1xuXHRcdFx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLVwiICsgdGhpc1tuYW1lU3ltYm9sXSArIFwiLW9wZW5cIiwge30pO1xuXHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHR0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QucmVtb3ZlKFwib3ZlcmZsb3ctaGlkZGVuXCIpO1xuXHRcdFx0XHR9LCA1MDApO1xuXHRcdFx0fSwgMCk7XG5cdFx0fSwgMCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBDbG9zZSB0aGUgY29sbGFwc2Vcblx0ICogQHJldHVybiB7Q29sbGFwc2V9XG5cdCAqIEBmaXJlcyBtb25zdGVyLWNvbGxhcHNlLWJlZm9yZS1jbG9zZSBUaGlzIGV2ZW50IGlzIGZpcmVkIGJlZm9yZSB0aGUgY29sbGFwc2UgaXMgY2xvc2VkLlxuXHQgKiBAZmlyZXMgbW9uc3Rlci1jb2xsYXBzZS1jbG9zZWQgVGhpcyBldmVudCBpcyBmaXJlZCBhZnRlciB0aGUgY29sbGFwc2UgaXMgY2xvc2VkLlxuXHQgKi9cblx0Y2xvc2UoKSB7XG5cdFx0aWYgKCF0aGlzW2RldGFpbHNFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuY29udGFpbnMoXCJhY3RpdmVcIikpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItXCIgKyB0aGlzW25hbWVTeW1ib2xdICsgXCItYmVmb3JlLWNsb3NlXCIsIHt9KTtcblx0XHR0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuYWRkKFwib3ZlcmZsb3ctaGlkZGVuXCIpO1xuXG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHR0aGlzW2RldGFpbHNFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpO1xuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHVwZGF0ZVN0YXRlQ29uZmlnLmNhbGwodGhpcyk7XG5cdFx0XHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItXCIgKyB0aGlzW25hbWVTeW1ib2xdICsgXCItY2xvc2VkXCIsIHt9KTtcblx0XHRcdH0sIDApO1xuXHRcdH0sIDApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLWNvbGxhcHNlXCI7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7QXJyYXk8Q1NTU3R5bGVTaGVldD59XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW0NvbGxhcHNlU3R5bGVTaGVldF07XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIGVsZW1lbnQgaXMgaW5zZXJ0ZWQgaW50byBhIGRvY3VtZW50LCBpbmNsdWRpbmcgaW50byBhIHNoYWRvdyB0cmVlLlxuXHQgKiBAcmV0dXJuIHtDb2xsYXBzZX1cblx0ICogQGZpcmVzIG1vbnN0ZXItY29sbGFwc2UtYWRqdXN0LWhlaWdodCBUaGlzIGV2ZW50IGlzIGZpcmVkIHdoZW4gdGhlIGhlaWdodCBpcyBhZGp1c3RlZC4gQXMgYSBkZXRhaWwsIHRoZSBoZWlnaHQgaXMgcGFzc2VkLlxuXHQgKi9cblx0YWRqdXN0SGVpZ2h0KCkge1xuXHRcdGFkanVzdEhlaWdodC5jYWxsKHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGFkanVzdEhlaWdodCgpIHtcblx0bGV0IGhlaWdodCA9IDA7XG5cblx0aWYgKHRoaXNbZGV0YWlsc0NvbnRhaW5lckVsZW1lbnRTeW1ib2xdKSB7XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMudXNlU2Nyb2xsVmFsdWVzXCIpKSB7XG5cdFx0XHRoZWlnaHQgKz0gdGhpc1tkZXRhaWxzQ29udGFpbmVyRWxlbWVudFN5bWJvbF0uc2Nyb2xsSGVpZ2h0O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRoZWlnaHQgKz0gdGhpc1tkZXRhaWxzQ29udGFpbmVyRWxlbWVudFN5bWJvbF0uY2xpZW50SGVpZ2h0O1xuXHRcdH1cblx0fVxuXG5cdGlmICh0aGlzW2RldGFpbHNEZWNvRWxlbWVudFN5bWJvbF0pIHtcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy51c2VTY3JvbGxWYWx1ZXNcIikpIHtcblx0XHRcdGhlaWdodCArPSB0aGlzW2RldGFpbHNEZWNvRWxlbWVudFN5bWJvbF0uc2Nyb2xsSGVpZ2h0O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRoZWlnaHQgKz0gdGhpc1tkZXRhaWxzRGVjb0VsZW1lbnRTeW1ib2xdLmNsaWVudEhlaWdodCArIDE7XG5cdFx0fVxuXHR9XG5cblx0aWYgKGhlaWdodCA9PT0gMCkge1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLnVzZVNjcm9sbFZhbHVlc1wiKSkge1xuXHRcdFx0aGVpZ2h0ID0gdGhpc1tkZXRhaWxzRWxlbWVudFN5bWJvbF0uc2Nyb2xsSGVpZ2h0O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRoZWlnaHQgPSB0aGlzW2RldGFpbHNFbGVtZW50U3ltYm9sXS5jbGllbnRIZWlnaHQ7XG5cdFx0fVxuXG5cdFx0aWYgKGhlaWdodCA9PT0gMCkge1xuXHRcdFx0aGVpZ2h0ID0gXCJhdXRvXCI7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGhlaWdodCArPSBcInB4XCI7XG5cdH1cblxuXHR0aGlzW2RldGFpbHNFbGVtZW50U3ltYm9sXS5zdHlsZS5zZXRQcm9wZXJ0eShcblx0XHRcIi0tbW9uc3Rlci1oZWlnaHRcIixcblx0XHRoZWlnaHQsXG5cdFx0XCJpbXBvcnRhbnRcIixcblx0KTtcblxuXHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLVwiICsgdGhpc1tuYW1lU3ltYm9sXSArIFwiLWFkanVzdC1oZWlnaHRcIiwge1xuXHRcdGhlaWdodCxcblx0fSk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVJlc2l6ZU9ic2VydmVyT2JzZXJ2YXRpb24oKSB7XG5cdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdLmRpc2Nvbm5lY3QoKTtcblxuXHRjb25zdCBzbG90dGVkTm9kZXMgPSBnZXRTbG90dGVkRWxlbWVudHMuY2FsbCh0aGlzKTtcblx0c2xvdHRlZE5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcblx0XHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXS5vYnNlcnZlKG5vZGUpO1xuXHR9KTtcblxuXHRpZiAodGhpc1tkZXRhaWxzQ29udGFpbmVyRWxlbWVudFN5bWJvbF0pIHtcblx0XHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXS5vYnNlcnZlKHRoaXNbZGV0YWlsc0NvbnRhaW5lckVsZW1lbnRTeW1ib2xdKTtcblx0fVxuXG5cdHRoaXMuYWRqdXN0SGVpZ2h0KCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50SGFuZGxlcigpIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0aW5pdFNsb3RDaGFuZ2VkSGFuZGxlci5jYWxsKHRoaXMpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gaW5pdFNsb3RDaGFuZ2VkSGFuZGxlcigpIHtcblx0dGhpc1tkZXRhaWxzU2xvdEVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJzbG90Y2hhbmdlXCIsICgpID0+IHtcblx0XHR1cGRhdGVSZXNpemVPYnNlcnZlck9ic2VydmF0aW9uLmNhbGwodGhpcyk7XG5cdH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtTZWxlY3R9XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdHRoaXNbY29udHJvbEVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XCJbZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF1cIixcblx0KTtcblx0dGhpc1tkZXRhaWxzRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRcIltkYXRhLW1vbnN0ZXItcm9sZT1kZXRhaWxdXCIsXG5cdCk7XG5cdHRoaXNbZGV0YWlsc1Nsb3RFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFwic2xvdFwiKTtcblx0dGhpc1tkZXRhaWxzQ29udGFpbmVyRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRcIltkYXRhLW1vbnN0ZXItcm9sZT1jb250YWluZXJdXCIsXG5cdCk7XG5cdHRoaXNbZGV0YWlsc0RlY29FbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdFwiW2RhdGEtbW9uc3Rlci1yb2xlPWRlY29dXCIsXG5cdCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0Q29uZmlnS2V5KCkge1xuXHRyZXR1cm4gZ2VuZXJhdGVVbmlxdWVDb25maWdLZXkodGhpc1tuYW1lU3ltYm9sXSwgdGhpcy5pZCwgXCJzdGF0ZVwiKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB1cGRhdGVTdGF0ZUNvbmZpZygpIHtcblx0aWYgKCF0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLnBlcnNpc3RTdGF0ZVwiKSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmICghdGhpc1tkZXRhaWxzRWxlbWVudFN5bWJvbF0pIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cdGNvbnN0IGhvc3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwibW9uc3Rlci1ob3N0XCIpO1xuXHRpZiAoIShob3N0ICYmIHRoaXMuaWQpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3QgY29uZmlnS2V5ID0gZ2V0Q29uZmlnS2V5LmNhbGwodGhpcyk7XG5cblx0dHJ5IHtcblx0XHRob3N0LnNldENvbmZpZyhjb25maWdLZXksIHRoaXMuaXNPcGVuKCkpO1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIFN0cmluZyhlcnJvcikpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1Byb21pc2V9XG4gKi9cbmZ1bmN0aW9uIGluaXRTdGF0ZUZyb21Ib3N0Q29uZmlnKCkge1xuXHRpZiAoIXRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMucGVyc2lzdFN0YXRlXCIpKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG5cdH1cblxuXHRjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cdGNvbnN0IGhvc3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwibW9uc3Rlci1ob3N0XCIpO1xuXG5cdGlmICghKGhvc3QgJiYgdGhpcy5pZCkpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcblx0fVxuXG5cdGNvbnN0IGNvbmZpZ0tleSA9IGdldENvbmZpZ0tleS5jYWxsKHRoaXMpO1xuXHRyZXR1cm4gaG9zdFxuXHRcdC5nZXRDb25maWcoY29uZmlnS2V5KVxuXHRcdC50aGVuKChzdGF0ZSkgPT4ge1xuXHRcdFx0aWYgKHN0YXRlID09PSB0cnVlKSB7XG5cdFx0XHRcdHRoaXMub3BlbigpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5jbG9zZSgpO1xuXHRcdFx0fVxuXHRcdH0pXG5cdFx0LmNhdGNoKChlcnJvcikgPT4ge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZXJyb3IudG9TdHJpbmcoKSk7XG5cdFx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaW5pdFJlc2l6ZU9ic2VydmVyKCkge1xuXHQvLyBhZ2FpbnN0IGZsaWNrZXJpbmdcblx0dGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0gPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKGVudHJpZXMpID0+IHtcblx0XHRpZiAodGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXSBpbnN0YW5jZW9mIERlYWRNYW5zU3dpdGNoKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdLnRvdWNoKCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0ZGVsZXRlIHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXSA9IG5ldyBEZWFkTWFuc1N3aXRjaCgyMDAsICgpID0+IHtcblx0XHRcdGNoZWNrQW5kUmVhcnJhbmdlQ29udGVudC5jYWxsKHRoaXMpO1xuXHRcdH0pO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gY2hlY2tBbmRSZWFycmFuZ2VDb250ZW50KCkge1xuXHR0aGlzLmFkanVzdEhlaWdodCgpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250cm9sXCIgcGFydD1cImNvbnRyb2xcIiBjbGFzcz1cIm92ZXJmbG93LWhpZGRlblwiPlxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImRldGFpbFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJjbGFzcyBwYXRoOmNsYXNzZXMuY29udGFpbmVyXCIgcGFydD1cImNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICA8c2xvdD48L3Nsb3Q+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlY28tbGluZVwiIGRhdGEtbW9uc3Rlci1yb2xlPVwiZGVjb1wiIHBhcnQ9XCJkZWNvXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+YDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KENvbGxhcHNlKTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBEZXRhaWxzU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvZGV0YWlscy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9CVVRUT05fTEFCRUwgfSBmcm9tIFwiLi4vaG9zdC9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IGdlbmVyYXRlVW5pcXVlQ29uZmlnS2V5IH0gZnJvbSBcIi4uL2hvc3QvdXRpbC5tanNcIjtcbmltcG9ydCB7IENvbGxhcHNlLCBuYW1lU3ltYm9sIH0gZnJvbSBcIi4vY29sbGFwc2UubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IERldGFpbHMgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgYnV0dG9uRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImJ1dHRvbkVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGJ1dHRvbkV2ZW50SGFuZGxlclN5bWJvbCA9IFN5bWJvbChcImJ1dHRvbkV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBBIERldGFpbHMgY29tcG9uZW50XG4gKlxuICogQGZyYWdtZW50cyAvZnJhZ21lbnRzL2NvbXBvbmVudHMvbGF5b3V0L2RldGFpbHMvXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvbGF5b3V0L2RldGFpbHMtc2ltcGxlXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9sYXlvdXQvZGV0YWlscy13aXRoLWxhYmVsXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9sYXlvdXQvZGV0YWlscy1hcy1hY2NvcmRpb25cbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2xheW91dC9kZXRhaWxzLXdpdGgteW91ci1vd24tZGVzaWduXG4gKlxuICogQHNpbmNlIDMuNzQuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgc2ltcGxlIGJ1dCBjb29sIGRldGFpbCBjb21wb25lbnQuIFRoaXMgaXMgYmFzZWQgb24gdGhlIGNvbGxhcHNlIGNvbXBvbmVudCBhbmQgZXh0ZW5kcyBpdCB3aXRoIGEgYnV0dG9uLlxuICogQHN1bW1hcnkgWW91IGNhbiBhbHNvIGVhc2lseSBidWlsZCBhbiBhY2NvcmRpb24gZnJvbSB0aGUgY29tcG9uZW50LlxuICovXG5jbGFzcyBEZXRhaWxzIGV4dGVuZHMgQ29sbGFwc2Uge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9sYXlvdXQvZGV0YWlsc0BAaW5zdGFuY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICovXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0Ly8gdGhlIG5hbWUgaXMgb25seSB1c2VkIGZvciB0aGUgaG9zdCBjb25maWcgYW5kIHRoZSBldmVudCBuYW1lXG5cdFx0dGhpc1tuYW1lU3ltYm9sXSA9IFwiZGV0YWlsc1wiO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIEhUTUwgVGFnLCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gYnV0dG9uIEJ1dHRvbiBjb25maWd1cmF0aW9uXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBidXR0b24ubGFiZWwgQnV0dG9uIGxhYmVsXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdH0sXG5cdFx0XHRsYWJlbHM6IHtcblx0XHRcdFx0YnV0dG9uOiBcIkRldGFpbHNcIixcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cblx0XHRpbml0QnV0dG9uTGFiZWwuY2FsbCh0aGlzKTtcblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcblx0XHRpbml0RXZlbnRIYW5kbGVyLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdGNvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cblx0XHRjb25zdCBjb250YWluRG9jdW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3Q7XG5cblx0XHRpZiAoY29udGFpbkRvY3VtZW50ICE9PSBudWxsKSB7XG5cdFx0XHRjb25zdCBwcmV2aW91c0VsZW1lbnQgPSB0aGlzLnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XG5cdFx0XHRpZiAocHJldmlvdXNFbGVtZW50ICYmIHByZXZpb3VzRWxlbWVudC50YWdOYW1lID09PSBcIk1PTlNURVItREVUQUlMU1wiKSB7XG5cdFx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uc3R5bGUuYm9yZGVyVG9wID0gXCIwXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1kZXRhaWxzXCI7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7QXJyYXk8Q1NTU3R5bGVTaGVldD59XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRjb25zdCBjc3MgPSBzdXBlci5nZXRDU1NTdHlsZVNoZWV0KCk7XG5cdFx0Y3NzLnB1c2goRGV0YWlsc1N0eWxlU2hlZXQpO1xuXHRcdHJldHVybiBjc3M7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7U2VsZWN0fVxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqL1xuZnVuY3Rpb24gaW5pdENvbnRyb2xSZWZlcmVuY2VzKCkge1xuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XCJbZGF0YS1tb25zdGVyLXJvbGU9YnV0dG9uXVwiLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudEhhbmRsZXIoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdHRoaXNbYnV0dG9uRXZlbnRIYW5kbGVyU3ltYm9sXSA9IChldmVudCkgPT4ge1xuXHRcdHRoaXMudG9nZ2xlKCk7XG5cdH07XG5cblx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFxuXHRcdFwiY2xpY2tcIixcblx0XHR0aGlzW2J1dHRvbkV2ZW50SGFuZGxlclN5bWJvbF0sXG5cdCk7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gaW5pdEJ1dHRvbkxhYmVsKCkge1xuXHRsZXQgbGFiZWw7XG5cdGNvbnN0IHNldExhYmVsID0gZmFsc2U7XG5cdGlmICh0aGlzLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfQlVUVE9OX0xBQkVMKSkge1xuXHRcdGxhYmVsID0gdGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0JVVFRPTl9MQUJFTCk7XG5cdH0gZWxzZSB7XG5cdFx0bGFiZWwgPSB0aGlzLmdldE9wdGlvbihcImxhYmVscy5idXR0b25cIiwgXCJEZXRhaWxzXCIpO1xuXHR9XG5cblx0aWYgKCFpc1N0cmluZyhsYWJlbCkpIHtcblx0XHRsYWJlbCA9IFwiXCI7XG5cdH1cblxuXHRpZiAobGFiZWwgPT09IFwiXCIpIHtcblx0XHRsYWJlbCA9IHRoaXMuaW5uZXJUZXh0O1xuXHR9XG5cblx0bGFiZWwgPSBsYWJlbC50cmltKCk7XG5cblx0aWYgKGxhYmVsID09PSBcIlwiKSB7XG5cdFx0bGFiZWwgPSB0aGlzLmdldE9wdGlvbihcImxhYmVscy5idXR0b25cIiwgXCJEZXRhaWxzXCIpO1xuXHR9XG5cblx0aWYgKGxhYmVsLmxlbmd0aCA+IDEwMCkge1xuXHRcdGxhYmVsID0gYCR7bGFiZWwuc3Vic3RyaW5nKDAsIDk5KX1cdTIwMjZgO1xuXHR9XG5cblx0dGhpcy5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0JVVFRPTl9MQUJFTCwgbGFiZWwpO1xuXHR0aGlzLnNldE9wdGlvbihcImxhYmVscy5idXR0b25cIiwgbGFiZWwpO1xuXG5cdHJldHVybiBsYWJlbDtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRDb25maWdLZXkoKSB7XG5cdHJldHVybiBnZW5lcmF0ZVVuaXF1ZUNvbmZpZ0tleShcImRldGFpbHNcIiwgdGhpcy5pZCwgXCJzdGF0ZVwiKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udHJvbFwiIHBhcnQ9XCJjb250cm9sXCIgY2xhc3M9XCJvdmVyZmxvdy1oaWRkZW5cIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJzdW1tYXJ5XCIgcGFydD1cInN1bW1hcnlcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHBhcnQ9XCJidXR0b25cIiBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNsYXNzIHBhdGg6Y2xhc3Nlcy5idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmxhYmVscy5idXR0b24gfCBkZWZhdWx0OmNsaWNrIG1lXCI+Y2xpY2sgbWVcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImRldGFpbFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJjbGFzcyBwYXRoOmNsYXNzZXMuY29udGFpbmVyXCIgcGFydD1cImNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICA8c2xvdCBwYXJ0PVwic2xvdFwiPjwvc2xvdD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IHBhcnQ9XCJkZWNvLWxpbmVcIiBjbGFzcz1cImRlY28tbGluZVwiIGRhdGEtbW9uc3Rlci1yb2xlPVwiZGVjb1wiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PmA7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChEZXRhaWxzKTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBEZXRhaWxzIGFzIE5ld0RldGFpbHMgfSBmcm9tIFwiLi4vbGF5b3V0L2RldGFpbHMubWpzXCI7XG5leHBvcnQgeyBEZXRhaWxzIH07XG5cbi8qKlxuICogQHNpbmNlIDEuMTAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBkZXByZWNhdGVkIHNpbmNlIDMuNjQuMCB1c2Uge0BsaW5rIE1vbnN0ZXIuQ29tcG9uZW50cy5MYXlvdXQuRGV0YWlsc31cbiAqL1xuY2xhc3MgRGV0YWlscyBleHRlbmRzIE5ld0RldGFpbHMge31cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyByYW5kb20gfSBmcm9tIFwiLi4vbWF0aC9yYW5kb20ubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWwgfSBmcm9tIFwiLi9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyBJRCB9IGZyb20gXCIuL2lkLm1qc1wiO1xuXG5leHBvcnQgeyBSYW5kb21JRCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5sZXQgaW50ZXJuYWxDb3VudGVyID0gMDtcblxuLyoqXG4gKiBUaGUgYFJhbmRvbUlEYCBjbGFzcyBwcm92aWRlcyBhIHVuaXF1ZSBJRCBmb3IgYW4gaXRlbS5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjYuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IGNsYXNzIHRvIGdlbmVyYXRlIHJhbmRvbSBudW1iZXJzXG4gKi9cbmNsYXNzIFJhbmRvbUlEIGV4dGVuZHMgSUQge1xuXHQvKipcblx0ICogY3JlYXRlIG5ldyBvYmplY3Rcblx0ICovXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHRpbnRlcm5hbENvdW50ZXIgKz0gMTtcblxuXHRcdHRoaXMuaWQgPVxuXHRcdFx0Z2V0R2xvYmFsKClcblx0XHRcdFx0LmJ0b2EocmFuZG9tKDEsIDEwMDAwKSlcblx0XHRcdFx0LnJlcGxhY2UoLz0vZywgXCJcIilcblx0XHRcdFx0LyoqIE5vIG51bWJlcnMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgSUQsIGJlY2F1c2Ugb2YgcG9zc2libGUgcHJvYmxlbXMgd2l0aCBET00gKi9cblx0XHRcdFx0LnJlcGxhY2UoL15bMC05XSsvLCBcIlhcIikgKyBpbnRlcm5hbENvdW50ZXI7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyByYW5kb20gfSBmcm9tIFwiLi4vbWF0aC9yYW5kb20ubWpzXCI7XG5pbXBvcnQgeyBpc09iamVjdCB9IGZyb20gXCIuL2lzLm1qc1wiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWxPYmplY3QgfSBmcm9tIFwiLi9nbG9iYWwubWpzXCI7XG5cbmV4cG9ydCB7IFVVSUQgfTtcblxuLyoqXG4gKiBUaGUgVVVJRCBjbGFzcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBnZXQgYSB1bmlxdWUgVVVJRCBmb3IgYW4gb2JqZWN0LlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZFxuICovXG5jbGFzcyBVVUlEIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGxldCB1dWlkID0gY3JlYXRlV2l0aENyeXB0bygpO1xuXG5cdFx0aWYgKHV1aWQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dXVpZCA9IGNyZWF0ZVdpdGhSYW5kb20oKTtcblx0XHR9XG5cblx0XHRpZiAodXVpZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZFwiKTtcblx0XHR9XG5cblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IHtcblx0XHRcdHZhbHVlOiB1dWlkLFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0dG9TdHJpbmcoKSB7XG5cdFx0cmV0dXJuIHRoaXNbaW50ZXJuYWxTeW1ib2xdW1widmFsdWVcIl07XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfHVuZGVmaW5lZH1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlV2l0aFJhbmRvbSgpIHtcblx0cmV0dXJuIFwieHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4XCIucmVwbGFjZSgvW3h5XS9nLCBmdW5jdGlvbiAoYykge1xuXHRcdGNvbnN0IHIgPSAocmFuZG9tKDAsIDY1MDAwKSAqIDE2KSB8IDA7XG5cdFx0Y29uc3QgdiA9IGMgPT09IFwieFwiID8gciA6IChyICYgMHgzKSB8IDB4ODtcblx0XHRyZXR1cm4gdi50b1N0cmluZygxNilbMF07XG5cdH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd8dW5kZWZpbmVkfVxuICovXG5mdW5jdGlvbiBjcmVhdGVXaXRoQ3J5cHRvKCkge1xuXHRjb25zdCBjcnlwdCA9IGdldEdsb2JhbE9iamVjdChcImNyeXB0b1wiKTtcblx0aWYgKCFpc09iamVjdChjcnlwdCkpIHJldHVybjtcblx0aWYgKHR5cGVvZiBjcnlwdD8uW1wicmFuZG9tVVVJRFwiXSkgcmV0dXJuO1xuXHRyZXR1cm4gY3J5cHQucmFuZG9tVVVJRCgpO1xufVxuIiwgImlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0Jykge1xuXG4gICAgKGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgc2F5c3dobyA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdWEgPSBuYXZpZ2F0b3IudXNlckFnZW50LCB0ZW0sXG4gICAgICAgICAgICAgICAgTSA9IHVhLm1hdGNoKC8ob3BlcmF8Y2hyb21lfHNhZmFyaXxmaXJlZm94fG1zaWV8dHJpZGVudCg/PVxcLykpXFwvP1xccyooXFxkKykvaSkgfHwgW107XG4gICAgICAgICAgICBpZiAoL3RyaWRlbnQvaS50ZXN0KE1bMV0pKSB7XG4gICAgICAgICAgICAgICAgdGVtID0gL1xcYnJ2WyA6XSsoXFxkKykvZy5leGVjKHVhKSB8fCBbXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0lFICcgKyAodGVtWzFdIHx8ICcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChNWzFdID09PSAnQ2hyb21lJykge1xuICAgICAgICAgICAgICAgIHRlbSA9IHVhLm1hdGNoKC9cXGIoT1BSfEVkZ2UpXFwvKFxcZCspLyk7XG4gICAgICAgICAgICAgICAgaWYgKHRlbSAhPSBudWxsKSByZXR1cm4gdGVtLnNsaWNlKDEpLmpvaW4oJyAnKS5yZXBsYWNlKCdPUFInLCAnT3BlcmEnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIE0gPSBNWzJdID8gW01bMV0sIE1bMl1dIDogW25hdmlnYXRvci5hcHBOYW1lLCBuYXZpZ2F0b3IuYXBwVmVyc2lvbiwgJy0/J107XG4gICAgICAgICAgICBpZiAoKHRlbSA9IHVhLm1hdGNoKC92ZXJzaW9uXFwvKFxcZCspL2kpKSAhPSBudWxsKSBNLnNwbGljZSgxLCAxLCB0ZW1bMV0pO1xuICAgICAgICAgICAgcmV0dXJuIE0uam9pbignICcpO1xuICAgICAgICB9KSgpO1xuXG5cbiAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdoMScpXG4gICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MICs9IFwiIFwiICsgc2F5c3dobztcblxuICAgIH0pKCk7XG5cblxufVxuIiwgImltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCAqIGFzIGNoYWkgZnJvbSAnY2hhaSc7XG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5cblxuLy8gbGFuZ3VhZ2U9aHRtbFxubGV0IGh0bWwxID0gYFxuICAgIDxtb25zdGVyLXRhYnMgaWQ9XCJteXRhYnNcIj5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItYnV0dG9uLWxhYmVsPVwiVEFCMVwiPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICBEYXMgaXN0IHRhYiAxXG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItYnV0dG9uLWxhYmVsPVwiVEFCMlwiPlxuICAgICAgICAgICAgRGFzIGlzdCB0YWIgMlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIERhcyBpc3QgdGFiIDMgb2huZSBidXR0b25cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXY+PC9kaXY+XG4gICAgPC9tb25zdGVyLXRhYnM+XG5gO1xuXG5sZXQgVGFicztcblxuZGVzY3JpYmUoJ1RhYnMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgIGltcG9ydChcImVsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsXCIpLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGxldCBwcm9taXNlcyA9IFtdXG5cbiAgICAgICAgICAgIGlmICghZ2xvYmFsWydjcnlwdG8nXSkge1xuICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2goaW1wb3J0KFwiQHBlY3VsaWFyL3dlYmNyeXB0b1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IENyeXB0byA9IG1bJ0NyeXB0byddO1xuICAgICAgICAgICAgICAgICAgICBnbG9iYWxbJ2NyeXB0byddID0gbmV3IENyeXB0bygpO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChpbXBvcnQoXCIuLi8uLi8uLi8uLi9zb3VyY2UvY29tcG9uZW50cy9sYXlvdXQvdGFicy5tanNcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIFRhYnMgPSBtWydUYWJzJ107XG4gICAgICAgICAgICB9KSlcblxuICAgICAgICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCk9PntcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpXG5cbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIGhhdmUgYnV0dG9ucyBhbmQgdGFicycsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhYnMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXl0YWJzJylcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHRhYnMpLmlzLmluc3RhbmNlb2YoVGFicyk7XG5cbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmF2ID0gdGFicy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ25hdicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnV0dG9ucyA9IHRhYnMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdidXR0b25bcGFydD1idXR0b25dJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoYnV0dG9uc1swXSkuaXMuaW5zdGFuY2VvZihIVE1MQnV0dG9uRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QobmF2Lmhhc0NoaWxkTm9kZXMoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChidXR0b25zLmxlbmd0aCkudG8uYmUuZXF1YWwoNCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIDEwMClcblxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9LCAwKVxuXG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG59KTsiLCAidmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIF9fbmFtZSA9ICh0YXJnZXQsIHZhbHVlKSA9PiBfX2RlZlByb3AodGFyZ2V0LCBcIm5hbWVcIiwgeyB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xudmFyIF9fY29tbW9uSlMgPSAoY2IsIG1vZCkgPT4gZnVuY3Rpb24gX19yZXF1aXJlKCkge1xuICByZXR1cm4gbW9kIHx8ICgwLCBjYltfX2dldE93blByb3BOYW1lcyhjYilbMF1dKSgobW9kID0geyBleHBvcnRzOiB7fSB9KS5leHBvcnRzLCBtb2QpLCBtb2QuZXhwb3J0cztcbn07XG52YXIgX19leHBvcnQgPSAodGFyZ2V0LCBhbGwpID0+IHtcbiAgZm9yICh2YXIgbmFtZSBpbiBhbGwpXG4gICAgX19kZWZQcm9wKHRhcmdldCwgbmFtZSwgeyBnZXQ6IGFsbFtuYW1lXSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcbn07XG5cbi8vIChkaXNhYmxlZCk6dXRpbFxudmFyIHJlcXVpcmVfdXRpbCA9IF9fY29tbW9uSlMoe1xuICBcIihkaXNhYmxlZCk6dXRpbFwiKCkge1xuICB9XG59KTtcblxuLy8gbGliL2NoYWkvdXRpbHMvaW5kZXguanNcbnZhciB1dGlsc19leHBvcnRzID0ge307XG5fX2V4cG9ydCh1dGlsc19leHBvcnRzLCB7XG4gIGFkZENoYWluYWJsZU1ldGhvZDogKCkgPT4gYWRkQ2hhaW5hYmxlTWV0aG9kLFxuICBhZGRMZW5ndGhHdWFyZDogKCkgPT4gYWRkTGVuZ3RoR3VhcmQsXG4gIGFkZE1ldGhvZDogKCkgPT4gYWRkTWV0aG9kLFxuICBhZGRQcm9wZXJ0eTogKCkgPT4gYWRkUHJvcGVydHksXG4gIGNoZWNrRXJyb3I6ICgpID0+IGNoZWNrX2Vycm9yX2V4cG9ydHMsXG4gIGNvbXBhcmVCeUluc3BlY3Q6ICgpID0+IGNvbXBhcmVCeUluc3BlY3QsXG4gIGVxbDogKCkgPT4gZGVlcF9lcWxfZGVmYXVsdCxcbiAgZXhwZWN0VHlwZXM6ICgpID0+IGV4cGVjdFR5cGVzLFxuICBmbGFnOiAoKSA9PiBmbGFnLFxuICBnZXRBY3R1YWw6ICgpID0+IGdldEFjdHVhbCxcbiAgZ2V0TWVzc2FnZTogKCkgPT4gZ2V0TWVzc2FnZTIsXG4gIGdldE5hbWU6ICgpID0+IGdldE5hbWUsXG4gIGdldE9wZXJhdG9yOiAoKSA9PiBnZXRPcGVyYXRvcixcbiAgZ2V0T3duRW51bWVyYWJsZVByb3BlcnRpZXM6ICgpID0+IGdldE93bkVudW1lcmFibGVQcm9wZXJ0aWVzLFxuICBnZXRPd25FbnVtZXJhYmxlUHJvcGVydHlTeW1ib2xzOiAoKSA9PiBnZXRPd25FbnVtZXJhYmxlUHJvcGVydHlTeW1ib2xzLFxuICBnZXRQYXRoSW5mbzogKCkgPT4gZ2V0UGF0aEluZm8sXG4gIGhhc1Byb3BlcnR5OiAoKSA9PiBoYXNQcm9wZXJ0eSxcbiAgaW5zcGVjdDogKCkgPT4gaW5zcGVjdDIsXG4gIGlzTmFOOiAoKSA9PiBpc05hTjIsXG4gIGlzTnVtZXJpYzogKCkgPT4gaXNOdW1lcmljLFxuICBpc1Byb3h5RW5hYmxlZDogKCkgPT4gaXNQcm94eUVuYWJsZWQsXG4gIGlzUmVnRXhwOiAoKSA9PiBpc1JlZ0V4cDIsXG4gIG9iakRpc3BsYXk6ICgpID0+IG9iakRpc3BsYXksXG4gIG92ZXJ3cml0ZUNoYWluYWJsZU1ldGhvZDogKCkgPT4gb3ZlcndyaXRlQ2hhaW5hYmxlTWV0aG9kLFxuICBvdmVyd3JpdGVNZXRob2Q6ICgpID0+IG92ZXJ3cml0ZU1ldGhvZCxcbiAgb3ZlcndyaXRlUHJvcGVydHk6ICgpID0+IG92ZXJ3cml0ZVByb3BlcnR5LFxuICBwcm94aWZ5OiAoKSA9PiBwcm94aWZ5LFxuICB0ZXN0OiAoKSA9PiB0ZXN0LFxuICB0cmFuc2ZlckZsYWdzOiAoKSA9PiB0cmFuc2ZlckZsYWdzLFxuICB0eXBlOiAoKSA9PiB0eXBlXG59KTtcblxuLy8gbm9kZV9tb2R1bGVzL2NoZWNrLWVycm9yL2luZGV4LmpzXG52YXIgY2hlY2tfZXJyb3JfZXhwb3J0cyA9IHt9O1xuX19leHBvcnQoY2hlY2tfZXJyb3JfZXhwb3J0cywge1xuICBjb21wYXRpYmxlQ29uc3RydWN0b3I6ICgpID0+IGNvbXBhdGlibGVDb25zdHJ1Y3RvcixcbiAgY29tcGF0aWJsZUluc3RhbmNlOiAoKSA9PiBjb21wYXRpYmxlSW5zdGFuY2UsXG4gIGNvbXBhdGlibGVNZXNzYWdlOiAoKSA9PiBjb21wYXRpYmxlTWVzc2FnZSxcbiAgZ2V0Q29uc3RydWN0b3JOYW1lOiAoKSA9PiBnZXRDb25zdHJ1Y3Rvck5hbWUsXG4gIGdldE1lc3NhZ2U6ICgpID0+IGdldE1lc3NhZ2Vcbn0pO1xuZnVuY3Rpb24gaXNFcnJvckluc3RhbmNlKG9iaikge1xuICByZXR1cm4gb2JqIGluc3RhbmNlb2YgRXJyb3IgfHwgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09IFwiW29iamVjdCBFcnJvcl1cIjtcbn1cbl9fbmFtZShpc0Vycm9ySW5zdGFuY2UsIFwiaXNFcnJvckluc3RhbmNlXCIpO1xuZnVuY3Rpb24gaXNSZWdFeHAob2JqKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gXCJbb2JqZWN0IFJlZ0V4cF1cIjtcbn1cbl9fbmFtZShpc1JlZ0V4cCwgXCJpc1JlZ0V4cFwiKTtcbmZ1bmN0aW9uIGNvbXBhdGlibGVJbnN0YW5jZSh0aHJvd24sIGVycm9yTGlrZSkge1xuICByZXR1cm4gaXNFcnJvckluc3RhbmNlKGVycm9yTGlrZSkgJiYgdGhyb3duID09PSBlcnJvckxpa2U7XG59XG5fX25hbWUoY29tcGF0aWJsZUluc3RhbmNlLCBcImNvbXBhdGlibGVJbnN0YW5jZVwiKTtcbmZ1bmN0aW9uIGNvbXBhdGlibGVDb25zdHJ1Y3Rvcih0aHJvd24sIGVycm9yTGlrZSkge1xuICBpZiAoaXNFcnJvckluc3RhbmNlKGVycm9yTGlrZSkpIHtcbiAgICByZXR1cm4gdGhyb3duLmNvbnN0cnVjdG9yID09PSBlcnJvckxpa2UuY29uc3RydWN0b3IgfHwgdGhyb3duIGluc3RhbmNlb2YgZXJyb3JMaWtlLmNvbnN0cnVjdG9yO1xuICB9IGVsc2UgaWYgKCh0eXBlb2YgZXJyb3JMaWtlID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBlcnJvckxpa2UgPT09IFwiZnVuY3Rpb25cIikgJiYgZXJyb3JMaWtlLnByb3RvdHlwZSkge1xuICAgIHJldHVybiB0aHJvd24uY29uc3RydWN0b3IgPT09IGVycm9yTGlrZSB8fCB0aHJvd24gaW5zdGFuY2VvZiBlcnJvckxpa2U7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuX19uYW1lKGNvbXBhdGlibGVDb25zdHJ1Y3RvciwgXCJjb21wYXRpYmxlQ29uc3RydWN0b3JcIik7XG5mdW5jdGlvbiBjb21wYXRpYmxlTWVzc2FnZSh0aHJvd24sIGVyck1hdGNoZXIpIHtcbiAgY29uc3QgY29tcGFyaXNvblN0cmluZyA9IHR5cGVvZiB0aHJvd24gPT09IFwic3RyaW5nXCIgPyB0aHJvd24gOiB0aHJvd24ubWVzc2FnZTtcbiAgaWYgKGlzUmVnRXhwKGVyck1hdGNoZXIpKSB7XG4gICAgcmV0dXJuIGVyck1hdGNoZXIudGVzdChjb21wYXJpc29uU3RyaW5nKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZXJyTWF0Y2hlciA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBjb21wYXJpc29uU3RyaW5nLmluZGV4T2YoZXJyTWF0Y2hlcikgIT09IC0xO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbl9fbmFtZShjb21wYXRpYmxlTWVzc2FnZSwgXCJjb21wYXRpYmxlTWVzc2FnZVwiKTtcbmZ1bmN0aW9uIGdldENvbnN0cnVjdG9yTmFtZShlcnJvckxpa2UpIHtcbiAgbGV0IGNvbnN0cnVjdG9yTmFtZSA9IGVycm9yTGlrZTtcbiAgaWYgKGlzRXJyb3JJbnN0YW5jZShlcnJvckxpa2UpKSB7XG4gICAgY29uc3RydWN0b3JOYW1lID0gZXJyb3JMaWtlLmNvbnN0cnVjdG9yLm5hbWU7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGVycm9yTGlrZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgY29uc3RydWN0b3JOYW1lID0gZXJyb3JMaWtlLm5hbWU7XG4gICAgaWYgKGNvbnN0cnVjdG9yTmFtZSA9PT0gXCJcIikge1xuICAgICAgY29uc3QgbmV3Q29uc3RydWN0b3JOYW1lID0gbmV3IGVycm9yTGlrZSgpLm5hbWU7XG4gICAgICBjb25zdHJ1Y3Rvck5hbWUgPSBuZXdDb25zdHJ1Y3Rvck5hbWUgfHwgY29uc3RydWN0b3JOYW1lO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY29uc3RydWN0b3JOYW1lO1xufVxuX19uYW1lKGdldENvbnN0cnVjdG9yTmFtZSwgXCJnZXRDb25zdHJ1Y3Rvck5hbWVcIik7XG5mdW5jdGlvbiBnZXRNZXNzYWdlKGVycm9yTGlrZSkge1xuICBsZXQgbXNnID0gXCJcIjtcbiAgaWYgKGVycm9yTGlrZSAmJiBlcnJvckxpa2UubWVzc2FnZSkge1xuICAgIG1zZyA9IGVycm9yTGlrZS5tZXNzYWdlO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBlcnJvckxpa2UgPT09IFwic3RyaW5nXCIpIHtcbiAgICBtc2cgPSBlcnJvckxpa2U7XG4gIH1cbiAgcmV0dXJuIG1zZztcbn1cbl9fbmFtZShnZXRNZXNzYWdlLCBcImdldE1lc3NhZ2VcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL2ZsYWcuanNcbmZ1bmN0aW9uIGZsYWcob2JqLCBrZXksIHZhbHVlKSB7XG4gIHZhciBmbGFncyA9IG9iai5fX2ZsYWdzIHx8IChvYmouX19mbGFncyA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpKTtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICBmbGFnc1trZXldID0gdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZsYWdzW2tleV07XG4gIH1cbn1cbl9fbmFtZShmbGFnLCBcImZsYWdcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL3Rlc3QuanNcbmZ1bmN0aW9uIHRlc3Qob2JqLCBhcmdzKSB7XG4gIHZhciBuZWdhdGUgPSBmbGFnKG9iaiwgXCJuZWdhdGVcIiksIGV4cHIgPSBhcmdzWzBdO1xuICByZXR1cm4gbmVnYXRlID8gIWV4cHIgOiBleHByO1xufVxuX19uYW1lKHRlc3QsIFwidGVzdFwiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvdHlwZS1kZXRlY3QuanNcbmZ1bmN0aW9uIHR5cGUob2JqKSB7XG4gIGlmICh0eXBlb2Ygb2JqID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIFwidW5kZWZpbmVkXCI7XG4gIH1cbiAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgIHJldHVybiBcIm51bGxcIjtcbiAgfVxuICBjb25zdCBzdHJpbmdUYWcgPSBvYmpbU3ltYm9sLnRvU3RyaW5nVGFnXTtcbiAgaWYgKHR5cGVvZiBzdHJpbmdUYWcgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gc3RyaW5nVGFnO1xuICB9XG4gIGNvbnN0IHR5cGUzID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikuc2xpY2UoOCwgLTEpO1xuICByZXR1cm4gdHlwZTM7XG59XG5fX25hbWUodHlwZSwgXCJ0eXBlXCIpO1xuXG4vLyBub2RlX21vZHVsZXMvYXNzZXJ0aW9uLWVycm9yL2luZGV4LmpzXG52YXIgY2FuRWxpZGVGcmFtZXMgPSBcImNhcHR1cmVTdGFja1RyYWNlXCIgaW4gRXJyb3I7XG52YXIgQXNzZXJ0aW9uRXJyb3IgPSBjbGFzcyBfQXNzZXJ0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHN0YXRpYyB7XG4gICAgX19uYW1lKHRoaXMsIFwiQXNzZXJ0aW9uRXJyb3JcIik7XG4gIH1cbiAgbWVzc2FnZTtcbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIFwiQXNzZXJ0aW9uRXJyb3JcIjtcbiAgfVxuICBnZXQgb2soKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UgPSBcIlVuc3BlY2lmaWVkIEFzc2VydGlvbkVycm9yXCIsIHByb3BzLCBzc2YpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIGlmIChjYW5FbGlkZUZyYW1lcykge1xuICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgc3NmIHx8IF9Bc3NlcnRpb25FcnJvcik7XG4gICAgfVxuICAgIGZvciAoY29uc3Qga2V5IGluIHByb3BzKSB7XG4gICAgICBpZiAoIShrZXkgaW4gdGhpcykpIHtcbiAgICAgICAgdGhpc1trZXldID0gcHJvcHNba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgdG9KU09OKHN0YWNrKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMsXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsXG4gICAgICBvazogZmFsc2UsXG4gICAgICBzdGFjazogc3RhY2sgIT09IGZhbHNlID8gdGhpcy5zdGFjayA6IHZvaWQgMFxuICAgIH07XG4gIH1cbn07XG5cbi8vIGxpYi9jaGFpL3V0aWxzL2V4cGVjdFR5cGVzLmpzXG5mdW5jdGlvbiBleHBlY3RUeXBlcyhvYmosIHR5cGVzKSB7XG4gIHZhciBmbGFnTXNnID0gZmxhZyhvYmosIFwibWVzc2FnZVwiKTtcbiAgdmFyIHNzZmkgPSBmbGFnKG9iaiwgXCJzc2ZpXCIpO1xuICBmbGFnTXNnID0gZmxhZ01zZyA/IGZsYWdNc2cgKyBcIjogXCIgOiBcIlwiO1xuICBvYmogPSBmbGFnKG9iaiwgXCJvYmplY3RcIik7XG4gIHR5cGVzID0gdHlwZXMubWFwKGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gdC50b0xvd2VyQ2FzZSgpO1xuICB9KTtcbiAgdHlwZXMuc29ydCgpO1xuICB2YXIgc3RyID0gdHlwZXMubWFwKGZ1bmN0aW9uKHQsIGluZGV4KSB7XG4gICAgdmFyIGFydCA9IH5bXCJhXCIsIFwiZVwiLCBcImlcIiwgXCJvXCIsIFwidVwiXS5pbmRleE9mKHQuY2hhckF0KDApKSA/IFwiYW5cIiA6IFwiYVwiO1xuICAgIHZhciBvciA9IHR5cGVzLmxlbmd0aCA+IDEgJiYgaW5kZXggPT09IHR5cGVzLmxlbmd0aCAtIDEgPyBcIm9yIFwiIDogXCJcIjtcbiAgICByZXR1cm4gb3IgKyBhcnQgKyBcIiBcIiArIHQ7XG4gIH0pLmpvaW4oXCIsIFwiKTtcbiAgdmFyIG9ialR5cGUgPSB0eXBlKG9iaikudG9Mb3dlckNhc2UoKTtcbiAgaWYgKCF0eXBlcy5zb21lKGZ1bmN0aW9uKGV4cGVjdGVkKSB7XG4gICAgcmV0dXJuIG9ialR5cGUgPT09IGV4cGVjdGVkO1xuICB9KSkge1xuICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgIGZsYWdNc2cgKyBcIm9iamVjdCB0ZXN0ZWQgbXVzdCBiZSBcIiArIHN0ciArIFwiLCBidXQgXCIgKyBvYmpUeXBlICsgXCIgZ2l2ZW5cIixcbiAgICAgIHZvaWQgMCxcbiAgICAgIHNzZmlcbiAgICApO1xuICB9XG59XG5fX25hbWUoZXhwZWN0VHlwZXMsIFwiZXhwZWN0VHlwZXNcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL2dldEFjdHVhbC5qc1xuZnVuY3Rpb24gZ2V0QWN0dWFsKG9iaiwgYXJncykge1xuICByZXR1cm4gYXJncy5sZW5ndGggPiA0ID8gYXJnc1s0XSA6IG9iai5fb2JqO1xufVxuX19uYW1lKGdldEFjdHVhbCwgXCJnZXRBY3R1YWxcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9sb3VwZS9saWIvaGVscGVycy5qc1xudmFyIGFuc2lDb2xvcnMgPSB7XG4gIGJvbGQ6IFtcIjFcIiwgXCIyMlwiXSxcbiAgZGltOiBbXCIyXCIsIFwiMjJcIl0sXG4gIGl0YWxpYzogW1wiM1wiLCBcIjIzXCJdLFxuICB1bmRlcmxpbmU6IFtcIjRcIiwgXCIyNFwiXSxcbiAgLy8gNSAmIDYgYXJlIGJsaW5raW5nXG4gIGludmVyc2U6IFtcIjdcIiwgXCIyN1wiXSxcbiAgaGlkZGVuOiBbXCI4XCIsIFwiMjhcIl0sXG4gIHN0cmlrZTogW1wiOVwiLCBcIjI5XCJdLFxuICAvLyAxMC0yMCBhcmUgZm9udHNcbiAgLy8gMjEtMjkgYXJlIHJlc2V0cyBmb3IgMS05XG4gIGJsYWNrOiBbXCIzMFwiLCBcIjM5XCJdLFxuICByZWQ6IFtcIjMxXCIsIFwiMzlcIl0sXG4gIGdyZWVuOiBbXCIzMlwiLCBcIjM5XCJdLFxuICB5ZWxsb3c6IFtcIjMzXCIsIFwiMzlcIl0sXG4gIGJsdWU6IFtcIjM0XCIsIFwiMzlcIl0sXG4gIG1hZ2VudGE6IFtcIjM1XCIsIFwiMzlcIl0sXG4gIGN5YW46IFtcIjM2XCIsIFwiMzlcIl0sXG4gIHdoaXRlOiBbXCIzN1wiLCBcIjM5XCJdLFxuICBicmlnaHRibGFjazogW1wiMzA7MVwiLCBcIjM5XCJdLFxuICBicmlnaHRyZWQ6IFtcIjMxOzFcIiwgXCIzOVwiXSxcbiAgYnJpZ2h0Z3JlZW46IFtcIjMyOzFcIiwgXCIzOVwiXSxcbiAgYnJpZ2h0eWVsbG93OiBbXCIzMzsxXCIsIFwiMzlcIl0sXG4gIGJyaWdodGJsdWU6IFtcIjM0OzFcIiwgXCIzOVwiXSxcbiAgYnJpZ2h0bWFnZW50YTogW1wiMzU7MVwiLCBcIjM5XCJdLFxuICBicmlnaHRjeWFuOiBbXCIzNjsxXCIsIFwiMzlcIl0sXG4gIGJyaWdodHdoaXRlOiBbXCIzNzsxXCIsIFwiMzlcIl0sXG4gIGdyZXk6IFtcIjkwXCIsIFwiMzlcIl1cbn07XG52YXIgc3R5bGVzID0ge1xuICBzcGVjaWFsOiBcImN5YW5cIixcbiAgbnVtYmVyOiBcInllbGxvd1wiLFxuICBiaWdpbnQ6IFwieWVsbG93XCIsXG4gIGJvb2xlYW46IFwieWVsbG93XCIsXG4gIHVuZGVmaW5lZDogXCJncmV5XCIsXG4gIG51bGw6IFwiYm9sZFwiLFxuICBzdHJpbmc6IFwiZ3JlZW5cIixcbiAgc3ltYm9sOiBcImdyZWVuXCIsXG4gIGRhdGU6IFwibWFnZW50YVwiLFxuICByZWdleHA6IFwicmVkXCJcbn07XG52YXIgdHJ1bmNhdG9yID0gXCJcXHUyMDI2XCI7XG5mdW5jdGlvbiBjb2xvcmlzZSh2YWx1ZSwgc3R5bGVUeXBlKSB7XG4gIGNvbnN0IGNvbG9yID0gYW5zaUNvbG9yc1tzdHlsZXNbc3R5bGVUeXBlXV0gfHwgYW5zaUNvbG9yc1tzdHlsZVR5cGVdIHx8IFwiXCI7XG4gIGlmICghY29sb3IpIHtcbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgfVxuICByZXR1cm4gYFxceDFCWyR7Y29sb3JbMF19bSR7U3RyaW5nKHZhbHVlKX1cXHgxQlske2NvbG9yWzFdfW1gO1xufVxuX19uYW1lKGNvbG9yaXNlLCBcImNvbG9yaXNlXCIpO1xuZnVuY3Rpb24gbm9ybWFsaXNlT3B0aW9ucyh7XG4gIHNob3dIaWRkZW4gPSBmYWxzZSxcbiAgZGVwdGggPSAyLFxuICBjb2xvcnMgPSBmYWxzZSxcbiAgY3VzdG9tSW5zcGVjdCA9IHRydWUsXG4gIHNob3dQcm94eSA9IGZhbHNlLFxuICBtYXhBcnJheUxlbmd0aCA9IEluZmluaXR5LFxuICBicmVha0xlbmd0aCA9IEluZmluaXR5LFxuICBzZWVuID0gW10sXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zaGFkb3dcbiAgdHJ1bmNhdGU6IHRydW5jYXRlMiA9IEluZmluaXR5LFxuICBzdHlsaXplID0gU3RyaW5nXG59ID0ge30sIGluc3BlY3QzKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgc2hvd0hpZGRlbjogQm9vbGVhbihzaG93SGlkZGVuKSxcbiAgICBkZXB0aDogTnVtYmVyKGRlcHRoKSxcbiAgICBjb2xvcnM6IEJvb2xlYW4oY29sb3JzKSxcbiAgICBjdXN0b21JbnNwZWN0OiBCb29sZWFuKGN1c3RvbUluc3BlY3QpLFxuICAgIHNob3dQcm94eTogQm9vbGVhbihzaG93UHJveHkpLFxuICAgIG1heEFycmF5TGVuZ3RoOiBOdW1iZXIobWF4QXJyYXlMZW5ndGgpLFxuICAgIGJyZWFrTGVuZ3RoOiBOdW1iZXIoYnJlYWtMZW5ndGgpLFxuICAgIHRydW5jYXRlOiBOdW1iZXIodHJ1bmNhdGUyKSxcbiAgICBzZWVuLFxuICAgIGluc3BlY3Q6IGluc3BlY3QzLFxuICAgIHN0eWxpemVcbiAgfTtcbiAgaWYgKG9wdGlvbnMuY29sb3JzKSB7XG4gICAgb3B0aW9ucy5zdHlsaXplID0gY29sb3Jpc2U7XG4gIH1cbiAgcmV0dXJuIG9wdGlvbnM7XG59XG5fX25hbWUobm9ybWFsaXNlT3B0aW9ucywgXCJub3JtYWxpc2VPcHRpb25zXCIpO1xuZnVuY3Rpb24gaXNIaWdoU3Vycm9nYXRlKGNoYXIpIHtcbiAgcmV0dXJuIGNoYXIgPj0gXCJcXHVEODAwXCIgJiYgY2hhciA8PSBcIlxcdURCRkZcIjtcbn1cbl9fbmFtZShpc0hpZ2hTdXJyb2dhdGUsIFwiaXNIaWdoU3Vycm9nYXRlXCIpO1xuZnVuY3Rpb24gdHJ1bmNhdGUoc3RyaW5nLCBsZW5ndGgsIHRhaWwgPSB0cnVuY2F0b3IpIHtcbiAgc3RyaW5nID0gU3RyaW5nKHN0cmluZyk7XG4gIGNvbnN0IHRhaWxMZW5ndGggPSB0YWlsLmxlbmd0aDtcbiAgY29uc3Qgc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcbiAgaWYgKHRhaWxMZW5ndGggPiBsZW5ndGggJiYgc3RyaW5nTGVuZ3RoID4gdGFpbExlbmd0aCkge1xuICAgIHJldHVybiB0YWlsO1xuICB9XG4gIGlmIChzdHJpbmdMZW5ndGggPiBsZW5ndGggJiYgc3RyaW5nTGVuZ3RoID4gdGFpbExlbmd0aCkge1xuICAgIGxldCBlbmQgPSBsZW5ndGggLSB0YWlsTGVuZ3RoO1xuICAgIGlmIChlbmQgPiAwICYmIGlzSGlnaFN1cnJvZ2F0ZShzdHJpbmdbZW5kIC0gMV0pKSB7XG4gICAgICBlbmQgPSBlbmQgLSAxO1xuICAgIH1cbiAgICByZXR1cm4gYCR7c3RyaW5nLnNsaWNlKDAsIGVuZCl9JHt0YWlsfWA7XG4gIH1cbiAgcmV0dXJuIHN0cmluZztcbn1cbl9fbmFtZSh0cnVuY2F0ZSwgXCJ0cnVuY2F0ZVwiKTtcbmZ1bmN0aW9uIGluc3BlY3RMaXN0KGxpc3QsIG9wdGlvbnMsIGluc3BlY3RJdGVtLCBzZXBhcmF0b3IgPSBcIiwgXCIpIHtcbiAgaW5zcGVjdEl0ZW0gPSBpbnNwZWN0SXRlbSB8fCBvcHRpb25zLmluc3BlY3Q7XG4gIGNvbnN0IHNpemUgPSBsaXN0Lmxlbmd0aDtcbiAgaWYgKHNpemUgPT09IDApXG4gICAgcmV0dXJuIFwiXCI7XG4gIGNvbnN0IG9yaWdpbmFsTGVuZ3RoID0gb3B0aW9ucy50cnVuY2F0ZTtcbiAgbGV0IG91dHB1dCA9IFwiXCI7XG4gIGxldCBwZWVrID0gXCJcIjtcbiAgbGV0IHRydW5jYXRlZCA9IFwiXCI7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSArPSAxKSB7XG4gICAgY29uc3QgbGFzdCA9IGkgKyAxID09PSBsaXN0Lmxlbmd0aDtcbiAgICBjb25zdCBzZWNvbmRUb0xhc3QgPSBpICsgMiA9PT0gbGlzdC5sZW5ndGg7XG4gICAgdHJ1bmNhdGVkID0gYCR7dHJ1bmNhdG9yfSgke2xpc3QubGVuZ3RoIC0gaX0pYDtcbiAgICBjb25zdCB2YWx1ZSA9IGxpc3RbaV07XG4gICAgb3B0aW9ucy50cnVuY2F0ZSA9IG9yaWdpbmFsTGVuZ3RoIC0gb3V0cHV0Lmxlbmd0aCAtIChsYXN0ID8gMCA6IHNlcGFyYXRvci5sZW5ndGgpO1xuICAgIGNvbnN0IHN0cmluZyA9IHBlZWsgfHwgaW5zcGVjdEl0ZW0odmFsdWUsIG9wdGlvbnMpICsgKGxhc3QgPyBcIlwiIDogc2VwYXJhdG9yKTtcbiAgICBjb25zdCBuZXh0TGVuZ3RoID0gb3V0cHV0Lmxlbmd0aCArIHN0cmluZy5sZW5ndGg7XG4gICAgY29uc3QgdHJ1bmNhdGVkTGVuZ3RoID0gbmV4dExlbmd0aCArIHRydW5jYXRlZC5sZW5ndGg7XG4gICAgaWYgKGxhc3QgJiYgbmV4dExlbmd0aCA+IG9yaWdpbmFsTGVuZ3RoICYmIG91dHB1dC5sZW5ndGggKyB0cnVuY2F0ZWQubGVuZ3RoIDw9IG9yaWdpbmFsTGVuZ3RoKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgaWYgKCFsYXN0ICYmICFzZWNvbmRUb0xhc3QgJiYgdHJ1bmNhdGVkTGVuZ3RoID4gb3JpZ2luYWxMZW5ndGgpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBwZWVrID0gbGFzdCA/IFwiXCIgOiBpbnNwZWN0SXRlbShsaXN0W2kgKyAxXSwgb3B0aW9ucykgKyAoc2Vjb25kVG9MYXN0ID8gXCJcIiA6IHNlcGFyYXRvcik7XG4gICAgaWYgKCFsYXN0ICYmIHNlY29uZFRvTGFzdCAmJiB0cnVuY2F0ZWRMZW5ndGggPiBvcmlnaW5hbExlbmd0aCAmJiBuZXh0TGVuZ3RoICsgcGVlay5sZW5ndGggPiBvcmlnaW5hbExlbmd0aCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIG91dHB1dCArPSBzdHJpbmc7XG4gICAgaWYgKCFsYXN0ICYmICFzZWNvbmRUb0xhc3QgJiYgbmV4dExlbmd0aCArIHBlZWsubGVuZ3RoID49IG9yaWdpbmFsTGVuZ3RoKSB7XG4gICAgICB0cnVuY2F0ZWQgPSBgJHt0cnVuY2F0b3J9KCR7bGlzdC5sZW5ndGggLSBpIC0gMX0pYDtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB0cnVuY2F0ZWQgPSBcIlwiO1xuICB9XG4gIHJldHVybiBgJHtvdXRwdXR9JHt0cnVuY2F0ZWR9YDtcbn1cbl9fbmFtZShpbnNwZWN0TGlzdCwgXCJpbnNwZWN0TGlzdFwiKTtcbmZ1bmN0aW9uIHF1b3RlQ29tcGxleEtleShrZXkpIHtcbiAgaWYgKGtleS5tYXRjaCgvXlthLXpBLVpfXVthLXpBLVpfMC05XSokLykpIHtcbiAgICByZXR1cm4ga2V5O1xuICB9XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShrZXkpLnJlcGxhY2UoLycvZywgXCJcXFxcJ1wiKS5yZXBsYWNlKC9cXFxcXCIvZywgJ1wiJykucmVwbGFjZSgvKF5cInxcIiQpL2csIFwiJ1wiKTtcbn1cbl9fbmFtZShxdW90ZUNvbXBsZXhLZXksIFwicXVvdGVDb21wbGV4S2V5XCIpO1xuZnVuY3Rpb24gaW5zcGVjdFByb3BlcnR5KFtrZXksIHZhbHVlXSwgb3B0aW9ucykge1xuICBvcHRpb25zLnRydW5jYXRlIC09IDI7XG4gIGlmICh0eXBlb2Yga2V5ID09PSBcInN0cmluZ1wiKSB7XG4gICAga2V5ID0gcXVvdGVDb21wbGV4S2V5KGtleSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGtleSAhPT0gXCJudW1iZXJcIikge1xuICAgIGtleSA9IGBbJHtvcHRpb25zLmluc3BlY3Qoa2V5LCBvcHRpb25zKX1dYDtcbiAgfVxuICBvcHRpb25zLnRydW5jYXRlIC09IGtleS5sZW5ndGg7XG4gIHZhbHVlID0gb3B0aW9ucy5pbnNwZWN0KHZhbHVlLCBvcHRpb25zKTtcbiAgcmV0dXJuIGAke2tleX06ICR7dmFsdWV9YDtcbn1cbl9fbmFtZShpbnNwZWN0UHJvcGVydHksIFwiaW5zcGVjdFByb3BlcnR5XCIpO1xuXG4vLyBub2RlX21vZHVsZXMvbG91cGUvbGliL2FycmF5LmpzXG5mdW5jdGlvbiBpbnNwZWN0QXJyYXkoYXJyYXksIG9wdGlvbnMpIHtcbiAgY29uc3Qgbm9uSW5kZXhQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMoYXJyYXkpLnNsaWNlKGFycmF5Lmxlbmd0aCk7XG4gIGlmICghYXJyYXkubGVuZ3RoICYmICFub25JbmRleFByb3BlcnRpZXMubGVuZ3RoKVxuICAgIHJldHVybiBcIltdXCI7XG4gIG9wdGlvbnMudHJ1bmNhdGUgLT0gNDtcbiAgY29uc3QgbGlzdENvbnRlbnRzID0gaW5zcGVjdExpc3QoYXJyYXksIG9wdGlvbnMpO1xuICBvcHRpb25zLnRydW5jYXRlIC09IGxpc3RDb250ZW50cy5sZW5ndGg7XG4gIGxldCBwcm9wZXJ0eUNvbnRlbnRzID0gXCJcIjtcbiAgaWYgKG5vbkluZGV4UHJvcGVydGllcy5sZW5ndGgpIHtcbiAgICBwcm9wZXJ0eUNvbnRlbnRzID0gaW5zcGVjdExpc3Qobm9uSW5kZXhQcm9wZXJ0aWVzLm1hcCgoa2V5KSA9PiBba2V5LCBhcnJheVtrZXldXSksIG9wdGlvbnMsIGluc3BlY3RQcm9wZXJ0eSk7XG4gIH1cbiAgcmV0dXJuIGBbICR7bGlzdENvbnRlbnRzfSR7cHJvcGVydHlDb250ZW50cyA/IGAsICR7cHJvcGVydHlDb250ZW50c31gIDogXCJcIn0gXWA7XG59XG5fX25hbWUoaW5zcGVjdEFycmF5LCBcImluc3BlY3RBcnJheVwiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2xvdXBlL2xpYi90eXBlZGFycmF5LmpzXG52YXIgZ2V0QXJyYXlOYW1lID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgoYXJyYXkpID0+IHtcbiAgaWYgKHR5cGVvZiBCdWZmZXIgPT09IFwiZnVuY3Rpb25cIiAmJiBhcnJheSBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgIHJldHVybiBcIkJ1ZmZlclwiO1xuICB9XG4gIGlmIChhcnJheVtTeW1ib2wudG9TdHJpbmdUYWddKSB7XG4gICAgcmV0dXJuIGFycmF5W1N5bWJvbC50b1N0cmluZ1RhZ107XG4gIH1cbiAgcmV0dXJuIGFycmF5LmNvbnN0cnVjdG9yLm5hbWU7XG59LCBcImdldEFycmF5TmFtZVwiKTtcbmZ1bmN0aW9uIGluc3BlY3RUeXBlZEFycmF5KGFycmF5LCBvcHRpb25zKSB7XG4gIGNvbnN0IG5hbWUgPSBnZXRBcnJheU5hbWUoYXJyYXkpO1xuICBvcHRpb25zLnRydW5jYXRlIC09IG5hbWUubGVuZ3RoICsgNDtcbiAgY29uc3Qgbm9uSW5kZXhQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMoYXJyYXkpLnNsaWNlKGFycmF5Lmxlbmd0aCk7XG4gIGlmICghYXJyYXkubGVuZ3RoICYmICFub25JbmRleFByb3BlcnRpZXMubGVuZ3RoKVxuICAgIHJldHVybiBgJHtuYW1lfVtdYDtcbiAgbGV0IG91dHB1dCA9IFwiXCI7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBzdHJpbmcgPSBgJHtvcHRpb25zLnN0eWxpemUodHJ1bmNhdGUoYXJyYXlbaV0sIG9wdGlvbnMudHJ1bmNhdGUpLCBcIm51bWJlclwiKX0ke2kgPT09IGFycmF5Lmxlbmd0aCAtIDEgPyBcIlwiIDogXCIsIFwifWA7XG4gICAgb3B0aW9ucy50cnVuY2F0ZSAtPSBzdHJpbmcubGVuZ3RoO1xuICAgIGlmIChhcnJheVtpXSAhPT0gYXJyYXkubGVuZ3RoICYmIG9wdGlvbnMudHJ1bmNhdGUgPD0gMykge1xuICAgICAgb3V0cHV0ICs9IGAke3RydW5jYXRvcn0oJHthcnJheS5sZW5ndGggLSBhcnJheVtpXSArIDF9KWA7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgb3V0cHV0ICs9IHN0cmluZztcbiAgfVxuICBsZXQgcHJvcGVydHlDb250ZW50cyA9IFwiXCI7XG4gIGlmIChub25JbmRleFByb3BlcnRpZXMubGVuZ3RoKSB7XG4gICAgcHJvcGVydHlDb250ZW50cyA9IGluc3BlY3RMaXN0KG5vbkluZGV4UHJvcGVydGllcy5tYXAoKGtleSkgPT4gW2tleSwgYXJyYXlba2V5XV0pLCBvcHRpb25zLCBpbnNwZWN0UHJvcGVydHkpO1xuICB9XG4gIHJldHVybiBgJHtuYW1lfVsgJHtvdXRwdXR9JHtwcm9wZXJ0eUNvbnRlbnRzID8gYCwgJHtwcm9wZXJ0eUNvbnRlbnRzfWAgOiBcIlwifSBdYDtcbn1cbl9fbmFtZShpbnNwZWN0VHlwZWRBcnJheSwgXCJpbnNwZWN0VHlwZWRBcnJheVwiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2xvdXBlL2xpYi9kYXRlLmpzXG5mdW5jdGlvbiBpbnNwZWN0RGF0ZShkYXRlT2JqZWN0LCBvcHRpb25zKSB7XG4gIGNvbnN0IHN0cmluZ1JlcHJlc2VudGF0aW9uID0gZGF0ZU9iamVjdC50b0pTT04oKTtcbiAgaWYgKHN0cmluZ1JlcHJlc2VudGF0aW9uID09PSBudWxsKSB7XG4gICAgcmV0dXJuIFwiSW52YWxpZCBEYXRlXCI7XG4gIH1cbiAgY29uc3Qgc3BsaXQgPSBzdHJpbmdSZXByZXNlbnRhdGlvbi5zcGxpdChcIlRcIik7XG4gIGNvbnN0IGRhdGUgPSBzcGxpdFswXTtcbiAgcmV0dXJuIG9wdGlvbnMuc3R5bGl6ZShgJHtkYXRlfVQke3RydW5jYXRlKHNwbGl0WzFdLCBvcHRpb25zLnRydW5jYXRlIC0gZGF0ZS5sZW5ndGggLSAxKX1gLCBcImRhdGVcIik7XG59XG5fX25hbWUoaW5zcGVjdERhdGUsIFwiaW5zcGVjdERhdGVcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9sb3VwZS9saWIvZnVuY3Rpb24uanNcbmZ1bmN0aW9uIGluc3BlY3RGdW5jdGlvbihmdW5jLCBvcHRpb25zKSB7XG4gIGNvbnN0IGZ1bmN0aW9uVHlwZSA9IGZ1bmNbU3ltYm9sLnRvU3RyaW5nVGFnXSB8fCBcIkZ1bmN0aW9uXCI7XG4gIGNvbnN0IG5hbWUgPSBmdW5jLm5hbWU7XG4gIGlmICghbmFtZSkge1xuICAgIHJldHVybiBvcHRpb25zLnN0eWxpemUoYFske2Z1bmN0aW9uVHlwZX1dYCwgXCJzcGVjaWFsXCIpO1xuICB9XG4gIHJldHVybiBvcHRpb25zLnN0eWxpemUoYFske2Z1bmN0aW9uVHlwZX0gJHt0cnVuY2F0ZShuYW1lLCBvcHRpb25zLnRydW5jYXRlIC0gMTEpfV1gLCBcInNwZWNpYWxcIik7XG59XG5fX25hbWUoaW5zcGVjdEZ1bmN0aW9uLCBcImluc3BlY3RGdW5jdGlvblwiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2xvdXBlL2xpYi9tYXAuanNcbmZ1bmN0aW9uIGluc3BlY3RNYXBFbnRyeShba2V5LCB2YWx1ZV0sIG9wdGlvbnMpIHtcbiAgb3B0aW9ucy50cnVuY2F0ZSAtPSA0O1xuICBrZXkgPSBvcHRpb25zLmluc3BlY3Qoa2V5LCBvcHRpb25zKTtcbiAgb3B0aW9ucy50cnVuY2F0ZSAtPSBrZXkubGVuZ3RoO1xuICB2YWx1ZSA9IG9wdGlvbnMuaW5zcGVjdCh2YWx1ZSwgb3B0aW9ucyk7XG4gIHJldHVybiBgJHtrZXl9ID0+ICR7dmFsdWV9YDtcbn1cbl9fbmFtZShpbnNwZWN0TWFwRW50cnksIFwiaW5zcGVjdE1hcEVudHJ5XCIpO1xuZnVuY3Rpb24gbWFwVG9FbnRyaWVzKG1hcCkge1xuICBjb25zdCBlbnRyaWVzID0gW107XG4gIG1hcC5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgZW50cmllcy5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0pO1xuICByZXR1cm4gZW50cmllcztcbn1cbl9fbmFtZShtYXBUb0VudHJpZXMsIFwibWFwVG9FbnRyaWVzXCIpO1xuZnVuY3Rpb24gaW5zcGVjdE1hcChtYXAsIG9wdGlvbnMpIHtcbiAgY29uc3Qgc2l6ZSA9IG1hcC5zaXplIC0gMTtcbiAgaWYgKHNpemUgPD0gMCkge1xuICAgIHJldHVybiBcIk1hcHt9XCI7XG4gIH1cbiAgb3B0aW9ucy50cnVuY2F0ZSAtPSA3O1xuICByZXR1cm4gYE1hcHsgJHtpbnNwZWN0TGlzdChtYXBUb0VudHJpZXMobWFwKSwgb3B0aW9ucywgaW5zcGVjdE1hcEVudHJ5KX0gfWA7XG59XG5fX25hbWUoaW5zcGVjdE1hcCwgXCJpbnNwZWN0TWFwXCIpO1xuXG4vLyBub2RlX21vZHVsZXMvbG91cGUvbGliL251bWJlci5qc1xudmFyIGlzTmFOID0gTnVtYmVyLmlzTmFOIHx8ICgoaSkgPT4gaSAhPT0gaSk7XG5mdW5jdGlvbiBpbnNwZWN0TnVtYmVyKG51bWJlciwgb3B0aW9ucykge1xuICBpZiAoaXNOYU4obnVtYmVyKSkge1xuICAgIHJldHVybiBvcHRpb25zLnN0eWxpemUoXCJOYU5cIiwgXCJudW1iZXJcIik7XG4gIH1cbiAgaWYgKG51bWJlciA9PT0gSW5maW5pdHkpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKFwiSW5maW5pdHlcIiwgXCJudW1iZXJcIik7XG4gIH1cbiAgaWYgKG51bWJlciA9PT0gLUluZmluaXR5KSB7XG4gICAgcmV0dXJuIG9wdGlvbnMuc3R5bGl6ZShcIi1JbmZpbml0eVwiLCBcIm51bWJlclwiKTtcbiAgfVxuICBpZiAobnVtYmVyID09PSAwKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMuc3R5bGl6ZSgxIC8gbnVtYmVyID09PSBJbmZpbml0eSA/IFwiKzBcIiA6IFwiLTBcIiwgXCJudW1iZXJcIik7XG4gIH1cbiAgcmV0dXJuIG9wdGlvbnMuc3R5bGl6ZSh0cnVuY2F0ZShTdHJpbmcobnVtYmVyKSwgb3B0aW9ucy50cnVuY2F0ZSksIFwibnVtYmVyXCIpO1xufVxuX19uYW1lKGluc3BlY3ROdW1iZXIsIFwiaW5zcGVjdE51bWJlclwiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2xvdXBlL2xpYi9iaWdpbnQuanNcbmZ1bmN0aW9uIGluc3BlY3RCaWdJbnQobnVtYmVyLCBvcHRpb25zKSB7XG4gIGxldCBudW1zID0gdHJ1bmNhdGUobnVtYmVyLnRvU3RyaW5nKCksIG9wdGlvbnMudHJ1bmNhdGUgLSAxKTtcbiAgaWYgKG51bXMgIT09IHRydW5jYXRvcilcbiAgICBudW1zICs9IFwiblwiO1xuICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKG51bXMsIFwiYmlnaW50XCIpO1xufVxuX19uYW1lKGluc3BlY3RCaWdJbnQsIFwiaW5zcGVjdEJpZ0ludFwiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2xvdXBlL2xpYi9yZWdleHAuanNcbmZ1bmN0aW9uIGluc3BlY3RSZWdFeHAodmFsdWUsIG9wdGlvbnMpIHtcbiAgY29uc3QgZmxhZ3MgPSB2YWx1ZS50b1N0cmluZygpLnNwbGl0KFwiL1wiKVsyXTtcbiAgY29uc3Qgc291cmNlTGVuZ3RoID0gb3B0aW9ucy50cnVuY2F0ZSAtICgyICsgZmxhZ3MubGVuZ3RoKTtcbiAgY29uc3Qgc291cmNlID0gdmFsdWUuc291cmNlO1xuICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKGAvJHt0cnVuY2F0ZShzb3VyY2UsIHNvdXJjZUxlbmd0aCl9LyR7ZmxhZ3N9YCwgXCJyZWdleHBcIik7XG59XG5fX25hbWUoaW5zcGVjdFJlZ0V4cCwgXCJpbnNwZWN0UmVnRXhwXCIpO1xuXG4vLyBub2RlX21vZHVsZXMvbG91cGUvbGliL3NldC5qc1xuZnVuY3Rpb24gYXJyYXlGcm9tU2V0KHNldDIpIHtcbiAgY29uc3QgdmFsdWVzID0gW107XG4gIHNldDIuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICB2YWx1ZXMucHVzaCh2YWx1ZSk7XG4gIH0pO1xuICByZXR1cm4gdmFsdWVzO1xufVxuX19uYW1lKGFycmF5RnJvbVNldCwgXCJhcnJheUZyb21TZXRcIik7XG5mdW5jdGlvbiBpbnNwZWN0U2V0KHNldDIsIG9wdGlvbnMpIHtcbiAgaWYgKHNldDIuc2l6ZSA9PT0gMClcbiAgICByZXR1cm4gXCJTZXR7fVwiO1xuICBvcHRpb25zLnRydW5jYXRlIC09IDc7XG4gIHJldHVybiBgU2V0eyAke2luc3BlY3RMaXN0KGFycmF5RnJvbVNldChzZXQyKSwgb3B0aW9ucyl9IH1gO1xufVxuX19uYW1lKGluc3BlY3RTZXQsIFwiaW5zcGVjdFNldFwiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2xvdXBlL2xpYi9zdHJpbmcuanNcbnZhciBzdHJpbmdFc2NhcGVDaGFycyA9IG5ldyBSZWdFeHAoXCJbJ1xcXFx1MDAwMC1cXFxcdTAwMWZcXFxcdTAwN2YtXFxcXHUwMDlmXFxcXHUwMGFkXFxcXHUwNjAwLVxcXFx1MDYwNFxcXFx1MDcwZlxcXFx1MTdiNFxcXFx1MTdiNVxcXFx1MjAwYy1cXFxcdTIwMGZcXFxcdTIwMjgtXFxcXHUyMDJmXFxcXHUyMDYwLVxcXFx1MjA2ZlxcXFx1ZmVmZlxcXFx1ZmZmMC1cXFxcdWZmZmZdXCIsIFwiZ1wiKTtcbnZhciBlc2NhcGVDaGFyYWN0ZXJzID0ge1xuICBcIlxcYlwiOiBcIlxcXFxiXCIsXG4gIFwiXHRcIjogXCJcXFxcdFwiLFxuICBcIlxcblwiOiBcIlxcXFxuXCIsXG4gIFwiXFxmXCI6IFwiXFxcXGZcIixcbiAgXCJcXHJcIjogXCJcXFxcclwiLFxuICBcIidcIjogXCJcXFxcJ1wiLFxuICBcIlxcXFxcIjogXCJcXFxcXFxcXFwiXG59O1xudmFyIGhleCA9IDE2O1xudmFyIHVuaWNvZGVMZW5ndGggPSA0O1xuZnVuY3Rpb24gZXNjYXBlKGNoYXIpIHtcbiAgcmV0dXJuIGVzY2FwZUNoYXJhY3RlcnNbY2hhcl0gfHwgYFxcXFx1JHtgMDAwMCR7Y2hhci5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKGhleCl9YC5zbGljZSgtdW5pY29kZUxlbmd0aCl9YDtcbn1cbl9fbmFtZShlc2NhcGUsIFwiZXNjYXBlXCIpO1xuZnVuY3Rpb24gaW5zcGVjdFN0cmluZyhzdHJpbmcsIG9wdGlvbnMpIHtcbiAgaWYgKHN0cmluZ0VzY2FwZUNoYXJzLnRlc3Qoc3RyaW5nKSkge1xuICAgIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHN0cmluZ0VzY2FwZUNoYXJzLCBlc2NhcGUpO1xuICB9XG4gIHJldHVybiBvcHRpb25zLnN0eWxpemUoYCcke3RydW5jYXRlKHN0cmluZywgb3B0aW9ucy50cnVuY2F0ZSAtIDIpfSdgLCBcInN0cmluZ1wiKTtcbn1cbl9fbmFtZShpbnNwZWN0U3RyaW5nLCBcImluc3BlY3RTdHJpbmdcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9sb3VwZS9saWIvc3ltYm9sLmpzXG5mdW5jdGlvbiBpbnNwZWN0U3ltYm9sKHZhbHVlKSB7XG4gIGlmIChcImRlc2NyaXB0aW9uXCIgaW4gU3ltYm9sLnByb3RvdHlwZSkge1xuICAgIHJldHVybiB2YWx1ZS5kZXNjcmlwdGlvbiA/IGBTeW1ib2woJHt2YWx1ZS5kZXNjcmlwdGlvbn0pYCA6IFwiU3ltYm9sKClcIjtcbiAgfVxuICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcbn1cbl9fbmFtZShpbnNwZWN0U3ltYm9sLCBcImluc3BlY3RTeW1ib2xcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9sb3VwZS9saWIvcHJvbWlzZS5qc1xudmFyIGdldFByb21pc2VWYWx1ZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKCkgPT4gXCJQcm9taXNle1xcdTIwMjZ9XCIsIFwiZ2V0UHJvbWlzZVZhbHVlXCIpO1xudHJ5IHtcbiAgY29uc3QgeyBnZXRQcm9taXNlRGV0YWlscywga1BlbmRpbmcsIGtSZWplY3RlZCB9ID0gcHJvY2Vzcy5iaW5kaW5nKFwidXRpbFwiKTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoZ2V0UHJvbWlzZURldGFpbHMoUHJvbWlzZS5yZXNvbHZlKCkpKSkge1xuICAgIGdldFByb21pc2VWYWx1ZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHZhbHVlLCBvcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBbc3RhdGUsIGlubmVyVmFsdWVdID0gZ2V0UHJvbWlzZURldGFpbHModmFsdWUpO1xuICAgICAgaWYgKHN0YXRlID09PSBrUGVuZGluZykge1xuICAgICAgICByZXR1cm4gXCJQcm9taXNlezxwZW5kaW5nPn1cIjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBgUHJvbWlzZSR7c3RhdGUgPT09IGtSZWplY3RlZCA/IFwiIVwiIDogXCJcIn17JHtvcHRpb25zLmluc3BlY3QoaW5uZXJWYWx1ZSwgb3B0aW9ucyl9fWA7XG4gICAgfSwgXCJnZXRQcm9taXNlVmFsdWVcIik7XG4gIH1cbn0gY2F0Y2ggKG5vdE5vZGUpIHtcbn1cbnZhciBwcm9taXNlX2RlZmF1bHQgPSBnZXRQcm9taXNlVmFsdWU7XG5cbi8vIG5vZGVfbW9kdWxlcy9sb3VwZS9saWIvb2JqZWN0LmpzXG5mdW5jdGlvbiBpbnNwZWN0T2JqZWN0KG9iamVjdCwgb3B0aW9ucykge1xuICBjb25zdCBwcm9wZXJ0aWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0KTtcbiAgY29uc3Qgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCkgOiBbXTtcbiAgaWYgKHByb3BlcnRpZXMubGVuZ3RoID09PSAwICYmIHN5bWJvbHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFwie31cIjtcbiAgfVxuICBvcHRpb25zLnRydW5jYXRlIC09IDQ7XG4gIG9wdGlvbnMuc2VlbiA9IG9wdGlvbnMuc2VlbiB8fCBbXTtcbiAgaWYgKG9wdGlvbnMuc2Vlbi5pbmNsdWRlcyhvYmplY3QpKSB7XG4gICAgcmV0dXJuIFwiW0NpcmN1bGFyXVwiO1xuICB9XG4gIG9wdGlvbnMuc2Vlbi5wdXNoKG9iamVjdCk7XG4gIGNvbnN0IHByb3BlcnR5Q29udGVudHMgPSBpbnNwZWN0TGlzdChwcm9wZXJ0aWVzLm1hcCgoa2V5KSA9PiBba2V5LCBvYmplY3Rba2V5XV0pLCBvcHRpb25zLCBpbnNwZWN0UHJvcGVydHkpO1xuICBjb25zdCBzeW1ib2xDb250ZW50cyA9IGluc3BlY3RMaXN0KHN5bWJvbHMubWFwKChrZXkpID0+IFtrZXksIG9iamVjdFtrZXldXSksIG9wdGlvbnMsIGluc3BlY3RQcm9wZXJ0eSk7XG4gIG9wdGlvbnMuc2Vlbi5wb3AoKTtcbiAgbGV0IHNlcCA9IFwiXCI7XG4gIGlmIChwcm9wZXJ0eUNvbnRlbnRzICYmIHN5bWJvbENvbnRlbnRzKSB7XG4gICAgc2VwID0gXCIsIFwiO1xuICB9XG4gIHJldHVybiBgeyAke3Byb3BlcnR5Q29udGVudHN9JHtzZXB9JHtzeW1ib2xDb250ZW50c30gfWA7XG59XG5fX25hbWUoaW5zcGVjdE9iamVjdCwgXCJpbnNwZWN0T2JqZWN0XCIpO1xuXG4vLyBub2RlX21vZHVsZXMvbG91cGUvbGliL2NsYXNzLmpzXG52YXIgdG9TdHJpbmdUYWcgPSB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIFN5bWJvbC50b1N0cmluZ1RhZyA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IGZhbHNlO1xuZnVuY3Rpb24gaW5zcGVjdENsYXNzKHZhbHVlLCBvcHRpb25zKSB7XG4gIGxldCBuYW1lID0gXCJcIjtcbiAgaWYgKHRvU3RyaW5nVGFnICYmIHRvU3RyaW5nVGFnIGluIHZhbHVlKSB7XG4gICAgbmFtZSA9IHZhbHVlW3RvU3RyaW5nVGFnXTtcbiAgfVxuICBuYW1lID0gbmFtZSB8fCB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lO1xuICBpZiAoIW5hbWUgfHwgbmFtZSA9PT0gXCJfY2xhc3NcIikge1xuICAgIG5hbWUgPSBcIjxBbm9ueW1vdXMgQ2xhc3M+XCI7XG4gIH1cbiAgb3B0aW9ucy50cnVuY2F0ZSAtPSBuYW1lLmxlbmd0aDtcbiAgcmV0dXJuIGAke25hbWV9JHtpbnNwZWN0T2JqZWN0KHZhbHVlLCBvcHRpb25zKX1gO1xufVxuX19uYW1lKGluc3BlY3RDbGFzcywgXCJpbnNwZWN0Q2xhc3NcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9sb3VwZS9saWIvYXJndW1lbnRzLmpzXG5mdW5jdGlvbiBpbnNwZWN0QXJndW1lbnRzKGFyZ3MsIG9wdGlvbnMpIHtcbiAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKVxuICAgIHJldHVybiBcIkFyZ3VtZW50c1tdXCI7XG4gIG9wdGlvbnMudHJ1bmNhdGUgLT0gMTM7XG4gIHJldHVybiBgQXJndW1lbnRzWyAke2luc3BlY3RMaXN0KGFyZ3MsIG9wdGlvbnMpfSBdYDtcbn1cbl9fbmFtZShpbnNwZWN0QXJndW1lbnRzLCBcImluc3BlY3RBcmd1bWVudHNcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9sb3VwZS9saWIvZXJyb3IuanNcbnZhciBlcnJvcktleXMgPSBbXG4gIFwic3RhY2tcIixcbiAgXCJsaW5lXCIsXG4gIFwiY29sdW1uXCIsXG4gIFwibmFtZVwiLFxuICBcIm1lc3NhZ2VcIixcbiAgXCJmaWxlTmFtZVwiLFxuICBcImxpbmVOdW1iZXJcIixcbiAgXCJjb2x1bW5OdW1iZXJcIixcbiAgXCJudW1iZXJcIixcbiAgXCJkZXNjcmlwdGlvblwiLFxuICBcImNhdXNlXCJcbl07XG5mdW5jdGlvbiBpbnNwZWN0T2JqZWN0MihlcnJvciwgb3B0aW9ucykge1xuICBjb25zdCBwcm9wZXJ0aWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZXJyb3IpLmZpbHRlcigoa2V5KSA9PiBlcnJvcktleXMuaW5kZXhPZihrZXkpID09PSAtMSk7XG4gIGNvbnN0IG5hbWUgPSBlcnJvci5uYW1lO1xuICBvcHRpb25zLnRydW5jYXRlIC09IG5hbWUubGVuZ3RoO1xuICBsZXQgbWVzc2FnZSA9IFwiXCI7XG4gIGlmICh0eXBlb2YgZXJyb3IubWVzc2FnZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIG1lc3NhZ2UgPSB0cnVuY2F0ZShlcnJvci5tZXNzYWdlLCBvcHRpb25zLnRydW5jYXRlKTtcbiAgfSBlbHNlIHtcbiAgICBwcm9wZXJ0aWVzLnVuc2hpZnQoXCJtZXNzYWdlXCIpO1xuICB9XG4gIG1lc3NhZ2UgPSBtZXNzYWdlID8gYDogJHttZXNzYWdlfWAgOiBcIlwiO1xuICBvcHRpb25zLnRydW5jYXRlIC09IG1lc3NhZ2UubGVuZ3RoICsgNTtcbiAgb3B0aW9ucy5zZWVuID0gb3B0aW9ucy5zZWVuIHx8IFtdO1xuICBpZiAob3B0aW9ucy5zZWVuLmluY2x1ZGVzKGVycm9yKSkge1xuICAgIHJldHVybiBcIltDaXJjdWxhcl1cIjtcbiAgfVxuICBvcHRpb25zLnNlZW4ucHVzaChlcnJvcik7XG4gIGNvbnN0IHByb3BlcnR5Q29udGVudHMgPSBpbnNwZWN0TGlzdChwcm9wZXJ0aWVzLm1hcCgoa2V5KSA9PiBba2V5LCBlcnJvcltrZXldXSksIG9wdGlvbnMsIGluc3BlY3RQcm9wZXJ0eSk7XG4gIHJldHVybiBgJHtuYW1lfSR7bWVzc2FnZX0ke3Byb3BlcnR5Q29udGVudHMgPyBgIHsgJHtwcm9wZXJ0eUNvbnRlbnRzfSB9YCA6IFwiXCJ9YDtcbn1cbl9fbmFtZShpbnNwZWN0T2JqZWN0MiwgXCJpbnNwZWN0T2JqZWN0XCIpO1xuXG4vLyBub2RlX21vZHVsZXMvbG91cGUvbGliL2h0bWwuanNcbmZ1bmN0aW9uIGluc3BlY3RBdHRyaWJ1dGUoW2tleSwgdmFsdWVdLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMudHJ1bmNhdGUgLT0gMztcbiAgaWYgKCF2YWx1ZSkge1xuICAgIHJldHVybiBgJHtvcHRpb25zLnN0eWxpemUoU3RyaW5nKGtleSksIFwieWVsbG93XCIpfWA7XG4gIH1cbiAgcmV0dXJuIGAke29wdGlvbnMuc3R5bGl6ZShTdHJpbmcoa2V5KSwgXCJ5ZWxsb3dcIil9PSR7b3B0aW9ucy5zdHlsaXplKGBcIiR7dmFsdWV9XCJgLCBcInN0cmluZ1wiKX1gO1xufVxuX19uYW1lKGluc3BlY3RBdHRyaWJ1dGUsIFwiaW5zcGVjdEF0dHJpYnV0ZVwiKTtcbmZ1bmN0aW9uIGluc3BlY3RIVE1MQ29sbGVjdGlvbihjb2xsZWN0aW9uLCBvcHRpb25zKSB7XG4gIHJldHVybiBpbnNwZWN0TGlzdChjb2xsZWN0aW9uLCBvcHRpb25zLCBpbnNwZWN0SFRNTCwgXCJcXG5cIik7XG59XG5fX25hbWUoaW5zcGVjdEhUTUxDb2xsZWN0aW9uLCBcImluc3BlY3RIVE1MQ29sbGVjdGlvblwiKTtcbmZ1bmN0aW9uIGluc3BlY3RIVE1MKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgY29uc3QgcHJvcGVydGllcyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlTmFtZXMoKTtcbiAgY29uc3QgbmFtZSA9IGVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBoZWFkID0gb3B0aW9ucy5zdHlsaXplKGA8JHtuYW1lfWAsIFwic3BlY2lhbFwiKTtcbiAgY29uc3QgaGVhZENsb3NlID0gb3B0aW9ucy5zdHlsaXplKGA+YCwgXCJzcGVjaWFsXCIpO1xuICBjb25zdCB0YWlsID0gb3B0aW9ucy5zdHlsaXplKGA8LyR7bmFtZX0+YCwgXCJzcGVjaWFsXCIpO1xuICBvcHRpb25zLnRydW5jYXRlIC09IG5hbWUubGVuZ3RoICogMiArIDU7XG4gIGxldCBwcm9wZXJ0eUNvbnRlbnRzID0gXCJcIjtcbiAgaWYgKHByb3BlcnRpZXMubGVuZ3RoID4gMCkge1xuICAgIHByb3BlcnR5Q29udGVudHMgKz0gXCIgXCI7XG4gICAgcHJvcGVydHlDb250ZW50cyArPSBpbnNwZWN0TGlzdChwcm9wZXJ0aWVzLm1hcCgoa2V5KSA9PiBba2V5LCBlbGVtZW50LmdldEF0dHJpYnV0ZShrZXkpXSksIG9wdGlvbnMsIGluc3BlY3RBdHRyaWJ1dGUsIFwiIFwiKTtcbiAgfVxuICBvcHRpb25zLnRydW5jYXRlIC09IHByb3BlcnR5Q29udGVudHMubGVuZ3RoO1xuICBjb25zdCB0cnVuY2F0ZTIgPSBvcHRpb25zLnRydW5jYXRlO1xuICBsZXQgY2hpbGRyZW4gPSBpbnNwZWN0SFRNTENvbGxlY3Rpb24oZWxlbWVudC5jaGlsZHJlbiwgb3B0aW9ucyk7XG4gIGlmIChjaGlsZHJlbiAmJiBjaGlsZHJlbi5sZW5ndGggPiB0cnVuY2F0ZTIpIHtcbiAgICBjaGlsZHJlbiA9IGAke3RydW5jYXRvcn0oJHtlbGVtZW50LmNoaWxkcmVuLmxlbmd0aH0pYDtcbiAgfVxuICByZXR1cm4gYCR7aGVhZH0ke3Byb3BlcnR5Q29udGVudHN9JHtoZWFkQ2xvc2V9JHtjaGlsZHJlbn0ke3RhaWx9YDtcbn1cbl9fbmFtZShpbnNwZWN0SFRNTCwgXCJpbnNwZWN0SFRNTFwiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2xvdXBlL2xpYi9pbmRleC5qc1xudmFyIHN5bWJvbHNTdXBwb3J0ZWQgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5mb3IgPT09IFwiZnVuY3Rpb25cIjtcbnZhciBjaGFpSW5zcGVjdCA9IHN5bWJvbHNTdXBwb3J0ZWQgPyBTeW1ib2wuZm9yKFwiY2hhaS9pbnNwZWN0XCIpIDogXCJAQGNoYWkvaW5zcGVjdFwiO1xudmFyIG5vZGVJbnNwZWN0ID0gZmFsc2U7XG50cnkge1xuICBjb25zdCBub2RlVXRpbCA9IHJlcXVpcmVfdXRpbCgpO1xuICBub2RlSW5zcGVjdCA9IG5vZGVVdGlsLmluc3BlY3QgPyBub2RlVXRpbC5pbnNwZWN0LmN1c3RvbSA6IGZhbHNlO1xufSBjYXRjaCAobm9Ob2RlSW5zcGVjdCkge1xuICBub2RlSW5zcGVjdCA9IGZhbHNlO1xufVxudmFyIGNvbnN0cnVjdG9yTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7XG52YXIgc3RyaW5nVGFnTWFwID0ge307XG52YXIgYmFzZVR5cGVzTWFwID0ge1xuICB1bmRlZmluZWQ6ICh2YWx1ZSwgb3B0aW9ucykgPT4gb3B0aW9ucy5zdHlsaXplKFwidW5kZWZpbmVkXCIsIFwidW5kZWZpbmVkXCIpLFxuICBudWxsOiAodmFsdWUsIG9wdGlvbnMpID0+IG9wdGlvbnMuc3R5bGl6ZShcIm51bGxcIiwgXCJudWxsXCIpLFxuICBib29sZWFuOiAodmFsdWUsIG9wdGlvbnMpID0+IG9wdGlvbnMuc3R5bGl6ZShTdHJpbmcodmFsdWUpLCBcImJvb2xlYW5cIiksXG4gIEJvb2xlYW46ICh2YWx1ZSwgb3B0aW9ucykgPT4gb3B0aW9ucy5zdHlsaXplKFN0cmluZyh2YWx1ZSksIFwiYm9vbGVhblwiKSxcbiAgbnVtYmVyOiBpbnNwZWN0TnVtYmVyLFxuICBOdW1iZXI6IGluc3BlY3ROdW1iZXIsXG4gIGJpZ2ludDogaW5zcGVjdEJpZ0ludCxcbiAgQmlnSW50OiBpbnNwZWN0QmlnSW50LFxuICBzdHJpbmc6IGluc3BlY3RTdHJpbmcsXG4gIFN0cmluZzogaW5zcGVjdFN0cmluZyxcbiAgZnVuY3Rpb246IGluc3BlY3RGdW5jdGlvbixcbiAgRnVuY3Rpb246IGluc3BlY3RGdW5jdGlvbixcbiAgc3ltYm9sOiBpbnNwZWN0U3ltYm9sLFxuICAvLyBBIFN5bWJvbCBwb2x5ZmlsbCB3aWxsIHJldHVybiBgU3ltYm9sYCBub3QgYHN5bWJvbGAgZnJvbSB0eXBlZGV0ZWN0XG4gIFN5bWJvbDogaW5zcGVjdFN5bWJvbCxcbiAgQXJyYXk6IGluc3BlY3RBcnJheSxcbiAgRGF0ZTogaW5zcGVjdERhdGUsXG4gIE1hcDogaW5zcGVjdE1hcCxcbiAgU2V0OiBpbnNwZWN0U2V0LFxuICBSZWdFeHA6IGluc3BlY3RSZWdFeHAsXG4gIFByb21pc2U6IHByb21pc2VfZGVmYXVsdCxcbiAgLy8gV2Vha1NldCwgV2Vha01hcCBhcmUgdG90YWxseSBvcGFxdWUgdG8gdXNcbiAgV2Vha1NldDogKHZhbHVlLCBvcHRpb25zKSA9PiBvcHRpb25zLnN0eWxpemUoXCJXZWFrU2V0e1xcdTIwMjZ9XCIsIFwic3BlY2lhbFwiKSxcbiAgV2Vha01hcDogKHZhbHVlLCBvcHRpb25zKSA9PiBvcHRpb25zLnN0eWxpemUoXCJXZWFrTWFwe1xcdTIwMjZ9XCIsIFwic3BlY2lhbFwiKSxcbiAgQXJndW1lbnRzOiBpbnNwZWN0QXJndW1lbnRzLFxuICBJbnQ4QXJyYXk6IGluc3BlY3RUeXBlZEFycmF5LFxuICBVaW50OEFycmF5OiBpbnNwZWN0VHlwZWRBcnJheSxcbiAgVWludDhDbGFtcGVkQXJyYXk6IGluc3BlY3RUeXBlZEFycmF5LFxuICBJbnQxNkFycmF5OiBpbnNwZWN0VHlwZWRBcnJheSxcbiAgVWludDE2QXJyYXk6IGluc3BlY3RUeXBlZEFycmF5LFxuICBJbnQzMkFycmF5OiBpbnNwZWN0VHlwZWRBcnJheSxcbiAgVWludDMyQXJyYXk6IGluc3BlY3RUeXBlZEFycmF5LFxuICBGbG9hdDMyQXJyYXk6IGluc3BlY3RUeXBlZEFycmF5LFxuICBGbG9hdDY0QXJyYXk6IGluc3BlY3RUeXBlZEFycmF5LFxuICBHZW5lcmF0b3I6ICgpID0+IFwiXCIsXG4gIERhdGFWaWV3OiAoKSA9PiBcIlwiLFxuICBBcnJheUJ1ZmZlcjogKCkgPT4gXCJcIixcbiAgRXJyb3I6IGluc3BlY3RPYmplY3QyLFxuICBIVE1MQ29sbGVjdGlvbjogaW5zcGVjdEhUTUxDb2xsZWN0aW9uLFxuICBOb2RlTGlzdDogaW5zcGVjdEhUTUxDb2xsZWN0aW9uXG59O1xudmFyIGluc3BlY3RDdXN0b20gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh2YWx1ZSwgb3B0aW9ucywgdHlwZTMpID0+IHtcbiAgaWYgKGNoYWlJbnNwZWN0IGluIHZhbHVlICYmIHR5cGVvZiB2YWx1ZVtjaGFpSW5zcGVjdF0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHJldHVybiB2YWx1ZVtjaGFpSW5zcGVjdF0ob3B0aW9ucyk7XG4gIH1cbiAgaWYgKG5vZGVJbnNwZWN0ICYmIG5vZGVJbnNwZWN0IGluIHZhbHVlICYmIHR5cGVvZiB2YWx1ZVtub2RlSW5zcGVjdF0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHJldHVybiB2YWx1ZVtub2RlSW5zcGVjdF0ob3B0aW9ucy5kZXB0aCwgb3B0aW9ucyk7XG4gIH1cbiAgaWYgKFwiaW5zcGVjdFwiIGluIHZhbHVlICYmIHR5cGVvZiB2YWx1ZS5pbnNwZWN0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gdmFsdWUuaW5zcGVjdChvcHRpb25zLmRlcHRoLCBvcHRpb25zKTtcbiAgfVxuICBpZiAoXCJjb25zdHJ1Y3RvclwiIGluIHZhbHVlICYmIGNvbnN0cnVjdG9yTWFwLmhhcyh2YWx1ZS5jb25zdHJ1Y3RvcikpIHtcbiAgICByZXR1cm4gY29uc3RydWN0b3JNYXAuZ2V0KHZhbHVlLmNvbnN0cnVjdG9yKSh2YWx1ZSwgb3B0aW9ucyk7XG4gIH1cbiAgaWYgKHN0cmluZ1RhZ01hcFt0eXBlM10pIHtcbiAgICByZXR1cm4gc3RyaW5nVGFnTWFwW3R5cGUzXSh2YWx1ZSwgb3B0aW9ucyk7XG4gIH1cbiAgcmV0dXJuIFwiXCI7XG59LCBcImluc3BlY3RDdXN0b21cIik7XG52YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuZnVuY3Rpb24gaW5zcGVjdCh2YWx1ZSwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBub3JtYWxpc2VPcHRpb25zKG9wdHMsIGluc3BlY3QpO1xuICBjb25zdCB7IGN1c3RvbUluc3BlY3QgfSA9IG9wdGlvbnM7XG4gIGxldCB0eXBlMyA9IHZhbHVlID09PSBudWxsID8gXCJudWxsXCIgOiB0eXBlb2YgdmFsdWU7XG4gIGlmICh0eXBlMyA9PT0gXCJvYmplY3RcIikge1xuICAgIHR5cGUzID0gdG9TdHJpbmcuY2FsbCh2YWx1ZSkuc2xpY2UoOCwgLTEpO1xuICB9XG4gIGlmICh0eXBlMyBpbiBiYXNlVHlwZXNNYXApIHtcbiAgICByZXR1cm4gYmFzZVR5cGVzTWFwW3R5cGUzXSh2YWx1ZSwgb3B0aW9ucyk7XG4gIH1cbiAgaWYgKGN1c3RvbUluc3BlY3QgJiYgdmFsdWUpIHtcbiAgICBjb25zdCBvdXRwdXQgPSBpbnNwZWN0Q3VzdG9tKHZhbHVlLCBvcHRpb25zLCB0eXBlMyk7XG4gICAgaWYgKG91dHB1dCkge1xuICAgICAgaWYgKHR5cGVvZiBvdXRwdXQgPT09IFwic3RyaW5nXCIpXG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICByZXR1cm4gaW5zcGVjdChvdXRwdXQsIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuICBjb25zdCBwcm90byA9IHZhbHVlID8gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKSA6IGZhbHNlO1xuICBpZiAocHJvdG8gPT09IE9iamVjdC5wcm90b3R5cGUgfHwgcHJvdG8gPT09IG51bGwpIHtcbiAgICByZXR1cm4gaW5zcGVjdE9iamVjdCh2YWx1ZSwgb3B0aW9ucyk7XG4gIH1cbiAgaWYgKHZhbHVlICYmIHR5cGVvZiBIVE1MRWxlbWVudCA9PT0gXCJmdW5jdGlvblwiICYmIHZhbHVlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICByZXR1cm4gaW5zcGVjdEhUTUwodmFsdWUsIG9wdGlvbnMpO1xuICB9XG4gIGlmIChcImNvbnN0cnVjdG9yXCIgaW4gdmFsdWUpIHtcbiAgICBpZiAodmFsdWUuY29uc3RydWN0b3IgIT09IE9iamVjdCkge1xuICAgICAgcmV0dXJuIGluc3BlY3RDbGFzcyh2YWx1ZSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiBpbnNwZWN0T2JqZWN0KHZhbHVlLCBvcHRpb25zKTtcbiAgfVxuICBpZiAodmFsdWUgPT09IE9iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gaW5zcGVjdE9iamVjdCh2YWx1ZSwgb3B0aW9ucyk7XG4gIH1cbiAgcmV0dXJuIG9wdGlvbnMuc3R5bGl6ZShTdHJpbmcodmFsdWUpLCB0eXBlMyk7XG59XG5fX25hbWUoaW5zcGVjdCwgXCJpbnNwZWN0XCIpO1xuXG4vLyBsaWIvY2hhaS9jb25maWcuanNcbnZhciBjb25maWcgPSB7XG4gIC8qKlxuICAgKiAjIyMgY29uZmlnLmluY2x1ZGVTdGFja1xuICAgKlxuICAgKiBVc2VyIGNvbmZpZ3VyYWJsZSBwcm9wZXJ0eSwgaW5mbHVlbmNlcyB3aGV0aGVyIHN0YWNrIHRyYWNlXG4gICAqIGlzIGluY2x1ZGVkIGluIEFzc2VydGlvbiBlcnJvciBtZXNzYWdlLiBEZWZhdWx0IG9mIGZhbHNlXG4gICAqIHN1cHByZXNzZXMgc3RhY2sgdHJhY2UgaW4gdGhlIGVycm9yIG1lc3NhZ2UuXG4gICAqXG4gICAqICAgICBjaGFpLmNvbmZpZy5pbmNsdWRlU3RhY2sgPSB0cnVlOyAgLy8gZW5hYmxlIHN0YWNrIG9uIGVycm9yXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn1cbiAgICogQHB1YmxpY1xuICAgKi9cbiAgaW5jbHVkZVN0YWNrOiBmYWxzZSxcbiAgLyoqXG4gICAqICMjIyBjb25maWcuc2hvd0RpZmZcbiAgICpcbiAgICogVXNlciBjb25maWd1cmFibGUgcHJvcGVydHksIGluZmx1ZW5jZXMgd2hldGhlciBvciBub3RcbiAgICogdGhlIGBzaG93RGlmZmAgZmxhZyBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIHRocm93blxuICAgKiBBc3NlcnRpb25FcnJvcnMuIGBmYWxzZWAgd2lsbCBhbHdheXMgYmUgYGZhbHNlYDsgYHRydWVgXG4gICAqIHdpbGwgYmUgdHJ1ZSB3aGVuIHRoZSBhc3NlcnRpb24gaGFzIHJlcXVlc3RlZCBhIGRpZmZcbiAgICogYmUgc2hvd24uXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn1cbiAgICogQHB1YmxpY1xuICAgKi9cbiAgc2hvd0RpZmY6IHRydWUsXG4gIC8qKlxuICAgKiAjIyMgY29uZmlnLnRydW5jYXRlVGhyZXNob2xkXG4gICAqXG4gICAqIFVzZXIgY29uZmlndXJhYmxlIHByb3BlcnR5LCBzZXRzIGxlbmd0aCB0aHJlc2hvbGQgZm9yIGFjdHVhbCBhbmRcbiAgICogZXhwZWN0ZWQgdmFsdWVzIGluIGFzc2VydGlvbiBlcnJvcnMuIElmIHRoaXMgdGhyZXNob2xkIGlzIGV4Y2VlZGVkLCBmb3JcbiAgICogZXhhbXBsZSBmb3IgbGFyZ2UgZGF0YSBzdHJ1Y3R1cmVzLCB0aGUgdmFsdWUgaXMgcmVwbGFjZWQgd2l0aCBzb21ldGhpbmdcbiAgICogbGlrZSBgWyBBcnJheSgzKSBdYCBvciBgeyBPYmplY3QgKHByb3AxLCBwcm9wMikgfWAuXG4gICAqXG4gICAqIFNldCBpdCB0byB6ZXJvIGlmIHlvdSB3YW50IHRvIGRpc2FibGUgdHJ1bmNhdGluZyBhbHRvZ2V0aGVyLlxuICAgKlxuICAgKiBUaGlzIGlzIGVzcGVjaWFsbHkgdXNlcmZ1bCB3aGVuIGRvaW5nIGFzc2VydGlvbnMgb24gYXJyYXlzOiBoYXZpbmcgdGhpc1xuICAgKiBzZXQgdG8gYSByZWFzb25hYmxlIGxhcmdlIHZhbHVlIG1ha2VzIHRoZSBmYWlsdXJlIG1lc3NhZ2VzIHJlYWRpbHlcbiAgICogaW5zcGVjdGFibGUuXG4gICAqXG4gICAqICAgICBjaGFpLmNvbmZpZy50cnVuY2F0ZVRocmVzaG9sZCA9IDA7ICAvLyBkaXNhYmxlIHRydW5jYXRpbmdcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9XG4gICAqIEBwdWJsaWNcbiAgICovXG4gIHRydW5jYXRlVGhyZXNob2xkOiA0MCxcbiAgLyoqXG4gICAqICMjIyBjb25maWcudXNlUHJveHlcbiAgICpcbiAgICogVXNlciBjb25maWd1cmFibGUgcHJvcGVydHksIGRlZmluZXMgaWYgY2hhaSB3aWxsIHVzZSBhIFByb3h5IHRvIHRocm93XG4gICAqIGFuIGVycm9yIHdoZW4gYSBub24tZXhpc3RlbnQgcHJvcGVydHkgaXMgcmVhZCwgd2hpY2ggcHJvdGVjdHMgdXNlcnNcbiAgICogZnJvbSB0eXBvcyB3aGVuIHVzaW5nIHByb3BlcnR5LWJhc2VkIGFzc2VydGlvbnMuXG4gICAqXG4gICAqIFNldCBpdCB0byBmYWxzZSBpZiB5b3Ugd2FudCB0byBkaXNhYmxlIHRoaXMgZmVhdHVyZS5cbiAgICpcbiAgICogICAgIGNoYWkuY29uZmlnLnVzZVByb3h5ID0gZmFsc2U7ICAvLyBkaXNhYmxlIHVzZSBvZiBQcm94eVxuICAgKlxuICAgKiBUaGlzIGZlYXR1cmUgaXMgYXV0b21hdGljYWxseSBkaXNhYmxlZCByZWdhcmRsZXNzIG9mIHRoaXMgY29uZmlnIHZhbHVlXG4gICAqIGluIGVudmlyb25tZW50cyB0aGF0IGRvbid0IHN1cHBvcnQgcHJveGllcy5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufVxuICAgKiBAcHVibGljXG4gICAqL1xuICB1c2VQcm94eTogdHJ1ZSxcbiAgLyoqXG4gICAqICMjIyBjb25maWcucHJveHlFeGNsdWRlZEtleXNcbiAgICpcbiAgICogVXNlciBjb25maWd1cmFibGUgcHJvcGVydHksIGRlZmluZXMgd2hpY2ggcHJvcGVydGllcyBzaG91bGQgYmUgaWdub3JlZFxuICAgKiBpbnN0ZWFkIG9mIHRocm93aW5nIGFuIGVycm9yIGlmIHRoZXkgZG8gbm90IGV4aXN0IG9uIHRoZSBhc3NlcnRpb24uXG4gICAqIFRoaXMgaXMgb25seSBhcHBsaWVkIGlmIHRoZSBlbnZpcm9ubWVudCBDaGFpIGlzIHJ1bm5pbmcgaW4gc3VwcG9ydHMgcHJveGllcyBhbmRcbiAgICogaWYgdGhlIGB1c2VQcm94eWAgY29uZmlndXJhdGlvbiBzZXR0aW5nIGlzIGVuYWJsZWQuXG4gICAqIEJ5IGRlZmF1bHQsIGB0aGVuYCBhbmQgYGluc3BlY3RgIHdpbGwgbm90IHRocm93IGFuIGVycm9yIGlmIHRoZXkgZG8gbm90IGV4aXN0IG9uIHRoZVxuICAgKiBhc3NlcnRpb24gb2JqZWN0IGJlY2F1c2UgdGhlIGAuaW5zcGVjdGAgcHJvcGVydHkgaXMgcmVhZCBieSBgdXRpbC5pbnNwZWN0YCAoZm9yIGV4YW1wbGUsIHdoZW5cbiAgICogdXNpbmcgYGNvbnNvbGUubG9nYCBvbiB0aGUgYXNzZXJ0aW9uIG9iamVjdCkgYW5kIGAudGhlbmAgaXMgbmVjZXNzYXJ5IGZvciBwcm9taXNlIHR5cGUtY2hlY2tpbmcuXG4gICAqXG4gICAqICAgICAvLyBCeSBkZWZhdWx0IHRoZXNlIGtleXMgd2lsbCBub3QgdGhyb3cgYW4gZXJyb3IgaWYgdGhleSBkbyBub3QgZXhpc3Qgb24gdGhlIGFzc2VydGlvbiBvYmplY3RcbiAgICogICAgIGNoYWkuY29uZmlnLnByb3h5RXhjbHVkZWRLZXlzID0gWyd0aGVuJywgJ2luc3BlY3QnXTtcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX1cbiAgICogQHB1YmxpY1xuICAgKi9cbiAgcHJveHlFeGNsdWRlZEtleXM6IFtcInRoZW5cIiwgXCJjYXRjaFwiLCBcImluc3BlY3RcIiwgXCJ0b0pTT05cIl0sXG4gIC8qKlxuICAgKiAjIyMgY29uZmlnLmRlZXBFcXVhbFxuICAgKlxuICAgKiBVc2VyIGNvbmZpZ3VyYWJsZSBwcm9wZXJ0eSwgZGVmaW5lcyB3aGljaCBhIGN1c3RvbSBmdW5jdGlvbiB0byB1c2UgZm9yIGRlZXBFcXVhbFxuICAgKiBjb21wYXJpc29ucy5cbiAgICogQnkgZGVmYXVsdCwgdGhlIGZ1bmN0aW9uIHVzZWQgaXMgdGhlIG9uZSBmcm9tIHRoZSBgZGVlcC1lcWxgIHBhY2thZ2Ugd2l0aG91dCBjdXN0b20gY29tcGFyYXRvci5cbiAgICpcbiAgICogICAgIC8vIHVzZSBhIGN1c3RvbSBjb21wYXJhdG9yXG4gICAqICAgICBjaGFpLmNvbmZpZy5kZWVwRXF1YWwgPSAoZXhwZWN0ZWQsIGFjdHVhbCkgPT4ge1xuICAgKiAgICAgICAgIHJldHVybiBjaGFpLnV0aWwuZXFsKGV4cGVjdGVkLCBhY3R1YWwsIHtcbiAgICogICAgICAgICAgICAgY29tcGFyYXRvcjogKGV4cGVjdGVkLCBhY3R1YWwpID0+IHtcbiAgICogICAgICAgICAgICAgICAgIC8vIGZvciBub24gbnVtYmVyIGNvbXBhcmlzb24sIHVzZSB0aGUgZGVmYXVsdCBiZWhhdmlvclxuICAgKiAgICAgICAgICAgICAgICAgaWYodHlwZW9mIGV4cGVjdGVkICE9PSAnbnVtYmVyJykgcmV0dXJuIG51bGw7XG4gICAqICAgICAgICAgICAgICAgICAvLyBhbGxvdyBhIGRpZmZlcmVuY2Ugb2YgMTAgYmV0d2VlbiBjb21wYXJlZCBudW1iZXJzXG4gICAqICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIGFjdHVhbCA9PT0gJ251bWJlcicgJiYgTWF0aC5hYnMoYWN0dWFsIC0gZXhwZWN0ZWQpIDwgMTBcbiAgICogICAgICAgICAgICAgfVxuICAgKiAgICAgICAgIH0pXG4gICAqICAgICB9O1xuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufVxuICAgKiBAcHVibGljXG4gICAqL1xuICBkZWVwRXF1YWw6IG51bGxcbn07XG5cbi8vIGxpYi9jaGFpL3V0aWxzL2luc3BlY3QuanNcbmZ1bmN0aW9uIGluc3BlY3QyKG9iaiwgc2hvd0hpZGRlbiwgZGVwdGgsIGNvbG9ycykge1xuICB2YXIgb3B0aW9ucyA9IHtcbiAgICBjb2xvcnMsXG4gICAgZGVwdGg6IHR5cGVvZiBkZXB0aCA9PT0gXCJ1bmRlZmluZWRcIiA/IDIgOiBkZXB0aCxcbiAgICBzaG93SGlkZGVuLFxuICAgIHRydW5jYXRlOiBjb25maWcudHJ1bmNhdGVUaHJlc2hvbGQgPyBjb25maWcudHJ1bmNhdGVUaHJlc2hvbGQgOiBJbmZpbml0eVxuICB9O1xuICByZXR1cm4gaW5zcGVjdChvYmosIG9wdGlvbnMpO1xufVxuX19uYW1lKGluc3BlY3QyLCBcImluc3BlY3RcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL29iakRpc3BsYXkuanNcbmZ1bmN0aW9uIG9iakRpc3BsYXkob2JqKSB7XG4gIHZhciBzdHIgPSBpbnNwZWN0MihvYmopLCB0eXBlMyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopO1xuICBpZiAoY29uZmlnLnRydW5jYXRlVGhyZXNob2xkICYmIHN0ci5sZW5ndGggPj0gY29uZmlnLnRydW5jYXRlVGhyZXNob2xkKSB7XG4gICAgaWYgKHR5cGUzID09PSBcIltvYmplY3QgRnVuY3Rpb25dXCIpIHtcbiAgICAgIHJldHVybiAhb2JqLm5hbWUgfHwgb2JqLm5hbWUgPT09IFwiXCIgPyBcIltGdW5jdGlvbl1cIiA6IFwiW0Z1bmN0aW9uOiBcIiArIG9iai5uYW1lICsgXCJdXCI7XG4gICAgfSBlbHNlIGlmICh0eXBlMyA9PT0gXCJbb2JqZWN0IEFycmF5XVwiKSB7XG4gICAgICByZXR1cm4gXCJbIEFycmF5KFwiICsgb2JqLmxlbmd0aCArIFwiKSBdXCI7XG4gICAgfSBlbHNlIGlmICh0eXBlMyA9PT0gXCJbb2JqZWN0IE9iamVjdF1cIikge1xuICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmopLCBrc3RyID0ga2V5cy5sZW5ndGggPiAyID8ga2V5cy5zcGxpY2UoMCwgMikuam9pbihcIiwgXCIpICsgXCIsIC4uLlwiIDoga2V5cy5qb2luKFwiLCBcIik7XG4gICAgICByZXR1cm4gXCJ7IE9iamVjdCAoXCIgKyBrc3RyICsgXCIpIH1cIjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxufVxuX19uYW1lKG9iakRpc3BsYXksIFwib2JqRGlzcGxheVwiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvZ2V0TWVzc2FnZS5qc1xuZnVuY3Rpb24gZ2V0TWVzc2FnZTIob2JqLCBhcmdzKSB7XG4gIHZhciBuZWdhdGUgPSBmbGFnKG9iaiwgXCJuZWdhdGVcIiksIHZhbCA9IGZsYWcob2JqLCBcIm9iamVjdFwiKSwgZXhwZWN0ZWQgPSBhcmdzWzNdLCBhY3R1YWwgPSBnZXRBY3R1YWwob2JqLCBhcmdzKSwgbXNnID0gbmVnYXRlID8gYXJnc1syXSA6IGFyZ3NbMV0sIGZsYWdNc2cgPSBmbGFnKG9iaiwgXCJtZXNzYWdlXCIpO1xuICBpZiAodHlwZW9mIG1zZyA9PT0gXCJmdW5jdGlvblwiKVxuICAgIG1zZyA9IG1zZygpO1xuICBtc2cgPSBtc2cgfHwgXCJcIjtcbiAgbXNnID0gbXNnLnJlcGxhY2UoLyNcXHt0aGlzXFx9L2csIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBvYmpEaXNwbGF5KHZhbCk7XG4gIH0pLnJlcGxhY2UoLyNcXHthY3RcXH0vZywgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG9iakRpc3BsYXkoYWN0dWFsKTtcbiAgfSkucmVwbGFjZSgvI1xce2V4cFxcfS9nLCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gb2JqRGlzcGxheShleHBlY3RlZCk7XG4gIH0pO1xuICByZXR1cm4gZmxhZ01zZyA/IGZsYWdNc2cgKyBcIjogXCIgKyBtc2cgOiBtc2c7XG59XG5fX25hbWUoZ2V0TWVzc2FnZTIsIFwiZ2V0TWVzc2FnZVwiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvdHJhbnNmZXJGbGFncy5qc1xuZnVuY3Rpb24gdHJhbnNmZXJGbGFncyhhc3NlcnRpb24sIG9iamVjdCwgaW5jbHVkZUFsbCkge1xuICB2YXIgZmxhZ3MgPSBhc3NlcnRpb24uX19mbGFncyB8fCAoYXNzZXJ0aW9uLl9fZmxhZ3MgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gIGlmICghb2JqZWN0Ll9fZmxhZ3MpIHtcbiAgICBvYmplY3QuX19mbGFncyA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB9XG4gIGluY2x1ZGVBbGwgPSBhcmd1bWVudHMubGVuZ3RoID09PSAzID8gaW5jbHVkZUFsbCA6IHRydWU7XG4gIGZvciAodmFyIGZsYWczIGluIGZsYWdzKSB7XG4gICAgaWYgKGluY2x1ZGVBbGwgfHwgZmxhZzMgIT09IFwib2JqZWN0XCIgJiYgZmxhZzMgIT09IFwic3NmaVwiICYmIGZsYWczICE9PSBcImxvY2tTc2ZpXCIgJiYgZmxhZzMgIT0gXCJtZXNzYWdlXCIpIHtcbiAgICAgIG9iamVjdC5fX2ZsYWdzW2ZsYWczXSA9IGZsYWdzW2ZsYWczXTtcbiAgICB9XG4gIH1cbn1cbl9fbmFtZSh0cmFuc2ZlckZsYWdzLCBcInRyYW5zZmVyRmxhZ3NcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9kZWVwLWVxbC9pbmRleC5qc1xuZnVuY3Rpb24gdHlwZTIob2JqKSB7XG4gIGlmICh0eXBlb2Ygb2JqID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIFwidW5kZWZpbmVkXCI7XG4gIH1cbiAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgIHJldHVybiBcIm51bGxcIjtcbiAgfVxuICBjb25zdCBzdHJpbmdUYWcgPSBvYmpbU3ltYm9sLnRvU3RyaW5nVGFnXTtcbiAgaWYgKHR5cGVvZiBzdHJpbmdUYWcgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gc3RyaW5nVGFnO1xuICB9XG4gIGNvbnN0IHNsaWNlU3RhcnQgPSA4O1xuICBjb25zdCBzbGljZUVuZCA9IC0xO1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikuc2xpY2Uoc2xpY2VTdGFydCwgc2xpY2VFbmQpO1xufVxuX19uYW1lKHR5cGUyLCBcInR5cGVcIik7XG5mdW5jdGlvbiBGYWtlTWFwKCkge1xuICB0aGlzLl9rZXkgPSBcImNoYWkvZGVlcC1lcWxfX1wiICsgTWF0aC5yYW5kb20oKSArIERhdGUubm93KCk7XG59XG5fX25hbWUoRmFrZU1hcCwgXCJGYWtlTWFwXCIpO1xuRmFrZU1hcC5wcm90b3R5cGUgPSB7XG4gIGdldDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgcmV0dXJuIGtleVt0aGlzLl9rZXldO1xuICB9LCBcImdldFwiKSxcbiAgc2V0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgaWYgKE9iamVjdC5pc0V4dGVuc2libGUoa2V5KSkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGtleSwgdGhpcy5fa2V5LCB7XG4gICAgICAgIHZhbHVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgXCJzZXRcIilcbn07XG52YXIgTWVtb2l6ZU1hcCA9IHR5cGVvZiBXZWFrTWFwID09PSBcImZ1bmN0aW9uXCIgPyBXZWFrTWFwIDogRmFrZU1hcDtcbmZ1bmN0aW9uIG1lbW9pemVDb21wYXJlKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgbWVtb2l6ZU1hcCkge1xuICBpZiAoIW1lbW9pemVNYXAgfHwgaXNQcmltaXRpdmUobGVmdEhhbmRPcGVyYW5kKSB8fCBpc1ByaW1pdGl2ZShyaWdodEhhbmRPcGVyYW5kKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHZhciBsZWZ0SGFuZE1hcCA9IG1lbW9pemVNYXAuZ2V0KGxlZnRIYW5kT3BlcmFuZCk7XG4gIGlmIChsZWZ0SGFuZE1hcCkge1xuICAgIHZhciByZXN1bHQgPSBsZWZ0SGFuZE1hcC5nZXQocmlnaHRIYW5kT3BlcmFuZCk7XG4gICAgaWYgKHR5cGVvZiByZXN1bHQgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbl9fbmFtZShtZW1vaXplQ29tcGFyZSwgXCJtZW1vaXplQ29tcGFyZVwiKTtcbmZ1bmN0aW9uIG1lbW9pemVTZXQobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBtZW1vaXplTWFwLCByZXN1bHQpIHtcbiAgaWYgKCFtZW1vaXplTWFwIHx8IGlzUHJpbWl0aXZlKGxlZnRIYW5kT3BlcmFuZCkgfHwgaXNQcmltaXRpdmUocmlnaHRIYW5kT3BlcmFuZCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIGxlZnRIYW5kTWFwID0gbWVtb2l6ZU1hcC5nZXQobGVmdEhhbmRPcGVyYW5kKTtcbiAgaWYgKGxlZnRIYW5kTWFwKSB7XG4gICAgbGVmdEhhbmRNYXAuc2V0KHJpZ2h0SGFuZE9wZXJhbmQsIHJlc3VsdCk7XG4gIH0gZWxzZSB7XG4gICAgbGVmdEhhbmRNYXAgPSBuZXcgTWVtb2l6ZU1hcCgpO1xuICAgIGxlZnRIYW5kTWFwLnNldChyaWdodEhhbmRPcGVyYW5kLCByZXN1bHQpO1xuICAgIG1lbW9pemVNYXAuc2V0KGxlZnRIYW5kT3BlcmFuZCwgbGVmdEhhbmRNYXApO1xuICB9XG59XG5fX25hbWUobWVtb2l6ZVNldCwgXCJtZW1vaXplU2V0XCIpO1xudmFyIGRlZXBfZXFsX2RlZmF1bHQgPSBkZWVwRXF1YWw7XG5mdW5jdGlvbiBkZWVwRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuY29tcGFyYXRvcikge1xuICAgIHJldHVybiBleHRlbnNpdmVEZWVwRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKTtcbiAgfVxuICB2YXIgc2ltcGxlUmVzdWx0ID0gc2ltcGxlRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kKTtcbiAgaWYgKHNpbXBsZVJlc3VsdCAhPT0gbnVsbCkge1xuICAgIHJldHVybiBzaW1wbGVSZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIGV4dGVuc2l2ZURlZXBFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMpO1xufVxuX19uYW1lKGRlZXBFcXVhbCwgXCJkZWVwRXF1YWxcIik7XG5mdW5jdGlvbiBzaW1wbGVFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQpIHtcbiAgaWYgKGxlZnRIYW5kT3BlcmFuZCA9PT0gcmlnaHRIYW5kT3BlcmFuZCkge1xuICAgIHJldHVybiBsZWZ0SGFuZE9wZXJhbmQgIT09IDAgfHwgMSAvIGxlZnRIYW5kT3BlcmFuZCA9PT0gMSAvIHJpZ2h0SGFuZE9wZXJhbmQ7XG4gIH1cbiAgaWYgKGxlZnRIYW5kT3BlcmFuZCAhPT0gbGVmdEhhbmRPcGVyYW5kICYmIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJpZ2h0SGFuZE9wZXJhbmQgIT09IHJpZ2h0SGFuZE9wZXJhbmQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoaXNQcmltaXRpdmUobGVmdEhhbmRPcGVyYW5kKSB8fCBpc1ByaW1pdGl2ZShyaWdodEhhbmRPcGVyYW5kKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbl9fbmFtZShzaW1wbGVFcXVhbCwgXCJzaW1wbGVFcXVhbFwiKTtcbmZ1bmN0aW9uIGV4dGVuc2l2ZURlZXBFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIG9wdGlvbnMubWVtb2l6ZSA9IG9wdGlvbnMubWVtb2l6ZSA9PT0gZmFsc2UgPyBmYWxzZSA6IG9wdGlvbnMubWVtb2l6ZSB8fCBuZXcgTWVtb2l6ZU1hcCgpO1xuICB2YXIgY29tcGFyYXRvciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5jb21wYXJhdG9yO1xuICB2YXIgbWVtb2l6ZVJlc3VsdExlZnQgPSBtZW1vaXplQ29tcGFyZShsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMubWVtb2l6ZSk7XG4gIGlmIChtZW1vaXplUmVzdWx0TGVmdCAhPT0gbnVsbCkge1xuICAgIHJldHVybiBtZW1vaXplUmVzdWx0TGVmdDtcbiAgfVxuICB2YXIgbWVtb2l6ZVJlc3VsdFJpZ2h0ID0gbWVtb2l6ZUNvbXBhcmUocmlnaHRIYW5kT3BlcmFuZCwgbGVmdEhhbmRPcGVyYW5kLCBvcHRpb25zLm1lbW9pemUpO1xuICBpZiAobWVtb2l6ZVJlc3VsdFJpZ2h0ICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIG1lbW9pemVSZXN1bHRSaWdodDtcbiAgfVxuICBpZiAoY29tcGFyYXRvcikge1xuICAgIHZhciBjb21wYXJhdG9yUmVzdWx0ID0gY29tcGFyYXRvcihsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQpO1xuICAgIGlmIChjb21wYXJhdG9yUmVzdWx0ID09PSBmYWxzZSB8fCBjb21wYXJhdG9yUmVzdWx0ID09PSB0cnVlKSB7XG4gICAgICBtZW1vaXplU2V0KGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucy5tZW1vaXplLCBjb21wYXJhdG9yUmVzdWx0KTtcbiAgICAgIHJldHVybiBjb21wYXJhdG9yUmVzdWx0O1xuICAgIH1cbiAgICB2YXIgc2ltcGxlUmVzdWx0ID0gc2ltcGxlRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kKTtcbiAgICBpZiAoc2ltcGxlUmVzdWx0ICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gc2ltcGxlUmVzdWx0O1xuICAgIH1cbiAgfVxuICB2YXIgbGVmdEhhbmRUeXBlID0gdHlwZTIobGVmdEhhbmRPcGVyYW5kKTtcbiAgaWYgKGxlZnRIYW5kVHlwZSAhPT0gdHlwZTIocmlnaHRIYW5kT3BlcmFuZCkpIHtcbiAgICBtZW1vaXplU2V0KGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucy5tZW1vaXplLCBmYWxzZSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIG1lbW9pemVTZXQobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zLm1lbW9pemUsIHRydWUpO1xuICB2YXIgcmVzdWx0ID0gZXh0ZW5zaXZlRGVlcEVxdWFsQnlUeXBlKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgbGVmdEhhbmRUeXBlLCBvcHRpb25zKTtcbiAgbWVtb2l6ZVNldChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMubWVtb2l6ZSwgcmVzdWx0KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbl9fbmFtZShleHRlbnNpdmVEZWVwRXF1YWwsIFwiZXh0ZW5zaXZlRGVlcEVxdWFsXCIpO1xuZnVuY3Rpb24gZXh0ZW5zaXZlRGVlcEVxdWFsQnlUeXBlKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgbGVmdEhhbmRUeXBlLCBvcHRpb25zKSB7XG4gIHN3aXRjaCAobGVmdEhhbmRUeXBlKSB7XG4gICAgY2FzZSBcIlN0cmluZ1wiOlxuICAgIGNhc2UgXCJOdW1iZXJcIjpcbiAgICBjYXNlIFwiQm9vbGVhblwiOlxuICAgIGNhc2UgXCJEYXRlXCI6XG4gICAgICByZXR1cm4gZGVlcEVxdWFsKGxlZnRIYW5kT3BlcmFuZC52YWx1ZU9mKCksIHJpZ2h0SGFuZE9wZXJhbmQudmFsdWVPZigpKTtcbiAgICBjYXNlIFwiUHJvbWlzZVwiOlxuICAgIGNhc2UgXCJTeW1ib2xcIjpcbiAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICBjYXNlIFwiV2Vha01hcFwiOlxuICAgIGNhc2UgXCJXZWFrU2V0XCI6XG4gICAgICByZXR1cm4gbGVmdEhhbmRPcGVyYW5kID09PSByaWdodEhhbmRPcGVyYW5kO1xuICAgIGNhc2UgXCJFcnJvclwiOlxuICAgICAgcmV0dXJuIGtleXNFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIFtcIm5hbWVcIiwgXCJtZXNzYWdlXCIsIFwiY29kZVwiXSwgb3B0aW9ucyk7XG4gICAgY2FzZSBcIkFyZ3VtZW50c1wiOlxuICAgIGNhc2UgXCJJbnQ4QXJyYXlcIjpcbiAgICBjYXNlIFwiVWludDhBcnJheVwiOlxuICAgIGNhc2UgXCJVaW50OENsYW1wZWRBcnJheVwiOlxuICAgIGNhc2UgXCJJbnQxNkFycmF5XCI6XG4gICAgY2FzZSBcIlVpbnQxNkFycmF5XCI6XG4gICAgY2FzZSBcIkludDMyQXJyYXlcIjpcbiAgICBjYXNlIFwiVWludDMyQXJyYXlcIjpcbiAgICBjYXNlIFwiRmxvYXQzMkFycmF5XCI6XG4gICAgY2FzZSBcIkZsb2F0NjRBcnJheVwiOlxuICAgIGNhc2UgXCJBcnJheVwiOlxuICAgICAgcmV0dXJuIGl0ZXJhYmxlRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKTtcbiAgICBjYXNlIFwiUmVnRXhwXCI6XG4gICAgICByZXR1cm4gcmVnZXhwRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kKTtcbiAgICBjYXNlIFwiR2VuZXJhdG9yXCI6XG4gICAgICByZXR1cm4gZ2VuZXJhdG9yRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKTtcbiAgICBjYXNlIFwiRGF0YVZpZXdcIjpcbiAgICAgIHJldHVybiBpdGVyYWJsZUVxdWFsKG5ldyBVaW50OEFycmF5KGxlZnRIYW5kT3BlcmFuZC5idWZmZXIpLCBuZXcgVWludDhBcnJheShyaWdodEhhbmRPcGVyYW5kLmJ1ZmZlciksIG9wdGlvbnMpO1xuICAgIGNhc2UgXCJBcnJheUJ1ZmZlclwiOlxuICAgICAgcmV0dXJuIGl0ZXJhYmxlRXF1YWwobmV3IFVpbnQ4QXJyYXkobGVmdEhhbmRPcGVyYW5kKSwgbmV3IFVpbnQ4QXJyYXkocmlnaHRIYW5kT3BlcmFuZCksIG9wdGlvbnMpO1xuICAgIGNhc2UgXCJTZXRcIjpcbiAgICAgIHJldHVybiBlbnRyaWVzRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKTtcbiAgICBjYXNlIFwiTWFwXCI6XG4gICAgICByZXR1cm4gZW50cmllc0VxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucyk7XG4gICAgY2FzZSBcIlRlbXBvcmFsLlBsYWluRGF0ZVwiOlxuICAgIGNhc2UgXCJUZW1wb3JhbC5QbGFpblRpbWVcIjpcbiAgICBjYXNlIFwiVGVtcG9yYWwuUGxhaW5EYXRlVGltZVwiOlxuICAgIGNhc2UgXCJUZW1wb3JhbC5JbnN0YW50XCI6XG4gICAgY2FzZSBcIlRlbXBvcmFsLlpvbmVkRGF0ZVRpbWVcIjpcbiAgICBjYXNlIFwiVGVtcG9yYWwuUGxhaW5ZZWFyTW9udGhcIjpcbiAgICBjYXNlIFwiVGVtcG9yYWwuUGxhaW5Nb250aERheVwiOlxuICAgICAgcmV0dXJuIGxlZnRIYW5kT3BlcmFuZC5lcXVhbHMocmlnaHRIYW5kT3BlcmFuZCk7XG4gICAgY2FzZSBcIlRlbXBvcmFsLkR1cmF0aW9uXCI6XG4gICAgICByZXR1cm4gbGVmdEhhbmRPcGVyYW5kLnRvdGFsKFwibmFub3NlY29uZHNcIikgPT09IHJpZ2h0SGFuZE9wZXJhbmQudG90YWwoXCJuYW5vc2Vjb25kc1wiKTtcbiAgICBjYXNlIFwiVGVtcG9yYWwuVGltZVpvbmVcIjpcbiAgICBjYXNlIFwiVGVtcG9yYWwuQ2FsZW5kYXJcIjpcbiAgICAgIHJldHVybiBsZWZ0SGFuZE9wZXJhbmQudG9TdHJpbmcoKSA9PT0gcmlnaHRIYW5kT3BlcmFuZC50b1N0cmluZygpO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gb2JqZWN0RXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKTtcbiAgfVxufVxuX19uYW1lKGV4dGVuc2l2ZURlZXBFcXVhbEJ5VHlwZSwgXCJleHRlbnNpdmVEZWVwRXF1YWxCeVR5cGVcIik7XG5mdW5jdGlvbiByZWdleHBFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQpIHtcbiAgcmV0dXJuIGxlZnRIYW5kT3BlcmFuZC50b1N0cmluZygpID09PSByaWdodEhhbmRPcGVyYW5kLnRvU3RyaW5nKCk7XG59XG5fX25hbWUocmVnZXhwRXF1YWwsIFwicmVnZXhwRXF1YWxcIik7XG5mdW5jdGlvbiBlbnRyaWVzRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKSB7XG4gIHRyeSB7XG4gICAgaWYgKGxlZnRIYW5kT3BlcmFuZC5zaXplICE9PSByaWdodEhhbmRPcGVyYW5kLnNpemUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGxlZnRIYW5kT3BlcmFuZC5zaXplID09PSAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0gY2F0Y2ggKHNpemVFcnJvcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgbGVmdEhhbmRJdGVtcyA9IFtdO1xuICB2YXIgcmlnaHRIYW5kSXRlbXMgPSBbXTtcbiAgbGVmdEhhbmRPcGVyYW5kLmZvckVhY2goLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBnYXRoZXJFbnRyaWVzKGtleSwgdmFsdWUpIHtcbiAgICBsZWZ0SGFuZEl0ZW1zLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgfSwgXCJnYXRoZXJFbnRyaWVzXCIpKTtcbiAgcmlnaHRIYW5kT3BlcmFuZC5mb3JFYWNoKC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gZ2F0aGVyRW50cmllcyhrZXksIHZhbHVlKSB7XG4gICAgcmlnaHRIYW5kSXRlbXMucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9LCBcImdhdGhlckVudHJpZXNcIikpO1xuICByZXR1cm4gaXRlcmFibGVFcXVhbChsZWZ0SGFuZEl0ZW1zLnNvcnQoKSwgcmlnaHRIYW5kSXRlbXMuc29ydCgpLCBvcHRpb25zKTtcbn1cbl9fbmFtZShlbnRyaWVzRXF1YWwsIFwiZW50cmllc0VxdWFsXCIpO1xuZnVuY3Rpb24gaXRlcmFibGVFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMpIHtcbiAgdmFyIGxlbmd0aCA9IGxlZnRIYW5kT3BlcmFuZC5sZW5ndGg7XG4gIGlmIChsZW5ndGggIT09IHJpZ2h0SGFuZE9wZXJhbmQubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChsZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB2YXIgaW5kZXggPSAtMTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBpZiAoZGVlcEVxdWFsKGxlZnRIYW5kT3BlcmFuZFtpbmRleF0sIHJpZ2h0SGFuZE9wZXJhbmRbaW5kZXhdLCBvcHRpb25zKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5fX25hbWUoaXRlcmFibGVFcXVhbCwgXCJpdGVyYWJsZUVxdWFsXCIpO1xuZnVuY3Rpb24gZ2VuZXJhdG9yRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKSB7XG4gIHJldHVybiBpdGVyYWJsZUVxdWFsKGdldEdlbmVyYXRvckVudHJpZXMobGVmdEhhbmRPcGVyYW5kKSwgZ2V0R2VuZXJhdG9yRW50cmllcyhyaWdodEhhbmRPcGVyYW5kKSwgb3B0aW9ucyk7XG59XG5fX25hbWUoZ2VuZXJhdG9yRXF1YWwsIFwiZ2VuZXJhdG9yRXF1YWxcIik7XG5mdW5jdGlvbiBoYXNJdGVyYXRvckZ1bmN0aW9uKHRhcmdldCkge1xuICByZXR1cm4gdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgdGFyZ2V0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHRhcmdldFtTeW1ib2wuaXRlcmF0b3JdID09PSBcImZ1bmN0aW9uXCI7XG59XG5fX25hbWUoaGFzSXRlcmF0b3JGdW5jdGlvbiwgXCJoYXNJdGVyYXRvckZ1bmN0aW9uXCIpO1xuZnVuY3Rpb24gZ2V0SXRlcmF0b3JFbnRyaWVzKHRhcmdldCkge1xuICBpZiAoaGFzSXRlcmF0b3JGdW5jdGlvbih0YXJnZXQpKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBnZXRHZW5lcmF0b3JFbnRyaWVzKHRhcmdldFtTeW1ib2wuaXRlcmF0b3JdKCkpO1xuICAgIH0gY2F0Y2ggKGl0ZXJhdG9yRXJyb3IpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFtdO1xufVxuX19uYW1lKGdldEl0ZXJhdG9yRW50cmllcywgXCJnZXRJdGVyYXRvckVudHJpZXNcIik7XG5mdW5jdGlvbiBnZXRHZW5lcmF0b3JFbnRyaWVzKGdlbmVyYXRvcikge1xuICB2YXIgZ2VuZXJhdG9yUmVzdWx0ID0gZ2VuZXJhdG9yLm5leHQoKTtcbiAgdmFyIGFjY3VtdWxhdG9yID0gW2dlbmVyYXRvclJlc3VsdC52YWx1ZV07XG4gIHdoaWxlIChnZW5lcmF0b3JSZXN1bHQuZG9uZSA9PT0gZmFsc2UpIHtcbiAgICBnZW5lcmF0b3JSZXN1bHQgPSBnZW5lcmF0b3IubmV4dCgpO1xuICAgIGFjY3VtdWxhdG9yLnB1c2goZ2VuZXJhdG9yUmVzdWx0LnZhbHVlKTtcbiAgfVxuICByZXR1cm4gYWNjdW11bGF0b3I7XG59XG5fX25hbWUoZ2V0R2VuZXJhdG9yRW50cmllcywgXCJnZXRHZW5lcmF0b3JFbnRyaWVzXCIpO1xuZnVuY3Rpb24gZ2V0RW51bWVyYWJsZUtleXModGFyZ2V0KSB7XG4gIHZhciBrZXlzID0gW107XG4gIGZvciAodmFyIGtleSBpbiB0YXJnZXQpIHtcbiAgICBrZXlzLnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4ga2V5cztcbn1cbl9fbmFtZShnZXRFbnVtZXJhYmxlS2V5cywgXCJnZXRFbnVtZXJhYmxlS2V5c1wiKTtcbmZ1bmN0aW9uIGdldEVudW1lcmFibGVTeW1ib2xzKHRhcmdldCkge1xuICB2YXIga2V5cyA9IFtdO1xuICB2YXIgYWxsS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0KTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGxLZXlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgdmFyIGtleSA9IGFsbEtleXNbaV07XG4gICAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpLmVudW1lcmFibGUpIHtcbiAgICAgIGtleXMucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4ga2V5cztcbn1cbl9fbmFtZShnZXRFbnVtZXJhYmxlU3ltYm9scywgXCJnZXRFbnVtZXJhYmxlU3ltYm9sc1wiKTtcbmZ1bmN0aW9uIGtleXNFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIGtleXMsIG9wdGlvbnMpIHtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICBpZiAobGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkge1xuICAgIGlmIChkZWVwRXF1YWwobGVmdEhhbmRPcGVyYW5kW2tleXNbaV1dLCByaWdodEhhbmRPcGVyYW5kW2tleXNbaV1dLCBvcHRpb25zKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5fX25hbWUoa2V5c0VxdWFsLCBcImtleXNFcXVhbFwiKTtcbmZ1bmN0aW9uIG9iamVjdEVxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucykge1xuICB2YXIgbGVmdEhhbmRLZXlzID0gZ2V0RW51bWVyYWJsZUtleXMobGVmdEhhbmRPcGVyYW5kKTtcbiAgdmFyIHJpZ2h0SGFuZEtleXMgPSBnZXRFbnVtZXJhYmxlS2V5cyhyaWdodEhhbmRPcGVyYW5kKTtcbiAgdmFyIGxlZnRIYW5kU3ltYm9scyA9IGdldEVudW1lcmFibGVTeW1ib2xzKGxlZnRIYW5kT3BlcmFuZCk7XG4gIHZhciByaWdodEhhbmRTeW1ib2xzID0gZ2V0RW51bWVyYWJsZVN5bWJvbHMocmlnaHRIYW5kT3BlcmFuZCk7XG4gIGxlZnRIYW5kS2V5cyA9IGxlZnRIYW5kS2V5cy5jb25jYXQobGVmdEhhbmRTeW1ib2xzKTtcbiAgcmlnaHRIYW5kS2V5cyA9IHJpZ2h0SGFuZEtleXMuY29uY2F0KHJpZ2h0SGFuZFN5bWJvbHMpO1xuICBpZiAobGVmdEhhbmRLZXlzLmxlbmd0aCAmJiBsZWZ0SGFuZEtleXMubGVuZ3RoID09PSByaWdodEhhbmRLZXlzLmxlbmd0aCkge1xuICAgIGlmIChpdGVyYWJsZUVxdWFsKG1hcFN5bWJvbHMobGVmdEhhbmRLZXlzKS5zb3J0KCksIG1hcFN5bWJvbHMocmlnaHRIYW5kS2V5cykuc29ydCgpKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGtleXNFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIGxlZnRIYW5kS2V5cywgb3B0aW9ucyk7XG4gIH1cbiAgdmFyIGxlZnRIYW5kRW50cmllcyA9IGdldEl0ZXJhdG9yRW50cmllcyhsZWZ0SGFuZE9wZXJhbmQpO1xuICB2YXIgcmlnaHRIYW5kRW50cmllcyA9IGdldEl0ZXJhdG9yRW50cmllcyhyaWdodEhhbmRPcGVyYW5kKTtcbiAgaWYgKGxlZnRIYW5kRW50cmllcy5sZW5ndGggJiYgbGVmdEhhbmRFbnRyaWVzLmxlbmd0aCA9PT0gcmlnaHRIYW5kRW50cmllcy5sZW5ndGgpIHtcbiAgICBsZWZ0SGFuZEVudHJpZXMuc29ydCgpO1xuICAgIHJpZ2h0SGFuZEVudHJpZXMuc29ydCgpO1xuICAgIHJldHVybiBpdGVyYWJsZUVxdWFsKGxlZnRIYW5kRW50cmllcywgcmlnaHRIYW5kRW50cmllcywgb3B0aW9ucyk7XG4gIH1cbiAgaWYgKGxlZnRIYW5kS2V5cy5sZW5ndGggPT09IDAgJiYgbGVmdEhhbmRFbnRyaWVzLmxlbmd0aCA9PT0gMCAmJiByaWdodEhhbmRLZXlzLmxlbmd0aCA9PT0gMCAmJiByaWdodEhhbmRFbnRyaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbl9fbmFtZShvYmplY3RFcXVhbCwgXCJvYmplY3RFcXVhbFwiKTtcbmZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCI7XG59XG5fX25hbWUoaXNQcmltaXRpdmUsIFwiaXNQcmltaXRpdmVcIik7XG5mdW5jdGlvbiBtYXBTeW1ib2xzKGFycikge1xuICByZXR1cm4gYXJyLm1hcCgvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIG1hcFN5bWJvbChlbnRyeSkge1xuICAgIGlmICh0eXBlb2YgZW50cnkgPT09IFwic3ltYm9sXCIpIHtcbiAgICAgIHJldHVybiBlbnRyeS50b1N0cmluZygpO1xuICAgIH1cbiAgICByZXR1cm4gZW50cnk7XG4gIH0sIFwibWFwU3ltYm9sXCIpKTtcbn1cbl9fbmFtZShtYXBTeW1ib2xzLCBcIm1hcFN5bWJvbHNcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9wYXRodmFsL2luZGV4LmpzXG5mdW5jdGlvbiBoYXNQcm9wZXJ0eShvYmosIG5hbWUpIHtcbiAgaWYgKHR5cGVvZiBvYmogPT09IFwidW5kZWZpbmVkXCIgfHwgb2JqID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBuYW1lIGluIE9iamVjdChvYmopO1xufVxuX19uYW1lKGhhc1Byb3BlcnR5LCBcImhhc1Byb3BlcnR5XCIpO1xuZnVuY3Rpb24gcGFyc2VQYXRoKHBhdGgpIHtcbiAgY29uc3Qgc3RyID0gcGF0aC5yZXBsYWNlKC8oW15cXFxcXSlcXFsvZywgXCIkMS5bXCIpO1xuICBjb25zdCBwYXJ0cyA9IHN0ci5tYXRjaCgvKFxcXFxcXC58W14uXSs/KSsvZyk7XG4gIHJldHVybiBwYXJ0cy5tYXAoKHZhbHVlKSA9PiB7XG4gICAgaWYgKHZhbHVlID09PSBcImNvbnN0cnVjdG9yXCIgfHwgdmFsdWUgPT09IFwiX19wcm90b19fXCIgfHwgdmFsdWUgPT09IFwicHJvdG90eXBlXCIpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgY29uc3QgcmVnZXhwID0gL15cXFsoXFxkKylcXF0kLztcbiAgICBjb25zdCBtQXJyID0gcmVnZXhwLmV4ZWModmFsdWUpO1xuICAgIGxldCBwYXJzZWQgPSBudWxsO1xuICAgIGlmIChtQXJyKSB7XG4gICAgICBwYXJzZWQgPSB7IGk6IHBhcnNlRmxvYXQobUFyclsxXSkgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyc2VkID0geyBwOiB2YWx1ZS5yZXBsYWNlKC9cXFxcKFsuW1xcXV0pL2csIFwiJDFcIikgfTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfSk7XG59XG5fX25hbWUocGFyc2VQYXRoLCBcInBhcnNlUGF0aFwiKTtcbmZ1bmN0aW9uIGludGVybmFsR2V0UGF0aFZhbHVlKG9iaiwgcGFyc2VkLCBwYXRoRGVwdGgpIHtcbiAgbGV0IHRlbXBvcmFyeVZhbHVlID0gb2JqO1xuICBsZXQgcmVzID0gbnVsbDtcbiAgcGF0aERlcHRoID0gdHlwZW9mIHBhdGhEZXB0aCA9PT0gXCJ1bmRlZmluZWRcIiA/IHBhcnNlZC5sZW5ndGggOiBwYXRoRGVwdGg7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aERlcHRoOyBpKyspIHtcbiAgICBjb25zdCBwYXJ0ID0gcGFyc2VkW2ldO1xuICAgIGlmICh0ZW1wb3JhcnlWYWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiBwYXJ0LnAgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgdGVtcG9yYXJ5VmFsdWUgPSB0ZW1wb3JhcnlWYWx1ZVtwYXJ0LmldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGVtcG9yYXJ5VmFsdWUgPSB0ZW1wb3JhcnlWYWx1ZVtwYXJ0LnBdO1xuICAgICAgfVxuICAgICAgaWYgKGkgPT09IHBhdGhEZXB0aCAtIDEpIHtcbiAgICAgICAgcmVzID0gdGVtcG9yYXJ5VmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZXM7XG59XG5fX25hbWUoaW50ZXJuYWxHZXRQYXRoVmFsdWUsIFwiaW50ZXJuYWxHZXRQYXRoVmFsdWVcIik7XG5mdW5jdGlvbiBnZXRQYXRoSW5mbyhvYmosIHBhdGgpIHtcbiAgY29uc3QgcGFyc2VkID0gcGFyc2VQYXRoKHBhdGgpO1xuICBjb25zdCBsYXN0ID0gcGFyc2VkW3BhcnNlZC5sZW5ndGggLSAxXTtcbiAgY29uc3QgaW5mbyA9IHtcbiAgICBwYXJlbnQ6IHBhcnNlZC5sZW5ndGggPiAxID8gaW50ZXJuYWxHZXRQYXRoVmFsdWUob2JqLCBwYXJzZWQsIHBhcnNlZC5sZW5ndGggLSAxKSA6IG9iaixcbiAgICBuYW1lOiBsYXN0LnAgfHwgbGFzdC5pLFxuICAgIHZhbHVlOiBpbnRlcm5hbEdldFBhdGhWYWx1ZShvYmosIHBhcnNlZClcbiAgfTtcbiAgaW5mby5leGlzdHMgPSBoYXNQcm9wZXJ0eShpbmZvLnBhcmVudCwgaW5mby5uYW1lKTtcbiAgcmV0dXJuIGluZm87XG59XG5fX25hbWUoZ2V0UGF0aEluZm8sIFwiZ2V0UGF0aEluZm9cIik7XG5cbi8vIGxpYi9jaGFpL2Fzc2VydGlvbi5qc1xuZnVuY3Rpb24gQXNzZXJ0aW9uKG9iaiwgbXNnLCBzc2ZpLCBsb2NrU3NmaSkge1xuICBmbGFnKHRoaXMsIFwic3NmaVwiLCBzc2ZpIHx8IEFzc2VydGlvbik7XG4gIGZsYWcodGhpcywgXCJsb2NrU3NmaVwiLCBsb2NrU3NmaSk7XG4gIGZsYWcodGhpcywgXCJvYmplY3RcIiwgb2JqKTtcbiAgZmxhZyh0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgZmxhZyh0aGlzLCBcImVxbFwiLCBjb25maWcuZGVlcEVxdWFsIHx8IGRlZXBfZXFsX2RlZmF1bHQpO1xuICByZXR1cm4gcHJveGlmeSh0aGlzKTtcbn1cbl9fbmFtZShBc3NlcnRpb24sIFwiQXNzZXJ0aW9uXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEFzc2VydGlvbiwgXCJpbmNsdWRlU3RhY2tcIiwge1xuICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgIGNvbnNvbGUud2FybihcIkFzc2VydGlvbi5pbmNsdWRlU3RhY2sgaXMgZGVwcmVjYXRlZCwgdXNlIGNoYWkuY29uZmlnLmluY2x1ZGVTdGFjayBpbnN0ZWFkLlwiKTtcbiAgICByZXR1cm4gY29uZmlnLmluY2x1ZGVTdGFjaztcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIGNvbnNvbGUud2FybihcIkFzc2VydGlvbi5pbmNsdWRlU3RhY2sgaXMgZGVwcmVjYXRlZCwgdXNlIGNoYWkuY29uZmlnLmluY2x1ZGVTdGFjayBpbnN0ZWFkLlwiKTtcbiAgICBjb25maWcuaW5jbHVkZVN0YWNrID0gdmFsdWU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEFzc2VydGlvbiwgXCJzaG93RGlmZlwiLCB7XG4gIGdldDogZnVuY3Rpb24oKSB7XG4gICAgY29uc29sZS53YXJuKFwiQXNzZXJ0aW9uLnNob3dEaWZmIGlzIGRlcHJlY2F0ZWQsIHVzZSBjaGFpLmNvbmZpZy5zaG93RGlmZiBpbnN0ZWFkLlwiKTtcbiAgICByZXR1cm4gY29uZmlnLnNob3dEaWZmO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgY29uc29sZS53YXJuKFwiQXNzZXJ0aW9uLnNob3dEaWZmIGlzIGRlcHJlY2F0ZWQsIHVzZSBjaGFpLmNvbmZpZy5zaG93RGlmZiBpbnN0ZWFkLlwiKTtcbiAgICBjb25maWcuc2hvd0RpZmYgPSB2YWx1ZTtcbiAgfVxufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkgPSBmdW5jdGlvbihuYW1lLCBmbikge1xuICBhZGRQcm9wZXJ0eSh0aGlzLnByb3RvdHlwZSwgbmFtZSwgZm4pO1xufTtcbkFzc2VydGlvbi5hZGRNZXRob2QgPSBmdW5jdGlvbihuYW1lLCBmbikge1xuICBhZGRNZXRob2QodGhpcy5wcm90b3R5cGUsIG5hbWUsIGZuKTtcbn07XG5Bc3NlcnRpb24uYWRkQ2hhaW5hYmxlTWV0aG9kID0gZnVuY3Rpb24obmFtZSwgZm4sIGNoYWluaW5nQmVoYXZpb3IpIHtcbiAgYWRkQ2hhaW5hYmxlTWV0aG9kKHRoaXMucHJvdG90eXBlLCBuYW1lLCBmbiwgY2hhaW5pbmdCZWhhdmlvcik7XG59O1xuQXNzZXJ0aW9uLm92ZXJ3cml0ZVByb3BlcnR5ID0gZnVuY3Rpb24obmFtZSwgZm4pIHtcbiAgb3ZlcndyaXRlUHJvcGVydHkodGhpcy5wcm90b3R5cGUsIG5hbWUsIGZuKTtcbn07XG5Bc3NlcnRpb24ub3ZlcndyaXRlTWV0aG9kID0gZnVuY3Rpb24obmFtZSwgZm4pIHtcbiAgb3ZlcndyaXRlTWV0aG9kKHRoaXMucHJvdG90eXBlLCBuYW1lLCBmbik7XG59O1xuQXNzZXJ0aW9uLm92ZXJ3cml0ZUNoYWluYWJsZU1ldGhvZCA9IGZ1bmN0aW9uKG5hbWUsIGZuLCBjaGFpbmluZ0JlaGF2aW9yKSB7XG4gIG92ZXJ3cml0ZUNoYWluYWJsZU1ldGhvZCh0aGlzLnByb3RvdHlwZSwgbmFtZSwgZm4sIGNoYWluaW5nQmVoYXZpb3IpO1xufTtcbkFzc2VydGlvbi5wcm90b3R5cGUuYXNzZXJ0ID0gZnVuY3Rpb24oZXhwciwgbXNnLCBuZWdhdGVNc2csIGV4cGVjdGVkLCBfYWN0dWFsLCBzaG93RGlmZikge1xuICB2YXIgb2sgPSB0ZXN0KHRoaXMsIGFyZ3VtZW50cyk7XG4gIGlmIChmYWxzZSAhPT0gc2hvd0RpZmYpXG4gICAgc2hvd0RpZmYgPSB0cnVlO1xuICBpZiAodm9pZCAwID09PSBleHBlY3RlZCAmJiB2b2lkIDAgPT09IF9hY3R1YWwpXG4gICAgc2hvd0RpZmYgPSBmYWxzZTtcbiAgaWYgKHRydWUgIT09IGNvbmZpZy5zaG93RGlmZilcbiAgICBzaG93RGlmZiA9IGZhbHNlO1xuICBpZiAoIW9rKSB7XG4gICAgbXNnID0gZ2V0TWVzc2FnZTIodGhpcywgYXJndW1lbnRzKTtcbiAgICB2YXIgYWN0dWFsID0gZ2V0QWN0dWFsKHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgdmFyIGFzc2VydGlvbkVycm9yT2JqZWN0UHJvcGVydGllcyA9IHtcbiAgICAgIGFjdHVhbCxcbiAgICAgIGV4cGVjdGVkLFxuICAgICAgc2hvd0RpZmZcbiAgICB9O1xuICAgIHZhciBvcGVyYXRvciA9IGdldE9wZXJhdG9yKHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKG9wZXJhdG9yKSB7XG4gICAgICBhc3NlcnRpb25FcnJvck9iamVjdFByb3BlcnRpZXMub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgICAgbXNnLFxuICAgICAgYXNzZXJ0aW9uRXJyb3JPYmplY3RQcm9wZXJ0aWVzLFxuICAgICAgY29uZmlnLmluY2x1ZGVTdGFjayA/IHRoaXMuYXNzZXJ0IDogZmxhZyh0aGlzLCBcInNzZmlcIilcbiAgICApO1xuICB9XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICBBc3NlcnRpb24ucHJvdG90eXBlLFxuICBcIl9vYmpcIixcbiAge1xuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZmxhZyh0aGlzLCBcIm9iamVjdFwiKTtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24odmFsKSB7XG4gICAgICBmbGFnKHRoaXMsIFwib2JqZWN0XCIsIHZhbCk7XG4gICAgfVxuICB9XG4pO1xuXG4vLyBsaWIvY2hhaS91dGlscy9pc1Byb3h5RW5hYmxlZC5qc1xuZnVuY3Rpb24gaXNQcm94eUVuYWJsZWQoKSB7XG4gIHJldHVybiBjb25maWcudXNlUHJveHkgJiYgdHlwZW9mIFByb3h5ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBSZWZsZWN0ICE9PSBcInVuZGVmaW5lZFwiO1xufVxuX19uYW1lKGlzUHJveHlFbmFibGVkLCBcImlzUHJveHlFbmFibGVkXCIpO1xuXG4vLyBsaWIvY2hhaS91dGlscy9hZGRQcm9wZXJ0eS5qc1xuZnVuY3Rpb24gYWRkUHJvcGVydHkoY3R4LCBuYW1lLCBnZXR0ZXIpIHtcbiAgZ2V0dGVyID0gZ2V0dGVyID09PSB2b2lkIDAgPyBmdW5jdGlvbigpIHtcbiAgfSA6IGdldHRlcjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgIGN0eCxcbiAgICBuYW1lLFxuICAgIHtcbiAgICAgIGdldDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwcm9wZXJ0eUdldHRlcigpIHtcbiAgICAgICAgaWYgKCFpc1Byb3h5RW5hYmxlZCgpICYmICFmbGFnKHRoaXMsIFwibG9ja1NzZmlcIikpIHtcbiAgICAgICAgICBmbGFnKHRoaXMsIFwic3NmaVwiLCBwcm9wZXJ0eUdldHRlcik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJlc3VsdCA9IGdldHRlci5jYWxsKHRoaXMpO1xuICAgICAgICBpZiAocmVzdWx0ICE9PSB2b2lkIDApXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgdmFyIG5ld0Fzc2VydGlvbiA9IG5ldyBBc3NlcnRpb24oKTtcbiAgICAgICAgdHJhbnNmZXJGbGFncyh0aGlzLCBuZXdBc3NlcnRpb24pO1xuICAgICAgICByZXR1cm4gbmV3QXNzZXJ0aW9uO1xuICAgICAgfSwgXCJwcm9wZXJ0eUdldHRlclwiKSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgKTtcbn1cbl9fbmFtZShhZGRQcm9wZXJ0eSwgXCJhZGRQcm9wZXJ0eVwiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvYWRkTGVuZ3RoR3VhcmQuanNcbnZhciBmbkxlbmd0aERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGZ1bmN0aW9uKCkge1xufSwgXCJsZW5ndGhcIik7XG5mdW5jdGlvbiBhZGRMZW5ndGhHdWFyZChmbiwgYXNzZXJ0aW9uTmFtZSwgaXNDaGFpbmFibGUpIHtcbiAgaWYgKCFmbkxlbmd0aERlc2MuY29uZmlndXJhYmxlKVxuICAgIHJldHVybiBmbjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLCBcImxlbmd0aFwiLCB7XG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgIGlmIChpc0NoYWluYWJsZSkge1xuICAgICAgICB0aHJvdyBFcnJvcihcIkludmFsaWQgQ2hhaSBwcm9wZXJ0eTogXCIgKyBhc3NlcnRpb25OYW1lICsgJy5sZW5ndGguIER1ZSB0byBhIGNvbXBhdGliaWxpdHkgaXNzdWUsIFwibGVuZ3RoXCIgY2Fubm90IGRpcmVjdGx5IGZvbGxvdyBcIicgKyBhc3NlcnRpb25OYW1lICsgJ1wiLiBVc2UgXCInICsgYXNzZXJ0aW9uTmFtZSArICcubGVuZ3RoT2ZcIiBpbnN0ZWFkLicpO1xuICAgICAgfVxuICAgICAgdGhyb3cgRXJyb3IoXCJJbnZhbGlkIENoYWkgcHJvcGVydHk6IFwiICsgYXNzZXJ0aW9uTmFtZSArICcubGVuZ3RoLiBTZWUgZG9jcyBmb3IgcHJvcGVyIHVzYWdlIG9mIFwiJyArIGFzc2VydGlvbk5hbWUgKyAnXCIuJyk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGZuO1xufVxuX19uYW1lKGFkZExlbmd0aEd1YXJkLCBcImFkZExlbmd0aEd1YXJkXCIpO1xuXG4vLyBsaWIvY2hhaS91dGlscy9nZXRQcm9wZXJ0aWVzLmpzXG5mdW5jdGlvbiBnZXRQcm9wZXJ0aWVzKG9iamVjdCkge1xuICB2YXIgcmVzdWx0ID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0KTtcbiAgZnVuY3Rpb24gYWRkUHJvcGVydHkyKHByb3BlcnR5KSB7XG4gICAgaWYgKHJlc3VsdC5pbmRleE9mKHByb3BlcnR5KSA9PT0gLTEpIHtcbiAgICAgIHJlc3VsdC5wdXNoKHByb3BlcnR5KTtcbiAgICB9XG4gIH1cbiAgX19uYW1lKGFkZFByb3BlcnR5MiwgXCJhZGRQcm9wZXJ0eVwiKTtcbiAgdmFyIHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7XG4gIHdoaWxlIChwcm90byAhPT0gbnVsbCkge1xuICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHByb3RvKS5mb3JFYWNoKGFkZFByb3BlcnR5Mik7XG4gICAgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8pO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5fX25hbWUoZ2V0UHJvcGVydGllcywgXCJnZXRQcm9wZXJ0aWVzXCIpO1xuXG4vLyBsaWIvY2hhaS91dGlscy9wcm94aWZ5LmpzXG52YXIgYnVpbHRpbnMgPSBbXCJfX2ZsYWdzXCIsIFwiX19tZXRob2RzXCIsIFwiX29ialwiLCBcImFzc2VydFwiXTtcbmZ1bmN0aW9uIHByb3hpZnkob2JqLCBub25DaGFpbmFibGVNZXRob2ROYW1lKSB7XG4gIGlmICghaXNQcm94eUVuYWJsZWQoKSlcbiAgICByZXR1cm4gb2JqO1xuICByZXR1cm4gbmV3IFByb3h5KG9iaiwge1xuICAgIGdldDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBwcm94eUdldHRlcih0YXJnZXQsIHByb3BlcnR5KSB7XG4gICAgICBpZiAodHlwZW9mIHByb3BlcnR5ID09PSBcInN0cmluZ1wiICYmIGNvbmZpZy5wcm94eUV4Y2x1ZGVkS2V5cy5pbmRleE9mKHByb3BlcnR5KSA9PT0gLTEgJiYgIVJlZmxlY3QuaGFzKHRhcmdldCwgcHJvcGVydHkpKSB7XG4gICAgICAgIGlmIChub25DaGFpbmFibGVNZXRob2ROYW1lKSB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoXCJJbnZhbGlkIENoYWkgcHJvcGVydHk6IFwiICsgbm9uQ2hhaW5hYmxlTWV0aG9kTmFtZSArIFwiLlwiICsgcHJvcGVydHkgKyAnLiBTZWUgZG9jcyBmb3IgcHJvcGVyIHVzYWdlIG9mIFwiJyArIG5vbkNoYWluYWJsZU1ldGhvZE5hbWUgKyAnXCIuJyk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHN1Z2dlc3Rpb24gPSBudWxsO1xuICAgICAgICB2YXIgc3VnZ2VzdGlvbkRpc3RhbmNlID0gNDtcbiAgICAgICAgZ2V0UHJvcGVydGllcyh0YXJnZXQpLmZvckVhY2goZnVuY3Rpb24ocHJvcCkge1xuICAgICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eShwcm9wKSAmJiBidWlsdGlucy5pbmRleE9mKHByb3ApID09PSAtMSkge1xuICAgICAgICAgICAgdmFyIGRpc3QgPSBzdHJpbmdEaXN0YW5jZUNhcHBlZChcbiAgICAgICAgICAgICAgcHJvcGVydHksXG4gICAgICAgICAgICAgIHByb3AsXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb25EaXN0YW5jZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChkaXN0IDwgc3VnZ2VzdGlvbkRpc3RhbmNlKSB7XG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24gPSBwcm9wO1xuICAgICAgICAgICAgICBzdWdnZXN0aW9uRGlzdGFuY2UgPSBkaXN0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChzdWdnZXN0aW9uICE9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoXCJJbnZhbGlkIENoYWkgcHJvcGVydHk6IFwiICsgcHJvcGVydHkgKyAnLiBEaWQgeW91IG1lYW4gXCInICsgc3VnZ2VzdGlvbiArICdcIj8nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBFcnJvcihcIkludmFsaWQgQ2hhaSBwcm9wZXJ0eTogXCIgKyBwcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChidWlsdGlucy5pbmRleE9mKHByb3BlcnR5KSA9PT0gLTEgJiYgIWZsYWcodGFyZ2V0LCBcImxvY2tTc2ZpXCIpKSB7XG4gICAgICAgIGZsYWcodGFyZ2V0LCBcInNzZmlcIiwgcHJveHlHZXR0ZXIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0KHRhcmdldCwgcHJvcGVydHkpO1xuICAgIH0sIFwicHJveHlHZXR0ZXJcIilcbiAgfSk7XG59XG5fX25hbWUocHJveGlmeSwgXCJwcm94aWZ5XCIpO1xuZnVuY3Rpb24gc3RyaW5nRGlzdGFuY2VDYXBwZWQoc3RyQSwgc3RyQiwgY2FwKSB7XG4gIGlmIChNYXRoLmFicyhzdHJBLmxlbmd0aCAtIHN0ckIubGVuZ3RoKSA+PSBjYXApIHtcbiAgICByZXR1cm4gY2FwO1xuICB9XG4gIHZhciBtZW1vID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDw9IHN0ckEubGVuZ3RoOyBpKyspIHtcbiAgICBtZW1vW2ldID0gQXJyYXkoc3RyQi5sZW5ndGggKyAxKS5maWxsKDApO1xuICAgIG1lbW9baV1bMF0gPSBpO1xuICB9XG4gIGZvciAodmFyIGogPSAwOyBqIDwgc3RyQi5sZW5ndGg7IGorKykge1xuICAgIG1lbW9bMF1bal0gPSBqO1xuICB9XG4gIGZvciAodmFyIGkgPSAxOyBpIDw9IHN0ckEubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgY2ggPSBzdHJBLmNoYXJDb2RlQXQoaSAtIDEpO1xuICAgIGZvciAodmFyIGogPSAxOyBqIDw9IHN0ckIubGVuZ3RoOyBqKyspIHtcbiAgICAgIGlmIChNYXRoLmFicyhpIC0gaikgPj0gY2FwKSB7XG4gICAgICAgIG1lbW9baV1bal0gPSBjYXA7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgbWVtb1tpXVtqXSA9IE1hdGgubWluKFxuICAgICAgICBtZW1vW2kgLSAxXVtqXSArIDEsXG4gICAgICAgIG1lbW9baV1baiAtIDFdICsgMSxcbiAgICAgICAgbWVtb1tpIC0gMV1baiAtIDFdICsgKGNoID09PSBzdHJCLmNoYXJDb2RlQXQoaiAtIDEpID8gMCA6IDEpXG4gICAgICApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbWVtb1tzdHJBLmxlbmd0aF1bc3RyQi5sZW5ndGhdO1xufVxuX19uYW1lKHN0cmluZ0Rpc3RhbmNlQ2FwcGVkLCBcInN0cmluZ0Rpc3RhbmNlQ2FwcGVkXCIpO1xuXG4vLyBsaWIvY2hhaS91dGlscy9hZGRNZXRob2QuanNcbmZ1bmN0aW9uIGFkZE1ldGhvZChjdHgsIG5hbWUsIG1ldGhvZCkge1xuICB2YXIgbWV0aG9kV3JhcHBlciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgaWYgKCFmbGFnKHRoaXMsIFwibG9ja1NzZmlcIikpIHtcbiAgICAgIGZsYWcodGhpcywgXCJzc2ZpXCIsIG1ldGhvZFdyYXBwZXIpO1xuICAgIH1cbiAgICB2YXIgcmVzdWx0ID0gbWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHJlc3VsdCAhPT0gdm9pZCAwKVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB2YXIgbmV3QXNzZXJ0aW9uID0gbmV3IEFzc2VydGlvbigpO1xuICAgIHRyYW5zZmVyRmxhZ3ModGhpcywgbmV3QXNzZXJ0aW9uKTtcbiAgICByZXR1cm4gbmV3QXNzZXJ0aW9uO1xuICB9LCBcIm1ldGhvZFdyYXBwZXJcIik7XG4gIGFkZExlbmd0aEd1YXJkKG1ldGhvZFdyYXBwZXIsIG5hbWUsIGZhbHNlKTtcbiAgY3R4W25hbWVdID0gcHJveGlmeShtZXRob2RXcmFwcGVyLCBuYW1lKTtcbn1cbl9fbmFtZShhZGRNZXRob2QsIFwiYWRkTWV0aG9kXCIpO1xuXG4vLyBsaWIvY2hhaS91dGlscy9vdmVyd3JpdGVQcm9wZXJ0eS5qc1xuZnVuY3Rpb24gb3ZlcndyaXRlUHJvcGVydHkoY3R4LCBuYW1lLCBnZXR0ZXIpIHtcbiAgdmFyIF9nZXQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGN0eCwgbmFtZSksIF9zdXBlciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gIH0sIFwiX3N1cGVyXCIpO1xuICBpZiAoX2dldCAmJiBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfZ2V0LmdldClcbiAgICBfc3VwZXIgPSBfZ2V0LmdldDtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgIGN0eCxcbiAgICBuYW1lLFxuICAgIHtcbiAgICAgIGdldDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBvdmVyd3JpdGluZ1Byb3BlcnR5R2V0dGVyKCkge1xuICAgICAgICBpZiAoIWlzUHJveHlFbmFibGVkKCkgJiYgIWZsYWcodGhpcywgXCJsb2NrU3NmaVwiKSkge1xuICAgICAgICAgIGZsYWcodGhpcywgXCJzc2ZpXCIsIG92ZXJ3cml0aW5nUHJvcGVydHlHZXR0ZXIpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBvcmlnTG9ja1NzZmkgPSBmbGFnKHRoaXMsIFwibG9ja1NzZmlcIik7XG4gICAgICAgIGZsYWcodGhpcywgXCJsb2NrU3NmaVwiLCB0cnVlKTtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGdldHRlcihfc3VwZXIpLmNhbGwodGhpcyk7XG4gICAgICAgIGZsYWcodGhpcywgXCJsb2NrU3NmaVwiLCBvcmlnTG9ja1NzZmkpO1xuICAgICAgICBpZiAocmVzdWx0ICE9PSB2b2lkIDApIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIHZhciBuZXdBc3NlcnRpb24gPSBuZXcgQXNzZXJ0aW9uKCk7XG4gICAgICAgIHRyYW5zZmVyRmxhZ3ModGhpcywgbmV3QXNzZXJ0aW9uKTtcbiAgICAgICAgcmV0dXJuIG5ld0Fzc2VydGlvbjtcbiAgICAgIH0sIFwib3ZlcndyaXRpbmdQcm9wZXJ0eUdldHRlclwiKSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgKTtcbn1cbl9fbmFtZShvdmVyd3JpdGVQcm9wZXJ0eSwgXCJvdmVyd3JpdGVQcm9wZXJ0eVwiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvb3ZlcndyaXRlTWV0aG9kLmpzXG5mdW5jdGlvbiBvdmVyd3JpdGVNZXRob2QoY3R4LCBuYW1lLCBtZXRob2QpIHtcbiAgdmFyIF9tZXRob2QgPSBjdHhbbmFtZV0sIF9zdXBlciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKG5hbWUgKyBcIiBpcyBub3QgYSBmdW5jdGlvblwiKTtcbiAgfSwgXCJfc3VwZXJcIik7XG4gIGlmIChfbWV0aG9kICYmIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9tZXRob2QpXG4gICAgX3N1cGVyID0gX21ldGhvZDtcbiAgdmFyIG92ZXJ3cml0aW5nTWV0aG9kV3JhcHBlciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgaWYgKCFmbGFnKHRoaXMsIFwibG9ja1NzZmlcIikpIHtcbiAgICAgIGZsYWcodGhpcywgXCJzc2ZpXCIsIG92ZXJ3cml0aW5nTWV0aG9kV3JhcHBlcik7XG4gICAgfVxuICAgIHZhciBvcmlnTG9ja1NzZmkgPSBmbGFnKHRoaXMsIFwibG9ja1NzZmlcIik7XG4gICAgZmxhZyh0aGlzLCBcImxvY2tTc2ZpXCIsIHRydWUpO1xuICAgIHZhciByZXN1bHQgPSBtZXRob2QoX3N1cGVyKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGZsYWcodGhpcywgXCJsb2NrU3NmaVwiLCBvcmlnTG9ja1NzZmkpO1xuICAgIGlmIChyZXN1bHQgIT09IHZvaWQgMCkge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgdmFyIG5ld0Fzc2VydGlvbiA9IG5ldyBBc3NlcnRpb24oKTtcbiAgICB0cmFuc2ZlckZsYWdzKHRoaXMsIG5ld0Fzc2VydGlvbik7XG4gICAgcmV0dXJuIG5ld0Fzc2VydGlvbjtcbiAgfSwgXCJvdmVyd3JpdGluZ01ldGhvZFdyYXBwZXJcIik7XG4gIGFkZExlbmd0aEd1YXJkKG92ZXJ3cml0aW5nTWV0aG9kV3JhcHBlciwgbmFtZSwgZmFsc2UpO1xuICBjdHhbbmFtZV0gPSBwcm94aWZ5KG92ZXJ3cml0aW5nTWV0aG9kV3JhcHBlciwgbmFtZSk7XG59XG5fX25hbWUob3ZlcndyaXRlTWV0aG9kLCBcIm92ZXJ3cml0ZU1ldGhvZFwiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvYWRkQ2hhaW5hYmxlTWV0aG9kLmpzXG52YXIgY2FuU2V0UHJvdG90eXBlID0gdHlwZW9mIE9iamVjdC5zZXRQcm90b3R5cGVPZiA9PT0gXCJmdW5jdGlvblwiO1xudmFyIHRlc3RGbiA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG59LCBcInRlc3RGblwiKTtcbnZhciBleGNsdWRlTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0Rm4pLmZpbHRlcihmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBwcm9wRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGVzdEZuLCBuYW1lKTtcbiAgaWYgKHR5cGVvZiBwcm9wRGVzYyAhPT0gXCJvYmplY3RcIilcbiAgICByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuICFwcm9wRGVzYy5jb25maWd1cmFibGU7XG59KTtcbnZhciBjYWxsID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7XG52YXIgYXBwbHkgPSBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHk7XG5mdW5jdGlvbiBhZGRDaGFpbmFibGVNZXRob2QoY3R4LCBuYW1lLCBtZXRob2QsIGNoYWluaW5nQmVoYXZpb3IpIHtcbiAgaWYgKHR5cGVvZiBjaGFpbmluZ0JlaGF2aW9yICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBjaGFpbmluZ0JlaGF2aW9yID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICB9LCBcImNoYWluaW5nQmVoYXZpb3JcIik7XG4gIH1cbiAgdmFyIGNoYWluYWJsZUJlaGF2aW9yID0ge1xuICAgIG1ldGhvZCxcbiAgICBjaGFpbmluZ0JlaGF2aW9yXG4gIH07XG4gIGlmICghY3R4Ll9fbWV0aG9kcykge1xuICAgIGN0eC5fX21ldGhvZHMgPSB7fTtcbiAgfVxuICBjdHguX19tZXRob2RzW25hbWVdID0gY2hhaW5hYmxlQmVoYXZpb3I7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShcbiAgICBjdHgsXG4gICAgbmFtZSxcbiAgICB7XG4gICAgICBnZXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gY2hhaW5hYmxlTWV0aG9kR2V0dGVyKCkge1xuICAgICAgICBjaGFpbmFibGVCZWhhdmlvci5jaGFpbmluZ0JlaGF2aW9yLmNhbGwodGhpcyk7XG4gICAgICAgIHZhciBjaGFpbmFibGVNZXRob2RXcmFwcGVyID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbigpIHtcbiAgICAgICAgICBpZiAoIWZsYWcodGhpcywgXCJsb2NrU3NmaVwiKSkge1xuICAgICAgICAgICAgZmxhZyh0aGlzLCBcInNzZmlcIiwgY2hhaW5hYmxlTWV0aG9kV3JhcHBlcik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciByZXN1bHQgPSBjaGFpbmFibGVCZWhhdmlvci5tZXRob2QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICBpZiAocmVzdWx0ICE9PSB2b2lkIDApIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBuZXdBc3NlcnRpb24gPSBuZXcgQXNzZXJ0aW9uKCk7XG4gICAgICAgICAgdHJhbnNmZXJGbGFncyh0aGlzLCBuZXdBc3NlcnRpb24pO1xuICAgICAgICAgIHJldHVybiBuZXdBc3NlcnRpb247XG4gICAgICAgIH0sIFwiY2hhaW5hYmxlTWV0aG9kV3JhcHBlclwiKTtcbiAgICAgICAgYWRkTGVuZ3RoR3VhcmQoY2hhaW5hYmxlTWV0aG9kV3JhcHBlciwgbmFtZSwgdHJ1ZSk7XG4gICAgICAgIGlmIChjYW5TZXRQcm90b3R5cGUpIHtcbiAgICAgICAgICB2YXIgcHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSh0aGlzKTtcbiAgICAgICAgICBwcm90b3R5cGUuY2FsbCA9IGNhbGw7XG4gICAgICAgICAgcHJvdG90eXBlLmFwcGx5ID0gYXBwbHk7XG4gICAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGNoYWluYWJsZU1ldGhvZFdyYXBwZXIsIHByb3RvdHlwZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGFzc2VydGVyTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhjdHgpO1xuICAgICAgICAgIGFzc2VydGVyTmFtZXMuZm9yRWFjaChmdW5jdGlvbihhc3NlcnRlck5hbWUpIHtcbiAgICAgICAgICAgIGlmIChleGNsdWRlTmFtZXMuaW5kZXhPZihhc3NlcnRlck5hbWUpICE9PSAtMSkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgcGQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGN0eCwgYXNzZXJ0ZXJOYW1lKTtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjaGFpbmFibGVNZXRob2RXcmFwcGVyLCBhc3NlcnRlck5hbWUsIHBkKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0cmFuc2ZlckZsYWdzKHRoaXMsIGNoYWluYWJsZU1ldGhvZFdyYXBwZXIpO1xuICAgICAgICByZXR1cm4gcHJveGlmeShjaGFpbmFibGVNZXRob2RXcmFwcGVyKTtcbiAgICAgIH0sIFwiY2hhaW5hYmxlTWV0aG9kR2V0dGVyXCIpLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICApO1xufVxuX19uYW1lKGFkZENoYWluYWJsZU1ldGhvZCwgXCJhZGRDaGFpbmFibGVNZXRob2RcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL292ZXJ3cml0ZUNoYWluYWJsZU1ldGhvZC5qc1xuZnVuY3Rpb24gb3ZlcndyaXRlQ2hhaW5hYmxlTWV0aG9kKGN0eCwgbmFtZSwgbWV0aG9kLCBjaGFpbmluZ0JlaGF2aW9yKSB7XG4gIHZhciBjaGFpbmFibGVCZWhhdmlvciA9IGN0eC5fX21ldGhvZHNbbmFtZV07XG4gIHZhciBfY2hhaW5pbmdCZWhhdmlvciA9IGNoYWluYWJsZUJlaGF2aW9yLmNoYWluaW5nQmVoYXZpb3I7XG4gIGNoYWluYWJsZUJlaGF2aW9yLmNoYWluaW5nQmVoYXZpb3IgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIG92ZXJ3cml0aW5nQ2hhaW5hYmxlTWV0aG9kR2V0dGVyKCkge1xuICAgIHZhciByZXN1bHQgPSBjaGFpbmluZ0JlaGF2aW9yKF9jaGFpbmluZ0JlaGF2aW9yKS5jYWxsKHRoaXMpO1xuICAgIGlmIChyZXN1bHQgIT09IHZvaWQgMCkge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgdmFyIG5ld0Fzc2VydGlvbiA9IG5ldyBBc3NlcnRpb24oKTtcbiAgICB0cmFuc2ZlckZsYWdzKHRoaXMsIG5ld0Fzc2VydGlvbik7XG4gICAgcmV0dXJuIG5ld0Fzc2VydGlvbjtcbiAgfSwgXCJvdmVyd3JpdGluZ0NoYWluYWJsZU1ldGhvZEdldHRlclwiKTtcbiAgdmFyIF9tZXRob2QgPSBjaGFpbmFibGVCZWhhdmlvci5tZXRob2Q7XG4gIGNoYWluYWJsZUJlaGF2aW9yLm1ldGhvZCA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gb3ZlcndyaXRpbmdDaGFpbmFibGVNZXRob2RXcmFwcGVyKCkge1xuICAgIHZhciByZXN1bHQgPSBtZXRob2QoX21ldGhvZCkuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAocmVzdWx0ICE9PSB2b2lkIDApIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIHZhciBuZXdBc3NlcnRpb24gPSBuZXcgQXNzZXJ0aW9uKCk7XG4gICAgdHJhbnNmZXJGbGFncyh0aGlzLCBuZXdBc3NlcnRpb24pO1xuICAgIHJldHVybiBuZXdBc3NlcnRpb247XG4gIH0sIFwib3ZlcndyaXRpbmdDaGFpbmFibGVNZXRob2RXcmFwcGVyXCIpO1xufVxuX19uYW1lKG92ZXJ3cml0ZUNoYWluYWJsZU1ldGhvZCwgXCJvdmVyd3JpdGVDaGFpbmFibGVNZXRob2RcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL2NvbXBhcmVCeUluc3BlY3QuanNcbmZ1bmN0aW9uIGNvbXBhcmVCeUluc3BlY3QoYSwgYikge1xuICByZXR1cm4gaW5zcGVjdDIoYSkgPCBpbnNwZWN0MihiKSA/IC0xIDogMTtcbn1cbl9fbmFtZShjb21wYXJlQnlJbnNwZWN0LCBcImNvbXBhcmVCeUluc3BlY3RcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL2dldE93bkVudW1lcmFibGVQcm9wZXJ0eVN5bWJvbHMuanNcbmZ1bmN0aW9uIGdldE93bkVudW1lcmFibGVQcm9wZXJ0eVN5bWJvbHMob2JqKSB7XG4gIGlmICh0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAhPT0gXCJmdW5jdGlvblwiKVxuICAgIHJldHVybiBbXTtcbiAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqKS5maWx0ZXIoZnVuY3Rpb24oc3ltKSB7XG4gICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBzeW0pLmVudW1lcmFibGU7XG4gIH0pO1xufVxuX19uYW1lKGdldE93bkVudW1lcmFibGVQcm9wZXJ0eVN5bWJvbHMsIFwiZ2V0T3duRW51bWVyYWJsZVByb3BlcnR5U3ltYm9sc1wiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvZ2V0T3duRW51bWVyYWJsZVByb3BlcnRpZXMuanNcbmZ1bmN0aW9uIGdldE93bkVudW1lcmFibGVQcm9wZXJ0aWVzKG9iaikge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5jb25jYXQoZ2V0T3duRW51bWVyYWJsZVByb3BlcnR5U3ltYm9scyhvYmopKTtcbn1cbl9fbmFtZShnZXRPd25FbnVtZXJhYmxlUHJvcGVydGllcywgXCJnZXRPd25FbnVtZXJhYmxlUHJvcGVydGllc1wiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvaXNOYU4uanNcbmZ1bmN0aW9uIF9pc05hTih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IHZhbHVlO1xufVxuX19uYW1lKF9pc05hTiwgXCJfaXNOYU5cIik7XG52YXIgaXNOYU4yID0gTnVtYmVyLmlzTmFOIHx8IF9pc05hTjtcblxuLy8gbGliL2NoYWkvdXRpbHMvZ2V0T3BlcmF0b3IuanNcbmZ1bmN0aW9uIGlzT2JqZWN0VHlwZShvYmopIHtcbiAgdmFyIG9iamVjdFR5cGUgPSB0eXBlKG9iaik7XG4gIHZhciBvYmplY3RUeXBlcyA9IFtcIkFycmF5XCIsIFwiT2JqZWN0XCIsIFwiRnVuY3Rpb25cIl07XG4gIHJldHVybiBvYmplY3RUeXBlcy5pbmRleE9mKG9iamVjdFR5cGUpICE9PSAtMTtcbn1cbl9fbmFtZShpc09iamVjdFR5cGUsIFwiaXNPYmplY3RUeXBlXCIpO1xuZnVuY3Rpb24gZ2V0T3BlcmF0b3Iob2JqLCBhcmdzKSB7XG4gIHZhciBvcGVyYXRvciA9IGZsYWcob2JqLCBcIm9wZXJhdG9yXCIpO1xuICB2YXIgbmVnYXRlID0gZmxhZyhvYmosIFwibmVnYXRlXCIpO1xuICB2YXIgZXhwZWN0ZWQgPSBhcmdzWzNdO1xuICB2YXIgbXNnID0gbmVnYXRlID8gYXJnc1syXSA6IGFyZ3NbMV07XG4gIGlmIChvcGVyYXRvcikge1xuICAgIHJldHVybiBvcGVyYXRvcjtcbiAgfVxuICBpZiAodHlwZW9mIG1zZyA9PT0gXCJmdW5jdGlvblwiKVxuICAgIG1zZyA9IG1zZygpO1xuICBtc2cgPSBtc2cgfHwgXCJcIjtcbiAgaWYgKCFtc2cpIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG4gIGlmICgvXFxzaGF2ZVxccy8udGVzdChtc2cpKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuICB2YXIgaXNPYmplY3QgPSBpc09iamVjdFR5cGUoZXhwZWN0ZWQpO1xuICBpZiAoL1xcc25vdFxccy8udGVzdChtc2cpKSB7XG4gICAgcmV0dXJuIGlzT2JqZWN0ID8gXCJub3REZWVwU3RyaWN0RXF1YWxcIiA6IFwibm90U3RyaWN0RXF1YWxcIjtcbiAgfVxuICByZXR1cm4gaXNPYmplY3QgPyBcImRlZXBTdHJpY3RFcXVhbFwiIDogXCJzdHJpY3RFcXVhbFwiO1xufVxuX19uYW1lKGdldE9wZXJhdG9yLCBcImdldE9wZXJhdG9yXCIpO1xuXG4vLyBsaWIvY2hhaS91dGlscy9pbmRleC5qc1xuZnVuY3Rpb24gZ2V0TmFtZShmbikge1xuICByZXR1cm4gZm4ubmFtZTtcbn1cbl9fbmFtZShnZXROYW1lLCBcImdldE5hbWVcIik7XG5mdW5jdGlvbiBpc1JlZ0V4cDIob2JqKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gXCJbb2JqZWN0IFJlZ0V4cF1cIjtcbn1cbl9fbmFtZShpc1JlZ0V4cDIsIFwiaXNSZWdFeHBcIik7XG5mdW5jdGlvbiBpc051bWVyaWMob2JqKSB7XG4gIHJldHVybiBbXCJOdW1iZXJcIiwgXCJCaWdJbnRcIl0uaW5jbHVkZXModHlwZShvYmopKTtcbn1cbl9fbmFtZShpc051bWVyaWMsIFwiaXNOdW1lcmljXCIpO1xuXG4vLyBsaWIvY2hhaS9jb3JlL2Fzc2VydGlvbnMuanNcbnZhciB7IGZsYWc6IGZsYWcyIH0gPSB1dGlsc19leHBvcnRzO1xuW1xuICBcInRvXCIsXG4gIFwiYmVcIixcbiAgXCJiZWVuXCIsXG4gIFwiaXNcIixcbiAgXCJhbmRcIixcbiAgXCJoYXNcIixcbiAgXCJoYXZlXCIsXG4gIFwid2l0aFwiLFxuICBcInRoYXRcIixcbiAgXCJ3aGljaFwiLFxuICBcImF0XCIsXG4gIFwib2ZcIixcbiAgXCJzYW1lXCIsXG4gIFwiYnV0XCIsXG4gIFwiZG9lc1wiLFxuICBcInN0aWxsXCIsXG4gIFwiYWxzb1wiXG5dLmZvckVhY2goZnVuY3Rpb24oY2hhaW4pIHtcbiAgQXNzZXJ0aW9uLmFkZFByb3BlcnR5KGNoYWluKTtcbn0pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwibm90XCIsIGZ1bmN0aW9uKCkge1xuICBmbGFnMih0aGlzLCBcIm5lZ2F0ZVwiLCB0cnVlKTtcbn0pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwiZGVlcFwiLCBmdW5jdGlvbigpIHtcbiAgZmxhZzIodGhpcywgXCJkZWVwXCIsIHRydWUpO1xufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJuZXN0ZWRcIiwgZnVuY3Rpb24oKSB7XG4gIGZsYWcyKHRoaXMsIFwibmVzdGVkXCIsIHRydWUpO1xufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJvd25cIiwgZnVuY3Rpb24oKSB7XG4gIGZsYWcyKHRoaXMsIFwib3duXCIsIHRydWUpO1xufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJvcmRlcmVkXCIsIGZ1bmN0aW9uKCkge1xuICBmbGFnMih0aGlzLCBcIm9yZGVyZWRcIiwgdHJ1ZSk7XG59KTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcImFueVwiLCBmdW5jdGlvbigpIHtcbiAgZmxhZzIodGhpcywgXCJhbnlcIiwgdHJ1ZSk7XG4gIGZsYWcyKHRoaXMsIFwiYWxsXCIsIGZhbHNlKTtcbn0pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwiYWxsXCIsIGZ1bmN0aW9uKCkge1xuICBmbGFnMih0aGlzLCBcImFsbFwiLCB0cnVlKTtcbiAgZmxhZzIodGhpcywgXCJhbnlcIiwgZmFsc2UpO1xufSk7XG52YXIgZnVuY3Rpb25UeXBlcyA9IHtcbiAgXCJmdW5jdGlvblwiOiBbXCJmdW5jdGlvblwiLCBcImFzeW5jZnVuY3Rpb25cIiwgXCJnZW5lcmF0b3JmdW5jdGlvblwiLCBcImFzeW5jZ2VuZXJhdG9yZnVuY3Rpb25cIl0sXG4gIFwiYXN5bmNmdW5jdGlvblwiOiBbXCJhc3luY2Z1bmN0aW9uXCIsIFwiYXN5bmNnZW5lcmF0b3JmdW5jdGlvblwiXSxcbiAgXCJnZW5lcmF0b3JmdW5jdGlvblwiOiBbXCJnZW5lcmF0b3JmdW5jdGlvblwiLCBcImFzeW5jZ2VuZXJhdG9yZnVuY3Rpb25cIl0sXG4gIFwiYXN5bmNnZW5lcmF0b3JmdW5jdGlvblwiOiBbXCJhc3luY2dlbmVyYXRvcmZ1bmN0aW9uXCJdXG59O1xuZnVuY3Rpb24gYW4odHlwZTMsIG1zZykge1xuICBpZiAobXNnKVxuICAgIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB0eXBlMyA9IHR5cGUzLnRvTG93ZXJDYXNlKCk7XG4gIHZhciBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgYXJ0aWNsZSA9IH5bXCJhXCIsIFwiZVwiLCBcImlcIiwgXCJvXCIsIFwidVwiXS5pbmRleE9mKHR5cGUzLmNoYXJBdCgwKSkgPyBcImFuIFwiIDogXCJhIFwiO1xuICBjb25zdCBkZXRlY3RlZFR5cGUgPSB0eXBlKG9iaikudG9Mb3dlckNhc2UoKTtcbiAgaWYgKGZ1bmN0aW9uVHlwZXNbXCJmdW5jdGlvblwiXS5pbmNsdWRlcyh0eXBlMykpIHtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgIGZ1bmN0aW9uVHlwZXNbdHlwZTNdLmluY2x1ZGVzKGRldGVjdGVkVHlwZSksXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgXCIgKyBhcnRpY2xlICsgdHlwZTMsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gbm90IHRvIGJlIFwiICsgYXJ0aWNsZSArIHR5cGUzXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgIHR5cGUzID09PSBkZXRlY3RlZFR5cGUsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgXCIgKyBhcnRpY2xlICsgdHlwZTMsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gbm90IHRvIGJlIFwiICsgYXJ0aWNsZSArIHR5cGUzXG4gICAgKTtcbiAgfVxufVxuX19uYW1lKGFuLCBcImFuXCIpO1xuQXNzZXJ0aW9uLmFkZENoYWluYWJsZU1ldGhvZChcImFuXCIsIGFuKTtcbkFzc2VydGlvbi5hZGRDaGFpbmFibGVNZXRob2QoXCJhXCIsIGFuKTtcbmZ1bmN0aW9uIFNhbWVWYWx1ZVplcm8oYSwgYikge1xuICByZXR1cm4gaXNOYU4yKGEpICYmIGlzTmFOMihiKSB8fCBhID09PSBiO1xufVxuX19uYW1lKFNhbWVWYWx1ZVplcm8sIFwiU2FtZVZhbHVlWmVyb1wiKTtcbmZ1bmN0aW9uIGluY2x1ZGVDaGFpbmluZ0JlaGF2aW9yKCkge1xuICBmbGFnMih0aGlzLCBcImNvbnRhaW5zXCIsIHRydWUpO1xufVxuX19uYW1lKGluY2x1ZGVDaGFpbmluZ0JlaGF2aW9yLCBcImluY2x1ZGVDaGFpbmluZ0JlaGF2aW9yXCIpO1xuZnVuY3Rpb24gaW5jbHVkZSh2YWwsIG1zZykge1xuICBpZiAobXNnKVxuICAgIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB2YXIgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksIG9ialR5cGUgPSB0eXBlKG9iaikudG9Mb3dlckNhc2UoKSwgZmxhZ01zZyA9IGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiKSwgbmVnYXRlID0gZmxhZzIodGhpcywgXCJuZWdhdGVcIiksIHNzZmkgPSBmbGFnMih0aGlzLCBcInNzZmlcIiksIGlzRGVlcCA9IGZsYWcyKHRoaXMsIFwiZGVlcFwiKSwgZGVzY3JpcHRvciA9IGlzRGVlcCA/IFwiZGVlcCBcIiA6IFwiXCIsIGlzRXFsID0gaXNEZWVwID8gZmxhZzIodGhpcywgXCJlcWxcIikgOiBTYW1lVmFsdWVaZXJvO1xuICBmbGFnTXNnID0gZmxhZ01zZyA/IGZsYWdNc2cgKyBcIjogXCIgOiBcIlwiO1xuICB2YXIgaW5jbHVkZWQgPSBmYWxzZTtcbiAgc3dpdGNoIChvYmpUeXBlKSB7XG4gICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgaW5jbHVkZWQgPSBvYmouaW5kZXhPZih2YWwpICE9PSAtMTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJ3ZWFrc2V0XCI6XG4gICAgICBpZiAoaXNEZWVwKSB7XG4gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgICAgICBmbGFnTXNnICsgXCJ1bmFibGUgdG8gdXNlIC5kZWVwLmluY2x1ZGUgd2l0aCBXZWFrU2V0XCIsXG4gICAgICAgICAgdm9pZCAwLFxuICAgICAgICAgIHNzZmlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGluY2x1ZGVkID0gb2JqLmhhcyh2YWwpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIm1hcFwiOlxuICAgICAgb2JqLmZvckVhY2goZnVuY3Rpb24oaXRlbSkge1xuICAgICAgICBpbmNsdWRlZCA9IGluY2x1ZGVkIHx8IGlzRXFsKGl0ZW0sIHZhbCk7XG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJzZXRcIjpcbiAgICAgIGlmIChpc0RlZXApIHtcbiAgICAgICAgb2JqLmZvckVhY2goZnVuY3Rpb24oaXRlbSkge1xuICAgICAgICAgIGluY2x1ZGVkID0gaW5jbHVkZWQgfHwgaXNFcWwoaXRlbSwgdmFsKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbmNsdWRlZCA9IG9iai5oYXModmFsKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgaWYgKGlzRGVlcCkge1xuICAgICAgICBpbmNsdWRlZCA9IG9iai5zb21lKGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgICByZXR1cm4gaXNFcWwoaXRlbSwgdmFsKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbmNsdWRlZCA9IG9iai5pbmRleE9mKHZhbCkgIT09IC0xO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGlmICh2YWwgIT09IE9iamVjdCh2YWwpKSB7XG4gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgICAgICBmbGFnTXNnICsgXCJ0aGUgZ2l2ZW4gY29tYmluYXRpb24gb2YgYXJndW1lbnRzIChcIiArIG9ialR5cGUgKyBcIiBhbmQgXCIgKyB0eXBlKHZhbCkudG9Mb3dlckNhc2UoKSArIFwiKSBpcyBpbnZhbGlkIGZvciB0aGlzIGFzc2VydGlvbi4gWW91IGNhbiB1c2UgYW4gYXJyYXksIGEgbWFwLCBhbiBvYmplY3QsIGEgc2V0LCBhIHN0cmluZywgb3IgYSB3ZWFrc2V0IGluc3RlYWQgb2YgYSBcIiArIHR5cGUodmFsKS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgIHZvaWQgMCxcbiAgICAgICAgICBzc2ZpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB2YXIgcHJvcHMgPSBPYmplY3Qua2V5cyh2YWwpLCBmaXJzdEVyciA9IG51bGwsIG51bUVycnMgPSAwO1xuICAgICAgcHJvcHMuZm9yRWFjaChmdW5jdGlvbihwcm9wKSB7XG4gICAgICAgIHZhciBwcm9wQXNzZXJ0aW9uID0gbmV3IEFzc2VydGlvbihvYmopO1xuICAgICAgICB0cmFuc2ZlckZsYWdzKHRoaXMsIHByb3BBc3NlcnRpb24sIHRydWUpO1xuICAgICAgICBmbGFnMihwcm9wQXNzZXJ0aW9uLCBcImxvY2tTc2ZpXCIsIHRydWUpO1xuICAgICAgICBpZiAoIW5lZ2F0ZSB8fCBwcm9wcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICBwcm9wQXNzZXJ0aW9uLnByb3BlcnR5KHByb3AsIHZhbFtwcm9wXSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcHJvcEFzc2VydGlvbi5wcm9wZXJ0eShwcm9wLCB2YWxbcHJvcF0pO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBpZiAoIWNoZWNrX2Vycm9yX2V4cG9ydHMuY29tcGF0aWJsZUNvbnN0cnVjdG9yKGVyciwgQXNzZXJ0aW9uRXJyb3IpKSB7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChmaXJzdEVyciA9PT0gbnVsbClcbiAgICAgICAgICAgIGZpcnN0RXJyID0gZXJyO1xuICAgICAgICAgIG51bUVycnMrKztcbiAgICAgICAgfVxuICAgICAgfSwgdGhpcyk7XG4gICAgICBpZiAobmVnYXRlICYmIHByb3BzLmxlbmd0aCA+IDEgJiYgbnVtRXJycyA9PT0gcHJvcHMubGVuZ3RoKSB7XG4gICAgICAgIHRocm93IGZpcnN0RXJyO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICB9XG4gIHRoaXMuYXNzZXJ0KFxuICAgIGluY2x1ZGVkLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBcIiArIGRlc2NyaXB0b3IgKyBcImluY2x1ZGUgXCIgKyBpbnNwZWN0Mih2YWwpLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgXCIgKyBkZXNjcmlwdG9yICsgXCJpbmNsdWRlIFwiICsgaW5zcGVjdDIodmFsKVxuICApO1xufVxuX19uYW1lKGluY2x1ZGUsIFwiaW5jbHVkZVwiKTtcbkFzc2VydGlvbi5hZGRDaGFpbmFibGVNZXRob2QoXCJpbmNsdWRlXCIsIGluY2x1ZGUsIGluY2x1ZGVDaGFpbmluZ0JlaGF2aW9yKTtcbkFzc2VydGlvbi5hZGRDaGFpbmFibGVNZXRob2QoXCJjb250YWluXCIsIGluY2x1ZGUsIGluY2x1ZGVDaGFpbmluZ0JlaGF2aW9yKTtcbkFzc2VydGlvbi5hZGRDaGFpbmFibGVNZXRob2QoXCJjb250YWluc1wiLCBpbmNsdWRlLCBpbmNsdWRlQ2hhaW5pbmdCZWhhdmlvcik7XG5Bc3NlcnRpb24uYWRkQ2hhaW5hYmxlTWV0aG9kKFwiaW5jbHVkZXNcIiwgaW5jbHVkZSwgaW5jbHVkZUNoYWluaW5nQmVoYXZpb3IpO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwib2tcIiwgZnVuY3Rpb24oKSB7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSB0cnV0aHlcIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgZmFsc3lcIlxuICApO1xufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJ0cnVlXCIsIGZ1bmN0aW9uKCkge1xuICB0aGlzLmFzc2VydChcbiAgICB0cnVlID09PSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgdHJ1ZVwiLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBmYWxzZVwiLFxuICAgIGZsYWcyKHRoaXMsIFwibmVnYXRlXCIpID8gZmFsc2UgOiB0cnVlXG4gICk7XG59KTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcIm51bWVyaWNcIiwgZnVuY3Rpb24oKSB7XG4gIGNvbnN0IG9iamVjdCA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpO1xuICB0aGlzLmFzc2VydChcbiAgICBbXCJOdW1iZXJcIiwgXCJCaWdJbnRcIl0uaW5jbHVkZXModHlwZShvYmplY3QpKSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgbnVtZXJpY1wiLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgYmUgbnVtZXJpY1wiLFxuICAgIGZsYWcyKHRoaXMsIFwibmVnYXRlXCIpID8gZmFsc2UgOiB0cnVlXG4gICk7XG59KTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcImNhbGxhYmxlXCIsIGZ1bmN0aW9uKCkge1xuICBjb25zdCB2YWwgPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKTtcbiAgY29uc3Qgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKTtcbiAgY29uc3QgbWVzc2FnZSA9IGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiKTtcbiAgY29uc3QgbXNnID0gbWVzc2FnZSA/IGAke21lc3NhZ2V9OiBgIDogXCJcIjtcbiAgY29uc3QgbmVnYXRlID0gZmxhZzIodGhpcywgXCJuZWdhdGVcIik7XG4gIGNvbnN0IGFzc2VydGlvbk1lc3NhZ2UgPSBuZWdhdGUgPyBgJHttc2d9ZXhwZWN0ZWQgJHtpbnNwZWN0Mih2YWwpfSBub3QgdG8gYmUgYSBjYWxsYWJsZSBmdW5jdGlvbmAgOiBgJHttc2d9ZXhwZWN0ZWQgJHtpbnNwZWN0Mih2YWwpfSB0byBiZSBhIGNhbGxhYmxlIGZ1bmN0aW9uYDtcbiAgY29uc3QgaXNDYWxsYWJsZSA9IFtcIkZ1bmN0aW9uXCIsIFwiQXN5bmNGdW5jdGlvblwiLCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIsIFwiQXN5bmNHZW5lcmF0b3JGdW5jdGlvblwiXS5pbmNsdWRlcyh0eXBlKHZhbCkpO1xuICBpZiAoaXNDYWxsYWJsZSAmJiBuZWdhdGUgfHwgIWlzQ2FsbGFibGUgJiYgIW5lZ2F0ZSkge1xuICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgIGFzc2VydGlvbk1lc3NhZ2UsXG4gICAgICB2b2lkIDAsXG4gICAgICBzc2ZpXG4gICAgKTtcbiAgfVxufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJmYWxzZVwiLCBmdW5jdGlvbigpIHtcbiAgdGhpcy5hc3NlcnQoXG4gICAgZmFsc2UgPT09IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBmYWxzZVwiLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSB0cnVlXCIsXG4gICAgZmxhZzIodGhpcywgXCJuZWdhdGVcIikgPyB0cnVlIDogZmFsc2VcbiAgKTtcbn0pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwibnVsbFwiLCBmdW5jdGlvbigpIHtcbiAgdGhpcy5hc3NlcnQoXG4gICAgbnVsbCA9PT0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIG51bGxcIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gbm90IHRvIGJlIG51bGxcIlxuICApO1xufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJ1bmRlZmluZWRcIiwgZnVuY3Rpb24oKSB7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIHZvaWQgMCA9PT0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIHVuZGVmaW5lZFwiLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSBub3QgdG8gYmUgdW5kZWZpbmVkXCJcbiAgKTtcbn0pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwiTmFOXCIsIGZ1bmN0aW9uKCkge1xuICB0aGlzLmFzc2VydChcbiAgICBpc05hTjIoZmxhZzIodGhpcywgXCJvYmplY3RcIikpLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBOYU5cIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gbm90IHRvIGJlIE5hTlwiXG4gICk7XG59KTtcbmZ1bmN0aW9uIGFzc2VydEV4aXN0KCkge1xuICB2YXIgdmFsID0gZmxhZzIodGhpcywgXCJvYmplY3RcIik7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIHZhbCAhPT0gbnVsbCAmJiB2YWwgIT09IHZvaWQgMCxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gZXhpc3RcIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGV4aXN0XCJcbiAgKTtcbn1cbl9fbmFtZShhc3NlcnRFeGlzdCwgXCJhc3NlcnRFeGlzdFwiKTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcImV4aXN0XCIsIGFzc2VydEV4aXN0KTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcImV4aXN0c1wiLCBhc3NlcnRFeGlzdCk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJlbXB0eVwiLCBmdW5jdGlvbigpIHtcbiAgdmFyIHZhbCA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBzc2ZpID0gZmxhZzIodGhpcywgXCJzc2ZpXCIpLCBmbGFnTXNnID0gZmxhZzIodGhpcywgXCJtZXNzYWdlXCIpLCBpdGVtc0NvdW50O1xuICBmbGFnTXNnID0gZmxhZ01zZyA/IGZsYWdNc2cgKyBcIjogXCIgOiBcIlwiO1xuICBzd2l0Y2ggKHR5cGUodmFsKS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSBcImFycmF5XCI6XG4gICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgaXRlbXNDb3VudCA9IHZhbC5sZW5ndGg7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwibWFwXCI6XG4gICAgY2FzZSBcInNldFwiOlxuICAgICAgaXRlbXNDb3VudCA9IHZhbC5zaXplO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIndlYWttYXBcIjpcbiAgICBjYXNlIFwid2Vha3NldFwiOlxuICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgICAgICBmbGFnTXNnICsgXCIuZW1wdHkgd2FzIHBhc3NlZCBhIHdlYWsgY29sbGVjdGlvblwiLFxuICAgICAgICB2b2lkIDAsXG4gICAgICAgIHNzZmlcbiAgICAgICk7XG4gICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICB2YXIgbXNnID0gZmxhZ01zZyArIFwiLmVtcHR5IHdhcyBwYXNzZWQgYSBmdW5jdGlvbiBcIiArIGdldE5hbWUodmFsKTtcbiAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihtc2cudHJpbSgpLCB2b2lkIDAsIHNzZmkpO1xuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAodmFsICE9PSBPYmplY3QodmFsKSkge1xuICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICAgICAgZmxhZ01zZyArIFwiLmVtcHR5IHdhcyBwYXNzZWQgbm9uLXN0cmluZyBwcmltaXRpdmUgXCIgKyBpbnNwZWN0Mih2YWwpLFxuICAgICAgICAgIHZvaWQgMCxcbiAgICAgICAgICBzc2ZpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpdGVtc0NvdW50ID0gT2JqZWN0LmtleXModmFsKS5sZW5ndGg7XG4gIH1cbiAgdGhpcy5hc3NlcnQoXG4gICAgMCA9PT0gaXRlbXNDb3VudCxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgZW1wdHlcIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gbm90IHRvIGJlIGVtcHR5XCJcbiAgKTtcbn0pO1xuZnVuY3Rpb24gY2hlY2tBcmd1bWVudHMoKSB7XG4gIHZhciBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgdHlwZTMgPSB0eXBlKG9iaik7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIFwiQXJndW1lbnRzXCIgPT09IHR5cGUzLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBhcmd1bWVudHMgYnV0IGdvdCBcIiArIHR5cGUzLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgYmUgYXJndW1lbnRzXCJcbiAgKTtcbn1cbl9fbmFtZShjaGVja0FyZ3VtZW50cywgXCJjaGVja0FyZ3VtZW50c1wiKTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcImFyZ3VtZW50c1wiLCBjaGVja0FyZ3VtZW50cyk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJBcmd1bWVudHNcIiwgY2hlY2tBcmd1bWVudHMpO1xuZnVuY3Rpb24gYXNzZXJ0RXF1YWwodmFsLCBtc2cpIHtcbiAgaWYgKG1zZylcbiAgICBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgdmFyIG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpO1xuICBpZiAoZmxhZzIodGhpcywgXCJkZWVwXCIpKSB7XG4gICAgdmFyIHByZXZMb2NrU3NmaSA9IGZsYWcyKHRoaXMsIFwibG9ja1NzZmlcIik7XG4gICAgZmxhZzIodGhpcywgXCJsb2NrU3NmaVwiLCB0cnVlKTtcbiAgICB0aGlzLmVxbCh2YWwpO1xuICAgIGZsYWcyKHRoaXMsIFwibG9ja1NzZmlcIiwgcHJldkxvY2tTc2ZpKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgIHZhbCA9PT0gb2JqLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGVxdWFsICN7ZXhwfVwiLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBlcXVhbCAje2V4cH1cIixcbiAgICAgIHZhbCxcbiAgICAgIHRoaXMuX29iaixcbiAgICAgIHRydWVcbiAgICApO1xuICB9XG59XG5fX25hbWUoYXNzZXJ0RXF1YWwsIFwiYXNzZXJ0RXF1YWxcIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiZXF1YWxcIiwgYXNzZXJ0RXF1YWwpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImVxdWFsc1wiLCBhc3NlcnRFcXVhbCk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiZXFcIiwgYXNzZXJ0RXF1YWwpO1xuZnVuY3Rpb24gYXNzZXJ0RXFsKG9iaiwgbXNnKSB7XG4gIGlmIChtc2cpXG4gICAgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIHZhciBlcWwgPSBmbGFnMih0aGlzLCBcImVxbFwiKTtcbiAgdGhpcy5hc3NlcnQoXG4gICAgZXFsKG9iaiwgZmxhZzIodGhpcywgXCJvYmplY3RcIikpLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBkZWVwbHkgZXF1YWwgI3tleHB9XCIsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBkZWVwbHkgZXF1YWwgI3tleHB9XCIsXG4gICAgb2JqLFxuICAgIHRoaXMuX29iaixcbiAgICB0cnVlXG4gICk7XG59XG5fX25hbWUoYXNzZXJ0RXFsLCBcImFzc2VydEVxbFwiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJlcWxcIiwgYXNzZXJ0RXFsKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJlcWxzXCIsIGFzc2VydEVxbCk7XG5mdW5jdGlvbiBhc3NlcnRBYm92ZShuLCBtc2cpIHtcbiAgaWYgKG1zZylcbiAgICBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgdmFyIG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBkb0xlbmd0aCA9IGZsYWcyKHRoaXMsIFwiZG9MZW5ndGhcIiksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIG1zZ1ByZWZpeCA9IGZsYWdNc2cgPyBmbGFnTXNnICsgXCI6IFwiIDogXCJcIiwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKSwgb2JqVHlwZSA9IHR5cGUob2JqKS50b0xvd2VyQ2FzZSgpLCBuVHlwZSA9IHR5cGUobikudG9Mb3dlckNhc2UoKTtcbiAgaWYgKGRvTGVuZ3RoICYmIG9ialR5cGUgIT09IFwibWFwXCIgJiYgb2JqVHlwZSAhPT0gXCJzZXRcIikge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5oYXZlLnByb3BlcnR5KFwibGVuZ3RoXCIpO1xuICB9XG4gIGlmICghZG9MZW5ndGggJiYgKG9ialR5cGUgPT09IFwiZGF0ZVwiICYmIG5UeXBlICE9PSBcImRhdGVcIikpIHtcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IobXNnUHJlZml4ICsgXCJ0aGUgYXJndW1lbnQgdG8gYWJvdmUgbXVzdCBiZSBhIGRhdGVcIiwgdm9pZCAwLCBzc2ZpKTtcbiAgfSBlbHNlIGlmICghaXNOdW1lcmljKG4pICYmIChkb0xlbmd0aCB8fCBpc051bWVyaWMob2JqKSkpIHtcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IobXNnUHJlZml4ICsgXCJ0aGUgYXJndW1lbnQgdG8gYWJvdmUgbXVzdCBiZSBhIG51bWJlclwiLCB2b2lkIDAsIHNzZmkpO1xuICB9IGVsc2UgaWYgKCFkb0xlbmd0aCAmJiAob2JqVHlwZSAhPT0gXCJkYXRlXCIgJiYgIWlzTnVtZXJpYyhvYmopKSkge1xuICAgIHZhciBwcmludE9iaiA9IG9ialR5cGUgPT09IFwic3RyaW5nXCIgPyBcIidcIiArIG9iaiArIFwiJ1wiIDogb2JqO1xuICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihtc2dQcmVmaXggKyBcImV4cGVjdGVkIFwiICsgcHJpbnRPYmogKyBcIiB0byBiZSBhIG51bWJlciBvciBhIGRhdGVcIiwgdm9pZCAwLCBzc2ZpKTtcbiAgfVxuICBpZiAoZG9MZW5ndGgpIHtcbiAgICB2YXIgZGVzY3JpcHRvciA9IFwibGVuZ3RoXCIsIGl0ZW1zQ291bnQ7XG4gICAgaWYgKG9ialR5cGUgPT09IFwibWFwXCIgfHwgb2JqVHlwZSA9PT0gXCJzZXRcIikge1xuICAgICAgZGVzY3JpcHRvciA9IFwic2l6ZVwiO1xuICAgICAgaXRlbXNDb3VudCA9IG9iai5zaXplO1xuICAgIH0gZWxzZSB7XG4gICAgICBpdGVtc0NvdW50ID0gb2JqLmxlbmd0aDtcbiAgICB9XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBpdGVtc0NvdW50ID4gbixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBoYXZlIGEgXCIgKyBkZXNjcmlwdG9yICsgXCIgYWJvdmUgI3tleHB9IGJ1dCBnb3QgI3thY3R9XCIsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGhhdmUgYSBcIiArIGRlc2NyaXB0b3IgKyBcIiBhYm92ZSAje2V4cH1cIixcbiAgICAgIG4sXG4gICAgICBpdGVtc0NvdW50XG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgIG9iaiA+IG4sXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgYWJvdmUgI3tleHB9XCIsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgYXQgbW9zdCAje2V4cH1cIixcbiAgICAgIG5cbiAgICApO1xuICB9XG59XG5fX25hbWUoYXNzZXJ0QWJvdmUsIFwiYXNzZXJ0QWJvdmVcIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiYWJvdmVcIiwgYXNzZXJ0QWJvdmUpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImd0XCIsIGFzc2VydEFib3ZlKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJncmVhdGVyVGhhblwiLCBhc3NlcnRBYm92ZSk7XG5mdW5jdGlvbiBhc3NlcnRMZWFzdChuLCBtc2cpIHtcbiAgaWYgKG1zZylcbiAgICBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgdmFyIG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBkb0xlbmd0aCA9IGZsYWcyKHRoaXMsIFwiZG9MZW5ndGhcIiksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIG1zZ1ByZWZpeCA9IGZsYWdNc2cgPyBmbGFnTXNnICsgXCI6IFwiIDogXCJcIiwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKSwgb2JqVHlwZSA9IHR5cGUob2JqKS50b0xvd2VyQ2FzZSgpLCBuVHlwZSA9IHR5cGUobikudG9Mb3dlckNhc2UoKSwgZXJyb3JNZXNzYWdlLCBzaG91bGRUaHJvdyA9IHRydWU7XG4gIGlmIChkb0xlbmd0aCAmJiBvYmpUeXBlICE9PSBcIm1hcFwiICYmIG9ialR5cGUgIT09IFwic2V0XCIpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkudG8uaGF2ZS5wcm9wZXJ0eShcImxlbmd0aFwiKTtcbiAgfVxuICBpZiAoIWRvTGVuZ3RoICYmIChvYmpUeXBlID09PSBcImRhdGVcIiAmJiBuVHlwZSAhPT0gXCJkYXRlXCIpKSB7XG4gICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgXCJ0aGUgYXJndW1lbnQgdG8gbGVhc3QgbXVzdCBiZSBhIGRhdGVcIjtcbiAgfSBlbHNlIGlmICghaXNOdW1lcmljKG4pICYmIChkb0xlbmd0aCB8fCBpc051bWVyaWMob2JqKSkpIHtcbiAgICBlcnJvck1lc3NhZ2UgPSBtc2dQcmVmaXggKyBcInRoZSBhcmd1bWVudCB0byBsZWFzdCBtdXN0IGJlIGEgbnVtYmVyXCI7XG4gIH0gZWxzZSBpZiAoIWRvTGVuZ3RoICYmIChvYmpUeXBlICE9PSBcImRhdGVcIiAmJiAhaXNOdW1lcmljKG9iaikpKSB7XG4gICAgdmFyIHByaW50T2JqID0gb2JqVHlwZSA9PT0gXCJzdHJpbmdcIiA/IFwiJ1wiICsgb2JqICsgXCInXCIgOiBvYmo7XG4gICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgXCJleHBlY3RlZCBcIiArIHByaW50T2JqICsgXCIgdG8gYmUgYSBudW1iZXIgb3IgYSBkYXRlXCI7XG4gIH0gZWxzZSB7XG4gICAgc2hvdWxkVGhyb3cgPSBmYWxzZTtcbiAgfVxuICBpZiAoc2hvdWxkVGhyb3cpIHtcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoZXJyb3JNZXNzYWdlLCB2b2lkIDAsIHNzZmkpO1xuICB9XG4gIGlmIChkb0xlbmd0aCkge1xuICAgIHZhciBkZXNjcmlwdG9yID0gXCJsZW5ndGhcIiwgaXRlbXNDb3VudDtcbiAgICBpZiAob2JqVHlwZSA9PT0gXCJtYXBcIiB8fCBvYmpUeXBlID09PSBcInNldFwiKSB7XG4gICAgICBkZXNjcmlwdG9yID0gXCJzaXplXCI7XG4gICAgICBpdGVtc0NvdW50ID0gb2JqLnNpemU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW1zQ291bnQgPSBvYmoubGVuZ3RoO1xuICAgIH1cbiAgICB0aGlzLmFzc2VydChcbiAgICAgIGl0ZW1zQ291bnQgPj0gbixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBoYXZlIGEgXCIgKyBkZXNjcmlwdG9yICsgXCIgYXQgbGVhc3QgI3tleHB9IGJ1dCBnb3QgI3thY3R9XCIsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gaGF2ZSBhIFwiICsgZGVzY3JpcHRvciArIFwiIGJlbG93ICN7ZXhwfVwiLFxuICAgICAgbixcbiAgICAgIGl0ZW1zQ291bnRcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgb2JqID49IG4sXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgYXQgbGVhc3QgI3tleHB9XCIsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgYmVsb3cgI3tleHB9XCIsXG4gICAgICBuXG4gICAgKTtcbiAgfVxufVxuX19uYW1lKGFzc2VydExlYXN0LCBcImFzc2VydExlYXN0XCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImxlYXN0XCIsIGFzc2VydExlYXN0KTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJndGVcIiwgYXNzZXJ0TGVhc3QpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImdyZWF0ZXJUaGFuT3JFcXVhbFwiLCBhc3NlcnRMZWFzdCk7XG5mdW5jdGlvbiBhc3NlcnRCZWxvdyhuLCBtc2cpIHtcbiAgaWYgKG1zZylcbiAgICBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgdmFyIG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBkb0xlbmd0aCA9IGZsYWcyKHRoaXMsIFwiZG9MZW5ndGhcIiksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIG1zZ1ByZWZpeCA9IGZsYWdNc2cgPyBmbGFnTXNnICsgXCI6IFwiIDogXCJcIiwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKSwgb2JqVHlwZSA9IHR5cGUob2JqKS50b0xvd2VyQ2FzZSgpLCBuVHlwZSA9IHR5cGUobikudG9Mb3dlckNhc2UoKSwgZXJyb3JNZXNzYWdlLCBzaG91bGRUaHJvdyA9IHRydWU7XG4gIGlmIChkb0xlbmd0aCAmJiBvYmpUeXBlICE9PSBcIm1hcFwiICYmIG9ialR5cGUgIT09IFwic2V0XCIpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkudG8uaGF2ZS5wcm9wZXJ0eShcImxlbmd0aFwiKTtcbiAgfVxuICBpZiAoIWRvTGVuZ3RoICYmIChvYmpUeXBlID09PSBcImRhdGVcIiAmJiBuVHlwZSAhPT0gXCJkYXRlXCIpKSB7XG4gICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgXCJ0aGUgYXJndW1lbnQgdG8gYmVsb3cgbXVzdCBiZSBhIGRhdGVcIjtcbiAgfSBlbHNlIGlmICghaXNOdW1lcmljKG4pICYmIChkb0xlbmd0aCB8fCBpc051bWVyaWMob2JqKSkpIHtcbiAgICBlcnJvck1lc3NhZ2UgPSBtc2dQcmVmaXggKyBcInRoZSBhcmd1bWVudCB0byBiZWxvdyBtdXN0IGJlIGEgbnVtYmVyXCI7XG4gIH0gZWxzZSBpZiAoIWRvTGVuZ3RoICYmIChvYmpUeXBlICE9PSBcImRhdGVcIiAmJiAhaXNOdW1lcmljKG9iaikpKSB7XG4gICAgdmFyIHByaW50T2JqID0gb2JqVHlwZSA9PT0gXCJzdHJpbmdcIiA/IFwiJ1wiICsgb2JqICsgXCInXCIgOiBvYmo7XG4gICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgXCJleHBlY3RlZCBcIiArIHByaW50T2JqICsgXCIgdG8gYmUgYSBudW1iZXIgb3IgYSBkYXRlXCI7XG4gIH0gZWxzZSB7XG4gICAgc2hvdWxkVGhyb3cgPSBmYWxzZTtcbiAgfVxuICBpZiAoc2hvdWxkVGhyb3cpIHtcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoZXJyb3JNZXNzYWdlLCB2b2lkIDAsIHNzZmkpO1xuICB9XG4gIGlmIChkb0xlbmd0aCkge1xuICAgIHZhciBkZXNjcmlwdG9yID0gXCJsZW5ndGhcIiwgaXRlbXNDb3VudDtcbiAgICBpZiAob2JqVHlwZSA9PT0gXCJtYXBcIiB8fCBvYmpUeXBlID09PSBcInNldFwiKSB7XG4gICAgICBkZXNjcmlwdG9yID0gXCJzaXplXCI7XG4gICAgICBpdGVtc0NvdW50ID0gb2JqLnNpemU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW1zQ291bnQgPSBvYmoubGVuZ3RoO1xuICAgIH1cbiAgICB0aGlzLmFzc2VydChcbiAgICAgIGl0ZW1zQ291bnQgPCBuLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgYSBcIiArIGRlc2NyaXB0b3IgKyBcIiBiZWxvdyAje2V4cH0gYnV0IGdvdCAje2FjdH1cIixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgaGF2ZSBhIFwiICsgZGVzY3JpcHRvciArIFwiIGJlbG93ICN7ZXhwfVwiLFxuICAgICAgbixcbiAgICAgIGl0ZW1zQ291bnRcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgb2JqIDwgbixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBiZWxvdyAje2V4cH1cIixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBhdCBsZWFzdCAje2V4cH1cIixcbiAgICAgIG5cbiAgICApO1xuICB9XG59XG5fX25hbWUoYXNzZXJ0QmVsb3csIFwiYXNzZXJ0QmVsb3dcIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiYmVsb3dcIiwgYXNzZXJ0QmVsb3cpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImx0XCIsIGFzc2VydEJlbG93KTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJsZXNzVGhhblwiLCBhc3NlcnRCZWxvdyk7XG5mdW5jdGlvbiBhc3NlcnRNb3N0KG4sIG1zZykge1xuICBpZiAobXNnKVxuICAgIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB2YXIgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksIGRvTGVuZ3RoID0gZmxhZzIodGhpcywgXCJkb0xlbmd0aFwiKSwgZmxhZ01zZyA9IGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiKSwgbXNnUHJlZml4ID0gZmxhZ01zZyA/IGZsYWdNc2cgKyBcIjogXCIgOiBcIlwiLCBzc2ZpID0gZmxhZzIodGhpcywgXCJzc2ZpXCIpLCBvYmpUeXBlID0gdHlwZShvYmopLnRvTG93ZXJDYXNlKCksIG5UeXBlID0gdHlwZShuKS50b0xvd2VyQ2FzZSgpLCBlcnJvck1lc3NhZ2UsIHNob3VsZFRocm93ID0gdHJ1ZTtcbiAgaWYgKGRvTGVuZ3RoICYmIG9ialR5cGUgIT09IFwibWFwXCIgJiYgb2JqVHlwZSAhPT0gXCJzZXRcIikge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5oYXZlLnByb3BlcnR5KFwibGVuZ3RoXCIpO1xuICB9XG4gIGlmICghZG9MZW5ndGggJiYgKG9ialR5cGUgPT09IFwiZGF0ZVwiICYmIG5UeXBlICE9PSBcImRhdGVcIikpIHtcbiAgICBlcnJvck1lc3NhZ2UgPSBtc2dQcmVmaXggKyBcInRoZSBhcmd1bWVudCB0byBtb3N0IG11c3QgYmUgYSBkYXRlXCI7XG4gIH0gZWxzZSBpZiAoIWlzTnVtZXJpYyhuKSAmJiAoZG9MZW5ndGggfHwgaXNOdW1lcmljKG9iaikpKSB7XG4gICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgXCJ0aGUgYXJndW1lbnQgdG8gbW9zdCBtdXN0IGJlIGEgbnVtYmVyXCI7XG4gIH0gZWxzZSBpZiAoIWRvTGVuZ3RoICYmIChvYmpUeXBlICE9PSBcImRhdGVcIiAmJiAhaXNOdW1lcmljKG9iaikpKSB7XG4gICAgdmFyIHByaW50T2JqID0gb2JqVHlwZSA9PT0gXCJzdHJpbmdcIiA/IFwiJ1wiICsgb2JqICsgXCInXCIgOiBvYmo7XG4gICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgXCJleHBlY3RlZCBcIiArIHByaW50T2JqICsgXCIgdG8gYmUgYSBudW1iZXIgb3IgYSBkYXRlXCI7XG4gIH0gZWxzZSB7XG4gICAgc2hvdWxkVGhyb3cgPSBmYWxzZTtcbiAgfVxuICBpZiAoc2hvdWxkVGhyb3cpIHtcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoZXJyb3JNZXNzYWdlLCB2b2lkIDAsIHNzZmkpO1xuICB9XG4gIGlmIChkb0xlbmd0aCkge1xuICAgIHZhciBkZXNjcmlwdG9yID0gXCJsZW5ndGhcIiwgaXRlbXNDb3VudDtcbiAgICBpZiAob2JqVHlwZSA9PT0gXCJtYXBcIiB8fCBvYmpUeXBlID09PSBcInNldFwiKSB7XG4gICAgICBkZXNjcmlwdG9yID0gXCJzaXplXCI7XG4gICAgICBpdGVtc0NvdW50ID0gb2JqLnNpemU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW1zQ291bnQgPSBvYmoubGVuZ3RoO1xuICAgIH1cbiAgICB0aGlzLmFzc2VydChcbiAgICAgIGl0ZW1zQ291bnQgPD0gbixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBoYXZlIGEgXCIgKyBkZXNjcmlwdG9yICsgXCIgYXQgbW9zdCAje2V4cH0gYnV0IGdvdCAje2FjdH1cIixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBoYXZlIGEgXCIgKyBkZXNjcmlwdG9yICsgXCIgYWJvdmUgI3tleHB9XCIsXG4gICAgICBuLFxuICAgICAgaXRlbXNDb3VudFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBvYmogPD0gbixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBhdCBtb3N0ICN7ZXhwfVwiLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIGFib3ZlICN7ZXhwfVwiLFxuICAgICAgblxuICAgICk7XG4gIH1cbn1cbl9fbmFtZShhc3NlcnRNb3N0LCBcImFzc2VydE1vc3RcIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwibW9zdFwiLCBhc3NlcnRNb3N0KTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJsdGVcIiwgYXNzZXJ0TW9zdCk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwibGVzc1RoYW5PckVxdWFsXCIsIGFzc2VydE1vc3QpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcIndpdGhpblwiLCBmdW5jdGlvbihzdGFydCwgZmluaXNoLCBtc2cpIHtcbiAgaWYgKG1zZylcbiAgICBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgdmFyIG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBkb0xlbmd0aCA9IGZsYWcyKHRoaXMsIFwiZG9MZW5ndGhcIiksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIG1zZ1ByZWZpeCA9IGZsYWdNc2cgPyBmbGFnTXNnICsgXCI6IFwiIDogXCJcIiwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKSwgb2JqVHlwZSA9IHR5cGUob2JqKS50b0xvd2VyQ2FzZSgpLCBzdGFydFR5cGUgPSB0eXBlKHN0YXJ0KS50b0xvd2VyQ2FzZSgpLCBmaW5pc2hUeXBlID0gdHlwZShmaW5pc2gpLnRvTG93ZXJDYXNlKCksIGVycm9yTWVzc2FnZSwgc2hvdWxkVGhyb3cgPSB0cnVlLCByYW5nZSA9IHN0YXJ0VHlwZSA9PT0gXCJkYXRlXCIgJiYgZmluaXNoVHlwZSA9PT0gXCJkYXRlXCIgPyBzdGFydC50b0lTT1N0cmluZygpICsgXCIuLlwiICsgZmluaXNoLnRvSVNPU3RyaW5nKCkgOiBzdGFydCArIFwiLi5cIiArIGZpbmlzaDtcbiAgaWYgKGRvTGVuZ3RoICYmIG9ialR5cGUgIT09IFwibWFwXCIgJiYgb2JqVHlwZSAhPT0gXCJzZXRcIikge1xuICAgIG5ldyBBc3NlcnRpb24ob2JqLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5oYXZlLnByb3BlcnR5KFwibGVuZ3RoXCIpO1xuICB9XG4gIGlmICghZG9MZW5ndGggJiYgKG9ialR5cGUgPT09IFwiZGF0ZVwiICYmIChzdGFydFR5cGUgIT09IFwiZGF0ZVwiIHx8IGZpbmlzaFR5cGUgIT09IFwiZGF0ZVwiKSkpIHtcbiAgICBlcnJvck1lc3NhZ2UgPSBtc2dQcmVmaXggKyBcInRoZSBhcmd1bWVudHMgdG8gd2l0aGluIG11c3QgYmUgZGF0ZXNcIjtcbiAgfSBlbHNlIGlmICgoIWlzTnVtZXJpYyhzdGFydCkgfHwgIWlzTnVtZXJpYyhmaW5pc2gpKSAmJiAoZG9MZW5ndGggfHwgaXNOdW1lcmljKG9iaikpKSB7XG4gICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgXCJ0aGUgYXJndW1lbnRzIHRvIHdpdGhpbiBtdXN0IGJlIG51bWJlcnNcIjtcbiAgfSBlbHNlIGlmICghZG9MZW5ndGggJiYgKG9ialR5cGUgIT09IFwiZGF0ZVwiICYmICFpc051bWVyaWMob2JqKSkpIHtcbiAgICB2YXIgcHJpbnRPYmogPSBvYmpUeXBlID09PSBcInN0cmluZ1wiID8gXCInXCIgKyBvYmogKyBcIidcIiA6IG9iajtcbiAgICBlcnJvck1lc3NhZ2UgPSBtc2dQcmVmaXggKyBcImV4cGVjdGVkIFwiICsgcHJpbnRPYmogKyBcIiB0byBiZSBhIG51bWJlciBvciBhIGRhdGVcIjtcbiAgfSBlbHNlIHtcbiAgICBzaG91bGRUaHJvdyA9IGZhbHNlO1xuICB9XG4gIGlmIChzaG91bGRUaHJvdykge1xuICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihlcnJvck1lc3NhZ2UsIHZvaWQgMCwgc3NmaSk7XG4gIH1cbiAgaWYgKGRvTGVuZ3RoKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBcImxlbmd0aFwiLCBpdGVtc0NvdW50O1xuICAgIGlmIChvYmpUeXBlID09PSBcIm1hcFwiIHx8IG9ialR5cGUgPT09IFwic2V0XCIpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBcInNpemVcIjtcbiAgICAgIGl0ZW1zQ291bnQgPSBvYmouc2l6ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXRlbXNDb3VudCA9IG9iai5sZW5ndGg7XG4gICAgfVxuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgaXRlbXNDb3VudCA+PSBzdGFydCAmJiBpdGVtc0NvdW50IDw9IGZpbmlzaCxcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBoYXZlIGEgXCIgKyBkZXNjcmlwdG9yICsgXCIgd2l0aGluIFwiICsgcmFuZ2UsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGhhdmUgYSBcIiArIGRlc2NyaXB0b3IgKyBcIiB3aXRoaW4gXCIgKyByYW5nZVxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBvYmogPj0gc3RhcnQgJiYgb2JqIDw9IGZpbmlzaCxcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSB3aXRoaW4gXCIgKyByYW5nZSxcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgYmUgd2l0aGluIFwiICsgcmFuZ2VcbiAgICApO1xuICB9XG59KTtcbmZ1bmN0aW9uIGFzc2VydEluc3RhbmNlT2YoY29uc3RydWN0b3IsIG1zZykge1xuICBpZiAobXNnKVxuICAgIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB2YXIgdGFyZ2V0ID0gZmxhZzIodGhpcywgXCJvYmplY3RcIik7XG4gIHZhciBzc2ZpID0gZmxhZzIodGhpcywgXCJzc2ZpXCIpO1xuICB2YXIgZmxhZ01zZyA9IGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiKTtcbiAgdHJ5IHtcbiAgICB2YXIgaXNJbnN0YW5jZU9mID0gdGFyZ2V0IGluc3RhbmNlb2YgY29uc3RydWN0b3I7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChlcnIgaW5zdGFuY2VvZiBUeXBlRXJyb3IpIHtcbiAgICAgIGZsYWdNc2cgPSBmbGFnTXNnID8gZmxhZ01zZyArIFwiOiBcIiA6IFwiXCI7XG4gICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICAgIGZsYWdNc2cgKyBcIlRoZSBpbnN0YW5jZW9mIGFzc2VydGlvbiBuZWVkcyBhIGNvbnN0cnVjdG9yIGJ1dCBcIiArIHR5cGUoY29uc3RydWN0b3IpICsgXCIgd2FzIGdpdmVuLlwiLFxuICAgICAgICB2b2lkIDAsXG4gICAgICAgIHNzZmlcbiAgICAgICk7XG4gICAgfVxuICAgIHRocm93IGVycjtcbiAgfVxuICB2YXIgbmFtZSA9IGdldE5hbWUoY29uc3RydWN0b3IpO1xuICBpZiAobmFtZSA9PSBudWxsKSB7XG4gICAgbmFtZSA9IFwiYW4gdW5uYW1lZCBjb25zdHJ1Y3RvclwiO1xuICB9XG4gIHRoaXMuYXNzZXJ0KFxuICAgIGlzSW5zdGFuY2VPZixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgYW4gaW5zdGFuY2Ugb2YgXCIgKyBuYW1lLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgYmUgYW4gaW5zdGFuY2Ugb2YgXCIgKyBuYW1lXG4gICk7XG59XG5fX25hbWUoYXNzZXJ0SW5zdGFuY2VPZiwgXCJhc3NlcnRJbnN0YW5jZU9mXCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImluc3RhbmNlb2ZcIiwgYXNzZXJ0SW5zdGFuY2VPZik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiaW5zdGFuY2VPZlwiLCBhc3NlcnRJbnN0YW5jZU9mKTtcbmZ1bmN0aW9uIGFzc2VydFByb3BlcnR5KG5hbWUsIHZhbCwgbXNnKSB7XG4gIGlmIChtc2cpXG4gICAgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIHZhciBpc05lc3RlZCA9IGZsYWcyKHRoaXMsIFwibmVzdGVkXCIpLCBpc093biA9IGZsYWcyKHRoaXMsIFwib3duXCIpLCBmbGFnTXNnID0gZmxhZzIodGhpcywgXCJtZXNzYWdlXCIpLCBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKSwgbmFtZVR5cGUgPSB0eXBlb2YgbmFtZTtcbiAgZmxhZ01zZyA9IGZsYWdNc2cgPyBmbGFnTXNnICsgXCI6IFwiIDogXCJcIjtcbiAgaWYgKGlzTmVzdGVkKSB7XG4gICAgaWYgKG5hbWVUeXBlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICAgIGZsYWdNc2cgKyBcInRoZSBhcmd1bWVudCB0byBwcm9wZXJ0eSBtdXN0IGJlIGEgc3RyaW5nIHdoZW4gdXNpbmcgbmVzdGVkIHN5bnRheFwiLFxuICAgICAgICB2b2lkIDAsXG4gICAgICAgIHNzZmlcbiAgICAgICk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChuYW1lVHlwZSAhPT0gXCJzdHJpbmdcIiAmJiBuYW1lVHlwZSAhPT0gXCJudW1iZXJcIiAmJiBuYW1lVHlwZSAhPT0gXCJzeW1ib2xcIikge1xuICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgICAgICBmbGFnTXNnICsgXCJ0aGUgYXJndW1lbnQgdG8gcHJvcGVydHkgbXVzdCBiZSBhIHN0cmluZywgbnVtYmVyLCBvciBzeW1ib2xcIixcbiAgICAgICAgdm9pZCAwLFxuICAgICAgICBzc2ZpXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBpZiAoaXNOZXN0ZWQgJiYgaXNPd24pIHtcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICBmbGFnTXNnICsgJ1RoZSBcIm5lc3RlZFwiIGFuZCBcIm93blwiIGZsYWdzIGNhbm5vdCBiZSBjb21iaW5lZC4nLFxuICAgICAgdm9pZCAwLFxuICAgICAgc3NmaVxuICAgICk7XG4gIH1cbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgIGZsYWdNc2cgKyBcIlRhcmdldCBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuXCIsXG4gICAgICB2b2lkIDAsXG4gICAgICBzc2ZpXG4gICAgKTtcbiAgfVxuICB2YXIgaXNEZWVwID0gZmxhZzIodGhpcywgXCJkZWVwXCIpLCBuZWdhdGUgPSBmbGFnMih0aGlzLCBcIm5lZ2F0ZVwiKSwgcGF0aEluZm8gPSBpc05lc3RlZCA/IGdldFBhdGhJbmZvKG9iaiwgbmFtZSkgOiBudWxsLCB2YWx1ZSA9IGlzTmVzdGVkID8gcGF0aEluZm8udmFsdWUgOiBvYmpbbmFtZV0sIGlzRXFsID0gaXNEZWVwID8gZmxhZzIodGhpcywgXCJlcWxcIikgOiAodmFsMSwgdmFsMikgPT4gdmFsMSA9PT0gdmFsMjtcbiAgdmFyIGRlc2NyaXB0b3IgPSBcIlwiO1xuICBpZiAoaXNEZWVwKVxuICAgIGRlc2NyaXB0b3IgKz0gXCJkZWVwIFwiO1xuICBpZiAoaXNPd24pXG4gICAgZGVzY3JpcHRvciArPSBcIm93biBcIjtcbiAgaWYgKGlzTmVzdGVkKVxuICAgIGRlc2NyaXB0b3IgKz0gXCJuZXN0ZWQgXCI7XG4gIGRlc2NyaXB0b3IgKz0gXCJwcm9wZXJ0eSBcIjtcbiAgdmFyIGhhc1Byb3BlcnR5MjtcbiAgaWYgKGlzT3duKVxuICAgIGhhc1Byb3BlcnR5MiA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIG5hbWUpO1xuICBlbHNlIGlmIChpc05lc3RlZClcbiAgICBoYXNQcm9wZXJ0eTIgPSBwYXRoSW5mby5leGlzdHM7XG4gIGVsc2VcbiAgICBoYXNQcm9wZXJ0eTIgPSBoYXNQcm9wZXJ0eShvYmosIG5hbWUpO1xuICBpZiAoIW5lZ2F0ZSB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBoYXNQcm9wZXJ0eTIsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gaGF2ZSBcIiArIGRlc2NyaXB0b3IgKyBpbnNwZWN0MihuYW1lKSxcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgaGF2ZSBcIiArIGRlc2NyaXB0b3IgKyBpbnNwZWN0MihuYW1lKVxuICAgICk7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBoYXNQcm9wZXJ0eTIgJiYgaXNFcWwodmFsLCB2YWx1ZSksXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gaGF2ZSBcIiArIGRlc2NyaXB0b3IgKyBpbnNwZWN0MihuYW1lKSArIFwiIG9mICN7ZXhwfSwgYnV0IGdvdCAje2FjdH1cIixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgaGF2ZSBcIiArIGRlc2NyaXB0b3IgKyBpbnNwZWN0MihuYW1lKSArIFwiIG9mICN7YWN0fVwiLFxuICAgICAgdmFsLFxuICAgICAgdmFsdWVcbiAgICApO1xuICB9XG4gIGZsYWcyKHRoaXMsIFwib2JqZWN0XCIsIHZhbHVlKTtcbn1cbl9fbmFtZShhc3NlcnRQcm9wZXJ0eSwgXCJhc3NlcnRQcm9wZXJ0eVwiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJwcm9wZXJ0eVwiLCBhc3NlcnRQcm9wZXJ0eSk7XG5mdW5jdGlvbiBhc3NlcnRPd25Qcm9wZXJ0eShuYW1lLCB2YWx1ZSwgbXNnKSB7XG4gIGZsYWcyKHRoaXMsIFwib3duXCIsIHRydWUpO1xuICBhc3NlcnRQcm9wZXJ0eS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuX19uYW1lKGFzc2VydE93blByb3BlcnR5LCBcImFzc2VydE93blByb3BlcnR5XCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcIm93blByb3BlcnR5XCIsIGFzc2VydE93blByb3BlcnR5KTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJoYXZlT3duUHJvcGVydHlcIiwgYXNzZXJ0T3duUHJvcGVydHkpO1xuZnVuY3Rpb24gYXNzZXJ0T3duUHJvcGVydHlEZXNjcmlwdG9yKG5hbWUsIGRlc2NyaXB0b3IsIG1zZykge1xuICBpZiAodHlwZW9mIGRlc2NyaXB0b3IgPT09IFwic3RyaW5nXCIpIHtcbiAgICBtc2cgPSBkZXNjcmlwdG9yO1xuICAgIGRlc2NyaXB0b3IgPSBudWxsO1xuICB9XG4gIGlmIChtc2cpXG4gICAgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIHZhciBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKTtcbiAgdmFyIGFjdHVhbERlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdChvYmopLCBuYW1lKTtcbiAgdmFyIGVxbCA9IGZsYWcyKHRoaXMsIFwiZXFsXCIpO1xuICBpZiAoYWN0dWFsRGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yKSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBlcWwoZGVzY3JpcHRvciwgYWN0dWFsRGVzY3JpcHRvciksXG4gICAgICBcImV4cGVjdGVkIHRoZSBvd24gcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgXCIgKyBpbnNwZWN0MihuYW1lKSArIFwiIG9uICN7dGhpc30gdG8gbWF0Y2ggXCIgKyBpbnNwZWN0MihkZXNjcmlwdG9yKSArIFwiLCBnb3QgXCIgKyBpbnNwZWN0MihhY3R1YWxEZXNjcmlwdG9yKSxcbiAgICAgIFwiZXhwZWN0ZWQgdGhlIG93biBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciBcIiArIGluc3BlY3QyKG5hbWUpICsgXCIgb24gI3t0aGlzfSB0byBub3QgbWF0Y2ggXCIgKyBpbnNwZWN0MihkZXNjcmlwdG9yKSxcbiAgICAgIGRlc2NyaXB0b3IsXG4gICAgICBhY3R1YWxEZXNjcmlwdG9yLFxuICAgICAgdHJ1ZVxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBhY3R1YWxEZXNjcmlwdG9yLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgYW4gb3duIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIFwiICsgaW5zcGVjdDIobmFtZSksXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGhhdmUgYW4gb3duIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIFwiICsgaW5zcGVjdDIobmFtZSlcbiAgICApO1xuICB9XG4gIGZsYWcyKHRoaXMsIFwib2JqZWN0XCIsIGFjdHVhbERlc2NyaXB0b3IpO1xufVxuX19uYW1lKGFzc2VydE93blByb3BlcnR5RGVzY3JpcHRvciwgXCJhc3NlcnRPd25Qcm9wZXJ0eURlc2NyaXB0b3JcIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwib3duUHJvcGVydHlEZXNjcmlwdG9yXCIsIGFzc2VydE93blByb3BlcnR5RGVzY3JpcHRvcik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiaGF2ZU93blByb3BlcnR5RGVzY3JpcHRvclwiLCBhc3NlcnRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpO1xuZnVuY3Rpb24gYXNzZXJ0TGVuZ3RoQ2hhaW4oKSB7XG4gIGZsYWcyKHRoaXMsIFwiZG9MZW5ndGhcIiwgdHJ1ZSk7XG59XG5fX25hbWUoYXNzZXJ0TGVuZ3RoQ2hhaW4sIFwiYXNzZXJ0TGVuZ3RoQ2hhaW5cIik7XG5mdW5jdGlvbiBhc3NlcnRMZW5ndGgobiwgbXNnKSB7XG4gIGlmIChtc2cpXG4gICAgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIHZhciBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgb2JqVHlwZSA9IHR5cGUob2JqKS50b0xvd2VyQ2FzZSgpLCBmbGFnTXNnID0gZmxhZzIodGhpcywgXCJtZXNzYWdlXCIpLCBzc2ZpID0gZmxhZzIodGhpcywgXCJzc2ZpXCIpLCBkZXNjcmlwdG9yID0gXCJsZW5ndGhcIiwgaXRlbXNDb3VudDtcbiAgc3dpdGNoIChvYmpUeXBlKSB7XG4gICAgY2FzZSBcIm1hcFwiOlxuICAgIGNhc2UgXCJzZXRcIjpcbiAgICAgIGRlc2NyaXB0b3IgPSBcInNpemVcIjtcbiAgICAgIGl0ZW1zQ291bnQgPSBvYmouc2l6ZTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkudG8uaGF2ZS5wcm9wZXJ0eShcImxlbmd0aFwiKTtcbiAgICAgIGl0ZW1zQ291bnQgPSBvYmoubGVuZ3RoO1xuICB9XG4gIHRoaXMuYXNzZXJ0KFxuICAgIGl0ZW1zQ291bnQgPT0gbixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gaGF2ZSBhIFwiICsgZGVzY3JpcHRvciArIFwiIG9mICN7ZXhwfSBidXQgZ290ICN7YWN0fVwiLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgaGF2ZSBhIFwiICsgZGVzY3JpcHRvciArIFwiIG9mICN7YWN0fVwiLFxuICAgIG4sXG4gICAgaXRlbXNDb3VudFxuICApO1xufVxuX19uYW1lKGFzc2VydExlbmd0aCwgXCJhc3NlcnRMZW5ndGhcIik7XG5Bc3NlcnRpb24uYWRkQ2hhaW5hYmxlTWV0aG9kKFwibGVuZ3RoXCIsIGFzc2VydExlbmd0aCwgYXNzZXJ0TGVuZ3RoQ2hhaW4pO1xuQXNzZXJ0aW9uLmFkZENoYWluYWJsZU1ldGhvZChcImxlbmd0aE9mXCIsIGFzc2VydExlbmd0aCwgYXNzZXJ0TGVuZ3RoQ2hhaW4pO1xuZnVuY3Rpb24gYXNzZXJ0TWF0Y2gocmUsIG1zZykge1xuICBpZiAobXNnKVxuICAgIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB2YXIgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIik7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIHJlLmV4ZWMob2JqKSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbWF0Y2ggXCIgKyByZSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gbm90IHRvIG1hdGNoIFwiICsgcmVcbiAgKTtcbn1cbl9fbmFtZShhc3NlcnRNYXRjaCwgXCJhc3NlcnRNYXRjaFwiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJtYXRjaFwiLCBhc3NlcnRNYXRjaCk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwibWF0Y2hlc1wiLCBhc3NlcnRNYXRjaCk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwic3RyaW5nXCIsIGZ1bmN0aW9uKHN0ciwgbXNnKSB7XG4gIGlmIChtc2cpXG4gICAgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIHZhciBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgZmxhZ01zZyA9IGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiKSwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKTtcbiAgbmV3IEFzc2VydGlvbihvYmosIGZsYWdNc2csIHNzZmksIHRydWUpLmlzLmEoXCJzdHJpbmdcIik7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIH5vYmouaW5kZXhPZihzdHIpLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBjb250YWluIFwiICsgaW5zcGVjdDIoc3RyKSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGNvbnRhaW4gXCIgKyBpbnNwZWN0MihzdHIpXG4gICk7XG59KTtcbmZ1bmN0aW9uIGFzc2VydEtleXMoa2V5cykge1xuICB2YXIgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksIG9ialR5cGUgPSB0eXBlKG9iaiksIGtleXNUeXBlID0gdHlwZShrZXlzKSwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKSwgaXNEZWVwID0gZmxhZzIodGhpcywgXCJkZWVwXCIpLCBzdHIsIGRlZXBTdHIgPSBcIlwiLCBhY3R1YWwsIG9rID0gdHJ1ZSwgZmxhZ01zZyA9IGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiKTtcbiAgZmxhZ01zZyA9IGZsYWdNc2cgPyBmbGFnTXNnICsgXCI6IFwiIDogXCJcIjtcbiAgdmFyIG1peGVkQXJnc01zZyA9IGZsYWdNc2cgKyBcIndoZW4gdGVzdGluZyBrZXlzIGFnYWluc3QgYW4gb2JqZWN0IG9yIGFuIGFycmF5IHlvdSBtdXN0IGdpdmUgYSBzaW5nbGUgQXJyYXl8T2JqZWN0fFN0cmluZyBhcmd1bWVudCBvciBtdWx0aXBsZSBTdHJpbmcgYXJndW1lbnRzXCI7XG4gIGlmIChvYmpUeXBlID09PSBcIk1hcFwiIHx8IG9ialR5cGUgPT09IFwiU2V0XCIpIHtcbiAgICBkZWVwU3RyID0gaXNEZWVwID8gXCJkZWVwbHkgXCIgOiBcIlwiO1xuICAgIGFjdHVhbCA9IFtdO1xuICAgIG9iai5mb3JFYWNoKGZ1bmN0aW9uKHZhbCwga2V5KSB7XG4gICAgICBhY3R1YWwucHVzaChrZXkpO1xuICAgIH0pO1xuICAgIGlmIChrZXlzVHlwZSAhPT0gXCJBcnJheVwiKSB7XG4gICAgICBrZXlzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYWN0dWFsID0gZ2V0T3duRW51bWVyYWJsZVByb3BlcnRpZXMob2JqKTtcbiAgICBzd2l0Y2ggKGtleXNUeXBlKSB7XG4gICAgICBjYXNlIFwiQXJyYXlcIjpcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKG1peGVkQXJnc01zZywgdm9pZCAwLCBzc2ZpKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJPYmplY3RcIjpcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKG1peGVkQXJnc01zZywgdm9pZCAwLCBzc2ZpKTtcbiAgICAgICAgfVxuICAgICAgICBrZXlzID0gT2JqZWN0LmtleXMoa2V5cyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAga2V5cyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgfVxuICAgIGtleXMgPSBrZXlzLm1hcChmdW5jdGlvbih2YWwpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgdmFsID09PSBcInN5bWJvbFwiID8gdmFsIDogU3RyaW5nKHZhbCk7XG4gICAgfSk7XG4gIH1cbiAgaWYgKCFrZXlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihmbGFnTXNnICsgXCJrZXlzIHJlcXVpcmVkXCIsIHZvaWQgMCwgc3NmaSk7XG4gIH1cbiAgdmFyIGxlbiA9IGtleXMubGVuZ3RoLCBhbnkgPSBmbGFnMih0aGlzLCBcImFueVwiKSwgYWxsID0gZmxhZzIodGhpcywgXCJhbGxcIiksIGV4cGVjdGVkID0ga2V5cywgaXNFcWwgPSBpc0RlZXAgPyBmbGFnMih0aGlzLCBcImVxbFwiKSA6ICh2YWwxLCB2YWwyKSA9PiB2YWwxID09PSB2YWwyO1xuICBpZiAoIWFueSAmJiAhYWxsKSB7XG4gICAgYWxsID0gdHJ1ZTtcbiAgfVxuICBpZiAoYW55KSB7XG4gICAgb2sgPSBleHBlY3RlZC5zb21lKGZ1bmN0aW9uKGV4cGVjdGVkS2V5KSB7XG4gICAgICByZXR1cm4gYWN0dWFsLnNvbWUoZnVuY3Rpb24oYWN0dWFsS2V5KSB7XG4gICAgICAgIHJldHVybiBpc0VxbChleHBlY3RlZEtleSwgYWN0dWFsS2V5KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIGlmIChhbGwpIHtcbiAgICBvayA9IGV4cGVjdGVkLmV2ZXJ5KGZ1bmN0aW9uKGV4cGVjdGVkS2V5KSB7XG4gICAgICByZXR1cm4gYWN0dWFsLnNvbWUoZnVuY3Rpb24oYWN0dWFsS2V5KSB7XG4gICAgICAgIHJldHVybiBpc0VxbChleHBlY3RlZEtleSwgYWN0dWFsS2V5KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGlmICghZmxhZzIodGhpcywgXCJjb250YWluc1wiKSkge1xuICAgICAgb2sgPSBvayAmJiBrZXlzLmxlbmd0aCA9PSBhY3R1YWwubGVuZ3RoO1xuICAgIH1cbiAgfVxuICBpZiAobGVuID4gMSkge1xuICAgIGtleXMgPSBrZXlzLm1hcChmdW5jdGlvbihrZXkpIHtcbiAgICAgIHJldHVybiBpbnNwZWN0MihrZXkpO1xuICAgIH0pO1xuICAgIHZhciBsYXN0ID0ga2V5cy5wb3AoKTtcbiAgICBpZiAoYWxsKSB7XG4gICAgICBzdHIgPSBrZXlzLmpvaW4oXCIsIFwiKSArIFwiLCBhbmQgXCIgKyBsYXN0O1xuICAgIH1cbiAgICBpZiAoYW55KSB7XG4gICAgICBzdHIgPSBrZXlzLmpvaW4oXCIsIFwiKSArIFwiLCBvciBcIiArIGxhc3Q7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHN0ciA9IGluc3BlY3QyKGtleXNbMF0pO1xuICB9XG4gIHN0ciA9IChsZW4gPiAxID8gXCJrZXlzIFwiIDogXCJrZXkgXCIpICsgc3RyO1xuICBzdHIgPSAoZmxhZzIodGhpcywgXCJjb250YWluc1wiKSA/IFwiY29udGFpbiBcIiA6IFwiaGF2ZSBcIikgKyBzdHI7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIG9rLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBcIiArIGRlZXBTdHIgKyBzdHIsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBcIiArIGRlZXBTdHIgKyBzdHIsXG4gICAgZXhwZWN0ZWQuc2xpY2UoMCkuc29ydChjb21wYXJlQnlJbnNwZWN0KSxcbiAgICBhY3R1YWwuc29ydChjb21wYXJlQnlJbnNwZWN0KSxcbiAgICB0cnVlXG4gICk7XG59XG5fX25hbWUoYXNzZXJ0S2V5cywgXCJhc3NlcnRLZXlzXCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImtleXNcIiwgYXNzZXJ0S2V5cyk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwia2V5XCIsIGFzc2VydEtleXMpO1xuZnVuY3Rpb24gYXNzZXJ0VGhyb3dzKGVycm9yTGlrZSwgZXJyTXNnTWF0Y2hlciwgbXNnKSB7XG4gIGlmIChtc2cpXG4gICAgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIHZhciBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKSwgZmxhZ01zZyA9IGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiKSwgbmVnYXRlID0gZmxhZzIodGhpcywgXCJuZWdhdGVcIikgfHwgZmFsc2U7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5hKFwiZnVuY3Rpb25cIik7XG4gIGlmIChpc1JlZ0V4cDIoZXJyb3JMaWtlKSB8fCB0eXBlb2YgZXJyb3JMaWtlID09PSBcInN0cmluZ1wiKSB7XG4gICAgZXJyTXNnTWF0Y2hlciA9IGVycm9yTGlrZTtcbiAgICBlcnJvckxpa2UgPSBudWxsO1xuICB9XG4gIGxldCBjYXVnaHRFcnI7XG4gIGxldCBlcnJvcldhc1Rocm93biA9IGZhbHNlO1xuICB0cnkge1xuICAgIG9iaigpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBlcnJvcldhc1Rocm93biA9IHRydWU7XG4gICAgY2F1Z2h0RXJyID0gZXJyO1xuICB9XG4gIHZhciBldmVyeUFyZ0lzVW5kZWZpbmVkID0gZXJyb3JMaWtlID09PSB2b2lkIDAgJiYgZXJyTXNnTWF0Y2hlciA9PT0gdm9pZCAwO1xuICB2YXIgZXZlcnlBcmdJc0RlZmluZWQgPSBCb29sZWFuKGVycm9yTGlrZSAmJiBlcnJNc2dNYXRjaGVyKTtcbiAgdmFyIGVycm9yTGlrZUZhaWwgPSBmYWxzZTtcbiAgdmFyIGVyck1zZ01hdGNoZXJGYWlsID0gZmFsc2U7XG4gIGlmIChldmVyeUFyZ0lzVW5kZWZpbmVkIHx8ICFldmVyeUFyZ0lzVW5kZWZpbmVkICYmICFuZWdhdGUpIHtcbiAgICB2YXIgZXJyb3JMaWtlU3RyaW5nID0gXCJhbiBlcnJvclwiO1xuICAgIGlmIChlcnJvckxpa2UgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgZXJyb3JMaWtlU3RyaW5nID0gXCIje2V4cH1cIjtcbiAgICB9IGVsc2UgaWYgKGVycm9yTGlrZSkge1xuICAgICAgZXJyb3JMaWtlU3RyaW5nID0gY2hlY2tfZXJyb3JfZXhwb3J0cy5nZXRDb25zdHJ1Y3Rvck5hbWUoZXJyb3JMaWtlKTtcbiAgICB9XG4gICAgbGV0IGFjdHVhbCA9IGNhdWdodEVycjtcbiAgICBpZiAoY2F1Z2h0RXJyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGFjdHVhbCA9IGNhdWdodEVyci50b1N0cmluZygpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGNhdWdodEVyciA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgYWN0dWFsID0gY2F1Z2h0RXJyO1xuICAgIH0gZWxzZSBpZiAoY2F1Z2h0RXJyICYmICh0eXBlb2YgY2F1Z2h0RXJyID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYXVnaHRFcnIgPT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGFjdHVhbCA9IGNoZWNrX2Vycm9yX2V4cG9ydHMuZ2V0Q29uc3RydWN0b3JOYW1lKGNhdWdodEVycik7XG4gICAgICB9IGNhdGNoIChfZXJyKSB7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgZXJyb3JXYXNUaHJvd24sXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gdGhyb3cgXCIgKyBlcnJvckxpa2VTdHJpbmcsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IHRocm93IGFuIGVycm9yIGJ1dCAje2FjdH0gd2FzIHRocm93blwiLFxuICAgICAgZXJyb3JMaWtlICYmIGVycm9yTGlrZS50b1N0cmluZygpLFxuICAgICAgYWN0dWFsXG4gICAgKTtcbiAgfVxuICBpZiAoZXJyb3JMaWtlICYmIGNhdWdodEVycikge1xuICAgIGlmIChlcnJvckxpa2UgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgdmFyIGlzQ29tcGF0aWJsZUluc3RhbmNlID0gY2hlY2tfZXJyb3JfZXhwb3J0cy5jb21wYXRpYmxlSW5zdGFuY2UoY2F1Z2h0RXJyLCBlcnJvckxpa2UpO1xuICAgICAgaWYgKGlzQ29tcGF0aWJsZUluc3RhbmNlID09PSBuZWdhdGUpIHtcbiAgICAgICAgaWYgKGV2ZXJ5QXJnSXNEZWZpbmVkICYmIG5lZ2F0ZSkge1xuICAgICAgICAgIGVycm9yTGlrZUZhaWwgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgbmVnYXRlLFxuICAgICAgICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIHRocm93ICN7ZXhwfSBidXQgI3thY3R9IHdhcyB0aHJvd25cIixcbiAgICAgICAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgdGhyb3cgI3tleHB9XCIgKyAoY2F1Z2h0RXJyICYmICFuZWdhdGUgPyBcIiBidXQgI3thY3R9IHdhcyB0aHJvd25cIiA6IFwiXCIpLFxuICAgICAgICAgICAgZXJyb3JMaWtlLnRvU3RyaW5nKCksXG4gICAgICAgICAgICBjYXVnaHRFcnIudG9TdHJpbmcoKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIGlzQ29tcGF0aWJsZUNvbnN0cnVjdG9yID0gY2hlY2tfZXJyb3JfZXhwb3J0cy5jb21wYXRpYmxlQ29uc3RydWN0b3IoY2F1Z2h0RXJyLCBlcnJvckxpa2UpO1xuICAgIGlmIChpc0NvbXBhdGlibGVDb25zdHJ1Y3RvciA9PT0gbmVnYXRlKSB7XG4gICAgICBpZiAoZXZlcnlBcmdJc0RlZmluZWQgJiYgbmVnYXRlKSB7XG4gICAgICAgIGVycm9yTGlrZUZhaWwgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgbmVnYXRlLFxuICAgICAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byB0aHJvdyAje2V4cH0gYnV0ICN7YWN0fSB3YXMgdGhyb3duXCIsXG4gICAgICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCB0aHJvdyAje2V4cH1cIiArIChjYXVnaHRFcnIgPyBcIiBidXQgI3thY3R9IHdhcyB0aHJvd25cIiA6IFwiXCIpLFxuICAgICAgICAgIGVycm9yTGlrZSBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3JMaWtlLnRvU3RyaW5nKCkgOiBlcnJvckxpa2UgJiYgY2hlY2tfZXJyb3JfZXhwb3J0cy5nZXRDb25zdHJ1Y3Rvck5hbWUoZXJyb3JMaWtlKSxcbiAgICAgICAgICBjYXVnaHRFcnIgaW5zdGFuY2VvZiBFcnJvciA/IGNhdWdodEVyci50b1N0cmluZygpIDogY2F1Z2h0RXJyICYmIGNoZWNrX2Vycm9yX2V4cG9ydHMuZ2V0Q29uc3RydWN0b3JOYW1lKGNhdWdodEVycilcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKGNhdWdodEVyciAmJiBlcnJNc2dNYXRjaGVyICE9PSB2b2lkIDAgJiYgZXJyTXNnTWF0Y2hlciAhPT0gbnVsbCkge1xuICAgIHZhciBwbGFjZWhvbGRlciA9IFwiaW5jbHVkaW5nXCI7XG4gICAgaWYgKGlzUmVnRXhwMihlcnJNc2dNYXRjaGVyKSkge1xuICAgICAgcGxhY2Vob2xkZXIgPSBcIm1hdGNoaW5nXCI7XG4gICAgfVxuICAgIHZhciBpc0NvbXBhdGlibGVNZXNzYWdlID0gY2hlY2tfZXJyb3JfZXhwb3J0cy5jb21wYXRpYmxlTWVzc2FnZShjYXVnaHRFcnIsIGVyck1zZ01hdGNoZXIpO1xuICAgIGlmIChpc0NvbXBhdGlibGVNZXNzYWdlID09PSBuZWdhdGUpIHtcbiAgICAgIGlmIChldmVyeUFyZ0lzRGVmaW5lZCAmJiBuZWdhdGUpIHtcbiAgICAgICAgZXJyTXNnTWF0Y2hlckZhaWwgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgbmVnYXRlLFxuICAgICAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byB0aHJvdyBlcnJvciBcIiArIHBsYWNlaG9sZGVyICsgXCIgI3tleHB9IGJ1dCBnb3QgI3thY3R9XCIsXG4gICAgICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIHRocm93IGVycm9yIG5vdCBcIiArIHBsYWNlaG9sZGVyICsgXCIgI3tleHB9XCIsXG4gICAgICAgICAgZXJyTXNnTWF0Y2hlcixcbiAgICAgICAgICBjaGVja19lcnJvcl9leHBvcnRzLmdldE1lc3NhZ2UoY2F1Z2h0RXJyKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoZXJyb3JMaWtlRmFpbCAmJiBlcnJNc2dNYXRjaGVyRmFpbCkge1xuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgbmVnYXRlLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIHRocm93ICN7ZXhwfSBidXQgI3thY3R9IHdhcyB0aHJvd25cIixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgdGhyb3cgI3tleHB9XCIgKyAoY2F1Z2h0RXJyID8gXCIgYnV0ICN7YWN0fSB3YXMgdGhyb3duXCIgOiBcIlwiKSxcbiAgICAgIGVycm9yTGlrZSBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3JMaWtlLnRvU3RyaW5nKCkgOiBlcnJvckxpa2UgJiYgY2hlY2tfZXJyb3JfZXhwb3J0cy5nZXRDb25zdHJ1Y3Rvck5hbWUoZXJyb3JMaWtlKSxcbiAgICAgIGNhdWdodEVyciBpbnN0YW5jZW9mIEVycm9yID8gY2F1Z2h0RXJyLnRvU3RyaW5nKCkgOiBjYXVnaHRFcnIgJiYgY2hlY2tfZXJyb3JfZXhwb3J0cy5nZXRDb25zdHJ1Y3Rvck5hbWUoY2F1Z2h0RXJyKVxuICAgICk7XG4gIH1cbiAgZmxhZzIodGhpcywgXCJvYmplY3RcIiwgY2F1Z2h0RXJyKTtcbn1cbl9fbmFtZShhc3NlcnRUaHJvd3MsIFwiYXNzZXJ0VGhyb3dzXCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcInRocm93XCIsIGFzc2VydFRocm93cyk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwidGhyb3dzXCIsIGFzc2VydFRocm93cyk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiVGhyb3dcIiwgYXNzZXJ0VGhyb3dzKTtcbmZ1bmN0aW9uIHJlc3BvbmRUbyhtZXRob2QsIG1zZykge1xuICBpZiAobXNnKVxuICAgIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB2YXIgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksIGl0c2VsZiA9IGZsYWcyKHRoaXMsIFwiaXRzZWxmXCIpLCBjb250ZXh0ID0gXCJmdW5jdGlvblwiID09PSB0eXBlb2Ygb2JqICYmICFpdHNlbGYgPyBvYmoucHJvdG90eXBlW21ldGhvZF0gOiBvYmpbbWV0aG9kXTtcbiAgdGhpcy5hc3NlcnQoXG4gICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgY29udGV4dCxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gcmVzcG9uZCB0byBcIiArIGluc3BlY3QyKG1ldGhvZCksXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCByZXNwb25kIHRvIFwiICsgaW5zcGVjdDIobWV0aG9kKVxuICApO1xufVxuX19uYW1lKHJlc3BvbmRUbywgXCJyZXNwb25kVG9cIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwicmVzcG9uZFRvXCIsIHJlc3BvbmRUbyk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwicmVzcG9uZHNUb1wiLCByZXNwb25kVG8pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwiaXRzZWxmXCIsIGZ1bmN0aW9uKCkge1xuICBmbGFnMih0aGlzLCBcIml0c2VsZlwiLCB0cnVlKTtcbn0pO1xuZnVuY3Rpb24gc2F0aXNmeShtYXRjaGVyLCBtc2cpIHtcbiAgaWYgKG1zZylcbiAgICBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgdmFyIG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpO1xuICB2YXIgcmVzdWx0ID0gbWF0Y2hlcihvYmopO1xuICB0aGlzLmFzc2VydChcbiAgICByZXN1bHQsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIHNhdGlzZnkgXCIgKyBvYmpEaXNwbGF5KG1hdGNoZXIpLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3Qgc2F0aXNmeVwiICsgb2JqRGlzcGxheShtYXRjaGVyKSxcbiAgICBmbGFnMih0aGlzLCBcIm5lZ2F0ZVwiKSA/IGZhbHNlIDogdHJ1ZSxcbiAgICByZXN1bHRcbiAgKTtcbn1cbl9fbmFtZShzYXRpc2Z5LCBcInNhdGlzZnlcIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwic2F0aXNmeVwiLCBzYXRpc2Z5KTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJzYXRpc2ZpZXNcIiwgc2F0aXNmeSk7XG5mdW5jdGlvbiBjbG9zZVRvKGV4cGVjdGVkLCBkZWx0YSwgbXNnKSB7XG4gIGlmIChtc2cpXG4gICAgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIHZhciBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgZmxhZ01zZyA9IGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiKSwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKTtcbiAgbmV3IEFzc2VydGlvbihvYmosIGZsYWdNc2csIHNzZmksIHRydWUpLmlzLm51bWVyaWM7XG4gIGxldCBtZXNzYWdlID0gXCJBIGBkZWx0YWAgdmFsdWUgaXMgcmVxdWlyZWQgZm9yIGBjbG9zZVRvYFwiO1xuICBpZiAoZGVsdGEgPT0gdm9pZCAwKVxuICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihmbGFnTXNnID8gYCR7ZmxhZ01zZ306ICR7bWVzc2FnZX1gIDogbWVzc2FnZSwgdm9pZCAwLCBzc2ZpKTtcbiAgbmV3IEFzc2VydGlvbihkZWx0YSwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkuaXMubnVtZXJpYztcbiAgbWVzc2FnZSA9IFwiQSBgZXhwZWN0ZWRgIHZhbHVlIGlzIHJlcXVpcmVkIGZvciBgY2xvc2VUb2BcIjtcbiAgaWYgKGV4cGVjdGVkID09IHZvaWQgMClcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoZmxhZ01zZyA/IGAke2ZsYWdNc2d9OiAke21lc3NhZ2V9YCA6IG1lc3NhZ2UsIHZvaWQgMCwgc3NmaSk7XG4gIG5ldyBBc3NlcnRpb24oZXhwZWN0ZWQsIGZsYWdNc2csIHNzZmksIHRydWUpLmlzLm51bWVyaWM7XG4gIGNvbnN0IGFicyA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKHgpID0+IHggPCAwbiA/IC14IDogeCwgXCJhYnNcIik7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIGFicyhvYmogLSBleHBlY3RlZCkgPD0gZGVsdGEsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIGNsb3NlIHRvIFwiICsgZXhwZWN0ZWQgKyBcIiArLy0gXCIgKyBkZWx0YSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gbm90IHRvIGJlIGNsb3NlIHRvIFwiICsgZXhwZWN0ZWQgKyBcIiArLy0gXCIgKyBkZWx0YVxuICApO1xufVxuX19uYW1lKGNsb3NlVG8sIFwiY2xvc2VUb1wiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJjbG9zZVRvXCIsIGNsb3NlVG8pO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImFwcHJveGltYXRlbHlcIiwgY2xvc2VUbyk7XG5mdW5jdGlvbiBpc1N1YnNldE9mKF9zdWJzZXQsIF9zdXBlcnNldCwgY21wLCBjb250YWlucywgb3JkZXJlZCkge1xuICBsZXQgc3VwZXJzZXQgPSBBcnJheS5mcm9tKF9zdXBlcnNldCk7XG4gIGxldCBzdWJzZXQgPSBBcnJheS5mcm9tKF9zdWJzZXQpO1xuICBpZiAoIWNvbnRhaW5zKSB7XG4gICAgaWYgKHN1YnNldC5sZW5ndGggIT09IHN1cGVyc2V0Lmxlbmd0aClcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBzdXBlcnNldCA9IHN1cGVyc2V0LnNsaWNlKCk7XG4gIH1cbiAgcmV0dXJuIHN1YnNldC5ldmVyeShmdW5jdGlvbihlbGVtLCBpZHgpIHtcbiAgICBpZiAob3JkZXJlZClcbiAgICAgIHJldHVybiBjbXAgPyBjbXAoZWxlbSwgc3VwZXJzZXRbaWR4XSkgOiBlbGVtID09PSBzdXBlcnNldFtpZHhdO1xuICAgIGlmICghY21wKSB7XG4gICAgICB2YXIgbWF0Y2hJZHggPSBzdXBlcnNldC5pbmRleE9mKGVsZW0pO1xuICAgICAgaWYgKG1hdGNoSWR4ID09PSAtMSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKCFjb250YWlucylcbiAgICAgICAgc3VwZXJzZXQuc3BsaWNlKG1hdGNoSWR4LCAxKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gc3VwZXJzZXQuc29tZShmdW5jdGlvbihlbGVtMiwgbWF0Y2hJZHgyKSB7XG4gICAgICBpZiAoIWNtcChlbGVtLCBlbGVtMikpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIGlmICghY29udGFpbnMpXG4gICAgICAgIHN1cGVyc2V0LnNwbGljZShtYXRjaElkeDIsIDEpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gIH0pO1xufVxuX19uYW1lKGlzU3Vic2V0T2YsIFwiaXNTdWJzZXRPZlwiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJtZW1iZXJzXCIsIGZ1bmN0aW9uKHN1YnNldCwgbXNnKSB7XG4gIGlmIChtc2cpXG4gICAgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIHZhciBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgZmxhZ01zZyA9IGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiKSwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKTtcbiAgbmV3IEFzc2VydGlvbihvYmosIGZsYWdNc2csIHNzZmksIHRydWUpLnRvLmJlLml0ZXJhYmxlO1xuICBuZXcgQXNzZXJ0aW9uKHN1YnNldCwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkudG8uYmUuaXRlcmFibGU7XG4gIHZhciBjb250YWlucyA9IGZsYWcyKHRoaXMsIFwiY29udGFpbnNcIik7XG4gIHZhciBvcmRlcmVkID0gZmxhZzIodGhpcywgXCJvcmRlcmVkXCIpO1xuICB2YXIgc3ViamVjdCwgZmFpbE1zZywgZmFpbE5lZ2F0ZU1zZztcbiAgaWYgKGNvbnRhaW5zKSB7XG4gICAgc3ViamVjdCA9IG9yZGVyZWQgPyBcImFuIG9yZGVyZWQgc3VwZXJzZXRcIiA6IFwiYSBzdXBlcnNldFwiO1xuICAgIGZhaWxNc2cgPSBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgXCIgKyBzdWJqZWN0ICsgXCIgb2YgI3tleHB9XCI7XG4gICAgZmFpbE5lZ2F0ZU1zZyA9IFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgYmUgXCIgKyBzdWJqZWN0ICsgXCIgb2YgI3tleHB9XCI7XG4gIH0gZWxzZSB7XG4gICAgc3ViamVjdCA9IG9yZGVyZWQgPyBcIm9yZGVyZWQgbWVtYmVyc1wiIDogXCJtZW1iZXJzXCI7XG4gICAgZmFpbE1zZyA9IFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBoYXZlIHRoZSBzYW1lIFwiICsgc3ViamVjdCArIFwiIGFzICN7ZXhwfVwiO1xuICAgIGZhaWxOZWdhdGVNc2cgPSBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGhhdmUgdGhlIHNhbWUgXCIgKyBzdWJqZWN0ICsgXCIgYXMgI3tleHB9XCI7XG4gIH1cbiAgdmFyIGNtcCA9IGZsYWcyKHRoaXMsIFwiZGVlcFwiKSA/IGZsYWcyKHRoaXMsIFwiZXFsXCIpIDogdm9pZCAwO1xuICB0aGlzLmFzc2VydChcbiAgICBpc1N1YnNldE9mKHN1YnNldCwgb2JqLCBjbXAsIGNvbnRhaW5zLCBvcmRlcmVkKSxcbiAgICBmYWlsTXNnLFxuICAgIGZhaWxOZWdhdGVNc2csXG4gICAgc3Vic2V0LFxuICAgIG9iaixcbiAgICB0cnVlXG4gICk7XG59KTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcIml0ZXJhYmxlXCIsIGZ1bmN0aW9uKG1zZykge1xuICBpZiAobXNnKVxuICAgIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB2YXIgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIik7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIG9iaiAhPSB2b2lkIDAgJiYgb2JqW1N5bWJvbC5pdGVyYXRvcl0sXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIGFuIGl0ZXJhYmxlXCIsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBiZSBhbiBpdGVyYWJsZVwiLFxuICAgIG9ialxuICApO1xufSk7XG5mdW5jdGlvbiBvbmVPZihsaXN0LCBtc2cpIHtcbiAgaWYgKG1zZylcbiAgICBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgdmFyIGV4cGVjdGVkID0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIHNzZmkgPSBmbGFnMih0aGlzLCBcInNzZmlcIiksIGNvbnRhaW5zID0gZmxhZzIodGhpcywgXCJjb250YWluc1wiKSwgaXNEZWVwID0gZmxhZzIodGhpcywgXCJkZWVwXCIpLCBlcWwgPSBmbGFnMih0aGlzLCBcImVxbFwiKTtcbiAgbmV3IEFzc2VydGlvbihsaXN0LCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5iZS5hbihcImFycmF5XCIpO1xuICBpZiAoY29udGFpbnMpIHtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgIGxpc3Quc29tZShmdW5jdGlvbihwb3NzaWJpbGl0eSkge1xuICAgICAgICByZXR1cm4gZXhwZWN0ZWQuaW5kZXhPZihwb3NzaWJpbGl0eSkgPiAtMTtcbiAgICAgIH0pLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGNvbnRhaW4gb25lIG9mICN7ZXhwfVwiLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBjb250YWluIG9uZSBvZiAje2V4cH1cIixcbiAgICAgIGxpc3QsXG4gICAgICBleHBlY3RlZFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGlzRGVlcCkge1xuICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgIGxpc3Quc29tZShmdW5jdGlvbihwb3NzaWJpbGl0eSkge1xuICAgICAgICAgIHJldHVybiBlcWwoZXhwZWN0ZWQsIHBvc3NpYmlsaXR5KTtcbiAgICAgICAgfSksXG4gICAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBkZWVwbHkgZXF1YWwgb25lIG9mICN7ZXhwfVwiLFxuICAgICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gZGVlcGx5IGVxdWFsIG9uZSBvZiAje2V4cH1cIixcbiAgICAgICAgbGlzdCxcbiAgICAgICAgZXhwZWN0ZWRcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICBsaXN0LmluZGV4T2YoZXhwZWN0ZWQpID4gLTEsXG4gICAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBvbmUgb2YgI3tleHB9XCIsXG4gICAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgYmUgb25lIG9mICN7ZXhwfVwiLFxuICAgICAgICBsaXN0LFxuICAgICAgICBleHBlY3RlZFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbl9fbmFtZShvbmVPZiwgXCJvbmVPZlwiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJvbmVPZlwiLCBvbmVPZik7XG5mdW5jdGlvbiBhc3NlcnRDaGFuZ2VzKHN1YmplY3QsIHByb3AsIG1zZykge1xuICBpZiAobXNnKVxuICAgIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB2YXIgZm4gPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgZmxhZ01zZyA9IGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiKSwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKTtcbiAgbmV3IEFzc2VydGlvbihmbiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkuaXMuYShcImZ1bmN0aW9uXCIpO1xuICB2YXIgaW5pdGlhbDtcbiAgaWYgKCFwcm9wKSB7XG4gICAgbmV3IEFzc2VydGlvbihzdWJqZWN0LCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5hKFwiZnVuY3Rpb25cIik7XG4gICAgaW5pdGlhbCA9IHN1YmplY3QoKTtcbiAgfSBlbHNlIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHN1YmplY3QsIGZsYWdNc2csIHNzZmksIHRydWUpLnRvLmhhdmUucHJvcGVydHkocHJvcCk7XG4gICAgaW5pdGlhbCA9IHN1YmplY3RbcHJvcF07XG4gIH1cbiAgZm4oKTtcbiAgdmFyIGZpbmFsID0gcHJvcCA9PT0gdm9pZCAwIHx8IHByb3AgPT09IG51bGwgPyBzdWJqZWN0KCkgOiBzdWJqZWN0W3Byb3BdO1xuICB2YXIgbXNnT2JqID0gcHJvcCA9PT0gdm9pZCAwIHx8IHByb3AgPT09IG51bGwgPyBpbml0aWFsIDogXCIuXCIgKyBwcm9wO1xuICBmbGFnMih0aGlzLCBcImRlbHRhTXNnT2JqXCIsIG1zZ09iaik7XG4gIGZsYWcyKHRoaXMsIFwiaW5pdGlhbERlbHRhVmFsdWVcIiwgaW5pdGlhbCk7XG4gIGZsYWcyKHRoaXMsIFwiZmluYWxEZWx0YVZhbHVlXCIsIGZpbmFsKTtcbiAgZmxhZzIodGhpcywgXCJkZWx0YUJlaGF2aW9yXCIsIFwiY2hhbmdlXCIpO1xuICBmbGFnMih0aGlzLCBcInJlYWxEZWx0YVwiLCBmaW5hbCAhPT0gaW5pdGlhbCk7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIGluaXRpYWwgIT09IGZpbmFsLFxuICAgIFwiZXhwZWN0ZWQgXCIgKyBtc2dPYmogKyBcIiB0byBjaGFuZ2VcIixcbiAgICBcImV4cGVjdGVkIFwiICsgbXNnT2JqICsgXCIgdG8gbm90IGNoYW5nZVwiXG4gICk7XG59XG5fX25hbWUoYXNzZXJ0Q2hhbmdlcywgXCJhc3NlcnRDaGFuZ2VzXCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImNoYW5nZVwiLCBhc3NlcnRDaGFuZ2VzKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJjaGFuZ2VzXCIsIGFzc2VydENoYW5nZXMpO1xuZnVuY3Rpb24gYXNzZXJ0SW5jcmVhc2VzKHN1YmplY3QsIHByb3AsIG1zZykge1xuICBpZiAobXNnKVxuICAgIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB2YXIgZm4gPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgZmxhZ01zZyA9IGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiKSwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKTtcbiAgbmV3IEFzc2VydGlvbihmbiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkuaXMuYShcImZ1bmN0aW9uXCIpO1xuICB2YXIgaW5pdGlhbDtcbiAgaWYgKCFwcm9wKSB7XG4gICAgbmV3IEFzc2VydGlvbihzdWJqZWN0LCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5hKFwiZnVuY3Rpb25cIik7XG4gICAgaW5pdGlhbCA9IHN1YmplY3QoKTtcbiAgfSBlbHNlIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHN1YmplY3QsIGZsYWdNc2csIHNzZmksIHRydWUpLnRvLmhhdmUucHJvcGVydHkocHJvcCk7XG4gICAgaW5pdGlhbCA9IHN1YmplY3RbcHJvcF07XG4gIH1cbiAgbmV3IEFzc2VydGlvbihpbml0aWFsLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5hKFwibnVtYmVyXCIpO1xuICBmbigpO1xuICB2YXIgZmluYWwgPSBwcm9wID09PSB2b2lkIDAgfHwgcHJvcCA9PT0gbnVsbCA/IHN1YmplY3QoKSA6IHN1YmplY3RbcHJvcF07XG4gIHZhciBtc2dPYmogPSBwcm9wID09PSB2b2lkIDAgfHwgcHJvcCA9PT0gbnVsbCA/IGluaXRpYWwgOiBcIi5cIiArIHByb3A7XG4gIGZsYWcyKHRoaXMsIFwiZGVsdGFNc2dPYmpcIiwgbXNnT2JqKTtcbiAgZmxhZzIodGhpcywgXCJpbml0aWFsRGVsdGFWYWx1ZVwiLCBpbml0aWFsKTtcbiAgZmxhZzIodGhpcywgXCJmaW5hbERlbHRhVmFsdWVcIiwgZmluYWwpO1xuICBmbGFnMih0aGlzLCBcImRlbHRhQmVoYXZpb3JcIiwgXCJpbmNyZWFzZVwiKTtcbiAgZmxhZzIodGhpcywgXCJyZWFsRGVsdGFcIiwgZmluYWwgLSBpbml0aWFsKTtcbiAgdGhpcy5hc3NlcnQoXG4gICAgZmluYWwgLSBpbml0aWFsID4gMCxcbiAgICBcImV4cGVjdGVkIFwiICsgbXNnT2JqICsgXCIgdG8gaW5jcmVhc2VcIixcbiAgICBcImV4cGVjdGVkIFwiICsgbXNnT2JqICsgXCIgdG8gbm90IGluY3JlYXNlXCJcbiAgKTtcbn1cbl9fbmFtZShhc3NlcnRJbmNyZWFzZXMsIFwiYXNzZXJ0SW5jcmVhc2VzXCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImluY3JlYXNlXCIsIGFzc2VydEluY3JlYXNlcyk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiaW5jcmVhc2VzXCIsIGFzc2VydEluY3JlYXNlcyk7XG5mdW5jdGlvbiBhc3NlcnREZWNyZWFzZXMoc3ViamVjdCwgcHJvcCwgbXNnKSB7XG4gIGlmIChtc2cpXG4gICAgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIHZhciBmbiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBmbGFnTXNnID0gZmxhZzIodGhpcywgXCJtZXNzYWdlXCIpLCBzc2ZpID0gZmxhZzIodGhpcywgXCJzc2ZpXCIpO1xuICBuZXcgQXNzZXJ0aW9uKGZuLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5hKFwiZnVuY3Rpb25cIik7XG4gIHZhciBpbml0aWFsO1xuICBpZiAoIXByb3ApIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHN1YmplY3QsIGZsYWdNc2csIHNzZmksIHRydWUpLmlzLmEoXCJmdW5jdGlvblwiKTtcbiAgICBpbml0aWFsID0gc3ViamVjdCgpO1xuICB9IGVsc2Uge1xuICAgIG5ldyBBc3NlcnRpb24oc3ViamVjdCwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkudG8uaGF2ZS5wcm9wZXJ0eShwcm9wKTtcbiAgICBpbml0aWFsID0gc3ViamVjdFtwcm9wXTtcbiAgfVxuICBuZXcgQXNzZXJ0aW9uKGluaXRpYWwsIGZsYWdNc2csIHNzZmksIHRydWUpLmlzLmEoXCJudW1iZXJcIik7XG4gIGZuKCk7XG4gIHZhciBmaW5hbCA9IHByb3AgPT09IHZvaWQgMCB8fCBwcm9wID09PSBudWxsID8gc3ViamVjdCgpIDogc3ViamVjdFtwcm9wXTtcbiAgdmFyIG1zZ09iaiA9IHByb3AgPT09IHZvaWQgMCB8fCBwcm9wID09PSBudWxsID8gaW5pdGlhbCA6IFwiLlwiICsgcHJvcDtcbiAgZmxhZzIodGhpcywgXCJkZWx0YU1zZ09ialwiLCBtc2dPYmopO1xuICBmbGFnMih0aGlzLCBcImluaXRpYWxEZWx0YVZhbHVlXCIsIGluaXRpYWwpO1xuICBmbGFnMih0aGlzLCBcImZpbmFsRGVsdGFWYWx1ZVwiLCBmaW5hbCk7XG4gIGZsYWcyKHRoaXMsIFwiZGVsdGFCZWhhdmlvclwiLCBcImRlY3JlYXNlXCIpO1xuICBmbGFnMih0aGlzLCBcInJlYWxEZWx0YVwiLCBpbml0aWFsIC0gZmluYWwpO1xuICB0aGlzLmFzc2VydChcbiAgICBmaW5hbCAtIGluaXRpYWwgPCAwLFxuICAgIFwiZXhwZWN0ZWQgXCIgKyBtc2dPYmogKyBcIiB0byBkZWNyZWFzZVwiLFxuICAgIFwiZXhwZWN0ZWQgXCIgKyBtc2dPYmogKyBcIiB0byBub3QgZGVjcmVhc2VcIlxuICApO1xufVxuX19uYW1lKGFzc2VydERlY3JlYXNlcywgXCJhc3NlcnREZWNyZWFzZXNcIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiZGVjcmVhc2VcIiwgYXNzZXJ0RGVjcmVhc2VzKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJkZWNyZWFzZXNcIiwgYXNzZXJ0RGVjcmVhc2VzKTtcbmZ1bmN0aW9uIGFzc2VydERlbHRhKGRlbHRhLCBtc2cpIHtcbiAgaWYgKG1zZylcbiAgICBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgdmFyIG1zZ09iaiA9IGZsYWcyKHRoaXMsIFwiZGVsdGFNc2dPYmpcIik7XG4gIHZhciBpbml0aWFsID0gZmxhZzIodGhpcywgXCJpbml0aWFsRGVsdGFWYWx1ZVwiKTtcbiAgdmFyIGZpbmFsID0gZmxhZzIodGhpcywgXCJmaW5hbERlbHRhVmFsdWVcIik7XG4gIHZhciBiZWhhdmlvciA9IGZsYWcyKHRoaXMsIFwiZGVsdGFCZWhhdmlvclwiKTtcbiAgdmFyIHJlYWxEZWx0YSA9IGZsYWcyKHRoaXMsIFwicmVhbERlbHRhXCIpO1xuICB2YXIgZXhwcmVzc2lvbjtcbiAgaWYgKGJlaGF2aW9yID09PSBcImNoYW5nZVwiKSB7XG4gICAgZXhwcmVzc2lvbiA9IE1hdGguYWJzKGZpbmFsIC0gaW5pdGlhbCkgPT09IE1hdGguYWJzKGRlbHRhKTtcbiAgfSBlbHNlIHtcbiAgICBleHByZXNzaW9uID0gcmVhbERlbHRhID09PSBNYXRoLmFicyhkZWx0YSk7XG4gIH1cbiAgdGhpcy5hc3NlcnQoXG4gICAgZXhwcmVzc2lvbixcbiAgICBcImV4cGVjdGVkIFwiICsgbXNnT2JqICsgXCIgdG8gXCIgKyBiZWhhdmlvciArIFwiIGJ5IFwiICsgZGVsdGEsXG4gICAgXCJleHBlY3RlZCBcIiArIG1zZ09iaiArIFwiIHRvIG5vdCBcIiArIGJlaGF2aW9yICsgXCIgYnkgXCIgKyBkZWx0YVxuICApO1xufVxuX19uYW1lKGFzc2VydERlbHRhLCBcImFzc2VydERlbHRhXCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImJ5XCIsIGFzc2VydERlbHRhKTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcImV4dGVuc2libGVcIiwgZnVuY3Rpb24oKSB7XG4gIHZhciBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKTtcbiAgdmFyIGlzRXh0ZW5zaWJsZSA9IG9iaiA9PT0gT2JqZWN0KG9iaikgJiYgT2JqZWN0LmlzRXh0ZW5zaWJsZShvYmopO1xuICB0aGlzLmFzc2VydChcbiAgICBpc0V4dGVuc2libGUsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIGV4dGVuc2libGVcIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGJlIGV4dGVuc2libGVcIlxuICApO1xufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJzZWFsZWRcIiwgZnVuY3Rpb24oKSB7XG4gIHZhciBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKTtcbiAgdmFyIGlzU2VhbGVkID0gb2JqID09PSBPYmplY3Qob2JqKSA/IE9iamVjdC5pc1NlYWxlZChvYmopIDogdHJ1ZTtcbiAgdGhpcy5hc3NlcnQoXG4gICAgaXNTZWFsZWQsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIHNlYWxlZFwiLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgYmUgc2VhbGVkXCJcbiAgKTtcbn0pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwiZnJvemVuXCIsIGZ1bmN0aW9uKCkge1xuICB2YXIgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIik7XG4gIHZhciBpc0Zyb3plbiA9IG9iaiA9PT0gT2JqZWN0KG9iaikgPyBPYmplY3QuaXNGcm96ZW4ob2JqKSA6IHRydWU7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIGlzRnJvemVuLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBmcm96ZW5cIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGJlIGZyb3plblwiXG4gICk7XG59KTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcImZpbml0ZVwiLCBmdW5jdGlvbihtc2cpIHtcbiAgdmFyIG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpO1xuICB0aGlzLmFzc2VydChcbiAgICB0eXBlb2Ygb2JqID09PSBcIm51bWJlclwiICYmIGlzRmluaXRlKG9iaiksXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIGEgZmluaXRlIG51bWJlclwiLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgYmUgYSBmaW5pdGUgbnVtYmVyXCJcbiAgKTtcbn0pO1xuXG4vLyBsaWIvY2hhaS9pbnRlcmZhY2UvZXhwZWN0LmpzXG5mdW5jdGlvbiBleHBlY3QodmFsLCBtZXNzYWdlKSB7XG4gIHJldHVybiBuZXcgQXNzZXJ0aW9uKHZhbCwgbWVzc2FnZSk7XG59XG5fX25hbWUoZXhwZWN0LCBcImV4cGVjdFwiKTtcbmV4cGVjdC5mYWlsID0gZnVuY3Rpb24oYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgb3BlcmF0b3IpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgbWVzc2FnZSA9IGFjdHVhbDtcbiAgICBhY3R1YWwgPSB2b2lkIDA7XG4gIH1cbiAgbWVzc2FnZSA9IG1lc3NhZ2UgfHwgXCJleHBlY3QuZmFpbCgpXCI7XG4gIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihtZXNzYWdlLCB7XG4gICAgYWN0dWFsLFxuICAgIGV4cGVjdGVkLFxuICAgIG9wZXJhdG9yXG4gIH0sIGV4cGVjdC5mYWlsKTtcbn07XG5cbi8vIGxpYi9jaGFpL2ludGVyZmFjZS9zaG91bGQuanNcbnZhciBzaG91bGRfZXhwb3J0cyA9IHt9O1xuX19leHBvcnQoc2hvdWxkX2V4cG9ydHMsIHtcbiAgU2hvdWxkOiAoKSA9PiBTaG91bGQsXG4gIHNob3VsZDogKCkgPT4gc2hvdWxkXG59KTtcbmZ1bmN0aW9uIGxvYWRTaG91bGQoKSB7XG4gIGZ1bmN0aW9uIHNob3VsZEdldHRlcigpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFN0cmluZyB8fCB0aGlzIGluc3RhbmNlb2YgTnVtYmVyIHx8IHRoaXMgaW5zdGFuY2VvZiBCb29sZWFuIHx8IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0aGlzIGluc3RhbmNlb2YgU3ltYm9sIHx8IHR5cGVvZiBCaWdJbnQgPT09IFwiZnVuY3Rpb25cIiAmJiB0aGlzIGluc3RhbmNlb2YgQmlnSW50KSB7XG4gICAgICByZXR1cm4gbmV3IEFzc2VydGlvbih0aGlzLnZhbHVlT2YoKSwgbnVsbCwgc2hvdWxkR2V0dGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBBc3NlcnRpb24odGhpcywgbnVsbCwgc2hvdWxkR2V0dGVyKTtcbiAgfVxuICBfX25hbWUoc2hvdWxkR2V0dGVyLCBcInNob3VsZEdldHRlclwiKTtcbiAgZnVuY3Rpb24gc2hvdWxkU2V0dGVyKHZhbHVlKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwic2hvdWxkXCIsIHtcbiAgICAgIHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH1cbiAgX19uYW1lKHNob3VsZFNldHRlciwgXCJzaG91bGRTZXR0ZXJcIik7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPYmplY3QucHJvdG90eXBlLCBcInNob3VsZFwiLCB7XG4gICAgc2V0OiBzaG91bGRTZXR0ZXIsXG4gICAgZ2V0OiBzaG91bGRHZXR0ZXIsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xuICB2YXIgc2hvdWxkMiA9IHt9O1xuICBzaG91bGQyLmZhaWwgPSBmdW5jdGlvbihhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCBvcGVyYXRvcikge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgICAgbWVzc2FnZSA9IGFjdHVhbDtcbiAgICAgIGFjdHVhbCA9IHZvaWQgMDtcbiAgICB9XG4gICAgbWVzc2FnZSA9IG1lc3NhZ2UgfHwgXCJzaG91bGQuZmFpbCgpXCI7XG4gICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKG1lc3NhZ2UsIHtcbiAgICAgIGFjdHVhbCxcbiAgICAgIGV4cGVjdGVkLFxuICAgICAgb3BlcmF0b3JcbiAgICB9LCBzaG91bGQyLmZhaWwpO1xuICB9O1xuICBzaG91bGQyLmVxdWFsID0gZnVuY3Rpb24oYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICAgIG5ldyBBc3NlcnRpb24oYWN0dWFsLCBtZXNzYWdlKS50by5lcXVhbChleHBlY3RlZCk7XG4gIH07XG4gIHNob3VsZDIuVGhyb3cgPSBmdW5jdGlvbihmbiwgZXJydCwgZXJycywgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihmbiwgbXNnKS50by5UaHJvdyhlcnJ0LCBlcnJzKTtcbiAgfTtcbiAgc2hvdWxkMi5leGlzdCA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZykudG8uZXhpc3Q7XG4gIH07XG4gIHNob3VsZDIubm90ID0ge307XG4gIHNob3VsZDIubm90LmVxdWFsID0gZnVuY3Rpb24oYWN0dWFsLCBleHBlY3RlZCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihhY3R1YWwsIG1zZykudG8ubm90LmVxdWFsKGV4cGVjdGVkKTtcbiAgfTtcbiAgc2hvdWxkMi5ub3QuVGhyb3cgPSBmdW5jdGlvbihmbiwgZXJydCwgZXJycywgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbihmbiwgbXNnKS50by5ub3QuVGhyb3coZXJydCwgZXJycyk7XG4gIH07XG4gIHNob3VsZDIubm90LmV4aXN0ID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnKS50by5ub3QuZXhpc3Q7XG4gIH07XG4gIHNob3VsZDJbXCJ0aHJvd1wiXSA9IHNob3VsZDJbXCJUaHJvd1wiXTtcbiAgc2hvdWxkMi5ub3RbXCJ0aHJvd1wiXSA9IHNob3VsZDIubm90W1wiVGhyb3dcIl07XG4gIHJldHVybiBzaG91bGQyO1xufVxuX19uYW1lKGxvYWRTaG91bGQsIFwibG9hZFNob3VsZFwiKTtcbnZhciBzaG91bGQgPSBsb2FkU2hvdWxkO1xudmFyIFNob3VsZCA9IGxvYWRTaG91bGQ7XG5cbi8vIGxpYi9jaGFpL2ludGVyZmFjZS9hc3NlcnQuanNcbmZ1bmN0aW9uIGFzc2VydChleHByZXNzLCBlcnJtc2cpIHtcbiAgdmFyIHRlc3QyID0gbmV3IEFzc2VydGlvbihudWxsLCBudWxsLCBhc3NlcnQsIHRydWUpO1xuICB0ZXN0Mi5hc3NlcnQoXG4gICAgZXhwcmVzcyxcbiAgICBlcnJtc2csXG4gICAgXCJbIG5lZ2F0aW9uIG1lc3NhZ2UgdW5hdmFpbGFibGUgXVwiXG4gICk7XG59XG5fX25hbWUoYXNzZXJ0LCBcImFzc2VydFwiKTtcbmFzc2VydC5mYWlsID0gZnVuY3Rpb24oYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgb3BlcmF0b3IpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgbWVzc2FnZSA9IGFjdHVhbDtcbiAgICBhY3R1YWwgPSB2b2lkIDA7XG4gIH1cbiAgbWVzc2FnZSA9IG1lc3NhZ2UgfHwgXCJhc3NlcnQuZmFpbCgpXCI7XG4gIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihtZXNzYWdlLCB7XG4gICAgYWN0dWFsLFxuICAgIGV4cGVjdGVkLFxuICAgIG9wZXJhdG9yXG4gIH0sIGFzc2VydC5mYWlsKTtcbn07XG5hc3NlcnQuaXNPayA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc09rLCB0cnVlKS5pcy5vaztcbn07XG5hc3NlcnQuaXNOb3RPayA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc05vdE9rLCB0cnVlKS5pcy5ub3Qub2s7XG59O1xuYXNzZXJ0LmVxdWFsID0gZnVuY3Rpb24oYWN0LCBleHAsIG1zZykge1xuICB2YXIgdGVzdDIgPSBuZXcgQXNzZXJ0aW9uKGFjdCwgbXNnLCBhc3NlcnQuZXF1YWwsIHRydWUpO1xuICB0ZXN0Mi5hc3NlcnQoXG4gICAgZXhwID09IGZsYWcodGVzdDIsIFwib2JqZWN0XCIpLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBlcXVhbCAje2V4cH1cIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGVxdWFsICN7YWN0fVwiLFxuICAgIGV4cCxcbiAgICBhY3QsXG4gICAgdHJ1ZVxuICApO1xufTtcbmFzc2VydC5ub3RFcXVhbCA9IGZ1bmN0aW9uKGFjdCwgZXhwLCBtc2cpIHtcbiAgdmFyIHRlc3QyID0gbmV3IEFzc2VydGlvbihhY3QsIG1zZywgYXNzZXJ0Lm5vdEVxdWFsLCB0cnVlKTtcbiAgdGVzdDIuYXNzZXJ0KFxuICAgIGV4cCAhPSBmbGFnKHRlc3QyLCBcIm9iamVjdFwiKSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGVxdWFsICN7ZXhwfVwiLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBlcXVhbCAje2FjdH1cIixcbiAgICBleHAsXG4gICAgYWN0LFxuICAgIHRydWVcbiAgKTtcbn07XG5hc3NlcnQuc3RyaWN0RXF1YWwgPSBmdW5jdGlvbihhY3QsIGV4cCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oYWN0LCBtc2csIGFzc2VydC5zdHJpY3RFcXVhbCwgdHJ1ZSkudG8uZXF1YWwoZXhwKTtcbn07XG5hc3NlcnQubm90U3RyaWN0RXF1YWwgPSBmdW5jdGlvbihhY3QsIGV4cCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oYWN0LCBtc2csIGFzc2VydC5ub3RTdHJpY3RFcXVhbCwgdHJ1ZSkudG8ubm90LmVxdWFsKGV4cCk7XG59O1xuYXNzZXJ0LmRlZXBFcXVhbCA9IGFzc2VydC5kZWVwU3RyaWN0RXF1YWwgPSBmdW5jdGlvbihhY3QsIGV4cCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oYWN0LCBtc2csIGFzc2VydC5kZWVwRXF1YWwsIHRydWUpLnRvLmVxbChleHApO1xufTtcbmFzc2VydC5ub3REZWVwRXF1YWwgPSBmdW5jdGlvbihhY3QsIGV4cCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oYWN0LCBtc2csIGFzc2VydC5ub3REZWVwRXF1YWwsIHRydWUpLnRvLm5vdC5lcWwoZXhwKTtcbn07XG5hc3NlcnQuaXNBYm92ZSA9IGZ1bmN0aW9uKHZhbCwgYWJ2LCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzQWJvdmUsIHRydWUpLnRvLmJlLmFib3ZlKGFidik7XG59O1xuYXNzZXJ0LmlzQXRMZWFzdCA9IGZ1bmN0aW9uKHZhbCwgYXRsc3QsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNBdExlYXN0LCB0cnVlKS50by5iZS5sZWFzdChhdGxzdCk7XG59O1xuYXNzZXJ0LmlzQmVsb3cgPSBmdW5jdGlvbih2YWwsIGJsdywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc0JlbG93LCB0cnVlKS50by5iZS5iZWxvdyhibHcpO1xufTtcbmFzc2VydC5pc0F0TW9zdCA9IGZ1bmN0aW9uKHZhbCwgYXRtc3QsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNBdE1vc3QsIHRydWUpLnRvLmJlLm1vc3QoYXRtc3QpO1xufTtcbmFzc2VydC5pc1RydWUgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNUcnVlLCB0cnVlKS5pc1tcInRydWVcIl07XG59O1xuYXNzZXJ0LmlzTm90VHJ1ZSA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc05vdFRydWUsIHRydWUpLnRvLm5vdC5lcXVhbCh0cnVlKTtcbn07XG5hc3NlcnQuaXNGYWxzZSA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc0ZhbHNlLCB0cnVlKS5pc1tcImZhbHNlXCJdO1xufTtcbmFzc2VydC5pc05vdEZhbHNlID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTm90RmFsc2UsIHRydWUpLnRvLm5vdC5lcXVhbChmYWxzZSk7XG59O1xuYXNzZXJ0LmlzTnVsbCA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc051bGwsIHRydWUpLnRvLmVxdWFsKG51bGwpO1xufTtcbmFzc2VydC5pc05vdE51bGwgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOb3ROdWxsLCB0cnVlKS50by5ub3QuZXF1YWwobnVsbCk7XG59O1xuYXNzZXJ0LmlzTmFOID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTmFOLCB0cnVlKS50by5iZS5OYU47XG59O1xuYXNzZXJ0LmlzTm90TmFOID0gZnVuY3Rpb24odmFsdWUsIG1lc3NhZ2UpIHtcbiAgbmV3IEFzc2VydGlvbih2YWx1ZSwgbWVzc2FnZSwgYXNzZXJ0LmlzTm90TmFOLCB0cnVlKS5ub3QudG8uYmUuTmFOO1xufTtcbmFzc2VydC5leGlzdHMgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuZXhpc3RzLCB0cnVlKS50by5leGlzdDtcbn07XG5hc3NlcnQubm90RXhpc3RzID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0Lm5vdEV4aXN0cywgdHJ1ZSkudG8ubm90LmV4aXN0O1xufTtcbmFzc2VydC5pc1VuZGVmaW5lZCA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc1VuZGVmaW5lZCwgdHJ1ZSkudG8uZXF1YWwodm9pZCAwKTtcbn07XG5hc3NlcnQuaXNEZWZpbmVkID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzRGVmaW5lZCwgdHJ1ZSkudG8ubm90LmVxdWFsKHZvaWQgMCk7XG59O1xuYXNzZXJ0LmlzQ2FsbGFibGUgPSBmdW5jdGlvbih2YWx1ZSwgbWVzc2FnZSkge1xuICBuZXcgQXNzZXJ0aW9uKHZhbHVlLCBtZXNzYWdlLCBhc3NlcnQuaXNDYWxsYWJsZSwgdHJ1ZSkuaXMuY2FsbGFibGU7XG59O1xuYXNzZXJ0LmlzTm90Q2FsbGFibGUgPSBmdW5jdGlvbih2YWx1ZSwgbWVzc2FnZSkge1xuICBuZXcgQXNzZXJ0aW9uKHZhbHVlLCBtZXNzYWdlLCBhc3NlcnQuaXNOb3RDYWxsYWJsZSwgdHJ1ZSkuaXMubm90LmNhbGxhYmxlO1xufTtcbmFzc2VydC5pc09iamVjdCA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc09iamVjdCwgdHJ1ZSkudG8uYmUuYShcIm9iamVjdFwiKTtcbn07XG5hc3NlcnQuaXNOb3RPYmplY3QgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOb3RPYmplY3QsIHRydWUpLnRvLm5vdC5iZS5hKFwib2JqZWN0XCIpO1xufTtcbmFzc2VydC5pc0FycmF5ID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzQXJyYXksIHRydWUpLnRvLmJlLmFuKFwiYXJyYXlcIik7XG59O1xuYXNzZXJ0LmlzTm90QXJyYXkgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOb3RBcnJheSwgdHJ1ZSkudG8ubm90LmJlLmFuKFwiYXJyYXlcIik7XG59O1xuYXNzZXJ0LmlzU3RyaW5nID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzU3RyaW5nLCB0cnVlKS50by5iZS5hKFwic3RyaW5nXCIpO1xufTtcbmFzc2VydC5pc05vdFN0cmluZyA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc05vdFN0cmluZywgdHJ1ZSkudG8ubm90LmJlLmEoXCJzdHJpbmdcIik7XG59O1xuYXNzZXJ0LmlzTnVtYmVyID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTnVtYmVyLCB0cnVlKS50by5iZS5hKFwibnVtYmVyXCIpO1xufTtcbmFzc2VydC5pc05vdE51bWJlciA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc05vdE51bWJlciwgdHJ1ZSkudG8ubm90LmJlLmEoXCJudW1iZXJcIik7XG59O1xuYXNzZXJ0LmlzTnVtZXJpYyA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc051bWVyaWMsIHRydWUpLmlzLm51bWVyaWM7XG59O1xuYXNzZXJ0LmlzTm90TnVtZXJpYyA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc05vdE51bWVyaWMsIHRydWUpLmlzLm5vdC5udW1lcmljO1xufTtcbmFzc2VydC5pc0Zpbml0ZSA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc0Zpbml0ZSwgdHJ1ZSkudG8uYmUuZmluaXRlO1xufTtcbmFzc2VydC5pc0Jvb2xlYW4gPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNCb29sZWFuLCB0cnVlKS50by5iZS5hKFwiYm9vbGVhblwiKTtcbn07XG5hc3NlcnQuaXNOb3RCb29sZWFuID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTm90Qm9vbGVhbiwgdHJ1ZSkudG8ubm90LmJlLmEoXCJib29sZWFuXCIpO1xufTtcbmFzc2VydC50eXBlT2YgPSBmdW5jdGlvbih2YWwsIHR5cGUzLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LnR5cGVPZiwgdHJ1ZSkudG8uYmUuYSh0eXBlMyk7XG59O1xuYXNzZXJ0Lm5vdFR5cGVPZiA9IGZ1bmN0aW9uKHZhbHVlLCB0eXBlMywgbWVzc2FnZSkge1xuICBuZXcgQXNzZXJ0aW9uKHZhbHVlLCBtZXNzYWdlLCBhc3NlcnQubm90VHlwZU9mLCB0cnVlKS50by5ub3QuYmUuYSh0eXBlMyk7XG59O1xuYXNzZXJ0Lmluc3RhbmNlT2YgPSBmdW5jdGlvbih2YWwsIHR5cGUzLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0Lmluc3RhbmNlT2YsIHRydWUpLnRvLmJlLmluc3RhbmNlT2YodHlwZTMpO1xufTtcbmFzc2VydC5ub3RJbnN0YW5jZU9mID0gZnVuY3Rpb24odmFsLCB0eXBlMywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5ub3RJbnN0YW5jZU9mLCB0cnVlKS50by5ub3QuYmUuaW5zdGFuY2VPZih0eXBlMyk7XG59O1xuYXNzZXJ0LmluY2x1ZGUgPSBmdW5jdGlvbihleHAsIGluYywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5pbmNsdWRlLCB0cnVlKS5pbmNsdWRlKGluYyk7XG59O1xuYXNzZXJ0Lm5vdEluY2x1ZGUgPSBmdW5jdGlvbihleHAsIGluYywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5ub3RJbmNsdWRlLCB0cnVlKS5ub3QuaW5jbHVkZShpbmMpO1xufTtcbmFzc2VydC5kZWVwSW5jbHVkZSA9IGZ1bmN0aW9uKGV4cCwgaW5jLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0LmRlZXBJbmNsdWRlLCB0cnVlKS5kZWVwLmluY2x1ZGUoaW5jKTtcbn07XG5hc3NlcnQubm90RGVlcEluY2x1ZGUgPSBmdW5jdGlvbihleHAsIGluYywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5ub3REZWVwSW5jbHVkZSwgdHJ1ZSkubm90LmRlZXAuaW5jbHVkZShpbmMpO1xufTtcbmFzc2VydC5uZXN0ZWRJbmNsdWRlID0gZnVuY3Rpb24oZXhwLCBpbmMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQubmVzdGVkSW5jbHVkZSwgdHJ1ZSkubmVzdGVkLmluY2x1ZGUoaW5jKTtcbn07XG5hc3NlcnQubm90TmVzdGVkSW5jbHVkZSA9IGZ1bmN0aW9uKGV4cCwgaW5jLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0Lm5vdE5lc3RlZEluY2x1ZGUsIHRydWUpLm5vdC5uZXN0ZWQuaW5jbHVkZShpbmMpO1xufTtcbmFzc2VydC5kZWVwTmVzdGVkSW5jbHVkZSA9IGZ1bmN0aW9uKGV4cCwgaW5jLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0LmRlZXBOZXN0ZWRJbmNsdWRlLCB0cnVlKS5kZWVwLm5lc3RlZC5pbmNsdWRlKGluYyk7XG59O1xuYXNzZXJ0Lm5vdERlZXBOZXN0ZWRJbmNsdWRlID0gZnVuY3Rpb24oZXhwLCBpbmMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQubm90RGVlcE5lc3RlZEluY2x1ZGUsIHRydWUpLm5vdC5kZWVwLm5lc3RlZC5pbmNsdWRlKGluYyk7XG59O1xuYXNzZXJ0Lm93bkluY2x1ZGUgPSBmdW5jdGlvbihleHAsIGluYywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5vd25JbmNsdWRlLCB0cnVlKS5vd24uaW5jbHVkZShpbmMpO1xufTtcbmFzc2VydC5ub3RPd25JbmNsdWRlID0gZnVuY3Rpb24oZXhwLCBpbmMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQubm90T3duSW5jbHVkZSwgdHJ1ZSkubm90Lm93bi5pbmNsdWRlKGluYyk7XG59O1xuYXNzZXJ0LmRlZXBPd25JbmNsdWRlID0gZnVuY3Rpb24oZXhwLCBpbmMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQuZGVlcE93bkluY2x1ZGUsIHRydWUpLmRlZXAub3duLmluY2x1ZGUoaW5jKTtcbn07XG5hc3NlcnQubm90RGVlcE93bkluY2x1ZGUgPSBmdW5jdGlvbihleHAsIGluYywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5ub3REZWVwT3duSW5jbHVkZSwgdHJ1ZSkubm90LmRlZXAub3duLmluY2x1ZGUoaW5jKTtcbn07XG5hc3NlcnQubWF0Y2ggPSBmdW5jdGlvbihleHAsIHJlLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0Lm1hdGNoLCB0cnVlKS50by5tYXRjaChyZSk7XG59O1xuYXNzZXJ0Lm5vdE1hdGNoID0gZnVuY3Rpb24oZXhwLCByZSwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5ub3RNYXRjaCwgdHJ1ZSkudG8ubm90Lm1hdGNoKHJlKTtcbn07XG5hc3NlcnQucHJvcGVydHkgPSBmdW5jdGlvbihvYmosIHByb3AsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQucHJvcGVydHksIHRydWUpLnRvLmhhdmUucHJvcGVydHkocHJvcCk7XG59O1xuYXNzZXJ0Lm5vdFByb3BlcnR5ID0gZnVuY3Rpb24ob2JqLCBwcm9wLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0Lm5vdFByb3BlcnR5LCB0cnVlKS50by5ub3QuaGF2ZS5wcm9wZXJ0eShwcm9wKTtcbn07XG5hc3NlcnQucHJvcGVydHlWYWwgPSBmdW5jdGlvbihvYmosIHByb3AsIHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5wcm9wZXJ0eVZhbCwgdHJ1ZSkudG8uaGF2ZS5wcm9wZXJ0eShwcm9wLCB2YWwpO1xufTtcbmFzc2VydC5ub3RQcm9wZXJ0eVZhbCA9IGZ1bmN0aW9uKG9iaiwgcHJvcCwgdmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0Lm5vdFByb3BlcnR5VmFsLCB0cnVlKS50by5ub3QuaGF2ZS5wcm9wZXJ0eShwcm9wLCB2YWwpO1xufTtcbmFzc2VydC5kZWVwUHJvcGVydHlWYWwgPSBmdW5jdGlvbihvYmosIHByb3AsIHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5kZWVwUHJvcGVydHlWYWwsIHRydWUpLnRvLmhhdmUuZGVlcC5wcm9wZXJ0eShwcm9wLCB2YWwpO1xufTtcbmFzc2VydC5ub3REZWVwUHJvcGVydHlWYWwgPSBmdW5jdGlvbihvYmosIHByb3AsIHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5ub3REZWVwUHJvcGVydHlWYWwsIHRydWUpLnRvLm5vdC5oYXZlLmRlZXAucHJvcGVydHkocHJvcCwgdmFsKTtcbn07XG5hc3NlcnQub3duUHJvcGVydHkgPSBmdW5jdGlvbihvYmosIHByb3AsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQub3duUHJvcGVydHksIHRydWUpLnRvLmhhdmUub3duLnByb3BlcnR5KHByb3ApO1xufTtcbmFzc2VydC5ub3RPd25Qcm9wZXJ0eSA9IGZ1bmN0aW9uKG9iaiwgcHJvcCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5ub3RPd25Qcm9wZXJ0eSwgdHJ1ZSkudG8ubm90LmhhdmUub3duLnByb3BlcnR5KHByb3ApO1xufTtcbmFzc2VydC5vd25Qcm9wZXJ0eVZhbCA9IGZ1bmN0aW9uKG9iaiwgcHJvcCwgdmFsdWUsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQub3duUHJvcGVydHlWYWwsIHRydWUpLnRvLmhhdmUub3duLnByb3BlcnR5KHByb3AsIHZhbHVlKTtcbn07XG5hc3NlcnQubm90T3duUHJvcGVydHlWYWwgPSBmdW5jdGlvbihvYmosIHByb3AsIHZhbHVlLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0Lm5vdE93blByb3BlcnR5VmFsLCB0cnVlKS50by5ub3QuaGF2ZS5vd24ucHJvcGVydHkocHJvcCwgdmFsdWUpO1xufTtcbmFzc2VydC5kZWVwT3duUHJvcGVydHlWYWwgPSBmdW5jdGlvbihvYmosIHByb3AsIHZhbHVlLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmRlZXBPd25Qcm9wZXJ0eVZhbCwgdHJ1ZSkudG8uaGF2ZS5kZWVwLm93bi5wcm9wZXJ0eShwcm9wLCB2YWx1ZSk7XG59O1xuYXNzZXJ0Lm5vdERlZXBPd25Qcm9wZXJ0eVZhbCA9IGZ1bmN0aW9uKG9iaiwgcHJvcCwgdmFsdWUsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQubm90RGVlcE93blByb3BlcnR5VmFsLCB0cnVlKS50by5ub3QuaGF2ZS5kZWVwLm93bi5wcm9wZXJ0eShwcm9wLCB2YWx1ZSk7XG59O1xuYXNzZXJ0Lm5lc3RlZFByb3BlcnR5ID0gZnVuY3Rpb24ob2JqLCBwcm9wLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0Lm5lc3RlZFByb3BlcnR5LCB0cnVlKS50by5oYXZlLm5lc3RlZC5wcm9wZXJ0eShwcm9wKTtcbn07XG5hc3NlcnQubm90TmVzdGVkUHJvcGVydHkgPSBmdW5jdGlvbihvYmosIHByb3AsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQubm90TmVzdGVkUHJvcGVydHksIHRydWUpLnRvLm5vdC5oYXZlLm5lc3RlZC5wcm9wZXJ0eShwcm9wKTtcbn07XG5hc3NlcnQubmVzdGVkUHJvcGVydHlWYWwgPSBmdW5jdGlvbihvYmosIHByb3AsIHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5uZXN0ZWRQcm9wZXJ0eVZhbCwgdHJ1ZSkudG8uaGF2ZS5uZXN0ZWQucHJvcGVydHkocHJvcCwgdmFsKTtcbn07XG5hc3NlcnQubm90TmVzdGVkUHJvcGVydHlWYWwgPSBmdW5jdGlvbihvYmosIHByb3AsIHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5ub3ROZXN0ZWRQcm9wZXJ0eVZhbCwgdHJ1ZSkudG8ubm90LmhhdmUubmVzdGVkLnByb3BlcnR5KHByb3AsIHZhbCk7XG59O1xuYXNzZXJ0LmRlZXBOZXN0ZWRQcm9wZXJ0eVZhbCA9IGZ1bmN0aW9uKG9iaiwgcHJvcCwgdmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmRlZXBOZXN0ZWRQcm9wZXJ0eVZhbCwgdHJ1ZSkudG8uaGF2ZS5kZWVwLm5lc3RlZC5wcm9wZXJ0eShwcm9wLCB2YWwpO1xufTtcbmFzc2VydC5ub3REZWVwTmVzdGVkUHJvcGVydHlWYWwgPSBmdW5jdGlvbihvYmosIHByb3AsIHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5ub3REZWVwTmVzdGVkUHJvcGVydHlWYWwsIHRydWUpLnRvLm5vdC5oYXZlLmRlZXAubmVzdGVkLnByb3BlcnR5KHByb3AsIHZhbCk7XG59O1xuYXNzZXJ0Lmxlbmd0aE9mID0gZnVuY3Rpb24oZXhwLCBsZW4sIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQubGVuZ3RoT2YsIHRydWUpLnRvLmhhdmUubGVuZ3RoT2YobGVuKTtcbn07XG5hc3NlcnQuaGFzQW55S2V5cyA9IGZ1bmN0aW9uKG9iaiwga2V5cywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5oYXNBbnlLZXlzLCB0cnVlKS50by5oYXZlLmFueS5rZXlzKGtleXMpO1xufTtcbmFzc2VydC5oYXNBbGxLZXlzID0gZnVuY3Rpb24ob2JqLCBrZXlzLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0Lmhhc0FsbEtleXMsIHRydWUpLnRvLmhhdmUuYWxsLmtleXMoa2V5cyk7XG59O1xuYXNzZXJ0LmNvbnRhaW5zQWxsS2V5cyA9IGZ1bmN0aW9uKG9iaiwga2V5cywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5jb250YWluc0FsbEtleXMsIHRydWUpLnRvLmNvbnRhaW4uYWxsLmtleXMoa2V5cyk7XG59O1xuYXNzZXJ0LmRvZXNOb3RIYXZlQW55S2V5cyA9IGZ1bmN0aW9uKG9iaiwga2V5cywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5kb2VzTm90SGF2ZUFueUtleXMsIHRydWUpLnRvLm5vdC5oYXZlLmFueS5rZXlzKGtleXMpO1xufTtcbmFzc2VydC5kb2VzTm90SGF2ZUFsbEtleXMgPSBmdW5jdGlvbihvYmosIGtleXMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuZG9lc05vdEhhdmVBbGxLZXlzLCB0cnVlKS50by5ub3QuaGF2ZS5hbGwua2V5cyhrZXlzKTtcbn07XG5hc3NlcnQuaGFzQW55RGVlcEtleXMgPSBmdW5jdGlvbihvYmosIGtleXMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuaGFzQW55RGVlcEtleXMsIHRydWUpLnRvLmhhdmUuYW55LmRlZXAua2V5cyhrZXlzKTtcbn07XG5hc3NlcnQuaGFzQWxsRGVlcEtleXMgPSBmdW5jdGlvbihvYmosIGtleXMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuaGFzQWxsRGVlcEtleXMsIHRydWUpLnRvLmhhdmUuYWxsLmRlZXAua2V5cyhrZXlzKTtcbn07XG5hc3NlcnQuY29udGFpbnNBbGxEZWVwS2V5cyA9IGZ1bmN0aW9uKG9iaiwga2V5cywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5jb250YWluc0FsbERlZXBLZXlzLCB0cnVlKS50by5jb250YWluLmFsbC5kZWVwLmtleXMoa2V5cyk7XG59O1xuYXNzZXJ0LmRvZXNOb3RIYXZlQW55RGVlcEtleXMgPSBmdW5jdGlvbihvYmosIGtleXMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuZG9lc05vdEhhdmVBbnlEZWVwS2V5cywgdHJ1ZSkudG8ubm90LmhhdmUuYW55LmRlZXAua2V5cyhrZXlzKTtcbn07XG5hc3NlcnQuZG9lc05vdEhhdmVBbGxEZWVwS2V5cyA9IGZ1bmN0aW9uKG9iaiwga2V5cywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5kb2VzTm90SGF2ZUFsbERlZXBLZXlzLCB0cnVlKS50by5ub3QuaGF2ZS5hbGwuZGVlcC5rZXlzKGtleXMpO1xufTtcbmFzc2VydC50aHJvd3MgPSBmdW5jdGlvbihmbiwgZXJyb3JMaWtlLCBlcnJNc2dNYXRjaGVyLCBtc2cpIHtcbiAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiBlcnJvckxpa2UgfHwgZXJyb3JMaWtlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgZXJyTXNnTWF0Y2hlciA9IGVycm9yTGlrZTtcbiAgICBlcnJvckxpa2UgPSBudWxsO1xuICB9XG4gIHZhciBhc3NlcnRFcnIgPSBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC50aHJvd3MsIHRydWUpLnRvLnRocm93KGVycm9yTGlrZSwgZXJyTXNnTWF0Y2hlcik7XG4gIHJldHVybiBmbGFnKGFzc2VydEVyciwgXCJvYmplY3RcIik7XG59O1xuYXNzZXJ0LmRvZXNOb3RUaHJvdyA9IGZ1bmN0aW9uKGZuLCBlcnJvckxpa2UsIGVyck1zZ01hdGNoZXIsIG1lc3NhZ2UpIHtcbiAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiBlcnJvckxpa2UgfHwgZXJyb3JMaWtlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgZXJyTXNnTWF0Y2hlciA9IGVycm9yTGlrZTtcbiAgICBlcnJvckxpa2UgPSBudWxsO1xuICB9XG4gIG5ldyBBc3NlcnRpb24oZm4sIG1lc3NhZ2UsIGFzc2VydC5kb2VzTm90VGhyb3csIHRydWUpLnRvLm5vdC50aHJvdyhlcnJvckxpa2UsIGVyck1zZ01hdGNoZXIpO1xufTtcbmFzc2VydC5vcGVyYXRvciA9IGZ1bmN0aW9uKHZhbCwgb3BlcmF0b3IsIHZhbDIsIG1zZykge1xuICB2YXIgb2s7XG4gIHN3aXRjaCAob3BlcmF0b3IpIHtcbiAgICBjYXNlIFwiPT1cIjpcbiAgICAgIG9rID0gdmFsID09IHZhbDI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiPT09XCI6XG4gICAgICBvayA9IHZhbCA9PT0gdmFsMjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCI+XCI6XG4gICAgICBvayA9IHZhbCA+IHZhbDI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiPj1cIjpcbiAgICAgIG9rID0gdmFsID49IHZhbDI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiPFwiOlxuICAgICAgb2sgPSB2YWwgPCB2YWwyO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIjw9XCI6XG4gICAgICBvayA9IHZhbCA8PSB2YWwyO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIiE9XCI6XG4gICAgICBvayA9IHZhbCAhPSB2YWwyO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIiE9PVwiOlxuICAgICAgb2sgPSB2YWwgIT09IHZhbDI7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgbXNnID0gbXNnID8gbXNnICsgXCI6IFwiIDogbXNnO1xuICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgICAgICBtc2cgKyAnSW52YWxpZCBvcGVyYXRvciBcIicgKyBvcGVyYXRvciArICdcIicsXG4gICAgICAgIHZvaWQgMCxcbiAgICAgICAgYXNzZXJ0Lm9wZXJhdG9yXG4gICAgICApO1xuICB9XG4gIHZhciB0ZXN0MiA9IG5ldyBBc3NlcnRpb24ob2ssIG1zZywgYXNzZXJ0Lm9wZXJhdG9yLCB0cnVlKTtcbiAgdGVzdDIuYXNzZXJ0KFxuICAgIHRydWUgPT09IGZsYWcodGVzdDIsIFwib2JqZWN0XCIpLFxuICAgIFwiZXhwZWN0ZWQgXCIgKyBpbnNwZWN0Mih2YWwpICsgXCIgdG8gYmUgXCIgKyBvcGVyYXRvciArIFwiIFwiICsgaW5zcGVjdDIodmFsMiksXG4gICAgXCJleHBlY3RlZCBcIiArIGluc3BlY3QyKHZhbCkgKyBcIiB0byBub3QgYmUgXCIgKyBvcGVyYXRvciArIFwiIFwiICsgaW5zcGVjdDIodmFsMilcbiAgKTtcbn07XG5hc3NlcnQuY2xvc2VUbyA9IGZ1bmN0aW9uKGFjdCwgZXhwLCBkZWx0YSwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oYWN0LCBtc2csIGFzc2VydC5jbG9zZVRvLCB0cnVlKS50by5iZS5jbG9zZVRvKGV4cCwgZGVsdGEpO1xufTtcbmFzc2VydC5hcHByb3hpbWF0ZWx5ID0gZnVuY3Rpb24oYWN0LCBleHAsIGRlbHRhLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihhY3QsIG1zZywgYXNzZXJ0LmFwcHJveGltYXRlbHksIHRydWUpLnRvLmJlLmFwcHJveGltYXRlbHkoZXhwLCBkZWx0YSk7XG59O1xuYXNzZXJ0LnNhbWVNZW1iZXJzID0gZnVuY3Rpb24oc2V0MSwgc2V0MiwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oc2V0MSwgbXNnLCBhc3NlcnQuc2FtZU1lbWJlcnMsIHRydWUpLnRvLmhhdmUuc2FtZS5tZW1iZXJzKHNldDIpO1xufTtcbmFzc2VydC5ub3RTYW1lTWVtYmVycyA9IGZ1bmN0aW9uKHNldDEsIHNldDIsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHNldDEsIG1zZywgYXNzZXJ0Lm5vdFNhbWVNZW1iZXJzLCB0cnVlKS50by5ub3QuaGF2ZS5zYW1lLm1lbWJlcnMoc2V0Mik7XG59O1xuYXNzZXJ0LnNhbWVEZWVwTWVtYmVycyA9IGZ1bmN0aW9uKHNldDEsIHNldDIsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHNldDEsIG1zZywgYXNzZXJ0LnNhbWVEZWVwTWVtYmVycywgdHJ1ZSkudG8uaGF2ZS5zYW1lLmRlZXAubWVtYmVycyhzZXQyKTtcbn07XG5hc3NlcnQubm90U2FtZURlZXBNZW1iZXJzID0gZnVuY3Rpb24oc2V0MSwgc2V0MiwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oc2V0MSwgbXNnLCBhc3NlcnQubm90U2FtZURlZXBNZW1iZXJzLCB0cnVlKS50by5ub3QuaGF2ZS5zYW1lLmRlZXAubWVtYmVycyhzZXQyKTtcbn07XG5hc3NlcnQuc2FtZU9yZGVyZWRNZW1iZXJzID0gZnVuY3Rpb24oc2V0MSwgc2V0MiwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oc2V0MSwgbXNnLCBhc3NlcnQuc2FtZU9yZGVyZWRNZW1iZXJzLCB0cnVlKS50by5oYXZlLnNhbWUub3JkZXJlZC5tZW1iZXJzKHNldDIpO1xufTtcbmFzc2VydC5ub3RTYW1lT3JkZXJlZE1lbWJlcnMgPSBmdW5jdGlvbihzZXQxLCBzZXQyLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihzZXQxLCBtc2csIGFzc2VydC5ub3RTYW1lT3JkZXJlZE1lbWJlcnMsIHRydWUpLnRvLm5vdC5oYXZlLnNhbWUub3JkZXJlZC5tZW1iZXJzKHNldDIpO1xufTtcbmFzc2VydC5zYW1lRGVlcE9yZGVyZWRNZW1iZXJzID0gZnVuY3Rpb24oc2V0MSwgc2V0MiwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oc2V0MSwgbXNnLCBhc3NlcnQuc2FtZURlZXBPcmRlcmVkTWVtYmVycywgdHJ1ZSkudG8uaGF2ZS5zYW1lLmRlZXAub3JkZXJlZC5tZW1iZXJzKHNldDIpO1xufTtcbmFzc2VydC5ub3RTYW1lRGVlcE9yZGVyZWRNZW1iZXJzID0gZnVuY3Rpb24oc2V0MSwgc2V0MiwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oc2V0MSwgbXNnLCBhc3NlcnQubm90U2FtZURlZXBPcmRlcmVkTWVtYmVycywgdHJ1ZSkudG8ubm90LmhhdmUuc2FtZS5kZWVwLm9yZGVyZWQubWVtYmVycyhzZXQyKTtcbn07XG5hc3NlcnQuaW5jbHVkZU1lbWJlcnMgPSBmdW5jdGlvbihzdXBlcnNldCwgc3Vic2V0LCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihzdXBlcnNldCwgbXNnLCBhc3NlcnQuaW5jbHVkZU1lbWJlcnMsIHRydWUpLnRvLmluY2x1ZGUubWVtYmVycyhzdWJzZXQpO1xufTtcbmFzc2VydC5ub3RJbmNsdWRlTWVtYmVycyA9IGZ1bmN0aW9uKHN1cGVyc2V0LCBzdWJzZXQsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHN1cGVyc2V0LCBtc2csIGFzc2VydC5ub3RJbmNsdWRlTWVtYmVycywgdHJ1ZSkudG8ubm90LmluY2x1ZGUubWVtYmVycyhzdWJzZXQpO1xufTtcbmFzc2VydC5pbmNsdWRlRGVlcE1lbWJlcnMgPSBmdW5jdGlvbihzdXBlcnNldCwgc3Vic2V0LCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihzdXBlcnNldCwgbXNnLCBhc3NlcnQuaW5jbHVkZURlZXBNZW1iZXJzLCB0cnVlKS50by5pbmNsdWRlLmRlZXAubWVtYmVycyhzdWJzZXQpO1xufTtcbmFzc2VydC5ub3RJbmNsdWRlRGVlcE1lbWJlcnMgPSBmdW5jdGlvbihzdXBlcnNldCwgc3Vic2V0LCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihzdXBlcnNldCwgbXNnLCBhc3NlcnQubm90SW5jbHVkZURlZXBNZW1iZXJzLCB0cnVlKS50by5ub3QuaW5jbHVkZS5kZWVwLm1lbWJlcnMoc3Vic2V0KTtcbn07XG5hc3NlcnQuaW5jbHVkZU9yZGVyZWRNZW1iZXJzID0gZnVuY3Rpb24oc3VwZXJzZXQsIHN1YnNldCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oc3VwZXJzZXQsIG1zZywgYXNzZXJ0LmluY2x1ZGVPcmRlcmVkTWVtYmVycywgdHJ1ZSkudG8uaW5jbHVkZS5vcmRlcmVkLm1lbWJlcnMoc3Vic2V0KTtcbn07XG5hc3NlcnQubm90SW5jbHVkZU9yZGVyZWRNZW1iZXJzID0gZnVuY3Rpb24oc3VwZXJzZXQsIHN1YnNldCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oc3VwZXJzZXQsIG1zZywgYXNzZXJ0Lm5vdEluY2x1ZGVPcmRlcmVkTWVtYmVycywgdHJ1ZSkudG8ubm90LmluY2x1ZGUub3JkZXJlZC5tZW1iZXJzKHN1YnNldCk7XG59O1xuYXNzZXJ0LmluY2x1ZGVEZWVwT3JkZXJlZE1lbWJlcnMgPSBmdW5jdGlvbihzdXBlcnNldCwgc3Vic2V0LCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihzdXBlcnNldCwgbXNnLCBhc3NlcnQuaW5jbHVkZURlZXBPcmRlcmVkTWVtYmVycywgdHJ1ZSkudG8uaW5jbHVkZS5kZWVwLm9yZGVyZWQubWVtYmVycyhzdWJzZXQpO1xufTtcbmFzc2VydC5ub3RJbmNsdWRlRGVlcE9yZGVyZWRNZW1iZXJzID0gZnVuY3Rpb24oc3VwZXJzZXQsIHN1YnNldCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oc3VwZXJzZXQsIG1zZywgYXNzZXJ0Lm5vdEluY2x1ZGVEZWVwT3JkZXJlZE1lbWJlcnMsIHRydWUpLnRvLm5vdC5pbmNsdWRlLmRlZXAub3JkZXJlZC5tZW1iZXJzKHN1YnNldCk7XG59O1xuYXNzZXJ0Lm9uZU9mID0gZnVuY3Rpb24oaW5MaXN0LCBsaXN0LCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihpbkxpc3QsIG1zZywgYXNzZXJ0Lm9uZU9mLCB0cnVlKS50by5iZS5vbmVPZihsaXN0KTtcbn07XG5hc3NlcnQuaXNJdGVyYWJsZSA9IGZ1bmN0aW9uKG9iaiwgbXNnKSB7XG4gIGlmIChvYmogPT0gdm9pZCAwIHx8ICFvYmpbU3ltYm9sLml0ZXJhdG9yXSkge1xuICAgIG1zZyA9IG1zZyA/IGAke21zZ30gZXhwZWN0ZWQgJHtpbnNwZWN0MihvYmopfSB0byBiZSBhbiBpdGVyYWJsZWAgOiBgZXhwZWN0ZWQgJHtpbnNwZWN0MihvYmopfSB0byBiZSBhbiBpdGVyYWJsZWA7XG4gICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgICAgbXNnLFxuICAgICAgdm9pZCAwLFxuICAgICAgYXNzZXJ0LmlzSXRlcmFibGVcbiAgICApO1xuICB9XG59O1xuYXNzZXJ0LmNoYW5nZXMgPSBmdW5jdGlvbihmbiwgb2JqLCBwcm9wLCBtc2cpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgbXNnID0gcHJvcDtcbiAgICBwcm9wID0gbnVsbDtcbiAgfVxuICBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5jaGFuZ2VzLCB0cnVlKS50by5jaGFuZ2Uob2JqLCBwcm9wKTtcbn07XG5hc3NlcnQuY2hhbmdlc0J5ID0gZnVuY3Rpb24oZm4sIG9iaiwgcHJvcCwgZGVsdGEsIG1zZykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNCAmJiB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB2YXIgdG1wTXNnID0gZGVsdGE7XG4gICAgZGVsdGEgPSBwcm9wO1xuICAgIG1zZyA9IHRtcE1zZztcbiAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgZGVsdGEgPSBwcm9wO1xuICAgIHByb3AgPSBudWxsO1xuICB9XG4gIG5ldyBBc3NlcnRpb24oZm4sIG1zZywgYXNzZXJ0LmNoYW5nZXNCeSwgdHJ1ZSkudG8uY2hhbmdlKG9iaiwgcHJvcCkuYnkoZGVsdGEpO1xufTtcbmFzc2VydC5kb2VzTm90Q2hhbmdlID0gZnVuY3Rpb24oZm4sIG9iaiwgcHJvcCwgbXNnKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzICYmIHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIikge1xuICAgIG1zZyA9IHByb3A7XG4gICAgcHJvcCA9IG51bGw7XG4gIH1cbiAgcmV0dXJuIG5ldyBBc3NlcnRpb24oZm4sIG1zZywgYXNzZXJ0LmRvZXNOb3RDaGFuZ2UsIHRydWUpLnRvLm5vdC5jaGFuZ2Uob2JqLCBwcm9wKTtcbn07XG5hc3NlcnQuY2hhbmdlc0J1dE5vdEJ5ID0gZnVuY3Rpb24oZm4sIG9iaiwgcHJvcCwgZGVsdGEsIG1zZykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNCAmJiB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB2YXIgdG1wTXNnID0gZGVsdGE7XG4gICAgZGVsdGEgPSBwcm9wO1xuICAgIG1zZyA9IHRtcE1zZztcbiAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgZGVsdGEgPSBwcm9wO1xuICAgIHByb3AgPSBudWxsO1xuICB9XG4gIG5ldyBBc3NlcnRpb24oZm4sIG1zZywgYXNzZXJ0LmNoYW5nZXNCdXROb3RCeSwgdHJ1ZSkudG8uY2hhbmdlKG9iaiwgcHJvcCkuYnV0Lm5vdC5ieShkZWx0YSk7XG59O1xuYXNzZXJ0LmluY3JlYXNlcyA9IGZ1bmN0aW9uKGZuLCBvYmosIHByb3AsIG1zZykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMyAmJiB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBtc2cgPSBwcm9wO1xuICAgIHByb3AgPSBudWxsO1xuICB9XG4gIHJldHVybiBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5pbmNyZWFzZXMsIHRydWUpLnRvLmluY3JlYXNlKG9iaiwgcHJvcCk7XG59O1xuYXNzZXJ0LmluY3JlYXNlc0J5ID0gZnVuY3Rpb24oZm4sIG9iaiwgcHJvcCwgZGVsdGEsIG1zZykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNCAmJiB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB2YXIgdG1wTXNnID0gZGVsdGE7XG4gICAgZGVsdGEgPSBwcm9wO1xuICAgIG1zZyA9IHRtcE1zZztcbiAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgZGVsdGEgPSBwcm9wO1xuICAgIHByb3AgPSBudWxsO1xuICB9XG4gIG5ldyBBc3NlcnRpb24oZm4sIG1zZywgYXNzZXJ0LmluY3JlYXNlc0J5LCB0cnVlKS50by5pbmNyZWFzZShvYmosIHByb3ApLmJ5KGRlbHRhKTtcbn07XG5hc3NlcnQuZG9lc05vdEluY3JlYXNlID0gZnVuY3Rpb24oZm4sIG9iaiwgcHJvcCwgbXNnKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzICYmIHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIikge1xuICAgIG1zZyA9IHByb3A7XG4gICAgcHJvcCA9IG51bGw7XG4gIH1cbiAgcmV0dXJuIG5ldyBBc3NlcnRpb24oZm4sIG1zZywgYXNzZXJ0LmRvZXNOb3RJbmNyZWFzZSwgdHJ1ZSkudG8ubm90LmluY3JlYXNlKG9iaiwgcHJvcCk7XG59O1xuYXNzZXJ0LmluY3JlYXNlc0J1dE5vdEJ5ID0gZnVuY3Rpb24oZm4sIG9iaiwgcHJvcCwgZGVsdGEsIG1zZykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNCAmJiB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB2YXIgdG1wTXNnID0gZGVsdGE7XG4gICAgZGVsdGEgPSBwcm9wO1xuICAgIG1zZyA9IHRtcE1zZztcbiAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgZGVsdGEgPSBwcm9wO1xuICAgIHByb3AgPSBudWxsO1xuICB9XG4gIG5ldyBBc3NlcnRpb24oZm4sIG1zZywgYXNzZXJ0LmluY3JlYXNlc0J1dE5vdEJ5LCB0cnVlKS50by5pbmNyZWFzZShvYmosIHByb3ApLmJ1dC5ub3QuYnkoZGVsdGEpO1xufTtcbmFzc2VydC5kZWNyZWFzZXMgPSBmdW5jdGlvbihmbiwgb2JqLCBwcm9wLCBtc2cpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgbXNnID0gcHJvcDtcbiAgICBwcm9wID0gbnVsbDtcbiAgfVxuICByZXR1cm4gbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQuZGVjcmVhc2VzLCB0cnVlKS50by5kZWNyZWFzZShvYmosIHByb3ApO1xufTtcbmFzc2VydC5kZWNyZWFzZXNCeSA9IGZ1bmN0aW9uKGZuLCBvYmosIHByb3AsIGRlbHRhLCBtc2cpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDQgJiYgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdmFyIHRtcE1zZyA9IGRlbHRhO1xuICAgIGRlbHRhID0gcHJvcDtcbiAgICBtc2cgPSB0bXBNc2c7XG4gIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMykge1xuICAgIGRlbHRhID0gcHJvcDtcbiAgICBwcm9wID0gbnVsbDtcbiAgfVxuICBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5kZWNyZWFzZXNCeSwgdHJ1ZSkudG8uZGVjcmVhc2Uob2JqLCBwcm9wKS5ieShkZWx0YSk7XG59O1xuYXNzZXJ0LmRvZXNOb3REZWNyZWFzZSA9IGZ1bmN0aW9uKGZuLCBvYmosIHByb3AsIG1zZykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMyAmJiB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBtc2cgPSBwcm9wO1xuICAgIHByb3AgPSBudWxsO1xuICB9XG4gIHJldHVybiBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5kb2VzTm90RGVjcmVhc2UsIHRydWUpLnRvLm5vdC5kZWNyZWFzZShvYmosIHByb3ApO1xufTtcbmFzc2VydC5kb2VzTm90RGVjcmVhc2VCeSA9IGZ1bmN0aW9uKGZuLCBvYmosIHByb3AsIGRlbHRhLCBtc2cpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDQgJiYgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdmFyIHRtcE1zZyA9IGRlbHRhO1xuICAgIGRlbHRhID0gcHJvcDtcbiAgICBtc2cgPSB0bXBNc2c7XG4gIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMykge1xuICAgIGRlbHRhID0gcHJvcDtcbiAgICBwcm9wID0gbnVsbDtcbiAgfVxuICByZXR1cm4gbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQuZG9lc05vdERlY3JlYXNlQnksIHRydWUpLnRvLm5vdC5kZWNyZWFzZShvYmosIHByb3ApLmJ5KGRlbHRhKTtcbn07XG5hc3NlcnQuZGVjcmVhc2VzQnV0Tm90QnkgPSBmdW5jdGlvbihmbiwgb2JqLCBwcm9wLCBkZWx0YSwgbXNnKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSA0ICYmIHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHZhciB0bXBNc2cgPSBkZWx0YTtcbiAgICBkZWx0YSA9IHByb3A7XG4gICAgbXNnID0gdG1wTXNnO1xuICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICBkZWx0YSA9IHByb3A7XG4gICAgcHJvcCA9IG51bGw7XG4gIH1cbiAgbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQuZGVjcmVhc2VzQnV0Tm90QnksIHRydWUpLnRvLmRlY3JlYXNlKG9iaiwgcHJvcCkuYnV0Lm5vdC5ieShkZWx0YSk7XG59O1xuYXNzZXJ0LmlmRXJyb3IgPSBmdW5jdGlvbih2YWwpIHtcbiAgaWYgKHZhbCkge1xuICAgIHRocm93IHZhbDtcbiAgfVxufTtcbmFzc2VydC5pc0V4dGVuc2libGUgPSBmdW5jdGlvbihvYmosIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuaXNFeHRlbnNpYmxlLCB0cnVlKS50by5iZS5leHRlbnNpYmxlO1xufTtcbmFzc2VydC5pc05vdEV4dGVuc2libGUgPSBmdW5jdGlvbihvYmosIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuaXNOb3RFeHRlbnNpYmxlLCB0cnVlKS50by5ub3QuYmUuZXh0ZW5zaWJsZTtcbn07XG5hc3NlcnQuaXNTZWFsZWQgPSBmdW5jdGlvbihvYmosIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuaXNTZWFsZWQsIHRydWUpLnRvLmJlLnNlYWxlZDtcbn07XG5hc3NlcnQuaXNOb3RTZWFsZWQgPSBmdW5jdGlvbihvYmosIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuaXNOb3RTZWFsZWQsIHRydWUpLnRvLm5vdC5iZS5zZWFsZWQ7XG59O1xuYXNzZXJ0LmlzRnJvemVuID0gZnVuY3Rpb24ob2JqLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmlzRnJvemVuLCB0cnVlKS50by5iZS5mcm96ZW47XG59O1xuYXNzZXJ0LmlzTm90RnJvemVuID0gZnVuY3Rpb24ob2JqLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmlzTm90RnJvemVuLCB0cnVlKS50by5ub3QuYmUuZnJvemVuO1xufTtcbmFzc2VydC5pc0VtcHR5ID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzRW1wdHksIHRydWUpLnRvLmJlLmVtcHR5O1xufTtcbmFzc2VydC5pc05vdEVtcHR5ID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTm90RW1wdHksIHRydWUpLnRvLm5vdC5iZS5lbXB0eTtcbn07XG4oLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBhbGlhcyhuYW1lLCBhcykge1xuICBhc3NlcnRbYXNdID0gYXNzZXJ0W25hbWVdO1xuICByZXR1cm4gYWxpYXM7XG59LCBcImFsaWFzXCIpKShcImlzT2tcIiwgXCJva1wiKShcImlzTm90T2tcIiwgXCJub3RPa1wiKShcInRocm93c1wiLCBcInRocm93XCIpKFwidGhyb3dzXCIsIFwiVGhyb3dcIikoXCJpc0V4dGVuc2libGVcIiwgXCJleHRlbnNpYmxlXCIpKFwiaXNOb3RFeHRlbnNpYmxlXCIsIFwibm90RXh0ZW5zaWJsZVwiKShcImlzU2VhbGVkXCIsIFwic2VhbGVkXCIpKFwiaXNOb3RTZWFsZWRcIiwgXCJub3RTZWFsZWRcIikoXCJpc0Zyb3plblwiLCBcImZyb3plblwiKShcImlzTm90RnJvemVuXCIsIFwibm90RnJvemVuXCIpKFwiaXNFbXB0eVwiLCBcImVtcHR5XCIpKFwiaXNOb3RFbXB0eVwiLCBcIm5vdEVtcHR5XCIpKFwiaXNDYWxsYWJsZVwiLCBcImlzRnVuY3Rpb25cIikoXCJpc05vdENhbGxhYmxlXCIsIFwiaXNOb3RGdW5jdGlvblwiKTtcblxuLy8gbGliL2NoYWkuanNcbnZhciB1c2VkID0gW107XG5mdW5jdGlvbiB1c2UoZm4pIHtcbiAgY29uc3QgZXhwb3J0cyA9IHtcbiAgICBBc3NlcnRpb25FcnJvcixcbiAgICB1dGlsOiB1dGlsc19leHBvcnRzLFxuICAgIGNvbmZpZyxcbiAgICBleHBlY3QsXG4gICAgYXNzZXJ0LFxuICAgIEFzc2VydGlvbixcbiAgICAuLi5zaG91bGRfZXhwb3J0c1xuICB9O1xuICBpZiAoIX51c2VkLmluZGV4T2YoZm4pKSB7XG4gICAgZm4oZXhwb3J0cywgdXRpbHNfZXhwb3J0cyk7XG4gICAgdXNlZC5wdXNoKGZuKTtcbiAgfVxuICByZXR1cm4gZXhwb3J0cztcbn1cbl9fbmFtZSh1c2UsIFwidXNlXCIpO1xuZXhwb3J0IHtcbiAgQXNzZXJ0aW9uLFxuICBBc3NlcnRpb25FcnJvcixcbiAgU2hvdWxkLFxuICBhc3NlcnQsXG4gIGNvbmZpZyxcbiAgZXhwZWN0LFxuICBzaG91bGQsXG4gIHVzZSxcbiAgdXRpbHNfZXhwb3J0cyBhcyB1dGlsXG59O1xuLyohXG4gKiBDaGFpIC0gZmxhZyB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cbi8qIVxuICogQ2hhaSAtIHRlc3QgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG4vKiFcbiAqIENoYWkgLSBleHBlY3RUeXBlcyB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cbi8qIVxuICogQ2hhaSAtIGdldEFjdHVhbCB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cbi8qIVxuICogQ2hhaSAtIG1lc3NhZ2UgY29tcG9zaXRpb24gdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG4vKiFcbiAqIENoYWkgLSB0cmFuc2ZlckZsYWdzIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuLyohXG4gKiBjaGFpXG4gKiBodHRwOi8vY2hhaWpzLmNvbVxuICogQ29weXJpZ2h0KGMpIDIwMTEtMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG4vKiFcbiAqIENoYWkgLSBpc1Byb3h5RW5hYmxlZCBoZWxwZXJcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuLyohXG4gKiBDaGFpIC0gYWRkUHJvcGVydHkgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG4vKiFcbiAqIENoYWkgLSBhZGRMZW5ndGhHdWFyZCB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cbi8qIVxuICogQ2hhaSAtIGdldFByb3BlcnRpZXMgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG4vKiFcbiAqIENoYWkgLSBwcm94aWZ5IHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuLyohXG4gKiBDaGFpIC0gYWRkTWV0aG9kIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuLyohXG4gKiBDaGFpIC0gb3ZlcndyaXRlUHJvcGVydHkgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG4vKiFcbiAqIENoYWkgLSBvdmVyd3JpdGVNZXRob2QgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG4vKiFcbiAqIENoYWkgLSBhZGRDaGFpbmluZ01ldGhvZCB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cbi8qIVxuICogQ2hhaSAtIG92ZXJ3cml0ZUNoYWluYWJsZU1ldGhvZCB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cbi8qIVxuICogQ2hhaSAtIGNvbXBhcmVCeUluc3BlY3QgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTEtMjAxNiBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG4vKiFcbiAqIENoYWkgLSBnZXRPd25FbnVtZXJhYmxlUHJvcGVydHlTeW1ib2xzIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDExLTIwMTYgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuLyohXG4gKiBDaGFpIC0gZ2V0T3duRW51bWVyYWJsZVByb3BlcnRpZXMgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTEtMjAxNiBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG4vKiFcbiAqIENoYWkgLSBpc05hTiB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE1IFNha3RoaXByaXlhbiBWYWlyYW1hbmkgPHRoZWNoYXJnaW5ndm9sY2Fub0BnbWFpbC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuLyohXG4gKiBjaGFpXG4gKiBDb3B5cmlnaHQoYykgMjAxMSBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG4vKiFcbiAqIGNoYWlcbiAqIENvcHlyaWdodChjKSAyMDExLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuLyohIEJ1bmRsZWQgbGljZW5zZSBpbmZvcm1hdGlvbjpcblxuZGVlcC1lcWwvaW5kZXguanM6XG4gICgqIVxuICAgKiBkZWVwLWVxbFxuICAgKiBDb3B5cmlnaHQoYykgMjAxMyBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAgICogTUlUIExpY2Vuc2VkXG4gICAqKVxuICAoKiFcbiAgICogQ2hlY2sgdG8gc2VlIGlmIHRoZSBNZW1vaXplTWFwIGhhcyByZWNvcmRlZCBhIHJlc3VsdCBvZiB0aGUgdHdvIG9wZXJhbmRzXG4gICAqXG4gICAqIEBwYXJhbSB7TWl4ZWR9IGxlZnRIYW5kT3BlcmFuZFxuICAgKiBAcGFyYW0ge01peGVkfSByaWdodEhhbmRPcGVyYW5kXG4gICAqIEBwYXJhbSB7TWVtb2l6ZU1hcH0gbWVtb2l6ZU1hcFxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbnxudWxsfSByZXN1bHRcbiAgKilcbiAgKCohXG4gICAqIFNldCB0aGUgcmVzdWx0IG9mIHRoZSBlcXVhbGl0eSBpbnRvIHRoZSBNZW1vaXplTWFwXG4gICAqXG4gICAqIEBwYXJhbSB7TWl4ZWR9IGxlZnRIYW5kT3BlcmFuZFxuICAgKiBAcGFyYW0ge01peGVkfSByaWdodEhhbmRPcGVyYW5kXG4gICAqIEBwYXJhbSB7TWVtb2l6ZU1hcH0gbWVtb2l6ZU1hcFxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IHJlc3VsdFxuICAqKVxuICAoKiFcbiAgICogUHJpbWFyeSBFeHBvcnRcbiAgICopXG4gICgqIVxuICAgKiBUaGUgbWFpbiBsb2dpYyBvZiB0aGUgYGRlZXBFcXVhbGAgZnVuY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7TWl4ZWR9IGxlZnRIYW5kT3BlcmFuZFxuICAgKiBAcGFyYW0ge01peGVkfSByaWdodEhhbmRPcGVyYW5kXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gKG9wdGlvbmFsKSBBZGRpdGlvbmFsIG9wdGlvbnNcbiAgICogQHBhcmFtIHtBcnJheX0gW29wdGlvbnMuY29tcGFyYXRvcl0gKG9wdGlvbmFsKSBPdmVycmlkZSBkZWZhdWx0IGFsZ29yaXRobSwgZGV0ZXJtaW5pbmcgY3VzdG9tIGVxdWFsaXR5LlxuICAgKiBAcGFyYW0ge0FycmF5fSBbb3B0aW9ucy5tZW1vaXplXSAob3B0aW9uYWwpIFByb3ZpZGUgYSBjdXN0b20gbWVtb2l6YXRpb24gb2JqZWN0IHdoaWNoIHdpbGwgY2FjaGUgdGhlIHJlc3VsdHMgb2ZcbiAgICAgIGNvbXBsZXggb2JqZWN0cyBmb3IgYSBzcGVlZCBib29zdC4gQnkgcGFzc2luZyBgZmFsc2VgIHlvdSBjYW4gZGlzYWJsZSBtZW1vaXphdGlvbiwgYnV0IHRoaXMgd2lsbCBjYXVzZSBjaXJjdWxhclxuICAgICAgcmVmZXJlbmNlcyB0byBibG93IHRoZSBzdGFjay5cbiAgICogQHJldHVybiB7Qm9vbGVhbn0gZXF1YWwgbWF0Y2hcbiAgKilcbiAgKCohXG4gICAqIENvbXBhcmUgdHdvIFJlZ3VsYXIgRXhwcmVzc2lvbnMgZm9yIGVxdWFsaXR5LlxuICAgKlxuICAgKiBAcGFyYW0ge1JlZ0V4cH0gbGVmdEhhbmRPcGVyYW5kXG4gICAqIEBwYXJhbSB7UmVnRXhwfSByaWdodEhhbmRPcGVyYW5kXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHJlc3VsdFxuICAgKilcbiAgKCohXG4gICAqIENvbXBhcmUgdHdvIFNldHMvTWFwcyBmb3IgZXF1YWxpdHkuIEZhc3RlciB0aGFuIG90aGVyIGVxdWFsaXR5IGZ1bmN0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtTZXR9IGxlZnRIYW5kT3BlcmFuZFxuICAgKiBAcGFyYW0ge1NldH0gcmlnaHRIYW5kT3BlcmFuZFxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIChPcHRpb25hbClcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gcmVzdWx0XG4gICAqKVxuICAoKiFcbiAgICogU2ltcGxlIGVxdWFsaXR5IGZvciBmbGF0IGl0ZXJhYmxlIG9iamVjdHMgc3VjaCBhcyBBcnJheXMsIFR5cGVkQXJyYXlzIG9yIE5vZGUuanMgYnVmZmVycy5cbiAgICpcbiAgICogQHBhcmFtIHtJdGVyYWJsZX0gbGVmdEhhbmRPcGVyYW5kXG4gICAqIEBwYXJhbSB7SXRlcmFibGV9IHJpZ2h0SGFuZE9wZXJhbmRcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAoT3B0aW9uYWwpXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHJlc3VsdFxuICAgKilcbiAgKCohXG4gICAqIFNpbXBsZSBlcXVhbGl0eSBmb3IgZ2VuZXJhdG9yIG9iamVjdHMgc3VjaCBhcyB0aG9zZSByZXR1cm5lZCBieSBnZW5lcmF0b3IgZnVuY3Rpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge0l0ZXJhYmxlfSBsZWZ0SGFuZE9wZXJhbmRcbiAgICogQHBhcmFtIHtJdGVyYWJsZX0gcmlnaHRIYW5kT3BlcmFuZFxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIChPcHRpb25hbClcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gcmVzdWx0XG4gICAqKVxuICAoKiFcbiAgICogRGV0ZXJtaW5lIGlmIHRoZSBnaXZlbiBvYmplY3QgaGFzIGFuIEBAaXRlcmF0b3IgZnVuY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXRcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gYHRydWVgIGlmIHRoZSBvYmplY3QgaGFzIGFuIEBAaXRlcmF0b3IgZnVuY3Rpb24uXG4gICAqKVxuICAoKiFcbiAgICogR2V0cyBhbGwgaXRlcmF0b3IgZW50cmllcyBmcm9tIHRoZSBnaXZlbiBPYmplY3QuIElmIHRoZSBPYmplY3QgaGFzIG5vIEBAaXRlcmF0b3IgZnVuY3Rpb24sIHJldHVybnMgYW4gZW1wdHkgYXJyYXkuXG4gICAqIFRoaXMgd2lsbCBjb25zdW1lIHRoZSBpdGVyYXRvciAtIHdoaWNoIGNvdWxkIGhhdmUgc2lkZSBlZmZlY3RzIGRlcGVuZGluZyBvbiB0aGUgQEBpdGVyYXRvciBpbXBsZW1lbnRhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHRhcmdldFxuICAgKiBAcmV0dXJucyB7QXJyYXl9IGFuIGFycmF5IG9mIGVudHJpZXMgZnJvbSB0aGUgQEBpdGVyYXRvciBmdW5jdGlvblxuICAgKilcbiAgKCohXG4gICAqIEdldHMgYWxsIGVudHJpZXMgZnJvbSBhIEdlbmVyYXRvci4gVGhpcyB3aWxsIGNvbnN1bWUgdGhlIGdlbmVyYXRvciAtIHdoaWNoIGNvdWxkIGhhdmUgc2lkZSBlZmZlY3RzLlxuICAgKlxuICAgKiBAcGFyYW0ge0dlbmVyYXRvcn0gdGFyZ2V0XG4gICAqIEByZXR1cm5zIHtBcnJheX0gYW4gYXJyYXkgb2YgZW50cmllcyBmcm9tIHRoZSBHZW5lcmF0b3IuXG4gICAqKVxuICAoKiFcbiAgICogR2V0cyBhbGwgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBrZXlzIGZyb20gYSB0YXJnZXQuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXRcbiAgICogQHJldHVybnMge0FycmF5fSBhbiBhcnJheSBvZiBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIGtleXMgZnJvbSB0aGUgdGFyZ2V0LlxuICAgKilcbiAgKCohXG4gICAqIERldGVybWluZXMgaWYgdHdvIG9iamVjdHMgaGF2ZSBtYXRjaGluZyB2YWx1ZXMsIGdpdmVuIGEgc2V0IG9mIGtleXMuIERlZmVycyB0byBkZWVwRXF1YWwgZm9yIHRoZSBlcXVhbGl0eSBjaGVjayBvZlxuICAgKiBlYWNoIGtleS4gSWYgYW55IHZhbHVlIG9mIHRoZSBnaXZlbiBrZXkgaXMgbm90IGVxdWFsLCB0aGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gZmFsc2UgKGVhcmx5KS5cbiAgICpcbiAgICogQHBhcmFtIHtNaXhlZH0gbGVmdEhhbmRPcGVyYW5kXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHJpZ2h0SGFuZE9wZXJhbmRcbiAgICogQHBhcmFtIHtBcnJheX0ga2V5cyBBbiBhcnJheSBvZiBrZXlzIHRvIGNvbXBhcmUgdGhlIHZhbHVlcyBvZiBsZWZ0SGFuZE9wZXJhbmQgYW5kIHJpZ2h0SGFuZE9wZXJhbmQgYWdhaW5zdFxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIChPcHRpb25hbClcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gcmVzdWx0XG4gICAqKVxuICAoKiFcbiAgICogUmVjdXJzaXZlbHkgY2hlY2sgdGhlIGVxdWFsaXR5IG9mIHR3byBPYmplY3RzLiBPbmNlIGJhc2ljIHNhbWVuZXNzIGhhcyBiZWVuIGVzdGFibGlzaGVkIGl0IHdpbGwgZGVmZXIgdG8gYGRlZXBFcXVhbGBcbiAgICogZm9yIGVhY2ggZW51bWVyYWJsZSBrZXkgaW4gdGhlIG9iamVjdC5cbiAgICpcbiAgICogQHBhcmFtIHtNaXhlZH0gbGVmdEhhbmRPcGVyYW5kXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHJpZ2h0SGFuZE9wZXJhbmRcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAoT3B0aW9uYWwpXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHJlc3VsdFxuICAgKilcbiAgKCohXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgYXJndW1lbnQgaXMgYSBwcmltaXRpdmUuXG4gICAqXG4gICAqIFRoaXMgaW50ZW50aW9uYWxseSByZXR1cm5zIHRydWUgZm9yIGFsbCBvYmplY3RzIHRoYXQgY2FuIGJlIGNvbXBhcmVkIGJ5IHJlZmVyZW5jZSxcbiAgICogaW5jbHVkaW5nIGZ1bmN0aW9ucyBhbmQgc3ltYm9scy5cbiAgICpcbiAgICogQHBhcmFtIHtNaXhlZH0gdmFsdWVcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gcmVzdWx0XG4gICAqKVxuKi9cbiIsICIvKioqKioqKipcblxuIENvbnZlcnQgY2hhaS1kb20gMS44LjEgdG8gZXMgbW9kdWxlLCB3aXRob3V0IGFueSBvdGhlciBtb2RpZmljYXRpb24uXG4gRnJvbSBodHRwczovL2dpdGh1Yi5jb20vbmF0aGFuYm9rdGFlL2NoYWktZG9tL2Jsb2IvODZjMzQyMy9jaGFpLWRvbS5qc1xuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbmF0aGFuYm9rdGFlL2NoYWktZG9tL2lzc3Vlcy8zOFxuXG4gVXNhZ2U6XG4gaW1wb3J0IHsgY2hhaURvbSB9IGZyb20gJzxwYXRoLXRvPi9jaGFpLWRvbSc7XG4gY2hhaS51c2UoY2hhaURvbSk7XG5cbiBDb3B5cmlnaHQgKGMpIDIwMTUgTmF0aGFuIEJsYWNrIGFuZCBvdGhlciBjb250cmlidXRvcnNcblxuIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1JVCBsaWNlbnNlLiBGb3IgYSBjb3B5LCBzZWUgPGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUPi5cblxuICoqKioqKioqKiovXG5cbmV4cG9ydCBmdW5jdGlvbiBjaGFpRG9tKGNoYWksIHV0aWxzKSB7XG4gICAgdmFyIGZsYWcgPSB1dGlscy5mbGFnLFxuXG4gICAgICAgIGVsVG9TdHJpbmcgPSBmdW5jdGlvbihlbCkge1xuICAgICAgICAgICAgbGV0IGRlc2NcbiAgICAgICAgICAgIGlmIChpc05vZGVMaXN0KGVsKSkge1xuICAgICAgICAgICAgICAgIGlmIChlbC5sZW5ndGggPT09IDApIHJldHVybiAnZW1wdHkgTm9kZUxpc3QnXG4gICAgICAgICAgICAgICAgZGVzYyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGVsLCAwLCA1KS5tYXAoZWxUb1N0cmluZykuam9pbignLCAnKVxuICAgICAgICAgICAgICAgIHJldHVybiBlbC5sZW5ndGggPiA1ID8gZGVzYyArICcuLi4gKCsnICsgKGVsLmxlbmd0aCAtIDUpICsgJyBtb3JlKScgOiBkZXNjXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWlzSFRNTEVsZW1lbnQoZWwpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhlbClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGVzYyA9IGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgaWYgKGVsLmlkKSB7XG4gICAgICAgICAgICAgICAgZGVzYyArPSAnIycgKyBlbC5pZFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVsLmNsYXNzTmFtZSkge1xuICAgICAgICAgICAgICAgIGRlc2MgKz0gJy4nICsgU3RyaW5nKGVsLmNsYXNzTmFtZSkucmVwbGFjZSgvXFxzKy9nLCAnLicpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGVsLmF0dHJpYnV0ZXMsIGZ1bmN0aW9uKGF0dHIpIHtcbiAgICAgICAgICAgICAgICBpZiAoYXR0ci5uYW1lICE9PSAnY2xhc3MnICYmIGF0dHIubmFtZSAhPT0gJ2lkJykge1xuICAgICAgICAgICAgICAgICAgICBkZXNjICs9ICdbJyArIGF0dHIubmFtZSArIChhdHRyLnZhbHVlID8gJz1cIicgKyBhdHRyLnZhbHVlICsgJ1wiXScgOiAnXScpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHJldHVybiBkZXNjXG4gICAgICAgIH0sXG5cbiAgICAgICAgYXR0ckFzc2VydCA9IGZ1bmN0aW9uKG5hbWUsIHZhbCkge1xuICAgICAgICAgICAgbGV0IGVsID0gZmxhZyh0aGlzLCAnb2JqZWN0JyksIGFjdHVhbCA9IGVsLmdldEF0dHJpYnV0ZShuYW1lKVxuXG4gICAgICAgICAgICBpZiAoIWZsYWcodGhpcywgJ25lZ2F0ZScpIHx8IHVuZGVmaW5lZCA9PT0gdmFsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAgICAgICAgICEhZWwuYXR0cmlidXRlc1tuYW1lXVxuICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhlbCkgKyAnIHRvIGhhdmUgYW4gYXR0cmlidXRlICN7ZXhwfSdcbiAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcoZWwpICsgJyBub3QgdG8gaGF2ZSBhbiBhdHRyaWJ1dGUgI3tleHB9J1xuICAgICAgICAgICAgICAgICAgICAsIG5hbWVcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh1bmRlZmluZWQgIT09IHZhbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgICAgICAgICB2YWwgPT09IGFjdHVhbFxuICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhlbCkgKyAnIHRvIGhhdmUgYW4gYXR0cmlidXRlICcgKyB1dGlscy5pbnNwZWN0KG5hbWUpICsgJyB3aXRoIHRoZSB2YWx1ZSAje2V4cH0sIGJ1dCB0aGUgdmFsdWUgd2FzICN7YWN0fSdcbiAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcoZWwpICsgJyBub3QgdG8gaGF2ZSBhbiBhdHRyaWJ1dGUgJyArIHV0aWxzLmluc3BlY3QobmFtZSkgKyAnIHdpdGggdGhlIHZhbHVlICN7YWN0fSdcbiAgICAgICAgICAgICAgICAgICAgLCB2YWxcbiAgICAgICAgICAgICAgICAgICAgLCBhY3R1YWxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZsYWcodGhpcywgJ29iamVjdCcsIGFjdHVhbClcbiAgICAgICAgfSxcblxuICAgICAgICBpc0hUTUxFbGVtZW50ID0gZnVuY3Rpb24oZWwpIHtcbiAgICAgICAgICAgIHJldHVybiBlbC5ub2RlVHlwZSA9PT0gMSAvLyB3aW5kb3cuTm9kZS5FTEVNRU5UX05PREVcbiAgICAgICAgfSxcblxuICAgICAgICBpc05vZGVMaXN0ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IE5vZGVMaXN0XSdcbiAgICAgICAgfVxuXG4gICAgdXRpbHMuZWxUb1N0cmluZyA9IGVsVG9TdHJpbmdcbiAgICBjaGFpLkFzc2VydGlvbi5hZGRNZXRob2QoJ2F0dHInLCBhdHRyQXNzZXJ0KVxuICAgIGNoYWkuQXNzZXJ0aW9uLmFkZE1ldGhvZCgnYXR0cmlidXRlJywgYXR0ckFzc2VydClcblxuICAgIGNoYWkuQXNzZXJ0aW9uLmFkZE1ldGhvZCgnY2xhc3MnLCBmdW5jdGlvbihjbGFzc05hbWUpIHtcbiAgICAgICAgdmFyIGVsID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICBlbC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKVxuICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcoZWwpICsgJyB0byBoYXZlIGNsYXNzICN7ZXhwfSdcbiAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKGVsKSArICcgbm90IHRvIGhhdmUgY2xhc3MgI3tleHB9J1xuICAgICAgICAgICAgLCBjbGFzc05hbWVcbiAgICAgICAgKVxuICAgIH0pXG5cbiAgICBjaGFpLkFzc2VydGlvbi5hZGRNZXRob2QoJ2lkJywgZnVuY3Rpb24oaWQpIHtcbiAgICAgICAgdmFyIGVsID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICBlbC5pZCA9PSBpZFxuICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcoZWwpICsgJyB0byBoYXZlIGlkICN7ZXhwfSdcbiAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKGVsKSArICcgbm90IHRvIGhhdmUgaWQgI3tleHB9J1xuICAgICAgICAgICAgLCBpZFxuICAgICAgICApXG4gICAgfSlcblxuICAgIGNoYWkuQXNzZXJ0aW9uLmFkZE1ldGhvZCgnaHRtbCcsIGZ1bmN0aW9uKGh0bWwpIHtcbiAgICAgICAgdmFyIGVsID0gZmxhZyh0aGlzLCAnb2JqZWN0JyksIGFjdHVhbCA9IGZsYWcodGhpcywgJ29iamVjdCcpLmlubmVySFRNTFxuXG4gICAgICAgIGlmIChmbGFnKHRoaXMsICdjb250YWlucycpKSB7XG4gICAgICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgICAgICBhY3R1YWwuaW5kZXhPZihodG1sKSA+PSAwXG4gICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgI3thY3R9IHRvIGNvbnRhaW4gSFRNTCAje2V4cH0nXG4gICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgI3thY3R9IG5vdCB0byBjb250YWluIEhUTUwgI3tleHB9J1xuICAgICAgICAgICAgICAgICwgaHRtbFxuICAgICAgICAgICAgICAgICwgYWN0dWFsXG4gICAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgICAgICBhY3R1YWwgPT09IGh0bWxcbiAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhlbCkgKyAnIHRvIGhhdmUgSFRNTCAje2V4cH0sIGJ1dCB0aGUgSFRNTCB3YXMgI3thY3R9J1xuICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKGVsKSArICcgbm90IHRvIGhhdmUgSFRNTCAje2V4cH0nXG4gICAgICAgICAgICAgICAgLCBodG1sXG4gICAgICAgICAgICAgICAgLCBhY3R1YWxcbiAgICAgICAgICAgIClcbiAgICAgICAgfVxuICAgIH0pXG5cbiAgICBjaGFpLkFzc2VydGlvbi5hZGRDaGFpbmFibGVNZXRob2QoJ3RyaW1tZWQnLCBudWxsLCBmdW5jdGlvbigpIHtcbiAgICAgICAgZmxhZyh0aGlzLCAndHJpbS10ZXh0JywgdHJ1ZSlcbiAgICB9KVxuXG4gICAgY2hhaS5Bc3NlcnRpb24uYWRkTWV0aG9kKCd0ZXh0JywgZnVuY3Rpb24odGV4dCkge1xuICAgICAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0JyksIGNvbnRhaW5zID0gZmxhZyh0aGlzLCAnY29udGFpbnMnKSxcbiAgICAgICAgICAgIHRyaW0gPSBmbGFnKHRoaXMsICd0cmltLXRleHQnKSwgYWN0dWFsLCByZXN1bHRcblxuICAgICAgICBpZiAoaXNOb2RlTGlzdChvYmopKSB7XG4gICAgICAgICAgICBhY3R1YWwgPSBBcnJheS5wcm90b3R5cGUubWFwLmNhbGwob2JqLCBmdW5jdGlvbihlbCkgeyByZXR1cm4gdHJpbSA/IGVsLnRleHRDb250ZW50LnRyaW0oKSA6IGVsLnRleHRDb250ZW50IH0pXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0ZXh0KSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvbnRhaW5zID9cbiAgICAgICAgICAgICAgICAgICAgdGV4dFtmbGFnKHRoaXMsICduZWdhdGUnKSA/ICdzb21lJyA6ICdldmVyeSddKGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuc29tZS5jYWxsKG9iaiwgZnVuY3Rpb24oZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHRyaW0gPyBlbC50ZXh0Q29udGVudC50cmltKCkgOiBlbC50ZXh0Q29udGVudCkgPT09IHRcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIDpcbiAgICAgICAgICAgICAgICAgICAgdXRpbHMuZXFsKGFjdHVhbCwgdGV4dClcblxuICAgICAgICAgICAgICAgIGFjdHVhbCA9IGFjdHVhbC5qb2luKClcbiAgICAgICAgICAgICAgICB0ZXh0ID0gdGV4dC5qb2luKClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYWN0dWFsID0gYWN0dWFsLmpvaW4oJycpXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gY29udGFpbnMgPyBhY3R1YWwuaW5kZXhPZih0ZXh0KSA+PSAwIDogYWN0dWFsID09PSB0ZXh0XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhY3R1YWwgPSB0cmltID8gb2JqLnRleHRDb250ZW50LnRyaW0oKSA6IG9iai50ZXh0Q29udGVudFxuICAgICAgICAgICAgcmVzdWx0ID0gY29udGFpbnMgPyBhY3R1YWwuaW5kZXhPZih0ZXh0KSA+PSAwIDogYWN0dWFsID09PSB0ZXh0XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgb2JqRGVzYyA9IGVsVG9TdHJpbmcob2JqKSwgdGV4dE1zZyA9IHRyaW0gPyAndHJpbW1lZCB0ZXh0JyA6ICd0ZXh0J1xuICAgICAgICBpZiAoY29udGFpbnMpIHtcbiAgICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgICAgIHJlc3VsdFxuICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBvYmpEZXNjICsgJyB0byBjb250YWluICN7ZXhwfSwgYnV0IHRoZSAnICsgdGV4dE1zZyArICcgd2FzICN7YWN0fSdcbiAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgb2JqRGVzYyArICcgbm90IHRvIGNvbnRhaW4gI3tleHB9LCBidXQgdGhlICcgKyB0ZXh0TXNnICsgJyB3YXMgI3thY3R9J1xuICAgICAgICAgICAgICAgICwgdGV4dFxuICAgICAgICAgICAgICAgICwgYWN0dWFsXG4gICAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgICAgICByZXN1bHRcbiAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgb2JqRGVzYyArICcgdG8gaGF2ZSAnICsgdGV4dE1zZyArICcgI3tleHB9LCBidXQgdGhlICcgKyB0ZXh0TXNnICsgJyB3YXMgI3thY3R9J1xuICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBvYmpEZXNjICsgJyBub3QgdG8gaGF2ZSAnICsgdGV4dE1zZyArICcgI3tleHB9J1xuICAgICAgICAgICAgICAgICwgdGV4dFxuICAgICAgICAgICAgICAgICwgYWN0dWFsXG4gICAgICAgICAgICApXG4gICAgICAgIH1cbiAgICB9KVxuXG4gICAgY2hhaS5Bc3NlcnRpb24uYWRkTWV0aG9kKCd2YWx1ZScsIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIHZhciBlbCA9IGZsYWcodGhpcywgJ29iamVjdCcpLCBhY3R1YWwgPSBmbGFnKHRoaXMsICdvYmplY3QnKS52YWx1ZVxuICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgIGZsYWcodGhpcywgJ29iamVjdCcpLnZhbHVlID09PSB2YWx1ZVxuICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcoZWwpICsgJyB0byBoYXZlIHZhbHVlICN7ZXhwfSwgYnV0IHRoZSB2YWx1ZSB3YXMgI3thY3R9J1xuICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcoZWwpICsgJyBub3QgdG8gaGF2ZSB2YWx1ZSAje2V4cH0nXG4gICAgICAgICAgICAsIHZhbHVlXG4gICAgICAgICAgICAsIGFjdHVhbFxuICAgICAgICApXG4gICAgfSlcblxuICAgIGNoYWkuQXNzZXJ0aW9uLm92ZXJ3cml0ZVByb3BlcnR5KCdleGlzdCcsIGZ1bmN0aW9uKF9zdXBlcikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICAgICAgIGlmIChpc05vZGVMaXN0KG9iaikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgICAgICAgICAgb2JqLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgYW4gZW1wdHkgTm9kZUxpc3QgdG8gaGF2ZSBub2RlcydcbiAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gbm90IGV4aXN0JylcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pXG5cbiAgICBjaGFpLkFzc2VydGlvbi5vdmVyd3JpdGVQcm9wZXJ0eSgnZW1wdHknLCBmdW5jdGlvbihfc3VwZXIpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAgICAgICBpZiAoaXNIVE1MRWxlbWVudChvYmopKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAgICAgICAgIG9iai5jaGlsZHJlbi5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gYmUgZW1wdHknXG4gICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIG5vdCBiZSBlbXB0eScpXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzTm9kZUxpc3Qob2JqKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgICAgICAgICBvYmoubGVuZ3RoID09PSAwXG4gICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIGJlIGVtcHR5J1xuICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBub3QgYmUgZW1wdHknKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSlcblxuICAgIGNoYWkuQXNzZXJ0aW9uLm92ZXJ3cml0ZUNoYWluYWJsZU1ldGhvZCgnbGVuZ3RoJyxcbiAgICAgICAgZnVuY3Rpb24oX3N1cGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24obGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAgICAgICAgICAgaWYgKGlzTm9kZUxpc3Qob2JqKSB8fCBpc0hUTUxFbGVtZW50KG9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFjdHVhbExlbmd0aCA9IG9iai5jaGlsZHJlbiA/IG9iai5jaGlsZHJlbi5sZW5ndGggOiBvYmoubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsTGVuZ3RoID09PSBsZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIGhhdmUgI3tleHB9IGNoaWxkcmVuIGJ1dCBpdCBoYWQgI3thY3R9IGNoaWxkcmVuJ1xuICAgICAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gbm90IGhhdmUgI3tleHB9IGNoaWxkcmVuJ1xuICAgICAgICAgICAgICAgICAgICAgICAgLCBsZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgICwgYWN0dWFsTGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZnVuY3Rpb24oX3N1cGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgX3N1cGVyLmNhbGwodGhpcylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIClcblxuXG4gICAgY2hhaS5Bc3NlcnRpb24ub3ZlcndyaXRlTWV0aG9kKCdtYXRjaCcsIGZ1bmN0aW9uKF9zdXBlcikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgICAgICAgICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgICAgICAgaWYgKGlzSFRNTEVsZW1lbnQob2JqKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgICAgICAgICBvYmoubWF0Y2hlcyhzZWxlY3RvcilcbiAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gbWF0Y2ggI3tleHB9J1xuICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBub3QgbWF0Y2ggI3tleHB9J1xuICAgICAgICAgICAgICAgICAgICAsIHNlbGVjdG9yXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSBlbHNlIGlmIChpc05vZGVMaXN0KG9iaikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgICAgICAgICAgKCEhb2JqLmxlbmd0aCAmJiBBcnJheS5wcm90b3R5cGUuZXZlcnkuY2FsbChvYmosIGZ1bmN0aW9uKGVsKSB7IHJldHVybiBlbC5tYXRjaGVzKHNlbGVjdG9yKSB9KSlcbiAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gbWF0Y2ggI3tleHB9J1xuICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBub3QgbWF0Y2ggI3tleHB9J1xuICAgICAgICAgICAgICAgICAgICAsIHNlbGVjdG9yXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSlcblxuICAgIGNoYWkuQXNzZXJ0aW9uLm92ZXJ3cml0ZUNoYWluYWJsZU1ldGhvZCgnY29udGFpbicsXG4gICAgICAgIGZ1bmN0aW9uKF9zdXBlcikge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHN1Yml0ZW0pIHtcbiAgICAgICAgICAgICAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICAgICAgICAgICBpZiAoaXNIVE1MRWxlbWVudChvYmopKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc3ViaXRlbSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICEhb2JqLnF1ZXJ5U2VsZWN0b3Ioc3ViaXRlbSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBjb250YWluICN7ZXhwfSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBub3QgY29udGFpbiAje2V4cH0nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBzdWJpdGVtKVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqLmNvbnRhaW5zKHN1Yml0ZW0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gY29udGFpbiAnICsgZWxUb1N0cmluZyhzdWJpdGVtKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIG5vdCBjb250YWluICcgKyBlbFRvU3RyaW5nKHN1Yml0ZW0pKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGZ1bmN0aW9uKF9zdXBlcikge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIF9zdXBlci5jYWxsKHRoaXMpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApXG5cbiAgICBjaGFpLkFzc2VydGlvbi5hZGRNZXRob2QoJ2Rlc2NlbmRhbnQnLCBmdW5jdGlvbihzdWJpdGVtKSB7XG4gICAgICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKSwgYWN0dWFsID0gc3ViaXRlbVxuXG4gICAgICAgIGlmICh0eXBlb2Ygc3ViaXRlbSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGFjdHVhbCA9IG9iai5xdWVyeVNlbGVjdG9yKHN1Yml0ZW0pXG4gICAgICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgICAgICAhIWFjdHVhbFxuICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIGhhdmUgZGVzY2VuZGFudCAje2V4cH0nXG4gICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gbm90IGhhdmUgZGVzY2VuZGFudCAje2V4cH0nXG4gICAgICAgICAgICAgICAgLCBzdWJpdGVtKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAgICAgb2JqLmNvbnRhaW5zKHN1Yml0ZW0pXG4gICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gY29udGFpbiAnICsgZWxUb1N0cmluZyhzdWJpdGVtKVxuICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIG5vdCBjb250YWluICcgKyBlbFRvU3RyaW5nKHN1Yml0ZW0pKVxuICAgICAgICB9XG5cbiAgICAgICAgZmxhZyh0aGlzLCAnb2JqZWN0JywgYWN0dWFsKVxuICAgIH0pXG5cbiAgICBjaGFpLkFzc2VydGlvbi5hZGRNZXRob2QoJ2Rlc2NlbmRhbnRzJywgZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgICAgICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpLFxuICAgICAgICAgICAgYWN0dWFsID0gb2JqLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpXG4gICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgISFhY3R1YWwubGVuZ3RoXG4gICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBoYXZlIGRlc2NlbmRhbnRzICN7ZXhwfSdcbiAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIG5vdCBoYXZlIGRlc2NlbmRhbnRzICN7ZXhwfSdcbiAgICAgICAgICAgICwgc2VsZWN0b3IpXG4gICAgICAgIGZsYWcodGhpcywgJ29iamVjdCcsIGFjdHVhbClcbiAgICB9KVxuXG4gICAgY2hhaS5Bc3NlcnRpb24uYWRkUHJvcGVydHkoJ2Rpc3BsYXllZCcsIGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZWwgPSBmbGFnKHRoaXMsICdvYmplY3QnKSxcbiAgICAgICAgICAgIGFjdHVhbCA9IGRvY3VtZW50LmJvZHkuY29udGFpbnMoZWwpID8gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwpLmRpc3BsYXkgOiBlbC5zdHlsZS5kaXNwbGF5XG5cbiAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICBhY3R1YWwgIT09ICdub25lJ1xuICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcoZWwpICsgJyB0byBiZSBkaXNwbGF5ZWQsIGJ1dCBpdCB3YXMgbm90J1xuICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcoZWwpICsgJyB0byBub3QgYmUgZGlzcGxheWVkLCBidXQgaXQgd2FzIGFzICcgKyBhY3R1YWxcbiAgICAgICAgICAgICwgYWN0dWFsXG4gICAgICAgIClcbiAgICB9KVxuXG4gICAgY2hhaS5Bc3NlcnRpb24uYWRkUHJvcGVydHkoJ3Zpc2libGUnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGVsID0gZmxhZyh0aGlzLCAnb2JqZWN0JyksXG4gICAgICAgICAgICBhY3R1YWwgPSBkb2N1bWVudC5ib2R5LmNvbnRhaW5zKGVsKSA/IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsKS52aXNpYmlsaXR5IDogZWwuc3R5bGUudmlzaWJpbGl0eVxuXG4gICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgYWN0dWFsICE9PSAnaGlkZGVuJyAmJiBhY3R1YWwgIT09ICdjb2xsYXBzZSdcbiAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKGVsKSArICcgdG8gYmUgdmlzaWJsZSwgYnV0IGl0IHdhcyAnICsgKGFjdHVhbCA9PT0gJ2hpZGRlbicgPyAnaGlkZGVuJyA6ICdjb2xsYXBzZWQnKVxuICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcoZWwpICsgJyB0byBub3QgYmUgdmlzaWJsZSwgYnV0IGl0IHdhcydcbiAgICAgICAgICAgICwgYWN0dWFsXG4gICAgICAgIClcbiAgICB9KVxufSIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7ZXh0ZW5kfSBmcm9tIFwiLi4vLi4vc291cmNlL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuXG5leHBvcnQgY29uc3QgaXNCcm93c2VyID0gbmV3IEZ1bmN0aW9uKFwidHJ5IHtyZXR1cm4gdGhpcz09PXdpbmRvdzt9Y2F0Y2goZSl7IHJldHVybiBmYWxzZTt9XCIpO1xuZXhwb3J0IGNvbnN0IGlzTm9kZSA9IG5ldyBGdW5jdGlvbihcInRyeSB7cmV0dXJuIHRoaXM9PT1nbG9iYWw7fWNhdGNoKGUpe3JldHVybiBmYWxzZTt9XCIpO1xuXG5sZXQgSlNET01FeHBvcnQgPSBudWxsO1xuXG4vKipcbiAqIHRoaXMgaGVscGVyIGZ1bmN0aW9uIGNyZWF0ZXMgdGhlIGRvbSBzdGFjayBpbiB0aGUgbm9kZSBlbnZpcm9ubWVudFxuICpcbiAqIEByZXR1cm4ge1Byb21pc2U8dW5rbm93bj58UHJvbWlzZTx2b2lkPn1cbiAqL1xuZnVuY3Rpb24gaW5pdEpTRE9NKG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIiAmJiB3aW5kb3dbJ0RPTVBhcnNlciddKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgICBjb25zdCBnID0gZ2V0R2xvYmFsKCk7XG5cbiAgICBvcHRpb25zID0gZXh0ZW5kKHt9LCB7XG4gICAgICAgIHByZXRlbmRUb0JlVmlzdWFsOiB0cnVlLFxuICAgICAgICBjb250ZW50VHlwZTogXCJ0ZXh0L2h0bWxcIixcbiAgICAgICAgaW5jbHVkZU5vZGVMb2NhdGlvbnM6IHRydWUsXG4gICAgICAgIHN0b3JhZ2VRdW90YTogMTAwMDAwMDAsXG4gICAgICAgIHJ1blNjcmlwdHM6IFwiZGFuZ2Vyb3VzbHlcIixcbiAgICAgICAgcmVzb3VyY2VzOiBcInVzYWJsZVwiXG4gICAgfSwgb3B0aW9ucyB8fCB7fSlcblxuICAgIHJldHVybiBpbXBvcnQoXCJqc2RvbVwiKS50aGVuKCh7SlNET019KSA9PiB7XG4gICAgICAgIEpTRE9NRXhwb3J0ID0gSlNET007XG4gICAgICAgIGNvbnN0IHt3aW5kb3d9ID0gbmV3IEpTRE9NKGA8IURPQ1RZUEUgaHRtbD48aHRtbCBsYW5nPVwiZW5cIj48aGVhZD48dGl0bGU+VGVzdDwvdGl0bGU+PC9oZWFkPjxib2R5PjxkaXYgaWQ9XCJtb2Nrc1wiPjwvZGl2PjwvYm9keT48L2h0bWw+YCwgb3B0aW9ucyk7XG5cbiAgICAgICAgZ1snd2luZG93J10gPSB3aW5kb3c7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT5cbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCAoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICdCbG9iJyxcbiAgICAgICAgICAgICAgICAgICAgJ0NTU1N0eWxlU2hlZXQnLFxuICAgICAgICAgICAgICAgICAgICAnY3VzdG9tRWxlbWVudHMnLFxuICAgICAgICAgICAgICAgICAgICAnQ3VzdG9tRXZlbnQnLFxuICAgICAgICAgICAgICAgICAgICAnZG9jdW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnRE9NRXhjZXB0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgJ0RPTUltcGxlbWVudGF0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgJ0RvY3VtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ0RvY3VtZW50RnJhZ21lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnRE9NUGFyc2VyJyxcbiAgICAgICAgICAgICAgICAgICAgJ0VsZW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnRWxlbWVudEludGVybmFscycsXG4gICAgICAgICAgICAgICAgICAgICdFdmVudCcsXG4gICAgICAgICAgICAgICAgICAgICdFdmVudFRhcmdldCcsXG4gICAgICAgICAgICAgICAgICAgICdnZXRDb21wdXRlZFN0eWxlJyxcbiAgICAgICAgICAgICAgICAgICAgJ0hUTUxCdXR0b25FbGVtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ0hUTUxDb2xsZWN0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgJ0hUTUxEaXZFbGVtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ0hUTUxEb2N1bWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdIVE1MRWxlbWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdIVE1MRm9ybUVsZW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnSFRNTElucHV0RWxlbWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdIVE1MU2NyaXB0RWxlbWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdyZXF1ZXN0QW5pbWF0aW9uRnJhbWUnLFxuICAgICAgICAgICAgICAgICAgICAnSFRNTFNlbGVjdEVsZW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnSFRNTFRlbXBsYXRlRWxlbWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdIVE1MVGV4dEFyZWFFbGVtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ0lucHV0RXZlbnQnLFxuICAgICAgICAgICAgICAgICAgICAnS2V5Ym9hcmRFdmVudCcsXG4gICAgICAgICAgICAgICAgICAgICdNdXRhdGlvbk9ic2VydmVyJyxcbiAgICAgICAgICAgICAgICAgICAgJ25hdmlnYXRvcicsXG4gICAgICAgICAgICAgICAgICAgICdOb2RlJyxcbiAgICAgICAgICAgICAgICAgICAgJ05vZGVGaWx0ZXInLFxuICAgICAgICAgICAgICAgICAgICAnTm9kZUxpc3QnLFxuICAgICAgICAgICAgICAgICAgICAnc2VsZicsXG4gICAgICAgICAgICAgICAgICAgICdTaGFkb3dSb290JyxcbiAgICAgICAgICAgICAgICAgICAgJ1hNTFNlcmlhbGl6ZXInLFxuICAgICAgICAgICAgICAgIF0uZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ1trZXldID0gd2luZG93W2tleV0gICAgXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIHNldHRpbmcga2V5XCIsIGtleSwgZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGltcG9ydChcImRvbS1zdG9yYWdlXCIpLnRoZW4oKHtkZWZhdWx0OiBTdG9yYWdlfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgZy5sb2NhbFN0b3JhZ2UgPSBuZXcgU3RvcmFnZShudWxsLCB7c3RyaWN0OiB0cnVlfSk7XG4gICAgICAgICAgICAgICAgICAgIGcuc2Vzc2lvblN0b3JhZ2UgPSBuZXcgU3RvcmFnZShudWxsLCB7c3RyaWN0OiB0cnVlfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgd2luZG93Wydsb2NhbFN0b3JhZ2UnXSA9IGcubG9jYWxTdG9yYWdlO1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3dbJ3Nlc3Npb25TdG9yYWdlJ10gPSBnLnNlc3Npb25TdG9yYWdlO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZyk7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgbG9hZGluZyBkb20tc3RvcmFnZVwiLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG5cbiAgICB9KTtcbn1cblxuZXhwb3J0IHtpbml0SlNET00sIEpTRE9NRXhwb3J0fSBcblxuIiwgImltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCAqIGFzIGNoYWkgZnJvbSAnY2hhaSc7XG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5cblxuLy8gbGFuZ3VhZ2U9aHRtbFxubGV0IGh0bWwxID0gYFxuICAgIDxtb25zdGVyLXNwbGl0LXBhbmVsIGlkPVwibXktc3BsaXQtcGFuZWxcIj5cbiAgICAgICBcbiAgICA8L21vbnN0ZXItc3BsaXQtcGFuZWw+XG5gO1xuXG5sZXQgU3BsaXRTY3JlZW47XG5cbmRlc2NyaWJlKCdTcGxpdFNjcmVlbicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgaW1wb3J0KFwiZWxlbWVudC1pbnRlcm5hbHMtcG9seWZpbGxcIikuY2F0Y2goZSA9PiBkb25lKGUpKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgbGV0IHByb21pc2VzID0gW11cblxuICAgICAgICAgICAgaWYgKCFnbG9iYWxbJ2NyeXB0byddKSB7XG4gICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaChpbXBvcnQoXCJAcGVjdWxpYXIvd2ViY3J5cHRvXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgQ3J5cHRvID0gbVsnQ3J5cHRvJ107XG4gICAgICAgICAgICAgICAgICAgIGdsb2JhbFsnY3J5cHRvJ10gPSBuZXcgQ3J5cHRvKCk7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2xheW91dC9zcGxpdC1wYW5lbC5tanNcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIFNwbGl0U2NyZWVuID0gbVsnU3BsaXRQYW5lbCddO1xuICAgICAgICAgICAgfSkpXG5cbiAgICAgICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCgpPT57XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKVxuXG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3Nob3VsZCBoYXZlIGJ1dHRvbnMgYW5kIFNwbGl0U2NyZWVuJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcblxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgU3BsaXRTY3JlZW4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXktc3BsaXQtcGFuZWwnKVxuICAgICAgICAgICAgICAgICAgICBleHBlY3QoU3BsaXRTY3JlZW4pLmlzLmluc3RhbmNlb2YoSFRNTEVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRpdiA9IFNwbGl0U2NyZWVuLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignZGl2Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoZGl2Lmhhc0NoaWxkTm9kZXMoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgMTAwKVxuXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0sIDApXG5cblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pOyIsICJpbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgKiBhcyBjaGFpIGZyb20gJ2NoYWknO1xuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXG5cbi8vIGxhbmd1YWdlPWh0bWxcbmxldCBodG1sMSA9IGBcbiAgICA8bW9uc3Rlci1wYW5lbCBpZD1cIm15LXBhbmVsXCI+XG4gICAgICAgXG4gICAgPC9tb25zdGVyLXBhbmVsPlxuYDtcblxubGV0IFNwbGl0U2NyZWVuO1xuXG5kZXNjcmliZSgnU3BsaXRTY3JlZW4nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgIGltcG9ydChcImVsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsXCIpLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGxldCBwcm9taXNlcyA9IFtdXG5cbiAgICAgICAgICAgIGlmICghZ2xvYmFsWydjcnlwdG8nXSkge1xuICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2goaW1wb3J0KFwiQHBlY3VsaWFyL3dlYmNyeXB0b1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IENyeXB0byA9IG1bJ0NyeXB0byddO1xuICAgICAgICAgICAgICAgICAgICBnbG9iYWxbJ2NyeXB0byddID0gbmV3IENyeXB0bygpO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChpbXBvcnQoXCIuLi8uLi8uLi8uLi9zb3VyY2UvY29tcG9uZW50cy9sYXlvdXQvcGFuZWwubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBTcGxpdFNjcmVlbiA9IG1bJ1BhbmVsJ107XG4gICAgICAgICAgICB9KSlcblxuICAgICAgICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCk9PntcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpXG5cbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIGhhdmUgYnV0dG9ucyBhbmQgU3BsaXRTY3JlZW4nLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBTcGxpdFNjcmVlbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteS1wYW5lbCcpXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChTcGxpdFNjcmVlbikuaXMuaW5zdGFuY2VvZihIVE1MRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGl2ID0gU3BsaXRTY3JlZW4uc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdkaXYnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChkaXYuaGFzQ2hpbGROb2RlcygpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICB9LCAxMDApXG5cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSwgMClcblxuXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxufSk7IiwgImltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCAqIGFzIGNoYWkgZnJvbSAnY2hhaSc7XG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtzZXR1cEludGVyc2VjdGlvbk9ic2VydmVyTW9ja30gZnJvbSBcIi4uLy4uLy4uL3V0aWwvaW50ZXJzZWN0aW9uLW1vY2subWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcbmNoYWkudXNlKGNoYWlEb20pO1xuXG5jb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcbmxldCBtb2NraW50ZXJzZWN0aW9ub2JzZXJ2ZXI7XG5cbmxldCBodG1sMSA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDFcIj5cbiAgICA8L2Rpdj5cbmA7XG5cbmRlc2NyaWJlKCdSZWxvYWQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAvLyBqc2RvbS10ZXN0aW5nLW1vY2tzIG5lZWQgamVzdFxuICAgIGxldCBSZWxvYWQsIHZpZXdwb3J0LCBtb2NrVmlld3BvcnQ7XG5cbiAgICBhZnRlcihmdW5jdGlvbiAoKSB7XG4gICAgICAgIG1vY2tpbnRlcnNlY3Rpb25vYnNlcnZlci5yZXN0b3JlKCk7XG4gICAgfSlcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgIFxuICAgICAgICBcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgIGltcG9ydChcImVsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsXCIpLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIG1vY2tpbnRlcnNlY3Rpb25vYnNlcnZlciA9IHNldHVwSW50ZXJzZWN0aW9uT2JzZXJ2ZXJNb2NrKCk7XG5cbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vcmVsb2FkLm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgUmVsb2FkID0gbVsnUmVsb2FkJ107XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpXG5cblxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ25ldyBSZWxvYWQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuXG5cbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgZnJvbSB0ZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIC8vIGxhbmd1YWdlPUhUTUxcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBgXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJ0ZXN0MlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1vbnN0ZXItcmVsb2FkPjwvbW9uc3Rlci1yZWxvYWQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIGA7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXQoJ3Nob3VsZCBjb250YWlucyBtb25zdGVyLXJlbG9hZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MicpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLXJlbG9hZCcpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIHJlbG9hZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1yZWxvYWQnKSkuaXMuaW5zdGFuY2VvZihSZWxvYWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBtb2NrcztcbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdzaG91bGQgaGF2ZSBubyBvcHRpb25zJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgY29uc3QgcmVsb2FkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1yZWxvYWQnKTtcbiAgICAgICAgICAgIG1vY2tzLmFwcGVuZENoaWxkKHJlbG9hZCk7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG5cbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLXJlbG9hZCcpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSwgMClcblxuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbiAgICBkZXNjcmliZSgnbG9hZCBjb250ZW50JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBtb2NrcywgZmV0Y2hSZWZlcmVuY2UsIGludGVyc2VjdGlvbk9ic2VydmVyO1xuICAgICAgICBiZWZvcmVFYWNoKChkb25lKSA9PiB7XG4gICAgICAgICAgICBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgLy8gbGFuZ3VhZ2U9SFRNTFxuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gYFxuICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJ0aGlzLWNvbnRlbnRcIj5cblxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgYDtcblxuICAgICAgICAgICAgZmV0Y2hSZWZlcmVuY2UgPSBnbG9iYWxbJ2ZldGNoJ107XG5cbiAgICAgICAgICAgIGdsb2JhbFsnZmV0Y2gnXSA9IGZ1bmN0aW9uICh1cmwsIG9wdGlvbnMpIHtcblxuICAgICAgICAgICAgICAgIGxldCBoZWFkZXJzID0gbmV3IE1hcDtcbiAgICAgICAgICAgICAgICBoZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ3RleHQvaHRtbCcpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBvazp0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOjIwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlMiwgcmVqZWN0MikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlMignaGVsbG8gd29ybGQhJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICAgICAgZ2xvYmFsWydmZXRjaCddID0gZmV0Y2hSZWZlcmVuY2U7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3Nob3VsZCBsb2FkIGNvbnRlbnQgZnJvbSB1cmwnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBjb25zdCByZWxvYWQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXJlbG9hZCcpO1xuICAgICAgICAgICAgcmVsb2FkLnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLXVybCcsICdodHRwOi8vbG9jYWxob3N0LycpXG5cbiAgICAgICAgICAgIHJlbG9hZC5hZGRFdmVudExpc3RlbmVyKCdtb25zdGVyLWZldGNoZWQnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbW9uc3Rlci1yZWxvYWQnKTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQpLmNvbnRhaW4uaHRtbCgnaGVsbG8gd29ybGQnKTtcbiAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBtb2Nrcy5hcHBlbmRDaGlsZChyZWxvYWQpO1xuICAgICAgICAgICAgbW9ja2ludGVyc2VjdGlvbm9ic2VydmVyLmdldEluc3RhbmNlKCkuZW50ZXJOb2RlKCk7XG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxufSk7IiwgImltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXR1cEludGVyc2VjdGlvbk9ic2VydmVyTW9jayhcbiAgICB7XG4gICAgICAgIHJvb3QgPSBudWxsLFxuICAgICAgICByb290TWFyZ2luID0gJycsXG4gICAgICAgIHRocmVzaG9sZHMgPSBbXSxcbiAgICAgICAgZGlzY29ubmVjdCA9ICgpID0+IG51bGwsXG4gICAgICAgIG9ic2VydmUgPSAoKSA9PiBudWxsLFxuICAgICAgICB0YWtlUmVjb3JkcyA9ICgpID0+IFtdLFxuICAgICAgICB1bm9ic2VydmUgPSAoKSA9PiBudWxsLFxuICAgIH0gPSB7fSkge1xuXG4gICAgY29uc3Qgc2F2ZWRJbXBsZW1lbnRhdGlvbiA9IHdpbmRvdy5JbnRlcnNlY3Rpb25PYnNlcnZlcjtcblxuICAgIGxldCBsYXN0T2JqZWN0O1xuXG4gICAgY2xhc3MgTW9ja0ludGVyc2VjdGlvbk9ic2VydmVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoY2FsbGJhY2ssIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgICAgICAgICB0aGlzLnJvb3RNYXJnaW4gPSByb290TWFyZ2luO1xuICAgICAgICAgICAgdGhpcy50aHJlc2hvbGRzID0gdGhyZXNob2xkcztcbiAgICAgICAgICAgIHRoaXMuZGlzY29ubmVjdCA9IGRpc2Nvbm5lY3Q7XG4gICAgICAgICAgICB0aGlzLm9ic2VydmUgPSBvYnNlcnZlO1xuICAgICAgICAgICAgdGhpcy50YWtlUmVjb3JkcyA9IHRha2VSZWNvcmRzO1xuICAgICAgICAgICAgdGhpcy51bm9ic2VydmUgPSB1bm9ic2VydmU7XG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgICAgICAgICBsYXN0T2JqZWN0ID0gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIGVudGVyTm9kZSgpIHtcblxuICAgICAgICAgICAgY29uc3QgZW50cmllcyA9IFtdO1xuICAgICAgICAgICAgZW50cmllcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBpc0ludGVyc2VjdGluZzogdHJ1ZVxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgdGhpc1snY2FsbGJhY2snXShlbnRyaWVzLCB0aGlzKTtcbiAgICAgICAgfVxuXG5cbiAgICB9XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCAnSW50ZXJzZWN0aW9uT2JzZXJ2ZXInLCB7XG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiBNb2NrSW50ZXJzZWN0aW9uT2JzZXJ2ZXJcbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnbG9iYWwsICdJbnRlcnNlY3Rpb25PYnNlcnZlcicsIHtcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IE1vY2tJbnRlcnNlY3Rpb25PYnNlcnZlclxuICAgIH0pO1xuXG5cbiAgICByZXR1cm4ge1xuICAgICAgICByZXN0b3JlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB3aW5kb3cuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPSBzYXZlZEltcGxlbWVudGF0aW9uO1xuICAgICAgICB9LFxuICAgICAgICBnZXRJbnN0YW5jZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGxhc3RPYmplY3Q7XG4gICAgICAgIH1cbiAgICB9XG59IiwgImltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCAqIGFzIGNoYWkgZnJvbSAnY2hhaSc7XG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuaW1wb3J0IHtSZXNpemVPYnNlcnZlck1vY2t9IGZyb20gXCIuLi8uLi8uLi91dGlsL3Jlc2l6ZS1vYnNlcnZlci5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXG5sZXQgaHRtbDEgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QxXCI+XG4gICAgPC9kaXY+XG5gO1xuXG5sZXQgaHRtbDIgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QyXCI+XG4gICAgPG1vbnN0ZXItc3RhdGUtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWJpbmQ9XCJwYXRoOnZhbHVlcy5jaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItb3B0aW9ucz0ne1xuICBcInVybFwiOiBcIm1vY2stZGF0YS5qc29uXCIsXG4gIFwibWFwcGluZ1wiOiB7XG4gICAgXCJ2YWx1ZVBhdGhcIjogXCJcXCR7Zmlyc3RfbmFtZX0gXFwke2xhc3RfbmFtZX1cIixcbiAgICBcImtleVBhdGhcIjogXCJpZFwiXG4gIH0sXG4gICAgICBcInR5cGVcIjpcImNoZWNrYm94XCJcblxufSc+PC9tb25zdGVyLXN0YXRlLWJ1dHRvbj5cbiAgICA8L2Rpdj5cbmA7XG5cbmxldCBTdGF0ZUJ1dHRvbjtcblxuZGVzY3JpYmUoJ1N0YXRlQnV0dG9uJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYWZ0ZXIoZnVuY3Rpb24gKCkge1xuICAgIH0pXG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgIGltcG9ydChcImVsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsXCIpLmNhdGNoKGUgPT4gZG9uZShlKSk7XG5cbiAgICAgICAgICAgIGlmKCFnbG9iYWwuUmVzaXplT2JzZXJ2ZXIpIHtcbiAgICAgICAgICAgICAgICBnbG9iYWwuUmVzaXplT2JzZXJ2ZXIgPSBSZXNpemVPYnNlcnZlck1vY2s7XG4gICAgICAgICAgICB9ICAgICAgICAgICAgXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vc3RhdGUtYnV0dG9uLm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgU3RhdGVCdXR0b24gPSBtWydTdGF0ZUJ1dHRvbiddO1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKVxuXG5cbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCduZXcgU3RhdGVCdXR0b24nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJ2NyZWF0ZSBmcm9tIHRlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDI7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXQoJ3Nob3VsZCBjb250YWlucyBtb25zdGVyLXN0YXRlLWJ1dHRvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MicpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLXN0YXRlLWJ1dHRvbicpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIHN0YXRlLWJ1dHRvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1zdGF0ZS1idXR0b24nKSkuaXMuaW5zdGFuY2VvZihTdGF0ZUJ1dHRvbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIGhhdmUgbm8gb3B0aW9ucycsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1zdGF0ZS1idXR0b24nKTtcbiAgICAgICAgICAgIG1vY2tzLmFwcGVuZENoaWxkKGJ1dHRvbik7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSBidXR0b24uc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdidXR0b24nKTtcblxuICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9ucykuaXMuaW5zdGFuY2VvZihIVE1MQnV0dG9uRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25zLmhhc0NoaWxkTm9kZXMoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0sIDApXG5cblxuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG59KTsiLCAiXG5cblxuZXhwb3J0IHtSZXNpemVPYnNlcnZlck1vY2t9XG5cblxuY2xhc3MgUmVzaXplT2JzZXJ2ZXJNb2NrIHtcbiAgICBjb25zdHJ1Y3RvcihjYWxsYmFjaykge1xuICAgICAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICAgIHRoaXMuZWxlbWVudHMgPSBbXTtcbiAgICB9XG5cbiAgICBvYnNlcnZlKGVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIHVub2JzZXJ2ZShlbGVtZW50KSB7XG4gICAgICAgIHRoaXMuZWxlbWVudHMgPSB0aGlzLmVsZW1lbnRzLmZpbHRlcigoZWwpID0+IGVsICE9PSBlbGVtZW50KTtcbiAgICB9XG5cbiAgICBkaXNjb25uZWN0KCkge1xuICAgICAgICB0aGlzLmVsZW1lbnRzID0gW107XG4gICAgfVxuXG4gICAgdHJpZ2dlclJlc2l6ZShlbnRyaWVzKSB7XG4gICAgICAgIHRoaXMuY2FsbGJhY2soZW50cmllcywgdGhpcyk7XG4gICAgfVxufVxuXG4iLCAiaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0ICogYXMgY2hhaSBmcm9tICdjaGFpJztcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5pbXBvcnQge1Jlc2l6ZU9ic2VydmVyTW9ja30gZnJvbSBcIi4uLy4uLy4uL3V0aWwvcmVzaXplLW9ic2VydmVyLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5cbmxldCBodG1sMSA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDFcIj5cbiAgICA8L2Rpdj5cbmA7XG5cbmxldCBodG1sMiA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDJcIj5cbiAgICA8bW9uc3Rlci1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYmluZD1cInBhdGg6dmFsdWVzLmNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1vcHRpb25zPSd7XG4gIFwidXJsXCI6IFwibW9jay1kYXRhLmpzb25cIixcbiAgXCJtYXBwaW5nXCI6IHtcbiAgICBcInNlbGVjdG9yXCI6IFwiKlwiLFxuICAgIFwidmFsdWVUZW1wbGF0ZVwiOiBcIlxcJHtmaXJzdF9uYW1lfSBcXCR7bGFzdF9uYW1lfVwiLFxuICAgIFwibGFiZWxUZW1wbGF0ZVwiOiBcImlkXCJcbiAgfSxcbiAgICAgIFwidHlwZVwiOlwiY2hlY2tib3hcIlxuXG59Jz48L21vbnN0ZXItc2VsZWN0PlxuICAgIDwvZGl2PlxuYDtcblxubGV0IFNlbGVjdCwgZmV0Y2hSZWZlcmVuY2U7XG5cbmRlc2NyaWJlKCdTZWxlY3QnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgIGltcG9ydChcImVsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsXCIpLmNhdGNoKGUgPT4gZG9uZShlKSk7XG5cbiAgICAgICAgICAgIGZldGNoUmVmZXJlbmNlID0gZ2xvYmFsWydmZXRjaCddO1xuXG4gICAgICAgICAgICBpZiAoIWdsb2JhbC5SZXNpemVPYnNlcnZlcikge1xuICAgICAgICAgICAgICAgIGdsb2JhbC5SZXNpemVPYnNlcnZlciA9IFJlc2l6ZU9ic2VydmVyTW9jaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9zZWxlY3QubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBTZWxlY3QgPSBtWydTZWxlY3QnXTtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSlcblxuXG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnV2l0aCBmZXRjaCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG5cbiAgICAgICAgICAgIGdsb2JhbFsnZmV0Y2gnXSA9IGZ1bmN0aW9uICh1cmwsIG9wdGlvbnMpIHtcblxuICAgICAgICAgICAgICAgIGxldCBoZWFkZXJzID0gbmV3IE1hcDtcbiAgICAgICAgICAgICAgICBoZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUyLCByZWplY3QyKSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGpzb24gPSBKU09OLnBhcnNlKGBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmaXJzdF9uYW1lXCI6IFwiQWxleGlhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGFzdF9uYW1lXCI6IFwiT3VnaHRyaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImVtYWlsXCI6IFwiYW91Z2h0cmlnaHQwQGV4YmxvZy5qcFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImdlbmRlclwiOiBcIkFnZW5kZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb3VudHJ5XCI6IFwibW5cIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmaXJzdF9uYW1lXCI6IFwiQmV0aFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxhc3RfbmFtZVwiOiBcIkJvZGRpbmd0b25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbWFpbFwiOiBcImJib2RkaW5ndG9uMUBzdGF0Y291bnRlci5jb21cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJnZW5kZXJcIjogXCJOb24tYmluYXJ5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY291bnRyeVwiOiBcInN5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmaXJzdF9uYW1lXCI6IFwiU2hlbGxpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGFzdF9uYW1lXCI6IFwiQSdCYXJyb3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbWFpbFwiOiBcInNhYmFycm93MkBnb29nbGUuY28udWtcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJnZW5kZXJcIjogXCJQb2x5Z2VuZGVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY291bnRyeVwiOiBcIm5vXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXWApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUyKEpTT04uc3RyaW5naWZ5KGpzb24pKVxuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgfTtcblxuXG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgICAgIGdsb2JhbFsnZmV0Y2gnXSA9IGZldGNoUmVmZXJlbmNlO1xuICAgICAgICB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgZnJvbSB0ZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwyO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgICAgICAgICBnbG9iYWxbJ2ZldGNoJ10gPSBmZXRjaFJlZmVyZW5jZTtcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgZnJvbSB0ZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdCgnc2hvdWxkIGNvbnRhaW5zIG1vbnN0ZXItc2VsZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QyJykpLmNvbnRhaW4uaHRtbCgnPG1vbnN0ZXItc2VsZWN0Jyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdzaG91bGQgaW5zdGFuY2Ugb2Ygc2VsZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItc2VsZWN0Jyk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHNlbGVjdCkuaXMuaW5zdGFuY2VvZihTZWxlY3QpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgaGF2ZSBvcHRpb25zJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItc2VsZWN0Jyk7XG4gICAgICAgICAgICAgICAgc2VsZWN0LnNldE9wdGlvbigndXJsJywgJ2h0dHBzOi8vZXhhbXBsZS5jb20nKVxuICAgICAgICAgICAgICAgIHNlbGVjdC5zZXRPcHRpb24oJ21hcHBpbmcuc2VsZWN0b3InLCAnKicpXG4gICAgICAgICAgICAgICAgc2VsZWN0LnNldE9wdGlvbignbWFwcGluZy5sYWJlbFRlbXBsYXRlJywgJyR7aWR9JylcbiAgICAgICAgICAgICAgICBzZWxlY3Quc2V0T3B0aW9uKCdtYXBwaW5nLnZhbHVlVGVtcGxhdGUnLCAnJHtpZH0nKVxuXG4gICAgICAgICAgICAgICAgc2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoJ21vbnN0ZXItb3B0aW9ucy1zZXQnLCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zID0gc2VsZWN0LnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl0nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9ucy5sZW5ndGgpLmlzLmVxdWFsKDMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uSHRtbCA9IHNlbGVjdC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25zXScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25IdG1sKS5jb250YWluLmh0bWwoJ2RhdGEtbW9uc3Rlci1pbnNlcnQtcmVmZXJlbmNlPVwib3B0aW9ucy0wXCInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9uSHRtbCkuY29udGFpbi5odG1sKCdkYXRhLW1vbnN0ZXItaW5zZXJ0LXJlZmVyZW5jZT1cIm9wdGlvbnMtMVwiJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG9wdGlvbkh0bWwpLmNvbnRhaW4uaHRtbCgnZGF0YS1tb25zdGVyLWluc2VydC1yZWZlcmVuY2U9XCJvcHRpb25zLTJcIicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25IdG1sKS5jb250YWluLm5vdC5odG1sKCdkYXRhLW1vbnN0ZXItaW5zZXJ0LXJlZmVyZW5jZT1cIm9wdGlvbnMtM1wiJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lKGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgfSwgMTAwKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgbW9ja3MuYXBwZW5kQ2hpbGQoc2VsZWN0KTtcblxuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdzaG91bGQgaGF2ZSBubyBvcHRpb25zJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXNlbGVjdCcpO1xuICAgICAgICAgICAgbW9ja3MuYXBwZW5kQ2hpbGQoc2VsZWN0KTtcblxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHNlbGVjdC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25zXScpO1xuXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25zKS5pcy5pbnN0YW5jZW9mKEhUTUxEaXZFbGVtZW50KTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhID0gb3B0aW9ucy5wYXJlbnROb2RlLm91dGVySFRNTDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYiA9IG9wdGlvbnMuY2hpbGROb2Rlcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25zLmhhc0NoaWxkTm9kZXMoKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9LCAwKVxuXG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG59KTsiLCAiaW1wb3J0IHtEYXRhVXJsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2RhdGF1cmwubWpzXCI7XG5cbmltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCAqIGFzIGNoYWkgZnJvbSAnY2hhaSc7XG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuaW1wb3J0IHtSZXNpemVPYnNlcnZlck1vY2t9IGZyb20gXCIuLi8uLi8uLi91dGlsL3Jlc2l6ZS1vYnNlcnZlci5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXG5sZXQgaHRtbDEsIG9wdGlvbnMsIGh0bWwyLCBDb25maXJtQnV0dG9uO1xuXG5kZXNjcmliZSgnQ29uZmlybUJ1dHRvbicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgIGltcG9ydChcImVsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsXCIpLmNhdGNoKGUgPT4gZG9uZShlKSk7ICAgIFxuICAgICAgICBcbiAgICAgICAgaWYoIWdsb2JhbC5SZXNpemVPYnNlcnZlcikge1xuICAgICAgICAgICAgZ2xvYmFsLlJlc2l6ZU9ic2VydmVyID0gUmVzaXplT2JzZXJ2ZXJNb2NrO1xuICAgICAgICB9XG5cbiAgICAgICAgb3B0aW9ucyA9IG5ldyBEYXRhVXJsKGJ0b2EoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgcG9wcGVyOiB7XG4gICAgICAgICAgICAgICAgcGxhY2VtZW50OiBcInRvcFwiXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KSksICdhcHBsaWNhdGlvbi9qc29uJywgdHJ1ZSkudG9TdHJpbmcoKVxuXG4gICAgICAgIGh0bWwyID0gYFxuICAgIDxkaXYgaWQ9XCJ0ZXN0MlwiPlxuICAgIDxtb25zdGVyLWNvbmZpcm0tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWJpbmQ9XCJwYXRoOnZhbHVlcy5jaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItb3B0aW9ucz1cImAgKyBvcHRpb25zICsgYFwiPjwvbW9uc3Rlci1jb25maXJtLWJ1dHRvbj5cbiAgICA8L2Rpdj5cbmA7XG5cbiAgICAgICAgaHRtbDEgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QxXCI+XG4gICAgPC9kaXY+XG5gXG5cblxuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9jb25maXJtLWJ1dHRvbi5tanNcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIENvbmZpcm1CdXR0b24gPSBtWydDb25maXJtQnV0dG9uJ107XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpXG5cblxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ25ldyBDb25maXJtQnV0dG9uJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgZnJvbSB0ZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwyO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcblxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgZGVzY3JpYmUoJ2NyZWF0ZSBmcm9tIHRlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGl0KCdzaG91bGQgY29udGFpbnMgbW9uc3Rlci1jb25maXJtLWJ1dHRvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MicpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLWNvbmZpcm0tYnV0dG9uJyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdzaG91bGQgaW5zdGFuY2Ugb2YgYnV0dG9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWNvbmZpcm0tYnV0dG9uJykpLmlzLmluc3RhbmNlb2YoQ29uZmlybUJ1dHRvbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIGhhdmUgY2hpbGRzJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBjb25zdCBidXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWNvbmZpcm0tYnV0dG9uJyk7XG4gICAgICAgICAgICBtb2Nrcy5hcHBlbmRDaGlsZChidXR0b24pO1xuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50ID0gYnV0dG9uLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignbW9uc3Rlci1idXR0b24nKTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGNvbnRlbnQuaGFzQ2hpbGROb2RlcygpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSwgMClcblxuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbn0pOyIsICJpbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgKiBhcyBjaGFpIGZyb20gJ2NoYWknO1xuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcbmltcG9ydCB7RGF0YXNvdXJjZX0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2UubWpzXCI7XG5pbXBvcnQge1Byb2Nlc3Npbmd9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdXRpbC9wcm9jZXNzaW5nLm1qc1wiO1xuXG5pbXBvcnQge3N0b3JhZ2VPYmplY3RTeW1ib2x9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvZGF0YS9kYXRhc291cmNlL3N0b3JhZ2UubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcbmNoYWkudXNlKGNoYWlEb20pO1xuXG5sZXQgaHRtbDEgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QxXCI+XG4gICAgPG1vbnN0ZXItZm9ybSBpZD1cImZvcm0xXCI+PC9tb25zdGVyLWZvcm0+XG4gICAgPC9kaXY+XG5gO1xuXG5sZXQgaHRtbDIgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QyXCI+XG4gICAgICAgIDxtb25zdGVyLWZvcm0gaWQ9XCJmb3JtMlwiXG4gICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWRhdGFzb3VyY2U9XCJsb2NhbHN0b3JhZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1kYXRhc291cmNlLWFyZ3VtZW50cz0nXCJ0ZXN0LWtleVwiJz5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9XCJjb250cm9sMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImNvbnRyb2wxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1iaW5kPVwicGF0aDphXCI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9XCJjb250cm9sMlwiXG4gICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1iaW5kPVwicGF0aDpiXCI+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8L21vbnN0ZXItZm9ybT5cbiAgICA8L2Rpdj5cbmA7XG5cbmRlc2NyaWJlKCdGb3JtJywgZnVuY3Rpb24gKCkge1xuXG4gICAgbGV0IGZvcm07XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBpbXBvcnQoXCJlbGVtZW50LWludGVybmFscy1wb2x5ZmlsbFwiKS5jYXRjaChlID0+IGRvbmUoZSkpO1xuICAgICAgICBcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoeCkgPT4ge1xuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9mb3JtLm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9ybSA9IG1bJ0Zvcm0nXTtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSlcbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgndGVzdC1rZXknKVxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnSFRNTC1UZW1wbGF0ZXMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgZGVzY3JpYmUoJ2NyZWF0ZSBmcm9tIHRlbXBsYXRlIGh0bWwxJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG4gICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3Rlc3Qta2V5JywgJ3t9JylcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGNvbnRhaW5zIG1vbnN0ZXItZm9ybScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJykpLmNvbnRhaW4uaHRtbCgnPG1vbnN0ZXItZm9ybScpO1xuICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUgaHRtbDInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGJlZm9yZUVhY2goKGRvbmUpID0+IHtcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndGVzdC1rZXknLCBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgIGE6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGI6IDcsXG4gICAgICAgICAgICAgICAgICAgIGM6IFsxLCA1LCA2XSxcbiAgICAgICAgICAgICAgICAgICAgZDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMjtcbiAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGNvbnRhaW5zIG1vbnN0ZXItZm9ybScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwyO1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MicpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLWZvcm0nKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGNsaWNrJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwyO1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MicpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLWZvcm0nKTtcblxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZm9ybTInKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3JtLnNoYWRvd1Jvb3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkb25lKG5ldyBFcnJvcignbm8gc2hhZG93Um9vdCcpKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wxID0gZm9ybS5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ3Nsb3QnKS5hc3NpZ25lZEVsZW1lbnRzKClbMF0ucXVlcnlTZWxlY3RvcignaW5wdXQnKVxuICAgICAgICAgICAgICAgICAgICBjb250cm9sMS5jbGljaygpO1xuXG5cbiAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgIH0sIDEpXG5cbiAgICAgICAgICAgIH0pO1xuXG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pXG5cbn0pXG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wsIGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgRGF0YXNvdXJjZSB9IGZyb20gXCIuLi9kYXRhc291cmNlLm1qc1wiO1xuXG5leHBvcnQgeyBTdG9yYWdlLCBzdG9yYWdlT2JqZWN0U3ltYm9sIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHN0b3JhZ2VPYmplY3RTeW1ib2wgPSBTeW1ib2wuZm9yKFxuXHRcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL3N0b3JhZ2UvQEBzdG9yYWdlT2JqZWN0XCIsXG4pO1xuXG4vKipcbiAqIFRoZSBjbGFzcyByZXByZXNlbnRzIGEgcmVjb3JkLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjIuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IFRoZSBTdG9yYWdlIGNsYXNzIGVuY2Fwc3VsYXRlcyB0aGUgYWNjZXNzIHRvIGRhdGEgb2JqZWN0cyBvdmVyIFdlYlN0b3JhZ2VBUEkuXG4gKi9cbmNsYXNzIFN0b3JhZ2UgZXh0ZW5kcyBEYXRhc291cmNlIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgTG9jYWxTdG9yYWdlIEtleVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKi9cblx0Y29uc3RydWN0b3Ioa2V5KSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnNldE9wdGlvbihcImtleVwiLCB2YWxpZGF0ZVN0cmluZyhrZXkpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL3N0b3JhZ2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGtleT11bmRlZmluZWQgTG9jYWxTdG9yYWdlIEtleVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0a2V5OiB1bmRlZmluZWQsXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHRocm93cyB7RXJyb3J9IHRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZGVyaXZlZCBjbGFzc2VzLlxuXHQgKiBAcmV0dXJuIHtleHRlcm5hbDpTdG9yYWdlfVxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0W3N0b3JhZ2VPYmplY3RTeW1ib2xdKCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZGVyaXZlZCBjbGFzc2VzXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgb3B0aW9ucyBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQganNvbiBkZWZpbml0aW9uXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgb2JqZWN0XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgZGF0YSBjYW5ub3QgYmUgcmVhZFxuXHQgKi9cblx0cmVhZCgpIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRcdGNvbnN0IHN0b3JhZ2UgPSBzZWxmW3N0b3JhZ2VPYmplY3RTeW1ib2xdKCk7XG5cblx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcblx0XHRcdGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKHN0b3JhZ2UuZ2V0SXRlbShzZWxmLmdldE9wdGlvbihcImtleVwiKSkpO1xuXHRcdFx0c2VsZi5zZXQoZGF0YSA/PyB7fSk7XG5cdFx0XHRyZXNvbHZlKCk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7U3RvcmFnZX1cblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBkYXRhIGNhbm5vdCBiZSB3cml0dGVuXG5cdCAqL1xuXHR3cml0ZSgpIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRcdGNvbnN0IHN0b3JhZ2UgPSBzZWxmW3N0b3JhZ2VPYmplY3RTeW1ib2xdKCk7XG5cblx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcblx0XHRcdGNvbnN0IGRhdGEgPSBzZWxmLmdldCgpO1xuXHRcdFx0aWYgKGRhdGEgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRzdG9yYWdlLnJlbW92ZUl0ZW0oc2VsZi5nZXRPcHRpb24oXCJrZXlcIikpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c3RvcmFnZS5zZXRJdGVtKHNlbGYuZ2V0T3B0aW9uKFwia2V5XCIpLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XG5cdFx0XHR9XG5cblx0XHRcdHJlc29sdmUoKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtTdG9yYWdlfVxuXHQgKi9cblx0Z2V0Q2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyBTdG9yYWdlKHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFJlYWxTdWJqZWN0KClbXCJvcHRpb25zXCJdLmtleSk7XG5cdH1cbn1cbiIsICJpbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgKiBhcyBjaGFpIGZyb20gJ2NoYWknO1xuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXG5sZXQgaHRtbDEgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QxXCI+XG4gICAgPC9kaXY+XG5gO1xuXG5sZXQgaHRtbDIgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QyXCI+XG4gICAgPG1vbnN0ZXItdHJlZS1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYmluZD1cInBhdGg6dmFsdWVzLmNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1vcHRpb25zPSd7XG4gIFwidXJsXCI6IFwibW9jay1kYXRhLmpzb25cIixcbiAgXCJtYXBwaW5nXCI6IHtcbiAgICBcInZhbHVlVGVtcGxhdGVcIjogXCJcXCR7Zmlyc3RfbmFtZX0gXFwke2xhc3RfbmFtZX1cIixcbiAgICBcImxhYmVsVGVtcGxhdGVcIjogXCJpZFwiLFxuICAgIFwic2VsZWN0b3JcIjogXCIqXCJcbiAgfSxcbiAgICAgIFwidHlwZVwiOlwiY2hlY2tib3hcIlxuXG59Jz48L21vbnN0ZXItdHJlZS1zZWxlY3Q+XG4gICAgPC9kaXY+XG5gO1xuXG5sZXQgVHJlZVNlbGVjdCwgZmV0Y2hSZWZlcmVuY2U7XG5cbmRlc2NyaWJlKCdUcmVlc2VsZWN0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgaW1wb3J0KFwiZWxlbWVudC1pbnRlcm5hbHMtcG9seWZpbGxcIikuY2F0Y2goZSA9PiBkb25lKGUpKTtcbiAgICAgICAgICAgIGZldGNoUmVmZXJlbmNlID0gZ2xvYmFsWydmZXRjaCddO1xuXG4gICAgICAgICAgICBpbXBvcnQoXCIuLi8uLi8uLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3RyZWUtc2VsZWN0Lm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgVHJlZVNlbGVjdCA9IG1bJ1RyZWVTZWxlY3QnXTtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSlcblxuXG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnV2l0aCBmZXRjaCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG5cbiAgICAgICAgICAgIGdsb2JhbFsnZmV0Y2gnXSA9IGZ1bmN0aW9uICh1cmwsIG9wdGlvbnMpIHtcblxuICAgICAgICAgICAgICAgIGxldCBoZWFkZXJzID0gbmV3IE1hcDtcbiAgICAgICAgICAgICAgICBoZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUyLCByZWplY3QyKSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGpzb24gPSBKU09OLnBhcnNlKGBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmaXJzdF9uYW1lXCI6IFwiQWxleGlhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGFzdF9uYW1lXCI6IFwiT3VnaHRyaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImVtYWlsXCI6IFwiYW91Z2h0cmlnaHQwQGV4YmxvZy5qcFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImdlbmRlclwiOiBcIkFnZW5kZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb3VudHJ5XCI6IFwibW5cIiAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGFyZW50XCI6IFwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZmlyc3RfbmFtZVwiOiBcIkJldGhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsYXN0X25hbWVcIjogXCJCb2RkaW5ndG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZW1haWxcIjogXCJiYm9kZGluZ3RvbjFAc3RhdGNvdW50ZXIuY29tXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2VuZGVyXCI6IFwiTm9uLWJpbmFyeVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvdW50cnlcIjogXCJzeVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInBhcmVudFwiOiBcIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImZpcnN0X25hbWVcIjogXCJTaGVsbGlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsYXN0X25hbWVcIjogXCJBJ0JhcnJvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImVtYWlsXCI6IFwic2FiYXJyb3cyQGdvb2dsZS5jby51a1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImdlbmRlclwiOiBcIlBvbHlnZW5kZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb3VudHJ5XCI6IFwibm9cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwYXJlbnRcIjogXCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gXWApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUyKEpTT04uc3RyaW5naWZ5KGpzb24pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgICAgICBnbG9iYWxbJ2ZldGNoJ10gPSBmZXRjaFJlZmVyZW5jZTtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMjtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgICAgICAgICAgZ2xvYmFsWydmZXRjaCddID0gZmV0Y2hSZWZlcmVuY2U7XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXQoJ3Nob3VsZCBjb250YWlucyBtb25zdGVyLXRyZWUtc2VsZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QyJykpLmNvbnRhaW4uaHRtbCgnPG1vbnN0ZXItdHJlZS1zZWxlY3QnKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXQoJ3Nob3VsZCBpbnN0YW5jZSBvZiBzZWxlY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItdHJlZS1zZWxlY3QnKSkuaXMuaW5zdGFuY2VvZihUcmVlU2VsZWN0KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGhhdmUgb3B0aW9ucycsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBjb25zdCB0cmVlc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10cmVlLXNlbGVjdCcpO1xuICAgICAgICAgICAgICAgIHRyZWVzZWxlY3Quc2V0T3B0aW9uKCd1cmwnLCAnaHR0cHM6Ly9leGFtcGxlLmNvbScpXG5cbiAgICAgICAgICAgICAgICB0cmVlc2VsZWN0LnNldE9wdGlvbignbWFwcGluZy5zZWxlY3RvcicsICcqJyk7XG4gICAgICAgICAgICAgICAgdHJlZXNlbGVjdC5zZXRPcHRpb24oJ21hcHBpbmcubGFiZWxUZW1wbGF0ZScsICcke2xhc3RfbmFtZX0nKTtcbiAgICAgICAgICAgICAgICB0cmVlc2VsZWN0LnNldE9wdGlvbignbWFwcGluZy52YWx1ZVRlbXBsYXRlJywgJyR7aWQgfCB0b3N0cmluZyB9Jyk7XG5cbiAgICAgICAgICAgICAgICB0cmVlc2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoJ21vbnN0ZXItb3B0aW9ucy1zZXQnLCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zID0gdHJlZXNlbGVjdC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAzIG9wdGlvbnMgKHNlZSBmZXRjaCBhYm92ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9ucy5sZW5ndGgpLmlzLmVxdWFsKDMpO1xuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25IdG1sID0gdHJlZXNlbGVjdC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25zXScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25IdG1sKS5jb250YWluLmh0bWwoJ2RhdGEtbW9uc3Rlci1pbnNlcnQtcmVmZXJlbmNlPVwib3B0aW9ucy0wXCInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9uSHRtbCkuY29udGFpbi5odG1sKCdkYXRhLW1vbnN0ZXItaW5zZXJ0LXJlZmVyZW5jZT1cIm9wdGlvbnMtMVwiJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG9wdGlvbkh0bWwpLmNvbnRhaW4uaHRtbCgnZGF0YS1tb25zdGVyLWluc2VydC1yZWZlcmVuY2U9XCJvcHRpb25zLTJcIicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25IdG1sKS5jb250YWluLm5vdC5odG1sKCdkYXRhLW1vbnN0ZXItaW5zZXJ0LXJlZmVyZW5jZT1cIm9wdGlvbnMtM1wiJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lKGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgfSwgMTAwKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgbW9ja3MuYXBwZW5kQ2hpbGQodHJlZXNlbGVjdCk7XG5cbiAgICAgICAgICAgIFxuXG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3Nob3VsZCBoYXZlIG5vIG9wdGlvbnMnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItdHJlZS1zZWxlY3QnKTtcbiAgICAgICAgICAgIG1vY2tzLmFwcGVuZENoaWxkKHNlbGVjdCk7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSBzZWxlY3Quc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uc10nKTtcblxuICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9ucykuaXMuaW5zdGFuY2VvZihIVE1MRGl2RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25zLmhhc0NoaWxkTm9kZXMoKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9LCAwKVxuXG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG59KTsiLCAiaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuXG5pbXBvcnQgKiBhcyBjaGFpIGZyb20gJ2NoYWknO1xuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXG5sZXQgaHRtbDEgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QxXCI+XG4gICAgPC9kaXY+XG5gO1xuXG5sZXQgaHRtbDIgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QyXCI+XG4gICAgPG1vbnN0ZXItYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWJpbmQ9XCJwYXRoOnZhbHVlcy5jaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItb3B0aW9ucz0ne1xuICBcInVybFwiOiBcIm1vY2stZGF0YS5qc29uXCIsXG4gIFwibWFwcGluZ1wiOiB7XG4gICAgXCJ2YWx1ZVBhdGhcIjogXCJcXCR7Zmlyc3RfbmFtZX0gXFwke2xhc3RfbmFtZX1cIixcbiAgICBcImtleVBhdGhcIjogXCJpZFwiXG4gIH0sXG4gICAgICBcInR5cGVcIjpcImNoZWNrYm94XCJcblxufSc+PC9tb25zdGVyLWJ1dHRvbj5cbiAgICA8L2Rpdj5cbmA7XG5cbmxldCBCdXR0b247XG5cbmRlc2NyaWJlKCdCdXR0b24nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgIGltcG9ydChcImVsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsXCIpLmNhdGNoKGUgPT4gZG9uZShlKSk7XG5cbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vYnV0dG9uLm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgQnV0dG9uID0gbVsnQnV0dG9uJ107XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpXG5cblxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ25ldyBCdXR0b24nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJ2NyZWF0ZSBmcm9tIHRlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDI7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXQoJ3Nob3VsZCBjb250YWlucyBtb25zdGVyLWJ1dHRvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MicpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLWJ1dHRvbicpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIGJ1dHRvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1idXR0b24nKSkuaXMuaW5zdGFuY2VvZihCdXR0b24pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3Nob3VsZCBoYXZlIG5vIG9wdGlvbnMnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItYnV0dG9uJyk7XG4gICAgICAgICAgICBtb2Nrcy5hcHBlbmRDaGlsZChidXR0b24pO1xuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGJ1dHRvbi5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvbicpO1xuXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25zKS5pcy5pbnN0YW5jZW9mKEhUTUxCdXR0b25FbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG9wdGlvbnMuaGFzQ2hpbGROb2RlcygpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSwgMTAwKVxuXG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxufSk7IiwgImltcG9ydCB7IGdldEdsb2JhbCB9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0ICogYXMgY2hhaSBmcm9tICdjaGFpJztcbmltcG9ydCB7IGNoYWlEb20gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7IGluaXRKU0RPTSB9IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5cbmxldCBodG1sMSA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDFcIj5cbiAgICA8L2Rpdj5cbmA7XG5cbmxldCBodG1sMiA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDJcIj5cbiAgICAgICAgIDxtb25zdGVyLXRvZ2dsZS1zd2l0Y2g+PC9tb25zdGVyLXRvZ2dsZS1zd2l0Y2g+XG4gICAgPC9kaXY+XG5gO1xuXG5sZXQgVG9nZ2xlU3dpdGNoO1xuXG5kZXNjcmliZSgnVG9nZ2xlU3dpdGNoJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuXG4gICAgICAgICAgICBpbXBvcnQoXCJlbGVtZW50LWludGVybmFscy1wb2x5ZmlsbFwiKS5jYXRjaChlID0+IGRvbmUoZSkpO1xuXG4gICAgICAgICAgICBpbXBvcnQoXCIuLi8uLi8uLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3RvZ2dsZS1zd2l0Y2gubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBUb2dnbGVTd2l0Y2ggPSBtWydUb2dnbGVTd2l0Y2gnXTtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSlcblxuXG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnbmV3IFRvZ2dsZVN3aXRjaCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMjtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgZnJvbSB0ZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdCgnc2hvdWxkIGNvbnRhaW5zIG1vbnN0ZXItdG9nZ2xlLXN3aXRjaCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MicpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLXRvZ2dsZS1zd2l0Y2gnKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXQoJ3Nob3VsZCBpbnN0YW5jZSBvZiBtb25zdGVyLXRvZ2dsZS1zd2l0Y2gnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItdG9nZ2xlLXN3aXRjaCcpKS5pcy5pbnN0YW5jZW9mKFRvZ2dsZVN3aXRjaCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCd0b2dnbGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgndG9nZ2xlIHRvIG9uJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBjb25zdCB0b2dnbGVTd2l0Y2ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRvZ2dsZS1zd2l0Y2gnKTtcbiAgICAgICAgICAgIHRvZ2dsZVN3aXRjaC5zZXRPcHRpb24oJ2FjdGlvbnMub24nLCAndHJ1ZScpO1xuICAgICAgICAgICAgdG9nZ2xlU3dpdGNoLnNldE9wdGlvbignYWN0aW9ucy5vZmYnLCAnZmFsc2UnKTtcblxuICAgICAgICAgICAgZXhwZWN0KHRvZ2dsZVN3aXRjaC52YWx1ZSkuaXMuZXF1YWwoJ29mZicpO1xuICAgICAgICAgICAgZXhwZWN0KHRvZ2dsZVN3aXRjaC5zdGF0ZSkuaXMuZXF1YWwoJ29mZicpO1xuXG4gICAgICAgICAgICB0b2dnbGVTd2l0Y2gudG9nZ2xlKCk7XG5cbiAgICAgICAgICAgIGV4cGVjdCh0b2dnbGVTd2l0Y2gudmFsdWUpLmlzLmVxdWFsKCdvbicpO1xuICAgICAgICAgICAgZXhwZWN0KHRvZ2dsZVN3aXRjaC5zdGF0ZSkuaXMuZXF1YWwoJ29uJyk7XG5cbiAgICAgICAgICAgIHRvZ2dsZVN3aXRjaC50b2dnbGUoKTtcblxuICAgICAgICAgICAgZXhwZWN0KHRvZ2dsZVN3aXRjaC52YWx1ZSkuaXMuZXF1YWwoJ29mZicpO1xuICAgICAgICAgICAgZXhwZWN0KHRvZ2dsZVN3aXRjaC5zdGF0ZSkuaXMuZXF1YWwoJ29mZicpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgndG9nZ2xlIG9uIHRvIG9mZicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgY29uc3QgdG9nZ2xlU3dpdGNoID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10b2dnbGUtc3dpdGNoJyk7XG5cbiAgICAgICAgICAgIHRvZ2dsZVN3aXRjaC50b2dnbGVPbigpO1xuXG4gICAgICAgICAgICBleHBlY3QodG9nZ2xlU3dpdGNoLnZhbHVlKS5pcy5lcXVhbCgnb24nKTtcbiAgICAgICAgICAgIGV4cGVjdCh0b2dnbGVTd2l0Y2guc3RhdGUpLmlzLmVxdWFsKCdvbicpO1xuXG4gICAgICAgICAgICB0b2dnbGVTd2l0Y2gudG9nZ2xlT2ZmKCk7XG5cbiAgICAgICAgICAgIGV4cGVjdCh0b2dnbGVTd2l0Y2gudmFsdWUpLmlzLmVxdWFsKCdvZmYnKTtcbiAgICAgICAgICAgIGV4cGVjdCh0b2dnbGVTd2l0Y2guc3RhdGUpLmlzLmVxdWFsKCdvZmYnKTtcblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZGVzY3JpYmUgY3NzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnY3NzIHRvZ2dsZScsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogbmV3IENvbnRyb2xcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgY29uc3QgdG9nZ2xlU3dpdGNoID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10b2dnbGUtc3dpdGNoJyk7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogc2V0IGluaXQgdmFsdWUgdG8gb25cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdG9nZ2xlU3dpdGNoLnZhbHVlID0gXCJvblwiO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIGluc2VydCBET01cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJykuYXBwZW5kQ2hpbGQodG9nZ2xlU3dpdGNoKTtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBleHBlY3QgdGhhdCBjbGFzc2VzLm9uIGlzIHNldCB0byBFbGVtZW50IFN3aXRjaFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBsZXQgaGFzQ2xhc3NBID0gdG9nZ2xlU3dpdGNoLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtbW9uc3Rlci1yb2xlPVwic3dpdGNoXCJdJylbMF0uY2xhc3NMaXN0LmNvbnRhaW5zKHRvZ2dsZVN3aXRjaC5nZXRPcHRpb24oJ2NsYXNzZXMub24nKSk7XG4gICAgICAgICAgICBleHBlY3QoaGFzQ2xhc3NBKS5pcy50cnVlO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICogc3dpdGNoIG9mZlxuICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRvZ2dsZVN3aXRjaC52YWx1ZSA9IFwib2ZmXCI7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVXBkYXRlciBwcm96ZXNzIHJ1bnMgaW4gc2V0VGltZW91dFxuICAgICAgICAgICAgICogc2VsZltpbnRlcm5hbFN5bWJvbF0uYXR0YWNoT2JzZXJ2ZXIoKTtcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgKiBleHBlY3QgdGhhdCBjbGFzc2VzLm9uIGlzIHJlbW92ZWQgZnJvbSBFbGVtZW50IFN3aXRjaFxuICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgbGV0IGhhc0NsYXNzQiAgPSB0b2dnbGVTd2l0Y2guc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1tb25zdGVyLXJvbGU9XCJzd2l0Y2hcIl0nKVswXS5jbGFzc0xpc3QuY29udGFpbnModG9nZ2xlU3dpdGNoLmdldE9wdGlvbignY2xhc3Nlcy5vbicpKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoaGFzQ2xhc3NCKS5pcy5mYWxzZTtcblxuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICogZXhwZWN0IHRoYXQgY2xhc3Nlcy5vZmYgaXMgc2V0IHRvIEVsZW1lbnQgU3dpdGNoXG4gICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBsZXQgaGFzQ2xhc3NDICA9IHRvZ2dsZVN3aXRjaC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLW1vbnN0ZXItcm9sZT1cInN3aXRjaFwiXScpWzBdLmNsYXNzTGlzdC5jb250YWlucyh0b2dnbGVTd2l0Y2guZ2V0T3B0aW9uKCdjbGFzc2VzLm9mZicpKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoaGFzQ2xhc3NDKS5pcy50cnVlOyAgICBcblxuXG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSwgMCk7XG5cbiAgICAgICAgfSlcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2Rlc2NyaWJlIHZhbHVlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcblxuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCd0aGUgZGVmYXVsdCB2YWx1ZSBpcyBvZmYnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogbmV3IENvbnRyb2xcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgbGV0IHRvZ2dsZVN3aXRjaCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItdG9nZ2xlLXN3aXRjaCcpO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIHRoZSBzd2l0Y2ggaXMgb2ZmIGFuZCBwcm92aWRlcyB0aGUgdmFsdWUgZm9yIG9mZlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBleHBlY3QodG9nZ2xlU3dpdGNoLnZhbHVlKS5pcy5lcXVhbCgnb2ZmJyk7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogdGhlIHN3aXRjaCBpcyBvZmZcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZXhwZWN0KHRvZ2dsZVN3aXRjaC5zdGF0ZSkuaXMuZXF1YWwoJ29mZicpO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdpbmNvcnJlY3QgdmFsdWVzIGFyZSBub3QgYWNjZXB0ZWQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGxldCB0b2dnbGVTd2l0Y2ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRvZ2dsZS1zd2l0Y2gnKTtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBkZWZpbmUgdGhlIHZhbHVlcyBmb3Igb24gYW5kIG9mZlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB0b2dnbGVTd2l0Y2guc2V0T3B0aW9uKCd2YWx1ZXMub24nLCAndHJ1ZScpO1xuICAgICAgICAgICAgdG9nZ2xlU3dpdGNoLnNldE9wdGlvbigndmFsdWVzLm9mZicsICdmYWxzZScpO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFRoaXMgdmFsdWUgaXMgbm90IFwidHJ1ZVwiIGFuZCBub3QgXCJmYWxzZVwiXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRvZ2dsZVN3aXRjaC52YWx1ZSA9IFwidGVzdFwiO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIHRoZSBzd2l0Y2ggaXMgb2ZmIGFuZCBwcm92aWRlcyB0aGUgdmFsdWUgZm9yIG9mZlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBleHBlY3QodG9nZ2xlU3dpdGNoLnZhbHVlKS5pcy5lcXVhbCgnZmFsc2UnKTtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiB0aGUgc3dpdGNoIGlzIG9mZlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBleHBlY3QodG9nZ2xlU3dpdGNoLnN0YXRlKS5pcy5lcXVhbCgnb2ZmJyk7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgKiBkaXNhYmxlZCBhdHRyaWJ1dGUgaXMgb25seSBzZXQgd2hlbiB0aGUgZWxlbWVudCBoYXMgYmVlbiBtb3VudGVkIGluIHRoZSBET01cbiAgICAgICAgICAgICovXG4gICAgICAgICAgICBleHBlY3QodG9nZ2xlU3dpdGNoLmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSkuaXMuZmFsc2U7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogaW5zZXJ0IERPTVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKS5hcHBlbmRDaGlsZCh0b2dnbGVTd2l0Y2gpO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICogbm93IHRoZSBlbGVtZW50IGlzIGRpc2FibGVkXG4gICAgICAgICAgICAqL1xuICAgICAgICAgICAgZXhwZWN0KHRvZ2dsZVN3aXRjaC5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykpLmlzLnRydWU7XG5cblxuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnY29ycmVjdCB2YWx1ZXMgYXJlIGFjY2VwdGVkJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBjb25zdCB0b2dnbGVTd2l0Y2ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRvZ2dsZS1zd2l0Y2gnKTtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBkZWZpbmUgdGhlIHZhbHVlcyBmb3Igb24gYW5kIG9mZlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB0b2dnbGVTd2l0Y2guc2V0T3B0aW9uKCd2YWx1ZXMub24nLCAndHJ1ZScpO1xuICAgICAgICAgICAgdG9nZ2xlU3dpdGNoLnNldE9wdGlvbigndmFsdWVzLm9mZicsICdmYWxzZScpO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFRoaXMgdmFsdWUgaXMgY29ycmVjdFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB0b2dnbGVTd2l0Y2gudmFsdWUgPSBcInRydWVcIjtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiB0aGUgc3dpdGNoIGlzIG9uIGFuZCBwcm92aWRlcyB0aGUgdmFsdWUgZm9yIG9uXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGV4cGVjdCh0b2dnbGVTd2l0Y2gudmFsdWUpLmlzLmVxdWFsKCd0cnVlJyk7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogdGhlIHN3aXRjaCBpcyBvblxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBleHBlY3QodG9nZ2xlU3dpdGNoLnN0YXRlKS5pcy5lcXVhbCgnb24nKTtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAqIGluc2VydCBET01cbiAgICAgICAgICAgICovXG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKS5hcHBlbmRDaGlsZCh0b2dnbGVTd2l0Y2gpO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIGRpc2FibGVkIGF0dHJpYnV0ZSBpcyBub3Qgc2V0XG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGV4cGVjdCh0b2dnbGVTd2l0Y2guaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpKS5pcy5mYWxzZTtcblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cblxufSk7IiwgImltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCAqIGFzIGNoYWkgZnJvbSAnY2hhaSc7XG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtzZXR1cEludGVyc2VjdGlvbk9ic2VydmVyTW9ja30gZnJvbSBcIi4uLy4uLy4uL3V0aWwvaW50ZXJzZWN0aW9uLW1vY2subWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcbmNoYWkudXNlKGNoYWlEb20pO1xuXG5jb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcbmxldCBtb2NraW50ZXJzZWN0aW9ub2JzZXJ2ZXI7XG5cbmxldCBodG1sMSA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDFcIj5cbiAgICA8L2Rpdj5cbmA7XG5cbmRlc2NyaWJlKCdUZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcblxuICAgIC8vIGpzZG9tLXRlc3RpbmctbW9ja3MgbmVlZCBqZXN0XG4gICAgbGV0IFRlbXBsYXRlLCB2aWV3cG9ydCwgbW9ja1ZpZXdwb3J0O1xuXG4gICAgYWZ0ZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICBtb2NraW50ZXJzZWN0aW9ub2JzZXJ2ZXIucmVzdG9yZSgpO1xuICAgIH0pXG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGltcG9ydChcImVsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsXCIpLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgICAgICAgICBtb2NraW50ZXJzZWN0aW9ub2JzZXJ2ZXIgPSBzZXR1cEludGVyc2VjdGlvbk9ic2VydmVyTW9jaygpO1xuXG4gICAgICAgIGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vdGVtcGxhdGUubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBUZW1wbGF0ZSA9IG1bJ1RlbXBsYXRlJ107XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpXG5cblxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ25ldyBUZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG5cblxuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJ2NyZWF0ZSBmcm9tIHRlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgLy8gbGFuZ3VhZ2U9SFRNTFxuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGBcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cInRlc3QyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bW9uc3Rlci10ZW1wbGF0ZT48L21vbnN0ZXItdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIGA7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXQoJ3Nob3VsZCBjb250YWlucyBtb25zdGVyLXRlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QyJykpLmNvbnRhaW4uaHRtbCgnPG1vbnN0ZXItdGVtcGxhdGUnKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXQoJ3Nob3VsZCBpbnN0YW5jZSBvZiB0ZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10ZW1wbGF0ZScpKS5pcy5pbnN0YW5jZW9mKFRlbXBsYXRlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgbW9ja3M7XG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIGhhdmUgbm8gb3B0aW9ucycsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10ZW1wbGF0ZScpO1xuICAgICAgICAgICAgbW9ja3MuYXBwZW5kQ2hpbGQodGVtcGxhdGUpO1xuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKSkuY29udGFpbi5odG1sKCc8bW9uc3Rlci10ZW1wbGF0ZScpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSwgMClcblxuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbiAgICBkZXNjcmliZSgnbG9hZCBjb250ZW50JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBtb2NrcywgZmV0Y2hSZWZlcmVuY2UsIGludGVyc2VjdGlvbk9ic2VydmVyO1xuICAgICAgICBiZWZvcmVFYWNoKChkb25lKSA9PiB7XG4gICAgICAgICAgICBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgLy8gbGFuZ3VhZ2U9SFRNTFxuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gYFxuICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJ0aGlzLWNvbnRlbnRcIj5cblxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgYDtcblxuICAgICAgICAgICAgZmV0Y2hSZWZlcmVuY2UgPSBnbG9iYWxbJ2ZldGNoJ107XG5cbiAgICAgICAgICAgIGdsb2JhbFsnZmV0Y2gnXSA9IGZ1bmN0aW9uICh1cmwsIG9wdGlvbnMpIHtcblxuICAgICAgICAgICAgICAgIGxldCBoZWFkZXJzID0gbmV3IE1hcDtcbiAgICAgICAgICAgICAgICBoZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ3RleHQvaHRtbCcpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBvazp0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOjIwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlMiwgcmVqZWN0MikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlMignaGVsbG8gd29ybGQhJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICAgICAgZ2xvYmFsWydmZXRjaCddID0gZmV0Y2hSZWZlcmVuY2U7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3Nob3VsZCBsb2FkIGNvbnRlbnQgZnJvbSB1cmwnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItdGVtcGxhdGUnKTtcbiAgICAgICAgICAgIHRlbXBsYXRlLnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLXVybCcsICdodHRwOi8vbG9jYWxob3N0LycpXG4gICAgICAgICAgICBtb2Nrcy5hcHBlbmRDaGlsZCh0ZW1wbGF0ZSk7XG5cbiAgICAgICAgICAgIHRlbXBsYXRlLmFkZEV2ZW50TGlzdGVuZXIoJ21vbnN0ZXItZmV0Y2hlZCcsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLXRlbXBsYXRlJyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNoYWRvd1Jvb3QgPSBlbGVtZW50LnNoYWRvd1Jvb3Q7XG5cblxuICAgICAgICAgICAgICAgICAgICBleHBlY3Qoc2hhZG93Um9vdCkuY29udGFpbi5odG1sKCdoZWxsbyB3b3JsZCcpO1xuICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBtb2NraW50ZXJzZWN0aW9ub2JzZXJ2ZXIuZ2V0SW5zdGFuY2UoKS5lbnRlck5vZGUoKTtcblxuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG59KTsiLCAiXG5pbXBvcnQgKiBhcyBjaGFpIGZyb20gJ2NoYWknO1xuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cblxuXG5sZXQgTWVzc2FnZTtcblxuZGVzY3JpYmUoJ01lc3NhZ2UnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL25vdGlmeS9tZXNzYWdlLm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgTWVzc2FnZSA9IG1bJ01lc3NhZ2UnXTtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSlcbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIE1lc3NhZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLW5vdGlmeS1tZXNzYWdlJyk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGV4cGVjdChjb250cm9sKS5pcy5pbnN0YW5jZW9mKE1lc3NhZ2UpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG59KVxuIiwgIi8vaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0ICogYXMgY2hhaSBmcm9tICdjaGFpJztcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcbmNoYWkudXNlKGNoYWlEb20pO1xuXG4vLyBjb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcbi8vXG4vLyBsZXQgaHRtbDEgPSBgXG4vLyAgICAgPGRpdiBpZD1cInRlc3QxXCI+XG4vLyAgICAgPC9kaXY+XG4vLyBgO1xuLy9cbi8vIC8vIGxhbmd1YWdlPUhUTUxcbi8vIGxldCBodG1sMiA9IGBcbi8vICAgICA8ZGl2IGlkPVwidGVzdDJcIj5cbi8vICAgICAgICAgPG1vbnN0ZXItbm90aWZ5IGRhdGEtbW9uc3Rlci1vcHRpb25zPSd7fSc+PC9tb25zdGVyLW5vdGl0Znk+XG4vLyAgICAgPC9kaXY+XG4vLyBgO1xuXG5sZXQgTm90aWZ5LCBmZXRjaFJlZmVyZW5jZTtcblxuZGVzY3JpYmUoJ05vdGlmeScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL25vdGlmeS9ub3RpZnkubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBOb3RpZnkgPSBtWydOb3RpZnknXTtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSlcbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIG5vdGlmeScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItbm90aWZ5JykpLmlzLmluc3RhbmNlb2YoTm90aWZ5KTtcbiAgICAgICAgICAgIFxuXG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBoYXZlIG1lc3NhZ2VzJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBjb25zdCBub3RpZnkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLW5vdGlmeScpO1xuICAgICAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICAgICAgbm90aWZ5LnB1c2goXCJ0aGlzIGlzIG1lc3NhZ2UgXCIgKyBpKyspO1xuICAgICAgICAgICAgbm90aWZ5LnB1c2goXCJ0aGlzIGlzIG1lc3NhZ2UgXCIgKyBpKyspO1xuICAgICAgICAgICAgbm90aWZ5LnB1c2goXCJ0aGlzIGlzIG1lc3NhZ2UgXCIgKyBpKyspO1xuXG4gICAgICAgICAgICBjb25zdCBtdXRhdGlvbm9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKG11dGF0aW9ucykge1xuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBbLCBtdXRhdGlvbl0gb2YgbXV0YXRpb25zLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobXV0YXRpb24uYWRkZWROb2Rlc1swXS50YWdOYW1lID09PSAnTU9OU1RFUi1OT1RJRlknKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11dGF0aW9ub2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZXMgPSBub3RpZnkuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdtb25zdGVyLW5vdGlmeS1tZXNzYWdlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDMgb3B0aW9ucyAoc2VlIGZldGNoIGFib3ZlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QobWVzc2FnZXMubGVuZ3RoKS5pcy5lcXVhbCgzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDApXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBtdXRhdGlvbm9ic2VydmVyLm9ic2VydmUobW9ja3MsIHtjaGlsZExpc3Q6IHRydWV9KTtcbiAgICAgICAgICAgIG1vY2tzLmFwcGVuZENoaWxkKG5vdGlmeSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG59KVxuIiwgImltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcbmltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCAqIGFzIGNoYWkgZnJvbSAnY2hhaSc7XG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5cblxuZGVzY3JpYmUoJ0hvc3QnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBsZXQgaG9zdDtcbiAgICBsZXQgaHRtbDEgPSBgXG4gICAgICAgIDxtb25zdGVyLWhvc3QgaWQ9XCJob3N0MVwiPjwvbW9uc3Rlci1ob3N0PlxuICAgIGA7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBpbXBvcnQoXCIuLi8uLi8uLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ob3N0L2hvc3QubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBob3N0ID0gbVsnSG9zdCddO1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKVxuXG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuXG4gICAgICAgIC8vIHJlZ2lzdGVyIG93biBkYXRhc291cmNlLCBhZnRlciB0aGUgZm9ybSBpcyBsb2FkZWRcbiAgICAgICAgLy8gYmVjYXVzZSBpbiB0aGUgd2lsZCwgdGhlIGZvcm0gaXMgcGFyc2VkIGJlZm9yZSB0aGUgZGF0YXNvdXJjZSBpcyByZWdpc3RlcmVkXG4gICAgICAgIC8vZm9ybS5yZWdpc3RlckRhdGFzb3VyY2UoJ3Rlc3QzJywgdGVzdDNEYXRhc291cmNlKTtcblxuXG4gICAgfSk7ICAgIFxuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCd0ZXN0LWtleScpXG4gICAgfSlcbiAgICBcbiAgICBcbiAgICBpdCgnc2hvdWxkIHJ1bicsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgIGNvbnN0IGZvcm1Db250cm9sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1ob3N0Jyk7XG4gICAgICAgIG1vY2tzLmFwcGVuZENoaWxkKGZvcm1Db250cm9sKTtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLWhvc3QgZGF0YS1tb25zdGVyLW9iamVjdGxpbms9XCJTeW1ib2woQHNjaHVrYWkvbW9uc3Rlci9kb20vY3VzdG9tLWVsZW1lbnRAQG9wdGlvbnMtdXBkYXRlci1saW5rKVwiPjwvbW9uc3Rlci1ob3N0PicpXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgfSwgMClcblxuXG5cblxuXG4gICAgfSk7XG5cblxufSk7XG4iLCAiaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0ICogYXMgY2hhaSBmcm9tICdjaGFpJztcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5cblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXG5cbmRlc2NyaWJlKCdPdmVybGF5JywgZnVuY3Rpb24gKCkge1xuXG4gICAgbGV0IGhvc3Q7XG4gICAgbGV0IGh0bWwxID0gYFxuICAgICAgICA8bW9uc3Rlci1vdmVybGF5IGlkPVwiZGV0YWlsczFcIj48L21vbnN0ZXItb3ZlcmxheT5cbiAgICBgO1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC9vdmVybGF5Lm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgaG9zdCA9IG1bJ0RldGFpbHMnXTtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSlcblxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcbiAgICB9KTsgICAgXG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICB9KVxuICAgIFxuICAgIFxuICAgIGl0KCdzaG91bGQgcnVuJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgY29uc3QgZm9ybUNvbnRyb2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLW92ZXJsYXknKTtcbiAgICAgICAgbW9ja3MuYXBwZW5kQ2hpbGQoZm9ybUNvbnRyb2wpO1xuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJykpLmNvbnRhaW4uaHRtbChcbiAgICAgICAgICAgICAgICAgICAgJyA8bW9uc3Rlci1vdmVybGF5IGRhdGEtbW9uc3Rlci1vYmplY3RsaW5rPVwiU3ltYm9sKEBzY2h1a2FpL21vbnN0ZXIvZG9tL2N1c3RvbS1lbGVtZW50QEBvcHRpb25zLXVwZGF0ZXItbGluaylcIj48L21vbnN0ZXItb3ZlcmxheT4nKVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkb25lKGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH0sIDApXG5cbiAgICB9KTtcblxufSk7XG4iLCAiLy8gSW1wb3J0IHRoZSByZXF1aXJlZCBsaWJyYXJpZXNcbmltcG9ydCB7IGV4cGVjdCB9IGZyb20gJ2NoYWknO1xuLy9pbXBvcnQgeyBKU0RPTSB9IGZyb20gJ2pzZG9tJztcbmltcG9ydCB7IGdlbmVyYXRlVW5pcXVlQ29uZmlnS2V5IH0gZnJvbSAnLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC91dGlsLm1qcyc7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbi8vIENyZWF0ZSBhIEpTRE9NIGluc3RhbmNlIHRvIHNpbXVsYXRlIHRoZSBicm93c2VyIGVudmlyb25tZW50XG4vL2NvbnN0IGRvbSA9IG5ldyBKU0RPTSgpO1xuXG5cbi8vIFRlc3Qgc3VpdGUgZm9yIHRoZSBnZW5lcmF0ZVVuaXF1ZUNvbmZpZ0tleSBmdW5jdGlvblxuZGVzY3JpYmUoJ2dlbmVyYXRlVW5pcXVlQ29uZmlnS2V5JywgKCkgPT4ge1xuXG4gICAgLy9sZXQgb3JpZ2luYWxXaW5kb3c7XG5cbiAgICAvLyBiZWZvcmUoKCkgPT4ge1xuICAgIC8vICAgICAvLyBTdG9yZSB0aGUgb3JpZ2luYWwgd2luZG93IG9iamVjdFxuICAgIC8vICAgICBvcmlnaW5hbFdpbmRvdyA9IGdsb2JhbFRoaXMud2luZG93O1xuICAgIC8vXG4gICAgLy8gICAgIC8vIENyZWF0ZSBhIEpTRE9NIGluc3RhbmNlIHRvIHNpbXVsYXRlIHRoZSBicm93c2VyIGVudmlyb25tZW50XG4gICAgLy8gICAgIGNvbnN0IGRvbSA9IG5ldyBKU0RPTSgpO1xuICAgIC8vICAgICBnbG9iYWxUaGlzLndpbmRvdyA9IGRvbS53aW5kb3c7XG4gICAgLy8gfSk7XG5cblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgfSk7XG4gICAgfSkgICAgXG5cbiAgICAvLyAuLi4gKHNhbWUgdGVzdCBjYXNlcyBhcyBiZWZvcmUpXG5cbiAgICBhZnRlcigoKSA9PiB7XG4gICAgICAgIC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIHdpbmRvdyBvYmplY3RcbiAgICAgICAvLyBnbG9iYWxUaGlzLndpbmRvdyA9IG9yaWdpbmFsV2luZG93O1xuICAgIH0pOyAgICBcbiAgICBcbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGEgdW5pcXVlIGtleSB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBjb21wb25lbnROYW1lID0gJ015Q29tcG9uZW50JztcbiAgICAgICAgY29uc3QgaWQgPSAnMTIzJztcbiAgICAgICAgY29uc3QgcHJlZml4ID0gJ215UHJlZml4JztcblxuICAgICAgICBjb25zdCB1bmlxdWVLZXkgPSBnZW5lcmF0ZVVuaXF1ZUNvbmZpZ0tleShjb21wb25lbnROYW1lLCBpZCwgcHJlZml4KTtcblxuICAgICAgICAvLyBFbnN1cmUgdGhlIHVuaXF1ZSBrZXkgY29udGFpbnMgdGhlIGdpdmVuIHBhcmFtZXRlcnMgYW5kIGZvbGxvd3MgdGhlIGV4cGVjdGVkIGZvcm1hdFxuICAgICAgICBleHBlY3QodW5pcXVlS2V5KS50by5pbmNsdWRlKHByZWZpeCk7XG4gICAgICAgIGV4cGVjdCh1bmlxdWVLZXkpLnRvLmluY2x1ZGUoY29tcG9uZW50TmFtZSk7XG4gICAgICAgIGV4cGVjdCh1bmlxdWVLZXkpLnRvLmluY2x1ZGUoaWQpO1xuICAgICAgICBleHBlY3QodW5pcXVlS2V5KS50by5tYXRjaCgvXlthLXpBLVowLTlfXSskLyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlcGxhY2Ugc3BlY2lhbCBjaGFyYWN0ZXJzIGFuZCBzcGFjZXMgd2l0aCB1bmRlcnNjb3JlcycsICgpID0+IHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50TmFtZSA9ICdNeSRDb21wb25lbnQnO1xuICAgICAgICBjb25zdCBpZCA9ICcxMiMzJztcbiAgICAgICAgY29uc3QgcHJlZml4ID0gJ215IFByZWZpeCc7XG5cbiAgICAgICAgY29uc3QgdW5pcXVlS2V5ID0gZ2VuZXJhdGVVbmlxdWVDb25maWdLZXkoY29tcG9uZW50TmFtZSwgaWQsIHByZWZpeCk7XG5cbiAgICAgICAgLy8gRW5zdXJlIHRoZSB1bmlxdWUga2V5IGRvZXMgbm90IGNvbnRhaW4gYW55IHNwZWNpYWwgY2hhcmFjdGVycyBvciBzcGFjZXNcbiAgICAgICAgZXhwZWN0KHVuaXF1ZUtleSkudG8ubWF0Y2goL15bYS16QS1aMC05X10rJC8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBpbmNsdWRlIHRoZSBicm93c2VyIGxvY2F0aW9uIHdpdGhvdXQgcGFyYW1ldGVycycsICgpID0+IHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50TmFtZSA9ICdNeUNvbXBvbmVudCc7XG4gICAgICAgIGNvbnN0IGlkID0gJzEyMyc7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9ICdteVByZWZpeCc7XG5cbiAgICAgICAgY29uc3QgdW5pcXVlS2V5ID0gZ2VuZXJhdGVVbmlxdWVDb25maWdLZXkoY29tcG9uZW50TmFtZSwgaWQsIHByZWZpeCk7XG5cbiAgICAgICAgLy8gRW5zdXJlIHRoZSB1bmlxdWUga2V5IGNvbnRhaW5zIHRoZSBicm93c2VyIGxvY2F0aW9uIHdpdGhvdXQgcGFyYW1ldGVyc1xuICAgICAgICBjb25zdCB1cmxXaXRob3V0UGFyYW1zID0gd2luZG93LmxvY2F0aW9uLmhyZWYuc3BsaXQoJz8nKVswXTtcbiAgICAgICAgY29uc3Qgc2FuaXRpemVkVXJsID0gdXJsV2l0aG91dFBhcmFtcy5yZXBsYWNlKC9bXlxcd1xcc10vZ2ksICdfJykucmVwbGFjZSgvXFxzKy9nLCAnXycpO1xuICAgICAgICBleHBlY3QodW5pcXVlS2V5KS50by5pbmNsdWRlKHNhbml0aXplZFVybCk7XG4gICAgfSk7XG5cbiAgICBcbiAgICBcbn0pIiwgImltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcbmltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCAqIGFzIGNoYWkgZnJvbSAnY2hhaSc7XG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtSZXNpemVPYnNlcnZlck1vY2t9IGZyb20gXCIuLi8uLi8uLi91dGlsL3Jlc2l6ZS1vYnNlcnZlci5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXG5cbmRlc2NyaWJlKCdEZXRhaWxzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgbGV0IGhvc3Q7XG4gICAgbGV0IGh0bWwxID0gYFxuICAgICAgICA8bW9uc3Rlci1kZXRhaWxzIGlkPVwiZGV0YWlsczFcIj48L21vbnN0ZXItZGV0YWlscz5cbiAgICBgO1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC9kZXRhaWxzLm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgaG9zdCA9IG1bJ0RldGFpbHMnXTtcblxuICAgICAgICAgICAgICAgIGlmKCFnbG9iYWwuUmVzaXplT2JzZXJ2ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgZ2xvYmFsLlJlc2l6ZU9ic2VydmVyID0gUmVzaXplT2JzZXJ2ZXJNb2NrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSlcblxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIFxuICAgICAgICBcbiAgICB9KVxuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcbiAgICB9KTsgICAgXG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICB9KVxuICAgIFxuICAgIFxuICAgIGl0KCdzaG91bGQgcnVuJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgY29uc3QgZm9ybUNvbnRyb2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWRldGFpbHMnKTtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpKS5jb250YWluLmh0bWwoXG4gICAgICAgICAgICAgICAgICAgICc8bW9uc3Rlci1kZXRhaWxzIGlkPVwiZGV0YWlsczFcIiBkYXRhLW1vbnN0ZXItb2JqZWN0bGluaz1cIlN5bWJvbChAc2NodWthaS9tb25zdGVyL2RvbS9jdXN0b20tZWxlbWVudEBAb3B0aW9ucy11cGRhdGVyLWxpbmspXCIgZGF0YS1tb25zdGVyLWJ1dHRvbi1sYWJlbD1cIkRldGFpbHNcIj48L21vbnN0ZXItZGV0YWlscz4nKVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkb25lKGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH0sIDApXG5cbiAgICB9KTtcblxufSk7XG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7Rm9ybWF0dGVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3RleHQvZm9ybWF0dGVyLm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdGb3JtYXR0ZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAvLyBodHRwczovL2dpdGxhYi5zY2h1a2FpLmNvbS9vc3MvbGlicmFyaWVzL2phdmFzY3JpcHQvbW9uc3Rlci8tL2lzc3Vlcy80N1xuICAgIGRlc2NyaWJlKCdleGFtcGxlcycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgncmZjIGV4YW1wbGUgc2hvdWxkIHJ1bicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgRm9ybWF0dGVyKHtcblxuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgYjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgYzogXCJIZWxsb1wiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGQ6IFwiV29ybGRcIixcbiAgICAgICAgICAgICAgICAgICAgZTogMVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSkuZm9ybWF0KFwiJHthLmIuY30gJHthLmQgfCB0b3VwcGVyfSFcIikpLnRvLmJlLmVxdWFsKCdIZWxsbyBXT1JMRCEnKTtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnZG9jIGV4YW1wbGUgc2hvdWxkIHJ1bicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgRm9ybWF0dGVyKHtcblxuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgYjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgYzogXCJIZWxsb1wiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGQ6IFwid29ybGRcIixcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0pLmZvcm1hdChcIiR7YS5iLmN9ICR7YS5kIHwgdWNmaXJzdH0hXCIpKS50by5iZS5lcXVhbCgnSGVsbG8gV29ybGQhJyk7XG4gICAgICAgIH0pXG5cblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnc2V0IG1hcmtlcigpJywgZnVuY3Rpb24gKCkge1xuXG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWycjYSMnLCAnIycsIHVuZGVmaW5lZCwgJ3Rlc3QnXSxcbiAgICAgICAgICAgIFsne2F9JywgJ3snLCAnfScsICd0ZXN0J10sXG4gICAgICAgICAgICBbJ2kxOG57YX0nLCAnaTE4bnsnLCAnfScsICd0ZXN0J10sXG5cbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBkID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdmb3JtYXQgJyArIGEgKyAnIHdpdGggbWFya2VyICcgKyBiICsgJyBhbmQgJyArIGMgKyAnIHNob3VsZCByZXR1cm4gICcgKyBiLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoXG4gICAgICAgICAgICAgICAgICAgIG5ldyBGb3JtYXR0ZXIoe1xuICAgICAgICAgICAgICAgICAgICAgICAgYTogXCJ0ZXN0XCJcbiAgICAgICAgICAgICAgICAgICAgfSkuc2V0TWFya2VyKGIsIGMpLmZvcm1hdChhKVxuICAgICAgICAgICAgICAgICkudG8uZXF1YWwoZClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdleGFtcGxlcygpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsnJHthIHwgdG9qc29ufScsIFwie1xcXCJiXFxcIjp7XFxcImNcXFwiOlxcXCJIZWxsb1xcXCJ9LFxcXCJkXFxcIjpcXFwiV29ybGRcXFwiLFxcXCJlXFxcIjoxfVwiXSxcbiAgICAgICAgICAgIFsnY2xpY2sgJHthLmR9IHRpbWVzJywgXCJjbGljayBXb3JsZCB0aW1lc1wiXSxcbiAgICAgICAgICAgIFsnICR7YS5iLmN9ICcsICcgSGVsbG8gJ10sXG4gICAgICAgICAgICBbJyAke2EuYi5jfScsICcgSGVsbG8nXSxcbiAgICAgICAgICAgIFsnJHthLmIuY30gJywgJ0hlbGxvICddLFxuICAgICAgICAgICAgWycke2EuYi5jfScsICdIZWxsbyddLFxuICAgICAgICAgICAgWycke2EuYi5jfSR7YS5iLmN9JywgJ0hlbGxvSGVsbG8nXSxcbiAgICAgICAgICAgIFsnJHthLmIuY30gJHthLmIuY30nLCAnSGVsbG8gSGVsbG8nXSxcbiAgICAgICAgICAgIFsnJHthLmIuY30gJHthLmIuY30gJywgJ0hlbGxvIEhlbGxvICddLFxuICAgICAgICAgICAgWycgJHthLmIuY30gJHthLmIuY30gJywgJyBIZWxsbyBIZWxsbyAnXSxcbiAgICAgICAgICAgIFsnICR7YS5iLmN9ICR7YS5kfSAnLCAnIEhlbGxvIFdvcmxkICddLFxuICAgICAgICAgICAgWycgJHthLmIuY30gJHthLmIuYyB8IHRvdXBwZXIgfCBsZW5ndGggfCB0b3N0cmluZ30gJywgJyBIZWxsbyA1ICddLFxuXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ2Zvcm1hdCAnICsgYSArICcgc2hvdWxkIHJldHVybiAnICsgYiwgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IG9iaiA9IHtcbiAgICAgICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICAgICAgYjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM6IFwiSGVsbG9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ6IFwiV29ybGRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGU6IDFcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBGb3JtYXR0ZXIob2JqKS5mb3JtYXQoYSkpLmlzLmVxdWFsKGIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdNYXJrZXIgaW4gbWFya2VyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCB0ZXh0ID0gJyR7bXlrZXkke3N1YmtleX19JztcbiAgICAgICAgbGV0IGV4cGVjdGVkID0gJzEnO1xuXG4gICAgICAgIGl0KCdmb3JtYXQgJyArIHRleHQgKyAnIHNob3VsZCAnICsgZXhwZWN0ZWQsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0IG9iaiA9IHtcbiAgICAgICAgICAgICAgICBteWtleTI6IFwiMVwiLFxuICAgICAgICAgICAgICAgIHN1YmtleTogXCIyXCJcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGV4cGVjdChuZXcgRm9ybWF0dGVyKG9iaikuZm9ybWF0KHRleHQpKS5pcy5lcXVhbChleHBlY3RlZClcblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnc2V0UGFyYW1ldGVyQ2hhcnMoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2V0UGFyYW1ldGVyQ2hhcnMoKSBzaG91bGQgcmV0dXJuIEluc3RhbmNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBGb3JtYXR0ZXIoe30pLnNldFBhcmFtZXRlckNoYXJzKCdhJywgJ2InKSkuaXMuaW5zdGFuY2VvZihGb3JtYXR0ZXIpO1xuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJ3dpdGggY2FsbGJhY2tzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdhZGQgY2FsbGJhY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKHtcbiAgICAgICAgICAgICAgICB4OiAnMSdcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFja3M6IHtcbiAgICAgICAgICAgICAgICAgICAgbXk6ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiIVwiICsgdmFsdWUgKyBcIiFcIlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGV4cGVjdChmb3JtYXR0ZXIuZm9ybWF0KCcke3ggfCBjYWxsOm15fScpKS5pcy5lcXVhbCgnITEhJyk7XG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ01hcmtlciBpbiBtYXJrZXIgd2l0aCBwYXJhbWV0ZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IHRleHQgPSAnJHtteWtleTo6bXlrZXk9JHtzdWJrZXl9fSc7XG4gICAgICAgIGxldCBleHBlY3RlZCA9ICcyJztcblxuICAgICAgICBpdCgnZm9ybWF0ICcgKyB0ZXh0ICsgJyBzaG91bGQgJyArIGV4cGVjdGVkLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGxldCBvYmogPSB7XG4gICAgICAgICAgICAgICAgc3Via2V5OiBcIjJcIlxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgZXhwZWN0KG5ldyBGb3JtYXR0ZXIob2JqKS5mb3JtYXQodGV4dCkpLmlzLmVxdWFsKGV4cGVjdGVkKVxuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2V4Y2VwdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWycke2EuYi54fScsIFR5cGVFcnJvcl0sXG4gICAgICAgICAgICBbJyR7YS5iLmQgfCB0b3VwcGVyIHwgbGVuZ3RofScsIFR5cGVFcnJvcl0sXG4gICAgICAgICAgICBbJyR7YS5iLmR9JywgVHlwZUVycm9yXSwgIC8vIGEuYi5kIHJldHVybiB1bmRlZmluZWQgYnkgcGF0aGZpbmRlciBcbiAgICAgICAgICAgIFsnJHthLmIuZCB8IHRvbG93ZXJ9JywgVHlwZUVycm9yXSwgIC8vIGEuYi5kIHJldHVybiB1bmRlZmluZWQgYnkgcGF0aGZpbmRlciBcbiAgICAgICAgICAgIFsnJHthIHwgfScsIEVycm9yXSxcblxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdmb3JtYXQgJyArIGEgKyAnIHNob3VsZCB0aHJvdyAnICsgdHlwZW9mIGIsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgRm9ybWF0dGVyKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM6IFwidGVzdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZDogNFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSkuZm9ybWF0KGEpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApLnRvLnRocm93KGIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxuXG5cbiAgICBkZXNjcmliZSgnRm9ybWF0dGVyJywgKCkgPT4ge1xuICAgICAgICBpdCgnc2hvdWxkIGZvcm1hdCBhIGJhc2ljIHN0cmluZyB3aXRoIG9iamVjdCB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKHtuYW1lOiAnSm9obicsIGFnZTogMzB9KTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdHRlci5mb3JtYXQoJ015IG5hbWUgaXMgJHtuYW1lfSBhbmQgSSBhbSAke2FnZSB8IHRvc3RyaW5nfSB5ZWFycyBvbGQuJyk7XG5cbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmVxdWFsKCdNeSBuYW1lIGlzIEpvaG4gYW5kIEkgYW0gMzAgeWVhcnMgb2xkLicpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGZvcm1hdCBhIHN0cmluZyB3aXRoIG5lc3RlZCBtYXJrZXJzJywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGV4dCA9ICcke215a2V5JHtzdWJrZXl9fSc7XG4gICAgICAgICAgICBjb25zdCBvYmogPSB7bXlrZXkyOiAnMScsIHN1YmtleTogJzInfTtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBGb3JtYXR0ZXIob2JqKTtcblxuICAgICAgICAgICAgZXhwZWN0KGZvcm1hdHRlci5mb3JtYXQodGV4dCkpLnRvLmVxdWFsKCcxJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgZm9ybWF0IGEgc3RyaW5nIHdpdGggY3VzdG9tIG1hcmtlcnMnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKHtuYW1lOiAnSm9obicsIGFnZTogMzB9KTtcbiAgICAgICAgICAgIGZvcm1hdHRlci5zZXRNYXJrZXIoJ1snLCAnXScpO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZm9ybWF0dGVyLmZvcm1hdCgnTXkgbmFtZSBpcyBbbmFtZV0gYW5kIEkgYW0gW2FnZSB8IHRvc3RyaW5nXSB5ZWFycyBvbGQuJyk7XG5cbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmVxdWFsKCdNeSBuYW1lIGlzIEpvaG4gYW5kIEkgYW0gMzAgeWVhcnMgb2xkLicpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGZvcm1hdCBhIHN0cmluZyB1c2luZyBjYWxsYmFjaycsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBGb3JtYXR0ZXIoe3g6ICcxJ30sIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFja3M6IHtcbiAgICAgICAgICAgICAgICAgICAgcXVvdGU6ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdcIicgKyB2YWx1ZSArICdcIic7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBleHBlY3QoZm9ybWF0dGVyLmZvcm1hdCgnJHt4IHwgY2FsbDpxdW90ZX0nKSkudG8uZXF1YWwoJ1wiMVwiJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgZm9ybWF0IGEgc3RyaW5nIHdpdGggcGFyYW1ldGVycycsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgIGI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGM6ICdIZWxsbycsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGQ6ICd3b3JsZCcsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKG9iaik7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBmb3JtYXR0ZXIuZm9ybWF0KCcke2EuYi5jfSAke2EuZCB8IHVjZmlyc3R9IScpO1xuXG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50by5lcXVhbCgnSGVsbG8gV29ybGQhJyk7XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBhIHRvbyBkZWVwIG5lc3RpbmcgZXJyb3InLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKHtuYW1lOiAnSm9obid9KTtcbiAgICAgICAgICAgIGNvbnN0IG5lc3RlZFRleHQgPSAnJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lJHtuYW1lfX19fX19fX19fX19fX19fX19JztcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBmb3JtYXR0ZXIuZm9ybWF0KG5lc3RlZFRleHQpKS50by50aHJvdygnc3ludGF4IGVycm9yIGluIGZvcm1hdHRlciB0ZW1wbGF0ZScpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHRocm93IGEgdG9vIGRlZXAgbmVzdGluZyBlcnJvcicsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0T2JqID0ge1xuICAgICAgICAgICAgICAgIG15a2V5OiAnJHtteWtleX0nLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gbmV3IEZvcm1hdHRlcihpbnB1dE9iaik7XG5cbiAgICAgICAgICAgIGNvbnN0IHRleHQgPSAnJHtteWtleX0nO1xuICAgICAgICAgICAgbGV0IGZvcm1hdHRlZFRleHQgPSB0ZXh0O1xuXG4gICAgICAgICAgICAvLyBDcmVhdGUgYSBzdHJpbmcgd2l0aCAyMSBsZXZlbHMgb2YgbmVzdGluZ1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAyMTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgZm9ybWF0dGVkVGV4dCA9ICckeycgKyBmb3JtYXR0ZWRUZXh0ICsgJ30nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBleHBlY3QoKCkgPT4gZm9ybWF0dGVyLmZvcm1hdChmb3JtYXR0ZWRUZXh0KSkudG8udGhyb3coJ3RvbyBkZWVwIG5lc3RpbmcnKTtcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgIH0pO1xuXG5cbn0pOyIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5leHBvcnQgeyBnZW5lcmF0ZVJhbmdlQ29tcGFyaXNvbkV4cHJlc3Npb24gfTtcblxuLyoqXG4gKiBUaGUgYGdlbmVyYXRlUmFuZ2VDb21wYXJpc29uRXhwcmVzc2lvbigpYCBmdW5jdGlvbiBpcyBmdW5jdGlvbiB0aGF0IGdlbmVyYXRlcyBhIHN0cmluZyByZXByZXNlbnRhdGlvblxuICogb2YgYSBjb21wYXJpc29uIGV4cHJlc3Npb24gYmFzZWQgb24gYSByYW5nZSBvZiB2YWx1ZXMuIEl0IHRha2VzIHRocmVlIGFyZ3VtZW50czpcbiAqXG4gKiAtIGV4cHJlc3Npb24gKHJlcXVpcmVkKTogYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSByYW5nZSBvZiB2YWx1ZXMgaW4gdGhlIGZvcm1hdCBvZiBzdGFydDEtZW5kMSxzdGFydDItZW5kMix2YWx1ZTMuLi4uXG4gKiAtIHZhbHVlTmFtZSAocmVxdWlyZWQpOiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIG5hbWUgb2YgdGhlIHZhbHVlIHRoYXQgaXMgYmVpbmcgY29tcGFyZWQgdG8gdGhlIHJhbmdlIG9mIHZhbHVlcy5cbiAqIC0gb3B0aW9ucyAob3B0aW9uYWwpOiBhbiBvYmplY3QgY29udGFpbmluZyBhZGRpdGlvbmFsIG9wdGlvbnMgdG8gY3VzdG9taXplIHRoZSBjb21wYXJpc29uIGV4cHJlc3Npb24uXG4gKlxuICogVGhlIGdlbmVyYXRlUmFuZ2VDb21wYXJpc29uRXhwcmVzc2lvbigpIGZ1bmN0aW9uIHJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbXBhcmlzb24gZXhwcmVzc2lvbi5cbiAqXG4gKiAjIyBPcHRpb25zXG4gKiBUaGUgb3B0aW9uIHBhcmFtZXRlciBpcyBhbiBvYmplY3QgdGhhdCBjYW4gaGF2ZSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogdXJsRW5jb2RlIChib29sZWFuLCBkZWZhdWx0OiBmYWxzZSk6IGlmIHNldCB0byB0cnVlLCBVUkwgZW5jb2RlcyB0aGUgY29tcGFyaXNvbiBvcGVyYXRvcnMuXG4gKiBhbmRPcCAoc3RyaW5nLCBkZWZhdWx0OiAnJiYnKTogdGhlIGxvZ2ljYWwgQU5EIG9wZXJhdG9yIHRvIHVzZSBpbiB0aGUgZXhwcmVzc2lvbi5cbiAqIG9yT3AgKHN0cmluZywgZGVmYXVsdDogJ3x8Jyk6IHRoZSBsb2dpY2FsIE9SIG9wZXJhdG9yIHRvIHVzZSBpbiB0aGUgZXhwcmVzc2lvbi5cbiAqIGVxT3AgKHN0cmluZywgZGVmYXVsdDogJz09Jyk6IHRoZSBlcXVhbGl0eSBvcGVyYXRvciB0byB1c2UgaW4gdGhlIGV4cHJlc3Npb24uXG4gKiBnZU9wIChzdHJpbmcsIGRlZmF1bHQ6ICc+PScpOiB0aGUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIG9wZXJhdG9yIHRvIHVzZSBpbiB0aGUgZXhwcmVzc2lvbi5cbiAqIGxlT3AgKHN0cmluZywgZGVmYXVsdDogJzw9Jyk6IHRoZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gb3BlcmF0b3IgdG8gdXNlIGluIHRoZSBleHByZXNzaW9uLlxuICpcbiAqIEV4YW1wbGVzXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogY29uc3QgZXhwcmVzc2lvbiA9ICcwLTEwLDIwLTMwJztcbiAqIGNvbnN0IHZhbHVlTmFtZSA9ICdhZ2UnO1xuICogY29uc3Qgb3B0aW9ucyA9IHsgdXJsRW5jb2RlOiB0cnVlLCBhbmRPcDogJ2FuZCcsIG9yT3A6ICdvcicsIGVxT3A6ICc9JywgZ2VPcDogJz49JywgbGVPcDogJzw9JyB9O1xuICogY29uc3QgY29tcGFyaXNvbkV4cHJlc3Npb24gPSBnZW5lcmF0ZVJhbmdlQ29tcGFyaXNvbkV4cHJlc3Npb24oZXhwcmVzc2lvbiwgdmFsdWVOYW1lLCBvcHRpb25zKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhjb21wYXJpc29uRXhwcmVzc2lvbik7IC8vIGFnZSUzRSUzRDAlMjBhbmQlMjBhZ2UlM0MlM0QxMCUyMG9yJTIwYWdlJTNFJTNEMjAlMjBhbmQlMjBhZ2UlM0MlM0QzMFxuICogYGBgXG4gKlxuICogSW4gdGhpcyBleGFtcGxlLCB0aGUgZ2VuZXJhdGVSYW5nZUNvbXBhcmlzb25FeHByZXNzaW9uKCkgZnVuY3Rpb24gZ2VuZXJhdGVzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb21wYXJpc29uXG4gKiBleHByZXNzaW9uIGZvciB0aGUgZXhwcmVzc2lvbiBhbmQgdmFsdWVOYW1lIHBhcmFtZXRlcnMgd2l0aCB0aGUgc3BlY2lmaWVkIG9wdGlvbnMuIFRoZSByZXN1bHRpbmcgY29tcGFyaXNvblxuICogZXhwcmVzc2lvbiBpcyAnYWdlPj0wIGFuZCBhZ2U8PTEwIG9yIGFnZT49MjAgYW5kIGFnZTw9MzAnLCBVUkwgZW5jb2RlZCBhY2NvcmRpbmcgdG8gdGhlIHVybEVuY29kZSBvcHRpb24uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGV4cHJlc3Npb24gLSBUaGUgc3RyaW5nIGV4cHJlc3Npb24gdG8gZ2VuZXJhdGUgdGhlIGNvbXBhcmlzb24gZm9yLlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB2YWx1ZSB0byBjb21wYXJlIGFnYWluc3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIC0gVGhlIG9wdGlvbmFsIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnVybEVuY29kZT1mYWxzZV0gLSBXaGV0aGVyIHRvIGVuY29kZSBjb21wYXJpc29uIG9wZXJhdG9ycyBmb3IgdXNlIGluIGEgVVJMLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmFuZE9wPScmJiddIC0gVGhlIGxvZ2ljYWwgQU5EIG9wZXJhdG9yIHRvIHVzZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5vck9wPSd8fCddIC0gVGhlIGxvZ2ljYWwgT1Igb3BlcmF0b3IgdG8gdXNlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmVxT3A9Jz09J10gLSBUaGUgY29tcGFyaXNvbiBvcGVyYXRvciBmb3IgZXF1YWxpdHkgdG8gdXNlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmdlT3A9Jz49J10gLSBUaGUgY29tcGFyaXNvbiBvcGVyYXRvciBmb3IgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRvIHVzZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5sZU9wPSc8PSddIC0gVGhlIGNvbXBhcmlzb24gb3BlcmF0b3IgZm9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0byB1c2UuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBnZW5lcmF0ZWQgY29tcGFyaXNvbiBleHByZXNzaW9uLlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBpbnB1dCBpcyBpbnZhbGlkLlxuICogQHN1bW1hcnkgR2VuZXJhdGVzIGEgY29tcGFyaXNvbiBleHByZXNzaW9uIGJhc2VkIG9uIGEgcmFuZ2Ugb2YgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBnZW5lcmF0ZVJhbmdlQ29tcGFyaXNvbkV4cHJlc3Npb24oXG5cdGV4cHJlc3Npb24sXG5cdHZhbHVlTmFtZSxcblx0b3B0aW9ucyA9IHt9LFxuKSB7XG5cdGNvbnN0IHtcblx0XHR1cmxFbmNvZGUgPSBmYWxzZSxcblx0XHRhbmRPcCA9IFwiJiZcIixcblx0XHRvck9wID0gXCJ8fFwiLFxuXHRcdGVxT3AgPSBcIj09XCIsXG5cdFx0Z2VPcCA9IFwiPj1cIixcblx0XHRsZU9wID0gXCI8PVwiLFxuXHR9ID0gb3B0aW9ucztcblx0Y29uc3QgcmFuZ2VzID0gZXhwcmVzc2lvbi5zcGxpdChcIixcIik7XG5cdGxldCBjb21wYXJpc29uID0gXCJcIjtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspIHtcblx0XHRjb25zdCByYW5nZSA9IHJhbmdlc1tpXS50cmltKCk7XG5cdFx0aWYgKHJhbmdlID09PSBcIlwiKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcmFuZ2UgJyR7cmFuZ2V9J2ApO1xuXHRcdH0gZWxzZSBpZiAocmFuZ2UuaW5jbHVkZXMoXCItXCIpKSB7XG5cdFx0XHRjb25zdCBbc3RhcnQsIGVuZF0gPSByYW5nZVxuXHRcdFx0XHQuc3BsaXQoXCItXCIpXG5cdFx0XHRcdC5tYXAoKHMpID0+IChzID09PSBcIlwiID8gbnVsbCA6IHBhcnNlRmxvYXQocykpKTtcblx0XHRcdGlmICgoc3RhcnQgIT09IG51bGwgJiYgaXNOYU4oc3RhcnQpKSB8fCAoZW5kICE9PSBudWxsICYmIGlzTmFOKGVuZCkpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB2YWx1ZSBpbiByYW5nZSAnJHtyYW5nZX0nYCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoc3RhcnQgIT09IG51bGwgJiYgZW5kICE9PSBudWxsICYmIHN0YXJ0ID4gZW5kKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgSW52YWxpZCByYW5nZSAnJHtyYW5nZX0nYCk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBjb21wU3RhcnQgPVxuXHRcdFx0XHRzdGFydCAhPT0gbnVsbFxuXHRcdFx0XHRcdD8gYCR7dmFsdWVOYW1lfSR7dXJsRW5jb2RlID8gZW5jb2RlVVJJQ29tcG9uZW50KGdlT3ApIDogZ2VPcH0ke3N0YXJ0fWBcblx0XHRcdFx0XHQ6IFwiXCI7XG5cdFx0XHRjb25zdCBjb21wRW5kID1cblx0XHRcdFx0ZW5kICE9PSBudWxsXG5cdFx0XHRcdFx0PyBgJHt2YWx1ZU5hbWV9JHt1cmxFbmNvZGUgPyBlbmNvZGVVUklDb21wb25lbnQobGVPcCkgOiBsZU9wfSR7ZW5kfWBcblx0XHRcdFx0XHQ6IFwiXCI7XG5cdFx0XHRjb25zdCBjb21wUmFuZ2UgPSBgJHtjb21wU3RhcnR9JHtcblx0XHRcdFx0Y29tcFN0YXJ0ICYmIGNvbXBFbmQgPyBgICR7YW5kT3B9IGAgOiBcIlwiXG5cdFx0XHR9JHtjb21wRW5kfWA7XG5cdFx0XHRjb21wYXJpc29uICs9IHJhbmdlcy5sZW5ndGggPiAxID8gYCgke2NvbXBSYW5nZX0pYCA6IGNvbXBSYW5nZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgdmFsdWUgPSBwYXJzZUZsb2F0KHJhbmdlKTtcblx0XHRcdGlmIChpc05hTih2YWx1ZSkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHZhbHVlICcke3JhbmdlfSdgKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGNvbXBWYWx1ZSA9IGAke3ZhbHVlTmFtZX0ke1xuXHRcdFx0XHR1cmxFbmNvZGUgPyBlbmNvZGVVUklDb21wb25lbnQoZXFPcCkgOiBlcU9wXG5cdFx0XHR9JHt2YWx1ZX1gO1xuXHRcdFx0Y29tcGFyaXNvbiArPSByYW5nZXMubGVuZ3RoID4gMSA/IGAoJHtjb21wVmFsdWV9KWAgOiBjb21wVmFsdWU7XG5cdFx0fVxuXHRcdGlmIChpIDwgcmFuZ2VzLmxlbmd0aCAtIDEpIHtcblx0XHRcdGNvbXBhcmlzb24gKz0gYCAke29yT3B9IGA7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBjb21wYXJpc29uO1xufVxuIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge2dlbmVyYXRlUmFuZ2VDb21wYXJpc29uRXhwcmVzc2lvbn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90ZXh0L3V0aWwubWpzXCI7XG5cbmRlc2NyaWJlKCdnZW5lcmF0ZVJhbmdlQ29tcGFyaXNvbkV4cHJlc3Npb24nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBjb3JyZWN0IGNvbXBhcmlzb24gZXhwcmVzc2lvbiBmb3Igc2luZ2xlIHZhbHVlcycsICgpID0+IHtcbiAgICAgICAgY29uc3QgZXhwcmVzc2lvbiA9ICcxLDMsNSc7XG4gICAgICAgIGNvbnN0IHZhbHVlTmFtZSA9ICd4JztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZ2VuZXJhdGVSYW5nZUNvbXBhcmlzb25FeHByZXNzaW9uKGV4cHJlc3Npb24sIHZhbHVlTmFtZSk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmVxdWFsKCcoeD09MSkgfHwgKHg9PTMpIHx8ICh4PT01KScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBjb3JyZWN0IGNvbXBhcmlzb24gZXhwcmVzc2lvbiBmb3IgcmFuZ2VzJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBleHByZXNzaW9uID0gJzEtMyw2LTgnO1xuICAgICAgICBjb25zdCB2YWx1ZU5hbWUgPSAneCc7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGdlbmVyYXRlUmFuZ2VDb21wYXJpc29uRXhwcmVzc2lvbihleHByZXNzaW9uLCB2YWx1ZU5hbWUpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5lcXVhbCgnKHg+PTEgJiYgeDw9MykgfHwgKHg+PTYgJiYgeDw9OCknKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgY29ycmVjdCBjb21wYXJpc29uIGV4cHJlc3Npb24gZm9yIG1peGVkIHJhbmdlcyBhbmQgc2luZ2xlIHZhbHVlcycsICgpID0+IHtcbiAgICAgICAgY29uc3QgZXhwcmVzc2lvbiA9ICcxLTMsNSw3LTknO1xuICAgICAgICBjb25zdCB2YWx1ZU5hbWUgPSAneCc7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGdlbmVyYXRlUmFuZ2VDb21wYXJpc29uRXhwcmVzc2lvbihleHByZXNzaW9uLCB2YWx1ZU5hbWUpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5lcXVhbCgnKHg+PTEgJiYgeDw9MykgfHwgKHg9PTUpIHx8ICh4Pj03ICYmIHg8PTkpJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGFuIGVycm9yIGZvciBpbnZhbGlkIHJhbmdlJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBleHByZXNzaW9uID0gJzEtMyw1LTQnO1xuICAgICAgICBjb25zdCB2YWx1ZU5hbWUgPSAneCc7XG4gICAgICAgIGV4cGVjdCgoKSA9PiBnZW5lcmF0ZVJhbmdlQ29tcGFyaXNvbkV4cHJlc3Npb24oZXhwcmVzc2lvbiwgdmFsdWVOYW1lKSkudG8udGhyb3coYEludmFsaWQgcmFuZ2UgJzUtNCdgKTtcbiAgICB9KTtcblxuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciBmb3IgaW52YWxpZCB2YWx1ZScsICgpID0+IHtcbiAgICAgICAgY29uc3QgZXhwcmVzc2lvbiA9ICcxLTMsYSc7XG4gICAgICAgIGNvbnN0IHZhbHVlTmFtZSA9ICd4JztcbiAgICAgICAgZXhwZWN0KCgpID0+IGdlbmVyYXRlUmFuZ2VDb21wYXJpc29uRXhwcmVzc2lvbihleHByZXNzaW9uLCB2YWx1ZU5hbWUpKS50by50aHJvdygnSW52YWxpZCB2YWx1ZScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBjb3JyZWN0IGNvbXBhcmlzb24gZXhwcmVzc2lvbiB3aXRoIGN1c3RvbSBvcGVyYXRvcnMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSAnMS0zLDUnO1xuICAgICAgICBjb25zdCB2YWx1ZU5hbWUgPSAneCc7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBhbmRPcDogJ0FORCcsXG4gICAgICAgICAgICBvck9wOiAnT1InLFxuICAgICAgICAgICAgZXFPcDogJz09PScsXG4gICAgICAgICAgICBnZU9wOiAnPj0nLFxuICAgICAgICAgICAgbGVPcDogJzw9JyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZ2VuZXJhdGVSYW5nZUNvbXBhcmlzb25FeHByZXNzaW9uKGV4cHJlc3Npb24sIHZhbHVlTmFtZSwgb3B0aW9ucyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmVxdWFsKCcoeD49MSBBTkQgeDw9MykgT1IgKHg9PT01KScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBjb3JyZWN0IGNvbXBhcmlzb24gZXhwcmVzc2lvbiB3aXRoIHVybEVuY29kZSBvcHRpb24nLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRlc3RDYXNlcyA9IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAnMSwzLDUnLFxuICAgICAgICAgICAgICAgIHZhbHVlTmFtZTogJ3gnLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiAnKHglM0QlM0QxKSB8fCAoeCUzRCUzRDMpIHx8ICh4JTNEJTNENSknLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAnLTEwJyxcbiAgICAgICAgICAgICAgICB2YWx1ZU5hbWU6ICd4JyxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogJ3glM0MlM0QxMCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICcxMC0nLFxuICAgICAgICAgICAgICAgIHZhbHVlTmFtZTogJ3gnLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiAneCUzRSUzRDEwJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogJzEtMyw2LTgnLFxuICAgICAgICAgICAgICAgIHZhbHVlTmFtZTogJ3knLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiAnKHklM0UlM0QxICYmIHklM0MlM0QzKSB8fCAoeSUzRSUzRDYgJiYgeSUzQyUzRDgpJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogJzEtMyw1LDctOScsXG4gICAgICAgICAgICAgICAgdmFsdWVOYW1lOiAneicsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6ICcoeiUzRSUzRDEgJiYgeiUzQyUzRDMpIHx8ICh6JTNEJTNENSkgfHwgKHolM0UlM0Q3ICYmIHolM0MlM0Q5KScsXG4gICAgICAgICAgICB9LFxuICAgICAgICBdO1xuXG4gICAgICAgIHRlc3RDYXNlcy5mb3JFYWNoKCh7ZXhwcmVzc2lvbiwgdmFsdWVOYW1lLCBleHBlY3RlZH0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGdlbmVyYXRlUmFuZ2VDb21wYXJpc29uRXhwcmVzc2lvbihleHByZXNzaW9uLCB2YWx1ZU5hbWUsIHt1cmxFbmNvZGU6IHRydWV9KTtcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmVxdWFsKGV4cGVjdGVkKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGNvcnJlY3QgY29tcGFyaXNvbiBleHByZXNzaW9uIGZvciBvcGVuLWVuZGVkIHJhbmdlcyB3aXRoIHVybEVuY29kZSBvcHRpb24nLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRlc3RDYXNlcyA9IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAnMTAtJyxcbiAgICAgICAgICAgICAgICB2YWx1ZU5hbWU6ICd4JyxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogJ3glM0UlM0QxMCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICctMTAnLFxuICAgICAgICAgICAgICAgIHZhbHVlTmFtZTogJ3knLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiAneSUzQyUzRDEwJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF07XG5cbiAgICAgICAgdGVzdENhc2VzLmZvckVhY2goKHtleHByZXNzaW9uLCB2YWx1ZU5hbWUsIGV4cGVjdGVkfSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZ2VuZXJhdGVSYW5nZUNvbXBhcmlzb25FeHByZXNzaW9uKGV4cHJlc3Npb24sIHZhbHVlTmFtZSwge3VybEVuY29kZTogdHJ1ZX0pO1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZXF1YWwoZXhwZWN0ZWQpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG59KTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5leHBvcnQgeyBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaCwgY3JlYXRlQnJhY2tldGVkS2V5VmFsdWVIYXNoIH07XG5cbi8qKlxuICogUGFyc2VzIGEgc3RyaW5nIGNvbnRhaW5pbmcgYnJhY2tldGVkIGtleS12YWx1ZSBwYWlycyBhbmQgcmV0dXJucyBhbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBwYXJzZWQgcmVzdWx0LlxuICpcbiAqIC0gVGhlIHN0cmluZyBzdGFydHMgd2l0aCBhIGhhc2ggc3ltYm9sICMuXG4gKiAtIEFmdGVyIHRoZSBoYXNoIHN5bWJvbCwgdGhlcmUgYXJlIG9uZSBvciBtb3JlIHNlbGVjdG9yIHN0cmluZ3MsIHNlcGFyYXRlZCBieSBhIHNlbWljb2xvbiA7LlxuICogLSBFYWNoIHNlbGVjdG9yIHN0cmluZyBoYXMgdGhlIGZvcm1hdCBzZWxlY3Rvck5hbWUoa2V5MT12YWx1ZTEsa2V5Mj12YWx1ZTIsLi4uKS5cbiAqIC0gVGhlIHNlbGVjdG9yIG5hbWUgaXMgYSBzdHJpbmcgb2Ygb25lIG9yIG1vcmUgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMuXG4gKiAtIFRoZSBrZXktdmFsdWUgcGFpcnMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMgLCBhbmQgYXJlIG9mIHRoZSBmb3JtIGtleT12YWx1ZS5cbiAqIC0gVGhlIGtleSBpcyBhIHN0cmluZyBvZiBvbmUgb3IgbW9yZSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycy5cbiAqIC0gVGhlIHZhbHVlIGNhbiBiZSBhbiBlbXB0eSBzdHJpbmcgb3IgYSBzdHJpbmcgb2Ygb25lIG9yIG1vcmUgY2hhcmFjdGVycy5cbiAqIC0gSWYgdGhlIHZhbHVlIGNvbnRhaW5zIGNvbW1hcywgaXQgbXVzdCBiZSBlbmNsb3NlZCBpbiBkb3VibGUgcXVvdGVzIFwiLlxuICogLSBUaGUgZW50aXJlIGtleS12YWx1ZSBwYWlyIG11c3QgYmUgVVJMLWVuY29kZWQuXG4gKiAtIFRoZSBjbG9zaW5nIHBhcmVudGhlc2lzICkgZm9yIGVhY2ggc2VsZWN0b3IgbXVzdCBiZSBwcmVzZW50LCBldmVuIGlmIHRoZXJlIGFyZSBubyBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiAvLyBFeGFtcGxlIDE6XG4gKiBjb25zdCBoYXNoU3RyaW5nID0gJyNzZWxlY3RvcjEoa2V5MT12YWx1ZTEsa2V5Mj12YWx1ZTIpO3NlbGVjdG9yMihrZXkzPXZhbHVlMyknO1xuICogY29uc3QgcmVzdWx0ID0gcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaGFzaFN0cmluZyk7XG4gKiAvLyByZXN1bHQgPT4geyBzZWxlY3RvcjE6IHsga2V5MTogXCJ2YWx1ZTFcIiwga2V5MjogXCJ2YWx1ZTJcIiB9LCBzZWxlY3RvcjI6IHsga2V5MzogXCJ2YWx1ZTNcIiB9IH1cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogLy8gRXhhbXBsZSAyOlxuICogY29uc3QgaGFzaFN0cmluZyA9ICcjc2VsZWN0b3IxKGtleTE9dmFsdWUxLGtleTI9dmFsdWUyKTtzZWxlY3RvcjIoJztcbiAqIGNvbnN0IHJlc3VsdCA9IHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGhhc2hTdHJpbmcpO1xuICogLy8gcmVzdWx0ID0+IHt9XG4gKiBgYGBcbiAqXG4gKiBAc2luY2UgMy4zNy4wXG4gKiBAcGFyYW0ge3N0cmluZ30gaGFzaFN0cmluZyAtIFRoZSBzdHJpbmcgdG8gcGFyc2UsIGNvbnRhaW5pbmcgYnJhY2tldGVkIGtleS12YWx1ZSBwYWlycy5cbiAqIEByZXR1cm4ge09iamVjdH0gLSBBbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBwYXJzZWQgcmVzdWx0LCB3aXRoIGtleXMgcmVwcmVzZW50aW5nIHRoZSBzZWxlY3RvcnMgYW5kIHZhbHVlcyByZXByZXNlbnRpbmcgdGhlIGtleS12YWx1ZSBwYWlycyBhc3NvY2lhdGVkIHdpdGggZWFjaCBzZWxlY3Rvci5cbiAqICAgICAgICAgICAgICAgICAgICAtIFJldHVybnMgYW4gZW1wdHkgb2JqZWN0IGlmIHRoZXJlIHdhcyBhbiBlcnJvciBkdXJpbmcgcGFyc2luZy4gKi9cbmZ1bmN0aW9uIHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGhhc2hTdHJpbmcpIHtcblx0Y29uc3Qgc2VsZWN0b3JzID0ge307XG5cdC8vY29uc3Qgc2VsZWN0b3JTdGFjayA9IFtdO1xuXHQvL2NvbnN0IGtleVZhbHVlU3RhY2sgPSBbXTtcblxuXHRjb25zdCB0cmltbWVkSGFzaFN0cmluZyA9IGhhc2hTdHJpbmcudHJpbSgpO1xuXHRjb25zdCBjbGVhbmVkSGFzaFN0cmluZyA9XG5cdFx0dHJpbW1lZEhhc2hTdHJpbmcuY2hhckF0KDApID09PSBcIiNcIlxuXHRcdFx0PyB0cmltbWVkSGFzaFN0cmluZy5zbGljZSgxKVxuXHRcdFx0OiB0cmltbWVkSGFzaFN0cmluZztcblxuXHQvL2NvbnN0IHNlbGVjdG9ycyA9IChrZXlWYWx1ZVN0YWNrLmxlbmd0aCA+IDApID8gcmVzdWx0W3NlbGVjdG9yU3RhY2tbc2VsZWN0b3JTdGFjay5sZW5ndGggLSAxXV0gOiByZXN1bHQ7XG5cdGxldCBjdXJyZW50U2VsZWN0b3IgPSBcIlwiO1xuXG5cdGZ1bmN0aW9uIGFkZFRvUmVzdWx0KGtleSwgdmFsdWUpIHtcblx0XHRpZiAoY3VycmVudFNlbGVjdG9yICYmIGtleSkge1xuXHRcdFx0aWYgKCFzZWxlY3RvcnNbY3VycmVudFNlbGVjdG9yXSkge1xuXHRcdFx0XHRzZWxlY3RvcnNbY3VycmVudFNlbGVjdG9yXSA9IHt9O1xuXHRcdFx0fVxuXG5cdFx0XHRzZWxlY3RvcnNbY3VycmVudFNlbGVjdG9yXVtrZXldID0gdmFsdWU7XG5cdFx0fVxuXHR9XG5cblx0bGV0IGN1cnJlbnRLZXkgPSBcIlwiO1xuXHRsZXQgY3VycmVudFZhbHVlID0gXCJcIjtcblx0bGV0IGluS2V5ID0gdHJ1ZTtcblx0bGV0IGluVmFsdWUgPSBmYWxzZTtcblx0bGV0IGluUXVvdGVkVmFsdWUgPSBmYWxzZTtcblx0bGV0IGluU2VsZWN0b3IgPSB0cnVlO1xuXHRsZXQgZXNjYXBlZCA9IGZhbHNlO1xuXHRsZXQgcXVvdGVkVmFsdWVTdGFydENoYXIgPSBcIlwiO1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgY2xlYW5lZEhhc2hTdHJpbmcubGVuZ3RoOyBpKyspIHtcblx0XHRjb25zdCBjID0gY2xlYW5lZEhhc2hTdHJpbmdbaV07XG5cdFx0Y29uc3QgbmV4dENoYXIgPSBjbGVhbmVkSGFzaFN0cmluZz8uW2kgKyAxXTtcblxuXHRcdGlmIChjID09PSBcIlxcXFxcIiAmJiAhZXNjYXBlZCkge1xuXHRcdFx0ZXNjYXBlZCA9IHRydWU7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRpZiAoZXNjYXBlZCkge1xuXHRcdFx0aWYgKGluU2VsZWN0b3IpIHtcblx0XHRcdFx0Y3VycmVudFNlbGVjdG9yICs9IGM7XG5cdFx0XHR9IGVsc2UgaWYgKGluS2V5KSB7XG5cdFx0XHRcdGN1cnJlbnRLZXkgKz0gYztcblx0XHRcdH0gZWxzZSBpZiAoaW5WYWx1ZSkge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgKz0gYztcblx0XHRcdH1cblx0XHRcdGVzY2FwZWQgPSBmYWxzZTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGlmIChpblF1b3RlZFZhbHVlICYmIHF1b3RlZFZhbHVlU3RhcnRDaGFyICE9PSBjKSB7XG5cdFx0XHRpZiAoaW5TZWxlY3Rvcikge1xuXHRcdFx0XHRjdXJyZW50U2VsZWN0b3IgKz0gYztcblx0XHRcdH0gZWxzZSBpZiAoaW5LZXkpIHtcblx0XHRcdFx0Y3VycmVudEtleSArPSBjO1xuXHRcdFx0fSBlbHNlIGlmIChpblZhbHVlKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSArPSBjO1xuXHRcdFx0fVxuXG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRpZiAoYyA9PT0gXCI7XCIgJiYgaW5TZWxlY3Rvcikge1xuXHRcdFx0aW5TZWxlY3RvciA9IHRydWU7XG5cdFx0XHRjdXJyZW50U2VsZWN0b3IgPSBcIlwiO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0aWYgKGluU2VsZWN0b3IgPT09IHRydWUgJiYgYyAhPT0gXCIoXCIpIHtcblx0XHRcdGN1cnJlbnRTZWxlY3RvciArPSBjO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0aWYgKGMgPT09IFwiKFwiICYmIGluU2VsZWN0b3IpIHtcblx0XHRcdGluU2VsZWN0b3IgPSBmYWxzZTtcblx0XHRcdGluS2V5ID0gdHJ1ZTtcblxuXHRcdFx0Y3VycmVudEtleSA9IFwiXCI7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRpZiAoaW5LZXkgPT09IHRydWUgJiYgYyAhPT0gXCI9XCIpIHtcblx0XHRcdGN1cnJlbnRLZXkgKz0gYztcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGlmIChjID09PSBcIj1cIiAmJiBpbktleSkge1xuXHRcdFx0aW5LZXkgPSBmYWxzZTtcblx0XHRcdGluVmFsdWUgPSB0cnVlO1xuXG5cdFx0XHRpZiAobmV4dENoYXIgPT09ICdcIicgfHwgbmV4dENoYXIgPT09IFwiJ1wiKSB7XG5cdFx0XHRcdGluUXVvdGVkVmFsdWUgPSB0cnVlO1xuXHRcdFx0XHRxdW90ZWRWYWx1ZVN0YXJ0Q2hhciA9IG5leHRDaGFyO1xuXHRcdFx0XHRpKys7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRjdXJyZW50VmFsdWUgPSBcIlwiO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0aWYgKGluVmFsdWUgPT09IHRydWUpIHtcblx0XHRcdGlmIChpblF1b3RlZFZhbHVlKSB7XG5cdFx0XHRcdGlmIChjID09PSBxdW90ZWRWYWx1ZVN0YXJ0Q2hhcikge1xuXHRcdFx0XHRcdGluUXVvdGVkVmFsdWUgPSBmYWxzZTtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSArPSBjO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGMgPT09IFwiLFwiKSB7XG5cdFx0XHRcdGluVmFsdWUgPSBmYWxzZTtcblx0XHRcdFx0aW5LZXkgPSB0cnVlO1xuXHRcdFx0XHRjb25zdCBkZWNvZGVkQ3VycmVudFZhbHVlID0gZGVjb2RlVVJJQ29tcG9uZW50KGN1cnJlbnRWYWx1ZSk7XG5cdFx0XHRcdGFkZFRvUmVzdWx0KGN1cnJlbnRLZXksIGRlY29kZWRDdXJyZW50VmFsdWUpO1xuXHRcdFx0XHRjdXJyZW50S2V5ID0gXCJcIjtcblx0XHRcdFx0Y3VycmVudFZhbHVlID0gXCJcIjtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChjID09PSBcIilcIikge1xuXHRcdFx0XHRpblZhbHVlID0gZmFsc2U7XG5cdFx0XHRcdC8vaW5LZXkgPSB0cnVlO1xuXHRcdFx0XHRpblNlbGVjdG9yID0gdHJ1ZTtcblxuXHRcdFx0XHRjb25zdCBkZWNvZGVkQ3VycmVudFZhbHVlID0gZGVjb2RlVVJJQ29tcG9uZW50KGN1cnJlbnRWYWx1ZSk7XG5cdFx0XHRcdGFkZFRvUmVzdWx0KGN1cnJlbnRLZXksIGRlY29kZWRDdXJyZW50VmFsdWUpO1xuXHRcdFx0XHRjdXJyZW50S2V5ID0gXCJcIjtcblx0XHRcdFx0Y3VycmVudFZhbHVlID0gXCJcIjtcblx0XHRcdFx0Y3VycmVudFNlbGVjdG9yID0gXCJcIjtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGN1cnJlbnRWYWx1ZSArPSBjO1xuXG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cdH1cblxuXHRpZiAoaW5TZWxlY3Rvcikge1xuXHRcdHJldHVybiBzZWxlY3RvcnM7XG5cdH1cblxuXHRyZXR1cm4ge307XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGhhc2ggc2VsZWN0b3Igc3RyaW5nIGZyb20gYW4gb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgLSBUaGUgb2JqZWN0IGNvbnRhaW5pbmcgc2VsZWN0b3JzIGFuZCBrZXktdmFsdWUgcGFpcnMuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGFkZEhhc2hQcmVmaXggLSBXaGV0aGVyIHRvIGFkZCB0aGUgaGFzaCBwcmVmaXggIyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmcuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBoYXNoIHNlbGVjdG9yIHN0cmluZy5cbiAqIEBzaW5jZSAzLjM3LjBcbiAqL1xuZnVuY3Rpb24gY3JlYXRlQnJhY2tldGVkS2V5VmFsdWVIYXNoKG9iamVjdCwgYWRkSGFzaFByZWZpeCA9IHRydWUpIHtcblx0aWYgKCFvYmplY3QpIHtcblx0XHRyZXR1cm4gYWRkSGFzaFByZWZpeCA/IFwiI1wiIDogXCJcIjtcblx0fVxuXG5cdGxldCBoYXNoU3RyaW5nID0gXCJcIjtcblxuXHRmdW5jdGlvbiBlbmNvZGVLZXlWYWx1ZShrZXksIHZhbHVlKSB7XG5cdFx0cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChrZXkpICsgXCI9XCIgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpO1xuXHR9XG5cblx0Zm9yIChjb25zdCBzZWxlY3RvciBpbiBvYmplY3QpIHtcblx0XHRpZiAob2JqZWN0Lmhhc093blByb3BlcnR5KHNlbGVjdG9yKSkge1xuXHRcdFx0Y29uc3Qga2V5VmFsdWVQYWlycyA9IG9iamVjdFtzZWxlY3Rvcl07XG5cdFx0XHRsZXQgc2VsZWN0b3JTdHJpbmcgPSBzZWxlY3Rvcjtcblx0XHRcdGxldCBrZXlWYWx1ZVN0cmluZyA9IFwiXCI7XG5cblx0XHRcdGZvciAoY29uc3Qga2V5IGluIGtleVZhbHVlUGFpcnMpIHtcblx0XHRcdFx0aWYgKGtleVZhbHVlUGFpcnMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuXHRcdFx0XHRcdGNvbnN0IHZhbHVlID0ga2V5VmFsdWVQYWlyc1trZXldO1xuXHRcdFx0XHRcdGtleVZhbHVlU3RyaW5nICs9IGtleVZhbHVlU3RyaW5nLmxlbmd0aCA9PT0gMCA/IFwiXCIgOiBcIixcIjtcblx0XHRcdFx0XHRrZXlWYWx1ZVN0cmluZyArPSBlbmNvZGVLZXlWYWx1ZShrZXksIHZhbHVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoa2V5VmFsdWVTdHJpbmcubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRzZWxlY3RvclN0cmluZyArPSBcIihcIiArIGtleVZhbHVlU3RyaW5nICsgXCIpXCI7XG5cdFx0XHRcdGhhc2hTdHJpbmcgKz0gaGFzaFN0cmluZy5sZW5ndGggPT09IDAgPyBcIlwiIDogXCI7XCI7XG5cdFx0XHRcdGhhc2hTdHJpbmcgKz0gc2VsZWN0b3JTdHJpbmc7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGFkZEhhc2hQcmVmaXggPyBcIiNcIiArIGhhc2hTdHJpbmcgOiBoYXNoU3RyaW5nO1xufVxuIiwgIi8vIHRlc3QuanNcbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiO1xuaW1wb3J0IHtcbiAgICBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaCxcbiAgICBjcmVhdGVCcmFja2V0ZWRLZXlWYWx1ZUhhc2hcbn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90ZXh0L2JyYWNrZXRlZC1rZXktdmFsdWUtaGFzaC5tanNcIjtcblxuZGVzY3JpYmUoXCJwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaFwiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIGFuIGVtcHR5IG9iamVjdCBmb3IgYW4gZW1wdHkgc3RyaW5nXCIsICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBcIlwiO1xuICAgICAgICBjb25zdCBleHBlY3RlZFJlc3VsdCA9IHt9O1xuICAgICAgICBleHBlY3QocGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaW5wdXQpKS50by5kZWVwLmVxdWFsKGV4cGVjdGVkUmVzdWx0KTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIHBhcnNlIGEgc2luZ2xlIHNlbGVjdG9yIHdpdGggb25lIGtleS12YWx1ZSBwYWlyXCIsICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBcIiNzZWxlY3RvcjEoa2V5MT12YWx1ZTEpXCI7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkUmVzdWx0ID0ge1xuICAgICAgICAgICAgc2VsZWN0b3IxOiB7XG4gICAgICAgICAgICAgICAga2V5MTogXCJ2YWx1ZTFcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGV4cGVjdChwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChpbnB1dCkpLnRvLmRlZXAuZXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgcGFyc2UgbXVsdGlwbGUgc2VsZWN0b3JzIHdpdGggbXVsdGlwbGUga2V5LXZhbHVlIHBhaXJzXCIsICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBcIiNzZWxlY3RvcjEoa2V5MT12YWx1ZTEsa2V5Mj12YWx1ZTIpO3NlbGVjdG9yMihrZXkzPXZhbHVlMyxrZXk0PXZhbHVlNClcIjtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWRSZXN1bHQgPSB7XG4gICAgICAgICAgICBzZWxlY3RvcjE6IHtcbiAgICAgICAgICAgICAgICBrZXkxOiBcInZhbHVlMVwiLFxuICAgICAgICAgICAgICAgIGtleTI6IFwidmFsdWUyXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2VsZWN0b3IyOiB7XG4gICAgICAgICAgICAgICAga2V5MzogXCJ2YWx1ZTNcIixcbiAgICAgICAgICAgICAgICBrZXk0OiBcInZhbHVlNFwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgZXhwZWN0KHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGlucHV0KSkudG8uZGVlcC5lcXVhbChleHBlY3RlZFJlc3VsdCk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBkZWNvZGUgVVJMLWVuY29kZWQgdmFsdWVzXCIsICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBcIiNzZWxlY3RvcjEoa2V5MT12YWx1ZTElMkN3aXRoJTIwY29tbWEpXCI7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkUmVzdWx0ID0ge1xuICAgICAgICAgICAgc2VsZWN0b3IxOiB7XG4gICAgICAgICAgICAgICAga2V5MTogXCJ2YWx1ZTEsd2l0aCBjb21tYVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaW5wdXQpO1xuICAgICAgICBleHBlY3QocmVzdWx0LnNlbGVjdG9yMS5rZXkxKS50by5lcXVhbChleHBlY3RlZFJlc3VsdC5zZWxlY3RvcjEua2V5MSk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBoYW5kbGUgaW5wdXQgd2l0aG91dCBhIGxlYWRpbmcgaGFzaFwiLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gXCJzZWxlY3RvcjEoa2V5MT12YWx1ZTEpXCI7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkUmVzdWx0ID0ge1xuICAgICAgICAgICAgc2VsZWN0b3IxOiB7XG4gICAgICAgICAgICAgICAga2V5MTogXCJ2YWx1ZTFcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGV4cGVjdChwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChpbnB1dCkpLnRvLmRlZXAuZXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIGFuIGVtcHR5IG9iamVjdCBmb3IgaW52YWxpZCBpbnB1dFwiLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gXCIjc2VsZWN0b3IxKGtleTE9dmFsdWUxLGtleTJcIjtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWRSZXN1bHQgPSB7fTtcbiAgICAgICAgZXhwZWN0KHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGlucHV0KSkudG8uZGVlcC5lcXVhbChleHBlY3RlZFJlc3VsdCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBvYmplY3QgZm9yIGFuIGVtcHR5IGlucHV0IHN0cmluZycsICgpID0+IHtcbiAgICAgICAgY29uc3QgaGFzaFN0cmluZyA9ICcnO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChoYXNoU3RyaW5nKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbCh7fSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBvYmplY3QgZm9yIGFuIGludmFsaWQgaW5wdXQgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNoU3RyaW5nID0gJyNpbnZhbGlkJztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaGFzaFN0cmluZyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoe30pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwYXJzZSBhIHNpbXBsZSBpbnB1dCBzdHJpbmcgd2l0aCBvbmUgc2VsZWN0b3IgYW5kIG9uZSBrZXktdmFsdWUgcGFpcicsICgpID0+IHtcbiAgICAgICAgY29uc3QgaGFzaFN0cmluZyA9ICcjc2VsZWN0b3Ioa2V5PXZhbHVlKSc7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGhhc2hTdHJpbmcpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKHtzZWxlY3Rvcjoge2tleTogJ3ZhbHVlJ319KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcGFyc2UgYW4gaW5wdXQgc3RyaW5nIHdpdGggbXVsdGlwbGUgc2VsZWN0b3JzIGFuZCBrZXktdmFsdWUgcGFpcnMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhc2hTdHJpbmcgPSAnI3NlbGVjdG9yMShrZXkxPXZhbHVlMSk7c2VsZWN0b3IyKGtleTI9dmFsdWUyKSc7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGhhc2hTdHJpbmcpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKHtzZWxlY3RvcjE6IHtrZXkxOiAndmFsdWUxJ30sIHNlbGVjdG9yMjoge2tleTI6ICd2YWx1ZTInfX0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgZW1wdHkgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNoU3RyaW5nID0gJyNzZWxlY3RvcihrZXkxPSxrZXkyPSknO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChoYXNoU3RyaW5nKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbCh7c2VsZWN0b3I6IHtrZXkxOiAnJywga2V5MjogJyd9fSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBwZXJjZW50LWVuY29kZWQgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNoU3RyaW5nID0gJyNzZWxlY3RvcihrZXkxPXZhbHVlJTIwMSxrZXkyPXZhbHVlJTJDMiknO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChoYXNoU3RyaW5nKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbCh7c2VsZWN0b3I6IHtrZXkxOiAndmFsdWUgMScsIGtleTI6ICd2YWx1ZSwyJ319KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIGRvdWJsZS1xdW90ZWQgdmFsdWVzIHdpdGggY29tbWFzJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNoU3RyaW5nID0gJyNzZWxlY3RvcihrZXkxPVwidmFsdWUsMVwiLGtleTI9XCJ2YWx1ZSwyXCIpJztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaGFzaFN0cmluZyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoe3NlbGVjdG9yOiB7a2V5MTogJ3ZhbHVlLDEnLCBrZXkyOiAndmFsdWUsMid9fSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGlnbm9yZSBsZWFkaW5nIGhhc2ggc3ltYm9sICgjKScsICgpID0+IHtcbiAgICAgICAgY29uc3QgaGFzaFN0cmluZyA9ICdzZWxlY3RvcihrZXk9dmFsdWUpJztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaGFzaFN0cmluZyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoe3NlbGVjdG9yOiB7a2V5OiAndmFsdWUnfX0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBpZ25vcmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGUgc3BhY2UnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhc2hTdHJpbmcgPSAnICAjc2VsZWN0b3Ioa2V5PXZhbHVlKSAgJztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaGFzaFN0cmluZyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoe3NlbGVjdG9yOiB7a2V5OiAndmFsdWUnfX0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IGlmIHRoZSBpbnB1dCBzdHJpbmcgZW5kcyBwcmVtYXR1cmVseScsICgpID0+IHtcbiAgICAgICAgY29uc3QgaGFzaFN0cmluZyA9ICcjc2VsZWN0b3Ioa2V5PXZhbHVlJztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaGFzaFN0cmluZyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoe30pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IGlmIGEgc2VsZWN0b3IgaXMgbWlzc2luZycsICgpID0+IHtcbiAgICAgICAgY29uc3QgaGFzaFN0cmluZyA9ICcjKGtleT12YWx1ZSknO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChoYXNoU3RyaW5nKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbCh7fSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBvYmplY3QgaWYgYSBrZXkgaXMgbWlzc2luZycsICgpID0+IHtcbiAgICAgICAgY29uc3QgaGFzaFN0cmluZyA9ICcjc2VsZWN0b3IoPXZhbHVlKSc7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGhhc2hTdHJpbmcpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKHt9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IG9iamVjdCBpZmEgdmFsdWUgaXMgbWlzc2luZycsICgpID0+IHtcbiAgICAgICAgY29uc3QgaGFzaFN0cmluZyA9ICcjc2VsZWN0b3Ioa2V5PSknO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChoYXNoU3RyaW5nKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbCh7XG4gICAgICAgICAgICBzZWxlY3Rvcjoge1xuICAgICAgICAgICAgICAgIGtleTogJycsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IG9iamVjdCBpZiB0aGVyZSBpcyBubyBjbG9zaW5nIHBhcmVudGhlc2lzIGZvciBhIHNlbGVjdG9yJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNoU3RyaW5nID0gJyNzZWxlY3RvcihrZXk9dmFsdWU7JztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaGFzaFN0cmluZyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoe30pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IGlmIHRoZXJlIGlzIG5vIHNlbWljb2xvbiBhZnRlciBhIHNlbGVjdG9yJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNoU3RyaW5nID0gJyNzZWxlY3RvcihrZXk9dmFsdWUpc2VsZWN0b3IyKGtleTI9dmFsdWUyKSc7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGhhc2hTdHJpbmcpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKHtcbiAgICAgICAgICAgIHNlbGVjdG9yOiB7XG4gICAgICAgICAgICAgICAga2V5OiAndmFsdWUnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlbGVjdG9yMjoge1xuICAgICAgICAgICAgICAgIGtleTI6ICd2YWx1ZTInLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnY3JlYXRlQnJhY2tldGVkS2V5VmFsdWVIYXNoJywgKCkgPT4ge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBoYXNoIHN0cmluZyBmb3IgYSBzaW1wbGUgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSB7XG4gICAgICAgICAgICAgICAgJy5leGFtcGxlJzoge1xuICAgICAgICAgICAgICAgICAgICAnY29sb3InOiAncmVkJyxcbiAgICAgICAgICAgICAgICAgICAgJ2ZvbnQtc2l6ZSc6ICcxNHB4J1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgJy5vdGhlcic6IHtcbiAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQnOiAnYmx1ZSdcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjcmVhdGVCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaW5wdXQpO1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbChcIiMuZXhhbXBsZShjb2xvcj1yZWQsZm9udC1zaXplPTE0cHgpOy5vdGhlcihiYWNrZ3JvdW5kPWJsdWUpXCIpO1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgdXJsLWVuY29kZWQgaGFzaCBzdHJpbmcgZm9yIGEgc2ltcGxlIG9iamVjdCcsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0ge1xuICAgICAgICAgICAgICAgICcuZXhhbXBsZSc6IHtcbiAgICAgICAgICAgICAgICAgICAgJ2NvbG9yJzogJ3JcImVkJyxcbiAgICAgICAgICAgICAgICAgICAgJ2ZvbnQtc2l6ZSc6ICcxNHB4J1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgJy5vdGhlcic6IHtcbiAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQnOiAnYmx1ZSdcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjcmVhdGVCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaW5wdXQsIHRydWUpO1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbChcIiMuZXhhbXBsZShjb2xvcj1yJTIyZWQsZm9udC1zaXplPTE0cHgpOy5vdGhlcihiYWNrZ3JvdW5kPWJsdWUpXCIpO1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IHN0cmluZyBmb3IgYW4gZW1wdHkgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSB7fTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNyZWF0ZUJyYWNrZXRlZEtleVZhbHVlSGFzaChpbnB1dCxmYWxzZSk7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKFwiXCIpO1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IHN0cmluZyBmb3IgYW4gZW1wdHkgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSB7fTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNyZWF0ZUJyYWNrZXRlZEtleVZhbHVlSGFzaChpbnB1dCxmYWxzZSk7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKFwiXCIpO1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgfSk7XG5cblxufSk7XG4iLCAiLyoqIG5vZGVqcyBkb2VzbnQgc3VwcG9ydCB3aW5kb3cuY3J5cHQgKi9cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cbmRlc2NyaWJlKCdNYXRoJywgZnVuY3Rpb24gKCkge1xuXG4gICAgbGV0IHJhbmRvbSA9ICgpID0+IHt9XG4gICAgXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgbGV0IHByb21pc2VzID0gW11cbiAgICAgICAgaWYgKCFnbG9iYWxUaGlzWydjcnlwdG8nXSkge1xuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChpbXBvcnQoXCJAcGVjdWxpYXIvd2ViY3J5cHRvXCIpLnRoZW4obSA9PiB7XG4gICAgICAgICAgICAgICAgZ2xvYmFsVGhpc1snY3J5cHRvJ10gPSBuZXcgbS5DcnlwdG8oKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0pKVxuICAgICAgICB9XG5cbiAgICAgICAgcHJvbWlzZXMucHVzaChpbXBvcnQoXCIuLi8uLi8uLi9zb3VyY2UvbWF0aC9yYW5kb20ubWpzXCIpLnRoZW4obSA9PiB7XG4gICAgICAgICAgICByYW5kb20gPSBtLnJhbmRvbTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KSlcblxuXG4gICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5yYW5kb20oKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnYSBncmVhdGVyIGIgc2hvdWxkIHRocm93IGVycm9yICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiByYW5kb20oMTAsIDIpKS50by50aHJvdyhFcnJvcik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCcgc2hvdWxkIHJldHVybiBhIG51bWJlciAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgciA9IHJhbmRvbSgpO1xuICAgICAgICAgICAgZXhwZWN0KHIpLnRoYXQuaXMuYSgnbnVtYmVyJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCcgc2hvdWxkIHJldHVybiBhIG51bWJlciAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT4gcmFuZG9tKDUsIDYpKS50by50aHJvdyhFcnJvcik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCcgc2hvdWxkIHRocm93IEVycm9yIHdlIGNhbm5vdCBnZW5lcmF0ZSBudW1iZXJzIGxhcmdlciB0aGFuIDUzIGJpdHMuJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IHJhbmRvbSgtOTk5OTk5OTk5LCA5OTk5OTk5OTk5OTk5OTk5OTk5OSkpLnRvLnRocm93KEVycm9yKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJyBzaG91bGQgdGhyb3cgRXJyb3Igd2UgY2Fubm90IGdlbmVyYXRlIG51bWJlcnMgbGFyZ2VyIHRoYW4gNTMgYml0cy4nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbMSwgMTAwXSxcbiAgICAgICAgICAgICAgICBbNTAwLCA2MDBdLFxuICAgICAgICAgICAgICAgIFsxMDAsIDEwMDBdXG4gICAgICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgICAgIGxldCByID0gcmFuZG9tKGEsIGIpO1xuXG4gICAgICAgICAgICAgICAgaXQociArICcgc2hvdWxkIHJldHVybiB2YWx1ZSBiZXR3ZWVuICcgKyBhICsgJyAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QociA+PSBhKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QociA8PSBiKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbMSwgMTAwXSxcbiAgICAgICAgICAgICAgICBbNTAwLCA2MDBdLFxuICAgICAgICAgICAgICAgIFsxMDAsIDEwMDBdXG4gICAgICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgICAgIGxldCBzdW0gPSAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvdW5kcyA9IDUwMFxuXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIG1heCA9IHJvdW5kczsgaSA8IG1heDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1bSArPSByYW5kb20oYSwgYik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IGF2ZyA9IHN1bSAvIHJvdW5kcztcblxuICAgICAgICAgICAgICAgIGl0KGF2ZyArICcgc2hvdWxkIGJldHdlZW4gJyArIGEgKyAnICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChhdmcgPiBhKS50by5iZS50cnVlXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChhdmcgPCBiKS50by5iZS50cnVlXG4gICAgICAgICAgICAgICAgfSlcblxuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgIH0pXG5cblxuICAgIH0pXG5cblxufSkiLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7dHJpbVNwYWNlc30gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS91dGlsL3RyaW1zcGFjZXMubWpzXCI7XG5cblxuZGVzY3JpYmUoJ3RyaW1TcGFjZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgW1xuICAgICAgICAvLyBvbmUgc3Ryb2tlIGlzIGVzY3BlZCBieSB0aGUgamF2YXNjcmlwdCBpbnRlcnByZXRlciwgdGhlIHNlY29uZCBzdHJva2UgZXNjYXBlcyB0aGUgc3Ryb2tlXG4gICAgICAgIFsnIHZhbHVlICcsICd2YWx1ZSddLFxuICAgICAgICBbJyB2YWx1ZVxcXFwgJywgJ3ZhbHVlXFxcXCAnXSxcbiAgICAgICAgWydcXFxcIHZhbHVlXFxcXCAnLCAnXFxcXCB2YWx1ZVxcXFwgJ10sXG4gICAgICAgIFsnXFwgdmFsdWVcXCAnLCAndmFsdWUnXSwgICBcbiAgICAgICAgW1wiICAgdmFsdWUgXFwgXCIsICd2YWx1ZSddLCBcblxuICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgaXQoJ3RyaW1TcGFjZXMoJyArIEpTT04uc3RyaW5naWZ5KGEpICsgJykgc2hvdWxkIHJldHVybiAnICsgSlNPTi5zdHJpbmdpZnkoYiksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCh0cmltU3BhY2VzKGEpKS50by5iZS5lcXVhbChiKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59KTtcbiAgICAiLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7UHJvY2Vzc2luZ30gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS91dGlsL3Byb2Nlc3NpbmcubWpzXCI7XG5cblxuZGVzY3JpYmUoJ1Byb2Nlc3NpbmcnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgncnVuIGluc3RhbmNlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgcnVuIG1hbnkgZnVuY3Rpb24nLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBsZXQgY291bnRlciA9IDA7XG4gICAgICAgICAgICBsZXQgdCA9ICtuZXcgRGF0ZSgpO1xuXG4gICAgICAgICAgICBjb25zdCBkZXNpcmVkRGVsYXkgPSAyMDA7XG4gICAgICAgICAgICB0aGlzLnRpbWVvdXQoZGVzaXJlZERlbGF5KzEwMCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIGRlbGF5IDEyIFxuICAgICAgICAgICAgbmV3IFByb2Nlc3NpbmcoKHYpID0+IHtcbiAgICAgICAgICAgICAgICBjb3VudGVyKys7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgICAgICB9LCAodikgPT4ge1xuICAgICAgICAgICAgICAgIGNvdW50ZXIrK1xuICAgICAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBjb3VudGVyKytcbiAgICAgICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICAgIH0sIGRlc2lyZWREZWxheSxmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGNvdW50ZXIrK1xuICAgICAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICAgICAgfSkucnVuKCd0ZXN0JykudGhlbigodikgPT4ge1xuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGNvdW50ZXIpLnRvLmJlLmVxdWFsKDQpO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QodiA9PT0gJ3Rlc3QnKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayBkZWxheVxuICAgICAgICAgICAgICAgICAgICBleHBlY3QoK25ldyBEYXRlKCkgPiB0ICsgZGVzaXJlZERlbGF5KzEpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBydW4gb25lIGZ1bmN0aW9uJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgbGV0IGNvdW50ZXIgPSAwO1xuXG4gICAgICAgICAgICBuZXcgUHJvY2Vzc2luZygodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICBjb3VudGVyKytcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9KS5ydW4oJ3Rlc3QnKS50aGVuKCh2KSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHYgPT09ICd0ZXN0JykudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcnVuIG5vIGZ1bmN0aW9uJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgbGV0IGNvdW50ZXIgPSAwO1xuXG4gICAgICAgICAgICBuZXcgUHJvY2Vzc2luZygpLnJ1bigndGVzdCcpLnRoZW4oKHYpID0+IHtcblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCh2ID09PSAndGVzdCcpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG5cblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnY3JlYXRlIG5ldyBpbnN0YW5jZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBhIFByb2Nlc3Npbmcgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBQcm9jZXNzaW5nKCkpLnRvLmJlLmEoJ29iamVjdCcpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBhIFByb2Nlc3Npbmcgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBQcm9jZXNzaW5nKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIH0pKS50by5iZS5hKCdvYmplY3QnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBUeXBlRXJyb3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT4gbmV3IFByb2Nlc3NpbmcodHJ1ZSkpLnRvLnRocm93KFR5cGVFcnJvcik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cgVHlwZUVycm9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IG5ldyBQcm9jZXNzaW5nKFwidGVzdFwiKSkudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG59KTsiLCAiaW1wb3J0IHtEZWFkTWFuc1N3aXRjaH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS91dGlsL2RlYWRtYW5zc3dpdGNoLm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdEZWFkTWFuc1N3aXRjaCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCdydW4gaW5zdGFuY2UnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBydW4nLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBjb25zdCBtczEgPSAgRGF0ZS5ub3coKTtcblxuICAgICAgICAgICAgbmV3IERlYWRNYW5zU3dpdGNoKDEwMCwgKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgY29uc3QgbXMyID0gIERhdGUubm93KCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBkaWZmID0gbXMyIC0gbXMxO1xuICAgICAgICAgICAgICAgIGlmIChkaWZmIDwgMTAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoJ3RvIHNob3J0ICcgKyBkaWZmKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgncnVuIGluc3RhbmNlIGFuZCB0b3VjaCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIHJ1bicsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IG1zMSA9IERhdGUubm93KCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGRlYWRtYW5zc3dpdGNoID0gbmV3IERlYWRNYW5zU3dpdGNoKDEwMCwgKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgY29uc3QgbXMyID0gRGF0ZS5ub3coKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGRpZmYgPSBtczIgLSBtczE7XG5cbiAgICAgICAgICAgICAgICBpZiAobXMxID4gbXMyKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUobmV3IEVycm9yKCd0aW1pbmcgZXJyb3InKSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoZGlmZiA8IDYwMCkge1xuICAgICAgICAgICAgICAgICAgICBkb25lKG5ldyBFcnJvcigndG8gc2hvcnQgJyArIGRpZmYpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAvLyAgIDAgbXM6IGluaXQoKSAtPiB3YWl0IDEwMCBtcyBcbiAgICAgICAgICAgIC8vICA1MCBtczogdG91Y2goKSAtPiB3YWl0IDEwMCBtc1xuICAgICAgICAgICAgLy8gICAgICAgICAgLT4gd2FpdCAxMDBcbiAgICAgICAgICAgIC8vIDEwMCBtczogdG91Y2goNTAwKSAtPiB3YWl0IDUwMCBtc1xuICAgICAgICAgICAgLy8gICAgICAgICAgLT4gd2FpdCA1MDBcbiAgICAgICAgICAgIC8vIDYwMCBtczogZXhlY3V0ZSBjYWxsYmFja1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgZGVhZG1hbnNzd2l0Y2gudG91Y2goKVxuXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRlYWRtYW5zc3dpdGNoLnRvdWNoKDUwMClcbiAgICAgICAgICAgICAgICB9LCA1MClcblxuICAgICAgICAgICAgfSwgNTApXG5cblxuICAgICAgICB9KTtcbiAgICB9KTtcblxufSk7IiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5cbmV4cG9ydCB7IENvbXBhcmF0b3IgfTtcblxuLyoqXG4gKiBUaGUgY29tcGFyYXRvciBhbGxvd3MgYSBjb21wYXJpc29uIGZ1bmN0aW9uIHRvIGJlIGFic3RyYWN0ZWQuXG4gKlxuICogVGhlIGZvbGxvd2luZyBhcmUgc29tZSBleGFtcGxlcyBvZiB0aGUgYXBwbGljYXRpb24gb2YgdGhlIGNsYXNzLlxuICpcbiAqIGBgYFxuICogbmV3IENvbXBhcmF0b3IoKS5sZXNzVGhhbk9yRXF1YWwoMiwgNSkgLy8gXHUyMUE2IHRydWVcbiAqIG5ldyBDb21wYXJhdG9yKCkuZ3JlYXRlclRoYW4oNCwgMikgLy8gXHUyMUE2IHRydWVcbiAqIG5ldyBDb21wYXJhdG9yKCkuZXF1YWwoNCwgNCkgLy8gXHUyMUE2IHRydWVcbiAqIG5ldyBDb21wYXJhdG9yKCkuZXF1YWwoNCwgNSkgLy8gXHUyMUE2IGZhbHNlXG4gKiBgYGBcbiAqXG4gKiBZb3UgY2FuIGFsc28gcGFzcyB5b3VyIG93biBjb21wYXJpc29uIGZ1bmN0aW9uLCBhbmQgdGh1cyBkZWZpbmUgdGhlIGNvbXBhcmlzb24gZnVuY3Rpb24uXG4gKlxuICogYGBgXG4gKiBuZXcgQ29tcGFyYXRvcihmdW5jdGlvbiAoYSwgYikge1xuICogICAgICBpZiAoYS52ID09PSBiLnYpIHJldHVybiAwO1xuICogICAgICAgICByZXR1cm4gYS52IDwgYi52ID8gLTEgOiAxO1xuICogICAgICB9KS5lcXVhbCh7djogMn0sIHt2OiAyfSk7ICAvLyBcdTIxQTYgdHJ1ZVxuICogYGBgXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGUvY29tcGFyYXRvci9zaW1wbGUvIFNpbXBsZSBleGFtcGxlXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjMuMFxuICovXG5jbGFzcyBDb21wYXJhdG9yIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKiBjcmVhdGUgbmV3IGNvbXBhcmF0b3Jcblx0ICpcblx0ICogQHBhcmFtIHtNb25zdGVyLlV0aWx+ZXhhbXBsZUNhbGxiYWNrfSBbY2FsbGJhY2tdIENvbXBhcmF0b3IgY2FsbGJhY2tcblx0ICogQHRocm93IHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcblx0ICogQHRocm93IHtUeXBlRXJyb3J9IGltcHJhY3RpY2FsIGNvbXBhcmlzb25cblx0ICovXG5cdGNvbnN0cnVjdG9yKGNhbGxiYWNrKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuXHRcdFx0dGhpcy5jb21wYXJlID0gY2FsbGJhY2s7XG5cdFx0fSBlbHNlIGlmIChjYWxsYmFjayAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidW5zdXBwb3J0ZWQgdHlwZVwiKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gZGVmYXVsdCBjb21wYXJlIGZ1bmN0aW9uXG5cblx0XHRcdC8qKlxuXHRcdFx0ICpcblx0XHRcdCAqIEBwYXJhbSB7Kn0gYVxuXHRcdFx0ICogQHBhcmFtIHsqfSBiXG5cdFx0XHQgKiBAcmV0dXJuIHtpbnRlZ2VyfSAtMSwgMCBvciAxXG5cdFx0XHQgKi9cblx0XHRcdHRoaXMuY29tcGFyZSA9IGZ1bmN0aW9uIChhLCBiKSB7XG5cdFx0XHRcdGlmICh0eXBlb2YgYSAhPT0gdHlwZW9mIGIpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW1wcmFjdGljYWwgY29tcGFyaXNvblwiLCBcInR5cGVzL2NvbXBhcmF0b3IubWpzXCIpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGEgPT09IGIpIHtcblx0XHRcdFx0XHRyZXR1cm4gMDtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gYSA8IGIgPyAtMSA6IDE7XG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBjaGFuZ2VzIHRoZSBvcmRlciBvZiB0aGUgb3BlcmF0b3JzXG5cdCAqXG5cdCAqIEByZXR1cm4ge0NvbXBhcmF0b3J9XG5cdCAqL1xuXHRyZXZlcnNlKCkge1xuXHRcdGNvbnN0IG9yaWdpbmFsID0gdGhpcy5jb21wYXJlO1xuXHRcdHRoaXMuY29tcGFyZSA9IChhLCBiKSA9PiBvcmlnaW5hbChiLCBhKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdHdvIHZhcmlhYmxlcyBhcmUgZXF1YWwuXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gYVxuXHQgKiBAcGFyYW0geyp9IGJcblx0ICpcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGVxdWFsKGEsIGIpIHtcblx0XHRyZXR1cm4gdGhpcy5jb21wYXJlKGEsIGIpID09PSAwO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiB2YXJpYWJsZSBgYWAgaXMgZ3JlYXRlciB0aGFuIGBiYFxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IGFcblx0ICogQHBhcmFtIHsqfSBiXG5cdCAqXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRncmVhdGVyVGhhbihhLCBiKSB7XG5cdFx0cmV0dXJuIHRoaXMuY29tcGFyZShhLCBiKSA+IDA7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHZhcmlhYmxlIGBhYCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYGJgXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gYVxuXHQgKiBAcGFyYW0geyp9IGJcblx0ICpcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGdyZWF0ZXJUaGFuT3JFcXVhbChhLCBiKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ3JlYXRlclRoYW4oYSwgYikgfHwgdGhpcy5lcXVhbChhLCBiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdmFyaWFibGUgYGFgIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgYmBcblx0ICpcblx0ICogQHBhcmFtIHsqfSBhXG5cdCAqIEBwYXJhbSB7Kn0gYlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0bGVzc1RoYW5PckVxdWFsKGEsIGIpIHtcblx0XHRyZXR1cm4gdGhpcy5sZXNzVGhhbihhLCBiKSB8fCB0aGlzLmVxdWFsKGEsIGIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiB2YXJpYWJsZSBhIGlzIGxlc3MgdGhhbiBiXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gYVxuXHQgKiBAcGFyYW0geyp9IGJcblx0ICpcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGxlc3NUaGFuKGEsIGIpIHtcblx0XHRyZXR1cm4gdGhpcy5jb21wYXJlKGEsIGIpIDwgMDtcblx0fVxufVxuXG4vKipcbiAqIFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIGZvciB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gdXNlZCBieSB0aGUgb3BlcmF0b3JcbiAqXG4gKiBgYGBcbiAqIG5ldyBDb21wYXJhdG9yKGZ1bmN0aW9uIChhLCBiKSB7XG4gKiAgICAgIGlmIChhLnYgPT09IGIudikgcmV0dXJuIDA7XG4gKiAgICAgICAgIHJldHVybiBhLnYgPCBiLnYgPyAtMSA6IDE7XG4gKiAgICAgIH0pLmVxdWFsKHt2OiAyfSwge3Y6IDJ9KTsgIC8vIFx1MjFBNiB0cnVlXG4gKiBgYGBcbiAqXG4gKiBAY2FsbGJhY2sgTW9uc3Rlci5VdGlsfmV4YW1wbGVDYWxsYmFja1xuICogQHBhcmFtIHsqfSBhXG4gKiBAcGFyYW0geyp9IGJcbiAqIEByZXR1cm4ge2ludGVnZXJ9IC0xLCAwIG9yIDFcbiAqIEBzZWUgTW9uc3Rlci5VdGlsLkNvbXBhcmF0b3JcbiAqL1xuIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge0NvbXBhcmF0b3J9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdXRpbC9jb21wYXJhdG9yLm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdDb21wYXJhdG9yJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJ2NyZWF0ZSBuZXcgaW5zdGFuY2UnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBjb21wYXJhdG9yIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQ29tcGFyYXRvcigpKS50by5iZS5hKCdvYmplY3QnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBjb21wYXJhdG9yIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQ29tcGFyYXRvcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB9KSkudG8uYmUuYSgnb2JqZWN0Jyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cgVHlwZUVycm9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IG5ldyBDb21wYXJhdG9yKHRydWUpKS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHRocm93IFR5cGVFcnJvcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBuZXcgQ29tcGFyYXRvcihcInRlc3RcIikpLnRvLnRocm93KFR5cGVFcnJvcik7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdlcXVhbCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCBcInRlc3RcIiwgZmFsc2VdLFxuICAgICAgICAgICAgWzUuMSwgNSwgZmFsc2VdLFxuICAgICAgICAgICAgWzUuMSwgNS4xLCB0cnVlXSxcbiAgICAgICAgICAgIFt0cnVlLCB0cnVlLCB0cnVlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCBmYWxzZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbLTQsIC00LCB0cnVlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBjb21wYXJlICcgKyBhICsgJyBhbmQgJyArIGIgKyAnIHJldHVybiAnICsgYywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChuZXcgQ29tcGFyYXRvcigpLmVxdWFsKGEsIGIpKS5pcy5lcXVhbChjKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZXF1YWwoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgdHJ1ZV0sXG4gICAgICAgICAgICBbJ3Rlc3QxJywgNV0sXG4gICAgICAgICAgICBbJ3Rlc3QxJywgbnVsbF0sXG4gICAgICAgICAgICBbJ3Rlc3QxJywgcGFyc2VJbnQoXCJhXCIpXSxcbiAgICAgICAgICAgIFtmYWxzZSwgNV0sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCBudWxsXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGNvbXBhcmUgJyArIGEgKyAnIGFuZCAnICsgYiArICcgdGhyb3cgVHlwZUVycm9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBuZXcgQ29tcGFyYXRvcigpLmVxdWFsKGEsIGIpKS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZ3JlYXRlclRoYW4oKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgXCJ0ZXN0XCIsIHRydWVdLFxuICAgICAgICAgICAgWzUuMSwgNSwgdHJ1ZV0sXG4gICAgICAgICAgICBbNS4xLCA1LjEsIGZhbHNlXSxcbiAgICAgICAgICAgIFt0cnVlLCB0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIHRydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFstNCwgLTQsIGZhbHNlXSxcbiAgICAgICAgICAgIFstNCwgNCwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGNvbXBhcmUgJyArIGEgKyAnIGFuZCAnICsgYiArICcgcmV0dXJuICcgKyBjLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBDb21wYXJhdG9yKCkuZ3JlYXRlclRoYW4oYSwgYikpLmlzLmVxdWFsKGMpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdyZXZlcnNlKCkuZ3JlYXRlclRoYW4oKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgXCJ0ZXN0XCIsIHRydWVdLFxuICAgICAgICAgICAgWzUuMSwgNSwgdHJ1ZV0sXG4gICAgICAgICAgICBbNS4xLCA1LjEsIGZhbHNlXSxcbiAgICAgICAgICAgIFt0cnVlLCB0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIHRydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFstNCwgLTQsIGZhbHNlXSxcbiAgICAgICAgICAgIFstNCwgNCwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGNvbXBhcmUgJyArIGEgKyAnIGFuZCAnICsgYiArICcgcmV0dXJuICcgKyBjLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBDb21wYXJhdG9yKCkucmV2ZXJzZSgpLmdyZWF0ZXJUaGFuKGEsIGIpKS5pcy5lcXVhbChjKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZ3JlYXRlclRoYW5PckVxdWFsKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIFwidGVzdFwiLCB0cnVlXSxcbiAgICAgICAgICAgIFs1LjEsIDUsIHRydWVdLFxuICAgICAgICAgICAgWzUuMSwgNS4xLCB0cnVlXSxcbiAgICAgICAgICAgIFt0cnVlLCB0cnVlLCB0cnVlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCBmYWxzZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbLTQsIC00LCB0cnVlXSxcbiAgICAgICAgICAgIFstNCwgNCwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGNvbXBhcmUgJyArIGEgKyAnIGFuZCAnICsgYiArICcgcmV0dXJuICcgKyBjLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBDb21wYXJhdG9yKCkuZ3JlYXRlclRoYW5PckVxdWFsKGEsIGIpKS5pcy5lcXVhbChjKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnbGVzc1RoYW4oKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgXCJ0ZXN0XCIsIHRydWVdLFxuICAgICAgICAgICAgWzUuMSwgNSwgdHJ1ZV0sXG4gICAgICAgICAgICBbNS4xLCA1LjEsIGZhbHNlXSxcbiAgICAgICAgICAgIFt0cnVlLCB0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIHRydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFstNCwgLTQsIGZhbHNlXSxcbiAgICAgICAgICAgIFstNCwgNCwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGNvbXBhcmUgJyArIGEgKyAnIGFuZCAnICsgYiArICcgcmV0dXJuICcgKyBjLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBDb21wYXJhdG9yKCkubGVzc1RoYW4oYSwgYikpLmlzLmVxdWFsKGMpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdkb2N1bWVudGF0aW9ucycsIGZ1bmN0aW9uICgpIHtcblxuXG4gICAgICAgIGl0KCdzaG91bGQgcnVuIC4uLicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQ29tcGFyYXRvcigpLmxlc3NUaGFuT3JFcXVhbCgyLCA1KSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQ29tcGFyYXRvcigpLmdyZWF0ZXJUaGFuKDQsIDIpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBDb21wYXJhdG9yKCkuZXF1YWwoNCwgNCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICBleHBlY3QobmV3IENvbXBhcmF0b3IoKS5lcXVhbCg0LCA1KSkudG8uYmUuZmFsc2U7XG4gICAgICAgIH0pO1xuXG5cbiAgICAgICAgaXQoJ3Nob3VsZCBydW4gd2l0aCBvd24gZnVuY3Rpb24gLi4uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBDb21wYXJhdG9yKGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGEudiA9PT0gYi52KSByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS52IDwgYi52ID8gLTEgOiAxO1xuICAgICAgICAgICAgfSkuZXF1YWwoe3Y6IDJ9LCB7djogMn0pKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcblxuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdsZXNzVGhhbk9yRXF1YWwoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgXCJ0ZXN0XCIsIHRydWVdLFxuICAgICAgICAgICAgWzUuMSwgNSwgdHJ1ZV0sXG4gICAgICAgICAgICBbNS4xLCA1LjEsIHRydWVdLFxuICAgICAgICAgICAgW3RydWUsIHRydWUsIHRydWVdLFxuICAgICAgICAgICAgW2ZhbHNlLCB0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIGZhbHNlLCB0cnVlXSxcbiAgICAgICAgICAgIFstNCwgLTQsIHRydWVdLFxuICAgICAgICAgICAgWy00LCA0LCBmYWxzZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgY29tcGFyZSAnICsgYSArICcgYW5kICcgKyBiICsgJyByZXR1cm4gJyArIGMsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QobmV3IENvbXBhcmF0b3IoKS5sZXNzVGhhbk9yRXF1YWwoYSwgYikpLmlzLmVxdWFsKGMpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG59KTsiLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgdmFsaWRhdGVPYmplY3QgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IGRlZXBGcmVlemUgfTtcblxuLyoqXG4gKiBEZWVwIGZyZWV6ZSBhIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmplY3Qgb2JqZWN0IHRvIGJlIGZyZWV6ZVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIG9iamVjdFxuICovXG5mdW5jdGlvbiBkZWVwRnJlZXplKG9iamVjdCkge1xuXHR2YWxpZGF0ZU9iamVjdChvYmplY3QpO1xuXG5cdC8vIFJldHJpZXZlIHRoZSBkZWZpbmVkIHByb3BlcnR5IG5hbWVzIG9mIHRoZSBvYmplY3Rcblx0bGV0IHByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCk7XG5cblx0Ly8gRnJlZXplIHByb3BlcnRpZXMgYmVmb3JlIGZyZWV6aW5nIHlvdXJzZWxmXG5cdGZvciAoY29uc3QgbmFtZSBvZiBwcm9wTmFtZXMpIHtcblx0XHRjb25zdCB2YWx1ZSA9IG9iamVjdFtuYW1lXTtcblxuXHRcdG9iamVjdFtuYW1lXSA9XG5cdFx0XHR2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgPyBkZWVwRnJlZXplKHZhbHVlKSA6IHZhbHVlO1xuXHR9XG5cblx0cmV0dXJuIE9iamVjdC5mcmVlemUob2JqZWN0KTtcbn1cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtkZWVwRnJlZXplfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3V0aWwvZnJlZXplLm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdkZWVwRnJlZXplJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJ2RlZXBGcmVlemUgYW4gb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgZnJlZXplIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0IG9iajEgPSB7XG4gICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICBiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjOjFcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGxldCBvYmoyID0ge1xuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgYjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgYzoyXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBleHBlY3Qob2JqMikudG8ubm90LmVxbChvYmoxKVxuICAgICAgICAgICAgb2JqMS5hLmIuYyA9IDI7XG4gICAgICAgICAgICBleHBlY3Qob2JqMikudG8uZXFsKG9iajEpO1xuXG4gICAgICAgICAgICBjb25zdCBvYmoxRnJlZXplZCA9IGRlZXBGcmVlemUob2JqMSk7XG5cbiAgICAgICAgICAgIGV4cGVjdChvYmoyKS50by5lcWwob2JqMUZyZWV6ZWQpO1xuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RlL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9mcmVlemVcbiAgICAgICAgICAgICAgICAvLyBubyBjaGFuZ2UgdG8gdGhlIG9iamVjdCwgZXhjZXB0aW9uIGRlcGVuZHMgb24gbW9kZSAoc3RyaWN0IEVTIDIwMTUsIGV0YylcbiAgICAgICAgICAgICAgICBvYmoxRnJlZXplZC5hLmIuYyA9IDMgICAgXG4gICAgICAgICAgICB9IGNhdGNoIChfKSB7XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXhwZWN0KG9iajIpLnRvLmVxbChvYmoxRnJlZXplZCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIFxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pOyIsICJpbXBvcnQge2Nsb25lfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3V0aWwvY2xvbmUubWpzXCI7XG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5kZXNjcmliZSgnQ2xvbmUnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBjbGFzcyBBIHtcbiAgICAgICAgY29uc3RydWN0b3IoYikge1xuICAgICAgICAgICAgdGhpcy5iID0gYlxuICAgICAgICB9XG5cbiAgICAgICAgYSgpIHtcblxuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIGNsYXNzIEIge1xuICAgICAgICBjb25zdHJ1Y3RvcihiKSB7XG4gICAgICAgICAgICB0aGlzLmIgPSBiXG4gICAgICAgIH1cblxuICAgICAgICBhKCkge1xuXG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGdldENsb25lKCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiRE9ORVwiXG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgfVxuXG4gICAgZGVzY3JpYmUoJy5jbG9uZShCKSB3aXRoIGdldENsb25lJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnLmNsb25lKEIpIHNob3VsZCBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgYiA9IG5ldyBCKHtcbiAgICAgICAgICAgICAgICB4OiB7XG4gICAgICAgICAgICAgICAgICAgIHk6IDEsIGQ6IG5ldyBBKDEpLCB6OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxldCByID0gY2xvbmUoYik7XG4gICAgICAgICAgICBleHBlY3QoYikudG8uYmUuaW5zdGFuY2VPZihCKVxuICAgICAgICAgICAgZXhwZWN0KHIpLm5vdC5lcXVhbChiKTtcbiAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShyKSkuZXF1YWwoSlNPTi5zdHJpbmdpZnkoJ0RPTkUnKSk7XG5cbiAgICAgICAgfSk7XG4gICAgfSlcbiAgICBcbiAgICBkZXNjcmliZSgnLmNsb25lKEEpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnLmNsb25lKEEpIHNob3VsZCBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgYSA9IG5ldyBBKHtcbiAgICAgICAgICAgICAgICB4OiB7XG4gICAgICAgICAgICAgICAgICAgIHk6IDEsIGQ6IG5ldyBBKDEpLCB6OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxldCBiID0gY2xvbmUoYSk7XG4gICAgICAgICAgICBleHBlY3QoYSkudG8uYmUuaW5zdGFuY2VPZihBKVxuICAgICAgICAgICAgZXhwZWN0KGIpLnRvLmJlLmluc3RhbmNlT2YoQSlcbiAgICAgICAgICAgIGV4cGVjdChiKS5ub3QuZXF1YWwoYSk7XG4gICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkoYSkpLmVxdWFsKEpTT04uc3RyaW5naWZ5KGIpKTtcblxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgLy8gbm9kZWpzIGRvZXMgbm90IGhhdmUgYSBET01cbiAgICBpZiAodHlwZW9mIERvY3VtZW50RnJhZ21lbnQgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgZGVzY3JpYmUoJy5jbG9uZShEb2N1bWVudEZyYWdtZW50KScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCcuY2xvbmUoRG9jdW1lbnRGcmFnbWVudCkgc2hvdWxkIHNhbWUgRG9jdW1lbnRGcmFnbWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgYSA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgICAgICAgICAgICBsZXQgYiA9IGNsb25lKGEpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChiKS5lcXVhbChhKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIGRlc2NyaWJlKCcuY2xvbmUobnVsbCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIHR5cGVvZiBudWxsIHJlc3VsdHMgaW4gJ29iamVjdCcuICBodHRwczovLzJhbGl0eS5jb20vMjAxMy8xMC90eXBlb2YtbnVsbC5odG1sXG4gICAgICAgIGl0KCcuY2xvbmUobnVsbCkgc2hvdWxkICBudWxsJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGEgPSBudWxsXG4gICAgICAgICAgICBsZXQgYiA9IGNsb25lKGEpO1xuICAgICAgICAgICAgZXhwZWN0KGIpLmVxdWFsKGEpO1xuICAgICAgICAgICAgZXhwZWN0KGIpLnRvLmJlLm51bGw7XG4gICAgICAgICAgICBleHBlY3QoYSkudG8uYmUubnVsbDtcbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCcuY2xvbmUodW5kZWZpbmVkKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJy5jbG9uZSh1bmRlZmluZWQpIHNob3VsZCAgdW5kZWZpbmVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGEgPSB1bmRlZmluZWRcbiAgICAgICAgICAgIGxldCBiID0gY2xvbmUoYSk7XG4gICAgICAgICAgICBleHBlY3QoYSA9PT0gYikudG8uYmUudHJ1ZVxuICAgICAgICAgICAgZXhwZWN0KHR5cGVvZiBiID09PSAndW5kZWZpbmVkJykudG8uYmUudHJ1ZVxuICAgICAgICAgICAgZXhwZWN0KGEgPT09IHVuZGVmaW5lZCkudG8uYmUudHJ1ZVxuICAgICAgICAgICAgZXhwZWN0KGIgPT09IHVuZGVmaW5lZCkudG8uYmUudHJ1ZVxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJy5jbG9uZShvYmplY3QpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCcuY2xvbmUoe30pIHNob3VsZCAgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGEgPSB7fVxuICAgICAgICAgICAgbGV0IGIgPSBjbG9uZShhKTtcbiAgICAgICAgICAgIGV4cGVjdCh0eXBlb2YgYiA9PT0gJ29iamVjdCcpLnRvLmJlLnRydWVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJy5jbG9uZSh7eDoxfSkgc2hvdWxkICBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgYSA9IHt4OiAxfVxuICAgICAgICAgICAgbGV0IGIgPSBjbG9uZShhKTtcbiAgICAgICAgICAgIGV4cGVjdChhLngpLmlzLmVxdWFsKGIueClcbiAgICAgICAgfSk7XG4gICAgfSlcbiAgICBkZXNjcmliZSgnLmNsb25lKGZ1bmN0aW9uKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnLmNsb25lKGZ1bmN0aW9uKSBzaG91bGQgIGZ1bmN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGEgPSAoKSA9PiB7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgYiA9IGNsb25lKGEpO1xuICAgICAgICAgICAgZXhwZWN0KHR5cGVvZiBiID09PSAnZnVuY3Rpb24nKS50by5iZS50cnVlXG4gICAgICAgIH0pO1xuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCcuY2xvbmUoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgJ3N0cmluZyddLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgJ3VuZGVmaW5lZCddLFxuICAgICAgICAgICAgW251bGwsICdvYmplY3QnXSwgLy8gdHlwZW9mIG51bGwgcmVzdWx0cyBpbiAnb2JqZWN0Jy4gIGh0dHBzOi8vMmFsaXR5LmNvbS8yMDEzLzEwL3R5cGVvZi1udWxsLmh0bWxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCAnZnVuY3Rpb24nXSxcbiAgICAgICAgICAgIFsyLCAnbnVtYmVyJ10sXG4gICAgICAgICAgICBbZmFsc2UsICdib29sZWFuJ10sXG4gICAgICAgICAgICBbdHJ1ZSwgJ2Jvb2xlYW4nXSxcbiAgICAgICAgICAgIFs0LjUsICdudW1iZXInXSxcbiAgICAgICAgICAgIFt7fSwgJ29iamVjdCddLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgJ29iamVjdCddLCAvLyBhcnJheSBpc3QgYXVjaCB0eXBlIG9iamVjdFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgJ3N5bWJvbCddLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cblxuICAgICAgICAgICAgaXQoJy5jbG9uZSgnICsgSlNPTi5zdHJpbmdpZnkoYSkgKyAnKSBzaG91bGQgICcgKyBiICsgJyAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGMgPSBjbG9uZShhKTtcbiAgICAgICAgICAgICAgICBleHBlY3QodHlwZW9mIGMpLmlzLmVxdWFsKGIpO1xuICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbn0pO1xuXG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgZ2V0R2xvYmFsT2JqZWN0IH0gZnJvbSBcIi4uLy4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IEhhbmRsZXIgfSBmcm9tIFwiLi4vaGFuZGxlci5tanNcIjtcbmltcG9ydCB7IExvZ0VudHJ5IH0gZnJvbSBcIi4uL2xvZ2VudHJ5Lm1qc1wiO1xuaW1wb3J0IHsgVFJBQ0UsIFdBUk4sIERFQlVHLCBFUlJPUiwgRkFUQUwsIElORk8gfSBmcm9tIFwiLi4vbG9nZ2VyLm1qc1wiO1xuXG5leHBvcnQgeyBDb25zb2xlSGFuZGxlciB9O1xuXG4vKipcbiAqIFlvdSBjYW4gY3JlYXRlIGFuIG9iamVjdCBvZiB0aGUgY2xhc3Mgc2ltcGx5IGJ5IHVzaW5nIHRoZSBuYW1lc3BhY2UgYG5ldyBNb25zdGVyLkxvZ2dpbmcuSGFuZGxlci5Db25zb2xlSGFuZGxlcigpYC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuY2xhc3MgQ29uc29sZUhhbmRsZXIgZXh0ZW5kcyBIYW5kbGVyIHtcblx0LyoqXG5cdCAqIFRoaXMgaXMgdGhlIGNlbnRyYWwgbG9nIGZ1bmN0aW9uLiB0aGlzIG1ldGhvZCBtdXN0IGJlXG5cdCAqIG92ZXJ3cml0dGVuIGJ5IGRlcml2ZWQgaGFuZGxlcnMgd2l0aCB0aGVpciBvd24gbG9naWMuXG5cdCAqXG5cdCAqIEFMTCA+IFRSQUNFID4gREVCVUcgPiBJTkZPID4gV0FSTiA+IEVSUk9SID4gRkFUQUwgPiBPRkYgIChBTEwgPSAweGZmO09GRiA9IDB4MDA7XG5cdCAqXG5cdCAqIEBwYXJhbSB7TG9nRW50cnl9IGVudHJ5XG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRsb2coZW50cnkpIHtcblx0XHRpZiAoc3VwZXIubG9nKGVudHJ5KSkge1xuXHRcdFx0Y29uc3QgY29uc29sZSA9IGdldEdsb2JhbE9iamVjdChcImNvbnNvbGVcIik7XG5cdFx0XHRpZiAoIWNvbnNvbGUpIHJldHVybiBmYWxzZTtcblxuXHRcdFx0aWYgKCFjb25zb2xlLmVycm9yKSBjb25zb2xlLmVycm9yID0gY29uc29sZS5sb2c7XG5cdFx0XHRpZiAoIWNvbnNvbGUud2FybikgY29uc29sZS53YXJuID0gY29uc29sZS5sb2c7XG5cblx0XHRcdHN3aXRjaCAoZW50cnkuZ2V0TG9nTGV2ZWwoKSkge1xuXHRcdFx0XHRjYXNlIFRSQUNFOlxuXHRcdFx0XHRjYXNlIERFQlVHOlxuXHRcdFx0XHRjYXNlIElORk86XG5cdFx0XHRcdFx0Y29uc29sZS5sb2coZW50cnkudG9TdHJpbmcoKSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgRkFUQUw6XG5cdFx0XHRcdGNhc2UgRVJST1I6XG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlbnRyeS50b1N0cmluZygpKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBXQVJOOlxuXHRcdFx0XHRcdGNvbnNvbGUud2FybihlbnRyeS50b1N0cmluZygpKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhlbnRyeS50b1N0cmluZygpKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVJbnN0YW5jZSwgdmFsaWRhdGVJbnRlZ2VyIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgTG9nRW50cnkgfSBmcm9tIFwiLi9sb2dlbnRyeS5tanNcIjtcbmltcG9ydCB7IEFMTCwgREVCVUcsIEVSUk9SLCBGQVRBTCwgSU5GTywgT0ZGLCBUUkFDRSwgV0FSTiB9IGZyb20gXCIuL2xvZ2dlci5tanNcIjtcblxuZXhwb3J0IHsgSGFuZGxlciB9O1xuXG4vKipcbiAqIFRoZSBsb2cgaGFuZGxlciBpcyB0aGUgaW50ZXJmYWNlIGJldHdlZW4gdGhlIGxvZyBlbnRyaWVzIGFuZCB0aGUgbG9nIGxpc3RlbmVycy5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuY2xhc3MgSGFuZGxlciBleHRlbmRzIEJhc2Uge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0LyoqXG5cdFx0ICogTG9nbGV2ZWxcblx0XHQgKlxuXHRcdCAqIEB0eXBlIHtpbnRlZ2VyfVxuXHRcdCAqL1xuXHRcdHRoaXMubG9nbGV2ZWwgPSBPRkY7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBpcyB0aGUgY2VudHJhbCBsb2cgZnVuY3Rpb24uIHRoaXMgbWV0aG9kIG11c3QgYmVcblx0ICogb3ZlcndyaXR0ZW4gYnkgZGVyaXZlZCBoYW5kbGVycyB3aXRoIHRoZWlyIG93biBsb2dpYy5cblx0ICpcblx0ICogQUxMID4gVFJBQ0UgPiBERUJVRyA+IElORk8gPiBXQVJOID4gRVJST1IgPiBGQVRBTCA+IE9GRiAgKEFMTCA9IDB4ZmY7T0ZGID0gMHgwMDtcblx0ICpcblx0ICogQHBhcmFtIHtMb2dFbnRyeX0gZW50cnlcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGxvZyhlbnRyeSkge1xuXHRcdHZhbGlkYXRlSW5zdGFuY2UoZW50cnksIExvZ0VudHJ5KTtcblxuXHRcdGlmICh0aGlzLmxvZ2xldmVsIDwgZW50cnkuZ2V0TG9nTGV2ZWwoKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIHNldCBsb2dsZXZlbFxuXHQgKlxuXHQgKiBAcGFyYW0ge2ludGVnZXJ9IGxvZ2xldmVsXG5cdCAqIEByZXR1cm4ge0hhbmRsZXJ9XG5cdCAqIEBzaW5jZSAxLjUuMFxuXHQgKi9cblx0c2V0TG9nTGV2ZWwobG9nbGV2ZWwpIHtcblx0XHR2YWxpZGF0ZUludGVnZXIobG9nbGV2ZWwpO1xuXHRcdHRoaXMubG9nbGV2ZWwgPSBsb2dsZXZlbDtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBnZXQgbG9nbGV2ZWxcblx0ICpcblx0ICogQHJldHVybiB7aW50ZWdlcn1cblx0ICogQHNpbmNlIDEuNS4wXG5cdCAqL1xuXHRnZXRMb2dMZXZlbCgpIHtcblx0XHRyZXR1cm4gdGhpcy5sb2dsZXZlbDtcblx0fVxuXG5cdC8qKlxuXHQgKiAgU2V0IGxvZyBsZXZlbCB0byBBbGxcblx0ICpcblx0ICogQHJldHVybiB7SGFuZGxlcn1cblx0ICogQHNpbmNlIDEuNS4wXG5cdCAqL1xuXHRzZXRBbGwoKSB7XG5cdFx0dGhpcy5zZXRMb2dMZXZlbChBTEwpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBsb2cgbGV2ZWwgdG8gVHJhY2Vcblx0ICpcblx0ICogQHJldHVybiB7SGFuZGxlcn1cblx0ICogQHNpbmNlIDEuNS4wXG5cdCAqL1xuXHRzZXRUcmFjZSgpIHtcblx0XHR0aGlzLnNldExvZ0xldmVsKFRSQUNFKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgbG9nIGxldmVsIHRvIERlYnVnXG5cdCAqXG5cdCAqIEByZXR1cm4ge0hhbmRsZXJ9XG5cdCAqIEBzaW5jZSAxLjUuMFxuXHQgKi9cblx0c2V0RGVidWcoKSB7XG5cdFx0dGhpcy5zZXRMb2dMZXZlbChERUJVRyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IGxvZyBsZXZlbCB0byBJbmZvXG5cdCAqXG5cdCAqIEByZXR1cm4ge0hhbmRsZXJ9XG5cdCAqIEBzaW5jZSAxLjUuMFxuXHQgKi9cblx0c2V0SW5mbygpIHtcblx0XHR0aGlzLnNldExvZ0xldmVsKElORk8pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBsb2cgbGV2ZWwgdG8gV2FyblxuXHQgKlxuXHQgKiBAcmV0dXJuIHt1bmRlZmluZWR9XG5cdCAqIEBzaW5jZSAxLjUuMFxuXHQgKi9cblx0c2V0V2FybigpIHtcblx0XHR0aGlzLnNldExvZ0xldmVsKFdBUk4pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBsb2cgbGV2ZWwgdG8gRXJyb3Jcblx0ICpcblx0ICogQHJldHVybiB7SGFuZGxlcn1cblx0ICogQHNpbmNlIDEuNS4wXG5cdCAqL1xuXHRzZXRFcnJvcigpIHtcblx0XHR0aGlzLnNldExvZ0xldmVsKEVSUk9SKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgbG9nIGxldmVsIHRvIEZhdGFsXG5cdCAqXG5cdCAqIEByZXR1cm4ge0hhbmRsZXJ9XG5cdCAqIEBzaW5jZSAxLjUuMFxuXHQgKi9cblx0c2V0RmF0YWwoKSB7XG5cdFx0dGhpcy5zZXRMb2dMZXZlbChGQVRBTCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IGxvZyBsZXZlbCB0byBPZmZcblx0ICpcblx0ICogQHJldHVybiB7SGFuZGxlcn1cblx0ICogQHNpbmNlIDEuNS4wXG5cdCAqL1xuXHRzZXRPZmYoKSB7XG5cdFx0dGhpcy5zZXRMb2dMZXZlbChPRkYpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVJbnRlZ2VyIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBMb2dFbnRyeSB9O1xuXG4vKipcbiAqIEEgbG9nIGVudHJ5IGZvciB0aGUgbG9nZ2VyXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS41LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKi9cbmNsYXNzIExvZ0VudHJ5IGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge0ludGVnZXJ9IGxvZ2xldmVsXG5cdCAqIEBwYXJhbSB7Li4uKn0gYXJnc1xuXHQgKi9cblx0Y29uc3RydWN0b3IobG9nbGV2ZWwsIC4uLmFyZ3MpIHtcblx0XHRzdXBlcigpO1xuXHRcdHZhbGlkYXRlSW50ZWdlcihsb2dsZXZlbCk7XG5cblx0XHR0aGlzLmxvZ2xldmVsID0gbG9nbGV2ZWw7XG5cdFx0dGhpcy5hcmd1bWVudHMgPSBhcmdzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge2ludGVnZXJyfVxuXHQgKi9cblx0Z2V0TG9nTGV2ZWwoKSB7XG5cdFx0cmV0dXJuIHRoaXMubG9nbGV2ZWw7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7YXJyYXl9XG5cdCAqL1xuXHRnZXRBcmd1bWVudHMoKSB7XG5cdFx0cmV0dXJuIHRoaXMuYXJndW1lbnRzO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgSGFuZGxlciB9IGZyb20gXCIuL2hhbmRsZXIubWpzXCI7XG5pbXBvcnQgeyBMb2dFbnRyeSB9IGZyb20gXCIuL2xvZ2VudHJ5Lm1qc1wiO1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQge1xuXHR2YWxpZGF0ZUludGVnZXIsXG5cdHZhbGlkYXRlT2JqZWN0LFxuXHR2YWxpZGF0ZVN0cmluZyxcbn0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBMb2dnZXIsIEFMTCwgVFJBQ0UsIERFQlVHLCBJTkZPLCBXQVJOLCBFUlJPUiwgRkFUQUwsIE9GRiB9O1xuXG4vKipcbiAqIEFMTCA+IFRSQUNFID4gREVCVUcgPiBJTkZPID4gV0FSTiA+IEVSUk9SID4gRkFUQUwgPiBPRkZcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cbmNvbnN0IEFMTCA9IDI1NTtcbi8qKlxuICogQUxMID4gVFJBQ0UgPiBERUJVRyA+IElORk8gPiBXQVJOID4gRVJST1IgPiBGQVRBTCA+IE9GRlxuICogQHR5cGUge251bWJlcn1cbiAqL1xuY29uc3QgVFJBQ0UgPSA2NDtcbi8qKlxuICogQUxMID4gVFJBQ0UgPiBERUJVRyA+IElORk8gPiBXQVJOID4gRVJST1IgPiBGQVRBTCA+IE9GRlxuICogQHR5cGUge251bWJlcn1cbiAqL1xuY29uc3QgREVCVUcgPSAzMjtcbi8qKlxuICogQUxMID4gVFJBQ0UgPiBERUJVRyA+IElORk8gPiBXQVJOID4gRVJST1IgPiBGQVRBTCA+IE9GRlxuICogQHR5cGUge251bWJlcn1cbiAqL1xuY29uc3QgSU5GTyA9IDE2O1xuLyoqXG4gKiBBTEwgPiBUUkFDRSA+IERFQlVHID4gSU5GTyA+IFdBUk4gPiBFUlJPUiA+IEZBVEFMID4gT0ZGXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5jb25zdCBXQVJOID0gODtcbi8qKlxuICogQUxMID4gVFJBQ0UgPiBERUJVRyA+IElORk8gPiBXQVJOID4gRVJST1IgPiBGQVRBTCA+IE9GRlxuICogQHR5cGUge251bWJlcn1cbiAqL1xuY29uc3QgRVJST1IgPSA0O1xuLyoqXG4gKiBBTEwgPiBUUkFDRSA+IERFQlVHID4gSU5GTyA+IFdBUk4gPiBFUlJPUiA+IEZBVEFMID4gT0ZGXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5jb25zdCBGQVRBTCA9IDI7XG4vKipcbiAqIEFMTCA+IFRSQUNFID4gREVCVUcgPiBJTkZPID4gV0FSTiA+IEVSUk9SID4gRkFUQUwgPiBPRkZcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cbmNvbnN0IE9GRiA9IDA7XG5cbi8qKlxuICogVGhlIGxvZ2dlciBpcyBhIGNsYXNzIHRoYXQgdGFrZXMgY2FyZSBvZiBsb2dnaW5nLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICovXG5jbGFzcyBMb2dnZXIgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuaGFuZGxlciA9IG5ldyBTZXQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge0hhbmRsZXJ9IGhhbmRsZXJcblx0ICogQHJldHVybiB7TG9nZ2VyfVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIGhhbmRsZXIgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBIYW5kbGVyXG5cdCAqL1xuXHRhZGRIYW5kbGVyKGhhbmRsZXIpIHtcblx0XHR2YWxpZGF0ZU9iamVjdChoYW5kbGVyKTtcblx0XHRpZiAoIShoYW5kbGVyIGluc3RhbmNlb2YgSGFuZGxlcikpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBoYW5kbGVyIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgSGFuZGxlclwiKTtcblx0XHR9XG5cblx0XHR0aGlzLmhhbmRsZXIuYWRkKGhhbmRsZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7SGFuZGxlcn0gaGFuZGxlclxuXHQgKiBAcmV0dXJuIHtMb2dnZXJ9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgaGFuZGxlciBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIEhhbmRsZXJcblx0ICovXG5cdHJlbW92ZUhhbmRsZXIoaGFuZGxlcikge1xuXHRcdHZhbGlkYXRlT2JqZWN0KGhhbmRsZXIpO1xuXHRcdGlmICghKGhhbmRsZXIgaW5zdGFuY2VvZiBIYW5kbGVyKSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIGhhbmRsZXIgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBIYW5kbGVyXCIpO1xuXHRcdH1cblxuXHRcdHRoaXMuaGFuZGxlci5kZWxldGUoaGFuZGxlcik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogbG9nIFRyYWNlIG1lc3NhZ2Vcblx0ICpcblx0ICogQUxMID4gVFJBQ0UgPiBERUJVRyA+IElORk8gPiBXQVJOID4gRVJST1IgPiBGQVRBTCA+IE9GRiAgKEFMTCA9IDB4ZmY7T0ZGID0gMHgwMDtcblx0ICpcblx0ICogQHBhcmFtIHsqfSBhcmd1bWVudHNcblx0ICogQHJldHVybiB7TG9nZ2VyfVxuXHQgKiBAc2luY2UgMS41LjBcblx0ICovXG5cdGxvZ1RyYWNlKC4uLmFyZ3MpIHtcblx0XHRpZiAodHlwZW9mIGFyZ3MgIT09IFwib2JqZWN0XCIgfHwgYXJnc1swXSA9PT0gbnVsbCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0XCIpO1xuXHRcdH1cblxuXHRcdHRyaWdnZXJMb2cuYXBwbHkodGhpcywgW1RSQUNFLCAuLi5hcmdzXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogbG9nIERlYnVnIG1lc3NhZ2Vcblx0ICpcblx0ICogQUxMID4gVFJBQ0UgPiBERUJVRyA+IElORk8gPiBXQVJOID4gRVJST1IgPiBGQVRBTCA+IE9GRiAgKEFMTCA9IDB4ZmY7T0ZGID0gMHgwMDtcblx0ICpcblx0ICogQHBhcmFtIHsqfSBhcmd1bWVudHNcblx0ICogQHJldHVybiB7TG9nZ2VyfVxuXHQgKiBAc2luY2UgMS41LjBcblx0ICovXG5cdGxvZ0RlYnVnKC4uLmFyZ3MpIHtcblx0XHRpZiAodHlwZW9mIGFyZ3MgIT09IFwib2JqZWN0XCIgfHwgYXJnc1swXSA9PT0gbnVsbCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0XCIpO1xuXHRcdH1cblxuXHRcdHRyaWdnZXJMb2cuYXBwbHkodGhpcywgW0RFQlVHLCAuLi5hcmdzXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogbG9nIEluZm8gbWVzc2FnZVxuXHQgKlxuXHQgKiBBTEwgPiBUUkFDRSA+IERFQlVHID4gSU5GTyA+IFdBUk4gPiBFUlJPUiA+IEZBVEFMID4gT0ZGICAoQUxMID0gMHhmZjtPRkYgPSAweDAwO1xuXHQgKlxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJuIHtMb2dnZXJ9XG5cdCAqIEBzaW5jZSAxLjUuMFxuXHQgKi9cblx0bG9nSW5mbyguLi5hcmdzKSB7XG5cdFx0aWYgKHR5cGVvZiBhcmdzICE9PSBcIm9iamVjdFwiIHx8IGFyZ3NbMF0gPT09IG51bGwpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdFwiKTtcblx0XHR9XG5cblx0XHR0cmlnZ2VyTG9nLmFwcGx5KHRoaXMsIFtJTkZPLCAuLi5hcmdzXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogbG9nIFdhcm4gbWVzc2FnZVxuXHQgKlxuXHQgKiBBTEwgPiBUUkFDRSA+IERFQlVHID4gSU5GTyA+IFdBUk4gPiBFUlJPUiA+IEZBVEFMID4gT0ZGICAoQUxMID0gMHhmZjtPRkYgPSAweDAwO1xuXHQgKlxuXHQgKiBAcGFyYW0geyp9IGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJuIHtMb2dnZXJ9XG5cdCAqIEBzaW5jZSAxLjUuMFxuXHQgKi9cblx0bG9nV2FybiguLi5hcmdzKSB7XG5cdFx0aWYgKHR5cGVvZiBhcmdzICE9PSBcIm9iamVjdFwiIHx8IGFyZ3NbMF0gPT09IG51bGwpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdFwiKTtcblx0XHR9XG5cblx0XHR0cmlnZ2VyTG9nLmFwcGx5KHRoaXMsIFtXQVJOLCAuLi5hcmdzXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogbG9nIEVycm9yIG1lc3NhZ2Vcblx0ICpcblx0ICogQUxMID4gVFJBQ0UgPiBERUJVRyA+IElORk8gPiBXQVJOID4gRVJST1IgPiBGQVRBTCA+IE9GRiAgKEFMTCA9IDB4ZmY7T0ZGID0gMHgwMDtcblx0ICpcblx0ICogQHBhcmFtIHsqfSBhcmd1bWVudHNcblx0ICogQHJldHVybiB7TG9nZ2VyfVxuXHQgKiBAc2luY2UgMS41LjBcblx0ICovXG5cdGxvZ0Vycm9yKC4uLmFyZ3MpIHtcblx0XHRpZiAodHlwZW9mIGFyZ3MgIT09IFwib2JqZWN0XCIgfHwgYXJnc1swXSA9PT0gbnVsbCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0XCIpO1xuXHRcdH1cblxuXHRcdHRyaWdnZXJMb2cuYXBwbHkodGhpcywgW0VSUk9SLCAuLi5hcmdzXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogbG9nIEZhdGFsIG1lc3NhZ2Vcblx0ICpcblx0ICogQUxMID4gVFJBQ0UgPiBERUJVRyA+IElORk8gPiBXQVJOID4gRVJST1IgPiBGQVRBTCA+IE9GRiAgKEFMTCA9IDB4ZmY7T0ZGID0gMHgwMDtcblx0ICpcblx0ICogQHBhcmFtIHsqfSBhcmd1bWVudHNcblx0ICogQHJldHVybiB7TG9nZ2VyfVxuXHQgKiBAc2luY2UgMS41LjBcblx0ICovXG5cdGxvZ0ZhdGFsKC4uLmFyZ3MpIHtcblx0XHRpZiAodHlwZW9mIGFyZ3MgIT09IFwib2JqZWN0XCIgfHwgYXJnc1swXSA9PT0gbnVsbCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0XCIpO1xuXHRcdH1cblxuXHRcdHRyaWdnZXJMb2cuYXBwbHkodGhpcywgW0ZBVEFMLCAuLi5hcmdzXSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogTGFiZWxzXG5cdCAqXG5cdCAqIEBwYXJhbSB7aW50ZWdlcn0gbGV2ZWxcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0Z2V0TGFiZWwobGV2ZWwpIHtcblx0XHR2YWxpZGF0ZUludGVnZXIobGV2ZWwpO1xuXG5cdFx0aWYgKGxldmVsID09PSBBTEwpIHJldHVybiBcIkFMTFwiO1xuXHRcdGlmIChsZXZlbCA9PT0gVFJBQ0UpIHJldHVybiBcIlRSQUNFXCI7XG5cdFx0aWYgKGxldmVsID09PSBERUJVRykgcmV0dXJuIFwiREVCVUdcIjtcblx0XHRpZiAobGV2ZWwgPT09IElORk8pIHJldHVybiBcIklORk9cIjtcblx0XHRpZiAobGV2ZWwgPT09IFdBUk4pIHJldHVybiBcIldBUk5cIjtcblx0XHRpZiAobGV2ZWwgPT09IEVSUk9SKSByZXR1cm4gXCJFUlJPUlwiO1xuXHRcdGlmIChsZXZlbCA9PT0gRkFUQUwpIHJldHVybiBcIkZBVEFMXCI7XG5cdFx0aWYgKGxldmVsID09PSBPRkYpIHJldHVybiBcIk9GRlwiO1xuXG5cdFx0cmV0dXJuIFwidW5rbm93blwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIExldmVsXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbFxuXHQgKiBAcmV0dXJuIHtpbnRlZ2VyfVxuXHQgKi9cblx0Z2V0TGV2ZWwobGFiZWwpIHtcblx0XHR2YWxpZGF0ZVN0cmluZyhsYWJlbCk7XG5cblx0XHRpZiAobGFiZWwgPT09IFwiQUxMXCIpIHJldHVybiBBTEw7XG5cdFx0aWYgKGxhYmVsID09PSBcIlRSQUNFXCIpIHJldHVybiBUUkFDRTtcblx0XHRpZiAobGFiZWwgPT09IFwiREVCVUdcIikgcmV0dXJuIERFQlVHO1xuXHRcdGlmIChsYWJlbCA9PT0gXCJJTkZPXCIpIHJldHVybiBJTkZPO1xuXHRcdGlmIChsYWJlbCA9PT0gXCJXQVJOXCIpIHJldHVybiBXQVJOO1xuXHRcdGlmIChsYWJlbCA9PT0gXCJFUlJPUlwiKSByZXR1cm4gRVJST1I7XG5cdFx0aWYgKGxhYmVsID09PSBcIkZBVEFMXCIpIHJldHVybiBGQVRBTDtcblx0XHRpZiAobGFiZWwgPT09IFwiT0ZGXCIpIHJldHVybiBPRkY7XG5cblx0XHRyZXR1cm4gMDtcblx0fVxufVxuXG4vKipcbiAqIExvZyB0cmlnZ2VyblxuICpcbiAqIEBwYXJhbSB7aW50ZWdlcn0gbG9nbGV2ZWxcbiAqIEBwYXJhbSB7Kn0gYXJnc1xuICogQHJldHVybiB7TG9nZ2VyfVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gdHJpZ2dlckxvZyhsb2dsZXZlbCwgLi4uYXJncykge1xuXHRmb3IgKGNvbnN0IGhhbmRsZXIgb2YgdGhpcy5oYW5kbGVyKSB7XG5cdFx0aGFuZGxlci5sb2cobmV3IExvZ0VudHJ5KGxvZ2xldmVsLCBhcmdzKSk7XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn1cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIjtcbmltcG9ydCB7Q29uc29sZUhhbmRsZXJ9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvbG9nZ2luZy9oYW5kbGVyL2NvbnNvbGUubWpzXCI7XG5pbXBvcnQge0xvZ0VudHJ5fSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL2xvZ2dpbmcvbG9nZW50cnkubWpzXCI7XG5pbXBvcnQge1RSQUNFLCBXQVJOLCBERUJVRywgRVJST1IsIEZBVEFMLCBJTkZPfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL2xvZ2dpbmcvbG9nZ2VyLm1qc1wiO1xuXG5kZXNjcmliZSgnTG9nZ2luZycsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCdDb25zb2xlSGFuZGxlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIGNyZWF0ZSBDb25zb2xlSGFuZGxlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQ29uc29sZUhhbmRsZXIoKSkudG8uYmUuaW5zdGFuY2VvZihDb25zb2xlSGFuZGxlcilcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBsb2cgdG8gY29uc29sZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQ29uc29sZUhhbmRsZXIoKS5zZXRBbGwoKS5sb2cobmV3IExvZ0VudHJ5KEZBVEFMLCBbMSwgdHJ1ZSwgJ2ZhdGFsJ10pKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBsb2cgdG8gY29uc29sZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQ29uc29sZUhhbmRsZXIoKS5zZXRBbGwoKS5sb2cobmV3IExvZ0VudHJ5KFRSQUNFLCBbMSwgdHJ1ZSwgJ3RyYWNlJ10pKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBsb2cgdG8gY29uc29sZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQ29uc29sZUhhbmRsZXIoKS5zZXRBbGwoKS5sb2cobmV3IExvZ0VudHJ5KFdBUk4sIFsxLCB0cnVlLCAnd2FybiddKSkpLnRvLmJlLnRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgbG9nIHRvIGNvbnNvbGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IENvbnNvbGVIYW5kbGVyKCkuc2V0QWxsKCkubG9nKG5ldyBMb2dFbnRyeShERUJVRywgWzEsIHRydWUsICdkZWJ1ZyddKSkpLnRvLmJlLnRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgbG9nIHRvIGNvbnNvbGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IENvbnNvbGVIYW5kbGVyKCkuc2V0QWxsKCkubG9nKG5ldyBMb2dFbnRyeShFUlJPUiwgWzEsIHRydWUsICdlcnJvciddKSkpLnRvLmJlLnRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgbG9nIHRvIGNvbnNvbGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IENvbnNvbGVIYW5kbGVyKCkuc2V0QWxsKCkubG9nKG5ldyBMb2dFbnRyeShJTkZPLCBbMSwgdHJ1ZSwgJ2luZm8nXSkpKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG59KTsiLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7TG9nZ2VyLCBPRkYsIEFMTCwgVFJBQ0UsIERFQlVHLCBJTkZPLCBXQVJOLCBFUlJPUiwgRkFUQUx9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvbG9nZ2luZy9sb2dnZXIubWpzXCI7XG5cblxuZGVzY3JpYmUoJ0xvZ2dpbmcnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnbmV3IExvZ2dlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBMb2dnZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IExvZ2dlcigpKS50by5pbnN0YW5jZU9mKExvZ2dlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ0xvZ2dlci5sb2dUcmFjZSgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIExvZ2dlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgTG9nZ2VyKCkubG9nVHJhY2UoXCJ0ZXN0XCIpKS50by5pbnN0YW5jZU9mKExvZ2dlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIFxuICAgIGRlc2NyaWJlKCdMb2dnZXIubG9nRGVidWcoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBMb2dnZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IExvZ2dlcigpLmxvZ0RlYnVnKFwidGVzdFwiKSkudG8uaW5zdGFuY2VPZihMb2dnZXIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBcbiAgICBkZXNjcmliZSgnTG9nZ2VyLmxvZ0luZm8oKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBMb2dnZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IExvZ2dlcigpLmxvZ0luZm8oXCJ0ZXN0XCIpKS50by5pbnN0YW5jZU9mKExvZ2dlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIFxuICAgIGRlc2NyaWJlKCdMb2dnZXIubG9nV2FybigpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIExvZ2dlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgTG9nZ2VyKCkubG9nV2FybihcInRlc3RcIikpLnRvLmluc3RhbmNlT2YoTG9nZ2VyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgXG4gICAgZGVzY3JpYmUoJ0xvZ2dlci5sb2dFcnJvcigpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIExvZ2dlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgTG9nZ2VyKCkubG9nRXJyb3IoXCJ0ZXN0XCIpKS50by5pbnN0YW5jZU9mKExvZ2dlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIFxuICAgIGRlc2NyaWJlKCdMb2dnZXIubG9nRmF0YWwoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBMb2dnZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IExvZ2dlcigpLmxvZ0ZhdGFsKFwidGVzdFwiKSkudG8uaW5zdGFuY2VPZihMb2dnZXIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBcbiAgICBkZXNjcmliZSgnTG9nZ2VyLmdldExldmVsKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIFtcbiAgICAgICAgICAgIFsnQUxMJywgQUxMXSxcbiAgICAgICAgICAgIFsnVFJBQ0UnLCBUUkFDRV0sXG4gICAgICAgICAgICBbJ0RFQlVHJywgREVCVUddLFxuICAgICAgICAgICAgWydJTkZPJywgSU5GT10sXG4gICAgICAgICAgICBbJ1dBUk4nLCBXQVJOXSxcbiAgICAgICAgICAgIFsnRVJST1InLCBFUlJPUl0sXG4gICAgICAgICAgICBbJ0ZBVEFMJywgRkFUQUxdLFxuICAgICAgICAgICAgWydPRkYnLCBPRkZdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KGEgKyAnIHNob3VsZCByZXR1cm4gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QobmV3IExvZ2dlcigpLmdldExldmVsKGEpKS50by5iZS5lcXVhbHMoYik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgZGVzY3JpYmUoJ0xvZ2dlci5nZXRMYWJlbCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBbXG4gICAgICAgICAgICBbJ0FMTCcsIEFMTF0sXG4gICAgICAgICAgICBbJ1RSQUNFJywgVFJBQ0VdLFxuICAgICAgICAgICAgWydERUJVRycsIERFQlVHXSxcbiAgICAgICAgICAgIFsnSU5GTycsIElORk9dLFxuICAgICAgICAgICAgWydXQVJOJywgV0FSTl0sXG4gICAgICAgICAgICBbJ0VSUk9SJywgRVJST1JdLFxuICAgICAgICAgICAgWydGQVRBTCcsIEZBVEFMXSxcbiAgICAgICAgICAgIFsnT0ZGJywgT0ZGXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdChhICsgJyBzaG91bGQgcmV0dXJuICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBMb2dnZXIoKS5nZXRMYWJlbChiKSkudG8uYmUuZXF1YWxzKGEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufSk7IiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiO1xuaW1wb3J0IHtBTEwsIFRSQUNFLCBERUJVRywgSU5GTywgV0FSTiwgRVJST1IsIEZBVEFMLCBPRkZ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvbG9nZ2luZy9sb2dnZXIubWpzXCI7XG5pbXBvcnQge0hhbmRsZXJ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvbG9nZ2luZy9oYW5kbGVyLm1qc1wiO1xuaW1wb3J0IHtMb2dFbnRyeX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9sb2dnaW5nL2xvZ2VudHJ5Lm1qc1wiO1xuXG5kZXNjcmliZSgnTG9nZ2luZycsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCdIYW5kbGVyLnNldExvZ0xldmVsKCkuZ2V0TG9nTGV2ZWwoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbQUxMXSwgW1RSQUNFXSwgW0RFQlVHXSwgW0lORk9dLCBbV0FSTl0sIFtFUlJPUl0sIFtGQVRBTF0sIFtPRkZdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ3RoZSBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIHRoZSBzZXQgdmFsdWUgJyArIGEsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QobmV3IEhhbmRsZXIoKS5zZXRMb2dMZXZlbChhKS5nZXRMb2dMZXZlbCgpKS50by5iZS5lcXVhbChhKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJ0hhbmRsZXIubG9nKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgSGFuZGxlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgSGFuZGxlcigpLmxvZyhuZXcgTG9nRW50cnkoMCwgXCJ0ZXN0XCIpKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnSGFuZGxlci5sb2coKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgaGFuZGxlcjtcblxuICAgICAgICBjbGFzcyBUZXN0SGFuZGxlciBleHRlbmRzIEhhbmRsZXIge1xuICAgICAgICAgICAgbG9nKGVudHJ5KSB7XG4gICAgICAgICAgICAgICAgc3VwZXIubG9nKGVudHJ5KTtcblxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgaGFuZGxlciA9IG5ldyBUZXN0SGFuZGxlcigpO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgSGFuZGxlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgSGFuZGxlcigpLmxvZyhuZXcgTG9nRW50cnkoMCwgXCJ0ZXN0XCIpKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5sb2coKSB3aXRoIGxvZ2xldmVsJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBUZXN0SGFuZGxlcjtcblxuICAgICAgICBiZWZvcmUoKCkgPT4ge1xuICAgICAgICAgICAgVGVzdEhhbmRsZXIgPSBjbGFzcyBleHRlbmRzIEhhbmRsZXIge1xuICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgICAgICAgICBzdXBlcigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGxzID0gMDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsb2cobG9nbGV2ZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN1cGVyLmxvZyhsb2dsZXZlbCkgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsbHMrK1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgWyAvLyBBTEwgPiBUUkFDRSA+IERFQlVHID4gSU5GTyA+IFdBUk4gPiBFUlJPUiA+IEZBVEFMID4gT0ZGICAoQUxMID0gMHhmZjtPRkYgPSAweDAwO1xuICAgICAgICAgICAgW0FMTCwgNl0sXG4gICAgICAgICAgICBbVFJBQ0UsIDZdLFxuICAgICAgICAgICAgW0RFQlVHLCA1XSxcbiAgICAgICAgICAgIFtJTkZPLCA0XSxcbiAgICAgICAgICAgIFtXQVJOLCAzXSxcbiAgICAgICAgICAgIFtFUlJPUiwgMl0sXG4gICAgICAgICAgICBbRkFUQUwsIDFdLFxuICAgICAgICAgICAgW09GRiwgMF1cbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnaXMubG9nKCcgKyBhICsgJykgc2hvdWxkIGxvZyAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCBoYW5kbGVyID0gbmV3IFRlc3RIYW5kbGVyKCkuc2V0TG9nTGV2ZWwoYSk7XG4gICAgICAgICAgICAgICAgaGFuZGxlci5sb2cobmV3IExvZ0VudHJ5KFRSQUNFKSk7XG4gICAgICAgICAgICAgICAgaGFuZGxlci5sb2cobmV3IExvZ0VudHJ5KERFQlVHKSk7XG4gICAgICAgICAgICAgICAgaGFuZGxlci5sb2cobmV3IExvZ0VudHJ5KElORk8pKTtcbiAgICAgICAgICAgICAgICBoYW5kbGVyLmxvZyhuZXcgTG9nRW50cnkoV0FSTikpO1xuICAgICAgICAgICAgICAgIGhhbmRsZXIubG9nKG5ldyBMb2dFbnRyeShFUlJPUikpO1xuICAgICAgICAgICAgICAgIGhhbmRsZXIubG9nKG5ldyBMb2dFbnRyeShGQVRBTCkpO1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KGhhbmRsZXIuY2FsbHMpLmlzLmVxdWFsKGIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnSGFuZGxlci5zZXRMb2dMZXZlbCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIEhhbmRsZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IEhhbmRsZXIoKS5zZXRMb2dMZXZlbChBTEwpKS50by5pbnN0YW5jZU9mKEhhbmRsZXIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdIYW5kbGVyLmdldExvZ0xldmVsKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCduZXcgbG9nZ2VyIHNob3VsZCBiZSAwJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBIYW5kbGVyKCkuZ2V0TG9nTGV2ZWwoKSkudG8uYmUuZXF1YWwoT0ZGKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnSGFuZGxlci5zZXRBbGwoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJyBzaG91bGQgaW5zdGFuY2VvZiBIYW5kbGVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBIYW5kbGVyKCkuc2V0QWxsKCkpLnRvLmluc3RhbmNlT2YoSGFuZGxlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIGRlc2NyaWJlKCdIYW5kbGVyLnNldFRyYWNlKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCduZXcgbG9nZ2VyIHNob3VsZCBpbnN0YW5jZW9mIEhhbmRsZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IEhhbmRsZXIoKS5zZXRUcmFjZSgpKS50by5pbnN0YW5jZU9mKEhhbmRsZXIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBkZXNjcmliZSgnSGFuZGxlci5zZXREZWJ1ZygpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnIHNob3VsZCBpbnN0YW5jZW9mIEhhbmRsZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IEhhbmRsZXIoKS5zZXREZWJ1ZygpKS50by5pbnN0YW5jZU9mKEhhbmRsZXIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBkZXNjcmliZSgnSGFuZGxlci5zZXRJbmZvKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgSGFuZGxlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgSGFuZGxlcigpLnNldEluZm8oKSkudG8uaW5zdGFuY2VPZihIYW5kbGVyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgZGVzY3JpYmUoJ0hhbmRsZXIuc2V0V2FybigpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnIHNob3VsZCBpbnN0YW5jZW9mIEhhbmRsZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IEhhbmRsZXIoKS5zZXRXYXJuKCkpLnRvLmluc3RhbmNlT2YoSGFuZGxlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIGRlc2NyaWJlKCdIYW5kbGVyLnNldEVycm9yKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgSGFuZGxlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgSGFuZGxlcigpLnNldEVycm9yKCkpLnRvLmluc3RhbmNlT2YoSGFuZGxlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIGRlc2NyaWJlKCdIYW5kbGVyLnNldEZhdGFsKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgSGFuZGxlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgSGFuZGxlcigpLnNldEZhdGFsKCkpLnRvLmluc3RhbmNlT2YoSGFuZGxlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIGRlc2NyaWJlKCdIYW5kbGVyLnNldE9mZigpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIEhhbmRsZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IEhhbmRsZXIoKS5zZXRPZmYoKSkudG8uaW5zdGFuY2VPZihIYW5kbGVyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59KTsiLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7TG9nRW50cnl9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvbG9nZ2luZy9sb2dlbnRyeS5tanNcIjtcblxuXG5kZXNjcmliZSgnTG9nJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJ25ldyBMb2cnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgTG9nJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBMb2dFbnRyeSgxLCAnYScsICdiJywgJ2MnKSkudG8uaW5zdGFuY2VPZihMb2dFbnRyeSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ0xvZy5sb2dsZXZlbCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgbG9nO1xuXG4gICAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbG9nID0gbmV3IExvZ0VudHJ5KDEsIGZhbHNlLCAndGVzdCcsIDk5LCB7YTogdHJ1ZX0pO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGxvZ2xldmVsIDEnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobG9nLmdldExvZ0xldmVsKCkpLnRvLmJlLmVxdWFsKDEpXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGFyZ3VtZW50cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChsb2cuZ2V0QXJndW1lbnRzKCkpLnRvLmhhdmUuZGVlcC5tZW1iZXJzKFtmYWxzZSwgJ3Rlc3QnLCA5OSwge2E6IHRydWV9XSlcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbn0pOyIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBpc0ludGVnZXIsIGlzU3RyaW5nLCBpc09iamVjdCB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IEJhc2VXaXRoT3B0aW9ucyB9IGZyb20gXCIuLi90eXBlcy9iYXNld2l0aG9wdGlvbnMubWpzXCI7XG5pbXBvcnQgeyBPYnNlcnZhYmxlUXVldWUgfSBmcm9tIFwiLi4vdHlwZXMvb2JzZXJ2YWJsZXF1ZXVlLm1qc1wiO1xuaW1wb3J0IHsgTWVzc2FnZSB9IGZyb20gXCIuL3dlYmNvbm5lY3QvbWVzc2FnZS5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbEZ1bmN0aW9uIH0gZnJvbSBcIi4uL3R5cGVzL2dsb2JhbC5tanNcIjtcblxuZXhwb3J0IHsgV2ViQ29ubmVjdCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCByZWNlaXZlUXVldWVTeW1ib2wgPSBTeW1ib2woXCJyZWNlaXZlUXVldWVcIik7XG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBzZW5kUXVldWVTeW1ib2wgPSBTeW1ib2woXCJzZW5kUXVldWVcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKlxuICogaGludDogdGhpcyBuYW1lIGlzIHVzZWQgaW4gdGhlIHRlc3RzLiBpZiB5b3Ugd2FudCB0byBjaGFuZ2UgaXQsIHBsZWFzZSBjaGFuZ2UgaXQgaW4gdGhlIHRlc3RzIGFzIHdlbGwuXG4gKi9cbmNvbnN0IGNvbm5lY3Rpb25TeW1ib2wgPSBTeW1ib2woXCJjb25uZWN0aW9uXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBtYW51YWxDbG9zZVN5bWJvbCA9IFN5bWJvbChcIm1hbnVhbENsb3NlXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAc2VlIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM2NDU1Lmh0bWwjc2VjdGlvbi03LjQuMVxuICogQHR5cGUge09iamVjdH1cbiAqL1xuY29uc3QgY29ubmVjdGlvblN0YXR1c0NvZGUgPSB7XG5cdDEwMDA6IFwiTm9ybWFsIGNsb3N1cmVcIixcblx0MTAwMTogXCJHb2luZyBhd2F5XCIsXG5cdDEwMDI6IFwiUHJvdG9jb2wgZXJyb3JcIixcblx0MTAwMzogXCJVbnN1cHBvcnRlZCBkYXRhXCIsXG5cdDEwMDQ6IFwiUmVzZXJ2ZWRcIixcblx0MTAwNTogXCJObyBzdGF0dXMgY29kZVwiLFxuXHQxMDA2OiBcIkNvbm5lY3Rpb24gY2xvc2VkIGFibm9ybWFsbHlcIixcblx0MTAwNzogXCJJbnZhbGlkIGZyYW1lIHBheWxvYWQgZGF0YVwiLFxuXHQxMDA4OiBcIlBvbGljeSB2aW9sYXRpb25cIixcblx0MTAwOTogXCJUaGUgTWVzc2FnZSBpcyB0b28gYmlnXCIsXG5cdDEwMTA6IFwiTWFuZGF0b3J5IGV4dGVuc2lvblwiLFxuXHQxMDExOiBcIkludGVybmFsIHNlcnZlciBlcnJvclwiLFxuXHQxMDE1OiBcIlRMUyBoYW5kc2hha2VcIixcbn07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0aGlzIHtXZWJDb25uZWN0fVxuICogQHRocm93cyB7RXJyb3J9IE5vIHVybCBkZWZpbmVkIGZvciB3ZWJzb2NrZXQgZGF0YXNvdXJjZS5cbiAqL1xuZnVuY3Rpb24gY29ubmVjdFNlcnZlcihyZXNvbHZlLCByZWplY3QpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0Y29uc3QgdXJsID0gc2VsZi5nZXRPcHRpb24oXCJ1cmxcIik7XG5cdGlmICghdXJsKSB7XG5cdFx0cmVqZWN0KFwiTm8gdXJsIGRlZmluZWQgZm9yIHdlYiBjb25uZWN0LlwiKTtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRsZXQgcHJvbWlzZUFsbHJlZHlSZXNvbHZlZCA9IGZhbHNlO1xuXG5cdGxldCBjb25uZWN0aW9uVGltZW91dCA9IHNlbGYuZ2V0T3B0aW9uKFwiY29ubmVjdGlvbi50aW1lb3V0XCIpO1xuXHRpZiAoIWlzSW50ZWdlcihjb25uZWN0aW9uVGltZW91dCkgfHwgY29ubmVjdGlvblRpbWVvdXQgPCAxMDApIHtcblx0XHRjb25uZWN0aW9uVGltZW91dCA9IDUwMDA7XG5cdH1cblxuXHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRpZiAocHJvbWlzZUFsbHJlZHlSZXNvbHZlZCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRyZWplY3QobmV3IEVycm9yKFwiQ29ubmVjdGlvbiB0aW1lb3V0XCIpKTtcblx0fSwgY29ubmVjdGlvblRpbWVvdXQpO1xuXG5cdGxldCByZWNvbm5lY3RUaW1lb3V0ID0gc2VsZi5nZXRPcHRpb24oXCJjb25uZWN0aW9uLnJlY29ubmVjdC50aW1lb3V0XCIpO1xuXHRpZiAoIWlzSW50ZWdlcihyZWNvbm5lY3RUaW1lb3V0KSB8fCByZWNvbm5lY3RUaW1lb3V0IDwgMTAwMClcblx0XHRyZWNvbm5lY3RUaW1lb3V0ID0gMTAwMDtcblx0bGV0IHJlY29ubmVjdEF0dGVtcHRzID0gc2VsZi5nZXRPcHRpb24oXCJjb25uZWN0aW9uLnJlY29ubmVjdC5hdHRlbXB0c1wiKTtcblx0aWYgKCFpc0ludGVnZXIocmVjb25uZWN0QXR0ZW1wdHMpIHx8IHJlY29ubmVjdEF0dGVtcHRzIDwgMSlcblx0XHRyZWNvbm5lY3RBdHRlbXB0cyA9IDE7XG5cdGxldCByZWNvbm5lY3RFbmFibGVkID0gc2VsZi5nZXRPcHRpb24oXCJjb25uZWN0aW9uLnJlY29ubmVjdC5lbmFibGVkXCIpO1xuXHRpZiAocmVjb25uZWN0RW5hYmxlZCAhPT0gdHJ1ZSkgcmVjb25uZWN0RW5hYmxlZCA9IGZhbHNlO1xuXG5cdHNlbGZbbWFudWFsQ2xvc2VTeW1ib2xdID0gZmFsc2U7XG5cdHNlbGZbY29ubmVjdGlvblN5bWJvbF0ucmVjb25uZWN0Q291bnRlcisrO1xuXG5cdGlmIChcblx0XHRzZWxmW2Nvbm5lY3Rpb25TeW1ib2xdLnNvY2tldCAmJlxuXHRcdHNlbGZbY29ubmVjdGlvblN5bWJvbF0uc29ja2V0LnJlYWR5U3RhdGUgPCAyXG5cdCkge1xuXHRcdHNlbGZbY29ubmVjdGlvblN5bWJvbF0uc29ja2V0LmNsb3NlKCk7XG5cdH1cblx0c2VsZltjb25uZWN0aW9uU3ltYm9sXS5zb2NrZXQgPSBudWxsO1xuXG5cdGNvbnN0IFdlYlNvY2tldCA9IGdldEdsb2JhbEZ1bmN0aW9uKFwiV2ViU29ja2V0XCIpO1xuXHRpZiAoIVdlYlNvY2tldCkge1xuXHRcdHJlamVjdChuZXcgRXJyb3IoXCJXZWJTb2NrZXQgaXMgbm90IGF2YWlsYWJsZVwiKSk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0c2VsZltjb25uZWN0aW9uU3ltYm9sXS5zb2NrZXQgPSBuZXcgV2ViU29ja2V0KHVybCk7XG5cblx0c2VsZltjb25uZWN0aW9uU3ltYm9sXS5zb2NrZXQub25tZXNzYWdlID0gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdFx0aWYgKGV2ZW50LmRhdGEgaW5zdGFuY2VvZiBCbG9iKSB7XG5cdFx0XHRjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuXHRcdFx0cmVhZGVyLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkZW5kXCIsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0c2VsZltyZWNlaXZlUXVldWVTeW1ib2xdLmFkZChuZXcgTWVzc2FnZShyZWFkZXIucmVzdWx0KSk7XG5cdFx0XHR9KTtcblx0XHRcdHJlYWRlci5yZWFkQXNUZXh0KG5ldyBNZXNzYWdlKGV2ZW50LmRhdGEpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c2VsZltyZWNlaXZlUXVldWVTeW1ib2xdLmFkZChNZXNzYWdlLmZyb21KU09OKGV2ZW50LmRhdGEpKTtcblx0XHR9XG5cdH07XG5cblx0c2VsZltjb25uZWN0aW9uU3ltYm9sXS5zb2NrZXQub25vcGVuID0gZnVuY3Rpb24gKCkge1xuXHRcdHNlbGZbY29ubmVjdGlvblN5bWJvbF0ucmVjb25uZWN0Q291bnRlciA9IDA7XG5cdFx0aWYgKHR5cGVvZiByZXNvbHZlID09PSBcImZ1bmN0aW9uXCIgJiYgIXByb21pc2VBbGxyZWR5UmVzb2x2ZWQpIHtcblx0XHRcdHByb21pc2VBbGxyZWR5UmVzb2x2ZWQgPSB0cnVlO1xuXHRcdFx0cmVzb2x2ZSgpO1xuXHRcdH1cblx0fTtcblxuXHRzZWxmW2Nvbm5lY3Rpb25TeW1ib2xdLnNvY2tldC5jbG9zZSA9IGZ1bmN0aW9uIChldmVudCkge1xuXHRcdGlmIChzZWxmW21hbnVhbENsb3NlU3ltYm9sXSkge1xuXHRcdFx0c2VsZlttYW51YWxDbG9zZVN5bWJvbF0gPSBmYWxzZTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHRyZWNvbm5lY3RFbmFibGVkICYmXG5cdFx0XHR0aGlzW2Nvbm5lY3Rpb25TeW1ib2xdLnJlY29ubmVjdENvdW50ZXIgPCByZWNvbm5lY3RBdHRlbXB0c1xuXHRcdCkge1xuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHNlbGYuY29ubmVjdCgpO1xuXHRcdFx0fSwgcmVjb25uZWN0VGltZW91dCAqIHRoaXNbY29ubmVjdGlvblN5bWJvbF0ucmVjb25uZWN0Q291bnRlcik7XG5cdFx0fVxuXHR9O1xuXG5cdHNlbGZbY29ubmVjdGlvblN5bWJvbF0uc29ja2V0Lm9uZXJyb3IgPSAoZXJyb3IpID0+IHtcblx0XHRpZiAoXG5cdFx0XHRyZWNvbm5lY3RFbmFibGVkICYmXG5cdFx0XHRzZWxmW2Nvbm5lY3Rpb25TeW1ib2xdLnJlY29ubmVjdENvdW50ZXIgPCByZWNvbm5lY3RBdHRlbXB0c1xuXHRcdCkge1xuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHNlbGYuY29ubmVjdCgpO1xuXHRcdFx0fSwgcmVjb25uZWN0VGltZW91dCAqIHRoaXNbY29ubmVjdGlvblN5bWJvbF0ucmVjb25uZWN0Q291bnRlcik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICh0eXBlb2YgcmVqZWN0ID09PSBcImZ1bmN0aW9uXCIgJiYgIXByb21pc2VBbGxyZWR5UmVzb2x2ZWQpIHtcblx0XHRcdFx0cHJvbWlzZUFsbHJlZHlSZXNvbHZlZCA9IHRydWU7XG5cdFx0XHRcdHJlamVjdChlcnJvcik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG4vKipcbiAqIFRoZSBSZXN0QVBJIGlzIGEgY2xhc3MgdGhhdCBlbmFibGVzIGEgUkVTVCBBUEkgc2VydmVyLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS9uZXQvd2ViY29ubmVjdC5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDMuMS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgVGhlIExvY2FsU3RvcmFnZSBjbGFzcyBlbmNhcHN1bGF0ZXMgdGhlIGFjY2VzcyB0byBkYXRhIG9iamVjdHMuXG4gKi9cbmNsYXNzIFdlYkNvbm5lY3QgZXh0ZW5kcyBCYXNlV2l0aE9wdGlvbnMge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBvcHRpb25zIGNvbnRhaW5zIGRlZmluaXRpb25zIGZvciB0aGUgd2ViY29ubmVjdC5cblx0ICovXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcblx0XHRpZiAoaXNTdHJpbmcob3B0aW9ucykpIHtcblx0XHRcdG9wdGlvbnMgPSB7IHVybDogb3B0aW9ucyB9O1xuXHRcdH1cblxuXHRcdHN1cGVyKG9wdGlvbnMpO1xuXG5cdFx0dGhpc1tyZWNlaXZlUXVldWVTeW1ib2xdID0gbmV3IE9ic2VydmFibGVRdWV1ZSgpO1xuXHRcdHRoaXNbc2VuZFF1ZXVlU3ltYm9sXSA9IG5ldyBPYnNlcnZhYmxlUXVldWUoKTtcblxuXHRcdHRoaXNbY29ubmVjdGlvblN5bWJvbF0gPSB7fTtcblx0XHR0aGlzW2Nvbm5lY3Rpb25TeW1ib2xdLnNvY2tldCA9IG51bGw7XG5cdFx0dGhpc1tjb25uZWN0aW9uU3ltYm9sXS5yZWNvbm5lY3RDb3VudGVyID0gMDtcblx0XHR0aGlzW21hbnVhbENsb3NlU3ltYm9sXSA9IGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRjb25uZWN0KCkge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25uZWN0U2VydmVyLmNhbGwodGhpcywgcmVzb2x2ZSwgcmVqZWN0KTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0aXNDb25uZWN0ZWQoKSB7XG5cdFx0cmV0dXJuIHRoaXNbY29ubmVjdGlvblN5bWJvbF0/LnNvY2tldD8ucmVhZHlTdGF0ZSA9PT0gMTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9uZXQvd2ViY29ubmVjdFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdXJsPXVuZGVmaW5lZCBEZWZpbmVzIHRoZSByZXNvdXJjZSB0aGF0IHlvdSB3aXNoIHRvIGZldGNoLlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gY29ubmVjdGlvblxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gY29ubmVjdGlvbi50aW1lb3V0PTUwMDAgRGVmaW5lcyB0aGUgdGltZW91dCBmb3IgdGhlIGNvbm5lY3Rpb24uXG5cdCAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBjb25uZWN0aW9uLnJlY29ubmVjdC50aW1lb3V0IFRoZSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyBmb3IgdGhlIHJlY29ubmVjdC5cblx0ICogQHByb3BlcnR5IHtOdW1iZXJ9IGNvbm5lY3Rpb24ucmVjb25uZWN0LmF0dGVtcHRzIFRoZSBtYXhpbXVtIG51bWJlciBvZiByZWNvbm5lY3RzLlxuXHQgKiBAcHJvcGVydHkge0Jvb2x9IGNvbm5lY3Rpb24ucmVjb25uZWN0LmVuYWJsZWQgSWYgdGhlIHJlY29ubmVjdCBpcyBlbmFibGVkLlxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dXJsOiB1bmRlZmluZWQsXG5cdFx0XHRjb25uZWN0aW9uOiB7XG5cdFx0XHRcdHRpbWVvdXQ6IDUwMDAsXG5cdFx0XHRcdHJlY29ubmVjdDoge1xuXHRcdFx0XHRcdHRpbWVvdXQ6IDEwMDAsXG5cdFx0XHRcdFx0YXR0ZW1wdHM6IDEsXG5cdFx0XHRcdFx0ZW5hYmxlZDogZmFsc2UsXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGNsb3NlcyB0aGUgY29ubmVjdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIHtOdW1iZXJ9IFtjb2RlPTEwMDBdIFRoZSBjbG9zZSBjb2RlLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW3JlYXNvbj1cIlwiXSBUaGUgY2xvc2UgcmVhc29uLlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKiBAc2VlIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM2NDU1Lmh0bWwjc2VjdGlvbi03LjQuMVxuXHQgKi9cblx0Y2xvc2Uoc3RhdHVzQ29kZSwgcmVhc29uKSB7XG5cdFx0aWYgKCFpc0ludGVnZXIoc3RhdHVzQ29kZSkgfHwgc3RhdHVzQ29kZSA8IDEwMDAgfHwgc3RhdHVzQ29kZSA+IDQ5OTkpIHtcblx0XHRcdHN0YXR1c0NvZGUgPSAxMDAwO1xuXHRcdH1cblx0XHRpZiAoIWlzU3RyaW5nKHJlYXNvbikpIHtcblx0XHRcdHJlYXNvbiA9IFwiXCI7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRoaXNbbWFudWFsQ2xvc2VTeW1ib2xdID0gdHJ1ZTtcblx0XHRcdFx0aWYgKHRoaXNbY29ubmVjdGlvblN5bWJvbF0uc29ja2V0KSB7XG5cdFx0XHRcdFx0dGhpc1tjb25uZWN0aW9uU3ltYm9sXS5zb2NrZXQuY2xvc2Uoc3RhdHVzQ29kZSwgcmVhc29uKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0cmVqZWN0KGVycm9yKTtcblx0XHRcdH1cblx0XHRcdHJlc29sdmUoKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQb2xscyB0aGUgcmVjZWl2ZSBxdWV1ZSBmb3IgbmV3IG1lc3NhZ2VzLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNZXNzYWdlfVxuXHQgKi9cblx0cG9sbCgpIHtcblx0XHRyZXR1cm4gdGhpc1tyZWNlaXZlUXVldWVTeW1ib2xdLnBvbGwoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBcmUgdGhlcmUgYW55IG1lc3NhZ2VzIGluIHRoZSByZWNlaXZlIHF1ZXVlP1xuXHQgKlxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0ZGF0YVJlY2VpdmVkKCkge1xuXHRcdHJldHVybiAhdGhpc1tyZWNlaXZlUXVldWVTeW1ib2xdLmlzRW1wdHkoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgTWVzc2FnZSBmcm9tIHRoZSByZWNlaXZlIHF1ZXVlLCBidXQgZG8gbm90IHJlbW92ZSBpdC5cblx0ICpcblx0ICogQHJldHVybiB7T2JqZWN0fVxuXHQgKi9cblx0cGVlaygpIHtcblx0XHRyZXR1cm4gdGhpc1tyZWNlaXZlUXVldWVTeW1ib2xdLnBlZWsoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBdHRhY2ggYSBuZXcgb2JzZXJ2ZXJcblx0ICpcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybiB7UHJveHlPYnNlcnZlcn1cblx0ICovXG5cdGF0dGFjaE9ic2VydmVyKG9ic2VydmVyKSB7XG5cdFx0dGhpc1tyZWNlaXZlUXVldWVTeW1ib2xdLmF0dGFjaE9ic2VydmVyKG9ic2VydmVyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRhY2ggYSBvYnNlcnZlclxuXHQgKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJuIHtQcm94eU9ic2VydmVyfVxuXHQgKi9cblx0ZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHR0aGlzW3JlY2VpdmVRdWV1ZVN5bWJvbF0uZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRjb250YWluc09ic2VydmVyKG9ic2VydmVyKSB7XG5cdFx0cmV0dXJuIHRoaXNbcmVjZWl2ZVF1ZXVlU3ltYm9sXS5jb250YWluc09ic2VydmVyKG9ic2VydmVyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge01lc3NhZ2V8T2JqZWN0fSBtZXNzYWdlXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRzZW5kKG1lc3NhZ2UpIHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0aWYgKHRoaXNbY29ubmVjdGlvblN5bWJvbF0uc29ja2V0LnJlYWR5U3RhdGUgIT09IDEpIHtcblx0XHRcdFx0cmVqZWN0KFwidGhlIHNvY2tldCBpcyBub3QgcmVhZHlcIik7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXNbY29ubmVjdGlvblN5bWJvbF0uc29ja2V0LnNlbmQoSlNPTi5zdHJpbmdpZnkobWVzc2FnZSkpO1xuXHRcdFx0cmVzb2x2ZSgpO1xuXHRcdH0pO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgUXVldWUgfSBmcm9tIFwiLi9xdWV1ZS5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sLCBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBPYnNlcnZlckxpc3QgfSBmcm9tIFwiLi9vYnNlcnZlcmxpc3QubWpzXCI7XG5cbmV4cG9ydCB7IE9ic2VydmFibGVRdWV1ZSB9O1xuXG4vKipcbiAqIEFuIG9ic2VydmFibGUgcXVldWUgaXMgYSBsaXN0IG9mIGl0ZW1zIHRoYXQgYXJlIHByb2Nlc3NlZCBvbmUgYWZ0ZXIgYW5vdGhlciAoZmlyc3QgaW4sIGZpcnN0IG91dCkuXG4gKlxuICogYFF1ZXVlLmFkZCgpYCBhbmQgYFF1ZXVlLmNsZWFyKClgIG5vdGlmeSBhbGwgb2JzZXJ2ZXJzLlxuICpcbiAqIEBzaW5jZSAzLjMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEFuIG9ic2VydmFibGUgUXVldWUgKEZpZm8pXG4gKi9cbmNsYXNzIE9ic2VydmFibGVRdWV1ZSBleHRlbmRzIFF1ZXVlIHtcblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0ge1xuXHRcdFx0b2JzZXJ2ZXJzOiBuZXcgT2JzZXJ2ZXJMaXN0KCksXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci90eXBlcy9vYnNlcnZhYmxlcXVldWVcIik7XG5cdH1cblxuXHQvKipcblx0ICogQWRkIGEgbmV3IGVsZW1lbnQgdG8gdGhlIGVuZCBvZiB0aGUgcXVldWUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybiB7UXVldWV9XG5cdCAqL1xuXHRhZGQodmFsdWUpIHtcblx0XHRzdXBlci5hZGQodmFsdWUpO1xuXHRcdHRoaXMubm90aWZ5T2JzZXJ2ZXJzKCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogcmVtb3ZlIGFsbCBlbnRyaWVzXG5cdCAqXG5cdCAqIEByZXR1cm4ge1F1ZXVlfVxuXHQgKi9cblx0Y2xlYXIoKSB7XG5cdFx0c3VwZXIuY2xlYXIoKTtcblx0XHR0aGlzLm5vdGlmeU9ic2VydmVycygpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEF0dGFjaCBhIG5ldyBvYnNlcnZlclxuXHQgKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJuIHtQcm94eU9ic2VydmVyfVxuXHQgKi9cblx0YXR0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5vYnNlcnZlcnMuYXR0YWNoKG9ic2VydmVyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRhY2ggYSBvYnNlcnZlclxuXHQgKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJuIHtQcm94eU9ic2VydmVyfVxuXHQgKi9cblx0ZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5vYnNlcnZlcnMuZGV0YWNoKG9ic2VydmVyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBOb3RpZnkgYWxsIG9ic2VydmVyXG5cdCAqXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRub3RpZnlPYnNlcnZlcnMoKSB7XG5cdFx0cmV0dXJuIHRoaXNbaW50ZXJuYWxTeW1ib2xdLm9ic2VydmVycy5ub3RpZnkodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGNvbnRhaW5zT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbFN5bWJvbF0ub2JzZXJ2ZXJzLmNvbnRhaW5zKG9ic2VydmVyKTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlT2JqZWN0LCB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgTWVzc2FnZSB9O1xuXG5jb25zdCBkYXRhU3ltYm9sID0gU3ltYm9sKFwiQEBkYXRhXCIpO1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdlYlNvY2tldCBtZXNzYWdlLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDMuNC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgVGhlIE1lc3NhZ2UgY2xhc3MgZW5jYXBzdWxhdGVzIGEgV2ViU29ja2V0IG1lc3NhZ2UuXG4gKi9cbmNsYXNzIE1lc3NhZ2UgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgb2JqZWN0XG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihkYXRhKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzW2RhdGFTeW1ib2xdID0gdmFsaWRhdGVPYmplY3QoZGF0YSk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgcmF3IG1lc3NhZ2UuXG5cdCAqXG5cdCAqIEByZXR1cm4ge29iamVjdH1cblx0ICovXG5cdGdldERhdGEoKSB7XG5cdFx0cmV0dXJuIHRoaXNbZGF0YVN5bWJvbF07XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7Kn1cblx0ICovXG5cdHRvSlNPTigpIHtcblx0XHRyZXR1cm4gdGhpc1tkYXRhU3ltYm9sXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30ganNvblxuXHQgKiBAcmV0dXJuIHtNZXNzYWdlfVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKi9cblx0c3RhdGljIGZyb21KU09OKGpzb24pIHtcblx0XHR2YWxpZGF0ZVN0cmluZyhqc29uKTtcblx0XHRyZXR1cm4gbmV3IE1lc3NhZ2UoSlNPTi5wYXJzZShqc29uKSk7XG5cdH1cbn1cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtXZWJDb25uZWN0fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL25ldC93ZWJjb25uZWN0Lm1qc1wiO1xuaW1wb3J0IHtNZXNzYWdlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL25ldC93ZWJjb25uZWN0L21lc3NhZ2UubWpzXCI7XG5pbXBvcnQge09ic2VydmVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL29ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHtpbml0V2ViU29ja2V0fSBmcm9tIFwiLi4vLi4vdXRpbC93ZWJzb2NrZXQubWpzXCI7XG5cbmNvbnN0IHRlc3RVcmwgPSBcIndzczovL3dzLnBvc3RtYW4tZWNoby5jb20vcmF3XCJcblxuZGVzY3JpYmUoJ1dlYnNvY2tldCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIGxldCBkcyA9IHVuZGVmaW5lZFxuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRXZWJTb2NrZXQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgZG9uZShlKVxuICAgICAgICB9KVxuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGlmIChkcykge1xuICAgICAgICAgICAgZHMuY2xvc2UoKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gd2l0aG91dCB0aGlzLCB0aGUgbm9kZSB0ZXN0IHdpbGwgaGFuZyBcbiAgICAgICAgZm9yIChjb25zdCBzeW0gb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhkcykpIHtcbiAgICAgICAgICAgIGlmIChzeW0udG9TdHJpbmcoKSA9PT0gJ1N5bWJvbChjb25uZWN0aW9uKScpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRzW3N5bV0/LnNvY2tldD8udGVybWluYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGRzW3N5bV0/LnNvY2tldD8uWyd0ZXJtaW5hdGUnXSgpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZG9uZSgpXG4gICAgfSk7XG5cblxuICAgIGl0KCdzaG91bGQgdHJhbnNmb3JtIGRhdGEnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgIGRzID0gbmV3IFdlYkNvbm5lY3QoIHtcbiAgICAgICAgICAgIHVybDogdGVzdFVybCxcbiAgICAgICAgfSlcblxuICAgICAgICBkcy5jb25uZWN0KCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGRzLmF0dGFjaE9ic2VydmVyKG5ldyBPYnNlcnZlcigoKT0+IHtcbiAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGRzLnNlbmQoe1xuICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogXCJIZWxsbyBXb3JsZFwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcblxuICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgZG9uZShlKVxuICAgICAgICB9KVxuXG5cbiAgICB9KVxuXG4gICAgaXQoJ3Nob3VsZCBjb25uZWN0JywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgZHMgPSBuZXcgV2ViQ29ubmVjdCh7XG4gICAgICAgICAgICB1cmw6IHRlc3RVcmwsXG4gICAgICAgICAgICByZWNvbm5lY3Q6IHtcbiAgICAgICAgICAgICAgICBlbmFibGVkOiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgZHMuY29ubmVjdCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICBkb25lKGUpXG4gICAgICAgIH0pXG5cblxuICAgIH0pXG5cbiAgICBpdCgnc2hvdWxkIHNlbmQgbWVzc2FnZScsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGRzID0gbmV3IFdlYkNvbm5lY3Qoe1xuICAgICAgICAgICAgdXJsOiB0ZXN0VXJsLFxuICAgICAgICAgICAgcmVjb25uZWN0OiB7XG4gICAgICAgICAgICAgICAgZW5hYmxlZDogZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGRzLmNvbm5lY3QoKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgZHMuYXR0YWNoT2JzZXJ2ZXIobmV3IE9ic2VydmVyKCgpPT4ge1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGV4cGVjdChkcy5kYXRhUmVjZWl2ZWQoKSkudG8uYmUudHJ1ZVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9IGRzLnBvbGwoKVxuICAgICAgICAgICAgICAgICAgICBleHBlY3QobXNnKS50by5iZS5pbnN0YW5jZU9mKE1lc3NhZ2UpXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBtc2cuZ2V0RGF0YSgpXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkYXRhKS50by5iZS5kZWVwLmVxdWFsKHttZXNzYWdlOiBcIkhlbGxvIFdvcmxkXCJ9KVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZShlKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KSlcblxuICAgICAgICAgICAgZHMuc2VuZCh7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IFwiSGVsbG8gV29ybGRcIlxuICAgICAgICAgICAgfSlcblxuICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgZG9uZShlKVxuICAgICAgICB9KVxuXG5cbiAgICB9KS50aW1lb3V0KDEwMDAwKTtcblxufSk7XG4iLCAiaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuXG5mdW5jdGlvbiBpbml0V2ViU29ja2V0KCkge1xuXG4vLyAgICBjb25zdCBpc0Jyb3dzZXIgPSB0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JyAmJiAnW29iamVjdCBXaW5kb3ddJyA9PT0gd2luZG93LnRvU3RyaW5nLmNhbGwod2luZG93KVxuICAgIGNvbnN0IGlzTm9kZSA9IHR5cGVvZiBnbG9iYWwgPT09ICdvYmplY3QnICYmICdbb2JqZWN0IGdsb2JhbF0nID09PSBnbG9iYWwudG9TdHJpbmcuY2FsbChnbG9iYWwpXG5cblxuICAgIGlmICghaXNOb2RlKSB7XG4gICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGltcG9ydChcIndzXCIpLnRoZW4oKHdzKSA9PiB7XG4gICAgICAgIGdldEdsb2JhbCgpLldlYlNvY2tldCA9IGNsYXNzIGV4dGVuZHMgd3NbJ1dlYlNvY2tldCddIHtcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKHVybCwgcHJvdG9jb2xzKSB7XG4gICAgICAgICAgICAgICAgc3VwZXIodXJsLCBwcm90b2NvbHMsIHtcbiAgICAgICAgICAgICAgICAgICAgaGFuZHNoYWtlVGltZW91dDogMTAwMCxcbiAgICAgICAgICAgICAgICAgICAgbWF4UGF5bG9hZDogMTAyNCAqIDEwMjQgKiAxMDI0LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBcbiAgICB9KTtcblxuXG59XG5cbmV4cG9ydCB7aW5pdFdlYlNvY2tldH0iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7TWVzc2FnZX0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS9uZXQvd2ViY29ubmVjdC9tZXNzYWdlLm1qc1wiO1xuXG5kZXNjcmliZSgnTWVzc2FnZScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGl0KCdjb25zdHJ1Y3Qgd2l0aG91dGggcGFyYW1ldGVycyBzaG91bGQgdGhyb3cnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG5ldyBNZXNzYWdlKCk7XG4gICAgICAgICAgICBkb25lKG5ldyBFcnJvcignc2hvdWxkIHRocm93JykpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH1cblxuICAgIH0pXG4gICAgXG4gICAgaXQoJ2Zyb20ganNvbiBzaG91bGQgJyAsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICAgICAgICBcImlkXCI6IFwiMTIzXCIsXG4gICAgICAgICAgICBcInR5cGVcIjogXCJ0ZXN0XCIsXG4gICAgICAgICAgICBcImRhdGFcIjoge1xuICAgICAgICAgICAgICAgIFwidGVzdFwiOiBcInRlc3RcIlxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBNZXNzYWdlLmZyb21KU09OKEpTT04uc3RyaW5naWZ5KGpzb24pKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IG1lc3NhZ2UuZ2V0RGF0YSgpO1xuICAgICAgICBleHBlY3QoZGF0YS5pZCkudG8uZXF1YWwoanNvbi5pZCk7XG4gICAgICAgIGV4cGVjdChkYXRhLnR5cGUpLnRvLmVxdWFsKGpzb24udHlwZSk7XG4gICAgICAgIGV4cGVjdChkYXRhLmRhdGEpLnRvLmRlZXAuZXF1YWwoanNvbi5kYXRhKTtcbiAgICAgICAgZG9uZSgpO1xuICAgIH0pXG4gICAgXG4gICAgaXQgKFwidG8ganNvbiBzaG91bGRcIiwgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgY29uc3Qgb2JqID0ge1xuICAgICAgICAgICAgXCJpZFwiOiBcIjEyM1wiLFxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwidGVzdFwiLFxuICAgICAgICAgICAgXCJkYXRhXCI6IHtcbiAgICAgICAgICAgICAgICBcInRlc3RcIjogXCJ0ZXN0XCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtZXNzYWdlID0gbmV3IE1lc3NhZ2Uob2JqKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpO1xuICAgICAgICBleHBlY3QoZGF0YSkudG8uZXF1YWwoJ3tcImlkXCI6XCIxMjNcIixcInR5cGVcIjpcInRlc3RcIixcImRhdGFcIjp7XCJ0ZXN0XCI6XCJ0ZXN0XCJ9fScpO1xuICAgICAgICBkb25lKCk7XG4gICAgfSlcblxuXG5cbn0pO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBWZXJzaW9uLCBnZXRNb25zdGVyVmVyc2lvbiB9O1xuXG4vKipcbiAqIFRoZSB2ZXJzaW9uIG9iamVjdCBjb250YWlucyBhIHNlbWFudGljIHZlcnNpb24gbnVtYmVyXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3R5cGVzL3ZlcnNpb24tMS5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAYXV0aG9yIHNjaHVrYWkgR21iSFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IFRoZSB2ZXJzaW9uIG9iamVjdCBjb250YWlucyBhIHNlbWFudGljIHZlcnNpb24gbnVtYmVyXG4gKi9cbmNsYXNzIFZlcnNpb24gZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSBtYWpvclxuXHQgKiBAcGFyYW0gbWlub3Jcblx0ICogQHBhcmFtIHBhdGNoXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBtYWpvciBpcyBub3QgYSBudW1iZXJcblx0ICogQHRocm93cyB7RXJyb3J9IG1pbm9yIGlzIG5vdCBhIG51bWJlclxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gcGF0Y2ggaXMgbm90IGEgbnVtYmVyXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihtYWpvciwgbWlub3IsIHBhdGNoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmIChcblx0XHRcdHR5cGVvZiBtYWpvciA9PT0gXCJzdHJpbmdcIiAmJlxuXHRcdFx0bWlub3IgPT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0cGF0Y2ggPT09IHVuZGVmaW5lZFxuXHRcdCkge1xuXHRcdFx0Y29uc3QgcGFydHMgPSBtYWpvci50b1N0cmluZygpLnNwbGl0KFwiLlwiKTtcblx0XHRcdG1ham9yID0gcGFyc2VJbnQocGFydHNbMF0gfHwgMCk7XG5cdFx0XHRtaW5vciA9IHBhcnNlSW50KHBhcnRzWzFdIHx8IDApO1xuXHRcdFx0cGF0Y2ggPSBwYXJzZUludChwYXJ0c1syXSB8fCAwKTtcblx0XHR9XG5cblx0XHRpZiAobWFqb3IgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibWFqb3IgdmVyc2lvbiBpcyB1bmRlZmluZWRcIik7XG5cdFx0fVxuXG5cdFx0aWYgKG1pbm9yID09PSB1bmRlZmluZWQpIHtcblx0XHRcdG1pbm9yID0gMDtcblx0XHR9XG5cblx0XHRpZiAocGF0Y2ggPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGF0Y2ggPSAwO1xuXHRcdH1cblxuXHRcdHRoaXMubWFqb3IgPSBwYXJzZUludChtYWpvcik7XG5cdFx0dGhpcy5taW5vciA9IHBhcnNlSW50KG1pbm9yKTtcblx0XHR0aGlzLnBhdGNoID0gcGFyc2VJbnQocGF0Y2gpO1xuXG5cdFx0aWYgKGlzTmFOKHRoaXMubWFqb3IpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtYWpvciBpcyBub3QgYSBudW1iZXJcIik7XG5cdFx0fVxuXG5cdFx0aWYgKGlzTmFOKHRoaXMubWlub3IpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtaW5vciBpcyBub3QgYSBudW1iZXJcIik7XG5cdFx0fVxuXG5cdFx0aWYgKGlzTmFOKHRoaXMucGF0Y2gpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJwYXRjaCBpcyBub3QgYSBudW1iZXJcIik7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci90eXBlcy92ZXJzaW9uXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHRvU3RyaW5nKCkge1xuXHRcdHJldHVybiBgJHt0aGlzLm1ham9yfS4ke3RoaXMubWlub3J9LiR7dGhpcy5wYXRjaH1gO1xuXHR9XG5cblx0LyoqXG5cdCAqIHJldHVybnMgMCBpZiBlcXVhbCwgLTEgaWYgdGhlIG9iamVjdCB2ZXJzaW9uIGlzIGxlc3MgYW5kIDEgaWYgZ3JlYXRlclxuXHQgKiB0aGFuIHRoZSBjb21wYXJlZCB2ZXJzaW9uXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfFZlcnNpb259IHZlcnNpb24gVmVyc2lvbiB0byBjb21wYXJlXG5cdCAqIEByZXR1cm4ge251bWJlcn1cblx0ICovXG5cdGNvbXBhcmVUbyh2ZXJzaW9uKSB7XG5cdFx0aWYgKHZlcnNpb24gaW5zdGFuY2VvZiBWZXJzaW9uKSB7XG5cdFx0XHR2ZXJzaW9uID0gdmVyc2lvbi50b1N0cmluZygpO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgdmVyc2lvbiAhPT0gXCJzdHJpbmdcIikge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidHlwZSBleGNlcHRpb25cIik7XG5cdFx0fVxuXG5cdFx0aWYgKHZlcnNpb24gPT09IHRoaXMudG9TdHJpbmcoKSkge1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0Y29uc3QgYSA9IFt0aGlzLm1ham9yLCB0aGlzLm1pbm9yLCB0aGlzLnBhdGNoXTtcblx0XHRjb25zdCBiID0gdmVyc2lvbi5zcGxpdChcIi5cIik7XG5cdFx0Y29uc3QgbGVuID0gTWF0aC5tYXgoYS5sZW5ndGgsIGIubGVuZ3RoKTtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpICs9IDEpIHtcblx0XHRcdGlmIChcblx0XHRcdFx0KGFbaV0gJiYgIWJbaV0gJiYgcGFyc2VJbnQoYVtpXSkgPiAwKSB8fFxuXHRcdFx0XHRwYXJzZUludChhW2ldKSA+IHBhcnNlSW50KGJbaV0pXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHQoYltpXSAmJiAhYVtpXSAmJiBwYXJzZUludChiW2ldKSA+IDApIHx8XG5cdFx0XHRcdHBhcnNlSW50KGFbaV0pIDwgcGFyc2VJbnQoYltpXSlcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIDA7XG5cdH1cbn1cblxubGV0IG1vbnN0ZXJWZXJzaW9uO1xuXG4vKipcbiAqIFZlcnNpb24gb2YgbW9uc3RlclxuICpcbiAqIEByZXR1cm4ge1ZlcnNpb259XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBhdXRob3Igc2NodWthaSBHbWJIXG4gKi9cbmZ1bmN0aW9uIGdldE1vbnN0ZXJWZXJzaW9uKCkge1xuXHRpZiAobW9uc3RlclZlcnNpb24gaW5zdGFuY2VvZiBWZXJzaW9uKSB7XG5cdFx0cmV0dXJuIG1vbnN0ZXJWZXJzaW9uO1xuXHR9XG5cblx0LyoqIGRvbid0IHRvdWNoLCByZXBsYWNlZCBieSBtYWtlIHdpdGggcGFja2FnZS5qc29uIHZlcnNpb24gKi9cblx0bW9uc3RlclZlcnNpb24gPSBuZXcgVmVyc2lvbihcIjMuOTAuMFwiKTtcblxuXHRyZXR1cm4gbW9uc3RlclZlcnNpb247XG59XG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7VmVyc2lvbiwgZ2V0TW9uc3RlclZlcnNpb259IGZyb20gXCIuLi8uLi9zb3VyY2UvdHlwZXMvdmVyc2lvbi5tanNcIjtcblxuZGVzY3JpYmUoJ01vbnN0ZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnLmdldE1vbnN0ZXJWZXJzaW9uKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBtb25zdGVyVmVyc2lvblxuXG4gICAgICAgIC8qKiBkb25cdTAwQjR0IHRvdWNoLCByZXBsYWNlZCBieSBtYWtlIHdpdGggcGFja2FnZS5qc29uIHZlcnNpb24gKi9cbiAgICAgICAgbW9uc3RlclZlcnNpb24gPSBuZXcgVmVyc2lvbihcIjMuOTAuMFwiKVxuXG4gICAgICAgIGxldCBtID0gZ2V0TW9uc3RlclZlcnNpb24oKTtcblxuICAgICAgICBpdCgnc2hvdWxkICcgKyBtb25zdGVyVmVyc2lvbiArICcgaXMgJyArIG0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChtLmNvbXBhcmVUbyhtb25zdGVyVmVyc2lvbikpLmlzLmVxdWFsKDApO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG59KTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBnZXRXaW5kb3cgfSBmcm9tIFwiLi91dGlsLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IGNvbnZlcnRUb1BpeGVscywgZ2V0RGV2aWNlRFBJIH07XG5cbi8qKlxuICogU3RvcmVzIHRoZSBEUEkgb2YgdGhlIGRldmljZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7bnVtYmVyfVxuICogQHNpbmNlIDMuMzQuMFxuICogQHR5cGUge251bWJlcnxmdW5jdGlvbn1cbiAqL1xubGV0IENVUlJFTlRfREVWSUNFX0RQSSA9IGZ1bmN0aW9uICgpIHtcblx0bGV0IGkgPSAwO1xuXHRmb3IgKGkgPSA1NjsgaSA8IDIwMDA7IGkrKykge1xuXHRcdGlmIChnZXRXaW5kb3coKS5tYXRjaE1lZGlhKGAobWF4LXJlc29sdXRpb246ICR7aX1kcGkpYCkubWF0Y2hlcyA9PT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuIGk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBEUEkgb2YgdGhlIGRldmljZS5cbiAqXG4gKiBAc2luY2UgMy4zNC4wXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIGdldERldmljZURQSSgpIHtcblx0Ly8gb25seSBjYWxsIHRoZSBmdW5jdGlvbiBvbmNlXG5cdGlmICh0eXBlb2YgQ1VSUkVOVF9ERVZJQ0VfRFBJID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRDVVJSRU5UX0RFVklDRV9EUEkgPSBDVVJSRU5UX0RFVklDRV9EUEkoKTtcblx0fVxuXG5cdHJldHVybiBnZXRXaW5kb3coKS5kZXZpY2VQaXhlbFJhdGlvICogQ1VSUkVOVF9ERVZJQ0VfRFBJO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgQ1NTIHZhbHVlIHRvIHBpeGVscy5cbiAqXG4gKiBBcyBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiBjb252ZXJ0VG9QaXhlbHMoJzFlbScpIC8vIHJldHVybnMgdGhlIGN1cnJlbnQgZm9udCBzaXplIGluIHBpeGVsc1xuICogY29udmVydFRvUGl4ZWxzKCcxcmVtJykgLy8gcmV0dXJucyB0aGUgY3VycmVudCByb290IGZvbnQgc2l6ZSBpbiBwaXhlbHNcbiAqIGNvbnZlcnRUb1BpeGVscygnMXB4JykgLy8gcmV0dXJucyAxXG4gKiBjb252ZXJ0VG9QaXhlbHMoJzEwMCUnKSAvLyByZXR1cm5zIHRoZSBjdXJyZW50IHdpZHRoIG9mIHRoZSBwYXJlbnQgZWxlbWVudCBpbiBwaXhlbHNcbiAqIGBgYFxuICpcbiAqIEZvbGxvd2luZyB1bml0cyBhcmUgc3VwcG9ydGVkOlxuICogLSBweFxuICogLSBlbVxuICogLSByZW1cbiAqIC0gJVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gW3BhcmVudEVsZW1lbnQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gW2ZvbnRTaXplRWxlbWVudD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAzLjM0LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtFcnJvcn0gVW5zdXBwb3J0ZWQgdW5pdFxuICogQHRocm93cyB7RXJyb3J9IEludmFsaWQgdmFsdWUgZm9ybWF0XG4gKi9cblxuZnVuY3Rpb24gY29udmVydFRvUGl4ZWxzKFxuXHR2YWx1ZSxcblx0cGFyZW50RWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcblx0Zm9udFNpemVFbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LFxuKSB7XG5cdHZhbGlkYXRlU3RyaW5nKHZhbHVlKTtcblxuXHRjb25zdCByZWdleCA9IC9eKC0/W1xcZC5dKykoLiopJC87XG5cdGNvbnN0IG1hdGNoUmVzdWx0ID0gdmFsdWUubWF0Y2gocmVnZXgpO1xuXG5cdGlmICghbWF0Y2hSZXN1bHQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdmFsdWUgZm9ybWF0OiAke3ZhbHVlfWApO1xuXHR9XG5cblx0Y29uc3QgWywgbnVtLCB1bml0XSA9IG1hdGNoUmVzdWx0O1xuXHRjb25zdCBudW1iZXIgPSBwYXJzZUZsb2F0KG51bSk7XG5cdGNvbnN0IGRwaSA9IGdldERldmljZURQSSgpO1xuXG5cdGlmICh1bml0ID09PSBcInB4XCIpIHtcblx0XHRyZXR1cm4gbnVtYmVyO1xuXHR9IGVsc2UgaWYgKHVuaXQgPT09IFwiZW1cIikge1xuXHRcdGNvbnN0IGZvbnRTaXplID0gcGFyc2VGbG9hdChcblx0XHRcdHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGZvbnRTaXplRWxlbWVudCkuZm9udFNpemUsXG5cdFx0KTtcblx0XHRyZXR1cm4gbnVtYmVyICogZm9udFNpemU7XG5cdH0gZWxzZSBpZiAodW5pdCA9PT0gXCJyZW1cIikge1xuXHRcdGNvbnN0IHJvb3RGb250U2l6ZSA9IHBhcnNlRmxvYXQoXG5cdFx0XHR3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShwYXJlbnRFbGVtZW50KS5mb250U2l6ZSxcblx0XHQpO1xuXHRcdHJldHVybiBudW1iZXIgKiByb290Rm9udFNpemU7XG5cdH0gZWxzZSBpZiAodW5pdCA9PT0gXCIlXCIpIHtcblx0XHRjb25zdCBwYXJlbnRXaWR0aCA9IHBhcnNlRmxvYXQoXG5cdFx0XHR3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShwYXJlbnRFbGVtZW50KS53aWR0aCxcblx0XHQpO1xuXHRcdHJldHVybiAobnVtYmVyICogcGFyZW50V2lkdGgpIC8gMTAwO1xuXHR9IGVsc2UgaWYgKHVuaXQgPT09IFwiaW5cIikge1xuXHRcdHJldHVybiBudW1iZXIgKiBkcGk7XG5cdH0gZWxzZSBpZiAodW5pdCA9PT0gXCJjbVwiKSB7XG5cdFx0cmV0dXJuIChudW1iZXIgKiBkcGkpIC8gMi41NDtcblx0fSBlbHNlIGlmICh1bml0ID09PSBcIm1tXCIpIHtcblx0XHRyZXR1cm4gKG51bWJlciAqIGRwaSkgLyAyNS40O1xuXHR9IGVsc2UgaWYgKHVuaXQgPT09IFwicHRcIikge1xuXHRcdHJldHVybiAobnVtYmVyICogZHBpKSAvIDcyO1xuXHR9IGVsc2UgaWYgKHVuaXQgPT09IFwicGNcIikge1xuXHRcdHJldHVybiAobnVtYmVyICogZHBpKSAvIDY7XG5cdH0gZWxzZSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCB1bml0OiAke3VuaXR9YCk7XG5cdH1cbn1cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSAnY2hhaSc7XG5pbXBvcnQge2NvbnZlcnRUb1BpeGVscywgZ2V0RGV2aWNlRFBJfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS9kaW1lbnNpb24ubWpzXCI7XG5pbXBvcnQge2dldFdpbmRvd30gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vdXRpbC5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NLCBpc0Jyb3dzZXIsIEpTRE9NRXhwb3J0IGFzIEpTRE9NfSBmcm9tIFwiLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcbmltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7ZGV0ZWN0UnVudGltZUVudmlyb25tZW50fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3V0aWwvcnVudGltZS5tanNcIjtcblxuXG5mdW5jdGlvbiBnZXRNb2NrV2luZG93KGRwaSkge1xuXG4gICAgaWYoZGV0ZWN0UnVudGltZUVudmlyb25tZW50KCkgPT09ICdicm93c2VyJykge1xuICAgICAgICByZXR1cm4gZ2V0V2luZG93KCk7XG4gICAgfVxuICAgIFxuICAgIFxuICAgIGNvbnN0IGRvbSA9IG5ldyBKU0RPTSgnJywge1xuICAgICAgICBwcmV0ZW5kVG9CZVZpc3VhbDogdHJ1ZSxcbiAgICAgICAgcmVzb3VyY2VzOiAndXNhYmxlJyxcbiAgICB9KTtcblxuICAgIGRvbS53aW5kb3cubWF0Y2hNZWRpYSA9IChxdWVyeSkgPT4ge1xuICAgICAgICBjb25zdCBkcGlSZWdleCA9IC9cXChtYXgtcmVzb2x1dGlvbjogKFxcZCspZHBpXFwpLztcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBxdWVyeS5tYXRjaChkcGlSZWdleCk7XG5cbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICBjb25zdCBtYXhEcGkgPSBwYXJzZUludChtYXRjaFsxXSwgMTApO1xuICAgICAgICAgICAgcmV0dXJuIHttYXRjaGVzOiBkcGkgPD0gbWF4RHBpfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7bWF0Y2hlczogZmFsc2V9O1xuICAgIH07XG5cbiAgICByZXR1cm4gZG9tLndpbmRvdztcbn1cblxuZGVzY3JpYmUoJ2RpbWVuc2lvbicsICgpID0+IHtcbiAgICBsZXQgY3VycmVudEVudmlyb25tZW50O1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgLy9jaGFpRG9tKGdldERvY3VtZW50KCkpO1xuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgY29uc3QgdGVzdERwaSA9IDk2O1xuICAgICAgICBjb25zdCB0ZXN0V2luZG93ID0gZ2V0TW9ja1dpbmRvdyh0ZXN0RHBpKTtcbiAgICAgICAgZ2V0R2xvYmFsKCkud2luZG93ID0gdGVzdFdpbmRvdztcblxuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgZGVsZXRlIGdldEdsb2JhbCgpLndpbmRvdztcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdjb252ZXJ0VG9QaXhlbHMnLCAoKSA9PiB7XG4gICAgICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGNvbnZlcnQgcHggdmFsdWVzJywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udmVydFRvUGl4ZWxzKCcxMDBweCcpO1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZXF1YWwoMTAwKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoXCJzaG91bGQgdGhyb3cgYW4gZXJyb3Igd2hlbiB0aGUgaW5wdXQgdmFsdWUgaGFzIGFuIGludmFsaWQgZm9ybWF0XCIsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGludmFsaWRWYWx1ZSA9IFwiaW52YWxpZF92YWx1ZVwiO1xuXG4gICAgICAgICAgICBjb25zdCBlcnJvckZuID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnZlcnRUb1BpeGVscyhpbnZhbGlkVmFsdWUpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgZXhwZWN0KGVycm9yRm4pLnRvLnRocm93KEVycm9yLCBgSW52YWxpZCB2YWx1ZSBmb3JtYXQ6ICR7aW52YWxpZFZhbHVlfWApO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdChcInNob3VsZCBoYW5kbGUgbmVnYXRpdmUgdmFsdWVzIGNvcnJlY3RseVwiLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZWdhdGl2ZVZhbHVlID0gXCItMTBweFwiO1xuICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWRSZXN1bHQgPSAtMTA7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRUb1BpeGVscyhuZWdhdGl2ZVZhbHVlKTtcblxuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBjb252ZXJ0IGVtIHZhbHVlcycsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRlc3RFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0ZXN0RWxlbWVudC5zdHlsZS5mb250U2l6ZSA9ICcxNnB4JztcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGVzdEVsZW1lbnQpO1xuXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjb252ZXJ0VG9QaXhlbHMoJzJlbScsIHRlc3RFbGVtZW50LCB0ZXN0RWxlbWVudCk7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50by5lcXVhbCgzMik7XG5cbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGVzdEVsZW1lbnQpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBjb252ZXJ0IHJlbSB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0ZXN0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGVzdEVsZW1lbnQuc3R5bGUuZm9udFNpemUgPSAnMTZweCc7XG4gICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQodGVzdEVsZW1lbnQpO1xuXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjb252ZXJ0VG9QaXhlbHMoJzJyZW0nLCB0ZXN0RWxlbWVudCk7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50by5lcXVhbCgzMik7XG5cbiAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0ZXN0RWxlbWVudCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGNvbnZlcnQgcGVyY2VudGFnZSB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0ZXN0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGVzdEVsZW1lbnQuc3R5bGUud2lkdGggPSAnNTAwcHgnO1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0ZXN0RWxlbWVudCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRUb1BpeGVscygnNTAlJywgdGVzdEVsZW1lbnQpO1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZXF1YWwoMjUwKTtcblxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0ZXN0RWxlbWVudCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3IgZm9yIHVuc3VwcG9ydGVkIHVuaXRzJywgKCkgPT4ge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IGNvbnZlcnRUb1BpeGVscygnMTB1bnN1cHBvcnRlZFVuaXQnKSkudG8udGhyb3coJ1Vuc3VwcG9ydGVkIHVuaXQ6IHVuc3VwcG9ydGVkVW5pdCcpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJ2dldERldmljZURQSScsICgpID0+IHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIGNvcnJlY3QgZGV2aWNlIERQSScsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRlc3REcGkgPSA5NjtcbiAgICAgICAgICAgIGNvbnN0IHRlc3RXaW5kb3cgPSBnZXRNb2NrV2luZG93KHRlc3REcGkpO1xuICAgICAgICAgICAgZ2V0R2xvYmFsKCkud2luZG93ID0gdGVzdFdpbmRvdztcblxuICAgICAgICAgICAgY29uc3QgZGV2aWNlRHBpID0gZ2V0RGV2aWNlRFBJKCk7XG4gICAgICAgICAgICBleHBlY3QoZGV2aWNlRHBpKS50by5lcXVhbCh0ZXN0RHBpICogdGVzdFdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKTtcblxuICAgICAgICAgICAgZGVsZXRlIGdldEdsb2JhbCgpLndpbmRvdztcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBjYWNoZSB0aGUgcmVzdWx0IGFuZCByZXR1cm4gdGhlIHNhbWUgdmFsdWUnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0ZXN0RHBpID0gOTY7XG4gICAgICAgICAgICBjb25zdCB0ZXN0V2luZG93ID0gZ2V0TW9ja1dpbmRvdyh0ZXN0RHBpKTtcbiAgICAgICAgICAgIGdldEdsb2JhbCgpLndpbmRvdyA9IHRlc3RXaW5kb3c7XG5cbiAgICAgICAgICAgIGNvbnN0IGRldmljZURwaTEgPSBnZXREZXZpY2VEUEkoKTtcbiAgICAgICAgICAgIGNvbnN0IGRldmljZURwaTIgPSBnZXREZXZpY2VEUEkoKTtcbiAgICAgICAgICAgIGV4cGVjdChkZXZpY2VEcGkxKS50by5lcXVhbChkZXZpY2VEcGkyKTtcblxuICAgICAgICAgICAgZGVsZXRlIGdldEdsb2JhbCgpLndpbmRvdztcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbn0pOyIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5jb25zdCBFTlZfQVdTX0xBTUJEQSA9IFwiYXdzLWxhbWJkYVwiO1xuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBFTlZfR09PR0xFX0ZVTkNUSU9OUyA9IFwiZ29vZ2xlLWZ1bmN0aW9uc1wiO1xuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBFTlZfRUxFQ1RST04gPSBcImVsZWN0cm9uXCI7XG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEVOVl9OT0RFID0gXCJub2RlXCI7XG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEVOVl9CUk9XU0VSID0gXCJicm93c2VyXCI7XG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEVOVl9XRUJfV09SS0VSID0gXCJ3ZWItd29ya2VyXCI7XG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEVOVl9ERU5PID0gXCJkZW5vXCI7XG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEVOVl9VTktOT1dOID0gXCJ1bmtub3duXCI7XG5cbi8qKlxuICogRGV0ZWN0cyBhbmQgcmV0dXJucyB0aGUgY3VycmVudCBydW50aW1lIGVudmlyb25tZW50LlxuICpcbiAqIC0gJ2F3cy1sYW1iZGEnOiBBV1MgTGFtYmRhIGVudmlyb25tZW50XG4gKiAtICdnb29nbGUtZnVuY3Rpb25zJzogR29vZ2xlIENsb3VkIEZ1bmN0aW9ucyBlbnZpcm9ubWVudFxuICogLSAnZWxlY3Ryb24nOiBFbGVjdHJvbiBlbnZpcm9ubWVudFxuICogLSAnbm9kZSc6IE5vZGUuanMgZW52aXJvbm1lbnRcbiAqIC0gJ2Jyb3dzZXInOiBCcm93c2VyIGVudmlyb25tZW50XG4gKiAtICd3ZWItd29ya2VyJzogV2ViIFdvcmtlciBlbnZpcm9ubWVudFxuICogLSAnZGVubyc6IERlbm8gZW52aXJvbm1lbnRcbiAqIC0gJ3JlYWN0LW5hdGl2ZSc6IFJlYWN0IE5hdGl2ZSBlbnZpcm9ubWVudFxuICogLSAndW5rbm93bic6IFVua25vd24gZW52aXJvbm1lbnRcbiAqXG4gKiBAc2luY2UgMy4zNC4wXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBkZXRlY3RlZCBydW50aW1lIGVudmlyb25tZW50LiBQb3NzaWJsZSB2YWx1ZXMgYXJlOlxuICovXG5mdW5jdGlvbiBkZXRlY3RSdW50aW1lRW52aXJvbm1lbnQoKSB7XG5cdC8vIEFXUyBMYW1iZGEgZW52aXJvbm1lbnRcblx0aWYgKFxuXHRcdHR5cGVvZiBwcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdFx0cHJvY2Vzcy5lbnYgIT0gbnVsbCAmJlxuXHRcdHByb2Nlc3MuZW52LkFXU19MQU1CREFfRlVOQ1RJT05fTkFNRVxuXHQpIHtcblx0XHRyZXR1cm4gRU5WX0FXU19MQU1CREE7XG5cdH1cblxuXHQvLyBHb29nbGUgQ2xvdWQgRnVuY3Rpb25zIGVudmlyb25tZW50XG5cdGlmIChcblx0XHR0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHRcdHByb2Nlc3MuZW52ICE9IG51bGwgJiZcblx0XHRwcm9jZXNzLmVudi5GVU5DVElPTl9OQU1FXG5cdCkge1xuXHRcdHJldHVybiBFTlZfR09PR0xFX0ZVTkNUSU9OUztcblx0fVxuXG5cdC8vIE5vZGUuanMgZW52aXJvbm1lbnRcblx0aWYgKFxuXHRcdHR5cGVvZiBwcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdFx0cHJvY2Vzcy52ZXJzaW9ucyAhPSBudWxsICYmXG5cdFx0cHJvY2Vzcy52ZXJzaW9ucy5ub2RlICE9IG51bGxcblx0KSB7XG5cdFx0Ly8gRWxlY3Ryb24gZW52aXJvbm1lbnRcblx0XHRpZiAocHJvY2Vzcy52ZXJzaW9ucy5lbGVjdHJvbiAhPSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gRU5WX0VMRUNUUk9OO1xuXHRcdH1cblx0XHRyZXR1cm4gRU5WX05PREU7XG5cdH1cblxuXHQvLyBCcm93c2VyIGVudmlyb25tZW50XG5cdGlmIChcblx0XHR0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdFx0dHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHRcdHR5cGVvZiBuYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHR0eXBlb2YgbmF2aWdhdG9yLnVzZXJBZ2VudCA9PT0gXCJzdHJpbmdcIlxuXHQpIHtcblx0XHQvLyBXZWIgV29ya2VyIGVudmlyb25tZW50XG5cdFx0aWYgKHR5cGVvZiBzZWxmID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBpbXBvcnRTY3JpcHRzID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdHJldHVybiBFTlZfV0VCX1dPUktFUjtcblx0XHR9XG5cdFx0cmV0dXJuIEVOVl9CUk9XU0VSO1xuXHR9XG5cblx0Ly8gRGVubyBlbnZpcm9ubWVudFxuXHRpZiAodHlwZW9mIERlbm8gIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRyZXR1cm4gRU5WX0RFTk87XG5cdH1cblxuXHQvLyBVbmtub3duIGVudmlyb25tZW50XG5cdHJldHVybiBFTlZfVU5LTk9XTjtcbn1cblxuZXhwb3J0IHtcblx0RU5WX0FXU19MQU1CREEsXG5cdEVOVl9HT09HTEVfRlVOQ1RJT05TLFxuXHRFTlZfRUxFQ1RST04sXG5cdEVOVl9OT0RFLFxuXHRFTlZfQlJPV1NFUixcblx0RU5WX1dFQl9XT1JLRVIsXG5cdEVOVl9ERU5PLFxuXHRFTlZfVU5LTk9XTixcblx0ZGV0ZWN0UnVudGltZUVudmlyb25tZW50LFxufTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCAqIGFzIGNoYWkgZnJvbSAnY2hhaSc7XG5pbXBvcnQge1N0eWxlc2hlZXR9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9zb3VyY2UvZG9tL3Jlc291cmNlL2xpbmsvc3R5bGVzaGVldC5tanNcIjtcbmltcG9ydCB7RGF0YVVybH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9kYXRhdXJsLm1qc1wiO1xuaW1wb3J0IHtJRH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9pZC5tanNcIjtcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2NsZWFudXBET01Gcm9tVGVzdGluZywgaW5pdE11dGF0aW9uT2JzZXJ2ZXJGb3JUZXN0aW5nfSBmcm9tIFwiLi4vLi4vLi4vLi4vdXRpbC9jbGVhbnVwZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5cbmNoYWkudXNlKGNoYWlEb20pO1xuXG5sZXQgaHRtbDEgPSBgXG5cbmA7XG5cblxuZGVzY3JpYmUoJ1N0eWxlc2hlZXQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKHtcbiAgICAgICAgICAgIHJ1blNjcmlwdHM6IFwiZGFuZ2Vyb3VzbHlcIixcbiAgICAgICAgICAgIHJlc291cmNlczogXCJ1c2FibGVcIlxuICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuICAgIH0pO1xuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIGluaXRNdXRhdGlvbk9ic2VydmVyRm9yVGVzdGluZygpXG4gICAgfSlcblxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgIGNsZWFudXBET01Gcm9tVGVzdGluZygpO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnU3R5bGVzaGVldCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnY29ubmVjdCgpLmF2YWlsYWJsZSgpJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgY29uc3Qgc3R5bGVzaGVldCA9IG5ldyBTdHlsZXNoZWV0KHtcbiAgICAgICAgICAgICAgICBocmVmOiBuZXcgRGF0YVVybCgnJywgJ3RleHQvY3NzJykudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBzdHlsZXNoZWV0LmNvbm5lY3QoKS5hdmFpbGFibGUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpZCA9IHN0eWxlc2hlZXQuZ2V0T3B0aW9uKCdpZCcpXG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuXG4gICAgICAgIH0pXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnRXh0ZXJuYWwgU3R5bGVzaGVldCcsICgpID0+IHtcblxuICAgICAgICBsZXQgaWQgPSBuZXcgSUQoJ1N0eWxlc2hlZXQnKS50b1N0cmluZygpO1xuICAgICAgICBsZXQgc3R5bGVzaGVldCwgdXJsID0gJ2h0dHBzOi8vYWx2aW5lLmlvL21haW4ubWluLmNzcyc7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgICAgIHN0eWxlc2hlZXQgPSBuZXcgU3R5bGVzaGVldCh7XG4gICAgICAgICAgICAgICAgaHJlZjogdXJsLFxuICAgICAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdhcHBlbmQgYW5kIHJlbW92ZSBTdHlsZXNoZWV0ICcsIChkb25lKSA9PiB7XG5cbiAgICAgICAgICAgIGV4cGVjdChzdHlsZXNoZWV0LmlzQ29ubmVjdGVkKCkpLnRvLmJlLmZhbHNlO1xuXG4gICAgICAgICAgICBzdHlsZXNoZWV0LmNvbm5lY3QoKS5hdmFpbGFibGUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBleHBlY3Qoc3R5bGVzaGVldC5pc0Nvbm5lY3RlZCgpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbaHJlZj1cIicgKyB1cmwgKyAnXCJdJykpLnRvLmV4aXN0O1xuXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChzdHlsZXNoZWV0LmlzQ29ubmVjdGVkKCkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbaHJlZj1cIicgKyB1cmwgKyAnXCJdJykpLm5vdC50by5leGlzdDtcblxuICAgICAgICAgICAgICAgIHN0eWxlc2hlZXQuY29ubmVjdCgpLmF2YWlsYWJsZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3Qoc3R5bGVzaGVldC5pc0Nvbm5lY3RlZCgpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2hyZWY9XCInICsgdXJsICsgJ1wiXScpKS50by5leGlzdDtcblxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbaHJlZj1cIicgKyB1cmwgKyAnXCJdJykpLm5vdC50by5leGlzdDtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHN0eWxlc2hlZXQuaXNDb25uZWN0ZWQoKSkudG8uYmUuZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuXG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG5cbn0pOyIsICIndXNlIHN0cmljdCc7XG5cblxubGV0IGFkZGVkTm9kZXMsIG11dGF0aW9ub2JzZXJ2ZXI7XG5cbmZ1bmN0aW9uIGluaXQoKSB7XG5cbiAgICBhZGRlZE5vZGVzID0gW107XG4gICAgbXV0YXRpb25vYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uIChtdXRhdGlvbnMpIHtcbiAgICAgICAgbXV0YXRpb25zLmZvckVhY2goZnVuY3Rpb24gKG11dGF0aW9uKSB7XG4gICAgICAgICAgICBpZiAobXV0YXRpb24udHlwZSA9PT0gJ2NoaWxkTGlzdCcgJiYgbXV0YXRpb24ucmVtb3ZlZE5vZGVzKSB7XG5cbiAgICAgICAgICAgICAgICBtdXRhdGlvbi5hZGRlZE5vZGVzLmZvckVhY2goKG4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG4gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWRkZWROb2Rlcy5wdXNoKG4pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluaXRNdXRhdGlvbk9ic2VydmVyRm9yVGVzdGluZygpIHtcblxuICAgIGlmIChtdXRhdGlvbm9ic2VydmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaW5pdCgpXG4gICAgfVxuXG4gICAgbXV0YXRpb25vYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2hlYWQnKSwge2NoaWxkTGlzdDogdHJ1ZX0pO1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhbnVwRE9NRnJvbVRlc3RpbmcoKSB7XG4gICAgbXV0YXRpb25vYnNlcnZlci5kaXNjb25uZWN0KCk7XG5cbiAgICBmb3IgKGNvbnN0IG4gb2YgYWRkZWROb2Rlcykge1xuICAgICAgICBuLnJlbW92ZSgpO1xuICAgIH1cbn0iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgKiBhcyBjaGFpIGZyb20gJ2NoYWknO1xuaW1wb3J0IHtMaW5rfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL2RvbS9yZXNvdXJjZS9saW5rLm1qc1wiO1xuaW1wb3J0IHtEYXRhVXJsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2RhdGF1cmwubWpzXCI7XG5pbXBvcnQge0lEfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2lkLm1qc1wiO1xuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7Y2xlYW51cERPTUZyb21UZXN0aW5nLCBpbml0TXV0YXRpb25PYnNlcnZlckZvclRlc3Rpbmd9IGZyb20gXCIuLi8uLi8uLi91dGlsL2NsZWFudXBkb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcblxuY2hhaS51c2UoY2hhaURvbSk7XG5cblxuXG5kZXNjcmliZSgnTGluaycsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBpbml0TXV0YXRpb25PYnNlcnZlckZvclRlc3RpbmcoKVxuICAgIH0pXG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBjbGVhbnVwRE9NRnJvbVRlc3RpbmcoKTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ0xpbmsoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy50aW1lb3V0KDUwMDApO1xuXG4gICAgICAgIGl0KCdjb25uZWN0KCkuYXZhaWxhYmxlKCknLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBjb25zdCBsaW5rID0gbmV3IExpbmsoe1xuICAgICAgICAgICAgICAgIGhyZWY6IG5ldyBEYXRhVXJsKCcnLCAndGV4dC9jc3MnKS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgIHJlbDogJ3N0eWxlc2hlZXQnXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgbGluay5jb25uZWN0KCkuYXZhaWxhYmxlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuXG4gICAgICAgIH0pXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnRXh0ZXJuYWwgTGluaycsICgpID0+IHtcbiAgICAgICAgdGhpcy50aW1lb3V0KDUwMDApO1xuXG4gICAgICAgIGxldCBpZCA9IG5ldyBJRCgnbGluaycpLnRvU3RyaW5nKCk7XG4gICAgICAgIGxldCBsaW5rLCB1cmwgPSAnaHR0cHM6Ly9hbHZpbmUuaW8vbWFpbi5taW4uY3NzJztcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcblxuICAgICAgICAgICAgbGluayA9IG5ldyBMaW5rKHtcbiAgICAgICAgICAgICAgICBocmVmOiB1cmwsXG4gICAgICAgICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgICAgICAgIHJlbDogJ3N0eWxlc2hlZXQnXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnYXBwZW5kIGFuZCByZW1vdmUgTGluayAnLCAoZG9uZSkgPT4ge1xuXG4gICAgICAgICAgICBleHBlY3QobGluay5pc0Nvbm5lY3RlZCgpKS50by5iZS5mYWxzZTtcblxuICAgICAgICAgICAgbGluay5jb25uZWN0KCkuYXZhaWxhYmxlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGxpbmsuaXNDb25uZWN0ZWQoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2hyZWY9XCInICsgdXJsICsgJ1wiXScpKS50by5leGlzdDtcblxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICBleHBlY3QobGluay5pc0Nvbm5lY3RlZCgpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2hyZWY9XCInICsgdXJsICsgJ1wiXScpKS5ub3QudG8uZXhpc3Q7XG5cbiAgICAgICAgICAgICAgICBsaW5rLmNvbm5lY3QoKS5hdmFpbGFibGUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGxpbmsuaXNDb25uZWN0ZWQoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tocmVmPVwiJyArIHVybCArICdcIl0nKSkudG8uZXhpc3Q7XG5cbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2hyZWY9XCInICsgdXJsICsgJ1wiXScpKS5ub3QudG8uZXhpc3Q7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChsaW5rLmlzQ29ubmVjdGVkKCkpLnRvLmJlLmZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG5cblxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuXG59KTsiLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgKiBhcyBjaGFpIGZyb20gJ2NoYWknO1xuaW1wb3J0IHtTY3JpcHR9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvZG9tL3Jlc291cmNlL3NjcmlwdC5tanNcIjtcbmltcG9ydCB7RGF0YVVybH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9kYXRhdXJsLm1qc1wiO1xuaW1wb3J0IHtJRH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9pZC5tanNcIjtcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2NsZWFudXBET01Gcm9tVGVzdGluZywgaW5pdE11dGF0aW9uT2JzZXJ2ZXJGb3JUZXN0aW5nfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jbGVhbnVwZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5cbmNoYWkudXNlKGNoYWlEb20pO1xuXG5sZXQgaHRtbDEgPSBgXG5cbmA7XG5cblxuZGVzY3JpYmUoJ1NjcmlwdCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBpbml0TXV0YXRpb25PYnNlcnZlckZvclRlc3RpbmcoKVxuICAgIH0pXG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBjbGVhbnVwRE9NRnJvbVRlc3RpbmcoKTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ1NjcmlwdCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2V0RXZlbnRUeXBlcygpJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgY29uc3Qgc2NyaXB0ID0gbmV3IFNjcmlwdCh7XG4gICAgICAgICAgICAgICAgc3JjOiBuZXcgRGF0YVVybCgnJywgJ3RleHQvamF2YXNjcmlwdCcpLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgYXN5bmM6IHRydWUsXG4gICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46ICdhbm9ueW1vdXMnLFxuICAgICAgICAgICAgICAgIGRlZmVyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBpbnRlZ3JpdHk6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBub21vZHVsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgbm9uY2U6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICByZWZlcnJlcnBvbGljeTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0L2phdmFzY3JpcHQnXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgc2NyaXB0LmNvbm5lY3QoKS5hdmFpbGFibGUoKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gc2NyaXB0LmdldE9wdGlvbignaWQnKVxuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuICAgICAgICB9KVxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ0V4dGVybmFsIEpTJywgKCkgPT4ge1xuXG4gICAgICAgIGxldCBpZCA9IG5ldyBJRCgnc2NyaXB0JykudG9TdHJpbmcoKTtcbiAgICAgICAgbGV0IHNlcnZlciwgc2NyaXB0LCB1cmwgPSAnaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvbGF5enIuanMvMi4yLjIvbGF5enIubWluLmpzJztcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcblxuICAgICAgICAgICAgc2NyaXB0ID0gbmV3IFNjcmlwdCh7XG4gICAgICAgICAgICAgICAgc3JjOiB1cmwsXG4gICAgICAgICAgICAgICAgYXN5bmM6IHRydWUsXG4gICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46ICdhbm9ueW1vdXMnLFxuICAgICAgICAgICAgICAgIGRlZmVyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBpbnRlZ3JpdHk6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBub21vZHVsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgbm9uY2U6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICByZWZlcnJlcnBvbGljeTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0L2phdmFzY3JpcHQnLFxuICAgICAgICAgICAgICAgIGlkOiBpZFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ2FwcGVuZCBhbmQgcmVtb3ZlIHNjcmlwdCAnLCAoZG9uZSkgPT4ge1xuXG4gICAgICAgICAgICBleHBlY3Qoc2NyaXB0LmlzQ29ubmVjdGVkKCkpLnRvLmJlLmZhbHNlO1xuXG4gICAgICAgICAgICBzY3JpcHQuY29ubmVjdCgpLmF2YWlsYWJsZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGV4cGVjdChzY3JpcHQuaXNDb25uZWN0ZWQoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW3NyYz1cIicgKyB1cmwgKyAnXCJdJykpLnRvLmV4aXN0O1xuXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChzY3JpcHQuaXNDb25uZWN0ZWQoKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tzcmM9XCInICsgdXJsICsgJ1wiXScpKS5ub3QudG8uZXhpc3Q7XG5cbiAgICAgICAgICAgICAgICBzY3JpcHQuY29ubmVjdCgpLmF2YWlsYWJsZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3Qoc2NyaXB0LmlzQ29ubmVjdGVkKCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbc3JjPVwiJyArIHVybCArICdcIl0nKSkudG8uZXhpc3Q7XG5cbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW3NyYz1cIicgKyB1cmwgKyAnXCJdJykpLm5vdC50by5leGlzdDtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHNjcmlwdC5pc0Nvbm5lY3RlZCgpKS50by5iZS5mYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuXG5cbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG5cblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cblxufSk7IiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0ICogYXMgY2hhaSBmcm9tICdjaGFpJztcbmltcG9ydCB7RGF0YX0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS9kb20vcmVzb3VyY2UvZGF0YS5tanNcIjtcbmltcG9ydCB7RGF0YVVybH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9kYXRhdXJsLm1qc1wiO1xuaW1wb3J0IHtJRH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9pZC5tanNcIjtcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2NsZWFudXBET01Gcm9tVGVzdGluZywgaW5pdE11dGF0aW9uT2JzZXJ2ZXJGb3JUZXN0aW5nfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jbGVhbnVwZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5cbmNoYWkudXNlKGNoYWlEb20pO1xuXG5sZXQgaHRtbDEgPSBgXG5cbmA7XG5cblxuZGVzY3JpYmUoJ0RhdGEnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBsZXQgZmV0Y2hSZWZlcmVuY2UsIHJldHVyblN0YXR1cywgbXV0YXRpb25vYnNlcnZlciwgYWRkZWROb2RlcyA9IFtdO1xuXG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKClcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcblxuICAgICAgICBpbml0TXV0YXRpb25PYnNlcnZlckZvclRlc3RpbmcoKVxuXG4gICAgICAgIHJldHVyblN0YXR1cyA9IDIwMDtcbiAgICAgICAgZmV0Y2hSZWZlcmVuY2UgPSBnbG9iYWxUaGlzWydmZXRjaCddO1xuICAgICAgICBnbG9iYWxUaGlzWydmZXRjaCddID0gZnVuY3Rpb24gKHVybCwgb3B0aW9ucykge1xuXG4gICAgICAgICAgICBpZiAoIXVybCkgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHVybCcpXG5cbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYTogXCJ0ZXN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1czogcmV0dXJuU3RhdHVzXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgIH07XG5cblxuICAgIH0pXG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBnbG9iYWxUaGlzWydmZXRjaCddID0gZmV0Y2hSZWZlcmVuY2U7XG4gICAgICAgIGNsZWFudXBET01Gcm9tVGVzdGluZygpO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnRGF0YSgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2V0RXZlbnRUeXBlcygpJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgY29uc3QgZGF0YSA9IG5ldyBEYXRhKHtcbiAgICAgICAgICAgICAgICBzcmM6IG5ldyBEYXRhVXJsKCcnLCAndGV4dC9qYXZhc2NyaXB0JykudG9TdHJpbmcoKVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGRhdGEuY29ubmVjdCgpLmF2YWlsYWJsZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuICAgICAgICB9KVxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ0V4dGVybmFsIERhdGEnLCAoKSA9PiB7XG5cbiAgICAgICAgbGV0IGlkID0gbmV3IElEKCdkYXRhJykudG9TdHJpbmcoKTtcbiAgICAgICAgbGV0IHNlcnZlciwgZGF0YSwgdXJsID0gJ2h0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2xheXpyLmpzLzIuMi4yL2xheXpyLm1pbi5qcyc7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgICAgIGRhdGEgPSBuZXcgRGF0YSh7XG4gICAgICAgICAgICAgICAgc3JjOiB1cmwsXG4gICAgICAgICAgICAgICAgaWQ6IGlkXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnZGF0YSBpcyBub3QgY29ubmVjdGVkJywgKCkgPT4ge1xuICAgICAgICAgICAgZXhwZWN0KGRhdGEuaXNDb25uZWN0ZWQoKSkudG8uYmUuZmFsc2U7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ2Nvbm5lY3QgYW5kIGNoZWNrIGF2YWlsYWJpbGl0eScsIChkb25lKSA9PiB7XG5cbiAgICAgICAgICAgIGRhdGEuY29ubmVjdCgpLmF2YWlsYWJsZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGV4cGVjdChkYXRhLmlzQ29ubmVjdGVkKCksICdpc0Nvbm5lY3RlZCAxJykudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW3R5cGU9XCJhcHBsaWNhdGlvbi9qc29uXCJdJyksICdleGlzdHMgMScpLnRvLmV4aXN0O1xuXG4gICAgICAgICAgICAgICAgY29uc3QgZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5wYXJlbnRFbGVtZW50O1xuXG5cbiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkucmVtb3ZlKCk7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZGF0YS5pc0Nvbm5lY3RlZCgpLCAnaXNDb25uZWN0ZWQgMicpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbdHlwZT1cImFwcGxpY2F0aW9uL2pzb25cIl0nKSwgJ2V4aXN0cyAyJykubm90LnRvLmV4aXN0O1xuXG4gICAgICAgICAgICAgICAgZGF0YS5jb25uZWN0KCkuYXZhaWxhYmxlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkYXRhLmlzQ29ubmVjdGVkKCksICdpc0Nvbm5lY3RlZCAzJykudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1t0eXBlPVwiYXBwbGljYXRpb24vanNvblwiXScpLCAnZXhpc3RzIDMnKS50by5leGlzdDtcblxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbdHlwZT1cImFwcGxpY2F0aW9uL2pzb25cIl0nKSwgJ2V4aXN0cyA0Jykubm90LnRvLmV4aXN0O1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZGF0YS5pc0Nvbm5lY3RlZCgpLCAnaXNDb25uZWN0ZWQgNCcpLnRvLmJlLmZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG5cblxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuXG59KTsiLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5kZXNjcmliZSgnaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcycsICgpID0+IHtcbiAgICBsZXQgZWxlbWVudDtcbiAgICBsZXQgb3B0aW9ucztcbiAgICBsZXQgaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcztcblxuICAgIGJlZm9yZSggZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2RvbS91dGlsL2luaXQtb3B0aW9ucy1mcm9tLWF0dHJpYnV0ZXMubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzID0gbVsnaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyddO1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfSk7XG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgb3B0aW9ucyA9IHt1cmw6IFwiXCIsIGtleToge3N1YmtleTogXCJcIiwgY2FzZVNlbnNpdGl2ZTogdHJ1ZX19O1xuICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGluaXRpYWxpemUgb3B0aW9ucyB3aXRoIG1hdGNoaW5nIGF0dHJpYnV0ZXMnLCAoKSA9PiB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItb3B0aW9uLXVybCcsICdodHRwczovL2V4YW1wbGUuY29tJyk7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItb3B0aW9uLWtleS1zdWJrZXknLCAndGVzdCcpO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMoZWxlbWVudCwgb3B0aW9ucyk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdC51cmwpLnRvLmVxdWFsKCdodHRwczovL2V4YW1wbGUuY29tJyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQua2V5LnN1YmtleSkudG8uZXF1YWwoJ3Rlc3QnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IG1vZGlmeSBvcHRpb25zIHdpdGhvdXQgbWF0Y2hpbmcgYXR0cmlidXRlcycsICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyhlbGVtZW50LCBvcHRpb25zKTtcblxuICAgICAgICBleHBlY3QocmVzdWx0LnVybCkudG8uZXF1YWwoJycpO1xuICAgICAgICBleHBlY3QocmVzdWx0LmtleS5zdWJrZXkpLnRvLmVxdWFsKCcnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaWdub3JlIGF0dHJpYnV0ZXMgd2l0aG91dCB0aGUgY29ycmVjdCBwcmVmaXgnLCAoKSA9PiB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLXNvbWUtb3B0aW9uLXVybCcsICdodHRwczovL2V4YW1wbGUuY29tJyk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyhlbGVtZW50LCBvcHRpb25zKTtcblxuICAgICAgICBleHBlY3QocmVzdWx0LnVybCkudG8uZXF1YWwoJycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBpZ25vcmUgYXR0cmlidXRlcyB3aXRoIGludmFsaWQgb3B0aW9uIHBhdGhzJywgKCkgPT4ge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLW9wdGlvbi1ub25leGlzdGVudCcsICd2YWx1ZScpO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMoZWxlbWVudCwgb3B0aW9ucyk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbChvcHRpb25zKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYXBwbHkgbWFwcGluZyBmb3IgYSBzaW5nbGUgYXR0cmlidXRlJywgKCkgPT4ge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLW9wdGlvbi11cmwnLCAnZXhhbXBsZScpO1xuICAgICAgICBjb25zdCBtYXBwaW5nID0ge1xuICAgICAgICAgICAgJ3VybCc6ICh2YWx1ZSkgPT4gJ2h0dHBzOi8vJyArIHZhbHVlICsgJy5jb20nXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyhlbGVtZW50LCBvcHRpb25zLCBtYXBwaW5nKTtcblxuICAgICAgICBleHBlY3QocmVzdWx0LnVybCkudG8uZXF1YWwoJ2h0dHBzOi8vZXhhbXBsZS5jb20nKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYXBwbHkgbWFwcGluZyBmb3IgYSBuZXN0ZWQgYXR0cmlidXRlJywgKCkgPT4ge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLW9wdGlvbi1rZXktc3Via2V5JywgJzEyMycpO1xuICAgICAgICBjb25zdCBtYXBwaW5nID0ge1xuICAgICAgICAgICAgJ2tleS5zdWJrZXknOiAodmFsdWUpID0+IHBhcnNlSW50KHZhbHVlLCAxMCkgKiAyXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyhlbGVtZW50LCBvcHRpb25zLCBtYXBwaW5nKTtcblxuICAgICAgICBleHBlY3QocmVzdWx0LmtleS5zdWJrZXkpLnRvLmVxdWFsKFwiMjQ2XCIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBhcHBseSBtdWx0aXBsZSBtYXBwaW5ncycsICgpID0+IHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1vcHRpb24tdXJsJywgJ2V4YW1wbGUnKTtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1vcHRpb24ta2V5LXN1YmtleScsICcxMjMnKTtcbiAgICAgICAgY29uc3QgbWFwcGluZyA9IHtcbiAgICAgICAgICAgICd1cmwnOiAodmFsdWUpID0+ICdodHRwczovLycgKyB2YWx1ZSArICcuY29tJyxcbiAgICAgICAgICAgICdrZXkuc3Via2V5JzogKHZhbHVlKSA9PiBwYXJzZUludCh2YWx1ZSwgMTApICogMlxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMoZWxlbWVudCwgb3B0aW9ucywgbWFwcGluZyk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdC51cmwpLnRvLmVxdWFsKCdodHRwczovL2V4YW1wbGUuY29tJyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQua2V5LnN1YmtleSkudG8uZXF1YWwoXCIyNDZcIik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGlnbm9yZSBtYXBwaW5ncyBmb3Igbm9uLWV4aXN0aW5nIGF0dHJpYnV0ZXMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG1hcHBpbmcgPSB7XG4gICAgICAgICAgICAndXJsJzogKHZhbHVlKSA9PiAnaHR0cHM6Ly8nICsgdmFsdWUgKyAnLmNvbSdcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMsIG1hcHBpbmcpO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQudXJsKS50by5lcXVhbCgnJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGlnbm9yZSBtYXBwaW5ncyBmb3IgaW52YWxpZCBvcHRpb24gcGF0aHMnLCAoKSA9PiB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItb3B0aW9uLW5vbmV4aXN0ZW50JywgJ3ZhbHVlJyk7XG4gICAgICAgIGNvbnN0IG1hcHBpbmcgPSB7XG4gICAgICAgICAgICAnbm9uZXhpc3RlbnQnOiAodmFsdWUpID0+IHZhbHVlICsgJ2JhcidcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMsIG1hcHBpbmcpO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwob3B0aW9ucyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGFwcGx5IG1hcHBpbmcgb25seSB0byBzcGVjaWZpZWQgYXR0cmlidXRlcycsICgpID0+IHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1vcHRpb24tdXJsJywgJ2V4YW1wbGUnKTtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1vcHRpb24ta2V5LXN1YmtleScsICcxMjMnKTtcbiAgICAgICAgY29uc3QgbWFwcGluZyA9IHtcbiAgICAgICAgICAgICd1cmwnOiAodmFsdWUpID0+ICdodHRwczovLycgKyB2YWx1ZSArICcuY29tJ1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMoZWxlbWVudCwgb3B0aW9ucywgbWFwcGluZyk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdC51cmwpLnRvLmVxdWFsKCdodHRwczovL2V4YW1wbGUuY29tJyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQua2V5LnN1YmtleSkudG8uZXF1YWwoJzEyMycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgYXBwbHkgbWFwcGluZyBpZiBub3QgYSBmdW5jdGlvbicsICgpID0+IHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1vcHRpb24tdXJsJywgJ2V4YW1wbGUnKTtcbiAgICAgICAgY29uc3QgbWFwcGluZyA9IHtcbiAgICAgICAgICAgICd1cmwnOiAnaHR0cHM6Ly9leGFtcGxlLmNvbSdcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMsIG1hcHBpbmcpO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQudXJsKS50by5lcXVhbCgnZXhhbXBsZScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBhcHBseSBtYXBwaW5nIHdpdGggY3VzdG9tIHByZWZpeCcsICgpID0+IHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtY3VzdG9tLW9wdGlvbi11cmwnLCAnZXhhbXBsZScpO1xuICAgICAgICBjb25zdCBtYXBwaW5nID0ge1xuICAgICAgICAgICAgJ3VybCc6ICh2YWx1ZSkgPT4gJ2h0dHBzOi8vJyArIHZhbHVlICsgJy5jb20nXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyhlbGVtZW50LCBvcHRpb25zLCBtYXBwaW5nLCAnZGF0YS1jdXN0b20tb3B0aW9uLScpO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQudXJsKS50by5lcXVhbCgnaHR0cHM6Ly9leGFtcGxlLmNvbScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgYXBwbHkgbWFwcGluZyB3aXRoIGluY29ycmVjdCBjdXN0b20gcHJlZml4JywgKCkgPT4ge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1jdXN0b20tb3B0aW9uLXVybCcsICdleGFtcGxlJyk7XG4gICAgICAgIGNvbnN0IG1hcHBpbmcgPSB7XG4gICAgICAgICAgICAndXJsJzogKHZhbHVlKSA9PiAnaHR0cHM6Ly8nICsgdmFsdWUgKyAnLmNvbSdcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMsIG1hcHBpbmcpO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQudXJsKS50by5lcXVhbCgnJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGFwcGx5IGNhc2Ugc2Vuc2l0aXZlIG1hcHBpbmcnLCAoKSA9PiB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItb3B0aW9uLWtleS1jYXNlU2Vuc2l0aXZlJywgJ2ZhbHNlJyk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMoZWxlbWVudCwgb3B0aW9ucyk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdC5rZXkuY2FzZVNlbnNpdGl2ZSkudG8uZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuXG59KTtcbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSAnY2hhaSc7XG5pbXBvcnQge2V4dHJhY3RLZXlzfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL2RvbS91dGlsL2V4dHJhY3Qta2V5cy5tanNcIjtcblxuXG5kZXNjcmliZSgnZXh0cmFjdEtleXMnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBleHRyYWN0IGtleXMgZnJvbSB0aGUgZ2l2ZW4gb2JqZWN0JywgKCkgPT4ge1xuICAgICAgICBjb25zdCBvYmogPSB7XG4gICAgICAgICAgICBmaXJzdE5hbWU6ICdKb2huJyxcbiAgICAgICAgICAgIGxhc3ROYW1lOiAnRG9lJyxcbiAgICAgICAgICAgIGFkZHJlc3M6IHtcbiAgICAgICAgICAgICAgICBzdHJlZXQ6ICcxMjMgTWFpbiBTdCcsXG4gICAgICAgICAgICAgICAgY2l0eTogJ05ldyBZb3JrJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBuZXcgTWFwKFtcbiAgICAgICAgICAgIFsnZmlyc3RuYW1lJywgJ2ZpcnN0TmFtZSddLFxuICAgICAgICAgICAgWydsYXN0bmFtZScsICdsYXN0TmFtZSddLFxuICAgICAgICAgICAgWydhZGRyZXNzLXN0cmVldCcsICdhZGRyZXNzLnN0cmVldCddLFxuICAgICAgICAgICAgWydhZGRyZXNzLWNpdHknLCAnYWRkcmVzcy5jaXR5J10sXG4gICAgICAgIF0pO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGV4dHJhY3RLZXlzKG9iaik7XG5cbiAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KEFycmF5LmZyb20ocmVzdWx0KSkpLnRvLmVxdWFsKEpTT04uc3RyaW5naWZ5KEFycmF5LmZyb20oZXhwZWN0ZWQpKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHVzZSBjdXN0b20ga2V5IGFuZCB2YWx1ZSBzZXBhcmF0b3JzJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBvYmogPSB7XG4gICAgICAgICAgICBmaXJzdE5hbWU6ICdKb2huJyxcbiAgICAgICAgICAgIGxhc3ROYW1lOiAnRG9lJyxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBleHBlY3RlZCA9IG5ldyBNYXAoW1xuICAgICAgICAgICAgWydwcmVmaXgrZmlyc3RuYW1lJywgJ3ByZWZpeCtmaXJzdE5hbWUnXSxcbiAgICAgICAgICAgIFsncHJlZml4K2xhc3RuYW1lJywgJ3ByZWZpeCtsYXN0TmFtZSddLFxuICAgICAgICBdKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBleHRyYWN0S2V5cyhvYmosICdwcmVmaXgnLCAnKycsICcrJyk7XG5cbiAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KEFycmF5LmZyb20ocmVzdWx0KSkpLnRvLmVxdWFsKEpTT04uc3RyaW5naWZ5KEFycmF5LmZyb20oZXhwZWN0ZWQpKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnY2hlY2sgaWYgdmFsdWUgaXMgbnVsbCcsICgpID0+IHtcbiAgICAgICAgY29uc3Qgb2JqID0ge1xuICAgICAgICAgICAgZmlyc3ROYW1lOiAnSm9obicsXG4gICAgICAgICAgICBsYXN0TmFtZTogJ0RvZScsXG4gICAgICAgICAgICBhZGRyZXNzOiBudWxsLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGV4cGVjdGVkID0gbmV3IE1hcChbXG4gICAgICAgICAgICBbJ2ZpcnN0bmFtZScsICdmaXJzdE5hbWUnXSxcbiAgICAgICAgICAgIFsnbGFzdG5hbWUnLCAnbGFzdE5hbWUnXSxcbiAgICAgICAgICAgIFsnYWRkcmVzcycsICdhZGRyZXNzJ10sXG4gICAgICAgICAgICBcbiAgICAgICAgXSk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZXh0cmFjdEtleXMob2JqKTtcblxuICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkoQXJyYXkuZnJvbShyZXN1bHQpKSkudG8uZXF1YWwoSlNPTi5zdHJpbmdpZnkoQXJyYXkuZnJvbShleHBlY3RlZCkpKTtcbiAgICB9KTtcblxuICAgIC8vIEFkZCBtb3JlIHRlc3QgY2FzZXMgYXMgbmVlZGVkXG59KTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWwsIGdldEdsb2JhbEZ1bmN0aW9uIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlLCB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgRmFjdG9yeSB9O1xuXG4vKipcbiAqIEEgZmFjdG9yeSBmb3IgY3JlYXRpbmcgd29ya2VyIGluc3RhbmNlcy5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIHNtYWxsIGZhY3RvcnkgdG8gY3JlYXRlIHdvcmtlclxuICovXG5jbGFzcyBGYWN0b3J5IGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IHtcblx0XHRcdHdvcmtlcjogbmV3IFdlYWtNYXAoKSxcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSB3b3JrZXIgZnJvbSBhIFVSTFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3xVUkx9IHVybFxuXHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBtZXNzYWdlSGFuZGxlclxuXHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBlcnJvckhhbmRsZXJcblx0ICogQHJldHVybiB7V29ya2VyfVxuXHQgKi9cblx0Y3JlYXRlRnJvbVVSTCA9IGZ1bmN0aW9uICh1cmwsIG1lc3NhZ2VIYW5kbGVyLCBlcnJvckhhbmRsZXIpIHtcblx0XHRpZiAodXJsIGluc3RhbmNlb2YgVVJMKSB7XG5cdFx0XHR1cmwgPSB1cmwudG9TdHJpbmcoKTtcblx0XHR9XG5cblx0XHRjb25zdCB3b3JrZXJDbGFzcyA9IGdldEdsb2JhbEZ1bmN0aW9uKFwiV29ya2VyXCIpO1xuXHRcdHZhciB3b3JrZXIgPSBuZXcgd29ya2VyQ2xhc3ModmFsaWRhdGVTdHJpbmcodXJsKSk7XG5cblx0XHRpZiAoaXNGdW5jdGlvbihtZXNzYWdlSGFuZGxlcikpIHtcblx0XHRcdHdvcmtlci5vbm1lc3NhZ2UgPSAoZXZlbnQpID0+IHtcblx0XHRcdFx0bWVzc2FnZUhhbmRsZXIuY2FsbCh3b3JrZXIsIGV2ZW50KTtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0aWYgKGlzRnVuY3Rpb24oZXJyb3JIYW5kbGVyKSkge1xuXHRcdFx0d29ya2VyLm9uZXJyb3IgPSAoZXZlbnQpID0+IHtcblx0XHRcdFx0ZXJyb3JIYW5kbGVyLmNhbGwod29ya2VyLCBldmVudCk7XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdHJldHVybiB3b3JrZXI7XG5cdH07XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSB3b3JrZXIgZnJvbSBhIHNjcmlwdFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gY29udGVudFxuXHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBtZXNzYWdlSGFuZGxlclxuXHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBlcnJvckhhbmRsZXJcblx0ICogQHJldHVybiB7V29ya2VyfVxuXHQgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RlL2RvY3MvV2ViL0FQSS9VUkwvY3JlYXRlT2JqZWN0VVJMXG5cdCAqL1xuXHRjcmVhdGVGcm9tU2NyaXB0ID0gZnVuY3Rpb24gKGNvbnRlbnQsIG1lc3NhZ2VIYW5kbGVyLCBlcnJvckhhbmRsZXIpIHtcblx0XHRjb25zdCBibG9iRnVuY3Rpb24gPSBuZXcgZ2V0R2xvYmFsRnVuY3Rpb24oXCJCbG9iXCIpO1xuXHRcdGNvbnN0IGJsb2IgPSBuZXcgYmxvYkZ1bmN0aW9uKFt2YWxpZGF0ZVN0cmluZyhjb250ZW50KV0sIHtcblx0XHRcdHR5cGU6IFwic2NyaXB0L2phdmFzY3JpcHRcIixcblx0XHR9KTtcblxuXHRcdGNvbnN0IHVybCA9IGdldEdsb2JhbEZ1bmN0aW9uKFwiVVJMXCIpLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcblx0XHRjb25zdCB3b3JrZXIgPSB0aGlzLmNyZWF0ZUZyb21VUkwodXJsLCBtZXNzYWdlSGFuZGxlciwgZXJyb3JIYW5kbGVyKTtcblxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wid29ya2VyXCJdLnNldCh3b3JrZXIsIHVybCk7XG5cblx0XHRyZXR1cm4gd29ya2VyO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBUZXJtaW5hdGUgdGhlIHdvcmtlciBhbmQgY2FsbCByZXZva2VPYmplY3RVUkwgaWYgbmVjZXNzYXJ5LlxuXHQgKlxuXHQgKiBAcGFyYW0gd29ya2VyXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLldvcmtlci5GYWN0b3J5fVxuXHQgKi9cblx0dGVybWluYXRlKHdvcmtlcikge1xuXHRcdGNvbnN0IHdvcmtlckNsYXNzID0gZ2V0R2xvYmFsRnVuY3Rpb24oXCJXb3JrZXJcIik7XG5cdFx0dmFsaWRhdGVJbnN0YW5jZSh3b3JrZXIsIHdvcmtlckNsYXNzKTtcblxuXHRcdHdvcmtlci50ZXJtaW5hdGUoKTtcblxuXHRcdGlmICh0aGlzW2ludGVybmFsU3ltYm9sXVtcIndvcmtlclwiXS5oYXMod29ya2VyKSkge1xuXHRcdFx0Y29uc3QgdXJsID0gdGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJ3b3JrZXJcIl0uZ2V0KHdvcmtlcik7XG5cdFx0XHRVUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5pbXBvcnQge0ZhY3Rvcnl9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvZG9tL3dvcmtlci9mYWN0b3J5Lm1qc1wiO1xuaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET00sIGlzTm9kZX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXG5kZXNjcmliZSgnV29ya2VyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgaWYgKGlzTm9kZSgpKSB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2xvYmFsWydVUkwnXSwgJ2NyZWF0ZU9iamVjdFVSTCcsIHtcbiAgICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCIvZXhhbXBsZS5tanNcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGdsb2JhbFsnV29ya2VyJ10gPSBjbGFzcyB7XG4gICAgICAgICAgICAgICAgdGVybWluYXRlKCkge1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBvbmVycm9yKCkge1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBvbm1lc3NhZ2UoKSB7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGEgPSB0eXBlb2YgZ2xvYmFsWydXb3JrZXInXTtcbiAgICAgICAgICAgIGxldCBhMSA9IHR5cGVvZiBXb3JrZXI7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGpzZG9tID0gaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ0ZhY3RvcnknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ2NyZWF0ZSB3b3JrZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IGZhY3RvcnkgPSBuZXcgRmFjdG9yeSgpO1xuICAgICAgICAgICAgY29uc3Qgd29ya2VyID0gZmFjdG9yeS5jcmVhdGVGcm9tU2NyaXB0KCdjb25zb2xlLmxvZyhcImhlbGxvIHdvcmxkXCIpOycpXG4gICAgICAgICAgICBleHBlY3Qod29ya2VyKS5pcy5pbnN0YW5jZW9mKFdvcmtlcik7XG5cbiAgICAgICAgICAgIGV4cGVjdChmYWN0b3J5LnRlcm1pbmF0ZSh3b3JrZXIpKS5pcy5pbnN0YW5jZW9mKEZhY3RvcnkpXG5cblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pOyIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCAqIGFzIGNoYWkgZnJvbSAnY2hhaSc7XG5cbmltcG9ydCB7SUR9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvaWQubWpzXCI7XG5pbXBvcnQge09ic2VydmVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL29ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHtQcm94eU9ic2VydmVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL3Byb3h5b2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5cbmNoYWkudXNlKGNoYWlEb20pO1xuXG5sZXQgaHRtbDEgPSBgXG4gICAgPHRlbXBsYXRlIGlkPVwiY3VycmVudFwiPlxuICAgICAgICA8bGkgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmN1cnJlbnQgfCB0b2pzb25cIj48L2xpPlxuICAgIDwvdGVtcGxhdGU+XG4gICAgPGRpdiBpZD1cInRlc3QxXCI+XG4gICAgICAgIDx1bCBkYXRhLW1vbnN0ZXItaW5zZXJ0PVwiY3VycmVudCBwYXRoOmEuYlwiPlxuICAgICAgICA8L3VsPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgaWQ9XCJ0ZXN0MlwiPlxuICAgICAgICA8dWwgZGF0YS1tb25zdGVyLWluc2VydD1cImN1cnJlbnQgcGF0aDphLmIgfCBkb2l0XCI+XG4gICAgICAgIDwvdWw+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBpZD1cInRlc3QzXCI+XG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJjbGFzcyBwYXRoOmEuYlwiPlxuICAgICAgICAgICAgPGlucHV0IGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwidmFsdWUgcGF0aDphLmNcIiBpZD1cImlucHV0MVwiPlxuICAgICAgICAgICAgPGlucHV0IGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2hlY2tlZCBwYXRoOmEuY2hlY2tib3hcIiB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiY2hlY2tib3hcIiBpZD1cImNoZWNrYm94XCI+XG4gICAgICAgICAgICA8aW5wdXQgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJ2YWx1ZSBwYXRoOmEudGV4dFwiIHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInRleHRcIiBpZD1cInRleHRcIj5cbiAgICAgICAgICAgIDxpbnB1dCBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNoZWNrZWQgcGF0aDphLnJhZGlvXCIgdHlwZT1cInJhZGlvXCIgbmFtZT1cInJhZGlvXCIgdmFsdWU9XCJyMVwiIGlkPVwicmFkaW9cIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwicmFkaW9cIiB2YWx1ZT1cInIyXCIgaWQ9XCJyMlwiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJyYWRpb1wiIHZhbHVlPVwicnhcIiBpZD1cInJ4XCI+XG5cbiAgICAgICAgICAgIDxzZWxlY3QgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJ2YWx1ZSBwYXRoOmEuc2VsZWN0XCIgbmFtZT1cInNlbGVjdFwiIGlkPVwic2VsZWN0XCI+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm90aGVyLXZhbHVlXCI+dmFsdWUxPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbj52YWx1ZTI8L29wdGlvbj5cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuXG4gICAgICAgICAgICA8c2VsZWN0IGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwidmFsdWUgcGF0aDphLm11bHRpc2VsZWN0XCIgbmFtZT1cIm11bHRpc2VsZWN0XCIgbXVsdGlwbGUgaWQ9XCJtdWx0aXNlbGVjdFwiPlxuICAgICAgICAgICAgICAgIDxvcHRpb24+dmFsdWUxPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbj52YWx1ZTI8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uPnZhbHVlMzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24+dmFsdWU0PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm90aGVyLXZhbHVlNVwiPnZhbHVlNTwvb3B0aW9uPlxuICAgICAgICAgICAgPC9zZWxlY3Q+XG5cbiAgICAgICAgICAgIDx0ZXh0YXJlYSBuYW1lPVwidGV4dGFyZWFcIiBpZD1cInRleHRhcmVhXCIgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJ2YWx1ZSBwYXRoOmEudGV4dGFyZWFcIj48L3RleHRhcmVhPlxuXG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG5gO1xuXG5sZXQgaHRtbDIgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QxXCI+XG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOnRleHQgfCB0b2xvd2VyXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOnRleHQgfCBjYWxsOm15Zm9ybWF0dGVyXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJzdGF0aWM6aGVsbG9cXFxcIFwiPjwvZGl2PlxuICAgIDwvZGl2PlxuYDtcblxubGV0IGh0bWwzID0gYFxuXG4gICAgPHRlbXBsYXRlIGlkPVwibXlpbm5lcmlkXCI+XG4gICAgICAgIDxzcGFuIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpteWlubmVyaWQgfCB0b2pzb25cIj48L3NwYW4+XG4gICAgPC90ZW1wbGF0ZT5cblxuICAgIDx0ZW1wbGF0ZSBpZD1cIm15aWRcIj5cbiAgICAgICAgPHAgZGF0YS1tb25zdGVyLWluc2VydD1cIm15aW5uZXJpZCBwYXRoOmEuYlwiPjwvcD5cbiAgICA8L3RlbXBsYXRlPlxuXG4gICAgPGRpdiBpZD1cInRlc3QxXCI+XG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLWluc2VydD1cIm15aWQgcGF0aDphLmJcIj48L2Rpdj5cbiAgICA8L2Rpdj5cblxuYDtcblxubGV0IGh0bWw0ID0gYFxuICAgIDxkaXY+XG4gICAgICAgIDxmb3JtIGlkPVwiZm9ybTFcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiB2YWx1ZT1cImNoZWNrZWRcIiBuYW1lPVwiY2hlY2tib3hcIiBkYXRhLW1vbnN0ZXItYmluZD1cInBhdGg6c3RhdGVcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJ0ZXh0XCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cInJhZGlvXCIgdmFsdWU9XCJyMVwiIGlkPVwicjFcIiBkYXRhLW1vbnN0ZXItYmluZD1cInBhdGg6cmFkaW9cIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwicmFkaW9cIiB2YWx1ZT1cInIyXCIgaWQ9XCJyMlwiIGRhdGEtbW9uc3Rlci1iaW5kPVwicGF0aDpyYWRpb1wiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJyYWRpb1wiIHZhbHVlPVwicnhcIiBpZD1cInJ4XCIgZGF0YS1jb21tZW50PVwibm90IGNhbGxlZCBiZWNhdXNlIG5vIGJpbmQgYXR0cmlidXRlXCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cImJ1dHRvblwiIG5hbWU9XCJidXR0b25cIj5cblxuICAgICAgICAgICAgPHNlbGVjdCBuYW1lPVwic2VsZWN0MVwiIGlkPVwic2VsZWN0MVwiIGRhdGEtbW9uc3Rlci1iaW5kPVwicGF0aDpzZWxlY3RcIj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uPnZhbHVlMTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24+dmFsdWUyPC9vcHRpb24+XG4gICAgICAgICAgICA8L3NlbGVjdD5cblxuICAgICAgICAgICAgPHNlbGVjdCBuYW1lPVwic2VsZWN0MlwiIG11bHRpcGxlIGlkPVwic2VsZWN0MlwiIGRhdGEtbW9uc3Rlci1iaW5kPVwicGF0aDptdWx0aXNlbGVjdFwiPlxuICAgICAgICAgICAgICAgIDxvcHRpb24+dmFsdWUxPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbj52YWx1ZTI8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uPnZhbHVlMzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24+dmFsdWU0PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbj52YWx1ZTU8L29wdGlvbj5cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuXG4gICAgICAgICAgICA8dGV4dGFyZWEgbmFtZT1cInRleHRhcmVhXCIgaWQ9XCJ0ZXh0YXJlYVwiIGRhdGEtbW9uc3Rlci1iaW5kPVwicGF0aDp0ZXh0YXJlYVwiPlxuICAgICAgICAgICAgXG4gICAgICAgIDwvdGV4dGFyZWE+XG5cbiAgICAgICAgPC9mb3JtPlxuICAgIDwvZGl2PlxuXG5gO1xuXG5cblxuZGVzY3JpYmUoJ0RPTScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGxldCBVcGRhdGVyID0gbnVsbDtcbiAgICBcbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgfVxuICAgICAgICBpbml0SlNET00ob3B0aW9ucykudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uL3NvdXJjZS9kb20vdXBkYXRlci5tanNcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIFVwZGF0ZXIgPSBtLlVwZGF0ZXI7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKGUpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuICAgIH0pXG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ1VwZGF0ZXIoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGVzY3JpYmUoJ3Rlc3QgR2V0dGVyICYmIFNldHRlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdzZXRFdmVudFR5cGVzKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKVxuICAgICAgICAgICAgICAgIGV4cGVjdChuZXcgVXBkYXRlcihlbGVtZW50KS5zZXRFdmVudFR5cGVzKFsndG91Y2gnXSkpLnRvLmJlLmluc3RhbmNlb2YoVXBkYXRlcik7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgaXQoJ2dldFN1YmplY3QoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpXG4gICAgICAgICAgICAgICAgbGV0IHN1YmplY3QgPSB7YTogMX07XG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBVcGRhdGVyKGVsZW1lbnQsIHN1YmplY3QpLmdldFN1YmplY3QoKS5hKS50by5iZS5lcXVhbCgxKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCd0ZXN0IGNvbnRyb2wgbWV0aG9kcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdlbmFibGVFdmVudFByb2Nlc3NpbmcoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpXG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBVcGRhdGVyKGVsZW1lbnQpLmVuYWJsZUV2ZW50UHJvY2Vzc2luZygpKS50by5iZS5pbnN0YW5jZW9mKFVwZGF0ZXIpO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgaXQoJ2Rpc2FibGVFdmVudFByb2Nlc3NpbmcoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpXG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBVcGRhdGVyKGVsZW1lbnQpLmRpc2FibGVFdmVudFByb2Nlc3NpbmcoKSkudG8uYmUuaW5zdGFuY2VvZihVcGRhdGVyKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCd0ZXN0IEVycm9ycycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgSFRNTEVsZW1lbnQgRXJyb3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IG5ldyBVcGRhdGVyKCkpLnRvLnRocm93KFR5cGVFcnJvcilcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgdGhyb3cgdmFsdWUgaXMgd3JvbmcnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpXG4gICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IG5ldyBVcGRhdGVyKGVsZW1lbnQsIG51bGwpKS50by50aHJvdyhUeXBlRXJyb3IpXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIHRocm93IEVycm9yOiB0aGUgdmFsdWUgaXMgbm90IGl0ZXJhYmxlJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpXG5cbiAgICAgICAgICAgICAgICBsZXQgdSA9IG5ldyBVcGRhdGVyKFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogW11cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBsZXQgcHJvbWlzZSA9IHUucnVuKCk7XG5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUobmV3IEVycm9yKFwic2hvdWxkIG5ldmVyIGNhbGxlZCFcIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChlKS5pcy5pbnN0YW5jZU9mKEVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChlICsgXCJcIikudG8uYmUuZXF1YWwoJ0Vycm9yOiB0aGUgdmFsdWUgaXMgbm90IGl0ZXJhYmxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSwgMTAwKTtcblxuICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdVcGRhdGVyKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRlc2NyaWJlKCduZXcgVXBkYXRlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gZG9jdW1lbnQgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJylcblxuICAgICAgICAgICAgICAgIGxldCBkID0gbmV3IFVwZGF0ZXIoXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHt9XG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGV4cGVjdCh0eXBlb2YgZCkuaXMuZXF1YWwoJ29iamVjdCcpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ1VwZGF0ZXIoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGVzY3JpYmUoJ1JlcGVhdCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBidWlsZCA2IGxpIGVsZW1lbnRzJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpXG5cbiAgICAgICAgICAgICAgICBsZXQgZCA9IG5ldyBVcGRhdGVyKFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aTogJzAnfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2k6ICcxJ30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpOiAnMid9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aTogJzMnfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2k6ICc0J30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpOiAnNSd9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBkLnJ1bigpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdCh0eXBlb2YgZCkuaXMuZXF1YWwoJ29iamVjdCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA2OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoZWxlbWVudCkuY29udGFpbi5odG1sKCc8bGkgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmEuYi4nICsgaSArICcgfCB0b2pzb25cIiBkYXRhLW1vbnN0ZXItaW5zZXJ0LXJlZmVyZW5jZT1cImN1cnJlbnQtJyArIGkgKyAnXCI+e1wiaVwiOlwiJyArIGkgKyAnXCJ9PC9saT4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goXG4gICAgICAgICAgICAgICAgICAgIGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoZSkpXG4gICAgICAgICAgICAgICAgICAgIH0pXG5cblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnVXBkYXRlcigpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sNDtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnRXZlbnRoYW5kbGluZycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0IHVwZGF0ZXIsIGZvcm0xLCBwcm94eW9ic2VydmVyO1xuICAgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcHJveHlvYnNlcnZlciA9IG5ldyBQcm94eU9ic2VydmVyKHt9KVxuICAgICAgICAgICAgICAgIHVwZGF0ZXIgPSBuZXcgVXBkYXRlcihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZm9ybTEnKSwgcHJveHlvYnNlcnZlcik7XG4gICAgICAgICAgICAgICAgZm9ybTEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZm9ybTEnKTtcblxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgLy8gaGVyZSBjbGljayBldmVudHMgYXJlIHRocm93biBvbiB0aGUgY2hlY2tib3ggYW5kIHRoZSBzZXR0aW5nIG9mIHRoZSB2YWx1ZSBpcyBvYnNlcnZlZCB2aWEgdGhlIHByb3h5b2JzZXJ2ZXIuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGhhbmRsZSBjaGVja2JveCBjbGljayBldmVudHMnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICAgICAgdXBkYXRlci5lbmFibGVFdmVudFByb2Nlc3NpbmcoKTtcblxuICAgICAgICAgICAgICAgIGxldCBzdWJqZWN0ID0gdXBkYXRlci5nZXRTdWJqZWN0KCk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHN1YmplY3QpLmlzLmVxdWFsKHByb3h5b2JzZXJ2ZXIuZ2V0U3ViamVjdCgpKTtcblxuICAgICAgICAgICAgICAgIGxldCBleHBlY3RlZCA9IFsnY2hlY2tlZCcsIHVuZGVmaW5lZCwgJ2NoZWNrZWQnXTtcbiAgICAgICAgICAgICAgICAvLyBoZXJlIHRoZSBub3RhdGlvbiB3aXRoIGZ1bmN0aW9uIGlzIGltcG9ydGFudCwgYmVjYXVzZSB0aGUgcG9pbnRlciBpcyBzZXQuXG4gICAgICAgICAgICAgICAgcHJveHlvYnNlcnZlci5hdHRhY2hPYnNlcnZlcihuZXcgT2JzZXJ2ZXIoZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBlID0gZXhwZWN0ZWQuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUgPT09IHVuZGVmaW5lZCAmJiBleHBlY3RlZC5sZW5ndGggPT09IDApIGRvbmUobmV3IEVycm9yKCd0byBtYW55IGNhbGxzJykpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmdldFN1YmplY3QoKVsnc3RhdGUnXSAhPT0gZSkgZG9uZShuZXcgRXJyb3IodGhpcy5nZXRTdWJqZWN0KClbJ3N0YXRlJ10gKyAnIHNob3VsZCAnICsgZSkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXhwZWN0ZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0xLnF1ZXJ5U2VsZWN0b3IoJ1tuYW1lPWNoZWNrYm94XScpLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAxMClcblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm0xLnF1ZXJ5U2VsZWN0b3IoJ1tuYW1lPWNoZWNrYm94XScpLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgfSwgMTApXG5cblxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBoYW5kbGUgcmFkaW8gY2xpY2sgZXZlbnRzIDEnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICAgICAgdXBkYXRlci5lbmFibGVFdmVudFByb2Nlc3NpbmcoKTtcblxuICAgICAgICAgICAgICAgIGxldCBzdWJqZWN0ID0gdXBkYXRlci5nZXRTdWJqZWN0KCk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHN1YmplY3QpLmlzLmVxdWFsKHByb3h5b2JzZXJ2ZXIuZ2V0U3ViamVjdCgpKTtcblxuICAgICAgICAgICAgICAgIGxldCBleHBlY3RlZCA9IFsncjEnLCAncjInLCAncjEnXTtcbiAgICAgICAgICAgICAgICBsZXQgY2xpY2tUYXJnZXRzID0gWydyMicsICdyMSddXG4gICAgICAgICAgICAgICAgLy8gaGVyZSB0aGUgbm90YXRpb24gd2l0aCBmdW5jdGlvbiBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgdGhlIHRoaXMgcG9pbnRlciBpcyBzZXQuXG4gICAgICAgICAgICAgICAgcHJveHlvYnNlcnZlci5hdHRhY2hPYnNlcnZlcihuZXcgT2JzZXJ2ZXIoZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBlID0gZXhwZWN0ZWQuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUgPT09IHVuZGVmaW5lZCAmJiBleHBlY3RlZC5sZW5ndGggPT09IDApIGRvbmUobmV3IEVycm9yKCd0byBtYW55IGNhbGxzJykpO1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCB2ID0gdGhpcy5nZXRTdWJqZWN0KClbJ3JhZGlvJ107XG4gICAgICAgICAgICAgICAgICAgIGlmICh2ICE9PSBlKSBkb25lKG5ldyBFcnJvcih2ICsgJyBzaG91bGQgJyArIGUpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4cGVjdGVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY2xpY2tUYXJnZXRzLnNoaWZ0KCkpLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAxMClcblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyMScpLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgfSwgMTApXG5cbiAgICAgICAgICAgICAgICAvLyBubyBoYW5kbGVyIC8vIGJpbmRcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3J4JykuY2xpY2soKTtcbiAgICAgICAgICAgICAgICB9LCAyMClcblxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBoYW5kbGUgc2VsZWN0IGNsaWNrIGV2ZW50cyAyJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgICAgIGxldCBzZWxlY3RFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlbGVjdDEnKTtcblxuICAgICAgICAgICAgICAgIHVwZGF0ZXIuZW5hYmxlRXZlbnRQcm9jZXNzaW5nKCk7XG5cbiAgICAgICAgICAgICAgICBsZXQgc3ViamVjdCA9IHVwZGF0ZXIuZ2V0U3ViamVjdCgpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChzdWJqZWN0KS5pcy5lcXVhbChwcm94eW9ic2VydmVyLmdldFN1YmplY3QoKSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgZXhwZWN0ZWQgPSBbJ3ZhbHVlMicsICd2YWx1ZTEnLCAndmFsdWUyJ107XG4gICAgICAgICAgICAgICAgLy8gaGVyZSB0aGUgbm90YXRpb24gd2l0aCBmdW5jdGlvbiBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgdGhlIHRoaXMgcG9pbnRlciBpcyBzZXQuXG4gICAgICAgICAgICAgICAgcHJveHlvYnNlcnZlci5hdHRhY2hPYnNlcnZlcihuZXcgT2JzZXJ2ZXIoZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBlID0gZXhwZWN0ZWQuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUgPT09IHVuZGVmaW5lZCAmJiBleHBlY3RlZC5sZW5ndGggPT09IDApIGRvbmUobmV3IEVycm9yKCd0byBtYW55IGNhbGxzJykpO1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCB2ID0gdGhpcy5nZXRTdWJqZWN0KClbJ3NlbGVjdCddO1xuICAgICAgICAgICAgICAgICAgICBpZiAodiAhPT0gZSkgZG9uZShuZXcgRXJyb3IodiArICcgc2hvdWxkICcgKyBlKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChleHBlY3RlZC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQuc2VsZWN0ZWRJbmRleCA9IHNlbGVjdEVsZW1lbnQuc2VsZWN0ZWRJbmRleCA9PT0gMSA/IDAgOiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQuY2xpY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwKVxuXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gc2V0IHZhbHVlIGFuZCBzaW11bGF0ZSBjbGljayBldmVudCBmb3IgYnViYmxlXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQuc2VsZWN0ZWRJbmRleCA9IDE7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQuY2xpY2soKTtcblxuICAgICAgICAgICAgICAgIH0sIDIwKVxuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBoYW5kbGUgdGV4dGFyZWEgZXZlbnRzJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgICAgIGxldCB0ZXh0YXJlYUVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGV4dGFyZWEnKTtcblxuICAgICAgICAgICAgICAgIHVwZGF0ZXIuZW5hYmxlRXZlbnRQcm9jZXNzaW5nKCk7XG5cbiAgICAgICAgICAgICAgICBsZXQgc3ViamVjdCA9IHVwZGF0ZXIuZ2V0U3ViamVjdCgpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChzdWJqZWN0KS5pcy5lcXVhbChwcm94eW9ic2VydmVyLmdldFN1YmplY3QoKSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgZXhwZWN0ZWQgPSBbJ3Rlc3RYJywgJ2xvcmVtIGlwc3VtJywgJyddO1xuICAgICAgICAgICAgICAgIGxldCB0ZXN0VmFsdWVzID0gW1wibG9yZW0gaXBzdW1cIiwgXCJcIl07XG4gICAgICAgICAgICAgICAgLy8gaGVyZSB0aGUgbm90YXRpb24gd2l0aCBmdW5jdGlvbiBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgdGhlIHRoaXMgcG9pbnRlciBpcyBzZXQuXG4gICAgICAgICAgICAgICAgcHJveHlvYnNlcnZlci5hdHRhY2hPYnNlcnZlcihuZXcgT2JzZXJ2ZXIoZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBlID0gZXhwZWN0ZWQuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUgPT09IHVuZGVmaW5lZCAmJiBleHBlY3RlZC5sZW5ndGggPT09IDApIGRvbmUobmV3IEVycm9yKCd0byBtYW55IGNhbGxzJykpO1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCB2ID0gdGhpcy5nZXRTdWJqZWN0KClbJ3RleHRhcmVhJ107XG4gICAgICAgICAgICAgICAgICAgIGlmIChKU09OLnN0cmluZ2lmeSh2KSAhPT0gSlNPTi5zdHJpbmdpZnkoZSkpIGRvbmUobmV3IEVycm9yKEpTT04uc3RyaW5naWZ5KHYpICsgJyBzaG91bGQgJyArIEpTT04uc3RyaW5naWZ5KGUpKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChleHBlY3RlZC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRhcmVhRWxlbWVudC52YWx1ZSA9IHRlc3RWYWx1ZXMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0YXJlYUVsZW1lbnQuY2xpY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwKVxuXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcblxuICAgICAgICAgICAgICAgICAgICAvLyBzZXQgdmFsdWUgYW5kIHNpbXVsYXRlIGNsaWNrIGV2ZW50IGZvciBidWJibGVcbiAgICAgICAgICAgICAgICAgICAgdGV4dGFyZWFFbGVtZW50LnZhbHVlID0gXCJ0ZXN0WFwiO1xuICAgICAgICAgICAgICAgICAgICB0ZXh0YXJlYUVsZW1lbnQuY2xpY2soKTtcblxuICAgICAgICAgICAgICAgIH0sIDIwKVxuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBoYW5kbGUgbXVsdGlwbGUgc2VsZWN0IGV2ZW50cycsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgc2VsZWN0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZWxlY3QyJyk7XG5cbiAgICAgICAgICAgICAgICB1cGRhdGVyLmVuYWJsZUV2ZW50UHJvY2Vzc2luZygpO1xuXG4gICAgICAgICAgICAgICAgbGV0IHN1YmplY3QgPSB1cGRhdGVyLmdldFN1YmplY3QoKTtcbiAgICAgICAgICAgICAgICBleHBlY3Qoc3ViamVjdCkuaXMuZXF1YWwocHJveHlvYnNlcnZlci5nZXRTdWJqZWN0KCkpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGV4cGVjdGVkID0gW1xuICAgICAgICAgICAgICAgICAgICBbJ3ZhbHVlMSddLFxuICAgICAgICAgICAgICAgICAgICBbJ3ZhbHVlMicsICd2YWx1ZTMnLCAndmFsdWU0J10sXG4gICAgICAgICAgICAgICAgICAgIFsndmFsdWUxJywgJ3ZhbHVlNCddLFxuICAgICAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgICAgICBsZXQgdGVzdFNlbGVjdGlvbnMgPSBbXG4gICAgICAgICAgICAgICAgICAgIFtmYWxzZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZV0sXG4gICAgICAgICAgICAgICAgICAgIFt0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWVdLFxuICAgICAgICAgICAgICAgIF1cblxuICAgICAgICAgICAgICAgIC8vIGhlcmUgdGhlIG5vdGF0aW9uIHdpdGggZnVuY3Rpb24gaXMgaW1wb3J0YW50LCBiZWNhdXNlIHRoZSB0aGlzIHBvaW50ZXIgaXMgc2V0LlxuICAgICAgICAgICAgICAgIHByb3h5b2JzZXJ2ZXIuYXR0YWNoT2JzZXJ2ZXIobmV3IE9ic2VydmVyKGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgZSA9IGV4cGVjdGVkLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlID09PSB1bmRlZmluZWQgJiYgZXhwZWN0ZWQubGVuZ3RoID09PSAwKSBkb25lKG5ldyBFcnJvcigndG8gbWFueSBjYWxscycpKTtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgdiA9IHRoaXMuZ2V0U3ViamVjdCgpWydtdWx0aXNlbGVjdCddO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChKU09OLnN0cmluZ2lmeSh2KSAhPT0gSlNPTi5zdHJpbmdpZnkoZSkpIGRvbmUobmV3IEVycm9yKEpTT04uc3RyaW5naWZ5KHYpICsgJyBzaG91bGQgJyArIEpTT04uc3RyaW5naWZ5KGUpKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChleHBlY3RlZC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2ID0gdGVzdFNlbGVjdGlvbnMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RFbGVtZW50Lm9wdGlvbnNbMF0uc2VsZWN0ZWQgPSB2WzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQub3B0aW9uc1sxXS5zZWxlY3RlZCA9IHZbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0RWxlbWVudC5vcHRpb25zWzJdLnNlbGVjdGVkID0gdlsyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RFbGVtZW50Lm9wdGlvbnNbM10uc2VsZWN0ZWQgPSB2WzNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQuY2xpY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwKVxuXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcblxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RFbGVtZW50Lm9wdGlvbnNbMF0uc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RFbGVtZW50Lm9wdGlvbnNbMV0uc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0RWxlbWVudC5vcHRpb25zWzJdLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQub3B0aW9uc1szXS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RFbGVtZW50LmNsaWNrKCk7XG5cbiAgICAgICAgICAgICAgICB9LCAyMClcblxuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KVxuXG5cbiAgICBkZXNjcmliZSgnVXBkYXRlcigpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMjtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnUmVwbGFjZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBhZGQgbG93ZXIgaGVsbG8gYW5kIEhFTExPeWVzIScsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKVxuXG5cbiAgICAgICAgICAgICAgICBsZXQgZCA9IG5ldyBVcGRhdGVyKFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBcIkhBTExPXCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG5cblxuICAgICAgICAgICAgICAgIGQuc2V0Q2FsbGJhY2soJ215Zm9ybWF0dGVyJywgZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEgKyAneWVzISdcbiAgICAgICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgICAgICAgICBkLnJ1bigpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdCh0eXBlb2YgZCkuaXMuZXF1YWwoJ29iamVjdCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQpLmNvbnRhaW4uaHRtbCgnPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6dGV4dCB8IHRvbG93ZXJcIj5oYWxsbzwvZGl2PicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQpLmNvbnRhaW4uaHRtbCgnPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6dGV4dCB8IGNhbGw6bXlmb3JtYXR0ZXJcIj5IQUxMT3llcyE8L2Rpdj4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChlbGVtZW50KS5jb250YWluLmh0bWwoJzxkaXYgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJzdGF0aWM6aGVsbG9cXFxcIFwiPmhlbGxvIDwvZGl2PicpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG5cbiAgICAgICAgICAgICAgICB9KS5jYXRjaChcbiAgICAgICAgICAgICAgICAgICAgZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKG5ldyBFcnJvcihlKSlcbiAgICAgICAgICAgICAgICAgICAgfSlcblxuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxuICAgIGRlc2NyaWJlKCdVcGRhdGVyKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwzO1xuICAgICAgICB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCdSZXBsYWNlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBpdCgnc2hvdWxkICcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKVxuXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBuZXcgVXBkYXRlcihcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2k6ICcwJ30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcblxuXG4gICAgICAgICAgICAgICAgZC5ydW4oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QodHlwZW9mIGQpLmlzLmVxdWFsKCdvYmplY3QnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChlbGVtZW50KS5jb250YWluLmh0bWwoJzxkaXYgZGF0YS1tb25zdGVyLWluc2VydD1cIm15aWQgcGF0aDphLmJcIj4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChlbGVtZW50KS5jb250YWluLmh0bWwoJzxwIGRhdGEtbW9uc3Rlci1pbnNlcnQ9XCJteWlubmVyaWQgcGF0aDphLmJcIiBkYXRhLW1vbnN0ZXItaW5zZXJ0LXJlZmVyZW5jZT1cIm15aWQtMFwiPicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQpLmNvbnRhaW4uaHRtbCgnPHNwYW4gZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmEuYi4wIHwgdG9qc29uXCIgZGF0YS1tb25zdGVyLWluc2VydC1yZWZlcmVuY2U9XCJteWlubmVyaWQtMFwiPntcImlcIjpcIjBcIn08L3NwYW4+Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcblxuICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goXG4gICAgICAgICAgICAgICAgICAgIGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoZSkpXG4gICAgICAgICAgICAgICAgICAgIH0pXG5cblxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnVXBkYXRlcigpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBkZXNjcmliZSgnQXR0cmlidXRlcycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBjaGFuZ2UgYXR0cmlidXRlcycsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDMnKVxuXG4gICAgICAgICAgICAgICAgbGV0IHRleHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGV4dCcpXG4gICAgICAgICAgICAgICAgZXhwZWN0KHRleHQudmFsdWUpLnRvLmJlLmVxdWFsKFwiXCIpO1xuXG4gICAgICAgICAgICAgICAgbGV0IHJhZGlvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JhZGlvJylcbiAgICAgICAgICAgICAgICBleHBlY3QocmFkaW8uY2hlY2tlZCkudG8uYmUuZmFsc2U7XG5cbiAgICAgICAgICAgICAgICBsZXQgY2hlY2tib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2hlY2tib3gnKVxuICAgICAgICAgICAgICAgIGV4cGVjdChjaGVja2JveC5jaGVja2VkKS50by5iZS5mYWxzZTtcblxuICAgICAgICAgICAgICAgIGxldCBzZWxlY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VsZWN0JylcbiAgICAgICAgICAgICAgICBleHBlY3Qoc2VsZWN0LnNlbGVjdGVkSW5kZXgpLnRvLmJlLmVxdWFsKDApO1xuXG4gICAgICAgICAgICAgICAgbGV0IG11bHRpc2VsZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ211bHRpc2VsZWN0JylcbiAgICAgICAgICAgICAgICBleHBlY3QobXVsdGlzZWxlY3Quc2VsZWN0ZWRJbmRleCkudG8uYmUuZXF1YWwoLTEpO1xuXG4gICAgICAgICAgICAgICAgbGV0IHRleHRhcmVhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RleHRhcmVhJylcbiAgICAgICAgICAgICAgICBleHBlY3QodGV4dGFyZWEudmFsdWUpLnRvLmJlLmVxdWFsKFwiXCIpO1xuXG5cbiAgICAgICAgICAgICAgICBsZXQgZCA9IG5ldyBVcGRhdGVyKFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYjogXCJkaXYtY2xhc3NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjOiBcImhlbGxvXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogXCJoZWxsb1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhZGlvOiBcInRydWVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0YXJlYTogXCJ0ZXN0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlzZWxlY3Q6IFsndmFsdWUzJywgJ3ZhbHVlNCcsICdvdGhlci12YWx1ZTUnXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Q6IFwidmFsdWUyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tib3g6IFwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuXG5cbiAgICAgICAgICAgICAgICBkLnJ1bigpLnRoZW4oKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQpLmNvbnRhaW4uaHRtbCgnPGRpdiBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNsYXNzIHBhdGg6YS5iXCIgY2xhc3M9XCJkaXYtY2xhc3NcIj4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChlbGVtZW50KS5jb250YWluLmh0bWwoJzxpbnB1dCBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cInZhbHVlIHBhdGg6YS5jXCIgaWQ9XCJpbnB1dDFcIiB2YWx1ZT1cImhlbGxvXCI+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoZWxlbWVudCkuY29udGFpbi5odG1sKCc8dGV4dGFyZWEgbmFtZT1cInRleHRhcmVhXCIgaWQ9XCJ0ZXh0YXJlYVwiIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwidmFsdWUgcGF0aDphLnRleHRhcmVhXCIgdmFsdWU9XCJ0ZXN0XCI+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoZWxlbWVudCkuY29udGFpbi5odG1sKCc8aW5wdXQgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJjaGVja2VkIHBhdGg6YS5yYWRpb1wiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJyYWRpb1wiIHZhbHVlPVwicjFcIiBpZD1cInJhZGlvXCIgY2hlY2tlZD1cInRydWVcIj4nKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHRleHQudmFsdWUsICd0ZXh0IGNvbnRyb2wnKS50by5iZS5lcXVhbChkLmdldFN1YmplY3QoKVsnYSddWydjJ10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHJhZGlvLmNoZWNrZWQsICdyYWRpbyBjb250cm9sJykudG8uYmUuZXF1YWwodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QodGV4dGFyZWEudmFsdWUsICd0ZXh0YXJlYSBjb250cm9sJykudG8uYmUuZXF1YWwoZC5nZXRTdWJqZWN0KClbJ2EnXVsndGV4dGFyZWEnXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3Qoc2VsZWN0LnNlbGVjdGVkSW5kZXgsICdzZWxlY3QgY29udHJvbCcpLnRvLmJlLmVxdWFsKDEpOyAvLyBbMD0+b3RoZXItdmFsdWUsIDE9PnZhbHVlMl1cblxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG11bHRpc2VsZWN0U2VsZWN0ZWRPcHRpb25zID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtpbmRleCwgb2JqXSBvZiBPYmplY3QuZW50cmllcyhtdWx0aXNlbGVjdC5zZWxlY3RlZE9wdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlzZWxlY3RTZWxlY3RlZE9wdGlvbnMucHVzaChvYmoudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShtdWx0aXNlbGVjdFNlbGVjdGVkT3B0aW9ucyksICdtdWx0aXNlbGVjdCBjb250cm9sJykudG8uYmUuZXF1YWwoSlNPTi5zdHJpbmdpZnkoZC5nZXRTdWJqZWN0KClbJ2EnXVsnbXVsdGlzZWxlY3QnXSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGNoZWNrYm94LmNoZWNrZWQsICdjaGVja2JveCBjb250cm9sJykudG8uYmUudHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG5cbiAgICAgICAgICAgICAgICB9KS5jYXRjaChcbiAgICAgICAgICAgICAgICAgICAgZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKG5ldyBFcnJvcihlKSlcbiAgICAgICAgICAgICAgICAgICAgfSlcblxuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnR2V0IEF0dHJpYnV0ZSBQaXBlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgaWQsIG1vY2tzO1xuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBpZCA9IG5ldyBJRCgnbW9uc3RlcicpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gYCA8ZGl2IGlkPVwiYCArIGlkICsgYFwiXG4gICAgICAgICAgICBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6YSB8IGlmOnZhbHVlOlxcXFwgXCI+PC9kaXY+YFxuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdzaG91bGQgaW5jbHVkZSBzcGFjZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkLnRvU3RyaW5nKCkpXG5cbiAgICAgICAgICAgIGNvbnN0IHBpcGUgPSBkaXYuZ2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItcmVwbGFjZScpO1xuICAgICAgICAgICAgZXhwZWN0KHBpcGUubGVuZ3RoKS50by5iZS5lcXVhbCgyMCk7XG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxuICAgIGRlc2NyaWJlKCdtYW51ZWwgdXBkYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgaWQsIG1vY2tzO1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIGlkID0gbmV3IElEKCdtb25zdGVyJykudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGA8aW5wdXQgaWQ9XCJgICsgaWQgKyBgXCJkYXRhLW1vbnN0ZXItYmluZD1cInBhdGg6bXl2YWx1ZVwiPmBcbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIGdldCB2YWx1ZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnZhbHVlID0gXCJoZWxsb1wiO1xuICAgICAgICAgICAgY29uc3QgdXBkYXRlciA9IG5ldyBVcGRhdGVyKG1vY2tzKTtcbiAgICAgICAgICAgIGNvbnN0IHN1YmplY3QgPSB1cGRhdGVyLmdldFN1YmplY3QoKTtcblxuICAgICAgICAgICAgZXhwZWN0KHN1YmplY3QpLnRvLm5vdC5oYXZlLnByb3BlcnR5KCdteXZhbHVlJyk7XG4gICAgICAgICAgICB1cGRhdGVyLnJldHJpZXZlKCk7XG4gICAgICAgICAgICBleHBlY3Qoc3ViamVjdCkudG8uaGF2ZS5wcm9wZXJ0eSgnbXl2YWx1ZScpO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cblxuICAgIC8qKlxuICAgICAqIGh0dHBzOi8vZ2l0bGFiLnNjaHVrYWkuY29tL29zcy9saWJyYXJpZXMvamF2YXNjcmlwdC9tb25zdGVyLy0vaXNzdWVzLzExMlxuICAgICAqL1xuICAgIGRlc2NyaWJlKCdVcGRhdGVyKCkgMjAyMjAxMDcnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIC8vIGxhbmd1YWdlPUhUTUxcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGBcblxuICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJjb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6Y29udGVudFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgICAgIGA7XG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJ0J1Z2ZpeCAjMTEyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGFkZCAnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgICAgIGxldCBjb250YWluZXJFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRhaW5lcicpO1xuICAgICAgICAgICAgICAgIGxldCBuZXdFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5pbm5lckhUTUwgPSAneWVhaCEgPGI+VGVzdDwvYj4hJztcblxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lckhUTUwgPSBjb250YWluZXJFbGVtZW50LmlubmVySFRNTDtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdIVE1MID0gbmV3RWxlbWVudC5pbm5lckhUTUw7XG5cbiAgICAgICAgICAgICAgICBsZXQgZCA9IG5ldyBVcGRhdGVyKFxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBuZXdFbGVtZW50XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkLnJ1bigpLnRoZW4oKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChjb250YWluZXJFbGVtZW50KS5jb250YWluLmh0bWwoJzxkaXY+eWVhaCEgPGI+VGVzdDwvYj4hPC9kaXY+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH0sIDEwMClcblxuICAgICAgICAgICAgICAgIC8vIGQuc2V0Q2FsbGJhY2soJ215Zm9ybWF0dGVyJywgZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgICAgICAvLyAgICAgcmV0dXJuIGEgKyAneWVzISdcbiAgICAgICAgICAgICAgICAvLyB9KVxuICAgICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gICAgIGQucnVuKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIGV4cGVjdCh0eXBlb2YgZCkuaXMuZXF1YWwoJ29iamVjdCcpO1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgZXhwZWN0KGVsZW1lbnQpLmNvbnRhaW4uaHRtbCgnPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6dGV4dCB8IHRvbG93ZXJcIj5oYWxsbzwvZGl2PicpO1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgZXhwZWN0KGVsZW1lbnQpLmNvbnRhaW4uaHRtbCgnPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6dGV4dCB8IGNhbGw6bXlmb3JtYXR0ZXJcIj5IQUxMT3llcyE8L2Rpdj4nKTtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIGV4cGVjdChlbGVtZW50KS5jb250YWluLmh0bWwoJzxkaXYgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJzdGF0aWM6aGVsbG9cXFxcIFwiPmhlbGxvIDwvZGl2PicpO1xuICAgICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICByZXR1cm4gZG9uZSgpO1xuICAgICAgICAgICAgICAgIC8vICAgICB9KS5jYXRjaChcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIGUgPT4ge1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIGRvbmUobmV3IEVycm9yKGUpKVxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAvLyB9LCAxMDApXG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG59KTsiLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5pbXBvcnQge0xvY2FsZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9pMThuL2xvY2FsZS5tanNcIjtcbmltcG9ydCB7Z2V0TG9jYWxlT2ZEb2N1bWVudH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vbG9jYWxlLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5kZXNjcmliZSgnQXR0cmlidXRlcycsIGZ1bmN0aW9uICgpIHtcbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKClcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZ2V0TG9jYWxlT2ZEb2N1bWVudCcsIGZ1bmN0aW9uICgpIHtcblxuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcImRlXCJdLFxuICAgICAgICAgICAgW1wic2wtSVQtbmVkaXNcIl0sXG4gICAgICAgICAgICBbXCJlbi1HQlwiXSxcblxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcblxuXG4gICAgICAgICAgICBpdCgncmV0dXJuIGxhbmd1YWdlICcgKyBhLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGh0bWwgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaHRtbCcpO1xuICAgICAgICAgICAgICAgIGxldCBub2RlID0gaHRtbC5pdGVtKDApO1xuXG4gICAgICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ2xhbmcnLCBhKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZ2V0TG9jYWxlT2ZEb2N1bWVudCgpLnRvU3RyaW5nKCkpLnRvLmJlLmVxdWFsKGEpO1xuICAgICAgICAgICAgfSlcblxuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuXG4gICAgaXQoJ3JldHVybiBsYW5ndWFnZSBlbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGh0bWwgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaHRtbCcpO1xuICAgICAgICBsZXQgbm9kZSA9IGh0bWwuaXRlbSgwKTtcbiAgICAgICAgbGV0IGxhbmc9IG5vZGUuZ2V0QXR0cmlidXRlKCdsYW5nJyk7XG5cbiAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoJ2xhbmcnKTtcbiAgICAgICAgY29uc3QgbG9jYWxlID0gZ2V0TG9jYWxlT2ZEb2N1bWVudCgpO1xuICAgICAgICBleHBlY3QobG9jYWxlKS50by5iZS5pbnN0YW5jZU9mKExvY2FsZSk7XG4gICAgICAgIGV4cGVjdChsb2NhbGUubG9jYWxlU3RyaW5nKS50by5iZS5lcXVhbChuYXZpZ2F0b3IubGFuZ3VhZ2UpO1xuXG4gICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdsYW5nJywgbGFuZyk7XG4gICAgICAgIFxuICAgIH0pXG5cblxufSkiLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQge2dldERvY3VtZW50RnJhZ21lbnRGcm9tU3RyaW5nfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS91dGlsLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7VGhlbWUsIGdldERvY3VtZW50VGhlbWV9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZG9tL3RoZW1lLm1qc1wiO1xuXG5kZXNjcmliZSgnVGhlbWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ25ldyBUaGVtZSgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBUaGVtZSBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IFRoZW1lKCdteS10aGVtZScpKS5pcy5hLmluc3RhbmNlT2YoVGhlbWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gVGhlbWUtTmFtZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgVGhlbWUoJ215LXRoZW1lJykuZ2V0TmFtZSgpKS5pcy5lcXVhbCgnbXktdGhlbWUnKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cgRXJyb3IgYmVjYXVzZSBlbXB0eSBhcmd1bWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBuZXcgVGhlbWUoKSkudG8udGhyb3coVHlwZUVycm9yKVxuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBFcnJvciBiZWNhdXNlIG5vIHN0cmluZyBhcmd1bWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBuZXcgVGhlbWUoMikpLnRvLnRocm93KFR5cGVFcnJvcilcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZ2V0RG9jdW1lbnRUaGVtZSgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBUaGVtZSBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoZ2V0RG9jdW1lbnRUaGVtZSgpKS5pcy5hLmluc3RhbmNlT2YoVGhlbWUpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBEZWZhdWx0IFRoZW1lIG5hbWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoZ2V0RG9jdW1lbnRUaGVtZSgpLmdldE5hbWUoKSkuaXMuZXF1YWwoJ21vbnN0ZXInKTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdnZXREb2N1bWVudFRoZW1lKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdodG1sJykuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItdGhlbWUtbmFtZScsICd0ZXN0dGhlbWUnKTtcbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaHRtbCcpLnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLXRoZW1lLW5hbWUnKTtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiB0ZXN0dGhlbWUgVGhlbWUgbmFtZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChnZXREb2N1bWVudFRoZW1lKCkuZ2V0TmFtZSgpKS5pcy5lcXVhbCgndGVzdHRoZW1lJyk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG59KTtcblxuXG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgKiBhcyBjaGFpIGZyb20gJ2NoYWknO1xuaW1wb3J0IHtpbnRlcm5hbFN5bWJvbH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge2dldERvY3VtZW50fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS91dGlsLm1qc1wiO1xuaW1wb3J0IHtQcm94eU9ic2VydmVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL3Byb3h5b2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcbmNoYWkudXNlKGNoYWlEb20pO1xuXG5sZXQgaHRtbDEgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QxXCI+XG4gICAgPC9kaXY+XG5gO1xuXG5sZXQgaHRtbDIgPSBgXG4gICAgPGlucHV0IGRhdGEtbW9uc3Rlci1iaW5kPVwicGF0aDphXCIgaWQ9XCJ0ZXN0MlwiIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwidmFsdWUgcGF0aDphXCI+XG5gO1xuXG4vLyBkZWZpbmVkIGluIGNvbnN0YW50cy5tanNcbmNvbnN0IHVwZGF0ZXJTeW1ib2xLZXkgPSBcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL2N1c3RvbS1lbGVtZW50QEBvcHRpb25zLXVwZGF0ZXItbGlua1wiXG5jb25zdCB1cGRhdGVyU3ltYm9sU3ltYm9sID0gU3ltYm9sLmZvcih1cGRhdGVyU3ltYm9sS2V5KTtcblxuXG5kZXNjcmliZSgnRE9NJywgZnVuY3Rpb24gKCkge1xuXG4gICAgbGV0IEN1c3RvbUVsZW1lbnQsIHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCwgVGVzdENvbXBvbmVudCwgZG9jdW1lbnQsIFRlc3RDb21wb25lbnQyLCBhc3NpZ25VcGRhdGVyVG9FbGVtZW50LFxuICAgICAgICBhZGRPYmplY3RXaXRoVXBkYXRlclRvRWxlbWVudDtcblxuICAgIGRlc2NyaWJlKFwiYXNzaWduVXBkYXRlclRvRWxlbWVudFwiLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge307XG4gICAgICAgICAgICBpbml0SlNET00ob3B0aW9ucykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vc291cmNlL2RvbS91cGRhdGVyLm1qc1wiKS50aGVuKCh5eSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBhZGRPYmplY3RXaXRoVXBkYXRlclRvRWxlbWVudCA9IHl5WydhZGRPYmplY3RXaXRoVXBkYXRlclRvRWxlbWVudCddO1xuICAgICAgICAgICAgICAgICAgICBpbXBvcnQoXCIuLi8uLi8uLi9zb3VyY2UvZG9tL2N1c3RvbWVsZW1lbnQubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tRWxlbWVudCA9IG1bJ0N1c3RvbUVsZW1lbnQnXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NpZ25VcGRhdGVyVG9FbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnRzLCBvYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFkZE9iamVjdFdpdGhVcGRhdGVyVG9FbGVtZW50LmNhbGwodGhpcywgZWxlbWVudHMsIHVwZGF0ZXJTeW1ib2xTeW1ib2wsIG9iamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZShlKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwyO1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIHRoaXMgdGVzdCB0cnkgdG8gc2ltdWxhdGUgdGhlIGJ1ZyB0aGF0IHdhcyBmb3VuZCBpbiB0aGUgYXNzaWduVXBkYXRlclRvRWxlbWVudCBmdW5jdGlvbi5cbiAgICAgICAgICogVGhlIGJ1ZyB3YXMgdGhhdCB0aGUgdXBkYXRlciB3YXMgbm90IGFzc2lnbmVkIHRvIHRoZSBlbGVtZW50IHdoZW4gdGhlIGVsZW1lbnQgd2FzIGNyZWF0ZWQuXG4gICAgICAgICAqXG4gICAgICAgICAqIHVuZm9ydHVuYXRlbHksIHRoaXMgdGVzdCBkb2VzIG5vdCByZXByb2R1Y2UgdGhlIGJ1Zy5cbiAgICAgICAgICovXG4gICAgICAgIGl0KFwic2hvdWxkIGFzc2lnbiBhbiB1cGRhdGVyIHRvIGFuIGVsZW1lbnRcIiwgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QyJyk7XG5cbiAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1vY2tzXCIpLmlubmVySFRNTCkudG8uZXF1YWwoaHRtbDIpO1xuXG4gICAgICAgICAgICBjb25zdCBhID0ge2E6IDF9O1xuICAgICAgICAgICAgY29uc3QgYiA9IHtiOiAyfTtcblxuICAgICAgICAgICAgY29uc3QgYXAgPSBuZXcgUHJveHlPYnNlcnZlcihhKTtcbiAgICAgICAgICAgIGNvbnN0IGJwID0gbmV3IFByb3h5T2JzZXJ2ZXIoYik7XG5cbiAgICAgICAgICAgIGNvbnN0IHggPSBhcC5nZXRTdWJqZWN0KClcbiAgICAgICAgICAgIGNvbnN0IHkgPSBicC5nZXRTdWJqZWN0KClcblxuICAgICAgICAgICAgY29uc3Qgc2V0ID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgc2V0LmFkZChlbGVtZW50KTtcblxuICAgICAgICAgICAgYXNzaWduVXBkYXRlclRvRWxlbWVudC5jYWxsKGVsZW1lbnQsIHNldCwgYXApO1xuICAgICAgICAgICAgYXNzaWduVXBkYXRlclRvRWxlbWVudC5jYWxsKGVsZW1lbnQsIHNldCwgYnApO1xuXG4gICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkoeCkpLnRvLmVxdWFsKCd7XCJhXCI6MX0nKTtcbiAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeSh5KSkudG8uZXF1YWwoJ3tcImJcIjoyfScpO1xuXG4gICAgICAgICAgICBjb25zdCBzeSA9IHVwZGF0ZXJTeW1ib2xTeW1ib2w7XG5cbiAgICAgICAgICAgIGxldCB2ID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLW1vbnN0ZXItb2JqZWN0bGlua1wiKTtcbiAgICAgICAgICAgIGV4cGVjdCh2KS50by5lcXVhbCgnU3ltYm9sKCcgKyB1cGRhdGVyU3ltYm9sS2V5ICsgJyknKTtcblxuICAgICAgICAgICAgY29uc3QgdXBkYXRlciA9IGVsZW1lbnRbc3ldO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHYgb2YgdXBkYXRlcikge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdSBvZiB2KSB7XG4gICAgICAgICAgICAgICAgICAgIHUucnVuKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1LmVuYWJsZUV2ZW50UHJvY2Vzc2luZygpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGV4cGVjdCh1cGRhdGVyKS50by5iZS5hbi5pbnN0YW5jZW9mKFNldCk7XG4gICAgICAgICAgICBleHBlY3QodXBkYXRlcikudG8uYmUuYShcIlNldFwiKTtcblxuICAgICAgICAgICAgeC5hID0gMztcbiAgICAgICAgICAgIGJwLmdldFN1YmplY3QoKS5iID0gNDtcblxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBsZXQgbW9ja0hUTUwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1vY2tzXCIpO1xuXG4gICAgICAgICAgICAgICAgLy8gaHRtbCBleHBleHRlZDpcbiAgICAgICAgICAgICAgICAvLyA8aW5wdXQgZGF0YS1tb25zdGVyLWJpbmQ9XCJwYXRoOmFcIiBpZD1cInRlc3QyXCIgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJ2YWx1ZSBwYXRoOmFcIiBkYXRhLW1vbnN0ZXItb2JqZWN0bGluaz1cIlN5bWJvbChAc2NodWthaS9tb25zdGVyL2RvbS9AQG9iamVjdC11cGRhdGVyLWxpbmspXCIgdmFsdWU9XCIzXCI+XG5cbiAgICAgICAgICAgICAgICBleHBlY3QobW9ja0hUTUwucXVlcnlTZWxlY3RvcihcIiN0ZXN0MlwiKSkudG8uaGF2ZS52YWx1ZSgnMycpXG4gICAgICAgICAgICAgICAgZXhwZWN0KG1vY2tIVE1MLnF1ZXJ5U2VsZWN0b3IoXCIjdGVzdDJcIikpLnRvLmhhdmUuYXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItb2JqZWN0bGluaycsICdTeW1ib2woJyArIHVwZGF0ZXJTeW1ib2xLZXkgKyAnKScpXG4gICAgICAgICAgICAgICAgLy9leHBlY3QobW9ja0hUTUwpLnRvLmhhdmUuaHRtbChyZXN1bHRIVE1MKTtcblxuICAgICAgICAgICAgICAgIGV4cGVjdChlbGVtZW50LnZhbHVlKS50by5lcXVhbChcIjNcIik7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkoYXAuZ2V0UmVhbFN1YmplY3QoKSkpLnRvLmVxdWFsKCd7XCJhXCI6M30nKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkoYnAuZ2V0UmVhbFN1YmplY3QoKSkpLnRvLmVxdWFsKCd7XCJiXCI6NH0nKTtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0sIDUwKVxuXG4gICAgICAgIH0pXG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ0N1c3RvbUVsZW1lbnQoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGluaXRKU0RPTSh7fSkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBpbXBvcnQoXCIuLi8uLi8uLi9zb3VyY2UvZG9tL2N1c3RvbWVsZW1lbnQubWpzXCIpLnRoZW4oKG0pID0+IHtcblxuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tRWxlbWVudCA9IG1bJ0N1c3RvbUVsZW1lbnQnXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCA9IG1bJ3JlZ2lzdGVyQ3VzdG9tRWxlbWVudCddO1xuICAgICAgICAgICAgICAgICAgICAgICAgVGVzdENvbXBvbmVudCA9IGNsYXNzIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljIGdldFRhZygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwibW9uc3Rlci10ZXN0Y2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJDdXN0b21FbGVtZW50KFRlc3RDb21wb25lbnQpXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIFRlc3RDb21wb25lbnQyID0gY2xhc3MgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWMgZ2V0VGFnKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJtb25zdGVyLXRlc3RjbGFzczJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybiB7T2JqZWN0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldCBkZWZhdWx0cygpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbW90ZXN0OiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWluOiAnPGgxPjwvaDE+PGFydGljbGU+PHA+dGVzdDwvcD48ZGl2IGlkPVwiY29udGFpbmVyXCI+PC9kaXY+PC9hcnRpY2xlPidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyQ3VzdG9tRWxlbWVudChUZXN0Q29tcG9uZW50MilcblxuICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCdDdXN0b21FbGVtZW50KCkgd2l0aCBDb25maWcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnc2hvdWxkIHJlYWQgY29uZmlnIGZyb20gdGFnJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gYFxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIDxzY3JpcHQgaWQ9XCJjb25maWcxXCIgdHlwZT1cImFwcGxpY2F0aW9uL2pzb25cIj5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiZGVtb3Rlc3RcIjoxNDI1XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvc2NyaXB0PlxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIDxtb25zdGVyLXRlc3RjbGFzczIgaWQ9XCJ0aGlzaXNhdGVzdFwiIGRhdGEtbW9uc3Rlci1vcHRpb25zLXNlbGVjdG9yPVwiI2NvbmZpZzFcIj5cbiAgICAgICAgICAgICAgICA8L21vbnN0ZXItdGVzdGNsYXNzMj5cbiAgICAgICAgICAgICAgICBgO1xuXG4gICAgICAgICAgICAgICAgbGV0IG1vbnN0ZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGhpc2lzYXRlc3QnKTtcbiAgICAgICAgICAgICAgICBleHBlY3QobW9uc3Rlci5nZXRPcHRpb24oJ2RlbW90ZXN0JykpLmlzLmVxbCgxNDI1KTtcblxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCdjcmVhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBjdXN0b20tZWxlbWVudCBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGQgPSBuZXcgVGVzdENvbXBvbmVudCgpO1xuICAgICAgICAgICAgICAgIGV4cGVjdCh0eXBlb2YgZCkuaXMuZXF1YWwoJ29iamVjdCcpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCdjb25uZWN0IGVtcHR5IGVsZW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnZG9jdW1lbnQgc2hvdWxkIGNvbnRhaW4gbW9uc3Rlci10ZXN0Y2xhc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRlc3RjbGFzcycpO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpLmFwcGVuZENoaWxkKGQpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnbW9uc3Rlci10ZXN0Y2xhc3MnKS5sZW5ndGgpLmlzLmVxdWFsKDEpO1xuICAgICAgICAgICAgICAgIC8vIG5vIGRhdGEtbW9uc3Rlci1vYmplY3RsaW5rPVwiU3ltYm9sKG1vbnN0ZXJVcGRhdGVyKVwiIGJlY2F1c2UgaXQgaGFzIG5vdGhpbmcgdG8gdXBkYXRlXG4gICAgICAgICAgICAgICAgLy8gYnV0IGRhdGEtbW9uc3Rlci1lcnJvcj1cIkVycm9yOiBodG1sIGlzIG5vdCBzZXQuXCJcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJykpLmNvbnRhaW4uaHRtbCgnPG1vbnN0ZXItdGVzdGNsYXNzIGRhdGEtbW9uc3Rlci1lcnJvcj1cIkVycm9yOiBodG1sIGlzIG5vdCBzZXQuXCI+PC9tb25zdGVyLXRlc3RjbGFzcz4nKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnY29ubmVjdCBlbGVtZW50IHdpdGggaHRtbCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdkb2N1bWVudCBzaG91bGQgY29udGFpbiBtb25zdGVyLXRlc3RjbGFzczInLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10ZXN0Y2xhc3MyJyk7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJykuYXBwZW5kQ2hpbGQoZCk7XG5cbiAgICAgICAgICAgICAgICAvLyBpbnNlcnQgRE9NIHJ1biBpbiBleHRyYSBwcm9jZXNzIHZpYSBzZXRUaW1lb3V0IVxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdtb25zdGVyLXRlc3RjbGFzczInKS5sZW5ndGgpLmlzLmVxdWFsKDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdtb25zdGVyLXRlc3RjbGFzczInKS5pdGVtKDApLnNoYWRvd1Jvb3QuaW5uZXJIVE1MKS5pcy5lcXVhbCgnPGgxPjwvaDE+PGFydGljbGU+PHA+dGVzdDwvcD48ZGl2IGlkPVwiY29udGFpbmVyXCI+PC9kaXY+PC9hcnRpY2xlPicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLXRlc3RjbGFzczIgZGF0YS1tb25zdGVyLW9iamVjdGxpbms9XCJTeW1ib2woJyArIHVwZGF0ZXJTeW1ib2xLZXkgKyAnKVwiPjwvbW9uc3Rlci10ZXN0Y2xhc3MyPicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZShlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfSwgMTApO1xuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ09wdGlvbnMgY2hhbmdlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBpdCgnZGVsZWdhdGVzRm9jdXMgc2hvdWxkIGNoYW5nZSBmcm9tIHRydWUgdG8gZmFsc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRlc3RjbGFzcycpXG5cbiAgICAgICAgICAgICAgICBjb25zdCBvID0gZWxlbWVudFtpbnRlcm5hbFN5bWJvbF0ucmVhbFN1YmplY3Q7XG4gICAgICAgICAgICAgICAgZXhwZWN0KE9iamVjdC5pcyhlbGVtZW50W2ludGVybmFsU3ltYm9sXS5yZWFsU3ViamVjdCwgbykpLnRvLmJlLnRydWU7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZWxlbWVudFtpbnRlcm5hbFN5bWJvbF0ucmVhbFN1YmplY3Qub3B0aW9ucy5kZWxlZ2F0ZXNGb2N1cykudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZWxlbWVudFtpbnRlcm5hbFN5bWJvbF0uc3ViamVjdC5vcHRpb25zLmRlbGVnYXRlc0ZvY3VzKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIGV4cGVjdChlbGVtZW50LmdldE9wdGlvbignZGVsZWdhdGVzRm9jdXMnKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoT2JqZWN0LmlzKGVsZW1lbnRbaW50ZXJuYWxTeW1ib2xdLnJlYWxTdWJqZWN0LCBvKSkudG8uYmUudHJ1ZTtcblxuICAgICAgICAgICAgICAgIC8vIGVsZW1lbnQuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9PUFRJT05TLCBKU09OLnN0cmluZ2lmeSh7ZGVsZWdhdGVzRm9jdXM6IGZhbHNlfSkpO1xuICAgICAgICAgICAgICAgIC8vIGV4cGVjdChPYmplY3QuaXMoZWxlbWVudFtpbnRlcm5hbFN5bWJvbF0ucmVhbFN1YmplY3QsIG8pKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgICAgLy8gZXhwZWN0KGVsZW1lbnQuZ2V0T3B0aW9uKCdkZWxlZ2F0ZXNGb2N1cycpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBleHBlY3QoZWxlbWVudFtpbnRlcm5hbFN5bWJvbF0ucmVhbFN1YmplY3Qub3B0aW9ucy5kZWxlZ2F0ZXNGb2N1cykudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICAgICAgLy8gZXhwZWN0KE9iamVjdC5pcyhlbGVtZW50W2ludGVybmFsU3ltYm9sXS5yZWFsU3ViamVjdCwgbykpLnRvLmJlLnRydWU7XG5cbiAgICAgICAgICAgIH0pXG5cblxuICAgICAgICB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCdzZXRPcHRpb25zKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgWydzaGFkb3dNb2RlJywgJ3gxJ10sXG4gICAgICAgICAgICAgICAgWyd0ZW1wbGF0ZXMubWFpbicsICd4MiddLCAvLyBpcyBleHBsaWNpdGx5IHNldCB0byB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICBbJ2RlbGVnYXRlc0ZvY3VzJywgJ3g0J10sXG4gICAgICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuXG4gICAgICAgICAgICAgICAgbGV0IGtleSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgICAgIGxldCBuZXdWYWx1ZSA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICAgICAgbGV0IHRleHQgPSBrZXkgKyAnIHNob3VsZCByZXR1cm4gJyArIG5ld1ZhbHVlO1xuICAgICAgICAgICAgICAgIGlmIChuZXdWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQgPSBrZXkgKyAnIHdhcyBub3Qgc2V0LCB0aGVyZWZvcmUgZGVmYXVsdCAnICsgbmV3VmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICBpdCh0ZXh0LCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRlc3RjbGFzcycpO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZC5nZXRPcHRpb24oa2V5KSkudG8uYmUubm90LmVxdWFsKG5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHggPSBkLnNldE9wdGlvbihrZXksIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGQuZ2V0T3B0aW9uKGtleSkpLnRvLmJlLmVxdWFsKG5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCdnZXRPcHRpb25zKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbJ3NoYWRvd01vZGUnLCAnb3BlbiddLFxuICAgICAgICAgICAgICAgIFsndGVtcGxhdGVzLm1haW4nLCB1bmRlZmluZWRdLCAvLyBpcyBleHBsaWNpdGx5IHNldCB0byB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICBbJ2RlbGVnYXRlc0ZvY3VzJywgdHJ1ZV0sXG4gICAgICAgICAgICAgICAgWyd4LnkueicsIHRydWUsIHRydWVdLCAvLyB4LnkueiBpc250IHNldCwgZGVmYXVsdFZhbHVlIGlzIHVzZWRcbiAgICAgICAgICAgICAgICBbJ3gnLCB0cnVlLCB0cnVlXSAvLyB4IGlzbnQgc2V0LCBkZWZhdWx0VmFsdWUgaXMgdXNlZFxuICAgICAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cblxuICAgICAgICAgICAgICAgIGxldCBrZXkgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICBsZXQgZGVmYXVsdFZhbHVlID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgICAgICBsZXQgdGV4dCA9IGtleSArICcgc2hvdWxkIHJldHVybiAnICsgdmFsdWU7XG4gICAgICAgICAgICAgICAgaWYgKGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQgPSBrZXkgKyAnIHdhcyBub3Qgc2V0LCB0aGVyZWZvcmUgZGVmYXVsdCAnICsgZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgaXQodGV4dCwgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10ZXN0Y2xhc3MnKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHggPSBkLmdldE9wdGlvbihrZXksIGRlZmF1bHRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCh4KS50by5iZS5lcXVhbCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSlcblxuXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGxhYi5zY2h1a2FpLmNvbS9vc3MvbGlicmFyaWVzL2phdmFzY3JpcHQvbW9uc3Rlci8tL2lzc3Vlcy8xMTNcbiAgICAgICAgICovXG4gICAgICAgIGRlc2NyaWJlKCdBc3NpZ24gQ1NTU3R5bGUgYXMgQXJyYXkgd2l0aCB3cm9uZyB0eXBlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBjb25zdCBodG1sVEFHID0gJ21vbnN0ZXItdGVzdGNsYXNzLXgxJztcblxuICAgICAgICAgICAgbGV0IG1vY2tzLCBUZXN0Q29tcG9uZW50WDE7XG4gICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcblxuICAgICAgICAgICAgICAgIG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG5cblxuICAgICAgICAgICAgICAgIFRlc3RDb21wb25lbnRYMSA9IGNsYXNzIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRpYyBnZXRUYWcoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaHRtbFRBR1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgc3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3RydWVdO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm4ge09iamVjdH1cbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIGdldCBkZWZhdWx0cygpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW46ICc8aDE+dGVzdDwvaDE+J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZWdpc3RlckN1c3RvbUVsZW1lbnQoVGVzdENvbXBvbmVudFgxKVxuXG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGl0KGh0bWxUQUcgKyBcIiBzaG91bGQgdGhyb3cgRXhjZXB0aW9uXCIsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGh0bWxUQUcpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpO1xuICAgICAgICAgICAgICAgIGRpdi5hcHBlbmQoZCk7XG5cblxuICAgICAgICAgICAgICAgIGV4cGVjdChkaXYpLmNvbnRhaW4uaHRtbCgnZGF0YS1tb25zdGVyLWVycm9yPVwiVHlwZUVycm9yOiB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgQ1NTU3R5bGVTaGVldFwiJyk7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuXG4gICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgfSlcblxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGxhYi5zY2h1a2FpLmNvbS9vc3MvbGlicmFyaWVzL2phdmFzY3JpcHQvbW9uc3Rlci8tL2lzc3Vlcy8xMTNcbiAgICAgICAgICovXG4gICAgICAgIGRlc2NyaWJlKCdBc3NpZ24gQ1NTU3R5bGUgYXMgQXJyYXkgYW5kIENTU1N0eWxlc2hlZXQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IGh0bWxUQUcgPSAnbW9uc3Rlci10ZXN0Y2xhc3MteDExMy0yJztcblxuICAgICAgICAgICAgbGV0IG1vY2tzLCBUZXN0Q29tcG9uZW50WDExM1gyO1xuICAgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuXG4gICAgICAgICAgICAgICAgVGVzdENvbXBvbmVudFgxMTNYMiA9IGNsYXNzIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRpYyBnZXRUYWcoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaHRtbFRBR1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm4ge09iamVjdH1cbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIGdldCBkZWZhdWx0cygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlczoge21haW46ICc8aDE+dGVzdDwvaDE+J30sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgICAgICBzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcyA9IChuZXcgQ1NTU3R5bGVTaGVldCgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgcy5pbnNlcnRSdWxlKCdhIHsgY29sb3IgOiByZWR9Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbc107XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZWdpc3RlckN1c3RvbUVsZW1lbnQoVGVzdENvbXBvbmVudFgxMTNYMilcblxuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBpdChodG1sVEFHICsgXCIgc2hvdWxkIHRocm93IEV4Y2VwdGlvbiAyXCIsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGh0bWxUQUcpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpO1xuICAgICAgICAgICAgICAgIGRpdi5hcHBlbmQoZCk7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZC5zaGFkb3dSb290LmlubmVySFRNTCkuaXMuZXEoJzxoMT50ZXN0PC9oMT4nKTtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG5cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0bGFiLnNjaHVrYWkuY29tL29zcy9saWJyYXJpZXMvamF2YXNjcmlwdC9tb25zdGVyLy0vaXNzdWVzLzExM1xuICAgICAgICAgKi9cbiAgICAgICAgZGVzY3JpYmUoJ0Fzc2lnbiBDU1NTdHlsZSBhcyBBcnJheSBhbmQgQ1NTIGFzIHN0cmluZycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgY29uc3QgaHRtbFRBRyA9ICdtb25zdGVyLXRlc3RjbGFzcy14MTEzLTIxJztcblxuICAgICAgICAgICAgbGV0IG1vY2tzLCBUZXN0Q29tcG9uZW50WDExM1gyMjtcbiAgICAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcblxuICAgICAgICAgICAgICAgIFRlc3RDb21wb25lbnRYMTEzWDIyID0gY2xhc3MgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljIGdldFRhZygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBodG1sVEFHXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybiB7T2JqZWN0fVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgZ2V0IGRlZmF1bHRzKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVzOiB7bWFpbjogJzxoMT50ZXN0PC9oMT4nfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgICAgIHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdhIHsgY29sb3I6cmVkIH0nO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmVnaXN0ZXJDdXN0b21FbGVtZW50KFRlc3RDb21wb25lbnRYMTEzWDIyKVxuXG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGl0KGh0bWxUQUcgKyBcIiBzaG91bGQgZXEgPHN0eWxlPmEgeyBjb2xvcjpyZWQgfTwvc3R5bGU+PGgxPnRlc3Q8L2gxPlwiLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChodG1sVEFHKTtcblxuICAgICAgICAgICAgICAgIGxldCBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKTtcbiAgICAgICAgICAgICAgICBkaXYuYXBwZW5kKGQpO1xuXG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZC5zaGFkb3dSb290LmlubmVySFRNTCkuaXMuZXEoJzxzdHlsZT5hIHsgY29sb3I6cmVkIH08L3N0eWxlPjxoMT50ZXN0PC9oMT4nKTtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG5cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGxhYi5zY2h1a2FpLmNvbS9vc3MvbGlicmFyaWVzL2phdmFzY3JpcHQvbW9uc3Rlci8tL2lzc3Vlcy8xMTNcbiAgICAgICAgICovXG4gICAgICAgIGRlc2NyaWJlKCdBc3NpZ24gQ1NTU3R5bGUgYXMgQXJyYXkgYW5kIENTUyBhcyBzdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IGh0bWxUQUcgPSAnbW9uc3Rlci10ZXN0Y2xhc3MteDExMy0yMic7XG5cbiAgICAgICAgICAgIGxldCBtb2NrcywgVGVzdENvbXBvbmVudFgxMTNYMjIzO1xuICAgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuXG4gICAgICAgICAgICAgICAgVGVzdENvbXBvbmVudFgxMTNYMjIzID0gY2xhc3MgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljIGdldFRhZygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBodG1sVEFHXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybiB7T2JqZWN0fVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgZ2V0IGRlZmF1bHRzKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVzOiB7bWFpbjogJzxoMT50ZXN0PC9oMT4nfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgICAgIHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsnYSB7IGNvbG9yOnJlZCB9J107XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZWdpc3RlckN1c3RvbUVsZW1lbnQoVGVzdENvbXBvbmVudFgxMTNYMjIzKVxuXG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGl0KGh0bWxUQUcgKyBcIiBzaG91bGQgZXEgPHN0eWxlPmEgeyBjb2xvcjpyZWQgfTwvc3R5bGU+PGgxPnRlc3Q8L2gxPlwiLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChodG1sVEFHKTtcblxuICAgICAgICAgICAgICAgIGxldCBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKTtcbiAgICAgICAgICAgICAgICBkaXYuYXBwZW5kKGQpO1xuXG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZC5zaGFkb3dSb290LmlubmVySFRNTCkuaXMuZXEoJzxzdHlsZT5hIHsgY29sb3I6cmVkIH08L3N0eWxlPjxoMT50ZXN0PC9oMT4nKTtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG5cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJ2hhc05vZGUoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0IG1vY2tzO1xuICAgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBpdChcImhhc05vZGUgbW9uc3Rlci10ZXN0Y2xhc3Mgc2hvdWxkIHJldHVybiAuLi5cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10ZXN0Y2xhc3MnKTtcblxuICAgICAgICAgICAgICAgIGxldCBwMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3AnKTtcbiAgICAgICAgICAgICAgICBsZXQgdDEgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgndGVzdDEnKTtcbiAgICAgICAgICAgICAgICBwMS5hcHBlbmRDaGlsZCh0MSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgIGxldCB0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ3Rlc3QnKTtcbiAgICAgICAgICAgICAgICBwLmFwcGVuZENoaWxkKHAxKTtcbiAgICAgICAgICAgICAgICBwLmFwcGVuZENoaWxkKHQpO1xuICAgICAgICAgICAgICAgIGQuYXBwZW5kQ2hpbGQocCk7XG5cbiAgICAgICAgICAgICAgICBsZXQgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJyk7XG4gICAgICAgICAgICAgICAgZGl2LmFwcGVuZChkKTtcblxuXG4gICAgICAgICAgICAgICAgbGV0IG4xID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncCcpO1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KGQuaGFzTm9kZShuMSkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkLmhhc05vZGUodCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGQuaGFzTm9kZShwKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZC5oYXNOb2RlKHAxKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZC5oYXNOb2RlKHQxKSkudG8uYmUudHJ1ZTtcblxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgaXQoXCJoYXNOb2RlIG1vbnN0ZXItdGVzdGNsYXNzMiBzaG91bGQgcmV0dXJuIC4uLlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRlc3RjbGFzczInKTtcblxuICAgICAgICAgICAgICAgIGxldCBwMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3AnKTtcbiAgICAgICAgICAgICAgICBsZXQgdDEgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgndGVzdDEnKTtcbiAgICAgICAgICAgICAgICBwMS5hcHBlbmRDaGlsZCh0MSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgIGxldCB0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ3Rlc3QnKTtcbiAgICAgICAgICAgICAgICBwLmFwcGVuZENoaWxkKHAxKTtcbiAgICAgICAgICAgICAgICBwLmFwcGVuZENoaWxkKHQpO1xuXG5cbiAgICAgICAgICAgICAgICBsZXQgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJyk7XG4gICAgICAgICAgICAgICAgZGl2LmFwcGVuZChkKTtcblxuICAgICAgICAgICAgICAgIGxldCBhID0gZC5zaGFkb3dSb290LmdldEVsZW1lbnRCeUlkKCdjb250YWluZXInKTtcblxuICAgICAgICAgICAgICAgIGQuc2hhZG93Um9vdC5nZXRFbGVtZW50QnlJZCgnY29udGFpbmVyJykuYXBwZW5kQ2hpbGQocCk7XG5cbiAgICAgICAgICAgICAgICBsZXQgbjEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJyk7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZC5oYXNOb2RlKG4xKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGQuaGFzTm9kZSh0KSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZC5oYXNOb2RlKHApKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkLmhhc05vZGUocDEpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkLmhhc05vZGUodDEpKS50by5iZS50cnVlO1xuXG4gICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgfSlcblxuICAgIH0pO1xufSkiLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIjtcbmltcG9ydCB7Rm9jdXNNYW5hZ2VyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS9mb2N1c21hbmFnZXIubWpzXCI7XG5pbXBvcnQge2NsZWFudXBET01Gcm9tVGVzdGluZywgaW5pdE11dGF0aW9uT2JzZXJ2ZXJGb3JUZXN0aW5nfSBmcm9tIFwiLi4vLi4vdXRpbC9jbGVhbnVwZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5kZXNjcmliZSgnRm9jdXNNYW5hZ2VyJywgZnVuY3Rpb24gKCkge1xuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBpbml0TXV0YXRpb25PYnNlcnZlckZvclRlc3RpbmcoKVxuICAgIH0pXG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBjbGVhbnVwRE9NRnJvbVRlc3RpbmcoKTtcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJykuaW5uZXJIVE1MID0gJydcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ25ldycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIEZvY3VzTWFuYWdlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgRm9jdXNNYW5hZ2VyKCkpLmlzLmluc3RhbmNlb2YoRm9jdXNNYW5hZ2VyKTtcbiAgICAgICAgfSlcblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnc3RvcmUgYW5kIHJlc3RvcmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBtYW5hZ2VyO1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbWFuYWdlciA9IG5ldyBGb2N1c01hbmFnZXIoKTtcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpLmlubmVySFRNTCA9IGBcbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInRlc3RpdFwiIGlkPVwidHgxXCI+XG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJ0ZXN0aXRcIiBpZD1cInR4MlwiPlxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwidGVzdGl0XCIgaWQ9XCJ0eDNcIiBkaXNhYmxlZD5cbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInRlc3RpdFwiIGlkPVwidHg0XCI+XG4gICAgICAgICAgICA8cCBjbGFzcz1cInRlc3RpdFwiIHRhYmluZGV4PVwiMlwiIGlkPVwidHg1XCI+aGVsbG88L3A+XG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJ0ZXN0aXRcIiBpZD1cInR4NlwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInRlc3RpdFwiIGlkPVwidHg3XCI+PC9idXR0b24+XG4gICAgICAgICAgICBgO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFssIGVsZW1lbnRdIG9mIE9iamVjdC5lbnRyaWVzKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy50ZXN0aXQnKSkpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCA9ICgpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAyMDAsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMjAwLFxuICAgICAgICAgICAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAyMDAsXG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMjAwLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3J1biBpc3QnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIG1hbmFnZXIuZm9jdXMoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3R4MScpKTtcbiAgICAgICAgICAgIG1hbmFnZXIuc3RvcmVGb2N1cygpO1xuXG4gICAgICAgICAgICBjb25zdCBlMSA9IG1hbmFnZXIuZ2V0QWN0aXZlKCk7XG4gICAgICAgICAgICBleHBlY3QoZTEuZ2V0QXR0cmlidXRlKCdpZCcpLCAnZXJyb3IxJykudG8uYmUuZXF1YWwoJ3R4MScpO1xuXG4gICAgICAgICAgICBtYW5hZ2VyLmZvY3VzKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0eDInKSk7XG5cbiAgICAgICAgICAgIG1hbmFnZXIuc3RvcmVGb2N1cygpO1xuICAgICAgICAgICAgZXhwZWN0KG1hbmFnZXIuZ2V0QWN0aXZlKCkuZ2V0QXR0cmlidXRlKCdpZCcpLCAnZXJyb3IyJykudG8uYmUuZXF1YWwoJ3R4MicpO1xuICAgICAgICAgICAgbWFuYWdlci5mb2N1c05leHQoKTtcbiAgICAgICAgICAgIGV4cGVjdChtYW5hZ2VyLmdldEFjdGl2ZSgpLmdldEF0dHJpYnV0ZSgnaWQnKSwgJ2Vycm9yMycpLnRvLmJlLmVxdWFsKCd0eDQnKTtcbiAgICAgICAgICAgIG1hbmFnZXIuZm9jdXNOZXh0KCk7XG4gICAgICAgICAgICBleHBlY3QobWFuYWdlci5nZXRBY3RpdmUoKS5nZXRBdHRyaWJ1dGUoJ2lkJyksICdlcnJvcjQnKS50by5iZS5lcXVhbCgndHg1Jyk7XG4gICAgICAgICAgICBtYW5hZ2VyLnJlc3RvcmVGb2N1cygpO1xuICAgICAgICAgICAgZXhwZWN0KG1hbmFnZXIuZ2V0QWN0aXZlKCkuZ2V0QXR0cmlidXRlKCdpZCcpLCAnZXJyb3I1JykudG8uYmUuZXF1YWwoJ3R4MicpO1xuICAgICAgICAgICAgbWFuYWdlci5yZXN0b3JlRm9jdXMoKTtcbiAgICAgICAgICAgIGV4cGVjdChtYW5hZ2VyLmdldEFjdGl2ZSgpLmdldEF0dHJpYnV0ZSgnaWQnKSwgJ2Vycm9yNicpLnRvLmJlLmVxdWFsKCd0eDEnKTtcbiAgICAgICAgICAgIG1hbmFnZXIucmVzdG9yZUZvY3VzKCk7XG4gICAgICAgICAgICBleHBlY3QobWFuYWdlci5nZXRBY3RpdmUoKS5nZXRBdHRyaWJ1dGUoJ2lkJyksICdlcnJvcjcnKS50by5iZS5lcXVhbCgndHgxJyk7XG4gICAgICAgIH0pXG5cblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgncmV0dXJudHlwZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgZm9jdXNtYW5hZ2VyO1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgZm9jdXNtYW5hZ2VyID0gbmV3IEZvY3VzTWFuYWdlcigpO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdjaGVjayByZXR1cm5zJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBleHBlY3QoZm9jdXNtYW5hZ2VyLmdldEZvY3VzYWJsZSgpKS5pcy5pbnN0YW5jZW9mKEFycmF5KTtcbiAgICAgICAgICAgIGV4cGVjdChmb2N1c21hbmFnZXIuZ2V0QWN0aXZlKCkpLmlzLmluc3RhbmNlb2YoSFRNTEVsZW1lbnQpO1xuICAgICAgICAgICAgZXhwZWN0KGZvY3VzbWFuYWdlci5mb2N1c05leHQoKSkuaXMuaW5zdGFuY2VvZihGb2N1c01hbmFnZXIpO1xuICAgICAgICAgICAgZXhwZWN0KGZvY3VzbWFuYWdlci5mb2N1c1ByZXYoKSkuaXMuaW5zdGFuY2VvZihGb2N1c01hbmFnZXIpO1xuICAgICAgICAgICAgZXhwZWN0KGZvY3VzbWFuYWdlci5zdG9yZUZvY3VzKCkpLmlzLmluc3RhbmNlb2YoRm9jdXNNYW5hZ2VyKTtcbiAgICAgICAgICAgIGV4cGVjdChmb2N1c21hbmFnZXIuZm9jdXMoZG9jdW1lbnQuYm9keSkpLmlzLmluc3RhbmNlb2YoRm9jdXNNYW5hZ2VyKTtcbiAgICAgICAgICAgIGV4cGVjdChmb2N1c21hbmFnZXIucmVzdG9yZUZvY3VzKCkpLmlzLmluc3RhbmNlb2YoRm9jdXNNYW5hZ2VyKTtcblxuICAgICAgICB9KVxuXG4gICAgfSlcblxuXG59KTsiLCAiaW1wb3J0IHtcbiAgICBmaW5kRWxlbWVudFdpdGhJZFVwd2FyZHNcbn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vdXRpbC5tanNcIjtcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gJ2NoYWknO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5mdW5jdGlvbiBzZXR1cFRlc3RFbnZpcm9ubWVudCgpIHtcblxuXG4gICAgY2xhc3MgVGVzdENvbXBvbmVudCBleHRlbmRzIEhUTUxFbGVtZW50IHtcbiAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICBzdXBlcigpO1xuICAgICAgICAgICAgdGhpcy5hdHRhY2hTaGFkb3coe21vZGU6ICdvcGVuJ30pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFjdXN0b21FbGVtZW50cy5nZXQoJ3Rlc3QtY29tcG9uZW50JykpIHtcbiAgICAgICAgY3VzdG9tRWxlbWVudHMuZGVmaW5lKCd0ZXN0LWNvbXBvbmVudCcsIFRlc3RDb21wb25lbnQpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gY2xlYW51cFRlc3RFbnZpcm9ubWVudCgpIHtcbiAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xufVxuXG5kZXNjcmliZSgnZmluZEVsZW1lbnRXaXRoSWRVcHdhcmRzJywgKCkgPT4ge1xuICAgIGJlZm9yZSgoZG9uZSkgPT4ge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHNldHVwVGVzdEVudmlyb25tZW50KCk7XG4gICAgICAgICAgICBkb25lKClcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBhZnRlcigoKSA9PiB7XG4gICAgICAgIGNsZWFudXBUZXN0RW52aXJvbm1lbnQoKTtcbiAgICB9KTtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAvLyBTZXQgdXAgdGhlIERPTVxuXG4gICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBgXG4gICAgICAgICAgICA8ZGl2IGlkPVwiY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgaWQ9XCJwYXJlbnRcIj5cbiAgICAgICAgICA8ZGl2IGlkPVwiY2hpbGRcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5gO1xuXG4gICAgICAgIGNvbnN0IHNoYWRvd0hvc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzaGFkb3dIb3N0KTtcbiAgICAgICAgY29uc3Qgc2hhZG93Um9vdCA9IHNoYWRvd0hvc3QuYXR0YWNoU2hhZG93KHttb2RlOiAnb3Blbid9KTtcbiAgICAgICAgY29uc3QgaW5uZXJFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGlubmVyRWxlbWVudC5pZCA9ICdpbm5lcic7XG4gICAgICAgIHNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQoaW5uZXJFbGVtZW50KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmluZCB0aGUgZWxlbWVudCB3aXRoIHRoZSB0YXJnZXQgSUQgaW4gdGhlIG5vcm1hbCBET00nLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNoaWxkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NoaWxkJyk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGZpbmRFbGVtZW50V2l0aElkVXB3YXJkcyhjaGlsZCwgJ3BhcmVudCcpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5lcXVhbChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFyZW50JykpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmaW5kIHRoZSBlbGVtZW50IHdpdGggdGhlIHRhcmdldCBJRCBpbiB0aGUgc2hhZG93IERPTScsICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5uZXJFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignZGl2W3NoYWRvd3Jvb3RdID4gZGl2Jyk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGZpbmRFbGVtZW50V2l0aElkVXB3YXJkcyhpbm5lckVsZW1lbnQsICdpbm5lcicpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5lcXVhbChpbm5lckVsZW1lbnQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gbnVsbCBpZiB0aGUgZWxlbWVudCB3aXRoIHRoZSB0YXJnZXQgSUQgaXMgbm90IGZvdW5kJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBjaGlsZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjaGlsZCcpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBmaW5kRWxlbWVudFdpdGhJZFVwd2FyZHMoY2hpbGQsICdub25leGlzdGVudCcpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5iZS5udWxsO1xuICAgIH0pO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5cbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxubGV0IHdpbmRvd1JlYWR5O1xubGV0IGRvbVJlYWR5O1xuXG5kZXNjcmliZSgnUmVhZHknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uL3NvdXJjZS9kb20vcmVhZHkubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBkb21SZWFkeSA9IG1bJ2RvbVJlYWR5J107XG4gICAgICAgICAgICAgICAgd2luZG93UmVhZHkgPSBtWyd3aW5kb3dSZWFkeSddO1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnZG9tUmVhZHknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Jlc29sdmUgcHJvbWlzZScsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBkb21SZWFkeS50aGVuKGRvbmUpLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnd2luZG93UmVhZHknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Jlc29sdmUgcHJvbWlzZScsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICB3aW5kb3dSZWFkeS50aGVuKGRvbmUpLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxufSk7IiwgImltcG9ydCB7XG4gICAgZ2V0RG9jdW1lbnQsIGdldFdpbmRvdywgZ2V0RG9jdW1lbnRGcmFnbWVudEZyb21TdHJpbmdcbn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vdXRpbC5tanNcIjtcblxuaW1wb3J0IHtnZXRDb250YWluaW5nRG9jdW1lbnR9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZG9tL3V0aWwubWpzXCI7XG5cbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuXG5kZXNjcmliZSgnRE9NJywgZnVuY3Rpb24gKCkge1xuICAgIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGluaXRKU0RPTSgpO1xuICAgIH0pXG4gICAgZGVzY3JpYmUoJ2dldERvY3VtZW50KCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGRvY3VtZW50IG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBkID0gZ2V0RG9jdW1lbnQoKTtcbiAgICAgICAgICAgIGV4cGVjdCh0eXBlb2YgZCkuaXMuZXF1YWwoJ29iamVjdCcpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdnZXRXaW5kb3coKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gZG9jdW1lbnQgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGQgPSBnZXRXaW5kb3coKTtcbiAgICAgICAgICAgIGV4cGVjdCh0eXBlb2YgZCkuaXMuZXF1YWwoJ29iamVjdCcpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdnZXREb2N1bWVudEZyYWdtZW50RnJvbVN0cmluZygpJywgZnVuY3Rpb24gKCkge1xuXG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyc8ZGl2PjwvZGl2PiddLFxuICAgICAgICAgICAgWyc8ZGl2PjxkaXY+MjwvZGl2PjwvZGl2PiddLFxuICAgICAgICAgICAgWyc8ZGl2PjxkaXY+MjwvZGl2PicsICc8ZGl2PjxkaXY+MjwvZGl2PjwvZGl2PiddLCAvLyB0ZXN0IGludmFsaWQgaHRtbFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGlmICghYikgYiA9IGE7XG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGRvY3VtZW50RnJhZ21lbnQgb2JqZWN0ICcgKyBhLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGZyYWdtZW50ID0gZ2V0RG9jdW1lbnRGcmFnbWVudEZyb21TdHJpbmcoYSk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGZyYWdtZW50KS50by5iZS5pbnN0YW5jZU9mKERvY3VtZW50RnJhZ21lbnQpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgIGRpdi5hcHBlbmRDaGlsZChmcmFnbWVudC5jbG9uZU5vZGUodHJ1ZSkpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkaXYuaW5uZXJIVE1MKS50by5iZS5lcXVhbChiKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxuICAgIGRlc2NyaWJlKCdnZXRDb250YWluaW5nRG9jdW1lbnQnLCAoKSA9PiB7XG4gICAgICAgIGxldCAganNEb21Eb2N1bWVudDtcblxuICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAganNEb21Eb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG4gICAgICAgICB9KTtcbiAgICAgICAgLy9cbiAgICAgICAgLy8gYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgLy8gICAgIGRvbS53aW5kb3cuY2xvc2UoKTtcbiAgICAgICAgLy8gfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciB3aGVuIGNhbGxlZCB3aXRoIGFuIGludmFsaWQgYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT4gZ2V0Q29udGFpbmluZ0RvY3VtZW50KG51bGwpKS50by50aHJvdygnSW52YWxpZCBhcmd1bWVudC4gRXhwZWN0ZWQgYW4gSFRNTEVsZW1lbnQuJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBjb3JyZWN0IGNvbnRhaW5pbmcgZG9jdW1lbnQgZm9yIGFuIGVsZW1lbnQgaW4gdGhlIG1haW4gZG9jdW1lbnQnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0ganNEb21Eb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5pbmdEb2N1bWVudCA9IGdldENvbnRhaW5pbmdEb2N1bWVudChlbGVtZW50KTtcblxuICAgICAgICAgICAgZXhwZWN0KGNvbnRhaW5pbmdEb2N1bWVudCkudG8ubnVsbDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIGNvcnJlY3QgY29udGFpbmluZyBkb2N1bWVudCBmb3IgYW4gZWxlbWVudCBpbnNpZGUgYSBzaGFkb3cgcm9vdCcsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGhvc3QgPSBqc0RvbURvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgY29uc3Qgc2hhZG93Um9vdCA9IGhvc3QuYXR0YWNoU2hhZG93KHsgbW9kZTogJ29wZW4nIH0pO1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGpzRG9tRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICAgICAgc2hhZG93Um9vdC5hcHBlbmRDaGlsZChlbGVtZW50KTtcblxuICAgICAgICAgICAgY29uc3QgY29udGFpbmluZ0RvY3VtZW50ID0gZ2V0Q29udGFpbmluZ0RvY3VtZW50KGVsZW1lbnQpO1xuICAgICAgICAgICAgZXhwZWN0KGNvbnRhaW5pbmdEb2N1bWVudCkudG8ubm90Lm51bGw7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBjb3JyZWN0IGNvbnRhaW5pbmcgZG9jdW1lbnQgZm9yIGFuIGVsZW1lbnQgaW5zaWRlIGEgbmVzdGVkIHNoYWRvdyByb290JywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb3V0ZXJIb3N0ID0ganNEb21Eb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGNvbnN0IG91dGVyU2hhZG93Um9vdCA9IG91dGVySG9zdC5hdHRhY2hTaGFkb3coeyBtb2RlOiAnb3BlbicgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGlubmVySG9zdCA9IGpzRG9tRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBvdXRlclNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQoaW5uZXJIb3N0KTtcblxuICAgICAgICAgICAgY29uc3QgaW5uZXJTaGFkb3dSb290ID0gaW5uZXJIb3N0LmF0dGFjaFNoYWRvdyh7IG1vZGU6ICdvcGVuJyB9KTtcblxuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGpzRG9tRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICAgICAgaW5uZXJTaGFkb3dSb290LmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuXG4gICAgICAgICAgICBjb25zdCBjb250YWluaW5nRG9jdW1lbnQgPSBnZXRDb250YWluaW5nRG9jdW1lbnQoZWxlbWVudCk7XG4gICAgICAgICAgICBleHBlY3QoY29udGFpbmluZ0RvY3VtZW50KS50by5ub3QubnVsbDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gbnVsbCB3aGVuIHRoZSBlbGVtZW50IGlzIG5vdCBhdHRhY2hlZCB0byBhbnkgZG9jdW1lbnQnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkZXRhY2hlZEVsZW1lbnQgPSBqc0RvbURvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgZGV0YWNoZWRFbGVtZW50LnJlbW92ZSgpO1xuXG4gICAgICAgICAgICBjb25zdCBjb250YWluaW5nRG9jdW1lbnQgPSBnZXRDb250YWluaW5nRG9jdW1lbnQoZGV0YWNoZWRFbGVtZW50KTtcbiAgICAgICAgICAgIGV4cGVjdChjb250YWluaW5nRG9jdW1lbnQpLnRvLmJlLm51bGw7XG4gICAgICAgIH0pO1xuICAgIH0pOyAgICBcbiAgICBcbn0pOyIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCAqIGFzIGNoYWkgZnJvbSAnY2hhaSc7XG5pbXBvcnQge2dldERvY3VtZW50fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS91dGlsLm1qc1wiO1xuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcblxuLy8gbGV0IGh0bWwxID0gYFxuLy8gICAgIDxkaXYgaWQ9XCJzY3JpcHRob3N0XCI+XG4vLyAgICAgPC9kaXY+XG4vLyAgICBcbi8vICAgICA8ZGl2PlxuLy8gICAgIDxcbi8vIDwvZGl2PlxuLy8gYDtcblxuXG4vLyBkZWZpbmVkIGluIGNvbnN0YW50cy5tanNcbi8vIGNvbnN0IHVwZGF0ZXJTeW1ib2xLZXkgPSBcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL2N1c3RvbS1lbGVtZW50QEBvcHRpb25zLXVwZGF0ZXItbGlua1wiXG4vLyBjb25zdCB1cGRhdGVyU3ltYm9sU3ltYm9sID0gU3ltYm9sLmZvcih1cGRhdGVyU3ltYm9sS2V5KTtcblxuXG5cbmRlc2NyaWJlKCdET00nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBsZXQgQ3VzdG9tRWxlbWVudCwgcmVnaXN0ZXJDdXN0b21FbGVtZW50LCBUZXN0Q29tcG9uZW50LCBkb2N1bWVudCwgVGVzdENvbXBvbmVudDIsYXNzaWduVXBkYXRlclRvRWxlbWVudDtcblxuICAgIGRlc2NyaWJlKCdpbml0RnJvbVNjcmlwdEhvc3QoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBjb25zdCByYW5kb21UYWdOdW1iZXIgPSBcIm1vbnN0ZXItdGVzdFwiK01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDApO1xuICAgICAgICBcbiAgICAgICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uL3NvdXJjZS9kb20vY3VzdG9tZWxlbWVudC5tanNcIikudGhlbigobSkgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21FbGVtZW50ID0gbVsnQ3VzdG9tRWxlbWVudCddO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJDdXN0b21FbGVtZW50ID0gbVsncmVnaXN0ZXJDdXN0b21FbGVtZW50J107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIFRlc3RDb21wb25lbnQyID0gY2xhc3MgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWMgZ2V0VGFnKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmFuZG9tVGFnTnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICogQHJldHVybiB7T2JqZWN0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldCBkZWZhdWx0cygpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Q6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWluOiAnPGgxPjwvaDE+PGFydGljbGU+PHA+dGVzdDwvcD48ZGl2IGlkPVwiY29udGFpbmVyXCI+PC9kaXY+PC9hcnRpY2xlPidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyQ3VzdG9tRWxlbWVudChUZXN0Q29tcG9uZW50MilcblxuICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnY2FsbCBjYWxsYmFjaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdzaG91bGQgbm90IGZvdW5kIGNhbGxiYWNrIGFuZCBhZGQgZXJyb3IgYXR0cmlidXRlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gYDxkaXYgaWQ9XCJjYWxsLWJhY2staG9zdFwiPjwvZGl2PjxkaXYgaWQ9XCJjb250YWluZXJcIj48L2Rpdj5gO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGxldCBjb250cm9sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChyYW5kb21UYWdOdW1iZXIpO1xuICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItc2NyaXB0LWhvc3QnLCBcImNhbGwtYmFjay1ob3N0XCIpO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250YWluZXInKS5hcHBlbmRDaGlsZChjb250cm9sKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoY29udHJvbC5nZXRPcHRpb24oJ3Rlc3QnKSkuaXMuZXFsKDApO1xuICAgICAgICAgICAgICAgIGV4cGVjdChjb250cm9sLmhhc0F0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLWVycm9yJykpLmlzLnRydWU7XG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGZvdW5kIGNhbGxiYWNrIGluaXRDdXN0b21Db250cm9sQ2FsbGJhY2snLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBgPGRpdiBpZD1cImNhbGwtYmFjay1ob3N0XCI+PC9kaXY+PGRpdiBpZD1cImNvbnRhaW5lclwiPjwvZGl2PmA7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NhbGwtYmFjay1ob3N0Jyk7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyLmluaXRDdXN0b21Db250cm9sQ2FsbGJhY2sgPSBmdW5jdGlvbiAoY29udHJvbCkge1xuICAgICAgICAgICAgICAgICAgICBjb250cm9sLnNldE9wdGlvbigndGVzdCcsIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBsZXQgY29udHJvbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocmFuZG9tVGFnTnVtYmVyKTtcbiAgICAgICAgICAgICAgICBjb250cm9sLnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLXNjcmlwdC1ob3N0JywgXCJjYWxsLWJhY2staG9zdFwiKTtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGFpbmVyJykuYXBwZW5kQ2hpbGQoY29udHJvbCk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGNvbnRyb2wuZ2V0T3B0aW9uKCd0ZXN0JykpLmlzLmVxbCgxKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoY29udHJvbC5oYXNBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1lcnJvcicpKS5pcy5mYWxzZTtcblxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGl0KCdzaG91bGQgZm91bmQgY2FsbGJhY2sgaW5pdEN1c3RvbUNvbnRyb2xDYWxsYmFjayBmcm9tIHNlbGYnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBgPGRpdiBpZD1cImNhbGwtYmFjay1ob3N0XCI+PC9kaXY+PGRpdiBpZD1cImNvbnRhaW5lclwiPjwvZGl2PmA7XG5cbiAgICAgICAgICAgICAgICBsZXQgY29udHJvbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocmFuZG9tVGFnTnVtYmVyKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoY29udHJvbC5nZXRPcHRpb24oJ3Rlc3QnKSkuaXMuZXFsKDApO1xuICAgICAgICAgICAgICAgIGNvbnRyb2wuaW5pdEN1c3RvbUNvbnRyb2xDYWxsYmFjayA9IGZ1bmN0aW9uIChjb250cm9sKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0T3B0aW9uKCd0ZXN0JywgMik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItc2NyaXB0LWhvc3QnLCBcImNhbGwtYmFjay1ob3N0XCIpO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250YWluZXInKS5hcHBlbmRDaGlsZChjb250cm9sKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoY29udHJvbC5nZXRPcHRpb24oJ3Rlc3QnKSkuaXMuZXFsKDIpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChjb250cm9sLmhhc0F0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLWVycm9yJykpLmlzLmZhbHNlO1xuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcblxuICAgIH0pO1xufSkiLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gJ2NoYWknO1xuaW1wb3J0IHtnZXRTbG90dGVkTm9kZXN9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZG9tL3Nsb3R0ZWQubWpzXCI7XG5cblxuZGVzY3JpYmUoJ2dldFNsb3R0ZWROb2RlcycsICgpID0+IHtcblxuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgU2V0IGlmIHRoZXJlIGlzIG5vIFNoYWRvd1Jvb3QnLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChnZXRTbG90dGVkTm9kZXMpLmlzLmEoJ2Z1bmN0aW9uJyk7XG4gICAgfSk7XG5cblxufSk7XG5cbiIsICJcbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cbmltcG9ydCB7XG4gICAgYWRkQXR0cmlidXRlVG9rZW4sXG4gICAgYWRkVG9PYmplY3RMaW5rLFxuICAgIGNsZWFyQXR0cmlidXRlVG9rZW5zLFxuICAgIGNvbnRhaW5zQXR0cmlidXRlVG9rZW4sXG4gICAgZmluZENsb3Nlc3RCeUF0dHJpYnV0ZSxcbiAgICBmaW5kQ2xvc2VzdE9iamVjdExpbmssXG4gICAgZ2V0TGlua2VkT2JqZWN0cyxcbiAgICBoYXNPYmplY3RMaW5rLFxuICAgIHJlbW92ZUF0dHJpYnV0ZVRva2VuLFxuICAgIHJlbW92ZU9iamVjdExpbmssXG4gICAgcmVwbGFjZUF0dHJpYnV0ZVRva2VuLFxuICAgIHRvZ2dsZUF0dHJpYnV0ZVRva2VuLFxuICAgIGZpbmRDbG9zZXN0QnlDbGFzc1xufSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuXG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmxldCBodG1sMSwgaHRtbDIsIGh0bWwzO1xuXG5kZXNjcmliZSgnQXR0cmlidXRlcycsIGZ1bmN0aW9uICgpIHtcbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBodG1sMSA9IGA8ZGl2IGlkPVwidGVzdDFcIj48L2Rpdj5gO1xuICAgICAgICBodG1sMiA9IGA8ZGl2IGlkPVwidGVzdDFcIj5cbiAgICA8ZGl2IGlkPVwic3ViMVwiPlxuICAgICAgICA8ZGl2IGlkPVwic3ViMlwiPlxuICAgICAgICAgICAgPGRpdiBpZD1cInN1YjNcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGlkPVwic3ViNFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwic3ViNVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG5gO1xuICAgICAgICBcbiAgICAgICAgaHRtbDMgPSBgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInRlc3QxXCI+XG4gICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInN1YjFcIiBpZD1cImExXCIgY2xhc3M9XCJzdWIxXCI+XG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJzdWIyXCIgaWQ9XCJhMlwiIGNsYXNzPVwic3ViMlwiPlxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInN1YjNcIiBpZD1cImEzXCIgY2xhc3M9XCJzdWIzXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInN1YjRcIiBpZD1cImE0XCIgY2xhc3M9XCJzdWI0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJzdWI1XCIgaWQ9XCJhNVwiIGNsYXNzPVwic3ViNVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG5gO1xuXG5cbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKClcbiAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdPYmplY3RMaW5rJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGNvbnN0IHN5bWJvbCA9IFN5bWJvbCgnbXl0ZXN0Jyk7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3Nob3VsZCBoYW5kbGUgb2JqZWN0LWxpbmtzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IG9iaiA9IHthOiAxfTtcbiAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJyk7XG4gICAgICAgICAgICBleHBlY3QoaGFzT2JqZWN0TGluayhlbGVtZW50LCBzeW1ib2wpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgIGFkZFRvT2JqZWN0TGluayhlbGVtZW50LCBzeW1ib2wsIG9iaik7XG4gICAgICAgICAgICBleHBlY3QoaGFzT2JqZWN0TGluayhlbGVtZW50LCBzeW1ib2wpKS50by5iZS50cnVlO1xuXG4gICAgICAgICAgICBsZXQgbyA9IGdldExpbmtlZE9iamVjdHMoZWxlbWVudCwgc3ltYm9sKS5uZXh0KCk7XG4gICAgICAgICAgICBleHBlY3Qoby52YWx1ZSkudG8uZXF1YWwob2JqKTtcblxuICAgICAgICAgICAgcmVtb3ZlT2JqZWN0TGluayhlbGVtZW50LCBzeW1ib2wpO1xuICAgICAgICAgICAgZXhwZWN0KGhhc09iamVjdExpbmsoZWxlbWVudCwgc3ltYm9sKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT4gZ2V0TGlua2VkT2JqZWN0cyhlbGVtZW50LCBzeW1ib2wpKS50by50aHJvdyhFcnJvcik7XG4gICAgICAgIH0pXG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2ZpbmRDbG9zZXN0T2JqZWN0TGluaygpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGNvbnN0IHN5bWJvbCA9IFN5bWJvbCgnbXl0ZXN0Jyk7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwyO1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gb2JqZWN0bGluaycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0IHN1YjQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3ViNCcpXG4gICAgICAgICAgICBsZXQgc3ViMiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdWIyJylcblxuICAgICAgICAgICAgbGV0IG9iaiA9IHt9O1xuXG4gICAgICAgICAgICBleHBlY3QoaGFzT2JqZWN0TGluayhzdWIyLCBzeW1ib2wpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgIGFkZFRvT2JqZWN0TGluayhzdWIyLCBzeW1ib2wsIG9iaik7XG4gICAgICAgICAgICBleHBlY3QoaGFzT2JqZWN0TGluayhzdWIyLCBzeW1ib2wpKS50by5iZS50cnVlO1xuXG4gICAgICAgICAgICBsZXQgZWxlbWVudCA9IGZpbmRDbG9zZXN0T2JqZWN0TGluayhzdWI0KTtcbiAgICAgICAgICAgIGV4cGVjdChlbGVtZW50KS5pcy5pbnN0YW5jZU9mKEhUTUxEaXZFbGVtZW50KTtcbiAgICAgICAgICAgIGV4cGVjdChlbGVtZW50LmdldEF0dHJpYnV0ZSgnaWQnKSkudG8uYmUuZXF1YWwoJ3N1YjInKTtcblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ0F0dHJpYnV0ZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMztcbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCdmaW5kIGNsb3Nlc3QgQXR0cmlidXRlcycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFsnYTUnLCAnZGF0YS1tb25zdGVyLXJvbGUnLCB1bmRlZmluZWQsICdzdWI1J10sXG4gICAgICAgICAgICAgICAgWydhNScsICdkYXRhLW1vbnN0ZXItcm9sZScsICdzdWIzJywgJ3N1YjMnXSxcbiAgICAgICAgICAgICAgICBbJ2E1JywgJ2RhdGEtbW9uc3Rlci1yb2xlJywgJ3N1YjEnLCAnc3ViMSddLFxuICAgICAgICAgICAgICAgIFsnYTQnLCAnZGF0YS1tb25zdGVyLXJvbGUnLCAnc3ViMScsICdzdWIxJ10sXG4gICAgICAgICAgICAgICAgWydhMycsICdkYXRhLW1vbnN0ZXItcm9sZScsICdzdWIxJywgJ3N1YjEnXSxcbiAgICAgICAgICAgICAgICBbJ2EyJywgJ2RhdGEtbW9uc3Rlci1yb2xlJywgdW5kZWZpbmVkLCAnc3ViMiddLFxuICAgICAgICAgICAgICAgIFsnYTUnLCAnZGF0YS1tb25zdGVyLXJvbGUnLCAnc3ViNScsICdzdWI1J11cbiAgICAgICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgICAgIGl0KCdmaW5kQ2xvc2VzdEJ5QXR0cmlidXRlKCcgKyBhICsgJywgJyArIGIgKyAnLCcgKyBjICsgJykgc2hvdWxkIHJldHVybiAnICsgZCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZmluZENsb3Nlc3RCeUF0dHJpYnV0ZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhKSwgYiwgYykuZ2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItcm9sZScpKS50by5iZS5lcXVhbChkKTtcbiAgICAgICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTsgXG4gICAgICAgIFxuICAgICAgICBkZXNjcmliZSgnZmluZCBjbG9zZXN0IEVsZW1lbnQgd2l0aCBjbGFzcycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFsnYTUnLCAgJ3N1YjMnLCAnc3ViMyddLFxuICAgICAgICAgICAgICAgIFsnYTUnLCAgJ3N1YjEnLCAnc3ViMSddLFxuICAgICAgICAgICAgICAgIFsnYTQnLCAgJ3N1YjEnLCAnc3ViMSddLFxuICAgICAgICAgICAgICAgIFsnYTMnLCAgJ3N1YjEnLCAnc3ViMSddLFxuICAgICAgICAgICAgICAgIFsnYTUnLCAgJ3N1YjUnLCAnc3ViNSddXG4gICAgICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgICAgIGl0KCdmaW5kQ2xvc2VzdEJ5Q2xhc3MoJyArIGEgKyAnLCAnICsgYiArICcpIHNob3VsZCByZXR1cm4gJyArIGMsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGZpbmRDbG9zZXN0QnlDbGFzcyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhKSwgYikuZ2V0QXR0cmlidXRlKCdjbGFzcycpKS50by5iZS5lcXVhbChjKTtcbiAgICAgICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdBdHRyaWJ1dGVzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGNvbnN0IGF0cmlidXRlS2V5ID0gJ2RhdGEtdGVzdCc7XG5cbiAgICAgICAgaXQoJ3RvZ2dsZUF0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGtleSwgdmFsdWUpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKTtcbiAgICAgICAgICAgIGV4cGVjdChlbGVtZW50Lmhhc0F0dHJpYnV0ZShhdHJpYnV0ZUtleSkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoYXRyaWJ1dGVLZXksICdhcHBsZSBiYW5hbm5hJylcbiAgICAgICAgICAgIHRvZ2dsZUF0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGF0cmlidXRlS2V5LCAncGluYXBwbGUnKTtcbiAgICAgICAgICAgIGV4cGVjdChlbGVtZW50LmdldEF0dHJpYnV0ZShhdHJpYnV0ZUtleSkpLnRvLmJlLmVxdWFsKCdhcHBsZSBiYW5hbm5hIHBpbmFwcGxlJyk7XG4gICAgICAgICAgICB0b2dnbGVBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBhdHJpYnV0ZUtleSwgJ3BpbmFwcGxlJyk7XG4gICAgICAgICAgICBleHBlY3QoZWxlbWVudC5nZXRBdHRyaWJ1dGUoYXRyaWJ1dGVLZXkpKS50by5iZS5lcXVhbCgnYXBwbGUgYmFuYW5uYScpO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdhZGRBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBrZXksIHZhbHVlKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJyk7XG4gICAgICAgICAgICBleHBlY3QoZWxlbWVudC5oYXNBdHRyaWJ1dGUoYXRyaWJ1dGVLZXkpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgIGFkZEF0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGF0cmlidXRlS2V5LCAncGluYXBwbGUnKTtcbiAgICAgICAgICAgIGV4cGVjdChlbGVtZW50LmdldEF0dHJpYnV0ZShhdHJpYnV0ZUtleSkpLnRvLmJlLmVxdWFsKCdwaW5hcHBsZScpO1xuICAgICAgICAgICAgYWRkQXR0cmlidXRlVG9rZW4oZWxlbWVudCwgYXRyaWJ1dGVLZXksICdiYW5hbm5hJyk7XG4gICAgICAgICAgICBleHBlY3QoZWxlbWVudC5nZXRBdHRyaWJ1dGUoYXRyaWJ1dGVLZXkpKS50by5iZS5lcXVhbCgncGluYXBwbGUgYmFuYW5uYScpO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdyZW1vdmVBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBrZXksIHZhbHVlKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJyk7XG4gICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShhdHJpYnV0ZUtleSwgJ2FwcGxlIGJhbmFubmEgbGVtbW9uJylcbiAgICAgICAgICAgIHJlbW92ZUF0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGF0cmlidXRlS2V5LCAncGluYXBwbGUnKTtcbiAgICAgICAgICAgIGV4cGVjdChlbGVtZW50LmdldEF0dHJpYnV0ZShhdHJpYnV0ZUtleSkpLnRvLmJlLmVxdWFsKCdhcHBsZSBiYW5hbm5hIGxlbW1vbicpO1xuICAgICAgICAgICAgcmVtb3ZlQXR0cmlidXRlVG9rZW4oZWxlbWVudCwgYXRyaWJ1dGVLZXksICdiYW5hbm5hJyk7XG4gICAgICAgICAgICBleHBlY3QoZWxlbWVudC5nZXRBdHRyaWJ1dGUoYXRyaWJ1dGVLZXkpKS50by5iZS5lcXVhbCgnYXBwbGUgbGVtbW9uJyk7XG5cbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnY29udGFpbnNBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBrZXksIHZhbHVlKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJyk7XG4gICAgICAgICAgICBleHBlY3QoY29udGFpbnNBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBhdHJpYnV0ZUtleSwgJ3BpbmFwcGxlJykpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoYXRyaWJ1dGVLZXksICdhcHBsZSBiYW5hbm5hJylcbiAgICAgICAgICAgIGV4cGVjdChjb250YWluc0F0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGF0cmlidXRlS2V5LCAncGluYXBwbGUnKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBleHBlY3QoY29udGFpbnNBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBhdHJpYnV0ZUtleSwgJ2JhbmFubmEnKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgIGV4cGVjdChjb250YWluc0F0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGF0cmlidXRlS2V5LCAnYXBwbGUnKSkudG8uYmUudHJ1ZTtcblxuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCcgcmVwbGFjZUF0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGtleSwgdmFsdWUpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKTtcbiAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKGF0cmlidXRlS2V5LCAnYXBwbGUgYmFuYW5uYSB0b21hdG8nKVxuICAgICAgICAgICAgcmVwbGFjZUF0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGF0cmlidXRlS2V5LCAndG9tYXRvJywgJ2xlbW1vbicpO1xuICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0cmlidXRlS2V5KSkudG8uYmUuZXF1YWwoJ2FwcGxlIGJhbmFubmEgbGVtbW9uJyk7XG4gICAgICAgICAgICByZXBsYWNlQXR0cmlidXRlVG9rZW4oZWxlbWVudCwgYXRyaWJ1dGVLZXksICdiYW5hbm5hJywgJ3BlYXInKTtcbiAgICAgICAgICAgIGV4cGVjdChlbGVtZW50LmdldEF0dHJpYnV0ZShhdHJpYnV0ZUtleSkpLnRvLmJlLmVxdWFsKCdhcHBsZSBwZWFyIGxlbW1vbicpO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdjbGVhckF0dHJpYnV0ZVRva2VucyhlbGVtZW50LCBrZXkpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKTtcbiAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKGF0cmlidXRlS2V5LCAnYXBwbGUgYmFuYW5uYScpXG4gICAgICAgICAgICBjbGVhckF0dHJpYnV0ZVRva2VucyhlbGVtZW50LCBhdHJpYnV0ZUtleSk7XG4gICAgICAgICAgICBleHBlY3QoZWxlbWVudC5nZXRBdHRyaWJ1dGUoYXRyaWJ1dGVLZXkpKS50by5iZS5lcXVhbCgnJyk7XG5cbiAgICAgICAgfSlcblxuXG4gICAgfSlcbn0pIiwgIid1c2Ugc3RyaWN0JztcblxuXG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxubGV0IFJlc291cmNlLERlcml2ZWRSZXNvdXJjZTtcblxuXG5cbmRlc2NyaWJlKCdSZXNvdXJjZScsIGZ1bmN0aW9uKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuXG4gICAgICAgICAgICBpbXBvcnQoXCIuLi8uLi8uLi9zb3VyY2UvZG9tL3Jlc291cmNlLm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgUmVzb3VyY2UgPSBtWydSZXNvdXJjZSddO1xuXG5cbiAgICAgICAgICAgICAgICBEZXJpdmVkUmVzb3VyY2UgPSBjbGFzcyAgZXh0ZW5kcyBSZXNvdXJjZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGF0YS11cmxcIjogXCJodHRwOi8vZXhhbXBsZS5jb21cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgc3RhdGljIGdldFVSTEF0dHJpYnV0ZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnZGF0YS11cmwnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ0Rlcml2ZWRSZXNvdXJjZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIGluc3RhbmNlb2YgUmVzb3VyY2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IERlcml2ZWRSZXNvdXJjZSgpKS50by5iZS5hbi5pbnN0YW5jZW9mKFJlc291cmNlKTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG59KTsiLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5pbXBvcnQge1Jlc291cmNlTWFuYWdlcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vcmVzb3VyY2VtYW5hZ2VyLm1qc1wiO1xuaW1wb3J0IHtjbGVhbnVwRE9NRnJvbVRlc3RpbmcsIGluaXRNdXRhdGlvbk9ic2VydmVyRm9yVGVzdGluZ30gZnJvbSBcIi4uLy4uL3V0aWwvY2xlYW51cGRvbS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxuZGVzY3JpYmUoJ1Jlc291cmNlTWFuYWdlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGxldCBmZXRjaFJlZmVyZW5jZSwgcmV0dXJuU3RhdHVzO1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgfSk7XG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBnbG9iYWxUaGlzWydmZXRjaCddID0gZmV0Y2hSZWZlcmVuY2U7XG4gICAgICAgIGNsZWFudXBET01Gcm9tVGVzdGluZygpO1xuICAgIH0pXG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcblxuICAgICAgICBpbml0TXV0YXRpb25PYnNlcnZlckZvclRlc3RpbmcoKVxuXG4gICAgICAgIHJldHVyblN0YXR1cyA9IDIwMDtcbiAgICAgICAgZmV0Y2hSZWZlcmVuY2UgPSBnbG9iYWxUaGlzWydmZXRjaCddO1xuICAgICAgICBnbG9iYWxUaGlzWydmZXRjaCddID0gZnVuY3Rpb24gKHVybCwgb3B0aW9ucykge1xuXG4gICAgICAgICAgICBpZiAoIXVybCkgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHVybCcpXG5cbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYTogXCJ0ZXN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1czogcmV0dXJuU3RhdHVzXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgIH07XG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ25ldycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ25ldyBSZXNvdXJjZU1hbmFnZXIoKSBzaG91bGQgcmV0dXJuIFJlc291cmNlTWFuYWdlciBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgZCA9IG5ldyBSZXNvdXJjZU1hbmFnZXIoKTtcbiAgICAgICAgICAgIGV4cGVjdChkKS50by5iZS5pbnN0YW5jZU9mKFJlc291cmNlTWFuYWdlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2xvYWQgcmVzb3VyY2VzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBtYW5hZ2VyO1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbWFuYWdlciA9IG5ldyBSZXNvdXJjZU1hbmFnZXIoKTtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnYWRkIHNjcmlwdCBzaG91bGQgaW5zdGFuY2Ugb2YgUmVzb3VyY2VNYW5hZ2VyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG1hbmFnZXIuYWRkU2NyaXB0KCcvZXhhbXBsZS5qcycpKS50by5iZS5pbnN0YW5jZU9mKFJlc291cmNlTWFuYWdlcik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdhZGQgc3R5bGUgc2hvdWxkIGluc3RhbmNlIG9mIFJlc291cmNlTWFuYWdlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChtYW5hZ2VyLmFkZFN0eWxlc2hlZXQoJy9zdHlsZS5qcycpKS50by5iZS5pbnN0YW5jZU9mKFJlc291cmNlTWFuYWdlcik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdhZGQgZGF0YSBzaG91bGQgaW5zdGFuY2Ugb2YgUmVzb3VyY2VNYW5hZ2VyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG1hbmFnZXIuYWRkRGF0YSgnL2RhdGEuanNvbicpKS50by5iZS5pbnN0YW5jZU9mKFJlc291cmNlTWFuYWdlcik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCdjb25uZWN0IHJlc291cmNlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdhZGQgc2NyaXB0IGFuZCBjb25uZWN0IHNob3VsZCBpbnN0YW5jZSBvZiBSZXNvdXJjZU1hbmFnZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG1hbmFnZXIuYWRkU2NyaXB0KCcvZXhhbXBsZS5qcycpLmNvbm5lY3QoKSkudG8uYmUuaW5zdGFuY2VPZihSZXNvdXJjZU1hbmFnZXIpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCdhZGQgc3R5bGUgYW5kIGNvbm5lY3Qgc2hvdWxkIGluc3RhbmNlIG9mIFJlc291cmNlTWFuYWdlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QobWFuYWdlci5hZGRTdHlsZXNoZWV0KCcvc3R5bGUuanMnKS5jb25uZWN0KCkpLnRvLmJlLmluc3RhbmNlT2YoUmVzb3VyY2VNYW5hZ2VyKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnYWRkIGRhdGEgYW5kIGNvbm5lY3QgIHNob3VsZCBpbnN0YW5jZSBvZiBSZXNvdXJjZU1hbmFnZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG1hbmFnZXIuYWRkRGF0YSgnL2RhdGEuanNvbicpLmNvbm5lY3QoKSkudG8uYmUuaW5zdGFuY2VPZihSZXNvdXJjZU1hbmFnZXIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG5cblxuICAgICAgICBkZXNjcmliZSgnY2hlY2sgYXZhaWxhYmlsaXR5IHJlc291cmNlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdhZGQgc2NyaXB0IGFuZCBjaGVjayBhdmFpbGFiaWxpdHkgc2hvdWxkIHJldHVybiBQcm9taXNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChtYW5hZ2VyLmFkZFNjcmlwdCgnL2V4YW1wbGUuanMnKS5hdmFpbGFibGUoKSkudG8uYmUuaW5zdGFuY2VPZihQcm9taXNlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnYWRkIHN0eWxlIGFuZCBjaGVjayBhdmFpbGFiaWxpdHkgc2hvdWxkIHNob3VsZCByZXR1cm4gUHJvbWlzZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QobWFuYWdlci5hZGRTdHlsZXNoZWV0KCcvc3R5bGUuanMnKS5hdmFpbGFibGUoKSkudG8uYmUuaW5zdGFuY2VPZihQcm9taXNlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnYWRkIGRhdGEgYW5kIGNoZWNrIGF2YWlsYWJpbGl0eSAgc2hvdWxkIHNob3VsZCByZXR1cm4gUHJvbWlzZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QobWFuYWdlci5hZGREYXRhKCcvZGF0YS5qc29uJykuYXZhaWxhYmxlKCkpLnRvLmJlLmluc3RhbmNlT2YoUHJvbWlzZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnY2hlY2sgYXZhaWxhYmlsaXR5IGV4YW1wbGUuanNvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdhZGQgZGF0YSBhbmQgY2hlY2sgY29udGVudCcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICAgICAgbWFuYWdlci5hZGREYXRhKCdodHRwczovL2V4YW1wbGUuY29tL2V4YW1wbGUuanNvbicpLmNvbm5lY3QoKS5hdmFpbGFibGUoKS50aGVuKHIgPT4ge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaHRtbCcpLm91dGVySFRNTCkuY29udGFpbnMoJz57XCJhXCI6XCJ0ZXN0XCJ9PC9zY3JpcHQ+PC9oZWFkPicpO1xuICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pXG5cbiAgICB9KTtcblxuXG59KTsiLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsRnVuY3Rpb24gfSBmcm9tIFwiLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgUHJveHlPYnNlcnZlciB9IGZyb20gXCIuLi90eXBlcy9wcm94eW9ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVJbnN0YW5jZSwgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IEFUVFJJQlVURVBSRUZJWCwgQXNzZW1ibGVyIH07XG5cbi8qKlxuICogYXR0cmlidXRlIHByZWZpeFxuICpcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURVBSRUZJWCA9IFwiZGF0YS1tb25zdGVyLVwiO1xuXG4vKipcbiAqIEFzc2VtYmxlciBjbGFzc1xuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQWxsb3dzIHlvdSB0byBidWlsZCBhbiBodG1sIGZyYWdtZW50XG4gKi9cbmNsYXNzIEFzc2VtYmxlciBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICogQHBhcmFtIHtEb2N1bWVudEZyYWdtZW50fSBmcmFnbWVudFxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZlxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIGZ1bmN0aW9uXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgZnVuY3Rpb24gaXMgbm90IGRlZmluZWRcblx0ICovXG5cdGNvbnN0cnVjdG9yKGZyYWdtZW50KSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLmF0dHJpYnV0ZVByZWZpeCA9IEFUVFJJQlVURVBSRUZJWDtcblx0XHR2YWxpZGF0ZUluc3RhbmNlKGZyYWdtZW50LCBnZXRHbG9iYWxGdW5jdGlvbihcIkRvY3VtZW50RnJhZ21lbnRcIikpO1xuXHRcdHRoaXMuZnJhZ21lbnQgPSBmcmFnbWVudDtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4XG5cdCAqIEByZXR1cm4ge0Fzc2VtYmxlcn1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcblx0ICovXG5cdHNldEF0dHJpYnV0ZVByZWZpeChwcmVmaXgpIHtcblx0XHR2YWxpZGF0ZVN0cmluZyhwcmVmaXgpO1xuXHRcdHRoaXMuYXR0cmlidXRlUHJlZml4ID0gcHJlZml4O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdGdldEF0dHJpYnV0ZVByZWZpeCgpIHtcblx0XHRyZXR1cm4gdGhpcy5hdHRyaWJ1dGVQcmVmaXg7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtQcm94eU9ic2VydmVyfHVuZGVmaW5lZH0gZGF0YVxuXHQgKiBAcmV0dXJuIHtEb2N1bWVudEZyYWdtZW50fVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZlxuXHQgKi9cblx0Y3JlYXRlRG9jdW1lbnRGcmFnbWVudChkYXRhKSB7XG5cdFx0aWYgKGRhdGEgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0ZGF0YSA9IG5ldyBQcm94eU9ic2VydmVyKHt9KTtcblx0XHR9XG5cblx0XHR2YWxpZGF0ZUluc3RhbmNlKGRhdGEsIFByb3h5T2JzZXJ2ZXIpO1xuXHRcdGNvbnN0IGZyYWdtZW50ID0gdGhpcy5mcmFnbWVudC5jbG9uZU5vZGUodHJ1ZSk7XG5cdFx0cmV0dXJuIGZyYWdtZW50O1xuXHR9XG59XG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuaW1wb3J0IHtBVFRSSUJVVEVQUkVGSVgsIEFzc2VtYmxlcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vYXNzZW1ibGVyLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5kZXNjcmliZSgnQXNzZW1ibGVyJywgZnVuY3Rpb24gKCkge1xuICAgIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGluaXRKU0RPTSgpO1xuICAgIH0pXG4gICAgZGVzY3JpYmUoJ2NyZWF0ZURvY3VtZW50RnJhZ21lbnQoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gPGRpdj5PbmU8L2Rpdj48ZGl2PlR3bzwvZGl2PicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0IGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoJzxkaXY+T25lPC9kaXY+PGRpdj5Ud288L2Rpdj4nKTtcblxuICAgICAgICAgICAgbGV0IGYgPSBuZXcgQXNzZW1ibGVyKGZyYWdtZW50KTtcblxuICAgICAgICAgICAgLy8gY29udmVydCB0byBzdHJpbmdcbiAgICAgICAgICAgIGxldCBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChmLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKS5jbG9uZU5vZGUodHJ1ZSkpO1xuXG4gICAgICAgICAgICBleHBlY3QoY29udGFpbmVyLmlubmVySFRNTCkudG8uYmUuZXF1YWwoJzxkaXY+T25lPC9kaXY+PGRpdj5Ud288L2Rpdj4nKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBEb2N1bWVudEZyYWdtZW50IG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBkID0gbmV3IEFzc2VtYmxlcihkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpO1xuICAgICAgICAgICAgZXhwZWN0KGQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKS50by5iZS5pbnN0YW5jZU9mKERvY3VtZW50RnJhZ21lbnQpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCduZXcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCduZXcgUmVuZGVyZXIoKSBzaG91bGQgcmV0dXJuIEFzc2VtYmxlciBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgZCA9IG5ldyBBc3NlbWJsZXIoZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKTtcbiAgICAgICAgICAgIGV4cGVjdChkKS50by5iZS5pbnN0YW5jZU9mKEFzc2VtYmxlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2dldEF0dHJpYnV0ZVByZWZpeCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiAnICsgQVRUUklCVVRFUFJFRklYLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgZCA9IG5ldyBBc3NlbWJsZXIoZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKTtcbiAgICAgICAgICAgIGV4cGVjdChkLmdldEF0dHJpYnV0ZVByZWZpeCgpKS50by5iZS5lcXVhbChBVFRSSUJVVEVQUkVGSVgpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdzZXRBdHRyaWJ1dGVQcmVmaXgoKS5nZXRBdHRyaWJ1dGVQcmVmaXgoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gc2FtZSB2YWx1ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBkID0gbmV3IEFzc2VtYmxlcihkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpO1xuICAgICAgICAgICAgZXhwZWN0KGQuc2V0QXR0cmlidXRlUHJlZml4KCd0ZXN0MDEnKS5nZXRBdHRyaWJ1dGVQcmVmaXgoKSkudG8uYmUuZXF1YWwoJ3Rlc3QwMScpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG59KTsiLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgKiBhcyBjaGFpIGZyb20gJ2NoYWknO1xuaW1wb3J0IHtnZXREb2N1bWVudH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vdXRpbC5tanNcIjtcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2NsZWFudXBET01Gcm9tVGVzdGluZywgaW5pdE11dGF0aW9uT2JzZXJ2ZXJGb3JUZXN0aW5nfSBmcm9tIFwiLi4vLi4vdXRpbC9jbGVhbnVwZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcblxubGV0IGh0bWwxID0gYFxuICAgIDxkaXYgaWQ9XCJ0ZXN0MVwiPlxuICAgIDwvZGl2PlxuYDtcblxuZGVzY3JpYmUoJ0RPTScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGxldCBDdXN0b21Db250cm9sLCByZWdpc3RlckN1c3RvbUVsZW1lbnQsIFRlc3RDb21wb25lbnQsIGRvY3VtZW50LCBqc2RvbUZsYWc7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKHt9KS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgaW1wb3J0KFwiZWxlbWVudC1pbnRlcm5hbHMtcG9seWZpbGxcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIG0ucG9seWZpbGwoKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBqc2RvbSBkb2VzIG5vdCBzdXBwb3J0IEVsZW1lbnRJbnRlcm5hbHNcbiAgICAgICAgICAgIGpzZG9tRmxhZyA9IG5hdmlnYXRvci51c2VyQWdlbnQuaW5jbHVkZXMoXCJqc2RvbVwiKTtcblxuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vc291cmNlL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiKS50aGVuKChtKSA9PiB7XG5cbiAgICAgICAgICAgICAgICByZWdpc3RlckN1c3RvbUVsZW1lbnQgPSBtWydyZWdpc3RlckN1c3RvbUVsZW1lbnQnXTtcblxuXG4gICAgICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vc291cmNlL2RvbS9jdXN0b21jb250cm9sLm1qc1wiKS50aGVuKChtKSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21Db250cm9sID0gbVsnQ3VzdG9tQ29udHJvbCddO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBUZXN0Q29tcG9uZW50ID0gY2xhc3MgZXh0ZW5kcyBDdXN0b21Db250cm9sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWMgZ2V0VGFnKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJtb25zdGVyLWN1c3RvbWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyQ3VzdG9tRWxlbWVudChUZXN0Q29tcG9uZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdmb3JtRGlzYWJsZWRDYWxsYmFjaygpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBcbiAgICAgICAgbGV0IGVsZW1lbnRcbiAgICAgICAgXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBUZXN0Q29tcG9uZW50MiA9IGNsYXNzIGV4dGVuZHMgQ3VzdG9tQ29udHJvbCB7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBBIGRlc2NyaXB0aW9uIG9mIHRoZSBlbnRpcmUgZnVuY3Rpb24uXG4gICAgICAgICAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gZGVzY3JpcHRpb24gb2YgcmV0dXJuIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBzdGF0aWMgZ2V0VGFnKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwibW9uc3Rlci1jdXN0b21jb250cm9sMlwiXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVnaXN0ZXJDdXN0b21FbGVtZW50KFRlc3RDb21wb25lbnQyKVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChlKS50by5iZS5ub3QubnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWN1c3RvbWNvbnRyb2wyJyk7XG5cbiAgICAgICAgfSlcbiAgICAgICAgXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiB1bmRlZmluZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoZWxlbWVudC5mb3JtRGlzYWJsZWRDYWxsYmFjaygpKS50by5iZS51bmRlZmluZWQ7XG4gICAgICAgICAgICBleHBlY3QoZWxlbWVudC5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQuZm9ybURpc2FibGVkQ2FsbGJhY2sodHJ1ZSkpLnRvLmJlLnVuZGVmaW5lZDtcbiAgICAgICAgICAgIGV4cGVjdChlbGVtZW50Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgIGNvbnN0IGQgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcbiAgICAgICAgICAgIGV4cGVjdChkKS50by5ub3QuYmUubnVsbDtcbiAgICAgICAgICAgIFxuICAgICAgICB9KTtcblxuICAgIH0pXG5cblxuICAgIGRlc2NyaWJlKCdDdXN0b21Db250cm9sKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBpbml0TXV0YXRpb25PYnNlcnZlckZvclRlc3RpbmcoKVxuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICAgICAgY2xlYW51cERPTUZyb21UZXN0aW5nKCk7XG5cbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnY3JlYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gY3VzdG9tLWVsZW1lbnQgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCBkXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZCA9IG5ldyBUZXN0Q29tcG9uZW50KCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZSkudG8uYmUubnVsbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBleHBlY3QodHlwZW9mIGQpLmlzLmVxdWFsKCdvYmplY3QnKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnY29ubmVjdCBlbXB0eSBlbGVtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXQoJ2RvY3VtZW50IHNob3VsZCBjb250YWluIG1vbnN0ZXItY3VzdG9tY29udHJvbCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1jdXN0b21jb250cm9sJyk7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJykuYXBwZW5kQ2hpbGQoZCk7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ21vbnN0ZXItY3VzdG9tY29udHJvbCcpLmxlbmd0aCkuaXMuZXF1YWwoMSk7XG4gICAgICAgICAgICAgICAgLy8gbm8gZGF0YS1tb25zdGVyLW9iamVjdGxpbms9XCJTeW1ib2wobW9uc3RlclVwZGF0ZXIpXCIgYmVjYXVzZSBpdCBoYXMgbm90aGluZyB0byB1cGRhdGUgXG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLWN1c3RvbWNvbnRyb2wgZGF0YS1tb25zdGVyLWVycm9yPVwiRXJyb3I6IGh0bWwgaXMgbm90IHNldC5cIj48L21vbnN0ZXItY3VzdG9tY29udHJvbD4nKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGRlc2NyaWJlKCdPcHRpb25zIGNoYW5nZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAgIGl0KCdkZWxlZ2F0ZXNGb2N1cyBzaG91bGQgY2hhbmdlIGZyb20gdHJ1ZSB0byBmYWxzZScsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIC8vICAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWN1c3RvbWNvbnRyb2wnKVxuICAgICAgICAvL1xuICAgICAgICAvLyAgICAgICAgIGV4cGVjdChlbGVtZW50LmdldE9wdGlvbignZGVsZWdhdGVzRm9jdXMnKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgLy8gICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgLy8gICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX09QVElPTlMsIEpTT04uc3RyaW5naWZ5KHtkZWxlZ2F0ZXNGb2N1czogZmFsc2V9KSk7XG4gICAgICAgIC8vICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQuZ2V0T3B0aW9uKCdkZWxlZ2F0ZXNGb2N1cycpKS50by5iZS5mYWxzZTtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgLy8gICAgICAgICAgICAgfSwgMTApO1xuICAgICAgICAvLyAgICAgICAgIH0sIDEwKTtcbiAgICAgICAgLy9cbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAgIH0pLnRpbWVvdXQoMTAwKTtcbiAgICAgICAgLy9cbiAgICAgICAgLy8gfSlcblxuICAgICAgICBkZXNjcmliZSgnVGVzdCBFbGVtZW50SW50ZXJuYWxzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBsZXQgZm9ybTtcblxuICAgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9ybSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Zvcm0nKTtcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGl0KCdmb3JtQXNzb2NpYXRlZCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1jdXN0b21jb250cm9sJyk7XG4gICAgICAgICAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChkKTtcblxuICAgICAgICAgICAgICAgIGV4cGVjdChkLmNvbnN0cnVjdG9yLmZvcm1Bc3NvY2lhdGVkKS50by5iZS50cnVlO1xuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ2Zvcm0nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItY3VzdG9tY29udHJvbCcpO1xuICAgICAgICAgICAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoZCk7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZC5mb3JtKS50by5iZS5pbnN0YW5jZW9mKEhUTUxGb3JtRWxlbWVudClcblxuICAgICAgICAgICAgICAgIC8vIGlmIChqc2RvbUZsYWcpIHtcbiAgICAgICAgICAgICAgICAvLyAgICAgZXhwZWN0KCgpID0+IGQuZm9ybSkudG8udGhyb3coRXJyb3IpO1xuICAgICAgICAgICAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gICAgIGV4cGVjdChkLmZvcm0pLnRvLmJlLmluc3RhbmNlb2YoSFRNTEZvcm1FbGVtZW50KVxuICAgICAgICAgICAgICAgIC8vIH1cblxuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ3ZhbHVlIGdldHRlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1jdXN0b21jb250cm9sJyk7XG4gICAgICAgICAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChkKTtcblxuICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBkLnZhbHVlKS50by50aHJvdyhFcnJvcik7XG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgndmFsdWUgc2V0dGVyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWN1c3RvbWNvbnRyb2wnKTtcbiAgICAgICAgICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGQpO1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IGQudmFsdWUgPSA0KS50by50aHJvdyhFcnJvcik7XG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnc2V0Rm9ybVZhbHVlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWN1c3RvbWNvbnRyb2wnKTtcbiAgICAgICAgICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGQpO1xuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ25hbWUgZ2V0dGVyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWN1c3RvbWNvbnRyb2wnKTtcbiAgICAgICAgICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGQpO1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KGQubmFtZSkudG8uYmUubnVsbDtcblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCd0eXBlIGdldHRlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1jdXN0b21jb250cm9sJyk7XG4gICAgICAgICAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChkKTtcblxuICAgICAgICAgICAgICAgIGV4cGVjdChkLnR5cGUpLnRvLmJlLmVxdWFsKCdtb25zdGVyLWN1c3RvbWNvbnRyb2wnKTtcblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCd2YWxpZGl0eSBnZXR0ZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItY3VzdG9tY29udHJvbCcpO1xuICAgICAgICAgICAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoZCk7XG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgndmFsaWRhdGlvbk1lc3NhZ2UgZ2V0dGVyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWN1c3RvbWNvbnRyb2wnKTtcbiAgICAgICAgICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGQpO1xuXG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnd2lsbFZhbGlkYXRlIGdldHRlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1jdXN0b21jb250cm9sJyk7XG4gICAgICAgICAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChkKTtcblxuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGl0KCdjaGVja1ZhbGlkaXR5KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItY3VzdG9tY29udHJvbCcpO1xuICAgICAgICAgICAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoZCk7XG5cblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCdyZXBvcnRWYWxpZGl0eSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWN1c3RvbWNvbnRyb2wnKTtcbiAgICAgICAgICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGQpO1xuXG5cbiAgICAgICAgICAgIH0pO1xuXG5cbiAgICAgICAgICAgIGl0KCdzZXRWYWxpZGl0eSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWN1c3RvbWNvbnRyb2wnKTtcbiAgICAgICAgICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGQpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkLnNldFZhbGlkaXR5KHsndmFsdWVNaXNzaW5nJzogdHJ1ZX0sIFwibXkgbWVzc2FnZVwiKSkudG8uYmUudW5kZWZpbmVkO1xuXG4gICAgICAgICAgICB9KTtcblxuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG59KTtcblxuXG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtBVFRSSUJVVEVfVEhFTUVfTkFNRX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5pbXBvcnQge2ZpbmREb2N1bWVudFRlbXBsYXRlLCBUZW1wbGF0ZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vdGVtcGxhdGUubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cblxuZGVzY3JpYmUoJ1RlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaW5pdEpTRE9NKCk7XG4gICAgfSlcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gYFxuICAgICAgICAgICAgPHRlbXBsYXRlIGlkPVwibXl0ZW1wbGF0ZVwiPjwvdGVtcGxhdGU+YDtcbiAgICB9KVxuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdjcmVhdGUgSFRNTEZyYWdtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBbXG4gICAgICAgICAgICBbXCI8ZGl2PmZpcnN0PC9kaXY+PGRpdj5zZWNvbmQ8L2Rpdj5cIl0sXG4gICAgICAgICAgICBbXCI8ZGl2PmZpcnN0PC9kaXY+XCJdLFxuICAgICAgICAgICAgW1wiPGRpdj5maXJzdDwvZGl2PjxwPnNlY29uZDwvcD5cIl1cblxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ25ldyBUZW1wbGF0ZSgpLmdldE5ld0RvY3VtZW50RnJhZ21lbnRBc1N0cmluZygpIHNob3VsZCByZXR1cm4gc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJyk7XG4gICAgICAgICAgICAgICAgdGVtcGxhdGUuaW5uZXJIVE1MID0gYTtcbiAgICAgICAgICAgICAgICBsZXQgdCA9IG5ldyBUZW1wbGF0ZSh0ZW1wbGF0ZSk7XG5cblxuICAgICAgICAgICAgICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQodC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChjb250YWluZXIuaW5uZXJIVE1MKS50by5iZS5lcXVhbChhKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdjcmVhdGUgaW5zdGFuY2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCduZXcgVGVtcGxhdGUoKSBzaG91bGQgcmV0dXJuIGRvY3VtZW50IG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBkID0gbmV3IFRlbXBsYXRlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJykpO1xuICAgICAgICAgICAgZXhwZWN0KGQpLnRvLmJlLmluc3RhbmNlT2YoVGVtcGxhdGUpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcuZ2V0VGVtcGxhdGVFbGVtZW50KCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCduZXcgVGVtcGxhdGUoKS5nZXRUZW1wbGF0ZUVsZW1lbnQoKSBzaG91bGQgcmV0dXJuIEhUTUxUZW1wbGF0ZUVsZW1lbnQgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGQgPSBuZXcgVGVtcGxhdGUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGVtcGxhdGUnKSk7XG4gICAgICAgICAgICBleHBlY3QoZC5nZXRUZW1wbGF0ZUVsZW1lbnQoKSkudG8uYmUuaW5zdGFuY2VPZihIVE1MVGVtcGxhdGVFbGVtZW50KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLmZpbmREb2N1bWVudFRlbXBsYXRlKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cgVGVtcGxhdGUgbm90IGZvdW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGZpbmREb2N1bWVudFRlbXBsYXRlKFwibm93YXlcIiwgZGl2KVxuICAgICAgICAgICAgfSkudG8udGhyb3dzKEVycm9yKTtcbiAgICAgICAgfSlcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcuZmluZERvY3VtZW50VGVtcGxhdGUoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGVzY3JpYmUoJ1RlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXQoJ3Nob3VsZCBmaW5kIHRlbXBsYXRlIG92ZXIgb3duZXJEb2N1bWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICBkaXYucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vdXRlckhUTUw7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgbGV0IHQgPSBmaW5kRG9jdW1lbnRUZW1wbGF0ZShcIm15dGVtcGxhdGVcIiwgZGl2KTtcbiAgICAgICAgICAgICAgICBleHBlY3QodCkuaXMuaW5zdGFuY2VvZihUZW1wbGF0ZSk7XG5cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCdUaG1lbmVkIFRlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IG1lbUF0dHJpYnV0ZVZhbHVlO1xuXG4gICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBgXG4gICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpZD1cIm15dGVtcGxhdGVcIj48cD4xPC9wPjwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpZD1cIm15dGVtcGxhdGUtbW9uc3RlclwiPjxwPjI8L3A+PC90ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlkPVwibXl0ZW1wbGF0ZS10ZXN0dGhlbWVcIj48cD40PC9wPjwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpZD1cIm15cHJlZml4LW15dGVtcGxhdGUtbW9uc3RlclwiPjxwPjM8L3A+PC90ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICBgO1xuXG4gICAgICAgICAgICAgICAgbGV0IGh0bWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdodG1sJyk7XG4gICAgICAgICAgICAgICAgaWYgKGh0bWwuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9USEVNRV9OQU1FKSkge1xuICAgICAgICAgICAgICAgICAgICBtZW1BdHRyaWJ1dGVWYWx1ZSA9IGh0bWwuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9USEVNRV9OQU1FKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuXG4gICAgICAgICAgICAgICAgbGV0IGh0bWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdodG1sJyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoaHRtbC5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX1RIRU1FX05BTUUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGh0bWwucmVtb3ZlQXR0cmlidXRlKEFUVFJJQlVURV9USEVNRV9OQU1FKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAobWVtQXR0cmlidXRlVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaHRtbC5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1RIRU1FX05BTUUsIG1lbUF0dHJpYnV0ZVZhbHVlKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSlcblxuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGZpbmQgdGVtcGxhdGUgb3ZlciBvd25lckRvY3VtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCBodG1sID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaHRtbCcpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci10ZW1wbGF0ZS1wcmVmaXgnLCAnbXlwcmVmaXgnKVxuICAgICAgICAgICAgICAgIGRpdi5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICBsZXQgdDEgPSBmaW5kRG9jdW1lbnRUZW1wbGF0ZShcIm15dGVtcGxhdGVcIiwgZGl2KTtcbiAgICAgICAgICAgICAgICBleHBlY3QodDEpLmlzLmluc3RhbmNlb2YoVGVtcGxhdGUpO1xuICAgICAgICAgICAgICAgIGV4cGVjdCh0MS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkudGV4dENvbnRlbnQpLmlzLmVxdWFsKFwiM1wiKTtcblxuICAgICAgICAgICAgICAgIGRpdi5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci10ZW1wbGF0ZS1wcmVmaXgnKVxuICAgICAgICAgICAgICAgIGxldCB0MiA9IGZpbmREb2N1bWVudFRlbXBsYXRlKFwibXl0ZW1wbGF0ZVwiLCBkaXYpO1xuICAgICAgICAgICAgICAgIGV4cGVjdCh0MikuaXMuaW5zdGFuY2VvZihUZW1wbGF0ZSk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHQyLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKS50ZXh0Q29udGVudCkuaXMuZXF1YWwoXCIyXCIpO1xuXG4gICAgICAgICAgICAgICAgaHRtbC5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1RIRU1FX05BTUUsJ3Rlc3R0aGVtZScpO1xuICAgICAgICAgICAgICAgIGxldCBhPSBodG1sLm91dGVySFRNTDtcbiAgICAgICAgICAgICAgICBsZXQgdDMgPSBmaW5kRG9jdW1lbnRUZW1wbGF0ZShcIm15dGVtcGxhdGVcIiwgZGl2KTtcbiAgICAgICAgICAgICAgICBleHBlY3QodDMpLmlzLmluc3RhbmNlb2YoVGVtcGxhdGUpO1xuICAgICAgICAgICAgICAgIGV4cGVjdCh0My5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkudGV4dENvbnRlbnQpLmlzLmVxdWFsKFwiNFwiKTtcblxuXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cbmltcG9ydCB7ZmlyZUV2ZW50LCBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudCwgZmlyZUN1c3RvbUV2ZW50fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS9ldmVudHMubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmRlc2NyaWJlKCdFdmVudHMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBpbml0SlNET00oKTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2ZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ2ZpbmQgb2JqZWN0JywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGxldCBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3RlcicsICdoZWxsbycpO1xuICAgICAgICAgICAgbGV0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGRpdik7XG4gICAgICAgICAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgZSA9IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KGV2ZW50LCAnZGF0YS1tb25zdGVyJyk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGUuZ2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXInKSkudG8uYmUuZXF1YWwoJ2hlbGxvJylcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgZmlyZUV2ZW50KGRpdiwgJ2NsaWNrJyk7XG4gICAgICAgICAgICB9LCAwKVxuXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZmlyZUV2ZW50KCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgZmlyZSBhIGNsaWNrIGV2ZW50JywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGxldCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgZmlyZUV2ZW50KGRpdiwgJ2NsaWNrJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgZmlyZSBhIHRvdWNoIGV2ZW50JywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGxldCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCd0b3VjaCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgZmlyZUV2ZW50KGRpdiwgJ3RvdWNoJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgZmlyZSBhIHRvdWNoIGV2ZW50IG9uIGNvbGxlY3Rpb24nLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgbGV0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGRpdi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7XG4gICAgICAgICAgICBsZXQgY29sbGVjdGlvbiA9IGRpdi5xdWVyeVNlbGVjdG9yQWxsKCdkaXYnKTtcblxuXG4gICAgICAgICAgICBmaXJlRXZlbnQoY29sbGVjdGlvbiwgJ3RvdWNoJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgZmlyZSBhIHRvdWNoIGV2ZW50JywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGxldCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCd0b3VjaCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpO1xuICAgICAgICAgICAgbGV0IGNvbGxlY3Rpb24gPSBkaXYucXVlcnlTZWxlY3RvckFsbCgnZGl2Jyk7XG5cblxuICAgICAgICAgICAgZmlyZUV2ZW50KGNvbGxlY3Rpb24sICd0b3VjaCcpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IGZpcmVFdmVudCh7fSwgJ3RvdWNoJykpLnRvLnRocm93KEVycm9yKTtcblxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdmaXJlQ3VzdG9tRXZlbnQoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCBmaXJlIGEgY2xpY2sgZXZlbnQnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgbGV0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBmaXJlQ3VzdG9tRXZlbnQoZGl2LCAnY2xpY2snKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBmaXJlIGEgdG91Y2ggZXZlbnQnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgbGV0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBmaXJlQ3VzdG9tRXZlbnQoZGl2LCAndG91Y2gnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBmaXJlIGEgdG91Y2ggZXZlbnQgb24gY29sbGVjdGlvbjEnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgbGV0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoJywgKGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZS5kZXRhaWwuZGV0YWlsICE9PSAnaGVsbG8gd29ybGQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoJ2Vycm9yJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGRpdi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7XG4gICAgICAgICAgICBsZXQgY29sbGVjdGlvbiA9IGRpdi5xdWVyeVNlbGVjdG9yQWxsKCdkaXYnKTtcblxuICAgICAgICAgICAgZmlyZUN1c3RvbUV2ZW50KGNvbGxlY3Rpb24sICd0b3VjaCcsIFwiaGVsbG8gd29ybGRcIik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgZmlyZSBhIHRvdWNoIGV2ZW50IG9uIGNvbGxlY3Rpb24yJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGxldCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCd0b3VjaCcsIChlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGUuZGV0YWlsLmEgIT09ICdoZWxsbyB3b3JsZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZSgnZXJyb3InKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgZGl2LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTtcbiAgICAgICAgICAgIGxldCBjb2xsZWN0aW9uID0gZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RpdicpO1xuXG4gICAgICAgICAgICBmaXJlQ3VzdG9tRXZlbnQoY29sbGVjdGlvbiwgJ3RvdWNoJywge2E6IFwiaGVsbG8gd29ybGRcIn0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGZpcmUgYSB0b3VjaCBldmVudCcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBsZXQgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2gnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgZGl2LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTtcbiAgICAgICAgICAgIGxldCBjb2xsZWN0aW9uID0gZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RpdicpO1xuXG5cbiAgICAgICAgICAgIGZpcmVDdXN0b21FdmVudChjb2xsZWN0aW9uLCAndG91Y2gnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBmaXJlQ3VzdG9tRXZlbnQoe30sICd0b3VjaCcpKS50by50aHJvdyhFcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbn0pOyIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBmaW5kRWxlbWVudFdpdGhTZWxlY3RvclVwd2FyZHMgfSBmcm9tIFwiLi4vLi4vZG9tL3V0aWwubWpzXCI7XG5pbXBvcnQgeyBpc09iamVjdCB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IERhdGFzb3VyY2UgfSBmcm9tIFwiLi4vZGF0YXNvdXJjZS5tanNcIjtcblxuZXhwb3J0IHsgRG9tU3RvcmFnZSB9O1xuXG4vKipcbiAqIFRoZSBEb21TdG9yYWdlIGlzIGEgY2xhc3MgdGhhdCBzdG9yZXMgZGF0YSBpbiBtZW1vcnkuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICovXG5jbGFzcyBEb21TdG9yYWdlIGV4dGVuZHMgRGF0YXNvdXJjZSB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIG9wdGlvbnMgY29udGFpbnMgZGVmaW5pdGlvbnMgZm9yIHRoZSBkYXRhc291cmNlLlxuXHQgKi9cblx0Y29uc3RydWN0b3Iob3B0aW9ucykge1xuXHRcdHN1cGVyKCk7XG5cblx0XHRpZiAoaXNPYmplY3Qob3B0aW9ucykpIHtcblx0XHRcdHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL3N0b3JhZ2UvZG9tLXN0b3JhZ2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGRlZmF1bHRzXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBkZWZhdWx0cy5yZWFkXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBkZWZhdWx0cy5yZWFkLnNlbGVjdG9yXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBkZWZhdWx0cy53cml0ZVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gZGVmYXVsdHMud3JpdGUuc2VsZWN0b3Jcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHJlYWQ6IHtcblx0XHRcdFx0c2VsZWN0b3I6IHVuZGVmaW5lZCxcblx0XHRcdH0sXG5cdFx0XHR3cml0ZToge1xuXHRcdFx0XHRzZWxlY3RvcjogdW5kZWZpbmVkLFxuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gVGhlIHJlYWQgc2VsZWN0b3IgaXMgbm90IGRlZmluZWRcblx0ICogQHRocm93cyB7RXJyb3J9IFRoZXJlIGFyZSBubyBzdG9yYWdlIGVsZW1lbnRcblx0ICovXG5cdHJlYWQoKSB7XG5cdFx0Y29uc3Qgc2VsZWN0b3IgPSB0aGlzLmdldE9wdGlvbihcInJlYWQuc2VsZWN0b3JcIiwgdW5kZWZpbmVkKTtcblx0XHRpZiAoIXNlbGVjdG9yKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGUgcmVhZCBzZWxlY3RvciBpcyBub3QgZGVmaW5lZFwiKTtcblx0XHR9XG5cblx0XHRjb25zdCBzdG9yYWdlID0gZmluZEVsZW1lbnRXaXRoU2VsZWN0b3JVcHdhcmRzKHRoaXMsIHNlbGVjdG9yKTtcblx0XHRpZiAoIXN0b3JhZ2UpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlRoZXJlIGlzIG5vIHN0b3JhZ2UgZWxlbWVudFwiKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3QgZGF0YSA9IEpTT04ucGFyc2Uoc3RvcmFnZS5pbm5lckhUTUwpO1xuXHRcdFx0XHR0aGlzLnNldChkYXRhKTtcblx0XHRcdFx0cmVzb2x2ZShkYXRhKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cmVqZWN0KGUpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBUaGUgd3JpdGUgc2VsZWN0b3IgaXMgbm90IGRlZmluZWRcblx0ICogQHRocm93cyB7RXJyb3J9IFRoZXJlIGFyZSBubyBzdG9yYWdlIGVsZW1lbnRcblx0ICovXG5cdHdyaXRlKCkge1xuXHRcdGNvbnN0IHNlbGVjdG9yID0gdGhpcy5nZXRPcHRpb24oXCJ3cml0ZS5zZWxlY3RvclwiKTtcblx0XHRpZiAoIXNlbGVjdG9yKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGUgb3B0aW9uIHdyaXRlLnNlbGVjdG9yIGlzIG5vdCBkZWZpbmVkXCIpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHN0b3JhZ2UgPSBmaW5kRWxlbWVudFdpdGhTZWxlY3RvclVwd2FyZHModGhpcywgc2VsZWN0b3IpO1xuXHRcdGlmICghc3RvcmFnZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhlcmUgaXMgbm8gc3RvcmFnZSBlbGVtZW50XCIpO1xuXHRcdH1cblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRzdG9yYWdlLmlubmVySFRNTCA9IEpTT04uc3RyaW5naWZ5KHRoaXMuZ2V0KCkpO1xuXHRcdFx0XHRyZXNvbHZlKHN0b3JhZ2UpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRyZWplY3QoZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtEb21TdG9yYWdlfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9kb20ubWpzXCI7XG5cblxuZGVzY3JpYmUoJ1NlcnZlRG9tcicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGl0KCdzaG91bGQgaW5pdCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBjb25zdCBkb20gPSBuZXcgRG9tU3RvcmFnZSh7XG4gICAgICAgICAgICBcbiAgICAgICAgfSlcblxuICAgICAgICBleHBlY3QoZG9tKS50by5iZS5ub3QubnVsbFxuXG5cbiAgICB9KVxuXG59KTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCwgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsT2JqZWN0IH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IERhdGFzb3VyY2UgfSBmcm9tIFwiLi4vLi4vZGF0YXNvdXJjZS5tanNcIjtcbmltcG9ydCB7IFN0b3JhZ2UsIHN0b3JhZ2VPYmplY3RTeW1ib2wgfSBmcm9tIFwiLi4vc3RvcmFnZS5tanNcIjtcblxuZXhwb3J0IHsgTG9jYWxTdG9yYWdlIH07XG5cbi8qKlxuICogVGhlIExvY2FsU3RvcmFnZSBEYXRhc291cmNlIHByb3ZpZGVzIGEgZGF0YSBzdG9yZSBpbiB0aGUgYnJvd3NlciBsb2NhbFN0b3JhZ2UuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yMi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgVGhlIExvY2FsU3RvcmFnZSBjbGFzcyBlbmNhcHN1bGF0ZXMgdGhlIGFjY2VzcyB0byBkYXRhIG9iamVjdHMuXG4gKi9cbmNsYXNzIExvY2FsU3RvcmFnZSBleHRlbmRzIFN0b3JhZ2Uge1xuXHQvKipcblx0ICogQHRocm93cyB7RXJyb3J9IHRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZGVyaXZlZCBjbGFzc2VzLlxuXHQgKiBAcmV0dXJuIHtleHRlcm5hbDpsb2NhbFN0b3JhZ2V9XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRbc3RvcmFnZU9iamVjdFN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIGdldEdsb2JhbE9iamVjdChcImxvY2FsU3RvcmFnZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL3N0b3JhZ2UvbG9jYWxzdG9yYWdlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZSBjbG9uZVxuXHQgKiBAcmV0dXJuIHtMb2NhbFN0b3JhZ2V9XG5cdCAqL1xuXHRnZXRDbG9uZSgpIHtcblx0XHRyZXR1cm4gbmV3IExvY2FsU3RvcmFnZShcblx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFJlYWxTdWJqZWN0KClbXCJvcHRpb25zXCJdLmtleSxcblx0XHQpO1xuXHR9XG59XG4iLCAiZnVuY3Rpb24gY3JlYXRlU3RvcmFnZSgpIHtcbiAgICBcbiAgICBsZXQgVU5TRVQgPSBTeW1ib2woKTtcbiAgICBsZXQgcyA9IHt9LFxuICAgICAgICBub29wQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICAgIH0sXG4gICAgICAgIF9pdGVtSW5zZXJ0aW9uQ2FsbGJhY2sgPSBub29wQ2FsbGJhY2s7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocywgJ3NldEl0ZW0nLCB7XG4gICAgICAgIGdldDogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIChrLCB2ID0gVU5TRVQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodiA9PT0gVU5TRVQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRmFpbGVkIHRvIGV4ZWN1dGUgJ3NldEl0ZW0nIG9uICdTdG9yYWdlJzogMiBhcmd1bWVudHMgcmVxdWlyZWQsIGJ1dCBvbmx5IDEgcHJlc2VudC5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgayA9IGsgKyAnJztcbiAgICAgICAgICAgICAgICBpZiAoIXMuaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICAgICAgX2l0ZW1JbnNlcnRpb25DYWxsYmFjayhzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNba10gPSB2ICsgJyc7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHMsICdnZXRJdGVtJywge1xuICAgICAgICBnZXQ6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBrID0+IHtcbiAgICAgICAgICAgICAgICBrID0gayArICcnO1xuICAgICAgICAgICAgICAgIGlmIChzLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzW2tdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocywgJ3JlbW92ZUl0ZW0nLCB7XG4gICAgICAgIGdldDogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGsgPT4ge1xuICAgICAgICAgICAgICAgIGsgPSBrICsgJyc7XG4gICAgICAgICAgICAgICAgaWYgKHMuaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNba107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLCAnY2xlYXInLCB7XG4gICAgICAgIGdldDogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBrIGluIHMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHMuaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzW2tdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLCAnbGVuZ3RoJywge1xuICAgICAgICBnZXQ6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhzKS5sZW5ndGg7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocywgXCJrZXlcIiwge1xuICAgICAgICB2YWx1ZTogayA9PiB7XG4gICAgICAgICAgICBsZXQga2V5ID0gT2JqZWN0LmtleXMocylba107XG4gICAgICAgICAgICByZXR1cm4gKCFrZXkpID8gbnVsbCA6IGtleTtcbiAgICAgICAgfSxcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocywgJ2l0ZW1JbnNlcnRpb25DYWxsYmFjaycsIHtcbiAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gX2l0ZW1JbnNlcnRpb25DYWxsYmFjaztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiB2ID0+IHtcbiAgICAgICAgICAgIGlmICghdiB8fCB0eXBlb2YgdiAhPSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdiA9IG5vb3BDYWxsYmFjaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9pdGVtSW5zZXJ0aW9uQ2FsbGJhY2sgPSB2O1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHM7XG59XG5cblxuZXhwb3J0IHtjcmVhdGVTdG9yYWdlfTsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge0xvY2FsU3RvcmFnZX0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2Uvc3RvcmFnZS9sb2NhbHN0b3JhZ2UubWpzXCI7XG5pbXBvcnQge2NyZWF0ZVN0b3JhZ2V9IGZyb20gXCIuLi8uLi8uLi8uLi91dGlsL2xvY2Fsc3RvcmFnZS5tanNcIjtcblxuXG5sZXQgbG9jYWxTdG9yYWdlUmVmZXJlbmNlO1xuXG5kZXNjcmliZSgnTG9jYWxTdG9yYWdlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgZ2xvYmFsVGhpc1snbG9jYWxTdG9yYWdlJ10gPSBsb2NhbFN0b3JhZ2VSZWZlcmVuY2U7XG4gICAgfSk7XG5cbiAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsb2NhbFN0b3JhZ2VSZWZlcmVuY2UgPSBnbG9iYWxUaGlzWydsb2NhbFN0b3JhZ2UnXVxuICAgICAgICBnbG9iYWxUaGlzWydsb2NhbFN0b3JhZ2UnXSA9IGNyZWF0ZVN0b3JhZ2UoKTtcblxuICAgIH0pXG5cbiAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIExvY2FsU3RvcmFnZSAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdChuZXcgTG9jYWxTdG9yYWdlKCdteWtleScpKS50by5iZS5pbnN0YW5jZW9mKExvY2FsU3RvcmFnZSlcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdydycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgncmVhZCBzaG91bGQgcmV0dXJuIG9iamVjdCcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBjb25zdCBkcyA9IG5ldyBMb2NhbFN0b3JhZ2UoJ215a2V5JylcbiAgICAgICAgICAgIGRzLnJlYWQoKS50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCd3cml0ZSBzaG91bGQgJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRzID0gbmV3IExvY2FsU3RvcmFnZSgnbXlrZXknKVxuICAgICAgICAgICAgZHMud3JpdGUoKS50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KVxuXG5cbn0pIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sLCBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWxPYmplY3QgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgRGF0YXNvdXJjZSB9IGZyb20gXCIuLi8uLi9kYXRhc291cmNlLm1qc1wiO1xuaW1wb3J0IHsgU3RvcmFnZSwgc3RvcmFnZU9iamVjdFN5bWJvbCB9IGZyb20gXCIuLi9zdG9yYWdlLm1qc1wiO1xuXG5leHBvcnQgeyBTZXNzaW9uU3RvcmFnZSB9O1xuXG4vKipcbiAqIFRoZSBTZXNzaW9uU3RvcmFnZSBjbGFzcyBwcm92aWRlcyBhIGRhdGEgc291cmNlIHRoYXQgdXNlcyB0aGUgU2Vzc2lvblN0b3JhZ2UgQVBJIG9uIHRoZSBjbGllbnQuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yMi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgVGhlIExvY2FsU3RvcmFnZSBjbGFzcyBlbmNhcHN1bGF0ZXMgdGhlIGFjY2VzcyB0byBkYXRhIG9iamVjdHMuXG4gKi9cbmNsYXNzIFNlc3Npb25TdG9yYWdlIGV4dGVuZHMgU3RvcmFnZSB7XG5cdC8qKlxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhpcyBtZXRob2QgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBkZXJpdmVkIGNsYXNzZXMuXG5cdCAqIEByZXR1cm4ge2V4dGVybmFsOnNlc3Npb25TdG9yYWdlfVxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0W3N0b3JhZ2VPYmplY3RTeW1ib2xdKCkge1xuXHRcdHJldHVybiBnZXRHbG9iYWxPYmplY3QoXCJzZXNzaW9uU3RvcmFnZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcblx0XHRcdFwiQHNjaHVrYWkvbW9uc3Rlci9kYXRhL2RhdGFzb3VyY2Uvc3RvcmFnZS9zZXNzaW9uLXN0b3JhZ2VcIixcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZSBDbG9uZVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtTZXNzaW9uU3RvcmFnZX1cblx0ICovXG5cdGdldENsb25lKCkge1xuXHRcdHJldHVybiBuZXcgU2Vzc2lvblN0b3JhZ2UoXG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRSZWFsU3ViamVjdCgpW1wib3B0aW9uc1wiXS5rZXksXG5cdFx0KTtcblx0fVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtTZXNzaW9uU3RvcmFnZX0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2Uvc3RvcmFnZS9zZXNzaW9uc3RvcmFnZS5tanNcIjtcbmltcG9ydCB7Y3JlYXRlU3RvcmFnZX0gZnJvbSBcIi4uLy4uLy4uLy4uL3V0aWwvbG9jYWxzdG9yYWdlLm1qc1wiO1xuXG5cbmxldCBzdG9yYWdlUmVmZXJlbmNlO1xuXG5kZXNjcmliZSgnU2Vzc2lvblN0b3JhZ2UnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBnbG9iYWxUaGlzWydzZXNzaW9uU3RvcmFnZSddID0gc3RvcmFnZVJlZmVyZW5jZTtcbiAgICB9KTtcblxuICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIHN0b3JhZ2VSZWZlcmVuY2UgPSBnbG9iYWxUaGlzWydzZXNzaW9uU3RvcmFnZSddXG4gICAgICAgIGdsb2JhbFRoaXNbJ3Nlc3Npb25TdG9yYWdlJ10gPSBjcmVhdGVTdG9yYWdlKCk7XG5cbiAgICB9KVxuXG4gICAgaXQoJ3Nob3VsZCBpbnN0YW5jZSBvZiBTZXNzaW9uU3RvcmFnZSAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdChuZXcgU2Vzc2lvblN0b3JhZ2UoJ215a2V5JykpLnRvLmJlLmluc3RhbmNlb2YoU2Vzc2lvblN0b3JhZ2UpXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgncncnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3JlYWQgc2hvdWxkIHJldHVybiBvYmplY3QnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgY29uc3QgZHMgPSBuZXcgU2Vzc2lvblN0b3JhZ2UoJ215a2V5JylcbiAgICAgICAgICAgIGRzLnJlYWQoKS50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCd3cml0ZSBzaG91bGQgJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRzID0gbmV3IFNlc3Npb25TdG9yYWdlKCdteWtleScpXG4gICAgICAgICAgICBkcy53cml0ZSgpLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pXG5cblxufSkiLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgaXNBcnJheSwgaXNGdW5jdGlvbiwgaXNPYmplY3QgfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBEYXRhc291cmNlIH0gZnJvbSBcIi4uL2RhdGFzb3VyY2UubWpzXCI7XG5pbXBvcnQgeyBkaWZmIH0gZnJvbSBcIi4uL2RpZmYubWpzXCI7XG5pbXBvcnQgeyBQYXRoZmluZGVyIH0gZnJvbSBcIi4uL3BhdGhmaW5kZXIubWpzXCI7XG5pbXBvcnQgeyBQaXBlIH0gZnJvbSBcIi4uL3BpcGUubWpzXCI7XG5cbmV4cG9ydCB7IFNlcnZlciB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBzZXJ2ZXJWZXJzaW9uU3ltYm9sID0gU3ltYm9sKFwic2VydmVyVmVyc2lvblwiKTtcblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBhbGwgc2VydmVyIGRhdGEgc291cmNlc1xuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDMuNC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgVGhlIFNlcnZlciBjbGFzcyBlbmNhcHN1bGF0ZXMgdGhlIGFjY2VzcyB0byBhIHNlcnZlciBkYXRhc291cmNlXG4gKi9cbmNsYXNzIFNlcnZlciBleHRlbmRzIERhdGFzb3VyY2Uge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL3NlcnZlclwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIHByZXBhcmVzIHRoZSBkYXRhIHRoYXQgY29tZXMgZnJvbSB0aGUgc2VydmVyLlxuXHQgKiBTaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtPYmplY3R9IHBheWxvYWRcblx0ICogQHJldHVybiB7T2JqZWN0fVxuXHQgKi9cblx0dHJhbnNmb3JtU2VydmVyUGF5bG9hZChwYXlsb2FkKSB7XG5cdFx0cGF5bG9hZCA9IGRvVHJhbnNmb3JtLmNhbGwodGhpcywgXCJyZWFkXCIsIHBheWxvYWQpO1xuXHRcdHRoaXNbc2VydmVyVmVyc2lvblN5bWJvbF0gPSBwYXlsb2FkO1xuXG5cdFx0Y29uc3QgZGF0YVBhdGggPSB0aGlzLmdldE9wdGlvbihcInJlYWQucGF0aFwiKTtcblx0XHRpZiAoZGF0YVBhdGgpIHtcblx0XHRcdHBheWxvYWQgPSBuZXcgUGF0aGZpbmRlcihwYXlsb2FkKS5nZXRWaWEoZGF0YVBhdGgpO1xuXHRcdH1cblxuXHRcdHJldHVybiBwYXlsb2FkO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgcHJlcGFyZXMgdGhlIGRhdGEgZm9yIHdyaXRpbmcgYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge09iamVjdH0gcGF5bG9hZFxuXHQgKiBAcmV0dXJuIHtPYmplY3R9XG5cdCAqL1xuXHRwcmVwYXJlU2VydmVyUGF5bG9hZChwYXlsb2FkKSB7XG5cdFx0cGF5bG9hZCA9IGRvVHJhbnNmb3JtLmNhbGwodGhpcywgXCJ3cml0ZVwiLCBwYXlsb2FkKTtcblx0XHRwYXlsb2FkID0gZG9EaWZmLmNhbGwodGhpcywgcGF5bG9hZCk7XG5cblx0XHRjb25zdCBzaGVhdGhpbmdPYmplY3QgPSB0aGlzLmdldE9wdGlvbihcIndyaXRlLnNoZWF0aGluZy5vYmplY3RcIik7XG5cdFx0Y29uc3Qgc2hlYXRoaW5nUGF0aCA9IHRoaXMuZ2V0T3B0aW9uKFwid3JpdGUuc2hlYXRoaW5nLnBhdGhcIik7XG5cblx0XHRpZiAoc2hlYXRoaW5nT2JqZWN0ICYmIHNoZWF0aGluZ1BhdGgpIHtcblx0XHRcdGNvbnN0IHN1YiA9IHBheWxvYWQ7XG5cdFx0XHRwYXlsb2FkID0gc2hlYXRoaW5nT2JqZWN0O1xuXHRcdFx0bmV3IFBhdGhmaW5kZXIocGF5bG9hZCkuc2V0VmlhKHNoZWF0aGluZ1BhdGgsIHN1Yik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHBheWxvYWQ7XG5cdH1cbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIG9ialxuICogQHJldHVybiB7Kn1cbiAqL1xuZnVuY3Rpb24gZG9EaWZmKG9iaikge1xuXHRpZiAoXG5cdFx0dGhpc1tzZXJ2ZXJWZXJzaW9uU3ltYm9sXSA9PT0gbnVsbCB8fFxuXHRcdHRoaXNbc2VydmVyVmVyc2lvblN5bWJvbF0gPT09IHVuZGVmaW5lZFxuXHQpIHtcblx0XHRyZXR1cm4gb2JqO1xuXHR9XG5cblx0Y29uc3QgY2FsbGJhY2sgPSB0aGlzLmdldE9wdGlvbihcIndyaXRlLnBhcnRpYWwuY2FsbGJhY2tcIik7XG5cdGlmICghaXNGdW5jdGlvbihjYWxsYmFjaykpIHtcblx0XHRyZXR1cm4gb2JqO1xuXHR9XG5cblx0Y29uc3QgcmVzdWx0cyA9IGRpZmYodGhpc1tzZXJ2ZXJWZXJzaW9uU3ltYm9sXSwgb2JqKTtcblx0aWYgKCFyZXN1bHRzKSB7XG5cdFx0cmV0dXJuIG9iajtcblx0fVxuXG5cdG9iaiA9IGNhbGxiYWNrKG9iaiwgcmVzdWx0cyk7XG5cdHRoaXNbc2VydmVyVmVyc2lvblN5bWJvbF0gPSBvYmo7XG5cblx0cmV0dXJuIG9iajtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gZG9UcmFuc2Zvcm0odHlwZSwgb2JqKSB7XG5cdGNvbnN0IHRyYW5zZm9ybWF0aW9uID0gdGhpcy5nZXRPcHRpb24oYCR7dHlwZX0ubWFwcGluZy50cmFuc2Zvcm1lcmApO1xuXHRpZiAodHJhbnNmb3JtYXRpb24gIT09IHVuZGVmaW5lZCAmJiB0cmFuc2Zvcm1hdGlvbiAhPT0gbnVsbCkge1xuXHRcdGNvbnN0IHBpcGUgPSBuZXcgUGlwZSh0cmFuc2Zvcm1hdGlvbik7XG5cdFx0Y29uc3QgY2FsbGJhY2tzID0gdGhpcy5nZXRPcHRpb24oYCR7dHlwZX0ubWFwcGluZy5jYWxsYmFja3NgKTtcblxuXHRcdGlmIChpc0FycmF5KGNhbGxiYWNrcykpIHtcblx0XHRcdGZvciAoY29uc3QgY2FsbGJhY2sgb2YgY2FsbGJhY2tzKSB7XG5cdFx0XHRcdGlmICh0eXBlb2YgY2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0XHRcdHBpcGUuc2V0Q2FsbGJhY2soY2FsbGJhY2spO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGlzT2JqZWN0KGNhbGxiYWNrcykpIHtcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIGNhbGxiYWNrcykge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0Y2FsbGJhY2tzLmhhc093blByb3BlcnR5KGtleSkgJiZcblx0XHRcdFx0XHR0eXBlb2YgY2FsbGJhY2tzW2tleV0gPT09IFwiZnVuY3Rpb25cIlxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRwaXBlLnNldENhbGxiYWNrKGtleSwgY2FsbGJhY2tzW2tleV0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0b2JqID0gcGlwZS5ydW4ob2JqKTtcblx0fVxuXG5cdHJldHVybiBvYmo7XG59XG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7U2VydmVyfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIubWpzXCI7XG5cblxuZGVzY3JpYmUoJ1NlcnZlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGl0KCdzaG91bGQgdHJhbnNmb3JtIGRhdGEnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IHdyaXRlQ2FsbGJhY2tDYWxsZWQgPSBmYWxzZVxuICAgICAgICBsZXQgcmVhZENhbGxiYWNrQ2FsbGVkID0gZmFsc2VcblxuICAgICAgICBjb25zdCBzZXJ2ZXIgPSBuZXcgU2VydmVyKHtcbiAgICAgICAgICAgIHdyaXRlOiB7XG4gICAgICAgICAgICAgICAgbWFwcGluZzoge1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lcjogXCJjYWxsOm9uV3JpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvbldyaXRlOiAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlQ2FsbGJhY2tDYWxsZWQgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2hlYXRoaW5nOiB7XG4gICAgICAgICAgICAgICAgICAgIG9iamVjdDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVtbzogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4eXo6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBwYXRoOiBcImRhdGEueHl6XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZWFkOiB7XG4gICAgICAgICAgICAgICAgbWFwcGluZzoge1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lcjogXCJjYWxsOm9uUmVhZFwiLFxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uUmVhZDogKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkQ2FsbGJhY2tDYWxsZWQgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcGF0aDogJ2RhdGEueHl6JyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICBleHBlY3Qoc2VydmVyLnRyYW5zZm9ybVNlcnZlclBheWxvYWQoe2RlbW86IDEsIGRhdGE6IHt4eXo6IDJ9fSkpLnRvLmRlZXAuZXF1YWwoe2RlbW86IDEsIGRhdGE6IHt4eXo6IDJ9fSlcbiAgICAgICAgZXhwZWN0KHNlcnZlci5wcmVwYXJlU2VydmVyUGF5bG9hZCh7ZGVtbzogMSwgZGF0YToge3h5ejogMn19KSkudG8uZGVlcC5lcXVhbCh7ZGVtbzogMSwgZGF0YToge3h5ejogMn19KVxuXG5cbiAgICB9KVxuXG59KTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCwgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgaXNTdHJpbmcsIGlzT2JqZWN0IH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgV2ViQ29ubmVjdCBhcyBOZXRXZWJDb25uZWN0IH0gZnJvbSBcIi4uLy4uLy4uL25ldC93ZWJjb25uZWN0Lm1qc1wiO1xuaW1wb3J0IHsgTWVzc2FnZSB9IGZyb20gXCIuLi8uLi8uLi9uZXQvd2ViY29ubmVjdC9tZXNzYWdlLm1qc1wiO1xuaW1wb3J0IHsgU2VydmVyIH0gZnJvbSBcIi4uL3NlcnZlci5tanNcIjtcblxuZXhwb3J0IHsgV2ViQ29ubmVjdCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICpcbiAqIGhpbnQ6IHRoaXMgbmFtZSBpcyB1c2VkIGluIHRoZSB0ZXN0cy4gaWYgeW91IHdhbnQgdG8gY2hhbmdlIGl0LCBwbGVhc2UgY2hhbmdlIGl0IGluIHRoZSB0ZXN0cyBhcyB3ZWxsLlxuICovXG5jb25zdCB3ZWJDb25uZWN0U3ltYm9sID0gU3ltYm9sKFwiY29ubmVjdGlvblwiKTtcblxuLyoqXG4gKiBUaGUgUmVzdEFQSSBpcyBhIGNsYXNzIHRoYXQgZW5hYmxlcyBhIFJFU1QgQVBJIHNlcnZlci5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uLy4uLy4uL2V4YW1wbGUvZGF0YS9kYXRhc291cmNlL3NlcnZlci93ZWJjb25uZWN0Lm1qc1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMy4xLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBUaGUgTG9jYWxTdG9yYWdlIGNsYXNzIGVuY2Fwc3VsYXRlcyB0aGUgYWNjZXNzIHRvIGRhdGEgb2JqZWN0cy5cbiAqL1xuY2xhc3MgV2ViQ29ubmVjdCBleHRlbmRzIFNlcnZlciB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIG9wdGlvbnMgY29udGFpbnMgZGVmaW5pdGlvbnMgZm9yIHRoZSBkYXRhc291cmNlLlxuXHQgKi9cblx0Y29uc3RydWN0b3Iob3B0aW9ucykge1xuXHRcdHN1cGVyKCk7XG5cblx0XHRpZiAoaXNTdHJpbmcob3B0aW9ucykpIHtcblx0XHRcdG9wdGlvbnMgPSB7IHVybDogb3B0aW9ucyB9O1xuXHRcdH1cblxuXHRcdGlmICghaXNPYmplY3Qob3B0aW9ucykpIG9wdGlvbnMgPSB7fTtcblx0XHR0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdFx0dGhpc1t3ZWJDb25uZWN0U3ltYm9sXSA9IG5ldyBOZXRXZWJDb25uZWN0KHtcblx0XHRcdHVybDogdGhpcy5nZXRPcHRpb24oXCJ1cmxcIiksXG5cdFx0XHRjb25uZWN0aW9uOiB7XG5cdFx0XHRcdHRpbWVvdXQ6IHRoaXMuZ2V0T3B0aW9uKFwiY29ubmVjdGlvbi50aW1lb3V0XCIpLFxuXHRcdFx0XHRyZWNvbm5lY3Q6IHtcblx0XHRcdFx0XHR0aW1lb3V0OiB0aGlzLmdldE9wdGlvbihcImNvbm5lY3Rpb24ucmVjb25uZWN0LnRpbWVvdXRcIiksXG5cdFx0XHRcdFx0YXR0ZW1wdHM6IHRoaXMuZ2V0T3B0aW9uKFwiY29ubmVjdGlvbi5yZWNvbm5lY3QuYXR0ZW1wdHNcIiksXG5cdFx0XHRcdFx0ZW5hYmxlZDogdGhpcy5nZXRPcHRpb24oXCJjb25uZWN0aW9uLnJlY29ubmVjdC5lbmFibGVkXCIpLFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0Y29ubmVjdCgpIHtcblx0XHRyZXR1cm4gdGhpc1t3ZWJDb25uZWN0U3ltYm9sXS5jb25uZWN0KCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGlzQ29ubmVjdGVkKCkge1xuXHRcdHJldHVybiB0aGlzW3dlYkNvbm5lY3RTeW1ib2xdLmlzQ29ubmVjdGVkKCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL3NlcnZlci93ZWJjb25uZWN0XCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB1cmw9dW5kZWZpbmVkIERlZmluZXMgdGhlIHJlc291cmNlIHRoYXQgeW91IHdpc2ggdG8gZmV0Y2guXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBjb25uZWN0aW9uXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBjb25uZWN0aW9uLnRpbWVvdXQ9NTAwMCBEZWZpbmVzIHRoZSB0aW1lb3V0IGZvciB0aGUgY29ubmVjdGlvbi5cblx0ICogQHByb3BlcnR5IHtOdW1iZXJ9IGNvbm5lY3Rpb24ucmVjb25uZWN0LnRpbWVvdXQgVGhlIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIGZvciB0aGUgcmVjb25uZWN0LlxuXHQgKiBAcHJvcGVydHkge051bWJlcn0gY29ubmVjdGlvbi5yZWNvbm5lY3QuYXR0ZW1wdHMgVGhlIG1heGltdW0gbnVtYmVyIG9mIHJlY29ubmVjdHMuXG5cdCAqIEBwcm9wZXJ0eSB7Qm9vbH0gY29ubmVjdGlvbi5yZWNvbm5lY3QuZW5hYmxlZCBJZiB0aGUgcmVjb25uZWN0IGlzIGVuYWJsZWQuXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB3cml0ZT17fSBPcHRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB3cml0ZS5tYXBwaW5nIHRoZSBtYXBwaW5nIGlzIGFwcGxpZWQgYmVmb3JlIHdyaXRpbmcuXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSB3cml0ZS5tYXBwaW5nLnRyYW5zZm9ybWVyIFRyYW5zZm9ybWVyIHRvIHNlbGVjdCB0aGUgYXBwcm9wcmlhdGUgZW50cmllc1xuXHQgKiBAcHJvcGVydHkge01vbnN0ZXIuRGF0YS5EYXRhc291cmNlfmV4YW1wbGVDYWxsYmFja1tdfSB3cml0ZS5tYXBwaW5nLmNhbGxiYWNrIHdpdGggdGhlIGhlbHAgb2YgdGhlIGNhbGxiYWNrLCB0aGUgc3RydWN0dXJlcyBjYW4gYmUgYWRqdXN0ZWQgYmVmb3JlIHdyaXRpbmcuXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB3cml0ZS5zaGVhdGhpbmdcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHdyaXRlLnNoZWF0aGluZy5vYmplY3QgT2JqZWN0IHRvIGJlIHdyYXBwZWRcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHdyaXRlLnNoZWF0aGluZy5wYXRoIFBhdGggdG8gdGhlIGRhdGFcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHJlYWQ9e30gT3B0aW9uc1xuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gcmVhZC5wYXRoIFBhdGggdG8gZGF0YVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gcmVhZC5tYXBwaW5nIHRoZSBtYXBwaW5nIGlzIGFwcGxpZWQgYWZ0ZXIgcmVhZGluZy5cblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IHJlYWQubWFwcGluZy50cmFuc2Zvcm1lciBUcmFuc2Zvcm1lciB0byBzZWxlY3QgdGhlIGFwcHJvcHJpYXRlIGVudHJpZXNcblx0ICogQHByb3BlcnR5IHtNb25zdGVyLkRhdGEuRGF0YXNvdXJjZX5leGFtcGxlQ2FsbGJhY2tbXX0gcmVhZC5tYXBwaW5nLmNhbGxiYWNrIHdpdGggdGhlIGhlbHAgb2YgdGhlIGNhbGxiYWNrLCB0aGUgc3RydWN0dXJlcyBjYW4gYmUgYWRqdXN0ZWQgYWZ0ZXIgcmVhZGluZy5cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHVybDogdW5kZWZpbmVkLFxuXHRcdFx0d3JpdGU6IHtcblx0XHRcdFx0bWFwcGluZzoge1xuXHRcdFx0XHRcdHRyYW5zZm9ybWVyOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0Y2FsbGJhY2tzOiB7fSxcblx0XHRcdFx0fSxcblx0XHRcdFx0c2hlYXRoaW5nOiB7XG5cdFx0XHRcdFx0b2JqZWN0OiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0cGF0aDogdW5kZWZpbmVkLFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdHJlYWQ6IHtcblx0XHRcdFx0bWFwcGluZzoge1xuXHRcdFx0XHRcdHRyYW5zZm9ybWVyOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0Y2FsbGJhY2tzOiB7fSxcblx0XHRcdFx0fSxcblx0XHRcdFx0cGF0aDogdW5kZWZpbmVkLFxuXHRcdFx0fSxcblx0XHRcdGNvbm5lY3Rpb246IHtcblx0XHRcdFx0dGltZW91dDogNTAwMCxcblx0XHRcdFx0cmVjb25uZWN0OiB7XG5cdFx0XHRcdFx0dGltZW91dDogMTAwMCxcblx0XHRcdFx0XHRhdHRlbXB0czogMSxcblx0XHRcdFx0XHRlbmFibGVkOiBmYWxzZSxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgY2xvc2VzIHRoZSBjb25uZWN0aW9uLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0Y2xvc2UoKSB7XG5cdFx0cmV0dXJuIHRoaXNbd2ViQ29ubmVjdFN5bWJvbF0uY2xvc2UoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0cmVhZCgpIHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0d2hpbGUgKHRoaXNbd2ViQ29ubmVjdFN5bWJvbF0uZGF0YVJlY2VpdmVkKCkgPT09IHRydWUpIHtcblx0XHRcdFx0bGV0IG9iaiA9IHRoaXNbd2ViQ29ubmVjdFN5bWJvbF0ucG9sbCgpO1xuXHRcdFx0XHRpZiAoIWlzT2JqZWN0KG9iaikpIHtcblx0XHRcdFx0XHRyZWplY3QobmV3IEVycm9yKFwiVGhlIHJlY2VpdmVkIGRhdGEgaXMgbm90IGFuIG9iamVjdC5cIikpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghKG9iaiBpbnN0YW5jZW9mIE1lc3NhZ2UpKSB7XG5cdFx0XHRcdFx0cmVqZWN0KG5ldyBFcnJvcihcIlRoZSByZWNlaXZlZCBkYXRhIGlzIG5vdCBhIE1lc3NhZ2UuXCIpKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRvYmogPSBvYmouZ2V0RGF0YSgpO1xuXHRcdFx0XHRvYmogPSB0aGlzLnRyYW5zZm9ybVNlcnZlclBheWxvYWQuY2FsbCh0aGlzLCBvYmopO1xuXHRcdFx0XHR0aGlzLnNldChvYmopO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXNvbHZlKHRoaXMuZ2V0KCkpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHR3cml0ZSgpIHtcblx0XHRjb25zdCBvYmogPSB0aGlzLnByZXBhcmVTZXJ2ZXJQYXlsb2FkKHRoaXMuZ2V0KCkpO1xuXHRcdHJldHVybiB0aGlzW3dlYkNvbm5lY3RTeW1ib2xdLnNlbmQob2JqKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtSZXN0QVBJfVxuXHQgKi9cblx0Z2V0Q2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyBXZWJDb25uZWN0KHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFJlYWxTdWJqZWN0KClbXCJvcHRpb25zXCJdKTtcblx0fVxufVxuIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge1dlYkNvbm5lY3R9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9zb3VyY2UvZGF0YS9kYXRhc291cmNlL3NlcnZlci93ZWJjb25uZWN0Lm1qc1wiO1xuaW1wb3J0IHtpbml0V2ViU29ja2V0fSBmcm9tIFwiLi4vLi4vLi4vLi4vdXRpbC93ZWJzb2NrZXQubWpzXCI7XG5cbmNvbnN0IHRlc3RVcmwgPSBcIndzczovL3dzLnBvc3RtYW4tZWNoby5jb20vcmF3XCJcblxuZGVzY3JpYmUoJ1dlYnNvY2tldCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIGxldCBkcyA9IHVuZGVmaW5lZFxuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRXZWJTb2NrZXQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgZG9uZShlKVxuICAgICAgICB9KVxuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGlmIChkcykge1xuICAgICAgICAgICAgZHMuY2xvc2UoKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gd29ya2Fyb3VuZDogd2l0aG91dCB0aGlzLCB0aGUgbm9kZSB0ZXN0IHdpbGwgbm90IGV4aXQgXG4gICAgICAgIGZvciAoY29uc3Qgc3ltIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZHMpKSB7XG4gICAgICAgICAgICBpZiAoc3ltLnRvU3RyaW5nKCkgPT09ICdTeW1ib2woY29ubmVjdGlvbiknKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29ubmVjdGlvbiA9IGRzW3N5bV1cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHN5bTIgb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhjb25uZWN0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3ltMi50b1N0cmluZygpID09PSAnU3ltYm9sKGNvbm5lY3Rpb24pJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc29ja2V0ID0gY29ubmVjdGlvbltzeW0yXT8uc29ja2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvY2tldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc29ja2V0Py50ZXJtaW5hdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0Py5bJ3Rlcm1pbmF0ZSddKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBkb25lKClcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2V0IGNsb25lJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGRzID0gbmV3IFdlYkNvbm5lY3QodGVzdFVybClcbiAgICAgICAgY29uc3QgY2xvbmUgPSBkcy5nZXRDbG9uZSgpXG4gICAgICAgIGV4cGVjdChjbG9uZSkudG8uYmUuYW4uaW5zdGFuY2VvZihXZWJDb25uZWN0KVxuXG4gICAgfSlcblxuICAgIGl0KCdzaG91bGQgdHJhbnNmb3JtIGRhdGEnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgIGxldCB3cml0ZUNhbGxiYWNrQ2FsbGVkID0gZmFsc2VcbiAgICAgICAgbGV0IHJlYWRDYWxsYmFja0NhbGxlZCA9IGZhbHNlXG5cbiAgICAgICAgZHMgPSBuZXcgV2ViQ29ubmVjdCh7XG4gICAgICAgICAgICB1cmw6IHRlc3RVcmwsXG4gICAgICAgICAgICB3cml0ZToge1xuICAgICAgICAgICAgICAgIG1hcHBpbmc6IHtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtZXI6IFwiY2FsbDpvbldyaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgb25Xcml0ZTogKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUNhbGxiYWNrQ2FsbGVkID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNoZWF0aGluZzoge1xuICAgICAgICAgICAgICAgICAgICBvYmplY3Q6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbW86IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeHl6OiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogXCJkYXRhLnh5elwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVhZDoge1xuICAgICAgICAgICAgICAgIG1hcHBpbmc6IHtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtZXI6IFwiY2FsbDpvblJlYWRcIixcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvblJlYWQ6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZENhbGxiYWNrQ2FsbGVkID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHBhdGg6ICdkYXRhLnh5eicsXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICAgICAgZHMuY29ubmVjdCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZHMuc2V0KHtcbiAgICAgICAgICAgICAgICBlbnZlbG9wOiB7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IFwiSGVsbG8gV29ybGRcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGRzLndyaXRlKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBkcy5zZXQoe30pXG4gICAgICAgICAgICAgICAgZXhwZWN0KGRzLmdldCgpKS50by5iZS5kZWVwLmVxdWFsKHt9KTtcblxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuXG5cbiAgICAgICAgICAgICAgICAgICAgZHMucmVhZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRzLmdldCgpKS50by5iZS5kZWVwLmVxdWFsKHtlbnZlbG9wOnttZXNzYWdlOiBcIkhlbGxvIFdvcmxkXCJ9fSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3Qod3JpdGVDYWxsYmFja0NhbGxlZCkudG8uYmUudHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHJlYWRDYWxsYmFja0NhbGxlZCkudG8uYmUudHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKGUpXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSwgMjAwKVxuXG4gICAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoZXJyKSk7XG4gICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgIGRvbmUoZSlcbiAgICAgICAgfSlcblxuXG4gICAgfSlcblxuICAgIGl0KCdzaG91bGQgY29ubmVjdCcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGRzID0gbmV3IFdlYkNvbm5lY3Qoe1xuICAgICAgICAgICAgdXJsOiB0ZXN0VXJsLFxuICAgICAgICAgICAgcmVjb25uZWN0OiB7XG4gICAgICAgICAgICAgICAgZW5hYmxlZDogZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGRzLmNvbm5lY3QoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgZG9uZShlKVxuICAgICAgICB9KVxuXG5cbiAgICB9KVxuXG4gICAgaXQoJ3Nob3VsZCBzZW5kIGEgbWVzc2FnZScsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIFxuICAgICAgICB0aGlzLnRpbWVvdXQoMTAwMDApXG4gICAgICAgIFxuICAgICAgICBkcyA9IG5ldyBXZWJDb25uZWN0KHtcbiAgICAgICAgICAgIHVybDogdGVzdFVybCxcbiAgICAgICAgICAgIHJlY29ubmVjdDoge1xuICAgICAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgZHMuY29ubmVjdCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZHMuc2V0KHtcbiAgICAgICAgICAgICAgICBlbnZlbG9wOiB7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IFwiSGVsbG8gV29ybGRcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGRzLndyaXRlKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBkcy5zZXQoe30pXG4gICAgICAgICAgICAgICAgZXhwZWN0KGRzLmdldCgpKS50by5iZS5kZWVwLmVxdWFsKHt9KTtcblxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgIGRzLnJlYWQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRzLmdldCgpKS50by5iZS5kZWVwLmVxdWFsKHtlbnZlbG9wOnttZXNzYWdlOiBcIkhlbGxvIFdvcmxkXCJ9fSk7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoZSlcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH0sNTAwKVxuICAgICAgICAgICAgICAgIFxuXG4gICAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoZXJyKSk7XG4gICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgIGRvbmUoZSlcbiAgICAgICAgfSlcblxuXG4gICAgfSk7XG5cbn0pO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sLCBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBpc09iamVjdCwgaXNGdW5jdGlvbiwgaXNBcnJheSB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IGRpZmYgfSBmcm9tIFwiLi4vLi4vZGlmZi5tanNcIjtcbmltcG9ydCB7IFNlcnZlciB9IGZyb20gXCIuLi9zZXJ2ZXIubWpzXCI7XG5pbXBvcnQgeyBXcml0ZUVycm9yIH0gZnJvbSBcIi4vcmVzdGFwaS93cml0ZWVycm9yLm1qc1wiO1xuaW1wb3J0IHsgRGF0YUZldGNoRXJyb3IgfSBmcm9tIFwiLi9yZXN0YXBpL2RhdGEtZmV0Y2gtZXJyb3IubWpzXCI7XG5cbmV4cG9ydCB7IFJlc3RBUEkgfTtcblxuLyoqXG4gKiBAdHlwZSB7c3ltYm9sfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMy4xMi4wXG4gKi9cbmNvbnN0IHJhd0RhdGFTeW1ib2wgPSBTeW1ib2wuZm9yKFxuXHRcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL3NlcnZlci9yZXN0YXBpL3Jhd2RhdGFcIixcbik7XG5cbi8qKlxuICogVGhlIFJlc3RBUEkgaXMgYSBjbGFzcyB0aGF0IGVuYWJsZXMgYSBSRVNUIEFQSSBzZXJ2ZXIuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi8uLi8uLi9leGFtcGxlL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvcmVzdGFwaS5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjIuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IFRoZSBSZXN0QVBJIGlzIGEgY2xhc3MgdGhhdCBiaW5kcyBhIFJFU1QgQVBJIHNlcnZlci5cbiAqL1xuY2xhc3MgUmVzdEFQSSBleHRlbmRzIFNlcnZlciB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIG9wdGlvbnMgY29udGFpbnMgZGVmaW5pdGlvbnMgZm9yIHRoZSBkYXRhc291cmNlLlxuXHQgKi9cblx0Y29uc3RydWN0b3Iob3B0aW9ucykge1xuXHRcdHN1cGVyKCk7XG5cblx0XHRpZiAoaXNPYmplY3Qob3B0aW9ucykpIHtcblx0XHRcdHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvcmVzdGFwaVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gd3JpdGU9e30gT3B0aW9uc1xuXHQgKiBAcHJvcGVydHkge09iamVjdH0gd3JpdGUuaW5pdD17fSBBbiBvcHRpb25zIG9iamVjdCBjb250YWluaW5nIGFueSBjdXN0b20gc2V0dGluZ3MgdGhhdCB5b3Ugd2FudCB0byBhcHBseSB0byB0aGUgcmVxdWVzdC4gVGhlIHBhcmFtZXRlcnMgYXJlIGlkZW50aWNhbCB0byB0aG9zZSBvZiB0aGUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9SZXF1ZXN0L1JlcXVlc3R8UmVxdWVzdCBjb25zdHJ1Y3Rvcn1cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHdyaXRlLmluaXQubWV0aG9kPVBPU1Rcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHdyaXRlLmluaXQuaGVhZGVycyBPYmplY3QgY29udGFpbmluZyBhbnkgY3VzdG9tIGhlYWRlcnMgdGhhdCB5b3Ugd2FudCB0byBhcHBseSB0byB0aGUgcmVxdWVzdC5cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHdyaXRlLnJlc3BvbnNlQ2FsbGJhY2sgQ2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgYWZ0ZXIgdGhlIHJlcXVlc3QgaGFzIGJlZW4gY29tcGxldGVkLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gd3JpdGUuYWNjZXB0ZWRTdGF0dXM9WzIwMCwyMDFdXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB3cml0ZS51cmwgVVJMXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB3cml0ZS5tYXBwaW5nIHRoZSBtYXBwaW5nIGlzIGFwcGxpZWQgYmVmb3JlIHdyaXRpbmcuXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSB3cml0ZS5tYXBwaW5nLnRyYW5zZm9ybWVyIFRyYW5zZm9ybWVyIHRvIHNlbGVjdCB0aGUgYXBwcm9wcmlhdGUgZW50cmllc1xuXHQgKiBAcHJvcGVydHkge01vbnN0ZXIuRGF0YS5EYXRhc291cmNlfmV4YW1wbGVDYWxsYmFja1tdfSB3cml0ZS5tYXBwaW5nLmNhbGxiYWNrIHdpdGggdGhlIGhlbHAgb2YgdGhlIGNhbGxiYWNrLCB0aGUgc3RydWN0dXJlcyBjYW4gYmUgYWRqdXN0ZWQgYmVmb3JlIHdyaXRpbmcuXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB3cml0ZS5yZXBvcnRcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IHdyaXRlLnJlcG9ydC5wYXRoIFBhdGggdG8gdmFsaWRhdGlvbnNcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHdyaXRlLnBhcnRpYWxcblx0ICogQHByb3BlcnR5IHtGdW5jdGlvbn0gd3JpdGUucGFydGlhbC5jYWxsYmFjayBDYWxsYmFjayBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBhZnRlciB0aGUgcmVxdWVzdCBoYXMgYmVlbiBjb21wbGV0ZWQuIChvYmosIGRpZmZSZXN1bHQpID0+IG9ialxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gd3JpdGUuc2hlYXRoaW5nXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB3cml0ZS5zaGVhdGhpbmcub2JqZWN0IE9iamVjdCB0byBiZSB3cmFwcGVkXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB3cml0ZS5zaGVhdGhpbmcucGF0aCBQYXRoIHRvIHRoZSBkYXRhXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSByZWFkPXt9IE9wdGlvbnNcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHJlYWQuaW5pdD17fSBBbiBvcHRpb25zIG9iamVjdCBjb250YWluaW5nIGFueSBjdXN0b20gc2V0dGluZ3MgdGhhdCB5b3Ugd2FudCB0byBhcHBseSB0byB0aGUgcmVxdWVzdC4gVGhlIHBhcmFtZXRlcnMgYXJlIGlkZW50aWNhbCB0byB0aG9zZSBvZiB0aGUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9SZXF1ZXN0L1JlcXVlc3R8UmVxdWVzdCBjb25zdHJ1Y3Rvcn1cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHJlYWQuaW5pdC5tZXRob2Q9R0VUXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByZWFkLmFjY2VwdGVkU3RhdHVzPVsyMDBdXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByZWFkLnVybCBVUkxcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHJlYWQubWFwcGluZyB0aGUgbWFwcGluZyBpcyBhcHBsaWVkIGFmdGVyIHJlYWRpbmcuXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSByZWFkLm1hcHBpbmcudHJhbnNmb3JtZXIgVHJhbnNmb3JtZXIgdG8gc2VsZWN0IHRoZSBhcHByb3ByaWF0ZSBlbnRyaWVzXG5cdCAqIEBwcm9wZXJ0eSB7TW9uc3Rlci5EYXRhLkRhdGFzb3VyY2V+ZXhhbXBsZUNhbGxiYWNrW119IHJlYWQubWFwcGluZy5jYWxsYmFjayB3aXRoIHRoZSBoZWxwIG9mIHRoZSBjYWxsYmFjaywgdGhlIHN0cnVjdHVyZXMgY2FuIGJlIGFkanVzdGVkIGFmdGVyIHJlYWRpbmcuXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR3cml0ZToge1xuXHRcdFx0XHRpbml0OiB7XG5cdFx0XHRcdFx0bWV0aG9kOiBcIlBPU1RcIixcblx0XHRcdFx0fSxcblx0XHRcdFx0cmVzcG9uc2VDYWxsYmFjazogdW5kZWZpbmVkLFxuXHRcdFx0XHRhY2NlcHRlZFN0YXR1czogWzIwMCwgMjAxXSxcblx0XHRcdFx0dXJsOiBudWxsLFxuXHRcdFx0XHRtYXBwaW5nOiB7XG5cdFx0XHRcdFx0dHJhbnNmb3JtZXI6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRjYWxsYmFja3M6IFtdLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRzaGVhdGhpbmc6IHtcblx0XHRcdFx0XHRvYmplY3Q6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRwYXRoOiB1bmRlZmluZWQsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHJlcG9ydDoge1xuXHRcdFx0XHRcdHBhdGg6IHVuZGVmaW5lZCxcblx0XHRcdFx0fSxcblxuXHRcdFx0XHRwYXJ0aWFsOiB7XG5cdFx0XHRcdFx0Y2FsbGJhY2s6IG51bGwsXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdFx0cmVhZDoge1xuXHRcdFx0XHRpbml0OiB7XG5cdFx0XHRcdFx0bWV0aG9kOiBcIkdFVFwiLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRwYXRoOiBudWxsLFxuXHRcdFx0XHRyZXNwb25zZUNhbGxiYWNrOiB1bmRlZmluZWQsXG5cdFx0XHRcdGFjY2VwdGVkU3RhdHVzOiBbMjAwXSxcblx0XHRcdFx0dXJsOiBudWxsLFxuXHRcdFx0XHRtYXBwaW5nOiB7XG5cdFx0XHRcdFx0dHJhbnNmb3JtZXI6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRjYWxsYmFja3M6IFtdLFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIG9wdGlvbnMgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIGpzb24gZGVmaW5pdGlvblxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIG9iamVjdFxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIGRhdGEgY2Fubm90IGJlIHJlYWRcblx0ICovXG5cdHJlYWQoKSB7XG5cdFx0bGV0IGluaXQgPSB0aGlzLmdldE9wdGlvbihcInJlYWQuaW5pdFwiKTtcblx0XHRpZiAoIWlzT2JqZWN0KGluaXQpKSBpbml0ID0ge307XG5cdFx0aWYgKCFpbml0W1wibWV0aG9kXCJdKSBpbml0W1wibWV0aG9kXCJdID0gXCJHRVRcIjtcblxuXHRcdGxldCBjYWxsYmFjayA9IHRoaXMuZ2V0T3B0aW9uKFwicmVhZC5yZXNwb25zZUNhbGxiYWNrXCIpO1xuXHRcdGlmICghY2FsbGJhY2spIHtcblx0XHRcdGNhbGxiYWNrID0gKG9iaikgPT4ge1xuXHRcdFx0XHR0aGlzLnNldCh0aGlzLnRyYW5zZm9ybVNlcnZlclBheWxvYWQuY2FsbCh0aGlzLCBvYmopKTtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZldGNoRGF0YS5jYWxsKHRoaXMsIGluaXQsIFwicmVhZFwiLCBjYWxsYmFjayk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICogQHRocm93cyB7V3JpdGVFcnJvcn0gdGhlIGRhdGEgY2Fubm90IGJlIHdyaXR0ZW5cblx0ICovXG5cdHdyaXRlKCkge1xuXHRcdGxldCBpbml0ID0gdGhpcy5nZXRPcHRpb24oXCJ3cml0ZS5pbml0XCIpO1xuXHRcdGlmICghaXNPYmplY3QoaW5pdCkpIGluaXQgPSB7fTtcblx0XHRpZiAodHlwZW9mIGluaXRbXCJoZWFkZXJzXCJdICE9PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRpbml0W1wiaGVhZGVyc1wiXSA9IHtcblx0XHRcdFx0XCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRpZiAoIWluaXRbXCJtZXRob2RcIl0pIGluaXRbXCJtZXRob2RcIl0gPSBcIlBPU1RcIjtcblxuXHRcdGNvbnN0IG9iaiA9IHRoaXMucHJlcGFyZVNlcnZlclBheWxvYWQodGhpcy5nZXQoKSk7XG5cdFx0aW5pdFtcImJvZHlcIl0gPSBKU09OLnN0cmluZ2lmeShvYmopO1xuXG5cdFx0Y29uc3QgY2FsbGJhY2sgPSB0aGlzLmdldE9wdGlvbihcIndyaXRlLnJlc3BvbnNlQ2FsbGJhY2tcIik7XG5cdFx0cmV0dXJuIGZldGNoRGF0YS5jYWxsKHRoaXMsIGluaXQsIFwid3JpdGVcIiwgY2FsbGJhY2spO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge1Jlc3RBUEl9XG5cdCAqL1xuXHRnZXRDbG9uZSgpIHtcblx0XHRyZXR1cm4gbmV3IFJlc3RBUEkoXG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRSZWFsU3ViamVjdCgpW1wib3B0aW9uc1wiXS5yZWFkLFxuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0UmVhbFN1YmplY3QoKVtcIm9wdGlvbnNcIl0ud3JpdGUsXG5cdFx0KTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gaW5pdFxuICogQHBhcmFtIGtleVxuICogQHBhcmFtIGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59XG4gKi9cbmZ1bmN0aW9uIGZldGNoRGF0YShpbml0LCBrZXksIGNhbGxiYWNrKSB7XG5cdGxldCByZXNwb25zZTtcblxuXHRyZXR1cm4gZmV0Y2godGhpcy5nZXRPcHRpb24oYCR7a2V5fS51cmxgKSwgaW5pdClcblx0XHQudGhlbigocmVzcCkgPT4ge1xuXHRcdFx0cmVzcG9uc2UgPSByZXNwO1xuXG5cdFx0XHRjb25zdCBhY2NlcHRlZFN0YXR1cyA9IHRoaXMuZ2V0T3B0aW9uKGAke2tleX0uYWNjZXB0ZWRTdGF0dXNgLCBbMjAwXSkubWFwKFxuXHRcdFx0XHROdW1iZXIsXG5cdFx0XHQpO1xuXG5cdFx0XHRpZiAoYWNjZXB0ZWRTdGF0dXMuaW5kZXhPZihyZXNwLnN0YXR1cykgPT09IC0xKSB7XG5cdFx0XHRcdHRocm93IG5ldyBEYXRhRmV0Y2hFcnJvcihcblx0XHRcdFx0XHRgdGhlIHJlc3BvbnNlIGRvZXMgbm90IGNvbnRhaW4gYW4gYWNjZXB0ZWQgc3RhdHVzIChhY3R1YWw6ICR7cmVzcC5zdGF0dXN9KS5gLFxuXHRcdFx0XHRcdHJlc3BvbnNlLFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gcmVzcC50ZXh0KCk7XG5cdFx0fSlcblx0XHQudGhlbigoYm9keSkgPT4ge1xuXHRcdFx0bGV0IG9iajtcblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0b2JqID0gSlNPTi5wYXJzZShib2R5KTtcblxuXHRcdFx0XHRyZXNwb25zZVtyYXdEYXRhU3ltYm9sXSA9IG9iajtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0aWYgKGJvZHkubGVuZ3RoID4gMTAwKSB7XG5cdFx0XHRcdFx0Ym9keSA9IGAke2JvZHkuc3Vic3RyaW5nKDAsIDk3KX0uLi5gO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhyb3cgbmV3IERhdGFGZXRjaEVycm9yKFxuXHRcdFx0XHRcdGB0aGUgcmVzcG9uc2UgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIGpzb24gKGFjdHVhbDogJHtib2R5fSkuYCxcblx0XHRcdFx0XHRyZXNwb25zZSxcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGNhbGxiYWNrICYmIGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG5cdFx0XHRcdGNhbGxiYWNrKG9iaik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzcG9uc2U7XG5cdFx0fSlcblx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdHRocm93IGU7XG5cdFx0fSk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wsIGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgV3JpdGVFcnJvciB9O1xuXG4vKipcbiAqIEVycm9yIG1lc3NhZ2UgZm9yIEFQSSByZXF1ZXN0cyB3aXRoIGV4dGVuc2lvbiBvZiByZXF1ZXN0IGFuZCB2YWxpZGF0aW9uLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjQuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IHRoZSBlcnJvciBpcyB0aHJvd24gYnkgdGhlIHJlc3QgYXBpIGluIGNhc2Ugb2YgZXJyb3JcbiAqL1xuY2xhc3MgV3JpdGVFcnJvciBleHRlbmRzIEVycm9yIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXG5cdCAqIEBwYXJhbSB7UmVzcG9uc2V9IHJlc3BvbnNlXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSB2YWxpZGF0aW9uXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihtZXNzYWdlLCByZXNwb25zZSwgdmFsaWRhdGlvbikge1xuXHRcdHN1cGVyKG1lc3NhZ2UpO1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0ge1xuXHRcdFx0cmVzcG9uc2U6IHJlc3BvbnNlLFxuXHRcdFx0dmFsaWRhdGlvbjogdmFsaWRhdGlvbixcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFxuXHRcdFx0XCJAc2NodWthaS9tb25zdGVyL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvcmVzdGFwaS93cml0ZS1lcnJvclwiLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7UmVzcG9uc2V9XG5cdCAqL1xuXHRnZXRSZXNwb25zZSgpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJyZXNwb25zZVwiXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtPYmplY3R9XG5cdCAqL1xuXHRnZXRWYWxpZGF0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsU3ltYm9sXVtcInZhbGlkYXRpb25cIl07XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCwgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBEYXRhRmV0Y2hFcnJvciB9O1xuXG4vKipcbiAqIEVycm9yIG1lc3NhZ2UgZm9yIEFQSSByZXF1ZXN0c1xuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDMuNDMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IHRoZSBlcnJvciBpcyB0aHJvd24gYnkgdGhlIHJlc3QgYXBpIGluIGNhc2Ugb2YgZXJyb3JcbiAqL1xuY2xhc3MgRGF0YUZldGNoRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxuXHQgKiBAcGFyYW0ge1Jlc3BvbnNlfSByZXNwb25zZVxuXHQgKi9cblx0Y29uc3RydWN0b3IobWVzc2FnZSwgcmVzcG9uc2UpIHtcblx0XHRzdXBlcihtZXNzYWdlKTtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IHtcblx0XHRcdHJlc3BvbnNlOiByZXNwb25zZSxcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXG5cdFx0XHRcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL3NlcnZlci9yZXN0YXBpL2RhdGFmZXRjaGVycm9yQEBpbnN0YW5jZVwiLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7UmVzcG9uc2V9XG5cdCAqL1xuXHRnZXRSZXNwb25zZSgpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJyZXNwb25zZVwiXTtcblx0fVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtSZXN0QVBJfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvcmVzdGFwaS5tanNcIjtcbmltcG9ydCB7dmFsaWRhdGVPYmplY3R9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmRlc2NyaWJlKCdSZXN0QVBJJywgZnVuY3Rpb24gKCkge1xuXG4gICAgbGV0IGZldGNoUmVmZXJlbmNlO1xuICAgIGxldCByZXR1cm5TdGF0dXM7XG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBnbG9iYWxUaGlzWydmZXRjaCddID0gZmV0Y2hSZWZlcmVuY2U7XG4gICAgfSk7XG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcblxuICAgICAgICByZXR1cm5TdGF0dXMgPSAyMDA7XG4gICAgICAgIGZldGNoUmVmZXJlbmNlID0gZ2xvYmFsVGhpc1snZmV0Y2gnXTtcbiAgICAgICAgZ2xvYmFsVGhpc1snZmV0Y2gnXSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6IFwidGVzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1czogcmV0dXJuU3RhdHVzXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgIH07XG5cbiAgICB9KVxuXG4gICAgaXQoJ3Nob3VsZCBpbnN0YW5jZSBvZiBSZXN0QVBJICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KG5ldyBSZXN0QVBJKCdodHRwczovL21vbnN0ZXJqcy5vcmcvYXNzZXRzL3dvcmxkLmpzb24nKSkudG8uYmUuaW5zdGFuY2VvZihSZXN0QVBJKVxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3J3JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdyZWFkIHNob3VsZCByZXR1cm4gb2JqZWN0JywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRzID0gbmV3IFJlc3RBUEkoe3VybDogJ2h0dHBzOi8vbW9uc3RlcmpzLm9yZy9hc3NldHMvd29ybGQuanNvbid9KVxuICAgICAgICAgICAgZHMucmVhZCgpLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgdmFsaWRhdGVPYmplY3QoZGF0YSk7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3dyaXRlIHNob3VsZCAnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgY29uc3QgZHMgPSBuZXcgUmVzdEFQSSh7XG4gICAgICAgICAgICAgICAgICAgIHJlYWQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJ2h0dHBzOi8vbW9uc3RlcmpzLm9yZy9hc3NldHMvd29ybGQuanNvbidcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgd3JpdGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJ2h0dHBzOi8vbW9uc3RlcmpzLm9yZy9hc3NldHMvd29ybGQuanNvbicsXG4gICAgICAgICAgICAgICAgICAgICAgICBhY2NlcHRlZFN0YXR1czogWzk5XVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgZHMud3JpdGUoKS50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoXCJzaG91bGQgbm90IGJlIGhlcmVcIik7XG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoKSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbiAgICBkZXNjcmliZSgncncgd2l0aCBlcnJvcnMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3JlYWQgc2hvdWxkIHRocm93IGV4Y2VwdGlvbicsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICByZXR1cm5TdGF0dXMgPSA0MDA7IC8vIGZldGNoIHJlc3BvbnNlIHdpdGggNDAwXG5cbiAgICAgICAgICAgIGNvbnN0IGRzID0gbmV3IFJlc3RBUEkoe3VybDogJ2h0dHBzOi8vbW9uc3RlcmpzLm9yZy9hc3NldHMvd29ybGQuanNvbid9KVxuICAgICAgICAgICAgZHMucmVhZCgpLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZShcInNob3VsZCBub3QgcnVuLlwiKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZSgpKTsgLy8gc2hvdWxkIHRocm93IGV4Y2VwdGlvbiBiZWNhdXNlIHJldHVyblN0YXR1cz00MDBcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3dyaXRlIHNob3VsZCAnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgcmV0dXJuU3RhdHVzID0gNDAwOyAvLyBmZXRjaCByZXNwb25zZSB3aXRoIDQwMFxuICAgICAgICAgICAgY29uc3QgZHMgPSBuZXcgUmVzdEFQSSh7dXJsOiAnaHR0cHM6Ly9tb25zdGVyanMub3JnL2Fzc2V0cy93b3JsZC5qc29uJ30sIHt1cmw6ICdodHRwczovL21vbnN0ZXJqcy5vcmcvYXNzZXRzL3dvcmxkLmpzb24nfSlcbiAgICAgICAgICAgIGRzLndyaXRlKCkudGhlbihkYXRhID0+IHtcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZU9iamVjdChkYXRhKTtcbiAgICAgICAgICAgICAgICBkb25lKFwiZXJyb3JcIik7XG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoKSk7IC8vIHNob3VsZCB0aHJvdyBleGNlcHRpb24gYmVjYXVzZSByZXR1cm5TdGF0dXM9NDAwXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KVxuXG5cbn0pXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge0RhdGFzb3VyY2V9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZGF0YS9kYXRhc291cmNlLm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdEYXRhc291cmNlJywgZnVuY3Rpb24gKCkge1xuXG5cbiAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIERhdGFzb3VyY2UgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3QobmV3IERhdGFzb3VyY2UoKSkudG8uYmUuaW5zdGFuY2VvZihEYXRhc291cmNlKVxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ09wdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzZXRPcHRpb24gc2hvdWxkIGNoYW5nZSB2YWx1ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFzb3VyY2UgPSBuZXcgRGF0YXNvdXJjZSgpO1xuICAgICAgICAgICAgZXhwZWN0KGRhdGFzb3VyY2UuZ2V0T3B0aW9uKCdkZWZhdWx0JykpLnRvLmJlLnVuZGVmaW5lZFxuICAgICAgICAgICAgZGF0YXNvdXJjZS5zZXRPcHRpb24oJ2RlZmF1bHQnLCB0cnVlKVxuICAgICAgICAgICAgZXhwZWN0KGRhdGFzb3VyY2UuZ2V0T3B0aW9uKCdkZWZhdWx0JykpLnRvLmJlLnRydWVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3NldE9wdGlvbnMgc2hvdWxkIHNldCBhbGwgdmFsdWVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgZGF0YXNvdXJjZSA9IG5ldyBEYXRhc291cmNlKCk7XG4gICAgICAgICAgICBleHBlY3QoZGF0YXNvdXJjZS5nZXRPcHRpb24oJ2RlZmF1bHQnKSkudG8uYmUudW5kZWZpbmVkXG4gICAgICAgICAgICBkYXRhc291cmNlLnNldE9wdGlvbnMoe2RlZmF1bHQ6IHRydWV9KVxuICAgICAgICAgICAgZXhwZWN0KGRhdGFzb3VyY2UuZ2V0T3B0aW9uKCdkZWZhdWx0JykpLnRvLmJlLnRydWVcbiAgICAgICAgfSk7XG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ3J3JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBkYXRhc291cmNlID0gbmV3IERhdGFzb3VyY2UoKTtcbiAgICAgICAgaXQoJ3JlYWQgc2hvdWxkIHRocm93IGV4ZXB0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IGRhdGFzb3VyY2UucmVhZCgpKS50by50aHJvdyhFcnJvcik7XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgaXQoJ3dyaXRlIHNob3VsZCB0aHJvdyBleGVwdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBkYXRhc291cmNlLnJlYWQoKSkudG8udGhyb3coRXJyb3IpO1xuICAgICAgICB9KTtcblxuXG4gICAgfSlcbiAgICBcbiAgICBkZXNjcmliZSgnZ2V0L3NldCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgZGF0YXNvdXJjZSA9IG5ldyBEYXRhc291cmNlKCk7XG4gICAgICAgIGl0KCdnZXQgc2hvdWxkIHJldHVybiB1bmRlZmluZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoIGRhdGFzb3VyY2UuZ2V0KCkpLnRvLmJlLmVxbCh7fSk7XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgaXQoJ3dyaXRlIHNob3VsZCB0aHJvdyBleGVwdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCggZGF0YXNvdXJjZS5nZXQoKSkudG8uYmUuZXFsKHt9KTtcbiAgICAgICAgICAgIGV4cGVjdCggZGF0YXNvdXJjZS5zZXQoe2E6J215dmFsdWUnfSkpLnRvLmJlLmluc3RhbmNlb2YoRGF0YXNvdXJjZSk7XG4gICAgICAgICAgICBleHBlY3QoIGRhdGFzb3VyY2UuZ2V0KCkpLnRvLmJlLmVxbCh7YTonbXl2YWx1ZSd9KTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pXG5cblxufSkiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge2J1aWxkTWFwfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RhdGEvYnVpbGRtYXAubWpzXCI7XG5cblxuZGVzY3JpYmUoJ2J1aWxkTWFwJywgZnVuY3Rpb24gKCkge1xuXG4gICAgbGV0IGNvbnZlcnRNYXBSZXN1bHQgPSBmdW5jdGlvbiAocikge1xuICAgICAgICBpZiAociBpbnN0YW5jZW9mIE1hcCkge1xuICAgICAgICAgICAgciA9IE9iamVjdC5mcm9tRW50cmllcyhyKTtcbiAgICAgICAgICAgIGlmIChyIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgICAgICAgICByID0gci5tYXAoKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRNYXBSZXN1bHQoZSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHIgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrLCBvXSBvZiBPYmplY3QuZW50cmllcyhyKSkge1xuICAgICAgICAgICAgICAgICAgICByW2tdID0gY29udmVydE1hcFJlc3VsdChvKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcjtcbiAgICB9XG5cbiAgICBkZXNjcmliZSgnYnVpbGQgTWFwIHdpdGggY2FsbGJhY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdkZWZpbml0aW9uIHNob3VsZCByZXR1cm4gbWFwIHdpdGggc3ViIGFuZCBwYXJlbnQga2V5cycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0IG9iaiA9IHtcbiAgICAgICAgICAgICAgICBcImRhdGFcIjogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDEwLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiQ2Fzc2FuZHJhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImVucmljaG1lbnRcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogMSwgbGFiZWw6IFwiWFhTXCIsIHByaWNlOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMTIuMTIgXHUyMEFDJ30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMTIuMTIgXHUyMEFDJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiAyLCBsYWJlbDogXCJYU1wiLCBwcmljZTogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzIyLjEyIFx1MjBBQyd9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzIyLjEyIFx1MjBBQyd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogMywgbGFiZWw6IFwiU1wiLCBwcmljZTogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzMyLjEyIFx1MjBBQyd9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzMyLjEyIFx1MjBBQyd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogNCwgbGFiZWw6IFwiTFwiLCBwcmljZTogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzQyLjEyIFx1MjBBQyd9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzQyLjEyIFx1MjBBQyd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAyMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcIlllc3NleSFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZW5yaWNobWVudFwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiAxLCBsYWJlbDogXCJYWFNcIiwgcHJpY2U6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcxMi4xMiBcdTIwQUMnfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcxMi4xMiBcdTIwQUMnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDIsIGxhYmVsOiBcIlhTXCIsIHByaWNlOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMjIuMTIgXHUyMEFDJ30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMjIuMTIgXHUyMEFDJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiAzLCBsYWJlbDogXCJTXCIsIHByaWNlOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMzIuMTIgXHUyMEFDJ30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMzIuMTIgXHUyMEFDJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiA0LCBsYWJlbDogXCJMXCIsIHByaWNlOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnNDIuMTIgXHUyMEFDJ30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnNDIuMTIgXHUyMEFDJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgbGV0IGNhbGxiYWNrID0gZnVuY3Rpb24gKHN1YmplY3QpIHtcbiAgICAgICAgICAgICAgICBsZXQgbSA9IG5ldyBNYXA7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtpLCBiXSBvZiBPYmplY3QuZW50cmllcyhzdWJqZWN0LmRhdGEpKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGtleTEgPSBpO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2osIGNdIG9mIE9iamVjdC5lbnRyaWVzKGIuZW5yaWNobWVudC52YXJpYW50cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBrZXkyID0gajtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBbaywgZF0gb2YgT2JqZWN0LmVudHJpZXMoYy5wcmljZSkpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBrZXkzID0gaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQubmFtZSA9IGIubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLmxhYmVsID0gYy5sYWJlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLmlkID0gW2tleTEsIGtleTIsIGtleTNdLmpvaW4oJy4nKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0uc2V0KGQuaWQsIGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBtYXAgPSBidWlsZE1hcChvYmosIGNhbGxiYWNrLCAnJHtuYW1lfSAke2xhYmVsfScsICcke2lkfScpXG4gICAgICAgICAgICBsZXQgaSA9IGNvbnZlcnRNYXBSZXN1bHQobWFwKTtcblxuICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KGkpKS50by5iZS5lcXVhbCgne1wiMC4wLjBcIjpcIkNhc3NhbmRyYSBYWFNcIixcIjAuMC4xXCI6XCJDYXNzYW5kcmEgWFhTXCIsXCIwLjEuMFwiOlwiQ2Fzc2FuZHJhIFhTXCIsXCIwLjEuMVwiOlwiQ2Fzc2FuZHJhIFhTXCIsXCIwLjIuMFwiOlwiQ2Fzc2FuZHJhIFNcIixcIjAuMi4xXCI6XCJDYXNzYW5kcmEgU1wiLFwiMC4zLjBcIjpcIkNhc3NhbmRyYSBMXCIsXCIwLjMuMVwiOlwiQ2Fzc2FuZHJhIExcIixcIjEuMC4wXCI6XCJZZXNzZXkhIFhYU1wiLFwiMS4wLjFcIjpcIlllc3NleSEgWFhTXCIsXCIxLjEuMFwiOlwiWWVzc2V5ISBYU1wiLFwiMS4xLjFcIjpcIlllc3NleSEgWFNcIixcIjEuMi4wXCI6XCJZZXNzZXkhIFNcIixcIjEuMi4xXCI6XCJZZXNzZXkhIFNcIixcIjEuMy4wXCI6XCJZZXNzZXkhIExcIixcIjEuMy4xXCI6XCJZZXNzZXkhIExcIn0nKTtcblxuICAgICAgICB9KVxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnYnVpbGQgc3VibWFwIHdpdGggKicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ2RlZmluaXRpb24gc2hvdWxkIHJldHVybiB7XCIxMFwiOlwiQ2Fzc2FuZHJhIDEwXCIsXCIyMFwiOlwiWWVzc2V5ISAyMFwifScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0IG9iaiA9IHtcbiAgICAgICAgICAgICAgICBcImRhdGFcIjogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDEwLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiQ2Fzc2FuZHJhXCJcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAyMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcIlllc3NleSFcIixcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGxldCBtYXAgPSBidWlsZE1hcChvYmosICdkYXRhLionLCAnJHtuYW1lfSAke2lkfScsICcke2lkfScpXG4gICAgICAgICAgICBsZXQgaSA9IGNvbnZlcnRNYXBSZXN1bHQobWFwKTtcbiAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShpKSkudG8uYmUuZXF1YWwoJ3tcIjEwXCI6XCJDYXNzYW5kcmEgMTBcIixcIjIwXCI6XCJZZXNzZXkhIDIwXCJ9Jyk7XG5cbiAgICAgICAgfSlcbiAgICB9KVxuXG5cbiAgICBkZXNjcmliZSgnYnVpbGQgc3VibWFwIHdpdGggKionLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdkZWZpbml0aW9uIHNob3VsZCByZXR1cm4gTWFwJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBsZXQgb2JqID0ge1xuICAgICAgICAgICAgICAgIFwiZGF0YVwiOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMTAsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJDYXNzYW5kcmFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZW5yaWNobWVudFwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiAxLCBsYWJlbDogXCJYWFNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaWNlOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMTIuMTIgXHUyMEFDJywgaWQ6IDF9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzEyLjEyIFx1MjBBQycsIGlkOiAyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDIsIGxhYmVsOiBcIlhTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmljZTogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzIyLjEyIFx1MjBBQycsIGlkOiAzfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcyMi4xMiBcdTIwQUMnLCBpZDogNH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiAzLCBsYWJlbDogXCJTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmljZTogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzMyLjEyIFx1MjBBQycsIGlkOiA1fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICczMi4xMiBcdTIwQUMnLCBpZDogNn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiA0LCBsYWJlbDogXCJMXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmljZTogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzQyLjEyIFx1MjBBQycsIGlkOiA3fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICc0Mi4xMiBcdTIwQUMnLCBpZDogOH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDIwLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiWWVzc2V5IVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJlbnJpY2htZW50XCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDEsIGxhYmVsOiBcIlhYU1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpY2U6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcxMi4xMiBcdTIwQUMnLCBpZDogOX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMTIuMTIgXHUyMEFDJywgaWQ6IDEwfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDIsIGxhYmVsOiBcIlhTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmljZTogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzIyLjEyIFx1MjBBQycsIGlkOiAxMX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMjIuMTIgXHUyMEFDJywgaWQ6IDEyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDMsIGxhYmVsOiBcIlNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaWNlOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMzIuMTIgXHUyMEFDJywgaWQ6IDEzfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICczMi4xMiBcdTIwQUMnLCBpZDogMTR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogNCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBcIkxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaWNlOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnNDIuMTIgXHUyMEFDJywgaWQ6IDE1fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICc0Mi4xMiBcdTIwQUMnLCBpZDogMTZ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzQ0LjEyIFx1MjBBQycsIGlkOiAxN31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgbGV0IG1hcCA9IGJ1aWxkTWFwKG9iaiwgJ2RhdGEuKi5lbnJpY2htZW50LnZhcmlhbnRzLioucHJpY2UuKicsICcke3ZrfSAke14ubGFiZWx9ICR7Xi5eLm5hbWV9JywgJyR7Xi5eLnNrdX0nKVxuICAgICAgICAgICAgbGV0IGkgPSBjb252ZXJ0TWFwUmVzdWx0KG1hcCk7XG4gICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkoaSkpLnRvLmJlLmVxdWFsKCd7XCJkYXRhLjAuZW5yaWNobWVudC52YXJpYW50cy4wLnByaWNlLjBcIjpcIjEyLjEyIFx1MjBBQyBYWFMgQ2Fzc2FuZHJhXCIsXCJkYXRhLjAuZW5yaWNobWVudC52YXJpYW50cy4wLnByaWNlLjFcIjpcIjEyLjEyIFx1MjBBQyBYWFMgQ2Fzc2FuZHJhXCIsXCJkYXRhLjAuZW5yaWNobWVudC52YXJpYW50cy4xLnByaWNlLjBcIjpcIjIyLjEyIFx1MjBBQyBYUyBDYXNzYW5kcmFcIixcImRhdGEuMC5lbnJpY2htZW50LnZhcmlhbnRzLjEucHJpY2UuMVwiOlwiMjIuMTIgXHUyMEFDIFhTIENhc3NhbmRyYVwiLFwiZGF0YS4wLmVucmljaG1lbnQudmFyaWFudHMuMi5wcmljZS4wXCI6XCIzMi4xMiBcdTIwQUMgUyBDYXNzYW5kcmFcIixcImRhdGEuMC5lbnJpY2htZW50LnZhcmlhbnRzLjIucHJpY2UuMVwiOlwiMzIuMTIgXHUyMEFDIFMgQ2Fzc2FuZHJhXCIsXCJkYXRhLjAuZW5yaWNobWVudC52YXJpYW50cy4zLnByaWNlLjBcIjpcIjQyLjEyIFx1MjBBQyBMIENhc3NhbmRyYVwiLFwiZGF0YS4wLmVucmljaG1lbnQudmFyaWFudHMuMy5wcmljZS4xXCI6XCI0Mi4xMiBcdTIwQUMgTCBDYXNzYW5kcmFcIixcImRhdGEuMS5lbnJpY2htZW50LnZhcmlhbnRzLjAucHJpY2UuMFwiOlwiMTIuMTIgXHUyMEFDIFhYUyBZZXNzZXkhXCIsXCJkYXRhLjEuZW5yaWNobWVudC52YXJpYW50cy4wLnByaWNlLjFcIjpcIjEyLjEyIFx1MjBBQyBYWFMgWWVzc2V5IVwiLFwiZGF0YS4xLmVucmljaG1lbnQudmFyaWFudHMuMS5wcmljZS4wXCI6XCIyMi4xMiBcdTIwQUMgWFMgWWVzc2V5IVwiLFwiZGF0YS4xLmVucmljaG1lbnQudmFyaWFudHMuMS5wcmljZS4xXCI6XCIyMi4xMiBcdTIwQUMgWFMgWWVzc2V5IVwiLFwiZGF0YS4xLmVucmljaG1lbnQudmFyaWFudHMuMi5wcmljZS4wXCI6XCIzMi4xMiBcdTIwQUMgUyBZZXNzZXkhXCIsXCJkYXRhLjEuZW5yaWNobWVudC52YXJpYW50cy4yLnByaWNlLjFcIjpcIjMyLjEyIFx1MjBBQyBTIFllc3NleSFcIixcImRhdGEuMS5lbnJpY2htZW50LnZhcmlhbnRzLjMucHJpY2UuMFwiOlwiNDIuMTIgXHUyMEFDIEwgWWVzc2V5IVwiLFwiZGF0YS4xLmVucmljaG1lbnQudmFyaWFudHMuMy5wcmljZS4xXCI6XCI0Mi4xMiBcdTIwQUMgTCBZZXNzZXkhXCIsXCJkYXRhLjEuZW5yaWNobWVudC52YXJpYW50cy4zLnByaWNlLjJcIjpcIjQ0LjEyIFx1MjBBQyBMIFllc3NleSFcIn0nKTtcblxuICAgICAgICB9KVxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnZXhhbXBsZWNvZGUnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBleGVjdXRlIGV4YW1wbGUgY29kZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0IG9iaiA9IHtcbiAgICAgICAgICAgICAgICBcImRhdGFcIjogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDEwLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiQ2Fzc2FuZHJhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImFkZHJlc3NcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3RyZWV0XCI6IFwiNDkzLTQxMDUgVnVscHV0YXRlIFN0cmVldFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY2l0eVwiOiBcIlNhdW11clwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiemlwXCI6IFwiNTI2MjhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDIwLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiSG9sbHlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYWRkcmVzc1wiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzdHJlZXRcIjogXCIxNzYyIEVnZXQgUmQuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjaXR5XCI6IFwiU2Nod2FsYmFjaFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiemlwXCI6IFwiOTUyMzQwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAzMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcIkd1eVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJhZGRyZXNzXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN0cmVldFwiOiBcIjk1Ny0zODggU29sbGljaXR1ZGluIEF2ZW51ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY2l0eVwiOiBcIlBhbmNoaVx1MDBFMFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiemlwXCI6IFwiNDIwNzI5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGxldCBtYXA7XG4gICAgICAgICAgICBtYXAgPSBidWlsZE1hcChvYmosICdkYXRhLionLCAnJHtuYW1lfSAoJHthZGRyZXNzLnppcH0gJHthZGRyZXNzLmNpdHl9KScsICdpZCcpXG4gICAgICAgICAgICBleHBlY3QobWFwKS50by5iZS5pbnN0YW5jZU9mKE1hcCk7XG5cbiAgICAgICAgICAgIG1hcCA9IGJ1aWxkTWFwKG9iaiwgJ2RhdGEuKicsICcke25hbWV9ICgke2FkZHJlc3MuemlwfSAke2FkZHJlc3MuY2l0eX0pJylcbiAgICAgICAgICAgIGV4cGVjdChtYXApLnRvLmJlLmluc3RhbmNlT2YoTWFwKTtcblxuICAgICAgICAgICAgbWFwID0gYnVpbGRNYXAob2JqLCAnZGF0YS4qJywgJyR7bmFtZX0gKCR7YWRkcmVzcy56aXB9ICR7YWRkcmVzcy5jaXR5fSknLCAnaWQnLCBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAodmFsdWVbJ2lkJ10gPj0gMjApID8gdHJ1ZSA6IGZhbHNlXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgZXhwZWN0KG1hcCkudG8uYmUuaW5zdGFuY2VPZihNYXApO1xuICAgICAgICB9KTtcblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnYnVpbGRtYXAoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgb2JqMSA9IHtcbiAgICAgICAgICAgIGRhdGFzZXQ6IHtcbiAgICAgICAgICAgICAgICBcIjEwMDgyXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJUZXN0IDFcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkcmVzczogXCJIZXJlIDFcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCIxMDA4NFwiOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVGVzdCAyXCIsXG4gICAgICAgICAgICAgICAgICAgIGFkZHJlc3M6IFwiSGVyZSAyXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gTWFwIEluc3RhbmNlLicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChidWlsZE1hcCh7fSwgJycpKS50by5iZS5pbnN0YW5jZU9mKE1hcCk7XG4gICAgICAgIH0pO1xuXG5cbiAgICAgICAgW1xuICAgICAgICAgICAgW29iajEsICdkYXRhc2V0LionLCAnYWRkcmVzcycsICd7XCJkYXRhc2V0LjEwMDgyXCI6XCJIZXJlIDFcIixcImRhdGFzZXQuMTAwODRcIjpcIkhlcmUgMlwifSddLFxuICAgICAgICAgICAgW29iajEsICd4JywgdW5kZWZpbmVkLCAne30nXSxcbiAgICAgICAgICAgIFtvYmoxLCAnZGF0YXNldC4qJywgJ25hbWUnLCAne1wiZGF0YXNldC4xMDA4MlwiOlwiVGVzdCAxXCIsXCJkYXRhc2V0LjEwMDg0XCI6XCJUZXN0IDJcIn0nXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBkID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdidWlsZE1hcCgnICsgSlNPTi5zdHJpbmdpZnkoYSkgKyAnLCcgKyBKU09OLnN0cmluZ2lmeShiKSArICcsJyArIEpTT04uc3RyaW5naWZ5KGMpICsgJykgc2hvdWxkIHJldHVybiAnICsgSlNPTi5zdHJpbmdpZnkoZCkgKyAnICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgdCA9IGJ1aWxkTWFwKGEsIGIsIGMpO1xuICAgICAgICAgICAgICAgIGxldCBtID0gSlNPTi5zdHJpbmdpZnkoY29udmVydE1hcFJlc3VsdCh0KSk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG0pLnRvLmJlLmVxdWFsKGQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG59KTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7VHJhbnNmb3JtZXJ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZGF0YS90cmFuc2Zvcm1lci5tanNcIjtcbmltcG9ydCB7Z2V0TG9jYWxlT2ZEb2N1bWVudH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vbG9jYWxlLm1qc1wiO1xuaW1wb3J0IHtFbWJlZH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9pMThuL3Byb3ZpZGVycy9lbWJlZC5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxuZGVzY3JpYmUoJ1RyYW5zZm9ybWVyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgbGV0IHByb21pc2VzID0gW11cbiAgICAgICAgcHJvbWlzZXMucHVzaChpbml0SlNET00oKSk7XG4gICAgICAgIGlmICghZ2xvYmFsVGhpc1snY3J5cHRvJ10pIHtcbiAgICAgICAgICAgIHByb21pc2VzLnB1c2goaW1wb3J0KFwiQHBlY3VsaWFyL3dlYmNyeXB0b1wiKS50aGVuKG0gPT4ge1xuICAgICAgICAgICAgICAgIGdsb2JhbFRoaXNbJ2NyeXB0byddID0gbmV3IG0uQ3J5cHRvKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9KSlcbiAgICAgICAgfVxuXG4gICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ1RyYW5zZm9ybWVyLnJ1bigpIGxvY2FsaXplIGNvbW1hbmRzJywgZnVuY3Rpb24gKCkge1xuXG5cbiAgICAgICAgY29uc3QgaXNOb2RlID0gdHlwZW9mIGdsb2JhbCA9PT0gJ29iamVjdCcgJiYgJ1tvYmplY3QgZ2xvYmFsXScgPT09IGdsb2JhbC50b1N0cmluZy5jYWxsKGdsb2JhbCk7XG5cblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ2RhdGV0aW1lZm9ybWF0JywgXCIyMDIzLTAyLTA0IDA4OjAyOjAxXCIsIFwiRmViIDQsIDIwMjMsIDA4OjAyOjAxXCIsIFwiNCBGZWIgMjAyMywgMDg6MDI6MDFcIl0sXG4gICAgICAgICAgICBbJ2RhdGV0aW1lZm9ybWF0Omxvbmc6c2hvcnQnLCBcIjIwMjMtMDItMDQgMDg6MDI6MDFcIiwgXCJGZWJydWFyeSA0LCAyMDIzIGF0IDA4OjAyXCIsIFwiNCBGZWJydWFyeSAyMDIzIGF0IDA4OjAyXCJdLFxuICAgICAgICAgICAgWydkYXRldGltZWZvcm1hdDpzaG9ydDpzaG9ydCcsIFwiMjAyMy0wMi0wNCAwODowMjowMVwiLCBcIjIvNC8yMywgMDg6MDJcIiwgXCIwNC8wMi8yMDIzLCAwODowMlwiXSxcbiAgICAgICAgICAgIFsnY3VycmVuY3knLCBcIkVVUjBcIiwgXCJcdTIwQUMwLjAwXCIsIFwiXHUyMEFDMC4wMFwiXSxcbi8vICAgICAgICAgICAgWydjdXJyZW5jeToxOjInLCBcIkVVUjE0LjI1XCIsIFwiXHUyMEFDMTQuM1wiLCBcIlx1MjBBQzE0LjJcIl0sXG4gICAgICAgICAgICBbJ2N1cnJlbmN5JywgXCJFVVIxNC4yNVwiLCBcIlx1MjBBQzE0LjI1XCIsIFwiXHUyMEFDMTQuMjVcIl0sXG4gICAgICAgICAgICBbJ2RhdGV0aW1lJywgXCIyMDIzLTAyLTE0IDE0OjEyOjEwXCIsIFwiMi8xNC8yMDIzLCAxNDoxMjoxMFwiLFwiMTQvMDIvMjAyMywgMTQ6MTI6MTBcIl0sXG4gICAgICAgICAgICBbJ2RhdGV0aW1lJywgXCIyMDIzLTAyLTE0IDA4OjAyOjAxXCIsIFwiMi8xNC8yMDIzLCAwODowMjowMVwiLFwiMTQvMDIvMjAyMywgMDg6MDI6MDFcIl0sXG4gICAgICAgICAgICBbJ2RhdGUnLCBcIjIwMjMtMDItMTRcIiwgXCIwMi8xNC8yMDIzXCIsXCIxNC8wMi8yMDIzXCJdLFxuXG5cbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0bGFiLnNjaHVrYWkuY29tL29zcy9saWJyYXJpZXMvamF2YXNjcmlwdC9tb25zdGVyLy0vaXNzdWVzLzEyNFxuXG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpIC8vIGNvbW1hbmRcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpIC8vIHZhbHVlXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKSAvLyBleHBlY3RlZCByZXN1bHQgbm9kZSAgICBcbiAgICAgICAgICAgIGxldCBkID0gZGF0YS5zaGlmdCgpIC8vIGV4cGVjdGVkIHJlc3VsdCBicm93c2VyICAgIFxuXG4gICAgICAgICAgICBjb25zdCBleHBlY3RlZCA9IGlzTm9kZSA/IGMgOiBkXG5cbiAgICAgICAgICAgIGl0KCdUcmFuc2Zvcm1lci5ydW4oJyArIEpTT04uc3RyaW5naWZ5KGEpICsgJykucnVuKCcgKyBKU09OLnN0cmluZ2lmeShiKSArICcpIHNob3VsZCByZXR1cm4gJyArIEpTT04uc3RyaW5naWZ5KGV4cGVjdGVkKSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCB0ID0gbmV3IFRyYW5zZm9ybWVyKGEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHIgPSB0LnJ1bihiKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZXhwZWN0ZWQpLnRvLmJlLmVxbChyLCBcIlRyYW5zZm9ybWVyLnJ1bihcIiArIEpTT04uc3RyaW5naWZ5KGEpICsgXCIpLnJ1bihcIiArIEpTT04uc3RyaW5naWZ5KGIpICsgXCIpIHNob3VsZCByZXR1cm4gXCIgKyBKU09OLnN0cmluZ2lmeShjKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJ1RyYW5zZm9ybWVyLnJ1bigpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsnZXF1YWxzOmEnLCBcImFcIiwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2VxdWFsczphJywgXCJiXCIsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnZXF1YWxzOjMnLCAzLCB0cnVlXSxcbiAgICAgICAgICAgIFsnZXF1YWxzOjMnLCA2LCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2VxdWFsczpvbicsIHRydWUsIHRydWVdLFxuICAgICAgICAgICAgWydlcXVhbHM6dHJ1ZScsIHRydWUsIHRydWVdLFxuICAgICAgICAgICAgWydlcXVhbHM6b24nLCBmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgWydlcXVhbHM6dHJ1ZScsIGZhbHNlLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2VxdWFsczpvZmYnLCBmYWxzZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2VxdWFsczpmYWxzZScsIGZhbHNlLCB0cnVlXSxcbiAgICAgICAgICAgIFsnZXF1YWxzOm9mZicsIGZhbHNlLCB0cnVlXSxcbiAgICAgICAgICAgIFsnZXF1YWxzOmZhbHNlJywgdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgWydlcXVhbHM6MycsIDMsIHRydWVdLFxuICAgICAgICAgICAgWydlcXVhbHM6MycsIDYsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnZXF1YWxzOnVuZGVmaW5lZCcsIHVuZGVmaW5lZCwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2VxdWFsczp1bmRlZmluZWQnLCAzLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2VxdWFsczpudWxsJywgbnVsbCwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2VxdWFsczpudWxsJywgMywgZmFsc2VdLFxuICAgICAgICAgICAgWydlcXVhbHM6MycsIDYsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnaGFzLWVudHJpZXMnLCB7fSwgZmFsc2VdLFxuICAgICAgICAgICAgWydoYXMtZW50cmllcycsIHthOiA0fSwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2hhcy1lbnRyaWVzJywgW10sIGZhbHNlXSxcbiAgICAgICAgICAgIFsnaGFzLWVudHJpZXMnLCBcIlwiLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2hhcy1lbnRyaWVzJywgWzEsIDIsIDNdLCB0cnVlXSxcbiAgICAgICAgICAgIFsnaGFzLWVudHJpZXMnLCBbMV0sIHRydWVdLFxuICAgICAgICAgICAgWydoYXMtZW50cmllcycsIFtcIjFcIl0sIHRydWVdLFxuICAgICAgICAgICAgWydoYXMtZW50cmllcycsIFt0cnVlXSwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2NvbnRhaW5zOngnLCBcImFzZCB3eGQgc2RmXCIsIHRydWVdLFxuICAgICAgICAgICAgWydjb250YWluczp4JywgXCJhc2Qgd2Qgc2RmXCIsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnY29udGFpbnM6YicsIFtcImFcIiwgXCJiXCIsIFwiY1wiXSwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2NvbnRhaW5zOngnLCBbXCJhXCIsIFwiYlwiLCBcImNcIl0sIGZhbHNlXSxcbiAgICAgICAgICAgIFsnaXN1bmRlZmluZWQnLCBcImFcIiwgZmFsc2VdLFxuICAgICAgICAgICAgWydpc3VuZGVmaW5lZCcsIG51bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnaXN1bmRlZmluZWQnLCB1bmRlZmluZWQsIHRydWVdLFxuICAgICAgICAgICAgWydpc251bGwnLCBcImFcIiwgZmFsc2VdLFxuICAgICAgICAgICAgWydpc251bGwnLCBudWxsLCB0cnVlXSxcbiAgICAgICAgICAgIFsnaXNzZXQnLCBudWxsLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2lzc2V0JywgdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2lzc2V0JywgXCJcIiwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2lzbnVtYmVyJywgXCJhXCIsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnaXNudW1iZXInLCA0LCB0cnVlXSxcbiAgICAgICAgICAgIFsnaXNudW1iZXInLCA0LjUsIHRydWVdLFxuICAgICAgICAgICAgWydpc2ludGVnZXInLCA0LjUsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnaXNpbnRlZ2VyJywgNCwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2lzZmxvYXQnLCA1LjYsIHRydWVdLFxuICAgICAgICAgICAgWydpc2Zsb2F0JywgNSwgZmFsc2VdLFxuICAgICAgICAgICAgWydpc29iamVjdCcsIDQsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnaXNvYmplY3QnLCB7fSwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2lzYXJyYXknLCBbe31dLCB0cnVlXSxcbiAgICAgICAgICAgIFsnaXNhcnJheScsIFwiYVwiLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ25vdCcsIHRydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnbm90JywgZmFsc2UsIHRydWVdLFxuICAgICAgICAgICAgWydtYXA6YT00OmI9NTpjPTYnLCBcImFcIiwgXCI0XCJdLFxuICAgICAgICAgICAgWyd5ZWFyJywgXCIyMDIzLTAyLTE0XCIsIDIwMjNdLFxuICAgICAgICAgICAgWydtb250aCcsIFwiMjAyMy0wMi0xNFwiLCAyXSxcbiAgICAgICAgICAgIFsnZGF5JywgXCIyMDIzLTAyLTE0XCIsIDE0XSxcbiAgICAgICAgICAgIFsnd2Vla2RheScsIFwiMjAyMy0wMi0xNFwiLCAyXSxcbiAgICAgICAgICAgIFsnbWludXRlcycsIFwiMjAyMy0wMi0xNCAwNjoxMjoyMVwiLCAxMl0sXG4gICAgICAgICAgICBbJ3NlY29uZHMnLCBcIjIwMjMtMDItMTQgMDY6MTI6MjFcIiwgMjFdLFxuICAgICAgICAgICAgWydob3VycycsIFwiMjAyMy0wMi0xNCAwNjoxMjoyMVwiLCA2XSxcbiAgICAgICAgICAgIFsndGltZScsIFwiMjAyMy0wMi0xNCAwNjoxMjoyMVwiLCBcIjA2OjEyOjIxXCJdLFxuICAgICAgICAgICAgWyd0aW1lc3RhbXAnLCBcIjIwMjMtMDItMTRcIiwgMTY3NjMzMjgwMDAwMF0sXG4gICAgICAgICAgICBbJ2NvbmNhdDphLmIuYzp0ZXN0OmEuYi5kJywge2E6IHtiOiB7YzogNCwgZDogNn19fSwgXCI0dGVzdDZcIl0sXG4gICAgICAgICAgICBbJ2NvbmNhdDphLmIuYzpcXFxcIFxcXFwgOmEuYi5kJywge2E6IHtiOiB7YzogNCwgZDogNn19fSwgXCI0ICA2XCJdLFxuICAgICAgICAgICAgWydjb25jYXQ6YS5iLmM6LDphLmIuZCcsIHthOiB7Yjoge2M6IDQsIGQ6IDZ9fX0sIFwiNCw2XCJdLFxuICAgICAgICAgICAgWydjb25jYXQ6YS5iLmM6LDpcXFxcIDphLmIuZCcsIHthOiB7Yjoge2M6IDQsIGQ6IDZ9fX0sIFwiNCwgNlwiXSxcbiAgICAgICAgICAgIFsnPz86YScsIG51bGwsICdhJ10sXG4gICAgICAgICAgICBbJz8/OmEnLCB1bmRlZmluZWQsICdhJ10sXG4gICAgICAgICAgICBbJz8/OmEnLCAndHJ1ZScsICd0cnVlJ10sXG4gICAgICAgICAgICBbJz8/OmEnLCBmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgWycgaWY6YTogJywgZmFsc2UsIHVuZGVmaW5lZF0sIC8vIHdpdGhvdXQgXFxcXFxuICAgICAgICAgICAgWycgaWY6YTpcXFxcICcsIGZhbHNlLCBcIiBcIl0sXG4gICAgICAgICAgICBbJyBpZjphOlxcXFwgJywgdHJ1ZSwgXCJhXCJdLFxuICAgICAgICAgICAgWydkZWZhdWx0OnVuZGVmaW5lZDpib29sJywgdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2RlZmF1bHQ6eWVzJywgbnVsbCwgJ3llcyddLFxuICAgICAgICAgICAgWydkZWZhdWx0OnllcycsIHVuZGVmaW5lZCwgJ3llcyddLFxuICAgICAgICAgICAgWydkZWZhdWx0OjE6Ym9vbCcsIHVuZGVmaW5lZCwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2RlZmF1bHQ6b246Ym9vbCcsIHVuZGVmaW5lZCwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2RlZmF1bHQ6dHJ1ZTpib29sJywgdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFsnZGVmYXVsdDp5ZXM6Ym9vbCcsIHVuZGVmaW5lZCwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2RlZmF1bHQ6ZmFsc2U6Ym9vbCcsIHVuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgWydkZWZhdWx0OjE6aW50JywgdW5kZWZpbmVkLCAxXSxcbiAgICAgICAgICAgIFsnZGVmYXVsdDoxOnN0cmluZycsIHVuZGVmaW5lZCwgJzEnXSxcbiAgICAgICAgICAgIFsnZmlyc3Qta2V5Jywge2E6IDEsIGM6IDMsIGI6IDJ9LCAxXSxcbiAgICAgICAgICAgIFsnbGFzdC1rZXknLCB7YTogMSwgYzogMywgYjogMn0sIDNdLFxuICAgICAgICAgICAgWydudGgtbGFzdC1rZXk6MCcsIHthOiAxLCBjOiAzLCBiOiAyfSwgM10sXG4gICAgICAgICAgICBbJ250aC1sYXN0LWtleToxJywge2E6IDEsIGM6IDMsIGI6IDJ9LCAyXSxcbiAgICAgICAgICAgIFsnbnRoLWxhc3Qta2V5OjInLCB7YTogMSwgYzogMywgYjogMn0sIDFdLFxuICAgICAgICAgICAgWydudGgta2V5OjInLCB7YTogMSwgYjogMiwgYzogM30sIDNdLFxuICAgICAgICAgICAgWydudGgta2V5OjAnLCB7YzogMywgYTogMSwgYjogMn0sIDFdLFxuICAgICAgICAgICAgWydudGgta2V5OjInLCB7YTogMSwgYzogMywgYjogMn0sIDNdLFxuICAgICAgICAgICAgWydwcmVmaXg6SGVsbG9cXFxcICcsICd0ZXN0JywgXCJIZWxsbyB0ZXN0XCJdLFxuICAgICAgICAgICAgWyd0b2pzb24nLCB7YTogNH0sIFwie1xcXCJhXFxcIjo0fVwiXSxcbiAgICAgICAgICAgIFsncHJlZml4OmFcXFxcXFxcXDogJywgJ3Rlc3QnLCBcImFcXFxcdGVzdFwiXSxcbiAgICAgICAgICAgIFsncHJlZml4OmFcXFxcICcsICd0ZXN0JywgXCJhIHRlc3RcIl0sXG4gICAgICAgICAgICBbJ3N0YXRpYzphYmM6YTpiOngnLCBcInRlc3RcIiwgXCJhYmM6YTpiOnhcIl0sXG4gICAgICAgICAgICBbJ3RvbG93ZXJjYXNlJywgXCJBOmI6Q3NlNFwiLCBcImE6Yjpjc2U0XCJdLFxuICAgICAgICAgICAgWyd0b3VwcGVyJywgXCJBOmI6Q3NlNFwiLCBcIkE6QjpDU0U0XCJdLFxuICAgICAgICAgICAgWyd0b3N0cmluZycsIDUsIFwiNVwiXSxcbiAgICAgICAgICAgIFsndG9zdHJpbmcnLCBbMSwgMiwgMywge31dLCBcIjEsMiwzLFtvYmplY3QgT2JqZWN0XVwiXSxcbiAgICAgICAgICAgIFsndG9pbnRlZ2VyJywgXCI1XCIsIDVdLFxuICAgICAgICAgICAgWyd0cmltJywgXCIgNSBcIiwgXCI1XCJdLFxuICAgICAgICAgICAgWyd0cmltJywgXCIgYVwiLCBcImFcIl0sXG4gICAgICAgICAgICBbJ3RyaW0nLCBcIiBcIiwgXCJcIl0sXG4gICAgICAgICAgICBbJ3Jhd3VybGVuY29kZScsIFwiXHUwMEZDXHUwMEY2XHUwMEU0XCIsIFwiJUMzJUJDJUMzJUI2JUMzJUE0XCJdLFxuICAgICAgICAgICAgWydjYWxsOnRlc3RjYWxsYmFjazo0OjU6NicsIFwidGVzdFwiLCBcInRlc3Q0NTZcIl0sXG4gICAgICAgICAgICBbJ3BsYWluJywgJ3Q8YnI+ZXN0JywgXCJ0ZXN0XCJdLFxuICAgICAgICAgICAgWydpZjphOmInLCB0cnVlLCBcImFcIl0sXG4gICAgICAgICAgICBbJ2lmOmE6YicsICdvbicsIFwiYVwiXSxcbiAgICAgICAgICAgIFsnaWY6YTpiJywgJ3RydWUnLCBcImFcIl0sXG4gICAgICAgICAgICBbJ2lmOmE6YicsICdmYWxzZScsIFwiYlwiXSxcbiAgICAgICAgICAgIFsnaWY6YTpiJywgOSwgXCJhXCJdLFxuICAgICAgICAgICAgWydpZjphOmInLCAnJywgXCJiXCJdLFxuICAgICAgICAgICAgWydpZjphOmInLCB1bmRlZmluZWQsIFwiYlwiXSxcbiAgICAgICAgICAgIFsnaWY6YTpiJywgZmFsc2UsIFwiYlwiXSxcbiAgICAgICAgICAgIFsndWNmaXJzdCcsICdjYXInLCBcIkNhclwiXSxcbiAgICAgICAgICAgIFsndWNmaXJzdCcsICdjQXInLCBcIkNBclwiXSxcbiAgICAgICAgICAgIFsnZGVmYXVsdDp0ZXN0JywgJ2EnLCBcImFcIl0sXG4gICAgICAgICAgICBbJ2RlZmF1bHQ6dGVzdCcsIHVuZGVmaW5lZCwgXCJ0ZXN0XCJdLFxuICAgICAgICAgICAgWydmcm9tanNvbicsICd7fScsIHt9XSxcbiAgICAgICAgICAgIFsnZnJvbWpzb24nLCAne1wiYVwiOjF9Jywge2E6IDF9XSxcbiAgICAgICAgICAgIFsndWN3b3JkcycsICdjQXIgcnVucycsIFwiQ0FyIFJ1bnNcIl0sXG4gICAgICAgICAgICBbJ3RvaW50ZWdlcicsICc2JywgNl0sXG4gICAgICAgICAgICBbJ2xlbmd0aCcsICd0ZXN0JywgNF0sXG4gICAgICAgICAgICBbJ3RvLWJhc2U2NCcsICdIZWxsbyBXb3JsZCEnLCBcIlNHVnNiRzhnVjI5eWJHUWhcIl0sXG4gICAgICAgICAgICBbJ2Zyb20tYmFzZTY0JywgJ1NHVnNiRzhnVjI5eWJHUWgnLCBcIkhlbGxvIFdvcmxkIVwiXSxcbiAgICAgICAgICAgIFsndG8tYmFzZTY0JywgJ3Rlc3QnLCBcImRHVnpkQT09XCJdLFxuICAgICAgICAgICAgWydmcm9tLWJhc2U2NCcsIFwiZEdWemRBPT1cIiwgJ3Rlc3QnXSxcbiAgICAgICAgICAgIFsncHJlZml4OmEnLCAndGVzdCcsIFwiYXRlc3RcIl0sXG4gICAgICAgICAgICBbJ3N1ZmZpeDphJywgJ3Rlc3QnLCBcInRlc3RhXCJdLFxuICAgICAgICAgICAgWydpbmRleDphJywge2E6IDR9LCA0XSxcbiAgICAgICAgICAgIFsnaW5kZXg6MicsIFsyLCA0LCA3XSwgN10sXG4gICAgICAgICAgICBbJ2luZGV4Ong6dGVzdCcsIFsyLCA0LCA3XSwgJ3Rlc3QnXSxcbiAgICAgICAgICAgIFsncGF0aDphLmIuYycsIHthOiB7Yjoge2M6IDR9fX0sIDRdLFxuICAgICAgICAgICAgWydwYXRoOmEuYi5kJywge2E6IHtiOiB7YzogNH19fSwgdW5kZWZpbmVkXSxcbiAgICAgICAgICAgIFsnaW5kZXg6YScsIG5ldyBNYXAoKS5zZXQoJ2EnLCA1KSwgNV0sXG4gICAgICAgICAgICBbJ3N1YnN0cmluZzoyOjQnLCAnYWJjZGVmZ2hpamtsbW5vcCcsICdjZGVmJ10sXG4gICAgICAgICAgICBbJ25vcCcsICdhYmNkZWZnaGlqa2xtbm9wJywgJ2FiY2RlZmdoaWprbG1ub3AnXSxcbiAgICAgICAgICAgIFsnc2V0LXRvZ2dsZTpjJywgJ2EgYiBjJywgJ2EgYiddLFxuICAgICAgICAgICAgWydzZXQtdG9nZ2xlOmMnLCAnYSBiJywgJ2EgYiBjJ10sXG4gICAgICAgICAgICBbJ3NldC1zZXQ6YycsICdhIGInLCAnYSBiIGMnXSxcbiAgICAgICAgICAgIFsnc2V0LXNldDpjJywgJ2EgYiBjJywgJ2EgYiBjJ10sXG4gICAgICAgICAgICBbJ3NldC1yZW1vdmU6YycsICdhIGIgYycsICdhIGInXSxcbiAgICAgICAgICAgIFsnc2V0LXRvZ2dsZTpjOiwnLCAnYSxiLGMnLCAnYSxiJ10sXG4gICAgICAgICAgICBbJ3NldC10b2dnbGU6YzosJywgJ2EsYicsICdhLGIsYyddLFxuICAgICAgICAgICAgWydzZXQtc2V0OmM6LCcsICdhLGInLCAnYSxiLGMnXSxcbiAgICAgICAgICAgIFsnc2V0LXNldDpjOiwnLCAnYSxiLGMnLCAnYSxiLGMnXSxcbiAgICAgICAgICAgIFsnc2V0LXJlbW92ZTpjOiwnLCAnYSxiLGMnLCAnYSxiJ10sXG4gICAgICAgICAgICBbJ3NldC10b2dnbGU6YyxkOiwnLCAnYSxiLGMnLCAnYSxiLGQnXSxcbiAgICAgICAgICAgIFsnc2V0LXRvZ2dsZTpjLGQ6LCcsICdhLGIsYyxkJywgJ2EsYiddLFxuICAgICAgICAgICAgWydzZXQtdG9nZ2xlOmMsZDosJywgJ2EsYicsICdhLGIsYyxkJ10sXG4gICAgICAgICAgICBbJ3NldC1zZXQ6YyxkOiwnLCAnYSxiJywgJ2EsYixjLGQnXSxcbiAgICAgICAgICAgIFsnc2V0LXNldDpjLGQ6LCcsICdhLGIsYycsICdhLGIsYyxkJ10sXG4gICAgICAgICAgICBbJ3NldC1yZW1vdmU6YzosJywgJ2EsYixjJywgJ2EsYiddLFxuXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ1RyYW5zZm9ybWVyLnJ1bignICsgSlNPTi5zdHJpbmdpZnkoYSkgKyAnKS5ydW4oJyArIEpTT04uc3RyaW5naWZ5KGIpICsgJykgc2hvdWxkIHJldHVybiAnICsgSlNPTi5zdHJpbmdpZnkoYyksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgdCA9IG5ldyBUcmFuc2Zvcm1lcihhKTtcblxuICAgICAgICAgICAgICAgIHQuc2V0Q2FsbGJhY2soJ3Rlc3RjYWxsYmFjaycsIGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhICsgYiArIGMgKyBkO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgciA9IHQucnVuKGIpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChjKS50by5iZS5lcWwociwgXCJUcmFuc2Zvcm1lci5ydW4oXCIgKyBKU09OLnN0cmluZ2lmeShhKSArIFwiKS5ydW4oXCIgKyBKU09OLnN0cmluZ2lmeShiKSArIFwiKSBzaG91bGQgcmV0dXJuIFwiICsgSlNPTi5zdHJpbmdpZnkoYykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnVHJhbnNmb3JtZXIucnVuKCkgdGhyb3dzIEVycm9yJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndG9sb3dlcmNhc2UnLCBbXV0sXG4gICAgICAgICAgICBbJ3RvbG93ZXJjYXNlJywge31dLFxuICAgICAgICAgICAgWyd0b2xvd2VyY2FzZScsIDQuNV0sXG4gICAgICAgICAgICBbJ3RvdXBwZXInLCB0cnVlXSxcbiAgICAgICAgICAgIFsndG91cHBlcicsIDVdLFxuICAgICAgICAgICAgWyd0b2ludGVnZXInLCBcImFcIl0sXG4gICAgICAgICAgICBbJ3RyaW0nLCA1XSxcbiAgICAgICAgICAgIFsndHJpbScsIHRydWVdLFxuICAgICAgICAgICAgWyd0cmltJywge31dLFxuICAgICAgICAgICAgWyd0cmltJywgW11dLFxuICAgICAgICAgICAgWydyYXd1cmxlbmNvZGUnLCBbXV0sXG4gICAgICAgICAgICBbJ2lmOmE6YicsIHt9XSxcbiAgICAgICAgICAgIFsndWN3b3JkcycsIHt9XSxcbiAgICAgICAgICAgIFsndWN3b3JkcycsIGZhbHNlXSxcbiAgICAgICAgICAgIFsndWN3b3JkcycsIDRdLFxuICAgICAgICAgICAgWydwYXRoOmEuYi5jJywgXCJcIiwgNF0sXG4gICAgICAgICAgICBbJ3RvaW50ZWdlcicsIHt9XSxcbiAgICAgICAgICAgIFsnYmFzZTY0Jywge31dLFxuICAgICAgICAgICAgWydmcm9tanNvbicsICcnXSxcbiAgICAgICAgICAgIFsncHJlZml4Jywge31dLFxuICAgICAgICAgICAgWydzdWZmaXgnLCB7fV0sXG4gICAgICAgICAgICBbJ2luZGV4JywgXCJ0ZXN0XCJdLFxuICAgICAgICAgICAgWyd4eHh4eHgnLCBcInRlc3RcIl0sIC8vIHVuc3VwcG9ydGVkIGNvbW1hbmRcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnVHJhbnNmb3JtZXIucnVuKCcgKyBKU09OLnN0cmluZ2lmeShhKSArICcpLnJ1bignICsgSlNPTi5zdHJpbmdpZnkoYikgKyAnKSBzaG91bGQgdGhyb3cgRXJyb3IgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCB0ID0gbmV3IFRyYW5zZm9ybWVyKGEpO1xuICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiB0LnJ1bihiKSkudG8udGhyb3coRXJyb3IpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCduZXcgVHJhbnNmb3JtZXIoKS5ydW4oXCJ1bmlxaWRcIiknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIFN0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCB0ID0gbmV3IFRyYW5zZm9ybWVyKCd1bmlxaWQnKTtcbiAgICAgICAgICAgIGV4cGVjdCh0LnJ1bihcIlwiKSkudG8uYmUuYSgnc3RyaW5nJyk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnbmV3IFRyYW5zZm9ybWVyKCkucnVuKFwiZGVmYXVsdDpleUppSWpveGZRPT06b2JqZWN0XCIpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBPYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgdCA9IG5ldyBUcmFuc2Zvcm1lcignZGVmYXVsdDpleUppSWpveGZRPT06b2JqZWN0Jyk7XG4gICAgICAgICAgICBleHBlY3QodC5ydW4odW5kZWZpbmVkKSkudG8uZXFsKHtiOiAxfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxuICAgIGRlc2NyaWJlKCduZXcgVHJhbnNmb3JtZXIoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBUcmFuc2Zvcm1lcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgVHJhbnNmb3JtZXIoXCJcIikpLnRvLmluc3RhbmNlT2YoVHJhbnNmb3JtZXIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIFRyYW5zZm9ybWVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBUcmFuc2Zvcm1lcihcInN1ZmZpeDphYmNcIikpLnRvLmluc3RhbmNlT2YoVHJhbnNmb3JtZXIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnZmFsc2UgYXMgYXJndW1lbnQgc2hvdWxkIHRocm93IFR5cGVFcnJvcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbmV3IFRyYW5zZm9ybWVyKGZhbHNlKVxuICAgICAgICAgICAgfSkudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ29iamVjdCBhcyBhcmd1bWVudCBzaG91bGQgdGhyb3cgVHlwZUVycm9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBuZXcgVHJhbnNmb3JtZXIoe30pXG4gICAgICAgICAgICB9KS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJ2kxOG4nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IGh0bWwxID0gYFxuPGRpdiBpZD1cIm1vY2stdHJhbnNsYXRpb25zXCI+PC9kaXY+XG48c2NyaXB0IHR5cGU9XCJhcHBsaWNhdGlvbi9qc29uXCIgZGF0YS1tb25zdGVyLXJvbGU9XCJ0cmFuc2xhdGlvbnNcIj5cbiAgICB7XG4gICAgICAgIFwidGVzdDFcIjogXCJ4eXpcIixcbiAgICAgICAgXCJ0ZXN0M1wiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwieHl6XCJcbiAgICAgICAgfVxuICAgIH1cbjwvc2NyaXB0PiAgXG5gO1xuXG4gICAgICAgIGJlZm9yZUVhY2goKGRvbmUpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG4gICAgICAgICAgICBsZXQgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrLXRyYW5zbGF0aW9ucycpO1xuICAgICAgICAgICAgRW1iZWQuYXNzaWduVHJhbnNsYXRpb25zVG9FbGVtZW50KGVsZW0pLnRoZW4oKG8pID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pXG5cblxuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ2kxOG46dGVzdDEnLCBcIlwiLCBcInh5elwiXSxcbiAgICAgICAgICAgIFsnaTE4bjonLCBcInRlc3QxXCIsIFwieHl6XCJdLCAvLyBrZXkgYnkgdmFsdWVcbiAgICAgICAgICAgIFsnaTE4bjo6JywgXCJ0ZXN0MVwiLCBcInh5elwiXSwgLy8ga2V5IGJ5IHZhbHVlIG5vIGRlZmF1bHRcbiAgICAgICAgICAgIFsnaTE4bjo6ZWVlJywgXCJ0ZXN0MlwiLCBcImVlZVwiXSwgLy8ga2V5IGJ5IHZhbHVlIHdpdGggZGVmYXVsdFxuICAgICAgICAgICAgWydpMThuOjpkZGQnLCBcInRlc3QyXCIsIFwiZGRkXCJdLCAvLyBrZXkgYnkgdmFsdWUgYW5kIGRlZmF1bHRcblxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIHRyYW5zZm9ybSgnICsgYSArICcpLnJ1bignICsgYiArICcpIHJldHVybiAnICsgSlNPTi5zdHJpbmdpZnkoYyksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0ID0gbmV3IFRyYW5zZm9ybWVyKGEpO1xuICAgICAgICAgICAgICAgIGV4cGVjdCh0LnJ1bihiKSkudG8uYmUuZXFsKGMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG4gICAgfSlcblxuXG59KTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7ZGlmZn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kYXRhL2RpZmYubWpzXCI7XG5pbXBvcnQge1F1ZXVlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL3F1ZXVlLm1qc1wiO1xuXG5kZXNjcmliZSgnRGlmZicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCd0ZXN0IHRvIGRhdGFzZXRzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIHZhciBvYmoxLCBvYmoyO1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgb2JqMSA9IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMSxcbiAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwidGVzdFwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMixcbiAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwidGVzdDJcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cblxuICAgICAgICAgICAgb2JqMiA9IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMSxcbiAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwidGVzdFwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiaWRcIjogXCIzXCIsXG4gICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcInRlc3QyXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gZGF0YXNldHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgZCA9IGRpZmYob2JqMSwgb2JqMik7XG4gICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkoZCkpLmlzLmVxdWFsKCdbe1wib3BlcmF0b3JcIjpcInVwZGF0ZVwiLFwicGF0aFwiOltcIjFcIixcImlkXCJdLFwiZmlyc3RcIjp7XCJ2YWx1ZVwiOjIsXCJ0eXBlXCI6XCJudW1iZXJcIn0sXCJzZWNvbmRcIjp7XCJ2YWx1ZVwiOlwiM1wiLFwidHlwZVwiOlwic3RyaW5nXCJ9fV0nKTtcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICBcbiAgICB9KVxuICAgIFxuICAgIGRlc2NyaWJlKCdEaWZmIHNwZWNpYWwgY2FzZXMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgdmFyIG9iajEsIG9iajI7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBvYmoxID0ge1xuICAgICAgICAgICAgICAgIFwiY291bnRcIjogMSxcbiAgICAgICAgICAgICAgICBcInJlYXNvblwiOiBudWxsLFxuICAgICAgICAgICAgICAgIFwiaW5mb1wiOiBcInRlc3RcIixcbiAgICAgICAgICAgICAgICBcImV4Y2hhbmdlXCI6IFtdXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgb2JqMiA9IHtcbiAgICAgICAgICAgICAgICBcImNvdW50XCI6IDIsXG4gICAgICAgICAgICAgICAgXCJyZWFzb25cIjogbnVsbCxcbiAgICAgICAgICAgICAgICBcImluZm9cIjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIFwiZXhjaGFuZ2VcIjogW11cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ0RpZmYgdmFsdWUgd2l0aCBudWxsICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBkID0gZGlmZihvYmoxLCBvYmoyKTtcbiAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShkKSkuaXMuZXF1YWwoJ1t7XCJvcGVyYXRvclwiOlwidXBkYXRlXCIsXCJwYXRoXCI6W1wiY291bnRcIl0sXCJmaXJzdFwiOntcInZhbHVlXCI6MSxcInR5cGVcIjpcIm51bWJlclwifSxcInNlY29uZFwiOntcInZhbHVlXCI6MixcInR5cGVcIjpcIm51bWJlclwifX0se1wib3BlcmF0b3JcIjpcImRlbGV0ZVwiLFwicGF0aFwiOltcImluZm9cIl0sXCJmaXJzdFwiOntcInZhbHVlXCI6XCJ0ZXN0XCIsXCJ0eXBlXCI6XCJzdHJpbmdcIn19XScpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnRGlmZiBpZGVudGljYWwgdmFsdWUgd2l0aCBudWxsICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBkID0gZGlmZihvYmoxLCBvYmoxKTtcbiAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShkKSkuaXMuZXF1YWwoJ1tdJyk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KVxuXG4gICAgY29uc3QgZGF0ZTEgPSBuZXcgRGF0ZTtcblxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RlL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0RhdGUvcGFyc2VcbiAgICBjb25zdCBkYXRlMiA9IERhdGUucGFyc2UoJzAxIEphbiAxOTcwIDAwOjAwOjAwIEdNVCcpO1xuICAgIGNvbnN0IGRhdGUzID0gRGF0ZS5wYXJzZSgnMDQgRGVjIDE5OTUgMDA6MTI6MDAgR01UJyk7IC8vIE51bWJlclxuICAgIGNvbnN0IGRhdGU0ID0gRGF0ZS5wYXJzZSgnMDQgRGVjIDE5OTUgMDA6MTI6MDEgR01UJyk7IC8vIE51bWJlclxuXG4gICAgY29uc3QgZGF0ZTUgPSBuZXcgRGF0ZShEYXRlLnBhcnNlKCcwNCBEZWMgMTk5NSAwMDoxMjowMSBHTVQnKSk7IC8vIERhdGVcbiAgICBjb25zdCBkYXRlNiA9IG5ldyBEYXRlKERhdGUucGFyc2UoJzA0IERlYyAxOTk1IDAwOjEyOjAyIEdNVCcpKTsgLy8gRGF0ZVxuXG4gICAgW1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IG5ldyBRdWV1ZSgpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ1t7XCJvcGVyYXRvclwiOlwiYWRkXCIsXCJwYXRoXCI6W1wiYVwiXSxcInNlY29uZFwiOntcInZhbHVlXCI6e1wiZGF0YVwiOltdfSxcInR5cGVcIjpcIm9iamVjdFwiLFwiaW5zdGFuY2VcIjpcIlF1ZXVlXCJ9fV0nXG4gICAgICAgIF0sXG5cbiAgICAgICAgW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgYjogMVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYzoge1xuICAgICAgICAgICAgICAgICAgICBkOiAyXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgIGU6IDNcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGY6IHtcbiAgICAgICAgICAgICAgICAgICAgZDogMlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnW3tcIm9wZXJhdG9yXCI6XCJkZWxldGVcIixcInBhdGhcIjpbXCJhXCIsXCJiXCJdLFwiZmlyc3RcIjp7XCJ2YWx1ZVwiOjEsXCJ0eXBlXCI6XCJudW1iZXJcIn19LHtcIm9wZXJhdG9yXCI6XCJhZGRcIixcInBhdGhcIjpbXCJhXCIsXCJlXCJdLFwic2Vjb25kXCI6e1widmFsdWVcIjozLFwidHlwZVwiOlwibnVtYmVyXCJ9fSx7XCJvcGVyYXRvclwiOlwiZGVsZXRlXCIsXCJwYXRoXCI6W1wiY1wiXSxcImZpcnN0XCI6e1widmFsdWVcIjp7XCJkXCI6Mn0sXCJ0eXBlXCI6XCJvYmplY3RcIixcImluc3RhbmNlXCI6XCJPYmplY3RcIn19LHtcIm9wZXJhdG9yXCI6XCJhZGRcIixcInBhdGhcIjpbXCJmXCJdLFwic2Vjb25kXCI6e1widmFsdWVcIjp7XCJkXCI6Mn0sXCJ0eXBlXCI6XCJvYmplY3RcIixcImluc3RhbmNlXCI6XCJPYmplY3RcIn19XSdcbiAgICAgICAgXSxcblxuICAgICAgICBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYTogZGF0ZTEsXG4gICAgICAgICAgICAgICAgYzogZGF0ZTRcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYTogZGF0ZTIsXG4gICAgICAgICAgICAgICAgYjogZGF0ZTNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnW3tcIm9wZXJhdG9yXCI6XCJ1cGRhdGVcIixcInBhdGhcIjpbXCJhXCJdLFwiZmlyc3RcIjp7XCJ2YWx1ZVwiOlwiJyArIGRhdGUxLnRvSVNPU3RyaW5nKCkgKyAnXCIsXCJ0eXBlXCI6XCJvYmplY3RcIixcImluc3RhbmNlXCI6XCJEYXRlXCJ9LFwic2Vjb25kXCI6e1widmFsdWVcIjowLFwidHlwZVwiOlwibnVtYmVyXCJ9fSx7XCJvcGVyYXRvclwiOlwiZGVsZXRlXCIsXCJwYXRoXCI6W1wiY1wiXSxcImZpcnN0XCI6e1widmFsdWVcIjo4MTgwMzU5MjEwMDAsXCJ0eXBlXCI6XCJudW1iZXJcIn19LHtcIm9wZXJhdG9yXCI6XCJhZGRcIixcInBhdGhcIjpbXCJiXCJdLFwic2Vjb25kXCI6e1widmFsdWVcIjo4MTgwMzU5MjAwMDAsXCJ0eXBlXCI6XCJudW1iZXJcIn19XSdcbiAgICAgICAgXSxcblxuICAgICAgICBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYTogZGF0ZTVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYjogZGF0ZTZcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnW3tcIm9wZXJhdG9yXCI6XCJkZWxldGVcIixcInBhdGhcIjpbXCJhXCJdLFwiZmlyc3RcIjp7XCJ2YWx1ZVwiOlwiMTk5NS0xMi0wNFQwMDoxMjowMS4wMDBaXCIsXCJ0eXBlXCI6XCJvYmplY3RcIixcImluc3RhbmNlXCI6XCJEYXRlXCJ9fSx7XCJvcGVyYXRvclwiOlwiYWRkXCIsXCJwYXRoXCI6W1wiYlwiXSxcInNlY29uZFwiOntcInZhbHVlXCI6XCIxOTk1LTEyLTA0VDAwOjEyOjAyLjAwMFpcIixcInR5cGVcIjpcIm9iamVjdFwiLFwiaW5zdGFuY2VcIjpcIkRhdGVcIn19XSdcbiAgICAgICAgXSxcbiAgICAgICAgW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IGRhdGUxXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IGRhdGUxXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ1tdJ1xuICAgICAgICBdLFxuICAgICAgICBbXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiBkYXRlM1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdbe1wib3BlcmF0b3JcIjpcImFkZFwiLFwicGF0aFwiOltcImFcIl0sXCJzZWNvbmRcIjp7XCJ2YWx1ZVwiOjgxODAzNTkyMDAwMCxcInR5cGVcIjpcIm51bWJlclwifX1dJ1xuICAgICAgICBdLFxuXG4gICAgICAgIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiBkYXRlMlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiBkYXRlM1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdbe1wib3BlcmF0b3JcIjpcInVwZGF0ZVwiLFwicGF0aFwiOltcImFcIl0sXCJmaXJzdFwiOntcInZhbHVlXCI6MCxcInR5cGVcIjpcIm51bWJlclwifSxcInNlY29uZFwiOntcInZhbHVlXCI6ODE4MDM1OTIwMDAwLFwidHlwZVwiOlwibnVtYmVyXCJ9fV0nXG4gICAgICAgIF0sXG5cbiAgICAgICAgW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IDFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYTogMlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdbe1wib3BlcmF0b3JcIjpcInVwZGF0ZVwiLFwicGF0aFwiOltcImFcIl0sXCJmaXJzdFwiOntcInZhbHVlXCI6MSxcInR5cGVcIjpcIm51bWJlclwifSxcInNlY29uZFwiOntcInZhbHVlXCI6MixcInR5cGVcIjpcIm51bWJlclwifX1dJ1xuICAgICAgICBdLFxuXG4gICAgICAgIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiAxXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHg6IDFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnW3tcIm9wZXJhdG9yXCI6XCJkZWxldGVcIixcInBhdGhcIjpbXCJhXCJdLFwiZmlyc3RcIjp7XCJ2YWx1ZVwiOjEsXCJ0eXBlXCI6XCJudW1iZXJcIn19LHtcIm9wZXJhdG9yXCI6XCJhZGRcIixcInBhdGhcIjpbXCJ4XCJdLFwic2Vjb25kXCI6e1widmFsdWVcIjoxLFwidHlwZVwiOlwibnVtYmVyXCJ9fV0nXG4gICAgICAgIF0sXG5cbiAgICAgICAgW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IDFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYTogMixcbiAgICAgICAgICAgICAgICB4OiAxXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ1t7XCJvcGVyYXRvclwiOlwidXBkYXRlXCIsXCJwYXRoXCI6W1wiYVwiXSxcImZpcnN0XCI6e1widmFsdWVcIjoxLFwidHlwZVwiOlwibnVtYmVyXCJ9LFwic2Vjb25kXCI6e1widmFsdWVcIjoyLFwidHlwZVwiOlwibnVtYmVyXCJ9fSx7XCJvcGVyYXRvclwiOlwiYWRkXCIsXCJwYXRoXCI6W1wieFwiXSxcInNlY29uZFwiOntcInZhbHVlXCI6MSxcInR5cGVcIjpcIm51bWJlclwifX1dJ1xuICAgICAgICBdLFxuICAgICAgICBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYTogbnVsbFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgJ1t7XCJvcGVyYXRvclwiOlwiZGVsZXRlXCIsXCJwYXRoXCI6W1wiYVwiXSxcImZpcnN0XCI6e1widmFsdWVcIjpudWxsLFwidHlwZVwiOlwib2JqZWN0XCJ9fV0nXG4gICAgICAgIF0sXG4gICAgICAgIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiBudWxsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IG51bGxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnW10nXG4gICAgICAgIF0sXG4gICAgICAgIFtcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IG51bGxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnW3tcIm9wZXJhdG9yXCI6XCJhZGRcIixcInBhdGhcIjpbXCJhXCJdLFwic2Vjb25kXCI6e1widmFsdWVcIjpudWxsLFwidHlwZVwiOlwib2JqZWN0XCJ9fV0nXG4gICAgICAgIF0sIFtcbiAgICAgICAge30sXG4gICAgICAgIHthOiB1bmRlZmluZWR9LFxuICAgICAgICAnW3tcIm9wZXJhdG9yXCI6XCJhZGRcIixcInBhdGhcIjpbXCJhXCJdLFwic2Vjb25kXCI6e1widHlwZVwiOlwidW5kZWZpbmVkXCJ9fV0nXG4gICAgXVxuXG5cbiAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG5cbiAgICAgICAgaXQoJ0RpZmYgc2hvdWxkIHJlc3VsdCAnICsgYywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGQgPSBkaWZmKGEsIGIpO1xuICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KGQpKS5pcy5lcXVhbChjKTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG59KSIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7YnVpbGRUcmVlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RhdGEvYnVpbGR0cmVlLm1qc1wiO1xuaW1wb3J0IHtOb2RlTGlzdH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9ub2RlbGlzdC5tanNcIjtcblxuXG5kZXNjcmliZSgnYnVpbGRUcmVlJywgZnVuY3Rpb24gKCkge1xuXG5cbiAgICBkZXNjcmliZSgnbGVnYWN5IG5hdmlnYXRpb24gZXhhbXBsZSAoaXNzdWUgIzIzMCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBydW4gZXhhbXBsZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgY29uc3Qgb2JqZWN0cyA9IEpTT04ucGFyc2UoYHtcbiAgICBcImRhdGFzZXRcIjogW1xuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDEwMDAwMSxcbiAgICAgICAgICAgIFwicGFyZW50X2lkXCI6IDIwMDAwMSxcbiAgICAgICAgICAgIFwidGl0bGVcIjogXCJlQmF5XCIsXG4gICAgICAgICAgICBcInVybFwiOiBcIi9cIixcbiAgICAgICAgICAgIFwid2VpZ2h0XCI6IDEsXG4gICAgICAgICAgICBcImNzc19zdHlsZXNcIjogXCJcIixcbiAgICAgICAgICAgIFwiY3NzX2NsYXNzZXNcIjogXCJcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBcImlkXCI6IDIwMDAwMSxcbiAgICAgICAgICAgIFwicGFyZW50X2lkXCI6IDIwMDAwMSxcbiAgICAgICAgICAgIFwidGl0bGVcIjogXCJhbHZpbmVjb25zb2xlXCIsXG4gICAgICAgICAgICBcInVybFwiOiBcIlwiLFxuICAgICAgICAgICAgXCJ3ZWlnaHRcIjogMSxcbiAgICAgICAgICAgIFwiY3NzX3N0eWxlc1wiOiBcIlwiLFxuICAgICAgICAgICAgXCJjc3NfY2xhc3Nlc1wiOiBcIlwiXG4gICAgICAgIH1cbiAgICBdLFxuICAgIFwic3lzXCI6IHtcbiAgICAgICAgXCJjb2RlXCI6IDIwMCxcbiAgICAgICAgXCJyZXN1bHRcIjoge30sXG4gICAgICAgIFwiYXBpX3ZlcnNpb25cIjogXCIxXCJcbiAgICB9XG59YCk7XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYnVpbGRUcmVlKG9iamVjdHMsICdkYXRhc2V0LionLCAnaWQnLCAncGFyZW50X2lkJyk7ICAgIFxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoZXJyb3IpLnRvLmJlLmluc3RhbmNlT2YoRXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG5cbiAgICAgICAgICAgIFxuXG4gICAgICAgIH0pXG4gICAgfSkgICAgXG4gICAgXG5cbiAgICBkZXNjcmliZSgnZXhhbXBsZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIHJ1biBleGFtcGxlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBjb25zdCBvYmplY3RzID0ge1xuICAgICAgICAgICAgICAgIGRhdGFzZXQ6IHtcbiAgICAgICAgICAgICAgICAgICAgXCIxXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcIjFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwidmVoaWNsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBudWxsXG5cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgXCIyXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcIjJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiY2FyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IFwiMVwiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFwiM1wiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXCIzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInRydWNrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IFwiMVwiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFwiNFwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXCI0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIm1vdG9yY3ljbGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudDogXCIxXCJcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgXCI1XCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcIjVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU1VWXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IFwiMlwiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFwiNlwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXCI2XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInNwb3J0cyBjYXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudDogXCIyXCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgbm9kZXMgPSBidWlsZFRyZWUob2JqZWN0cywgJ2RhdGFzZXQuKicsICdpZCcsICdwYXJlbnQnKTtcblxuICAgICAgICAgICAgZXhwZWN0KG5vZGVzKS50by5iZS5pbnN0YW5jZU9mKE5vZGVMaXN0KTtcbiAgICAgICAgICAgIGV4cGVjdChub2Rlcy5sZW5ndGgpLnRvLmVxdWFsKDEpO1xuICAgICAgICAgICAgZXhwZWN0KG5vZGVzLnRvU3RyaW5nKCkpLnRvLmJlLmVxdWFsKCd7XCJpZFwiOlwiMVwiLFwibmFtZVwiOlwidmVoaWNsZVwiLFwicGFyZW50XCI6bnVsbH1cXG4gXHUyNTFDe1wiaWRcIjpcIjJcIixcIm5hbWVcIjpcImNhclwiLFwicGFyZW50XCI6XCIxXCJ9XFxuIHwgXHUyNTFDe1wiaWRcIjpcIjVcIixcIm5hbWVcIjpcIlNVVlwiLFwicGFyZW50XCI6XCIyXCJ9XFxuIHwgXHUyNTE0e1wiaWRcIjpcIjZcIixcIm5hbWVcIjpcInNwb3J0cyBjYXJcIixcInBhcmVudFwiOlwiMlwifVxcbiBcdTI1MUN7XCJpZFwiOlwiM1wiLFwibmFtZVwiOlwidHJ1Y2tcIixcInBhcmVudFwiOlwiMVwifVxcbiBcdTI1MTR7XCJpZFwiOlwiNFwiLFwibmFtZVwiOlwibW90b3JjeWNsZVwiLFwicGFyZW50XCI6XCIxXCJ9JyApO1xuXG5cbiAgICAgICAgfSlcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2J1aWxkVHJlZSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBvYmoxID0ge1xuICAgICAgICAgICAgZGF0YXNldDoge1xuICAgICAgICAgICAgICAgIFwiMVwiOiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBcIjFcIixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJUZXN0IDFcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkcmVzczogXCJIZXJlIDFcIixcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBudWxsXG5cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiMlwiOiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBcIjJcIixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJUZXN0IDJcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkcmVzczogXCJIZXJlIDJcIixcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBcIjFcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCIzXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IFwiM1wiLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlRlc3QgM1wiLFxuICAgICAgICAgICAgICAgICAgICBhZGRyZXNzOiBcIkhlcmUgM1wiLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IFwiMlwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcIjRcIjoge1xuICAgICAgICAgICAgICAgICAgICBpZDogXCI0XCIsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVGVzdCA0XCIsXG4gICAgICAgICAgICAgICAgICAgIGFkZHJlc3M6IFwiSGVyZSA0XCIsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogXCIyXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiNVwiOiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBcIjVcIixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJUZXN0IDVcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkcmVzczogXCJIZXJlIDVcIixcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBcIjFcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCI2XCI6IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IFwiNlwiLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlRlc3QgNlwiLFxuICAgICAgICAgICAgICAgICAgICBhZGRyZXNzOiBcIkhlcmUgNlwiLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IFwiNFwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIE5vZGUgSW5zdGFuY2UuJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KGJ1aWxkVHJlZSh7fSwgJycpKS50by5iZS5pbnN0YW5jZU9mKE5vZGVMaXN0KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgW29iajEsICdkYXRhc2V0LionLCAne1wiaWRcIjpcIjFcIixcIm5hbWVcIjpcIlRlc3QgMVwiLFwiYWRkcmVzc1wiOlwiSGVyZSAxXCIsXCJwYXJlbnRcIjpudWxsfVxcbiBcdTI1MUN7XCJpZFwiOlwiMlwiLFwibmFtZVwiOlwiVGVzdCAyXCIsXCJhZGRyZXNzXCI6XCJIZXJlIDJcIixcInBhcmVudFwiOlwiMVwifVxcbiB8IFx1MjUxQ3tcImlkXCI6XCIzXCIsXCJuYW1lXCI6XCJUZXN0IDNcIixcImFkZHJlc3NcIjpcIkhlcmUgM1wiLFwicGFyZW50XCI6XCIyXCJ9XFxuIHwgXHUyNTE0e1wiaWRcIjpcIjRcIixcIm5hbWVcIjpcIlRlc3QgNFwiLFwiYWRkcmVzc1wiOlwiSGVyZSA0XCIsXCJwYXJlbnRcIjpcIjJcIn1cXG4gfCB8IFx1MjUxNHtcImlkXCI6XCI2XCIsXCJuYW1lXCI6XCJUZXN0IDZcIixcImFkZHJlc3NcIjpcIkhlcmUgNlwiLFwicGFyZW50XCI6XCI0XCJ9XFxuIFx1MjUxNHtcImlkXCI6XCI1XCIsXCJuYW1lXCI6XCJUZXN0IDVcIixcImFkZHJlc3NcIjpcIkhlcmUgNVwiLFwicGFyZW50XCI6XCIxXCJ9J10sXG4gICAgICAgICAgICBbb2JqMSwgJ3gnLCAnJ10sXG4gICAgICAgICAgICBbb2JqMSwgJ2RhdGFzZXQuKicsICd7XCJpZFwiOlwiMVwiLFwibmFtZVwiOlwiVGVzdCAxXCIsXCJhZGRyZXNzXCI6XCJIZXJlIDFcIixcInBhcmVudFwiOm51bGx9XFxuIFx1MjUxQ3tcImlkXCI6XCIyXCIsXCJuYW1lXCI6XCJUZXN0IDJcIixcImFkZHJlc3NcIjpcIkhlcmUgMlwiLFwicGFyZW50XCI6XCIxXCJ9XFxuIHwgXHUyNTFDe1wiaWRcIjpcIjNcIixcIm5hbWVcIjpcIlRlc3QgM1wiLFwiYWRkcmVzc1wiOlwiSGVyZSAzXCIsXCJwYXJlbnRcIjpcIjJcIn1cXG4gfCBcdTI1MTR7XCJpZFwiOlwiNFwiLFwibmFtZVwiOlwiVGVzdCA0XCIsXCJhZGRyZXNzXCI6XCJIZXJlIDRcIixcInBhcmVudFwiOlwiMlwifVxcbiB8IHwgXHUyNTE0e1wiaWRcIjpcIjZcIixcIm5hbWVcIjpcIlRlc3QgNlwiLFwiYWRkcmVzc1wiOlwiSGVyZSA2XCIsXCJwYXJlbnRcIjpcIjRcIn1cXG4gXHUyNTE0e1wiaWRcIjpcIjVcIixcIm5hbWVcIjpcIlRlc3QgNVwiLFwiYWRkcmVzc1wiOlwiSGVyZSA1XCIsXCJwYXJlbnRcIjpcIjFcIn0nXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ2J1aWxkVHJlZSgnICsgSlNPTi5zdHJpbmdpZnkoYSkgKyAnLCcgKyBKU09OLnN0cmluZ2lmeShiKSArICcpIHNob3VsZCByZXR1cm4gJyArIEpTT04uc3RyaW5naWZ5KGMpICsgJyAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IG5vZGVsaXN0ID0gYnVpbGRUcmVlKGEsIGIsICdpZCcsICdwYXJlbnQnKTtcbiAgICAgICAgICAgICAgICBleHBlY3Qobm9kZWxpc3QudG9TdHJpbmcoKSkudG8uYmUuZXFsKGMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdidWlsZFRyZWUoKSB0ZXN0IDInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIDJcbiAgICAgICAgICogICAgMVxuICAgICAgICAgKiAgICAzXG4gICAgICAgICAqIDRcbiAgICAgICAgICogICAgNlxuICAgICAgICAgKiA1XG4gICAgICAgICAqXG4gICAgICAgICAqL1xuICAgICAgICBsZXQgb2JqMSA9IHtcbiAgICAgICAgICAgIGRhdGFzZXQ6IHtcbiAgICAgICAgICAgICAgICBcIjFcIjoge1xuICAgICAgICAgICAgICAgICAgICBpZDogXCIxXCIsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVGVzdCAxXCIsXG4gICAgICAgICAgICAgICAgICAgIGFkZHJlc3M6IFwiSGVyZSAxXCIsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogXCIyXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiMlwiOiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBcIjJcIixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJUZXN0IDJcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkcmVzczogXCJIZXJlIDJcIixcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBcIjBcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCIzXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IFwiM1wiLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlRlc3QgM1wiLFxuICAgICAgICAgICAgICAgICAgICBhZGRyZXNzOiBcIkhlcmUgM1wiLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IFwiMlwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcIjRcIjoge1xuICAgICAgICAgICAgICAgICAgICBpZDogXCI0XCIsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVGVzdCA0XCIsXG4gICAgICAgICAgICAgICAgICAgIGFkZHJlc3M6IFwiSGVyZSA0XCIsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogXCIwXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiNVwiOiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBcIjVcIixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJUZXN0IDVcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkcmVzczogXCJIZXJlIDVcIixcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBcIjBcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCI2XCI6IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IFwiNlwiLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlRlc3QgNlwiLFxuICAgICAgICAgICAgICAgICAgICBhZGRyZXNzOiBcIkhlcmUgNlwiLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IFwiNFwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcIjdcIjoge1xuICAgICAgICAgICAgICAgICAgICBpZDogXCI3XCIsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVGVzdCA3XCIsXG4gICAgICAgICAgICAgICAgICAgIGFkZHJlc3M6IFwiSGVyZSA3XCIsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogXCIxXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gTm9kZSBJbnN0YW5jZS4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoYnVpbGRUcmVlKHt9LCAnJykpLnRvLmJlLmluc3RhbmNlT2YoTm9kZUxpc3QpO1xuICAgICAgICB9KTtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbb2JqMSwgJ2RhdGFzZXQuKicsICd7XCJpZFwiOlwiMlwiLFwibmFtZVwiOlwiVGVzdCAyXCIsXCJhZGRyZXNzXCI6XCJIZXJlIDJcIixcInBhcmVudFwiOlwiMFwifVxcbiBcdTI1MUN7XCJpZFwiOlwiMVwiLFwibmFtZVwiOlwiVGVzdCAxXCIsXCJhZGRyZXNzXCI6XCJIZXJlIDFcIixcInBhcmVudFwiOlwiMlwifVxcbiB8IFx1MjUxNHtcImlkXCI6XCI3XCIsXCJuYW1lXCI6XCJUZXN0IDdcIixcImFkZHJlc3NcIjpcIkhlcmUgN1wiLFwicGFyZW50XCI6XCIxXCJ9XFxuIFx1MjUxNHtcImlkXCI6XCIzXCIsXCJuYW1lXCI6XCJUZXN0IDNcIixcImFkZHJlc3NcIjpcIkhlcmUgM1wiLFwicGFyZW50XCI6XCIyXCJ9XFxue1wiaWRcIjpcIjRcIixcIm5hbWVcIjpcIlRlc3QgNFwiLFwiYWRkcmVzc1wiOlwiSGVyZSA0XCIsXCJwYXJlbnRcIjpcIjBcIn1cXG4gXHUyNTE0e1wiaWRcIjpcIjZcIixcIm5hbWVcIjpcIlRlc3QgNlwiLFwiYWRkcmVzc1wiOlwiSGVyZSA2XCIsXCJwYXJlbnRcIjpcIjRcIn1cXG57XCJpZFwiOlwiNVwiLFwibmFtZVwiOlwiVGVzdCA1XCIsXCJhZGRyZXNzXCI6XCJIZXJlIDVcIixcInBhcmVudFwiOlwiMFwifSddLFxuICAgICAgICAgICAgW29iajEsICd4JywgJyddLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnYnVpbGRUcmVlKCcgKyBKU09OLnN0cmluZ2lmeShhKSArICcsJyArIEpTT04uc3RyaW5naWZ5KGIpICsgJykgc2hvdWxkIHJldHVybiAnICsgSlNPTi5zdHJpbmdpZnkoYykgKyAnICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgbm9kZWxpc3QgPSBidWlsZFRyZWUoYSwgYiwgJ2lkJywgJ3BhcmVudCcsIHtcbiAgICAgICAgICAgICAgICAgICAgcm9vdFJlZmVyZW5jZXM6IFsnMCddXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBleHBlY3Qobm9kZWxpc3QudG9TdHJpbmcoKSkudG8uYmUuZXF1YWwoYyk7XG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG4gICAgXG4gICAgXG4gICAgXG5cblxufSk7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge1BhdGhmaW5kZXJ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZGF0YS9wYXRoZmluZGVyLm1qc1wiO1xuXG5kZXNjcmliZSgnUGF0aGZpbmRlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGxldCBjb252ZXJ0TWFwUmVzdWx0ID0gZnVuY3Rpb24gKHIpIHtcbiAgICAgICAgaWYgKHIgaW5zdGFuY2VvZiBNYXApIHtcbiAgICAgICAgICAgIHIgPSBPYmplY3QuZnJvbUVudHJpZXMocik7XG4gICAgICAgICAgICBpZiAociBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgICAgICAgICAgciA9IHIubWFwKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0TWFwUmVzdWx0KGUpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiByID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBbaywgb10gb2YgT2JqZWN0LmVudHJpZXMocikpIHtcbiAgICAgICAgICAgICAgICAgICAgcltrXSA9IGNvbnZlcnRNYXBSZXN1bHQobyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHI7XG4gICAgfVxuXG5cbiAgICBkZXNjcmliZSgnd2l0aCBXaWxkY2FyZCBhbmQgSXRlcmF0aW9ucycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IHBmLCBvYmo7XG5cbiAgICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBvYmogPSB7XG4gICAgICAgICAgICAgICAgYTogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBiOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjOiBcIjEtMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM6IFwiMS0yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgZDogJyEnXG5cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgYjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzogXCIyLTFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjOiBcIjItMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ6ICc/J1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGYgPSBuZXcgUGF0aGZpbmRlcihvYmopO1xuICAgICAgICB9KTtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ2EuKi5iLionLCAne1wiMFwiOntcIjBcIjp7XCJjXCI6XCIxLTFcIn0sXCIxXCI6e1wiY1wiOlwiMS0yXCJ9fSxcIjFcIjp7XCIwXCI6e1wiY1wiOlwiMi0xXCJ9LFwiMVwiOntcImNcIjpcIjItMlwifX19J10sXG4gICAgICAgICAgICBbJ2EuKi5iJywgJ3tcIjBcIjpbe1wiY1wiOlwiMS0xXCJ9LHtcImNcIjpcIjEtMlwifV0sXCIxXCI6W3tcImNcIjpcIjItMVwifSx7XCJjXCI6XCIyLTJcIn1dfSddLFxuICAgICAgICAgICAgWydhLjEuYicsICdbe1wiY1wiOlwiMi0xXCJ9LHtcImNcIjpcIjItMlwifV0nXSxcbiAgICAgICAgICAgIFsnYS4wLmInLCAnW3tcImNcIjpcIjEtMVwifSx7XCJjXCI6XCIxLTJcIn1dJ10sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuXG4gICAgICAgICAgICBpdCgnLnNldFZpYSgnICsgYSArICcpIHNob3VsZCByZXN1bHQgaW4gJyArIGIsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCByID0gcGYuZ2V0VmlhKGEpO1xuICAgICAgICAgICAgICAgIGxldCBpID0gY29udmVydE1hcFJlc3VsdChyKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkoaSkpLmlzLmVxdWFsKGIpO1xuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cblxuICAgIGRlc2NyaWJlKCdhcGkgdGVzdHMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IHBhdGhmaW5kZXIsIG9iamVjdDtcblxuXG4gICAgICAgIGNsYXNzIEEge1xuICAgICAgICAgICAgZ2V0IGEoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuXG4gICAgICAgICAgICBvYmplY3QgPSB7XG4gICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICBiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNCwgXCJ0ZXN0MVwiLCBmYWxzZSwgdW5kZWZpbmVkLCBwYXJzZUludChcImFcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBkOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGY6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoOiAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpOiBbXCJ0ZXN0MlwiXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBqOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGs6IChuZXcgTWFwKS5zZXQoJ20nLCB7bjogM30pLFxuICAgICAgICAgICAgICAgICAgICAgICAgbDogKG5ldyBTZXQpLmFkZCh7bjogNH0pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGI6IG5ldyBBXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBwYXRoZmluZGVyID0gbmV3IFBhdGhmaW5kZXIob2JqZWN0KTtcblxuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgbmV3IG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFsxMl0sXG4gICAgICAgICAgICAgICAgW3VuZGVmaW5lZF0sXG4gICAgICAgICAgICAgICAgW251bGxdLFxuICAgICAgICAgICAgICAgIFtcInRlc3RcIl1cbiAgICAgICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICBsZXQgbGFiZWwgPSB0eXBlb2YgYTtcbiAgICAgICAgICAgICAgICBpZiAoYSA9PT0gbnVsbCkgbGFiZWwgPSAnbnVsbCc7XG5cblxuICAgICAgICAgICAgICAgIGl0KGxhYmVsICsgJyBzaG91bGQgdGhyb3cgZXJyb3InLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQYXRoZmluZGVyKGEpXG4gICAgICAgICAgICAgICAgICAgIH0pLnRvLnRocm93KEVycm9yKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJy5zZXRWaWEoeCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGxldCBwZiwgb2JqO1xuXG4gICAgICAgICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBvYmogPSB7fVxuICAgICAgICAgICAgICAgIHBmID0gbmV3IFBhdGhmaW5kZXIob2JqKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgWydhLmIuMC4wLmMnLCB0cnVlLCAne1wiYVwiOntcImJcIjpbW3tcImNcIjp0cnVlfV1dfX0nXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi4wLmMnLCB0cnVlLCAne1wiYVwiOntcImJcIjpbe1wiY1wiOnRydWV9XX19J10sXG4gICAgICAgICAgICAgICAgWydhLmIuMy5jJywgdHJ1ZSwgJ3tcImFcIjp7XCJiXCI6W251bGwsbnVsbCxudWxsLHtcImNcIjp0cnVlfV19fSddLFxuICAgICAgICAgICAgICAgIFsnYS5iLmMnLCB0cnVlLCAne1wiYVwiOntcImJcIjp7XCJjXCI6dHJ1ZX19fSddXG4gICAgICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG5cbiAgICAgICAgICAgICAgICBpdCgnLnNldFZpYSgnICsgYSArICcsICcgKyBiICsgJykgc2hvdWxkIHJlc3VsdCBpbiAnICsgYywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBwZi5zZXRWaWEoYSwgYilcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KG9iaikpLmlzLmVxdWFsKGMpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJy5zZXRWaWEoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0IGE7XG4gICAgICAgICAgICBsZXQgYjtcbiAgICAgICAgICAgIGxldCBjO1xuXG4gICAgICAgICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBhID0gXCJhLnhcIjtcbiAgICAgICAgICAgICAgICBiID0gXCJ0cnVlXCI7XG4gICAgICAgICAgICAgICAgYyA9IFwiYS55LmRcIjtcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGl0KCcuc2V0VmlhKCcgKyBhICsgJywgJyArIGIgKyAnKSBzaG91bGQgcmV0dXJuIFBhdGhmaW5kZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHBhdGhmaW5kZXIuc2V0VmlhKGEsIGIpKS5pcy5pbnN0YW5jZU9mKFBhdGhmaW5kZXIpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCcuc2V0VmlhKCcgKyBhICsgJywgJyArIGIgKyAnKSBzaG91bGQgY2hhbmdlIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBwYXRoZmluZGVyLnNldFZpYShhLCBiKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkob2JqZWN0KSkuaXMuZXF1YWwoJ3tcImFcIjp7XCJiXCI6e1wiY1wiOls0LFwidGVzdDFcIixmYWxzZSxudWxsLG51bGxdLFwiZVwiOmZhbHNlLFwiZlwiOlt7XCJnXCI6ZmFsc2UsXCJoXCI6MyxcImlcIjpbXCJ0ZXN0MlwiXX1dLFwialwiOnt9LFwia1wiOnt9LFwibFwiOnt9fSxcInhcIjpcInRydWVcIn0sXCJiXCI6e319Jyk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJy5zZXRWaWEoJyArIGMgKyAnLCAnICsgYiArICcpIHNob3VsZCBjaGFuZ2Ugb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHBhdGhmaW5kZXIuc2V0VmlhKGMsIGIpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShvYmplY3QpKS5pcy5lcXVhbCgne1wiYVwiOntcImJcIjp7XCJjXCI6WzQsXCJ0ZXN0MVwiLGZhbHNlLG51bGwsbnVsbF0sXCJlXCI6ZmFsc2UsXCJmXCI6W3tcImdcIjpmYWxzZSxcImhcIjozLFwiaVwiOltcInRlc3QyXCJdfV0sXCJqXCI6e30sXCJrXCI6e30sXCJsXCI6e319LFwieVwiOntcImRcIjpcInRydWVcIn19LFwiYlwiOnt9fScpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cblxuICAgICAgICBkZXNjcmliZSgnLmV4aXN0cygpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFsnYS5iLmMuMScsIHRydWVdLFxuICAgICAgICAgICAgICAgIFsnYi5hJywgdHJ1ZV0sXG4gICAgICAgICAgICAgICAgWydhLmIueCcsIGZhbHNlXSxcbiAgICAgICAgICAgICAgICBbJ2EueCcsIGZhbHNlXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi5xJywgZmFsc2VdLFxuICAgICAgICAgICAgICAgIFsnYS5iLmMuMCcsIHRydWVdLFxuICAgICAgICAgICAgICAgIFsnYS5iLmQnLCB0cnVlXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi5mLjAuZycsIHRydWVdLFxuICAgICAgICAgICAgICAgIFsnYS5iLmYuMC5pLjAnLCB0cnVlXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi5mLjAuaS4yJywgZmFsc2VdLFxuICAgICAgICAgICAgICAgIFsnYS5iLmUnLCB0cnVlXSxcbiAgICAgICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG5cbiAgICAgICAgICAgICAgICBpdCgnLmV4aXN0cygnICsgYSArICcpIHNob3VsZCByZXR1cm4gJyArIGIgKyAnICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHBhdGhmaW5kZXIuZXhpc3RzKGEpKS5pcy5lcXVhbChiKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuXG4gICAgICAgICAgICB9KTtcblxuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCcuZGVsZXRlVmlhKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgWydhLmIuZScsICd7XCJhXCI6e1wiYlwiOntcImNcIjpbNCxcInRlc3QxXCIsZmFsc2UsbnVsbCxudWxsXSxcImZcIjpbe1wiZ1wiOmZhbHNlLFwiaFwiOjMsXCJpXCI6W1widGVzdDJcIl19XSxcImpcIjp7fSxcImtcIjp7fSxcImxcIjp7fX19LFwiYlwiOnt9fSddLFxuICAgICAgICAgICAgICAgIFsnYS5iLmYnLCAne1wiYVwiOntcImJcIjp7XCJjXCI6WzQsXCJ0ZXN0MVwiLGZhbHNlLG51bGwsbnVsbF0sXCJlXCI6ZmFsc2UsXCJqXCI6e30sXCJrXCI6e30sXCJsXCI6e319fSxcImJcIjp7fX0nXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi5qJywgJ3tcImFcIjp7XCJiXCI6e1wiY1wiOls0LFwidGVzdDFcIixmYWxzZSxudWxsLG51bGxdLFwiZVwiOmZhbHNlLFwiZlwiOlt7XCJnXCI6ZmFsc2UsXCJoXCI6MyxcImlcIjpbXCJ0ZXN0MlwiXX1dLFwia1wiOnt9LFwibFwiOnt9fX0sXCJiXCI6e319J10sXG5cbiAgICAgICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICAgICAgaXQoJy5kZWxldGVWaWEoJyArIGEgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBiICsgJyAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhdGhmaW5kZXIuZGVsZXRlVmlhKGEpXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShvYmplY3QpKS5pcy5lcXVhbChiKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnLmdldFZpYSgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZGVzY3JpYmUoJy5nZXRWaWEoKScsIGZ1bmN0aW9uICgpIHtcblxuXG4gICAgICAgICAgICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCwgXCJ0ZXN0MVwiLCBmYWxzZSwgdW5kZWZpbmVkLCBwYXJzZUludChcImFcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGg6IDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTogW1widGVzdDJcIl1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgajoge30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGs6IChuZXcgTWFwKS5zZXQoJ20nLCB7bjogM30pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsOiAobmV3IFNldCkuYWRkKHtuOiA0fSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG86IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwOiB7cTogMSwgcjogdHJ1ZX19LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3A6IHtxOiAyLCByOiB0cnVlfX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cDoge3E6IDMsIHI6IHRydWV9fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwOiB7cTogNCwgcjogdHJ1ZX19LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3A6IHtxOiA1LCByOiB0cnVlfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDoge2E6IDF9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdToge2E6IDJ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdjoge2E6IDN9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDoge2E6IDR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgcGF0aGZpbmRlciA9IG5ldyBQYXRoZmluZGVyKG9iamVjdCk7XG5cblxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBbJ2EuKicsICdbW1wiYlwiLHtcImNcIjpbNCxcInRlc3QxXCIsZmFsc2UsbnVsbCxudWxsXSxcImVcIjpmYWxzZSxcImZcIjpbe1wiZ1wiOmZhbHNlLFwiaFwiOjMsXCJpXCI6W1widGVzdDJcIl19XSxcImpcIjp7fSxcImtcIjp7fSxcImxcIjp7fSxcIm9cIjpbe1wicFwiOntcInFcIjoxLFwiclwiOnRydWV9fSx7XCJwXCI6e1wicVwiOjIsXCJyXCI6dHJ1ZX19LHtcInBcIjp7XCJxXCI6MyxcInJcIjp0cnVlfX0se1wicFwiOntcInFcIjo0LFwiclwiOnRydWV9fSx7XCJwXCI6e1wicVwiOjUsXCJyXCI6dHJ1ZX19XSxcInNcIjp7XCJ0XCI6e1wiYVwiOjF9LFwidVwiOntcImFcIjoyfSxcInZcIjp7XCJhXCI6M30sXCJ4XCI6e1wiYVwiOjR9fX1dXSddLFxuICAgICAgICAgICAgICAgICAgICBbJ2EuYi5zLiouYScsICdbW1widFwiLDFdLFtcInVcIiwyXSxbXCJ2XCIsM10sW1wieFwiLDRdXSddLFxuICAgICAgICAgICAgICAgICAgICBbJ2EuYi5zLionLCAnW1tcInRcIix7XCJhXCI6MX1dLFtcInVcIix7XCJhXCI6Mn1dLFtcInZcIix7XCJhXCI6M31dLFtcInhcIix7XCJhXCI6NH1dXSddLFxuICAgICAgICAgICAgICAgICAgICBbJ2EuYi5vLioucC5xJywgJ1tbXCIwXCIsMV0sW1wiMVwiLDJdLFtcIjJcIiwzXSxbXCIzXCIsNF0sW1wiNFwiLDVdXSddLFxuICAgICAgICAgICAgICAgICAgICBbJ2EuYi5vLioucC5yJywgJ1tbXCIwXCIsdHJ1ZV0sW1wiMVwiLHRydWVdLFtcIjJcIix0cnVlXSxbXCIzXCIsdHJ1ZV0sW1wiNFwiLHRydWVdXSddLFxuICAgICAgICAgICAgICAgICAgICBbJ2EuYi5vLioucCcsICdbW1wiMFwiLHtcInFcIjoxLFwiclwiOnRydWV9XSxbXCIxXCIse1wicVwiOjIsXCJyXCI6dHJ1ZX1dLFtcIjJcIix7XCJxXCI6MyxcInJcIjp0cnVlfV0sW1wiM1wiLHtcInFcIjo0LFwiclwiOnRydWV9XSxbXCI0XCIse1wicVwiOjUsXCJyXCI6dHJ1ZX1dXSddXG4gICAgICAgICAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgICAgICAgICBpdCgnLmdldFZpYSgnICsgYSArICcpIHNob3VsZCByZXN1bHQgJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByID0gcGF0aGZpbmRlci5nZXRWaWEoYSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKHIpKSkuaXMuZXF1YWwoYik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGl0KCcuZ2V0VmlhKCkgc2hvdWxkIHJlc3VsdCAnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgcCA9IG5ldyBQYXRoZmluZGVyKHtcbiAgICAgICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjOiAxfSwge2M6IDJ9XG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2M6IDEsIGQ6IGZhbHNlfSwge2M6IDJ9XG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgbGV0IHIgPSBwLmdldFZpYShcIioueC4qLmNcIilcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG1hcFRvT2JqKG1hcCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgb2JqID0ge31cbiAgICAgICAgICAgICAgICAgICAgbWFwLmZvckVhY2goZnVuY3Rpb24gKHYsIGspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2IGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqW2tdID0gbWFwVG9PYmoodilcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqW2tdID0gdlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmpcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkobWFwVG9PYmoocikpKS5pcy5lcXVhbCgne1wiYVwiOntcIjBcIjoxLFwiMVwiOjJ9LFwiYlwiOntcIjBcIjoxLFwiMVwiOjJ9fScpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCcuZ2V0VmlhKGEuYi5sLjAubikgd2l0aCBtYXAgc2hvdWxkIHJldHVybiA0ICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QocGF0aGZpbmRlci5nZXRWaWEoJ2EuYi5sLjAubicpKS5pcy5lcXVhbCg0KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgWydhLmIuay5tLm4nLCAzXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi5sLjAubicsIDRdLFxuICAgICAgICAgICAgICAgIFsnYS54JywgdW5kZWZpbmVkXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi5xJywgdW5kZWZpbmVkXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi5jLjEnLCBcInRlc3QxXCJdLFxuICAgICAgICAgICAgICAgIFsnYS5iLmMuMCcsIDRdLFxuICAgICAgICAgICAgICAgIFsnYS5iLmQnLCB1bmRlZmluZWRdLFxuICAgICAgICAgICAgICAgIFsnYS5iLmYuMC5nJywgZmFsc2VdLFxuICAgICAgICAgICAgICAgIFsnYS5iLmYuMC5pLjAnLCBcInRlc3QyXCJdLFxuICAgICAgICAgICAgICAgIFsnYS5iLmUnLCBmYWxzZV0sXG4gICAgICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuXG4gICAgICAgICAgICAgICAgaXQoJy5nZXRWaWEoJyArIGEgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBiICsgJyAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChwYXRoZmluZGVyLmdldFZpYShhKSkuaXMuZXF1YWwoYik7XG4gICAgICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbJ2EuYi5kLmUnXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi5kLngnXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi5sLmUubiddLFxuICAgICAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICAgICAgaXQoJy5nZXRWaWEoJyArIGEgKyAnKSBzaG91bGQgdGhyb3cgRXJyb3IgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoKCkgPT4gcGF0aGZpbmRlci5nZXRWaWEoYSkpLnRvLnRocm93KEVycm9yKVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuICAgIH0pO1xufSk7XG5cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7UGlwZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kYXRhL3BpcGUubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5pbXBvcnQge0VtYmVkfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2kxOG4vcHJvdmlkZXJzL2VtYmVkLm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdQaXBlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgbGV0IHByb21pc2VzID0gW11cbiAgICAgICAgaWYgKCFnbG9iYWxUaGlzWydjcnlwdG8nXSkge1xuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChpbXBvcnQoXCJAcGVjdWxpYXIvd2ViY3J5cHRvXCIpLnRoZW4obSA9PiB7XG4gICAgICAgICAgICAgICAgZ2xvYmFsVGhpc1snY3J5cHRvJ10gPSBuZXcgbS5DcnlwdG8oKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0pKVxuICAgICAgICB9XG5cbiAgICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgncnVuIGRpZmZlcmVudCBwaXBlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgW1xuICAgICAgICAgICAgWydwYXRoOmIgfCBpZjp4OlxcXFwgJywge2E6IHRydWV9LCAnICddLCAgIC8vICdcXFxcICcubGVuZ3RoIFx1MjFBNiAyXG4gICAgICAgICAgICBbJ3BhdGg6YSB8IGlmOng6XFxcXCAnLCB7YTogdHJ1ZX0sICd4J10sXG4gICAgICAgICAgICBbJ25vcCcsICdhYmNkZWZnaGlqa2xtbm9wJywgJ2FiY2RlZmdoaWprbG1ub3AnXSxcblxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnUGlwZS5ydW4oJyArIEpTT04uc3RyaW5naWZ5KGEpICsgJykucnVuKCcgKyBKU09OLnN0cmluZ2lmeShiKSArICcpIHNob3VsZCByZXR1cm4gJyArIEpTT04uc3RyaW5naWZ5KGMpLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IHQgPSBuZXcgUGlwZShhKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHIgPSB0LnJ1bihiKTtcbiAgICAgICAgICAgICAgICBleHBlY3QocikudG8uYmUuZXFsKGMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJ25ldyBQaXBlIHNob3VsZCBjcmVhdGUgbmV3IEluc3RhbmNlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIEluc3RhbmNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBQaXBlKCcnKSkudG8uYmUuaW5zdGFuY2VPZihQaXBlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gSW5zdGFuY2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IFBpcGUoJ2luZGV4OmF8dG91cHBlciB8cHJlZml4OmEnKS5ydW4oe2E6IFwidGVzdFwifSkpLnRvLmJlLmVxdWFsKCdhVEVTVCcpO1xuICAgICAgICB9KTtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ2luZGV4OmF8dG91cHBlciB8cHJlZml4OmEnLCB7YTogXCJ0ZXN0XCJ9LCAnYVRFU1QnXSxcbiAgICAgICAgICAgIFsncGF0aDphLmIuYy5kIHwgdG91cHBlciB8IHByZWZpeDpIZWxsb1xcXFwgJywge1xuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgYjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgYzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ6IFwid29ybGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgJ0hlbGxvIFdPUkxEJ10sXG4gICAgICAgICAgICBbJ3BhdGg6YS5iLmN8aW5kZXg6ZHx0b3VwcGVyIHxzdWZmaXg6eCcsIHthOiB7Yjoge2M6IHtkOiBcInRlc3RcIn19fX0sICdURVNUeCddLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnbmV3IFBpcGUoJyArIEpTT04uc3RyaW5naWZ5KGEpICsgJykucnVuKCcgKyBKU09OLnN0cmluZ2lmeShiKSArICcpIHNob3VsZCByZXR1cm4gJyArIEpTT04uc3RyaW5naWZ5KGMpICsgJyAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IHQgPSBuZXcgUGlwZShhKTtcbiAgICAgICAgICAgICAgICBleHBlY3QodC5ydW4oYikpLnRvLmJlLmVxdWFsKGMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCduZXcgUGlwZSBhbmQgbG9jYWxlJywgZnVuY3Rpb24gKCkge1xuXG5cbiAgICAgICAgbGV0IGh0bWwxID0gYFxuPGRpdiBpZD1cIm1vY2stdHJhbnNsYXRpb25zXCI+PC9kaXY+XG48c2NyaXB0IHR5cGU9XCJhcHBsaWNhdGlvbi9qc29uXCIgZGF0YS1tb25zdGVyLXJvbGU9XCJ0cmFuc2xhdGlvbnNcIj5cbiAgICB7XG4gICAgICAgIFwiNTFcIjogXCJ4eXpcIixcbiAgICAgICAgXCI1MlwiOiBcImFiY1wiLFxuICAgICAgICBcIjUzXCI6IFwiZGVmXCJcbiAgICB9XG48L3NjcmlwdD4gIFxuYDtcblxuICAgICAgICBiZWZvcmVFYWNoKChkb25lKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuICAgICAgICAgICAgbGV0IGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9jay10cmFuc2xhdGlvbnMnKTtcbiAgICAgICAgICAgIEVtYmVkLmFzc2lnblRyYW5zbGF0aW9uc1RvRWxlbWVudChlbGVtKS50aGVuKChvKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoZSlcbiAgICAgICAgICAgIH0pXG5cblxuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3BhdGg6c3RhdHVzIHwgdG9zdHJpbmcgfCBpMThuJywge3N0YXR1czogNTF9LCBcInh5elwiXVxuXG5cbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBwaXBlID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgb2JqID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgZXhwZWN0ZWQgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCB0cmFuc2Zvcm0oJyArIHBpcGUgKyAnKS5ydW4oJyArIEpTT04uc3RyaW5naWZ5KG9iaikgKyAnKSByZXR1cm4gJyArIEpTT04uc3RyaW5naWZ5KGV4cGVjdGVkKSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCB0ID0gbmV3IFBpcGUocGlwZSk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHQucnVuKG9iaikpLnRvLmJlLmVxdWFsKGV4cGVjdGVkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuXG5cbiAgICB9KVxuXG5cbn0pO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQge2V4dGVuZH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cblxuY2xhc3MgTW9ja0ZvckV4dGVuZHMge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgIH1cbn1cblxuXG5kZXNjcmliZSgnZXh0ZW5kJywgZnVuY3Rpb24gKCkge1xuXG4gICAgW1xuICAgICAgICBbXG4gICAgICAgICAgICd7XCJ0aGVrZXlcIjp7fX0nLHt9LHt0aGVrZXk6bmV3IE1vY2tGb3JFeHRlbmRzfSBcbiAgICAgICAgXSxcbiAgICAgICAgW1xuICAgICAgICAgICAgJ3tcImFcIjp7XCJiXCI6W119fScsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICBiOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICBcIjFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiMlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCIzXCJcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICBiOiBbXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0sICAgICAgICBbXG4gICAgICAgICAgICAne1wiYVwiOntcImJcIjoxLFwiZFwiOjF9fScsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICBiOiAxXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgIGQ6IDFcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICBdLFxuXG4gICAgICAgIFtcbiAgICAgICAgICAgICd7XCJhXCI6e1wiYlwiOjEsXCJkXCI6e1wieFwiOltcImNhclwiXSxcImZcIjp0cnVlLFwiZ1wiOltdfX19JyxcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgYjogMSxcbiAgICAgICAgICAgICAgICAgICAgZDoge3g6IFtcImNhclwiXX1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgZDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGc6IFtdXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICBdXG5cbiAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICBsZXQgZCA9IGRhdGEuc2hpZnQoKVxuICAgICAgICBsZXQgYSA9IGRhdGFcblxuICAgICAgICBpdCgnLmV4dGVuZCgnICsgSlNPTi5zdHJpbmdpZnkoYSkgKyAnKSBzaG91bGQgcmVzdWx0IGluICcgKyBkLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgeCA9IGV4dGVuZC5hcHBseSh0aGlzLCBhKTtcbiAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeSh4KSkuaXMuZXF1YWwoZCk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuXG4gICAgW1xuXG5cbiAgICAgICAgW1xuICAgICAgICAgICAge30sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICBiOiAxLFxuICAgICAgICAgICAgICAgICAgICBkOiBbXCJjYXJcIl1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgZDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGc6IFtdXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYToge31cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYTogW11cbiAgICAgICAgICAgIH1cbiAgICAgICAgXVxuXG4gICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgbGV0IGEgPSBkYXRhXG5cbiAgICAgICAgaXQoJy5leHRlbmQoJyArIEpTT04uc3RyaW5naWZ5KGEpICsgJykgc2hvdWxkIHRocm93IEVycm9yICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBleHRlbmQuYXBwbHkodGhpcywgYSkpLnRvLnRocm93KEVycm9yKTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG59KVxuXG5cblxuZGVzY3JpYmUoJ2V4dGVuZCBmdW5jdGlvbicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGV4dGVuZCBhbiBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIGZyb20gYW5vdGhlciBvYmplY3QnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHsgYTogMSB9O1xuICAgICAgICBjb25zdCBzb3VyY2UgPSB7IGI6IDIgfTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZXh0ZW5kKHRhcmdldCwgc291cmNlKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbCh7IGE6IDEsIGI6IDIgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGFuIGVycm9yIGZvciBub24tb2JqZWN0IHRhcmdldCcsICgpID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gbnVsbDtcbiAgICAgICAgY29uc3Qgc291cmNlID0geyBiOiAyIH07XG4gICAgICAgIGV4cGVjdCgoKSA9PiBleHRlbmQodGFyZ2V0LCBzb3VyY2UpKS50by50aHJvdygpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciBmb3Igbm9uLW9iamVjdCBzb3VyY2UnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHsgYTogMSB9O1xuICAgICAgICBjb25zdCBzb3VyY2UgPSBcIm5vdCBhbiBvYmplY3RcIjtcbiAgICAgICAgZXhwZWN0KCgpID0+IGV4dGVuZCh0YXJnZXQsIHNvdXJjZSkpLnRvLnRocm93KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBkZWVwIG9iamVjdCBleHRlbnNpb24nLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHsgYTogeyBiOiAxIH0gfTtcbiAgICAgICAgY29uc3Qgc291cmNlID0geyBhOiB7IGM6IDIgfSwgZDogMyB9O1xuICAgICAgICBjb25zdCByZXN1bHQgPSBleHRlbmQodGFyZ2V0LCBzb3VyY2UpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKHsgYTogeyBiOiAxLCBjOiAyIH0sIGQ6IDMgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBhcnJheSBleHRlbnNpb24nLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHsgYTogWzEsIDJdIH07XG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IHsgYTogWzMsIDRdIH07XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGV4dGVuZCh0YXJnZXQsIHNvdXJjZSk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoeyBhOiBbMywgNF0gfSk7XG4gICAgfSk7XG59KTtcblxuXG5cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IEFic3RyYWN0Q29uc3RyYWludCB9O1xuXG4vKipcbiAqIENvbnN0cmFpbnRzIGFyZSB1c2VkIHRvIGRlZmluZSBjb25kaXRpb25zIHRoYXQgbXVzdCBiZSBtZXQgYnkgdGhlIHZhbHVlIG9mIGEgdmFyaWFibGUuXG4gKlxuICogVGhlIHVuaWZvcm0gQVBJIG9mIHRoZSBjb25zdHJhaW50cyBhbGxvd3MgY2hhaW5zIHRvIGJlIGZvcm1lZC5cbiAqXG4gKiBUaGUgYWJzdHJhY3QgY29uc3RyYWludCBkZWZpbmVzIHRoZSBhcGkgZm9yIGFsbCBjb25zdHJhaW50cy4gbWFpbmx5IHRoZSBtZXRob2QgaXNWYWxpZCgpIGlzIGRlZmluZWQuXG4gKlxuICogRGVyaXZlZCBjbGFzc2VzIG11c3QgaW1wbGVtZW50IHRoZSBtZXRob2QgaXNWYWxpZCgpLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgVGhlIGFic3RyYWN0IGNvbnN0cmFpbnRcbiAqL1xuY2xhc3MgQWJzdHJhY3RDb25zdHJhaW50IGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKiB0aGlzIG1ldGhvZCBtdXN0IHJldHVybiBhIHByb21pc2UgY29udGFpbmluZyB0aGUgcmVzdWx0IG9mIHRoZSBjaGVjay5cblx0ICpcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0aXNWYWxpZCh2YWx1ZSkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlamVjdCh2YWx1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2NvbnN0cmFpbnRzL2Fic3RyYWN0LWNvbnN0cmFpbnRcIik7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBBYnN0cmFjdENvbnN0cmFpbnQgfSBmcm9tIFwiLi9hYnN0cmFjdC5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IEludmFsaWQgfTtcblxuLyoqXG4gKiBDb25zdHJhaW50cyBhcmUgdXNlZCB0byBkZWZpbmUgY29uZGl0aW9ucyB0aGF0IG11c3QgYmUgbWV0IGJ5IHRoZSB2YWx1ZSBvZiBhIHZhcmlhYmxlLlxuICpcbiAqIFRoZSB1bmlmb3JtIEFQSSBvZiB0aGUgY29uc3RyYWludHMgYWxsb3dzIGNoYWlucyB0byBiZSBmb3JtZWQuXG4gKlxuICogVGhlIGludmFsaWQgY29uc3RyYWludCBhbGxvd3MgYW4gYWx3YXlzIGludmFsaWQgcXVlcnkgdG8gYmUgcGVyZm9ybWVkLiB0aGlzIGNvbnN0cmFpbnQgaXMgbWFpbmx5IGludGVuZGVkIGZvciB0ZXN0aW5nLlxuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9saWJyYXJpZXMvY29uc3RyYWludHMvaW52YWxpZC8gQSBzaW1wbGUgZXhhbXBsZVxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBjb25zdHJhaW50IHRoYXQgYWx3YXlzIGludmFsaWRcbiAqL1xuY2xhc3MgSW52YWxpZCBleHRlbmRzIEFic3RyYWN0Q29uc3RyYWludCB7XG5cdC8qKlxuXHQgKiB0aGlzIG1ldGhvZCByZXR1cm5zIGEgcmVqZWN0ZWQgcHJvbWlzZVxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IHZhbHVlXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRpc1ZhbGlkKHZhbHVlKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KHZhbHVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29uc3RyYWludHMvaW52YWxpZFwiKTtcblx0fVxufVxuIiwgImltcG9ydCB7SW52YWxpZH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy9pbnZhbGlkLm1qc1wiO1xuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuZGVzY3JpYmUoJ0ludmFsaWQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnLmlzVmFsaWQoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGlzdmFsaWQgPSBuZXcgSW52YWxpZCgpXG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXNvbHZlIHByb21pc2UnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgaXN2YWxpZC5pc1ZhbGlkKCkuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGUpLnRvLmJlLnVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbn0pO1xuXG4iLCAiaW1wb3J0IHtCYXNlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQge0Fic3RyYWN0T3BlcmF0b3J9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvY29uc3RyYWludHMvYWJzdHJhY3RvcGVyYXRvci5tanNcIjtcbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cbmNsYXNzIEFic3RyYWN0Q29uc3RyYWludE1vY2sgZXh0ZW5kcyBCYXNlIHtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIGlzVmFsaWQodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHZhbHVlKTtcbiAgICB9XG59XG5cblxuZGVzY3JpYmUoJ0Fic3RyYWN0T3BlcmF0b3InLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciB3aGVuIHRoZSBjb25zdHJhaW50IGlzIG5vdCBjYWxsIHdpdGggcGFyYW1ldGVyJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG5ldyBBYnN0cmFjdE9wZXJhdG9yKClcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IG5vdCBhbiBlcnJvciB3aGVuIHRoZSBjb25zdHJhaW50IGlzIG5vdCBjYWxsIHdpdGggcGFyYW1ldGVyJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgYyA9IG5ldyBBYnN0cmFjdE9wZXJhdG9yKG5ldyBBYnN0cmFjdENvbnN0cmFpbnRNb2NrKCksIG5ldyBBYnN0cmFjdENvbnN0cmFpbnRNb2NrKCkpICAgIFxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgXG5cbiAgICB9KTtcbn0pO1xuXG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgQWJzdHJhY3RDb25zdHJhaW50IH0gZnJvbSBcIi4vYWJzdHJhY3QubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBBYnN0cmFjdE9wZXJhdG9yIH07XG5cbi8qKlxuICogQ29uc3RyYWludHMgYXJlIHVzZWQgdG8gZGVmaW5lIGNvbmRpdGlvbnMgdGhhdCBtdXN0IGJlIG1ldCBieSB0aGUgdmFsdWUgb2YgYSB2YXJpYWJsZS5cbiAqXG4gKiBUaGUgdW5pZm9ybSBBUEkgb2YgdGhlIGNvbnN0cmFpbnRzIGFsbG93cyBjaGFpbnMgdG8gYmUgZm9ybWVkLlxuICpcbiAqIE9wZXJhdG9ycyBhbGxvdyB5b3UgdG8gbGluayBjb25zdHJhaW50cyB0b2dldGhlci4gZm9yIGV4YW1wbGUsIHlvdSBjYW4gY2hlY2sgd2hldGhlciBhIHZhbHVlIGlzXG4gKiBhbiBvYmplY3Qgb3IgYW4gYXJyYXkuIGVhY2ggb3BlcmF0b3IgaGFzIHR3byBvcGVyYW5kcyB0aGF0IGFyZSBsaW5rZWQgdG9nZXRoZXIuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4zLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBUaGUgYWJzdHJhY3Qgb3BlcmF0b3IgY29uc3RyYWludFxuICovXG5jbGFzcyBBYnN0cmFjdE9wZXJhdG9yIGV4dGVuZHMgQWJzdHJhY3RDb25zdHJhaW50IHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7QWJzdHJhY3RDb25zdHJhaW50fSBvcGVyYW50QVxuXHQgKiBAcGFyYW0ge0Fic3RyYWN0Q29uc3RyYWludH0gb3BlcmFudEJcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSBcInBhcmFtZXRlcnMgbXVzdCBiZSBmcm9tIHR5cGUgQWJzdHJhY3RDb25zdHJhaW50XCJcblx0ICovXG5cdGNvbnN0cnVjdG9yKG9wZXJhbnRBLCBvcGVyYW50Qikge1xuXHRcdHN1cGVyKCk7XG5cblx0XHRpZiAoXG5cdFx0XHQhKFxuXHRcdFx0XHRvcGVyYW50QSBpbnN0YW5jZW9mIEFic3RyYWN0Q29uc3RyYWludCAmJlxuXHRcdFx0XHRvcGVyYW50QiBpbnN0YW5jZW9mIEFic3RyYWN0Q29uc3RyYWludFxuXHRcdFx0KVxuXHRcdCkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInBhcmFtZXRlcnMgbXVzdCBiZSBmcm9tIHR5cGUgQWJzdHJhY3RDb25zdHJhaW50XCIpO1xuXHRcdH1cblxuXHRcdHRoaXMub3BlcmFudEEgPSBvcGVyYW50QTtcblx0XHR0aGlzLm9wZXJhbnRCID0gb3BlcmFudEI7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2NvbnN0cmFpbnRzL2Fic3RyYWN0LW9wZXJhdG9yXCIpO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgQWJzdHJhY3RDb25zdHJhaW50IH0gZnJvbSBcIi4vYWJzdHJhY3QubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBWYWxpZCB9O1xuXG4vKipcbiAqIENvbnN0cmFpbnRzIGFyZSB1c2VkIHRvIGRlZmluZSBjb25kaXRpb25zIHRoYXQgbXVzdCBiZSBtZXQgYnkgdGhlIHZhbHVlIG9mIGEgdmFyaWFibGUuXG4gKlxuICogVGhlIHVuaWZvcm0gQVBJIG9mIHRoZSBjb25zdHJhaW50cyBhbGxvd3MgY2hhaW5zIHRvIGJlIGZvcm1lZC5cbiAqXG4gKiBUaGUgdmFsaWQgY29uc3RyYWludCBhbGxvd3MgYW4gYWx3YXlzIHZhbGlkIHF1ZXJ5IHRvIGJlIHBlcmZvcm1lZC4gdGhpcyBjb25zdHJhaW50IGlzIG1haW5seSBpbnRlbmRlZCBmb3IgdGVzdGluZy5cbiAqXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvbGlicmFyaWVzL2NvbnN0cmFpbnRzL3ZhbGlkLyBBIHNpbXBsZSBleGFtcGxlXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4zLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIGNvbnN0cmFpbnQgdGhhdCBhbHdheXMgdmFsaWRcbiAqL1xuY2xhc3MgVmFsaWQgZXh0ZW5kcyBBYnN0cmFjdENvbnN0cmFpbnQge1xuXHQvKipcblx0ICogdGhpcyBtZXRob2QgcmV0dXJuIGEgcHJvbWlzZSBjb250YWluaW5nIHRoZSByZXN1bHQgb2YgdGhlIGNoZWNrLlxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IHZhbHVlXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRpc1ZhbGlkKHZhbHVlKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2NvbnN0cmFpbnRzL3ZhbGlkXCIpO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgQWJzdHJhY3RPcGVyYXRvciB9IGZyb20gXCIuL2Fic3RyYWN0b3BlcmF0b3IubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBPck9wZXJhdG9yIH07XG5cbi8qKlxuICogQ29uc3RyYWludHMgYXJlIHVzZWQgdG8gZGVmaW5lIGNvbmRpdGlvbnMgdGhhdCBtdXN0IGJlIG1ldCBieSB0aGUgdmFsdWUgb2YgYSB2YXJpYWJsZS5cbiAqXG4gKiBUaGUgdW5pZm9ybSBBUEkgb2YgdGhlIGNvbnN0cmFpbnRzIGFsbG93cyBjaGFpbnMgdG8gYmUgZm9ybWVkLlxuICpcbiAqIFRoZSBPck9wZXJhdG9yIGlzIHVzZWQgdG8gbGluayBzZXZlcmFsIGNvbnN0cmFpbnRzLiBUaGUgY29uc3RyYWludCBpcyBmdWxmaWxsZWQgaWYgb25lIG9mIHRoZSBjb25zdHJhaW50cyBpcyBmdWxmaWxsZWQuXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2xpYnJhcmllcy9jb25zdHJhaW50cy9vcm9wZXJhdG9yLyBBIHNpbXBsZSBleGFtcGxlXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4zLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIG9yIG9wZXJhdG9yXG4gKi9cbmNsYXNzIE9yT3BlcmF0b3IgZXh0ZW5kcyBBYnN0cmFjdE9wZXJhdG9yIHtcblx0LyoqXG5cdCAqIHRoaXMgbWV0aG9kIHJldHVybnMgYSBwcm9taXNlIGNvbnRhaW5pbmcgdGhlIHJlc3VsdCBvZiB0aGUgY2hlY2suXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdGlzVmFsaWQodmFsdWUpIHtcblx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuXHRcdFx0bGV0IGE7XG5cdFx0XHRsZXQgYjtcblxuXHRcdFx0c2VsZi5vcGVyYW50QVxuXHRcdFx0XHQuaXNWYWxpZCh2YWx1ZSlcblx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRhID0gZmFsc2U7XG5cdFx0XHRcdFx0LyoqIGIgaGFzIGFscmVhZHkgYmVlbiBldmFsdWF0ZWQgYW5kIHdhcyBub3QgdHJ1ZSAqL1xuXHRcdFx0XHRcdGlmIChiID09PSBmYWxzZSkge1xuXHRcdFx0XHRcdFx0cmVqZWN0KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0c2VsZi5vcGVyYW50QlxuXHRcdFx0XHQuaXNWYWxpZCh2YWx1ZSlcblx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRiID0gZmFsc2U7XG5cdFx0XHRcdFx0LyoqIGIgaGFzIGFscmVhZHkgYmVlbiBldmFsdWF0ZWQgYW5kIHdhcyBub3QgdHJ1ZSAqL1xuXHRcdFx0XHRcdGlmIChhID09PSBmYWxzZSkge1xuXHRcdFx0XHRcdFx0cmVqZWN0KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29uc3RyYWludHMvb3Itb3BlcmF0b3JcIik7XG5cdH1cbn1cbiIsICJpbXBvcnQge1ZhbGlkfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL3ZhbGlkLm1qc1wiO1xuaW1wb3J0IHtJbnZhbGlkfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL2ludmFsaWQubWpzXCI7XG5pbXBvcnQge09yT3BlcmF0b3J9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvY29uc3RyYWludHMvb3JvcGVyYXRvci5tanNcIjtcblxuZGVzY3JpYmUoJ09yT3BlcmF0b3InLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnLmlzVmFsaWQoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbbmV3IFZhbGlkKCksIG5ldyBWYWxpZCgpLCB0cnVlXSxcbiAgICAgICAgICAgIFtuZXcgVmFsaWQoKSwgbmV3IEludmFsaWQoKSwgdHJ1ZV0sXG4gICAgICAgICAgICBbbmV3IEludmFsaWQoKSwgbmV3IFZhbGlkKCksIHRydWVdLFxuICAgICAgICAgICAgW25ldyBJbnZhbGlkKCksIG5ldyBJbnZhbGlkKCksIGZhbHNlXVxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnY29uc3RyYWludC5pc1ZhbGlkKCkgc2hvdWxkIHJldHVybiAnICsgYywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgICAgIGxldCBjb25zdHJhaW50ID0gbmV3IE9yT3BlcmF0b3IoYSwgYik7XG4gICAgICAgICAgICAgICAgY29uc3RyYWludC5pc1ZhbGlkKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGMgPT09IHRydWUgPyBkb25lKCkgOiBkb25lKG5ldyBFcnJvcigpKTtcbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGMgPT09IHRydWUgPyBkb25lKG5ldyBFcnJvcigpKSA6IGRvbmUoKTtcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuICAgIH0pO1xufSk7XG5cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpc09iamVjdCB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IEFic3RyYWN0Q29uc3RyYWludCB9IGZyb20gXCIuL2Fic3RyYWN0Lm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuZXhwb3J0IHsgSXNPYmplY3QgfTtcblxuLyoqXG4gKiBDb25zdHJhaW50cyBhcmUgdXNlZCB0byBkZWZpbmUgY29uZGl0aW9ucyB0aGF0IG11c3QgYmUgbWV0IGJ5IHRoZSB2YWx1ZSBvZiBhIHZhcmlhYmxlLlxuICpcbiAqIFRoZSB1bmlmb3JtIEFQSSBvZiB0aGUgY29uc3RyYWludHMgYWxsb3dzIGNoYWlucyB0byBiZSBmb3JtZWQuXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2xpYnJhcmllcy9jb25zdHJhaW50cy9pc29iamVjdC8gQSBzaW1wbGUgZXhhbXBsZVxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBjb25zdHJhaW50IHRvIGNoZWNrIGlmIGEgdmFsdWUgaXMgYW4gb2JqZWN0XG4gKi9cbmNsYXNzIElzT2JqZWN0IGV4dGVuZHMgQWJzdHJhY3RDb25zdHJhaW50IHtcblx0LyoqXG5cdCAqIHRoaXMgbWV0aG9kIHJldHVybnMgYSBwcm9taXNlIGNvbnRhaW5pbmcgdGhlIHJlc3VsdCBvZiB0aGUgY2hlY2suXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdGlzVmFsaWQodmFsdWUpIHtcblx0XHRpZiAoaXNPYmplY3QodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QodmFsdWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb25zdHJhaW50L2lzLW9iamVjdFwiKTtcblx0fVxufVxuIiwgImltcG9ydCB7SXNPYmplY3R9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvY29uc3RyYWludHMvaXNvYmplY3QubWpzXCI7XG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5kZXNjcmliZSgnSXNPYmplY3QnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnLmlzVmFsaWQoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGNvbnN0cmFpbnQgPSBuZXcgSXNPYmplY3QoKVxuXG4gICAgICAgIGl0KCdzaG91bGQgcmVzb2x2ZSBwcm9taXNlJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnQuaXNWYWxpZCh7fSkudGhlbihyID0+IHtcbiAgICAgICAgICAgICAgICBleHBlY3QocikuaXMuYSgnb2JqZWN0Jyk7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoXCJzaG91bGQgbm90IHJlYWNoZWQ6IFwiICsgZSkpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxufSk7XG5cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBBYnN0cmFjdE9wZXJhdG9yIH0gZnJvbSBcIi4vYWJzdHJhY3RvcGVyYXRvci5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IEFuZE9wZXJhdG9yIH07XG5cbi8qKlxuICogQ29uc3RyYWludHMgYXJlIHVzZWQgdG8gZGVmaW5lIGNvbmRpdGlvbnMgdGhhdCBtdXN0IGJlIG1ldCBieSB0aGUgdmFsdWUgb2YgYSB2YXJpYWJsZS5cbiAqXG4gKiBUaGUgdW5pZm9ybSBBUEkgb2YgdGhlIGNvbnN0cmFpbnRzIGFsbG93cyBjaGFpbnMgdG8gYmUgZm9ybWVkLlxuICpcbiAqIFRoZSBBbmRPcGVyYXRvciBpcyB1c2VkIHRvIGxpbmsgc2V2ZXJhbCBjb25zdHJhaW50cy4gVGhlIGNvbnN0cmFpbnQgaXMgZnVsZmlsbGVkIGlmIGFsbCBjb25zdHJhaW50cyBvZiB0aGUgb3BlcmF0b3JzIGFyZSBmdWxmaWxsZWQuXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2xpYnJhcmllcy9jb25zdHJhaW50cy9hbmRvcGVyYXRvci8gQSBzaW1wbGUgZXhhbXBsZVxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBhbmQgb3BlcmF0b3IgY29uc3RyYWludFxuICovXG5jbGFzcyBBbmRPcGVyYXRvciBleHRlbmRzIEFic3RyYWN0T3BlcmF0b3Ige1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHByb21pc2UgY29udGFpbmluZyB0aGUgcmVzdWx0IG9mIHRoZSBjaGVjay5cblx0ICpcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0aXNWYWxpZCh2YWx1ZSkge1xuXHRcdHJldHVybiBQcm9taXNlLmFsbChbXG5cdFx0XHR0aGlzLm9wZXJhbnRBLmlzVmFsaWQodmFsdWUpLFxuXHRcdFx0dGhpcy5vcGVyYW50Qi5pc1ZhbGlkKHZhbHVlKSxcblx0XHRdKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29uc3RyYWludHMvYW5kLW9wZXJhdG9yXCIpO1xuXHR9XG59XG4iLCAiaW1wb3J0IHtWYWxpZH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy92YWxpZC5tanNcIjtcbmltcG9ydCB7SW52YWxpZH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy9pbnZhbGlkLm1qc1wiO1xuaW1wb3J0IHtBbmRPcGVyYXRvcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy9hbmRvcGVyYXRvci5tanNcIjtcblxuZGVzY3JpYmUoJ0FuZE9wZXJhdG9yJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJy5pc1ZhbGlkKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgW25ldyBWYWxpZCgpLCBuZXcgVmFsaWQoKSwgdHJ1ZV0sXG4gICAgICAgICAgICBbbmV3IFZhbGlkKCksIG5ldyBJbnZhbGlkKCksIGZhbHNlXSxcbiAgICAgICAgICAgIFtuZXcgSW52YWxpZCgpLCBuZXcgVmFsaWQoKSwgZmFsc2VdLFxuICAgICAgICAgICAgW25ldyBJbnZhbGlkKCksIG5ldyBJbnZhbGlkKCksIGZhbHNlXVxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnY29uc3RyYWludC5pc1ZhbGlkKCkgc2hvdWxkIHJldHVybiAnICsgYywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgICAgIGxldCBjb25zdHJhaW50ID0gbmV3IEFuZE9wZXJhdG9yKGEsIGIpO1xuICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQuaXNWYWxpZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjID09PSB0cnVlID8gZG9uZSgpIDogZG9uZShuZXcgRXJyb3IoKSk7XG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjID09PSB0cnVlID8gZG9uZShuZXcgRXJyb3IoKSkgOiBkb25lKCk7XG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcbn0pO1xuXG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IEFic3RyYWN0Q29uc3RyYWludCB9IGZyb20gXCIuL2Fic3RyYWN0Lm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuZXhwb3J0IHsgSXNBcnJheSB9O1xuXG4vKipcbiAqIENvbnN0cmFpbnRzIGFyZSB1c2VkIHRvIGRlZmluZSBjb25kaXRpb25zIHRoYXQgbXVzdCBiZSBtZXQgYnkgdGhlIHZhbHVlIG9mIGEgdmFyaWFibGUuXG4gKlxuICogVGhlIHVuaWZvcm0gQVBJIG9mIHRoZSBjb25zdHJhaW50cyBhbGxvd3MgY2hhaW5zIHRvIGJlIGZvcm1lZC5cbiAqXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvbGlicmFyaWVzL2NvbnN0cmFpbnRzL2lzYXJyYXkvIEEgc2ltcGxlIGV4YW1wbGVcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgY29uc3RyYWludCB0byBjaGVjayBpZiBhIHZhbHVlIGlzIGFuIGFycmF5XG4gKi9cbmNsYXNzIElzQXJyYXkgZXh0ZW5kcyBBYnN0cmFjdENvbnN0cmFpbnQge1xuXHQvKipcblx0ICogdGhpcyBtZXRob2QgcmV0dXJucyBhIHByb21pc2UgY29udGFpbmluZyB0aGUgcmVzdWx0IG9mIHRoZSBjaGVjay5cblx0ICpcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0aXNWYWxpZCh2YWx1ZSkge1xuXHRcdGlmIChpc0FycmF5KHZhbHVlKSkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KHZhbHVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29uc3RyYWludC9pcy1hcnJheVwiKTtcblx0fVxufVxuIiwgImltcG9ydCB7SXNBcnJheX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy9pc2FycmF5Lm1qc1wiO1xuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuZGVzY3JpYmUoJ0lzQXJyYXknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnLmlzVmFsaWQoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGNvbnN0cmFpbnQgPSBuZXcgSXNBcnJheSgpXG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXNvbHZlIHByb21pc2UnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgY29uc3RyYWludC5pc1ZhbGlkKFsxLDIsM10pLnRoZW4ociA9PiB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHIpLmlzLmEoJ2FycmF5Jyk7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoXCJzaG91bGQgbm90IHJlYWNoZWQ6IFwiICsgZSkpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxufSk7XG5cbiIsICJpbXBvcnQge1ZhbGlkfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL3ZhbGlkLm1qc1wiO1xuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuZGVzY3JpYmUoJ1ZhbGlkJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJy5pc1ZhbGlkKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBjb25zdHJhaW50ID0gbmV3IFZhbGlkKClcblxuICAgICAgICBpdCgnc2hvdWxkIHJlc29sdmUgcHJvbWlzZScsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBjb25zdHJhaW50LmlzVmFsaWQoe30pLnRoZW4ociA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoXCJzaG91bGQgbm90IHJlYWNoZWQ6IFwiICsgZSkpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxufSk7XG5cbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge05vZGV9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvbm9kZS5tanNcIjtcbmltcG9ydCB7Tm9kZUxpc3R9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvbm9kZWxpc3QubWpzXCI7XG5cbmRlc2NyaWJlKCdOb2RlTGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICBkZXNjcmliZSgnI2NvbnN0cnVjdG9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIGNyZWF0ZSBhbiBlbXB0eSBOb2RlTGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBub2RlTGlzdCA9IG5ldyBOb2RlTGlzdCgpO1xuXG4gICAgICAgICAgICBleHBlY3Qobm9kZUxpc3Quc2l6ZSkudG8uZXF1YWwoMCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgY3JlYXRlIGEgTm9kZUxpc3QgZnJvbSBhbiBhcnJheScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBub2RlTGlzdCA9IG5ldyBOb2RlTGlzdChbXG4gICAgICAgICAgICAgICAgbmV3IE5vZGUoJ2RpdicpLFxuICAgICAgICAgICAgICAgIG5ldyBOb2RlKCdkaXYnKSxcbiAgICAgICAgICAgICAgICBuZXcgTm9kZSgnZGl2JylcbiAgICAgICAgICAgIF0pO1xuXG4gICAgICAgICAgICBleHBlY3Qobm9kZUxpc3Quc2l6ZSkudG8uZXF1YWwoMyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgY3JlYXRlIGEgTm9kZUxpc3QgZnJvbSBhIE5vZGVMaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IG5vZGVMaXN0ID0gbmV3IE5vZGVMaXN0KFtcbiAgICAgICAgICAgICAgICBuZXcgTm9kZSgnZGl2JyksXG4gICAgICAgICAgICAgICAgbmV3IE5vZGUoJ2RpdicpLFxuICAgICAgICAgICAgICAgIG5ldyBOb2RlKCdkaXYnKVxuICAgICAgICAgICAgXSk7XG5cbiAgICAgICAgICAgIGxldCBub2RlTGlzdDIgPSBuZXcgTm9kZUxpc3Qobm9kZUxpc3QpO1xuXG4gICAgICAgICAgICBleHBlY3Qobm9kZUxpc3QyLnNpemUpLnRvLmVxdWFsKDMpO1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgfSk7XG4gICAgXG4gICAgIFxuICAgIGl0KCdjcmVhdGUgTm9kZUxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdChuZXcgTm9kZUxpc3QoKSkuaXMuaW5zdGFuY2VvZihOb2RlTGlzdCk7XG4gICAgfSlcblxuICAgIGl0KCdhZGQgTm9kZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KG5ldyBOb2RlTGlzdCgpLmFkZChuZXcgTm9kZSgpKSkudG8uYmUuaW5zdGFuY2VvZihOb2RlTGlzdCk7XG4gICAgfSlcblxuICAgIGl0KCdyZW1vdmUgTm9kZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KG5ldyBOb2RlTGlzdCgpLnJlbW92ZShuZXcgTm9kZSgpKSkudG8uYmUuaW5zdGFuY2VvZihOb2RlTGlzdCk7XG4gICAgfSlcblxuICAgIGl0KCdoYXMgdW5rbm93biBOb2RlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3QobmV3IE5vZGVMaXN0KCkuaGFzKG5ldyBOb2RlKSkudG8uYmUuZmFsc2U7XG4gICAgfSlcblxuICAgIGl0KCdoYXMgYWRkZWQgTm9kZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgbiA9IG5ldyBOb2RlO1xuICAgICAgICBleHBlY3QobmV3IE5vZGVMaXN0KCkuYWRkKG4pLmhhcyhuKSkudG8uYmUudHJ1ZTtcbiAgICB9KVxuICAgIFxuICAgIGl0KCd0b1N0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgbiA9IG5ldyBOb2RlO1xuICAgICAgICBleHBlY3QobmV3IE5vZGVMaXN0KCkuYWRkKG5ldyBOb2RlKCdhJykuYXBwZW5kQ2hpbGQobmV3IE5vZGUoJ2InKSkpLnRvU3RyaW5nKCkpLnRvLmJlLmVxdWFsKCdhXFxuIFx1MjUxNGInKTtcbiAgICB9KVxuXG4gICAgaXQoJ3Rocm93IGV4Y2VwdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KCgpID0+IG5ldyBOb2RlTGlzdCgpLmFkZCgxKSkudG8udGhyb3coRXJyb3IpO1xuICAgIH0pXG5cblxufSk7IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtCYXNlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQge2luc3RhbmNlU3ltYm9sfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2NvbnN0YW50cy5tanNcIjtcblxuXG5cbmNsYXNzIEJhc2VEaWZmZXJlbnRSZWFsbSBleHRlbmRzIE9iamVjdCB7XG4gICAgXG5cbiAgICBzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG4gICAgICAgIHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci90eXBlcy9iYXNlXCIpO1xuICAgIH1cblxuXG59XG5cbmNsYXNzIFN1YmNsYXNzIGV4dGVuZHMgQmFzZURpZmZlcmVudFJlYWxtIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG4gICAgc3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuICAgICAgICByZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvdHlwZXMvc3ViY2xhc3NcIik7XG4gICAgfVxufVxuXG5kZXNjcmliZSgnQmFzZScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCduZXcgQmFzZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnaXMgaW5zdGFuY2Ugb2YgQmFzZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQmFzZSkudG8uYmUuaW5zdGFuY2VPZihCYXNlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ2lzIGluc3RhbmNlIG9mIE9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQmFzZSkudG8uYmUuaW5zdGFuY2VPZihPYmplY3QpO1xuICAgICAgICB9KTtcblxuICAgIH0pXG4gICAgXG4gICAgZGVzY3JpYmUoJ2luc3RhbmNvZicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnaXMgaW5zdGFuY2Ugb2YgQmFzZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQmFzZSkudG8uYmUuaW5zdGFuY2VPZihCYXNlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICBpdCgnc3ViY2xhc3MgaW5zdGFuY2VvZicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKG5ldyBTdWJjbGFzcyBpbnN0YW5jZW9mIEJhc2UpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QodHJ1ZSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSAge1xuICAgICAgICAgICAgICAgIGV4cGVjdChmYWxzZSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgXG4gICAgICAgICAgICBcbiAgICAgICAgfSk7XG5cblxuICAgIH0pXG5cbn0pIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7TWVkaWFUeXBlLCBwYXJzZU1lZGlhVHlwZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9tZWRpYXR5cGUubWpzXCI7XG5cbmRlc2NyaWJlKCdEYXRhdXJsJywgZnVuY3Rpb24gKCkge1xuXG4gICAgW1xuICAgICAgICBbXCIqLypcIixcIipcIiwnKiddLFxuICAgICAgICBbXCJ0ZXh0LypcIixcInRleHRcIiwnKiddLFxuICAgICAgICBbXCIqL3Rlc3RcIixcIipcIiwndGVzdCddLFxuICAgICAgICBbXCJpbWFnZS9wbmdcIiwgXCJpbWFnZVwiLCBcInBuZ1wiXSxcbiAgICAgICAgW1wiYXVkaW8vbXAzXCIsIFwiYXVkaW9cIiwgXCJtcDNcIl0sXG4gICAgICAgIFtcInZpZGVvL21wZWdcIiwgXCJ2aWRlb1wiLCBcIm1wZWdcIl0sXG4gICAgICAgIFtcInRleHQvcGxhaW5cIiwgXCJ0ZXh0XCIsIFwicGxhaW5cIl0sXG4gICAgICAgIFtcInRleHQvaHRtbFwiLCBcInRleHRcIiwgXCJodG1sXCJdLFxuICAgICAgICBbXCJ0ZXh0L2h0bWw7Y2hhcnNldD1VUy1BU0NJSVwiLCBcInRleHRcIiwgXCJodG1sXCJdLFxuICAgICAgICBbXCJ0ZXh0L2h0bWw7Y2hhcnNldD1cXFwiVVMtQVNDSUlcXFwiXCIsIFwidGV4dFwiLCBcImh0bWxcIl0sXG5cbiAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG5cbiAgICAgICAgaXQoJ3BhcnNlTWVkaWFUeXBlKCcgKyBhICsgJyknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IGQgPSBwYXJzZU1lZGlhVHlwZShhKTtcblxuICAgICAgICAgICAgZXhwZWN0KGQpLmlzLmluc3RhbmNlb2YoTWVkaWFUeXBlKTtcbiAgICAgICAgICAgIGV4cGVjdChkLnRvU3RyaW5nKCkpLnRvLmJlLmVxdWFsKGEpO1xuICAgICAgICAgICAgZXhwZWN0KGQudHlwZSkudG8uYmUuZXF1YWwoYik7XG4gICAgICAgICAgICBleHBlY3QoZC5zdWJ0eXBlKS50by5iZS5lcXVhbChjKTtcbiAgICAgICAgICAgIGV4cGVjdChkLnBhcmFtZXRlcikuaXMuaW5zdGFuY2VvZihNYXApXG4gICAgICAgIH0pXG5cbiAgICB9KTtcblxuICAgIFtcbiAgICAgICAgW1widmlkZW8vXCJdLFxuICAgICAgICBbXCJ0ZXh0XCJdLFxuICAgICAgICBbXCIvbXAzXCJdLFxuICAgICAgICBbXCJ0ZXh0L2h0bWw7Y2hhcnNldFVTLUFTQ0lJXCJdLFxuICAgICAgICBbXCJ0ZXh0L2h0bWw7Y2hhcnNldFxcXCJVUy1BU0NJSVxcXCJcIl0sXG5cbiAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgIGl0KCcnICsgYSArICcgc2hvdWxkIHRocm93IGV4Y2VwdGlvbicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgZXhwZWN0KCgpPT57cGFyc2VNZWRpYVR5cGUoYSl9KS50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICAgICAgXG4gICAgICAgIH0pXG5cbiAgICB9KTtcblxuXG59KTsiLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7VG9rZW5MaXN0fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL3Rva2VubGlzdC5tanNcIjtcblxuXG5kZXNjcmliZSgnVG9rZW5MaXN0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJy50b1N0cmluZygpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgdG9rZW5MaXN0ID0gbmV3IFRva2VuTGlzdCgpXG4gICAgICAgIGxldCByZXN1bHQgPSB0b2tlbkxpc3QudG9TdHJpbmcoKTtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBhIHN0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmJlLmEoJ3N0cmluZycpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2V0IGFuZCByZW1vdmUgcmV0dXJuIGEgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uYmUuYSgnc3RyaW5nJyk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJ2luaXQgd2l0aCBzdHJpbmcgaXRlcmFibGUnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3QoJyArIHR5cGVvZiBhICsgJykgdGhyb3cgVHlwZUVycm9yICcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0IHRva2VucyA9IFtcImFiY1wiLCBcImRlZlwiLCBcImdoaVwiXVxuICAgICAgICAgICAgbGV0IGxpc3QgPSBuZXcgVG9rZW5MaXN0KHRva2Vucyk7XG4gICAgICAgICAgICBleHBlY3QobGlzdC50b1N0cmluZygpKS5pcy5lcXVhbChcImFiYyBkZWYgZ2hpXCIpO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2luaXQgd2l0aCBpdGVyYWJsZSB3aXRob3V0IHN0cmluZyB2YWx1ZXMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3QoJyArIHR5cGVvZiBhICsgJykgdGhyb3cgVHlwZUVycm9yICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCB0b2tlbnMgPSBbXCJhYmNcIiwgNCwgXCJnaGlcIl1cbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBuZXcgVG9rZW5MaXN0KHRva2VucykpLnRvLnRocm93KFR5cGVFcnJvcik7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnaW5pdCB2YWx1ZXMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgLy8gY3VycmVudCwgZXhwZWN0ZWQsIHR5cGVycm9yXG4gICAgICAgICAgICBbJ3Rlc3QxJywgXCJ0ZXN0MVwiLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ3Rlc3QxIHRlc3QyJywgXCJ0ZXN0MSB0ZXN0MlwiLCBmYWxzZV0sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCBcIlwiLCBmYWxzZV0sXG4gICAgICAgICAgICBbbnVsbCwgdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFtwYXJzZUludChcImFcIiksIHVuZGVmaW5lZCwgdHJ1ZV0sIC8vIE5hTlxuICAgICAgICAgICAgWygpID0+IHtcbiAgICAgICAgICAgIH0sIHVuZGVmaW5lZCwgdHJ1ZV0sXG4gICAgICAgICAgICBbMiwgdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFt0cnVlLCB1bmRlZmluZWQsIHRydWVdLFxuICAgICAgICAgICAgWzQuNSwgdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFt7fSwgdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFtbXCIxXCIsIFwiMlwiLCBcIjNcIl0sICcxIDIgMycsIGZhbHNlXSwgLy8gaXRlcmFibGUgc3RyaW5nc1xuICAgICAgICAgICAgW1sxLCAyLCAzXSwgdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIGZhbHNlLCB0cnVlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaWYgKGMgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBpdCgnbmV3IFRva2VuTGlzdCgnICsgdHlwZW9mIGEgKyAnKSB0aHJvdyBUeXBlRXJyb3IgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoKCkgPT4gbmV3IFRva2VuTGlzdChhKSkudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3QoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHJldHVybiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QobmV3IFRva2VuTGlzdChhKS50b1N0cmluZygpKS5pcy5lcXVhbChiKVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdpdGVyYXRvciBwcm90b2NvbCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgbGlzdDtcbiAgICAgICAgaXQoJy5hZGQoJyArIFwic2Vjb25kXCIgKyAnKSBzaG91bGQgcmV0dXJuIFRva2VuTGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnRcIik7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5nZXRJdGVyYXRvcigpKS50by5iZS5hbignb2JqZWN0Jyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCcuYWRkKCcgKyBcInNlY29uZFwiICsgJykgc2hvdWxkIHJldHVybiBUb2tlbkxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0IGVuZFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChbLi4ubGlzdF0pLnRvLmJlLmFuKCdhcnJheScpO1xuICAgICAgICAgICAgZXhwZWN0KFsuLi5saXN0XSkudG8uYmUuYW4oJ2FycmF5JykudG8uaW5jbHVkZSgnc3RhcnQnKS50by5pbmNsdWRlKCdlbmQnKTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5lbnRyaWVzKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IGxpc3Q7XG4gICAgICAgIGl0KCcuZW50cmllcygpIHNob3VsZCByZXR1cm4gQXJyYXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0XCIpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QuZW50cmllcygpKS50by5iZS5hbignYXJyYXknKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJy5lbnRyaWVzKCkgc2hvdWxkIHJldHVybiBBcnJheScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnQgZW5kXCIpLmVudHJpZXMoKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0KS50by5iZS5hbignYXJyYXknKS50by5pbmNsdWRlKCdzdGFydCcpLnRvLmluY2x1ZGUoJ2VuZCcpO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLmZvckVhY2goKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgbGlzdDtcbiAgICAgICAgaXQoJy5mb3JFYWNoKCkgc2hvdWxkIGl0ZXJhdGUgb3ZlciB0b2tlbmxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcImFhYSBiYmIgY2NjIGRkZCBlZWUgZmZmXCIpO1xuXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gXCJcIlxuICAgICAgICAgICAgbGlzdC5mb3JFYWNoKChhKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IFwiIVwiICsgYSArIFwiIVwiO1xuICAgICAgICAgICAgICAgIGV4cGVjdChhKS50by5iZS5hbignc3RyaW5nJyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLmlzLmVxdWFsKFwiIWFhYSEhYmJiISFjY2MhIWRkZCEhZWVlISFmZmYhXCIpXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCcuZW50cmllcygpIHNob3VsZCByZXR1cm4gQXJyYXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0IGVuZFwiKS5lbnRyaWVzKCk7XG4gICAgICAgICAgICBleHBlY3QobGlzdCkudG8uYmUuYW4oJ2FycmF5JykudG8uaW5jbHVkZSgnc3RhcnQnKS50by5pbmNsdWRlKCdlbmQnKTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2NvbnRhaW5zIHZhbHVlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGxpc3RcbiAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3Qoc3RhcnQsIG1pZGRsZSBlbmQpIHNob3VsZCBjb250YWluIG1pZGRsZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnQgbWlkZGxlIGVuZFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LmNvbnRhaW5zKCdzdGFydCcpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QuY29udGFpbnMoJ21pZGRsZScpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QuY29udGFpbnMoJ2VuZCcpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QuY29udGFpbnMoWydlbmQnLCAnc3RhcnQnLCAnbWlkZGxlJ10pKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnbmV3IFRva2VuTGlzdChzdGFydCwgbWlkZGxlIGVuZCkgc2hvdWxkIG5vdCBjb250YWluIHh5eicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnQgbWlkZGxlIGVuZFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LmNvbnRhaW5zKCd4eXonKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5jb250YWlucyhbJ2VuZCcsICdzdGFydCcsICdtaWRkbGUnLCAneHl6J10pKS50by5iZS5mYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3Qoc3RhcnQsIG1pZGRsZSBlbmQpIHNob3VsZCBub3QgY29udGFpbiB1bmRlZmluZWQgbnVsbCBOYU4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0IG1pZGRsZSBlbmRcIik7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5jb250YWlucyh1bmRlZmluZWQpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LmNvbnRhaW5zKHBhcnNlSW50KFwiYVwiKSkpLnRvLmJlLmZhbHNlOyAvLyBOYU5cbiAgICAgICAgICAgIGV4cGVjdChsaXN0LmNvbnRhaW5zKG51bGwpKS50by5iZS5mYWxzZTsgLy8gTmFOXG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgndG9nZ2xlIHZhbHVlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGxpc3RcbiAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3Qoc3RhcnQgbWlkZGxlIGVuZCkudG9nZ2xlKG5ldy12YWx1ZSkgc2hvdWxkIGNvbnRhaW4gbmV3LXZhbHVlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydCBtaWRkbGUgZW5kXCIpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QudG9nZ2xlKCduZXctdmFsdWUnKS50b1N0cmluZygpKS5pcy5lcXVhbChcInN0YXJ0IG1pZGRsZSBlbmQgbmV3LXZhbHVlXCIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnbmV3IFRva2VuTGlzdChzdGFydCBtaWRkbGUgZW5kKS50b2dnbGUobWlkZGxlKSBzaG91bGQgbm90IGNvbnRhaW4gbWlkZGxlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydCBtaWRkbGUgZW5kXCIpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QudG9nZ2xlKCdtaWRkbGUnKS50b1N0cmluZygpKS5pcy5lcXVhbChcInN0YXJ0IGVuZFwiKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3QoKS50b2dnbGUoKSBzaG91bGQgLi4uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBUb2tlbkxpc3QoXCJhYmMgZGVmIGdoaVwiKS50b2dnbGUoXCJkZWYgeHl6XCIpLnRvU3RyaW5nKCkpLnRvLmVxdWFsKFwiYWJjIGdoaSB4eXpcIik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCduZXcgVG9rZW5MaXN0KCkudG9nZ2xlKCkgc2hvdWxkIC4uLicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgVG9rZW5MaXN0KFwiYWJjIGRlZiBnaGlcIikudG9nZ2xlKFtcImFiY1wiLCBcInh5elwiXSkudG9TdHJpbmcoKSkudG8uZXF1YWwoXCJkZWYgZ2hpIHh5elwiKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3QoKS50b2dnbGUoKSBzaG91bGQgLi4uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBUb2tlbkxpc3QoXCJhYmMgZGVmIGdoaVwiKS50b2dnbGUodW5kZWZpbmVkKS50b1N0cmluZygpKS50by5lcXVhbChcImFiYyBkZWYgZ2hpXCIpO1xuICAgICAgICB9KTtcblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnbWFuaXB1bGF0ZSB2YWx1ZXMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IGxpc3RcblxuICAgICAgICBpdCgncmVzdWx0IFRva2VuTGlzdChcIicgKyBcInN0YXJ0XCIgKyAnXCIpIHNob3VsZCBiZSBcIicgKyBcInN0YXJ0XCIgKyAnXCInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0XCIpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QudG9TdHJpbmcoKSkuaXMuZXF1YWwoXCJzdGFydFwiKVxuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnLmFkZCgnICsgXCJzZWNvbmRcIiArICcpIHNob3VsZCByZXR1cm4gVG9rZW5MaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LmFkZChcInNlY29uZFwiKSkudG8uYmUuYW4uaW5zdGFuY2VvZihUb2tlbkxpc3QpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnLmFkZCgnICsgXCJzZWNvbmRcIiArICcpLnRvU3RyaW5nKCkgc2hvdWxkIHJldHVybiBcInN0YXJ0IHNlY29uZFwiICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnRcIik7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5hZGQoXCJzZWNvbmRcIikudG9TdHJpbmcoKSkuaXMuZXF1YWwoXCJzdGFydCBzZWNvbmRcIik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCcuYWRkKCcgKyBcInNlY29uZCB0aGlyZFwiICsgJykudG9TdHJpbmcoKSBzaG91bGQgcmV0dXJuIFwic3RhcnQgc2Vjb25kIHRoaXJkXCIgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LmFkZChcInNlY29uZCB0aGlyZFwiKS50b1N0cmluZygpKS5pcy5lcXVhbChcInN0YXJ0IHNlY29uZCB0aGlyZFwiKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJy5hZGQoJyArIFwiW3NlY29uZCx0aGlyZF1cIiArICcpLnRvU3RyaW5nKCkgc2hvdWxkIHJldHVybiBcInN0YXJ0IHNlY29uZCB0aGlyZFwiICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnRcIik7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5hZGQoW1wic2Vjb25kXCIsIFwidGhpcmRcIl0pLnRvU3RyaW5nKCkpLmlzLmVxdWFsKFwic3RhcnQgc2Vjb25kIHRoaXJkXCIpO1xuICAgICAgICB9KTtcblxuXG4gICAgICAgIGl0KCcuY2xlYXIoKS50b1N0cmluZygpIHNob3VsZCBcIlwiICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnRcIik7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5hZGQoW1wic2Vjb25kXCIsIFwidGhpcmRcIl0pLmNsZWFyKCkudG9TdHJpbmcoKSkuaXMuZXF1YWwoXCJcIik7XG4gICAgICAgIH0pO1xuXG5cbiAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3QoXCJzdGFydCBzZWNvbmQgdGhpcmQgZW5kXCIpLnJlbW92ZSgnICsgXCJzZWNvbmRcIiArICcpIHNob3VsZCByZXR1cm4gVG9rZW5MaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydCBzZWNvbmQgdGhpcmQgZW5kXCIpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QucmVtb3ZlKFwic2Vjb25kXCIpKS50by5iZS5hbi5pbnN0YW5jZW9mKFRva2VuTGlzdCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCduZXcgVG9rZW5MaXN0KFwic3RhcnQgc2Vjb25kIHRoaXJkIGVuZFwiKS5yZW1vdmUoJyArIFwic2Vjb25kXCIgKyAnKS50b1N0cmluZygpIHNob3VsZCByZXR1cm4gXCJzdGFydCB0aGlyZCBlbmRcIiAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0IHNlY29uZCB0aGlyZCBlbmRcIik7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5yZW1vdmUoXCJzZWNvbmRcIikudG9TdHJpbmcoKSkuaXMuZXF1YWwoXCJzdGFydCB0aGlyZCBlbmRcIik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCduZXcgVG9rZW5MaXN0KFwic3RhcnQgc2Vjb25kIHRoaXJkIGVuZFwiKS5yZW1vdmUoJyArIFwic2Vjb25kIHRoaXJkXCIgKyAnKS50b1N0cmluZygpIHNob3VsZCByZXR1cm4gXCJzdGFydCBlbmRcIiAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0IHNlY29uZCB0aGlyZCBlbmRcIik7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5yZW1vdmUoXCJzZWNvbmQgdGhpcmRcIikudG9TdHJpbmcoKSkuaXMuZXF1YWwoXCJzdGFydCBlbmRcIik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCduZXcgVG9rZW5MaXN0KFwic3RhcnQgc2Vjb25kIHRoaXJkIGVuZFwiKS5yZW1vdmUoJyArIFwiW3NlY29uZCx0aGlyZF1cIiArICcpLnRvU3RyaW5nKCkgc2hvdWxkIHJldHVybiBcInN0YXJ0IGVuZFwiICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnQgc2Vjb25kIHRoaXJkIGVuZFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LnJlbW92ZShbXCJzZWNvbmRcIiwgXCJ0aGlyZFwiXSkudG9TdHJpbmcoKSkuaXMuZXF1YWwoXCJzdGFydCBlbmRcIik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCduZXcgVG9rZW5MaXN0KFwic3RhcnQgc2Vjb25kIHRoaXJkIGVuZFwiKS5yZXBsYWNlKHNlY29uZCwgeHl6KS50b1N0cmluZygpIHNob3VsZCByZXR1cm4gXCJzdGFydCB4eXogdGhpcmQgZW5kXCIgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydCBzZWNvbmQgdGhpcmQgZW5kXCIpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QucmVwbGFjZShcInNlY29uZFwiLCBcInh5elwiKSkudG8uYmUuaW5zdGFuY2VPZihUb2tlbkxpc3QpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QudG9TdHJpbmcoKSkuaXMuZXF1YWwoXCJzdGFydCB4eXogdGhpcmQgZW5kXCIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnbmV3IFRva2VuTGlzdChcInN0YXJ0IHNlY29uZCB0aGlyZCBlbmRcIikucmVwbGFjZShlbmQsIHh5eikudG9TdHJpbmcoKSBzaG91bGQgcmV0dXJuIFwic3RhcnQgc2Vjb25kIHRoaXJkIHh5elwiICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnQgc2Vjb25kIHRoaXJkIGVuZFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LnJlcGxhY2UoXCJlbmRcIiwgXCJ4eXpcIikpLnRvLmJlLmluc3RhbmNlT2YoVG9rZW5MaXN0KTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LnRvU3RyaW5nKCkpLmlzLmVxdWFsKFwic3RhcnQgc2Vjb25kIHRoaXJkIHh5elwiKTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG5cbn0pO1xuXG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7ZXh0ZW5kfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHtpc09iamVjdH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7T2JzZXJ2ZXJ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvb2JzZXJ2ZXIubWpzXCI7XG5cbmltcG9ydCB7UHJveHlPYnNlcnZlcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9wcm94eW9ic2VydmVyLm1qc1wiO1xuXG5kZXNjcmliZSgnUHJveHlPYnNlcnZlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCdjcmVhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgUHJveHlPYnNlcnZlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBvID0gbmV3IFByb3h5T2JzZXJ2ZXIoe30pO1xuICAgICAgICAgICAgZXh0ZW5kKG8uZ2V0U3ViamVjdCgpLCB7YTogNH0pO1xuICAgICAgICAgICAgZXhwZWN0KG8uZ2V0UmVhbFN1YmplY3QoKSkuaXMuZXFsKHthOiA0fSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3NldFN1YmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcnVuIG9ic2VydmVyJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGxldCBvID0gbmV3IFByb3h5T2JzZXJ2ZXIoe2E6IDF9KTtcbiAgICAgICAgICAgIGV4cGVjdChvLmdldFJlYWxTdWJqZWN0KCkpLmlzLmVxbCh7YTogMX0pO1xuICAgICAgICAgICAgbGV0IGNvdW50ZXIgPSAwO1xuICAgICAgICAgICAgby5hdHRhY2hPYnNlcnZlcihuZXcgT2JzZXJ2ZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChpc09iamVjdCh0aGlzKSAmJiB0aGlzIGluc3RhbmNlb2YgUHJveHlPYnNlcnZlcikge1xuICAgICAgICAgICAgICAgICAgICBjb3VudGVyKys7XG4gICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgb25lIGNoYW5nZSBhcyBub3RpZnkgcnVucyBsYXRlclxuICAgICAgICAgICAgICAgICAgICBpZiAoY291bnRlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoXCJjYWxsZWQgZm9yIGVycm9yXCIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoXCJ0aGlzIGlzIG5vdCBQcm94eU9ic2VydmVyXCIpKVxuICAgICAgICAgICAgfSkpXG5cbiAgICAgICAgICAgIG8uZ2V0U3ViamVjdCgpLmMgPSA0O1xuICAgICAgICAgICAgZXhwZWN0KG8uZ2V0UmVhbFN1YmplY3QoKSkuaXMuZXFsKHthOiAxLCBjOiA0fSk7XG5cbiAgICAgICAgICAgIG8uc2V0U3ViamVjdCh7YjogMn0pO1xuICAgICAgICAgICAgZXhwZWN0KG8uZ2V0UmVhbFN1YmplY3QoKSkuaXMuZXFsKHtiOiAyfSk7XG5cbiAgICAgICAgICAgIG8uZ2V0U3ViamVjdCgpLmQgPSA1O1xuICAgICAgICAgICAgZXhwZWN0KG8uZ2V0UmVhbFN1YmplY3QoKSkuaXMuZXFsKHtiOiAyLCBkOiA1fSk7XG5cblxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdjcmVhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgUHJveHlPYnNlcnZlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBvID0gbmV3IFByb3h5T2JzZXJ2ZXIoe30pO1xuICAgICAgICAgICAgZXhwZWN0KG8pLmlzLmluc3RhbmNlT2YoUHJveHlPYnNlcnZlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3Byb3h5IG9iamVjdHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdQcm94eSBvYmplY3RzIHNob3VsZCBub3QgYmUgcmVjb21taXR0ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgbyA9IG5ldyBQcm94eU9ic2VydmVyKHthOiB7YjogdHJ1ZX19KTtcbiAgICAgICAgICAgIG8uZ2V0U3ViamVjdCgpLmEuYiA9IG8uZ2V0U3ViamVjdCgpO1xuICAgICAgICAgICAgby5nZXRTdWJqZWN0KCkuYS5iLmEuYiA9IGZhbHNlO1xuICAgICAgICAgICAgLy9leHBlY3Qoby5nZXRTdWJqZWN0KCk9PT1wLmdldFN1YmplY3QoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnbm90aWZ5IG9ic2VydmVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIGluZm9ybSBvYnNlcnZlcicsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBsZXQgY291bnRlciA9IDA7XG4gICAgICAgICAgICAvLyB0aGUgbWV0aG9kIGlzIGNhbGxlZCB0d2ljZSwgb25jZSBmb3IgZGVmaW5lUHJvcGVydHkgYW5kIGZvciBzZXQgdHJhcFxuICAgICAgICAgICAgbGV0IG8gPSBuZXcgT2JzZXJ2ZXIoZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNPYmplY3QodGhpcykgJiYgdGhpcyBpbnN0YW5jZW9mIFByb3h5T2JzZXJ2ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgY291bnRlcisrO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY291bnRlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBkb25lKG5ldyBFcnJvcihcInRoaXMgaXMgbm90IFByb3h5T2JzZXJ2ZXJcIikpXG4gICAgICAgICAgICB9LCB0cnVlKVxuXG4gICAgICAgICAgICBsZXQgcmVhbFN1YmplY3QgPSB7XG4gICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICBiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGQ6IDVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBwID0gbmV3IFByb3h5T2JzZXJ2ZXIocmVhbFN1YmplY3QpO1xuICAgICAgICAgICAgZXhwZWN0KHApLmlzLmluc3RhbmNlT2YoUHJveHlPYnNlcnZlcik7XG4gICAgICAgICAgICBleHBlY3QocC5hdHRhY2hPYnNlcnZlcihvKSkuaXMuaW5zdGFuY2VPZihQcm94eU9ic2VydmVyKTtcblxuICAgICAgICAgICAgbGV0IHMgPSBwLmdldFN1YmplY3QoKTtcbiAgICAgICAgICAgIGxldCByID0gcC5nZXRSZWFsU3ViamVjdCgpO1xuXG4gICAgICAgICAgICBzLmEuZCA9IGZhbHNlO1xuICAgICAgICAgICAgcy5hLmIuZCA9IDI7XG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBAc2VlIGh0dHBzOi8vZ2l0bGFiLnNjaHVrYWkuY29tL29zcy9saWJyYXJpZXMvamF2YXNjcmlwdC9tb25zdGVyLy0vaXNzdWVzLzQzXG4gICAgICovXG4gICAgZGVzY3JpYmUoJ1JlZmxlY3QnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ2NoZWNrIFJlZmxlY3Quc2V0KCkgd2l0aCBTdWJqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IHI7XG5cbiAgICAgICAgICAgIGNvbnN0IG9iaiA9IChuZXcgUHJveHlPYnNlcnZlcih7fSkpLmdldFN1YmplY3QoKTtcblxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwieWVzIVwiLFxuICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBcIm5vXCJcbiAgICAgICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBvYmpbJ2RhdGEnXSA9IHZhbHVlXG4gICAgICAgICAgICAgICAgfSkudG8ubm90LnRocm93KCk7XG4gICAgICAgICAgICAgICAgLy9yID0gUmVmbGVjdC5zZXQob2JqLCAnZGF0YScsIHZhbHVlKVxuICAgICAgICAgICAgICAgIC8vZXhwZWN0KHIpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgfSk7XG5cblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3RoYXQnLCB7dGhhdDogJ2NoZWNrZWQxJ31dLFxuICAgICAgICAgICAgWyd0aGF0JywgbmV3IFByb3h5KHt0aGF0OiAnY2hlY2tlZDInfSwge30pXSxcbiAgICAgICAgICAgIFsndGhhdCcsIChuZXcgUHJveHlPYnNlcnZlcih7dGhhdDogJ2NoZWNrZWQzJ30pKS5nZXRSZWFsU3ViamVjdCgpXSxcbiAgICAgICAgICAgIFsndGhhdCcsIChuZXcgUHJveHlPYnNlcnZlcih7dGhhdDogJ2NoZWNrZWQ0J30pKS5nZXRTdWJqZWN0KCldXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQga2V5ID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgdGFyZ2V0ID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdjaGVjayBSZWZsZWN0LnNldCgnICsga2V5ICsgJywnICsgSlNPTi5zdHJpbmdpZnkodGFyZ2V0KSArICcpIHNob3VsZCB3cml0YWJsZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWU7XG5cbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIFwiMVwiLFxuICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LCBrZXkpWyd3cml0YWJsZSddLCAnd3JpdGFibGUgZm9yICcgKyB2YWx1ZSArICcgc2hvdWxkIHJldHVybiB0cnVlJykudG8uYmUudHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICBleHBlY3QoUmVmbGVjdC5zZXQodGFyZ2V0LCBrZXksIHZhbHVlKSwgJ3NldCBmb3IgJyArIHZhbHVlICsgJyBzaG91bGQgcmV0dXJuIHRydWUnKS50by5iZS50cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCwga2V5KVsnd3JpdGFibGUnXSwgJ3dyaXRhYmxlIGZvciAnICsgdmFsdWUgKyAnIHNob3VsZCByZXR1cm4gdHJ1ZScpLnRvLmJlLnRydWU7XG5cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ25vdGlmeSBvYnNlcnZlciB3aXRoIGNoYW5nZXMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IG9yaWdpbmFsLCBvYnNlcnZlciwgcHJveHk7XG5cbiAgICAgICAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIG9yaWdpbmFsID0ge307XG4gICAgICAgICAgICBwcm94eSA9IG5ldyBQcm94eU9ic2VydmVyKG9yaWdpbmFsKTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ2EnLCA0LCBKU09OLnN0cmluZ2lmeSh7YTogNH0pXSxcbiAgICAgICAgICAgIFsnYicsIDksIEpTT04uc3RyaW5naWZ5KHthOiA0LCBiOiA5fSldXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdzZXQga2V5ICcgKyBhICsgJyB2YWx1ZSAnICsgYiArICcgZXhwZWN0ICcgKyBjLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGNvdW50ZXIgPSAwO1xuICAgICAgICAgICAgICAgIG9ic2VydmVyID0gbmV3IE9ic2VydmVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY291bnRlcisrO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkodGhpcy5nZXRSZWFsU3ViamVjdCgpKSkuaXMuZXF1YWwoYyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb3VudGVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldGFjaE9ic2VydmVyKG9ic2VydmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICBwcm94eS5hdHRhY2hPYnNlcnZlcihvYnNlcnZlcilcbiAgICAgICAgICAgICAgICBsZXQgc3ViamVjdCA9IHByb3h5LmdldFN1YmplY3QoKVxuXG4gICAgICAgICAgICAgICAgc3ViamVjdFthXSA9IGI7XG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ25vdGlmeSBvYnNlcnZlciAnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gcHJvbWlzZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBwcm94eSA9IG5ldyBQcm94eU9ic2VydmVyKHt9KTtcbiAgICAgICAgICAgIGxldCBvYnNlcnZlciA9IG5ldyBPYnNlcnZlcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgcHJveHkuYXR0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpXG4gICAgICAgICAgICBleHBlY3QocHJveHkubm90aWZ5T2JzZXJ2ZXJzKCkpLmlzLmluc3RhbmNlT2YoUHJvbWlzZSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG59KVxuXG4iLCAiaW1wb3J0IHtcbiAgICBWZXJzaW9uXG59IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvdmVyc2lvbi5tanNcIlxuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5kZXNjcmliZSgnVmVyc2lvbicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCcuY29tcGFyZVRvKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWycxLjIuMycsICcxLjIuMycsIDBdLFxuICAgICAgICAgICAgWycxLjIuMicsICcxLjIuMycsIC0xXSxcbiAgICAgICAgICAgIFsnMicsICcyLjAuMCcsIDBdLFxuICAgICAgICAgICAgWycxLjIuNCcsICcxLjIuMycsIDFdXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgcmV0dXJuICcgKyBjICsgJyB3aGVuIHRoZSB2YWx1ZSAnICsgYSArICcgaXMgJyArIGIgKyAnJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChuZXcgVmVyc2lvbihhKS5jb21wYXJlVG8oYikpLnRvLmJlLmVxdWFsKGMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLnRvU3RyaW5nKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWycxLjEuMScsICcyLjMnLCAzLCAnMS4yLjMnXSxcbiAgICAgICAgICAgIFsnMS4yLjQnLCAnMS4yLjMnLCA1LCAnMS4xLjUnXVxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGQgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gJyArIGQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QobmV3IFZlcnNpb24oYSwgYiwgYykudG9TdHJpbmcoKSkudG8uYmUuZXF1YWwoZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSlcblxufSk7XG5cbiIsICJpbXBvcnQge2dldEdsb2JhbCwgZ2V0R2xvYmFsT2JqZWN0LCBnZXRHbG9iYWxGdW5jdGlvbn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5kZXNjcmliZSgnR2xvYmFsJywgZnVuY3Rpb24gKCkge1xuICAgIGRlc2NyaWJlKCdnZXRHbG9iYWwnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gZ2xvYmFsIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCB0ID0gdHlwZW9mIGdldEdsb2JhbCgpO1xuICAgICAgICAgICAgZXhwZWN0KHQpLnRvLmJlLmVxdWFsKCdvYmplY3QnKVxuICAgICAgICB9KTtcblxuICAgIH0pO1xuICAgIGRlc2NyaWJlKCdnZXRHbG9iYWxGdW5jdGlvbicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBnbG9iYWwgZnVuY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgdCA9IHR5cGVvZiBnZXRHbG9iYWxGdW5jdGlvbigncGFyc2VJbnQnKTtcbiAgICAgICAgICAgIGV4cGVjdCh0KS50by5iZS5lcXVhbCgnZnVuY3Rpb24nKVxuICAgICAgICB9KTtcblxuICAgIH0pO1xuICAgIGRlc2NyaWJlKCdnZXRHbG9iYWxPYmplY3QnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gZ2xvYmFsIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCB0ID0gdHlwZW9mIGdldEdsb2JhbE9iamVjdCgnSlNPTicpO1xuICAgICAgICAgICAgZXhwZWN0KHQpLnRvLmJlLmVxdWFsKCdvYmplY3QnKVxuICAgICAgICB9KTtcblxuICAgIH0pO1xufSk7XG5cbiIsICJpbXBvcnQge09ic2VydmVyTGlzdH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9vYnNlcnZlcmxpc3QubWpzXCI7XG5pbXBvcnQge09ic2VydmVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL29ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuZGVzY3JpYmUoJ09ic2VydmVyTGlzdCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCcuYXR0YWNoKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBPYnNlcnZlckxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgb2JzZXJ2ZXJMaXN0ID0gbmV3IE9ic2VydmVyTGlzdCgpXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gb2JzZXJ2ZXJMaXN0LmF0dGFjaChuZXcgT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50by5iZS5pbnN0YW5jZU9mKE9ic2VydmVyTGlzdClcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5kZXRhY2goKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIE9ic2VydmVyTGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBvYnNlcnZlckxpc3QgPSBuZXcgT2JzZXJ2ZXJMaXN0KClcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBvYnNlcnZlckxpc3QuZGV0YWNoKG5ldyBPYnNlcnZlcigoKSA9PiB7XG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmJlLmluc3RhbmNlT2YoT2JzZXJ2ZXJMaXN0KVxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLm5vdGlmeSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdFZhbHVlID0gXCJZZXMhXCI7XG4gICAgICAgIGxldCBvO1xuICAgICAgICBsZXQgb2JzZXJ2ZXJMaXN0O1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbyA9IG5ldyBPYnNlcnZlcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFZhbHVlXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgb2JzZXJ2ZXJMaXN0ID0gbmV3IE9ic2VydmVyTGlzdCgpXG4gICAgICAgICAgICBvYnNlcnZlckxpc3QuYXR0YWNoKG8pXG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBpbnN0YW5jZW9mIFByb21pc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3Qob2JzZXJ2ZXJMaXN0Lm5vdGlmeSh7fSkpLnRvLmJlLmluc3RhbmNlT2YoUHJvbWlzZSlcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gJyArIHJlc3VsdFZhbHVlLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBsZXQgb2JqID0ge31cblxuICAgICAgICAgICAgb2JzZXJ2ZXJMaXN0Lm5vdGlmeShvYmopLnRoZW4ociA9PiB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHIpLnRvLmJlLmFuKCdhcnJheScpLnRoYXQuaW5jbHVkZXMocmVzdWx0VmFsdWUpO1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUobmV3IEVycm9yKGUpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLmNvbnRhaW5zKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IG8xID0gbmV3IE9ic2VydmVyKCgpID0+IHtcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBvMiA9IG5ldyBPYnNlcnZlcigoKSA9PiB7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgbm90IGNvbnRhaW4gbzEgYW5kIG8yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IG9ic2VydmVyTGlzdCA9IG5ldyBPYnNlcnZlckxpc3QoKVxuXG4gICAgICAgICAgICBleHBlY3Qob2JzZXJ2ZXJMaXN0LmNvbnRhaW5zKG8xKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBleHBlY3Qob2JzZXJ2ZXJMaXN0LmNvbnRhaW5zKG8yKSkudG8uYmUuZmFsc2U7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgY29udGFpbiBvMiBhbmQgbm90IG8xJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IG9ic2VydmVyTGlzdCA9IG5ldyBPYnNlcnZlckxpc3QoKVxuICAgICAgICAgICAgb2JzZXJ2ZXJMaXN0LmF0dGFjaChvMilcbiAgICAgICAgICAgIGV4cGVjdChvYnNlcnZlckxpc3QuY29udGFpbnMobzEpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgIGV4cGVjdChvYnNlcnZlckxpc3QuY29udGFpbnMobzIpKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGNvbnRhaW4gbzEgYW5kIG5vdCBvMicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBvYnNlcnZlckxpc3QgPSBuZXcgT2JzZXJ2ZXJMaXN0KClcbiAgICAgICAgICAgIG9ic2VydmVyTGlzdC5hdHRhY2gobzEpXG4gICAgICAgICAgICBleHBlY3Qob2JzZXJ2ZXJMaXN0LmNvbnRhaW5zKG8xKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgIGV4cGVjdChvYnNlcnZlckxpc3QuY29udGFpbnMobzIpKS50by5iZS5mYWxzZTtcbiAgICAgICAgfSk7XG5cblxuICAgICAgICBpdCgnc2hvdWxkIGNvbnRhaW4gbzIgYW5kIG8xJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IG9ic2VydmVyTGlzdCA9IG5ldyBPYnNlcnZlckxpc3QoKVxuICAgICAgICAgICAgb2JzZXJ2ZXJMaXN0LmF0dGFjaChvMikuYXR0YWNoKG8xKVxuICAgICAgICAgICAgZXhwZWN0KG9ic2VydmVyTGlzdC5jb250YWlucyhvMSkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICBleHBlY3Qob2JzZXJ2ZXJMaXN0LmNvbnRhaW5zKG8yKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG5cbn0pO1xuXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge2VxdWlwV2l0aEludGVybmFsfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL2ludGVybmFsLm1qc1wiO1xuaW1wb3J0IHtPYnNlcnZlcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9vYnNlcnZlci5tanNcIjtcblxuY2xhc3MgU29tZVJhbmRvbUNsYXNzMSBleHRlbmRzIE9iamVjdCB7XG5cbiAgICBkb2l0KCkge1xuICAgICAgICByZXR1cm4gXCJkb25lXCI7XG4gICAgfVxufVxuXG5jbGFzcyBTb21lUmFuZG9tQ2xhc3MyIGV4dGVuZHMgT2JqZWN0IHtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICBlcXVpcFdpdGhJbnRlcm5hbC5jYWxsKHRoaXMpO1xuICAgIH1cblxuICAgIGdldCBkZWZhdWx0SW50ZXJuYWwoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0ZXN0OiBcInRlc3RcIlxuICAgICAgICB9XG4gICAgfVxuXG59XG5cbmRlc2NyaWJlKCdCYXNlIGluamVjdCB3aXRoIG9wdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnbmV3IFNvbWVSYW5kb21DbGFzcycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnaXMgaW5zdGFuY2Ugb2YgU29tZVJhbmRvbUNsYXNzMScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgU29tZVJhbmRvbUNsYXNzMikubm90LnRvLmJlLmluc3RhbmNlT2YoU29tZVJhbmRvbUNsYXNzMSk7XG4gICAgICAgICAgICBleHBlY3QobmV3IFNvbWVSYW5kb21DbGFzczIpLnRvLmJlLmluc3RhbmNlT2YoU29tZVJhbmRvbUNsYXNzMik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdpcyBpbnN0YW5jZSBvZiBTb21lUmFuZG9tQ2xhc3MyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBTb21lUmFuZG9tQ2xhc3MxKS50by5iZS5pbnN0YW5jZU9mKFNvbWVSYW5kb21DbGFzczEpO1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBTb21lUmFuZG9tQ2xhc3MxKS5ub3QudG8uYmUuaW5zdGFuY2VPZihTb21lUmFuZG9tQ2xhc3MyKTtcbiAgICAgICAgfSk7XG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ0V4dGVuZHMgU29tZVJhbmRvbUNsYXNzIHdpdGggaW50ZXJuYWxzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdhdHRhY2ggYW5kIG5vdGlmeSBpbnRlcm5hbCBvYnNlcnZlcicsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gbmV3IFNvbWVSYW5kb21DbGFzczI7XG4gICAgICAgICAgICBjLmF0dGFjaEludGVybmFsT2JzZXJ2ZXIobmV3IE9ic2VydmVyKCgpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgIGMuc2V0SW50ZXJuYWwoXCJ0ZXN0XCIsIFwidGVzdFwiKTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnYXR0YWNoIGFuZCByZW1vdmUgaW50ZXJuYWwgb2JzZXJ2ZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gbmV3IFNvbWVSYW5kb21DbGFzczI7XG5cblxuICAgICAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgT2JzZXJ2ZXIoKCkgPT4ge1xuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZXhwZWN0KGMuY29udGFpbnNJbnRlcm5hbE9ic2VydmVyKG9ic2VydmVyKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBjLmF0dGFjaEludGVybmFsT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuICAgICAgICAgICAgZXhwZWN0KGMuY29udGFpbnNJbnRlcm5hbE9ic2VydmVyKG9ic2VydmVyKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgIGMuZGV0YWNoSW50ZXJuYWxPYnNlcnZlcihvYnNlcnZlcik7XG4gICAgICAgICAgICBleHBlY3QoYy5jb250YWluc0ludGVybmFsT2JzZXJ2ZXIob2JzZXJ2ZXIpKS50by5iZS5mYWxzZTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBpdChcImdldEludGVybmFsIGFuZCBzZXRJbnRlcm5hbFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gbmV3IFNvbWVSYW5kb21DbGFzczI7XG4gICAgICAgICAgICBleHBlY3QoYy5zZXRJbnRlcm5hbChcInRlc3RcIiwgXCJ5ZWFoXCIpKS50by5iZS5pbnN0YW5jZU9mKFNvbWVSYW5kb21DbGFzczIpO1xuICAgICAgICAgICAgZXhwZWN0KGMuZ2V0SW50ZXJuYWwoXCJ0ZXN0XCIpKS50by5iZS5lcXVhbChcInllYWhcIik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KFwiZGVhbCB3aXRoIGRlZmF1bHQgdmFsdWVzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IHRlc3RDbGFzcyA9IGNsYXNzIGV4dGVuZHMgT2JqZWN0IHtcbiAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICAgICAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgZXF1aXBXaXRoSW50ZXJuYWwuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBnZXQgaW50ZXJuYWxEZWZhdWx0cygpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Q6IFwieHl6XCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICBjb25zdCBjID0gbmV3IHRlc3RDbGFzcztcbiAgICAgICAgICAgIGV4cGVjdChjLmdldEludGVybmFsKFwidGVzdFwiKSkudG8uYmUuZXF1YWwoXCJ4eXpcIik7XG4gICAgICAgICAgICBleHBlY3QoYy5nZXRJbnRlcm5hbChcInRlc3QyXCIsIFwiYWJjXCIpKS50by5iZS5lcXVhbChcImFiY1wiKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoXCJkZWFsIHdpdGggZGVmYXVsdHMgZnJvbSBkZWZhdWx0c1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCB0ZXN0Q2xhc3MgPSBjbGFzcyBleHRlbmRzIE9iamVjdCB7XG4gICAgICAgICAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1cGVyKCk7XG4gICAgICAgICAgICAgICAgICAgIGVxdWlwV2l0aEludGVybmFsLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZ2V0IGludGVybmFsRGVmYXVsdHMoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXN0OiBcInh5elwiXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHRlc3RDbGFzczIgPSBjbGFzcyBleHRlbmRzIHRlc3RDbGFzcyB7XG4gICAgICAgICAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1cGVyKCk7XG4gICAgICAgICAgICAgICAgICAgIGVxdWlwV2l0aEludGVybmFsLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZ2V0IGludGVybmFsRGVmYXVsdHMoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5pbnRlcm5hbERlZmF1bHRzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXN0MjogXCJhYmNcIlxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgYyA9IG5ldyB0ZXN0Q2xhc3MyO1xuICAgICAgICAgICAgZXhwZWN0KGMuZ2V0SW50ZXJuYWwoXCJ0ZXN0XCIpKS50by5iZS5lcXVhbChcInh5elwiKTtcbiAgICAgICAgICAgIGV4cGVjdChjLmdldEludGVybmFsKFwidGVzdDJcIikpLnRvLmJlLmVxdWFsKFwiYWJjXCIpO1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIGl0KFwic2V0IG11bHRpcGxlIHZhbHVlc1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gbmV3IFNvbWVSYW5kb21DbGFzczI7XG4gICAgICAgICAgICBleHBlY3QoYy5zZXRJbnRlcm5hbHMoe1xuICAgICAgICAgICAgICAgIHRlc3Q6IFwieWVhaFwiLFxuICAgICAgICAgICAgICAgIHRlc3QyOiBcInllYWgyXCJcbiAgICAgICAgICAgIH0pKS50by5iZS5pbnN0YW5jZU9mKFNvbWVSYW5kb21DbGFzczIpO1xuICAgICAgICAgICAgZXhwZWN0KGMuZ2V0SW50ZXJuYWwoXCJ0ZXN0XCIpKS50by5iZS5lcXVhbChcInllYWhcIik7XG4gICAgICAgICAgICBleHBlY3QoYy5nZXRJbnRlcm5hbChcInRlc3QyXCIpKS50by5iZS5lcXVhbChcInllYWgyXCIpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBjLnNldEludGVybmFscyh7XG4gICAgICAgICAgICAgICAgdGVzdDI6IFwieWVhaDItbmV3XCIsXG4gICAgICAgICAgICAgICAgdGVzdDM6IFwieWVhaDNcIlxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGV4cGVjdChjLmdldEludGVybmFsKFwidGVzdFwiKSkudG8uYmUuZXF1YWwoXCJ5ZWFoXCIpO1xuICAgICAgICAgICAgZXhwZWN0KGMuZ2V0SW50ZXJuYWwoXCJ0ZXN0MlwiKSkudG8uYmUuZXF1YWwoXCJ5ZWFoMi1uZXdcIik7XG4gICAgICAgICAgICBleHBlY3QoYy5nZXRJbnRlcm5hbChcInRlc3QzXCIpKS50by5iZS5lcXVhbChcInllYWgzXCIpO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge09ic2VydmFibGVRdWV1ZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9vYnNlcnZhYmxlcXVldWUubWpzXCI7XG5pbXBvcnQge09ic2VydmVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL29ic2VydmVyLm1qc1wiO1xuXG5kZXNjcmliZSgnT2JzZXJ2YWJsZVF1ZXVlJywgZnVuY3Rpb24gKCkge1xuICAgIGRlc2NyaWJlKCdPYnNlcnZlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIG5vdGlmeScsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBsZXQgcXVldWUgPSBuZXcgT2JzZXJ2YWJsZVF1ZXVlO1xuICAgICAgICAgICAgbGV0IG8gPSBuZXcgT2JzZXJ2ZXIoKHEpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcXVldWUuYXR0YWNoT2JzZXJ2ZXIobyk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuYWRkKCdhJykpLnRvLmJlLmluc3RhbmNlT2YoT2JzZXJ2YWJsZVF1ZXVlKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59KSIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge3BhcnNlRGF0YVVSTH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9kYXRhdXJsLm1qc1wiO1xuXG5kZXNjcmliZSgnRGF0YXVybCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIFtcbiAgICAgICAgW1wiIGRhdGE6dGV4dC9odG1sLCUzQ2gxJTNFSGVsbG8lMkMlMjBXb3JsZCElM0MlMkZoMSUzRVwiXSxcbiAgICAgICAgW1wiZGF0YTp0ZXh0L2h0bWw7Y2hhcnNldD1VUy1BU0NJSSwlM0NoMSUzRUhlbGxvISUzQyUyRmgxJTNFXCJdLFxuICAgICAgICBbXCJkYXRhOixBJTIwYnJpZWYlMjBub3RlXCIsICdkYXRhOnRleHQvcGxhaW47Y2hhcnNldD1VUy1BU0NJSSxBJTIwYnJpZWYlMjBub3RlJ10sXG4gICAgICAgIFtcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUFRTUFBQUFsUFcwaUFBQUFCbEJNVkVVQUFBRC8vLytsMlovZEFBQUFNMGxFUVZSNG5HUDQvNS9oLzErRy81OFpEckF6M0QvTWNIOHl3ODNORERlTkdlNFVnOUM5end6M2dWTE1EQS9BNlA5L0FGR0dGeWpPWFp0UUFBQUFBRWxGVGtTdVFtQ0NcIl0sXG4gICAgICAgIFtcIiBkYXRhOixIZWxsbyUyQyUyMFdvcmxkIVwiLCAnZGF0YTp0ZXh0L3BsYWluO2NoYXJzZXQ9VVMtQVNDSUksSGVsbG8lMkMlMjBXb3JsZCEnXSxcbiAgICAgICAgW1wiICAgZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBZ0FBQUFJQkFNQUFBQTJJYU80QUFBQUZWQk1WRVhrNU9UbjUrZnQ3ZTMxOWZYMjl2YjUrZm4vLy8rK0dVbVZBQUFBTFVsRVFWUUlIV05JQ25ZTFpuQUxUZ3BtTUdZSUZXWUlaVEEyWkZBelRURmxTREZWTXdWeVFobUF3c1lNQUtEYUJ5MGF4WC9pQUFBQUFFbEZUa1N1UW1DQyAgIFwiXSxcbiAgICAgICAgW1wiIGRhdGE6LEhlbGxvIFdvcmxkIVwiLCAnZGF0YTp0ZXh0L3BsYWluO2NoYXJzZXQ9VVMtQVNDSUksSGVsbG8lMjBXb3JsZCEnXSxcbiAgICAgICAgW1wiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBZ0FBQUFJQkFNQUFBQTJJYU80QUFBQUZWQk1WRVhrNU9UbjUrZnQ3ZTMxOWZYMjl2YjUrZm4vLy8rK0dVbVZBQUFBTFVsRVFWUUlIV05JQ25ZTFpuQUxUZ3BtTUdZSUZXWUlaVEEyWkZBelRURmxTREZWTXdWeVFobUF3c1lNQUtEYUJ5MGF4WC9pQUFBQUFFbEZUa1N1UW1DQ1wiXSxcbiAgICAgICAgW1wiIGRhdGE6dGV4dC9wbGFpbjtiYXNlNjQsU0dWc2JHOHNJRmR2Y214a0lRJTNEJTNEXCJdXG5cblxuICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgaWYgKGIgPT09IHVuZGVmaW5lZCkgYiA9IGEudHJpbSgpO1xuXG5cbiAgICAgICAgaXQoJ3BhcnNlRGF0YVVSTCgnICsgYSArICcpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBleHBlY3QocGFyc2VEYXRhVVJMKGEpLnRvU3RyaW5nKCkpLnRvLmJlLmVxdWFsKGIpO1xuICAgICAgICB9KVxuXG4gICAgfSk7XG5cbiAgICBbXG4gICAgICAgIFtcImRhdGF4YmFzZTY0XCJdLFxuICAgICAgICBbXCJkYXRhOkhlbGxvV29ybGRcIl0sXG4gICAgICAgIFtcImRhdGE6dGV4dC9odG1sO2NoYXJzZXQ9LCUzQ2gxJTNFSGVsbG8hJTNDJTJGaDElM0VcIl0sXG4gICAgICAgIFtcImRhdGE6dGV4dC9odG1sO2NoYXJzZXQsJTNDaDElM0VIZWxsbyElM0MlMkZoMSUzRVwiLCBcImRhdGE6YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQVFNQUFBQWxQVzBpQUFBQUJsQk1WRVVBQUFELy8vK2wyWi9kQUFBQU0wbEVRVlI0bkdQNC81L2gvMStHLzU4WkRyQXozRC9NY0g4eXc4M05ERGVOR2U0VWc5Qzl6d3ozZ1ZMTURBL0E2UDkvQUZHR0Z5ak9YWnRRQUFBQUFFbEZUa1N1UW1DQ1wiXSxcbiAgICAgICAgW1wiXCJdLFxuICAgICAgICBbXCJodHRwOi8vd2lraXBlZGlhLm9yZ1wiXSxcbiAgICAgICAgW1wiYmFzZTY0XCJdLFxuICAgICAgICBbXCJpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUFRTUFBQUFsUFcwaUFBQUFCbEJNVkVVQUFBRC8vLytsMlovZEFBQUFNMGxFUVZSNG5HUDQvNS9oLzErRy81OFpEckF6M0QvTWNIOHl3ODNORERlTkdlNFVnOUM5end6M2dWTE1EQS9BNlA5L0FGR0dGeWpPWFp0UUFBQUFBRWxGVGtTdVFtQ0NcIl1cblxuICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG5cblxuICAgICAgICBpdCgnc2hvdWxkIHRocm93IGV4Y2VwdGlvbiBwYXJzZURhdGFVUkwoJyArIGEgKyAnKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgZXhwZWN0KCgpID0+IHBhcnNlRGF0YVVSTChhKSkudGhyb3coVHlwZUVycm9yKVxuICAgICAgICB9KVxuXG4gICAgfSk7XG5cblxufSk7IiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4vdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IHRvQmluYXJ5LCBmcm9tQmluYXJ5IH07XG5cbi8qKlxuICogWW91IGNhbiBjYWxsIHRoZSBmdW5jdGlvbiB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBNb25zdGVyLlR5cGVzLnRvQmluYXJ5KClgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBiaW5hcnlcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjE4LjBcbiAqL1xuZnVuY3Rpb24gdG9CaW5hcnkoc3RyaW5nKSB7XG5cdGNvbnN0IGNvZGVVbml0cyA9IG5ldyBVaW50MTZBcnJheSh2YWxpZGF0ZVN0cmluZyhzdHJpbmcpLmxlbmd0aCk7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgY29kZVVuaXRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29kZVVuaXRzW2ldID0gc3RyaW5nLmNoYXJDb2RlQXQoaSk7XG5cdH1cblxuXHRjb25zdCBjaGFyQ29kZXMgPSBuZXcgVWludDhBcnJheShjb2RlVW5pdHMuYnVmZmVyKTtcblx0bGV0IHJlc3VsdCA9IFwiXCI7XG5cblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjaGFyQ29kZXMuYnl0ZUxlbmd0aDsgaSsrKSB7XG5cdFx0cmVzdWx0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hhckNvZGVzW2ldKTtcblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogWW91IGNhbiBjYWxsIHRoZSBmdW5jdGlvbiB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBNb25zdGVyLlR5cGVzLmZyb21CaW5hcnkoKWAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGJpbmFyeVxuICogQHJldHVybiB7U3RyaW5nfVxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTguMFxuICovXG5mdW5jdGlvbiBmcm9tQmluYXJ5KGJpbmFyeSkge1xuXHRjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KHZhbGlkYXRlU3RyaW5nKGJpbmFyeSkubGVuZ3RoKTtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKykge1xuXHRcdGJ5dGVzW2ldID0gYmluYXJ5LmNoYXJDb2RlQXQoaSk7XG5cdH1cblx0Y29uc3QgY2hhckNvZGVzID0gbmV3IFVpbnQxNkFycmF5KGJ5dGVzLmJ1ZmZlcik7XG5cdGxldCByZXN1bHQgPSBcIlwiO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IGNoYXJDb2Rlcy5sZW5ndGg7IGkrKykge1xuXHRcdHJlc3VsdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXJDb2Rlc1tpXSk7XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge2Zyb21CaW5hcnksIHRvQmluYXJ5fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL2JpbmFyeS5tanNcIjtcblxuZGVzY3JpYmUoJ0JpbmFyeScsIGZ1bmN0aW9uICgpIHtcblxuICAgIFtcbiAgICAgICAgWydhJywgJ2FcXHUwMDAwJ10sXG4gICAgICAgIFsnXHUyNjM5JywgJzkmJ10sXG4gICAgICAgIFsnSVx1MDBGMXRcdTAwRUJyblx1MDBFMnRpXHUwMEY0blx1MDBFMGxpelx1MDBFNnRpXHUwMEY4bicsICdJXFx1MDAwMFx1MDBGMVxcdTAwMDB0XFx1MDAwMFx1MDBFQlxcdTAwMDByXFx1MDAwMG5cXHUwMDAwXHUwMEUyXFx1MDAwMHRcXHUwMDAwaVxcdTAwMDBcdTAwRjRcXHUwMDAwblxcdTAwMDBcdTAwRTBcXHUwMDAwbFxcdTAwMDBpXFx1MDAwMHpcXHUwMDAwXHUwMEU2XFx1MDAwMHRcXHUwMDAwaVxcdTAwMDBcdTAwRjhcXHUwMDAwblxcdTAwMDAnXVxuXG4gICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICBpdCgnZnJvbUJpbmFyeSh0b0JpbmFyeSgnICsgYSArICcpKSBzaG91bGQgd29yaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCByID0gdG9CaW5hcnkoYSk7XG4gICAgICAgICAgICBleHBlY3QocikudG8uYmUuZXF1YWwoYik7XG4gICAgICAgICAgICBleHBlY3QoZnJvbUJpbmFyeShyKSkudG8uYmUuZXF1YWwoYSk7XG4gICAgICAgIH0pXG5cbiAgICB9KTtcblxuXG59KTsiLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuaW1wb3J0IHtPYnNlcnZlcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9vYnNlcnZlci5tanNcIjtcblxuXG5kZXNjcmliZSgnT2JzZXJ2ZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBsZXQgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgfTtcblxuICAgIGxldCBvYnNlcnZlciA9IG5ldyBPYnNlcnZlcihjYWxsYmFjaylcblxuICAgIGRlc2NyaWJlKCcuYWRkVGFnKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MSddLFxuICAgICAgICAgICAgWyd0ZXN0MiddLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ2FkZFRhZygnICsgYSArICcpIHNob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBPYnNlcnZlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3Qob2JzZXJ2ZXIuYWRkVGFnKGEpKS5pcy5pbnN0YW5jZU9mKE9ic2VydmVyKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLnJlbW92ZVRhZygpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnXSxcbiAgICAgICAgICAgIFsndGVzdDInXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdyZW1vdmVUYWcoJyArIGEgKyAnKSBzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgT2JzZXJ2ZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG9ic2VydmVyLnJlbW92ZVRhZyhhKSkuaXMuaW5zdGFuY2VPZihPYnNlcnZlcilcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5oYXNUYWcoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgdHJ1ZV0sXG4gICAgICAgICAgICBbJ3Rlc3QyJywgdHJ1ZV0sXG4gICAgICAgICAgICBbJ3Rlc3QzJywgZmFsc2VdLFxuICAgICAgICAgICAgWyd0ZXN0NCcsIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCB0ZW1wT2JzZXJ2ZXIgPSBuZXcgT2JzZXJ2ZXIoY2FsbGJhY2spXG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnb2JzZXJ2ZXIuaGFzdFRhZygnICsgYSArICcpIHNob3VsZCByZXR1cm4gJyArIGIsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGlmIChiID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRlbXBPYnNlcnZlci5hZGRUYWcoYSlcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHRlbXBPYnNlcnZlci5oYXNUYWcoYSkpLmlzLmJlLnRydWVcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QodGVtcE9ic2VydmVyLmhhc1RhZyhhKSkuaXMuYmUuZmFsc2VcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcudXBkYXRlKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IG9iaiA9IHt9XG4gICAgICAgIGl0KCdvYnNlcnZlci51cGRhdGUoJyArIG9iaiArICcpIGlzICcgKyAxICsgMyArIDYsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGxldCB0ZW1wT2JzZXJ2ZXIgPSBuZXcgT2JzZXJ2ZXIoZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYSArIGIgKyBjXG4gICAgICAgICAgICB9LCAxLCAzLCA2KVxuXG5cbiAgICAgICAgICAgIHRlbXBPYnNlcnZlci51cGRhdGUob2JqKS50aGVuKGEgPT4ge1xuICAgICAgICAgICAgICAgIGV4cGVjdChhKS5pcy5lcXVhbCgxICsgMyArIDYpXG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgncnVuIGZ1bmN0aW9uIC51cGRhdGUoKSBzZXZlcmFsIHRpbWVzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBvYmogPSB7fVxuICAgICAgICBpdCgnb2JzZXJ2ZXIudXBkYXRlKCcgKyBvYmogKyAnKSBpcyAnICsgMSArIDMgKyA2LCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBsZXQgY291bnRlciA9IDA7XG4gICAgICAgICAgICBsZXQgdGVtcE9ic2VydmVyID0gbmV3IE9ic2VydmVyKGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICAgICAgICAgICAgY291bnRlcisrO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgdGVtcE9ic2VydmVyLnVwZGF0ZShvYmopO1xuICAgICAgICAgICAgdGVtcE9ic2VydmVyLnVwZGF0ZShvYmopO1xuICAgICAgICAgICAgdGVtcE9ic2VydmVyLnVwZGF0ZShvYmopO1xuICAgICAgICAgICAgdGVtcE9ic2VydmVyLnVwZGF0ZShvYmopO1xuICAgICAgICAgICAgdGVtcE9ic2VydmVyLnVwZGF0ZShvYmopLnRoZW4oXyA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5nZXRUYWdzKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgW1sndGVzdDEnLCAndGVzdDInLCAndGVzdDMnLCAndGVzdDQnXSwgNF0sXG4gICAgICAgICAgICBbWyd0ZXN0MScsICd0ZXN0MScsICd0ZXN0MycsICd0ZXN0NCddLCAzXSwgLy8gZG91YmxlIHRlc3QxIChzZXQgaXMgdW5pcXVldWUpXG4gICAgICAgICAgICBbWyd0ZXN0MScsICd0ZXN0MScsICd0ZXN0MScsICd0ZXN0NCddLCAyXSwgLy8gbXVsdGlwbGUgdGVzdDEgKHNldCBpcyB1bmlxdWV1ZSlcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCB0ZW1wT2JzZXJ2ZXIgPSBuZXcgT2JzZXJ2ZXIoY2FsbGJhY2spXG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbWF4ID0gYS5sZW5ndGg7IGkgPCBtYXg7IGkrKykge1xuICAgICAgICAgICAgICAgIHRlbXBPYnNlcnZlci5hZGRUYWcoYVtpXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGl0KCdvYnNlcnZlci5nZXRUYWdzKCcgKyBhICsgJykgaXMgYXJyYXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHRlbXBPYnNlcnZlci5nZXRUYWdzKCkpLnRvLmJlLmFuKCdhcnJheScpXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ29ic2VydmVyLmdldFRhZ3MoJyArIGEgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBiICsgXCIgdGFnc1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHRlbXBPYnNlcnZlci5nZXRUYWdzKCkubGVuZ3RoKS5pcy5lcXVhbChiKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG59KTtcblxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4vdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IGVzY2FwZVN0cmluZyB9O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcHJlZml4ZXMgYWxsIHNwZWNpYWwgY2hhcmFjdGVycyB0aGF0IG1heSBhcHBlYXIgaW4gYSByZWdleCB3aXRoIGEgc2xhc2guXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI2LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuICovXG5mdW5jdGlvbiBlc2NhcGVTdHJpbmcodmFsdWUpIHtcblx0cmV0dXJuIHZhbGlkYXRlU3RyaW5nKHZhbHVlKVxuXHRcdC5yZXBsYWNlKC9bfFxcXFx7fSgpW1xcXV4kKyo/Ll0vZywgXCJcXFxcJCZcIilcblx0XHQucmVwbGFjZSgvLS9nLCBcIlxcXFx4MmRcIik7XG59XG4iLCAiXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtlc2NhcGVTdHJpbmd9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvcmVnZXgubWpzXCJcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxuXG5kZXNjcmliZSgnZXNjYXBlU3RyaW5nJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgbGV0IHByb21pc2VzID0gW11cbiAgICAgICAgcHJvbWlzZXMucHVzaChpbml0SlNET00oKSk7XG4gICAgICAgIGlmKCFnbG9iYWxUaGlzWydjcnlwdG8nXSkge1xuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChpbXBvcnQoXCJAcGVjdWxpYXIvd2ViY3J5cHRvXCIpLnRoZW4obSA9PiB7XG4gICAgICAgICAgICAgICAgZ2xvYmFsVGhpc1snY3J5cHRvJ10gPSBuZXcgbS5DcnlwdG8oKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0pKVxuICAgICAgICB9XG5cblxuICAgICAgICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKClcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcbiAgICBcbiAgICBbXG4gICAgICAgIFsndGVzdDEnLCAndGVzdDEnXSxcbiAgICAgICAgWyckeycsICdcXFxcJFxcXFx7J10sXG4gICAgICAgIFsnaTE4bnsnLCAnaTE4blxcXFx7J10sXG4gICAgICAgIFsnLy8nLCAnLy8nXSxcbiAgICAgICAgWydcXFxcJywgJ1xcXFxcXFxcJ10sXG4gICAgICAgXG4gICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICBpdCgnZXNjYXBlU3RyaW5nKCcgKyBhICsgJykgc2hvdWxkIHJldHVybiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KGVzY2FwZVN0cmluZyhhKSkuaXMuZXF1YWwoYilcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxufSk7XG5cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5kZXNjcmliZSgnUmFuZG9tSUQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBjbGFzcyBSYW5kb21JRCB7fVxuICAgIFxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgIGxldCBwcm9taXNlcyA9IFtdXG4gICAgICAgIGlmKCFnbG9iYWxUaGlzWydjcnlwdG8nXSkge1xuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChpbXBvcnQoXCJAcGVjdWxpYXIvd2ViY3J5cHRvXCIpLnRoZW4obSA9PiB7XG4gICAgICAgICAgICAgICAgZ2xvYmFsVGhpc1snY3J5cHRvJ10gPSBuZXcgbS5DcnlwdG8oKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0pKVxuICAgICAgICB9XG5cbiAgICAgICAgcHJvbWlzZXMucHVzaChpbXBvcnQoXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvcmFuZG9taWQubWpzXCIpLnRoZW4obSA9PiB7XG4gICAgICAgICAgICBSYW5kb21JRCA9IG0uUmFuZG9tSUQ7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSkpXG5cbiAgICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pO1xuXG4gICAgfSk7ICAgIFxuICAgIFxuICAgIGRlc2NyaWJlKCcudG9TdHJpbmcoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGlkID0gbmV3IFJhbmRvbUlEKClcbiAgICAgICAgbGV0IHJlc3VsdCA9IGlkLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBzdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS5pcy5hKCdzdHJpbmcnKVxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG59KTtcblxuIiwgImltcG9ydCB7SUR9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvaWQubWpzXCI7XG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5kZXNjcmliZSgnSUQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBsZXQgcHJvbWlzZXMgPSBbXVxuICAgICAgICBpZighZ2xvYmFsVGhpc1snY3J5cHRvJ10pIHtcbiAgICAgICAgICAgIHByb21pc2VzLnB1c2goaW1wb3J0KFwiQHBlY3VsaWFyL3dlYmNyeXB0b1wiKS50aGVuKG0gPT4ge1xuICAgICAgICAgICAgICAgIGdsb2JhbFRoaXNbJ2NyeXB0byddID0gbmV3IG0uQ3J5cHRvKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9KSlcbiAgICAgICAgfVxuXG5cbiAgICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pO1xuXG4gICAgfSk7ICAgIFxuICAgIFxuICAgIGRlc2NyaWJlKCcudG9TdHJpbmcoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGlkID0gbmV3IElEKClcbiAgICAgICAgbGV0IHJlc3VsdCA9IGlkLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBzdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS5pcy5hKCdzdHJpbmcnKVxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBJRCgndGV4dDE0MjVpZCcpLnRvU3RyaW5nKCkpLmlzLmVxdWFsKCd0ZXh0MTQyNWlkMScpXG4gICAgICAgICAgICBleHBlY3QobmV3IElEKCd0ZXh0MTQyNWlkJykudG9TdHJpbmcoKSkuaXMuZXF1YWwoJ3RleHQxNDI1aWQyJylcbiAgICAgICAgICAgIGV4cGVjdChuZXcgSUQoJ3RleHQxNDI1aWQnKS50b1N0cmluZygpKS5pcy5lcXVhbCgndGV4dDE0MjVpZDMnKVxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG59KTtcblxuIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cbmRlc2NyaWJlKCdVVUlEJywgZnVuY3Rpb24gKCkge1xuXG4gICAgY2xhc3MgVVVJRCB7fVxuICAgIFxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgIGxldCBwcm9taXNlcyA9IFtdXG4gICAgICAgIFxuICAgICAgICBpZighZ2xvYmFsVGhpc1snY3J5cHRvJ10pIHtcbiAgICAgICAgICAgIHByb21pc2VzLnB1c2goaW1wb3J0KFwiQHBlY3VsaWFyL3dlYmNyeXB0b1wiKS50aGVuKG0gPT4ge1xuICAgICAgICAgICAgICAgIGdsb2JhbFRoaXNbJ2NyeXB0byddID0gbmV3IG0uQ3J5cHRvKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9KSlcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgXG4gICAgICAgIHByb21pc2VzLnB1c2goaW1wb3J0KFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL3V1aWQubWpzXCIpLnRoZW4obSA9PiB7XG4gICAgICAgICAgICBVVUlEID0gbS5VVUlEO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pKVxuICAgICAgICBcbiAgICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pO1xuXG4gICAgfSk7ICAgIFxuICAgIFxuICAgIGRlc2NyaWJlKCcudG9TdHJpbmcoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBzdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgdXVpZCA9IG5ldyBVVUlEKClcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSB1dWlkLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLmlzLmEoJ3N0cmluZycpXG4gICAgICAgICAgICBleHBlY3QocmVzdWx0Lmxlbmd0aCkuaXMuZXF1YWwoMzYpXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCd0ZXN0IGZvcm1hdCcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBsZXQgdXVpZCA9IG5ldyBVVUlEKClcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSB1dWlkLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlZ2V4RXhwID0gL15bQS1GXFxkXXs4fS1bQS1GXFxkXXs0fS00W0EtRlxcZF17M30tWzg5QUJdW0EtRlxcZF17M30tW0EtRlxcZF17MTJ9JC9pO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDIwMDA7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHUgPSBuZXcgVVVJRCgpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgciA9IHJlZ2V4RXhwLnRlc3QodSk7XG5cbiAgICAgICAgICAgICAgICBpZiAociAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICBkb25lKCdubyB1dWlkICcgKyB1ICsgJyA9PiAnICsgcik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRvbmUoKTtcblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG59KTtcblxuIiwgImltcG9ydCB7XG4gICAgaXNQcmltaXRpdmUsXG4gICAgaXNCb29sZWFuLFxuICAgIGlzU3RyaW5nLFxuICAgIGlzT2JqZWN0LFxuICAgIGlzQXJyYXksXG4gICAgaXNJbnN0YW5jZSxcbiAgICBpc0Z1bmN0aW9uLFxuICAgIGlzSXRlcmFibGUsXG4gICAgaXNJbnRlZ2VyLFxuICAgIGlzU3ltYm9sXG59IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvaXMubWpzXCI7XG5cblxuaW1wb3J0IHtJRH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9pZC5tanNcIlxuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5kZXNjcmliZSgnSXMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBsZXQgcHJvbWlzZXMgPSBbXVxuICAgICAgICBpZighZ2xvYmFsVGhpc1snY3J5cHRvJ10pIHtcbiAgICAgICAgICAgIHByb21pc2VzLnB1c2goaW1wb3J0KFwiQHBlY3VsaWFyL3dlYmNyeXB0b1wiKS50aGVuKG0gPT4ge1xuICAgICAgICAgICAgICAgIGdsb2JhbFRoaXNbJ2NyeXB0byddID0gbmV3IG0uQ3J5cHRvKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9KSlcbiAgICAgICAgfVxuXG5cbiAgICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pO1xuXG4gICAgfSk7ICAgIFxuICAgIFxuICAgIGRlc2NyaWJlKCcuaXNQcmltaXRpdmUoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgdHJ1ZV0sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFtudWxsLCB0cnVlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgdHJ1ZV0sXG4gICAgICAgICAgICBbcGFyc2VJbnQoXCJhXCIpLCB0cnVlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbNC41LCB0cnVlXSxcbiAgICAgICAgICAgIFt7fSwgZmFsc2VdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgZmFsc2VdLFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgdHJ1ZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ2lzLmlzUHJpbWl0aXZlKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCByZXR1cm4gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoaXNQcmltaXRpdmUoYSkpLmlzLmVxdWFsKGIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuICAgIGRlc2NyaWJlKCcuaXNTeW1ib2woKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgZmFsc2VdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgZmFsc2VdLFxuICAgICAgICAgICAgW3BhcnNlSW50KFwiYVwiKSwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCBmYWxzZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgWzQuNSwgZmFsc2VdLFxuICAgICAgICAgICAgW3t9LCBmYWxzZV0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCBmYWxzZV0sXG4gICAgICAgICAgICBbU3ltYm9sKFwiZm9vXCIpLCB0cnVlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnaXMuaXNTeW1ib2woJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHJldHVybiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChpc1N5bWJvbChhKSkuaXMuZXF1YWwoYilcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLmlzSW50ZWdlcigpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCBmYWxzZV0sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbbnVsbCwgZmFsc2VdLFxuICAgICAgICAgICAgWygpID0+IHtcbiAgICAgICAgICAgIH0sIGZhbHNlXSxcbiAgICAgICAgICAgIFsyLCB0cnVlXSxcbiAgICAgICAgICAgIFtwYXJzZUludChcImFcIiksIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgW3RydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFs0LjUsIGZhbHNlXSxcbiAgICAgICAgICAgIFt7fSwgZmFsc2VdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgZmFsc2VdLFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdpcy5pc0ludGVnZXIoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHJldHVybiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChpc0ludGVnZXIoYSkpLmlzLmVxdWFsKGIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5pc0l0ZXJhYmxlKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIHRydWVdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBmYWxzZV0sXG4gICAgICAgICAgICBbcGFyc2VJbnQoXCJhXCIpLCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCBmYWxzZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgWzQuNSwgZmFsc2VdLFxuICAgICAgICAgICAgW3t9LCBmYWxzZV0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCB0cnVlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnaXMuaXNJdGVyYWJsZSgnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGlzSXRlcmFibGUoYSkpLmlzLmVxdWFsKGIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5pc0Jvb2xlYW4oKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgZmFsc2VdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCB0cnVlXSxcbiAgICAgICAgICAgIFtwYXJzZUludChcImFcIiksIGZhbHNlXSxcbiAgICAgICAgICAgIFt0cnVlLCB0cnVlXSxcbiAgICAgICAgICAgIFs0LjUsIGZhbHNlXSxcbiAgICAgICAgICAgIFt7fSwgZmFsc2VdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgZmFsc2VdLFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdpcy5pc0Jvb2xlYW4oJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHJldHVybiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChpc0Jvb2xlYW4oYSkpLmlzLmVxdWFsKGIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5pc1N0cmluZygpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCB0cnVlXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtudWxsLCBmYWxzZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgZmFsc2VdLFxuICAgICAgICAgICAgWzIsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgW3BhcnNlSW50KFwiYVwiKSwgZmFsc2VdLFxuICAgICAgICAgICAgW3RydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFs0LjUsIGZhbHNlXSxcbiAgICAgICAgICAgIFt7fSwgZmFsc2VdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgZmFsc2VdLFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdpcy5pc1N0cmluZygnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGlzU3RyaW5nKGEpKS5pcy5lcXVhbChiKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcuaXNJbnN0YW5jZSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtuZXcgSUQoKSwgSUQsICB0cnVlXSxcbiAgICAgICAgICAgIFtuZXcgSUQoKSwgKCk9Pnt9LCAgZmFsc2VdLFxuICAgICAgICAgICAgWyd0ZXN0MScsIHVuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbbnVsbCwgdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIHVuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW3BhcnNlSW50KFwiYVwiKSwgdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbNC41LCB1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFt7fSwgdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCB1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIHVuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnaXMuaXNJbnN0YW5jZSgnICsgSlNPTi5zdHJpbmdpZnkoYSkgKyAnKSBzaG91bGQgcmV0dXJuICcgKyB0eXBlb2YgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChpc0luc3RhbmNlKGEsIGIpKS5pcy5lcXVhbChjKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5pc0luc3RhbmNlRXh0ZW5kZWQoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2xhc3MgQmFzZSB7fVxuICAgICAgICBjbGFzcyBEZXJpdmVkIGV4dGVuZHMgQmFzZSB7fVxuICAgICAgICBmdW5jdGlvbiBBbm90aGVyQ2xhc3MoKSB7fVxuXG4gICAgICAgIGxldCBiYXNlSW5zdGFuY2UgPSBuZXcgQmFzZSgpO1xuICAgICAgICBsZXQgZGVyaXZlZEluc3RhbmNlID0gbmV3IERlcml2ZWQoKTtcblxuICAgICAgICAvLyBUZXN0IGNhc2VzXG4gICAgICAgIGNvbnN0IGNhc2VzID0gW1xuICAgICAgICAgICAgWygpID0+IHt9LCB1bmRlZmluZWQsIGZhbHNlLFwiZnVuY3Rpb24gdnMgdW5kZWZpbmVkXCJdLFxuICAgICAgICAgICAgW25ldyBJRCgpLCAoKT0+e30sIGZhbHNlLCBcIklEIGluc3RhbmNlIHZzIGZ1bmN0aW9uXCJdLFxuICAgICAgICAgICAgW25ldyBJRCgpLCBJRCwgdHJ1ZSwgXCJJRCBpbnN0YW5jZSB2cyBJRFwiXSxcbiAgICAgICAgICAgIFsndGVzdDEnLCB1bmRlZmluZWQsIGZhbHNlLCBcInN0cmluZyB2cyB1bmRlZmluZWRcIl0sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCB1bmRlZmluZWQsIGZhbHNlLCBcInVuZGVmaW5lZCB2cyB1bmRlZmluZWRcIl0sXG4gICAgICAgICAgICBbbnVsbCwgdW5kZWZpbmVkLCBmYWxzZSwgXCJudWxsIHZzIHVuZGVmaW5lZFwiXSxcbiAgICAgICAgICAgIFsyLCB1bmRlZmluZWQsIGZhbHNlLCBcIm51bWJlciB2cyB1bmRlZmluZWRcIl0sXG4gICAgICAgICAgICBbZmFsc2UsIHVuZGVmaW5lZCwgZmFsc2UsIFwiZmFsc2UgdnMgdW5kZWZpbmVkXCJdLFxuICAgICAgICAgICAgW3BhcnNlSW50KFwiYVwiKSwgdW5kZWZpbmVkLCBmYWxzZSwgXCJOYU4gdnMgdW5kZWZpbmVkXCJdLFxuICAgICAgICAgICAgW3RydWUsIHVuZGVmaW5lZCwgZmFsc2UsIFwidHJ1ZSB2cyB1bmRlZmluZWRcIl0sXG4gICAgICAgICAgICBbNC41LCB1bmRlZmluZWQsIGZhbHNlLCBcImZsb2F0IHZzIHVuZGVmaW5lZFwiXSxcbiAgICAgICAgICAgIFt7fSwgdW5kZWZpbmVkLCBmYWxzZSwgXCJvYmplY3QgdnMgdW5kZWZpbmVkXCJdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgdW5kZWZpbmVkLCBmYWxzZSwgXCJhcnJheSB2cyB1bmRlZmluZWRcIl0sXG4gICAgICAgICAgICBbU3ltYm9sKFwiZm9vXCIpLCB1bmRlZmluZWQsIGZhbHNlLCBcInN5bWJvbCB2cyB1bmRlZmluZWRcIl0sXG4gICAgICAgICAgICBbYmFzZUluc3RhbmNlLCBCYXNlLCB0cnVlLCBcIkJhc2UgaW5zdGFuY2UgdnMgQmFzZVwiXSxcbiAgICAgICAgICAgIFtkZXJpdmVkSW5zdGFuY2UsIEJhc2UsIHRydWUsIFwiRGVyaXZlZCBpbnN0YW5jZSB2cyBCYXNlXCJdLFxuICAgICAgICAgICAgW2Rlcml2ZWRJbnN0YW5jZSwgRGVyaXZlZCwgdHJ1ZSwgXCJEZXJpdmVkIGluc3RhbmNlIHZzIERlcml2ZWRcIl0sXG4gICAgICAgICAgICBbYmFzZUluc3RhbmNlLCBEZXJpdmVkLCBmYWxzZSwgXCJCYXNlIGluc3RhbmNlIHZzIERlcml2ZWRcIl0sXG4gICAgICAgICAgICBbYmFzZUluc3RhbmNlLCBBbm90aGVyQ2xhc3MsIGZhbHNlLCBcIkJhc2UgaW5zdGFuY2UgdnMgQW5vdGhlckNsYXNzXCJdLFxuICAgICAgICAgICAgW2Rlcml2ZWRJbnN0YW5jZSwgKCk9Pnt9LCBmYWxzZSwgXCJEZXJpdmVkIGluc3RhbmNlIHZzIGZ1bmN0aW9uXCJdLFxuICAgICAgICAgICAgW25ldyBBbm90aGVyQ2xhc3MoKSwgQW5vdGhlckNsYXNzLCB0cnVlLCBcIkFub3RoZXJDbGFzcyBpbnN0YW5jZSB2cyBBbm90aGVyQ2xhc3NcIl0sXG4gICAgICAgIF07XG5cbiAgICAgICAgLy8gQWRkaW5nIHByb3RvdHlwZSBtb2RpZmljYXRpb24gdGVzdFxuICAgICAgICBsZXQgcHJvdG9Nb2RpZmllZEluc3RhbmNlID0gbmV3IEJhc2UoKTtcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHByb3RvTW9kaWZpZWRJbnN0YW5jZSwgRGVyaXZlZC5wcm90b3R5cGUpO1xuICAgICAgICBjYXNlcy5wdXNoKFxuICAgICAgICAgICAgW3Byb3RvTW9kaWZpZWRJbnN0YW5jZSwgQmFzZSwgdHJ1ZSwgXCJQcm90byBtb2RpZmllZCBCYXNlIGluc3RhbmNlIHZzIEJhc2VcIl0sIFxuICAgICAgICAgICAgW3Byb3RvTW9kaWZpZWRJbnN0YW5jZSwgRGVyaXZlZCwgdHJ1ZSwgXCJQcm90byBtb2RpZmllZCBCYXNlIGluc3RhbmNlIHZzIERlcml2ZWRcIl1cbiAgICAgICAgKTtcblxuICAgICAgICAvLyBSdW5uaW5nIHRoZSB0ZXN0c1xuICAgICAgICBjYXNlcy5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICBjb25zdCBhID0gZGF0YS5zaGlmdCgpO1xuICAgICAgICAgICAgY29uc3QgYiA9IGRhdGEuc2hpZnQoKTtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBkYXRhLnNoaWZ0KCk7XG4gICAgICAgICAgICBjb25zdCBkID0gZGF0YS5zaGlmdCgpO1xuXG4gICAgICAgICAgICBpdCgnaXNJbnN0YW5jZSgnICsgSlNPTi5zdHJpbmdpZnkoYSkgKyAnLCBbRnVuY3Rpb25dKSBzaG91bGQgcmV0dXJuICcgKyBjLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgaWYgKGlzSW5zdGFuY2UoYSwgYikhPT1jKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGQpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGV4cGVjdChpc0luc3RhbmNlKGEsIGIpKS50by5lcXVhbChjKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBcbiAgICBkZXNjcmliZSgnLmlzT2JqZWN0KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIGZhbHNlXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtudWxsLCBmYWxzZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgZmFsc2VdLFxuICAgICAgICAgICAgWzIsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgW3BhcnNlSW50KFwiYVwiKSwgZmFsc2VdLFxuICAgICAgICAgICAgW3RydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFs0LjUsIGZhbHNlXSxcbiAgICAgICAgICAgIFt7fSwgdHJ1ZV0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCBmYWxzZV0sXG4gICAgICAgICAgICBbU3ltYm9sKFwiZm9vXCIpLCBmYWxzZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ2lzLmlzT2JqZWN0KCcgKyBKU09OLnN0cmluZ2lmeShhKSArICcpIHNob3VsZCByZXR1cm4gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoaXNPYmplY3QoYSkpLmlzLmVxdWFsKGIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG5cbiAgICBkZXNjcmliZSgnLmlzQXJyYXkoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgZmFsc2VdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCBmYWxzZV0sXG4gICAgICAgICAgICBbcGFyc2VJbnQoXCJhXCIpLCBmYWxzZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgWzQuNSwgZmFsc2VdLFxuICAgICAgICAgICAgW3t9LCBmYWxzZV0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCB0cnVlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnaXMuaXNBcnJheSgnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGlzQXJyYXkoYSkpLmlzLmVxdWFsKGIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLmlzRnVuY3Rpb24oKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgZmFsc2VdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCB0cnVlXSxcbiAgICAgICAgICAgIFsyLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFtwYXJzZUludChcImFcIiksIGZhbHNlXSxcbiAgICAgICAgICAgIFt0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbNC41LCBmYWxzZV0sXG4gICAgICAgICAgICBbe30sIGZhbHNlXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIGZhbHNlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnaXMuaXNGdW5jdGlvbignICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGlzRnVuY3Rpb24oYSkpLmlzLmVxdWFsKGIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbn0pO1xuXG4iLCAiaW1wb3J0IHtcbiAgICB2YWxpZGF0ZVByaW1pdGl2ZSxcbiAgICB2YWxpZGF0ZUJvb2xlYW4sXG4gICAgdmFsaWRhdGVTdHJpbmcsXG4gICAgdmFsaWRhdGVPYmplY3QsXG4gICAgdmFsaWRhdGVBcnJheSxcbiAgICB2YWxpZGF0ZUZ1bmN0aW9uLFxuICAgIHZhbGlkYXRlSW50ZWdlcixcbiAgICB2YWxpZGF0ZUluc3RhbmNlLFxuICAgIHZhbGlkYXRlSXRlcmFibGUsXG4gICAgdmFsaWRhdGVTeW1ib2xcbn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy92YWxpZGF0ZS5tanNcIlxuXG5pbXBvcnQge0Jhc2V9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvYmFzZS5tanNcIlxuaW1wb3J0IHtJRH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9pZC5tanNcIlxuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5kZXNjcmliZSgndmFsaWRhdGUnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnLnZhbGlkYXRlUHJpbWl0aXZlKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIHRydWVdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgdHJ1ZV0sXG4gICAgICAgICAgICBbbnVsbCwgdHJ1ZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgZmFsc2VdLFxuICAgICAgICAgICAgWzIsIHRydWVdLFxuICAgICAgICAgICAgW2ZhbHNlLCB0cnVlXSxcbiAgICAgICAgICAgIFt0cnVlLCB0cnVlXSxcbiAgICAgICAgICAgIFs0LjUsIHRydWVdLFxuICAgICAgICAgICAgW3t9LCBmYWxzZV0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCBmYWxzZV0sXG4gICAgICAgICAgICBbU3ltYm9sKFwiZm9vXCIpLCB0cnVlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpZiAoYiA9PT0gZmFsc2UpIHtcblxuICAgICAgICAgICAgICAgIGl0KCcudmFsaWRhdGVQcmltaXRpdmUoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IHZhbGlkYXRlUHJpbWl0aXZlKGEpKS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0KCcudmFsaWRhdGVQcmltaXRpdmUoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIG5vdCB0aHJvdyBUeXBlRXhjZXB0aW9uICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCh2YWxpZGF0ZVByaW1pdGl2ZShhKSkudG8uYmUuZXF1YWwoYSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy52YWxpZGF0ZUludGVnZXIoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgZmFsc2VdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgdHJ1ZV0sXG4gICAgICAgICAgICBbZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFt0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbNC41LCBmYWxzZV0sXG4gICAgICAgICAgICBbe30sIGZhbHNlXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIGZhbHNlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpZiAoYiA9PT0gZmFsc2UpIHtcblxuICAgICAgICAgICAgICAgIGl0KCcudmFsaWRhdGVJbnRlZ2VyKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCB0aHJvdyBUeXBlRXhjZXB0aW9uICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiB2YWxpZGF0ZUludGVnZXIoYSkpLnRvLnRocm93KFR5cGVFcnJvcik7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXQoJy52YWxpZGF0ZUludGVnZXIoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIG5vdCB0aHJvdyBUeXBlRXhjZXB0aW9uICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCh2YWxpZGF0ZUludGVnZXIoYSkpLnRvLmJlLmVxdWFsKGEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcbiAgICBcbiAgICBkZXNjcmliZSgnLnZhbGlkYXRlU3ltYm9sKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIGZhbHNlXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtudWxsLCBmYWxzZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgZmFsc2VdLFxuICAgICAgICAgICAgWzIsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgW3RydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFs0LjUsIGZhbHNlXSxcbiAgICAgICAgICAgIFt7fSwgZmFsc2VdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgZmFsc2VdLFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgdHJ1ZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaWYgKGIgPT09IGZhbHNlKSB7XG5cbiAgICAgICAgICAgICAgICBpdCgnLnZhbGlkYXRlU3ltYm9sKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCB0aHJvdyBUeXBlRXhjZXB0aW9uICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiB2YWxpZGF0ZVN5bWJvbChhKSkudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdCgnLnZhbGlkYXRlU3ltYm9sKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCBub3QgdGhyb3cgVHlwZUV4Y2VwdGlvbiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QodmFsaWRhdGVTeW1ib2woYSkpLnRvLmJlLmVxdWFsKGEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcudmFsaWRhdGVJdGVyYWJsZSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCB0cnVlXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtudWxsLCBmYWxzZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgZmFsc2VdLFxuICAgICAgICAgICAgWzIsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgW3RydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFs0LjUsIGZhbHNlXSxcbiAgICAgICAgICAgIFt7fSwgZmFsc2VdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgdHJ1ZV0sXG4gICAgICAgICAgICBbU3ltYm9sKFwiZm9vXCIpLCBmYWxzZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaWYgKGIgPT09IGZhbHNlKSB7XG5cbiAgICAgICAgICAgICAgICBpdCgnLnZhbGlkYXRlSXRlcmFibGUoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlSXRlcmFibGUoYSlcbiAgICAgICAgICAgICAgICAgICAgfSkudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0KCcudmFsaWRhdGVJdGVyYWJsZSgnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgbm90IHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHZhbGlkYXRlSXRlcmFibGUoYSkpLnRvLmJlLmVxdWFsKGEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcudmFsaWRhdGVCb29sZWFuKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIGZhbHNlXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtudWxsLCBmYWxzZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgZmFsc2VdLFxuICAgICAgICAgICAgWzIsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbNC41LCBmYWxzZV0sXG4gICAgICAgICAgICBbe30sIGZhbHNlXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIGZhbHNlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpZiAoYiA9PT0gZmFsc2UpIHtcblxuICAgICAgICAgICAgICAgIGl0KCcudmFsaWRhdGVCb29sZWFuKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCB0aHJvdyBUeXBlRXhjZXB0aW9uICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZUJvb2xlYW4oYSlcbiAgICAgICAgICAgICAgICAgICAgfSkudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdCgnLnZhbGlkYXRlQm9vbGVhbignICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgbm90IHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHZhbGlkYXRlQm9vbGVhbihhKSkudG8uYmUuZXF1YWwoYSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLnZhbGlkYXRlU3RyaW5nKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIHRydWVdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCBmYWxzZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgWzQuNSwgZmFsc2VdLFxuICAgICAgICAgICAgW3t9LCBmYWxzZV0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCBmYWxzZV0sXG4gICAgICAgICAgICBbU3ltYm9sKFwiZm9vXCIpLCBmYWxzZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaWYgKGIgPT09IGZhbHNlKSB7XG5cbiAgICAgICAgICAgICAgICBpdCgnLnZhbGlkYXRlU3RyaW5nKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCB0aHJvdyBUeXBlRXhjZXB0aW9uICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZVN0cmluZyhhKVxuICAgICAgICAgICAgICAgICAgICB9KS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXQoJy52YWxpZGF0ZVN0cmluZygnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgbm90IHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHZhbGlkYXRlU3RyaW5nKGEpKS50by5iZS5lcXVhbChhKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLnZhbGlkYXRlT2JqZWN0KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIGZhbHNlXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtudWxsLCBmYWxzZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgZmFsc2VdLFxuICAgICAgICAgICAgWzIsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgW3RydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFs0LjUsIGZhbHNlXSxcbiAgICAgICAgICAgIFt7fSwgdHJ1ZV0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCBmYWxzZV0sXG4gICAgICAgICAgICBbU3ltYm9sKFwiZm9vXCIpLCBmYWxzZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaWYgKGIgPT09IGZhbHNlKSB7XG5cbiAgICAgICAgICAgICAgICBpdCgnLnZhbGlkYXRlT2JqZWN0KCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCB0aHJvdyBUeXBlRXhjZXB0aW9uICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZU9iamVjdChhKVxuICAgICAgICAgICAgICAgICAgICB9KS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXQoJy52YWxpZGF0ZU9iamVjdCgnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgbm90IHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHZhbGlkYXRlT2JqZWN0KGEpKS50by5iZS5lcXVhbChhKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLnZhbGlkYXRlSW5zdGFuY2UoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgT2JqZWN0XSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIE9iamVjdF0sXG4gICAgICAgICAgICBbbnVsbCwgT2JqZWN0XSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBPYmplY3RdLFxuICAgICAgICAgICAgWzIsIE9iamVjdF0sXG4gICAgICAgICAgICBbZmFsc2UsIE9iamVjdF0sXG4gICAgICAgICAgICBbdHJ1ZSwgT2JqZWN0XSxcbiAgICAgICAgICAgIFs0LjUsIE9iamVjdF0sXG4gICAgICAgICAgICBbe30sIEJhc2VdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgT2JqZWN0XSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIE9iamVjdF0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuXG4gICAgICAgICAgICBpdCgnLnZhbGlkYXRlSW5zdGFuY2UoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHRocm93IFR5cGVFeGNlcHRpb24gJyAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZUluc3RhbmNlKGEsIGIpXG4gICAgICAgICAgICAgICAgfSkudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLnZhbGlkYXRlSW5zdGFuY2UoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbe30sIE9iamVjdCwgdHJ1ZV0sXG4gICAgICAgICAgICBbbmV3IEJhc2UsIEJhc2UsIHRydWVdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCcudmFsaWRhdGVJbnN0YW5jZSgnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgbm90IHRocm93IFR5cGVFeGNlcHRpb24gJyAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QodmFsaWRhdGVJbnN0YW5jZShhLCBiKSkudG8uYmUuZXF1YWwoYSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cblxuICAgIGRlc2NyaWJlKCcudmFsaWRhdGVBcnJheSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCBmYWxzZV0sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbbnVsbCwgZmFsc2VdLFxuICAgICAgICAgICAgWygpID0+IHtcbiAgICAgICAgICAgIH0sIGZhbHNlXSxcbiAgICAgICAgICAgIFsyLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFt0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbNC41LCBmYWxzZV0sXG4gICAgICAgICAgICBbe30sIGZhbHNlXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIHRydWVdLFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGlmIChiID09PSBmYWxzZSkge1xuXG4gICAgICAgICAgICAgICAgaXQoJy52YWxpZGF0ZUFycmF5KCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCB0aHJvdyBUeXBlRXhjZXB0aW9uICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZUFycmF5KGEpXG4gICAgICAgICAgICAgICAgICAgIH0pLnRvLnRocm93KFR5cGVFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdCgnLnZhbGlkYXRlQXJyYXkoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIG5vdCB0aHJvdyBUeXBlRXhjZXB0aW9uICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCh2YWxpZGF0ZUFycmF5KGEpKS50by5iZS5lcXVhbChhKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy52YWxpZGF0ZUZ1bmN0aW9uKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIGZhbHNlXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtudWxsLCBmYWxzZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgdHJ1ZV0sXG4gICAgICAgICAgICBbMiwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCBmYWxzZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgWzQuNSwgZmFsc2VdLFxuICAgICAgICAgICAgW3t9LCBmYWxzZV0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCBmYWxzZV0sXG4gICAgICAgICAgICBbU3ltYm9sKFwiZm9vXCIpLCBmYWxzZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaWYgKGIgPT09IGZhbHNlKSB7XG5cbiAgICAgICAgICAgICAgICBpdCgnLnZhbGlkYXRlRnVuY3Rpb24oJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlRnVuY3Rpb24oYSlcbiAgICAgICAgICAgICAgICAgICAgfSkudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0KCcudmFsaWRhdGVGdW5jdGlvbignICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgbm90IHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHZhbGlkYXRlRnVuY3Rpb24oYSkpLnRvLmJlLmVxdWFsKGEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbn0pO1xuXG4iLCAiaW1wb3J0IHtTdGFja30gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9zdGFjay5tanNcIjtcbmltcG9ydCB7XG4gICAgdHlwZU9mXG59IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvdHlwZW9mLm1qc1wiXG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cbmRlc2NyaWJlKCd0eXBlT2YnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnLnR5cGVPZigpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFt0cnVlLCAnYm9vbGVhbiddLFxuICAgICAgICAgICAgW251bGwsICdudWxsJ10sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCAndW5kZWZpbmVkJ10sXG4gICAgICAgICAgICBbUHJvbWlzZS5yZXNvbHZlKCksICdwcm9taXNlJ10sXG4gICAgICAgICAgICBbbmV3IFdlYWtNYXAoKSwgJ3dlYWttYXAnXSxcbiAgICAgICAgICAgIFtuZXcgTWFwKCksICdtYXAnXSxcbiAgICAgICAgICAgIFtOYU4sICdudW1iZXInXSxcbiAgICAgICAgICAgIFtmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgfSwgJ2dlbmVyYXRvcmZ1bmN0aW9uJ10sXG4gICAgICAgICAgICBbNSwgJ251bWJlciddLFxuICAgICAgICAgICAgW2Z1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIH0sICdmdW5jdGlvbiddLFxuICAgICAgICAgICAgWy9hLywgJ3JlZ2V4cCddLFxuICAgICAgICAgICAgW25ldyBEYXRlKCksICdkYXRlJ10sXG4gICAgICAgICAgICBbe30sICdvYmplY3QnXSxcbiAgICAgICAgICAgIFtbXSwgJ2FycmF5J10sXG4gICAgICAgICAgICBbJycsICdzdHJpbmcnXSxcbiAgICAgICAgICAgIFtuZXcgRXJyb3IsICdlcnJvciddLFxuICAgICAgICAgICAgW25ldyBTdGFjaywgJ3N0YWNrJ11cblxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgcmV0dXJuICcgKyBiICsgJyB3aGVuIHRoZSB2YWx1ZSAnICsgdHlwZU9mKGEpLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHR5cGVPZihhKSkudG8uYmUuZXF1YWwoYik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG59KTtcblxuIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge1VuaXF1ZVF1ZXVlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL3VuaXF1ZXF1ZXVlLm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdVbmlxdWVRdWV1ZScsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgcXVldWU7XG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIHF1ZXVlID0gbmV3IFVuaXF1ZVF1ZXVlO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnaXNFbXB0eSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdmaXJzdCBpdCBzaG91bGQgZW1wdHknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuaXNFbXB0eSgpKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnYWRkIHNlcXVlbmNlIHBlZWsgYW5kIHBvbGwnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Jlc3VsdCBhLGEsYSxiJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmFkZCh7YTogMX0pKS50by5iZS5pbnN0YW5jZU9mKFVuaXF1ZVF1ZXVlKTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5pc0VtcHR5KCkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmFkZCh7YTogMn0pKS50by5iZS5pbnN0YW5jZU9mKFVuaXF1ZVF1ZXVlKTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5hZGQoe2E6IDN9KSkudG8uYmUuaW5zdGFuY2VPZihVbmlxdWVRdWV1ZSk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUucGVlaygpKS50by5kZWVwLmVxdWFsKHthOjF9KTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5wZWVrKCkpLnRvLmRlZXAuZXF1YWwoe2E6MX0pO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLnBvbGwoKSkudG8uZGVlcC5lcXVhbCh7YToxfSk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUucG9sbCgpKS50by5kZWVwLmVxdWFsKHthOjJ9KTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5pc0VtcHR5KCkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLnBlZWsoKSkudG8uZGVlcC5lcXVhbCh7YTozfSk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUucG9sbCgpKS50by5kZWVwLmVxdWFsKHthOjN9KTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5pc0VtcHR5KCkpLnRvLmJlLnRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdhZGQgYW5kIGNsZWFyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgZW1wdHknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuaXNFbXB0eSgpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmFkZCh7YTogMX0pKS50by5iZS5pbnN0YW5jZU9mKFVuaXF1ZVF1ZXVlKTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5pc0VtcHR5KCkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmNsZWFyKCkpLnRvLmJlLmluc3RhbmNlT2YoVW5pcXVlUXVldWUpO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmlzRW1wdHkoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICB9KVxuICAgIFxuICAgIGRlc2NyaWJlKCdhZGQgbm8gb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCgpPT57cXVldWUuYWRkKFtdKX0pLnRvLnRocm93KFR5cGVFcnJvcilcbiAgICAgICAgICAgIGV4cGVjdCgoKT0+e3F1ZXVlLmFkZCgxKX0pLnRvLnRocm93KFR5cGVFcnJvcilcbiAgICAgICAgICAgIGV4cGVjdCgoKT0+e3F1ZXVlLmFkZCh0cnVlKX0pLnRvLnRocm93KFR5cGVFcnJvcilcbiAgICAgICAgICAgIGV4cGVjdCgoKT0+e3F1ZXVlLmFkZCgpfSkudG8udGhyb3coVHlwZUVycm9yKVxuICAgICAgICAgICAgZXhwZWN0KCgpPT57cXVldWUuYWRkKFN5bWJvbChcIjFcIikpfSkudG8udGhyb3coVHlwZUVycm9yKVxuICAgICAgICAgICAgZXhwZWN0KCgpPT57cXVldWUuYWRkKGZ1bmN0aW9uKCl7fSl9KS50by50aHJvdyhUeXBlRXJyb3IpXG4gICAgICAgIH0pO1xuXG4gICAgfSlcbn0pIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge1N0YWNrfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL3N0YWNrLm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdTdGFjaycsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgc3RhY2s7XG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIHN0YWNrID0gbmV3IFN0YWNrO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnaXNFbXB0eSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdmaXJzdCBpdCBzaG91bGQgZW1wdHknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3Qoc3RhY2suaXNFbXB0eSgpKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnYWRkIHNlcXVlbmNlIHBlZWsgYW5kIHB1bGwnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Jlc3VsdCBhLGEsYSxiJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHN0YWNrLnB1c2goJ2EnKSkudG8uYmUuaW5zdGFuY2VPZihTdGFjayk7XG4gICAgICAgICAgICBleHBlY3Qoc3RhY2suaXNFbXB0eSgpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgIGV4cGVjdChzdGFjay5wdXNoKCdiJykpLnRvLmJlLmluc3RhbmNlT2YoU3RhY2spO1xuICAgICAgICAgICAgZXhwZWN0KHN0YWNrLnB1c2goJ2MnKSkudG8uYmUuaW5zdGFuY2VPZihTdGFjayk7XG4gICAgICAgICAgICBleHBlY3Qoc3RhY2sucGVlaygpKS50by5iZS5lcXVhbCgnYycpO1xuICAgICAgICAgICAgZXhwZWN0KHN0YWNrLnBlZWsoKSkudG8uYmUuZXF1YWwoJ2MnKTtcbiAgICAgICAgICAgIGV4cGVjdChzdGFjay5wb3AoKSkudG8uYmUuZXF1YWwoJ2MnKTtcbiAgICAgICAgICAgIGV4cGVjdChzdGFjay5wZWVrKCkpLnRvLmJlLmVxdWFsKCdiJyk7XG4gICAgICAgICAgICBleHBlY3Qoc3RhY2suaXNFbXB0eSgpKS50by5iZS5mYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2FkZCBhbmQgY2xlYXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBlbXB0eScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChzdGFjay5pc0VtcHR5KCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICBleHBlY3Qoc3RhY2sucHVzaCgnYScpKS50by5iZS5pbnN0YW5jZU9mKFN0YWNrKTtcbiAgICAgICAgICAgIGV4cGVjdChzdGFjay5pc0VtcHR5KCkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgZXhwZWN0KHN0YWNrLmNsZWFyKCkpLnRvLmJlLmluc3RhbmNlT2YoU3RhY2spO1xuICAgICAgICAgICAgZXhwZWN0KHN0YWNrLmlzRW1wdHkoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICB9KVxufSkiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge0Jhc2VXaXRoT3B0aW9uc30gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9iYXNld2l0aG9wdGlvbnMubWpzXCI7XG5cblxuZGVzY3JpYmUoJ0Jhc2VXaXRoT3B0aW9ucycsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCduZXcgQmFzZVdpdGhPcHRpb25zJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdpcyBpbnN0YW5jZSBvZiBCYXNlV2l0aE9wdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IEJhc2VXaXRoT3B0aW9ucykudG8uYmUuaW5zdGFuY2VPZihCYXNlV2l0aE9wdGlvbnMpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnaXMgaW5zdGFuY2Ugb2YgT2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBCYXNlV2l0aE9wdGlvbnMpLnRvLmJlLmluc3RhbmNlT2YoT2JqZWN0KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ2dldCBvcHRpb24gaXMgdHJ1ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQmFzZVdpdGhPcHRpb25zKHthOiB0cnVlfSkuZ2V0T3B0aW9uKCdhJykpLnRvLmJlLnRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgfSlcblxufSkiLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtOb2RlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL25vZGUubWpzXCI7XG5pbXBvcnQge05vZGVMaXN0fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL25vZGVsaXN0Lm1qc1wiO1xuaW1wb3J0IHtOb2RlUmVjdXJzaXZlSXRlcmF0b3J9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvbm9kZXJlY3Vyc2l2ZWl0ZXJhdG9yLm1qc1wiO1xuXG5kZXNjcmliZSgnTm9kZUxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgZGVzY3JpYmUoJyNjb25zdHJ1Y3RvcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCBjcmVhdGUgYW4gZW1wdHkgTm9kZUxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgbm9kZUxpc3QgPSBuZXcgTm9kZUxpc3QoKTtcblxuICAgICAgICAgICAgZXhwZWN0KG5vZGVMaXN0LnNpemUpLnRvLmVxdWFsKDApO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGNyZWF0ZSBhIE5vZGVMaXN0IGZyb20gYW4gYXJyYXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgbm9kZUxpc3QgPSBuZXcgTm9kZUxpc3QoW1xuICAgICAgICAgICAgICAgIG5ldyBOb2RlKCdkaXYnKSxcbiAgICAgICAgICAgICAgICBuZXcgTm9kZSgnZGl2JyksXG4gICAgICAgICAgICAgICAgbmV3IE5vZGUoJ2RpdicpXG4gICAgICAgICAgICBdKTtcblxuICAgICAgICAgICAgZXhwZWN0KG5vZGVMaXN0LnNpemUpLnRvLmVxdWFsKDMpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGNyZWF0ZSBhIE5vZGVMaXN0IGZyb20gYSBOb2RlTGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBub2RlTGlzdCA9IG5ldyBOb2RlTGlzdChbXG4gICAgICAgICAgICAgICAgbmV3IE5vZGUoJ2RpdicpLFxuICAgICAgICAgICAgICAgIG5ldyBOb2RlKCdkaXYnKSxcbiAgICAgICAgICAgICAgICBuZXcgTm9kZSgnZGl2JylcbiAgICAgICAgICAgIF0pO1xuXG4gICAgICAgICAgICBsZXQgbm9kZUxpc3QyID0gbmV3IE5vZGVMaXN0KG5vZGVMaXN0KTtcblxuICAgICAgICAgICAgZXhwZWN0KG5vZGVMaXN0Mi5zaXplKS50by5lcXVhbCgzKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnY3JlYXRlIE5vZGVMaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3QobmV3IE5vZGVMaXN0KCkpLmlzLmluc3RhbmNlb2YoTm9kZUxpc3QpO1xuICAgIH0pXG5cbiAgICBpdCgnYWRkIE5vZGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdChuZXcgTm9kZUxpc3QoKS5hZGQobmV3IE5vZGUoKSkpLnRvLmJlLmluc3RhbmNlb2YoTm9kZUxpc3QpO1xuICAgIH0pXG5cbiAgICBpdCgncmVtb3ZlIE5vZGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdChuZXcgTm9kZUxpc3QoKS5yZW1vdmUobmV3IE5vZGUoKSkpLnRvLmJlLmluc3RhbmNlb2YoTm9kZUxpc3QpO1xuICAgIH0pXG5cbiAgICBpdCgnaGFzIHVua25vd24gTm9kZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KG5ldyBOb2RlTGlzdCgpLmhhcyhuZXcgTm9kZSkpLnRvLmJlLmZhbHNlO1xuICAgIH0pXG5cbiAgICBpdCgnaGFzIGFkZGVkIE5vZGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IG4gPSBuZXcgTm9kZTtcbiAgICAgICAgZXhwZWN0KG5ldyBOb2RlTGlzdCgpLmFkZChuKS5oYXMobikpLnRvLmJlLnRydWU7XG4gICAgfSlcblxuICAgIGl0KCd0aHJvdyBleGNlcHRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdCgoKSA9PiBuZXcgTm9kZUxpc3QoKS5hZGQoMSkpLnRvLnRocm93KEVycm9yKTtcbiAgICB9KVxuXG4gICAgaXQoJ2NoZWNrIGxldmVsJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGNvbnN0IHJvb3QgPSBuZXcgTm9kZSgncm9vdCcpO1xuXG4gICAgICAgIGNvbnN0IG4xID0gbmV3IE5vZGUoJ24xJyk7XG4gICAgICAgIGNvbnN0IG4yID0gbmV3IE5vZGUoJ24yJyk7XG4gICAgICAgIGNvbnN0IG4zID0gbmV3IE5vZGUoJ24zJyk7XG4gICAgICAgIGNvbnN0IG40ID0gbmV3IE5vZGUoJ240Jyk7XG5cbiAgICAgICAgY29uc3QgbjExID0gbmV3IE5vZGUoJ24xMScpO1xuICAgICAgICBjb25zdCBuMTIgPSBuZXcgTm9kZSgnbjEyJyk7XG4gICAgICAgIGNvbnN0IG4xMyA9IG5ldyBOb2RlKCduMTMnKTtcblxuICAgICAgICBjb25zdCBuMjEgPSBuZXcgTm9kZSgnbjIxJyk7XG4gICAgICAgIGNvbnN0IG4yMiA9IG5ldyBOb2RlKCduMjInKTtcbiAgICAgICAgY29uc3QgbjIzID0gbmV3IE5vZGUoJ24yMycpO1xuXG4gICAgICAgIGNvbnN0IG40MSA9IG5ldyBOb2RlKCduNDEnKTtcbiAgICAgICAgY29uc3QgbjQyID0gbmV3IE5vZGUoJ240MicpO1xuXG4gICAgICAgIGNvbnN0IG40MTEgPSBuZXcgTm9kZSgnbjQxMScpO1xuICAgICAgICBjb25zdCBuNDEyID0gbmV3IE5vZGUoJ240MTInKTtcbiAgICAgICAgY29uc3QgbjQxMyA9IG5ldyBOb2RlKCduNDEzJyk7XG5cbiAgICAgICAgY29uc3QgbjQxMjEgPSBuZXcgTm9kZSgnbjQxMjEnKTtcblxuICAgICAgICByb290LmFwcGVuZENoaWxkKG4xKS5hcHBlbmRDaGlsZChuMikuYXBwZW5kQ2hpbGQobjMpLmFwcGVuZENoaWxkKG40KTtcbiAgICAgICAgbjEuYXBwZW5kQ2hpbGQobjExKS5hcHBlbmRDaGlsZChuMTIpLmFwcGVuZENoaWxkKG4xMyk7XG4gICAgICAgIG4yLmFwcGVuZENoaWxkKG4yMSkuYXBwZW5kQ2hpbGQobjIyKS5hcHBlbmRDaGlsZChuMjMpO1xuICAgICAgICBuNC5hcHBlbmRDaGlsZChuNDEpLmFwcGVuZENoaWxkKG40Mik7XG4gICAgICAgIG40MS5hcHBlbmRDaGlsZChuNDExKS5hcHBlbmRDaGlsZChuNDEyKS5hcHBlbmRDaGlsZChuNDEzKTtcbiAgICAgICAgbjQxMi5hcHBlbmRDaGlsZChuNDEyMSk7XG5cbiAgICAgICAgbGV0IGl0ZXJhdG9yID0gbmV3IE5vZGVSZWN1cnNpdmVJdGVyYXRvcihyb290KTtcblxuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgbiBvZiBpdGVyYXRvcikge1xuICAgICAgICAgICAgZXhwZWN0KG4pLnRvLmJlLmFuLmluc3RhbmNlb2YoTm9kZSk7XG4gICAgICAgICAgICByZXN1bHQucHVzaChuLnZhbHVlICsgXCI6XCIgKyBuLmxldmVsKTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbChbXG4gICAgICAgICAgICAncm9vdDowJyxcbiAgICAgICAgICAgICduMToxJyxcbiAgICAgICAgICAgICduMTE6MicsXG4gICAgICAgICAgICAnbjEyOjInLFxuICAgICAgICAgICAgJ24xMzoyJyxcbiAgICAgICAgICAgICduMjoxJyxcbiAgICAgICAgICAgICduMjE6MicsXG4gICAgICAgICAgICAnbjIyOjInLFxuICAgICAgICAgICAgJ24yMzoyJyxcbiAgICAgICAgICAgICduMzoxJyxcbiAgICAgICAgICAgICduNDoxJyxcbiAgICAgICAgICAgICduNDE6MicsXG4gICAgICAgICAgICAnbjQxMTozJyxcbiAgICAgICAgICAgICduNDEyOjMnLFxuICAgICAgICAgICAgJ240MTIxOjQnLFxuICAgICAgICAgICAgJ240MTM6MycsXG4gICAgICAgICAgICAnbjQyOjInXG5cbiAgICAgICAgXSk7XG5cbiAgICAgICAgbjQxMjEuYXBwZW5kQ2hpbGQobmV3IE5vZGUoJ240MTIxMScpKTtcblxuICAgICAgICBpdGVyYXRvciA9IG5ldyBOb2RlUmVjdXJzaXZlSXRlcmF0b3Iocm9vdCk7XG4gICAgICAgIHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IG4gb2YgaXRlcmF0b3IpIHtcbiAgICAgICAgICAgIGV4cGVjdChuKS50by5iZS5hbi5pbnN0YW5jZW9mKE5vZGUpO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2gobi52YWx1ZSArIFwiOlwiICsgbi5sZXZlbCk7XG4gICAgICAgIH1cblxuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKFtcbiAgICAgICAgICAgICdyb290OjAnLFxuICAgICAgICAgICAgJ24xOjEnLFxuICAgICAgICAgICAgJ24xMToyJyxcbiAgICAgICAgICAgICduMTI6MicsXG4gICAgICAgICAgICAnbjEzOjInLFxuICAgICAgICAgICAgJ24yOjEnLFxuICAgICAgICAgICAgJ24yMToyJyxcbiAgICAgICAgICAgICduMjI6MicsXG4gICAgICAgICAgICAnbjIzOjInLFxuICAgICAgICAgICAgJ24zOjEnLFxuICAgICAgICAgICAgJ240OjEnLFxuICAgICAgICAgICAgJ240MToyJyxcbiAgICAgICAgICAgICduNDExOjMnLFxuICAgICAgICAgICAgJ240MTI6MycsXG4gICAgICAgICAgICAnbjQxMjE6NCcsXG4gICAgICAgICAgICAnbjQxMjExOjUnLFxuICAgICAgICAgICAgJ240MTM6MycsXG4gICAgICAgICAgICAnbjQyOjInXG5cbiAgICAgICAgXSk7XG5cblxuICAgICAgICBjb25zdCBiYiA9IG5ldyBOb2RlKCdiYicpIC8vIGJpZyBiYW5nXG5cbiAgICAgICAgYmIuYXBwZW5kQ2hpbGQocm9vdCk7XG4gICAgICAgIGl0ZXJhdG9yID0gbmV3IE5vZGVSZWN1cnNpdmVJdGVyYXRvcihiYik7XG5cbiAgICAgICAgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgbiBvZiBpdGVyYXRvcikge1xuICAgICAgICAgICAgZXhwZWN0KG4pLnRvLmJlLmFuLmluc3RhbmNlb2YoTm9kZSk7XG4gICAgICAgICAgICByZXN1bHQucHVzaChuLnZhbHVlICsgXCI6XCIgKyBuLmxldmVsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoW1xuICAgICAgICAgICAgJ2JiOjAnLFxuICAgICAgICAgICAgJ3Jvb3Q6MScsXG4gICAgICAgICAgICAnbjE6MicsXG4gICAgICAgICAgICAnbjExOjMnLFxuICAgICAgICAgICAgJ24xMjozJyxcbiAgICAgICAgICAgICduMTM6MycsXG4gICAgICAgICAgICAnbjI6MicsXG4gICAgICAgICAgICAnbjIxOjMnLFxuICAgICAgICAgICAgJ24yMjozJyxcbiAgICAgICAgICAgICduMjM6MycsXG4gICAgICAgICAgICAnbjM6MicsXG4gICAgICAgICAgICAnbjQ6MicsXG4gICAgICAgICAgICAnbjQxOjMnLFxuICAgICAgICAgICAgJ240MTE6NCcsXG4gICAgICAgICAgICAnbjQxMjo0JyxcbiAgICAgICAgICAgICduNDEyMTo1JyxcbiAgICAgICAgICAgICduNDEyMTE6NicsXG4gICAgICAgICAgICAnbjQxMzo0JyxcbiAgICAgICAgICAgICduNDI6MydcblxuICAgICAgICBdKTtcblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnTGV2ZWxzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCduMiBzaG91bGQgbGV2ZWwgMicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgY29uc3QgbjAgPSBuZXcgTm9kZSgnYWJjJyk7XG5cbiAgICAgICAgICAgIGNvbnN0IG4xID0gbmV3IE5vZGUoJ2RlZicpO1xuICAgICAgICAgICAgbjAuYXBwZW5kQ2hpbGQobjEpXG5cbiAgICAgICAgICAgIGNvbnN0IG4yID0gbmV3IE5vZGUoJ2doaScpO1xuICAgICAgICAgICAgbjEuYXBwZW5kQ2hpbGQobjIpO1xuXG4gICAgICAgICAgICBjb25zdCBuMyA9IG5ldyBOb2RlKCdqa2wnKTtcbiAgICAgICAgICAgIG4yLmFwcGVuZENoaWxkKG4zKTtcblxuICAgICAgICAgICAgZXhwZWN0KG4wLmxldmVsKS50by5iZS5lcXVhbCgwKTtcbiAgICAgICAgICAgIGV4cGVjdChuMS5sZXZlbCkudG8uYmUuZXF1YWwoMSk7XG4gICAgICAgICAgICBleHBlY3QobjIubGV2ZWwpLnRvLmJlLmVxdWFsKDIpO1xuICAgICAgICAgICAgZXhwZWN0KG4zLmxldmVsKS50by5iZS5lcXVhbCgzKTtcblxuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJ3RvU3RyaW5nKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBvdXRwdXQgZW1wdHkgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IG5ldyBOb2RlKCk7XG4gICAgICAgICAgICBleHBlY3Qobm9kZS50b1N0cmluZygpKS5pcy5lcXVhbCgnJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgb3V0cHV0IHN0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IG4wID0gbmV3IE5vZGUoJ2FiYycpO1xuXG4gICAgICAgICAgICBjb25zdCBuMSA9IG5ldyBOb2RlKCdkZWYnKTtcbiAgICAgICAgICAgIG4wLmFwcGVuZENoaWxkKG4xKVxuXG4gICAgICAgICAgICBjb25zdCBuMTEgPSBuZXcgTm9kZSgnZ2hpJyk7XG4gICAgICAgICAgICBuMC5hcHBlbmRDaGlsZChuMTEpXG5cbiAgICAgICAgICAgIGNvbnN0IG4yID0gbmV3IE5vZGUoJ2prbCcpO1xuICAgICAgICAgICAgbjEuYXBwZW5kQ2hpbGQobjIpO1xuXG4gICAgICAgICAgICBjb25zdCBuMyA9IG5ldyBOb2RlKCdtbm8nKTtcbiAgICAgICAgICAgIG4xLmFwcGVuZENoaWxkKG4zKTtcblxuICAgICAgICAgICAgY29uc3QgbjQgPSBuZXcgTm9kZSgncHFyJyk7XG4gICAgICAgICAgICBuMi5hcHBlbmRDaGlsZChuNCk7XG5cbiAgICAgICAgICAgIGV4cGVjdChuMi5sZXZlbCkudG8uYmUuZXF1YWwoMilcblxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhuMC50b1N0cmluZygpKTtcbiAgICAgICAgICAgIC8vIGV4cGVjdChuMC50b1N0cmluZygpKS5pcy5lcXVhbCgnJyk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbn0pOyIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtRdWV1ZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9xdWV1ZS5tanNcIjtcblxuZGVzY3JpYmUoJ1F1ZXVlJywgZnVuY3Rpb24gKCkge1xuICAgIGxldCBxdWV1ZTtcbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgcXVldWUgPSBuZXcgUXVldWU7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdpc0VtcHR5KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ2ZpcnN0IGl0IHNob3VsZCBlbXB0eScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5pc0VtcHR5KCkpLnRvLmJlLnRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdhZGQgc2VxdWVuY2UgcGVlayBhbmQgcG9sbCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgncmVzdWx0IGEsYSxhLGInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuYWRkKCdhJykpLnRvLmJlLmluc3RhbmNlT2YoUXVldWUpO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmlzRW1wdHkoKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuYWRkKCdiJykpLnRvLmJlLmluc3RhbmNlT2YoUXVldWUpO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmFkZCgnYycpKS50by5iZS5pbnN0YW5jZU9mKFF1ZXVlKTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5wZWVrKCkpLnRvLmJlLmVxdWFsKCdhJyk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUucGVlaygpKS50by5iZS5lcXVhbCgnYScpO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLnBvbGwoKSkudG8uYmUuZXF1YWwoJ2EnKTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5wZWVrKCkpLnRvLmJlLmVxdWFsKCdiJyk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuaXNFbXB0eSgpKS50by5iZS5mYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2FkZCBhbmQgY2xlYXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBlbXB0eScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5pc0VtcHR5KCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuYWRkKCdhJykpLnRvLmJlLmluc3RhbmNlT2YoUXVldWUpO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmlzRW1wdHkoKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuY2xlYXIoKSkudG8uYmUuaW5zdGFuY2VPZihRdWV1ZSk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuaXNFbXB0eSgpKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcblxuICAgIH0pXG5cblxuICAgIFxufSkiLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtOb2RlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL25vZGUubWpzXCI7XG5pbXBvcnQge05vZGVMaXN0fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL25vZGVsaXN0Lm1qc1wiO1xuaW1wb3J0IHtOb2RlUmVjdXJzaXZlSXRlcmF0b3J9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvbm9kZXJlY3Vyc2l2ZWl0ZXJhdG9yLm1qc1wiO1xuXG5kZXNjcmliZSgnTm9kZVJlY3Vyc2l2ZUl0ZXJhdG9yJywgZnVuY3Rpb24gKCkge1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBleGVwdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KCgpID0+IG5ldyBOb2RlUmVjdXJzaXZlSXRlcmF0b3IoKSkudG8udGhyb3coRXJyb3IpXG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBiZSBhIGZ1bmN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3QoTm9kZVJlY3Vyc2l2ZUl0ZXJhdG9yKS50by5iZS5hKCdmdW5jdGlvbicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBiZSBhIGNvbnN0cnVjdG9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3QobmV3IE5vZGVSZWN1cnNpdmVJdGVyYXRvcihuZXcgTm9kZSkpLnRvLmJlLmFuLmluc3RhbmNlb2YoTm9kZVJlY3Vyc2l2ZUl0ZXJhdG9yKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvT3BlcmF0b3JzL3lpZWxkXG4gICAgICovXG4gICAgaXQoJ3VuZGVmaW5lZCBzaG91bGQgbm90IHJlc3VsdCBpbiB1bmRlZmluZWQgbm9kZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgaXRlcmF0b3IgPSBuZXcgTm9kZVJlY3Vyc2l2ZUl0ZXJhdG9yKG5ldyBOb2RlKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBuIG9mIGl0ZXJhdG9yKSB7XG4gICAgICAgICAgICBleHBlY3QobikudG8uYmUuYW4uaW5zdGFuY2VvZihOb2RlKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKG4udmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbChbdW5kZWZpbmVkXSk7XG5cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaXRlcmF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9XG4gICAgICAgICAgICBuZXcgTm9kZSgnMScpXG4gICAgICAgIG5vZGUuYXBwZW5kQ2hpbGQoXG4gICAgICAgICAgICAobmV3IE5vZGUoJzInKSkuYXBwZW5kQ2hpbGQobmV3IE5vZGUoJzIuMScpKS5hcHBlbmRDaGlsZChuZXcgTm9kZSgnMi4yJykpLmFwcGVuZENoaWxkKG5ldyBOb2RlKCcyLjMnKSkpLmFwcGVuZENoaWxkKG5ldyBOb2RlKCczJykpLmFwcGVuZENoaWxkKG5ldyBOb2RlKCc0JykuYXBwZW5kQ2hpbGQobmV3IE5vZGUoJzQuMScpKS5hcHBlbmRDaGlsZChuZXcgTm9kZSgnNC4yJykpKTtcblxuICAgICAgICBjb25zdCBpdGVyYXRvciA9IG5ldyBOb2RlUmVjdXJzaXZlSXRlcmF0b3Iobm9kZSk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgbiBvZiBpdGVyYXRvcikge1xuICAgICAgICAgICAgZXhwZWN0KG4pLnRvLmJlLmFuLmluc3RhbmNlb2YoTm9kZSk7XG4gICAgICAgICAgICByZXN1bHQucHVzaChuLnZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoWycxJywgJzInLCAnMi4xJywgJzIuMicsICcyLjMnLCAnMycsICc0JywgJzQuMScsICc0LjInXSk7XG5cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaXRlcmF0ZSBub2RlbGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgbm9kZUxpc3QgPSBuZXcgTm9kZUxpc3QoKTtcblxuICAgICAgICBub2RlTGlzdC5hZGQoXG4gICAgICAgICAgICAobmV3IE5vZGUoJzInKSkuYXBwZW5kQ2hpbGQobmV3IE5vZGUoJzIuMScpKS5hcHBlbmRDaGlsZChuZXcgTm9kZSgnMi4yJykpLmFwcGVuZENoaWxkKG5ldyBOb2RlKCcyLjMnKSkuYXBwZW5kQ2hpbGQobmV3IE5vZGUoJzMnKSkuYXBwZW5kQ2hpbGQobmV3IE5vZGUoJzQnKS5hcHBlbmRDaGlsZChuZXcgTm9kZSgnNC4xJykpLmFwcGVuZENoaWxkKG5ldyBOb2RlKCc0LjInKSkpKTtcblxuICAgICAgICBub2RlTGlzdC5hZGQobmV3IE5vZGUoJ3gnKSk7XG5cbiAgICAgICAgY29uc3QgaXRlcmF0b3IgPSBuZXcgTm9kZVJlY3Vyc2l2ZUl0ZXJhdG9yKG5vZGVMaXN0KTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBuIG9mIGl0ZXJhdG9yKSB7XG4gICAgICAgICAgICBleHBlY3QobikudG8uYmUuYW4uaW5zdGFuY2VvZihOb2RlKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKG4udmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKFsnMicsICcyLjEnLCAnMi4yJywgJzIuMycsICczJywgJzQnLCAnNC4xJywgJzQuMicsICd4J10pO1xuXG4gICAgfSk7XG5cbn0pOyIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCwgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSBcIi4uL2RhdGEvZXh0ZW5kLm1qc1wiO1xuXG5pbXBvcnQgeyBGb3JtYXR0ZXIgYXMgVGV4dEZvcm1hdHRlciB9IGZyb20gXCIuLi90ZXh0L2Zvcm1hdHRlci5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlSW5zdGFuY2UsIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgVHJhbnNsYXRpb25zIH0gZnJvbSBcIi4vdHJhbnNsYXRpb25zLm1qc1wiO1xuXG5leHBvcnQgeyBGb3JtYXR0ZXIgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgaW50ZXJuYWxUcmFuc2xhdGlvblN5bWJvbCA9IFN5bWJvbChcImludGVybmFsVHJhbnNsYXRpb25cIik7XG5cbi8qKlxuICogVGhlIEZvcm1hdHRlciBleHRlbmRzIHRoZSBUZXh0LkZvcm1hdHRlciB3aXRoIHRoZSBwb3NzaWJpbGl0eSB0byByZXBsYWNlIHRoZSBrZXkgYnkgYSB0cmFuc2xhdGlvbi5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI2LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKi9cbmNsYXNzIEZvcm1hdHRlciBleHRlbmRzIFRleHRGb3JtYXR0ZXIge1xuXHQvKipcblx0ICogRGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBtYXJrZXJzIGFyZSBgJHtgIGFuZCBgfWBcblx0ICpcblx0ICogQHBhcmFtIHtvYmplY3R9IG9iamVjdFxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIG9iamVjdFxuXHQgKi9cblx0Y29uc3RydWN0b3Iob2JqZWN0LCB0cmFuc2xhdGlvbiwgb3B0aW9ucykge1xuXHRcdHN1cGVyKG9iamVjdCwgb3B0aW9ucyk7XG5cdFx0dGhpc1tpbnRlcm5hbFRyYW5zbGF0aW9uU3ltYm9sXSA9IHZhbGlkYXRlSW5zdGFuY2UoXG5cdFx0XHR0cmFuc2xhdGlvbixcblx0XHRcdFRyYW5zbGF0aW9ucyxcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAzLjI3LjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvaTE4bi9mb3JtYXR0ZXJAQGluc3RhbmNlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBtYXJrZXJcblx0ICogQHByb3BlcnR5IHthcnJheX0gbWFya2VyLm9wZW49W1wiaTE4bntcIixcIiR7XCJdXG5cdCAqIEBwcm9wZXJ0eSB7YXJyYXl9IG1hcmtlci5jbG9zZT1bXCIke1wiXVxuXHQgKiBAcHJvcGVydHkge29iamVjdH0gcGFyYW1ldGVyXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwYXJhbWV0ZXIuZGVsaW1pdGVyPVwiOjpcIlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcGFyYW1ldGVyLmFzc2lnbm1lbnQ9XCI9XCJcblx0ICogQHByb3BlcnR5IHtvYmplY3R9IGNhbGxiYWNrc1xuXHQgKiBAcHJvcGVydHkge2Z1bmN0aW9ufSBjYWxsYmFja3MuaTE4bj0oKT0+e31cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gZXh0ZW5kKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0Y2FsbGJhY2tzOiB7XG5cdFx0XHRcdGkxOG46ICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzW2ludGVybmFsVHJhbnNsYXRpb25TeW1ib2xdLmdldFRleHQodmFsaWRhdGVTdHJpbmcodmFsdWUpKTtcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0XHRtYXJrZXI6IHtcblx0XHRcdFx0b3BlbjogW1wiaTE4bntcIiwgXCIke1wiXSxcblx0XHRcdFx0Y2xvc2U6IFtcIn1cIl0sXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcblx0ICogQHRocm93cyB7RXJyb3J9IHRvbyBkZWVwIG5lc3Rpbmdcblx0ICogQHRocm93cyB7RXJyb3J9IGtleSBub3QgZm91bmRcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBjbG9zaW5nIG1hcmtlciBpcyBtaXNzaW5nXG5cdCAqL1xuXHRmb3JtYXQodGV4dCkge1xuXHRcdHZhbGlkYXRlU3RyaW5nKHRleHQpO1xuXG5cdFx0Y29uc3Qgb3Blbk1hcmtlciA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wibWFya2VyXCJdW1wib3BlblwiXT8uWzBdO1xuXHRcdGNvbnN0IGNsb3NlTWFya2VyID0gdGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJtYXJrZXJcIl1bXCJjbG9zZVwiXT8uWzBdO1xuXG5cdFx0aWYgKHRleHQuaW5kZXhPZihvcGVuTWFya2VyKSA9PT0gMCkge1xuXHRcdFx0dGV4dCA9IHRleHQuc3Vic3RyaW5nKG9wZW5NYXJrZXIubGVuZ3RoKTtcblxuXHRcdFx0aWYgKHRleHQuaW5kZXhPZihjbG9zZU1hcmtlcikgPT09IHRleHQubGVuZ3RoIC0gY2xvc2VNYXJrZXIubGVuZ3RoKSB7XG5cdFx0XHRcdHRleHQgPSB0ZXh0LnN1YnN0cmluZygwLCB0ZXh0Lmxlbmd0aCAtIGNsb3NlTWFya2VyLmxlbmd0aCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgY2xvc2luZyBtYXJrZXIgaXMgbWlzc2luZ1wiKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBwYXJ0cyA9IHZhbGlkYXRlU3RyaW5nKHRleHQpLnNwbGl0KFwiOjpcIik7XG5cdFx0Y29uc3QgdHJhbnNsYXRpb25LZXkgPSBwYXJ0cy5zaGlmdCgpLnRyaW0oKTsgLy8ga2V5IHZhbHVlIGRlbGltaXRlclxuXHRcdGNvbnN0IHBhcmFtZXRlciA9IHBhcnRzLmpvaW4oXCI6OlwiKS50cmltKCk7XG5cblx0XHRsZXQgYXNzZW1ibGVkVGV4dCA9IGAke29wZW5NYXJrZXJ9c3RhdGljOiR7dHJhbnNsYXRpb25LZXl9IHwgY2FsbDppMThuYDtcblx0XHRpZiAocGFyYW1ldGVyLmxlbmd0aCA+IDApIHtcblx0XHRcdGFzc2VtYmxlZFRleHQgKz0gYDo6JHtwYXJhbWV0ZXJ9YDtcblx0XHR9XG5cdFx0YXNzZW1ibGVkVGV4dCArPSBjbG9zZU1hcmtlcjtcblx0XHRyZXR1cm4gc3VwZXIuZm9ybWF0KGFzc2VtYmxlZFRleHQpO1xuXHR9XG59XG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7Rm9ybWF0dGVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2kxOG4vZm9ybWF0dGVyLm1qc1wiO1xuaW1wb3J0IHtUcmFuc2xhdGlvbnN9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvaTE4bi90cmFuc2xhdGlvbnMubWpzXCI7XG5cblxuZGVzY3JpYmUoJ0Zvcm1hdHRlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCdleGFtcGxlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgcnVuIHdpdGggbWFya2VyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBjb25zdCB0cmFuc2xhdGlvbnMgPSBuZXcgVHJhbnNsYXRpb25zKCdlbicpXG4gICAgICAgICAgICAgICAgLmFzc2lnblRyYW5zbGF0aW9ucyh7XG4gICAgICAgICAgICAgICAgICAgIHRoZWtleTogXCIke2FuaW1hbH0gaGFzIGVhdGVuIHRoZSAke2Zvb2R9IVwiXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGYgPSBuZXcgRm9ybWF0dGVyKHt9LCB0cmFuc2xhdGlvbnMpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBleHBlY3QoZi5mb3JtYXQoXCJpMThue3RoZWtleTo6YW5pbWFsPWRvZzo6Zm9vZD1jYWtlfVwiKSkudG8uYmUuZXF1YWwoJ2RvZyBoYXMgZWF0ZW4gdGhlIGNha2UhJyk7XG4gICAgICAgICAgICAvLyBcdTIxQTYgZG9nIGhhcyBlYXRlbiB0aGUgY2FrZSEgICAgICAgICAgICAgICAgXG5cbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICBpdCgnc2hvdWxkIHJ1biB3aXRob3V0IG1hcmtlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRpb25zID0gbmV3IFRyYW5zbGF0aW9ucygnZW4nKVxuICAgICAgICAgICAgICAgIC5hc3NpZ25UcmFuc2xhdGlvbnMoe1xuICAgICAgICAgICAgICAgICAgICB0aGVrZXk6IFwiJHthbmltYWx9IGhhcyBlYXRlbiB0aGUgJHtmb29kfSFcIlxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBtaXNzaW5nIG1hcmtlclxuICAgICAgICAgICAgZXhwZWN0KG5ldyBGb3JtYXR0ZXIoe30sIHRyYW5zbGF0aW9ucykuZm9ybWF0KFwidGhla2V5OjphbmltYWw9ZG9nOjpmb29kPWNha2VcIikpLnRvLmJlLmVxdWFsKCdkb2cgaGFzIGVhdGVuIHRoZSBjYWtlIScpO1xuICAgICAgICAgICAgLy8gXHUyMUE2IGRvZyBoYXMgZWF0ZW4gdGhlIGNha2UhICAgICAgICAgICAgICAgIFxuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbiAgICBkZXNjcmliZSgnZm9ybWF0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsnaTE4bnt0cmFuc2xhdGlvbmtleTo6YT0zOjpiPTV9JywgJ3Rlc3QgaXMgMyBhbmQgNSddLFxuXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ2Zvcm1hdCAnICsgYSArICcgc2hvdWxkICcgKyBiLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2xhdGlvbnMgPSBuZXcgVHJhbnNsYXRpb25zKCdkZScpLmFzc2lnblRyYW5zbGF0aW9ucyh7XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9ua2V5OiBcInRlc3QgaXMgJHthfSBhbmQgJHtifVwiXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIGV4cGVjdChcbiAgICAgICAgICAgICAgICAgICAgbmV3IEZvcm1hdHRlcih7fSwgdHJhbnNsYXRpb25zKS5mb3JtYXQoYSlcbiAgICAgICAgICAgICAgICApLnRvLmVxdWFsKGIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pXG5cblxufSlcbjsiLCAiXG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge3BhcnNlTG9jYWxlLCBMb2NhbGV9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvaTE4bi9sb2NhbGUubWpzXCI7XG5cblxuZGVzY3JpYmUoJ0xvY2FsZScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCduZXcgaW5zdGFuY2UnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgLy8gbGFuZ3VhZ2UsIHJlZ2lvbiwgc2NyaXB0LCB2YXJpYW50cywgZXh0bGFuZywgcHJpdmF0ZVVzZVxuICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzU2NDYuaHRtbFxuICAgICAgICAgICAgWyd6aCcsIHVuZGVmaW5lZCwgJ0hhbnQnLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnemgtSGFudCddLCAvLyB6aC1IYW50IChDaGluZXNlIHdyaXR0ZW4gdXNpbmcgdGhlIFRyYWRpdGlvbmFsIENoaW5lc2Ugc2NyaXB0KVxuICAgICAgICAgICAgWydkZScsICdDSCcsIHVuZGVmaW5lZCwgJzE5MDEnLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgJ2RlLUNILTE5MDEnXSwgIC8vIGRlLUNILTE5MDEgKEdlcm1hbiBhcyB1c2VkIGluIFN3aXR6ZXJsYW5kIHVzaW5nIHRoZSAxOTAxIHZhcmlhbnQgW29ydGhvZ3JhcGh5XSlcbiAgICAgICAgICAgIFsnc2wnLCAnSVQnLCB1bmRlZmluZWQsICduZWRpcycsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnc2wtSVQtbmVkaXMnXSwgIC8vIHNsLUlULW5lZGlzIChTbG92ZW5pYW4gYXMgdXNlZCBpbiBJdGFseSwgTmFkaXphIGRpYWxlY3QpXG4gICAgICAgICAgICBbJ2h5JywgJ0lUJywgJ0xhdG4nLCAnYXJldmVsYScsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnaHktTGF0bi1JVC1hcmV2ZWxhJ10sIC8vIGh5LUxhdG4tSVQtYXJldmVsYSAoRWFzdGVybiBBcm1lbmlhbiB3cml0dGVuIGluIExhdGluIHNjcmlwdCwgYXMgdXNlZCBpbiBJdGFseSlcbiAgICAgICAgICAgIFsnemgnLCAnQ04nLCAnSGFucycsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsICd6aC1IYW5zLUNOJ10sIC8vIHpoLUhhbnMtQ04gKENoaW5lc2Ugd3JpdHRlbiB1c2luZyB0aGUgU2ltcGxpZmllZCBzY3JpcHQgYXMgdXNlZCBpbiAgbWFpbmxhbmQgQ2hpbmEpXG4gICAgICAgICAgICBbJ3NyJywgJ1JTJywgJ0xhdG4nLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnc3ItTGF0bi1SUyddLCAvLyBzci1MYXRuLVJTIChTZXJiaWFuIHdyaXR0ZW4gdXNpbmcgdGhlIExhdGluIHNjcmlwdCBhcyB1c2VkIGluIFNlcmJpYSlcblxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGQgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBlID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgZiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGcgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ25ldyBMb2NhbGUoJyArIGEgKyAnLCcgKyBiICsgJywnICsgYyArICcsJyArIGQgKyAnLCcgKyBlICsgJywnICsgZiArICcpIHNob3VsZCByZXR1cm4gJyArIGcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGV4cGVjdChuZXcgTG9jYWxlKGEsIGIsIGMsIGQsIGUsIGYpLnRvU3RyaW5nKCkpLmlzLmVxdWFsKGcpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdwYXJzZUxvY2FsZSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcblxuICAgICAgICAgICAgLy8gbGFuZ3VhZ2UsIHJlZ2lvbiwgc2NyaXB0LCB2YXJpYW50cywgZXh0bGFuZywgcHJpdmF0ZVVzZVxuICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzU2NDYuaHRtbFxuICAgICAgICAgICAgWyd6aCcsIHVuZGVmaW5lZCwgJ0hhbnQnLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnemgtSGFudCddLCAvLyB6aC1IYW50IChDaGluZXNlIHdyaXR0ZW4gdXNpbmcgdGhlIFRyYWRpdGlvbmFsIENoaW5lc2Ugc2NyaXB0KVxuICAgICAgICAgICAgWydkZScsICdDSCcsIHVuZGVmaW5lZCwgJzE5MDEnLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgJ2RlLUNILTE5MDEnXSwgIC8vIGRlLUNILTE5MDEgKEdlcm1hbiBhcyB1c2VkIGluIFN3aXR6ZXJsYW5kIHVzaW5nIHRoZSAxOTAxIHZhcmlhbnQgW29ydGhvZ3JhcGh5XSlcbiAgICAgICAgICAgIFsnc2wnLCAnSVQnLCB1bmRlZmluZWQsICduZWRpcycsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnc2wtSVQtbmVkaXMnXSwgIC8vIHNsLUlULW5lZGlzIChTbG92ZW5pYW4gYXMgdXNlZCBpbiBJdGFseSwgTmFkaXphIGRpYWxlY3QpXG4gICAgICAgICAgICBbJ2h5JywgJ0lUJywgJ0xhdG4nLCAnYXJldmVsYScsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnaHktTGF0bi1JVC1hcmV2ZWxhJ10sIC8vIGh5LUxhdG4tSVQtYXJldmVsYSAoRWFzdGVybiBBcm1lbmlhbiB3cml0dGVuIGluIExhdGluIHNjcmlwdCwgYXMgdXNlZCBpbiBJdGFseSlcbiAgICAgICAgICAgIFsnemgnLCAnQ04nLCAnSGFucycsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsICd6aC1IYW5zLUNOJ10sIC8vIHpoLUhhbnMtQ04gKENoaW5lc2Ugd3JpdHRlbiB1c2luZyB0aGUgU2ltcGxpZmllZCBzY3JpcHQgYXMgdXNlZCBpbiAgbWFpbmxhbmQgQ2hpbmEpXG4gICAgICAgICAgICBbJ3NyJywgJ1JTJywgJ0xhdG4nLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnc3ItTGF0bi1SUyddLCAvLyBzci1MYXRuLVJTIChTZXJiaWFuIHdyaXR0ZW4gdXNpbmcgdGhlIExhdGluIHNjcmlwdCBhcyB1c2VkIGluIFNlcmJpYSlcblxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGQgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBlID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgZiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGcgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ25ldyBMb2NhbGUoJyArIGEgKyAnLCcgKyBiICsgJywnICsgYyArICcsJyArIGQgKyAnLCcgKyBlICsgJywnICsgZiArICcpIHNob3VsZCByZXR1cm4gJyArIGcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGxvY2FsZSA9IHBhcnNlTG9jYWxlKGcpXG4gICAgICAgICAgICAgICAgZXhwZWN0KGxvY2FsZS5sb2NhbGVTdHJpbmcpLnRvLmJlLmVxdWFsKGcpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChsb2NhbGUubGFuZ3VhZ2UpLnRvLmJlLmVxdWFsKGEpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChsb2NhbGUucmVnaW9uKS50by5iZS5lcXVhbChiKTtcbiAgICAgICAgICAgICAgICBleHBlY3QobG9jYWxlLnNjcmlwdCkudG8uYmUuZXF1YWwoYyk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGxvY2FsZS52YXJpYW50cykudG8uYmUuZXF1YWwoZCk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGxvY2FsZS5leHRsYW5nKS50by5iZS5lcXVhbChlKTtcbiAgICAgICAgICAgICAgICBleHBlY3QobG9jYWxlLnByaXZhdGVVc2UpLnRvLmJlLmVxdWFsKGYpO1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBMb2NhbGUoYSwgYiwgYywgZCwgZSwgZikudG9TdHJpbmcoKSkuaXMuZXF1YWwoZylcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pOyIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtBVFRSSUJVVEVfT0JKRUNUTElOS30gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtnZXRMaW5rZWRPYmplY3RzfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtQcm92aWRlcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9pMThuL3Byb3ZpZGVyLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuaW1wb3J0IHtnZXREb2N1bWVudFRyYW5zbGF0aW9ucywgVHJhbnNsYXRpb25zfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2kxOG4vdHJhbnNsYXRpb25zLm1qc1wiO1xuXG5kZXNjcmliZSgnUHJvdmlkZXInLCBmdW5jdGlvbiAoKSB7XG5cblxuICAgIGxldCBodG1sMSA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDFcIj5cbiAgICA8L2Rpdj5cbmA7XG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuXG5cbiAgICB9KVxuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgfSlcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdQcm92aWRlciBhbmQgRG9tJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGNvbnN0IHRyYW5zbGF0aW9uc0xpbmtTeW1ib2wgPSBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9pMThuL3RyYW5zbGF0aW9uc0BAbGlua1wiKTtcblxuICAgICAgICBpdCgnYXNzaWduVG9FbGVtZW50JywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKTtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBuZXcgUHJvdmlkZXIoKTtcbiAgICAgICAgICAgIGNvbnN0IHIgPSBwLmFzc2lnblRvRWxlbWVudCh1bmRlZmluZWQsIGVsZW1lbnQpO1xuXG4gICAgICAgICAgICByLnRoZW4oKGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX09CSkVDVExJTkspO1xuICAgICAgICAgICAgICAgIGlmIChzID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUobmV3IEVycm9yKFwiQXR0cmlidXRlIG5vdCBzZXRcIikpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgaSA9IGdldExpbmtlZE9iamVjdHMoZWxlbWVudCwgdHJhbnNsYXRpb25zTGlua1N5bWJvbClcbiAgICAgICAgICAgICAgICBpZiAoaSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBkb25lKG5ldyBFcnJvcihcIk5vIGxpbmtlZCBvYmplY3QgZm91bmRcIikpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCBjb3VudGVyID0gMDtcblxuICAgICAgICAgICAgICAgIGZvciAobGV0IHYgb2YgaSkge1xuICAgICAgICAgICAgICAgICAgICBjb3VudGVyKys7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGNvdW50ZXIgIT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoXCJObyBsaW5rZWQgb2JqZWN0IGZvdW5kXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGRvY1RyYW5zID0gZ2V0RG9jdW1lbnRUcmFuc2xhdGlvbnMoZWxlbWVudClcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jVHJhbnMpLmlzLmluc3RhbmNlb2YoVHJhbnNsYXRpb25zKTtcblxuXG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pOyIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vLi4vZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQgeyBGb3JtYXR0ZXIgfSBmcm9tIFwiLi4vLi4vdGV4dC9mb3JtYXR0ZXIubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWxGdW5jdGlvbiB9IGZyb20gXCIuLi8uLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyBpc0luc3RhbmNlLCBpc1N0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlT2JqZWN0LCB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IHBhcnNlTG9jYWxlIH0gZnJvbSBcIi4uL2xvY2FsZS5tanNcIjtcbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSBcIi4uL3Byb3ZpZGVyLm1qc1wiO1xuaW1wb3J0IHsgVHJhbnNsYXRpb25zIH0gZnJvbSBcIi4uL3RyYW5zbGF0aW9ucy5tanNcIjtcblxuZXhwb3J0IHsgRmV0Y2ggfTtcblxuLyoqXG4gKiBUaGUgZmV0Y2ggcHJvdmlkZXIgcmV0cmlldmVzIGEgSlNPTiBmaWxlIGZyb20gdGhlIGdpdmVuIFVSTCBhbmQgcmV0dXJucyBhIHRyYW5zbGF0aW9uIG9iamVjdC5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uLy4uL2V4YW1wbGUvaTE4bi9wcm92aWRlcnMvZmV0Y2gubWpzXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjEzLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc2VlIHtAbGluayBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzMwNjZ9XG4gKiBAdHV0b3JpYWwgaTE4bi1sb2NhbGUtYW5kLWZvcm1hdHRlclxuICovXG5jbGFzcyBGZXRjaCBleHRlbmRzIFByb3ZpZGVyIHtcblx0LyoqXG5cdCAqIEFzIG9wdGlvbnMgdGhlIGtleSBgZmV0Y2hgIGNhbiBiZSBwYXNzZWQuIFRoaXMgY29uZmlnIG9iamVjdCBpcyBwYXNzZWQgdG8gdGhlIGZldGNoIG1ldGhvZCBhcyBpbml0LlxuXHQgKlxuXHQgKiBUaGUgdXJsIG1heSBjb250YWluIHBsYWNlaG9sZGVycyAobGFuZ3VhZ2UsIHNjcmlwdCwgcmVnaW9uLCB2YXJpYW50cywgZXh0bGFuZywgcHJpdmF0ZVVzZSksIHNvIHlvdSBjYW4gc3BlY2lmeSBvbmUgdXJsIGZvciBhbGwgdHJhbnNsYXRpb25zLlxuXHQgKlxuXHQgKiBgYGBcblx0ICogbmV3IEZldGNoKCdodHRwczovL3d3dy5leGFtcGxlLmNvbS9hc3NldHMvJHtsYW5ndWFnZX0uanNvbicpXG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3xVUkx9IHVybFxuXHQgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBzZWUge0BsaW5rIE1vbnN0ZXIuSTE4bi5Qcm92aWRlcnMuRmV0Y2gjZGVmYXVsdHN9XG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9mZXRjaH1cblx0ICovXG5cdGNvbnN0cnVjdG9yKHVybCwgb3B0aW9ucykge1xuXHRcdHN1cGVyKG9wdGlvbnMpO1xuXG5cdFx0aWYgKGlzSW5zdGFuY2UodXJsLCBVUkwpKSB7XG5cdFx0XHR1cmwgPSB1cmwudG9TdHJpbmcoKTtcblx0XHR9XG5cblx0XHRpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRvcHRpb25zID0ge307XG5cdFx0fVxuXG5cdFx0dmFsaWRhdGVTdHJpbmcodXJsKTtcblxuXHRcdC8qKlxuXHRcdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfVxuXHRcdCAqL1xuXHRcdHRoaXMudXJsID0gdXJsO1xuXG5cdFx0LyoqXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAcHJvcGVydHkge09iamVjdH0gb3B0aW9uc1xuXHRcdCAqL1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0gZXh0ZW5kKFxuXHRcdFx0e30sXG5cdFx0XHRzdXBlci5kZWZhdWx0cyxcblx0XHRcdHRoaXMuZGVmYXVsdHMsXG5cdFx0XHR2YWxpZGF0ZU9iamVjdChvcHRpb25zKSxcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlZmF1bHRzXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmZXRjaFxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2gubWV0aG9kPUdFVFxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2gubW9kZT1jb3JzXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5jYWNoZT1uby1jYWNoZVxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2guY3JlZGVudGlhbHM9b21pdFxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2gucmVkaXJlY3Q9Zm9sbG93XG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5yZWZlcnJlclBvbGljeT1uby1yZWZlcnJlclxuXHQgKlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmV0Y2hfQVBJfVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBleHRlbmQoXG5cdFx0XHR7XG5cdFx0XHRcdGZldGNoOiB7XG5cdFx0XHRcdFx0bWV0aG9kOiBcIkdFVFwiLCAvLyAqR0VULCBQT1NULCBQVVQsIERFTEVURSwgZXRjLlxuXHRcdFx0XHRcdG1vZGU6IFwiY29yc1wiLCAvLyBuby1jb3JzLCAqY29ycywgc2FtZS1vcmlnaW5cblx0XHRcdFx0XHRjYWNoZTogXCJuby1jYWNoZVwiLCAvLyAqZGVmYXVsdCwgbm8tY2FjaGUsIHJlbG9hZCwgZm9yY2UtY2FjaGUsIG9ubHktaWYtY2FjaGVkXG5cdFx0XHRcdFx0Y3JlZGVudGlhbHM6IFwib21pdFwiLCAvLyBpbmNsdWRlLCAqc2FtZS1vcmlnaW4sIG9taXRcblx0XHRcdFx0XHRyZWRpcmVjdDogXCJmb2xsb3dcIiwgLy8gbWFudWFsLCAqZm9sbG93LCBlcnJvclxuXHRcdFx0XHRcdHJlZmVycmVyUG9saWN5OiBcIm5vLXJlZmVycmVyXCIsIC8vIG5vLXJlZmVycmVyLCAqbm8tcmVmZXJyZXItd2hlbi1kb3duZ3JhZGUsIG9yaWdpbiwgb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luLCBzYW1lLW9yaWdpbiwgc3RyaWN0LW9yaWdpbiwgc3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbiwgdW5zYWZlLXVybFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdHN1cGVyLmRlZmF1bHRzLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtMb2NhbGV8c3RyaW5nfSBsb2NhbGVcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdGdldFRyYW5zbGF0aW9ucyhsb2NhbGUpIHtcblx0XHRpZiAoaXNTdHJpbmcobG9jYWxlKSkge1xuXHRcdFx0bG9jYWxlID0gcGFyc2VMb2NhbGUobG9jYWxlKTtcblx0XHR9XG5cblx0XHRjb25zdCBmb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKGxvY2FsZS5nZXRNYXAoKSk7XG5cblx0XHRyZXR1cm4gZ2V0R2xvYmFsRnVuY3Rpb24oXCJmZXRjaFwiKShcblx0XHRcdGZvcm1hdHRlci5mb3JtYXQodGhpcy51cmwpLFxuXHRcdFx0dGhpcy5nZXRPcHRpb24oXCJmZXRjaFwiLCB7fSksXG5cdFx0KVxuXHRcdFx0LnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5qc29uKCkpXG5cdFx0XHQudGhlbigoZGF0YSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbmV3IFRyYW5zbGF0aW9ucyhsb2NhbGUpLmFzc2lnblRyYW5zbGF0aW9ucyhkYXRhKTtcblx0XHRcdH0pO1xuXHR9XG59XG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuXG5pbXBvcnQge0ZldGNofSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL2kxOG4vcHJvdmlkZXJzL2ZldGNoLm1qc1wiO1xuaW1wb3J0IHtUcmFuc2xhdGlvbnN9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvaTE4bi90cmFuc2xhdGlvbnMubWpzXCI7XG5pbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5cblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5sZXQgZmV0Y2hSZWZlcmVuY2U7XG5cblxuZGVzY3JpYmUoJ1RyYW5zbGF0aW9uIFByb3ZpZGVyIEZldGNoJywgZnVuY3Rpb24gKCkge1xuXG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBnbG9iYWxbJ2ZldGNoJ10gPSBmZXRjaFJlZmVyZW5jZTtcbiAgICB9KTtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuXG4gICAgICAgIGZldGNoUmVmZXJlbmNlID0gZ2xvYmFsWydmZXRjaCddO1xuICAgICAgICBnbG9iYWxbJ2ZldGNoJ10gPSBmdW5jdGlvbiAodXJsLCBvcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICBqc29uOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6IFwidGVzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgfTtcblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnZmV0Y2ggbW9jayBkYXRhIGFuZCBjcmVhdGUgdHJhbnNsYXRpb24nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ2ZldGNoJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgbGV0IHAgPSAobmV3IEZldGNoKG5ldyBVUkwoJ2h0dHA6Ly9leGFtcGxlLmNvbScpKSkuZ2V0VHJhbnNsYXRpb25zKCdlbicpO1xuXG4gICAgICAgICAgICBleHBlY3QocCkuaXMuaW5zdGFuY2VvZihQcm9taXNlKTtcblxuICAgICAgICAgICAgcC50aGVuKHIgPT4ge1xuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHIpLmlzLmluc3RhbmNlb2YoVHJhbnNsYXRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZShlKTtcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG59KTsiLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuXG5pbXBvcnQge0VtYmVkfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL2kxOG4vcHJvdmlkZXJzL2VtYmVkLm1qc1wiO1xuaW1wb3J0IHtUcmFuc2xhdGlvbnN9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvaTE4bi90cmFuc2xhdGlvbnMubWpzXCI7XG5pbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5cbmNvbnN0IGh0bWwxID0gYFxuPHNjcmlwdCBpZD1cInRlbXBsb2NhbGVcIiB0eXBlPVwiYXBwbGljYXRpb24vanNvblwiPlxue1xuICAgICAgICBcImtleVwiOiBcInRyYW5zbGF0aW9uXCJcbn1cbjwvc2NyaXB0PlxuYDtcblxuZGVzY3JpYmUoJ1RyYW5zbGF0aW9uIFByb3ZpZGVyIEVtYmVkJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICB9KTtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2dldCBtb2NrIGRhdGEgYW5kIGNyZWF0ZSB0cmFuc2xhdGlvbicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnZW1iZWQnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBjb25zdCBlID0gbmV3IEVtYmVkKCd0ZW1wbG9jYWxlJyk7XG4gICAgICAgICAgICBsZXQgcCA9IGUuZ2V0VHJhbnNsYXRpb25zKCdlbicpO1xuICAgICAgICAgICAgZXhwZWN0KHApLmlzLmluc3RhbmNlb2YoUHJvbWlzZSk7XG5cbiAgICAgICAgICAgIHAudGhlbihyID0+IHtcblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChyKS5pcy5pbnN0YW5jZW9mKFRyYW5zbGF0aW9ucyk7XG4gXG4gICAgICAgICAgICAgICAgICAgIGxldCB0ID0gci5nZXRUZXh0KCdrZXknKVxuICAgICAgICAgICAgICAgICAgICBleHBlY3QodCkuaXMuZXF1YWwoJ3RyYW5zbGF0aW9uJyk7XG5cblxuICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pOyIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtwYXJzZUxvY2FsZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9pMThuL2xvY2FsZS5tanNcIjtcbmltcG9ydCB7RW1iZWR9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvaTE4bi9wcm92aWRlcnMvZW1iZWQubWpzXCI7XG5pbXBvcnQge1xuICAgIFRyYW5zbGF0aW9ucyxcbiAgICBnZXREb2N1bWVudFRyYW5zbGF0aW9uc1xuICAgIFxufSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2kxOG4vdHJhbnNsYXRpb25zLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5kZXNjcmliZSgnVHJhbnNsYXRpb25zJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJ0luc3RhbmNlIGFuZCBJbml0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCB0cmFuc2xhdGlvbjtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uID0gbmV3IFRyYW5zbGF0aW9ucyhwYXJzZUxvY2FsZSgnZW4tR0InKSk7XG5cbiAgICAgICAgICAgIHRyYW5zbGF0aW9uLmFzc2lnblRyYW5zbGF0aW9ucyh7XG4gICAgICAgICAgICAgICAgdGVzdDE6IFwiYWJjXCIsXG4gICAgICAgICAgICAgICAgdGVzdDI6IHsnb3RoZXInOiAneHl6J31cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdjcmVhdGUgaW5zdGFuY2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IFRyYW5zbGF0aW9ucyhwYXJzZUxvY2FsZSgnZW4tR0InKSkpLmlzLmluc3RhbmNlb2YoVHJhbnNsYXRpb25zKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ2luaXQgdHJhbnNsYXRpb25zJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHRyYW5zbGF0aW9uLmFzc2lnblRyYW5zbGF0aW9ucyh7XG4gICAgICAgICAgICAgICAgdGVzdDE6IFwiYWJjXCIsXG4gICAgICAgICAgICAgICAgdGVzdDI6IHsnb3RoZXInOiAneHl6J31cbiAgICAgICAgICAgIH0pKS5pcy5pbnN0YW5jZW9mKFRyYW5zbGF0aW9ucyk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZ2V0VGV4dCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgdHJhbnNsYXRpb247XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICB0cmFuc2xhdGlvbiA9IG5ldyBUcmFuc2xhdGlvbnMocGFyc2VMb2NhbGUoJ2VuLUdCJykpO1xuXG4gICAgICAgICAgICB0cmFuc2xhdGlvbi5hc3NpZ25UcmFuc2xhdGlvbnMoe1xuICAgICAgICAgICAgICAgIHRlc3QxOiBcImFiY1wiLFxuICAgICAgICAgICAgICAgIHRlc3QyOiB7J290aGVyJzogJ3h5eid9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnY3JlYXRlLCBzZXQgYW5kIGdldCBlbi1HQicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCh0cmFuc2xhdGlvbi5nZXRUZXh0KCd0ZXN0MScpKS5pcy5lcXVhbCgnYWJjJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdjcmVhdGUsIHNldCBhbmQgZ2V0ICBlbi1HQiB3aXRoIHBsdXJhbHJ1bGVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHRyYW5zbGF0aW9uLmdldFRleHQoJ3Rlc3QyJykpLmlzLmVxdWFsKCd4eXonKVxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogaW5pdERvY3VtZW50VHJhbnNsYXRpb25cbiAgICAgKi9cblxuICAgIGRlc2NyaWJlKFwidGVzdCBpbml0RG9jdW1lbnRUcmFuc2xhdGlvbiBcIiwgZnVuY3Rpb24gKCkge1xuXG5cbiAgICAgICAgbGV0IGh0bWwxID0gYDxkaXYgaWQ9XCJtb2NrLXRyYW5zbGF0aW9uc1wiPjwvZGl2PlxuICAgIFxuPHNjcmlwdCB0eXBlPVwiYXBwbGljYXRpb24vanNvblwiIGRhdGEtbW9uc3Rlci1yb2xlPVwidHJhbnNsYXRpb25zXCI+XG4gICAge1xuICAgICAgICBcInRlc3QxXCI6IFwiYWJjXCIsXG4gICAgICAgIFwidGVzdDJcIjoge1xuICAgICAgICAgICAgXCJvdGhlclwiOiBcInh5elwiXG4gICAgICAgIH1cbiAgICB9XG48L3NjcmlwdD5cblxuPHNjcmlwdCB0eXBlPVwiYXBwbGljYXRpb24vanNvblwiIGRhdGEtbW9uc3Rlci1yb2xlPVwidHJhbnNsYXRpb25zXCI+XG4gICAge1xuICAgICAgICBcInRlc3QxXCI6IFwieHl6XCIsXG4gICAgICAgIFwidGVzdDNcIjoge1xuICAgICAgICAgICAgXCJvdGhlclwiOiBcInh5elwiXG4gICAgICAgIH1cbiAgICB9XG48L3NjcmlwdD4gICAgXG4gICAgXG5gO1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcblxuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuXG4gICAgICAgIGl0KCdJbml0IHRyYW5zbGF0aW9ucycsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGxldCBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2stdHJhbnNsYXRpb25zJyk7XG4gICAgICAgICAgICBFbWJlZC5hc3NpZ25UcmFuc2xhdGlvbnNUb0VsZW1lbnQoZWxlbSkudGhlbigobykgPT4ge1xuXG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gbm8gZXhjZXB0aW9uIGJlY2F1c2Ugb2YgZGVmYXVsdFxuICAgICAgICAgICAgICAgIGV4cGVjdChnZXREb2N1bWVudFRyYW5zbGF0aW9ucyhlbGVtKS5nZXRUZXh0KCduby1rZXknLCd3aXRoLWRlZmF1bHQnKSlcbiAgICAgICAgICAgICAgICAgICAgLmlzLmVxdWFsKCd3aXRoLWRlZmF1bHQnKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBleHBlY3QoZ2V0RG9jdW1lbnRUcmFuc2xhdGlvbnMoZWxlbSkuZ2V0VGV4dCgndGVzdDEnKSlcbiAgICAgICAgICAgICAgICAgICAgLmlzLmVxdWFsKCd4eXonKTtcblxuICAgICAgICAgICAgICAgIGRvbmUoKTtcblxuICAgICAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgZG9uZShlKTtcbiAgICAgICAgICAgIH0pXG5cblxuICAgICAgICB9KTtcbiAgICB9KVxuXG5cbn0pOyJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBeUNBLFdBQVMsV0FBVyxPQUFPO0FBQzFCLFFBQUksVUFBVSxPQUFXLFFBQU87QUFDaEMsUUFBSSxVQUFVLEtBQU0sUUFBTztBQUMzQixXQUFPLE9BQU8sUUFB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QUksQ0FBQztBQUMvRCxlQUFTLFNBQVMsRUFBRSxNQUFNLFNBQVMsSUFBSSxhQUFhLE1BQU0sSUFBSSxDQUFDO0FBQy9ELGVBQVMsU0FBUyxFQUFFLE1BQU0sU0FBUyxJQUFJLGFBQWEsTUFBTSxJQUFJLENBQUM7QUFDL0QsZUFBUyxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsSUFBSSxtQkFBbUIsTUFBTSxJQUFJLENBQUM7QUFDL0UsZUFBUyxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsSUFBSSxtQkFBbUIsTUFBTSxJQUFJLENBQUM7QUFDL0UsZUFBUyxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsSUFBSSxtQkFBbUIsTUFBTSxJQUFJLENBQUM7QUFDL0UsZUFBUyxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsSUFBSSxtQkFBbUIsTUFBTSxJQUFJLENBQUM7QUFDL0UsZUFBUyxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsSUFBSSxtQkFBbUIsTUFBTSxJQUFJLENBQUM7QUFDL0UsZUFBUyxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsSUFBSSxtQkFBbUIsTUFBTSxJQUFJLENBQUM7QUFDL0UsZUFBUyxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsSUFBSSxtQkFBbUIsTUFBTSxJQUFJLENBQUM7QUFDL0UsZUFBUyxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsSUFBSSxtQkFBbUIsTUFBTSxJQUFJLENBQUM7QUFDL0UsZUFBUyxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsSUFBSSxtQkFBbUIsTUFBTSxJQUFJLENBQUM7QUFDL0UsZUFBUyxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsSUFBSSxtQkFBbUIsTUFBTSxJQUFJLENBQUM7QUFDL0UsZUFBUyxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsSUFBSSxtQkFBbUIsTUFBTSxJQUFJLENBQUM7QUFDL0UsZUFBUyxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsSUFBSSxtQkFBbUIsTUFBTSxJQUFJLENBQUM7QUFDL0UsZUFBUyxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsSUFBSSxtQkFBbUIsTUFBTSxJQUFJLENBQUM7QUFDL0UsZUFBUyxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsSUFBSSxtQkFBbUIsTUFBTSxJQUFJLENBQUM7QUFFL0UsTUFBTSxpQkFBTixjQUE2QixlQUFlO0FBQUEsUUFDeEMsY0FBYztBQUNWLGdCQUFNLEdBQUcsU0FBUztBQUNsQixlQUFLLE9BQU87QUFDWixlQUFLLFNBQVM7QUFBQSxZQUNWLFlBQVksQ0FBQyxhQUFhLFlBQVk7QUFBQSxZQUN0QyxXQUFXLENBQUM7QUFBQSxVQUNoQjtBQUFBLFFBQ0o7QUFBQSxRQUNBLHFCQUFxQixXQUFXO0FBQzVCLGVBQUssc0JBQXNCLFdBQVcsUUFBUTtBQUFBLFFBQ2xEO0FBQUEsTUFDSjtBQUVBLE1BQU0sa0JBQU4sY0FBOEIsZUFBZTtBQUFBLFFBQ3pDLGNBQWM7QUFDVixnQkFBTSxHQUFHLFNBQVM7QUFDbEIsZUFBSyxPQUFPO0FBQ1osZUFBSyxTQUFTO0FBQUEsWUFDVixZQUFZLENBQUMsTUFBTTtBQUFBLFlBQ25CLFdBQVcsQ0FBQyxRQUFRO0FBQUEsVUFDeEI7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUVBLE1BQU0sZUFBTixjQUEyQixlQUFlO0FBQUEsUUFDdEMsY0FBYztBQUNWLGdCQUFNLEdBQUcsU0FBUztBQUNsQixlQUFLLE9BQU87QUFDWixlQUFLLGlCQUFpQixDQUFDLFNBQVMsV0FBVyxXQUFXLFNBQVM7QUFDL0QsZUFBSyxTQUFTLENBQUMsUUFBUSxRQUFRO0FBQUEsUUFDbkM7QUFBQSxRQUNBLGlCQUFpQixTQUFTO0FBQ3RCLGtCQUFRLFFBQVEsWUFBWSxHQUFHO0FBQUEsWUFDM0IsS0FBSztBQUFBLFlBQ0wsS0FBSztBQUFBLFlBQ0wsS0FBSztBQUFBLFlBQ0wsS0FBSztBQUNELHFCQUFPO0FBQUEsWUFDWDtBQUNJLG9CQUFNLElBQUksTUFBTSwyQkFBMkIsT0FBTyxHQUFHO0FBQUEsVUFDN0Q7QUFBQSxRQUNKO0FBQUEsUUFDQSx1QkFBdUIsV0FBVztBQUM5QixlQUFLLHNCQUFzQixXQUFXLE1BQU07QUFDNUMsZUFBSyxtQkFBbUIsVUFBVSxNQUFNLEtBQUssY0FBYztBQUMzRCxjQUFJLFlBQVksV0FBVztBQUN2QixnQkFBSSxPQUFPLFVBQVUsV0FBVyxVQUFVO0FBQ3RDLG9CQUFNLElBQUksVUFBVSx5QkFBeUI7QUFBQSxZQUNqRDtBQUNBLGdCQUFJLFVBQVUsU0FBUyxHQUFHO0FBQ3RCLG9CQUFNLElBQUksV0FBVyxnQ0FBZ0M7QUFBQSxZQUN6RDtBQUFBLFVBQ0o7QUFBQSxRQUNKO0FBQUEsUUFDQSxrQkFBa0IsV0FBVztBQUN6QixlQUFLLHNCQUFzQixXQUFXLE1BQU07QUFDNUMsZUFBSyxtQkFBbUIsVUFBVSxNQUFNLEtBQUssY0FBYztBQUFBLFFBQy9EO0FBQUEsTUFDSjtBQUVBLE1BQU0saUJBQU4sY0FBNkIsZUFBZTtBQUFBLFFBQ3hDLGNBQWM7QUFDVixnQkFBTSxHQUFHLFNBQVM7QUFDbEIsZUFBSyxPQUFPO0FBQ1osZUFBSyxpQkFBaUIsQ0FBQyxTQUFTLFdBQVcsV0FBVyxTQUFTO0FBQy9ELGVBQUssU0FBUyxDQUFDLGNBQWMsV0FBVztBQUFBLFFBQzVDO0FBQUEsUUFDQSxxQkFBcUIsV0FBVztBQUM1QixlQUFLLHNCQUFzQixXQUFXLE1BQU07QUFDNUMsZUFBSyxtQkFBbUIsVUFBVSxNQUFNLEtBQUssY0FBYztBQUMzRCxlQUFLLHNCQUFzQixXQUFXLE1BQU07QUFDNUMsY0FBSSxFQUFFLFVBQVUsZ0JBQWdCLGVBQWUsWUFBWSxPQUFPLFVBQVUsSUFBSSxJQUFJO0FBQ2hGLGtCQUFNLElBQUksVUFBVSx5REFBeUQ7QUFBQSxVQUNqRjtBQUNBLGVBQUssc0JBQXNCLFdBQVcsWUFBWTtBQUNsRCxjQUFJLE9BQU8sVUFBVSxlQUFlLFVBQVU7QUFDMUMsa0JBQU0sSUFBSSxVQUFVLDZCQUE2QjtBQUFBLFVBQ3JEO0FBQ0EsY0FBSSxVQUFVLGFBQWEsR0FBRztBQUMxQixrQkFBTSxJQUFJLFVBQVUsNEJBQTRCO0FBQUEsVUFDcEQ7QUFBQSxRQUNKO0FBQUEsUUFDQSxlQUFlSSxTQUFRLFNBQVMsV0FBVyxhQUFhLGNBQWMsTUFBTTtBQUN4RSxnQkFBTSxlQUFlQSxTQUFRLFNBQVMsV0FBVyxhQUFhLFdBQVcsR0FBRyxJQUFJO0FBQ2hGLGNBQUksYUFBYTtBQUNiLGtCQUFNLElBQUksWUFBWSw4QkFBOEI7QUFBQSxVQUN4RDtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBRUEsTUFBTSxlQUFOLGNBQTJCLGVBQWU7QUFBQSxRQUN0QyxjQUFjO0FBQ1YsZ0JBQU0sR0FBRyxTQUFTO0FBQ2xCLGVBQUssT0FBTztBQUNaLGVBQUssaUJBQWlCLENBQUMsU0FBUyxXQUFXLFdBQVcsU0FBUztBQUMvRCxlQUFLLFNBQVMsQ0FBQyxhQUFhLFlBQVk7QUFBQSxRQUM1QztBQUFBLFFBQ0EscUJBQXFCLFdBQVc7QUFDNUIsZUFBSyxzQkFBc0IsV0FBVyxNQUFNO0FBQzVDLGVBQUssbUJBQW1CLFVBQVUsTUFBTSxLQUFLLGNBQWM7QUFDM0QsZUFBSyxzQkFBc0IsV0FBVyxNQUFNO0FBQzVDLGNBQUksQ0FBQyx3Q0FBc0IsZUFBZSxVQUFVLElBQUksR0FBRztBQUN2RCxrQkFBTSxJQUFJLFVBQVUseURBQXlEO0FBQUEsVUFDakY7QUFDQSxlQUFLLHNCQUFzQixXQUFXLE1BQU07QUFDNUMsY0FBSSxDQUFDLHdDQUFzQixlQUFlLFVBQVUsSUFBSSxHQUFHO0FBQ3ZELGtCQUFNLElBQUksVUFBVSx5REFBeUQ7QUFBQSxVQUNqRjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGVBQWVBLFNBQVEsU0FBUyxXQUFXLGFBQWEsY0FBYyxNQUFNO0FBQ3hFLGdCQUFNLGVBQWVBLFNBQVEsU0FBUyxXQUFXLGFBQWEsV0FBVyxHQUFHLElBQUk7QUFDaEYsY0FBSSxhQUFhO0FBQ2Isa0JBQU0sSUFBSSxZQUFZLDhCQUE4QjtBQUFBLFVBQ3hEO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFFQSxNQUFNLGdCQUFOLGNBQTRCLGVBQWU7QUFBQSxRQUN2QyxjQUFjO0FBQ1YsZ0JBQU0sR0FBRyxTQUFTO0FBQ2xCLGVBQUssU0FBUyxDQUFDO0FBQ2YsZUFBSyxnQkFBZ0I7QUFBQSxRQUN6QjtBQUFBLFFBQ0EsVUFBVSxNQUFNO0FBQ1osZUFBSyxDQUFDLElBQUksRUFBRSxRQUFRLEtBQUssZUFBZSxHQUFHLEtBQUssQ0FBQyxFQUFFO0FBQ25ELGlCQUFPLE1BQU0sT0FBTyxNQUFNLE1BQU0sSUFBSTtBQUFBLFFBQ3hDO0FBQUEsUUFDQSxZQUFZLFdBQVcsTUFBTTtBQUN6QixnQkFBTSxZQUFZLFdBQVcsSUFBSTtBQUNqQyxnQkFBTSxTQUFTLFVBQVUsVUFBVTtBQUNuQyxjQUFJLE9BQU8sV0FBVyxVQUFVO0FBQzVCLGtCQUFNLElBQUksVUFBVSx5QkFBeUI7QUFBQSxVQUNqRDtBQUNBLGNBQUksU0FBUyxHQUFHO0FBQ1osa0JBQU0sSUFBSSxVQUFVLHFCQUFxQjtBQUFBLFVBQzdDO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFFQSxNQUFNLG1CQUFOLGNBQStCLGNBQWM7QUFBQSxRQUN6QyxjQUFjO0FBQ1YsZ0JBQU0sR0FBRyxTQUFTO0FBQ2xCLGVBQUssT0FBTztBQUNaLGVBQUssZ0JBQWdCO0FBQUEsUUFDekI7QUFBQSxNQUNKO0FBRUEsTUFBTSxtQkFBTixjQUErQixjQUFjO0FBQUEsUUFDekMsY0FBYztBQUNWLGdCQUFNLEdBQUcsU0FBUztBQUNsQixlQUFLLE9BQU87QUFDWixlQUFLLGdCQUFnQjtBQUFBLFFBQ3pCO0FBQUEsTUFDSjtBQUVBLE1BQU0sU0FBTixNQUFhO0FBQUEsUUFDVCxLQUFLLE9BQU8sV0FBVyxJQUFJO0FBQ3ZCLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsYUFBYTtBQUNULGdCQUFNLElBQUksS0FBSyxnQkFBZ0IsSUFBSSxXQUFXLEVBQUUsQ0FBQztBQUNqRCxZQUFFLENBQUMsSUFBSyxFQUFFLENBQUMsSUFBSSxLQUFRO0FBQ3ZCLFlBQUUsQ0FBQyxJQUFLLEVBQUUsQ0FBQyxJQUFJLEtBQVE7QUFDdkIsZ0JBQU0sT0FBTywwQkFBUSxNQUFNLENBQUMsRUFBRSxZQUFZO0FBQzFDLGlCQUFPLEdBQUcsS0FBSyxVQUFVLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksS0FBSyxVQUFVLElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxVQUFVLElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUUsQ0FBQztBQUFBLFFBQ3JJO0FBQUEsTUFDSjtBQUVBLE1BQU0sa0JBQU4sTUFBc0I7QUFBQSxRQUNsQixjQUFjO0FBQ1YsZUFBSyxRQUFRLENBQUM7QUFBQSxRQUNsQjtBQUFBLFFBQ0EsSUFBSSxlQUFlO0FBQ2YsaUJBQU8sS0FBSyxNQUFNLGNBQWMsWUFBWSxDQUFDLEtBQUs7QUFBQSxRQUN0RDtBQUFBLFFBQ0EsSUFBSSxVQUFVO0FBQ1YsZUFBSyxNQUFNLFNBQVMsS0FBSyxZQUFZLENBQUMsSUFBSTtBQUFBLFFBQzlDO0FBQUEsUUFDQSxTQUFTLGVBQWU7QUFDcEIsZ0JBQU0sV0FBVyxLQUFLLElBQUksY0FBYyxZQUFZLENBQUM7QUFDckQsY0FBSSxVQUFVO0FBQ1YsbUJBQU8sS0FBSyxNQUFNLGFBQWE7QUFBQSxVQUNuQztBQUNBLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsSUFBSSxNQUFNO0FBQ04saUJBQU8sQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJO0FBQUEsUUFDMUI7QUFBQSxRQUNBLElBQUksU0FBUztBQUNULGlCQUFPLE9BQU8sS0FBSyxLQUFLLEtBQUssRUFBRTtBQUFBLFFBQ25DO0FBQUEsUUFDQSxJQUFJLGFBQWE7QUFDYixnQkFBTSxhQUFhLENBQUM7QUFDcEIscUJBQVcsT0FBTyxLQUFLLE9BQU87QUFDMUIsa0JBQU0sV0FBVyxLQUFLLE1BQU0sR0FBRztBQUMvQix1QkFBVyxLQUFLLFNBQVMsSUFBSTtBQUFBLFVBQ2pDO0FBQ0EsaUJBQU8sV0FBVyxLQUFLO0FBQUEsUUFDM0I7QUFBQSxNQUNKO0FBRUEsTUFBTSxlQUFlO0FBQUEsUUFDakIsT0FBTyxDQUFDLFdBQVcsVUFBVSxRQUFRO0FBQUEsUUFDckMsU0FBUyxDQUFDLFNBQVM7QUFBQSxRQUNuQixRQUFRLENBQUMsUUFBUTtBQUFBLFFBQ2pCLE9BQU8sQ0FBQyxVQUFVLFFBQVE7QUFBQSxNQUM5QjtBQUNBLE1BQU0seUJBQXlCLENBQUMsU0FBUyxRQUFRLEtBQUs7QUFDdEQsTUFBTSxlQUFOLE1BQU0sY0FBYTtBQUFBLFFBQ2YsY0FBYztBQUNWLGVBQUssWUFBWSxJQUFJLGdCQUFnQjtBQUFBLFFBQ3pDO0FBQUEsUUFDQSxPQUFPLGtCQUFrQixNQUFNO0FBQzNCLGlCQUFPLFFBQ0EsT0FBTyxTQUFTLFlBQ2hCLFVBQVUsUUFDVixVQUFVLE9BQ1gsT0FDQTtBQUFBLFFBQ1Y7QUFBQSxRQUNBLEtBQUssT0FBTyxXQUFXLElBQUk7QUFDdkIsaUJBQU87QUFBQSxRQUNYO0FBQUEsUUFDQSxNQUFNLFVBQVUsTUFBTTtBQUNsQixlQUFLLHVCQUF1QixNQUFNLEdBQUcsUUFBUTtBQUM3QyxnQkFBTSxDQUFDLFdBQVcsTUFBTSxHQUFHLE1BQU0sSUFBSTtBQUNyQyxnQkFBTSxvQkFBb0IsS0FBSyxpQkFBaUIsU0FBUztBQUN6RCxnQkFBTSxlQUFlLHdDQUFzQixjQUFjLElBQUk7QUFDN0QsZ0JBQU0sV0FBVyxLQUFLLFlBQVksa0JBQWtCLElBQUk7QUFDeEQsZ0JBQU0sU0FBUyxNQUFNLFNBQVMsT0FBTyxtQkFBbUIsY0FBYyxHQUFHLE1BQU07QUFDL0UsaUJBQU87QUFBQSxRQUNYO0FBQUEsUUFDQSxNQUFNLGVBQWUsTUFBTTtBQUN2QixlQUFLLHVCQUF1QixNQUFNLEdBQUcsYUFBYTtBQUNsRCxnQkFBTSxDQUFDLFdBQVcsYUFBYSxXQUFXLEdBQUcsTUFBTSxJQUFJO0FBQ3ZELGdCQUFNLG9CQUFvQixLQUFLLGlCQUFpQixTQUFTO0FBQ3pELGdCQUFNLFdBQVcsS0FBSyxZQUFZLGtCQUFrQixJQUFJO0FBQ3hELGdCQUFNLFNBQVMsTUFBTSxTQUFTLFlBQVksRUFBRSxHQUFHLG1CQUFtQixNQUFNLFNBQVMsS0FBSyxHQUFHLGFBQWEsV0FBVyxHQUFHLE1BQU07QUFDMUgsaUJBQU87QUFBQSxRQUNYO0FBQUEsUUFDQSxNQUFNLFFBQVEsTUFBTTtBQUNoQixlQUFLLHVCQUF1QixNQUFNLEdBQUcsTUFBTTtBQUMzQyxnQkFBTSxDQUFDLFdBQVcsS0FBSyxNQUFNLEdBQUcsTUFBTSxJQUFJO0FBQzFDLGVBQUssZUFBZSxHQUFHO0FBQ3ZCLGdCQUFNLG9CQUFvQixLQUFLLGlCQUFpQixTQUFTO0FBQ3pELGdCQUFNLGVBQWUsd0NBQXNCLGNBQWMsSUFBSTtBQUM3RCxnQkFBTSxXQUFXLEtBQUssWUFBWSxrQkFBa0IsSUFBSTtBQUN4RCxnQkFBTSxTQUFTLE1BQU0sU0FBUyxLQUFLLEVBQUUsR0FBRyxtQkFBbUIsTUFBTSxTQUFTLEtBQUssR0FBRyxLQUFLLGNBQWMsR0FBRyxNQUFNO0FBQzlHLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsTUFBTSxVQUFVLE1BQU07QUFDbEIsZUFBSyx1QkFBdUIsTUFBTSxHQUFHLFFBQVE7QUFDN0MsZ0JBQU0sQ0FBQyxXQUFXLEtBQUssV0FBVyxNQUFNLEdBQUcsTUFBTSxJQUFJO0FBQ3JELGVBQUssZUFBZSxHQUFHO0FBQ3ZCLGdCQUFNLG9CQUFvQixLQUFLLGlCQUFpQixTQUFTO0FBQ3pELGdCQUFNLGVBQWUsd0NBQXNCLGNBQWMsSUFBSTtBQUM3RCxnQkFBTSxvQkFBb0Isd0NBQXNCLGNBQWMsU0FBUztBQUN2RSxnQkFBTSxXQUFXLEtBQUssWUFBWSxrQkFBa0IsSUFBSTtBQUN4RCxnQkFBTSxTQUFTLE1BQU0sU0FBUyxPQUFPLEVBQUUsR0FBRyxtQkFBbUIsTUFBTSxTQUFTLEtBQUssR0FBRyxLQUFLLG1CQUFtQixjQUFjLEdBQUcsTUFBTTtBQUNuSSxpQkFBTztBQUFBLFFBQ1g7QUFBQSxRQUNBLE1BQU0sV0FBVyxNQUFNO0FBQ25CLGVBQUssdUJBQXVCLE1BQU0sR0FBRyxTQUFTO0FBQzlDLGdCQUFNLENBQUMsV0FBVyxLQUFLLE1BQU0sR0FBRyxNQUFNLElBQUk7QUFDMUMsZUFBSyxlQUFlLEdBQUc7QUFDdkIsZ0JBQU0sb0JBQW9CLEtBQUssaUJBQWlCLFNBQVM7QUFDekQsZ0JBQU0sZUFBZSx3Q0FBc0IsY0FBYyxJQUFJO0FBQzdELGdCQUFNLFdBQVcsS0FBSyxZQUFZLGtCQUFrQixJQUFJO0FBQ3hELGdCQUFNLFNBQVMsTUFBTSxTQUFTLFFBQVEsRUFBRSxHQUFHLG1CQUFtQixNQUFNLFNBQVMsS0FBSyxHQUFHLEtBQUssY0FBYyxFQUFFLFVBQVUsS0FBSyxHQUFHLEdBQUcsTUFBTTtBQUNySSxpQkFBTztBQUFBLFFBQ1g7QUFBQSxRQUNBLE1BQU0sV0FBVyxNQUFNO0FBQ25CLGVBQUssdUJBQXVCLE1BQU0sR0FBRyxTQUFTO0FBQzlDLGdCQUFNLENBQUMsV0FBVyxLQUFLLE1BQU0sR0FBRyxNQUFNLElBQUk7QUFDMUMsZUFBSyxlQUFlLEdBQUc7QUFDdkIsZ0JBQU0sb0JBQW9CLEtBQUssaUJBQWlCLFNBQVM7QUFDekQsZ0JBQU0sZUFBZSx3Q0FBc0IsY0FBYyxJQUFJO0FBQzdELGdCQUFNLFdBQVcsS0FBSyxZQUFZLGtCQUFrQixJQUFJO0FBQ3hELGdCQUFNLFNBQVMsTUFBTSxTQUFTLFFBQVEsRUFBRSxHQUFHLG1CQUFtQixNQUFNLFNBQVMsS0FBSyxHQUFHLEtBQUssY0FBYyxFQUFFLFVBQVUsS0FBSyxHQUFHLEdBQUcsTUFBTTtBQUNySSxpQkFBTztBQUFBLFFBQ1g7QUFBQSxRQUNBLE1BQU0sY0FBYyxNQUFNO0FBQ3RCLGVBQUssdUJBQXVCLE1BQU0sR0FBRyxZQUFZO0FBQ2pELGdCQUFNLENBQUMsV0FBVyxTQUFTLFFBQVEsR0FBRyxNQUFNLElBQUk7QUFDaEQsZUFBSyxlQUFlLE9BQU87QUFDM0IsZ0JBQU0sb0JBQW9CLEtBQUssaUJBQWlCLFNBQVM7QUFDekQsZ0JBQU0sV0FBVyxLQUFLLFlBQVksa0JBQWtCLElBQUk7QUFDeEQsZ0JBQU0sU0FBUyxNQUFNLFNBQVMsV0FBVyxFQUFFLEdBQUcsbUJBQW1CLE1BQU0sU0FBUyxLQUFLLEdBQUcsU0FBUyxRQUFRLEVBQUUsVUFBVSxLQUFLLEdBQUcsR0FBRyxNQUFNO0FBQ3RJLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsTUFBTSxhQUFhLE1BQU07QUFDckIsZUFBSyx1QkFBdUIsTUFBTSxHQUFHLFdBQVc7QUFDaEQsZ0JBQU0sQ0FBQyxXQUFXLFNBQVMsZ0JBQWdCLGFBQWEsV0FBVyxHQUFHLE1BQU0sSUFBSTtBQUNoRixnQkFBTSx5QkFBeUIsS0FBSyxpQkFBaUIsY0FBYztBQUNuRSxnQkFBTSxpQkFBaUIsS0FBSyxZQUFZLHVCQUF1QixJQUFJO0FBQ25FLHlCQUFlLHNCQUFzQixzQkFBc0I7QUFDM0QsZ0JBQU0sb0JBQW9CLEtBQUssaUJBQWlCLFNBQVM7QUFDekQsZ0JBQU0sV0FBVyxLQUFLLFlBQVksa0JBQWtCLElBQUk7QUFDeEQsbUJBQVMsZUFBZSxTQUFTLFdBQVc7QUFDNUMsZ0JBQU0sY0FBYyxNQUFNLFNBQVMsV0FBVyxFQUFFLEdBQUcsbUJBQW1CLE1BQU0sU0FBUyxLQUFLLEdBQUcsU0FBUyxlQUFlLFVBQVUsS0FBSyxFQUFFLFVBQVUsTUFBTSxHQUFHLEdBQUcsTUFBTTtBQUNsSyxpQkFBTyxLQUFLLFVBQVUsT0FBTyxhQUFhLGdCQUFnQixhQUFhLFdBQVcsR0FBRyxNQUFNO0FBQUEsUUFDL0Y7QUFBQSxRQUNBLE1BQU0sYUFBYSxNQUFNO0FBQ3JCLGVBQUssdUJBQXVCLE1BQU0sR0FBRyxXQUFXO0FBQ2hELGdCQUFNLENBQUNBLFNBQVEsS0FBSyxHQUFHLE1BQU0sSUFBSTtBQUNqQyxlQUFLLGVBQWUsR0FBRztBQUN2QixjQUFJLENBQUMsYUFBYUEsT0FBTSxHQUFHO0FBQ3ZCLGtCQUFNLElBQUksVUFBVSw0QkFBNEI7QUFBQSxVQUNwRDtBQUNBLGNBQUksQ0FBQyxhQUFhQSxPQUFNLEVBQUUsU0FBUyxJQUFJLElBQUksR0FBRztBQUMxQyxrQkFBTSxJQUFJLGFBQWEscUNBQXFDO0FBQUEsVUFDaEU7QUFDQSxnQkFBTSxXQUFXLEtBQUssWUFBWSxJQUFJLFVBQVUsSUFBSTtBQUNwRCxnQkFBTSxTQUFTLE1BQU0sU0FBUyxVQUFVQSxTQUFRLEtBQUssR0FBRyxNQUFNO0FBQzlELGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsTUFBTSxhQUFhLE1BQU07QUFDckIsZUFBSyx1QkFBdUIsTUFBTSxHQUFHLFdBQVc7QUFDaEQsZ0JBQU0sQ0FBQ0EsU0FBUSxTQUFTLFdBQVcsYUFBYSxXQUFXLEdBQUcsTUFBTSxJQUFJO0FBQ3hFLGdCQUFNLG9CQUFvQixLQUFLLGlCQUFpQixTQUFTO0FBQ3pELGdCQUFNLFdBQVcsS0FBSyxZQUFZLGtCQUFrQixJQUFJO0FBQ3hELGNBQUlBLFlBQVcsT0FBTztBQUNsQixnQkFBSSxPQUFPLFlBQVksWUFBWSxDQUFDLFFBQVEsS0FBSztBQUM3QyxvQkFBTSxJQUFJLFVBQVUsMkNBQTJDO0FBQUEsWUFDbkU7QUFBQSxVQUNKLFdBQ1MsdUJBQXVCLFNBQVNBLE9BQU0sR0FBRztBQUM5QyxnQkFBSSxDQUFDLHdDQUFzQixlQUFlLE9BQU8sR0FBRztBQUNoRCxvQkFBTSxJQUFJLFVBQVUscURBQXFEO0FBQUEsWUFDN0U7QUFBQSxVQUNKLE9BQ0s7QUFDRCxrQkFBTSxJQUFJLFVBQVUsb0ZBQW9GO0FBQUEsVUFDNUc7QUFDQSxpQkFBTyxTQUFTLFVBQVVBLFNBQVEsU0FBUyxFQUFFLEdBQUcsbUJBQW1CLE1BQU0sU0FBUyxLQUFLLEdBQUcsYUFBYSxXQUFXLEdBQUcsTUFBTTtBQUFBLFFBQy9IO0FBQUEsUUFDQSxNQUFNLFFBQVFBLFNBQVEsS0FBSyxhQUFhLGtCQUFrQixNQUFNO0FBQzVELGNBQUksVUFBVSxNQUFNLEtBQUssVUFBVUEsU0FBUSxLQUFLLEdBQUcsSUFBSTtBQUN2RCxjQUFJQSxZQUFXLE9BQU87QUFDbEIsa0JBQU0sT0FBTyxLQUFLLFVBQVUsT0FBTztBQUNuQyxzQkFBVSwwQkFBUSxlQUFlLElBQUk7QUFBQSxVQUN6QztBQUNBLGdCQUFNLG9CQUFvQixLQUFLLGlCQUFpQixhQUFhO0FBQzdELGdCQUFNLGVBQWUsd0NBQXNCLGNBQWMsT0FBTztBQUNoRSxnQkFBTSxXQUFXLEtBQUssWUFBWSxrQkFBa0IsSUFBSTtBQUN4RCxpQkFBTyxTQUFTLFFBQVEsRUFBRSxHQUFHLG1CQUFtQixNQUFNLFNBQVMsS0FBSyxHQUFHLGFBQWEsY0FBYyxFQUFFLFVBQVUsTUFBTSxHQUFHLEdBQUcsSUFBSTtBQUFBLFFBQ2xJO0FBQUEsUUFDQSxNQUFNLFVBQVVBLFNBQVEsWUFBWSxlQUFlLGlCQUFpQix1QkFBdUIsYUFBYSxjQUFjLE1BQU07QUFDeEgsZ0JBQU0sb0JBQW9CLEtBQUssaUJBQWlCLGVBQWU7QUFDL0QsZ0JBQU0sZUFBZSx3Q0FBc0IsY0FBYyxVQUFVO0FBQ25FLGdCQUFNLFdBQVcsS0FBSyxZQUFZLGtCQUFrQixJQUFJO0FBQ3hELGNBQUksVUFBVSxNQUFNLFNBQVMsUUFBUSxFQUFFLEdBQUcsbUJBQW1CLE1BQU0sU0FBUyxLQUFLLEdBQUcsZUFBZSxjQUFjLEVBQUUsVUFBVSxNQUFNLEdBQUcsR0FBRyxJQUFJO0FBQzdJLGNBQUlBLFlBQVcsT0FBTztBQUNsQixnQkFBSTtBQUNBLHdCQUFVLEtBQUssTUFBTSwwQkFBUSxhQUFhLE9BQU8sQ0FBQztBQUFBLFlBQ3RELFNBQ08sR0FBRztBQUNOLG9CQUFNLFFBQVEsSUFBSSxVQUFVLDJCQUEyQjtBQUN2RCxvQkFBTSxXQUFXO0FBQ2pCLG9CQUFNO0FBQUEsWUFDVjtBQUFBLFVBQ0o7QUFDQSxpQkFBTyxLQUFLLFVBQVVBLFNBQVEsU0FBUyx1QkFBdUIsYUFBYSxXQUFXLEdBQUcsSUFBSTtBQUFBLFFBQ2pHO0FBQUEsUUFDQSx1QkFBdUIsTUFBTUksT0FBTSxZQUFZO0FBQzNDLGNBQUksS0FBSyxTQUFTQSxPQUFNO0FBQ3BCLGtCQUFNLElBQUksVUFBVSxzQkFBc0IsVUFBVSx3QkFBd0JBLEtBQUksaUNBQWlDLEtBQUssTUFBTSxVQUFVO0FBQUEsVUFDMUk7QUFBQSxRQUNKO0FBQUEsUUFDQSxpQkFBaUIsV0FBVztBQUN4QixjQUFJLE9BQU8sY0FBYyxVQUFVO0FBQy9CLG1CQUFPO0FBQUEsY0FDSCxNQUFNO0FBQUEsWUFDVjtBQUFBLFVBQ0o7QUFDQSxjQUFJLGNBQWEsa0JBQWtCLFNBQVMsR0FBRztBQUMzQyxrQkFBTSxvQkFBb0IsRUFBRSxHQUFHLFVBQVU7QUFDekMsOEJBQWtCLE9BQU8sS0FBSyxpQkFBaUIsVUFBVSxJQUFJO0FBQzdELG1CQUFPO0FBQUEsVUFDWDtBQUNBLGlCQUFPLEVBQUUsR0FBRyxVQUFVO0FBQUEsUUFDMUI7QUFBQSxRQUNBLFlBQVksTUFBTTtBQUNkLGdCQUFNLFdBQVcsS0FBSyxVQUFVLElBQUksSUFBSTtBQUN4QyxjQUFJLENBQUMsVUFBVTtBQUNYLGtCQUFNLElBQUksZUFBZSxtQkFBbUI7QUFBQSxVQUNoRDtBQUNBLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsZUFBZSxLQUFLO0FBQ2hCLGNBQUksRUFBRSxlQUFlLFlBQVk7QUFDN0Isa0JBQU0sSUFBSSxVQUFVLGdDQUFnQztBQUFBLFVBQ3hEO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQTtBQUFBOzs7QUNuaURBO0FBQUE7QUFBQTtBQUVBLGNBQVEsYUFBYTtBQUNyQixjQUFRLGNBQWM7QUFDdEIsY0FBUSxnQkFBZ0I7QUFFeEIsVUFBSSxTQUFTLENBQUM7QUFDZCxVQUFJLFlBQVksQ0FBQztBQUNqQixVQUFJLE1BQU0sT0FBTyxlQUFlLGNBQWMsYUFBYTtBQUUzRCxVQUFJLE9BQU87QUFDWCxXQUFTLElBQUksR0FBRyxNQUFNLEtBQUssUUFBUSxJQUFJLEtBQUssRUFBRSxHQUFHO0FBQy9DLGVBQU8sQ0FBQyxJQUFJLEtBQUssQ0FBQztBQUNsQixrQkFBVSxLQUFLLFdBQVcsQ0FBQyxDQUFDLElBQUk7QUFBQSxNQUNsQztBQUhTO0FBQU87QUFPaEIsZ0JBQVUsSUFBSSxXQUFXLENBQUMsQ0FBQyxJQUFJO0FBQy9CLGdCQUFVLElBQUksV0FBVyxDQUFDLENBQUMsSUFBSTtBQUUvQixlQUFTLFFBQVMsS0FBSztBQUNyQixZQUFJSSxPQUFNLElBQUk7QUFFZCxZQUFJQSxPQUFNLElBQUksR0FBRztBQUNmLGdCQUFNLElBQUksTUFBTSxnREFBZ0Q7QUFBQSxRQUNsRTtBQUlBLFlBQUksV0FBVyxJQUFJLFFBQVEsR0FBRztBQUM5QixZQUFJLGFBQWEsR0FBSSxZQUFXQTtBQUVoQyxZQUFJLGtCQUFrQixhQUFhQSxPQUMvQixJQUNBLElBQUssV0FBVztBQUVwQixlQUFPLENBQUMsVUFBVSxlQUFlO0FBQUEsTUFDbkM7QUFHQSxlQUFTLFdBQVksS0FBSztBQUN4QixZQUFJLE9BQU8sUUFBUSxHQUFHO0FBQ3RCLFlBQUksV0FBVyxLQUFLLENBQUM7QUFDckIsWUFBSSxrQkFBa0IsS0FBSyxDQUFDO0FBQzVCLGdCQUFTLFdBQVcsbUJBQW1CLElBQUksSUFBSztBQUFBLE1BQ2xEO0FBRUEsZUFBUyxZQUFhLEtBQUssVUFBVSxpQkFBaUI7QUFDcEQsZ0JBQVMsV0FBVyxtQkFBbUIsSUFBSSxJQUFLO0FBQUEsTUFDbEQ7QUFFQSxlQUFTLFlBQWEsS0FBSztBQUN6QixZQUFJO0FBQ0osWUFBSSxPQUFPLFFBQVEsR0FBRztBQUN0QixZQUFJLFdBQVcsS0FBSyxDQUFDO0FBQ3JCLFlBQUksa0JBQWtCLEtBQUssQ0FBQztBQUU1QixZQUFJLE1BQU0sSUFBSSxJQUFJLFlBQVksS0FBSyxVQUFVLGVBQWUsQ0FBQztBQUU3RCxZQUFJLFVBQVU7QUFHZCxZQUFJQSxPQUFNLGtCQUFrQixJQUN4QixXQUFXLElBQ1g7QUFFSixZQUFJQztBQUNKLGFBQUtBLEtBQUksR0FBR0EsS0FBSUQsTUFBS0MsTUFBSyxHQUFHO0FBQzNCLGdCQUNHLFVBQVUsSUFBSSxXQUFXQSxFQUFDLENBQUMsS0FBSyxLQUNoQyxVQUFVLElBQUksV0FBV0EsS0FBSSxDQUFDLENBQUMsS0FBSyxLQUNwQyxVQUFVLElBQUksV0FBV0EsS0FBSSxDQUFDLENBQUMsS0FBSyxJQUNyQyxVQUFVLElBQUksV0FBV0EsS0FBSSxDQUFDLENBQUM7QUFDakMsY0FBSSxTQUFTLElBQUssT0FBTyxLQUFNO0FBQy9CLGNBQUksU0FBUyxJQUFLLE9BQU8sSUFBSztBQUM5QixjQUFJLFNBQVMsSUFBSSxNQUFNO0FBQUEsUUFDekI7QUFFQSxZQUFJLG9CQUFvQixHQUFHO0FBQ3pCLGdCQUNHLFVBQVUsSUFBSSxXQUFXQSxFQUFDLENBQUMsS0FBSyxJQUNoQyxVQUFVLElBQUksV0FBV0EsS0FBSSxDQUFDLENBQUMsS0FBSztBQUN2QyxjQUFJLFNBQVMsSUFBSSxNQUFNO0FBQUEsUUFDekI7QUFFQSxZQUFJLG9CQUFvQixHQUFHO0FBQ3pCLGdCQUNHLFVBQVUsSUFBSSxXQUFXQSxFQUFDLENBQUMsS0FBSyxLQUNoQyxVQUFVLElBQUksV0FBV0EsS0FBSSxDQUFDLENBQUMsS0FBSyxJQUNwQyxVQUFVLElBQUksV0FBV0EsS0FBSSxDQUFDLENBQUMsS0FBSztBQUN2QyxjQUFJLFNBQVMsSUFBSyxPQUFPLElBQUs7QUFDOUIsY0FBSSxTQUFTLElBQUksTUFBTTtBQUFBLFFBQ3pCO0FBRUEsZUFBTztBQUFBLE1BQ1Q7QUFFQSxlQUFTLGdCQUFpQixLQUFLO0FBQzdCLGVBQU8sT0FBTyxPQUFPLEtBQUssRUFBSSxJQUM1QixPQUFPLE9BQU8sS0FBSyxFQUFJLElBQ3ZCLE9BQU8sT0FBTyxJQUFJLEVBQUksSUFDdEIsT0FBTyxNQUFNLEVBQUk7QUFBQSxNQUNyQjtBQUVBLGVBQVMsWUFBYSxPQUFPQyxRQUFPQyxNQUFLO0FBQ3ZDLFlBQUk7QUFDSixZQUFJLFNBQVMsQ0FBQztBQUNkLGlCQUFTRixLQUFJQyxRQUFPRCxLQUFJRSxNQUFLRixNQUFLLEdBQUc7QUFDbkMsaUJBQ0ksTUFBTUEsRUFBQyxLQUFLLEtBQU0sYUFDbEIsTUFBTUEsS0FBSSxDQUFDLEtBQUssSUFBSyxVQUN0QixNQUFNQSxLQUFJLENBQUMsSUFBSTtBQUNsQixpQkFBTyxLQUFLLGdCQUFnQixHQUFHLENBQUM7QUFBQSxRQUNsQztBQUNBLGVBQU8sT0FBTyxLQUFLLEVBQUU7QUFBQSxNQUN2QjtBQUVBLGVBQVMsY0FBZSxPQUFPO0FBQzdCLFlBQUk7QUFDSixZQUFJRCxPQUFNLE1BQU07QUFDaEIsWUFBSSxhQUFhQSxPQUFNO0FBQ3ZCLFlBQUksUUFBUSxDQUFDO0FBQ2IsWUFBSSxpQkFBaUI7QUFHckIsaUJBQVNDLEtBQUksR0FBR0csUUFBT0osT0FBTSxZQUFZQyxLQUFJRyxPQUFNSCxNQUFLLGdCQUFnQjtBQUN0RSxnQkFBTSxLQUFLLFlBQVksT0FBT0EsSUFBSUEsS0FBSSxpQkFBa0JHLFFBQU9BLFFBQVFILEtBQUksY0FBZSxDQUFDO0FBQUEsUUFDN0Y7QUFHQSxZQUFJLGVBQWUsR0FBRztBQUNwQixnQkFBTSxNQUFNRCxPQUFNLENBQUM7QUFDbkIsZ0JBQU07QUFBQSxZQUNKLE9BQU8sT0FBTyxDQUFDLElBQ2YsT0FBUSxPQUFPLElBQUssRUFBSSxJQUN4QjtBQUFBLFVBQ0Y7QUFBQSxRQUNGLFdBQVcsZUFBZSxHQUFHO0FBQzNCLGlCQUFPLE1BQU1BLE9BQU0sQ0FBQyxLQUFLLEtBQUssTUFBTUEsT0FBTSxDQUFDO0FBQzNDLGdCQUFNO0FBQUEsWUFDSixPQUFPLE9BQU8sRUFBRSxJQUNoQixPQUFRLE9BQU8sSUFBSyxFQUFJLElBQ3hCLE9BQVEsT0FBTyxJQUFLLEVBQUksSUFDeEI7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUVBLGVBQU8sTUFBTSxLQUFLLEVBQUU7QUFBQSxNQUN0QjtBQUFBO0FBQUE7OztBQ3JKQTtBQUFBO0FBQ0EsY0FBUSxPQUFPLFNBQVUsUUFBUUssU0FBUSxNQUFNLE1BQU0sUUFBUTtBQUMzRCxZQUFJLEdBQUc7QUFDUCxZQUFJLE9BQVEsU0FBUyxJQUFLLE9BQU87QUFDakMsWUFBSSxRQUFRLEtBQUssUUFBUTtBQUN6QixZQUFJLFFBQVEsUUFBUTtBQUNwQixZQUFJLFFBQVE7QUFDWixZQUFJLElBQUksT0FBUSxTQUFTLElBQUs7QUFDOUIsWUFBSSxJQUFJLE9BQU8sS0FBSztBQUNwQixZQUFJLElBQUksT0FBT0EsVUFBUyxDQUFDO0FBRXpCLGFBQUs7QUFFTCxZQUFJLEtBQU0sS0FBTSxDQUFDLFNBQVU7QUFDM0IsY0FBTyxDQUFDO0FBQ1IsaUJBQVM7QUFDVCxlQUFPLFFBQVEsR0FBRyxJQUFLLElBQUksTUFBTyxPQUFPQSxVQUFTLENBQUMsR0FBRyxLQUFLLEdBQUcsU0FBUyxHQUFHO0FBQUEsUUFBQztBQUUzRSxZQUFJLEtBQU0sS0FBTSxDQUFDLFNBQVU7QUFDM0IsY0FBTyxDQUFDO0FBQ1IsaUJBQVM7QUFDVCxlQUFPLFFBQVEsR0FBRyxJQUFLLElBQUksTUFBTyxPQUFPQSxVQUFTLENBQUMsR0FBRyxLQUFLLEdBQUcsU0FBUyxHQUFHO0FBQUEsUUFBQztBQUUzRSxZQUFJLE1BQU0sR0FBRztBQUNYLGNBQUksSUFBSTtBQUFBLFFBQ1YsV0FBVyxNQUFNLE1BQU07QUFDckIsaUJBQU8sSUFBSSxPQUFRLElBQUksS0FBSyxLQUFLO0FBQUEsUUFDbkMsT0FBTztBQUNMLGNBQUksSUFBSSxLQUFLLElBQUksR0FBRyxJQUFJO0FBQ3hCLGNBQUksSUFBSTtBQUFBLFFBQ1Y7QUFDQSxnQkFBUSxJQUFJLEtBQUssS0FBSyxJQUFJLEtBQUssSUFBSSxHQUFHLElBQUksSUFBSTtBQUFBLE1BQ2hEO0FBRUEsY0FBUSxRQUFRLFNBQVUsUUFBUSxPQUFPQSxTQUFRLE1BQU0sTUFBTSxRQUFRO0FBQ25FLFlBQUksR0FBRyxHQUFHO0FBQ1YsWUFBSSxPQUFRLFNBQVMsSUFBSyxPQUFPO0FBQ2pDLFlBQUksUUFBUSxLQUFLLFFBQVE7QUFDekIsWUFBSSxRQUFRLFFBQVE7QUFDcEIsWUFBSSxLQUFNLFNBQVMsS0FBSyxLQUFLLElBQUksR0FBRyxHQUFHLElBQUksS0FBSyxJQUFJLEdBQUcsR0FBRyxJQUFJO0FBQzlELFlBQUksSUFBSSxPQUFPLElBQUssU0FBUztBQUM3QixZQUFJLElBQUksT0FBTyxJQUFJO0FBQ25CLFlBQUksSUFBSSxRQUFRLEtBQU0sVUFBVSxLQUFLLElBQUksUUFBUSxJQUFLLElBQUk7QUFFMUQsZ0JBQVEsS0FBSyxJQUFJLEtBQUs7QUFFdEIsWUFBSSxNQUFNLEtBQUssS0FBSyxVQUFVLFVBQVU7QUFDdEMsY0FBSSxNQUFNLEtBQUssSUFBSSxJQUFJO0FBQ3ZCLGNBQUk7QUFBQSxRQUNOLE9BQU87QUFDTCxjQUFJLEtBQUssTUFBTSxLQUFLLElBQUksS0FBSyxJQUFJLEtBQUssR0FBRztBQUN6QyxjQUFJLFNBQVMsSUFBSSxLQUFLLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHO0FBQ3JDO0FBQ0EsaUJBQUs7QUFBQSxVQUNQO0FBQ0EsY0FBSSxJQUFJLFNBQVMsR0FBRztBQUNsQixxQkFBUyxLQUFLO0FBQUEsVUFDaEIsT0FBTztBQUNMLHFCQUFTLEtBQUssS0FBSyxJQUFJLEdBQUcsSUFBSSxLQUFLO0FBQUEsVUFDckM7QUFDQSxjQUFJLFFBQVEsS0FBSyxHQUFHO0FBQ2xCO0FBQ0EsaUJBQUs7QUFBQSxVQUNQO0FBRUEsY0FBSSxJQUFJLFNBQVMsTUFBTTtBQUNyQixnQkFBSTtBQUNKLGdCQUFJO0FBQUEsVUFDTixXQUFXLElBQUksU0FBUyxHQUFHO0FBQ3pCLGlCQUFNLFFBQVEsSUFBSyxLQUFLLEtBQUssSUFBSSxHQUFHLElBQUk7QUFDeEMsZ0JBQUksSUFBSTtBQUFBLFVBQ1YsT0FBTztBQUNMLGdCQUFJLFFBQVEsS0FBSyxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksS0FBSyxJQUFJLEdBQUcsSUFBSTtBQUNyRCxnQkFBSTtBQUFBLFVBQ047QUFBQSxRQUNGO0FBRUEsZUFBTyxRQUFRLEdBQUcsT0FBT0EsVUFBUyxDQUFDLElBQUksSUFBSSxLQUFNLEtBQUssR0FBRyxLQUFLLEtBQUssUUFBUSxHQUFHO0FBQUEsUUFBQztBQUUvRSxZQUFLLEtBQUssT0FBUTtBQUNsQixnQkFBUTtBQUNSLGVBQU8sT0FBTyxHQUFHLE9BQU9BLFVBQVMsQ0FBQyxJQUFJLElBQUksS0FBTSxLQUFLLEdBQUcsS0FBSyxLQUFLLFFBQVEsR0FBRztBQUFBLFFBQUM7QUFFOUUsZUFBT0EsVUFBUyxJQUFJLENBQUMsS0FBSyxJQUFJO0FBQUEsTUFDaEM7QUFBQTtBQUFBOzs7QUNwRkE7QUFBQTtBQUFBO0FBVUEsVUFBSSxTQUFTO0FBQ2IsVUFBSSxVQUFVO0FBQ2QsVUFBSSxzQkFDRCxPQUFPLFdBQVcsY0FBYyxPQUFPLE9BQU8sS0FBSyxNQUFNLGFBQ3RELE9BQU8sS0FBSyxFQUFFLDRCQUE0QixJQUMxQztBQUVOLGNBQVEsU0FBU0M7QUFDakIsY0FBUSxhQUFhO0FBQ3JCLGNBQVEsb0JBQW9CO0FBRTVCLFVBQUksZUFBZTtBQUNuQixjQUFRLGFBQWE7QUFnQnJCLE1BQUFBLFFBQU8sc0JBQXNCLGtCQUFrQjtBQUUvQyxVQUFJLENBQUNBLFFBQU8sdUJBQXVCLE9BQU8sWUFBWSxlQUNsRCxPQUFPLFFBQVEsVUFBVSxZQUFZO0FBQ3ZDLGdCQUFRO0FBQUEsVUFDTjtBQUFBLFFBRUY7QUFBQSxNQUNGO0FBRUEsZUFBUyxvQkFBcUI7QUFFNUIsWUFBSTtBQUNGLGNBQUksTUFBTSxJQUFJLFdBQVcsQ0FBQztBQUMxQixjQUFJLFFBQVEsRUFBRSxLQUFLLFdBQVk7QUFBRSxtQkFBTztBQUFBLFVBQUcsRUFBRTtBQUM3QyxpQkFBTyxlQUFlLE9BQU8sV0FBVyxTQUFTO0FBQ2pELGlCQUFPLGVBQWUsS0FBSyxLQUFLO0FBQ2hDLGlCQUFPLElBQUksSUFBSSxNQUFNO0FBQUEsUUFDdkIsU0FBUyxHQUFHO0FBQ1YsaUJBQU87QUFBQSxRQUNUO0FBQUEsTUFDRjtBQUVBLGFBQU8sZUFBZUEsUUFBTyxXQUFXLFVBQVU7QUFBQSxRQUNoRCxZQUFZO0FBQUEsUUFDWixLQUFLLFdBQVk7QUFDZixjQUFJLENBQUNBLFFBQU8sU0FBUyxJQUFJLEVBQUcsUUFBTztBQUNuQyxpQkFBTyxLQUFLO0FBQUEsUUFDZDtBQUFBLE1BQ0YsQ0FBQztBQUVELGFBQU8sZUFBZUEsUUFBTyxXQUFXLFVBQVU7QUFBQSxRQUNoRCxZQUFZO0FBQUEsUUFDWixLQUFLLFdBQVk7QUFDZixjQUFJLENBQUNBLFFBQU8sU0FBUyxJQUFJLEVBQUcsUUFBTztBQUNuQyxpQkFBTyxLQUFLO0FBQUEsUUFDZDtBQUFBLE1BQ0YsQ0FBQztBQUVELGVBQVMsYUFBYyxRQUFRO0FBQzdCLFlBQUksU0FBUyxjQUFjO0FBQ3pCLGdCQUFNLElBQUksV0FBVyxnQkFBZ0IsU0FBUyxnQ0FBZ0M7QUFBQSxRQUNoRjtBQUVBLFlBQUksTUFBTSxJQUFJLFdBQVcsTUFBTTtBQUMvQixlQUFPLGVBQWUsS0FBS0EsUUFBTyxTQUFTO0FBQzNDLGVBQU87QUFBQSxNQUNUO0FBWUEsZUFBU0EsUUFBUSxLQUFLLGtCQUFrQixRQUFRO0FBRTlDLFlBQUksT0FBTyxRQUFRLFVBQVU7QUFDM0IsY0FBSSxPQUFPLHFCQUFxQixVQUFVO0FBQ3hDLGtCQUFNLElBQUk7QUFBQSxjQUNSO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFDQSxpQkFBTyxZQUFZLEdBQUc7QUFBQSxRQUN4QjtBQUNBLGVBQU8sS0FBSyxLQUFLLGtCQUFrQixNQUFNO0FBQUEsTUFDM0M7QUFFQSxNQUFBQSxRQUFPLFdBQVc7QUFFbEIsZUFBUyxLQUFNLE9BQU8sa0JBQWtCLFFBQVE7QUFDOUMsWUFBSSxPQUFPLFVBQVUsVUFBVTtBQUM3QixpQkFBTyxXQUFXLE9BQU8sZ0JBQWdCO0FBQUEsUUFDM0M7QUFFQSxZQUFJLFlBQVksT0FBTyxLQUFLLEdBQUc7QUFDN0IsaUJBQU8sY0FBYyxLQUFLO0FBQUEsUUFDNUI7QUFFQSxZQUFJLFNBQVMsTUFBTTtBQUNqQixnQkFBTSxJQUFJO0FBQUEsWUFDUixvSEFDMEMsT0FBTztBQUFBLFVBQ25EO0FBQUEsUUFDRjtBQUVBLFlBQUlDLFlBQVcsT0FBTyxXQUFXLEtBQzVCLFNBQVNBLFlBQVcsTUFBTSxRQUFRLFdBQVcsR0FBSTtBQUNwRCxpQkFBTyxnQkFBZ0IsT0FBTyxrQkFBa0IsTUFBTTtBQUFBLFFBQ3hEO0FBRUEsWUFBSSxPQUFPLHNCQUFzQixnQkFDNUJBLFlBQVcsT0FBTyxpQkFBaUIsS0FDbkMsU0FBU0EsWUFBVyxNQUFNLFFBQVEsaUJBQWlCLElBQUs7QUFDM0QsaUJBQU8sZ0JBQWdCLE9BQU8sa0JBQWtCLE1BQU07QUFBQSxRQUN4RDtBQUVBLFlBQUksT0FBTyxVQUFVLFVBQVU7QUFDN0IsZ0JBQU0sSUFBSTtBQUFBLFlBQ1I7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUVBLFlBQUksVUFBVSxNQUFNLFdBQVcsTUFBTSxRQUFRO0FBQzdDLFlBQUksV0FBVyxRQUFRLFlBQVksT0FBTztBQUN4QyxpQkFBT0QsUUFBTyxLQUFLLFNBQVMsa0JBQWtCLE1BQU07QUFBQSxRQUN0RDtBQUVBLFlBQUksSUFBSSxXQUFXLEtBQUs7QUFDeEIsWUFBSSxFQUFHLFFBQU87QUFFZCxZQUFJLE9BQU8sV0FBVyxlQUFlLE9BQU8sZUFBZSxRQUN2RCxPQUFPLE1BQU0sT0FBTyxXQUFXLE1BQU0sWUFBWTtBQUNuRCxpQkFBT0EsUUFBTztBQUFBLFlBQ1osTUFBTSxPQUFPLFdBQVcsRUFBRSxRQUFRO0FBQUEsWUFBRztBQUFBLFlBQWtCO0FBQUEsVUFDekQ7QUFBQSxRQUNGO0FBRUEsY0FBTSxJQUFJO0FBQUEsVUFDUixvSEFDMEMsT0FBTztBQUFBLFFBQ25EO0FBQUEsTUFDRjtBQVVBLE1BQUFBLFFBQU8sT0FBTyxTQUFVLE9BQU8sa0JBQWtCLFFBQVE7QUFDdkQsZUFBTyxLQUFLLE9BQU8sa0JBQWtCLE1BQU07QUFBQSxNQUM3QztBQUlBLGFBQU8sZUFBZUEsUUFBTyxXQUFXLFdBQVcsU0FBUztBQUM1RCxhQUFPLGVBQWVBLFNBQVEsVUFBVTtBQUV4QyxlQUFTLFdBQVlFLE9BQU07QUFDekIsWUFBSSxPQUFPQSxVQUFTLFVBQVU7QUFDNUIsZ0JBQU0sSUFBSSxVQUFVLHdDQUF3QztBQUFBLFFBQzlELFdBQVdBLFFBQU8sR0FBRztBQUNuQixnQkFBTSxJQUFJLFdBQVcsZ0JBQWdCQSxRQUFPLGdDQUFnQztBQUFBLFFBQzlFO0FBQUEsTUFDRjtBQUVBLGVBQVMsTUFBT0EsT0FBTSxNQUFNLFVBQVU7QUFDcEMsbUJBQVdBLEtBQUk7QUFDZixZQUFJQSxTQUFRLEdBQUc7QUFDYixpQkFBTyxhQUFhQSxLQUFJO0FBQUEsUUFDMUI7QUFDQSxZQUFJLFNBQVMsUUFBVztBQUl0QixpQkFBTyxPQUFPLGFBQWEsV0FDdkIsYUFBYUEsS0FBSSxFQUFFLEtBQUssTUFBTSxRQUFRLElBQ3RDLGFBQWFBLEtBQUksRUFBRSxLQUFLLElBQUk7QUFBQSxRQUNsQztBQUNBLGVBQU8sYUFBYUEsS0FBSTtBQUFBLE1BQzFCO0FBTUEsTUFBQUYsUUFBTyxRQUFRLFNBQVVFLE9BQU0sTUFBTSxVQUFVO0FBQzdDLGVBQU8sTUFBTUEsT0FBTSxNQUFNLFFBQVE7QUFBQSxNQUNuQztBQUVBLGVBQVMsWUFBYUEsT0FBTTtBQUMxQixtQkFBV0EsS0FBSTtBQUNmLGVBQU8sYUFBYUEsUUFBTyxJQUFJLElBQUksUUFBUUEsS0FBSSxJQUFJLENBQUM7QUFBQSxNQUN0RDtBQUtBLE1BQUFGLFFBQU8sY0FBYyxTQUFVRSxPQUFNO0FBQ25DLGVBQU8sWUFBWUEsS0FBSTtBQUFBLE1BQ3pCO0FBSUEsTUFBQUYsUUFBTyxrQkFBa0IsU0FBVUUsT0FBTTtBQUN2QyxlQUFPLFlBQVlBLEtBQUk7QUFBQSxNQUN6QjtBQUVBLGVBQVMsV0FBWSxRQUFRLFVBQVU7QUFDckMsWUFBSSxPQUFPLGFBQWEsWUFBWSxhQUFhLElBQUk7QUFDbkQscUJBQVc7QUFBQSxRQUNiO0FBRUEsWUFBSSxDQUFDRixRQUFPLFdBQVcsUUFBUSxHQUFHO0FBQ2hDLGdCQUFNLElBQUksVUFBVSx1QkFBdUIsUUFBUTtBQUFBLFFBQ3JEO0FBRUEsWUFBSSxTQUFTLFdBQVcsUUFBUSxRQUFRLElBQUk7QUFDNUMsWUFBSSxNQUFNLGFBQWEsTUFBTTtBQUU3QixZQUFJLFNBQVMsSUFBSSxNQUFNLFFBQVEsUUFBUTtBQUV2QyxZQUFJLFdBQVcsUUFBUTtBQUlyQixnQkFBTSxJQUFJLE1BQU0sR0FBRyxNQUFNO0FBQUEsUUFDM0I7QUFFQSxlQUFPO0FBQUEsTUFDVDtBQUVBLGVBQVMsY0FBZSxPQUFPO0FBQzdCLFlBQUksU0FBUyxNQUFNLFNBQVMsSUFBSSxJQUFJLFFBQVEsTUFBTSxNQUFNLElBQUk7QUFDNUQsWUFBSSxNQUFNLGFBQWEsTUFBTTtBQUM3QixpQkFBUyxJQUFJLEdBQUcsSUFBSSxRQUFRLEtBQUssR0FBRztBQUNsQyxjQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSTtBQUFBLFFBQ3RCO0FBQ0EsZUFBTztBQUFBLE1BQ1Q7QUFFQSxlQUFTLGNBQWUsV0FBVztBQUNqQyxZQUFJQyxZQUFXLFdBQVcsVUFBVSxHQUFHO0FBQ3JDLGNBQUksT0FBTyxJQUFJLFdBQVcsU0FBUztBQUNuQyxpQkFBTyxnQkFBZ0IsS0FBSyxRQUFRLEtBQUssWUFBWSxLQUFLLFVBQVU7QUFBQSxRQUN0RTtBQUNBLGVBQU8sY0FBYyxTQUFTO0FBQUEsTUFDaEM7QUFFQSxlQUFTLGdCQUFpQixPQUFPLFlBQVksUUFBUTtBQUNuRCxZQUFJLGFBQWEsS0FBSyxNQUFNLGFBQWEsWUFBWTtBQUNuRCxnQkFBTSxJQUFJLFdBQVcsc0NBQXNDO0FBQUEsUUFDN0Q7QUFFQSxZQUFJLE1BQU0sYUFBYSxjQUFjLFVBQVUsSUFBSTtBQUNqRCxnQkFBTSxJQUFJLFdBQVcsc0NBQXNDO0FBQUEsUUFDN0Q7QUFFQSxZQUFJO0FBQ0osWUFBSSxlQUFlLFVBQWEsV0FBVyxRQUFXO0FBQ3BELGdCQUFNLElBQUksV0FBVyxLQUFLO0FBQUEsUUFDNUIsV0FBVyxXQUFXLFFBQVc7QUFDL0IsZ0JBQU0sSUFBSSxXQUFXLE9BQU8sVUFBVTtBQUFBLFFBQ3hDLE9BQU87QUFDTCxnQkFBTSxJQUFJLFdBQVcsT0FBTyxZQUFZLE1BQU07QUFBQSxRQUNoRDtBQUdBLGVBQU8sZUFBZSxLQUFLRCxRQUFPLFNBQVM7QUFFM0MsZUFBTztBQUFBLE1BQ1Q7QUFFQSxlQUFTLFdBQVksS0FBSztBQUN4QixZQUFJQSxRQUFPLFNBQVMsR0FBRyxHQUFHO0FBQ3hCLGNBQUksTUFBTSxRQUFRLElBQUksTUFBTSxJQUFJO0FBQ2hDLGNBQUksTUFBTSxhQUFhLEdBQUc7QUFFMUIsY0FBSSxJQUFJLFdBQVcsR0FBRztBQUNwQixtQkFBTztBQUFBLFVBQ1Q7QUFFQSxjQUFJLEtBQUssS0FBSyxHQUFHLEdBQUcsR0FBRztBQUN2QixpQkFBTztBQUFBLFFBQ1Q7QUFFQSxZQUFJLElBQUksV0FBVyxRQUFXO0FBQzVCLGNBQUksT0FBTyxJQUFJLFdBQVcsWUFBWSxZQUFZLElBQUksTUFBTSxHQUFHO0FBQzdELG1CQUFPLGFBQWEsQ0FBQztBQUFBLFVBQ3ZCO0FBQ0EsaUJBQU8sY0FBYyxHQUFHO0FBQUEsUUFDMUI7QUFFQSxZQUFJLElBQUksU0FBUyxZQUFZLE1BQU0sUUFBUSxJQUFJLElBQUksR0FBRztBQUNwRCxpQkFBTyxjQUFjLElBQUksSUFBSTtBQUFBLFFBQy9CO0FBQUEsTUFDRjtBQUVBLGVBQVMsUUFBUyxRQUFRO0FBR3hCLFlBQUksVUFBVSxjQUFjO0FBQzFCLGdCQUFNLElBQUksV0FBVyw0REFDYSxhQUFhLFNBQVMsRUFBRSxJQUFJLFFBQVE7QUFBQSxRQUN4RTtBQUNBLGVBQU8sU0FBUztBQUFBLE1BQ2xCO0FBRUEsZUFBUyxXQUFZLFFBQVE7QUFDM0IsWUFBSSxDQUFDLFVBQVUsUUFBUTtBQUNyQixtQkFBUztBQUFBLFFBQ1g7QUFDQSxlQUFPQSxRQUFPLE1BQU0sQ0FBQyxNQUFNO0FBQUEsTUFDN0I7QUFFQSxNQUFBQSxRQUFPLFdBQVcsU0FBUyxTQUFVLEdBQUc7QUFDdEMsZUFBTyxLQUFLLFFBQVEsRUFBRSxjQUFjLFFBQ2xDLE1BQU1BLFFBQU87QUFBQSxNQUNqQjtBQUVBLE1BQUFBLFFBQU8sVUFBVSxTQUFTLFFBQVNHLElBQUcsR0FBRztBQUN2QyxZQUFJRixZQUFXRSxJQUFHLFVBQVUsRUFBRyxDQUFBQSxLQUFJSCxRQUFPLEtBQUtHLElBQUdBLEdBQUUsUUFBUUEsR0FBRSxVQUFVO0FBQ3hFLFlBQUlGLFlBQVcsR0FBRyxVQUFVLEVBQUcsS0FBSUQsUUFBTyxLQUFLLEdBQUcsRUFBRSxRQUFRLEVBQUUsVUFBVTtBQUN4RSxZQUFJLENBQUNBLFFBQU8sU0FBU0csRUFBQyxLQUFLLENBQUNILFFBQU8sU0FBUyxDQUFDLEdBQUc7QUFDOUMsZ0JBQU0sSUFBSTtBQUFBLFlBQ1I7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUVBLFlBQUlHLE9BQU0sRUFBRyxRQUFPO0FBRXBCLFlBQUksSUFBSUEsR0FBRTtBQUNWLFlBQUksSUFBSSxFQUFFO0FBRVYsaUJBQVMsSUFBSSxHQUFHLE1BQU0sS0FBSyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksS0FBSyxFQUFFLEdBQUc7QUFDbEQsY0FBSUEsR0FBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUc7QUFDakIsZ0JBQUlBLEdBQUUsQ0FBQztBQUNQLGdCQUFJLEVBQUUsQ0FBQztBQUNQO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFFQSxZQUFJLElBQUksRUFBRyxRQUFPO0FBQ2xCLFlBQUksSUFBSSxFQUFHLFFBQU87QUFDbEIsZUFBTztBQUFBLE1BQ1Q7QUFFQSxNQUFBSCxRQUFPLGFBQWEsU0FBUyxXQUFZLFVBQVU7QUFDakQsZ0JBQVEsT0FBTyxRQUFRLEVBQUUsWUFBWSxHQUFHO0FBQUEsVUFDdEMsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUNILG1CQUFPO0FBQUEsVUFDVDtBQUNFLG1CQUFPO0FBQUEsUUFDWDtBQUFBLE1BQ0Y7QUFFQSxNQUFBQSxRQUFPLFNBQVMsU0FBU0ksUUFBUSxNQUFNLFFBQVE7QUFDN0MsWUFBSSxDQUFDLE1BQU0sUUFBUSxJQUFJLEdBQUc7QUFDeEIsZ0JBQU0sSUFBSSxVQUFVLDZDQUE2QztBQUFBLFFBQ25FO0FBRUEsWUFBSSxLQUFLLFdBQVcsR0FBRztBQUNyQixpQkFBT0osUUFBTyxNQUFNLENBQUM7QUFBQSxRQUN2QjtBQUVBLFlBQUk7QUFDSixZQUFJLFdBQVcsUUFBVztBQUN4QixtQkFBUztBQUNULGVBQUssSUFBSSxHQUFHLElBQUksS0FBSyxRQUFRLEVBQUUsR0FBRztBQUNoQyxzQkFBVSxLQUFLLENBQUMsRUFBRTtBQUFBLFVBQ3BCO0FBQUEsUUFDRjtBQUVBLFlBQUksU0FBU0EsUUFBTyxZQUFZLE1BQU07QUFDdEMsWUFBSSxNQUFNO0FBQ1YsYUFBSyxJQUFJLEdBQUcsSUFBSSxLQUFLLFFBQVEsRUFBRSxHQUFHO0FBQ2hDLGNBQUksTUFBTSxLQUFLLENBQUM7QUFDaEIsY0FBSUMsWUFBVyxLQUFLLFVBQVUsR0FBRztBQUMvQixnQkFBSSxNQUFNLElBQUksU0FBUyxPQUFPLFFBQVE7QUFDcEMsY0FBQUQsUUFBTyxLQUFLLEdBQUcsRUFBRSxLQUFLLFFBQVEsR0FBRztBQUFBLFlBQ25DLE9BQU87QUFDTCx5QkFBVyxVQUFVLElBQUk7QUFBQSxnQkFDdkI7QUFBQSxnQkFDQTtBQUFBLGdCQUNBO0FBQUEsY0FDRjtBQUFBLFlBQ0Y7QUFBQSxVQUNGLFdBQVcsQ0FBQ0EsUUFBTyxTQUFTLEdBQUcsR0FBRztBQUNoQyxrQkFBTSxJQUFJLFVBQVUsNkNBQTZDO0FBQUEsVUFDbkUsT0FBTztBQUNMLGdCQUFJLEtBQUssUUFBUSxHQUFHO0FBQUEsVUFDdEI7QUFDQSxpQkFBTyxJQUFJO0FBQUEsUUFDYjtBQUNBLGVBQU87QUFBQSxNQUNUO0FBRUEsZUFBUyxXQUFZLFFBQVEsVUFBVTtBQUNyQyxZQUFJQSxRQUFPLFNBQVMsTUFBTSxHQUFHO0FBQzNCLGlCQUFPLE9BQU87QUFBQSxRQUNoQjtBQUNBLFlBQUksWUFBWSxPQUFPLE1BQU0sS0FBS0MsWUFBVyxRQUFRLFdBQVcsR0FBRztBQUNqRSxpQkFBTyxPQUFPO0FBQUEsUUFDaEI7QUFDQSxZQUFJLE9BQU8sV0FBVyxVQUFVO0FBQzlCLGdCQUFNLElBQUk7QUFBQSxZQUNSLDZGQUNtQixPQUFPO0FBQUEsVUFDNUI7QUFBQSxRQUNGO0FBRUEsWUFBSSxNQUFNLE9BQU87QUFDakIsWUFBSSxZQUFhLFVBQVUsU0FBUyxLQUFLLFVBQVUsQ0FBQyxNQUFNO0FBQzFELFlBQUksQ0FBQyxhQUFhLFFBQVEsRUFBRyxRQUFPO0FBR3BDLFlBQUksY0FBYztBQUNsQixtQkFBUztBQUNQLGtCQUFRLFVBQVU7QUFBQSxZQUNoQixLQUFLO0FBQUEsWUFDTCxLQUFLO0FBQUEsWUFDTCxLQUFLO0FBQ0gscUJBQU87QUFBQSxZQUNULEtBQUs7QUFBQSxZQUNMLEtBQUs7QUFDSCxxQkFBTyxZQUFZLE1BQU0sRUFBRTtBQUFBLFlBQzdCLEtBQUs7QUFBQSxZQUNMLEtBQUs7QUFBQSxZQUNMLEtBQUs7QUFBQSxZQUNMLEtBQUs7QUFDSCxxQkFBTyxNQUFNO0FBQUEsWUFDZixLQUFLO0FBQ0gscUJBQU8sUUFBUTtBQUFBLFlBQ2pCLEtBQUs7QUFDSCxxQkFBTyxjQUFjLE1BQU0sRUFBRTtBQUFBLFlBQy9CO0FBQ0Usa0JBQUksYUFBYTtBQUNmLHVCQUFPLFlBQVksS0FBSyxZQUFZLE1BQU0sRUFBRTtBQUFBLGNBQzlDO0FBQ0EsMEJBQVksS0FBSyxVQUFVLFlBQVk7QUFDdkMsNEJBQWM7QUFBQSxVQUNsQjtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQ0EsTUFBQUQsUUFBTyxhQUFhO0FBRXBCLGVBQVMsYUFBYyxVQUFVSyxRQUFPQyxNQUFLO0FBQzNDLFlBQUksY0FBYztBQVNsQixZQUFJRCxXQUFVLFVBQWFBLFNBQVEsR0FBRztBQUNwQyxVQUFBQSxTQUFRO0FBQUEsUUFDVjtBQUdBLFlBQUlBLFNBQVEsS0FBSyxRQUFRO0FBQ3ZCLGlCQUFPO0FBQUEsUUFDVDtBQUVBLFlBQUlDLFNBQVEsVUFBYUEsT0FBTSxLQUFLLFFBQVE7QUFDMUMsVUFBQUEsT0FBTSxLQUFLO0FBQUEsUUFDYjtBQUVBLFlBQUlBLFFBQU8sR0FBRztBQUNaLGlCQUFPO0FBQUEsUUFDVDtBQUdBLFFBQUFBLFVBQVM7QUFDVCxRQUFBRCxZQUFXO0FBRVgsWUFBSUMsUUFBT0QsUUFBTztBQUNoQixpQkFBTztBQUFBLFFBQ1Q7QUFFQSxZQUFJLENBQUMsU0FBVSxZQUFXO0FBRTFCLGVBQU8sTUFBTTtBQUNYLGtCQUFRLFVBQVU7QUFBQSxZQUNoQixLQUFLO0FBQ0gscUJBQU8sU0FBUyxNQUFNQSxRQUFPQyxJQUFHO0FBQUEsWUFFbEMsS0FBSztBQUFBLFlBQ0wsS0FBSztBQUNILHFCQUFPLFVBQVUsTUFBTUQsUUFBT0MsSUFBRztBQUFBLFlBRW5DLEtBQUs7QUFDSCxxQkFBTyxXQUFXLE1BQU1ELFFBQU9DLElBQUc7QUFBQSxZQUVwQyxLQUFLO0FBQUEsWUFDTCxLQUFLO0FBQ0gscUJBQU8sWUFBWSxNQUFNRCxRQUFPQyxJQUFHO0FBQUEsWUFFckMsS0FBSztBQUNILHFCQUFPLFlBQVksTUFBTUQsUUFBT0MsSUFBRztBQUFBLFlBRXJDLEtBQUs7QUFBQSxZQUNMLEtBQUs7QUFBQSxZQUNMLEtBQUs7QUFBQSxZQUNMLEtBQUs7QUFDSCxxQkFBTyxhQUFhLE1BQU1ELFFBQU9DLElBQUc7QUFBQSxZQUV0QztBQUNFLGtCQUFJLFlBQWEsT0FBTSxJQUFJLFVBQVUsdUJBQXVCLFFBQVE7QUFDcEUsMEJBQVksV0FBVyxJQUFJLFlBQVk7QUFDdkMsNEJBQWM7QUFBQSxVQUNsQjtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBUUEsTUFBQU4sUUFBTyxVQUFVLFlBQVk7QUFFN0IsZUFBUyxLQUFNLEdBQUcsR0FBRyxHQUFHO0FBQ3RCLFlBQUksSUFBSSxFQUFFLENBQUM7QUFDWCxVQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDVixVQUFFLENBQUMsSUFBSTtBQUFBLE1BQ1Q7QUFFQSxNQUFBQSxRQUFPLFVBQVUsU0FBUyxTQUFTLFNBQVU7QUFDM0MsWUFBSSxNQUFNLEtBQUs7QUFDZixZQUFJLE1BQU0sTUFBTSxHQUFHO0FBQ2pCLGdCQUFNLElBQUksV0FBVywyQ0FBMkM7QUFBQSxRQUNsRTtBQUNBLGlCQUFTLElBQUksR0FBRyxJQUFJLEtBQUssS0FBSyxHQUFHO0FBQy9CLGVBQUssTUFBTSxHQUFHLElBQUksQ0FBQztBQUFBLFFBQ3JCO0FBQ0EsZUFBTztBQUFBLE1BQ1Q7QUFFQSxNQUFBQSxRQUFPLFVBQVUsU0FBUyxTQUFTLFNBQVU7QUFDM0MsWUFBSSxNQUFNLEtBQUs7QUFDZixZQUFJLE1BQU0sTUFBTSxHQUFHO0FBQ2pCLGdCQUFNLElBQUksV0FBVywyQ0FBMkM7QUFBQSxRQUNsRTtBQUNBLGlCQUFTLElBQUksR0FBRyxJQUFJLEtBQUssS0FBSyxHQUFHO0FBQy9CLGVBQUssTUFBTSxHQUFHLElBQUksQ0FBQztBQUNuQixlQUFLLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQztBQUFBLFFBQ3pCO0FBQ0EsZUFBTztBQUFBLE1BQ1Q7QUFFQSxNQUFBQSxRQUFPLFVBQVUsU0FBUyxTQUFTLFNBQVU7QUFDM0MsWUFBSSxNQUFNLEtBQUs7QUFDZixZQUFJLE1BQU0sTUFBTSxHQUFHO0FBQ2pCLGdCQUFNLElBQUksV0FBVywyQ0FBMkM7QUFBQSxRQUNsRTtBQUNBLGlCQUFTLElBQUksR0FBRyxJQUFJLEtBQUssS0FBSyxHQUFHO0FBQy9CLGVBQUssTUFBTSxHQUFHLElBQUksQ0FBQztBQUNuQixlQUFLLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQztBQUN2QixlQUFLLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQztBQUN2QixlQUFLLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQztBQUFBLFFBQ3pCO0FBQ0EsZUFBTztBQUFBLE1BQ1Q7QUFFQSxNQUFBQSxRQUFPLFVBQVUsV0FBVyxTQUFTTyxZQUFZO0FBQy9DLFlBQUksU0FBUyxLQUFLO0FBQ2xCLFlBQUksV0FBVyxFQUFHLFFBQU87QUFDekIsWUFBSSxVQUFVLFdBQVcsRUFBRyxRQUFPLFVBQVUsTUFBTSxHQUFHLE1BQU07QUFDNUQsZUFBTyxhQUFhLE1BQU0sTUFBTSxTQUFTO0FBQUEsTUFDM0M7QUFFQSxNQUFBUCxRQUFPLFVBQVUsaUJBQWlCQSxRQUFPLFVBQVU7QUFFbkQsTUFBQUEsUUFBTyxVQUFVLFNBQVMsU0FBUyxPQUFRLEdBQUc7QUFDNUMsWUFBSSxDQUFDQSxRQUFPLFNBQVMsQ0FBQyxFQUFHLE9BQU0sSUFBSSxVQUFVLDJCQUEyQjtBQUN4RSxZQUFJLFNBQVMsRUFBRyxRQUFPO0FBQ3ZCLGVBQU9BLFFBQU8sUUFBUSxNQUFNLENBQUMsTUFBTTtBQUFBLE1BQ3JDO0FBRUEsTUFBQUEsUUFBTyxVQUFVLFVBQVUsU0FBU1EsV0FBVztBQUM3QyxZQUFJLE1BQU07QUFDVixZQUFJQyxPQUFNLFFBQVE7QUFDbEIsY0FBTSxLQUFLLFNBQVMsT0FBTyxHQUFHQSxJQUFHLEVBQUUsUUFBUSxXQUFXLEtBQUssRUFBRSxLQUFLO0FBQ2xFLFlBQUksS0FBSyxTQUFTQSxLQUFLLFFBQU87QUFDOUIsZUFBTyxhQUFhLE1BQU07QUFBQSxNQUM1QjtBQUNBLFVBQUkscUJBQXFCO0FBQ3ZCLFFBQUFULFFBQU8sVUFBVSxtQkFBbUIsSUFBSUEsUUFBTyxVQUFVO0FBQUEsTUFDM0Q7QUFFQSxNQUFBQSxRQUFPLFVBQVUsVUFBVSxTQUFTLFFBQVMsUUFBUUssUUFBT0MsTUFBSyxXQUFXLFNBQVM7QUFDbkYsWUFBSUwsWUFBVyxRQUFRLFVBQVUsR0FBRztBQUNsQyxtQkFBU0QsUUFBTyxLQUFLLFFBQVEsT0FBTyxRQUFRLE9BQU8sVUFBVTtBQUFBLFFBQy9EO0FBQ0EsWUFBSSxDQUFDQSxRQUFPLFNBQVMsTUFBTSxHQUFHO0FBQzVCLGdCQUFNLElBQUk7QUFBQSxZQUNSLG1GQUNvQixPQUFPO0FBQUEsVUFDN0I7QUFBQSxRQUNGO0FBRUEsWUFBSUssV0FBVSxRQUFXO0FBQ3ZCLFVBQUFBLFNBQVE7QUFBQSxRQUNWO0FBQ0EsWUFBSUMsU0FBUSxRQUFXO0FBQ3JCLFVBQUFBLE9BQU0sU0FBUyxPQUFPLFNBQVM7QUFBQSxRQUNqQztBQUNBLFlBQUksY0FBYyxRQUFXO0FBQzNCLHNCQUFZO0FBQUEsUUFDZDtBQUNBLFlBQUksWUFBWSxRQUFXO0FBQ3pCLG9CQUFVLEtBQUs7QUFBQSxRQUNqQjtBQUVBLFlBQUlELFNBQVEsS0FBS0MsT0FBTSxPQUFPLFVBQVUsWUFBWSxLQUFLLFVBQVUsS0FBSyxRQUFRO0FBQzlFLGdCQUFNLElBQUksV0FBVyxvQkFBb0I7QUFBQSxRQUMzQztBQUVBLFlBQUksYUFBYSxXQUFXRCxVQUFTQyxNQUFLO0FBQ3hDLGlCQUFPO0FBQUEsUUFDVDtBQUNBLFlBQUksYUFBYSxTQUFTO0FBQ3hCLGlCQUFPO0FBQUEsUUFDVDtBQUNBLFlBQUlELFVBQVNDLE1BQUs7QUFDaEIsaUJBQU87QUFBQSxRQUNUO0FBRUEsUUFBQUQsWUFBVztBQUNYLFFBQUFDLFVBQVM7QUFDVCx1QkFBZTtBQUNmLHFCQUFhO0FBRWIsWUFBSSxTQUFTLE9BQVEsUUFBTztBQUU1QixZQUFJLElBQUksVUFBVTtBQUNsQixZQUFJLElBQUlBLE9BQU1EO0FBQ2QsWUFBSSxNQUFNLEtBQUssSUFBSSxHQUFHLENBQUM7QUFFdkIsWUFBSSxXQUFXLEtBQUssTUFBTSxXQUFXLE9BQU87QUFDNUMsWUFBSSxhQUFhLE9BQU8sTUFBTUEsUUFBT0MsSUFBRztBQUV4QyxpQkFBUyxJQUFJLEdBQUcsSUFBSSxLQUFLLEVBQUUsR0FBRztBQUM1QixjQUFJLFNBQVMsQ0FBQyxNQUFNLFdBQVcsQ0FBQyxHQUFHO0FBQ2pDLGdCQUFJLFNBQVMsQ0FBQztBQUNkLGdCQUFJLFdBQVcsQ0FBQztBQUNoQjtBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBRUEsWUFBSSxJQUFJLEVBQUcsUUFBTztBQUNsQixZQUFJLElBQUksRUFBRyxRQUFPO0FBQ2xCLGVBQU87QUFBQSxNQUNUO0FBV0EsZUFBUyxxQkFBc0IsUUFBUSxLQUFLLFlBQVksVUFBVSxLQUFLO0FBRXJFLFlBQUksT0FBTyxXQUFXLEVBQUcsUUFBTztBQUdoQyxZQUFJLE9BQU8sZUFBZSxVQUFVO0FBQ2xDLHFCQUFXO0FBQ1gsdUJBQWE7QUFBQSxRQUNmLFdBQVcsYUFBYSxZQUFZO0FBQ2xDLHVCQUFhO0FBQUEsUUFDZixXQUFXLGFBQWEsYUFBYTtBQUNuQyx1QkFBYTtBQUFBLFFBQ2Y7QUFDQSxxQkFBYSxDQUFDO0FBQ2QsWUFBSSxZQUFZLFVBQVUsR0FBRztBQUUzQix1QkFBYSxNQUFNLElBQUssT0FBTyxTQUFTO0FBQUEsUUFDMUM7QUFHQSxZQUFJLGFBQWEsRUFBRyxjQUFhLE9BQU8sU0FBUztBQUNqRCxZQUFJLGNBQWMsT0FBTyxRQUFRO0FBQy9CLGNBQUksSUFBSyxRQUFPO0FBQUEsY0FDWCxjQUFhLE9BQU8sU0FBUztBQUFBLFFBQ3BDLFdBQVcsYUFBYSxHQUFHO0FBQ3pCLGNBQUksSUFBSyxjQUFhO0FBQUEsY0FDakIsUUFBTztBQUFBLFFBQ2Q7QUFHQSxZQUFJLE9BQU8sUUFBUSxVQUFVO0FBQzNCLGdCQUFNTixRQUFPLEtBQUssS0FBSyxRQUFRO0FBQUEsUUFDakM7QUFHQSxZQUFJQSxRQUFPLFNBQVMsR0FBRyxHQUFHO0FBRXhCLGNBQUksSUFBSSxXQUFXLEdBQUc7QUFDcEIsbUJBQU87QUFBQSxVQUNUO0FBQ0EsaUJBQU8sYUFBYSxRQUFRLEtBQUssWUFBWSxVQUFVLEdBQUc7QUFBQSxRQUM1RCxXQUFXLE9BQU8sUUFBUSxVQUFVO0FBQ2xDLGdCQUFNLE1BQU07QUFDWixjQUFJLE9BQU8sV0FBVyxVQUFVLFlBQVksWUFBWTtBQUN0RCxnQkFBSSxLQUFLO0FBQ1AscUJBQU8sV0FBVyxVQUFVLFFBQVEsS0FBSyxRQUFRLEtBQUssVUFBVTtBQUFBLFlBQ2xFLE9BQU87QUFDTCxxQkFBTyxXQUFXLFVBQVUsWUFBWSxLQUFLLFFBQVEsS0FBSyxVQUFVO0FBQUEsWUFDdEU7QUFBQSxVQUNGO0FBQ0EsaUJBQU8sYUFBYSxRQUFRLENBQUMsR0FBRyxHQUFHLFlBQVksVUFBVSxHQUFHO0FBQUEsUUFDOUQ7QUFFQSxjQUFNLElBQUksVUFBVSxzQ0FBc0M7QUFBQSxNQUM1RDtBQUVBLGVBQVMsYUFBYyxLQUFLLEtBQUssWUFBWSxVQUFVLEtBQUs7QUFDMUQsWUFBSSxZQUFZO0FBQ2hCLFlBQUksWUFBWSxJQUFJO0FBQ3BCLFlBQUksWUFBWSxJQUFJO0FBRXBCLFlBQUksYUFBYSxRQUFXO0FBQzFCLHFCQUFXLE9BQU8sUUFBUSxFQUFFLFlBQVk7QUFDeEMsY0FBSSxhQUFhLFVBQVUsYUFBYSxXQUNwQyxhQUFhLGFBQWEsYUFBYSxZQUFZO0FBQ3JELGdCQUFJLElBQUksU0FBUyxLQUFLLElBQUksU0FBUyxHQUFHO0FBQ3BDLHFCQUFPO0FBQUEsWUFDVDtBQUNBLHdCQUFZO0FBQ1oseUJBQWE7QUFDYix5QkFBYTtBQUNiLDBCQUFjO0FBQUEsVUFDaEI7QUFBQSxRQUNGO0FBRUEsaUJBQVNVLE1BQU0sS0FBS0MsSUFBRztBQUNyQixjQUFJLGNBQWMsR0FBRztBQUNuQixtQkFBTyxJQUFJQSxFQUFDO0FBQUEsVUFDZCxPQUFPO0FBQ0wsbUJBQU8sSUFBSSxhQUFhQSxLQUFJLFNBQVM7QUFBQSxVQUN2QztBQUFBLFFBQ0Y7QUFFQSxZQUFJO0FBQ0osWUFBSSxLQUFLO0FBQ1AsY0FBSSxhQUFhO0FBQ2pCLGVBQUssSUFBSSxZQUFZLElBQUksV0FBVyxLQUFLO0FBQ3ZDLGdCQUFJRCxNQUFLLEtBQUssQ0FBQyxNQUFNQSxNQUFLLEtBQUssZUFBZSxLQUFLLElBQUksSUFBSSxVQUFVLEdBQUc7QUFDdEUsa0JBQUksZUFBZSxHQUFJLGNBQWE7QUFDcEMsa0JBQUksSUFBSSxhQUFhLE1BQU0sVUFBVyxRQUFPLGFBQWE7QUFBQSxZQUM1RCxPQUFPO0FBQ0wsa0JBQUksZUFBZSxHQUFJLE1BQUssSUFBSTtBQUNoQywyQkFBYTtBQUFBLFlBQ2Y7QUFBQSxVQUNGO0FBQUEsUUFDRixPQUFPO0FBQ0wsY0FBSSxhQUFhLFlBQVksVUFBVyxjQUFhLFlBQVk7QUFDakUsZUFBSyxJQUFJLFlBQVksS0FBSyxHQUFHLEtBQUs7QUFDaEMsZ0JBQUksUUFBUTtBQUNaLHFCQUFTLElBQUksR0FBRyxJQUFJLFdBQVcsS0FBSztBQUNsQyxrQkFBSUEsTUFBSyxLQUFLLElBQUksQ0FBQyxNQUFNQSxNQUFLLEtBQUssQ0FBQyxHQUFHO0FBQ3JDLHdCQUFRO0FBQ1I7QUFBQSxjQUNGO0FBQUEsWUFDRjtBQUNBLGdCQUFJLE1BQU8sUUFBTztBQUFBLFVBQ3BCO0FBQUEsUUFDRjtBQUVBLGVBQU87QUFBQSxNQUNUO0FBRUEsTUFBQVYsUUFBTyxVQUFVLFdBQVcsU0FBUyxTQUFVLEtBQUssWUFBWSxVQUFVO0FBQ3hFLGVBQU8sS0FBSyxRQUFRLEtBQUssWUFBWSxRQUFRLE1BQU07QUFBQSxNQUNyRDtBQUVBLE1BQUFBLFFBQU8sVUFBVSxVQUFVLFNBQVMsUUFBUyxLQUFLLFlBQVksVUFBVTtBQUN0RSxlQUFPLHFCQUFxQixNQUFNLEtBQUssWUFBWSxVQUFVLElBQUk7QUFBQSxNQUNuRTtBQUVBLE1BQUFBLFFBQU8sVUFBVSxjQUFjLFNBQVMsWUFBYSxLQUFLLFlBQVksVUFBVTtBQUM5RSxlQUFPLHFCQUFxQixNQUFNLEtBQUssWUFBWSxVQUFVLEtBQUs7QUFBQSxNQUNwRTtBQUVBLGVBQVMsU0FBVSxLQUFLLFFBQVFZLFNBQVEsUUFBUTtBQUM5QyxRQUFBQSxVQUFTLE9BQU9BLE9BQU0sS0FBSztBQUMzQixZQUFJLFlBQVksSUFBSSxTQUFTQTtBQUM3QixZQUFJLENBQUMsUUFBUTtBQUNYLG1CQUFTO0FBQUEsUUFDWCxPQUFPO0FBQ0wsbUJBQVMsT0FBTyxNQUFNO0FBQ3RCLGNBQUksU0FBUyxXQUFXO0FBQ3RCLHFCQUFTO0FBQUEsVUFDWDtBQUFBLFFBQ0Y7QUFFQSxZQUFJLFNBQVMsT0FBTztBQUVwQixZQUFJLFNBQVMsU0FBUyxHQUFHO0FBQ3ZCLG1CQUFTLFNBQVM7QUFBQSxRQUNwQjtBQUNBLGlCQUFTLElBQUksR0FBRyxJQUFJLFFBQVEsRUFBRSxHQUFHO0FBQy9CLGNBQUksU0FBUyxTQUFTLE9BQU8sT0FBTyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEVBQUU7QUFDakQsY0FBSSxZQUFZLE1BQU0sRUFBRyxRQUFPO0FBQ2hDLGNBQUlBLFVBQVMsQ0FBQyxJQUFJO0FBQUEsUUFDcEI7QUFDQSxlQUFPO0FBQUEsTUFDVDtBQUVBLGVBQVMsVUFBVyxLQUFLLFFBQVFBLFNBQVEsUUFBUTtBQUMvQyxlQUFPLFdBQVcsWUFBWSxRQUFRLElBQUksU0FBU0EsT0FBTSxHQUFHLEtBQUtBLFNBQVEsTUFBTTtBQUFBLE1BQ2pGO0FBRUEsZUFBUyxXQUFZLEtBQUssUUFBUUEsU0FBUSxRQUFRO0FBQ2hELGVBQU8sV0FBVyxhQUFhLE1BQU0sR0FBRyxLQUFLQSxTQUFRLE1BQU07QUFBQSxNQUM3RDtBQUVBLGVBQVMsWUFBYSxLQUFLLFFBQVFBLFNBQVEsUUFBUTtBQUNqRCxlQUFPLFdBQVcsY0FBYyxNQUFNLEdBQUcsS0FBS0EsU0FBUSxNQUFNO0FBQUEsTUFDOUQ7QUFFQSxlQUFTLFVBQVcsS0FBSyxRQUFRQSxTQUFRLFFBQVE7QUFDL0MsZUFBTyxXQUFXLGVBQWUsUUFBUSxJQUFJLFNBQVNBLE9BQU0sR0FBRyxLQUFLQSxTQUFRLE1BQU07QUFBQSxNQUNwRjtBQUVBLE1BQUFaLFFBQU8sVUFBVSxRQUFRLFNBQVNhLE9BQU8sUUFBUUQsU0FBUSxRQUFRLFVBQVU7QUFFekUsWUFBSUEsWUFBVyxRQUFXO0FBQ3hCLHFCQUFXO0FBQ1gsbUJBQVMsS0FBSztBQUNkLFVBQUFBLFVBQVM7QUFBQSxRQUVYLFdBQVcsV0FBVyxVQUFhLE9BQU9BLFlBQVcsVUFBVTtBQUM3RCxxQkFBV0E7QUFDWCxtQkFBUyxLQUFLO0FBQ2QsVUFBQUEsVUFBUztBQUFBLFFBRVgsV0FBVyxTQUFTQSxPQUFNLEdBQUc7QUFDM0IsVUFBQUEsVUFBU0EsWUFBVztBQUNwQixjQUFJLFNBQVMsTUFBTSxHQUFHO0FBQ3BCLHFCQUFTLFdBQVc7QUFDcEIsZ0JBQUksYUFBYSxPQUFXLFlBQVc7QUFBQSxVQUN6QyxPQUFPO0FBQ0wsdUJBQVc7QUFDWCxxQkFBUztBQUFBLFVBQ1g7QUFBQSxRQUNGLE9BQU87QUFDTCxnQkFBTSxJQUFJO0FBQUEsWUFDUjtBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBRUEsWUFBSSxZQUFZLEtBQUssU0FBU0E7QUFDOUIsWUFBSSxXQUFXLFVBQWEsU0FBUyxVQUFXLFVBQVM7QUFFekQsWUFBSyxPQUFPLFNBQVMsTUFBTSxTQUFTLEtBQUtBLFVBQVMsTUFBT0EsVUFBUyxLQUFLLFFBQVE7QUFDN0UsZ0JBQU0sSUFBSSxXQUFXLHdDQUF3QztBQUFBLFFBQy9EO0FBRUEsWUFBSSxDQUFDLFNBQVUsWUFBVztBQUUxQixZQUFJLGNBQWM7QUFDbEIsbUJBQVM7QUFDUCxrQkFBUSxVQUFVO0FBQUEsWUFDaEIsS0FBSztBQUNILHFCQUFPLFNBQVMsTUFBTSxRQUFRQSxTQUFRLE1BQU07QUFBQSxZQUU5QyxLQUFLO0FBQUEsWUFDTCxLQUFLO0FBQ0gscUJBQU8sVUFBVSxNQUFNLFFBQVFBLFNBQVEsTUFBTTtBQUFBLFlBRS9DLEtBQUs7QUFBQSxZQUNMLEtBQUs7QUFBQSxZQUNMLEtBQUs7QUFDSCxxQkFBTyxXQUFXLE1BQU0sUUFBUUEsU0FBUSxNQUFNO0FBQUEsWUFFaEQsS0FBSztBQUVILHFCQUFPLFlBQVksTUFBTSxRQUFRQSxTQUFRLE1BQU07QUFBQSxZQUVqRCxLQUFLO0FBQUEsWUFDTCxLQUFLO0FBQUEsWUFDTCxLQUFLO0FBQUEsWUFDTCxLQUFLO0FBQ0gscUJBQU8sVUFBVSxNQUFNLFFBQVFBLFNBQVEsTUFBTTtBQUFBLFlBRS9DO0FBQ0Usa0JBQUksWUFBYSxPQUFNLElBQUksVUFBVSx1QkFBdUIsUUFBUTtBQUNwRSwwQkFBWSxLQUFLLFVBQVUsWUFBWTtBQUN2Qyw0QkFBYztBQUFBLFVBQ2xCO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFFQSxNQUFBWixRQUFPLFVBQVUsU0FBUyxTQUFTLFNBQVU7QUFDM0MsZUFBTztBQUFBLFVBQ0wsTUFBTTtBQUFBLFVBQ04sTUFBTSxNQUFNLFVBQVUsTUFBTSxLQUFLLEtBQUssUUFBUSxNQUFNLENBQUM7QUFBQSxRQUN2RDtBQUFBLE1BQ0Y7QUFFQSxlQUFTLFlBQWEsS0FBS0ssUUFBT0MsTUFBSztBQUNyQyxZQUFJRCxXQUFVLEtBQUtDLFNBQVEsSUFBSSxRQUFRO0FBQ3JDLGlCQUFPLE9BQU8sY0FBYyxHQUFHO0FBQUEsUUFDakMsT0FBTztBQUNMLGlCQUFPLE9BQU8sY0FBYyxJQUFJLE1BQU1ELFFBQU9DLElBQUcsQ0FBQztBQUFBLFFBQ25EO0FBQUEsTUFDRjtBQUVBLGVBQVMsVUFBVyxLQUFLRCxRQUFPQyxNQUFLO0FBQ25DLFFBQUFBLE9BQU0sS0FBSyxJQUFJLElBQUksUUFBUUEsSUFBRztBQUM5QixZQUFJLE1BQU0sQ0FBQztBQUVYLFlBQUksSUFBSUQ7QUFDUixlQUFPLElBQUlDLE1BQUs7QUFDZCxjQUFJLFlBQVksSUFBSSxDQUFDO0FBQ3JCLGNBQUksWUFBWTtBQUNoQixjQUFJLG1CQUFvQixZQUFZLE1BQ2hDLElBQ0MsWUFBWSxNQUNULElBQ0MsWUFBWSxNQUNULElBQ0E7QUFFWixjQUFJLElBQUksb0JBQW9CQSxNQUFLO0FBQy9CLGdCQUFJLFlBQVksV0FBVyxZQUFZO0FBRXZDLG9CQUFRLGtCQUFrQjtBQUFBLGNBQ3hCLEtBQUs7QUFDSCxvQkFBSSxZQUFZLEtBQU07QUFDcEIsOEJBQVk7QUFBQSxnQkFDZDtBQUNBO0FBQUEsY0FDRixLQUFLO0FBQ0gsNkJBQWEsSUFBSSxJQUFJLENBQUM7QUFDdEIscUJBQUssYUFBYSxTQUFVLEtBQU07QUFDaEMsbUNBQWlCLFlBQVksT0FBUyxJQUFPLGFBQWE7QUFDMUQsc0JBQUksZ0JBQWdCLEtBQU07QUFDeEIsZ0NBQVk7QUFBQSxrQkFDZDtBQUFBLGdCQUNGO0FBQ0E7QUFBQSxjQUNGLEtBQUs7QUFDSCw2QkFBYSxJQUFJLElBQUksQ0FBQztBQUN0Qiw0QkFBWSxJQUFJLElBQUksQ0FBQztBQUNyQixxQkFBSyxhQUFhLFNBQVUsUUFBUyxZQUFZLFNBQVUsS0FBTTtBQUMvRCxtQ0FBaUIsWUFBWSxPQUFRLE1BQU8sYUFBYSxPQUFTLElBQU8sWUFBWTtBQUNyRixzQkFBSSxnQkFBZ0IsU0FBVSxnQkFBZ0IsU0FBVSxnQkFBZ0IsUUFBUztBQUMvRSxnQ0FBWTtBQUFBLGtCQUNkO0FBQUEsZ0JBQ0Y7QUFDQTtBQUFBLGNBQ0YsS0FBSztBQUNILDZCQUFhLElBQUksSUFBSSxDQUFDO0FBQ3RCLDRCQUFZLElBQUksSUFBSSxDQUFDO0FBQ3JCLDZCQUFhLElBQUksSUFBSSxDQUFDO0FBQ3RCLHFCQUFLLGFBQWEsU0FBVSxRQUFTLFlBQVksU0FBVSxRQUFTLGFBQWEsU0FBVSxLQUFNO0FBQy9GLG1DQUFpQixZQUFZLE9BQVEsTUFBUSxhQUFhLE9BQVMsTUFBTyxZQUFZLE9BQVMsSUFBTyxhQUFhO0FBQ25ILHNCQUFJLGdCQUFnQixTQUFVLGdCQUFnQixTQUFVO0FBQ3RELGdDQUFZO0FBQUEsa0JBQ2Q7QUFBQSxnQkFDRjtBQUFBLFlBQ0o7QUFBQSxVQUNGO0FBRUEsY0FBSSxjQUFjLE1BQU07QUFHdEIsd0JBQVk7QUFDWiwrQkFBbUI7QUFBQSxVQUNyQixXQUFXLFlBQVksT0FBUTtBQUU3Qix5QkFBYTtBQUNiLGdCQUFJLEtBQUssY0FBYyxLQUFLLE9BQVEsS0FBTTtBQUMxQyx3QkFBWSxRQUFTLFlBQVk7QUFBQSxVQUNuQztBQUVBLGNBQUksS0FBSyxTQUFTO0FBQ2xCLGVBQUs7QUFBQSxRQUNQO0FBRUEsZUFBTyxzQkFBc0IsR0FBRztBQUFBLE1BQ2xDO0FBS0EsVUFBSSx1QkFBdUI7QUFFM0IsZUFBUyxzQkFBdUIsWUFBWTtBQUMxQyxZQUFJLE1BQU0sV0FBVztBQUNyQixZQUFJLE9BQU8sc0JBQXNCO0FBQy9CLGlCQUFPLE9BQU8sYUFBYSxNQUFNLFFBQVEsVUFBVTtBQUFBLFFBQ3JEO0FBR0EsWUFBSSxNQUFNO0FBQ1YsWUFBSSxJQUFJO0FBQ1IsZUFBTyxJQUFJLEtBQUs7QUFDZCxpQkFBTyxPQUFPLGFBQWE7QUFBQSxZQUN6QjtBQUFBLFlBQ0EsV0FBVyxNQUFNLEdBQUcsS0FBSyxvQkFBb0I7QUFBQSxVQUMvQztBQUFBLFFBQ0Y7QUFDQSxlQUFPO0FBQUEsTUFDVDtBQUVBLGVBQVMsV0FBWSxLQUFLRCxRQUFPQyxNQUFLO0FBQ3BDLFlBQUksTUFBTTtBQUNWLFFBQUFBLE9BQU0sS0FBSyxJQUFJLElBQUksUUFBUUEsSUFBRztBQUU5QixpQkFBUyxJQUFJRCxRQUFPLElBQUlDLE1BQUssRUFBRSxHQUFHO0FBQ2hDLGlCQUFPLE9BQU8sYUFBYSxJQUFJLENBQUMsSUFBSSxHQUFJO0FBQUEsUUFDMUM7QUFDQSxlQUFPO0FBQUEsTUFDVDtBQUVBLGVBQVMsWUFBYSxLQUFLRCxRQUFPQyxNQUFLO0FBQ3JDLFlBQUksTUFBTTtBQUNWLFFBQUFBLE9BQU0sS0FBSyxJQUFJLElBQUksUUFBUUEsSUFBRztBQUU5QixpQkFBUyxJQUFJRCxRQUFPLElBQUlDLE1BQUssRUFBRSxHQUFHO0FBQ2hDLGlCQUFPLE9BQU8sYUFBYSxJQUFJLENBQUMsQ0FBQztBQUFBLFFBQ25DO0FBQ0EsZUFBTztBQUFBLE1BQ1Q7QUFFQSxlQUFTLFNBQVUsS0FBS0QsUUFBT0MsTUFBSztBQUNsQyxZQUFJLE1BQU0sSUFBSTtBQUVkLFlBQUksQ0FBQ0QsVUFBU0EsU0FBUSxFQUFHLENBQUFBLFNBQVE7QUFDakMsWUFBSSxDQUFDQyxRQUFPQSxPQUFNLEtBQUtBLE9BQU0sSUFBSyxDQUFBQSxPQUFNO0FBRXhDLFlBQUksTUFBTTtBQUNWLGlCQUFTLElBQUlELFFBQU8sSUFBSUMsTUFBSyxFQUFFLEdBQUc7QUFDaEMsaUJBQU8sb0JBQW9CLElBQUksQ0FBQyxDQUFDO0FBQUEsUUFDbkM7QUFDQSxlQUFPO0FBQUEsTUFDVDtBQUVBLGVBQVMsYUFBYyxLQUFLRCxRQUFPQyxNQUFLO0FBQ3RDLFlBQUksUUFBUSxJQUFJLE1BQU1ELFFBQU9DLElBQUc7QUFDaEMsWUFBSSxNQUFNO0FBRVYsaUJBQVMsSUFBSSxHQUFHLElBQUksTUFBTSxTQUFTLEdBQUcsS0FBSyxHQUFHO0FBQzVDLGlCQUFPLE9BQU8sYUFBYSxNQUFNLENBQUMsSUFBSyxNQUFNLElBQUksQ0FBQyxJQUFJLEdBQUk7QUFBQSxRQUM1RDtBQUNBLGVBQU87QUFBQSxNQUNUO0FBRUEsTUFBQU4sUUFBTyxVQUFVLFFBQVEsU0FBUyxNQUFPSyxRQUFPQyxNQUFLO0FBQ25ELFlBQUksTUFBTSxLQUFLO0FBQ2YsUUFBQUQsU0FBUSxDQUFDLENBQUNBO0FBQ1YsUUFBQUMsT0FBTUEsU0FBUSxTQUFZLE1BQU0sQ0FBQyxDQUFDQTtBQUVsQyxZQUFJRCxTQUFRLEdBQUc7QUFDYixVQUFBQSxVQUFTO0FBQ1QsY0FBSUEsU0FBUSxFQUFHLENBQUFBLFNBQVE7QUFBQSxRQUN6QixXQUFXQSxTQUFRLEtBQUs7QUFDdEIsVUFBQUEsU0FBUTtBQUFBLFFBQ1Y7QUFFQSxZQUFJQyxPQUFNLEdBQUc7QUFDWCxVQUFBQSxRQUFPO0FBQ1AsY0FBSUEsT0FBTSxFQUFHLENBQUFBLE9BQU07QUFBQSxRQUNyQixXQUFXQSxPQUFNLEtBQUs7QUFDcEIsVUFBQUEsT0FBTTtBQUFBLFFBQ1I7QUFFQSxZQUFJQSxPQUFNRCxPQUFPLENBQUFDLE9BQU1EO0FBRXZCLFlBQUksU0FBUyxLQUFLLFNBQVNBLFFBQU9DLElBQUc7QUFFckMsZUFBTyxlQUFlLFFBQVFOLFFBQU8sU0FBUztBQUU5QyxlQUFPO0FBQUEsTUFDVDtBQUtBLGVBQVMsWUFBYVksU0FBUSxLQUFLLFFBQVE7QUFDekMsWUFBS0EsVUFBUyxNQUFPLEtBQUtBLFVBQVMsRUFBRyxPQUFNLElBQUksV0FBVyxvQkFBb0I7QUFDL0UsWUFBSUEsVUFBUyxNQUFNLE9BQVEsT0FBTSxJQUFJLFdBQVcsdUNBQXVDO0FBQUEsTUFDekY7QUFFQSxNQUFBWixRQUFPLFVBQVUsYUFDakJBLFFBQU8sVUFBVSxhQUFhLFNBQVMsV0FBWVksU0FBUUUsYUFBWSxVQUFVO0FBQy9FLFFBQUFGLFVBQVNBLFlBQVc7QUFDcEIsUUFBQUUsY0FBYUEsZ0JBQWU7QUFDNUIsWUFBSSxDQUFDLFNBQVUsYUFBWUYsU0FBUUUsYUFBWSxLQUFLLE1BQU07QUFFMUQsWUFBSSxNQUFNLEtBQUtGLE9BQU07QUFDckIsWUFBSSxNQUFNO0FBQ1YsWUFBSSxJQUFJO0FBQ1IsZUFBTyxFQUFFLElBQUlFLGdCQUFlLE9BQU8sTUFBUTtBQUN6QyxpQkFBTyxLQUFLRixVQUFTLENBQUMsSUFBSTtBQUFBLFFBQzVCO0FBRUEsZUFBTztBQUFBLE1BQ1Q7QUFFQSxNQUFBWixRQUFPLFVBQVUsYUFDakJBLFFBQU8sVUFBVSxhQUFhLFNBQVMsV0FBWVksU0FBUUUsYUFBWSxVQUFVO0FBQy9FLFFBQUFGLFVBQVNBLFlBQVc7QUFDcEIsUUFBQUUsY0FBYUEsZ0JBQWU7QUFDNUIsWUFBSSxDQUFDLFVBQVU7QUFDYixzQkFBWUYsU0FBUUUsYUFBWSxLQUFLLE1BQU07QUFBQSxRQUM3QztBQUVBLFlBQUksTUFBTSxLQUFLRixVQUFTLEVBQUVFLFdBQVU7QUFDcEMsWUFBSSxNQUFNO0FBQ1YsZUFBT0EsY0FBYSxNQUFNLE9BQU8sTUFBUTtBQUN2QyxpQkFBTyxLQUFLRixVQUFTLEVBQUVFLFdBQVUsSUFBSTtBQUFBLFFBQ3ZDO0FBRUEsZUFBTztBQUFBLE1BQ1Q7QUFFQSxNQUFBZCxRQUFPLFVBQVUsWUFDakJBLFFBQU8sVUFBVSxZQUFZLFNBQVMsVUFBV1ksU0FBUSxVQUFVO0FBQ2pFLFFBQUFBLFVBQVNBLFlBQVc7QUFDcEIsWUFBSSxDQUFDLFNBQVUsYUFBWUEsU0FBUSxHQUFHLEtBQUssTUFBTTtBQUNqRCxlQUFPLEtBQUtBLE9BQU07QUFBQSxNQUNwQjtBQUVBLE1BQUFaLFFBQU8sVUFBVSxlQUNqQkEsUUFBTyxVQUFVLGVBQWUsU0FBUyxhQUFjWSxTQUFRLFVBQVU7QUFDdkUsUUFBQUEsVUFBU0EsWUFBVztBQUNwQixZQUFJLENBQUMsU0FBVSxhQUFZQSxTQUFRLEdBQUcsS0FBSyxNQUFNO0FBQ2pELGVBQU8sS0FBS0EsT0FBTSxJQUFLLEtBQUtBLFVBQVMsQ0FBQyxLQUFLO0FBQUEsTUFDN0M7QUFFQSxNQUFBWixRQUFPLFVBQVUsZUFDakJBLFFBQU8sVUFBVSxlQUFlLFNBQVMsYUFBY1ksU0FBUSxVQUFVO0FBQ3ZFLFFBQUFBLFVBQVNBLFlBQVc7QUFDcEIsWUFBSSxDQUFDLFNBQVUsYUFBWUEsU0FBUSxHQUFHLEtBQUssTUFBTTtBQUNqRCxlQUFRLEtBQUtBLE9BQU0sS0FBSyxJQUFLLEtBQUtBLFVBQVMsQ0FBQztBQUFBLE1BQzlDO0FBRUEsTUFBQVosUUFBTyxVQUFVLGVBQ2pCQSxRQUFPLFVBQVUsZUFBZSxTQUFTLGFBQWNZLFNBQVEsVUFBVTtBQUN2RSxRQUFBQSxVQUFTQSxZQUFXO0FBQ3BCLFlBQUksQ0FBQyxTQUFVLGFBQVlBLFNBQVEsR0FBRyxLQUFLLE1BQU07QUFFakQsZ0JBQVMsS0FBS0EsT0FBTSxJQUNmLEtBQUtBLFVBQVMsQ0FBQyxLQUFLLElBQ3BCLEtBQUtBLFVBQVMsQ0FBQyxLQUFLLE1BQ3BCLEtBQUtBLFVBQVMsQ0FBQyxJQUFJO0FBQUEsTUFDMUI7QUFFQSxNQUFBWixRQUFPLFVBQVUsZUFDakJBLFFBQU8sVUFBVSxlQUFlLFNBQVMsYUFBY1ksU0FBUSxVQUFVO0FBQ3ZFLFFBQUFBLFVBQVNBLFlBQVc7QUFDcEIsWUFBSSxDQUFDLFNBQVUsYUFBWUEsU0FBUSxHQUFHLEtBQUssTUFBTTtBQUVqRCxlQUFRLEtBQUtBLE9BQU0sSUFBSSxZQUNuQixLQUFLQSxVQUFTLENBQUMsS0FBSyxLQUNyQixLQUFLQSxVQUFTLENBQUMsS0FBSyxJQUNyQixLQUFLQSxVQUFTLENBQUM7QUFBQSxNQUNuQjtBQUVBLE1BQUFaLFFBQU8sVUFBVSxZQUFZLFNBQVMsVUFBV1ksU0FBUUUsYUFBWSxVQUFVO0FBQzdFLFFBQUFGLFVBQVNBLFlBQVc7QUFDcEIsUUFBQUUsY0FBYUEsZ0JBQWU7QUFDNUIsWUFBSSxDQUFDLFNBQVUsYUFBWUYsU0FBUUUsYUFBWSxLQUFLLE1BQU07QUFFMUQsWUFBSSxNQUFNLEtBQUtGLE9BQU07QUFDckIsWUFBSSxNQUFNO0FBQ1YsWUFBSSxJQUFJO0FBQ1IsZUFBTyxFQUFFLElBQUlFLGdCQUFlLE9BQU8sTUFBUTtBQUN6QyxpQkFBTyxLQUFLRixVQUFTLENBQUMsSUFBSTtBQUFBLFFBQzVCO0FBQ0EsZUFBTztBQUVQLFlBQUksT0FBTyxJQUFLLFFBQU8sS0FBSyxJQUFJLEdBQUcsSUFBSUUsV0FBVTtBQUVqRCxlQUFPO0FBQUEsTUFDVDtBQUVBLE1BQUFkLFFBQU8sVUFBVSxZQUFZLFNBQVMsVUFBV1ksU0FBUUUsYUFBWSxVQUFVO0FBQzdFLFFBQUFGLFVBQVNBLFlBQVc7QUFDcEIsUUFBQUUsY0FBYUEsZ0JBQWU7QUFDNUIsWUFBSSxDQUFDLFNBQVUsYUFBWUYsU0FBUUUsYUFBWSxLQUFLLE1BQU07QUFFMUQsWUFBSSxJQUFJQTtBQUNSLFlBQUksTUFBTTtBQUNWLFlBQUksTUFBTSxLQUFLRixVQUFTLEVBQUUsQ0FBQztBQUMzQixlQUFPLElBQUksTUFBTSxPQUFPLE1BQVE7QUFDOUIsaUJBQU8sS0FBS0EsVUFBUyxFQUFFLENBQUMsSUFBSTtBQUFBLFFBQzlCO0FBQ0EsZUFBTztBQUVQLFlBQUksT0FBTyxJQUFLLFFBQU8sS0FBSyxJQUFJLEdBQUcsSUFBSUUsV0FBVTtBQUVqRCxlQUFPO0FBQUEsTUFDVDtBQUVBLE1BQUFkLFFBQU8sVUFBVSxXQUFXLFNBQVMsU0FBVVksU0FBUSxVQUFVO0FBQy9ELFFBQUFBLFVBQVNBLFlBQVc7QUFDcEIsWUFBSSxDQUFDLFNBQVUsYUFBWUEsU0FBUSxHQUFHLEtBQUssTUFBTTtBQUNqRCxZQUFJLEVBQUUsS0FBS0EsT0FBTSxJQUFJLEtBQU8sUUFBUSxLQUFLQSxPQUFNO0FBQy9DLGdCQUFTLE1BQU8sS0FBS0EsT0FBTSxJQUFJLEtBQUs7QUFBQSxNQUN0QztBQUVBLE1BQUFaLFFBQU8sVUFBVSxjQUFjLFNBQVMsWUFBYVksU0FBUSxVQUFVO0FBQ3JFLFFBQUFBLFVBQVNBLFlBQVc7QUFDcEIsWUFBSSxDQUFDLFNBQVUsYUFBWUEsU0FBUSxHQUFHLEtBQUssTUFBTTtBQUNqRCxZQUFJLE1BQU0sS0FBS0EsT0FBTSxJQUFLLEtBQUtBLFVBQVMsQ0FBQyxLQUFLO0FBQzlDLGVBQVEsTUFBTSxRQUFVLE1BQU0sYUFBYTtBQUFBLE1BQzdDO0FBRUEsTUFBQVosUUFBTyxVQUFVLGNBQWMsU0FBUyxZQUFhWSxTQUFRLFVBQVU7QUFDckUsUUFBQUEsVUFBU0EsWUFBVztBQUNwQixZQUFJLENBQUMsU0FBVSxhQUFZQSxTQUFRLEdBQUcsS0FBSyxNQUFNO0FBQ2pELFlBQUksTUFBTSxLQUFLQSxVQUFTLENBQUMsSUFBSyxLQUFLQSxPQUFNLEtBQUs7QUFDOUMsZUFBUSxNQUFNLFFBQVUsTUFBTSxhQUFhO0FBQUEsTUFDN0M7QUFFQSxNQUFBWixRQUFPLFVBQVUsY0FBYyxTQUFTLFlBQWFZLFNBQVEsVUFBVTtBQUNyRSxRQUFBQSxVQUFTQSxZQUFXO0FBQ3BCLFlBQUksQ0FBQyxTQUFVLGFBQVlBLFNBQVEsR0FBRyxLQUFLLE1BQU07QUFFakQsZUFBUSxLQUFLQSxPQUFNLElBQ2hCLEtBQUtBLFVBQVMsQ0FBQyxLQUFLLElBQ3BCLEtBQUtBLFVBQVMsQ0FBQyxLQUFLLEtBQ3BCLEtBQUtBLFVBQVMsQ0FBQyxLQUFLO0FBQUEsTUFDekI7QUFFQSxNQUFBWixRQUFPLFVBQVUsY0FBYyxTQUFTLFlBQWFZLFNBQVEsVUFBVTtBQUNyRSxRQUFBQSxVQUFTQSxZQUFXO0FBQ3BCLFlBQUksQ0FBQyxTQUFVLGFBQVlBLFNBQVEsR0FBRyxLQUFLLE1BQU07QUFFakQsZUFBUSxLQUFLQSxPQUFNLEtBQUssS0FDckIsS0FBS0EsVUFBUyxDQUFDLEtBQUssS0FDcEIsS0FBS0EsVUFBUyxDQUFDLEtBQUssSUFDcEIsS0FBS0EsVUFBUyxDQUFDO0FBQUEsTUFDcEI7QUFFQSxNQUFBWixRQUFPLFVBQVUsY0FBYyxTQUFTLFlBQWFZLFNBQVEsVUFBVTtBQUNyRSxRQUFBQSxVQUFTQSxZQUFXO0FBQ3BCLFlBQUksQ0FBQyxTQUFVLGFBQVlBLFNBQVEsR0FBRyxLQUFLLE1BQU07QUFDakQsZUFBTyxRQUFRLEtBQUssTUFBTUEsU0FBUSxNQUFNLElBQUksQ0FBQztBQUFBLE1BQy9DO0FBRUEsTUFBQVosUUFBTyxVQUFVLGNBQWMsU0FBUyxZQUFhWSxTQUFRLFVBQVU7QUFDckUsUUFBQUEsVUFBU0EsWUFBVztBQUNwQixZQUFJLENBQUMsU0FBVSxhQUFZQSxTQUFRLEdBQUcsS0FBSyxNQUFNO0FBQ2pELGVBQU8sUUFBUSxLQUFLLE1BQU1BLFNBQVEsT0FBTyxJQUFJLENBQUM7QUFBQSxNQUNoRDtBQUVBLE1BQUFaLFFBQU8sVUFBVSxlQUFlLFNBQVMsYUFBY1ksU0FBUSxVQUFVO0FBQ3ZFLFFBQUFBLFVBQVNBLFlBQVc7QUFDcEIsWUFBSSxDQUFDLFNBQVUsYUFBWUEsU0FBUSxHQUFHLEtBQUssTUFBTTtBQUNqRCxlQUFPLFFBQVEsS0FBSyxNQUFNQSxTQUFRLE1BQU0sSUFBSSxDQUFDO0FBQUEsTUFDL0M7QUFFQSxNQUFBWixRQUFPLFVBQVUsZUFBZSxTQUFTLGFBQWNZLFNBQVEsVUFBVTtBQUN2RSxRQUFBQSxVQUFTQSxZQUFXO0FBQ3BCLFlBQUksQ0FBQyxTQUFVLGFBQVlBLFNBQVEsR0FBRyxLQUFLLE1BQU07QUFDakQsZUFBTyxRQUFRLEtBQUssTUFBTUEsU0FBUSxPQUFPLElBQUksQ0FBQztBQUFBLE1BQ2hEO0FBRUEsZUFBUyxTQUFVLEtBQUssT0FBT0EsU0FBUSxLQUFLSCxNQUFLTSxNQUFLO0FBQ3BELFlBQUksQ0FBQ2YsUUFBTyxTQUFTLEdBQUcsRUFBRyxPQUFNLElBQUksVUFBVSw2Q0FBNkM7QUFDNUYsWUFBSSxRQUFRUyxRQUFPLFFBQVFNLEtBQUssT0FBTSxJQUFJLFdBQVcsbUNBQW1DO0FBQ3hGLFlBQUlILFVBQVMsTUFBTSxJQUFJLE9BQVEsT0FBTSxJQUFJLFdBQVcsb0JBQW9CO0FBQUEsTUFDMUU7QUFFQSxNQUFBWixRQUFPLFVBQVUsY0FDakJBLFFBQU8sVUFBVSxjQUFjLFNBQVMsWUFBYSxPQUFPWSxTQUFRRSxhQUFZLFVBQVU7QUFDeEYsZ0JBQVEsQ0FBQztBQUNULFFBQUFGLFVBQVNBLFlBQVc7QUFDcEIsUUFBQUUsY0FBYUEsZ0JBQWU7QUFDNUIsWUFBSSxDQUFDLFVBQVU7QUFDYixjQUFJLFdBQVcsS0FBSyxJQUFJLEdBQUcsSUFBSUEsV0FBVSxJQUFJO0FBQzdDLG1CQUFTLE1BQU0sT0FBT0YsU0FBUUUsYUFBWSxVQUFVLENBQUM7QUFBQSxRQUN2RDtBQUVBLFlBQUksTUFBTTtBQUNWLFlBQUksSUFBSTtBQUNSLGFBQUtGLE9BQU0sSUFBSSxRQUFRO0FBQ3ZCLGVBQU8sRUFBRSxJQUFJRSxnQkFBZSxPQUFPLE1BQVE7QUFDekMsZUFBS0YsVUFBUyxDQUFDLElBQUssUUFBUSxNQUFPO0FBQUEsUUFDckM7QUFFQSxlQUFPQSxVQUFTRTtBQUFBLE1BQ2xCO0FBRUEsTUFBQWQsUUFBTyxVQUFVLGNBQ2pCQSxRQUFPLFVBQVUsY0FBYyxTQUFTLFlBQWEsT0FBT1ksU0FBUUUsYUFBWSxVQUFVO0FBQ3hGLGdCQUFRLENBQUM7QUFDVCxRQUFBRixVQUFTQSxZQUFXO0FBQ3BCLFFBQUFFLGNBQWFBLGdCQUFlO0FBQzVCLFlBQUksQ0FBQyxVQUFVO0FBQ2IsY0FBSSxXQUFXLEtBQUssSUFBSSxHQUFHLElBQUlBLFdBQVUsSUFBSTtBQUM3QyxtQkFBUyxNQUFNLE9BQU9GLFNBQVFFLGFBQVksVUFBVSxDQUFDO0FBQUEsUUFDdkQ7QUFFQSxZQUFJLElBQUlBLGNBQWE7QUFDckIsWUFBSSxNQUFNO0FBQ1YsYUFBS0YsVUFBUyxDQUFDLElBQUksUUFBUTtBQUMzQixlQUFPLEVBQUUsS0FBSyxNQUFNLE9BQU8sTUFBUTtBQUNqQyxlQUFLQSxVQUFTLENBQUMsSUFBSyxRQUFRLE1BQU87QUFBQSxRQUNyQztBQUVBLGVBQU9BLFVBQVNFO0FBQUEsTUFDbEI7QUFFQSxNQUFBZCxRQUFPLFVBQVUsYUFDakJBLFFBQU8sVUFBVSxhQUFhLFNBQVMsV0FBWSxPQUFPWSxTQUFRLFVBQVU7QUFDMUUsZ0JBQVEsQ0FBQztBQUNULFFBQUFBLFVBQVNBLFlBQVc7QUFDcEIsWUFBSSxDQUFDLFNBQVUsVUFBUyxNQUFNLE9BQU9BLFNBQVEsR0FBRyxLQUFNLENBQUM7QUFDdkQsYUFBS0EsT0FBTSxJQUFLLFFBQVE7QUFDeEIsZUFBT0EsVUFBUztBQUFBLE1BQ2xCO0FBRUEsTUFBQVosUUFBTyxVQUFVLGdCQUNqQkEsUUFBTyxVQUFVLGdCQUFnQixTQUFTLGNBQWUsT0FBT1ksU0FBUSxVQUFVO0FBQ2hGLGdCQUFRLENBQUM7QUFDVCxRQUFBQSxVQUFTQSxZQUFXO0FBQ3BCLFlBQUksQ0FBQyxTQUFVLFVBQVMsTUFBTSxPQUFPQSxTQUFRLEdBQUcsT0FBUSxDQUFDO0FBQ3pELGFBQUtBLE9BQU0sSUFBSyxRQUFRO0FBQ3hCLGFBQUtBLFVBQVMsQ0FBQyxJQUFLLFVBQVU7QUFDOUIsZUFBT0EsVUFBUztBQUFBLE1BQ2xCO0FBRUEsTUFBQVosUUFBTyxVQUFVLGdCQUNqQkEsUUFBTyxVQUFVLGdCQUFnQixTQUFTLGNBQWUsT0FBT1ksU0FBUSxVQUFVO0FBQ2hGLGdCQUFRLENBQUM7QUFDVCxRQUFBQSxVQUFTQSxZQUFXO0FBQ3BCLFlBQUksQ0FBQyxTQUFVLFVBQVMsTUFBTSxPQUFPQSxTQUFRLEdBQUcsT0FBUSxDQUFDO0FBQ3pELGFBQUtBLE9BQU0sSUFBSyxVQUFVO0FBQzFCLGFBQUtBLFVBQVMsQ0FBQyxJQUFLLFFBQVE7QUFDNUIsZUFBT0EsVUFBUztBQUFBLE1BQ2xCO0FBRUEsTUFBQVosUUFBTyxVQUFVLGdCQUNqQkEsUUFBTyxVQUFVLGdCQUFnQixTQUFTLGNBQWUsT0FBT1ksU0FBUSxVQUFVO0FBQ2hGLGdCQUFRLENBQUM7QUFDVCxRQUFBQSxVQUFTQSxZQUFXO0FBQ3BCLFlBQUksQ0FBQyxTQUFVLFVBQVMsTUFBTSxPQUFPQSxTQUFRLEdBQUcsWUFBWSxDQUFDO0FBQzdELGFBQUtBLFVBQVMsQ0FBQyxJQUFLLFVBQVU7QUFDOUIsYUFBS0EsVUFBUyxDQUFDLElBQUssVUFBVTtBQUM5QixhQUFLQSxVQUFTLENBQUMsSUFBSyxVQUFVO0FBQzlCLGFBQUtBLE9BQU0sSUFBSyxRQUFRO0FBQ3hCLGVBQU9BLFVBQVM7QUFBQSxNQUNsQjtBQUVBLE1BQUFaLFFBQU8sVUFBVSxnQkFDakJBLFFBQU8sVUFBVSxnQkFBZ0IsU0FBUyxjQUFlLE9BQU9ZLFNBQVEsVUFBVTtBQUNoRixnQkFBUSxDQUFDO0FBQ1QsUUFBQUEsVUFBU0EsWUFBVztBQUNwQixZQUFJLENBQUMsU0FBVSxVQUFTLE1BQU0sT0FBT0EsU0FBUSxHQUFHLFlBQVksQ0FBQztBQUM3RCxhQUFLQSxPQUFNLElBQUssVUFBVTtBQUMxQixhQUFLQSxVQUFTLENBQUMsSUFBSyxVQUFVO0FBQzlCLGFBQUtBLFVBQVMsQ0FBQyxJQUFLLFVBQVU7QUFDOUIsYUFBS0EsVUFBUyxDQUFDLElBQUssUUFBUTtBQUM1QixlQUFPQSxVQUFTO0FBQUEsTUFDbEI7QUFFQSxNQUFBWixRQUFPLFVBQVUsYUFBYSxTQUFTLFdBQVksT0FBT1ksU0FBUUUsYUFBWSxVQUFVO0FBQ3RGLGdCQUFRLENBQUM7QUFDVCxRQUFBRixVQUFTQSxZQUFXO0FBQ3BCLFlBQUksQ0FBQyxVQUFVO0FBQ2IsY0FBSSxRQUFRLEtBQUssSUFBSSxHQUFJLElBQUlFLGNBQWMsQ0FBQztBQUU1QyxtQkFBUyxNQUFNLE9BQU9GLFNBQVFFLGFBQVksUUFBUSxHQUFHLENBQUMsS0FBSztBQUFBLFFBQzdEO0FBRUEsWUFBSSxJQUFJO0FBQ1IsWUFBSSxNQUFNO0FBQ1YsWUFBSSxNQUFNO0FBQ1YsYUFBS0YsT0FBTSxJQUFJLFFBQVE7QUFDdkIsZUFBTyxFQUFFLElBQUlFLGdCQUFlLE9BQU8sTUFBUTtBQUN6QyxjQUFJLFFBQVEsS0FBSyxRQUFRLEtBQUssS0FBS0YsVUFBUyxJQUFJLENBQUMsTUFBTSxHQUFHO0FBQ3hELGtCQUFNO0FBQUEsVUFDUjtBQUNBLGVBQUtBLFVBQVMsQ0FBQyxLQUFNLFFBQVEsT0FBUSxLQUFLLE1BQU07QUFBQSxRQUNsRDtBQUVBLGVBQU9BLFVBQVNFO0FBQUEsTUFDbEI7QUFFQSxNQUFBZCxRQUFPLFVBQVUsYUFBYSxTQUFTLFdBQVksT0FBT1ksU0FBUUUsYUFBWSxVQUFVO0FBQ3RGLGdCQUFRLENBQUM7QUFDVCxRQUFBRixVQUFTQSxZQUFXO0FBQ3BCLFlBQUksQ0FBQyxVQUFVO0FBQ2IsY0FBSSxRQUFRLEtBQUssSUFBSSxHQUFJLElBQUlFLGNBQWMsQ0FBQztBQUU1QyxtQkFBUyxNQUFNLE9BQU9GLFNBQVFFLGFBQVksUUFBUSxHQUFHLENBQUMsS0FBSztBQUFBLFFBQzdEO0FBRUEsWUFBSSxJQUFJQSxjQUFhO0FBQ3JCLFlBQUksTUFBTTtBQUNWLFlBQUksTUFBTTtBQUNWLGFBQUtGLFVBQVMsQ0FBQyxJQUFJLFFBQVE7QUFDM0IsZUFBTyxFQUFFLEtBQUssTUFBTSxPQUFPLE1BQVE7QUFDakMsY0FBSSxRQUFRLEtBQUssUUFBUSxLQUFLLEtBQUtBLFVBQVMsSUFBSSxDQUFDLE1BQU0sR0FBRztBQUN4RCxrQkFBTTtBQUFBLFVBQ1I7QUFDQSxlQUFLQSxVQUFTLENBQUMsS0FBTSxRQUFRLE9BQVEsS0FBSyxNQUFNO0FBQUEsUUFDbEQ7QUFFQSxlQUFPQSxVQUFTRTtBQUFBLE1BQ2xCO0FBRUEsTUFBQWQsUUFBTyxVQUFVLFlBQVksU0FBUyxVQUFXLE9BQU9ZLFNBQVEsVUFBVTtBQUN4RSxnQkFBUSxDQUFDO0FBQ1QsUUFBQUEsVUFBU0EsWUFBVztBQUNwQixZQUFJLENBQUMsU0FBVSxVQUFTLE1BQU0sT0FBT0EsU0FBUSxHQUFHLEtBQU0sSUFBSztBQUMzRCxZQUFJLFFBQVEsRUFBRyxTQUFRLE1BQU8sUUFBUTtBQUN0QyxhQUFLQSxPQUFNLElBQUssUUFBUTtBQUN4QixlQUFPQSxVQUFTO0FBQUEsTUFDbEI7QUFFQSxNQUFBWixRQUFPLFVBQVUsZUFBZSxTQUFTLGFBQWMsT0FBT1ksU0FBUSxVQUFVO0FBQzlFLGdCQUFRLENBQUM7QUFDVCxRQUFBQSxVQUFTQSxZQUFXO0FBQ3BCLFlBQUksQ0FBQyxTQUFVLFVBQVMsTUFBTSxPQUFPQSxTQUFRLEdBQUcsT0FBUSxNQUFPO0FBQy9ELGFBQUtBLE9BQU0sSUFBSyxRQUFRO0FBQ3hCLGFBQUtBLFVBQVMsQ0FBQyxJQUFLLFVBQVU7QUFDOUIsZUFBT0EsVUFBUztBQUFBLE1BQ2xCO0FBRUEsTUFBQVosUUFBTyxVQUFVLGVBQWUsU0FBUyxhQUFjLE9BQU9ZLFNBQVEsVUFBVTtBQUM5RSxnQkFBUSxDQUFDO0FBQ1QsUUFBQUEsVUFBU0EsWUFBVztBQUNwQixZQUFJLENBQUMsU0FBVSxVQUFTLE1BQU0sT0FBT0EsU0FBUSxHQUFHLE9BQVEsTUFBTztBQUMvRCxhQUFLQSxPQUFNLElBQUssVUFBVTtBQUMxQixhQUFLQSxVQUFTLENBQUMsSUFBSyxRQUFRO0FBQzVCLGVBQU9BLFVBQVM7QUFBQSxNQUNsQjtBQUVBLE1BQUFaLFFBQU8sVUFBVSxlQUFlLFNBQVMsYUFBYyxPQUFPWSxTQUFRLFVBQVU7QUFDOUUsZ0JBQVEsQ0FBQztBQUNULFFBQUFBLFVBQVNBLFlBQVc7QUFDcEIsWUFBSSxDQUFDLFNBQVUsVUFBUyxNQUFNLE9BQU9BLFNBQVEsR0FBRyxZQUFZLFdBQVc7QUFDdkUsYUFBS0EsT0FBTSxJQUFLLFFBQVE7QUFDeEIsYUFBS0EsVUFBUyxDQUFDLElBQUssVUFBVTtBQUM5QixhQUFLQSxVQUFTLENBQUMsSUFBSyxVQUFVO0FBQzlCLGFBQUtBLFVBQVMsQ0FBQyxJQUFLLFVBQVU7QUFDOUIsZUFBT0EsVUFBUztBQUFBLE1BQ2xCO0FBRUEsTUFBQVosUUFBTyxVQUFVLGVBQWUsU0FBUyxhQUFjLE9BQU9ZLFNBQVEsVUFBVTtBQUM5RSxnQkFBUSxDQUFDO0FBQ1QsUUFBQUEsVUFBU0EsWUFBVztBQUNwQixZQUFJLENBQUMsU0FBVSxVQUFTLE1BQU0sT0FBT0EsU0FBUSxHQUFHLFlBQVksV0FBVztBQUN2RSxZQUFJLFFBQVEsRUFBRyxTQUFRLGFBQWEsUUFBUTtBQUM1QyxhQUFLQSxPQUFNLElBQUssVUFBVTtBQUMxQixhQUFLQSxVQUFTLENBQUMsSUFBSyxVQUFVO0FBQzlCLGFBQUtBLFVBQVMsQ0FBQyxJQUFLLFVBQVU7QUFDOUIsYUFBS0EsVUFBUyxDQUFDLElBQUssUUFBUTtBQUM1QixlQUFPQSxVQUFTO0FBQUEsTUFDbEI7QUFFQSxlQUFTLGFBQWMsS0FBSyxPQUFPQSxTQUFRLEtBQUtILE1BQUtNLE1BQUs7QUFDeEQsWUFBSUgsVUFBUyxNQUFNLElBQUksT0FBUSxPQUFNLElBQUksV0FBVyxvQkFBb0I7QUFDeEUsWUFBSUEsVUFBUyxFQUFHLE9BQU0sSUFBSSxXQUFXLG9CQUFvQjtBQUFBLE1BQzNEO0FBRUEsZUFBUyxXQUFZLEtBQUssT0FBT0EsU0FBUSxjQUFjLFVBQVU7QUFDL0QsZ0JBQVEsQ0FBQztBQUNULFFBQUFBLFVBQVNBLFlBQVc7QUFDcEIsWUFBSSxDQUFDLFVBQVU7QUFDYix1QkFBYSxLQUFLLE9BQU9BLFNBQVEsR0FBRyxzQkFBd0IscUJBQXVCO0FBQUEsUUFDckY7QUFDQSxnQkFBUSxNQUFNLEtBQUssT0FBT0EsU0FBUSxjQUFjLElBQUksQ0FBQztBQUNyRCxlQUFPQSxVQUFTO0FBQUEsTUFDbEI7QUFFQSxNQUFBWixRQUFPLFVBQVUsZUFBZSxTQUFTLGFBQWMsT0FBT1ksU0FBUSxVQUFVO0FBQzlFLGVBQU8sV0FBVyxNQUFNLE9BQU9BLFNBQVEsTUFBTSxRQUFRO0FBQUEsTUFDdkQ7QUFFQSxNQUFBWixRQUFPLFVBQVUsZUFBZSxTQUFTLGFBQWMsT0FBT1ksU0FBUSxVQUFVO0FBQzlFLGVBQU8sV0FBVyxNQUFNLE9BQU9BLFNBQVEsT0FBTyxRQUFRO0FBQUEsTUFDeEQ7QUFFQSxlQUFTLFlBQWEsS0FBSyxPQUFPQSxTQUFRLGNBQWMsVUFBVTtBQUNoRSxnQkFBUSxDQUFDO0FBQ1QsUUFBQUEsVUFBU0EsWUFBVztBQUNwQixZQUFJLENBQUMsVUFBVTtBQUNiLHVCQUFhLEtBQUssT0FBT0EsU0FBUSxHQUFHLHVCQUF5QixzQkFBd0I7QUFBQSxRQUN2RjtBQUNBLGdCQUFRLE1BQU0sS0FBSyxPQUFPQSxTQUFRLGNBQWMsSUFBSSxDQUFDO0FBQ3JELGVBQU9BLFVBQVM7QUFBQSxNQUNsQjtBQUVBLE1BQUFaLFFBQU8sVUFBVSxnQkFBZ0IsU0FBUyxjQUFlLE9BQU9ZLFNBQVEsVUFBVTtBQUNoRixlQUFPLFlBQVksTUFBTSxPQUFPQSxTQUFRLE1BQU0sUUFBUTtBQUFBLE1BQ3hEO0FBRUEsTUFBQVosUUFBTyxVQUFVLGdCQUFnQixTQUFTLGNBQWUsT0FBT1ksU0FBUSxVQUFVO0FBQ2hGLGVBQU8sWUFBWSxNQUFNLE9BQU9BLFNBQVEsT0FBTyxRQUFRO0FBQUEsTUFDekQ7QUFHQSxNQUFBWixRQUFPLFVBQVUsT0FBTyxTQUFTLEtBQU0sUUFBUSxhQUFhSyxRQUFPQyxNQUFLO0FBQ3RFLFlBQUksQ0FBQ04sUUFBTyxTQUFTLE1BQU0sRUFBRyxPQUFNLElBQUksVUFBVSw2QkFBNkI7QUFDL0UsWUFBSSxDQUFDSyxPQUFPLENBQUFBLFNBQVE7QUFDcEIsWUFBSSxDQUFDQyxRQUFPQSxTQUFRLEVBQUcsQ0FBQUEsT0FBTSxLQUFLO0FBQ2xDLFlBQUksZUFBZSxPQUFPLE9BQVEsZUFBYyxPQUFPO0FBQ3ZELFlBQUksQ0FBQyxZQUFhLGVBQWM7QUFDaEMsWUFBSUEsT0FBTSxLQUFLQSxPQUFNRCxPQUFPLENBQUFDLE9BQU1EO0FBR2xDLFlBQUlDLFNBQVFELE9BQU8sUUFBTztBQUMxQixZQUFJLE9BQU8sV0FBVyxLQUFLLEtBQUssV0FBVyxFQUFHLFFBQU87QUFHckQsWUFBSSxjQUFjLEdBQUc7QUFDbkIsZ0JBQU0sSUFBSSxXQUFXLDJCQUEyQjtBQUFBLFFBQ2xEO0FBQ0EsWUFBSUEsU0FBUSxLQUFLQSxVQUFTLEtBQUssT0FBUSxPQUFNLElBQUksV0FBVyxvQkFBb0I7QUFDaEYsWUFBSUMsT0FBTSxFQUFHLE9BQU0sSUFBSSxXQUFXLHlCQUF5QjtBQUczRCxZQUFJQSxPQUFNLEtBQUssT0FBUSxDQUFBQSxPQUFNLEtBQUs7QUFDbEMsWUFBSSxPQUFPLFNBQVMsY0FBY0EsT0FBTUQsUUFBTztBQUM3QyxVQUFBQyxPQUFNLE9BQU8sU0FBUyxjQUFjRDtBQUFBLFFBQ3RDO0FBRUEsWUFBSSxNQUFNQyxPQUFNRDtBQUVoQixZQUFJLFNBQVMsVUFBVSxPQUFPLFdBQVcsVUFBVSxlQUFlLFlBQVk7QUFFNUUsZUFBSyxXQUFXLGFBQWFBLFFBQU9DLElBQUc7QUFBQSxRQUN6QyxPQUFPO0FBQ0wscUJBQVcsVUFBVSxJQUFJO0FBQUEsWUFDdkI7QUFBQSxZQUNBLEtBQUssU0FBU0QsUUFBT0MsSUFBRztBQUFBLFlBQ3hCO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFFQSxlQUFPO0FBQUEsTUFDVDtBQU1BLE1BQUFOLFFBQU8sVUFBVSxPQUFPLFNBQVMsS0FBTSxLQUFLSyxRQUFPQyxNQUFLLFVBQVU7QUFFaEUsWUFBSSxPQUFPLFFBQVEsVUFBVTtBQUMzQixjQUFJLE9BQU9ELFdBQVUsVUFBVTtBQUM3Qix1QkFBV0E7QUFDWCxZQUFBQSxTQUFRO0FBQ1IsWUFBQUMsT0FBTSxLQUFLO0FBQUEsVUFDYixXQUFXLE9BQU9BLFNBQVEsVUFBVTtBQUNsQyx1QkFBV0E7QUFDWCxZQUFBQSxPQUFNLEtBQUs7QUFBQSxVQUNiO0FBQ0EsY0FBSSxhQUFhLFVBQWEsT0FBTyxhQUFhLFVBQVU7QUFDMUQsa0JBQU0sSUFBSSxVQUFVLDJCQUEyQjtBQUFBLFVBQ2pEO0FBQ0EsY0FBSSxPQUFPLGFBQWEsWUFBWSxDQUFDTixRQUFPLFdBQVcsUUFBUSxHQUFHO0FBQ2hFLGtCQUFNLElBQUksVUFBVSx1QkFBdUIsUUFBUTtBQUFBLFVBQ3JEO0FBQ0EsY0FBSSxJQUFJLFdBQVcsR0FBRztBQUNwQixnQkFBSSxPQUFPLElBQUksV0FBVyxDQUFDO0FBQzNCLGdCQUFLLGFBQWEsVUFBVSxPQUFPLE9BQy9CLGFBQWEsVUFBVTtBQUV6QixvQkFBTTtBQUFBLFlBQ1I7QUFBQSxVQUNGO0FBQUEsUUFDRixXQUFXLE9BQU8sUUFBUSxVQUFVO0FBQ2xDLGdCQUFNLE1BQU07QUFBQSxRQUNkLFdBQVcsT0FBTyxRQUFRLFdBQVc7QUFDbkMsZ0JBQU0sT0FBTyxHQUFHO0FBQUEsUUFDbEI7QUFHQSxZQUFJSyxTQUFRLEtBQUssS0FBSyxTQUFTQSxVQUFTLEtBQUssU0FBU0MsTUFBSztBQUN6RCxnQkFBTSxJQUFJLFdBQVcsb0JBQW9CO0FBQUEsUUFDM0M7QUFFQSxZQUFJQSxRQUFPRCxRQUFPO0FBQ2hCLGlCQUFPO0FBQUEsUUFDVDtBQUVBLFFBQUFBLFNBQVFBLFdBQVU7QUFDbEIsUUFBQUMsT0FBTUEsU0FBUSxTQUFZLEtBQUssU0FBU0EsU0FBUTtBQUVoRCxZQUFJLENBQUMsSUFBSyxPQUFNO0FBRWhCLFlBQUk7QUFDSixZQUFJLE9BQU8sUUFBUSxVQUFVO0FBQzNCLGVBQUssSUFBSUQsUUFBTyxJQUFJQyxNQUFLLEVBQUUsR0FBRztBQUM1QixpQkFBSyxDQUFDLElBQUk7QUFBQSxVQUNaO0FBQUEsUUFDRixPQUFPO0FBQ0wsY0FBSSxRQUFRTixRQUFPLFNBQVMsR0FBRyxJQUMzQixNQUNBQSxRQUFPLEtBQUssS0FBSyxRQUFRO0FBQzdCLGNBQUksTUFBTSxNQUFNO0FBQ2hCLGNBQUksUUFBUSxHQUFHO0FBQ2Isa0JBQU0sSUFBSSxVQUFVLGdCQUFnQixNQUNsQyxtQ0FBbUM7QUFBQSxVQUN2QztBQUNBLGVBQUssSUFBSSxHQUFHLElBQUlNLE9BQU1ELFFBQU8sRUFBRSxHQUFHO0FBQ2hDLGlCQUFLLElBQUlBLE1BQUssSUFBSSxNQUFNLElBQUksR0FBRztBQUFBLFVBQ2pDO0FBQUEsUUFDRjtBQUVBLGVBQU87QUFBQSxNQUNUO0FBS0EsVUFBSSxvQkFBb0I7QUFFeEIsZUFBUyxZQUFhLEtBQUs7QUFFekIsY0FBTSxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFFdEIsY0FBTSxJQUFJLEtBQUssRUFBRSxRQUFRLG1CQUFtQixFQUFFO0FBRTlDLFlBQUksSUFBSSxTQUFTLEVBQUcsUUFBTztBQUUzQixlQUFPLElBQUksU0FBUyxNQUFNLEdBQUc7QUFDM0IsZ0JBQU0sTUFBTTtBQUFBLFFBQ2Q7QUFDQSxlQUFPO0FBQUEsTUFDVDtBQUVBLGVBQVMsWUFBYSxRQUFRLE9BQU87QUFDbkMsZ0JBQVEsU0FBUztBQUNqQixZQUFJO0FBQ0osWUFBSSxTQUFTLE9BQU87QUFDcEIsWUFBSSxnQkFBZ0I7QUFDcEIsWUFBSSxRQUFRLENBQUM7QUFFYixpQkFBUyxJQUFJLEdBQUcsSUFBSSxRQUFRLEVBQUUsR0FBRztBQUMvQixzQkFBWSxPQUFPLFdBQVcsQ0FBQztBQUcvQixjQUFJLFlBQVksU0FBVSxZQUFZLE9BQVE7QUFFNUMsZ0JBQUksQ0FBQyxlQUFlO0FBRWxCLGtCQUFJLFlBQVksT0FBUTtBQUV0QixxQkFBSyxTQUFTLEtBQUssR0FBSSxPQUFNLEtBQUssS0FBTSxLQUFNLEdBQUk7QUFDbEQ7QUFBQSxjQUNGLFdBQVcsSUFBSSxNQUFNLFFBQVE7QUFFM0IscUJBQUssU0FBUyxLQUFLLEdBQUksT0FBTSxLQUFLLEtBQU0sS0FBTSxHQUFJO0FBQ2xEO0FBQUEsY0FDRjtBQUdBLDhCQUFnQjtBQUVoQjtBQUFBLFlBQ0Y7QUFHQSxnQkFBSSxZQUFZLE9BQVE7QUFDdEIsbUJBQUssU0FBUyxLQUFLLEdBQUksT0FBTSxLQUFLLEtBQU0sS0FBTSxHQUFJO0FBQ2xELDhCQUFnQjtBQUNoQjtBQUFBLFlBQ0Y7QUFHQSx5QkFBYSxnQkFBZ0IsU0FBVSxLQUFLLFlBQVksU0FBVTtBQUFBLFVBQ3BFLFdBQVcsZUFBZTtBQUV4QixpQkFBSyxTQUFTLEtBQUssR0FBSSxPQUFNLEtBQUssS0FBTSxLQUFNLEdBQUk7QUFBQSxVQUNwRDtBQUVBLDBCQUFnQjtBQUdoQixjQUFJLFlBQVksS0FBTTtBQUNwQixpQkFBSyxTQUFTLEtBQUssRUFBRztBQUN0QixrQkFBTSxLQUFLLFNBQVM7QUFBQSxVQUN0QixXQUFXLFlBQVksTUFBTztBQUM1QixpQkFBSyxTQUFTLEtBQUssRUFBRztBQUN0QixrQkFBTTtBQUFBLGNBQ0osYUFBYSxJQUFNO0FBQUEsY0FDbkIsWUFBWSxLQUFPO0FBQUEsWUFDckI7QUFBQSxVQUNGLFdBQVcsWUFBWSxPQUFTO0FBQzlCLGlCQUFLLFNBQVMsS0FBSyxFQUFHO0FBQ3RCLGtCQUFNO0FBQUEsY0FDSixhQUFhLEtBQU07QUFBQSxjQUNuQixhQUFhLElBQU0sS0FBTztBQUFBLGNBQzFCLFlBQVksS0FBTztBQUFBLFlBQ3JCO0FBQUEsVUFDRixXQUFXLFlBQVksU0FBVTtBQUMvQixpQkFBSyxTQUFTLEtBQUssRUFBRztBQUN0QixrQkFBTTtBQUFBLGNBQ0osYUFBYSxLQUFPO0FBQUEsY0FDcEIsYUFBYSxLQUFNLEtBQU87QUFBQSxjQUMxQixhQUFhLElBQU0sS0FBTztBQUFBLGNBQzFCLFlBQVksS0FBTztBQUFBLFlBQ3JCO0FBQUEsVUFDRixPQUFPO0FBQ0wsa0JBQU0sSUFBSSxNQUFNLG9CQUFvQjtBQUFBLFVBQ3RDO0FBQUEsUUFDRjtBQUVBLGVBQU87QUFBQSxNQUNUO0FBRUEsZUFBUyxhQUFjLEtBQUs7QUFDMUIsWUFBSSxZQUFZLENBQUM7QUFDakIsaUJBQVMsSUFBSSxHQUFHLElBQUksSUFBSSxRQUFRLEVBQUUsR0FBRztBQUVuQyxvQkFBVSxLQUFLLElBQUksV0FBVyxDQUFDLElBQUksR0FBSTtBQUFBLFFBQ3pDO0FBQ0EsZUFBTztBQUFBLE1BQ1Q7QUFFQSxlQUFTLGVBQWdCLEtBQUssT0FBTztBQUNuQyxZQUFJLEdBQUcsSUFBSTtBQUNYLFlBQUksWUFBWSxDQUFDO0FBQ2pCLGlCQUFTLElBQUksR0FBRyxJQUFJLElBQUksUUFBUSxFQUFFLEdBQUc7QUFDbkMsZUFBSyxTQUFTLEtBQUssRUFBRztBQUV0QixjQUFJLElBQUksV0FBVyxDQUFDO0FBQ3BCLGVBQUssS0FBSztBQUNWLGVBQUssSUFBSTtBQUNULG9CQUFVLEtBQUssRUFBRTtBQUNqQixvQkFBVSxLQUFLLEVBQUU7QUFBQSxRQUNuQjtBQUVBLGVBQU87QUFBQSxNQUNUO0FBRUEsZUFBUyxjQUFlLEtBQUs7QUFDM0IsZUFBTyxPQUFPLFlBQVksWUFBWSxHQUFHLENBQUM7QUFBQSxNQUM1QztBQUVBLGVBQVMsV0FBWSxLQUFLLEtBQUtPLFNBQVEsUUFBUTtBQUM3QyxpQkFBUyxJQUFJLEdBQUcsSUFBSSxRQUFRLEVBQUUsR0FBRztBQUMvQixjQUFLLElBQUlBLFdBQVUsSUFBSSxVQUFZLEtBQUssSUFBSSxPQUFTO0FBQ3JELGNBQUksSUFBSUEsT0FBTSxJQUFJLElBQUksQ0FBQztBQUFBLFFBQ3pCO0FBQ0EsZUFBTztBQUFBLE1BQ1Q7QUFLQSxlQUFTWCxZQUFZLEtBQUtlLE9BQU07QUFDOUIsZUFBTyxlQUFlQSxTQUNuQixPQUFPLFFBQVEsSUFBSSxlQUFlLFFBQVEsSUFBSSxZQUFZLFFBQVEsUUFDakUsSUFBSSxZQUFZLFNBQVNBLE1BQUs7QUFBQSxNQUNwQztBQUNBLGVBQVMsWUFBYSxLQUFLO0FBRXpCLGVBQU8sUUFBUTtBQUFBLE1BQ2pCO0FBSUEsVUFBSSxzQkFBdUIsV0FBWTtBQUNyQyxZQUFJLFdBQVc7QUFDZixZQUFJLFFBQVEsSUFBSSxNQUFNLEdBQUc7QUFDekIsaUJBQVMsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLEdBQUc7QUFDM0IsY0FBSSxNQUFNLElBQUk7QUFDZCxtQkFBUyxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsR0FBRztBQUMzQixrQkFBTSxNQUFNLENBQUMsSUFBSSxTQUFTLENBQUMsSUFBSSxTQUFTLENBQUM7QUFBQSxVQUMzQztBQUFBLFFBQ0Y7QUFDQSxlQUFPO0FBQUEsTUFDVCxFQUFHO0FBQUE7QUFBQTs7O0FDeHhESDtBQUFBO0FBQUEsa0JBQUFDO0FBQUEsSUFBQTtBQUFBO0FBd1BBLFdBQVMsYUFBYSxLQUFLO0FBQ3ZCLFVBQU0sTUFBTSxXQUFXLElBQUksR0FBRztBQUM5QixRQUFJLENBQUMsS0FBSztBQUNOLFlBQU0sSUFBUyxlQUFlLDBDQUEwQztBQUFBLElBQzVFO0FBQ0EsV0FBTztBQUFBLEVBQ1g7QUFDQSxXQUFTLGFBQWEsT0FBTztBQUN6QixVQUFNLE1BQVcsVUFBVSxPQUFPLE1BQU0sV0FBVyxNQUFNLE1BQU0sTUFBTSxhQUFhLE1BQU0sTUFBTTtBQUM5RixXQUFPLE9BQU8sR0FBRztBQUNqQixlQUFXLElBQUksS0FBSyxLQUFLO0FBQ3pCLFdBQU87QUFBQSxFQUNYO0FBa0NBLFdBQVMsYUFBYSxRQUFRO0FBQzFCLFVBQU0sVUFBVSxjQUFBQyxPQUFTLE1BQU0sT0FBTyxNQUFNO0FBQzVDLFVBQU0sT0FBTyxPQUFPLFNBQVM7QUFDN0IsYUFBUyxRQUFRLEdBQUcsUUFBUSxNQUFNLFNBQVM7QUFDdkMsY0FBUSxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUs7QUFDbEMsVUFBSSxPQUFPLFFBQVEsQ0FBQyxJQUFJLEtBQU07QUFDMUIsZ0JBQVEsS0FBSyxLQUFLO0FBQUEsTUFDdEI7QUFBQSxJQUNKO0FBQ0EsWUFBUSxJQUFJLElBQUksT0FBTyxJQUFJLEtBQUs7QUFDaEMsV0FBTztBQUFBLEVBQ1g7QUFDQSxXQUFTLElBQUlDLElBQUcsR0FBRztBQUNmLFVBQU0sU0FBUyxLQUFLLElBQUlBLEdBQUUsUUFBUSxFQUFFLE1BQU07QUFDMUMsVUFBTSxTQUFTLGNBQUFELE9BQVMsTUFBTSxNQUFNO0FBQ3BDLGFBQVMsUUFBUSxHQUFHLFFBQVEsUUFBUSxTQUFTO0FBQ3pDLGFBQU8sS0FBSyxJQUFJQyxHQUFFLEtBQUssSUFBSSxFQUFFLEtBQUs7QUFBQSxJQUN0QztBQUNBLFdBQU87QUFBQSxFQUNYO0FBQ0EsV0FBUyxJQUFJLEtBQUssU0FBUztBQUN2QixVQUFNLFNBQVMsY0FBQUMsUUFBTyxlQUFlLE1BQU0sSUFBSSxVQUFVLENBQUMsSUFBSSxLQUFLLElBQUk7QUFDdkUsVUFBTSxTQUFTLE9BQU8sT0FBTyxPQUFPO0FBQ3BDLFdBQU8sTUFBTTtBQUNiLFdBQU87QUFBQSxFQUNYO0FBQ0EsV0FBUyxnQkFBZ0IsU0FBUyxZQUFZO0FBQzFDLFVBQU0sUUFBUSxjQUFBRixPQUFTLE1BQU0sU0FBUztBQUN0QyxVQUFNRyxTQUFRLGFBQWE7QUFDM0IsVUFBTUMsT0FBTUQsU0FBUTtBQUNwQixZQUFRLEtBQUssT0FBTyxHQUFHQSxRQUFPQyxJQUFHO0FBQ2pDLFdBQU87QUFBQSxFQUNYO0FBQ0EsV0FBUyxzQkFBc0IsU0FBUyxZQUFZO0FBQ2hELFVBQU0sUUFBUSxjQUFBSixPQUFTLE1BQU0sU0FBUztBQUN0QyxVQUFNRyxTQUFRLGFBQWE7QUFDM0IsVUFBTUMsT0FBTSxRQUFRO0FBQ3BCLFVBQU0sS0FBSyxDQUFDO0FBQ1osWUFBUSxLQUFLLE9BQU8sR0FBR0QsUUFBT0MsSUFBRztBQUNqQyxVQUFNQSxPQUFNRCxNQUFLLElBQUk7QUFDckIsV0FBTztBQUFBLEVBQ1g7QUFDQSxXQUFTLGdCQUFnQixLQUFLO0FBQzFCLFVBQU0sSUFBSSxJQUFJLEtBQUssSUFBSTtBQUN2QixRQUFJLFVBQVUsYUFBYSxDQUFDO0FBQzVCLFFBQUksRUFBRSxDQUFDLElBQUksS0FBTTtBQUNiLGdCQUFVLElBQUksU0FBUyxFQUFFO0FBQUEsSUFDN0I7QUFDQSxRQUFJLFVBQVUsYUFBYSxPQUFPO0FBQ2xDLFFBQUksUUFBUSxDQUFDLElBQUksS0FBTTtBQUNuQixnQkFBVSxJQUFJLFNBQVMsRUFBRTtBQUFBLElBQzdCO0FBQ0EsV0FBTyxFQUFFLFNBQVMsUUFBUTtBQUFBLEVBQzlCO0FBQ0EsV0FBUyxRQUFRLEtBQUssU0FBUztBQUMzQixVQUFNLFVBQVUsZ0JBQWdCLEdBQUc7QUFDbkMsUUFBSSxhQUFhLEtBQUssS0FBSyxRQUFRLFNBQVMsU0FBUztBQUNyRCxRQUFJO0FBQ0osUUFBSTtBQUNKLFFBQUksZUFBZSxHQUFHO0FBQ2xCLG1CQUFhO0FBQ2IsOEJBQXdCO0FBQUEsSUFDNUIsT0FDSztBQUNELDhCQUF5QixRQUFRLFNBQVMsY0FBYztBQUFBLElBQzVEO0FBQ0EsVUFBTSxpQkFBaUIsYUFBYTtBQUNwQyxRQUFJLHVCQUF1QjtBQUN2QixrQkFBWSxJQUFJLGdCQUFnQixTQUFTLGNBQWMsR0FBRyxRQUFRLE9BQU87QUFBQSxJQUM3RSxPQUNLO0FBQ0Qsa0JBQVksSUFBSSxzQkFBc0IsU0FBUyxjQUFjLEdBQUcsUUFBUSxPQUFPO0FBQUEsSUFDbkY7QUFDQSxRQUFJLElBQUk7QUFDUixRQUFJO0FBQ0osYUFBUyxRQUFRLEdBQUcsUUFBUSxnQkFBZ0IsU0FBUztBQUNqRCxVQUFJLElBQUksR0FBRyxnQkFBZ0IsU0FBUyxLQUFLLENBQUM7QUFDMUMsVUFBSSxJQUFJLEtBQUssQ0FBQztBQUFBLElBQ2xCO0FBQ0EsUUFBSSxJQUFJLFdBQVcsQ0FBQztBQUNwQixXQUFPLElBQUksS0FBSyxDQUFDO0FBQUEsRUFDckI7QUEwVUEsV0FBUyxnQkFBZ0IsV0FBVztBQUNoQyxZQUFRLFVBQVUsS0FBSyxZQUFZLEdBQUc7QUFBQSxNQUNsQyxLQUFLLFlBQVk7QUFDYixjQUFNLFNBQVMsU0FBUyxLQUFLLFVBQVUsS0FBSyxJQUFJLEVBQUUsQ0FBQztBQUNuRCxlQUFPLFdBQVcsV0FBVyxNQUFNLElBQUksTUFBTSxLQUFLLEVBQUU7QUFBQSxNQUN4RDtBQUFBLE1BQ0EsS0FBSztBQUNELGVBQU8sS0FBSyxTQUFTLEtBQUssVUFBVSxLQUFLLElBQUksRUFBRSxDQUFDLENBQUM7QUFBQSxNQUNyRCxLQUFLO0FBQ0QsZUFBTyxLQUFLLFNBQVMsS0FBSyxVQUFVLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQztBQUFBLE1BQ3JELEtBQUs7QUFDRCxlQUFPO0FBQUEsTUFDWDtBQUNJLGNBQU0sSUFBUyxlQUFlLDhCQUE4QjtBQUFBLElBQ3BFO0FBQUEsRUFDSjtBQW9vQkEsV0FBUyxxQkFBcUIsWUFBWTtBQUN0QyxVQUFNLE1BQU0sVUFBVSxVQUFVO0FBQ2hDLFFBQUksQ0FBQyxLQUFLO0FBQ04sWUFBTSxJQUFTLGVBQWUseUNBQXlDLFVBQVUsVUFBVTtBQUFBLElBQy9GO0FBQ0EsV0FBTztBQUFBLEVBQ1g7QUE4WkEsV0FBUyxtQkFBbUIsWUFBWTtBQUNwQyxVQUFNLE1BQU0sT0FBTyxXQUFXLFlBQVksQ0FBQztBQUMzQyxRQUFJLENBQUMsS0FBSztBQUNOLFlBQU0sSUFBUyxlQUFlLHlDQUF5QyxVQUFVLFVBQVU7QUFBQSxJQUMvRjtBQUNBLFdBQU87QUFBQSxFQUNYO0FBOXZEQSxNQU9BLGVBQ0EsZUFDQUUsVUFHQUMsbUJBR00sd0JBS0FDLFlBeUJBLGNBUUEsZUFHQSxjQTBCQSxXQXFLQSxZQWVBQyxpQkE2QkEsTUFDQSxJQUNBLFdBbUZBQyxrQkErQkFDLGlCQTZCQUMsaUJBNkJBQyxnQkE2QkFDLGlCQTZCQSxjQWtCQSxXQXdGQSxnQkFzQ0Esb0JBdURBQyxnQkE2QkFDLGVBNkJBLFdBZ05BQyxpQkF5Q0FDLGlCQXlDQSxXQThDQUMsa0JBMklBLGVBdUVBLFdBOENBQyxlQWlDQUMsY0FpQ0EsY0FXQSxnQkFXQSxnQkFXQSxnQkFXQSxpQkFXQSxpQkFXQSxpQkFXQSxVQXNMQUMsZ0JBMENBQyxlQW1DQSxRQWtCQUMsZUFnQ0FDLGNBb0NBLFVBMElBQyxnQkEwQkFDLGlCQXdCQSxrQkFrQkEsbUJBcUJBLGtCQWlCQSxlQXlHQUMsa0JBMkJBQyxpQkEyQ0EsZ0JBR0FDLGlCQWtDQSxlQVlBQyxlQWtFQSxlQUdBQyxlQXFDQSxhQVFBQyxtQkFNQUMsbUJBTUFDLGVBb0RBbkM7QUExOEVOO0FBQUE7QUFJQTtBQUNBO0FBQ0E7QUFDQSxzQkFBbUM7QUFDbkMsc0JBQW1CO0FBQ25CLE1BQUFNLFdBQXlCO0FBQ3pCO0FBQ0EsTUFBQThCO0FBQ0EsTUFBQTdCLG9CQUErQztBQUMvQztBQUVBLE1BQU0seUJBQXlCO0FBQUEsUUFDM0IsVUFBVSxDQUFDLFVBQVUsY0FBQU4sT0FBUyxLQUFLLDBCQUFRLGNBQWMsS0FBSyxDQUFDO0FBQUEsUUFDL0QsUUFBUSxDQUFDLFVBQVUsMEJBQVEsWUFBWSxLQUFLO0FBQUEsTUFDaEQ7QUFFQSxNQUFNTyxhQUFOLGNBQTZCLFVBQVU7QUFBQSxRQUNuQyxjQUFjO0FBQ1YsZ0JBQU0sR0FBRyxTQUFTO0FBQ2xCLGVBQUssT0FBTyxjQUFBUCxPQUFTLE1BQU0sQ0FBQztBQUM1QixlQUFLLFlBQVksRUFBRSxNQUFNLEdBQUc7QUFDNUIsZUFBSyxjQUFjO0FBQ25CLGVBQUssT0FBTztBQUNaLGVBQUssU0FBUyxDQUFDO0FBQ2YsZUFBSyxNQUFNO0FBQ1gsZUFBSyxNQUFNO0FBQUEsUUFDZjtBQUFBLE1BQ0o7QUFDQSxpQkFBVztBQUFBLFFBQ1AsU0FBUyxFQUFFLE1BQU0sT0FBTyxNQUFNLGNBQWMsU0FBUyxVQUFVLEtBQUssQ0FBQztBQUFBLE1BQ3pFLEdBQUdPLFdBQVUsV0FBVyxlQUFlLE1BQU07QUFDN0MsaUJBQVc7QUFBQSxRQUNQLFNBQVMsRUFBRSxNQUFNLFdBQVcsTUFBTSxjQUFjLFFBQVEsVUFBVSxNQUFNLFVBQVUsS0FBSyxDQUFDO0FBQUEsTUFDNUYsR0FBR0EsV0FBVSxXQUFXLFVBQVUsTUFBTTtBQUN4QyxpQkFBVztBQUFBLFFBQ1AsU0FBUyxFQUFFLE1BQU0sY0FBYyxPQUFPLENBQUM7QUFBQSxNQUMzQyxHQUFHQSxXQUFVLFdBQVcsT0FBTyxNQUFNO0FBQ3JDLGlCQUFXO0FBQUEsUUFDUCxTQUFTLEVBQUUsTUFBTSxjQUFjLFFBQVEsVUFBVSxLQUFLLENBQUM7QUFBQSxNQUMzRCxHQUFHQSxXQUFVLFdBQVcsT0FBTyxNQUFNO0FBRXJDLE1BQU0sZUFBTixjQUEyQkEsV0FBVTtBQUFBLFFBQ2pDLGNBQWM7QUFDVixnQkFBTSxHQUFHLFNBQVM7QUFDbEIsZUFBSyxNQUFNO0FBQ1gsZUFBSyxPQUFPO0FBQUEsUUFDaEI7QUFBQSxNQUNKO0FBRUEsTUFBTSxnQkFBTixjQUE0QkEsV0FBVTtBQUFBLE1BQ3RDO0FBRUEsTUFBTSxlQUFOLGNBQTJCLGFBQWE7QUFBQSxRQUNwQyxJQUFJLE1BQU07QUFDTixrQkFBUSxLQUFLLFVBQVUsS0FBSyxZQUFZLEdBQUc7QUFBQSxZQUN2QyxLQUFLO0FBQ0QscUJBQU8sSUFBSSxLQUFLLFVBQVUsTUFBTTtBQUFBLFlBQ3BDLEtBQUs7QUFDRCxxQkFBTyxJQUFJLEtBQUssVUFBVSxNQUFNO0FBQUEsWUFDcEMsS0FBSztBQUNELHFCQUFPLElBQUksS0FBSyxVQUFVLE1BQU07QUFBQSxZQUNwQyxLQUFLO0FBQ0QscUJBQU8sSUFBSSxLQUFLLFVBQVUsTUFBTTtBQUFBLFlBQ3BDLEtBQUs7QUFDRCxxQkFBTyxJQUFJLEtBQUssVUFBVSxNQUFNO0FBQUEsWUFDcEMsS0FBSztBQUNELHFCQUFPLElBQUksS0FBSyxVQUFVLE1BQU07QUFBQSxZQUNwQztBQUNJLG9CQUFNLElBQVMsZUFBZSw0QkFBNEI7QUFBQSxVQUNsRTtBQUFBLFFBQ0o7QUFBQSxRQUNBLElBQUksSUFBSSxPQUFPO0FBQUEsUUFDZjtBQUFBLE1BQ0o7QUFDQSxpQkFBVztBQUFBLFFBQ1AsU0FBUyxFQUFFLE1BQU0sS0FBSyxXQUFXLHVCQUF1QixDQUFDO0FBQUEsTUFDN0QsR0FBRyxhQUFhLFdBQVcsUUFBUSxNQUFNO0FBRXpDLE1BQU0sWUFBTixNQUFnQjtBQUFBLFFBQ1osYUFBYSxZQUFZLFdBQVcsYUFBYSxXQUFXO0FBQ3hELGdCQUFNLE1BQU0sSUFBSSxhQUFhO0FBQzdCLGNBQUksWUFBWTtBQUNoQixjQUFJLGNBQWM7QUFDbEIsY0FBSSxTQUFTO0FBQ2IsY0FBSSxPQUFPLGNBQUFMLFFBQU8sWUFBWSxVQUFVLFVBQVUsQ0FBQztBQUNuRCxpQkFBTztBQUFBLFFBQ1g7QUFBQSxRQUNBLGFBQWEsVUFBVWtDLFNBQVEsS0FBSztBQUNoQyxjQUFJLEVBQUUsZUFBZSxlQUFlO0FBQ2hDLGtCQUFNLElBQUksTUFBTSwwQkFBMEI7QUFBQSxVQUM5QztBQUNBLGtCQUFRQSxRQUFPLFlBQVksR0FBRztBQUFBLFlBQzFCLEtBQUs7QUFDRCxxQkFBTyxlQUFlLE9BQU8sR0FBRztBQUFBLFlBQ3BDLEtBQUs7QUFDRCxxQkFBTyxJQUFJLFdBQVcsSUFBSSxJQUFJLEVBQUU7QUFBQSxZQUNwQztBQUNJLG9CQUFNLElBQVMsZUFBZSxnQ0FBZ0M7QUFBQSxVQUN0RTtBQUFBLFFBQ0o7QUFBQSxRQUNBLGFBQWEsVUFBVUEsU0FBUSxTQUFTLFdBQVcsYUFBYSxXQUFXO0FBQ3ZFLGNBQUk7QUFDSixrQkFBUUEsUUFBTyxZQUFZLEdBQUc7QUFBQSxZQUMxQixLQUFLO0FBQ0Qsb0JBQU0sV0FBVyxTQUFTLFNBQVMsRUFBRSxjQUFjLGFBQWEsQ0FBQztBQUNqRTtBQUFBLFlBQ0osS0FBSztBQUNELG9CQUFNLElBQUksYUFBYTtBQUN2QixrQkFBSSxPQUFPLGNBQUFwQyxPQUFTLEtBQUssT0FBTztBQUNoQztBQUFBLFlBQ0o7QUFDSSxvQkFBTSxJQUFTLGVBQWUsZ0NBQWdDO0FBQUEsVUFDdEU7QUFDQSxjQUFJLFlBQVk7QUFDaEIsY0FBSSxVQUFVLFNBQVMsSUFBSSxLQUFLLFVBQVU7QUFDMUMsY0FBSSxjQUFjO0FBQ2xCLGNBQUksU0FBUztBQUNiLGtCQUFRLElBQUksVUFBVSxRQUFRO0FBQUEsWUFDMUIsS0FBSztBQUFBLFlBQ0wsS0FBSztBQUFBLFlBQ0wsS0FBSztBQUNEO0FBQUEsWUFDSjtBQUNJLG9CQUFNLElBQVMsZUFBZSw4QkFBOEI7QUFBQSxVQUNwRTtBQUNBLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsYUFBYSxRQUFRLFdBQVcsS0FBSyxNQUFNO0FBQ3ZDLGtCQUFRLFVBQVUsS0FBSyxZQUFZLEdBQUc7QUFBQSxZQUNsQyxLQUFLO0FBQ0QscUJBQU8sS0FBSyxjQUFjLFdBQVcsS0FBSyxjQUFBQSxPQUFTLEtBQUssSUFBSSxDQUFDO0FBQUEsWUFDakUsS0FBSztBQUNELHFCQUFPLEtBQUssY0FBYyxXQUFXLEtBQUssY0FBQUEsT0FBUyxLQUFLLElBQUksQ0FBQztBQUFBLFlBQ2pFLEtBQUs7QUFDRCxxQkFBTyxLQUFLLGNBQWMsV0FBVyxLQUFLLGNBQUFBLE9BQVMsS0FBSyxJQUFJLENBQUM7QUFBQSxZQUNqRSxLQUFLO0FBQ0QscUJBQU8sS0FBSyxhQUFhLFdBQVcsS0FBSyxjQUFBQSxPQUFTLEtBQUssSUFBSSxDQUFDO0FBQUEsWUFDaEUsS0FBSztBQUNELHFCQUFPLEtBQUssY0FBYyxXQUFXLEtBQUssY0FBQUEsT0FBUyxLQUFLLElBQUksQ0FBQztBQUFBLFlBQ2pFO0FBQ0ksb0JBQU0sSUFBUyxlQUFlLDhCQUE4QjtBQUFBLFVBQ3BFO0FBQUEsUUFDSjtBQUFBLFFBQ0EsYUFBYSxRQUFRLFdBQVcsS0FBSyxNQUFNO0FBQ3ZDLGNBQUksRUFBRSxlQUFlLGVBQWU7QUFDaEMsa0JBQU0sSUFBSSxNQUFNLDBCQUEwQjtBQUFBLFVBQzlDO0FBQ0Esa0JBQVEsVUFBVSxLQUFLLFlBQVksR0FBRztBQUFBLFlBQ2xDLEtBQUs7QUFDRCxxQkFBTyxLQUFLLGNBQWMsV0FBVyxLQUFLLGNBQUFBLE9BQVMsS0FBSyxJQUFJLENBQUM7QUFBQSxZQUNqRSxLQUFLO0FBQ0QscUJBQU8sS0FBSyxjQUFjLFdBQVcsS0FBSyxjQUFBQSxPQUFTLEtBQUssSUFBSSxDQUFDO0FBQUEsWUFDakUsS0FBSztBQUNELHFCQUFPLEtBQUssY0FBYyxXQUFXLEtBQUssY0FBQUEsT0FBUyxLQUFLLElBQUksQ0FBQztBQUFBLFlBQ2pFLEtBQUs7QUFDRCxxQkFBTyxLQUFLLGFBQWEsV0FBVyxLQUFLLGNBQUFBLE9BQVMsS0FBSyxJQUFJLENBQUM7QUFBQSxZQUNoRSxLQUFLO0FBQ0QscUJBQU8sS0FBSyxjQUFjLFdBQVcsS0FBSyxjQUFBQSxPQUFTLEtBQUssSUFBSSxDQUFDO0FBQUEsWUFDakU7QUFDSSxvQkFBTSxJQUFTLGVBQWUsOEJBQThCO0FBQUEsVUFDcEU7QUFBQSxRQUNKO0FBQUEsUUFDQSxhQUFhLGNBQWMsV0FBVyxLQUFLLE1BQU07QUFDN0MsZ0JBQU0sU0FBUyxjQUFBRSxRQUFPLGVBQWUsT0FBTyxJQUFJLFVBQVUsTUFBTSxRQUFRLElBQUksTUFBTSxJQUFJLFdBQVcsVUFBVSxFQUFFLENBQUM7QUFDOUcsY0FBSSxNQUFNLE9BQU8sT0FBTyxJQUFJO0FBQzVCLGdCQUFNLGNBQUFGLE9BQVMsT0FBTyxDQUFDLEtBQUssT0FBTyxNQUFNLENBQUMsQ0FBQztBQUMzQyxnQkFBTSxNQUFNLElBQUksV0FBVyxHQUFHLEVBQUU7QUFDaEMsaUJBQU87QUFBQSxRQUNYO0FBQUEsUUFDQSxhQUFhLGNBQWMsV0FBVyxLQUFLLE1BQU07QUFDN0MsZ0JBQU0sV0FBVyxjQUFBRSxRQUFPLGlCQUFpQixPQUFPLElBQUksVUFBVSxNQUFNLFFBQVEsSUFBSSxNQUFNLElBQUksV0FBVyxVQUFVLEVBQUUsQ0FBQztBQUNsSCxjQUFJLE1BQU0sU0FBUyxPQUFPLElBQUk7QUFDOUIsZ0JBQU0sY0FBQUYsT0FBUyxPQUFPLENBQUMsS0FBSyxTQUFTLE1BQU0sQ0FBQyxDQUFDO0FBQzdDLGlCQUFPLElBQUksV0FBVyxHQUFHLEVBQUU7QUFBQSxRQUMvQjtBQUFBLFFBQ0EsYUFBYSxjQUFjLFdBQVcsS0FBSyxNQUFNO0FBQzdDLGdCQUFNLFNBQVMsY0FBQUUsUUFBTyxlQUFlLE9BQU8sSUFBSSxVQUFVLE1BQU0sUUFBUSxJQUFJLE1BQU0sY0FBQUYsT0FBUyxLQUFLLFVBQVUsT0FBTyxDQUFDO0FBQ2xILGNBQUksTUFBTSxPQUFPLE9BQU8sSUFBSTtBQUM1QixnQkFBTSxjQUFBQSxPQUFTLE9BQU8sQ0FBQyxLQUFLLE9BQU8sTUFBTSxDQUFDLENBQUM7QUFDM0MsZ0JBQU0sTUFBTSxJQUFJLFdBQVcsR0FBRyxFQUFFO0FBQ2hDLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsYUFBYSxjQUFjLFdBQVcsS0FBSyxNQUFNO0FBQzdDLGdCQUFNLFdBQVcsY0FBQUUsUUFBTyxpQkFBaUIsT0FBTyxJQUFJLFVBQVUsTUFBTSxRQUFRLElBQUksTUFBTSxJQUFJLFdBQVcsVUFBVSxPQUFPLENBQUM7QUFDdkgsY0FBSSxNQUFNLFNBQVMsT0FBTyxJQUFJO0FBQzlCLGdCQUFNLGNBQUFGLE9BQVMsT0FBTyxDQUFDLEtBQUssU0FBUyxNQUFNLENBQUMsQ0FBQztBQUM3QyxpQkFBTyxJQUFJLFdBQVcsR0FBRyxFQUFFO0FBQUEsUUFDL0I7QUFBQSxRQUNBLGFBQWEsY0FBYyxXQUFXLEtBQUssTUFBTTtBQUM3QyxnQkFBTSxTQUFTLGNBQUFFLFFBQU8sZUFBZSxPQUFPLElBQUksVUFBVSxNQUFNLFFBQVEsSUFBSSxNQUFNLGNBQUFGLE9BQVMsS0FBSyxVQUFVLEVBQUUsR0FBRztBQUFBLFlBQzNHLGdCQUFnQixVQUFVLGFBQWEsUUFBUTtBQUFBLFVBQ25ELENBQUM7QUFDRCxjQUFJLFVBQVUsZ0JBQWdCO0FBQzFCLG1CQUFPLE9BQU8sY0FBQUEsT0FBUyxLQUFLLFVBQVUsY0FBYyxDQUFDO0FBQUEsVUFDekQ7QUFDQSxjQUFJLE1BQU0sT0FBTyxPQUFPLElBQUk7QUFDNUIsZ0JBQU0sY0FBQUEsT0FBUyxPQUFPLENBQUMsS0FBSyxPQUFPLE1BQU0sR0FBRyxPQUFPLFdBQVcsQ0FBQyxDQUFDO0FBQ2hFLGdCQUFNLE1BQU0sSUFBSSxXQUFXLEdBQUcsRUFBRTtBQUNoQyxpQkFBTztBQUFBLFFBQ1g7QUFBQSxRQUNBLGFBQWEsY0FBYyxXQUFXLEtBQUssTUFBTTtBQUM3QyxnQkFBTSxhQUFhLFVBQVUsYUFBYSxRQUFRO0FBQ2xELGdCQUFNLFdBQVcsY0FBQUUsUUFBTyxpQkFBaUIsT0FBTyxJQUFJLFVBQVUsTUFBTSxRQUFRLElBQUksTUFBTSxJQUFJLFdBQVcsVUFBVSxFQUFFLEdBQUc7QUFBQSxZQUNoSCxlQUFlO0FBQUEsVUFDbkIsQ0FBQztBQUNELGdCQUFNLE1BQU0sS0FBSyxNQUFNLEdBQUcsS0FBSyxTQUFTLFNBQVM7QUFDakQsZ0JBQU0sTUFBTSxLQUFLLE1BQU0sS0FBSyxTQUFTLFNBQVM7QUFDOUMsY0FBSSxVQUFVLGdCQUFnQjtBQUMxQixxQkFBUyxPQUFPLGNBQUFGLE9BQVMsS0FBSyxVQUFVLGNBQWMsQ0FBQztBQUFBLFVBQzNEO0FBQ0EsbUJBQVMsV0FBVyxHQUFHO0FBQ3ZCLGNBQUksTUFBTSxTQUFTLE9BQU8sR0FBRztBQUM3QixnQkFBTSxjQUFBQSxPQUFTLE9BQU8sQ0FBQyxLQUFLLFNBQVMsTUFBTSxDQUFDLENBQUM7QUFDN0MsaUJBQU8sSUFBSSxXQUFXLEdBQUcsRUFBRTtBQUFBLFFBQy9CO0FBQUEsUUFDQSxhQUFhLGFBQWEsV0FBVyxLQUFLLE1BQU07QUFDNUMsZ0JBQU0sU0FBUyxjQUFBRSxRQUFPLGVBQWUsU0FBUyxJQUFJLFVBQVUsTUFBTSxTQUFTLElBQUksTUFBTSxLQUFLLFNBQVM7QUFDbkcsY0FBSSxNQUFNLE9BQU8sT0FBTyxJQUFJO0FBQzVCLGdCQUFNLGNBQUFGLE9BQVMsT0FBTyxDQUFDLEtBQUssT0FBTyxNQUFNLENBQUMsQ0FBQztBQUMzQyxpQkFBTyxJQUFJLFdBQVcsR0FBRyxFQUFFO0FBQUEsUUFDL0I7QUFBQSxRQUNBLGFBQWEsYUFBYSxXQUFXLEtBQUssTUFBTTtBQUM1QyxnQkFBTSxXQUFXLGNBQUFFLFFBQU8saUJBQWlCLFNBQVMsSUFBSSxVQUFVLE1BQU0sU0FBUyxJQUFJLE1BQU0sS0FBSyxTQUFTO0FBQ3ZHLGNBQUksTUFBTSxTQUFTLE9BQU8sSUFBSTtBQUM5QixnQkFBTSxjQUFBRixPQUFTLE9BQU8sQ0FBQyxLQUFLLFNBQVMsTUFBTSxDQUFDLENBQUM7QUFDN0MsaUJBQU8sSUFBSSxXQUFXLEdBQUcsRUFBRTtBQUFBLFFBQy9CO0FBQUEsUUFDQSxhQUFhLGNBQWMsV0FBVyxLQUFLLE1BQU07QUFDN0MsZ0JBQU0sU0FBUyxjQUFBRSxRQUFPLGVBQWUsT0FBTyxJQUFJLFVBQVUsTUFBTSxRQUFRLElBQUksTUFBTSxJQUFJLFdBQVcsQ0FBQyxDQUFDO0FBQ25HLGNBQUksTUFBTSxPQUFPLE9BQU8sSUFBSTtBQUM1QixnQkFBTSxjQUFBRixPQUFTLE9BQU8sQ0FBQyxLQUFLLE9BQU8sTUFBTSxDQUFDLENBQUM7QUFDM0MsZ0JBQU0sTUFBTSxJQUFJLFdBQVcsR0FBRyxFQUFFO0FBQ2hDLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsYUFBYSxjQUFjLFdBQVcsS0FBSyxNQUFNO0FBQzdDLGdCQUFNLFdBQVcsY0FBQUUsUUFBTyxpQkFBaUIsT0FBTyxJQUFJLFVBQVUsTUFBTSxRQUFRLElBQUksTUFBTSxJQUFJLFdBQVcsQ0FBQyxDQUFDO0FBQ3ZHLGNBQUksTUFBTSxTQUFTLE9BQU8sSUFBSTtBQUM5QixnQkFBTSxjQUFBRixPQUFTLE9BQU8sQ0FBQyxLQUFLLFNBQVMsTUFBTSxDQUFDLENBQUM7QUFDN0MsaUJBQU8sSUFBSSxXQUFXLEdBQUcsRUFBRTtBQUFBLFFBQy9CO0FBQUEsTUFDSjtBQUNBLGdCQUFVLFlBQVksY0FBQUEsT0FBUyxLQUFLLG9CQUFvQixLQUFLO0FBRTdELE1BQU0sYUFBYSxvQkFBSSxRQUFRO0FBZS9CLE1BQU1RLGtCQUFOLGNBQWtDLGVBQWU7QUFBQSxRQUM3QyxNQUFNLGNBQWMsV0FBVyxhQUFhLFdBQVc7QUFDbkQsZ0JBQU0sTUFBTSxNQUFNLFVBQVUsWUFBWTtBQUFBLFlBQ3BDLE1BQU0sS0FBSztBQUFBLFlBQ1gsUUFBUSxVQUFVO0FBQUEsVUFDdEIsR0FBRyxhQUFhLFNBQVM7QUFDekIsaUJBQU8sYUFBYSxHQUFHO0FBQUEsUUFDM0I7QUFBQSxRQUNBLE1BQU0sVUFBVSxXQUFXLEtBQUssTUFBTTtBQUNsQyxpQkFBTyxVQUFVLFFBQVEsV0FBVyxhQUFhLEdBQUcsR0FBRyxJQUFJLFdBQVcsSUFBSSxDQUFDO0FBQUEsUUFDL0U7QUFBQSxRQUNBLE1BQU0sVUFBVSxXQUFXLEtBQUssTUFBTTtBQUNsQyxpQkFBTyxVQUFVLFFBQVEsV0FBVyxhQUFhLEdBQUcsR0FBRyxJQUFJLFdBQVcsSUFBSSxDQUFDO0FBQUEsUUFDL0U7QUFBQSxRQUNBLE1BQU0sWUFBWTRCLFNBQVEsS0FBSztBQUMzQixpQkFBTyxVQUFVLFVBQVVBLFNBQVEsYUFBYSxHQUFHLENBQUM7QUFBQSxRQUN4RDtBQUFBLFFBQ0EsTUFBTSxZQUFZQSxTQUFRLFNBQVMsV0FBVyxhQUFhLFdBQVc7QUFDbEUsZ0JBQU0sTUFBTSxNQUFNLFVBQVUsVUFBVUEsU0FBUSxTQUFTLEVBQUUsTUFBTSxVQUFVLEtBQUssR0FBRyxhQUFhLFNBQVM7QUFDdkcsaUJBQU8sYUFBYSxHQUFHO0FBQUEsUUFDM0I7QUFBQSxRQUNBLGVBQWUsS0FBSyxVQUFVO0FBQzFCLGdCQUFNLGVBQWUsS0FBSyxRQUFRO0FBQ2xDLGNBQUksRUFBRSxhQUFhLEdBQUcsYUFBYSxlQUFlO0FBQzlDLGtCQUFNLElBQUksVUFBVSw0QkFBNEI7QUFBQSxVQUNwRDtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBRUEsTUFBTSxPQUFPLGNBQUFwQyxPQUFTLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDM0UsTUFBTSxLQUFLLGNBQUFBLE9BQVMsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUMzRSxNQUFNLFlBQVk7QUFtRmxCLE1BQU1TLG1CQUFOLGNBQW1DLGdCQUFnQjtBQUFBLFFBQy9DLE1BQU0sY0FBYyxXQUFXLGFBQWEsV0FBVztBQUNuRCxnQkFBTSxNQUFNLE1BQU0sVUFBVSxZQUFZO0FBQUEsWUFDcEMsTUFBTSxLQUFLO0FBQUEsWUFDWCxRQUFRLFVBQVU7QUFBQSxVQUN0QixHQUFHLGFBQWEsU0FBUztBQUN6QixpQkFBTyxhQUFhLEdBQUc7QUFBQSxRQUMzQjtBQUFBLFFBQ0EsTUFBTSxPQUFPLFdBQVcsS0FBSyxNQUFNO0FBQy9CLGdCQUFNLFNBQVMsUUFBUSxhQUFhLEdBQUcsRUFBRSxNQUFNLGNBQUFULE9BQVMsS0FBSyxJQUFJLENBQUM7QUFDbEUsaUJBQU8sSUFBSSxXQUFXLE1BQU0sRUFBRTtBQUFBLFFBQ2xDO0FBQUEsUUFDQSxNQUFNLFNBQVMsV0FBVyxLQUFLLFdBQVcsTUFBTTtBQUM1QyxnQkFBTSxhQUFhLE1BQU0sS0FBSyxLQUFLLFdBQVcsS0FBSyxJQUFJO0FBQ3ZELGlCQUFPLGNBQUFBLE9BQVMsS0FBSyxTQUFTLEVBQUUsUUFBUSxjQUFBQSxPQUFTLEtBQUssVUFBVSxDQUFDLE1BQU07QUFBQSxRQUMzRTtBQUFBLFFBQ0EsTUFBTSxZQUFZb0MsU0FBUSxLQUFLO0FBQzNCLGlCQUFPLFVBQVUsVUFBVUEsU0FBUSxhQUFhLEdBQUcsQ0FBQztBQUFBLFFBQ3hEO0FBQUEsUUFDQSxNQUFNLFlBQVlBLFNBQVEsU0FBUyxXQUFXLGFBQWEsV0FBVztBQUNsRSxnQkFBTSxNQUFNLE1BQU0sVUFBVSxVQUFVQSxTQUFRLFNBQVMsRUFBRSxNQUFNLFVBQVUsS0FBSyxHQUFHLGFBQWEsU0FBUztBQUN2RyxpQkFBTyxhQUFhLEdBQUc7QUFBQSxRQUMzQjtBQUFBLFFBQ0EsZUFBZSxLQUFLLFVBQVU7QUFDMUIsZ0JBQU0sZUFBZSxLQUFLLFFBQVE7QUFDbEMsY0FBSSxFQUFFLGFBQWEsR0FBRyxhQUFhLGVBQWU7QUFDOUMsa0JBQU0sSUFBSSxVQUFVLDRCQUE0QjtBQUFBLFVBQ3BEO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFFQSxNQUFNMUIsa0JBQU4sY0FBa0MsZUFBZTtBQUFBLFFBQzdDLE1BQU0sY0FBYyxXQUFXLGFBQWEsV0FBVztBQUNuRCxnQkFBTSxNQUFNLE1BQU0sVUFBVSxZQUFZO0FBQUEsWUFDcEMsTUFBTSxLQUFLO0FBQUEsWUFDWCxRQUFRLFVBQVU7QUFBQSxVQUN0QixHQUFHLGFBQWEsU0FBUztBQUN6QixpQkFBTyxhQUFhLEdBQUc7QUFBQSxRQUMzQjtBQUFBLFFBQ0EsTUFBTSxVQUFVLFdBQVcsS0FBSyxNQUFNO0FBQ2xDLGlCQUFPLFVBQVUsUUFBUSxXQUFXLGFBQWEsR0FBRyxHQUFHLElBQUksV0FBVyxJQUFJLENBQUM7QUFBQSxRQUMvRTtBQUFBLFFBQ0EsTUFBTSxVQUFVLFdBQVcsS0FBSyxNQUFNO0FBQ2xDLGlCQUFPLFVBQVUsUUFBUSxXQUFXLGFBQWEsR0FBRyxHQUFHLElBQUksV0FBVyxJQUFJLENBQUM7QUFBQSxRQUMvRTtBQUFBLFFBQ0EsTUFBTSxZQUFZMEIsU0FBUSxLQUFLO0FBQzNCLGlCQUFPLFVBQVUsVUFBVUEsU0FBUSxhQUFhLEdBQUcsQ0FBQztBQUFBLFFBQ3hEO0FBQUEsUUFDQSxNQUFNLFlBQVlBLFNBQVEsU0FBUyxXQUFXLGFBQWEsV0FBVztBQUNsRSxnQkFBTSxNQUFNLE1BQU0sVUFBVSxVQUFVQSxTQUFRLFNBQVMsRUFBRSxNQUFNLFVBQVUsS0FBSyxHQUFHLGFBQWEsU0FBUztBQUN2RyxpQkFBTyxhQUFhLEdBQUc7QUFBQSxRQUMzQjtBQUFBLFFBQ0EsZUFBZSxLQUFLLFVBQVU7QUFDMUIsZ0JBQU0sZUFBZSxLQUFLLFFBQVE7QUFDbEMsY0FBSSxFQUFFLGFBQWEsR0FBRyxhQUFhLGVBQWU7QUFDOUMsa0JBQU0sSUFBSSxVQUFVLDRCQUE0QjtBQUFBLFVBQ3BEO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFFQSxNQUFNekIsa0JBQU4sY0FBa0MsZUFBZTtBQUFBLFFBQzdDLE1BQU0sY0FBYyxXQUFXLGFBQWEsV0FBVztBQUNuRCxnQkFBTSxNQUFNLE1BQU0sVUFBVSxZQUFZO0FBQUEsWUFDcEMsTUFBTSxLQUFLO0FBQUEsWUFDWCxRQUFRLFVBQVU7QUFBQSxVQUN0QixHQUFHLGFBQWEsU0FBUztBQUN6QixpQkFBTyxhQUFhLEdBQUc7QUFBQSxRQUMzQjtBQUFBLFFBQ0EsTUFBTSxVQUFVLFdBQVcsS0FBSyxNQUFNO0FBQ2xDLGlCQUFPLFVBQVUsUUFBUSxXQUFXLGFBQWEsR0FBRyxHQUFHLElBQUksV0FBVyxJQUFJLENBQUM7QUFBQSxRQUMvRTtBQUFBLFFBQ0EsTUFBTSxVQUFVLFdBQVcsS0FBSyxNQUFNO0FBQ2xDLGlCQUFPLFVBQVUsUUFBUSxXQUFXLGFBQWEsR0FBRyxHQUFHLElBQUksV0FBVyxJQUFJLENBQUM7QUFBQSxRQUMvRTtBQUFBLFFBQ0EsTUFBTSxZQUFZeUIsU0FBUSxLQUFLO0FBQzNCLGlCQUFPLFVBQVUsVUFBVUEsU0FBUSxhQUFhLEdBQUcsQ0FBQztBQUFBLFFBQ3hEO0FBQUEsUUFDQSxNQUFNLFlBQVlBLFNBQVEsU0FBUyxXQUFXLGFBQWEsV0FBVztBQUNsRSxnQkFBTSxNQUFNLE1BQU0sVUFBVSxVQUFVQSxTQUFRLFNBQVMsRUFBRSxNQUFNLFVBQVUsS0FBSyxHQUFHLGFBQWEsU0FBUztBQUN2RyxpQkFBTyxhQUFhLEdBQUc7QUFBQSxRQUMzQjtBQUFBLFFBQ0EsZUFBZSxLQUFLLFVBQVU7QUFDMUIsZ0JBQU0sZUFBZSxLQUFLLFFBQVE7QUFDbEMsY0FBSSxFQUFFLGFBQWEsR0FBRyxhQUFhLGVBQWU7QUFDOUMsa0JBQU0sSUFBSSxVQUFVLDRCQUE0QjtBQUFBLFVBQ3BEO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFFQSxNQUFNeEIsaUJBQU4sY0FBaUMsY0FBYztBQUFBLFFBQzNDLE1BQU0sY0FBYyxXQUFXLGFBQWEsV0FBVztBQUNuRCxnQkFBTSxNQUFNLE1BQU0sVUFBVSxZQUFZO0FBQUEsWUFDcEMsTUFBTSxLQUFLO0FBQUEsWUFDWCxRQUFRLFVBQVU7QUFBQSxVQUN0QixHQUFHLGFBQWEsU0FBUztBQUN6QixpQkFBTyxhQUFhLEdBQUc7QUFBQSxRQUMzQjtBQUFBLFFBQ0EsTUFBTSxZQUFZd0IsU0FBUSxLQUFLO0FBQzNCLGlCQUFPLFVBQVUsVUFBVUEsU0FBUSxhQUFhLEdBQUcsQ0FBQztBQUFBLFFBQ3hEO0FBQUEsUUFDQSxNQUFNLFlBQVlBLFNBQVEsU0FBUyxXQUFXLGFBQWEsV0FBVztBQUNsRSxnQkFBTSxNQUFNLE1BQU0sVUFBVSxVQUFVQSxTQUFRLFNBQVMsRUFBRSxNQUFNLFVBQVUsS0FBSyxHQUFHLGFBQWEsU0FBUztBQUN2RyxpQkFBTyxhQUFhLEdBQUc7QUFBQSxRQUMzQjtBQUFBLFFBQ0EsTUFBTSxVQUFVLFdBQVcsS0FBSyxNQUFNO0FBQ2xDLGlCQUFPLFVBQVUsUUFBUSxXQUFXLGFBQWEsR0FBRyxHQUFHLElBQUksV0FBVyxJQUFJLENBQUM7QUFBQSxRQUMvRTtBQUFBLFFBQ0EsTUFBTSxVQUFVLFdBQVcsS0FBSyxNQUFNO0FBQ2xDLGlCQUFPLFVBQVUsUUFBUSxXQUFXLGFBQWEsR0FBRyxHQUFHLElBQUksV0FBVyxJQUFJLENBQUM7QUFBQSxRQUMvRTtBQUFBLFFBQ0EsZUFBZSxLQUFLLFVBQVU7QUFDMUIsZ0JBQU0sZUFBZSxLQUFLLFFBQVE7QUFDbEMsY0FBSSxFQUFFLGFBQWEsR0FBRyxhQUFhLGVBQWU7QUFDOUMsa0JBQU0sSUFBSSxVQUFVLDRCQUE0QjtBQUFBLFVBQ3BEO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFFQSxNQUFNdkIsa0JBQU4sY0FBa0MsZUFBZTtBQUFBLFFBQzdDLE1BQU0sY0FBYyxXQUFXLGFBQWEsV0FBVztBQUNuRCxnQkFBTSxNQUFNLE1BQU0sVUFBVSxZQUFZO0FBQUEsWUFDcEMsTUFBTSxLQUFLO0FBQUEsWUFDWCxRQUFRLFVBQVU7QUFBQSxVQUN0QixHQUFHLGFBQWEsU0FBUztBQUN6QixpQkFBTyxhQUFhLEdBQUc7QUFBQSxRQUMzQjtBQUFBLFFBQ0EsTUFBTSxVQUFVLFdBQVcsS0FBSyxNQUFNO0FBQ2xDLGlCQUFPLFVBQVUsUUFBUSxXQUFXLGFBQWEsR0FBRyxHQUFHLElBQUksV0FBVyxJQUFJLENBQUM7QUFBQSxRQUMvRTtBQUFBLFFBQ0EsTUFBTSxVQUFVLFdBQVcsS0FBSyxNQUFNO0FBQ2xDLGlCQUFPLFVBQVUsUUFBUSxXQUFXLGFBQWEsR0FBRyxHQUFHLElBQUksV0FBVyxJQUFJLENBQUM7QUFBQSxRQUMvRTtBQUFBLFFBQ0EsTUFBTSxZQUFZdUIsU0FBUSxLQUFLO0FBQzNCLGlCQUFPLFVBQVUsVUFBVUEsU0FBUSxhQUFhLEdBQUcsQ0FBQztBQUFBLFFBQ3hEO0FBQUEsUUFDQSxNQUFNLFlBQVlBLFNBQVEsU0FBUyxXQUFXLGFBQWEsV0FBVztBQUNsRSxnQkFBTSxNQUFNLE1BQU0sVUFBVSxVQUFVQSxTQUFRLFNBQVMsRUFBRSxNQUFNLFVBQVUsS0FBSyxHQUFHLGFBQWEsU0FBUztBQUN2RyxpQkFBTyxhQUFhLEdBQUc7QUFBQSxRQUMzQjtBQUFBLFFBQ0EsZUFBZSxLQUFLLFVBQVU7QUFDMUIsZ0JBQU0sZUFBZSxLQUFLLFFBQVE7QUFDbEMsY0FBSSxFQUFFLGFBQWEsR0FBRyxhQUFhLGVBQWU7QUFDOUMsa0JBQU0sSUFBSSxVQUFVLDRCQUE0QjtBQUFBLFVBQ3BEO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFFQSxNQUFNLGVBQU4sY0FBMkIsYUFBYTtBQUFBLFFBQ3BDLElBQUksTUFBTTtBQUNOLGtCQUFRLEtBQUssVUFBVSxLQUFLLFlBQVksR0FBRztBQUFBLFlBQ3ZDLEtBQUs7QUFDRCxxQkFBTztBQUFBLFlBQ1gsS0FBSztBQUNELHFCQUFPO0FBQUEsWUFDWDtBQUNJLG9CQUFNLElBQVMsZUFBZSw0QkFBNEI7QUFBQSxVQUNsRTtBQUFBLFFBQ0o7QUFBQSxRQUNBLElBQUksSUFBSSxPQUFPO0FBQUEsUUFDZjtBQUFBLE1BQ0o7QUFDQSxpQkFBVztBQUFBLFFBQ1AsU0FBUyxFQUFFLE1BQU0sS0FBSyxXQUFXLHVCQUF1QixDQUFDO0FBQUEsTUFDN0QsR0FBRyxhQUFhLFdBQVcsUUFBUSxNQUFNO0FBRXpDLE1BQU0sWUFBTixNQUFnQjtBQUFBLFFBQ1osYUFBYSxZQUFZLFdBQVcsYUFBYSxXQUFXO0FBQ3hELGdCQUFNLE1BQU0sSUFBSSxhQUFhO0FBQzdCLGNBQUksWUFBWTtBQUNoQixjQUFJLGNBQWM7QUFDbEIsY0FBSSxTQUFTO0FBQ2IsY0FBSSxPQUFPLGNBQUFsQyxRQUFPLFlBQVksVUFBVSxVQUFVLENBQUM7QUFDbkQsaUJBQU87QUFBQSxRQUNYO0FBQUEsUUFDQSxhQUFhLFVBQVVrQyxTQUFRLEtBQUs7QUFDaEMsa0JBQVFBLFFBQU8sWUFBWSxHQUFHO0FBQUEsWUFDMUIsS0FBSztBQUNELHFCQUFPLGVBQWUsT0FBTyxHQUFHO0FBQUEsWUFDcEMsS0FBSztBQUNELHFCQUFPLElBQUksV0FBVyxJQUFJLElBQUksRUFBRTtBQUFBLFlBQ3BDO0FBQ0ksb0JBQU0sSUFBUyxlQUFlLGdDQUFnQztBQUFBLFVBQ3RFO0FBQUEsUUFDSjtBQUFBLFFBQ0EsYUFBYSxVQUFVQSxTQUFRLFNBQVMsV0FBVyxhQUFhLFdBQVc7QUFDdkUsY0FBSTtBQUNKLGtCQUFRQSxRQUFPLFlBQVksR0FBRztBQUFBLFlBQzFCLEtBQUs7QUFDRCxvQkFBTSxXQUFXLFNBQVMsU0FBUyxFQUFFLGNBQWMsYUFBYSxDQUFDO0FBQ2pFO0FBQUEsWUFDSixLQUFLO0FBQ0Qsb0JBQU0sSUFBSSxhQUFhO0FBQ3ZCLGtCQUFJLE9BQU8sY0FBQXBDLE9BQVMsS0FBSyxPQUFPO0FBQ2hDO0FBQUEsWUFDSjtBQUNJLG9CQUFNLElBQVMsZUFBZSxnQ0FBZ0M7QUFBQSxVQUN0RTtBQUNBLGNBQUksWUFBWTtBQUNoQixjQUFJLGNBQWM7QUFDbEIsY0FBSSxTQUFTO0FBQ2IsaUJBQU87QUFBQSxRQUNYO0FBQUEsUUFDQSxhQUFhLFFBQVEsV0FBVyxLQUFLLE1BQU07QUFDdkMsa0JBQVEsVUFBVSxLQUFLLFlBQVksR0FBRztBQUFBLFlBQ2xDLEtBQUs7QUFDRCxxQkFBTyxLQUFLLGNBQWMsV0FBVyxLQUFLLGNBQUFBLE9BQVMsS0FBSyxJQUFJLENBQUM7QUFBQSxZQUNqRSxLQUFLO0FBQ0QscUJBQU8sS0FBSyxrQkFBa0IsV0FBVyxLQUFLLGNBQUFBLE9BQVMsS0FBSyxJQUFJLENBQUM7QUFBQSxZQUNyRTtBQUNJLG9CQUFNLElBQVMsZUFBZSw4QkFBOEI7QUFBQSxVQUNwRTtBQUFBLFFBQ0o7QUFBQSxRQUNBLGFBQWEsUUFBUSxXQUFXLEtBQUssTUFBTTtBQUN2QyxjQUFJLEVBQUUsZUFBZSxlQUFlO0FBQ2hDLGtCQUFNLElBQUksTUFBTSwwQkFBMEI7QUFBQSxVQUM5QztBQUNBLGtCQUFRLFVBQVUsS0FBSyxZQUFZLEdBQUc7QUFBQSxZQUNsQyxLQUFLO0FBQ0QscUJBQU8sS0FBSyxjQUFjLFdBQVcsS0FBSyxjQUFBQSxPQUFTLEtBQUssSUFBSSxDQUFDO0FBQUEsWUFDakUsS0FBSztBQUNELHFCQUFPLEtBQUssa0JBQWtCLFdBQVcsS0FBSyxjQUFBQSxPQUFTLEtBQUssSUFBSSxDQUFDO0FBQUEsWUFDckU7QUFDSSxvQkFBTSxJQUFTLGVBQWUsOEJBQThCO0FBQUEsVUFDcEU7QUFBQSxRQUNKO0FBQUEsUUFDQSxhQUFhLGNBQWMsV0FBVyxLQUFLLE1BQU07QUFDN0MsZ0JBQU0sU0FBUyxjQUFBRSxRQUFPLGVBQWUsV0FBVyxJQUFJLE1BQU0sSUFBSSxXQUFXLFVBQVUsRUFBRSxDQUFDO0FBQ3RGLGNBQUksTUFBTSxPQUFPLE9BQU8sSUFBSTtBQUM1QixnQkFBTSxjQUFBRixPQUFTLE9BQU8sQ0FBQyxLQUFLLE9BQU8sTUFBTSxDQUFDLENBQUM7QUFDM0MsZ0JBQU0sTUFBTSxJQUFJLFdBQVcsR0FBRyxFQUFFO0FBQ2hDLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsYUFBYSxjQUFjLFdBQVcsS0FBSyxNQUFNO0FBQzdDLGdCQUFNLFdBQVcsY0FBQUUsUUFBTyxpQkFBaUIsV0FBVyxJQUFJLE1BQU0sSUFBSSxXQUFXLFVBQVUsRUFBRSxDQUFDO0FBQzFGLGNBQUksTUFBTSxTQUFTLE9BQU8sSUFBSTtBQUM5QixnQkFBTSxjQUFBRixPQUFTLE9BQU8sQ0FBQyxLQUFLLFNBQVMsTUFBTSxDQUFDLENBQUM7QUFDN0MsaUJBQU8sSUFBSSxXQUFXLEdBQUcsRUFBRTtBQUFBLFFBQy9CO0FBQUEsUUFDQSxhQUFhLGtCQUFrQixXQUFXLEtBQUssTUFBTTtBQUNqRCxnQkFBTSxTQUFTLGNBQUFFLFFBQU8sZUFBZSxnQkFBZ0IsSUFBSSxNQUFNLGNBQUFGLE9BQVMsS0FBSyxVQUFVLEVBQUUsQ0FBQztBQUMxRixjQUFJLE1BQU0sT0FBTyxPQUFPLElBQUk7QUFDNUIsZ0JBQU0sY0FBQUEsT0FBUyxPQUFPLENBQUMsS0FBSyxPQUFPLE1BQU0sQ0FBQyxDQUFDO0FBQzNDLGdCQUFNLE1BQU0sSUFBSSxXQUFXLEdBQUcsRUFBRTtBQUNoQyxpQkFBTztBQUFBLFFBQ1g7QUFBQSxRQUNBLGFBQWEsa0JBQWtCLFdBQVcsS0FBSyxNQUFNO0FBQ2pELGdCQUFNLFdBQVcsY0FBQUUsUUFBTyxpQkFBaUIsZ0JBQWdCLElBQUksTUFBTSxJQUFJLFdBQVcsVUFBVSxFQUFFLENBQUM7QUFDL0YsY0FBSSxNQUFNLFNBQVMsT0FBTyxJQUFJO0FBQzlCLGdCQUFNLGNBQUFGLE9BQVMsT0FBTyxDQUFDLEtBQUssU0FBUyxNQUFNLENBQUMsQ0FBQztBQUM3QyxpQkFBTyxJQUFJLFdBQVcsR0FBRyxFQUFFO0FBQUEsUUFDL0I7QUFBQSxNQUNKO0FBRUEsTUFBTSxpQkFBTixjQUFrQyxZQUFZO0FBQUEsUUFDMUMsY0FBYztBQUNWLGdCQUFNLEdBQUcsU0FBUztBQUNsQixlQUFLLGNBQWM7QUFDbkIsZUFBSyxTQUFTO0FBQ2QsZUFBSyxPQUFPO0FBQUEsUUFDaEI7QUFBQSxRQUNBLE1BQU0sY0FBYyxXQUFXLGFBQWEsV0FBVztBQUNuRCxnQkFBTSxNQUFNLE1BQU0sVUFBVSxZQUFZO0FBQUEsWUFDcEMsTUFBTSxLQUFLO0FBQUEsWUFDWCxRQUFRLEtBQUs7QUFBQSxVQUNqQixHQUFHLGFBQWEsU0FBUztBQUN6QixpQkFBTyxhQUFhLEdBQUc7QUFBQSxRQUMzQjtBQUFBLFFBQ0EsTUFBTSxVQUFVLFdBQVcsS0FBSyxNQUFNO0FBQ2xDLGlCQUFPLFVBQVUsUUFBUSxXQUFXLGFBQWEsR0FBRyxHQUFHLElBQUksV0FBVyxJQUFJLENBQUM7QUFBQSxRQUMvRTtBQUFBLFFBQ0EsTUFBTSxVQUFVLFdBQVcsS0FBSyxNQUFNO0FBQ2xDLGlCQUFPLFVBQVUsUUFBUSxXQUFXLGFBQWEsR0FBRyxHQUFHLElBQUksV0FBVyxJQUFJLENBQUM7QUFBQSxRQUMvRTtBQUFBLFFBQ0EsTUFBTSxZQUFZb0MsU0FBUSxLQUFLO0FBQzNCLGlCQUFPLFVBQVUsVUFBVUEsU0FBUSxhQUFhLEdBQUcsQ0FBQztBQUFBLFFBQ3hEO0FBQUEsUUFDQSxNQUFNLFlBQVlBLFNBQVEsU0FBUyxXQUFXLGFBQWEsV0FBVztBQUNsRSxnQkFBTSxNQUFNLE1BQU0sVUFBVSxVQUFVQSxTQUFRLFNBQVMsRUFBRSxNQUFNLEtBQUssTUFBTSxRQUFRLEtBQUssWUFBWSxHQUFHLGFBQWEsU0FBUztBQUM1SCxjQUFJLElBQUksS0FBSyxXQUFZLEtBQUssZUFBZSxHQUFJO0FBQzdDLGtCQUFNLElBQVMsZUFBZSx5QkFBeUI7QUFBQSxVQUMzRDtBQUNBLGlCQUFPLGFBQWEsR0FBRztBQUFBLFFBQzNCO0FBQUEsUUFDQSxlQUFlLEtBQUssVUFBVTtBQUMxQixnQkFBTSxlQUFlLEtBQUssUUFBUTtBQUNsQyxjQUFJLEVBQUUsYUFBYSxHQUFHLGFBQWEsZUFBZTtBQUM5QyxrQkFBTSxJQUFJLFVBQVUsNEJBQTRCO0FBQUEsVUFDcEQ7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUVBLE1BQU0scUJBQU4sY0FBc0MsWUFBWTtBQUFBLFFBQzlDLGNBQWM7QUFDVixnQkFBTSxHQUFHLFNBQVM7QUFDbEIsZUFBSyxjQUFjO0FBQ25CLGVBQUssU0FBUztBQUNkLGVBQUssT0FBTztBQUFBLFFBQ2hCO0FBQUEsUUFDQSxNQUFNLGNBQWMsV0FBVyxhQUFhLFdBQVc7QUFDbkQsZ0JBQU0sTUFBTSxNQUFNLFVBQVUsWUFBWTtBQUFBLFlBQ3BDLE1BQU0sS0FBSztBQUFBLFlBQ1gsUUFBUSxLQUFLO0FBQUEsVUFDakIsR0FBRyxhQUFhLFNBQVM7QUFDekIsaUJBQU8sYUFBYSxHQUFHO0FBQUEsUUFDM0I7QUFBQSxRQUNBLE1BQU0sVUFBVSxXQUFXLEtBQUssTUFBTTtBQUNsQyxpQkFBTyxVQUFVLFFBQVEsV0FBVyxhQUFhLEdBQUcsR0FBRyxJQUFJLFdBQVcsSUFBSSxDQUFDO0FBQUEsUUFDL0U7QUFBQSxRQUNBLE1BQU0sVUFBVSxXQUFXLEtBQUssTUFBTTtBQUNsQyxpQkFBTyxVQUFVLFFBQVEsV0FBVyxhQUFhLEdBQUcsR0FBRyxJQUFJLFdBQVcsSUFBSSxDQUFDO0FBQUEsUUFDL0U7QUFBQSxRQUNBLE1BQU0sWUFBWUEsU0FBUSxLQUFLO0FBQzNCLGlCQUFPLFVBQVUsVUFBVUEsU0FBUSxhQUFhLEdBQUcsQ0FBQztBQUFBLFFBQ3hEO0FBQUEsUUFDQSxNQUFNLFlBQVlBLFNBQVEsU0FBUyxXQUFXLGFBQWEsV0FBVztBQUNsRSxnQkFBTSxNQUFNLE1BQU0sVUFBVSxVQUFVQSxTQUFRLFNBQVMsRUFBRSxNQUFNLEtBQUssTUFBTSxRQUFRLEtBQUssWUFBWSxHQUFHLGFBQWEsU0FBUztBQUM1SCxjQUFJLElBQUksS0FBSyxXQUFZLEtBQUssZUFBZSxHQUFJO0FBQzdDLGtCQUFNLElBQVMsZUFBZSx5QkFBeUI7QUFBQSxVQUMzRDtBQUNBLGlCQUFPLGFBQWEsR0FBRztBQUFBLFFBQzNCO0FBQUEsUUFDQSxlQUFlLEtBQUssVUFBVTtBQUMxQixnQkFBTSxlQUFlLEtBQUssUUFBUTtBQUNsQyxjQUFJLEVBQUUsYUFBYSxHQUFHLGFBQWEsZUFBZTtBQUM5QyxrQkFBTSxJQUFJLFVBQVUsNEJBQTRCO0FBQUEsVUFDcEQ7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQW1CQSxNQUFNdEIsaUJBQU4sY0FBNEIsY0FBYztBQUFBLFFBQ3RDLGNBQWM7QUFDVixnQkFBTSxHQUFHLFNBQVM7QUFDbEIsZUFBSyxPQUFPO0FBQUEsUUFDaEI7QUFBQSxRQUNBLFNBQVM7QUFDTCxnQkFBTSxVQUFVLFVBQVUsTUFBTSxLQUFLLE1BQVcsUUFBSyxjQUFjO0FBQ25FLGlCQUFPLFVBQVUsTUFBTSxRQUFRLFlBQWlCLFFBQUssYUFBYTtBQUFBLFFBQ3RFO0FBQUEsUUFDQSxTQUFTO0FBQ0wsZ0JBQU0sTUFBTSxLQUFLLE9BQU87QUFDeEIsZ0JBQU0sT0FBTztBQUFBLFlBQ1QsS0FBSztBQUFBLFlBQ0wsS0FBSyxnQkFBZ0IsS0FBSyxTQUFTO0FBQUEsWUFDbkMsU0FBUyxLQUFLO0FBQUEsWUFDZCxLQUFLLEtBQUs7QUFBQSxVQUNkO0FBQ0EsaUJBQU8sT0FBTyxPQUFPLE1BQU0sZUFBZSxPQUFPLEdBQUcsQ0FBQztBQUFBLFFBQ3pEO0FBQUEsUUFDQSxTQUFTLE1BQU07QUFDWCxnQkFBTSxNQUFNLFdBQVcsU0FBUyxNQUFNLEVBQUUsY0FBbUIsUUFBSyxjQUFjLENBQUM7QUFDL0UsZ0JBQU0sVUFBVSxJQUFTLFFBQUssZUFBZTtBQUM3QyxrQkFBUSxvQkFBb0IsWUFBWTtBQUN4QyxrQkFBUSxvQkFBb0IsYUFBYTtBQUN6QyxrQkFBUSxhQUFhLGNBQWMsVUFBVSxHQUFHO0FBQ2hELGVBQUssT0FBTyxjQUFBZCxPQUFTLEtBQUssY0FBYyxVQUFVLE9BQU8sQ0FBQztBQUFBLFFBQzlEO0FBQUEsTUFDSjtBQUVBLE1BQU1lLGdCQUFOLGNBQTJCLGNBQWM7QUFBQSxRQUNyQyxjQUFjO0FBQ1YsZ0JBQU0sR0FBRyxTQUFTO0FBQ2xCLGVBQUssT0FBTztBQUFBLFFBQ2hCO0FBQUEsUUFDQSxTQUFTO0FBQ0wsZ0JBQU0sVUFBVSxVQUFVLE1BQU0sS0FBSyxNQUFXLFFBQUssYUFBYTtBQUNsRSxpQkFBTyxVQUFVLE1BQU0sUUFBUSxXQUFnQixRQUFLLFlBQVk7QUFBQSxRQUNwRTtBQUFBLFFBQ0EsU0FBUztBQUNMLGdCQUFNLE1BQU0sS0FBSyxPQUFPO0FBQ3hCLGdCQUFNLE9BQU87QUFBQSxZQUNULEtBQUs7QUFBQSxZQUNMLEtBQUssZ0JBQWdCLEtBQUssU0FBUztBQUFBLFlBQ25DLFNBQVMsS0FBSztBQUFBLFlBQ2QsS0FBSyxLQUFLO0FBQUEsVUFDZDtBQUNBLGlCQUFPLE9BQU8sT0FBTyxNQUFNLGVBQWUsT0FBTyxHQUFHLENBQUM7QUFBQSxRQUN6RDtBQUFBLFFBQ0EsU0FBUyxNQUFNO0FBQ1gsZ0JBQU0sTUFBTSxXQUFXLFNBQVMsTUFBTSxFQUFFLGNBQW1CLFFBQUssYUFBYSxDQUFDO0FBQzlFLGdCQUFNLFVBQVUsSUFBUyxRQUFLLGNBQWM7QUFDNUMsa0JBQVEsbUJBQW1CLFlBQVk7QUFDdkMsa0JBQVEsbUJBQW1CLGFBQWE7QUFDeEMsa0JBQVEsWUFBWSxjQUFjLFVBQVUsR0FBRztBQUMvQyxlQUFLLE9BQU8sY0FBQWYsT0FBUyxLQUFLLGNBQWMsVUFBVSxPQUFPLENBQUM7QUFBQSxRQUM5RDtBQUFBLE1BQ0o7QUFFQSxNQUFNLFlBQU4sTUFBZ0I7QUFBQSxRQUNaLGFBQWEsWUFBWSxXQUFXLGFBQWEsV0FBVztBQUN4RCxnQkFBTSxhQUFhLElBQUljLGVBQWM7QUFDckMscUJBQVcsWUFBWTtBQUN2QixxQkFBVyxjQUFjO0FBQ3pCLHFCQUFXLFNBQVMsVUFBVSxPQUFPLENBQUMsVUFBVSxLQUFLLGlCQUFpQixRQUFRLEtBQUssTUFBTSxFQUFFO0FBQzNGLGdCQUFNLFlBQVksSUFBSUMsY0FBYTtBQUNuQyxvQkFBVSxZQUFZO0FBQ3RCLG9CQUFVLGNBQWM7QUFDeEIsb0JBQVUsU0FBUyxVQUFVLE9BQU8sQ0FBQyxVQUFVLEtBQUssZ0JBQWdCLFFBQVEsS0FBSyxNQUFNLEVBQUU7QUFDekYsZ0JBQU0saUJBQWlCLGNBQUFmLE9BQVMsT0FBTztBQUFBLFlBQ25DLGNBQUFBLE9BQVMsTUFBTSxJQUFJLFVBQVUsZUFBZSxZQUFZLENBQUM7QUFBQSxZQUN6RCxjQUFBQSxPQUFTLEtBQUssVUFBVSxjQUFjO0FBQUEsVUFDMUMsQ0FBQyxFQUFFLFlBQVksQ0FBQztBQUNoQixnQkFBTSxPQUFPLGNBQUFFLFFBQU8sb0JBQW9CLE9BQU87QUFBQSxZQUMzQyxlQUFlLFVBQVU7QUFBQSxZQUN6QjtBQUFBLFlBQ0EsbUJBQW1CO0FBQUEsY0FDZixRQUFRO0FBQUEsY0FDUixNQUFNO0FBQUEsWUFDVjtBQUFBLFlBQ0Esb0JBQW9CO0FBQUEsY0FDaEIsUUFBUTtBQUFBLGNBQ1IsTUFBTTtBQUFBLFlBQ1Y7QUFBQSxVQUNKLENBQUM7QUFDRCxxQkFBVyxPQUFPLEtBQUs7QUFDdkIsb0JBQVUsT0FBTyxLQUFLO0FBQ3RCLGdCQUFNLE1BQU07QUFBQSxZQUNSO0FBQUEsWUFDQTtBQUFBLFVBQ0o7QUFDQSxpQkFBTztBQUFBLFFBQ1g7QUFBQSxRQUNBLGFBQWEsVUFBVWtDLFNBQVEsS0FBSztBQUNoQyxrQkFBUUEsUUFBTyxZQUFZLEdBQUc7QUFBQSxZQUMxQixLQUFLO0FBQ0QscUJBQU8sZUFBZSxPQUFPLEdBQUc7QUFBQSxZQUNwQyxLQUFLO0FBQUEsWUFDTCxLQUFLO0FBQ0QscUJBQU8sSUFBSSxXQUFXLElBQUksSUFBSSxFQUFFO0FBQUEsWUFDcEM7QUFDSSxvQkFBTSxJQUFTLGVBQWUsMENBQTBDO0FBQUEsVUFDaEY7QUFBQSxRQUNKO0FBQUEsUUFDQSxhQUFhLFVBQVVBLFNBQVEsU0FBUyxXQUFXLGFBQWEsV0FBVztBQUN2RSxrQkFBUUEsUUFBTyxZQUFZLEdBQUc7QUFBQSxZQUMxQixLQUFLLE9BQU87QUFDUixvQkFBTSxNQUFNO0FBQ1osa0JBQUksSUFBSSxHQUFHO0FBQ1Asc0JBQU0sU0FBUyxXQUFXLFNBQVMsU0FBUyxFQUFFLGNBQW1CLFFBQUssY0FBYyxDQUFDO0FBQ3JGLHVCQUFPLEtBQUssaUJBQWlCLFFBQVEsV0FBVyxhQUFhLFNBQVM7QUFBQSxjQUMxRSxPQUNLO0FBQ0Qsc0JBQU0sU0FBUyxXQUFXLFNBQVMsU0FBUyxFQUFFLGNBQW1CLFFBQUssYUFBYSxDQUFDO0FBQ3BGLHVCQUFPLEtBQUssZ0JBQWdCLFFBQVEsV0FBVyxhQUFhLFNBQVM7QUFBQSxjQUN6RTtBQUFBLFlBQ0o7QUFBQSxZQUNBLEtBQUssUUFBUTtBQUNULG9CQUFNLFVBQVUsVUFBVSxNQUFNLElBQUksV0FBVyxPQUFPLEdBQVEsUUFBSyxhQUFhO0FBQ2hGLG9CQUFNLFNBQVMsVUFBVSxNQUFNLFFBQVEsV0FBZ0IsUUFBSyxZQUFZO0FBQ3hFLHFCQUFPLEtBQUssZ0JBQWdCLFFBQVEsV0FBVyxhQUFhLFNBQVM7QUFBQSxZQUN6RTtBQUFBLFlBQ0EsS0FBSyxTQUFTO0FBQ1Ysb0JBQU0sVUFBVSxVQUFVLE1BQU0sSUFBSSxXQUFXLE9BQU8sR0FBUSxRQUFLLGNBQWM7QUFDakYsb0JBQU0sU0FBUyxVQUFVLE1BQU0sUUFBUSxZQUFpQixRQUFLLGFBQWE7QUFDMUUscUJBQU8sS0FBSyxpQkFBaUIsUUFBUSxXQUFXLGFBQWEsU0FBUztBQUFBLFlBQzFFO0FBQUEsWUFDQTtBQUNJLG9CQUFNLElBQVMsZUFBZSwwQ0FBMEM7QUFBQSxVQUNoRjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGFBQWEsS0FBSyxXQUFXLEtBQUssTUFBTTtBQUNwQyxrQkFBUSxVQUFVLEtBQUssWUFBWSxHQUFHO0FBQUEsWUFDbEMsS0FBSztBQUFBLFlBQ0wsS0FBSztBQUNELHFCQUFPLEtBQUssUUFBUSxXQUFXLEtBQUssSUFBSTtBQUFBLFlBQzVDO0FBQ0ksb0JBQU0sSUFBUyxlQUFlLDhCQUE4QjtBQUFBLFVBQ3BFO0FBQUEsUUFDSjtBQUFBLFFBQ0EsYUFBYSxPQUFPLFdBQVcsS0FBSyxXQUFXLE1BQU07QUFDakQsa0JBQVEsVUFBVSxLQUFLLFlBQVksR0FBRztBQUFBLFlBQ2xDLEtBQUs7QUFBQSxZQUNMLEtBQUs7QUFDRCxxQkFBTyxLQUFLLFVBQVUsV0FBVyxLQUFLLE1BQU0sU0FBUztBQUFBLFlBQ3pEO0FBQ0ksb0JBQU0sSUFBUyxlQUFlLDhCQUE4QjtBQUFBLFVBQ3BFO0FBQUEsUUFDSjtBQUFBLFFBQ0EsYUFBYSxRQUFRLFdBQVcsS0FBSyxNQUFNO0FBQ3ZDLGtCQUFRLFVBQVUsS0FBSyxZQUFZLEdBQUc7QUFBQSxZQUNsQyxLQUFLO0FBQ0QscUJBQU8sS0FBSyxZQUFZLFdBQVcsS0FBSyxJQUFJO0FBQUEsWUFDaEQ7QUFDSSxvQkFBTSxJQUFTLGVBQWUsOEJBQThCO0FBQUEsVUFDcEU7QUFBQSxRQUNKO0FBQUEsUUFDQSxhQUFhLFFBQVEsV0FBVyxLQUFLLE1BQU07QUFDdkMsa0JBQVEsVUFBVSxLQUFLLFlBQVksR0FBRztBQUFBLFlBQ2xDLEtBQUs7QUFDRCxxQkFBTyxLQUFLLFlBQVksV0FBVyxLQUFLLElBQUk7QUFBQSxZQUNoRDtBQUNJLG9CQUFNLElBQVMsZUFBZSw4QkFBOEI7QUFBQSxVQUNwRTtBQUFBLFFBQ0o7QUFBQSxRQUNBLE9BQU8saUJBQWlCLFFBQVEsV0FBVyxhQUFhLFdBQVc7QUFDL0QsZ0JBQU0sVUFBVSxJQUFTLFFBQUssZUFBZTtBQUM3QyxrQkFBUSxvQkFBb0IsWUFBWTtBQUN4QyxrQkFBUSxvQkFBb0IsYUFBYTtBQUN6QyxrQkFBUSxhQUFhLGNBQWMsVUFBVSxNQUFNO0FBQ25ELGdCQUFNLE1BQU0sSUFBSXRCLGVBQWM7QUFDOUIsY0FBSSxPQUFPLGNBQUFkLE9BQVMsS0FBSyxjQUFjLFVBQVUsT0FBTyxDQUFDO0FBQ3pELGNBQUksWUFBWSxPQUFPLE9BQU8sQ0FBQyxHQUFHLFNBQVM7QUFDM0MsY0FBSSxVQUFVLGlCQUFpQixJQUFJLFdBQVcsT0FBTyxjQUFjO0FBQ25FLGNBQUksVUFBVSxnQkFBZ0IsT0FBTyxRQUFRLGNBQWM7QUFDM0QsY0FBSSxjQUFjO0FBQ2xCLGNBQUksU0FBUztBQUNiLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsT0FBTyxnQkFBZ0IsUUFBUSxXQUFXLGFBQWEsV0FBVztBQUM5RCxnQkFBTSxVQUFVLElBQVMsUUFBSyxjQUFjO0FBQzVDLGtCQUFRLG1CQUFtQixZQUFZO0FBQ3ZDLGtCQUFRLG1CQUFtQixhQUFhO0FBQ3hDLGtCQUFRLFlBQVksY0FBYyxVQUFVLE1BQU07QUFDbEQsZ0JBQU0sTUFBTSxJQUFJZSxjQUFhO0FBQzdCLGNBQUksT0FBTyxjQUFBZixPQUFTLEtBQUssY0FBYyxVQUFVLE9BQU8sQ0FBQztBQUN6RCxjQUFJLFlBQVksT0FBTyxPQUFPLENBQUMsR0FBRyxTQUFTO0FBQzNDLGNBQUksVUFBVSxpQkFBaUIsSUFBSSxXQUFXLE9BQU8sY0FBYztBQUNuRSxjQUFJLFVBQVUsZ0JBQWdCLE9BQU8sUUFBUSxjQUFjO0FBQzNELGNBQUksY0FBYztBQUNsQixjQUFJLFNBQVM7QUFDYixpQkFBTztBQUFBLFFBQ1g7QUFBQSxRQUNBLE9BQU8sbUJBQW1CLEtBQUs7QUFDM0Isa0JBQVEsSUFBSSxLQUFLLEtBQUssWUFBWSxHQUFHO0FBQUEsWUFDakMsS0FBSztBQUNELHFCQUFPO0FBQUEsWUFDWCxLQUFLO0FBQ0QscUJBQU87QUFBQSxZQUNYLEtBQUs7QUFDRCxxQkFBTztBQUFBLFlBQ1gsS0FBSztBQUNELHFCQUFPO0FBQUEsWUFDWCxLQUFLO0FBQ0QscUJBQU87QUFBQSxZQUNYLEtBQUs7QUFDRCxxQkFBTztBQUFBLFlBQ1gsS0FBSztBQUNELHFCQUFPO0FBQUEsWUFDWDtBQUNJLG9CQUFNLElBQVMsZUFBZSxtQ0FBbUM7QUFBQSxVQUN6RTtBQUFBLFFBQ0o7QUFBQSxRQUNBLE9BQU8sUUFBUSxXQUFXLEtBQUssTUFBTTtBQUNqQyxnQkFBTSxZQUFZLEtBQUssbUJBQW1CLElBQUksU0FBUztBQUN2RCxnQkFBTSxTQUFTLGNBQUFFLFFBQU8sV0FBVyxTQUFTO0FBQzFDLGlCQUFPLE9BQU8sY0FBQUYsT0FBUyxLQUFLLElBQUksQ0FBQztBQUNqQyxjQUFJLENBQUMsSUFBSSxLQUFLO0FBQ1YsZ0JBQUksTUFBTTtBQUFBLEVBQWdDLElBQUksS0FBSyxTQUFTLFFBQVEsQ0FBQztBQUFBO0FBQUEsVUFDekU7QUFDQSxnQkFBTXFDLFdBQVU7QUFBQSxZQUNaLEtBQUssSUFBSTtBQUFBLFVBQ2I7QUFDQSxjQUFJLFVBQVUsS0FBSyxZQUFZLE1BQU0sV0FBVztBQUM1QyxZQUFBQSxTQUFRLFVBQVUsY0FBQW5DLFFBQU8sVUFBVTtBQUNuQyxZQUFBbUMsU0FBUSxhQUFhLFVBQVU7QUFBQSxVQUNuQztBQUNBLGdCQUFNLFlBQVksT0FBTyxLQUFLQSxRQUFPO0FBQ3JDLGlCQUFPLElBQUksV0FBVyxTQUFTLEVBQUU7QUFBQSxRQUNyQztBQUFBLFFBQ0EsT0FBTyxVQUFVLFdBQVcsS0FBSyxNQUFNLFdBQVc7QUFDOUMsZ0JBQU0sWUFBWSxLQUFLLG1CQUFtQixJQUFJLFNBQVM7QUFDdkQsZ0JBQU0sU0FBUyxjQUFBbkMsUUFBTyxhQUFhLFNBQVM7QUFDNUMsaUJBQU8sT0FBTyxjQUFBRixPQUFTLEtBQUssSUFBSSxDQUFDO0FBQ2pDLGNBQUksQ0FBQyxJQUFJLEtBQUs7QUFDVixnQkFBSSxNQUFNO0FBQUEsRUFBK0IsSUFBSSxLQUFLLFNBQVMsUUFBUSxDQUFDO0FBQUE7QUFBQSxVQUN4RTtBQUNBLGdCQUFNcUMsV0FBVTtBQUFBLFlBQ1osS0FBSyxJQUFJO0FBQUEsVUFDYjtBQUNBLGNBQUksVUFBVSxLQUFLLFlBQVksTUFBTSxXQUFXO0FBQzVDLFlBQUFBLFNBQVEsVUFBVSxjQUFBbkMsUUFBTyxVQUFVO0FBQ25DLFlBQUFtQyxTQUFRLGFBQWEsVUFBVTtBQUFBLFVBQ25DO0FBQ0EsZ0JBQU0sS0FBSyxPQUFPLE9BQU9BLFVBQVMsU0FBUztBQUMzQyxpQkFBTztBQUFBLFFBQ1g7QUFBQSxRQUNBLE9BQU8sWUFBWSxXQUFXLEtBQUssTUFBTTtBQUNyQyxnQkFBTUEsV0FBVTtBQUFBLFlBQ1osS0FBSztBQUFBLEVBQStCLElBQUksS0FBSyxTQUFTLFFBQVEsQ0FBQztBQUFBO0FBQUEsWUFDL0QsU0FBUyxjQUFBbkMsUUFBTyxVQUFVO0FBQUEsVUFDOUI7QUFDQSxjQUFJLFVBQVUsTUFBTztBQUNyQixpQkFBTyxJQUFJLFdBQVcsY0FBQUEsUUFBTyxjQUFjbUMsVUFBUyxJQUFJLENBQUMsRUFBRTtBQUFBLFFBQy9EO0FBQUEsUUFDQSxPQUFPLFlBQVksV0FBVyxLQUFLLE1BQU07QUFDckMsZ0JBQU1BLFdBQVU7QUFBQSxZQUNaLEtBQUs7QUFBQSxFQUFnQyxJQUFJLEtBQUssU0FBUyxRQUFRLENBQUM7QUFBQTtBQUFBLFlBQ2hFLFNBQVMsY0FBQW5DLFFBQU8sVUFBVTtBQUFBLFVBQzlCO0FBQ0EsY0FBSSxVQUFVLE1BQU87QUFDckIsaUJBQU8sSUFBSSxXQUFXLGNBQUFBLFFBQU8sZUFBZW1DLFVBQVMsSUFBSSxDQUFDLEVBQUU7QUFBQSxRQUNoRTtBQUFBLE1BQ0o7QUFDQSxnQkFBVSxrQkFBa0IsQ0FBQyxVQUFVLFdBQVcsU0FBUztBQUMzRCxnQkFBVSxtQkFBbUIsQ0FBQyxRQUFRLFdBQVcsV0FBVztBQUU1RCxNQUFNckIsa0JBQU4sY0FBa0MsZUFBZTtBQUFBLFFBQzdDLGNBQWM7QUFDVixnQkFBTSxHQUFHLFNBQVM7QUFDbEIsZUFBSyxpQkFBaUI7QUFBQSxZQUNsQjtBQUFBLFlBQVM7QUFBQSxZQUFXO0FBQUEsWUFBVztBQUFBLFlBQy9CO0FBQUEsWUFBWTtBQUFBLFlBQ1o7QUFBQSxZQUFZO0FBQUEsWUFBWTtBQUFBLFVBQzVCO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTSxjQUFjLFdBQVcsYUFBYSxXQUFXO0FBQ25ELGdCQUFNLE9BQU8sTUFBTSxVQUFVLFlBQVk7QUFBQSxZQUNyQyxHQUFHO0FBQUEsWUFDSCxNQUFNLEtBQUs7QUFBQSxVQUNmLEdBQUcsYUFBYSxTQUFTO0FBQ3pCLGlCQUFPO0FBQUEsWUFDSCxZQUFZLGFBQWEsS0FBSyxVQUFVO0FBQUEsWUFDeEMsV0FBVyxhQUFhLEtBQUssU0FBUztBQUFBLFVBQzFDO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTSxPQUFPLFdBQVcsS0FBSyxNQUFNO0FBQy9CLGlCQUFPLFVBQVUsS0FBSyxXQUFXLGFBQWEsR0FBRyxHQUFHLElBQUksV0FBVyxJQUFJLENBQUM7QUFBQSxRQUM1RTtBQUFBLFFBQ0EsTUFBTSxTQUFTLFdBQVcsS0FBSyxXQUFXLE1BQU07QUFDNUMsaUJBQU8sVUFBVSxPQUFPLFdBQVcsYUFBYSxHQUFHLEdBQUcsSUFBSSxXQUFXLFNBQVMsR0FBRyxJQUFJLFdBQVcsSUFBSSxDQUFDO0FBQUEsUUFDekc7QUFBQSxRQUNBLE1BQU0sWUFBWW9CLFNBQVEsS0FBSztBQUMzQixpQkFBTyxVQUFVLFVBQVVBLFNBQVEsYUFBYSxHQUFHLENBQUM7QUFBQSxRQUN4RDtBQUFBLFFBQ0EsTUFBTSxZQUFZQSxTQUFRLFNBQVMsV0FBVyxhQUFhLFdBQVc7QUFDbEUsZ0JBQU0sTUFBTSxNQUFNLFVBQVUsVUFBVUEsU0FBUSxTQUFTLEVBQUUsR0FBRyxXQUFXLE1BQU0sS0FBSyxLQUFLLEdBQUcsYUFBYSxTQUFTO0FBQ2hILGlCQUFPLGFBQWEsR0FBRztBQUFBLFFBQzNCO0FBQUEsUUFDQSxlQUFlLEtBQUssVUFBVTtBQUMxQixnQkFBTSxlQUFlLEtBQUssUUFBUTtBQUNsQyxnQkFBTSxjQUFjLGFBQWEsR0FBRztBQUNwQyxjQUFJLEVBQUUsdUJBQXVCdEIsa0JBQWlCLHVCQUF1QkMsZ0JBQWU7QUFDaEYsa0JBQU0sSUFBSSxVQUFVLDJCQUEyQjtBQUFBLFVBQ25EO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFFQSxNQUFNRSxrQkFBTixjQUFrQyxlQUFlO0FBQUEsUUFDN0MsY0FBYztBQUNWLGdCQUFNLEdBQUcsU0FBUztBQUNsQixlQUFLLGlCQUFpQjtBQUFBLFlBQ2xCO0FBQUEsWUFBUztBQUFBLFlBQVc7QUFBQSxZQUFXO0FBQUEsWUFDL0I7QUFBQSxZQUFZO0FBQUEsWUFDWjtBQUFBLFlBQVk7QUFBQSxZQUFZO0FBQUEsVUFDNUI7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNLGNBQWMsV0FBVyxhQUFhLFdBQVc7QUFDbkQsZ0JBQU0sT0FBTyxNQUFNLFVBQVUsWUFBWTtBQUFBLFlBQ3JDLEdBQUc7QUFBQSxZQUNILE1BQU0sS0FBSztBQUFBLFVBQ2YsR0FBRyxhQUFhLFNBQVM7QUFDekIsaUJBQU87QUFBQSxZQUNILFlBQVksYUFBYSxLQUFLLFVBQVU7QUFBQSxZQUN4QyxXQUFXLGFBQWEsS0FBSyxTQUFTO0FBQUEsVUFDMUM7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNLE9BQU8sV0FBVyxLQUFLLE1BQU07QUFDL0IsaUJBQU8sVUFBVSxLQUFLLFdBQVcsYUFBYSxHQUFHLEdBQUcsSUFBSSxXQUFXLElBQUksQ0FBQztBQUFBLFFBQzVFO0FBQUEsUUFDQSxNQUFNLFNBQVMsV0FBVyxLQUFLLFdBQVcsTUFBTTtBQUM1QyxpQkFBTyxVQUFVLE9BQU8sV0FBVyxhQUFhLEdBQUcsR0FBRyxJQUFJLFdBQVcsU0FBUyxHQUFHLElBQUksV0FBVyxJQUFJLENBQUM7QUFBQSxRQUN6RztBQUFBLFFBQ0EsTUFBTSxZQUFZbUIsU0FBUSxLQUFLO0FBQzNCLGlCQUFPLFVBQVUsVUFBVUEsU0FBUSxhQUFhLEdBQUcsQ0FBQztBQUFBLFFBQ3hEO0FBQUEsUUFDQSxNQUFNLFlBQVlBLFNBQVEsU0FBUyxXQUFXLGFBQWEsV0FBVztBQUNsRSxnQkFBTSxNQUFNLE1BQU0sVUFBVSxVQUFVQSxTQUFRLFNBQVMsRUFBRSxHQUFHLFdBQVcsTUFBTSxLQUFLLEtBQUssR0FBRyxhQUFhLFNBQVM7QUFDaEgsaUJBQU8sYUFBYSxHQUFHO0FBQUEsUUFDM0I7QUFBQSxRQUNBLGVBQWUsS0FBSyxVQUFVO0FBQzFCLGdCQUFNLGVBQWUsS0FBSyxRQUFRO0FBQ2xDLGdCQUFNLGNBQWMsYUFBYSxHQUFHO0FBQ3BDLGNBQUksRUFBRSx1QkFBdUJ0QixrQkFBaUIsdUJBQXVCQyxnQkFBZTtBQUNoRixrQkFBTSxJQUFJLFVBQVUsMkJBQTJCO0FBQUEsVUFDbkQ7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUVBLE1BQU0sWUFBTixNQUFnQjtBQUFBLFFBQ1osT0FBTyxLQUFLLFdBQVc7QUFDbkIsa0JBQVEsVUFBVSxLQUFLLFlBQVksR0FBRztBQUFBLFlBQ2xDLEtBQUs7QUFDRCxxQkFBTztBQUFBLFlBQ1gsS0FBSztBQUFBLFlBQ0wsS0FBSztBQUNELHFCQUFPO0FBQUEsWUFDWCxLQUFLO0FBQUEsWUFDTCxLQUFLO0FBQ0QscUJBQU87QUFBQSxZQUNYLEtBQUs7QUFBQSxZQUNMLEtBQUs7QUFDRCxxQkFBTztBQUFBLFlBQ1g7QUFDSSxvQkFBTSxJQUFJLE1BQU0sbUJBQW1CO0FBQUEsVUFDM0M7QUFBQSxRQUNKO0FBQUEsUUFDQSxPQUFPLGlCQUFpQixXQUFXO0FBQy9CLGtCQUFRLFVBQVUsS0FBSyxZQUFZLEdBQUc7QUFBQSxZQUNsQyxLQUFLO0FBQ0QscUJBQU87QUFBQSxZQUNYLEtBQUs7QUFDRCxxQkFBTztBQUFBLFlBQ1gsS0FBSztBQUNELHFCQUFPO0FBQUEsWUFDWCxLQUFLO0FBQ0QscUJBQU87QUFBQSxZQUNYLEtBQUs7QUFDRCxxQkFBTztBQUFBLFlBQ1gsS0FBSztBQUNELHFCQUFPO0FBQUEsWUFDWCxLQUFLO0FBQ0QscUJBQU87QUFBQSxZQUNYO0FBQ0ksb0JBQU0sSUFBSSxNQUFNLG1CQUFtQjtBQUFBLFVBQzNDO0FBQUEsUUFDSjtBQUFBLFFBQ0EsT0FBTyxPQUFPLFdBQVcsTUFBTTtBQUMzQixnQkFBTSxVQUFVLEtBQUssaUJBQWlCLFNBQVM7QUFDL0MsZ0JBQU11QixRQUFPLGNBQUFwQyxRQUFPLFdBQVcsT0FBTyxFQUNqQyxPQUFPLGNBQUFGLE9BQVMsS0FBSyxJQUFJLENBQUMsRUFBRSxPQUFPO0FBQ3hDLGlCQUFPLElBQUksV0FBV3NDLEtBQUksRUFBRTtBQUFBLFFBQ2hDO0FBQUEsTUFDSjtBQUVBLE1BQU1wQixtQkFBTixjQUFtQyxnQkFBZ0I7QUFBQSxRQUMvQyxNQUFNLGNBQWMsV0FBVyxhQUFhLFdBQVc7QUFDbkQsZ0JBQU0sT0FBTyxNQUFNLFVBQVUsWUFBWTtBQUFBLFlBQ3JDLEdBQUc7QUFBQSxZQUNILE1BQU0sS0FBSztBQUFBLFVBQ2YsR0FBRyxhQUFhLFNBQVM7QUFDekIsaUJBQU87QUFBQSxZQUNILFlBQVksYUFBYSxLQUFLLFVBQVU7QUFBQSxZQUN4QyxXQUFXLGFBQWEsS0FBSyxTQUFTO0FBQUEsVUFDMUM7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNLFVBQVUsV0FBVyxLQUFLLE1BQU07QUFDbEMsZ0JBQU0sY0FBYyxhQUFhLEdBQUc7QUFDcEMsZ0JBQU0sV0FBVyxJQUFJLFdBQVcsSUFBSTtBQUNwQyxnQkFBTSxVQUFVLEtBQUssS0FBSyxZQUFZLFVBQVUsaUJBQWlCLENBQUM7QUFDbEUsZ0JBQU0sV0FBVyxVQUFVLEtBQUssWUFBWSxVQUFVLElBQUksS0FBSztBQUMvRCxnQkFBTSxhQUFhLFNBQVM7QUFDNUIsZ0JBQU0sV0FBVyxVQUFVLGFBQWEsSUFBSSxXQUFXO0FBQ3ZELGNBQUksYUFBYSxVQUFVLElBQUksV0FBVyxHQUFHO0FBQ3pDLGtCQUFNLElBQUksTUFBTSxnQkFBZ0I7QUFBQSxVQUNwQztBQUNBLGdCQUFNLFVBQVUsSUFBSSxXQUFXLE9BQU87QUFDdEMsZ0JBQU0sT0FBTyxRQUFRLFNBQVMsR0FBRyxXQUFXLENBQUM7QUFDN0MsZ0JBQU0sWUFBWSxRQUFRLFNBQVMsV0FBVyxDQUFDO0FBQy9DLG9CQUFVLElBQUksVUFBVSxXQUFXLFdBQVcsQ0FBQztBQUMvQyxnQkFBTSxZQUFZLGNBQUFoQixRQUFPLFdBQVcsWUFBWSxVQUFVLEtBQUssS0FBSyxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQy9FLE9BQVksd0NBQXNCLGFBQWEsVUFBVSxTQUFTLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUNwRixPQUFPO0FBQ1osb0JBQVUsSUFBSSxXQUFXLENBQUM7QUFDMUIsb0JBQVUsV0FBVyxRQUFRLElBQUk7QUFDakMsd0JBQUFBLFFBQU8sZUFBZSxJQUFJO0FBQzFCLGdCQUFNLGdCQUFnQixLQUFLLEtBQUssWUFBWSxVQUFVLE1BQU0sTUFBTSxVQUFVLE1BQU07QUFDbEYsbUJBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFDdkMsc0JBQVUsQ0FBQyxLQUFLLGNBQWMsQ0FBQztBQUFBLFVBQ25DO0FBQ0EsZ0JBQU0sV0FBVyxLQUFLLEtBQUssWUFBWSxVQUFVLE1BQU0sV0FBVyxLQUFLLE1BQU07QUFDN0UsbUJBQVMsSUFBSSxHQUFHLElBQUksS0FBSyxRQUFRLEtBQUs7QUFDbEMsaUJBQUssQ0FBQyxLQUFLLFNBQVMsQ0FBQztBQUFBLFVBQ3pCO0FBQ0EsY0FBSSxDQUFDLFlBQVksS0FBSztBQUNsQix3QkFBWSxNQUFNO0FBQUEsRUFBK0IsWUFBWSxLQUFLLFNBQVMsUUFBUSxDQUFDO0FBQUE7QUFBQSxVQUN4RjtBQUNBLGdCQUFNLFFBQVEsY0FBQUEsUUFBTyxjQUFjO0FBQUEsWUFDL0IsS0FBSyxZQUFZO0FBQUEsWUFDakIsU0FBUyxjQUFBQSxRQUFPLFVBQVU7QUFBQSxVQUM5QixHQUFHLGNBQUFGLE9BQVMsS0FBSyxPQUFPLENBQUM7QUFDekIsaUJBQU8sSUFBSSxXQUFXLEtBQUssRUFBRTtBQUFBLFFBQ2pDO0FBQUEsUUFDQSxNQUFNLFVBQVUsV0FBVyxLQUFLLE1BQU07QUFDbEMsZ0JBQU0sY0FBYyxhQUFhLEdBQUc7QUFDcEMsZ0JBQU0sVUFBVSxLQUFLLEtBQUssWUFBWSxVQUFVLGlCQUFpQixDQUFDO0FBQ2xFLGdCQUFNLFdBQVcsVUFBVSxLQUFLLFlBQVksVUFBVSxJQUFJLEtBQUs7QUFDL0QsZ0JBQU0sYUFBYSxLQUFLO0FBQ3hCLGNBQUksZUFBZSxTQUFTO0FBQ3hCLGtCQUFNLElBQUksTUFBTSxVQUFVO0FBQUEsVUFDOUI7QUFDQSxjQUFJLENBQUMsWUFBWSxLQUFLO0FBQ2xCLHdCQUFZLE1BQU07QUFBQSxFQUFnQyxZQUFZLEtBQUssU0FBUyxRQUFRLENBQUM7QUFBQTtBQUFBLFVBQ3pGO0FBQ0EsY0FBSSxRQUFRLGNBQUFFLFFBQU8sZUFBZTtBQUFBLFlBQzlCLEtBQUssWUFBWTtBQUFBLFlBQ2pCLFNBQVMsY0FBQUEsUUFBTyxVQUFVO0FBQUEsVUFDOUIsR0FBRyxjQUFBRixPQUFTLEtBQUssSUFBSSxDQUFDO0FBQ3RCLGdCQUFNLElBQUksTUFBTSxDQUFDO0FBQ2pCLGdCQUFNLE9BQU8sTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDO0FBQzNDLGdCQUFNLFlBQVksTUFBTSxTQUFTLFdBQVcsQ0FBQztBQUM3QyxjQUFJLE1BQU0sR0FBRztBQUNULGtCQUFNLElBQUksTUFBTSxtQkFBbUI7QUFBQSxVQUN2QztBQUNBLGdCQUFNLFdBQVcsS0FBSyxLQUFLLFlBQVksVUFBVSxNQUFNLFdBQVcsS0FBSyxNQUFNO0FBQzdFLG1CQUFTLElBQUksR0FBRyxJQUFJLEtBQUssUUFBUSxLQUFLO0FBQ2xDLGlCQUFLLENBQUMsS0FBSyxTQUFTLENBQUM7QUFBQSxVQUN6QjtBQUNBLGdCQUFNLGdCQUFnQixLQUFLLEtBQUssWUFBWSxVQUFVLE1BQU0sTUFBTSxVQUFVLE1BQU07QUFDbEYsbUJBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFDdkMsc0JBQVUsQ0FBQyxLQUFLLGNBQWMsQ0FBQztBQUFBLFVBQ25DO0FBQ0EsZ0JBQU0sWUFBWSxjQUFBRSxRQUFPLFdBQVcsWUFBWSxVQUFVLEtBQUssS0FBSyxRQUFRLEtBQUssRUFBRSxDQUFDLEVBQy9FLE9BQVksd0NBQXNCLGFBQWEsVUFBVSxTQUFTLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUNwRixPQUFPO0FBQ1osbUJBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxLQUFLO0FBQy9CLGdCQUFJLFVBQVUsQ0FBQyxNQUFNLFVBQVUsQ0FBQyxHQUFHO0FBQy9CLG9CQUFNLElBQUksTUFBTSxtQkFBbUI7QUFBQSxZQUN2QztBQUFBLFVBQ0o7QUFDQSxjQUFJLFFBQVE7QUFDWixpQkFBTyxRQUFRLFVBQVUsUUFBUSxTQUFTO0FBQ3RDLGtCQUFNLE1BQU0sVUFBVSxLQUFLO0FBQzNCLGdCQUFJLFFBQVEsR0FBRztBQUNYO0FBQUEsWUFDSjtBQUNBLGdCQUFJLFFBQVEsR0FBRztBQUNYLG9CQUFNLElBQUksTUFBTSxtQkFBbUI7QUFBQSxZQUN2QztBQUFBLFVBQ0o7QUFDQSxjQUFJLFVBQVUsVUFBVSxRQUFRO0FBQzVCLGtCQUFNLElBQUksTUFBTSxtQkFBbUI7QUFBQSxVQUN2QztBQUNBLGtCQUFRLFVBQVUsU0FBUyxRQUFRLENBQUM7QUFDcEMsaUJBQU8sSUFBSSxXQUFXLEtBQUssRUFBRTtBQUFBLFFBQ2pDO0FBQUEsUUFDQSxNQUFNLFlBQVlrQyxTQUFRLEtBQUs7QUFDM0IsaUJBQU8sVUFBVSxVQUFVQSxTQUFRLGFBQWEsR0FBRyxDQUFDO0FBQUEsUUFDeEQ7QUFBQSxRQUNBLE1BQU0sWUFBWUEsU0FBUSxTQUFTLFdBQVcsYUFBYSxXQUFXO0FBQ2xFLGdCQUFNLE1BQU0sTUFBTSxVQUFVLFVBQVVBLFNBQVEsU0FBUyxFQUFFLEdBQUcsV0FBVyxNQUFNLEtBQUssS0FBSyxHQUFHLGFBQWEsU0FBUztBQUNoSCxpQkFBTyxhQUFhLEdBQUc7QUFBQSxRQUMzQjtBQUFBLFFBQ0EsZUFBZSxLQUFLLFVBQVU7QUFDMUIsZ0JBQU0sZUFBZSxLQUFLLFFBQVE7QUFDbEMsZ0JBQU0sY0FBYyxhQUFhLEdBQUc7QUFDcEMsY0FBSSxFQUFFLHVCQUF1QnRCLGtCQUFpQix1QkFBdUJDLGdCQUFlO0FBQ2hGLGtCQUFNLElBQUksVUFBVSwyQkFBMkI7QUFBQSxVQUNuRDtBQUFBLFFBQ0o7QUFBQSxRQUNBLEtBQUssV0FBVyxNQUFNLFNBQVMsR0FBRztBQUM5QixnQkFBTSxXQUFXLFVBQVUsS0FBSyxTQUFTLEtBQUs7QUFDOUMsZ0JBQU0sT0FBTyxJQUFJLFdBQVcsTUFBTTtBQUNsQyxnQkFBTSxVQUFVLElBQUksV0FBVyxDQUFDO0FBQ2hDLGdCQUFNLFNBQVMsS0FBSyxLQUFLLFNBQVMsUUFBUTtBQUMxQyxtQkFBUyxJQUFJLEdBQUcsSUFBSSxRQUFRLEtBQUs7QUFDN0Isb0JBQVEsQ0FBQyxJQUFJLE1BQU07QUFDbkIsb0JBQVEsQ0FBQyxJQUFLLE1BQU0sS0FBTTtBQUMxQixvQkFBUSxDQUFDLElBQUssTUFBTSxJQUFLO0FBQ3pCLG9CQUFRLENBQUMsSUFBSSxJQUFJO0FBQ2pCLGtCQUFNLFVBQVUsS0FBSyxTQUFTLElBQUksUUFBUTtBQUMxQyxnQkFBSSxRQUFRLGNBQUFiLFFBQU8sV0FBVyxVQUFVLEtBQUssUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUN4RCxPQUFPLElBQUksRUFDWCxPQUFPLE9BQU8sRUFDZCxPQUFPO0FBQ1osZ0JBQUksTUFBTSxTQUFTLFFBQVEsUUFBUTtBQUMvQixzQkFBUSxNQUFNLFNBQVMsR0FBRyxRQUFRLE1BQU07QUFBQSxZQUM1QztBQUNBLG9CQUFRLElBQUksS0FBSztBQUFBLFVBQ3JCO0FBQ0EsaUJBQU87QUFBQSxRQUNYO0FBQUEsTUFDSjtBQUVBLE1BQU0sZ0JBQU4sY0FBaUMsZUFBZTtBQUFBLFFBQzVDLGNBQWM7QUFDVixnQkFBTSxHQUFHLFNBQVM7QUFDbEIsZUFBSyxPQUFPO0FBQ1osZUFBSyxTQUFTO0FBQUEsWUFDVixXQUFXLENBQUMsV0FBVyxTQUFTO0FBQUEsWUFDaEMsWUFBWSxDQUFDLFdBQVcsV0FBVztBQUFBLFVBQ3ZDO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTSxjQUFjLFdBQVcsYUFBYSxXQUFXO0FBQ25ELGdCQUFNLE9BQU8sTUFBTSxVQUFVLFlBQVk7QUFBQSxZQUNyQyxHQUFHO0FBQUEsWUFDSCxNQUFNLEtBQUs7QUFBQSxVQUNmLEdBQUcsYUFBYSxTQUFTO0FBQ3pCLGlCQUFPO0FBQUEsWUFDSCxZQUFZLGFBQWEsS0FBSyxVQUFVO0FBQUEsWUFDeEMsV0FBVyxhQUFhLEtBQUssU0FBUztBQUFBLFVBQzFDO0FBQUEsUUFDSjtBQUFBLFFBQ0EsdUJBQXVCLFdBQVc7QUFDOUIsZUFBSyxzQkFBc0IsV0FBVyxnQkFBZ0I7QUFDdEQsY0FBSSxFQUFFLFVBQVUsa0JBQWtCLFVBQVUsMEJBQTBCLGFBQWE7QUFDL0Usa0JBQU0sSUFBSSxVQUFVLDZDQUE2QztBQUFBLFVBQ3JFO0FBQ0EsZ0JBQU0saUJBQWlCLDBCQUFRLFNBQVMsVUFBVSxjQUFjO0FBQ2hFLGNBQUksRUFBRSxtQkFBbUIsVUFBVSxtQkFBbUIsU0FBUztBQUMzRCxrQkFBTSxJQUFJLFVBQVUsd0NBQXdDO0FBQUEsVUFDaEU7QUFDQSxlQUFLLHNCQUFzQixXQUFXLGVBQWU7QUFDckQsa0JBQVEsVUFBVSxlQUFlO0FBQUEsWUFDN0IsS0FBSztBQUFBLFlBQ0wsS0FBSztBQUFBLFlBQ0wsS0FBSztBQUNEO0FBQUEsWUFDSjtBQUNJLG9CQUFNLElBQUksVUFBVSw0Q0FBNEM7QUFBQSxVQUN4RTtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU0sVUFBVSxXQUFXLEtBQUssTUFBTTtBQUNsQyxnQkFBTW1DLFdBQVUsS0FBSyxnQkFBZ0IsR0FBRztBQUN4QyxnQkFBTSxNQUFNLGNBQUFuQyxRQUFPLGNBQWNtQyxVQUFTLElBQUksV0FBVyxJQUFJLENBQUM7QUFDOUQsaUJBQU8sSUFBSSxXQUFXLEdBQUcsRUFBRTtBQUFBLFFBQy9CO0FBQUEsUUFDQSxNQUFNLFVBQVUsV0FBVyxLQUFLLE1BQU07QUFDbEMsZ0JBQU1BLFdBQVUsS0FBSyxnQkFBZ0IsR0FBRztBQUN4QyxnQkFBTSxNQUFNLGNBQUFuQyxRQUFPLGVBQWVtQyxVQUFTLElBQUksV0FBVyxJQUFJLENBQUM7QUFDL0QsaUJBQU8sSUFBSSxXQUFXLEdBQUcsRUFBRTtBQUFBLFFBQy9CO0FBQUEsUUFDQSxNQUFNLFlBQVlELFNBQVEsS0FBSztBQUMzQixpQkFBTyxVQUFVLFVBQVVBLFNBQVEsYUFBYSxHQUFHLENBQUM7QUFBQSxRQUN4RDtBQUFBLFFBQ0EsTUFBTSxZQUFZQSxTQUFRLFNBQVMsV0FBVyxhQUFhLFdBQVc7QUFDbEUsZ0JBQU0sTUFBTSxNQUFNLFVBQVUsVUFBVUEsU0FBUSxTQUFTLEVBQUUsR0FBRyxXQUFXLE1BQU0sS0FBSyxLQUFLLEdBQUcsYUFBYSxTQUFTO0FBQ2hILGlCQUFPLGFBQWEsR0FBRztBQUFBLFFBQzNCO0FBQUEsUUFDQSxlQUFlLEtBQUssVUFBVTtBQUMxQixnQkFBTSxlQUFlLEtBQUssUUFBUTtBQUNsQyxnQkFBTSxjQUFjLGFBQWEsR0FBRztBQUNwQyxjQUFJLEVBQUUsdUJBQXVCdEIsa0JBQWlCLHVCQUF1QkMsZ0JBQWU7QUFDaEYsa0JBQU0sSUFBSSxVQUFVLDJCQUEyQjtBQUFBLFVBQ25EO0FBQUEsUUFDSjtBQUFBLFFBQ0EsZ0JBQWdCLEtBQUs7QUFDakIsZ0JBQU13QixRQUFPLElBQUksS0FBSyxZQUFZO0FBQ2xDLGlCQUFPO0FBQUEsWUFDSCxLQUFLLGNBQWNBLEtBQUk7QUFBQSxFQUFjLGFBQWEsR0FBRyxFQUFFLEtBQUssU0FBUyxRQUFRLENBQUM7QUFBQSxXQUFjQSxLQUFJO0FBQUEsWUFDaEcsU0FBUyxjQUFBckMsUUFBTyxVQUFVO0FBQUEsVUFDOUI7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUVBLE1BQU0sWUFBWTtBQUFBLFFBQ2QsdUJBQXVCO0FBQUEsUUFDdkIsU0FBUztBQUFBLFFBQ1QsZ0JBQWdCO0FBQUEsUUFDaEIsU0FBUztBQUFBLFFBQ1QsZ0JBQWdCO0FBQUEsUUFDaEIsU0FBUztBQUFBLFFBQ1QsZ0JBQWdCO0FBQUEsUUFDaEIsU0FBUztBQUFBLFFBQ1QsbUJBQW1CO0FBQUEsUUFDbkIsd0JBQXdCO0FBQUEsUUFDeEIsbUJBQW1CO0FBQUEsUUFDbkIsd0JBQXdCO0FBQUEsUUFDeEIsbUJBQW1CO0FBQUEsUUFDbkIsd0JBQXdCO0FBQUEsUUFDeEIsbUJBQW1CO0FBQUEsUUFDbkIsd0JBQXdCO0FBQUEsUUFDeEIsbUJBQW1CO0FBQUEsUUFDbkIsd0JBQXdCO0FBQUEsUUFDeEIsbUJBQW1CO0FBQUEsUUFDbkIsd0JBQXdCO0FBQUEsUUFDeEIsbUJBQW1CO0FBQUEsUUFDbkIsd0JBQXdCO0FBQUEsUUFDeEIsbUJBQW1CO0FBQUEsUUFDbkIsd0JBQXdCO0FBQUEsUUFDeEIsbUJBQW1CO0FBQUEsUUFDbkIsd0JBQXdCO0FBQUEsUUFDeEIsbUJBQW1CO0FBQUEsUUFDbkIseUJBQXlCO0FBQUEsUUFDekIsbUJBQW1CO0FBQUEsUUFDbkIseUJBQXlCO0FBQUEsUUFDekIsbUJBQW1CO0FBQUEsUUFDbkIseUJBQXlCO0FBQUEsUUFDekIsbUJBQW1CO0FBQUEsUUFDbkIseUJBQXlCO0FBQUEsUUFDekIsbUJBQW1CO0FBQUEsUUFDbkIseUJBQXlCO0FBQUEsTUFDN0I7QUFTQSxNQUFNaUIsZ0JBQU4sY0FBMkIsY0FBYztBQUFBLFFBQ3JDLGNBQWM7QUFDVixnQkFBTSxHQUFHLFNBQVM7QUFDbEIsZUFBSyxPQUFPO0FBQUEsUUFDaEI7QUFBQSxRQUNBLFNBQVM7QUFDTCxnQkFBTSxVQUFVLFVBQVUsTUFBTSxLQUFLLE1BQVcsUUFBSyxjQUFjO0FBQ25FLGlCQUFPLFVBQVUsTUFBTSxRQUFRLFlBQWlCLFFBQUssWUFBWTtBQUFBLFFBQ3JFO0FBQUEsUUFDQSxTQUFTO0FBQ0wsZ0JBQU0sTUFBTSxLQUFLLE9BQU87QUFDeEIsZ0JBQU0sT0FBTztBQUFBLFlBQ1QsS0FBSztBQUFBLFlBQ0wsS0FBSyxLQUFLLFVBQVU7QUFBQSxZQUNwQixTQUFTLEtBQUs7QUFBQSxZQUNkLEtBQUssS0FBSztBQUFBLFVBQ2Q7QUFDQSxpQkFBTyxPQUFPLE9BQU8sTUFBTSxlQUFlLE9BQU8sR0FBRyxDQUFDO0FBQUEsUUFDekQ7QUFBQSxRQUNBLFNBQVMsTUFBTTtBQUNYLGNBQUksQ0FBQyxLQUFLLEtBQUs7QUFDWCxrQkFBTSxJQUFTLGVBQWUsNkRBQTZEO0FBQUEsVUFDL0Y7QUFDQSxnQkFBTSxVQUFVLElBQVMsUUFBSyxlQUFlO0FBQzdDLGtCQUFRLG9CQUFvQixZQUFZO0FBQ3hDLGtCQUFRLG9CQUFvQixhQUFhLGNBQWMsVUFBVSxJQUFTLFFBQUssaUJBQWlCLHFCQUFxQixLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQy9ILGdCQUFNLE1BQU0sV0FBVyxTQUFTLE1BQU0sRUFBRSxjQUFtQixRQUFLLGFBQWEsQ0FBQztBQUM5RSxrQkFBUSxhQUFhLGNBQWMsVUFBVSxHQUFHO0FBQ2hELGVBQUssT0FBTyxjQUFBbkIsT0FBUyxLQUFLLGNBQWMsVUFBVSxPQUFPLENBQUM7QUFDMUQsaUJBQU87QUFBQSxRQUNYO0FBQUEsTUFDSjtBQUVBLE1BQU1vQixlQUFOLGNBQTBCLGNBQWM7QUFBQSxRQUNwQyxjQUFjO0FBQ1YsZ0JBQU0sR0FBRyxTQUFTO0FBQ2xCLGVBQUssT0FBTztBQUFBLFFBQ2hCO0FBQUEsUUFDQSxTQUFTO0FBQ0wsZ0JBQU0sVUFBVSxVQUFVLE1BQU0sS0FBSyxNQUFXLFFBQUssYUFBYTtBQUNsRSxpQkFBTyxJQUFTLFFBQUssWUFBWSxRQUFRLFNBQVM7QUFBQSxRQUN0RDtBQUFBLFFBQ0EsU0FBUztBQUNMLGdCQUFNLE1BQU0sS0FBSyxPQUFPO0FBQ3hCLGdCQUFNLE9BQU87QUFBQSxZQUNULEtBQUs7QUFBQSxZQUNMLEtBQUssS0FBSyxVQUFVO0FBQUEsWUFDcEIsU0FBUyxLQUFLO0FBQUEsWUFDZCxLQUFLLEtBQUs7QUFBQSxVQUNkO0FBQ0EsaUJBQU8sT0FBTyxPQUFPLE1BQU0sZUFBZSxPQUFPLEdBQUcsQ0FBQztBQUFBLFFBQ3pEO0FBQUEsUUFDQSxTQUFTLE1BQU07QUFDWCxjQUFJLENBQUMsS0FBSyxLQUFLO0FBQ1gsa0JBQU0sSUFBUyxlQUFlLDZEQUE2RDtBQUFBLFVBQy9GO0FBQ0EsZ0JBQU0sTUFBTSxXQUFXLFNBQVMsTUFBTSxFQUFFLGNBQW1CLFFBQUssWUFBWSxDQUFDO0FBQzdFLGdCQUFNLFVBQVUsSUFBUyxRQUFLLGNBQWM7QUFDNUMsa0JBQVEsbUJBQW1CLFlBQVk7QUFDdkMsa0JBQVEsbUJBQW1CLGFBQWEsY0FBYyxVQUFVLElBQVMsUUFBSyxpQkFBaUIscUJBQXFCLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDOUgsa0JBQVEsWUFBWSxjQUFjLE1BQU0sR0FBRyxFQUFFO0FBQzdDLGVBQUssT0FBTyxjQUFBcEIsT0FBUyxLQUFLLGNBQWMsVUFBVSxPQUFPLENBQUM7QUFDMUQsaUJBQU87QUFBQSxRQUNYO0FBQUEsTUFDSjtBQUVBLE1BQU0sZUFBTixjQUFnQyxlQUFlO0FBQUEsUUFDM0MsY0FBYztBQUNWLGdCQUFNLEdBQUcsU0FBUztBQUNsQixlQUFLLE9BQU87QUFDWixlQUFLLFNBQVMsQ0FBQztBQUFBLFFBQ25CO0FBQUEsUUFDQSxNQUFNLFNBQVMsV0FBVyxNQUFNO0FBQzVCLGlCQUFPLFVBQVUsT0FBTyxXQUFXLElBQUk7QUFBQSxRQUMzQztBQUFBLE1BQ0o7QUFFQSxNQUFNLGlCQUFOLGNBQWtDLGVBQWU7QUFBQSxRQUM3QyxjQUFjO0FBQ1YsZ0JBQU0sR0FBRyxTQUFTO0FBQ2xCLGVBQUssT0FBTztBQUNaLGVBQUssU0FBUyxDQUFDO0FBQUEsUUFDbkI7QUFBQSxRQUNBLE1BQU0sU0FBUyxXQUFXLE1BQU07QUFDNUIsaUJBQU8sVUFBVSxPQUFPLFdBQVcsSUFBSTtBQUFBLFFBQzNDO0FBQUEsTUFDSjtBQUVBLE1BQU0saUJBQU4sY0FBa0MsZUFBZTtBQUFBLFFBQzdDLGNBQWM7QUFDVixnQkFBTSxHQUFHLFNBQVM7QUFDbEIsZUFBSyxPQUFPO0FBQ1osZUFBSyxTQUFTLENBQUM7QUFBQSxRQUNuQjtBQUFBLFFBQ0EsTUFBTSxTQUFTLFdBQVcsTUFBTTtBQUM1QixpQkFBTyxVQUFVLE9BQU8sV0FBVyxJQUFJO0FBQUEsUUFDM0M7QUFBQSxNQUNKO0FBRUEsTUFBTSxpQkFBTixjQUFrQyxlQUFlO0FBQUEsUUFDN0MsY0FBYztBQUNWLGdCQUFNLEdBQUcsU0FBUztBQUNsQixlQUFLLE9BQU87QUFDWixlQUFLLFNBQVMsQ0FBQztBQUFBLFFBQ25CO0FBQUEsUUFDQSxNQUFNLFNBQVMsV0FBVyxNQUFNO0FBQzVCLGlCQUFPLFVBQVUsT0FBTyxXQUFXLElBQUk7QUFBQSxRQUMzQztBQUFBLE1BQ0o7QUFFQSxNQUFNLGtCQUFOLGNBQW1DLGVBQWU7QUFBQSxRQUM5QyxjQUFjO0FBQ1YsZ0JBQU0sR0FBRyxTQUFTO0FBQ2xCLGVBQUssT0FBTztBQUNaLGVBQUssU0FBUyxDQUFDO0FBQUEsUUFDbkI7QUFBQSxRQUNBLE1BQU0sU0FBUyxXQUFXLE1BQU07QUFDNUIsaUJBQU8sVUFBVSxPQUFPLFdBQVcsSUFBSTtBQUFBLFFBQzNDO0FBQUEsTUFDSjtBQUVBLE1BQU0sa0JBQU4sY0FBbUMsZUFBZTtBQUFBLFFBQzlDLGNBQWM7QUFDVixnQkFBTSxHQUFHLFNBQVM7QUFDbEIsZUFBSyxPQUFPO0FBQ1osZUFBSyxTQUFTLENBQUM7QUFBQSxRQUNuQjtBQUFBLFFBQ0EsTUFBTSxTQUFTLFdBQVcsTUFBTTtBQUM1QixpQkFBTyxVQUFVLE9BQU8sV0FBVyxJQUFJO0FBQUEsUUFDM0M7QUFBQSxNQUNKO0FBRUEsTUFBTSxrQkFBTixjQUFtQyxlQUFlO0FBQUEsUUFDOUMsY0FBYztBQUNWLGdCQUFNLEdBQUcsU0FBUztBQUNsQixlQUFLLE9BQU87QUFDWixlQUFLLFNBQVMsQ0FBQztBQUFBLFFBQ25CO0FBQUEsUUFDQSxNQUFNLFNBQVMsV0FBVyxNQUFNO0FBQzVCLGlCQUFPLFVBQVUsT0FBTyxXQUFXLElBQUk7QUFBQSxRQUMzQztBQUFBLE1BQ0o7QUFFQSxNQUFNLFdBQU4sTUFBZTtBQUFBLFFBQ1gsYUFBYSxZQUFZLFdBQVcsYUFBYSxXQUFXO0FBQ3hELGdCQUFNLGFBQWEsSUFBSW1CLGNBQWE7QUFDcEMscUJBQVcsWUFBWTtBQUN2QixxQkFBVyxjQUFjO0FBQ3pCLHFCQUFXLFNBQVMsVUFBVSxPQUFPLENBQUMsVUFBVSxLQUFLLGlCQUFpQixRQUFRLEtBQUssTUFBTSxFQUFFO0FBQzNGLGdCQUFNLFlBQVksSUFBSUMsYUFBWTtBQUNsQyxvQkFBVSxZQUFZO0FBQ3RCLG9CQUFVLGNBQWM7QUFDeEIsb0JBQVUsU0FBUyxVQUFVLE9BQU8sQ0FBQyxVQUFVLEtBQUssZ0JBQWdCLFFBQVEsS0FBSyxNQUFNLEVBQUU7QUFDekYsZ0JBQU0sT0FBTyxjQUFBbEIsUUFBTyxvQkFBb0IsTUFBTTtBQUFBLFlBQzFDLFlBQVksS0FBSyxxQkFBcUIsVUFBVSxVQUFVO0FBQUEsWUFDMUQsbUJBQW1CO0FBQUEsY0FDZixRQUFRO0FBQUEsY0FDUixNQUFNO0FBQUEsWUFDVjtBQUFBLFlBQ0Esb0JBQW9CO0FBQUEsY0FDaEIsUUFBUTtBQUFBLGNBQ1IsTUFBTTtBQUFBLFlBQ1Y7QUFBQSxVQUNKLENBQUM7QUFDRCxxQkFBVyxPQUFPLEtBQUs7QUFDdkIsb0JBQVUsT0FBTyxLQUFLO0FBQ3RCLGdCQUFNLE1BQU07QUFBQSxZQUNSO0FBQUEsWUFDQTtBQUFBLFVBQ0o7QUFDQSxpQkFBTztBQUFBLFFBQ1g7QUFBQSxRQUNBLGFBQWEsS0FBSyxXQUFXLEtBQUssTUFBTTtBQUNwQyxnQkFBTSxZQUFZLFVBQVUsaUJBQWlCLFVBQVUsSUFBSTtBQUMzRCxnQkFBTSxTQUFTLGNBQUFBLFFBQU8sV0FBVyxTQUFTO0FBQzFDLGlCQUFPLE9BQU8sY0FBQUYsT0FBUyxLQUFLLElBQUksQ0FBQztBQUNqQyxjQUFJLENBQUMsSUFBSSxLQUFLO0FBQ1YsZ0JBQUksTUFBTTtBQUFBLEVBQWdDLElBQUksS0FBSyxTQUFTLFFBQVEsQ0FBQztBQUFBO0FBQUEsVUFDekU7QUFDQSxnQkFBTXFDLFdBQVU7QUFBQSxZQUNaLEtBQUssSUFBSTtBQUFBLFVBQ2I7QUFDQSxnQkFBTSxZQUFZLE9BQU8sS0FBS0EsUUFBTztBQUNyQyxnQkFBTSxjQUFjLFVBQVUsTUFBTSxXQUFnQixRQUFLLGNBQWM7QUFDdkUsZ0JBQU0sZUFBb0IsUUFBUSxnQkFBZ0IsYUFBa0IsU0FBUyxJQUFJLElBQUksVUFBVSxVQUFVLEVBQUUsSUFBSTtBQUMvRyxpQkFBTyxhQUFhO0FBQUEsUUFDeEI7QUFBQSxRQUNBLGFBQWEsT0FBTyxXQUFXLEtBQUssV0FBVyxNQUFNO0FBQ2pELGdCQUFNLFlBQVksVUFBVSxpQkFBaUIsVUFBVSxJQUFJO0FBQzNELGdCQUFNLFNBQVMsY0FBQW5DLFFBQU8sYUFBYSxTQUFTO0FBQzVDLGlCQUFPLE9BQU8sY0FBQUYsT0FBUyxLQUFLLElBQUksQ0FBQztBQUNqQyxjQUFJLENBQUMsSUFBSSxLQUFLO0FBQ1YsZ0JBQUksTUFBTTtBQUFBLEVBQStCLElBQUksS0FBSyxTQUFTLFFBQVEsQ0FBQztBQUFBO0FBQUEsVUFDeEU7QUFDQSxnQkFBTXFDLFdBQVU7QUFBQSxZQUNaLEtBQUssSUFBSTtBQUFBLFVBQ2I7QUFDQSxnQkFBTSxjQUFjLElBQVMsUUFBSyxlQUFlO0FBQ2pELGdCQUFNLGFBQWtCLFNBQVMsSUFBSSxJQUFJLFVBQVUsVUFBVTtBQUM3RCxnQkFBTSxpQkFBc0IsUUFBUSxnQkFBZ0IsV0FBVyxXQUFXLElBQUk7QUFDOUUsc0JBQVksSUFBSSx3Q0FBc0IsY0FBYyxlQUFlLENBQUM7QUFDcEUsc0JBQVksSUFBSSx3Q0FBc0IsY0FBYyxlQUFlLENBQUM7QUFDcEUsZ0JBQU0saUJBQWlCLGNBQUFyQyxPQUFTLEtBQUssY0FBYyxVQUFVLFdBQVcsQ0FBQztBQUN6RSxnQkFBTSxLQUFLLE9BQU8sT0FBT3FDLFVBQVMsY0FBYztBQUNoRCxpQkFBTztBQUFBLFFBQ1g7QUFBQSxRQUNBLGFBQWEsV0FBVyxXQUFXLFNBQVMsUUFBUTtBQUNoRCxnQkFBTSxZQUFZLEtBQUsscUJBQXFCLFFBQVEsVUFBVSxVQUFVO0FBQ3hFLGdCQUFNLE9BQU8sY0FBQW5DLFFBQU8sV0FBVyxTQUFTO0FBQ3hDLGdCQUFNLGdCQUFnQixVQUFVLE1BQU0sUUFBUSxNQUFXLFFBQUssY0FBYztBQUM1RSxnQkFBTSxrQkFBa0IsVUFBVSxNQUFNLGNBQWMsWUFBaUIsUUFBSyxZQUFZO0FBQ3hGLGVBQUssY0FBYyxjQUFBRixPQUFTLEtBQUssZ0JBQWdCLFVBQVUsQ0FBQztBQUM1RCxnQkFBTSxlQUFlLFVBQVUsTUFBTSxVQUFVLE9BQU8sTUFBVyxRQUFLLGFBQWE7QUFDbkYsZ0JBQU0sT0FBTyxLQUFLLGNBQWMsY0FBQUEsT0FBUyxLQUFLLGFBQWEsU0FBUyxDQUFDO0FBQ3JFLGNBQUksV0FBVyxNQUFNO0FBQ2pCLG1CQUFPO0FBQUEsVUFDWDtBQUNBLGlCQUFPLElBQUksV0FBVyxJQUFJLEVBQUUsT0FBTyxNQUFNLEdBQUcsVUFBVSxDQUFDO0FBQUEsUUFDM0Q7QUFBQSxRQUNBLGFBQWEsVUFBVW9DLFNBQVEsS0FBSztBQUNoQyxrQkFBUUEsUUFBTyxZQUFZLEdBQUc7QUFBQSxZQUMxQixLQUFLO0FBQ0QscUJBQU8sZUFBZSxPQUFPLEdBQUc7QUFBQSxZQUNwQyxLQUFLO0FBQUEsWUFDTCxLQUFLO0FBQ0QscUJBQU8sSUFBSSxXQUFXLElBQUksSUFBSSxFQUFFO0FBQUEsWUFDcEMsS0FBSyxPQUFPO0FBQ1Isb0JBQU0sZ0JBQWdCLFVBQVUsTUFBTSxJQUFJLE1BQVcsUUFBSyxhQUFhO0FBQ3ZFLHFCQUFPLGNBQWM7QUFBQSxZQUN6QjtBQUFBLFlBQ0E7QUFDSSxvQkFBTSxJQUFTLGVBQWUsZ0RBQWdEO0FBQUEsVUFDdEY7QUFBQSxRQUNKO0FBQUEsUUFDQSxhQUFhLFVBQVVBLFNBQVEsU0FBUyxXQUFXLGFBQWEsV0FBVztBQUN2RSxrQkFBUUEsUUFBTyxZQUFZLEdBQUc7QUFBQSxZQUMxQixLQUFLLE9BQU87QUFDUixvQkFBTSxNQUFNO0FBQ1osa0JBQUksSUFBSSxHQUFHO0FBQ1Asc0JBQU0sU0FBUyxXQUFXLFNBQVMsU0FBUyxFQUFFLGNBQW1CLFFBQUssYUFBYSxDQUFDO0FBQ3BGLHVCQUFPLEtBQUssaUJBQWlCLFFBQVEsV0FBVyxhQUFhLFNBQVM7QUFBQSxjQUMxRSxPQUNLO0FBQ0Qsc0JBQU0sU0FBUyxXQUFXLFNBQVMsU0FBUyxFQUFFLGNBQW1CLFFBQUssWUFBWSxDQUFDO0FBQ25GLHVCQUFPLEtBQUssZ0JBQWdCLFFBQVEsV0FBVyxhQUFhLFNBQVM7QUFBQSxjQUN6RTtBQUFBLFlBQ0o7QUFBQSxZQUNBLEtBQUssT0FBTztBQUNSLG9CQUFNLFNBQVMsSUFBUyxRQUFLLFlBQVksT0FBTztBQUNoRCxxQkFBTyxLQUFLLGdCQUFnQixRQUFRLFdBQVcsYUFBYSxTQUFTO0FBQUEsWUFDekU7QUFBQSxZQUNBLEtBQUssUUFBUTtBQUNULG9CQUFNLFVBQVUsVUFBVSxNQUFNLElBQUksV0FBVyxPQUFPLEdBQVEsUUFBSyxhQUFhO0FBQ2hGLG9CQUFNLFNBQVMsSUFBUyxRQUFLLFlBQVksUUFBUSxTQUFTO0FBQzFELG1CQUFLLG9CQUFvQixRQUFRLG1CQUFtQixZQUFZLFVBQVUsVUFBVTtBQUNwRixxQkFBTyxLQUFLLGdCQUFnQixRQUFRLFdBQVcsYUFBYSxTQUFTO0FBQUEsWUFDekU7QUFBQSxZQUNBLEtBQUssU0FBUztBQUNWLG9CQUFNLFVBQVUsVUFBVSxNQUFNLElBQUksV0FBVyxPQUFPLEdBQVEsUUFBSyxjQUFjO0FBQ2pGLG9CQUFNLFNBQVMsVUFBVSxNQUFNLFFBQVEsWUFBaUIsUUFBSyxZQUFZO0FBQ3pFLG1CQUFLLG9CQUFvQixRQUFRLG9CQUFvQixZQUFZLFVBQVUsVUFBVTtBQUNyRixxQkFBTyxLQUFLLGlCQUFpQixRQUFRLFdBQVcsYUFBYSxTQUFTO0FBQUEsWUFDMUU7QUFBQSxZQUNBO0FBQ0ksb0JBQU0sSUFBUyxlQUFlLGlEQUFpRDtBQUFBLFVBQ3ZGO0FBQUEsUUFDSjtBQUFBLFFBQ0EsT0FBTyxvQkFBb0IsWUFBWSxZQUFZO0FBQy9DLGNBQUksQ0FBQyxZQUFZO0FBQ2Isa0JBQU0sSUFBUyxZQUFZLDJDQUEyQztBQUFBLFVBQzFFO0FBQ0EsY0FBSSx1QkFBdUI7QUFDM0IsY0FBSTtBQUNBLG1DQUF1QixVQUFVLE1BQU0sWUFBaUIsUUFBSyxnQkFBZ0IsRUFBRTtBQUFBLFVBQ25GLFNBQ08sR0FBRztBQUNOLGtCQUFNLElBQVMsWUFBWSxpQ0FBaUM7QUFBQSxVQUNoRTtBQUNBLGNBQUkscUJBQXFCLFVBQVUsTUFBTSxzQkFBc0I7QUFDM0Qsa0JBQU0sSUFBUyxZQUFZLGlEQUFpRDtBQUFBLFVBQ2hGO0FBQUEsUUFDSjtBQUFBLFFBQ0EsYUFBYSxpQkFBaUIsUUFBUSxXQUFXLGFBQWEsV0FBVztBQUNyRSxnQkFBTSxVQUFVLElBQVMsUUFBSyxlQUFlO0FBQzdDLGtCQUFRLG9CQUFvQixZQUFZO0FBQ3hDLGtCQUFRLG9CQUFvQixhQUFhLGNBQWMsVUFBVSxJQUFTLFFBQUssaUJBQWlCLHFCQUFxQixVQUFVLFVBQVUsQ0FBQyxDQUFDO0FBQzNJLGtCQUFRLGFBQWEsY0FBYyxVQUFVLE1BQU07QUFDbkQsZ0JBQU0sTUFBTSxJQUFJakIsY0FBYTtBQUM3QixjQUFJLE9BQU8sY0FBQW5CLE9BQVMsS0FBSyxjQUFjLFVBQVUsT0FBTyxDQUFDO0FBQ3pELGNBQUksWUFBWSxPQUFPLE9BQU8sQ0FBQyxHQUFHLFNBQVM7QUFDM0MsY0FBSSxjQUFjO0FBQ2xCLGNBQUksU0FBUztBQUNiLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsYUFBYSxnQkFBZ0IsUUFBUSxXQUFXLGFBQWEsV0FBVztBQUNwRSxnQkFBTSxVQUFVLElBQVMsUUFBSyxjQUFjO0FBQzVDLGtCQUFRLG1CQUFtQixZQUFZO0FBQ3ZDLGdCQUFNLGFBQWEscUJBQXFCLFVBQVUsVUFBVTtBQUM1RCxrQkFBUSxtQkFBbUIsYUFBYSxjQUFjLFVBQVUsSUFBUyxRQUFLLGlCQUFpQixVQUFVLENBQUM7QUFDMUcsa0JBQVEsWUFBWSxPQUFPO0FBQzNCLGdCQUFNLE1BQU0sSUFBSW9CLGFBQVk7QUFDNUIsY0FBSSxPQUFPLGNBQUFwQixPQUFTLEtBQUssY0FBYyxVQUFVLE9BQU8sQ0FBQztBQUN6RCxjQUFJLFlBQVksT0FBTyxPQUFPLENBQUMsR0FBRyxTQUFTO0FBQzNDLGNBQUksY0FBYztBQUNsQixjQUFJLFNBQVM7QUFDYixpQkFBTztBQUFBLFFBQ1g7QUFBQSxRQUNBLE9BQU8scUJBQXFCLE9BQU87QUFDL0Isa0JBQVEsTUFBTSxZQUFZLEdBQUc7QUFBQSxZQUN6QixLQUFLO0FBQ0QscUJBQU87QUFBQSxZQUNYLEtBQUs7QUFDRCxxQkFBTztBQUFBLFlBQ1gsS0FBSztBQUNELHFCQUFPO0FBQUEsWUFDWCxLQUFLO0FBQ0QscUJBQU87QUFBQSxZQUNYO0FBQ0kscUJBQU87QUFBQSxVQUNmO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFDQSxlQUFTLGtCQUFrQixDQUFDLFFBQVE7QUFDcEMsZUFBUyxtQkFBbUIsQ0FBQyxRQUFRLGFBQWEsWUFBWTtBQUU5RCxNQUFNcUIsaUJBQU4sY0FBaUMsY0FBYztBQUFBLFFBQzNDLGNBQWM7QUFDVixnQkFBTSxHQUFHLFNBQVM7QUFDbEIsZUFBSyxjQUFtQixTQUFTO0FBQ2pDLGVBQUssaUJBQWlCO0FBQUEsWUFDbEI7QUFBQSxZQUFTO0FBQUEsWUFBVztBQUFBLFlBQVc7QUFBQSxZQUMvQjtBQUFBLFlBQVk7QUFBQSxZQUNaO0FBQUEsWUFBWTtBQUFBLFlBQVk7QUFBQSxVQUM1QjtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU0sY0FBYyxXQUFXLGFBQWEsV0FBVztBQUNuRCxnQkFBTSxPQUFPLE1BQU0sU0FBUyxZQUFZO0FBQUEsWUFDcEMsR0FBRztBQUFBLFlBQ0gsTUFBTSxLQUFLO0FBQUEsVUFDZixHQUFHLGFBQWEsU0FBUztBQUN6QixpQkFBTztBQUFBLFlBQ0gsWUFBWSxhQUFhLEtBQUssVUFBVTtBQUFBLFlBQ3hDLFdBQVcsYUFBYSxLQUFLLFNBQVM7QUFBQSxVQUMxQztBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU0sT0FBTyxXQUFXLEtBQUssTUFBTTtBQUMvQixpQkFBTyxTQUFTLEtBQUssV0FBVyxhQUFhLEdBQUcsR0FBRyxJQUFJLFdBQVcsSUFBSSxDQUFDO0FBQUEsUUFDM0U7QUFBQSxRQUNBLE1BQU0sU0FBUyxXQUFXLEtBQUssV0FBVyxNQUFNO0FBQzVDLGlCQUFPLFNBQVMsT0FBTyxXQUFXLGFBQWEsR0FBRyxHQUFHLElBQUksV0FBVyxTQUFTLEdBQUcsSUFBSSxXQUFXLElBQUksQ0FBQztBQUFBLFFBQ3hHO0FBQUEsUUFDQSxNQUFNLFlBQVllLFNBQVEsS0FBSztBQUMzQixpQkFBTyxTQUFTLFVBQVVBLFNBQVEsYUFBYSxHQUFHLENBQUM7QUFBQSxRQUN2RDtBQUFBLFFBQ0EsTUFBTSxZQUFZQSxTQUFRLFNBQVMsV0FBVyxhQUFhLFdBQVc7QUFDbEUsZ0JBQU0sTUFBTSxNQUFNLFNBQVMsVUFBVUEsU0FBUSxTQUFTLEVBQUUsR0FBRyxXQUFXLE1BQU0sS0FBSyxLQUFLLEdBQUcsYUFBYSxTQUFTO0FBQy9HLGlCQUFPLGFBQWEsR0FBRztBQUFBLFFBQzNCO0FBQUEsUUFDQSxlQUFlLEtBQUssVUFBVTtBQUMxQixnQkFBTSxlQUFlLEtBQUssUUFBUTtBQUNsQyxnQkFBTSxjQUFjLGFBQWEsR0FBRztBQUNwQyxjQUFJLEVBQUUsdUJBQXVCakIsaUJBQWdCLHVCQUF1QkMsZUFBYztBQUM5RSxrQkFBTSxJQUFJLFVBQVUsMEJBQTBCO0FBQUEsVUFDbEQ7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUVBLE1BQU1FLGdCQUFOLGNBQWdDLGFBQWE7QUFBQSxRQUN6QyxjQUFjO0FBQ1YsZ0JBQU0sR0FBRyxTQUFTO0FBQ2xCLGVBQUssY0FBbUIsU0FBUztBQUFBLFFBQ3JDO0FBQUEsUUFDQSxNQUFNLGNBQWMsV0FBVyxhQUFhLFdBQVc7QUFDbkQsZ0JBQU0sT0FBTyxNQUFNLFNBQVMsWUFBWTtBQUFBLFlBQ3BDLEdBQUc7QUFBQSxZQUNILE1BQU0sS0FBSztBQUFBLFVBQ2YsR0FBRyxhQUFhLFNBQVM7QUFDekIsaUJBQU87QUFBQSxZQUNILFlBQVksYUFBYSxLQUFLLFVBQVU7QUFBQSxZQUN4QyxXQUFXLGFBQWEsS0FBSyxTQUFTO0FBQUEsVUFDMUM7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNLFlBQVljLFNBQVEsS0FBSztBQUMzQixpQkFBTyxTQUFTLFVBQVVBLFNBQVEsYUFBYSxHQUFHLENBQUM7QUFBQSxRQUN2RDtBQUFBLFFBQ0EsTUFBTSxZQUFZQSxTQUFRLFNBQVMsV0FBVyxhQUFhLFdBQVc7QUFDbEUsZ0JBQU0sTUFBTSxNQUFNLFNBQVMsVUFBVUEsU0FBUSxTQUFTLEVBQUUsR0FBRyxXQUFXLE1BQU0sS0FBSyxLQUFLLEdBQUcsYUFBYSxTQUFTO0FBQy9HLGlCQUFPLGFBQWEsR0FBRztBQUFBLFFBQzNCO0FBQUEsUUFDQSxlQUFlLEtBQUssVUFBVTtBQUMxQixnQkFBTSxlQUFlLEtBQUssUUFBUTtBQUNsQyxnQkFBTSxjQUFjLGFBQWEsR0FBRztBQUNwQyxjQUFJLEVBQUUsdUJBQXVCakIsaUJBQWdCLHVCQUF1QkMsZUFBYztBQUM5RSxrQkFBTSxJQUFJLFVBQVUsMEJBQTBCO0FBQUEsVUFDbEQ7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNLGFBQWEsV0FBVyxTQUFTLFFBQVE7QUFDM0MsZ0JBQU0sT0FBTyxNQUFNLFNBQVMsV0FBVyxFQUFFLEdBQUcsV0FBVyxRQUFRLGFBQWEsVUFBVSxNQUFNLEVBQUUsR0FBRyxhQUFhLE9BQU8sR0FBRyxNQUFNO0FBQzlILGlCQUFPO0FBQUEsUUFDWDtBQUFBLE1BQ0o7QUFFQSxNQUFNLFNBQVM7QUFBQSxRQUNYLENBQU0sUUFBSyxPQUFPLEdBQUc7QUFBQSxRQUNyQixTQUFjLFFBQUs7QUFBQSxRQUNuQixDQUFNLFFBQUssTUFBTSxHQUFHO0FBQUEsUUFDcEIsUUFBYSxRQUFLO0FBQUEsUUFDbEIsQ0FBTSxRQUFLLFNBQVMsR0FBRztBQUFBLFFBQ3ZCLFdBQWdCLFFBQUs7QUFBQSxRQUNyQixDQUFNLFFBQUssUUFBUSxHQUFHO0FBQUEsUUFDdEIsVUFBZSxRQUFLO0FBQUEsTUFDeEI7QUFTQSxNQUFNRyxnQkFBTixjQUEyQixjQUFjO0FBQUEsUUFDckMsY0FBYztBQUNWLGdCQUFNLEdBQUcsU0FBUztBQUNsQixlQUFLLE9BQU87QUFBQSxRQUNoQjtBQUFBLFFBQ0EsU0FBUztBQUNMLGdCQUFNLFVBQVUsVUFBVSxNQUFNLEtBQUssTUFBVyxRQUFLLGNBQWM7QUFDbkUsaUJBQU8sVUFBVSxNQUFNLFFBQVEsWUFBaUIsUUFBSyxlQUFlO0FBQUEsUUFDeEU7QUFBQSxRQUNBLFNBQVM7QUFDTCxnQkFBTSxNQUFNLEtBQUssT0FBTztBQUN4QixnQkFBTSxPQUFPO0FBQUEsWUFDVCxLQUFLO0FBQUEsWUFDTCxLQUFLLEtBQUssVUFBVTtBQUFBLFlBQ3BCLFNBQVMsS0FBSztBQUFBLFlBQ2QsS0FBSyxLQUFLO0FBQUEsVUFDZDtBQUNBLGlCQUFPLE9BQU8sT0FBTyxNQUFNLGVBQWUsT0FBTyxHQUFHLENBQUM7QUFBQSxRQUN6RDtBQUFBLFFBQ0EsU0FBUyxNQUFNO0FBQ1gsY0FBSSxDQUFDLEtBQUssS0FBSztBQUNYLGtCQUFNLElBQVMsZUFBZSw2REFBNkQ7QUFBQSxVQUMvRjtBQUNBLGdCQUFNLFVBQVUsSUFBUyxRQUFLLGVBQWU7QUFDN0Msa0JBQVEsb0JBQW9CLFlBQVksbUJBQW1CLEtBQUssR0FBRztBQUNuRSxnQkFBTSxNQUFNLFdBQVcsU0FBUyxNQUFNLEVBQUUsY0FBbUIsUUFBSyxnQkFBZ0IsQ0FBQztBQUNqRixrQkFBUSxhQUFhLGNBQWMsVUFBVSxHQUFHO0FBQ2hELGVBQUssT0FBTyxjQUFBdkIsT0FBUyxLQUFLLGNBQWMsVUFBVSxPQUFPLENBQUM7QUFDMUQsaUJBQU87QUFBQSxRQUNYO0FBQUEsTUFDSjtBQUVBLE1BQU13QixlQUFOLGNBQTBCLGNBQWM7QUFBQSxRQUNwQyxjQUFjO0FBQ1YsZ0JBQU0sR0FBRyxTQUFTO0FBQ2xCLGVBQUssT0FBTztBQUFBLFFBQ2hCO0FBQUEsUUFDQSxTQUFTO0FBQ0wsZ0JBQU0sVUFBVSxVQUFVLE1BQU0sS0FBSyxNQUFXLFFBQUssYUFBYTtBQUNsRSxpQkFBTyxRQUFRO0FBQUEsUUFDbkI7QUFBQSxRQUNBLFNBQVM7QUFDTCxnQkFBTSxNQUFNLEtBQUssT0FBTztBQUN4QixnQkFBTSxPQUFPO0FBQUEsWUFDVCxLQUFLO0FBQUEsWUFDTCxLQUFLLEtBQUssVUFBVTtBQUFBLFlBQ3BCLFNBQVMsS0FBSztBQUFBLFlBQ2QsS0FBSyxLQUFLO0FBQUEsVUFDZDtBQUNBLGlCQUFPLE9BQU8sT0FBTyxNQUFNO0FBQUEsWUFDdkIsR0FBRywwQkFBUSxZQUFZLEdBQUc7QUFBQSxVQUM5QixDQUFDO0FBQUEsUUFDTDtBQUFBLFFBQ0EsU0FBUyxNQUFNO0FBQ1gsY0FBSSxDQUFDLEtBQUssS0FBSztBQUNYLGtCQUFNLElBQVMsZUFBZSw2REFBNkQ7QUFBQSxVQUMvRjtBQUNBLGNBQUksQ0FBQyxLQUFLLEdBQUc7QUFDVCxrQkFBTSxJQUFTLGVBQWUsd0RBQXdEO0FBQUEsVUFDMUY7QUFDQSxnQkFBTSxVQUFVLElBQVMsUUFBSyxjQUFjO0FBQzVDLGtCQUFRLG1CQUFtQixZQUFZLG1CQUFtQixLQUFLLEdBQUc7QUFDbEUsa0JBQVEsWUFBWSwwQkFBUSxjQUFjLEtBQUssQ0FBQztBQUNoRCxlQUFLLE9BQU8sY0FBQXhCLE9BQVMsS0FBSyxjQUFjLFVBQVUsT0FBTyxDQUFDO0FBQzFELGlCQUFPO0FBQUEsUUFDWDtBQUFBLE1BQ0o7QUFFQSxNQUFNLFdBQU4sTUFBZTtBQUFBLFFBQ1gsYUFBYSxZQUFZLFdBQVcsYUFBYSxXQUFXO0FBQ3hELGdCQUFNLGFBQWEsSUFBSXVCLGNBQWE7QUFDcEMscUJBQVcsWUFBWTtBQUN2QixxQkFBVyxjQUFjO0FBQ3pCLHFCQUFXLFNBQVMsVUFBVSxPQUFPLENBQUMsVUFBVSxLQUFLLGlCQUFpQixRQUFRLEtBQUssTUFBTSxFQUFFO0FBQzNGLGdCQUFNLFlBQVksSUFBSUMsYUFBWTtBQUNsQyxvQkFBVSxZQUFZO0FBQ3RCLG9CQUFVLGNBQWM7QUFDeEIsb0JBQVUsU0FBUyxVQUFVLE9BQU8sQ0FBQyxVQUFVLEtBQUssZ0JBQWdCLFFBQVEsS0FBSyxNQUFNLEVBQUU7QUFDekYsZ0JBQU1lLFFBQU8sVUFBVSxXQUFXLFlBQVk7QUFDOUMsZ0JBQU0sT0FBTyxjQUFBckMsUUFBTyxvQkFBb0JxQyxPQUFNO0FBQUEsWUFDMUMsbUJBQW1CO0FBQUEsY0FDZixRQUFRO0FBQUEsY0FDUixNQUFNO0FBQUEsWUFDVjtBQUFBLFlBQ0Esb0JBQW9CO0FBQUEsY0FDaEIsUUFBUTtBQUFBLGNBQ1IsTUFBTTtBQUFBLFlBQ1Y7QUFBQSxVQUNKLENBQUM7QUFDRCxxQkFBVyxPQUFPLEtBQUs7QUFDdkIsb0JBQVUsT0FBTyxLQUFLO0FBQ3RCLGdCQUFNLE1BQU07QUFBQSxZQUNSO0FBQUEsWUFDQTtBQUFBLFVBQ0o7QUFDQSxpQkFBTztBQUFBLFFBQ1g7QUFBQSxRQUNBLGFBQWEsS0FBSyxXQUFXLEtBQUssTUFBTTtBQUNwQyxjQUFJLENBQUMsSUFBSSxLQUFLO0FBQ1YsZ0JBQUksTUFBTTtBQUFBLEVBQWdDLElBQUksS0FBSyxTQUFTLFFBQVEsQ0FBQztBQUFBO0FBQUEsVUFDekU7QUFDQSxnQkFBTUYsV0FBVTtBQUFBLFlBQ1osS0FBSyxJQUFJO0FBQUEsVUFDYjtBQUNBLGdCQUFNLFlBQVksY0FBQW5DLFFBQU8sS0FBSyxNQUFNLGNBQUFGLE9BQVMsS0FBSyxJQUFJLEdBQUdxQyxRQUFPO0FBQ2hFLGlCQUFZLHdDQUFzQixjQUFjLFNBQVM7QUFBQSxRQUM3RDtBQUFBLFFBQ0EsYUFBYSxPQUFPLFdBQVcsS0FBSyxXQUFXLE1BQU07QUFDakQsY0FBSSxDQUFDLElBQUksS0FBSztBQUNWLGdCQUFJLE1BQU07QUFBQSxFQUErQixJQUFJLEtBQUssU0FBUyxRQUFRLENBQUM7QUFBQTtBQUFBLFVBQ3hFO0FBQ0EsZ0JBQU1BLFdBQVU7QUFBQSxZQUNaLEtBQUssSUFBSTtBQUFBLFVBQ2I7QUFDQSxnQkFBTSxLQUFLLGNBQUFuQyxRQUFPLE9BQU8sTUFBTSxjQUFBRixPQUFTLEtBQUssSUFBSSxHQUFHcUMsVUFBUyxjQUFBckMsT0FBUyxLQUFLLFNBQVMsQ0FBQztBQUNyRixpQkFBTztBQUFBLFFBQ1g7QUFBQSxRQUNBLGFBQWEsV0FBVyxXQUFXLFNBQVMsUUFBUTtBQUNoRCxnQkFBTSxZQUFZLGNBQUFFLFFBQU8sZ0JBQWdCO0FBQUEsWUFDckMsS0FBSyxVQUFVLE9BQU87QUFBQSxZQUN0QixRQUFRO0FBQUEsWUFDUixNQUFNO0FBQUEsVUFDVixDQUFDO0FBQ0QsZ0JBQU0sYUFBYSxjQUFBQSxRQUFPLGlCQUFpQjtBQUFBLFlBQ3ZDLEtBQUssUUFBUTtBQUFBLFlBQ2IsUUFBUTtBQUFBLFlBQ1IsTUFBTTtBQUFBLFVBQ1YsQ0FBQztBQUNELGdCQUFNLE9BQU8sY0FBQUEsUUFBTyxjQUFjO0FBQUEsWUFDOUI7QUFBQSxZQUNBO0FBQUEsVUFDSixDQUFDO0FBQ0QsaUJBQU8sSUFBSSxXQUFXLElBQUksRUFBRSxPQUFPLE1BQU0sR0FBRyxVQUFVLENBQUM7QUFBQSxRQUMzRDtBQUFBLFFBQ0EsYUFBYSxVQUFVa0MsU0FBUSxLQUFLO0FBQ2hDLGtCQUFRQSxRQUFPLFlBQVksR0FBRztBQUFBLFlBQzFCLEtBQUs7QUFDRCxxQkFBTyxlQUFlLE9BQU8sR0FBRztBQUFBLFlBQ3BDLEtBQUs7QUFBQSxZQUNMLEtBQUs7QUFDRCxxQkFBTyxJQUFJLFdBQVcsSUFBSSxJQUFJLEVBQUU7QUFBQSxZQUNwQyxLQUFLLE9BQU87QUFDUixvQkFBTSxnQkFBZ0IsVUFBVSxNQUFNLElBQUksTUFBVyxRQUFLLGFBQWE7QUFDdkUscUJBQU8sY0FBYztBQUFBLFlBQ3pCO0FBQUEsWUFDQTtBQUNJLG9CQUFNLElBQVMsZUFBZSxnREFBZ0Q7QUFBQSxVQUN0RjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGFBQWEsVUFBVUEsU0FBUSxTQUFTLFdBQVcsYUFBYSxXQUFXO0FBQ3ZFLGtCQUFRQSxRQUFPLFlBQVksR0FBRztBQUFBLFlBQzFCLEtBQUssT0FBTztBQUNSLG9CQUFNLE1BQU07QUFDWixrQkFBSSxJQUFJLEdBQUc7QUFDUCxzQkFBTSxTQUFTLFdBQVcsU0FBUyxTQUFTLEVBQUUsY0FBbUIsUUFBSyxnQkFBZ0IsQ0FBQztBQUN2Rix1QkFBTyxLQUFLLGlCQUFpQixRQUFRLFdBQVcsYUFBYSxTQUFTO0FBQUEsY0FDMUUsT0FDSztBQUNELG9CQUFJLENBQUMsSUFBSSxHQUFHO0FBQ1Isd0JBQU0sSUFBSSxVQUFVLHdDQUF3QztBQUFBLGdCQUNoRTtBQUNBLHVCQUFPLEtBQUssZ0JBQWdCLDBCQUFRLGNBQWMsSUFBSSxDQUFDLEdBQUcsV0FBVyxhQUFhLFNBQVM7QUFBQSxjQUMvRjtBQUFBLFlBQ0o7QUFBQSxZQUNBLEtBQUssT0FBTztBQUNSLHFCQUFPLEtBQUssZ0JBQWdCLFNBQVMsV0FBVyxhQUFhLFNBQVM7QUFBQSxZQUMxRTtBQUFBLFlBQ0EsS0FBSyxRQUFRO0FBQ1Qsb0JBQU0sVUFBVSxVQUFVLE1BQU0sSUFBSSxXQUFXLE9BQU8sR0FBUSxRQUFLLGFBQWE7QUFDaEYscUJBQU8sS0FBSyxnQkFBZ0IsUUFBUSxXQUFXLFdBQVcsYUFBYSxTQUFTO0FBQUEsWUFDcEY7QUFBQSxZQUNBLEtBQUssU0FBUztBQUNWLG9CQUFNLFVBQVUsVUFBVSxNQUFNLElBQUksV0FBVyxPQUFPLEdBQVEsUUFBSyxjQUFjO0FBQ2pGLG9CQUFNLFNBQVMsVUFBVSxNQUFNLFFBQVEsWUFBaUIsUUFBSyxlQUFlO0FBQzVFLHFCQUFPLEtBQUssaUJBQWlCLFFBQVEsV0FBVyxhQUFhLFNBQVM7QUFBQSxZQUMxRTtBQUFBLFlBQ0E7QUFDSSxvQkFBTSxJQUFTLGVBQWUsaURBQWlEO0FBQUEsVUFDdkY7QUFBQSxRQUNKO0FBQUEsUUFDQSxPQUFPLGlCQUFpQixRQUFRLFdBQVcsYUFBYSxXQUFXO0FBQy9ELGdCQUFNLE1BQU0sSUFBSWIsY0FBYTtBQUM3QixjQUFJLFNBQVM7QUFBQSxZQUNULEtBQUssVUFBVTtBQUFBLFlBQ2YsR0FBRywwQkFBUSxZQUFZLE9BQU8sQ0FBQztBQUFBLFVBQ25DLENBQUM7QUFDRCxjQUFJLFlBQVksT0FBTyxPQUFPLENBQUMsR0FBRyxTQUFTO0FBQzNDLGNBQUksY0FBYztBQUNsQixjQUFJLFNBQVM7QUFDYixpQkFBTztBQUFBLFFBQ1g7QUFBQSxRQUNBLGFBQWEsZ0JBQWdCLFFBQVEsV0FBVyxhQUFhLFdBQVc7QUFDcEUsZ0JBQU0sTUFBTSxJQUFJQyxhQUFZO0FBQzVCLGNBQUksU0FBUztBQUFBLFlBQ1QsS0FBSyxVQUFVO0FBQUEsWUFDZixHQUFHLDBCQUFRLFlBQVksTUFBTTtBQUFBLFVBQ2pDLENBQUM7QUFDRCxjQUFJLFlBQVksT0FBTyxPQUFPLENBQUMsR0FBRyxTQUFTO0FBQzNDLGNBQUksY0FBYztBQUNsQixjQUFJLFNBQVM7QUFDYixpQkFBTztBQUFBLFFBQ1g7QUFBQSxNQUNKO0FBQ0EsZUFBUyxrQkFBa0IsQ0FBQyxRQUFRO0FBQ3BDLGVBQVMsbUJBQW1CLENBQUMsUUFBUSxhQUFhLFlBQVk7QUFFOUQsTUFBTUMsaUJBQU4sY0FBaUMsY0FBYztBQUFBLFFBQzNDLE1BQU0sY0FBYyxXQUFXLGFBQWEsV0FBVztBQUNuRCxnQkFBTSxPQUFPLE1BQU0sU0FBUyxZQUFZO0FBQUEsWUFDcEMsTUFBTSxLQUFLO0FBQUEsWUFDWCxZQUFZLFVBQVUsV0FBVyxRQUFRLFFBQVEsSUFBSTtBQUFBLFVBQ3pELEdBQUcsYUFBYSxTQUFTO0FBQ3pCLGlCQUFPO0FBQUEsWUFDSCxZQUFZLGFBQWEsS0FBSyxVQUFVO0FBQUEsWUFDeEMsV0FBVyxhQUFhLEtBQUssU0FBUztBQUFBLFVBQzFDO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTSxPQUFPLFdBQVcsS0FBSyxNQUFNO0FBQy9CLGlCQUFPLFNBQVMsS0FBSyxXQUFXLGFBQWEsR0FBRyxHQUFHLElBQUksV0FBVyxJQUFJLENBQUM7QUFBQSxRQUMzRTtBQUFBLFFBQ0EsTUFBTSxTQUFTLFdBQVcsS0FBSyxXQUFXLE1BQU07QUFDNUMsaUJBQU8sU0FBUyxPQUFPLFdBQVcsYUFBYSxHQUFHLEdBQUcsSUFBSSxXQUFXLFNBQVMsR0FBRyxJQUFJLFdBQVcsSUFBSSxDQUFDO0FBQUEsUUFDeEc7QUFBQSxRQUNBLE1BQU0sWUFBWVcsU0FBUSxLQUFLO0FBQzNCLGlCQUFPLFNBQVMsVUFBVUEsU0FBUSxhQUFhLEdBQUcsQ0FBQztBQUFBLFFBQ3ZEO0FBQUEsUUFDQSxNQUFNLFlBQVlBLFNBQVEsU0FBUyxXQUFXLGFBQWEsV0FBVztBQUNsRSxnQkFBTSxNQUFNLE1BQU0sU0FBUyxVQUFVQSxTQUFRLFNBQVMsRUFBRSxHQUFHLFdBQVcsTUFBTSxLQUFLLEtBQUssR0FBRyxhQUFhLFNBQVM7QUFDL0csaUJBQU8sYUFBYSxHQUFHO0FBQUEsUUFDM0I7QUFBQSxNQUNKO0FBRUEsTUFBTVYsa0JBQU4sY0FBa0MsZUFBZTtBQUFBLFFBQzdDLE1BQU0sY0FBYyxXQUFXLGFBQWEsV0FBVztBQUNuRCxnQkFBTSxPQUFPLE1BQU0sU0FBUyxZQUFZO0FBQUEsWUFDcEMsTUFBTSxLQUFLO0FBQUEsWUFDWCxZQUFZLFVBQVUsV0FBVyxZQUFZO0FBQUEsVUFDakQsR0FBRyxhQUFhLFNBQVM7QUFDekIsaUJBQU87QUFBQSxZQUNILFlBQVksYUFBYSxLQUFLLFVBQVU7QUFBQSxZQUN4QyxXQUFXLGFBQWEsS0FBSyxTQUFTO0FBQUEsVUFDMUM7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNLGFBQWEsV0FBVyxTQUFTLFFBQVE7QUFDM0MsZ0JBQU0sT0FBTyxNQUFNLFNBQVMsV0FBVyxFQUFFLEdBQUcsV0FBVyxRQUFRLGFBQWEsVUFBVSxNQUFNLEVBQUUsR0FBRyxhQUFhLE9BQU8sR0FBRyxNQUFNO0FBQzlILGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsTUFBTSxZQUFZVSxTQUFRLEtBQUs7QUFDM0IsaUJBQU8sU0FBUyxVQUFVQSxTQUFRLGFBQWEsR0FBRyxDQUFDO0FBQUEsUUFDdkQ7QUFBQSxRQUNBLE1BQU0sWUFBWUEsU0FBUSxTQUFTLFdBQVcsYUFBYSxXQUFXO0FBQ2xFLGdCQUFNLE1BQU0sTUFBTSxTQUFTLFVBQVVBLFNBQVEsU0FBUyxFQUFFLEdBQUcsV0FBVyxNQUFNLEtBQUssS0FBSyxHQUFHLGFBQWEsU0FBUztBQUMvRyxpQkFBTyxhQUFhLEdBQUc7QUFBQSxRQUMzQjtBQUFBLE1BQ0o7QUFFQSxNQUFNLG1CQUFOLGNBQStCN0IsV0FBVTtBQUFBLFFBQ3JDLFlBQVksV0FBVyxhQUFhLFFBQVEsTUFBTTtBQUM5QyxnQkFBTTtBQUNOLGVBQUssWUFBWTtBQUNqQixlQUFLLGNBQWM7QUFDbkIsZUFBSyxTQUFTO0FBQ2QsZUFBSyxPQUFPLE9BQU8sS0FBSyxJQUFJO0FBQUEsUUFDaEM7QUFBQSxRQUNBLFFBQVE7QUFDSixpQkFBTztBQUFBLFlBQ0gsS0FBSztBQUFBLFlBQ0wsS0FBSyxLQUFLLFVBQVU7QUFBQSxZQUNwQixTQUFTLEtBQUs7QUFBQSxZQUNkLEtBQUssS0FBSztBQUFBLFVBQ2Q7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUVBLE1BQU0sb0JBQU4sY0FBZ0MsaUJBQWlCO0FBQUEsUUFDN0MsY0FBYztBQUNWLGdCQUFNLEdBQUcsU0FBUztBQUNsQixlQUFLLE9BQU87QUFBQSxRQUNoQjtBQUFBLFFBQ0EsUUFBUTtBQUNKLGdCQUFNLFNBQVMsY0FBQUwsUUFBTyxnQkFBZ0I7QUFBQSxZQUNsQyxLQUFLLEtBQUs7QUFBQSxZQUNWLFFBQVE7QUFBQSxVQUNaLENBQUMsRUFBRSxPQUFPLEVBQUUsUUFBUSxNQUFNLENBQUM7QUFDM0IsZ0JBQU0sTUFBVyxhQUFhLGFBQWEsS0FBSyxLQUFLLFNBQVMsQ0FBQztBQUMvRCxnQkFBTSxRQUFRLFdBQVcsTUFBTSxLQUFVLFFBQUssY0FBYztBQUM1RCxnQkFBTSxJQUFJLFdBQVcsTUFBTSxNQUFNLFlBQWlCLFFBQUssWUFBWSxFQUFFO0FBQ3JFLGlCQUFPO0FBQUEsWUFDSCxHQUFHLE1BQU0sTUFBTTtBQUFBLFlBQ2YsR0FBRztBQUFBLFlBQ0gsR0FBRyxPQUFPLEtBQUssSUFBSSxXQUFXLENBQUMsQ0FBQyxFQUFFLFNBQVMsV0FBVztBQUFBLFVBQzFEO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFFQSxNQUFNLG1CQUFOLGNBQStCLGlCQUFpQjtBQUFBLFFBQzVDLGNBQWM7QUFDVixnQkFBTSxHQUFHLFNBQVM7QUFDbEIsZUFBSyxPQUFPO0FBQUEsUUFDaEI7QUFBQSxRQUNBLFFBQVE7QUFDSixnQkFBTSxNQUFNLGNBQUFBLFFBQU8sZ0JBQWdCO0FBQUEsWUFDL0IsS0FBSyxLQUFLO0FBQUEsWUFDVixRQUFRO0FBQUEsVUFDWixDQUFDLEVBQUUsT0FBTyxFQUFFLFFBQVEsTUFBTSxDQUFDO0FBQzNCLGlCQUFPO0FBQUEsWUFDSCxHQUFHLE1BQU0sTUFBTTtBQUFBLFlBQ2YsR0FBRztBQUFBLFVBQ1A7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUVBLE1BQU0sZ0JBQU4sTUFBb0I7QUFBQSxRQUNoQixhQUFhLFlBQVksV0FBVyxhQUFhLFdBQVc7QUFDeEQsZ0JBQU1xQyxRQUFPLFVBQVUsS0FBSyxZQUFZO0FBQ3hDLGdCQUFNLE9BQU8sY0FBQXJDLFFBQU8sb0JBQW9CcUMsT0FBTTtBQUFBLFlBQzFDLG1CQUFtQjtBQUFBLGNBQ2YsUUFBUTtBQUFBLGNBQ1IsTUFBTTtBQUFBLFlBQ1Y7QUFBQSxZQUNBLG9CQUFvQjtBQUFBLGNBQ2hCLFFBQVE7QUFBQSxjQUNSLE1BQU07QUFBQSxZQUNWO0FBQUEsVUFDSixDQUFDO0FBQ0QsZ0JBQU0sU0FBUztBQUFBLFlBQ1gsTUFBTUEsVUFBUyxZQUFZLFlBQVk7QUFBQSxVQUMzQztBQUNBLGdCQUFNLG1CQUFtQixVQUFVLE9BQU8sQ0FBQyxVQUFVLEtBQUssaUJBQWlCLFNBQVMsS0FBSyxDQUFDO0FBQzFGLGdCQUFNLGtCQUFrQixVQUFVLE9BQU8sQ0FBQyxVQUFVLEtBQUssZ0JBQWdCLFNBQVMsS0FBSyxDQUFDO0FBQ3hGLGlCQUFPO0FBQUEsWUFDSCxZQUFZLElBQUksa0JBQWtCLFFBQVEsYUFBYSxrQkFBa0IsS0FBSyxVQUFVO0FBQUEsWUFDeEYsV0FBVyxJQUFJLGlCQUFpQixRQUFRLE1BQU0saUJBQWlCLEtBQUssU0FBUztBQUFBLFVBQ2pGO0FBQUEsUUFDSjtBQUFBLFFBQ0EsYUFBYSxLQUFLLFdBQVcsS0FBSyxNQUFNO0FBQ3BDLGdCQUFNLFlBQVksY0FBQXJDLFFBQU8sS0FBSyxNQUFNLE9BQU8sS0FBSyxJQUFJLEdBQUcsSUFBSSxJQUFJO0FBQy9ELGlCQUFZLHdDQUFzQixjQUFjLFNBQVM7QUFBQSxRQUM3RDtBQUFBLFFBQ0EsYUFBYSxPQUFPLFdBQVcsS0FBSyxXQUFXLE1BQU07QUFDakQsaUJBQU8sY0FBQUEsUUFBTyxPQUFPLE1BQU0sT0FBTyxLQUFLLElBQUksR0FBRyxJQUFJLE1BQU0sU0FBUztBQUFBLFFBQ3JFO0FBQUEsUUFDQSxhQUFhLFVBQVVrQyxTQUFRLEtBQUs7QUFDaEMsa0JBQVFBLFNBQVE7QUFBQSxZQUNaLEtBQUs7QUFDRCxxQkFBTyxJQUFJLE1BQU07QUFBQSxZQUNyQixLQUFLLFNBQVM7QUFDVixxQkFBWSxhQUFhLGNBQWMsSUFBSSxLQUFLLFNBQVMsQ0FBQztBQUFBLFlBQzlEO0FBQUEsWUFDQSxLQUFLLFFBQVE7QUFDVCxxQkFBWSxhQUFhLGNBQWMsSUFBSSxLQUFLLFNBQVMsQ0FBQztBQUFBLFlBQzlEO0FBQUEsWUFDQSxLQUFLLE9BQU87QUFDUixvQkFBTSxNQUFNLElBQUksTUFBTTtBQUN0QixxQkFBTywwQkFBUSxjQUFjLElBQUksQ0FBQztBQUFBLFlBQ3RDO0FBQUEsWUFDQTtBQUNJLHFCQUFPLFFBQVEsT0FBTyxJQUFTLGVBQWUsZ0RBQWdELENBQUM7QUFBQSxVQUN2RztBQUFBLFFBQ0o7QUFBQSxRQUNBLGFBQWEsVUFBVUEsU0FBUSxTQUFTLFdBQVcsYUFBYSxXQUFXO0FBQ3ZFLGtCQUFRQSxTQUFRO0FBQUEsWUFDWixLQUFLLE9BQU87QUFDUixvQkFBTSxNQUFNO0FBQ1osa0JBQUksSUFBSSxHQUFHO0FBQ1Asc0JBQU0sY0FBYyxJQUFTLFFBQUssYUFBYTtBQUMvQyw0QkFBWSxRQUFhLHdDQUFzQixjQUFjLE9BQU8sS0FBSyxJQUFJLEdBQUcsV0FBVyxDQUFDO0FBQzVGLHNCQUFNLFFBQVEsSUFBUyxRQUFLLGVBQWU7QUFDM0Msc0JBQU0sb0JBQW9CLFlBQVksVUFBVSxLQUFLLFlBQVksTUFBTSxZQUM1RCxRQUFLLFlBQ0wsUUFBSztBQUNoQixzQkFBTSxhQUFhLFdBQVcsVUFBVSxXQUFXO0FBQ25ELHNCQUFNLE1BQU0sV0FBVyxVQUFVLEtBQUs7QUFDdEMsc0JBQU0sTUFBVyxhQUFhLGlCQUFpQixLQUFLLGFBQWE7QUFDakUsdUJBQU8sSUFBSSxrQkFBa0IsV0FBVyxhQUFhLFdBQVcsR0FBRztBQUFBLGNBQ3ZFLFdBQ1MsSUFBSSxHQUFHO0FBQ1osc0JBQU0sU0FBUyxjQUFBbEMsUUFBTyxnQkFBZ0I7QUFBQSxrQkFDbEMsUUFBUTtBQUFBLGtCQUNSLEtBQUs7QUFBQSxnQkFDVCxDQUFDO0FBQ0Qsc0JBQU0sTUFBTSxPQUFPLE9BQU8sRUFBRSxRQUFRLE9BQU8sTUFBTSxPQUFPLENBQUM7QUFDekQsdUJBQU8sSUFBSSxpQkFBaUIsV0FBVyxhQUFhLFdBQVcsR0FBRztBQUFBLGNBQ3RFLE9BQ0s7QUFDRCxzQkFBTSxJQUFTLGVBQWUsMERBQTBEO0FBQUEsY0FDNUY7QUFBQSxZQUNKO0FBQUEsWUFDQSxLQUFLLFNBQVM7QUFDVixvQkFBTSxNQUFXLGFBQWEsaUJBQWlCLFNBQVMsYUFBYTtBQUNyRSxxQkFBTyxJQUFJLGtCQUFrQixXQUFXLGFBQWEsV0FBVyxHQUFHO0FBQUEsWUFDdkU7QUFBQSxZQUNBLEtBQUssUUFBUTtBQUNULG9CQUFNLE1BQVcsYUFBYSxpQkFBaUIsU0FBUyxZQUFZO0FBQ3BFLHFCQUFPLElBQUksaUJBQWlCLFdBQVcsYUFBYSxXQUFXLEdBQUc7QUFBQSxZQUN0RTtBQUFBLFlBQ0EsS0FBSyxPQUFPO0FBQ1Isb0JBQU0sTUFBTTtBQUNaLG9CQUFNLE1BQU0sY0FBQUEsUUFBTyxnQkFBZ0I7QUFBQSxnQkFDL0IsUUFBUTtBQUFBLGdCQUNSLEtBQUs7QUFBQSxrQkFDRCxLQUFLO0FBQUEsa0JBQ0wsS0FBSyxVQUFVLEtBQUssWUFBWSxNQUFNLFlBQVksWUFBWTtBQUFBLGtCQUM5RCxHQUFHLDBCQUFRLFlBQVksR0FBRztBQUFBLGdCQUM5QjtBQUFBLGNBQ0osQ0FBQztBQUNELG9CQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUUsUUFBUSxPQUFPLE1BQU0sT0FBTyxDQUFDO0FBQ3RELHFCQUFPLElBQUksaUJBQWlCLFdBQVcsYUFBYSxXQUFXLEdBQUc7QUFBQSxZQUN0RTtBQUFBLFlBQ0E7QUFDSSxxQkFBTyxRQUFRLE9BQU8sSUFBUyxlQUFlLGdEQUFnRCxDQUFDO0FBQUEsVUFDdkc7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUNBLG9CQUFjLG1CQUFtQixDQUFDLFFBQVEsY0FBYyxXQUFXO0FBQ25FLG9CQUFjLGtCQUFrQixDQUFDLFFBQVE7QUFFekMsTUFBTXlCLG1CQUFOLGNBQW1DLGdCQUFnQjtBQUFBLFFBQy9DLE1BQU0sY0FBYyxXQUFXLGFBQWEsV0FBVztBQUNuRCxnQkFBTSxPQUFPLE1BQU0sY0FBYyxZQUFZLFdBQVcsYUFBYSxTQUFTO0FBQzlFLGlCQUFPO0FBQUEsWUFDSCxZQUFZLGFBQWEsS0FBSyxVQUFVO0FBQUEsWUFDeEMsV0FBVyxhQUFhLEtBQUssU0FBUztBQUFBLFVBQzFDO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTSxPQUFPLFdBQVcsS0FBSyxNQUFNO0FBQy9CLGdCQUFNLGNBQWMsYUFBYSxHQUFHO0FBQ3BDLGdCQUFNLFlBQVksY0FBYyxLQUFLLFdBQVcsYUFBYSxJQUFJLFdBQVcsSUFBSSxDQUFDO0FBQ2pGLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsU0FBUyxXQUFXLEtBQUssV0FBVyxNQUFNO0FBQ3RDLGdCQUFNLGNBQWMsYUFBYSxHQUFHO0FBQ3BDLGlCQUFPLGNBQWMsT0FBTyxXQUFXLGFBQWEsSUFBSSxXQUFXLFNBQVMsR0FBRyxJQUFJLFdBQVcsSUFBSSxDQUFDO0FBQUEsUUFDdkc7QUFBQSxRQUNBLE1BQU0sWUFBWVMsU0FBUSxLQUFLO0FBQzNCLGdCQUFNLGNBQWMsYUFBYSxHQUFHO0FBQ3BDLGlCQUFPLGNBQWMsVUFBVUEsU0FBUSxXQUFXO0FBQUEsUUFDdEQ7QUFBQSxRQUNBLE1BQU0sWUFBWUEsU0FBUSxTQUFTLFdBQVcsYUFBYSxXQUFXO0FBQ2xFLGdCQUFNLGNBQWMsTUFBTSxjQUFjLFVBQVVBLFNBQVEsU0FBUyxXQUFXLGFBQWEsU0FBUztBQUNwRyxpQkFBTyxhQUFhLFdBQVc7QUFBQSxRQUNuQztBQUFBLE1BQ0o7QUFFQSxNQUFNUixrQkFBTixjQUFrQyxlQUFlO0FBQUEsUUFDN0MsTUFBTSxjQUFjLFdBQVcsYUFBYSxXQUFXO0FBQ25ELGdCQUFNLE9BQU8sTUFBTSxjQUFjLFlBQVksV0FBVyxhQUFhLFNBQVM7QUFDOUUsaUJBQU87QUFBQSxZQUNILFlBQVksYUFBYSxLQUFLLFVBQVU7QUFBQSxZQUN4QyxXQUFXLGFBQWEsS0FBSyxTQUFTO0FBQUEsVUFDMUM7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNLGFBQWEsV0FBVyxTQUFTLFFBQVE7QUFDM0MsZ0JBQU0sa0JBQWtCLGFBQWEsT0FBTztBQUM1QyxnQkFBTSxvQkFBb0IsYUFBYSxVQUFVLE1BQU07QUFDdkQsZ0JBQU0sWUFBWSxjQUFBMUIsUUFBTyxnQkFBZ0I7QUFBQSxZQUNyQyxLQUFLLGtCQUFrQixLQUFLLFNBQVM7QUFBQSxZQUNyQyxRQUFRO0FBQUEsWUFDUixNQUFNO0FBQUEsVUFDVixDQUFDO0FBQ0QsZ0JBQU0sYUFBYSxjQUFBQSxRQUFPLGlCQUFpQjtBQUFBLFlBQ3ZDLEtBQUssZ0JBQWdCLEtBQUssU0FBUztBQUFBLFlBQ25DLFFBQVE7QUFBQSxZQUNSLE1BQU07QUFBQSxVQUNWLENBQUM7QUFDRCxnQkFBTSxPQUFPLGNBQUFBLFFBQU8sY0FBYztBQUFBLFlBQzlCO0FBQUEsWUFDQTtBQUFBLFVBQ0osQ0FBQztBQUNELGlCQUFPLElBQUksV0FBVyxJQUFJLEVBQUUsT0FBTyxNQUFNLEdBQUcsVUFBVSxDQUFDO0FBQUEsUUFDM0Q7QUFBQSxRQUNBLE1BQU0sWUFBWWtDLFNBQVEsS0FBSztBQUMzQixnQkFBTSxjQUFjLGFBQWEsR0FBRztBQUNwQyxpQkFBTyxjQUFjLFVBQVVBLFNBQVEsV0FBVztBQUFBLFFBQ3REO0FBQUEsUUFDQSxNQUFNLFlBQVlBLFNBQVEsU0FBUyxXQUFXLGFBQWEsV0FBVztBQUNsRSxnQkFBTSxNQUFNLE1BQU0sY0FBYyxVQUFVQSxTQUFRLFNBQVMsV0FBVyxhQUFhLFNBQVM7QUFDNUYsaUJBQU8sYUFBYSxHQUFHO0FBQUEsUUFDM0I7QUFBQSxRQUNBLGVBQWUsS0FBSyxVQUFVO0FBQzFCLGdCQUFNLGVBQWUsS0FBSyxRQUFRO0FBQ2xDLGNBQUksRUFBRSxhQUFhLEdBQUcsYUFBYSxtQkFBbUI7QUFDbEQsa0JBQU0sSUFBSSxVQUFVLGdDQUFnQztBQUFBLFVBQ3hEO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFFQSxNQUFNLGlCQUFOLGNBQTZCN0IsV0FBVTtBQUFBLE1BQ3ZDO0FBRUEsTUFBTXNCLGtCQUFOLGNBQWtDLGVBQWU7QUFBQSxRQUM3QyxNQUFNLGFBQWEsV0FBVyxTQUFTLFFBQVE7QUFDM0MsaUJBQU8sSUFBSSxRQUFRLENBQUMsU0FBUyxXQUFXO0FBQ3BDLGtCQUFNLE9BQVksd0NBQXNCLGNBQWMsVUFBVSxJQUFJO0FBQ3BFLGtCQUFNUyxRQUFPLFVBQVUsS0FBSyxLQUFLLFFBQVEsS0FBSyxFQUFFO0FBQ2hELDBCQUFBcEMsUUFBTyxPQUFPLGFBQWEsT0FBTyxFQUFFLE1BQU0sY0FBQUYsT0FBUyxLQUFLLElBQUksR0FBRyxVQUFVLFlBQVksVUFBVSxHQUFHc0MsT0FBTSxDQUFDLEtBQUssZ0JBQWdCO0FBQzFILGtCQUFJLEtBQUs7QUFDTCx1QkFBTyxHQUFHO0FBQUEsY0FDZCxPQUNLO0FBQ0Qsd0JBQVEsSUFBSSxXQUFXLFdBQVcsRUFBRSxNQUFNO0FBQUEsY0FDOUM7QUFBQSxZQUNKLENBQUM7QUFBQSxVQUNMLENBQUM7QUFBQSxRQUNMO0FBQUEsUUFDQSxNQUFNLFlBQVlGLFNBQVEsU0FBUyxXQUFXLGFBQWEsV0FBVztBQUNsRSxjQUFJQSxZQUFXLE9BQU87QUFDbEIsa0JBQU0sTUFBTSxJQUFJLGVBQWU7QUFDL0IsZ0JBQUksT0FBTyxjQUFBcEMsT0FBUyxLQUFLLE9BQU87QUFDaEMsZ0JBQUksWUFBWSxFQUFFLE1BQU0sS0FBSyxLQUFLO0FBQ2xDLGdCQUFJLGNBQWM7QUFDbEIsZ0JBQUksU0FBUztBQUNiLG1CQUFPLGFBQWEsR0FBRztBQUFBLFVBQzNCO0FBQ0EsZ0JBQU0sSUFBUyxlQUFlLHVCQUF1QjtBQUFBLFFBQ3pEO0FBQUEsUUFDQSxlQUFlLEtBQUssVUFBVTtBQUMxQixnQkFBTSxlQUFlLEtBQUssUUFBUTtBQUNsQyxjQUFJLEVBQUUsYUFBYSxHQUFHLGFBQWEsaUJBQWlCO0FBQ2hELGtCQUFNLElBQUksVUFBVSw2QkFBNkI7QUFBQSxVQUNyRDtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBRUEsTUFBTSxnQkFBTixjQUE0Qk8sV0FBVTtBQUFBLFFBQ2xDLElBQUksTUFBTTtBQUNOLGdCQUFNK0IsUUFBTyxLQUFLLFVBQVUsS0FBSyxLQUFLLFlBQVk7QUFDbEQsaUJBQU8sS0FBS0EsTUFBSyxRQUFRLFFBQVEsRUFBRSxDQUFDO0FBQUEsUUFDeEM7QUFBQSxRQUNBLElBQUksSUFBSSxPQUFPO0FBQUEsUUFDZjtBQUFBLE1BQ0o7QUFDQSxpQkFBVztBQUFBLFFBQ1AsU0FBUyxFQUFFLE1BQU0sS0FBSyxXQUFXLHVCQUF1QixDQUFDO0FBQUEsTUFDN0QsR0FBRyxjQUFjLFdBQVcsUUFBUSxNQUFNO0FBRTFDLE1BQU1SLGdCQUFOLGNBQWdDLGFBQWE7QUFBQSxRQUN6QyxNQUFNLGNBQWMsV0FBVyxhQUFhLFdBQVc7QUFDbkQsZ0JBQU0sVUFBVSxVQUFVLFVBQVUsS0FBSyxpQkFBaUIsVUFBVSxLQUFLLElBQUksTUFBTSxLQUFLO0FBQ3hGLGdCQUFNLE1BQU0sSUFBSSxjQUFjO0FBQzlCLGNBQUksWUFBWTtBQUFBLFlBQ1osR0FBRztBQUFBLFlBQ0g7QUFBQSxZQUNBLE1BQU0sS0FBSztBQUFBLFVBQ2Y7QUFDQSxjQUFJLGNBQWM7QUFDbEIsY0FBSSxTQUFTO0FBQ2IsY0FBSSxPQUFPLGNBQUE1QixRQUFPLFlBQVksVUFBVSxDQUFDO0FBQ3pDLGlCQUFPLGFBQWEsR0FBRztBQUFBLFFBQzNCO0FBQUEsUUFDQSxNQUFNLE9BQU8sV0FBVyxLQUFLLE1BQU07QUFDL0IsZ0JBQU0sWUFBWSxVQUFVLGlCQUFpQixJQUFJLFVBQVUsSUFBSTtBQUMvRCxnQkFBTSxPQUFPLGNBQUFBLFFBQU8sV0FBVyxXQUFXLGFBQWEsR0FBRyxFQUFFLElBQUksRUFDM0QsT0FBTyxjQUFBRixPQUFTLEtBQUssSUFBSSxDQUFDLEVBQUUsT0FBTztBQUN4QyxpQkFBTyxJQUFJLFdBQVcsSUFBSSxFQUFFO0FBQUEsUUFDaEM7QUFBQSxRQUNBLE1BQU0sU0FBUyxXQUFXLEtBQUssV0FBVyxNQUFNO0FBQzVDLGdCQUFNLFlBQVksVUFBVSxpQkFBaUIsSUFBSSxVQUFVLElBQUk7QUFDL0QsZ0JBQU0sT0FBTyxjQUFBRSxRQUFPLFdBQVcsV0FBVyxhQUFhLEdBQUcsRUFBRSxJQUFJLEVBQzNELE9BQU8sY0FBQUYsT0FBUyxLQUFLLElBQUksQ0FBQyxFQUFFLE9BQU87QUFDeEMsaUJBQU8sS0FBSyxRQUFRLGNBQUFBLE9BQVMsS0FBSyxTQUFTLENBQUMsTUFBTTtBQUFBLFFBQ3REO0FBQUEsUUFDQSxNQUFNLFlBQVlvQyxTQUFRLFNBQVMsV0FBVyxhQUFhLFdBQVc7QUFDbEUsY0FBSTtBQUNKLGtCQUFRQSxRQUFPLFlBQVksR0FBRztBQUFBLFlBQzFCLEtBQUs7QUFDRCxvQkFBTSxXQUFXLFNBQVMsU0FBUyxFQUFFLGNBQWMsY0FBYyxDQUFDO0FBQ2xFO0FBQUEsWUFDSixLQUFLO0FBQ0Qsb0JBQU0sSUFBSSxjQUFjO0FBQ3hCLGtCQUFJLE9BQU8sY0FBQXBDLE9BQVMsS0FBSyxPQUFPO0FBQ2hDO0FBQUEsWUFDSjtBQUNJLG9CQUFNLElBQVMsZUFBZSxnQ0FBZ0M7QUFBQSxVQUN0RTtBQUNBLGNBQUksWUFBWTtBQUFBLFlBQ1osTUFBTSxFQUFFLE1BQU0sVUFBVSxLQUFLLEtBQUs7QUFBQSxZQUNsQyxNQUFNLEtBQUs7QUFBQSxZQUNYLFFBQVEsSUFBSSxLQUFLLFVBQVU7QUFBQSxVQUMvQjtBQUNBLGNBQUksY0FBYztBQUNsQixjQUFJLFNBQVM7QUFDYixpQkFBTyxhQUFhLEdBQUc7QUFBQSxRQUMzQjtBQUFBLFFBQ0EsTUFBTSxZQUFZb0MsU0FBUSxLQUFLO0FBQzNCLGtCQUFRQSxRQUFPLFlBQVksR0FBRztBQUFBLFlBQzFCLEtBQUs7QUFDRCxxQkFBTyxlQUFlLE9BQU8sYUFBYSxHQUFHLENBQUM7QUFBQSxZQUNsRCxLQUFLO0FBQ0QscUJBQU8sSUFBSSxXQUFXLGFBQWEsR0FBRyxFQUFFLElBQUksRUFBRTtBQUFBLFlBQ2xEO0FBQ0ksb0JBQU0sSUFBUyxlQUFlLGdDQUFnQztBQUFBLFVBQ3RFO0FBQUEsUUFDSjtBQUFBLFFBQ0EsZUFBZSxLQUFLLFVBQVU7QUFDMUIsZ0JBQU0sZUFBZSxLQUFLLFFBQVE7QUFDbEMsY0FBSSxFQUFFLGFBQWEsR0FBRyxhQUFhLGdCQUFnQjtBQUMvQyxrQkFBTSxJQUFJLFVBQVUsNEJBQTRCO0FBQUEsVUFDcEQ7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUVBLE1BQU0sZ0JBQU4sY0FBNEI3QixXQUFVO0FBQUEsTUFDdEM7QUFFQSxNQUFNd0IsZ0JBQU4sY0FBZ0MsYUFBYTtBQUFBLFFBQ3pDLE1BQU0sWUFBWUssU0FBUSxTQUFTLFdBQVcsYUFBYSxXQUFXO0FBQ2xFLGNBQUlBLFFBQU8sWUFBWSxNQUFNLE9BQU87QUFDaEMsa0JBQU0sSUFBUyxlQUFlLHlCQUF5QjtBQUFBLFVBQzNEO0FBQ0EsZ0JBQU0sTUFBTSxJQUFJLGNBQWM7QUFDOUIsY0FBSSxPQUFPLGNBQUFwQyxPQUFTLEtBQUssT0FBTztBQUNoQyxjQUFJLFlBQVksRUFBRSxNQUFNLEtBQUssS0FBSztBQUNsQyxjQUFJLGNBQWM7QUFDbEIsY0FBSSxTQUFTO0FBQ2IsaUJBQU8sYUFBYSxHQUFHO0FBQUEsUUFDM0I7QUFBQSxRQUNBLE1BQU0sYUFBYSxRQUFRLFNBQVMsUUFBUTtBQUN4QyxnQkFBTXNDLFFBQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxLQUFLLEVBQUU7QUFDN0MsZ0JBQU0sYUFBYSxjQUFBcEMsUUFBTyxXQUFXb0MsS0FBSSxFQUFFLE9BQU8sRUFBRTtBQUNwRCxnQkFBTSxhQUFhLFNBQVM7QUFDNUIsZ0JBQU0sT0FBTyx3Q0FBd0IsYUFBYSxPQUFPLElBQUk7QUFDN0QsZ0JBQU0sTUFBTSxjQUFBcEMsUUFBTyxXQUFXb0MsT0FBTSx3Q0FBd0IsYUFBYSxPQUFPLElBQUksQ0FBQyxFQUNoRixPQUFPLHdDQUF3QixhQUFhLGFBQWEsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUN2RSxPQUFPO0FBQ1osZ0JBQU0sU0FBUyxDQUFDLGNBQUF0QyxPQUFTLE1BQU0sQ0FBQyxDQUFDO0FBQ2pDLGdCQUFNLGFBQWEsS0FBSyxLQUFLLGFBQWEsVUFBVSxJQUFJO0FBQ3hELG1CQUFTLElBQUksR0FBRyxJQUFJLFlBQVksRUFBRSxHQUFHO0FBQ2pDLG1CQUFPLEtBQUssY0FBQUUsUUFBTyxXQUFXb0MsT0FBTSxHQUFHLEVBQ2xDLE9BQU8sY0FBQXRDLE9BQVMsT0FBTyxDQUFDLE9BQU8sSUFBSSxDQUFDLEdBQUcsTUFBTSxjQUFBQSxPQUFTLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDakUsT0FBTyxDQUFDO0FBQUEsVUFDakI7QUFDQSxpQkFBTyxjQUFBQSxPQUFTLE9BQU8sTUFBTSxFQUFFLE1BQU0sR0FBRyxVQUFVO0FBQUEsUUFDdEQ7QUFBQSxRQUNBLGVBQWUsS0FBSyxVQUFVO0FBQzFCLGdCQUFNLGVBQWUsS0FBSyxRQUFRO0FBQ2xDLGNBQUksRUFBRSxhQUFhLEdBQUcsYUFBYSxnQkFBZ0I7QUFDL0Msa0JBQU0sSUFBSSxVQUFVLDRCQUE0QjtBQUFBLFVBQ3BEO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFFQSxNQUFNLGNBQU4sTUFBa0I7QUFBQSxRQUNkLE9BQU8sT0FBTyxXQUFXLE1BQU07QUFDM0IsZ0JBQU1zQyxRQUFPLGNBQUFwQyxRQUFPLFdBQVcsVUFBVSxLQUFLLFlBQVksR0FBRyxFQUFFLGNBQWMsVUFBVSxPQUFPLENBQUMsRUFDMUYsT0FBTyxjQUFBRixPQUFTLEtBQUssSUFBSSxDQUFDLEVBQUUsT0FBTztBQUN4QyxpQkFBTyxJQUFJLFdBQVdzQyxLQUFJLEVBQUU7QUFBQSxRQUNoQztBQUFBLE1BQ0o7QUFFQSxNQUFNTixvQkFBTixjQUFvQyxpQkFBaUI7QUFBQSxRQUNqRCxNQUFNLFNBQVMsV0FBVyxNQUFNO0FBQzVCLGlCQUFPLFlBQVksT0FBTyxXQUFXLElBQUk7QUFBQSxRQUM3QztBQUFBLE1BQ0o7QUFFQSxNQUFNQyxvQkFBTixjQUFvQyxpQkFBaUI7QUFBQSxRQUNqRCxNQUFNLFNBQVMsV0FBVyxNQUFNO0FBQzVCLGlCQUFPLFlBQVksT0FBTyxXQUFXLElBQUk7QUFBQSxRQUM3QztBQUFBLE1BQ0o7QUFFQSxNQUFNQyxnQkFBTixjQUFnQyxhQUFhO0FBQUEsUUFDekMsY0FBYztBQUNWLGNBQUlNO0FBQ0osZ0JBQU07QUFDTixlQUFLLFVBQVUsSUFBSSxJQUFJaEMsZ0JBQWUsQ0FBQztBQUN2QyxlQUFLLFVBQVUsSUFBSSxJQUFJRSxnQkFBZSxDQUFDO0FBQ3ZDLGVBQUssVUFBVSxJQUFJLElBQUlDLGdCQUFlLENBQUM7QUFDdkMsZUFBSyxVQUFVLElBQUksSUFBSUYsaUJBQWdCLENBQUM7QUFDeEMsZUFBSyxVQUFVLElBQUksSUFBSUcsZUFBYyxDQUFDO0FBQ3RDLGVBQUssVUFBVSxJQUFJLElBQUlDLGdCQUFlLENBQUM7QUFDdkMsZ0JBQU0sVUFBVSxjQUFBWCxRQUFPLFdBQVc7QUFDbEMsY0FBSSxRQUFRLFNBQVMsU0FBUyxHQUFHO0FBQzdCLGlCQUFLLFVBQVUsSUFBSSxJQUFJLGVBQWUsQ0FBQztBQUFBLFVBQzNDO0FBQ0EsZUFBSyxVQUFVLElBQUksSUFBSSxtQkFBbUIsQ0FBQztBQUMzQyxlQUFLLFVBQVUsSUFBSSxJQUFJYyxnQkFBZSxDQUFDO0FBQ3ZDLGVBQUssVUFBVSxJQUFJLElBQUlDLGdCQUFlLENBQUM7QUFDdkMsZUFBSyxVQUFVLElBQUksSUFBSUMsaUJBQWdCLENBQUM7QUFDeEMsZUFBSyxVQUFVLElBQUksSUFBSSxjQUFjLENBQUM7QUFDdEMsZUFBSyxVQUFVLElBQUksSUFBSUcsZUFBYyxDQUFDO0FBQ3RDLGVBQUssVUFBVSxJQUFJLElBQUlDLGNBQWEsQ0FBQztBQUNyQyxlQUFLLFVBQVUsSUFBSSxJQUFJLGFBQWEsQ0FBQztBQUNyQyxlQUFLLFVBQVUsSUFBSSxJQUFJLGVBQWUsQ0FBQztBQUN2QyxlQUFLLFVBQVUsSUFBSSxJQUFJLGVBQWUsQ0FBQztBQUN2QyxlQUFLLFVBQVUsSUFBSSxJQUFJLGVBQWUsQ0FBQztBQUN2QyxlQUFLLFVBQVUsSUFBSSxJQUFJTyxnQkFBZSxDQUFDO0FBQ3ZDLGVBQUssVUFBVSxJQUFJLElBQUlDLGNBQWEsQ0FBQztBQUNyQyxlQUFLLFVBQVUsSUFBSSxJQUFJQyxjQUFhLENBQUM7QUFDckMsZ0JBQU0sb0JBQW9CUyxNQUFLLFVBQVUsS0FBYSxnQkFBTyxPQUFPLFFBQVFBLFFBQU8sU0FBUyxTQUFTQSxJQUFHLENBQUM7QUFDekcsY0FBSSxvQkFBb0IsU0FBUyxrQkFBa0IsRUFBRSxLQUFLLElBQUk7QUFDMUQsaUJBQUssVUFBVSxJQUFJLElBQUlSLGtCQUFpQixDQUFDO0FBQ3pDLGlCQUFLLFVBQVUsSUFBSSxJQUFJQyxrQkFBaUIsQ0FBQztBQUFBLFVBQzdDO0FBQ0EsZ0JBQU0sU0FBUyxjQUFBL0IsUUFBTyxVQUFVO0FBQ2hDLGNBQUksT0FBTyxTQUFTLFVBQVUsR0FBRztBQUM3QixpQkFBSyxVQUFVLElBQUksSUFBSSxnQkFBZ0IsQ0FBQztBQUFBLFVBQzVDO0FBQ0EsY0FBSSxPQUFPLFNBQVMsVUFBVSxHQUFHO0FBQzdCLGlCQUFLLFVBQVUsSUFBSSxJQUFJLGdCQUFnQixDQUFDO0FBQUEsVUFDNUM7QUFDQSxjQUFJLE9BQU8sU0FBUyxVQUFVLEdBQUc7QUFDN0IsaUJBQUssVUFBVSxJQUFJLElBQUksZ0JBQWdCLENBQUM7QUFBQSxVQUM1QztBQUNBLGNBQUksb0JBQW9CLFNBQVMsa0JBQWtCLEVBQUUsS0FBSyxJQUFJO0FBQzFELGlCQUFLLFVBQVUsSUFBSSxJQUFJdUIsZUFBYyxDQUFDO0FBQ3RDLGlCQUFLLFVBQVUsSUFBSSxJQUFJQyxnQkFBZSxDQUFDO0FBQ3ZDLGlCQUFLLFVBQVUsSUFBSSxJQUFJQyxpQkFBZ0IsQ0FBQztBQUN4QyxpQkFBSyxVQUFVLElBQUksSUFBSUMsZ0JBQWUsQ0FBQztBQUFBLFVBQzNDO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFFQSxNQUFNN0IsVUFBTixjQUEwQixPQUFPO0FBQUEsUUFDN0IsY0FBYztBQUNWLGdCQUFNLEdBQUcsU0FBUztBQUNsQixlQUFLLFNBQVMsSUFBSW1DLGNBQWE7QUFBQSxRQUNuQztBQUFBLFFBQ0EsZ0JBQWdCLE9BQU87QUFDbkIsY0FBSSxDQUFDLFlBQVksT0FBTyxLQUFLLEdBQUc7QUFDNUIsa0JBQU0sSUFBSSxVQUFVLCtGQUErRjtBQUFBLFVBQ3ZIO0FBQ0EsZ0JBQU0sU0FBUyxjQUFBbEMsT0FBUyxLQUFLLE1BQU0sUUFBUSxNQUFNLFlBQVksTUFBTSxVQUFVO0FBQzdFLHdCQUFBRSxRQUFPLGVBQWUsTUFBTTtBQUM1QixpQkFBTztBQUFBLFFBQ1g7QUFBQSxNQUNKO0FBQUE7QUFBQTs7O0FDdjlFQSxNQXNCTSxnQkFRQSxxQkFNQTtBQXBDTjtBQUFBO0FBc0JBLE1BQU0saUJBQWlCLE9BQU8sSUFBSSwyQkFBMkI7QUFRN0QsTUFBTSxzQkFBc0IsT0FBTyxJQUFJLHdCQUF3QjtBQU0vRCxNQUFNLGlCQUFpQixPQUFPLElBQUksMkJBQTJCO0FBQUE7QUFBQTs7O0FDcEM3RCxNQUFXLEtBQ0EsUUFDQSxPQUNBLE1BQ0EsTUFDQSxnQkFDQSxPQUNBLEtBQ0EsaUJBQ0EsVUFDQSxRQUNBLFdBQ0EscUJBR0EsWUFJQSxZQUNBLE1BQ0EsV0FFQSxZQUNBLE1BQ0EsV0FFQSxhQUNBLE9BQ0EsWUFDQTtBQTlCWCxNQUFBdUMsY0FBQTtBQUFBO0FBQU8sTUFBSSxNQUFNO0FBQ1YsTUFBSSxTQUFTO0FBQ2IsTUFBSSxRQUFRO0FBQ1osTUFBSSxPQUFPO0FBQ1gsTUFBSSxPQUFPO0FBQ1gsTUFBSSxpQkFBaUIsQ0FBQyxLQUFLLFFBQVEsT0FBTyxJQUFJO0FBQzlDLE1BQUksUUFBUTtBQUNaLE1BQUksTUFBTTtBQUNWLE1BQUksa0JBQWtCO0FBQ3RCLE1BQUksV0FBVztBQUNmLE1BQUksU0FBUztBQUNiLE1BQUksWUFBWTtBQUNoQixNQUFJLHNCQUFtQywrQkFBZSxPQUFPLFNBQVUsS0FBSyxXQUFXO0FBQzVGLGVBQU8sSUFBSSxPQUFPLENBQUMsWUFBWSxNQUFNLE9BQU8sWUFBWSxNQUFNLEdBQUcsQ0FBQztBQUFBLE1BQ3BFLEdBQUcsQ0FBQyxDQUFDO0FBQ0UsTUFBSSxhQUEwQixpQkFBQyxFQUFFLE9BQU8sZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxTQUFVLEtBQUssV0FBVztBQUN0RyxlQUFPLElBQUksT0FBTyxDQUFDLFdBQVcsWUFBWSxNQUFNLE9BQU8sWUFBWSxNQUFNLEdBQUcsQ0FBQztBQUFBLE1BQy9FLEdBQUcsQ0FBQyxDQUFDO0FBRUUsTUFBSSxhQUFhO0FBQ2pCLE1BQUksT0FBTztBQUNYLE1BQUksWUFBWTtBQUVoQixNQUFJLGFBQWE7QUFDakIsTUFBSSxPQUFPO0FBQ1gsTUFBSSxZQUFZO0FBRWhCLE1BQUksY0FBYztBQUNsQixNQUFJLFFBQVE7QUFDWixNQUFJLGFBQWE7QUFDakIsTUFBSSxpQkFBaUIsQ0FBQyxZQUFZLE1BQU0sV0FBVyxZQUFZLE1BQU0sV0FBVyxhQUFhLE9BQU8sVUFBVTtBQUFBO0FBQUE7OztBQzlCdEcsV0FBUixZQUE2QixTQUFTO0FBQzNDLFdBQU8sV0FBVyxRQUFRLFlBQVksSUFBSSxZQUFZLElBQUk7QUFBQSxFQUM1RDtBQUZBO0FBQUE7QUFBQTtBQUFBOzs7QUNBZSxXQUFSLFVBQTJCLE1BQU07QUFDdEMsUUFBSSxRQUFRLE1BQU07QUFDaEIsYUFBTztBQUFBLElBQ1Q7QUFFQSxRQUFJLEtBQUssU0FBUyxNQUFNLG1CQUFtQjtBQUN6QyxVQUFJLGdCQUFnQixLQUFLO0FBQ3pCLGFBQU8sZ0JBQWdCLGNBQWMsZUFBZSxTQUFTO0FBQUEsSUFDL0Q7QUFFQSxXQUFPO0FBQUEsRUFDVDtBQVhBO0FBQUE7QUFBQTtBQUFBOzs7QUNFQSxXQUFTLFVBQVUsTUFBTTtBQUN2QixRQUFJLGFBQWEsVUFBVSxJQUFJLEVBQUU7QUFDakMsV0FBTyxnQkFBZ0IsY0FBYyxnQkFBZ0I7QUFBQSxFQUN2RDtBQUVBLFdBQVMsY0FBYyxNQUFNO0FBQzNCLFFBQUksYUFBYSxVQUFVLElBQUksRUFBRTtBQUNqQyxXQUFPLGdCQUFnQixjQUFjLGdCQUFnQjtBQUFBLEVBQ3ZEO0FBRUEsV0FBUyxhQUFhLE1BQU07QUFFMUIsUUFBSSxPQUFPLGVBQWUsYUFBYTtBQUNyQyxhQUFPO0FBQUEsSUFDVDtBQUVBLFFBQUksYUFBYSxVQUFVLElBQUksRUFBRTtBQUNqQyxXQUFPLGdCQUFnQixjQUFjLGdCQUFnQjtBQUFBLEVBQ3ZEO0FBcEJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7OztBQ0lBLFdBQVMsWUFBWSxNQUFNO0FBQ3pCLFFBQUksUUFBUSxLQUFLO0FBQ2pCLFdBQU8sS0FBSyxNQUFNLFFBQVEsRUFBRSxRQUFRLFNBQVUsTUFBTTtBQUNsRCxVQUFJLFFBQVEsTUFBTSxPQUFPLElBQUksS0FBSyxDQUFDO0FBQ25DLFVBQUksYUFBYSxNQUFNLFdBQVcsSUFBSSxLQUFLLENBQUM7QUFDNUMsVUFBSSxVQUFVLE1BQU0sU0FBUyxJQUFJO0FBRWpDLFVBQUksQ0FBQyxjQUFjLE9BQU8sS0FBSyxDQUFDLFlBQVksT0FBTyxHQUFHO0FBQ3BEO0FBQUEsTUFDRjtBQUtBLGFBQU8sT0FBTyxRQUFRLE9BQU8sS0FBSztBQUNsQyxhQUFPLEtBQUssVUFBVSxFQUFFLFFBQVEsU0FBVUMsT0FBTTtBQUM5QyxZQUFJLFFBQVEsV0FBV0EsS0FBSTtBQUUzQixZQUFJLFVBQVUsT0FBTztBQUNuQixrQkFBUSxnQkFBZ0JBLEtBQUk7QUFBQSxRQUM5QixPQUFPO0FBQ0wsa0JBQVEsYUFBYUEsT0FBTSxVQUFVLE9BQU8sS0FBSyxLQUFLO0FBQUEsUUFDeEQ7QUFBQSxNQUNGLENBQUM7QUFBQSxJQUNILENBQUM7QUFBQSxFQUNIO0FBRUEsV0FBUyxPQUFPLE9BQU87QUFDckIsUUFBSSxRQUFRLE1BQU07QUFDbEIsUUFBSSxnQkFBZ0I7QUFBQSxNQUNsQixRQUFRO0FBQUEsUUFDTixVQUFVLE1BQU0sUUFBUTtBQUFBLFFBQ3hCLE1BQU07QUFBQSxRQUNOLEtBQUs7QUFBQSxRQUNMLFFBQVE7QUFBQSxNQUNWO0FBQUEsTUFDQSxPQUFPO0FBQUEsUUFDTCxVQUFVO0FBQUEsTUFDWjtBQUFBLE1BQ0EsV0FBVyxDQUFDO0FBQUEsSUFDZDtBQUNBLFdBQU8sT0FBTyxNQUFNLFNBQVMsT0FBTyxPQUFPLGNBQWMsTUFBTTtBQUMvRCxVQUFNLFNBQVM7QUFFZixRQUFJLE1BQU0sU0FBUyxPQUFPO0FBQ3hCLGFBQU8sT0FBTyxNQUFNLFNBQVMsTUFBTSxPQUFPLGNBQWMsS0FBSztBQUFBLElBQy9EO0FBRUEsV0FBTyxXQUFZO0FBQ2pCLGFBQU8sS0FBSyxNQUFNLFFBQVEsRUFBRSxRQUFRLFNBQVUsTUFBTTtBQUNsRCxZQUFJLFVBQVUsTUFBTSxTQUFTLElBQUk7QUFDakMsWUFBSSxhQUFhLE1BQU0sV0FBVyxJQUFJLEtBQUssQ0FBQztBQUM1QyxZQUFJLGtCQUFrQixPQUFPLEtBQUssTUFBTSxPQUFPLGVBQWUsSUFBSSxJQUFJLE1BQU0sT0FBTyxJQUFJLElBQUksY0FBYyxJQUFJLENBQUM7QUFFOUcsWUFBSSxRQUFRLGdCQUFnQixPQUFPLFNBQVVDLFFBQU8sVUFBVTtBQUM1RCxVQUFBQSxPQUFNLFFBQVEsSUFBSTtBQUNsQixpQkFBT0E7QUFBQSxRQUNULEdBQUcsQ0FBQyxDQUFDO0FBRUwsWUFBSSxDQUFDLGNBQWMsT0FBTyxLQUFLLENBQUMsWUFBWSxPQUFPLEdBQUc7QUFDcEQ7QUFBQSxRQUNGO0FBRUEsZUFBTyxPQUFPLFFBQVEsT0FBTyxLQUFLO0FBQ2xDLGVBQU8sS0FBSyxVQUFVLEVBQUUsUUFBUSxTQUFVLFdBQVc7QUFDbkQsa0JBQVEsZ0JBQWdCLFNBQVM7QUFBQSxRQUNuQyxDQUFDO0FBQUEsTUFDSCxDQUFDO0FBQUEsSUFDSDtBQUFBLEVBQ0Y7QUF6RUEsTUE0RU87QUE1RVA7QUFBQTtBQUFBO0FBQ0E7QUEyRUEsTUFBTyxzQkFBUTtBQUFBLFFBQ2IsTUFBTTtBQUFBLFFBQ04sU0FBUztBQUFBLFFBQ1QsT0FBTztBQUFBLFFBQ1AsSUFBSTtBQUFBLFFBQ0o7QUFBQSxRQUNBLFVBQVUsQ0FBQyxlQUFlO0FBQUEsTUFDNUI7QUFBQTtBQUFBOzs7QUNsRmUsV0FBUixpQkFBa0MsV0FBVztBQUNsRCxXQUFPLFVBQVUsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUFBLEVBQy9CO0FBSEE7QUFBQTtBQUFBO0FBQUE7OztBQ0FBLE1BQVcsS0FDQSxLQUNBO0FBRlg7QUFBQTtBQUFPLE1BQUksTUFBTSxLQUFLO0FBQ2YsTUFBSSxNQUFNLEtBQUs7QUFDZixNQUFJLFFBQVEsS0FBSztBQUFBO0FBQUE7OztBQ0ZULFdBQVIsY0FBK0I7QUFDcEMsUUFBSSxTQUFTLFVBQVU7QUFFdkIsUUFBSSxVQUFVLFFBQVEsT0FBTyxVQUFVLE1BQU0sUUFBUSxPQUFPLE1BQU0sR0FBRztBQUNuRSxhQUFPLE9BQU8sT0FBTyxJQUFJLFNBQVUsTUFBTTtBQUN2QyxlQUFPLEtBQUssUUFBUSxNQUFNLEtBQUs7QUFBQSxNQUNqQyxDQUFDLEVBQUUsS0FBSyxHQUFHO0FBQUEsSUFDYjtBQUVBLFdBQU8sVUFBVTtBQUFBLEVBQ25CO0FBVkE7QUFBQTtBQUFBO0FBQUE7OztBQ0NlLFdBQVIsbUJBQW9DO0FBQ3pDLFdBQU8sQ0FBQyxpQ0FBaUMsS0FBSyxZQUFZLENBQUM7QUFBQSxFQUM3RDtBQUhBO0FBQUE7QUFBQTtBQUFBO0FBQUE7OztBQ0llLFdBQVIsc0JBQXVDLFNBQVMsY0FBYyxpQkFBaUI7QUFDcEYsUUFBSSxpQkFBaUIsUUFBUTtBQUMzQixxQkFBZTtBQUFBLElBQ2pCO0FBRUEsUUFBSSxvQkFBb0IsUUFBUTtBQUM5Qix3QkFBa0I7QUFBQSxJQUNwQjtBQUVBLFFBQUksYUFBYSxRQUFRLHNCQUFzQjtBQUMvQyxRQUFJLFNBQVM7QUFDYixRQUFJLFNBQVM7QUFFYixRQUFJLGdCQUFnQixjQUFjLE9BQU8sR0FBRztBQUMxQyxlQUFTLFFBQVEsY0FBYyxJQUFJLE1BQU0sV0FBVyxLQUFLLElBQUksUUFBUSxlQUFlLElBQUk7QUFDeEYsZUFBUyxRQUFRLGVBQWUsSUFBSSxNQUFNLFdBQVcsTUFBTSxJQUFJLFFBQVEsZ0JBQWdCLElBQUk7QUFBQSxJQUM3RjtBQUVBLFFBQUksT0FBTyxVQUFVLE9BQU8sSUFBSSxVQUFVLE9BQU8sSUFBSSxRQUNqRCxpQkFBaUIsS0FBSztBQUUxQixRQUFJLG1CQUFtQixDQUFDLGlCQUFpQixLQUFLO0FBQzlDLFFBQUksS0FBSyxXQUFXLFFBQVEsb0JBQW9CLGlCQUFpQixlQUFlLGFBQWEsTUFBTTtBQUNuRyxRQUFJLEtBQUssV0FBVyxPQUFPLG9CQUFvQixpQkFBaUIsZUFBZSxZQUFZLE1BQU07QUFDakcsUUFBSSxRQUFRLFdBQVcsUUFBUTtBQUMvQixRQUFJLFNBQVMsV0FBVyxTQUFTO0FBQ2pDLFdBQU87QUFBQSxNQUNMO0FBQUEsTUFDQTtBQUFBLE1BQ0EsS0FBSztBQUFBLE1BQ0wsT0FBTyxJQUFJO0FBQUEsTUFDWCxRQUFRLElBQUk7QUFBQSxNQUNaLE1BQU07QUFBQSxNQUNOO0FBQUEsTUFDQTtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBeENBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7OztBQ0FlLFdBQVIsY0FBK0IsU0FBUztBQUM3QyxRQUFJLGFBQWEsc0JBQXNCLE9BQU87QUFHOUMsUUFBSSxRQUFRLFFBQVE7QUFDcEIsUUFBSSxTQUFTLFFBQVE7QUFFckIsUUFBSSxLQUFLLElBQUksV0FBVyxRQUFRLEtBQUssS0FBSyxHQUFHO0FBQzNDLGNBQVEsV0FBVztBQUFBLElBQ3JCO0FBRUEsUUFBSSxLQUFLLElBQUksV0FBVyxTQUFTLE1BQU0sS0FBSyxHQUFHO0FBQzdDLGVBQVMsV0FBVztBQUFBLElBQ3RCO0FBRUEsV0FBTztBQUFBLE1BQ0wsR0FBRyxRQUFRO0FBQUEsTUFDWCxHQUFHLFFBQVE7QUFBQSxNQUNYO0FBQUEsTUFDQTtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBeEJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7OztBQ0NlLFdBQVIsU0FBMEIsUUFBUSxPQUFPO0FBQzlDLFFBQUksV0FBVyxNQUFNLGVBQWUsTUFBTSxZQUFZO0FBRXRELFFBQUksT0FBTyxTQUFTLEtBQUssR0FBRztBQUMxQixhQUFPO0FBQUEsSUFDVCxXQUNTLFlBQVksYUFBYSxRQUFRLEdBQUc7QUFDekMsVUFBSSxPQUFPO0FBRVgsU0FBRztBQUNELFlBQUksUUFBUSxPQUFPLFdBQVcsSUFBSSxHQUFHO0FBQ25DLGlCQUFPO0FBQUEsUUFDVDtBQUdBLGVBQU8sS0FBSyxjQUFjLEtBQUs7QUFBQSxNQUNqQyxTQUFTO0FBQUEsSUFDWDtBQUdGLFdBQU87QUFBQSxFQUNUO0FBdEJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7OztBQ0NlLFdBQVJDLGtCQUFrQyxTQUFTO0FBQ2hELFdBQU8sVUFBVSxPQUFPLEVBQUUsaUJBQWlCLE9BQU87QUFBQSxFQUNwRDtBQUhBO0FBQUE7QUFBQTtBQUFBO0FBQUE7OztBQ0NlLFdBQVIsZUFBZ0MsU0FBUztBQUM5QyxXQUFPLENBQUMsU0FBUyxNQUFNLElBQUksRUFBRSxRQUFRLFlBQVksT0FBTyxDQUFDLEtBQUs7QUFBQSxFQUNoRTtBQUhBO0FBQUE7QUFBQTtBQUFBO0FBQUE7OztBQ0NlLFdBQVIsbUJBQW9DLFNBQVM7QUFFbEQsYUFBUyxVQUFVLE9BQU8sSUFBSSxRQUFRO0FBQUE7QUFBQSxNQUN0QyxRQUFRO0FBQUEsVUFBYSxPQUFPLFVBQVU7QUFBQSxFQUN4QztBQUxBO0FBQUE7QUFBQTtBQUFBO0FBQUE7OztBQ0dlLFdBQVIsY0FBK0IsU0FBUztBQUM3QyxRQUFJLFlBQVksT0FBTyxNQUFNLFFBQVE7QUFDbkMsYUFBTztBQUFBLElBQ1Q7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BR0UsUUFBUTtBQUFBLE1BQ1IsUUFBUTtBQUFBLE9BQ1IsYUFBYSxPQUFPLElBQUksUUFBUSxPQUFPO0FBQUE7QUFBQSxNQUV2QyxtQkFBbUIsT0FBTztBQUFBO0FBQUEsRUFHOUI7QUFsQkE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7OztBQ01BLFdBQVMsb0JBQW9CLFNBQVM7QUFDcEMsUUFBSSxDQUFDLGNBQWMsT0FBTztBQUFBLElBQzFCQyxrQkFBaUIsT0FBTyxFQUFFLGFBQWEsU0FBUztBQUM5QyxhQUFPO0FBQUEsSUFDVDtBQUVBLFdBQU8sUUFBUTtBQUFBLEVBQ2pCO0FBSUEsV0FBUyxtQkFBbUIsU0FBUztBQUNuQyxRQUFJLFlBQVksV0FBVyxLQUFLLFlBQVksQ0FBQztBQUM3QyxRQUFJLE9BQU8sV0FBVyxLQUFLLFlBQVksQ0FBQztBQUV4QyxRQUFJLFFBQVEsY0FBYyxPQUFPLEdBQUc7QUFFbEMsVUFBSSxhQUFhQSxrQkFBaUIsT0FBTztBQUV6QyxVQUFJLFdBQVcsYUFBYSxTQUFTO0FBQ25DLGVBQU87QUFBQSxNQUNUO0FBQUEsSUFDRjtBQUVBLFFBQUksY0FBYyxjQUFjLE9BQU87QUFFdkMsUUFBSSxhQUFhLFdBQVcsR0FBRztBQUM3QixvQkFBYyxZQUFZO0FBQUEsSUFDNUI7QUFFQSxXQUFPLGNBQWMsV0FBVyxLQUFLLENBQUMsUUFBUSxNQUFNLEVBQUUsUUFBUSxZQUFZLFdBQVcsQ0FBQyxJQUFJLEdBQUc7QUFDM0YsVUFBSSxNQUFNQSxrQkFBaUIsV0FBVztBQUl0QyxVQUFJLElBQUksY0FBYyxVQUFVLElBQUksZ0JBQWdCLFVBQVUsSUFBSSxZQUFZLFdBQVcsQ0FBQyxhQUFhLGFBQWEsRUFBRSxRQUFRLElBQUksVUFBVSxNQUFNLE1BQU0sYUFBYSxJQUFJLGVBQWUsWUFBWSxhQUFhLElBQUksVUFBVSxJQUFJLFdBQVcsUUFBUTtBQUNwUCxlQUFPO0FBQUEsTUFDVCxPQUFPO0FBQ0wsc0JBQWMsWUFBWTtBQUFBLE1BQzVCO0FBQUEsSUFDRjtBQUVBLFdBQU87QUFBQSxFQUNUO0FBSWUsV0FBUixnQkFBaUMsU0FBUztBQUMvQyxRQUFJQyxVQUFTLFVBQVUsT0FBTztBQUM5QixRQUFJLGVBQWUsb0JBQW9CLE9BQU87QUFFOUMsV0FBTyxnQkFBZ0IsZUFBZSxZQUFZLEtBQUtELGtCQUFpQixZQUFZLEVBQUUsYUFBYSxVQUFVO0FBQzNHLHFCQUFlLG9CQUFvQixZQUFZO0FBQUEsSUFDakQ7QUFFQSxRQUFJLGlCQUFpQixZQUFZLFlBQVksTUFBTSxVQUFVLFlBQVksWUFBWSxNQUFNLFVBQVVBLGtCQUFpQixZQUFZLEVBQUUsYUFBYSxXQUFXO0FBQzFKLGFBQU9DO0FBQUEsSUFDVDtBQUVBLFdBQU8sZ0JBQWdCLG1CQUFtQixPQUFPLEtBQUtBO0FBQUEsRUFDeEQ7QUFwRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTs7O0FDTmUsV0FBUix5QkFBMEMsV0FBVztBQUMxRCxXQUFPLENBQUMsT0FBTyxRQUFRLEVBQUUsUUFBUSxTQUFTLEtBQUssSUFBSSxNQUFNO0FBQUEsRUFDM0Q7QUFGQTtBQUFBO0FBQUE7QUFBQTs7O0FDQ08sV0FBUyxPQUFPQyxNQUFLLE9BQU9DLE1BQUs7QUFDdEMsV0FBTyxJQUFRRCxNQUFLLElBQVEsT0FBT0MsSUFBRyxDQUFDO0FBQUEsRUFDekM7QUFDTyxXQUFTLGVBQWVELE1BQUssT0FBT0MsTUFBSztBQUM5QyxRQUFJLElBQUksT0FBT0QsTUFBSyxPQUFPQyxJQUFHO0FBQzlCLFdBQU8sSUFBSUEsT0FBTUEsT0FBTTtBQUFBLEVBQ3pCO0FBUEE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7O0FDQWUsV0FBUixxQkFBc0M7QUFDM0MsV0FBTztBQUFBLE1BQ0wsS0FBSztBQUFBLE1BQ0wsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsTUFBTTtBQUFBLElBQ1I7QUFBQSxFQUNGO0FBUEE7QUFBQTtBQUFBO0FBQUE7OztBQ0NlLFdBQVIsbUJBQW9DLGVBQWU7QUFDeEQsV0FBTyxPQUFPLE9BQU8sQ0FBQyxHQUFHLG1CQUFtQixHQUFHLGFBQWE7QUFBQSxFQUM5RDtBQUhBO0FBQUE7QUFBQTtBQUFBO0FBQUE7OztBQ0FlLFdBQVIsZ0JBQWlDLE9BQU8sTUFBTTtBQUNuRCxXQUFPLEtBQUssT0FBTyxTQUFVLFNBQVMsS0FBSztBQUN6QyxjQUFRLEdBQUcsSUFBSTtBQUNmLGFBQU87QUFBQSxJQUNULEdBQUcsQ0FBQyxDQUFDO0FBQUEsRUFDUDtBQUxBO0FBQUE7QUFBQTtBQUFBOzs7QUNpQkEsV0FBUyxNQUFNLE1BQU07QUFDbkIsUUFBSTtBQUVKLFFBQUksUUFBUSxLQUFLLE9BQ2IsT0FBTyxLQUFLLE1BQ1pDLFdBQVUsS0FBSztBQUNuQixRQUFJLGVBQWUsTUFBTSxTQUFTO0FBQ2xDLFFBQUlDLGlCQUFnQixNQUFNLGNBQWM7QUFDeEMsUUFBSSxnQkFBZ0IsaUJBQWlCLE1BQU0sU0FBUztBQUNwRCxRQUFJLE9BQU8seUJBQXlCLGFBQWE7QUFDakQsUUFBSSxhQUFhLENBQUMsTUFBTSxLQUFLLEVBQUUsUUFBUSxhQUFhLEtBQUs7QUFDekQsUUFBSSxNQUFNLGFBQWEsV0FBVztBQUVsQyxRQUFJLENBQUMsZ0JBQWdCLENBQUNBLGdCQUFlO0FBQ25DO0FBQUEsSUFDRjtBQUVBLFFBQUksZ0JBQWdCLGdCQUFnQkQsU0FBUSxTQUFTLEtBQUs7QUFDMUQsUUFBSSxZQUFZLGNBQWMsWUFBWTtBQUMxQyxRQUFJLFVBQVUsU0FBUyxNQUFNLE1BQU07QUFDbkMsUUFBSSxVQUFVLFNBQVMsTUFBTSxTQUFTO0FBQ3RDLFFBQUksVUFBVSxNQUFNLE1BQU0sVUFBVSxHQUFHLElBQUksTUFBTSxNQUFNLFVBQVUsSUFBSSxJQUFJQyxlQUFjLElBQUksSUFBSSxNQUFNLE1BQU0sT0FBTyxHQUFHO0FBQ3JILFFBQUksWUFBWUEsZUFBYyxJQUFJLElBQUksTUFBTSxNQUFNLFVBQVUsSUFBSTtBQUNoRSxRQUFJLG9CQUFvQixnQkFBZ0IsWUFBWTtBQUNwRCxRQUFJLGFBQWEsb0JBQW9CLFNBQVMsTUFBTSxrQkFBa0IsZ0JBQWdCLElBQUksa0JBQWtCLGVBQWUsSUFBSTtBQUMvSCxRQUFJLG9CQUFvQixVQUFVLElBQUksWUFBWTtBQUdsRCxRQUFJQyxPQUFNLGNBQWMsT0FBTztBQUMvQixRQUFJQyxPQUFNLGFBQWEsVUFBVSxHQUFHLElBQUksY0FBYyxPQUFPO0FBQzdELFFBQUksU0FBUyxhQUFhLElBQUksVUFBVSxHQUFHLElBQUksSUFBSTtBQUNuRCxRQUFJQyxVQUFTLE9BQU9GLE1BQUssUUFBUUMsSUFBRztBQUVwQyxRQUFJLFdBQVc7QUFDZixVQUFNLGNBQWMsSUFBSSxLQUFLLHdCQUF3QixDQUFDLEdBQUcsc0JBQXNCLFFBQVEsSUFBSUMsU0FBUSxzQkFBc0IsZUFBZUEsVUFBUyxRQUFRO0FBQUEsRUFDM0o7QUFFQSxXQUFTQyxRQUFPLE9BQU87QUFDckIsUUFBSSxRQUFRLE1BQU0sT0FDZEwsV0FBVSxNQUFNO0FBQ3BCLFFBQUksbUJBQW1CQSxTQUFRLFNBQzNCLGVBQWUscUJBQXFCLFNBQVMsd0JBQXdCO0FBRXpFLFFBQUksZ0JBQWdCLE1BQU07QUFDeEI7QUFBQSxJQUNGO0FBR0EsUUFBSSxPQUFPLGlCQUFpQixVQUFVO0FBQ3BDLHFCQUFlLE1BQU0sU0FBUyxPQUFPLGNBQWMsWUFBWTtBQUUvRCxVQUFJLENBQUMsY0FBYztBQUNqQjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBRUEsUUFBSSxDQUFDLFNBQVMsTUFBTSxTQUFTLFFBQVEsWUFBWSxHQUFHO0FBQ2xEO0FBQUEsSUFDRjtBQUVBLFVBQU0sU0FBUyxRQUFRO0FBQUEsRUFDekI7QUE5RUEsTUFVSSxpQkF1RUc7QUFqRlA7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFBTTtBQUVBLE1BQUksa0JBQWtCLFNBQVNDLGlCQUFnQixTQUFTLE9BQU87QUFDN0Qsa0JBQVUsT0FBTyxZQUFZLGFBQWEsUUFBUSxPQUFPLE9BQU8sQ0FBQyxHQUFHLE1BQU0sT0FBTztBQUFBLFVBQy9FLFdBQVcsTUFBTTtBQUFBLFFBQ25CLENBQUMsQ0FBQyxJQUFJO0FBQ04sZUFBTyxtQkFBbUIsT0FBTyxZQUFZLFdBQVcsVUFBVSxnQkFBZ0IsU0FBUyxjQUFjLENBQUM7QUFBQSxNQUM1RztBQWtFQSxNQUFPLGdCQUFRO0FBQUEsUUFDYixNQUFNO0FBQUEsUUFDTixTQUFTO0FBQUEsUUFDVCxPQUFPO0FBQUEsUUFDUCxJQUFJO0FBQUEsUUFDSixRQUFRRjtBQUFBLFFBQ1IsVUFBVSxDQUFDLGVBQWU7QUFBQSxRQUMxQixrQkFBa0IsQ0FBQyxpQkFBaUI7QUFBQSxNQUN0QztBQUFBO0FBQUE7OztBQ3pGZSxXQUFSLGFBQThCLFdBQVc7QUFDOUMsV0FBTyxVQUFVLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFBQSxFQUMvQjtBQUZBO0FBQUE7QUFBQTtBQUFBOzs7QUNrQkEsV0FBUyxrQkFBa0IsTUFBTSxLQUFLO0FBQ3BDLFFBQUksSUFBSSxLQUFLLEdBQ1QsSUFBSSxLQUFLO0FBQ2IsUUFBSSxNQUFNLElBQUksb0JBQW9CO0FBQ2xDLFdBQU87QUFBQSxNQUNMLEdBQUcsTUFBTSxJQUFJLEdBQUcsSUFBSSxPQUFPO0FBQUEsTUFDM0IsR0FBRyxNQUFNLElBQUksR0FBRyxJQUFJLE9BQU87QUFBQSxJQUM3QjtBQUFBLEVBQ0Y7QUFFTyxXQUFTLFlBQVksT0FBTztBQUNqQyxRQUFJO0FBRUosUUFBSUcsVUFBUyxNQUFNLFFBQ2YsYUFBYSxNQUFNLFlBQ25CLFlBQVksTUFBTSxXQUNsQixZQUFZLE1BQU0sV0FDbEIsVUFBVSxNQUFNLFNBQ2hCLFdBQVcsTUFBTSxVQUNqQixrQkFBa0IsTUFBTSxpQkFDeEIsV0FBVyxNQUFNLFVBQ2pCLGVBQWUsTUFBTSxjQUNyQixVQUFVLE1BQU07QUFDcEIsUUFBSSxhQUFhLFFBQVEsR0FDckIsSUFBSSxlQUFlLFNBQVMsSUFBSSxZQUNoQyxhQUFhLFFBQVEsR0FDckIsSUFBSSxlQUFlLFNBQVMsSUFBSTtBQUVwQyxRQUFJLFFBQVEsT0FBTyxpQkFBaUIsYUFBYSxhQUFhO0FBQUEsTUFDNUQ7QUFBQSxNQUNBO0FBQUEsSUFDRixDQUFDLElBQUk7QUFBQSxNQUNIO0FBQUEsTUFDQTtBQUFBLElBQ0Y7QUFFQSxRQUFJLE1BQU07QUFDVixRQUFJLE1BQU07QUFDVixRQUFJLE9BQU8sUUFBUSxlQUFlLEdBQUc7QUFDckMsUUFBSSxPQUFPLFFBQVEsZUFBZSxHQUFHO0FBQ3JDLFFBQUksUUFBUTtBQUNaLFFBQUksUUFBUTtBQUNaLFFBQUksTUFBTTtBQUVWLFFBQUksVUFBVTtBQUNaLFVBQUksZUFBZSxnQkFBZ0JBLE9BQU07QUFDekMsVUFBSSxhQUFhO0FBQ2pCLFVBQUksWUFBWTtBQUVoQixVQUFJLGlCQUFpQixVQUFVQSxPQUFNLEdBQUc7QUFDdEMsdUJBQWUsbUJBQW1CQSxPQUFNO0FBRXhDLFlBQUlDLGtCQUFpQixZQUFZLEVBQUUsYUFBYSxZQUFZLGFBQWEsWUFBWTtBQUNuRix1QkFBYTtBQUNiLHNCQUFZO0FBQUEsUUFDZDtBQUFBLE1BQ0Y7QUFHQSxxQkFBZTtBQUVmLFVBQUksY0FBYyxRQUFRLGNBQWMsUUFBUSxjQUFjLFVBQVUsY0FBYyxLQUFLO0FBQ3pGLGdCQUFRO0FBQ1IsWUFBSSxVQUFVLFdBQVcsaUJBQWlCLE9BQU8sSUFBSSxpQkFBaUIsSUFBSSxlQUFlO0FBQUE7QUFBQSxVQUN6RixhQUFhLFVBQVU7QUFBQTtBQUN2QixhQUFLLFVBQVUsV0FBVztBQUMxQixhQUFLLGtCQUFrQixJQUFJO0FBQUEsTUFDN0I7QUFFQSxVQUFJLGNBQWMsU0FBUyxjQUFjLE9BQU8sY0FBYyxXQUFXLGNBQWMsS0FBSztBQUMxRixnQkFBUTtBQUNSLFlBQUksVUFBVSxXQUFXLGlCQUFpQixPQUFPLElBQUksaUJBQWlCLElBQUksZUFBZTtBQUFBO0FBQUEsVUFDekYsYUFBYSxTQUFTO0FBQUE7QUFDdEIsYUFBSyxVQUFVLFdBQVc7QUFDMUIsYUFBSyxrQkFBa0IsSUFBSTtBQUFBLE1BQzdCO0FBQUEsSUFDRjtBQUVBLFFBQUksZUFBZSxPQUFPLE9BQU87QUFBQSxNQUMvQjtBQUFBLElBQ0YsR0FBRyxZQUFZLFVBQVU7QUFFekIsUUFBSSxRQUFRLGlCQUFpQixPQUFPLGtCQUFrQjtBQUFBLE1BQ3BEO0FBQUEsTUFDQTtBQUFBLElBQ0YsR0FBRyxVQUFVRCxPQUFNLENBQUMsSUFBSTtBQUFBLE1BQ3RCO0FBQUEsTUFDQTtBQUFBLElBQ0Y7QUFFQSxRQUFJLE1BQU07QUFDVixRQUFJLE1BQU07QUFFVixRQUFJLGlCQUFpQjtBQUNuQixVQUFJO0FBRUosYUFBTyxPQUFPLE9BQU8sQ0FBQyxHQUFHLGVBQWUsaUJBQWlCLENBQUMsR0FBRyxlQUFlLEtBQUssSUFBSSxPQUFPLE1BQU0sSUFBSSxlQUFlLEtBQUssSUFBSSxPQUFPLE1BQU0sSUFBSSxlQUFlLGFBQWEsSUFBSSxvQkFBb0IsTUFBTSxJQUFJLGVBQWUsSUFBSSxTQUFTLElBQUksUUFBUSxpQkFBaUIsSUFBSSxTQUFTLElBQUksVUFBVSxlQUFlO0FBQUEsSUFDbFQ7QUFFQSxXQUFPLE9BQU8sT0FBTyxDQUFDLEdBQUcsZUFBZSxrQkFBa0IsQ0FBQyxHQUFHLGdCQUFnQixLQUFLLElBQUksT0FBTyxJQUFJLE9BQU8sSUFBSSxnQkFBZ0IsS0FBSyxJQUFJLE9BQU8sSUFBSSxPQUFPLElBQUksZ0JBQWdCLFlBQVksSUFBSSxnQkFBZ0I7QUFBQSxFQUM5TTtBQUVBLFdBQVMsY0FBYyxPQUFPO0FBQzVCLFFBQUksUUFBUSxNQUFNLE9BQ2RFLFdBQVUsTUFBTTtBQUNwQixRQUFJLHdCQUF3QkEsU0FBUSxpQkFDaEMsa0JBQWtCLDBCQUEwQixTQUFTLE9BQU8sdUJBQzVELG9CQUFvQkEsU0FBUSxVQUM1QixXQUFXLHNCQUFzQixTQUFTLE9BQU8sbUJBQ2pELHdCQUF3QkEsU0FBUSxjQUNoQyxlQUFlLDBCQUEwQixTQUFTLE9BQU87QUFDN0QsUUFBSSxlQUFlO0FBQUEsTUFDakIsV0FBVyxpQkFBaUIsTUFBTSxTQUFTO0FBQUEsTUFDM0MsV0FBVyxhQUFhLE1BQU0sU0FBUztBQUFBLE1BQ3ZDLFFBQVEsTUFBTSxTQUFTO0FBQUEsTUFDdkIsWUFBWSxNQUFNLE1BQU07QUFBQSxNQUN4QjtBQUFBLE1BQ0EsU0FBUyxNQUFNLFFBQVEsYUFBYTtBQUFBLElBQ3RDO0FBRUEsUUFBSSxNQUFNLGNBQWMsaUJBQWlCLE1BQU07QUFDN0MsWUFBTSxPQUFPLFNBQVMsT0FBTyxPQUFPLENBQUMsR0FBRyxNQUFNLE9BQU8sUUFBUSxZQUFZLE9BQU8sT0FBTyxDQUFDLEdBQUcsY0FBYztBQUFBLFFBQ3ZHLFNBQVMsTUFBTSxjQUFjO0FBQUEsUUFDN0IsVUFBVSxNQUFNLFFBQVE7QUFBQSxRQUN4QjtBQUFBLFFBQ0E7QUFBQSxNQUNGLENBQUMsQ0FBQyxDQUFDO0FBQUEsSUFDTDtBQUVBLFFBQUksTUFBTSxjQUFjLFNBQVMsTUFBTTtBQUNyQyxZQUFNLE9BQU8sUUFBUSxPQUFPLE9BQU8sQ0FBQyxHQUFHLE1BQU0sT0FBTyxPQUFPLFlBQVksT0FBTyxPQUFPLENBQUMsR0FBRyxjQUFjO0FBQUEsUUFDckcsU0FBUyxNQUFNLGNBQWM7QUFBQSxRQUM3QixVQUFVO0FBQUEsUUFDVixVQUFVO0FBQUEsUUFDVjtBQUFBLE1BQ0YsQ0FBQyxDQUFDLENBQUM7QUFBQSxJQUNMO0FBRUEsVUFBTSxXQUFXLFNBQVMsT0FBTyxPQUFPLENBQUMsR0FBRyxNQUFNLFdBQVcsUUFBUTtBQUFBLE1BQ25FLHlCQUF5QixNQUFNO0FBQUEsSUFDakMsQ0FBQztBQUFBLEVBQ0g7QUEvSkEsTUFTSSxZQXlKRztBQWxLUDtBQUFBO0FBQUEsTUFBQUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLE1BQUksYUFBYTtBQUFBLFFBQ2YsS0FBSztBQUFBLFFBQ0wsT0FBTztBQUFBLFFBQ1AsUUFBUTtBQUFBLFFBQ1IsTUFBTTtBQUFBLE1BQ1I7QUFvSkEsTUFBTyx3QkFBUTtBQUFBLFFBQ2IsTUFBTTtBQUFBLFFBQ04sU0FBUztBQUFBLFFBQ1QsT0FBTztBQUFBLFFBQ1AsSUFBSTtBQUFBLFFBQ0osTUFBTSxDQUFDO0FBQUEsTUFDVDtBQUFBO0FBQUE7OztBQ2xLQSxXQUFTQyxRQUFPLE1BQU07QUFDcEIsUUFBSSxRQUFRLEtBQUssT0FDYixXQUFXLEtBQUssVUFDaEJDLFdBQVUsS0FBSztBQUNuQixRQUFJLGtCQUFrQkEsU0FBUSxRQUMxQixTQUFTLG9CQUFvQixTQUFTLE9BQU8saUJBQzdDLGtCQUFrQkEsU0FBUSxRQUMxQixTQUFTLG9CQUFvQixTQUFTLE9BQU87QUFDakQsUUFBSUMsVUFBUyxVQUFVLE1BQU0sU0FBUyxNQUFNO0FBQzVDLFFBQUksZ0JBQWdCLENBQUMsRUFBRSxPQUFPLE1BQU0sY0FBYyxXQUFXLE1BQU0sY0FBYyxNQUFNO0FBRXZGLFFBQUksUUFBUTtBQUNWLG9CQUFjLFFBQVEsU0FBVSxjQUFjO0FBQzVDLHFCQUFhLGlCQUFpQixVQUFVLFNBQVMsUUFBUSxPQUFPO0FBQUEsTUFDbEUsQ0FBQztBQUFBLElBQ0g7QUFFQSxRQUFJLFFBQVE7QUFDVixNQUFBQSxRQUFPLGlCQUFpQixVQUFVLFNBQVMsUUFBUSxPQUFPO0FBQUEsSUFDNUQ7QUFFQSxXQUFPLFdBQVk7QUFDakIsVUFBSSxRQUFRO0FBQ1Ysc0JBQWMsUUFBUSxTQUFVLGNBQWM7QUFDNUMsdUJBQWEsb0JBQW9CLFVBQVUsU0FBUyxRQUFRLE9BQU87QUFBQSxRQUNyRSxDQUFDO0FBQUEsTUFDSDtBQUVBLFVBQUksUUFBUTtBQUNWLFFBQUFBLFFBQU8sb0JBQW9CLFVBQVUsU0FBUyxRQUFRLE9BQU87QUFBQSxNQUMvRDtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBdENBLE1BRUksU0F1Q0c7QUF6Q1A7QUFBQTtBQUFBO0FBRUEsTUFBSSxVQUFVO0FBQUEsUUFDWixTQUFTO0FBQUEsTUFDWDtBQXFDQSxNQUFPLHlCQUFRO0FBQUEsUUFDYixNQUFNO0FBQUEsUUFDTixTQUFTO0FBQUEsUUFDVCxPQUFPO0FBQUEsUUFDUCxJQUFJLFNBQVMsS0FBSztBQUFBLFFBQUM7QUFBQSxRQUNuQixRQUFRRjtBQUFBLFFBQ1IsTUFBTSxDQUFDO0FBQUEsTUFDVDtBQUFBO0FBQUE7OztBQzFDZSxXQUFSLHFCQUFzQyxXQUFXO0FBQ3RELFdBQU8sVUFBVSxRQUFRLDBCQUEwQixTQUFVLFNBQVM7QUFDcEUsYUFBTyxLQUFLLE9BQU87QUFBQSxJQUNyQixDQUFDO0FBQUEsRUFDSDtBQVZBLE1BQUk7QUFBSjtBQUFBO0FBQUEsTUFBSSxPQUFPO0FBQUEsUUFDVCxNQUFNO0FBQUEsUUFDTixPQUFPO0FBQUEsUUFDUCxRQUFRO0FBQUEsUUFDUixLQUFLO0FBQUEsTUFDUDtBQUFBO0FBQUE7OztBQ0RlLFdBQVIsOEJBQStDLFdBQVc7QUFDL0QsV0FBTyxVQUFVLFFBQVEsY0FBYyxTQUFVLFNBQVM7QUFDeEQsYUFBT0csTUFBSyxPQUFPO0FBQUEsSUFDckIsQ0FBQztBQUFBLEVBQ0g7QUFSQSxNQUFJQTtBQUFKO0FBQUE7QUFBQSxNQUFJQSxRQUFPO0FBQUEsUUFDVCxPQUFPO0FBQUEsUUFDUCxLQUFLO0FBQUEsTUFDUDtBQUFBO0FBQUE7OztBQ0ZlLFdBQVIsZ0JBQWlDLE1BQU07QUFDNUMsUUFBSSxNQUFNLFVBQVUsSUFBSTtBQUN4QixRQUFJLGFBQWEsSUFBSTtBQUNyQixRQUFJLFlBQVksSUFBSTtBQUNwQixXQUFPO0FBQUEsTUFDTDtBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQVRBO0FBQUE7QUFBQTtBQUFBO0FBQUE7OztBQ0dlLFdBQVIsb0JBQXFDLFNBQVM7QUFRbkQsV0FBTyxzQkFBc0IsbUJBQW1CLE9BQU8sQ0FBQyxFQUFFLE9BQU8sZ0JBQWdCLE9BQU8sRUFBRTtBQUFBLEVBQzVGO0FBWkE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7OztBQ0VlLFdBQVIsZ0JBQWlDLFNBQVMsVUFBVTtBQUN6RCxRQUFJLE1BQU0sVUFBVSxPQUFPO0FBQzNCLFFBQUksT0FBTyxtQkFBbUIsT0FBTztBQUNyQyxRQUFJLGlCQUFpQixJQUFJO0FBQ3pCLFFBQUksUUFBUSxLQUFLO0FBQ2pCLFFBQUksU0FBUyxLQUFLO0FBQ2xCLFFBQUksSUFBSTtBQUNSLFFBQUksSUFBSTtBQUVSLFFBQUksZ0JBQWdCO0FBQ2xCLGNBQVEsZUFBZTtBQUN2QixlQUFTLGVBQWU7QUFDeEIsVUFBSSxpQkFBaUIsaUJBQWlCO0FBRXRDLFVBQUksa0JBQWtCLENBQUMsa0JBQWtCLGFBQWEsU0FBUztBQUM3RCxZQUFJLGVBQWU7QUFDbkIsWUFBSSxlQUFlO0FBQUEsTUFDckI7QUFBQSxJQUNGO0FBRUEsV0FBTztBQUFBLE1BQ0w7QUFBQSxNQUNBO0FBQUEsTUFDQSxHQUFHLElBQUksb0JBQW9CLE9BQU87QUFBQSxNQUNsQztBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBOUJBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7OztBQ0llLFdBQVIsZ0JBQWlDLFNBQVM7QUFDL0MsUUFBSTtBQUVKLFFBQUksT0FBTyxtQkFBbUIsT0FBTztBQUNyQyxRQUFJLFlBQVksZ0JBQWdCLE9BQU87QUFDdkMsUUFBSSxRQUFRLHdCQUF3QixRQUFRLGtCQUFrQixPQUFPLFNBQVMsc0JBQXNCO0FBQ3BHLFFBQUksUUFBUSxJQUFJLEtBQUssYUFBYSxLQUFLLGFBQWEsT0FBTyxLQUFLLGNBQWMsR0FBRyxPQUFPLEtBQUssY0FBYyxDQUFDO0FBQzVHLFFBQUksU0FBUyxJQUFJLEtBQUssY0FBYyxLQUFLLGNBQWMsT0FBTyxLQUFLLGVBQWUsR0FBRyxPQUFPLEtBQUssZUFBZSxDQUFDO0FBQ2pILFFBQUksSUFBSSxDQUFDLFVBQVUsYUFBYSxvQkFBb0IsT0FBTztBQUMzRCxRQUFJLElBQUksQ0FBQyxVQUFVO0FBRW5CLFFBQUlDLGtCQUFpQixRQUFRLElBQUksRUFBRSxjQUFjLE9BQU87QUFDdEQsV0FBSyxJQUFJLEtBQUssYUFBYSxPQUFPLEtBQUssY0FBYyxDQUFDLElBQUk7QUFBQSxJQUM1RDtBQUVBLFdBQU87QUFBQSxNQUNMO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUE1QkE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBOzs7QUNIZSxXQUFSLGVBQWdDLFNBQVM7QUFFOUMsUUFBSSxvQkFBb0JDLGtCQUFpQixPQUFPLEdBQzVDLFdBQVcsa0JBQWtCLFVBQzdCLFlBQVksa0JBQWtCLFdBQzlCLFlBQVksa0JBQWtCO0FBRWxDLFdBQU8sNkJBQTZCLEtBQUssV0FBVyxZQUFZLFNBQVM7QUFBQSxFQUMzRTtBQVRBO0FBQUE7QUFBQTtBQUFBO0FBQUE7OztBQ0llLFdBQVIsZ0JBQWlDLE1BQU07QUFDNUMsUUFBSSxDQUFDLFFBQVEsUUFBUSxXQUFXLEVBQUUsUUFBUSxZQUFZLElBQUksQ0FBQyxLQUFLLEdBQUc7QUFFakUsYUFBTyxLQUFLLGNBQWM7QUFBQSxJQUM1QjtBQUVBLFFBQUksY0FBYyxJQUFJLEtBQUssZUFBZSxJQUFJLEdBQUc7QUFDL0MsYUFBTztBQUFBLElBQ1Q7QUFFQSxXQUFPLGdCQUFnQixjQUFjLElBQUksQ0FBQztBQUFBLEVBQzVDO0FBZkE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTs7O0FDUWUsV0FBUixrQkFBbUMsU0FBUyxNQUFNO0FBQ3ZELFFBQUk7QUFFSixRQUFJLFNBQVMsUUFBUTtBQUNuQixhQUFPLENBQUM7QUFBQSxJQUNWO0FBRUEsUUFBSSxlQUFlLGdCQUFnQixPQUFPO0FBQzFDLFFBQUksU0FBUyxtQkFBbUIsd0JBQXdCLFFBQVEsa0JBQWtCLE9BQU8sU0FBUyxzQkFBc0I7QUFDeEgsUUFBSSxNQUFNLFVBQVUsWUFBWTtBQUNoQyxRQUFJLFNBQVMsU0FBUyxDQUFDLEdBQUcsRUFBRSxPQUFPLElBQUksa0JBQWtCLENBQUMsR0FBRyxlQUFlLFlBQVksSUFBSSxlQUFlLENBQUMsQ0FBQyxJQUFJO0FBQ2pILFFBQUksY0FBYyxLQUFLLE9BQU8sTUFBTTtBQUNwQyxXQUFPLFNBQVM7QUFBQTtBQUFBLE1BQ2hCLFlBQVksT0FBTyxrQkFBa0IsY0FBYyxNQUFNLENBQUMsQ0FBQztBQUFBO0FBQUEsRUFDN0Q7QUF6QkE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTs7O0FDSGUsV0FBUixpQkFBa0MsTUFBTTtBQUM3QyxXQUFPLE9BQU8sT0FBTyxDQUFDLEdBQUcsTUFBTTtBQUFBLE1BQzdCLE1BQU0sS0FBSztBQUFBLE1BQ1gsS0FBSyxLQUFLO0FBQUEsTUFDVixPQUFPLEtBQUssSUFBSSxLQUFLO0FBQUEsTUFDckIsUUFBUSxLQUFLLElBQUksS0FBSztBQUFBLElBQ3hCLENBQUM7QUFBQSxFQUNIO0FBUEE7QUFBQTtBQUFBO0FBQUE7OztBQ2VBLFdBQVMsMkJBQTJCLFNBQVMsVUFBVTtBQUNyRCxRQUFJLE9BQU8sc0JBQXNCLFNBQVMsT0FBTyxhQUFhLE9BQU87QUFDckUsU0FBSyxNQUFNLEtBQUssTUFBTSxRQUFRO0FBQzlCLFNBQUssT0FBTyxLQUFLLE9BQU8sUUFBUTtBQUNoQyxTQUFLLFNBQVMsS0FBSyxNQUFNLFFBQVE7QUFDakMsU0FBSyxRQUFRLEtBQUssT0FBTyxRQUFRO0FBQ2pDLFNBQUssUUFBUSxRQUFRO0FBQ3JCLFNBQUssU0FBUyxRQUFRO0FBQ3RCLFNBQUssSUFBSSxLQUFLO0FBQ2QsU0FBSyxJQUFJLEtBQUs7QUFDZCxXQUFPO0FBQUEsRUFDVDtBQUVBLFdBQVMsMkJBQTJCLFNBQVMsZ0JBQWdCLFVBQVU7QUFDckUsV0FBTyxtQkFBbUIsV0FBVyxpQkFBaUIsZ0JBQWdCLFNBQVMsUUFBUSxDQUFDLElBQUksVUFBVSxjQUFjLElBQUksMkJBQTJCLGdCQUFnQixRQUFRLElBQUksaUJBQWlCLGdCQUFnQixtQkFBbUIsT0FBTyxDQUFDLENBQUM7QUFBQSxFQUM5TztBQUtBLFdBQVMsbUJBQW1CLFNBQVM7QUFDbkMsUUFBSUMsbUJBQWtCLGtCQUFrQixjQUFjLE9BQU8sQ0FBQztBQUM5RCxRQUFJLG9CQUFvQixDQUFDLFlBQVksT0FBTyxFQUFFLFFBQVFDLGtCQUFpQixPQUFPLEVBQUUsUUFBUSxLQUFLO0FBQzdGLFFBQUksaUJBQWlCLHFCQUFxQixjQUFjLE9BQU8sSUFBSSxnQkFBZ0IsT0FBTyxJQUFJO0FBRTlGLFFBQUksQ0FBQyxVQUFVLGNBQWMsR0FBRztBQUM5QixhQUFPLENBQUM7QUFBQSxJQUNWO0FBR0EsV0FBT0QsaUJBQWdCLE9BQU8sU0FBVSxnQkFBZ0I7QUFDdEQsYUFBTyxVQUFVLGNBQWMsS0FBSyxTQUFTLGdCQUFnQixjQUFjLEtBQUssWUFBWSxjQUFjLE1BQU07QUFBQSxJQUNsSCxDQUFDO0FBQUEsRUFDSDtBQUllLFdBQVIsZ0JBQWlDLFNBQVMsVUFBVSxjQUFjLFVBQVU7QUFDakYsUUFBSSxzQkFBc0IsYUFBYSxvQkFBb0IsbUJBQW1CLE9BQU8sSUFBSSxDQUFDLEVBQUUsT0FBTyxRQUFRO0FBQzNHLFFBQUlBLG1CQUFrQixDQUFDLEVBQUUsT0FBTyxxQkFBcUIsQ0FBQyxZQUFZLENBQUM7QUFDbkUsUUFBSSxzQkFBc0JBLGlCQUFnQixDQUFDO0FBQzNDLFFBQUksZUFBZUEsaUJBQWdCLE9BQU8sU0FBVSxTQUFTLGdCQUFnQjtBQUMzRSxVQUFJLE9BQU8sMkJBQTJCLFNBQVMsZ0JBQWdCLFFBQVE7QUFDdkUsY0FBUSxNQUFNLElBQUksS0FBSyxLQUFLLFFBQVEsR0FBRztBQUN2QyxjQUFRLFFBQVEsSUFBSSxLQUFLLE9BQU8sUUFBUSxLQUFLO0FBQzdDLGNBQVEsU0FBUyxJQUFJLEtBQUssUUFBUSxRQUFRLE1BQU07QUFDaEQsY0FBUSxPQUFPLElBQUksS0FBSyxNQUFNLFFBQVEsSUFBSTtBQUMxQyxhQUFPO0FBQUEsSUFDVCxHQUFHLDJCQUEyQixTQUFTLHFCQUFxQixRQUFRLENBQUM7QUFDckUsaUJBQWEsUUFBUSxhQUFhLFFBQVEsYUFBYTtBQUN2RCxpQkFBYSxTQUFTLGFBQWEsU0FBUyxhQUFhO0FBQ3pELGlCQUFhLElBQUksYUFBYTtBQUM5QixpQkFBYSxJQUFJLGFBQWE7QUFDOUIsV0FBTztBQUFBLEVBQ1Q7QUFyRUE7QUFBQTtBQUFBLE1BQUFFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBOzs7QUNUZSxXQUFSLGVBQWdDLE1BQU07QUFDM0MsUUFBSUMsYUFBWSxLQUFLLFdBQ2pCLFVBQVUsS0FBSyxTQUNmLFlBQVksS0FBSztBQUNyQixRQUFJLGdCQUFnQixZQUFZLGlCQUFpQixTQUFTLElBQUk7QUFDOUQsUUFBSSxZQUFZLFlBQVksYUFBYSxTQUFTLElBQUk7QUFDdEQsUUFBSSxVQUFVQSxXQUFVLElBQUlBLFdBQVUsUUFBUSxJQUFJLFFBQVEsUUFBUTtBQUNsRSxRQUFJLFVBQVVBLFdBQVUsSUFBSUEsV0FBVSxTQUFTLElBQUksUUFBUSxTQUFTO0FBQ3BFLFFBQUk7QUFFSixZQUFRLGVBQWU7QUFBQSxNQUNyQixLQUFLO0FBQ0gsa0JBQVU7QUFBQSxVQUNSLEdBQUc7QUFBQSxVQUNILEdBQUdBLFdBQVUsSUFBSSxRQUFRO0FBQUEsUUFDM0I7QUFDQTtBQUFBLE1BRUYsS0FBSztBQUNILGtCQUFVO0FBQUEsVUFDUixHQUFHO0FBQUEsVUFDSCxHQUFHQSxXQUFVLElBQUlBLFdBQVU7QUFBQSxRQUM3QjtBQUNBO0FBQUEsTUFFRixLQUFLO0FBQ0gsa0JBQVU7QUFBQSxVQUNSLEdBQUdBLFdBQVUsSUFBSUEsV0FBVTtBQUFBLFVBQzNCLEdBQUc7QUFBQSxRQUNMO0FBQ0E7QUFBQSxNQUVGLEtBQUs7QUFDSCxrQkFBVTtBQUFBLFVBQ1IsR0FBR0EsV0FBVSxJQUFJLFFBQVE7QUFBQSxVQUN6QixHQUFHO0FBQUEsUUFDTDtBQUNBO0FBQUEsTUFFRjtBQUNFLGtCQUFVO0FBQUEsVUFDUixHQUFHQSxXQUFVO0FBQUEsVUFDYixHQUFHQSxXQUFVO0FBQUEsUUFDZjtBQUFBLElBQ0o7QUFFQSxRQUFJLFdBQVcsZ0JBQWdCLHlCQUF5QixhQUFhLElBQUk7QUFFekUsUUFBSSxZQUFZLE1BQU07QUFDcEIsVUFBSSxNQUFNLGFBQWEsTUFBTSxXQUFXO0FBRXhDLGNBQVEsV0FBVztBQUFBLFFBQ2pCLEtBQUs7QUFDSCxrQkFBUSxRQUFRLElBQUksUUFBUSxRQUFRLEtBQUtBLFdBQVUsR0FBRyxJQUFJLElBQUksUUFBUSxHQUFHLElBQUk7QUFDN0U7QUFBQSxRQUVGLEtBQUs7QUFDSCxrQkFBUSxRQUFRLElBQUksUUFBUSxRQUFRLEtBQUtBLFdBQVUsR0FBRyxJQUFJLElBQUksUUFBUSxHQUFHLElBQUk7QUFDN0U7QUFBQSxRQUVGO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFFQSxXQUFPO0FBQUEsRUFDVDtBQXJFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0EsTUFBQUM7QUFBQTtBQUFBOzs7QUNPZSxXQUFSLGVBQWdDLE9BQU9DLFVBQVM7QUFDckQsUUFBSUEsYUFBWSxRQUFRO0FBQ3RCLE1BQUFBLFdBQVUsQ0FBQztBQUFBLElBQ2I7QUFFQSxRQUFJLFdBQVdBLFVBQ1gscUJBQXFCLFNBQVMsV0FDOUIsWUFBWSx1QkFBdUIsU0FBUyxNQUFNLFlBQVksb0JBQzlELG9CQUFvQixTQUFTLFVBQzdCLFdBQVcsc0JBQXNCLFNBQVMsTUFBTSxXQUFXLG1CQUMzRCxvQkFBb0IsU0FBUyxVQUM3QixXQUFXLHNCQUFzQixTQUFTLGtCQUFrQixtQkFDNUQsd0JBQXdCLFNBQVMsY0FDakMsZUFBZSwwQkFBMEIsU0FBUyxXQUFXLHVCQUM3RCx3QkFBd0IsU0FBUyxnQkFDakMsaUJBQWlCLDBCQUEwQixTQUFTLFNBQVMsdUJBQzdELHVCQUF1QixTQUFTLGFBQ2hDLGNBQWMseUJBQXlCLFNBQVMsUUFBUSxzQkFDeEQsbUJBQW1CLFNBQVMsU0FDNUIsVUFBVSxxQkFBcUIsU0FBUyxJQUFJO0FBQ2hELFFBQUksZ0JBQWdCLG1CQUFtQixPQUFPLFlBQVksV0FBVyxVQUFVLGdCQUFnQixTQUFTLGNBQWMsQ0FBQztBQUN2SCxRQUFJLGFBQWEsbUJBQW1CLFNBQVMsWUFBWTtBQUN6RCxRQUFJLGFBQWEsTUFBTSxNQUFNO0FBQzdCLFFBQUksVUFBVSxNQUFNLFNBQVMsY0FBYyxhQUFhLGNBQWM7QUFDdEUsUUFBSSxxQkFBcUIsZ0JBQWdCLFVBQVUsT0FBTyxJQUFJLFVBQVUsUUFBUSxrQkFBa0IsbUJBQW1CLE1BQU0sU0FBUyxNQUFNLEdBQUcsVUFBVSxjQUFjLFFBQVE7QUFDN0ssUUFBSSxzQkFBc0Isc0JBQXNCLE1BQU0sU0FBUyxTQUFTO0FBQ3hFLFFBQUlDLGlCQUFnQixlQUFlO0FBQUEsTUFDakMsV0FBVztBQUFBLE1BQ1gsU0FBUztBQUFBLE1BQ1QsVUFBVTtBQUFBLE1BQ1Y7QUFBQSxJQUNGLENBQUM7QUFDRCxRQUFJLG1CQUFtQixpQkFBaUIsT0FBTyxPQUFPLENBQUMsR0FBRyxZQUFZQSxjQUFhLENBQUM7QUFDcEYsUUFBSSxvQkFBb0IsbUJBQW1CLFNBQVMsbUJBQW1CO0FBR3ZFLFFBQUksa0JBQWtCO0FBQUEsTUFDcEIsS0FBSyxtQkFBbUIsTUFBTSxrQkFBa0IsTUFBTSxjQUFjO0FBQUEsTUFDcEUsUUFBUSxrQkFBa0IsU0FBUyxtQkFBbUIsU0FBUyxjQUFjO0FBQUEsTUFDN0UsTUFBTSxtQkFBbUIsT0FBTyxrQkFBa0IsT0FBTyxjQUFjO0FBQUEsTUFDdkUsT0FBTyxrQkFBa0IsUUFBUSxtQkFBbUIsUUFBUSxjQUFjO0FBQUEsSUFDNUU7QUFDQSxRQUFJLGFBQWEsTUFBTSxjQUFjO0FBRXJDLFFBQUksbUJBQW1CLFVBQVUsWUFBWTtBQUMzQyxVQUFJQyxVQUFTLFdBQVcsU0FBUztBQUNqQyxhQUFPLEtBQUssZUFBZSxFQUFFLFFBQVEsU0FBVSxLQUFLO0FBQ2xELFlBQUksV0FBVyxDQUFDLE9BQU8sTUFBTSxFQUFFLFFBQVEsR0FBRyxLQUFLLElBQUksSUFBSTtBQUN2RCxZQUFJLE9BQU8sQ0FBQyxLQUFLLE1BQU0sRUFBRSxRQUFRLEdBQUcsS0FBSyxJQUFJLE1BQU07QUFDbkQsd0JBQWdCLEdBQUcsS0FBS0EsUUFBTyxJQUFJLElBQUk7QUFBQSxNQUN6QyxDQUFDO0FBQUEsSUFDSDtBQUVBLFdBQU87QUFBQSxFQUNUO0FBaEVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBQUM7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBOzs7QUNKZSxXQUFSLHFCQUFzQyxPQUFPQyxVQUFTO0FBQzNELFFBQUlBLGFBQVksUUFBUTtBQUN0QixNQUFBQSxXQUFVLENBQUM7QUFBQSxJQUNiO0FBRUEsUUFBSSxXQUFXQSxVQUNYLFlBQVksU0FBUyxXQUNyQixXQUFXLFNBQVMsVUFDcEIsZUFBZSxTQUFTLGNBQ3hCLFVBQVUsU0FBUyxTQUNuQixpQkFBaUIsU0FBUyxnQkFDMUIsd0JBQXdCLFNBQVMsdUJBQ2pDLHdCQUF3QiwwQkFBMEIsU0FBUyxhQUFnQjtBQUMvRSxRQUFJLFlBQVksYUFBYSxTQUFTO0FBQ3RDLFFBQUlDLGNBQWEsWUFBWSxpQkFBaUIsc0JBQXNCLG9CQUFvQixPQUFPLFNBQVVDLFlBQVc7QUFDbEgsYUFBTyxhQUFhQSxVQUFTLE1BQU07QUFBQSxJQUNyQyxDQUFDLElBQUk7QUFDTCxRQUFJLG9CQUFvQkQsWUFBVyxPQUFPLFNBQVVDLFlBQVc7QUFDN0QsYUFBTyxzQkFBc0IsUUFBUUEsVUFBUyxLQUFLO0FBQUEsSUFDckQsQ0FBQztBQUVELFFBQUksa0JBQWtCLFdBQVcsR0FBRztBQUNsQywwQkFBb0JEO0FBQUEsSUFDdEI7QUFHQSxRQUFJLFlBQVksa0JBQWtCLE9BQU8sU0FBVSxLQUFLQyxZQUFXO0FBQ2pFLFVBQUlBLFVBQVMsSUFBSSxlQUFlLE9BQU87QUFBQSxRQUNyQyxXQUFXQTtBQUFBLFFBQ1g7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0YsQ0FBQyxFQUFFLGlCQUFpQkEsVUFBUyxDQUFDO0FBQzlCLGFBQU87QUFBQSxJQUNULEdBQUcsQ0FBQyxDQUFDO0FBQ0wsV0FBTyxPQUFPLEtBQUssU0FBUyxFQUFFLEtBQUssU0FBVUMsSUFBRyxHQUFHO0FBQ2pELGFBQU8sVUFBVUEsRUFBQyxJQUFJLFVBQVUsQ0FBQztBQUFBLElBQ25DLENBQUM7QUFBQSxFQUNIO0FBMUNBO0FBQUE7QUFBQTtBQUNBLE1BQUFDO0FBQ0E7QUFDQTtBQUFBO0FBQUE7OztBQ0tBLFdBQVMsOEJBQThCLFdBQVc7QUFDaEQsUUFBSSxpQkFBaUIsU0FBUyxNQUFNLE1BQU07QUFDeEMsYUFBTyxDQUFDO0FBQUEsSUFDVjtBQUVBLFFBQUksb0JBQW9CLHFCQUFxQixTQUFTO0FBQ3RELFdBQU8sQ0FBQyw4QkFBOEIsU0FBUyxHQUFHLG1CQUFtQiw4QkFBOEIsaUJBQWlCLENBQUM7QUFBQSxFQUN2SDtBQUVBLFdBQVMsS0FBSyxNQUFNO0FBQ2xCLFFBQUksUUFBUSxLQUFLLE9BQ2JDLFdBQVUsS0FBSyxTQUNmLE9BQU8sS0FBSztBQUVoQixRQUFJLE1BQU0sY0FBYyxJQUFJLEVBQUUsT0FBTztBQUNuQztBQUFBLElBQ0Y7QUFFQSxRQUFJLG9CQUFvQkEsU0FBUSxVQUM1QixnQkFBZ0Isc0JBQXNCLFNBQVMsT0FBTyxtQkFDdEQsbUJBQW1CQSxTQUFRLFNBQzNCLGVBQWUscUJBQXFCLFNBQVMsT0FBTyxrQkFDcEQsOEJBQThCQSxTQUFRLG9CQUN0QyxVQUFVQSxTQUFRLFNBQ2xCLFdBQVdBLFNBQVEsVUFDbkIsZUFBZUEsU0FBUSxjQUN2QixjQUFjQSxTQUFRLGFBQ3RCLHdCQUF3QkEsU0FBUSxnQkFDaEMsaUJBQWlCLDBCQUEwQixTQUFTLE9BQU8sdUJBQzNELHdCQUF3QkEsU0FBUTtBQUNwQyxRQUFJLHFCQUFxQixNQUFNLFFBQVE7QUFDdkMsUUFBSSxnQkFBZ0IsaUJBQWlCLGtCQUFrQjtBQUN2RCxRQUFJLGtCQUFrQixrQkFBa0I7QUFDeEMsUUFBSSxxQkFBcUIsZ0NBQWdDLG1CQUFtQixDQUFDLGlCQUFpQixDQUFDLHFCQUFxQixrQkFBa0IsQ0FBQyxJQUFJLDhCQUE4QixrQkFBa0I7QUFDM0wsUUFBSUMsY0FBYSxDQUFDLGtCQUFrQixFQUFFLE9BQU8sa0JBQWtCLEVBQUUsT0FBTyxTQUFVLEtBQUtDLFlBQVc7QUFDaEcsYUFBTyxJQUFJLE9BQU8saUJBQWlCQSxVQUFTLE1BQU0sT0FBTyxxQkFBcUIsT0FBTztBQUFBLFFBQ25GLFdBQVdBO0FBQUEsUUFDWDtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGLENBQUMsSUFBSUEsVUFBUztBQUFBLElBQ2hCLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBSSxnQkFBZ0IsTUFBTSxNQUFNO0FBQ2hDLFFBQUksYUFBYSxNQUFNLE1BQU07QUFDN0IsUUFBSSxZQUFZLG9CQUFJLElBQUk7QUFDeEIsUUFBSSxxQkFBcUI7QUFDekIsUUFBSSx3QkFBd0JELFlBQVcsQ0FBQztBQUV4QyxhQUFTLElBQUksR0FBRyxJQUFJQSxZQUFXLFFBQVEsS0FBSztBQUMxQyxVQUFJLFlBQVlBLFlBQVcsQ0FBQztBQUU1QixVQUFJLGlCQUFpQixpQkFBaUIsU0FBUztBQUUvQyxVQUFJLG1CQUFtQixhQUFhLFNBQVMsTUFBTTtBQUNuRCxVQUFJLGFBQWEsQ0FBQyxLQUFLLE1BQU0sRUFBRSxRQUFRLGNBQWMsS0FBSztBQUMxRCxVQUFJLE1BQU0sYUFBYSxVQUFVO0FBQ2pDLFVBQUksV0FBVyxlQUFlLE9BQU87QUFBQSxRQUNuQztBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGLENBQUM7QUFDRCxVQUFJLG9CQUFvQixhQUFhLG1CQUFtQixRQUFRLE9BQU8sbUJBQW1CLFNBQVM7QUFFbkcsVUFBSSxjQUFjLEdBQUcsSUFBSSxXQUFXLEdBQUcsR0FBRztBQUN4Qyw0QkFBb0IscUJBQXFCLGlCQUFpQjtBQUFBLE1BQzVEO0FBRUEsVUFBSSxtQkFBbUIscUJBQXFCLGlCQUFpQjtBQUM3RCxVQUFJLFNBQVMsQ0FBQztBQUVkLFVBQUksZUFBZTtBQUNqQixlQUFPLEtBQUssU0FBUyxjQUFjLEtBQUssQ0FBQztBQUFBLE1BQzNDO0FBRUEsVUFBSSxjQUFjO0FBQ2hCLGVBQU8sS0FBSyxTQUFTLGlCQUFpQixLQUFLLEdBQUcsU0FBUyxnQkFBZ0IsS0FBSyxDQUFDO0FBQUEsTUFDL0U7QUFFQSxVQUFJLE9BQU8sTUFBTSxTQUFVLE9BQU87QUFDaEMsZUFBTztBQUFBLE1BQ1QsQ0FBQyxHQUFHO0FBQ0YsZ0NBQXdCO0FBQ3hCLDZCQUFxQjtBQUNyQjtBQUFBLE1BQ0Y7QUFFQSxnQkFBVSxJQUFJLFdBQVcsTUFBTTtBQUFBLElBQ2pDO0FBRUEsUUFBSSxvQkFBb0I7QUFFdEIsVUFBSSxpQkFBaUIsaUJBQWlCLElBQUk7QUFFMUMsVUFBSSxRQUFRLFNBQVNFLE9BQU1DLEtBQUk7QUFDN0IsWUFBSSxtQkFBbUJILFlBQVcsS0FBSyxTQUFVQyxZQUFXO0FBQzFELGNBQUlHLFVBQVMsVUFBVSxJQUFJSCxVQUFTO0FBRXBDLGNBQUlHLFNBQVE7QUFDVixtQkFBT0EsUUFBTyxNQUFNLEdBQUdELEdBQUUsRUFBRSxNQUFNLFNBQVUsT0FBTztBQUNoRCxxQkFBTztBQUFBLFlBQ1QsQ0FBQztBQUFBLFVBQ0g7QUFBQSxRQUNGLENBQUM7QUFFRCxZQUFJLGtCQUFrQjtBQUNwQixrQ0FBd0I7QUFDeEIsaUJBQU87QUFBQSxRQUNUO0FBQUEsTUFDRjtBQUVBLGVBQVMsS0FBSyxnQkFBZ0IsS0FBSyxHQUFHLE1BQU07QUFDMUMsWUFBSSxPQUFPLE1BQU0sRUFBRTtBQUVuQixZQUFJLFNBQVMsUUFBUztBQUFBLE1BQ3hCO0FBQUEsSUFDRjtBQUVBLFFBQUksTUFBTSxjQUFjLHVCQUF1QjtBQUM3QyxZQUFNLGNBQWMsSUFBSSxFQUFFLFFBQVE7QUFDbEMsWUFBTSxZQUFZO0FBQ2xCLFlBQU0sUUFBUTtBQUFBLElBQ2hCO0FBQUEsRUFDRjtBQXRJQSxNQXlJTztBQXpJUDtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUFFO0FBQ0E7QUFtSUEsTUFBTyxlQUFRO0FBQUEsUUFDYixNQUFNO0FBQUEsUUFDTixTQUFTO0FBQUEsUUFDVCxPQUFPO0FBQUEsUUFDUCxJQUFJO0FBQUEsUUFDSixrQkFBa0IsQ0FBQyxRQUFRO0FBQUEsUUFDM0IsTUFBTTtBQUFBLFVBQ0osT0FBTztBQUFBLFFBQ1Q7QUFBQSxNQUNGO0FBQUE7QUFBQTs7O0FDL0lBLFdBQVMsZUFBZSxVQUFVLE1BQU0sa0JBQWtCO0FBQ3hELFFBQUkscUJBQXFCLFFBQVE7QUFDL0IseUJBQW1CO0FBQUEsUUFDakIsR0FBRztBQUFBLFFBQ0gsR0FBRztBQUFBLE1BQ0w7QUFBQSxJQUNGO0FBRUEsV0FBTztBQUFBLE1BQ0wsS0FBSyxTQUFTLE1BQU0sS0FBSyxTQUFTLGlCQUFpQjtBQUFBLE1BQ25ELE9BQU8sU0FBUyxRQUFRLEtBQUssUUFBUSxpQkFBaUI7QUFBQSxNQUN0RCxRQUFRLFNBQVMsU0FBUyxLQUFLLFNBQVMsaUJBQWlCO0FBQUEsTUFDekQsTUFBTSxTQUFTLE9BQU8sS0FBSyxRQUFRLGlCQUFpQjtBQUFBLElBQ3REO0FBQUEsRUFDRjtBQUVBLFdBQVMsc0JBQXNCLFVBQVU7QUFDdkMsV0FBTyxDQUFDLEtBQUssT0FBTyxRQUFRLElBQUksRUFBRSxLQUFLLFNBQVUsTUFBTTtBQUNyRCxhQUFPLFNBQVMsSUFBSSxLQUFLO0FBQUEsSUFDM0IsQ0FBQztBQUFBLEVBQ0g7QUFFQSxXQUFTQyxNQUFLLE1BQU07QUFDbEIsUUFBSSxRQUFRLEtBQUssT0FDYixPQUFPLEtBQUs7QUFDaEIsUUFBSSxnQkFBZ0IsTUFBTSxNQUFNO0FBQ2hDLFFBQUksYUFBYSxNQUFNLE1BQU07QUFDN0IsUUFBSSxtQkFBbUIsTUFBTSxjQUFjO0FBQzNDLFFBQUksb0JBQW9CLGVBQWUsT0FBTztBQUFBLE1BQzVDLGdCQUFnQjtBQUFBLElBQ2xCLENBQUM7QUFDRCxRQUFJLG9CQUFvQixlQUFlLE9BQU87QUFBQSxNQUM1QyxhQUFhO0FBQUEsSUFDZixDQUFDO0FBQ0QsUUFBSSwyQkFBMkIsZUFBZSxtQkFBbUIsYUFBYTtBQUM5RSxRQUFJLHNCQUFzQixlQUFlLG1CQUFtQixZQUFZLGdCQUFnQjtBQUN4RixRQUFJLG9CQUFvQixzQkFBc0Isd0JBQXdCO0FBQ3RFLFFBQUksbUJBQW1CLHNCQUFzQixtQkFBbUI7QUFDaEUsVUFBTSxjQUFjLElBQUksSUFBSTtBQUFBLE1BQzFCO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRjtBQUNBLFVBQU0sV0FBVyxTQUFTLE9BQU8sT0FBTyxDQUFDLEdBQUcsTUFBTSxXQUFXLFFBQVE7QUFBQSxNQUNuRSxnQ0FBZ0M7QUFBQSxNQUNoQyx1QkFBdUI7QUFBQSxJQUN6QixDQUFDO0FBQUEsRUFDSDtBQW5EQSxNQXNETztBQXREUDtBQUFBO0FBQUEsTUFBQUM7QUFDQTtBQXFEQSxNQUFPLGVBQVE7QUFBQSxRQUNiLE1BQU07QUFBQSxRQUNOLFNBQVM7QUFBQSxRQUNULE9BQU87QUFBQSxRQUNQLGtCQUFrQixDQUFDLGlCQUFpQjtBQUFBLFFBQ3BDLElBQUlEO0FBQUEsTUFDTjtBQUFBO0FBQUE7OztBQ3pETyxXQUFTLHdCQUF3QixXQUFXLE9BQU9FLFNBQVE7QUFDaEUsUUFBSSxnQkFBZ0IsaUJBQWlCLFNBQVM7QUFDOUMsUUFBSSxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsRUFBRSxRQUFRLGFBQWEsS0FBSyxJQUFJLEtBQUs7QUFFcEUsUUFBSSxPQUFPLE9BQU9BLFlBQVcsYUFBYUEsUUFBTyxPQUFPLE9BQU8sQ0FBQyxHQUFHLE9BQU87QUFBQSxNQUN4RTtBQUFBLElBQ0YsQ0FBQyxDQUFDLElBQUlBLFNBQ0YsV0FBVyxLQUFLLENBQUMsR0FDakIsV0FBVyxLQUFLLENBQUM7QUFFckIsZUFBVyxZQUFZO0FBQ3ZCLGdCQUFZLFlBQVksS0FBSztBQUM3QixXQUFPLENBQUMsTUFBTSxLQUFLLEVBQUUsUUFBUSxhQUFhLEtBQUssSUFBSTtBQUFBLE1BQ2pELEdBQUc7QUFBQSxNQUNILEdBQUc7QUFBQSxJQUNMLElBQUk7QUFBQSxNQUNGLEdBQUc7QUFBQSxNQUNILEdBQUc7QUFBQSxJQUNMO0FBQUEsRUFDRjtBQUVBLFdBQVMsT0FBTyxPQUFPO0FBQ3JCLFFBQUksUUFBUSxNQUFNLE9BQ2RDLFdBQVUsTUFBTSxTQUNoQixPQUFPLE1BQU07QUFDakIsUUFBSSxrQkFBa0JBLFNBQVEsUUFDMUJELFVBQVMsb0JBQW9CLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSTtBQUNuRCxRQUFJLE9BQU8sV0FBVyxPQUFPLFNBQVUsS0FBSyxXQUFXO0FBQ3JELFVBQUksU0FBUyxJQUFJLHdCQUF3QixXQUFXLE1BQU0sT0FBT0EsT0FBTTtBQUN2RSxhQUFPO0FBQUEsSUFDVCxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUksd0JBQXdCLEtBQUssTUFBTSxTQUFTLEdBQzVDLElBQUksc0JBQXNCLEdBQzFCLElBQUksc0JBQXNCO0FBRTlCLFFBQUksTUFBTSxjQUFjLGlCQUFpQixNQUFNO0FBQzdDLFlBQU0sY0FBYyxjQUFjLEtBQUs7QUFDdkMsWUFBTSxjQUFjLGNBQWMsS0FBSztBQUFBLElBQ3pDO0FBRUEsVUFBTSxjQUFjLElBQUksSUFBSTtBQUFBLEVBQzlCO0FBNUNBLE1BK0NPO0FBL0NQO0FBQUE7QUFBQTtBQUNBLE1BQUFFO0FBOENBLE1BQU8saUJBQVE7QUFBQSxRQUNiLE1BQU07QUFBQSxRQUNOLFNBQVM7QUFBQSxRQUNULE9BQU87QUFBQSxRQUNQLFVBQVUsQ0FBQyxlQUFlO0FBQUEsUUFDMUIsSUFBSTtBQUFBLE1BQ047QUFBQTtBQUFBOzs7QUNuREEsV0FBUyxjQUFjLE1BQU07QUFDM0IsUUFBSSxRQUFRLEtBQUssT0FDYixPQUFPLEtBQUs7QUFLaEIsVUFBTSxjQUFjLElBQUksSUFBSSxlQUFlO0FBQUEsTUFDekMsV0FBVyxNQUFNLE1BQU07QUFBQSxNQUN2QixTQUFTLE1BQU0sTUFBTTtBQUFBLE1BQ3JCLFVBQVU7QUFBQSxNQUNWLFdBQVcsTUFBTTtBQUFBLElBQ25CLENBQUM7QUFBQSxFQUNIO0FBZkEsTUFrQk87QUFsQlA7QUFBQTtBQUFBO0FBa0JBLE1BQU8sd0JBQVE7QUFBQSxRQUNiLE1BQU07QUFBQSxRQUNOLFNBQVM7QUFBQSxRQUNULE9BQU87QUFBQSxRQUNQLElBQUk7QUFBQSxRQUNKLE1BQU0sQ0FBQztBQUFBLE1BQ1Q7QUFBQTtBQUFBOzs7QUN4QmUsV0FBUixXQUE0QixNQUFNO0FBQ3ZDLFdBQU8sU0FBUyxNQUFNLE1BQU07QUFBQSxFQUM5QjtBQUZBO0FBQUE7QUFBQTtBQUFBOzs7QUNZQSxXQUFTLGdCQUFnQixNQUFNO0FBQzdCLFFBQUksUUFBUSxLQUFLLE9BQ2JDLFdBQVUsS0FBSyxTQUNmLE9BQU8sS0FBSztBQUNoQixRQUFJLG9CQUFvQkEsU0FBUSxVQUM1QixnQkFBZ0Isc0JBQXNCLFNBQVMsT0FBTyxtQkFDdEQsbUJBQW1CQSxTQUFRLFNBQzNCLGVBQWUscUJBQXFCLFNBQVMsUUFBUSxrQkFDckQsV0FBV0EsU0FBUSxVQUNuQixlQUFlQSxTQUFRLGNBQ3ZCLGNBQWNBLFNBQVEsYUFDdEIsVUFBVUEsU0FBUSxTQUNsQixrQkFBa0JBLFNBQVEsUUFDMUIsU0FBUyxvQkFBb0IsU0FBUyxPQUFPLGlCQUM3Qyx3QkFBd0JBLFNBQVEsY0FDaEMsZUFBZSwwQkFBMEIsU0FBUyxJQUFJO0FBQzFELFFBQUksV0FBVyxlQUFlLE9BQU87QUFBQSxNQUNuQztBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0YsQ0FBQztBQUNELFFBQUksZ0JBQWdCLGlCQUFpQixNQUFNLFNBQVM7QUFDcEQsUUFBSSxZQUFZLGFBQWEsTUFBTSxTQUFTO0FBQzVDLFFBQUksa0JBQWtCLENBQUM7QUFDdkIsUUFBSSxXQUFXLHlCQUF5QixhQUFhO0FBQ3JELFFBQUksVUFBVSxXQUFXLFFBQVE7QUFDakMsUUFBSUMsaUJBQWdCLE1BQU0sY0FBYztBQUN4QyxRQUFJLGdCQUFnQixNQUFNLE1BQU07QUFDaEMsUUFBSSxhQUFhLE1BQU0sTUFBTTtBQUM3QixRQUFJLG9CQUFvQixPQUFPLGlCQUFpQixhQUFhLGFBQWEsT0FBTyxPQUFPLENBQUMsR0FBRyxNQUFNLE9BQU87QUFBQSxNQUN2RyxXQUFXLE1BQU07QUFBQSxJQUNuQixDQUFDLENBQUMsSUFBSTtBQUNOLFFBQUksOEJBQThCLE9BQU8sc0JBQXNCLFdBQVc7QUFBQSxNQUN4RSxVQUFVO0FBQUEsTUFDVixTQUFTO0FBQUEsSUFDWCxJQUFJLE9BQU8sT0FBTztBQUFBLE1BQ2hCLFVBQVU7QUFBQSxNQUNWLFNBQVM7QUFBQSxJQUNYLEdBQUcsaUJBQWlCO0FBQ3BCLFFBQUksc0JBQXNCLE1BQU0sY0FBYyxTQUFTLE1BQU0sY0FBYyxPQUFPLE1BQU0sU0FBUyxJQUFJO0FBQ3JHLFFBQUksT0FBTztBQUFBLE1BQ1QsR0FBRztBQUFBLE1BQ0gsR0FBRztBQUFBLElBQ0w7QUFFQSxRQUFJLENBQUNBLGdCQUFlO0FBQ2xCO0FBQUEsSUFDRjtBQUVBLFFBQUksZUFBZTtBQUNqQixVQUFJO0FBRUosVUFBSSxXQUFXLGFBQWEsTUFBTSxNQUFNO0FBQ3hDLFVBQUksVUFBVSxhQUFhLE1BQU0sU0FBUztBQUMxQyxVQUFJLE1BQU0sYUFBYSxNQUFNLFdBQVc7QUFDeEMsVUFBSUMsVUFBU0QsZUFBYyxRQUFRO0FBQ25DLFVBQUlFLE9BQU1ELFVBQVMsU0FBUyxRQUFRO0FBQ3BDLFVBQUlFLE9BQU1GLFVBQVMsU0FBUyxPQUFPO0FBQ25DLFVBQUksV0FBVyxTQUFTLENBQUMsV0FBVyxHQUFHLElBQUksSUFBSTtBQUMvQyxVQUFJLFNBQVMsY0FBYyxRQUFRLGNBQWMsR0FBRyxJQUFJLFdBQVcsR0FBRztBQUN0RSxVQUFJLFNBQVMsY0FBYyxRQUFRLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLEdBQUc7QUFHeEUsVUFBSSxlQUFlLE1BQU0sU0FBUztBQUNsQyxVQUFJLFlBQVksVUFBVSxlQUFlLGNBQWMsWUFBWSxJQUFJO0FBQUEsUUFDckUsT0FBTztBQUFBLFFBQ1AsUUFBUTtBQUFBLE1BQ1Y7QUFDQSxVQUFJLHFCQUFxQixNQUFNLGNBQWMsa0JBQWtCLElBQUksTUFBTSxjQUFjLGtCQUFrQixFQUFFLFVBQVUsbUJBQW1CO0FBQ3hJLFVBQUksa0JBQWtCLG1CQUFtQixRQUFRO0FBQ2pELFVBQUksa0JBQWtCLG1CQUFtQixPQUFPO0FBTWhELFVBQUksV0FBVyxPQUFPLEdBQUcsY0FBYyxHQUFHLEdBQUcsVUFBVSxHQUFHLENBQUM7QUFDM0QsVUFBSSxZQUFZLGtCQUFrQixjQUFjLEdBQUcsSUFBSSxJQUFJLFdBQVcsV0FBVyxrQkFBa0IsNEJBQTRCLFdBQVcsU0FBUyxXQUFXLGtCQUFrQiw0QkFBNEI7QUFDNU0sVUFBSSxZQUFZLGtCQUFrQixDQUFDLGNBQWMsR0FBRyxJQUFJLElBQUksV0FBVyxXQUFXLGtCQUFrQiw0QkFBNEIsV0FBVyxTQUFTLFdBQVcsa0JBQWtCLDRCQUE0QjtBQUM3TSxVQUFJLG9CQUFvQixNQUFNLFNBQVMsU0FBUyxnQkFBZ0IsTUFBTSxTQUFTLEtBQUs7QUFDcEYsVUFBSSxlQUFlLG9CQUFvQixhQUFhLE1BQU0sa0JBQWtCLGFBQWEsSUFBSSxrQkFBa0IsY0FBYyxJQUFJO0FBQ2pJLFVBQUksdUJBQXVCLHdCQUF3Qix1QkFBdUIsT0FBTyxTQUFTLG9CQUFvQixRQUFRLE1BQU0sT0FBTyx3QkFBd0I7QUFDM0osVUFBSSxZQUFZQSxVQUFTLFlBQVksc0JBQXNCO0FBQzNELFVBQUksWUFBWUEsVUFBUyxZQUFZO0FBQ3JDLFVBQUksa0JBQWtCLE9BQU8sU0FBUyxJQUFRQyxNQUFLLFNBQVMsSUFBSUEsTUFBS0QsU0FBUSxTQUFTLElBQVFFLE1BQUssU0FBUyxJQUFJQSxJQUFHO0FBQ25ILE1BQUFILGVBQWMsUUFBUSxJQUFJO0FBQzFCLFdBQUssUUFBUSxJQUFJLGtCQUFrQkM7QUFBQSxJQUNyQztBQUVBLFFBQUksY0FBYztBQUNoQixVQUFJO0FBRUosVUFBSSxZQUFZLGFBQWEsTUFBTSxNQUFNO0FBRXpDLFVBQUksV0FBVyxhQUFhLE1BQU0sU0FBUztBQUUzQyxVQUFJLFVBQVVELGVBQWMsT0FBTztBQUVuQyxVQUFJLE9BQU8sWUFBWSxNQUFNLFdBQVc7QUFFeEMsVUFBSSxPQUFPLFVBQVUsU0FBUyxTQUFTO0FBRXZDLFVBQUksT0FBTyxVQUFVLFNBQVMsUUFBUTtBQUV0QyxVQUFJLGVBQWUsQ0FBQyxLQUFLLElBQUksRUFBRSxRQUFRLGFBQWEsTUFBTTtBQUUxRCxVQUFJLHdCQUF3Qix5QkFBeUIsdUJBQXVCLE9BQU8sU0FBUyxvQkFBb0IsT0FBTyxNQUFNLE9BQU8seUJBQXlCO0FBRTdKLFVBQUksYUFBYSxlQUFlLE9BQU8sVUFBVSxjQUFjLElBQUksSUFBSSxXQUFXLElBQUksSUFBSSx1QkFBdUIsNEJBQTRCO0FBRTdJLFVBQUksYUFBYSxlQUFlLFVBQVUsY0FBYyxJQUFJLElBQUksV0FBVyxJQUFJLElBQUksdUJBQXVCLDRCQUE0QixVQUFVO0FBRWhKLFVBQUksbUJBQW1CLFVBQVUsZUFBZSxlQUFlLFlBQVksU0FBUyxVQUFVLElBQUksT0FBTyxTQUFTLGFBQWEsTUFBTSxTQUFTLFNBQVMsYUFBYSxJQUFJO0FBRXhLLE1BQUFBLGVBQWMsT0FBTyxJQUFJO0FBQ3pCLFdBQUssT0FBTyxJQUFJLG1CQUFtQjtBQUFBLElBQ3JDO0FBRUEsVUFBTSxjQUFjLElBQUksSUFBSTtBQUFBLEVBQzlCO0FBcElBLE1BdUlPO0FBdklQO0FBQUE7QUFBQSxNQUFBSTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBNkhBLE1BQU8sMEJBQVE7QUFBQSxRQUNiLE1BQU07QUFBQSxRQUNOLFNBQVM7QUFBQSxRQUNULE9BQU87QUFBQSxRQUNQLElBQUk7QUFBQSxRQUNKLGtCQUFrQixDQUFDLFFBQVE7QUFBQSxNQUM3QjtBQUFBO0FBQUE7OztBQzdJQTtBQUFBO0FBQUE7QUFBQTs7O0FDQWUsV0FBUixxQkFBc0MsU0FBUztBQUNwRCxXQUFPO0FBQUEsTUFDTCxZQUFZLFFBQVE7QUFBQSxNQUNwQixXQUFXLFFBQVE7QUFBQSxJQUNyQjtBQUFBLEVBQ0Y7QUFMQTtBQUFBO0FBQUE7QUFBQTs7O0FDSWUsV0FBUixjQUErQixNQUFNO0FBQzFDLFFBQUksU0FBUyxVQUFVLElBQUksS0FBSyxDQUFDLGNBQWMsSUFBSSxHQUFHO0FBQ3BELGFBQU8sZ0JBQWdCLElBQUk7QUFBQSxJQUM3QixPQUFPO0FBQ0wsYUFBTyxxQkFBcUIsSUFBSTtBQUFBLElBQ2xDO0FBQUEsRUFDRjtBQVZBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7OztBQ01BLFdBQVMsZ0JBQWdCLFNBQVM7QUFDaEMsUUFBSSxPQUFPLFFBQVEsc0JBQXNCO0FBQ3pDLFFBQUksU0FBUyxNQUFNLEtBQUssS0FBSyxJQUFJLFFBQVEsZUFBZTtBQUN4RCxRQUFJLFNBQVMsTUFBTSxLQUFLLE1BQU0sSUFBSSxRQUFRLGdCQUFnQjtBQUMxRCxXQUFPLFdBQVcsS0FBSyxXQUFXO0FBQUEsRUFDcEM7QUFJZSxXQUFSLGlCQUFrQyx5QkFBeUIsY0FBYyxTQUFTO0FBQ3ZGLFFBQUksWUFBWSxRQUFRO0FBQ3RCLGdCQUFVO0FBQUEsSUFDWjtBQUVBLFFBQUksMEJBQTBCLGNBQWMsWUFBWTtBQUN4RCxRQUFJLHVCQUF1QixjQUFjLFlBQVksS0FBSyxnQkFBZ0IsWUFBWTtBQUN0RixRQUFJLGtCQUFrQixtQkFBbUIsWUFBWTtBQUNyRCxRQUFJLE9BQU8sc0JBQXNCLHlCQUF5QixzQkFBc0IsT0FBTztBQUN2RixRQUFJLFNBQVM7QUFBQSxNQUNYLFlBQVk7QUFBQSxNQUNaLFdBQVc7QUFBQSxJQUNiO0FBQ0EsUUFBSSxVQUFVO0FBQUEsTUFDWixHQUFHO0FBQUEsTUFDSCxHQUFHO0FBQUEsSUFDTDtBQUVBLFFBQUksMkJBQTJCLENBQUMsMkJBQTJCLENBQUMsU0FBUztBQUNuRSxVQUFJLFlBQVksWUFBWSxNQUFNO0FBQUEsTUFDbEMsZUFBZSxlQUFlLEdBQUc7QUFDL0IsaUJBQVMsY0FBYyxZQUFZO0FBQUEsTUFDckM7QUFFQSxVQUFJLGNBQWMsWUFBWSxHQUFHO0FBQy9CLGtCQUFVLHNCQUFzQixjQUFjLElBQUk7QUFDbEQsZ0JBQVEsS0FBSyxhQUFhO0FBQzFCLGdCQUFRLEtBQUssYUFBYTtBQUFBLE1BQzVCLFdBQVcsaUJBQWlCO0FBQzFCLGdCQUFRLElBQUksb0JBQW9CLGVBQWU7QUFBQSxNQUNqRDtBQUFBLElBQ0Y7QUFFQSxXQUFPO0FBQUEsTUFDTCxHQUFHLEtBQUssT0FBTyxPQUFPLGFBQWEsUUFBUTtBQUFBLE1BQzNDLEdBQUcsS0FBSyxNQUFNLE9BQU8sWUFBWSxRQUFRO0FBQUEsTUFDekMsT0FBTyxLQUFLO0FBQUEsTUFDWixRQUFRLEtBQUs7QUFBQSxJQUNmO0FBQUEsRUFDRjtBQXpEQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7OztBQ0xBLFdBQVMsTUFBTSxXQUFXO0FBQ3hCLFFBQUksTUFBTSxvQkFBSSxJQUFJO0FBQ2xCLFFBQUksVUFBVSxvQkFBSSxJQUFJO0FBQ3RCLFFBQUksU0FBUyxDQUFDO0FBQ2QsY0FBVSxRQUFRLFNBQVUsVUFBVTtBQUNwQyxVQUFJLElBQUksU0FBUyxNQUFNLFFBQVE7QUFBQSxJQUNqQyxDQUFDO0FBRUQsYUFBUyxLQUFLLFVBQVU7QUFDdEIsY0FBUSxJQUFJLFNBQVMsSUFBSTtBQUN6QixVQUFJLFdBQVcsQ0FBQyxFQUFFLE9BQU8sU0FBUyxZQUFZLENBQUMsR0FBRyxTQUFTLG9CQUFvQixDQUFDLENBQUM7QUFDakYsZUFBUyxRQUFRLFNBQVUsS0FBSztBQUM5QixZQUFJLENBQUMsUUFBUSxJQUFJLEdBQUcsR0FBRztBQUNyQixjQUFJLGNBQWMsSUFBSSxJQUFJLEdBQUc7QUFFN0IsY0FBSSxhQUFhO0FBQ2YsaUJBQUssV0FBVztBQUFBLFVBQ2xCO0FBQUEsUUFDRjtBQUFBLE1BQ0YsQ0FBQztBQUNELGFBQU8sS0FBSyxRQUFRO0FBQUEsSUFDdEI7QUFFQSxjQUFVLFFBQVEsU0FBVSxVQUFVO0FBQ3BDLFVBQUksQ0FBQyxRQUFRLElBQUksU0FBUyxJQUFJLEdBQUc7QUFFL0IsYUFBSyxRQUFRO0FBQUEsTUFDZjtBQUFBLElBQ0YsQ0FBQztBQUNELFdBQU87QUFBQSxFQUNUO0FBRWUsV0FBUixlQUFnQyxXQUFXO0FBRWhELFFBQUksbUJBQW1CLE1BQU0sU0FBUztBQUV0QyxXQUFPLGVBQWUsT0FBTyxTQUFVLEtBQUssT0FBTztBQUNqRCxhQUFPLElBQUksT0FBTyxpQkFBaUIsT0FBTyxTQUFVLFVBQVU7QUFDNUQsZUFBTyxTQUFTLFVBQVU7QUFBQSxNQUM1QixDQUFDLENBQUM7QUFBQSxJQUNKLEdBQUcsQ0FBQyxDQUFDO0FBQUEsRUFDUDtBQTNDQTtBQUFBO0FBQUEsTUFBQUM7QUFBQTtBQUFBOzs7QUNBZSxXQUFSLFNBQTBCQyxLQUFJO0FBQ25DLFFBQUk7QUFDSixXQUFPLFdBQVk7QUFDakIsVUFBSSxDQUFDLFNBQVM7QUFDWixrQkFBVSxJQUFJLFFBQVEsU0FBVSxTQUFTO0FBQ3ZDLGtCQUFRLFFBQVEsRUFBRSxLQUFLLFdBQVk7QUFDakMsc0JBQVU7QUFDVixvQkFBUUEsSUFBRyxDQUFDO0FBQUEsVUFDZCxDQUFDO0FBQUEsUUFDSCxDQUFDO0FBQUEsTUFDSDtBQUVBLGFBQU87QUFBQSxJQUNUO0FBQUEsRUFDRjtBQWRBO0FBQUE7QUFBQTtBQUFBOzs7QUNBZSxXQUFSLFlBQTZCLFdBQVc7QUFDN0MsUUFBSSxTQUFTLFVBQVUsT0FBTyxTQUFVQyxTQUFRLFNBQVM7QUFDdkQsVUFBSSxXQUFXQSxRQUFPLFFBQVEsSUFBSTtBQUNsQyxNQUFBQSxRQUFPLFFBQVEsSUFBSSxJQUFJLFdBQVcsT0FBTyxPQUFPLENBQUMsR0FBRyxVQUFVLFNBQVM7QUFBQSxRQUNyRSxTQUFTLE9BQU8sT0FBTyxDQUFDLEdBQUcsU0FBUyxTQUFTLFFBQVEsT0FBTztBQUFBLFFBQzVELE1BQU0sT0FBTyxPQUFPLENBQUMsR0FBRyxTQUFTLE1BQU0sUUFBUSxJQUFJO0FBQUEsTUFDckQsQ0FBQyxJQUFJO0FBQ0wsYUFBT0E7QUFBQSxJQUNULEdBQUcsQ0FBQyxDQUFDO0FBRUwsV0FBTyxPQUFPLEtBQUssTUFBTSxFQUFFLElBQUksU0FBVSxLQUFLO0FBQzVDLGFBQU8sT0FBTyxHQUFHO0FBQUEsSUFDbkIsQ0FBQztBQUFBLEVBQ0g7QUFiQTtBQUFBO0FBQUE7QUFBQTs7O0FDZUEsV0FBUyxtQkFBbUI7QUFDMUIsYUFBUyxPQUFPLFVBQVUsUUFBUSxPQUFPLElBQUksTUFBTSxJQUFJLEdBQUcsT0FBTyxHQUFHLE9BQU8sTUFBTSxRQUFRO0FBQ3ZGLFdBQUssSUFBSSxJQUFJLFVBQVUsSUFBSTtBQUFBLElBQzdCO0FBRUEsV0FBTyxDQUFDLEtBQUssS0FBSyxTQUFVLFNBQVM7QUFDbkMsYUFBTyxFQUFFLFdBQVcsT0FBTyxRQUFRLDBCQUEwQjtBQUFBLElBQy9ELENBQUM7QUFBQSxFQUNIO0FBRU8sV0FBUyxnQkFBZ0Isa0JBQWtCO0FBQ2hELFFBQUkscUJBQXFCLFFBQVE7QUFDL0IseUJBQW1CLENBQUM7QUFBQSxJQUN0QjtBQUVBLFFBQUksb0JBQW9CLGtCQUNwQix3QkFBd0Isa0JBQWtCLGtCQUMxQ0Msb0JBQW1CLDBCQUEwQixTQUFTLENBQUMsSUFBSSx1QkFDM0QseUJBQXlCLGtCQUFrQixnQkFDM0MsaUJBQWlCLDJCQUEyQixTQUFTLGtCQUFrQjtBQUMzRSxXQUFPLFNBQVNDLGNBQWFDLFlBQVdDLFNBQVFDLFVBQVM7QUFDdkQsVUFBSUEsYUFBWSxRQUFRO0FBQ3RCLFFBQUFBLFdBQVU7QUFBQSxNQUNaO0FBRUEsVUFBSSxRQUFRO0FBQUEsUUFDVixXQUFXO0FBQUEsUUFDWCxrQkFBa0IsQ0FBQztBQUFBLFFBQ25CLFNBQVMsT0FBTyxPQUFPLENBQUMsR0FBRyxpQkFBaUIsY0FBYztBQUFBLFFBQzFELGVBQWUsQ0FBQztBQUFBLFFBQ2hCLFVBQVU7QUFBQSxVQUNSLFdBQVdGO0FBQUEsVUFDWCxRQUFRQztBQUFBLFFBQ1Y7QUFBQSxRQUNBLFlBQVksQ0FBQztBQUFBLFFBQ2IsUUFBUSxDQUFDO0FBQUEsTUFDWDtBQUNBLFVBQUksbUJBQW1CLENBQUM7QUFDeEIsVUFBSSxjQUFjO0FBQ2xCLFVBQUksV0FBVztBQUFBLFFBQ2I7QUFBQSxRQUNBLFlBQVksU0FBUyxXQUFXLGtCQUFrQjtBQUNoRCxjQUFJQyxXQUFVLE9BQU8scUJBQXFCLGFBQWEsaUJBQWlCLE1BQU0sT0FBTyxJQUFJO0FBQ3pGLGlDQUF1QjtBQUN2QixnQkFBTSxVQUFVLE9BQU8sT0FBTyxDQUFDLEdBQUcsZ0JBQWdCLE1BQU0sU0FBU0EsUUFBTztBQUN4RSxnQkFBTSxnQkFBZ0I7QUFBQSxZQUNwQixXQUFXLFVBQVVGLFVBQVMsSUFBSSxrQkFBa0JBLFVBQVMsSUFBSUEsV0FBVSxpQkFBaUIsa0JBQWtCQSxXQUFVLGNBQWMsSUFBSSxDQUFDO0FBQUEsWUFDM0ksUUFBUSxrQkFBa0JDLE9BQU07QUFBQSxVQUNsQztBQUdBLGNBQUksbUJBQW1CLGVBQWUsWUFBWSxDQUFDLEVBQUUsT0FBT0gsbUJBQWtCLE1BQU0sUUFBUSxTQUFTLENBQUMsQ0FBQztBQUV2RyxnQkFBTSxtQkFBbUIsaUJBQWlCLE9BQU8sU0FBVSxHQUFHO0FBQzVELG1CQUFPLEVBQUU7QUFBQSxVQUNYLENBQUM7QUFDRCw2QkFBbUI7QUFDbkIsaUJBQU8sU0FBUyxPQUFPO0FBQUEsUUFDekI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxhQUFhLFNBQVMsY0FBYztBQUNsQyxjQUFJLGFBQWE7QUFDZjtBQUFBLFVBQ0Y7QUFFQSxjQUFJLGtCQUFrQixNQUFNLFVBQ3hCRSxhQUFZLGdCQUFnQixXQUM1QkMsVUFBUyxnQkFBZ0I7QUFHN0IsY0FBSSxDQUFDLGlCQUFpQkQsWUFBV0MsT0FBTSxHQUFHO0FBQ3hDO0FBQUEsVUFDRjtBQUdBLGdCQUFNLFFBQVE7QUFBQSxZQUNaLFdBQVcsaUJBQWlCRCxZQUFXLGdCQUFnQkMsT0FBTSxHQUFHLE1BQU0sUUFBUSxhQUFhLE9BQU87QUFBQSxZQUNsRyxRQUFRLGNBQWNBLE9BQU07QUFBQSxVQUM5QjtBQU1BLGdCQUFNLFFBQVE7QUFDZCxnQkFBTSxZQUFZLE1BQU0sUUFBUTtBQUtoQyxnQkFBTSxpQkFBaUIsUUFBUSxTQUFVLFVBQVU7QUFDakQsbUJBQU8sTUFBTSxjQUFjLFNBQVMsSUFBSSxJQUFJLE9BQU8sT0FBTyxDQUFDLEdBQUcsU0FBUyxJQUFJO0FBQUEsVUFDN0UsQ0FBQztBQUVELG1CQUFTLFFBQVEsR0FBRyxRQUFRLE1BQU0saUJBQWlCLFFBQVEsU0FBUztBQUNsRSxnQkFBSSxNQUFNLFVBQVUsTUFBTTtBQUN4QixvQkFBTSxRQUFRO0FBQ2Qsc0JBQVE7QUFDUjtBQUFBLFlBQ0Y7QUFFQSxnQkFBSSx3QkFBd0IsTUFBTSxpQkFBaUIsS0FBSyxHQUNwREUsTUFBSyxzQkFBc0IsSUFDM0IseUJBQXlCLHNCQUFzQixTQUMvQyxXQUFXLDJCQUEyQixTQUFTLENBQUMsSUFBSSx3QkFDcEQsT0FBTyxzQkFBc0I7QUFFakMsZ0JBQUksT0FBT0EsUUFBTyxZQUFZO0FBQzVCLHNCQUFRQSxJQUFHO0FBQUEsZ0JBQ1Q7QUFBQSxnQkFDQSxTQUFTO0FBQUEsZ0JBQ1Q7QUFBQSxnQkFDQTtBQUFBLGNBQ0YsQ0FBQyxLQUFLO0FBQUEsWUFDUjtBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBQUE7QUFBQTtBQUFBLFFBR0EsUUFBUSxTQUFTLFdBQVk7QUFDM0IsaUJBQU8sSUFBSSxRQUFRLFNBQVUsU0FBUztBQUNwQyxxQkFBUyxZQUFZO0FBQ3JCLG9CQUFRLEtBQUs7QUFBQSxVQUNmLENBQUM7QUFBQSxRQUNILENBQUM7QUFBQSxRQUNELFNBQVMsU0FBUyxVQUFVO0FBQzFCLGlDQUF1QjtBQUN2Qix3QkFBYztBQUFBLFFBQ2hCO0FBQUEsTUFDRjtBQUVBLFVBQUksQ0FBQyxpQkFBaUJILFlBQVdDLE9BQU0sR0FBRztBQUN4QyxlQUFPO0FBQUEsTUFDVDtBQUVBLGVBQVMsV0FBV0MsUUFBTyxFQUFFLEtBQUssU0FBVUUsUUFBTztBQUNqRCxZQUFJLENBQUMsZUFBZUYsU0FBUSxlQUFlO0FBQ3pDLFVBQUFBLFNBQVEsY0FBY0UsTUFBSztBQUFBLFFBQzdCO0FBQUEsTUFDRixDQUFDO0FBTUQsZUFBUyxxQkFBcUI7QUFDNUIsY0FBTSxpQkFBaUIsUUFBUSxTQUFVLE1BQU07QUFDN0MsY0FBSSxPQUFPLEtBQUssTUFDWixlQUFlLEtBQUssU0FDcEJGLFdBQVUsaUJBQWlCLFNBQVMsQ0FBQyxJQUFJLGNBQ3pDRyxVQUFTLEtBQUs7QUFFbEIsY0FBSSxPQUFPQSxZQUFXLFlBQVk7QUFDaEMsZ0JBQUksWUFBWUEsUUFBTztBQUFBLGNBQ3JCO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxjQUNBLFNBQVNIO0FBQUEsWUFDWCxDQUFDO0FBRUQsZ0JBQUksU0FBUyxTQUFTSSxVQUFTO0FBQUEsWUFBQztBQUVoQyw2QkFBaUIsS0FBSyxhQUFhLE1BQU07QUFBQSxVQUMzQztBQUFBLFFBQ0YsQ0FBQztBQUFBLE1BQ0g7QUFFQSxlQUFTLHlCQUF5QjtBQUNoQyx5QkFBaUIsUUFBUSxTQUFVSCxLQUFJO0FBQ3JDLGlCQUFPQSxJQUFHO0FBQUEsUUFDWixDQUFDO0FBQ0QsMkJBQW1CLENBQUM7QUFBQSxNQUN0QjtBQUVBLGFBQU87QUFBQSxJQUNUO0FBQUEsRUFDRjtBQW5NQSxNQVNJO0FBVEo7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQSxNQUFJLGtCQUFrQjtBQUFBLFFBQ3BCLFdBQVc7QUFBQSxRQUNYLFdBQVcsQ0FBQztBQUFBLFFBQ1osVUFBVTtBQUFBLE1BQ1o7QUFBQTtBQUFBOzs7QUNiQSxNQVVJLGtCQUNBO0FBWEo7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVUE7QUFUQSxNQUFJLG1CQUFtQixDQUFDLHdCQUFnQix1QkFBZSx1QkFBZSxxQkFBYSxnQkFBUSxjQUFNLHlCQUFpQixlQUFPLFlBQUk7QUFDN0gsTUFBSSxlQUE0QixnQ0FBZ0I7QUFBQSxRQUM5QztBQUFBLE1BQ0YsQ0FBQztBQUFBO0FBQUE7OztBQ2JEO0FBQUE7QUFBQSxNQUFBSTtBQUNBO0FBSUE7QUFBQTtBQUFBOzs7QUNnR0EsV0FBUyxvQkFBb0IsS0FBSztBQUNqQyxRQUFJLEtBQUssZUFBZSxjQUFjLE1BQU0sT0FBTztBQUNsRCxhQUFPO0FBQUEsSUFDUjtBQUVBLFVBQU0sUUFBUSxLQUFLO0FBQ25CLFFBQ0MsVUFBVSxVQUNWLFVBQVUsUUFDVCxPQUFPLFVBQVUsWUFBWSxPQUFPLFVBQVUsWUFDOUM7QUFDRCxhQUFPO0FBQUEsSUFDUjtBQUVBLFFBQUksTUFBTSxlQUFlLGNBQWMsTUFBTSxNQUFNO0FBQ2xELGFBQU8sb0JBQW9CLE1BQU0sTUFBTSxDQUFDLElBQUksU0FBUyxDQUFDO0FBQUEsSUFDdkQ7QUFFQSxVQUFNQyxVQUFTLE1BQU0sY0FBYztBQUNuQyxRQUFJQSxZQUFXLFFBQVc7QUFDekIsVUFBSSxJQUFJLFdBQVc7QUFDbEIsZUFBTyxvQkFBb0IsSUFBSSxTQUFTO0FBQUEsTUFDekMsT0FBTztBQUNOLGVBQU87QUFBQSxNQUNSO0FBQUEsSUFDRDtBQUVBLFFBQUlBLFlBQVcsS0FBSyxjQUFjLEdBQUc7QUFDcEMsYUFBTztBQUFBLElBQ1I7QUFFQSxXQUFPLG9CQUFvQixNQUFNLE1BQU0sQ0FBQyxJQUFJLFNBQVMsQ0FBQztBQUFBLEVBQ3ZEO0FBcklBLE1BMkNNO0FBM0NOO0FBQUE7QUFjQTtBQTZCQSxNQUFNLE9BQU4sY0FBbUIsT0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBLFFBSXpCLFdBQVc7QUFDVixpQkFBTyxLQUFLLFVBQVUsSUFBSTtBQUFBLFFBQzNCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsWUFBWSxjQUFjLElBQUk7QUFDN0IsaUJBQU8sT0FBTyxJQUFJLDZCQUE2QjtBQUFBLFFBQ2hEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFRQSxRQUFRLE9BQU8sV0FBVyxFQUFFLE1BQU07QUFDakMsY0FDQyxTQUFTLFVBQ1QsU0FBUyxRQUNSLE9BQU8sU0FBUyxZQUFZLE9BQU8sU0FBUyxZQUM1QztBQUNELG1CQUFPO0FBQUEsVUFDUjtBQUVBLGdCQUFNLFlBQVksT0FBTyxlQUFlLElBQUk7QUFDNUMsY0FDQyxjQUFjLFVBQ2QsY0FBYyxRQUNiLE9BQU8sY0FBYyxZQUFZLE9BQU8sY0FBYyxZQUN0RDtBQUNELG1CQUFPO0FBQUEsVUFDUjtBQUVBLGNBQUksb0JBQW9CLE1BQU0sTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLE1BQU07QUFDMUQsbUJBQU87QUFBQSxVQUNSO0FBR0EsaUJBQU8sTUFBTSxPQUFPLFdBQVcsRUFBRSxJQUFJO0FBQUEsUUFDdEM7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDM0ZBLE1BeUJNO0FBekJOO0FBQUE7QUFjQTtBQUNBO0FBVUEsTUFBTSxRQUFOLGNBQW9CLEtBQUs7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUl4QixjQUFjO0FBQ2IsZ0JBQU07QUFDTixlQUFLLE9BQU8sQ0FBQztBQUFBLFFBQ2Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxZQUFZLGNBQWMsSUFBSTtBQUM3QixpQkFBTyxPQUFPLElBQUksOEJBQThCO0FBQUEsUUFDakQ7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLFVBQVU7QUFDVCxpQkFBTyxLQUFLLEtBQUssV0FBVztBQUFBLFFBQzdCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsT0FBTztBQUNOLGNBQUksS0FBSyxRQUFRLEdBQUc7QUFDbkIsbUJBQU87QUFBQSxVQUNSO0FBRUEsaUJBQU8sS0FBSyxPQUFPLEtBQUssS0FBSyxTQUFTLENBQUM7QUFBQSxRQUN4QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBUUEsS0FBSyxPQUFPO0FBQ1gsZUFBSyxLQUFLLEtBQUssS0FBSztBQUNwQixpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxRQUFRO0FBQ1AsZUFBSyxPQUFPLENBQUM7QUFDYixpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBU0EsTUFBTTtBQUNMLGNBQUksS0FBSyxRQUFRLEdBQUc7QUFDbkIsbUJBQU87QUFBQSxVQUNSO0FBQ0EsaUJBQU8sS0FBSyxLQUFLLElBQUk7QUFBQSxRQUN0QjtBQUFBLE1BQ0Q7QUFBQTtBQUFBOzs7QUN1R0EsV0FBUyxRQUFRLFNBQVMsTUFBTSxPQUFPO0FBQ3RDLFFBQUksVUFBVSxRQUFXO0FBQ3hCLGNBQVE7QUFBQSxJQUNUO0FBQ0Esb0JBQWdCLEtBQUs7QUFFckIsVUFBTSxTQUFTLG9CQUFJLElBQUk7QUFFdkIsUUFBSSxRQUFRLElBQUksR0FBRztBQUNsQixhQUFPLEtBQUssS0FBSyxTQUFTO0FBQUEsSUFDM0I7QUFFQSxRQUFJLFNBQVMsT0FBTyxLQUFLLFFBQVEsT0FBTyxHQUFHO0FBQzFDLGlCQUFXLENBQUMsS0FBSyxLQUFLLEtBQUssT0FBTyxRQUFRLE9BQU8sR0FBRztBQUNuRCxlQUFPLElBQUksS0FBSyxnQkFBZ0IsS0FBSyxNQUFNLE9BQU8sTUFBTSxLQUFLLENBQUM7QUFBQSxNQUMvRDtBQUFBLElBQ0QsT0FBTztBQUNOLFlBQU0sTUFBTSxLQUFLLE1BQU0sU0FBUyxFQUFFLE1BQU07QUFDeEMsYUFBTyxJQUFJLEtBQUssZ0JBQWdCLEtBQUssTUFBTSxTQUFTLE1BQU0sS0FBSyxDQUFDO0FBQUEsSUFDakU7QUFFQSxXQUFPO0FBQUEsRUFDUjtBQVlBLFdBQVMsZ0JBQWdCLFNBQVMsTUFBTSxPQUFPO0FBQzlDLFFBQUksVUFBVSxRQUFXO0FBQ3hCLGNBQVE7QUFBQSxJQUNUO0FBQ0Esb0JBQWdCLEtBQUs7QUFFckIsUUFBSSxFQUFFLFFBQVEsSUFBSSxLQUFLLFNBQVMsSUFBSSxJQUFJO0FBQ3ZDLFlBQU0sSUFBSTtBQUFBLFFBQ1Q7QUFBQSxNQUNEO0FBQUEsSUFDRDtBQUVBLFFBQUk7QUFDSixRQUFJLFNBQVMsSUFBSSxHQUFHO0FBQ25CLFVBQUksU0FBUyxJQUFJO0FBQ2hCLGVBQU87QUFBQSxNQUNSO0FBRUEsY0FBUSxLQUFLLE1BQU0sU0FBUztBQUFBLElBQzdCO0FBRUEsUUFBSSxVQUFVLE1BQU0sTUFBTTtBQUUxQixRQUFJLFlBQVksS0FBSyxVQUFVO0FBQzlCLGFBQU8sUUFBUSxLQUFLLE1BQU0sU0FBUyxNQUFNLEtBQUssU0FBUyxHQUFHLEtBQUs7QUFBQSxJQUNoRTtBQUVBLFFBQUksU0FBUyxPQUFPLEtBQUssUUFBUSxPQUFPLEdBQUc7QUFDMUMsVUFBSTtBQUNKLFVBQUksbUJBQW1CLE9BQU8sbUJBQW1CLFNBQVM7QUFDekQsaUJBQVMsUUFBUSxJQUFJLE9BQU87QUFBQSxNQUM3QixXQUFXLG1CQUFtQixPQUFPLG1CQUFtQixTQUFTO0FBQ2hFLGtCQUFVLFNBQVMsT0FBTztBQUMxQix3QkFBZ0IsT0FBTztBQUN2QixpQkFBUyxDQUFDLEdBQUcsT0FBTyxJQUFJLE9BQU87QUFBQSxNQUNoQyxXQUFXLE9BQU8sWUFBWSxjQUFjLG1CQUFtQixTQUFTO0FBQ3ZFLGNBQU0sTUFBTSxpREFBaUQ7QUFBQSxNQUM5RCxXQUFXLFFBQVEsT0FBTyxHQUFHO0FBQzVCLGtCQUFVLFNBQVMsT0FBTztBQUMxQix3QkFBZ0IsT0FBTztBQUN2QixpQkFBUyxVQUFVLE9BQU87QUFBQSxNQUMzQixPQUFPO0FBQ04saUJBQVMsVUFBVSxPQUFPO0FBQUEsTUFDM0I7QUFFQSxVQUFJLFNBQVMsTUFBTSxLQUFLLFFBQVEsTUFBTSxHQUFHO0FBQ3hDLGVBQU8sZ0JBQWdCLEtBQUssTUFBTSxRQUFRLE1BQU0sS0FBSyxTQUFTLEdBQUcsS0FBSztBQUFBLE1BQ3ZFO0FBRUEsVUFBSSxNQUFNLFNBQVMsR0FBRztBQUNyQixjQUFNLE1BQU0sa0NBQWtDLE1BQU0sS0FBSyxTQUFTLENBQUMsR0FBRztBQUFBLE1BQ3ZFO0FBRUEsVUFBSSxVQUFVLE1BQU07QUFDbkIsY0FBTSxhQUFhLE9BQU87QUFBQSxVQUN6QixPQUFPLGVBQWUsT0FBTztBQUFBLFVBQzdCO0FBQUEsUUFDRDtBQUVBLFlBQUksQ0FBQyxRQUFRLGVBQWUsT0FBTyxLQUFLLGVBQWUsUUFBVztBQUNqRSxnQkFBTSxNQUFNLG1CQUFtQixPQUFPO0FBQUEsUUFDdkM7QUFBQSxNQUNEO0FBRUEsYUFBTztBQUFBLElBQ1I7QUFFQSxVQUFNLFVBQVUsb0JBQW9CLE9BQU8sT0FBTyxhQUFhLElBQUksRUFBRTtBQUFBLEVBQ3RFO0FBY0EsV0FBUyxnQkFBZ0IsU0FBUyxNQUFNLE9BQU87QUFDOUMsUUFBSSxFQUFFLFFBQVEsSUFBSSxLQUFLLFNBQVMsSUFBSSxJQUFJO0FBQ3ZDLFlBQU0sSUFBSSxNQUFNLGlEQUFpRDtBQUFBLElBQ2xFO0FBRUEsUUFBSTtBQUNKLFFBQUksUUFBUSxJQUFJLEdBQUc7QUFDbEIsVUFBSSxLQUFLLFdBQVcsR0FBRztBQUN0QjtBQUFBLE1BQ0Q7QUFFQSxjQUFRO0FBQUEsSUFDVCxPQUFPO0FBQ04sY0FBUSxLQUFLLE1BQU0sU0FBUztBQUFBLElBQzdCO0FBRUEsUUFBSSxPQUFPLE1BQU0sSUFBSTtBQUNyQixVQUFNLFVBQVUsTUFBTSxLQUFLLFNBQVM7QUFFcEMsVUFBTSxRQUFRLElBQUksTUFBTTtBQUN4QixRQUFJLFVBQVU7QUFDZCxXQUFPLE1BQU07QUFDWixVQUFJO0FBQ0gsd0JBQWdCLEtBQUssTUFBTSxTQUFTLFNBQVMsSUFBSTtBQUNqRDtBQUFBLE1BQ0QsU0FBUyxHQUFHO0FBQUEsTUFBQztBQUViLFlBQU0sS0FBSyxPQUFPO0FBQ2xCLFlBQU0sSUFBSTtBQUNWLGdCQUFVLE1BQU0sS0FBSyxTQUFTO0FBRTlCLFVBQUksWUFBWSxHQUFJO0FBQUEsSUFDckI7QUFFQSxXQUFPLENBQUMsTUFBTSxRQUFRLEdBQUc7QUFDeEIsZ0JBQVUsTUFBTSxJQUFJO0FBQ3BCLFVBQUksTUFBTSxDQUFDO0FBRVgsVUFBSSxDQUFDLE1BQU0sUUFBUSxHQUFHO0FBQ3JCLGNBQU0sSUFBSSxNQUFNLEtBQUssRUFBRSxNQUFNLFNBQVMsRUFBRSxJQUFJO0FBQzVDLFlBQUksVUFBVSxTQUFTLENBQUMsQ0FBQyxHQUFHO0FBQzNCLGdCQUFNLENBQUM7QUFBQSxRQUNSO0FBQUEsTUFDRDtBQUVBLHNCQUFnQixLQUFLLE1BQU0sU0FBUyxTQUFTLEdBQUc7QUFBQSxJQUNqRDtBQUVBLFVBQU0sU0FBUyxnQkFBZ0IsS0FBSyxNQUFNLFNBQVMsT0FBTztBQUUxRCxRQUFJLEVBQUUsU0FBUyxPQUFPLEtBQUssUUFBUSxPQUFPLElBQUk7QUFDN0MsWUFBTSxVQUFVLHFCQUFxQixPQUFPLE9BQU8scUJBQXFCO0FBQUEsSUFDekU7QUFFQSxRQUFJLGtCQUFrQixPQUFPLGtCQUFrQixTQUFTO0FBQ3ZELGFBQU8sSUFBSSxNQUFNLEtBQUs7QUFBQSxJQUN2QixXQUFXLGtCQUFrQixPQUFPLGtCQUFrQixTQUFTO0FBQzlELGFBQU8sT0FBTyxLQUFLO0FBQUEsSUFDcEIsV0FBVyxPQUFPLFlBQVksY0FBYyxrQkFBa0IsU0FBUztBQUN0RSxZQUFNLE1BQU0sMERBQTBEO0FBQUEsSUFDdkUsV0FBVyxRQUFRLE1BQU0sR0FBRztBQUMzQixhQUFPLFNBQVMsSUFBSTtBQUNwQixzQkFBZ0IsSUFBSTtBQUNwQixxQkFBZSxRQUFRLEtBQUssTUFBTSxLQUFLO0FBQUEsSUFDeEMsT0FBTztBQUNOLHFCQUFlLFFBQVEsTUFBTSxLQUFLO0FBQUEsSUFDbkM7QUFBQSxFQUNEO0FBUUEsV0FBUyxlQUFlLFFBQVEsS0FBSyxPQUFPO0FBQzNDLFFBQUksQ0FBQyxPQUFPLGVBQWUsR0FBRyxHQUFHO0FBQ2hDLGFBQU8sR0FBRyxJQUFJO0FBQ2Q7QUFBQSxJQUNEO0FBRUEsUUFBSSxVQUFVLFFBQVc7QUFDeEIsYUFBTyxPQUFPLEdBQUc7QUFBQSxJQUNsQjtBQUVBLFdBQU8sR0FBRyxJQUFJO0FBQUEsRUFDZjtBQWVBLFdBQVMsbUJBQW1CLFNBQVMsTUFBTTtBQUMxQyxRQUFJLEVBQUUsUUFBUSxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUk7QUFDdkMsWUFBTSxJQUFJO0FBQUEsUUFDVDtBQUFBLE1BQ0Q7QUFBQSxJQUNEO0FBRUEsUUFBSTtBQUNKLFFBQUksUUFBUSxJQUFJLEdBQUc7QUFDbEIsVUFBSSxLQUFLLFdBQVcsR0FBRztBQUN0QjtBQUFBLE1BQ0Q7QUFFQSxjQUFRO0FBQUEsSUFDVCxPQUFPO0FBQ04sY0FBUSxLQUFLLE1BQU0sU0FBUztBQUFBLElBQzdCO0FBRUEsUUFBSSxPQUFPLE1BQU0sSUFBSTtBQUNyQixVQUFNLFVBQVUsTUFBTSxLQUFLLFNBQVM7QUFFcEMsVUFBTSxTQUFTLGdCQUFnQixLQUFLLE1BQU0sU0FBUyxPQUFPO0FBRTFELFFBQUksa0JBQWtCLEtBQUs7QUFDMUIsYUFBTyxPQUFPLElBQUk7QUFBQSxJQUNuQixXQUNDLGtCQUFrQixPQUNsQixrQkFBa0IsV0FDbEIsa0JBQWtCLFdBQ2pCLE9BQU8sWUFBWSxjQUFjLGtCQUFrQixTQUNuRDtBQUNELFlBQU0sTUFBTSw2REFBNkQ7QUFBQSxJQUMxRSxXQUFXLFFBQVEsTUFBTSxHQUFHO0FBQzNCLGFBQU8sU0FBUyxJQUFJO0FBQ3BCLHNCQUFnQixJQUFJO0FBQ3BCLGFBQU8sT0FBTyxJQUFJO0FBQUEsSUFDbkIsT0FBTztBQUNOLGFBQU8sT0FBTyxJQUFJO0FBQUEsSUFDbkI7QUFBQSxFQUNEO0FBeGNBLE1BcUNNLFdBTUEsVUFnREE7QUEzRk47QUFBQTtBQWNBO0FBQ0E7QUFPQTtBQUNBO0FBY0EsTUFBTSxZQUFZO0FBTWxCLE1BQU0sV0FBVztBQWdEakIsTUFBTSxhQUFOLGNBQXlCLEtBQUs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBUTdCLFlBQVksUUFBUTtBQUNuQixnQkFBTTtBQUVOLGNBQUksWUFBWSxNQUFNLEdBQUc7QUFDeEIsa0JBQU0sSUFBSSxNQUFNLHlDQUF5QztBQUFBLFVBQzFEO0FBRUEsZUFBSyxTQUFTO0FBQ2QsZUFBSyxXQUFXO0FBQUEsUUFDakI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBU0EsWUFBWSxVQUFVO0FBQ3JCLHlCQUFlLFFBQVE7QUFDdkIsZUFBSyxXQUFXO0FBQ2hCLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQWFBLE9BQU8sTUFBTTtBQUNaLGlCQUFPLGdCQUFnQixLQUFLLE1BQU0sS0FBSyxRQUFRLElBQUk7QUFBQSxRQUNwRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQWFBLE9BQU8sTUFBTSxPQUFPO0FBQ25CLDBCQUFnQixLQUFLLE1BQU0sS0FBSyxRQUFRLE1BQU0sS0FBSztBQUNuRCxpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFhQSxVQUFVLE1BQU07QUFDZiw2QkFBbUIsS0FBSyxNQUFNLEtBQUssUUFBUSxJQUFJO0FBQy9DLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBV0EsT0FBTyxNQUFNO0FBQ1osY0FBSTtBQUNILDRCQUFnQixLQUFLLE1BQU0sS0FBSyxRQUFRLE1BQU0sSUFBSTtBQUNsRCxtQkFBTztBQUFBLFVBQ1IsU0FBUyxHQUFHO0FBQUEsVUFBQztBQUViLGlCQUFPO0FBQUEsUUFDUjtBQUFBLE1BQ0Q7QUFBQTtBQUFBOzs7QUNzRUEsV0FBUyxZQUFZLE9BQU87QUFDM0IsUUFBSSxFQUFFLGdCQUFnQjtBQUNyQixZQUFNLE1BQU0sb0NBQW9DO0FBQ2pELG1CQUFlLEtBQUs7QUFDcEIsWUFBUSxNQUFNLEtBQUs7QUFDbkIsUUFBSSxLQUFLLFNBQVMsS0FBSyxHQUFHO0FBQ3pCLFdBQUssT0FBTyxLQUFLO0FBQ2pCLGFBQU87QUFBQSxJQUNSO0FBQ0EsU0FBSyxJQUFJLEtBQUs7QUFDZCxXQUFPO0FBQUEsRUFDUjtBQTVRQSxNQStCTTtBQS9CTjtBQUFBO0FBY0E7QUFDQTtBQUNBO0FBZUEsTUFBTSxZQUFOLGNBQXdCLEtBQUs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBSzVCLFlBQVlDLE9BQU07QUFDakIsZ0JBQU07QUFDTixlQUFLLFNBQVMsb0JBQUksSUFBSTtBQUV0QixjQUFJLE9BQU9BLFVBQVMsYUFBYTtBQUNoQyxpQkFBSyxJQUFJQSxLQUFJO0FBQUEsVUFDZDtBQUFBLFFBQ0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxjQUFjO0FBQ2IsaUJBQU8sS0FBSyxPQUFPLFFBQVEsRUFBRTtBQUFBLFFBQzlCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsQ0FBQyxPQUFPLFFBQVEsSUFBSTtBQUluQixjQUFJLFFBQVE7QUFDWixnQkFBTSxVQUFVLEtBQUssUUFBUTtBQUU3QixpQkFBTztBQUFBLFlBQ04sTUFBTSxNQUFNO0FBQ1gsa0JBQUksUUFBUSxRQUFRLFFBQVE7QUFDM0IsdUJBQU8sRUFBRSxPQUFPLFVBQVUsT0FBTyxHQUFHLE1BQU0sTUFBTTtBQUFBLGNBQ2pELE9BQU87QUFDTix1QkFBTyxFQUFFLE1BQU0sS0FBSztBQUFBLGNBQ3JCO0FBQUEsWUFDRDtBQUFBLFVBQ0Q7QUFBQSxRQUNEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVNBLFNBQVMsT0FBTztBQUNmLGNBQUksU0FBUyxLQUFLLEdBQUc7QUFDcEIsb0JBQVEsTUFBTSxLQUFLO0FBQ25CLGdCQUFJLFVBQVU7QUFDZCxrQkFBTSxNQUFNLEdBQUcsRUFBRSxRQUFRLENBQUMsVUFBVTtBQUNuQyxrQkFBSSxLQUFLLE9BQU8sSUFBSSxNQUFNLEtBQUssQ0FBQyxNQUFNLE1BQU8sUUFBTztBQUNwRDtBQUFBLFlBQ0QsQ0FBQztBQUNELG1CQUFPLFVBQVUsSUFBSSxPQUFPO0FBQUEsVUFDN0I7QUFFQSxjQUFJLFdBQVcsS0FBSyxHQUFHO0FBQ3RCLGdCQUFJLFVBQVU7QUFDZCx1QkFBVyxTQUFTLE9BQU87QUFDMUIsNkJBQWUsS0FBSztBQUNwQixrQkFBSSxLQUFLLE9BQU8sSUFBSSxNQUFNLEtBQUssQ0FBQyxNQUFNLE1BQU8sUUFBTztBQUNwRDtBQUFBLFlBQ0Q7QUFDQSxtQkFBTyxVQUFVLElBQUksT0FBTztBQUFBLFVBQzdCO0FBRUEsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBVUEsSUFBSSxPQUFPO0FBQ1YsY0FBSSxTQUFTLEtBQUssR0FBRztBQUNwQixrQkFBTSxNQUFNLEdBQUcsRUFBRSxRQUFRLENBQUMsVUFBVTtBQUNuQyxtQkFBSyxPQUFPLElBQUksTUFBTSxLQUFLLENBQUM7QUFBQSxZQUM3QixDQUFDO0FBQUEsVUFDRixXQUFXLFdBQVcsS0FBSyxHQUFHO0FBQzdCLHVCQUFXLFNBQVMsT0FBTztBQUMxQiw2QkFBZSxLQUFLO0FBQ3BCLG1CQUFLLE9BQU8sSUFBSSxNQUFNLEtBQUssQ0FBQztBQUFBLFlBQzdCO0FBQUEsVUFDRCxXQUFXLE9BQU8sVUFBVSxhQUFhO0FBQ3hDLGtCQUFNLElBQUksVUFBVSxtQkFBbUI7QUFBQSxVQUN4QztBQUVBLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU9BLFFBQVE7QUFDUCxlQUFLLE9BQU8sTUFBTTtBQUNsQixpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFVQSxPQUFPLE9BQU87QUFDYixjQUFJLFNBQVMsS0FBSyxHQUFHO0FBQ3BCLGtCQUFNLE1BQU0sR0FBRyxFQUFFLFFBQVEsQ0FBQyxVQUFVO0FBQ25DLG1CQUFLLE9BQU8sT0FBTyxNQUFNLEtBQUssQ0FBQztBQUFBLFlBQ2hDLENBQUM7QUFBQSxVQUNGLFdBQVcsV0FBVyxLQUFLLEdBQUc7QUFDN0IsdUJBQVcsU0FBUyxPQUFPO0FBQzFCLDZCQUFlLEtBQUs7QUFDcEIsbUJBQUssT0FBTyxPQUFPLE1BQU0sS0FBSyxDQUFDO0FBQUEsWUFDaEM7QUFBQSxVQUNELFdBQVcsT0FBTyxVQUFVLGFBQWE7QUFDeEMsa0JBQU0sSUFBSSxVQUFVLHFCQUFxQixxQkFBcUI7QUFBQSxVQUMvRDtBQUVBLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFZQSxRQUFRLE9BQU8sVUFBVTtBQUN4Qix5QkFBZSxLQUFLO0FBQ3BCLHlCQUFlLFFBQVE7QUFDdkIsY0FBSSxDQUFDLEtBQUssU0FBUyxLQUFLLEdBQUc7QUFDMUIsbUJBQU87QUFBQSxVQUNSO0FBRUEsZ0JBQU1DLEtBQUksTUFBTSxLQUFLLEtBQUssTUFBTTtBQUNoQyxnQkFBTSxJQUFJQSxHQUFFLFFBQVEsS0FBSztBQUN6QixjQUFJLE1BQU0sR0FBSSxRQUFPO0FBRXJCLFVBQUFBLEdBQUUsT0FBTyxHQUFHLEdBQUcsUUFBUTtBQUN2QixlQUFLLFNBQVMsb0JBQUksSUFBSTtBQUN0QixlQUFLLElBQUlBLEVBQUM7QUFFVixpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFVQSxPQUFPLE9BQU87QUFDYixjQUFJLFNBQVMsS0FBSyxHQUFHO0FBQ3BCLGtCQUFNLE1BQU0sR0FBRyxFQUFFLFFBQVEsQ0FBQyxVQUFVO0FBQ25DLDBCQUFZLEtBQUssTUFBTSxLQUFLO0FBQUEsWUFDN0IsQ0FBQztBQUFBLFVBQ0YsV0FBVyxXQUFXLEtBQUssR0FBRztBQUM3Qix1QkFBVyxTQUFTLE9BQU87QUFDMUIsMEJBQVksS0FBSyxNQUFNLEtBQUs7QUFBQSxZQUM3QjtBQUFBLFVBQ0QsV0FBVyxPQUFPLFVBQVUsYUFBYTtBQUN4QyxrQkFBTSxJQUFJLFVBQVUscUJBQXFCLHFCQUFxQjtBQUFBLFVBQy9EO0FBRUEsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsVUFBVTtBQUNULGlCQUFPLE1BQU0sS0FBSyxLQUFLLE1BQU07QUFBQSxRQUM5QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBUUEsUUFBUSxVQUFVO0FBQ2pCLDJCQUFpQixRQUFRO0FBQ3pCLGVBQUssT0FBTyxRQUFRLFFBQVE7QUFDNUIsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsV0FBVztBQUNWLGlCQUFPLEtBQUssUUFBUSxFQUFFLEtBQUssR0FBRztBQUFBLFFBQy9CO0FBQUEsTUFDRDtBQUFBO0FBQUE7OztBQ3pQQSxNQWdGTSxlQU9BLGtCQVNBLG1CQVNBLHVCQVNBLDRCQVNBLHlCQVNBLHlCQU9BLHdCQUtBLHNCQU9BLDhCQU9BLCtCQU9BLDJCQU9BLDBCQU9BLG9DQU9BLDBCQU9BLHdCQU9BLHFCQU9BLDBCQU9BLDZCQU9BLDJCQU9BLGdCQU9BLG9CQWNBLHNCQU9BLHdCQU9BLHlCQVNBLGdDQVNBLFlBY0EsVUFRQSxjQVFBLGlCQU9BLGlCQU9BLGVBTUEsZ0JBT0EsZ0JBT0E7QUF6Vk4sTUFBQUMsa0JBQUE7QUFBQTtBQWdGQSxNQUFNLGdCQUFnQjtBQU90QixNQUFNLG1CQUFtQjtBQVN6QixNQUFNLG9CQUFvQixHQUFHLGdCQUFnQjtBQVM3QyxNQUFNLHdCQUF3QixHQUFHLGdCQUFnQjtBQVNqRCxNQUFNLDZCQUE2QixHQUFHLGdCQUFnQjtBQVN0RCxNQUFNLDBCQUEwQixHQUFHLGdCQUFnQjtBQVNuRCxNQUFNLDBCQUEwQjtBQU9oQyxNQUFNLHlCQUF5QixHQUFHLGdCQUFnQjtBQUtsRCxNQUFNLHVCQUF1QixHQUFHLHNCQUFzQjtBQU90RCxNQUFNLCtCQUErQixHQUFHLGdCQUFnQjtBQU94RCxNQUFNLGdDQUFnQyxHQUFHLGdCQUFnQjtBQU96RCxNQUFNLDRCQUE0QixHQUFHLGdCQUFnQjtBQU9yRCxNQUFNLDJCQUEyQixHQUFHLGdCQUFnQjtBQU9wRCxNQUFNLHFDQUFxQyxHQUFHLGdCQUFnQjtBQU85RCxNQUFNLDJCQUEyQixHQUFHLGdCQUFnQjtBQU9wRCxNQUFNLHlCQUF5QixHQUFHLGdCQUFnQjtBQU9sRCxNQUFNLHNCQUFzQixHQUFHLGdCQUFnQjtBQU8vQyxNQUFNLDJCQUEyQixHQUFHLGdCQUFnQjtBQU9wRCxNQUFNLDhCQUE4QixHQUFHLHNCQUFzQjtBQU83RCxNQUFNLDRCQUE0QixHQUFHLGdCQUFnQjtBQU9yRCxNQUFNLGlCQUFpQixHQUFHLGdCQUFnQjtBQU8xQyxNQUFNLHFCQUFxQjtBQWMzQixNQUFNLHVCQUF1QixHQUFHLGdCQUFnQjtBQU9oRCxNQUFNLHlCQUF5QixHQUFHLGdCQUFnQjtBQU9sRCxNQUFNLDBCQUEwQixPQUFPO0FBQUEsUUFDdEM7QUFBQSxNQUNEO0FBT0EsTUFBTSxpQ0FBaUMsT0FBTztBQUFBLFFBQzdDO0FBQUEsTUFDRDtBQU9BLE1BQU0sYUFBYTtBQWNuQixNQUFNLFdBQVc7QUFRakIsTUFBTSxlQUFlO0FBUXJCLE1BQU0sa0JBQWtCO0FBT3hCLE1BQU0sa0JBQWtCO0FBT3hCLE1BQU0sZ0JBQWdCO0FBTXRCLE1BQU0saUJBQWlCO0FBT3ZCLE1BQU0saUJBQWlCO0FBT3ZCLE1BQU0sa0JBQWtCO0FBQUE7QUFBQTs7O0FDclN4QixXQUFTLHNCQUFzQixTQUFTO0FBQ3ZDLFdBQU8sdUJBQXVCLFNBQVMsb0JBQW9CO0FBQUEsRUFDNUQ7QUFhQSxXQUFTLGdCQUFnQixTQUFTQyxTQUFRLFFBQVE7QUFDakQscUJBQWlCLFNBQVMsV0FBVztBQUNyQyxtQkFBZUEsT0FBTTtBQUVyQixRQUFJLFVBQVVBLE9BQU0sTUFBTSxRQUFXO0FBQ3BDLGNBQVFBLE9BQU0sSUFBSSxvQkFBSSxJQUFJO0FBQUEsSUFDM0I7QUFFQSxzQkFBa0IsU0FBUyxzQkFBc0JBLFFBQU8sU0FBUyxDQUFDO0FBQ2xFLFlBQVFBLE9BQU0sRUFBRSxJQUFJLE1BQU07QUFDMUIsV0FBTztBQUFBLEVBQ1I7QUFZQSxXQUFTLGlCQUFpQixTQUFTQSxTQUFRO0FBQzFDLHFCQUFpQixTQUFTLFdBQVc7QUFDckMsbUJBQWVBLE9BQU07QUFFckIsUUFBSSxVQUFVQSxPQUFNLE1BQU0sUUFBVztBQUNwQyxhQUFPO0FBQUEsSUFDUjtBQUVBLHlCQUFxQixTQUFTLHNCQUFzQkEsUUFBTyxTQUFTLENBQUM7QUFDckUsV0FBTyxRQUFRQSxPQUFNO0FBQ3JCLFdBQU87QUFBQSxFQUNSO0FBWUEsV0FBUyxjQUFjLFNBQVNBLFNBQVE7QUFDdkMscUJBQWlCLFNBQVMsV0FBVztBQUNyQyxtQkFBZUEsT0FBTTtBQUVyQixRQUFJLFVBQVVBLE9BQU0sTUFBTSxRQUFXO0FBQ3BDLGFBQU87QUFBQSxJQUNSO0FBRUEsV0FBTztBQUFBLE1BQ047QUFBQSxNQUNBO0FBQUEsTUFDQUEsUUFBTyxTQUFTO0FBQUEsSUFDakI7QUFBQSxFQUNEO0FBa0JBLFdBQVMsaUJBQWlCLFNBQVNBLFNBQVE7QUFDMUMscUJBQWlCLFNBQVMsV0FBVztBQUNyQyxtQkFBZUEsT0FBTTtBQUVyQixRQUFJLFVBQVVBLE9BQU0sTUFBTSxRQUFXO0FBQ3BDLFlBQU0sSUFBSSxNQUFNLCtCQUErQkEsUUFBTyxTQUFTLENBQUMsRUFBRTtBQUFBLElBQ25FO0FBRUEsV0FBTyxVQUFVQSxPQUFNLEVBQUUsT0FBTyxRQUFRLEVBQUU7QUFBQSxFQUMzQztBQWVBLFdBQVMscUJBQXFCLFNBQVMsS0FBSyxPQUFPO0FBQ2xELHFCQUFpQixTQUFTLFdBQVc7QUFDckMsbUJBQWUsS0FBSztBQUNwQixtQkFBZSxHQUFHO0FBRWxCLFFBQUksQ0FBQyxRQUFRLGFBQWEsR0FBRyxHQUFHO0FBQy9CLGNBQVEsYUFBYSxLQUFLLEtBQUs7QUFDL0IsYUFBTztBQUFBLElBQ1I7QUFFQSxZQUFRO0FBQUEsTUFDUDtBQUFBLE1BQ0EsSUFBSSxVQUFVLFFBQVEsYUFBYSxHQUFHLENBQUMsRUFBRSxPQUFPLEtBQUssRUFBRSxTQUFTO0FBQUEsSUFDakU7QUFFQSxXQUFPO0FBQUEsRUFDUjtBQWFBLFdBQVMsa0JBQWtCLFNBQVMsS0FBSyxPQUFPO0FBQy9DLHFCQUFpQixTQUFTLFdBQVc7QUFDckMsbUJBQWUsS0FBSztBQUNwQixtQkFBZSxHQUFHO0FBRWxCLFFBQUksQ0FBQyxRQUFRLGFBQWEsR0FBRyxHQUFHO0FBQy9CLGNBQVEsYUFBYSxLQUFLLEtBQUs7QUFDL0IsYUFBTztBQUFBLElBQ1I7QUFFQSxZQUFRO0FBQUEsTUFDUDtBQUFBLE1BQ0EsSUFBSSxVQUFVLFFBQVEsYUFBYSxHQUFHLENBQUMsRUFBRSxJQUFJLEtBQUssRUFBRSxTQUFTO0FBQUEsSUFDOUQ7QUFFQSxXQUFPO0FBQUEsRUFDUjtBQWVBLFdBQVMscUJBQXFCLFNBQVMsS0FBSyxPQUFPO0FBQ2xELHFCQUFpQixTQUFTLFdBQVc7QUFDckMsbUJBQWUsS0FBSztBQUNwQixtQkFBZSxHQUFHO0FBRWxCLFFBQUksQ0FBQyxRQUFRLGFBQWEsR0FBRyxHQUFHO0FBQy9CLGFBQU87QUFBQSxJQUNSO0FBRUEsWUFBUTtBQUFBLE1BQ1A7QUFBQSxNQUNBLElBQUksVUFBVSxRQUFRLGFBQWEsR0FBRyxDQUFDLEVBQUUsT0FBTyxLQUFLLEVBQUUsU0FBUztBQUFBLElBQ2pFO0FBRUEsV0FBTztBQUFBLEVBQ1I7QUFlQSxXQUFTLHVCQUF1QixTQUFTLEtBQUssT0FBTztBQUNwRCxxQkFBaUIsU0FBUyxXQUFXO0FBQ3JDLG1CQUFlLEtBQUs7QUFDcEIsbUJBQWUsR0FBRztBQUVsQixRQUFJLENBQUMsUUFBUSxhQUFhLEdBQUcsR0FBRztBQUMvQixhQUFPO0FBQUEsSUFDUjtBQUVBLFdBQU8sSUFBSSxVQUFVLFFBQVEsYUFBYSxHQUFHLENBQUMsRUFBRSxTQUFTLEtBQUs7QUFBQSxFQUMvRDtBQWNBLFdBQVMsc0JBQXNCLFNBQVMsS0FBSyxNQUFNLElBQUk7QUFDdEQscUJBQWlCLFNBQVMsV0FBVztBQUNyQyxtQkFBZSxJQUFJO0FBQ25CLG1CQUFlLEVBQUU7QUFDakIsbUJBQWUsR0FBRztBQUVsQixRQUFJLENBQUMsUUFBUSxhQUFhLEdBQUcsR0FBRztBQUMvQixhQUFPO0FBQUEsSUFDUjtBQUVBLFlBQVE7QUFBQSxNQUNQO0FBQUEsTUFDQSxJQUFJLFVBQVUsUUFBUSxhQUFhLEdBQUcsQ0FBQyxFQUFFLFFBQVEsTUFBTSxFQUFFLEVBQUUsU0FBUztBQUFBLElBQ3JFO0FBRUEsV0FBTztBQUFBLEVBQ1I7QUFZQSxXQUFTLHFCQUFxQixTQUFTLEtBQUs7QUFDM0MscUJBQWlCLFNBQVMsV0FBVztBQUNyQyxtQkFBZSxHQUFHO0FBRWxCLFFBQUksQ0FBQyxRQUFRLGFBQWEsR0FBRyxHQUFHO0FBQy9CLGFBQU87QUFBQSxJQUNSO0FBRUEsWUFBUSxhQUFhLEtBQUssRUFBRTtBQUU1QixXQUFPO0FBQUEsRUFDUjtBQThCQSxXQUFTLHVCQUF1QixTQUFTLEtBQUssT0FBTztBQUNwRCxxQkFBaUIsU0FBUyxrQkFBa0IsYUFBYSxDQUFDO0FBRTFELFFBQUksUUFBUSxhQUFhLEdBQUcsR0FBRztBQUM5QixVQUFJLFVBQVUsUUFBVztBQUN4QixlQUFPO0FBQUEsTUFDUjtBQUVBLFVBQUksUUFBUSxhQUFhLEdBQUcsTUFBTSxPQUFPO0FBQ3hDLGVBQU87QUFBQSxNQUNSO0FBQUEsSUFDRDtBQUVBLFFBQUksV0FBVyxlQUFlLEdBQUc7QUFDakMsUUFBSSxVQUFVLE9BQVcsYUFBWSxJQUFJLGVBQWUsS0FBSyxDQUFDO0FBQzlELFVBQU0sU0FBUyxRQUFRLFFBQVEsSUFBSSxRQUFRLEdBQUc7QUFDOUMsUUFBSSxrQkFBa0IsYUFBYTtBQUNsQyxhQUFPO0FBQUEsSUFDUjtBQUNBLFdBQU87QUFBQSxFQUNSO0FBZ0NBLFdBQVMsbUJBQW1CLFNBQVMsV0FBVztBQUMvQyxxQkFBaUIsU0FBUyxrQkFBa0IsYUFBYSxDQUFDO0FBRTFELFFBQUksU0FBUyxXQUFXLFNBQVMsZUFBZSxTQUFTLENBQUMsR0FBRztBQUM1RCxhQUFPO0FBQUEsSUFDUjtBQUVBLFVBQU0sU0FBUyxRQUFRLFFBQVEsSUFBSSxTQUFTLEVBQUU7QUFDOUMsUUFBSSxrQkFBa0IsYUFBYTtBQUNsQyxhQUFPO0FBQUEsSUFDUjtBQUVBLFdBQU87QUFBQSxFQUNSO0FBaGFBO0FBQUE7QUFjQTtBQUNBO0FBQ0E7QUFLQSxNQUFBQztBQUFBO0FBQUE7OztBQzBDQSxXQUFTLGNBQWM7QUFDdEIsVUFBTUMsWUFBVyxVQUFVLElBQUksVUFBVTtBQUN6QyxRQUFJLE9BQU9BLGNBQWEsVUFBVTtBQUNqQyxZQUFNLElBQUksTUFBTSwyQkFBMkI7QUFBQSxJQUM1QztBQUVBLFdBQU9BO0FBQUEsRUFDUjtBQXdDQSxXQUFTQyxhQUFZO0FBQ3BCLFVBQU1DLFVBQVMsVUFBVSxJQUFJLFFBQVE7QUFDckMsUUFBSSxPQUFPQSxZQUFXLFVBQVU7QUFDL0IsWUFBTSxJQUFJLE1BQU0sMkJBQTJCO0FBQUEsSUFDNUM7QUFFQSxXQUFPQTtBQUFBLEVBQ1I7QUF1Q0EsV0FBUyw4QkFBOEIsTUFBTTtBQUM1QyxtQkFBZSxJQUFJO0FBRW5CLFVBQU1GLFlBQVcsWUFBWTtBQUM3QixVQUFNLFdBQVdBLFVBQVMsY0FBYyxVQUFVO0FBQ2xELGFBQVMsWUFBWTtBQUVyQixXQUFPLFNBQVM7QUFBQSxFQUNqQjtBQWFBLFdBQVMseUJBQXlCLFNBQVMsVUFBVTtBQUNwRCxRQUFJLENBQUMsU0FBUztBQUNiLGFBQU87QUFBQSxJQUNSO0FBR0EsUUFBSSxRQUFRLE9BQU8sVUFBVTtBQUM1QixhQUFPO0FBQUEsSUFDUjtBQUdBLFFBQUksUUFBUSxZQUFZO0FBQ3ZCLFlBQU0sU0FBUyxRQUFRLFdBQVcsZUFBZSxRQUFRO0FBQ3pELFVBQUksUUFBUTtBQUNYLGVBQU87QUFBQSxNQUNSO0FBQUEsSUFDRDtBQUdBLFFBQUksWUFBWSxTQUFTLG1CQUFtQixZQUFZLFVBQVU7QUFDakUsWUFBTSxTQUFTLFNBQVMsZUFBZSxRQUFRO0FBQy9DLFVBQUksUUFBUTtBQUNYLGVBQU87QUFBQSxNQUNSO0FBQUEsSUFDRDtBQUdBLFVBQU0sV0FBVyxRQUFRLFlBQVk7QUFDckMsUUFBSSxZQUFZLG9CQUFvQixZQUFZO0FBQy9DLGFBQU8seUJBQXlCLFNBQVMsTUFBTSxRQUFRO0FBQUEsSUFDeEQ7QUFHQSxXQUFPLHlCQUF5QixRQUFRLGVBQWUsUUFBUTtBQUFBLEVBQ2hFO0FBWUEsV0FBUywrQkFBK0IsU0FBUyxVQUFVO0FBQzFELFFBQUksQ0FBQyxXQUFXLENBQUMsVUFBVTtBQUMxQixhQUFPO0FBQUEsSUFDUjtBQUdBLFFBQUksUUFBUSxZQUFZO0FBQ3ZCLFlBQU0sU0FBUyxRQUFRLFdBQVcsY0FBYyxRQUFRO0FBQ3hELFVBQUksUUFBUTtBQUNYLGVBQU87QUFBQSxNQUNSO0FBQUEsSUFDRDtBQUVBLFFBQUksWUFBWSxTQUFTLGlCQUFpQjtBQUN6QyxZQUFNLFNBQVMsU0FBUyxjQUFjLFFBQVE7QUFDOUMsVUFBSSxRQUFRO0FBQ1gsZUFBTztBQUFBLE1BQ1I7QUFBQSxJQUNEO0FBR0EsVUFBTSxXQUFXLFFBQVEsWUFBWTtBQUNyQyxRQUFJLFlBQVksb0JBQW9CLFlBQVk7QUFDL0MsYUFBTywrQkFBK0IsU0FBUyxNQUFNLFFBQVE7QUFBQSxJQUM5RDtBQUdBLFdBQU8sK0JBQStCLFFBQVEsZUFBZSxRQUFRO0FBQUEsRUFDdEU7QUFPQSxXQUFTLG9CQUFvQixTQUFTO0FBQ3JDLFFBQUksY0FBYyxRQUFRO0FBQzFCLFFBQUksZ0JBQWdCLFFBQVE7QUFFNUIsV0FDQyxpQkFDQSxjQUFjLGFBQWEsS0FBSyxpQkFDaEMsY0FBYyxhQUFhLEtBQUssd0JBQy9CO0FBQ0QsVUFBSSxlQUFlLFlBQVksWUFBWTtBQUMxQyx3QkFBZ0IsWUFBWTtBQUM1QixzQkFBYyxjQUFjO0FBQUEsTUFDN0IsV0FBVyxjQUFjLFlBQVk7QUFDcEMsd0JBQWdCLGNBQWM7QUFDOUIsc0JBQWM7QUFBQSxNQUNmLFdBQ0MsZUFDQSxZQUFZLFFBQ1osWUFBWSxLQUFLLGFBQWEsS0FBSyxlQUNsQztBQUNELHdCQUFnQixZQUFZO0FBQzVCLHNCQUFjO0FBQUEsTUFDZixPQUFPO0FBQ04sd0JBQWdCO0FBQ2hCLHNCQUFjO0FBQUEsTUFDZjtBQUFBLElBQ0Q7QUFFQSxXQUFPO0FBQUEsRUFDUjtBQVVBLFdBQVMsc0JBQXNCLFNBQVM7QUFDdkMsUUFDQyxDQUFDLFdBQ0QsRUFDQyxtQkFBbUIsZUFDbkIsbUJBQW1CLFFBQVEsY0FBYyxZQUFZLGNBRXJEO0FBQ0QsWUFBTSxJQUFJLE1BQU0sNENBQTRDO0FBQUEsSUFDN0Q7QUFFQSxXQUFPLG9CQUFvQixPQUFPLEtBQUs7QUFBQSxFQUN4QztBQXJUQTtBQUFBO0FBY0E7QUFDQTtBQUFBO0FBQUE7OztBQ3NCQSxXQUFTLE1BQU0sS0FBSztBQUVuQixRQUFJLFNBQVMsS0FBSztBQUNqQixhQUFPO0FBQUEsSUFDUjtBQUdBLFFBQUksWUFBWSxHQUFHLEdBQUc7QUFDckIsYUFBTztBQUFBLElBQ1I7QUFHQSxRQUFJLFdBQVcsR0FBRyxHQUFHO0FBQ3BCLGFBQU87QUFBQSxJQUNSO0FBR0EsUUFBSSxRQUFRLEdBQUcsR0FBRztBQUNqQixZQUFNLE9BQU8sQ0FBQztBQUNkLGVBQVMsSUFBSSxHQUFHLE1BQU0sSUFBSSxRQUFRLElBQUksS0FBSyxLQUFLO0FBQy9DLGFBQUssQ0FBQyxJQUFJLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFBQSxNQUN2QjtBQUVBLGFBQU87QUFBQSxJQUNSO0FBRUEsUUFBSSxTQUFTLEdBQUcsR0FBRztBQUVsQixVQUFJLGVBQWUsTUFBTTtBQUN4QixjQUFNLE9BQU8sb0JBQUksS0FBSztBQUN0QixhQUFLLFFBQVEsSUFBSSxRQUFRLENBQUM7QUFDMUIsZUFBTztBQUFBLE1BQ1I7QUFHQSxVQUFJLE9BQU8sWUFBWSxlQUFlLGVBQWUsUUFBUyxRQUFPO0FBQ3JFLFVBQUksT0FBTyxpQkFBaUIsZUFBZSxlQUFlO0FBQ3pELGVBQU87QUFDUixVQUNDLE9BQU8scUJBQXFCLGVBQzVCLGVBQWU7QUFFZixlQUFPO0FBR1IsVUFBSSxRQUFRLFVBQVUsRUFBRyxRQUFPO0FBQ2hDLFVBQUksT0FBTyxrQkFBa0IsZUFBZSxRQUFRO0FBQ25ELGVBQU87QUFDUixVQUFJLE9BQU8sV0FBVyxlQUFlLFFBQVEsT0FBUSxRQUFPO0FBQzVELFVBQUksT0FBTyxhQUFhLGVBQWUsUUFBUSxTQUFVLFFBQU87QUFDaEUsVUFBSSxPQUFPLGNBQWMsZUFBZSxRQUFRLFVBQVcsUUFBTztBQUNsRSxVQUFJLE9BQU8sU0FBUyxlQUFlLFFBQVEsS0FBTSxRQUFPO0FBR3hELFVBQUk7QUFFSCxZQUFJLGVBQWUsT0FBTztBQUN6QixpQkFBTztBQUFBLFFBQ1I7QUFBQSxNQUNELFNBQVMsR0FBRztBQUFBLE1BQUM7QUFFYixhQUFPLFlBQVksR0FBRztBQUFBLElBQ3ZCO0FBRUEsVUFBTSxJQUFJLE1BQU0sZ0RBQWdEO0FBQUEsRUFDakU7QUFRQSxXQUFTLFlBQVksS0FBSztBQUN6QixtQkFBZSxHQUFHO0FBRWxCLFVBQU0sTUFBTSxNQUFNLGFBQWE7QUFHL0IsUUFBSSxPQUFPLEdBQUcsTUFBTSxZQUFZO0FBQy9CLFlBQU0sWUFBWSxLQUFLO0FBQ3ZCLFVBQUksT0FBTyxjQUFjLFVBQVU7QUFDbEMsWUFDQyxVQUFVLGVBQWUsVUFBVSxLQUNuQyxPQUFPLElBQUksUUFBUSxNQUFNLFlBQ3hCO0FBQ0QsaUJBQU8sSUFBSSxTQUFTO0FBQUEsUUFDckI7QUFBQSxNQUNEO0FBQUEsSUFDRDtBQUVBLFFBQUksT0FBTyxDQUFDO0FBQ1osUUFDQyxPQUFPLElBQUksZ0JBQWdCLGNBQzNCLE9BQU8sSUFBSSxZQUFZLFNBQVMsWUFDL0I7QUFDRCxhQUFPLElBQUksSUFBSSxZQUFZO0FBQUEsSUFDNUI7QUFFQSxlQUFXLE9BQU8sS0FBSztBQUN0QixVQUFJLENBQUMsSUFBSSxlQUFlLEdBQUcsR0FBRztBQUM3QjtBQUFBLE1BQ0Q7QUFFQSxVQUFJLFlBQVksSUFBSSxHQUFHLENBQUMsR0FBRztBQUMxQixhQUFLLEdBQUcsSUFBSSxJQUFJLEdBQUc7QUFDbkI7QUFBQSxNQUNEO0FBRUEsV0FBSyxHQUFHLElBQUksTUFBTSxJQUFJLEdBQUcsQ0FBQztBQUFBLElBQzNCO0FBRUEsV0FBTztBQUFBLEVBQ1I7QUF0SkE7QUFBQTtBQWNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTs7O0FDb1BBLFdBQVMsWUFBWSxRQUFRO0FBQzVCLGFBQVMsZUFBZSxNQUFNLEVBQUUsUUFBUSxNQUFNLEdBQUc7QUFFakQsUUFBSTtBQUNKLFFBQUk7QUFDSixRQUFJO0FBQ0osUUFBSTtBQUNKLFFBQUk7QUFDSixRQUFJO0FBQ0osVUFBTSxlQUNMO0FBQ0QsVUFBTSxpQkFDTDtBQUNELFVBQU0scUJBQXFCLElBQUksY0FBYyxJQUFJLFlBQVk7QUFDN0QsVUFBTSxrQkFBa0I7QUFDeEIsVUFBTSxpQkFBaUI7QUFDdkIsVUFBTSxpQkFBaUIsSUFBSSxjQUFjO0FBQ3pDLFVBQU0sZUFBZTtBQUNyQixVQUFNLGNBQWM7QUFDcEIsVUFBTSxjQUFjO0FBQ3BCLFVBQU0sZUFBZTtBQUNyQixVQUFNLGdCQUFnQixvQkFBb0IsWUFBWTtBQUN0RCxVQUFNLGVBQWUsSUFBSSxhQUFhLEtBQUssV0FBVyxPQUFPLFdBQVcsT0FBTyxZQUFZLE9BQU8sY0FBYyxPQUFPLGVBQWU7QUFDdEksVUFBTSxtQkFBbUIsS0FBSyxrQkFBa0IsSUFBSSxZQUFZLElBQUksZUFBZTtBQUNuRixVQUFNLFFBQVEsSUFBSSxPQUFPLGdCQUFnQjtBQUN6QyxRQUFJO0FBRUosU0FBSyxRQUFRLE1BQU0sS0FBSyxNQUFNLE9BQU8sTUFBTTtBQUMxQyxVQUFJLE1BQU0sVUFBVSxNQUFNLFdBQVc7QUFDcEMsY0FBTTtBQUFBLE1BQ1A7QUFBQSxJQUNEO0FBRUEsUUFBSSxVQUFVLFVBQWEsVUFBVSxNQUFNO0FBQzFDLFlBQU0sSUFBSSxNQUFNLG9CQUFvQjtBQUFBLElBQ3JDO0FBRUEsUUFBSSxNQUFNLENBQUMsTUFBTSxRQUFXO0FBQzNCLGlCQUFXLE1BQU0sQ0FBQztBQUVsQixjQUFRLFNBQVMsTUFBTSxHQUFHO0FBQzFCLFVBQUksTUFBTSxTQUFTLEdBQUc7QUFDckIsbUJBQVcsTUFBTSxDQUFDO0FBQ2xCLGtCQUFVLE1BQU0sQ0FBQztBQUFBLE1BQ2xCO0FBQUEsSUFDRDtBQUVBLFFBQUksTUFBTSxFQUFFLE1BQU0sUUFBVztBQUM1QixlQUFTLE1BQU0sRUFBRTtBQUFBLElBQ2xCO0FBRUEsUUFBSSxNQUFNLEVBQUUsTUFBTSxRQUFXO0FBQzVCLGVBQVMsTUFBTSxFQUFFO0FBQUEsSUFDbEI7QUFFQSxRQUFJLE1BQU0sRUFBRSxNQUFNLFFBQVc7QUFDNUIsaUJBQVcsTUFBTSxFQUFFO0FBQUEsSUFDcEI7QUFFQSxXQUFPLElBQUksT0FBTyxVQUFVLFFBQVEsUUFBUSxVQUFVLE9BQU87QUFBQSxFQUM5RDtBQWpVQSxNQXdCTSxrQkFLQSxvQkF5Q0E7QUF0RU47QUFBQTtBQWNBO0FBQ0E7QUFDQTtBQUNBO0FBT0EsTUFBTSxtQkFBbUIsT0FBTyxZQUFZO0FBSzVDLE1BQU0scUJBQXFCLE9BQU8sY0FBYztBQXlDaEQsTUFBTSxTQUFOLGNBQXFCLEtBQUs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVV6QixZQUFZLFVBQVUsUUFBUSxRQUFRLFVBQVUsU0FBUyxZQUFZO0FBQ3BFLGdCQUFNO0FBRU4sZUFBSyxnQkFBZ0IsSUFBSTtBQUFBLFlBQ3hCLFVBQVUsYUFBYSxTQUFZLFNBQVksZUFBZSxRQUFRO0FBQUEsWUFDdEUsUUFBUSxXQUFXLFNBQVksU0FBWSxlQUFlLE1BQU07QUFBQSxZQUNoRSxRQUFRLFdBQVcsU0FBWSxTQUFZLGVBQWUsTUFBTTtBQUFBLFlBQ2hFLFVBQVUsYUFBYSxTQUFZLFNBQVksZUFBZSxRQUFRO0FBQUEsWUFDdEUsU0FBUyxZQUFZLFNBQVksU0FBWSxlQUFlLE9BQU87QUFBQSxZQUNuRSxZQUNDLGVBQWUsU0FBWSxTQUFZLGVBQWUsVUFBVTtBQUFBLFVBQ2xFO0FBRUEsZ0JBQU0sSUFBSSxDQUFDO0FBQ1gsY0FBSSxhQUFhLE9BQVcsR0FBRSxLQUFLLFFBQVE7QUFDM0MsY0FBSSxXQUFXLE9BQVcsR0FBRSxLQUFLLE1BQU07QUFDdkMsY0FBSSxXQUFXLE9BQVcsR0FBRSxLQUFLLE1BQU07QUFDdkMsY0FBSSxhQUFhLE9BQVcsR0FBRSxLQUFLLFFBQVE7QUFDM0MsY0FBSSxZQUFZLE9BQVcsR0FBRSxLQUFLLE9BQU87QUFDekMsY0FBSSxlQUFlLE9BQVcsR0FBRSxLQUFLLFVBQVU7QUFFL0MsY0FBSSxFQUFFLFdBQVcsR0FBRztBQUNuQixrQkFBTSxJQUFJLE1BQU0sb0JBQW9CO0FBQUEsVUFDckM7QUFFQSxlQUFLLGtCQUFrQixJQUFJLEVBQUUsS0FBSyxHQUFHO0FBQUEsUUFDdEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxZQUFZLGNBQWMsSUFBSTtBQUM3QixpQkFBTyxPQUFPLElBQUksd0NBQXdDO0FBQUEsUUFDM0Q7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLElBQUksZUFBZTtBQUNsQixpQkFBTyxLQUFLLGtCQUFrQjtBQUFBLFFBQy9CO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxJQUFJLFdBQVc7QUFDZCxpQkFBTyxLQUFLLGdCQUFnQixFQUFFO0FBQUEsUUFDL0I7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLElBQUksU0FBUztBQUNaLGlCQUFPLEtBQUssZ0JBQWdCLEVBQUU7QUFBQSxRQUMvQjtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0EsSUFBSSxTQUFTO0FBQ1osaUJBQU8sS0FBSyxnQkFBZ0IsRUFBRTtBQUFBLFFBQy9CO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxJQUFJLFdBQVc7QUFDZCxpQkFBTyxLQUFLLGdCQUFnQixFQUFFO0FBQUEsUUFDL0I7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLElBQUksVUFBVTtBQUNiLGlCQUFPLEtBQUssZ0JBQWdCLEVBQUU7QUFBQSxRQUMvQjtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0EsSUFBSSxhQUFhO0FBQ2hCLGlCQUFPLEtBQUssZ0JBQWdCLEVBQUU7QUFBQSxRQUMvQjtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0EsV0FBVztBQUNWLGlCQUFPLEdBQUcsS0FBSyxZQUFZO0FBQUEsUUFDNUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxTQUFTO0FBQ1IsaUJBQU8sTUFBTSxLQUFLLGdCQUFnQixDQUFDO0FBQUEsUUFDcEM7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDeklBLFdBQVMsc0JBQXNCO0FBQzlCLFVBQU1HLFlBQVcsWUFBWTtBQUU3QixVQUFNLE9BQU9BLFVBQVMsY0FBYyxNQUFNO0FBQzFDLFFBQUksZ0JBQWdCLGVBQWUsS0FBSyxhQUFhLE1BQU0sR0FBRztBQUM3RCxZQUFNLFNBQVMsS0FBSyxhQUFhLE1BQU07QUFDdkMsVUFBSSxRQUFRO0FBQ1gsZUFBTyxJQUFJLFlBQVksTUFBTTtBQUFBLE1BQzlCO0FBQUEsSUFDRDtBQUVBLFVBQU0sb0JBQW9CLHFCQUFxQjtBQUMvQyxRQUFJLG1CQUFtQjtBQUN0QixhQUFPLFlBQVksaUJBQWlCO0FBQUEsSUFDckM7QUFFQSxXQUFPLFlBQVksZ0JBQWdCO0FBQUEsRUFDcEM7QUE3REEsTUF3Qk0sa0JBNkNBO0FBckVOLE1BQUFDLGVBQUE7QUFBQTtBQWNBO0FBQ0E7QUFDQTtBQVFBLE1BQU0sbUJBQW1CO0FBNkN6QixNQUFNLHVCQUF1QixNQUFNO0FBQ2xDLGNBQU1DLGFBQVksZ0JBQWdCLFdBQVc7QUFDN0MsWUFBSUEsZUFBYyxRQUFXO0FBQzVCLGlCQUFPO0FBQUEsUUFDUjtBQUVBLFlBQUlBLFdBQVUsZUFBZSxVQUFVLEdBQUc7QUFDekMsZ0JBQU0sV0FBV0EsV0FBVTtBQUMzQixjQUFJLE9BQU8sYUFBYSxZQUFZLFNBQVMsU0FBUyxHQUFHO0FBQ3hELG1CQUFPO0FBQUEsVUFDUjtBQUFBLFFBQ0Q7QUFFQSxjQUFNLFlBQVlBLFlBQVc7QUFDN0IsWUFBSSxNQUFNLFFBQVEsU0FBUyxLQUFLLFVBQVUsU0FBUyxHQUFHO0FBQ3JELGlCQUFPLFVBQVUsQ0FBQztBQUFBLFFBQ25CO0FBRUEsZUFBTztBQUFBLE1BQ1I7QUFBQTtBQUFBOzs7QUN4RkEsTUF1Qk0saUJBZ0JBO0FBdkNOO0FBQUE7QUFjQTtBQUNBO0FBUUEsTUFBTSxrQkFBa0Isb0JBQUksSUFBSTtBQWdCaEMsTUFBTSxLQUFOLGNBQWlCLEtBQUs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNckIsWUFBWSxRQUFRO0FBQ25CLGdCQUFNO0FBRU4sY0FBSSxXQUFXLFFBQVc7QUFDekIscUJBQVM7QUFBQSxVQUNWO0FBRUEseUJBQWUsTUFBTTtBQUVyQixjQUFJLENBQUMsZ0JBQWdCLElBQUksTUFBTSxHQUFHO0FBQ2pDLDRCQUFnQixJQUFJLFFBQVEsQ0FBQztBQUFBLFVBQzlCO0FBRUEsY0FBSSxRQUFRLGdCQUFnQixJQUFJLE1BQU07QUFDdEMsZUFBSyxLQUFLLFNBQVM7QUFFbkIsMEJBQWdCLElBQUksUUFBUSxFQUFFLEtBQUs7QUFBQSxRQUNwQztBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0EsV0FBVztBQUNWLGlCQUFPLEtBQUs7QUFBQSxRQUNiO0FBQUEsTUFDRDtBQUFBO0FBQUE7OztBQ3RFQSxNQW1DTTtBQW5DTjtBQUFBO0FBY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWlCQSxNQUFNLGtCQUFOLGNBQThCLEtBQUs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS2xDLFlBQVlDLFVBQVM7QUFDcEIsZ0JBQU07QUFFTixjQUFJQSxhQUFZLFFBQVc7QUFDMUIsWUFBQUEsV0FBVSxDQUFDO0FBQUEsVUFDWjtBQUVBLGVBQUssY0FBYyxJQUFJLE9BQU8sQ0FBQyxHQUFHLEtBQUssVUFBVSxlQUFlQSxRQUFPLENBQUM7QUFBQSxRQUN6RTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFrQkEsSUFBSSxXQUFXO0FBQ2QsaUJBQU8sQ0FBQztBQUFBLFFBQ1Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFVQSxVQUFVLE1BQU0sY0FBYztBQUM3QixjQUFJO0FBRUosY0FBSTtBQUNILG9CQUFRLElBQUksV0FBVyxLQUFLLGNBQWMsQ0FBQyxFQUFFLE9BQU8sSUFBSTtBQUFBLFVBQ3pELFNBQVMsR0FBRztBQUFBLFVBQUM7QUFFYixjQUFJLFVBQVUsT0FBVyxRQUFPO0FBQ2hDLGlCQUFPO0FBQUEsUUFDUjtBQUFBLE1BQ0Q7QUFBQTtBQUFBOzs7QUN4RkEsTUFpQ00sd0JBWUE7QUE3Q047QUFBQTtBQWNBO0FBQ0E7QUFLQSxNQUFBQztBQUNBO0FBQ0E7QUFDQTtBQVVBLE1BQU0seUJBQXlCLE9BQU87QUFBQSxRQUNyQztBQUFBLE1BQ0Q7QUFVQSxNQUFNLFdBQU4sY0FBdUIsZ0JBQWdCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTXRDLFlBQVksY0FBYyxJQUFJO0FBQzdCLGlCQUFPLE9BQU8sSUFBSSwwQ0FBMEM7QUFBQSxRQUM3RDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxnQkFBZ0IsUUFBUTtBQUN2QixjQUFJLFdBQVcsUUFBVztBQUN6QixxQkFBUyxvQkFBb0I7QUFBQSxVQUM5QjtBQUVBLGlCQUFPLElBQUksUUFBUSxDQUFDLFNBQVMsV0FBVztBQUN2QyxnQkFBSTtBQUNILHNCQUFRLElBQUksYUFBYSxNQUFNLENBQUM7QUFBQSxZQUNqQyxTQUFTLEdBQUc7QUFDWCxxQkFBTyxDQUFDO0FBQUEsWUFDVDtBQUFBLFVBQ0QsQ0FBQztBQUFBLFFBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxnQkFBZ0IsUUFBUSxTQUFTO0FBQ2hDLGNBQUksV0FBVyxRQUFXO0FBQ3pCLHFCQUFTLG9CQUFvQjtBQUFBLFVBQzlCO0FBRUEsY0FBSSxFQUFFLGtCQUFrQixTQUFTO0FBQ2hDLGtCQUFNLElBQUksTUFBTSxxQ0FBcUM7QUFBQSxVQUN0RDtBQUVBLGNBQUksRUFBRSxtQkFBbUIsY0FBYztBQUN0QyxzQkFBVSxTQUFTLGNBQWMsTUFBTTtBQUFBLFVBQ3hDO0FBRUEsY0FBSSxFQUFFLG1CQUFtQixjQUFjO0FBQ3RDLGtCQUFNLElBQUksTUFBTSwrQkFBK0I7QUFBQSxVQUNoRDtBQUVBLGlCQUFPLEtBQUssZ0JBQWdCLE1BQU0sRUFBRSxLQUFLLENBQUMsUUFBUTtBQUNqRCxnQkFBSSxlQUFlO0FBQ25CLGdCQUFJLGNBQWMsU0FBUyxzQkFBc0IsR0FBRztBQUNuRCxvQkFBTSxVQUFVLGlCQUFpQixTQUFTLHNCQUFzQjtBQUNoRSx5QkFBVyxLQUFLLFNBQVM7QUFDeEIsb0JBQUksYUFBYSxjQUFjO0FBQzlCLGlDQUFlO0FBQ2Y7QUFBQSxnQkFDRDtBQUFBLGNBQ0Q7QUFFQSxrQkFBSSxFQUFFLHdCQUF3QixlQUFlO0FBQzVDLHNCQUFNLElBQUksTUFBTSwyQ0FBMkM7QUFBQSxjQUM1RDtBQUVBLDJCQUFhLG1CQUFtQixHQUFHO0FBQUEsWUFDcEMsT0FBTztBQUNOLDhCQUFnQixTQUFTLHdCQUF3QixHQUFHO0FBQUEsWUFDckQ7QUFFQSxtQkFBTztBQUFBLFVBQ1IsQ0FBQztBQUFBLFFBQ0Y7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDd0dBLFdBQVMsd0JBQXdCLFNBQVM7QUFDekMsVUFBTSxJQUFJLFlBQVk7QUFFdEIsUUFBSSxFQUFFLG1CQUFtQixjQUFjO0FBQ3RDLGdCQUFVLEVBQUU7QUFBQSxRQUNYLElBQUksb0JBQW9CLE1BQU0sdUJBQXVCLFNBQVMsQ0FBQztBQUFBLE1BQ2hFO0FBQ0EsVUFBSSxZQUFZLE1BQU07QUFDckIsY0FBTSxJQUFJO0FBQUEsVUFDVDtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsSUFDRDtBQUVBLFFBQUksRUFBRSxtQkFBbUIsY0FBYztBQUN0QyxZQUFNLElBQUksTUFBTSxnQ0FBZ0M7QUFBQSxJQUNqRDtBQUVBLFFBQUksQ0FBQyxjQUFjLFNBQVMsc0JBQXNCLEdBQUc7QUFDcEQsWUFBTSxJQUFJLE1BQU0sbUNBQW1DO0FBQUEsSUFDcEQ7QUFFQSxVQUFNLE1BQU0saUJBQWlCLFNBQVMsc0JBQXNCO0FBRTVELGVBQVcsS0FBSyxLQUFLO0FBQ3BCLFVBQUksYUFBYSxjQUFjO0FBQzlCLGVBQU87QUFBQSxNQUNSO0FBQUEsSUFDRDtBQUVBLFVBQU0sSUFBSSxNQUFNLHVCQUF1QjtBQUFBLEVBQ3hDO0FBN1BBLE1BdUNNO0FBdkNOO0FBQUE7QUFjQTtBQUNBO0FBQ0EsTUFBQUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFhQSxNQUFNLGVBQU4sTUFBTSxzQkFBcUIsS0FBSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLL0IsWUFBWSxRQUFRO0FBQ25CLGdCQUFNO0FBRU4sY0FBSSxrQkFBa0IsUUFBUTtBQUM3QixpQkFBSyxTQUFTO0FBQUEsVUFDZixPQUFPO0FBQ04saUJBQUssU0FBUyxZQUFZLGVBQWUsTUFBTSxDQUFDO0FBQUEsVUFDakQ7QUFFQSxlQUFLLFVBQVUsb0JBQUksSUFBSTtBQUFBLFFBQ3hCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsWUFBWSxjQUFjLElBQUk7QUFDN0IsaUJBQU8sT0FBTyxJQUFJLDhDQUE4QztBQUFBLFFBQ2pFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFXQSxRQUFRLEtBQUssYUFBYTtBQUN6QixjQUFJLENBQUMsS0FBSyxRQUFRLElBQUksR0FBRyxHQUFHO0FBQzNCLGdCQUFJLGdCQUFnQixRQUFXO0FBQzlCLG9CQUFNLElBQUksTUFBTSxPQUFPLEdBQUcsWUFBWTtBQUFBLFlBQ3ZDO0FBRUEsbUJBQU8sZUFBZSxXQUFXO0FBQUEsVUFDbEM7QUFFQSxnQkFBTSxJQUFJLEtBQUssUUFBUSxJQUFJLEdBQUc7QUFDOUIsY0FBSSxTQUFTLENBQUMsR0FBRztBQUNoQixtQkFBTyxLQUFLLGtCQUFrQixLQUFLLFNBQVMsV0FBVztBQUFBLFVBQ3hEO0FBRUEsaUJBQU8sS0FBSyxRQUFRLElBQUksR0FBRztBQUFBLFFBQzVCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBYUEsa0JBQWtCLEtBQUssT0FBTyxhQUFhO0FBQzFDLGNBQUksQ0FBQyxLQUFLLFFBQVEsSUFBSSxHQUFHLEdBQUc7QUFDM0IsbUJBQU8sZUFBZSxXQUFXO0FBQUEsVUFDbEM7QUFFQSxnQkFBTSxJQUFJLGVBQWUsS0FBSyxRQUFRLElBQUksR0FBRyxDQUFDO0FBRTlDLGNBQUk7QUFDSixjQUFJLFNBQVMsS0FBSyxHQUFHO0FBQ3BCLHNCQUFVLE1BQU0sZUFBZTtBQUFBLFVBQ2hDLE9BQU87QUFDTixvQkFBUSxnQkFBZ0IsS0FBSztBQUM3QixnQkFBSSxVQUFVLEdBQUc7QUFFaEIsa0JBQUksRUFBRSxlQUFlLE1BQU0sR0FBRztBQUM3Qix1QkFBTyxlQUFlLEdBQUcsSUFBSTtBQUFBLGNBQzlCO0FBQUEsWUFDRDtBQUVBLHNCQUFVLElBQUksS0FBSyxZQUFZLEtBQUssT0FBTyxTQUFTLENBQUMsRUFBRTtBQUFBLGNBQ3RELGdCQUFnQixLQUFLO0FBQUEsWUFDdEI7QUFBQSxVQUNEO0FBRUEsY0FBSSxFQUFFLGVBQWUsT0FBTyxHQUFHO0FBQzlCLG1CQUFPLGVBQWUsRUFBRSxPQUFPLENBQUM7QUFBQSxVQUNqQztBQVFBLGlCQUFPLGVBQWUsV0FBVztBQUFBLFFBQ2xDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQXFCQSxRQUFRLEtBQUssTUFBTTtBQUNsQixjQUFJLFNBQVMsSUFBSSxLQUFLLFNBQVMsSUFBSSxHQUFHO0FBQ3JDLGlCQUFLLFFBQVEsSUFBSSxlQUFlLEdBQUcsR0FBRyxJQUFJO0FBQzFDLG1CQUFPO0FBQUEsVUFDUjtBQUVBLGdCQUFNLElBQUksVUFBVSxpQ0FBaUM7QUFBQSxRQUN0RDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBNkJBLG1CQUFtQixjQUFjO0FBQ2hDLHlCQUFlLFlBQVk7QUFFM0IsY0FBSSx3QkFBd0IsZUFBYztBQUN6Qyx5QkFBYSxRQUFRLFFBQVEsQ0FBQyxHQUFHLE1BQU07QUFDdEMsbUJBQUssUUFBUSxHQUFHLENBQUM7QUFBQSxZQUNsQixDQUFDO0FBQ0QsbUJBQU87QUFBQSxVQUNSO0FBRUEscUJBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxPQUFPLFFBQVEsWUFBWSxHQUFHO0FBQ2xELGlCQUFLLFFBQVEsR0FBRyxDQUFDO0FBQUEsVUFDbEI7QUFFQSxpQkFBTztBQUFBLFFBQ1I7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDckdBLFdBQVMsWUFBWSxTQUFTO0FBQzdCLG1CQUFlLE9BQU87QUFFdEIsVUFBTSxjQUFjLG9CQUFJLElBQUk7QUFDNUIsVUFBTSxRQUFRO0FBSWQsVUFBTSxTQUFTLFFBQVEsU0FBUyxLQUFLO0FBRXJDLGVBQVcsS0FBSyxRQUFRO0FBQ3ZCLFlBQU0sSUFBSSxJQUFJLFFBQVE7QUFDdEIsVUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHO0FBQ2pCO0FBQUEsTUFDRDtBQUVBLFlBQU0sSUFBSSxJQUFJLFNBQVM7QUFDdkIsWUFBTSxJQUFJLElBQUksTUFBTTtBQUVwQixVQUFJLEtBQUssR0FBRztBQUNYLGNBQU0sSUFBSSxLQUFLLElBQUksR0FBRyxFQUFFLFNBQVMsQ0FBQztBQUNsQyxvQkFBWSxJQUFJLEdBQUcsQ0FBQztBQUNwQixrQkFBVSxRQUFRLFFBQVEsR0FBRyxDQUFDO0FBQUEsTUFDL0I7QUFBQSxJQUNEO0FBQ0EsUUFBSSxRQUFRLFFBQVEsTUFBTSxHQUFHO0FBRTdCLFlBQVEsTUFBTSxJQUFJLFNBQVUsT0FBTztBQUNsQyxVQUFJLElBQUksTUFBTSxLQUFLO0FBQ25CLGlCQUFXLEtBQUssYUFBYTtBQUM1QixZQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUFBLE1BQ3pCO0FBQ0EsYUFBTztBQUFBLElBQ1IsQ0FBQztBQUVELFdBQU87QUFBQSxFQUNSO0FBU0EsV0FBUyxnQkFBZ0IsT0FBTztBQUMvQixRQUFJLFNBQVMsS0FBSyxLQUFLLE1BQU0sZUFBZSxVQUFVLEdBQUc7QUFDeEQsY0FBUSxNQUFNLFNBQVM7QUFBQSxJQUN4QjtBQUVBLG1CQUFlLEtBQUs7QUFDcEIsV0FBTztBQUFBLEVBQ1I7QUFZQSxXQUFTLFVBQVUsT0FBTztBQUN6QixVQUFNQyxXQUFVLGdCQUFnQixTQUFTO0FBRXpDLFVBQU0sT0FBTyxNQUFNLEtBQUssSUFBSTtBQUM1QixRQUFJO0FBQ0osUUFBSTtBQUVKLFFBQUk7QUFDSixRQUFJO0FBQ0osUUFBSTtBQUNKLFFBQUk7QUFDSixRQUFJO0FBQ0osUUFBSTtBQUVKLFlBQVEsS0FBSyxTQUFTO0FBQUEsTUFDckIsS0FBSztBQUNKLGVBQU8sS0FBSyxLQUFLLEtBQUssR0FBRztBQUFBLE1BRTFCLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFDSix1QkFBZSxLQUFLO0FBQ3BCLGVBQU8sTUFBTSxZQUFZO0FBQUEsTUFFMUIsS0FBSztBQUNKLFlBQUksU0FBUyxLQUFLLEdBQUc7QUFDcEIsaUJBQU8sTUFBTSxTQUFTLEtBQUssQ0FBQyxDQUFDO0FBQUEsUUFDOUI7QUFFQSxZQUFJLFFBQVEsS0FBSyxHQUFHO0FBQ25CLGlCQUFPLE1BQU0sU0FBUyxLQUFLLENBQUMsQ0FBQztBQUFBLFFBQzlCO0FBRUEsWUFBSSxTQUFTLEtBQUssR0FBRztBQUNwQixpQkFBTyxNQUFNLGVBQWUsS0FBSyxDQUFDLENBQUM7QUFBQSxRQUNwQztBQUVBLGVBQU87QUFBQSxNQUVSLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFDSixZQUFJLFNBQVMsS0FBSyxHQUFHO0FBQ3BCLGlCQUFPLE9BQU8sS0FBSyxLQUFLLEVBQUUsU0FBUztBQUFBLFFBQ3BDO0FBRUEsWUFBSSxRQUFRLEtBQUssR0FBRztBQUNuQixpQkFBTyxNQUFNLFNBQVM7QUFBQSxRQUN2QjtBQUVBLGVBQU87QUFBQSxNQUVSLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFDSixlQUFPLFVBQVU7QUFBQSxNQUVsQixLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQ0osZUFBTyxVQUFVO0FBQUEsTUFFbEIsS0FBSztBQUFBLE1BQ0wsS0FBSztBQUNKLGVBQU8sVUFBVSxVQUFhLFVBQVU7QUFBQSxNQUV6QyxLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQ0osZUFBTyxZQUFZLEtBQUssS0FBSyxDQUFDLE1BQU0sS0FBSztBQUFBLE1BRTFDLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFDSixlQUFPLFlBQVksS0FBSyxLQUFLLENBQUMsTUFBTSxLQUFLLEtBQUssUUFBUSxNQUFNO0FBQUEsTUFFN0QsS0FBSztBQUFBLE1BQ0wsS0FBSztBQUNKLGVBQU8sWUFBWSxLQUFLLEtBQUssQ0FBQyxNQUFNLEtBQUssS0FBSyxRQUFRLE1BQU07QUFBQSxNQUU3RCxLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQ0osZUFBTyxTQUFTLEtBQUs7QUFBQSxNQUV0QixLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQ0osZUFBTyxNQUFNLFFBQVEsS0FBSztBQUFBLE1BRTNCLEtBQUs7QUFDSix3QkFBZ0IsS0FBSztBQUNyQixlQUFPLENBQUM7QUFBQSxNQUVULEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFDSix1QkFBZSxLQUFLO0FBQ3BCLGVBQU8sTUFBTSxZQUFZO0FBQUEsTUFFMUIsS0FBSztBQUNKLGVBQU8sR0FBRyxLQUFLO0FBQUEsTUFFaEIsS0FBSztBQUNKLGNBQU0sSUFBSSxTQUFTLEtBQUs7QUFDeEIsd0JBQWdCLENBQUM7QUFDakIsZUFBTztBQUFBLE1BRVIsS0FBSztBQUFBLE1BQ0wsS0FBSztBQUNKLGVBQU8sS0FBSyxVQUFVLEtBQUs7QUFBQSxNQUU1QixLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQ0osZUFBTyxLQUFLLE1BQU0sS0FBSztBQUFBLE1BRXhCLEtBQUs7QUFDSix1QkFBZSxLQUFLO0FBQ3BCLGVBQU8sTUFBTSxLQUFLO0FBQUEsTUFFbkIsS0FBSztBQUNKLHVCQUFlLEtBQUs7QUFDcEIsZUFBTyxtQkFBbUIsS0FBSyxFQUM3QixRQUFRLE1BQU0sS0FBSyxFQUNuQixRQUFRLE1BQU0sS0FBSyxFQUNuQixRQUFRLE9BQU8sS0FBSyxFQUNwQixRQUFRLE9BQU8sS0FBSyxFQUNwQixRQUFRLE9BQU8sS0FBSztBQUFBLE1BRXZCLEtBQUs7QUFRSixZQUFJO0FBQ0osY0FBTSxlQUFlLEtBQUssTUFBTTtBQUNoQyxZQUFJLFVBQVUsVUFBVTtBQUV4QixZQUFJLFNBQVMsS0FBSyxLQUFLLE1BQU0sZUFBZSxZQUFZLEdBQUc7QUFDMUQscUJBQVcsTUFBTSxZQUFZO0FBQUEsUUFDOUIsV0FBVyxLQUFLLFVBQVUsSUFBSSxZQUFZLEdBQUc7QUFDNUMsZ0JBQU0sSUFBSSxLQUFLLFVBQVUsSUFBSSxZQUFZO0FBQ3pDLHFCQUFXLElBQUksVUFBVTtBQUN6QixvQkFBVSxJQUFJLFNBQVM7QUFBQSxRQUN4QixXQUNDLE9BQU8sV0FBVyxZQUNsQixPQUFPLGVBQWUsWUFBWSxHQUNqQztBQUNELHFCQUFXLE9BQU8sWUFBWTtBQUFBLFFBQy9CO0FBQ0EseUJBQWlCLFFBQVE7QUFFekIsYUFBSyxRQUFRLEtBQUs7QUFDbEIsZUFBTyxTQUFTLEtBQUssU0FBUyxHQUFHLElBQUk7QUFBQSxNQUV0QyxLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQ0osdUJBQWUsS0FBSztBQUNwQixjQUFNLE1BQU0sSUFBSSxVQUFVLEVBQUUsZ0JBQWdCLE9BQU8sV0FBVztBQUM5RCxlQUFPLElBQUksS0FBSyxlQUFlO0FBQUEsTUFFaEMsS0FBSztBQUFBLE1BQ0wsS0FBSztBQUNKLDBCQUFrQixLQUFLO0FBRXZCLFlBQUksZ0JBQWdCLEtBQUssTUFBTSxLQUFLO0FBQ3BDLFlBQUksaUJBQWlCLEtBQUssTUFBTSxLQUFLO0FBRXJDLHdCQUFnQixzQkFBc0IsZUFBZSxLQUFLO0FBQzFELHlCQUFpQixzQkFBc0IsZ0JBQWdCLEtBQUs7QUFFNUQsY0FBTSxZQUFZLGtCQUFrQixLQUFLO0FBQ3pDLGVBQU8sWUFBWSxnQkFBZ0I7QUFBQSxNQUVwQyxLQUFLO0FBQ0osdUJBQWUsS0FBSztBQUVwQixjQUFNLFlBQVksTUFBTSxPQUFPLENBQUMsRUFBRSxZQUFZO0FBQzlDLGVBQU8sWUFBWSxNQUFNLE9BQU8sQ0FBQztBQUFBLE1BQ2xDLEtBQUs7QUFDSix1QkFBZSxLQUFLO0FBRXBCLGVBQU8sTUFBTTtBQUFBLFVBQ1o7QUFBQSxVQUNBLFNBQVUsR0FBRztBQUNaLG1CQUFPLEVBQUUsWUFBWTtBQUFBLFVBQ3RCO0FBQUEsUUFDRDtBQUFBLE1BRUQsS0FBSztBQUFBLE1BQ0wsS0FBSztBQUNKLGFBQ0UsU0FBUyxLQUFLLEtBQUssU0FBUyxLQUFLLEtBQUssUUFBUSxLQUFLLE1BQ3BELE1BQU0sZUFBZSxRQUFRLEdBQzVCO0FBQ0QsaUJBQU8sTUFBTTtBQUFBLFFBQ2Q7QUFFQSxjQUFNLElBQUksVUFBVSxvQkFBb0IsT0FBTyxLQUFLLEVBQUU7QUFBQSxNQUV2RCxLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQ0osZUFBTyxLQUFLLGdCQUFnQixLQUFLLENBQUM7QUFBQSxNQUVuQyxLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQ0osZUFBTyxLQUFLLGdCQUFnQixLQUFLLENBQUM7QUFBQSxNQUVuQyxLQUFLO0FBQ0osZUFBTztBQUFBLE1BRVIsS0FBSztBQUNKLGVBQU87QUFBQSxNQUVSLEtBQUs7QUFDSixZQUFJLFNBQVNBLFFBQU8sR0FBRztBQUN0QixVQUFBQSxTQUFRLElBQUksS0FBSztBQUFBLFFBQ2xCO0FBRUEsZUFBTztBQUFBLE1BRVIsS0FBSztBQUNKLHVCQUFlLEtBQUs7QUFDcEIsY0FBTSxTQUFTLE9BQU8sQ0FBQztBQUN2QixlQUFPLFNBQVM7QUFBQSxNQUVqQixLQUFLO0FBQ0osdUJBQWUsS0FBSztBQUNwQixjQUFNLFNBQVMsT0FBTyxDQUFDO0FBQ3ZCLGVBQU8sUUFBUTtBQUFBLE1BRWhCLEtBQUs7QUFDSixlQUFPLElBQUksR0FBRyxFQUFFLFNBQVM7QUFBQSxNQUUxQixLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQ0osWUFBSSxDQUFDLFNBQVMsS0FBSyxHQUFHO0FBQ3JCLGdCQUFNLElBQUksTUFBTSxvQkFBb0I7QUFBQSxRQUNyQztBQUVBLGNBQU0sT0FBTyxPQUFPLEtBQUssS0FBSyxFQUFFLEtBQUs7QUFFckMsWUFBSSxLQUFLLFlBQVksYUFBYTtBQUNqQyxnQkFBTTtBQUFBLFFBQ1AsV0FBVyxLQUFLLFlBQVksWUFBWTtBQUN2QyxnQkFBTSxLQUFLLFNBQVM7QUFBQSxRQUNyQixPQUFPO0FBQ04sZ0JBQU0sZ0JBQWdCLFNBQVMsS0FBSyxNQUFNLENBQUMsQ0FBQztBQUU1QyxjQUFJLEtBQUssWUFBWSxnQkFBZ0I7QUFDcEMsa0JBQU0sS0FBSyxTQUFTLE1BQU07QUFBQSxVQUMzQjtBQUFBLFFBQ0Q7QUFFQSx1QkFBZSxLQUFLLE1BQU0sS0FBSztBQUUvQixjQUFNLFNBQVMsT0FBTyxHQUFHO0FBRXpCLFlBQUksUUFBUSxNQUFNLEdBQUc7QUFDcEIsaUJBQU8sUUFBUSxNQUFNO0FBQUEsUUFDdEI7QUFFQSxlQUFPO0FBQUEsTUFFUixLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQ0osY0FBTSxLQUFLLE1BQU0sS0FBSztBQUV0QixZQUFJLFFBQVEsUUFBVztBQUN0QixnQkFBTSxJQUFJLE1BQU0sdUJBQXVCO0FBQUEsUUFDeEM7QUFFQSx1QkFBZSxLQUFLLE1BQU0sS0FBSztBQUUvQixZQUFJLGlCQUFpQixLQUFLO0FBQ3pCLGNBQUksQ0FBQyxNQUFNLElBQUksR0FBRyxHQUFHO0FBQ3BCLG1CQUFPO0FBQUEsVUFDUjtBQUNBLGlCQUFPLE1BQU0sSUFBSSxHQUFHO0FBQUEsUUFDckI7QUFFQSxZQUFJLFNBQVMsS0FBSyxLQUFLLFFBQVEsS0FBSyxHQUFHO0FBQ3RDLGNBQUksUUFBUSxHQUFHLEdBQUc7QUFDakIsbUJBQU8sUUFBUSxHQUFHO0FBQUEsVUFDbkI7QUFFQSxpQkFBTztBQUFBLFFBQ1I7QUFFQSxjQUFNLElBQUksTUFBTSxvQkFBb0I7QUFBQSxNQUVyQyxLQUFLO0FBQ0osY0FBTSxLQUFLLE1BQU07QUFDakIsWUFBSSxRQUFRLFFBQVc7QUFDdEIsZ0JBQU0sSUFBSSxNQUFNLHVCQUF1QjtBQUFBLFFBQ3hDO0FBRUEsZUFBTyxJQUFJLFdBQVcsS0FBSyxFQUFFLE9BQU8sR0FBRztBQUFBLE1BRXhDLEtBQUs7QUFDSixjQUFNLE1BQU0sSUFBSSxXQUFXLEtBQUs7QUFDaEMsWUFBSUMsVUFBUztBQUNiLGVBQU8sS0FBSyxTQUFTLEdBQUc7QUFDdkIsZ0JBQU0sS0FBSyxNQUFNO0FBQ2pCLGNBQUksUUFBUSxRQUFXO0FBQ3RCLGtCQUFNLElBQUksTUFBTSx1QkFBdUI7QUFBQSxVQUN4QztBQUdBLGNBQUksU0FBUyxHQUFHLEtBQUssSUFBSSxLQUFLLE1BQU0sSUFBSTtBQUN2QyxZQUFBQSxXQUFVO0FBQ1Y7QUFBQSxVQUNEO0FBRUEsY0FBSSxDQUFDLElBQUksT0FBTyxHQUFHLEdBQUc7QUFDckIsWUFBQUEsV0FBVTtBQUNWO0FBQUEsVUFDRDtBQUNBLGdCQUFNLElBQUksSUFBSSxPQUFPLEdBQUc7QUFDeEIsY0FBSSxDQUFDLFlBQVksQ0FBQyxHQUFHO0FBQ3BCLGtCQUFNLElBQUksTUFBTSx3QkFBd0I7QUFBQSxVQUN6QztBQUVBLFVBQUFBLFdBQVU7QUFBQSxRQUNYO0FBRUEsZUFBT0E7QUFBQSxNQUNSLEtBQUs7QUFDSixjQUFNLEtBQUssTUFBTTtBQUNqQixZQUFJLFFBQVEsUUFBVztBQUN0QixnQkFBTSxJQUFJLE1BQU0sdUJBQXVCO0FBQUEsUUFDeEM7QUFFQSxjQUFNLEtBQUssSUFBSSxXQUFXLEtBQUs7QUFFL0IsWUFBSSxDQUFDLEdBQUcsT0FBTyxHQUFHLEdBQUc7QUFDcEIsaUJBQU87QUFBQSxRQUNSO0FBRUEsZUFBTyxHQUFHLE9BQU8sR0FBRztBQUFBLE1BRXJCLEtBQUs7QUFDSix1QkFBZSxLQUFLO0FBRXBCLGNBQU1DLFNBQVEsU0FBUyxLQUFLLENBQUMsQ0FBQyxLQUFLO0FBQ25DLGNBQU1DLFFBQU8sU0FBUyxLQUFLLENBQUMsQ0FBQyxLQUFLLEtBQUtEO0FBRXZDLGVBQU8sTUFBTSxVQUFVQSxRQUFPQyxJQUFHO0FBQUEsTUFFbEMsS0FBSztBQUNKLGVBQU87QUFBQSxNQUVSLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFDSixZQUFJLFVBQVUsVUFBYSxVQUFVLE1BQU07QUFDMUMsaUJBQU87QUFBQSxRQUNSO0FBRUEsdUJBQWUsS0FBSyxNQUFNO0FBQzFCLFlBQUksY0FBYyxLQUFLLE1BQU07QUFDN0IsWUFBSSxnQkFBZ0IsUUFBVztBQUM5Qix3QkFBYztBQUFBLFFBQ2Y7QUFFQSxnQkFBUSxhQUFhO0FBQUEsVUFDcEIsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUNKLG1CQUFPLFNBQVMsWUFBWTtBQUFBLFVBQzdCLEtBQUs7QUFDSixtQkFBTyxXQUFXLFlBQVk7QUFBQSxVQUMvQixLQUFLO0FBQ0osbUJBQU87QUFBQSxVQUNSLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFDSiwyQkFBZSxhQUFhLFlBQVk7QUFDeEMsbUJBQ0UsaUJBQWlCLGVBQ2pCLGlCQUFpQixNQUNqQixpQkFBaUIsU0FDakIsaUJBQWlCLFdBQ2pCLGlCQUFpQixXQUNsQixpQkFBaUIsUUFDakIsaUJBQWlCLFVBQ2pCLGlCQUFpQjtBQUFBLFVBRW5CLEtBQUs7QUFDSixtQkFBTyxHQUFHLFlBQVk7QUFBQSxVQUN2QixLQUFLO0FBQ0osbUJBQU8sS0FBSyxNQUFNLEtBQUssWUFBWSxDQUFDO0FBQUEsUUFDdEM7QUFFQSxjQUFNLElBQUksTUFBTSxvQkFBb0I7QUFBQSxNQUVyQyxLQUFLO0FBQ0osY0FBTSxvQkFBSSxJQUFJO0FBQ2QsZUFBTyxLQUFLLFNBQVMsR0FBRztBQUN2QixxQkFBVyxLQUFLLE1BQU07QUFDdEIsY0FBSSxhQUFhLFFBQVc7QUFDM0Isa0JBQU0sSUFBSSxNQUFNLHVCQUF1QjtBQUFBLFVBQ3hDO0FBRUEscUJBQVcsU0FBUyxNQUFNLEdBQUc7QUFDN0IsY0FBSSxJQUFJLFNBQVMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDO0FBQUEsUUFDakM7QUFFQSxlQUFPLElBQUksSUFBSSxLQUFLO0FBQUEsTUFFckIsS0FBSztBQUNKLFlBQUksS0FBSyxXQUFXLEdBQUc7QUFDdEIsZ0JBQU0sSUFBSSxNQUFNLHlCQUF5QjtBQUFBLFFBQzFDO0FBRUEsMEJBQWtCLEtBQUs7QUFFdkIsY0FBTSxjQUFjLEtBQUssTUFBTTtBQVEvQixZQUFJLFVBQVUsTUFBTTtBQUNuQixpQkFBTyxnQkFBZ0I7QUFBQSxRQUN4QjtBQUVBLGNBQU0sY0FBYyxPQUFPO0FBRTNCLGdCQUFRLGFBQWE7QUFBQSxVQUNwQixLQUFLO0FBQ0osbUJBQU8sVUFBVTtBQUFBLFVBQ2xCLEtBQUs7QUFDSixtQkFBTyxVQUFVLFdBQVcsV0FBVztBQUFBLFVBQ3hDLEtBQUs7QUFDSixtQkFBTyxXQUFXLGdCQUFnQixVQUFVLGdCQUFnQjtBQUFBLFVBQzdELEtBQUs7QUFDSixtQkFBTyxnQkFBZ0I7QUFBQSxVQUN4QjtBQUNDLGtCQUFNLElBQUksTUFBTSxvQkFBb0I7QUFBQSxRQUN0QztBQUFBLE1BRUQsS0FBSztBQUFBLE1BQ0wsS0FBSztBQUNKLFlBQUk7QUFDSCxtQkFBUyxvQkFBb0I7QUFBQSxRQUM5QixTQUFTLEdBQUc7QUFDWCxnQkFBTSxJQUFJLE1BQU0seUNBQXlDLEVBQUUsT0FBTyxHQUFHO0FBQUEsUUFDdEU7QUFHQSxjQUFNLFFBQVEsTUFBTSxNQUFNLGlDQUFpQztBQUMzRCxZQUFJLENBQUMsT0FBTztBQUNYLGdCQUFNLElBQUksTUFBTSx5QkFBeUI7QUFBQSxRQUMxQztBQUVBLGNBQU0sV0FBVyxNQUFNLENBQUM7QUFDeEIsY0FBTSxTQUFTLE1BQU0sQ0FBQztBQUV0QixjQUFNLHdCQUF3QixPQUFPLENBQUMsS0FBSztBQUMzQyxjQUFNLG9CQUFvQixPQUFPLENBQUMsS0FBSztBQUV2QyxjQUFNLEtBQUssSUFBSSxLQUFLLGFBQWEsT0FBTyxTQUFTLEdBQUc7QUFBQSxVQUNuRCxPQUFPO0FBQUEsVUFDUDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRCxDQUFDO0FBRUQsZUFBTyxHQUFHLE9BQU8sTUFBTTtBQUFBLE1BRXhCLEtBQUs7QUFDSixlQUFPLElBQUksS0FBSyxLQUFLO0FBQ3JCLG9CQUFZLEtBQUssUUFBUTtBQUN6QixZQUFJLE1BQU0sU0FBUyxHQUFHO0FBQ3JCLGdCQUFNLElBQUksTUFBTSxjQUFjO0FBQUEsUUFDL0I7QUFDQSxlQUFPO0FBQUEsTUFFUixLQUFLO0FBQ0osZUFBTyxJQUFJLEtBQUssS0FBSztBQUNyQixZQUFJLE1BQU0sS0FBSyxRQUFRLENBQUMsR0FBRztBQUMxQixnQkFBTSxJQUFJLE1BQU0sY0FBYztBQUFBLFFBQy9CO0FBRUEsWUFBSTtBQUNILG1CQUFTLG9CQUFvQjtBQUM3QixpQkFBTyxLQUFLLG1CQUFtQixPQUFPLFNBQVMsR0FBRztBQUFBLFlBQ2pELFFBQVE7QUFBQSxVQUNULENBQUM7QUFBQSxRQUNGLFNBQVMsR0FBRztBQUNYLGdCQUFNLElBQUksTUFBTSx5Q0FBeUMsRUFBRSxPQUFPLEdBQUc7QUFBQSxRQUN0RTtBQUFBLE1BRUQsS0FBSztBQUNKLGVBQU8sSUFBSSxLQUFLLEtBQUs7QUFDckIsWUFBSSxNQUFNLEtBQUssUUFBUSxDQUFDLEdBQUc7QUFDMUIsZ0JBQU0sSUFBSSxNQUFNLGNBQWM7QUFBQSxRQUMvQjtBQUVBLGNBQU1DLFdBQVU7QUFBQSxVQUNmLFdBQVc7QUFBQSxVQUNYLFdBQVc7QUFBQSxVQUNYLFFBQVE7QUFBQSxRQUNUO0FBRUEsWUFBSSxLQUFLLFNBQVMsR0FBRztBQUNwQixVQUFBQSxTQUFRLFlBQVksS0FBSyxNQUFNO0FBQUEsUUFDaEM7QUFFQSxZQUFJLEtBQUssU0FBUyxHQUFHO0FBQ3BCLFVBQUFBLFNBQVEsWUFBWSxLQUFLLE1BQU07QUFBQSxRQUNoQztBQUVBLFlBQUk7QUFDSCxtQkFBUyxvQkFBb0IsRUFBRSxTQUFTO0FBQ3hDLGlCQUFPLElBQUksS0FBSyxlQUFlLFFBQVFBLFFBQU8sRUFBRSxPQUFPLElBQUk7QUFBQSxRQUM1RCxTQUFTLEdBQUc7QUFDWCxnQkFBTSxJQUFJLE1BQU0seUNBQXlDLEVBQUUsT0FBTyxHQUFHO0FBQUEsUUFDdEU7QUFBQSxNQUVELEtBQUs7QUFDSixlQUFPLElBQUksS0FBSyxLQUFLO0FBQ3JCLFlBQUksTUFBTSxLQUFLLFFBQVEsQ0FBQyxHQUFHO0FBQzFCLGdCQUFNLElBQUksTUFBTSxjQUFjO0FBQUEsUUFDL0I7QUFFQSxZQUFJO0FBQ0gsbUJBQVMsb0JBQW9CO0FBQzdCLGlCQUFPLEtBQUssZUFBZSxPQUFPLFNBQVMsR0FBRztBQUFBLFlBQzdDLFFBQVE7QUFBQSxVQUNULENBQUM7QUFBQSxRQUNGLFNBQVMsR0FBRztBQUNYLGdCQUFNLElBQUksTUFBTSx5Q0FBeUMsRUFBRSxPQUFPLEdBQUc7QUFBQSxRQUN0RTtBQUFBLE1BRUQsS0FBSztBQUNKLGVBQU8sSUFBSSxLQUFLLEtBQUs7QUFDckIsWUFBSSxNQUFNLEtBQUssUUFBUSxDQUFDLEdBQUc7QUFDMUIsZ0JBQU0sSUFBSSxNQUFNLGNBQWM7QUFBQSxRQUMvQjtBQUVBLFlBQUk7QUFDSCxtQkFBUyxvQkFBb0I7QUFDN0IsaUJBQU8sS0FBSyxtQkFBbUIsT0FBTyxTQUFTLEdBQUc7QUFBQSxZQUNqRCxNQUFNO0FBQUEsWUFDTixPQUFPO0FBQUEsWUFDUCxLQUFLO0FBQUEsVUFDTixDQUFDO0FBQUEsUUFDRixTQUFTLEdBQUc7QUFDWCxnQkFBTSxJQUFJLE1BQU0seUNBQXlDLEVBQUUsT0FBTyxHQUFHO0FBQUEsUUFDdEU7QUFBQSxNQUVELEtBQUs7QUFDSixlQUFPLElBQUksS0FBSyxLQUFLO0FBQ3JCLFlBQUksTUFBTSxLQUFLLFFBQVEsQ0FBQyxHQUFHO0FBQzFCLGdCQUFNLElBQUksTUFBTSxjQUFjO0FBQUEsUUFDL0I7QUFFQSxlQUFPLEtBQUssWUFBWTtBQUFBLE1BRXpCLEtBQUs7QUFDSixlQUFPLElBQUksS0FBSyxLQUFLO0FBQ3JCLFlBQUksTUFBTSxLQUFLLFFBQVEsQ0FBQyxHQUFHO0FBQzFCLGdCQUFNLElBQUksTUFBTSxjQUFjO0FBQUEsUUFDL0I7QUFFQSxlQUFPLEtBQUssU0FBUyxJQUFJO0FBQUEsTUFFMUIsS0FBSztBQUNKLGVBQU8sSUFBSSxLQUFLLEtBQUs7QUFDckIsWUFBSSxNQUFNLEtBQUssUUFBUSxDQUFDLEdBQUc7QUFDMUIsZ0JBQU0sSUFBSSxNQUFNLGNBQWM7QUFBQSxRQUMvQjtBQUVBLGVBQU8sS0FBSyxRQUFRO0FBQUEsTUFFckIsS0FBSztBQUNKLGVBQU8sSUFBSSxLQUFLLEtBQUs7QUFDckIsWUFBSSxNQUFNLEtBQUssUUFBUSxDQUFDLEdBQUc7QUFDMUIsZ0JBQU0sSUFBSSxNQUFNLGNBQWM7QUFBQSxRQUMvQjtBQUVBLGVBQU8sS0FBSyxPQUFPO0FBQUEsTUFFcEIsS0FBSztBQUFBLE1BQ0wsS0FBSztBQUNKLGVBQU8sSUFBSSxLQUFLLEtBQUs7QUFDckIsWUFBSSxNQUFNLEtBQUssUUFBUSxDQUFDLEdBQUc7QUFDMUIsZ0JBQU0sSUFBSSxNQUFNLGNBQWM7QUFBQSxRQUMvQjtBQUVBLGVBQU8sS0FBSyxTQUFTO0FBQUEsTUFFdEIsS0FBSztBQUFBLE1BQ0wsS0FBSztBQUNKLGVBQU8sSUFBSSxLQUFLLEtBQUs7QUFDckIsWUFBSSxNQUFNLEtBQUssUUFBUSxDQUFDLEdBQUc7QUFDMUIsZ0JBQU0sSUFBSSxNQUFNLGNBQWM7QUFBQSxRQUMvQjtBQUVBLGVBQU8sS0FBSyxXQUFXO0FBQUEsTUFFeEIsS0FBSztBQUFBLE1BQ0wsS0FBSztBQUNKLGVBQU8sSUFBSSxLQUFLLEtBQUs7QUFDckIsWUFBSSxNQUFNLEtBQUssUUFBUSxDQUFDLEdBQUc7QUFDMUIsZ0JBQU0sSUFBSSxNQUFNLGNBQWM7QUFBQSxRQUMvQjtBQUVBLGVBQU8sS0FBSyxXQUFXO0FBQUEsTUFFeEIsS0FBSztBQUFBLE1BQ0wsS0FBSztBQUNKLHVCQUFlLHdCQUF3QjtBQUN2QyxZQUFJLEVBQUUsd0JBQXdCLGVBQWU7QUFDNUMsZ0JBQU0sSUFBSSxNQUFNLHNCQUFzQjtBQUFBLFFBQ3ZDO0FBRUEsY0FBTSxLQUFLLE1BQU0sS0FBSztBQUN0QixZQUFJLFFBQVEsUUFBVztBQUN0QixnQkFBTTtBQUFBLFFBQ1A7QUFFQSx1QkFBZSxLQUFLLE1BQU0sS0FBSztBQUUvQix1QkFBZSxzQkFBc0IsY0FBYyxLQUFLO0FBRXhELGVBQU8sYUFBYSxRQUFRLEtBQUssWUFBWTtBQUFBLE1BRTlDLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFDSixjQUFNLFdBQVcsS0FBSyxNQUFNO0FBQzVCLFlBQUksWUFBWSxLQUFLLE1BQU07QUFDM0IsWUFBSSxjQUFjLFFBQVc7QUFDNUIsc0JBQVk7QUFBQSxRQUNiO0FBRUEsY0FBTUMsT0FBTSxJQUFJLElBQUksTUFBTSxNQUFNLFNBQVMsQ0FBQztBQUMxQyxjQUFNQyxVQUFTLElBQUksSUFBSSxTQUFTLE1BQU0sU0FBUyxDQUFDO0FBQ2hELFlBQUksS0FBSyxZQUFZLGNBQWM7QUFDbEMscUJBQVcsS0FBS0EsU0FBUTtBQUN2QixnQkFBSUQsS0FBSSxJQUFJLENBQUMsR0FBRztBQUNmLGNBQUFBLEtBQUksT0FBTyxDQUFDO0FBQUEsWUFDYixPQUFPO0FBQ04sY0FBQUEsS0FBSSxJQUFJLENBQUM7QUFBQSxZQUNWO0FBQUEsVUFDRDtBQUFBLFFBQ0QsV0FBVyxLQUFLLFlBQVksV0FBVztBQUN0QyxxQkFBVyxLQUFLQyxTQUFRO0FBQ3ZCLFlBQUFELEtBQUksSUFBSSxDQUFDO0FBQUEsVUFDVjtBQUFBLFFBQ0QsV0FBVyxLQUFLLFlBQVksY0FBYztBQUN6QyxxQkFBVyxLQUFLQyxTQUFRO0FBQ3ZCLFlBQUFELEtBQUksT0FBTyxDQUFDO0FBQUEsVUFDYjtBQUFBLFFBQ0Q7QUFDQSxlQUFPLE1BQU0sS0FBS0EsSUFBRyxFQUFFLEtBQUssU0FBUztBQUFBLE1BRXRDO0FBQ0MsY0FBTSxJQUFJLE1BQU0sbUJBQW1CLEtBQUssT0FBTyxFQUFFO0FBQUEsSUFDbkQ7QUFBQSxFQUNEO0FBU0EsV0FBUyxzQkFBc0IsT0FBTyxPQUFPO0FBQzVDLFlBQVEsT0FBTztBQUFBLE1BQ2QsS0FBSztBQUNKLGVBQU87QUFBQSxNQUNSLEtBQUs7QUFDSixlQUFPO0FBQUEsTUFDUixLQUFLO0FBQ0osZUFBTztBQUFBLE1BQ1IsS0FBSztBQUNKLGVBQU87QUFBQSxNQUNSO0FBQ0MsZUFBTztBQUFBLElBQ1Q7QUFBQSxFQUNEO0FBT0EsV0FBUyxrQkFBa0IsT0FBTztBQUNqQyxVQUFNLGFBQWEsT0FBTyxVQUFVLFdBQVcsTUFBTSxZQUFZLElBQUk7QUFFckUsV0FDRSxVQUFVLFVBQ1YsVUFBVSxRQUNWLFVBQVUsTUFDVixlQUFlLFNBQ2YsZUFBZSxXQUNmLFVBQVUsU0FDWCxlQUFlLFFBQ2YsZUFBZSxVQUNmLFVBQVU7QUFBQSxFQUVaO0FBOTJCQSxNQXFETTtBQXJETjtBQUFBO0FBY0EsTUFBQUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFRQTtBQUNBO0FBcUJBLE1BQU0sY0FBTixjQUEwQixLQUFLO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUs5QixZQUFZLFlBQVk7QUFDdkIsZ0JBQU07QUFDTixlQUFLLE9BQU8sWUFBWSxVQUFVO0FBQ2xDLGVBQUssVUFBVSxLQUFLLEtBQUssTUFBTTtBQUMvQixlQUFLLFlBQVksb0JBQUksSUFBSTtBQUFBLFFBQzFCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFXQSxZQUFZLE1BQU0sVUFBVSxTQUFTO0FBQ3BDLHlCQUFlLElBQUk7QUFDbkIsMkJBQWlCLFFBQVE7QUFFekIsY0FBSSxZQUFZLFFBQVc7QUFDMUIsMkJBQWUsT0FBTztBQUFBLFVBQ3ZCO0FBRUEsZUFBSyxVQUFVLElBQUksTUFBTTtBQUFBLFlBQ3hCO0FBQUEsWUFDQTtBQUFBLFVBQ0QsQ0FBQztBQUVELGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVVBLElBQUksT0FBTztBQUNWLGlCQUFPLFVBQVUsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDO0FBQUEsUUFDckM7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDckdBLE1Bd0JNQyxZQWlCQTtBQXpDTjtBQUFBO0FBY0E7QUFDQTtBQUNBO0FBUUEsTUFBTUEsYUFBWTtBQWlCbEIsTUFBTSxPQUFOLGNBQW1CLEtBQUs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS3ZCLFlBQVksTUFBTTtBQUNqQixnQkFBTTtBQUNOLHlCQUFlLElBQUk7QUFFbkIsZUFBSyxPQUFPLEtBQUssTUFBTUEsVUFBUyxFQUFFLElBQUksQ0FBQyxNQUFNO0FBQzVDLG1CQUFPLElBQUksWUFBWSxDQUFDO0FBQUEsVUFDekIsQ0FBQztBQUFBLFFBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFVQSxZQUFZLE1BQU0sVUFBVSxTQUFTO0FBQ3BDLHFCQUFXLENBQUMsRUFBRSxDQUFDLEtBQUssT0FBTyxRQUFRLEtBQUssSUFBSSxHQUFHO0FBQzlDLGNBQUUsWUFBWSxNQUFNLFVBQVUsT0FBTztBQUFBLFVBQ3RDO0FBRUEsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFRQSxJQUFJLE9BQU87QUFDVixpQkFBTyxLQUFLLEtBQUssT0FBTyxDQUFDLGFBQWEsYUFBYSxjQUFjLFVBQVU7QUFDMUUsbUJBQU8sWUFBWSxJQUFJLFdBQVc7QUFBQSxVQUNuQyxHQUFHLEtBQUs7QUFBQSxRQUNUO0FBQUEsTUFDRDtBQUFBO0FBQUE7OztBQ3dKQSxXQUFTLE9BQU8sTUFBTTtBQUNyQixTQUFLLGNBQWM7QUFDbkIsUUFBSSxLQUFLLGNBQWMsSUFBSSxJQUFJO0FBQzlCLFlBQU0sSUFBSSxNQUFNLGtCQUFrQjtBQUFBLElBQ25DO0FBRUEsVUFBTSxhQUNMLEtBQUssY0FBYyxFQUFFLFFBQVEsRUFBRSxNQUFNLElBQUksS0FBSyxxQkFBcUIsQ0FBQztBQUNyRSxVQUFNLGNBQ0wsS0FBSyxjQUFjLEVBQUUsUUFBUSxFQUFFLE9BQU8sSUFBSSxLQUFLLHNCQUFzQixDQUFDO0FBR3ZFLFFBQUksS0FBSyxRQUFRLFVBQVUsTUFBTSxNQUFNLEtBQUssUUFBUSxXQUFXLE1BQU0sSUFBSTtBQUN4RSxhQUFPO0FBQUEsSUFDUjtBQUVBLFFBQUksU0FBUyxTQUFTO0FBQUEsTUFDckI7QUFBQSxNQUNBLGVBQWUsSUFBSTtBQUFBLE1BQ25CO0FBQUEsTUFDQTtBQUFBLElBQ0Q7QUFFQSxRQUNDLEtBQUssY0FBYyxFQUFFLFFBQVEsRUFBRSxNQUFNLElBQUksS0FBSyxxQkFBcUIsSUFBSSxDQUFDLEdBQ3ZFO0FBQ0QsV0FBSyxxQkFBcUI7QUFBQSxJQUMzQjtBQUVBLFFBQ0MsS0FBSyxjQUFjLEVBQUUsUUFBUSxFQUFFLE9BQU8sSUFBSSxLQUFLLHNCQUFzQixJQUFJLENBQUMsR0FDekU7QUFDRCxXQUFLLHNCQUFzQjtBQUFBLElBQzVCO0FBRUEsYUFBUyxPQUFPLEtBQUssTUFBTSxNQUFNO0FBRWpDLFdBQU87QUFBQSxFQUNSO0FBU0EsV0FBUyxTQUFTLE1BQU0sWUFBWSxhQUFhO0FBQ2hELFVBQU0sWUFBWSxDQUFDO0FBRW5CLFVBQU0sc0JBQXNCLEtBQUssY0FBYyxFQUFFLFdBQVcsRUFBRSxZQUFZO0FBQzFFLFVBQU0scUJBQXFCLEtBQUssY0FBYyxFQUFFLFdBQVcsRUFBRSxXQUFXO0FBQ3hFLFVBQU0sWUFBWSxLQUFLLGNBQWMsRUFBRSxXQUFXO0FBRWxELFdBQU8sTUFBTTtBQUNaLFlBQU0sYUFBYSxLQUFLLFFBQVEsVUFBVTtBQUUxQyxVQUFJLGVBQWUsSUFBSTtBQUN0QixrQkFBVSxLQUFLLElBQUk7QUFDbkI7QUFBQSxNQUNELFdBQVcsYUFBYSxHQUFHO0FBQzFCLGtCQUFVLEtBQUssS0FBSyxVQUFVLEdBQUcsVUFBVSxDQUFDO0FBQzVDLGVBQU8sS0FBSyxVQUFVLFVBQVU7QUFBQSxNQUNqQztBQUVBLFVBQUksV0FBVyxLQUFLLFVBQVUsV0FBVyxNQUFNLEVBQUUsUUFBUSxXQUFXO0FBQ3BFLFVBQUksYUFBYSxHQUFJLGFBQVksV0FBVztBQUM1QyxVQUFJLG1CQUFtQixLQUNyQixVQUFVLFdBQVcsTUFBTSxFQUMzQixRQUFRLFVBQVU7QUFDcEIsVUFBSSxxQkFBcUIsSUFBSTtBQUM1Qiw0QkFBb0IsV0FBVztBQUMvQixZQUFJLG1CQUFtQixVQUFVO0FBQ2hDLGdCQUFNLFNBQVMsU0FBUztBQUFBLFlBQ3ZCO0FBQUEsWUFDQSxLQUFLLFVBQVUsZ0JBQWdCO0FBQUEsWUFDL0I7QUFBQSxZQUNBO0FBQUEsVUFDRDtBQUNBLGlCQUFPLEtBQUssVUFBVSxHQUFHLGdCQUFnQixJQUFJO0FBQzdDLHFCQUFXLEtBQUssVUFBVSxXQUFXLE1BQU0sRUFBRSxRQUFRLFdBQVc7QUFDaEUsY0FBSSxhQUFhLEdBQUksYUFBWSxXQUFXO0FBQUEsUUFDN0M7QUFBQSxNQUNEO0FBRUEsVUFBSSxhQUFhLElBQUk7QUFDcEIsY0FBTSxJQUFJLE1BQU0sb0NBQW9DO0FBQUEsTUFDckQ7QUFFQSxZQUFNLE1BQU0sS0FBSyxVQUFVLFdBQVcsUUFBUSxRQUFRO0FBQ3RELFlBQU0sUUFBUSxJQUFJLE1BQU0sa0JBQWtCO0FBQzFDLFlBQU0sY0FBYyxNQUFNLE1BQU07QUFFaEMsV0FBSyxpQkFBaUIsSUFBSTtBQUFBLFFBQ3pCLENBQUM7QUFBQSxRQUNELEtBQUssb0JBQW9CO0FBQUEsUUFDekIsS0FBSyxpQkFBaUI7QUFBQSxNQUN2QjtBQUVBLGlCQUFXLE1BQU0sT0FBTztBQUN2QixjQUFNLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxNQUFNLG1CQUFtQjtBQUMzQyxhQUFLLGlCQUFpQixFQUFFLENBQUMsSUFBSTtBQUFBLE1BQzlCO0FBRUEsWUFBTSxLQUFLLElBQUksTUFBTSxHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUs7QUFDdkMsWUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUs7QUFDdkMsWUFBTSxLQUFLLEdBQUcsTUFBTSxHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUs7QUFDdEMsWUFBTSxTQUFTLEtBQUssaUJBQWlCLElBQUksRUFBRSxJQUFJLFVBQVU7QUFFekQsVUFBSSxVQUFVO0FBQ2QsVUFDQyxVQUNBLElBQUksUUFBUSxNQUFNLE1BQU0sS0FDeEIsSUFBSSxRQUFRLE9BQU8sTUFBTSxLQUN6QixJQUFJLFFBQVEsU0FBUyxNQUFNLEdBQzFCO0FBQ0Qsa0JBQVU7QUFBQSxNQUNYO0FBRUEsaUJBQVc7QUFFWCxZQUFNLE9BQU8sSUFBSSxLQUFLLE9BQU87QUFFN0IsVUFBSSxTQUFTLFNBQVMsR0FBRztBQUN4QixtQkFBVyxDQUFDLE1BQU0sUUFBUSxLQUFLLE9BQU8sUUFBUSxTQUFTLEdBQUc7QUFDekQsZUFBSyxZQUFZLE1BQU0sUUFBUTtBQUFBLFFBQ2hDO0FBQUEsTUFDRDtBQUVBLGdCQUFVLEtBQUssZUFBZSxLQUFLLElBQUksS0FBSyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7QUFFaEUsYUFBTyxLQUFLLFVBQVUsV0FBVyxZQUFZLE1BQU07QUFBQSxJQUNwRDtBQUVBLFdBQU8sVUFBVSxLQUFLLEVBQUU7QUFBQSxFQUN6QjtBQWpYQSxNQTRCTSxzQkFNQSxnQkFNQSx1QkFNQSx3QkFNQSxtQkFnRUE7QUFwSE47QUFBQTtBQWNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQVFBLE1BQU0sdUJBQXVCLE9BQU8sZ0JBQWdCO0FBTXBELE1BQU0saUJBQWlCLE9BQU8sVUFBVTtBQU14QyxNQUFNLHdCQUF3QixPQUFPLGlCQUFpQjtBQU10RCxNQUFNLHlCQUF5QixPQUFPLGtCQUFrQjtBQU14RCxNQUFNLG9CQUFvQixPQUFPLGFBQWE7QUFnRTlDLE1BQU0sWUFBTixjQUF3QixnQkFBZ0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU92QyxZQUFZLFFBQVFDLFVBQVM7QUFDNUIsZ0JBQU1BLFFBQU87QUFDYixlQUFLLG9CQUFvQixJQUFJLFVBQVUsQ0FBQztBQUN4QyxlQUFLLHFCQUFxQixJQUFJO0FBQzlCLGVBQUssc0JBQXNCLElBQUk7QUFBQSxRQUNoQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBV0EsSUFBSSxXQUFXO0FBQ2QsaUJBQU8sT0FBTyxDQUFDLEdBQUcsTUFBTSxVQUFVO0FBQUEsWUFDakMsUUFBUTtBQUFBLGNBQ1AsTUFBTSxDQUFDLElBQUk7QUFBQSxjQUNYLE9BQU8sQ0FBQyxHQUFHO0FBQUEsWUFDWjtBQUFBLFlBQ0EsV0FBVztBQUFBLGNBQ1YsV0FBVztBQUFBLGNBQ1gsWUFBWTtBQUFBLFlBQ2I7QUFBQSxZQUNBLFdBQVcsQ0FBQztBQUFBLFVBQ2IsQ0FBQztBQUFBLFFBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFtQkEsa0JBQWtCLFdBQVcsWUFBWTtBQUN4QyxjQUFJLGNBQWMsUUFBVztBQUM1QixpQkFBSyxjQUFjLEVBQUUsV0FBVyxFQUFFLFdBQVcsSUFDNUMsZUFBZSxTQUFTO0FBQUEsVUFDMUI7QUFFQSxjQUFJLGVBQWUsUUFBVztBQUM3QixpQkFBSyxjQUFjLEVBQUUsV0FBVyxFQUFFLFlBQVksSUFDN0MsZUFBZSxVQUFVO0FBQUEsVUFDM0I7QUFFQSxpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFtQkEsVUFBVSxNQUFNLE9BQU87QUFDdEIsY0FBSSxVQUFVLFFBQVc7QUFDeEIsb0JBQVE7QUFBQSxVQUNUO0FBRUEsY0FBSSxTQUFTLElBQUksRUFBRyxRQUFPLENBQUMsSUFBSTtBQUNoQyxjQUFJLFNBQVMsS0FBSyxFQUFHLFNBQVEsQ0FBQyxLQUFLO0FBRW5DLGVBQUssY0FBYyxFQUFFLFFBQVEsRUFBRSxNQUFNLElBQUksY0FBYyxJQUFJO0FBQzNELGVBQUssY0FBYyxFQUFFLFFBQVEsRUFBRSxPQUFPLElBQUksY0FBYyxLQUFLO0FBQzdELGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFTQSxPQUFPLE1BQU07QUFDWixlQUFLLGNBQWMsSUFBSTtBQUN2QixlQUFLLHFCQUFxQixJQUFJO0FBQzlCLGVBQUssc0JBQXNCLElBQUk7QUFDL0IsZUFBSyxpQkFBaUIsSUFBSSxDQUFDO0FBQzNCLGlCQUFPLE9BQU8sS0FBSyxNQUFNLElBQUk7QUFBQSxRQUM5QjtBQUFBLE1BQ0Q7QUFBQTtBQUFBOzs7QUNqRUEsV0FBUyxlQUFlLFdBQVc7QUFDbEMsVUFBTSxRQUNMO0FBQ0QsVUFBTSxTQUFTLE1BQU0sS0FBSyxlQUFlLFNBQVMsQ0FBQztBQUVuRCxVQUFNLFNBQVMsU0FBUyxRQUFRO0FBQ2hDLFFBQUksV0FBVyxRQUFXO0FBQ3pCLFlBQU0sSUFBSSxVQUFVLGdDQUFnQztBQUFBLElBQ3JEO0FBRUEsVUFBTUMsUUFBTyxTQUFTLE1BQU07QUFDNUIsVUFBTSxVQUFVLFNBQVMsU0FBUztBQUNsQyxVQUFNLFlBQVksU0FBUyxXQUFXO0FBRXRDLFFBQUksWUFBWSxNQUFNQSxVQUFTLElBQUk7QUFDbEMsWUFBTSxJQUFJLFVBQVUsNEJBQTRCO0FBQUEsSUFDakQ7QUFFQSxXQUFPLElBQUksVUFBVUEsT0FBTSxTQUFTLGVBQWUsU0FBUyxDQUFDO0FBQUEsRUFDOUQ7QUFTQSxXQUFTLGVBQWUsV0FBVztBQUNsQyxRQUFJLENBQUMsU0FBUyxTQUFTLEdBQUc7QUFDekIsYUFBTztBQUFBLElBQ1I7QUFFQSxVQUFNLFNBQVMsQ0FBQztBQUVoQixjQUFVLE1BQU0sR0FBRyxFQUFFLFFBQVEsQ0FBQyxVQUFVO0FBQ3ZDLGNBQVEsTUFBTSxLQUFLO0FBQ25CLFVBQUksVUFBVSxJQUFJO0FBQ2pCO0FBQUEsTUFDRDtBQUVBLFlBQU0sS0FBSyxNQUFNLE1BQU0sR0FBRztBQUUxQixZQUFNLE1BQU0sZUFBZSxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUs7QUFDekMsWUFBTSxRQUFRLGVBQWUsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLO0FBRzNDLGFBQU8sS0FBSztBQUFBLFFBQ1g7QUFBQSxRQUNBO0FBQUEsTUFDRCxDQUFDO0FBQUEsSUFDRixDQUFDO0FBRUQsV0FBTztBQUFBLEVBQ1I7QUF6TkEsTUF3Qk0sVUFlQTtBQXZDTjtBQUFBO0FBY0E7QUFDQTtBQUNBO0FBQ0E7QUFPQSxNQUFNLFdBQVcsT0FBTyxVQUFVO0FBZWxDLE1BQU0sWUFBTixjQUF3QixLQUFLO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPNUIsWUFBWUEsT0FBTSxTQUFTLFdBQVc7QUFDckMsZ0JBQU07QUFFTixlQUFLLFFBQVEsSUFBSTtBQUFBLFlBQ2hCLE1BQU0sZUFBZUEsS0FBSSxFQUFFLFlBQVk7QUFBQSxZQUN2QyxTQUFTLGVBQWUsT0FBTyxFQUFFLFlBQVk7QUFBQSxZQUM3QyxXQUFXLENBQUM7QUFBQSxVQUNiO0FBRUEsY0FBSSxjQUFjLFFBQVc7QUFDNUIsaUJBQUssUUFBUSxFQUFFLFdBQVcsSUFBSSxjQUFjLFNBQVM7QUFBQSxVQUN0RDtBQUFBLFFBQ0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxZQUFZLGNBQWMsSUFBSTtBQUM3QixpQkFBTyxPQUFPLElBQUksbUNBQW1DO0FBQUEsUUFDdEQ7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLElBQUksT0FBTztBQUNWLGlCQUFPLEtBQUssUUFBUSxFQUFFO0FBQUEsUUFDdkI7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLElBQUksVUFBVTtBQUNiLGlCQUFPLEtBQUssUUFBUSxFQUFFO0FBQUEsUUFDdkI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFjQSxJQUFJLFlBQVk7QUFDZixnQkFBTSxTQUFTLG9CQUFJLElBQUk7QUFFdkIsZUFBSyxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsQ0FBQyxNQUFNO0FBQzFDLGdCQUFJLFFBQVEsRUFBRTtBQUdkLGdCQUFJLE1BQU0sV0FBVyxHQUFHLEtBQUssTUFBTSxTQUFTLEdBQUcsR0FBRztBQUNqRCxzQkFBUSxNQUFNLFVBQVUsR0FBRyxNQUFNLFNBQVMsQ0FBQztBQUFBLFlBQzVDO0FBRUEsbUJBQU8sSUFBSSxFQUFFLEtBQUssS0FBSztBQUFBLFVBQ3hCLENBQUM7QUFFRCxpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsV0FBVztBQUNWLGdCQUFNLFlBQVksQ0FBQztBQUNuQixxQkFBV0MsTUFBSyxLQUFLLFFBQVEsRUFBRSxXQUFXO0FBQ3pDLHNCQUFVLEtBQUssR0FBR0EsR0FBRSxHQUFHLElBQUlBLEdBQUUsS0FBSyxFQUFFO0FBQUEsVUFDckM7QUFFQSxpQkFBTyxHQUFHLEtBQUssUUFBUSxFQUFFLElBQUksSUFBSSxLQUFLLFFBQVEsRUFBRSxPQUFPLEdBQ3RELFVBQVUsU0FBUyxJQUFJLElBQUksVUFBVSxLQUFLLEdBQUcsQ0FBQyxLQUFLLEVBQ3BEO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQTtBQUFBOzs7QUNUQSxXQUFTLGFBQWEsU0FBUztBQUM5QixtQkFBZSxPQUFPO0FBRXRCLGNBQVUsUUFBUSxLQUFLO0FBRXZCLFFBQUksUUFBUSxVQUFVLEdBQUcsQ0FBQyxNQUFNLFNBQVM7QUFDeEMsWUFBTSxJQUFJLFVBQVUsb0NBQW9DO0FBQUEsSUFDekQ7QUFFQSxjQUFVLFFBQVEsVUFBVSxDQUFDO0FBRTdCLFVBQU0sSUFBSSxRQUFRLFFBQVEsR0FBRztBQUM3QixRQUFJLE1BQU0sSUFBSTtBQUNiLFlBQU0sSUFBSSxVQUFVLG9CQUFvQjtBQUFBLElBQ3pDO0FBRUEsUUFBSSxVQUFVLFFBQVEsVUFBVSxJQUFJLENBQUM7QUFDckMsVUFBTSxxQkFBcUIsUUFBUSxVQUFVLEdBQUcsQ0FBQyxFQUFFLEtBQUs7QUFDeEQsUUFBSSxZQUFZO0FBQ2hCLFFBQUksYUFBYTtBQUVqQixRQUFJLHVCQUF1QixJQUFJO0FBQzlCLGtCQUFZO0FBQ1osVUFBSSxtQkFBbUIsU0FBUyxRQUFRLEdBQUc7QUFDMUMsY0FBTSxJQUFJLG1CQUFtQixZQUFZLEdBQUc7QUFDNUMsb0JBQVksbUJBQW1CLFVBQVUsR0FBRyxDQUFDO0FBQzdDLHFCQUFhO0FBQUEsTUFDZCxPQUFPO0FBQ04sa0JBQVUsbUJBQW1CLE9BQU87QUFBQSxNQUNyQztBQUVBLGtCQUFZLGVBQWUsU0FBUztBQUFBLElBQ3JDLE9BQU87QUFDTixnQkFBVSxtQkFBbUIsT0FBTztBQUFBLElBQ3JDO0FBRUEsV0FBTyxJQUFJLFFBQVEsU0FBUyxXQUFXLFVBQVU7QUFBQSxFQUNsRDtBQTFKQSxNQTZCTUMsV0FXQTtBQXhDTjtBQUFBO0FBY0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQU9BLE1BQU1BLFlBQVcsT0FBTyxVQUFVO0FBV2xDLE1BQU0sVUFBTixjQUFzQixLQUFLO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPMUIsWUFBWSxTQUFTLFdBQVcsUUFBUTtBQUN2QyxnQkFBTTtBQUVOLGNBQUksU0FBUyxTQUFTLEdBQUc7QUFDeEIsd0JBQVksZUFBZSxTQUFTO0FBQUEsVUFDckM7QUFFQSxlQUFLQSxTQUFRLElBQUk7QUFBQSxZQUNoQixTQUFTLGVBQWUsT0FBTztBQUFBLFlBQy9CLFdBQVcsaUJBQWlCLFdBQVcsU0FBUztBQUFBLFlBQ2hELFFBQVEsZ0JBQWdCLFdBQVcsU0FBWSxPQUFPLE1BQU07QUFBQSxVQUM3RDtBQUFBLFFBQ0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxZQUFZLGNBQWMsSUFBSTtBQUM3QixpQkFBTyxPQUFPLElBQUksaUNBQWlDO0FBQUEsUUFDcEQ7QUFBQSxRQUVBLElBQUksVUFBVTtBQUNiLGlCQUFPLEtBQUtBLFNBQVEsRUFBRSxTQUNuQixLQUFLLEtBQUtBLFNBQVEsRUFBRSxPQUFPLElBQzNCLEtBQUtBLFNBQVEsRUFBRTtBQUFBLFFBQ25CO0FBQUEsUUFFQSxJQUFJLFlBQVk7QUFDZixpQkFBTyxLQUFLQSxTQUFRLEVBQUU7QUFBQSxRQUN2QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU9BLFdBQVc7QUFDVixjQUFJLFVBQVUsS0FBS0EsU0FBUSxFQUFFO0FBRTdCLGNBQUksS0FBS0EsU0FBUSxFQUFFLFdBQVcsTUFBTTtBQUNuQyxzQkFBVSxXQUFXLE9BQU87QUFBQSxVQUM3QixPQUFPO0FBQ04sc0JBQVUsSUFBSSxtQkFBbUIsT0FBTyxDQUFDO0FBQUEsVUFDMUM7QUFFQSxpQkFBTyxRQUFRLEtBQUtBLFNBQVEsRUFBRSxVQUFVLFNBQVMsQ0FBQyxHQUFHLE9BQU87QUFBQSxRQUM3RDtBQUFBLE1BQ0Q7QUFBQTtBQUFBOzs7QUNoR0EsTUFnQ007QUFoQ047QUFBQTtBQWNBO0FBQ0E7QUFpQkEsTUFBTSxRQUFOLGNBQW9CLEtBQUs7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUl4QixjQUFjO0FBQ2IsZ0JBQU07QUFDTixlQUFLLE9BQU8sQ0FBQztBQUFBLFFBQ2Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxZQUFZLGNBQWMsSUFBSTtBQUM3QixpQkFBTyxPQUFPLElBQUksOEJBQThCO0FBQUEsUUFDakQ7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLFVBQVU7QUFDVCxpQkFBTyxLQUFLLEtBQUssV0FBVztBQUFBLFFBQzdCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsT0FBTztBQUNOLGNBQUksS0FBSyxRQUFRLEdBQUc7QUFDbkIsbUJBQU87QUFBQSxVQUNSO0FBRUEsaUJBQU8sS0FBSyxLQUFLLENBQUM7QUFBQSxRQUNuQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBUUEsSUFBSSxPQUFPO0FBQ1YsZUFBSyxLQUFLLEtBQUssS0FBSztBQUNwQixpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxRQUFRO0FBQ1AsZUFBSyxPQUFPLENBQUM7QUFDYixpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVFBLE9BQU87QUFDTixjQUFJLEtBQUssUUFBUSxHQUFHO0FBQ25CLG1CQUFPO0FBQUEsVUFDUjtBQUNBLGlCQUFPLEtBQUssS0FBSyxNQUFNO0FBQUEsUUFDeEI7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDdkdBLE1BNEJNO0FBNUJOO0FBQUE7QUFjQTtBQUNBO0FBQ0E7QUFZQSxNQUFNLGNBQU4sY0FBMEIsTUFBTTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBSS9CLGNBQWM7QUFDYixnQkFBTTtBQUNOLGVBQUssY0FBYyxJQUFJO0FBQUEsWUFDdEIsUUFBUSxvQkFBSSxRQUFRO0FBQUEsVUFDckI7QUFBQSxRQUNEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVNBLElBQUksT0FBTztBQUNWLHlCQUFlLEtBQUs7QUFFcEIsY0FBSSxDQUFDLEtBQUssY0FBYyxFQUFFLE9BQU8sSUFBSSxLQUFLLEdBQUc7QUFDNUMsaUJBQUssY0FBYyxFQUFFLE9BQU8sSUFBSSxLQUFLO0FBQ3JDLGtCQUFNLElBQUksS0FBSztBQUFBLFVBQ2hCO0FBRUEsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsUUFBUTtBQUNQLGdCQUFNLE1BQU07QUFDWixlQUFLLGNBQWMsRUFBRSxTQUFTLG9CQUFJLFFBQVE7QUFDMUMsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFRQSxPQUFPO0FBQ04sY0FBSSxLQUFLLFFBQVEsR0FBRztBQUNuQixtQkFBTztBQUFBLFVBQ1I7QUFDQSxnQkFBTSxRQUFRLEtBQUssS0FBSyxNQUFNO0FBQzlCLGVBQUssY0FBYyxFQUFFLE9BQU8sT0FBTyxLQUFLO0FBQ3hDLGlCQUFPO0FBQUEsUUFDUjtBQUFBLE1BQ0Q7QUFBQTtBQUFBOzs7QUNsRkEsTUEwRE07QUExRE47QUFBQTtBQWNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF3Q0EsTUFBTSxXQUFOLGNBQXVCLEtBQUs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNM0IsWUFBWSxhQUFhLE1BQU07QUFDOUIsZ0JBQU07QUFFTixjQUFJLE9BQU8sYUFBYSxZQUFZO0FBQ25DLGtCQUFNLElBQUksTUFBTSxzQ0FBc0M7QUFBQSxVQUN2RDtBQUVBLGVBQUssV0FBVztBQUNoQixlQUFLLFlBQVk7QUFDakIsZUFBSyxPQUFPLElBQUksVUFBVTtBQUMxQixlQUFLLFFBQVEsSUFBSSxZQUFZO0FBQUEsUUFDOUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxZQUFZLGNBQWMsSUFBSTtBQUM3QixpQkFBTyxPQUFPLElBQUksaUNBQWlDO0FBQUEsUUFDcEQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxPQUFPLEtBQUs7QUFDWCxlQUFLLEtBQUssSUFBSSxHQUFHO0FBQ2pCLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU9BLFVBQVUsS0FBSztBQUNkLGVBQUssS0FBSyxPQUFPLEdBQUc7QUFDcEIsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLFVBQVU7QUFDVCxpQkFBTyxLQUFLLEtBQUssUUFBUTtBQUFBLFFBQzFCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsT0FBTyxLQUFLO0FBQ1gsaUJBQU8sS0FBSyxLQUFLLFNBQVMsR0FBRztBQUFBLFFBQzlCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsT0FBTyxTQUFTO0FBQ2YsZ0JBQU1DLFFBQU87QUFFYixjQUFJLENBQUMsU0FBUyxPQUFPLEdBQUc7QUFDdkIsbUJBQU8sUUFBUSxPQUFPLDJCQUEyQjtBQUFBLFVBQ2xEO0FBRUEsaUJBQU8sSUFBSSxRQUFRLFNBQVUsU0FBUyxRQUFRO0FBQzdDLFlBQUFBLE1BQUssTUFBTSxJQUFJLE9BQU87QUFFdEIsMkJBQWUsTUFBTTtBQUNwQixrQkFBSTtBQUdILG9CQUFJQSxNQUFLLE1BQU0sUUFBUSxHQUFHO0FBQ3pCLDBCQUFRO0FBQ1I7QUFBQSxnQkFDRDtBQUVBLHNCQUFNLElBQUlBLE1BQUssTUFBTSxLQUFLO0FBQzFCLHNCQUFNLFNBQVNBLE1BQUssU0FBUyxNQUFNLEdBQUdBLE1BQUssU0FBUztBQUVwRCxvQkFBSSxTQUFTLE1BQU0sS0FBSyxrQkFBa0IsU0FBUztBQUNsRCx5QkFBTyxLQUFLLE9BQU8sRUFBRSxNQUFNLE1BQU07QUFDakM7QUFBQSxnQkFDRDtBQUVBLHdCQUFRLE1BQU07QUFBQSxjQUNmLFNBQVMsR0FBRztBQUNYLHVCQUFPLENBQUM7QUFBQSxjQUNUO0FBQUEsWUFDRCxDQUFDO0FBQUEsVUFDRixDQUFDO0FBQUEsUUFDRjtBQUFBLE1BQ0Q7QUFBQTtBQUFBOzs7QUNsS0EsTUEwQk07QUExQk47QUFBQTtBQWNBO0FBQ0E7QUFDQTtBQVVBLE1BQU0sZUFBTixjQUEyQixLQUFLO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFJL0IsY0FBYztBQUNiLGdCQUFNO0FBQ04sZUFBSyxZQUFZLENBQUM7QUFBQSxRQUNuQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBUUEsT0FBTyxVQUFVO0FBQ2hCLDJCQUFpQixVQUFVLFFBQVE7QUFFbkMsZUFBSyxVQUFVLEtBQUssUUFBUTtBQUM1QixpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVFBLE9BQU8sVUFBVTtBQUNoQiwyQkFBaUIsVUFBVSxRQUFRO0FBRW5DLGNBQUksSUFBSTtBQUNSLGNBQUksSUFBSSxLQUFLLFVBQVU7QUFDdkIsaUJBQU8sSUFBSSxHQUFHLEtBQUs7QUFDbEIsZ0JBQUksS0FBSyxVQUFVLENBQUMsTUFBTSxVQUFVO0FBQ25DLG1CQUFLLFVBQVUsT0FBTyxHQUFHLENBQUM7QUFBQSxZQUMzQjtBQUFBLFVBQ0Q7QUFFQSxpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVFBLFNBQVMsVUFBVTtBQUNsQiwyQkFBaUIsVUFBVSxRQUFRO0FBQ25DLGNBQUksSUFBSTtBQUNSLGNBQUksSUFBSSxLQUFLLFVBQVU7QUFDdkIsaUJBQU8sSUFBSSxHQUFHLEtBQUs7QUFDbEIsZ0JBQUksS0FBSyxVQUFVLENBQUMsTUFBTSxVQUFVO0FBQ25DLHFCQUFPO0FBQUEsWUFDUjtBQUFBLFVBQ0Q7QUFDQSxpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxPQUFPLFNBQVM7QUFDZixnQkFBTSxVQUFVLENBQUM7QUFFakIsY0FBSSxJQUFJO0FBQ1IsZ0JBQU0sSUFBSSxLQUFLLFVBQVU7QUFDekIsaUJBQU8sSUFBSSxHQUFHLEtBQUs7QUFDbEIsb0JBQVEsS0FBSyxLQUFLLFVBQVUsQ0FBQyxFQUFFLE9BQU8sT0FBTyxDQUFDO0FBQUEsVUFDL0M7QUFFQSxpQkFBTyxRQUFRLElBQUksT0FBTztBQUFBLFFBQzNCO0FBQUEsTUFDRDtBQUFBO0FBQUE7OztBQzZDQSxXQUFTLGFBQWE7QUFDckIsVUFBTSxRQUFRO0FBR2QsVUFBTSxVQUFVO0FBQUE7QUFBQSxNQUVmLEtBQUssU0FBVSxRQUFRLEtBQUssVUFBVTtBQUNyQyxjQUFNLFFBQVEsUUFBUSxJQUFJLFFBQVEsS0FBSyxRQUFRO0FBRS9DLFlBQUksT0FBTyxRQUFRLFVBQVU7QUFDNUIsaUJBQU87QUFBQSxRQUNSO0FBRUEsWUFBSSxZQUFZLEtBQUssR0FBRztBQUN2QixpQkFBTztBQUFBLFFBQ1I7QUFHQSxZQUFJLFFBQVEsS0FBSyxLQUFLLFNBQVMsS0FBSyxHQUFHO0FBQ3RDLGNBQUksTUFBTSxVQUFVLElBQUksS0FBSyxHQUFHO0FBQy9CLG1CQUFPLE1BQU0sVUFBVSxJQUFJLEtBQUs7QUFBQSxVQUNqQyxXQUFXLE1BQU0sU0FBUyxJQUFJLEtBQUssR0FBRztBQUNyQyxtQkFBTztBQUFBLFVBQ1IsT0FBTztBQUNOLGtCQUFNLElBQUksSUFBSSxNQUFNLE9BQU8sT0FBTztBQUNsQyxrQkFBTSxVQUFVLElBQUksT0FBTyxDQUFDO0FBQzVCLGtCQUFNLFNBQVMsSUFBSSxHQUFHLEtBQUs7QUFDM0IsbUJBQU87QUFBQSxVQUNSO0FBQUEsUUFDRDtBQUVBLGVBQU87QUFBQSxNQUNSO0FBQUE7QUFBQSxNQUdBLEtBQUssU0FBVSxRQUFRLEtBQUssT0FBTyxVQUFVO0FBQzVDLFlBQUksTUFBTSxTQUFTLElBQUksS0FBSyxHQUFHO0FBQzlCLGtCQUFRLE1BQU0sU0FBUyxJQUFJLEtBQUs7QUFBQSxRQUNqQztBQUVBLFlBQUksTUFBTSxTQUFTLElBQUksTUFBTSxHQUFHO0FBQy9CLG1CQUFTLE1BQU0sU0FBUyxJQUFJLE1BQU07QUFBQSxRQUNuQztBQUVBLFlBQUksVUFBVSxRQUFRLElBQUksUUFBUSxLQUFLLFFBQVE7QUFDL0MsWUFBSSxNQUFNLFNBQVMsSUFBSSxPQUFPLEdBQUc7QUFDaEMsb0JBQVUsTUFBTSxTQUFTLElBQUksT0FBTztBQUFBLFFBQ3JDO0FBRUEsWUFBSSxZQUFZLE9BQU87QUFDdEIsaUJBQU87QUFBQSxRQUNSO0FBRUEsWUFBSTtBQUNKLFlBQUksYUFBYSxRQUFRLHlCQUF5QixRQUFRLEdBQUc7QUFFN0QsWUFBSSxlQUFlLFFBQVc7QUFDN0IsdUJBQWE7QUFBQSxZQUNaLFVBQVU7QUFBQSxZQUNWLFlBQVk7QUFBQSxZQUNaLGNBQWM7QUFBQSxVQUNmO0FBQUEsUUFDRDtBQUVBLG1CQUFXLE9BQU8sSUFBSTtBQUN0QixpQkFBUyxRQUFRLGVBQWUsUUFBUSxLQUFLLFVBQVU7QUFFdkQsWUFBSSxPQUFPLFFBQVEsVUFBVTtBQUM1QixnQkFBTSxVQUFVLE9BQU8sS0FBSztBQUFBLFFBQzdCO0FBRUEsZUFBTztBQUFBLE1BQ1I7QUFBQTtBQUFBLE1BR0EsZ0JBQWdCLFNBQVUsUUFBUSxLQUFLO0FBQ3RDLFlBQUksT0FBTyxRQUFRO0FBQ2xCLGlCQUFPLE9BQU8sR0FBRztBQUVqQixjQUFJLE9BQU8sUUFBUSxVQUFVO0FBQzVCLGtCQUFNLFVBQVUsT0FBTyxLQUFLO0FBQUEsVUFDN0I7QUFFQSxpQkFBTztBQUFBLFFBQ1I7QUFDQSxlQUFPO0FBQUEsTUFDUjtBQUFBO0FBQUEsTUFHQSxnQkFBZ0IsU0FBVSxRQUFRLEtBQUssWUFBWTtBQUNsRCxjQUFNLFNBQVMsUUFBUSxlQUFlLFFBQVEsS0FBSyxVQUFVO0FBQzdELFlBQUksT0FBTyxRQUFRLFVBQVU7QUFDNUIsZ0JBQU0sVUFBVSxPQUFPLEtBQUs7QUFBQSxRQUM3QjtBQUNBLGVBQU87QUFBQSxNQUNSO0FBQUE7QUFBQSxNQUdBLGdCQUFnQixTQUFVLFFBQVEsS0FBSztBQUN0QyxjQUFNLFNBQVMsUUFBUSxlQUFlLFNBQVMsR0FBRztBQUVsRCxZQUFJLE9BQU8sUUFBUSxVQUFVO0FBQzVCLGdCQUFNLFVBQVUsT0FBTyxLQUFLO0FBQUEsUUFDN0I7QUFFQSxlQUFPO0FBQUEsTUFDUjtBQUFBLElBQ0Q7QUFFQSxXQUFPO0FBQUEsRUFDUjtBQWpRQSxNQW9DTTtBQXBDTjtBQUFBO0FBY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWVBLE1BQU0sZ0JBQU4sY0FBNEIsS0FBSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1oQyxZQUFZLFFBQVE7QUFDbkIsZ0JBQU07QUFFTixlQUFLLGNBQWMsZUFBZSxNQUFNO0FBQ3hDLGVBQUssVUFBVSxJQUFJLE1BQU0sUUFBUSxXQUFXLEtBQUssSUFBSSxDQUFDO0FBRXRELGVBQUssWUFBWSxvQkFBSSxRQUFRO0FBQzdCLGVBQUssVUFBVSxJQUFJLEtBQUssYUFBYSxLQUFLLE9BQU87QUFFakQsZUFBSyxXQUFXLG9CQUFJLFFBQVE7QUFDNUIsZUFBSyxTQUFTLElBQUksS0FBSyxTQUFTLEtBQUssV0FBVztBQUVoRCxlQUFLLFlBQVksSUFBSSxhQUFhO0FBQUEsUUFDbkM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxZQUFZLGNBQWMsSUFBSTtBQUM3QixpQkFBTyxPQUFPLElBQUksdUNBQXVDO0FBQUEsUUFDMUQ7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLGFBQWE7QUFDWixpQkFBTyxLQUFLO0FBQUEsUUFDYjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU9BLFdBQVcsS0FBSztBQUNmLGNBQUk7QUFDSixnQkFBTSxlQUFlLE1BQU0sR0FBRztBQUM5QixnQkFBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLE9BQU87QUFDbEMsZUFBSyxJQUFJLEdBQUcsSUFBSSxFQUFFLFFBQVEsS0FBSztBQUM5QixtQkFBTyxLQUFLLFFBQVEsRUFBRSxDQUFDLENBQUM7QUFBQSxVQUN6QjtBQUVBLGVBQUssVUFBVSxPQUFPLEtBQUssU0FBUyxZQUFZO0FBQ2hELGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFTQSxpQkFBaUI7QUFDaEIsaUJBQU8sS0FBSztBQUFBLFFBQ2I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVFBLGVBQWUsVUFBVTtBQUN4QixlQUFLLFVBQVUsT0FBTyxRQUFRO0FBQzlCLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBUUEsZUFBZSxVQUFVO0FBQ3hCLGVBQUssVUFBVSxPQUFPLFFBQVE7QUFDOUIsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0Esa0JBQWtCO0FBQ2pCLGlCQUFPLEtBQUssVUFBVSxPQUFPLElBQUk7QUFBQSxRQUNsQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxpQkFBaUIsVUFBVTtBQUMxQixpQkFBTyxLQUFLLFVBQVUsU0FBUyxRQUFRO0FBQUEsUUFDeEM7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDL0RBLFdBQVMsbUJBQW1CO0FBQzNCLFVBQU1DLFlBQVcsZ0JBQWdCLFVBQVU7QUFDM0MsUUFBSSxPQUFPO0FBRVgsVUFBTSxVQUFVQSxVQUFTLGNBQWMsTUFBTTtBQUM3QyxRQUFJLG1CQUFtQixhQUFhO0FBQ25DLFlBQU0sUUFBUSxRQUFRLGFBQWEsb0JBQW9CO0FBQ3ZELFVBQUksT0FBTztBQUNWLGVBQU87QUFBQSxNQUNSO0FBQUEsSUFDRDtBQUVBLFdBQU8sSUFBSSxNQUFNLElBQUk7QUFBQSxFQUN0QjtBQXpGQSxNQThCTTtBQTlCTjtBQUFBO0FBY0E7QUFDQTtBQUNBO0FBQ0EsTUFBQUM7QUFDQTtBQVlBLE1BQU0sUUFBTixjQUFvQixLQUFLO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTXhCLFlBQVksTUFBTTtBQUNqQixnQkFBTTtBQUNOLHlCQUFlLElBQUk7QUFDbkIsZUFBSyxPQUFPO0FBQUEsUUFDYjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU9BLFlBQVksY0FBYyxJQUFJO0FBQzdCLGlCQUFPLE9BQU8sSUFBSSw0QkFBNEI7QUFBQSxRQUMvQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxVQUFVO0FBQ1QsaUJBQU8sS0FBSztBQUFBLFFBQ2I7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDOEVPLFdBQVMscUJBQXFCLElBQUksYUFBYTtBQUNyRCxtQkFBZSxFQUFFO0FBRWpCLFVBQU1DLFlBQVcsZ0JBQWdCLFVBQVU7QUFDM0MsVUFBTUMsdUJBQXNCLGtCQUFrQixxQkFBcUI7QUFDbkUsVUFBTUMsb0JBQW1CLGtCQUFrQixrQkFBa0I7QUFDN0QsVUFBTUMsWUFBVyxrQkFBa0IsVUFBVTtBQUU3QyxRQUFJO0FBRUosUUFDQyxFQUNDLHVCQUF1QkEsYUFBWSx1QkFBdUJELG9CQUUxRDtBQUNELFVBQUksdUJBQXVCLE1BQU07QUFDaEMsWUFBSSxZQUFZLGFBQWEseUJBQXlCLEdBQUc7QUFDeEQscUJBQVcsWUFBWSxhQUFhLHlCQUF5QjtBQUFBLFFBQzlEO0FBRUEsc0JBQWMsWUFBWSxZQUFZO0FBRXRDLFlBQ0MsRUFDQyx1QkFBdUJDLGFBQ3ZCLHVCQUF1QkQsb0JBRXZCO0FBQ0Qsd0JBQWMsWUFBWTtBQUFBLFFBQzNCO0FBQUEsTUFDRDtBQUVBLFVBQ0MsRUFDQyx1QkFBdUJDLGFBQ3ZCLHVCQUF1QkQsb0JBRXZCO0FBQ0Qsc0JBQWNGO0FBQUEsTUFDZjtBQUFBLElBQ0Q7QUFFQSxRQUFJO0FBQ0osVUFBTSxRQUFRLGlCQUFpQjtBQUUvQixRQUFJLFVBQVU7QUFDYixZQUFNLGlCQUFpQixHQUFHLFFBQVEsSUFBSSxFQUFFLElBQUksTUFBTSxRQUFRLENBQUM7QUFFM0QsaUJBQVcseUJBQXlCLGFBQWEsY0FBYztBQUMvRCxVQUFJLG9CQUFvQkMsc0JBQXFCO0FBQzVDLGVBQU8sSUFBSSxTQUFTLFFBQVE7QUFBQSxNQUM3QjtBQUFBLElBQ0Q7QUFFQSxVQUFNLFdBQVcsR0FBRyxFQUFFLElBQUksTUFBTSxRQUFRLENBQUM7QUFFekMsZUFBVyx5QkFBeUIsYUFBYSxRQUFRO0FBQ3pELFFBQUksb0JBQW9CQSxzQkFBcUI7QUFDNUMsYUFBTyxJQUFJLFNBQVMsUUFBUTtBQUFBLElBQzdCO0FBRUEsZUFBVyx5QkFBeUIsYUFBYSxFQUFFO0FBQ25ELFFBQUksb0JBQW9CQSxzQkFBcUI7QUFDNUMsYUFBTyxJQUFJLFNBQVMsUUFBUTtBQUFBLElBQzdCO0FBRUEsVUFBTSxJQUFJLE1BQU0sWUFBWSxFQUFFLGFBQWE7QUFBQSxFQUM1QztBQTNNQSxNQWdDTTtBQWhDTjtBQUFBO0FBY0E7QUFDQTtBQUNBO0FBQ0EsTUFBQUc7QUFDQTtBQUNBO0FBQ0E7QUFZQSxNQUFNLFdBQU4sY0FBdUIsS0FBSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFRM0IsWUFBWSxVQUFVO0FBQ3JCLGdCQUFNO0FBQ04sZ0JBQU1ILHVCQUFzQixrQkFBa0IscUJBQXFCO0FBQ25FLDJCQUFpQixVQUFVQSxvQkFBbUI7QUFDOUMsZUFBSyxXQUFXO0FBQUEsUUFDakI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxZQUFZLGNBQWMsSUFBSTtBQUM3QixpQkFBTyxPQUFPLElBQUksd0NBQXdDO0FBQUEsUUFDM0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEscUJBQXFCO0FBQ3BCLGlCQUFPLEtBQUs7QUFBQSxRQUNiO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EseUJBQXlCO0FBQ3hCLGlCQUFPLEtBQUssU0FBUyxRQUFRLFVBQVUsSUFBSTtBQUFBLFFBQzVDO0FBQUEsTUFDRDtBQUFBO0FBQUE7OztBQ3hDQSxXQUFTLEtBQUssT0FBTyxRQUFRO0FBQzVCLFdBQU8sT0FBTyxPQUFPLE1BQU07QUFBQSxFQUM1QjtBQVNBLFdBQVMsUUFBUUksSUFBRyxHQUFHQyxPQUFNO0FBQzVCLFFBQUksUUFBUUEsS0FBSSxHQUFHO0FBQ2xCLFlBQU0sT0FDTEQsR0FBRSxTQUFTLEVBQUUsU0FBUyxJQUFJLE1BQU1BLEdBQUUsTUFBTSxJQUFJLElBQUksTUFBTSxFQUFFLE1BQU07QUFDL0QsV0FBSyxLQUFLLENBQUM7QUFDWCxhQUFPLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO0FBQUEsSUFDckM7QUFFQSxXQUFPLElBQUksSUFBSSxPQUFPLEtBQUtBLEVBQUMsRUFBRSxPQUFPLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQztBQUFBLEVBQ3JEO0FBVUEsV0FBUyxPQUFPQSxJQUFHLEdBQUcsTUFBTUUsT0FBTTtBQUNqQyxVQUFNLFFBQVEsT0FBT0YsRUFBQztBQUN0QixVQUFNLFFBQVEsT0FBTyxDQUFDO0FBRXRCLFVBQU0sV0FBVyxRQUFRLENBQUM7QUFDMUIsVUFBTSxXQUFXRSxTQUFRLENBQUM7QUFFMUIsUUFBSSxVQUFVLFVBQVUsVUFBVSxZQUFZLFVBQVUsVUFBVTtBQUNqRSxjQUFRRixJQUFHLEdBQUcsS0FBSyxFQUFFLFFBQVEsQ0FBQyxNQUFNO0FBQ25DLFlBQUksQ0FBQyxPQUFPLFVBQVUsZUFBZSxLQUFLQSxJQUFHLENBQUMsR0FBRztBQUNoRCxtQkFBUyxLQUFLLFlBQVlBLEdBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLE9BQU8sU0FBUyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQUEsUUFDakUsV0FBVyxDQUFDLE9BQU8sVUFBVSxlQUFlLEtBQUssR0FBRyxDQUFDLEdBQUc7QUFDdkQsbUJBQVMsS0FBSyxZQUFZQSxHQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxVQUFVLFNBQVMsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUFBLFFBQ3BFLE9BQU87QUFDTixpQkFBT0EsR0FBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsU0FBUyxPQUFPLENBQUMsR0FBRyxRQUFRO0FBQUEsUUFDaEQ7QUFBQSxNQUNELENBQUM7QUFBQSxJQUNGLE9BQU87QUFDTixZQUFNLElBQUlHLGFBQVlILElBQUcsR0FBRyxPQUFPLEtBQUs7QUFDeEMsVUFBSSxNQUFNLFFBQVc7QUFDcEIsaUJBQVMsS0FBSyxZQUFZQSxJQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFBQSxNQUN6QztBQUFBLElBQ0Q7QUFFQSxXQUFPO0FBQUEsRUFDUjtBQVdBLFdBQVMsWUFBWUEsSUFBRyxHQUFHLFVBQVUsTUFBTTtBQUMxQyxVQUFNLFNBQVM7QUFBQSxNQUNkO0FBQUEsTUFDQTtBQUFBLElBQ0Q7QUFFQSxRQUFJLGFBQWEsT0FBTztBQUN2QixhQUFPLFFBQVE7QUFBQSxRQUNkLE9BQU9BO0FBQUEsUUFDUCxNQUFNLE9BQU9BO0FBQUEsTUFDZDtBQUVBLFVBQUksU0FBU0EsRUFBQyxHQUFHO0FBQ2hCLGNBQU0sT0FBTyxPQUFPLGVBQWVBLEVBQUMsR0FBRyxhQUFhO0FBQ3BELFlBQUksU0FBUyxRQUFXO0FBQ3ZCLGlCQUFPLE1BQU0sV0FBVztBQUFBLFFBQ3pCO0FBQUEsTUFDRDtBQUFBLElBQ0Q7QUFFQSxRQUFJLGFBQWEsU0FBUyxhQUFhLFVBQVU7QUFDaEQsYUFBTyxTQUFTO0FBQUEsUUFDZixPQUFPO0FBQUEsUUFDUCxNQUFNLE9BQU87QUFBQSxNQUNkO0FBRUEsVUFBSSxTQUFTLENBQUMsR0FBRztBQUNoQixjQUFNLE9BQU8sT0FBTyxlQUFlLENBQUMsR0FBRyxhQUFhO0FBQ3BELFlBQUksU0FBUyxRQUFXO0FBQ3ZCLGlCQUFPLE9BQU8sV0FBVztBQUFBLFFBQzFCO0FBQUEsTUFDRDtBQUFBLElBQ0Q7QUFFQSxXQUFPO0FBQUEsRUFDUjtBQVFBLFdBQVMsV0FBV0EsSUFBRyxHQUFHO0FBQ3pCLFFBQUksT0FBT0EsT0FBTSxPQUFPLEdBQUc7QUFDMUIsYUFBTztBQUFBLElBQ1I7QUFFQSxRQUFJQSxjQUFhLFFBQVEsYUFBYSxNQUFNO0FBQzNDLGFBQU9BLEdBQUUsUUFBUSxNQUFNLEVBQUUsUUFBUTtBQUFBLElBQ2xDO0FBRUEsV0FBT0EsT0FBTTtBQUFBLEVBQ2Q7QUFRQSxXQUFTRyxhQUFZSCxJQUFHLEdBQUc7QUFJMUIsUUFBSTtBQUtKLFVBQU0sUUFBUSxPQUFPQTtBQUtyQixVQUFNLFFBQVEsT0FBTztBQUVyQixRQUFJLFVBQVUsZUFBZSxVQUFVLGFBQWE7QUFDbkQsaUJBQVc7QUFBQSxJQUNaLFdBQVcsVUFBVSxlQUFlLFVBQVUsYUFBYTtBQUMxRCxpQkFBVztBQUFBLElBQ1osV0FBVyxXQUFXQSxJQUFHLENBQUMsR0FBRztBQUM1QixpQkFBVztBQUFBLElBQ1o7QUFFQSxXQUFPO0FBQUEsRUFDUjtBQXhMQTtBQUFBO0FBY0E7QUFDQTtBQUFBO0FBQUE7OztBQzZCQSxXQUFTLFdBQVcsT0FBTztBQUMxQixtQkFBZSxLQUFLO0FBRXBCLFVBQU0sY0FBYyxvQkFBSSxJQUFJO0FBQzVCLFVBQU0sUUFBUTtBQUlkLFVBQU0sU0FBUyxNQUFNLFNBQVMsS0FBSztBQUVuQyxlQUFXLEtBQUssUUFBUTtBQUN2QixZQUFNLElBQUksSUFBSSxRQUFRO0FBQ3RCLFVBQUksQ0FBQyxTQUFTLENBQUMsR0FBRztBQUNqQjtBQUFBLE1BQ0Q7QUFFQSxZQUFNLElBQUksSUFBSSxTQUFTO0FBQ3ZCLFlBQU0sSUFBSSxJQUFJLE1BQU07QUFFcEIsVUFBSSxLQUFLLEdBQUc7QUFDWCxjQUFNLElBQUksS0FBSyxJQUFJLEdBQUcsRUFBRSxTQUFTLENBQUM7QUFDbEMsb0JBQVksSUFBSSxHQUFHLENBQUM7QUFDcEIsZ0JBQVEsTUFBTSxRQUFRLEdBQUcsQ0FBQztBQUFBLE1BQzNCO0FBQUEsSUFDRDtBQUVBLFlBQVEsTUFBTSxLQUFLO0FBQ25CLGdCQUFZLFFBQVEsQ0FBQyxHQUFHLE1BQU07QUFDN0IsY0FBUSxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsRUFBRTtBQUFBLElBQ2xDLENBQUM7QUFFRCxXQUFPO0FBQUEsRUFDUjtBQTVFQTtBQUFBO0FBY0E7QUFDQTtBQUNBO0FBQUE7QUFBQTs7O0FDZ0JBLFdBQVMsVUFBVSxTQUFTSSxPQUFNO0FBQ2pDLFVBQU1DLFlBQVcsWUFBWTtBQUU3QixRQUFJLG1CQUFtQixhQUFhO0FBQ25DLFVBQUlELFVBQVMsU0FBUztBQUNyQixnQkFBUSxNQUFNO0FBQ2Q7QUFBQSxNQUNEO0FBR0EsWUFBTSxRQUFRLElBQUksTUFBTSxlQUFlQSxLQUFJLEdBQUc7QUFBQSxRQUM3QyxTQUFTO0FBQUEsUUFDVCxZQUFZO0FBQUEsUUFDWixVQUFVO0FBQUEsTUFDWCxDQUFDO0FBRUQsY0FBUSxjQUFjLEtBQUs7QUFBQSxJQUM1QixXQUFXLG1CQUFtQixrQkFBa0IsbUJBQW1CLFVBQVU7QUFDNUUsaUJBQVcsS0FBSyxTQUFTO0FBQ3hCLGtCQUFVLEdBQUdBLEtBQUk7QUFBQSxNQUNsQjtBQUFBLElBQ0QsT0FBTztBQUNOLFlBQU0sSUFBSTtBQUFBLFFBQ1Q7QUFBQSxNQUNEO0FBQUEsSUFDRDtBQUFBLEVBQ0Q7QUFlQSxXQUFTLGdCQUFnQixTQUFTQSxPQUFNLFFBQVE7QUFDL0MsUUFBSSxtQkFBbUIsYUFBYTtBQUNuQyxVQUFJLENBQUMsU0FBUyxNQUFNLEdBQUc7QUFDdEIsaUJBQVMsRUFBRSxPQUFPO0FBQUEsTUFDbkI7QUFFQSxZQUFNLFFBQVEsSUFBSSxZQUFZLGVBQWVBLEtBQUksR0FBRztBQUFBLFFBQ25ELFNBQVM7QUFBQSxRQUNULFlBQVk7QUFBQSxRQUNaLFVBQVU7QUFBQSxRQUNWO0FBQUEsTUFDRCxDQUFDO0FBRUQsY0FBUSxjQUFjLEtBQUs7QUFBQSxJQUM1QixXQUFXLG1CQUFtQixrQkFBa0IsbUJBQW1CLFVBQVU7QUFDNUUsaUJBQVcsS0FBSyxTQUFTO0FBQ3hCLHdCQUFnQixHQUFHQSxPQUFNLE1BQU07QUFBQSxNQUNoQztBQUFBLElBQ0QsT0FBTztBQUNOLFlBQU0sSUFBSTtBQUFBLFFBQ1Q7QUFBQSxNQUNEO0FBQUEsSUFDRDtBQUFBLEVBQ0Q7QUFpQkEsV0FBUywyQkFBMkIsT0FBTyxlQUFlLGdCQUFnQjtBQUN6RSxxQkFBaUIsT0FBTyxLQUFLO0FBRTdCLFFBQUksT0FBTyxNQUFNLGlCQUFpQixZQUFZO0FBQzdDLFlBQU0sSUFBSSxNQUFNLG1CQUFtQjtBQUFBLElBQ3BDO0FBRUEsVUFBTSxPQUFPLE1BQU0sYUFBYTtBQUdoQyxRQUFJLFFBQVEsSUFBSSxHQUFHO0FBQ2xCLGVBQVMsSUFBSSxHQUFHLElBQUksS0FBSyxRQUFRLEtBQUs7QUFDckMsY0FBTSxJQUFJLEtBQUssQ0FBQztBQUVoQixZQUNDLGFBQWEsZUFDYixFQUFFLGFBQWEsYUFBYSxNQUMzQixtQkFBbUIsVUFDbkIsRUFBRSxhQUFhLGFBQWEsTUFBTSxpQkFDbEM7QUFDRCxpQkFBTztBQUFBLFFBQ1I7QUFBQSxNQUNEO0FBQUEsSUFDRDtBQUVBLFdBQU87QUFBQSxFQUNSO0FBM0lBO0FBQUE7QUFjQTtBQUNBO0FBQ0E7QUFBQTtBQUFBOzs7QUNoQkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXVRQSxXQUFTLHdCQUF3QjtBQUNoQyxXQUFPLFNBQVUsU0FBUztBQUV6QixVQUFJLGdCQUFnQixrQkFBa0I7QUFDckMsWUFBSSxDQUFDLFNBQVMsVUFBVSxFQUFFLFFBQVEsS0FBSyxJQUFJLE1BQU0sSUFBSTtBQUNwRCxpQkFBTyxHQUFHLEtBQUssS0FBSyxPQUFPLEdBQUcsT0FBTyxLQUFLLFNBQVM7QUFBQSxRQUNwRDtBQUFBLE1BQ0QsV0FBVyxnQkFBZ0IsbUJBQW1CO0FBQzdDLFlBQUksUUFBUSxPQUFPLEtBQUssUUFBUSxRQUFRLEtBQUssS0FBSyxNQUFNLElBQUk7QUFDM0QsaUJBQU87QUFBQSxRQUNSO0FBRUEsZUFBTztBQUFBLE1BQ1I7QUFBQSxJQUNEO0FBQUEsRUFDRDtBQWFBLFdBQVMseUJBQXlCO0FBQ2pDLFFBQUksS0FBSyxNQUFNLEdBQUc7QUFDakIsYUFBTyxLQUFLLE1BQU07QUFBQSxJQUNuQjtBQU9BLFNBQUssTUFBTSxJQUFJLENBQUMsVUFBVTtBQUN6QixZQUFNLFVBQVUsMkJBQTJCLE9BQU8sc0JBQXNCO0FBRXhFLFVBQUksWUFBWSxRQUFXO0FBQzFCO0FBQUEsTUFDRDtBQUNBLHFCQUFlLE1BQU07QUFDcEIsNEJBQW9CLEtBQUssTUFBTSxPQUFPO0FBQUEsTUFDdkMsQ0FBQztBQUFBLElBQ0Y7QUFFQSxXQUFPLEtBQUssTUFBTTtBQUFBLEVBQ25CO0FBUUEsV0FBUyxvQkFBb0IsU0FBUztBQUNyQyxVQUFNLGFBQWEsSUFBSSxXQUFXLEtBQUssY0FBYyxFQUFFLFFBQVEsV0FBVyxDQUFDO0FBRTNFLFFBQUksT0FBTyxRQUFRLGFBQWEsc0JBQXNCO0FBQ3RELFFBQUksU0FBUztBQUNaLFlBQU0sSUFBSSxNQUFNLHFEQUFxRDtBQUV0RSxRQUFJLEtBQUssUUFBUSxPQUFPLE1BQU0sR0FBRztBQUNoQyxZQUFNLElBQUksTUFBTSxxREFBcUQ7QUFBQSxJQUN0RTtBQUVBLFdBQU8sS0FBSyxVQUFVLENBQUM7QUFFdkIsUUFBSTtBQUVKLFFBQUksbUJBQW1CLGtCQUFrQjtBQUN4QyxjQUFRLFFBQVEsTUFBTTtBQUFBLFFBQ3JCLEtBQUs7QUFDSixrQkFBUSxRQUFRLFVBQVUsUUFBUSxRQUFRO0FBQzFDO0FBQUEsUUFDRDtBQUNDLGtCQUFRLFFBQVE7QUFDaEI7QUFBQSxNQUNGO0FBQUEsSUFDRCxXQUFXLG1CQUFtQixxQkFBcUI7QUFDbEQsY0FBUSxRQUFRO0FBQUEsSUFDakIsV0FBVyxtQkFBbUIsbUJBQW1CO0FBQ2hELGNBQVEsUUFBUSxNQUFNO0FBQUEsUUFDckIsS0FBSztBQUNKLGtCQUFRLFFBQVE7QUFDaEI7QUFBQSxRQUNELEtBQUs7QUFDSixrQkFBUSxRQUFRO0FBRWhCLGNBQUlFLFdBQVUsU0FBUztBQUN2QixjQUFJQSxhQUFZO0FBQ2YsWUFBQUEsV0FBVSxRQUFRLGlCQUFpQix1QkFBdUI7QUFDM0Qsa0JBQVEsTUFBTSxLQUFLQSxRQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsT0FBQUMsT0FBTSxNQUFNQSxNQUFLO0FBRXBEO0FBQUEsTUFDRjtBQUFBLElBR0QsV0FDRSxTQUFTLGFBQWEsYUFDdEIsQ0FBQyxDQUFDLE9BQU87QUFBQSxNQUNSLFFBQVEsWUFBWTtBQUFBLE1BQ3BCO0FBQUEsSUFDRCxJQUFJLEtBQUssS0FDVixRQUFRLGVBQWUsT0FBTyxHQUM3QjtBQUNELGNBQVEsVUFBVSxPQUFPO0FBQUEsSUFDMUIsT0FBTztBQUNOLFlBQU0sSUFBSSxNQUFNLG9CQUFvQjtBQUFBLElBQ3JDO0FBRUEsUUFBSSxTQUFTLEtBQUssR0FBRztBQUNwQixZQUFNQyxRQUFPLFFBQVEsYUFBYSwyQkFBMkI7QUFDN0QsY0FBUUEsT0FBTTtBQUFBLFFBQ2IsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNKLGtCQUFRLE9BQU8sS0FBSztBQUNwQixjQUFJLE1BQU0sS0FBSyxHQUFHO0FBQ2pCLG9CQUFRO0FBQUEsVUFDVDtBQUNBO0FBQUEsUUFDRCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0osa0JBQVEsVUFBVSxVQUFVLFVBQVUsT0FBTyxVQUFVO0FBQ3ZEO0FBQUEsUUFDRCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0osa0JBQVEsTUFBTSxNQUFNLEdBQUc7QUFDdkI7QUFBQSxRQUNELEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSixrQkFBUSxLQUFLLE1BQU0sS0FBSztBQUN4QjtBQUFBLFFBQ0Q7QUFDQztBQUFBLE1BQ0Y7QUFBQSxJQUNEO0FBRUEsVUFBTSxPQUFPLE1BQU0sS0FBSyxjQUFjLEVBQUUsUUFBUSxlQUFlLENBQUM7QUFFaEUsVUFBTSxLQUFLLElBQUksV0FBVyxJQUFJO0FBQzlCLE9BQUcsT0FBTyxNQUFNLEtBQUs7QUFFckIsVUFBTSxhQUFhLEtBQUssTUFBTSxLQUFLLGNBQWMsRUFBRSxRQUFRLGVBQWUsQ0FBQztBQUUzRSxRQUFJLFdBQVcsU0FBUyxHQUFHO0FBQzFCLGlCQUFXLE9BQU8sTUFBTSxLQUFLO0FBQUEsSUFDOUI7QUFBQSxFQUNEO0FBUUEsV0FBUyx1QkFBdUI7QUFDL0IsUUFBSSxLQUFLLGNBQWMsRUFBRSxRQUFRLFFBQVEsSUFBSSxzQkFBc0IsR0FBRyxHQUFHO0FBQ3hFLDBCQUFvQixLQUFLLE1BQU0sS0FBSyxjQUFjLEVBQUUsT0FBTztBQUFBLElBQzVEO0FBRUEsZUFBVyxDQUFDLEVBQUUsT0FBTyxLQUFLLEtBQUssY0FBYyxFQUFFLFFBQzdDLGlCQUFpQixJQUFJLHNCQUFzQixHQUFHLEVBQzlDLFFBQVEsR0FBRztBQUNaLDBCQUFvQixLQUFLLE1BQU0sT0FBTztBQUFBLElBQ3ZDO0FBQUEsRUFDRDtBQVNBLFdBQVMsY0FBYyxRQUFRO0FBQzlCLGVBQVcsQ0FBQyxFQUFFLE9BQU8sS0FBSyxLQUFLLGNBQWMsRUFBRSxRQUM3QyxpQkFBaUIsV0FBVyx3QkFBd0IsR0FBRyxFQUN2RCxRQUFRLEdBQUc7QUFDWixjQUFRLFdBQVcsWUFBWSxPQUFPO0FBQUEsSUFDdkM7QUFBQSxFQUNEO0FBY0EsV0FBUyxjQUFjLFFBQVE7QUFDOUIsVUFBTSxVQUFVLEtBQUssY0FBYyxFQUFFLFFBQVEsZUFBZTtBQUU1RCxVQUFNLE1BQU0sb0JBQUksUUFBUTtBQUN4QixRQUFJLEtBQUs7QUFFVCxVQUFNLFlBQVksS0FBSyxjQUFjLEVBQUU7QUFFdkMsV0FBTyxNQUFNO0FBQ1osVUFBSSxRQUFRO0FBQ1o7QUFFQSxZQUFNLElBQUksTUFBTSxTQUFTLE1BQU0sQ0FBQztBQUNoQyxVQUFJLENBQUMsUUFBUSxDQUFDLEVBQUc7QUFFakIsYUFBTyxFQUFFLFNBQVMsR0FBRztBQUNwQixjQUFNLFVBQVUsRUFBRSxLQUFLLEdBQUc7QUFFMUIsWUFBSSxXQUFXLG9CQUFJLElBQUk7QUFDdkIsY0FBTSxRQUFRLElBQUksd0JBQXdCLFdBQVcsT0FBTztBQUU1RCxjQUFNLElBQUksVUFBVSxpQkFBaUIsS0FBSztBQUUxQyxZQUFJLEVBQUUsU0FBUyxHQUFHO0FBQ2pCLHFCQUFXLG9CQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUFBLFFBQzFCO0FBRUEsWUFBSSxVQUFVLFFBQVEsS0FBSyxHQUFHO0FBQzdCLG1CQUFTLElBQUksU0FBUztBQUFBLFFBQ3ZCO0FBRUEsbUJBQVcsQ0FBQyxFQUFFLGdCQUFnQixLQUFLLFNBQVMsUUFBUSxHQUFHO0FBQ3RELGNBQUksSUFBSSxJQUFJLGdCQUFnQixFQUFHO0FBQy9CLGNBQUksSUFBSSxnQkFBZ0I7QUFFeEIsa0JBQVE7QUFFUixnQkFBTSxhQUFhLGlCQUFpQjtBQUFBLFlBQ25DO0FBQUEsVUFDRDtBQUNBLGNBQUksZUFBZSxLQUFNO0FBRXpCLGdCQUFNLE1BQU0sV0FBVyxVQUFVO0FBQ2pDLGdCQUFNLElBQUksSUFBSSxRQUFRLEdBQUc7QUFDekIsZ0JBQU0sTUFBTSxXQUFXLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztBQUN2QyxnQkFBTSxZQUFZLEdBQUcsR0FBRztBQUN4QixnQkFBTSxNQUFNLFdBQVcsSUFBSSxPQUFPLENBQUMsQ0FBQztBQUdwQyxjQUFJLElBQUksUUFBUSxHQUFHLElBQUksR0FBRztBQUN6QixrQkFBTSxJQUFJLE1BQU0sNENBQTRDO0FBQUEsVUFDN0Q7QUFFQSxnQkFBTSxPQUFPLElBQUksS0FBSyxHQUFHO0FBQ3pCLGVBQUssY0FBYyxFQUFFLFVBQVUsUUFBUSxDQUFDLEdBQUcsTUFBTTtBQUNoRCxpQkFBSyxZQUFZLEdBQUcsQ0FBQztBQUFBLFVBQ3RCLENBQUM7QUFFRCxjQUFJO0FBQ0osY0FBSTtBQUNILDZCQUFpQixnQkFBZ0Isc0JBQXNCO0FBQ3ZELG9CQUFRLEtBQUssSUFBSSxPQUFPO0FBQUEsVUFDekIsU0FBU0MsSUFBRztBQUNYLDZCQUFpQixhQUFhLHdCQUF3QkEsR0FBRSxPQUFPO0FBQUEsVUFDaEU7QUFFQSxnQkFBTSxXQUFXLElBQUksTUFBTSxHQUFHLEVBQUUsSUFBSTtBQUVwQyxjQUFJO0FBQ0osY0FBSSxpQkFBaUIsY0FBYyxHQUFHO0FBQ3JDLDBCQUFjLGlCQUFpQjtBQUFBLFVBQ2hDO0FBRUEsY0FBSSxDQUFDLFdBQVcsS0FBSyxHQUFHO0FBQ3ZCLGtCQUFNLElBQUksTUFBTSwyQkFBMkI7QUFBQSxVQUM1QztBQUVBLGdCQUFNLFlBQVksb0JBQUksSUFBSTtBQUUxQixxQkFBVyxDQUFDQyxFQUFDLEtBQUssT0FBTyxRQUFRLEtBQUssR0FBRztBQUN4QyxrQkFBTSxNQUFNLFlBQVlBO0FBQ3hCLGtCQUFNLGNBQWMsR0FBRyxRQUFRLElBQUlBLEVBQUM7QUFFcEMsc0JBQVUsSUFBSSxHQUFHO0FBQ2pCLGtCQUFNLGFBQWEsaUJBQWlCO0FBQUEsY0FDbkMsSUFBSSxrQ0FBa0MsS0FBSyxHQUFHO0FBQUEsWUFDL0M7QUFFQSxnQkFBSSxzQkFBc0IsYUFBYTtBQUN0Qyw0QkFBYztBQUNkO0FBQUEsWUFDRDtBQUVBLHNDQUEwQixrQkFBa0IsS0FBSyxLQUFLLFdBQVc7QUFBQSxVQUNsRTtBQUVBLGdCQUFNLFFBQVEsaUJBQWlCO0FBQUEsWUFDOUIsSUFBSSxrQ0FBa0MsTUFBTSxTQUFTO0FBQUEsVUFDdEQ7QUFFQSxxQkFBVyxDQUFDLEVBQUUsSUFBSSxLQUFLLE9BQU8sUUFBUSxLQUFLLEdBQUc7QUFDN0MsZ0JBQ0MsQ0FBQyxVQUFVO0FBQUEsY0FDVixLQUFLLGFBQWEsa0NBQWtDO0FBQUEsWUFDckQsR0FDQztBQUNELGtCQUFJO0FBQ0gsaUNBQWlCLFlBQVksSUFBSTtBQUFBLGNBQ2xDLFNBQVNELElBQUc7QUFDWCxpQ0FBaUI7QUFBQSxrQkFDaEI7QUFBQSxrQkFDQSxHQUFHLGlCQUFpQixhQUFhLHNCQUFzQixDQUFDLEtBQ3ZEQSxHQUFFLE9BQ0gsR0FBRyxLQUFLO0FBQUEsZ0JBQ1Q7QUFBQSxjQUNEO0FBQUEsWUFDRDtBQUFBLFVBQ0Q7QUFBQSxRQUNEO0FBRUEsVUFBRSxJQUFJO0FBQUEsTUFDUDtBQUVBLFVBQUksVUFBVSxNQUFPO0FBQ3JCLFVBQUksT0FBTyxLQUFLO0FBQ2YsY0FBTSxJQUFJLE1BQU0saURBQWlEO0FBQUEsTUFDbEU7QUFBQSxJQUNEO0FBQUEsRUFDRDtBQWFBLFdBQVMsMEJBQTBCLFdBQVcsS0FBSyxLQUFLLE1BQU07QUFDN0QsVUFBTSxXQUFXLHFCQUFxQixLQUFLLFNBQVM7QUFFcEQsVUFBTSxRQUFRLFNBQVMsdUJBQXVCO0FBQzlDLGVBQVcsQ0FBQyxFQUFFLElBQUksS0FBSyxPQUFPLFFBQVEsTUFBTSxVQUFVLEdBQUc7QUFDeEQsVUFBSSxnQkFBZ0IsYUFBYTtBQUNoQyx1QkFBZSxNQUFNLEtBQUssSUFBSTtBQUM5QixhQUFLLGFBQWEsb0NBQW9DLEdBQUc7QUFBQSxNQUMxRDtBQUVBLGdCQUFVLFlBQVksSUFBSTtBQUFBLElBQzNCO0FBQUEsRUFDRDtBQVdBLFdBQVMsZUFBZSxNQUFNLEtBQUssTUFBTTtBQUN4QyxRQUFJLGdCQUFnQixhQUFhO0FBQ2hDLFVBQUksS0FBSyxhQUFhLHlCQUF5QixHQUFHO0FBQ2pELGNBQU0sUUFBUSxLQUFLLGFBQWEseUJBQXlCO0FBQ3pELGFBQUs7QUFBQSxVQUNKO0FBQUEsVUFDQSxNQUFNLFdBQVcsUUFBUSxHQUFHLElBQUksUUFBUSxJQUFJLEVBQUU7QUFBQSxRQUMvQztBQUFBLE1BQ0Q7QUFFQSxVQUFJLEtBQUssYUFBYSw0QkFBNEIsR0FBRztBQUNwRCxjQUFNLFFBQVEsS0FBSyxhQUFhLDRCQUE0QjtBQUM1RCxhQUFLO0FBQUEsVUFDSjtBQUFBLFVBQ0EsTUFBTSxXQUFXLFFBQVEsR0FBRyxJQUFJLFFBQVEsSUFBSSxFQUFFO0FBQUEsUUFDL0M7QUFBQSxNQUNEO0FBRUEsaUJBQVcsQ0FBQyxFQUFFLEtBQUssS0FBSyxPQUFPLFFBQVEsS0FBSyxVQUFVLEdBQUc7QUFDeEQsdUJBQWUsT0FBTyxLQUFLLElBQUk7QUFBQSxNQUNoQztBQUFBLElBQ0Q7QUFBQSxFQUNEO0FBVUEsV0FBUyxjQUFjLFFBQVE7QUFDOUIsVUFBTSxVQUFVLEtBQUssY0FBYyxFQUFFLFFBQVEsZUFBZTtBQUU1RCxVQUFNLElBQUksTUFBTSxTQUFTLE1BQU0sQ0FBQztBQUNoQyxxQkFBaUIsS0FBSyxNQUFNLEtBQUssY0FBYyxFQUFFLFNBQVMsR0FBRyxPQUFPO0FBRXBFLFVBQU0sUUFBUSxLQUFLLGNBQWMsRUFBRSxRQUFRLGlCQUFpQixNQUFNO0FBQ2xFLFFBQUksTUFBTSxTQUFTLEdBQUc7QUFDckIsaUJBQVcsQ0FBQyxFQUFFLElBQUksS0FBSyxPQUFPLFFBQVEsS0FBSyxHQUFHO0FBQzdDLG1CQUFXLENBQUMsRUFBRSxPQUFPLEtBQUssT0FBTyxRQUFRLEtBQUssY0FBYyxDQUFDLEdBQUc7QUFDL0QsMkJBQWlCLEtBQUssTUFBTSxTQUFTLEdBQUcsT0FBTztBQUFBLFFBQ2hEO0FBQUEsTUFDRDtBQUFBLElBQ0Q7QUFBQSxFQUNEO0FBV0EsV0FBUyxpQkFBaUIsV0FBVyxPQUFPLFNBQVM7QUFDcEQsUUFBSSxDQUFDLFFBQVEsS0FBSyxFQUFHO0FBQ3JCLFFBQUksRUFBRSxxQkFBcUIsYUFBYztBQUN6QyxZQUFRLE1BQU0sS0FBSztBQUVuQixVQUFNLE1BQU0sb0JBQUksUUFBUTtBQUV4QixXQUFPLE1BQU0sU0FBUyxHQUFHO0FBQ3hCLFlBQU0sVUFBVSxNQUFNLEtBQUssR0FBRztBQUM5QixZQUFNLElBQUk7QUFHVixZQUFNLFFBQVEsSUFBSSx5QkFBeUIsV0FBVyxPQUFPLFFBQVEseUJBQXlCLGtCQUFrQix5QkFBeUI7QUFDekksWUFBTSxJQUFJLFVBQVUsaUJBQWlCLEdBQUcsS0FBSyxFQUFFO0FBRS9DLFlBQU0sV0FBVyxvQkFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFFL0IsVUFBSSxVQUFVLFFBQVEsS0FBSyxHQUFHO0FBQzdCLGlCQUFTLElBQUksU0FBUztBQUFBLE1BQ3ZCO0FBS0EsaUJBQVcsQ0FBQyxPQUFPLEtBQUssU0FBUyxRQUFRLEdBQUc7QUFDM0MsWUFBSSxJQUFJLElBQUksT0FBTyxFQUFHO0FBQ3RCLFlBQUksSUFBSSxPQUFPO0FBRWYsY0FBTSxhQUFhLFFBQVEsYUFBYSx5QkFBeUI7QUFDakUsY0FBTSxNQUFNLFdBQVcsVUFBVTtBQUVqQyxjQUFNLE9BQU8sSUFBSSxLQUFLLEdBQUc7QUFDekIsYUFBSyxjQUFjLEVBQUUsVUFBVSxRQUFRLENBQUMsR0FBRyxNQUFNO0FBQ2hELGVBQUssWUFBWSxHQUFHLENBQUM7QUFBQSxRQUN0QixDQUFDO0FBRUQsWUFBSTtBQUNKLFlBQUk7QUFDSCxrQkFBUSxnQkFBZ0Isc0JBQXNCO0FBQzlDLGtCQUFRLEtBQUssSUFBSSxPQUFPO0FBQUEsUUFDekIsU0FBU0EsSUFBRztBQUNYLGtCQUFRLGFBQWEsd0JBQXdCQSxHQUFFLE9BQU87QUFBQSxRQUN2RDtBQUVBLFlBQUksaUJBQWlCLGFBQWE7QUFDakMsaUJBQU8sUUFBUSxZQUFZO0FBQzFCLG9CQUFRLFlBQVksUUFBUSxVQUFVO0FBQUEsVUFDdkM7QUFFQSxjQUFJO0FBQ0gsb0JBQVEsWUFBWSxLQUFLO0FBQUEsVUFDMUIsU0FBU0EsSUFBRztBQUNYLG9CQUFRO0FBQUEsY0FDUDtBQUFBLGNBQ0EsR0FBRyxRQUFRLGFBQWEsc0JBQXNCLENBQUMsS0FDOUNBLEdBQUUsT0FDSCxHQUFHLEtBQUs7QUFBQSxZQUNUO0FBQUEsVUFDRDtBQUFBLFFBQ0QsT0FBTztBQUNOLGtCQUFRLFlBQVk7QUFBQSxRQUNyQjtBQUFBLE1BQ0Q7QUFBQSxJQUNEO0FBQUEsRUFDRDtBQVFBLFdBQVMsaUJBQWlCLFFBQVE7QUFDakMsVUFBTSxVQUFVLEtBQUssY0FBYyxFQUFFLFFBQVEsZUFBZTtBQUM1RCxVQUFNLElBQUksTUFBTSxTQUFTLE1BQU0sQ0FBQztBQUNoQyx3QkFBb0IsS0FBSyxNQUFNLEtBQUssY0FBYyxFQUFFLFNBQVMsR0FBRyxPQUFPO0FBQUEsRUFDeEU7QUFVQSxXQUFTLG9CQUFvQixXQUFXLE9BQU8sU0FBUztBQUN2RCxRQUFJLENBQUMsUUFBUSxLQUFLLEVBQUc7QUFDckIsWUFBUSxNQUFNLEtBQUs7QUFFbkIsVUFBTSxNQUFNLG9CQUFJLFFBQVE7QUFFeEIsV0FBTyxNQUFNLFNBQVMsR0FBRztBQUN4QixZQUFNLFVBQVUsTUFBTSxLQUFLLEdBQUc7QUFDOUIsWUFBTSxJQUFJO0FBRVYsVUFBSSxXQUFXLG9CQUFJLElBQUk7QUFFdkIsWUFBTSxRQUFRLElBQUksNkJBQTZCLEtBQUssNEJBQTRCLE9BQU8sNEJBQTRCLFdBQVcsT0FBTyxRQUFRLDRCQUE0QixrQkFBa0IsNEJBQTRCO0FBRXZOLFlBQU0sSUFBSSxVQUFVLGlCQUFpQixLQUFLO0FBRTFDLFVBQUksRUFBRSxTQUFTLEdBQUc7QUFDakIsbUJBQVcsb0JBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQUEsTUFDMUI7QUFFQSxVQUFJLFVBQVUsUUFBUSxLQUFLLEdBQUc7QUFDN0IsaUJBQVMsSUFBSSxTQUFTO0FBQUEsTUFDdkI7QUFFQSxpQkFBVyxDQUFDLE9BQU8sS0FBSyxTQUFTLFFBQVEsR0FBRztBQUMzQyxZQUFJLElBQUksSUFBSSxPQUFPLEVBQUc7QUFDdEIsWUFBSSxJQUFJLE9BQU87QUFHZixZQUFJLENBQUMsUUFBUSxhQUFhLDRCQUE0QixHQUFHO0FBQ3hEO0FBQUEsUUFDRDtBQUVBLGNBQU0sYUFBYSxRQUFRLGFBQWEsNEJBQTRCO0FBRXBFLGlCQUFTLENBQUMsRUFBRSxHQUFHLEtBQUssT0FBTyxRQUFRLFdBQVcsTUFBTSxHQUFHLENBQUMsR0FBRztBQUMxRCxnQkFBTSxXQUFXLEdBQUc7QUFDcEIsZ0JBQU0sSUFBSSxJQUFJLFFBQVEsR0FBRztBQUN6QixnQkFBTSxPQUFPLFdBQVcsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ3hDLGdCQUFNLE1BQU0sV0FBVyxJQUFJLE9BQU8sQ0FBQyxDQUFDO0FBRXBDLGdCQUFNLE9BQU8sSUFBSSxLQUFLLEdBQUc7QUFFekIsZUFBSyxjQUFjLEVBQUUsVUFBVSxRQUFRLENBQUMsR0FBRyxNQUFNO0FBQ2hELGlCQUFLLFlBQVksR0FBRyxHQUFHLE9BQU87QUFBQSxVQUMvQixDQUFDO0FBRUQsY0FBSTtBQUNKLGNBQUk7QUFDSCxvQkFBUSxnQkFBZ0Isc0JBQXNCO0FBQzlDLG9CQUFRLEtBQUssSUFBSSxPQUFPO0FBQUEsVUFDekIsU0FBU0EsSUFBRztBQUNYLG9CQUFRLGFBQWEsd0JBQXdCQSxHQUFFLE9BQU87QUFBQSxVQUN2RDtBQUVBLGNBQUksVUFBVSxRQUFXO0FBQ3hCLG9CQUFRLGdCQUFnQixJQUFJO0FBQUEsVUFDN0IsV0FBVyxRQUFRLGFBQWEsSUFBSSxNQUFNLE9BQU87QUFDaEQsb0JBQVEsYUFBYSxNQUFNLEtBQUs7QUFBQSxVQUNqQztBQUVBLDRDQUFrQyxLQUFLLE1BQU0sU0FBUyxNQUFNLEtBQUs7QUFBQSxRQUNsRTtBQUFBLE1BQ0Q7QUFBQSxJQUNEO0FBQUEsRUFDRDtBQVdBLFdBQVMsa0NBQWtDLFNBQVMsTUFBTSxPQUFPO0FBQ2hFLFFBQUksbUJBQW1CLG1CQUFtQjtBQUN6QyxjQUFRLFFBQVEsTUFBTTtBQUFBLFFBQ3JCLEtBQUs7QUFDSixxQkFBVyxDQUFDLE9BQU8sR0FBRyxLQUFLLE9BQU8sUUFBUSxRQUFRLE9BQU8sR0FBRztBQUMzRCxnQkFBSSxNQUFNLFFBQVEsSUFBSSxLQUFLLE1BQU0sSUFBSTtBQUNwQyxrQkFBSSxXQUFXO0FBQUEsWUFDaEIsT0FBTztBQUNOLGtCQUFJLFdBQVc7QUFBQSxZQUNoQjtBQUFBLFVBQ0Q7QUFFQTtBQUFBLFFBQ0QsS0FBSztBQUdKLHFCQUFXLENBQUMsT0FBTyxHQUFHLEtBQUssT0FBTyxRQUFRLFFBQVEsT0FBTyxHQUFHO0FBQzNELGdCQUFJLElBQUksVUFBVSxPQUFPO0FBQ3hCLHNCQUFRLGdCQUFnQjtBQUN4QjtBQUFBLFlBQ0Q7QUFBQSxVQUNEO0FBRUE7QUFBQSxNQUNGO0FBQUEsSUFDRCxXQUFXLG1CQUFtQixrQkFBa0I7QUFDL0MsY0FBUSxRQUFRLE1BQU07QUFBQSxRQUNyQixLQUFLO0FBQ0osY0FBSSxTQUFTLFdBQVc7QUFDdkIsb0JBQVEsVUFBVSxVQUFVO0FBQUEsVUFDN0I7QUFFQTtBQUFBLFFBRUQsS0FBSztBQUNKLGNBQUksU0FBUyxXQUFXO0FBQ3ZCLG9CQUFRLFVBQVUsVUFBVTtBQUFBLFVBQzdCO0FBRUE7QUFBQSxRQUNELEtBQUs7QUFBQSxRQUNMO0FBQ0MsY0FBSSxTQUFTLFNBQVM7QUFDckIsb0JBQVEsUUFBUSxVQUFVLFNBQVksS0FBSztBQUFBLFVBQzVDO0FBRUE7QUFBQSxNQUNGO0FBQUEsSUFDRCxXQUFXLG1CQUFtQixxQkFBcUI7QUFDbEQsVUFBSSxTQUFTLFNBQVM7QUFDckIsZ0JBQVEsUUFBUSxVQUFVLFNBQVksS0FBSztBQUFBLE1BQzVDO0FBQUEsSUFDRDtBQUFBLEVBQ0Q7QUFpQkEsV0FBUyw4QkFBOEIsVUFBVUUsU0FBUSxRQUFRQyxVQUFTLENBQUMsR0FBRztBQUM3RSxRQUFJLEVBQUUsZ0JBQWdCLGNBQWM7QUFDbkMsWUFBTSxJQUFJO0FBQUEsUUFDVDtBQUFBLE1BQ0Q7QUFBQSxJQUNEO0FBRUEsUUFBSSxFQUFFLE9BQU9ELFlBQVcsV0FBVztBQUNsQyxZQUFNLElBQUksVUFBVSxzQ0FBc0M7QUFBQSxJQUMzRDtBQUVBLFVBQU0sV0FBVyxvQkFBSSxJQUFJO0FBRXpCLFFBQUksb0JBQW9CLFVBQVU7QUFDakMsaUJBQVcsb0JBQUksSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQUEsSUFDakMsV0FBVyxvQkFBb0IsYUFBYTtBQUMzQyxpQkFBVyxvQkFBSSxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQUEsSUFDOUIsV0FBVyxvQkFBb0IsS0FBSztBQUFBLElBQ3BDLE9BQU87QUFDTixZQUFNLElBQUk7QUFBQSxRQUNULDBDQUEwQyxPQUFPLFFBQVE7QUFBQSxNQUMxRDtBQUFBLElBQ0Q7QUFFQSxVQUFNLFNBQVMsQ0FBQztBQUVoQixVQUFNLG1CQUFtQixDQUFDO0FBQzFCLFVBQU0sS0FBSyxPQUFPLCtCQUErQjtBQUNqRCxRQUFJLGdCQUFnQixlQUFlLE9BQU8sT0FBTyxZQUFZO0FBQzVELFlBQU0sWUFBWSxHQUFHLEtBQUssSUFBSTtBQUM5QixVQUFJLE9BQU8sY0FBYyxVQUFVO0FBQ2xDLG1CQUFXLENBQUMsTUFBTSxRQUFRLEtBQUssT0FBTyxRQUFRLFNBQVMsR0FBRztBQUN6RCxjQUFJLE9BQU8sYUFBYSxZQUFZO0FBQ25DLDZCQUFpQixLQUFLLENBQUMsTUFBTSxRQUFRLENBQUM7QUFBQSxVQUN2QyxPQUFPO0FBQ047QUFBQSxjQUNDO0FBQUEsY0FDQTtBQUFBLGNBQ0EsMkJBQTJCLElBQUk7QUFBQSxZQUNoQztBQUFBLFVBQ0Q7QUFBQSxRQUNEO0FBQUEsTUFDRCxPQUFPO0FBQ047QUFBQSxVQUNDO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBLElBQ0Q7QUFFQSxhQUFTLFFBQVEsQ0FBQyxZQUFZO0FBQzdCLFVBQUksRUFBRSxtQkFBbUIsYUFBYztBQUN2QyxVQUFJLG1CQUFtQixvQkFBcUI7QUFFNUMsWUFBTSxJQUFJLElBQUksUUFBUSxTQUFTLE1BQU07QUFDckMsZUFBUyxJQUFJLENBQUM7QUFFZCxVQUFJLGlCQUFpQixTQUFTLEdBQUc7QUFDaEMsbUJBQVcsQ0FBQyxNQUFNLFFBQVEsS0FBSyxrQkFBa0I7QUFDaEQsWUFBRSxZQUFZLE1BQU0sUUFBUTtBQUFBLFFBQzdCO0FBQUEsTUFDRDtBQUVBLGFBQU87QUFBQSxRQUNOLEVBQUUsSUFBSSxFQUFFLEtBQUssTUFBTTtBQUNsQixjQUFJQyxRQUFPLG9CQUFvQixNQUFNO0FBQ3BDLGNBQUUsc0JBQXNCO0FBQUEsVUFDekI7QUFFQSxpQkFBTztBQUFBLFFBQ1IsQ0FBQztBQUFBLE1BQ0Y7QUFBQSxJQUNELENBQUM7QUFFRCxRQUFJLFNBQVMsT0FBTyxHQUFHO0FBQ3RCLHNCQUFnQixNQUFNRCxTQUFRLFFBQVE7QUFBQSxJQUN2QztBQUVBLFdBQU87QUFBQSxFQUNSO0FBcitCQSxNQXFFTSxTQXNOQTtBQTNSTjtBQUFBO0FBY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFBRTtBQVlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTRCQSxNQUFNLFVBQU4sY0FBc0IsS0FBSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVMxQixZQUFZLFNBQVMsU0FBUztBQUM3QixnQkFBTTtBQUtOLGNBQUksWUFBWSxPQUFXLFdBQVUsQ0FBQztBQUN0QyxjQUFJLENBQUMsV0FBVyxTQUFTLGFBQWEsR0FBRztBQUN4QyxzQkFBVSxJQUFJLGNBQWMsT0FBTztBQUFBLFVBQ3BDO0FBRUEsZUFBSyxjQUFjLElBQUk7QUFBQSxZQUN0QixTQUFTLGlCQUFpQixTQUFTLFdBQVc7QUFBQSxZQUM5QyxNQUFNLENBQUM7QUFBQSxZQUNQLFdBQVcsb0JBQUksSUFBSTtBQUFBLFlBQ25CLFlBQVksQ0FBQyxTQUFTLFNBQVMsVUFBVSxRQUFRLFlBQVksT0FBTztBQUFBLFlBQ3BFO0FBQUEsVUFDRDtBQUVBLGVBQUssY0FBYyxFQUFFLFVBQVU7QUFBQSxZQUM5QjtBQUFBLFlBQ0Esc0JBQXNCLEtBQUssSUFBSTtBQUFBLFVBQ2hDO0FBRUEsZUFBSyxjQUFjLEVBQUUsUUFBUTtBQUFBLFlBQzVCLElBQUksU0FBUyxNQUFNO0FBQ2xCLG9CQUFNLElBQUksS0FBSyxjQUFjLEVBQUUsUUFBUSxlQUFlO0FBRXRELG9CQUFNLGFBQWEsS0FBSyxLQUFLLGNBQWMsRUFBRSxNQUFNLENBQUM7QUFDcEQsbUJBQUssY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBRW5DLG9CQUFNLFdBQVcsQ0FBQztBQUVsQix5QkFBVyxDQUFDLEVBQUUsTUFBTSxLQUFLLE9BQU8sUUFBUSxVQUFVLEdBQUc7QUFDcEQseUJBQVM7QUFBQSxrQkFDUixJQUFJLFFBQVEsQ0FBQyxTQUFTLFdBQVc7QUFDaEMsb0JBQUFDLFdBQVUsRUFBRSxzQkFBc0IsTUFBTTtBQUN2QywwQkFBSTtBQUNILHNDQUFjLEtBQUssTUFBTSxNQUFNO0FBQy9CLHNDQUFjLEtBQUssTUFBTSxNQUFNO0FBQy9CLHNDQUFjLEtBQUssTUFBTSxNQUFNO0FBQy9CLHlDQUFpQixLQUFLLE1BQU0sTUFBTTtBQUVsQyxnQ0FBUTtBQUFBLHNCQUNULFNBQVMsT0FBTztBQUNmLCtCQUFPLEtBQUs7QUFBQSxzQkFDYjtBQUFBLG9CQUNELENBQUM7QUFBQSxrQkFDRixDQUFDO0FBQUEsZ0JBQ0Y7QUFBQSxjQUNEO0FBRUEscUJBQU8sUUFBUSxJQUFJLFFBQVE7QUFBQSxZQUM1QixDQUFDO0FBQUEsVUFDRjtBQUFBLFFBQ0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFVQSxjQUFjLE9BQU87QUFDcEIsZUFBSyxjQUFjLEVBQUUsYUFBYSxjQUFjLEtBQUs7QUFDckQsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQWVBLHdCQUF3QjtBQUN2QixlQUFLLHVCQUF1QjtBQUU1QixxQkFBV04sU0FBUSxLQUFLLGNBQWMsRUFBRSxZQUFZO0FBRW5ELGlCQUFLLGNBQWMsRUFBRSxRQUFRO0FBQUEsY0FDNUJBO0FBQUEsY0FDQSx1QkFBdUIsS0FBSyxJQUFJO0FBQUEsY0FDaEM7QUFBQSxnQkFDQyxTQUFTO0FBQUEsZ0JBQ1QsU0FBUztBQUFBLGNBQ1Y7QUFBQSxZQUNEO0FBQUEsVUFDRDtBQUVBLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBUUEseUJBQXlCO0FBQ3hCLHFCQUFXQSxTQUFRLEtBQUssY0FBYyxFQUFFLFlBQVk7QUFDbkQsaUJBQUssY0FBYyxFQUFFLFFBQVE7QUFBQSxjQUM1QkE7QUFBQSxjQUNBLHVCQUF1QixLQUFLLElBQUk7QUFBQSxZQUNqQztBQUFBLFVBQ0Q7QUFFQSxpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBZUEsTUFBTTtBQUdMLGVBQUssY0FBYyxFQUFFLE9BQU8sRUFBRSxVQUFVLEtBQUs7QUFDN0MsaUJBQU8sS0FBSyxjQUFjLEVBQUUsUUFBUSxnQkFBZ0I7QUFBQSxRQUNyRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBUUEsV0FBVztBQUNWLCtCQUFxQixLQUFLLElBQUk7QUFDOUIsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFXQSxhQUFhO0FBQ1osaUJBQU8sS0FBSyxjQUFjLEVBQUUsUUFBUSxXQUFXO0FBQUEsUUFDaEQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBWUEsWUFBWSxNQUFNLFVBQVU7QUFDM0IsZUFBSyxjQUFjLEVBQUUsVUFBVSxJQUFJLE1BQU0sUUFBUTtBQUNqRCxpQkFBTztBQUFBLFFBQ1I7QUFBQSxNQUNEO0FBNkJBLE1BQU0sU0FBUyxPQUFPLHdDQUF3QztBQUFBO0FBQUE7OztBQzlQOUQsV0FBUyxnQkFBZ0IsT0FBTyxNQUFNO0FBQ3JDLFVBQU0sU0FBUyxvQkFBSSxJQUFJO0FBRXZCLFFBQUksQ0FBQyxLQUFLLFlBQVk7QUFDckIsYUFBTztBQUFBLElBQ1I7QUFFQSxRQUFJLFdBQVc7QUFDZixRQUFJLFNBQVMsUUFBVztBQUN2QixVQUFJLFNBQVMsTUFBTTtBQUNsQixvQkFBWTtBQUFBLE1BQ2IsT0FBTztBQUNOLG9CQUFZLFNBQVMsZUFBZSxJQUFJLENBQUM7QUFBQSxNQUMxQztBQUFBLElBQ0Q7QUFFQSxVQUFNLFFBQVEsS0FBSyxXQUFXLGlCQUFpQixRQUFRO0FBRXZELGVBQVcsQ0FBQyxFQUFFLElBQUksS0FBSyxPQUFPLFFBQVEsS0FBSyxHQUFHO0FBQzdDLFdBQUssY0FBYyxFQUFFLFFBQVEsU0FBVSxNQUFNO0FBQzVDLFlBQUksU0FBUyxRQUFRLFNBQVMsUUFBVztBQUN4QztBQUFBLFFBQ0Q7QUFFQSxZQUFJLFNBQVMsS0FBSyxHQUFHO0FBQ3BCLGVBQUssaUJBQWlCLEtBQUssRUFBRSxRQUFRLFNBQVUsR0FBRztBQUNqRCxtQkFBTyxJQUFJLENBQUM7QUFBQSxVQUNiLENBQUM7QUFFRCxjQUFJLEtBQUssUUFBUSxLQUFLLEdBQUc7QUFDeEIsbUJBQU8sSUFBSSxJQUFJO0FBQUEsVUFDaEI7QUFBQSxRQUNELFdBQVcsVUFBVSxRQUFXO0FBQy9CLGdCQUFNLElBQUksTUFBTSx3QkFBd0I7QUFBQSxRQUN6QyxPQUFPO0FBQ04saUJBQU8sSUFBSSxJQUFJO0FBQUEsUUFDaEI7QUFBQSxNQUNELENBQUM7QUFBQSxJQUNGO0FBRUEsV0FBTztBQUFBLEVBQ1I7QUFZQSxXQUFTLG1CQUFtQixPQUFPLE1BQU07QUFDeEMsVUFBTSxTQUFTLG9CQUFJLElBQUk7QUFFdkIsUUFBSSxFQUFFLEtBQUssc0JBQXNCLGFBQWE7QUFDN0MsYUFBTztBQUFBLElBQ1I7QUFFQSxRQUFJLFdBQVc7QUFDZixRQUFJLFNBQVMsUUFBVztBQUN2QixVQUFJLFNBQVMsTUFBTTtBQUNsQixvQkFBWTtBQUFBLE1BQ2IsT0FBTztBQUNOLG9CQUFZLFNBQVMsZUFBZSxJQUFJLENBQUM7QUFBQSxNQUMxQztBQUFBLElBQ0Q7QUFFQSxVQUFNLFFBQVEsS0FBSyxXQUFXLGlCQUFpQixRQUFRO0FBRXZELGVBQVcsQ0FBQyxFQUFFLElBQUksS0FBSyxPQUFPLFFBQVEsS0FBSyxHQUFHO0FBQzdDLFdBQUssaUJBQWlCLEVBQUUsUUFBUSxTQUFVLE1BQU07QUFDL0MsWUFDQyxFQUFFLGdCQUFnQixnQkFDbEIsRUFBRSxnQkFBZ0IsZUFDbEIsRUFBRSxnQkFBZ0I7QUFFbEI7QUFFRCxZQUFJLFNBQVMsS0FBSyxHQUFHO0FBQ3BCLGNBQUksTUFBTSxTQUFTLEdBQUc7QUFDckIsaUJBQUssaUJBQWlCLEtBQUssRUFBRSxRQUFRLFNBQVUsR0FBRztBQUNqRCxxQkFBTyxJQUFJLENBQUM7QUFBQSxZQUNiLENBQUM7QUFFRCxnQkFBSSxLQUFLLFFBQVEsS0FBSyxHQUFHO0FBQ3hCLHFCQUFPLElBQUksSUFBSTtBQUFBLFlBQ2hCO0FBQUEsVUFDRCxPQUFPO0FBQ04sbUJBQU8sSUFBSSxJQUFJO0FBQUEsVUFDaEI7QUFBQSxRQUNELFdBQVcsVUFBVSxRQUFXO0FBQy9CLGdCQUFNLElBQUksTUFBTSxzQ0FBc0M7QUFBQSxRQUN2RCxPQUFPO0FBQ04saUJBQU8sSUFBSSxJQUFJO0FBQUEsUUFDaEI7QUFBQSxNQUNELENBQUM7QUFBQSxJQUNGO0FBRUEsV0FBTztBQUFBLEVBQ1I7QUFsSUE7QUFBQTtBQWNBO0FBQ0E7QUFBQTtBQUFBOzs7QUNXQSxXQUFTLFlBQ1IsS0FDQSxZQUFZLElBQ1osZUFBZSxLQUNmLGlCQUFpQixLQUNoQjtBQUNELFVBQU0sWUFBWSxvQkFBSSxJQUFJO0FBRTFCLGFBQVMsT0FBTyxZQUFZLGtCQUFrQixvQkFBb0I7QUFDakUsaUJBQVcsT0FBTyxZQUFZO0FBQzdCLFlBQ0MsV0FBVyxHQUFHLE1BQU0sUUFDcEIsT0FBTyxXQUFXLEdBQUcsTUFBTSxZQUMzQixDQUFDLE1BQU0sUUFBUSxXQUFXLEdBQUcsQ0FBQyxHQUM3QjtBQUNELGdCQUFNLGVBQWUsbUJBQ2xCLG1CQUFtQixlQUFlLElBQUksWUFBWSxJQUNsRCxJQUFJLFlBQVk7QUFDbkIsZ0JBQU0saUJBQWlCLHFCQUNwQixxQkFBcUIsaUJBQWlCLE1BQ3RDO0FBQ0gsaUJBQU8sV0FBVyxHQUFHLEdBQUcsY0FBYyxjQUFjO0FBQUEsUUFDckQsT0FBTztBQUNOLGdCQUFNLFdBQVcsbUJBQ2QsbUJBQW1CLGVBQWUsSUFBSSxZQUFZLElBQ2xELElBQUksWUFBWTtBQUNuQixnQkFBTSxhQUFhLHFCQUNoQixxQkFBcUIsaUJBQWlCLE1BQ3RDO0FBQ0gsb0JBQVUsSUFBSSxVQUFVLFVBQVU7QUFBQSxRQUNuQztBQUFBLE1BQ0Q7QUFBQSxJQUNEO0FBRUEsV0FBTyxLQUFLLFdBQVcsU0FBUztBQUNoQyxXQUFPO0FBQUEsRUFDUjtBQTlEQTtBQUFBO0FBQUE7QUFBQTs7O0FDQUE7QUFBQTtBQUFBO0FBQUE7QUEyREEsV0FBUywwQkFDUixTQUNBTyxVQUNBLFVBQVUsQ0FBQyxHQUNYLFNBQVMsd0JBQ1I7QUFDRCxRQUFJLEVBQUUsbUJBQW1CLGFBQWMsUUFBT0E7QUFDOUMsUUFBSSxDQUFDLFFBQVEsY0FBYyxFQUFHLFFBQU9BO0FBRXJDLFVBQU0sU0FBUyxZQUFZQSxRQUFPO0FBQ2xDLFVBQU0sU0FBUyxJQUFJLFdBQVdBLFFBQU87QUFFckMsWUFBUSxrQkFBa0IsRUFBRSxRQUFRLENBQUMsU0FBUztBQUM3QyxVQUFJLENBQUMsS0FBSyxXQUFXLE1BQU0sRUFBRztBQUs5QixZQUFNLGFBQWEsT0FBTyxJQUFJLEtBQUssVUFBVSxPQUFPLE1BQU0sRUFBRSxZQUFZLENBQUM7QUFDekUsVUFBSSxDQUFDLE9BQU8sT0FBTyxVQUFVLEVBQUc7QUFFaEMsVUFBSSxRQUFRLGFBQWEsSUFBSSxHQUFHO0FBQy9CLFlBQUksUUFBUSxRQUFRLGFBQWEsSUFBSTtBQUNyQyxZQUNDLFFBQVEsZUFBZSxVQUFVLEtBQ2pDLFdBQVcsUUFBUSxVQUFVLENBQUMsR0FDN0I7QUFDRCxrQkFBUSxRQUFRLFVBQVUsRUFBRSxLQUFLO0FBQUEsUUFDbEM7QUFFQSxZQUFJLGNBQWMsT0FBTyxPQUFPLFVBQVU7QUFDMUMsWUFBSSxnQkFBZ0IsUUFBUSxnQkFBZ0IsUUFBVztBQUN0RCx3QkFBYztBQUFBLFFBQ2Y7QUFHQSxZQUFJLGdCQUFnQixRQUFRLGdCQUFnQixRQUFXO0FBQ3RELGtCQUFRO0FBQUEsUUFDVCxXQUFXLFVBQVUsV0FBVyxHQUFHO0FBQ2xDLGtCQUFRLFVBQVU7QUFBQSxRQUNuQixXQUFXLFVBQVUsV0FBVyxHQUFHO0FBQ2xDLGtCQUFRLE9BQU8sS0FBSztBQUFBLFFBQ3JCLFdBQVcsU0FBUyxXQUFXLEdBQUc7QUFDakMsa0JBQVEsT0FBTyxLQUFLO0FBQUEsUUFDckIsV0FBVyxTQUFTLFdBQVcsR0FBRztBQUNqQyxrQkFBUSxLQUFLLE1BQU0sS0FBSztBQUFBLFFBQ3pCLFdBQVcsUUFBUSxXQUFXLEdBQUc7QUFDaEMsa0JBQVEsTUFBTSxNQUFNLElBQUk7QUFBQSxRQUN6QixPQUFPO0FBQ04sa0JBQVE7QUFBQSxRQUNUO0FBRUEsZUFBTyxPQUFPLFlBQVksS0FBSztBQUFBLE1BQ2hDO0FBQUEsSUFDRCxDQUFDO0FBRUQsV0FBT0E7QUFBQSxFQUNSO0FBcEhBO0FBQUE7QUFjQTtBQUNBO0FBUUE7QUFBQTtBQUFBOzs7QUM0QkEsV0FBUyx1QkFDUixTQUNBLE1BQ0FDLFVBQ0EsVUFBVSxDQUFDLEdBQ1gsU0FBUyx3QkFDUjtBQUNELFFBQUksRUFBRSxtQkFBbUIsYUFBYyxRQUFPQTtBQUM5QyxRQUFJLENBQUMsUUFBUSxjQUFjLEVBQUcsUUFBT0E7QUFFckMsVUFBTSxTQUFTLFlBQVlBLFFBQU87QUFDbEMsVUFBTSxTQUFTLElBQUksV0FBV0EsUUFBTztBQUtyQyxVQUFNLGFBQWEsT0FBTyxJQUFJLEtBQUssVUFBVSxPQUFPLE1BQU0sRUFBRSxZQUFZLENBQUM7QUFDekUsUUFBSSxDQUFDLE9BQU8sT0FBTyxVQUFVLEVBQUc7QUFFaEMsUUFBSSxDQUFDLFFBQVEsYUFBYSxJQUFJLEdBQUc7QUFDaEMsYUFBT0E7QUFBQSxJQUNSO0FBRUEsUUFBSSxRQUFRLFFBQVEsYUFBYSxJQUFJO0FBQ3JDLFFBQUksUUFBUSxlQUFlLFVBQVUsS0FBSyxXQUFXLFFBQVEsVUFBVSxDQUFDLEdBQUc7QUFDMUUsY0FBUSxRQUFRLFVBQVUsRUFBRSxLQUFLO0FBQUEsSUFDbEM7QUFFQSxVQUFNLG9CQUFvQixPQUFPLE9BQU8sT0FBTyxVQUFVO0FBQ3pELFFBQUksc0JBQXNCLFdBQVc7QUFDcEMsY0FBUSxVQUFVO0FBQUEsSUFDbkIsV0FBVyxzQkFBc0IsVUFBVTtBQUMxQyxjQUFRLE9BQU8sS0FBSztBQUFBLElBQ3JCLFdBQVcsc0JBQXNCLFVBQVU7QUFDMUMsY0FBUSxPQUFPLEtBQUs7QUFBQSxJQUNyQixXQUFXLHNCQUFzQixVQUFVO0FBQzFDLGNBQVEsS0FBSyxNQUFNLEtBQUs7QUFBQSxJQUN6QjtBQUVBLFdBQU8sT0FBTyxZQUFZLEtBQUs7QUFFL0IsV0FBT0E7QUFBQSxFQUNSO0FBN0ZBO0FBQUE7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7OztBQ2pCQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXV1QkEsV0FBUyxvQkFBb0IseUJBQXlCLE1BQU07QUFDM0QsUUFBSSxDQUFDLFNBQVMsb0JBQW9CLEtBQUsseUJBQXlCLElBQUk7QUFDbkU7QUFBQSxJQUNEO0FBRUEsUUFBSSx3QkFBd0IsTUFBTTtBQUNqQyxhQUFPLEtBQUssb0JBQW9CLEVBQUUsTUFBTSxHQUFHLElBQUk7QUFBQSxJQUNoRDtBQUVBLFFBQUksQ0FBQyxLQUFLLGFBQWEscUJBQXFCLEdBQUc7QUFDOUM7QUFBQSxJQUNEO0FBRUEsUUFBSSxLQUFLLHVCQUF1QixFQUFFLFdBQVcsR0FBRztBQUMvQyxZQUFNLFdBQVcsS0FBSyxhQUFhLHFCQUFxQjtBQUN4RCxVQUFJLENBQUMsVUFBVTtBQUNkO0FBQUEsTUFDRDtBQUVBLFlBQU0sT0FBTyxTQUFTLE1BQU0sR0FBRztBQUMvQixpQkFBVyxNQUFNLE1BQU07QUFDdEIsY0FBTSxPQUFPLHlCQUF5QixNQUFNLFFBQVE7QUFDcEQsWUFBSSxFQUFFLGdCQUFnQixjQUFjO0FBQ25DO0FBQUEsUUFDRDtBQUVBLGFBQUssdUJBQXVCLEVBQUUsS0FBSyxJQUFJO0FBQUEsTUFDeEM7QUFBQSxJQUNEO0FBRUEsZUFBVyxRQUFRLEtBQUssdUJBQXVCLEdBQUc7QUFDakQsVUFBSSx3QkFBd0IsTUFBTTtBQUNqQyxZQUFJO0FBQ0gsaUJBQU8sS0FBSyxvQkFBb0IsRUFBRSxNQUFNLEdBQUcsSUFBSTtBQUFBLFFBQ2hELFNBQVMsR0FBRztBQUNYLDRCQUFrQixNQUFNLHdCQUF3QixFQUFFLFNBQVMsQ0FBQztBQUFBLFFBQzdEO0FBQUEsTUFDRDtBQUFBLElBQ0Q7QUFFQTtBQUFBLE1BQ0M7QUFBQSxNQUNBO0FBQUEsTUFDQSxZQUFZLG9CQUFvQjtBQUFBLElBQ2pDO0FBQUEsRUFDRDtBQWVBLFdBQVMsdUJBQXVCO0FBRS9CLFFBQUksdUJBQXVCO0FBRzNCLFFBQUksS0FBSyxhQUFhLHVCQUF1QixHQUFHO0FBQy9DLDZCQUF1QixLQUFLLGFBQWEsdUJBQXVCO0FBQUEsSUFDakU7QUFHQSx3QkFBb0IsS0FBSyxNQUFNLG9CQUFvQjtBQUFBLEVBQ3BEO0FBUUEsV0FBUyx3Q0FBd0M7QUFDaEQsVUFBTUMsUUFBTztBQUViLFFBQUksT0FBT0EsTUFBSywrQkFBK0IsTUFBTSxhQUFhO0FBQ2pFO0FBQUEsSUFDRDtBQUVBLElBQUFBLE1BQUssK0JBQStCLElBQUksSUFBSTtBQUFBLE1BQzNDLFNBQVUsV0FBVyxVQUFVO0FBQzlCLG1CQUFXLFlBQVksV0FBVztBQUNqQyxjQUFJLFNBQVMsU0FBUyxjQUFjO0FBQ25DLFlBQUFBLE1BQUs7QUFBQSxjQUNKLFNBQVM7QUFBQSxjQUNULFNBQVM7QUFBQSxjQUNULFNBQVMsT0FBTyxhQUFhLFNBQVMsYUFBYTtBQUFBLFlBQ3BEO0FBQUEsVUFDRDtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsSUFDRDtBQUVBLFFBQUk7QUFDSCxNQUFBQSxNQUFLLCtCQUErQixFQUFFLFFBQVFBLE9BQU07QUFBQSxRQUNuRCxZQUFZO0FBQUEsUUFDWixtQkFBbUI7QUFBQSxNQUNwQixDQUFDO0FBQUEsSUFDRixTQUFTLEdBQUc7QUFDWCx3QkFBa0JBLE9BQU0sd0JBQXdCLEVBQUUsU0FBUyxDQUFDO0FBQUEsSUFDN0Q7QUFBQSxFQUNEO0FBUUEsV0FBUyxpQkFBaUIsTUFBTTtBQUMvQixRQUFJLEtBQUssU0FBUyxJQUFJLEdBQUc7QUFDeEIsYUFBTztBQUFBLElBQ1I7QUFFQSxlQUFXLENBQUMsRUFBRSxDQUFDLEtBQUssT0FBTyxRQUFRLEtBQUssVUFBVSxHQUFHO0FBQ3BELFVBQUksRUFBRSxTQUFTLElBQUksR0FBRztBQUNyQixlQUFPO0FBQUEsTUFDUjtBQUVBLHVCQUFpQixLQUFLLEdBQUcsSUFBSTtBQUFBLElBQzlCO0FBRUEsV0FBTztBQUFBLEVBQ1I7QUFRQSxXQUFTLHFCQUFxQjtBQUM3QixVQUFNQSxRQUFPO0FBRWIsUUFBSSxvQkFBb0I7QUFDeEIsSUFBQUEsTUFBSztBQUFBLE1BQ0osSUFBSSxTQUFTLFdBQVk7QUFDeEIsY0FBTUMsUUFBT0QsTUFBSyxVQUFVLFVBQVU7QUFFdEMsWUFBSUMsVUFBUyxtQkFBbUI7QUFDL0I7QUFBQSxRQUNEO0FBRUEsNEJBQW9CQTtBQUVwQixZQUFJLEVBQUVELE1BQUssc0JBQXNCLGFBQWE7QUFDN0M7QUFBQSxRQUNEO0FBRUEsY0FBTSxRQUNMO0FBQ0QsY0FBTSxXQUFXQSxNQUFLLFdBQVcsaUJBQWlCLEtBQUs7QUFFdkQsWUFBSTtBQUNKLFlBQUk7QUFDSCxxQkFBVyxvQkFBSSxJQUFJO0FBQUEsWUFDbEIsR0FBRztBQUFBLFlBQ0gsR0FBRyxtQkFBbUIsS0FBS0EsT0FBTSxLQUFLO0FBQUEsVUFDdkMsQ0FBQztBQUFBLFFBQ0YsU0FBUyxHQUFHO0FBQ1gscUJBQVc7QUFBQSxRQUNaO0FBRUEsbUJBQVcsV0FBVyxDQUFDLEdBQUcsUUFBUSxHQUFHO0FBQ3BDLGNBQUlDLFVBQVMsTUFBTTtBQUNsQixvQkFBUSxhQUFhLG9CQUFvQixFQUFFO0FBQUEsVUFDNUMsT0FBTztBQUNOLG9CQUFRLGdCQUFnQixrQkFBa0I7QUFBQSxVQUMzQztBQUFBLFFBQ0Q7QUFBQSxNQUNELENBQUM7QUFBQSxJQUNGO0FBRUEsSUFBQUQsTUFBSztBQUFBLE1BQ0osSUFBSSxTQUFTLFdBQVk7QUFFeEIsWUFBSSxDQUFDLGNBQWNBLE9BQU0sOEJBQThCLEdBQUc7QUFDekQ7QUFBQSxRQUNEO0FBRUEsY0FBTSxXQUFXLGlCQUFpQkEsT0FBTSw4QkFBOEI7QUFFdEUsbUJBQVcsUUFBUSxVQUFVO0FBQzVCLHFCQUFXLFdBQVcsTUFBTTtBQUMzQixrQkFBTSxJQUFJLE1BQU1BLE1BQUssY0FBYyxFQUFFLGVBQWUsRUFBRSxTQUFTLENBQUM7QUFDaEUsbUJBQU8sT0FBTyxRQUFRLFdBQVcsR0FBRyxDQUFDO0FBQUEsVUFDdEM7QUFBQSxRQUNEO0FBQUEsTUFDRCxDQUFDO0FBQUEsSUFDRjtBQUdBLElBQUFBLE1BQUssdUJBQXVCLEVBQUUsa0JBQWtCLElBQUksTUFBTTtBQUN6RCxVQUFJQSxNQUFLLGFBQWEsa0JBQWtCLEdBQUc7QUFDMUMsUUFBQUEsTUFBSyxVQUFVLG9CQUFvQixJQUFJO0FBQUEsTUFDeEMsT0FBTztBQUNOLFFBQUFBLE1BQUssVUFBVSxvQkFBb0IsTUFBUztBQUFBLE1BQzdDO0FBQUEsSUFDRDtBQUdBLElBQUFBLE1BQUssdUJBQXVCLEVBQUUsaUJBQWlCLElBQUksTUFBTTtBQUN4RCxZQUFNRSxXQUFVLHlCQUF5QixLQUFLRixLQUFJO0FBQ2xELFVBQUksU0FBU0UsUUFBTyxLQUFLLE9BQU8sS0FBS0EsUUFBTyxFQUFFLFNBQVMsR0FBRztBQUN6RCxRQUFBRixNQUFLLFdBQVdFLFFBQU87QUFBQSxNQUN4QjtBQUFBLElBQ0Q7QUFHQSxJQUFBRixNQUFLLHVCQUF1QixFQUFFLDBCQUEwQixJQUFJLE1BQU07QUFDakUsWUFBTUUsV0FBVSx3QkFBd0IsS0FBS0YsS0FBSTtBQUNqRCxVQUFJLFNBQVNFLFFBQU8sS0FBSyxPQUFPLEtBQUtBLFFBQU8sRUFBRSxTQUFTLEdBQUc7QUFDekQsUUFBQUYsTUFBSyxXQUFXRSxRQUFPO0FBQUEsTUFDeEI7QUFBQSxJQUNEO0FBQUEsRUFDRDtBQU9BLFdBQVMsMEJBQTBCO0FBQ2xDLFFBQUksQ0FBQyxLQUFLLGFBQWEsMEJBQTBCLEdBQUc7QUFDbkQsYUFBTyxDQUFDO0FBQUEsSUFDVDtBQUVBLFVBQU0sT0FBTyxTQUFTO0FBQUEsTUFDckIsS0FBSyxhQUFhLDBCQUEwQjtBQUFBLElBQzdDO0FBQ0EsUUFBSSxFQUFFLGdCQUFnQixvQkFBb0I7QUFDekM7QUFBQSxRQUNDO0FBQUEsUUFDQTtBQUFBLFFBQ0EsZ0JBQWdCLDBCQUEwQiwrQkFBK0IsS0FBSztBQUFBLFVBQzdFO0FBQUEsUUFDRCxDQUFDO0FBQUEsTUFDRjtBQUNBLGFBQU8sQ0FBQztBQUFBLElBQ1Q7QUFFQSxRQUFJLE1BQU0sQ0FBQztBQUVYLFFBQUk7QUFDSCxZQUFNLGlCQUFpQixLQUFLLE1BQU0sS0FBSyxZQUFZLEtBQUssQ0FBQztBQUFBLElBQzFELFNBQVMsR0FBRztBQUNYO0FBQUEsUUFDQztBQUFBLFFBQ0E7QUFBQSxRQUNBLDRFQUE0RSxDQUFDO0FBQUEsTUFDOUU7QUFBQSxJQUNEO0FBRUEsV0FBTztBQUFBLEVBQ1I7QUFNQSxXQUFTLDJCQUEyQjtBQUNuQyxRQUFJLEtBQUssYUFBYSxpQkFBaUIsR0FBRztBQUN6QyxVQUFJO0FBQ0gsZUFBTyxpQkFBaUIsS0FBSyxNQUFNLEtBQUssYUFBYSxpQkFBaUIsQ0FBQztBQUFBLE1BQ3hFLFNBQVMsR0FBRztBQUNYO0FBQUEsVUFDQztBQUFBLFVBQ0E7QUFBQSxVQUNBLHlCQUF5QixpQkFBaUIsc0RBQXNELEtBQUs7QUFBQSxZQUNwRztBQUFBLFVBQ0QsQ0FBQyxLQUFLLENBQUM7QUFBQSxRQUNSO0FBQUEsTUFDRDtBQUFBLElBQ0Q7QUFFQSxXQUFPLENBQUM7QUFBQSxFQUNUO0FBVUEsV0FBUyxpQkFBaUIsTUFBTTtBQUMvQixRQUFJLE1BQU0sQ0FBQztBQUVYLFFBQUksQ0FBQyxTQUFTLElBQUksR0FBRztBQUNwQixhQUFPO0FBQUEsSUFDUjtBQUdBLFFBQUk7QUFDSCxZQUFNLFVBQVUsYUFBYSxJQUFJO0FBQ2pDLGFBQU8sUUFBUTtBQUFBLElBQ2hCLFNBQVMsR0FBRztBQUFBLElBQUM7QUFFYixRQUFJO0FBQ0gsWUFBTSxLQUFLLE1BQU0sSUFBSTtBQUFBLElBQ3RCLFNBQVMsR0FBRztBQUNYLFlBQU07QUFBQSxJQUNQO0FBRUEsV0FBTyxlQUFlLEdBQUc7QUFBQSxFQUMxQjtBQU1BLFdBQVMsa0JBQWtCO0FBQzFCLFFBQUk7QUFDSCxZQUFNLFdBQVcscUJBQXFCLEtBQUssWUFBWSxPQUFPLENBQUM7QUFDL0QsV0FBSyxZQUFZLFNBQVMsdUJBQXVCLENBQUM7QUFBQSxJQUNuRCxTQUFTLEdBQUc7QUFDWCxVQUFJLE9BQU8sS0FBSyxVQUFVLGtCQUFrQixFQUFFO0FBQzlDLFVBQUksU0FBUyxJQUFJLEtBQUssS0FBSyxTQUFTLEdBQUc7QUFDdEMsY0FBTSxVQUFVLEtBQUssVUFBVSxtQkFBbUIsQ0FBQyxDQUFDO0FBQ3BELFlBQUksU0FBUyxPQUFPLEdBQUc7QUFDdEIsaUJBQU8sSUFBSSxVQUFVLFNBQVMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxJQUFJO0FBQUEsUUFDOUM7QUFDQSxhQUFLLFlBQVk7QUFBQSxNQUNsQjtBQUFBLElBQ0Q7QUFFQSxXQUFPO0FBQUEsRUFDUjtBQVVBLFdBQVMsb0JBQW9CO0FBQzVCLFFBQUksRUFBRSxLQUFLLHNCQUFzQixhQUFhO0FBQzdDLGFBQU87QUFBQSxJQUNSO0FBRUEsVUFBTSxhQUFhLEtBQUssWUFBWSxpQkFBaUI7QUFFckQsUUFBSSxzQkFBc0IsZUFBZTtBQUN4QyxVQUFJLFdBQVcsU0FBUyxTQUFTLEdBQUc7QUFDbkMsYUFBSyxXQUFXLHFCQUFxQixDQUFDLFVBQVU7QUFBQSxNQUNqRDtBQUFBLElBQ0QsV0FBVyxRQUFRLFVBQVUsR0FBRztBQUMvQixZQUFNLFNBQVMsQ0FBQztBQUNoQixpQkFBVyxLQUFLLFlBQVk7QUFDM0IsWUFBSSxTQUFTLENBQUMsR0FBRztBQUNoQixnQkFBTSxtQkFBbUIsRUFBRSxLQUFLO0FBQ2hDLGNBQUkscUJBQXFCLElBQUk7QUFDNUIsa0JBQU0sUUFBUSxTQUFTLGNBQWMsT0FBTztBQUM1QyxrQkFBTSxZQUFZO0FBQ2xCLGlCQUFLLFdBQVcsUUFBUSxLQUFLO0FBQUEsVUFDOUI7QUFDQTtBQUFBLFFBQ0Q7QUFFQSx5QkFBaUIsR0FBRyxhQUFhO0FBRWpDLFlBQUksRUFBRSxTQUFTLFNBQVMsR0FBRztBQUMxQixpQkFBTyxLQUFLLENBQUM7QUFBQSxRQUNkO0FBQUEsTUFDRDtBQUVBLFVBQUksT0FBTyxTQUFTLEdBQUc7QUFDdEIsYUFBSyxXQUFXLHFCQUFxQjtBQUFBLE1BQ3RDO0FBQUEsSUFDRCxXQUFXLFNBQVMsVUFBVSxHQUFHO0FBQ2hDLFlBQU0sbUJBQW1CLFdBQVcsS0FBSztBQUN6QyxVQUFJLHFCQUFxQixJQUFJO0FBQzVCLGNBQU0sUUFBUSxTQUFTLGNBQWMsT0FBTztBQUM1QyxjQUFNLFlBQVk7QUFDbEIsYUFBSyxXQUFXLFFBQVEsS0FBSztBQUFBLE1BQzlCO0FBQUEsSUFDRDtBQUVBLFdBQU87QUFBQSxFQUNSO0FBVUEsV0FBUyxpQkFBaUI7QUFDekIsUUFBSTtBQUNKLFFBQUk7QUFFSixRQUFJO0FBQ0gsaUJBQVcscUJBQXFCLEtBQUssWUFBWSxPQUFPLENBQUM7QUFBQSxJQUMxRCxTQUFTLEdBQUc7QUFDWCxhQUFPLEtBQUssVUFBVSxrQkFBa0IsRUFBRTtBQUMxQyxVQUFJLENBQUMsU0FBUyxJQUFJLEtBQUssU0FBUyxVQUFhLFNBQVMsSUFBSTtBQUN6RCxjQUFNLElBQUksTUFBTSxrQkFBa0I7QUFBQSxNQUNuQztBQUFBLElBQ0Q7QUFFQSxTQUFLLGFBQWE7QUFBQSxNQUNqQixNQUFNLEtBQUssVUFBVSxjQUFjLE1BQU07QUFBQSxNQUN6QyxnQkFBZ0IsS0FBSyxVQUFVLGtCQUFrQixJQUFJO0FBQUEsSUFDdEQsQ0FBQztBQUVELFFBQUksb0JBQW9CLFVBQVU7QUFDakMsV0FBSyxXQUFXLFlBQVksU0FBUyx1QkFBdUIsQ0FBQztBQUM3RCxhQUFPO0FBQUEsSUFDUjtBQUVBLFVBQU0sVUFBVSxLQUFLLFVBQVUsbUJBQW1CLENBQUMsQ0FBQztBQUNwRCxRQUFJLFNBQVMsT0FBTyxHQUFHO0FBQ3RCLFlBQU0sWUFBWSxJQUFJLFVBQVUsT0FBTztBQUN2QyxVQUFJLEtBQUssVUFBVSwrQkFBK0IsTUFBTSxNQUFNO0FBQzdELGtCQUFVO0FBQUEsVUFDVCxLQUFLLFVBQVUsK0JBQStCO0FBQUEsVUFDOUMsS0FBSyxVQUFVLGdDQUFnQztBQUFBLFFBQ2hEO0FBQUEsTUFDRDtBQUNBLGFBQU8sVUFBVSxPQUFPLElBQUk7QUFBQSxJQUM3QjtBQUVBLFNBQUssV0FBVyxZQUFZO0FBQzVCLFdBQU87QUFBQSxFQUNSO0FBWUEsV0FBUyxzQkFBc0IsU0FBUztBQUN2QyxxQkFBaUIsT0FBTztBQUN4QixVQUFNQyxrQkFBaUIsZ0JBQWdCLGdCQUFnQjtBQUN2RCxRQUFJQSxvQkFBbUIsUUFBVztBQUNqQyxZQUFNLElBQUksTUFBTSxrQ0FBa0M7QUFBQSxJQUNuRDtBQUVBLFVBQU0sTUFBTSxTQUFTLE9BQU87QUFDNUIsUUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLFFBQVEsSUFBSTtBQUNqQyxZQUFNLElBQUksTUFBTSxpQkFBaUI7QUFBQSxJQUNsQztBQUVBLFFBQUlBLGdCQUFlLElBQUksR0FBRyxNQUFNLFFBQVc7QUFDMUM7QUFBQSxJQUNEO0FBRUEsSUFBQUEsZ0JBQWUsT0FBTyxLQUFLLE9BQU87QUFBQSxFQUNuQztBQXhyQ0EsTUF5RU0sa0JBS0Esc0JBT0EsaUNBUUEseUJBUUEsaUNBUUEsdUJBTUEseUJBMkVBO0FBOUxOO0FBQUE7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUtBLE1BQUFDO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFlQSxNQUFNLG1CQUFtQixPQUFPLElBQUkseUNBQXlDO0FBSzdFLE1BQU0sdUJBQXVCLE9BQU87QUFBQSxRQUNuQztBQUFBLE1BQ0Q7QUFLQSxNQUFNLGtDQUFrQyxPQUFPO0FBQUEsUUFDOUM7QUFBQSxNQUNEO0FBTUEsTUFBTSwwQkFBMEIsT0FBTztBQUFBLFFBQ3RDO0FBQUEsTUFDRDtBQU1BLE1BQU0sa0NBQWtDO0FBQUEsUUFDdkM7QUFBQSxNQUNEO0FBTUEsTUFBTSx3QkFBd0IsT0FBTyx3Q0FBd0M7QUFNN0UsTUFBTSwwQkFBMEIsT0FBTyxtQkFBbUI7QUEyRTFELE1BQU0sZ0JBQU4sY0FBNEIsWUFBWTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVN2QyxjQUFjO0FBQ2IsZ0JBQU07QUFFTixlQUFLLHVCQUF1QixJQUFJLENBQUM7QUFDakMsZUFBSyxjQUFjLElBQUksSUFBSSxjQUFjO0FBQUEsWUFDeEMsU0FBUywwQkFBMEIsTUFBTSxPQUFPLENBQUMsR0FBRyxLQUFLLFFBQVEsQ0FBQztBQUFBLFVBQ25FLENBQUM7QUFDRCxlQUFLLGdCQUFnQixFQUFFO0FBQ3ZCLDZCQUFtQixLQUFLLElBQUk7QUFDNUIsZUFBSyx1QkFBdUIsSUFBSSxDQUFDO0FBQUEsUUFDbEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVFBLFlBQVksY0FBYyxJQUFJO0FBQzdCLGlCQUFPLE9BQU8sSUFBSSwrQ0FBK0M7QUFBQSxRQUNsRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVVBLFdBQVcscUJBQXFCO0FBQy9CLGlCQUFPLENBQUM7QUFBQSxRQUNUO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFRQSxxQkFBcUIsV0FBVyxVQUFVO0FBQ3pDLDJCQUFpQixRQUFRO0FBQ3pCLGVBQUssdUJBQXVCLEVBQUUsU0FBUyxJQUFJO0FBQzNDLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU9BLHdCQUF3QixXQUFXO0FBQ2xDLGlCQUFPLEtBQUssdUJBQXVCLEVBQUUsU0FBUztBQUM5QyxpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQTZCQSxJQUFJLFdBQVc7QUFDZCxpQkFBTztBQUFBLFlBQ04sVUFBVTtBQUFBLFlBQ1YsWUFBWTtBQUFBLFlBQ1osZ0JBQWdCO0FBQUEsWUFDaEIsV0FBVztBQUFBLGNBQ1YsTUFBTTtBQUFBLFlBQ1A7QUFBQSxZQUNBLGlCQUFpQixDQUFDO0FBQUEsWUFDbEIsbUJBQW1CO0FBQUEsY0FDbEIsUUFBUTtBQUFBLGdCQUNQLE1BQU07QUFBQSxnQkFDTixPQUFPO0FBQUEsY0FDUjtBQUFBLFlBQ0Q7QUFBQSxZQUVBLGlCQUFpQjtBQUFBLFVBQ2xCO0FBQUEsUUFDRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQWFBLGFBQWE7QUFDWixjQUFJO0FBRUosY0FBSTtBQUNILDJCQUFlLHdCQUF3QjtBQUFBLFVBQ3hDLFNBQVMsR0FBRztBQUNYLDhCQUFrQixNQUFNLHdCQUF3QixFQUFFLFNBQVMsQ0FBQztBQUM1RCxtQkFBTztBQUFBLFVBQ1I7QUFFQSxjQUFJLENBQUMsY0FBYztBQUNsQixtQkFBTztBQUFBLFVBQ1I7QUFFQSxnQkFBTSxTQUFTLEtBQUssVUFBVSxRQUFRO0FBQ3RDLGNBQUksRUFBRSxTQUFTLE1BQU0sS0FBSyxXQUFXLE1BQU0sSUFBSTtBQUM5QyxtQkFBTztBQUFBLFVBQ1I7QUFFQSxxQkFBVyxPQUFPLFFBQVE7QUFDekIsa0JBQU0sTUFBTSxPQUFPLEdBQUc7QUFFdEIsZ0JBQUksU0FBUyxHQUFHLEdBQUc7QUFDbEIsb0JBQU0sT0FBTyxhQUFhLFFBQVEsS0FBSyxHQUFHO0FBQzFDLGtCQUFJLFNBQVMsS0FBSztBQUNqQixxQkFBSyxVQUFVLFVBQVUsR0FBRyxJQUFJLElBQUk7QUFBQSxjQUNyQztBQUNBO0FBQUEsWUFDRCxXQUFXLFNBQVMsR0FBRyxHQUFHO0FBQ3pCLHlCQUFXLEtBQUssS0FBSztBQUNwQixzQkFBTSxJQUFJLElBQUksQ0FBQztBQUVmLHNCQUFNLE9BQU8sYUFBYSxrQkFBa0IsS0FBSyxHQUFHLENBQUM7QUFDckQsb0JBQUksQ0FBQyxTQUFTLElBQUksR0FBRztBQUNwQix3QkFBTSxJQUFJLE1BQU0sMkJBQTJCO0FBQUEsZ0JBQzVDO0FBQ0Esb0JBQUksU0FBUyxHQUFHO0FBQ2YsdUJBQUssVUFBVSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksSUFBSTtBQUFBLGdCQUMxQztBQUFBLGNBQ0Q7QUFDQTtBQUFBLFlBQ0Q7QUFFQSxrQkFBTSxJQUFJLE1BQU0sMkJBQTJCO0FBQUEsVUFDNUM7QUFDQSxpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBZUEsT0FBTyxTQUFTO0FBQ2YsZ0JBQU0sSUFBSTtBQUFBLFlBQ1Q7QUFBQSxVQUNEO0FBQUEsUUFDRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQWtDQSxPQUFPLG1CQUFtQjtBQUN6QixpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVFBLGVBQWUsVUFBVTtBQUN4QixlQUFLLGNBQWMsRUFBRSxlQUFlLFFBQVE7QUFDNUMsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFRQSxlQUFlLFVBQVU7QUFDeEIsZUFBSyxjQUFjLEVBQUUsZUFBZSxRQUFRO0FBQzVDLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxpQkFBaUIsVUFBVTtBQUMxQixpQkFBTyxLQUFLLGNBQWMsRUFBRSxpQkFBaUIsUUFBUTtBQUFBLFFBQ3REO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBVUEsVUFBVSxNQUFNLGVBQWUsUUFBVztBQUN6QyxjQUFJO0FBRUosY0FBSTtBQUNILG9CQUFRLElBQUk7QUFBQSxjQUNYLEtBQUssY0FBYyxFQUFFLGVBQWUsRUFBRSxTQUFTO0FBQUEsWUFDaEQsRUFBRSxPQUFPLElBQUk7QUFBQSxVQUNkLFNBQVMsR0FBRztBQUFBLFVBQUM7QUFFYixjQUFJLFVBQVUsT0FBVyxRQUFPO0FBQ2hDLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVVBLFVBQVUsTUFBTSxPQUFPO0FBQ3RCLGNBQUksV0FBVyxLQUFLLGNBQWMsRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLEVBQUU7QUFBQSxZQUM1RDtBQUFBLFlBQ0E7QUFBQSxVQUNEO0FBQ0EsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsV0FBV0YsVUFBUztBQUNuQixjQUFJLFNBQVNBLFFBQU8sR0FBRztBQUN0QixZQUFBQSxXQUFVLGlCQUFpQixLQUFLLE1BQU1BLFFBQU87QUFBQSxVQUM5QztBQUlBLGlCQUFPLEtBQUssY0FBYyxFQUFFLFdBQVcsRUFBRSxTQUFTLEdBQUdBLFFBQU87QUFFNUQsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFRQSxDQUFDLGdCQUFnQixJQUFJO0FBQ3BCLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBc0NBLENBQUMsK0JBQStCLElBQUk7QUFDbkMsaUJBQU8sQ0FBQztBQUFBLFFBQ1Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBZUEsQ0FBQyxvQkFBb0IsSUFBSTtBQUN4QixjQUFJO0FBQ0osY0FBSTtBQUdKLGdCQUFNLG1CQUFtQix5QkFBeUIsS0FBSyxJQUFJO0FBQzNELGNBQ0MsU0FBUyxnQkFBZ0IsS0FDekIsT0FBTyxLQUFLLGdCQUFnQixFQUFFLFNBQVMsR0FDdEM7QUFDRCxpQkFBSyxXQUFXLGdCQUFnQjtBQUFBLFVBQ2pDO0FBR0EsZ0JBQU0sZ0JBQWdCLHdCQUF3QixLQUFLLElBQUk7QUFDdkQsY0FBSSxTQUFTLGFBQWEsS0FBSyxPQUFPLEtBQUssYUFBYSxFQUFFLFNBQVMsR0FBRztBQUNyRSxpQkFBSyxXQUFXLGFBQWE7QUFBQSxVQUM5QjtBQUdBLGNBQUksS0FBSyxVQUFVLGNBQWMsS0FBSyxNQUFNLE9BQU87QUFDbEQsZ0JBQUk7QUFDSCw2QkFBZSxLQUFLLElBQUk7QUFDeEIseUJBQVcsS0FBSyxXQUFXO0FBQUEsWUFDNUIsU0FBUyxHQUFHO0FBQ1gsZ0NBQWtCLE1BQU0sd0JBQXdCLEVBQUUsU0FBUyxDQUFDO0FBQUEsWUFDN0Q7QUFFQSxnQkFBSTtBQUNILGdDQUFrQixLQUFLLElBQUk7QUFBQSxZQUM1QixTQUFTLEdBQUc7QUFDWCxnQ0FBa0IsTUFBTSx3QkFBd0IsRUFBRSxTQUFTLENBQUM7QUFBQSxZQUM3RDtBQUFBLFVBQ0Q7QUFHQSxjQUFJLEVBQUUsb0JBQW9CLFdBQVc7QUFDcEMsNEJBQWdCLEtBQUssSUFBSTtBQUN6Qix1QkFBVyxLQUFLO0FBQUEsVUFDakI7QUFHQSwrQkFBcUIsS0FBSyxJQUFJO0FBQzlCLGNBQUk7QUFDSCx1QkFBVyxvQkFBSSxJQUFJLENBQUMsR0FBRyxVQUFVLEdBQUcsbUJBQW1CLEtBQUssSUFBSSxDQUFDLENBQUM7QUFBQSxVQUNuRSxTQUFTLEdBQUc7QUFDWCx1QkFBVztBQUFBLFVBQ1o7QUFFQSxlQUFLLHFCQUFxQixJQUFJO0FBQUEsWUFDN0IsS0FBSyxjQUFjLEVBQUUsZUFBZSxFQUFFLFNBQVM7QUFBQSxVQUNoRDtBQUVBLGdCQUFNLE1BQU0sQ0FBQztBQUNiLGNBQUksS0FBSyxVQUFVLGlCQUFpQixNQUFNLE1BQU07QUFDL0MsZ0JBQUksa0JBQWtCO0FBQUEsVUFDdkI7QUFFQSx3Q0FBOEI7QUFBQSxZQUM3QjtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQSxLQUFLLHFCQUFxQjtBQUFBLFlBQzFCO0FBQUEsVUFDRDtBQUdBLGdEQUFzQyxLQUFLLElBQUk7QUFFL0MsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFRQSw2QkFBNkI7QUFDNUIsaUJBQU8sTUFBTSxLQUFLLHFCQUFxQixDQUFDO0FBQUEsUUFDekM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFVQSxvQkFBb0I7QUFFbkIsY0FBSSxDQUFDLGNBQWMsTUFBTSw4QkFBOEIsR0FBRztBQUV6RCxpQkFBSyxvQkFBb0IsRUFBRTtBQUFBLFVBQzVCO0FBQUEsUUFDRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBUUEsdUJBQXVCO0FBQUEsUUFBQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBUXhCLGtCQUFrQjtBQUFBLFFBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFhbkIseUJBQXlCLFVBQVUsUUFBUSxRQUFRO0FBQ2xELGNBQUksU0FBUyxXQUFXLHNCQUFzQixHQUFHO0FBQ2hEO0FBQUEsY0FDQztBQUFBLGNBQ0E7QUFBQSxjQUNBLEtBQUssY0FBYyxFQUFFLFdBQVcsRUFBRSxTQUFTO0FBQUEsWUFDNUM7QUFBQSxVQUNEO0FBRUEsZ0JBQU0sV0FBVyxLQUFLLHVCQUF1QixJQUFJLFFBQVE7QUFDekQsY0FBSSxXQUFXLFFBQVEsR0FBRztBQUN6QixnQkFBSTtBQUNILHVCQUFTLEtBQUssTUFBTSxRQUFRLE1BQU07QUFBQSxZQUNuQyxTQUFTLEdBQUc7QUFDWCxnQ0FBa0IsTUFBTSx3QkFBd0IsRUFBRSxTQUFTLENBQUM7QUFBQSxZQUM3RDtBQUFBLFVBQ0Q7QUFBQSxRQUNEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVNBLFFBQVEsTUFBTTtBQUNiLGNBQUksaUJBQWlCLEtBQUssTUFBTSxpQkFBaUIsTUFBTSxJQUFJLENBQUMsR0FBRztBQUM5RCxtQkFBTztBQUFBLFVBQ1I7QUFFQSxjQUFJLEVBQUUsS0FBSyxzQkFBc0IsYUFBYTtBQUM3QyxtQkFBTztBQUFBLFVBQ1I7QUFFQSxpQkFBTyxpQkFBaUIsS0FBSyxLQUFLLFlBQVksSUFBSTtBQUFBLFFBQ25EO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVNBLGFBQWEsTUFBTSxNQUFNO0FBQ3hCLGlCQUFPLG9CQUFvQixLQUFLLE1BQU0sTUFBTSxHQUFHLElBQUk7QUFBQSxRQUNwRDtBQUFBLE1BQ0Q7QUFBQTtBQUFBOzs7QUNodUJBO0FBQUE7QUFBQTtBQUFBO0FBZ0NBLFdBQVMsT0FBT0csTUFBS0MsTUFBSztBQUN6QixRQUFJRCxTQUFRLFFBQVc7QUFDdEIsTUFBQUEsT0FBTTtBQUFBLElBQ1A7QUFDQSxRQUFJQyxTQUFRLFFBQVc7QUFDdEIsTUFBQUEsT0FBTTtBQUFBLElBQ1A7QUFFQSxRQUFJQSxPQUFNRCxNQUFLO0FBQ2QsWUFBTSxJQUFJLE1BQU0sOEJBQThCO0FBQUEsSUFDL0M7QUFFQSxXQUFPLEtBQUssTUFBTSxPQUFPQSxNQUFLQyxJQUFHLENBQUM7QUFBQSxFQUNuQztBQXdCQSxXQUFTLE9BQU9ELE1BQUtDLE1BQUs7QUFDekIsVUFBTUMsbUJBQWtCLFVBQVU7QUFFbEMsVUFBTSxRQUNMQSxtQkFBa0IsUUFBUSxLQUMxQkEsbUJBQWtCLFVBQVUsS0FDNUJBLG1CQUFrQixRQUFRLEtBQzFCO0FBRUQsUUFBSSxPQUFPLFVBQVUsYUFBYTtBQUNqQyxZQUFNLElBQUksTUFBTSxlQUFlO0FBQUEsSUFDaEM7QUFFQSxRQUFJLE9BQU87QUFDWCxVQUFNLFFBQVFELE9BQU1EO0FBQ3BCLFFBQUksUUFBUSxHQUFHO0FBQ2QsWUFBTSxJQUFJLE1BQU0sc0RBQXNEO0FBQUEsSUFDdkU7QUFFQSxVQUFNLGFBQWEsS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLENBQUM7QUFDN0MsUUFBSSxhQUFhLElBQUk7QUFDcEIsWUFBTSxJQUFJLE1BQU0saURBQWlEO0FBQUEsSUFDbEU7QUFDQSxVQUFNLGNBQWMsS0FBSyxLQUFLLGFBQWEsQ0FBQztBQUM1QyxVQUFNLE9BQU8sS0FBSyxJQUFJLEdBQUcsVUFBVSxJQUFJO0FBRXZDLFVBQU0sWUFBWSxJQUFJLFdBQVcsV0FBVztBQUM1QyxVQUFNLGdCQUFnQixTQUFTO0FBRS9CLFFBQUksS0FBSyxjQUFjLEtBQUs7QUFDNUIsYUFBUyxJQUFJLEdBQUcsSUFBSSxhQUFhLEtBQUs7QUFDckMsY0FBUSxVQUFVLENBQUMsSUFBSSxLQUFLLElBQUksR0FBRyxDQUFDO0FBQ3BDLFdBQUs7QUFBQSxJQUNOO0FBRUEsV0FBTyxPQUFPO0FBRWQsUUFBSSxRQUFRLE9BQU87QUFDbEIsYUFBTyxPQUFPQSxNQUFLQyxJQUFHO0FBQUEsSUFDdkI7QUFFQSxRQUFJLE9BQU9ELE1BQUs7QUFDZixjQUFRQTtBQUFBLElBQ1Q7QUFFQSxXQUFPO0FBQUEsRUFDUjtBQW5IQSxNQW1ETTtBQW5ETjtBQUFBO0FBY0E7QUFxQ0EsTUFBTSxNQUFNO0FBRVosV0FBSyxPQUNKLEtBQUssUUFDTCxTQUFVLEdBQUc7QUFDWixlQUFPLEtBQUssSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUM7QUFBQSxNQUNoQztBQUFBO0FBQUE7OztBQzhCRCxXQUFTLGVBQWU7QUFDdkIsU0FBSyxjQUFjLEVBQUUsT0FBTyxJQUFJLFdBQVcsTUFBTTtBQUNoRCxXQUFLLGNBQWMsRUFBRSxjQUFjLElBQUk7QUFDdkMsV0FBSyxjQUFjLEVBQUUsVUFBVSxFQUFFO0FBQUEsSUFDbEMsR0FBRyxLQUFLLGNBQWMsRUFBRSxPQUFPLENBQUM7QUFBQSxFQUNqQztBQU9BLFdBQVMsS0FBSyxPQUFPLFVBQVU7QUFDOUIsU0FBSyxjQUFjLElBQUk7QUFBQSxNQUN0QjtBQUFBLE1BQ0E7QUFBQSxNQUNBLGNBQWM7QUFBQSxNQUNkLE9BQU87QUFBQSxJQUNSO0FBRUEsaUJBQWEsS0FBSyxJQUFJO0FBQUEsRUFDdkI7QUE1R0EsTUFnQ007QUFoQ047QUFBQTtBQWNBO0FBRUE7QUFDQTtBQUNBO0FBY0EsTUFBTSxpQkFBTixjQUE2QixLQUFLO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBU2pDLFlBQVksT0FBTyxVQUFVO0FBQzVCLGdCQUFNO0FBRU4sZUFBSyxLQUFLLE1BQU0sZ0JBQWdCLEtBQUssR0FBRyxpQkFBaUIsUUFBUSxDQUFDO0FBQUEsUUFDbkU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVFBLE1BQU0sT0FBTztBQUNaLGNBQUksS0FBSyxjQUFjLEVBQUUsY0FBYyxNQUFNLE1BQU07QUFDbEQsa0JBQU0sSUFBSSxNQUFNLGlCQUFpQjtBQUFBLFVBQ2xDO0FBRUEsY0FBSSxVQUFVLEtBQUssR0FBRztBQUNyQixpQkFBSyxjQUFjLEVBQUUsT0FBTyxJQUFJO0FBQUEsVUFDakMsV0FBVyxVQUFVLFFBQVc7QUFDL0Isa0JBQU0sSUFBSSxNQUFNLHNCQUFzQjtBQUFBLFVBQ3ZDO0FBRUEsdUJBQWEsS0FBSyxjQUFjLEVBQUUsT0FBTyxDQUFDO0FBQzFDLHVCQUFhLEtBQUssSUFBSTtBQUV0QixpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsU0FBUztBQUNSLGNBQUksS0FBSyxjQUFjLEVBQUUsY0FBYyxNQUFNLE1BQU07QUFDbEQsa0JBQU0sSUFBSSxNQUFNLGlCQUFpQjtBQUFBLFVBQ2xDO0FBRUEsdUJBQWEsS0FBSyxjQUFjLEVBQUUsT0FBTyxDQUFDO0FBQzFDLGlCQUFPO0FBQUEsUUFDUjtBQUFBLE1BQ0Q7QUFBQTtBQUFBOzs7QUNsRkEsTUF1Qk07QUF2Qk47QUFBQTtBQWNBO0FBQ0E7QUFDQTtBQU9BLE1BQU0sV0FBTixNQUFlO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBU2QsWUFBWSxVQUFVLE1BQU07QUFDM0IsZUFBSyxjQUFjLElBQUk7QUFBQSxZQUN0QixVQUFVLGlCQUFpQixRQUFRO0FBQUEsWUFDbkMsTUFBTSxnQkFBZ0IsUUFBUSxDQUFDO0FBQUEsVUFDaEM7QUFBQSxRQUNEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsSUFBSSxNQUFNO0FBQ1QsaUJBQU8sSUFBSSxRQUFRLENBQUMsU0FBUyxXQUFXO0FBQ3ZDLDhCQUFrQixZQUFZLEVBQUUsTUFBTTtBQUNyQyxrQkFBSTtBQUNILHdCQUFRLEtBQUssY0FBYyxFQUFFLFNBQVMsSUFBSSxDQUFDO0FBQUEsY0FDNUMsU0FBUyxHQUFHO0FBQ1gsdUJBQU8sQ0FBQztBQUFBLGNBQ1Q7QUFBQSxZQUNELEdBQUcsS0FBSyxjQUFjLEVBQUUsSUFBSTtBQUFBLFVBQzdCLENBQUM7QUFBQSxRQUNGO0FBQUEsTUFDRDtBQUFBO0FBQUE7OztBQ3ZEQSxNQTJDTTtBQTNDTjtBQUFBO0FBY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXlCQSxNQUFNLGFBQU4sY0FBeUIsS0FBSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBZ0I3QixlQUFlLE1BQU07QUFDcEIsZ0JBQU07QUFFTixlQUFLLGNBQWMsSUFBSTtBQUFBLFlBQ3RCLE9BQU8sSUFBSSxNQUFNO0FBQUEsVUFDbEI7QUFFQSxjQUFJLE9BQU87QUFFWCxjQUFJLE9BQU8sU0FBUyxZQUFZLEtBQUssQ0FBQyxNQUFNLE1BQU07QUFDakQsa0JBQU0sSUFBSSxVQUFVLG1EQUFtRDtBQUFBLFVBQ3hFO0FBRUEscUJBQVcsQ0FBQyxFQUFFLEdBQUcsS0FBSyxPQUFPLFFBQVEsSUFBSSxHQUFHO0FBQzNDLGdCQUFJLFVBQVUsR0FBRyxLQUFLLE9BQU8sR0FBRztBQUMvQixxQkFBTztBQUFBLFlBQ1IsV0FBVyxXQUFXLEdBQUcsR0FBRztBQUMzQixtQkFBSyxjQUFjLEVBQUUsTUFBTSxJQUFJLElBQUksU0FBUyxLQUFLLElBQUksQ0FBQztBQUFBLFlBQ3ZELE9BQU87QUFDTixvQkFBTSxJQUFJO0FBQUEsZ0JBQ1Q7QUFBQSxjQUNEO0FBQUEsWUFDRDtBQUFBLFVBQ0Q7QUFBQSxRQUNEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFXQSxJQUFJLFVBQVUsTUFBTTtBQUNuQixlQUFLLGNBQWMsRUFBRSxNQUFNLElBQUksSUFBSSxTQUFTLFVBQVUsSUFBSSxDQUFDO0FBQzNELGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBUUEsSUFBSSxNQUFNO0FBQ1QsY0FBSSxLQUFLLGNBQWMsRUFBRSxNQUFNLFFBQVEsR0FBRztBQUN6QyxtQkFBTyxRQUFRLFFBQVEsSUFBSTtBQUFBLFVBQzVCO0FBRUEsZ0JBQU0sV0FBVyxLQUFLLGNBQWMsRUFBRSxNQUFNLEtBQUs7QUFFakQsY0FBSSxhQUFhLFFBQVEsYUFBYSxRQUFXO0FBQ2hELG1CQUFPLFFBQVEsUUFBUSxJQUFJO0FBQUEsVUFDNUI7QUFFQSxpQkFBTyxTQUFTLElBQUksSUFBSSxFQUFFLEtBQUssQ0FBQyxXQUFXO0FBQzFDLG1CQUFPLEtBQUssSUFBSSxNQUFNO0FBQUEsVUFDdkIsQ0FBQztBQUFBLFFBQ0Y7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDeEhBLE1Bb0JNLDBCQVFBLG9CQVVBLHVCQVFBLHNCQVFBLHdCQVFBLGtCQVFBLHdCQVFBLDJCQVFBLHFDQVFBO0FBOUZOLE1BQUFHLGtCQUFBO0FBQUE7QUFjQSxNQUFBQTtBQU1BLE1BQU0sMkJBQTJCO0FBUWpDLE1BQU0scUJBQXFCLEdBQUcsZ0JBQWdCO0FBVTlDLE1BQU0sd0JBQXdCLEdBQUcsZ0JBQWdCO0FBUWpELE1BQU0sdUJBQXVCLEdBQUcsZ0JBQWdCO0FBUWhELE1BQU0seUJBQXlCLEdBQUcsZ0JBQWdCO0FBUWxELE1BQU0sbUJBQW1CLEdBQUcsZ0JBQWdCO0FBUTVDLE1BQU0seUJBQXlCLEdBQUcsZ0JBQWdCO0FBUWxELE1BQU0sNEJBQTRCLEdBQUcsZ0JBQWdCO0FBUXJELE1BQU0sc0NBQXNDLEdBQUcsZ0JBQWdCO0FBUS9ELE1BQU0seUJBQXlCLEdBQUcsZ0JBQWdCO0FBQUE7QUFBQTs7O0FDOUZsRCxNQXFCTTtBQXJCTjtBQUFBO0FBWUE7QUFDQSxNQUFBQztBQVFBLE1BQU0saUJBQWlCLElBQUksY0FBYztBQUV6QyxVQUFJO0FBQ0gsdUJBQWU7QUFBQSxVQUNkO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFJQTtBQUFBLFFBQ0Q7QUFBQSxNQUNELFNBQVMsR0FBRztBQUNYO0FBQUEsVUFDQyxTQUFTLFlBQVksRUFBRSxjQUFjLE1BQU07QUFBQSxVQUMzQztBQUFBLFVBQ0EsSUFBSTtBQUFBLFFBQ0w7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDbkJBLFdBQVMsZUFBZSxTQUFTO0FBQ2hDLFFBQUksbUJBQW1CLFdBQVksUUFBTztBQUMxQyxRQUFJLENBQUMsUUFBUSxXQUFZLFFBQU87QUFDaEMsV0FBTyxlQUFlLFFBQVEsVUFBVTtBQUFBLEVBQ3pDO0FBZUEsV0FBUyxxQkFBcUIsU0FBUyxLQUFLQyxVQUFTLFFBQVE7QUFDNUQsV0FBTyxZQUFZLEtBQUtBLFFBQU8sRUFBRSxLQUFLLENBQUMsYUFBYTtBQUNuRCxVQUFJLFVBQVUsU0FBUztBQUV2QixVQUFJLFNBQVMsTUFBTSxLQUFLLFdBQVcsSUFBSTtBQUN0QyxjQUFNQyxLQUFJLFNBQVMsY0FBYyxLQUFLO0FBQ3RDLGNBQU0sSUFBSSxTQUFTLGNBQWMsS0FBSztBQUN0QyxVQUFFLFlBQVk7QUFDZCxtQkFBVyxDQUFDLEVBQUUsSUFBSSxLQUFLLEVBQUUsaUJBQWlCLE1BQU0sRUFBRSxRQUFRLEdBQUc7QUFDNUQsVUFBQUEsR0FBRSxZQUFZLElBQUk7QUFBQSxRQUNuQjtBQUVBLGtCQUFVQSxHQUFFO0FBQUEsTUFDYjtBQUVBLFlBQU0sSUFBSSxTQUFTLGNBQWMsS0FBSztBQUN0QyxRQUFFLFlBQVk7QUFFZCxZQUFNLFVBQVUsRUFBRSxpQkFBaUIsUUFBUTtBQUMzQyxpQkFBVyxDQUFDLEVBQUUsTUFBTSxLQUFLLFFBQVEsUUFBUSxHQUFHO0FBQzNDLGNBQU0sSUFBSSxTQUFTLGNBQWMsUUFBUTtBQUN6QyxVQUFFLFlBQVksT0FBTztBQUNyQixZQUFJLE9BQU8sSUFBSyxHQUFFLE1BQU0sT0FBTztBQUMvQixZQUFJLE9BQU8sS0FBTSxHQUFFLE9BQU8sT0FBTztBQUNqQyxZQUFJLE9BQU8sTUFBTyxHQUFFLFFBQVEsT0FBTztBQUNuQyxZQUFJLE9BQU8sTUFBTyxHQUFFLFFBQVEsT0FBTztBQUNuQyxZQUFJLE9BQU8sWUFBYSxHQUFFLGNBQWMsT0FBTztBQUMvQyxZQUFJLE9BQU8sVUFBVyxHQUFFLFlBQVksT0FBTztBQUMzQyxZQUFJLE9BQU8sZUFBZ0IsR0FBRSxpQkFBaUIsT0FBTztBQUNyRCxpQkFBUyxLQUFLLFlBQVksQ0FBQztBQUMzQixVQUFFLFlBQVksTUFBTTtBQUFBLE1BQ3JCO0FBRUEsdUJBQWlCLFNBQVMsV0FBVyxFQUFFLFlBQVksRUFBRTtBQUVyRCxZQUFNLE9BQU8sZUFBZSxPQUFPO0FBQ25DLFVBQUksU0FBUyxNQUFNO0FBQ2xCLGtCQUFVLEtBQUs7QUFBQSxNQUNoQjtBQUVBLHNCQUFnQixTQUFTLG1CQUFtQjtBQUFBLFFBQzNDO0FBQUEsTUFDRCxDQUFDO0FBRUQsYUFBTztBQUFBLElBQ1IsQ0FBQztBQUFBLEVBQ0Y7QUFZQSxXQUFTLFlBQVksS0FBS0QsVUFBUztBQUNsQyxRQUFJLGVBQWUsS0FBSztBQUN2QixZQUFNLElBQUksU0FBUztBQUFBLElBQ3BCO0FBRUEsV0FBTyxNQUFNLGVBQWUsR0FBRyxHQUFHQSxRQUFPLEVBQUUsS0FBSyxDQUFDLGFBQWE7QUFHN0QsVUFBSSxVQUFVLE9BQU8sTUFBTTtBQUUxQixZQUNDLENBQUMsU0FBUyxVQUFVLGdCQUFnQixFQUFFLFFBQVEsVUFBVSxJQUFJLE1BQU0sSUFDakU7QUFDRCxnQkFBTSxJQUFJO0FBQUEsWUFDVCxzQ0FBc0MsVUFBVSxJQUFJO0FBQUEsVUFDckQ7QUFBQSxRQUNEO0FBRUEsY0FBTSxjQUFjLEdBQUcsVUFBVSxNQUFNLEdBQUcsVUFBVSxHQUFHLENBQUM7QUFDeEQsZ0JBQVEsYUFBYTtBQUFBLFVBQ3BCLEtBQUs7QUFDSixrQkFBTSxJQUFJLE1BQU0sZ0JBQWdCLFVBQVUsVUFBVSxFQUFFO0FBQ3REO0FBQUEsVUFDRDtBQUNDLGtCQUFNLElBQUk7QUFBQSxjQUNULHFCQUFxQixVQUFVLE1BQU0sTUFBTSxVQUFVLFVBQVUsY0FBYyxVQUFVLElBQUk7QUFBQSxZQUM1RjtBQUFBLFFBQ0Y7QUFBQSxNQUNEO0FBRUEsYUFBTyxJQUFJLFFBQVEsU0FBVSxTQUFTLFFBQVE7QUFDN0MsaUJBQ0UsS0FBSyxFQUNMLEtBQUssQ0FBQyxZQUFZO0FBQ2xCLGtCQUFRO0FBQUEsWUFDUDtBQUFBLFlBQ0EsTUFBTSxTQUFTLFFBQVEsSUFBSSxjQUFjO0FBQUEsVUFDMUMsQ0FBQztBQUFBLFFBQ0YsQ0FBQyxFQUNBLE1BQU0sTUFBTTtBQUFBLE1BQ2YsQ0FBQztBQUFBLElBQ0YsQ0FBQztBQUFBLEVBQ0Y7QUF6SUE7QUFBQTtBQWNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7OztBQ2hCQSxNQXFCTTtBQXJCTixNQUFBRSxjQUFBO0FBQUE7QUFZQTtBQUNBLE1BQUFDO0FBUUEsTUFBTSxrQkFBa0IsSUFBSSxjQUFjO0FBRTFDLFVBQUk7QUFDSCx3QkFBZ0I7QUFBQSxVQUNmO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFJQTtBQUFBLFFBQ0Q7QUFBQSxNQUNELFNBQVMsR0FBRztBQUNYO0FBQUEsVUFDQyxTQUFTLFlBQVksRUFBRSxjQUFjLE1BQU07QUFBQSxVQUMzQztBQUFBLFVBQ0EsSUFBSTtBQUFBLFFBQ0w7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDTkEsV0FBUywyQkFBMkIsTUFBTTtBQUN6QyxVQUFNQyxXQUFVLE9BQU8sQ0FBQyxHQUFHLEtBQUssVUFBVSxRQUFRLENBQUM7QUFDbkQsVUFBTSxZQUFZQSxXQUFVLFdBQVc7QUFFdkMsUUFBSSxDQUFDLFFBQVEsU0FBUyxHQUFHO0FBQ3hCLE1BQUFBLFNBQVEsV0FBVyxJQUFJLENBQUM7QUFBQSxJQUN6QjtBQUVBLFFBQ0NBLFNBQVEsV0FBVyxFQUFFLE9BQU8sQ0FBQyxVQUFVO0FBQ3RDLFVBQUksUUFBUSxNQUFNLE1BQU0sa0JBQWtCO0FBRXpDLGNBQU0sU0FBUyxJQUFJLGdCQUFnQixJQUFJO0FBQUEsTUFDeEM7QUFBQSxJQUNELENBQUMsRUFBRSxXQUFXLEdBQ2I7QUFDRCxNQUFBQSxTQUFRLFdBQVcsRUFBRSxLQUFLO0FBQUEsUUFDekIsTUFBTTtBQUFBLFFBQ04sU0FBUyxnQkFBZ0IsSUFBSTtBQUFBLE1BQzlCLENBQUM7QUFBQSxJQUNGO0FBRUEsU0FBSyxvQkFBb0IsRUFBRSxXQUFXQSxRQUFPO0FBQUEsRUFDOUM7QUF0REEsTUF3Qk07QUF4Qk4sTUFBQUMsZUFBQTtBQUFBO0FBY0E7QUFDQTtBQUNBO0FBUUEsTUFBTSx1QkFBdUIsT0FBTyxnQkFBZ0I7QUFBQTtBQUFBOzs7QUN4QnBEO0FBQUE7QUFBQTtBQUFBO0FBaVhBLFdBQVMsbUJBQW1CO0FBQzNCLFVBQU0sUUFBUSxtQkFBbUIsS0FBSyxNQUFNLElBQUksY0FBYyxZQUFZO0FBQzFFLFFBQUk7QUFDSixRQUFJLE1BQU0sU0FBUyxHQUFHO0FBQ3JCLHFCQUFlLFNBQVMsY0FBYyxRQUFRO0FBQzlDLG1CQUFhLGFBQWEsZ0JBQWdCLFFBQVE7QUFDbEQsbUJBQWEsYUFBYSxRQUFRLFFBQVE7QUFDMUMsbUJBQWEsVUFBVSxJQUFJLFFBQVE7QUFDbkMsWUFBTSxZQUFZLEtBQUssVUFBVSxnQkFBZ0I7QUFDakQsVUFBSSxXQUFXO0FBQ2QscUJBQWEsVUFBVSxJQUFJLFNBQVM7QUFBQSxNQUNyQztBQUNBLG1CQUFhLFlBQ1o7QUFDRCxXQUFLLGdCQUFnQixFQUFFLFFBQVEsWUFBWTtBQUFBLElBQzVDLE9BQU87QUFDTixxQkFBZSxNQUFNLEtBQUs7QUFBQSxJQUMzQjtBQUtBLFNBQUssd0JBQXdCLElBQUksQ0FBQyxVQUFVO0FBQzNDLFlBQU0sVUFBVSwyQkFBMkIsT0FBTyxnQkFBZ0IsUUFBUTtBQUUxRSxVQUFJLG1CQUFtQixtQkFBbUI7QUFDekMscUJBQWEsS0FBSyxJQUFJO0FBQUEsTUFDdkI7QUFBQSxJQUNEO0FBRUEsZUFBV0MsU0FBUSxDQUFDLFNBQVMsT0FBTyxHQUFHO0FBQ3RDLG1CQUFhLGlCQUFpQkEsT0FBTSxLQUFLLHdCQUF3QixDQUFDO0FBQUEsSUFDbkU7QUFFQSxTQUFLLG1CQUFtQixJQUFJO0FBQUEsRUFDN0I7QUFLQSxXQUFTLGFBQWE7QUFDckIsUUFBSSxDQUFDLEtBQUssb0JBQW9CLEdBQUc7QUFDaEM7QUFBQSxJQUNEO0FBRUEsU0FBSyxtQkFBbUIsRUFBRSxNQUFNLFVBQVU7QUFFMUMsK0JBQTJCLEtBQUssTUFBTSxLQUFLO0FBQUEsRUFDNUM7QUFLQSxXQUFTLGFBQWE7QUFDckIsUUFBSSxLQUFLLG1CQUFtQixFQUFFLE1BQU0sWUFBWSwwQkFBMEI7QUFDekU7QUFBQSxJQUNEO0FBRUEsU0FBSyxtQkFBbUIsRUFBRSxNQUFNLGFBQWE7QUFDN0MsU0FBSyxtQkFBbUIsRUFBRSxNQUFNLFVBQVU7QUFFMUMsK0JBQTJCLEtBQUssTUFBTSxJQUFJO0FBRTFDLFNBQUssb0JBQW9CLEVBQUUsT0FBTztBQUVsQyxRQUFJLFdBQVcsTUFBTTtBQUNwQixXQUFLLG1CQUFtQixFQUFFLE1BQU0sZUFBZSxZQUFZO0FBQUEsSUFDNUQsQ0FBQyxFQUNDLElBQUksTUFBUyxFQUNiLEtBQUssTUFBTTtBQUFBLElBQUMsQ0FBQyxFQUNiLE1BQU0sQ0FBQyxNQUFNO0FBQ2Isd0JBQWtCLE1BQU0sd0JBQXdCLEVBQUUsT0FBTztBQUFBLElBQzFELENBQUM7QUFBQSxFQUNIO0FBS0EsV0FBUyxlQUFlO0FBQ3ZCLFFBQUksS0FBSyxtQkFBbUIsRUFBRSxNQUFNLFlBQVksMEJBQTBCO0FBQ3pFLGlCQUFXLEtBQUssSUFBSTtBQUFBLElBQ3JCLE9BQU87QUFDTixpQkFBVyxLQUFLLElBQUk7QUFBQSxJQUNyQjtBQUFBLEVBQ0Q7QUFLQSxXQUFTLHVCQUF1QjtBQUUvQixTQUFLLG9CQUFvQixJQUFJLElBQUksZUFBZSxDQUFDLFlBQVk7QUFDNUQsVUFBSSxLQUFLLG1CQUFtQixhQUFhLGdCQUFnQjtBQUN4RCxZQUFJO0FBQ0gsZUFBSyxtQkFBbUIsRUFBRSxNQUFNO0FBQ2hDO0FBQUEsUUFDRCxTQUFTLEdBQUc7QUFDWCxpQkFBTyxLQUFLLG1CQUFtQjtBQUFBLFFBQ2hDO0FBQUEsTUFDRDtBQUVBLFdBQUssbUJBQW1CLElBQUksSUFBSSxlQUFlLEtBQUssTUFBTTtBQUN6RCxhQUFLLGdCQUFnQixFQUFFLE9BQU8sbUJBQW1CLEtBQUs7QUFDdEQsaUNBQXlCLEtBQUssSUFBSTtBQUFBLE1BQ25DLENBQUM7QUFBQSxJQUNGLENBQUM7QUFFRCxTQUFLLG9CQUFvQixFQUFFLFFBQVEsS0FBSyxnQkFBZ0IsQ0FBQztBQUFBLEVBQzFEO0FBS0EsV0FBUywwQkFBMEI7QUFFbEMsUUFBSSxpQkFBaUIsQ0FBQyxjQUFjO0FBQ25DLFVBQUksWUFBWTtBQUVoQixpQkFBVyxZQUFZLFdBQVc7QUFDakMsWUFBSSxTQUFTLFNBQVMsYUFBYTtBQUNsQyxjQUNDLFNBQVMsV0FBVyxTQUFTLEtBQzdCLFNBQVMsYUFBYSxTQUFTLEdBQzlCO0FBQ0Qsd0JBQVk7QUFDWjtBQUFBLFVBQ0Q7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUVBLFVBQUksY0FBYyxNQUFNO0FBQ3ZCLGFBQUssZ0JBQWdCLEVBQUUsT0FBTyxtQkFBbUIsS0FBSztBQUN0RCx1QkFBZSxLQUFLLElBQUk7QUFBQSxNQUN6QjtBQUFBLElBQ0QsQ0FBQyxFQUFFLFFBQVEsTUFBTTtBQUFBLE1BQ2hCLFdBQVc7QUFBQSxJQUNaLENBQUM7QUFBQSxFQUNGO0FBUUEsV0FBUyxhQUFhO0FBQ3JCLFVBQU1DLFFBQU87QUFFYixVQUFNQyxXQUFVLE9BQU8sQ0FBQyxHQUFHRCxNQUFLLFVBQVUsUUFBUSxDQUFDO0FBRW5ELElBQUFBLE1BQUssb0JBQW9CLElBQUk7QUFBQSxNQUM1QkEsTUFBSyxtQkFBbUI7QUFBQSxNQUN4QkEsTUFBSyxtQkFBbUI7QUFBQSxNQUN4QkM7QUFBQSxJQUNEO0FBRUEsVUFBTSxZQUFZLElBQUksaUJBQWlCLFNBQVUsV0FBVztBQUMzRCxVQUFJLFlBQVk7QUFDaEIsaUJBQVcsWUFBWSxXQUFXO0FBQ2pDLFlBQUksU0FBUyxTQUFTLGFBQWE7QUFDbEMsY0FDQyxTQUFTLFdBQVcsU0FBUyxLQUM3QixTQUFTLGFBQWEsU0FBUyxHQUM5QjtBQUNELHdCQUFZO0FBQ1o7QUFBQSxVQUNEO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFFQSxVQUFJLGNBQWMsTUFBTTtBQUN2QixRQUFBRCxNQUFLLG9CQUFvQixFQUFFLE9BQU87QUFBQSxNQUNuQztBQUFBLElBQ0QsQ0FBQztBQUVELGNBQVUsUUFBUUEsTUFBSyxzQkFBc0IsR0FBRztBQUFBLE1BQy9DLFdBQVc7QUFBQSxNQUNYLFNBQVM7QUFBQSxJQUNWLENBQUM7QUFFRCxXQUFPQTtBQUFBLEVBQ1I7QUFNQSxXQUFTRSxNQUFLLFNBQVM7QUFDdEIsUUFBSSxDQUFDLEtBQUssWUFBWTtBQUNyQixZQUFNLElBQUksTUFBTSwyQkFBMkI7QUFBQSxJQUM1QztBQUVBLFVBQU1DLGFBQVksUUFBUSxhQUFhLEdBQUcsZ0JBQWdCLGVBQWU7QUFFekUsVUFBTSxRQUFRLG1CQUFtQixLQUFLLElBQUk7QUFDMUMsZUFBVyxRQUFRLE9BQU87QUFDekIsWUFBTSxLQUFLLEtBQUssYUFBYSxJQUFJO0FBRWpDLFVBQUksT0FBT0EsWUFBVztBQUNyQixhQUFLLFVBQVUsSUFBSSxRQUFRO0FBRTNCLGNBQU0sWUFBWSxTQUFTLEtBQUssVUFBVSxvQkFBb0IsR0FBRyxFQUFFO0FBRW5FLFlBQUksQ0FBQyxNQUFNLFNBQVMsS0FBSyxZQUFZLEdBQUc7QUFDdkMsZUFBSyxNQUFNLGFBQWE7QUFFeEIscUJBQVcsTUFBTTtBQUNoQixpQkFBSyxNQUFNLGFBQWE7QUFBQSxVQUN6QixHQUFHLFNBQVM7QUFBQSxRQUNiO0FBR0EsY0FBTSxPQUFPLENBQUM7QUFDZCxjQUFNLE9BQU87QUFBQSxVQUNaO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBRUEsbUJBQVcsQ0FBQyxFQUFFLElBQUksS0FBSyxPQUFPLFFBQVEsS0FBSyxVQUFVLEdBQUc7QUFDdkQsY0FBSSxLQUFLLEtBQUssV0FBVyxPQUFPLEtBQUssS0FBSyxRQUFRLEtBQUssSUFBSSxNQUFNLElBQUk7QUFDcEUsaUJBQUssS0FBSyxJQUFJLElBQUksS0FBSztBQUFBLFVBQ3hCO0FBQUEsUUFDRDtBQUVBLFlBQUksS0FBSyxhQUFhLGtCQUFrQixHQUFHO0FBQzFDLGdCQUFNLE1BQU0sS0FBSyxhQUFhLGtCQUFrQjtBQUVoRCxjQUNDLENBQUMsS0FBSyxhQUFhLHFCQUFxQixLQUN4QyxLQUFLLGFBQWEscUJBQXFCLEVBQUUsWUFBWSxNQUFNLFVBQzFEO0FBQ0QsaUJBQUssZ0JBQWdCLGtCQUFrQjtBQUFBLFVBQ3hDO0FBRUEsZ0JBQU1GLFdBQVUsS0FBSyxVQUFVLFNBQVMsQ0FBQyxDQUFDO0FBQzFDLGdCQUFNLFNBQVM7QUFDZiwrQkFBcUIsTUFBTSxLQUFLQSxVQUFTLE1BQU0sRUFDN0MsS0FBSyxNQUFNO0FBQ1gsNEJBQWdCLE1BQU0sdUJBQXVCO0FBQUEsY0FDNUMsV0FBQUU7QUFBQSxZQUNELENBQUM7QUFBQSxVQUNGLENBQUMsRUFDQSxNQUFNLENBQUMsTUFBTTtBQUNiLDhCQUFrQixNQUFNLHdCQUF3QixFQUFFLE9BQU87QUFBQSxVQUMxRCxDQUFDO0FBQUEsUUFDSCxPQUFPO0FBQ04sMEJBQWdCLE1BQU0sdUJBQXVCO0FBQUEsWUFDNUMsV0FBQUE7QUFBQSxZQUNBO0FBQUEsVUFDRCxDQUFDO0FBQUEsUUFDRjtBQUFBLE1BQ0QsT0FBTztBQUNOLGFBQUssVUFBVSxPQUFPLFFBQVE7QUFBQSxNQUMvQjtBQUFBLElBQ0Q7QUFFQSxVQUFNLGtCQUFrQixLQUFLLFVBQVUsa0JBQWtCO0FBQ3pELGVBQVcsU0FBUyxpQkFBaUI7QUFDcEMsWUFBTSxTQUFTLGdCQUFnQixLQUFLO0FBQ3BDLFlBQU0sUUFBUSxPQUFPLFdBQVcsTUFBTUEsYUFBWSxXQUFXO0FBQzdELFdBQUssVUFBVSxvQkFBb0IsS0FBSyxVQUFVLEtBQUs7QUFBQSxJQUN4RDtBQUVBLFVBQU0sZUFBZSxLQUFLLFVBQVUsZ0JBQWdCO0FBQ3BELGVBQVcsU0FBUyxjQUFjO0FBQ2pDLFlBQU0sU0FBUyxhQUFhLEtBQUs7QUFDakMsWUFBTSxRQUFRLE9BQU8sV0FBVyxNQUFNQSxhQUFZLFdBQVc7QUFDN0QsV0FBSyxVQUFVLGtCQUFrQixLQUFLLFVBQVUsS0FBSztBQUFBLElBQ3REO0FBRUEsZUFBVyxLQUFLLElBQUk7QUFBQSxFQUNyQjtBQUtBLFdBQVMsbUJBQW1CO0FBQzNCLFFBQUksQ0FBQyxLQUFLLFlBQVk7QUFDckIsWUFBTSxJQUFJLE1BQU0sMkJBQTJCO0FBQUEsSUFDNUM7QUFLQSxTQUFLLHFCQUFxQixJQUFJLENBQUMsVUFBVTtBQUN4QyxZQUFNLFVBQVUsMkJBQTJCLE9BQU8sZ0JBQWdCLFFBQVE7QUFFMUUsVUFBSSxtQkFBbUIscUJBQXFCLFFBQVEsYUFBYSxNQUFNO0FBQ3RFLFFBQUFELE1BQUssS0FBSyxNQUFNLE9BQU87QUFBQSxNQUN4QjtBQUFBLElBQ0Q7QUFNQSxTQUFLLHFCQUFxQixJQUFJLENBQUMsVUFBVTtBQUN4QyxZQUFNLFVBQVU7QUFBQSxRQUNmO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNEO0FBRUEsVUFBSSxtQkFBbUIsYUFBYTtBQUNuQyxjQUFNLFNBQVM7QUFBQSxVQUNkO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNEO0FBRUEsWUFBSSxrQkFBa0IscUJBQXFCLE9BQU8sYUFBYSxNQUFNO0FBQ3BFLGdCQUFNQyxhQUFZLE9BQU87QUFBQSxZQUN4QixHQUFHLGdCQUFnQjtBQUFBLFVBQ3BCO0FBQ0EsY0FBSUEsWUFBVztBQUNkLGtCQUFNLFlBQVksS0FBSyxjQUFjLE9BQU9BLFVBQVMsR0FBRztBQUN4RCxnQkFBSSxxQkFBcUIsYUFBYTtBQUNyQyx3QkFBVSxPQUFPO0FBQ2pCLDZCQUFlLEtBQUssSUFBSTtBQUN4Qiw4QkFBZ0IsTUFBTSxzQkFBc0I7QUFBQSxnQkFDM0MsV0FBQUE7QUFBQSxjQUNELENBQUM7QUFBQSxZQUNGO0FBQUEsVUFDRDtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsSUFDRDtBQUVBLFNBQUssZ0JBQWdCLEVBQUUsaUJBQWlCLFNBQVMsS0FBSyxxQkFBcUIsQ0FBQztBQUM1RSxTQUFLLGdCQUFnQixFQUFFLGlCQUFpQixTQUFTLEtBQUsscUJBQXFCLENBQUM7QUFFNUUsU0FBSyxnQkFBZ0IsRUFBRSxpQkFBaUIsU0FBUyxLQUFLLHFCQUFxQixDQUFDO0FBQzVFLFNBQUssZ0JBQWdCLEVBQUUsaUJBQWlCLFNBQVMsS0FBSyxxQkFBcUIsQ0FBQztBQUs1RSxTQUFLLGlCQUFpQixJQUFJLENBQUMsVUFBVTtBQUNwQyxZQUFNLE9BQU8sTUFBTSxhQUFhO0FBRWhDLGlCQUFXLENBQUMsRUFBRSxPQUFPLEtBQUssT0FBTyxRQUFRLElBQUksR0FBRztBQUMvQyxZQUFJLFlBQVksTUFBTTtBQUNyQjtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBRUEsaUJBQVcsS0FBSyxJQUFJO0FBQUEsSUFDckI7QUFFQSxXQUFPO0FBQUEsRUFDUjtBQU1BLFdBQVMsMEJBQTBCLGNBQWM7QUFDaEQsVUFBTUgsUUFBTztBQUViLFFBQUksY0FBYyxjQUFjLHNCQUFzQixHQUFHO0FBQ3hEO0FBQUEsSUFDRDtBQU1BLFVBQU0sV0FBVyxJQUFJLGlCQUFpQixTQUFVLFdBQVc7QUFDMUQsVUFBSSxRQUFRLFNBQVMsR0FBRztBQUN2QixjQUFNLFdBQVcsVUFBVSxJQUFJO0FBQy9CLFlBQUksb0JBQW9CLGdCQUFnQjtBQUN2Qyx5QkFBZSxLQUFLQSxLQUFJO0FBQUEsUUFDekI7QUFBQSxNQUNEO0FBQUEsSUFDRCxDQUFDO0FBRUQsYUFBUyxRQUFRLGNBQWM7QUFBQSxNQUM5QixXQUFXO0FBQUEsTUFDWCxZQUFZO0FBQUEsTUFDWixTQUFTO0FBQUEsTUFDVCxpQkFBaUI7QUFBQSxRQUNoQjtBQUFBLFFBQ0E7QUFBQSxRQUNBLEdBQUcsZ0JBQWdCO0FBQUEsTUFDcEI7QUFBQSxJQUNELENBQUM7QUFFRCxvQkFBZ0IsY0FBYyx3QkFBd0IsUUFBUTtBQUFBLEVBQy9EO0FBT0EsV0FBUyx3QkFBd0I7QUFDaEMsUUFBSSxDQUFDLEtBQUssWUFBWTtBQUNyQixZQUFNLElBQUksTUFBTSwyQkFBMkI7QUFBQSxJQUM1QztBQUVBLFNBQUssb0JBQW9CLElBQUksS0FBSyxXQUFXO0FBQUEsTUFDNUMsSUFBSSxjQUFjO0FBQUEsSUFDbkI7QUFDQSxTQUFLLGdCQUFnQixJQUFJLEtBQUssV0FBVztBQUFBLE1BQ3hDLE9BQU8sY0FBYztBQUFBLElBQ3RCO0FBQ0EsU0FBSyxtQkFBbUIsSUFBSSxLQUFLLFdBQVc7QUFBQSxNQUMzQyxJQUFJLGNBQWM7QUFBQSxJQUNuQjtBQUNBLFNBQUssc0JBQXNCLElBQUksS0FBSyxXQUFXO0FBQUEsTUFDOUMsSUFBSSxjQUFjO0FBQUEsSUFDbkI7QUFBQSxFQUNEO0FBUUEsV0FBUyxpQkFBaUI7QUFDekIsUUFBSSxDQUFDLEtBQUssWUFBWTtBQUNyQixZQUFNLElBQUksTUFBTSwyQkFBMkI7QUFBQSxJQUM1QztBQUVBLFFBQUk7QUFFSixVQUFNLHVCQUF1QixLQUFLLGdCQUFnQixFQUFFO0FBQUEsTUFDbkQ7QUFBQSxNQUNBO0FBQUEsSUFDRDtBQUVBLFVBQU0sVUFBVSxDQUFDO0FBQ2pCLFVBQU0sUUFBUSxtQkFBbUIsS0FBSyxNQUFNLFFBQVcsSUFBSTtBQUUzRCxlQUFXLFFBQVEsT0FBTztBQUN6QixVQUFJLEVBQUUsZ0JBQWdCLGFBQWM7QUFDcEMsVUFBSSxRQUFRLGVBQWUsS0FBSyxNQUFNLElBQUk7QUFFMUMsVUFBSUc7QUFDSixVQUFJLEtBQUssYUFBYSxJQUFJLEdBQUc7QUFDNUIsUUFBQUEsYUFBWSxLQUFLLGFBQWEsSUFBSTtBQUFBLE1BQ25DO0FBRUEsVUFBSTtBQUNKLFVBQUksS0FBSyxhQUFhLFVBQVUsS0FBSyxLQUFLLGFBQWEsTUFBTTtBQUM1RCxtQkFBVztBQUFBLE1BQ1o7QUFFQSxVQUFJLENBQUNBLFlBQVc7QUFDZixRQUFBQSxhQUFZLElBQUksR0FBRyxLQUFLLEVBQUUsU0FBUztBQUNuQyxhQUFLLGFBQWEsTUFBTUEsVUFBUztBQUFBLE1BQ2xDO0FBRUEsVUFBSSxLQUFLLGFBQWEsR0FBRyxnQkFBZ0IsYUFBYSxHQUFHO0FBQ3hELGdCQUFRLHNCQUFzQixLQUFLLGdDQUFnQyxLQUFLO0FBQUEsVUFDdkUsR0FBRyxnQkFBZ0I7QUFBQSxRQUNwQixDQUFDO0FBQUEsTUFDRjtBQUVBLFVBQUksU0FBUztBQUNiLFVBQUksS0FBSyxhQUFhLEdBQUcsZ0JBQWdCLFdBQVcsR0FBRztBQUN0RCxpQkFBUztBQUFBLE1BQ1Y7QUFFQSxVQUFJLEtBQUssUUFBUSxTQUFTLE1BQU0sUUFBUSxhQUFhLE1BQU07QUFDMUQsYUFBSyxVQUFVLE9BQU8sUUFBUTtBQUM5QiwwQkFBa0JBO0FBQUEsTUFDbkI7QUFFQSxZQUFNLFFBQVE7QUFDZCxZQUFNLFVBQVUsdUJBQXVCLEtBQUs7QUFFNUMsY0FBUSxLQUFLO0FBQUEsUUFDWixXQUFBQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQSxPQUFPO0FBQUEsUUFDUDtBQUFBLFFBQ0E7QUFBQSxNQUNELENBQUM7QUFFRCxnQ0FBMEIsS0FBSyxNQUFNLElBQUk7QUFBQSxJQUMxQztBQUVBLFNBQUssVUFBVSxvQkFBb0IsTUFBTSxPQUFPLENBQUM7QUFDakQsU0FBSyxVQUFVLGtCQUFrQixDQUFDLENBQUM7QUFDbkMsU0FBSyxVQUFVLFVBQVUsT0FBTyxDQUFDO0FBRWpDLFdBQU8sdUJBQXVCLEtBQUssSUFBSSxFQUFFLEtBQUssTUFBTTtBQUNuRCxVQUFJLGlCQUFpQjtBQUNwQixlQUFPLElBQUksV0FBVyxNQUFNO0FBQzNCLGdCQUFNLFNBQVMsS0FBSyxXQUFXO0FBQUEsWUFDOUIsSUFBSSxnQkFBZ0Isa0JBQWtCLGVBQWU7QUFBQSxVQUN0RDtBQUNBLGNBQUksa0JBQWtCLHFCQUFxQixPQUFPLGFBQWEsTUFBTTtBQUNwRSxZQUFBRCxNQUFLLEtBQUssTUFBTSxNQUFNO0FBQUEsVUFDdkI7QUFBQSxRQUNELENBQUMsRUFDQyxJQUFJLE1BQVMsRUFDYixLQUFLLE1BQU07QUFBQSxRQUFDLENBQUMsRUFDYixNQUFNLENBQUMsTUFBTTtBQUNiLDRCQUFrQixNQUFNLHdCQUF3QixFQUFFLE9BQU87QUFBQSxRQUMxRCxDQUFDO0FBQUEsTUFDSDtBQUVBLGFBQU8sUUFBUSxRQUFRO0FBQUEsSUFDeEIsQ0FBQztBQUFBLEVBQ0Y7QUFFQSxXQUFTLDJCQUEyQjtBQUNuQyxRQUFJLEtBQUssZ0JBQWdCLEVBQUUsT0FBTyxtQkFBbUIsS0FBSyxNQUFNLE1BQU07QUFDckUsMkNBQXFDLEtBQUssSUFBSTtBQUFBLElBQy9DO0FBRUEscUJBQWlCLEtBQUssSUFBSTtBQUFBLEVBQzNCO0FBTUEsV0FBUyx5QkFBeUI7QUFDakMsVUFBTUYsUUFBTztBQUViLFdBQU8sSUFBSSxRQUFRLENBQUMsWUFBWTtBQUMvQixZQUFNLFdBQVcsSUFBSSxpQkFBaUIsU0FBVSxXQUFXO0FBQzFELGNBQU0sV0FBV0EsTUFBSyxVQUFVLGtCQUFrQixFQUFFO0FBQ3BELGNBQU0sV0FBV0EsTUFBSyxnQkFBZ0IsRUFBRTtBQUFBLFVBQ3ZDO0FBQUEsUUFDRCxFQUFFO0FBR0YsWUFBSSxhQUFhLFNBQVU7QUFFM0IsaUJBQVMsV0FBVztBQUVwQixpQ0FBeUIsS0FBS0EsS0FBSTtBQUVsQyxnQkFBUTtBQUFBLE1BQ1QsQ0FBQztBQUVELGVBQVMsUUFBUUEsTUFBSyxnQkFBZ0IsR0FBRztBQUFBLFFBQ3hDLFlBQVk7QUFBQSxNQUNiLENBQUM7QUFBQSxJQUNGLENBQUM7QUFBQSxFQUNGO0FBT0EsV0FBUyxZQUFZLE9BQU87QUFDM0IsUUFBSSxDQUFDLFFBQVcsSUFBSSxFQUFFLFFBQVEsS0FBSyxNQUFNLElBQUk7QUFDNUMsYUFBTztBQUFBLElBQ1I7QUFFQSxVQUFNLGFBQWEsU0FBUyxPQUFPLEVBQUU7QUFFckMsUUFBSSxNQUFNLFVBQVUsR0FBRztBQUN0QixhQUFPO0FBQUEsSUFDUjtBQUVBLFdBQU87QUFBQSxFQUNSO0FBT0EsV0FBUyxhQUFhLE1BQU07QUFDM0IsVUFBTSxNQUFNLFVBQVUsUUFBUSxFQUFFLGlCQUFpQixJQUFJO0FBQ3JELFVBQU0sV0FBVyxLQUFLLHNCQUFzQjtBQUU1QyxXQUNDLFlBQVksSUFBSSxtQkFBbUIsQ0FBQyxJQUNwQyxZQUFZLElBQUksY0FBYyxDQUFDLElBQy9CLFlBQVksSUFBSSxhQUFhLENBQUMsSUFDOUIsWUFBWSxTQUFTLE9BQU8sQ0FBQyxJQUM3QixZQUFZLElBQUksb0JBQW9CLENBQUMsSUFDckMsWUFBWSxJQUFJLGNBQWMsQ0FBQyxJQUMvQixZQUFZLElBQUksY0FBYyxDQUFDO0FBQUEsRUFFakM7QUFNQSxXQUFTLG1CQUFtQjtBQUMzQixVQUFNLGtCQUFrQixDQUFDO0FBQ3pCLFVBQU0sZ0JBQWdCLENBQUM7QUFFdkIsUUFBSSxNQUFNO0FBQ1YsVUFBTSxRQUFRLEtBQUssZ0JBQWdCLEVBQUUsT0FBTyxZQUFZO0FBRXhELFVBQU0sVUFBVSxLQUFLLFVBQVUsa0JBQWtCO0FBQ2pELGVBQVcsQ0FBQyxFQUFFLE1BQU0sS0FBSyxRQUFRLFFBQVEsR0FBRztBQUMzQyxZQUFNLE1BQU0sUUFBUTtBQUVwQixhQUFPLEtBQUssZ0JBQWdCLEVBQUUsT0FBTyxlQUFlLEdBQUcsRUFBRTtBQUV6RCxVQUFJLE1BQU0sT0FBTztBQUNoQixzQkFBYyxLQUFLLE1BQU0sTUFBTSxDQUFDO0FBQUEsTUFDakMsT0FBTztBQUNOLHdCQUFnQixLQUFLLE1BQU0sTUFBTSxDQUFDO0FBQUEsTUFDbkM7QUFBQSxJQUNEO0FBRUEsU0FBSyxVQUFVLG9CQUFvQixlQUFlO0FBQ2xELFNBQUssVUFBVSxrQkFBa0IsYUFBYTtBQUU5QyxRQUFJLEtBQUssbUJBQW1CLEdBQUc7QUFDOUIsVUFBSSxjQUFjLFNBQVMsR0FBRztBQUM3QixhQUFLLG1CQUFtQixFQUFFLFVBQVUsT0FBTyxRQUFRO0FBQUEsTUFDcEQsT0FBTztBQUNOLGFBQUssbUJBQW1CLEVBQUUsVUFBVSxJQUFJLFFBQVE7QUFBQSxNQUNqRDtBQUFBLElBQ0Q7QUFBQSxFQUNEO0FBTUEsV0FBUyx1Q0FBdUM7QUFDL0MsVUFBTSxRQUFRLEtBQUssZ0JBQWdCLEVBQUUsc0JBQXNCLEVBQUU7QUFFN0QsUUFBSSxnQkFBZ0I7QUFFcEIsdUJBQW1CLEtBQUssTUFBTSxRQUFXLE9BQU8sRUFBRSxRQUFRLENBQUMsU0FBUztBQUNuRSx1QkFBaUIsYUFBYSxLQUFLLE1BQU0sSUFBSTtBQUFBLElBQzlDLENBQUM7QUFFRCx1QkFBbUIsS0FBSyxNQUFNLFFBQVcsS0FBSyxFQUFFLFFBQVEsQ0FBQyxTQUFTO0FBQ2pFLHVCQUFpQixhQUFhLEtBQUssTUFBTSxJQUFJO0FBQUEsSUFDOUMsQ0FBQztBQUVELFNBQUssZ0JBQWdCLEVBQUUsT0FBTyxjQUFjLFFBQVEsZ0JBQWdCLENBQUM7QUFDckUsU0FBSyxnQkFBZ0IsRUFBRSxPQUFPLGdCQUFnQixFQUFFLFVBQVUsRUFBRTtBQUU1RCxVQUFNLFVBQVUsS0FBSyxVQUFVLGtCQUFrQixFQUFFO0FBQUEsTUFDbEQsS0FBSyxVQUFVLGdCQUFnQjtBQUFBLElBQ2hDO0FBRUEsZUFBVyxDQUFDLEdBQUcsTUFBTSxLQUFLLFFBQVEsUUFBUSxHQUFHO0FBQzVDLFlBQU0sTUFBTSxRQUFRO0FBQ3BCLFlBQU0sVUFBVSxLQUFLLGdCQUFnQixFQUFFO0FBQUEsUUFDdEMsYUFBYSxnQkFBZ0Isa0JBQWtCLEdBQUc7QUFBQSxNQUNuRDtBQUNBLFVBQUksRUFBRSxtQkFBbUIsbUJBQW9CO0FBRTdDLFdBQUssZ0JBQWdCLEVBQUU7QUFBQSxRQUN0QixlQUFlLEdBQUc7QUFBQSxRQUNsQixhQUFhLEtBQUssTUFBTSxPQUFPO0FBQUEsTUFDaEM7QUFDQSxhQUFPLE9BQU8sSUFBSSxJQUFJLFVBQVUsT0FBTyxPQUFPLENBQUMsRUFDN0MsT0FBTyxXQUFXLEVBQ2xCLFNBQVM7QUFBQSxJQUNaO0FBRUEsVUFBTSxRQUFRLEtBQUssb0JBQW9CLEVBQUU7QUFBQSxNQUN4QyxPQUFPLGdCQUFnQixvQ0FBb0MsZ0JBQWdCO0FBQUEsSUFDNUU7QUFDQSxlQUFXLENBQUMsRUFBRSxJQUFJLEtBQUssTUFBTSxRQUFRLEdBQUc7QUFDdkMsV0FBSyxVQUFVLE9BQU8sV0FBVztBQUFBLElBQ2xDO0FBRUEsU0FBSyxnQkFBZ0IsRUFBRSxPQUFPLG1CQUFtQixJQUFJO0FBQ3JELFNBQUssVUFBVSxvQkFBb0IsTUFBTSxPQUFPLENBQUM7QUFBQSxFQUNsRDtBQU9BLFdBQVMsZUFBZSxNQUFNO0FBQzdCLFFBQUk7QUFDSixRQUFJLFdBQVc7QUFDZixRQUFJLEtBQUssYUFBYSxzQkFBc0IsR0FBRztBQUM5QyxjQUFRLEtBQUssYUFBYSxzQkFBc0I7QUFBQSxJQUNqRCxPQUFPO0FBQ04sY0FBUSxLQUFLO0FBQ2IsaUJBQVc7QUFBQSxJQUNaO0FBRUEsUUFBSSxDQUFDLFNBQVMsS0FBSyxHQUFHO0FBQ3JCLGNBQVE7QUFBQSxJQUNUO0FBRUEsWUFBUSxNQUFNLEtBQUs7QUFFbkIsUUFBSSxVQUFVLElBQUk7QUFDakIsY0FBUSxLQUFLLFVBQVUsd0JBQXdCLFNBQVM7QUFBQSxJQUN6RDtBQUVBLFFBQUksTUFBTSxTQUFTLEtBQUs7QUFDdkIsY0FBUSxHQUFHLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQztBQUFBLElBQ2xDO0FBRUEsUUFBSSxhQUFhLE1BQU07QUFDdEIsV0FBSyxhQUFhLHdCQUF3QixLQUFLO0FBQUEsSUFDaEQ7QUFFQSxXQUFPO0FBQUEsRUFDUjtBQU1BLFdBQVMsY0FBYztBQUV0QixXQUFPO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBaUNSO0FBbG1DQSxNQW9FTSxxQkFNQSx3QkFNQSxzQkFNQSxrQkFLQSxxQkFNQSx1QkFLQSx1QkFNQSwwQkFPQSxtQkFNQSx3QkFNQSxrQkFNQSxxQkFPQSxzQkFhQTtBQXpKTixNQUFBSSxhQUFBO0FBQUE7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0EsTUFBQUM7QUFLQTtBQU1BO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBQUE7QUFPQTtBQUNBO0FBQ0EsTUFBQUM7QUFDQSxNQUFBQztBQVdBLE1BQU0sc0JBQXNCLE9BQU8sZUFBZTtBQU1sRCxNQUFNLHlCQUF5QixPQUFPLGtCQUFrQjtBQU14RCxNQUFNLHVCQUF1QixPQUFPLGdCQUFnQjtBQU1wRCxNQUFNLG1CQUFtQixPQUFPLFlBQVk7QUFLNUMsTUFBTSxzQkFBc0IsT0FBTyxlQUFlO0FBTWxELE1BQU0sd0JBQXdCLE9BQU8sdUJBQXVCO0FBSzVELE1BQU0sd0JBQXdCLE9BQU8sdUJBQXVCO0FBTTVELE1BQU0sMkJBQTJCLE9BQU8sMEJBQTBCO0FBT2xFLE1BQU0sb0JBQW9CLE9BQU8sbUJBQW1CO0FBTXBELE1BQU0seUJBQXlCLE9BQU8sa0JBQWtCO0FBTXhELE1BQU0sbUJBQW1CLE9BQU8sWUFBWTtBQU01QyxNQUFNLHNCQUFzQixPQUFPLGVBQWU7QUFPbEQsTUFBTSx1QkFBdUIsT0FBTyxnQkFBZ0I7QUFhcEQsTUFBTSxPQUFOLGNBQW1CLGNBQWM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS2hDLFlBQVksY0FBYyxJQUFJO0FBQzdCLGlCQUFPLE9BQU8sSUFBSSx5Q0FBeUM7QUFBQSxRQUM1RDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUF3QkEsSUFBSSxXQUFXO0FBQ2QsaUJBQU8sT0FBTyxPQUFPLENBQUMsR0FBRyxNQUFNLFVBQVU7QUFBQSxZQUN4QyxXQUFXO0FBQUEsY0FDVixNQUFNLFlBQVk7QUFBQSxZQUNuQjtBQUFBLFlBQ0EsUUFBUTtBQUFBLGNBQ1AsaUJBQWlCO0FBQUEsWUFDbEI7QUFBQSxZQUNBLFNBQVM7QUFBQSxjQUNSLFVBQVUsQ0FBQztBQUFBLGNBQ1gsUUFBUSxDQUFDO0FBQUEsWUFDVjtBQUFBLFlBQ0EsT0FBTztBQUFBLGNBQ04sVUFBVTtBQUFBLGNBQ1YsUUFBUTtBQUFBLGNBQ1IsTUFBTTtBQUFBLGNBQ04sYUFBYTtBQUFBLGNBQ2IsU0FBUztBQUFBLGdCQUNSLFFBQVE7QUFBQSxjQUNUO0FBQUEsWUFDRDtBQUFBLFlBRUEsVUFBVTtBQUFBLGNBQ1QsV0FBVztBQUFBLFlBQ1o7QUFBQSxZQUVBLFNBQVM7QUFBQSxjQUNSLFFBQVE7QUFBQSxjQUNSLFFBQVE7QUFBQSxjQUNSLFlBQVk7QUFBQSxZQUNiO0FBQUEsWUFFQSxRQUFRO0FBQUEsY0FDUCxXQUFXO0FBQUEsY0FDWCxXQUFXO0FBQUEsZ0JBQ1Y7QUFBQSxrQkFDQyxNQUFNO0FBQUEsa0JBQ04sU0FBUztBQUFBLG9CQUNSLFFBQVEsQ0FBQyxHQUFHLENBQUM7QUFBQSxrQkFDZDtBQUFBLGdCQUNEO0FBQUEsZ0JBRUE7QUFBQSxrQkFDQyxNQUFNO0FBQUEsa0JBQ04sU0FBUztBQUFBLGdCQUNWO0FBQUEsY0FDRDtBQUFBLFlBQ0Q7QUFBQSxVQUNELENBQUM7QUFBQSxRQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxDQUFDLG9CQUFvQixJQUFJO0FBQ3hCLGdCQUFNLG9CQUFvQixFQUFFO0FBRTVCLGdDQUFzQixLQUFLLElBQUk7QUFFL0IsZUFBSyxnQkFBZ0IsSUFBSSxJQUFJLFdBQVcsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO0FBRXBELDJCQUFpQixLQUFLLElBQUk7QUFHMUIseUJBQWUsS0FBSyxJQUFJLEVBQUUsS0FBSyxNQUFNO0FBQ3BDLDZCQUFpQixLQUFLLElBQUk7QUFDMUIsdUJBQVcsS0FBSyxJQUFJO0FBQ3BCLGlDQUFxQixLQUFLLElBQUk7QUFDOUIsb0NBQXdCLEtBQUssSUFBSTtBQUFBLFVBQ2xDLENBQUM7QUFBQSxRQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsT0FBTyxtQkFBbUI7QUFDekIsaUJBQU8sQ0FBQyxjQUFjO0FBQUEsUUFDdkI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxPQUFPLFNBQVM7QUFDZixpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFVQSxVQUFVLFVBQVU7QUFDbkIsY0FBSSxRQUFRO0FBRVosNkJBQW1CLEtBQUssSUFBSSxFQUFFLFFBQVEsQ0FBQyxTQUFTO0FBQy9DLGdCQUFJLFVBQVUsTUFBTTtBQUNuQjtBQUFBLFlBQ0Q7QUFFQSxnQkFBSSxLQUFLLGFBQWEsbUJBQW1CLE1BQU0sVUFBVTtBQUN4RCxtQkFBSyxXQUNIO0FBQUEsZ0JBQ0EsZ0NBQWdDLEtBQUssYUFBYSxJQUFJLENBQUM7QUFBQSxjQUN4RCxFQUNDLE1BQU07QUFDUixzQkFBUTtBQUFBLFlBQ1Q7QUFFQSxnQkFBSSxLQUFLLGFBQWEsSUFBSSxNQUFNLFVBQVU7QUFDekMsbUJBQUssV0FDSDtBQUFBLGdCQUNBLGdDQUFnQyxLQUFLLGFBQWEsSUFBSSxDQUFDO0FBQUEsY0FDeEQsRUFDQyxNQUFNO0FBQ1Isc0JBQVE7QUFBQSxZQUNUO0FBQUEsVUFDRCxDQUFDO0FBRUQsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVNBLGVBQWU7QUFDZCxnQkFBTSxRQUFRLG1CQUFtQixLQUFLLElBQUk7QUFDMUMscUJBQVcsUUFBUSxPQUFPO0FBQ3pCLGdCQUFJLEtBQUssUUFBUSxTQUFTLE1BQU0sTUFBTTtBQUNyQyxrQkFBSSxLQUFLLGFBQWEsbUJBQW1CLEdBQUc7QUFDM0MsdUJBQU8sS0FBSyxhQUFhLG1CQUFtQjtBQUFBLGNBQzdDO0FBRUEscUJBQU8sS0FBSyxhQUFhLElBQUk7QUFBQSxZQUM5QjtBQUFBLFVBQ0Q7QUFDQSxpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxvQkFBb0I7QUFDbkIsZ0JBQU0sa0JBQWtCO0FBRXhCLGdCQUFNQyxZQUFXLFlBQVk7QUFFN0IscUJBQVcsQ0FBQyxFQUFFVCxLQUFJLEtBQUssT0FBTyxRQUFRLENBQUMsU0FBUyxPQUFPLENBQUMsR0FBRztBQUUxRCxZQUFBUyxVQUFTLGlCQUFpQlQsT0FBTSxLQUFLLGlCQUFpQixDQUFDO0FBQUEsVUFDeEQ7QUFBQSxRQUNEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsdUJBQXVCO0FBQ3RCLGdCQUFNLHFCQUFxQjtBQUUzQixnQkFBTVMsWUFBVyxZQUFZO0FBRzdCLHFCQUFXLENBQUMsRUFBRVQsS0FBSSxLQUFLLE9BQU8sUUFBUSxDQUFDLFNBQVMsT0FBTyxDQUFDLEdBQUc7QUFDMUQsWUFBQVMsVUFBUyxvQkFBb0JULE9BQU0sS0FBSyxpQkFBaUIsQ0FBQztBQUFBLFVBQzNEO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUF3dkJBLDRCQUFzQixJQUFJO0FBQUE7QUFBQTs7O0FDcG1DMUIsTUFxQk07QUFyQk47QUFBQTtBQVlBO0FBQ0EsTUFBQVU7QUFRQSxNQUFNLG9CQUFvQixJQUFJLGNBQWM7QUFFNUMsVUFBSTtBQUNILDBCQUFrQjtBQUFBLFVBQ2pCO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFJQTtBQUFBLFFBQ0Q7QUFBQSxNQUNELFNBQVMsR0FBRztBQUNYO0FBQUEsVUFDQyxTQUFTLFlBQVksRUFBRSxjQUFjLE1BQU07QUFBQSxVQUMzQztBQUFBLFVBQ0EsSUFBSTtBQUFBLFFBQ0w7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDckNBO0FBQUE7QUFBQTtBQUFBO0FBd05BLFdBQVMsZUFBZTtBQUN2QixRQUFJLENBQUMsT0FBTyxXQUFXLEdBQUc7QUFDekIsV0FBSyxXQUFXLElBQUk7QUFBQSxRQUNuQixNQUFNO0FBQ0wscUJBQVcsS0FBSyxJQUFJO0FBQUEsUUFDckI7QUFBQSxRQUNBLEtBQUssVUFBVSxXQUFXLEdBQUk7QUFBQSxNQUMvQjtBQUFBLElBQ0Q7QUFBQSxFQUNEO0FBRUEsV0FBUyxhQUFhO0FBQ3JCLGdCQUFZO0FBQ1osU0FBSyxVQUFVLElBQUksU0FBUztBQUU1QixlQUFXLE1BQU07QUFDaEIsV0FBSyxPQUFPO0FBQUEsSUFDYixHQUFHLEdBQUc7QUFBQSxFQUNQO0FBS0EsV0FBUyxjQUFjO0FBQ3RCLFFBQUksT0FBTyxXQUFXLEdBQUc7QUFDeEIsbUJBQWEsS0FBSyxXQUFXLENBQUM7QUFDOUIsV0FBSyxXQUFXLElBQUk7QUFBQSxJQUNyQjtBQUFBLEVBQ0Q7QUFRQSxXQUFTLDJCQUEyQjtBQUNuQyxVQUFNQyxXQUFVLENBQUM7QUFFakIsVUFBTSxVQUFVLEtBQUssYUFBYSxtQkFBbUIsU0FBUztBQUM5RCxRQUFJLFNBQVMsT0FBTyxHQUFHO0FBQ3RCLFVBQUk7QUFDSCxRQUFBQSxTQUFRLFNBQVMsSUFBSSxTQUFTLFNBQVMsRUFBRTtBQUFBLE1BQzFDLFNBQVMsR0FBRztBQUNYLGFBQUs7QUFBQSxVQUNKO0FBQUEsVUFDQSxLQUFLLGFBQWEseUJBQXlCLE9BQU8sRUFBRSxTQUFTLENBQUM7QUFBQSxRQUMvRDtBQUFBLE1BQ0Q7QUFBQSxJQUNEO0FBRUEsV0FBT0E7QUFBQSxFQUNSO0FBT0EsV0FBU0MseUJBQXdCO0FBQ2hDLFFBQUksQ0FBQyxLQUFLLFlBQVk7QUFDckIsWUFBTSxJQUFJLE1BQU0sMkJBQTJCO0FBQUEsSUFDNUM7QUFFQSxTQUFLQyxxQkFBb0IsSUFBSSxLQUFLLFdBQVc7QUFBQSxNQUM1QyxNQUFNLGlCQUFpQjtBQUFBLElBQ3hCO0FBQ0EsU0FBSyxtQkFBbUIsSUFBSSxLQUFLLFdBQVc7QUFBQSxNQUMzQyxNQUFNLGlCQUFpQjtBQUFBLElBQ3hCO0FBQUEsRUFDRDtBQUtBLFdBQVMsbUJBQW1CO0FBSTNCLFNBQUssNEJBQTRCLElBQUksQ0FBQyxVQUFVO0FBQy9DLFlBQU0sVUFBVTtBQUFBLFFBQ2Y7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0Q7QUFFQSxVQUFJLG1CQUFtQixhQUFhO0FBQ25DLGFBQUs7QUFBQSxVQUNKO0FBQUEsVUFDQSxLQUFLLDRCQUE0QjtBQUFBLFFBQ2xDO0FBQ0EsYUFBSyxpQkFBaUIsY0FBYyxLQUFLLDRCQUE0QixDQUFDO0FBQ3RFLG9CQUFZLEtBQUssSUFBSTtBQUFBLE1BQ3RCO0FBQUEsSUFDRDtBQUtBLFNBQUssNEJBQTRCLElBQUksQ0FBQyxVQUFVO0FBQy9DLFlBQU0sVUFBVTtBQUFBLFFBQ2Y7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0Q7QUFDQSxVQUFJLG1CQUFtQixhQUFhO0FBQ25DLGFBQUs7QUFBQSxVQUNKO0FBQUEsVUFDQSxLQUFLLDRCQUE0QjtBQUFBLFFBQ2xDO0FBQ0EsYUFBSyxpQkFBaUIsY0FBYyxLQUFLLDRCQUE0QixDQUFDO0FBQ3RFLHFCQUFhLEtBQUssSUFBSTtBQUFBLE1BQ3ZCO0FBQUEsSUFDRDtBQUtBLFNBQUssd0JBQXdCLElBQUksQ0FBQyxVQUFVO0FBQzNDLFlBQU0sVUFBVSwyQkFBMkIsT0FBTyxnQkFBZ0IsT0FBTztBQUV6RSxVQUFJLG1CQUFtQixhQUFhO0FBQ25DLG1CQUFXLEtBQUssSUFBSTtBQUFBLE1BQ3JCO0FBQUEsSUFDRDtBQUVBLFFBQUksS0FBSyxVQUFVLGdCQUFnQixNQUFNLE1BQU07QUFDOUMsV0FBSyxtQkFBbUIsRUFBRTtBQUFBLFFBQ3pCO0FBQUEsUUFDQSxLQUFLLHdCQUF3QjtBQUFBLE1BQzlCO0FBQ0EsV0FBSyxtQkFBbUIsRUFBRTtBQUFBLFFBQ3pCO0FBQUEsUUFDQSxLQUFLLHdCQUF3QjtBQUFBLE1BQzlCO0FBQUEsSUFDRDtBQUVBLFdBQU87QUFBQSxFQUNSO0FBTUEsV0FBU0MsZUFBYztBQUV0QixXQUFPO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQWNSO0FBeFhBLE1BbUNNRCx1QkFNQSxxQkFNQSxhQU1BLDhCQU1BLDhCQU1BLDBCQWlDQTtBQWxHTixNQUFBRSxnQkFBQTtBQUFBO0FBY0EsTUFBQUM7QUFLQTtBQU1BO0FBQ0E7QUFDQTtBQVFBLE1BQU1ILHdCQUF1QixPQUFPLGdCQUFnQjtBQU1wRCxNQUFNLHNCQUFzQixPQUFPLGVBQWU7QUFNbEQsTUFBTSxjQUFjLE9BQU8sT0FBTztBQU1sQyxNQUFNLCtCQUErQixPQUFPLHdCQUF3QjtBQU1wRSxNQUFNLCtCQUErQixPQUFPLHdCQUF3QjtBQU1wRSxNQUFNLDJCQUEyQixPQUFPLG9CQUFvQjtBQWlDNUQsTUFBTSxVQUFOLGNBQXNCLGNBQWM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUE4Qm5DLElBQUksV0FBVztBQUNkLGlCQUFPLE9BQU87QUFBQSxZQUNiLENBQUM7QUFBQSxZQUNELE1BQU07QUFBQSxZQUNOO0FBQUEsY0FDQyxTQUFTO0FBQUEsY0FDVCxVQUFVO0FBQUEsZ0JBQ1QsT0FBTztBQUFBLGdCQUNQLFdBQVc7QUFBQSxjQUNaO0FBQUEsY0FDQSxTQUFTO0FBQUEsY0FDVCxXQUFXO0FBQUEsZ0JBQ1YsTUFBTUMsYUFBWTtBQUFBLGNBQ25CO0FBQUEsWUFDRDtBQUFBLFlBQ0EseUJBQXlCLEtBQUssSUFBSTtBQUFBLFVBQ25DO0FBQUEsUUFDRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxDQUFDLG9CQUFvQixJQUFJO0FBQ3hCLGdCQUFNLG9CQUFvQixFQUFFO0FBQzVCLFVBQUFGLHVCQUFzQixLQUFLLElBQUk7QUFDL0IsMkJBQWlCLEtBQUssSUFBSTtBQUMxQixpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsT0FBTyxTQUFTO0FBQ2YsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLE9BQU8sbUJBQW1CO0FBQ3pCLGlCQUFPLENBQUMsaUJBQWlCO0FBQUEsUUFDMUI7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLENBQUMsZ0JBQWdCLElBQUk7QUFDcEIsZ0JBQU0sZ0JBQWdCLEVBQUU7QUFBQSxRQUN6QjtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0Esb0JBQW9CO0FBQ25CLGdCQUFNLGtCQUFrQjtBQUV4QixjQUFJLEtBQUssVUFBVSxvQkFBb0IsTUFBTSxNQUFNO0FBQ2xELHlCQUFhLEtBQUssSUFBSTtBQUN0QixpQkFBSyxpQkFBaUIsY0FBYyxLQUFLLDRCQUE0QixDQUFDO0FBQUEsVUFDdkU7QUFBQSxRQUNEO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSx1QkFBdUI7QUFDdEIsZ0JBQU0scUJBQXFCO0FBQzNCLHNCQUFZLEtBQUssSUFBSTtBQUVyQixjQUFJLEtBQUssVUFBVSxvQkFBb0IsTUFBTSxNQUFNO0FBQ2xELGlCQUFLO0FBQUEsY0FDSjtBQUFBLGNBQ0EsS0FBSyw0QkFBNEI7QUFBQSxZQUNsQztBQUNBLGlCQUFLO0FBQUEsY0FDSjtBQUFBLGNBQ0EsS0FBSyw0QkFBNEI7QUFBQSxZQUNsQztBQUFBLFVBQ0Q7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQXVLQSw0QkFBc0IsT0FBTztBQUFBO0FBQUE7OztBQzFYN0IsTUFxQk07QUFyQk47QUFBQTtBQVlBO0FBQ0EsTUFBQUs7QUFRQSxNQUFNLG1CQUFtQixJQUFJLGNBQWM7QUFFM0MsVUFBSTtBQUNILHlCQUFpQjtBQUFBLFVBQ2hCO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFJQTtBQUFBLFFBQ0Q7QUFBQSxNQUNELFNBQVMsR0FBRztBQUNYO0FBQUEsVUFDQyxTQUFTLFlBQVksRUFBRSxjQUFjLE1BQU07QUFBQSxVQUMzQztBQUFBLFVBQ0EsSUFBSTtBQUFBLFFBQ0w7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDckNBO0FBQUE7QUFBQTtBQUFBO0FBd01BLFdBQVNDLDRCQUEyQjtBQUNuQyxVQUFNQyxXQUFVLENBQUM7QUFFakIsV0FBT0E7QUFBQSxFQUNSO0FBT0EsV0FBU0MseUJBQXdCO0FBQ2hDLFFBQUksQ0FBQyxLQUFLLFlBQVk7QUFDckIsWUFBTSxJQUFJLE1BQU0sMkJBQTJCO0FBQUEsSUFDNUM7QUFFQSxTQUFLQyxxQkFBb0IsSUFBSSxLQUFLLFdBQVc7QUFBQSxNQUM1QyxNQUFNLGlCQUFpQjtBQUFBLElBQ3hCO0FBQ0EsU0FBSyxzQkFBc0IsSUFBSSxLQUFLLFdBQVc7QUFBQSxNQUM5QyxNQUFNLGlCQUFpQjtBQUFBLElBQ3hCO0FBQUEsRUFDRDtBQU1BLFdBQVNDLGVBQWM7QUFFdEIsV0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT1I7QUE3T0EsTUFnQ01ELHVCQU1BLHdCQU1BLGFBMENBO0FBdEZOLE1BQUFFLGVBQUE7QUFBQTtBQWNBLE1BQUFDO0FBQ0E7QUFLQTtBQUNBLE1BQUFDO0FBQ0E7QUFDQTtBQUNBO0FBUUEsTUFBTUosd0JBQXVCLE9BQU8sZ0JBQWdCO0FBTXBELE1BQU0seUJBQXlCLE9BQU8sa0JBQWtCO0FBTXhELE1BQU0sY0FBYyxPQUFPLE9BQU87QUEwQ2xDLE1BQU0sU0FBTixjQUFxQixjQUFjO0FBQUEsUUFDbEMsY0FBYztBQUNiLGdCQUFNO0FBQ04sZUFBSyxXQUFXLElBQUksSUFBSSxNQUFNO0FBQUEsUUFDL0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFzQkEsSUFBSSxXQUFXO0FBQ2QsaUJBQU8sT0FBTztBQUFBLFlBQ2IsQ0FBQztBQUFBLFlBQ0QsTUFBTTtBQUFBLFlBQ047QUFBQSxjQUNDLGFBQWE7QUFBQSxjQUNiLFdBQVc7QUFBQSxnQkFDVixNQUFNQyxhQUFZO0FBQUEsY0FDbkI7QUFBQSxZQUNEO0FBQUEsWUFDQUosMEJBQXlCLEtBQUssSUFBSTtBQUFBLFVBQ25DO0FBQUEsUUFDRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxDQUFDLG9CQUFvQixJQUFJO0FBQ3hCLGdCQUFNLG9CQUFvQixFQUFFO0FBQzVCLFVBQUFFLHVCQUFzQixLQUFLLElBQUk7QUFFL0IsY0FBSSxLQUFLLHNCQUFzQixHQUFHO0FBQ2pDLG1CQUFPLEtBQUssV0FBVyxFQUFFLFFBQVEsTUFBTSxPQUFPO0FBQzdDLG1CQUFLLEtBQUssS0FBSyxXQUFXLEVBQUUsS0FBSyxDQUFDO0FBQUEsWUFDbkM7QUFBQSxVQUNEO0FBRUEsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLE9BQU8sU0FBUztBQUNmLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxPQUFPLG1CQUFtQjtBQUN6QixpQkFBTyxDQUFDLGdCQUFnQjtBQUFBLFFBQ3pCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsS0FBSyxTQUFTO0FBQ2IsY0FBSSxpQkFBaUI7QUFDckIsY0FBSSxFQUFFLG1CQUFtQixVQUFVO0FBQ2xDLGtCQUFNLE9BQU8sZUFBZSxPQUFPO0FBQ25DLDZCQUFpQixTQUFTLGNBQWMsd0JBQXdCO0FBQ2hFLDJCQUFlLFVBQVUsV0FBVyxJQUFJO0FBQUEsVUFDekM7QUFFQSwyQkFBaUIsZ0JBQWdCLE9BQU87QUFDeEMseUJBQWUsYUFBYSxnQkFBZ0IsU0FBUztBQUdyRCxjQUFJLENBQUMsS0FBSyxzQkFBc0IsR0FBRztBQUNsQyxpQkFBSyxXQUFXLEVBQUUsSUFBSSxjQUFjO0FBQ3BDLG1CQUFPO0FBQUEsVUFDUjtBQUVBLDBCQUFnQixNQUFNLDBCQUEwQjtBQUFBLFlBQy9DO0FBQUEsVUFDRCxDQUFDO0FBRUQsZUFBSyxzQkFBc0IsRUFBRSxZQUFZLGNBQWM7QUFDdkQsaUJBQU87QUFBQSxRQUNSO0FBQUEsTUFDRDtBQW1EQSw0QkFBc0IsTUFBTTtBQUFBO0FBQUE7OztBQy9PNUIsTUFxQk07QUFyQk47QUFBQTtBQVlBO0FBQ0EsTUFBQU07QUFRQSxNQUFNLHVCQUF1QixJQUFJLGNBQWM7QUFFL0MsVUFBSTtBQUNILDZCQUFxQjtBQUFBLFVBQ3BCO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFJQTtBQUFBLFFBQ0Q7QUFBQSxNQUNELFNBQVMsR0FBRztBQUNYO0FBQUEsVUFDQyxTQUFTLFlBQVksRUFBRSxjQUFjLE1BQU07QUFBQSxVQUMzQztBQUFBLFVBQ0EsSUFBSTtBQUFBLFFBQ0w7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDckNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQTRNQSxXQUFTLHVCQUF1QjtBQUMvQixVQUFNLFlBQVksS0FBSyxVQUFVLFdBQVc7QUFDNUMsVUFBTSxZQUFZLEtBQUssY0FBYyxFQUFFLFdBQVcsRUFBRTtBQUVwRCxRQUFJLGNBQWMsZUFBZTtBQUNoQyxXQUFLLHVCQUF1QixFQUFFLE1BQU0sUUFBUTtBQUM1QyxXQUFLLHFCQUFxQixFQUFFLE1BQU0sUUFBUSxlQUFlLFNBQVM7QUFDbEUsV0FBSyxvQkFBb0IsRUFBRSxNQUFNLFNBQVM7QUFDMUMsV0FBSyx3QkFBd0IsRUFBRSxVQUFVLElBQUksVUFBVTtBQUN2RCxXQUFLLHdCQUF3QixFQUFFLFVBQVUsT0FBTyxZQUFZO0FBQUEsSUFDN0QsT0FBTztBQUNOLFdBQUssdUJBQXVCLEVBQUUsTUFBTSxTQUFTO0FBQzdDLFdBQUsscUJBQXFCLEVBQUUsTUFBTSxTQUNqQyxlQUFlLFNBQVM7QUFDekIsV0FBSyxvQkFBb0IsRUFBRSxNQUFNLFNBQVM7QUFDMUMsV0FBSyx3QkFBd0IsRUFBRSxVQUFVLElBQUksWUFBWTtBQUN6RCxXQUFLLHdCQUF3QixFQUFFLFVBQVUsT0FBTyxVQUFVO0FBQUEsSUFDM0Q7QUFFQSxvQkFBZ0IsTUFBTSw2QkFBNkI7QUFBQSxNQUNsRCxZQUFZO0FBQUEsTUFDWjtBQUFBLElBQ0QsQ0FBQztBQUFBLEVBQ0Y7QUFPQSxXQUFTQyx5QkFBd0I7QUFDaEMsUUFBSSxDQUFDLEtBQUssWUFBWTtBQUNyQixZQUFNLElBQUksTUFBTSwyQkFBMkI7QUFBQSxJQUM1QztBQUVBLFNBQUssd0JBQXdCLElBQUksS0FBSyxXQUFXO0FBQUEsTUFDaEQ7QUFBQSxJQUNEO0FBQ0EsU0FBSyxvQkFBb0IsSUFBSSxLQUFLLFdBQVc7QUFBQSxNQUM1QztBQUFBLElBQ0Q7QUFDQSxTQUFLLG1CQUFtQixJQUFJLEtBQUssV0FBVztBQUFBLE1BQzNDO0FBQUEsSUFDRDtBQUVBLFNBQUssdUJBQXVCLElBQUksS0FBSyxXQUFXO0FBQUEsTUFDL0M7QUFBQSxJQUNEO0FBQ0EsU0FBSyxxQkFBcUIsSUFBSSxLQUFLLFdBQVc7QUFBQSxNQUM3QztBQUFBLElBQ0Q7QUFBQSxFQUNEO0FBS0EsV0FBU0Msb0JBQW1CO0FBQzNCLFVBQU1DLFFBQU87QUFFYixRQUFJLGdCQUFnQixLQUFLLGNBQWMsRUFBRSxXQUFXLEVBQUU7QUFDdEQsUUFBSSxXQUFXLEtBQUssVUFBVSxXQUFXO0FBRXpDLFNBQUssY0FBYyxFQUFFLFdBQVcsRUFBRSxhQUFhO0FBRy9DLFVBQU0sYUFBYSxDQUFDLFlBQVksWUFBWTtBQUM1QyxlQUFXLGFBQWEsWUFBWTtBQUNuQyxXQUFLLG9CQUFvQixFQUFFLGlCQUFpQixXQUFXLE1BQU07QUFDNUQsUUFBQUEsTUFBSyxjQUFjLEVBQUUsV0FBVyxFQUFFLGFBQWE7QUFDL0Msd0JBQWdCO0FBRWhCLFlBQUk7QUFDSixZQUFJQSxNQUFLLFVBQVUsV0FBVyxNQUFNLGVBQWU7QUFDbEQsZ0JBQU0sV0FBV0EsTUFBSyx1QkFBdUI7QUFDN0MsNkJBQW1CLFNBQVMsTUFBTTtBQUFBLFFBQ25DLE9BQU87QUFDTixnQkFBTSxXQUFXQSxNQUFLLHVCQUF1QjtBQUM3Qyw2QkFBbUIsU0FBUyxNQUFNO0FBQUEsUUFDbkM7QUFFQSxZQUFJLHFCQUFxQkEsTUFBSyxVQUFVLFdBQVcsRUFBRSxTQUFTO0FBQzdELFVBQUFBLE1BQUssYUFBYUEsTUFBSyxVQUFVLFdBQVcsRUFBRSxHQUFHO0FBQUEsUUFDbEQsV0FBVyxxQkFBcUJBLE1BQUssVUFBVSxXQUFXLEVBQUUsS0FBSztBQUNoRSxVQUFBQSxNQUFLLGFBQWFBLE1BQUssVUFBVSxXQUFXLEVBQUUsR0FBRztBQUFBLFFBQ2xELFdBQVcscUJBQXFCQSxNQUFLLFVBQVUsV0FBVyxFQUFFLEtBQUs7QUFDaEUsVUFBQUEsTUFBSyxhQUFhQSxNQUFLLFVBQVUsV0FBVyxFQUFFLE9BQU87QUFBQSxRQUN0RCxPQUFPO0FBQ04sVUFBQUEsTUFBSyxhQUFhQSxNQUFLLFVBQVUsV0FBVyxFQUFFLE9BQU87QUFBQSxRQUN0RDtBQUFBLE1BQ0QsQ0FBQztBQUFBLElBQ0Y7QUFFQSxTQUFLLG9CQUFvQixFQUFFLGlCQUFpQixhQUFhLE1BQU07QUFDOUQsTUFBQUEsTUFBSyxjQUFjLEVBQUUsV0FBVyxFQUFFLGFBQWE7QUFFL0MsWUFBTSxnQkFBZ0IsQ0FBQyxNQUFNO0FBQzVCLFVBQUUsZUFBZTtBQUlqQixZQUFJLGVBQWU7QUFBQSxVQUNsQkEsTUFBSyxvQkFBb0I7QUFBQSxRQUMxQixFQUFFLGlCQUFpQix5QkFBeUI7QUFDNUMsWUFDQyxpQkFBaUIsTUFDakIsaUJBQWlCLFVBQ2pCLGlCQUFpQixNQUNoQjtBQUNELHlCQUFlO0FBQUEsUUFDaEI7QUFFQSxZQUFJLENBQUNBLE1BQUssY0FBYyxFQUFFLFdBQVcsRUFBRSxZQUFZO0FBQ2xEO0FBQUEsUUFDRDtBQUVBLFlBQUlBLE1BQUssVUFBVSxXQUFXLE1BQU0saUJBQWlCO0FBQ3BELGdCQUFNLHFCQUFxQkEsTUFBSyx3QkFBd0IsRUFBRTtBQUMxRCxnQkFBTSxXQUFXQSxNQUFLLHVCQUF1QjtBQUM3QyxnQkFBTSxjQUFjQSxNQUFLLHFCQUFxQjtBQUM5QyxjQUFJLGVBQWUsRUFBRSxVQUFVO0FBRS9CLGdCQUFNQyxPQUFNLEtBQUssVUFBVSxXQUFXLEVBQUU7QUFDeEMsZ0JBQU1DLE9BQU0sS0FBSyxVQUFVLFdBQVcsRUFBRTtBQUV4QyxnQkFBTSxlQUNKLGVBQWUsS0FBSyx3QkFBd0IsRUFBRSxlQUFnQjtBQUNoRSxjQUFJLFNBQVNELElBQUcsSUFBSSxjQUFjO0FBQ2pDLDJCQUFlQTtBQUFBLFVBQ2hCLFdBQVcsU0FBU0MsSUFBRyxJQUFJLGNBQWM7QUFDeEMsMkJBQWVBO0FBQUEsVUFDaEIsT0FBTztBQUNOLDJCQUFlLGVBQWU7QUFBQSxVQUMvQjtBQUdBLGdCQUFNLGlCQUNKLFNBQVMsWUFBWSxJQUFJLE1BQzFCLEtBQUssd0JBQXdCLEVBQUU7QUFFaEMsbUJBQVMsTUFBTSxTQUFTLEdBQUcsY0FBYztBQUN6QyxzQkFBWSxNQUFNLFNBQVMsZUFBZSxjQUFjLFFBQVEsWUFBWTtBQUFBLFFBQzdFLE9BQU87QUFDTixnQkFBTSxzQkFBc0JGLE1BQUssd0JBQXdCLEVBQUU7QUFDM0QsZ0JBQU0sWUFBWUEsTUFBSyx1QkFBdUI7QUFDOUMsZ0JBQU0sYUFBYUEsTUFBSyxxQkFBcUI7QUFDN0MsY0FBSSxlQUFlLEVBQUUsVUFBVTtBQUUvQixnQkFBTUMsT0FBTSxLQUFLLFVBQVUsV0FBVyxFQUFFO0FBQ3hDLGdCQUFNQyxPQUFNLEtBQUssVUFBVSxXQUFXLEVBQUU7QUFFeEMsZ0JBQU0sZ0JBQ0osZUFBZSxLQUFLLHdCQUF3QixFQUFFLGNBQWU7QUFFL0QsY0FBSSxTQUFTRCxJQUFHLElBQUksZUFBZTtBQUNsQywyQkFBZUE7QUFBQSxVQUNoQixXQUFXLFNBQVNDLElBQUcsSUFBSSxlQUFlO0FBQ3pDLDJCQUFlQTtBQUFBLFVBQ2hCLE9BQU87QUFDTiwyQkFBZSxnQkFBZ0I7QUFBQSxVQUNoQztBQUVBLG9CQUFVLE1BQU0sUUFBUSxHQUFHLFlBQVk7QUFDdkMscUJBQVcsTUFBTSxRQUFRLGVBQWUsWUFBWSxNQUFNLFlBQVk7QUFBQSxRQUN2RTtBQUFBLE1BQ0Q7QUFFQSxZQUFNLG1CQUFtQixDQUFDLE1BQU07QUFDL0IsUUFBQUYsTUFBSyxjQUFjLEVBQUUsV0FBVyxFQUFFLGFBQWE7QUFDL0MsaUJBQVMsb0JBQW9CLGFBQWEsYUFBYTtBQUN2RCxpQkFBUyxvQkFBb0IsV0FBVyxhQUFhO0FBQUEsTUFDdEQ7QUFFQSxlQUFTLGlCQUFpQixhQUFhLGFBQWE7QUFDcEQsZUFBUyxpQkFBaUIsV0FBVyxnQkFBZ0I7QUFBQSxJQUN0RCxDQUFDO0FBRUQsU0FBSyxjQUFjLEVBQUU7QUFBQSxNQUNwQixJQUFJLFNBQVMsTUFBTTtBQUNsQixZQUFJRyxTQUFRO0FBRVosWUFDQyxrQkFBa0IsS0FBSyxjQUFjLEVBQUUsV0FBVyxFQUFFLGtCQUNuRDtBQUNELDBCQUFnQixLQUFLLGNBQWMsRUFBRSxXQUFXLEVBQUU7QUFDbEQsVUFBQUEsU0FBUTtBQUFBLFFBQ1Q7QUFFQSxZQUFJLGFBQWEsS0FBSyxVQUFVLFdBQVcsR0FBRztBQUM3QyxxQkFBVyxLQUFLLFVBQVUsV0FBVztBQUNyQyxVQUFBQSxTQUFRO0FBQUEsUUFDVDtBQUVBLFlBQUlBLFFBQU87QUFDViwrQkFBcUIsS0FBSyxJQUFJO0FBQUEsUUFDL0I7QUFBQSxNQUNELENBQUM7QUFBQSxJQUNGO0FBRUEsV0FBTztBQUFBLEVBQ1I7QUFNQSxXQUFTQyxlQUFjO0FBRXRCLFdBQU87QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFZUjtBQXZhQSxNQWdDTSwwQkFNQSxzQkFLQSx5QkFLQSx1QkFLQSxxQkFNQSxlQUtBLGlCQWVBO0FBL0VOLE1BQUFDLG9CQUFBO0FBQUE7QUFjQTtBQUtBLE1BQUFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVFBLE1BQU0sMkJBQTJCLE9BQU8sb0JBQW9CO0FBTTVELE1BQU0sdUJBQXVCLE9BQU8sZ0JBQWdCO0FBS3BELE1BQU0sMEJBQTBCLE9BQU8sbUJBQW1CO0FBSzFELE1BQU0sd0JBQXdCLE9BQU8saUJBQWlCO0FBS3RELE1BQU0sc0JBQXNCLE9BQU8sZUFBZTtBQU1sRCxNQUFNLGdCQUFnQjtBQUt0QixNQUFNLGtCQUFrQjtBQWV4QixNQUFNLGFBQU4sY0FBeUIsY0FBYztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLdEMsWUFBWSxjQUFjLElBQUk7QUFDN0IsaUJBQU8sT0FBTyxJQUFJLGdEQUFnRDtBQUFBLFFBQ25FO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBZ0JBLElBQUksV0FBVztBQUNkLGlCQUFPLE9BQU8sT0FBTyxDQUFDLEdBQUcsTUFBTSxVQUFVO0FBQUEsWUFDeEMsV0FBVztBQUFBLGNBQ1YsTUFBTUYsYUFBWTtBQUFBLFlBQ25CO0FBQUEsWUFDQSxXQUFXO0FBQUEsWUFDWCxXQUFXO0FBQUEsY0FDVixTQUFTO0FBQUEsY0FDVCxLQUFLO0FBQUEsY0FDTCxLQUFLO0FBQUEsWUFDTjtBQUFBLFVBQ0QsQ0FBQztBQUFBLFFBQ0Y7QUFBQSxRQUVBLGtCQUFrQjtBQUNqQixlQUFLLGFBQWEsTUFBTTtBQUN4QixpQkFBTztBQUFBLFFBQ1I7QUFBQSxRQUVBLGdCQUFnQjtBQUNmLGVBQUssYUFBYSxJQUFJO0FBQ3RCLGlCQUFPO0FBQUEsUUFDUjtBQUFBLFFBRUEsb0JBQW9CO0FBQ25CLGlCQUFPLEtBQUssY0FBYyxFQUFFLFdBQVcsRUFBRSxxQkFBcUI7QUFBQSxRQUMvRDtBQUFBLFFBRUEsa0JBQWtCO0FBQ2pCLGlCQUFPLEtBQUssY0FBYyxFQUFFLFdBQVcsRUFBRSxxQkFBcUI7QUFBQSxRQUMvRDtBQUFBLFFBRUEsa0JBQWtCO0FBQ2pCLGlCQUNDLEtBQUssY0FBYyxFQUFFLFdBQVcsRUFBRSxxQkFDbEMsS0FBSyxVQUFVLFdBQVcsRUFBRTtBQUFBLFFBRTlCO0FBQUEsUUFFQSxjQUFjO0FBQ2IsZUFBSyxhQUFhLEtBQUssVUFBVSxXQUFXLEVBQUUsT0FBTztBQUNyRCxpQkFBTztBQUFBLFFBQ1I7QUFBQSxRQUVBLFdBQVcsTUFBTTtBQUNoQixlQUFLLFVBQVUsV0FBVyxJQUFJO0FBQzlCLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxDQUFDLG9CQUFvQixJQUFJO0FBQ3hCLGdCQUFNLG9CQUFvQixFQUFFO0FBRTVCLFVBQUFOLHVCQUFzQixLQUFLLElBQUk7QUFDL0IsVUFBQUMsa0JBQWlCLEtBQUssSUFBSTtBQUUxQixlQUFLLGFBQWEsS0FBSyxVQUFVLFdBQVcsRUFBRSxPQUFPO0FBQUEsUUFDdEQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVFBLGFBQWEsV0FBVztBQUV2QixjQUFJLFVBQVUsU0FBUyxHQUFHLEdBQUc7QUFDNUIsZ0JBQUksU0FBUyxTQUFTLElBQUksS0FBSztBQUM5QixvQkFBTSxJQUFJLE1BQU0sa0NBQWtDO0FBQUEsWUFDbkQsV0FBVyxTQUFTLFNBQVMsSUFBSSxHQUFHO0FBQ25DLG9CQUFNLElBQUksTUFBTSxtQ0FBbUM7QUFBQSxZQUNwRDtBQUFBLFVBQ0Q7QUFFQSxlQUFLLGNBQWMsRUFBRSxXQUFXLEVBQUUsbUJBQW1CO0FBQ3JELGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxPQUFPLFNBQVM7QUFDZixpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLE9BQU8sbUJBQW1CO0FBQ3pCLGlCQUFPLENBQUMsb0JBQW9CO0FBQUEsUUFDN0I7QUFBQSxNQUNEO0FBbU9BLDRCQUFzQixVQUFVO0FBQUE7QUFBQTs7O0FDemFoQyxNQXFCTTtBQXJCTjtBQUFBO0FBWUE7QUFDQSxNQUFBUTtBQVFBLE1BQU0sa0JBQWtCLElBQUksY0FBYztBQUUxQyxVQUFJO0FBQ0gsd0JBQWdCO0FBQUEsVUFDZjtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBSUE7QUFBQSxRQUNEO0FBQUEsTUFDRCxTQUFTLEdBQUc7QUFDWDtBQUFBLFVBQ0MsU0FBUyxZQUFZLEVBQUUsY0FBYyxNQUFNO0FBQUEsVUFDM0M7QUFBQSxVQUNBLElBQUk7QUFBQSxRQUNMO0FBQUEsTUFDRDtBQUFBO0FBQUE7OztBQ3JDQTtBQUFBO0FBQUE7QUFBQTtBQTRJQSxXQUFTLGFBQWE7QUFDckIsU0FBSyxNQUFNLFlBQVk7QUFFdkIsVUFBTSxTQUFTLHVCQUF1QixLQUFLLE1BQU0sSUFBSTtBQUNyRCxRQUFJLFNBQVMsR0FBRztBQUNmO0FBQUEsSUFDRDtBQUVBLFNBQUssTUFBTSxTQUFTLEdBQUcsTUFBTTtBQUFBLEVBQzlCO0FBT0EsV0FBUyx1QkFBdUIsU0FBUztBQUN4QyxRQUFJLG9CQUFvQjtBQUN4QixRQUFJLHFCQUFxQjtBQUN6QixRQUFJLG9CQUFvQjtBQUN4QixRQUFJLHFCQUFxQjtBQUN6QixRQUFJLHVCQUF1QjtBQUMzQixRQUFJLGlCQUFpQjtBQUdyQixVQUFNLGtCQUFrQixRQUFRLHNCQUFzQixFQUFFO0FBR3hELFdBQU8sa0JBQWtCLG1CQUFtQixTQUFTLE1BQU07QUFDMUQsWUFBTSxRQUFRLE9BQU8saUJBQWlCLGNBQWM7QUFHcEQsWUFBTSxZQUFZLE1BQU07QUFHeEIsWUFBTSxvQkFBb0IsV0FBVyxNQUFNLGlCQUFpQjtBQUM1RCxZQUFNLGdCQUFnQixXQUFXLE1BQU0sYUFBYTtBQUNwRCxZQUFNLGVBQWUsV0FBVyxNQUFNLFlBQVk7QUFHbEQsWUFBTSxnQkFBZ0IsV0FBVyxNQUFNLFlBQVk7QUFFbkQsWUFBTSxvQkFBb0IsV0FBVyxNQUFNLFVBQVUsTUFBTSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUM7QUFHdkUsMkJBQXFCLE1BQU0saUJBQWlCLElBQUksSUFBSTtBQUNwRCw0QkFDQyxNQUFNLGFBQWEsS0FBSyxjQUFjLGVBQWUsSUFBSTtBQUMxRCwyQkFBcUIsTUFBTSxZQUFZLElBQUksSUFBSTtBQUMvQyw0QkFBc0IsTUFBTSxhQUFhLElBQUksSUFBSTtBQUNqRCw4QkFBd0IsTUFBTSxpQkFBaUIsSUFBSSxJQUFJO0FBRXZELHVCQUFpQixlQUFlLGNBQWMsZUFBZTtBQUFBLElBQzlEO0FBR0EsVUFBTSxnQkFDTCxPQUFPLGNBQ1Asa0JBQ0Esb0JBQ0EscUJBQ0Esb0JBQ0EscUJBQ0E7QUFDRCxXQUFPLGdCQUFnQixLQUFLLFVBQVUsa0JBQWtCO0FBQUEsRUFDekQ7QUFLQSxXQUFTQyx3QkFBdUI7QUFFL0IsU0FBS0MscUJBQW9CLElBQUksSUFBSSxlQUFlLE1BQU07QUFDckQsVUFBSSxLQUFLQyxvQkFBbUIsYUFBYSxnQkFBZ0I7QUFDeEQsWUFBSTtBQUNILGVBQUtBLG9CQUFtQixFQUFFLE1BQU07QUFDaEM7QUFBQSxRQUNELFNBQVMsR0FBRztBQUNYLGlCQUFPLEtBQUtBLG9CQUFtQjtBQUFBLFFBQ2hDO0FBQUEsTUFDRDtBQUVBLFdBQUtBLG9CQUFtQixJQUFJLElBQUksZUFBZSxLQUFLLE1BQU07QUFDekQsbUJBQVcsS0FBSyxJQUFJO0FBQUEsTUFDckIsQ0FBQztBQUFBLElBQ0YsQ0FBQztBQUVELFNBQUtELHFCQUFvQixFQUFFLFFBQVEsS0FBSyxjQUFjLElBQUk7QUFDMUQsU0FBS0EscUJBQW9CLEVBQUUsUUFBUSxTQUFTLGdCQUFnQjtBQUFBLEVBQzdEO0FBRUEsV0FBUywyQkFBMkI7QUFDbkMsUUFBSSxLQUFLQSxxQkFBb0IsYUFBYSxnQkFBZ0I7QUFDekQsV0FBS0EscUJBQW9CLEVBQUUsV0FBVztBQUFBLElBQ3ZDO0FBQUEsRUFDRDtBQU9BLFdBQVNFLHlCQUF3QjtBQUNoQyxRQUFJLENBQUMsS0FBSyxZQUFZO0FBQ3JCLFlBQU0sSUFBSSxNQUFNLDJCQUEyQjtBQUFBLElBQzVDO0FBRUEsU0FBSyxrQkFBa0IsSUFBSSxLQUFLLFdBQVc7QUFBQSxNQUMxQztBQUFBLElBQ0Q7QUFBQSxFQUNEO0FBS0EsV0FBU0Msb0JBQW1CO0FBQzNCLFdBQU87QUFBQSxFQUNSO0FBTUEsV0FBU0MsZUFBYztBQUV0QixXQUFPO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJUjtBQTdRQSxNQThCTSxvQkFPQUosdUJBTUFDLHNCQWFBO0FBeEROLE1BQUFJLGNBQUE7QUFBQTtBQWNBO0FBS0E7QUFFQTtBQUNBO0FBUUEsTUFBTSxxQkFBcUIsT0FBTyxjQUFjO0FBT2hELE1BQU1MLHdCQUF1QixPQUFPLGdCQUFnQjtBQU1wRCxNQUFNQyx1QkFBc0IsT0FBTyxlQUFlO0FBYWxELE1BQU0sUUFBTixjQUFvQixjQUFjO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtqQyxZQUFZLGNBQWMsSUFBSTtBQUM3QixpQkFBTyxPQUFPLElBQUksMENBQTBDO0FBQUEsUUFDN0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBWUEsSUFBSSxXQUFXO0FBQ2QsaUJBQU8sT0FBTyxPQUFPLENBQUMsR0FBRyxNQUFNLFVBQVU7QUFBQSxZQUN4QyxXQUFXO0FBQUEsY0FDVixNQUFNRyxhQUFZO0FBQUEsWUFDbkI7QUFBQSxZQUNBLGtCQUFrQjtBQUFBLFVBQ25CLENBQUM7QUFBQSxRQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLENBQUMsb0JBQW9CLElBQUk7QUFDeEIsZ0JBQU0sb0JBQW9CLEVBQUU7QUFFNUIsVUFBQUYsdUJBQXNCLEtBQUssSUFBSTtBQUMvQixVQUFBQyxrQkFBaUIsS0FBSyxJQUFJO0FBRTFCLHFCQUFXLEtBQUssSUFBSTtBQUFBLFFBQ3JCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0Esb0JBQW9CO0FBQ25CLGdCQUFNLGtCQUFrQjtBQUN4QixVQUFBSixzQkFBcUIsS0FBSyxJQUFJO0FBRzlCLGNBQUksS0FBSyxjQUFjLEtBQUssc0JBQXNCLGFBQWE7QUFDOUQsaUJBQUssV0FBVyxNQUFNLFdBQVc7QUFBQSxVQUNsQztBQUFBLFFBQ0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSx1QkFBdUI7QUFDdEIsZ0JBQU0scUJBQXFCO0FBQzNCLG1DQUF5QixLQUFLLElBQUk7QUFBQSxRQUNuQztBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0EsT0FBTyxTQUFTO0FBQ2YsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxPQUFPLG1CQUFtQjtBQUN6QixpQkFBTyxDQUFDLGVBQWU7QUFBQSxRQUN4QjtBQUFBLE1BQ0Q7QUF3SUEsNEJBQXNCLEtBQUs7QUFBQTtBQUFBOzs7QUMvUTNCO0FBQUE7QUFBQTtBQUFBO0FBNk9BLFdBQVNPLDRCQUEyQjtBQUNuQyxVQUFNQyxXQUFVLENBQUM7QUFFakIsVUFBTSxNQUFNLEtBQUssYUFBYSxrQkFBa0I7QUFFaEQsUUFBSSxTQUFTLEdBQUcsR0FBRztBQUNsQixNQUFBQSxTQUFRLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxTQUFTLFFBQVEsRUFBRSxTQUFTO0FBQUEsSUFDM0Q7QUFFQSxRQUFJLEtBQUssYUFBYSxxQkFBcUIsR0FBRztBQUM3QyxNQUFBQSxTQUFRLFFBQVEsSUFBSSxLQUFLLGFBQWEscUJBQXFCLEVBQUUsWUFBWTtBQUFBLElBQzFFO0FBRUEsV0FBT0E7QUFBQSxFQUNSO0FBYUEsV0FBUywyQkFBMkI7QUFDbkMsUUFBSSxLQUFLLGtDQUFrQyxNQUFNLE1BQU07QUFDdEQ7QUFBQSxJQUNEO0FBRUEsU0FBSyxrQ0FBa0MsSUFBSTtBQUUzQyxVQUFNQSxXQUFVO0FBQUEsTUFDZixXQUFXLENBQUMsR0FBRztBQUFBLElBQ2hCO0FBRUEsVUFBTSxXQUFXLENBQUMsU0FBU0MsY0FBYTtBQUN2QyxpQkFBVyxDQUFDLEVBQUUsS0FBSyxLQUFLLFFBQVEsUUFBUSxHQUFHO0FBQzFDLFlBQUksTUFBTSxtQkFBbUIsTUFBTTtBQUVsQyxjQUFJLEtBQUssVUFBVSxRQUFRLE1BQU0sVUFBVTtBQUMxQyxZQUFBQSxVQUFTLFdBQVc7QUFBQSxVQUNyQjtBQUVBLGNBQUk7QUFDSCxZQUFBQyxhQUFZLEtBQUssSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNO0FBQ25DLGdDQUFrQixNQUFNLHdCQUF3QixFQUFFLFNBQVMsQ0FBQztBQUFBLFlBQzdELENBQUM7QUFBQSxVQUNGLFNBQVMsR0FBRztBQUNYLDhCQUFrQixNQUFNLHdCQUF3QixFQUFFLFNBQVMsQ0FBQztBQUFBLFVBQzdEO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFBQSxJQUNEO0FBRUEsVUFBTSxXQUFXLElBQUkscUJBQXFCLFVBQVVGLFFBQU87QUFDM0QsYUFBUyxRQUFRLElBQUk7QUFBQSxFQUN0QjtBQWtCQSxXQUFTRSxlQUFjO0FBQ3RCLFVBQU0sTUFBTSxLQUFLLFVBQVUsT0FBTyxNQUFTO0FBQzNDLFFBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxRQUFRLElBQUk7QUFDakMsWUFBTSxJQUFJLE1BQU0sYUFBYTtBQUFBLElBQzlCO0FBRUEsVUFBTUYsV0FBVSxLQUFLLFVBQVUsU0FBUyxDQUFDLENBQUM7QUFFMUMsUUFBSSxhQUFhO0FBQ2pCLFFBQUksS0FBSyxZQUFZO0FBQ3BCLG1CQUFhLEtBQUs7QUFBQSxJQUNuQjtBQUVBLFFBQUksWUFBWSxXQUFXLGNBQWMsSUFBSSxjQUFjLGFBQWE7QUFDeEUsUUFBSSxxQkFBcUIsV0FBVyxPQUFPO0FBRTNDLFFBQUksdUJBQXVCLFFBQVc7QUFDckMsMkJBQXFCO0FBQUEsSUFDdEI7QUFFQSxRQUFJLEVBQUUscUJBQXFCLGNBQWM7QUFDeEMsa0JBQVksU0FBUyxjQUFjLEtBQUs7QUFDeEMsZ0JBQVUsTUFBTSxVQUFVO0FBQzFCLGdCQUFVLGFBQWEsZ0JBQWdCLFdBQVc7QUFDbEQsaUJBQVcsWUFBWSxTQUFTO0FBQUEsSUFDakM7QUFFQSxXQUFPLHFCQUFxQixXQUFXLEtBQUtBLFVBQVMsS0FBSyxVQUFVLFFBQVEsQ0FBQyxFQUMzRSxLQUFLLE1BQU07QUFDWCxVQUFJLHVCQUF1QixRQUFXO0FBQ3JDLGtCQUFVLE1BQU0sVUFBVTtBQUFBLE1BQzNCO0FBQUEsSUFDRCxDQUFDLEVBQ0EsTUFBTSxDQUFDLE1BQU07QUFDYixZQUFNO0FBQUEsSUFDUCxDQUFDO0FBQUEsRUFDSDtBQU1BLFdBQVNHLGVBQWM7QUFDdEIsV0FBTyxLQUFLO0FBQUEsRUFDYjtBQXRXQSxNQXFDTSxvQ0FpRUE7QUF0R047QUFBQTtBQWNBO0FBQ0E7QUFDQSxNQUFBQztBQUlBO0FBT0E7QUFDQSxNQUFBQTtBQUNBO0FBUUEsTUFBTSxxQ0FBcUMsT0FBTyxnQkFBZ0I7QUFpRWxFLE1BQU0sU0FBTixjQUFxQixjQUFjO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTWxDLFlBQVksY0FBYyxJQUFJO0FBQzdCLGlCQUFPLE9BQU8sSUFBSSx5Q0FBeUM7QUFBQSxRQUM1RDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFxQkEsSUFBSSxXQUFXO0FBQ2QsaUJBQU8sT0FBTztBQUFBLFlBQ2IsQ0FBQztBQUFBLFlBQ0QsTUFBTTtBQUFBLFlBQ047QUFBQSxjQUNDLFdBQVc7QUFBQSxnQkFDVixNQUFNRCxhQUFZLEtBQUssSUFBSTtBQUFBLGNBQzVCO0FBQUEsY0FDQSxZQUFZO0FBQUEsY0FDWixLQUFLO0FBQUEsY0FDTCxRQUFRO0FBQUEsY0FDUixRQUFRO0FBQUEsY0FDUixPQUFPO0FBQUEsZ0JBQ04sVUFBVTtBQUFBLGdCQUNWLFFBQVE7QUFBQSxnQkFDUixNQUFNO0FBQUEsZ0JBQ04sYUFBYTtBQUFBLGdCQUNiLFNBQVM7QUFBQSxrQkFDUixRQUFRO0FBQUEsZ0JBQ1Q7QUFBQSxjQUNEO0FBQUEsWUFDRDtBQUFBLFlBQ0FKLDBCQUF5QixLQUFLLElBQUk7QUFBQSxVQUNuQztBQUFBLFFBQ0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxXQUFXLHFCQUFxQjtBQUMvQixnQkFBTSxPQUFPLE1BQU07QUFDbkIsZUFBSyxLQUFLLGtCQUFrQjtBQUM1QixpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLENBQUMsZ0JBQWdCLElBQUk7QUFDcEIsZ0JBQU0sZ0JBQWdCLEVBQUU7QUFHeEIsZUFBSyx1QkFBdUIsRUFBRSxrQkFBa0IsSUFBSSxDQUFDLFFBQVE7QUFDNUQsZ0JBQUksS0FBSyxhQUFhLGtCQUFrQixHQUFHO0FBQzFDLG1CQUFLLFVBQVUsT0FBTyxJQUFJLElBQUksS0FBSyxTQUFTLFFBQVEsRUFBRSxTQUFTLENBQUM7QUFBQSxZQUNqRSxPQUFPO0FBQ04sbUJBQUssVUFBVSxPQUFPLE1BQVM7QUFBQSxZQUNoQztBQUFBLFVBQ0Q7QUFBQSxRQUNEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFjQSxDQUFDLG9CQUFvQixJQUFJO0FBQ3hCLGdCQUFNLG9CQUFvQixFQUFFO0FBQzVCLG1DQUF5QixLQUFLLElBQUk7QUFBQSxRQUNuQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU9BLE9BQU8sU0FBUztBQUNmLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVVBLE1BQU0sS0FBSztBQUNWLGNBQUksU0FBUyxHQUFHLEtBQUssZUFBZSxLQUFLO0FBQ3hDLGlCQUFLLGFBQWEsb0JBQW9CLEdBQUcsR0FBRyxFQUFFO0FBQUEsVUFDL0M7QUFFQSxpQkFBT0csYUFBWSxLQUFLLElBQUk7QUFBQSxRQUM3QjtBQUFBLE1BQ0Q7QUF1SUEsNEJBQXNCLE1BQU07QUFBQTtBQUFBOzs7QUN4VzVCO0FBQUE7QUFBQTtBQUFBO0FBb1ZBLFdBQVMsY0FBYztBQUN0QixRQUFJLEVBQUUsMEJBQTBCLE9BQU87QUFDdEMsWUFBTSxJQUFJO0FBQUEsUUFDVDtBQUFBLE1BQ0Q7QUFBQSxJQUNEO0FBRUEsV0FBTyxLQUFLLHNCQUFzQjtBQUFBLEVBQ25DO0FBT0EsV0FBUyxlQUFlO0FBRXZCLFNBQUssdUJBQXVCLEVBQUUsT0FBTyxJQUFJLE1BQU07QUFDOUMsV0FBSyxVQUFVLFNBQVMsS0FBSyxhQUFhLE9BQU8sQ0FBQztBQUFBLElBQ25EO0FBQUEsRUFDRDtBQXhXQSxNQTBCTSx3QkEwQkE7QUFwRE47QUFBQTtBQWNBO0FBQ0E7QUFDQSxNQUFBRztBQUNBO0FBQ0E7QUFRQSxNQUFNLHlCQUF5QixPQUFPLGtCQUFrQjtBQTBCeEQsTUFBTSxnQkFBTixjQUE0QixjQUFjO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQWN6QyxjQUFjO0FBQ2IsZ0JBQU07QUFHTixjQUFJLE9BQU8sS0FBSyxpQkFBaUIsTUFBTSxZQUFZO0FBQ2xELGlCQUFLLHNCQUFzQixJQUFJLEtBQUssZ0JBQWdCO0FBQUEsVUFDckQsT0FBTztBQUVOLGtCQUFNO0FBQUEsY0FDTDtBQUFBLFlBQ0Q7QUFBQSxVQUNEO0FBR0EsdUJBQWEsS0FBSyxJQUFJO0FBQUEsUUFDdkI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxZQUFZLGNBQWMsSUFBSTtBQUM3QixpQkFBTyxPQUFPLElBQUksK0NBQStDO0FBQUEsUUFDbEU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVFBLFdBQVcscUJBQXFCO0FBQy9CLGlCQUFPLE1BQU07QUFBQSxRQUNkO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVNBLE9BQU8saUJBQWlCO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLeEIsSUFBSSxXQUFXO0FBQ2QsaUJBQU8sT0FBTyxDQUFDLEdBQUcsTUFBTSxRQUFRO0FBQUEsUUFDakM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBU0EsSUFBSSxRQUFRO0FBQ1gsZ0JBQU0sTUFBTSwyREFBMkQ7QUFBQSxRQUN4RTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVVBLElBQUksTUFBTSxPQUFPO0FBQ2hCLGdCQUFNLE1BQU0sMkRBQTJEO0FBQUEsUUFDeEU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBU0EsSUFBSSxTQUFTO0FBQ1osaUJBQU8sWUFBWSxLQUFLLElBQUksR0FBRztBQUFBLFFBQ2hDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsSUFBSSxPQUFPO0FBQ1YsaUJBQU8sS0FBSyxhQUFhLE1BQU07QUFBQSxRQUNoQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU9BLElBQUksT0FBTztBQUNWLGlCQUFPLEtBQUssWUFBWSxPQUFPO0FBQUEsUUFDaEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFVQSxJQUFJLFdBQVc7QUFDZCxpQkFBTyxZQUFZLEtBQUssSUFBSSxHQUFHO0FBQUEsUUFDaEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBU0EsSUFBSSxvQkFBb0I7QUFDdkIsaUJBQU8sWUFBWSxLQUFLLElBQUksR0FBRztBQUFBLFFBQ2hDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVNBLElBQUksZUFBZTtBQUNsQixpQkFBTyxZQUFZLEtBQUssSUFBSSxHQUFHO0FBQUEsUUFDaEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBU0EsSUFBSSxTQUFTO0FBQ1osaUJBQU8sWUFBWSxLQUFLLElBQUksR0FBRztBQUFBLFFBQ2hDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVNBLElBQUksT0FBTztBQUNWLGlCQUFPLFlBQVksS0FBSyxJQUFJLEdBQUc7QUFBQSxRQUNoQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFxQkEsYUFBYSxPQUFPLE9BQU87QUFDMUIsc0JBQVksS0FBSyxJQUFJLEVBQUUsYUFBYSxPQUFPLEtBQUs7QUFBQSxRQUNqRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFZQSxZQUFZLE9BQU8sU0FBUyxRQUFRO0FBQ25DLHNCQUFZLEtBQUssSUFBSSxFQUFFLFlBQVksT0FBTyxTQUFTLE1BQU07QUFBQSxRQUMxRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVVBLGdCQUFnQjtBQUNmLGlCQUFPLFlBQVksS0FBSyxJQUFJLEdBQUcsY0FBYztBQUFBLFFBQzlDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBVUEsaUJBQWlCO0FBQ2hCLGlCQUFPLFlBQVksS0FBSyxJQUFJLEdBQUcsZUFBZTtBQUFBLFFBQy9DO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFRQSx1QkFBdUIsTUFBTTtBQUM1QixjQUFJLE1BQU07QUFDVCxnQkFBSSxLQUFLLElBQUk7QUFDWixtQkFBSyxhQUFhLFFBQVEsS0FBSyxFQUFFO0FBQUEsWUFDbEM7QUFBQSxVQUNELE9BQU87QUFDTixpQkFBSyxnQkFBZ0IsTUFBTTtBQUFBLFVBQzVCO0FBQUEsUUFDRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU9BLHFCQUFxQixVQUFVO0FBQzlCLGNBQUksVUFBVTtBQUNiLGdCQUFJLENBQUMsS0FBSyxhQUFhLFVBQVUsR0FBRztBQUNuQyxtQkFBSyxhQUFhLFlBQVksRUFBRTtBQUFBLFlBQ2pDO0FBQUEsVUFDRCxPQUFPO0FBQ04sZ0JBQUksS0FBSyxhQUFhLFVBQVUsR0FBRztBQUNsQyxtQkFBSyxnQkFBZ0IsVUFBVTtBQUFBLFlBQ2hDO0FBQUEsVUFDRDtBQUFBLFFBQ0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEseUJBQXlCLE9BQU8sTUFBTTtBQUFBLFFBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUt2QyxvQkFBb0I7QUFDbkIsZUFBSyxRQUFRO0FBQUEsUUFDZDtBQUFBLE1BQ0Q7QUFBQTtBQUFBOzs7QUM1VUEsTUFxQk07QUFyQk47QUFBQTtBQVlBO0FBQ0EsTUFBQUM7QUFRQSxNQUFNLG1CQUFtQixJQUFJLGNBQWM7QUFFM0MsVUFBSTtBQUNGLHlCQUFpQixXQUFXO0FBQUE7QUFBQTtBQUFBLElBRzFCLENBQUM7QUFBQSxNQUNMLFNBQVMsR0FBRztBQUNWLDBCQUFrQixTQUFTLFlBQVksRUFBRSxjQUFjLE1BQU0sR0FBRyx3QkFBd0IsSUFBSSxFQUFFO0FBQUEsTUFDaEc7QUFBQTtBQUFBOzs7QUM5QkEsTUFxQk07QUFyQk47QUFBQTtBQVlBO0FBQ0EsTUFBQUM7QUFRQSxNQUFNLG1CQUFtQixJQUFJLGNBQWM7QUFFM0MsVUFBSTtBQUNILHlCQUFpQjtBQUFBLFVBQ2hCO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFJQTtBQUFBLFFBQ0Q7QUFBQSxNQUNELFNBQVMsR0FBRztBQUNYO0FBQUEsVUFDQyxTQUFTLFlBQVksRUFBRSxjQUFjLE1BQU07QUFBQSxVQUMzQztBQUFBLFVBQ0EsSUFBSTtBQUFBLFFBQ0w7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDckNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFvUEEsV0FBU0Msb0JBQW1CO0FBQzNCLFVBQU1DLFFBQU87QUFDYixVQUFNLFNBQVMsS0FBSyxtQkFBbUI7QUFFdkMsVUFBTUMsUUFBTztBQUViLFdBQU8saUJBQWlCQSxPQUFNLFNBQVUsT0FBTztBQUM5QyxZQUFNLFdBQVdELE1BQUssVUFBVSxlQUFlO0FBRS9DLHNCQUFnQkEsT0FBTSwwQkFBMEI7QUFBQSxRQUMvQyxRQUFRQTtBQUFBLE1BQ1QsQ0FBQztBQUVELFVBQUksQ0FBQyxXQUFXLFFBQVEsR0FBRztBQUMxQjtBQUFBLE1BQ0Q7QUFFQSxZQUFNLFVBQVU7QUFBQSxRQUNmO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNEO0FBRUEsVUFBSSxFQUFFLG1CQUFtQixRQUFRQSxNQUFLLFFBQVEsT0FBTyxJQUFJO0FBQ3hEO0FBQUEsTUFDRDtBQUVBLGVBQVMsS0FBS0EsT0FBTSxLQUFLO0FBQUEsSUFDMUIsQ0FBQztBQUVELFFBQUlBLE1BQUssVUFBVSxnQkFBZ0IsR0FBRztBQUNyQyxhQUFPLGlCQUFpQixTQUFTLGFBQWEsS0FBS0EsS0FBSSxDQUFDO0FBQUEsSUFDekQ7QUFHQSxJQUFBQSxNQUFLLHVCQUF1QixFQUFFLHNCQUFzQixJQUFJLFNBQVUsT0FBTztBQUN4RSxNQUFBQSxNQUFLLFVBQVUsa0JBQWtCLEtBQUs7QUFBQSxJQUN2QztBQUVBLFdBQU87QUFBQSxFQUNSO0FBS0EsV0FBU0UseUJBQXdCO0FBQ2hDLFNBQUssbUJBQW1CLElBQUksS0FBSyxXQUFXO0FBQUEsTUFDM0MsSUFBSSxjQUFjO0FBQUEsSUFDbkI7QUFBQSxFQUNEO0FBTUEsV0FBU0MsZUFBYztBQUV0QixXQUFPO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVFSO0FBRUEsV0FBUyxhQUFhLE9BQU87QUFDNUIsVUFBTSxTQUFTLEtBQUssbUJBQW1CO0FBRXZDLFVBQU0sU0FBUyxTQUFTLGNBQWMsTUFBTTtBQUM1QyxVQUFNLFdBQVcsS0FBSyxJQUFJLE9BQU8sYUFBYSxPQUFPLFlBQVk7QUFDakUsVUFBTSxTQUFTLFdBQVc7QUFFMUIsV0FBTyxNQUFNLFFBQVEsT0FBTyxNQUFNLFNBQVMsR0FBRyxRQUFRO0FBQ3RELFdBQU8sTUFBTSxPQUFPLEdBQUcsTUFBTSxVQUFVLE9BQU8sYUFBYSxNQUFNO0FBQ2pFLFdBQU8sTUFBTSxNQUFNLEdBQUcsTUFBTSxVQUFVLE9BQU8sWUFBWSxNQUFNO0FBQy9ELFdBQU8sVUFBVSxJQUFJLG1CQUFtQjtBQUV4QyxVQUFNLFVBQVUsT0FBTyx1QkFBdUIsbUJBQW1CO0FBQ2pFLGVBQVcsVUFBVSxTQUFTO0FBQzdCLGFBQU8sT0FBTztBQUFBLElBQ2Y7QUFFQSxXQUFPLFlBQVksTUFBTTtBQUFBLEVBQzFCO0FBelVBLE1BdUNhLHFCQWNQO0FBckROLE1BQUFDLGVBQUE7QUFBQTtBQWNBO0FBQ0E7QUFDQSxNQUFBQztBQUlBO0FBQ0E7QUFLQTtBQUNBO0FBQ0EsTUFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFRTyxNQUFNLHNCQUFzQixPQUFPLGVBQWU7QUFjekQsTUFBTSxTQUFOLGNBQXFCLGNBQWM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNbEMsWUFBWSxjQUFjLElBQUk7QUFDN0IsaUJBQU8sT0FBTyxJQUFJLG1EQUFtRDtBQUFBLFFBQ3RFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLENBQUMsb0JBQW9CLElBQUk7QUFDeEIsZ0JBQU0sb0JBQW9CLEVBQUU7QUFDNUIsVUFBQUgsdUJBQXNCLEtBQUssSUFBSTtBQUMvQixVQUFBSCxrQkFBaUIsS0FBSyxJQUFJO0FBQzFCLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBUUEsUUFBUTtBQUNQLGNBQUksS0FBSyxVQUFVLFVBQVUsTUFBTSxNQUFNO0FBQ3hDO0FBQUEsVUFDRDtBQUVBLGNBQ0MsS0FBSyxtQkFBbUIsS0FDeEIsV0FBVyxLQUFLLG1CQUFtQixFQUFFLEtBQUssR0FDekM7QUFDRCxpQkFBSyxtQkFBbUIsRUFBRSxNQUFNO0FBQUEsVUFDakM7QUFBQSxRQUNEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVNBLE1BQU1PLFVBQVM7QUFDZCxjQUFJLEtBQUssVUFBVSxVQUFVLE1BQU0sTUFBTTtBQUN4QztBQUFBLFVBQ0Q7QUFFQSxjQUNDLEtBQUssbUJBQW1CLEtBQ3hCLFdBQVcsS0FBSyxtQkFBbUIsRUFBRSxLQUFLLEdBQ3pDO0FBQ0QsaUJBQUssbUJBQW1CLEVBQUUsTUFBTUEsUUFBTztBQUFBLFVBQ3hDO0FBQUEsUUFDRDtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0EsT0FBTztBQUNOLGNBQ0MsS0FBSyxtQkFBbUIsS0FDeEIsV0FBVyxLQUFLLG1CQUFtQixFQUFFLElBQUksR0FDeEM7QUFDRCxpQkFBSyxtQkFBbUIsRUFBRSxLQUFLO0FBQUEsVUFDaEM7QUFBQSxRQUNEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsV0FBVyxxQkFBcUI7QUFDL0IsZ0JBQU0sYUFBYSxNQUFNO0FBQ3pCLHFCQUFXLEtBQUssc0JBQXNCO0FBQ3RDLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxXQUFXLGlCQUFpQjtBQUMzQixpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBWUEsSUFBSSxRQUFRO0FBQ1gsaUJBQU8sS0FBSyxVQUFVLE9BQU87QUFBQSxRQUM5QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBY0EsSUFBSSxNQUFNLE9BQU87QUFDaEIsZUFBSyxVQUFVLFNBQVMsS0FBSztBQUM3QixjQUFJO0FBQ0gsa0JBQU0sYUFBYSxLQUFLLEtBQUs7QUFBQSxVQUM5QixTQUFTLEdBQUc7QUFDWCw4QkFBa0IsTUFBTSx3QkFBd0IsRUFBRSxPQUFPO0FBQUEsVUFDMUQ7QUFBQSxRQUNEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQXFCQSxJQUFJLFdBQVc7QUFDZCxpQkFBTyxPQUFPLE9BQU8sQ0FBQyxHQUFHLE1BQU0sVUFBVTtBQUFBLFlBQ3hDLFdBQVc7QUFBQSxjQUNWLE1BQU1ILGFBQVk7QUFBQSxZQUNuQjtBQUFBLFlBQ0EsUUFBUTtBQUFBLGNBQ1AsUUFBUTtBQUFBLFlBQ1Q7QUFBQSxZQUNBLFNBQVM7QUFBQSxjQUNSLFFBQVE7QUFBQSxZQUNUO0FBQUEsWUFDQSxVQUFVO0FBQUEsWUFDVixTQUFTO0FBQUEsY0FDUixPQUFPLE1BQU07QUFBQSxjQUViO0FBQUEsWUFDRDtBQUFBLFlBQ0EsU0FBUztBQUFBLGNBQ1IsUUFBUTtBQUFBLFlBQ1Q7QUFBQSxZQUNBLE9BQU87QUFBQSxZQUNQLE1BQU07QUFBQSxVQUNQLENBQUM7QUFBQSxRQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLE9BQU8sU0FBUztBQUNmLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxPQUFPLG1CQUFtQjtBQUN6QixpQkFBTyxDQUFDLGtCQUFrQixnQkFBZ0I7QUFBQSxRQUMzQztBQUFBLE1BQ0Q7QUE2RkEsNEJBQXNCLE1BQU07QUFBQTtBQUFBOzs7QUMzVTVCLE1BcUJNO0FBckJOO0FBQUE7QUFZQTtBQUNBLE1BQUFJO0FBUUEsTUFBTSx3QkFBd0IsSUFBSSxjQUFjO0FBRWhELFVBQUk7QUFDRiw4QkFBc0IsV0FBVztBQUFBO0FBQUE7QUFBQSxJQUcvQixDQUFDO0FBQUEsTUFDTCxTQUFTLEdBQUc7QUFDViwwQkFBa0IsU0FBUyxZQUFZLEVBQUUsY0FBYyxNQUFNLEdBQUcsd0JBQXdCLElBQUksRUFBRTtBQUFBLE1BQ2hHO0FBQUE7QUFBQTs7O0FDNkNBLFdBQVMsb0JBQW9CLE9BQU87QUFDbkMsWUFBUSxPQUFPO0FBQUEsTUFDZCxLQUFLO0FBQ0osZUFBTyxJQUFJLE1BQU0sYUFBYSxFQUFFO0FBQUEsTUFDakMsS0FBSztBQUNKLGVBQU8sSUFBSTtBQUFBLFVBQ1Y7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0QsS0FBSztBQUNKLGVBQU8sSUFBSTtBQUFBLFVBQ1Y7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0QsS0FBSztBQUNKLGVBQU8sSUFBSTtBQUFBLFVBQ1Y7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUFBLE1BQ0Q7QUFDQyxlQUFPLElBQUksTUFBTSxPQUFPLEVBQUU7QUFBQSxJQUM1QjtBQUFBLEVBQ0Q7QUFqR0EsTUF1Qk1DLGlCQVFBO0FBL0JOO0FBQUE7QUFjQTtBQUNBO0FBUUEsTUFBTUEsa0JBQWlCLE9BQU8sZ0JBQWdCO0FBUTlDLE1BQU0sUUFBTixNQUFNLGVBQWMsS0FBSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT3hCLFlBQVksT0FBTyxjQUFjO0FBQ2hDLGdCQUFNO0FBQ04sZUFBS0EsZUFBYyxJQUFJLENBQUM7QUFDeEIsZUFBS0EsZUFBYyxFQUFFLFFBQVEsZUFBZSxLQUFLO0FBQ2pELGVBQUtBLGVBQWMsRUFBRSxlQUFlLGVBQWUsWUFBWTtBQUFBLFFBQ2hFO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxJQUFJLFFBQVE7QUFDWCxpQkFBTyxLQUFLQSxlQUFjLEVBQUU7QUFBQSxRQUM3QjtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0EsSUFBSSxlQUFlO0FBQ2xCLGlCQUFPLEtBQUtBLGVBQWMsRUFBRTtBQUFBLFFBQzdCO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxXQUFXO0FBQ1YsaUJBQU8sSUFBSTtBQUFBLFlBQ1YsS0FBS0EsZUFBYyxFQUFFO0FBQUEsWUFDckIsS0FBS0EsZUFBYyxFQUFFO0FBQUEsVUFDdEI7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUFBO0FBQUE7OztBQ3BFQTtBQUFBO0FBQUE7QUFBQTtBQTBKQSxXQUFTQyxlQUFjO0FBRXRCLFdBQU87QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVVSO0FBdEtBLE1BbUNNO0FBbkNOLE1BQUFDLHFCQUFBO0FBQUE7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUFDO0FBQ0E7QUFDQTtBQWVBLE1BQU0sY0FBTixjQUEwQixPQUFPO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTWhDLFlBQVksY0FBYyxJQUFJO0FBQzdCLGlCQUFPLE9BQU87QUFBQSxZQUNiO0FBQUEsVUFDRDtBQUFBLFFBQ0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFtQkEsSUFBSSxXQUFXO0FBQ2QsaUJBQU8sT0FBTyxPQUFPLENBQUMsR0FBRyxNQUFNLFVBQVU7QUFBQSxZQUN4QyxXQUFXO0FBQUEsY0FDVixNQUFNRixhQUFZO0FBQUEsWUFDbkI7QUFBQSxZQUNBLFFBQVE7QUFBQSxjQUNQLFlBQVksb0JBQW9CLFlBQVk7QUFBQSxjQUM1QyxVQUFVLG9CQUFvQixVQUFVO0FBQUEsY0FDeEMsUUFBUSxvQkFBb0IsUUFBUTtBQUFBLFlBQ3JDO0FBQUEsWUFDQSxTQUFTLG9CQUFvQixXQUFXO0FBQUEsVUFDekMsQ0FBQztBQUFBLFFBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBZUEsU0FBUyxPQUFPLFNBQVM7QUFDeEIsZ0JBQU0sZ0JBQWdCLE9BQU8sSUFBSSxTQUFTO0FBQzFDLGNBQUksS0FBSyxhQUFhLE1BQU0sUUFBVztBQUN0Qyx5QkFBYSxLQUFLLGFBQWEsQ0FBQztBQUNoQyxtQkFBTyxLQUFLLGFBQWE7QUFBQSxVQUMxQjtBQUVBLGdCQUFNLE1BQU0sS0FBSyxVQUFVLFVBQVUsZUFBZSxLQUFLLENBQUMsRUFBRTtBQUM1RCxjQUFJLFFBQVEsUUFBVztBQUN0QixrQkFBTSxJQUFJLE1BQU0sV0FBVztBQUFBLFVBQzVCO0FBRUEsZUFBSyxVQUFVLFdBQVcsaUJBQWlCLEtBQUssS0FBSyxDQUFDO0FBRXRELGNBQUksVUFBVSxPQUFPLEtBQUssVUFBVSxHQUFHO0FBQ3RDLGlCQUFLLGFBQWEsSUFBSSxXQUFXLE1BQU07QUFDdEMsbUJBQUssWUFBWTtBQUNqQixxQkFBTyxLQUFLLGFBQWE7QUFBQSxZQUMxQixHQUFHLE9BQU87QUFBQSxVQUNYO0FBRUEsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLGNBQWM7QUFDYixlQUFLLFVBQVUsV0FBVyxvQkFBb0IsV0FBVyxDQUFDO0FBQzFELGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0EsV0FBVztBQUNWLGlCQUFPLEtBQUssVUFBVSxTQUFTO0FBQUEsUUFDaEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsT0FBTyxTQUFTO0FBQ2YsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLE9BQU8sbUJBQW1CO0FBQ3pCLGdCQUFNRyxVQUFTLE9BQU8saUJBQWlCO0FBQ3ZDLFVBQUFBLFFBQU8sS0FBSyxxQkFBcUI7QUFDakMsaUJBQU9BO0FBQUEsUUFDUjtBQUFBLE1BQ0Q7QUFvQkEsNEJBQXNCLFdBQVc7QUFBQTtBQUFBOzs7QUN6SGpDLFdBQVMsU0FBUyxTQUFTLFVBQVUsZUFBZSxhQUFhLFFBQVE7QUFDeEUsV0FBTyxjQUFjLFNBQVMsVUFBVSxRQUFRLFNBQVUsR0FBRyxHQUFHLEdBQUc7QUFDbEUsVUFBSSxNQUFNLEdBQUcsYUFBYSxDQUFDO0FBQzNCLFVBQUksTUFBTSxHQUFHLGFBQWE7QUFDMUIsV0FBSyxJQUFJLEdBQUcsQ0FBQztBQUFBLElBQ2QsQ0FBQztBQUFBLEVBQ0Y7QUErREEsV0FBUyxjQUFjLFNBQVMsVUFBVSxRQUFRLFVBQVU7QUFDM0QsVUFBTSxTQUFTLG9CQUFJLElBQUk7QUFFdkIsUUFBSTtBQUNKLFFBQUksV0FBVyxRQUFRLEdBQUc7QUFDekIsWUFBTSxTQUFTLE9BQU87QUFDdEIsVUFBSSxFQUFFLGVBQWUsTUFBTTtBQUMxQixjQUFNLElBQUksVUFBVSx5Q0FBeUM7QUFBQSxNQUM5RDtBQUFBLElBQ0QsV0FBVyxTQUFTLFFBQVEsR0FBRztBQUM5QixZQUFNLG9CQUFJLElBQUk7QUFDZCxtQkFBYSxLQUFLLEtBQUssU0FBUyxRQUFRO0FBQUEsSUFDekMsT0FBTztBQUNOLFlBQU0sSUFBSSxVQUFVLDZDQUE2QztBQUFBLElBQ2xFO0FBRUEsUUFBSSxFQUFFLGVBQWUsTUFBTTtBQUMxQixhQUFPO0FBQUEsSUFDUjtBQUVBLFFBQUksUUFBUSxDQUFDLEdBQUcsR0FBRyxNQUFNO0FBQ3hCLFVBQUksV0FBVyxNQUFNLEdBQUc7QUFDdkIsWUFBSSxPQUFPLEtBQUssR0FBRyxHQUFHLENBQUMsTUFBTSxLQUFNO0FBQUEsTUFDcEM7QUFFQSxlQUFTLEtBQUssUUFBUSxHQUFHLEdBQUcsQ0FBQztBQUFBLElBQzlCLENBQUM7QUFFRCxXQUFPO0FBQUEsRUFDUjtBQVVBLFdBQVMsYUFBYSxTQUFTLFVBQVUsS0FBSyxXQUFXO0FBQ3hELFVBQU0sYUFBYSxvQkFBSSxJQUFJO0FBRTNCLFVBQU0sZUFBZSxLQUFLO0FBRTFCLFFBQUksUUFBUSxPQUFXLE9BQU0sQ0FBQztBQUU5QixVQUFNLFFBQVEsU0FBUyxNQUFNLFNBQVM7QUFDdEMsUUFBSSxVQUFVO0FBQ2QsVUFBTSxjQUFjLENBQUM7QUFDckIsT0FBRztBQUNGLGdCQUFVLE1BQU0sTUFBTTtBQUN0QixrQkFBWSxLQUFLLE9BQU87QUFFeEIsVUFBSSxZQUFZLFVBQVU7QUFDekIsY0FBTSxTQUFTLElBQUksV0FBVyxPQUFPO0FBQ3JDLFlBQUk7QUFFSixZQUFJO0FBQ0gsZ0JBQU0sT0FBTyxPQUFPLFlBQVksS0FBSyxTQUFTLENBQUM7QUFBQSxRQUNoRCxTQUFTLEdBQUc7QUFDWCxnQkFBTUMsS0FBSTtBQUNWLGdCQUFNLG9CQUFJLElBQUk7QUFBQSxRQUNmO0FBRUEsbUJBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLO0FBQ3pCLGdCQUFNLFVBQVUsTUFBTSxHQUFHO0FBRXpCLHNCQUFZLElBQUksQ0FBQ0EsT0FBTTtBQUN0QixvQkFBUSxLQUFLQSxPQUFNLFdBQVcsSUFBSUEsRUFBQztBQUFBLFVBQ3BDLENBQUM7QUFFRCxnQkFBTSxLQUFLLFFBQVEsS0FBSyxTQUFTO0FBQ2pDLGdCQUFNLE1BQU0sYUFBYTtBQUFBLFlBQ3hCO0FBQUEsWUFDQTtBQUFBLFlBQ0EsTUFBTSxLQUFLLFNBQVM7QUFBQSxZQUNwQjtBQUFBLFlBQ0E7QUFBQSxVQUNEO0FBRUEsY0FBSSxTQUFTLEdBQUcsS0FBSyxjQUFjLFFBQVc7QUFDN0MsZ0JBQUksTUFBTSxJQUFJO0FBQUEsVUFDZjtBQUVBLHFCQUFXLElBQUksSUFBSSxHQUFHO0FBQUEsUUFDdkI7QUFBQSxNQUNEO0FBQUEsSUFDRCxTQUFTLE1BQU0sU0FBUztBQUd4QixRQUFJLGlCQUFpQixLQUFLLE1BQU07QUFDL0IsaUJBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxZQUFZO0FBQ2hDLGFBQUssSUFBSSxHQUFHLENBQUM7QUFBQSxNQUNkO0FBQUEsSUFDRDtBQUVBLFdBQU87QUFBQSxFQUNSO0FBc0pBLFdBQVMsTUFBTSxTQUFTLFlBQVksY0FBYztBQUNqRCxRQUFJLGVBQWUsT0FBVyxRQUFPLGVBQWUsZUFBZTtBQUNuRSxtQkFBZSxVQUFVO0FBRXpCLFVBQU0sU0FBUztBQUNmLFVBQU0sUUFBUSxDQUFDLEdBQUcsV0FBVyxTQUFTLE1BQU0sQ0FBQztBQUU3QyxVQUFNLFNBQVMsSUFBSSxXQUFXLE9BQU87QUFFckMsUUFBSSxNQUFNLFdBQVcsR0FBRztBQUN2QixhQUFPLE9BQU8sT0FBTyxVQUFVO0FBQUEsSUFDaEM7QUFFQSxVQUFNLFFBQVEsQ0FBQ0EsT0FBTTtBQUNwQixZQUFNLFNBQVNBLEtBQUksUUFBUTtBQUMzQixZQUFNLGNBQWMsU0FBUyxhQUFhO0FBQzFDLFVBQUksZ0JBQWdCLE9BQVc7QUFFL0IsWUFBTSxPQUFPLFNBQVMsTUFBTTtBQUU1QixVQUFJLElBQUksT0FBTyxPQUFPLElBQUk7QUFDMUIsVUFBSSxNQUFNLE9BQVcsS0FBSTtBQUV6QixtQkFBYSxXQUFXLFdBQVcsYUFBYSxDQUFDO0FBQUEsSUFDbEQsQ0FBQztBQUVELFdBQU87QUFBQSxFQUNSO0FBdFlBLE1Bd0JNO0FBeEJOO0FBQUE7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQU9BLE1BQU0sU0FBUztBQUFBO0FBQUE7OztBQ0VmLFdBQVMsTUFBTUMsUUFBTyxPQUFPQyxNQUFLO0FBQ2hDLFdBQU9DLEtBQUlGLFFBQU9HLEtBQUksT0FBT0YsSUFBRyxDQUFDO0FBQUEsRUFDbkM7QUFDQSxXQUFTLFNBQVMsT0FBTyxPQUFPO0FBQzlCLFdBQU8sT0FBTyxVQUFVLGFBQWEsTUFBTSxLQUFLLElBQUk7QUFBQSxFQUN0RDtBQUNBLFdBQVMsUUFBUSxXQUFXO0FBQzFCLFdBQU8sVUFBVSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQUEsRUFDL0I7QUFDQSxXQUFTLGFBQWEsV0FBVztBQUMvQixXQUFPLFVBQVUsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUFBLEVBQy9CO0FBQ0EsV0FBUyxnQkFBZ0IsTUFBTTtBQUM3QixXQUFPLFNBQVMsTUFBTSxNQUFNO0FBQUEsRUFDOUI7QUFDQSxXQUFTLGNBQWMsTUFBTTtBQUMzQixXQUFPLFNBQVMsTUFBTSxXQUFXO0FBQUEsRUFDbkM7QUFDQSxXQUFTLFlBQVksV0FBVztBQUM5QixXQUFPLENBQUMsT0FBTyxRQUFRLEVBQUUsU0FBUyxRQUFRLFNBQVMsQ0FBQyxJQUFJLE1BQU07QUFBQSxFQUNoRTtBQUNBLFdBQVMsaUJBQWlCLFdBQVc7QUFDbkMsV0FBTyxnQkFBZ0IsWUFBWSxTQUFTLENBQUM7QUFBQSxFQUMvQztBQUNBLFdBQVMsa0JBQWtCLFdBQVcsT0FBTyxLQUFLO0FBQ2hELFFBQUksUUFBUSxRQUFRO0FBQ2xCLFlBQU07QUFBQSxJQUNSO0FBQ0EsVUFBTSxZQUFZLGFBQWEsU0FBUztBQUN4QyxVQUFNLGdCQUFnQixpQkFBaUIsU0FBUztBQUNoRCxVQUFNLFNBQVMsY0FBYyxhQUFhO0FBQzFDLFFBQUksb0JBQW9CLGtCQUFrQixNQUFNLGVBQWUsTUFBTSxRQUFRLFdBQVcsVUFBVSxTQUFTLGNBQWMsVUFBVSxXQUFXO0FBQzlJLFFBQUksTUFBTSxVQUFVLE1BQU0sSUFBSSxNQUFNLFNBQVMsTUFBTSxHQUFHO0FBQ3BELDBCQUFvQkcsc0JBQXFCLGlCQUFpQjtBQUFBLElBQzVEO0FBQ0EsV0FBTyxDQUFDLG1CQUFtQkEsc0JBQXFCLGlCQUFpQixDQUFDO0FBQUEsRUFDcEU7QUFDQSxXQUFTLHNCQUFzQixXQUFXO0FBQ3hDLFVBQU0sb0JBQW9CQSxzQkFBcUIsU0FBUztBQUN4RCxXQUFPLENBQUMsOEJBQThCLFNBQVMsR0FBRyxtQkFBbUIsOEJBQThCLGlCQUFpQixDQUFDO0FBQUEsRUFDdkg7QUFDQSxXQUFTLDhCQUE4QixXQUFXO0FBQ2hELFdBQU8sVUFBVSxRQUFRLGNBQWMsZUFBYSxxQkFBcUIsU0FBUyxDQUFDO0FBQUEsRUFDckY7QUFDQSxXQUFTLFlBQVksTUFBTSxTQUFTLEtBQUs7QUFDdkMsVUFBTSxLQUFLLENBQUMsUUFBUSxPQUFPO0FBQzNCLFVBQU0sS0FBSyxDQUFDLFNBQVMsTUFBTTtBQUMzQixVQUFNLEtBQUssQ0FBQyxPQUFPLFFBQVE7QUFDM0IsVUFBTSxLQUFLLENBQUMsVUFBVSxLQUFLO0FBQzNCLFlBQVEsTUFBTTtBQUFBLE1BQ1osS0FBSztBQUFBLE1BQ0wsS0FBSztBQUNILFlBQUksSUFBSyxRQUFPLFVBQVUsS0FBSztBQUMvQixlQUFPLFVBQVUsS0FBSztBQUFBLE1BQ3hCLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFDSCxlQUFPLFVBQVUsS0FBSztBQUFBLE1BQ3hCO0FBQ0UsZUFBTyxDQUFDO0FBQUEsSUFDWjtBQUFBLEVBQ0Y7QUFDQSxXQUFTLDBCQUEwQixXQUFXLGVBQWUsV0FBVyxLQUFLO0FBQzNFLFVBQU0sWUFBWSxhQUFhLFNBQVM7QUFDeEMsUUFBSSxPQUFPLFlBQVksUUFBUSxTQUFTLEdBQUcsY0FBYyxTQUFTLEdBQUc7QUFDckUsUUFBSSxXQUFXO0FBQ2IsYUFBTyxLQUFLLElBQUksVUFBUSxPQUFPLE1BQU0sU0FBUztBQUM5QyxVQUFJLGVBQWU7QUFDakIsZUFBTyxLQUFLLE9BQU8sS0FBSyxJQUFJLDZCQUE2QixDQUFDO0FBQUEsTUFDNUQ7QUFBQSxJQUNGO0FBQ0EsV0FBTztBQUFBLEVBQ1Q7QUFDQSxXQUFTQSxzQkFBcUIsV0FBVztBQUN2QyxXQUFPLFVBQVUsUUFBUSwwQkFBMEIsVUFBUSxnQkFBZ0IsSUFBSSxDQUFDO0FBQUEsRUFDbEY7QUFDQSxXQUFTLG9CQUFvQixTQUFTO0FBQ3BDLFdBQU87QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLE1BQU07QUFBQSxNQUNOLEdBQUc7QUFBQSxJQUNMO0FBQUEsRUFDRjtBQUNBLFdBQVMsaUJBQWlCLFNBQVM7QUFDakMsV0FBTyxPQUFPLFlBQVksV0FBVyxvQkFBb0IsT0FBTyxJQUFJO0FBQUEsTUFDbEUsS0FBSztBQUFBLE1BQ0wsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsTUFBTTtBQUFBLElBQ1I7QUFBQSxFQUNGO0FBQ0EsV0FBU0Msa0JBQWlCLE1BQU07QUFDOUIsVUFBTTtBQUFBLE1BQ0o7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGLElBQUk7QUFDSixXQUFPO0FBQUEsTUFDTDtBQUFBLE1BQ0E7QUFBQSxNQUNBLEtBQUs7QUFBQSxNQUNMLE1BQU07QUFBQSxNQUNOLE9BQU8sSUFBSTtBQUFBLE1BQ1gsUUFBUSxJQUFJO0FBQUEsTUFDWjtBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQXZJQSxNQUtNLE9BQ0EsWUFDQUMsYUFDQUgsTUFDQUQsTUFDQUssUUFDQSxPQUNBLGNBSUEsaUJBTUE7QUF0Qk47QUFBQTtBQUtBLE1BQU0sUUFBUSxDQUFDLE9BQU8sU0FBUyxVQUFVLE1BQU07QUFDL0MsTUFBTSxhQUFhLENBQUMsU0FBUyxLQUFLO0FBQ2xDLE1BQU1ELGNBQTBCLHNCQUFNLE9BQU8sQ0FBQyxLQUFLLFNBQVMsSUFBSSxPQUFPLE1BQU0sT0FBTyxNQUFNLFdBQVcsQ0FBQyxHQUFHLE9BQU8sTUFBTSxXQUFXLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4SSxNQUFNSCxPQUFNLEtBQUs7QUFDakIsTUFBTUQsT0FBTSxLQUFLO0FBQ2pCLE1BQU1LLFNBQVEsS0FBSztBQUNuQixNQUFNLFFBQVEsS0FBSztBQUNuQixNQUFNLGVBQWUsUUFBTTtBQUFBLFFBQ3pCLEdBQUc7QUFBQSxRQUNILEdBQUc7QUFBQSxNQUNMO0FBQ0EsTUFBTSxrQkFBa0I7QUFBQSxRQUN0QixNQUFNO0FBQUEsUUFDTixPQUFPO0FBQUEsUUFDUCxRQUFRO0FBQUEsUUFDUixLQUFLO0FBQUEsTUFDUDtBQUNBLE1BQU0sdUJBQXVCO0FBQUEsUUFDM0IsT0FBTztBQUFBLFFBQ1AsS0FBSztBQUFBLE1BQ1A7QUFBQTtBQUFBOzs7QUN0QkEsV0FBUywyQkFBMkIsTUFBTSxXQUFXLEtBQUs7QUFDeEQsUUFBSTtBQUFBLE1BQ0YsV0FBQUM7QUFBQSxNQUNBO0FBQUEsSUFDRixJQUFJO0FBQ0osVUFBTSxXQUFXLFlBQVksU0FBUztBQUN0QyxVQUFNLGdCQUFnQixpQkFBaUIsU0FBUztBQUNoRCxVQUFNLGNBQWMsY0FBYyxhQUFhO0FBQy9DLFVBQU0sT0FBTyxRQUFRLFNBQVM7QUFDOUIsVUFBTSxhQUFhLGFBQWE7QUFDaEMsVUFBTSxVQUFVQSxXQUFVLElBQUlBLFdBQVUsUUFBUSxJQUFJLFNBQVMsUUFBUTtBQUNyRSxVQUFNLFVBQVVBLFdBQVUsSUFBSUEsV0FBVSxTQUFTLElBQUksU0FBUyxTQUFTO0FBQ3ZFLFVBQU0sY0FBY0EsV0FBVSxXQUFXLElBQUksSUFBSSxTQUFTLFdBQVcsSUFBSTtBQUN6RSxRQUFJO0FBQ0osWUFBUSxNQUFNO0FBQUEsTUFDWixLQUFLO0FBQ0gsaUJBQVM7QUFBQSxVQUNQLEdBQUc7QUFBQSxVQUNILEdBQUdBLFdBQVUsSUFBSSxTQUFTO0FBQUEsUUFDNUI7QUFDQTtBQUFBLE1BQ0YsS0FBSztBQUNILGlCQUFTO0FBQUEsVUFDUCxHQUFHO0FBQUEsVUFDSCxHQUFHQSxXQUFVLElBQUlBLFdBQVU7QUFBQSxRQUM3QjtBQUNBO0FBQUEsTUFDRixLQUFLO0FBQ0gsaUJBQVM7QUFBQSxVQUNQLEdBQUdBLFdBQVUsSUFBSUEsV0FBVTtBQUFBLFVBQzNCLEdBQUc7QUFBQSxRQUNMO0FBQ0E7QUFBQSxNQUNGLEtBQUs7QUFDSCxpQkFBUztBQUFBLFVBQ1AsR0FBR0EsV0FBVSxJQUFJLFNBQVM7QUFBQSxVQUMxQixHQUFHO0FBQUEsUUFDTDtBQUNBO0FBQUEsTUFDRjtBQUNFLGlCQUFTO0FBQUEsVUFDUCxHQUFHQSxXQUFVO0FBQUEsVUFDYixHQUFHQSxXQUFVO0FBQUEsUUFDZjtBQUFBLElBQ0o7QUFDQSxZQUFRLGFBQWEsU0FBUyxHQUFHO0FBQUEsTUFDL0IsS0FBSztBQUNILGVBQU8sYUFBYSxLQUFLLGVBQWUsT0FBTyxhQUFhLEtBQUs7QUFDakU7QUFBQSxNQUNGLEtBQUs7QUFDSCxlQUFPLGFBQWEsS0FBSyxlQUFlLE9BQU8sYUFBYSxLQUFLO0FBQ2pFO0FBQUEsSUFDSjtBQUNBLFdBQU87QUFBQSxFQUNUO0FBcUdBLGlCQUFlQyxnQkFBZSxPQUFPQyxVQUFTO0FBQzVDLFFBQUk7QUFDSixRQUFJQSxhQUFZLFFBQVE7QUFDdEIsTUFBQUEsV0FBVSxDQUFDO0FBQUEsSUFDYjtBQUNBLFVBQU07QUFBQSxNQUNKO0FBQUEsTUFDQTtBQUFBLE1BQ0EsVUFBQUM7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGLElBQUk7QUFDSixVQUFNO0FBQUEsTUFDSixXQUFXO0FBQUEsTUFDWCxlQUFlO0FBQUEsTUFDZixpQkFBaUI7QUFBQSxNQUNqQixjQUFjO0FBQUEsTUFDZCxVQUFVO0FBQUEsSUFDWixJQUFJLFNBQVNELFVBQVMsS0FBSztBQUMzQixVQUFNLGdCQUFnQixpQkFBaUIsT0FBTztBQUM5QyxVQUFNLGFBQWEsbUJBQW1CLGFBQWEsY0FBYztBQUNqRSxVQUFNLFVBQVUsU0FBUyxjQUFjLGFBQWEsY0FBYztBQUNsRSxVQUFNLHFCQUFxQkUsa0JBQWlCLE1BQU1ELFVBQVMsZ0JBQWdCO0FBQUEsTUFDekUsV0FBVyx3QkFBd0IsT0FBT0EsVUFBUyxhQUFhLE9BQU8sU0FBU0EsVUFBUyxVQUFVLE9BQU8sT0FBTyxPQUFPLHdCQUF3QixRQUFRLFVBQVUsUUFBUSxrQkFBbUIsT0FBT0EsVUFBUyxzQkFBc0IsT0FBTyxTQUFTQSxVQUFTLG1CQUFtQixTQUFTLFFBQVE7QUFBQSxNQUNoUztBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRixDQUFDLENBQUM7QUFDRixVQUFNLE9BQU8sbUJBQW1CLGFBQWE7QUFBQSxNQUMzQztBQUFBLE1BQ0E7QUFBQSxNQUNBLE9BQU8sTUFBTSxTQUFTO0FBQUEsTUFDdEIsUUFBUSxNQUFNLFNBQVM7QUFBQSxJQUN6QixJQUFJLE1BQU07QUFDVixVQUFNLGVBQWUsT0FBT0EsVUFBUyxtQkFBbUIsT0FBTyxTQUFTQSxVQUFTLGdCQUFnQixTQUFTLFFBQVE7QUFDbEgsVUFBTSxjQUFlLE9BQU9BLFVBQVMsYUFBYSxPQUFPLFNBQVNBLFVBQVMsVUFBVSxZQUFZLEtBQU8sT0FBT0EsVUFBUyxZQUFZLE9BQU8sU0FBU0EsVUFBUyxTQUFTLFlBQVksTUFBTztBQUFBLE1BQ3ZMLEdBQUc7QUFBQSxNQUNILEdBQUc7QUFBQSxJQUNMLElBQUk7QUFBQSxNQUNGLEdBQUc7QUFBQSxNQUNILEdBQUc7QUFBQSxJQUNMO0FBQ0EsVUFBTSxvQkFBb0JDLGtCQUFpQkQsVUFBUyx3REFBd0QsTUFBTUEsVUFBUyxzREFBc0Q7QUFBQSxNQUMvSztBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0YsQ0FBQyxJQUFJLElBQUk7QUFDVCxXQUFPO0FBQUEsTUFDTCxNQUFNLG1CQUFtQixNQUFNLGtCQUFrQixNQUFNLGNBQWMsT0FBTyxZQUFZO0FBQUEsTUFDeEYsU0FBUyxrQkFBa0IsU0FBUyxtQkFBbUIsU0FBUyxjQUFjLFVBQVUsWUFBWTtBQUFBLE1BQ3BHLE9BQU8sbUJBQW1CLE9BQU8sa0JBQWtCLE9BQU8sY0FBYyxRQUFRLFlBQVk7QUFBQSxNQUM1RixRQUFRLGtCQUFrQixRQUFRLG1CQUFtQixRQUFRLGNBQWMsU0FBUyxZQUFZO0FBQUEsSUFDbEc7QUFBQSxFQUNGO0FBb0ZBLFdBQVMsaUJBQWlCLFdBQVcsZUFBZSxtQkFBbUI7QUFDckUsVUFBTSxxQ0FBcUMsWUFBWSxDQUFDLEdBQUcsa0JBQWtCLE9BQU8sZUFBYSxhQUFhLFNBQVMsTUFBTSxTQUFTLEdBQUcsR0FBRyxrQkFBa0IsT0FBTyxlQUFhLGFBQWEsU0FBUyxNQUFNLFNBQVMsQ0FBQyxJQUFJLGtCQUFrQixPQUFPLGVBQWEsUUFBUSxTQUFTLE1BQU0sU0FBUztBQUNsUyxXQUFPLG1DQUFtQyxPQUFPLGVBQWE7QUFDNUQsVUFBSSxXQUFXO0FBQ2IsZUFBTyxhQUFhLFNBQVMsTUFBTSxjQUFjLGdCQUFnQiw4QkFBOEIsU0FBUyxNQUFNLFlBQVk7QUFBQSxNQUM1SDtBQUNBLGFBQU87QUFBQSxJQUNULENBQUM7QUFBQSxFQUNIO0FBd2FBLGlCQUFlLHFCQUFxQixPQUFPRCxVQUFTO0FBQ2xELFVBQU07QUFBQSxNQUNKO0FBQUEsTUFDQSxVQUFBQztBQUFBLE1BQ0E7QUFBQSxJQUNGLElBQUk7QUFDSixVQUFNLE1BQU0sT0FBT0EsVUFBUyxTQUFTLE9BQU8sU0FBU0EsVUFBUyxNQUFNLFNBQVMsUUFBUTtBQUNyRixVQUFNLE9BQU8sUUFBUSxTQUFTO0FBQzlCLFVBQU0sWUFBWSxhQUFhLFNBQVM7QUFDeEMsVUFBTSxhQUFhLFlBQVksU0FBUyxNQUFNO0FBQzlDLFVBQU0sZ0JBQWdCLENBQUMsUUFBUSxLQUFLLEVBQUUsU0FBUyxJQUFJLElBQUksS0FBSztBQUM1RCxVQUFNLGlCQUFpQixPQUFPLGFBQWEsS0FBSztBQUNoRCxVQUFNLFdBQVcsU0FBU0QsVUFBUyxLQUFLO0FBR3hDLFFBQUk7QUFBQSxNQUNGO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGLElBQUksT0FBTyxhQUFhLFdBQVc7QUFBQSxNQUNqQyxVQUFVO0FBQUEsTUFDVixXQUFXO0FBQUEsTUFDWCxlQUFlO0FBQUEsSUFDakIsSUFBSTtBQUFBLE1BQ0YsVUFBVSxTQUFTLFlBQVk7QUFBQSxNQUMvQixXQUFXLFNBQVMsYUFBYTtBQUFBLE1BQ2pDLGVBQWUsU0FBUztBQUFBLElBQzFCO0FBQ0EsUUFBSSxhQUFhLE9BQU8sa0JBQWtCLFVBQVU7QUFDbEQsa0JBQVksY0FBYyxRQUFRLGdCQUFnQixLQUFLO0FBQUEsSUFDekQ7QUFDQSxXQUFPLGFBQWE7QUFBQSxNQUNsQixHQUFHLFlBQVk7QUFBQSxNQUNmLEdBQUcsV0FBVztBQUFBLElBQ2hCLElBQUk7QUFBQSxNQUNGLEdBQUcsV0FBVztBQUFBLE1BQ2QsR0FBRyxZQUFZO0FBQUEsSUFDakI7QUFBQSxFQUNGO0FBL3ZCQSxNQWtFTSxpQkEwSkFHLFFBNEZBLGVBOEZBQyxPQWtYQUMsU0F1Q0EsT0FtSkE7QUFsOEJOO0FBQUE7QUFBQTtBQUNBO0FBaUVBLE1BQU0sa0JBQWtCLE9BQU9QLFlBQVcsVUFBVVEsWUFBVztBQUM3RCxjQUFNO0FBQUEsVUFDSixZQUFZO0FBQUEsVUFDWixXQUFXO0FBQUEsVUFDWCxhQUFhLENBQUM7QUFBQSxVQUNkLFVBQUFMO0FBQUEsUUFDRixJQUFJSztBQUNKLGNBQU0sa0JBQWtCLFdBQVcsT0FBTyxPQUFPO0FBQ2pELGNBQU0sTUFBTSxPQUFPTCxVQUFTLFNBQVMsT0FBTyxTQUFTQSxVQUFTLE1BQU0sUUFBUTtBQUM1RSxZQUFJLFFBQVEsTUFBTUEsVUFBUyxnQkFBZ0I7QUFBQSxVQUN6QyxXQUFBSDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRixDQUFDO0FBQ0QsWUFBSTtBQUFBLFVBQ0Y7QUFBQSxVQUNBO0FBQUEsUUFDRixJQUFJLDJCQUEyQixPQUFPLFdBQVcsR0FBRztBQUNwRCxZQUFJLG9CQUFvQjtBQUN4QixZQUFJLGlCQUFpQixDQUFDO0FBQ3RCLFlBQUksYUFBYTtBQUNqQixpQkFBUyxJQUFJLEdBQUcsSUFBSSxnQkFBZ0IsUUFBUSxLQUFLO0FBQy9DLGdCQUFNO0FBQUEsWUFDSjtBQUFBLFlBQ0EsSUFBQVM7QUFBQSxVQUNGLElBQUksZ0JBQWdCLENBQUM7QUFDckIsZ0JBQU07QUFBQSxZQUNKLEdBQUc7QUFBQSxZQUNILEdBQUc7QUFBQSxZQUNIO0FBQUEsWUFDQTtBQUFBLFVBQ0YsSUFBSSxNQUFNQSxJQUFHO0FBQUEsWUFDWDtBQUFBLFlBQ0E7QUFBQSxZQUNBLGtCQUFrQjtBQUFBLFlBQ2xCLFdBQVc7QUFBQSxZQUNYO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBLFVBQUFOO0FBQUEsWUFDQSxVQUFVO0FBQUEsY0FDUixXQUFBSDtBQUFBLGNBQ0E7QUFBQSxZQUNGO0FBQUEsVUFDRixDQUFDO0FBQ0QsY0FBSSxTQUFTLE9BQU8sUUFBUTtBQUM1QixjQUFJLFNBQVMsT0FBTyxRQUFRO0FBQzVCLDJCQUFpQjtBQUFBLFlBQ2YsR0FBRztBQUFBLFlBQ0gsQ0FBQyxJQUFJLEdBQUc7QUFBQSxjQUNOLEdBQUcsZUFBZSxJQUFJO0FBQUEsY0FDdEIsR0FBRztBQUFBLFlBQ0w7QUFBQSxVQUNGO0FBQ0EsY0FBSSxTQUFTLGNBQWMsSUFBSTtBQUM3QjtBQUNBLGdCQUFJLE9BQU8sVUFBVSxVQUFVO0FBQzdCLGtCQUFJLE1BQU0sV0FBVztBQUNuQixvQ0FBb0IsTUFBTTtBQUFBLGNBQzVCO0FBQ0Esa0JBQUksTUFBTSxPQUFPO0FBQ2Ysd0JBQVEsTUFBTSxVQUFVLE9BQU8sTUFBTUcsVUFBUyxnQkFBZ0I7QUFBQSxrQkFDNUQsV0FBQUg7QUFBQSxrQkFDQTtBQUFBLGtCQUNBO0FBQUEsZ0JBQ0YsQ0FBQyxJQUFJLE1BQU07QUFBQSxjQUNiO0FBQ0EsZUFBQztBQUFBLGdCQUNDO0FBQUEsZ0JBQ0E7QUFBQSxjQUNGLElBQUksMkJBQTJCLE9BQU8sbUJBQW1CLEdBQUc7QUFBQSxZQUM5RDtBQUNBLGdCQUFJO0FBQUEsVUFDTjtBQUFBLFFBQ0Y7QUFDQSxlQUFPO0FBQUEsVUFDTDtBQUFBLFVBQ0E7QUFBQSxVQUNBLFdBQVc7QUFBQSxVQUNYO0FBQUEsVUFDQTtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBd0VBLE1BQU1LLFNBQVEsQ0FBQUgsY0FBWTtBQUFBLFFBQ3hCLE1BQU07QUFBQSxRQUNOLFNBQUFBO0FBQUEsUUFDQSxNQUFNLEdBQUcsT0FBTztBQUNkLGdCQUFNO0FBQUEsWUFDSjtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0EsVUFBQUM7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFVBQ0YsSUFBSTtBQUVKLGdCQUFNO0FBQUEsWUFDSjtBQUFBLFlBQ0EsVUFBVTtBQUFBLFVBQ1osSUFBSSxTQUFTRCxVQUFTLEtBQUssS0FBSyxDQUFDO0FBQ2pDLGNBQUksV0FBVyxNQUFNO0FBQ25CLG1CQUFPLENBQUM7QUFBQSxVQUNWO0FBQ0EsZ0JBQU0sZ0JBQWdCLGlCQUFpQixPQUFPO0FBQzlDLGdCQUFNLFNBQVM7QUFBQSxZQUNiO0FBQUEsWUFDQTtBQUFBLFVBQ0Y7QUFDQSxnQkFBTSxPQUFPLGlCQUFpQixTQUFTO0FBQ3ZDLGdCQUFNLFNBQVMsY0FBYyxJQUFJO0FBQ2pDLGdCQUFNLGtCQUFrQixNQUFNQyxVQUFTLGNBQWMsT0FBTztBQUM1RCxnQkFBTSxVQUFVLFNBQVM7QUFDekIsZ0JBQU0sVUFBVSxVQUFVLFFBQVE7QUFDbEMsZ0JBQU0sVUFBVSxVQUFVLFdBQVc7QUFDckMsZ0JBQU0sYUFBYSxVQUFVLGlCQUFpQjtBQUM5QyxnQkFBTSxVQUFVLE1BQU0sVUFBVSxNQUFNLElBQUksTUFBTSxVQUFVLElBQUksSUFBSSxPQUFPLElBQUksSUFBSSxNQUFNLFNBQVMsTUFBTTtBQUN0RyxnQkFBTSxZQUFZLE9BQU8sSUFBSSxJQUFJLE1BQU0sVUFBVSxJQUFJO0FBQ3JELGdCQUFNLG9CQUFvQixPQUFPQSxVQUFTLG1CQUFtQixPQUFPLFNBQVNBLFVBQVMsZ0JBQWdCLE9BQU87QUFDN0csY0FBSSxhQUFhLG9CQUFvQixrQkFBa0IsVUFBVSxJQUFJO0FBR3JFLGNBQUksQ0FBQyxjQUFjLENBQUUsT0FBT0EsVUFBUyxhQUFhLE9BQU8sU0FBU0EsVUFBUyxVQUFVLGlCQUFpQixJQUFLO0FBQ3pHLHlCQUFhLFNBQVMsU0FBUyxVQUFVLEtBQUssTUFBTSxTQUFTLE1BQU07QUFBQSxVQUNyRTtBQUNBLGdCQUFNLG9CQUFvQixVQUFVLElBQUksWUFBWTtBQUlwRCxnQkFBTSx5QkFBeUIsYUFBYSxJQUFJLGdCQUFnQixNQUFNLElBQUksSUFBSTtBQUM5RSxnQkFBTSxhQUFhTyxLQUFJLGNBQWMsT0FBTyxHQUFHLHNCQUFzQjtBQUNyRSxnQkFBTSxhQUFhQSxLQUFJLGNBQWMsT0FBTyxHQUFHLHNCQUFzQjtBQUlyRSxnQkFBTSxRQUFRO0FBQ2QsZ0JBQU1DLE9BQU0sYUFBYSxnQkFBZ0IsTUFBTSxJQUFJO0FBQ25ELGdCQUFNLFNBQVMsYUFBYSxJQUFJLGdCQUFnQixNQUFNLElBQUksSUFBSTtBQUM5RCxnQkFBTUosVUFBUyxNQUFNLE9BQU8sUUFBUUksSUFBRztBQU12QyxnQkFBTSxrQkFBa0IsQ0FBQyxlQUFlLFNBQVMsYUFBYSxTQUFTLEtBQUssUUFBUSxXQUFXSixXQUFVLE1BQU0sVUFBVSxNQUFNLElBQUksS0FBSyxTQUFTLFFBQVEsYUFBYSxjQUFjLGdCQUFnQixNQUFNLElBQUksSUFBSTtBQUNsTixnQkFBTSxrQkFBa0Isa0JBQWtCLFNBQVMsUUFBUSxTQUFTLFFBQVEsU0FBU0ksT0FBTTtBQUMzRixpQkFBTztBQUFBLFlBQ0wsQ0FBQyxJQUFJLEdBQUcsT0FBTyxJQUFJLElBQUk7QUFBQSxZQUN2QixNQUFNO0FBQUEsY0FDSixDQUFDLElBQUksR0FBR0o7QUFBQSxjQUNSLGNBQWMsU0FBU0EsVUFBUztBQUFBLGNBQ2hDLEdBQUksbUJBQW1CO0FBQUEsZ0JBQ3JCO0FBQUEsY0FDRjtBQUFBLFlBQ0Y7QUFBQSxZQUNBLE9BQU87QUFBQSxVQUNUO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFpQkEsTUFBTSxnQkFBZ0IsU0FBVUwsVUFBUztBQUN2QyxZQUFJQSxhQUFZLFFBQVE7QUFDdEIsVUFBQUEsV0FBVSxDQUFDO0FBQUEsUUFDYjtBQUNBLGVBQU87QUFBQSxVQUNMLE1BQU07QUFBQSxVQUNOLFNBQUFBO0FBQUEsVUFDQSxNQUFNLEdBQUcsT0FBTztBQUNkLGdCQUFJLHVCQUF1Qix3QkFBd0I7QUFDbkQsa0JBQU07QUFBQSxjQUNKO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxjQUNBLFVBQUFDO0FBQUEsY0FDQTtBQUFBLFlBQ0YsSUFBSTtBQUNKLGtCQUFNO0FBQUEsY0FDSixZQUFZO0FBQUEsY0FDWjtBQUFBLGNBQ0Esb0JBQW9CUztBQUFBLGNBQ3BCLGdCQUFnQjtBQUFBLGNBQ2hCLEdBQUc7QUFBQSxZQUNMLElBQUksU0FBU1YsVUFBUyxLQUFLO0FBQzNCLGtCQUFNLGVBQWUsY0FBYyxVQUFhLHNCQUFzQlUsY0FBYSxpQkFBaUIsYUFBYSxNQUFNLGVBQWUsaUJBQWlCLElBQUk7QUFDM0osa0JBQU0sV0FBVyxNQUFNWCxnQkFBZSxPQUFPLHFCQUFxQjtBQUNsRSxrQkFBTSxpQkFBaUIsd0JBQXdCLGVBQWUsa0JBQWtCLE9BQU8sU0FBUyxzQkFBc0IsVUFBVTtBQUNoSSxrQkFBTSxtQkFBbUIsYUFBYSxZQUFZO0FBQ2xELGdCQUFJLG9CQUFvQixNQUFNO0FBQzVCLHFCQUFPLENBQUM7QUFBQSxZQUNWO0FBQ0Esa0JBQU0saUJBQWlCLGtCQUFrQixrQkFBa0IsT0FBTyxPQUFPRSxVQUFTLFNBQVMsT0FBTyxTQUFTQSxVQUFTLE1BQU0sU0FBUyxRQUFRLEVBQUU7QUFHN0ksZ0JBQUksY0FBYyxrQkFBa0I7QUFDbEMscUJBQU87QUFBQSxnQkFDTCxPQUFPO0FBQUEsa0JBQ0wsV0FBVyxhQUFhLENBQUM7QUFBQSxnQkFDM0I7QUFBQSxjQUNGO0FBQUEsWUFDRjtBQUNBLGtCQUFNLG1CQUFtQixDQUFDLFNBQVMsUUFBUSxnQkFBZ0IsQ0FBQyxHQUFHLFNBQVMsZUFBZSxDQUFDLENBQUMsR0FBRyxTQUFTLGVBQWUsQ0FBQyxDQUFDLENBQUM7QUFDdkgsa0JBQU0sZUFBZSxDQUFDLEtBQU0seUJBQXlCLGVBQWUsa0JBQWtCLE9BQU8sU0FBUyx1QkFBdUIsY0FBYyxDQUFDLEdBQUk7QUFBQSxjQUM5SSxXQUFXO0FBQUEsY0FDWCxXQUFXO0FBQUEsWUFDYixDQUFDO0FBQ0Qsa0JBQU0sZ0JBQWdCLGFBQWEsZUFBZSxDQUFDO0FBR25ELGdCQUFJLGVBQWU7QUFDakIscUJBQU87QUFBQSxnQkFDTCxNQUFNO0FBQUEsa0JBQ0osT0FBTyxlQUFlO0FBQUEsa0JBQ3RCLFdBQVc7QUFBQSxnQkFDYjtBQUFBLGdCQUNBLE9BQU87QUFBQSxrQkFDTCxXQUFXO0FBQUEsZ0JBQ2I7QUFBQSxjQUNGO0FBQUEsWUFDRjtBQUNBLGtCQUFNLDhCQUE4QixhQUFhLElBQUksT0FBSztBQUN4RCxvQkFBTVUsYUFBWSxhQUFhLEVBQUUsU0FBUztBQUMxQyxxQkFBTyxDQUFDLEVBQUUsV0FBV0EsY0FBYTtBQUFBO0FBQUEsZ0JBRWxDLEVBQUUsVUFBVSxNQUFNLEdBQUcsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxLQUFLLE1BQU0sTUFBTSxHQUFHLENBQUM7QUFBQTtBQUFBO0FBQUEsZ0JBRXJELEVBQUUsVUFBVSxDQUFDO0FBQUEsaUJBQUcsRUFBRSxTQUFTO0FBQUEsWUFDN0IsQ0FBQyxFQUFFLEtBQUssQ0FBQ0MsSUFBRyxNQUFNQSxHQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUM3QixrQkFBTSw4QkFBOEIsNEJBQTRCLE9BQU8sT0FBSyxFQUFFLENBQUMsRUFBRTtBQUFBLGNBQU07QUFBQTtBQUFBO0FBQUEsY0FHdkYsYUFBYSxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUk7QUFBQSxZQUFDLEVBQUUsTUFBTSxPQUFLLEtBQUssQ0FBQyxDQUFDO0FBQzlDLGtCQUFNLG1CQUFtQix3QkFBd0IsNEJBQTRCLENBQUMsTUFBTSxPQUFPLFNBQVMsc0JBQXNCLENBQUMsTUFBTSw0QkFBNEIsQ0FBQyxFQUFFLENBQUM7QUFDakssZ0JBQUksbUJBQW1CLFdBQVc7QUFDaEMscUJBQU87QUFBQSxnQkFDTCxNQUFNO0FBQUEsa0JBQ0osT0FBTyxlQUFlO0FBQUEsa0JBQ3RCLFdBQVc7QUFBQSxnQkFDYjtBQUFBLGdCQUNBLE9BQU87QUFBQSxrQkFDTCxXQUFXO0FBQUEsZ0JBQ2I7QUFBQSxjQUNGO0FBQUEsWUFDRjtBQUNBLG1CQUFPLENBQUM7QUFBQSxVQUNWO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFRQSxNQUFNUixRQUFPLFNBQVVKLFVBQVM7QUFDOUIsWUFBSUEsYUFBWSxRQUFRO0FBQ3RCLFVBQUFBLFdBQVUsQ0FBQztBQUFBLFFBQ2I7QUFDQSxlQUFPO0FBQUEsVUFDTCxNQUFNO0FBQUEsVUFDTixTQUFBQTtBQUFBLFVBQ0EsTUFBTSxHQUFHLE9BQU87QUFDZCxnQkFBSSx1QkFBdUI7QUFDM0Isa0JBQU07QUFBQSxjQUNKO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsY0FDQSxVQUFBQztBQUFBLGNBQ0E7QUFBQSxZQUNGLElBQUk7QUFDSixrQkFBTTtBQUFBLGNBQ0osVUFBVSxnQkFBZ0I7QUFBQSxjQUMxQixXQUFXLGlCQUFpQjtBQUFBLGNBQzVCLG9CQUFvQjtBQUFBLGNBQ3BCLG1CQUFtQjtBQUFBLGNBQ25CLDRCQUE0QjtBQUFBLGNBQzVCLGdCQUFnQjtBQUFBLGNBQ2hCLEdBQUc7QUFBQSxZQUNMLElBQUksU0FBU0QsVUFBUyxLQUFLO0FBTTNCLGlCQUFLLHdCQUF3QixlQUFlLFVBQVUsUUFBUSxzQkFBc0IsaUJBQWlCO0FBQ25HLHFCQUFPLENBQUM7QUFBQSxZQUNWO0FBQ0Esa0JBQU0sT0FBTyxRQUFRLFNBQVM7QUFDOUIsa0JBQU0sa0JBQWtCLFlBQVksZ0JBQWdCO0FBQ3BELGtCQUFNLGtCQUFrQixRQUFRLGdCQUFnQixNQUFNO0FBQ3RELGtCQUFNLE1BQU0sT0FBT0MsVUFBUyxTQUFTLE9BQU8sU0FBU0EsVUFBUyxNQUFNLFNBQVMsUUFBUTtBQUNyRixrQkFBTSxxQkFBcUIsZ0NBQWdDLG1CQUFtQixDQUFDLGdCQUFnQixDQUFDWSxzQkFBcUIsZ0JBQWdCLENBQUMsSUFBSSxzQkFBc0IsZ0JBQWdCO0FBQ2hMLGtCQUFNLCtCQUErQiw4QkFBOEI7QUFDbkUsZ0JBQUksQ0FBQywrQkFBK0IsOEJBQThCO0FBQ2hFLGlDQUFtQixLQUFLLEdBQUcsMEJBQTBCLGtCQUFrQixlQUFlLDJCQUEyQixHQUFHLENBQUM7QUFBQSxZQUN2SDtBQUNBLGtCQUFNSCxjQUFhLENBQUMsa0JBQWtCLEdBQUcsa0JBQWtCO0FBQzNELGtCQUFNLFdBQVcsTUFBTVgsZ0JBQWUsT0FBTyxxQkFBcUI7QUFDbEUsa0JBQU0sWUFBWSxDQUFDO0FBQ25CLGdCQUFJLGtCQUFrQix1QkFBdUIsZUFBZSxTQUFTLE9BQU8sU0FBUyxxQkFBcUIsY0FBYyxDQUFDO0FBQ3pILGdCQUFJLGVBQWU7QUFDakIsd0JBQVUsS0FBSyxTQUFTLElBQUksQ0FBQztBQUFBLFlBQy9CO0FBQ0EsZ0JBQUksZ0JBQWdCO0FBQ2xCLG9CQUFNZSxTQUFRLGtCQUFrQixXQUFXLE9BQU8sR0FBRztBQUNyRCx3QkFBVSxLQUFLLFNBQVNBLE9BQU0sQ0FBQyxDQUFDLEdBQUcsU0FBU0EsT0FBTSxDQUFDLENBQUMsQ0FBQztBQUFBLFlBQ3ZEO0FBQ0EsNEJBQWdCLENBQUMsR0FBRyxlQUFlO0FBQUEsY0FDakM7QUFBQSxjQUNBO0FBQUEsWUFDRixDQUFDO0FBR0QsZ0JBQUksQ0FBQyxVQUFVLE1BQU0sQ0FBQUMsVUFBUUEsU0FBUSxDQUFDLEdBQUc7QUFDdkMsa0JBQUksdUJBQXVCO0FBQzNCLG9CQUFNLGVBQWUsd0JBQXdCLGVBQWUsU0FBUyxPQUFPLFNBQVMsc0JBQXNCLFVBQVUsS0FBSztBQUMxSCxvQkFBTSxnQkFBZ0JMLFlBQVcsU0FBUztBQUMxQyxrQkFBSSxlQUFlO0FBRWpCLHVCQUFPO0FBQUEsa0JBQ0wsTUFBTTtBQUFBLG9CQUNKLE9BQU87QUFBQSxvQkFDUCxXQUFXO0FBQUEsa0JBQ2I7QUFBQSxrQkFDQSxPQUFPO0FBQUEsb0JBQ0wsV0FBVztBQUFBLGtCQUNiO0FBQUEsZ0JBQ0Y7QUFBQSxjQUNGO0FBSUEsa0JBQUksa0JBQWtCLHdCQUF3QixjQUFjLE9BQU8sT0FBSyxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUNFLElBQUcsTUFBTUEsR0FBRSxVQUFVLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLE9BQU8sU0FBUyxzQkFBc0I7QUFHMUwsa0JBQUksQ0FBQyxnQkFBZ0I7QUFDbkIsd0JBQVEsa0JBQWtCO0FBQUEsa0JBQ3hCLEtBQUssV0FDSDtBQUNFLHdCQUFJO0FBQ0osMEJBQU1JLGNBQWEseUJBQXlCLGNBQWMsT0FBTyxPQUFLO0FBQ3BFLDBCQUFJLDhCQUE4QjtBQUNoQyw4QkFBTSxrQkFBa0IsWUFBWSxFQUFFLFNBQVM7QUFDL0MsK0JBQU8sb0JBQW9CO0FBQUE7QUFBQSx3QkFHM0Isb0JBQW9CO0FBQUEsc0JBQ3RCO0FBQ0EsNkJBQU87QUFBQSxvQkFDVCxDQUFDLEVBQUUsSUFBSSxPQUFLLENBQUMsRUFBRSxXQUFXLEVBQUUsVUFBVSxPQUFPLENBQUFDLGNBQVlBLFlBQVcsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxLQUFLQSxjQUFhLE1BQU1BLFdBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUNMLElBQUcsTUFBTUEsR0FBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sT0FBTyxTQUFTLHVCQUF1QixDQUFDO0FBQ2pNLHdCQUFJSSxZQUFXO0FBQ2IsdUNBQWlCQTtBQUFBLG9CQUNuQjtBQUNBO0FBQUEsa0JBQ0Y7QUFBQSxrQkFDRixLQUFLO0FBQ0gscUNBQWlCO0FBQ2pCO0FBQUEsZ0JBQ0o7QUFBQSxjQUNGO0FBQ0Esa0JBQUksY0FBYyxnQkFBZ0I7QUFDaEMsdUJBQU87QUFBQSxrQkFDTCxPQUFPO0FBQUEsb0JBQ0wsV0FBVztBQUFBLGtCQUNiO0FBQUEsZ0JBQ0Y7QUFBQSxjQUNGO0FBQUEsWUFDRjtBQUNBLG1CQUFPLENBQUM7QUFBQSxVQUNWO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUE0UEEsTUFBTVgsVUFBUyxTQUFVTCxVQUFTO0FBQ2hDLFlBQUlBLGFBQVksUUFBUTtBQUN0QixVQUFBQSxXQUFVO0FBQUEsUUFDWjtBQUNBLGVBQU87QUFBQSxVQUNMLE1BQU07QUFBQSxVQUNOLFNBQUFBO0FBQUEsVUFDQSxNQUFNLEdBQUcsT0FBTztBQUNkLGdCQUFJLHVCQUF1QjtBQUMzQixrQkFBTTtBQUFBLGNBQ0o7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxZQUNGLElBQUk7QUFDSixrQkFBTSxhQUFhLE1BQU0scUJBQXFCLE9BQU9BLFFBQU87QUFJNUQsZ0JBQUksZ0JBQWdCLHdCQUF3QixlQUFlLFdBQVcsT0FBTyxTQUFTLHNCQUFzQixlQUFlLHdCQUF3QixlQUFlLFVBQVUsUUFBUSxzQkFBc0IsaUJBQWlCO0FBQ3pOLHFCQUFPLENBQUM7QUFBQSxZQUNWO0FBQ0EsbUJBQU87QUFBQSxjQUNMLEdBQUcsSUFBSSxXQUFXO0FBQUEsY0FDbEIsR0FBRyxJQUFJLFdBQVc7QUFBQSxjQUNsQixNQUFNO0FBQUEsZ0JBQ0osR0FBRztBQUFBLGdCQUNIO0FBQUEsY0FDRjtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFPQSxNQUFNLFFBQVEsU0FBVUEsVUFBUztBQUMvQixZQUFJQSxhQUFZLFFBQVE7QUFDdEIsVUFBQUEsV0FBVSxDQUFDO0FBQUEsUUFDYjtBQUNBLGVBQU87QUFBQSxVQUNMLE1BQU07QUFBQSxVQUNOLFNBQUFBO0FBQUEsVUFDQSxNQUFNLEdBQUcsT0FBTztBQUNkLGtCQUFNO0FBQUEsY0FDSjtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsWUFDRixJQUFJO0FBQ0osa0JBQU07QUFBQSxjQUNKLFVBQVUsZ0JBQWdCO0FBQUEsY0FDMUIsV0FBVyxpQkFBaUI7QUFBQSxjQUM1QixVQUFVO0FBQUEsZ0JBQ1IsSUFBSSxVQUFRO0FBQ1Ysc0JBQUk7QUFBQSxvQkFDRixHQUFBa0I7QUFBQSxvQkFDQSxHQUFBQztBQUFBLGtCQUNGLElBQUk7QUFDSix5QkFBTztBQUFBLG9CQUNMLEdBQUFEO0FBQUEsb0JBQ0EsR0FBQUM7QUFBQSxrQkFDRjtBQUFBLGdCQUNGO0FBQUEsY0FDRjtBQUFBLGNBQ0EsR0FBRztBQUFBLFlBQ0wsSUFBSSxTQUFTbkIsVUFBUyxLQUFLO0FBQzNCLGtCQUFNLFNBQVM7QUFBQSxjQUNiO0FBQUEsY0FDQTtBQUFBLFlBQ0Y7QUFDQSxrQkFBTSxXQUFXLE1BQU1ELGdCQUFlLE9BQU8scUJBQXFCO0FBQ2xFLGtCQUFNLFlBQVksWUFBWSxRQUFRLFNBQVMsQ0FBQztBQUNoRCxrQkFBTSxXQUFXLGdCQUFnQixTQUFTO0FBQzFDLGdCQUFJLGdCQUFnQixPQUFPLFFBQVE7QUFDbkMsZ0JBQUksaUJBQWlCLE9BQU8sU0FBUztBQUNyQyxnQkFBSSxlQUFlO0FBQ2pCLG9CQUFNLFVBQVUsYUFBYSxNQUFNLFFBQVE7QUFDM0Msb0JBQU0sVUFBVSxhQUFhLE1BQU0sV0FBVztBQUM5QyxvQkFBTVMsT0FBTSxnQkFBZ0IsU0FBUyxPQUFPO0FBQzVDLG9CQUFNQyxPQUFNLGdCQUFnQixTQUFTLE9BQU87QUFDNUMsOEJBQWdCLE1BQU1ELE1BQUssZUFBZUMsSUFBRztBQUFBLFlBQy9DO0FBQ0EsZ0JBQUksZ0JBQWdCO0FBQ2xCLG9CQUFNLFVBQVUsY0FBYyxNQUFNLFFBQVE7QUFDNUMsb0JBQU0sVUFBVSxjQUFjLE1BQU0sV0FBVztBQUMvQyxvQkFBTUQsT0FBTSxpQkFBaUIsU0FBUyxPQUFPO0FBQzdDLG9CQUFNQyxPQUFNLGlCQUFpQixTQUFTLE9BQU87QUFDN0MsK0JBQWlCLE1BQU1ELE1BQUssZ0JBQWdCQyxJQUFHO0FBQUEsWUFDakQ7QUFDQSxrQkFBTSxnQkFBZ0IsUUFBUSxHQUFHO0FBQUEsY0FDL0IsR0FBRztBQUFBLGNBQ0gsQ0FBQyxRQUFRLEdBQUc7QUFBQSxjQUNaLENBQUMsU0FBUyxHQUFHO0FBQUEsWUFDZixDQUFDO0FBQ0QsbUJBQU87QUFBQSxjQUNMLEdBQUc7QUFBQSxjQUNILE1BQU07QUFBQSxnQkFDSixHQUFHLGNBQWMsSUFBSTtBQUFBLGdCQUNyQixHQUFHLGNBQWMsSUFBSTtBQUFBLGdCQUNyQixTQUFTO0FBQUEsa0JBQ1AsQ0FBQyxRQUFRLEdBQUc7QUFBQSxrQkFDWixDQUFDLFNBQVMsR0FBRztBQUFBLGdCQUNmO0FBQUEsY0FDRjtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUE0RUEsTUFBTSxPQUFPLFNBQVVULFVBQVM7QUFDOUIsWUFBSUEsYUFBWSxRQUFRO0FBQ3RCLFVBQUFBLFdBQVUsQ0FBQztBQUFBLFFBQ2I7QUFDQSxlQUFPO0FBQUEsVUFDTCxNQUFNO0FBQUEsVUFDTixTQUFBQTtBQUFBLFVBQ0EsTUFBTSxHQUFHLE9BQU87QUFDZCxnQkFBSSx1QkFBdUI7QUFDM0Isa0JBQU07QUFBQSxjQUNKO0FBQUEsY0FDQTtBQUFBLGNBQ0EsVUFBQUM7QUFBQSxjQUNBO0FBQUEsWUFDRixJQUFJO0FBQ0osa0JBQU07QUFBQSxjQUNKLE9BQUFtQixTQUFRLE1BQU07QUFBQSxjQUFDO0FBQUEsY0FDZixHQUFHO0FBQUEsWUFDTCxJQUFJLFNBQVNwQixVQUFTLEtBQUs7QUFDM0Isa0JBQU0sV0FBVyxNQUFNRCxnQkFBZSxPQUFPLHFCQUFxQjtBQUNsRSxrQkFBTSxPQUFPLFFBQVEsU0FBUztBQUM5QixrQkFBTSxZQUFZLGFBQWEsU0FBUztBQUN4QyxrQkFBTSxVQUFVLFlBQVksU0FBUyxNQUFNO0FBQzNDLGtCQUFNO0FBQUEsY0FDSjtBQUFBLGNBQ0E7QUFBQSxZQUNGLElBQUksTUFBTTtBQUNWLGdCQUFJO0FBQ0osZ0JBQUk7QUFDSixnQkFBSSxTQUFTLFNBQVMsU0FBUyxVQUFVO0FBQ3ZDLDJCQUFhO0FBQ2IsMEJBQVksZUFBZ0IsT0FBT0UsVUFBUyxTQUFTLE9BQU8sU0FBU0EsVUFBUyxNQUFNLFNBQVMsUUFBUSxLQUFNLFVBQVUsU0FBUyxTQUFTO0FBQUEsWUFDekksT0FBTztBQUNMLDBCQUFZO0FBQ1osMkJBQWEsY0FBYyxRQUFRLFFBQVE7QUFBQSxZQUM3QztBQUNBLGtCQUFNLHdCQUF3QixTQUFTLFNBQVMsTUFBTSxTQUFTO0FBQy9ELGtCQUFNLHVCQUF1QixRQUFRLFNBQVMsT0FBTyxTQUFTO0FBQzlELGtCQUFNLDBCQUEwQk8sS0FBSSxTQUFTLFNBQVMsVUFBVSxHQUFHLHFCQUFxQjtBQUN4RixrQkFBTSx5QkFBeUJBLEtBQUksUUFBUSxTQUFTLFNBQVMsR0FBRyxvQkFBb0I7QUFDcEYsa0JBQU0sVUFBVSxDQUFDLE1BQU0sZUFBZTtBQUN0QyxnQkFBSSxrQkFBa0I7QUFDdEIsZ0JBQUksaUJBQWlCO0FBQ3JCLGlCQUFLLHdCQUF3QixNQUFNLGVBQWUsVUFBVSxRQUFRLHNCQUFzQixRQUFRLEdBQUc7QUFDbkcsK0JBQWlCO0FBQUEsWUFDbkI7QUFDQSxpQkFBSyx5QkFBeUIsTUFBTSxlQUFlLFVBQVUsUUFBUSx1QkFBdUIsUUFBUSxHQUFHO0FBQ3JHLGdDQUFrQjtBQUFBLFlBQ3BCO0FBQ0EsZ0JBQUksV0FBVyxDQUFDLFdBQVc7QUFDekIsb0JBQU0sT0FBT0MsS0FBSSxTQUFTLE1BQU0sQ0FBQztBQUNqQyxvQkFBTSxPQUFPQSxLQUFJLFNBQVMsT0FBTyxDQUFDO0FBQ2xDLG9CQUFNLE9BQU9BLEtBQUksU0FBUyxLQUFLLENBQUM7QUFDaEMsb0JBQU0sT0FBT0EsS0FBSSxTQUFTLFFBQVEsQ0FBQztBQUNuQyxrQkFBSSxTQUFTO0FBQ1gsaUNBQWlCLFFBQVEsS0FBSyxTQUFTLEtBQUssU0FBUyxJQUFJLE9BQU8sT0FBT0EsS0FBSSxTQUFTLE1BQU0sU0FBUyxLQUFLO0FBQUEsY0FDMUcsT0FBTztBQUNMLGtDQUFrQixTQUFTLEtBQUssU0FBUyxLQUFLLFNBQVMsSUFBSSxPQUFPLE9BQU9BLEtBQUksU0FBUyxLQUFLLFNBQVMsTUFBTTtBQUFBLGNBQzVHO0FBQUEsWUFDRjtBQUNBLGtCQUFNVyxPQUFNO0FBQUEsY0FDVixHQUFHO0FBQUEsY0FDSDtBQUFBLGNBQ0E7QUFBQSxZQUNGLENBQUM7QUFDRCxrQkFBTSxpQkFBaUIsTUFBTW5CLFVBQVMsY0FBYyxTQUFTLFFBQVE7QUFDckUsZ0JBQUksVUFBVSxlQUFlLFNBQVMsV0FBVyxlQUFlLFFBQVE7QUFDdEUscUJBQU87QUFBQSxnQkFDTCxPQUFPO0FBQUEsa0JBQ0wsT0FBTztBQUFBLGdCQUNUO0FBQUEsY0FDRjtBQUFBLFlBQ0Y7QUFDQSxtQkFBTyxDQUFDO0FBQUEsVUFDVjtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQUE7QUFBQTs7O0FDOWdDQSxXQUFTLFlBQVk7QUFDbkIsV0FBTyxPQUFPLFdBQVc7QUFBQSxFQUMzQjtBQUNBLFdBQVNvQixhQUFZLE1BQU07QUFDekIsUUFBSUMsUUFBTyxJQUFJLEdBQUc7QUFDaEIsY0FBUSxLQUFLLFlBQVksSUFBSSxZQUFZO0FBQUEsSUFDM0M7QUFJQSxXQUFPO0FBQUEsRUFDVDtBQUNBLFdBQVNDLFdBQVUsTUFBTTtBQUN2QixRQUFJO0FBQ0osWUFBUSxRQUFRLFNBQVMsc0JBQXNCLEtBQUssa0JBQWtCLE9BQU8sU0FBUyxvQkFBb0IsZ0JBQWdCO0FBQUEsRUFDNUg7QUFDQSxXQUFTQyxvQkFBbUIsTUFBTTtBQUNoQyxRQUFJO0FBQ0osWUFBUSxRQUFRRixRQUFPLElBQUksSUFBSSxLQUFLLGdCQUFnQixLQUFLLGFBQWEsT0FBTyxhQUFhLE9BQU8sU0FBUyxLQUFLO0FBQUEsRUFDakg7QUFDQSxXQUFTQSxRQUFPLE9BQU87QUFDckIsUUFBSSxDQUFDLFVBQVUsR0FBRztBQUNoQixhQUFPO0FBQUEsSUFDVDtBQUNBLFdBQU8saUJBQWlCLFFBQVEsaUJBQWlCQyxXQUFVLEtBQUssRUFBRTtBQUFBLEVBQ3BFO0FBQ0EsV0FBU0UsV0FBVSxPQUFPO0FBQ3hCLFFBQUksQ0FBQyxVQUFVLEdBQUc7QUFDaEIsYUFBTztBQUFBLElBQ1Q7QUFDQSxXQUFPLGlCQUFpQixXQUFXLGlCQUFpQkYsV0FBVSxLQUFLLEVBQUU7QUFBQSxFQUN2RTtBQUNBLFdBQVNHLGVBQWMsT0FBTztBQUM1QixRQUFJLENBQUMsVUFBVSxHQUFHO0FBQ2hCLGFBQU87QUFBQSxJQUNUO0FBQ0EsV0FBTyxpQkFBaUIsZUFBZSxpQkFBaUJILFdBQVUsS0FBSyxFQUFFO0FBQUEsRUFDM0U7QUFDQSxXQUFTSSxjQUFhLE9BQU87QUFDM0IsUUFBSSxDQUFDLFVBQVUsS0FBSyxPQUFPLGVBQWUsYUFBYTtBQUNyRCxhQUFPO0FBQUEsSUFDVDtBQUNBLFdBQU8saUJBQWlCLGNBQWMsaUJBQWlCSixXQUFVLEtBQUssRUFBRTtBQUFBLEVBQzFFO0FBQ0EsV0FBUyxrQkFBa0IsU0FBUztBQUNsQyxVQUFNO0FBQUEsTUFDSjtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0YsSUFBSUssa0JBQWlCLE9BQU87QUFDNUIsV0FBTyxrQ0FBa0MsS0FBSyxXQUFXLFlBQVksU0FBUyxLQUFLLENBQUMsQ0FBQyxVQUFVLFVBQVUsRUFBRSxTQUFTLE9BQU87QUFBQSxFQUM3SDtBQUNBLFdBQVNDLGdCQUFlLFNBQVM7QUFDL0IsV0FBTyxDQUFDLFNBQVMsTUFBTSxJQUFJLEVBQUUsU0FBU1IsYUFBWSxPQUFPLENBQUM7QUFBQSxFQUM1RDtBQUNBLFdBQVMsV0FBVyxTQUFTO0FBQzNCLFdBQU8sQ0FBQyxpQkFBaUIsUUFBUSxFQUFFLEtBQUssY0FBWTtBQUNsRCxVQUFJO0FBQ0YsZUFBTyxRQUFRLFFBQVEsUUFBUTtBQUFBLE1BQ2pDLFNBQVMsR0FBRztBQUNWLGVBQU87QUFBQSxNQUNUO0FBQUEsSUFDRixDQUFDO0FBQUEsRUFDSDtBQUNBLFdBQVMsa0JBQWtCLGNBQWM7QUFDdkMsVUFBTSxTQUFTLFNBQVM7QUFDeEIsVUFBTSxNQUFNSSxXQUFVLFlBQVksSUFBSUcsa0JBQWlCLFlBQVksSUFBSTtBQUd2RSxXQUFPLElBQUksY0FBYyxVQUFVLElBQUksZ0JBQWdCLFdBQVcsSUFBSSxnQkFBZ0IsSUFBSSxrQkFBa0IsV0FBVyxVQUFVLENBQUMsV0FBVyxJQUFJLGlCQUFpQixJQUFJLG1CQUFtQixTQUFTLFVBQVUsQ0FBQyxXQUFXLElBQUksU0FBUyxJQUFJLFdBQVcsU0FBUyxVQUFVLENBQUMsYUFBYSxlQUFlLFFBQVEsRUFBRSxLQUFLLFlBQVUsSUFBSSxjQUFjLElBQUksU0FBUyxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsVUFBVSxVQUFVLFNBQVMsRUFBRSxLQUFLLFlBQVUsSUFBSSxXQUFXLElBQUksU0FBUyxLQUFLLENBQUM7QUFBQSxFQUNuYztBQUNBLFdBQVNFLG9CQUFtQixTQUFTO0FBQ25DLFFBQUksY0FBY0MsZUFBYyxPQUFPO0FBQ3ZDLFdBQU9MLGVBQWMsV0FBVyxLQUFLLENBQUMsc0JBQXNCLFdBQVcsR0FBRztBQUN4RSxVQUFJLGtCQUFrQixXQUFXLEdBQUc7QUFDbEMsZUFBTztBQUFBLE1BQ1QsV0FBVyxXQUFXLFdBQVcsR0FBRztBQUNsQyxlQUFPO0FBQUEsTUFDVDtBQUNBLG9CQUFjSyxlQUFjLFdBQVc7QUFBQSxJQUN6QztBQUNBLFdBQU87QUFBQSxFQUNUO0FBQ0EsV0FBUyxXQUFXO0FBQ2xCLFFBQUksT0FBTyxRQUFRLGVBQWUsQ0FBQyxJQUFJLFNBQVUsUUFBTztBQUN4RCxXQUFPLElBQUksU0FBUywyQkFBMkIsTUFBTTtBQUFBLEVBQ3ZEO0FBQ0EsV0FBUyxzQkFBc0IsTUFBTTtBQUNuQyxXQUFPLENBQUMsUUFBUSxRQUFRLFdBQVcsRUFBRSxTQUFTVixhQUFZLElBQUksQ0FBQztBQUFBLEVBQ2pFO0FBQ0EsV0FBU08sa0JBQWlCLFNBQVM7QUFDakMsV0FBT0wsV0FBVSxPQUFPLEVBQUUsaUJBQWlCLE9BQU87QUFBQSxFQUNwRDtBQUNBLFdBQVNTLGVBQWMsU0FBUztBQUM5QixRQUFJUCxXQUFVLE9BQU8sR0FBRztBQUN0QixhQUFPO0FBQUEsUUFDTCxZQUFZLFFBQVE7QUFBQSxRQUNwQixXQUFXLFFBQVE7QUFBQSxNQUNyQjtBQUFBLElBQ0Y7QUFDQSxXQUFPO0FBQUEsTUFDTCxZQUFZLFFBQVE7QUFBQSxNQUNwQixXQUFXLFFBQVE7QUFBQSxJQUNyQjtBQUFBLEVBQ0Y7QUFDQSxXQUFTTSxlQUFjLE1BQU07QUFDM0IsUUFBSVYsYUFBWSxJQUFJLE1BQU0sUUFBUTtBQUNoQyxhQUFPO0FBQUEsSUFDVDtBQUNBLFVBQU07QUFBQTtBQUFBLE1BRU4sS0FBSztBQUFBLE1BRUwsS0FBSztBQUFBLE1BRUxNLGNBQWEsSUFBSSxLQUFLLEtBQUs7QUFBQSxNQUUzQkgsb0JBQW1CLElBQUk7QUFBQTtBQUN2QixXQUFPRyxjQUFhLE1BQU0sSUFBSSxPQUFPLE9BQU87QUFBQSxFQUM5QztBQUNBLFdBQVMsMkJBQTJCLE1BQU07QUFDeEMsVUFBTSxhQUFhSSxlQUFjLElBQUk7QUFDckMsUUFBSSxzQkFBc0IsVUFBVSxHQUFHO0FBQ3JDLGFBQU8sS0FBSyxnQkFBZ0IsS0FBSyxjQUFjLE9BQU8sS0FBSztBQUFBLElBQzdEO0FBQ0EsUUFBSUwsZUFBYyxVQUFVLEtBQUssa0JBQWtCLFVBQVUsR0FBRztBQUM5RCxhQUFPO0FBQUEsSUFDVDtBQUNBLFdBQU8sMkJBQTJCLFVBQVU7QUFBQSxFQUM5QztBQUNBLFdBQVMscUJBQXFCLE1BQU0sTUFBTSxpQkFBaUI7QUFDekQsUUFBSTtBQUNKLFFBQUksU0FBUyxRQUFRO0FBQ25CLGFBQU8sQ0FBQztBQUFBLElBQ1Y7QUFDQSxRQUFJLG9CQUFvQixRQUFRO0FBQzlCLHdCQUFrQjtBQUFBLElBQ3BCO0FBQ0EsVUFBTSxxQkFBcUIsMkJBQTJCLElBQUk7QUFDMUQsVUFBTSxTQUFTLHlCQUF5Qix1QkFBdUIsS0FBSyxrQkFBa0IsT0FBTyxTQUFTLHFCQUFxQjtBQUMzSCxVQUFNLE1BQU1ILFdBQVUsa0JBQWtCO0FBQ3hDLFFBQUksUUFBUTtBQUNWLFlBQU0sZUFBZSxnQkFBZ0IsR0FBRztBQUN4QyxhQUFPLEtBQUssT0FBTyxLQUFLLElBQUksa0JBQWtCLENBQUMsR0FBRyxrQkFBa0Isa0JBQWtCLElBQUkscUJBQXFCLENBQUMsR0FBRyxnQkFBZ0Isa0JBQWtCLHFCQUFxQixZQUFZLElBQUksQ0FBQyxDQUFDO0FBQUEsSUFDOUw7QUFDQSxXQUFPLEtBQUssT0FBTyxvQkFBb0IscUJBQXFCLG9CQUFvQixDQUFDLEdBQUcsZUFBZSxDQUFDO0FBQUEsRUFDdEc7QUFDQSxXQUFTLGdCQUFnQixLQUFLO0FBQzVCLFdBQU8sSUFBSSxVQUFVLE9BQU8sZUFBZSxJQUFJLE1BQU0sSUFBSSxJQUFJLGVBQWU7QUFBQSxFQUM5RTtBQXRKQTtBQUFBO0FBQUE7QUFBQTs7O0FDS0EsV0FBUyxpQkFBaUIsU0FBUztBQUNqQyxVQUFNLE1BQU1VLGtCQUFpQixPQUFPO0FBR3BDLFFBQUksUUFBUSxXQUFXLElBQUksS0FBSyxLQUFLO0FBQ3JDLFFBQUksU0FBUyxXQUFXLElBQUksTUFBTSxLQUFLO0FBQ3ZDLFVBQU0sWUFBWUMsZUFBYyxPQUFPO0FBQ3ZDLFVBQU0sY0FBYyxZQUFZLFFBQVEsY0FBYztBQUN0RCxVQUFNLGVBQWUsWUFBWSxRQUFRLGVBQWU7QUFDeEQsVUFBTSxpQkFBaUJDLE9BQU0sS0FBSyxNQUFNLGVBQWVBLE9BQU0sTUFBTSxNQUFNO0FBQ3pFLFFBQUksZ0JBQWdCO0FBQ2xCLGNBQVE7QUFDUixlQUFTO0FBQUEsSUFDWDtBQUNBLFdBQU87QUFBQSxNQUNMO0FBQUEsTUFDQTtBQUFBLE1BQ0EsR0FBRztBQUFBLElBQ0w7QUFBQSxFQUNGO0FBRUEsV0FBUyxjQUFjLFNBQVM7QUFDOUIsV0FBTyxDQUFDQyxXQUFVLE9BQU8sSUFBSSxRQUFRLGlCQUFpQjtBQUFBLEVBQ3hEO0FBRUEsV0FBUyxTQUFTLFNBQVM7QUFDekIsVUFBTSxhQUFhLGNBQWMsT0FBTztBQUN4QyxRQUFJLENBQUNGLGVBQWMsVUFBVSxHQUFHO0FBQzlCLGFBQU8sYUFBYSxDQUFDO0FBQUEsSUFDdkI7QUFDQSxVQUFNLE9BQU8sV0FBVyxzQkFBc0I7QUFDOUMsVUFBTTtBQUFBLE1BQ0o7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0YsSUFBSSxpQkFBaUIsVUFBVTtBQUMvQixRQUFJLEtBQUssSUFBSUMsT0FBTSxLQUFLLEtBQUssSUFBSSxLQUFLLFNBQVM7QUFDL0MsUUFBSSxLQUFLLElBQUlBLE9BQU0sS0FBSyxNQUFNLElBQUksS0FBSyxVQUFVO0FBSWpELFFBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxTQUFTLENBQUMsR0FBRztBQUM3QixVQUFJO0FBQUEsSUFDTjtBQUNBLFFBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxTQUFTLENBQUMsR0FBRztBQUM3QixVQUFJO0FBQUEsSUFDTjtBQUNBLFdBQU87QUFBQSxNQUNMO0FBQUEsTUFDQTtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBR0EsV0FBUyxpQkFBaUIsU0FBUztBQUNqQyxVQUFNLE1BQU1FLFdBQVUsT0FBTztBQUM3QixRQUFJLENBQUMsU0FBUyxLQUFLLENBQUMsSUFBSSxnQkFBZ0I7QUFDdEMsYUFBTztBQUFBLElBQ1Q7QUFDQSxXQUFPO0FBQUEsTUFDTCxHQUFHLElBQUksZUFBZTtBQUFBLE1BQ3RCLEdBQUcsSUFBSSxlQUFlO0FBQUEsSUFDeEI7QUFBQSxFQUNGO0FBQ0EsV0FBUyx1QkFBdUIsU0FBUyxTQUFTLHNCQUFzQjtBQUN0RSxRQUFJLFlBQVksUUFBUTtBQUN0QixnQkFBVTtBQUFBLElBQ1o7QUFDQSxRQUFJLENBQUMsd0JBQXdCLFdBQVcseUJBQXlCQSxXQUFVLE9BQU8sR0FBRztBQUNuRixhQUFPO0FBQUEsSUFDVDtBQUNBLFdBQU87QUFBQSxFQUNUO0FBRUEsV0FBU0MsdUJBQXNCLFNBQVMsY0FBYyxpQkFBaUIsY0FBYztBQUNuRixRQUFJLGlCQUFpQixRQUFRO0FBQzNCLHFCQUFlO0FBQUEsSUFDakI7QUFDQSxRQUFJLG9CQUFvQixRQUFRO0FBQzlCLHdCQUFrQjtBQUFBLElBQ3BCO0FBQ0EsVUFBTSxhQUFhLFFBQVEsc0JBQXNCO0FBQ2pELFVBQU0sYUFBYSxjQUFjLE9BQU87QUFDeEMsUUFBSSxRQUFRLGFBQWEsQ0FBQztBQUMxQixRQUFJLGNBQWM7QUFDaEIsVUFBSSxjQUFjO0FBQ2hCLFlBQUlGLFdBQVUsWUFBWSxHQUFHO0FBQzNCLGtCQUFRLFNBQVMsWUFBWTtBQUFBLFFBQy9CO0FBQUEsTUFDRixPQUFPO0FBQ0wsZ0JBQVEsU0FBUyxPQUFPO0FBQUEsTUFDMUI7QUFBQSxJQUNGO0FBQ0EsVUFBTSxnQkFBZ0IsdUJBQXVCLFlBQVksaUJBQWlCLFlBQVksSUFBSSxpQkFBaUIsVUFBVSxJQUFJLGFBQWEsQ0FBQztBQUN2SSxRQUFJLEtBQUssV0FBVyxPQUFPLGNBQWMsS0FBSyxNQUFNO0FBQ3BELFFBQUksS0FBSyxXQUFXLE1BQU0sY0FBYyxLQUFLLE1BQU07QUFDbkQsUUFBSSxRQUFRLFdBQVcsUUFBUSxNQUFNO0FBQ3JDLFFBQUksU0FBUyxXQUFXLFNBQVMsTUFBTTtBQUN2QyxRQUFJLFlBQVk7QUFDZCxZQUFNLE1BQU1DLFdBQVUsVUFBVTtBQUNoQyxZQUFNLFlBQVksZ0JBQWdCRCxXQUFVLFlBQVksSUFBSUMsV0FBVSxZQUFZLElBQUk7QUFDdEYsVUFBSSxhQUFhO0FBQ2pCLFVBQUksZ0JBQWdCLGdCQUFnQixVQUFVO0FBQzlDLGFBQU8saUJBQWlCLGdCQUFnQixjQUFjLFlBQVk7QUFDaEUsY0FBTSxjQUFjLFNBQVMsYUFBYTtBQUMxQyxjQUFNLGFBQWEsY0FBYyxzQkFBc0I7QUFDdkQsY0FBTSxNQUFNSixrQkFBaUIsYUFBYTtBQUMxQyxjQUFNTSxRQUFPLFdBQVcsUUFBUSxjQUFjLGFBQWEsV0FBVyxJQUFJLFdBQVcsS0FBSyxZQUFZO0FBQ3RHLGNBQU1DLE9BQU0sV0FBVyxPQUFPLGNBQWMsWUFBWSxXQUFXLElBQUksVUFBVSxLQUFLLFlBQVk7QUFDbEcsYUFBSyxZQUFZO0FBQ2pCLGFBQUssWUFBWTtBQUNqQixpQkFBUyxZQUFZO0FBQ3JCLGtCQUFVLFlBQVk7QUFDdEIsYUFBS0Q7QUFDTCxhQUFLQztBQUNMLHFCQUFhSCxXQUFVLGFBQWE7QUFDcEMsd0JBQWdCLGdCQUFnQixVQUFVO0FBQUEsTUFDNUM7QUFBQSxJQUNGO0FBQ0EsV0FBT0ksa0JBQWlCO0FBQUEsTUFDdEI7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGLENBQUM7QUFBQSxFQUNIO0FBSUEsV0FBU0MscUJBQW9CLFNBQVMsTUFBTTtBQUMxQyxVQUFNLGFBQWFDLGVBQWMsT0FBTyxFQUFFO0FBQzFDLFFBQUksQ0FBQyxNQUFNO0FBQ1QsYUFBT0wsdUJBQXNCTSxvQkFBbUIsT0FBTyxDQUFDLEVBQUUsT0FBTztBQUFBLElBQ25FO0FBQ0EsV0FBTyxLQUFLLE9BQU87QUFBQSxFQUNyQjtBQUVBLFdBQVMsY0FBYyxpQkFBaUIsUUFBUSxrQkFBa0I7QUFDaEUsUUFBSSxxQkFBcUIsUUFBUTtBQUMvQix5QkFBbUI7QUFBQSxJQUNyQjtBQUNBLFVBQU0sV0FBVyxnQkFBZ0Isc0JBQXNCO0FBQ3ZELFVBQU0sSUFBSSxTQUFTLE9BQU8sT0FBTyxjQUFjLG1CQUFtQjtBQUFBO0FBQUEsTUFFbEVGLHFCQUFvQixpQkFBaUIsUUFBUTtBQUFBO0FBQzdDLFVBQU0sSUFBSSxTQUFTLE1BQU0sT0FBTztBQUNoQyxXQUFPO0FBQUEsTUFDTDtBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUVBLFdBQVMsc0RBQXNELE1BQU07QUFDbkUsUUFBSTtBQUFBLE1BQ0Y7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGLElBQUk7QUFDSixVQUFNLFVBQVUsYUFBYTtBQUM3QixVQUFNLGtCQUFrQkUsb0JBQW1CLFlBQVk7QUFDdkQsVUFBTSxXQUFXLFdBQVcsV0FBVyxTQUFTLFFBQVEsSUFBSTtBQUM1RCxRQUFJLGlCQUFpQixtQkFBbUIsWUFBWSxTQUFTO0FBQzNELGFBQU87QUFBQSxJQUNUO0FBQ0EsUUFBSSxTQUFTO0FBQUEsTUFDWCxZQUFZO0FBQUEsTUFDWixXQUFXO0FBQUEsSUFDYjtBQUNBLFFBQUksUUFBUSxhQUFhLENBQUM7QUFDMUIsVUFBTSxVQUFVLGFBQWEsQ0FBQztBQUM5QixVQUFNLDBCQUEwQlYsZUFBYyxZQUFZO0FBQzFELFFBQUksMkJBQTJCLENBQUMsMkJBQTJCLENBQUMsU0FBUztBQUNuRSxVQUFJVyxhQUFZLFlBQVksTUFBTSxVQUFVLGtCQUFrQixlQUFlLEdBQUc7QUFDOUUsaUJBQVNGLGVBQWMsWUFBWTtBQUFBLE1BQ3JDO0FBQ0EsVUFBSVQsZUFBYyxZQUFZLEdBQUc7QUFDL0IsY0FBTSxhQUFhSSx1QkFBc0IsWUFBWTtBQUNyRCxnQkFBUSxTQUFTLFlBQVk7QUFDN0IsZ0JBQVEsSUFBSSxXQUFXLElBQUksYUFBYTtBQUN4QyxnQkFBUSxJQUFJLFdBQVcsSUFBSSxhQUFhO0FBQUEsTUFDMUM7QUFBQSxJQUNGO0FBQ0EsVUFBTSxhQUFhLG1CQUFtQixDQUFDLDJCQUEyQixDQUFDLFVBQVUsY0FBYyxpQkFBaUIsUUFBUSxJQUFJLElBQUksYUFBYSxDQUFDO0FBQzFJLFdBQU87QUFBQSxNQUNMLE9BQU8sS0FBSyxRQUFRLE1BQU07QUFBQSxNQUMxQixRQUFRLEtBQUssU0FBUyxNQUFNO0FBQUEsTUFDNUIsR0FBRyxLQUFLLElBQUksTUFBTSxJQUFJLE9BQU8sYUFBYSxNQUFNLElBQUksUUFBUSxJQUFJLFdBQVc7QUFBQSxNQUMzRSxHQUFHLEtBQUssSUFBSSxNQUFNLElBQUksT0FBTyxZQUFZLE1BQU0sSUFBSSxRQUFRLElBQUksV0FBVztBQUFBLElBQzVFO0FBQUEsRUFDRjtBQUVBLFdBQVMsZUFBZSxTQUFTO0FBQy9CLFdBQU8sTUFBTSxLQUFLLFFBQVEsZUFBZSxDQUFDO0FBQUEsRUFDNUM7QUFJQSxXQUFTUSxpQkFBZ0IsU0FBUztBQUNoQyxVQUFNLE9BQU9GLG9CQUFtQixPQUFPO0FBQ3ZDLFVBQU0sU0FBU0QsZUFBYyxPQUFPO0FBQ3BDLFVBQU0sT0FBTyxRQUFRLGNBQWM7QUFDbkMsVUFBTSxRQUFRSSxLQUFJLEtBQUssYUFBYSxLQUFLLGFBQWEsS0FBSyxhQUFhLEtBQUssV0FBVztBQUN4RixVQUFNLFNBQVNBLEtBQUksS0FBSyxjQUFjLEtBQUssY0FBYyxLQUFLLGNBQWMsS0FBSyxZQUFZO0FBQzdGLFFBQUksSUFBSSxDQUFDLE9BQU8sYUFBYUwscUJBQW9CLE9BQU87QUFDeEQsVUFBTSxJQUFJLENBQUMsT0FBTztBQUNsQixRQUFJVCxrQkFBaUIsSUFBSSxFQUFFLGNBQWMsT0FBTztBQUM5QyxXQUFLYyxLQUFJLEtBQUssYUFBYSxLQUFLLFdBQVcsSUFBSTtBQUFBLElBQ2pEO0FBQ0EsV0FBTztBQUFBLE1BQ0w7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUVBLFdBQVNDLGlCQUFnQixTQUFTLFVBQVU7QUFDMUMsVUFBTSxNQUFNWCxXQUFVLE9BQU87QUFDN0IsVUFBTSxPQUFPTyxvQkFBbUIsT0FBTztBQUN2QyxVQUFNLGlCQUFpQixJQUFJO0FBQzNCLFFBQUksUUFBUSxLQUFLO0FBQ2pCLFFBQUksU0FBUyxLQUFLO0FBQ2xCLFFBQUksSUFBSTtBQUNSLFFBQUksSUFBSTtBQUNSLFFBQUksZ0JBQWdCO0FBQ2xCLGNBQVEsZUFBZTtBQUN2QixlQUFTLGVBQWU7QUFDeEIsWUFBTSxzQkFBc0IsU0FBUztBQUNyQyxVQUFJLENBQUMsdUJBQXVCLHVCQUF1QixhQUFhLFNBQVM7QUFDdkUsWUFBSSxlQUFlO0FBQ25CLFlBQUksZUFBZTtBQUFBLE1BQ3JCO0FBQUEsSUFDRjtBQUNBLFdBQU87QUFBQSxNQUNMO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFHQSxXQUFTSyw0QkFBMkIsU0FBUyxVQUFVO0FBQ3JELFVBQU0sYUFBYVgsdUJBQXNCLFNBQVMsTUFBTSxhQUFhLE9BQU87QUFDNUUsVUFBTUUsT0FBTSxXQUFXLE1BQU0sUUFBUTtBQUNyQyxVQUFNRCxRQUFPLFdBQVcsT0FBTyxRQUFRO0FBQ3ZDLFVBQU0sUUFBUUwsZUFBYyxPQUFPLElBQUksU0FBUyxPQUFPLElBQUksYUFBYSxDQUFDO0FBQ3pFLFVBQU0sUUFBUSxRQUFRLGNBQWMsTUFBTTtBQUMxQyxVQUFNLFNBQVMsUUFBUSxlQUFlLE1BQU07QUFDNUMsVUFBTSxJQUFJSyxRQUFPLE1BQU07QUFDdkIsVUFBTSxJQUFJQyxPQUFNLE1BQU07QUFDdEIsV0FBTztBQUFBLE1BQ0w7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNBLFdBQVMsa0NBQWtDLFNBQVMsa0JBQWtCLFVBQVU7QUFDOUUsUUFBSTtBQUNKLFFBQUkscUJBQXFCLFlBQVk7QUFDbkMsYUFBT1EsaUJBQWdCLFNBQVMsUUFBUTtBQUFBLElBQzFDLFdBQVcscUJBQXFCLFlBQVk7QUFDMUMsYUFBT0YsaUJBQWdCRixvQkFBbUIsT0FBTyxDQUFDO0FBQUEsSUFDcEQsV0FBV1IsV0FBVSxnQkFBZ0IsR0FBRztBQUN0QyxhQUFPYSw0QkFBMkIsa0JBQWtCLFFBQVE7QUFBQSxJQUM5RCxPQUFPO0FBQ0wsWUFBTSxnQkFBZ0IsaUJBQWlCLE9BQU87QUFDOUMsYUFBTztBQUFBLFFBQ0wsR0FBRyxpQkFBaUIsSUFBSSxjQUFjO0FBQUEsUUFDdEMsR0FBRyxpQkFBaUIsSUFBSSxjQUFjO0FBQUEsUUFDdEMsT0FBTyxpQkFBaUI7QUFBQSxRQUN4QixRQUFRLGlCQUFpQjtBQUFBLE1BQzNCO0FBQUEsSUFDRjtBQUNBLFdBQU9SLGtCQUFpQixJQUFJO0FBQUEsRUFDOUI7QUFDQSxXQUFTLHlCQUF5QixTQUFTLFVBQVU7QUFDbkQsVUFBTSxhQUFhUyxlQUFjLE9BQU87QUFDeEMsUUFBSSxlQUFlLFlBQVksQ0FBQ2QsV0FBVSxVQUFVLEtBQUssc0JBQXNCLFVBQVUsR0FBRztBQUMxRixhQUFPO0FBQUEsSUFDVDtBQUNBLFdBQU9ILGtCQUFpQixVQUFVLEVBQUUsYUFBYSxXQUFXLHlCQUF5QixZQUFZLFFBQVE7QUFBQSxFQUMzRztBQUtBLFdBQVMsNEJBQTRCLFNBQVMsT0FBTztBQUNuRCxVQUFNLGVBQWUsTUFBTSxJQUFJLE9BQU87QUFDdEMsUUFBSSxjQUFjO0FBQ2hCLGFBQU87QUFBQSxJQUNUO0FBQ0EsUUFBSSxTQUFTLHFCQUFxQixTQUFTLENBQUMsR0FBRyxLQUFLLEVBQUUsT0FBTyxRQUFNRyxXQUFVLEVBQUUsS0FBS1MsYUFBWSxFQUFFLE1BQU0sTUFBTTtBQUM5RyxRQUFJLHNDQUFzQztBQUMxQyxVQUFNLGlCQUFpQlosa0JBQWlCLE9BQU8sRUFBRSxhQUFhO0FBQzlELFFBQUksY0FBYyxpQkFBaUJpQixlQUFjLE9BQU8sSUFBSTtBQUc1RCxXQUFPZCxXQUFVLFdBQVcsS0FBSyxDQUFDLHNCQUFzQixXQUFXLEdBQUc7QUFDcEUsWUFBTSxnQkFBZ0JILGtCQUFpQixXQUFXO0FBQ2xELFlBQU0sMEJBQTBCLGtCQUFrQixXQUFXO0FBQzdELFVBQUksQ0FBQywyQkFBMkIsY0FBYyxhQUFhLFNBQVM7QUFDbEUsOENBQXNDO0FBQUEsTUFDeEM7QUFDQSxZQUFNLHdCQUF3QixpQkFBaUIsQ0FBQywyQkFBMkIsQ0FBQyxzQ0FBc0MsQ0FBQywyQkFBMkIsY0FBYyxhQUFhLFlBQVksQ0FBQyxDQUFDLHVDQUF1QyxDQUFDLFlBQVksT0FBTyxFQUFFLFNBQVMsb0NBQW9DLFFBQVEsS0FBSyxrQkFBa0IsV0FBVyxLQUFLLENBQUMsMkJBQTJCLHlCQUF5QixTQUFTLFdBQVc7QUFDelosVUFBSSx1QkFBdUI7QUFFekIsaUJBQVMsT0FBTyxPQUFPLGNBQVksYUFBYSxXQUFXO0FBQUEsTUFDN0QsT0FBTztBQUVMLDhDQUFzQztBQUFBLE1BQ3hDO0FBQ0Esb0JBQWNpQixlQUFjLFdBQVc7QUFBQSxJQUN6QztBQUNBLFVBQU0sSUFBSSxTQUFTLE1BQU07QUFDekIsV0FBTztBQUFBLEVBQ1Q7QUFJQSxXQUFTQyxpQkFBZ0IsTUFBTTtBQUM3QixRQUFJO0FBQUEsTUFDRjtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0YsSUFBSTtBQUNKLFVBQU0sMkJBQTJCLGFBQWEsc0JBQXNCLFdBQVcsT0FBTyxJQUFJLENBQUMsSUFBSSw0QkFBNEIsU0FBUyxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsT0FBTyxRQUFRO0FBQ2pLLFVBQU0sb0JBQW9CLENBQUMsR0FBRywwQkFBMEIsWUFBWTtBQUNwRSxVQUFNLHdCQUF3QixrQkFBa0IsQ0FBQztBQUNqRCxVQUFNLGVBQWUsa0JBQWtCLE9BQU8sQ0FBQyxTQUFTLHFCQUFxQjtBQUMzRSxZQUFNLE9BQU8sa0NBQWtDLFNBQVMsa0JBQWtCLFFBQVE7QUFDbEYsY0FBUSxNQUFNSixLQUFJLEtBQUssS0FBSyxRQUFRLEdBQUc7QUFDdkMsY0FBUSxRQUFRSyxLQUFJLEtBQUssT0FBTyxRQUFRLEtBQUs7QUFDN0MsY0FBUSxTQUFTQSxLQUFJLEtBQUssUUFBUSxRQUFRLE1BQU07QUFDaEQsY0FBUSxPQUFPTCxLQUFJLEtBQUssTUFBTSxRQUFRLElBQUk7QUFDMUMsYUFBTztBQUFBLElBQ1QsR0FBRyxrQ0FBa0MsU0FBUyx1QkFBdUIsUUFBUSxDQUFDO0FBQzlFLFdBQU87QUFBQSxNQUNMLE9BQU8sYUFBYSxRQUFRLGFBQWE7QUFBQSxNQUN6QyxRQUFRLGFBQWEsU0FBUyxhQUFhO0FBQUEsTUFDM0MsR0FBRyxhQUFhO0FBQUEsTUFDaEIsR0FBRyxhQUFhO0FBQUEsSUFDbEI7QUFBQSxFQUNGO0FBRUEsV0FBUyxjQUFjLFNBQVM7QUFDOUIsVUFBTTtBQUFBLE1BQ0o7QUFBQSxNQUNBO0FBQUEsSUFDRixJQUFJLGlCQUFpQixPQUFPO0FBQzVCLFdBQU87QUFBQSxNQUNMO0FBQUEsTUFDQTtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRUEsV0FBUyw4QkFBOEIsU0FBUyxjQUFjLFVBQVU7QUFDdEUsVUFBTSwwQkFBMEJiLGVBQWMsWUFBWTtBQUMxRCxVQUFNLGtCQUFrQlUsb0JBQW1CLFlBQVk7QUFDdkQsVUFBTSxVQUFVLGFBQWE7QUFDN0IsVUFBTSxPQUFPTix1QkFBc0IsU0FBUyxNQUFNLFNBQVMsWUFBWTtBQUN2RSxRQUFJLFNBQVM7QUFBQSxNQUNYLFlBQVk7QUFBQSxNQUNaLFdBQVc7QUFBQSxJQUNiO0FBQ0EsVUFBTSxVQUFVLGFBQWEsQ0FBQztBQUM5QixRQUFJLDJCQUEyQixDQUFDLDJCQUEyQixDQUFDLFNBQVM7QUFDbkUsVUFBSU8sYUFBWSxZQUFZLE1BQU0sVUFBVSxrQkFBa0IsZUFBZSxHQUFHO0FBQzlFLGlCQUFTRixlQUFjLFlBQVk7QUFBQSxNQUNyQztBQUNBLFVBQUkseUJBQXlCO0FBQzNCLGNBQU0sYUFBYUwsdUJBQXNCLGNBQWMsTUFBTSxTQUFTLFlBQVk7QUFDbEYsZ0JBQVEsSUFBSSxXQUFXLElBQUksYUFBYTtBQUN4QyxnQkFBUSxJQUFJLFdBQVcsSUFBSSxhQUFhO0FBQUEsTUFDMUMsV0FBVyxpQkFBaUI7QUFHMUIsZ0JBQVEsSUFBSUkscUJBQW9CLGVBQWU7QUFBQSxNQUNqRDtBQUFBLElBQ0Y7QUFDQSxVQUFNLGFBQWEsbUJBQW1CLENBQUMsMkJBQTJCLENBQUMsVUFBVSxjQUFjLGlCQUFpQixNQUFNLElBQUksYUFBYSxDQUFDO0FBQ3BJLFVBQU0sSUFBSSxLQUFLLE9BQU8sT0FBTyxhQUFhLFFBQVEsSUFBSSxXQUFXO0FBQ2pFLFVBQU0sSUFBSSxLQUFLLE1BQU0sT0FBTyxZQUFZLFFBQVEsSUFBSSxXQUFXO0FBQy9ELFdBQU87QUFBQSxNQUNMO0FBQUEsTUFDQTtBQUFBLE1BQ0EsT0FBTyxLQUFLO0FBQUEsTUFDWixRQUFRLEtBQUs7QUFBQSxJQUNmO0FBQUEsRUFDRjtBQUVBLFdBQVMsbUJBQW1CLFNBQVM7QUFDbkMsV0FBT1Qsa0JBQWlCLE9BQU8sRUFBRSxhQUFhO0FBQUEsRUFDaEQ7QUFFQSxXQUFTb0IscUJBQW9CLFNBQVMsVUFBVTtBQUM5QyxRQUFJLENBQUNuQixlQUFjLE9BQU8sS0FBS0Qsa0JBQWlCLE9BQU8sRUFBRSxhQUFhLFNBQVM7QUFDN0UsYUFBTztBQUFBLElBQ1Q7QUFDQSxRQUFJLFVBQVU7QUFDWixhQUFPLFNBQVMsT0FBTztBQUFBLElBQ3pCO0FBQ0EsUUFBSSxrQkFBa0IsUUFBUTtBQU05QixRQUFJVyxvQkFBbUIsT0FBTyxNQUFNLGlCQUFpQjtBQUNuRCx3QkFBa0IsZ0JBQWdCLGNBQWM7QUFBQSxJQUNsRDtBQUNBLFdBQU87QUFBQSxFQUNUO0FBSUEsV0FBU1UsaUJBQWdCLFNBQVMsVUFBVTtBQUMxQyxVQUFNLE1BQU1qQixXQUFVLE9BQU87QUFDN0IsUUFBSSxXQUFXLE9BQU8sR0FBRztBQUN2QixhQUFPO0FBQUEsSUFDVDtBQUNBLFFBQUksQ0FBQ0gsZUFBYyxPQUFPLEdBQUc7QUFDM0IsVUFBSSxrQkFBa0JnQixlQUFjLE9BQU87QUFDM0MsYUFBTyxtQkFBbUIsQ0FBQyxzQkFBc0IsZUFBZSxHQUFHO0FBQ2pFLFlBQUlkLFdBQVUsZUFBZSxLQUFLLENBQUMsbUJBQW1CLGVBQWUsR0FBRztBQUN0RSxpQkFBTztBQUFBLFFBQ1Q7QUFDQSwwQkFBa0JjLGVBQWMsZUFBZTtBQUFBLE1BQ2pEO0FBQ0EsYUFBTztBQUFBLElBQ1Q7QUFDQSxRQUFJLGVBQWVHLHFCQUFvQixTQUFTLFFBQVE7QUFDeEQsV0FBTyxnQkFBZ0JFLGdCQUFlLFlBQVksS0FBSyxtQkFBbUIsWUFBWSxHQUFHO0FBQ3ZGLHFCQUFlRixxQkFBb0IsY0FBYyxRQUFRO0FBQUEsSUFDM0Q7QUFDQSxRQUFJLGdCQUFnQixzQkFBc0IsWUFBWSxLQUFLLG1CQUFtQixZQUFZLEtBQUssQ0FBQyxrQkFBa0IsWUFBWSxHQUFHO0FBQy9ILGFBQU87QUFBQSxJQUNUO0FBQ0EsV0FBTyxnQkFBZ0JHLG9CQUFtQixPQUFPLEtBQUs7QUFBQSxFQUN4RDtBQWlCQSxXQUFTLE1BQU0sU0FBUztBQUN0QixXQUFPdkIsa0JBQWlCLE9BQU8sRUFBRSxjQUFjO0FBQUEsRUFDakQ7QUFnQkEsV0FBUyxZQUFZLFNBQVMsUUFBUTtBQUNwQyxRQUFJLEtBQUs7QUFDVCxRQUFJO0FBQ0osVUFBTSxPQUFPVyxvQkFBbUIsT0FBTztBQUN2QyxhQUFTLFVBQVU7QUFDakIsVUFBSTtBQUNKLG1CQUFhLFNBQVM7QUFDdEIsT0FBQyxNQUFNLE9BQU8sUUFBUSxJQUFJLFdBQVc7QUFDckMsV0FBSztBQUFBLElBQ1A7QUFDQSxhQUFTLFFBQVEsTUFBTSxXQUFXO0FBQ2hDLFVBQUksU0FBUyxRQUFRO0FBQ25CLGVBQU87QUFBQSxNQUNUO0FBQ0EsVUFBSSxjQUFjLFFBQVE7QUFDeEIsb0JBQVk7QUFBQSxNQUNkO0FBQ0EsY0FBUTtBQUNSLFlBQU07QUFBQSxRQUNKLE1BQUFMO0FBQUEsUUFDQSxLQUFBQztBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDRixJQUFJLFFBQVEsc0JBQXNCO0FBQ2xDLFVBQUksQ0FBQyxNQUFNO0FBQ1QsZUFBTztBQUFBLE1BQ1Q7QUFDQSxVQUFJLENBQUMsU0FBUyxDQUFDLFFBQVE7QUFDckI7QUFBQSxNQUNGO0FBQ0EsWUFBTSxXQUFXLE1BQU1BLElBQUc7QUFDMUIsWUFBTSxhQUFhLE1BQU0sS0FBSyxlQUFlRCxRQUFPLE1BQU07QUFDMUQsWUFBTSxjQUFjLE1BQU0sS0FBSyxnQkFBZ0JDLE9BQU0sT0FBTztBQUM1RCxZQUFNLFlBQVksTUFBTUQsS0FBSTtBQUM1QixZQUFNLGFBQWEsQ0FBQyxXQUFXLFFBQVEsQ0FBQyxhQUFhLFFBQVEsQ0FBQyxjQUFjLFFBQVEsQ0FBQyxZQUFZO0FBQ2pHLFlBQU1rQixXQUFVO0FBQUEsUUFDZDtBQUFBLFFBQ0EsV0FBV1YsS0FBSSxHQUFHSyxLQUFJLEdBQUcsU0FBUyxDQUFDLEtBQUs7QUFBQSxNQUMxQztBQUNBLFVBQUksZ0JBQWdCO0FBQ3BCLGVBQVMsY0FBYyxTQUFTO0FBQzlCLGNBQU0sUUFBUSxRQUFRLENBQUMsRUFBRTtBQUN6QixZQUFJLFVBQVUsV0FBVztBQUN2QixjQUFJLENBQUMsZUFBZTtBQUNsQixtQkFBTyxRQUFRO0FBQUEsVUFDakI7QUFDQSxjQUFJLENBQUMsT0FBTztBQUdWLHdCQUFZLFdBQVcsTUFBTTtBQUMzQixzQkFBUSxPQUFPLElBQUk7QUFBQSxZQUNyQixHQUFHLEdBQUk7QUFBQSxVQUNULE9BQU87QUFDTCxvQkFBUSxPQUFPLEtBQUs7QUFBQSxVQUN0QjtBQUFBLFFBQ0Y7QUFDQSx3QkFBZ0I7QUFBQSxNQUNsQjtBQUlBLFVBQUk7QUFDRixhQUFLLElBQUkscUJBQXFCLGVBQWU7QUFBQSxVQUMzQyxHQUFHSztBQUFBO0FBQUEsVUFFSCxNQUFNLEtBQUs7QUFBQSxRQUNiLENBQUM7QUFBQSxNQUNILFNBQVMsR0FBRztBQUNWLGFBQUssSUFBSSxxQkFBcUIsZUFBZUEsUUFBTztBQUFBLE1BQ3REO0FBQ0EsU0FBRyxRQUFRLE9BQU87QUFBQSxJQUNwQjtBQUNBLFlBQVEsSUFBSTtBQUNaLFdBQU87QUFBQSxFQUNUO0FBVUEsV0FBUyxXQUFXQyxZQUFXLFVBQVUsUUFBUUQsVUFBUztBQUN4RCxRQUFJQSxhQUFZLFFBQVE7QUFDdEIsTUFBQUEsV0FBVSxDQUFDO0FBQUEsSUFDYjtBQUNBLFVBQU07QUFBQSxNQUNKLGlCQUFpQjtBQUFBLE1BQ2pCLGlCQUFpQjtBQUFBLE1BQ2pCLGdCQUFnQixPQUFPLG1CQUFtQjtBQUFBLE1BQzFDLGNBQWMsT0FBTyx5QkFBeUI7QUFBQSxNQUM5QyxpQkFBaUI7QUFBQSxJQUNuQixJQUFJQTtBQUNKLFVBQU0sY0FBYyxjQUFjQyxVQUFTO0FBQzNDLFVBQU0sWUFBWSxrQkFBa0IsaUJBQWlCLENBQUMsR0FBSSxjQUFjLHFCQUFxQixXQUFXLElBQUksQ0FBQyxHQUFJLEdBQUcscUJBQXFCLFFBQVEsQ0FBQyxJQUFJLENBQUM7QUFDdkosY0FBVSxRQUFRLGNBQVk7QUFDNUIsd0JBQWtCLFNBQVMsaUJBQWlCLFVBQVUsUUFBUTtBQUFBLFFBQzVELFNBQVM7QUFBQSxNQUNYLENBQUM7QUFDRCx3QkFBa0IsU0FBUyxpQkFBaUIsVUFBVSxNQUFNO0FBQUEsSUFDOUQsQ0FBQztBQUNELFVBQU0sWUFBWSxlQUFlLGNBQWMsWUFBWSxhQUFhLE1BQU0sSUFBSTtBQUNsRixRQUFJLGlCQUFpQjtBQUNyQixRQUFJLGlCQUFpQjtBQUNyQixRQUFJLGVBQWU7QUFDakIsdUJBQWlCLElBQUksZUFBZSxVQUFRO0FBQzFDLFlBQUksQ0FBQyxVQUFVLElBQUk7QUFDbkIsWUFBSSxjQUFjLFdBQVcsV0FBVyxlQUFlLGdCQUFnQjtBQUdyRSx5QkFBZSxVQUFVLFFBQVE7QUFDakMsK0JBQXFCLGNBQWM7QUFDbkMsMkJBQWlCLHNCQUFzQixNQUFNO0FBQzNDLGdCQUFJO0FBQ0osYUFBQyxrQkFBa0IsbUJBQW1CLFFBQVEsZ0JBQWdCLFFBQVEsUUFBUTtBQUFBLFVBQ2hGLENBQUM7QUFBQSxRQUNIO0FBQ0EsZUFBTztBQUFBLE1BQ1QsQ0FBQztBQUNELFVBQUksZUFBZSxDQUFDLGdCQUFnQjtBQUNsQyx1QkFBZSxRQUFRLFdBQVc7QUFBQSxNQUNwQztBQUNBLHFCQUFlLFFBQVEsUUFBUTtBQUFBLElBQ2pDO0FBQ0EsUUFBSTtBQUNKLFFBQUksY0FBYyxpQkFBaUJwQix1QkFBc0JvQixVQUFTLElBQUk7QUFDdEUsUUFBSSxnQkFBZ0I7QUFDbEIsZ0JBQVU7QUFBQSxJQUNaO0FBQ0EsYUFBUyxZQUFZO0FBQ25CLFlBQU0sY0FBY3BCLHVCQUFzQm9CLFVBQVM7QUFDbkQsVUFBSSxnQkFBZ0IsWUFBWSxNQUFNLFlBQVksS0FBSyxZQUFZLE1BQU0sWUFBWSxLQUFLLFlBQVksVUFBVSxZQUFZLFNBQVMsWUFBWSxXQUFXLFlBQVksU0FBUztBQUMvSyxlQUFPO0FBQUEsTUFDVDtBQUNBLG9CQUFjO0FBQ2QsZ0JBQVUsc0JBQXNCLFNBQVM7QUFBQSxJQUMzQztBQUNBLFdBQU87QUFDUCxXQUFPLE1BQU07QUFDWCxVQUFJO0FBQ0osZ0JBQVUsUUFBUSxjQUFZO0FBQzVCLDBCQUFrQixTQUFTLG9CQUFvQixVQUFVLE1BQU07QUFDL0QsMEJBQWtCLFNBQVMsb0JBQW9CLFVBQVUsTUFBTTtBQUFBLE1BQ2pFLENBQUM7QUFDRCxtQkFBYSxRQUFRLFVBQVU7QUFDL0IsT0FBQyxtQkFBbUIsbUJBQW1CLFFBQVEsaUJBQWlCLFdBQVc7QUFDM0UsdUJBQWlCO0FBQ2pCLFVBQUksZ0JBQWdCO0FBQ2xCLDZCQUFxQixPQUFPO0FBQUEsTUFDOUI7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQTNuQkEsTUEwRE0sV0F1WUEsaUJBbUJBLFVBaUxBQyxpQkFTQUMsU0FRQUMsZ0JBT0FDLFFBUUFDLE9BUUFDLE9BY0FDLFFBa0JBQztBQTdzQk47QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQXdEQSxNQUFNLFlBQXlCLDZCQUFhLENBQUM7QUF1WTdDLE1BQU0sa0JBQWtCLGVBQWdCLE1BQU07QUFDNUMsY0FBTSxvQkFBb0IsS0FBSyxtQkFBbUJaO0FBQ2xELGNBQU0sa0JBQWtCLEtBQUs7QUFDN0IsY0FBTSxxQkFBcUIsTUFBTSxnQkFBZ0IsS0FBSyxRQUFRO0FBQzlELGVBQU87QUFBQSxVQUNMLFdBQVcsOEJBQThCLEtBQUssV0FBVyxNQUFNLGtCQUFrQixLQUFLLFFBQVEsR0FBRyxLQUFLLFFBQVE7QUFBQSxVQUM5RyxVQUFVO0FBQUEsWUFDUixHQUFHO0FBQUEsWUFDSCxHQUFHO0FBQUEsWUFDSCxPQUFPLG1CQUFtQjtBQUFBLFlBQzFCLFFBQVEsbUJBQW1CO0FBQUEsVUFDN0I7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQU1BLE1BQU0sV0FBVztBQUFBLFFBQ2Y7QUFBQSxRQUNBLG9CQUFBVjtBQUFBLFFBQ0EsaUJBQUFPO0FBQUEsUUFDQSxpQkFBQUc7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQSxXQUFBbEI7QUFBQSxRQUNBO0FBQUEsTUFDRjtBQXNLQSxNQUFNdUIsa0JBQWlCQTtBQVN2QixNQUFNQyxVQUFTQTtBQVFmLE1BQU1DLGlCQUFnQjtBQU90QixNQUFNQyxTQUFRO0FBUWQsTUFBTUMsUUFBT0E7QUFRYixNQUFNQyxRQUFPO0FBY2IsTUFBTUMsU0FBUUE7QUFrQmQsTUFBTUMsbUJBQWtCLENBQUNSLFlBQVcsVUFBVUQsYUFBWTtBQUl4RCxjQUFNLFFBQVEsb0JBQUksSUFBSTtBQUN0QixjQUFNLGdCQUFnQjtBQUFBLFVBQ3BCO0FBQUEsVUFDQSxHQUFHQTtBQUFBLFFBQ0w7QUFDQSxjQUFNLG9CQUFvQjtBQUFBLFVBQ3hCLEdBQUcsY0FBYztBQUFBLFVBQ2pCLElBQUk7QUFBQSxRQUNOO0FBQ0EsZUFBTyxnQkFBa0JDLFlBQVcsVUFBVTtBQUFBLFVBQzVDLEdBQUc7QUFBQSxVQUNILFVBQVU7QUFBQSxRQUNaLENBQUM7QUFBQSxNQUNIO0FBQUE7QUFBQTs7O0FDeHJCQSxXQUFTLGVBQWUsZ0JBQWdCLGVBQWVTLFVBQVM7QUFDL0QsVUFBTSxPQUFPLFlBQVksRUFBRTtBQUUzQixXQUFPLElBQUksV0FBVyxNQUFNO0FBQzNCLFlBQU0sZUFBZSxlQUFlO0FBQUEsUUFDbkM7QUFBQSxNQUNEO0FBRUEsWUFBTUMsVUFBUyxPQUFPO0FBQUEsUUFDckIsQ0FBQztBQUFBLFFBQ0Q7QUFBQSxVQUNDLFdBQVc7QUFBQSxRQUNaO0FBQUEsUUFDQUQ7QUFBQSxNQUNEO0FBRUEsWUFBTSxhQUFhQyxVQUFTLFlBQVk7QUFDeEMsVUFBSSxDQUFDLFFBQVEsVUFBVSxHQUFHO0FBQ3pCLFlBQUksU0FBUyxVQUFVLEdBQUc7QUFDekIsVUFBQUEsUUFBTyxZQUFZLElBQUksV0FBVyxNQUFNLEdBQUcsRUFBRSxPQUFPLENBQUMsU0FBUztBQUM3RCxtQkFBTyxLQUFLLEtBQUssRUFBRSxTQUFTO0FBQUEsVUFDN0IsQ0FBQztBQUFBLFFBQ0YsT0FBTztBQUNOLFVBQUFBLFFBQU8sWUFBWSxJQUFJLENBQUM7QUFBQSxRQUN6QjtBQUFBLE1BQ0Q7QUFFQSxpQkFBVyxPQUFPLFlBQVk7QUFDN0IsY0FBTSxPQUFPLFdBQVcsR0FBRztBQUMzQixZQUFJLFdBQVcsSUFBSSxHQUFHO0FBQ3JCO0FBQUEsUUFDRDtBQUVBLFlBQUksU0FBUyxJQUFJLEdBQUc7QUFDbkI7QUFBQSxRQUNEO0FBRUEsWUFBSSxDQUFDLFNBQVMsSUFBSSxHQUFHO0FBQ3BCLGdCQUFNLElBQUk7QUFBQSxZQUNULDZEQUE2RCxPQUFPLElBQUk7QUFBQSxVQUN6RTtBQUFBLFFBQ0Q7QUFFQSxjQUFNLEtBQUssS0FBSyxNQUFNLEdBQUc7QUFDekIsY0FBTUMsTUFBSyxHQUFHLE1BQU07QUFFcEIsZ0JBQVFBLEtBQUk7QUFBQSxVQUNYLEtBQUs7QUFDSixZQUFBRCxRQUFPLFlBQVksRUFBRSxHQUFHLElBQUlFLE1BQUs7QUFDakM7QUFBQSxVQUNELEtBQUs7QUFDSixZQUFBRixRQUFPLFlBQVksRUFBRSxHQUFHLElBQUlHLE9BQU07QUFDbEM7QUFBQSxVQUNELEtBQUs7QUFDSixnQkFBSSwyQkFBMkIsQ0FBQyxPQUFPLFVBQVUsUUFBUSxPQUFPO0FBRWhFLGtCQUFNLGVBQWUsSUFBSSxNQUFNO0FBQy9CLGdCQUFJLFNBQVMsWUFBWSxLQUFLLGFBQWEsS0FBSyxFQUFFLFNBQVMsR0FBRztBQUM3RCx5Q0FBMkIsYUFDekIsTUFBTSxHQUFHLEVBQ1QsT0FBTyxDQUFDQyxVQUFTO0FBQ2pCLHVCQUFPQSxNQUFLLEtBQUssRUFBRSxTQUFTO0FBQUEsY0FDN0IsQ0FBQztBQUFBLFlBQ0g7QUFFQSxnQkFBSSx5QkFBeUIsU0FBU0osUUFBTyxTQUFTLEdBQUc7QUFDeEQsdUNBQXlCO0FBQUEsZ0JBQ3hCLHlCQUF5QixRQUFRQSxRQUFPLFNBQVM7QUFBQSxnQkFDakQ7QUFBQSxjQUNEO0FBQUEsWUFDRDtBQUNBLHFDQUF5QixRQUFRQSxRQUFPLFNBQVM7QUFFakQsWUFBQUEsUUFBTyxZQUFZLEVBQUUsR0FBRyxJQUFJSyxlQUFjO0FBQUEsY0FDekMsV0FBVztBQUFBLGNBQ1gsZUFBZTtBQUFBLGNBQ2YsbUJBQW1CO0FBQUEsWUFDcEIsQ0FBQztBQUVEO0FBQUEsVUFDRCxLQUFLO0FBQ0osWUFBQUwsUUFBTyxZQUFZLEVBQUUsR0FBRyxJQUFJTSxnQkFBZTtBQUMzQztBQUFBLFVBQ0QsS0FBSztBQUNKLGdCQUFJLGNBQWM7QUFDakIsY0FBQU4sUUFBTyxZQUFZLEVBQUUsR0FBRyxJQUFJTyxPQUFNLEVBQUUsU0FBUyxhQUFhLENBQUM7QUFBQSxZQUM1RDtBQUNBO0FBQUEsVUFDRCxLQUFLO0FBQ0osWUFBQVAsUUFBTyxZQUFZLEVBQUUsR0FBRyxJQUFJUSxNQUFLO0FBQUEsY0FDaEMsTUFBTSxFQUFFLGdCQUFnQixpQkFBaUIsU0FBUyxHQUFHO0FBQ3BELHNCQUFNLFdBQVcsS0FBSztBQUN0QixzQkFBTSxZQUFZLEtBQUs7QUFFdkIsb0JBQUksaUJBQWlCLEdBQUc7QUFDdkIsbUNBQWlCO0FBQUEsZ0JBQ2xCO0FBRUEsb0JBQUksa0JBQWtCLEdBQUc7QUFDeEIsb0NBQWtCO0FBQUEsZ0JBQ25CO0FBRUEsb0JBQUksaUJBQWlCLFVBQVU7QUFDOUIsbUNBQWlCO0FBQUEsZ0JBQ2xCO0FBRUEsb0JBQUksa0JBQWtCLFdBQVc7QUFDaEMsb0NBQWtCO0FBQUEsZ0JBQ25CO0FBRUEsdUJBQU8sT0FBTyxTQUFTLFNBQVMsT0FBTztBQUFBLGtCQUN0QyxXQUFXO0FBQUEsa0JBQ1gsVUFBVSxHQUFHLGNBQWM7QUFBQSxrQkFDM0IsV0FBVyxHQUFHLGVBQWU7QUFBQSxnQkFDOUIsQ0FBQztBQUFBLGNBQ0Y7QUFBQSxZQUNELENBQUM7QUFDRDtBQUFBLFVBQ0QsS0FBSztBQUNKLGtCQUFNLElBQUksSUFBSSxNQUFNO0FBQ3BCLFlBQUFSLFFBQU8sWUFBWSxFQUFFLEdBQUcsSUFBSVMsUUFBTyxTQUFTLENBQUMsS0FBSyxFQUFFO0FBQ3BEO0FBQUEsVUFDRCxLQUFLO0FBQ0osWUFBQVQsUUFBTyxZQUFZLEVBQUUsR0FBRyxJQUFJLEtBQUs7QUFDakM7QUFBQSxVQUNEO0FBQ0Msa0JBQU0sSUFBSSxNQUFNLHFCQUFxQkMsR0FBRSxFQUFFO0FBQUEsUUFDM0M7QUFBQSxNQUNEO0FBRUEsb0JBQWMsTUFBTSxlQUFlLFlBQVk7QUFDL0Msb0JBQWMsTUFBTSxVQUFVO0FBRTlCLGlCQUFXLGdCQUFnQixlQUFlLE1BQU07QUFDL0MsUUFBQVMsaUJBQWdCLGdCQUFnQixlQUFlVixPQUFNLEVBQUU7QUFBQSxVQUN0RCxDQUFDLEVBQUUsR0FBRyxHQUFHLFdBQVcsZUFBZSxNQUFNO0FBQ3hDLG1CQUFPLE9BQU8sY0FBYyxPQUFPO0FBQUEsY0FDbEMsS0FBSztBQUFBLGNBQ0wsTUFBTTtBQUFBLGNBQ04sV0FBVyxhQUFhLFdBQVcsQ0FBQyxDQUFDLE1BQU0sV0FBVyxDQUFDLENBQUM7QUFBQSxZQUN6RCxDQUFDO0FBRUQsZ0JBQUksZUFBZSxPQUFPO0FBQ3pCLG9CQUFNLE9BQU8sVUFBVSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBRW5DLG9CQUFNLGFBQWE7QUFBQSxnQkFDbEIsS0FBSztBQUFBLGdCQUNMLE9BQU87QUFBQSxnQkFDUCxRQUFRO0FBQUEsZ0JBQ1IsTUFBTTtBQUFBLGNBQ1AsRUFBRSxJQUFJO0FBR04sb0JBQU0sV0FBVyxhQUFhLGNBQWM7QUFFNUMsb0JBQU0sY0FBYztBQUFBLGdCQUNuQixZQUFZO0FBQUEsZ0JBQ1osYUFBYTtBQUFBLGdCQUNiLGNBQWM7QUFBQSxnQkFDZCxXQUFXO0FBQUEsY0FDWjtBQUVBLG9CQUFNLGdCQUNMO0FBRUQsc0JBQVEsTUFBTTtBQUFBLGdCQUNiLEtBQUs7QUFDSiw4QkFBWSxjQUFjO0FBQzFCLDhCQUFZLGVBQWU7QUFDM0I7QUFBQSxnQkFFRCxLQUFLO0FBQ0osOEJBQVksWUFBWTtBQUN4Qiw4QkFBWSxhQUFhO0FBQ3pCO0FBQUEsZ0JBRUQsS0FBSztBQUNKLDhCQUFZLGNBQWM7QUFDMUIsOEJBQVksWUFBWTtBQUN4QjtBQUFBLGdCQUVELEtBQUs7QUFDSiw4QkFBWSxlQUFlO0FBQzNCLDhCQUFZLGFBQWE7QUFDekI7QUFBQSxjQUNGO0FBRUEsb0JBQU0sRUFBRSxHQUFBVyxJQUFHLEdBQUFDLEdBQUUsSUFBSSxlQUFlO0FBRWhDLHFCQUFPO0FBQUEsZ0JBQ04sYUFBYTtBQUFBLGdCQUNiO0FBQUEsa0JBQ0MsTUFBTUQsTUFBSyxPQUFPLEdBQUdBLEVBQUMsT0FBTztBQUFBLGtCQUM3QixLQUFLQyxNQUFLLE9BQU8sR0FBR0EsRUFBQyxPQUFPO0FBQUE7QUFBQTtBQUFBLGtCQUc1QixPQUFPO0FBQUEsa0JBQ1AsUUFBUTtBQUFBLGtCQUNSLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxXQUFXLENBQUM7QUFBQSxrQkFDOUIsV0FBVztBQUFBLGdCQUNaO0FBQUEsZ0JBQ0E7QUFBQSxjQUNEO0FBQUEsWUFDRDtBQUFBLFVBQ0Q7QUFBQSxRQUNEO0FBQUEsTUFDRCxDQUFDO0FBQUEsSUFDRixDQUFDLEVBQUUsSUFBSTtBQUFBLEVBQ1I7QUFFQSxXQUFTLFdBQVcsT0FBTztBQUMxQixVQUFNLE1BQU0sT0FBTyxvQkFBb0I7QUFDdkMsV0FBTyxLQUFLLE1BQU0sUUFBUSxHQUFHLElBQUk7QUFBQSxFQUNsQztBQTNQQTtBQUFBO0FBY0E7QUFXQTtBQUNBO0FBQ0E7QUFBQTtBQUFBOzs7QUMzQkEsTUFxQk07QUFyQk47QUFBQTtBQVlBO0FBQ0EsTUFBQUM7QUFRQSxNQUFNLG1CQUFtQixJQUFJLGNBQWM7QUFFM0MsVUFBSTtBQUNILHlCQUFpQjtBQUFBLFVBQ2hCO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFJQTtBQUFBLFFBQ0Q7QUFBQSxNQUNELFNBQVMsR0FBRztBQUNYO0FBQUEsVUFDQyxTQUFTLFlBQVksRUFBRSxjQUFjLE1BQU07QUFBQSxVQUMzQztBQUFBLFVBQ0EsSUFBSTtBQUFBLFFBQ0w7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDckNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSwrQkFBQUM7QUFBQTtBQTh3QkEsV0FBUyxrQkFBa0I7QUFDMUIsVUFBTUMsUUFBTztBQUViLGVBQVcsTUFBTTtBQUNoQixZQUFNLFlBQVlBLE1BQUssVUFBVSxXQUFXO0FBQzVDLFVBQUksVUFBVSxXQUFXLEdBQUc7QUFDM0I7QUFBQSxNQUNEO0FBRUEsVUFBSUEsTUFBSyxlQUFlLE1BQU0sTUFBTTtBQUNuQztBQUFBLE1BQ0Q7QUFFQSxVQUFJQSxNQUFLLGtCQUFrQixNQUFNLE1BQU07QUFDdEM7QUFBQSxNQUNEO0FBRUEsVUFBSSxNQUFNQSxNQUFLLFVBQVUsS0FBSztBQUM5QixVQUFJLFlBQVlBLE1BQUssVUFBVSxZQUFZO0FBQzNDLFVBQUksY0FBYyxNQUFNO0FBQ3ZCLGNBQU07QUFBQSxNQUNQO0FBRUEsVUFBSSxLQUFLLFVBQVUsaUJBQWlCLE1BQU0sTUFBTTtBQUMvQyxnQ0FDRTtBQUFBLFVBQ0FBO0FBQUEsVUFDQTtBQUFBLFVBQ0EsVUFBVSxJQUFJLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQztBQUFBLFFBQ2xDLEVBQ0MsTUFBTSxDQUFDLE1BQU07QUFDYiw0QkFBa0JBLE9BQU0sd0JBQXdCLEdBQUcsQ0FBQyxFQUFFO0FBQUEsUUFDdkQsQ0FBQztBQUNGO0FBQUEsTUFDRDtBQUVBLGlCQUFXLEtBQUssV0FBVztBQUMxQixZQUFJLElBQUksT0FBTyxHQUFHO0FBQ2pCLGtDQUF3QixLQUFLQSxPQUFNLEtBQUssSUFBSSxPQUFPLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTTtBQUNsRSw4QkFBa0JBLE9BQU0sd0JBQXdCLEdBQUcsQ0FBQyxFQUFFO0FBQUEsVUFDdkQsQ0FBQztBQUFBLFFBQ0Y7QUFBQSxNQUNEO0FBQUEsSUFDRCxHQUFHLEdBQUc7QUFBQSxFQUNQO0FBRUEsV0FBUyxRQUFRLEtBQUssZ0JBQWdCO0FBQ3JDLFFBQUksZUFBZSxLQUFLO0FBQ3ZCLFlBQU0sSUFBSSxTQUFTO0FBQUEsSUFDcEI7QUFFQSxRQUFJLFFBQVEsVUFBYSxRQUFRLE1BQU07QUFDdEMsWUFBTSxlQUFlLEdBQUc7QUFBQSxJQUN6QixPQUFPO0FBQ04sWUFBTSxLQUFLLFVBQVUsS0FBSztBQUMxQixVQUFJLFFBQVEsTUFBTTtBQUNqQixlQUFPLFFBQVEsT0FBTyxJQUFJLE1BQU0sZ0JBQWdCLENBQUM7QUFBQSxNQUNsRDtBQUFBLElBQ0Q7QUFFQSxXQUFPLElBQUksUUFBUSxDQUFDLFNBQVMsV0FBVztBQUN2Qyw4QkFBd0IsS0FBSyxNQUFNLFNBQVM7QUFFNUMsVUFBSSxXQUFXLElBQUksTUFBTTtBQUN4QixrQkFDRSxLQUFLLE1BQU0sR0FBRyxFQUNkLEtBQUssQ0FBQyxRQUFRO0FBQ2QsY0FDQyxTQUFTLEdBQUcsS0FDWixRQUFRLEdBQUcsS0FDWCxlQUFlLE9BQ2YsZUFBZSxLQUNkO0FBQ0QsZ0JBQUk7QUFDSCxtQkFBSyxjQUFjLEdBQUc7QUFBQSxZQUN2QixTQUFTLEdBQUc7QUFDWCxzQ0FBd0IsS0FBSyxNQUFNLE9BQU87QUFDMUMscUJBQU8sQ0FBQztBQUNSO0FBQUEsWUFDRDtBQUVBLGlCQUFLLHFCQUFxQixJQUFJO0FBRTlCLGdCQUFJO0FBQ0osa0JBQU0sWUFBWSxLQUFLLFVBQVUsV0FBVztBQUM1QyxnQkFBSSxXQUFXLENBQUM7QUFDaEIsZ0JBQUksV0FBVztBQUNkLHlCQUFXO0FBQUEsWUFDWixXQUFXLEtBQUssYUFBYSxPQUFPLEdBQUc7QUFDdEMseUJBQVcsS0FBSyxhQUFhLE9BQU87QUFBQSxZQUNyQztBQUVBLHFCQUFTLGFBQWEsS0FBSyxNQUFNLFFBQVE7QUFDekMsa0NBQXNCLE1BQU07QUFDM0IsK0JBQWlCLEtBQUssSUFBSTtBQUMxQixzQ0FBd0IsS0FBSyxNQUFNLFFBQVE7QUFDM0MsMkJBQWEsS0FBSyxJQUFJO0FBQ3RCLHNCQUFRLE1BQU07QUFBQSxZQUNmLENBQUM7QUFFRDtBQUFBLFVBQ0Q7QUFFQSxrQ0FBd0IsS0FBSyxNQUFNLE9BQU87QUFDMUMsaUJBQU8sSUFBSSxNQUFNLGtCQUFrQixDQUFDO0FBQUEsUUFDckMsQ0FBQyxFQUNBLE1BQU0sQ0FBQyxNQUFNO0FBQ2Isa0NBQXdCLEtBQUssTUFBTSxPQUFPO0FBQzFDLGlCQUFPLENBQUM7QUFBQSxRQUNULENBQUM7QUFBQSxNQUNILENBQUMsRUFDQyxJQUFJLEVBQ0osTUFBTSxDQUFDLE1BQU07QUFDYixnQ0FBd0IsS0FBSyxNQUFNLE9BQU87QUFDMUMsMEJBQWtCLE1BQU0sd0JBQXdCLEVBQUUsT0FBTztBQUN6RCxlQUFPLENBQUM7QUFBQSxNQUNULENBQUM7QUFBQSxJQUNILENBQUM7QUFBQSxFQUNGO0FBYUEsV0FBU0MsNEJBQTJCO0FBQ25DLFVBQU1DLFdBQVUsQ0FBQztBQUVqQixVQUFNLFdBQVcsS0FBSyxhQUFhLGdDQUFnQztBQUNuRSxRQUFJLFNBQVMsUUFBUSxHQUFHO0FBQ3ZCLFVBQUksQ0FBQ0EsU0FBUSxpQkFBaUIsRUFBRyxDQUFBQSxTQUFRLGlCQUFpQixJQUFJLENBQUM7QUFFL0QsY0FBUSxVQUFVO0FBQUEsUUFDakIsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNKLFVBQUFBLFNBQVEsaUJBQWlCLEVBQUUsVUFBVSxJQUFJLG1CQUFtQjtBQUM1RDtBQUFBLFFBQ0QsS0FBSztBQUNKLFVBQUFBLFNBQVEsaUJBQWlCLEVBQUUsVUFBVSxJQUFJLHFCQUFxQjtBQUM5RDtBQUFBLFFBQ0Q7QUFDQztBQUFBLFlBQ0M7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFVBQ0Q7QUFBQSxNQUNGO0FBQUEsSUFDRDtBQUVBLFdBQU9BO0FBQUEsRUFDUjtBQUtBLFdBQVNDLHdCQUF1QjtBQUUvQixTQUFLQyxxQkFBb0IsSUFBSSxJQUFJLGVBQWUsQ0FBQyxZQUFZO0FBQzVELFVBQUksS0FBS0Msb0JBQW1CLGFBQWEsZ0JBQWdCO0FBQ3hELFlBQUk7QUFDSCxlQUFLQSxvQkFBbUIsRUFBRSxNQUFNO0FBQ2hDO0FBQUEsUUFDRCxTQUFTLEdBQUc7QUFDWCxpQkFBTyxLQUFLQSxvQkFBbUI7QUFBQSxRQUNoQztBQUFBLE1BQ0Q7QUFFQSxXQUFLQSxvQkFBbUIsSUFBSSxJQUFJLGVBQWUsS0FBSyxNQUFNO0FBQ3pELHFCQUFhLEtBQUssSUFBSTtBQUN0QixlQUFPLEtBQUtBLG9CQUFtQjtBQUFBLE1BQ2hDLENBQUM7QUFBQSxJQUNGLENBQUM7QUFFRCxTQUFLRCxxQkFBb0IsRUFBRSxRQUFRLEtBQUssYUFBYTtBQUFBLEVBQ3REO0FBRUEsV0FBU0UsNEJBQTJCO0FBQ25DLFFBQUksS0FBS0YscUJBQW9CLGFBQWEsZ0JBQWdCO0FBQ3pELFdBQUtBLHFCQUFvQixFQUFFLFdBQVc7QUFBQSxJQUN2QztBQUFBLEVBQ0Q7QUFFQSxXQUFTLHVCQUF1QjtBQUMvQixXQUFPO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBU1I7QUFFQSxXQUFTLHFCQUFxQjtBQUM3QixXQUFPO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBU1I7QUFNQSxXQUFTLHNCQUFzQjtBQUM5QixRQUFJRixXQUFVLEtBQUssVUFBVSxTQUFTO0FBQ3RDLFFBQUksQ0FBQyxXQUFXQSxRQUFPLEdBQUc7QUFDekIsTUFBQUEsV0FBVSxDQUFDO0FBQUEsSUFDWjtBQUVBLFFBQUksVUFBVTtBQUNkLHVCQUFtQixLQUFLLE1BQU0sS0FBSyxFQUFFLFFBQVEsQ0FBQyxTQUFTO0FBQ3RELFVBQUksU0FBUyxXQUFXLFNBQVM7QUFDakMsVUFBSSxhQUFhO0FBRWpCLFVBQUksS0FBSyxhQUFhLG9CQUFvQixHQUFHO0FBQzVDLGdCQUFRLEtBQUssYUFBYSxvQkFBb0I7QUFBQSxNQUMvQztBQUVBLFVBQUksS0FBSyxNQUFNLFlBQVksUUFBUTtBQUNsQyxxQkFBYTtBQUFBLE1BQ2Q7QUFFQSxZQUFNLFFBQVEsS0FBSztBQUVuQixNQUFBQSxTQUFRLEtBQUs7QUFBQSxRQUNaO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNELENBQUM7QUFBQSxJQUNGLENBQUM7QUFFRCw2QkFBeUIsS0FBSyxNQUFNQSxTQUFRLE1BQU07QUFDbEQsU0FBSyxVQUFVLFdBQVdBLFFBQU87QUFBQSxFQUNsQztBQVFBLFdBQVMseUJBQXlCLGNBQWM7QUFDL0MsVUFBTUYsUUFBTztBQUViLFFBQUksQ0FBQ0EsTUFBSyxvQkFBb0IsR0FBRztBQUNoQztBQUFBLElBQ0Q7QUFFQSxVQUFNLFdBQVcsU0FBVSxlQUFlTyxXQUFVO0FBQ25ELFlBQU0sTUFBTTtBQUNaLGlCQUFXLFlBQVksZUFBZTtBQUNyQyxZQUFJLFNBQVMsU0FBUyxhQUFhO0FBQ2xDLGdCQUFNQyxPQUFNO0FBQ1o7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUVBLFVBQUksUUFBUSxNQUFNO0FBQ2pCLGNBQU0sUUFBUVIsTUFBSyxvQkFBb0IsRUFBRTtBQUFBLFVBQ3hDLE9BQU8sY0FBYztBQUFBLFFBQ3RCO0FBRUEsWUFBSSxNQUFNLFdBQVcsY0FBYztBQUNsQywyQkFBaUIsS0FBS0EsS0FBSTtBQUMxQixVQUFBTyxVQUFTLFdBQVc7QUFBQSxRQUNyQjtBQUFBLE1BQ0Q7QUFBQSxJQUNEO0FBRUEsVUFBTSxXQUFXLElBQUksaUJBQWlCLFFBQVE7QUFDOUMsYUFBUyxRQUFRUCxNQUFLLG9CQUFvQixHQUFHO0FBQUEsTUFDNUMsWUFBWTtBQUFBLE1BQ1osV0FBVztBQUFBLE1BQ1gsU0FBUztBQUFBLElBQ1YsQ0FBQztBQUFBLEVBQ0Y7QUFPQSxXQUFTLG9CQUFvQixPQUFPO0FBQ25DLFVBQU1FLFdBQVUsS0FBSyxVQUFVLFNBQVM7QUFFeEMsYUFBUyxJQUFJLEdBQUcsSUFBSUEsU0FBUSxRQUFRLEtBQUs7QUFDeEMsVUFBSSxJQUFJQSxXQUFVLENBQUM7QUFDbkIsVUFBSSxHQUFHLEdBQUc7QUFFVixVQUFJLEtBQUssVUFBVSxtQ0FBbUMsTUFBTSxNQUFNO0FBQ2pFLFlBQUk7QUFBQSxNQUNMLE9BQU87QUFDTixZQUFJLEdBQUcsS0FBSztBQUFBLE1BQ2I7QUFFQSxVQUFJLFlBQVksQ0FBQyxLQUFLLE1BQU0sT0FBTztBQUNsQyxlQUFPO0FBQUEsTUFDUixXQUFXLENBQUMsU0FBUyxDQUFDLEdBQUc7QUFDeEI7QUFBQSxNQUNEO0FBRUEsVUFBSSxLQUFLLFVBQVUsbUNBQW1DLE1BQU0sTUFBTTtBQUNqRSxZQUFJLElBQUksT0FBTztBQUNmLGFBQUssSUFBSSxPQUFPO0FBQUEsTUFDakIsT0FBTztBQUNOLFlBQUksR0FBRyxJQUFJLE9BQU8sQ0FBQztBQUNuQixhQUFLLEdBQUcsSUFBSSxPQUFPLENBQUM7QUFBQSxNQUNyQjtBQUVBLFVBQUksT0FBTyxHQUFHO0FBQ2IsZUFBTztBQUFBLE1BQ1I7QUFBQSxJQUNEO0FBRUEsV0FBTztBQUFBLEVBQ1I7QUFRQSxXQUFTLGtCQUFrQixPQUFPO0FBQ2pDLFVBQU0sV0FBVyxLQUFLLFVBQVUscUJBQXFCO0FBQ3JELFFBQUksV0FBVyxRQUFRLEdBQUc7QUFDekIsWUFBTSxRQUFRLFNBQVMsS0FBSyxNQUFNLEtBQUs7QUFDdkMsVUFBSSxTQUFTLEtBQUssRUFBRyxRQUFPO0FBQUEsSUFDN0I7QUFFQSxRQUFJLFNBQVMsS0FBSyxLQUFLLFVBQVUsS0FBSyxHQUFHO0FBQ3hDLGFBQU8sR0FBRyxLQUFLO0FBQUEsSUFDaEI7QUFFQSxXQUFPLEtBQUssVUFBVSwyQkFBMkIsS0FBSztBQUFBLEVBQ3ZEO0FBTUEsV0FBUywyQkFBMkIsT0FBTztBQUMxQyxZQUFRLFFBQVEsTUFBTSxHQUFHO0FBQUEsTUFDeEIsS0FBSztBQUNKLGVBQU8sS0FBSyxJQUFJO0FBQ2hCLGNBQU0sZUFBZTtBQUNyQjtBQUFBLE1BQ0QsS0FBSztBQUNKLGVBQU8sS0FBSyxJQUFJO0FBQ2hCLGNBQU0sZUFBZTtBQUNyQjtBQUFBLE1BQ0QsS0FBSztBQUNKLFFBQUFPLE1BQUssS0FBSyxJQUFJO0FBQ2QsOEJBQXNCLEtBQUssTUFBTSxvQkFBb0I7QUFDckQsY0FBTSxlQUFlO0FBQ3JCO0FBQUEsTUFDRCxLQUFLO0FBQ0osUUFBQUMsTUFBSyxLQUFLLElBQUk7QUFDZCxjQUFNLGVBQWU7QUFDckI7QUFBQSxJQUNGO0FBQUEsRUFDRDtBQVFBLFdBQVNDLHNCQUFxQjtBQUM3QixVQUFNWCxRQUFPO0FBRWIsSUFBQUEsTUFBSztBQUFBLE1BQ0osSUFBSSxTQUFTLFdBQVk7QUFDeEIsWUFBSSxXQUFXLE1BQU07QUFDcEIsY0FBSTtBQUNILFlBQUFBLE1BQUssV0FBVztBQUFBLFVBQ2pCLFNBQVMsR0FBRztBQUNYLG9CQUFRLE1BQU0sQ0FBQztBQUNmLGtDQUFzQixNQUFNO0FBQzNCLHNDQUF3QixLQUFLQSxPQUFNLE9BQU87QUFBQSxZQUMzQyxDQUFDO0FBQUEsVUFDRjtBQUNBLGNBQUk7QUFDSCx1Q0FBMkIsS0FBS0EsS0FBSTtBQUFBLFVBQ3JDLFNBQVMsR0FBRztBQUNYLG9CQUFRLE1BQU0sQ0FBQztBQUNmLGtDQUFzQixNQUFNO0FBQzNCLHNDQUF3QixLQUFLQSxPQUFNLE9BQU87QUFBQSxZQUMzQyxDQUFDO0FBQUEsVUFDRjtBQUVBLG1DQUF5QixLQUFLQSxLQUFJO0FBQUEsUUFDbkMsQ0FBQyxFQUFFLElBQUk7QUFBQSxNQUNSLENBQUM7QUFBQSxJQUNGO0FBQUEsRUFDRDtBQUVBLFdBQVMsd0JBQXdCO0FBQ2hDLFVBQU0sY0FBYyxJQUFJLGFBQWEsSUFBSSxFQUFFO0FBQUEsTUFDMUMsS0FBSyxVQUFVLFVBQVUsQ0FBQyxDQUFDO0FBQUEsSUFDNUI7QUFFQSxRQUFJO0FBQ0gsWUFBTSxNQUFNLHdCQUF3QjtBQUNwQyxrQkFBWSxTQUFTLElBQUk7QUFBQSxJQUMxQixTQUFTLEdBQUc7QUFBQSxJQUFDO0FBRWIsV0FBTztBQUFBLEVBQ1I7QUFNQSxXQUFTLDJCQUEyQjtBQUNuQyxVQUFNLGVBQWUsc0JBQXNCLEtBQUssSUFBSTtBQUNwRCxVQUFNLGFBQWEsS0FBSyxVQUFVLFdBQVc7QUFFN0MsVUFBTSxPQUFPLGFBQWE7QUFBQSxNQUN6QjtBQUFBLE1BQ0EsV0FBVztBQUFBLE1BQ1g7QUFBQSxJQUNEO0FBRUEsVUFBTSxlQUFlLElBQUksVUFBVTtBQUFBLE1BQ2xDLE9BQU8sT0FBTyxXQUFXLE1BQU07QUFBQSxJQUNoQyxDQUFDLEVBQUUsT0FBTyxJQUFJO0FBRWQsU0FBSyxVQUFVLHFCQUFxQixZQUFZO0FBRWhELFVBQU0sVUFBVSxLQUFLLFVBQVUsa0JBQWtCO0FBQ2pELFVBQU0sTUFBTSxLQUFLLFVBQVUseUJBQXlCO0FBRXBELFFBQ0MsWUFBWSxNQUNaLFlBQVksVUFDWixZQUFZLE9BQ1osWUFBWSxNQUNYO0FBQ0QsVUFBSSxlQUFlLFVBQWEsV0FBVyxXQUFXLEdBQUc7QUFDeEQsYUFBSyxVQUFVLG9CQUFvQixHQUFHO0FBQUEsTUFDdkMsT0FBTztBQUNOLGFBQUssVUFBVSxvQkFBb0IsRUFBRTtBQUFBLE1BQ3RDO0FBQUEsSUFDRDtBQUFBLEVBQ0Q7QUFNQSxXQUFTLG9CQUFvQjtBQUM1QixXQUFPLEtBQUssb0JBQW9CLEVBQUU7QUFBQSxNQUNqQyxJQUFJLGNBQWM7QUFBQSxJQUNuQjtBQUFBLEVBQ0Q7QUFzQkEsV0FBUyw2QkFBNkI7QUFDckMsVUFBTUUsV0FBVSxrQkFBa0IsS0FBSyxJQUFJO0FBQzNDLFVBQU0sWUFBWSxLQUFLLG9CQUFvQjtBQUMzQyxRQUFJLEVBQUUscUJBQXFCLGVBQWVBLG9CQUFtQixXQUFXO0FBQ3ZFO0FBQUEsSUFDRDtBQUVBLFFBQUksVUFBVTtBQUNkLFFBQUksZUFBZTtBQUNuQixVQUFNVSxPQUFNLEtBQUssVUFBVSxrQkFBa0IsRUFBRTtBQUUvQyxRQUFJLGFBQWE7QUFDakIsZUFBVyxDQUFDLEVBQUUsTUFBTSxLQUFLLE9BQU8sUUFBUVYsUUFBTyxHQUFHO0FBQ2pELFlBQU0sZ0JBQWdCLFVBQVUsRUFBRSxpQkFBaUIsTUFBTTtBQUN6RCxVQUFJLGNBQWMsWUFBWSxPQUFRO0FBRXRDLFVBQUksSUFBSSxPQUFPLHNCQUFzQixFQUFFO0FBQ3ZDLFdBQUssU0FBUyxjQUFjLGlCQUFpQixZQUFZLEdBQUcsRUFBRTtBQUM5RCxXQUFLLFNBQVMsY0FBYyxpQkFBaUIsZUFBZSxHQUFHLEVBQUU7QUFDakUsc0JBQWdCO0FBRWhCO0FBRUEsVUFBSSxVQUFVVSxNQUFLO0FBQ2xCO0FBQUEsTUFDRDtBQUFBLElBQ0Q7QUFFQSxRQUFJLFVBQVVBLE1BQUs7QUFDbEIsZ0JBQVVBO0FBQ1YsbUJBQWE7QUFBQSxJQUNkO0FBRUEsUUFBSSxZQUFZLEdBQUc7QUFDbEIsVUFBSSxjQUFjLEtBQUssSUFBSSxNQUFNLHNCQUFzQjtBQUN0RCxhQUFLO0FBQUEsVUFDSjtBQUFBLFVBQ0EsS0FBSyxVQUFVLDZCQUE2QjtBQUFBLFFBQzdDO0FBQUEsTUFDRCxPQUFPO0FBQ04sYUFBSztBQUFBLFVBQ0o7QUFBQSxVQUNBLEtBQUssVUFBVSx5QkFBeUI7QUFBQSxRQUN6QztBQUFBLE1BQ0Q7QUFDQSxXQUFLLCtCQUErQixFQUFFLFVBQVUsT0FBTyxRQUFRO0FBQUEsSUFDaEUsT0FBTztBQUNOLFdBQUssK0JBQStCLEVBQUUsVUFBVSxJQUFJLFFBQVE7QUFBQSxJQUM3RDtBQUVBLFVBQU1DLFVBQVMsVUFBVSxFQUFFLGlCQUFpQixLQUFLLG9CQUFvQixDQUFDO0FBQ3RFLFFBQUksVUFBVSxTQUFTQSxRQUFPLGlCQUFpQixhQUFhLEdBQUcsRUFBRTtBQUNqRSxlQUFXLFNBQVNBLFFBQU8saUJBQWlCLGdCQUFnQixHQUFHLEVBQUU7QUFFakUsUUFBSSxTQUFTLFNBQVNBLFFBQU8saUJBQWlCLFlBQVksR0FBRyxFQUFFO0FBQy9ELGNBQVUsU0FBU0EsUUFBTyxpQkFBaUIsZUFBZSxHQUFHLEVBQUU7QUFFL0QsVUFBTSxrQkFBa0IsZUFBZSxVQUFVO0FBQ2pELGNBQVUsTUFBTSxTQUFTLEdBQUcsZUFBZTtBQUUzQyxRQUFJLGVBQWUsTUFBTTtBQUN4QixnQkFBVSxNQUFNLFlBQVk7QUFBQSxJQUM3QixPQUFPO0FBQ04sZ0JBQVUsTUFBTSxZQUFZO0FBQUEsSUFDN0I7QUFFQSxVQUFNLFVBQVUsS0FBS0MscUJBQW9CLEVBQUUsc0JBQXNCO0FBRWpFLFNBQUtmLG9CQUFtQixFQUFFLE1BQU0sUUFBUSxHQUFHLFFBQVEsS0FBSztBQUN4RCxjQUFVLE1BQU0sWUFBWTtBQUFBLEVBQzdCO0FBT0EsV0FBUyxzQkFBc0IsV0FBVztBQUN6QyxRQUFJLENBQUMsS0FBSyxZQUFZO0FBQ3JCLFlBQU0sSUFBSSxNQUFNLDJCQUEyQjtBQUFBLElBQzVDO0FBRUEsUUFBSSxVQUFVLEtBQUssV0FBVyxjQUFjLElBQUksZ0JBQWdCLFVBQVU7QUFFMUUsUUFDQyxFQUFFLG1CQUFtQixnQkFDckIsUUFBUSxRQUFRLGtDQUFrQyxHQUNqRDtBQUNELGlCQUFXLENBQUMsRUFBRSxDQUFDLEtBQUssT0FBTztBQUFBLFFBQzFCLEtBQUssV0FBVyxpQkFBaUIsSUFBSSxjQUFjLFVBQVU7QUFBQSxNQUM5RCxHQUFHO0FBQ0YsWUFBSSxFQUFFLFFBQVEsbUNBQW1DLEdBQUc7QUFDbkQsb0JBQVU7QUFDVjtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsSUFDRCxPQUFPO0FBQ04sVUFBSSxjQUFjLHNCQUFzQjtBQUN2QyxlQUFPLFFBQVEsYUFBYTtBQUMzQixvQkFBVSxRQUFRO0FBRWxCLGNBQ0MsbUJBQW1CLGVBQ25CLFFBQVEsYUFBYSxjQUFjLEtBQ25DLFFBQVEsYUFBYSxjQUFjLE1BQU0sWUFDekMsUUFBUSxRQUFRLG1DQUFtQyxLQUNuRCxRQUFRLFFBQVEsb0NBQW9DLEdBQ25EO0FBQ0Q7QUFBQSxVQUNEO0FBQUEsUUFDRDtBQUFBLE1BQ0QsT0FBTztBQUNOLFlBQUksUUFBUTtBQUNaLGVBQU8sUUFBUSxpQkFBaUI7QUFDL0Isb0JBQVUsUUFBUTtBQUNsQixjQUNDLG1CQUFtQixlQUNuQixRQUFRLGFBQWEsY0FBYyxLQUNuQyxRQUFRLGFBQWEsY0FBYyxNQUFNLFlBQ3pDLFFBQVEsUUFBUSxtQ0FBbUMsS0FDbkQsUUFBUSxRQUFRLG9DQUFvQyxHQUNuRDtBQUNELG9CQUFRO0FBQ1I7QUFBQSxVQUNEO0FBQUEsUUFDRDtBQUNBLFlBQUksVUFBVSxPQUFPO0FBQ3BCLFVBQUFnQixhQUFZLEtBQUssSUFBSTtBQUFBLFFBQ3RCO0FBQUEsTUFDRDtBQUFBLElBQ0Q7QUFFQSxRQUFJLFdBQVcsTUFBTTtBQUNwQixVQUFJLG1CQUFtQixhQUFhO0FBQ25DLGFBQUssV0FDSCxpQkFBaUIsSUFBSSxnQkFBZ0IsVUFBVSxFQUMvQyxRQUFRLENBQUMsTUFBTTtBQUNmLFlBQUUsZ0JBQWdCLEdBQUcsZ0JBQWdCLFNBQVM7QUFBQSxRQUMvQyxDQUFDO0FBRUYsZ0JBQVEsTUFBTTtBQUNkLGdCQUFRLGFBQWEsR0FBRyxnQkFBZ0IsV0FBVyxJQUFJO0FBQUEsTUFDeEQ7QUFBQSxJQUNELENBQUMsRUFDQyxJQUFJLEVBQ0osTUFBTSxDQUFDLE1BQU07QUFDYix3QkFBa0IsTUFBTSx3QkFBd0IsRUFBRSxPQUFPO0FBQUEsSUFDMUQsQ0FBQztBQUFBLEVBQ0g7QUFLQSxXQUFTLGdCQUFnQjtBQUN4QixRQUFJLFdBQVcsTUFBTTtBQUNwQixVQUFJO0FBRUosY0FBUSxLQUFLLFVBQVUsaUJBQWlCLEdBQUc7QUFBQSxRQUMxQyxLQUFLO0FBQ0osY0FBSSxLQUFLLHlCQUF5QixhQUFhLGFBQWE7QUFDM0QsMEJBQWMsS0FBSyx5QkFBeUIsRUFBRSxNQUFNLFlBQVk7QUFBQSxVQUNqRSxPQUFPO0FBQ047QUFBQSxVQUNEO0FBRUE7QUFBQSxRQUNELEtBQUs7QUFBQSxRQUNMO0FBQ0MsY0FBSSxLQUFLLHlCQUF5QixhQUFhLGtCQUFrQjtBQUNoRSwwQkFBYyxLQUFLLHlCQUF5QixFQUFFLE1BQU0sWUFBWTtBQUFBLFVBQ2pFLE9BQU87QUFDTjtBQUFBLFVBQ0Q7QUFBQSxNQUNGO0FBRUEsWUFBTWIsV0FBVSxLQUFLLFVBQVUsU0FBUztBQUN4QyxpQkFBVyxDQUFDLEdBQUcsTUFBTSxLQUFLLE9BQU8sUUFBUUEsUUFBTyxHQUFHO0FBQ2xELFlBQUksT0FBTyxNQUFNLFlBQVksRUFBRSxRQUFRLFdBQVcsTUFBTSxJQUFJO0FBQzNELGVBQUssVUFBVSxXQUFXLENBQUMsYUFBYSxNQUFNO0FBQUEsUUFDL0MsT0FBTztBQUNOLGVBQUssVUFBVSxXQUFXLENBQUMsYUFBYSxNQUFTO0FBQUEsUUFDbEQ7QUFBQSxNQUNEO0FBQUEsSUFDRCxDQUFDLEVBQ0MsSUFBSSxFQUNKLEtBQUssTUFBTTtBQUNYLFVBQUksV0FBVyxLQUFLLE1BQU07QUFDekIsbUNBQTJCLEtBQUssSUFBSTtBQUNwQyxRQUFBYSxhQUFZLEtBQUssSUFBSTtBQUFBLE1BQ3RCLENBQUMsRUFDQyxJQUFJLEVBQ0osTUFBTSxDQUFDLE1BQU07QUFDYiwwQkFBa0IsTUFBTSx3QkFBd0IsRUFBRSxPQUFPO0FBQUEsTUFDMUQsQ0FBQztBQUFBLElBQ0gsQ0FBQyxFQUNBLE1BQU0sQ0FBQyxNQUFNO0FBQ2Isd0JBQWtCLE1BQU0sd0JBQXdCLEVBQUUsT0FBTztBQUFBLElBQzFELENBQUM7QUFBQSxFQUNIO0FBTUEsV0FBUywyQkFBMkIsT0FBTztBQUMxQyxVQUFNLFdBQVcsUUFBUSxVQUFVO0FBRW5DLFlBQVEsUUFBUSxNQUFNLEdBQUc7QUFBQSxNQUN4QixLQUFLO0FBQ0osOEJBQXNCLEtBQUssTUFBTSxvQkFBb0I7QUFDckQsY0FBTSxlQUFlO0FBQ3JCO0FBQUEsTUFDRCxLQUFLO0FBQ0osZUFBTyxLQUFLLElBQUk7QUFDaEIsY0FBTSxlQUFlO0FBQ3JCO0FBQUEsTUFDRCxLQUFjLGFBQWE7QUFBQSxNQUMzQixLQUFLO0FBQ0osOEJBQXNCLEtBQUssTUFBTSxrQkFBa0I7QUFDbkQsY0FBTSxlQUFlO0FBQ3JCO0FBQUEsTUFDRCxLQUFjLENBQUM7QUFBQSxNQUNmLEtBQUs7QUFDSiw4QkFBc0IsS0FBSyxNQUFNLG9CQUFvQjtBQUNyRCxjQUFNLGVBQWU7QUFDckI7QUFBQSxNQUNEO0FBQ0MsWUFDQyxLQUFLLFVBQVUsbUJBQW1CLE1BQU0sUUFDeEMsS0FBSyxrQkFBa0IsTUFBTSxNQUM1QjtBQUNELGVBQUssTUFBTTtBQUFBLFFBQ1o7QUFFQSw4QkFBc0IsS0FBSyxJQUFJO0FBQUEsSUFDakM7QUFBQSxFQUNEO0FBWUEsV0FBUyx3QkFBd0I7QUFDaEMsUUFBSSxLQUFLLG9CQUFvQixhQUFhLGdCQUFnQjtBQUN6RCxVQUFJO0FBQ0gsYUFBSyxvQkFBb0IsRUFBRSxNQUFNO0FBQ2pDO0FBQUEsTUFDRCxTQUFTLEdBQUc7QUFDWCxlQUFPLEtBQUssb0JBQW9CO0FBQUEsTUFDakM7QUFBQSxJQUNEO0FBRUEsU0FBSyxvQkFBb0IsSUFBSSxJQUFJLGVBQWUsS0FBSyxNQUFNO0FBQzFELFVBQUksY0FBYyxLQUFLLElBQUksTUFBTSxvQkFBb0I7QUFDcEQsc0JBQWMsS0FBSyxJQUFJO0FBQUEsTUFDeEIsT0FBTztBQUNOLHlCQUFpQixLQUFLLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTTtBQUN4Qyw0QkFBa0IsTUFBTSx3QkFBd0IsRUFBRSxPQUFPO0FBQUEsUUFDMUQsQ0FBQztBQUFBLE1BQ0Y7QUFFQSxhQUFPLEtBQUssb0JBQW9CO0FBQUEsSUFDakMsQ0FBQztBQUFBLEVBQ0Y7QUFLQSxXQUFTLG1CQUFtQjtBQUMzQixRQUNDLEVBQUUsS0FBSyx5QkFBeUIsYUFBYSxnQkFDN0MsRUFBRSxLQUFLLHlCQUF5QixhQUFhLGNBQzVDO0FBQ0Q7QUFBQSxJQUNEO0FBRUEsSUFBQU4sTUFBSyxLQUFLLElBQUk7QUFFZCxVQUFNLE1BQU0sS0FBSyxVQUFVLEtBQUs7QUFDaEMsUUFBSSxDQUFDLEtBQUs7QUFDVDtBQUFBLFFBQ0M7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0Q7QUFDQTtBQUFBLElBQ0Q7QUFFQSxRQUFJO0FBRUosWUFBUSxLQUFLLFVBQVUsaUJBQWlCLEdBQUc7QUFBQSxNQUMxQyxLQUFLO0FBQ0osWUFBSSxLQUFLLHlCQUF5QixhQUFhLGFBQWE7QUFDM0Qsd0JBQWMsS0FBSyx5QkFBeUIsRUFBRSxNQUFNLFlBQVk7QUFBQSxRQUNqRTtBQUVBO0FBQUEsTUFDRCxLQUFLO0FBQUEsTUFDTDtBQUNDLFlBQUksS0FBSyx5QkFBeUIsYUFBYSxrQkFBa0I7QUFDaEUsd0JBQWMsS0FBSyx5QkFBeUIsRUFBRSxNQUFNLFlBQVk7QUFBQSxRQUNqRTtBQUFBLElBQ0Y7QUFFQSxXQUFPLHdCQUF3QixLQUFLLE1BQU0sS0FBSyxXQUFXO0FBQUEsRUFDM0Q7QUFFQSxXQUFTLFVBQVUsS0FBSyxPQUFPO0FBQzlCLFFBQUksVUFBVSxVQUFhLFVBQVUsUUFBUSxVQUFVLElBQUk7QUFDMUQsY0FBUSxLQUFLLFVBQVUscUJBQXFCO0FBQzVDLFVBQUksVUFBVSxVQUFhLFVBQVUsUUFBUSxVQUFVLElBQUk7QUFDMUQsZ0JBQVEsc0JBQXNCLFNBQVM7QUFBQSxNQUN4QztBQUFBLElBQ0Q7QUFFQSxVQUFNLFlBQVksSUFBSSxVQUFVLEVBQUUsUUFBUSxVQUFVLEtBQUssRUFBRSxDQUFDO0FBQzVELFVBQU0sYUFBYSxLQUFLLFVBQVUsb0JBQW9CO0FBQ3RELFFBQUksY0FBYyxLQUFLLFVBQVUscUJBQXFCO0FBQ3RELFFBQUksQ0FBQyxhQUFhO0FBQ2pCLG9CQUFjO0FBQUEsSUFDZjtBQUVBLFFBQUksY0FBYyxhQUFhO0FBQzlCLGdCQUFVLFVBQVUsWUFBWSxXQUFXO0FBQUEsSUFDNUM7QUFFQSxXQUFPLFVBQVUsT0FBTyxHQUFHO0FBQUEsRUFDNUI7QUFRQSxXQUFTLHdCQUF3QixXQUFXLE9BQU87QUFDbEQsV0FBTyxJQUFJLFdBQVcsTUFBTTtBQUMzQixVQUFJLE1BQU0sVUFBVSxLQUFLLE1BQU0sV0FBVyxLQUFLO0FBQy9DLFVBQUksSUFBSSxRQUFRLHNCQUFzQixTQUFTLENBQUMsTUFBTSxJQUFJO0FBQ3pEO0FBQUEsTUFDRDtBQUVBLGNBQ0UsS0FBSyxNQUFNLEtBQUs7QUFBQSxRQUNoQixlQUFlO0FBQUEsTUFDaEIsQ0FBQyxFQUNBLEtBQUssTUFBTTtBQUNYLHlCQUFpQixLQUFLLElBQUk7QUFDMUIsUUFBQUEsTUFBSyxLQUFLLElBQUk7QUFBQSxNQUNmLENBQUMsRUFDQSxNQUFNLENBQUMsTUFBTTtBQUNiLGNBQU07QUFBQSxNQUNQLENBQUM7QUFBQSxJQUNILENBQUMsRUFDQyxJQUFJLEVBQ0osTUFBTSxDQUFDLE1BQU07QUFDYixZQUFNO0FBQUEsSUFDUCxDQUFDO0FBQUEsRUFDSDtBQU1BLFdBQVMsMkJBQTJCLE9BQU87QUFDMUMsVUFBTSxXQUFXLFFBQVEsVUFBVTtBQUVuQyxZQUFRLFFBQVEsTUFBTSxHQUFHO0FBQUEsTUFDeEIsS0FBSztBQUNKLGVBQU8sS0FBSyxJQUFJO0FBQ2hCLGNBQU0sZUFBZTtBQUNyQjtBQUFBLE1BQ0QsS0FBSztBQUFBLE1BQ0wsS0FBSztBQUNKLGNBQU0sT0FBTyxNQUFNLGFBQWE7QUFDaEMsY0FBTSxVQUFVLE9BQU8sQ0FBQztBQUN4QixZQUFJLG1CQUFtQixhQUFhO0FBQ25DLGdCQUFNLFFBQVEsUUFBUSxxQkFBcUIsT0FBTztBQUNsRCxjQUFJLENBQUMsT0FBTztBQUNYO0FBQUEsVUFDRDtBQUNBLG9CQUFVLE9BQU8sT0FBTztBQUFBLFFBQ3pCO0FBQ0EsY0FBTSxlQUFlO0FBQ3JCO0FBQUEsTUFFRCxLQUFjLGFBQWE7QUFBQSxNQUMzQixLQUFLO0FBQ0osOEJBQXNCLEtBQUssTUFBTSxrQkFBa0I7QUFDbkQsY0FBTSxlQUFlO0FBQ3JCO0FBQUEsTUFFRCxLQUFjLENBQUM7QUFBQSxNQUNmLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFFSjtBQUFBLE1BQ0QsS0FBSztBQUNKLDhCQUFzQixLQUFLLE1BQU0sb0JBQW9CO0FBQ3JELGNBQU0sZUFBZTtBQUNyQjtBQUFBLE1BQ0Q7QUFDQyxjQUFNLElBQUksTUFBTSxhQUFhO0FBQzdCLFlBQUksSUFBSSxDQUFDLGFBQWEsa0JBQWtCO0FBQ3ZDO0FBQUEsUUFDRDtBQUNBLFFBQUFNLGFBQVksS0FBSyxJQUFJO0FBQ3JCO0FBQUEsSUFDRjtBQUFBLEVBQ0Q7QUFNQSxXQUFTLGdCQUFnQjtBQUN4QixZQUFRLEtBQUssVUFBVSxhQUFhLEdBQUc7QUFBQSxNQUN0QyxLQUFLO0FBQ0osZUFBTztBQUFBLE1BQ1IsS0FBSztBQUNKLGVBQU87QUFBQSxNQUNSO0FBQ0MsZUFBTztBQUFBLElBQ1Q7QUFBQSxFQUNEO0FBS0EsV0FBUyxhQUFhO0FBQ3JCLFFBQUksRUFBRSxLQUFLLHlCQUF5QixhQUFhLGNBQWM7QUFDOUQ7QUFBQSxJQUNEO0FBRUEsUUFBSSxjQUFjLEtBQUssSUFBSSxNQUFNLHNCQUFzQjtBQUN0RDtBQUFBLElBQ0Q7QUFFQSxTQUFLLGtDQUFrQyxFQUFFLFVBQVUsT0FBTyxRQUFRO0FBQ2xFLFNBQUssa0NBQWtDLEVBQUUsS0FBSztBQUU5QyxTQUFLLHlCQUF5QixFQUFFLFVBQVUsT0FBTyxRQUFRO0FBQ3pELFNBQUsseUJBQXlCLEVBQUUsS0FBSztBQUFBLEVBQ3RDO0FBTUEsV0FBUyxrQkFBa0IsY0FBYztBQUN4QyxTQUFLLGtDQUFrQyxFQUFFLFVBQVUsT0FBTyxRQUFRO0FBQ2xFLFNBQUsseUJBQXlCLEVBQUUsVUFBVSxJQUFJLFFBQVE7QUFDdEQsU0FBSyx5QkFBeUIsRUFBRSxVQUFVLE9BQU8sUUFBUTtBQUN6RCxTQUFLLHlCQUF5QixFQUFFLFVBQVUsSUFBSSxRQUFRO0FBRXRELFFBQUksRUFBRSxLQUFLLHlCQUF5QixhQUFhLGNBQWM7QUFDOUQ7QUFBQSxRQUNDO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNEO0FBQ0E7QUFBQSxJQUNEO0FBSUEsZUFBVyxNQUFNO0FBQ2hCLFVBQUksaUJBQWlCLFVBQWEsaUJBQWlCLE1BQU07QUFDeEQsYUFBSyx5QkFBeUIsRUFBRSxNQUFNO0FBQUEsTUFDdkMsT0FBTztBQUNOLGFBQUsseUJBQXlCLEVBQUUsTUFBTSxZQUFZO0FBQUEsTUFDbkQ7QUFBQSxJQUNELEdBQUcsR0FBRztBQUFBLEVBQ1A7QUFNQSxXQUFTLGtCQUFrQixjQUFjO0FBQ3hDLFVBQU1iLFdBQVUsS0FBSyxVQUFVLFNBQVM7QUFDeEMsU0FDRSxDQUFDLFFBQVFBLFFBQU8sS0FBS0EsU0FBUSxXQUFXLE1BQ3pDLGNBQWMsS0FBSyxJQUFJLE1BQU0sb0JBQzVCO0FBQ0Q7QUFBQSxJQUNEO0FBRUEsU0FBSyxrQ0FBa0MsRUFBRSxVQUFVLElBQUksUUFBUTtBQUMvRCxTQUFLLHlCQUF5QixFQUFFLFVBQVUsSUFBSSxRQUFRO0FBQ3RELFNBQUsseUJBQXlCLEVBQUUsVUFBVSxPQUFPLFFBQVE7QUFJekQsZUFBVyxNQUFNO0FBQ2hCLFVBQUksaUJBQWlCLFVBQWEsaUJBQWlCLE1BQU07QUFDeEQsYUFBSyx5QkFBeUIsRUFBRSxNQUFNO0FBQUEsTUFDdkMsT0FBTztBQUNOLGFBQUsseUJBQXlCLEVBQUUsTUFBTSxZQUFZO0FBQUEsTUFDbkQ7QUFBQSxJQUNELEdBQUcsR0FBRztBQUFBLEVBQ1A7QUFLQSxXQUFTYSxhQUFZLGNBQWM7QUFDbEMsUUFBSSxjQUFjLEtBQUssSUFBSSxNQUFNLHNCQUFzQjtBQUN0RCxXQUFLLGtDQUFrQyxFQUFFLFVBQVUsSUFBSSxRQUFRO0FBQy9ELFdBQUsseUJBQXlCLEVBQUUsVUFBVSxJQUFJLFFBQVE7QUFDdEQ7QUFBQSxJQUNEO0FBRUEsUUFBSSxLQUFLLFVBQVUsaUJBQWlCLE1BQU0sd0JBQXdCO0FBQ2pFLGFBQU8sa0JBQWtCLEtBQUssTUFBTSxZQUFZO0FBQUEsSUFDakQ7QUFFQSxXQUFPLGtCQUFrQixLQUFLLE1BQU0sWUFBWTtBQUFBLEVBQ2pEO0FBUUEsV0FBUyxjQUFjO0FBQ3RCLFVBQU1DLFFBQU8sS0FBSyxVQUFVLE1BQU07QUFDbEMsUUFBSSxDQUFDLFNBQVMsVUFBVSxFQUFFLFFBQVFBLEtBQUksTUFBTSxJQUFJO0FBQy9DLFlBQU0sSUFBSSxNQUFNLGtCQUFrQjtBQUFBLElBQ25DO0FBRUEsUUFBSSxDQUFDLEtBQUssWUFBWTtBQUNyQixZQUFNLElBQUksTUFBTSwyQkFBMkI7QUFBQSxJQUM1QztBQUVBLFVBQU0sWUFBWSxDQUFDO0FBQ25CLFVBQU0sV0FBVyxLQUFLLFdBQVc7QUFBQSxNQUNoQyxjQUFjQSxLQUFJO0FBQUEsSUFDbkI7QUFFQSxlQUFXLEtBQUssVUFBVTtBQUN6QixnQkFBVSxLQUFLO0FBQUEsUUFDZCxPQUFPLGtCQUFrQixLQUFLLE1BQU0sRUFBRSxLQUFLO0FBQUEsUUFDM0MsT0FBTyxFQUFFO0FBQUEsTUFDVixDQUFDO0FBQUEsSUFDRjtBQUVBLGlCQUNFLEtBQUssTUFBTSxTQUFTLEVBQ3BCLEtBQUssTUFBTTtBQUFBLElBQUMsQ0FBQyxFQUNiLE1BQU0sQ0FBQyxNQUFNO0FBQ2Isd0JBQWtCLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxFQUFFO0FBQUEsSUFDdkQsQ0FBQztBQUVGLFFBQUksS0FBSyxVQUFVLHdCQUF3QixNQUFNLE1BQU07QUFDdEQsYUFBTyxLQUFLLElBQUk7QUFBQSxJQUNqQjtBQUVBLFdBQU87QUFBQSxFQUNSO0FBT0EsV0FBUyxpQkFBaUI7QUFDekIsVUFBTUEsUUFBTyxLQUFLLFVBQVUsTUFBTTtBQUNsQyxRQUFJLENBQUMsU0FBUyxVQUFVLEVBQUUsUUFBUUEsS0FBSSxNQUFNLElBQUk7QUFDL0MsWUFBTSxJQUFJLE1BQU0sa0JBQWtCO0FBQUEsSUFDbkM7QUFFQSxRQUFJLENBQUMsS0FBSyxZQUFZO0FBQ3JCLFlBQU0sSUFBSSxNQUFNLDJCQUEyQjtBQUFBLElBQzVDO0FBRUEsaUJBQ0UsS0FBSyxNQUFNLENBQUMsQ0FBQyxFQUNiLEtBQUssTUFBTTtBQUFBLElBQUMsQ0FBQyxFQUNiLE1BQU0sQ0FBQyxNQUFNO0FBQ2Isd0JBQWtCLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxFQUFFO0FBQUEsSUFDdkQsQ0FBQztBQUFBLEVBQ0g7QUFLQSxXQUFTLDZCQUE2QjtBQUVyQyxRQUFJLEtBQUssZ0NBQWdDLE1BQU0sUUFBVztBQUN6RCxXQUFLLGdDQUFnQyxJQUFJO0FBQUEsSUFDMUM7QUFFQSxRQUFJLEtBQUssZ0NBQWdDLElBQUksR0FBRztBQUMvQyxXQUFLLGdDQUFnQztBQUNyQyxhQUFPO0FBQUEsSUFDUjtBQUVBLFNBQUssZ0NBQWdDO0FBRXJDLFVBQU1kLFdBQVUsS0FBSyxVQUFVLFNBQVM7QUFFeEMsUUFDQ0EsYUFBWSxVQUNaQSxhQUFZLFFBQ1gsUUFBUUEsUUFBTyxLQUFLQSxTQUFRLFdBQVcsR0FDdkM7QUFDRCw4QkFBd0IsS0FBSyxNQUFNLE9BQU87QUFJMUMsVUFBSSxNQUFNLEtBQUssVUFBVSw2QkFBNkI7QUFFdEQsVUFDQyxLQUFLLFVBQVUsS0FBSyxNQUFNLFFBQzFCLEtBQUssVUFBVSxtQkFBbUIsTUFBTSxRQUN4QyxLQUFLLGtCQUFrQixNQUFNLE1BQzVCO0FBQ0QsY0FBTSxLQUFLLFVBQVUsOEJBQThCO0FBQUEsTUFDcEQ7QUFFQSxXQUFLLFVBQVUsb0JBQW9CLEdBQUc7QUFDdEMsV0FBSyxVQUFVLG9CQUFvQixFQUFFO0FBRXJDLFVBQUksS0FBSyxVQUFVLGdDQUFnQyxNQUFNLE1BQU07QUFDOUQsYUFBSyxRQUFRO0FBQUEsTUFDZDtBQUNBLHdCQUFrQixNQUFNLHdCQUF3Qix5QkFBeUI7QUFDekUsYUFBTztBQUFBLElBQ1I7QUFFQSxVQUFNLGFBQWEsS0FBSyxVQUFVLFdBQVc7QUFDN0MsUUFDQyxlQUFlLFVBQ2YsZUFBZSxRQUNmLFdBQVcsV0FBVyxHQUNyQjtBQUNELFdBQUs7QUFBQSxRQUNKO0FBQUEsUUFDQSxLQUFLLFVBQVUseUJBQXlCO0FBQUEsTUFDekM7QUFBQSxJQUNELE9BQU87QUFDTixXQUFLLFVBQVUsb0JBQW9CLEVBQUU7QUFBQSxJQUN0QztBQUVBLFNBQUssVUFBVSxvQkFBb0IseUJBQXlCLEtBQUssSUFBSSxDQUFDO0FBRXRFLFFBQUksVUFBVTtBQUNkLFFBQUksZUFBZTtBQUNuQixlQUFXLFVBQVVBLFVBQVM7QUFDN0IsVUFBSSxRQUFRLGVBQWUsUUFBVztBQUNyQyxlQUFPLGFBQWE7QUFDcEIsa0JBQVU7QUFBQSxNQUNYO0FBRUEsVUFBSSxRQUFRLFVBQVUsVUFBYSxRQUFRLFVBQVUsUUFBVztBQUMvRCxlQUFPLFFBQVEsR0FBRyxjQUFjO0FBQ2hDLGVBQU8sUUFBUSxPQUFPO0FBQ3RCLGtCQUFVO0FBQ1Y7QUFBQSxNQUNEO0FBRUEsVUFBSSxRQUFRLFVBQVUsUUFBVztBQUNoQyxlQUFPLFFBQVEsT0FBTztBQUN0QixrQkFBVTtBQUFBLE1BQ1g7QUFFQSxVQUFJLFFBQVEsVUFBVSxRQUFXO0FBQ2hDLGVBQU8sUUFBUSxPQUFPO0FBQ3RCLGtCQUFVO0FBQUEsTUFDWDtBQUFBLElBQ0Q7QUFFQSxRQUFJLFNBQVM7QUFDWixXQUFLLFVBQVUsV0FBV0EsUUFBTztBQUFBLElBQ2xDO0FBRUEsNEJBQXdCLEtBQUssSUFBSTtBQUVqQyx5QkFBcUIsTUFBTSx3QkFBd0IseUJBQXlCO0FBQzVFLFdBQU87QUFBQSxFQUNSO0FBTUEsV0FBUyxtQkFBbUI7QUFDM0IsUUFBSSxDQUFDLEtBQUssWUFBWTtBQUNyQixZQUFNLElBQUksTUFBTSwyQkFBMkI7QUFBQSxJQUM1QztBQUVBLFVBQU0sV0FBVyxLQUFLLFdBQVc7QUFBQSxNQUNoQyxJQUFJLGNBQWM7QUFBQSxJQUNuQjtBQUVBLFFBQUksWUFBWSxLQUFLLFVBQVUsV0FBVztBQUMxQyxRQUFJLENBQUMsUUFBUSxTQUFTLEdBQUc7QUFDeEIsa0JBQVksQ0FBQztBQUFBLElBQ2Q7QUFFQSxVQUFNLGdCQUFnQixVQUFVLElBQUksQ0FBQ2UsT0FBTTtBQUMxQyxhQUFPQSxHQUFFO0FBQUEsSUFDVixDQUFDO0FBRUQsZUFBVyxLQUFLLFVBQVU7QUFDekIsVUFBSSxjQUFjLFFBQVEsRUFBRSxLQUFLLE1BQU0sSUFBSTtBQUMxQyxZQUFJLEVBQUUsWUFBWSxLQUFNLEdBQUUsVUFBVTtBQUFBLE1BQ3JDLE9BQU87QUFDTixZQUFJLEVBQUUsWUFBWSxNQUFPLEdBQUUsVUFBVTtBQUFBLE1BQ3RDO0FBQUEsSUFDRDtBQUFBLEVBQ0Q7QUFPQSxXQUFTLHdCQUF3QixPQUFPO0FBQ3ZDLFVBQU0sWUFBWSxDQUFDO0FBRW5CLFFBQUksU0FBUyxLQUFLLEdBQUc7QUFDcEIsY0FBUSxNQUNOLE1BQU0sR0FBRyxFQUNULElBQUksQ0FBQ0EsT0FBTTtBQUNYLGVBQU9BLEdBQUUsS0FBSztBQUFBLE1BQ2YsQ0FBQyxFQUNBLE9BQU8sQ0FBQ0EsT0FBTTtBQUNkLGVBQU9BLE9BQU07QUFBQSxNQUNkLENBQUM7QUFBQSxJQUNIO0FBRUEsUUFBSSxTQUFTLEtBQUssS0FBSyxVQUFVLEtBQUssR0FBRztBQUN4QyxnQkFBVSxLQUFLO0FBQUEsUUFDZCxPQUFPLGtCQUFrQixLQUFLLE1BQU0sS0FBSztBQUFBLFFBQ3pDO0FBQUEsTUFDRCxDQUFDO0FBQUEsSUFDRixXQUFXLFFBQVEsS0FBSyxHQUFHO0FBQzFCLGlCQUFXLEtBQUssT0FBTztBQUN0QixrQkFBVSxLQUFLO0FBQUEsVUFDZCxPQUFPLGtCQUFrQixLQUFLLE1BQU0sQ0FBQztBQUFBLFVBQ3JDLE9BQU87QUFBQSxRQUNSLENBQUM7QUFBQSxNQUNGO0FBRUEsY0FBUSxNQUFNLEtBQUssR0FBRztBQUFBLElBQ3ZCLE9BQU87QUFDTixZQUFNLElBQUksTUFBTSxrQkFBa0I7QUFBQSxJQUNuQztBQUVBLFdBQU87QUFBQSxNQUNOO0FBQUEsTUFDQTtBQUFBLElBQ0Q7QUFBQSxFQUNEO0FBT0EsV0FBUyx3QkFBd0IsV0FBVztBQUMzQyxVQUFNLFFBQVEsQ0FBQztBQUVmLFFBQUksUUFBUSxTQUFTLEdBQUc7QUFDdkIsaUJBQVcsT0FBTyxXQUFXO0FBQzVCLGNBQU0sSUFBSSxNQUFNLE9BQU87QUFDdkIsWUFBSSxNQUFNLE9BQVcsT0FBTSxLQUFLLENBQUM7QUFBQSxNQUNsQztBQUFBLElBQ0Q7QUFFQSxRQUFJLE1BQU0sV0FBVyxHQUFHO0FBQ3ZCLGFBQU87QUFBQSxJQUNSLFdBQVcsTUFBTSxXQUFXLEdBQUc7QUFDOUIsYUFBTyxNQUFNLElBQUk7QUFBQSxJQUNsQjtBQUVBLFdBQU8sTUFBTSxLQUFLLEdBQUc7QUFBQSxFQUN0QjtBQVFBLFdBQVMsYUFBYSxXQUFXO0FBQ2hDLFFBQUksU0FBUyxTQUFTLEdBQUc7QUFDeEIsWUFBTSxTQUFTLHdCQUF3QixLQUFLLE1BQU0sU0FBUztBQUMzRCxrQkFBWSxRQUFRO0FBQUEsSUFDckIsV0FBVyxjQUFjLFFBQVc7QUFDbkMsa0JBQVksQ0FBQztBQUFBLElBQ2Q7QUFFQSxrQkFBYyxTQUFTO0FBRXZCLGFBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFDMUMsVUFBSSxJQUFJLGtCQUFrQixLQUFLLE1BQU0sVUFBVSxDQUFDLEVBQUUsS0FBSztBQUN2RCxVQUFJLE1BQU0sVUFBVSxDQUFDLEVBQUUsT0FBTztBQUM3QixZQUFJLFVBQVUsQ0FBQyxFQUFFO0FBQUEsTUFDbEI7QUFFQSxnQkFBVSxDQUFDLElBQUk7QUFBQSxRQUNkLE9BQU87QUFBQSxRQUNQLE9BQU8sVUFBVSxDQUFDLEVBQUU7QUFBQSxNQUNyQjtBQUFBLElBQ0Q7QUFFQSxTQUFLLFVBQVUsYUFBYSxTQUFTO0FBQ3JDLHFCQUFpQixLQUFLLElBQUk7QUFFMUIsUUFBSTtBQUNILFlBQU0sYUFBYSxLQUFLLEtBQUs7QUFBQSxJQUM5QixTQUFTLEdBQUc7QUFDWCx3QkFBa0IsTUFBTSx3QkFBd0IsRUFBRSxPQUFPO0FBQUEsSUFDMUQ7QUFFQSxvQkFBZ0IsTUFBTSxvQkFBb0I7QUFBQSxNQUN6QztBQUFBLElBQ0QsQ0FBQztBQUVELGNBQVUsTUFBTSxRQUFRO0FBRXhCLFdBQU8sSUFBSSxXQUFXLE1BQU07QUFDM0IsWUFBTSxZQUFZO0FBRWxCLFVBQUksQ0FBQyxLQUFLLFlBQVk7QUFDckIsY0FBTSxJQUFJLE1BQU0sMkJBQTJCO0FBQUEsTUFDNUM7QUFFQSxZQUFNLGNBQWMsS0FBSyxXQUFXLGlCQUFpQixnQkFBZ0I7QUFFckUsVUFBSSxhQUFhO0FBQ2hCLG9CQUFZLFFBQVEsQ0FBQyxTQUFTO0FBQzdCLGdCQUFNLFNBQVMsS0FBSyxRQUFRLElBQUksY0FBYyxVQUFVO0FBQ3hELGNBQUksUUFBUTtBQUNYLG1CQUFPLFVBQVUsT0FBTyxTQUFTO0FBQUEsVUFDbEM7QUFBQSxRQUNELENBQUM7QUFBQSxNQUNGO0FBRUEsWUFBTSxXQUFXLEtBQUssV0FBVyxpQkFBaUIsVUFBVTtBQUM1RCxVQUFJLFVBQVU7QUFDYixpQkFBUyxRQUFRLENBQUMsU0FBUztBQUMxQixnQkFBTSxTQUFTLEtBQUssUUFBUSxJQUFJLGNBQWMsVUFBVTtBQUN4RCxjQUFJLFFBQVE7QUFDWCxtQkFBTyxVQUFVLElBQUksU0FBUztBQUFBLFVBQy9CO0FBQUEsUUFDRCxDQUFDO0FBQUEsTUFDRjtBQUFBLElBQ0QsQ0FBQyxFQUNDLElBQUksRUFDSixNQUFNLENBQUMsTUFBTTtBQUNiLHdCQUFrQixNQUFNLHdCQUF3QixFQUFFLE9BQU87QUFBQSxJQUMxRCxDQUFDO0FBQUEsRUFDSDtBQVNBLFdBQVMsVUFBVSxLQUFLO0FBQ3ZCLFVBQU1qQixRQUFPO0FBQ2IsUUFBSSxDQUFDLElBQUssT0FBTSxLQUFLLFVBQVUsS0FBSztBQUNwQyxRQUFJLENBQUMsSUFBSyxRQUFPLFFBQVEsUUFBUTtBQUVqQyxVQUFNLGVBQWUsS0FBSyxVQUFVLFNBQVMsQ0FBQyxDQUFDO0FBRS9DLFFBQUksYUFBYTtBQUdqQiwwQkFBc0IsTUFBTTtBQUMzQixVQUFJLGVBQWUsS0FBTTtBQUN6Qiw4QkFBd0IsS0FBSyxNQUFNLFNBQVM7QUFDNUMsbUJBQWE7QUFBQSxJQUNkLENBQUM7QUFFRCxVQUFNLFVBQVUsS0FBSyxNQUFNLEdBQUc7QUFFOUIsSUFBQUEsTUFBSyxlQUFlLElBQUk7QUFDeEIsVUFBTWtCLFdBQVMsVUFBVTtBQUN6QixXQUFPQSxTQUNMLE1BQU0sS0FBSyxZQUFZLEVBQ3ZCLEtBQUssQ0FBQyxhQUFhO0FBQ25CLE1BQUFsQixNQUFLLGVBQWUsSUFBSTtBQUN4QixtQkFBYTtBQUNiLFlBQU0sY0FBYyxTQUFTLFFBQVEsSUFBSSxjQUFjO0FBQ3ZELFVBQUksZUFBZSxZQUFZLFFBQVEsa0JBQWtCLE1BQU0sSUFBSTtBQUNsRSxlQUFPLFNBQVMsS0FBSztBQUFBLE1BQ3RCO0FBRUEsWUFBTSxJQUFJLFVBQVUsd0JBQXdCLFdBQVcsRUFBRTtBQUFBLElBQzFELENBQUMsRUFDQSxLQUFLLENBQUMsU0FBUztBQUNmLFVBQUk7QUFDSCxlQUFPLFFBQVEsUUFBUSxLQUFLLE1BQU0sT0FBTyxJQUFJLENBQUMsQ0FBQztBQUFBLE1BQ2hELFNBQVMsR0FBRztBQUNYLGNBQU0sSUFBSSxVQUFVLDRDQUE0QztBQUFBLE1BQ2pFO0FBQUEsSUFDRCxDQUFDLEVBQ0EsTUFBTSxDQUFDLE1BQU07QUFDYixNQUFBQSxNQUFLLGVBQWUsSUFBSTtBQUN4QixtQkFBYTtBQUNiLFlBQU07QUFBQSxJQUNQLENBQUM7QUFBQSxFQUNIO0FBS0EsV0FBU1UsUUFBTztBQUNmLFNBQUtYLG9CQUFtQixFQUFFLE1BQU0sVUFBVTtBQUMxQyw0QkFBd0IsS0FBSyxNQUFNLFFBQVE7QUFDM0MseUJBQXFCLEtBQUtlLHFCQUFvQixHQUFHLFNBQVMsTUFBTTtBQUFBLEVBQ2pFO0FBS0EsV0FBU0wsUUFBTztBQUNmLFFBQUksS0FBSyxVQUFVLFlBQVksTUFBUyxNQUFNLE1BQU07QUFDbkQ7QUFBQSxJQUNEO0FBRUEsUUFBSSxLQUFLVixvQkFBbUIsRUFBRSxNQUFNLFlBQVksMEJBQTBCO0FBQ3pFO0FBQUEsSUFDRDtBQUVBLElBQUFnQixhQUFZLEtBQUssSUFBSTtBQUVyQixVQUFNLGVBQ0wsS0FBSyxVQUFVLG1CQUFtQixLQUFLLEtBQUssa0JBQWtCLE1BQU07QUFFckUsUUFBSSxpQkFBaUIsTUFBTTtBQUMxQixXQUFLLGtCQUFrQixJQUFJO0FBQzNCLDhCQUF3QixLQUFLLE1BQU0sU0FBUztBQUU1QyxVQUFJLFdBQVcsS0FBSyxNQUFNO0FBQ3pCLGFBQUssTUFBTSxFQUNULEtBQUssTUFBTTtBQUNYLDJCQUFpQixLQUFLLElBQUk7QUFDMUIsZ0NBQXNCLE1BQU07QUFDM0IsWUFBQU4sTUFBSyxLQUFLLElBQUk7QUFBQSxVQUNmLENBQUM7QUFBQSxRQUNGLENBQUMsRUFDQSxNQUFNLENBQUMsTUFBTTtBQUNiLDRCQUFrQixNQUFNLHdCQUF3QixFQUFFLE9BQU87QUFDekQsa0NBQXdCLEtBQUssTUFBTSxPQUFPO0FBQUEsUUFDM0MsQ0FBQztBQUFBLE1BQ0gsQ0FBQyxFQUNDLElBQUksRUFDSixNQUFNLENBQUMsTUFBTTtBQUNiLDBCQUFrQixNQUFNLHdCQUF3QixFQUFFLE9BQU87QUFDekQsZ0NBQXdCLEtBQUssTUFBTSxPQUFPO0FBQUEsTUFDM0MsQ0FBQztBQUVGO0FBQUEsSUFDRDtBQUVBLFVBQU0sc0JBQ0wsS0FBSyxVQUFVLGlCQUFpQixNQUFNLDBCQUN0QyxjQUFjLEtBQUssSUFBSSxNQUFNO0FBRTlCLFVBQU1QLFdBQVUsa0JBQWtCLEtBQUssSUFBSTtBQUMzQyxRQUFJQSxTQUFRLFdBQVcsS0FBSyx3QkFBd0IsT0FBTztBQUMxRDtBQUFBLElBQ0Q7QUFFQSxTQUFLSCxvQkFBbUIsRUFBRSxNQUFNLGFBQWE7QUFDN0MsU0FBS0Esb0JBQW1CLEVBQUUsTUFBTSxVQUFVO0FBQzFDLDRCQUF3QixLQUFLLE1BQU0sTUFBTTtBQUV6QyxzQkFBa0IsS0FBS2UscUJBQW9CLEdBQUcsU0FBUyxNQUFNO0FBRTdELFFBQUksV0FBVyxNQUFNO0FBQ3BCLGlDQUEyQixLQUFLLElBQUk7QUFDcEMsTUFBQUMsYUFBWSxLQUFLLElBQUk7QUFDckIsV0FBS2hCLG9CQUFtQixFQUFFLE1BQU0sZUFBZSxZQUFZO0FBQzNELG1CQUFhLEtBQUssSUFBSTtBQUFBLElBQ3ZCLENBQUMsRUFDQyxJQUFJLEVBQ0osTUFBTSxDQUFDLE1BQU07QUFDYix3QkFBa0IsTUFBTSx3QkFBd0IsRUFBRSxPQUFPO0FBQUEsSUFDMUQsQ0FBQztBQUFBLEVBQ0g7QUFLQSxXQUFTLFNBQVM7QUFDakIsUUFBSSxLQUFLQSxvQkFBbUIsRUFBRSxNQUFNLFlBQVksMEJBQTBCO0FBQ3pFLE1BQUFXLE1BQUssS0FBSyxJQUFJO0FBQUEsSUFDZixPQUFPO0FBQ04sTUFBQUQsTUFBSyxLQUFLLElBQUk7QUFBQSxJQUNmO0FBQUEsRUFDRDtBQU9BLFdBQVNVLG9CQUFtQjtBQUMzQixVQUFNbkIsUUFBTztBQUtiLElBQUFBLE1BQUssdUJBQXVCLElBQUksQ0FBQyxVQUFVO0FBQzFDLFlBQU0sVUFBVTtBQUFBLFFBQ2Y7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0Q7QUFFQSxVQUFJLG1CQUFtQixhQUFhO0FBQ25DLGNBQU0sUUFBUSx1QkFBdUIsU0FBUyxnQkFBZ0IsT0FBTztBQUNyRSxZQUFJLGlCQUFpQixhQUFhO0FBQ2pDLGdCQUFNLFFBQVEsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLE9BQU87QUFFM0QsY0FBSSxZQUFZQSxNQUFLLFVBQVUsV0FBVztBQUMxQyxzQkFBWSxVQUFVLE9BQU8sQ0FBQyxNQUFNO0FBQ25DLG1CQUFPLFVBQVUsRUFBRTtBQUFBLFVBQ3BCLENBQUM7QUFFRCx1QkFDRSxLQUFLQSxPQUFNLFNBQVMsRUFDcEIsS0FBSyxNQUFNO0FBQ1gsNEJBQWdCQSxPQUFNLDZCQUE2QjtBQUFBLGNBQ2xEO0FBQUEsWUFDRCxDQUFDO0FBQUEsVUFDRixDQUFDLEVBQ0EsTUFBTSxDQUFDLE1BQU07QUFDYiw4QkFBa0JBLE9BQU0sd0JBQXdCLEVBQUUsT0FBTztBQUFBLFVBQzFELENBQUM7QUFBQSxRQUNIO0FBQUEsTUFDRDtBQUFBLElBQ0Q7QUFLQSxJQUFBQSxNQUFLb0Isa0JBQWlCLElBQUksQ0FBQyxVQUFVO0FBQ3BDLFlBQU0sT0FBTyxNQUFNLGFBQWE7QUFFaEMsaUJBQVcsQ0FBQyxFQUFFLE9BQU8sS0FBSyxPQUFPLFFBQVEsSUFBSSxHQUFHO0FBQy9DLFlBQUksWUFBWXBCLE9BQU07QUFDckI7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUNBLE1BQUFVLE1BQUssS0FBS1YsS0FBSTtBQUFBLElBQ2Y7QUFLQSxJQUFBQSxNQUFLLGlCQUFpQixJQUFJLENBQUMsVUFBVTtBQUNwQyxZQUFNLE9BQU8sTUFBTSxhQUFhO0FBQ2hDLFlBQU0sVUFBVSxPQUFPLENBQUM7QUFFeEIsVUFBSSxtQkFBbUIsYUFBYTtBQUNuQyxZQUNDLFFBQVEsYUFBYSxjQUFjLEtBQ25DLFFBQVEsYUFBYSxjQUFjLE1BQU0sa0JBQ3hDO0FBQ0QsMEJBQWdCQSxPQUFNLGtCQUFrQjtBQUFBLFlBQ3ZDLE1BQU0sTUFBTTtBQUFBLFlBQ1osT0FBTyxRQUFRO0FBQUEsWUFDZixTQUFTLFFBQVE7QUFBQSxVQUNsQixDQUFDO0FBQUEsUUFDRixXQUNDLFFBQVEsYUFBYSxjQUFjLEtBQ25DLFFBQVEsYUFBYSxjQUFjLE1BQU0sVUFDeEM7QUFBQSxRQUNGO0FBQUEsTUFDRDtBQUFBLElBQ0Q7QUFLQSxJQUFBQSxNQUFLLGtCQUFrQixJQUFJLENBQUMsVUFBVTtBQUNyQyxrQkFBWSxLQUFLQSxLQUFJO0FBQ3JCLHNCQUFnQkEsT0FBTSxtQkFBbUIsT0FBTyxNQUFNO0FBQUEsSUFDdkQ7QUFFQSxJQUFBQSxNQUFLLGVBQWUsSUFBSSxDQUFDLFVBQVU7QUFDbEMsWUFBTSxPQUFPLE1BQU0sYUFBYTtBQUNoQyxZQUFNLFVBQVUsS0FBSyxNQUFNO0FBRTNCLFVBQUk7QUFFSixVQUFJLG1CQUFtQixhQUFhO0FBQ25DLFlBQUksUUFBUSxhQUFhLGNBQWMsR0FBRztBQUN6QyxpQkFBTyxRQUFRLGFBQWEsY0FBYztBQUFBLFFBQzNDLFdBQVcsWUFBWSxNQUFNO0FBQzVCLFVBQUFTLE1BQUssS0FBSyxJQUFJO0FBQUEsUUFFZixPQUFPO0FBQ04sZ0JBQU0sSUFBSSxRQUFRLFFBQVEsSUFBSSxjQUFjLEdBQUc7QUFDL0MsY0FBSSxhQUFhLGVBQWUsRUFBRSxhQUFhLGNBQWMsR0FBRztBQUMvRCxtQkFBTyxFQUFFLGFBQWEsY0FBYztBQUFBLFVBQ3JDO0FBQUEsUUFDRDtBQUFBLE1BQ0QsT0FBTztBQUNOO0FBQUEsTUFDRDtBQUVBLGNBQVEsTUFBTTtBQUFBLFFBQ2IsS0FBSztBQUNKLHFDQUEyQixLQUFLVCxPQUFNLEtBQUs7QUFDM0M7QUFBQSxRQUNELEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSixxQ0FBMkIsS0FBS0EsT0FBTSxLQUFLO0FBQzNDO0FBQUEsUUFDRCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0oscUNBQTJCLEtBQUtBLE9BQU0sS0FBSztBQUMzQztBQUFBLE1BQ0Y7QUFBQSxJQUNEO0FBRUEsVUFBTSxRQUFRQSxNQUFLLFVBQVUsbUJBQW1CLENBQUMsT0FBTyxDQUFDO0FBRXpELGVBQVcsQ0FBQyxFQUFFZ0IsS0FBSSxLQUFLLE9BQU8sUUFBUSxLQUFLLEdBQUc7QUFDN0MsTUFBQWhCLE1BQUtjLHFCQUFvQixFQUN2QixjQUFjLElBQUksY0FBYyxlQUFlLEVBQy9DLGlCQUFpQkUsT0FBTSxTQUFVLE9BQU87QUFDeEMsY0FBTSxVQUFVO0FBQUEsVUFDZjtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUNBLFlBQUksbUJBQW1CLGFBQWE7QUFDbkM7QUFBQSxRQUNEO0FBRUEsZUFBTyxLQUFLaEIsS0FBSTtBQUFBLE1BQ2pCLENBQUM7QUFFRixNQUFBQSxNQUFLYyxxQkFBb0IsRUFDdkIsY0FBYyxJQUFJLGNBQWMsNkJBQTZCLEVBQzdELGlCQUFpQkUsT0FBTSxTQUFVLE9BQU87QUFDeEMsWUFBSWhCLE1BQUssVUFBVSxZQUFZLE1BQVMsTUFBTSxNQUFNO0FBQ25EO0FBQUEsUUFDRDtBQUVBLGNBQU0sT0FBTyxNQUFNLGFBQWE7QUFDaEMsY0FBTSxVQUFVLE9BQU8sQ0FBQztBQUN4QixZQUFJLG1CQUFtQixhQUFhO0FBQ25DLGdCQUFNLFVBQVUsUUFBUTtBQUFBLFlBQ3ZCLElBQUksY0FBYztBQUFBLFVBQ25CO0FBQ0EsY0FBSSxtQkFBbUIsYUFBYTtBQUNuQyxnQkFBSSxRQUFRLFVBQVUsU0FBUyxPQUFPLEdBQUc7QUFDeEMsNkJBQWUsS0FBS0EsS0FBSTtBQUV4Qiw4QkFBZ0JBLE9BQU0sNkJBQTZCLENBQUMsQ0FBQztBQUFBLFlBQ3RELE9BQU87QUFDTixvQkFBTXFCLFdBQVU7QUFBQSxnQkFDZjtBQUFBLGdCQUNBO0FBQUEsZ0JBQ0E7QUFBQSxjQUNEO0FBQ0Esa0JBQUlBLG9CQUFtQixhQUFhO0FBQ25DO0FBQUEsY0FDRDtBQUVBLHFCQUFPLEtBQUtyQixLQUFJO0FBQUEsWUFDakI7QUFBQSxVQUNEO0FBQUEsUUFDRDtBQUFBLE1BQ0QsQ0FBQztBQUdGLE1BQUFBLE1BQUssaUJBQWlCZ0IsT0FBTWhCLE1BQUssdUJBQXVCLENBQUM7QUFBQSxJQUMxRDtBQUVBLElBQUFBLE1BQUssaUJBQWlCLGtCQUFrQkEsTUFBSyxrQkFBa0IsQ0FBQztBQUNoRSxJQUFBQSxNQUFLLGlCQUFpQixTQUFTQSxNQUFLLGlCQUFpQixDQUFDO0FBQ3RELElBQUFBLE1BQUssaUJBQWlCLFdBQVdBLE1BQUssZUFBZSxDQUFDO0FBRXRELFdBQU9BO0FBQUEsRUFDUjtBQU1BLFdBQVMsd0JBQXdCLFlBQVk7QUFDNUMsMEJBQXNCLE1BQU07QUFDM0IsWUFBTSxZQUFZLEtBQUssVUFBVSxXQUFXO0FBRTVDLFlBQU0sZUFDTCxRQUFRLFNBQVMsS0FDakIsVUFBVSxTQUFTLEtBQ25CLEtBQUssVUFBVSxtQkFBbUIsTUFBTTtBQUV6QyxZQUFNLFVBQVUsS0FBSyxVQUFVLDZCQUE2QjtBQUU1RCxVQUFJLGVBQWUsU0FBUztBQUMzQixZQUFJLFlBQVksU0FBUztBQUN4QixlQUFLLFVBQVUsK0JBQStCLE9BQU87QUFBQSxRQUN0RDtBQUNBO0FBQUEsTUFDRDtBQUVBLFVBQUksS0FBSyxlQUFlLE1BQU0sTUFBTTtBQUNuQyxZQUFJLFlBQVksV0FBVztBQUMxQixlQUFLLFVBQVUsK0JBQStCLFNBQVM7QUFBQSxRQUN4RDtBQUNBO0FBQUEsTUFDRDtBQUVBLFVBQUksZUFBZSxXQUFXO0FBQzdCLFlBQUksWUFBWSxXQUFXO0FBQzFCLGVBQUssVUFBVSwrQkFBK0IsU0FBUztBQUFBLFFBQ3hEO0FBQ0E7QUFBQSxNQUNEO0FBRUEsVUFBSSxjQUFjO0FBQ2pCLFlBQUksWUFBWSxTQUFTO0FBQ3hCLGVBQUssVUFBVSwrQkFBK0IsT0FBTztBQUFBLFFBQ3REO0FBQ0E7QUFBQSxNQUNEO0FBRUEsVUFBSSxLQUFLYyxxQkFBb0IsRUFBRSxVQUFVLFNBQVMsTUFBTSxHQUFHO0FBQzFELFlBQUksWUFBWSxRQUFRO0FBQ3ZCLGVBQUssVUFBVSwrQkFBK0IsTUFBTTtBQUFBLFFBQ3JEO0FBQ0E7QUFBQSxNQUNEO0FBRUEsWUFBTVosV0FBVSxLQUFLLFVBQVUsU0FBUztBQUN4QyxVQUNDQSxhQUFZLFVBQ1pBLGFBQVksUUFDWCxRQUFRQSxRQUFPLEtBQUtBLFNBQVEsV0FBVyxHQUN2QztBQUNELFlBQUksWUFBWSxTQUFTO0FBQ3hCLGVBQUssVUFBVSwrQkFBK0IsT0FBTztBQUFBLFFBQ3REO0FBQ0E7QUFBQSxNQUNEO0FBRUEsVUFBSSxZQUFZO0FBQ2YsWUFBSSxZQUFZLFlBQVk7QUFDM0IsZUFBSyxVQUFVLCtCQUErQixVQUFVO0FBQUEsUUFDekQ7QUFDQTtBQUFBLE1BQ0Q7QUFBQSxJQUNELENBQUM7QUFBQSxFQUNGO0FBT0EsV0FBU29CLHlCQUF3QjtBQUNoQyxRQUFJLENBQUMsS0FBSyxZQUFZO0FBQ3JCLFlBQU0sSUFBSSxNQUFNLDJCQUEyQjtBQUFBLElBQzVDO0FBRUEsU0FBS1IscUJBQW9CLElBQUksS0FBSyxXQUFXO0FBQUEsTUFDNUMsSUFBSSxjQUFjO0FBQUEsSUFDbkI7QUFDQSxTQUFLLHNCQUFzQixJQUFJLEtBQUssV0FBVztBQUFBLE1BQzlDLElBQUksY0FBYztBQUFBLElBQ25CO0FBQ0EsU0FBS1MsdUJBQXNCLElBQUksS0FBSyxXQUFXO0FBQUEsTUFDOUMsSUFBSSxjQUFjO0FBQUEsSUFDbkI7QUFDQSxTQUFLeEIsb0JBQW1CLElBQUksS0FBSyxXQUFXO0FBQUEsTUFDM0MsSUFBSSxjQUFjO0FBQUEsSUFDbkI7QUFDQSxTQUFLLHlCQUF5QixJQUFJLEtBQUssV0FBVztBQUFBLE1BQ2pELElBQUksY0FBYztBQUFBLElBQ25CO0FBQ0EsU0FBSyx5QkFBeUIsSUFBSSxLQUFLLFdBQVc7QUFBQSxNQUNqRCxJQUFJLGNBQWM7QUFBQSxJQUNuQjtBQUNBLFNBQUssa0NBQWtDLElBQ3RDLEtBQUsseUJBQXlCLEVBQUU7QUFDakMsU0FBSyxvQkFBb0IsSUFBSSxLQUFLLFdBQVc7QUFBQSxNQUM1QyxJQUFJLGNBQWM7QUFBQSxJQUNuQjtBQUNBLFNBQUssK0JBQStCLElBQUksS0FBSyxXQUFXO0FBQUEsTUFDdkQsSUFBSSxjQUFjO0FBQUEsSUFDbkI7QUFDQSxTQUFLLGlDQUFpQyxJQUFJLEtBQUssV0FBVztBQUFBLE1BQ3pELElBQUksY0FBYztBQUFBLElBQ25CO0FBQUEsRUFDRDtBQUtBLFdBQVMsZUFBZTtBQUN2QixRQUFJLEtBQUtBLG9CQUFtQixFQUFFLE1BQU0sWUFBWSwwQkFBMEI7QUFDekU7QUFBQSxJQUNEO0FBRUEsUUFBSSxLQUFLLFVBQVUsWUFBWSxLQUFLLE1BQU0sTUFBTTtBQUMvQztBQUFBLElBQ0Q7QUFFQSxRQUFJLFdBQVcsTUFBTTtBQUNwQixpQ0FBMkIsS0FBSyxJQUFJO0FBQ3BDLHFCQUFlO0FBQUEsUUFDZDtBQUFBLFFBQ0EsS0FBS2UscUJBQW9CO0FBQUEsUUFDekIsS0FBS2Ysb0JBQW1CO0FBQUEsUUFDeEIsS0FBSyxVQUFVLFVBQVUsQ0FBQyxDQUFDO0FBQUEsTUFDNUI7QUFBQSxJQUNELENBQUMsRUFDQyxJQUFJLEVBQ0osTUFBTSxDQUFDLE1BQU07QUFDYix3QkFBa0IsTUFBTSx3QkFBd0IsRUFBRSxPQUFPO0FBQUEsSUFDMUQsQ0FBQztBQUVGLFdBQU87QUFBQSxFQUNSO0FBTUEsV0FBU3lCLGVBQWM7QUFFdEIsV0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQStEUjtBQXpuRkEsTUEyRU0sMkJBTUEsMkJBTUFuQixzQkFNQSxzQkFNQSxvQkFNQSxpQkFPQWUsb0JBT0EseUJBT0FoQix1QkFPQSxpQkFPQSx1QkFNQSxtQkFPQSxvQkFPQVUsdUJBT0Esd0JBT0FTLHlCQU9BeEIsc0JBT0EsMkJBTUEsMkJBTUEsb0NBU0Esc0JBT0EsaUNBT0EsbUNBTUEsa0NBTUEsdUJBTUEsb0JBS0Esc0JBTUEsb0JBTUEscUJBTUEsc0JBTUEsd0JBS0Esd0JBbUJBO0FBdFNOLE1BQUEwQixlQUFBO0FBQUE7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQSxNQUFBQztBQUtBO0FBQ0E7QUFLQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUFBO0FBQ0E7QUFDQTtBQWdCQSxNQUFNLDRCQUE0QjtBQU1sQyxNQUFNLDRCQUE0QjtBQU1sQyxNQUFNckIsdUJBQXNCLE9BQU8sZUFBZTtBQU1sRCxNQUFNLHVCQUF1QixPQUFPLGdCQUFnQjtBQU1wRCxNQUFNLHFCQUFxQixPQUFPLGNBQWM7QUFNaEQsTUFBTSxrQkFBa0IsT0FBTyxXQUFXO0FBTzFDLE1BQU1lLHFCQUFvQixPQUFPLG1CQUFtQjtBQU9wRCxNQUFNLDBCQUEwQixPQUFPLHlCQUF5QjtBQU9oRSxNQUFNaEIsd0JBQXVCLE9BQU8sZ0JBQWdCO0FBT3BELE1BQU0sa0JBQWtCLE9BQU8saUJBQWlCO0FBT2hELE1BQU0sd0JBQXdCLE9BQU8saUJBQWlCO0FBTXRELE1BQU0sb0JBQW9CLE9BQU8sbUJBQW1CO0FBT3BELE1BQU0scUJBQXFCLE9BQU8sb0JBQW9CO0FBT3RELE1BQU1VLHdCQUF1QixPQUFPLGdCQUFnQjtBQU9wRCxNQUFNLHlCQUF5QixPQUFPLGtCQUFrQjtBQU94RCxNQUFNUywwQkFBeUIsT0FBTyxrQkFBa0I7QUFPeEQsTUFBTXhCLHVCQUFzQixPQUFPLGVBQWU7QUFPbEQsTUFBTSw0QkFBNEIsT0FBTyxxQkFBcUI7QUFNOUQsTUFBTSw0QkFBNEIsT0FBTyxxQkFBcUI7QUFNOUQsTUFBTSxxQ0FBcUM7QUFBQSxRQUMxQztBQUFBLE1BQ0Q7QUFPQSxNQUFNLHVCQUF1QixPQUFPLGdCQUFnQjtBQU9wRCxNQUFNLGtDQUFrQyxPQUFPLDJCQUEyQjtBQU8xRSxNQUFNLG9DQUFvQyxPQUFPLDZCQUE2QjtBQU05RSxNQUFNLG1DQUFtQyxPQUFPLDhCQUE4QjtBQU05RSxNQUFNLHdCQUF3QixPQUFPLHlCQUF5QjtBQU05RCxNQUFNLHFCQUFxQjtBQUszQixNQUFNLHVCQUF1QjtBQU03QixNQUFNLHFCQUFxQjtBQU0zQixNQUFNLHNCQUFzQjtBQU01QixNQUFNLHVCQUF1QjtBQU03QixNQUFNLHlCQUF5QjtBQUsvQixNQUFNLHlCQUF5QjtBQW1CL0IsTUFBTSxTQUFOLGNBQXFCLGNBQWM7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUlsQyxjQUFjO0FBQ2IsZ0JBQU07QUFDTixVQUFBWSxvQkFBbUIsS0FBSyxJQUFJO0FBQUEsUUFDN0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsWUFBWSxjQUFjLElBQUk7QUFDN0IsaUJBQU8sT0FBTyxJQUFJLG1EQUFtRDtBQUFBLFFBQ3RFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFjQSxJQUFJLFFBQVE7QUFDWCxpQkFBTyx3QkFBd0IsS0FBSyxNQUFNLEtBQUssVUFBVSxXQUFXLENBQUM7QUFBQSxRQUN0RTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxXQUFXLGlCQUFpQjtBQUMzQixpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQWNBLElBQUksTUFBTSxPQUFPO0FBQ2hCLGdCQUFNLFNBQVMsd0JBQXdCLEtBQUssTUFBTSxLQUFLO0FBQ3ZELHVCQUNFLEtBQUssTUFBTSxPQUFPLFNBQVMsRUFDM0IsS0FBSyxNQUFNO0FBQUEsVUFBQyxDQUFDLEVBQ2IsTUFBTSxDQUFDLE1BQU07QUFDYiw4QkFBa0IsTUFBTSx3QkFBd0IsRUFBRSxPQUFPO0FBQUEsVUFDMUQsQ0FBQztBQUFBLFFBQ0g7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUEwREEsSUFBSSxXQUFXO0FBQ2QsaUJBQU8sT0FBTztBQUFBLFlBQ2IsQ0FBQztBQUFBLFlBQ0QsTUFBTTtBQUFBLFlBQ047QUFBQSxjQUNDLGlCQUFpQixDQUFDLFNBQVMsT0FBTztBQUFBLGNBQ2xDLGdCQUFnQjtBQUFBLGNBQ2hCLFNBQVMsQ0FBQztBQUFBLGNBQ1YsV0FBVyxDQUFDO0FBQUEsY0FDWixnQkFBZ0I7QUFBQSxjQUNoQixNQUFNO0FBQUEsY0FDTixNQUFNLElBQUksR0FBRyxHQUFHLEVBQUUsU0FBUztBQUFBLGNBQzNCLFVBQVU7QUFBQSxnQkFDVCxVQUFVO0FBQUEsZ0JBQ1YsT0FBTztBQUFBLGdCQUNQLFVBQVU7QUFBQSxnQkFDVixlQUFlO0FBQUEsZ0JBQ2YsdUJBQXVCO0FBQUEsZ0JBQ3ZCLGtCQUFrQjtBQUFBLGdCQUNsQiwwQkFBMEI7QUFBQSxjQUMzQjtBQUFBLGNBQ0EsS0FBSztBQUFBLGNBQ0wsUUFBUTtBQUFBLGdCQUNQLEtBQUs7QUFBQSxnQkFDTCxVQUFVO0FBQUEsY0FDWDtBQUFBLGNBQ0EsUUFBUTtBQUFBLGdCQUNQLG9CQUFvQjtBQUFBLGdCQUNwQix3QkFBd0I7QUFBQSxnQkFDeEIseUJBQXlCO0FBQUEsZ0JBQ3pCLG9CQUFvQjtBQUFBLGdCQUNwQixnQkFBZ0I7QUFBQSxrQkFDZixNQUFNO0FBQUEsa0JBQ04sS0FBSztBQUFBLGtCQUNMLE9BQ0M7QUFBQSxnQkFDRjtBQUFBLGdCQUNBLGNBQ0M7QUFBQSxnQkFDRCxvQkFDQztBQUFBLGNBQ0Y7QUFBQSxjQUNBLFVBQVU7QUFBQSxnQkFDVCxTQUFTO0FBQUEsZ0JBQ1QsVUFBVTtBQUFBLGdCQUNWLGNBQWM7QUFBQSxjQUNmO0FBQUEsY0FDQSxPQUFPO0FBQUEsZ0JBQ04sVUFBVTtBQUFBLGdCQUNWLFFBQVE7QUFBQSxnQkFDUixNQUFNO0FBQUEsZ0JBQ04sYUFBYTtBQUFBLGdCQUNiLFNBQVM7QUFBQSxrQkFDUixRQUFRO0FBQUEsZ0JBQ1Q7QUFBQSxjQUNEO0FBQUEsY0FDQSxRQUFRO0FBQUEsZ0JBQ1AsY0FBYztBQUFBLGdCQUNkLE1BQU07QUFBQSxnQkFDTixVQUFVO0FBQUEsZ0JBQ1YsUUFBUTtBQUFBLGtCQUNQLE1BQU07QUFBQSxrQkFDTixPQUFPO0FBQUEsZ0JBQ1I7QUFBQSxjQUNEO0FBQUEsY0FDQSxTQUFTO0FBQUEsZ0JBQ1IsT0FBTztBQUFBLGdCQUNQLHFCQUFxQjtBQUFBLGNBQ3RCO0FBQUEsY0FDQSxTQUFTO0FBQUEsZ0JBQ1IsVUFBVTtBQUFBLGdCQUNWLGVBQWU7QUFBQSxnQkFDZixlQUFlO0FBQUEsZ0JBQ2YsUUFBUTtBQUFBLGNBQ1Q7QUFBQSxjQUNBLFdBQVc7QUFBQSxnQkFDVixXQUFXO0FBQUEsY0FDWjtBQUFBLGNBQ0EsV0FBVztBQUFBLGdCQUNWLE1BQU1hLGFBQVk7QUFBQSxjQUNuQjtBQUFBLGNBQ0EsaUJBQWlCO0FBQUE7QUFBQSxnQkFFaEIsVUFBVSxxQkFBcUI7QUFBQSxjQUNoQztBQUFBLGNBRUEsUUFBUTtBQUFBLGdCQUNQLFdBQVc7QUFBQSxnQkFDWCxZQUFZLENBQUMsUUFBUSxVQUFVO0FBQUEsY0FDaEM7QUFBQSxZQUNEO0FBQUEsWUFDQXZCLDBCQUF5QixLQUFLLElBQUk7QUFBQSxVQUNuQztBQUFBLFFBQ0Q7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLENBQUMsb0JBQW9CLElBQUk7QUFDeEIsZ0JBQU1ELFFBQU87QUFDYixnQkFBTSxvQkFBb0IsRUFBRTtBQUU1QixVQUFBc0IsdUJBQXNCLEtBQUt0QixLQUFJO0FBQy9CLFVBQUFtQixrQkFBaUIsS0FBS25CLEtBQUk7QUFFMUIsY0FBSSxlQUFlQSxNQUFLLFVBQVUscUJBQXFCLEtBQUs7QUFDNUQsY0FBSSxtQkFBbUIsY0FBYyxLQUFLLElBQUksTUFBTTtBQUVwRCxjQUFJLGNBQWMsS0FBSyxJQUFJLE1BQU0sb0JBQW9CO0FBQ3BELFlBQUFBLE1BQUssVUFBVSxxQkFBcUIsS0FBSztBQUN6QyxnQkFBSSxpQkFBaUIsTUFBTTtBQUMxQjtBQUFBLGdCQUNDO0FBQUEsZ0JBQ0E7QUFBQSxnQkFDQTtBQUFBLGNBQ0Q7QUFDQSw2QkFBZTtBQUFBLFlBQ2hCO0FBQUEsVUFDRDtBQUVBLGNBQUlBLE1BQUssYUFBYSxPQUFPLEdBQUc7QUFDL0IsZ0JBQUksV0FBVyxJQUFJLE1BQU07QUFDeEIsbUJBQUssUUFBUSxLQUFLLGFBQWEsT0FBTztBQUFBLFlBQ3ZDLENBQUMsRUFDQyxJQUFJLEVBQ0osTUFBTSxDQUFDLE1BQU07QUFDYixnQ0FBa0IsTUFBTSx3QkFBd0IsRUFBRSxPQUFPO0FBQUEsWUFDMUQsQ0FBQztBQUFBLFVBQ0g7QUFFQSxjQUFJQSxNQUFLLFVBQVUsS0FBSyxNQUFNLE1BQU07QUFDbkMsZ0JBQUksZ0JBQWdCLGtCQUFrQjtBQUNyQyw4QkFBZ0IsS0FBS0EsS0FBSTtBQUFBLFlBQzFCLE9BQU87QUFDTixjQUFBQSxNQUFLLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTTtBQUN6QixrQ0FBa0JBLE9BQU0sd0JBQXdCLEdBQUcsQ0FBQyxFQUFFO0FBQUEsY0FDdkQsQ0FBQztBQUFBLFlBQ0Y7QUFBQSxVQUNEO0FBRUEsY0FBSSxZQUFZQSxNQUFLO0FBQ3JCLFVBQUFBLE1BQUssY0FBYyxFQUFFO0FBQUEsWUFDcEIsSUFBSSxTQUFTLFdBQVk7QUFDeEIsa0JBQUksU0FBUyxJQUFJLEtBQUssZ0JBQWdCLGVBQWU7QUFDcEQsc0JBQU0sSUFBSSxLQUFLLFdBQVcsR0FBRyxTQUFTO0FBRXRDLG9CQUFJLGNBQWMsR0FBRztBQUNwQiw4QkFBWTtBQUNaLCtCQUNFLEtBQUtBLE9BQU0sQ0FBQyxFQUNaLEtBQUssTUFBTTtBQUFBLGtCQUFDLENBQUMsRUFDYixNQUFNLENBQUMsTUFBTTtBQUNiLHNDQUFrQkEsT0FBTSx3QkFBd0IsR0FBRyxDQUFDLEVBQUU7QUFBQSxrQkFDdkQsQ0FBQztBQUFBLGdCQUNIO0FBQUEsY0FDRDtBQUFBLFlBQ0QsQ0FBQztBQUFBLFVBQ0Y7QUFFQSxxQ0FBMkIsS0FBS0EsS0FBSTtBQUVwQyxpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVFBLHFCQUFxQjtBQUNwQixjQUFJLEtBQUssVUFBVSwyQkFBMkIsTUFBTSxPQUFPO0FBQzFELGtCQUFNLElBQUksTUFBTSxpQ0FBaUM7QUFBQSxVQUNsRDtBQUVBLGlCQUFPLE9BQU8scUJBQXFCO0FBQUEsUUFDcEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVFBLFFBQVE7QUFDUCxjQUFJLEtBQUssVUFBVSxVQUFVLE1BQU0sTUFBTTtBQUN4QztBQUFBLFVBQ0Q7QUFFQSxpQkFBTyxLQUFLLElBQUk7QUFBQSxRQUNqQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBUUEsTUFBTUUsVUFBUztBQUNkLGNBQUksS0FBSyxVQUFVLFVBQVUsTUFBTSxNQUFNO0FBQ3hDO0FBQUEsVUFDRDtBQUVBLGNBQUksV0FBVyxNQUFNO0FBQ3BCLHdCQUFZLEtBQUssSUFBSTtBQUNyQixZQUFBYSxhQUFZLEtBQUssTUFBTWIsUUFBTztBQUFBLFVBQy9CLENBQUMsRUFDQyxJQUFJLEVBQ0osTUFBTSxDQUFDLE1BQU07QUFDYiw4QkFBa0IsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLEVBQUU7QUFBQSxVQUN2RCxDQUFDO0FBQUEsUUFDSDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxPQUFPO0FBQ04sY0FBSSxXQUFXLE1BQU07QUFDcEIsd0JBQVksS0FBSyxJQUFJO0FBQ3JCLHVCQUFXLEtBQUssSUFBSTtBQUFBLFVBQ3JCLENBQUMsRUFDQyxJQUFJLEVBQ0osTUFBTSxDQUFDLE1BQU07QUFDYiw4QkFBa0IsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLEVBQUU7QUFBQSxVQUN2RCxDQUFDO0FBQUEsUUFDSDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBUUEsTUFBTSxLQUFLO0FBQ1YsaUJBQU8sUUFBUSxLQUFLLE1BQU0sR0FBRztBQUFBLFFBQzlCO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxvQkFBb0I7QUFDbkIsZ0JBQU0sa0JBQWtCO0FBQ3hCLGdCQUFNeUIsWUFBVyxZQUFZO0FBRTdCLHFCQUFXLENBQUMsRUFBRVgsS0FBSSxLQUFLLE9BQU8sUUFBUSxDQUFDLFNBQVMsT0FBTyxDQUFDLEdBQUc7QUFFMUQsWUFBQVcsVUFBUyxpQkFBaUJYLE9BQU0sS0FBS0ksa0JBQWlCLENBQUM7QUFBQSxVQUN4RDtBQUVBLDhCQUFvQixLQUFLLElBQUk7QUFDN0IsVUFBQWpCLHNCQUFxQixLQUFLLElBQUk7QUFDOUIsdUJBQWEsS0FBSyxJQUFJO0FBRXRCLGNBQUksV0FBVyxNQUFNO0FBQ3BCLHdCQUFZLEtBQUssSUFBSTtBQUNyQixZQUFBWSxhQUFZLEtBQUssSUFBSTtBQUFBLFVBQ3RCLENBQUMsRUFDQyxJQUFJLEVBQ0osTUFBTSxDQUFDLE1BQU07QUFDYiw4QkFBa0IsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLEVBQUU7QUFBQSxVQUN2RCxDQUFDO0FBQUEsUUFDSDtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0EsdUJBQXVCO0FBQ3RCLGdCQUFNLHFCQUFxQjtBQUMzQixnQkFBTVksWUFBVyxZQUFZO0FBRzdCLHFCQUFXLENBQUMsRUFBRVgsS0FBSSxLQUFLLE9BQU8sUUFBUSxDQUFDLFNBQVMsT0FBTyxDQUFDLEdBQUc7QUFDMUQsWUFBQVcsVUFBUyxvQkFBb0JYLE9BQU0sS0FBS0ksa0JBQWlCLENBQUM7QUFBQSxVQUMzRDtBQUVBLFVBQUFkLDBCQUF5QixLQUFLLElBQUk7QUFBQSxRQUNuQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFZQSxjQUFjLE1BQU07QUFDbkIsZ0JBQU0saUJBQWlCLEtBQUssVUFBVSxXQUFXLENBQUMsQ0FBQztBQUNuRCxnQkFBTSxXQUFXLGlCQUFpQixVQUFVO0FBQzVDLGdCQUFNLGdCQUFnQixpQkFBaUIsZUFBZTtBQUN0RCxnQkFBTSxnQkFBZ0IsaUJBQWlCLGVBQWU7QUFDdEQsZ0JBQU0sU0FBUyxpQkFBaUIsUUFBUTtBQUV4QyxjQUFJc0IsUUFBTztBQUNYLGNBQUksa0JBQWtCLElBQUk7QUFDekIsOEJBQWtCLE1BQU0sd0JBQXdCLHNCQUFzQjtBQUN0RSxZQUFBQSxRQUFPO0FBQUEsVUFDUjtBQUVBLGNBQUksa0JBQWtCLElBQUk7QUFDekIsOEJBQWtCLE1BQU0sd0JBQXdCLHNCQUFzQjtBQUN0RSxZQUFBQSxRQUFPO0FBQUEsVUFDUjtBQUVBLGNBQUlBLFVBQVMsTUFBTTtBQUNsQixrQkFBTSxJQUFJLE1BQU0sNkJBQTZCO0FBQUEsVUFDOUM7QUFFQSxnQkFBTSxNQUFNLFNBQVMsTUFBTSxVQUFVLGVBQWUsZUFBZSxNQUFNO0FBRXpFLGdCQUFNMUIsV0FBVSxDQUFDO0FBRWpCLGNBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRztBQUNyQixrQkFBTSxJQUFJLE1BQU0scUJBQXFCO0FBQUEsVUFDdEM7QUFFQSxnQkFBTSxhQUFhO0FBRW5CLGNBQUksUUFBUSxDQUFDLE9BQU8sVUFBVTtBQUM3QixZQUFBQSxTQUFRLEtBQUs7QUFBQSxjQUNaO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxjQUNBLE1BQU0sSUFBSSxJQUFJLEtBQUs7QUFBQSxZQUNwQixDQUFDO0FBQUEsVUFDRixDQUFDO0FBRUQsbUNBQXlCLEtBQUssTUFBTSxJQUFJLElBQUk7QUFDNUMsZUFBSyxVQUFVLFdBQVdBLFFBQU87QUFFakMsMEJBQWdCLE1BQU0sdUJBQXVCO0FBQUEsWUFDNUMsU0FBQUE7QUFBQSxVQUNELENBQUM7QUFFRCxpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsNkJBQTZCO0FBQzVCLHFDQUEyQixLQUFLLElBQUk7QUFDcEMsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLE9BQU8sU0FBUztBQUNmLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxPQUFPLG1CQUFtQjtBQUN6QixpQkFBTyxDQUFDLGdCQUFnQjtBQUFBLFFBQ3pCO0FBQUEsTUFDRDtBQWszREEsNEJBQXNCLE1BQU07QUFBQTtBQUFBOzs7QUMzbkY1QixNQXFCTTtBQXJCTixNQUFBMkIsZUFBQTtBQUFBO0FBWUE7QUFDQSxNQUFBQztBQVFBLE1BQU0sbUJBQW1CLElBQUksY0FBYztBQUUzQyxVQUFJO0FBQ0gseUJBQWlCO0FBQUEsVUFDaEI7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUlBO0FBQUEsUUFDRDtBQUFBLE1BQ0QsU0FBUyxHQUFHO0FBQ1g7QUFBQSxVQUNDLFNBQVMsWUFBWSxFQUFFLGNBQWMsTUFBTTtBQUFBLFVBQzNDO0FBQUEsVUFDQSxJQUFJO0FBQUEsUUFDTDtBQUFBLE1BQ0Q7QUFBQTtBQUFBOzs7QUM2TUEsV0FBU0Msb0JBQW1CO0FBQzNCLFNBQUtDLGtCQUFpQixJQUFJLENBQUMsVUFBVTtBQUNwQyxZQUFNLE9BQU8sTUFBTSxhQUFhO0FBRWhDLGlCQUFXLENBQUMsRUFBRSxPQUFPLEtBQUssT0FBTyxRQUFRLElBQUksR0FBRztBQUMvQyxZQUFJLFlBQVksTUFBTTtBQUNyQjtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQ0EsTUFBQUMsTUFBSyxLQUFLLElBQUk7QUFBQSxJQUNmO0FBRUEsUUFBSSxRQUFRO0FBQ1osVUFBTSxhQUFhLEtBQUssVUFBVSxNQUFNO0FBRXhDLFFBQUksT0FBTyxlQUFlLFVBQVU7QUFDbkMsY0FBUSxXQUFXLE1BQU0sR0FBRztBQUFBLElBQzdCO0FBRUEsUUFDQyxVQUFVLFFBQ1YsVUFBVSxVQUNWLFFBQVEsS0FBSyxNQUFNLFNBQ25CLE1BQU0sV0FBVyxHQUNoQjtBQUNELGNBQVEsQ0FBQyxRQUFRO0FBQUEsSUFDbEI7QUFFQSxlQUFXLENBQUMsRUFBRSxJQUFJLEtBQUssT0FBTyxRQUFRLEtBQUssR0FBRztBQUM3Qyw2QkFBdUIsS0FBSyxNQUFNLElBQUk7QUFBQSxJQUN2QztBQUVBLFdBQU87QUFBQSxFQUNSO0FBUUEsV0FBUyx1QkFBdUIsTUFBTTtBQUNyQyxZQUFRLE1BQU07QUFBQSxNQUNiLEtBQUs7QUFDSjtBQUFBLE1BRUQsS0FBSztBQUNKLGFBQUtDLG9CQUFtQixFQUFFLGlCQUFpQixTQUFTLENBQUMsVUFBVTtBQUM5RCxjQUFJLEtBQUssVUFBVSwrQkFBK0IsTUFBTSxNQUFNO0FBQzdELGtCQUFNLGVBQWU7QUFBQSxVQUN0QjtBQUNBLGVBQUssV0FBVztBQUFBLFFBQ2pCLENBQUM7QUFDRCxhQUFLQSxvQkFBbUIsRUFBRSxpQkFBaUIsUUFBUSxDQUFDLFVBQVU7QUFDN0QsY0FBSSxLQUFLLFVBQVUsK0JBQStCLE1BQU0sTUFBTTtBQUM3RCxrQkFBTSxlQUFlO0FBQUEsVUFDdEI7QUFDQSxlQUFLLFdBQVc7QUFBQSxRQUNqQixDQUFDO0FBQ0Q7QUFBQSxNQUVELEtBQUs7QUFDSixhQUFLQSxvQkFBbUIsRUFBRSxpQkFBaUIsU0FBUyxDQUFDLFVBQVU7QUFDOUQsY0FBSSxLQUFLLFVBQVUsK0JBQStCLE1BQU0sTUFBTTtBQUM3RCxrQkFBTSxlQUFlO0FBQUEsVUFDdEI7QUFDQSxlQUFLLGFBQWE7QUFBQSxRQUNuQixDQUFDO0FBQ0Q7QUFBQSxNQUNELEtBQUs7QUFDSixhQUFLQSxvQkFBbUIsRUFBRSxpQkFBaUIsY0FBYyxDQUFDLFVBQVU7QUFDbkUsY0FBSSxLQUFLLFVBQVUsK0JBQStCLE1BQU0sTUFBTTtBQUM3RCxrQkFBTSxlQUFlO0FBQUEsVUFDdEI7QUFDQSxlQUFLLFdBQVc7QUFBQSxRQUNqQixDQUFDO0FBQ0Q7QUFBQSxNQUVELEtBQUs7QUFDSixhQUFLQSxvQkFBbUIsRUFBRSxpQkFBaUIsY0FBYyxDQUFDLFVBQVU7QUFDbkUsY0FBSSxLQUFLLFVBQVUsK0JBQStCLE1BQU0sTUFBTTtBQUM3RCxrQkFBTSxlQUFlO0FBQUEsVUFDdEI7QUFDQSxlQUFLLFdBQVc7QUFBQSxRQUNqQixDQUFDO0FBQ0QsYUFBS0Esb0JBQW1CLEVBQUUsaUJBQWlCLGNBQWMsQ0FBQyxVQUFVO0FBQ25FLGNBQUksS0FBSyxVQUFVLCtCQUErQixNQUFNLE1BQU07QUFDN0Qsa0JBQU0sZUFBZTtBQUFBLFVBQ3RCO0FBQ0EsZUFBSyxXQUFXO0FBQUEsUUFDakIsQ0FBQztBQUNEO0FBQUEsTUFDRDtBQUNDLGNBQU0sSUFBSSxNQUFNLGdCQUFnQixJQUFJLEVBQUU7QUFBQSxJQUN4QztBQUFBLEVBQ0Q7QUFLQSxXQUFTQyx3QkFBdUI7QUFFL0IsU0FBS0MscUJBQW9CLElBQUksSUFBSSxlQUFlLENBQUMsWUFBWTtBQUM1RCxVQUFJLEtBQUtDLG9CQUFtQixhQUFhLGdCQUFnQjtBQUN4RCxZQUFJO0FBQ0gsZUFBS0Esb0JBQW1CLEVBQUUsTUFBTTtBQUNoQztBQUFBLFFBQ0QsU0FBUyxHQUFHO0FBQ1gsaUJBQU8sS0FBS0Esb0JBQW1CO0FBQUEsUUFDaEM7QUFBQSxNQUNEO0FBRUEsV0FBS0Esb0JBQW1CLElBQUksSUFBSSxlQUFlLEtBQUssTUFBTTtBQUN6RCxRQUFBQyxjQUFhLEtBQUssSUFBSTtBQUFBLE1BQ3ZCLENBQUM7QUFBQSxJQUNGLENBQUM7QUFFRCxTQUFLRixxQkFBb0IsRUFBRSxRQUFRLEtBQUssYUFBYTtBQUFBLEVBQ3REO0FBRUEsV0FBU0csNEJBQTJCO0FBQ25DLFFBQUksS0FBS0gscUJBQW9CLGFBQWEsZ0JBQWdCO0FBQ3pELFdBQUtBLHFCQUFvQixFQUFFLFdBQVc7QUFBQSxJQUN2QztBQUFBLEVBQ0Q7QUFLQSxXQUFTSCxRQUFPO0FBQ2YsVUFBTU8sUUFBTztBQUViLG9CQUFnQkEsT0FBTSx1QkFBdUI7QUFBQSxNQUM1QyxNQUFBQTtBQUFBLElBQ0QsQ0FBQztBQUVELElBQUFBLE1BQUtDLG9CQUFtQixFQUFFLE1BQU0sVUFBVTtBQUMxQyx5QkFBcUJELE1BQUtFLHFCQUFvQixHQUFHLFNBQVMsTUFBTTtBQUVoRSxlQUFXLE1BQU07QUFDaEIsc0JBQWdCRixPQUFNLHlCQUF5QjtBQUFBLFFBQzlDLE1BQUFBO0FBQUEsTUFDRCxDQUFDO0FBQUEsSUFDRixHQUFHLENBQUM7QUFBQSxFQUNMO0FBS0EsV0FBU0csUUFBTztBQUNmLFVBQU1ILFFBQU87QUFFYixRQUFJQSxNQUFLLFVBQVUsWUFBWSxLQUFLLE1BQU0sTUFBTTtBQUMvQztBQUFBLElBQ0Q7QUFFQSxRQUFJQSxNQUFLQyxvQkFBbUIsRUFBRSxNQUFNLFlBQVksMEJBQTBCO0FBQ3pFO0FBQUEsSUFDRDtBQUVBLG9CQUFnQkQsT0FBTSx1QkFBdUI7QUFBQSxNQUM1QyxNQUFBQTtBQUFBLElBQ0QsQ0FBQztBQUVELElBQUFBLE1BQUtDLG9CQUFtQixFQUFFLE1BQU0sYUFBYTtBQUM3QyxJQUFBRCxNQUFLQyxvQkFBbUIsRUFBRSxNQUFNLFVBQVU7QUFFMUMsc0JBQWtCRCxNQUFLRSxxQkFBb0IsR0FBRyxTQUFTLE1BQU07QUFDN0QsSUFBQUosY0FBYSxLQUFLRSxLQUFJO0FBRXRCLGVBQVcsTUFBTTtBQUNoQixzQkFBZ0JBLE9BQU0seUJBQXlCO0FBQUEsUUFDOUMsTUFBQUE7QUFBQSxNQUNELENBQUM7QUFBQSxJQUNGLEdBQUcsQ0FBQztBQUFBLEVBQ0w7QUFLQSxXQUFTRixnQkFBZTtBQUN2QixRQUFJLEtBQUtHLG9CQUFtQixFQUFFLE1BQU0sWUFBWSwwQkFBMEI7QUFDekU7QUFBQSxJQUNEO0FBRUEsUUFBSSxLQUFLLFVBQVUsWUFBWSxLQUFLLE1BQU0sTUFBTTtBQUMvQztBQUFBLElBQ0Q7QUFFQSxtQkFBZTtBQUFBLE1BQ2Q7QUFBQSxNQUNBLEtBQUtDLHFCQUFvQjtBQUFBLE1BQ3pCLEtBQUtELG9CQUFtQjtBQUFBLE1BQ3hCLEtBQUssVUFBVSxVQUFVLENBQUMsQ0FBQztBQUFBLElBQzVCO0FBQUEsRUFDRDtBQU1BLFdBQVNHLHlCQUF3QjtBQUNoQyxTQUFLRixxQkFBb0IsSUFBSSxLQUFLLFdBQVc7QUFBQSxNQUM1QyxJQUFJLGNBQWM7QUFBQSxJQUNuQjtBQUNBLFNBQUtSLG9CQUFtQixJQUFJLEtBQUssV0FBVztBQUFBLE1BQzNDLElBQUksY0FBYztBQUFBLElBQ25CO0FBQ0EsU0FBS08sb0JBQW1CLElBQUksS0FBSyxXQUFXO0FBQUEsTUFDM0MsSUFBSSxjQUFjO0FBQUEsSUFDbkI7QUFDQSxTQUFLLGtCQUFrQixJQUFJLEtBQUssV0FBVztBQUFBLE1BQzFDLElBQUksY0FBYztBQUFBLElBQ25CO0FBQ0EsV0FBTztBQUFBLEVBQ1I7QUFNQSxXQUFTSSxnQkFBYztBQUV0QixXQUFPO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVdSO0FBNWRBLE1BdUNNUixzQkFPQUQsdUJBT0FKLG9CQU1BVSx1QkFNQVIsc0JBT0FPLHNCQU9BLG9CQWtCQTtBQWpHTixNQUFBSyxlQUFBO0FBQUE7QUFjQTtBQUNBO0FBSUEsTUFBQUM7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBLE1BQUFBO0FBQ0E7QUFDQSxNQUFBRDtBQUNBO0FBUUEsTUFBTVQsdUJBQXNCLE9BQU8sZUFBZTtBQU9sRCxNQUFNRCx3QkFBdUIsT0FBTyxnQkFBZ0I7QUFPcEQsTUFBTUoscUJBQW9CLE9BQU8sbUJBQW1CO0FBTXBELE1BQU1VLHdCQUF1QixPQUFPLGdCQUFnQjtBQU1wRCxNQUFNUix1QkFBc0IsT0FBTyxlQUFlO0FBT2xELE1BQU1PLHVCQUFzQixPQUFPLGVBQWU7QUFPbEQsTUFBTSxxQkFBcUIsT0FBTyxjQUFjO0FBa0JoRCxNQUFNLFNBQU4sY0FBcUIsY0FBYztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLbEMsWUFBWSxjQUFjLElBQUk7QUFDN0IsaUJBQU8sT0FBTyxJQUFJLHFEQUFxRDtBQUFBLFFBQ3hFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQWtCQSxJQUFJLFdBQVc7QUFDZCxpQkFBTyxPQUFPLE9BQU8sQ0FBQyxHQUFHLE1BQU0sVUFBVTtBQUFBLFlBQ3hDLFdBQVc7QUFBQSxjQUNWLE1BQU1JLGNBQVk7QUFBQSxZQUNuQjtBQUFBLFlBQ0EsTUFBTTtBQUFBLFlBQ04sU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLGNBQ1AsV0FBVztBQUFBLGNBQ1gsWUFBWSxDQUFDLGlCQUFpQixTQUFTLGFBQWEsT0FBTztBQUFBLFlBQzVEO0FBQUEsWUFDQSxVQUFVO0FBQUEsY0FDVCxzQkFBc0I7QUFBQSxZQUN2QjtBQUFBLFVBQ0QsQ0FBQztBQUFBLFFBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxDQUFDLG9CQUFvQixJQUFJO0FBQ3hCLGdCQUFNLG9CQUFvQixFQUFFO0FBQzVCLFVBQUFELHVCQUFzQixLQUFLLElBQUk7QUFDL0IsVUFBQWIsa0JBQWlCLEtBQUssSUFBSTtBQUFBLFFBQzNCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsT0FBTyxTQUFTO0FBQ2YsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsT0FBTyxtQkFBbUI7QUFDekIsaUJBQU8sQ0FBQyxnQkFBZ0I7QUFBQSxRQUN6QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU9BLG9CQUFvQjtBQUNuQixnQkFBTSxrQkFBa0I7QUFFeEIsZ0JBQU1pQixZQUFXLFlBQVk7QUFFN0IscUJBQVcsQ0FBQyxFQUFFQyxLQUFJLEtBQUssT0FBTyxRQUFRLENBQUMsU0FBUyxPQUFPLENBQUMsR0FBRztBQUUxRCxZQUFBRCxVQUFTLGlCQUFpQkMsT0FBTSxLQUFLakIsa0JBQWlCLENBQUM7QUFBQSxVQUN4RDtBQUVBLFVBQUFNLGNBQWEsS0FBSyxJQUFJO0FBQ3RCLFVBQUFILHNCQUFxQixLQUFLLElBQUk7QUFBQSxRQUMvQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU9BLHVCQUF1QjtBQUN0QixnQkFBTSxxQkFBcUI7QUFHM0IscUJBQVcsQ0FBQyxFQUFFYyxLQUFJLEtBQUssT0FBTyxRQUFRLENBQUMsU0FBUyxPQUFPLENBQUMsR0FBRztBQUMxRCxxQkFBUyxvQkFBb0JBLE9BQU0sS0FBS2pCLGtCQUFpQixDQUFDO0FBQUEsVUFDM0Q7QUFFQSxVQUFBTywwQkFBeUIsS0FBSyxJQUFJO0FBQUEsUUFDbkM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxhQUFhO0FBQ1osVUFBQUksTUFBSyxLQUFLLElBQUk7QUFDZCxpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxhQUFhO0FBQ1osVUFBQVYsTUFBSyxLQUFLLElBQUk7QUFDZCxpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxlQUFlO0FBQ2QsY0FBSSxLQUFLUSxvQkFBbUIsRUFBRSxNQUFNLFlBQVksMEJBQTBCO0FBQ3pFLGlCQUFLLFdBQVc7QUFBQSxVQUNqQixPQUFPO0FBQ04saUJBQUssV0FBVztBQUFBLFVBQ2pCO0FBQ0EsaUJBQU87QUFBQSxRQUNSO0FBQUEsTUFDRDtBQWtQQSw0QkFBc0IsTUFBTTtBQUFBO0FBQUE7OztBQzlkNUIsTUF1Qk1TO0FBdkJOLE1BQUFDLGVBQUE7QUFBQTtBQWNBLE1BQUFBO0FBU0EsTUFBTUQsVUFBTixjQUFxQixPQUFVO0FBQUEsTUFBQztBQUFBO0FBQUE7OztBQ3ZCaEMsTUFxQk07QUFyQk47QUFBQTtBQVlBO0FBQ0EsTUFBQUU7QUFRQSxNQUFNLHlCQUF5QixJQUFJLGNBQWM7QUFFakQsVUFBSTtBQUNILCtCQUF1QjtBQUFBLFVBQ3RCO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFJQTtBQUFBLFFBQ0Q7QUFBQSxNQUNELFNBQVMsR0FBRztBQUNYO0FBQUEsVUFDQyxTQUFTLFlBQVksRUFBRSxjQUFjLE1BQU07QUFBQSxVQUMzQztBQUFBLFVBQ0EsSUFBSTtBQUFBLFFBQ0w7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDc1RBLFdBQVNDLG9CQUFtQjtBQUMzQixTQUFLQyxrQkFBaUIsSUFBSSxDQUFDLFVBQVU7QUFDcEMsWUFBTSxPQUFPLE1BQU0sYUFBYTtBQUVoQyxpQkFBVyxDQUFDLEVBQUUsT0FBTyxLQUFLLE9BQU8sUUFBUSxJQUFJLEdBQUc7QUFDL0MsWUFBSSxZQUFZLE1BQU07QUFDckI7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUNBLFdBQUssV0FBVztBQUFBLElBQ2pCO0FBRUEsV0FBTztBQUFBLEVBQ1I7QUFLQSxXQUFTQyx3QkFBdUI7QUFFL0IsU0FBS0MscUJBQW9CLElBQUksSUFBSSxlQUFlLE1BQU07QUFDckQsVUFBSSxLQUFLQyxvQkFBbUIsYUFBYSxnQkFBZ0I7QUFDeEQsWUFBSTtBQUNILGVBQUtBLG9CQUFtQixFQUFFLE1BQU07QUFDaEM7QUFBQSxRQUNELFNBQVMsR0FBRztBQUNYLGlCQUFPLEtBQUtBLG9CQUFtQjtBQUFBLFFBQ2hDO0FBQUEsTUFDRDtBQUVBLFdBQUtBLG9CQUFtQixJQUFJLElBQUksZUFBZSxLQUFLLE1BQU07QUFDekQsUUFBQUMsY0FBYSxLQUFLLElBQUk7QUFBQSxNQUN2QixDQUFDO0FBQUEsSUFDRixDQUFDO0FBRUQsU0FBS0YscUJBQW9CLEVBQUUsUUFBUSxLQUFLLGFBQWE7QUFBQSxFQUN0RDtBQUVBLFdBQVNHLDRCQUEyQjtBQUNuQyxRQUFJLEtBQUtILHFCQUFvQixhQUFhLGdCQUFnQjtBQUN6RCxXQUFLQSxxQkFBb0IsRUFBRSxXQUFXO0FBQUEsSUFDdkM7QUFBQSxFQUNEO0FBS0EsV0FBU0UsZ0JBQWU7QUFDdkIsUUFBSSxLQUFLRSxvQkFBbUIsRUFBRSxNQUFNLFlBQVksMEJBQTBCO0FBQ3pFO0FBQUEsSUFDRDtBQUVBLFFBQUksS0FBSyxVQUFVLFlBQVksS0FBSyxNQUFNLE1BQU07QUFDL0M7QUFBQSxJQUNEO0FBRUEsbUJBQWU7QUFBQSxNQUNkO0FBQUEsTUFDQSxLQUFLQyxxQkFBb0I7QUFBQSxNQUN6QixLQUFLRCxvQkFBbUI7QUFBQSxNQUN4QixLQUFLLFVBQVUsVUFBVSxDQUFDLENBQUM7QUFBQSxJQUM1QjtBQUFBLEVBQ0Q7QUFNQSxXQUFTRSx5QkFBd0I7QUFDaEMsU0FBS0QscUJBQW9CLElBQUksS0FBSyxXQUFXO0FBQUEsTUFDNUMsSUFBSSxjQUFjO0FBQUEsSUFDbkI7QUFFQSxTQUFLRSxvQkFBbUIsSUFBSSxLQUFLLFdBQVc7QUFBQSxNQUMzQyxJQUFJLGNBQWM7QUFBQSxJQUNuQjtBQUVBLFNBQUtILG9CQUFtQixJQUFJLEtBQUssV0FBVztBQUFBLE1BQzNDLElBQUksY0FBYztBQUFBLElBQ25CO0FBRUEsU0FBS0ksbUJBQWtCLElBQUksS0FBSyxXQUFXO0FBQUEsTUFDMUMsSUFBSSxjQUFjO0FBQUEsSUFDbkI7QUFBQSxFQUNEO0FBTUEsV0FBU0MsZ0JBQWM7QUFFdEIsV0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFjUjtBQXJjQSxNQXVDTVIsc0JBT0FELHVCQU9BRixvQkFNQU8sdUJBTUFFLHNCQU9BSCxzQkFPQUkscUJBOERBO0FBN0lOLE1BQUFFLHNCQUFBO0FBQUE7QUFjQTtBQUNBO0FBQ0EsTUFBQUM7QUFJQTtBQUlBO0FBQ0E7QUFDQTtBQUNBLE1BQUFDO0FBQ0EsTUFBQUQ7QUFDQTtBQUNBO0FBQ0EsTUFBQUU7QUFRQSxNQUFNWix1QkFBc0IsT0FBTyxlQUFlO0FBT2xELE1BQU1ELHdCQUF1QixPQUFPLGdCQUFnQjtBQU9wRCxNQUFNRixxQkFBb0IsT0FBTyxtQkFBbUI7QUFNcEQsTUFBTU8sd0JBQXVCLE9BQU8sZ0JBQWdCO0FBTXBELE1BQU1FLHVCQUFzQixPQUFPLGVBQWU7QUFPbEQsTUFBTUgsdUJBQXNCLE9BQU8sZUFBZTtBQU9sRCxNQUFNSSxzQkFBcUIsT0FBTyxjQUFjO0FBOERoRCxNQUFNLGVBQU4sY0FBMkJNLFFBQU87QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNakMsWUFBWSxjQUFjLElBQUk7QUFDN0IsaUJBQU8sT0FBTztBQUFBLFlBQ2I7QUFBQSxVQUNEO0FBQUEsUUFDRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQWdCQSxJQUFJLFdBQVc7QUFDZCxpQkFBTyxPQUFPLE9BQU8sQ0FBQyxHQUFHLE1BQU0sVUFBVTtBQUFBLFlBQ3hDLFdBQVc7QUFBQSxjQUNWLE1BQU1MLGNBQVk7QUFBQSxZQUNuQjtBQUFBLFlBQ0EsU0FBUztBQUFBLGNBQ1IsT0FBTyxDQUFDLE1BQU07QUFDYixxQkFBSyxhQUFhO0FBQUEsY0FDbkI7QUFBQSxZQUNEO0FBQUEsWUFDQSxTQUFTO0FBQUEsY0FDUixRQUFRO0FBQUEsWUFDVDtBQUFBLFlBQ0EsUUFBUTtBQUFBLGNBQ1AsUUFBUTtBQUFBLFlBQ1Q7QUFBQSxZQUNBLE1BQU07QUFBQSxZQUNOLE9BQU87QUFBQSxVQUNSLENBQUM7QUFBQSxRQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLENBQUMsb0JBQW9CLElBQUk7QUFDeEIsZ0JBQU0sb0JBQW9CLEVBQUU7QUFDNUIsVUFBQUgsdUJBQXNCLEtBQUssSUFBSTtBQUMvQixVQUFBVCxrQkFBaUIsS0FBSyxJQUFJO0FBRTFCLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0EsT0FBTyxTQUFTO0FBQ2YsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxPQUFPLG1CQUFtQjtBQUN6QixnQkFBTWtCLFVBQVMsTUFBTSxpQkFBaUI7QUFDdEMsVUFBQUEsUUFBTyxLQUFLLHNCQUFzQjtBQUNsQyxpQkFBT0E7QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxvQkFBb0I7QUFDbkIsZ0JBQU0sa0JBQWtCO0FBRXhCLGdCQUFNQyxZQUFXLFlBQVk7QUFFN0IscUJBQVcsQ0FBQyxFQUFFQyxLQUFJLEtBQUssT0FBTyxRQUFRLENBQUMsU0FBUyxPQUFPLENBQUMsR0FBRztBQUUxRCxZQUFBRCxVQUFTLGlCQUFpQkMsT0FBTSxLQUFLbkIsa0JBQWlCLENBQUM7QUFBQSxVQUN4RDtBQUVBLFVBQUFJLGNBQWEsS0FBSyxJQUFJO0FBQ3RCLFVBQUFILHNCQUFxQixLQUFLLElBQUk7QUFBQSxRQUMvQjtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0EsdUJBQXVCO0FBQ3RCLGdCQUFNLHFCQUFxQjtBQUczQixxQkFBVyxDQUFDLEVBQUVrQixLQUFJLEtBQUssT0FBTyxRQUFRLENBQUMsU0FBUyxPQUFPLENBQUMsR0FBRztBQUMxRCxxQkFBUyxvQkFBb0JBLE9BQU0sS0FBS25CLGtCQUFpQixDQUFDO0FBQUEsVUFDM0Q7QUFFQSxVQUFBSywwQkFBeUIsS0FBSyxJQUFJO0FBQUEsUUFDbkM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVFBLFFBQVE7QUFDUCxjQUFJLEtBQUssVUFBVSxVQUFVLE1BQU0sTUFBTTtBQUN4QztBQUFBLFVBQ0Q7QUFFQSxjQUNDLEtBQUtJLG9CQUFtQixLQUN4QixXQUFXLEtBQUtBLG9CQUFtQixFQUFFLEtBQUssR0FDekM7QUFDRCxpQkFBS0Esb0JBQW1CLEVBQUUsTUFBTTtBQUFBLFVBQ2pDO0FBQUEsUUFDRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFTQSxNQUFNVyxVQUFTO0FBQ2QsY0FBSSxLQUFLLFVBQVUsVUFBVSxNQUFNLE1BQU07QUFDeEM7QUFBQSxVQUNEO0FBRUEsY0FDQyxLQUFLWCxvQkFBbUIsS0FDeEIsV0FBVyxLQUFLQSxvQkFBbUIsRUFBRSxLQUFLLEdBQ3pDO0FBQ0QsaUJBQUtBLG9CQUFtQixFQUFFLE1BQU1XLFFBQU87QUFBQSxVQUN4QztBQUFBLFFBQ0Q7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLE9BQU87QUFDTixjQUNDLEtBQUtYLG9CQUFtQixLQUN4QixXQUFXLEtBQUtBLG9CQUFtQixFQUFFLElBQUksR0FDeEM7QUFDRCxpQkFBS0Esb0JBQW1CLEVBQUUsS0FBSztBQUFBLFVBQ2hDO0FBQUEsUUFDRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxXQUFXLGlCQUFpQjtBQUMzQixpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQWNBLElBQUksUUFBUTtBQUNYLGlCQUFPLEtBQUssVUFBVSxPQUFPO0FBQUEsUUFDOUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFhQSxJQUFJLE1BQU0sT0FBTztBQUNoQixlQUFLLFVBQVUsU0FBUyxLQUFLO0FBQzdCLGNBQUk7QUFDSCxrQkFBTSxhQUFhLEtBQUssS0FBSztBQUFBLFVBQzlCLFNBQVMsR0FBRztBQUNYLDhCQUFrQixNQUFNLHdCQUF3QixFQUFFLE9BQU87QUFBQSxVQUMxRDtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBa0hBLDRCQUFzQixZQUFZO0FBQUE7QUFBQTs7O0FDdmNsQyxNQXFCTTtBQXJCTjtBQUFBO0FBWUE7QUFDQSxNQUFBWTtBQVFBLE1BQU0sMEJBQTBCLElBQUksY0FBYztBQUVsRCxVQUFJO0FBQ0gsZ0NBQXdCO0FBQUEsVUFDdkI7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUlBO0FBQUEsUUFDRDtBQUFBLE1BQ0QsU0FBUyxHQUFHO0FBQ1g7QUFBQSxVQUNDLFNBQVMsWUFBWSxFQUFFLGNBQWMsTUFBTTtBQUFBLFVBQzNDO0FBQUEsVUFDQSxJQUFJO0FBQUEsUUFDTDtBQUFBLE1BQ0Q7QUFBQTtBQUFBOzs7QUNyQ0EsTUFxQk07QUFyQk47QUFBQTtBQVlBO0FBQ0EsTUFBQUM7QUFRQSxNQUFNLCtCQUErQixJQUFJLGNBQWM7QUFFdkQsVUFBSTtBQUNGLHFDQUE2QixXQUFXO0FBQUE7QUFBQTtBQUFBLElBR3RDLENBQUM7QUFBQSxNQUNMLFNBQVMsR0FBRztBQUNWLDBCQUFrQixTQUFTLFlBQVksRUFBRSxjQUFjLE1BQU0sR0FBRyx3QkFBd0IsSUFBSSxFQUFFO0FBQUEsTUFDaEc7QUFBQTtBQUFBOzs7QUNpVUEsV0FBU0Msd0JBQXVCLE1BQU07QUFDckMsWUFBUSxNQUFNO0FBQUEsTUFDYixLQUFLO0FBQ0osYUFBS0Msb0JBQW1CLEVBQUUsVUFBVSxpQkFBaUIsQ0FBQyxNQUFNO0FBQzNELGdCQUFNLFdBQVcsS0FBSyxVQUFVLGVBQWU7QUFDL0MsY0FBSSxXQUFXLFFBQVEsR0FBRztBQUN6QixxQkFBUyxDQUFDO0FBQUEsVUFDWDtBQUFBLFFBQ0QsQ0FBQztBQUVEO0FBQUEsTUFDRCxLQUFLO0FBQ0osYUFBS0Esb0JBQW1CLEVBQUUsVUFBVSxpQkFBaUIsQ0FBQyxNQUFNO0FBQzNELGdCQUFNLE9BQU8sS0FBSztBQUVsQixjQUFJLGdCQUFnQixpQkFBaUI7QUFDcEMsaUJBQUssY0FBYztBQUFBLFVBQ3BCO0FBQUEsUUFDRCxDQUFDO0FBRUQ7QUFBQSxJQUNGO0FBQUEsRUFDRDtBQU1BLFdBQVNDLDBCQUF3QjtBQUNoQyxTQUFLRCxvQkFBbUIsSUFBSSxLQUFLLFdBQVc7QUFBQSxNQUMzQyxJQUFJLGNBQWM7QUFBQSxJQUNuQjtBQUFBLEVBQ0Q7QUFNQSxXQUFTRSxnQkFBYztBQUV0QixXQUFPO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQW9CUjtBQTNaQSxNQWtDTUYsc0JBaUJBO0FBbkROLE1BQUFHLDZCQUFBO0FBQUE7QUFjQTtBQUNBLE1BQUFDO0FBQ0E7QUFJQTtBQUNBO0FBQ0EsTUFBQUM7QUFDQTtBQUNBO0FBQ0EsTUFBQUM7QUFDQTtBQVFBLE1BQU1OLHVCQUFzQixPQUFPLGVBQWU7QUFpQmxELE1BQU0scUJBQU4sY0FBaUNPLFFBQU87QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS3ZDLFlBQVksY0FBYyxJQUFJO0FBQzdCLGlCQUFPLE9BQU87QUFBQSxZQUNiO0FBQUEsVUFDRDtBQUFBLFFBQ0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFVQSxTQUFTLE9BQU8sU0FBUztBQUN4QixpQkFBTyxLQUFLUCxvQkFBbUIsRUFBRSxTQUFTLE9BQU8sT0FBTztBQUFBLFFBQ3pEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLGNBQWM7QUFDYixpQkFBTyxLQUFLQSxvQkFBbUIsRUFBRSxZQUFZO0FBQUEsUUFDOUM7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLFdBQVc7QUFDVixpQkFBTyxLQUFLQSxvQkFBbUIsRUFBRSxTQUFTO0FBQUEsUUFDM0M7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQWNBLElBQUksV0FBVztBQUNkLGlCQUFPLE9BQU8sT0FBTyxDQUFDLEdBQUcsTUFBTSxVQUFVO0FBQUEsWUFDeEMsU0FBUztBQUFBLGNBQ1IsT0FBTztBQUFBLGNBQ1AsU0FBUztBQUFBLGNBQ1QsTUFBTTtBQUFBLFlBQ1A7QUFBQSxZQUNBLFdBQVc7QUFBQSxjQUNWLE1BQU1FLGNBQVk7QUFBQSxZQUNuQjtBQUFBLFlBQ0EsTUFBTTtBQUFBLFlBQ04sUUFBUTtBQUFBLGNBQ1AsUUFBUTtBQUFBLFlBQ1Q7QUFBQSxZQUNBLFNBQVM7QUFBQSxjQUNSLFFBQVE7QUFBQSxZQUNUO0FBQUEsWUFDQSxTQUFTO0FBQUEsY0FDUixPQUFPLENBQUMsTUFBTTtBQUFBLGNBRWQ7QUFBQSxZQUNEO0FBQUEsWUFDQSxVQUFVO0FBQUEsY0FDVCxlQUFlO0FBQUEsWUFDaEI7QUFBQSxVQUNELENBQUM7QUFBQSxRQUNGO0FBQUE7QUFBQTtBQUFBLFFBSUEsQ0FBQyxvQkFBb0IsSUFBSTtBQUN4QixnQkFBTSxvQkFBb0IsRUFBRTtBQUM1QixVQUFBRCx3QkFBc0IsS0FBSyxJQUFJO0FBRS9CLGNBQUksUUFBUTtBQUNaLGdCQUFNLGFBQWEsS0FBSyxVQUFVLE1BQU07QUFDeEMsY0FBSSxPQUFPLGVBQWUsVUFBVTtBQUNuQyxvQkFBUSxXQUFXLE1BQU0sR0FBRztBQUFBLFVBQzdCO0FBRUEsY0FDQyxVQUFVLFFBQ1YsVUFBVSxVQUNWLFFBQVEsS0FBSyxNQUFNLFNBQ25CLE1BQU0sV0FBVyxHQUNoQjtBQUNELG9CQUFRLENBQUMsUUFBUTtBQUFBLFVBQ2xCO0FBRUEscUJBQVcsQ0FBQyxFQUFFLElBQUksS0FBSyxPQUFPLFFBQVEsS0FBSyxHQUFHO0FBQzdDLFlBQUFGLHdCQUF1QixLQUFLLE1BQU0sSUFBSTtBQUFBLFVBQ3ZDO0FBRUEsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBVUEsV0FBVyxTQUFTLE9BQU8sTUFBTTtBQUNoQyxjQUFJLFNBQVMsT0FBTyxHQUFHO0FBQ3RCLGdCQUFJLFlBQVksSUFBSTtBQUNuQixvQkFBTSxJQUFJLFVBQVUsMkJBQTJCO0FBQUEsWUFDaEQ7QUFFQSxrQkFBTSxlQUFlLFNBQVMsY0FBYyxLQUFLO0FBQ2pELGtCQUFNLGFBQWEsU0FBUyxjQUFjLEtBQUs7QUFDL0Msa0JBQU0sV0FBVyxTQUFTLGNBQWMsS0FBSztBQUM3QyxxQkFBUyxhQUFhLGdCQUFnQixtQkFBbUI7QUFFekQsZ0JBQUksY0FBYztBQUNsQixnQkFBSSxVQUFVLFFBQVc7QUFDeEIsc0JBQVEsZUFBZSxLQUFLO0FBQzVCLDZCQUFlLFNBQVMsY0FBYyxLQUFLO0FBQzNDLDJCQUFhLGFBQWEsU0FBUyxFQUFFO0FBQ3JDLDJCQUFhLFlBQVk7QUFDekIsMkJBQWEsYUFBYSxnQkFBZ0IsZUFBZTtBQUN6RCx1QkFBUyxZQUFZLFlBQVk7QUFBQSxZQUNsQztBQUVBLGdCQUFJLFNBQVMsUUFBVztBQUN2QixxQkFBTyxlQUFlLElBQUk7QUFDMUIsNEJBQWMsU0FBUyxjQUFjLEtBQUs7QUFDMUMsMEJBQVksYUFBYSxTQUFTLEVBQUU7QUFDcEMsMEJBQVksWUFBWTtBQUN4QiwwQkFBWSxhQUFhLGdCQUFnQixjQUFjO0FBQ3ZELHVCQUFTLFlBQVksV0FBVztBQUFBLFlBQ2pDO0FBRUEsdUJBQVcsWUFBWTtBQUN2Qix5QkFBYSxZQUFZLFFBQVE7QUFDakMseUJBQWEsWUFBWSxVQUFVO0FBRW5DLGlCQUFLLFVBQVUsbUJBQW1CLFlBQVk7QUFBQSxVQUMvQyxXQUFXLG1CQUFtQixhQUFhO0FBQzFDLGlCQUFLLFVBQVUsbUJBQW1CLE9BQU87QUFBQSxVQUMxQyxPQUFPO0FBQ04sa0JBQU0sSUFBSTtBQUFBLGNBQ1Q7QUFBQSxZQUNEO0FBQUEsVUFDRDtBQUVBLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU9BLGVBQWU7QUFDZCxlQUFLLFVBQVUsaUJBQWlCLE1BQVM7QUFDekMsZUFBSyxVQUFVLG1CQUFtQixNQUFTO0FBQzNDLGVBQUssVUFBVSxnQkFBZ0IsTUFBUztBQUN4QyxpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVFBLFlBQVksU0FBUztBQUNwQixlQUFLLFdBQVcsS0FBSyxJQUFJO0FBRXpCLGNBQUksWUFBWSxRQUFXO0FBQzFCLHVCQUFXLE1BQU07QUFDaEIsb0JBQU0sV0FBVztBQUFBLFlBQ2xCLEdBQUcsT0FBTztBQUFBLFVBQ1g7QUFFQSxpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxhQUFhO0FBQ1osY0FBSSxLQUFLLFVBQVUsaUJBQWlCLE1BQU0sUUFBVztBQUNwRDtBQUFBLFVBQ0Q7QUFDQSxnQkFBTSxXQUFXO0FBQ2pCLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxjQUFjO0FBQ2IsZ0JBQU0sV0FBVztBQUNqQixpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsZ0JBQWdCO0FBQ2YsZ0JBQU0sYUFBYTtBQUNuQixpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsYUFBYTtBQUNaLGlCQUFPLEtBQUssVUFBVSxTQUFTO0FBQUEsUUFDaEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsT0FBTyxTQUFTO0FBQ2YsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLE9BQU8sbUJBQW1CO0FBQ3pCLGdCQUFNUyxVQUFTRCxRQUFPLGlCQUFpQjtBQUN2QyxVQUFBQyxRQUFPLEtBQUsscUJBQXFCO0FBQ2pDLFVBQUFBLFFBQU8sS0FBSyw0QkFBNEI7QUFDeEMsaUJBQU9BO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBUUEsUUFBUTtBQUNQLGNBQUksS0FBSyxVQUFVLFVBQVUsTUFBTSxNQUFNO0FBQ3hDO0FBQUEsVUFDRDtBQUVBLGNBQ0MsS0FBS1Isb0JBQW1CLEtBQ3hCLFdBQVcsS0FBS0Esb0JBQW1CLEVBQUUsS0FBSyxHQUN6QztBQUNELGlCQUFLQSxvQkFBbUIsRUFBRSxNQUFNO0FBQUEsVUFDakM7QUFBQSxRQUNEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVNBLE1BQU1TLFVBQVM7QUFDZCxjQUFJLEtBQUssVUFBVSxVQUFVLE1BQU0sTUFBTTtBQUN4QztBQUFBLFVBQ0Q7QUFFQSxjQUNDLEtBQUtULG9CQUFtQixLQUN4QixXQUFXLEtBQUtBLG9CQUFtQixFQUFFLEtBQUssR0FDekM7QUFDRCxpQkFBS0Esb0JBQW1CLEVBQUUsTUFBTVMsUUFBTztBQUFBLFVBQ3hDO0FBQUEsUUFDRDtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0EsT0FBTztBQUNOLGNBQ0MsS0FBS1Qsb0JBQW1CLEtBQ3hCLFdBQVcsS0FBS0Esb0JBQW1CLEVBQUUsSUFBSSxHQUN4QztBQUNELGlCQUFLQSxvQkFBbUIsRUFBRSxLQUFLO0FBQUEsVUFDaEM7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQWdFQSw0QkFBc0Isa0JBQWtCO0FBQUE7QUFBQTs7O0FDN1p4QztBQUFBO0FBQUE7QUFBQTtBQXVQQSxXQUFTLFVBQVVVLE9BQU07QUFDeEIsVUFBTUMsUUFBTztBQUViLFdBQU8sU0FBVSxPQUFPO0FBQ3ZCLFlBQU0sV0FBV0EsTUFBSyxVQUFVLFdBQVdELEtBQUksRUFBRTtBQUNqRCxVQUFJLE9BQU8sUUFBUSxNQUFNLFlBQVk7QUFDcEM7QUFBQSxNQUNEO0FBRUEsZUFBUyxLQUFLLE1BQU0sS0FBSztBQUFBLElBQzFCO0FBQUEsRUFDRDtBQVFBLFdBQVNFLG9CQUFtQjtBQUMzQixTQUFLLHlCQUF5QixFQUFFO0FBQUEsTUFDL0I7QUFBQSxNQUNBLEtBQUssVUFBVSxrQkFBa0IsQ0FBQyxPQUFPLENBQUM7QUFBQSxJQUMzQztBQUNBLFNBQUsseUJBQXlCLEVBQUU7QUFBQSxNQUMvQjtBQUFBLE1BQ0EsVUFBVSxLQUFLLE1BQU0sUUFBUTtBQUFBLElBQzlCO0FBRUEsU0FBSywwQkFBMEIsRUFBRTtBQUFBLE1BQ2hDO0FBQUEsTUFDQSxLQUFLLFVBQVUsa0JBQWtCLENBQUMsT0FBTyxDQUFDO0FBQUEsSUFDM0M7QUFDQSxTQUFLLDBCQUEwQixFQUFFLFVBQVUsaUJBQWlCLE1BQU07QUFDakUsWUFBTSxXQUFXLFVBQVUsS0FBSyxNQUFNLFNBQVM7QUFDL0Msc0JBQWdCLE1BQU0sbUJBQW1CLENBQUMsQ0FBQztBQUMzQyxlQUFTLEtBQUssSUFBSTtBQUNsQixzQkFBZ0IsTUFBTSxxQkFBcUIsQ0FBQyxDQUFDO0FBQUEsSUFDOUMsQ0FBQztBQUVELFdBQU87QUFBQSxFQUNSO0FBTUEsV0FBU0MsMEJBQXdCO0FBQ2hDLFNBQUssMEJBQTBCLElBQUksS0FBSyxXQUFXO0FBQUEsTUFDbEQsSUFBSSxjQUFjO0FBQUEsSUFDbkI7QUFDQSxTQUFLLHlCQUF5QixJQUFJLEtBQUssV0FBVztBQUFBLE1BQ2pELElBQUksY0FBYztBQUFBLElBQ25CO0FBQUEsRUFDRDtBQU1BLFdBQVNDLGdCQUFjO0FBRXRCLFdBQU87QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQWtDUjtBQXZWQSxNQXFDTSw0QkFNQSwyQkEwREE7QUFyR04sTUFBQUMsdUJBQUE7QUFBQTtBQWNBO0FBQ0EsTUFBQUM7QUFDQTtBQUlBO0FBQ0EsTUFBQUM7QUFDQSxNQUFBQztBQUNBO0FBQ0E7QUFFQSxNQUFBRDtBQUNBLE1BQUFFO0FBQ0E7QUFDQTtBQVFBLE1BQU0sNkJBQTZCLE9BQU8sc0JBQXNCO0FBTWhFLE1BQU0sNEJBQTRCLE9BQU8scUJBQXFCO0FBMEQ5RCxNQUFNLGdCQUFOLGNBQTRCLGFBQWE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNeEMsWUFBWSxjQUFjLElBQUk7QUFDN0IsaUJBQU8sT0FBTztBQUFBLFlBQ2I7QUFBQSxVQUNEO0FBQUEsUUFDRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFxQkEsSUFBSSxXQUFXO0FBQ2QsZ0JBQU0sTUFBTSxPQUFPLE9BQU8sQ0FBQyxHQUFHLE1BQU0sVUFBVTtBQUFBLFlBQzdDLFdBQVc7QUFBQSxjQUNWLE1BQU1MLGNBQVk7QUFBQSxZQUNuQjtBQUFBLFlBQ0EsUUFBUTtBQUFBLGNBQ1AsUUFBUTtBQUFBLGNBQ1IsU0FBUztBQUFBLGNBQ1QsU0FBUztBQUFBLGNBQ1QsUUFBUTtBQUFBLFlBQ1Q7QUFBQSxVQUNELENBQUM7QUFFRCxjQUFJLFNBQVMsRUFBRSxlQUFlLElBQUk7QUFDbEMsY0FBSSxTQUFTLEVBQUUsY0FBYyxJQUFJO0FBQ2pDLGNBQUksU0FBUyxFQUFFLFFBQVEsSUFBSSxDQUFDLE1BQU07QUFDakMsaUJBQUssV0FBVztBQUFBLFVBQ2pCO0FBRUEsY0FBSSxTQUFTLEVBQUUsU0FBUyxJQUFJLENBQUMsTUFBTTtBQUNsQyxrQkFBTSxJQUFJLE1BQU0sbUNBQW1DO0FBQUEsVUFDcEQ7QUFFQSxpQkFBTztBQUFBLFFBQ1I7QUFBQSxRQUVBLGFBQWE7QUFDWixnQkFBTSxXQUFXO0FBQ2pCLGVBQUssMEJBQTBCLEVBQUUsWUFBWTtBQUM3QyxpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsQ0FBQyxvQkFBb0IsSUFBSTtBQUN4QixnQkFBTSxvQkFBb0IsRUFBRTtBQUM1QixVQUFBRCx3QkFBc0IsS0FBSyxJQUFJO0FBQy9CLFVBQUFELGtCQUFpQixLQUFLLElBQUk7QUFBQSxRQUMzQjtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0EsT0FBTyxTQUFTO0FBQ2YsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxPQUFPLG1CQUFtQjtBQUN6QixnQkFBTVEsVUFBUyxhQUFhLGlCQUFpQjtBQUM3QyxVQUFBQSxRQUFPLEtBQUssdUJBQXVCO0FBQ25DLGlCQUFPQTtBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsYUFBYTtBQUNaLGdCQUFNLHFCQUFxQixLQUFLLFVBQVUsdUJBQXVCO0FBQ2pFLGNBQUksb0JBQW9CO0FBQ3ZCLGlCQUFLLDBCQUEwQixFQUFFO0FBQUEsY0FDaEM7QUFBQSxjQUNBO0FBQUEsWUFDRDtBQUFBLFVBQ0Q7QUFFQSxnQkFBTSxvQkFBb0IsS0FBSyxVQUFVLHNCQUFzQjtBQUMvRCxjQUFJLG1CQUFtQjtBQUN0QixpQkFBSyx5QkFBeUIsRUFBRTtBQUFBLGNBQy9CO0FBQUEsY0FDQTtBQUFBLFlBQ0Q7QUFBQSxVQUNEO0FBRUEsaUJBQU8sTUFBTSxXQUFXO0FBQUEsUUFDekI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBU0Esc0JBQXNCLE9BQU8sU0FBUztBQUNyQyxlQUFLLDBCQUEwQixFQUFFLFNBQVMsT0FBTyxPQUFPO0FBQ3hELGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFTQSx5QkFBeUIsU0FBUyxTQUFTO0FBQzFDLGVBQUssMEJBQTBCLEVBQUUsV0FBVyxPQUFPO0FBQ25ELHFCQUFXLE1BQU07QUFDaEIsaUJBQUssMEJBQTBCLEVBQUUsWUFBWSxPQUFPO0FBQUEsVUFDckQsR0FBRyxDQUFDO0FBQ0osaUJBQU87QUFBQSxRQUNSO0FBQUEsTUFDRDtBQXlHQSw0QkFBc0IsYUFBYTtBQUFBO0FBQUE7OztBQ2hJbkMsV0FBU0Msa0JBQWlCLE1BQU07QUFDL0IsUUFBSSxTQUFTLElBQUksR0FBRztBQUVuQixVQUFJO0FBQ0gsY0FBTSxVQUFVLGFBQWEsSUFBSTtBQUNqQyxlQUFPLFFBQVE7QUFBQSxNQUNoQixTQUFTLEdBQUc7QUFBQSxNQUFDO0FBRWIsVUFBSTtBQUNILGNBQU0sTUFBTSxLQUFLLE1BQU0sSUFBSTtBQUMzQix1QkFBZSxHQUFHO0FBQ2xCLGVBQU87QUFBQSxNQUNSLFNBQVMsR0FBRztBQUNYLGNBQU0sSUFBSTtBQUFBLFVBQ1QsaUVBQWlFLElBQUk7QUFBQSxRQUN0RTtBQUFBLE1BQ0Q7QUFBQSxJQUNEO0FBRUEsV0FBTyxDQUFDO0FBQUEsRUFDVDtBQTdPQSxNQXlDTSxvQkFhQTtBQXRETjtBQUFBO0FBY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBbUJBLE1BQU0scUJBQXFCLE9BQU87QUFBQSxRQUNqQztBQUFBLE1BQ0Q7QUFXQSxNQUFNLGFBQU4sY0FBeUIsS0FBSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLN0IsY0FBYztBQUNiLGdCQUFNO0FBRU4sZUFBSyxjQUFjLElBQUksSUFBSSxjQUFjO0FBQUEsWUFDeEMsU0FBUyxPQUFPLENBQUMsR0FBRyxLQUFLLFFBQVE7QUFBQSxVQUNsQyxDQUFDO0FBRUQsZUFBSyxrQkFBa0IsSUFBSSxJQUFJLGNBQWMsQ0FBQyxDQUFDO0FBQUEsUUFDaEQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVFBLGVBQWUsVUFBVTtBQUN4QixlQUFLLGtCQUFrQixFQUFFLGVBQWUsUUFBUTtBQUNoRCxpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVFBLGVBQWUsVUFBVTtBQUN4QixlQUFLLGtCQUFrQixFQUFFLGVBQWUsUUFBUTtBQUNoRCxpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsaUJBQWlCLFVBQVU7QUFDMUIsaUJBQU8sS0FBSyxrQkFBa0IsRUFBRSxpQkFBaUIsUUFBUTtBQUFBLFFBQzFEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBYUEsSUFBSSxXQUFXO0FBQ2QsaUJBQU8sQ0FBQztBQUFBLFFBQ1Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBU0EsVUFBVSxNQUFNLE9BQU87QUFDdEIsY0FBSSxXQUFXLEtBQUssY0FBYyxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsRUFBRTtBQUFBLFlBQzVEO0FBQUEsWUFDQTtBQUFBLFVBQ0Q7QUFDQSxpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxXQUFXQyxVQUFTO0FBQ25CLGNBQUksU0FBU0EsUUFBTyxHQUFHO0FBQ3RCLFlBQUFBLFdBQVVELGtCQUFpQkMsUUFBTztBQUFBLFVBQ25DO0FBQ0E7QUFBQSxZQUNDLEtBQUssY0FBYyxFQUFFLFdBQVcsRUFBRSxTQUFTO0FBQUEsWUFDM0MsS0FBSztBQUFBLFlBQ0xBO0FBQUEsVUFDRDtBQUVBLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFTQSxVQUFVLE1BQU0sY0FBYztBQUM3QixjQUFJO0FBRUosY0FBSTtBQUNILG9CQUFRLElBQUk7QUFBQSxjQUNYLEtBQUssY0FBYyxFQUFFLGVBQWUsRUFBRSxTQUFTO0FBQUEsWUFDaEQsRUFBRSxPQUFPLElBQUk7QUFBQSxVQUNkLFNBQVMsR0FBRztBQUFBLFVBQUM7QUFFYixjQUFJLFVBQVUsT0FBVyxRQUFPO0FBQ2hDLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxPQUFPO0FBQ04sZ0JBQU0sSUFBSSxNQUFNLG9EQUFvRDtBQUFBLFFBQ3JFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLFFBQVE7QUFDUCxnQkFBTSxJQUFJLE1BQU0sb0RBQW9EO0FBQUEsUUFDckU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxNQUFNO0FBQ0wsaUJBQU8sS0FBSyxrQkFBa0IsRUFBRSxlQUFlO0FBQUEsUUFDaEQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsSUFBSSxNQUFNO0FBQ1QsZUFBSyxrQkFBa0IsRUFBRSxXQUFXLElBQUk7QUFDeEMsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsWUFBWSxjQUFjLElBQUk7QUFDN0IsaUJBQU8sT0FBTyxJQUFJLGtDQUFrQztBQUFBLFFBQ3JEO0FBQUEsTUFDRDtBQUFBO0FBQUE7OztBQ2pOQSxNQTJCTSxzQkFLQSwrQkFLQSxtQ0FLQSwwQkFLQSwyQkFLQSw4QkFLQSwyQkFLQSwwQkFLQSwyQ0FPQTtBQTFFTixNQUFBQyxrQkFBQTtBQUFBO0FBY0EsTUFBQUE7QUFhQSxNQUFNLHVCQUF1QixHQUFHLGdCQUFnQjtBQUtoRCxNQUFNLGdDQUFnQyxHQUFHLG9CQUFvQjtBQUs3RCxNQUFNLG9DQUFvQyxHQUFHLGdCQUFnQjtBQUs3RCxNQUFNLDJCQUEyQixHQUFHLGdCQUFnQjtBQUtwRCxNQUFNLDRCQUE0QixHQUFHLGdCQUFnQjtBQUtyRCxNQUFNLCtCQUErQixHQUFHLGdCQUFnQjtBQUt4RCxNQUFNLDRCQUE0QixHQUFHLGdCQUFnQjtBQUtyRCxNQUFNLDJCQUEyQixHQUFHLGdCQUFnQjtBQUtwRCxNQUFNLDRDQUE0QyxHQUFHLGdCQUFnQjtBQU9yRSxNQUFNLGlDQUFpQyxHQUFHLG9CQUFvQjtBQUFBO0FBQUE7OztBQzFFOUQsTUEyQk0sa0JBcUJBQztBQWhETixNQUFBQyxtQkFBQTtBQUFBO0FBY0E7QUFJQTtBQUNBO0FBUUEsTUFBTSxtQkFBbUIsT0FBTztBQUFBLFFBQy9CO0FBQUEsTUFDRDtBQW1CQSxNQUFNRCxjQUFOLGNBQXlCLGNBQWM7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUl0QyxjQUFjO0FBQ2IsZ0JBQU07QUFDTixlQUFLLGdCQUFnQixJQUFJLElBQUksV0FBZTtBQUFBLFFBQzdDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLFlBQVksY0FBYyxJQUFJO0FBQzdCLGlCQUFPLE9BQU8sSUFBSSxrREFBa0Q7QUFBQSxRQUNyRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBV0EsSUFBSSxXQUFXO0FBQ2QsaUJBQU8sT0FBTyxPQUFPLENBQUMsR0FBRyxNQUFNLFVBQVUsQ0FBQyxDQUFDO0FBQUEsUUFDNUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsQ0FBQyxvQkFBb0IsSUFBSTtBQUN4QixnQkFBTSxvQkFBb0IsRUFBRTtBQUFBLFFBQzdCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLElBQUksT0FBTztBQUNWLGlCQUFPLEtBQUssZ0JBQWdCLEVBQUUsSUFBSTtBQUFBLFFBQ25DO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLElBQUksS0FBSyxNQUFNO0FBQ2QsZUFBSyxnQkFBZ0IsRUFBRSxJQUFJLElBQUk7QUFBQSxRQUNoQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxJQUFJLGFBQWE7QUFDaEIsaUJBQU8sS0FBSyxnQkFBZ0I7QUFBQSxRQUM3QjtBQUFBLFFBRUEsUUFBUTtBQUNQLGVBQUssZ0JBQWdCLEVBQUUsTUFBTTtBQUFBLFFBQzlCO0FBQUEsUUFFQSxPQUFPO0FBQ04sZUFBSyxnQkFBZ0IsRUFBRSxLQUFLO0FBQUEsUUFDN0I7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDckhBLE1BcUJNO0FBckJOO0FBQUE7QUFZQTtBQUNBLE1BQUFFO0FBUUEsTUFBTSxvQkFBb0IsSUFBSSxjQUFjO0FBRTVDLFVBQUk7QUFDSCwwQkFBa0I7QUFBQSxVQUNqQjtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBSUE7QUFBQSxRQUNEO0FBQUEsTUFDRCxTQUFTLEdBQUc7QUFDWDtBQUFBLFVBQ0MsU0FBUyxZQUFZLEVBQUUsY0FBYyxNQUFNO0FBQUEsVUFDM0M7QUFBQSxVQUNBLElBQUk7QUFBQSxRQUNMO0FBQUEsTUFDRDtBQUFBO0FBQUE7OztBQ1BBLFdBQVMsMEJBQTBCO0FBQ2xDLFFBQUksQ0FBQyxLQUFLLDZCQUE2QixHQUFHO0FBQ3pDO0FBQUEsSUFDRDtBQUVBLFFBQUksT0FBTyxLQUFLLDZCQUE2QixFQUFFO0FBRS9DLFVBQU0sYUFBYSxLQUFLLFVBQVUsS0FBSyxVQUFVLE1BQU0sQ0FBQztBQUN4RCxVQUFNLGtCQUFrQixLQUFLLE1BQU0sVUFBVTtBQUU3QyxVQUFNLE9BQU8sS0FBSyxVQUFVLGNBQWM7QUFDMUMsUUFBSSxNQUFNO0FBQ1QsYUFBTyxJQUFJLFdBQVcsSUFBSSxFQUFFLE9BQU8sSUFBSTtBQUFBLElBQ3hDO0FBRUEsUUFBSSxTQUFTLElBQUksR0FBRztBQUNuQixZQUFNLE1BQU0sQ0FBQztBQUNiLFlBQU0sT0FBTyxPQUFPLEtBQUssSUFBSTtBQUM3QixpQkFBVyxPQUFPLE1BQU07QUFDdkIsWUFBSSxLQUFLLEtBQUssR0FBRyxDQUFDO0FBQUEsTUFDbkI7QUFDQSxhQUFPO0FBQUEsSUFDUjtBQUVBLFVBQU0sUUFBUSxLQUFLLFVBQVUsZUFBZTtBQUM1QyxRQUFJLFVBQVUsVUFBYSxVQUFVLE1BQU07QUFDMUMsYUFBTyxPQUFPLEtBQUs7QUFBQSxJQUNwQjtBQUVBLFFBQUksU0FBUyxVQUFhLFNBQVMsTUFBTTtBQUN4QyxhQUFPLENBQUM7QUFBQSxJQUNUO0FBRUEsVUFBTSxTQUFTLEtBQUssTUFBTSxlQUFlO0FBQ3pDLFFBQUksT0FBTyxXQUFXLEdBQUc7QUFDeEI7QUFBQSxJQUNEO0FBRUEsbUJBQWUsTUFBTTtBQUNwQixXQUFLLFVBQVUsUUFBUSxJQUFJO0FBQUEsSUFDNUIsQ0FBQztBQUFBLEVBQ0Y7QUF2RUEsTUF5Qk07QUF6Qk4sTUFBQUMsYUFBQTtBQUFBO0FBY0E7QUFDQTtBQUNBO0FBQ0E7QUFRQSxNQUFNLGdDQUFnQyxPQUFPLHlCQUF5QjtBQUFBO0FBQUE7OztBQ3pCdEUsTUFxQk07QUFyQk47QUFBQTtBQVlBO0FBQ0EsTUFBQUM7QUFRQSxNQUFNLGlCQUFpQixJQUFJLGNBQWM7QUFFekMsVUFBSTtBQUNILHVCQUFlO0FBQUEsVUFDZDtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBSUE7QUFBQSxRQUNEO0FBQUEsTUFDRCxTQUFTLEdBQUc7QUFDWDtBQUFBLFVBQ0MsU0FBUyxZQUFZLEVBQUUsY0FBYyxNQUFNO0FBQUEsVUFDM0M7QUFBQSxVQUNBLElBQUk7QUFBQSxRQUNMO0FBQUEsTUFDRDtBQUFBO0FBQUE7OztBQzhQQSxXQUFTQyxvQkFBbUI7QUFDM0IsU0FBSyx1QkFBdUIsRUFBRSx5QkFBeUIsSUFBSSxNQUFNO0FBQ2hFLFlBQU0sUUFBUSxLQUFLLGFBQWEseUJBQXlCO0FBQ3pELFVBQUksT0FBTztBQUNWLGFBQUssVUFBVSxpQkFBaUIsU0FBUyxPQUFPLEVBQUUsQ0FBQztBQUFBLE1BQ3BEO0FBQUEsSUFDRDtBQUFBLEVBQ0Q7QUFNQSxXQUFTLDJCQUEyQkMsVUFBUztBQUM1QyxVQUFNLFFBQVEsS0FBSyxhQUFhLHlCQUF5QjtBQUV6RCxRQUFJLFVBQVUsUUFBUSxVQUFVLFFBQVc7QUFDMUMsTUFBQUEsU0FBUSxRQUFRLFFBQVEsU0FBUyxPQUFPLEVBQUU7QUFBQSxJQUMzQztBQUVBLFVBQU0sV0FBVyxLQUFLLGFBQWEsNkJBQTZCO0FBRWhFLFFBQUksVUFBVTtBQUNiLE1BQUFBLFNBQVEsV0FBVyxXQUFXO0FBQUEsSUFDL0I7QUFBQSxFQUNEO0FBS0EsV0FBUyx1QkFBdUI7QUFDL0IsVUFBTUMsVUFBUyxFQUFFLFlBQVksT0FBTyxXQUFXLE1BQU0sU0FBUyxLQUFLO0FBRW5FLFVBQU0sV0FBVyxDQUFDLGNBQWNDLGNBQWE7QUFDNUMsVUFBSSxhQUFhLFdBQVcsR0FBRztBQUM5QjtBQUFBLE1BQ0Q7QUFFQSxVQUFJLFdBQVc7QUFDZixpQkFBVyxZQUFZLGNBQWM7QUFDcEMsWUFBSSxTQUFTLFNBQVMsYUFBYTtBQUNsQyxxQkFBVyxRQUFRLFNBQVMsWUFBWTtBQUN2QyxnQkFDQyxnQkFBZ0IsZUFDaEIsS0FBSyxRQUFRLEtBQUssVUFBVSw0QkFBNEIsQ0FBQyxHQUN4RDtBQUNELHlCQUFXO0FBQ1g7QUFBQSxZQUNEO0FBQUEsVUFDRDtBQUVBLGNBQUksVUFBVTtBQUNiO0FBQUEsVUFDRDtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBRUEsVUFBSSxVQUFVO0FBQ2IsYUFBSyxRQUFRO0FBQUEsTUFDZDtBQUFBLElBQ0Q7QUFFQSxVQUFNLFdBQVcsSUFBSSxpQkFBaUIsUUFBUTtBQUM5QyxhQUFTLFFBQVEsTUFBTUQsT0FBTTtBQUFBLEVBQzlCO0FBTUEsV0FBU0UsZ0JBQWM7QUFFdEIsV0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLUjtBQWhYQSxNQStFTTtBQS9FTixNQUFBQyxnQkFBQTtBQUFBO0FBY0E7QUFDQTtBQUNBO0FBQ0EsTUFBQUM7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBQUE7QUFJQSxNQUFBQztBQUNBO0FBQ0EsTUFBQUM7QUFJQTtBQXlDQSxNQUFNLFVBQU4sY0FBc0IsY0FBYztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLbkMsWUFBWSxjQUFjLElBQUk7QUFDN0IsaUJBQU8sT0FBTyxJQUFJLCtDQUErQztBQUFBLFFBQ2xFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFRQSxXQUFXLHFCQUFxQjtBQUMvQixnQkFBTSxhQUFhLE1BQU07QUFDekIscUJBQVcsS0FBSyx5QkFBeUI7QUFDekMsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFpQkEsSUFBSSxXQUFXO0FBQ2QsZ0JBQU0sTUFBTSxPQUFPLE9BQU8sQ0FBQyxHQUFHLE1BQU0sVUFBVTtBQUFBLFlBQzdDLFdBQVc7QUFBQSxjQUNWLE1BQU1KLGNBQVk7QUFBQSxZQUNuQjtBQUFBLFlBRUEsWUFBWTtBQUFBLGNBQ1gsVUFBVTtBQUFBLFlBQ1g7QUFBQSxZQUVBLFNBQVM7QUFBQSxjQUNSLE1BQU07QUFBQSxjQUNOLE9BQU87QUFBQSxZQUNSO0FBQUEsWUFFQSxVQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxjQUtULG1CQUFtQjtBQUFBLFlBQ3BCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQU1BLG1CQUFtQjtBQUFBLGNBQ2xCLFVBQVU7QUFBQSxZQUNYO0FBQUEsWUFFQSxNQUFNLENBQUM7QUFBQSxVQUNSLENBQUM7QUFFRCxxQ0FBMkIsS0FBSyxNQUFNLEdBQUc7QUFDekMsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLE9BQU8sU0FBUztBQUNmLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU9BLFVBQVU7QUFFVCxlQUFLLFVBQVUsUUFBUSxDQUFDLENBQUM7QUFDekIsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLFFBQVE7QUFDUCxpQkFBTyxJQUFJLFFBQVEsQ0FBQyxTQUFTLFdBQVc7QUFDdkMsZ0JBQUksQ0FBQyxLQUFLLDZCQUE2QixHQUFHO0FBQ3pDLHFCQUFPLElBQUksTUFBTSxlQUFlLENBQUM7QUFDakM7QUFBQSxZQUNEO0FBRUEsa0JBQU0sMEJBQTBCLEtBQUssMkJBQTJCO0FBQ2hFLGdCQUFJLENBQUMseUJBQXlCO0FBQzdCLHFCQUFPLElBQUksTUFBTSxnQkFBZ0IsQ0FBQztBQUNsQztBQUFBLFlBQ0Q7QUFFQSxrQkFBTSxlQUFlLDBCQUEwQixNQUFNO0FBQ3JELGdCQUNDLGlCQUFpQixVQUNqQixpQkFBaUIsUUFDakIsaUJBQWlCLElBQ2hCO0FBQ0QscUJBQU8sSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUMzQjtBQUFBLFlBQ0Q7QUFFQSwyQkFBZSxNQUFNO0FBQ3BCLG9CQUFNLE9BQU8sS0FBSyxVQUFVLGNBQWM7QUFDMUMsb0JBQU0sUUFBUSxLQUFLLFVBQVUsZUFBZTtBQUU1QyxrQkFBSTtBQUVKLGtCQUFJLFNBQVMsSUFBSSxLQUFLLFNBQVMsSUFBSTtBQUNsQyxnQ0FBZ0IsT0FBTyxNQUFNO0FBQUEsY0FDOUIsT0FBTztBQUNOLGdDQUFnQixPQUFPLEtBQUs7QUFBQSxjQUM3QjtBQUVBLG9CQUFNLE9BQU8sS0FBSyw2QkFBNkIsR0FBRztBQUNsRCxrQkFBSSxDQUFDLE1BQU07QUFDVix1QkFBTyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBQzNCO0FBQUEsY0FDRDtBQUVBLG9CQUFNLFFBQVEsS0FBSyxVQUFVLElBQUk7QUFDakMsb0JBQU0sTUFBTSxLQUFLLE1BQU0sS0FBSztBQUU1QixrQkFBSSxXQUFXLEdBQUcsRUFBRSxPQUFPLGVBQWUsWUFBWTtBQUV0RCxtQkFBSyw2QkFBNkIsRUFBRSxPQUFPO0FBRTNDLHNCQUFRO0FBQUEsWUFDVCxDQUFDO0FBQUEsVUFDRixDQUFDO0FBQUEsUUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFrQkEsQ0FBQyxvQkFBb0IsSUFBSTtBQUN4QixnQkFBTSxvQkFBb0IsRUFBRTtBQUU1QixVQUFBSixrQkFBaUIsS0FBSyxJQUFJO0FBRTFCLGNBQUksQ0FBQyxLQUFLLDZCQUE2QixHQUFHO0FBQ3pDLGtCQUFNLFdBQVcsS0FBSyxVQUFVLHFCQUFxQjtBQUVyRCxnQkFBSSxTQUFTLFFBQVEsR0FBRztBQUN2QixvQkFBTSxVQUFVLCtCQUErQixNQUFNLFFBQVE7QUFDN0Qsa0JBQUksWUFBWSxNQUFNO0FBQ3JCLHNCQUFNLElBQUksTUFBTSw2Q0FBNkM7QUFBQSxjQUM5RDtBQUVBLGtCQUFJLEVBQUUsbUJBQW1CUyxjQUFhO0FBQ3JDLHNCQUFNLElBQUksVUFBVSxrQ0FBa0M7QUFBQSxjQUN2RDtBQUVBLG1CQUFLLDZCQUE2QixJQUFJO0FBQ3RDLHNCQUFRLFdBQVc7QUFBQSxnQkFDbEIsSUFBSSxTQUFTLHdCQUF3QixLQUFLLElBQUksQ0FBQztBQUFBLGNBQ2hEO0FBQUEsWUFDRCxPQUFPO0FBQ04sb0JBQU0sSUFBSSxNQUFNLCtCQUErQjtBQUFBLFlBQ2hEO0FBQUEsVUFDRDtBQUVBLGNBQ0MsS0FBSyxVQUFVLDRCQUE0QixLQUMzQyxLQUFLLFVBQVUsNEJBQTRCLEdBQzFDO0FBQ0QsaUNBQXFCLEtBQUssSUFBSTtBQUFBLFVBQy9CO0FBQUEsUUFDRDtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0EsT0FBTyxtQkFBbUI7QUFDekIsaUJBQU8sQ0FBQyxnQkFBZ0IsaUJBQWlCO0FBQUEsUUFDMUM7QUFBQSxNQUNEO0FBb0ZBLDRCQUFzQixPQUFPO0FBQUE7QUFBQTs7O0FDbFg3QixNQXFCTUM7QUFyQk4sTUFBQUMsYUFBQTtBQUFBO0FBWUE7QUFDQSxNQUFBQztBQVFBLE1BQU1GLGtCQUFpQixJQUFJLGNBQWM7QUFFekMsVUFBSTtBQUNILFFBQUFBLGdCQUFlO0FBQUEsVUFDZDtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBSUE7QUFBQSxRQUNEO0FBQUEsTUFDRCxTQUFTLEdBQUc7QUFDWDtBQUFBLFVBQ0MsU0FBUyxZQUFZLEVBQUUsY0FBYyxNQUFNO0FBQUEsVUFDM0M7QUFBQSxVQUNBLElBQUk7QUFBQSxRQUNMO0FBQUEsTUFDRDtBQUFBO0FBQUE7OztBQ3JDQTtBQUFBO0FBQUE7QUFBQTtBQW9LQSxXQUFTLHdCQUF3QjtBQUFBLEVBQUM7QUFNbEMsV0FBU0csb0JBQW1CO0FBQzNCLFNBQUssa0JBQWtCLElBQUksQ0FBQztBQUU1QixRQUFJLEtBQUssVUFBVSxvQkFBb0IsTUFBTSxNQUFNO0FBQ2xELFlBQU0sU0FBUyxLQUFLLFVBQVUsa0JBQWtCO0FBQ2hELGlCQUFXLFNBQVMsUUFBUTtBQUMzQixhQUFLLGlCQUFpQixPQUFPLENBQUMsTUFBTTtBQUNuQyxjQUFJLENBQUMsS0FBSyxlQUFlLEdBQUc7QUFDM0IsaUJBQUssVUFBVSxJQUFJLFNBQVM7QUFDNUIsdUJBQVcsTUFBTTtBQUNoQixtQkFBSyxVQUFVLE9BQU8sU0FBUztBQUFBLFlBQ2hDLEdBQUcsR0FBSTtBQUVQO0FBQUEsVUFDRDtBQUVBLGNBQUksS0FBSyx1QkFBdUIsYUFBYSxnQkFBZ0I7QUFDNUQsZ0JBQUk7QUFDSCxtQkFBSyx1QkFBdUIsRUFBRSxNQUFNO0FBQ3BDO0FBQUEsWUFDRCxTQUFTQyxJQUFHO0FBQ1gsa0JBQUlBLEdBQUUsWUFBWSxtQkFBbUI7QUFDcEMsc0JBQU1BO0FBQUEsY0FDUDtBQUNBLHFCQUFPLEtBQUssdUJBQXVCO0FBQUEsWUFDcEM7QUFBQSxVQUNEO0FBRUEsZUFBSyx1QkFBdUIsSUFBSSxJQUFJLGVBQWUsS0FBSyxNQUFNO0FBQzdELHVCQUFXLE1BQU07QUFDaEIsbUJBQUssTUFBTTtBQUFBLFlBQ1osR0FBRyxDQUFDO0FBQUEsVUFDTCxDQUFDO0FBQUEsUUFDRixDQUFDO0FBQUEsTUFDRjtBQUFBLElBQ0Q7QUFFQSxXQUFPO0FBQUEsRUFDUjtBQU1BLFdBQVNDLDBCQUF3QjtBQUNoQyxRQUFJLENBQUMsS0FBSyxZQUFZO0FBQ3JCLFlBQU0sSUFBSSxNQUFNLDJCQUEyQjtBQUFBLElBQzVDO0FBQ0EsV0FBTztBQUFBLEVBQ1I7QUFNQSxXQUFTQyxnQkFBYztBQUV0QixXQUFPO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBU1I7QUE1T0EsTUErQk0seUJBTUEsb0JBaUJBO0FBdEROLE1BQUFDLGFBQUE7QUFBQTtBQWNBO0FBQ0E7QUFDQSxNQUFBQztBQUNBO0FBS0EsTUFBQUM7QUFDQSxNQUFBRjtBQVFBLE1BQU0sMEJBQTBCLE9BQU8sbUJBQW1CO0FBTTFELE1BQU0scUJBQXFCLE9BQU8sY0FBYztBQWlCaEQsTUFBTSxPQUFOLGNBQW1CLFFBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQWdCMUIsSUFBSSxXQUFXO0FBQ2QsZ0JBQU0sTUFBTSxPQUFPLE9BQU8sQ0FBQyxHQUFHLE1BQU0sVUFBVTtBQUFBLFlBQzdDLFdBQVc7QUFBQSxjQUNWLE1BQU1ELGNBQVk7QUFBQSxZQUNuQjtBQUFBLFlBRUEsU0FBUztBQUFBLGNBQ1IsTUFBTTtBQUFBLFlBQ1A7QUFBQSxZQUVBLFdBQVc7QUFBQSxjQUNWLFFBQVEsQ0FBQyxTQUFTLFNBQVMsVUFBVSxRQUFRLFlBQVksT0FBTztBQUFBLFlBQ2pFO0FBQUEsWUFFQSxnQkFBZ0I7QUFBQSxjQUNmLFVBQVU7QUFBQSxZQUNYO0FBQUEsWUFFQSxpQkFBaUI7QUFBQSxVQUNsQixDQUFDO0FBRUQsY0FBSSxVQUFVLEVBQUUsa0JBQWtCLElBQUk7QUFDdEMsY0FBSSxVQUFVLEVBQUUsV0FBVyxJQUFJO0FBRS9CLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxPQUFPLFNBQVM7QUFDZixpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLE9BQU8sbUJBQW1CO0FBQ3pCLGlCQUFPLENBQUNJLGVBQWM7QUFBQSxRQUN2QjtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0EsQ0FBQyxvQkFBb0IsSUFBSTtBQUN4QixnQkFBTSxXQUFXLEtBQUssVUFBVSxxQkFBcUI7QUFFckQsY0FBSSxDQUFDLFVBQVU7QUFDZCxpQkFBSyw2QkFBNkIsSUFBSSxJQUFJLFdBQVcsSUFBSTtBQUFBLFVBQzFEO0FBRUEsZ0JBQU0sb0JBQW9CLEVBQUU7QUFFNUIsVUFBQUwsd0JBQXNCLEtBQUssSUFBSTtBQUMvQixVQUFBRixrQkFBaUIsS0FBSyxJQUFJO0FBQzFCLGdDQUFzQixLQUFLLElBQUk7QUFBQSxRQUNoQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU9BLFVBQVU7QUFDVCxlQUFLLE1BQU07QUFDWCxnQkFBTSxRQUFRO0FBQ2QsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFRQSxpQkFBaUI7QUFDaEIsY0FBSSxRQUFRO0FBRVosZ0JBQU0sV0FBVyxLQUFLLFVBQVUseUJBQXlCO0FBQ3pELGdCQUFNLFFBQVEsbUJBQW1CLEtBQUssTUFBTSxRQUFRO0FBRXBELGdCQUFNLFFBQVEsQ0FBQyxTQUFTO0FBQ3ZCLGdCQUFJLE9BQU8sS0FBSyxtQkFBbUIsWUFBWTtBQUM5QyxrQkFBSSxLQUFLLGVBQWUsTUFBTSxPQUFPO0FBQ3BDLHdCQUFRO0FBQUEsY0FDVDtBQUFBLFlBQ0Q7QUFBQSxVQUNELENBQUM7QUFFRCxpQkFBTztBQUFBLFFBQ1I7QUFBQSxNQUNEO0FBNEVBLDRCQUFzQixJQUFJO0FBQUE7QUFBQTs7O0FDOU8xQixNQTRCTVE7QUE1Qk47QUFBQTtBQWNBO0FBQ0E7QUFDQTtBQUNBO0FBV0EsTUFBTUEsWUFBTixNQUFNLGtCQUFpQixJQUFJO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUsxQixZQUFZLFFBQVE7QUFDbkIsZ0JBQU07QUFFTixjQUFJLFdBQVcsT0FBVztBQUUxQixjQUFJLFFBQVEsTUFBTSxHQUFHO0FBQ3BCLG1CQUFPLFFBQVEsQ0FBQyxVQUFVLEtBQUssSUFBSSxLQUFLLENBQUM7QUFBQSxVQUMxQyxXQUFXLFdBQVcsUUFBUSxTQUFRLEdBQUc7QUFDeEMsbUJBQU8sUUFBUSxDQUFDLFVBQVUsS0FBSyxJQUFJLEtBQUssQ0FBQztBQUFBLFVBQzFDLFdBQVcsV0FBVyxRQUFRQyxLQUFJLEdBQUc7QUFDcEMsaUJBQUssSUFBSSxNQUFNO0FBQUEsVUFDaEIsT0FBTztBQUNOLGtCQUFNLElBQUksTUFBTSxvQkFBb0I7QUFBQSxVQUNyQztBQUFBLFFBQ0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxZQUFZLGNBQWMsSUFBSTtBQUM3QixpQkFBTyxPQUFPLElBQUksa0NBQWtDO0FBQUEsUUFDckQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxJQUFJLE1BQU07QUFDVCxnQkFBTSxJQUFJLGlCQUFpQixNQUFNQSxLQUFJLENBQUM7QUFDdEMsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLE9BQU8sTUFBTTtBQUNaLGdCQUFNLE9BQU8saUJBQWlCLE1BQU1BLEtBQUksQ0FBQztBQUN6QyxpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsSUFBSSxNQUFNO0FBQ1QsaUJBQU8sTUFBTSxJQUFJLGlCQUFpQixNQUFNQSxLQUFJLENBQUM7QUFBQSxRQUM5QztBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0EsUUFBUTtBQUNQLGdCQUFNLE1BQU07QUFDWixpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLFVBQVU7QUFDVCxpQkFBTyxNQUFNLEtBQUssSUFBSTtBQUFBLFFBQ3ZCO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxTQUFTO0FBQ1IsaUJBQU8sS0FBSyxRQUFRO0FBQUEsUUFDckI7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLFdBQVc7QUFDVixnQkFBTSxRQUFRLENBQUM7QUFFZixxQkFBVyxRQUFRLEtBQUssUUFBUSxHQUFHO0FBQ2xDLGtCQUFNLEtBQUssS0FBSyxTQUFTLENBQUM7QUFBQSxVQUMzQjtBQUVBLGlCQUFPLE1BQU0sS0FBSyxJQUFJO0FBQUEsUUFDdkI7QUFBQSxRQUVBLElBQUksU0FBUztBQUNaLGlCQUFPLE1BQU07QUFBQSxRQUNkO0FBQUEsTUFDRDtBQUFBO0FBQUE7OztBQzZFQSxXQUFTLHVCQUF1QixNQUFNLFNBQVMsY0FBYztBQUM1RCxVQUFNQyxRQUFPO0FBRWIsUUFBSSxhQUFhLElBQUksSUFBSSxHQUFHO0FBQzNCLFlBQU0sSUFBSTtBQUFBLFFBQ1Q7QUFBQSxNQUNEO0FBQUEsSUFDRDtBQUVBLGlCQUFhLElBQUksSUFBSTtBQUVyQixRQUFJLFNBQVMsTUFBTTtBQUNsQixXQUFLLG1CQUFtQixFQUFFLFNBQVM7QUFBQSxJQUNwQztBQUVBLFNBQUssbUJBQW1CLEVBQUUsV0FBVyxRQUFRLFNBQVUsT0FBTztBQUM3RCxZQUFNLG1CQUFtQixFQUFFLFNBQVM7QUFDcEMsWUFBTSxtQkFBbUIsRUFBRSxRQUMxQixLQUFLLG1CQUFtQixFQUFFLFFBQVE7QUFDbkMsNkJBQXVCLEtBQUtBLE9BQU0sT0FBTyxTQUFTLFlBQVk7QUFBQSxJQUMvRCxDQUFDO0FBQ0QsV0FBTztBQUFBLEVBQ1I7QUE5TkEsTUEwQk0scUJBTUEscUJBV0FDO0FBM0NOO0FBQUE7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUUEsTUFBTSxzQkFBc0IsT0FBTyxjQUFjO0FBTWpELE1BQU0sc0JBQXNCLE9BQU8sZUFBZTtBQVdsRCxNQUFNQSxRQUFOLE1BQU0sY0FBYSxLQUFLO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFJdkIsWUFBWSxPQUFPO0FBQ2xCLGdCQUFNO0FBQ04sZUFBSyxtQkFBbUIsSUFBSTtBQUU1QixlQUFLLG1CQUFtQixJQUFJO0FBQUEsWUFDM0IsUUFBUTtBQUFBLFlBQ1IsWUFBWSxJQUFJQyxVQUFTO0FBQUEsWUFDekIsT0FBTztBQUFBLFVBQ1I7QUFBQSxRQUNEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsWUFBWSxjQUFjLElBQUk7QUFDN0IsaUJBQU8sT0FBTyxJQUFJLDZCQUE2QjtBQUFBLFFBQ2hEO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxJQUFJLFFBQVE7QUFDWCxpQkFBTyxLQUFLLG1CQUFtQjtBQUFBLFFBQ2hDO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxJQUFJLE1BQU0sT0FBTztBQUNoQixlQUFLLG1CQUFtQixJQUFJO0FBQUEsUUFDN0I7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLElBQUksU0FBUztBQUNaLGlCQUFPLEtBQUssbUJBQW1CLEVBQUU7QUFBQSxRQUNsQztBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0EsSUFBSSxRQUFRO0FBQ1gsaUJBQU8sS0FBSyxtQkFBbUIsRUFBRTtBQUFBLFFBQ2xDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLElBQUksYUFBYTtBQUNoQixpQkFBTyxLQUFLLG1CQUFtQixFQUFFO0FBQUEsUUFDbEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsSUFBSSxXQUFXLFlBQVk7QUFDMUIsZUFBSyxtQkFBbUIsRUFBRSxhQUFhO0FBQUEsWUFDdEM7QUFBQSxZQUNBQTtBQUFBLFVBQ0Q7QUFDQSxpQ0FBdUIsS0FBSyxNQUFNLE1BQU0sR0FBRyxvQkFBSSxJQUFJLENBQUM7QUFBQSxRQUNyRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxZQUFZLE1BQU07QUFDakIsZUFBSyxtQkFBbUIsRUFBRSxXQUFXLElBQUksaUJBQWlCLE1BQU0sS0FBSSxDQUFDO0FBQ3JFLGVBQUssbUJBQW1CLEVBQUUsU0FBUztBQUVuQyxlQUFLLG1CQUFtQixFQUFFLFFBQVEsS0FBSyxRQUFRO0FBQy9DLGlDQUF1QixLQUFLLE1BQU0sTUFBTSxHQUFHLG9CQUFJLElBQUksQ0FBQztBQUNwRCxpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsWUFBWSxNQUFNO0FBQ2pCLGVBQUssbUJBQW1CLEVBQUUsV0FBVyxPQUFPLGlCQUFpQixNQUFNLEtBQUksQ0FBQztBQUN4RSxlQUFLLG1CQUFtQixFQUFFLFNBQVM7QUFFbkMsZUFBSyxtQkFBbUIsRUFBRSxRQUFRO0FBQ2xDLGlDQUF1QixLQUFLLE1BQU0sTUFBTSxJQUFJLG9CQUFJLElBQUksQ0FBQztBQUNyRCxpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsZ0JBQWdCO0FBQ2YsaUJBQU8sS0FBSyxtQkFBbUIsRUFBRSxXQUFXLFNBQVM7QUFBQSxRQUN0RDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxTQUFTLE1BQU07QUFDZCxpQkFBTyxLQUFLLG1CQUFtQixFQUFFLFdBQVc7QUFBQSxZQUMzQyxpQkFBaUIsTUFBTSxLQUFJO0FBQUEsVUFDNUI7QUFBQSxRQUNEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLFdBQVc7QUFDVixnQkFBTSxRQUFRLENBQUM7QUFDZixjQUFJLEtBQUssbUJBQW1CLEdBQUc7QUFDOUIsZ0JBQUksUUFBUSxLQUFLLG1CQUFtQjtBQUNwQyxnQkFBSSxDQUFDLFlBQVksS0FBSztBQUNyQixzQkFBUSxLQUFLLFVBQVUsS0FBSyxtQkFBbUIsQ0FBQztBQUVqRCxrQkFBTSxLQUFLLEtBQUs7QUFBQSxVQUNqQjtBQUVBLGNBQUksQ0FBQyxLQUFLLGNBQWMsR0FBRztBQUMxQixtQkFBTyxNQUFNLEtBQUssSUFBSTtBQUFBLFVBQ3ZCO0FBRUEsZ0JBQU0sUUFBUSxLQUFLLFdBQVc7QUFDOUIsY0FBSSxVQUFVO0FBRWQscUJBQVcsUUFBUSxLQUFLLFlBQVk7QUFDbkM7QUFDQSxrQkFBTSxVQUFVLFVBQVUsVUFBVSxXQUFNLFVBQUs7QUFBQSxjQUM5QyxJQUFJLEtBQUs7QUFBQSxjQUNUO0FBQUEsWUFDRDtBQUNBLGtCQUFNLEtBQUssU0FBUyxLQUFLLFNBQVMsQ0FBQztBQUFBLFVBQ3BDO0FBRUEsaUJBQU8sTUFBTSxLQUFLLElBQUk7QUFBQSxRQUN2QjtBQUFBLE1BQ0Q7QUFBQTtBQUFBOzs7QUNuREEsV0FBUyxVQUFVLFNBQVMsVUFBVSxPQUFPLGFBQWFDLFVBQVM7QUFDbEUsVUFBTSxRQUFRLG9CQUFJLElBQUk7QUFFdEIsVUFBTSxXQUFXO0FBRWpCLFFBQUksQ0FBQyxTQUFTQSxRQUFPLEdBQUc7QUFDdkIsTUFBQUEsV0FBVSxDQUFDO0FBQUEsSUFDWjtBQUVBLElBQUFBLFdBQVU7QUFBQSxNQUNULENBQUM7QUFBQSxNQUNEO0FBQUEsUUFDQyxnQkFBZ0IsQ0FBQyxNQUFNLE1BQVM7QUFBQSxRQUNoQyxRQUFRO0FBQUEsTUFDVDtBQUFBLE1BQ0FBO0FBQUEsSUFDRDtBQUVBLFVBQU0sU0FBU0EsVUFBUztBQUN4QixRQUFJLGlCQUFpQkEsU0FBUTtBQUM3QixRQUFJLENBQUMsUUFBUSxjQUFjLEdBQUc7QUFDN0IsdUJBQWlCLENBQUMsY0FBYztBQUFBLElBQ2pDO0FBRUEsVUFBTSxXQUFXLGNBQWMsU0FBUyxVQUFVLFFBQVEsU0FBVSxHQUFHLEdBQUcsR0FBRztBQUM1RSxZQUFNLE1BQU0sSUFBSSxLQUFLO0FBQ3JCLFVBQUksTUFBTSxJQUFJLFdBQVc7QUFDekIsVUFBSSxlQUFlLFFBQVEsR0FBRyxNQUFNLEdBQUksT0FBTTtBQUU5QyxVQUFJLFFBQVEsUUFBVztBQUN0QixjQUFNLElBQUksTUFBTSw4Q0FBOEM7QUFBQSxNQUMvRDtBQUVBLFFBQUUsWUFBWSxJQUFJO0FBRWxCLFlBQU0sT0FBTyxJQUFJQyxNQUFLLENBQUM7QUFDdkIsV0FBSyxJQUFJLEdBQUcsSUFDVCxLQUFLLElBQUksR0FBRyxFQUFFLElBQUksSUFBSSxJQUN0QixLQUFLLElBQUksS0FBSyxJQUFJQyxVQUFTLEVBQUUsSUFBSSxJQUFJLENBQUM7QUFDekMsWUFBTSxJQUFJLEtBQUssSUFBSTtBQUFBLElBQ3BCLENBQUM7QUFFRCxVQUFNLFFBQVEsQ0FBQyxTQUFTO0FBQ3ZCLFlBQU0sS0FBSyxPQUFPLE9BQU8sSUFBSSxLQUFLO0FBRWxDLFVBQUksT0FBTyxRQUFXO0FBQ3JCLGNBQU0sSUFBSSxNQUFNLDhDQUE4QztBQUFBLE1BQy9EO0FBRUEsVUFBSSxTQUFTLElBQUksRUFBRSxHQUFHO0FBQ3JCLGFBQUssYUFBYSxTQUFTLElBQUksRUFBRTtBQUNqQyxpQkFBUyxPQUFPLEVBQUU7QUFBQSxNQUNuQjtBQUFBLElBQ0QsQ0FBQztBQUVELFVBQU0sT0FBTyxJQUFJQSxVQUFTO0FBRTFCLGFBQVMsUUFBUSxDQUFDLE1BQU07QUFDdkIsVUFBSSxhQUFhLEtBQUs7QUFDckIsVUFBRSxRQUFRLENBQUMsTUFBTTtBQUNoQixlQUFLLElBQUksQ0FBQztBQUFBLFFBQ1gsQ0FBQztBQUFBLE1BQ0Y7QUFBQSxJQUNELENBQUM7QUFFRCxXQUFPO0FBQUEsRUFDUjtBQTlNQSxNQTJCTSxjQU1BO0FBakNOO0FBQUE7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFRQSxNQUFNLGVBQWUsT0FBTyxRQUFRO0FBTXBDLE1BQU0sYUFBYSxPQUFPLE1BQU07QUFBQTtBQUFBOzs7QUNqQ2hDLE1BNEJNLGtCQVNBO0FBckNOO0FBQUE7QUFjQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFRQSxNQUFNLG1CQUFtQixPQUFPLFlBQVk7QUFTNUMsTUFBTSx3QkFBTixNQUFNLCtCQUE4QixLQUFLO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFJeEMsWUFBWSxNQUFNO0FBQ2pCLGdCQUFNO0FBRU4sZUFBSyxnQkFBZ0IsSUFBSTtBQUd6QixjQUFJLFdBQVcsTUFBTUMsU0FBUSxHQUFHO0FBQy9CLGtCQUFNLFdBQVc7QUFDakIsa0JBQU0sSUFBSSxJQUFJQyxNQUFLO0FBQ25CLGNBQUUsYUFBYTtBQUNmLGlCQUFLLGdCQUFnQixJQUFJO0FBQ3pCLGlCQUFLLGNBQWMsSUFBSTtBQUN2QjtBQUFBLFVBQ0Q7QUFFQSxlQUFLLGNBQWMsSUFBSSxpQkFBaUIsTUFBTUEsS0FBSTtBQUFBLFFBQ25EO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLENBQUMsT0FBTyxRQUFRLElBQUksYUFBYTtBQU1oQyxjQUFJLEtBQUssY0FBYyxNQUFNLFFBQVc7QUFDdkM7QUFBQSxVQUNEO0FBR0EsY0FBSSxLQUFLLGdCQUFnQixNQUFNLE1BQU07QUFDcEMsa0JBQU0sS0FBSyxjQUFjO0FBQUEsVUFDMUI7QUFFQSxjQUFJLEtBQUssY0FBYyxFQUFFLGNBQWMsR0FBRztBQUN6QyxrQkFBTSxhQUFhLEtBQUssY0FBYyxFQUFFO0FBRXhDLHVCQUFXLFFBQVEsWUFBWTtBQUM5QixxQkFBTyxJQUFJLHVCQUFzQixJQUFJO0FBQUEsWUFDdEM7QUFBQSxVQUNEO0FBQUEsUUFDRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxRQUFRLFVBQVU7QUFDakIscUJBQVcsUUFBUSxNQUFNO0FBQ3hCLHFCQUFTLElBQUk7QUFBQSxVQUNkO0FBQ0EsaUJBQU87QUFBQSxRQUNSO0FBQUEsTUFDRDtBQUFBO0FBQUE7OztBQ2pHQSxNQXFCTTtBQXJCTjtBQUFBO0FBWUE7QUFDQSxNQUFBQztBQVFBLE1BQU0sdUJBQXVCLElBQUksY0FBYztBQUUvQyxVQUFJO0FBQ0gsNkJBQXFCO0FBQUEsVUFDcEI7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUlBO0FBQUEsUUFDRDtBQUFBLE1BQ0QsU0FBUyxHQUFHO0FBQ1g7QUFBQSxVQUNDLFNBQVMsWUFBWSxFQUFFLGNBQWMsTUFBTTtBQUFBLFVBQzNDO0FBQUEsVUFDQSxJQUFJO0FBQUEsUUFDTDtBQUFBLE1BQ0Q7QUFBQTtBQUFBOzs7QUNyQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQThNQSxXQUFTQyw0QkFBMkIsT0FBTztBQUMxQyxZQUFRLFFBQVEsTUFBTSxHQUFHO0FBQUEsTUFDeEIsS0FBSztBQUNKLGlDQUF5QixLQUFLLE1BQU0sT0FBTyxPQUFPO0FBQ2xELGNBQU0sZUFBZTtBQUNyQjtBQUFBLE1BQ0QsS0FBSztBQUNKLGlDQUF5QixLQUFLLE1BQU0sT0FBTyxNQUFNO0FBQ2pELGNBQU0sZUFBZTtBQUNyQjtBQUFBLElBQ0Y7QUFBQSxFQUNEO0FBTUEsV0FBUyx5QkFBeUIsT0FBTyxNQUFNO0FBQzlDLHFCQUFpQixPQUFPLEtBQUs7QUFFN0IsUUFBSSxPQUFPLE1BQU0saUJBQWlCLFlBQVk7QUFDN0MsWUFBTSxJQUFJLE1BQU0sbUJBQW1CO0FBQUEsSUFDcEM7QUFFQSxVQUFNLE9BQU8sTUFBTSxhQUFhO0FBQ2hDLFVBQU0sYUFBYSxLQUFLLE1BQU07QUFFOUIsVUFBTSxRQUFRLFdBQVcsYUFBYSxvQkFBb0I7QUFDMUQsUUFBSSxVQUFVLE1BQU07QUFDbkIsWUFBTSxVQUFVLFdBQVc7QUFBQSxRQUMxQjtBQUFBLE1BQ0Q7QUFDQSxVQUFJLG1CQUFtQixhQUFhO0FBQ25DLGtCQUFVLFNBQVMsT0FBTztBQUFBLE1BQzNCO0FBQUEsSUFDRDtBQUFBLEVBQ0Q7QUFRQSxXQUFTLGVBQWUsTUFBTTtBQUM3QixxQkFBaUIsTUFBTUMsS0FBSTtBQUUzQixVQUFNLFFBQVEsSUFBSSxVQUFVLEtBQUssS0FBSyxFQUFFO0FBQUEsTUFDdkMsS0FBSyxVQUFVLHlCQUF5QixFQUFFO0FBQUEsSUFDM0M7QUFDQSxVQUFNLFFBQVEsSUFBSSxVQUFVLEtBQUssS0FBSyxFQUFFO0FBQUEsTUFDdkMsS0FBSyxVQUFVLHlCQUF5QixFQUFFO0FBQUEsSUFDM0M7QUFFQSxXQUFPO0FBQUEsTUFDTjtBQUFBLE1BQ0E7QUFBQSxJQUNEO0FBQUEsRUFDRDtBQU9BLFdBQVMsZ0JBQWdCLE9BQU87QUFDL0IsUUFBSSxPQUFPLEtBQUssbUJBQW1CLEVBQUUsSUFBSSxLQUFLO0FBQzlDLFFBQUksU0FBUyxRQUFXO0FBQ3ZCLGFBQU8sS0FBSyxtQkFBbUIsRUFBRSxJQUFJLFNBQVMsS0FBSyxDQUFDO0FBQUEsSUFDckQ7QUFFQSxVQUFNLFFBQVEsQ0FBQztBQUVmLFFBQUksZ0JBQWdCQSxPQUFNO0FBQ3pCLFVBQUksTUFBTTtBQUNWLGFBQU8sS0FBSztBQUNYLGNBQU0sa0JBQWtCLGVBQWUsS0FBSyxNQUFNLEdBQUc7QUFDckQsY0FBTSxRQUFRLGdCQUFnQixLQUFLO0FBQ25DLGNBQU0sSUFBSTtBQUFBLE1BQ1g7QUFBQSxJQUNEO0FBRUEsV0FBTztBQUFBLEVBQ1I7QUFnQkEsV0FBUyw0QkFBNEIsT0FBTztBQUMzQyxXQUFPLGdCQUNMLEtBQUssTUFBTSxLQUFLLEVBQ2hCLEtBQUssS0FBSyxVQUFVLHVCQUF1QixLQUFLLENBQUM7QUFBQSxFQUNwRDtBQVlBLFdBQVNDLHFCQUFtQjtBQUMzQixRQUFJLENBQUMsS0FBSyxZQUFZO0FBQ3JCLFlBQU0sSUFBSSxNQUFNLDJCQUEyQjtBQUFBLElBQzVDO0FBRUEsU0FBSyxzQkFBc0IsSUFBSSxDQUFDLFVBQVU7QUFDekMsWUFBTSxVQUFVO0FBQUEsUUFDZjtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDRDtBQUNBLFVBQUksRUFBRSxtQkFBbUIsY0FBYztBQUN0QztBQUFBLE1BQ0Q7QUFFQSxZQUFNLFlBQVksdUJBQXVCLFNBQVMsZ0JBQWdCLFFBQVE7QUFDMUUsWUFBTSxRQUFRLFVBQ1osYUFBYSxrQ0FBa0MsRUFDL0MsTUFBTSxHQUFHLEVBQ1QsSUFBSTtBQUVOLFlBQU0sZUFBZSxLQUFLLFVBQVUsV0FBVyxLQUFLLFFBQVE7QUFFNUQsWUFBTSxXQUFXLGlCQUFpQixVQUFVLFNBQVM7QUFDckQsV0FBSyxVQUFVLFdBQVcsS0FBSyxVQUFVLFFBQVE7QUFFakQsWUFBTSxnQkFBZ0IsYUFBYSxTQUFTLFlBQVk7QUFFeEQsVUFBSSxVQUFVLGFBQWEsZ0JBQWdCLEdBQUc7QUFDN0MsY0FBTSxTQUFTLFVBQVUsYUFBYSxnQkFBZ0I7QUFFdEQsWUFBSSxNQUFNLFVBQVU7QUFDcEIsY0FBTSxjQUFjLFNBQVMsTUFBTSxJQUFJO0FBRXZDLGNBQU0sTUFBTSxDQUFDQyxJQUFHLE1BQU07QUFDckIsY0FBSSxhQUFhLFFBQVE7QUFDeEIsbUJBQU9BLE9BQU07QUFBQSxVQUNkO0FBRUEsaUJBQU9BLE1BQUs7QUFBQSxRQUNiO0FBRUEsZUFDQyxLQUFLLGFBQWEsZ0JBQWdCLEtBQ2xDLElBQUksU0FBUyxJQUFJLGFBQWEsZ0JBQWdCLENBQUMsR0FBRyxXQUFXLEdBQzVEO0FBQ0QsZ0JBQU0sV0FBVyxJQUNmLGFBQWEsa0NBQWtDLEVBQy9DLE1BQU0sR0FBRyxFQUNULElBQUk7QUFDTixlQUFLLFVBQVUsV0FBVyxRQUFRLGVBQWUsYUFBYTtBQUU5RCxjQUFJLGFBQWEsU0FBUztBQUN6QixpQkFBSyxVQUFVLFdBQVcsUUFBUSxVQUFVLE9BQU87QUFBQSxVQUNwRDtBQUVBLGdCQUFNLElBQUk7QUFBQSxRQUNYO0FBQUEsTUFDRDtBQUFBLElBQ0Q7QUFFQSxTQUFLQyxnQkFBZSxJQUFJLENBQUMsVUFBVTtBQUNsQyxZQUFNLE9BQU8sTUFBTSxhQUFhO0FBQ2hDLFlBQU0sVUFBVSxPQUFPLENBQUM7QUFFeEIsVUFBSTtBQUVKLFVBQUksbUJBQW1CLGFBQWE7QUFDbkMsWUFBSSxRQUFRLGFBQWEsY0FBYyxHQUFHO0FBQ3pDLGlCQUFPLFFBQVEsYUFBYSxjQUFjO0FBQUEsUUFDM0MsV0FBVyxZQUFZLE1BQU07QUFDNUIsZUFBSyxLQUFLLElBQUk7QUFDZCxzQkFBWSxLQUFLLElBQUk7QUFBQSxRQUN0QixPQUFPO0FBQ04sZ0JBQU0sSUFBSSxRQUFRLFFBQVEsSUFBSSxjQUFjLEdBQUc7QUFDL0MsY0FBSSxhQUFhLGVBQWUsRUFBRSxhQUFhLEdBQUc7QUFDakQsbUJBQU8sRUFBRSxhQUFhLGNBQWM7QUFBQSxVQUNyQztBQUFBLFFBQ0Q7QUFBQSxNQUNELE9BQU87QUFDTjtBQUFBLE1BQ0Q7QUFFQSxjQUFRLE1BQU07QUFBQSxRQUNiLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSixVQUFBSiw0QkFBMkIsS0FBSyxNQUFNLEtBQUs7QUFDM0M7QUFBQSxNQUNGO0FBQUEsSUFDRDtBQUVBLFNBQUssV0FBVyxpQkFBaUIsV0FBVyxLQUFLSSxnQkFBZSxDQUFDO0FBQ2pFLFNBQUssV0FBVyxpQkFBaUIsU0FBUyxLQUFLLHNCQUFzQixDQUFDO0FBQUEsRUFDdkU7QUFZQSxXQUFTQyw0QkFBMkI7QUFDbkMsVUFBTUMsV0FBVSxDQUFDO0FBRWpCLFVBQU0sTUFBTSxLQUFLLGFBQWEsa0JBQWtCO0FBQ2hELFFBQUksU0FBUyxHQUFHLEdBQUc7QUFDbEIsTUFBQUEsU0FBUSxLQUFLLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxTQUFTO0FBQUEsSUFDeEM7QUFFQSxXQUFPQTtBQUFBLEVBQ1I7QUFNQSxXQUFTQyxnQkFBYztBQUV0QixXQUFPO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBa0VSO0FBOWZBLE1BOENNLHFCQU1BSCxrQkFpQkEsWUFzUEE7QUEzVE4sTUFBQUksb0JBQUE7QUFBQTtBQWNBO0FBQ0E7QUFDQSxNQUFBQztBQUlBO0FBQ0E7QUFJQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFBQTtBQUNBLE1BQUFDO0FBQ0E7QUFDQTtBQVFBLE1BQU0sc0JBQXNCLE9BQU8sZUFBZTtBQU1sRCxNQUFNTixtQkFBa0IsT0FBTyxpQkFBaUI7QUFpQmhELE1BQU0sYUFBTixjQUF5QixPQUFPO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTS9CLFlBQVksY0FBYyxJQUFJO0FBQzdCLGlCQUFPLE9BQU8sSUFBSSx3REFBd0Q7QUFBQSxRQUMzRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQWdCQSxJQUFJLFdBQVc7QUFDZCxpQkFBTyxPQUFPO0FBQUEsWUFDYixDQUFDO0FBQUEsWUFDRCxNQUFNO0FBQUEsWUFDTjtBQUFBLGNBQ0MsU0FBUztBQUFBLGdCQUNSLGdCQUFnQixDQUFDLEtBQUssUUFBVyxJQUFJO0FBQUEsZ0JBQ3JDLFlBQVk7QUFBQSxnQkFDWixnQkFBZ0I7QUFBQSxjQUNqQjtBQUFBLGNBQ0EsV0FBVztBQUFBLGdCQUNWLFdBQVc7QUFBQSxnQkFDWCxXQUFXO0FBQUEsY0FDWjtBQUFBLGNBQ0EsV0FBVztBQUFBLGdCQUNWLE1BQU1HLGNBQVk7QUFBQSxjQUNuQjtBQUFBLFlBQ0Q7QUFBQSxZQUNBRiwwQkFBeUIsS0FBSyxJQUFJO0FBQUEsVUFDbkM7QUFBQSxRQUNEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLE9BQU8sU0FBUztBQUNmLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxPQUFPLG1CQUFtQjtBQUN6QixpQkFBTyxDQUFDLGtCQUFrQixvQkFBb0I7QUFBQSxRQUMvQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVVBLGNBQWMsTUFBTTtBQUNuQixlQUFLLG1CQUFtQixJQUFJLG9CQUFJLElBQUk7QUFFcEMsZ0JBQU0saUJBQWlCLEtBQUssVUFBVSxXQUFXLENBQUMsQ0FBQztBQUVuRCxnQkFBTSxTQUFTLGlCQUFpQixRQUFRO0FBQ3hDLGdCQUFNLGlCQUFpQixpQkFBaUIsZ0JBQWdCO0FBRXhELGdCQUFNLEtBQUssS0FBSyxVQUFVLHNCQUFzQixJQUFJO0FBQ3BELGdCQUFNLFdBQVcsS0FBSyxVQUFVLDBCQUEwQixRQUFRO0FBRWxFLGdCQUFNLFdBQVcsaUJBQWlCLFVBQVU7QUFFNUMsZ0JBQU0sUUFBUSxVQUFVLE1BQU0sVUFBVSxJQUFJLFVBQVU7QUFBQSxZQUNyRDtBQUFBLFlBQ0E7QUFBQSxVQUNELENBQUM7QUFFRCxnQkFBTUMsV0FBVSxDQUFDO0FBQ2pCLHFCQUFXLFFBQVEsT0FBTztBQUN6QixrQkFBTSxXQUFXLElBQUksc0JBQXNCLElBQUk7QUFDL0MsdUJBQVcsS0FBSyxVQUFVO0FBQ3pCLG9CQUFNLGtCQUFrQixlQUFlLEtBQUssTUFBTSxDQUFDO0FBRW5ELG9CQUFNLFFBQVEsZ0JBQWdCO0FBQzlCLG9CQUFNLFFBQVEsZ0JBQWdCO0FBQzlCLG9CQUFNLFNBQVMsRUFBRTtBQUVqQixvQkFBTSxhQUFhLFNBQVMsSUFBSSxXQUFXO0FBQzNDLG9CQUFNLFFBQVE7QUFFZCxtQkFBSyxtQkFBbUIsRUFBRSxJQUFJLE9BQU8sQ0FBQztBQUV0QyxjQUFBQSxTQUFRLEtBQUs7QUFBQSxnQkFDWjtBQUFBLGdCQUNBO0FBQUEsZ0JBQ0E7QUFBQSxnQkFDQTtBQUFBLGdCQUNBO0FBQUEsZ0JBQ0EsQ0FBQyxjQUFjLEdBQUcsRUFBRSxjQUFjO0FBQUEsY0FDbkMsQ0FBQztBQUFBLFlBQ0Y7QUFBQSxVQUNEO0FBRUEsZUFBSyxVQUFVLFdBQVdBLFFBQU87QUFFakMsMEJBQWdCLE1BQU0sdUJBQXVCO0FBQUEsWUFDNUMsU0FBQUE7QUFBQSxVQUNELENBQUM7QUFFRCxpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsQ0FBQyxvQkFBb0IsSUFBSTtBQUN4QixnQkFBTSxvQkFBb0IsRUFBRTtBQUM1QixVQUFBSixtQkFBaUIsS0FBSyxJQUFJO0FBQUEsUUFDM0I7QUFBQSxNQUNEO0FBbUhBLE1BQU0seUJBQXlCLE9BQU8sd0JBQXdCO0FBcU05RCw0QkFBc0IsVUFBVTtBQUFBO0FBQUE7OztBQ2hnQmhDLE1BcUJNO0FBckJOO0FBQUE7QUFZQTtBQUNBLE1BQUFTO0FBUUEsTUFBTSx5QkFBeUIsSUFBSSxjQUFjO0FBRWpELFVBQUk7QUFDSCwrQkFBdUI7QUFBQSxVQUN0QjtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBSUE7QUFBQSxRQUNEO0FBQUEsTUFDRCxTQUFTLEdBQUc7QUFDWDtBQUFBLFVBQ0MsU0FBUyxZQUFZLEVBQUUsY0FBYyxNQUFNO0FBQUEsVUFDM0M7QUFBQSxVQUNBLElBQUk7QUFBQSxRQUNMO0FBQUEsTUFDRDtBQUFBO0FBQUE7OztBQ3JDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUF5VEEsV0FBU0MsMEJBQXdCO0FBQ2hDLFNBQUtDLG9CQUFtQixJQUFJLEtBQUssV0FBVztBQUFBLE1BQzNDLElBQUksY0FBYztBQUFBLElBQ25CO0FBQUEsRUFDRDtBQUtBLFdBQVMsZ0JBQWdCO0FBQ3hCLFNBQUtBLG9CQUFtQixFQUFFLFVBQVUsT0FBTyxLQUFLLFVBQVUsYUFBYSxDQUFDO0FBQ3hFLFNBQUtBLG9CQUFtQixFQUFFLFVBQVUsSUFBSSxLQUFLLFVBQVUsWUFBWSxDQUFDO0FBQUEsRUFDckU7QUFLQSxXQUFTLGlCQUFpQjtBQUN6QixTQUFLQSxvQkFBbUIsRUFBRSxVQUFVLE9BQU8sS0FBSyxVQUFVLFlBQVksQ0FBQztBQUN2RSxTQUFLQSxvQkFBbUIsRUFBRSxVQUFVLElBQUksS0FBSyxVQUFVLGFBQWEsQ0FBQztBQUFBLEVBQ3RFO0FBS0EsV0FBUyxjQUFjO0FBQ3RCLFFBQUksS0FBSyxVQUFVLE9BQU8sTUFBTSxLQUFLLFVBQVUsV0FBVyxHQUFHO0FBQzVELG9CQUFjLEtBQUssSUFBSTtBQUFBLElBQ3hCLE9BQU87QUFDTixxQkFBZSxLQUFLLElBQUk7QUFBQSxJQUN6QjtBQUFBLEVBQ0Q7QUFLQSxXQUFTLGVBQWU7QUFDdkIsUUFBSSxLQUFLLFVBQVUsVUFBVSxNQUFNLE1BQU07QUFDeEM7QUFBQSxJQUNEO0FBRUEsUUFBSSxVQUFVO0FBRWQsUUFBSSxLQUFLLFVBQVUsT0FBTyxNQUFNLEtBQUssVUFBVSxXQUFXLEdBQUc7QUFDNUQsY0FBUSxLQUFLLFVBQVUsWUFBWTtBQUNuQyxpQkFBVyxLQUFLLFVBQVUsYUFBYTtBQUFBLElBQ3hDLE9BQU87QUFDTixjQUFRLEtBQUssVUFBVSxXQUFXO0FBQ2xDLGlCQUFXLEtBQUssVUFBVSxZQUFZO0FBQUEsSUFDdkM7QUFFQSxTQUFLLFVBQVUsU0FBUyxLQUFLO0FBQzdCLFVBQU0sYUFBYSxLQUFLO0FBRXhCLFFBQUksV0FBVyxRQUFRLEdBQUc7QUFDekIsZUFBUyxLQUFLLElBQUk7QUFBQSxJQUNuQjtBQUVBLFNBQUssVUFBVSxTQUFTLEtBQUssS0FBSztBQUFBLEVBQ25DO0FBS0EsV0FBUyxzQkFBc0I7QUFDOUIsVUFBTSxRQUFRLEtBQUssVUFBVSxPQUFPO0FBRXBDLFVBQU0sa0JBQWtCLENBQUM7QUFDekIsb0JBQWdCLEtBQUssS0FBSyxVQUFVLFdBQVcsQ0FBQztBQUNoRCxvQkFBZ0IsS0FBSyxLQUFLLFVBQVUsWUFBWSxDQUFDO0FBRWpELFFBQUksZ0JBQWdCLFNBQVMsS0FBSyxNQUFNLE9BQU87QUFDOUM7QUFBQSxRQUNDO0FBQUEsUUFDQTtBQUFBLFFBQ0EsZ0JBQ0MsUUFDQSxnQkFDQSxLQUFLLFVBQVUsV0FBVyxJQUMxQixXQUNBLEtBQUssVUFBVSxZQUFZO0FBQUEsTUFDN0I7QUFDQSxXQUFLLFVBQVUsWUFBWSxJQUFJO0FBQy9CLFdBQUsscUJBQXFCLElBQUk7QUFBQSxJQUMvQixPQUFPO0FBQ04sV0FBSyxVQUFVLFlBQVksS0FBSztBQUNoQyxXQUFLLHFCQUFxQixLQUFLO0FBQUEsSUFDaEM7QUFBQSxFQUNEO0FBTUEsV0FBU0MscUJBQW1CO0FBQzNCLFVBQU1DLFFBQU87QUFDYixJQUFBQSxNQUFLLGlCQUFpQixTQUFTLFNBQVUsT0FBTztBQUMvQyxVQUFJLE1BQU0sU0FBUyxTQUFTO0FBQzNCLFFBQUFBLE1BQUtGLG9CQUFtQixFQUFFLE1BQU07QUFBQSxNQUNqQztBQUFBLElBQ0QsQ0FBQztBQUNELElBQUFFLE1BQUssaUJBQWlCLFNBQVMsU0FBVSxPQUFPO0FBQy9DLG1CQUFhLEtBQUtBLEtBQUk7QUFBQSxJQUN2QixDQUFDO0FBQ0QsV0FBTztBQUFBLEVBQ1I7QUFNQSxXQUFTQyxnQkFBYztBQUV0QixXQUFPO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBU1I7QUFuYkEsTUF1Q01ILHNCQUtPLFVBS0EsV0FpQlA7QUFsRU4sTUFBQUksc0JBQUE7QUFBQTtBQWNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBS0E7QUFDQTtBQUNBLE1BQUFDO0FBV0EsTUFBTUwsdUJBQXNCLE9BQU8sZUFBZTtBQUszQyxNQUFNLFdBQVc7QUFLakIsTUFBTSxZQUFZO0FBaUJ6QixNQUFNLGVBQU4sY0FBMkIsY0FBYztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUF1QnhDLElBQUksV0FBVztBQUNkLGlCQUFPLE9BQU8sT0FBTyxDQUFDLEdBQUcsTUFBTSxVQUFVO0FBQUEsWUFDeEMsT0FBTztBQUFBLFlBQ1AsVUFBVTtBQUFBLFlBQ1YsU0FBUztBQUFBLGNBQ1IsSUFBSTtBQUFBLGNBQ0osS0FBSztBQUFBLGNBQ0wsUUFBUTtBQUFBLFlBQ1Q7QUFBQSxZQUNBLFFBQVE7QUFBQSxjQUNQLElBQUk7QUFBQSxjQUNKLEtBQUs7QUFBQSxZQUNOO0FBQUEsWUFDQSxRQUFRO0FBQUEsY0FDUCxnQkFBZ0I7QUFBQSxjQUNoQixpQkFBaUI7QUFBQSxZQUNsQjtBQUFBLFlBQ0EsV0FBVztBQUFBLGNBQ1YsTUFBTUcsY0FBWTtBQUFBLFlBQ25CO0FBQUEsWUFDQSxTQUFTO0FBQUEsY0FDUixJQUFJLE1BQU07QUFDVCxzQkFBTSxJQUFJLE1BQU0sOEJBQThCO0FBQUEsY0FDL0M7QUFBQSxjQUNBLEtBQUssTUFBTTtBQUNWLHNCQUFNLElBQUksTUFBTSwrQkFBK0I7QUFBQSxjQUNoRDtBQUFBLFlBQ0Q7QUFBQSxVQUNELENBQUM7QUFBQSxRQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxDQUFDLG9CQUFvQixJQUFJO0FBQ3hCLGdCQUFNRCxRQUFPO0FBQ2IsZ0JBQU0sb0JBQW9CLEVBQUU7QUFDNUIsVUFBQUgsd0JBQXNCLEtBQUssSUFBSTtBQUMvQixVQUFBRSxtQkFBaUIsS0FBSyxJQUFJO0FBTTFCLGNBQUlDLE1BQUssVUFBVSxPQUFPLE1BQU0sTUFBTTtBQUNyQyxZQUFBQSxNQUFLLFVBQVUsU0FBU0EsTUFBSyxVQUFVLFlBQVksQ0FBQztBQUFBLFVBQ3JEO0FBS0EsY0FBSUEsTUFBSyxhQUFhLE9BQU8sR0FBRztBQUMvQixZQUFBQSxNQUFLLFVBQVUsU0FBU0EsTUFBSyxhQUFhLE9BQU8sQ0FBQztBQUFBLFVBQ25EO0FBS0EsOEJBQW9CLEtBQUtBLEtBQUk7QUFFN0IsY0FBSSxLQUFLLFVBQVUsVUFBVTtBQUM1QiwwQkFBYyxLQUFLQSxLQUFJO0FBQUEsVUFDeEIsT0FBTztBQUNOLDJCQUFlLEtBQUtBLEtBQUk7QUFBQSxVQUN6QjtBQUtBLFVBQUFBLE1BQUssY0FBYyxFQUFFO0FBQUEsWUFDcEIsSUFBSSxTQUFTLFdBQVk7QUFDeEIsa0JBQUksU0FBUyxJQUFJLEtBQUssZ0JBQWdCLGVBQWU7QUFDcEQsb0NBQW9CLEtBQUtBLEtBQUk7QUFDN0IsNEJBQVksS0FBS0EsS0FBSTtBQUFBLGNBQ3RCO0FBQUEsWUFDRCxDQUFDO0FBQUEsVUFDRjtBQUVBLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU9BLENBQUMsK0JBQStCLElBQUk7QUFDbkMsaUJBQU87QUFBQSxZQUNOLGtCQUFrQixDQUFDLFNBQVM7QUFDM0IscUJBQU8sS0FBSztBQUFBLFlBQ2I7QUFBQSxVQUNEO0FBQUEsUUFDRDtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0EsT0FBTyxtQkFBbUI7QUFDekIsaUJBQU8sQ0FBQyxzQkFBc0I7QUFBQSxRQUMvQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVVBLFFBQVE7QUFDUCx1QkFBYSxLQUFLLElBQUk7QUFBQSxRQUN2QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFZQSxTQUFTO0FBQ1IsZUFBSyxNQUFNO0FBQ1gsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVlBLFdBQVc7QUFDVixlQUFLLFVBQVUsU0FBUyxLQUFLLFVBQVUsV0FBVyxDQUFDO0FBQ25ELGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFZQSxZQUFZO0FBQ1gsZUFBSyxVQUFVLFNBQVMsS0FBSyxVQUFVLFlBQVksQ0FBQztBQUNwRCxpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFhQSxJQUFJLFFBQVE7QUFDWCxpQkFBTyxLQUFLLFVBQVUsT0FBTyxNQUFNLEtBQUssVUFBVSxXQUFXLElBQzFELFdBQ0E7QUFBQSxRQUNKO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBYUEsSUFBSSxRQUFRO0FBQ1gsaUJBQU8sS0FBSyxVQUFVLFdBQ25CLEtBQUssVUFBVSxXQUFXLElBQzFCLEtBQUssVUFBVSxZQUFZO0FBQUEsUUFDL0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBWUEsSUFBSSxNQUFNLE9BQU87QUFDaEIsZUFBSyxVQUFVLFNBQVMsS0FBSztBQUFBLFFBQzlCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLFlBQVksY0FBYyxJQUFJO0FBQzdCLGlCQUFPLE9BQU87QUFBQSxZQUNiO0FBQUEsVUFDRDtBQUFBLFFBQ0Q7QUFBQSxRQUVBLE9BQU8sU0FBUztBQUNmLGlCQUFPO0FBQUEsUUFDUjtBQUFBLE1BQ0Q7QUFpSUEsNEJBQXNCLFlBQVk7QUFBQTtBQUFBOzs7QUNyYmxDO0FBQUE7QUFBQSxvQkFBQUk7QUFBQTtBQXdNQSxXQUFTQyw0QkFBMkI7QUFDbkMsVUFBTUMsV0FBVSxDQUFDO0FBRWpCLFVBQU0sTUFBTSxLQUFLLGFBQWEsa0JBQWtCO0FBRWhELFFBQUksU0FBUyxHQUFHLEdBQUc7QUFDbEIsTUFBQUEsU0FBUSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssU0FBUyxRQUFRLEVBQUUsU0FBUztBQUFBLElBQzNEO0FBRUEsUUFBSSxLQUFLLGFBQWEscUJBQXFCLEdBQUc7QUFDN0MsTUFBQUEsU0FBUSxRQUFRLElBQUksS0FBSyxhQUFhLHFCQUFxQixFQUFFLFlBQVk7QUFBQSxJQUMxRTtBQUVBLFdBQU9BO0FBQUEsRUFDUjtBQWFBLFdBQVNDLDRCQUEyQjtBQUNuQyxRQUFJLEtBQUtDLG1DQUFrQyxNQUFNLE1BQU07QUFDdEQ7QUFBQSxJQUNEO0FBRUEsU0FBS0EsbUNBQWtDLElBQUk7QUFFM0MsVUFBTUYsV0FBVTtBQUFBLE1BQ2YsV0FBVyxDQUFDLEdBQUc7QUFBQSxJQUNoQjtBQUVBLFVBQU0sV0FBVyxDQUFDLFNBQVNHLGNBQWE7QUFDdkMsaUJBQVcsQ0FBQyxFQUFFLEtBQUssS0FBSyxRQUFRLFFBQVEsR0FBRztBQUMxQyxZQUFJLE1BQU0sbUJBQW1CLE1BQU07QUFDbEMsY0FBSSxLQUFLLFVBQVUsUUFBUSxNQUFNLFVBQVU7QUFDMUMsWUFBQUEsVUFBUyxXQUFXO0FBQUEsVUFDckI7QUFFQSxjQUFJO0FBQ0gsWUFBQUMsYUFBWSxLQUFLLElBQUk7QUFBQSxVQUN0QixTQUFTLEdBQUc7QUFDWCw4QkFBa0IsTUFBTSx3QkFBd0IsRUFBRSxTQUFTLENBQUM7QUFBQSxVQUM3RDtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBQUEsSUFDRDtBQUVBLFVBQU0sV0FBVyxJQUFJLHFCQUFxQixVQUFVSixRQUFPO0FBQzNELGFBQVMsUUFBUSxJQUFJO0FBQUEsRUFDdEI7QUFpQkEsV0FBU0ksZUFBYztBQUN0QixRQUFJLENBQUMsS0FBSyxZQUFZO0FBQ3JCLFlBQU0sSUFBSSxNQUFNLDJCQUEyQjtBQUFBLElBQzVDO0FBRUEsVUFBTSxNQUFNLEtBQUssVUFBVSxPQUFPLE1BQVM7QUFDM0MsUUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLFFBQVEsSUFBSTtBQUNqQyxZQUFNLElBQUksTUFBTSxhQUFhO0FBQUEsSUFDOUI7QUFFQSxVQUFNSixXQUFVLEtBQUssVUFBVSxTQUFTLENBQUMsQ0FBQztBQUUxQyxVQUFNLGNBQWMsS0FBSyxXQUFXLGNBQWMsb0JBQW9CO0FBQ3RFLFFBQUksRUFBRSx1QkFBdUIsY0FBYztBQUMxQyxZQUFNLElBQUksTUFBTSxzQkFBc0I7QUFBQSxJQUN2QztBQUVBLGdCQUFZLE1BQU0sVUFBVTtBQUU1QixRQUFJLFlBQVksS0FBSyxXQUFXO0FBQUEsTUFDL0IsSUFBSSxjQUFjO0FBQUEsSUFDbkI7QUFDQSxRQUFJLEVBQUUscUJBQXFCLGNBQWM7QUFDeEMsa0JBQVksU0FBUyxjQUFjLEtBQUs7QUFDeEMsZ0JBQVUsTUFBTSxVQUFVO0FBQzFCLGdCQUFVLGFBQWEsZ0JBQWdCLFdBQVc7QUFDbEQsV0FBSyxXQUFXLFlBQVksU0FBUztBQUFBLElBQ3RDO0FBRUEseUJBQXFCLFdBQVcsS0FBS0EsUUFBTyxFQUMxQyxLQUFLLE1BQU07QUFDWCxrQkFBWSxNQUFNLFVBQVU7QUFDNUIsb0JBQWMsS0FBSyxJQUFJO0FBQUEsSUFDeEIsQ0FBQyxFQUNBLE1BQU0sQ0FBQyxNQUFNO0FBQ2IsWUFBTTtBQUFBLElBQ1AsQ0FBQztBQUFBLEVBQ0g7QUFNQSxXQUFTLGdCQUFnQjtBQUN4QixVQUFNLGFBQWEsS0FBSyxVQUFVLFlBQVk7QUFDOUMsUUFBSSxDQUFDLFFBQVEsVUFBVSxFQUFHO0FBRTFCLGVBQVcsQ0FBQyxFQUFFLFNBQVMsS0FBSyxXQUFXLFFBQVEsR0FBRztBQUNqRCxZQUFNLFNBQVMsV0FBVztBQUMxQixZQUFNLGNBQWMsV0FBVztBQUUvQixVQUFJLFNBQVMsTUFBTSxLQUFLLFNBQVMsV0FBVyxHQUFHO0FBQzlDLGNBQU0sYUFBYSxLQUFLLFdBQVcsY0FBYyxNQUFNO0FBQ3ZELGNBQU0sa0JBQWtCLFNBQVMsY0FBYyxXQUFXO0FBRTFELFlBQ0Msc0JBQXNCLGVBQ3RCLDJCQUEyQixhQUMxQjtBQUNELDBCQUFnQixZQUFZLFdBQVcsVUFBVSxJQUFJLEVBQUU7QUFBQSxRQUN4RDtBQUFBLE1BQ0Q7QUFBQSxJQUNEO0FBRUEsV0FBTztBQUFBLEVBQ1I7QUFNQSxXQUFTSyxnQkFBYztBQUV0QixXQUFPO0FBQUE7QUFBQTtBQUFBLEVBR1I7QUE3VkEsTUFxQ01ILHFDQWNBSjtBQW5ETixNQUFBUSxpQkFBQTtBQUFBO0FBY0E7QUFDQTtBQUNBLE1BQUFDO0FBSUE7QUFPQTtBQUNBLE1BQUFBO0FBQ0E7QUFRQSxNQUFNTCxzQ0FBcUMsT0FBTyxnQkFBZ0I7QUFjbEUsTUFBTUosWUFBTixjQUF1QixjQUFjO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTXBDLFlBQVksY0FBYyxJQUFJO0FBQzdCLGlCQUFPLE9BQU8sSUFBSSwyQ0FBMkM7QUFBQSxRQUM5RDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBb0JBLElBQUksV0FBVztBQUNkLGlCQUFPLE9BQU87QUFBQSxZQUNiLENBQUM7QUFBQSxZQUNELE1BQU07QUFBQSxZQUNOO0FBQUEsY0FDQyxXQUFXO0FBQUEsZ0JBQ1YsTUFBTU8sY0FBWTtBQUFBLGNBQ25CO0FBQUEsY0FDQSxLQUFLO0FBQUEsY0FDTCxRQUFRO0FBQUEsY0FDUixZQUFZLENBQUM7QUFBQSxjQUNiLE9BQU87QUFBQSxnQkFDTixVQUFVO0FBQUEsZ0JBQ1YsUUFBUTtBQUFBLGdCQUNSLE1BQU07QUFBQSxnQkFDTixhQUFhO0FBQUEsZ0JBQ2IsU0FBUztBQUFBLGtCQUNSLFFBQVE7QUFBQSxnQkFDVDtBQUFBLGNBQ0Q7QUFBQSxZQUNEO0FBQUEsWUFDQU4sMEJBQXlCLEtBQUssSUFBSTtBQUFBLFVBQ25DO0FBQUEsUUFDRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU9BLFdBQVcscUJBQXFCO0FBQy9CLGdCQUFNLE9BQU8sTUFBTTtBQUNuQixlQUFLLEtBQUssa0JBQWtCO0FBQzVCLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0EsQ0FBQyxnQkFBZ0IsSUFBSTtBQUNwQixnQkFBTSxnQkFBZ0IsRUFBRTtBQUd4QixlQUFLLHVCQUF1QixFQUFFLGtCQUFrQixJQUFJLENBQUMsUUFBUTtBQUM1RCxnQkFBSSxLQUFLLGFBQWEsa0JBQWtCLEdBQUc7QUFDMUMsbUJBQUssVUFBVSxPQUFPLElBQUksSUFBSSxLQUFLLFNBQVMsUUFBUSxFQUFFLFNBQVMsQ0FBQztBQUFBLFlBQ2pFLE9BQU87QUFDTixtQkFBSyxVQUFVLE9BQU8sTUFBUztBQUFBLFlBQ2hDO0FBQUEsVUFDRDtBQUFBLFFBQ0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQWNBLENBQUMsb0JBQW9CLElBQUk7QUFDeEIsZ0JBQU0sb0JBQW9CLEVBQUU7QUFDNUIsVUFBQUUsMEJBQXlCLEtBQUssSUFBSTtBQUFBLFFBQ25DO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsT0FBTyxtQkFBbUI7QUFDekIsaUJBQU8sQ0FBQztBQUFBLFFBQ1Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxPQUFPLFNBQVM7QUFDZixpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFVQSxNQUFNLEtBQUs7QUFDVixjQUFJLFNBQVMsR0FBRyxLQUFLLGVBQWUsS0FBSztBQUN4QyxpQkFBSyxhQUFhLG9CQUFvQixHQUFHLEdBQUcsRUFBRTtBQUFBLFVBQy9DO0FBRUEsaUJBQU9HLGFBQVksS0FBSyxJQUFJO0FBQUEsUUFDN0I7QUFBQSxNQUNEO0FBMEtBLDRCQUFzQk4sU0FBUTtBQUFBO0FBQUE7OztBQy9WOUIsTUFxQk07QUFyQk47QUFBQTtBQVlBO0FBQ0EsTUFBQVU7QUFRQSxNQUFNLGlCQUFpQixJQUFJLGNBQWM7QUFFekMsVUFBSTtBQUNILHVCQUFlO0FBQUEsVUFDZDtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBSUE7QUFBQSxRQUNEO0FBQUEsTUFDRCxTQUFTLEdBQUc7QUFDWDtBQUFBLFVBQ0MsU0FBUyxZQUFZLEVBQUUsY0FBYyxNQUFNO0FBQUEsVUFDM0M7QUFBQSxVQUNBLElBQUk7QUFBQSxRQUNMO0FBQUEsTUFDRDtBQUFBO0FBQUE7OztBQ3JDQSxNQWtDTTtBQWxDTjtBQUFBO0FBY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWFBLE1BQU0sUUFBTixNQUFNLGVBQWMsU0FBUztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQWtCNUIsWUFBWSxhQUFhQyxVQUFTO0FBQ2pDLGdCQUFNQSxRQUFPO0FBRWIsY0FBSUEsYUFBWSxRQUFXO0FBQzFCLFlBQUFBLFdBQVUsQ0FBQztBQUFBLFVBQ1o7QUFFQSxjQUFJLHVCQUF1QixhQUFhO0FBSXZDLGlCQUFLLG1CQUFtQjtBQUFBLFVBQ3pCLE9BQU87QUFJTixpQkFBSyxtQkFBbUIsWUFBWSxFQUFFO0FBQUEsY0FDckMsZUFBZSxXQUFXO0FBQUEsWUFDM0I7QUFBQSxVQUNEO0FBTUEsZUFBSyxjQUFjLElBQUk7QUFBQSxZQUN0QixDQUFDO0FBQUEsWUFDRCxNQUFNO0FBQUEsWUFDTixLQUFLO0FBQUEsWUFDTCxlQUFlQSxRQUFPO0FBQUEsVUFDdkI7QUFBQSxRQUNEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsSUFBSSxXQUFXO0FBQ2QsaUJBQU8sT0FBTyxDQUFDLEdBQUcsTUFBTSxRQUFRO0FBQUEsUUFDakM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxnQkFBZ0IsUUFBUTtBQUN2QixjQUFJLFNBQVMsTUFBTSxHQUFHO0FBQ3JCLHFCQUFTLFlBQVksTUFBTTtBQUFBLFVBQzVCO0FBRUEsaUJBQU8sSUFBSSxRQUFRLENBQUMsU0FBUyxXQUFXO0FBQ3ZDLGdCQUFJLEtBQUsscUJBQXFCLE1BQU07QUFDbkMscUJBQU8sSUFBSSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xDO0FBQUEsWUFDRDtBQUVBLGdCQUFJLEVBQUUsS0FBSyw0QkFBNEIsb0JBQW9CO0FBQzFELHFCQUFPLElBQUksTUFBTSw2QkFBNkIsQ0FBQztBQUMvQztBQUFBLFlBQ0Q7QUFFQSxnQkFBSSxLQUFLLGlCQUFpQixTQUFTLG9CQUFvQjtBQUN0RDtBQUFBLGdCQUNDLElBQUksTUFBTSx3REFBd0Q7QUFBQSxjQUNuRTtBQUNBO0FBQUEsWUFDRDtBQUVBLGdCQUFJLGVBQWU7QUFDbkIsZ0JBQUk7QUFDSCw2QkFBZSxLQUFLLE1BQU0sS0FBSyxpQkFBaUIsVUFBVSxLQUFLLENBQUM7QUFBQSxZQUNqRSxTQUFTLEdBQUc7QUFDWCxxQkFBTyxDQUFDO0FBQ1I7QUFBQSxZQUNEO0FBRUEsZ0JBQUksaUJBQWlCLE1BQU07QUFDMUIscUJBQU8sSUFBSSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3JEO0FBQUEsWUFDRDtBQUVBLGtCQUFNLElBQUksSUFBSSxhQUFhLE1BQU07QUFDakMsY0FBRSxtQkFBbUIsWUFBWTtBQUVqQyxvQkFBUSxDQUFDO0FBQUEsVUFDVixDQUFDO0FBQUEsUUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVVBLE9BQU8sNEJBQTRCLFNBQVM7QUFDM0MsZ0JBQU0sSUFBSSxZQUFZO0FBRXRCLGNBQUksRUFBRSxtQkFBbUIsY0FBYztBQUN0QyxzQkFBVSxFQUFFLGNBQWMsTUFBTTtBQUFBLFVBQ2pDO0FBRUEsZ0JBQU0sT0FBTyxFQUFFLGlCQUFpQix3Q0FBd0M7QUFDeEUsY0FBSSxTQUFTLE1BQU07QUFDbEIsbUJBQU8sUUFBUSxRQUFRLENBQUMsQ0FBQztBQUFBLFVBQzFCO0FBRUEsZ0JBQU0sV0FBVyxDQUFDO0FBRWxCLGVBQUssUUFBUSxDQUFDLHVCQUF1QjtBQUNwQyxrQkFBTSxJQUFJLElBQUksT0FBTSxvQkFBb0IsQ0FBQyxDQUFDO0FBQzFDLHFCQUFTLEtBQUssRUFBRSxnQkFBZ0IsUUFBVyxPQUFPLENBQUM7QUFBQSxVQUNwRCxDQUFDO0FBRUQsaUJBQU8sUUFBUSxJQUFJLFFBQVE7QUFBQSxRQUM1QjtBQUFBLE1BQ0Q7QUFBQTtBQUFBOzs7QUMzS0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1Bb0NNLFVBd0JBO0FBNUROO0FBQUE7QUFjQTtBQXNCQSxNQUFNLFdBQVcsSUFBSSxRQUFRLENBQUMsWUFBWTtBQUN6QyxjQUFNQyxZQUFXLFlBQVk7QUFFN0IsWUFBSUEsVUFBUyxlQUFlLFdBQVc7QUFDdEMsVUFBQUEsVUFBUyxpQkFBaUIsb0JBQW9CLE9BQU87QUFBQSxRQUN0RCxPQUFPO0FBQ04sa0JBQVE7QUFBQSxRQUNUO0FBQUEsTUFDRCxDQUFDO0FBZ0JELE1BQU0sY0FBYyxJQUFJLFFBQVEsQ0FBQyxZQUFZO0FBQzVDLGNBQU1BLFlBQVcsWUFBWTtBQUM3QixjQUFNQyxVQUFTQyxXQUFVO0FBRXpCLFlBQUlGLFVBQVMsZUFBZSxZQUFZO0FBQ3ZDLGtCQUFRO0FBQUEsUUFDVCxPQUFPO0FBQ04sVUFBQUMsUUFBTyxpQkFBaUIsUUFBUSxPQUFPO0FBQUEsUUFDeEM7QUFBQSxNQUNELENBQUM7QUFBQTtBQUFBOzs7QUNyRUQsTUEyQk0sY0FNQSxhQU1BLGFBV0E7QUFsRE47QUFBQTtBQWNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBT0EsTUFBTSxlQUFlO0FBTXJCLE1BQU0sY0FBYztBQU1wQixNQUFNLGNBQWMsT0FBTyxPQUFPO0FBV2xDLE1BQU0sZUFBTixjQUEyQixnQkFBZ0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBSzFDLFlBQVlFLFVBQVM7QUFDcEIsZ0JBQU1BLFFBQU87QUFDYiwyQkFBaUIsS0FBSyxVQUFVLFlBQVksR0FBRyxZQUFZO0FBRTNELGVBQUssV0FBVyxJQUFJLElBQUksTUFBTTtBQUFBLFFBQy9CO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsWUFBWSxjQUFjLElBQUk7QUFDN0IsaUJBQU8sT0FBTyxJQUFJLG1DQUFtQztBQUFBLFFBQ3REO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxJQUFJLFdBQVc7QUFDZCxpQkFBTyxPQUFPLENBQUMsR0FBRyxNQUFNLFVBQVU7QUFBQSxZQUNqQyxDQUFDLFlBQVksR0FBRyxnQkFBZ0IsVUFBVTtBQUFBLFlBQzFDLENBQUMsV0FBVyxHQUFHO0FBQUEsVUFDaEIsQ0FBQztBQUFBLFFBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVFBLGFBQWE7QUFDWixnQkFBTSxTQUFTLEtBQUssVUFBVTtBQUM5QixjQUFJLGtCQUFrQixNQUFNO0FBQzNCLGlCQUFLLFdBQVcsRUFBRSxLQUFLLE1BQU07QUFBQSxVQUM5QjtBQUNBLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU9BLGVBQWU7QUFDZCxnQkFBTSxPQUFPLEtBQUssV0FBVyxFQUFFLElBQUk7QUFDbkMsY0FBSSxnQkFBZ0IsTUFBTTtBQUN6QixpQkFBSyxNQUFNLElBQUk7QUFBQSxVQUNoQjtBQUVBLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFTQSxNQUFNLFNBQVMsZUFBZTtBQUM3QiwyQkFBaUIsU0FBUyxJQUFJO0FBRTlCLGtCQUFRLE1BQU07QUFBQSxZQUNiLGVBQWUsaUJBQWlCO0FBQUEsVUFDakMsQ0FBQztBQUVELGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxZQUFZO0FBQ1gsaUJBQU8sS0FBSyxVQUFVLFlBQVksRUFBRTtBQUFBLFFBQ3JDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVNBLGFBQWEsT0FBTztBQUNuQixjQUFJLGlCQUFpQixLQUFLLFVBQVUsV0FBVztBQUMvQyxjQUFJLG1CQUFtQixRQUFXO0FBQ2pDLDZCQUFpQixLQUFLLFVBQVUsWUFBWTtBQUFBLFVBQzdDO0FBRUEsMkJBQWlCLGdCQUFnQixJQUFJO0FBRXJDLGNBQUksVUFBVSxRQUFXO0FBQ3hCLDJCQUFlLEtBQUs7QUFBQSxVQUNyQjtBQUVBLGlCQUFPO0FBQUEsWUFDTixHQUFHLGVBQWU7QUFBQSxjQUNqQjtBQUFBLFlBQ0Q7QUFBQSxVQUNELEVBQUUsT0FBTyxDQUFDLFlBQVk7QUFDckIsZ0JBQUksVUFBVSxVQUFhLENBQUMsUUFBUSxRQUFRLEtBQUssR0FBRztBQUNuRCxxQkFBTztBQUFBLFlBQ1I7QUFFQSxnQkFBSSxRQUFRLGFBQWEsVUFBVSxFQUFHLFFBQU87QUFDN0MsZ0JBQUksUUFBUSxhQUFhLGFBQWEsTUFBTSxPQUFRLFFBQU87QUFFM0Qsa0JBQU0sT0FBTyxRQUFRLHNCQUFzQjtBQUMzQyxnQkFBSSxLQUFLLFVBQVUsRUFBRyxRQUFPO0FBQzdCLGdCQUFJLEtBQUssV0FBVyxFQUFHLFFBQU87QUFFOUIsbUJBQU87QUFBQSxVQUNSLENBQUM7QUFBQSxRQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLFVBQVUsT0FBTztBQUNoQixnQkFBTSxVQUFVLEtBQUssVUFBVTtBQUMvQixnQkFBTSxZQUFZLEtBQUssYUFBYSxLQUFLO0FBRXpDLGNBQUksQ0FBQyxRQUFRLFNBQVMsS0FBSyxVQUFVLFdBQVcsR0FBRztBQUNsRCxtQkFBTztBQUFBLFVBQ1I7QUFFQSxjQUFJLG1CQUFtQixNQUFNO0FBQzVCLGtCQUFNLFFBQVEsVUFBVSxRQUFRLE9BQU87QUFFdkMsZ0JBQUksUUFBUSxJQUFJO0FBQ2YsbUJBQUssTUFBTSxVQUFVLFFBQVEsQ0FBQyxLQUFLLFVBQVUsQ0FBQyxDQUFDO0FBQUEsWUFDaEQsT0FBTztBQUNOLG1CQUFLLE1BQU0sVUFBVSxDQUFDLENBQUM7QUFBQSxZQUN4QjtBQUFBLFVBQ0QsT0FBTztBQUNOLGlCQUFLLE1BQU0sVUFBVSxDQUFDLENBQUM7QUFBQSxVQUN4QjtBQUVBLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxVQUFVLE9BQU87QUFDaEIsZ0JBQU0sVUFBVSxLQUFLLFVBQVU7QUFDL0IsZ0JBQU0sWUFBWSxLQUFLLGFBQWEsS0FBSztBQUV6QyxjQUFJLENBQUMsUUFBUSxTQUFTLEtBQUssVUFBVSxXQUFXLEdBQUc7QUFDbEQsbUJBQU87QUFBQSxVQUNSO0FBRUEsY0FBSSxtQkFBbUIsTUFBTTtBQUM1QixrQkFBTSxRQUFRLFVBQVUsUUFBUSxPQUFPO0FBRXZDLGdCQUFJLFFBQVEsSUFBSTtBQUNmLG1CQUFLLE1BQU0sVUFBVSxRQUFRLENBQUMsS0FBSyxVQUFVLFVBQVUsU0FBUyxDQUFDLENBQUM7QUFBQSxZQUNuRSxPQUFPO0FBQ04sbUJBQUssTUFBTSxVQUFVLFVBQVUsU0FBUyxDQUFDLENBQUM7QUFBQSxZQUMzQztBQUFBLFVBQ0QsT0FBTztBQUNOLGlCQUFLLE1BQU0sVUFBVSxVQUFVLFNBQVMsQ0FBQyxDQUFDO0FBQUEsVUFDM0M7QUFFQSxpQkFBTztBQUFBLFFBQ1I7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDcExBLFdBQVMsb0JBQW9CO0FBQzVCLG1CQUFlLElBQUk7QUFFbkIsUUFBSSxDQUFDLFVBQVUsTUFBTSxZQUFZLEdBQUc7QUFDbkMsYUFBTyxlQUFlLE1BQU0sY0FBYztBQUFBLFFBQ3pDLEtBQUssV0FBWTtBQUNoQixpQkFBTyxDQUFDO0FBQUEsUUFDVDtBQUFBLE1BQ0QsQ0FBQztBQUFBLElBQ0Y7QUFFQSxVQUFNLFdBQVcsT0FBTyxDQUFDLEdBQUcsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDO0FBQ3BELFNBQUssY0FBYyxJQUFJLElBQUksY0FBYyxRQUFRO0FBUWpELFNBQUssd0JBQXdCLElBQUksQ0FBQyxhQUFhO0FBQzlDLFdBQUssY0FBYyxFQUFFLGVBQWUsUUFBUTtBQUM1QyxhQUFPO0FBQUEsSUFDUjtBQVFBLFNBQUssd0JBQXdCLElBQUksQ0FBQyxhQUFhO0FBQzlDLFdBQUssY0FBYyxFQUFFLGVBQWUsUUFBUTtBQUM1QyxhQUFPO0FBQUEsSUFDUjtBQVFBLFNBQUssMEJBQTBCLElBQUksQ0FBQyxhQUFhO0FBQ2hELGFBQU8sS0FBSyxjQUFjLEVBQUUsaUJBQWlCLFFBQVE7QUFBQSxJQUN0RDtBQVNBLFNBQUssYUFBYSxJQUFJLENBQUMsTUFBTSxVQUFVO0FBQ3RDLFVBQUksV0FBVyxLQUFLLGNBQWMsRUFBRSxXQUFXLENBQUMsRUFBRSxPQUFPLE1BQU0sS0FBSztBQUNwRSxhQUFPO0FBQUEsSUFDUjtBQVNBLFNBQUssY0FBYyxJQUFJLENBQUNDLGFBQVk7QUFDbkMsVUFBSSxTQUFTQSxRQUFPLEdBQUc7QUFDdEIsUUFBQUEsV0FBVUMsa0JBQWlCRCxRQUFPO0FBQUEsTUFDbkM7QUFFQSxhQUFPLEtBQUssY0FBYyxFQUFFLFdBQVcsR0FBRyxVQUFVQSxRQUFPO0FBQzNELGFBQU87QUFBQSxJQUNSO0FBU0EsU0FBSyxhQUFhLElBQUksQ0FBQyxNQUFNLGlCQUFpQjtBQUM3QyxVQUFJO0FBRUosVUFBSTtBQUNILGdCQUFRLElBQUksV0FBVyxLQUFLLGNBQWMsRUFBRSxlQUFlLENBQUMsRUFBRTtBQUFBLFVBQzdEO0FBQUEsUUFDRDtBQUFBLE1BQ0QsU0FBUyxHQUFHO0FBQUEsTUFBQztBQUViLFVBQUksVUFBVSxPQUFXLFFBQU87QUFDaEMsYUFBTztBQUFBLElBQ1I7QUFBQSxFQUNEO0FBUUEsV0FBUyxVQUFVLEtBQUssTUFBTTtBQUM3QixXQUFPLFNBQVMsR0FBRyxHQUFHO0FBQ3JCLFVBQUksT0FBTyx5QkFBeUIsS0FBSyxJQUFJLElBQUksS0FBSyxHQUFHO0FBQ3hELGVBQU87QUFBQSxNQUNSO0FBQ0EsWUFBTSxPQUFPLGVBQWUsR0FBRztBQUFBLElBQ2hDO0FBRUEsV0FBTztBQUFBLEVBQ1I7QUFPQSxXQUFTQyxrQkFBaUIsTUFBTTtBQUMvQixRQUFJLE1BQU0sQ0FBQztBQUVYLFFBQUksQ0FBQyxTQUFTLElBQUksR0FBRztBQUNwQixhQUFPO0FBQUEsSUFDUjtBQUdBLFFBQUk7QUFDSCxZQUFNLFVBQVUsYUFBYSxJQUFJO0FBQ2pDLGFBQU8sUUFBUTtBQUFBLElBQ2hCLFNBQVMsR0FBRztBQUFBLElBQUM7QUFFYixRQUFJO0FBQ0gsWUFBTSxLQUFLLE1BQU0sSUFBSTtBQUFBLElBQ3RCLFNBQVMsR0FBRztBQUNYLFlBQU07QUFBQSxJQUNQO0FBRUEsV0FBTyxlQUFlLEdBQUc7QUFBQSxFQUMxQjtBQXZMQSxNQThCTTtBQTlCTjtBQUFBO0FBY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUUEsTUFBTSxlQUFlO0FBQUE7QUFBQTs7O0FDOUJyQjtBQUFBO0FBQUEsd0JBQUFDO0FBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQWdOQSxXQUFTLG1CQUFtQjtBQUMzQixVQUFNLGFBQWEsU0FBUyxjQUFjLEtBQUssVUFBVSxXQUFXLE1BQU0sQ0FBQztBQUMzRSxRQUFJLEVBQUUsc0JBQXNCLGNBQWM7QUFDekMsWUFBTSxJQUFJLE1BQU0sa0JBQWtCO0FBQUEsSUFDbkM7QUFFQSxjQUFVLEtBQUssSUFBSTtBQUNuQixlQUFXLFlBQVksS0FBSyxlQUFlLENBQUM7QUFFNUMsV0FBTztBQUFBLEVBQ1I7QUFNQSxXQUFTLFlBQVk7QUFDcEIsVUFBTSxVQUFVLE1BQU07QUFDckIsV0FBSyxlQUFlLEVBQUUsb0JBQW9CLFNBQVMsT0FBTztBQUMxRCxXQUFLLGVBQWUsRUFBRSxvQkFBb0IsUUFBUSxNQUFNO0FBRXhELFdBQUssbUJBQW1CLEVBQUUsV0FBVztBQUFBLFFBQ3BDLFFBQVE7QUFBQSxRQUNSLE9BQU8sR0FDTixLQUFLLGVBQWUsRUFBRSxLQUFLLFlBQVksZ0JBQWdCLENBQUMsQ0FDekQ7QUFBQSxNQUNELENBQUM7QUFFRDtBQUFBLElBQ0Q7QUFFQSxVQUFNLFNBQVMsTUFBTTtBQUNwQixXQUFLLGVBQWUsRUFBRSxvQkFBb0IsU0FBUyxPQUFPO0FBQzFELFdBQUssZUFBZSxFQUFFLG9CQUFvQixRQUFRLE1BQU07QUFDeEQsV0FBSyxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsUUFBUSxJQUFJO0FBQUEsSUFDcEQ7QUFFQSxTQUFLLGVBQWUsRUFBRSxpQkFBaUIsUUFBUSxRQUFRLEtBQUs7QUFDNUQsU0FBSyxlQUFlLEVBQUUsaUJBQWlCLFNBQVMsU0FBUyxLQUFLO0FBRTlELFdBQU87QUFBQSxFQUNSO0FBelBBLE1BbUNNQSxlQU1BLFdBTUEsYUFNQSxpQkFVQTtBQS9ETjtBQUFBO0FBY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUFDO0FBS0E7QUFRQSxNQUFNRCxnQkFBZTtBQU1yQixNQUFNLFlBQVk7QUFNbEIsTUFBTSxjQUFjO0FBTXBCLE1BQU0sa0JBQWtCLE9BQU8sV0FBVztBQVUxQyxNQUFNLFdBQU4sY0FBdUIsZ0JBQWdCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUt0QyxZQUFZRSxVQUFTO0FBQ3BCLGdCQUFNQSxRQUFPO0FBRWIsY0FBSSxNQUFNLEtBQUssVUFBVSxLQUFLLFlBQVksZ0JBQWdCLENBQUM7QUFFM0QsY0FBSSxRQUFRLFFBQVc7QUFDdEIsa0JBQU0sSUFBSSxNQUFNLGdCQUFnQjtBQUFBLFVBQ2pDLFdBQVcsZUFBZSxLQUFLO0FBQzlCLGtCQUFNLElBQUksU0FBUztBQUFBLFVBQ3BCLFdBQVcsQ0FBQyxTQUFTLEdBQUcsR0FBRztBQUMxQixrQkFBTSxJQUFJLE1BQU0sc0JBQXNCO0FBQUEsVUFDdkM7QUFFQSxlQUFLLGNBQWMsRUFBRSxLQUFLLFlBQVksZ0JBQWdCLENBQUMsSUFBSTtBQUMzRCxlQUFLLG1CQUFtQixJQUFJLElBQUksY0FBYztBQUFBLFlBQzdDLFFBQVE7QUFBQSxZQUNSLE9BQU87QUFBQSxVQUNSLENBQUM7QUFFRCxlQUFLLGVBQWUsSUFBSTtBQUFBLFFBQ3pCO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxjQUFjO0FBQ2IsY0FBSSxLQUFLLGVBQWUsYUFBYSxhQUFhO0FBQ2pELG1CQUFPLEtBQUssZUFBZSxFQUFFO0FBQUEsVUFDOUI7QUFFQSxpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBU0EsU0FBUztBQUNSLGdCQUFNLElBQUksTUFBTSxvREFBb0Q7QUFBQSxRQUNyRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFTQSxVQUFVO0FBQ1QsY0FBSSxFQUFFLEtBQUssZUFBZSxhQUFhLGNBQWM7QUFDcEQsaUJBQUssT0FBTztBQUFBLFVBQ2I7QUFFQSwyQkFBaUIsS0FBSyxJQUFJO0FBQzFCLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBV0EsSUFBSSxXQUFXO0FBQ2QsaUJBQU8sT0FBTyxDQUFDLEdBQUcsTUFBTSxVQUFVO0FBQUEsWUFDakMsQ0FBQyxLQUFLLFlBQVksZ0JBQWdCLENBQUMsR0FBRztBQUFBLFlBQ3RDLENBQUNGLGFBQVksR0FBRyxnQkFBZ0IsVUFBVTtBQUFBLFlBQzFDLENBQUMsU0FBUyxHQUFHO0FBQUEsWUFDYixDQUFDLFdBQVcsR0FBRztBQUFBLFlBQ2YsQ0FBQyxZQUFZLEdBQUcsSUFBSSxHQUFHLFVBQVUsRUFBRSxTQUFTO0FBQUEsWUFDNUMsQ0FBQyxlQUFlLEdBQUc7QUFBQSxZQUNuQixDQUFDLGVBQWUsR0FBRztBQUFBLFVBQ3BCLENBQUM7QUFBQSxRQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFRQSxZQUFZO0FBQ1gsZ0JBQU1HLFFBQU87QUFDYixjQUFJLEVBQUVBLE1BQUssZUFBZSxhQUFhLGNBQWM7QUFDcEQsbUJBQU8sUUFBUSxPQUFPLFlBQVk7QUFBQSxVQUNuQztBQUVBLGNBQUksQ0FBQ0EsTUFBSyxZQUFZLEdBQUc7QUFDeEIsbUJBQU8sUUFBUSxPQUFPLHVCQUF1QjtBQUFBLFVBQzlDO0FBRUEsY0FBSUEsTUFBSyxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsUUFBUSxNQUFNLE1BQU07QUFDOUQsZ0JBQUlBLE1BQUssbUJBQW1CLEVBQUUsV0FBVyxFQUFFLE9BQU8sTUFBTSxRQUFXO0FBQ2xFLHFCQUFPLFFBQVEsT0FBT0EsTUFBSyxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDO0FBQUEsWUFDdEU7QUFFQSxtQkFBTyxRQUFRLFFBQVE7QUFBQSxVQUN4QjtBQUVBLGlCQUFPLElBQUksUUFBUSxTQUFVLFNBQVMsUUFBUTtBQUM3QyxrQkFBTSxVQUFVLFdBQVcsTUFBTTtBQUNoQyxxQkFBTyxTQUFTO0FBQUEsWUFDakIsR0FBR0EsTUFBSyxVQUFVLFNBQVMsQ0FBQztBQUU1QixrQkFBTSxXQUFXLElBQUksU0FBUyxNQUFNO0FBQ25DLDJCQUFhLE9BQU87QUFDcEIsY0FBQUEsTUFBSyxtQkFBbUIsRUFBRSxlQUFlLFFBQVE7QUFDakQsc0JBQVE7QUFBQSxZQUNULENBQUM7QUFFRCxZQUFBQSxNQUFLLG1CQUFtQixFQUFFLGVBQWUsUUFBUTtBQUFBLFVBQ2xELENBQUM7QUFBQSxRQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxPQUFPLGtCQUFrQjtBQUN4QixnQkFBTSxJQUFJLE1BQU0sb0RBQW9EO0FBQUEsUUFDckU7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLFlBQVksY0FBYyxJQUFJO0FBQzdCLGlCQUFPLE9BQU8sSUFBSSwrQkFBK0I7QUFBQSxRQUNsRDtBQUFBLE1BQ0Q7QUFBQTtBQUFBOzs7QUNoR0EsV0FBUyxnQkFBZ0I7QUFDeEIsVUFBTUMsWUFBVyxLQUFLLFVBQVVDLGFBQVk7QUFDNUMsU0FBSyxlQUFlLElBQUlELFVBQVMsY0FBYyxVQUFVO0FBRXpELGVBQVcsT0FBTztBQUFBLE1BQ2pCO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRCxHQUFHO0FBQ0YsVUFBSSxLQUFLLFVBQVUsR0FBRyxNQUFNLFFBQVc7QUFDdEMsYUFBSyxlQUFlLEVBQUUsR0FBRyxJQUFJLEtBQUssVUFBVSxHQUFHO0FBQUEsTUFDaEQ7QUFBQSxJQUNEO0FBRUEsV0FBTztBQUFBLEVBQ1I7QUFPQSxXQUFTRSxvQkFBbUI7QUFDM0IsVUFBTSxhQUFhLFNBQVMsY0FBYyxLQUFLLFVBQVUsV0FBVyxNQUFNLENBQUM7QUFDM0UsUUFBSSxFQUFFLHNCQUFzQixjQUFjO0FBQ3pDLFlBQU0sSUFBSSxNQUFNLGtCQUFrQjtBQUFBLElBQ25DO0FBRUEsZUFBVyxZQUFZLEtBQUssZUFBZSxDQUFDO0FBRTVDLHNCQUFrQixPQUFPLEVBQUUsS0FBSyxVQUFVLGFBQWEsR0FBRztBQUFBLE1BQ3pELFFBQVE7QUFBQTtBQUFBLE1BQ1IsTUFBTSxLQUFLLFVBQVUsUUFBUSxNQUFNO0FBQUE7QUFBQSxNQUNuQyxPQUFPO0FBQUE7QUFBQSxNQUNQLGFBQWEsS0FBSyxVQUFVLGVBQWUsYUFBYTtBQUFBO0FBQUEsTUFDeEQsU0FBUztBQUFBLFFBQ1IsUUFBUSxLQUFLLFVBQVUsUUFBUSxrQkFBa0I7QUFBQSxNQUNsRDtBQUFBLE1BQ0EsVUFBVTtBQUFBO0FBQUEsTUFDVixnQkFBZ0I7QUFBQTtBQUFBLElBQ2pCLENBQUMsRUFDQyxLQUFLLENBQUMsYUFBYTtBQUNuQixhQUFPLFNBQVMsS0FBSztBQUFBLElBQ3RCLENBQUMsRUFDQSxLQUFLLENBQUMsU0FBUztBQUNmLFlBQU0sV0FBVyxTQUFTLGVBQWUsSUFBSTtBQUM3QyxXQUFLLGVBQWUsRUFBRSxZQUFZLFFBQVE7QUFFMUMsV0FBSyxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsUUFBUSxJQUFJO0FBQUEsSUFDcEQsQ0FBQyxFQUNBLE1BQU0sQ0FBQyxNQUFNO0FBQ2IsV0FBSyxtQkFBbUIsRUFBRSxXQUFXO0FBQUEsUUFDcEMsUUFBUTtBQUFBLFFBQ1IsT0FBTyxFQUFFLFNBQVM7QUFBQSxNQUNuQixDQUFDO0FBRUQsaUJBQVcsYUFBYSx3QkFBd0IsRUFBRSxTQUFTLENBQUM7QUFBQSxJQUM3RCxDQUFDO0FBRUYsV0FBTztBQUFBLEVBQ1I7QUF0S0EsTUE2Q007QUE3Q047QUFBQTtBQWNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBQUM7QUFTQTtBQU1BO0FBWUEsTUFBTSxPQUFOLGNBQW1CLFNBQVM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNM0IsSUFBSSxXQUFXO0FBQ2QsaUJBQU8sT0FBTyxDQUFDLEdBQUcsTUFBTSxVQUFVO0FBQUEsWUFDakMsTUFBTTtBQUFBLFlBQ04sYUFBYTtBQUFBLFlBQ2IsTUFBTTtBQUFBLFVBQ1AsQ0FBQztBQUFBLFFBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsU0FBUztBQUNSLHdCQUFjLEtBQUssSUFBSTtBQUN2QixpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVFBLFVBQVU7QUFDVCxnQkFBTUMsUUFBTztBQUNiLGNBQUksRUFBRSxLQUFLLGVBQWUsYUFBYSxjQUFjO0FBQ3BELGlCQUFLLE9BQU87QUFBQSxVQUNiO0FBRUEsVUFBQUYsa0JBQWlCLEtBQUssSUFBSTtBQUMxQixpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxZQUFZLGNBQWMsSUFBSTtBQUM3QixpQkFBTyxPQUFPLElBQUksb0NBQW9DO0FBQUEsUUFDdkQ7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLE9BQU8sa0JBQWtCO0FBQ3hCLGlCQUFPO0FBQUEsUUFDUjtBQUFBLE1BQ0Q7QUFBQTtBQUFBOzs7QUNPQSxXQUFTRyxpQkFBZ0I7QUFDeEIsVUFBTUMsWUFBVyxLQUFLLFVBQVVDLGFBQVk7QUFDNUMsU0FBSyxlQUFlLElBQUlELFVBQVMsY0FBYyxRQUFRO0FBRXZELGVBQVcsT0FBTztBQUFBLE1BQ2pCO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRCxHQUFHO0FBQ0YsVUFBSSxLQUFLLFVBQVUsR0FBRyxNQUFNLFFBQVc7QUFDdEMsYUFBSyxlQUFlLEVBQUUsR0FBRyxJQUFJLEtBQUssVUFBVSxHQUFHO0FBQUEsTUFDaEQ7QUFBQSxJQUNEO0FBRUEsV0FBTztBQUFBLEVBQ1I7QUF6SUEsTUFzQ007QUF0Q047QUFBQTtBQWNBO0FBQ0EsTUFBQUU7QUFVQTtBQUNBO0FBWUEsTUFBTSxPQUFOLGNBQW1CLFNBQVM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFrQjNCLElBQUksV0FBVztBQUNkLGlCQUFPLE9BQU8sQ0FBQyxHQUFHLE1BQU0sVUFBVTtBQUFBLFlBQ2pDLElBQUk7QUFBQSxZQUNKLGFBQWE7QUFBQSxZQUNiLFVBQVU7QUFBQSxZQUNWLE1BQU07QUFBQSxZQUNOLFVBQVU7QUFBQSxZQUNWLFlBQVk7QUFBQSxZQUNaLGFBQWE7QUFBQSxZQUNiLFdBQVc7QUFBQSxZQUNYLE9BQU87QUFBQSxZQUNQLFVBQVU7QUFBQSxZQUNWLGdCQUFnQjtBQUFBLFlBQ2hCLEtBQUs7QUFBQSxZQUNMLE9BQU87QUFBQSxZQUNQLE1BQU07QUFBQSxZQUNOLE9BQU87QUFBQSxVQUNSLENBQUM7QUFBQSxRQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBT0EsWUFBWSxjQUFjLElBQUk7QUFDN0IsaUJBQU8sT0FBTyxJQUFJLG9DQUFvQztBQUFBLFFBQ3ZEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLFNBQVM7QUFDUixVQUFBSCxlQUFjLEtBQUssSUFBSTtBQUN2QixpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLE9BQU8sa0JBQWtCO0FBQ3hCLGlCQUFPO0FBQUEsUUFDUjtBQUFBLE1BQ0Q7QUFBQTtBQUFBOzs7QUNwR0EsTUE0Qk07QUE1Qk47QUFBQTtBQWNBO0FBQ0E7QUFDQTtBQVlBLE1BQU0sYUFBTixjQUF5QixLQUFLO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFJN0IsSUFBSSxXQUFXO0FBQ2QsaUJBQU8sT0FBTyxDQUFDLEdBQUcsTUFBTSxVQUFVO0FBQUEsWUFDakMsS0FBSztBQUFBLFVBQ04sQ0FBQztBQUFBLFFBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxZQUFZLGNBQWMsSUFBSTtBQUM3QixpQkFBTyxPQUFPLElBQUksK0NBQStDO0FBQUEsUUFDbEU7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDNENBLFdBQVNJLGlCQUFnQjtBQUN4QixVQUFNQyxZQUFXLEtBQUssVUFBVUMsYUFBWTtBQUM1QyxTQUFLLGVBQWUsSUFBSUQsVUFBUyxjQUFjLFVBQVU7QUFFekQsZUFBVyxPQUFPO0FBQUEsTUFDakI7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0QsR0FBRztBQUNGLFVBQUksS0FBSyxVQUFVLEdBQUcsTUFBTSxRQUFXO0FBQ3RDLGFBQUssZUFBZSxFQUFFLEdBQUcsSUFBSSxLQUFLLFVBQVUsR0FBRztBQUFBLE1BQ2hEO0FBQUEsSUFDRDtBQUVBLFdBQU87QUFBQSxFQUNSO0FBbEhBLE1Bb0NNO0FBcENOO0FBQUE7QUFjQTtBQUNBLE1BQUFFO0FBU0E7QUFDQTtBQVdBLE1BQU0sU0FBTixjQUFxQixTQUFTO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVc3QixJQUFJLFdBQVc7QUFDZCxpQkFBTyxPQUFPLENBQUMsR0FBRyxNQUFNLFVBQVU7QUFBQSxZQUNqQyxPQUFPO0FBQUEsWUFDUCxhQUFhO0FBQUEsWUFDYixPQUFPO0FBQUEsWUFDUCxXQUFXO0FBQUEsWUFDWCxVQUFVO0FBQUEsWUFDVixPQUFPO0FBQUEsWUFDUCxnQkFBZ0I7QUFBQSxZQUNoQixNQUFNO0FBQUEsVUFDUCxDQUFDO0FBQUEsUUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU9BLFlBQVksY0FBYyxJQUFJO0FBQzdCLGlCQUFPLE9BQU8sSUFBSSxzQ0FBc0M7QUFBQSxRQUN6RDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxTQUFTO0FBQ1IsVUFBQUgsZUFBYyxLQUFLLElBQUk7QUFDdkIsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxPQUFPLGtCQUFrQjtBQUN4QixpQkFBTztBQUFBLFFBQ1I7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDMEVBLFdBQVMsa0JBQWtCLFFBQVE7QUFDbEMsVUFBTSxTQUFTLENBQUM7QUFFaEIsZUFBV0ksU0FBUSxDQUFDLFdBQVcsZUFBZSxNQUFNLEdBQUc7QUFDdEQsWUFBTSxZQUFZLEtBQUssVUFBVSxhQUFhQSxLQUFJLEVBQUU7QUFDcEQsVUFBSSxDQUFDLFFBQVEsU0FBUyxHQUFHO0FBQ3hCO0FBQUEsTUFDRDtBQUVBLGlCQUFXLFlBQVksV0FBVztBQUNqQyxZQUFJLEVBQUUsb0JBQW9CLFdBQVc7QUFDcEMsZ0JBQU0sSUFBSSxNQUFNLGlDQUFpQztBQUFBLFFBQ2xEO0FBRUEsZUFBTyxLQUFLLFNBQVMsTUFBTSxFQUFFLENBQUM7QUFBQSxNQUMvQjtBQUFBLElBQ0Q7QUFFQSxXQUFPO0FBQUEsRUFDUjtBQVVBLFdBQVMsWUFBWUEsT0FBTSxLQUFLQyxVQUFTO0FBQ3hDLFFBQUksZUFBZSxLQUFLO0FBQ3ZCLFlBQU0sSUFBSSxTQUFTO0FBQUEsSUFDcEI7QUFFQSxJQUFBQSxXQUFVQSxZQUFXLENBQUM7QUFFdEIsUUFBSTtBQUNKLFlBQVFELE9BQU07QUFBQSxNQUNiLEtBQUs7QUFDSixtQkFBVyxJQUFJLE9BQU8sT0FBTyxDQUFDLEdBQUdDLFVBQVMsRUFBRSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNuRTtBQUFBLE1BQ0QsS0FBSztBQUNKLG1CQUFXLElBQUksV0FBVyxPQUFPLENBQUMsR0FBR0EsVUFBUyxFQUFFLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ3hFO0FBQUEsTUFDRCxLQUFLO0FBQ0osbUJBQVcsSUFBSSxLQUFLLE9BQU8sQ0FBQyxHQUFHQSxVQUFTLEVBQUUsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDakU7QUFBQSxNQUNEO0FBQ0MsY0FBTSxJQUFJLE1BQU0sb0JBQW9CRCxLQUFJLEVBQUU7QUFBQSxJQUM1QztBQUVBLFNBQUssVUFBVSxXQUFXLElBQUlBLEtBQUksRUFBRSxLQUFLLFFBQVE7QUFDakQsV0FBTztBQUFBLEVBQ1I7QUFuTkEsTUFtQ007QUFuQ047QUFBQTtBQWNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFBRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBWUEsTUFBTSxrQkFBTixjQUE4QixLQUFLO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTWxDLFlBQVlELFVBQVM7QUFDcEIsZ0JBQU1BLFFBQU87QUFDYiw0QkFBa0IsS0FBSyxJQUFJO0FBRTNCLGNBQUksRUFBRSxLQUFLLFVBQVUsVUFBVSxhQUFhLFdBQVc7QUFDdEQsa0JBQU0sSUFBSSxNQUFNLDJCQUEyQjtBQUFBLFVBQzVDO0FBQUEsUUFDRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxVQUFVLEtBQUs7QUFDZCxpQkFBTyxLQUFLLFlBQVksR0FBRztBQUFBLFFBQzVCO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxhQUFhO0FBQ1osZUFBSyxVQUFVLFVBQVUsR0FBRztBQUFBLFFBQzdCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLElBQUksV0FBVztBQUNkLGlCQUFPLEtBQUs7QUFBQSxRQUNiO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBVUEsSUFBSSxtQkFBbUI7QUFDdEIsaUJBQU8sT0FBTztBQUFBLFlBQ2IsQ0FBQztBQUFBLFlBQ0Q7QUFBQSxjQUNDLFVBQVUsZ0JBQWdCLFVBQVU7QUFBQSxjQUNwQyxXQUFXO0FBQUEsZ0JBQ1YsU0FBUyxDQUFDO0FBQUEsZ0JBQ1YsYUFBYSxDQUFDO0FBQUEsZ0JBQ2QsTUFBTSxDQUFDO0FBQUEsY0FDUjtBQUFBLFlBQ0Q7QUFBQSxVQUNEO0FBQUEsUUFDRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBUUEsVUFBVTtBQUNULDRCQUFrQixLQUFLLE1BQU0sU0FBUztBQUN0QyxpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVFBLFlBQVk7QUFDWCxpQkFBTyxRQUFRLElBQUksa0JBQWtCLEtBQUssTUFBTSxXQUFXLENBQUM7QUFBQSxRQUM3RDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVVBLFVBQVUsS0FBS0EsVUFBUztBQUN2QixpQkFBTyxZQUFZLEtBQUssTUFBTSxXQUFXLEtBQUtBLFFBQU87QUFBQSxRQUN0RDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVVBLGNBQWMsS0FBS0EsVUFBUztBQUMzQixpQkFBTyxZQUFZLEtBQUssTUFBTSxlQUFlLEtBQUtBLFFBQU87QUFBQSxRQUMxRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVVBLFFBQVEsS0FBS0EsVUFBUztBQUNyQixpQkFBTyxZQUFZLEtBQUssTUFBTSxRQUFRLEtBQUtBLFFBQU87QUFBQSxRQUNuRDtBQUFBLE1BQ0Q7QUFBQTtBQUFBOzs7QUN2SkEsTUFxQk07QUFyQk47QUFBQTtBQVlBO0FBQ0EsTUFBQUU7QUFRQSxNQUFNLDBCQUEwQixJQUFJLGNBQWM7QUFFbEQsVUFBSTtBQUNILGdDQUF3QjtBQUFBLFVBQ3ZCO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFJQTtBQUFBLFFBQ0Q7QUFBQSxNQUNELFNBQVMsR0FBRztBQUNYO0FBQUEsVUFDQyxTQUFTLFlBQVksRUFBRSxjQUFjLE1BQU07QUFBQSxVQUMzQztBQUFBLFVBQ0EsSUFBSTtBQUFBLFFBQ0w7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDeUlBLFdBQVMsZUFBZTtBQUN2QixVQUFNQyxVQUFTQyxXQUFVO0FBRXpCLFVBQU0sT0FBTyxLQUFLLFVBQVUsY0FBYztBQUMxQyxVQUFNQyxXQUFVLEtBQUssVUFBVSxpQkFBaUI7QUFDaEQsVUFBTSxjQUFjLEtBQUssVUFBVSwwQkFBMEI7QUFDN0QsVUFBTSxVQUFVLEtBQUssVUFBVSw2QkFBNkI7QUFFNUQsUUFBSSxDQUFDLFFBQVEsQ0FBQ0EsVUFBUztBQUN0QixZQUFNLElBQUksTUFBTSw0Q0FBNEM7QUFBQSxJQUM3RDtBQUVBLFVBQU0sVUFBVUYsUUFBTyxVQUFVLEtBQUssTUFBTUUsUUFBTztBQUVuRCxXQUFPLElBQUksUUFBUSxDQUFDLFNBQVMsV0FBVztBQUN2QyxjQUFRLFVBQVUsQ0FBQyxVQUFVO0FBQzVCLGdCQUFRLE1BQU0sMEJBQTBCLEtBQUs7QUFDN0MsZUFBTyxRQUFRLEtBQUs7QUFBQSxNQUNyQjtBQUVBLGNBQVEsWUFBWSxDQUFDLFVBQVU7QUFDOUIsYUFBSyxxQkFBcUIsSUFBSSxPQUFPLFFBQVE7QUFDN0MsZ0JBQVEsUUFBUSxNQUFNO0FBQUEsTUFDdkI7QUFFQSxjQUFRLGtCQUFrQixDQUFDLFVBQVU7QUFDcEMsY0FBTSxLQUFLLE1BQU0sT0FBTztBQUV4QixZQUFJO0FBQ0osWUFBSSxDQUFDLEdBQUcsaUJBQWlCLFNBQVMsV0FBVyxHQUFHO0FBQy9DLHdCQUFjLEdBQUcsa0JBQWtCLGFBQWEsRUFBRSxTQUFTLFFBQVEsQ0FBQztBQUFBLFFBQ3JFO0FBRUEsb0JBQVksWUFBWSxhQUFhLENBQUNDLFdBQVU7QUFDL0Msa0JBQVEsSUFBSSwyQkFBMkI7QUFDdkMsa0JBQVE7QUFBQSxRQUNUO0FBQUEsTUFDRDtBQUFBLElBQ0QsQ0FBQztBQUFBLEVBQ0Y7QUFLQSxXQUFTLGVBQWUsTUFBTTtBQUM3QixVQUFNLGNBQWMsS0FBSyxVQUFVLDBCQUEwQjtBQUU3RCxRQUFJLENBQUMsS0FBSyxxQkFBcUIsR0FBRztBQUNqQyxZQUFNLElBQUksTUFBTSwyQkFBMkI7QUFBQSxJQUM1QztBQUlBLFVBQU0sS0FBSyxLQUFLLHFCQUFxQixFQUFFLFlBQVksYUFBYSxJQUFJO0FBQ3BFLFdBQU8sR0FBRyxZQUFZLFdBQVc7QUFBQSxFQUNsQztBQXFCQSxXQUFTLFFBQVEsS0FBSztBQUNyQixVQUFNLFFBQVEsZUFBZSxLQUFLLE1BQU0sYUFBYTtBQUVyRCxVQUFNLE1BQU0sTUFBTSxJQUFJLEdBQUc7QUFFekIsV0FBTyxJQUFJLFFBQVEsQ0FBQyxTQUFTLFdBQVc7QUFDdkMsVUFBSSxZQUFZLFNBQVUsS0FBSztBQUM5QixjQUFNLFFBQVEsSUFBSSxPQUFPO0FBQ3pCLFlBQUksT0FBTztBQUNWLGtCQUFRLE1BQU0sSUFBSTtBQUNsQjtBQUFBLFFBQ0Q7QUFDQSxlQUFPLElBQUksTUFBTSwyQkFBMkIsTUFBTSxtQkFBbUIsQ0FBQztBQUFBLE1BQ3ZFO0FBQUEsSUFDRCxDQUFDO0FBQUEsRUFDRjtBQUVBLFdBQVMsV0FBVyxLQUFLO0FBQ3hCLFVBQU0sUUFBUSxlQUFlLEtBQUssTUFBTSxlQUFlO0FBRXZELFVBQU0sTUFBTSxNQUFNLE9BQU8sR0FBRztBQUU1QixXQUFPLElBQUksUUFBUSxDQUFDLFNBQVMsV0FBVztBQUN2QyxVQUFJLFlBQVksU0FBVSxLQUFLO0FBQzlCLGdCQUFRO0FBQUEsTUFDVDtBQUVBLFVBQUksVUFBVSxTQUFVLEtBQUs7QUFDNUIsZ0JBQVEsTUFBTSxlQUFlLElBQUksT0FBTyxTQUFTO0FBQ2pELGVBQU8sSUFBSSxPQUFPLFNBQVM7QUFBQSxNQUM1QjtBQUFBLElBQ0QsQ0FBQztBQUFBLEVBQ0Y7QUFFQSxXQUFTLFFBQVEsS0FBSyxNQUFNO0FBQzNCLFVBQU0sUUFBUSxlQUFlLEtBQUssTUFBTSxlQUFlO0FBRXZELFVBQU0sVUFBVSxLQUFLLFVBQVUsNkJBQTZCO0FBQzVELFVBQU0sTUFBTSxDQUFDO0FBQ2IsUUFBSSxPQUFPLElBQUk7QUFDZixRQUFJLE9BQU87QUFDWCxVQUFNLE1BQU0sTUFBTSxJQUFJLEdBQUc7QUFFekIsV0FBTyxJQUFJLFFBQVEsQ0FBQyxTQUFTLFdBQVc7QUFDdkMsVUFBSSxZQUFZLFNBQVUsS0FBSztBQUM5QixnQkFBUTtBQUFBLE1BQ1Q7QUFFQSxVQUFJLFVBQVUsU0FBVSxLQUFLO0FBQzVCLGdCQUFRLE1BQU0sWUFBWSxJQUFJLE9BQU8sU0FBUztBQUM5QyxlQUFPLElBQUksT0FBTyxTQUFTO0FBQUEsTUFDNUI7QUFBQSxJQUNELENBQUM7QUFBQSxFQUNGO0FBRUEsV0FBU0MsZ0JBQWM7QUFFdEIsV0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSVI7QUF2VEEsTUE2Qk0sdUJBTUEsMEJBTUEsZUFNQSxpQkFRQTtBQXZETixNQUFBQyx1QkFBQTtBQUFBO0FBY0E7QUFLQTtBQUNBO0FBQ0E7QUFRQSxNQUFNLHdCQUF3QixPQUFPLGlCQUFpQjtBQU10RCxNQUFNLDJCQUEyQixPQUFPLDBCQUEwQjtBQU1sRSxNQUFNLGdCQUFnQjtBQU10QixNQUFNLGtCQUFrQjtBQVF4QixNQUFNLGdCQUFOLGNBQTRCLGNBQWM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS3pDLFlBQVksY0FBYyxJQUFJO0FBQzdCLGlCQUFPLE9BQU8sSUFBSSxrREFBa0Q7QUFBQSxRQUNyRTtBQUFBLFFBRUEsY0FBYztBQUNiLGdCQUFNO0FBTU4sZUFBSyx3QkFBd0IsSUFBSSxDQUFDO0FBQ2xDLGVBQUsscUJBQXFCLElBQUk7QUFDOUIsZUFBSyx3QkFBd0IsRUFBRSxLQUFLLGFBQWEsS0FBSyxJQUFJLENBQUM7QUFBQSxRQUM1RDtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0EsUUFBUTtBQUNQLGlCQUFPLFFBQVEsSUFBSSxLQUFLLHdCQUF3QixDQUFDO0FBQUEsUUFDbEQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVdBLElBQUksV0FBVztBQUNkLGlCQUFPLE9BQU8sT0FBTyxDQUFDLEdBQUcsTUFBTSxVQUFVO0FBQUEsWUFDeEMsV0FBVztBQUFBLGNBQ1YsTUFBTUQsY0FBWTtBQUFBLFlBQ25CO0FBQUEsWUFDQSxTQUFTO0FBQUEsY0FDUixNQUFNO0FBQUEsY0FDTixTQUFTO0FBQUEsY0FDVCxhQUFhO0FBQUEsZ0JBQ1osTUFBTTtBQUFBLGdCQUNOLFNBQVM7QUFBQSxjQUNWO0FBQUEsWUFDRDtBQUFBLFVBQ0QsQ0FBQztBQUFBLFFBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsVUFBVSxLQUFLO0FBQ2QsaUJBQU8sS0FBSyxNQUFNLEVBQUUsS0FBSyxNQUFNO0FBQzlCLG1CQUFPLFFBQVEsS0FBSyxNQUFNLEdBQUc7QUFBQSxVQUM5QixDQUFDO0FBQUEsUUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxVQUFVLEtBQUs7QUFDZCxpQkFBTyxLQUFLLE1BQU0sRUFDaEIsS0FBSyxNQUFNO0FBQ1gsbUJBQU8sUUFBUSxLQUFLLE1BQU0sR0FBRztBQUFBLFVBQzlCLENBQUMsRUFDQSxLQUFLLE1BQU07QUFDWCxtQkFBTztBQUFBLFVBQ1IsQ0FBQyxFQUNBLE1BQU0sTUFBTTtBQUNaLG1CQUFPO0FBQUEsVUFDUixDQUFDO0FBQUEsUUFDSDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU9BLFVBQVUsS0FBSyxPQUFPO0FBQ3JCLGlCQUFPLEtBQUssTUFBTSxFQUFFLEtBQUssTUFBTTtBQUM5QixtQkFBTyxRQUFRLEtBQUssTUFBTSxLQUFLLEtBQUs7QUFBQSxVQUNyQyxDQUFDO0FBQUEsUUFDRjtBQUFBLFFBRUEsYUFBYSxLQUFLO0FBQ2pCLGlCQUFPLEtBQUssTUFBTSxFQUFFLEtBQUssTUFBTTtBQUM5QixtQkFBTyxXQUFXLEtBQUssTUFBTSxHQUFHO0FBQUEsVUFDakMsQ0FBQztBQUFBLFFBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsT0FBTyxTQUFTO0FBQ2YsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxPQUFPLG1CQUFtQjtBQUN6QixpQkFBTyxDQUFDLHVCQUF1QjtBQUFBLFFBQ2hDO0FBQUE7QUFBQTtBQUFBLFFBSUEsQ0FBQyxvQkFBb0IsSUFBSTtBQUN4QixnQkFBTSxvQkFBb0IsRUFBRTtBQUFBLFFBQzdCO0FBQUEsTUFDRDtBQTZJQSw0QkFBc0IsYUFBYTtBQUFBO0FBQUE7OztBQ3pUbkM7QUFBQTtBQUFBO0FBQUE7QUF3WUEsV0FBU0UsMEJBQXdCO0FBQ2hDLFFBQUksQ0FBQyxLQUFLLFlBQVk7QUFDckIsWUFBTSxJQUFJLE1BQU0sMkJBQTJCO0FBQUEsSUFDNUM7QUFFQSxTQUFLLG9CQUFvQixJQUFJLEtBQUssY0FBYyxpQkFBaUI7QUFDakUsU0FBSyxtQkFBbUIsSUFBSSxLQUFLLGNBQWMsZ0JBQWdCO0FBQy9ELFNBQUssMEJBQTBCLElBQUksS0FBSztBQUFBLE1BQ3ZDO0FBQUEsSUFDRDtBQUFBLEVBQ0Q7QUFFQSxXQUFTLG1CQUFtQjtBQUMzQixRQUFJLFdBQVcsS0FBSyxjQUFjLENBQUMsTUFBTSxPQUFPO0FBQy9DLFdBQUssY0FBYyxJQUFJLENBQUM7QUFBQSxJQUN6QjtBQUVBLFNBQUssY0FBYyxFQUFFLEtBQUssTUFBTSw0QkFBNEIsQ0FBQztBQUFBLEVBQzlEO0FBS0EsV0FBU0MscUJBQW1CO0FBQzNCLFdBQU87QUFBQSxFQUNSO0FBTUEsV0FBU0MsZ0JBQWM7QUFFdEIsV0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVNSO0FBbGJBLE1Bc0NNLGdCQU1BLHFCQU1BLHNCQU1BLDRCQU1BLG9CQU1BLHVCQTJDQTtBQS9HTixNQUFBQyxhQUFBO0FBQUE7QUFjQTtBQUtBLE1BQUFDO0FBQ0E7QUFDQSxNQUFBQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBQUM7QUFDQTtBQVFBLE1BQU0saUJBQWlCLE9BQU8sZ0JBQWdCO0FBTTlDLE1BQU0sc0JBQXNCLE9BQU8sZUFBZTtBQU1sRCxNQUFNLHVCQUF1QixPQUFPLGdCQUFnQjtBQU1wRCxNQUFNLDZCQUE2QixPQUFPLHNCQUFzQjtBQU1oRSxNQUFNLHFCQUFxQixPQUFPLGNBQWM7QUFNaEQsTUFBTSx3QkFBd0IsT0FBTyxpQkFBaUI7QUEyQ3RELE1BQU0sT0FBTixjQUFtQixjQUFjO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtoQyxZQUFZLGNBQWMsSUFBSTtBQUM3QixpQkFBTyxPQUFPLElBQUksd0NBQXdDO0FBQUEsUUFDM0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBWUEsSUFBSSxXQUFXO0FBQ2QsaUJBQU8sT0FBTyxPQUFPLENBQUMsR0FBRyxNQUFNLFVBQVU7QUFBQSxZQUN4QyxXQUFXO0FBQUEsY0FDVixNQUFNSixjQUFZO0FBQUEsWUFDbkI7QUFBQSxVQUNELENBQUM7QUFBQSxRQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLFVBQVUsS0FBSztBQUNkLGNBQUksS0FBSywwQkFBMEIsYUFBYSxnQkFBZ0IsT0FBTztBQUN0RSxrQkFBTSxJQUFJLE1BQU0sb0NBQW9DO0FBQUEsVUFDckQ7QUFDQSxpQkFBTyxLQUFLLDBCQUEwQixFQUFFLFVBQVUsR0FBRztBQUFBLFFBQ3REO0FBQUEsUUFFQSxVQUFVLEtBQUs7QUFDZCxjQUFJLEtBQUssMEJBQTBCLGFBQWEsZ0JBQWdCLE9BQU87QUFDdEUsa0JBQU0sSUFBSSxNQUFNLG9DQUFvQztBQUFBLFVBQ3JEO0FBQ0EsaUJBQU8sS0FBSywwQkFBMEIsRUFBRSxVQUFVLEdBQUc7QUFBQSxRQUN0RDtBQUFBLFFBRUEsYUFBYSxLQUFLO0FBQ2pCLGNBQUksS0FBSywwQkFBMEIsYUFBYSxnQkFBZ0IsT0FBTztBQUN0RSxrQkFBTSxJQUFJLE1BQU0sb0NBQW9DO0FBQUEsVUFDckQ7QUFDQSxpQkFBTyxLQUFLLDBCQUEwQixFQUFFLGFBQWEsR0FBRztBQUFBLFFBQ3pEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFRQSxVQUFVLEtBQUssT0FBTztBQUNyQixjQUFJLEtBQUssMEJBQTBCLGFBQWEsZ0JBQWdCLE9BQU87QUFDdEUsa0JBQU0sSUFBSSxNQUFNLG9DQUFvQztBQUFBLFVBQ3JEO0FBRUEsaUJBQU8sS0FBSywwQkFBMEIsRUFBRSxVQUFVLEtBQUssS0FBSztBQUFBLFFBQzdEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLG9CQUFvQjtBQUNuQixnQkFBTSxrQkFBa0I7QUFNeEIsbUJBQVMsZ0JBQWdCLE1BQU0sWUFBWTtBQUUzQyxnQkFBTSxhQUFhLEtBQUssVUFBVSxjQUFjO0FBRWhELGNBQUksU0FBUyxLQUFLLFVBQVUsU0FBUyxVQUFVLEdBQUc7QUFDakQscUJBQVMsS0FBSyxVQUFVLE9BQU8sVUFBVTtBQUFBLFVBQzFDO0FBRUEsMEJBQWdCLE1BQU0sd0JBQXdCO0FBQUEsUUFDL0M7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsdUJBQXVCO0FBQ3RCLGdCQUFNLHFCQUFxQjtBQUMzQixtQkFBUyxnQkFBZ0IsTUFBTSxZQUFZO0FBRTNDLGdCQUFNLGFBQWEsS0FBSyxVQUFVLGNBQWM7QUFDaEQsY0FBSSxDQUFDLFNBQVMsS0FBSyxVQUFVLFNBQVMsVUFBVSxHQUFHO0FBQ2xELHFCQUFTLEtBQUssVUFBVSxJQUFJLFVBQVU7QUFBQSxVQUN2QztBQUVBLGNBQUksV0FBVyxLQUFLLGNBQWMsQ0FBQyxNQUFNLE9BQU87QUFDL0MsaUJBQUssY0FBYyxJQUFJLENBQUM7QUFBQSxVQUN6QjtBQUVBLGVBQUssY0FBYyxFQUFFO0FBQUEsWUFDcEIsSUFBSSxRQUFRLENBQUMsU0FBUyxXQUFXO0FBQ2hDLG1CQUFLO0FBQUEsZ0JBQ0o7QUFBQSxnQkFDQSxNQUFNO0FBQ0wsMEJBQVE7QUFBQSxnQkFDVDtBQUFBLGdCQUNBLEVBQUUsTUFBTSxLQUFLO0FBQUEsY0FDZDtBQUFBLFlBQ0QsQ0FBQztBQUFBLFVBQ0Y7QUFFQSwwQkFBZ0IsTUFBTSwyQkFBMkI7QUFBQSxRQUNsRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxDQUFDLG9CQUFvQixJQUFJO0FBQ3hCLGVBQUssY0FBYyxJQUFJLENBQUM7QUFDeEIsZUFBSyxjQUFjLEVBQUUsS0FBSyxXQUFXO0FBRXJDLGdCQUFNLG9CQUFvQixFQUFFO0FBRTVCLFVBQUFGLHdCQUFzQixLQUFLLElBQUk7QUFDL0IsVUFBQUMsbUJBQWlCLEtBQUssSUFBSTtBQUMxQiwyQkFBaUIsS0FBSyxJQUFJO0FBRTFCLGVBQUssa0JBQWtCLElBQUksSUFBSSxhQUFhLElBQUk7QUFDaEQsZUFBSyxxQkFBcUIsSUFBSSxJQUFJLGdCQUFnQixJQUFJO0FBRXRELGNBQUk7QUFDSCxpQkFBSyxjQUFjLEVBQUUsS0FBSyxLQUFLLHFCQUFxQixFQUFFLFVBQVUsQ0FBQztBQUFBLFVBQ2xFLFNBQVMsR0FBRztBQUNYLG1CQUFPLFFBQVEsT0FBTyxDQUFDO0FBQUEsVUFDeEI7QUFFQSxjQUFJLEtBQUssZ0JBQWdCLE9BQU87QUFDL0IsaUJBQUssY0FBYyxFQUFFO0FBQUEsY0FDcEIsSUFBSSxRQUFRLENBQUMsU0FBUyxXQUFXO0FBQ2hDLHFCQUFLO0FBQUEsa0JBQ0o7QUFBQSxrQkFDQSxNQUFNO0FBQ0wsNEJBQVE7QUFBQSxrQkFDVDtBQUFBLGtCQUNBLEVBQUUsTUFBTSxLQUFLO0FBQUEsZ0JBQ2Q7QUFBQSxjQUNELENBQUM7QUFBQSxZQUNGO0FBQUEsVUFDRDtBQUFBLFFBQ0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVFBLFVBQVU7QUFDVCxjQUFJLFdBQVcsS0FBSyxjQUFjLENBQUMsTUFBTSxPQUFPO0FBQy9DLGlCQUFLLGNBQWMsSUFBSSxDQUFDO0FBQUEsVUFDekI7QUFFQSxpQkFBTyxRQUFRLElBQUksS0FBSyxjQUFjLENBQUMsRUFBRSxLQUFLLE1BQU07QUFDbkQsaUJBQUssY0FBYyxJQUFJLENBQUM7QUFDeEIsbUJBQU87QUFBQSxVQUNSLENBQUM7QUFBQSxRQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLElBQUksZUFBZTtBQUNsQixpQkFBTyxLQUFLLGtCQUFrQjtBQUFBLFFBQy9CO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLElBQUksa0JBQWtCO0FBQ3JCLGlCQUFPLEtBQUsscUJBQXFCO0FBQUEsUUFDbEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPQSxnQkFBZ0I7QUFDZixjQUFJLEtBQUssb0JBQW9CLGFBQWEsZ0JBQWdCLE9BQU87QUFDaEUsa0JBQU0sSUFBSSxNQUFNLHNDQUFzQztBQUFBLFVBQ3ZEO0FBRUEsZUFBSyxvQkFBb0IsRUFBRSxPQUFPO0FBQ2xDLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxjQUFjO0FBQ2IsY0FBSSxLQUFLLG9CQUFvQixhQUFhLGdCQUFnQixPQUFPO0FBQ2hFLGtCQUFNLElBQUksTUFBTSxzQ0FBc0M7QUFBQSxVQUN2RDtBQUVBLGVBQUssb0JBQW9CLEVBQUUsS0FBSztBQUNoQyxpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsZUFBZTtBQUNkLGNBQUksS0FBSyxvQkFBb0IsYUFBYSxnQkFBZ0IsT0FBTztBQUNoRSxrQkFBTSxJQUFJLE1BQU0sc0NBQXNDO0FBQUEsVUFDdkQ7QUFFQSxlQUFLLG9CQUFvQixFQUFFLE1BQU07QUFDakMsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLE9BQU8sU0FBUztBQUNmLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0EsT0FBTyxtQkFBbUI7QUFDekIsaUJBQU8sQ0FBQyxjQUFjO0FBQUEsUUFDdkI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsSUFBSSxTQUFTO0FBQ1osaUJBQU8sb0JBQW9CO0FBQUEsUUFDNUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsSUFBSSxlQUFlO0FBQ2xCLGlCQUFPLHdCQUF3QjtBQUFBLFFBQ2hDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLGlCQUFpQixTQUFTO0FBQ3pCLGNBQUksS0FBSyxtQkFBbUIsYUFBYSxnQkFBZ0IsT0FBTztBQUMvRCxrQkFBTSxJQUFJLE1BQU0scUNBQXFDO0FBQUEsVUFDdEQ7QUFFQSxlQUFLLG1CQUFtQixFQUFFLEtBQUssT0FBTztBQUN0QyxpQkFBTztBQUFBLFFBQ1I7QUFBQSxNQUNEO0FBbURBLDRCQUFzQixJQUFJO0FBQUE7QUFBQTs7O0FDcGIxQixNQXFCTTtBQXJCTjtBQUFBO0FBWUE7QUFDQSxNQUFBTTtBQVFBLE1BQU0sb0JBQW9CLElBQUksY0FBYztBQUU1QyxVQUFJO0FBQ0gsMEJBQWtCO0FBQUEsVUFDakI7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUlBO0FBQUEsUUFDRDtBQUFBLE1BQ0QsU0FBUyxHQUFHO0FBQ1g7QUFBQSxVQUNDLFNBQVMsWUFBWSxFQUFFLGNBQWMsTUFBTTtBQUFBLFVBQzNDO0FBQUEsVUFDQSxJQUFJO0FBQUEsUUFDTDtBQUFBLE1BQ0Q7QUFBQTtBQUFBOzs7QUNyQ0E7QUFBQTtBQUFBO0FBQUE7QUFzUUEsV0FBU0MsMEJBQXdCO0FBQ2hDLFFBQUksQ0FBQyxLQUFLLFlBQVk7QUFDckIsWUFBTSxJQUFJLE1BQU0sMkJBQTJCO0FBQUEsSUFDNUM7QUFFQSxTQUFLQyxxQkFBb0IsSUFBSSxLQUFLLFdBQVcsZUFBZSxTQUFTO0FBQ3JFLFNBQUsseUJBQXlCLElBQUksS0FBSyxXQUFXO0FBQUEsTUFDakQ7QUFBQSxJQUNEO0FBQ0EsU0FBSyx3QkFBd0IsSUFBSSxLQUFLLFdBQVc7QUFBQSxNQUNoRDtBQUFBLElBQ0Q7QUFBQSxFQUNEO0FBS0EsV0FBU0MscUJBQW1CO0FBSTNCLFNBQUssdUJBQXVCLElBQUksQ0FBQyxVQUFVO0FBQzFDLFdBQUssTUFBTTtBQUFBLElBQ1o7QUFFQSxTQUFLLHlCQUF5QixFQUFFO0FBQUEsTUFDL0I7QUFBQSxNQUNBLEtBQUssdUJBQXVCO0FBQUEsSUFDN0I7QUFLQSxTQUFLLHNCQUFzQixJQUFJLENBQUMsVUFBVTtBQUN6QyxZQUFNLFVBQVU7QUFBQSxRQUNmO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNEO0FBQ0EsVUFBSSxTQUFTO0FBQ1osYUFBSyxLQUFLO0FBQUEsTUFDWDtBQUFBLElBQ0Q7QUFFQSxTQUFLLGlCQUFpQixTQUFTLEtBQUssc0JBQXNCLENBQUM7QUFFM0QsUUFBSSxLQUFLLFVBQVUsb0JBQW9CLE1BQU0sTUFBTTtBQUNsRCxXQUFLLGlCQUFpQixXQUFXLENBQUMsVUFBVTtBQUMzQyxZQUFJLE1BQU0sUUFBUSxVQUFVO0FBQzNCLGdCQUFNLG1CQUFtQixFQUN4QixNQUFNLFdBQ04sTUFBTSxVQUNOLE1BQU07QUFFUCxjQUFJLGtCQUFrQjtBQUNyQixpQkFBSyxjQUFjO0FBQUEsVUFDcEI7QUFBQSxRQUNEO0FBQUEsTUFDRCxDQUFDO0FBQUEsSUFDRjtBQUVBLFdBQU87QUFBQSxFQUNSO0FBTUEsV0FBU0MsZ0JBQWM7QUFFdEIsV0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBYVI7QUF6VkEsTUFrQ01GLHVCQU1BLDJCQU1BLDBCQU1BLHlCQU1BLHdCQU1BLDhCQThDQTtBQTlHTixNQUFBRyxnQkFBQTtBQUFBO0FBY0E7QUFLQSxNQUFBQztBQUNBO0FBQ0EsTUFBQUM7QUFDQTtBQUlBO0FBUUEsTUFBTUwsd0JBQXVCLE9BQU8sZ0JBQWdCO0FBTXBELE1BQU0sNEJBQTRCLE9BQU8sc0JBQXNCO0FBTS9ELE1BQU0sMkJBQTJCLE9BQU8sb0JBQW9CO0FBTTVELE1BQU0sMEJBQTBCLE9BQU8sbUJBQW1CO0FBTTFELE1BQU0seUJBQXlCLE9BQU8sa0JBQWtCO0FBTXhELE1BQU0sK0JBQStCO0FBOENyQyxNQUFNLFVBQU4sY0FBc0IsY0FBYztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLbkMsWUFBWSxjQUFjLElBQUk7QUFDN0IsaUJBQU8sT0FBTyxJQUFJLG9EQUFvRDtBQUFBLFFBQ3ZFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBc0JBLElBQUksV0FBVztBQUNkLGlCQUFPLE9BQU8sT0FBTyxDQUFDLEdBQUcsTUFBTSxVQUFVO0FBQUEsWUFDeEMsV0FBVztBQUFBLGNBQ1YsTUFBTUUsY0FBWTtBQUFBLFlBQ25CO0FBQUEsWUFDQSxTQUFTO0FBQUEsY0FDUjtBQUFBLGdCQUNDLE1BQU07QUFBQSxnQkFDTixTQUFTO0FBQUEsZ0JBQ1QsT0FBTztBQUFBLGNBQ1I7QUFBQSxZQUNEO0FBQUEsWUFDQSxTQUFTO0FBQUEsY0FDUixNQUFNO0FBQUEsY0FDTixTQUFTO0FBQUEsWUFDVjtBQUFBLFlBQ0EsVUFBVTtBQUFBLGNBQ1QsV0FBVztBQUFBLGNBQ1gsWUFBWTtBQUFBLFlBQ2I7QUFBQSxVQUNELENBQUM7QUFBQSxRQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxvQkFBb0I7QUFDbkIsZ0JBQU0sa0JBQWtCO0FBTXhCLG1CQUFTLGdCQUFnQixNQUFNLFlBQVk7QUFFM0MsZ0JBQU0sYUFBYSxLQUFLLFVBQVUsY0FBYztBQUVoRCxjQUFJLFNBQVMsS0FBSyxVQUFVLFNBQVMsVUFBVSxHQUFHO0FBQ2pELHFCQUFTLEtBQUssVUFBVSxPQUFPLFVBQVU7QUFBQSxVQUMxQztBQUFBLFFBQ0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsQ0FBQyxvQkFBb0IsSUFBSTtBQUN4QixnQkFBTSxvQkFBb0IsRUFBRTtBQUU1QixVQUFBSCx3QkFBc0IsS0FBSyxJQUFJO0FBQy9CLFVBQUFFLG1CQUFpQixLQUFLLElBQUk7QUFBQSxRQUMzQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxTQUFTO0FBQ1IsY0FBSSxLQUFLRCxxQkFBb0IsRUFBRSxVQUFVLFNBQVMsTUFBTSxHQUFHO0FBQzFELGlCQUFLLE1BQU07QUFBQSxVQUNaLE9BQU87QUFDTixpQkFBSyxLQUFLO0FBQUEsVUFDWDtBQUNBLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFTQSxPQUFPO0FBQ04sMEJBQWdCLE1BQU0sK0JBQStCLENBQUMsQ0FBQztBQUV2RCxlQUFLQSxxQkFBb0IsRUFBRSxVQUFVLE9BQU8sWUFBWTtBQUV4RCxxQkFBVyxNQUFNO0FBQ2hCLGlCQUFLQSxxQkFBb0IsRUFBRSxVQUFVLElBQUksTUFBTTtBQUMvQyx1QkFBVyxNQUFNO0FBQ2hCLDhCQUFnQixNQUFNLHdCQUF3QixDQUFDLENBQUM7QUFBQSxZQUNqRCxHQUFHLENBQUM7QUFBQSxVQUNMLEdBQUcsQ0FBQztBQUVKLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0EsUUFBUTtBQUNQLDBCQUFnQixNQUFNLGdDQUFnQyxDQUFDLENBQUM7QUFDeEQscUJBQVcsTUFBTTtBQUNoQixpQkFBS0EscUJBQW9CLEVBQUUsVUFBVSxPQUFPLE1BQU07QUFDbEQsdUJBQVcsTUFBTTtBQUNoQiw4QkFBZ0IsTUFBTSwwQkFBMEIsQ0FBQyxDQUFDO0FBQUEsWUFDbkQsR0FBRyxDQUFDO0FBQUEsVUFDTCxHQUFHLENBQUM7QUFDSixpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTUEsT0FBTyxTQUFTO0FBQ2YsaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxPQUFPLG1CQUFtQjtBQUN6QixpQkFBTyxDQUFDLGlCQUFpQjtBQUFBLFFBQzFCO0FBQUEsTUFDRDtBQTRGQSw0QkFBc0IsT0FBTztBQUFBO0FBQUE7OztBQzlUN0IsV0FBUyx3QkFBd0IsZUFBZSxJQUFJLFFBQVE7QUFFM0QsVUFBTSxtQkFBbUJNLFdBQVUsRUFBRSxTQUFTLEtBQUssTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUcvRCxVQUFNLDBCQUEwQixpQkFBaUIsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUc3RCxVQUFNLFlBQVksR0FBRyxNQUFNLElBQUksdUJBQXVCLElBQUksYUFBYSxJQUFJLEVBQUU7QUFHN0UsV0FBTyxVQUFVLFFBQVEsYUFBYSxHQUFHLEVBQUUsUUFBUSxRQUFRLEdBQUc7QUFBQSxFQUMvRDtBQXpDQSxNQUFBQyxhQUFBO0FBQUE7QUFjQTtBQUFBO0FBQUE7OztBQ2RBLE1BcUJNO0FBckJOO0FBQUE7QUFZQTtBQUNBLE1BQUFDO0FBUUEsTUFBTSxvQkFBb0IsSUFBSSxjQUFjO0FBRTVDLFVBQUk7QUFDSCwwQkFBa0I7QUFBQSxVQUNqQjtBQUFBO0FBQUE7QUFBQTtBQUFBLFVBSUE7QUFBQSxRQUNEO0FBQUEsTUFDRCxTQUFTLEdBQUc7QUFDWDtBQUFBLFVBQ0MsU0FBUyxZQUFZLEVBQUUsY0FBYyxNQUFNO0FBQUEsVUFDM0M7QUFBQSxVQUNBLElBQUk7QUFBQSxRQUNMO0FBQUEsTUFDRDtBQUFBO0FBQUE7OztBQ3JDQSxNQXFCTUM7QUFyQk4sTUFBQUMsa0JBQUE7QUFBQTtBQWNBLE1BQUFBO0FBT0EsTUFBTUQsMEJBQXlCLEdBQUcsZ0JBQWdCO0FBQUE7QUFBQTs7O0FDckJsRCxNQXFCTTtBQXJCTjtBQUFBO0FBWUE7QUFDQSxNQUFBRTtBQVFBLE1BQU0scUJBQXFCLElBQUksY0FBYztBQUU3QyxVQUFJO0FBQ0gsMkJBQW1CO0FBQUEsVUFDbEI7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUlBO0FBQUEsUUFDRDtBQUFBLE1BQ0QsU0FBUyxHQUFHO0FBQ1g7QUFBQSxVQUNDLFNBQVMsWUFBWSxFQUFFLGNBQWMsTUFBTTtBQUFBLFVBQzNDO0FBQUEsVUFDQSxJQUFJO0FBQUEsUUFDTDtBQUFBLE1BQ0Q7QUFBQTtBQUFBOzs7QUNxUUEsV0FBUyxlQUFlO0FBQ3ZCLFFBQUksU0FBUztBQUViLFFBQUksS0FBSyw2QkFBNkIsR0FBRztBQUN4QyxVQUFJLEtBQUssVUFBVSwwQkFBMEIsR0FBRztBQUMvQyxrQkFBVSxLQUFLLDZCQUE2QixFQUFFO0FBQUEsTUFDL0MsT0FBTztBQUNOLGtCQUFVLEtBQUssNkJBQTZCLEVBQUU7QUFBQSxNQUMvQztBQUFBLElBQ0Q7QUFFQSxRQUFJLEtBQUssd0JBQXdCLEdBQUc7QUFDbkMsVUFBSSxLQUFLLFVBQVUsMEJBQTBCLEdBQUc7QUFDL0Msa0JBQVUsS0FBSyx3QkFBd0IsRUFBRTtBQUFBLE1BQzFDLE9BQU87QUFDTixrQkFBVSxLQUFLLHdCQUF3QixFQUFFLGVBQWU7QUFBQSxNQUN6RDtBQUFBLElBQ0Q7QUFFQSxRQUFJLFdBQVcsR0FBRztBQUNqQixVQUFJLEtBQUssVUFBVSwwQkFBMEIsR0FBRztBQUMvQyxpQkFBUyxLQUFLLG9CQUFvQixFQUFFO0FBQUEsTUFDckMsT0FBTztBQUNOLGlCQUFTLEtBQUssb0JBQW9CLEVBQUU7QUFBQSxNQUNyQztBQUVBLFVBQUksV0FBVyxHQUFHO0FBQ2pCLGlCQUFTO0FBQUEsTUFDVjtBQUFBLElBQ0QsT0FBTztBQUNOLGdCQUFVO0FBQUEsSUFDWDtBQUVBLFNBQUssb0JBQW9CLEVBQUUsTUFBTTtBQUFBLE1BQ2hDO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNEO0FBRUEsb0JBQWdCLE1BQU0sYUFBYSxLQUFLLFVBQVUsSUFBSSxrQkFBa0I7QUFBQSxNQUN2RTtBQUFBLElBQ0QsQ0FBQztBQUFBLEVBQ0Y7QUFFQSxXQUFTLGtDQUFrQztBQUMxQyxTQUFLQyxxQkFBb0IsRUFBRSxXQUFXO0FBRXRDLFVBQU0sZUFBZSxtQkFBbUIsS0FBSyxJQUFJO0FBQ2pELGlCQUFhLFFBQVEsQ0FBQyxTQUFTO0FBQzlCLFdBQUtBLHFCQUFvQixFQUFFLFFBQVEsSUFBSTtBQUFBLElBQ3hDLENBQUM7QUFFRCxRQUFJLEtBQUssNkJBQTZCLEdBQUc7QUFDeEMsV0FBS0EscUJBQW9CLEVBQUUsUUFBUSxLQUFLLDZCQUE2QixDQUFDO0FBQUEsSUFDdkU7QUFFQSxTQUFLLGFBQWE7QUFBQSxFQUNuQjtBQUtBLFdBQVNDLHFCQUFtQjtBQUMzQixRQUFJLENBQUMsS0FBSyxZQUFZO0FBQ3JCLFlBQU0sSUFBSSxNQUFNLDJCQUEyQjtBQUFBLElBQzVDO0FBRUEsMkJBQXVCLEtBQUssSUFBSTtBQUNoQyxXQUFPO0FBQUEsRUFDUjtBQUVBLFdBQVMseUJBQXlCO0FBQ2pDLFNBQUssd0JBQXdCLEVBQUUsaUJBQWlCLGNBQWMsTUFBTTtBQUNuRSxzQ0FBZ0MsS0FBSyxJQUFJO0FBQUEsSUFDMUMsQ0FBQztBQUFBLEVBQ0Y7QUFPQSxXQUFTQywwQkFBd0I7QUFDaEMsUUFBSSxDQUFDLEtBQUssWUFBWTtBQUNyQixZQUFNLElBQUksTUFBTSwyQkFBMkI7QUFBQSxJQUM1QztBQUVBLFNBQUtDLHFCQUFvQixJQUFJLEtBQUssV0FBVztBQUFBLE1BQzVDO0FBQUEsSUFDRDtBQUNBLFNBQUssb0JBQW9CLElBQUksS0FBSyxXQUFXO0FBQUEsTUFDNUM7QUFBQSxJQUNEO0FBQ0EsU0FBSyx3QkFBd0IsSUFBSSxLQUFLLFdBQVcsY0FBYyxNQUFNO0FBQ3JFLFNBQUssNkJBQTZCLElBQUksS0FBSyxXQUFXO0FBQUEsTUFDckQ7QUFBQSxJQUNEO0FBQ0EsU0FBSyx3QkFBd0IsSUFBSSxLQUFLLFdBQVc7QUFBQSxNQUNoRDtBQUFBLElBQ0Q7QUFBQSxFQUNEO0FBTUEsV0FBUyxlQUFlO0FBQ3ZCLFdBQU8sd0JBQXdCLEtBQUssVUFBVSxHQUFHLEtBQUssSUFBSSxPQUFPO0FBQUEsRUFDbEU7QUFLQSxXQUFTLG9CQUFvQjtBQUM1QixRQUFJLENBQUMsS0FBSyxVQUFVLHVCQUF1QixHQUFHO0FBQzdDO0FBQUEsSUFDRDtBQUVBLFFBQUksQ0FBQyxLQUFLLG9CQUFvQixHQUFHO0FBQ2hDO0FBQUEsSUFDRDtBQUVBLFVBQU1DLFlBQVcsWUFBWTtBQUM3QixVQUFNLE9BQU9BLFVBQVMsY0FBYyxjQUFjO0FBQ2xELFFBQUksRUFBRSxRQUFRLEtBQUssS0FBSztBQUN2QjtBQUFBLElBQ0Q7QUFFQSxVQUFNLFlBQVksYUFBYSxLQUFLLElBQUk7QUFFeEMsUUFBSTtBQUNILFdBQUssVUFBVSxXQUFXLEtBQUssT0FBTyxDQUFDO0FBQUEsSUFDeEMsU0FBUyxPQUFPO0FBQ2Ysd0JBQWtCLE1BQU0sd0JBQXdCLE9BQU8sS0FBSyxDQUFDO0FBQUEsSUFDOUQ7QUFBQSxFQUNEO0FBTUEsV0FBUywwQkFBMEI7QUFDbEMsUUFBSSxDQUFDLEtBQUssVUFBVSx1QkFBdUIsR0FBRztBQUM3QyxhQUFPLFFBQVEsUUFBUSxDQUFDLENBQUM7QUFBQSxJQUMxQjtBQUVBLFVBQU1BLFlBQVcsWUFBWTtBQUM3QixVQUFNLE9BQU9BLFVBQVMsY0FBYyxjQUFjO0FBRWxELFFBQUksRUFBRSxRQUFRLEtBQUssS0FBSztBQUN2QixhQUFPLFFBQVEsUUFBUSxDQUFDLENBQUM7QUFBQSxJQUMxQjtBQUVBLFVBQU0sWUFBWSxhQUFhLEtBQUssSUFBSTtBQUN4QyxXQUFPLEtBQ0wsVUFBVSxTQUFTLEVBQ25CLEtBQUssQ0FBQyxVQUFVO0FBQ2hCLFVBQUksVUFBVSxNQUFNO0FBQ25CLGFBQUssS0FBSztBQUFBLE1BQ1gsT0FBTztBQUNOLGFBQUssTUFBTTtBQUFBLE1BQ1o7QUFBQSxJQUNELENBQUMsRUFDQSxNQUFNLENBQUMsVUFBVTtBQUNqQix3QkFBa0IsTUFBTSx3QkFBd0IsTUFBTSxTQUFTLENBQUM7QUFBQSxJQUNqRSxDQUFDO0FBQUEsRUFDSDtBQUtBLFdBQVMscUJBQXFCO0FBRTdCLFNBQUtKLHFCQUFvQixJQUFJLElBQUksZUFBZSxDQUFDLFlBQVk7QUFDNUQsVUFBSSxLQUFLSyxvQkFBbUIsYUFBYSxnQkFBZ0I7QUFDeEQsWUFBSTtBQUNILGVBQUtBLG9CQUFtQixFQUFFLE1BQU07QUFDaEM7QUFBQSxRQUNELFNBQVMsR0FBRztBQUNYLGlCQUFPLEtBQUtBLG9CQUFtQjtBQUFBLFFBQ2hDO0FBQUEsTUFDRDtBQUVBLFdBQUtBLG9CQUFtQixJQUFJLElBQUksZUFBZSxLQUFLLE1BQU07QUFDekQsaUNBQXlCLEtBQUssSUFBSTtBQUFBLE1BQ25DLENBQUM7QUFBQSxJQUNGLENBQUM7QUFBQSxFQUNGO0FBRUEsV0FBUywyQkFBMkI7QUFDbkMsU0FBSyxhQUFhO0FBQUEsRUFDbkI7QUFNQSxXQUFTQyxnQkFBYztBQUV0QixXQUFPO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFVUjtBQTNmQSxNQW9DTUQsc0JBTUEsc0JBTUFGLHVCQU9BSCx1QkFNQSwwQkFNQSwrQkFNQSwwQkFNQSxZQWFBO0FBNUZOLE1BQUFPLGlCQUFBO0FBQUE7QUFjQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBQUM7QUFDQSxNQUFBQztBQUNBLE1BQUFDO0FBQ0E7QUFDQTtBQVFBLE1BQU1MLHVCQUFzQixPQUFPLGVBQWU7QUFNbEQsTUFBTSx1QkFBdUIsT0FBTyxnQkFBZ0I7QUFNcEQsTUFBTUYsd0JBQXVCLE9BQU8sZ0JBQWdCO0FBT3BELE1BQU1ILHdCQUF1QixPQUFPLGdCQUFnQjtBQU1wRCxNQUFNLDJCQUEyQixPQUFPLG9CQUFvQjtBQU01RCxNQUFNLGdDQUFnQyxPQUFPLHlCQUF5QjtBQU10RSxNQUFNLDJCQUEyQixPQUFPLG9CQUFvQjtBQU01RCxNQUFNLGFBQWEsT0FBTyxNQUFNO0FBYWhDLE1BQU0sV0FBTixNQUFNLGtCQUFpQixjQUFjO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtwQyxZQUFZLGNBQWMsSUFBSTtBQUM3QixpQkFBTyxPQUFPLElBQUksdURBQXVEO0FBQUEsUUFDMUU7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLGNBQWM7QUFDYixnQkFBTTtBQUVOLGVBQUssVUFBVSxJQUFJO0FBQUEsUUFDcEI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBa0JBLElBQUksV0FBVztBQUNkLGlCQUFPLE9BQU8sT0FBTyxDQUFDLEdBQUcsTUFBTSxVQUFVO0FBQUEsWUFDeEMsV0FBVztBQUFBLGNBQ1YsTUFBTU0sY0FBWTtBQUFBLFlBQ25CO0FBQUEsWUFDQSxTQUFTO0FBQUEsY0FDUixXQUFXO0FBQUEsWUFDWjtBQUFBLFlBQ0EsVUFBVTtBQUFBLGNBQ1QsV0FBVztBQUFBLGNBQ1gsY0FBYztBQUFBLGNBQ2QsaUJBQWlCO0FBQUEsWUFDbEI7QUFBQSxZQUNBLGVBQWU7QUFBQSxVQUNoQixDQUFDO0FBQUEsUUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNQSxDQUFDLG9CQUFvQixJQUFJO0FBQ3hCLGdCQUFNLG9CQUFvQixFQUFFO0FBQzVCLFVBQUFKLHdCQUFzQixLQUFLLElBQUk7QUFDL0Isa0NBQXdCLEtBQUssSUFBSTtBQUNqQyw2QkFBbUIsS0FBSyxJQUFJO0FBQzVCLFVBQUFELG1CQUFpQixLQUFLLElBQUk7QUFFMUIsY0FBSSxLQUFLLFVBQVUsZUFBZSxHQUFHO0FBQ3BDLGlCQUFLLEtBQUs7QUFBQSxVQUNYO0FBQUEsUUFDRDtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0Esb0JBQW9CO0FBQ25CLGdCQUFNLGtCQUFrQjtBQUN4QiwwQ0FBZ0MsS0FBSyxJQUFJO0FBQUEsUUFDMUM7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLHVCQUF1QjtBQUN0QixnQkFBTSxxQkFBcUI7QUFBQSxRQUM1QjtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0EsU0FBUztBQUNSLGNBQUksS0FBSyxvQkFBb0IsRUFBRSxVQUFVLFNBQVMsUUFBUSxHQUFHO0FBQzVELGlCQUFLLE1BQU07QUFBQSxVQUNaLE9BQU87QUFDTixpQkFBSyxLQUFLO0FBQUEsVUFDWDtBQUNBLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0EsV0FBVztBQUNWLGlCQUFPLENBQUMsS0FBSyxvQkFBb0IsRUFBRSxVQUFVLFNBQVMsUUFBUTtBQUFBLFFBQy9EO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxTQUFTO0FBQ1IsaUJBQU8sQ0FBQyxLQUFLLFNBQVM7QUFBQSxRQUN2QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBUUEsT0FBTztBQUNOLGNBQUk7QUFDSixjQUFJLEtBQUssb0JBQW9CLEVBQUUsVUFBVSxTQUFTLFFBQVEsR0FBRztBQUM1RCxtQkFBTztBQUFBLFVBQ1I7QUFFQSwwQkFBZ0IsTUFBTSxhQUFhLEtBQUssVUFBVSxJQUFJLGdCQUFnQixDQUFDLENBQUM7QUFFeEUsdUJBQWEsS0FBSyxJQUFJO0FBQ3RCLGVBQUssb0JBQW9CLEVBQUUsVUFBVSxJQUFJLFFBQVE7QUFFakQsY0FBSSxLQUFLLFVBQVUsb0JBQW9CLE1BQU0sTUFBTTtBQUNsRCxtQkFBTztBQUNQLG1CQUFPLEtBQUssOEJBQThCLFdBQVU7QUFDbkQscUJBQU8sS0FBSztBQUNaLG1CQUFLLE1BQU07QUFBQSxZQUNaO0FBRUEsbUJBQU87QUFDUCxtQkFBTyxLQUFLLGtDQUFrQyxXQUFVO0FBQ3ZELHFCQUFPLEtBQUs7QUFDWixtQkFBSyxNQUFNO0FBQUEsWUFDWjtBQUFBLFVBQ0Q7QUFFQSxxQkFBVyxNQUFNO0FBQ2hCLHVCQUFXLE1BQU07QUFDaEIsZ0NBQWtCLEtBQUssSUFBSTtBQUMzQiw4QkFBZ0IsTUFBTSxhQUFhLEtBQUssVUFBVSxJQUFJLFNBQVMsQ0FBQyxDQUFDO0FBQ2pFLHlCQUFXLE1BQU07QUFDaEIscUJBQUtFLHFCQUFvQixFQUFFLFVBQVUsT0FBTyxpQkFBaUI7QUFBQSxjQUM5RCxHQUFHLEdBQUc7QUFBQSxZQUNQLEdBQUcsQ0FBQztBQUFBLFVBQ0wsR0FBRyxDQUFDO0FBRUosaUJBQU87QUFBQSxRQUNSO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFRQSxRQUFRO0FBQ1AsY0FBSSxDQUFDLEtBQUssb0JBQW9CLEVBQUUsVUFBVSxTQUFTLFFBQVEsR0FBRztBQUM3RCxtQkFBTztBQUFBLFVBQ1I7QUFFQSwwQkFBZ0IsTUFBTSxhQUFhLEtBQUssVUFBVSxJQUFJLGlCQUFpQixDQUFDLENBQUM7QUFDekUsZUFBS0EscUJBQW9CLEVBQUUsVUFBVSxJQUFJLGlCQUFpQjtBQUUxRCxxQkFBVyxNQUFNO0FBQ2hCLGlCQUFLLG9CQUFvQixFQUFFLFVBQVUsT0FBTyxRQUFRO0FBQ3BELHVCQUFXLE1BQU07QUFDaEIsZ0NBQWtCLEtBQUssSUFBSTtBQUMzQiw4QkFBZ0IsTUFBTSxhQUFhLEtBQUssVUFBVSxJQUFJLFdBQVcsQ0FBQyxDQUFDO0FBQUEsWUFDcEUsR0FBRyxDQUFDO0FBQUEsVUFDTCxHQUFHLENBQUM7QUFFSixpQkFBTztBQUFBLFFBQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLE9BQU8sU0FBUztBQUNmLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0EsT0FBTyxtQkFBbUI7QUFDekIsaUJBQU8sQ0FBQyxrQkFBa0I7QUFBQSxRQUMzQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU9BLGVBQWU7QUFDZCx1QkFBYSxLQUFLLElBQUk7QUFDdEIsaUJBQU87QUFBQSxRQUNSO0FBQUEsTUFDRDtBQXlOQSw0QkFBc0IsUUFBUTtBQUFBO0FBQUE7OztBQzlXOUIsV0FBU1EsMEJBQXdCO0FBQ2hDLFFBQUksQ0FBQyxLQUFLLFlBQVk7QUFDckIsWUFBTSxJQUFJLE1BQU0sMkJBQTJCO0FBQUEsSUFDNUM7QUFFQSxTQUFLQyxvQkFBbUIsSUFBSSxLQUFLLFdBQVc7QUFBQSxNQUMzQztBQUFBLElBQ0Q7QUFBQSxFQUNEO0FBS0EsV0FBU0MscUJBQW1CO0FBQzNCLFFBQUksQ0FBQyxLQUFLLFlBQVk7QUFDckIsWUFBTSxJQUFJLE1BQU0sMkJBQTJCO0FBQUEsSUFDNUM7QUFFQSxTQUFLLHdCQUF3QixJQUFJLENBQUMsVUFBVTtBQUMzQyxXQUFLLE9BQU87QUFBQSxJQUNiO0FBRUEsU0FBS0Qsb0JBQW1CLEVBQUU7QUFBQSxNQUN6QjtBQUFBLE1BQ0EsS0FBSyx3QkFBd0I7QUFBQSxJQUM5QjtBQUVBLFdBQU87QUFBQSxFQUNSO0FBTUEsV0FBUyxrQkFBa0I7QUFDMUIsUUFBSTtBQUNKLFVBQU0sV0FBVztBQUNqQixRQUFJLEtBQUssYUFBYUUsdUJBQXNCLEdBQUc7QUFDOUMsY0FBUSxLQUFLLGFBQWFBLHVCQUFzQjtBQUFBLElBQ2pELE9BQU87QUFDTixjQUFRLEtBQUssVUFBVSxpQkFBaUIsU0FBUztBQUFBLElBQ2xEO0FBRUEsUUFBSSxDQUFDLFNBQVMsS0FBSyxHQUFHO0FBQ3JCLGNBQVE7QUFBQSxJQUNUO0FBRUEsUUFBSSxVQUFVLElBQUk7QUFDakIsY0FBUSxLQUFLO0FBQUEsSUFDZDtBQUVBLFlBQVEsTUFBTSxLQUFLO0FBRW5CLFFBQUksVUFBVSxJQUFJO0FBQ2pCLGNBQVEsS0FBSyxVQUFVLGlCQUFpQixTQUFTO0FBQUEsSUFDbEQ7QUFFQSxRQUFJLE1BQU0sU0FBUyxLQUFLO0FBQ3ZCLGNBQVEsR0FBRyxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFBQSxJQUNsQztBQUVBLFNBQUssYUFBYUEseUJBQXdCLEtBQUs7QUFDL0MsU0FBSyxVQUFVLGlCQUFpQixLQUFLO0FBRXJDLFdBQU87QUFBQSxFQUNSO0FBY0EsV0FBU0MsZ0JBQWM7QUFFdEIsV0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBZ0JSO0FBaFBBLE1BK0JNSCxzQkFNQSwwQkFpQkE7QUF0RE4sTUFBQUksZ0JBQUE7QUFBQTtBQWNBO0FBSUE7QUFDQSxNQUFBQztBQUNBO0FBQ0EsTUFBQUM7QUFDQSxNQUFBQztBQUNBO0FBUUEsTUFBTVAsdUJBQXNCLE9BQU8sZUFBZTtBQU1sRCxNQUFNLDJCQUEyQixPQUFPLG9CQUFvQjtBQWlCNUQsTUFBTSxVQUFOLGNBQXNCLFNBQVM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBSzlCLFlBQVksY0FBYyxJQUFJO0FBQzdCLGlCQUFPLE9BQU8sSUFBSSxzREFBc0Q7QUFBQSxRQUN6RTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0EsY0FBYztBQUNiLGdCQUFNO0FBRU4sZUFBSyxVQUFVLElBQUk7QUFBQSxRQUNwQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQWFBLElBQUksV0FBVztBQUNkLGlCQUFPLE9BQU8sT0FBTyxDQUFDLEdBQUcsTUFBTSxVQUFVO0FBQUEsWUFDeEMsV0FBVztBQUFBLGNBQ1YsTUFBTUcsY0FBWTtBQUFBLFlBQ25CO0FBQUEsWUFDQSxRQUFRO0FBQUEsY0FDUCxRQUFRO0FBQUEsWUFDVDtBQUFBLFVBQ0QsQ0FBQztBQUFBLFFBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLENBQUMsb0JBQW9CLElBQUk7QUFDeEIsZ0JBQU0sb0JBQW9CLEVBQUU7QUFFNUIsMEJBQWdCLEtBQUssSUFBSTtBQUN6QixVQUFBSix3QkFBc0IsS0FBSyxJQUFJO0FBQy9CLFVBQUFFLG1CQUFpQixLQUFLLElBQUk7QUFBQSxRQUMzQjtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0Esb0JBQW9CO0FBQ25CLGdCQUFNLGtCQUFrQjtBQUV4QixnQkFBTSxrQkFBa0IsS0FBSztBQUU3QixjQUFJLG9CQUFvQixNQUFNO0FBQzdCLGtCQUFNLGtCQUFrQixLQUFLO0FBQzdCLGdCQUFJLG1CQUFtQixnQkFBZ0IsWUFBWSxtQkFBbUI7QUFDckUsbUJBQUtELG9CQUFtQixFQUFFLE1BQU0sWUFBWTtBQUFBLFlBQzdDO0FBQUEsVUFDRDtBQUFBLFFBQ0Q7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtBLE9BQU8sU0FBUztBQUNmLGlCQUFPO0FBQUEsUUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS0EsT0FBTyxtQkFBbUI7QUFDekIsZ0JBQU0sTUFBTSxNQUFNLGlCQUFpQjtBQUNuQyxjQUFJLEtBQUssaUJBQWlCO0FBQzFCLGlCQUFPO0FBQUEsUUFDUjtBQUFBLE1BQ0Q7QUEwR0EsNEJBQXNCLE9BQU87QUFBQTtBQUFBOzs7QUNsUDdCO0FBQUE7QUFBQSxtQkFBQVE7QUFBQTtBQUFBLE1Bc0JNQTtBQXRCTixNQUFBQyxnQkFBQTtBQUFBO0FBY0EsTUFBQUE7QUFRQSxNQUFNRCxXQUFOLGNBQXNCLFFBQVc7QUFBQSxNQUFDO0FBQUE7QUFBQTs7O0FDdEJsQztBQUFBO0FBQUE7QUFBQTtBQUFBLE1Bd0JJRSxrQkFVRTtBQWxDTjtBQUFBO0FBY0E7QUFDQTtBQUNBO0FBUUEsTUFBSUEsbUJBQWtCO0FBVXRCLE1BQU0sV0FBTixjQUF1QixHQUFHO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFJekIsY0FBYztBQUNiLGdCQUFNO0FBRU4sVUFBQUEsb0JBQW1CO0FBRW5CLGVBQUssS0FDSixVQUFVLEVBQ1IsS0FBSyxPQUFPLEdBQUcsR0FBSyxDQUFDLEVBQ3JCLFFBQVEsTUFBTSxFQUFFLEVBRWhCLFFBQVEsV0FBVyxHQUFHLElBQUlBO0FBQUEsUUFDOUI7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDbERBO0FBQUE7QUFBQTtBQUFBO0FBaUVBLFdBQVMsbUJBQW1CO0FBQzNCLFdBQU8sdUNBQXVDLFFBQVEsU0FBUyxTQUFVLEdBQUc7QUFDM0UsWUFBTSxJQUFLLE9BQU8sR0FBRyxJQUFLLElBQUksS0FBTTtBQUNwQyxZQUFNLElBQUksTUFBTSxNQUFNLElBQUssSUFBSSxJQUFPO0FBQ3RDLGFBQU8sRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDO0FBQUEsSUFDeEIsQ0FBQztBQUFBLEVBQ0Y7QUFNQSxXQUFTLG1CQUFtQjtBQUMzQixVQUFNLFFBQVEsZ0JBQWdCLFFBQVE7QUFDdEMsUUFBSSxDQUFDLFNBQVMsS0FBSyxFQUFHO0FBQ3RCLFFBQUksT0FBTyxRQUFRLFlBQVksRUFBRztBQUNsQyxXQUFPLE1BQU0sV0FBVztBQUFBLEVBQ3pCO0FBbEZBLE1BOEJNO0FBOUJOO0FBQUE7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBWUEsTUFBTSxPQUFOLGNBQW1CLEtBQUs7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUl2QixjQUFjO0FBQ2IsZ0JBQU07QUFFTixjQUFJLE9BQU8saUJBQWlCO0FBRTVCLGNBQUksU0FBUyxRQUFXO0FBQ3ZCLG1CQUFPLGlCQUFpQjtBQUFBLFVBQ3pCO0FBRUEsY0FBSSxTQUFTLFFBQVc7QUFDdkIsa0JBQU0sSUFBSSxNQUFNLGFBQWE7QUFBQSxVQUM5QjtBQUVBLGVBQUssY0FBYyxJQUFJO0FBQUEsWUFDdEIsT0FBTztBQUFBLFVBQ1I7QUFBQSxRQUNEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU1BLFdBQVc7QUFDVixpQkFBTyxLQUFLLGNBQWMsRUFBRSxPQUFPO0FBQUEsUUFDcEM7QUFBQSxNQUNEO0FBQUE7QUFBQTs7O0FDM0RBLE1BQUksT0FBTyxXQUFXLFVBQVU7QUFFNUIsS0FBQyxXQUFZO0FBRVQsVUFBSSxVQUFXLFdBQVk7QUFDdkIsWUFBSSxLQUFLLFVBQVUsV0FBVyxLQUMxQixJQUFJLEdBQUcsTUFBTSw4REFBOEQsS0FBSyxDQUFDO0FBQ3JGLFlBQUksV0FBVyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEdBQUc7QUFDdkIsZ0JBQU0sa0JBQWtCLEtBQUssRUFBRSxLQUFLLENBQUM7QUFDckMsaUJBQU8sU0FBUyxJQUFJLENBQUMsS0FBSztBQUFBLFFBQzlCO0FBQ0EsWUFBSSxFQUFFLENBQUMsTUFBTSxVQUFVO0FBQ25CLGdCQUFNLEdBQUcsTUFBTSxxQkFBcUI7QUFDcEMsY0FBSSxPQUFPLEtBQU0sUUFBTyxJQUFJLE1BQU0sQ0FBQyxFQUFFLEtBQUssR0FBRyxFQUFFLFFBQVEsT0FBTyxPQUFPO0FBQUEsUUFDekU7QUFDQSxZQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsU0FBUyxVQUFVLFlBQVksSUFBSTtBQUN4RSxhQUFLLE1BQU0sR0FBRyxNQUFNLGlCQUFpQixNQUFNLEtBQU0sR0FBRSxPQUFPLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUN0RSxlQUFPLEVBQUUsS0FBSyxHQUFHO0FBQUEsTUFDckIsRUFBRztBQUdILFVBQUksVUFBVSxTQUFTLGNBQWMsSUFBSTtBQUN6QyxjQUFRLGFBQWEsTUFBTTtBQUFBLElBRS9CLEdBQUc7QUFBQSxFQUdQOzs7QUMzQkE7OztBQ0FBLE1BQUlDLGFBQVksT0FBTztBQUN2QixNQUFJQyxxQkFBb0IsT0FBTztBQUMvQixNQUFJLFNBQVMsQ0FBQyxRQUFRLFVBQVVELFdBQVUsUUFBUSxRQUFRLEVBQUUsT0FBTyxjQUFjLEtBQUssQ0FBQztBQUN2RixNQUFJRSxjQUFhLENBQUMsSUFBSSxRQUFRLFNBQVNDLGFBQVk7QUFDakQsV0FBTyxRQUFRLEdBQUcsR0FBR0YsbUJBQWtCLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxNQUFNLEVBQUUsU0FBUyxDQUFDLEVBQUUsR0FBRyxTQUFTLEdBQUcsR0FBRyxJQUFJO0FBQUEsRUFDN0Y7QUFDQSxNQUFJRyxZQUFXLENBQUMsUUFBUSxRQUFRO0FBQzlCLGFBQVMsUUFBUTtBQUNmLE1BQUFKLFdBQVUsUUFBUSxNQUFNLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxZQUFZLEtBQUssQ0FBQztBQUFBLEVBQ2hFO0FBR0EsTUFBSSxlQUFlRSxZQUFXO0FBQUEsSUFDNUIsb0JBQW9CO0FBQUEsSUFDcEI7QUFBQSxFQUNGLENBQUM7QUFHRCxNQUFJLGdCQUFnQixDQUFDO0FBQ3JCLEVBQUFFLFVBQVMsZUFBZTtBQUFBLElBQ3RCLG9CQUFvQixNQUFNO0FBQUEsSUFDMUIsZ0JBQWdCLE1BQU07QUFBQSxJQUN0QixXQUFXLE1BQU07QUFBQSxJQUNqQixhQUFhLE1BQU07QUFBQSxJQUNuQixZQUFZLE1BQU07QUFBQSxJQUNsQixrQkFBa0IsTUFBTTtBQUFBLElBQ3hCLEtBQUssTUFBTTtBQUFBLElBQ1gsYUFBYSxNQUFNO0FBQUEsSUFDbkIsTUFBTSxNQUFNO0FBQUEsSUFDWixXQUFXLE1BQU07QUFBQSxJQUNqQixZQUFZLE1BQU07QUFBQSxJQUNsQixTQUFTLE1BQU07QUFBQSxJQUNmLGFBQWEsTUFBTTtBQUFBLElBQ25CLDRCQUE0QixNQUFNO0FBQUEsSUFDbEMsaUNBQWlDLE1BQU07QUFBQSxJQUN2QyxhQUFhLE1BQU07QUFBQSxJQUNuQixhQUFhLE1BQU07QUFBQSxJQUNuQixTQUFTLE1BQU07QUFBQSxJQUNmLE9BQU8sTUFBTUM7QUFBQSxJQUNiLFdBQVcsTUFBTTtBQUFBLElBQ2pCLGdCQUFnQixNQUFNO0FBQUEsSUFDdEIsVUFBVSxNQUFNO0FBQUEsSUFDaEIsWUFBWSxNQUFNO0FBQUEsSUFDbEIsMEJBQTBCLE1BQU07QUFBQSxJQUNoQyxpQkFBaUIsTUFBTTtBQUFBLElBQ3ZCLG1CQUFtQixNQUFNO0FBQUEsSUFDekIsU0FBUyxNQUFNO0FBQUEsSUFDZixNQUFNLE1BQU07QUFBQSxJQUNaLGVBQWUsTUFBTTtBQUFBLElBQ3JCLE1BQU0sTUFBTTtBQUFBLEVBQ2QsQ0FBQztBQUdELE1BQUksc0JBQXNCLENBQUM7QUFDM0IsRUFBQUQsVUFBUyxxQkFBcUI7QUFBQSxJQUM1Qix1QkFBdUIsTUFBTTtBQUFBLElBQzdCLG9CQUFvQixNQUFNO0FBQUEsSUFDMUIsbUJBQW1CLE1BQU07QUFBQSxJQUN6QixvQkFBb0IsTUFBTTtBQUFBLElBQzFCLFlBQVksTUFBTTtBQUFBLEVBQ3BCLENBQUM7QUFDRCxXQUFTLGdCQUFnQixLQUFLO0FBQzVCLFdBQU8sZUFBZSxTQUFTLE9BQU8sVUFBVSxTQUFTLEtBQUssR0FBRyxNQUFNO0FBQUEsRUFDekU7QUFDQSxTQUFPLGlCQUFpQixpQkFBaUI7QUFDekMsV0FBUyxTQUFTLEtBQUs7QUFDckIsV0FBTyxPQUFPLFVBQVUsU0FBUyxLQUFLLEdBQUcsTUFBTTtBQUFBLEVBQ2pEO0FBQ0EsU0FBTyxVQUFVLFVBQVU7QUFDM0IsV0FBUyxtQkFBbUIsUUFBUSxXQUFXO0FBQzdDLFdBQU8sZ0JBQWdCLFNBQVMsS0FBSyxXQUFXO0FBQUEsRUFDbEQ7QUFDQSxTQUFPLG9CQUFvQixvQkFBb0I7QUFDL0MsV0FBUyxzQkFBc0IsUUFBUSxXQUFXO0FBQ2hELFFBQUksZ0JBQWdCLFNBQVMsR0FBRztBQUM5QixhQUFPLE9BQU8sZ0JBQWdCLFVBQVUsZUFBZSxrQkFBa0IsVUFBVTtBQUFBLElBQ3JGLFlBQVksT0FBTyxjQUFjLFlBQVksT0FBTyxjQUFjLGVBQWUsVUFBVSxXQUFXO0FBQ3BHLGFBQU8sT0FBTyxnQkFBZ0IsYUFBYSxrQkFBa0I7QUFBQSxJQUMvRDtBQUNBLFdBQU87QUFBQSxFQUNUO0FBQ0EsU0FBTyx1QkFBdUIsdUJBQXVCO0FBQ3JELFdBQVMsa0JBQWtCLFFBQVEsWUFBWTtBQUM3QyxVQUFNLG1CQUFtQixPQUFPLFdBQVcsV0FBVyxTQUFTLE9BQU87QUFDdEUsUUFBSSxTQUFTLFVBQVUsR0FBRztBQUN4QixhQUFPLFdBQVcsS0FBSyxnQkFBZ0I7QUFBQSxJQUN6QyxXQUFXLE9BQU8sZUFBZSxVQUFVO0FBQ3pDLGFBQU8saUJBQWlCLFFBQVEsVUFBVSxNQUFNO0FBQUEsSUFDbEQ7QUFDQSxXQUFPO0FBQUEsRUFDVDtBQUNBLFNBQU8sbUJBQW1CLG1CQUFtQjtBQUM3QyxXQUFTLG1CQUFtQixXQUFXO0FBQ3JDLFFBQUksa0JBQWtCO0FBQ3RCLFFBQUksZ0JBQWdCLFNBQVMsR0FBRztBQUM5Qix3QkFBa0IsVUFBVSxZQUFZO0FBQUEsSUFDMUMsV0FBVyxPQUFPLGNBQWMsWUFBWTtBQUMxQyx3QkFBa0IsVUFBVTtBQUM1QixVQUFJLG9CQUFvQixJQUFJO0FBQzFCLGNBQU0scUJBQXFCLElBQUksVUFBVSxFQUFFO0FBQzNDLDBCQUFrQixzQkFBc0I7QUFBQSxNQUMxQztBQUFBLElBQ0Y7QUFDQSxXQUFPO0FBQUEsRUFDVDtBQUNBLFNBQU8sb0JBQW9CLG9CQUFvQjtBQUMvQyxXQUFTLFdBQVcsV0FBVztBQUM3QixRQUFJLE1BQU07QUFDVixRQUFJLGFBQWEsVUFBVSxTQUFTO0FBQ2xDLFlBQU0sVUFBVTtBQUFBLElBQ2xCLFdBQVcsT0FBTyxjQUFjLFVBQVU7QUFDeEMsWUFBTTtBQUFBLElBQ1I7QUFDQSxXQUFPO0FBQUEsRUFDVDtBQUNBLFNBQU8sWUFBWSxZQUFZO0FBRy9CLFdBQVMsS0FBSyxLQUFLLEtBQUssT0FBTztBQUM3QixRQUFJLFFBQVEsSUFBSSxZQUFZLElBQUksVUFBMEIsdUJBQU8sT0FBTyxJQUFJO0FBQzVFLFFBQUksVUFBVSxXQUFXLEdBQUc7QUFDMUIsWUFBTSxHQUFHLElBQUk7QUFBQSxJQUNmLE9BQU87QUFDTCxhQUFPLE1BQU0sR0FBRztBQUFBLElBQ2xCO0FBQUEsRUFDRjtBQUNBLFNBQU8sTUFBTSxNQUFNO0FBR25CLFdBQVMsS0FBSyxLQUFLLE1BQU07QUFDdkIsUUFBSSxTQUFTLEtBQUssS0FBSyxRQUFRLEdBQUcsT0FBTyxLQUFLLENBQUM7QUFDL0MsV0FBTyxTQUFTLENBQUMsT0FBTztBQUFBLEVBQzFCO0FBQ0EsU0FBTyxNQUFNLE1BQU07QUFHbkIsV0FBUyxLQUFLLEtBQUs7QUFDakIsUUFBSSxPQUFPLFFBQVEsYUFBYTtBQUM5QixhQUFPO0FBQUEsSUFDVDtBQUNBLFFBQUksUUFBUSxNQUFNO0FBQ2hCLGFBQU87QUFBQSxJQUNUO0FBQ0EsVUFBTSxZQUFZLElBQUksT0FBTyxXQUFXO0FBQ3hDLFFBQUksT0FBTyxjQUFjLFVBQVU7QUFDakMsYUFBTztBQUFBLElBQ1Q7QUFDQSxVQUFNLFFBQVEsT0FBTyxVQUFVLFNBQVMsS0FBSyxHQUFHLEVBQUUsTUFBTSxHQUFHLEVBQUU7QUFDN0QsV0FBTztBQUFBLEVBQ1Q7QUFDQSxTQUFPLE1BQU0sTUFBTTtBQUduQixNQUFJLGlCQUFpQix1QkFBdUI7QUFDNUMsTUFBSSxpQkFBaUIsTUFBTSx3QkFBd0IsTUFBTTtBQUFBLElBQ3ZELE9BQU87QUFDTCxhQUFPLE1BQU0sZ0JBQWdCO0FBQUEsSUFDL0I7QUFBQSxJQUNBO0FBQUEsSUFDQSxJQUFJLE9BQU87QUFDVCxhQUFPO0FBQUEsSUFDVDtBQUFBLElBQ0EsSUFBSSxLQUFLO0FBQ1AsYUFBTztBQUFBLElBQ1Q7QUFBQSxJQUNBLFlBQVksVUFBVSw4QkFBOEIsT0FBTyxLQUFLO0FBQzlELFlBQU0sT0FBTztBQUNiLFdBQUssVUFBVTtBQUNmLFVBQUksZ0JBQWdCO0FBQ2xCLGNBQU0sa0JBQWtCLE1BQU0sT0FBTyxlQUFlO0FBQUEsTUFDdEQ7QUFDQSxpQkFBVyxPQUFPLE9BQU87QUFDdkIsWUFBSSxFQUFFLE9BQU8sT0FBTztBQUNsQixlQUFLLEdBQUcsSUFBSSxNQUFNLEdBQUc7QUFBQSxRQUN2QjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsSUFDQSxPQUFPLE9BQU87QUFDWixhQUFPO0FBQUEsUUFDTCxHQUFHO0FBQUEsUUFDSCxNQUFNLEtBQUs7QUFBQSxRQUNYLFNBQVMsS0FBSztBQUFBLFFBQ2QsSUFBSTtBQUFBLFFBQ0osT0FBTyxVQUFVLFFBQVEsS0FBSyxRQUFRO0FBQUEsTUFDeEM7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUdBLFdBQVMsWUFBWSxLQUFLLE9BQU87QUFDL0IsUUFBSSxVQUFVLEtBQUssS0FBSyxTQUFTO0FBQ2pDLFFBQUksT0FBTyxLQUFLLEtBQUssTUFBTTtBQUMzQixjQUFVLFVBQVUsVUFBVSxPQUFPO0FBQ3JDLFVBQU0sS0FBSyxLQUFLLFFBQVE7QUFDeEIsWUFBUSxNQUFNLElBQUksU0FBUyxHQUFHO0FBQzVCLGFBQU8sRUFBRSxZQUFZO0FBQUEsSUFDdkIsQ0FBQztBQUNELFVBQU0sS0FBSztBQUNYLFFBQUksTUFBTSxNQUFNLElBQUksU0FBUyxHQUFHLE9BQU87QUFDckMsVUFBSSxNQUFNLENBQUMsQ0FBQyxLQUFLLEtBQUssS0FBSyxLQUFLLEdBQUcsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxPQUFPO0FBQ25FLFVBQUksS0FBSyxNQUFNLFNBQVMsS0FBSyxVQUFVLE1BQU0sU0FBUyxJQUFJLFFBQVE7QUFDbEUsYUFBTyxLQUFLLE1BQU0sTUFBTTtBQUFBLElBQzFCLENBQUMsRUFBRSxLQUFLLElBQUk7QUFDWixRQUFJLFVBQVUsS0FBSyxHQUFHLEVBQUUsWUFBWTtBQUNwQyxRQUFJLENBQUMsTUFBTSxLQUFLLFNBQVMsVUFBVTtBQUNqQyxhQUFPLFlBQVk7QUFBQSxJQUNyQixDQUFDLEdBQUc7QUFDRixZQUFNLElBQUk7QUFBQSxRQUNSLFVBQVUsMkJBQTJCLE1BQU0sV0FBVyxVQUFVO0FBQUEsUUFDaEU7QUFBQSxRQUNBO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0EsU0FBTyxhQUFhLGFBQWE7QUFHakMsV0FBUyxVQUFVLEtBQUssTUFBTTtBQUM1QixXQUFPLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxJQUFJLElBQUk7QUFBQSxFQUN6QztBQUNBLFNBQU8sV0FBVyxXQUFXO0FBRzdCLE1BQUksYUFBYTtBQUFBLElBQ2YsTUFBTSxDQUFDLEtBQUssSUFBSTtBQUFBLElBQ2hCLEtBQUssQ0FBQyxLQUFLLElBQUk7QUFBQSxJQUNmLFFBQVEsQ0FBQyxLQUFLLElBQUk7QUFBQSxJQUNsQixXQUFXLENBQUMsS0FBSyxJQUFJO0FBQUE7QUFBQSxJQUVyQixTQUFTLENBQUMsS0FBSyxJQUFJO0FBQUEsSUFDbkIsUUFBUSxDQUFDLEtBQUssSUFBSTtBQUFBLElBQ2xCLFFBQVEsQ0FBQyxLQUFLLElBQUk7QUFBQTtBQUFBO0FBQUEsSUFHbEIsT0FBTyxDQUFDLE1BQU0sSUFBSTtBQUFBLElBQ2xCLEtBQUssQ0FBQyxNQUFNLElBQUk7QUFBQSxJQUNoQixPQUFPLENBQUMsTUFBTSxJQUFJO0FBQUEsSUFDbEIsUUFBUSxDQUFDLE1BQU0sSUFBSTtBQUFBLElBQ25CLE1BQU0sQ0FBQyxNQUFNLElBQUk7QUFBQSxJQUNqQixTQUFTLENBQUMsTUFBTSxJQUFJO0FBQUEsSUFDcEIsTUFBTSxDQUFDLE1BQU0sSUFBSTtBQUFBLElBQ2pCLE9BQU8sQ0FBQyxNQUFNLElBQUk7QUFBQSxJQUNsQixhQUFhLENBQUMsUUFBUSxJQUFJO0FBQUEsSUFDMUIsV0FBVyxDQUFDLFFBQVEsSUFBSTtBQUFBLElBQ3hCLGFBQWEsQ0FBQyxRQUFRLElBQUk7QUFBQSxJQUMxQixjQUFjLENBQUMsUUFBUSxJQUFJO0FBQUEsSUFDM0IsWUFBWSxDQUFDLFFBQVEsSUFBSTtBQUFBLElBQ3pCLGVBQWUsQ0FBQyxRQUFRLElBQUk7QUFBQSxJQUM1QixZQUFZLENBQUMsUUFBUSxJQUFJO0FBQUEsSUFDekIsYUFBYSxDQUFDLFFBQVEsSUFBSTtBQUFBLElBQzFCLE1BQU0sQ0FBQyxNQUFNLElBQUk7QUFBQSxFQUNuQjtBQUNBLE1BQUksU0FBUztBQUFBLElBQ1gsU0FBUztBQUFBLElBQ1QsUUFBUTtBQUFBLElBQ1IsUUFBUTtBQUFBLElBQ1IsU0FBUztBQUFBLElBQ1QsV0FBVztBQUFBLElBQ1gsTUFBTTtBQUFBLElBQ04sUUFBUTtBQUFBLElBQ1IsUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLElBQ04sUUFBUTtBQUFBLEVBQ1Y7QUFDQSxNQUFJLFlBQVk7QUFDaEIsV0FBUyxTQUFTLE9BQU8sV0FBVztBQUNsQyxVQUFNLFFBQVEsV0FBVyxPQUFPLFNBQVMsQ0FBQyxLQUFLLFdBQVcsU0FBUyxLQUFLO0FBQ3hFLFFBQUksQ0FBQyxPQUFPO0FBQ1YsYUFBTyxPQUFPLEtBQUs7QUFBQSxJQUNyQjtBQUNBLFdBQU8sUUFBUSxNQUFNLENBQUMsQ0FBQyxJQUFJLE9BQU8sS0FBSyxDQUFDLFFBQVEsTUFBTSxDQUFDLENBQUM7QUFBQSxFQUMxRDtBQUNBLFNBQU8sVUFBVSxVQUFVO0FBQzNCLFdBQVMsaUJBQWlCO0FBQUEsSUFDeEIsYUFBYTtBQUFBLElBQ2IsUUFBUTtBQUFBLElBQ1IsU0FBUztBQUFBLElBQ1QsZ0JBQWdCO0FBQUEsSUFDaEIsWUFBWTtBQUFBLElBQ1osaUJBQWlCO0FBQUEsSUFDakIsY0FBYztBQUFBLElBQ2QsT0FBTyxDQUFDO0FBQUE7QUFBQSxJQUVSLFVBQVUsWUFBWTtBQUFBLElBQ3RCLFVBQVU7QUFBQSxFQUNaLElBQUksQ0FBQyxHQUFHLFVBQVU7QUFDaEIsVUFBTUUsV0FBVTtBQUFBLE1BQ2QsWUFBWSxRQUFRLFVBQVU7QUFBQSxNQUM5QixPQUFPLE9BQU8sS0FBSztBQUFBLE1BQ25CLFFBQVEsUUFBUSxNQUFNO0FBQUEsTUFDdEIsZUFBZSxRQUFRLGFBQWE7QUFBQSxNQUNwQyxXQUFXLFFBQVEsU0FBUztBQUFBLE1BQzVCLGdCQUFnQixPQUFPLGNBQWM7QUFBQSxNQUNyQyxhQUFhLE9BQU8sV0FBVztBQUFBLE1BQy9CLFVBQVUsT0FBTyxTQUFTO0FBQUEsTUFDMUI7QUFBQSxNQUNBLFNBQVM7QUFBQSxNQUNUO0FBQUEsSUFDRjtBQUNBLFFBQUlBLFNBQVEsUUFBUTtBQUNsQixNQUFBQSxTQUFRLFVBQVU7QUFBQSxJQUNwQjtBQUNBLFdBQU9BO0FBQUEsRUFDVDtBQUNBLFNBQU8sa0JBQWtCLGtCQUFrQjtBQUMzQyxXQUFTLGdCQUFnQixNQUFNO0FBQzdCLFdBQU8sUUFBUSxZQUFZLFFBQVE7QUFBQSxFQUNyQztBQUNBLFNBQU8saUJBQWlCLGlCQUFpQjtBQUN6QyxXQUFTLFNBQVMsUUFBUSxRQUFRLE9BQU8sV0FBVztBQUNsRCxhQUFTLE9BQU8sTUFBTTtBQUN0QixVQUFNLGFBQWEsS0FBSztBQUN4QixVQUFNLGVBQWUsT0FBTztBQUM1QixRQUFJLGFBQWEsVUFBVSxlQUFlLFlBQVk7QUFDcEQsYUFBTztBQUFBLElBQ1Q7QUFDQSxRQUFJLGVBQWUsVUFBVSxlQUFlLFlBQVk7QUFDdEQsVUFBSUMsT0FBTSxTQUFTO0FBQ25CLFVBQUlBLE9BQU0sS0FBSyxnQkFBZ0IsT0FBT0EsT0FBTSxDQUFDLENBQUMsR0FBRztBQUMvQyxRQUFBQSxPQUFNQSxPQUFNO0FBQUEsTUFDZDtBQUNBLGFBQU8sR0FBRyxPQUFPLE1BQU0sR0FBR0EsSUFBRyxDQUFDLEdBQUcsSUFBSTtBQUFBLElBQ3ZDO0FBQ0EsV0FBTztBQUFBLEVBQ1Q7QUFDQSxTQUFPLFVBQVUsVUFBVTtBQUMzQixXQUFTLFlBQVksTUFBTUQsVUFBUyxhQUFhLFlBQVksTUFBTTtBQUNqRSxrQkFBYyxlQUFlQSxTQUFRO0FBQ3JDLFVBQU1FLFFBQU8sS0FBSztBQUNsQixRQUFJQSxVQUFTO0FBQ1gsYUFBTztBQUNULFVBQU0saUJBQWlCRixTQUFRO0FBQy9CLFFBQUksU0FBUztBQUNiLFFBQUksT0FBTztBQUNYLFFBQUksWUFBWTtBQUNoQixhQUFTLElBQUksR0FBRyxJQUFJRSxPQUFNLEtBQUssR0FBRztBQUNoQyxZQUFNLE9BQU8sSUFBSSxNQUFNLEtBQUs7QUFDNUIsWUFBTSxlQUFlLElBQUksTUFBTSxLQUFLO0FBQ3BDLGtCQUFZLEdBQUcsU0FBUyxJQUFJLEtBQUssU0FBUyxDQUFDO0FBQzNDLFlBQU0sUUFBUSxLQUFLLENBQUM7QUFDcEIsTUFBQUYsU0FBUSxXQUFXLGlCQUFpQixPQUFPLFVBQVUsT0FBTyxJQUFJLFVBQVU7QUFDMUUsWUFBTSxTQUFTLFFBQVEsWUFBWSxPQUFPQSxRQUFPLEtBQUssT0FBTyxLQUFLO0FBQ2xFLFlBQU0sYUFBYSxPQUFPLFNBQVMsT0FBTztBQUMxQyxZQUFNLGtCQUFrQixhQUFhLFVBQVU7QUFDL0MsVUFBSSxRQUFRLGFBQWEsa0JBQWtCLE9BQU8sU0FBUyxVQUFVLFVBQVUsZ0JBQWdCO0FBQzdGO0FBQUEsTUFDRjtBQUNBLFVBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLGtCQUFrQixnQkFBZ0I7QUFDOUQ7QUFBQSxNQUNGO0FBQ0EsYUFBTyxPQUFPLEtBQUssWUFBWSxLQUFLLElBQUksQ0FBQyxHQUFHQSxRQUFPLEtBQUssZUFBZSxLQUFLO0FBQzVFLFVBQUksQ0FBQyxRQUFRLGdCQUFnQixrQkFBa0Isa0JBQWtCLGFBQWEsS0FBSyxTQUFTLGdCQUFnQjtBQUMxRztBQUFBLE1BQ0Y7QUFDQSxnQkFBVTtBQUNWLFVBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLGFBQWEsS0FBSyxVQUFVLGdCQUFnQjtBQUN4RSxvQkFBWSxHQUFHLFNBQVMsSUFBSSxLQUFLLFNBQVMsSUFBSSxDQUFDO0FBQy9DO0FBQUEsTUFDRjtBQUNBLGtCQUFZO0FBQUEsSUFDZDtBQUNBLFdBQU8sR0FBRyxNQUFNLEdBQUcsU0FBUztBQUFBLEVBQzlCO0FBQ0EsU0FBTyxhQUFhLGFBQWE7QUFDakMsV0FBUyxnQkFBZ0IsS0FBSztBQUM1QixRQUFJLElBQUksTUFBTSwwQkFBMEIsR0FBRztBQUN6QyxhQUFPO0FBQUEsSUFDVDtBQUNBLFdBQU8sS0FBSyxVQUFVLEdBQUcsRUFBRSxRQUFRLE1BQU0sS0FBSyxFQUFFLFFBQVEsUUFBUSxHQUFHLEVBQUUsUUFBUSxZQUFZLEdBQUc7QUFBQSxFQUM5RjtBQUNBLFNBQU8saUJBQWlCLGlCQUFpQjtBQUN6QyxXQUFTLGdCQUFnQixDQUFDLEtBQUssS0FBSyxHQUFHQSxVQUFTO0FBQzlDLElBQUFBLFNBQVEsWUFBWTtBQUNwQixRQUFJLE9BQU8sUUFBUSxVQUFVO0FBQzNCLFlBQU0sZ0JBQWdCLEdBQUc7QUFBQSxJQUMzQixXQUFXLE9BQU8sUUFBUSxVQUFVO0FBQ2xDLFlBQU0sSUFBSUEsU0FBUSxRQUFRLEtBQUtBLFFBQU8sQ0FBQztBQUFBLElBQ3pDO0FBQ0EsSUFBQUEsU0FBUSxZQUFZLElBQUk7QUFDeEIsWUFBUUEsU0FBUSxRQUFRLE9BQU9BLFFBQU87QUFDdEMsV0FBTyxHQUFHLEdBQUcsS0FBSyxLQUFLO0FBQUEsRUFDekI7QUFDQSxTQUFPLGlCQUFpQixpQkFBaUI7QUFHekMsV0FBUyxhQUFhLE9BQU9BLFVBQVM7QUFDcEMsVUFBTSxxQkFBcUIsT0FBTyxLQUFLLEtBQUssRUFBRSxNQUFNLE1BQU0sTUFBTTtBQUNoRSxRQUFJLENBQUMsTUFBTSxVQUFVLENBQUMsbUJBQW1CO0FBQ3ZDLGFBQU87QUFDVCxJQUFBQSxTQUFRLFlBQVk7QUFDcEIsVUFBTSxlQUFlLFlBQVksT0FBT0EsUUFBTztBQUMvQyxJQUFBQSxTQUFRLFlBQVksYUFBYTtBQUNqQyxRQUFJLG1CQUFtQjtBQUN2QixRQUFJLG1CQUFtQixRQUFRO0FBQzdCLHlCQUFtQixZQUFZLG1CQUFtQixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHQSxVQUFTLGVBQWU7QUFBQSxJQUM3RztBQUNBLFdBQU8sS0FBSyxZQUFZLEdBQUcsbUJBQW1CLEtBQUssZ0JBQWdCLEtBQUssRUFBRTtBQUFBLEVBQzVFO0FBQ0EsU0FBTyxjQUFjLGNBQWM7QUFHbkMsTUFBSSxlQUErQix1QkFBTyxDQUFDLFVBQVU7QUFDbkQsUUFBSSxPQUFPLFdBQVcsY0FBYyxpQkFBaUIsUUFBUTtBQUMzRCxhQUFPO0FBQUEsSUFDVDtBQUNBLFFBQUksTUFBTSxPQUFPLFdBQVcsR0FBRztBQUM3QixhQUFPLE1BQU0sT0FBTyxXQUFXO0FBQUEsSUFDakM7QUFDQSxXQUFPLE1BQU0sWUFBWTtBQUFBLEVBQzNCLEdBQUcsY0FBYztBQUNqQixXQUFTLGtCQUFrQixPQUFPQSxVQUFTO0FBQ3pDLFVBQU0sT0FBTyxhQUFhLEtBQUs7QUFDL0IsSUFBQUEsU0FBUSxZQUFZLEtBQUssU0FBUztBQUNsQyxVQUFNLHFCQUFxQixPQUFPLEtBQUssS0FBSyxFQUFFLE1BQU0sTUFBTSxNQUFNO0FBQ2hFLFFBQUksQ0FBQyxNQUFNLFVBQVUsQ0FBQyxtQkFBbUI7QUFDdkMsYUFBTyxHQUFHLElBQUk7QUFDaEIsUUFBSSxTQUFTO0FBQ2IsYUFBUyxJQUFJLEdBQUcsSUFBSSxNQUFNLFFBQVEsS0FBSztBQUNyQyxZQUFNLFNBQVMsR0FBR0EsU0FBUSxRQUFRLFNBQVMsTUFBTSxDQUFDLEdBQUdBLFNBQVEsUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLE1BQU0sTUFBTSxTQUFTLElBQUksS0FBSyxJQUFJO0FBQ3RILE1BQUFBLFNBQVEsWUFBWSxPQUFPO0FBQzNCLFVBQUksTUFBTSxDQUFDLE1BQU0sTUFBTSxVQUFVQSxTQUFRLFlBQVksR0FBRztBQUN0RCxrQkFBVSxHQUFHLFNBQVMsSUFBSSxNQUFNLFNBQVMsTUFBTSxDQUFDLElBQUksQ0FBQztBQUNyRDtBQUFBLE1BQ0Y7QUFDQSxnQkFBVTtBQUFBLElBQ1o7QUFDQSxRQUFJLG1CQUFtQjtBQUN2QixRQUFJLG1CQUFtQixRQUFRO0FBQzdCLHlCQUFtQixZQUFZLG1CQUFtQixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHQSxVQUFTLGVBQWU7QUFBQSxJQUM3RztBQUNBLFdBQU8sR0FBRyxJQUFJLEtBQUssTUFBTSxHQUFHLG1CQUFtQixLQUFLLGdCQUFnQixLQUFLLEVBQUU7QUFBQSxFQUM3RTtBQUNBLFNBQU8sbUJBQW1CLG1CQUFtQjtBQUc3QyxXQUFTLFlBQVksWUFBWUEsVUFBUztBQUN4QyxVQUFNLHVCQUF1QixXQUFXLE9BQU87QUFDL0MsUUFBSSx5QkFBeUIsTUFBTTtBQUNqQyxhQUFPO0FBQUEsSUFDVDtBQUNBLFVBQU0sUUFBUSxxQkFBcUIsTUFBTSxHQUFHO0FBQzVDLFVBQU0sT0FBTyxNQUFNLENBQUM7QUFDcEIsV0FBT0EsU0FBUSxRQUFRLEdBQUcsSUFBSSxJQUFJLFNBQVMsTUFBTSxDQUFDLEdBQUdBLFNBQVEsV0FBVyxLQUFLLFNBQVMsQ0FBQyxDQUFDLElBQUksTUFBTTtBQUFBLEVBQ3BHO0FBQ0EsU0FBTyxhQUFhLGFBQWE7QUFHakMsV0FBUyxnQkFBZ0IsTUFBTUEsVUFBUztBQUN0QyxVQUFNLGVBQWUsS0FBSyxPQUFPLFdBQVcsS0FBSztBQUNqRCxVQUFNLE9BQU8sS0FBSztBQUNsQixRQUFJLENBQUMsTUFBTTtBQUNULGFBQU9BLFNBQVEsUUFBUSxJQUFJLFlBQVksS0FBSyxTQUFTO0FBQUEsSUFDdkQ7QUFDQSxXQUFPQSxTQUFRLFFBQVEsSUFBSSxZQUFZLElBQUksU0FBUyxNQUFNQSxTQUFRLFdBQVcsRUFBRSxDQUFDLEtBQUssU0FBUztBQUFBLEVBQ2hHO0FBQ0EsU0FBTyxpQkFBaUIsaUJBQWlCO0FBR3pDLFdBQVMsZ0JBQWdCLENBQUMsS0FBSyxLQUFLLEdBQUdBLFVBQVM7QUFDOUMsSUFBQUEsU0FBUSxZQUFZO0FBQ3BCLFVBQU1BLFNBQVEsUUFBUSxLQUFLQSxRQUFPO0FBQ2xDLElBQUFBLFNBQVEsWUFBWSxJQUFJO0FBQ3hCLFlBQVFBLFNBQVEsUUFBUSxPQUFPQSxRQUFPO0FBQ3RDLFdBQU8sR0FBRyxHQUFHLE9BQU8sS0FBSztBQUFBLEVBQzNCO0FBQ0EsU0FBTyxpQkFBaUIsaUJBQWlCO0FBQ3pDLFdBQVMsYUFBYSxLQUFLO0FBQ3pCLFVBQU0sVUFBVSxDQUFDO0FBQ2pCLFFBQUksUUFBUSxDQUFDLE9BQU8sUUFBUTtBQUMxQixjQUFRLEtBQUssQ0FBQyxLQUFLLEtBQUssQ0FBQztBQUFBLElBQzNCLENBQUM7QUFDRCxXQUFPO0FBQUEsRUFDVDtBQUNBLFNBQU8sY0FBYyxjQUFjO0FBQ25DLFdBQVMsV0FBVyxLQUFLQSxVQUFTO0FBQ2hDLFVBQU1FLFFBQU8sSUFBSSxPQUFPO0FBQ3hCLFFBQUlBLFNBQVEsR0FBRztBQUNiLGFBQU87QUFBQSxJQUNUO0FBQ0EsSUFBQUYsU0FBUSxZQUFZO0FBQ3BCLFdBQU8sUUFBUSxZQUFZLGFBQWEsR0FBRyxHQUFHQSxVQUFTLGVBQWUsQ0FBQztBQUFBLEVBQ3pFO0FBQ0EsU0FBTyxZQUFZLFlBQVk7QUFHL0IsTUFBSUcsU0FBUSxPQUFPLFVBQVUsQ0FBQyxNQUFNLE1BQU07QUFDMUMsV0FBUyxjQUFjLFFBQVFILFVBQVM7QUFDdEMsUUFBSUcsT0FBTSxNQUFNLEdBQUc7QUFDakIsYUFBT0gsU0FBUSxRQUFRLE9BQU8sUUFBUTtBQUFBLElBQ3hDO0FBQ0EsUUFBSSxXQUFXLFVBQVU7QUFDdkIsYUFBT0EsU0FBUSxRQUFRLFlBQVksUUFBUTtBQUFBLElBQzdDO0FBQ0EsUUFBSSxXQUFXLFdBQVc7QUFDeEIsYUFBT0EsU0FBUSxRQUFRLGFBQWEsUUFBUTtBQUFBLElBQzlDO0FBQ0EsUUFBSSxXQUFXLEdBQUc7QUFDaEIsYUFBT0EsU0FBUSxRQUFRLElBQUksV0FBVyxXQUFXLE9BQU8sTUFBTSxRQUFRO0FBQUEsSUFDeEU7QUFDQSxXQUFPQSxTQUFRLFFBQVEsU0FBUyxPQUFPLE1BQU0sR0FBR0EsU0FBUSxRQUFRLEdBQUcsUUFBUTtBQUFBLEVBQzdFO0FBQ0EsU0FBTyxlQUFlLGVBQWU7QUFHckMsV0FBUyxjQUFjLFFBQVFBLFVBQVM7QUFDdEMsUUFBSSxPQUFPLFNBQVMsT0FBTyxTQUFTLEdBQUdBLFNBQVEsV0FBVyxDQUFDO0FBQzNELFFBQUksU0FBUztBQUNYLGNBQVE7QUFDVixXQUFPQSxTQUFRLFFBQVEsTUFBTSxRQUFRO0FBQUEsRUFDdkM7QUFDQSxTQUFPLGVBQWUsZUFBZTtBQUdyQyxXQUFTLGNBQWMsT0FBT0EsVUFBUztBQUNyQyxVQUFNLFFBQVEsTUFBTSxTQUFTLEVBQUUsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUMzQyxVQUFNLGVBQWVBLFNBQVEsWUFBWSxJQUFJLE1BQU07QUFDbkQsVUFBTSxTQUFTLE1BQU07QUFDckIsV0FBT0EsU0FBUSxRQUFRLElBQUksU0FBUyxRQUFRLFlBQVksQ0FBQyxJQUFJLEtBQUssSUFBSSxRQUFRO0FBQUEsRUFDaEY7QUFDQSxTQUFPLGVBQWUsZUFBZTtBQUdyQyxXQUFTLGFBQWEsTUFBTTtBQUMxQixVQUFNLFNBQVMsQ0FBQztBQUNoQixTQUFLLFFBQVEsQ0FBQyxVQUFVO0FBQ3RCLGFBQU8sS0FBSyxLQUFLO0FBQUEsSUFDbkIsQ0FBQztBQUNELFdBQU87QUFBQSxFQUNUO0FBQ0EsU0FBTyxjQUFjLGNBQWM7QUFDbkMsV0FBUyxXQUFXLE1BQU1BLFVBQVM7QUFDakMsUUFBSSxLQUFLLFNBQVM7QUFDaEIsYUFBTztBQUNULElBQUFBLFNBQVEsWUFBWTtBQUNwQixXQUFPLFFBQVEsWUFBWSxhQUFhLElBQUksR0FBR0EsUUFBTyxDQUFDO0FBQUEsRUFDekQ7QUFDQSxTQUFPLFlBQVksWUFBWTtBQUcvQixNQUFJLG9CQUFvQixJQUFJLE9BQU8sbUpBQW1KLEdBQUc7QUFDekwsTUFBSSxtQkFBbUI7QUFBQSxJQUNyQixNQUFNO0FBQUEsSUFDTixLQUFLO0FBQUEsSUFDTCxNQUFNO0FBQUEsSUFDTixNQUFNO0FBQUEsSUFDTixNQUFNO0FBQUEsSUFDTixLQUFLO0FBQUEsSUFDTCxNQUFNO0FBQUEsRUFDUjtBQUNBLE1BQUksTUFBTTtBQUNWLE1BQUksZ0JBQWdCO0FBQ3BCLFdBQVNJLFFBQU8sTUFBTTtBQUNwQixXQUFPLGlCQUFpQixJQUFJLEtBQUssTUFBTSxPQUFPLEtBQUssV0FBVyxDQUFDLEVBQUUsU0FBUyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDO0FBQUEsRUFDeEc7QUFDQSxTQUFPQSxTQUFRLFFBQVE7QUFDdkIsV0FBUyxjQUFjLFFBQVFKLFVBQVM7QUFDdEMsUUFBSSxrQkFBa0IsS0FBSyxNQUFNLEdBQUc7QUFDbEMsZUFBUyxPQUFPLFFBQVEsbUJBQW1CSSxPQUFNO0FBQUEsSUFDbkQ7QUFDQSxXQUFPSixTQUFRLFFBQVEsSUFBSSxTQUFTLFFBQVFBLFNBQVEsV0FBVyxDQUFDLENBQUMsS0FBSyxRQUFRO0FBQUEsRUFDaEY7QUFDQSxTQUFPLGVBQWUsZUFBZTtBQUdyQyxXQUFTLGNBQWMsT0FBTztBQUM1QixRQUFJLGlCQUFpQixPQUFPLFdBQVc7QUFDckMsYUFBTyxNQUFNLGNBQWMsVUFBVSxNQUFNLFdBQVcsTUFBTTtBQUFBLElBQzlEO0FBQ0EsV0FBTyxNQUFNLFNBQVM7QUFBQSxFQUN4QjtBQUNBLFNBQU8sZUFBZSxlQUFlO0FBR3JDLE1BQUksa0JBQWtDLHVCQUFPLE1BQU0sbUJBQW1CLGlCQUFpQjtBQUN2RixNQUFJO0FBQ0YsVUFBTSxFQUFFLG1CQUFtQixVQUFVLFVBQVUsSUFBSSxRQUFRLFFBQVEsTUFBTTtBQUN6RSxRQUFJLE1BQU0sUUFBUSxrQkFBa0IsUUFBUSxRQUFRLENBQUMsQ0FBQyxHQUFHO0FBQ3ZELHdCQUFrQyx1QkFBTyxDQUFDLE9BQU9BLGFBQVk7QUFDM0QsY0FBTSxDQUFDLE9BQU8sVUFBVSxJQUFJLGtCQUFrQixLQUFLO0FBQ25ELFlBQUksVUFBVSxVQUFVO0FBQ3RCLGlCQUFPO0FBQUEsUUFDVDtBQUNBLGVBQU8sVUFBVSxVQUFVLFlBQVksTUFBTSxFQUFFLElBQUlBLFNBQVEsUUFBUSxZQUFZQSxRQUFPLENBQUM7QUFBQSxNQUN6RixHQUFHLGlCQUFpQjtBQUFBLElBQ3RCO0FBQUEsRUFDRixTQUFTLFNBQVM7QUFBQSxFQUNsQjtBQUNBLE1BQUksa0JBQWtCO0FBR3RCLFdBQVMsY0FBYyxRQUFRQSxVQUFTO0FBQ3RDLFVBQU0sYUFBYSxPQUFPLG9CQUFvQixNQUFNO0FBQ3BELFVBQU0sVUFBVSxPQUFPLHdCQUF3QixPQUFPLHNCQUFzQixNQUFNLElBQUksQ0FBQztBQUN2RixRQUFJLFdBQVcsV0FBVyxLQUFLLFFBQVEsV0FBVyxHQUFHO0FBQ25ELGFBQU87QUFBQSxJQUNUO0FBQ0EsSUFBQUEsU0FBUSxZQUFZO0FBQ3BCLElBQUFBLFNBQVEsT0FBT0EsU0FBUSxRQUFRLENBQUM7QUFDaEMsUUFBSUEsU0FBUSxLQUFLLFNBQVMsTUFBTSxHQUFHO0FBQ2pDLGFBQU87QUFBQSxJQUNUO0FBQ0EsSUFBQUEsU0FBUSxLQUFLLEtBQUssTUFBTTtBQUN4QixVQUFNLG1CQUFtQixZQUFZLFdBQVcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLE9BQU8sR0FBRyxDQUFDLENBQUMsR0FBR0EsVUFBUyxlQUFlO0FBQzFHLFVBQU0saUJBQWlCLFlBQVksUUFBUSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssT0FBTyxHQUFHLENBQUMsQ0FBQyxHQUFHQSxVQUFTLGVBQWU7QUFDckcsSUFBQUEsU0FBUSxLQUFLLElBQUk7QUFDakIsUUFBSSxNQUFNO0FBQ1YsUUFBSSxvQkFBb0IsZ0JBQWdCO0FBQ3RDLFlBQU07QUFBQSxJQUNSO0FBQ0EsV0FBTyxLQUFLLGdCQUFnQixHQUFHLEdBQUcsR0FBRyxjQUFjO0FBQUEsRUFDckQ7QUFDQSxTQUFPLGVBQWUsZUFBZTtBQUdyQyxNQUFJLGNBQWMsT0FBTyxXQUFXLGVBQWUsT0FBTyxjQUFjLE9BQU8sY0FBYztBQUM3RixXQUFTLGFBQWEsT0FBT0EsVUFBUztBQUNwQyxRQUFJLE9BQU87QUFDWCxRQUFJLGVBQWUsZUFBZSxPQUFPO0FBQ3ZDLGFBQU8sTUFBTSxXQUFXO0FBQUEsSUFDMUI7QUFDQSxXQUFPLFFBQVEsTUFBTSxZQUFZO0FBQ2pDLFFBQUksQ0FBQyxRQUFRLFNBQVMsVUFBVTtBQUM5QixhQUFPO0FBQUEsSUFDVDtBQUNBLElBQUFBLFNBQVEsWUFBWSxLQUFLO0FBQ3pCLFdBQU8sR0FBRyxJQUFJLEdBQUcsY0FBYyxPQUFPQSxRQUFPLENBQUM7QUFBQSxFQUNoRDtBQUNBLFNBQU8sY0FBYyxjQUFjO0FBR25DLFdBQVMsaUJBQWlCLE1BQU1BLFVBQVM7QUFDdkMsUUFBSSxLQUFLLFdBQVc7QUFDbEIsYUFBTztBQUNULElBQUFBLFNBQVEsWUFBWTtBQUNwQixXQUFPLGNBQWMsWUFBWSxNQUFNQSxRQUFPLENBQUM7QUFBQSxFQUNqRDtBQUNBLFNBQU8sa0JBQWtCLGtCQUFrQjtBQUczQyxNQUFJLFlBQVk7QUFBQSxJQUNkO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0Y7QUFDQSxXQUFTLGVBQWUsT0FBT0EsVUFBUztBQUN0QyxVQUFNLGFBQWEsT0FBTyxvQkFBb0IsS0FBSyxFQUFFLE9BQU8sQ0FBQyxRQUFRLFVBQVUsUUFBUSxHQUFHLE1BQU0sRUFBRTtBQUNsRyxVQUFNLE9BQU8sTUFBTTtBQUNuQixJQUFBQSxTQUFRLFlBQVksS0FBSztBQUN6QixRQUFJLFVBQVU7QUFDZCxRQUFJLE9BQU8sTUFBTSxZQUFZLFVBQVU7QUFDckMsZ0JBQVUsU0FBUyxNQUFNLFNBQVNBLFNBQVEsUUFBUTtBQUFBLElBQ3BELE9BQU87QUFDTCxpQkFBVyxRQUFRLFNBQVM7QUFBQSxJQUM5QjtBQUNBLGNBQVUsVUFBVSxLQUFLLE9BQU8sS0FBSztBQUNyQyxJQUFBQSxTQUFRLFlBQVksUUFBUSxTQUFTO0FBQ3JDLElBQUFBLFNBQVEsT0FBT0EsU0FBUSxRQUFRLENBQUM7QUFDaEMsUUFBSUEsU0FBUSxLQUFLLFNBQVMsS0FBSyxHQUFHO0FBQ2hDLGFBQU87QUFBQSxJQUNUO0FBQ0EsSUFBQUEsU0FBUSxLQUFLLEtBQUssS0FBSztBQUN2QixVQUFNLG1CQUFtQixZQUFZLFdBQVcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBR0EsVUFBUyxlQUFlO0FBQ3pHLFdBQU8sR0FBRyxJQUFJLEdBQUcsT0FBTyxHQUFHLG1CQUFtQixNQUFNLGdCQUFnQixPQUFPLEVBQUU7QUFBQSxFQUMvRTtBQUNBLFNBQU8sZ0JBQWdCLGVBQWU7QUFHdEMsV0FBUyxpQkFBaUIsQ0FBQyxLQUFLLEtBQUssR0FBR0EsVUFBUztBQUMvQyxJQUFBQSxTQUFRLFlBQVk7QUFDcEIsUUFBSSxDQUFDLE9BQU87QUFDVixhQUFPLEdBQUdBLFNBQVEsUUFBUSxPQUFPLEdBQUcsR0FBRyxRQUFRLENBQUM7QUFBQSxJQUNsRDtBQUNBLFdBQU8sR0FBR0EsU0FBUSxRQUFRLE9BQU8sR0FBRyxHQUFHLFFBQVEsQ0FBQyxJQUFJQSxTQUFRLFFBQVEsSUFBSSxLQUFLLEtBQUssUUFBUSxDQUFDO0FBQUEsRUFDN0Y7QUFDQSxTQUFPLGtCQUFrQixrQkFBa0I7QUFDM0MsV0FBUyxzQkFBc0IsWUFBWUEsVUFBUztBQUNsRCxXQUFPLFlBQVksWUFBWUEsVUFBUyxhQUFhLElBQUk7QUFBQSxFQUMzRDtBQUNBLFNBQU8sdUJBQXVCLHVCQUF1QjtBQUNyRCxXQUFTLFlBQVksU0FBU0EsVUFBUztBQUNyQyxVQUFNLGFBQWEsUUFBUSxrQkFBa0I7QUFDN0MsVUFBTSxPQUFPLFFBQVEsUUFBUSxZQUFZO0FBQ3pDLFVBQU0sT0FBT0EsU0FBUSxRQUFRLElBQUksSUFBSSxJQUFJLFNBQVM7QUFDbEQsVUFBTSxZQUFZQSxTQUFRLFFBQVEsS0FBSyxTQUFTO0FBQ2hELFVBQU0sT0FBT0EsU0FBUSxRQUFRLEtBQUssSUFBSSxLQUFLLFNBQVM7QUFDcEQsSUFBQUEsU0FBUSxZQUFZLEtBQUssU0FBUyxJQUFJO0FBQ3RDLFFBQUksbUJBQW1CO0FBQ3ZCLFFBQUksV0FBVyxTQUFTLEdBQUc7QUFDekIsMEJBQW9CO0FBQ3BCLDBCQUFvQixZQUFZLFdBQVcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLFFBQVEsYUFBYSxHQUFHLENBQUMsQ0FBQyxHQUFHQSxVQUFTLGtCQUFrQixHQUFHO0FBQUEsSUFDM0g7QUFDQSxJQUFBQSxTQUFRLFlBQVksaUJBQWlCO0FBQ3JDLFVBQU0sWUFBWUEsU0FBUTtBQUMxQixRQUFJLFdBQVcsc0JBQXNCLFFBQVEsVUFBVUEsUUFBTztBQUM5RCxRQUFJLFlBQVksU0FBUyxTQUFTLFdBQVc7QUFDM0MsaUJBQVcsR0FBRyxTQUFTLElBQUksUUFBUSxTQUFTLE1BQU07QUFBQSxJQUNwRDtBQUNBLFdBQU8sR0FBRyxJQUFJLEdBQUcsZ0JBQWdCLEdBQUcsU0FBUyxHQUFHLFFBQVEsR0FBRyxJQUFJO0FBQUEsRUFDakU7QUFDQSxTQUFPLGFBQWEsYUFBYTtBQUdqQyxNQUFJLG1CQUFtQixPQUFPLFdBQVcsY0FBYyxPQUFPLE9BQU8sUUFBUTtBQUM3RSxNQUFJLGNBQWMsbUJBQW1CLE9BQU8sSUFBSSxjQUFjLElBQUk7QUFDbEUsTUFBSSxjQUFjO0FBQ2xCLE1BQUk7QUFDRixVQUFNLFdBQVcsYUFBYTtBQUM5QixrQkFBYyxTQUFTLFVBQVUsU0FBUyxRQUFRLFNBQVM7QUFBQSxFQUM3RCxTQUFTLGVBQWU7QUFDdEIsa0JBQWM7QUFBQSxFQUNoQjtBQUNBLE1BQUksaUJBQWlDLG9CQUFJLFFBQVE7QUFDakQsTUFBSSxlQUFlLENBQUM7QUFDcEIsTUFBSSxlQUFlO0FBQUEsSUFDakIsV0FBVyxDQUFDLE9BQU9BLGFBQVlBLFNBQVEsUUFBUSxhQUFhLFdBQVc7QUFBQSxJQUN2RSxNQUFNLENBQUMsT0FBT0EsYUFBWUEsU0FBUSxRQUFRLFFBQVEsTUFBTTtBQUFBLElBQ3hELFNBQVMsQ0FBQyxPQUFPQSxhQUFZQSxTQUFRLFFBQVEsT0FBTyxLQUFLLEdBQUcsU0FBUztBQUFBLElBQ3JFLFNBQVMsQ0FBQyxPQUFPQSxhQUFZQSxTQUFRLFFBQVEsT0FBTyxLQUFLLEdBQUcsU0FBUztBQUFBLElBQ3JFLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFVBQVU7QUFBQSxJQUNWLFVBQVU7QUFBQSxJQUNWLFFBQVE7QUFBQTtBQUFBLElBRVIsUUFBUTtBQUFBLElBQ1IsT0FBTztBQUFBLElBQ1AsTUFBTTtBQUFBLElBQ04sS0FBSztBQUFBLElBQ0wsS0FBSztBQUFBLElBQ0wsUUFBUTtBQUFBLElBQ1IsU0FBUztBQUFBO0FBQUEsSUFFVCxTQUFTLENBQUMsT0FBT0EsYUFBWUEsU0FBUSxRQUFRLG1CQUFtQixTQUFTO0FBQUEsSUFDekUsU0FBUyxDQUFDLE9BQU9BLGFBQVlBLFNBQVEsUUFBUSxtQkFBbUIsU0FBUztBQUFBLElBQ3pFLFdBQVc7QUFBQSxJQUNYLFdBQVc7QUFBQSxJQUNYLFlBQVk7QUFBQSxJQUNaLG1CQUFtQjtBQUFBLElBQ25CLFlBQVk7QUFBQSxJQUNaLGFBQWE7QUFBQSxJQUNiLFlBQVk7QUFBQSxJQUNaLGFBQWE7QUFBQSxJQUNiLGNBQWM7QUFBQSxJQUNkLGNBQWM7QUFBQSxJQUNkLFdBQVcsTUFBTTtBQUFBLElBQ2pCLFVBQVUsTUFBTTtBQUFBLElBQ2hCLGFBQWEsTUFBTTtBQUFBLElBQ25CLE9BQU87QUFBQSxJQUNQLGdCQUFnQjtBQUFBLElBQ2hCLFVBQVU7QUFBQSxFQUNaO0FBQ0EsTUFBSSxnQkFBZ0MsdUJBQU8sQ0FBQyxPQUFPQSxVQUFTLFVBQVU7QUFDcEUsUUFBSSxlQUFlLFNBQVMsT0FBTyxNQUFNLFdBQVcsTUFBTSxZQUFZO0FBQ3BFLGFBQU8sTUFBTSxXQUFXLEVBQUVBLFFBQU87QUFBQSxJQUNuQztBQUNBLFFBQUksZUFBZSxlQUFlLFNBQVMsT0FBTyxNQUFNLFdBQVcsTUFBTSxZQUFZO0FBQ25GLGFBQU8sTUFBTSxXQUFXLEVBQUVBLFNBQVEsT0FBT0EsUUFBTztBQUFBLElBQ2xEO0FBQ0EsUUFBSSxhQUFhLFNBQVMsT0FBTyxNQUFNLFlBQVksWUFBWTtBQUM3RCxhQUFPLE1BQU0sUUFBUUEsU0FBUSxPQUFPQSxRQUFPO0FBQUEsSUFDN0M7QUFDQSxRQUFJLGlCQUFpQixTQUFTLGVBQWUsSUFBSSxNQUFNLFdBQVcsR0FBRztBQUNuRSxhQUFPLGVBQWUsSUFBSSxNQUFNLFdBQVcsRUFBRSxPQUFPQSxRQUFPO0FBQUEsSUFDN0Q7QUFDQSxRQUFJLGFBQWEsS0FBSyxHQUFHO0FBQ3ZCLGFBQU8sYUFBYSxLQUFLLEVBQUUsT0FBT0EsUUFBTztBQUFBLElBQzNDO0FBQ0EsV0FBTztBQUFBLEVBQ1QsR0FBRyxlQUFlO0FBQ2xCLE1BQUksV0FBVyxPQUFPLFVBQVU7QUFDaEMsV0FBUyxRQUFRLE9BQU8sT0FBTyxDQUFDLEdBQUc7QUFDakMsVUFBTUEsV0FBVSxpQkFBaUIsTUFBTSxPQUFPO0FBQzlDLFVBQU0sRUFBRSxjQUFjLElBQUlBO0FBQzFCLFFBQUksUUFBUSxVQUFVLE9BQU8sU0FBUyxPQUFPO0FBQzdDLFFBQUksVUFBVSxVQUFVO0FBQ3RCLGNBQVEsU0FBUyxLQUFLLEtBQUssRUFBRSxNQUFNLEdBQUcsRUFBRTtBQUFBLElBQzFDO0FBQ0EsUUFBSSxTQUFTLGNBQWM7QUFDekIsYUFBTyxhQUFhLEtBQUssRUFBRSxPQUFPQSxRQUFPO0FBQUEsSUFDM0M7QUFDQSxRQUFJLGlCQUFpQixPQUFPO0FBQzFCLFlBQU0sU0FBUyxjQUFjLE9BQU9BLFVBQVMsS0FBSztBQUNsRCxVQUFJLFFBQVE7QUFDVixZQUFJLE9BQU8sV0FBVztBQUNwQixpQkFBTztBQUNULGVBQU8sUUFBUSxRQUFRQSxRQUFPO0FBQUEsTUFDaEM7QUFBQSxJQUNGO0FBQ0EsVUFBTSxRQUFRLFFBQVEsT0FBTyxlQUFlLEtBQUssSUFBSTtBQUNyRCxRQUFJLFVBQVUsT0FBTyxhQUFhLFVBQVUsTUFBTTtBQUNoRCxhQUFPLGNBQWMsT0FBT0EsUUFBTztBQUFBLElBQ3JDO0FBQ0EsUUFBSSxTQUFTLE9BQU8sZ0JBQWdCLGNBQWMsaUJBQWlCLGFBQWE7QUFDOUUsYUFBTyxZQUFZLE9BQU9BLFFBQU87QUFBQSxJQUNuQztBQUNBLFFBQUksaUJBQWlCLE9BQU87QUFDMUIsVUFBSSxNQUFNLGdCQUFnQixRQUFRO0FBQ2hDLGVBQU8sYUFBYSxPQUFPQSxRQUFPO0FBQUEsTUFDcEM7QUFDQSxhQUFPLGNBQWMsT0FBT0EsUUFBTztBQUFBLElBQ3JDO0FBQ0EsUUFBSSxVQUFVLE9BQU8sS0FBSyxHQUFHO0FBQzNCLGFBQU8sY0FBYyxPQUFPQSxRQUFPO0FBQUEsSUFDckM7QUFDQSxXQUFPQSxTQUFRLFFBQVEsT0FBTyxLQUFLLEdBQUcsS0FBSztBQUFBLEVBQzdDO0FBQ0EsU0FBTyxTQUFTLFNBQVM7QUFHekIsTUFBSSxTQUFTO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFhWCxjQUFjO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFhZCxVQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQW9CVixtQkFBbUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFrQm5CLFVBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFrQlYsbUJBQW1CLENBQUMsUUFBUSxTQUFTLFdBQVcsUUFBUTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUF1QnhELFdBQVc7QUFBQSxFQUNiO0FBR0EsV0FBUyxTQUFTLEtBQUssWUFBWSxPQUFPLFFBQVE7QUFDaEQsUUFBSUEsV0FBVTtBQUFBLE1BQ1o7QUFBQSxNQUNBLE9BQU8sT0FBTyxVQUFVLGNBQWMsSUFBSTtBQUFBLE1BQzFDO0FBQUEsTUFDQSxVQUFVLE9BQU8sb0JBQW9CLE9BQU8sb0JBQW9CO0FBQUEsSUFDbEU7QUFDQSxXQUFPLFFBQVEsS0FBS0EsUUFBTztBQUFBLEVBQzdCO0FBQ0EsU0FBTyxVQUFVLFNBQVM7QUFHMUIsV0FBUyxXQUFXLEtBQUs7QUFDdkIsUUFBSSxNQUFNLFNBQVMsR0FBRyxHQUFHLFFBQVEsT0FBTyxVQUFVLFNBQVMsS0FBSyxHQUFHO0FBQ25FLFFBQUksT0FBTyxxQkFBcUIsSUFBSSxVQUFVLE9BQU8sbUJBQW1CO0FBQ3RFLFVBQUksVUFBVSxxQkFBcUI7QUFDakMsZUFBTyxDQUFDLElBQUksUUFBUSxJQUFJLFNBQVMsS0FBSyxlQUFlLGdCQUFnQixJQUFJLE9BQU87QUFBQSxNQUNsRixXQUFXLFVBQVUsa0JBQWtCO0FBQ3JDLGVBQU8sYUFBYSxJQUFJLFNBQVM7QUFBQSxNQUNuQyxXQUFXLFVBQVUsbUJBQW1CO0FBQ3RDLFlBQUksT0FBTyxPQUFPLEtBQUssR0FBRyxHQUFHLE9BQU8sS0FBSyxTQUFTLElBQUksS0FBSyxPQUFPLEdBQUcsQ0FBQyxFQUFFLEtBQUssSUFBSSxJQUFJLFVBQVUsS0FBSyxLQUFLLElBQUk7QUFDN0csZUFBTyxlQUFlLE9BQU87QUFBQSxNQUMvQixPQUFPO0FBQ0wsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGLE9BQU87QUFDTCxhQUFPO0FBQUEsSUFDVDtBQUFBLEVBQ0Y7QUFDQSxTQUFPLFlBQVksWUFBWTtBQUcvQixXQUFTLFlBQVksS0FBSyxNQUFNO0FBQzlCLFFBQUksU0FBUyxLQUFLLEtBQUssUUFBUSxHQUFHLE1BQU0sS0FBSyxLQUFLLFFBQVEsR0FBRyxXQUFXLEtBQUssQ0FBQyxHQUFHLFNBQVMsVUFBVSxLQUFLLElBQUksR0FBRyxNQUFNLFNBQVMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsVUFBVSxLQUFLLEtBQUssU0FBUztBQUMvSyxRQUFJLE9BQU8sUUFBUTtBQUNqQixZQUFNLElBQUk7QUFDWixVQUFNLE9BQU87QUFDYixVQUFNLElBQUksUUFBUSxjQUFjLFdBQVc7QUFDekMsYUFBTyxXQUFXLEdBQUc7QUFBQSxJQUN2QixDQUFDLEVBQUUsUUFBUSxhQUFhLFdBQVc7QUFDakMsYUFBTyxXQUFXLE1BQU07QUFBQSxJQUMxQixDQUFDLEVBQUUsUUFBUSxhQUFhLFdBQVc7QUFDakMsYUFBTyxXQUFXLFFBQVE7QUFBQSxJQUM1QixDQUFDO0FBQ0QsV0FBTyxVQUFVLFVBQVUsT0FBTyxNQUFNO0FBQUEsRUFDMUM7QUFDQSxTQUFPLGFBQWEsWUFBWTtBQUdoQyxXQUFTLGNBQWMsV0FBVyxRQUFRLFlBQVk7QUFDcEQsUUFBSSxRQUFRLFVBQVUsWUFBWSxVQUFVLFVBQTBCLHVCQUFPLE9BQU8sSUFBSTtBQUN4RixRQUFJLENBQUMsT0FBTyxTQUFTO0FBQ25CLGFBQU8sVUFBMEIsdUJBQU8sT0FBTyxJQUFJO0FBQUEsSUFDckQ7QUFDQSxpQkFBYSxVQUFVLFdBQVcsSUFBSSxhQUFhO0FBQ25ELGFBQVMsU0FBUyxPQUFPO0FBQ3ZCLFVBQUksY0FBYyxVQUFVLFlBQVksVUFBVSxVQUFVLFVBQVUsY0FBYyxTQUFTLFdBQVc7QUFDdEcsZUFBTyxRQUFRLEtBQUssSUFBSSxNQUFNLEtBQUs7QUFBQSxNQUNyQztBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0EsU0FBTyxlQUFlLGVBQWU7QUFHckMsV0FBUyxNQUFNLEtBQUs7QUFDbEIsUUFBSSxPQUFPLFFBQVEsYUFBYTtBQUM5QixhQUFPO0FBQUEsSUFDVDtBQUNBLFFBQUksUUFBUSxNQUFNO0FBQ2hCLGFBQU87QUFBQSxJQUNUO0FBQ0EsVUFBTSxZQUFZLElBQUksT0FBTyxXQUFXO0FBQ3hDLFFBQUksT0FBTyxjQUFjLFVBQVU7QUFDakMsYUFBTztBQUFBLElBQ1Q7QUFDQSxVQUFNLGFBQWE7QUFDbkIsVUFBTSxXQUFXO0FBQ2pCLFdBQU8sT0FBTyxVQUFVLFNBQVMsS0FBSyxHQUFHLEVBQUUsTUFBTSxZQUFZLFFBQVE7QUFBQSxFQUN2RTtBQUNBLFNBQU8sT0FBTyxNQUFNO0FBQ3BCLFdBQVMsVUFBVTtBQUNqQixTQUFLLE9BQU8sb0JBQW9CLEtBQUssT0FBTyxJQUFJLEtBQUssSUFBSTtBQUFBLEVBQzNEO0FBQ0EsU0FBTyxTQUFTLFNBQVM7QUFDekIsVUFBUSxZQUFZO0FBQUEsSUFDbEIsS0FBcUIsdUJBQU8sU0FBUyxJQUFJLEtBQUs7QUFDNUMsYUFBTyxJQUFJLEtBQUssSUFBSTtBQUFBLElBQ3RCLEdBQUcsS0FBSztBQUFBLElBQ1IsS0FBcUIsdUJBQU8sU0FBUyxJQUFJLEtBQUssT0FBTztBQUNuRCxVQUFJLE9BQU8sYUFBYSxHQUFHLEdBQUc7QUFDNUIsZUFBTyxlQUFlLEtBQUssS0FBSyxNQUFNO0FBQUEsVUFDcEM7QUFBQSxVQUNBLGNBQWM7QUFBQSxRQUNoQixDQUFDO0FBQUEsTUFDSDtBQUFBLElBQ0YsR0FBRyxLQUFLO0FBQUEsRUFDVjtBQUNBLE1BQUksYUFBYSxPQUFPLFlBQVksYUFBYSxVQUFVO0FBQzNELFdBQVMsZUFBZSxpQkFBaUIsa0JBQWtCLFlBQVk7QUFDckUsUUFBSSxDQUFDLGNBQWNLLGFBQVksZUFBZSxLQUFLQSxhQUFZLGdCQUFnQixHQUFHO0FBQ2hGLGFBQU87QUFBQSxJQUNUO0FBQ0EsUUFBSSxjQUFjLFdBQVcsSUFBSSxlQUFlO0FBQ2hELFFBQUksYUFBYTtBQUNmLFVBQUksU0FBUyxZQUFZLElBQUksZ0JBQWdCO0FBQzdDLFVBQUksT0FBTyxXQUFXLFdBQVc7QUFDL0IsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBQ0EsV0FBTztBQUFBLEVBQ1Q7QUFDQSxTQUFPLGdCQUFnQixnQkFBZ0I7QUFDdkMsV0FBUyxXQUFXLGlCQUFpQixrQkFBa0IsWUFBWSxRQUFRO0FBQ3pFLFFBQUksQ0FBQyxjQUFjQSxhQUFZLGVBQWUsS0FBS0EsYUFBWSxnQkFBZ0IsR0FBRztBQUNoRjtBQUFBLElBQ0Y7QUFDQSxRQUFJLGNBQWMsV0FBVyxJQUFJLGVBQWU7QUFDaEQsUUFBSSxhQUFhO0FBQ2Ysa0JBQVksSUFBSSxrQkFBa0IsTUFBTTtBQUFBLElBQzFDLE9BQU87QUFDTCxvQkFBYyxJQUFJLFdBQVc7QUFDN0Isa0JBQVksSUFBSSxrQkFBa0IsTUFBTTtBQUN4QyxpQkFBVyxJQUFJLGlCQUFpQixXQUFXO0FBQUEsSUFDN0M7QUFBQSxFQUNGO0FBQ0EsU0FBTyxZQUFZLFlBQVk7QUFDL0IsTUFBSSxtQkFBbUI7QUFDdkIsV0FBUyxVQUFVLGlCQUFpQixrQkFBa0JMLFVBQVM7QUFDN0QsUUFBSUEsWUFBV0EsU0FBUSxZQUFZO0FBQ2pDLGFBQU8sbUJBQW1CLGlCQUFpQixrQkFBa0JBLFFBQU87QUFBQSxJQUN0RTtBQUNBLFFBQUksZUFBZSxZQUFZLGlCQUFpQixnQkFBZ0I7QUFDaEUsUUFBSSxpQkFBaUIsTUFBTTtBQUN6QixhQUFPO0FBQUEsSUFDVDtBQUNBLFdBQU8sbUJBQW1CLGlCQUFpQixrQkFBa0JBLFFBQU87QUFBQSxFQUN0RTtBQUNBLFNBQU8sV0FBVyxXQUFXO0FBQzdCLFdBQVMsWUFBWSxpQkFBaUIsa0JBQWtCO0FBQ3RELFFBQUksb0JBQW9CLGtCQUFrQjtBQUN4QyxhQUFPLG9CQUFvQixLQUFLLElBQUksb0JBQW9CLElBQUk7QUFBQSxJQUM5RDtBQUNBLFFBQUksb0JBQW9CO0FBQUEsSUFDeEIscUJBQXFCLGtCQUFrQjtBQUNyQyxhQUFPO0FBQUEsSUFDVDtBQUNBLFFBQUlLLGFBQVksZUFBZSxLQUFLQSxhQUFZLGdCQUFnQixHQUFHO0FBQ2pFLGFBQU87QUFBQSxJQUNUO0FBQ0EsV0FBTztBQUFBLEVBQ1Q7QUFDQSxTQUFPLGFBQWEsYUFBYTtBQUNqQyxXQUFTLG1CQUFtQixpQkFBaUIsa0JBQWtCTCxVQUFTO0FBQ3RFLElBQUFBLFdBQVVBLFlBQVcsQ0FBQztBQUN0QixJQUFBQSxTQUFRLFVBQVVBLFNBQVEsWUFBWSxRQUFRLFFBQVFBLFNBQVEsV0FBVyxJQUFJLFdBQVc7QUFDeEYsUUFBSSxhQUFhQSxZQUFXQSxTQUFRO0FBQ3BDLFFBQUksb0JBQW9CLGVBQWUsaUJBQWlCLGtCQUFrQkEsU0FBUSxPQUFPO0FBQ3pGLFFBQUksc0JBQXNCLE1BQU07QUFDOUIsYUFBTztBQUFBLElBQ1Q7QUFDQSxRQUFJLHFCQUFxQixlQUFlLGtCQUFrQixpQkFBaUJBLFNBQVEsT0FBTztBQUMxRixRQUFJLHVCQUF1QixNQUFNO0FBQy9CLGFBQU87QUFBQSxJQUNUO0FBQ0EsUUFBSSxZQUFZO0FBQ2QsVUFBSSxtQkFBbUIsV0FBVyxpQkFBaUIsZ0JBQWdCO0FBQ25FLFVBQUkscUJBQXFCLFNBQVMscUJBQXFCLE1BQU07QUFDM0QsbUJBQVcsaUJBQWlCLGtCQUFrQkEsU0FBUSxTQUFTLGdCQUFnQjtBQUMvRSxlQUFPO0FBQUEsTUFDVDtBQUNBLFVBQUksZUFBZSxZQUFZLGlCQUFpQixnQkFBZ0I7QUFDaEUsVUFBSSxpQkFBaUIsTUFBTTtBQUN6QixlQUFPO0FBQUEsTUFDVDtBQUFBLElBQ0Y7QUFDQSxRQUFJLGVBQWUsTUFBTSxlQUFlO0FBQ3hDLFFBQUksaUJBQWlCLE1BQU0sZ0JBQWdCLEdBQUc7QUFDNUMsaUJBQVcsaUJBQWlCLGtCQUFrQkEsU0FBUSxTQUFTLEtBQUs7QUFDcEUsYUFBTztBQUFBLElBQ1Q7QUFDQSxlQUFXLGlCQUFpQixrQkFBa0JBLFNBQVEsU0FBUyxJQUFJO0FBQ25FLFFBQUksU0FBUyx5QkFBeUIsaUJBQWlCLGtCQUFrQixjQUFjQSxRQUFPO0FBQzlGLGVBQVcsaUJBQWlCLGtCQUFrQkEsU0FBUSxTQUFTLE1BQU07QUFDckUsV0FBTztBQUFBLEVBQ1Q7QUFDQSxTQUFPLG9CQUFvQixvQkFBb0I7QUFDL0MsV0FBUyx5QkFBeUIsaUJBQWlCLGtCQUFrQixjQUFjQSxVQUFTO0FBQzFGLFlBQVEsY0FBYztBQUFBLE1BQ3BCLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFDSCxlQUFPLFVBQVUsZ0JBQWdCLFFBQVEsR0FBRyxpQkFBaUIsUUFBUSxDQUFDO0FBQUEsTUFDeEUsS0FBSztBQUFBLE1BQ0wsS0FBSztBQUFBLE1BQ0wsS0FBSztBQUFBLE1BQ0wsS0FBSztBQUFBLE1BQ0wsS0FBSztBQUNILGVBQU8sb0JBQW9CO0FBQUEsTUFDN0IsS0FBSztBQUNILGVBQU8sVUFBVSxpQkFBaUIsa0JBQWtCLENBQUMsUUFBUSxXQUFXLE1BQU0sR0FBR0EsUUFBTztBQUFBLE1BQzFGLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFDSCxlQUFPLGNBQWMsaUJBQWlCLGtCQUFrQkEsUUFBTztBQUFBLE1BQ2pFLEtBQUs7QUFDSCxlQUFPLFlBQVksaUJBQWlCLGdCQUFnQjtBQUFBLE1BQ3RELEtBQUs7QUFDSCxlQUFPLGVBQWUsaUJBQWlCLGtCQUFrQkEsUUFBTztBQUFBLE1BQ2xFLEtBQUs7QUFDSCxlQUFPLGNBQWMsSUFBSSxXQUFXLGdCQUFnQixNQUFNLEdBQUcsSUFBSSxXQUFXLGlCQUFpQixNQUFNLEdBQUdBLFFBQU87QUFBQSxNQUMvRyxLQUFLO0FBQ0gsZUFBTyxjQUFjLElBQUksV0FBVyxlQUFlLEdBQUcsSUFBSSxXQUFXLGdCQUFnQixHQUFHQSxRQUFPO0FBQUEsTUFDakcsS0FBSztBQUNILGVBQU8sYUFBYSxpQkFBaUIsa0JBQWtCQSxRQUFPO0FBQUEsTUFDaEUsS0FBSztBQUNILGVBQU8sYUFBYSxpQkFBaUIsa0JBQWtCQSxRQUFPO0FBQUEsTUFDaEUsS0FBSztBQUFBLE1BQ0wsS0FBSztBQUFBLE1BQ0wsS0FBSztBQUFBLE1BQ0wsS0FBSztBQUFBLE1BQ0wsS0FBSztBQUFBLE1BQ0wsS0FBSztBQUFBLE1BQ0wsS0FBSztBQUNILGVBQU8sZ0JBQWdCLE9BQU8sZ0JBQWdCO0FBQUEsTUFDaEQsS0FBSztBQUNILGVBQU8sZ0JBQWdCLE1BQU0sYUFBYSxNQUFNLGlCQUFpQixNQUFNLGFBQWE7QUFBQSxNQUN0RixLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQ0gsZUFBTyxnQkFBZ0IsU0FBUyxNQUFNLGlCQUFpQixTQUFTO0FBQUEsTUFDbEU7QUFDRSxlQUFPLFlBQVksaUJBQWlCLGtCQUFrQkEsUUFBTztBQUFBLElBQ2pFO0FBQUEsRUFDRjtBQUNBLFNBQU8sMEJBQTBCLDBCQUEwQjtBQUMzRCxXQUFTLFlBQVksaUJBQWlCLGtCQUFrQjtBQUN0RCxXQUFPLGdCQUFnQixTQUFTLE1BQU0saUJBQWlCLFNBQVM7QUFBQSxFQUNsRTtBQUNBLFNBQU8sYUFBYSxhQUFhO0FBQ2pDLFdBQVMsYUFBYSxpQkFBaUIsa0JBQWtCQSxVQUFTO0FBQ2hFLFFBQUk7QUFDRixVQUFJLGdCQUFnQixTQUFTLGlCQUFpQixNQUFNO0FBQ2xELGVBQU87QUFBQSxNQUNUO0FBQ0EsVUFBSSxnQkFBZ0IsU0FBUyxHQUFHO0FBQzlCLGVBQU87QUFBQSxNQUNUO0FBQUEsSUFDRixTQUFTLFdBQVc7QUFDbEIsYUFBTztBQUFBLElBQ1Q7QUFDQSxRQUFJLGdCQUFnQixDQUFDO0FBQ3JCLFFBQUksaUJBQWlCLENBQUM7QUFDdEIsb0JBQWdCLFFBQXdCLHVCQUFPLFNBQVMsY0FBYyxLQUFLLE9BQU87QUFDaEYsb0JBQWMsS0FBSyxDQUFDLEtBQUssS0FBSyxDQUFDO0FBQUEsSUFDakMsR0FBRyxlQUFlLENBQUM7QUFDbkIscUJBQWlCLFFBQXdCLHVCQUFPLFNBQVMsY0FBYyxLQUFLLE9BQU87QUFDakYscUJBQWUsS0FBSyxDQUFDLEtBQUssS0FBSyxDQUFDO0FBQUEsSUFDbEMsR0FBRyxlQUFlLENBQUM7QUFDbkIsV0FBTyxjQUFjLGNBQWMsS0FBSyxHQUFHLGVBQWUsS0FBSyxHQUFHQSxRQUFPO0FBQUEsRUFDM0U7QUFDQSxTQUFPLGNBQWMsY0FBYztBQUNuQyxXQUFTLGNBQWMsaUJBQWlCLGtCQUFrQkEsVUFBUztBQUNqRSxRQUFJLFNBQVMsZ0JBQWdCO0FBQzdCLFFBQUksV0FBVyxpQkFBaUIsUUFBUTtBQUN0QyxhQUFPO0FBQUEsSUFDVDtBQUNBLFFBQUksV0FBVyxHQUFHO0FBQ2hCLGFBQU87QUFBQSxJQUNUO0FBQ0EsUUFBSSxRQUFRO0FBQ1osV0FBTyxFQUFFLFFBQVEsUUFBUTtBQUN2QixVQUFJLFVBQVUsZ0JBQWdCLEtBQUssR0FBRyxpQkFBaUIsS0FBSyxHQUFHQSxRQUFPLE1BQU0sT0FBTztBQUNqRixlQUFPO0FBQUEsTUFDVDtBQUFBLElBQ0Y7QUFDQSxXQUFPO0FBQUEsRUFDVDtBQUNBLFNBQU8sZUFBZSxlQUFlO0FBQ3JDLFdBQVMsZUFBZSxpQkFBaUIsa0JBQWtCQSxVQUFTO0FBQ2xFLFdBQU8sY0FBYyxvQkFBb0IsZUFBZSxHQUFHLG9CQUFvQixnQkFBZ0IsR0FBR0EsUUFBTztBQUFBLEVBQzNHO0FBQ0EsU0FBTyxnQkFBZ0IsZ0JBQWdCO0FBQ3ZDLFdBQVMsb0JBQW9CLFFBQVE7QUFDbkMsV0FBTyxPQUFPLFdBQVcsZUFBZSxPQUFPLFdBQVcsWUFBWSxPQUFPLE9BQU8sYUFBYSxlQUFlLE9BQU8sT0FBTyxPQUFPLFFBQVEsTUFBTTtBQUFBLEVBQ3JKO0FBQ0EsU0FBTyxxQkFBcUIscUJBQXFCO0FBQ2pELFdBQVMsbUJBQW1CLFFBQVE7QUFDbEMsUUFBSSxvQkFBb0IsTUFBTSxHQUFHO0FBQy9CLFVBQUk7QUFDRixlQUFPLG9CQUFvQixPQUFPLE9BQU8sUUFBUSxFQUFFLENBQUM7QUFBQSxNQUN0RCxTQUFTLGVBQWU7QUFDdEIsZUFBTyxDQUFDO0FBQUEsTUFDVjtBQUFBLElBQ0Y7QUFDQSxXQUFPLENBQUM7QUFBQSxFQUNWO0FBQ0EsU0FBTyxvQkFBb0Isb0JBQW9CO0FBQy9DLFdBQVMsb0JBQW9CLFdBQVc7QUFDdEMsUUFBSSxrQkFBa0IsVUFBVSxLQUFLO0FBQ3JDLFFBQUksY0FBYyxDQUFDLGdCQUFnQixLQUFLO0FBQ3hDLFdBQU8sZ0JBQWdCLFNBQVMsT0FBTztBQUNyQyx3QkFBa0IsVUFBVSxLQUFLO0FBQ2pDLGtCQUFZLEtBQUssZ0JBQWdCLEtBQUs7QUFBQSxJQUN4QztBQUNBLFdBQU87QUFBQSxFQUNUO0FBQ0EsU0FBTyxxQkFBcUIscUJBQXFCO0FBQ2pELFdBQVMsa0JBQWtCLFFBQVE7QUFDakMsUUFBSSxPQUFPLENBQUM7QUFDWixhQUFTLE9BQU8sUUFBUTtBQUN0QixXQUFLLEtBQUssR0FBRztBQUFBLElBQ2Y7QUFDQSxXQUFPO0FBQUEsRUFDVDtBQUNBLFNBQU8sbUJBQW1CLG1CQUFtQjtBQUM3QyxXQUFTLHFCQUFxQixRQUFRO0FBQ3BDLFFBQUksT0FBTyxDQUFDO0FBQ1osUUFBSSxVQUFVLE9BQU8sc0JBQXNCLE1BQU07QUFDakQsYUFBUyxJQUFJLEdBQUcsSUFBSSxRQUFRLFFBQVEsS0FBSyxHQUFHO0FBQzFDLFVBQUksTUFBTSxRQUFRLENBQUM7QUFDbkIsVUFBSSxPQUFPLHlCQUF5QixRQUFRLEdBQUcsRUFBRSxZQUFZO0FBQzNELGFBQUssS0FBSyxHQUFHO0FBQUEsTUFDZjtBQUFBLElBQ0Y7QUFDQSxXQUFPO0FBQUEsRUFDVDtBQUNBLFNBQU8sc0JBQXNCLHNCQUFzQjtBQUNuRCxXQUFTLFVBQVUsaUJBQWlCLGtCQUFrQixNQUFNQSxVQUFTO0FBQ25FLFFBQUksU0FBUyxLQUFLO0FBQ2xCLFFBQUksV0FBVyxHQUFHO0FBQ2hCLGFBQU87QUFBQSxJQUNUO0FBQ0EsYUFBUyxJQUFJLEdBQUcsSUFBSSxRQUFRLEtBQUssR0FBRztBQUNsQyxVQUFJLFVBQVUsZ0JBQWdCLEtBQUssQ0FBQyxDQUFDLEdBQUcsaUJBQWlCLEtBQUssQ0FBQyxDQUFDLEdBQUdBLFFBQU8sTUFBTSxPQUFPO0FBQ3JGLGVBQU87QUFBQSxNQUNUO0FBQUEsSUFDRjtBQUNBLFdBQU87QUFBQSxFQUNUO0FBQ0EsU0FBTyxXQUFXLFdBQVc7QUFDN0IsV0FBUyxZQUFZLGlCQUFpQixrQkFBa0JBLFVBQVM7QUFDL0QsUUFBSSxlQUFlLGtCQUFrQixlQUFlO0FBQ3BELFFBQUksZ0JBQWdCLGtCQUFrQixnQkFBZ0I7QUFDdEQsUUFBSSxrQkFBa0IscUJBQXFCLGVBQWU7QUFDMUQsUUFBSSxtQkFBbUIscUJBQXFCLGdCQUFnQjtBQUM1RCxtQkFBZSxhQUFhLE9BQU8sZUFBZTtBQUNsRCxvQkFBZ0IsY0FBYyxPQUFPLGdCQUFnQjtBQUNyRCxRQUFJLGFBQWEsVUFBVSxhQUFhLFdBQVcsY0FBYyxRQUFRO0FBQ3ZFLFVBQUksY0FBYyxXQUFXLFlBQVksRUFBRSxLQUFLLEdBQUcsV0FBVyxhQUFhLEVBQUUsS0FBSyxDQUFDLE1BQU0sT0FBTztBQUM5RixlQUFPO0FBQUEsTUFDVDtBQUNBLGFBQU8sVUFBVSxpQkFBaUIsa0JBQWtCLGNBQWNBLFFBQU87QUFBQSxJQUMzRTtBQUNBLFFBQUksa0JBQWtCLG1CQUFtQixlQUFlO0FBQ3hELFFBQUksbUJBQW1CLG1CQUFtQixnQkFBZ0I7QUFDMUQsUUFBSSxnQkFBZ0IsVUFBVSxnQkFBZ0IsV0FBVyxpQkFBaUIsUUFBUTtBQUNoRixzQkFBZ0IsS0FBSztBQUNyQix1QkFBaUIsS0FBSztBQUN0QixhQUFPLGNBQWMsaUJBQWlCLGtCQUFrQkEsUUFBTztBQUFBLElBQ2pFO0FBQ0EsUUFBSSxhQUFhLFdBQVcsS0FBSyxnQkFBZ0IsV0FBVyxLQUFLLGNBQWMsV0FBVyxLQUFLLGlCQUFpQixXQUFXLEdBQUc7QUFDNUgsYUFBTztBQUFBLElBQ1Q7QUFDQSxXQUFPO0FBQUEsRUFDVDtBQUNBLFNBQU8sYUFBYSxhQUFhO0FBQ2pDLFdBQVNLLGFBQVksT0FBTztBQUMxQixXQUFPLFVBQVUsUUFBUSxPQUFPLFVBQVU7QUFBQSxFQUM1QztBQUNBLFNBQU9BLGNBQWEsYUFBYTtBQUNqQyxXQUFTLFdBQVcsS0FBSztBQUN2QixXQUFPLElBQUksSUFBb0IsdUJBQU8sU0FBUyxVQUFVLE9BQU87QUFDOUQsVUFBSSxPQUFPLFVBQVUsVUFBVTtBQUM3QixlQUFPLE1BQU0sU0FBUztBQUFBLE1BQ3hCO0FBQ0EsYUFBTztBQUFBLElBQ1QsR0FBRyxXQUFXLENBQUM7QUFBQSxFQUNqQjtBQUNBLFNBQU8sWUFBWSxZQUFZO0FBRy9CLFdBQVMsWUFBWSxLQUFLLE1BQU07QUFDOUIsUUFBSSxPQUFPLFFBQVEsZUFBZSxRQUFRLE1BQU07QUFDOUMsYUFBTztBQUFBLElBQ1Q7QUFDQSxXQUFPLFFBQVEsT0FBTyxHQUFHO0FBQUEsRUFDM0I7QUFDQSxTQUFPLGFBQWEsYUFBYTtBQUNqQyxXQUFTLFVBQVUsTUFBTTtBQUN2QixVQUFNLE1BQU0sS0FBSyxRQUFRLGNBQWMsTUFBTTtBQUM3QyxVQUFNLFFBQVEsSUFBSSxNQUFNLGlCQUFpQjtBQUN6QyxXQUFPLE1BQU0sSUFBSSxDQUFDLFVBQVU7QUFDMUIsVUFBSSxVQUFVLGlCQUFpQixVQUFVLGVBQWUsVUFBVSxhQUFhO0FBQzdFLGVBQU8sQ0FBQztBQUFBLE1BQ1Y7QUFDQSxZQUFNLFNBQVM7QUFDZixZQUFNLE9BQU8sT0FBTyxLQUFLLEtBQUs7QUFDOUIsVUFBSSxTQUFTO0FBQ2IsVUFBSSxNQUFNO0FBQ1IsaUJBQVMsRUFBRSxHQUFHLFdBQVcsS0FBSyxDQUFDLENBQUMsRUFBRTtBQUFBLE1BQ3BDLE9BQU87QUFDTCxpQkFBUyxFQUFFLEdBQUcsTUFBTSxRQUFRLGVBQWUsSUFBSSxFQUFFO0FBQUEsTUFDbkQ7QUFDQSxhQUFPO0FBQUEsSUFDVCxDQUFDO0FBQUEsRUFDSDtBQUNBLFNBQU8sV0FBVyxXQUFXO0FBQzdCLFdBQVMscUJBQXFCLEtBQUssUUFBUSxXQUFXO0FBQ3BELFFBQUksaUJBQWlCO0FBQ3JCLFFBQUksTUFBTTtBQUNWLGdCQUFZLE9BQU8sY0FBYyxjQUFjLE9BQU8sU0FBUztBQUMvRCxhQUFTLElBQUksR0FBRyxJQUFJLFdBQVcsS0FBSztBQUNsQyxZQUFNLE9BQU8sT0FBTyxDQUFDO0FBQ3JCLFVBQUksZ0JBQWdCO0FBQ2xCLFlBQUksT0FBTyxLQUFLLE1BQU0sYUFBYTtBQUNqQywyQkFBaUIsZUFBZSxLQUFLLENBQUM7QUFBQSxRQUN4QyxPQUFPO0FBQ0wsMkJBQWlCLGVBQWUsS0FBSyxDQUFDO0FBQUEsUUFDeEM7QUFDQSxZQUFJLE1BQU0sWUFBWSxHQUFHO0FBQ3ZCLGdCQUFNO0FBQUEsUUFDUjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQ0EsV0FBTztBQUFBLEVBQ1Q7QUFDQSxTQUFPLHNCQUFzQixzQkFBc0I7QUFDbkQsV0FBUyxZQUFZLEtBQUssTUFBTTtBQUM5QixVQUFNLFNBQVMsVUFBVSxJQUFJO0FBQzdCLFVBQU0sT0FBTyxPQUFPLE9BQU8sU0FBUyxDQUFDO0FBQ3JDLFVBQU0sT0FBTztBQUFBLE1BQ1gsUUFBUSxPQUFPLFNBQVMsSUFBSSxxQkFBcUIsS0FBSyxRQUFRLE9BQU8sU0FBUyxDQUFDLElBQUk7QUFBQSxNQUNuRixNQUFNLEtBQUssS0FBSyxLQUFLO0FBQUEsTUFDckIsT0FBTyxxQkFBcUIsS0FBSyxNQUFNO0FBQUEsSUFDekM7QUFDQSxTQUFLLFNBQVMsWUFBWSxLQUFLLFFBQVEsS0FBSyxJQUFJO0FBQ2hELFdBQU87QUFBQSxFQUNUO0FBQ0EsU0FBTyxhQUFhLGFBQWE7QUFHakMsV0FBUyxVQUFVLEtBQUssS0FBSyxNQUFNLFVBQVU7QUFDM0MsU0FBSyxNQUFNLFFBQVEsUUFBUSxTQUFTO0FBQ3BDLFNBQUssTUFBTSxZQUFZLFFBQVE7QUFDL0IsU0FBSyxNQUFNLFVBQVUsR0FBRztBQUN4QixTQUFLLE1BQU0sV0FBVyxHQUFHO0FBQ3pCLFNBQUssTUFBTSxPQUFPLE9BQU8sYUFBYSxnQkFBZ0I7QUFDdEQsV0FBTyxRQUFRLElBQUk7QUFBQSxFQUNyQjtBQUNBLFNBQU8sV0FBVyxXQUFXO0FBQzdCLFNBQU8sZUFBZSxXQUFXLGdCQUFnQjtBQUFBLElBQy9DLEtBQUssV0FBVztBQUNkLGNBQVEsS0FBSyw2RUFBNkU7QUFDMUYsYUFBTyxPQUFPO0FBQUEsSUFDaEI7QUFBQSxJQUNBLEtBQUssU0FBUyxPQUFPO0FBQ25CLGNBQVEsS0FBSyw2RUFBNkU7QUFDMUYsYUFBTyxlQUFlO0FBQUEsSUFDeEI7QUFBQSxFQUNGLENBQUM7QUFDRCxTQUFPLGVBQWUsV0FBVyxZQUFZO0FBQUEsSUFDM0MsS0FBSyxXQUFXO0FBQ2QsY0FBUSxLQUFLLHFFQUFxRTtBQUNsRixhQUFPLE9BQU87QUFBQSxJQUNoQjtBQUFBLElBQ0EsS0FBSyxTQUFTLE9BQU87QUFDbkIsY0FBUSxLQUFLLHFFQUFxRTtBQUNsRixhQUFPLFdBQVc7QUFBQSxJQUNwQjtBQUFBLEVBQ0YsQ0FBQztBQUNELFlBQVUsY0FBYyxTQUFTLE1BQU1DLEtBQUk7QUFDekMsZ0JBQVksS0FBSyxXQUFXLE1BQU1BLEdBQUU7QUFBQSxFQUN0QztBQUNBLFlBQVUsWUFBWSxTQUFTLE1BQU1BLEtBQUk7QUFDdkMsY0FBVSxLQUFLLFdBQVcsTUFBTUEsR0FBRTtBQUFBLEVBQ3BDO0FBQ0EsWUFBVSxxQkFBcUIsU0FBUyxNQUFNQSxLQUFJLGtCQUFrQjtBQUNsRSx1QkFBbUIsS0FBSyxXQUFXLE1BQU1BLEtBQUksZ0JBQWdCO0FBQUEsRUFDL0Q7QUFDQSxZQUFVLG9CQUFvQixTQUFTLE1BQU1BLEtBQUk7QUFDL0Msc0JBQWtCLEtBQUssV0FBVyxNQUFNQSxHQUFFO0FBQUEsRUFDNUM7QUFDQSxZQUFVLGtCQUFrQixTQUFTLE1BQU1BLEtBQUk7QUFDN0Msb0JBQWdCLEtBQUssV0FBVyxNQUFNQSxHQUFFO0FBQUEsRUFDMUM7QUFDQSxZQUFVLDJCQUEyQixTQUFTLE1BQU1BLEtBQUksa0JBQWtCO0FBQ3hFLDZCQUF5QixLQUFLLFdBQVcsTUFBTUEsS0FBSSxnQkFBZ0I7QUFBQSxFQUNyRTtBQUNBLFlBQVUsVUFBVSxTQUFTLFNBQVMsTUFBTSxLQUFLLFdBQVcsVUFBVSxTQUFTLFVBQVU7QUFDdkYsUUFBSSxLQUFLLEtBQUssTUFBTSxTQUFTO0FBQzdCLFFBQUksVUFBVTtBQUNaLGlCQUFXO0FBQ2IsUUFBSSxXQUFXLFlBQVksV0FBVztBQUNwQyxpQkFBVztBQUNiLFFBQUksU0FBUyxPQUFPO0FBQ2xCLGlCQUFXO0FBQ2IsUUFBSSxDQUFDLElBQUk7QUFDUCxZQUFNLFlBQVksTUFBTSxTQUFTO0FBQ2pDLFVBQUksU0FBUyxVQUFVLE1BQU0sU0FBUztBQUN0QyxVQUFJLGlDQUFpQztBQUFBLFFBQ25DO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGO0FBQ0EsVUFBSSxXQUFXLFlBQVksTUFBTSxTQUFTO0FBQzFDLFVBQUksVUFBVTtBQUNaLHVDQUErQixXQUFXO0FBQUEsTUFDNUM7QUFDQSxZQUFNLElBQUk7QUFBQSxRQUNSO0FBQUEsUUFDQTtBQUFBLFFBQ0EsT0FBTyxlQUFlLEtBQUssU0FBUyxLQUFLLE1BQU0sTUFBTTtBQUFBLE1BQ3ZEO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDQSxTQUFPO0FBQUEsSUFDTCxVQUFVO0FBQUEsSUFDVjtBQUFBLElBQ0E7QUFBQSxNQUNFLEtBQUssV0FBVztBQUNkLGVBQU8sS0FBSyxNQUFNLFFBQVE7QUFBQSxNQUM1QjtBQUFBLE1BQ0EsS0FBSyxTQUFTLEtBQUs7QUFDakIsYUFBSyxNQUFNLFVBQVUsR0FBRztBQUFBLE1BQzFCO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFHQSxXQUFTLGlCQUFpQjtBQUN4QixXQUFPLE9BQU8sWUFBWSxPQUFPLFVBQVUsZUFBZSxPQUFPLFlBQVk7QUFBQSxFQUMvRTtBQUNBLFNBQU8sZ0JBQWdCLGdCQUFnQjtBQUd2QyxXQUFTLFlBQVksS0FBSyxNQUFNLFFBQVE7QUFDdEMsYUFBUyxXQUFXLFNBQVMsV0FBVztBQUFBLElBQ3hDLElBQUk7QUFDSixXQUFPO0FBQUEsTUFDTDtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsUUFDRSxLQUFxQix1QkFBTyxTQUFTLGlCQUFpQjtBQUNwRCxjQUFJLENBQUMsZUFBZSxLQUFLLENBQUMsS0FBSyxNQUFNLFVBQVUsR0FBRztBQUNoRCxpQkFBSyxNQUFNLFFBQVEsY0FBYztBQUFBLFVBQ25DO0FBQ0EsY0FBSSxTQUFTLE9BQU8sS0FBSyxJQUFJO0FBQzdCLGNBQUksV0FBVztBQUNiLG1CQUFPO0FBQ1QsY0FBSSxlQUFlLElBQUksVUFBVTtBQUNqQyx3QkFBYyxNQUFNLFlBQVk7QUFDaEMsaUJBQU87QUFBQSxRQUNULEdBQUcsZ0JBQWdCO0FBQUEsUUFDbkIsY0FBYztBQUFBLE1BQ2hCO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDQSxTQUFPLGFBQWEsYUFBYTtBQUdqQyxNQUFJLGVBQWUsT0FBTyx5QkFBeUIsV0FBVztBQUFBLEVBQzlELEdBQUcsUUFBUTtBQUNYLFdBQVMsZUFBZUEsS0FBSSxlQUFlLGFBQWE7QUFDdEQsUUFBSSxDQUFDLGFBQWE7QUFDaEIsYUFBT0E7QUFDVCxXQUFPLGVBQWVBLEtBQUksVUFBVTtBQUFBLE1BQ2xDLEtBQUssV0FBVztBQUNkLFlBQUksYUFBYTtBQUNmLGdCQUFNLE1BQU0sNEJBQTRCLGdCQUFnQiw2RUFBNkUsZ0JBQWdCLGFBQWEsZ0JBQWdCLHFCQUFxQjtBQUFBLFFBQ3pNO0FBQ0EsY0FBTSxNQUFNLDRCQUE0QixnQkFBZ0IsNENBQTRDLGdCQUFnQixJQUFJO0FBQUEsTUFDMUg7QUFBQSxJQUNGLENBQUM7QUFDRCxXQUFPQTtBQUFBLEVBQ1Q7QUFDQSxTQUFPLGdCQUFnQixnQkFBZ0I7QUFHdkMsV0FBUyxjQUFjLFFBQVE7QUFDN0IsUUFBSSxTQUFTLE9BQU8sb0JBQW9CLE1BQU07QUFDOUMsYUFBUyxhQUFhLFVBQVU7QUFDOUIsVUFBSSxPQUFPLFFBQVEsUUFBUSxNQUFNLElBQUk7QUFDbkMsZUFBTyxLQUFLLFFBQVE7QUFBQSxNQUN0QjtBQUFBLElBQ0Y7QUFDQSxXQUFPLGNBQWMsYUFBYTtBQUNsQyxRQUFJLFFBQVEsT0FBTyxlQUFlLE1BQU07QUFDeEMsV0FBTyxVQUFVLE1BQU07QUFDckIsYUFBTyxvQkFBb0IsS0FBSyxFQUFFLFFBQVEsWUFBWTtBQUN0RCxjQUFRLE9BQU8sZUFBZSxLQUFLO0FBQUEsSUFDckM7QUFDQSxXQUFPO0FBQUEsRUFDVDtBQUNBLFNBQU8sZUFBZSxlQUFlO0FBR3JDLE1BQUksV0FBVyxDQUFDLFdBQVcsYUFBYSxRQUFRLFFBQVE7QUFDeEQsV0FBUyxRQUFRLEtBQUssd0JBQXdCO0FBQzVDLFFBQUksQ0FBQyxlQUFlO0FBQ2xCLGFBQU87QUFDVCxXQUFPLElBQUksTUFBTSxLQUFLO0FBQUEsTUFDcEIsS0FBcUIsdUJBQU8sU0FBUyxZQUFZLFFBQVEsVUFBVTtBQUNqRSxZQUFJLE9BQU8sYUFBYSxZQUFZLE9BQU8sa0JBQWtCLFFBQVEsUUFBUSxNQUFNLE1BQU0sQ0FBQyxRQUFRLElBQUksUUFBUSxRQUFRLEdBQUc7QUFDdkgsY0FBSSx3QkFBd0I7QUFDMUIsa0JBQU0sTUFBTSw0QkFBNEIseUJBQXlCLE1BQU0sV0FBVyxxQ0FBcUMseUJBQXlCLElBQUk7QUFBQSxVQUN0SjtBQUNBLGNBQUksYUFBYTtBQUNqQixjQUFJLHFCQUFxQjtBQUN6Qix3QkFBYyxNQUFNLEVBQUUsUUFBUSxTQUFTLE1BQU07QUFDM0MsZ0JBQUksQ0FBQyxPQUFPLFVBQVUsZUFBZSxJQUFJLEtBQUssU0FBUyxRQUFRLElBQUksTUFBTSxJQUFJO0FBQzNFLGtCQUFJLE9BQU87QUFBQSxnQkFDVDtBQUFBLGdCQUNBO0FBQUEsZ0JBQ0E7QUFBQSxjQUNGO0FBQ0Esa0JBQUksT0FBTyxvQkFBb0I7QUFDN0IsNkJBQWE7QUFDYixxQ0FBcUI7QUFBQSxjQUN2QjtBQUFBLFlBQ0Y7QUFBQSxVQUNGLENBQUM7QUFDRCxjQUFJLGVBQWUsTUFBTTtBQUN2QixrQkFBTSxNQUFNLDRCQUE0QixXQUFXLHFCQUFxQixhQUFhLElBQUk7QUFBQSxVQUMzRixPQUFPO0FBQ0wsa0JBQU0sTUFBTSw0QkFBNEIsUUFBUTtBQUFBLFVBQ2xEO0FBQUEsUUFDRjtBQUNBLFlBQUksU0FBUyxRQUFRLFFBQVEsTUFBTSxNQUFNLENBQUMsS0FBSyxRQUFRLFVBQVUsR0FBRztBQUNsRSxlQUFLLFFBQVEsUUFBUSxXQUFXO0FBQUEsUUFDbEM7QUFDQSxlQUFPLFFBQVEsSUFBSSxRQUFRLFFBQVE7QUFBQSxNQUNyQyxHQUFHLGFBQWE7QUFBQSxJQUNsQixDQUFDO0FBQUEsRUFDSDtBQUNBLFNBQU8sU0FBUyxTQUFTO0FBQ3pCLFdBQVMscUJBQXFCLE1BQU0sTUFBTSxLQUFLO0FBQzdDLFFBQUksS0FBSyxJQUFJLEtBQUssU0FBUyxLQUFLLE1BQU0sS0FBSyxLQUFLO0FBQzlDLGFBQU87QUFBQSxJQUNUO0FBQ0EsUUFBSSxPQUFPLENBQUM7QUFDWixhQUFTLElBQUksR0FBRyxLQUFLLEtBQUssUUFBUSxLQUFLO0FBQ3JDLFdBQUssQ0FBQyxJQUFJLE1BQU0sS0FBSyxTQUFTLENBQUMsRUFBRSxLQUFLLENBQUM7QUFDdkMsV0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJO0FBQUEsSUFDZjtBQUNBLGFBQVMsSUFBSSxHQUFHLElBQUksS0FBSyxRQUFRLEtBQUs7QUFDcEMsV0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJO0FBQUEsSUFDZjtBQUNBLGFBQVMsSUFBSSxHQUFHLEtBQUssS0FBSyxRQUFRLEtBQUs7QUFDckMsVUFBSSxLQUFLLEtBQUssV0FBVyxJQUFJLENBQUM7QUFDOUIsZUFBUyxJQUFJLEdBQUcsS0FBSyxLQUFLLFFBQVEsS0FBSztBQUNyQyxZQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLO0FBQzFCLGVBQUssQ0FBQyxFQUFFLENBQUMsSUFBSTtBQUNiO0FBQUEsUUFDRjtBQUNBLGFBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLO0FBQUEsVUFDaEIsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUk7QUFBQSxVQUNqQixLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSTtBQUFBLFVBQ2pCLEtBQUssSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssT0FBTyxLQUFLLFdBQVcsSUFBSSxDQUFDLElBQUksSUFBSTtBQUFBLFFBQzVEO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFDQSxXQUFPLEtBQUssS0FBSyxNQUFNLEVBQUUsS0FBSyxNQUFNO0FBQUEsRUFDdEM7QUFDQSxTQUFPLHNCQUFzQixzQkFBc0I7QUFHbkQsV0FBUyxVQUFVLEtBQUssTUFBTSxRQUFRO0FBQ3BDLFFBQUksZ0JBQWdDLHVCQUFPLFdBQVc7QUFDcEQsVUFBSSxDQUFDLEtBQUssTUFBTSxVQUFVLEdBQUc7QUFDM0IsYUFBSyxNQUFNLFFBQVEsYUFBYTtBQUFBLE1BQ2xDO0FBQ0EsVUFBSSxTQUFTLE9BQU8sTUFBTSxNQUFNLFNBQVM7QUFDekMsVUFBSSxXQUFXO0FBQ2IsZUFBTztBQUNULFVBQUksZUFBZSxJQUFJLFVBQVU7QUFDakMsb0JBQWMsTUFBTSxZQUFZO0FBQ2hDLGFBQU87QUFBQSxJQUNULEdBQUcsZUFBZTtBQUNsQixtQkFBZSxlQUFlLE1BQU0sS0FBSztBQUN6QyxRQUFJLElBQUksSUFBSSxRQUFRLGVBQWUsSUFBSTtBQUFBLEVBQ3pDO0FBQ0EsU0FBTyxXQUFXLFdBQVc7QUFHN0IsV0FBUyxrQkFBa0IsS0FBSyxNQUFNLFFBQVE7QUFDNUMsUUFBSSxPQUFPLE9BQU8seUJBQXlCLEtBQUssSUFBSSxHQUFHLFNBQXlCLHVCQUFPLFdBQVc7QUFBQSxJQUNsRyxHQUFHLFFBQVE7QUFDWCxRQUFJLFFBQVEsZUFBZSxPQUFPLEtBQUs7QUFDckMsZUFBUyxLQUFLO0FBQ2hCLFdBQU87QUFBQSxNQUNMO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxRQUNFLEtBQXFCLHVCQUFPLFNBQVMsNEJBQTRCO0FBQy9ELGNBQUksQ0FBQyxlQUFlLEtBQUssQ0FBQyxLQUFLLE1BQU0sVUFBVSxHQUFHO0FBQ2hELGlCQUFLLE1BQU0sUUFBUSx5QkFBeUI7QUFBQSxVQUM5QztBQUNBLGNBQUksZUFBZSxLQUFLLE1BQU0sVUFBVTtBQUN4QyxlQUFLLE1BQU0sWUFBWSxJQUFJO0FBQzNCLGNBQUksU0FBUyxPQUFPLE1BQU0sRUFBRSxLQUFLLElBQUk7QUFDckMsZUFBSyxNQUFNLFlBQVksWUFBWTtBQUNuQyxjQUFJLFdBQVcsUUFBUTtBQUNyQixtQkFBTztBQUFBLFVBQ1Q7QUFDQSxjQUFJLGVBQWUsSUFBSSxVQUFVO0FBQ2pDLHdCQUFjLE1BQU0sWUFBWTtBQUNoQyxpQkFBTztBQUFBLFFBQ1QsR0FBRywyQkFBMkI7QUFBQSxRQUM5QixjQUFjO0FBQUEsTUFDaEI7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNBLFNBQU8sbUJBQW1CLG1CQUFtQjtBQUc3QyxXQUFTLGdCQUFnQixLQUFLLE1BQU0sUUFBUTtBQUMxQyxRQUFJLFVBQVUsSUFBSSxJQUFJLEdBQUcsU0FBeUIsdUJBQU8sV0FBVztBQUNsRSxZQUFNLElBQUksTUFBTSxPQUFPLG9CQUFvQjtBQUFBLElBQzdDLEdBQUcsUUFBUTtBQUNYLFFBQUksV0FBVyxlQUFlLE9BQU87QUFDbkMsZUFBUztBQUNYLFFBQUksMkJBQTJDLHVCQUFPLFdBQVc7QUFDL0QsVUFBSSxDQUFDLEtBQUssTUFBTSxVQUFVLEdBQUc7QUFDM0IsYUFBSyxNQUFNLFFBQVEsd0JBQXdCO0FBQUEsTUFDN0M7QUFDQSxVQUFJLGVBQWUsS0FBSyxNQUFNLFVBQVU7QUFDeEMsV0FBSyxNQUFNLFlBQVksSUFBSTtBQUMzQixVQUFJLFNBQVMsT0FBTyxNQUFNLEVBQUUsTUFBTSxNQUFNLFNBQVM7QUFDakQsV0FBSyxNQUFNLFlBQVksWUFBWTtBQUNuQyxVQUFJLFdBQVcsUUFBUTtBQUNyQixlQUFPO0FBQUEsTUFDVDtBQUNBLFVBQUksZUFBZSxJQUFJLFVBQVU7QUFDakMsb0JBQWMsTUFBTSxZQUFZO0FBQ2hDLGFBQU87QUFBQSxJQUNULEdBQUcsMEJBQTBCO0FBQzdCLG1CQUFlLDBCQUEwQixNQUFNLEtBQUs7QUFDcEQsUUFBSSxJQUFJLElBQUksUUFBUSwwQkFBMEIsSUFBSTtBQUFBLEVBQ3BEO0FBQ0EsU0FBTyxpQkFBaUIsaUJBQWlCO0FBR3pDLE1BQUksa0JBQWtCLE9BQU8sT0FBTyxtQkFBbUI7QUFDdkQsTUFBSSxTQUF5Qix1QkFBTyxXQUFXO0FBQUEsRUFDL0MsR0FBRyxRQUFRO0FBQ1gsTUFBSSxlQUFlLE9BQU8sb0JBQW9CLE1BQU0sRUFBRSxPQUFPLFNBQVMsTUFBTTtBQUMxRSxRQUFJLFdBQVcsT0FBTyx5QkFBeUIsUUFBUSxJQUFJO0FBQzNELFFBQUksT0FBTyxhQUFhO0FBQ3RCLGFBQU87QUFDVCxXQUFPLENBQUMsU0FBUztBQUFBLEVBQ25CLENBQUM7QUFDRCxNQUFJLE9BQU8sU0FBUyxVQUFVO0FBQzlCLE1BQUksUUFBUSxTQUFTLFVBQVU7QUFDL0IsV0FBUyxtQkFBbUIsS0FBSyxNQUFNLFFBQVEsa0JBQWtCO0FBQy9ELFFBQUksT0FBTyxxQkFBcUIsWUFBWTtBQUMxQyx5QkFBbUMsdUJBQU8sV0FBVztBQUFBLE1BQ3JELEdBQUcsa0JBQWtCO0FBQUEsSUFDdkI7QUFDQSxRQUFJLG9CQUFvQjtBQUFBLE1BQ3RCO0FBQUEsTUFDQTtBQUFBLElBQ0Y7QUFDQSxRQUFJLENBQUMsSUFBSSxXQUFXO0FBQ2xCLFVBQUksWUFBWSxDQUFDO0FBQUEsSUFDbkI7QUFDQSxRQUFJLFVBQVUsSUFBSSxJQUFJO0FBQ3RCLFdBQU87QUFBQSxNQUNMO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxRQUNFLEtBQXFCLHVCQUFPLFNBQVMsd0JBQXdCO0FBQzNELDRCQUFrQixpQkFBaUIsS0FBSyxJQUFJO0FBQzVDLGNBQUkseUJBQXlDLHVCQUFPLFdBQVc7QUFDN0QsZ0JBQUksQ0FBQyxLQUFLLE1BQU0sVUFBVSxHQUFHO0FBQzNCLG1CQUFLLE1BQU0sUUFBUSxzQkFBc0I7QUFBQSxZQUMzQztBQUNBLGdCQUFJLFNBQVMsa0JBQWtCLE9BQU8sTUFBTSxNQUFNLFNBQVM7QUFDM0QsZ0JBQUksV0FBVyxRQUFRO0FBQ3JCLHFCQUFPO0FBQUEsWUFDVDtBQUNBLGdCQUFJLGVBQWUsSUFBSSxVQUFVO0FBQ2pDLDBCQUFjLE1BQU0sWUFBWTtBQUNoQyxtQkFBTztBQUFBLFVBQ1QsR0FBRyx3QkFBd0I7QUFDM0IseUJBQWUsd0JBQXdCLE1BQU0sSUFBSTtBQUNqRCxjQUFJLGlCQUFpQjtBQUNuQixnQkFBSSxZQUFZLE9BQU8sT0FBTyxJQUFJO0FBQ2xDLHNCQUFVLE9BQU87QUFDakIsc0JBQVUsUUFBUTtBQUNsQixtQkFBTyxlQUFlLHdCQUF3QixTQUFTO0FBQUEsVUFDekQsT0FBTztBQUNMLGdCQUFJLGdCQUFnQixPQUFPLG9CQUFvQixHQUFHO0FBQ2xELDBCQUFjLFFBQVEsU0FBUyxjQUFjO0FBQzNDLGtCQUFJLGFBQWEsUUFBUSxZQUFZLE1BQU0sSUFBSTtBQUM3QztBQUFBLGNBQ0Y7QUFDQSxrQkFBSSxLQUFLLE9BQU8seUJBQXlCLEtBQUssWUFBWTtBQUMxRCxxQkFBTyxlQUFlLHdCQUF3QixjQUFjLEVBQUU7QUFBQSxZQUNoRSxDQUFDO0FBQUEsVUFDSDtBQUNBLHdCQUFjLE1BQU0sc0JBQXNCO0FBQzFDLGlCQUFPLFFBQVEsc0JBQXNCO0FBQUEsUUFDdkMsR0FBRyx1QkFBdUI7QUFBQSxRQUMxQixjQUFjO0FBQUEsTUFDaEI7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNBLFNBQU8sb0JBQW9CLG9CQUFvQjtBQUcvQyxXQUFTLHlCQUF5QixLQUFLLE1BQU0sUUFBUSxrQkFBa0I7QUFDckUsUUFBSSxvQkFBb0IsSUFBSSxVQUFVLElBQUk7QUFDMUMsUUFBSSxvQkFBb0Isa0JBQWtCO0FBQzFDLHNCQUFrQixtQkFBbUMsdUJBQU8sU0FBUyxtQ0FBbUM7QUFDdEcsVUFBSSxTQUFTLGlCQUFpQixpQkFBaUIsRUFBRSxLQUFLLElBQUk7QUFDMUQsVUFBSSxXQUFXLFFBQVE7QUFDckIsZUFBTztBQUFBLE1BQ1Q7QUFDQSxVQUFJLGVBQWUsSUFBSSxVQUFVO0FBQ2pDLG9CQUFjLE1BQU0sWUFBWTtBQUNoQyxhQUFPO0FBQUEsSUFDVCxHQUFHLGtDQUFrQztBQUNyQyxRQUFJLFVBQVUsa0JBQWtCO0FBQ2hDLHNCQUFrQixTQUF5Qix1QkFBTyxTQUFTLG9DQUFvQztBQUM3RixVQUFJLFNBQVMsT0FBTyxPQUFPLEVBQUUsTUFBTSxNQUFNLFNBQVM7QUFDbEQsVUFBSSxXQUFXLFFBQVE7QUFDckIsZUFBTztBQUFBLE1BQ1Q7QUFDQSxVQUFJLGVBQWUsSUFBSSxVQUFVO0FBQ2pDLG9CQUFjLE1BQU0sWUFBWTtBQUNoQyxhQUFPO0FBQUEsSUFDVCxHQUFHLG1DQUFtQztBQUFBLEVBQ3hDO0FBQ0EsU0FBTywwQkFBMEIsMEJBQTBCO0FBRzNELFdBQVMsaUJBQWlCQyxJQUFHLEdBQUc7QUFDOUIsV0FBTyxTQUFTQSxFQUFDLElBQUksU0FBUyxDQUFDLElBQUksS0FBSztBQUFBLEVBQzFDO0FBQ0EsU0FBTyxrQkFBa0Isa0JBQWtCO0FBRzNDLFdBQVMsZ0NBQWdDLEtBQUs7QUFDNUMsUUFBSSxPQUFPLE9BQU8sMEJBQTBCO0FBQzFDLGFBQU8sQ0FBQztBQUNWLFdBQU8sT0FBTyxzQkFBc0IsR0FBRyxFQUFFLE9BQU8sU0FBUyxLQUFLO0FBQzVELGFBQU8sT0FBTyx5QkFBeUIsS0FBSyxHQUFHLEVBQUU7QUFBQSxJQUNuRCxDQUFDO0FBQUEsRUFDSDtBQUNBLFNBQU8saUNBQWlDLGlDQUFpQztBQUd6RSxXQUFTLDJCQUEyQixLQUFLO0FBQ3ZDLFdBQU8sT0FBTyxLQUFLLEdBQUcsRUFBRSxPQUFPLGdDQUFnQyxHQUFHLENBQUM7QUFBQSxFQUNyRTtBQUNBLFNBQU8sNEJBQTRCLDRCQUE0QjtBQUcvRCxXQUFTLE9BQU8sT0FBTztBQUNyQixXQUFPLFVBQVU7QUFBQSxFQUNuQjtBQUNBLFNBQU8sUUFBUSxRQUFRO0FBQ3ZCLE1BQUlSLFVBQVMsT0FBTyxTQUFTO0FBRzdCLFdBQVMsYUFBYSxLQUFLO0FBQ3pCLFFBQUksYUFBYSxLQUFLLEdBQUc7QUFDekIsUUFBSSxjQUFjLENBQUMsU0FBUyxVQUFVLFVBQVU7QUFDaEQsV0FBTyxZQUFZLFFBQVEsVUFBVSxNQUFNO0FBQUEsRUFDN0M7QUFDQSxTQUFPLGNBQWMsY0FBYztBQUNuQyxXQUFTLFlBQVksS0FBSyxNQUFNO0FBQzlCLFFBQUksV0FBVyxLQUFLLEtBQUssVUFBVTtBQUNuQyxRQUFJLFNBQVMsS0FBSyxLQUFLLFFBQVE7QUFDL0IsUUFBSSxXQUFXLEtBQUssQ0FBQztBQUNyQixRQUFJLE1BQU0sU0FBUyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUM7QUFDbkMsUUFBSSxVQUFVO0FBQ1osYUFBTztBQUFBLElBQ1Q7QUFDQSxRQUFJLE9BQU8sUUFBUTtBQUNqQixZQUFNLElBQUk7QUFDWixVQUFNLE9BQU87QUFDYixRQUFJLENBQUMsS0FBSztBQUNSLGFBQU87QUFBQSxJQUNUO0FBQ0EsUUFBSSxXQUFXLEtBQUssR0FBRyxHQUFHO0FBQ3hCLGFBQU87QUFBQSxJQUNUO0FBQ0EsUUFBSVMsWUFBVyxhQUFhLFFBQVE7QUFDcEMsUUFBSSxVQUFVLEtBQUssR0FBRyxHQUFHO0FBQ3ZCLGFBQU9BLFlBQVcsdUJBQXVCO0FBQUEsSUFDM0M7QUFDQSxXQUFPQSxZQUFXLG9CQUFvQjtBQUFBLEVBQ3hDO0FBQ0EsU0FBTyxhQUFhLGFBQWE7QUFHakMsV0FBUyxRQUFRRixLQUFJO0FBQ25CLFdBQU9BLElBQUc7QUFBQSxFQUNaO0FBQ0EsU0FBTyxTQUFTLFNBQVM7QUFDekIsV0FBUyxVQUFVLEtBQUs7QUFDdEIsV0FBTyxPQUFPLFVBQVUsU0FBUyxLQUFLLEdBQUcsTUFBTTtBQUFBLEVBQ2pEO0FBQ0EsU0FBTyxXQUFXLFVBQVU7QUFDNUIsV0FBUyxVQUFVLEtBQUs7QUFDdEIsV0FBTyxDQUFDLFVBQVUsUUFBUSxFQUFFLFNBQVMsS0FBSyxHQUFHLENBQUM7QUFBQSxFQUNoRDtBQUNBLFNBQU8sV0FBVyxXQUFXO0FBRzdCLE1BQUksRUFBRSxNQUFNLE1BQU0sSUFBSTtBQUN0QjtBQUFBLElBQ0U7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRixFQUFFLFFBQVEsU0FBUyxPQUFPO0FBQ3hCLGNBQVUsWUFBWSxLQUFLO0FBQUEsRUFDN0IsQ0FBQztBQUNELFlBQVUsWUFBWSxPQUFPLFdBQVc7QUFDdEMsVUFBTSxNQUFNLFVBQVUsSUFBSTtBQUFBLEVBQzVCLENBQUM7QUFDRCxZQUFVLFlBQVksUUFBUSxXQUFXO0FBQ3ZDLFVBQU0sTUFBTSxRQUFRLElBQUk7QUFBQSxFQUMxQixDQUFDO0FBQ0QsWUFBVSxZQUFZLFVBQVUsV0FBVztBQUN6QyxVQUFNLE1BQU0sVUFBVSxJQUFJO0FBQUEsRUFDNUIsQ0FBQztBQUNELFlBQVUsWUFBWSxPQUFPLFdBQVc7QUFDdEMsVUFBTSxNQUFNLE9BQU8sSUFBSTtBQUFBLEVBQ3pCLENBQUM7QUFDRCxZQUFVLFlBQVksV0FBVyxXQUFXO0FBQzFDLFVBQU0sTUFBTSxXQUFXLElBQUk7QUFBQSxFQUM3QixDQUFDO0FBQ0QsWUFBVSxZQUFZLE9BQU8sV0FBVztBQUN0QyxVQUFNLE1BQU0sT0FBTyxJQUFJO0FBQ3ZCLFVBQU0sTUFBTSxPQUFPLEtBQUs7QUFBQSxFQUMxQixDQUFDO0FBQ0QsWUFBVSxZQUFZLE9BQU8sV0FBVztBQUN0QyxVQUFNLE1BQU0sT0FBTyxJQUFJO0FBQ3ZCLFVBQU0sTUFBTSxPQUFPLEtBQUs7QUFBQSxFQUMxQixDQUFDO0FBQ0QsTUFBSSxnQkFBZ0I7QUFBQSxJQUNsQixZQUFZLENBQUMsWUFBWSxpQkFBaUIscUJBQXFCLHdCQUF3QjtBQUFBLElBQ3ZGLGlCQUFpQixDQUFDLGlCQUFpQix3QkFBd0I7QUFBQSxJQUMzRCxxQkFBcUIsQ0FBQyxxQkFBcUIsd0JBQXdCO0FBQUEsSUFDbkUsMEJBQTBCLENBQUMsd0JBQXdCO0FBQUEsRUFDckQ7QUFDQSxXQUFTLEdBQUcsT0FBTyxLQUFLO0FBQ3RCLFFBQUk7QUFDRixZQUFNLE1BQU0sV0FBVyxHQUFHO0FBQzVCLFlBQVEsTUFBTSxZQUFZO0FBQzFCLFFBQUksTUFBTSxNQUFNLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxDQUFDLEtBQUssS0FBSyxLQUFLLEtBQUssR0FBRyxFQUFFLFFBQVEsTUFBTSxPQUFPLENBQUMsQ0FBQyxJQUFJLFFBQVE7QUFDekcsVUFBTSxlQUFlLEtBQUssR0FBRyxFQUFFLFlBQVk7QUFDM0MsUUFBSSxjQUFjLFVBQVUsRUFBRSxTQUFTLEtBQUssR0FBRztBQUM3QyxXQUFLO0FBQUEsUUFDSCxjQUFjLEtBQUssRUFBRSxTQUFTLFlBQVk7QUFBQSxRQUMxQyw0QkFBNEIsVUFBVTtBQUFBLFFBQ3RDLGdDQUFnQyxVQUFVO0FBQUEsTUFDNUM7QUFBQSxJQUNGLE9BQU87QUFDTCxXQUFLO0FBQUEsUUFDSCxVQUFVO0FBQUEsUUFDViw0QkFBNEIsVUFBVTtBQUFBLFFBQ3RDLGdDQUFnQyxVQUFVO0FBQUEsTUFDNUM7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNBLFNBQU8sSUFBSSxJQUFJO0FBQ2YsWUFBVSxtQkFBbUIsTUFBTSxFQUFFO0FBQ3JDLFlBQVUsbUJBQW1CLEtBQUssRUFBRTtBQUNwQyxXQUFTLGNBQWNDLElBQUcsR0FBRztBQUMzQixXQUFPUixRQUFPUSxFQUFDLEtBQUtSLFFBQU8sQ0FBQyxLQUFLUSxPQUFNO0FBQUEsRUFDekM7QUFDQSxTQUFPLGVBQWUsZUFBZTtBQUNyQyxXQUFTLDBCQUEwQjtBQUNqQyxVQUFNLE1BQU0sWUFBWSxJQUFJO0FBQUEsRUFDOUI7QUFDQSxTQUFPLHlCQUF5Qix5QkFBeUI7QUFDekQsV0FBUyxRQUFRLEtBQUssS0FBSztBQUN6QixRQUFJO0FBQ0YsWUFBTSxNQUFNLFdBQVcsR0FBRztBQUM1QixRQUFJLE1BQU0sTUFBTSxNQUFNLFFBQVEsR0FBRyxVQUFVLEtBQUssR0FBRyxFQUFFLFlBQVksR0FBRyxVQUFVLE1BQU0sTUFBTSxTQUFTLEdBQUcsU0FBUyxNQUFNLE1BQU0sUUFBUSxHQUFHLE9BQU8sTUFBTSxNQUFNLE1BQU0sR0FBRyxTQUFTLE1BQU0sTUFBTSxNQUFNLEdBQUcsYUFBYSxTQUFTLFVBQVUsSUFBSSxRQUFRLFNBQVMsTUFBTSxNQUFNLEtBQUssSUFBSTtBQUMxUSxjQUFVLFVBQVUsVUFBVSxPQUFPO0FBQ3JDLFFBQUksV0FBVztBQUNmLFlBQVEsU0FBUztBQUFBLE1BQ2YsS0FBSztBQUNILG1CQUFXLElBQUksUUFBUSxHQUFHLE1BQU07QUFDaEM7QUFBQSxNQUNGLEtBQUs7QUFDSCxZQUFJLFFBQVE7QUFDVixnQkFBTSxJQUFJO0FBQUEsWUFDUixVQUFVO0FBQUEsWUFDVjtBQUFBLFlBQ0E7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUNBLG1CQUFXLElBQUksSUFBSSxHQUFHO0FBQ3RCO0FBQUEsTUFDRixLQUFLO0FBQ0gsWUFBSSxRQUFRLFNBQVMsTUFBTTtBQUN6QixxQkFBVyxZQUFZLE1BQU0sTUFBTSxHQUFHO0FBQUEsUUFDeEMsQ0FBQztBQUNEO0FBQUEsTUFDRixLQUFLO0FBQ0gsWUFBSSxRQUFRO0FBQ1YsY0FBSSxRQUFRLFNBQVMsTUFBTTtBQUN6Qix1QkFBVyxZQUFZLE1BQU0sTUFBTSxHQUFHO0FBQUEsVUFDeEMsQ0FBQztBQUFBLFFBQ0gsT0FBTztBQUNMLHFCQUFXLElBQUksSUFBSSxHQUFHO0FBQUEsUUFDeEI7QUFDQTtBQUFBLE1BQ0YsS0FBSztBQUNILFlBQUksUUFBUTtBQUNWLHFCQUFXLElBQUksS0FBSyxTQUFTLE1BQU07QUFDakMsbUJBQU8sTUFBTSxNQUFNLEdBQUc7QUFBQSxVQUN4QixDQUFDO0FBQUEsUUFDSCxPQUFPO0FBQ0wscUJBQVcsSUFBSSxRQUFRLEdBQUcsTUFBTTtBQUFBLFFBQ2xDO0FBQ0E7QUFBQSxNQUNGO0FBQ0UsWUFBSSxRQUFRLE9BQU8sR0FBRyxHQUFHO0FBQ3ZCLGdCQUFNLElBQUk7QUFBQSxZQUNSLFVBQVUseUNBQXlDLFVBQVUsVUFBVSxLQUFLLEdBQUcsRUFBRSxZQUFZLElBQUkseUhBQXlILEtBQUssR0FBRyxFQUFFLFlBQVk7QUFBQSxZQUNoUDtBQUFBLFlBQ0E7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUNBLFlBQUksUUFBUSxPQUFPLEtBQUssR0FBRyxHQUFHLFdBQVcsTUFBTSxVQUFVO0FBQ3pELGNBQU0sUUFBUSxTQUFTLE1BQU07QUFDM0IsY0FBSSxnQkFBZ0IsSUFBSSxVQUFVLEdBQUc7QUFDckMsd0JBQWMsTUFBTSxlQUFlLElBQUk7QUFDdkMsZ0JBQU0sZUFBZSxZQUFZLElBQUk7QUFDckMsY0FBSSxDQUFDLFVBQVUsTUFBTSxXQUFXLEdBQUc7QUFDakMsMEJBQWMsU0FBUyxNQUFNLElBQUksSUFBSSxDQUFDO0FBQ3RDO0FBQUEsVUFDRjtBQUNBLGNBQUk7QUFDRiwwQkFBYyxTQUFTLE1BQU0sSUFBSSxJQUFJLENBQUM7QUFBQSxVQUN4QyxTQUFTLEtBQUs7QUFDWixnQkFBSSxDQUFDLG9CQUFvQixzQkFBc0IsS0FBSyxjQUFjLEdBQUc7QUFDbkUsb0JBQU07QUFBQSxZQUNSO0FBQ0EsZ0JBQUksYUFBYTtBQUNmLHlCQUFXO0FBQ2I7QUFBQSxVQUNGO0FBQUEsUUFDRixHQUFHLElBQUk7QUFDUCxZQUFJLFVBQVUsTUFBTSxTQUFTLEtBQUssWUFBWSxNQUFNLFFBQVE7QUFDMUQsZ0JBQU07QUFBQSxRQUNSO0FBQ0E7QUFBQSxJQUNKO0FBQ0EsU0FBSztBQUFBLE1BQ0g7QUFBQSxNQUNBLHlCQUF5QixhQUFhLGFBQWEsU0FBUyxHQUFHO0FBQUEsTUFDL0QsNkJBQTZCLGFBQWEsYUFBYSxTQUFTLEdBQUc7QUFBQSxJQUNyRTtBQUFBLEVBQ0Y7QUFDQSxTQUFPLFNBQVMsU0FBUztBQUN6QixZQUFVLG1CQUFtQixXQUFXLFNBQVMsdUJBQXVCO0FBQ3hFLFlBQVUsbUJBQW1CLFdBQVcsU0FBUyx1QkFBdUI7QUFDeEUsWUFBVSxtQkFBbUIsWUFBWSxTQUFTLHVCQUF1QjtBQUN6RSxZQUFVLG1CQUFtQixZQUFZLFNBQVMsdUJBQXVCO0FBQ3pFLFlBQVUsWUFBWSxNQUFNLFdBQVc7QUFDckMsU0FBSztBQUFBLE1BQ0gsTUFBTSxNQUFNLFFBQVE7QUFBQSxNQUNwQjtBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBQUEsRUFDRixDQUFDO0FBQ0QsWUFBVSxZQUFZLFFBQVEsV0FBVztBQUN2QyxTQUFLO0FBQUEsTUFDSCxTQUFTLE1BQU0sTUFBTSxRQUFRO0FBQUEsTUFDN0I7QUFBQSxNQUNBO0FBQUEsTUFDQSxNQUFNLE1BQU0sUUFBUSxJQUFJLFFBQVE7QUFBQSxJQUNsQztBQUFBLEVBQ0YsQ0FBQztBQUNELFlBQVUsWUFBWSxXQUFXLFdBQVc7QUFDMUMsVUFBTSxTQUFTLE1BQU0sTUFBTSxRQUFRO0FBQ25DLFNBQUs7QUFBQSxNQUNILENBQUMsVUFBVSxRQUFRLEVBQUUsU0FBUyxLQUFLLE1BQU0sQ0FBQztBQUFBLE1BQzFDO0FBQUEsTUFDQTtBQUFBLE1BQ0EsTUFBTSxNQUFNLFFBQVEsSUFBSSxRQUFRO0FBQUEsSUFDbEM7QUFBQSxFQUNGLENBQUM7QUFDRCxZQUFVLFlBQVksWUFBWSxXQUFXO0FBQzNDLFVBQU0sTUFBTSxNQUFNLE1BQU0sUUFBUTtBQUNoQyxVQUFNLE9BQU8sTUFBTSxNQUFNLE1BQU07QUFDL0IsVUFBTSxVQUFVLE1BQU0sTUFBTSxTQUFTO0FBQ3JDLFVBQU0sTUFBTSxVQUFVLEdBQUcsT0FBTyxPQUFPO0FBQ3ZDLFVBQU0sU0FBUyxNQUFNLE1BQU0sUUFBUTtBQUNuQyxVQUFNLG1CQUFtQixTQUFTLEdBQUcsR0FBRyxZQUFZLFNBQVMsR0FBRyxDQUFDLG1DQUFtQyxHQUFHLEdBQUcsWUFBWSxTQUFTLEdBQUcsQ0FBQztBQUNuSSxVQUFNLGFBQWEsQ0FBQyxZQUFZLGlCQUFpQixxQkFBcUIsd0JBQXdCLEVBQUUsU0FBUyxLQUFLLEdBQUcsQ0FBQztBQUNsSCxRQUFJLGNBQWMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxRQUFRO0FBQ2xELFlBQU0sSUFBSTtBQUFBLFFBQ1I7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsRUFDRixDQUFDO0FBQ0QsWUFBVSxZQUFZLFNBQVMsV0FBVztBQUN4QyxTQUFLO0FBQUEsTUFDSCxVQUFVLE1BQU0sTUFBTSxRQUFRO0FBQUEsTUFDOUI7QUFBQSxNQUNBO0FBQUEsTUFDQSxNQUFNLE1BQU0sUUFBUSxJQUFJLE9BQU87QUFBQSxJQUNqQztBQUFBLEVBQ0YsQ0FBQztBQUNELFlBQVUsWUFBWSxRQUFRLFdBQVc7QUFDdkMsU0FBSztBQUFBLE1BQ0gsU0FBUyxNQUFNLE1BQU0sUUFBUTtBQUFBLE1BQzdCO0FBQUEsTUFDQTtBQUFBLElBQ0Y7QUFBQSxFQUNGLENBQUM7QUFDRCxZQUFVLFlBQVksYUFBYSxXQUFXO0FBQzVDLFNBQUs7QUFBQSxNQUNILFdBQVcsTUFBTSxNQUFNLFFBQVE7QUFBQSxNQUMvQjtBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBQUEsRUFDRixDQUFDO0FBQ0QsWUFBVSxZQUFZLE9BQU8sV0FBVztBQUN0QyxTQUFLO0FBQUEsTUFDSFIsUUFBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQUEsTUFDNUI7QUFBQSxNQUNBO0FBQUEsSUFDRjtBQUFBLEVBQ0YsQ0FBQztBQUNELFdBQVMsY0FBYztBQUNyQixRQUFJLE1BQU0sTUFBTSxNQUFNLFFBQVE7QUFDOUIsU0FBSztBQUFBLE1BQ0gsUUFBUSxRQUFRLFFBQVE7QUFBQSxNQUN4QjtBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNBLFNBQU8sYUFBYSxhQUFhO0FBQ2pDLFlBQVUsWUFBWSxTQUFTLFdBQVc7QUFDMUMsWUFBVSxZQUFZLFVBQVUsV0FBVztBQUMzQyxZQUFVLFlBQVksU0FBUyxXQUFXO0FBQ3hDLFFBQUksTUFBTSxNQUFNLE1BQU0sUUFBUSxHQUFHLE9BQU8sTUFBTSxNQUFNLE1BQU0sR0FBRyxVQUFVLE1BQU0sTUFBTSxTQUFTLEdBQUc7QUFDL0YsY0FBVSxVQUFVLFVBQVUsT0FBTztBQUNyQyxZQUFRLEtBQUssR0FBRyxFQUFFLFlBQVksR0FBRztBQUFBLE1BQy9CLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFDSCxxQkFBYSxJQUFJO0FBQ2pCO0FBQUEsTUFDRixLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQ0gscUJBQWEsSUFBSTtBQUNqQjtBQUFBLE1BQ0YsS0FBSztBQUFBLE1BQ0wsS0FBSztBQUNILGNBQU0sSUFBSTtBQUFBLFVBQ1IsVUFBVTtBQUFBLFVBQ1Y7QUFBQSxVQUNBO0FBQUEsUUFDRjtBQUFBLE1BQ0YsS0FBSztBQUNILFlBQUksTUFBTSxVQUFVLGtDQUFrQyxRQUFRLEdBQUc7QUFDakUsY0FBTSxJQUFJLGVBQWUsSUFBSSxLQUFLLEdBQUcsUUFBUSxJQUFJO0FBQUEsTUFDbkQ7QUFDRSxZQUFJLFFBQVEsT0FBTyxHQUFHLEdBQUc7QUFDdkIsZ0JBQU0sSUFBSTtBQUFBLFlBQ1IsVUFBVSw0Q0FBNEMsU0FBUyxHQUFHO0FBQUEsWUFDbEU7QUFBQSxZQUNBO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFDQSxxQkFBYSxPQUFPLEtBQUssR0FBRyxFQUFFO0FBQUEsSUFDbEM7QUFDQSxTQUFLO0FBQUEsTUFDSCxNQUFNO0FBQUEsTUFDTjtBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBQUEsRUFDRixDQUFDO0FBQ0QsV0FBUyxpQkFBaUI7QUFDeEIsUUFBSSxNQUFNLE1BQU0sTUFBTSxRQUFRLEdBQUcsUUFBUSxLQUFLLEdBQUc7QUFDakQsU0FBSztBQUFBLE1BQ0gsZ0JBQWdCO0FBQUEsTUFDaEIsOENBQThDO0FBQUEsTUFDOUM7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNBLFNBQU8sZ0JBQWdCLGdCQUFnQjtBQUN2QyxZQUFVLFlBQVksYUFBYSxjQUFjO0FBQ2pELFlBQVUsWUFBWSxhQUFhLGNBQWM7QUFDakQsV0FBUyxZQUFZLEtBQUssS0FBSztBQUM3QixRQUFJO0FBQ0YsWUFBTSxNQUFNLFdBQVcsR0FBRztBQUM1QixRQUFJLE1BQU0sTUFBTSxNQUFNLFFBQVE7QUFDOUIsUUFBSSxNQUFNLE1BQU0sTUFBTSxHQUFHO0FBQ3ZCLFVBQUksZUFBZSxNQUFNLE1BQU0sVUFBVTtBQUN6QyxZQUFNLE1BQU0sWUFBWSxJQUFJO0FBQzVCLFdBQUssSUFBSSxHQUFHO0FBQ1osWUFBTSxNQUFNLFlBQVksWUFBWTtBQUFBLElBQ3RDLE9BQU87QUFDTCxXQUFLO0FBQUEsUUFDSCxRQUFRO0FBQUEsUUFDUjtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQSxLQUFLO0FBQUEsUUFDTDtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNBLFNBQU8sYUFBYSxhQUFhO0FBQ2pDLFlBQVUsVUFBVSxTQUFTLFdBQVc7QUFDeEMsWUFBVSxVQUFVLFVBQVUsV0FBVztBQUN6QyxZQUFVLFVBQVUsTUFBTSxXQUFXO0FBQ3JDLFdBQVMsVUFBVSxLQUFLLEtBQUs7QUFDM0IsUUFBSTtBQUNGLFlBQU0sTUFBTSxXQUFXLEdBQUc7QUFDNUIsUUFBSSxNQUFNLE1BQU0sTUFBTSxLQUFLO0FBQzNCLFNBQUs7QUFBQSxNQUNILElBQUksS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQUEsTUFDOUI7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0EsS0FBSztBQUFBLE1BQ0w7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNBLFNBQU8sV0FBVyxXQUFXO0FBQzdCLFlBQVUsVUFBVSxPQUFPLFNBQVM7QUFDcEMsWUFBVSxVQUFVLFFBQVEsU0FBUztBQUNyQyxXQUFTLFlBQVksR0FBRyxLQUFLO0FBQzNCLFFBQUk7QUFDRixZQUFNLE1BQU0sV0FBVyxHQUFHO0FBQzVCLFFBQUksTUFBTSxNQUFNLE1BQU0sUUFBUSxHQUFHLFdBQVcsTUFBTSxNQUFNLFVBQVUsR0FBRyxVQUFVLE1BQU0sTUFBTSxTQUFTLEdBQUcsWUFBWSxVQUFVLFVBQVUsT0FBTyxJQUFJLE9BQU8sTUFBTSxNQUFNLE1BQU0sR0FBRyxVQUFVLEtBQUssR0FBRyxFQUFFLFlBQVksR0FBRyxRQUFRLEtBQUssQ0FBQyxFQUFFLFlBQVk7QUFDN08sUUFBSSxZQUFZLFlBQVksU0FBUyxZQUFZLE9BQU87QUFDdEQsVUFBSSxVQUFVLEtBQUssU0FBUyxNQUFNLElBQUksRUFBRSxHQUFHLEtBQUssU0FBUyxRQUFRO0FBQUEsSUFDbkU7QUFDQSxRQUFJLENBQUMsYUFBYSxZQUFZLFVBQVUsVUFBVSxTQUFTO0FBQ3pELFlBQU0sSUFBSSxlQUFlLFlBQVksd0NBQXdDLFFBQVEsSUFBSTtBQUFBLElBQzNGLFdBQVcsQ0FBQyxVQUFVLENBQUMsTUFBTSxZQUFZLFVBQVUsR0FBRyxJQUFJO0FBQ3hELFlBQU0sSUFBSSxlQUFlLFlBQVksMENBQTBDLFFBQVEsSUFBSTtBQUFBLElBQzdGLFdBQVcsQ0FBQyxhQUFhLFlBQVksVUFBVSxDQUFDLFVBQVUsR0FBRyxJQUFJO0FBQy9ELFVBQUksV0FBVyxZQUFZLFdBQVcsTUFBTSxNQUFNLE1BQU07QUFDeEQsWUFBTSxJQUFJLGVBQWUsWUFBWSxjQUFjLFdBQVcsNkJBQTZCLFFBQVEsSUFBSTtBQUFBLElBQ3pHO0FBQ0EsUUFBSSxVQUFVO0FBQ1osVUFBSSxhQUFhLFVBQVU7QUFDM0IsVUFBSSxZQUFZLFNBQVMsWUFBWSxPQUFPO0FBQzFDLHFCQUFhO0FBQ2IscUJBQWEsSUFBSTtBQUFBLE1BQ25CLE9BQU87QUFDTCxxQkFBYSxJQUFJO0FBQUEsTUFDbkI7QUFDQSxXQUFLO0FBQUEsUUFDSCxhQUFhO0FBQUEsUUFDYixnQ0FBZ0MsYUFBYTtBQUFBLFFBQzdDLG9DQUFvQyxhQUFhO0FBQUEsUUFDakQ7QUFBQSxRQUNBO0FBQUEsTUFDRjtBQUFBLElBQ0YsT0FBTztBQUNMLFdBQUs7QUFBQSxRQUNILE1BQU07QUFBQSxRQUNOO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDQSxTQUFPLGFBQWEsYUFBYTtBQUNqQyxZQUFVLFVBQVUsU0FBUyxXQUFXO0FBQ3hDLFlBQVUsVUFBVSxNQUFNLFdBQVc7QUFDckMsWUFBVSxVQUFVLGVBQWUsV0FBVztBQUM5QyxXQUFTLFlBQVksR0FBRyxLQUFLO0FBQzNCLFFBQUk7QUFDRixZQUFNLE1BQU0sV0FBVyxHQUFHO0FBQzVCLFFBQUksTUFBTSxNQUFNLE1BQU0sUUFBUSxHQUFHLFdBQVcsTUFBTSxNQUFNLFVBQVUsR0FBRyxVQUFVLE1BQU0sTUFBTSxTQUFTLEdBQUcsWUFBWSxVQUFVLFVBQVUsT0FBTyxJQUFJLE9BQU8sTUFBTSxNQUFNLE1BQU0sR0FBRyxVQUFVLEtBQUssR0FBRyxFQUFFLFlBQVksR0FBRyxRQUFRLEtBQUssQ0FBQyxFQUFFLFlBQVksR0FBRyxjQUFjLGNBQWM7QUFDNVEsUUFBSSxZQUFZLFlBQVksU0FBUyxZQUFZLE9BQU87QUFDdEQsVUFBSSxVQUFVLEtBQUssU0FBUyxNQUFNLElBQUksRUFBRSxHQUFHLEtBQUssU0FBUyxRQUFRO0FBQUEsSUFDbkU7QUFDQSxRQUFJLENBQUMsYUFBYSxZQUFZLFVBQVUsVUFBVSxTQUFTO0FBQ3pELHFCQUFlLFlBQVk7QUFBQSxJQUM3QixXQUFXLENBQUMsVUFBVSxDQUFDLE1BQU0sWUFBWSxVQUFVLEdBQUcsSUFBSTtBQUN4RCxxQkFBZSxZQUFZO0FBQUEsSUFDN0IsV0FBVyxDQUFDLGFBQWEsWUFBWSxVQUFVLENBQUMsVUFBVSxHQUFHLElBQUk7QUFDL0QsVUFBSSxXQUFXLFlBQVksV0FBVyxNQUFNLE1BQU0sTUFBTTtBQUN4RCxxQkFBZSxZQUFZLGNBQWMsV0FBVztBQUFBLElBQ3RELE9BQU87QUFDTCxvQkFBYztBQUFBLElBQ2hCO0FBQ0EsUUFBSSxhQUFhO0FBQ2YsWUFBTSxJQUFJLGVBQWUsY0FBYyxRQUFRLElBQUk7QUFBQSxJQUNyRDtBQUNBLFFBQUksVUFBVTtBQUNaLFVBQUksYUFBYSxVQUFVO0FBQzNCLFVBQUksWUFBWSxTQUFTLFlBQVksT0FBTztBQUMxQyxxQkFBYTtBQUNiLHFCQUFhLElBQUk7QUFBQSxNQUNuQixPQUFPO0FBQ0wscUJBQWEsSUFBSTtBQUFBLE1BQ25CO0FBQ0EsV0FBSztBQUFBLFFBQ0gsY0FBYztBQUFBLFFBQ2QsZ0NBQWdDLGFBQWE7QUFBQSxRQUM3QyxnQ0FBZ0MsYUFBYTtBQUFBLFFBQzdDO0FBQUEsUUFDQTtBQUFBLE1BQ0Y7QUFBQSxJQUNGLE9BQU87QUFDTCxXQUFLO0FBQUEsUUFDSCxPQUFPO0FBQUEsUUFDUDtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0EsU0FBTyxhQUFhLGFBQWE7QUFDakMsWUFBVSxVQUFVLFNBQVMsV0FBVztBQUN4QyxZQUFVLFVBQVUsT0FBTyxXQUFXO0FBQ3RDLFlBQVUsVUFBVSxzQkFBc0IsV0FBVztBQUNyRCxXQUFTLFlBQVksR0FBRyxLQUFLO0FBQzNCLFFBQUk7QUFDRixZQUFNLE1BQU0sV0FBVyxHQUFHO0FBQzVCLFFBQUksTUFBTSxNQUFNLE1BQU0sUUFBUSxHQUFHLFdBQVcsTUFBTSxNQUFNLFVBQVUsR0FBRyxVQUFVLE1BQU0sTUFBTSxTQUFTLEdBQUcsWUFBWSxVQUFVLFVBQVUsT0FBTyxJQUFJLE9BQU8sTUFBTSxNQUFNLE1BQU0sR0FBRyxVQUFVLEtBQUssR0FBRyxFQUFFLFlBQVksR0FBRyxRQUFRLEtBQUssQ0FBQyxFQUFFLFlBQVksR0FBRyxjQUFjLGNBQWM7QUFDNVEsUUFBSSxZQUFZLFlBQVksU0FBUyxZQUFZLE9BQU87QUFDdEQsVUFBSSxVQUFVLEtBQUssU0FBUyxNQUFNLElBQUksRUFBRSxHQUFHLEtBQUssU0FBUyxRQUFRO0FBQUEsSUFDbkU7QUFDQSxRQUFJLENBQUMsYUFBYSxZQUFZLFVBQVUsVUFBVSxTQUFTO0FBQ3pELHFCQUFlLFlBQVk7QUFBQSxJQUM3QixXQUFXLENBQUMsVUFBVSxDQUFDLE1BQU0sWUFBWSxVQUFVLEdBQUcsSUFBSTtBQUN4RCxxQkFBZSxZQUFZO0FBQUEsSUFDN0IsV0FBVyxDQUFDLGFBQWEsWUFBWSxVQUFVLENBQUMsVUFBVSxHQUFHLElBQUk7QUFDL0QsVUFBSSxXQUFXLFlBQVksV0FBVyxNQUFNLE1BQU0sTUFBTTtBQUN4RCxxQkFBZSxZQUFZLGNBQWMsV0FBVztBQUFBLElBQ3RELE9BQU87QUFDTCxvQkFBYztBQUFBLElBQ2hCO0FBQ0EsUUFBSSxhQUFhO0FBQ2YsWUFBTSxJQUFJLGVBQWUsY0FBYyxRQUFRLElBQUk7QUFBQSxJQUNyRDtBQUNBLFFBQUksVUFBVTtBQUNaLFVBQUksYUFBYSxVQUFVO0FBQzNCLFVBQUksWUFBWSxTQUFTLFlBQVksT0FBTztBQUMxQyxxQkFBYTtBQUNiLHFCQUFhLElBQUk7QUFBQSxNQUNuQixPQUFPO0FBQ0wscUJBQWEsSUFBSTtBQUFBLE1BQ25CO0FBQ0EsV0FBSztBQUFBLFFBQ0gsYUFBYTtBQUFBLFFBQ2IsZ0NBQWdDLGFBQWE7QUFBQSxRQUM3QyxvQ0FBb0MsYUFBYTtBQUFBLFFBQ2pEO0FBQUEsUUFDQTtBQUFBLE1BQ0Y7QUFBQSxJQUNGLE9BQU87QUFDTCxXQUFLO0FBQUEsUUFDSCxNQUFNO0FBQUEsUUFDTjtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0EsU0FBTyxhQUFhLGFBQWE7QUFDakMsWUFBVSxVQUFVLFNBQVMsV0FBVztBQUN4QyxZQUFVLFVBQVUsTUFBTSxXQUFXO0FBQ3JDLFlBQVUsVUFBVSxZQUFZLFdBQVc7QUFDM0MsV0FBUyxXQUFXLEdBQUcsS0FBSztBQUMxQixRQUFJO0FBQ0YsWUFBTSxNQUFNLFdBQVcsR0FBRztBQUM1QixRQUFJLE1BQU0sTUFBTSxNQUFNLFFBQVEsR0FBRyxXQUFXLE1BQU0sTUFBTSxVQUFVLEdBQUcsVUFBVSxNQUFNLE1BQU0sU0FBUyxHQUFHLFlBQVksVUFBVSxVQUFVLE9BQU8sSUFBSSxPQUFPLE1BQU0sTUFBTSxNQUFNLEdBQUcsVUFBVSxLQUFLLEdBQUcsRUFBRSxZQUFZLEdBQUcsUUFBUSxLQUFLLENBQUMsRUFBRSxZQUFZLEdBQUcsY0FBYyxjQUFjO0FBQzVRLFFBQUksWUFBWSxZQUFZLFNBQVMsWUFBWSxPQUFPO0FBQ3RELFVBQUksVUFBVSxLQUFLLFNBQVMsTUFBTSxJQUFJLEVBQUUsR0FBRyxLQUFLLFNBQVMsUUFBUTtBQUFBLElBQ25FO0FBQ0EsUUFBSSxDQUFDLGFBQWEsWUFBWSxVQUFVLFVBQVUsU0FBUztBQUN6RCxxQkFBZSxZQUFZO0FBQUEsSUFDN0IsV0FBVyxDQUFDLFVBQVUsQ0FBQyxNQUFNLFlBQVksVUFBVSxHQUFHLElBQUk7QUFDeEQscUJBQWUsWUFBWTtBQUFBLElBQzdCLFdBQVcsQ0FBQyxhQUFhLFlBQVksVUFBVSxDQUFDLFVBQVUsR0FBRyxJQUFJO0FBQy9ELFVBQUksV0FBVyxZQUFZLFdBQVcsTUFBTSxNQUFNLE1BQU07QUFDeEQscUJBQWUsWUFBWSxjQUFjLFdBQVc7QUFBQSxJQUN0RCxPQUFPO0FBQ0wsb0JBQWM7QUFBQSxJQUNoQjtBQUNBLFFBQUksYUFBYTtBQUNmLFlBQU0sSUFBSSxlQUFlLGNBQWMsUUFBUSxJQUFJO0FBQUEsSUFDckQ7QUFDQSxRQUFJLFVBQVU7QUFDWixVQUFJLGFBQWEsVUFBVTtBQUMzQixVQUFJLFlBQVksU0FBUyxZQUFZLE9BQU87QUFDMUMscUJBQWE7QUFDYixxQkFBYSxJQUFJO0FBQUEsTUFDbkIsT0FBTztBQUNMLHFCQUFhLElBQUk7QUFBQSxNQUNuQjtBQUNBLFdBQUs7QUFBQSxRQUNILGNBQWM7QUFBQSxRQUNkLGdDQUFnQyxhQUFhO0FBQUEsUUFDN0MsZ0NBQWdDLGFBQWE7QUFBQSxRQUM3QztBQUFBLFFBQ0E7QUFBQSxNQUNGO0FBQUEsSUFDRixPQUFPO0FBQ0wsV0FBSztBQUFBLFFBQ0gsT0FBTztBQUFBLFFBQ1A7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNBLFNBQU8sWUFBWSxZQUFZO0FBQy9CLFlBQVUsVUFBVSxRQUFRLFVBQVU7QUFDdEMsWUFBVSxVQUFVLE9BQU8sVUFBVTtBQUNyQyxZQUFVLFVBQVUsbUJBQW1CLFVBQVU7QUFDakQsWUFBVSxVQUFVLFVBQVUsU0FBU1UsUUFBTyxRQUFRLEtBQUs7QUFDekQsUUFBSTtBQUNGLFlBQU0sTUFBTSxXQUFXLEdBQUc7QUFDNUIsUUFBSSxNQUFNLE1BQU0sTUFBTSxRQUFRLEdBQUcsV0FBVyxNQUFNLE1BQU0sVUFBVSxHQUFHLFVBQVUsTUFBTSxNQUFNLFNBQVMsR0FBRyxZQUFZLFVBQVUsVUFBVSxPQUFPLElBQUksT0FBTyxNQUFNLE1BQU0sTUFBTSxHQUFHLFVBQVUsS0FBSyxHQUFHLEVBQUUsWUFBWSxHQUFHLFlBQVksS0FBS0EsTUFBSyxFQUFFLFlBQVksR0FBRyxhQUFhLEtBQUssTUFBTSxFQUFFLFlBQVksR0FBRyxjQUFjLGNBQWMsTUFBTSxRQUFRLGNBQWMsVUFBVSxlQUFlLFNBQVNBLE9BQU0sWUFBWSxJQUFJLE9BQU8sT0FBTyxZQUFZLElBQUlBLFNBQVEsT0FBTztBQUM5YixRQUFJLFlBQVksWUFBWSxTQUFTLFlBQVksT0FBTztBQUN0RCxVQUFJLFVBQVUsS0FBSyxTQUFTLE1BQU0sSUFBSSxFQUFFLEdBQUcsS0FBSyxTQUFTLFFBQVE7QUFBQSxJQUNuRTtBQUNBLFFBQUksQ0FBQyxhQUFhLFlBQVksV0FBVyxjQUFjLFVBQVUsZUFBZSxVQUFVO0FBQ3hGLHFCQUFlLFlBQVk7QUFBQSxJQUM3QixZQUFZLENBQUMsVUFBVUEsTUFBSyxLQUFLLENBQUMsVUFBVSxNQUFNLE9BQU8sWUFBWSxVQUFVLEdBQUcsSUFBSTtBQUNwRixxQkFBZSxZQUFZO0FBQUEsSUFDN0IsV0FBVyxDQUFDLGFBQWEsWUFBWSxVQUFVLENBQUMsVUFBVSxHQUFHLElBQUk7QUFDL0QsVUFBSSxXQUFXLFlBQVksV0FBVyxNQUFNLE1BQU0sTUFBTTtBQUN4RCxxQkFBZSxZQUFZLGNBQWMsV0FBVztBQUFBLElBQ3RELE9BQU87QUFDTCxvQkFBYztBQUFBLElBQ2hCO0FBQ0EsUUFBSSxhQUFhO0FBQ2YsWUFBTSxJQUFJLGVBQWUsY0FBYyxRQUFRLElBQUk7QUFBQSxJQUNyRDtBQUNBLFFBQUksVUFBVTtBQUNaLFVBQUksYUFBYSxVQUFVO0FBQzNCLFVBQUksWUFBWSxTQUFTLFlBQVksT0FBTztBQUMxQyxxQkFBYTtBQUNiLHFCQUFhLElBQUk7QUFBQSxNQUNuQixPQUFPO0FBQ0wscUJBQWEsSUFBSTtBQUFBLE1BQ25CO0FBQ0EsV0FBSztBQUFBLFFBQ0gsY0FBY0EsVUFBUyxjQUFjO0FBQUEsUUFDckMsZ0NBQWdDLGFBQWEsYUFBYTtBQUFBLFFBQzFELG9DQUFvQyxhQUFhLGFBQWE7QUFBQSxNQUNoRTtBQUFBLElBQ0YsT0FBTztBQUNMLFdBQUs7QUFBQSxRQUNILE9BQU9BLFVBQVMsT0FBTztBQUFBLFFBQ3ZCLG1DQUFtQztBQUFBLFFBQ25DLHVDQUF1QztBQUFBLE1BQ3pDO0FBQUEsSUFDRjtBQUFBLEVBQ0YsQ0FBQztBQUNELFdBQVMsaUJBQWlCLGFBQWEsS0FBSztBQUMxQyxRQUFJO0FBQ0YsWUFBTSxNQUFNLFdBQVcsR0FBRztBQUM1QixRQUFJLFNBQVMsTUFBTSxNQUFNLFFBQVE7QUFDakMsUUFBSSxPQUFPLE1BQU0sTUFBTSxNQUFNO0FBQzdCLFFBQUksVUFBVSxNQUFNLE1BQU0sU0FBUztBQUNuQyxRQUFJO0FBQ0YsVUFBSSxlQUFlLGtCQUFrQjtBQUFBLElBQ3ZDLFNBQVMsS0FBSztBQUNaLFVBQUksZUFBZSxXQUFXO0FBQzVCLGtCQUFVLFVBQVUsVUFBVSxPQUFPO0FBQ3JDLGNBQU0sSUFBSTtBQUFBLFVBQ1IsVUFBVSxzREFBc0QsS0FBSyxXQUFXLElBQUk7QUFBQSxVQUNwRjtBQUFBLFVBQ0E7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUNBLFlBQU07QUFBQSxJQUNSO0FBQ0EsUUFBSSxPQUFPLFFBQVEsV0FBVztBQUM5QixRQUFJLFFBQVEsTUFBTTtBQUNoQixhQUFPO0FBQUEsSUFDVDtBQUNBLFNBQUs7QUFBQSxNQUNIO0FBQUEsTUFDQSwyQ0FBMkM7QUFBQSxNQUMzQywrQ0FBK0M7QUFBQSxJQUNqRDtBQUFBLEVBQ0Y7QUFDQSxTQUFPLGtCQUFrQixrQkFBa0I7QUFDM0MsWUFBVSxVQUFVLGNBQWMsZ0JBQWdCO0FBQ2xELFlBQVUsVUFBVSxjQUFjLGdCQUFnQjtBQUNsRCxXQUFTLGVBQWUsTUFBTSxLQUFLLEtBQUs7QUFDdEMsUUFBSTtBQUNGLFlBQU0sTUFBTSxXQUFXLEdBQUc7QUFDNUIsUUFBSSxXQUFXLE1BQU0sTUFBTSxRQUFRLEdBQUcsUUFBUSxNQUFNLE1BQU0sS0FBSyxHQUFHLFVBQVUsTUFBTSxNQUFNLFNBQVMsR0FBRyxNQUFNLE1BQU0sTUFBTSxRQUFRLEdBQUcsT0FBTyxNQUFNLE1BQU0sTUFBTSxHQUFHLFdBQVcsT0FBTztBQUMvSyxjQUFVLFVBQVUsVUFBVSxPQUFPO0FBQ3JDLFFBQUksVUFBVTtBQUNaLFVBQUksYUFBYSxVQUFVO0FBQ3pCLGNBQU0sSUFBSTtBQUFBLFVBQ1IsVUFBVTtBQUFBLFVBQ1Y7QUFBQSxVQUNBO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBQSxJQUNGLE9BQU87QUFDTCxVQUFJLGFBQWEsWUFBWSxhQUFhLFlBQVksYUFBYSxVQUFVO0FBQzNFLGNBQU0sSUFBSTtBQUFBLFVBQ1IsVUFBVTtBQUFBLFVBQ1Y7QUFBQSxVQUNBO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQ0EsUUFBSSxZQUFZLE9BQU87QUFDckIsWUFBTSxJQUFJO0FBQUEsUUFDUixVQUFVO0FBQUEsUUFDVjtBQUFBLFFBQ0E7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUNBLFFBQUksUUFBUSxRQUFRLFFBQVEsUUFBUTtBQUNsQyxZQUFNLElBQUk7QUFBQSxRQUNSLFVBQVU7QUFBQSxRQUNWO0FBQUEsUUFDQTtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQ0EsUUFBSSxTQUFTLE1BQU0sTUFBTSxNQUFNLEdBQUcsU0FBUyxNQUFNLE1BQU0sUUFBUSxHQUFHLFdBQVcsV0FBVyxZQUFZLEtBQUssSUFBSSxJQUFJLE1BQU0sUUFBUSxXQUFXLFNBQVMsUUFBUSxJQUFJLElBQUksR0FBRyxRQUFRLFNBQVMsTUFBTSxNQUFNLEtBQUssSUFBSSxDQUFDLE1BQU0sU0FBUyxTQUFTO0FBQ3JPLFFBQUksYUFBYTtBQUNqQixRQUFJO0FBQ0Ysb0JBQWM7QUFDaEIsUUFBSTtBQUNGLG9CQUFjO0FBQ2hCLFFBQUk7QUFDRixvQkFBYztBQUNoQixrQkFBYztBQUNkLFFBQUk7QUFDSixRQUFJO0FBQ0YscUJBQWUsT0FBTyxVQUFVLGVBQWUsS0FBSyxLQUFLLElBQUk7QUFBQSxhQUN0RDtBQUNQLHFCQUFlLFNBQVM7QUFBQTtBQUV4QixxQkFBZSxZQUFZLEtBQUssSUFBSTtBQUN0QyxRQUFJLENBQUMsVUFBVSxVQUFVLFdBQVcsR0FBRztBQUNyQyxXQUFLO0FBQUEsUUFDSDtBQUFBLFFBQ0EsOEJBQThCLGFBQWEsU0FBUyxJQUFJO0FBQUEsUUFDeEQsa0NBQWtDLGFBQWEsU0FBUyxJQUFJO0FBQUEsTUFDOUQ7QUFBQSxJQUNGO0FBQ0EsUUFBSSxVQUFVLFNBQVMsR0FBRztBQUN4QixXQUFLO0FBQUEsUUFDSCxnQkFBZ0IsTUFBTSxLQUFLLEtBQUs7QUFBQSxRQUNoQyw4QkFBOEIsYUFBYSxTQUFTLElBQUksSUFBSTtBQUFBLFFBQzVELGtDQUFrQyxhQUFhLFNBQVMsSUFBSSxJQUFJO0FBQUEsUUFDaEU7QUFBQSxRQUNBO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFDQSxVQUFNLE1BQU0sVUFBVSxLQUFLO0FBQUEsRUFDN0I7QUFDQSxTQUFPLGdCQUFnQixnQkFBZ0I7QUFDdkMsWUFBVSxVQUFVLFlBQVksY0FBYztBQUM5QyxXQUFTLGtCQUFrQixNQUFNLE9BQU8sS0FBSztBQUMzQyxVQUFNLE1BQU0sT0FBTyxJQUFJO0FBQ3ZCLG1CQUFlLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFDdEM7QUFDQSxTQUFPLG1CQUFtQixtQkFBbUI7QUFDN0MsWUFBVSxVQUFVLGVBQWUsaUJBQWlCO0FBQ3BELFlBQVUsVUFBVSxtQkFBbUIsaUJBQWlCO0FBQ3hELFdBQVMsNEJBQTRCLE1BQU0sWUFBWSxLQUFLO0FBQzFELFFBQUksT0FBTyxlQUFlLFVBQVU7QUFDbEMsWUFBTTtBQUNOLG1CQUFhO0FBQUEsSUFDZjtBQUNBLFFBQUk7QUFDRixZQUFNLE1BQU0sV0FBVyxHQUFHO0FBQzVCLFFBQUksTUFBTSxNQUFNLE1BQU0sUUFBUTtBQUM5QixRQUFJLG1CQUFtQixPQUFPLHlCQUF5QixPQUFPLEdBQUcsR0FBRyxJQUFJO0FBQ3hFLFFBQUksTUFBTSxNQUFNLE1BQU0sS0FBSztBQUMzQixRQUFJLG9CQUFvQixZQUFZO0FBQ2xDLFdBQUs7QUFBQSxRQUNILElBQUksWUFBWSxnQkFBZ0I7QUFBQSxRQUNoQyw4Q0FBOEMsU0FBUyxJQUFJLElBQUksMEJBQTBCLFNBQVMsVUFBVSxJQUFJLFdBQVcsU0FBUyxnQkFBZ0I7QUFBQSxRQUNwSiw4Q0FBOEMsU0FBUyxJQUFJLElBQUksOEJBQThCLFNBQVMsVUFBVTtBQUFBLFFBQ2hIO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGO0FBQUEsSUFDRixPQUFPO0FBQ0wsV0FBSztBQUFBLFFBQ0g7QUFBQSxRQUNBLDZEQUE2RCxTQUFTLElBQUk7QUFBQSxRQUMxRSxpRUFBaUUsU0FBUyxJQUFJO0FBQUEsTUFDaEY7QUFBQSxJQUNGO0FBQ0EsVUFBTSxNQUFNLFVBQVUsZ0JBQWdCO0FBQUEsRUFDeEM7QUFDQSxTQUFPLDZCQUE2Qiw2QkFBNkI7QUFDakUsWUFBVSxVQUFVLHlCQUF5QiwyQkFBMkI7QUFDeEUsWUFBVSxVQUFVLDZCQUE2QiwyQkFBMkI7QUFDNUUsV0FBUyxvQkFBb0I7QUFDM0IsVUFBTSxNQUFNLFlBQVksSUFBSTtBQUFBLEVBQzlCO0FBQ0EsU0FBTyxtQkFBbUIsbUJBQW1CO0FBQzdDLFdBQVMsYUFBYSxHQUFHLEtBQUs7QUFDNUIsUUFBSTtBQUNGLFlBQU0sTUFBTSxXQUFXLEdBQUc7QUFDNUIsUUFBSSxNQUFNLE1BQU0sTUFBTSxRQUFRLEdBQUcsVUFBVSxLQUFLLEdBQUcsRUFBRSxZQUFZLEdBQUcsVUFBVSxNQUFNLE1BQU0sU0FBUyxHQUFHLE9BQU8sTUFBTSxNQUFNLE1BQU0sR0FBRyxhQUFhLFVBQVU7QUFDekosWUFBUSxTQUFTO0FBQUEsTUFDZixLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQ0gscUJBQWE7QUFDYixxQkFBYSxJQUFJO0FBQ2pCO0FBQUEsTUFDRjtBQUNFLFlBQUksVUFBVSxLQUFLLFNBQVMsTUFBTSxJQUFJLEVBQUUsR0FBRyxLQUFLLFNBQVMsUUFBUTtBQUNqRSxxQkFBYSxJQUFJO0FBQUEsSUFDckI7QUFDQSxTQUFLO0FBQUEsTUFDSCxjQUFjO0FBQUEsTUFDZCxnQ0FBZ0MsYUFBYTtBQUFBLE1BQzdDLG9DQUFvQyxhQUFhO0FBQUEsTUFDakQ7QUFBQSxNQUNBO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDQSxTQUFPLGNBQWMsY0FBYztBQUNuQyxZQUFVLG1CQUFtQixVQUFVLGNBQWMsaUJBQWlCO0FBQ3RFLFlBQVUsbUJBQW1CLFlBQVksY0FBYyxpQkFBaUI7QUFDeEUsV0FBUyxZQUFZLElBQUksS0FBSztBQUM1QixRQUFJO0FBQ0YsWUFBTSxNQUFNLFdBQVcsR0FBRztBQUM1QixRQUFJLE1BQU0sTUFBTSxNQUFNLFFBQVE7QUFDOUIsU0FBSztBQUFBLE1BQ0gsR0FBRyxLQUFLLEdBQUc7QUFBQSxNQUNYLCtCQUErQjtBQUFBLE1BQy9CLG1DQUFtQztBQUFBLElBQ3JDO0FBQUEsRUFDRjtBQUNBLFNBQU8sYUFBYSxhQUFhO0FBQ2pDLFlBQVUsVUFBVSxTQUFTLFdBQVc7QUFDeEMsWUFBVSxVQUFVLFdBQVcsV0FBVztBQUMxQyxZQUFVLFVBQVUsVUFBVSxTQUFTLEtBQUssS0FBSztBQUMvQyxRQUFJO0FBQ0YsWUFBTSxNQUFNLFdBQVcsR0FBRztBQUM1QixRQUFJLE1BQU0sTUFBTSxNQUFNLFFBQVEsR0FBRyxVQUFVLE1BQU0sTUFBTSxTQUFTLEdBQUcsT0FBTyxNQUFNLE1BQU0sTUFBTTtBQUM1RixRQUFJLFVBQVUsS0FBSyxTQUFTLE1BQU0sSUFBSSxFQUFFLEdBQUcsRUFBRSxRQUFRO0FBQ3JELFNBQUs7QUFBQSxNQUNILENBQUMsSUFBSSxRQUFRLEdBQUc7QUFBQSxNQUNoQixpQ0FBaUMsU0FBUyxHQUFHO0FBQUEsTUFDN0MscUNBQXFDLFNBQVMsR0FBRztBQUFBLElBQ25EO0FBQUEsRUFDRixDQUFDO0FBQ0QsV0FBUyxXQUFXLE1BQU07QUFDeEIsUUFBSSxNQUFNLE1BQU0sTUFBTSxRQUFRLEdBQUcsVUFBVSxLQUFLLEdBQUcsR0FBRyxXQUFXLEtBQUssSUFBSSxHQUFHLE9BQU8sTUFBTSxNQUFNLE1BQU0sR0FBRyxTQUFTLE1BQU0sTUFBTSxNQUFNLEdBQUcsS0FBSyxVQUFVLElBQUksUUFBUSxLQUFLLE1BQU0sVUFBVSxNQUFNLE1BQU0sU0FBUztBQUM1TSxjQUFVLFVBQVUsVUFBVSxPQUFPO0FBQ3JDLFFBQUksZUFBZSxVQUFVO0FBQzdCLFFBQUksWUFBWSxTQUFTLFlBQVksT0FBTztBQUMxQyxnQkFBVSxTQUFTLFlBQVk7QUFDL0IsZUFBUyxDQUFDO0FBQ1YsVUFBSSxRQUFRLFNBQVMsS0FBSyxLQUFLO0FBQzdCLGVBQU8sS0FBSyxHQUFHO0FBQUEsTUFDakIsQ0FBQztBQUNELFVBQUksYUFBYSxTQUFTO0FBQ3hCLGVBQU8sTUFBTSxVQUFVLE1BQU0sS0FBSyxTQUFTO0FBQUEsTUFDN0M7QUFBQSxJQUNGLE9BQU87QUFDTCxlQUFTLDJCQUEyQixHQUFHO0FBQ3ZDLGNBQVEsVUFBVTtBQUFBLFFBQ2hCLEtBQUs7QUFDSCxjQUFJLFVBQVUsU0FBUyxHQUFHO0FBQ3hCLGtCQUFNLElBQUksZUFBZSxjQUFjLFFBQVEsSUFBSTtBQUFBLFVBQ3JEO0FBQ0E7QUFBQSxRQUNGLEtBQUs7QUFDSCxjQUFJLFVBQVUsU0FBUyxHQUFHO0FBQ3hCLGtCQUFNLElBQUksZUFBZSxjQUFjLFFBQVEsSUFBSTtBQUFBLFVBQ3JEO0FBQ0EsaUJBQU8sT0FBTyxLQUFLLElBQUk7QUFDdkI7QUFBQSxRQUNGO0FBQ0UsaUJBQU8sTUFBTSxVQUFVLE1BQU0sS0FBSyxTQUFTO0FBQUEsTUFDL0M7QUFDQSxhQUFPLEtBQUssSUFBSSxTQUFTLEtBQUs7QUFDNUIsZUFBTyxPQUFPLFFBQVEsV0FBVyxNQUFNLE9BQU8sR0FBRztBQUFBLE1BQ25ELENBQUM7QUFBQSxJQUNIO0FBQ0EsUUFBSSxDQUFDLEtBQUssUUFBUTtBQUNoQixZQUFNLElBQUksZUFBZSxVQUFVLGlCQUFpQixRQUFRLElBQUk7QUFBQSxJQUNsRTtBQUNBLFFBQUksTUFBTSxLQUFLLFFBQVEsTUFBTSxNQUFNLE1BQU0sS0FBSyxHQUFHLE1BQU0sTUFBTSxNQUFNLEtBQUssR0FBRyxXQUFXLE1BQU0sUUFBUSxTQUFTLE1BQU0sTUFBTSxLQUFLLElBQUksQ0FBQyxNQUFNLFNBQVMsU0FBUztBQUMzSixRQUFJLENBQUMsT0FBTyxDQUFDLEtBQUs7QUFDaEIsWUFBTTtBQUFBLElBQ1I7QUFDQSxRQUFJLEtBQUs7QUFDUCxXQUFLLFNBQVMsS0FBSyxTQUFTLGFBQWE7QUFDdkMsZUFBTyxPQUFPLEtBQUssU0FBUyxXQUFXO0FBQ3JDLGlCQUFPLE1BQU0sYUFBYSxTQUFTO0FBQUEsUUFDckMsQ0FBQztBQUFBLE1BQ0gsQ0FBQztBQUFBLElBQ0g7QUFDQSxRQUFJLEtBQUs7QUFDUCxXQUFLLFNBQVMsTUFBTSxTQUFTLGFBQWE7QUFDeEMsZUFBTyxPQUFPLEtBQUssU0FBUyxXQUFXO0FBQ3JDLGlCQUFPLE1BQU0sYUFBYSxTQUFTO0FBQUEsUUFDckMsQ0FBQztBQUFBLE1BQ0gsQ0FBQztBQUNELFVBQUksQ0FBQyxNQUFNLE1BQU0sVUFBVSxHQUFHO0FBQzVCLGFBQUssTUFBTSxLQUFLLFVBQVUsT0FBTztBQUFBLE1BQ25DO0FBQUEsSUFDRjtBQUNBLFFBQUksTUFBTSxHQUFHO0FBQ1gsYUFBTyxLQUFLLElBQUksU0FBUyxLQUFLO0FBQzVCLGVBQU8sU0FBUyxHQUFHO0FBQUEsTUFDckIsQ0FBQztBQUNELFVBQUksT0FBTyxLQUFLLElBQUk7QUFDcEIsVUFBSSxLQUFLO0FBQ1AsY0FBTSxLQUFLLEtBQUssSUFBSSxJQUFJLFdBQVc7QUFBQSxNQUNyQztBQUNBLFVBQUksS0FBSztBQUNQLGNBQU0sS0FBSyxLQUFLLElBQUksSUFBSSxVQUFVO0FBQUEsTUFDcEM7QUFBQSxJQUNGLE9BQU87QUFDTCxZQUFNLFNBQVMsS0FBSyxDQUFDLENBQUM7QUFBQSxJQUN4QjtBQUNBLFdBQU8sTUFBTSxJQUFJLFVBQVUsVUFBVTtBQUNyQyxXQUFPLE1BQU0sTUFBTSxVQUFVLElBQUksYUFBYSxXQUFXO0FBQ3pELFNBQUs7QUFBQSxNQUNIO0FBQUEsTUFDQSx5QkFBeUIsVUFBVTtBQUFBLE1BQ25DLDZCQUE2QixVQUFVO0FBQUEsTUFDdkMsU0FBUyxNQUFNLENBQUMsRUFBRSxLQUFLLGdCQUFnQjtBQUFBLE1BQ3ZDLE9BQU8sS0FBSyxnQkFBZ0I7QUFBQSxNQUM1QjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0EsU0FBTyxZQUFZLFlBQVk7QUFDL0IsWUFBVSxVQUFVLFFBQVEsVUFBVTtBQUN0QyxZQUFVLFVBQVUsT0FBTyxVQUFVO0FBQ3JDLFdBQVMsYUFBYSxXQUFXLGVBQWUsS0FBSztBQUNuRCxRQUFJO0FBQ0YsWUFBTSxNQUFNLFdBQVcsR0FBRztBQUM1QixRQUFJLE1BQU0sTUFBTSxNQUFNLFFBQVEsR0FBRyxPQUFPLE1BQU0sTUFBTSxNQUFNLEdBQUcsVUFBVSxNQUFNLE1BQU0sU0FBUyxHQUFHLFNBQVMsTUFBTSxNQUFNLFFBQVEsS0FBSztBQUNqSSxRQUFJLFVBQVUsS0FBSyxTQUFTLE1BQU0sSUFBSSxFQUFFLEdBQUcsRUFBRSxVQUFVO0FBQ3ZELFFBQUksVUFBVSxTQUFTLEtBQUssT0FBTyxjQUFjLFVBQVU7QUFDekQsc0JBQWdCO0FBQ2hCLGtCQUFZO0FBQUEsSUFDZDtBQUNBLFFBQUk7QUFDSixRQUFJLGlCQUFpQjtBQUNyQixRQUFJO0FBQ0YsVUFBSTtBQUFBLElBQ04sU0FBUyxLQUFLO0FBQ1osdUJBQWlCO0FBQ2pCLGtCQUFZO0FBQUEsSUFDZDtBQUNBLFFBQUksc0JBQXNCLGNBQWMsVUFBVSxrQkFBa0I7QUFDcEUsUUFBSSxvQkFBb0IsUUFBUSxhQUFhLGFBQWE7QUFDMUQsUUFBSSxnQkFBZ0I7QUFDcEIsUUFBSSxvQkFBb0I7QUFDeEIsUUFBSSx1QkFBdUIsQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRO0FBQzFELFVBQUksa0JBQWtCO0FBQ3RCLFVBQUkscUJBQXFCLE9BQU87QUFDOUIsMEJBQWtCO0FBQUEsTUFDcEIsV0FBVyxXQUFXO0FBQ3BCLDBCQUFrQixvQkFBb0IsbUJBQW1CLFNBQVM7QUFBQSxNQUNwRTtBQUNBLFVBQUksU0FBUztBQUNiLFVBQUkscUJBQXFCLE9BQU87QUFDOUIsaUJBQVMsVUFBVSxTQUFTO0FBQUEsTUFDOUIsV0FBVyxPQUFPLGNBQWMsVUFBVTtBQUN4QyxpQkFBUztBQUFBLE1BQ1gsV0FBVyxjQUFjLE9BQU8sY0FBYyxZQUFZLE9BQU8sY0FBYyxhQUFhO0FBQzFGLFlBQUk7QUFDRixtQkFBUyxvQkFBb0IsbUJBQW1CLFNBQVM7QUFBQSxRQUMzRCxTQUFTLE1BQU07QUFBQSxRQUNmO0FBQUEsTUFDRjtBQUNBLFdBQUs7QUFBQSxRQUNIO0FBQUEsUUFDQSwrQkFBK0I7QUFBQSxRQUMvQjtBQUFBLFFBQ0EsYUFBYSxVQUFVLFNBQVM7QUFBQSxRQUNoQztBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQ0EsUUFBSSxhQUFhLFdBQVc7QUFDMUIsVUFBSSxxQkFBcUIsT0FBTztBQUM5QixZQUFJLHVCQUF1QixvQkFBb0IsbUJBQW1CLFdBQVcsU0FBUztBQUN0RixZQUFJLHlCQUF5QixRQUFRO0FBQ25DLGNBQUkscUJBQXFCLFFBQVE7QUFDL0IsNEJBQWdCO0FBQUEsVUFDbEIsT0FBTztBQUNMLGlCQUFLO0FBQUEsY0FDSDtBQUFBLGNBQ0E7QUFBQSxjQUNBLDBDQUEwQyxhQUFhLENBQUMsU0FBUywyQkFBMkI7QUFBQSxjQUM1RixVQUFVLFNBQVM7QUFBQSxjQUNuQixVQUFVLFNBQVM7QUFBQSxZQUNyQjtBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUNBLFVBQUksMEJBQTBCLG9CQUFvQixzQkFBc0IsV0FBVyxTQUFTO0FBQzVGLFVBQUksNEJBQTRCLFFBQVE7QUFDdEMsWUFBSSxxQkFBcUIsUUFBUTtBQUMvQiwwQkFBZ0I7QUFBQSxRQUNsQixPQUFPO0FBQ0wsZUFBSztBQUFBLFlBQ0g7QUFBQSxZQUNBO0FBQUEsWUFDQSwwQ0FBMEMsWUFBWSwyQkFBMkI7QUFBQSxZQUNqRixxQkFBcUIsUUFBUSxVQUFVLFNBQVMsSUFBSSxhQUFhLG9CQUFvQixtQkFBbUIsU0FBUztBQUFBLFlBQ2pILHFCQUFxQixRQUFRLFVBQVUsU0FBUyxJQUFJLGFBQWEsb0JBQW9CLG1CQUFtQixTQUFTO0FBQUEsVUFDbkg7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFDQSxRQUFJLGFBQWEsa0JBQWtCLFVBQVUsa0JBQWtCLE1BQU07QUFDbkUsVUFBSSxjQUFjO0FBQ2xCLFVBQUksVUFBVSxhQUFhLEdBQUc7QUFDNUIsc0JBQWM7QUFBQSxNQUNoQjtBQUNBLFVBQUksc0JBQXNCLG9CQUFvQixrQkFBa0IsV0FBVyxhQUFhO0FBQ3hGLFVBQUksd0JBQXdCLFFBQVE7QUFDbEMsWUFBSSxxQkFBcUIsUUFBUTtBQUMvQiw4QkFBb0I7QUFBQSxRQUN0QixPQUFPO0FBQ0wsZUFBSztBQUFBLFlBQ0g7QUFBQSxZQUNBLHFDQUFxQyxjQUFjO0FBQUEsWUFDbkQseUNBQXlDLGNBQWM7QUFBQSxZQUN2RDtBQUFBLFlBQ0Esb0JBQW9CLFdBQVcsU0FBUztBQUFBLFVBQzFDO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQ0EsUUFBSSxpQkFBaUIsbUJBQW1CO0FBQ3RDLFdBQUs7QUFBQSxRQUNIO0FBQUEsUUFDQTtBQUFBLFFBQ0EsMENBQTBDLFlBQVksMkJBQTJCO0FBQUEsUUFDakYscUJBQXFCLFFBQVEsVUFBVSxTQUFTLElBQUksYUFBYSxvQkFBb0IsbUJBQW1CLFNBQVM7QUFBQSxRQUNqSCxxQkFBcUIsUUFBUSxVQUFVLFNBQVMsSUFBSSxhQUFhLG9CQUFvQixtQkFBbUIsU0FBUztBQUFBLE1BQ25IO0FBQUEsSUFDRjtBQUNBLFVBQU0sTUFBTSxVQUFVLFNBQVM7QUFBQSxFQUNqQztBQUNBLFNBQU8sY0FBYyxjQUFjO0FBQ25DLFlBQVUsVUFBVSxTQUFTLFlBQVk7QUFDekMsWUFBVSxVQUFVLFVBQVUsWUFBWTtBQUMxQyxZQUFVLFVBQVUsU0FBUyxZQUFZO0FBQ3pDLFdBQVMsVUFBVSxRQUFRLEtBQUs7QUFDOUIsUUFBSTtBQUNGLFlBQU0sTUFBTSxXQUFXLEdBQUc7QUFDNUIsUUFBSSxNQUFNLE1BQU0sTUFBTSxRQUFRLEdBQUcsU0FBUyxNQUFNLE1BQU0sUUFBUSxHQUFHLFVBQVUsZUFBZSxPQUFPLE9BQU8sQ0FBQyxTQUFTLElBQUksVUFBVSxNQUFNLElBQUksSUFBSSxNQUFNO0FBQ3BKLFNBQUs7QUFBQSxNQUNILGVBQWUsT0FBTztBQUFBLE1BQ3RCLG9DQUFvQyxTQUFTLE1BQU07QUFBQSxNQUNuRCx3Q0FBd0MsU0FBUyxNQUFNO0FBQUEsSUFDekQ7QUFBQSxFQUNGO0FBQ0EsU0FBTyxXQUFXLFdBQVc7QUFDN0IsWUFBVSxVQUFVLGFBQWEsU0FBUztBQUMxQyxZQUFVLFVBQVUsY0FBYyxTQUFTO0FBQzNDLFlBQVUsWUFBWSxVQUFVLFdBQVc7QUFDekMsVUFBTSxNQUFNLFVBQVUsSUFBSTtBQUFBLEVBQzVCLENBQUM7QUFDRCxXQUFTLFFBQVEsU0FBUyxLQUFLO0FBQzdCLFFBQUk7QUFDRixZQUFNLE1BQU0sV0FBVyxHQUFHO0FBQzVCLFFBQUksTUFBTSxNQUFNLE1BQU0sUUFBUTtBQUM5QixRQUFJLFNBQVMsUUFBUSxHQUFHO0FBQ3hCLFNBQUs7QUFBQSxNQUNIO0FBQUEsTUFDQSxpQ0FBaUMsV0FBVyxPQUFPO0FBQUEsTUFDbkQsb0NBQW9DLFdBQVcsT0FBTztBQUFBLE1BQ3RELE1BQU0sTUFBTSxRQUFRLElBQUksUUFBUTtBQUFBLE1BQ2hDO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDQSxTQUFPLFNBQVMsU0FBUztBQUN6QixZQUFVLFVBQVUsV0FBVyxPQUFPO0FBQ3RDLFlBQVUsVUFBVSxhQUFhLE9BQU87QUFDeEMsV0FBUyxRQUFRLFVBQVUsT0FBTyxLQUFLO0FBQ3JDLFFBQUk7QUFDRixZQUFNLE1BQU0sV0FBVyxHQUFHO0FBQzVCLFFBQUksTUFBTSxNQUFNLE1BQU0sUUFBUSxHQUFHLFVBQVUsTUFBTSxNQUFNLFNBQVMsR0FBRyxPQUFPLE1BQU0sTUFBTSxNQUFNO0FBQzVGLFFBQUksVUFBVSxLQUFLLFNBQVMsTUFBTSxJQUFJLEVBQUUsR0FBRztBQUMzQyxRQUFJLFVBQVU7QUFDZCxRQUFJLFNBQVM7QUFDWCxZQUFNLElBQUksZUFBZSxVQUFVLEdBQUcsT0FBTyxLQUFLLE9BQU8sS0FBSyxTQUFTLFFBQVEsSUFBSTtBQUNyRixRQUFJLFVBQVUsT0FBTyxTQUFTLE1BQU0sSUFBSSxFQUFFLEdBQUc7QUFDN0MsY0FBVTtBQUNWLFFBQUksWUFBWTtBQUNkLFlBQU0sSUFBSSxlQUFlLFVBQVUsR0FBRyxPQUFPLEtBQUssT0FBTyxLQUFLLFNBQVMsUUFBUSxJQUFJO0FBQ3JGLFFBQUksVUFBVSxVQUFVLFNBQVMsTUFBTSxJQUFJLEVBQUUsR0FBRztBQUNoRCxVQUFNLE1BQXNCLHVCQUFPLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLEdBQUcsS0FBSztBQUNoRSxTQUFLO0FBQUEsTUFDSCxJQUFJLE1BQU0sUUFBUSxLQUFLO0FBQUEsTUFDdkIscUNBQXFDLFdBQVcsVUFBVTtBQUFBLE1BQzFELHlDQUF5QyxXQUFXLFVBQVU7QUFBQSxJQUNoRTtBQUFBLEVBQ0Y7QUFDQSxTQUFPLFNBQVMsU0FBUztBQUN6QixZQUFVLFVBQVUsV0FBVyxPQUFPO0FBQ3RDLFlBQVUsVUFBVSxpQkFBaUIsT0FBTztBQUM1QyxXQUFTLFdBQVcsU0FBUyxXQUFXLEtBQUtDLFdBQVUsU0FBUztBQUM5RCxRQUFJLFdBQVcsTUFBTSxLQUFLLFNBQVM7QUFDbkMsUUFBSSxTQUFTLE1BQU0sS0FBSyxPQUFPO0FBQy9CLFFBQUksQ0FBQ0EsV0FBVTtBQUNiLFVBQUksT0FBTyxXQUFXLFNBQVM7QUFDN0IsZUFBTztBQUNULGlCQUFXLFNBQVMsTUFBTTtBQUFBLElBQzVCO0FBQ0EsV0FBTyxPQUFPLE1BQU0sU0FBUyxNQUFNLEtBQUs7QUFDdEMsVUFBSTtBQUNGLGVBQU8sTUFBTSxJQUFJLE1BQU0sU0FBUyxHQUFHLENBQUMsSUFBSSxTQUFTLFNBQVMsR0FBRztBQUMvRCxVQUFJLENBQUMsS0FBSztBQUNSLFlBQUksV0FBVyxTQUFTLFFBQVEsSUFBSTtBQUNwQyxZQUFJLGFBQWE7QUFDZixpQkFBTztBQUNULFlBQUksQ0FBQ0E7QUFDSCxtQkFBUyxPQUFPLFVBQVUsQ0FBQztBQUM3QixlQUFPO0FBQUEsTUFDVDtBQUNBLGFBQU8sU0FBUyxLQUFLLFNBQVMsT0FBTyxXQUFXO0FBQzlDLFlBQUksQ0FBQyxJQUFJLE1BQU0sS0FBSztBQUNsQixpQkFBTztBQUNULFlBQUksQ0FBQ0E7QUFDSCxtQkFBUyxPQUFPLFdBQVcsQ0FBQztBQUM5QixlQUFPO0FBQUEsTUFDVCxDQUFDO0FBQUEsSUFDSCxDQUFDO0FBQUEsRUFDSDtBQUNBLFNBQU8sWUFBWSxZQUFZO0FBQy9CLFlBQVUsVUFBVSxXQUFXLFNBQVMsUUFBUSxLQUFLO0FBQ25ELFFBQUk7QUFDRixZQUFNLE1BQU0sV0FBVyxHQUFHO0FBQzVCLFFBQUksTUFBTSxNQUFNLE1BQU0sUUFBUSxHQUFHLFVBQVUsTUFBTSxNQUFNLFNBQVMsR0FBRyxPQUFPLE1BQU0sTUFBTSxNQUFNO0FBQzVGLFFBQUksVUFBVSxLQUFLLFNBQVMsTUFBTSxJQUFJLEVBQUUsR0FBRyxHQUFHO0FBQzlDLFFBQUksVUFBVSxRQUFRLFNBQVMsTUFBTSxJQUFJLEVBQUUsR0FBRyxHQUFHO0FBQ2pELFFBQUlBLFlBQVcsTUFBTSxNQUFNLFVBQVU7QUFDckMsUUFBSSxVQUFVLE1BQU0sTUFBTSxTQUFTO0FBQ25DLFFBQUksU0FBUyxTQUFTO0FBQ3RCLFFBQUlBLFdBQVU7QUFDWixnQkFBVSxVQUFVLHdCQUF3QjtBQUM1QyxnQkFBVSw0QkFBNEIsVUFBVTtBQUNoRCxzQkFBZ0IsZ0NBQWdDLFVBQVU7QUFBQSxJQUM1RCxPQUFPO0FBQ0wsZ0JBQVUsVUFBVSxvQkFBb0I7QUFDeEMsZ0JBQVUsdUNBQXVDLFVBQVU7QUFDM0Qsc0JBQWdCLDJDQUEyQyxVQUFVO0FBQUEsSUFDdkU7QUFDQSxRQUFJLE1BQU0sTUFBTSxNQUFNLE1BQU0sSUFBSSxNQUFNLE1BQU0sS0FBSyxJQUFJO0FBQ3JELFNBQUs7QUFBQSxNQUNILFdBQVcsUUFBUSxLQUFLLEtBQUtBLFdBQVUsT0FBTztBQUFBLE1BQzlDO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0Y7QUFBQSxFQUNGLENBQUM7QUFDRCxZQUFVLFlBQVksWUFBWSxTQUFTLEtBQUs7QUFDOUMsUUFBSTtBQUNGLFlBQU0sTUFBTSxXQUFXLEdBQUc7QUFDNUIsUUFBSSxNQUFNLE1BQU0sTUFBTSxRQUFRO0FBQzlCLFNBQUs7QUFBQSxNQUNILE9BQU8sVUFBVSxJQUFJLE9BQU8sUUFBUTtBQUFBLE1BQ3BDO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBQUEsRUFDRixDQUFDO0FBQ0QsV0FBUyxNQUFNLE1BQU0sS0FBSztBQUN4QixRQUFJO0FBQ0YsWUFBTSxNQUFNLFdBQVcsR0FBRztBQUM1QixRQUFJLFdBQVcsTUFBTSxNQUFNLFFBQVEsR0FBRyxVQUFVLE1BQU0sTUFBTSxTQUFTLEdBQUcsT0FBTyxNQUFNLE1BQU0sTUFBTSxHQUFHQSxZQUFXLE1BQU0sTUFBTSxVQUFVLEdBQUcsU0FBUyxNQUFNLE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxNQUFNLEtBQUs7QUFDN0wsUUFBSSxVQUFVLE1BQU0sU0FBUyxNQUFNLElBQUksRUFBRSxHQUFHLEdBQUcsR0FBRyxPQUFPO0FBQ3pELFFBQUlBLFdBQVU7QUFDWixXQUFLO0FBQUEsUUFDSCxLQUFLLEtBQUssU0FBUyxhQUFhO0FBQzlCLGlCQUFPLFNBQVMsUUFBUSxXQUFXLElBQUk7QUFBQSxRQUN6QyxDQUFDO0FBQUEsUUFDRDtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0Y7QUFBQSxJQUNGLE9BQU87QUFDTCxVQUFJLFFBQVE7QUFDVixhQUFLO0FBQUEsVUFDSCxLQUFLLEtBQUssU0FBUyxhQUFhO0FBQzlCLG1CQUFPLElBQUksVUFBVSxXQUFXO0FBQUEsVUFDbEMsQ0FBQztBQUFBLFVBQ0Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNGO0FBQUEsTUFDRixPQUFPO0FBQ0wsYUFBSztBQUFBLFVBQ0gsS0FBSyxRQUFRLFFBQVEsSUFBSTtBQUFBLFVBQ3pCO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNBLFNBQU8sT0FBTyxPQUFPO0FBQ3JCLFlBQVUsVUFBVSxTQUFTLEtBQUs7QUFDbEMsV0FBUyxjQUFjLFNBQVMsTUFBTSxLQUFLO0FBQ3pDLFFBQUk7QUFDRixZQUFNLE1BQU0sV0FBVyxHQUFHO0FBQzVCLFFBQUlKLE1BQUssTUFBTSxNQUFNLFFBQVEsR0FBRyxVQUFVLE1BQU0sTUFBTSxTQUFTLEdBQUcsT0FBTyxNQUFNLE1BQU0sTUFBTTtBQUMzRixRQUFJLFVBQVVBLEtBQUksU0FBUyxNQUFNLElBQUksRUFBRSxHQUFHLEVBQUUsVUFBVTtBQUN0RCxRQUFJO0FBQ0osUUFBSSxDQUFDLE1BQU07QUFDVCxVQUFJLFVBQVUsU0FBUyxTQUFTLE1BQU0sSUFBSSxFQUFFLEdBQUcsRUFBRSxVQUFVO0FBQzNELGdCQUFVLFFBQVE7QUFBQSxJQUNwQixPQUFPO0FBQ0wsVUFBSSxVQUFVLFNBQVMsU0FBUyxNQUFNLElBQUksRUFBRSxHQUFHLEtBQUssU0FBUyxJQUFJO0FBQ2pFLGdCQUFVLFFBQVEsSUFBSTtBQUFBLElBQ3hCO0FBQ0EsSUFBQUEsSUFBRztBQUNILFFBQUksUUFBUSxTQUFTLFVBQVUsU0FBUyxPQUFPLFFBQVEsSUFBSSxRQUFRLElBQUk7QUFDdkUsUUFBSSxTQUFTLFNBQVMsVUFBVSxTQUFTLE9BQU8sVUFBVSxNQUFNO0FBQ2hFLFVBQU0sTUFBTSxlQUFlLE1BQU07QUFDakMsVUFBTSxNQUFNLHFCQUFxQixPQUFPO0FBQ3hDLFVBQU0sTUFBTSxtQkFBbUIsS0FBSztBQUNwQyxVQUFNLE1BQU0saUJBQWlCLFFBQVE7QUFDckMsVUFBTSxNQUFNLGFBQWEsVUFBVSxPQUFPO0FBQzFDLFNBQUs7QUFBQSxNQUNILFlBQVk7QUFBQSxNQUNaLGNBQWMsU0FBUztBQUFBLE1BQ3ZCLGNBQWMsU0FBUztBQUFBLElBQ3pCO0FBQUEsRUFDRjtBQUNBLFNBQU8sZUFBZSxlQUFlO0FBQ3JDLFlBQVUsVUFBVSxVQUFVLGFBQWE7QUFDM0MsWUFBVSxVQUFVLFdBQVcsYUFBYTtBQUM1QyxXQUFTLGdCQUFnQixTQUFTLE1BQU0sS0FBSztBQUMzQyxRQUFJO0FBQ0YsWUFBTSxNQUFNLFdBQVcsR0FBRztBQUM1QixRQUFJQSxNQUFLLE1BQU0sTUFBTSxRQUFRLEdBQUcsVUFBVSxNQUFNLE1BQU0sU0FBUyxHQUFHLE9BQU8sTUFBTSxNQUFNLE1BQU07QUFDM0YsUUFBSSxVQUFVQSxLQUFJLFNBQVMsTUFBTSxJQUFJLEVBQUUsR0FBRyxFQUFFLFVBQVU7QUFDdEQsUUFBSTtBQUNKLFFBQUksQ0FBQyxNQUFNO0FBQ1QsVUFBSSxVQUFVLFNBQVMsU0FBUyxNQUFNLElBQUksRUFBRSxHQUFHLEVBQUUsVUFBVTtBQUMzRCxnQkFBVSxRQUFRO0FBQUEsSUFDcEIsT0FBTztBQUNMLFVBQUksVUFBVSxTQUFTLFNBQVMsTUFBTSxJQUFJLEVBQUUsR0FBRyxLQUFLLFNBQVMsSUFBSTtBQUNqRSxnQkFBVSxRQUFRLElBQUk7QUFBQSxJQUN4QjtBQUNBLFFBQUksVUFBVSxTQUFTLFNBQVMsTUFBTSxJQUFJLEVBQUUsR0FBRyxFQUFFLFFBQVE7QUFDekQsSUFBQUEsSUFBRztBQUNILFFBQUksUUFBUSxTQUFTLFVBQVUsU0FBUyxPQUFPLFFBQVEsSUFBSSxRQUFRLElBQUk7QUFDdkUsUUFBSSxTQUFTLFNBQVMsVUFBVSxTQUFTLE9BQU8sVUFBVSxNQUFNO0FBQ2hFLFVBQU0sTUFBTSxlQUFlLE1BQU07QUFDakMsVUFBTSxNQUFNLHFCQUFxQixPQUFPO0FBQ3hDLFVBQU0sTUFBTSxtQkFBbUIsS0FBSztBQUNwQyxVQUFNLE1BQU0saUJBQWlCLFVBQVU7QUFDdkMsVUFBTSxNQUFNLGFBQWEsUUFBUSxPQUFPO0FBQ3hDLFNBQUs7QUFBQSxNQUNILFFBQVEsVUFBVTtBQUFBLE1BQ2xCLGNBQWMsU0FBUztBQUFBLE1BQ3ZCLGNBQWMsU0FBUztBQUFBLElBQ3pCO0FBQUEsRUFDRjtBQUNBLFNBQU8saUJBQWlCLGlCQUFpQjtBQUN6QyxZQUFVLFVBQVUsWUFBWSxlQUFlO0FBQy9DLFlBQVUsVUFBVSxhQUFhLGVBQWU7QUFDaEQsV0FBUyxnQkFBZ0IsU0FBUyxNQUFNLEtBQUs7QUFDM0MsUUFBSTtBQUNGLFlBQU0sTUFBTSxXQUFXLEdBQUc7QUFDNUIsUUFBSUEsTUFBSyxNQUFNLE1BQU0sUUFBUSxHQUFHLFVBQVUsTUFBTSxNQUFNLFNBQVMsR0FBRyxPQUFPLE1BQU0sTUFBTSxNQUFNO0FBQzNGLFFBQUksVUFBVUEsS0FBSSxTQUFTLE1BQU0sSUFBSSxFQUFFLEdBQUcsRUFBRSxVQUFVO0FBQ3RELFFBQUk7QUFDSixRQUFJLENBQUMsTUFBTTtBQUNULFVBQUksVUFBVSxTQUFTLFNBQVMsTUFBTSxJQUFJLEVBQUUsR0FBRyxFQUFFLFVBQVU7QUFDM0QsZ0JBQVUsUUFBUTtBQUFBLElBQ3BCLE9BQU87QUFDTCxVQUFJLFVBQVUsU0FBUyxTQUFTLE1BQU0sSUFBSSxFQUFFLEdBQUcsS0FBSyxTQUFTLElBQUk7QUFDakUsZ0JBQVUsUUFBUSxJQUFJO0FBQUEsSUFDeEI7QUFDQSxRQUFJLFVBQVUsU0FBUyxTQUFTLE1BQU0sSUFBSSxFQUFFLEdBQUcsRUFBRSxRQUFRO0FBQ3pELElBQUFBLElBQUc7QUFDSCxRQUFJLFFBQVEsU0FBUyxVQUFVLFNBQVMsT0FBTyxRQUFRLElBQUksUUFBUSxJQUFJO0FBQ3ZFLFFBQUksU0FBUyxTQUFTLFVBQVUsU0FBUyxPQUFPLFVBQVUsTUFBTTtBQUNoRSxVQUFNLE1BQU0sZUFBZSxNQUFNO0FBQ2pDLFVBQU0sTUFBTSxxQkFBcUIsT0FBTztBQUN4QyxVQUFNLE1BQU0sbUJBQW1CLEtBQUs7QUFDcEMsVUFBTSxNQUFNLGlCQUFpQixVQUFVO0FBQ3ZDLFVBQU0sTUFBTSxhQUFhLFVBQVUsS0FBSztBQUN4QyxTQUFLO0FBQUEsTUFDSCxRQUFRLFVBQVU7QUFBQSxNQUNsQixjQUFjLFNBQVM7QUFBQSxNQUN2QixjQUFjLFNBQVM7QUFBQSxJQUN6QjtBQUFBLEVBQ0Y7QUFDQSxTQUFPLGlCQUFpQixpQkFBaUI7QUFDekMsWUFBVSxVQUFVLFlBQVksZUFBZTtBQUMvQyxZQUFVLFVBQVUsYUFBYSxlQUFlO0FBQ2hELFdBQVMsWUFBWSxPQUFPLEtBQUs7QUFDL0IsUUFBSTtBQUNGLFlBQU0sTUFBTSxXQUFXLEdBQUc7QUFDNUIsUUFBSSxTQUFTLE1BQU0sTUFBTSxhQUFhO0FBQ3RDLFFBQUksVUFBVSxNQUFNLE1BQU0sbUJBQW1CO0FBQzdDLFFBQUksUUFBUSxNQUFNLE1BQU0saUJBQWlCO0FBQ3pDLFFBQUksV0FBVyxNQUFNLE1BQU0sZUFBZTtBQUMxQyxRQUFJLFlBQVksTUFBTSxNQUFNLFdBQVc7QUFDdkMsUUFBSTtBQUNKLFFBQUksYUFBYSxVQUFVO0FBQ3pCLG1CQUFhLEtBQUssSUFBSSxRQUFRLE9BQU8sTUFBTSxLQUFLLElBQUksS0FBSztBQUFBLElBQzNELE9BQU87QUFDTCxtQkFBYSxjQUFjLEtBQUssSUFBSSxLQUFLO0FBQUEsSUFDM0M7QUFDQSxTQUFLO0FBQUEsTUFDSDtBQUFBLE1BQ0EsY0FBYyxTQUFTLFNBQVMsV0FBVyxTQUFTO0FBQUEsTUFDcEQsY0FBYyxTQUFTLGFBQWEsV0FBVyxTQUFTO0FBQUEsSUFDMUQ7QUFBQSxFQUNGO0FBQ0EsU0FBTyxhQUFhLGFBQWE7QUFDakMsWUFBVSxVQUFVLE1BQU0sV0FBVztBQUNyQyxZQUFVLFlBQVksY0FBYyxXQUFXO0FBQzdDLFFBQUksTUFBTSxNQUFNLE1BQU0sUUFBUTtBQUM5QixRQUFJLGVBQWUsUUFBUSxPQUFPLEdBQUcsS0FBSyxPQUFPLGFBQWEsR0FBRztBQUNqRSxTQUFLO0FBQUEsTUFDSDtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRjtBQUFBLEVBQ0YsQ0FBQztBQUNELFlBQVUsWUFBWSxVQUFVLFdBQVc7QUFDekMsUUFBSSxNQUFNLE1BQU0sTUFBTSxRQUFRO0FBQzlCLFFBQUksV0FBVyxRQUFRLE9BQU8sR0FBRyxJQUFJLE9BQU8sU0FBUyxHQUFHLElBQUk7QUFDNUQsU0FBSztBQUFBLE1BQ0g7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0Y7QUFBQSxFQUNGLENBQUM7QUFDRCxZQUFVLFlBQVksVUFBVSxXQUFXO0FBQ3pDLFFBQUksTUFBTSxNQUFNLE1BQU0sUUFBUTtBQUM5QixRQUFJLFdBQVcsUUFBUSxPQUFPLEdBQUcsSUFBSSxPQUFPLFNBQVMsR0FBRyxJQUFJO0FBQzVELFNBQUs7QUFBQSxNQUNIO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBQUEsRUFDRixDQUFDO0FBQ0QsWUFBVSxZQUFZLFVBQVUsU0FBUyxLQUFLO0FBQzVDLFFBQUksTUFBTSxNQUFNLE1BQU0sUUFBUTtBQUM5QixTQUFLO0FBQUEsTUFDSCxPQUFPLFFBQVEsWUFBWSxTQUFTLEdBQUc7QUFBQSxNQUN2QztBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBQUEsRUFDRixDQUFDO0FBR0QsV0FBUyxPQUFPLEtBQUssU0FBUztBQUM1QixXQUFPLElBQUksVUFBVSxLQUFLLE9BQU87QUFBQSxFQUNuQztBQUNBLFNBQU8sUUFBUSxRQUFRO0FBQ3ZCLFNBQU8sT0FBTyxTQUFTLFFBQVEsVUFBVSxTQUFTLFVBQVU7QUFDMUQsUUFBSSxVQUFVLFNBQVMsR0FBRztBQUN4QixnQkFBVTtBQUNWLGVBQVM7QUFBQSxJQUNYO0FBQ0EsY0FBVSxXQUFXO0FBQ3JCLFVBQU0sSUFBSSxlQUFlLFNBQVM7QUFBQSxNQUNoQztBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRixHQUFHLE9BQU8sSUFBSTtBQUFBLEVBQ2hCO0FBR0EsTUFBSSxpQkFBaUIsQ0FBQztBQUN0QixFQUFBUixVQUFTLGdCQUFnQjtBQUFBLElBQ3ZCLFFBQVEsTUFBTTtBQUFBLElBQ2QsUUFBUSxNQUFNO0FBQUEsRUFDaEIsQ0FBQztBQUNELFdBQVMsYUFBYTtBQUNwQixhQUFTLGVBQWU7QUFDdEIsVUFBSSxnQkFBZ0IsVUFBVSxnQkFBZ0IsVUFBVSxnQkFBZ0IsV0FBVyxPQUFPLFdBQVcsY0FBYyxnQkFBZ0IsVUFBVSxPQUFPLFdBQVcsY0FBYyxnQkFBZ0IsUUFBUTtBQUNuTSxlQUFPLElBQUksVUFBVSxLQUFLLFFBQVEsR0FBRyxNQUFNLFlBQVk7QUFBQSxNQUN6RDtBQUNBLGFBQU8sSUFBSSxVQUFVLE1BQU0sTUFBTSxZQUFZO0FBQUEsSUFDL0M7QUFDQSxXQUFPLGNBQWMsY0FBYztBQUNuQyxhQUFTLGFBQWEsT0FBTztBQUMzQixhQUFPLGVBQWUsTUFBTSxVQUFVO0FBQUEsUUFDcEM7QUFBQSxRQUNBLFlBQVk7QUFBQSxRQUNaLGNBQWM7QUFBQSxRQUNkLFVBQVU7QUFBQSxNQUNaLENBQUM7QUFBQSxJQUNIO0FBQ0EsV0FBTyxjQUFjLGNBQWM7QUFDbkMsV0FBTyxlQUFlLE9BQU8sV0FBVyxVQUFVO0FBQUEsTUFDaEQsS0FBSztBQUFBLE1BQ0wsS0FBSztBQUFBLE1BQ0wsY0FBYztBQUFBLElBQ2hCLENBQUM7QUFDRCxRQUFJLFVBQVUsQ0FBQztBQUNmLFlBQVEsT0FBTyxTQUFTLFFBQVEsVUFBVSxTQUFTLFVBQVU7QUFDM0QsVUFBSSxVQUFVLFNBQVMsR0FBRztBQUN4QixrQkFBVTtBQUNWLGlCQUFTO0FBQUEsTUFDWDtBQUNBLGdCQUFVLFdBQVc7QUFDckIsWUFBTSxJQUFJLGVBQWUsU0FBUztBQUFBLFFBQ2hDO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGLEdBQUcsUUFBUSxJQUFJO0FBQUEsSUFDakI7QUFDQSxZQUFRLFFBQVEsU0FBUyxRQUFRLFVBQVUsU0FBUztBQUNsRCxVQUFJLFVBQVUsUUFBUSxPQUFPLEVBQUUsR0FBRyxNQUFNLFFBQVE7QUFBQSxJQUNsRDtBQUNBLFlBQVEsUUFBUSxTQUFTUSxLQUFJLE1BQU0sTUFBTSxLQUFLO0FBQzVDLFVBQUksVUFBVUEsS0FBSSxHQUFHLEVBQUUsR0FBRyxNQUFNLE1BQU0sSUFBSTtBQUFBLElBQzVDO0FBQ0EsWUFBUSxRQUFRLFNBQVMsS0FBSyxLQUFLO0FBQ2pDLFVBQUksVUFBVSxLQUFLLEdBQUcsRUFBRSxHQUFHO0FBQUEsSUFDN0I7QUFDQSxZQUFRLE1BQU0sQ0FBQztBQUNmLFlBQVEsSUFBSSxRQUFRLFNBQVMsUUFBUSxVQUFVLEtBQUs7QUFDbEQsVUFBSSxVQUFVLFFBQVEsR0FBRyxFQUFFLEdBQUcsSUFBSSxNQUFNLFFBQVE7QUFBQSxJQUNsRDtBQUNBLFlBQVEsSUFBSSxRQUFRLFNBQVNBLEtBQUksTUFBTSxNQUFNLEtBQUs7QUFDaEQsVUFBSSxVQUFVQSxLQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksTUFBTSxNQUFNLElBQUk7QUFBQSxJQUNoRDtBQUNBLFlBQVEsSUFBSSxRQUFRLFNBQVMsS0FBSyxLQUFLO0FBQ3JDLFVBQUksVUFBVSxLQUFLLEdBQUcsRUFBRSxHQUFHLElBQUk7QUFBQSxJQUNqQztBQUNBLFlBQVEsT0FBTyxJQUFJLFFBQVEsT0FBTztBQUNsQyxZQUFRLElBQUksT0FBTyxJQUFJLFFBQVEsSUFBSSxPQUFPO0FBQzFDLFdBQU87QUFBQSxFQUNUO0FBQ0EsU0FBTyxZQUFZLFlBQVk7QUFDL0IsTUFBSSxTQUFTO0FBQ2IsTUFBSSxTQUFTO0FBR2IsV0FBUyxPQUFPLFNBQVMsUUFBUTtBQUMvQixRQUFJLFFBQVEsSUFBSSxVQUFVLE1BQU0sTUFBTSxRQUFRLElBQUk7QUFDbEQsVUFBTTtBQUFBLE1BQ0o7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0EsU0FBTyxRQUFRLFFBQVE7QUFDdkIsU0FBTyxPQUFPLFNBQVMsUUFBUSxVQUFVLFNBQVMsVUFBVTtBQUMxRCxRQUFJLFVBQVUsU0FBUyxHQUFHO0FBQ3hCLGdCQUFVO0FBQ1YsZUFBUztBQUFBLElBQ1g7QUFDQSxjQUFVLFdBQVc7QUFDckIsVUFBTSxJQUFJLGVBQWUsU0FBUztBQUFBLE1BQ2hDO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGLEdBQUcsT0FBTyxJQUFJO0FBQUEsRUFDaEI7QUFDQSxTQUFPLE9BQU8sU0FBUyxLQUFLLEtBQUs7QUFDL0IsUUFBSSxVQUFVLEtBQUssS0FBSyxPQUFPLE1BQU0sSUFBSSxFQUFFLEdBQUc7QUFBQSxFQUNoRDtBQUNBLFNBQU8sVUFBVSxTQUFTLEtBQUssS0FBSztBQUNsQyxRQUFJLFVBQVUsS0FBSyxLQUFLLE9BQU8sU0FBUyxJQUFJLEVBQUUsR0FBRyxJQUFJO0FBQUEsRUFDdkQ7QUFDQSxTQUFPLFFBQVEsU0FBUyxLQUFLLEtBQUssS0FBSztBQUNyQyxRQUFJLFFBQVEsSUFBSSxVQUFVLEtBQUssS0FBSyxPQUFPLE9BQU8sSUFBSTtBQUN0RCxVQUFNO0FBQUEsTUFDSixPQUFPLEtBQUssT0FBTyxRQUFRO0FBQUEsTUFDM0I7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDQSxTQUFPLFdBQVcsU0FBUyxLQUFLLEtBQUssS0FBSztBQUN4QyxRQUFJLFFBQVEsSUFBSSxVQUFVLEtBQUssS0FBSyxPQUFPLFVBQVUsSUFBSTtBQUN6RCxVQUFNO0FBQUEsTUFDSixPQUFPLEtBQUssT0FBTyxRQUFRO0FBQUEsTUFDM0I7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDQSxTQUFPLGNBQWMsU0FBUyxLQUFLLEtBQUssS0FBSztBQUMzQyxRQUFJLFVBQVUsS0FBSyxLQUFLLE9BQU8sYUFBYSxJQUFJLEVBQUUsR0FBRyxNQUFNLEdBQUc7QUFBQSxFQUNoRTtBQUNBLFNBQU8saUJBQWlCLFNBQVMsS0FBSyxLQUFLLEtBQUs7QUFDOUMsUUFBSSxVQUFVLEtBQUssS0FBSyxPQUFPLGdCQUFnQixJQUFJLEVBQUUsR0FBRyxJQUFJLE1BQU0sR0FBRztBQUFBLEVBQ3ZFO0FBQ0EsU0FBTyxZQUFZLE9BQU8sa0JBQWtCLFNBQVMsS0FBSyxLQUFLLEtBQUs7QUFDbEUsUUFBSSxVQUFVLEtBQUssS0FBSyxPQUFPLFdBQVcsSUFBSSxFQUFFLEdBQUcsSUFBSSxHQUFHO0FBQUEsRUFDNUQ7QUFDQSxTQUFPLGVBQWUsU0FBUyxLQUFLLEtBQUssS0FBSztBQUM1QyxRQUFJLFVBQVUsS0FBSyxLQUFLLE9BQU8sY0FBYyxJQUFJLEVBQUUsR0FBRyxJQUFJLElBQUksR0FBRztBQUFBLEVBQ25FO0FBQ0EsU0FBTyxVQUFVLFNBQVMsS0FBSyxLQUFLLEtBQUs7QUFDdkMsUUFBSSxVQUFVLEtBQUssS0FBSyxPQUFPLFNBQVMsSUFBSSxFQUFFLEdBQUcsR0FBRyxNQUFNLEdBQUc7QUFBQSxFQUMvRDtBQUNBLFNBQU8sWUFBWSxTQUFTLEtBQUssT0FBTyxLQUFLO0FBQzNDLFFBQUksVUFBVSxLQUFLLEtBQUssT0FBTyxXQUFXLElBQUksRUFBRSxHQUFHLEdBQUcsTUFBTSxLQUFLO0FBQUEsRUFDbkU7QUFDQSxTQUFPLFVBQVUsU0FBUyxLQUFLLEtBQUssS0FBSztBQUN2QyxRQUFJLFVBQVUsS0FBSyxLQUFLLE9BQU8sU0FBUyxJQUFJLEVBQUUsR0FBRyxHQUFHLE1BQU0sR0FBRztBQUFBLEVBQy9EO0FBQ0EsU0FBTyxXQUFXLFNBQVMsS0FBSyxPQUFPLEtBQUs7QUFDMUMsUUFBSSxVQUFVLEtBQUssS0FBSyxPQUFPLFVBQVUsSUFBSSxFQUFFLEdBQUcsR0FBRyxLQUFLLEtBQUs7QUFBQSxFQUNqRTtBQUNBLFNBQU8sU0FBUyxTQUFTLEtBQUssS0FBSztBQUNqQyxRQUFJLFVBQVUsS0FBSyxLQUFLLE9BQU8sUUFBUSxJQUFJLEVBQUUsR0FBRyxNQUFNO0FBQUEsRUFDeEQ7QUFDQSxTQUFPLFlBQVksU0FBUyxLQUFLLEtBQUs7QUFDcEMsUUFBSSxVQUFVLEtBQUssS0FBSyxPQUFPLFdBQVcsSUFBSSxFQUFFLEdBQUcsSUFBSSxNQUFNLElBQUk7QUFBQSxFQUNuRTtBQUNBLFNBQU8sVUFBVSxTQUFTLEtBQUssS0FBSztBQUNsQyxRQUFJLFVBQVUsS0FBSyxLQUFLLE9BQU8sU0FBUyxJQUFJLEVBQUUsR0FBRyxPQUFPO0FBQUEsRUFDMUQ7QUFDQSxTQUFPLGFBQWEsU0FBUyxLQUFLLEtBQUs7QUFDckMsUUFBSSxVQUFVLEtBQUssS0FBSyxPQUFPLFlBQVksSUFBSSxFQUFFLEdBQUcsSUFBSSxNQUFNLEtBQUs7QUFBQSxFQUNyRTtBQUNBLFNBQU8sU0FBUyxTQUFTLEtBQUssS0FBSztBQUNqQyxRQUFJLFVBQVUsS0FBSyxLQUFLLE9BQU8sUUFBUSxJQUFJLEVBQUUsR0FBRyxNQUFNLElBQUk7QUFBQSxFQUM1RDtBQUNBLFNBQU8sWUFBWSxTQUFTLEtBQUssS0FBSztBQUNwQyxRQUFJLFVBQVUsS0FBSyxLQUFLLE9BQU8sV0FBVyxJQUFJLEVBQUUsR0FBRyxJQUFJLE1BQU0sSUFBSTtBQUFBLEVBQ25FO0FBQ0EsU0FBTyxRQUFRLFNBQVMsS0FBSyxLQUFLO0FBQ2hDLFFBQUksVUFBVSxLQUFLLEtBQUssT0FBTyxPQUFPLElBQUksRUFBRSxHQUFHLEdBQUc7QUFBQSxFQUNwRDtBQUNBLFNBQU8sV0FBVyxTQUFTLE9BQU8sU0FBUztBQUN6QyxRQUFJLFVBQVUsT0FBTyxTQUFTLE9BQU8sVUFBVSxJQUFJLEVBQUUsSUFBSSxHQUFHLEdBQUc7QUFBQSxFQUNqRTtBQUNBLFNBQU8sU0FBUyxTQUFTLEtBQUssS0FBSztBQUNqQyxRQUFJLFVBQVUsS0FBSyxLQUFLLE9BQU8sUUFBUSxJQUFJLEVBQUUsR0FBRztBQUFBLEVBQ2xEO0FBQ0EsU0FBTyxZQUFZLFNBQVMsS0FBSyxLQUFLO0FBQ3BDLFFBQUksVUFBVSxLQUFLLEtBQUssT0FBTyxXQUFXLElBQUksRUFBRSxHQUFHLElBQUk7QUFBQSxFQUN6RDtBQUNBLFNBQU8sY0FBYyxTQUFTLEtBQUssS0FBSztBQUN0QyxRQUFJLFVBQVUsS0FBSyxLQUFLLE9BQU8sYUFBYSxJQUFJLEVBQUUsR0FBRyxNQUFNLE1BQU07QUFBQSxFQUNuRTtBQUNBLFNBQU8sWUFBWSxTQUFTLEtBQUssS0FBSztBQUNwQyxRQUFJLFVBQVUsS0FBSyxLQUFLLE9BQU8sV0FBVyxJQUFJLEVBQUUsR0FBRyxJQUFJLE1BQU0sTUFBTTtBQUFBLEVBQ3JFO0FBQ0EsU0FBTyxhQUFhLFNBQVMsT0FBTyxTQUFTO0FBQzNDLFFBQUksVUFBVSxPQUFPLFNBQVMsT0FBTyxZQUFZLElBQUksRUFBRSxHQUFHO0FBQUEsRUFDNUQ7QUFDQSxTQUFPLGdCQUFnQixTQUFTLE9BQU8sU0FBUztBQUM5QyxRQUFJLFVBQVUsT0FBTyxTQUFTLE9BQU8sZUFBZSxJQUFJLEVBQUUsR0FBRyxJQUFJO0FBQUEsRUFDbkU7QUFDQSxTQUFPLFdBQVcsU0FBUyxLQUFLLEtBQUs7QUFDbkMsUUFBSSxVQUFVLEtBQUssS0FBSyxPQUFPLFVBQVUsSUFBSSxFQUFFLEdBQUcsR0FBRyxFQUFFLFFBQVE7QUFBQSxFQUNqRTtBQUNBLFNBQU8sY0FBYyxTQUFTLEtBQUssS0FBSztBQUN0QyxRQUFJLFVBQVUsS0FBSyxLQUFLLE9BQU8sYUFBYSxJQUFJLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxRQUFRO0FBQUEsRUFDeEU7QUFDQSxTQUFPLFVBQVUsU0FBUyxLQUFLLEtBQUs7QUFDbEMsUUFBSSxVQUFVLEtBQUssS0FBSyxPQUFPLFNBQVMsSUFBSSxFQUFFLEdBQUcsR0FBRyxHQUFHLE9BQU87QUFBQSxFQUNoRTtBQUNBLFNBQU8sYUFBYSxTQUFTLEtBQUssS0FBSztBQUNyQyxRQUFJLFVBQVUsS0FBSyxLQUFLLE9BQU8sWUFBWSxJQUFJLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxPQUFPO0FBQUEsRUFDdkU7QUFDQSxTQUFPLFdBQVcsU0FBUyxLQUFLLEtBQUs7QUFDbkMsUUFBSSxVQUFVLEtBQUssS0FBSyxPQUFPLFVBQVUsSUFBSSxFQUFFLEdBQUcsR0FBRyxFQUFFLFFBQVE7QUFBQSxFQUNqRTtBQUNBLFNBQU8sY0FBYyxTQUFTLEtBQUssS0FBSztBQUN0QyxRQUFJLFVBQVUsS0FBSyxLQUFLLE9BQU8sYUFBYSxJQUFJLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxRQUFRO0FBQUEsRUFDeEU7QUFDQSxTQUFPLFdBQVcsU0FBUyxLQUFLLEtBQUs7QUFDbkMsUUFBSSxVQUFVLEtBQUssS0FBSyxPQUFPLFVBQVUsSUFBSSxFQUFFLEdBQUcsR0FBRyxFQUFFLFFBQVE7QUFBQSxFQUNqRTtBQUNBLFNBQU8sY0FBYyxTQUFTLEtBQUssS0FBSztBQUN0QyxRQUFJLFVBQVUsS0FBSyxLQUFLLE9BQU8sYUFBYSxJQUFJLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxRQUFRO0FBQUEsRUFDeEU7QUFDQSxTQUFPLFlBQVksU0FBUyxLQUFLLEtBQUs7QUFDcEMsUUFBSSxVQUFVLEtBQUssS0FBSyxPQUFPLFdBQVcsSUFBSSxFQUFFLEdBQUc7QUFBQSxFQUNyRDtBQUNBLFNBQU8sZUFBZSxTQUFTLEtB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QUFDLEVBQ2hFLEdBQUcsTUFBTSxjQUFjO0FBRTVCLGlCQUFPLHdCQUF3QixJQUFJLEVBQUUsUUFBUSxPQUFPLENBQUMsRUFDaEQsR0FBRyxNQUFNLEtBQUs7QUFFbkIsZUFBSztBQUFBLFFBRVQsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNO0FBQ2QsZUFBSyxDQUFDO0FBQUEsUUFDUixDQUFDO0FBQUEsTUFHTCxDQUFDO0FBQUEsSUFDTCxDQUFDO0FBQUEsRUFHTCxDQUFDOyIsCiAgIm5hbWVzIjogWyJ0eXBlIiwgInR5cGUiLCAiYSIsICJTdG9yYWdlIiwgInNlbGYiLCAibm9kZSIsICJhZGRlZE5vZGVzIiwgIl9hIiwgImdldCIsICJhIiwgIm9wdGlvbnMiLCAiQnVmZmVyU291cmNlQ29udmVydGVyIiwgInR5cGUiLCAiYSIsICJzaXplIiwgIm9mZnNldCIsICJDb252ZXJ0IiwgImNvbWJpbmUiLCAicmV0QnVmIiwgInJldFZpZXciLCAiQm9vbGVhbiIsICJTZXQiLCAiX2EiLCAibWF4IiwgInJldFZpZXciLCAic2l6ZSIsICJ0ZW1wQnVmZmVyVmlldyIsICJvZmZzZXQiLCAiZmxhZyIsICJoZXgiLCAiQXNuVHlwZVR5cGVzIiwgIkFzblByb3BUeXBlcyIsICJpbXBvcnRfcHZ0c3V0aWxzIiwgInR5cGUiLCAiQm9vbGVhbiIsICJfYSIsICJTZXQiLCAib3B0aW9ucyIsICJkZWZhdWx0Q29udmVydGVyIiwgIl9hIiwgIlNldCIsICJTZXQiLCAiaW1wb3J0X3B2dHN1dGlscyIsICJ0eXBlIiwgImlzQ29udmVydGlibGUiLCAic2NoZW1hU3RvcmFnZSIsICJpbml0X2luZGV4X2VzIiwgIkpzb25Qcm9wVHlwZXMiLCAibWluIiwgIm1heCIsICJvcHRpb25zIiwgImltcG9ydF9wdnRzdXRpbHMiLCAiT2JqZWN0SWRlbnRpZmllciIsICJpbml0X2luZGV4X2VzIiwgIm9mZnNldCIsICJvcHRpb25zIiwgImZvcm1hdCIsICJfYSIsICJ0eXBlIiwgIkVjUHVibGljS2V5IiwgInNpemUiLCAiRWRQcml2YXRlS2V5IiwgIkVkUHVibGljS2V5IiwgIkN1cnZlUHJpdmF0ZUtleSIsICJsZW4iLCAiaSIsICJzdGFydCIsICJlbmQiLCAibGVuMiIsICJvZmZzZXQiLCAiQnVmZmVyIiwgImlzSW5zdGFuY2UiLCAic2l6ZSIsICJhIiwgImNvbmNhdCIsICJzdGFydCIsICJlbmQiLCAidG9TdHJpbmciLCAiaW5zcGVjdCIsICJtYXgiLCAicmVhZCIsICJpIiwgIm9mZnNldCIsICJ3cml0ZSIsICJieXRlTGVuZ3RoIiwgIm1pbiIsICJ0eXBlIiwgIkNyeXB0byIsICJCdWZmZXIkMSIsICJhIiwgImNyeXB0byIsICJzdGFydCIsICJlbmQiLCAicHJvY2VzcyIsICJpbXBvcnRfcHZ0c3V0aWxzIiwgIkNyeXB0b0tleSIsICJBZXNDYmNQcm92aWRlciIsICJBZXNDbWFjUHJvdmlkZXIiLCAiQWVzQ3RyUHJvdmlkZXIiLCAiQWVzR2NtUHJvdmlkZXIiLCAiQWVzS3dQcm92aWRlciIsICJBZXNFY2JQcm92aWRlciIsICJSc2FQcml2YXRlS2V5IiwgIlJzYVB1YmxpY0tleSIsICJSc2FTc2FQcm92aWRlciIsICJSc2FQc3NQcm92aWRlciIsICJSc2FPYWVwUHJvdmlkZXIiLCAiRWNQcml2YXRlS2V5IiwgIkVjUHVibGljS2V5IiwgIkVjZHNhUHJvdmlkZXIiLCAiRWNkaFByb3ZpZGVyIiwgIkVkUHJpdmF0ZUtleSIsICJFZFB1YmxpY0tleSIsICJFZERzYVByb3ZpZGVyIiwgIkVjZGhFc1Byb3ZpZGVyIiwgIkVkMjU1MTlQcm92aWRlciIsICJYMjU1MTlQcm92aWRlciIsICJQYmtkZjJQcm92aWRlciIsICJIbWFjUHJvdmlkZXIiLCAiSGtkZlByb3ZpZGVyIiwgIlNoYWtlMTI4UHJvdmlkZXIiLCAiU2hha2UyNTZQcm92aWRlciIsICJTdWJ0bGVDcnlwdG8iLCAiaW5pdF9pbmRleF9lcyIsICJmb3JtYXQiLCAib3B0aW9ucyIsICJoYXNoIiwgInR5cGUiLCAiX2EiLCAiaW5pdF9lbnVtcyIsICJuYW1lIiwgInN0eWxlIiwgImdldENvbXB1dGVkU3R5bGUiLCAiZ2V0Q29tcHV0ZWRTdHlsZSIsICJ3aW5kb3ciLCAibWluIiwgIm1heCIsICJvcHRpb25zIiwgInBvcHBlck9mZnNldHMiLCAibWluIiwgIm1heCIsICJvZmZzZXQiLCAiZWZmZWN0IiwgImluaXRfZW51bXMiLCAidG9QYWRkaW5nT2JqZWN0IiwgInBvcHBlciIsICJnZXRDb21wdXRlZFN0eWxlIiwgIm9wdGlvbnMiLCAiaW5pdF9lbnVtcyIsICJlZmZlY3QiLCAib3B0aW9ucyIsICJ3aW5kb3ciLCAiaGFzaCIsICJnZXRDb21wdXRlZFN0eWxlIiwgImdldENvbXB1dGVkU3R5bGUiLCAiY2xpcHBpbmdQYXJlbnRzIiwgImdldENvbXB1dGVkU3R5bGUiLCAiaW5pdF9lbnVtcyIsICJyZWZlcmVuY2UiLCAiaW5pdF9lbnVtcyIsICJvcHRpb25zIiwgInBvcHBlck9mZnNldHMiLCAib2Zmc2V0IiwgImluaXRfZW51bXMiLCAib3B0aW9ucyIsICJwbGFjZW1lbnRzIiwgInBsYWNlbWVudCIsICJhIiwgImluaXRfZW51bXMiLCAib3B0aW9ucyIsICJwbGFjZW1lbnRzIiwgInBsYWNlbWVudCIsICJfbG9vcCIsICJfaSIsICJjaGVja3MiLCAiaW5pdF9lbnVtcyIsICJoaWRlIiwgImluaXRfZW51bXMiLCAib2Zmc2V0IiwgIm9wdGlvbnMiLCAiaW5pdF9lbnVtcyIsICJvcHRpb25zIiwgInBvcHBlck9mZnNldHMiLCAib2Zmc2V0IiwgIm1pbiIsICJtYXgiLCAiaW5pdF9lbnVtcyIsICJpbml0X2VudW1zIiwgImZuIiwgIm1lcmdlZCIsICJkZWZhdWx0TW9kaWZpZXJzIiwgImNyZWF0ZVBvcHBlciIsICJyZWZlcmVuY2UiLCAicG9wcGVyIiwgIm9wdGlvbnMiLCAiZm4iLCAic3RhdGUiLCAiZWZmZWN0IiwgIm5vb3BGbiIsICJpbml0X2VudW1zIiwgInN5bWJvbCIsICJpbml0IiwgImEiLCAiaW5pdF9jb25zdGFudHMiLCAic3ltYm9sIiwgImluaXRfY29uc3RhbnRzIiwgImRvY3VtZW50IiwgImdldFdpbmRvdyIsICJ3aW5kb3ciLCAiZG9jdW1lbnQiLCAiaW5pdF9sb2NhbGUiLCAibmF2aWdhdG9yIiwgIm9wdGlvbnMiLCAiaW5pdF9sb2NhbGUiLCAiaW5pdF9jb25zdGFudHMiLCAiY29uc29sZSIsICJjb25jYXQiLCAic3RhcnQiLCAiZW5kIiwgIm9wdGlvbnMiLCAic2V0IiwgInRvZ2dsZSIsICJpbml0X2xvY2FsZSIsICJERUxJTUlURVIiLCAib3B0aW9ucyIsICJ0eXBlIiwgImEiLCAiaW50ZXJuYWwiLCAic2VsZiIsICJkb2N1bWVudCIsICJpbml0X2NvbnN0YW50cyIsICJkb2N1bWVudCIsICJIVE1MVGVtcGxhdGVFbGVtZW50IiwgIkRvY3VtZW50RnJhZ21lbnQiLCAiRG9jdW1lbnQiLCAiaW5pdF9jb25zdGFudHMiLCAiYSIsICJ0eXBlIiwgImRpZmYiLCAiZ2V0T3BlcmF0b3IiLCAidHlwZSIsICJkb2N1bWVudCIsICJvcHRpb25zIiwgInZhbHVlIiwgInR5cGUiLCAiZSIsICJpIiwgInN5bWJvbCIsICJjb25maWciLCAiaW5pdF9jb25zdGFudHMiLCAiZ2V0V2luZG93IiwgIm9wdGlvbnMiLCAib3B0aW9ucyIsICJzZWxmIiwgImZsYWciLCAib3B0aW9ucyIsICJjdXN0b21FbGVtZW50cyIsICJpbml0X2NvbnN0YW50cyIsICJtaW4iLCAibWF4IiwgImdsb2JhbFJlZmVyZW5jZSIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X2NvbnN0YW50cyIsICJvcHRpb25zIiwgInQiLCAiaW5pdF90aGVtZSIsICJpbml0X2NvbnN0YW50cyIsICJvcHRpb25zIiwgImluaXRfcG9wcGVyIiwgInR5cGUiLCAic2VsZiIsICJvcHRpb25zIiwgInNob3ciLCAicmVmZXJlbmNlIiwgImluaXRfdGFicyIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X3RoZW1lIiwgImluaXRfcG9wcGVyIiwgImRvY3VtZW50IiwgImluaXRfY29uc3RhbnRzIiwgIm9wdGlvbnMiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgImNvbnRyb2xFbGVtZW50U3ltYm9sIiwgImdldFRlbXBsYXRlIiwgImluaXRfbWVzc2FnZSIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X2NvbnN0YW50cyIsICJpbml0T3B0aW9uc0Zyb21Bcmd1bWVudHMiLCAib3B0aW9ucyIsICJpbml0Q29udHJvbFJlZmVyZW5jZXMiLCAiY29udHJvbEVsZW1lbnRTeW1ib2wiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9ub3RpZnkiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9tZXNzYWdlIiwgImluaXRfY29uc3RhbnRzIiwgImluaXRDb250cm9sUmVmZXJlbmNlcyIsICJpbml0RXZlbnRIYW5kbGVyIiwgInNlbGYiLCAibWluIiwgIm1heCIsICJhcHBseSIsICJnZXRUZW1wbGF0ZSIsICJpbml0X3NwbGl0X3BhbmVsIiwgImluaXRfbm90aWZ5IiwgImluaXRfY29uc3RhbnRzIiwgImF0dGFjaFJlc2l6ZU9ic2VydmVyIiwgInJlc2l6ZU9ic2VydmVyU3ltYm9sIiwgInRpbWVyQ2FsbGJhY2tTeW1ib2wiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgImluaXRFdmVudEhhbmRsZXIiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9wYW5lbCIsICJpbml0T3B0aW9uc0Zyb21Bcmd1bWVudHMiLCAib3B0aW9ucyIsICJvYnNlcnZlciIsICJsb2FkQ29udGVudCIsICJnZXRUZW1wbGF0ZSIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X2NvbnN0YW50cyIsICJpbml0RXZlbnRIYW5kbGVyIiwgInNlbGYiLCAidHlwZSIsICJpbml0Q29udHJvbFJlZmVyZW5jZXMiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9idXR0b24iLCAiaW5pdF9jb25zdGFudHMiLCAib3B0aW9ucyIsICJpbml0X2NvbnN0YW50cyIsICJpbnRlcm5hbFN5bWJvbCIsICJnZXRUZW1wbGF0ZSIsICJpbml0X3N0YXRlX2J1dHRvbiIsICJpbml0X2J1dHRvbiIsICJzdHlsZXMiLCAiYSIsICJzdGFydCIsICJlbmQiLCAibWF4IiwgIm1pbiIsICJnZXRPcHBvc2l0ZVBsYWNlbWVudCIsICJyZWN0VG9DbGllbnRSZWN0IiwgInBsYWNlbWVudHMiLCAicm91bmQiLCAicmVmZXJlbmNlIiwgImRldGVjdE92ZXJmbG93IiwgIm9wdGlvbnMiLCAicGxhdGZvcm0iLCAicmVjdFRvQ2xpZW50UmVjdCIsICJhcnJvdyIsICJmbGlwIiwgIm9mZnNldCIsICJjb25maWciLCAiZm4iLCAibWluIiwgIm1heCIsICJwbGFjZW1lbnRzIiwgImFsaWdubWVudCIsICJhIiwgImdldE9wcG9zaXRlUGxhY2VtZW50IiwgInNpZGVzIiwgInNpZGUiLCAicGxhY2VtZW50IiwgIm92ZXJmbG93IiwgIngiLCAieSIsICJhcHBseSIsICJnZXROb2RlTmFtZSIsICJpc05vZGUiLCAiZ2V0V2luZG93IiwgImdldERvY3VtZW50RWxlbWVudCIsICJpc0VsZW1lbnQiLCAiaXNIVE1MRWxlbWVudCIsICJpc1NoYWRvd1Jvb3QiLCAiZ2V0Q29tcHV0ZWRTdHlsZSIsICJpc1RhYmxlRWxlbWVudCIsICJnZXRDb250YWluaW5nQmxvY2siLCAiZ2V0UGFyZW50Tm9kZSIsICJnZXROb2RlU2Nyb2xsIiwgImdldENvbXB1dGVkU3R5bGUiLCAiaXNIVE1MRWxlbWVudCIsICJyb3VuZCIsICJpc0VsZW1lbnQiLCAiZ2V0V2luZG93IiwgImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsICJsZWZ0IiwgInRvcCIsICJyZWN0VG9DbGllbnRSZWN0IiwgImdldFdpbmRvd1Njcm9sbEJhclgiLCAiZ2V0Tm9kZVNjcm9sbCIsICJnZXREb2N1bWVudEVsZW1lbnQiLCAiZ2V0Tm9kZU5hbWUiLCAiZ2V0RG9jdW1lbnRSZWN0IiwgIm1heCIsICJnZXRWaWV3cG9ydFJlY3QiLCAiZ2V0SW5uZXJCb3VuZGluZ0NsaWVudFJlY3QiLCAiZ2V0UGFyZW50Tm9kZSIsICJnZXRDbGlwcGluZ1JlY3QiLCAibWluIiwgImdldFRydWVPZmZzZXRQYXJlbnQiLCAiZ2V0T2Zmc2V0UGFyZW50IiwgImlzVGFibGVFbGVtZW50IiwgImdldENvbnRhaW5pbmdCbG9jayIsICJvcHRpb25zIiwgInJlZmVyZW5jZSIsICJkZXRlY3RPdmVyZmxvdyIsICJvZmZzZXQiLCAiYXV0b1BsYWNlbWVudCIsICJzaGlmdCIsICJmbGlwIiwgInNpemUiLCAiYXJyb3ciLCAiY29tcHV0ZVBvc2l0aW9uIiwgIm9wdGlvbnMiLCAiY29uZmlnIiwgImZuIiwgImZsaXAiLCAic2hpZnQiLCAibGluZSIsICJhdXRvUGxhY2VtZW50IiwgImRldGVjdE92ZXJmbG93IiwgImFycm93IiwgInNpemUiLCAib2Zmc2V0IiwgImNvbXB1dGVQb3NpdGlvbiIsICJ4IiwgInkiLCAiaW5pdF9jb25zdGFudHMiLCAicG9wcGVyRWxlbWVudFN5bWJvbCIsICJzZWxmIiwgImluaXRPcHRpb25zRnJvbUFyZ3VtZW50cyIsICJvcHRpb25zIiwgImF0dGFjaFJlc2l6ZU9ic2VydmVyIiwgInJlc2l6ZU9ic2VydmVyU3ltYm9sIiwgInRpbWVyQ2FsbGJhY2tTeW1ib2wiLCAiZGlzY29ubmVjdFJlc2l6ZU9ic2VydmVyIiwgIm9ic2VydmVyIiwgInJ1biIsICJzaG93IiwgImhpZGUiLCAiaW5pdE9wdGlvbk9ic2VydmVyIiwgIm1heCIsICJzdHlsZXMiLCAiY29udHJvbEVsZW1lbnRTeW1ib2wiLCAiZm9jdXNGaWx0ZXIiLCAidHlwZSIsICJhIiwgImdsb2JhbCIsICJpbml0RXZlbnRIYW5kbGVyIiwgImNsb3NlRXZlbnRIYW5kbGVyIiwgImVsZW1lbnQiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgImNvbnRhaW5lckVsZW1lbnRTeW1ib2wiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9zZWxlY3QiLCAiaW5pdF9jb25zdGFudHMiLCAiZG9jdW1lbnQiLCAiZmxhZyIsICJpbml0X3BvcHBlciIsICJpbml0X2NvbnN0YW50cyIsICJpbml0RXZlbnRIYW5kbGVyIiwgImNsb3NlRXZlbnRIYW5kbGVyIiwgImhpZGUiLCAiYnV0dG9uRWxlbWVudFN5bWJvbCIsICJhdHRhY2hSZXNpemVPYnNlcnZlciIsICJyZXNpemVPYnNlcnZlclN5bWJvbCIsICJ0aW1lckNhbGxiYWNrU3ltYm9sIiwgInVwZGF0ZVBvcHBlciIsICJkaXNjb25uZWN0UmVzaXplT2JzZXJ2ZXIiLCAic2VsZiIsICJwb3BwZXJFbGVtZW50U3ltYm9sIiwgImNvbnRyb2xFbGVtZW50U3ltYm9sIiwgInNob3ciLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgImdldFRlbXBsYXRlIiwgImluaXRfcG9wcGVyIiwgImluaXRfY29uc3RhbnRzIiwgImRvY3VtZW50IiwgInR5cGUiLCAiUG9wcGVyIiwgImluaXRfcG9wcGVyIiwgImluaXRfY29uc3RhbnRzIiwgImluaXRFdmVudEhhbmRsZXIiLCAiY2xvc2VFdmVudEhhbmRsZXIiLCAiYXR0YWNoUmVzaXplT2JzZXJ2ZXIiLCAicmVzaXplT2JzZXJ2ZXJTeW1ib2wiLCAidGltZXJDYWxsYmFja1N5bWJvbCIsICJ1cGRhdGVQb3BwZXIiLCAiZGlzY29ubmVjdFJlc2l6ZU9ic2VydmVyIiwgInBvcHBlckVsZW1lbnRTeW1ib2wiLCAiY29udHJvbEVsZW1lbnRTeW1ib2wiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgImJ1dHRvbkVsZW1lbnRTeW1ib2wiLCAiYXJyb3dFbGVtZW50U3ltYm9sIiwgImdldFRlbXBsYXRlIiwgImluaXRfcG9wcGVyX2J1dHRvbiIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X3BvcHBlciIsICJpbml0X2J1dHRvbiIsICJQb3BwZXIiLCAic3R5bGVzIiwgImRvY3VtZW50IiwgInR5cGUiLCAib3B0aW9ucyIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X2NvbnN0YW50cyIsICJpbml0RXZlbnRIYW5kbGVyQnlNb2RlIiwgImJ1dHRvbkVsZW1lbnRTeW1ib2wiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgImdldFRlbXBsYXRlIiwgImluaXRfbWVzc2FnZV9zdGF0ZV9idXR0b24iLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9wb3BwZXIiLCAiaW5pdF9zdGF0ZV9idXR0b24iLCAiUG9wcGVyIiwgInN0eWxlcyIsICJvcHRpb25zIiwgInR5cGUiLCAic2VsZiIsICJpbml0RXZlbnRoYW5kbGVyIiwgImluaXRDb250cm9sUmVmZXJlbmNlcyIsICJnZXRUZW1wbGF0ZSIsICJpbml0X2NvbmZpcm1fYnV0dG9uIiwgImluaXRfY29uc3RhbnRzIiwgImluaXRfYnV0dG9uIiwgImluaXRfcG9wcGVyX2J1dHRvbiIsICJpbml0X21lc3NhZ2Vfc3RhdGVfYnV0dG9uIiwgInN0eWxlcyIsICJwYXJzZU9wdGlvbnNKU09OIiwgIm9wdGlvbnMiLCAiaW5pdF9jb25zdGFudHMiLCAiRGF0YXNvdXJjZSIsICJpbml0X2RhdGFzb3VyY2UiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF91dGlsIiwgImluaXRfY29uc3RhbnRzIiwgImluaXRFdmVudEhhbmRsZXIiLCAib3B0aW9ucyIsICJjb25maWciLCAib2JzZXJ2ZXIiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9kYXRhc2V0IiwgImluaXRfY29uc3RhbnRzIiwgImluaXRfZGF0YXNvdXJjZSIsICJpbml0X3V0aWwiLCAiRGF0YXNvdXJjZSIsICJGb3JtU3R5bGVTaGVldCIsICJpbml0X2Zvcm0iLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdEV2ZW50SGFuZGxlciIsICJlIiwgImluaXRDb250cm9sUmVmZXJlbmNlcyIsICJnZXRUZW1wbGF0ZSIsICJpbml0X2Zvcm0iLCAiaW5pdF9kYXRhc2V0IiwgImluaXRfdXRpbCIsICJGb3JtU3R5bGVTaGVldCIsICJOb2RlTGlzdCIsICJOb2RlIiwgInNlbGYiLCAiTm9kZSIsICJOb2RlTGlzdCIsICJvcHRpb25zIiwgIk5vZGUiLCAiTm9kZUxpc3QiLCAiTm9kZUxpc3QiLCAiTm9kZSIsICJpbml0X2NvbnN0YW50cyIsICJoYW5kbGVPcHRpb25LZXlib2FyZEV2ZW50cyIsICJOb2RlIiwgImluaXRFdmVudEhhbmRsZXIiLCAiYSIsICJrZXlFdmVudEhhbmRsZXIiLCAiaW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzIiwgIm9wdGlvbnMiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF90cmVlX3NlbGVjdCIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X3NlbGVjdCIsICJpbml0X2NvbnN0YW50cyIsICJpbml0Q29udHJvbFJlZmVyZW5jZXMiLCAic3dpdGNoRWxlbWVudFN5bWJvbCIsICJpbml0RXZlbnRIYW5kbGVyIiwgInNlbGYiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF90b2dnbGVfc3dpdGNoIiwgImluaXRfY29uc3RhbnRzIiwgIlRlbXBsYXRlIiwgImluaXRPcHRpb25zRnJvbUFyZ3VtZW50cyIsICJvcHRpb25zIiwgImluaXRJbnRlcnNlY3Rpb25PYnNlcnZlciIsICJpbnRlcnNlY3Rpb25PYnNlcnZlcldhc0luaXRpYWxpemVkIiwgIm9ic2VydmVyIiwgImxvYWRDb250ZW50IiwgImdldFRlbXBsYXRlIiwgImluaXRfdGVtcGxhdGUiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9jb25zdGFudHMiLCAib3B0aW9ucyIsICJkb2N1bWVudCIsICJ3aW5kb3ciLCAiZ2V0V2luZG93IiwgIm9wdGlvbnMiLCAib3B0aW9ucyIsICJwYXJzZU9wdGlvbnNKU09OIiwgIktFWV9ET0NVTUVOVCIsICJpbml0X2NvbnN0YW50cyIsICJvcHRpb25zIiwgInNlbGYiLCAiZG9jdW1lbnQiLCAiS0VZX0RPQ1VNRU5UIiwgImFwcGVuZFRvRG9jdW1lbnQiLCAiaW5pdF9jb25zdGFudHMiLCAic2VsZiIsICJjcmVhdGVFbGVtZW50IiwgImRvY3VtZW50IiwgIktFWV9ET0NVTUVOVCIsICJpbml0X2NvbnN0YW50cyIsICJjcmVhdGVFbGVtZW50IiwgImRvY3VtZW50IiwgIktFWV9ET0NVTUVOVCIsICJpbml0X2NvbnN0YW50cyIsICJ0eXBlIiwgIm9wdGlvbnMiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9jb25zdGFudHMiLCAid2luZG93IiwgImdldFdpbmRvdyIsICJ2ZXJzaW9uIiwgImV2ZW50IiwgImdldFRlbXBsYXRlIiwgImluaXRfY29uZmlnX21hbmFnZXIiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgImluaXRFdmVudEhhbmRsZXIiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9ob3N0IiwgImluaXRfbm90aWZ5IiwgImluaXRfbG9jYWxlIiwgImluaXRfY29uZmlnX21hbmFnZXIiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgIm92ZXJsYXlFbGVtZW50U3ltYm9sIiwgImluaXRFdmVudEhhbmRsZXIiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9vdmVybGF5IiwgImluaXRfbm90aWZ5IiwgImluaXRfY29uc3RhbnRzIiwgImdldFdpbmRvdyIsICJpbml0X3V0aWwiLCAiaW5pdF9jb25zdGFudHMiLCAiQVRUUklCVVRFX0JVVFRPTl9MQUJFTCIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X2NvbnN0YW50cyIsICJyZXNpemVPYnNlcnZlclN5bWJvbCIsICJpbml0RXZlbnRIYW5kbGVyIiwgImluaXRDb250cm9sUmVmZXJlbmNlcyIsICJjb250cm9sRWxlbWVudFN5bWJvbCIsICJkb2N1bWVudCIsICJ0aW1lckNhbGxiYWNrU3ltYm9sIiwgImdldFRlbXBsYXRlIiwgImluaXRfY29sbGFwc2UiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9ob3N0IiwgImluaXRfdXRpbCIsICJpbml0Q29udHJvbFJlZmVyZW5jZXMiLCAiYnV0dG9uRWxlbWVudFN5bWJvbCIsICJpbml0RXZlbnRIYW5kbGVyIiwgIkFUVFJJQlVURV9CVVRUT05fTEFCRUwiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9kZXRhaWxzIiwgImluaXRfY29uc3RhbnRzIiwgImluaXRfdXRpbCIsICJpbml0X2NvbGxhcHNlIiwgIkRldGFpbHMiLCAiaW5pdF9kZXRhaWxzIiwgImludGVybmFsQ291bnRlciIsICJfX2RlZlByb3AiLCAiX19nZXRPd25Qcm9wTmFtZXMiLCAiX19jb21tb25KUyIsICJfX3JlcXVpcmUiLCAiX19leHBvcnQiLCAiaXNOYU4yIiwgIm9wdGlvbnMiLCAiZW5kIiwgInNpemUiLCAiaXNOYU4iLCAiZXNjYXBlIiwgImlzUHJpbWl0aXZlIiwgImZuIiwgImEiLCAiaXNPYmplY3QiLCAic3RhcnQiLCAiY29udGFpbnMiLCAiZmxhZyIsICJpc0hUTUxFbGVtZW50IiwgImNvbnRhaW5zIiwgIm9wdGlvbnMiLCAid2luZG93IiwgIlN0b3JhZ2UiLCAiZXhwZWN0IiwgImdsb2JhbCIsICJUYWJzIiwgIkNyeXB0byIsICJleHBlY3QiLCAiZ2xvYmFsIiwgImh0bWwxIiwgIkNyeXB0byIsICJTcGxpdFNjcmVlbiIsICJleHBlY3QiLCAiZ2xvYmFsIiwgImh0bWwxIiwgIlNwbGl0U2NyZWVuIiwgIkNyeXB0byIsICJnbG9iYWwiLCAib3B0aW9ucyIsICJleHBlY3QiLCAiZ2xvYmFsIiwgImh0bWwxIiwgIlJlbG9hZCIsICJ2aWV3cG9ydCIsICJmZXRjaFJlZmVyZW5jZSIsICJvcHRpb25zIiwgImV4cGVjdCIsICJnbG9iYWwiLCAiaHRtbDEiLCAiU3RhdGVCdXR0b24iLCAib3B0aW9ucyIsICJleHBlY3QiLCAiZ2xvYmFsIiwgImh0bWwxIiwgImh0bWwyIiwgIlNlbGVjdCIsICJvcHRpb25zIiwgImUiLCAiYSIsICJleHBlY3QiLCAiZ2xvYmFsIiwgImh0bWwxIiwgImh0bWwyIiwgIkNvbmZpcm1CdXR0b24iLCAic2VsZiIsICJleHBlY3QiLCAiaHRtbDEiLCAiaHRtbDIiLCAiZm9ybSIsICJleHBlY3QiLCAiZ2xvYmFsIiwgImh0bWwxIiwgImh0bWwyIiwgIlRyZWVTZWxlY3QiLCAiZmV0Y2hSZWZlcmVuY2UiLCAib3B0aW9ucyIsICJlIiwgImV4cGVjdCIsICJnbG9iYWwiLCAiaHRtbDEiLCAiaHRtbDIiLCAiQnV0dG9uIiwgIm9wdGlvbnMiLCAiZXhwZWN0IiwgImdsb2JhbCIsICJodG1sMSIsICJodG1sMiIsICJUb2dnbGVTd2l0Y2giLCAiZXhwZWN0IiwgImdsb2JhbCIsICJtb2NraW50ZXJzZWN0aW9ub2JzZXJ2ZXIiLCAiaHRtbDEiLCAiVGVtcGxhdGUiLCAidmlld3BvcnQiLCAiZmV0Y2hSZWZlcmVuY2UiLCAib3B0aW9ucyIsICJleHBlY3QiLCAiTWVzc2FnZSIsICJleHBlY3QiLCAiTm90aWZ5IiwgIk5vdGlmeSIsICJleHBlY3QiLCAibXV0YXRpb25vYnNlcnZlciIsICJleHBlY3QiLCAiZ2xvYmFsIiwgImh0bWwxIiwgImV4cGVjdCIsICJnbG9iYWwiLCAiaHRtbDEiLCAiaW5pdF91dGlsIiwgImV4cGVjdCIsICJnbG9iYWwiLCAiaHRtbDEiLCAiYSIsICJvcHRpb25zIiwgInN0YXJ0IiwgImVuZCIsICJvcHRpb25zIiwgInJhbmRvbSIsICJhIiwgIm1heCIsICJhIiwgImRpZmYiLCAiYSIsICJhIiwgImEiLCAiY29uc29sZSIsICJhIiwgImEiLCAiaGFuZGxlciIsICJNZXNzYWdlIiwgInNlbGYiLCAiTWVzc2FnZSIsICJvcHRpb25zIiwgImlzTm9kZSIsICJNZXNzYWdlIiwgIk1lc3NhZ2UiLCAidmVyc2lvbiIsICJhIiwgIm1vbnN0ZXJWZXJzaW9uIiwgImdldFdpbmRvdyIsICJnZXRXaW5kb3ciLCAiaW5pdCIsICJleHBlY3QiLCAiZXhwZWN0IiwgImV4cGVjdCIsICJleHBlY3QiLCAiZXhwZWN0IiwgImV4cGVjdCIsICJmZXRjaFJlZmVyZW5jZSIsICJtdXRhdGlvbm9ic2VydmVyIiwgImFkZGVkTm9kZXMiLCAib3B0aW9ucyIsICJleHBlY3QiLCAiZSIsICJvcHRpb25zIiwgImluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMiLCAiZ2xvYmFsIiwgImEiLCAiZXhwZWN0IiwgImh0bWwxIiwgImh0bWwyIiwgIlVwZGF0ZXIiLCAib3B0aW9ucyIsICJ2IiwgImEiLCAiaW5pdF9sb2NhbGUiLCAiYSIsICJleHBlY3QiLCAiaHRtbDEiLCAiaHRtbDIiLCAiQ3VzdG9tRWxlbWVudCIsICJyZWdpc3RlckN1c3RvbUVsZW1lbnQiLCAiZG9jdW1lbnQiLCAiYWRkT2JqZWN0V2l0aFVwZGF0ZXJUb0VsZW1lbnQiLCAib3B0aW9ucyIsICJhIiwgInNldCIsICJ2IiwgIndpbmRvd1JlYWR5IiwgImRvbVJlYWR5IiwgImdldFdpbmRvdyIsICJhIiwgImV4cGVjdCIsICJDdXN0b21FbGVtZW50IiwgInJlZ2lzdGVyQ3VzdG9tRWxlbWVudCIsICJkb2N1bWVudCIsICJjb250cm9sIiwgImh0bWwxIiwgImh0bWwyIiwgImh0bWwzIiwgInN5bWJvbCIsICJhIiwgIlJlc291cmNlIiwgImZldGNoUmVmZXJlbmNlIiwgIm9wdGlvbnMiLCAiZXhwZWN0IiwgImh0bWwxIiwgIkN1c3RvbUNvbnRyb2wiLCAicmVnaXN0ZXJDdXN0b21FbGVtZW50IiwgImRvY3VtZW50IiwgIm0iLCAiaW5pdF9jb25zdGFudHMiLCAiYSIsICJvcHRpb25zIiwgImRvRGlmZiIsICJ0eXBlIiwgIldlYkNvbm5lY3QiLCAib3B0aW9ucyIsICJNZXNzYWdlIiwgInRlc3RVcmwiLCAiV2ViQ29ubmVjdCIsICJjbG9uZSIsICJvcHRpb25zIiwgImluaXQiLCAiZmV0Y2hEYXRhIiwgImZldGNoUmVmZXJlbmNlIiwgIm9wdGlvbnMiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiaSIsICJhIiwgImluaXRfbG9jYWxlIiwgImlzTm9kZSIsICJhIiwgImIiLCAiYyIsICJodG1sMSIsICJhIiwgIk5vZGVMaXN0IiwgImEiLCAiYSIsICJhIiwgImh0bWwxIiwgImEiLCAic2VsZiIsICJhIiwgImEiLCAiYSIsICJOb2RlTGlzdCIsICJOb2RlIiwgImEiLCAiYSIsICJhIiwgImEiLCAiYSIsICJhIiwgImEiLCAibWF4IiwgImEiLCAiUmFuZG9tSUQiLCAiVVVJRCIsICJhIiwgIkJhc2UiLCAiYSIsICJhIiwgIk5vZGVMaXN0IiwgIk5vZGUiLCAiTm9kZSIsICJOb2RlTGlzdCIsICJGb3JtYXR0ZXIiLCAib3B0aW9ucyIsICJGb3JtYXR0ZXIiLCAiYSIsICJhIiwgImluaXRfY29uc3RhbnRzIiwgImh0bWwxIiwgInRyYW5zbGF0aW9uc0xpbmtTeW1ib2wiLCAib3B0aW9ucyIsICJnbG9iYWwiLCAiZmV0Y2hSZWZlcmVuY2UiLCAib3B0aW9ucyIsICJnbG9iYWwiLCAiaHRtbDEiLCAiZSIsICJodG1sMSJdCn0K
 } catch (e) {
 document.getElementById('mocha-errors').insertAdjacentHTML('afterbegin', e );
 document.getElementById('mocha-stats').style.backgroundColor = 'red';